{"version":3,"sources":["CookieConsent.js","LangSettings.js","store/reducer.js","AppOuter.js","serviceWorker.js","index.js","store/actions.js","WBCReactGA.js","lazyWithRetry.js","mylocalStorage.js","Translator/Translations.js"],"names":["CookieConsent","useCookies","cookies","setCookie","useState","undefined","insideMSTeams","setInsideMSTeams","cookiesAccepted","d","Date","setUTCMilliseconds","now","path","expires","sameSite","window","wbcAnalyticsCC","wbcAdsCC","onlyAnalyticsCookiesAccepted","cookiesPanelClosed","React","useEffect","microsoftTeams","initialize","then","getContext","context","msHost","app","host","setTimeout","location","parent","className","mdUp","action","href","target","rel","onClick","type","value","aria-label","smDown","alt","src","GetLang","string","language","lang","personalConfig","studLang","boardConfig","parsedLang","JSON","parse","parsedStudLang","sessLang","ll","mylocalStorage","initialState","user","userProfile","tutorGroup","tutorUsertype","tutorTourDone","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","getTime","timedOut","key","obj1","obj2","KEEPALIVE_TIMEOUT_SECONDS","checkIfPartsUpdateNeeded","newParts","removeMSTeamsEmail","em","email","includes","split","replace","pendingTimer","processDice","e","classDice","teacherDice","rollerName","inval","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","session","TutorClass","processPoll","cp","question","forEach","q","mainReducer","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","WBCReactGA","CookiesProvider","defaultSetOptions","ThemeProvider","fallback","exact","component","console","log","hostname","match","require","ReactDOM","render","StrictMode","document","getElementById","navigator","serviceWorker","ready","registration","unregister","catch","error","message","SET_USER","SET_EXP_REMIND","SET_USER_PROFILE","SET_TUTOR_GROUP","SET_TUTOR_USERTYPE","SET_TUTOR_TOURDONE","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","setTutorTourDone","openAuthDialog","setBoardConfig","starterMode","fourToolsStudent","addParticipant","flushParticipants","processPendingParticipants","setAvatarDialogOpen","deleteActive","setCommunityUser","spinnerEvent","fDiceEvent","getPageLock","pg","sessID","p","pgNum","letItSnowEvent","event","ReactGA","pageview","exception","initializeGA","debug","initializeGoogleTagManager","w","s","l","f","getElementsByTagName","j","createElement","async","parentNode","insertBefore","initializeClarityTagManager","a","r","t","y","arguments","componentImport","lazy","pageHasAlreadyBeenForceRefreshed","reload","LOCAL_STORAGE","getItem","localStorage","setItem","alert","removeItem","clear","Translations","Translate","translated"],"mappings":"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","file":"static/js/main.867f8e09.chunk.js","sourcesContent":["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}","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    tutorTourDone: false,\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(boardType && boardType.session && boardType.session.TutorClass) return 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_TUTOR_TOURDONE: {\n            return {\n                ...state,\n                tutorTourDone: 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}\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 SET_TUTOR_TOURDONE = \"[MAIN] SET_TUTOR_TOURDONE\"\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}\n\nexport function setTutorTourDone(data) {\n    return {\n        type: SET_TUTOR_TOURDONE,\n        data\n    }\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}","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  });","\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 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;"],"sourceRoot":""}