{"version":3,"sources":["LangSettings.js","store/reducer.js","AppOuter.js","serviceWorker.js","index.js","store/actions.js","WBCReactGA.js","mylocalStorage.js","lazyWithRetry.js","Translator/Translations.js","CookieConsent.js"],"names":["GetLang","string","language","lang","window","personalConfig","studLang","boardConfig","parsedLang","JSON","parse","parsedStudLang","sessLang","ll","mylocalStorage","initialState","user","userProfile","undefined","tutorGroup","tutorUsertype","communityUser","authDialog","open","countryCode","clientLoc","BoardConfig","participants","activeUsers","noUser","gvPage","sessionDialog","boardType","name","single","tab","selected","allTabs","assistanceRequest","studentAsked","pendingList","boardChat","started","messages","timer","running","events","boardLocked","locked","allEvents","pageLocked","myev","showCase","dialog","palletDrawer","openCol","ref","richText","object","cb","loc","pendingParticipants","avatarDialogOpen","diceShow","teacher","values","obj","board","followTeacher","set","clockDrift","hideNotification","syncDisabled","drawerWalker","page","gradingWalker","clickMode","mode","ctx","spinnerEvt","fDiceEvt","letItSnowEvt","font","inkColor","dblClickDisable","gridBrowser","pageNum","realTime","groupGridOnly","search","showLabels","hideLabels","matrixGrid","classroom","gridMap","timeMachine","selectedTime","slider","background","color","image","pickerOpen","pickerImageOpen","notmine","boardTools","formSubmit","engagementScore","engagementSticker","meetingToJoin","apiMode","adsEnable","keybMode","enable","lastKey","videoState","modeSelected","mobileModeSelected","videoConfig","pendingSubscriptions","alertMessages","sharedScreen","boardRecording","classPoll","embeddedMode","pageAdding","sharedScreenDialog","gParts","timedOutParticipants","getIdToUse","data","idUse","id","UserProfile","content","jp","localID","setLocal","authid","username","luid","uuid","setLocalPaidPlan","paidPlan","TenantID","pendingRequests","old","req","arr","i","length","splice","State","push","Boolean","pendingChat","state","Content","filter","ff","deleted","pendingFollow","pendingLock","pendingPageLock","rt","Actions","ev","pendingShowCase","readOnlyShowCase","isObject","compareParticipant","object1","object2","partId","keys1","Object","keys","keys2","curTime","Date","getTime","timedOut","key","obj1","obj2","KEEPALIVE_TIMEOUT_SECONDS","checkIfPartsUpdateNeeded","newParts","removeMSTeamsEmail","em","email","includes","split","replace","pendingTimer","processDice","e","classDice","teacherDice","rollerName","inval","value","inval2","Array","isArray","processSpinner","myTime","evtTime","createdAt","Math","abs","processFdice","processLetItSnow","formSubmitprocess","processScore","dataIn","eng","max","scoreData","calc","calculated","trendown","c","current","per","peak","samp","samples","avg","trenddown","prev","percent","k","kk","v","checkAds","profile","st","isFree","isStudent","processPoll","d","cp","question","forEach","q","mainReducer","action","type","ar","shift","appMode","ad","pc","setLangauge","val","pp","rr","stringify","remind","jj","ppp","oper","idx","item","fdiceEvt","HomePage","lazyWithRetry","App","store","createStore","reducer","__REDUX_DEVTOOLS_EXTENSION__","theme","createMuiTheme","palette","primary","purple","secondary","main","status","danger","typography","fontSize","overrides","MuiCssBaseline","width","height","backgroundColor","borderRadius","AppOuter","props","useCookies","cookies","React","useEffect","wbcAnalyticsCC","WBCReactGA","CookiesProvider","defaultSetOptions","path","ThemeProvider","fallback","exact","component","console","log","CookieConsent","location","hostname","match","require","ReactDOM","render","StrictMode","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister","catch","error","message","SET_USER","SET_EXP_REMIND","SET_USER_PROFILE","SET_TUTOR_GROUP","SET_TUTOR_USERTYPE","OPEN_AUTH_DIALOG","SET_CONFIG","ADD_PARTICIPANT","REMOVE_PARTICIPANT","FLUSH_PARTICIPANT","PROCESS_PENDING_PARTICIPANTS","AVATAR_DIALOG_OPEN","ADD_ACTIVE","DELETE_ACTIVE","SET_NOUSER","SET_GVPAGE","SET_SESSION_DIALOG","SET_BOARD_TYPE","SET_TAB","SET_TEACHER","SET_COUNTRY","SET_CLIENT_LOC","RAISE_HAND","ASSISTANCE_REQUEST","CHAT_MSG","TIMER_EVENT","BOARD_LOCK","PAGE_LOCK","SET_PALETTE","SHOWCASE","SET_RICH_TEXT","SET_DICE","SET_FOLLOW","SET_CLOCK_DRIFT","SET_NOTIFICATION","SET_SYNC_DISABLED","SET_DRAWER_WALKER","SET_GRADING_WALKER","SET_CLICK_MODE","SET_COMMUNITYUSER","SET_SPINNER_EVENT","SET_PERSONAL_CONFIG","SET_GRID_BROWSER","SET_MATRIX_GRID","SET_LETITSNOW_EVENT","SET_TIME_MACHINE","SET_BACK_GROUND","SET_BOARD_TOOLS","SET_FDICE_EVENT","ALL_EVENTS","FORM_SUBMIT","UPDATE_ENGAGEMENT_SCORE","MEETING_TO_JOIN","SET_API_MODE","SET_ENGAGEMENT_STICKER","SET_KEYB_MODE","SET_VIDEO_STATE","SET_MODE","SET_MOBILE_MODE","SET_ALERT_MESSAGES","POP_ALERT_MESSAGES","SET_VIDEO_CONFIG","PENDING_SUBSCRIPTIONS","SET_SHARED_SCREEN","SET_BOARD_RECORDING","ADD_CLASSPOLL_EVENT","SET_EMBEDDED_MODE","SET_PAGE_ADDING","SET_SHARED_SCREEN_DIALOG","setSharedScreenDialog","setEmbeddedMode","addClassPollEvent","setPageAdding","setBoardRecording","setSharedScreen","setPendingSubsciptions","setVideoConfig","setAlertMessages","popAlertMessage","setMobileMode","setVideoState","setKeyBMode","disableKeyBMode","setEngagementSticker","setApiMode","updateEngagementScore","addFormSubmit","addAllEvents","setBoardTools","setBackGround","setTimeMachine","setMatrixGrid","setGridBrowser","setClickMode","setPersonalConfig","setDrawerWalker","setGradingWalker","setSyncDisabled","setNotification","setDrift","setFollow","showDice","setRichText","setShowcase","setPalette","setBoardLock","setPageLock","setTimerEvent","setRaiseHand","setChatMsg","setTeacher","setCountry","setClientLoc","setBoardType","setTab","setSessionDialog","setGVPage","setNoUser","setUser","setNotificationRemind","setUserProfile","setTutorGroup","setTutorUsertype","openAuthDialog","setBoardConfig","starterMode","fourToolsStudent","addParticipant","flushParticipants","processPendingParticipants","setAvatarDialogOpen","deleteActive","setCommunityUser","spinnerEvent","fDiceEvent","getPageLock","pg","sessID","href","p","pgNum","letItSnowEvent","event","ReactGA","pageview","exception","initializeGA","initialize","debug","initializeGoogleTagManager","w","s","l","f","getElementsByTagName","j","createElement","async","src","parentNode","insertBefore","initializeClarityTagManager","a","r","t","y","arguments","LOCAL_STORAGE","getItem","localStorage","setItem","alert","removeItem","clear","componentImport","lazy","pageHasAlreadyBeenForceRefreshed","reload","Translations","Translate","translated","setCookie","useState","insideMSTeams","setInsideMSTeams","cookiesAccepted","setUTCMilliseconds","now","expires","sameSite","wbcAdsCC","onlyAnalyticsCookiesAccepted","cookiesPanelClosed","microsoftTeams","getContext","context","msHost","app","host","setTimeout","parent","className","mdUp","target","rel","onClick","aria-label","smDown","alt"],"mappings":"6GAAA,WAsBeA,IApBC,SAACC,GACb,IAAIC,EAAW,GACTC,EAAOC,OAAOC,eACdC,EAAWF,OAAOG,YAClBC,EAAaL,GAAQM,KAAKC,MAAMP,GAChCQ,EAAiBL,GAAYG,KAAKC,MAAMJ,GAC1CK,GAAkBA,EAAeC,SACjCV,EAAWS,EAAeC,SAEtBJ,GAAcA,EAAWN,WACzBA,EAAWM,EAAWN,UAG9B,IAAIW,EAAKC,IAAuB,YAIhC,OAHID,IAAIX,EAAWW,GACfX,GAAyB,KAAbA,IACZA,EAAW,MACRA,I,mYCXLa,EAAe,CACjBC,KAAM,KACNC,iBAAaC,EACbC,WAAY,KACZC,cAAe,KACfC,cAAe,KACfC,WAAY,CACRC,MAAM,GAEVC,YAAa,KACbC,UAAW,KACXC,YAAa,GACbC,aAAc,GACdC,YAAa,GACbC,QAAQ,EACRC,OAAQ,EACRC,cAAe,CACXR,MAAM,GAEVS,UAAW,CACPC,KAAM,GACNC,QAAQ,GAEZC,IAAK,CACDC,SAAU,EACVC,QAAS,IAEbC,kBAAmB,CACfC,cAAc,EACdC,YAAa,IAEjBC,UAAW,CACPC,SAAS,EACTC,SAAU,GACVzC,SAAU,MAEd0C,MAAO,CACHC,SAAS,EACTC,OAAQ,IAEZC,YAAa,CACTC,QAAQ,EACRF,OAAQ,IAEZG,UAAW,CACPH,OAAQ,IAEZI,WAAY,CACRJ,OAAQ,GACRE,QAAQ,EACRG,KAAM,MAEVC,SAAU,CACNJ,QAAQ,EACRK,QAAQ,EACRP,OAAQ,IAEZQ,aAAc,CACV/B,MAAM,EACNgC,SAAS,EACTC,IAAK,MAETC,SAAU,CACNlC,MAAM,EACNmC,OAAQ,KACRC,GAAI,KACJC,IAAK,MAETC,oBAAqB,GACrBC,kBAAkB,EAClBC,SAAU,CACNC,QAAS,CACLzC,MAAM,EACN0C,OAAQ,GACRC,IAAK,MAETC,MAAO,CACH5C,MAAM,EACN0C,OAAQ,GACRC,IAAK,OAGbE,cAAe,CACXC,KAAK,EACLvB,OAAQ,IAEZwB,WAAY,EACZN,QAAS,EACTO,kBAAkB,EAClBC,cAAc,EACdC,aAAc,CACVlD,MAAM,EACNmD,KAAM,GAEVC,cAAe,CACXpD,MAAM,EACNmD,KAAM,GAEVE,UAAW,CACPC,KAAM,OACNC,IAAK,QAETC,WAAY,KACZC,SAAU,KACVC,aAAc,KACd5E,eAAgB,CACZ6E,KAAM,SACNC,UAAU,EACVC,iBAAiB,EACjBlF,SAAUY,IAAuB,aAErCuE,YAAa,CACT9D,MAAM,EACN+D,QAAS,EACTC,UAAU,EACVC,eAAe,EACfC,OAAQ,GACRC,WAAY,GACZC,WAAY,IAEhBC,WAAY,CACRC,UAAW,KACXC,QAAS,IAEbC,YAAa,CACTxE,MAAM,EACNgE,UAAU,EACVS,aAAc,KACdC,OAAQ,IAEZC,WAAY,CACRC,MAAO,KACPC,MAAO,KACPC,YAAY,EACZC,iBAAiB,EACjBC,SAAS,GAEbC,WAAY,GACZC,WAAY,CACR3D,OAAQ,IAEZ4D,gBAAiB,GACjBC,kBAAmB,KACnBC,cAAe,KACfC,QAAS,KACTC,WAAW,EACXC,SAAU,CAAEC,QAAQ,EAAOC,QAAS,IACpCC,WAAY,CAAErC,KAAM,QACpBsC,aAAc,KACdC,mBAAoB,CAAE7F,MAAM,GAC5B8F,YAAa,KACbC,qBAAsB,GACtBC,cAAe,CACXhG,MAAM,EACNoB,SAAU,IAEd6E,aAAc,KACdC,eAAgB,KAChBC,UAAW,CACPnG,MAAM,EACNoB,SAAU,IAEdgF,aAAc,KACdC,YAAY,EACZC,mBAAoB,CAChBtG,MAAM,IAIVuG,EAAS,GACTC,EAAuB,GAE3B,SAASC,EAAWC,GAChB,IAAIC,EAAQD,EAAKE,GACjB,GAAIF,EAAKG,YACLF,EAAQD,EAAKG,iBAEb,GAAIH,EAAKI,QAAS,CACd,IAAMC,EAAK7H,KAAKC,MAAMuH,EAAKI,SACvBC,EAAGC,UACHL,EAAQI,EAAGC,SAIvB,OAAOL,EAGX,SAASM,EAASxH,GACd,IAAMyH,EAASzH,EAAOA,EAAK0H,SAAW,KAClCC,EAAO7H,IAAuB,aAUlC,OATK6H,IACDA,EAAOC,cACP9H,IAAuB,YAAa6H,IAEpCF,GAAUE,IAASF,IACnB3H,IAAuB,YAAa2H,GACpC3H,IAAuB,gBAAiB6H,GACxCA,EAAOF,GAEJE,EAGX,SAASE,EAAiB5H,GAClBA,GACKA,EAAY6H,SAGbhI,IAAuB,WAAYG,EAAY6H,UAF/ChI,IAA0B,YAIzBG,EAAY8H,SAGbjI,IAAuB,SAAUG,EAAY8H,UAF7CjI,IAA0B,WAK9BA,IAA0B,YAQlC,SAASkI,EAAgBC,EAAKC,GAE1B,IADA,IAAIC,EAAG,YAAOF,EAAIzG,aACT4G,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAQtB,MALkB,SAAdF,EAAIK,OAAkBJ,EAAIK,KAAKN,GAC1B,CACL3G,aAAckH,QAAQN,EAAIE,OAAS,GACnC7G,YAAa2G,GAIrB,SAASO,EAAYT,EAAKC,EAAKS,GAC3B,IAAIR,EAAG,YAAOF,EAAItG,UAClB,IAAKuG,EAAK,MAAO,CAAExG,SAAS,EAAOC,SAAU,IAC7C,IAAIgG,EAAO7H,IAAuB,aAClC,GAAsB,IAAlB6I,EAAM3F,SAAiBkF,GAAOA,EAAIU,SAAWV,EAAIU,QAAQC,SAEpDX,EAAIU,QAAQC,OAAOlB,GAAO,CAC3B,IAAImB,EAAK,CACLpH,QAAS+G,QAAQN,EAAIE,OAAS,GAC9B1G,SAAUwG,GAEd,OAAQW,EAGhB,IAAK,IAAIV,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAoBtB,MAjBkB,SAAdF,EAAIK,OAAqBL,EAAIa,SAASZ,EAAIK,KAAKN,GAanDY,EAAK,CACDpH,QAAS+G,QAAQN,EAAIE,OAAS,GAC9B1G,SAAUwG,GAKlB,SAASa,EAAcL,EAAOT,GAC1B,IAAKA,EACD,MAAO,CACH7E,KAAK,EACLvB,OAAQ,IAIhB,IADA,IAAIqG,EAAG,YAAOQ,EAAMvF,cAActB,QACzBsG,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAGJ,SAAdF,EAAIK,OAAkBJ,EAAIK,KAAKN,GACnC,IAAIY,EAAK,CACLzF,IAAKoF,QAAQN,EAAIE,OAAS,GAC1BvG,OAAQqG,GAEZ,OAAO,eAAMW,GAEjB,SAAS7G,EAAU0G,EAAOT,GAEtB,IADA,IAAIC,EAAG,YAAOQ,EAAM1G,UAAUH,QACrBsG,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAKtB,OAFAD,EAAIK,KAAKN,GACA,CAAEpG,OAAQqG,GAGvB,SAASc,EAAYN,EAAOT,GACxB,IAAKA,EACD,MAAO,CACHlG,QAAQ,EACRF,OAAQ,IAIhB,IADA,IAAIqG,EAAG,YAAOQ,EAAM5G,YAAYD,QACvBsG,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAQtB,MALkB,SAAdF,EAAIK,OAAkBJ,EAAIK,KAAKN,GAC1B,CACLlG,OAAQyG,QAAQN,EAAIE,OAAS,GAC7BvG,OAAQqG,GAIhB,SAASe,EAAgBP,EAAOT,GAC5B,IAAKA,EACD,MAAO,CACHpG,OAAQ,IAIhB,IADA,IAAIqG,EAAG,YAAOQ,EAAMzG,WAAWJ,QACtBsG,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAGJ,SAAdF,EAAIK,OAAkBJ,EAAIK,KAAKN,GACnC,IAAIY,EAAK,CAAEhH,OAAQqG,GACfgB,EAAKC,KAAoBN,GAG7B,OAFAA,EAAE,OAAaK,EAAGnH,OAClB8G,EAAE,KAAWK,EAAGE,GACRP,EAEZ,SAASQ,EAAgBX,EAAOT,GAC5B,IAAKA,EACD,MAAO,CACHlG,QAAQ,EACRF,OAAQ,IAIhB,IADA,IAAIqG,EAAG,YAAOQ,EAAMvG,SAASN,QACpBsG,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAUtB,MAPkB,SAAdF,EAAIK,OAAkBJ,EAAIK,KAAKN,GAE1B,CACLlG,OAAQyG,QAAQN,EAAIE,OAAS,GAC7BhG,OAAQoG,QAAQN,EAAIE,OAAS,IAAOI,QAAQN,EAAIE,OAAS,IAAMM,EAAMjI,YAAY6I,iBACjFzH,OAAQqG,GAIhB,SAASqB,EAAS9G,GACd,OAAiB,MAAVA,GAAoC,kBAAXA,EAGpC,SAAS+G,EAAmBC,EAASC,EAASC,GAC1C,IAAMC,EAAQC,OAAOC,KAAKL,GACpBM,EAAQF,OAAOC,KAAKJ,GACpBM,GAAU,IAAIC,MAAOC,UACvBC,EAAW,EAEf,GAAIP,EAAMxB,SAAW2B,EAAM3B,OACvB,OAAO,EAGX,cAAgBwB,EAAhB,eAAuB,CAAlB,IAAIQ,EAAG,KACJC,EAAOd,EAASE,EAAQW,IACxBE,EAAOf,EAASG,EAAQU,IAE5B,IAAIC,IAAQC,EAAZ,CAEO,GAAKD,IAASC,GAAUA,IAASD,EACpC,OAAO,EAGX,GAAY,cAARD,GAgBA,IARMJ,EAPQ,IAAIC,KAAKP,EAAQU,KAOJ,IAASG,MAChCJ,EAAW,GAGTrD,EAAqB6C,KACvB7C,EAAqB6C,GAAU,GAG/B7C,EAAqB6C,KAAYQ,EAEjC,OADArD,EAAqB6C,GAAUQ,GACxB,OAER,GAAIV,EAAQW,KAASV,EAAQU,GAChC,OAAO,GAIf,OAAO,EAGX,SAASI,EAAyBC,GAC9B,IAAMb,EAAQC,OAAOC,KAAKjD,GACpBkD,EAAQF,OAAOC,KAAKW,GAE1B,GAAIb,EAAMxB,SAAW2B,EAAM3B,OACvB,OAAO,EAGX,cAAgBwB,EAAhB,eAAuB,CAAlB,IAAIQ,EAAG,KACR,QAAsBnK,IAAlBwK,EAASL,GACT,OAAO,EAGX,IAAKZ,EAAmB3C,EAAOuD,GAC3BK,EAASL,GAAMA,GACf,OAAO,EAIf,OAAO,EAGX,SAASM,EAAmBC,GACxB,IAAIC,EAAQD,EAKZ,OAJIA,GAAMC,EAAMC,SAAS,qBAErBD,GADAA,EAAQA,EAAME,MAAM,KAAK,IACXC,QAAQ,KAAM,MAEzBH,EAEX,SAASI,EAAatC,EAAOT,GACzB,IAAKA,EACD,MAAO,CACHrG,SAAS,EACTC,OAAQ,IAIhB,IADA,IAAIqG,EAAG,YAAOQ,EAAM/G,MAAME,QACjBsG,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAQtB,MALkB,SAAdF,EAAIK,OAAkBJ,EAAIK,KAAKN,GAC1B,CACLrG,QAAS4G,QAAQN,EAAIE,OAAS,GAC9BvG,OAAQqG,GAIhB,SAAS+C,EAAYvC,EAAOwC,GACxB,IAAI5K,GAAO,EACK,SAAZ4K,EAAE5C,QAAkBhI,GAAO,GAC/B,IAAI6K,EAAY,QACZD,EAAEE,cACFD,EAAY,WAEXD,EAAEvC,QAAQ0C,aAAYH,EAAEvC,QAAQ0C,WAAa,IAClD,IAAIC,EAAQJ,EAAEvC,QAAQ4C,MAClBC,EAASC,MAAMC,QAAQJ,GAASA,EAAQ,KAU5C,OATU,2BACH5C,EAAM5F,UADH,kBAELqI,EAAY,CACT7K,KAAMA,EACN2C,IAAKiI,EACLK,MAAOC,EACPH,WAAYH,EAAEvC,QAAQ0C,cAKlC,SAASM,EAAe7H,EAAYoH,EAAG7H,GACnC,IAAMuI,EAAS,IAAI3B,KACb4B,EAAU,IAAI5B,KAAKiB,EAAEY,WAK3B,OAAIC,KAAKC,IAAIJ,EAASC,EAAuB,IAAbxI,GAAqB,IAG1CS,EAEJoH,EAEX,SAASe,EAAalI,EAAUmH,EAAG7H,GAC/B,IAAMuI,EAAS,IAAI3B,KACb4B,EAAU,IAAI5B,KAAKiB,EAAEY,WAK3B,OAAIC,KAAKC,IAAIJ,EAASC,EAAuB,IAAbxI,GAAqB,IAG1CU,EAEJmH,EAEX,SAASgB,EAAiBlI,EAAckH,EAAG7H,GACvC,IAAMuI,EAAS,IAAI3B,KACb4B,EAAU,IAAI5B,KAAKiB,EAAEY,WAC3B,OAAIC,KAAKC,IAAIJ,EAASC,EAAuB,IAAbxI,GAAqB,IAC1CW,EAEJkH,EAEX,SAASiB,EAAkBzD,EAAOT,GAE9B,IADA,IAAIC,EAAG,YAAOQ,EAAMlD,WAAW3D,QACtBsG,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACzBD,EAAIC,GACNjB,KAAOe,EAAIf,IACbgB,EAAIG,OAAOF,EAAG,GAKtB,OAFAD,EAAIK,KAAKN,GACA,CAAEpG,OAAQqG,GAGvB,SAASkE,EAAa1D,EAAO2D,GACzB,IAAKA,EACD,MAAO,GAEX,IAAK,IAAIlE,EAAI,EAAGA,EAAIkE,EAAOjE,OAAQD,IAAK,CACpC,IAAInB,EAAOqF,EAAOlE,GAEdmE,EAAM5D,EAAMjD,gBACZ8G,EAAM,EACLD,EAAG,MAASA,EAAG,IAAU,IAC9BA,EAAG,IAAQ/D,KAAKvB,GAEZsF,EAAG,MACHC,EAAMD,EAAG,KAEb,IAAI5E,EAAOV,EAAKU,KACZ8E,EAAYhN,KAAKC,MAAMuH,EAAK2B,SAChC,GAAI6D,GAAaA,EAAU/G,gBAAiB,CACxC,IACIgH,EADID,EAAU/G,gBACLiH,WAIb,GAHID,EAAOF,IACPA,EAAME,GAENH,EAAI5E,GAAO,CACX,IAAIiF,GAAW,EACXC,EAAIN,EAAI5E,GAAMmF,QACdD,EAAIH,IAAME,GAAW,GACzB,IAAIG,EAAM,IAAML,EAAOF,EACnBQ,EAAOD,EAAMR,EAAI5E,GAAMqF,KAAOD,EAAMR,EAAI5E,GAAMqF,KAC9CC,EAAOV,EAAI5E,GAAMuF,QAAU,EAC3BC,IAASF,EAAO,GAAKV,EAAI5E,GAAMwF,IAAOJ,GAAOE,EAEjDV,EAAI5E,GAAQ,CAAEmF,QAASJ,EAAMU,UAAWR,EAAUS,KAAMR,EAAGS,QAASP,EAAKC,KAAMA,EAAME,QAASD,EAAME,IAAKA,QAEzGJ,EAAM,IAAML,EAAOF,EACnBD,EAAI5E,GAAQ,CAAEmF,QAASJ,EAAMU,WAAW,EAAOC,KAAM,EAAGH,QAAS,EAAGF,KAAMD,EAAKO,QAASP,EAAKI,IAAKJ,GAEtG,GAAIL,GAAQF,EAAK,CACbD,EAAG,IAAUG,EAEb,IADA,IAAIa,EAAIzD,OAAOC,KAAKwC,GACXnE,EAAI,EAAGA,EAAImF,EAAElF,OAAQD,IAAK,CAC/B,IAAIoF,EAAKD,EAAEnF,GACX,GAAW,QAAPoF,GAAuB,QAAPA,EAAc,CAC9B,IAAIC,EAAIlB,EAAIiB,GACZC,EAAEH,QAAW,IAAMG,EAAEX,QAAWN,EAC5BiB,EAAEH,QAAU,MAAKG,EAAEH,QAAU,SAOrD,OAAO,eAAKf,GAGhB,SAASmB,EAASC,EAAS3M,EAAW4M,GAClC,GAAIA,EAAG/H,SAAW+H,EAAG/H,QAAQ3C,KAAO0K,EAAG/H,QAAQ3C,IAAImE,SAAWuG,EAAG/H,QAAQ3C,IAAImE,QAAQyD,SAAS,SAC1F,OAAO,EAEX,QAAgB5K,IAAZyN,EAAuB,OAAO,EAClC,GAAI3M,GAAaA,EAAUC,MAAQD,EAAUC,KAAKoH,OAAS,EAAG,CAC1D,IAAIwF,GAAS,EACTC,GAAY,EAMhB,GAJKH,GAAYA,EAAQ7F,UAAiC,kBAArB6F,EAAQ7F,WAA8B+F,GAAS,GAChF7M,EAAUC,KAAK6J,SAAS,gBAAegD,GAAY,GACnD9M,EAAUC,KAAK6J,SAAS,YAAWgD,GAAY,GAE/CD,IAAWC,EAEX,OAAO,GAPG,EAalB,OAAO,EAGX,SAASC,EAAYC,EAAGrF,GACpB,IAAIsF,EAAKtF,EAAMjC,UAAU/E,SACnBqM,EAAEpF,QAAQsF,YAAYD,IACxBA,EAAGD,EAAEpF,QAAQsF,UAAY,IAEb,SAAZF,EAAEzF,MACF0F,EAAGD,EAAEpF,QAAQsF,UAAUF,EAAEpF,QAAQjB,MAAQqG,SAElCC,EAAGD,EAAEpF,QAAQsF,UAAUF,EAAEpF,QAAQjB,MAE5C,IAAIpH,GAAO,EAaX,OAZAuJ,OAAO7G,OAAOgL,GAAIE,SAAQ,SAAAC,GAAC,OACvBtE,OAAO7G,OAAOmL,GAAGD,SAAQ,SAAAH,GACjBA,IAAGzN,GAAO,SAGhB,2BACCoI,GADD,IAEFjC,UAAW,CACPnG,KAAMA,EACNoB,SAAS,eAAMsM,MAM3B,IAqlBeI,EArlBK,WAAyC,IAA/B1F,EAA8B,uDAAtB5I,EAAcuO,EAAQ,uCACxD,OAAQA,EAAOC,MACX,KAAKnF,KACD,OAAO,2BACAT,GADP,IAEI9B,mBAAoByH,EAAOrH,OAGnC,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIhC,aAAc2H,EAAOrH,OAG7B,KAAKmC,IACD,OAAKkF,EAAOrH,KASL8G,EAAYO,EAAOrH,KAAM0B,GARrB,2BACAA,GADP,IAEIjC,UAAW,CACPnG,MAAM,EACNoB,SAAU,MAM1B,KAAKyH,IACD,OAAO,2BACAT,GADP,IAEI/B,WAAY0H,EAAOrH,OAG3B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIlC,eAAgB6H,EAAOrH,OAG/B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEInC,aAAc8H,EAAOrH,OAG7B,KAAKmC,IACD,IAAIoF,EAAK,GAIT,OAHIF,EAAOrH,OACPuH,EAAE,sBAAO7F,EAAMpC,cAAc5E,UAA3B,CAAqC2M,EAAOrH,QAE3C,2BACA0B,GADP,IAEIpC,cAAe,CAAE5E,SAAU6M,EAAIjO,KAAMiO,EAAGnG,OAAS,KAGzD,KAAKe,IACD,IAAI4E,EAAIM,EAAOrH,KACf,OAAO,2BACA0B,GADP,IAEIrC,qBAAqB,2BACdqC,EAAMrC,sBADO,kBAEf0H,EAAEO,KAAOP,EAAExC,UAIxB,KAAKpC,IACD,IAAIoF,EAAK7F,EAAMpC,cAAc5E,SAE7B,OADA6M,EAAGC,QACI,2BACA9F,GADP,IAEIpC,cAAe,CAAE5E,SAAU6M,EAAIjO,KAAMiO,EAAGnG,OAAS,KAGzD,KAAKe,KACD,OAAO,2BACAT,GADP,IAEItC,YAAaiI,EAAOrH,OAG5B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIxC,aAAcmI,EAAOrH,OAG7B,KAAKmC,IACD,IAAMsF,EAAU5O,IAAuB,WACvC,OAAO,2BACA6I,GADP,IAEIvC,mBAAmB,2BACZkI,EAAOrH,MADI,IAEdyH,QAASA,MAIrB,KAAKtF,KACD,OAAO,2BACAT,GADP,IAEIzC,WAAYoI,EAAOrH,OAG3B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI5C,SAAUuI,EAAOrH,OAGzB,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIhD,kBAAmB2I,EAAOrH,OAGlC,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI9C,QAASyI,EAAOrH,OAGxB,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI/C,cAAe0I,EAAOrH,OAG9B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEIjD,gBAAiB2G,EAAa1D,EAAO2F,EAAOrH,QAGpD,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIlD,WAAY2G,EAAkBzD,EAAO2F,EAAOrH,QAGpD,KAAKmC,IACD,IAAIuF,EAAKL,EAAOrH,KAChB,OAA+B,IAA3B6C,OAAOC,KAAK4E,GAAItG,QAAyD,IAAzCyB,OAAOC,KAAKpB,EAAMnD,YAAY6C,OACvDM,EAEJ,2BACAA,GADP,IAEInD,WAAY8I,EAAOrH,OAG3B,KAAKmC,IACD,IAAMwF,EAAKN,EAAOrH,KAmBlB,OAlBI2H,EAAG1K,MACHpE,IAAuB,OAAQ8O,EAAG1K,MAElC0K,EAAG1P,WACHY,IAAuB,WAAY8O,EAAG1P,UACtC2P,eAECD,EAAGzK,SAGJrE,IAA0B,WAF1BA,IAAuB,UAAW,OAIlC8O,EAAGxK,gBACHtE,IAAuB,kBAAmB,OAE1CA,IAA0B,mBAGvB,2BACA6I,GADP,IAEItJ,eAAgBiP,EAAOrH,OAG/B,KAAKmC,IACD,IAAI0F,EAAMR,EAAOrH,KAAOqH,EAAOrH,KAAO,CAClC9B,MAAO,KACPE,YAAY,EACZC,iBAAiB,EACjBC,SAAS,EACTH,MAAO,MAEX,OAAI0J,EAAI3J,QAAUwD,EAAMzD,WAAWC,OAC/B2J,EAAIxJ,kBAAoBqD,EAAMzD,WAAWI,iBACzCwJ,EAAIzJ,aAAesD,EAAMzD,WAAWG,YACpCyJ,EAAI1J,QAAUuD,EAAMzD,WAAWE,OAC/B0J,EAAIvJ,UAAYoD,EAAMzD,WAAWK,QAC1BoD,EAEJ,2BACAA,GADP,IAEIzD,WAAY4J,IAGpB,KAAK1F,KACD,OAAO,2BACAT,GADP,IAEI5D,YAAauJ,EAAOrH,OAG5B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI/D,WAAY0J,EAAOrH,OAG3B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEItE,YAAaiK,EAAOrH,OAG5B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI/E,UAAW0K,EAAOrH,OAG1B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIlF,aAAc6K,EAAOrH,OAG7B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIhF,cAAe2K,EAAOrH,OAG9B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEInF,aAAc8K,EAAOrH,OAG7B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIpF,iBAAkB+K,EAAOrH,OAGjC,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI5F,SAAUmI,EAAYvC,EAAO2F,EAAOrH,QAG5C,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIrF,WAAYgL,EAAOrH,OAG3B,KAAKmC,IACD,IAAI2F,EAAKT,EAAOrH,KAChB,GAAI8H,EAAGxO,MAAQwO,EAAGxM,QAAS,CACvB,IAAIyM,EAAK,GACTA,EAAGzO,KAAOwO,EAAGxO,KACbyO,EAAGzM,QAAUwM,EAAGxM,QAChBzC,IAAuB,UAAWL,KAAKwP,UAAUD,SAEjDlP,IAA0B,WAE9B,OAAO,2BACA6I,GADP,IAEIrG,aAAcgM,EAAOrH,OAG7B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEI/G,MAAOqJ,EAAatC,EAAO2F,EAAOrH,QAG1C,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEIvG,SAAUkH,EAAgBX,EAAO2F,EAAOrH,QAGhD,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIzG,WAAYgH,EAAgBP,EAAO2F,EAAOrH,QAGlD,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI5G,YAAakH,EAAYN,EAAO2F,EAAOrH,QAG/C,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI1G,UAAWA,EAAU0G,EAAO2F,EAAOrH,QAG3C,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIvF,cAAe4F,EAAcL,EAAO2F,EAAOrH,QAGnD,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIlG,SAAU6L,EAAOrH,OAGzB,KAAKmC,IACD,IAAIN,EAAKJ,EAAYC,EAAMlH,UAAW6M,EAAOrH,KAAM0B,GACnD,OAAO,2BACAA,GADP,IAEIlH,UAAU,2BACHkH,EAAMlH,WADJ,IAELC,QAASoH,EAAGpH,QACZC,SAAUmH,EAAGnH,aAKzB,KAAKyH,IACD,OAAO,2BACAT,GADP,IAEIrH,kBAAmB,CACfC,kBAA+B+M,EAAOrH,KACtCzF,YAAa,MAIzB,KAAK4H,IACD,IAAIN,EAAKd,EAAgBW,EAAMrH,kBAAmBgN,EAAOrH,MACzD,OAAO,2BACA0B,GADP,IAEIrH,kBAAmB,CACfC,aAAcuH,EAAGvH,aACjBC,YAAasH,EAAGtH,eAI5B,KAAK4H,IACD,OAAO,2BACAT,GADP,IAEI7H,OAAQwN,EAAOrH,OAGvB,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEInI,YAAa8N,EAAOrH,OAG5B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIlI,UAAW6N,EAAOrH,OAG1B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEI3F,QAASsL,EAAOrH,OAGxB,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI7C,UAAW4H,EAAS/E,EAAM1I,YAAaqO,EAAOrH,KAAM0B,GACpD3H,UAAWsN,EAAOrH,OAG1B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEIxH,IAAKmN,EAAOrH,OAGpB,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEI9H,QAAQ,IAGhB,KAAKuI,KAED,OADA5B,EAAS8G,EAAOrH,MACT,2BACA0B,GADP,IAEI3I,KAAMsO,EAAOrH,OAGrB,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIuG,OAAQZ,EAAOrH,OAGvB,KAAKmC,KAED,OADAvB,EAAiByG,EAAOrH,MACjB,2BACA0B,GADP,IAEI7C,UAAW4H,EAASY,EAAOrH,KAAM0B,EAAM3H,UAAW2H,GAClD1I,YAAaqO,EAAOrH,OAI5B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEIxI,WAAYmO,EAAOrH,OAI3B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEIvI,cAAekO,EAAOrH,OAG9B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEI5H,cAAeuN,EAAOrH,OAG9B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIrI,WAAYgO,EAAOrH,OAG3B,KAAKmC,IACD,OAAO,2BACAT,GADP,IAEIjI,YAAY,eAAM4N,EAAOrH,QAGjC,KAAKmC,IACD,IAAI2F,EAAKpG,EAAM/H,YACTqG,EAAOqH,EAAOrH,KAEpB,OADA8H,EAAG9H,EAAKE,IAAMF,EACP,2BACA0B,GADP,IAEI/H,YAAY,eAAMmO,KAG1B,KAAK3F,IACD,IAAI2F,EAAKpG,EAAM/H,YACTqG,EAAOqH,EAAOrH,KAEpB,cADO8H,EAAG9H,EAAKE,IACR,2BACAwB,GADP,IAEI/H,YAAY,eAAMmO,KAG1B,KAAK3F,IACD,IAAMnC,EAAOqH,EAAOrH,KACpB,GAAIA,EAAKI,SAAWJ,EAAKI,QAAQgB,OAAS,GAAKpB,EAAKI,QAAQyD,SAAS,kBACjE,IACI,IAAIqE,EAAK1P,KAAKC,MAAMuH,EAAKI,SACrB8H,EAAGtE,QACHsE,EAAGtE,MAAQF,EAAmBwE,EAAGtE,QAErC5D,EAAK4D,MAAQF,EAAmB1D,EAAK4D,OACrC5D,EAAKI,QAAU5H,KAAKwP,UAAUE,GAChC,WAIN,IAAIjI,EAAQF,EAAWC,GAEvB,GAAI0B,EAAM7F,iBAAkB,CACxB,IAAIsM,EAAMzG,EAAM9F,oBAGhB,OAFAuM,EAAI5G,KAAK,CAAE6G,KAAM,MAAOpI,KAAMA,IAEvB,2BACA0B,GADP,IAEI9F,oBAAoB,YAAKuM,KAIjC,IAAIL,EAAKpG,EAAMhI,aAEf,OADAoO,EAAG7H,GAASD,EACRwD,EAAyBsE,IACzBjI,EAASiI,EAIN,2BACApG,GADP,IAEIhI,aAAa,eAAMoO,MAJZpG,EAOf,KAAKS,IACD,IAAMnC,EAAOqH,EAAOrH,KAChBC,EAAQF,EAAWC,GAEvB,GAAI0B,EAAM7F,iBAAkB,CACxB,IAAIsM,GAAMzG,EAAM9F,oBAGhB,OAFAuM,GAAI5G,KAAK,CAAE6G,KAAM,SAAUpI,KAAMA,IAE1B,2BACA0B,GADP,IAEI9F,oBAAoB,YAAKuM,MAIjC,IAAIL,GAAKpG,EAAMhI,aAQf,cAPOoO,GAAG7H,GACVJ,EAASiI,GAEL7H,KAASH,UACFA,EAAqBG,GAGzB,2BACAyB,GADP,IAEIhI,aAAa,eAAMoO,MAG3B,KAAK3F,IAID,OAHAtC,EAAS,GACTC,EAAuB,GAEhB,2BACA4B,GADP,IAEI9F,oBAAqB,GACrBlC,aAAc,KAGtB,KAAKyI,IACD,OAAO,2BACAT,GADP,IAEI7F,iBAAkBwL,EAAOrH,OAGjC,KAAKmC,IACD,IAAIgG,GAAMzG,EAAM9F,oBACZkM,GAAKpG,EAAMhI,aAEf,IAAK,IAAI2O,MAAOF,GAAK,CACjB,IAAIG,GAAOH,GAAIE,IAGf,GAAMC,IAAQA,GAAKtI,KAAnB,CAEA,IAAIC,GAAQF,EAAWuI,GAAKtI,MAEV,QAAdsI,GAAKF,KACLN,GAAG7H,IAASqI,GAAKtI,aAEV8H,GAAG7H,IAENA,MAASH,UACFA,EAAqBG,MASxC,OAHIuD,EAAyBsE,MACzBjI,EAASiI,IAEN,2BACApG,GADP,IAEI9F,oBAAqB,GACrBlC,aAAa,eAAMoO,MAG3B,KAAK3F,IAED,OADA5B,EAAS8G,EAAOrH,MACT,2BACA0B,GADP,IAEItI,cAAeiO,EAAOrH,OAG9B,KAAKmC,KACD,OAAO,2BACAT,GADP,IAEI5E,WAAY6H,EAAejD,EAAM5E,WAAYuK,EAAOrH,KAAM0B,EAAMrF,cAGxE,KAAK8F,IACD,OAAO,2BACAT,GADP,IAEI1E,aAAckI,EAAiBxD,EAAM1E,aAAcqK,EAAOrH,KAAM0B,EAAMrF,cAG9E,KAAK8F,IACD,OAAO,2BACAT,GADP,IAEI6G,SAAUtD,EAAavD,EAAM3E,SAAUsK,EAAOrH,KAAM0B,EAAMrF,cAGlE,QACI,OAAOqF,I,SCvtCb8G,GAAWC,aAAc,kBAAM,8EAC/BC,GAAMD,aAAc,kBAAM,wEAC1BE,GAAQC,YAAYC,EACtB1Q,OAAO2Q,8BAAgC3Q,OAAO2Q,gCAG5CC,GAAQC,YAAe,CACzBC,QAAS,CACLC,QAASC,IACTC,UAAW,CACPC,KAAM,YAGdC,OAAQ,CACJC,OAAQ,UAEZC,WAAY,CAGRC,SAAU,GAEdC,UAAW,CACPC,eAAgB,CACZ,UAAW,CACP,IAAK,CACD,kBAAmB,QAEvB,uBAAwB,CACpBC,MAAO,MACPC,OAAQ,OAEZ,6BAA8B,CAC1B5L,WAAY,SAEhB,6BAA8B,CAC1B6L,gBAAiB,OACjBC,aAAc,YAOnB,SAASC,GAASC,GAAQ,IAAD,EAClBC,YAAW,CAAC,iBAAkB,aAAzCC,EAD6B,oBAYpC,OATAC,IAAMC,WAAU,WACRF,EAAQG,gBAA6C,SAA3BH,EAAQG,iBAClCnS,OAAOmS,gBAAiB,EACxBC,OACAA,OACAA,UAEL,CAACJ,IAGA,6BACI,kBAAC,IAAD,CAAUxB,MAAOA,IACf,kBAAC6B,EAAA,EAAD,CAAiBC,kBAAmB,CAAEC,KAAM,MAC1C,kBAACC,EAAA,EAAD,CAAe5B,MAAOA,IAClB,kBAAC,IAAD,KACI,kBAAC,WAAD,CAAU6B,SAAU,4CAChB,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAOC,OAAK,EAACH,KAAK,IAAII,UAAWtC,KACjC,kBAAC,IAAD,CAAOsC,UAAWpC,QAI5BqC,QAAQC,IAAI,4BAA6Bb,IACzCA,EAAQG,gBAAkB,kBAACW,EAAA,EAAD,UCvE5BzJ,QACW,cAA7BrJ,OAAO+S,SAASC,UAEe,UAA7BhT,OAAO+S,SAASC,UAEhBhT,OAAO+S,SAASC,SAASC,MACvB,2D,OCZNC,EAAQ,KAIRC,IAASC,OACP,kBAAC,IAAMC,WAAP,KACE,kBAAC,GAAD,OAEFC,SAASC,eAAe,SDqHpB,kBAAmBC,WACrBA,UAAUC,cAAcC,MACrBC,MAAK,SAAAC,GACJA,EAAaC,gBAEdC,OAAM,SAAAC,GACLnB,QAAQmB,MAAMA,EAAMC,a,+BEzI5B,6tJAAO,IAAMC,EAAW,uBACXC,EAAiB,2BACjBC,EAAmB,0BACnBC,EAAkB,yBAClBC,EAAqB,4BACrBC,EAAmB,4BACnBC,EAAY,oBACZC,EAAiB,yBACjBC,EAAoB,4BACpBC,EAAmB,2BACnBC,EAA+B,sCAC/BC,EAAqB,4BACrBC,EAAY,oBACZC,EAAgB,uBAChBC,EAAa,qBACbC,EAAa,oBACbC,EAAqB,4BACrBC,EAAiB,wBACjBC,EAAU,iBACVC,EAAc,qBACdC,EAAa,qBACbC,EAAgB,wBAChBC,EAAY,oBACZC,EAAoB,4BACpBC,EAAU,kBACVC,EAAa,qBACbC,EAAY,oBACZC,EAAW,mBACXC,EAAa,qBACbC,EAAU,kBACVC,EAAe,uBACfC,EAAU,kBACVC,EAAY,oBACZC,EAAiB,yBACjBC,EAAkB,0BAClBC,EAAmB,2BACnBC,EAAmB,2BACnBC,EAAoB,4BACpBC,EAAgB,wBAChBC,EAAoB,2BACpBC,EAAoB,2BACpBC,EAAsB,6BACtBC,EAAmB,0BACnBC,EAAkB,yBAClBC,EAAsB,6BACtBC,EAAmB,0BACnBC,EAAkB,yBAClBC,EAAkB,yBAClBC,EAAkB,yBAClBC,EAAa,oBACbC,EAAc,qBACdC,GAA0B,iCAC1BC,GAAkB,yBAClBC,GAAe,sBACfC,GAAyB,gCACzBC,GAAgB,uBAChBC,GAAkB,yBAClBC,GAAW,kBACXC,GAAkB,yBAClBC,GAAqB,4BACrBC,GAAqB,4BACrBC,GAAmB,0BACnBC,GAAwB,+BACxBC,GAAoB,2BACpBC,GAAsB,6BACtBC,GAAsB,6BACtBC,GAAoB,2BACpBC,GAAkB,yBAClBC,GAA2B,kCAEjC,SAASC,GAAsBzQ,GAClC,MAAO,CACHsH,KAAMkJ,GACNxQ,QAGD,SAAS0Q,GAAgB1Q,GAC5B,MAAO,CACHsH,KAAMgJ,GACNtQ,QAGD,SAAS2Q,GAAkB3Q,GAC9B,MAAO,CACHsH,KAAM+I,GACNrQ,QAID,SAAS4Q,GAAc5Q,GAC1B,MAAO,CACHsH,KAAMiJ,GACNvQ,QAGD,SAAS6Q,GAAkB7Q,GAC9B,MAAO,CACHsH,KAAM8I,GACNpQ,QAGD,SAAS8Q,GAAgB9Q,GAC5B,MAAO,CACHsH,KAAM6I,GACNnQ,QAGD,SAAS+Q,GAAuB/Q,GACnC,MAAO,CACHsH,KAAM4I,GACNlQ,QAGD,SAASgR,GAAehR,GAC3B,MAAO,CACHsH,KAAM2I,GACNjQ,QAGD,SAASiR,GAAiBjR,GAC7B,MAAO,CACHsH,KAAMyI,GACN/P,QAGD,SAASkR,KAEZ,MAAO,CACH5J,KAAM0I,GACNhQ,KAHO,MAMR,SAASmR,GAAcnR,GAC1B,MAAO,CACHsH,KAAMwI,GACN9P,QASD,SAASoR,GAAcpR,GAC1B,MAAO,CACHsH,KAAMsI,GACN5P,QAGD,SAASqR,GAAYrR,GACxB,MAAO,CACHsH,KAAMqI,GACN3P,QAID,SAASsR,KAEZ,MAAO,CACHhK,KAAMqI,GACN3P,KAHO,CAACjB,QAAQ,EAAOC,QAAS,KAOjC,SAASuS,GAAqBvR,GACjC,MAAO,CACHsH,KAAMoI,GACN1P,QAGD,SAASwR,GAAWxR,GACvB,MAAO,CACHsH,KAAMmI,GACNzP,QAGD,SAASrB,GAAcqB,GAC1B,MAAO,CACHsH,KAAMkI,GACNxP,QAGD,SAASyR,GAAsBzR,GAClC,MAAO,CACHsH,KAAMiI,GACNvP,QAGD,SAAS0R,GAAc1R,GAC1B,MAAO,CACHsH,KAAMgI,EACNtP,QAGD,SAAS2R,GAAa3R,GACzB,MAAO,CACHsH,KAAM+H,EACNrP,QAGD,SAAS4R,GAAc5R,GAC1B,MAAO,CACHsH,KAAM6H,EACNnP,QAID,SAAS6R,GAAc7R,GAC1B,MAAO,CACHsH,KAAM4H,EACNlP,QAID,SAAS8R,GAAe9R,GAC3B,MAAO,CACHsH,KAAM2H,EACNjP,QAGD,SAAS+R,GAAc/R,GAC1B,MAAO,CACHsH,KAAMyH,EACN/O,QAGD,SAASgS,GAAehS,GAC3B,MAAO,CACHsH,KAAMwH,EACN9O,QAGD,SAASiS,GAAajS,GACzB,MAAO,CACHsH,KAAMoH,EACN1O,QAID,SAASkS,GAAkBlS,GAC9B,MAAO,CACHsH,KAAMuH,EACN7O,QAID,SAASmS,GAAgBnS,GAC5B,MAAO,CACHsH,KAAMkH,EACNxO,QAID,SAASoS,GAAiBpS,GAC7B,MAAO,CACHsH,KAAMmH,EACNzO,QAID,SAASqS,GAAgBrS,GAC5B,MAAO,CACHsH,KAAMiH,EACNvO,QAGD,SAASsS,GAAgBtS,GAC5B,MAAO,CACHsH,KAAMgH,EACNtO,QAGD,SAASuS,GAASvS,GACrB,MAAO,CACHsH,KAAM+G,EACNrO,QAGD,SAASwS,GAAUxS,GACtB,MAAO,CACHsH,KAAM8G,EACNpO,QAGD,SAASyS,GAASzS,GACrB,MAAO,CACHsH,KAAM6G,EACNnO,QAGD,SAAS0S,GAAY1S,GACxB,MAAO,CACHsH,KAAM4G,EACNlO,QAGD,SAAS2S,GAAY3S,GACxB,MAAO,CACHsH,KAAM2G,EACNjO,QAGD,SAAS4S,GAAW5S,GACvB,MAAO,CACHsH,KAAM0G,EACNhO,QAGD,SAAS6S,GAAa7S,GACzB,MAAO,CACHsH,KAAMwG,EACN9N,QAGD,SAAS8S,GAAY9S,GACxB,MAAO,CACHsH,KAAMyG,EACN/N,QAGD,SAAS+S,GAAc/S,GAC1B,MAAO,CACHsH,KAAMuG,EACN7N,QAGD,SAASgT,GAAahT,GACzB,MAAO,CACHsH,KAAMoG,EACN1N,QAGD,SAASiT,GAAWjT,GACvB,MAAO,CACHsH,KAAMsG,EACN5N,QAID,SAAS3F,GAAkB2F,GAC9B,MAAO,CACHsH,KAAMqG,EACN3N,QAID,SAASkT,GAAWlT,GACvB,MAAO,CACHsH,KAAMiG,EACNvN,QAID,SAASmT,GAAWnT,GACvB,MAAO,CACHsH,KAAMkG,EACNxN,QAID,SAASoT,GAAapT,GACzB,MAAO,CACHsH,KAAMmG,EACNzN,QAID,SAASqT,GAAarT,GACzB,MAAO,CACHsH,KAAM+F,EACNrN,QAID,SAASsT,GAAOtT,GACnB,MAAO,CACHsH,KAAMgG,EACNtN,QAID,SAASuT,GAAiBvT,GAC7B,MAAO,CACHsH,KAAM8F,EACNpN,QAID,SAASwT,GAAUxT,GACtB,MAAO,CACHsH,KAAM6F,EACNnN,QAID,SAASyT,KACZ,MAAO,CACHnM,KAAM4F,GAIP,SAASwG,GAAQ1T,GACpB,MAAO,CACHsH,KAAM8E,EACNpM,QAID,SAAS2T,GAAsB3T,GAClC,MAAO,CACHsH,KAAM+E,EACNrM,QAID,SAAS4T,GAAe5T,GAC3B,MAAO,CACHsH,KAAMgF,EACNtM,QAID,SAAS6T,GAAc7T,GAC1B,MAAO,CACHsH,KAAMiF,EACNvM,QAID,SAAS8T,GAAiB9T,GAC7B,MAAO,CACHsH,KAAMkF,EACNxM,QAGD,SAAS+T,GAAe/T,GAC3B,MAAO,CACHsH,KAAMmF,EACNzM,QAID,SAASgU,GAAehU,GAI3B,OAHIA,EAAKiU,cACLjU,EAAKkU,kBAAmB,GAErB,CACH5M,KAAMoF,EACN1M,QAGD,SAASmU,GAAenU,GAC3B,MAAO,CACHsH,KAAMqF,EACN3M,QASD,SAASoU,KACZ,MAAO,CACH9M,KAAMuF,GAGP,SAASwH,KACZ,MAAO,CACH/M,KAAMwF,GAIP,SAASwH,GAAoBtU,GAChC,MAAO,CACHsH,KAAMyF,EACN/M,QAUD,SAASuU,GAAavU,GACzB,MAAO,CACHsH,KAAM2F,EACNjN,QAID,SAASwU,GAAiBxU,GAC7B,MAAO,CACHsH,KAAMqH,EACN3O,QAID,SAASyU,GAAazU,GACzB,MAAO,CACHsH,KAAMsH,EACN5O,QAID,SAAS0U,GAAW1U,GACvB,MAAO,CACHsH,KAAM8H,EACNpP,QAID,SAAS2U,GAAYC,GAKxB,IAJA,IACIC,EADY1c,OAAO+S,SAAS4J,KAAKhR,MAAM,WACtB,GAAGA,MAAM,WAC1BsH,GAAQ,EACRhJ,EAAK,KACAjB,EAAE,EAAGA,EAAGyT,EAAG/Z,OAAOuG,OAAQD,IAAK,CACpC,IAAM4T,EAAIH,EAAG/Z,OAAOsG,GAEpB,GADS4T,EAAE7U,GAAG4D,MAAM,cACb,KAAO+Q,EAAO,GAAI,CACrBzJ,GAAQ,EACRhJ,EAAK2S,EACL,OAGR,MAAQ,CAACC,MAAOH,EAAO,GAAI9Z,OAAQqQ,EAAOhJ,GAAIA,GAE3C,SAAS6S,GAAejV,GAC3B,MAAO,CACHsH,KAAM0H,EACNhP,U,gCCvhBR,wNAEO,SAASkV,EAAMjL,GACd9R,OAAOmS,gBACP6K,IAAQD,MAAMjL,GAIf,SAASmL,EAASnL,GACjB9R,OAAOmS,gBACP6K,IAAQC,SAASnL,GAIlB,SAASoL,EAAUpL,GAClB9R,OAAOmS,gBACP6K,IAAQE,UAAUpL,GAKnB,SAASqL,IACRnd,OAAOmS,gBACP6K,IAAQI,WAAW,iBAAkB,CAAEC,OAAO,IAK/C,SAASC,IACZ1K,QAAQC,IAAI,mCACZ,SAAU0K,EAAE3O,EAAE4O,EAAEC,EAAEzU,GAAGuU,EAAEE,GAAGF,EAAEE,IAAI,GAAGF,EAAEE,GAAGrU,KAAK,CAAC,aAC9C,IAAI0B,MAAOC,UAAUgS,MAAM,WAAW,IAAIW,EAAE9O,EAAE+O,qBAAqBH,GAAG,GACtEI,EAAEhP,EAAEiP,cAAcL,GAAgCI,EAAEE,OAAM,EAAKF,EAAEG,IACjE,yDAAmDL,EAAEM,WAAWC,aAAaL,EAAEF,GAH/E,CAIG1d,OAAOsT,SAAS,SAAS,aAGzB,SAAS4K,IACZ,IAAUzQ,EAAEgQ,EAAEU,EAAEC,EAAIC,EAAEC,EAAZ7Q,EAIPzN,OAJSyd,EAIDnK,SAJK8K,EAIgB,SAH5B3Q,EADU0Q,EAIO,WAHZ1Q,EAAE0Q,IAAI,YAAY1Q,EAAE0Q,GAAGnP,EAAEvB,EAAE0Q,GAAGnP,GAAG,IAAI5F,KAAKmV,aAC/CF,EAAEZ,EAAEI,cAAcO,IAAKN,MAAM,EAAEO,EAAEN,IAAI,yCACjCO,EAAEb,EAAEE,qBAAqBS,GAAG,IAAKJ,WAAWC,aAAaI,EAAEC,K,+BCxCvE,4IAAIE,EAAgB,GAEb,SAASC,EAAQ5c,GACpB,IACI,OAAO6c,aAAaD,QAAQ5c,GAC9B,SAEE,OAAO2c,EAAc3c,IAItB,SAAS8c,EAAQ9c,EAAMuK,GAC1B,IACI,OAAOsS,aAAaC,QAAQ9c,EAAMuK,GACpC,SAME,OALMvK,KAAQ2c,GAA4B,cAAT3c,GAC7B+c,MAAM,yEAEVJ,EAAc3c,GAAQuK,EAEfA,GAKR,SAASyS,EAAWhd,GACvB,IACI,OAAO6c,aAAaG,WAAWhd,GACjC,SAGE,cAFO2c,EAAc3c,GAEd,MAIR,SAASid,IACZ,IACI,OAAOJ,aAAaI,QACtB,SAGE,OAFAN,EAAgB,GAET,Q,6GCvCFlO,EAAgB,SAACyO,GAAD,OAC3BC,eAAI,sBAAC,8BAAAb,EAAA,6DACGc,EAAmC5e,KAAKC,MAC5CI,IACE,kCACG,SAJJ,kBAQuBqe,IARvB,cAQKpM,EARL,OAUDjS,IACE,gCACA,SAZD,kBAeMiS,GAfN,mCAiBIsM,EAjBJ,wBAoBCve,IACE,gCACA,QAtBH,kBAwBQV,OAAO+S,SAASmM,UAxBxB,+E,u8jiCCJP,uDAGIpf,EAAW,KAER,SAAS2P,IACZ3P,EAAWF,cACNuf,EAAarf,KACdA,EAAW,MAiBJsf,IAbG,SAACvf,GACf,GAAKC,GAAuB,OAAXA,EAAkB,CAC/B,IAAMuf,EAAaF,EAAarf,GAAUD,GAC1C,OAAIwf,GAGOxf,EAGX,OAAOA,I,yKCVA,SAASiT,IAAiB,IAAD,EACPf,YAAW,CAAC,iBAAkB,aADvB,mBAC7BC,EAD6B,KACpBsN,EADoB,OAEMC,wBAASze,GAFf,mBAE7B0e,EAF6B,KAEdC,EAFc,KAmDpC,SAASC,IACL,IAAI9Q,EAAI,IAAI9D,KAAK,GAEjB8D,EAAE+Q,mBAAmB7U,KAAK8U,MAAM,QAChCN,EAAU,kBAAkB,EAAM,CAAE/M,KAAM,IAAKsN,QAASjR,EAAGkR,SAAU,WACrER,EAAU,YAAY,EAAM,CAAE/M,KAAM,IAAKsN,QAASjR,EAAGkR,SAAU,WAC/D9f,OAAOmS,gBAAiB,EACxBnS,OAAO+f,UAAW,EAGtB,SAASC,IACL,IAAIpR,EAAI,IAAI9D,KAAK,GAEjB8D,EAAE+Q,mBAAmB7U,KAAK8U,MAAM,QAChCN,EAAU,kBAAkB,EAAM,CAAE/M,KAAM,IAAKsN,QAASjR,EAAGkR,SAAU,WACrER,EAAU,YAAY,EAAO,CAAE/M,KAAM,IAAKsN,QAASjR,EAAGkR,SAAU,WAChE9f,OAAOmS,gBAAiB,EACxBnS,OAAO+f,UAAW,EAGtB,SAASE,IACL,IAAIrR,EAAI,IAAI9D,KAAK,GAEjB8D,EAAE+Q,mBAAmB7U,KAAK8U,MAAM,QAChCN,EAAU,kBAAkB,EAAO,CAAE/M,KAAM,IAAKsN,QAASjR,IACzD0Q,EAAU,YAAY,EAAO,CAAE/M,KAAM,IAAKsN,QAASjR,IACnD5O,OAAOmS,gBAAiB,EACxBnS,OAAO+f,UAAW,EAOtB,OAhEA9N,IAAMC,WAAU,WACZ,QAAsBpR,IAAlB0e,EAGJ,IACIU,MAAmB9C,aAAazJ,MAAK,WAEjC3T,OAAOwf,eAAgB,EACvBC,GAAiB,GACjBS,MAAmBC,aAAaxM,MAAK,SAACyM,GACtCpgB,OAAOqgB,OAASD,EAAQE,IAAIC,WAI7B,WACCvgB,OAAOwf,eAAgB,EACvBC,GAAiB,MAErBe,YAAW,gBACkB1f,IAAzBd,OAAOwf,gBACPxf,OAAOwf,eAAgB,EACvBC,GAAiB,MAElB,KACL,SACEzf,OAAOwf,eAAgB,EACvBC,GAAiB,MAEtB,CAACD,IAgCJvN,IAAMC,WAAU,cAEd,CAACF,IAGH,+BA9EQhS,OAAO+S,WAAa/S,OAAOygB,OAAO1N,YA+EiC,IAAlByM,IAA4BxN,EAAQG,gBACzF,yBAAKuO,UAAU,kBACX,kBAAC,IAAD,CAAQC,MAAI,GACR,yBAAKD,UAAU,+CACX,0BAAMxR,OAAO,IAAIwR,UAAU,4BACvB,uBAAGA,UAAU,uBAAb,oHAGA,uBAAGA,UAAU,eAAe/D,KAAK,WAAWiE,OAAO,SAASC,IAAI,uBAAhE,oBACA,yBAAKH,UAAU,yBACf,yBAAKA,UAAU,6BAA6BI,QAASpB,GACjD,2BAAOvQ,KAAK,SAAS/C,MAAM,YAE/B,yBAAKsU,UAAU,6BAA6BI,QAASd,GACjD,2BAAOU,UAAU,UAAUvR,KAAK,SAAS/C,MAAM,oBAEnD,kBAAC,IAAD,CAAY2U,aAAW,SAASD,QAASb,GACrC,kBAAC,IAAD,WAMhB,kBAAC,IAAD,CAAQe,QAAM,GACV,yBAAKN,UAAU,+CACX,0BAAMxR,OAAO,IAAIwR,UAAU,uBACvB,yBAAKO,IAAI,cAAcP,UAAU,YAAY3C,IAAI,mBACjD,uBAAG2C,UAAU,kBAAb,mHAEA,uBAAGA,UAAU,eAAe/D,KAAK,WAAWiE,OAAO,SAASC,IAAI,uBAAhE,qBAGA,yBAAKH,UAAU,oBACf,yBAAKA,UAAU,wBAAwBI,QAASpB,GAC5C,2BAAOvQ,KAAK,SAAS/C,MAAM,gBAE/B,yBAAKsU,UAAU,wBAAwBI,QAASd,GAC5C,2BAAOU,UAAU,UAAUvR,KAAK,SAAS/C,MAAM,oBAKnD,kBAAC,IAAD,CAAY2U,aAAW,SAASD,QAASb,GACrC,kBAAC,IAAD,gB","file":"static/js/main.856893b9.chunk.js","sourcesContent":["import * as mylocalStorage from \"./mylocalStorage\";\n\nconst GetLang = (string) => {\n    var language = \"\"\n    const lang = window.personalConfig;\n    const studLang = window.boardConfig\n    const parsedLang = lang && JSON.parse(lang);\n    const parsedStudLang = studLang && JSON.parse(studLang);\n    if (parsedStudLang && parsedStudLang.sessLang) {\n        language = parsedStudLang.sessLang\n    } else {\n        if (parsedLang && parsedLang.language) {\n            language = parsedLang.language\n        }\n    }\n    let ll = mylocalStorage.getItem(\"language\")\n    if (ll) language = ll\n    if(!language || language === \"\")\n        language = \"EN\"\n    return language;\n};\n\nexport default GetLang;","\nimport * as Actions from \"./actions\"\nimport { v4 as uuid } from \"uuid\";\n// import { KEEPALIVE_TIMEOUT_SECONDS } from \"../../src/ibdata\"\nimport * as mylocalStorage from \"../mylocalStorage\";\nimport { setLangauge } from \"../Translator/Translations\";\n\nexport const KEEPALIVE_TIMEOUT_SECONDS = 60;\nconst initialState = {\n    user: null,\n    userProfile: undefined,\n    tutorGroup: null,\n    tutorUsertype: null,\n    communityUser: null,\n    authDialog: {\n        open: false\n    },\n    countryCode: null,\n    clientLoc: null,\n    BoardConfig: {},\n    participants: {},\n    activeUsers: {},\n    noUser: false,\n    gvPage: 1,\n    sessionDialog: {\n        open: false\n    },\n    boardType: {\n        name: \"\",\n        single: false,\n    },\n    tab: {\n        selected: 0,\n        allTabs: [],\n    },\n    assistanceRequest: {\n        studentAsked: false,\n        pendingList: [],\n    },\n    boardChat: {\n        started: false,\n        messages: [],\n        language: null\n    },\n    timer: {\n        running: false,\n        events: [],\n    },\n    boardLocked: {\n        locked: false,\n        events: [],\n    },\n    allEvents: {\n        events: [],\n    },\n    pageLocked: {\n        events: [],\n        locked: false,\n        myev: null,\n    },\n    showCase: {\n        locked: false,\n        dialog: false,\n        events: [],\n    },\n    palletDrawer: {\n        open: false,\n        openCol: false,\n        ref: null,\n    },\n    richText: {\n        open: false,\n        object: null,\n        cb: null,\n        loc: null,\n    },\n    pendingParticipants: [],\n    avatarDialogOpen: false,\n    diceShow: {\n        teacher: {\n            open: false,\n            values: [],\n            obj: null\n        },\n        board: {\n            open: false,\n            values: [],\n            obj: null,\n        }\n    },\n    followTeacher: {\n        set: false,\n        events: [],\n    },\n    clockDrift: 0,\n    teacher: 0,\n    hideNotification: false,\n    syncDisabled: false,\n    drawerWalker: {\n        open: false,\n        page: 1\n    },\n    gradingWalker: {\n        open: false,\n        page: 1\n    },\n    clickMode: {\n        mode: \"none\",\n        ctx: \"none\"\n    },\n    spinnerEvt: null,\n    fDiceEvt: null,\n    letItSnowEvt: null,\n    personalConfig: {\n        font: \"Roboto\",\n        inkColor: true,\n        dblClickDisable: false,\n        language: mylocalStorage.getItem(\"language\")\n    },\n    gridBrowser: {\n        open: false,\n        pageNum: 1,\n        realTime: true,\n        groupGridOnly: false,\n        search: \"\",\n        showLabels: [],\n        hideLabels: []\n    },\n    matrixGrid: {\n        classroom: null,\n        gridMap: {}\n    },\n    timeMachine: {\n        open: false,\n        realTime: false,\n        selectedTime: null,\n        slider: 50,\n    },\n    background: {\n        color: null,\n        image: null,\n        pickerOpen: false,\n        pickerImageOpen: false,\n        notmine: false,\n    },\n    boardTools: {},\n    formSubmit: {\n        events: [],\n    },\n    engagementScore: {},\n    engagementSticker: null,\n    meetingToJoin: null,\n    apiMode: null,\n    adsEnable: false,\n    keybMode: { enable: false, lastKey: \"\" },\n    videoState: { mode: \"none\" },\n    modeSelected: null,\n    mobileModeSelected: { open: false },\n    videoConfig: null,\n    pendingSubscriptions: {},\n    alertMessages: {\n        open: false,\n        messages: []\n    },\n    sharedScreen: null,\n    boardRecording: null,\n    classPoll: {\n        open: false,\n        messages: {}\n    },\n    embeddedMode: null,\n    pageAdding: false,\n    sharedScreenDialog: {\n        open: false\n    }\n}\n\nvar gParts = {};\nvar timedOutParticipants = {};\n\nfunction getIdToUse(data) {\n    var idUse = data.id\n    if (data.UserProfile) {\n        idUse = data.UserProfile\n    } else {\n        if (data.content) {\n            const jp = JSON.parse(data.content)\n            if (jp.localID) {\n                idUse = jp.localID\n            }\n        }\n    }\n    return idUse\n}\n\nfunction setLocal(user) {\n    const authid = user ? user.username : null;\n    var luid = mylocalStorage.getItem('mystoreID');\n    if (!luid) {\n        luid = uuid()\n        mylocalStorage.setItem('mystoreID', luid)\n    }\n    if (authid && luid !== authid) {\n        mylocalStorage.setItem('mystoreID', authid)\n        mylocalStorage.setItem('backupLocalID', luid);\n        luid = authid //from now on the authenicated user and the stored user will be same\n    }\n    return luid\n}\n\nfunction setLocalPaidPlan(userProfile) {\n    if (userProfile) {\n        if (!userProfile.paidPlan) {\n            mylocalStorage.removeItem('paidPlan');\n        } else {\n            mylocalStorage.setItem('paidPlan', userProfile.paidPlan);\n        }\n        if (!userProfile.TenantID) {\n            mylocalStorage.removeItem('tenant');\n        } else {\n            mylocalStorage.setItem('tenant', userProfile.TenantID);\n        }\n    } else {\n        mylocalStorage.removeItem('paidPlan');\n\n    }\n}\n\nfunction studentRaiseHand(set) {\n\n}\nfunction pendingRequests(old, req) {\n    var arr = [...old.pendingList]\n    for (var i = 0; i < arr.length; i++) {\n        var c = arr[i]\n        if (c.id === req.id) {\n            arr.splice(i, 1)\n        }\n    }\n    if (req.State !== \"Done\") arr.push(req)\n    var ff = {\n        studentAsked: Boolean(arr.length > 0),\n        pendingList: arr\n    }\n    return (ff)\n}\nfunction pendingChat(old, req, state) {\n    var arr = [...old.messages]\n    if (!req) return { started: false, messages: [] }\n    var luid = mylocalStorage.getItem('mystoreID');\n    if (state.teacher === 0 && req && req.Content && req.Content.filter) {\n        //check for filter\n        if (!req.Content.filter[luid]) {\n            var ff = {\n                started: Boolean(arr.length > 0),\n                messages: arr\n            }\n            return (ff)\n        }\n    }\n    for (var i = 0; i < arr.length; i++) {\n        var c = arr[i]\n        if (c.id === req.id) {\n            arr.splice(i, 1)\n        }\n    }\n    if (req.State !== \"Done\" && !req.deleted) arr.push(req)\n    // //sort by ttime \n    // arr.sort((a, b) => {\n    //     var dt1 = new Date(a.updatedAt)\n    //     var dt2 = new Date(b.updatedAt)\n    //     if (dt1 < dt2) return 1\n    //     return -1 \n    // })\n    // for (let i=0; i<arr.length; i++) {\n    //     let c = arr[i]\n    //     console.log(\"ITEM \", i, c.Content.msg)\n    // }\n\n    ff = {\n        started: Boolean(arr.length > 0),\n        messages: arr\n    }\n    return (ff)\n}\n\nfunction pendingFollow(state, req) {\n    if (!req) {\n        return {\n            set: false,\n            events: [],\n        }\n    }\n    var arr = [...state.followTeacher.events]\n    for (var i = 0; i < arr.length; i++) {\n        var c = arr[i]\n        if (c.id === req.id) {\n            arr.splice(i, 1)\n        }\n    }\n    if (req.State !== \"Done\") arr.push(req)\n    var ff = {\n        set: Boolean(arr.length > 0),\n        events: arr\n    }\n    return ({ ...ff })\n}\nfunction allEvents(state, req) {\n    var arr = [...state.allEvents.events]\n    for (var i = 0; i < arr.length; i++) {\n        var c = arr[i]\n        if (c.id === req.id) {\n            arr.splice(i, 1)\n        }\n    }\n    arr.push(req)\n    var ff = { events: arr }\n    return (ff)\n}\nfunction pendingLock(state, req) {\n    if (!req) {\n        return {\n            locked: false,\n            events: [],\n        }\n    }\n    var arr = [...state.boardLocked.events]\n    for (var i = 0; i < arr.length; i++) {\n        var c = arr[i]\n        if (c.id === req.id) {\n            arr.splice(i, 1)\n        }\n    }\n    if (req.State !== \"Done\") arr.push(req)\n    var ff = {\n        locked: Boolean(arr.length > 0),\n        events: arr\n    }\n    return (ff)\n}\nfunction pendingPageLock(state, req) {\n    if (!req) {\n        return {\n            events: [],\n        }\n    }\n    var arr = [...state.pageLocked.events]\n    for (var i = 0; i < arr.length; i++) {\n        var c = arr[i]\n        if (c.id === req.id) {\n            arr.splice(i, 1)\n        }\n    }\n    if (req.State !== \"Done\") arr.push(req)\n    var ff = { events: arr }\n    var rt = Actions.getPageLock(ff)\n    ff['locked'] = rt.locked\n    ff['myev'] = rt.ev\n    return (ff)\n}\nfunction pendingShowCase(state, req) {\n    if (!req) {\n        return {\n            locked: false,\n            events: [],\n        }\n    }\n    var arr = [...state.showCase.events]\n    for (var i = 0; i < arr.length; i++) {\n        var c = arr[i]\n        if (c.id === req.id) {\n            arr.splice(i, 1)\n        }\n    }\n    if (req.State !== \"Done\") arr.push(req)\n\n    var ff = {\n        locked: Boolean(arr.length > 0),\n        dialog: Boolean(arr.length > 1) || (Boolean(arr.length > 0) && state.BoardConfig.readOnlyShowCase),\n        events: arr\n    }\n    return (ff)\n}\nfunction isObject(object) {\n    return object != null && typeof object === 'object';\n}\n\nfunction compareParticipant(object1, object2, partId) {\n    const keys1 = Object.keys(object1);\n    const keys2 = Object.keys(object2);\n    const curTime = new Date().getTime();\n    let timedOut = 0;\n\n    if (keys1.length !== keys2.length) {\n        return false;\n    }\n\n    for (let key of keys1) {\n        let obj1 = isObject(object1[key]);\n        let obj2 = isObject(object2[key]);\n\n        if (obj1 && obj2) {\n            continue;\n        } else if ((obj1 && !obj2) || (obj2 && !obj1)) {\n            return false;\n        }\n\n        if (key === 'updatedAt') {\n            let updTime = new Date(object2[key]);\n            /**\n            * Because the updates can happen at different times between different\n            * participants, we need to check if an update was not received for\n            * 2 timeout intervals to truly mark a participant as down or else\n            * the state could keep fluctuating between timedOut = 0 and timedOut = 1\n            */\n            if (((curTime - updTime) / 1000) > (KEEPALIVE_TIMEOUT_SECONDS * 2)) {\n                timedOut = 1;\n            }\n\n            if (!(timedOutParticipants[partId])) {\n                timedOutParticipants[partId] = 0;\n            }\n\n            if (timedOutParticipants[partId] !== timedOut) {\n                timedOutParticipants[partId] = timedOut;\n                return false;\n            }\n        } else if (object1[key] !== object2[key]) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\nfunction checkIfPartsUpdateNeeded(newParts) {\n    const keys1 = Object.keys(gParts);\n    const keys2 = Object.keys(newParts);\n\n    if (keys1.length !== keys2.length) {\n        return true;\n    }\n\n    for (let key of keys1) {\n        if (newParts[key] === undefined) {\n            return true;\n        }\n\n        if (!compareParticipant(gParts[key],\n            newParts[key], key)) {\n            return true;\n        }\n    }\n\n    return false;\n}\n\nfunction removeMSTeamsEmail(em) {\n    let email = em\n    if (em && email.includes(\"@microsoftteams\")) {\n        email = email.split(\"@\")[0]\n        email = email.replace(\"__\", \"@\")\n    }\n    return email\n}\nfunction pendingTimer(state, req) {\n    if (!req) {\n        return {\n            running: false,\n            events: [],\n        }\n    }\n    var arr = [...state.timer.events]\n    for (var i = 0; i < arr.length; i++) {\n        var c = arr[i]\n        if (c.id === req.id) {\n            arr.splice(i, 1)\n        }\n    }\n    if (req.State !== \"Done\") arr.push(req)\n    var ff = {\n        running: Boolean(arr.length > 0),\n        events: arr\n    }\n    return (ff)\n}\nfunction processDice(state, e) {\n    var open = true\n    if (e.State === \"Done\") open = false\n    var classDice = \"board\"\n    if (e.teacherDice) {\n        classDice = \"teacher\"\n    }\n    if (!e.Content.rollerName) e.Content.rollerName = \"\"\n    var inval = e.Content.value\n    var inval2 = Array.isArray(inval) ? inval : null\n    var setVal = {\n        ...state.diceShow,\n        [classDice]: {\n            open: open,\n            obj: e,\n            value: inval2,\n            rollerName: e.Content.rollerName\n        }\n    }\n    return (setVal)\n}\nfunction processSpinner(spinnerEvt, e, clockDrift) {\n    const myTime = new Date()\n    const evtTime = new Date(e.createdAt)\n    // console.log(\"My time = \", myTime)\n    // console.log(\"evtTime = \", evtTime)\n    // console.log(\"Drift = \", clockDrift)\n    // console.log(\"Difference = \", Math.abs(myTime - evtTime - clockDrift*1000))\n    if (Math.abs(myTime - evtTime - clockDrift * 1000) > 5000) {\n        // Too much difference in time, ignore event\n        // console.log(\"Too much time difference in spin event, ignoring\")\n        return spinnerEvt;\n    }\n    return e;\n}\nfunction processFdice(fDiceEvt, e, clockDrift) {\n    const myTime = new Date()\n    const evtTime = new Date(e.createdAt)\n    // console.log(\"My time = \", myTime)\n    // console.log(\"evtTime = \", evtTime)\n    // console.log(\"Drift = \", clockDrift)\n    // console.log(\"Difference = \", Math.abs(myTime - evtTime - clockDrift*1000))\n    if (Math.abs(myTime - evtTime - clockDrift * 1000) > 5000) {\n        // Too much difference in time, ignore event\n        // console.log(\"Too much time difference in spin event, ignoring\")\n        return fDiceEvt;\n    }\n    return e;\n}\nfunction processLetItSnow(letItSnowEvt, e, clockDrift) {\n    const myTime = new Date()\n    const evtTime = new Date(e.createdAt)\n    if (Math.abs(myTime - evtTime - clockDrift * 1000) > 5000) {\n        return letItSnowEvt;\n    }\n    return e;\n}\nfunction formSubmitprocess(state, req) {\n    var arr = [...state.formSubmit.events]\n    for (var i = 0; i < arr.length; i++) {\n        var c = arr[i]\n        if (c.id === req.id) {\n            arr.splice(i, 1)\n        }\n    }\n    arr.push(req)\n    var ff = { events: arr }\n    return (ff)\n}\nfunction processScore(state, dataIn) {\n    if (!dataIn) {\n        return {}\n    }\n    for (let i = 0; i < dataIn.length; i++) {\n        var data = dataIn[i]\n\n        var eng = state.engagementScore\n        var max = 1\n        if (!eng['all']) eng['all'] = []\n        eng['all'].push(data)\n\n        if (eng['max']) {\n            max = eng[\"max\"]\n        }\n        var luid = data.luid\n        var scoreData = JSON.parse(data.Content)\n        if (scoreData && scoreData.engagementScore) {\n            var s = scoreData.engagementScore\n            var calc = s.calculated;\n            if (calc > max) {\n                max = calc\n            }\n            if (eng[luid]) {\n                var trendown = false\n                let c = eng[luid].current\n                if (c > calc) trendown = true\n                var per = 100 * calc / max\n                var peak = per > eng[luid].peak ? per : eng[luid].peak\n                var samp = eng[luid].samples + 1\n                let avg = (((samp - 1) * eng[luid].avg) + per) / samp;\n\n                eng[luid] = { current: calc, trenddown: trendown, prev: c, percent: per, peak: peak, samples: samp, avg: avg }\n            } else {\n                per = 100 * calc / max\n                eng[luid] = { current: calc, trenddown: false, prev: 0, samples: 1, peak: per, percent: per, avg: per }\n            }\n            if (calc >= max) {\n                eng['max'] = calc\n                var k = Object.keys(eng)\n                for (let i = 0; i < k.length; i++) {\n                    let kk = k[i]\n                    if (kk !== \"max\" && kk !== \"all\") {\n                        var v = eng[kk]\n                        v.percent = (100 * v.current) / max\n                        if (v.percent > 100) v.percent = 100\n                    }\n                }\n            }\n        }\n\n    }\n    return { ...eng }\n}\n\nfunction checkAds(profile, boardType, st) {\n    if (st.apiMode && st.apiMode.obj && st.apiMode.obj.content && st.apiMode.obj.content.includes(\"noAds\")) {\n        return false\n    }\n    if (profile === undefined) return true\n    if (boardType && boardType.name && boardType.name.length > 0) {\n        var isFree = false\n        var isStudent = true\n        var forTest = false\n        if (!profile || !profile.paidPlan || profile.paidPlan === \"educator-free\") isFree = true\n        if (boardType.name.includes(\"Instructor\")) isStudent = false\n        if (boardType.name.includes(\"Single\")) isStudent = false\n        // if (profile && profile.email && profile.email.includes(\"epiphani\")) forTest = true\n        if (isFree && !isStudent) {\n            // check creator of the board too if they have a paid plan\n            return true\n        }\n        if (forTest) {\n            return true\n        }\n    }\n    return false\n}\n\nfunction processPoll(d, state) {\n    let cp = state.classPoll.messages\n    if (!(d.Content.question in cp)) {\n        cp[d.Content.question] = {}\n    }\n    if (d.State !== \"DONE\") {\n        cp[d.Content.question][d.Content.luid] = d\n    } else {\n        delete cp[d.Content.question][d.Content.luid]\n    }\n    let open = false;\n    Object.values(cp).forEach(q =>(\n        Object.values(q).forEach(d => {\n            if (d) open = true\n        })\n    ))\n    let ns = {\n        ...state,\n        classPoll: {\n            open: open,\n            messages: { ...cp }\n        }\n    }\n    return ns\n}\n\nconst mainReducer = function (state = initialState, action) {\n    switch (action.type) {\n        case Actions.SET_SHARED_SCREEN_DIALOG: {\n            return {\n                ...state,\n                sharedScreenDialog: action.data\n            }\n        }        \n        case Actions.SET_EMBEDDED_MODE: {\n            return {\n                ...state,\n                embeddedMode: action.data\n            }\n        }\n        case Actions.ADD_CLASSPOLL_EVENT: {\n            if (!action.data) {\n                return {\n                    ...state,\n                    classPoll: {\n                        open: false,\n                        messages: {}\n                    }\n                }\n            }\n            return processPoll(action.data, state)\n        }\n        case Actions.SET_PAGE_ADDING: {\n            return {\n                ...state,\n                pageAdding: action.data\n            }\n        }\n        case Actions.SET_BOARD_RECORDING: {\n            return {\n                ...state,\n                boardRecording: action.data\n            }\n        }\n        case Actions.SET_SHARED_SCREEN: {\n            return {\n                ...state,\n                sharedScreen: action.data\n            }\n        }\n        case Actions.SET_ALERT_MESSAGES: {\n            let ar = []\n            if (action.data) {\n                ar = [...state.alertMessages.messages, action.data]\n            }\n            return {\n                ...state,\n                alertMessages: { messages: ar, open: ar.length > 0 }\n            }\n        }\n        case Actions.PENDING_SUBSCRIPTIONS: {\n            let d = action.data\n            return {\n                ...state,\n                pendingSubscriptions: {\n                    ...state.pendingSubscriptions,\n                    [d.type]: d.value\n                }\n            }\n        }\n        case Actions.POP_ALERT_MESSAGES: {\n            let ar = state.alertMessages.messages\n            ar.shift()\n            return {\n                ...state,\n                alertMessages: { messages: ar, open: ar.length > 0 }\n            }\n        }\n        case Actions.SET_VIDEO_CONFIG: {\n            return {\n                ...state,\n                videoConfig: action.data\n            }\n        }\n        case Actions.SET_MODE: {\n            return {\n                ...state,\n                modeSelected: action.data\n            }\n        }\n        case Actions.SET_MOBILE_MODE: {\n            const appMode = mylocalStorage.getItem('appMode');\n            return {\n                ...state,\n                mobileModeSelected: {\n                    ...action.data,\n                    appMode: appMode\n                }\n            }\n        }\n        case Actions.SET_VIDEO_STATE: {\n            return {\n                ...state,\n                videoState: action.data\n            }\n        }\n        case Actions.SET_KEYB_MODE: {\n            return {\n                ...state,\n                keybMode: action.data\n            }\n        }\n        case Actions.SET_ENGAGEMENT_STICKER: {\n            return {\n                ...state,\n                engagementSticker: action.data\n            }\n        }\n        case Actions.SET_API_MODE: {\n            return {\n                ...state,\n                apiMode: action.data\n            }\n        }\n        case Actions.MEETING_TO_JOIN: {\n            return {\n                ...state,\n                meetingToJoin: action.data\n            }\n        }\n        case Actions.UPDATE_ENGAGEMENT_SCORE: {\n            return {\n                ...state,\n                engagementScore: processScore(state, action.data)\n            }\n        }\n        case Actions.FORM_SUBMIT: {\n            return {\n                ...state,\n                formSubmit: formSubmitprocess(state, action.data)\n            }\n        }\n        case Actions.SET_BOARD_TOOLS: {\n            let ad = action.data\n            if (Object.keys(ad).length === 0 && Object.keys(state.boardTools).length === 0) {\n                return state\n            }\n            return {\n                ...state,\n                boardTools: action.data\n            }\n        }\n        case Actions.SET_PERSONAL_CONFIG: {\n            const pc = action.data\n            if (pc.font) {\n                mylocalStorage.setItem(\"font\", pc.font)\n            }\n            if (pc.language) {\n                mylocalStorage.setItem(\"language\", pc.language)\n                setLangauge()\n            }\n            if (!pc.inkColor) {\n                mylocalStorage.setItem(\"inkCopy\", \"yes\")\n            } else {\n                mylocalStorage.removeItem(\"inkCopy\")\n            }\n            if (pc.dblClickDisable) {\n                mylocalStorage.setItem(\"dblClickDisable\", \"yes\")\n            } else {\n                mylocalStorage.removeItem(\"dblClickDisable\")\n            }\n            // window.personalConfig = JSON.stringify(action.data);\n            return {\n                ...state,\n                personalConfig: action.data\n            }\n        }\n        case Actions.SET_BACK_GROUND: {\n            var val = action.data ? action.data : {\n                color: null,\n                pickerOpen: false,\n                pickerImageOpen: false,\n                notmine: false,\n                image: null\n            }\n            if (val.color === state.background.color &&\n                val.pickerImageOpen === state.background.pickerImageOpen &&\n                val.pickerOpen === state.background.pickerOpen &&\n                val.image === state.background.image &&\n                val.notmine === state.background.notmine) {\n                return state\n            }\n            return {\n                ...state,\n                background: val\n            }\n        }\n        case Actions.SET_TIME_MACHINE: {\n            return {\n                ...state,\n                timeMachine: action.data\n            }\n        }\n        case Actions.SET_MATRIX_GRID: {\n            return {\n                ...state,\n                matrixGrid: action.data\n            }\n        }\n        case Actions.SET_GRID_BROWSER: {\n            return {\n                ...state,\n                gridBrowser: action.data\n            }\n        }\n        case Actions.SET_CLICK_MODE: {\n            return {\n                ...state,\n                clickMode: action.data\n            }\n        }\n        case Actions.SET_DRAWER_WALKER: {\n            return {\n                ...state,\n                drawerWalker: action.data\n            }\n        }\n        case Actions.SET_GRADING_WALKER: {\n            return {\n                ...state,\n                gradingWalker: action.data\n            }\n        }\n        case Actions.SET_SYNC_DISABLED: {\n            return {\n                ...state,\n                syncDisabled: action.data\n            }\n        }\n        case Actions.SET_NOTIFICATION: {\n            return {\n                ...state,\n                hideNotification: action.data\n            }\n        }\n        case Actions.SET_DICE: {\n            return {\n                ...state,\n                diceShow: processDice(state, action.data)\n            }\n        }\n        case Actions.SET_CLOCK_DRIFT: {\n            return {\n                ...state,\n                clockDrift: action.data\n            }\n        }\n        case Actions.SET_PALETTE: {\n            var pp = action.data\n            if (pp.open || pp.openCol) {\n                var rr = {}\n                rr.open = pp.open\n                rr.openCol = pp.openCol\n                mylocalStorage.setItem(\"palette\", JSON.stringify(rr))\n            } else {\n                mylocalStorage.removeItem(\"palette\")\n            }\n            return {\n                ...state,\n                palletDrawer: action.data\n            }\n        }\n        case Actions.TIMER_EVENT: {\n            return {\n                ...state,\n                timer: pendingTimer(state, action.data)\n            }\n        }\n        case Actions.SHOWCASE: {\n            return {\n                ...state,\n                showCase: pendingShowCase(state, action.data)\n            }\n        }\n        case Actions.PAGE_LOCK: {\n            return {\n                ...state,\n                pageLocked: pendingPageLock(state, action.data)\n            }\n        }\n        case Actions.BOARD_LOCK: {\n            return {\n                ...state,\n                boardLocked: pendingLock(state, action.data)\n            }\n        }\n        case Actions.ALL_EVENTS: {\n            return {\n                ...state,\n                allEvents: allEvents(state, action.data)\n            }\n        }\n        case Actions.SET_FOLLOW: {\n            return {\n                ...state,\n                followTeacher: pendingFollow(state, action.data)\n            }\n        }\n        case Actions.SET_RICH_TEXT: {\n            return {\n                ...state,\n                richText: action.data\n            }\n        }\n        case Actions.CHAT_MSG: {\n            var ff = pendingChat(state.boardChat, action.data, state)\n            return {\n                ...state,\n                boardChat: {\n                    ...state.boardChat,\n                    started: ff.started,\n                    messages: ff.messages\n                }\n            }\n        }\n\n        case Actions.RAISE_HAND: {\n            return {\n                ...state,\n                assistanceRequest: {\n                    studentAsked: studentRaiseHand(action.data),\n                    pendingList: []\n                }\n            }\n        }\n        case Actions.ASSISTANCE_REQUEST: {\n            let ff = pendingRequests(state.assistanceRequest, action.data)\n            return {\n                ...state,\n                assistanceRequest: {\n                    studentAsked: ff.studentAsked,\n                    pendingList: ff.pendingList\n                }\n            }\n        }\n        case Actions.SET_GVPAGE: {\n            return {\n                ...state,\n                gvPage: action.data\n            }\n        }\n        case Actions.SET_COUNTRY: {\n            return {\n                ...state,\n                countryCode: action.data\n            }\n        }\n        case Actions.SET_CLIENT_LOC: {\n            return {\n                ...state,\n                clientLoc: action.data\n            }\n        }\n        case Actions.SET_TEACHER: {\n            return {\n                ...state,\n                teacher: action.data\n            }\n        }\n        case Actions.SET_BOARD_TYPE: {\n            return {\n                ...state,\n                adsEnable: checkAds(state.userProfile, action.data, state),\n                boardType: action.data\n            }\n        }\n        case Actions.SET_TAB: {\n            return {\n                ...state,\n                tab: action.data\n            }\n        }\n        case Actions.SET_NOUSER: {\n            return {\n                ...state,\n                noUser: true\n            }\n        }\n        case Actions.SET_USER: {\n            setLocal(action.data)\n            return {\n                ...state,\n                user: action.data\n            }\n        }\n        case Actions.SET_EXP_REMIND: {\n            return {\n                ...state,\n                remind: action.data\n            }\n        }\n        case Actions.SET_USER_PROFILE: {\n            setLocalPaidPlan(action.data);\n            return {\n                ...state,\n                adsEnable: checkAds(action.data, state.boardType, state),\n                userProfile: action.data\n            }\n        }\n\n        case Actions.SET_TUTOR_GROUP: {\n            return {\n                ...state,\n                tutorGroup: action.data\n            }\n        }\n\n        case Actions.SET_TUTOR_USERTYPE: {\n            return {\n                ...state,\n                tutorUsertype: action.data\n            }\n        }\n        case Actions.SET_SESSION_DIALOG: {\n            return {\n                ...state,\n                sessionDialog: action.data\n            }\n        }\n        case Actions.OPEN_AUTH_DIALOG: {\n            return {\n                ...state,\n                authDialog: action.data\n            }\n        }\n        case Actions.SET_CONFIG: {\n            return {\n                ...state,\n                BoardConfig: { ...action.data }\n            }\n        }\n        case Actions.ADD_ACTIVE: {\n            let pp = state.activeUsers\n            const data = action.data\n            pp[data.id] = data\n            return {\n                ...state,\n                activeUsers: { ...pp }\n            }\n        }\n        case Actions.DELETE_ACTIVE: {\n            let pp = state.activeUsers\n            const data = action.data\n            delete pp[data.id]\n            return {\n                ...state,\n                activeUsers: { ...pp }\n            }\n        }\n        case Actions.ADD_PARTICIPANT: {\n            const data = action.data\n            if (data.content && data.content.length > 0 && data.content.includes(\"microsoftteams\")) {\n                try {\n                    let jj = JSON.parse(data.content)\n                    if (jj.email) {\n                        jj.email = removeMSTeamsEmail(jj.email)\n                    }\n                    data.email = removeMSTeamsEmail(data.email)\n                    data.content = JSON.stringify(jj)\n                } catch {\n\n                }\n            }\n            var idUse = getIdToUse(data)\n\n            if (state.avatarDialogOpen) {\n                let ppp = state.pendingParticipants;\n                ppp.push({ oper: \"ADD\", data: data });\n\n                return {\n                    ...state,\n                    pendingParticipants: [...ppp]\n                }\n            }\n\n            let pp = state.participants\n            pp[idUse] = data\n            if (checkIfPartsUpdateNeeded(pp)) {\n                gParts = pp;\n            } else {\n                return state;\n            }\n            return {\n                ...state,\n                participants: { ...pp }\n            }\n        }\n        case Actions.REMOVE_PARTICIPANT: {\n            const data = action.data\n            let idUse = getIdToUse(data)\n\n            if (state.avatarDialogOpen) {\n                let ppp = state.pendingParticipants;\n                ppp.push({ oper: \"REMOVE\", data: data });\n\n                return {\n                    ...state,\n                    pendingParticipants: [...ppp]\n                }\n            }\n\n            let pp = state.participants\n            delete pp[idUse]\n            gParts = pp;\n\n            if (idUse in timedOutParticipants) {\n                delete timedOutParticipants[idUse];\n            }\n\n            return {\n                ...state,\n                participants: { ...pp }\n            }\n        }\n        case Actions.FLUSH_PARTICIPANT: {\n            gParts = {};\n            timedOutParticipants = {};\n\n            return {\n                ...state,\n                pendingParticipants: [],\n                participants: {}\n            }\n        }\n        case Actions.AVATAR_DIALOG_OPEN: {\n            return {\n                ...state,\n                avatarDialogOpen: action.data\n            }\n        }\n        case Actions.PROCESS_PENDING_PARTICIPANTS: {\n            let ppp = state.pendingParticipants;\n            let pp = state.participants;\n\n            for (let idx in ppp) {\n                let item = ppp[idx];\n\n                // Defensive check to prevent crash due to data being undefined\n                if (!(item && item.data)) continue\n\n                let idUse = getIdToUse(item.data)\n\n                if (item.oper === \"ADD\") {\n                    pp[idUse] = item.data;\n                } else {\n                    delete pp[idUse];\n\n                    if (idUse in timedOutParticipants) {\n                        delete timedOutParticipants[idUse];\n                    }\n\n                }\n            }\n\n            if (checkIfPartsUpdateNeeded(pp)) {\n                gParts = pp;\n            }\n            return {\n                ...state,\n                pendingParticipants: [],\n                participants: { ...pp }\n            }\n        }\n        case Actions.SET_COMMUNITYUSER: {\n            setLocal(action.data)\n            return {\n                ...state,\n                communityUser: action.data\n            }\n        }\n        case Actions.SET_SPINNER_EVENT: {\n            return {\n                ...state,\n                spinnerEvt: processSpinner(state.spinnerEvt, action.data, state.clockDrift)\n            }\n        }\n        case Actions.SET_LETITSNOW_EVENT: {\n            return {\n                ...state,\n                letItSnowEvt: processLetItSnow(state.letItSnowEvt, action.data, state.clockDrift)\n            }\n        }\n        case Actions.SET_FDICE_EVENT: {\n            return {\n                ...state,\n                fdiceEvt: processFdice(state.fDiceEvt, action.data, state.clockDrift)\n            }\n        }\n        default:\n            return state;\n    }\n}\n\nexport default mainReducer\n","import React, { Suspense } from 'react';\nimport { lazyWithRetry } from './lazyWithRetry';\nimport { ThemeProvider } from '@material-ui/core/styles'\nimport { Provider } from 'react-redux'\nimport { createMuiTheme } from '@material-ui/core/styles';\nimport purple from '@material-ui/core/colors/purple';\nimport { Route, BrowserRouter as Router, Switch } from 'react-router-dom';\nimport { useCookies } from 'react-cookie';\nimport { CookiesProvider } from 'react-cookie';\nimport CookieConsent from './CookieConsent';\n\nimport { createStore } from 'redux';\nimport reducer from \"./store/reducer\"\nimport * as WBCReactGA from './WBCReactGA';\nconst HomePage = lazyWithRetry(() => import(/* webpackPrefetch: true, webpackChunkName: \"homepage\" */'./Home/HomePage'));\nconst App = lazyWithRetry(() => import(/* webpackPrefetch: true, webpackChunkName: \"app\" */'./App'));\nconst store = createStore(reducer,\n    window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__())\n// WBCReactGA.initialize('UA-169613319-1', { debug: false });\n\nconst theme = createMuiTheme({\n    palette: {\n        primary: purple,\n        secondary: {\n            main: \"#1CB1C4\"\n        },\n    },\n    status: {\n        danger: 'orange',\n    },\n    typography: {\n        // In Chinese and Japanese the characters are usually larger,\n        // so a smaller fontsize may be appropriate.\n        fontSize: 7,\n    },\n    overrides: {\n        MuiCssBaseline: {\n            '@global': {\n                '*': {\n                    'scrollbar-width': 'thin',\n                },\n                '*::-webkit-scrollbar': {\n                    width: '6px',\n                    height: '6px',\n                },\n                '*::-webkit-scrollbar-track': {\n                    background: 'white'\n                },\n                '*::-webkit-scrollbar-thumb': {\n                    backgroundColor: 'grey',\n                    borderRadius: '2px',\n                },\n            }\n        }\n    }\n});\n\nexport default function AppOuter(props) {\n    const [cookies] = useCookies(['wbcAnalyticsCC', 'wbcAdsCC']);\n\n    React.useEffect(() => {\n        if (cookies.wbcAnalyticsCC && cookies.wbcAnalyticsCC === \"true\") {\n            window.wbcAnalyticsCC = true;\n            WBCReactGA.initializeGoogleTagManager();\n            WBCReactGA.initializeClarityTagManager();\n            WBCReactGA.initializeGA();\n        }\n    }, [cookies])\n\n    return (\n        <div >\n            <Provider store={store}>\n              <CookiesProvider defaultSetOptions={{ path: '/' }}>\n                <ThemeProvider theme={theme}>\n                    <Router>\n                        <Suspense fallback={<div>Loading...</div>}>\n                            <Switch>\n                                <Route exact path=\"/\" component={HomePage} />\n                                <Route component={App} />\n                            </Switch>\n                        </Suspense>\n                    </Router>\n                    { console.log(\"cookies.wbcAnalyticsCC = \", cookies)}\n                    {!cookies.wbcAnalyticsCC && <CookieConsent />}\n                </ThemeProvider>\n              </CookiesProvider>\n            </Provider>\n        </div >\n\n    );\n}","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === 'localhost' ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === '[::1]' ||\n    // 127.0.0.0/8 are considered localhost for IPv4.\n    window.location.hostname.match(\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n    )\n);\n\nexport function register(config) {\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener('load', () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n              'worker. To learn more, visit https://bit.ly/CRA-PWA'\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl, config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                'New content is available and will be used when all ' +\n                  'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log('Content is cached for offline use.');\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl, {\n    headers: { 'Service-Worker': 'script' },\n  })\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get('content-type');\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf('javascript') === -1)\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.'\n      );\n    });\n}\n\nexport function unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready\n      .then(registration => {\n        registration.unregister();\n      })\n      .catch(error => {\n        console.error(error.message);\n      });\n  }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './AppOuter';\nimport * as serviceWorker from './serviceWorker';\nimport './styles/iosStyles.css'\n\nrequire('./styles/indexBasic.scss')\n\n//window.LOG_LEVEL = 'DEBUG';\n\nReactDOM.render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n  document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","export const SET_USER = \"[MAIN] __SET_USER__ \"\nexport const SET_EXP_REMIND = \"[MAIN] __SET_EXP_REMIND \"\nexport const SET_USER_PROFILE = \"[MAIN] SET_USER_PROFILE\"\nexport const SET_TUTOR_GROUP = \"[MAIN] SET_TUTOR_GROUP\"\nexport const SET_TUTOR_USERTYPE = \"[MAIN] SET_TUTOR_USERTYPE\"\nexport const OPEN_AUTH_DIALOG = \"[MAIN] _OPEN_AUTH_DIALOG \"\nexport const SET_CONFIG= \"[MAIN] SET_CONFIG\"\nexport const ADD_PARTICIPANT= \"[MAIN] ADD_PARTICIPANT\"\nexport const REMOVE_PARTICIPANT= \"[MAIN] REMOVE_PARTICIPANT\"\nexport const FLUSH_PARTICIPANT= \"[MAIN] FLUSH_PARTICIPANT\"\nexport const PROCESS_PENDING_PARTICIPANTS = \"[MAIN] PROCESS_PENDING_PARTICIPANTS\"\nexport const AVATAR_DIALOG_OPEN = \"[MAIN] AVATAR_DIALOG_OPEN\"\nexport const ADD_ACTIVE= \"[MAIN] ADD_ACTIVE\"\nexport const DELETE_ACTIVE = \"[MAIN] DELETE_ACTIVE\"\nexport const SET_NOUSER = \"[MAIN] SET_NO_USER\"\nexport const SET_GVPAGE = \"[MAIN] SET_GVPAGE\"\nexport const SET_SESSION_DIALOG = \"[MAIN] SET_SESSION_DIALOG\"\nexport const SET_BOARD_TYPE = \"[MAIN] SET_BOARD_TYPE\"\nexport const SET_TAB = \"[MAIN] SET_TAB\"\nexport const SET_TEACHER = \"[MAIN] SET_TEACHER\"\nexport const SET_COUNTRY= \"[MAIN] SET_COUNTRY\"\nexport const SET_CLIENT_LOC= \"[MAIN] SET_CLIENT_LOC\"\nexport const RAISE_HAND= \"[MAIN] RAISE_HAND\"\nexport const ASSISTANCE_REQUEST= \"[MAIN] ASSISTANCE_REQUEST\"\nexport const CHAT_MSG= \"[MAIN] CHAT_MSG\"\nexport const TIMER_EVENT= \"[MAIN] TIMER_EVENT\"\nexport const BOARD_LOCK= \"[MAIN] BOARD_LOCK\"\nexport const PAGE_LOCK= \"[MAIN] PAGE_LOCK\"\nexport const SET_PALETTE= \"[MAIN] SET_PALETTE\"\nexport const SHOWCASE= \"[MAIN] SHOWCASE\"\nexport const SET_RICH_TEXT= \"[MAIN] SET_RICH_TEXT\"\nexport const SET_DICE= \"[MAIN] SET_DICE\"\nexport const SET_FOLLOW= \"[MAIN] SET_FOLLOW\"\nexport const SET_CLOCK_DRIFT= \"[MAIN] SET_CLOCK_DRIFT\"\nexport const SET_NOTIFICATION= \"[MAIN] SET_NOTIFICATION\"\nexport const SET_SYNC_DISABLED= \"[MAIN] SET_SYNC_DISABLED\"\nexport const SET_DRAWER_WALKER= \"[MAIN] SET_DRAWER_WALKER\"\nexport const SET_GRADING_WALKER= \"[MAIN] SET_GRADING_WALKER\"\nexport const SET_CLICK_MODE= \"[MAIN] SET_CLICK_MODE\"\nexport const SET_COMMUNITYUSER = \"[MAIN] SET_COMMUNITYUSER\"\nexport const SET_SPINNER_EVENT = \"[MAIN] SET_SPINNER_EVENT\"\nexport const SET_PERSONAL_CONFIG = \"[MAIN] SET_PERSONAL_CONFIG\"\nexport const SET_GRID_BROWSER = \"[MAIN] SET_GRID_BROWSER\"\nexport const SET_MATRIX_GRID = \"[MAIN] SET_MATRIX_GRID\"\nexport const SET_LETITSNOW_EVENT = \"[MAIN] SET_LETITSNOW_EVENT\"\nexport const SET_TIME_MACHINE = \"[MAIN] SET_TIME_MACHINE\"\nexport const SET_BACK_GROUND = \"[MAIN] SET_BACK_GROUND\"\nexport const SET_BOARD_TOOLS = \"[MAIN] SET_BOARD_TOOLS\"\nexport const SET_FDICE_EVENT = \"[MAIN] SET_FDICE_EVENT\"\nexport const ALL_EVENTS = \"[MAIN] ALL_EVENTS\"\nexport const FORM_SUBMIT = \"[MAIN] FORM_SUBMIT\"\nexport const UPDATE_ENGAGEMENT_SCORE = \"[MAIN] UPDATE_ENGAGEMENT_SCORE\"\nexport const MEETING_TO_JOIN = \"[MAIN] MEETING_TO_JOIN\"\nexport const SET_API_MODE = \"[MAIN] SET_API_MODE\"\nexport const SET_ENGAGEMENT_STICKER = \"[MAIN] SET_ENGAGEMENT_STICKER\"\nexport const SET_KEYB_MODE = \"[MAIN] SET_KEYB_MODE\"\nexport const SET_VIDEO_STATE = \"[MAIN] SET_VIDEO_STATE\"\nexport const SET_MODE = \"[MAIN] SET_MODE\"\nexport const SET_MOBILE_MODE = \"[MAIN] SET_MOBILE_MODE\"\nexport const SET_ALERT_MESSAGES = \"[MAIN] SET_ALERT_MESSAGES\"\nexport const POP_ALERT_MESSAGES = \"[MAIN] POP_ALERT_MESSAGES\"\nexport const SET_VIDEO_CONFIG = \"[MAIN] SET_VIDEO_CONFIG\"\nexport const PENDING_SUBSCRIPTIONS = \"[MAIN] PENDING_SUBSCRIPTIONS\"\nexport const SET_SHARED_SCREEN = \"[MAIN] SET_SHARED_SCREEN\"\nexport const SET_BOARD_RECORDING = \"[MAIN] SET_BOARD_RECORDING\"\nexport const ADD_CLASSPOLL_EVENT = \"[MAIN] ADD_CLASSPOLL_EVENT\"\nexport const SET_EMBEDDED_MODE = \"[MAIN] SET_EMBEDDED_MODE\"\nexport const SET_PAGE_ADDING = \"[MAIN] SET_PAGE_ADDING\"\nexport const SET_SHARED_SCREEN_DIALOG = \"[MAIN] SET_SHARED_SCREEN_DIALOG\"\n\nexport function setSharedScreenDialog(data) {\n    return {\n        type: SET_SHARED_SCREEN_DIALOG,\n        data\n    }\n}\nexport function setEmbeddedMode(data) {\n    return {\n        type: SET_EMBEDDED_MODE,\n        data\n    }\n}\nexport function addClassPollEvent(data) {\n    return {\n        type: ADD_CLASSPOLL_EVENT,\n        data\n    }\n}\n\nexport function setPageAdding(data) {\n    return {\n        type: SET_PAGE_ADDING,\n        data\n    }\n}\nexport function setBoardRecording(data) {\n    return {\n        type: SET_BOARD_RECORDING,\n        data\n    }\n}\nexport function setSharedScreen(data) {\n    return {\n        type: SET_SHARED_SCREEN,\n        data\n    }\n}\nexport function setPendingSubsciptions(data) {\n    return {\n        type: PENDING_SUBSCRIPTIONS,\n        data\n    }\n}\nexport function setVideoConfig(data) {\n    return {\n        type: SET_VIDEO_CONFIG,\n        data\n    }\n}\nexport function setAlertMessages(data) {\n    return {\n        type: SET_ALERT_MESSAGES,\n        data\n    }\n}\nexport function popAlertMessage() {\n    let data = null\n    return {\n        type: POP_ALERT_MESSAGES,\n        data\n    }\n}\nexport function setMobileMode(data) {\n    return {\n        type: SET_MOBILE_MODE,\n        data\n    }\n}\nexport function setMode(data) {\n    return {\n        type: SET_MODE,\n        data\n    }\n}\nexport function setVideoState(data) {\n    return {\n        type: SET_VIDEO_STATE,\n        data\n    }\n}\nexport function setKeyBMode(data) {\n    return {\n        type: SET_KEYB_MODE,\n        data\n    }\n}\n\nexport function disableKeyBMode() {\n    let data = {enable: false, lastKey: \"\"}\n    return {\n        type: SET_KEYB_MODE,\n        data\n    }\n}\n\nexport function setEngagementSticker(data) {\n    return {\n        type: SET_ENGAGEMENT_STICKER,\n        data\n    }\n}\nexport function setApiMode(data) {\n    return {\n        type: SET_API_MODE,\n        data\n    }\n}\nexport function meetingToJoin(data) {\n    return {\n        type: MEETING_TO_JOIN,\n        data\n    }\n}\nexport function updateEngagementScore(data) {\n    return {\n        type: UPDATE_ENGAGEMENT_SCORE,\n        data\n    }\n}\nexport function addFormSubmit(data) {\n    return {\n        type: FORM_SUBMIT,\n        data\n    }\n}\nexport function addAllEvents(data) {\n    return {\n        type: ALL_EVENTS,\n        data\n    }\n}\nexport function setBoardTools(data) {\n    return {\n        type: SET_BOARD_TOOLS,\n        data\n    }\n}\n\nexport function setBackGround(data) {\n    return {\n        type: SET_BACK_GROUND,\n        data\n    }\n}\n\nexport function setTimeMachine(data) {\n    return {\n        type: SET_TIME_MACHINE,\n        data\n    }\n}\nexport function setMatrixGrid(data) {\n    return {\n        type: SET_MATRIX_GRID,\n        data\n    }\n}\nexport function setGridBrowser(data) {\n    return {\n        type: SET_GRID_BROWSER,\n        data\n    }\n}\nexport function setClickMode(data) {\n    return {\n        type: SET_CLICK_MODE,\n        data\n    }\n}\n\nexport function setPersonalConfig(data) {\n    return {\n        type: SET_PERSONAL_CONFIG,\n        data\n    }\n}\n\nexport function setDrawerWalker(data) {\n    return {\n        type: SET_DRAWER_WALKER,\n        data\n    }\n}\n\nexport function setGradingWalker(data) {\n    return {\n        type: SET_GRADING_WALKER,\n        data\n    }\n}\n\nexport function setSyncDisabled(data) {\n    return {\n        type: SET_SYNC_DISABLED,\n        data\n    }\n}\nexport function setNotification(data) {\n    return {\n        type: SET_NOTIFICATION,\n        data\n    }\n}\nexport function setDrift(data) {\n    return {\n        type: SET_CLOCK_DRIFT,\n        data\n    }\n}\nexport function setFollow(data) {\n    return {\n        type: SET_FOLLOW,\n        data\n    }\n}\nexport function showDice(data) {\n    return {\n        type: SET_DICE,\n        data\n    }\n}\nexport function setRichText(data) {\n    return {\n        type: SET_RICH_TEXT,\n        data\n    }\n}\nexport function setShowcase(data) {\n    return {\n        type: SHOWCASE, \n        data\n    }  \n}\nexport function setPalette(data) {\n    return {\n        type: SET_PALETTE, \n        data\n    }  \n}\nexport function setBoardLock(data) {\n    return {\n        type: BOARD_LOCK, \n        data\n    }  \n}\nexport function setPageLock(data) {\n    return {\n        type: PAGE_LOCK, \n        data\n    }  \n}\nexport function setTimerEvent(data) {\n    return {\n        type: TIMER_EVENT, \n        data\n    }  \n}\nexport function setRaiseHand(data) {\n    return {\n        type: RAISE_HAND, \n        data\n    }  \n}\nexport function setChatMsg(data) {\n    return {\n        type: CHAT_MSG, \n        data\n    }  \n\n}\nexport function assistanceRequest(data) {\n    return {\n        type: ASSISTANCE_REQUEST, \n        data\n    }  \n}\n\nexport function setTeacher(data) {\n    return {\n        type: SET_TEACHER, \n        data\n    }  \n}\n\nexport function setCountry(data) {\n    return {\n        type: SET_COUNTRY, \n        data\n    }  \n}\n\nexport function setClientLoc(data) {\n    return {\n        type: SET_CLIENT_LOC,\n        data\n    }\n}\n\nexport function setBoardType(data) {\n    return {\n        type: SET_BOARD_TYPE, \n        data\n    }  \n}\n\nexport function setTab(data) {\n    return {\n        type: SET_TAB, \n        data\n    }  \n}\n\nexport function setSessionDialog(data) {\n    return {\n        type: SET_SESSION_DIALOG, \n        data\n    }\n}\n\nexport function setGVPage(data) {\n    return {\n        type: SET_GVPAGE,\n        data\n    }\n}\n\nexport function setNoUser() {\n    return {\n        type: SET_NOUSER,\n    }\n}\n\nexport function setUser(data) {\n    return {\n        type: SET_USER,\n        data\n    }\n}\n\nexport function setNotificationRemind(data) {\n    return {\n        type: SET_EXP_REMIND,\n        data\n    }\n}\n\nexport function setUserProfile(data) {\n    return {\n        type: SET_USER_PROFILE,\n        data\n    }\n}\n\nexport function setTutorGroup(data) {\n    return {\n        type: SET_TUTOR_GROUP,\n        data\n    }\n}\n\nexport function setTutorUsertype(data) {\n    return {\n        type: SET_TUTOR_USERTYPE,\n        data\n    }\n}\nexport function openAuthDialog(data) {\n    return {\n        type: OPEN_AUTH_DIALOG,\n        data\n    }\n}\n\nexport function setBoardConfig(data) {\n    if (data.starterMode) {\n        data.fourToolsStudent = true\n    }\n    return {\n        type: SET_CONFIG,\n        data\n    }\n}\nexport function addParticipant(data) {\n    return {\n        type: ADD_PARTICIPANT,\n        data\n    }\n}\nexport function removeParticipants(data) {\n    return {\n        type: REMOVE_PARTICIPANT,\n        data\n    }\n}\nexport function flushParticipants() {\n    return {\n        type: FLUSH_PARTICIPANT\n    }\n}\nexport function processPendingParticipants() {\n    return {\n        type: PROCESS_PENDING_PARTICIPANTS\n    }\n}\n\nexport function setAvatarDialogOpen(data) {\n    return {\n        type: AVATAR_DIALOG_OPEN,\n        data\n    }\n}\n\nexport function addActive(data) {\n    return {\n        type: ADD_ACTIVE,\n        data\n    }\n}\nexport function deleteActive(data) {\n    return {\n        type: DELETE_ACTIVE,\n        data\n    }\n}\n\nexport function setCommunityUser(data) {\n    return {\n        type: SET_COMMUNITYUSER,\n        data\n    }\n}\n\nexport function spinnerEvent(data) {\n    return {\n        type: SET_SPINNER_EVENT,\n        data\n    }\n}\n\nexport function fDiceEvent(data) {\n    return {\n        type: SET_FDICE_EVENT,\n        data\n    }\n}\n\nexport function getPageLock(pg) {\n    const JOINURL = window.location.href.split(\"/board/\")\n    var sessID = JOINURL[1].split(\"-pgNum-\")\n    var match = false \n    var ev = null \n    for (let i=0; i< pg.events.length; i++) {\n        const p = pg.events[i]\n        var ff = p.id.split(\"-LockPage-\")\n        if (ff[1] === sessID[1]) {\n            match = true\n            ev = p \n            break \n        }\n    }\n    return ({pgNum: sessID[1], locked: match, ev: ev})\n}\nexport function letItSnowEvent(data) {\n    return {\n        type: SET_LETITSNOW_EVENT,\n        data\n    }\n}","import ReactGA from 'react-ga';\n\nexport function event(props) {\n    if (window.wbcAnalyticsCC) {\n        ReactGA.event(props);\n    }\n}\n\nexport function pageview(props) {\n    if (window.wbcAnalyticsCC) {\n        ReactGA.pageview(props);\n    }\n}\n\nexport function exception(props) {\n    if (window.wbcAnalyticsCC) {\n        ReactGA.exception(props);\n    }\n}\n\n// Google Analytics\nexport function initializeGA() {\n    if (window.wbcAnalyticsCC) {\n        ReactGA.initialize('UA-169613319-1', { debug: false });\n    }\n}\n\n// Google Tag Manager\nexport function initializeGoogleTagManager() {\n    console.log(\"Initializing Google Tag Manager\");\n    (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\n    new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\n    j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= // eslint-disable-line eqeqeq\n    'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n    })(window,document,'script','dataLayer','GTM-M8MPR46');\n}\n\nexport function initializeClarityTagManager() {\n    (function(c,l,a,r,i,t,y){\n        c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};\n        t=l.createElement(r);t.async=1;t.src='https://www.clarity.ms/tag/'+i;\n        var y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);\n    })(window, document, 'clarity', 'script', 'kkk0idu6gt');\n}","\nvar LOCAL_STORAGE = {}\n\nexport function getItem(name) {\n    try {\n        return localStorage.getItem(name)\n    } catch {\n        // console.error(\"cannot get storage\", name, LOCAL_STORAGE[name])\n        return LOCAL_STORAGE[name];\n    }\n}\n\nexport function setItem(name, value) {\n    try {\n        return localStorage.setItem(name, value) \n    } catch {\n        if (!(name in LOCAL_STORAGE) && (name === \"mystoreID\")) {\n            alert(\"Cookies are disabled. Whiteboard.Chat functionality will be impaired.\");\n        }\n        LOCAL_STORAGE[name] = value;\n        // console.error(\"cannot set storage:\", name, \"value:\", value)\n        return value;\n    }\n}\n\n\nexport function removeItem(name) {\n    try {\n        return localStorage.removeItem(name) \n    } catch {\n        delete LOCAL_STORAGE[name];\n        // console.error(\"cannot remove storage\", name) \n        return null \n    }\n}\n\nexport function clear() {\n    try {\n        return localStorage.clear() \n    } catch {\n        LOCAL_STORAGE = {};\n        // console.error(\"cannot clear\") \n        return null \n    }\n}\n","import { lazy } from 'react';\nimport * as mylocalStorage from \"./mylocalStorage\";\n\nexport const lazyWithRetry = (componentImport) =>\n  lazy(async () => {\n    const pageHasAlreadyBeenForceRefreshed = JSON.parse(\n      mylocalStorage.getItem(\n        'page-has-been-force-refreshed'\n      ) || 'false'\n    );\n\n    try {\n      const component = await componentImport();\n\n      mylocalStorage.setItem(\n        'page-has-been-force-refreshed',\n        'false'\n      );\n\n      return component;\n    } catch (error) {\n      if (!pageHasAlreadyBeenForceRefreshed) {\n        // Assuming that the user is not on the latest version of the application.\n        // Let's refresh the page immediately.\n        mylocalStorage.setItem(\n          'page-has-been-force-refreshed',\n          'true'\n        );\n        return window.location.reload();\n      }\n\n      // The page has already been reloaded\n      // Assuming that user is already using the latest version of the application.\n      // Let's let the application crash and raise the error.\n      throw error;\n    }\n  });","import Translations from './translations.json';\nimport GetLang from '../LangSettings';\n\nvar language = \"EN\";\n\nexport function setLangauge() {\n    language = GetLang();\n    if (!Translations[language]) {\n        language = \"EN\"\n    }\n}\n\nconst Translate = (string) => {\n    if ((language && language!==\"EN\")) {\n        const translated = Translations[language][string];\n        if (translated) {\n            return translated;\n        } else {\n            return string\n        }\n    } else {\n        return string\n    }\n};\n\nexport default Translate;","import React, { useState } from 'react';\nimport { useCookies } from 'react-cookie';\nimport \"./styles/accessinclusion.scss\";\nimport \"./styles/fontawesome/scss/fontawesome.scss\"\nimport \"./styles/cookieConsent.css\";\nimport { IconButton } from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport Hidden from '@material-ui/core/Hidden';\nimport * as microsoftTeams from \"@microsoft/teams-js\";\n// import CookieIcon from '@material-ui/core/Cookie';\n\nexport default function CookieConsent() {\n    const [cookies, setCookie] = useCookies(['wbcAnalyticsCC', 'wbcAdsCC']);\n    const [insideMSTeams, setInsideMSTeams] = useState(undefined)\n    // const [temporaryBannerDisable, setTemporaryBannerDisable] = useState(true)\n    const temporaryBannerDisable = false;\n    \n    function iniFrame() {\n        var withiniframe = false;\n        if (window.location !== window.parent.location) {\n            // The page is in an iFrames\n            // console.log(\"The page is in an iFrame\");\n            withiniframe = true;\n        }\n        else {\n            // The page is not in an iFrame\n            // console.log(\"The page is not in an iFrame\");\n            withiniframe = false;\n        }\n        return withiniframe;\n    }\n\n    React.useEffect(() => {\n        if (insideMSTeams !== undefined) {\n            return;\n        }\n        try {\n            microsoftTeams.app.initialize().then(() => {\n                // console.log(\"Detected inside msteams in initialize function\")\n                window.insideMSTeams = true\n                setInsideMSTeams(true)\n                microsoftTeams.app.getContext().then((context) => {\n                window.msHost = context.app.host\n                // console.log(\"Detected msHost = \", window.msHost);\n                // console.log(\"Detected clientType = \", context.app.host.clientType);\n                })\n            }, () => {\n                window.insideMSTeams = false\n                setInsideMSTeams(false)\n            })\n            setTimeout(() => {\n            if (window.insideMSTeams === undefined) {\n                window.insideMSTeams = false\n                setInsideMSTeams(false)\n            }\n            }, 3000)\n        } catch {\n            window.insideMSTeams = false\n            setInsideMSTeams(false)\n        }\n    }, [insideMSTeams])\n\n    function cookiesAccepted() {\n        var d = new Date(0);\n        // Six months per regulations\n        d.setUTCMilliseconds(Date.now()+15780000000);\n        setCookie('wbcAnalyticsCC', true, { path: \"/\", expires: d, sameSite: \"strict\" })\n        setCookie('wbcAdsCC', true, { path: \"/\", expires: d, sameSite: \"strict\" })\n        window.wbcAnalyticsCC = true\n        window.wbcAdsCC = true\n    }\n\n    function onlyAnalyticsCookiesAccepted() {\n        var d = new Date(0);\n        // Six months per regulations\n        d.setUTCMilliseconds(Date.now()+15780000000);\n        setCookie('wbcAnalyticsCC', true, { path: \"/\", expires: d, sameSite: \"strict\" })\n        setCookie('wbcAdsCC', false, { path: \"/\", expires: d, sameSite: \"strict\" })\n        window.wbcAnalyticsCC = true\n        window.wbcAdsCC = false\n    }\n\n    function cookiesPanelClosed() {\n        var d = new Date(0);\n        // Show again after 2 days\n        d.setUTCMilliseconds(Date.now()+172800000);\n        setCookie('wbcAnalyticsCC', false, { path: \"/\", expires: d })\n        setCookie('wbcAdsCC', false, { path: \"/\", expires: d })\n        window.wbcAnalyticsCC = false\n        window.wbcAdsCC = false\n    }\n\n    React.useEffect(() => {\n\n    },[cookies])\n\n    return(\n    <div>\n        {temporaryBannerDisable === false && !iniFrame() && (insideMSTeams === false && !cookies.wbcAnalyticsCC &&\n        <div className=\"inclusion-main\">\n            <Hidden mdUp>\n                <div className=\"contact-form-wrapper justify-content-center\">\n                    <form action=\"#\" className=\"cookie-consent-form-mini\">\n                        <p className=\"cc-description-mini\">We use cookies for application analytics and to display ads on the free plan.\n                        We do not sell your personal data.\n                        </p>\n                        <a className=\"privacy-link\" href=\"/privacy\" target=\"_blank\" rel=\"noopener noreferrer\"> Privacy Details</a>\n                        <div className=\"cc-form-controls-mini\">\n                        <div className=\"submit-button-wrapper-mini\" onClick={cookiesAccepted}>\n                            <input type=\"submit\" value=\"Accept\"/>\n                        </div>\n                        <div className=\"submit-button-wrapper-mini\" onClick={onlyAnalyticsCookiesAccepted}>\n                            <input className=\"outline\" type=\"submit\" value=\"Necessary Only\"/>\n                        </div>\n                        <IconButton aria-label=\"delete\" onClick={cookiesPanelClosed}>\n                            <CloseIcon />\n                        </IconButton>\n                        </div>\n                    </form>\n                </div>\n            </Hidden>\n            <Hidden smDown>\n                <div className=\"contact-form-wrapper justify-content-center\">\n                    <form action=\"#\" className=\"cookie-consent-form\">\n                        <img alt=\"cookie icon\" className=\"cookieImg\" src=\"/WBCCookie.svg\"/>\n                        <p className=\"cc-description\">We use cookies for application analytics and to display ads on the free plan.\n                        We do not sell your personal data.\n                        <a className=\"privacy-link\" href=\"/privacy\" target=\"_blank\" rel=\"noopener noreferrer\"> Privacy Details</a>\n                        </p>\n                        {/* <div onClick={}>Privacy</div> */}\n                        <div className=\"cc-form-controls\">\n                        <div className=\"submit-button-wrapper\" onClick={cookiesAccepted}>\n                            <input type=\"submit\" value=\"Accept All\"/>\n                        </div>\n                        <div className=\"submit-button-wrapper\" onClick={onlyAnalyticsCookiesAccepted}>\n                            <input className=\"outline\" type=\"submit\" value=\"Necessary Only\"/>\n                        </div>\n                        {/* <div className=\"submit-button-wrapper\" onClick={customizeCookies}>\n                            <input className=\"outline\" type=\"submit\" value=\"Custom\"/>\n                        </div> */}\n                        <IconButton aria-label=\"delete\" onClick={cookiesPanelClosed}>\n                            <CloseIcon />\n                        </IconButton>\n                        </div>\n                    </form>\n                </div>\n            </Hidden>\n        </div>)}\n    </div>\n    )\n}"],"sourceRoot":""}