{"version":3,"sources":["i18n.ts","components/RTL.tsx","hooks/useScrollReset.ts","constants.ts","contexts/SettingsContext.tsx","hooks/useSettings.ts","theme/shadows.ts","theme/index.ts","components/dashboard/OrgPopover.tsx","components/interact/NavMenuItem.tsx","components/dashboard/SearchInput.tsx","components/interact/NavItem.tsx","components/dashboard/DashboardNavbar.tsx","components/dashboard/DashboardLayout.tsx","components/layout/LoadingScreen.tsx","components/layout/AuthGuard.tsx","components/layout/GuestGuard.tsx","routes.tsx","App.tsx","index.tsx","hooks/useMounted.ts","apis/httpCall.ts","apis/httpDispatch.ts","utils/copyObject.ts","utils/getActiveOrgInfo.ts","slices/taxonomy.ts","worker/init.ts","apis/chatApi.ts","utils/getInitials.ts","components/SmallUserInfo.tsx","components/layout/SpinnerScreen.tsx","contexts/AmplifyContext.tsx","utils/cleanUp.ts","utils/intervalJobs.ts","store/rootReducer.ts","store/favicon.ts","store/index.ts","utils/fileUpDownload.ts","slices/user.ts","slices/chat.ts","config.ts","slices/tag.ts","utils/dateFormatUtils.ts","contexts/SearchContext.tsx","hooks/useSearch.ts","slices/network.ts","utils/wait.ts","slices/organization.ts","utils/getUserDisplayName.ts","globals.ts","aws/lambdaCall.ts","aws/lambdaDispatch.ts","hooks/useAuth.ts","utils/getUserMinInfo.ts"],"names":["i18n","use","initReactI18next","init","resources","en","translation","fr","lng","fallbackLng","interpolation","escapeValue","RTL","props","children","direction","useEffect","document","dir","value","createCache","key","prepend","stylisPlugins","stylisRTLPlugin","useScrollReset","pathname","useLocation","window","scrollTo","THEMES","initialSettings","compact","responsiveFontSizes","roundedCorners","theme","SettingsContext","createContext","settings","saveSettings","SettingsProvider","useState","setSettings","Provider","updatedSettings","localStorage","setItem","JSON","stringify","storeSettings","Consumer","useSettings","useContext","lightShadows","darkShadows","baseOptions","components","MuiAvatar","styleOverrides","fallback","height","width","MuiButton","root","textTransform","MuiCssBaseline","boxSizing","html","MozOsxFontSmoothing","WebkitFontSmoothing","body","zIndex","MuiCardHeader","defaultProps","titleTypographyProps","variant","MuiLinearProgress","borderRadius","overflow","MuiListItemIcon","minWidth","marginRight","MuiPaper","backgroundImage","typography","button","fontWeight","fontFamily","h1","fontSize","h2","h3","h4","h5","h6","overline","themesOptions","MuiInputBase","input","opacity","color","WebkitBoxShadow","palette","action","active","background","default","paper","error","contrastText","main","mode","primary","success","text","secondary","warning","shadows","label","paddingLeft","paddingRight","MuiCard","boxShadow","MuiTextField","borderColor","MuiListItem","backgroundColor","divider","MuiTableCell","borderBottom","createCustomTheme","config","themeOptions","console","warn","Error","createTheme","merge","shape","MeOrgs","orgs","onMeClicked","onOrgClicked","opened","isSwitchingOrg","activeOrgId","useSelector","state","organization","activeUserMinInfo","getActiveUserMinInfo","Box","sx","display","flexDirection","MenuItem","px","py","onClick","disabled","alignItems","userInfo","size","showType","Typography","pl","mt","getActiveType","ACCZIOM_CLIENT","ACCZIOM_MEMBER","getUserDisplayName","Collapse","in","map","org","orgMinInfo","orgToMiniUser","a","organizationId","pr","OrgTeams","member","orgInfos","orgInfo","find","oid","tradingName","maxCount","getPopHeight","orgCount","teamCount","idx","OrgPopover","loading","onChange","logout","useAuth","mounted","useMounted","dispatch","useDispatch","navigate","useNavigate","anchorRef","useRef","memberInfos","clientSupplierInfos","filter","type","includes","clientSupplierIds","user","orgMenuOpen","setOrgMenuOpen","openedOrgId","setOpenedOrgId","length","tenary","findIndex","popHeight","setPopHeight","handleClickOrg","orgId","current","handleLogout","useCallback","initializeStates","log","toast","p","cursor","textDecoration","transform","ref","position","justifyContent","userToMiniUser","ThemeProvider","IconButton","ml","transition","Popover","anchorEl","anchorOrigin","horizontal","vertical","transformOrigin","keepMounted","onClose","open","PaperProps","CircularProgress","className","mid","Divider","mx","thm","style","NavMenuItem","path","data","isHorizontal","Icon","icon","title","href","items","setOpen","status","setStatus","selected","matchPath","caseSensitive","end","handleClose","onMouseEnter","event","stopPropagation","onMouseLeave","onMouseDown","onMouseUp","content","left","top","Badge","badgeContent","marginTop","mr","textOverflow","whiteSpace","maxHeight","item","SubIcon","SearchInput","placeholder","onSearch","hasButton","isSearching","query","setQuery","isFocused","setFocused","flexGrow","TextField","fullWidth","onFocus","onBlur","InputProps","bgcolor","e","target","onKeyDown","code","right","BACKGROUND_DEEP","NavItem","sourcePath","altName","pt","pb","src","alt","DashboardItems","authRequired","REQUIRE_NONE_MODE","TravelExploreIcon","REQUIRE_AUTH_MODE","RateReviewIcon","REQUIRE_NOT_AUTH_MODE","AccountCircleOutlinedIcon","searchBarUrls","notAuthUrlsForSame","notAuthUrlsForStart","authUrlsForSame","authUrlsForStart","DashboardNavbarRoot","experimentalStyled","AppBar","drawer","LOGO_BACK_SIZE","NAVBAR_HEIGHT","DashboardNavbar","searchApi","useSearch","isAuthenticated","searchInfo","orgsNeedReload","twilioStatus","chat","setIsSwitchingOrg","setItems","setLoading","activeOrgMinInfo","getActiveOrgMinInfo","displayTitle","toUpperCase","split","slice","join","enabledSearch","some","subHref","startsWith","circleType","handleSearch","q","handleGotoAccziom","domainName","mm","forEach","butItem","push","setDashboardItems","switchOrg","domain","location","host","curMember","initChatApi","setActiveOrgId","initNeedReloads","lambdaGetOrgActivatedMembersOfUser","uid","then","res","members","organizations","categories","categoryInfos","strRoles","roleInfos","teams","teamInfos","roles","rid","name","level","department","parse","assignment","production","transaction","createdAt","updatedAt","memberData","orgData","categoryData","roleData","teamData","teamIds","role","departmentValues","Object","values","obj","assignmentValues","tids","category","cat","anzicCategory","tid","team","sort","member0","member1","setOrgStructures","cleanTwilioStatus","catch","err","finally","circularEle","getElementById","innerHTML","substring","CircleType","radius","LARGE_LOGO_SIZE","destroy","sm","md","lg","xl","SHADOW_SIZE","id","placeHolder","loadingStatus","LoadingStatus","LOADING","option","DashboardLayoutRoot","AboutDashboardLayoutWrapper","flex","DashboardLayoutWrapper","paddingTop","DashboardLayoutContainer","DashboardLayoutContent","WebkitOverflowScrolling","DashboardLayout","auth","useSearchParams","searchParams","isMyAbout","get","LoadingScreen","NProgress","start","done","minHeight","AuthGuard","isFree","setError","NONE","subdomain","hostname","indexOf","initialLoad","checkLive","to","isFirst","SpinnerScreen","COMPLETED","GuestGuard","Loadable","Component","Login","lazy","Dashboard","Chat","ErrorPage","routes","element","App","useRoutes","isMobile","origin","replace","CssBaseline","toastOptions","isInitialized","ReactDOM","render","store","StyledEngineProvider","injectFirst","LocalizationProvider","dateAdapter","AdapterDateFns","CookiesProvider","isMounted","callHttpApi","url","params","gstore","addCallApiCount","fullUrl","querystring","axios","httpGetFreeCommunityToken","accsiomURIs","channel_uri","httpGetChannelById","sid","getMessage","httpGetParticipantsById","httpGetFileResourcesByItemId","itemId","microservice_uri","httpSearchChannelMessage","offset","limit","orgaboutus_uri","httpGetUsersMin","users","httpGetOrganizationInfo","httpGetUserInfo","httpGetAnzicTaxonomyInfoByType","ebsGetChannels","info","httpGetAttachmentFileDownloadUrl","deepCopy","Date","getTime","Array","reduce","arr","i","keys","newObj","objCopy","dest","getActiveOrgInfo","getState","v","activeOrgInfo","activeMember","mi","initialized","allIds","getActiveId","clientMode","memberMode","activeTeamId","ACCZIOM_USER","ACCZIOM_ORG","ACCZIOM_TEAM","getActiveIdByType","ACCZIOM_NONE","getActiveInfo","getActiveMinInfo","getUserMinInfoByID","userMinInfos","candidates","INDIVIDUAL_TYPES","ORG_TYPES","miniUser","createSlice","initialState","orgCategories","orgCategoryNeedReload","serviceCategories","serviceCategoryNeedReload","assetCategories","assetCategoryNeedReload","chatCategories","chatCategoryNeedReload","reducers","clearState","splice","setOrgCategoryNeedReload","payload","setServiceCategoryNeedReload","setAssetCategoryNeedReload","setChatCategoryNeedReload","setOrgCategories","setServiceCategories","setAssetCategories","setChatCategories","updateOrgCategory","newCategory","index","updateServiceCategory","updateAssetCategory","updateChatCategory","updateOrgCategoryByCode","updateServiceCategoryByCode","updateAssetCategoryByCode","updateChatCategoryByCode","reducer","clearTaxonomyState","actions","needReload","isLoading","cleanUpChat","chatApi","cleanUp","cleanUserMinInfos","Promise","resolve","initConnection","initFreeChatApi","initFreeConnection","setCurOrgNeedReload","setMemberNeedReload","clearOrganizationState","clearUserState","intervalJobs","CHECK_INTERVAL_MINUTES","setLoadingStatus","lambdaGetUserInfo","ui","setUserInfo","firstOrg","firstMember","organizationInfo","at","TwilioToAccsiomMsg","msg","convId","conversation","attrib","attributes","dateCreated","senderId","author","sent","client","token","conv","messages","lastMsgId","msgId","isConnecting","isActive","this","shutdown","_dispatch","connectionState","reject","getToken","_token","Conversations","create","_conn","initListeners","getFreeToken","FREE_USER_ID","initFreeListeners","uri","fetchUrl","localUrl","setMessageThumb","on","lambdaGetTwilioToken","updateToken","aMsg","files","undefined","loadImageThumbnail","loadVideoThumbnail","msgAdded","msgSent","updateLastMsgIndex","updateLastReadMsgIndex","createdBy","att","lastMessage","lastMessageTime","updateAttributes","lambdaAddAndDeleteMessages","textContent","textType","message","msgUpdated","lambdaUpdateMessage","removeMessage","identity","setTypingStarted","setTypingEnded","_conv","threadJoined","participant","lastReadMessageIndex","lastMsgIds","updateLastReadMsgIds","participants","creatorId","newUsers","getUserInfoByType","ACCZIOM_CLIENT_ORG","ACCZIOM_SUPPLIER","getUserIdByType","nonIndividuals","miniUsers","updateUserMinInfos","thread","friendlyName","recipients","unreadCount","isTyping","lastReadMsgIndex","lastMsgIndex","typerId","TwilioToAccsiomThread","setThread","promises","loadAvatar","getUnreadMessagesCount","val","setMsgUnreadCount","getUser","u","updateUserOnlineStatus","isOnline","evt","updateReasons","ur","getMessages","msgs","setMessages","all","post","twilio_notification_url","part","remove","msgIds","firstMsg","createConversation","joinedConv","lambdaCreateCommunityAdminParticipants","reiceipt","newRecipients","recipient","add","addRecipientsToThread","uids","removeParticipant","removeParticipants","unsubscribe","delete","cleanConversation","deletedIds","leave","removeParticipantsFromConversation","getConversationBySid","setConvDispatch","markThreadAsSeen","setAllMessagesRead","typing","from","ret","twilioMsgs","PAGE_SIZE","paginator","unshift","emoji","newReactions","reactions","userId","marks","vv","newAttrib","newBody","f","updateBody","_body","sendMessage","replyTo","uuidv4","newMsg","getInitials","colors","getInitialBackground","initials","sumInitials","charCodeAt","UserAvatar","isBatch","displayName","initialStr","avatar","Avatar","Math","floor","orgIconSize","bottom","UserAvatarWithOrg","orgSize","noTopbar","useTheme","THEME_COLOR_GRAY","Amplify","configure","amplifyConfig","handlers","INITIALIZE","LOGIN","LOGINSOCIAL","LOGOUT","REGISTER","VERIFY_CODE","RESEND_CODE","PASSWORD_RECOVERY","PASSWORD_RESET","AuthContext","platform","login","loginSocial","register","verifyCode","resendCode","passwordRecovery","passwordReset","AuthProvider","useReducer","Auth","currentAuthenticatedUser","userid","sub","username","email","initialize","password","signIn","challengeName","firstName","middleName","lastName","callApiInfo","lastCalledAt","curTime","round","IDLE_DURATION_MINUTES","signOut","currentSession","provider","param","federatedSignIn","customProvider","customState","pwd","fname","mname","lname","phone","signUp","confirmSignUp","resendSignUp","forgotPassword","newPassword","forgotPasswordSubmit","clearJobs","jobList","interval","initial","args","wait","job","rootReducer","combineReducers","chatReducer","organizationReducer","userReducer","network","networkReducer","tag","tagReducer","taxonomy","taxonomyReducer","favIconMiddleware","_store","next","result","curHref","getAttribute","setAttribute","configureStore","devTools","process","REACT_APP_ENABLE_REDUX_DEV_TOOLS","middleware","getDefaultMiddleware","serializableCheck","ignoredActions","concat","useReduxSelector","useReduxDispatch","fetch","arrayBuffer","buf","URL","createObjectURL","Blob","uploadFile","file","method","headers","reponse","requestedLocation","registeredVerificationInfo","inviteInfo","memberNeedReload","connectDlgOpen","signingOrgInfo","count","updateUser","setUser","setAvatar","setRequestedLocation","setVerificationStatus","identityVerified","setRegisteredVerificationInfo","setInviteInfo","setDomainName","setMemberInfos","addMemberInfo","newMemberInfo","updateMemberInfo","oldMemberId","memberInfo","updateMemberStatus","deleteMemberInfo","memberId","setConnectDlgOpen","setSigningOrgInfo","setSearchInfo","setIsSearching","searchFunc","cmpParticipantFn","b","initialThread","isJoined","COMMUNITY_CHAT_THREAD","initialChannel","description","subCategory","thumb","creator","initialApiStatus","msgEditingItem","msgQuotingItem","channel","channelParticipants","channelThumbUrl","cleanAll","setTwilioStatus","setChannelInfo","thumbUrl","updateChannel","updated","setChannelParticipants","setMsgEditingItem","setMsgQuotingItem","m","oldBody","thumbUri","newStatus","num","_uid","_isOnline","setEditingMsg","setTimeout","focus","setQuotingMsg","dat","aws_project_region","aws_cognito_identity_pool_id","aws_cognito_region","aws_user_pools_id","aws_user_pools_web_client_id","oauth","scope","redirectSignIn","redirectSignOut","responseType","federationTarget","cookieStorage","secure","sameSite","AWS_REGION","hpcalc_api_domain","hpanal_api_domain","lifeexp_api_domain","superann_api_domain","websocket_url","map_image_domain","os_uri","bs_uri","validate_human_uri","asset_uri","sync_connect_uri","sync_material_uri","show_material_uri","import_sample_file_uri","notification_websocket_url","mrc_websocket_url","aws_filethread_url","ipfs_filethread_url","apprising_ws_url","org_banner_uri","addresshelper_uri","bsPort","tags","addTags","newTags","ot","updateTags","removedIds","chatDateFormat","date","now","getFullYear","format","getMonth","getDate","toDisplayDateFormat","d","SearchContext","invitations","invitationNeedReload","referrals","referralNeedReload","setInvitations","addNewInvitation","updateInvitation","invitation","replaceInvitation","removeInvitation","setInviterAgents","assignedTeams","updatedList","teamId","inviterAgent","setInviteeAgents","inviteeAgent","setInvitationNeedReload","setReferrals","addNewReferral","updateReferral","referral","replaceReferral","removeReferral","removeReferralFromReq","removed","STATUS_REMOVED","setCreatorAgents","creatorAgent","setPartnerAgents","partnerAgent","setReferralNeedReload","loadInvitations","time","initialRate","AUD","USD","ETH","USDT","MERC","membersInCurOrg","memberRolesInCurOrg","teamsInCurOrg","bannerUrl","itemsPinned","curOrgNeedReload","curExRate","cmpRoleFn","setOrgsNeedReload","setBannerUrl","revokeObjectURL","updateOrganizationInfo","newOrgInfo","oldOrgId","createOrganizationInfo","roleInfo","updateCategoryInfo","oldCategoryIndex","setActiveTeamId","updateMemberRoleInCurOrg","newRole","oldRoleId","setCurOrgStructure","addMemberToCurOrg","newMember","updateMemberInCurOrg","updateOrgMembers","newMembers","deleteIds","mids","deleteMemberFromCurOrg","addMemberRoleToCurOrg","deleteMemberRoleFromCurOrg","addTeamToCurOrg","newTeam","deleteTeamFromCurOrg","updateTeamInCurOrg","oldTeam","oldMids","newMids","deleteMids","addMids","updateMemberPinnedItem","memberInCurOrg","setItemsPinned","setUserMinInfos","newInfo","oldInfo","newId","updateCurExRate","_members","_orgs","_categories","_roles","_teams","penName","formalName","_","trim","PRODUCT_PAGE_SIZE","condition","otherwise","isValidEmail","custom_str","test","toLowerCase","TAB_LABEL_ACCZIOM_USERS","TAB_LABEL_MY_CONTACTS","TAB_LABEL_PARTNERS","TAB_LABEL_ORG_CLIENTS","TAB_LABEL_ORG_SUPPLIERS","TAB_LABEL_ORG_MEMBERS","TAB_VALUE_ACCZIOM_USERS","TAB_VALUE_MY_CONTACTS","TAB_VALUE_PARTNERS","TAB_VALUE_ORG_CLIENTS","TAB_VALUE_ORG_SUPPLIERS","TAB_VALUE_ORG_MEMBERS","INVITE_ITEM_HEIGHT","DELETE_SINGLE_MESSAGE_TITLE","DELETE_SINGLE_MESSAGE_CONTENT","DELETE_MESSAGES_TITLE","DELETE_MESSAGES_CONTENT","DELETE_THREAD_TITLE","DELETE_THREAD_CONTENT","LEAVE_THREAD_TITLE","LEAVE_THREAD_CONTENT","LEAVE_WINDOW_TITLE","LEAVE_WINDOW_CONTENT","getInviteEmailSubject","userName","invitorName","getInviteEmailBody","receiver","sender","receiverName","sentence1","sentence2","convertTextToHtml","srcText","previousWasASpace","destText","oneLetter","charAt","isNullForHtmlText","convertHtmlToText","srcHtml","tmp","createElement","innerText","linkifyText","inputText","emptyAddress","reason","addressLine1","addressLine2","city","region","postalCode","country","CHAT","addressType","null2empty","getUserTypeByType","CHAT_MEMBER_MODE","ALL_MEMBER_MODE","NO_TITLE_FIRSTMSG","ONLY_TITLE","ONLY_FIRSTMSG","BOTH_TITLE_FIRSTMSG","STATUS_PENDING","STATUS_ACTIVATED","STATUS_ALL","UI_PADDING","SIDEBAR_WIDTH","CopyToClipboard","navigator","clipboard","writeText","SUBMIT_NONE","SUBMIT_PUBLISH","SUBMIT_REMOVE","SUBMIT_ACCEPT","SUBMIT_JOIN","RESOURCE_FILE_TYPE_IMAGE","participantStatusList","MESSAGE_TEXT","MESSAGE_HTML","HOVER_BGCOLOR","BOXSHADOW","THEME_COLOR_DARK_GRAY","BOXSHADOW2","callLambda","fn","req","currentCredentials","cred","lambda","Lambda","apiVersion","credentials","callParams","FunctionName","InvocationType","reqWithCred","_orgId","Payload","invoke","promise","lambdaRun","notAdd","errorType","errorMessage","LAMBDA_FN","_sid","_uids","lambdaSendRawFeedback","emailParams","emailTransportAttachments","lambdaGetMembersFromOrgs","_oids","oids","lambdaGetOrgStructure","_oid","lambdaCreateAnzicTaxonomyInfoByType","lambdaUpdateTags","lambdaGetAttachmentFileUploadUrl","lambdaDeleteAttachmentFile","lambdaSearchUserWithFriend","showUser","newMsgs","lambdaPublishChannel","lambdaJoinChannel","lambdaCreateChannel","lambdaUpdateChannel","lambdaTerminateChannel","lambdaLeaveChannel","lambdaAddAndDeleteChannelParticipants","lambdaActivateParticipants","recipientIds","lambdaCreateFileResources","lambdaUpdateFileResources","lambdaGetInvitationRelated","logo","website","published","publishedProfile","accziom","memberToMiniUser"],"mappings":"wSAgBAA,IACGC,IAAIC,KACJC,KAAK,CACJC,UAhBc,CAChBC,GAAI,CACFC,YAAa,CACX,mBAAoB,uCAGxBC,GAAI,CACFD,YAAa,CACX,mBAAoB,2CAStBE,IAAK,KACLC,YAAa,KACbC,cAAe,CACbC,aAAa,K,uCCsBJC,EAvBW,SAACC,GACzB,IAAQC,EAAwBD,EAAxBC,SAAUC,EAAcF,EAAdE,UAMlB,OAJAC,qBAAU,WACRC,SAASC,IAAMH,IACd,CAACA,IAEc,QAAdA,EAEA,cAAC,IAAD,CAAeI,MAnBIC,YAAY,CACnCC,IAAK,MACLC,SAAS,EAKTC,cAAe,CAACC,OAYZ,SACGV,IAKA,mCAAGA,K,QCxBGW,EAVQ,WACrB,IAAQC,EAAaC,cAAbD,SAMR,OAJAV,qBAAU,WACRY,OAAOC,SAAS,EAAG,KAClB,CAACH,IAEG,M,QCVII,EACJ,QADIA,EAEL,OAFKA,EAGH,SAHGA,EAIH,SAJGA,EAKH,SCiBJC,EAA4B,CAChCC,SAAS,EACTjB,UAAW,MACXkB,qBAAqB,EACrBC,gBAAgB,EAChBC,MAAOL,GASHM,EAAkBC,wBAAoC,CAC1DC,SAAUP,EACVQ,aAAc,eAGHC,EAA8C,SAAC3B,GAC1D,IAAQC,EAAaD,EAAbC,SACR,EAAgC2B,mBAAmBV,GAAnD,mBAAOO,EAAP,KAAiBI,EAAjB,KAEA1B,qBAAU,WAf0Ce,GAmBhDW,EAnBgDX,KAqBjD,IAOH,OACE,cAACK,EAAgBO,SAAjB,CACExB,MAAO,CACLmB,WACAC,aATe,SAACK,GACpBF,EAAYE,GAtBa,SAACN,GAC5BV,OAAOiB,aAAaC,QAAQ,WAAYC,KAAKC,UAAUV,IAsBrDW,CAAcL,KAId,SAMG9B,KAWQsB,GAFiBA,EAAgBc,SAEjCd,GCtEAe,EAFK,kBAA4BC,qBAAWhB,I,qNCF9CiB,GAAwB,CACnC,OACA,uEACA,uEACA,8DACA,8DACA,8DACA,8DACA,8DACA,8DACA,+DACA,+DACA,+DACA,+DACA,+DACA,+DACA,gEACA,gEACA,gEACA,gEACA,gEACA,gEACA,gEACA,gEACA,gEACA,iEAGWC,GAAuB,CAClC,OACA,8DACA,8DACA,8DACA,8DACA,8DACA,8DACA,8DACA,8DACA,+DACA,+DACA,+DACA,+DACA,+DACA,+DACA,gEACA,gEACA,gEACA,gEACA,gEACA,gEACA,gEACA,gEACA,gEACA,iEC1CIC,GAA4B,CAChCxC,UAAW,MACXyC,WAAY,CACVC,UAAW,CACTC,eAAgB,CACdC,SAAU,CACRC,OAAQ,MACRC,MAAO,SAIbC,UAAW,CACTJ,eAAgB,CACdK,KAAM,CACJC,cAAe,UAIrBC,eAAgB,CACdP,eAAgB,CACd,IAAK,CACHQ,UAAW,cAEbC,KAAM,CACJC,oBAAqB,YACrBC,oBAAqB,cACrBT,OAAQ,OACRC,MAAO,QAETS,KAAM,CACJV,OAAQ,QAEV,QAAS,CACPA,OAAQ,QAEV,kBAAmB,CACjBW,OAAQ,qBAIdC,cAAe,CACbC,aAAc,CACZC,qBAAsB,CACpBC,QAAS,QAIfC,kBAAmB,CACjBlB,eAAgB,CACdK,KAAM,CAEJc,aAAc,EACdC,SAAU,YAIhBC,gBAAiB,CACfrB,eAAgB,CACdK,KAAM,CACJiB,SAAU,OACVC,YAAa,UAInBC,SAAU,CACRxB,eAAgB,CACdK,KAAM,CACJoB,gBAAiB,WAKzBC,WAAY,CACVC,OAAQ,CACNC,WAAY,KAEdC,WAAY,qHACZC,GAAI,CACFF,WAAY,IACZG,SAAU,UAEZC,GAAI,CACFJ,WAAY,IACZG,SAAU,QAEZE,GAAI,CACFL,WAAY,IACZG,SAAU,WAEZG,GAAI,CACFN,WAAY,IACZG,SAAU,QAEZI,GAAI,CACFP,WAAY,IACZG,SAAU,UAEZK,GAAI,CACFR,WAAY,IACZG,SAAU,YAEZM,SAAU,CACRT,WAAY,OAsBZU,IAA2C,oBAC9ClE,EAAgB,CACf0B,WAAY,CACVyC,aAAc,CACZvC,eAAgB,CACdwC,MAAO,CACL,iBAAkB,CAChBC,QAAS,IACTC,MAAO,WAETC,gBAAiB,WAKzBC,QAAS,CACPC,OAAQ,CACNC,OAAQ,WAEVC,WAAY,CACVC,QAAS,UACTC,MAAO,WAETC,MAAO,CACLC,aAAc,UACdC,KAAM,WAERC,KAAM,QACNC,QAAS,CACPH,aAAc,UACdC,KAAM,QAERG,QAAS,CACPJ,aAAc,UACdC,KAAM,WAERI,KAAM,CACJF,QAAS,UACTG,UAAW,WAEbC,QAAS,CACPP,aAAc,UACdC,KAAM,YAGVO,QAAShE,KA7CoC,eA+C9CvB,EAAgB,CACf0B,WAAY,CACVyC,aAAc,CACZvC,eAAgB,CACdwC,MAAO,CACL,iBAAkB,CAChBC,QAAS,IACTC,MAAO,WAETC,gBAAiB,UAIvBvC,UAAW,CACTJ,eAAgB,CACd4D,MAAO,CACLC,YAAa,EACbC,aAAc,KAIpBC,QAAS,CACP/D,eAAgB,CACdK,KAAM,CACJ2D,UAAW,UAIjBC,aAAc,CACZjE,eAAgB,CACdK,KAAM,CACJ,iBAAkB,CAChB,aAAc,CACZ6D,YAAa,QAEf,mBAAoB,CAClBA,YAAa,WAEf,yBAA0B,CACxBA,YAAa,eAMvBC,YAAa,CACXnE,eAAgB,CACdK,KAAM,CACJ,SAAU,CACR+D,gBAAiB,eAS3BxB,QAAS,CACPC,OAAQ,CACNC,OAAQ,WAEVC,WAAY,CACVC,QAAS,UACTC,MAAO,WAEToB,QAAS,UACTnB,MAAO,CACLC,aAAc,UACdC,KAAM,WAERC,KAAM,QACNI,UAAW,CACTN,aAAc,UACdC,KAAM,WAERE,QAAS,CACPH,aAAc,UACdC,KAAM,WAERG,QAAS,CACPJ,aAAc,UACdC,KAAM,WAERI,KAAM,CACJF,QAAS,UACTG,UAAW,WAEbC,QAAS,CACPP,aAAc,UACdC,KAAM,YAGVO,QAAShE,KA5IoC,eA8I9CvB,EAAe,CACd0B,WAAY,CACVyC,aAAc,CACZvC,eAAgB,CACdwC,MAAO,CACL,iBAAkB,CAChBC,QAAS,IACTC,MAAO,eAMjBE,QAAS,CACPC,OAAQ,CACNC,OAAQ,WAEVC,WAAY,CACVC,QAAS,UACTC,MAAO,WAETC,MAAO,CACLC,aAAc,UACdC,KAAM,WAERC,KAAM,QACNC,QAAS,CACPH,aAAc,UACdC,KAAM,WAERG,QAAS,CACPJ,aAAc,UACdC,KAAM,WAERI,KAAM,CACJF,QAAS,UACTG,UAAW,WAEbC,QAAS,CACPP,aAAc,UACdC,KAAM,YAGVO,QAAShE,KAzLoC,eA2L9CvB,EAAc,CACb0B,WAAY,CACVwE,aAAc,CACZtE,eAAgB,CACdK,KAAM,CACJkE,aAAc,0CAKtB3B,QAAS,CACPG,WAAY,CACVC,QAAS,UACTC,MAAO,WAEToB,QAAS,4BACTnB,MAAO,CACLC,aAAc,UACdC,KAAM,WAERC,KAAM,OACNC,QAAS,CACPH,aAAc,UACdC,KAAM,WAERG,QAAS,CACPJ,aAAc,UACdC,KAAM,WAERI,KAAM,CACJF,QAAS,UACTG,UAAW,WAEbC,QAAS,CACPP,aAAc,UACdC,KAAM,YAGVO,QAAS/D,KAjOoC,eAmO9CxB,EAAgB,CACf0B,WAAY,CACVwE,aAAc,CACZtE,eAAgB,CACdK,KAAM,CACJkE,aAAc,0CAKtB3B,QAAS,CACPG,WAAY,CACVC,QAAS,UACTC,MAAO,WAEToB,QAAS,4BACTnB,MAAO,CACLC,aAAc,UACdC,KAAM,WAERC,KAAM,OACNC,QAAS,CACPH,aAAc,UACdC,KAAM,WAERG,QAAS,CACPJ,aAAc,UACdC,KAAM,WAERI,KAAM,CACJF,QAAS,UACTG,UAAW,WAEbC,QAAS,CACPP,aAAc,UACdC,KAAM,YAGVO,QAAS/D,KAzQoC,GA6QpC4E,GAAoB,WAAsC,IAArCC,EAAoC,uDAAd,GAClDC,EAAepC,GAAcmC,EAAOhG,OAEnCiG,IACHC,QAAQC,KAAK,IAAIC,MAAJ,oBAAuBJ,EAAOhG,MAA9B,mBACbiG,EAAepC,GAAclE,IAG/B,IAAIK,EAAQqG,aACVC,KACE,GACAlF,GACA6E,EAHG,eAMCD,EAAOjG,gBAAkB,CACvBwG,MAAO,CAEL7D,aAAc,KAKtB,CACE9D,UAAWoH,EAAOpH,aASxB,OAJIoH,EAAOlG,sBACTE,EAAQF,aAAoBE,IAGvBA,G,4GC/YHwG,GAA0B,SAAC,GAAiE,IAA/DC,EAA8D,EAA9DA,KAAMC,EAAwD,EAAxDA,YAAaC,EAA2C,EAA3CA,aAAcC,EAA6B,EAA7BA,OAAQC,EAAqB,EAArBA,eAClEC,EAAgBC,aAAY,SAACC,GAAD,OAAWA,EAAMC,gBAA7CH,YACFI,EAAoBC,eAE1B,OACE,eAACC,EAAA,EAAD,CACEC,GAAI,CACFC,QAAS,OACTC,cAAe,UAHnB,UAME,cAACC,EAAA,EAAD,CACEH,GAAI,CACFI,GAAI,EACJC,GAAI,KAENC,QAASjB,EACTkB,SAAUf,EANZ,SAQE,eAACO,EAAA,EAAD,CACEE,QAAQ,OACRC,cAAc,MACdM,WAAW,SAHb,UAKE,cAAC,KAAD,CACEC,SAAUZ,EACVa,KAAM,GACNC,UAAU,IAEZ,cAACC,EAAA,EAAD,CACEzF,QAAQ,QACR0F,GAAI,EACJC,GAAI,GACJd,GAAE,eAEEe,aAAcC,KAAgBC,QAAoBD,MAAkB,CAClEpE,MAAO,eACPd,WAAY,SARpB,SAaGoF,aAAmBrB,UAI1B,cAACsB,GAAA,EAAD,CAAUC,GAAI7B,EAAd,SACGH,EAAKiC,KAAI,SAACC,GACT,IAAMC,EAAaC,aAAcF,GACjC,OACE,cAACnB,EAAA,EAAD,CAEEG,QAAO,sBAAE,sBAAAmB,EAAA,sEAAoBnC,EAAagC,EAAII,gBAArC,2CACT1B,GAAI,CACFa,GAAI,EACJc,GAAI,EACJtB,GAAI,KAENE,SAAUf,EARZ,SAUE,eAACO,EAAA,EAAD,CACEE,QAAQ,OACRC,cAAc,MACdM,WAAW,SAHb,UAKE,cAAC,KAAD,CACEC,SAAUc,EACVb,KAAM,GACNC,UAAU,IAEZ,cAACC,EAAA,EAAD,CACEzF,QAAQ,QACR0F,GAAI,EACJC,GAAI,GACJd,GAAE,eAEEP,IAAgB6B,EAAII,gBAAkB,CACpC9E,MAAO,eACPd,WAAY,SARpB,SAaGoF,aAAmBK,SAhCnBD,EAAII,yBAyDjBE,GAA8B,SAAC,GAA8C,IAA5CC,EAA2C,EAA3CA,OAAQvC,EAAmC,EAAnCA,aAAcE,EAAqB,EAArBA,eAC3D,EAAkCE,aAAY,SAACC,GAAD,OAAWA,EAAMC,gBAAvDkC,EAAR,EAAQA,SAAUrC,EAAlB,EAAkBA,YACZsC,EAAUD,EAASE,MAAK,SAACV,GAAD,OAASA,EAAII,iBAAmBG,EAAOI,OAErE,OACE,cAAClC,EAAA,EAAD,CACEC,GAAI,CACFC,QAAS,OACTC,cAAe,UAHnB,SAME,cAACC,EAAA,EAAD,CACEH,GAAI,CACFI,GAAI,EACJC,GAAI,KAENC,QAAO,sBAAE,sBAAAmB,EAAA,sEAAoBnC,EAAayC,EAAQL,gBAAzC,2CACTnB,SAAUf,EANZ,SAQE,eAACO,EAAA,EAAD,CACEE,QAAQ,OACRC,cAAc,MACdM,WAAW,SAHb,UAKE,cAAC,KAAD,CACEC,SAAUe,aAAcO,GACxBrB,KAAM,GACNC,UAAU,IAEZ,cAACC,EAAA,EAAD,CACEzF,QAAQ,QACR0F,GAAI,EACJC,GAAI,GACJd,GAAE,eAEEP,IAAgBsC,EAAQL,gBAAkB,CACxC9E,MAAO,eACPd,WAAY,SARpB,SAaGiG,EAAQG,sBAoBfC,GAAW,GAEXC,GAAe,SAACC,EAAkBC,EAAmBC,GACzD,OAAIF,EAAWC,EAAYH,GACrBI,GAAOJ,GAAiBA,IACxBI,EAAMD,GAAaH,GAA6B,IAAXI,EAAM,GAAiC,IAAtBJ,EAAeI,GACtD,GAAZD,EAA0C,IAAxBH,GAAWG,GAAkB,GAAK,EAE3C,GAAXD,EAA4B,GAAZC,EAAiB,GAAK,GA2PhCE,GAxPyB,SAAC,GAA2C,IAAzCC,EAAwC,EAAxCA,QAASC,EAA+B,EAA/BA,SAAUlD,EAAqB,EAArBA,eACpDmD,EAAWC,cAAXD,OACA7J,EAAaa,IAAbb,SACF+J,EAAUC,cACVC,EAAWC,cACXC,EAAWC,cACXC,EAAYC,iBAAiC,MACnD,EAA+C1D,aAAY,SAACC,GAAD,OAAWA,EAAMC,gBAApEyD,EAAR,EAAQA,YAAavB,EAArB,EAAqBA,SAAUrC,EAA/B,EAA+BA,YACzB6D,EAAsBxB,EAASyB,QAAO,SAACjC,GAAD,OAAS+B,EAAYE,QAAO,SAAC1B,GAAD,OAAYA,EAAO2B,OAASxC,QAAgBK,KAAI,SAACQ,GAAD,OAAYA,EAAOI,OAAKwB,SAASnC,EAAII,mBACvJgC,EAAoBJ,EAAoBjC,KAAI,SAACC,GAAD,OAASA,EAAII,kBACvDjB,EAAaf,aAAY,SAACC,GAAD,OAAWA,EAAMgE,QAA1ClD,SACR,EAAsCxH,oBAAkB,GAAxD,mBAAO2K,EAAP,KAAoBC,EAApB,KACA,EAAsC5K,mBAAiBwG,GAAvD,mBAAOqE,EAAP,KAAoBC,EAApB,KACA,EAAkC9K,mBAAiBmJ,GACjDsB,EAAkBM,OAAS,EAAIX,EAAYW,OAASN,EAAkBM,OAAS,EAAIX,EAAYW,OAC/FN,EAAkBM,OAAS,GAAKN,EAAkBD,SAASK,GAAeJ,EAAkBM,OAAS,EACrGN,EAAkBM,OAAS,EAAIC,cAAOP,EAAkBD,SAASK,GAAc,EAAGT,EAAYa,WAAU,SAACrC,GAAD,OAAYA,EAAOI,MAAQ6B,KAAe,GAAKT,EAAYa,WAAU,SAACrC,GAAD,OAAYA,EAAOI,MAAQ6B,OAH1M,mBAAOK,EAAP,KAAkBC,EAAlB,KAMMzL,EAAQ+F,GAAkB,CAC9BnH,UAAWuB,EAASvB,UACpBkB,oBAAqBK,EAASL,oBAC9BC,eAAgBI,EAASJ,eACzBC,MAAO,WAOH0L,EAAc,uCAAG,WAAOC,GAAP,SAAA7C,EAAA,yDACrBsC,EAAeO,GACX7E,IAAgB6E,EAFC,gCAEY5B,EAAS4B,GAFrB,OAGjBzB,EAAQ0B,SAASV,GAAe,GAHf,2CAAH,sDAMdW,EAAeC,sBAAW,sBAAC,sBAAAhD,EAAA,+EAEvBkB,IAFuB,OAG7B+B,YAAiB3B,GACjBE,EAAS,SAJoB,gDAM7BpE,QAAQ8F,IAAR,MACAC,IAAMxH,MAAM,+CAPiB,yDAS9B,IAgBH,OAdA5F,qBAAU,WACJqL,EAAQ0B,SACVH,EAAahC,GACXsB,EAAkBM,OAAS,EAAIX,EAAYW,OAASN,EAAkBM,OAAS,EAAIX,EAAYW,OAC/FN,EAAkBM,OAAS,GAAKN,EAAkBD,SAASK,GAAeJ,EAAkBM,OAAS,EACrGN,EAAkBM,OAAS,EAAIC,cAAOP,EAAkBD,SAASK,GAAc,EAAGT,EAAYa,WAAU,SAACrC,GAAD,OAAYA,EAAOI,MAAQ6B,KAAe,GAAKT,EAAYa,WAAU,SAACrC,GAAD,OAAYA,EAAOI,MAAQ6B,SAG3M,CAACjB,EAASQ,EAAaS,IAE1BtM,qBAAU,WACJqL,EAAQ0B,SAAWX,GAAaG,EAAetE,KAClD,CAACoD,EAASe,IAGX,eAAC7D,EAAA,EAAD,CACEE,QAAQ,OACRC,cAAc,SACdM,WAAW,SACXR,GAAI,CACF6E,EAAG,EACHC,OAAQ,UACR,WAAY,CACVC,eAAgB,aAElB,4BAA6B,CAC3BC,UAAW,kBAGfC,IAAK9B,EACL7C,QAAS,WACFsD,GAAaC,GAAe,IAhBrC,UAmBE,cAAC9D,EAAA,EAAD,CACEC,GAAI,CACFkF,SAAU,WACV7K,MAAO,GACPD,OAAQ,GACR6F,QAAS,OACTO,WAAY,SACZ2E,eAAgB,UAPpB,SAUE,cAAC,KAAD,CACE1E,SAAU2E,aAAe3E,GACzBC,KAAM,GACNC,UAAU,MAGd,eAACZ,EAAA,EAAD,CACEE,QAAQ,OACRO,WAAW,SAFb,UAIE,cAACI,EAAA,EAAD,CACE3E,SAAU,GACVW,MAAM,iBAFR,SAIGsE,aAAmBkE,aAAe3E,MAErC,eAAC4E,EAAA,EAAD,CAAe1M,MAAOA,EAAtB,UACE,cAACoH,EAAA,EAAD,CACEC,GAAI,CACFC,QAAS,OACTC,cAAe,SACfiF,eAAgB,cAJpB,SAOE,cAACG,EAAA,EAAD,CACEtF,GAAI,CACF3F,MAAO,GACPD,OAAQ,IAHZ,SAME,cAAC,KAAD,CACE4F,GAAI,CACF3F,MAAO,GACPD,OAAQ,GACR0G,GAAI,OACJyE,GAAI,OACJC,WAAY,MACZR,UAAU,UAAD,OAAYpB,EAAc,IAAM,EAAhC,eAKjB,cAAC6B,EAAA,EAAD,CACEC,SAAUvC,EAAUoB,QACpBoB,aAAc,CACZC,WAAY,SACZC,SAAU,UAEZC,gBAAiB,CACfF,WAAY,SACZC,SAAU,OAEZE,aAAW,EACXC,QAAS,WAAQnC,GAAe,IAChCoC,KAAMrC,EACNsC,WAAY,CACVlG,GAAI,CACFxE,SAAU,IACVF,SAAU,SACVwF,GAAI,IAjBV,SAqBE,cAACf,EAAA,EAAD,UAEI0C,EACE,cAAC1C,EAAA,EAAD,CACEC,GAAI,CACFC,QAAS,OACTC,cAAe,MACfiF,eAAgB,UAJpB,SAOE,cAACgB,EAAA,EAAD,CACEvJ,MAAM,UACN8D,KAAM,OAIV,eAACX,EAAA,EAAD,CACEC,GAAI,CACF3F,MAAO,OACPD,OAAO,GAAD,OAAK+J,EAAL,OAERiC,UAAU,aALZ,UAOG9C,EAAoBU,OAAS,GAC5B,cAAC,GAAD,CACE5E,KAAMkE,EACNjE,YA1JA,WACpB0E,EAAeL,EAAkB,KA0JbpE,aAAc+E,EACd9E,OAAQmE,EAAkBD,SAASK,GACnCtE,eAAgBA,IAGnB6D,EAAYE,QAAO,SAAC1B,GAAD,OAAYA,EAAO2B,OAASvC,QAAgBI,KAAI,SAACQ,GAAD,OAClE,cAAC,GAAD,CAEEA,OAAQA,EACRvC,aAAc+E,EACd7E,eAAgBA,GAHXqC,EAAOwE,QAMhB,cAACC,GAAA,EAAD,CACEtG,GAAI,CACFuG,GAAI,KAGR,cAACpG,EAAA,EAAD,CACEH,GAAI,CACFI,GAAI,EACJC,GAAI,KAENC,QAASkE,EALX,SAOE,eAACzE,EAAA,EAAD,CACEE,QAAQ,OACRC,cAAc,MACdM,WAAW,SACXR,GAAI,CACF,MAAO,CACLpD,MAAO,SAAC4J,GAAD,OAASA,EAAI1J,QAAQa,UAAUL,QAN5C,UAUE,cAAC,KAAD,CACEmJ,MAAO,CACLpM,MAAO,GACPD,OAAQ,MAGZ,cAACwG,EAAA,EAAD,CACEzF,QAAQ,QACR0F,GAAI,EACJC,GAAI,GAHN,4C,wEC9KT4F,GAxO2B,SAACrP,GACzC,IASoBsP,EATd1D,EAAWC,cACXL,EAAUC,cACR5K,EAAaC,cAAbD,SACFiL,EAAYC,iBAAiC,MAC3CwD,EAAwCvP,EAAxCuP,KAAMC,EAAkCxP,EAAlCwP,aAAclP,EAAoBN,EAApBM,MAAO4I,EAAalJ,EAAbkJ,SACrBuG,EAAsCF,EAA5CG,KAAYC,EAAgCJ,EAAhCI,MAAOC,EAAyBL,EAAzBK,KAAM3G,EAAmBsG,EAAnBtG,QAAS4G,EAAUN,EAAVM,MAC1C,EAAwBjO,oBAAkB,GAA1C,mBAAOgN,EAAP,KAAakB,EAAb,KACA,EAA4BlO,mBAAiB,UAA7C,mBAAOmO,EAAP,KAAeC,EAAf,KAUMC,IAAaL,QARCN,EAQkBM,IAPvB,CAAC,IAAK,QAAS,UAAUxD,SAASkD,OACrCY,aAAU,CAClBZ,OACAa,eAAe,EACfC,KAAK,GACJvP,IAICwP,EAAc,WAClBP,GAAQ,IAGV,OACE,qCACE,eAACpH,EAAA,EAAD,CACEkF,IAAK9B,EACL/I,OAAO,OACP6F,QAAQ,OACRC,cAAe2G,EAAe,MAAQ,SACtC1B,eAAe,SACf3E,WAAW,SACXmH,aAAc,SAACC,GACbA,EAAMC,kBACDtH,GAAU8G,EAAU,UAE3BS,aAAc,SAACF,GACbA,EAAMC,kBACDtH,GAAU8G,EAAU,WAE3BU,YAAa,SAACH,GACZA,EAAMC,kBACDtH,GAAU8G,EAAU,SAE3BW,UAAW,SAACJ,GACVA,EAAMC,kBACFtH,GACW,SAAX6G,KACK,OAALF,QAAK,IAALA,OAAA,EAAAA,EAAOlD,QAAS,GAClBmD,GAAQ,GACRE,EAAU,YAEH,OAAP/G,QAAO,IAAPA,OACA+G,EAAU,UACNJ,GAAMhE,EAASgE,MAGvBR,MAAO,CACL3B,OAASvE,EAAuB,UAAZ,WAEtBP,GAAE,aACAK,GAAIwG,EAAe,GAAM,EACzBzG,GAAIyG,EAAe,IAAM,EACzBxL,aAAc,EACd6J,SAAU,WACVM,WAAY,oDACZ,UAAW,CACTyC,QAAS,KACT5N,MAAO,OACPD,OAAQ,OACRkE,gBAAiBgJ,EAAW,YAAc,YAC1CpC,SAAU,WACVgD,KAAM,MACNC,IAAK,MACLpN,OAAQ,KACRyK,WAAY,0DACZnK,aAAc,IAEZiM,GAAY,CAAEpJ,UAAW,0BArDjC,UAwDE,cAACkK,GAAA,EAAD,CACEC,aACY,IAAV1Q,EACE,cAACiJ,EAAA,EAAD,CACEzF,QAAQ,YACRsL,MAAO,CACL6B,UAAW,QAHf,SAMG3Q,IAEDA,EAENwD,QAAQ,MACRyB,MAAM,QACN+I,aAAc,CACZE,SAAU,MACVD,WAAY,SAjBhB,SAoBE,cAAC7F,EAAA,EAAD,CACEC,GAAI,CACF5F,OAAQyM,EAAe,GAAK,GAC5BxM,MAAOwM,EAAe,GAAK,GAC3BvI,gBAAiB,cACjB1B,MAAQ2D,EAA8B,SAAC5H,GAAD,OAAWA,EAAMmE,QAAQyB,SAA5C,iBACnB0B,QAAS,OACTC,cAAe,MACfiF,eAAgB,SAChB3E,WAAY,SACZ+H,GAAI1B,EAAe,GAAM,GAV7B,SAaE,cAACC,EAAD,CACEL,MAAO,CACLrM,OAAmB,UAAXgN,EAAqBnD,cAAO4C,EAAc,OAAQ,QAAU5C,cAAO4C,EAAc,OAAQ,QACjGxM,MAAkB,UAAX+M,EAAqBnD,cAAO4C,EAAc,OAAQ,QAAU5C,cAAO4C,EAAc,OAAQ,eAKxG,eAAC9G,EAAA,EAAD,CACEE,QAAQ,OACRO,WAAW,SACX2E,eAAe,SACfnF,GAAI,CACF,MAAO,CACLpD,MAAQ2D,EAA8B,SAAC5H,GAAD,OAAWA,EAAMmE,QAAQyB,SAA5C,mBANzB,UAUE,cAACwB,EAAA,EAAD,CACEC,GAAI,CACF1E,SAAU,SACVkN,aAAc,WACdvM,SAAU,OACVwM,WAAY,SACZ1D,eAA2B,UAAXqC,EAAqB,YAAc,QANvD,SASGJ,IAEFE,EAAMlD,OAAS,GACd,cAAC,KAAD,CACEhE,GAAI,CACF3F,MAAO,GACPD,OAAQ,GACR0G,GAAI,OACJyE,GAAI,OACJC,WAAY,MACZR,UAAU,UAAD,OAAYiB,EAAO,IAAM,EAAzB,kBAMb,OAALiB,QAAK,IAALA,OAAA,EAAAA,EAAOlD,QAAS,GACf,cAACyB,EAAA,EAAD,CACEC,SAAUvC,EAAUoB,QACpBoB,aAAc,CACZC,WAAY,SACZC,SAAU,UAEZC,gBAAiB,CACfF,WAAY,SACZC,SAAU,OAEZE,aAAW,EACXC,QAAS0B,EACTzB,KAAMA,EACNC,WAAY,CACVlG,GAAI,CACFxE,SAAU,IACVF,SAAU,SACVoN,UAAW,qBACX5H,GAAI,IAlBV,SAsBGoG,EAAM7F,KAAI,SAACsH,GACV,IAAMC,EAAUD,EAAK5B,KACrB,OACE,cAAC5G,EAAA,EAAD,CAEEG,QAAS,SAACsH,GAAW,IAAD,EAClBA,EAAMC,kBACN,UAAAc,EAAKrI,eAAL,cAAAqI,GACIA,EAAK1B,MAAMhE,EAAS0F,EAAK1B,MACzBpE,EAAQ0B,SAASmD,KAEvB1H,GAAI,CACFI,GAAI,EACJC,GAAI,KAVR,SAaE,eAACN,EAAA,EAAD,CACEE,QAAQ,OACRC,cAAc,MACdM,WAAW,SAHb,UAKE,cAACoI,EAAD,CACEnC,MAAO,CACLpM,MAAO,GACPD,OAAQ,MAGZ,cAACwG,EAAA,EAAD,CACEzF,QAAQ,QACR0F,GAAI,EACJC,GAAI,GAHN,SAKG6H,EAAK3B,YA5BL2B,EAAK3B,gB,0CCpFX6B,GAxHV,SAAC,GAMC,IALLC,EAKI,EALJA,YACAC,EAII,EAJJA,SACAC,EAGI,EAHJA,UACAC,EAEI,EAFJA,YACA1I,EACI,EADJA,SAEMsC,EAAUC,cACR5K,EAAaC,cAAbD,SACR,EAA0Be,mBAAiB,IAA3C,mBAAOiQ,EAAP,KAAcC,EAAd,KACA,EAAgClQ,oBAAkB,GAAlD,mBAAOmQ,EAAP,KAAkBC,EAAlB,KAMA,OAJA7R,qBAAU,WACJqL,EAAQ0B,SAAS4E,EAAS,MAC7B,CAACtG,EAAS3K,IAGX,cAAC6H,EAAA,EAAD,CACEC,GAAI,CACFsJ,SAAU,EACVpE,SAAU,WACVrE,GAAI,GAJR,SAOE,eAACd,EAAA,EAAD,CACEC,GAAI,CACFkF,SAAU,WACVM,WAAY,MACZnL,MAAO+O,EAAY,OAAS,OAJhC,UAOE,cAACG,GAAA,EAAD,CACEC,WAAS,EACTC,QAAS,kBAAMJ,GAAW,IAC1BK,OAAQ,kBAAML,GAAW,IACzBM,WAAY,CACV3J,GAAG,aACD/D,SAAU,GACV2N,QAAS,oBACLZ,GAAa,CAAErH,GAAI,KAG3Be,SAAU,SAACmH,GACTV,EAASU,EAAEC,OAAOnS,OACbqR,GAAWD,EAASc,EAAEC,OAAOnS,QAEpCoS,UAAS,uCAAE,WAAOF,GAAP,SAAApI,EAAA,sDACO,UAAXoI,EAAEG,MAA+B,gBAAXH,EAAEG,MAC3BjB,EAASG,GAFF,2CAAF,sDAKTJ,YAAavI,EAAW,GAAKuI,EAC7BnR,MAAOuR,EACPxI,KAAK,QACLvF,QAAQ,WACRoF,SAAU0I,GAAe1I,KAEzBA,GAAYyI,GACZ,cAACjJ,EAAA,EAAD,CACEC,GAAI,CACFkF,SAAU,WACVnK,OAAQ,IACRkP,MAAO,EACP9B,IAAK,EACL9N,MAAO,GACPD,OAAQ,GACR6F,QAAS,OACTO,WAAY,SACZ2E,eAAgB,UAVpB,SAaE,cAACpF,EAAA,EAAD,CACEC,GAAI,CACF3F,MAAO,GACPD,OAAQ,GACRwP,QAASX,EAAc,cAAgB,eACvC5N,aAAc,EACduB,MAAO,mBACP,UAAW,CACTgN,QAASM,MAEXpF,OAAQ,UACR7E,QAAS,OACTO,WAAY,SACZ2E,eAAgB,SAChBK,WAAY,MACZ7I,QAASsM,GAAeG,EAAY,EAAI,IAE1C9I,QAAS,WACF2I,GAAaF,EAASG,IAlB/B,SAqBGD,EACC,cAAC9C,EAAA,EAAD,CACEzF,KAAM,KAGR,cAAC,KAAD,CACE+F,MAAO,CACLpM,MAAO,GACPD,OAAQ,gBCzCb+P,GAhEmB,SAAC,GAA2C,IAAzCC,EAAwC,EAAxCA,WAAYC,EAA4B,EAA5BA,QAASjQ,EAAmB,EAAnBA,OAAQ6M,EAAW,EAAXA,KAC1DhE,EAAWC,cACjB,EAA4BjK,mBAAiB,UAA7C,mBAAOmO,EAAP,KAAeC,EAAf,KAEA,OACE,cAACtH,EAAA,EAAD,CAEEE,QAAQ,OACRC,cAAc,SACdiF,eAAe,SACf3E,WAAW,SACXmH,aAAc,kBAAMN,EAAU,UAC9BS,aAAc,kBAAMT,EAAU,WAC9BU,YAAa,kBAAMV,EAAU,SAC7BW,UAAW,WACM,SAAXZ,IACJC,EAAU,UACVpE,EAASgE,KAEXR,MAAO,CACL3B,OAAQ,WAEV9E,GAAE,aACAsK,GAAe,SAAXlD,EAAoB,MAAQ,MAChCmD,GAAe,SAAXnD,EAAoB,MAAQ,MAChCvG,GAAe,SAAXuG,EAAoB,MAAQ,MAChCzF,GAAe,SAAXyF,EAAoB,MAAQ,MAChC/L,aAAc,EACd6J,SAAU,WACVM,WAAY,oDACZ,UAAW,CACTyC,QAAS,KACT5N,MAAO,OACPD,OAAQ,OACRkE,gBAA4B,SAAX8I,GAAgC,UAAXA,EAAqB,YAAc,YACzElC,SAAU,WACVgD,KAAM,MACNC,IAAK,MACLpN,OAAQ,KACRyK,WAAY,0DACZnK,aAAc,KAEA,SAAX+L,GAAgC,UAAXA,IAAuB,CAAElJ,UAAW,0BArClE,SAwCE,qBACEsM,IAAKJ,EACLK,IAAG,UAAKJ,GACRjQ,OAAQA,EACRqM,MAAO,CACL6B,UAAW,Y,uCCpBfoC,GAAyB,CAC7B,CACE1D,MAAO,gBACPC,KAAM,KACN3G,QAAS,KACTqK,aAAcC,KACd7D,KArBuE,SAAC,GAAD,IAAGN,EAAH,EAAGA,MAAH,OACzE,cAAC1G,EAAA,EAAD,CACE0G,MAAOA,EADT,SAGE,qBACEgE,IAAI,OACJD,IAAI,eACJ/D,MAAO,CACLpM,MAAO,OACPD,OAAQ,aAaZ8M,MAAO,IAET,CACEF,MAAO,eACPC,KAAM,UACN3G,QAAS,KACTqK,aAAcC,KACd7D,KAAM8D,KACN3D,MAAO,IAET,CACEF,MAAO,cACPC,KAAM,QACN3G,QAAS,KACTqK,aAAcG,KACd/D,KAAMgE,KACN7D,MAAO,IAET,CACEF,MAAO,UACPC,KAAM,SACN3G,QAAS,KACTqK,aAAcK,KACdjE,KAAMkE,KACN/D,MAAO,KAILgE,GAAgB,CACpBC,mBAAoB,GACpBC,oBAAqB,CACnB,WAEFC,gBAAiB,GACjBC,iBAAkB,CAChB,UACA,UAIEC,GAAsBC,YAAmBC,IAAnBD,EAC1B,gBAAG7S,EAAH,EAAGA,MAAH,MAAgB,CACd2F,gBAAiB3F,EAAMmE,QAAQG,WAAWE,MAC1CpC,OAAQpC,EAAMoC,OAAO2Q,OAAS,IAC9BxN,UAAW,oCASTyN,GAAiBC,KAgURC,GA7Ta,WAC1B,IAAMhJ,EAAUC,cACVC,EAAWC,cACX8I,EAAYC,eACZ9I,EAAWC,cACThL,EAAaC,cAAbD,SACA8T,EAAoBpJ,cAApBoJ,gBACR,EAA8CtM,aAAY,SAACC,GAAD,OAAWA,EAAMgE,QAAnElD,EAAR,EAAQA,SAAUwL,EAAlB,EAAkBA,WAAYhD,EAA9B,EAA8BA,YAC9B,EAA+DvJ,aAAY,SAACC,GAAD,OAAWA,EAAMC,gBAApFyD,EAAR,EAAQA,YAAavB,EAArB,EAAqBA,SAAUrC,EAA/B,EAA+BA,YAAayM,EAA5C,EAA4CA,eACpCC,EAAiBzM,aAAY,SAACC,GAAD,OAAWA,EAAMyM,QAA9CD,aACR,EAA4ClT,oBAAkB,GAA9D,mBAAOuG,EAAP,KAAuB6M,EAAvB,KACA,EAA0BpT,mBAAiB,IAA3C,mBAAOiO,EAAP,KAAcoF,EAAd,KACA,EAA8BrT,oBAAkB,GAAhD,mBAAOwJ,EAAP,KAAgB8J,EAAhB,KACMC,EAAmBC,eACnBC,EAAexL,aAAmBsL,GAAkBG,cACpD1F,EAAI,WAAO/O,EAAS0U,MAAM,KAAKC,MAAM,GAAGC,KAAK,MAC7CC,GAAkBf,IAAoBd,GAAcC,mBAAmB1H,SAASwD,IAASiE,GAAcE,oBAAoB4B,MAAK,SAACC,GAAD,OAAahG,EAAKiG,WAAWD,QAC7JjB,IAAoBd,GAAcG,gBAAgB5H,SAASwD,IAASiE,GAAcI,iBAAiB0B,MAAK,SAACC,GAAD,OAAahG,EAAKiG,WAAWD,OACvIE,EAAa,KAEXC,EAAY,uCAAG,WAAOC,GAAP,iBAAA5L,EAAA,sDACnB,UAAAqK,EAAUvH,eAAV,mBAAmBwE,gBAAnB,gBAA8BsE,GADX,2CAAH,sDAIZC,EAAoB,WACxB,GAAKtB,EACA,CACH,IAAMjK,EAAUD,EAASE,MAAK,SAACV,GAAD,OAASA,EAAII,iBAAmBjC,KAC9DrH,OAAO6N,KAAP,kBAAuBlE,EAAQwL,WAA/B,mBAA4D,eAHxCnV,OAAO6N,KAAK,yBAA0B,WAqB9DzO,qBAAU,YAdgB,WACxB,GAAKqL,EAAQ0B,QAAb,CACA,IAAMiJ,EAAc,GACpB9C,GAAe+C,SAAQ,SAAC9E,GACtB,IAAM+E,EAAO,2BACR/E,GACgB,kBAAfA,EAAK3B,OAA6B,CAAE1G,QAASgN,KAE9CtB,GAAmB,CAACpB,KAAmBI,MAAuBvH,SAASkF,EAAKgC,eAAe6C,EAAGG,KAAKD,GACpG1B,GAAmB,CAACpB,KAAmBE,MAAmBrH,SAASkF,EAAKgC,eAAe6C,EAAGG,KAAKD,MAErGpB,EAASkB,IAITI,KACC,CAAC/K,EAASpD,EAAavH,EAAU8T,IAEpC,IAqEM6B,EAAS,uCAAG,WAAOvJ,GAAP,mBAAA7C,EAAA,6DAGd,QADMM,EAAUD,EAASE,MAAK,SAAC2G,GAAD,OAAUA,EAAKjH,iBAAmB4C,YAChE,IAAIvC,OAAJ,EAAIA,EAASwL,cACLO,EADiB,UACL/L,EAAQwL,WADH,6BAERnV,OAAO2V,SAASC,OAAM5V,OAAO2V,SAAS9G,KAAhB,kBAAkC6G,IAL3D,iCAShBzB,GAAkB,GATF,SAWR4B,EAAY5K,EAAYrB,MAAK,SAACH,GAAD,OAAYA,EAAOI,MAAQqC,KAXhD,SAYW4J,YAAYD,EAAU5H,IAAKtD,GAZtC,eAcZA,EAASoL,YAAe7J,IACxB8J,YAAgBrL,IACX6B,IAAMxH,MAAM,kCAhBL,kDAkBdwH,IAAMxH,MAAM,2CAlBE,yBAoBVyF,EAAQ0B,SAAS8H,GAAkB,GApBzB,6EAAH,sDA8Cf,OAtBA7U,qBAAU,WACJqL,EAAQ0B,SAAWyH,GA7FlBvL,IAAYgC,GAAYyJ,IAC7BK,GAAW,GACX8B,YAAmC5N,EAAS6N,KACzCC,MAAK,SAACC,GACL,IAAqBC,EAAuGD,EAApHnL,YAAgCqL,EAAoFF,EAA9F1M,SAAwC6M,EAAsDH,EAArEI,cAAsCC,EAA+BL,EAA1CM,UAAgCC,EAAUP,EAArBQ,UACjGC,EAAQ,GACdJ,EAASpB,SAAQ,SAAC9E,GAChBsG,EAAMtB,KAAK,CACTuB,IAAKvG,EAAKuG,IACVjN,IAAK0G,EAAK1G,IACVkN,KAAMxG,EAAKwG,KACXC,MAAOzG,EAAKyG,MACZC,WAAY9V,KAAK+V,MAAM3G,EAAK0G,YAC5BE,WAAYhW,KAAK+V,MAAM3G,EAAK4G,YAC5BC,WAAYjW,KAAK+V,MAAM3G,EAAK6G,YAC5BC,YAAalW,KAAK+V,MAAM3G,EAAK8G,aAC7BC,UAAW/G,EAAK+G,UAChBC,UAAWhH,EAAKgH,eAGpB,IAAMC,EAAa,GACbC,EAAU,GACVC,EAAe,GACfC,EAAW,GACXC,EAAW,GACXC,EAAU,GAChBxB,EAAQhB,SAAQ,SAAC5L,GACf,GAAIA,EAAOqN,IAAK,CACd,IAAMgB,EAAOjB,EAAMjN,MAAK,SAAC2G,GAAD,OAAUA,EAAKuG,MAAQrN,EAAOqN,OAChDiB,EAAmBC,OAAOC,OAAOH,EAAKb,YAAYhO,KAAI,SAACiP,GAAD,OAASF,OAAOC,OAAOC,GAAK7M,UAAS,MAC3F8M,EAAmBH,OAAOC,OAAOH,EAAKX,YAAYlO,KAAI,SAACiP,GAAD,OAASF,OAAOC,OAAOC,GAAK7M,UAAS,MAC3FnB,EAAYT,EAAO2O,KAAKxM,OAC9B,GAAImM,EAAiB1M,UAAS,IAAS8M,EAAiB9M,UAAS,IAASnB,EAAY,EAAG,CACvFsN,EAAWjC,KAAK9L,GAChB,IAAMjC,EAAe8O,EAAc1M,MAAK,SAAC2G,GAAD,OAAUA,EAAKjH,iBAAmBG,EAAOI,OAC7ErC,GAAciQ,EAAQlC,KAAK/N,GAC/B,IAAM6Q,EAAW9B,EAAW3M,MAAK,SAAC0O,GAAD,MAAS,UAAGA,EAAI1G,QAAP,UAAqBpK,EAAa+Q,kBACxEF,GAAUX,EAAanC,KAAK8C,GAC5BP,GAAMH,EAASpC,KAAKuC,GACxBrO,EAAO2O,KAAK/C,SAAQ,SAACmD,GACnB,IAAKX,EAAQxM,SAASmN,GAAM,CAC1BX,EAAQtC,KAAKiD,GACb,IAAMC,EAAO9B,EAAM/M,MAAK,SAAC2G,GAAD,OAAUA,EAAKiI,MAAQA,KAC/CZ,EAASrC,KAAKkD,YAIf,CACLjB,EAAWjC,KAAK9L,GAChB,IAAMjC,EAAe8O,EAAc1M,MAAK,SAAC2G,GAAD,OAAUA,EAAKjH,iBAAmBG,EAAOI,OAC7ErC,GAAciQ,EAAQlC,KAAK/N,GAC/B,IAAM6Q,EAAW9B,EAAW3M,MAAK,SAAC0O,GAAD,MAAS,UAAGA,EAAI1G,QAAP,UAAqBpK,EAAa+Q,kBACxEF,GAAUX,EAAanC,KAAK8C,OAGpCb,EAAWkB,MAAK,SAACC,EAASC,GAAc,OAAID,EAAQvN,KAAOwN,EAAQxN,KAAa,EAAOuN,EAAQvN,KAAOwN,EAAQxN,MAAc,EAAU,KACtIT,EAASkO,YAAiBrB,EAAYC,EAASC,EAAcC,EAAUC,IACvEjN,EAASmO,mBAEVC,OAAM,SAACC,GACNvS,QAAQ8F,IAAIpL,KAAKC,UAAU4X,IAC3BxM,IAAMxH,MAAM,8CAEbiU,SAAQ,WACHxO,EAAQ0B,SAASgI,GAAW,SA8BnC,CAAC1J,EAASqJ,EAAgBF,IAE7BxU,qBAAU,WACR,IAAM8Z,EAAc7Z,SAAS8Z,eAAe,kBAO5C,OANI1O,EAAQ0B,SAAWyH,GAAmBsF,IACxC7Z,SAAS8Z,eAAe,kBAAkBC,UAAY9E,EAAa1I,OAAS,GAAK0I,EAA3B,UAA6CA,EAAa+E,UAAU,EAAG,IAAvE,OACtDtE,EAAa,IAAIuE,KAAWja,SAAS8Z,eAAe,mBACjD7Z,IAAI,GACJia,OAAOC,KAEL,WACD/O,EAAQ0B,SAAWyH,GACjBmB,IACFA,EAAW0E,UACX1E,EAAa,SAIlB,CAACtK,EAASmJ,EAAiBU,IAG5B,cAACnB,GAAD,UACE,eAACxL,EAAA,EAAD,CACEC,GAAI,CACF5F,OAAQwR,KACR3L,QAAS,OACTO,WAAY,SACZJ,GAAI,CACF0R,GAAI,OACJC,GAAI,OACJC,GAAI,oBACJC,GAAI,oBATV,UAaGjG,EACC,cAACjM,EAAA,EAAD,CACEC,GAAI,CACF3F,MAAO,QACPD,OAAQ,QAHZ,SAME,cAAC2F,EAAA,EAAD,CACEC,GAAI,CACF3F,MAAO,QACPD,OAAQ,QAHZ,SAME,eAAC2F,EAAA,EAAD,CACEC,GAAI,CACFC,QAAS,OACT5F,MAAO,OACP6F,cAAe,SACfgF,SAAU,WACV1E,WAAY,UANhB,UASE,cAACT,EAAA,EAAD,CACEC,GAAI,CACFkF,SAAU,WACViD,IAAI,GAAD,OAAKyD,KAAiBD,GAAiB,EAAK,EAA5C,MACH/B,QAAS,mBACTvO,aAAc,MACdhB,MAAOsR,GACPvR,OAAQuR,GACRzN,UAAW,mCAGf,cAAC6B,EAAA,EAAD,CACEC,GAAI,CACFkF,SAAU,WACViD,IAAI,GAAD,OAAKyD,KAAiBD,GAAiB,EAAK,EA1N/C,GA0NG,MACH/B,QAAS,mBACTvP,MAAOsR,GAAiBuG,GACxB9X,OAASuR,GAAiB,EAAK,EA7N/B,MAgOJ,cAAC/K,EAAA,EAAD,CACEuR,GAAG,iBACHhX,QAAQ,QACRW,WAAW,OACXc,MAAM,cACNoD,GAAI,CACFkF,SAAU,WACViD,IAAK,MACL9N,MAAO,UAGX,cAAC0F,EAAA,EAAD,CACEC,GAAI,CACFkF,SAAU,WACViD,IAAI,GAAD,OAAKyD,KAAiBD,GAAiB,EAAK,GAAKA,GAjPhD,IAiPoF,EAArF,MACH/B,QAAS,mBACTvO,aAAc,MACdhB,MApPI,GAqPJD,OArPI,GAsPJ0K,OAAQ,UACR7E,QAAS,OACTkF,eAAgB,SAChB3E,WAAY,SACZ,SAAU,CACRwE,UAAW,oBAGf1E,QAAS,WACP2C,EAAS,UAjBb,SAoBE,cAAC,KAAD,CACExC,SAAU+L,EACV9L,KApQI,GAqQJC,UAAU,aAOpB,cAAC,GAAD,CACEyJ,WAAW,mBACXC,QAAQ,OACRjQ,OAAQ,GACR6M,KAAK,MAGR8F,GACC,cAAC,GAAD,CACEjE,aAAuB,OAAVmD,QAAU,IAAVA,OAAA,EAAAA,EAAYmG,aAAcnG,EAAWmG,YAAc,GAChEpJ,aAAY,OAACiD,QAAD,IAACA,OAAD,EAACA,EAAYjD,WACzBD,SAAUqE,EACVnE,YAAaA,EACb1I,UAAU,IAGd,cAACR,EAAA,EAAD,CAAKuJ,SAAU,IACf,cAACvJ,EAAA,EAAD,CACEC,GAAI,CACFC,QAAS,OACTC,cAAe,MACfM,WAAY,UAJhB,SAQI0G,EAAM7F,KAAI,SAACsH,GACT,IAAIpI,GAAW,EAIf,MAHI,CAAC,UAAW,SAASkD,SAASkF,EAAK1B,OACjCkF,EAAakG,gBAAkBC,KAAcC,SAAWpG,EAAaqG,SAAW7J,EAAK1B,KAAK4F,MAAM,KAAItM,GAAW,GAGnH,cAAC,GAAD,CAEEsG,cAAc,EACdD,KAAM+B,EACNhR,MAAO,EACP4I,SAAUA,GAJLoI,EAAK3B,YAUnBgF,GACC,cAAC,GAAD,CACEvJ,QAASA,EACTC,SAAUmL,EACVrO,eAAgBA,UCpZtBiT,GAAsBjH,YAAmB,MAAnBA,EAC1B,kBACE,CACElN,gBAFJ,EAAG3F,MAEwBmE,QAAQG,WAAWC,QAC1C+C,QAAS,OACT7F,OAAQ,OACRkB,SAAU,SACVjB,MAAO,WAKPqY,GAA8BlH,YAAmB,MAAnBA,CAA0B,CAC5DvL,QAAS,OACT0S,KAAM,WACNrX,SAAU,SACVlB,OAAQ,OACRC,MAAO,SAGHuY,GAAyBpH,YAAmB,MAAnBA,CAA0B,CACvDvL,QAAS,OACT0S,KAAM,WACNrX,SAAU,SACVuX,WAAYjH,KACZxR,OAAQ,OACRC,MAAO,SAGHyY,GAA2BtH,YAAmB,MAAnBA,CAA0B,CACzDvL,QAAS,OACT0S,KAAM,WACNrX,SAAU,SACVjB,MAAO,SAGH0Y,GAAyBvH,YAAmB,MAAnBA,CAA0B,CACvDmH,KAAM,WACNvY,OAAQ,OACRC,MAAO,OACPiB,SAAU,OACV4J,SAAU,WACV8N,wBAAyB,UAkCZC,GA/BmC,WAChD,IAAMC,EAAOtQ,cACb,EAAuBuQ,cAAhBC,EAAP,oBACMC,EAAYH,EAAKlH,mBAAqBoH,EAAaE,IAAI,WAE7D,OACE,cAACb,GAAD,UACGY,EACC,cAACX,GAAD,UACE,cAACI,GAAD,UACE,cAACC,GAAD,UACE,cAAC,IAAD,UAKN,qCACE,cAAC,GAAD,IACA,cAACH,GAAD,UACE,cAACE,GAAD,UACE,cAACC,GAAD,UACE,cAAC,IAAD,gB,qBCrDDQ,I,OAlBW,WASxB,OARA/b,qBAAU,WAGR,OAFAgc,KAAUC,QAEH,WACLD,KAAUE,UAEX,IAGD,cAAC3T,EAAA,EAAD,CACEC,GAAI,CACF2T,UAAW,Y,UCkEJC,GApEuB,SAACvc,GACrC,IAAM0L,EAAWC,cACXC,EAAWC,cACT5L,EAAqBD,EAArBC,SAAUuc,EAAWxc,EAAXwc,OACZX,EAAOtQ,cACb,EAAgDlD,aAAY,SAACC,GAAD,OAAWA,EAAMgE,QAArElD,EAAR,EAAQA,SAAU8M,EAAlB,EAAkBA,WAAY8E,EAA9B,EAA8BA,cAC9B,EAA0BpZ,mBAAiB,MAA3C,mBAAOmE,EAAP,KAAc0W,EAAd,KAEMtP,EAAY,uCAAG,sBAAA/C,EAAA,+EAEXyR,EAAKvQ,SAFM,OAGjB+B,YAAiB3B,GACjBE,EAAS,SAJQ,gDAMjBpE,QAAQ8F,IAAR,MACAC,IAAMxH,MAAM,+CAPK,yDAAH,qDA6BlB,OAlBA5F,qBAAU,WACR,GAAK0b,EAAKlH,iBACNqG,IAAkBC,KAAcyB,KAAM,CACxC,IAAIC,EAAYzG,EAChB,IAAKyG,EAAW,CAEZ,IAAMlG,EAAS1V,OAAO2V,SAASkG,SAC/B,GAAe,0BAAXnG,EAAoC,CACtC,IAAMvL,EAAMuL,EAAOoG,QAAQ,0BACvB3R,EAAM,EAAGyR,EAAYlG,EAAO2D,UAAU,EAAGlP,GACxCuR,EAAS,wCAIpBK,YAAYjB,EAAKvP,KAAKwO,GAAIe,EAAKkB,UAAWrR,EAAUyB,EAAcwP,MAEnE,CAACd,EAAMzS,EAAU4R,IAEhBjV,EAAc,cAAC,IAAD,CAAUiX,GAAG,WAE1BnB,EAAKlH,gBAWNvL,GAAYA,EAAS6T,SAErBlc,OAAO2V,SAAS9G,KAAO,yBAChB,cAACsN,GAAA,EAAD,KAKPlC,IAAkBC,KAAckC,UAAkB,cAACD,GAAA,EAAD,IAE/C,mCAAGjd,IApBHuc,EAOE,mCAAGvc,KALNc,OAAO2V,SAAS9G,KAAO,gCAChB,cAACsN,GAAA,EAAD,MCxCAE,GAVyB,SAAC,GAAkB,IAAhBnd,EAAe,EAAfA,SAEzC,OAD4BsL,cAApBoJ,gBACoB,cAAC,IAAD,CAAUqI,GAAG,YAClC,mCAAG/c,KCLNod,GAAW,SAACC,GAAD,OAAe,SAACtd,GAAD,OAC9B,cAAC,WAAD,CAAU8C,SAAU,cAAC,GAAD,IAApB,SACE,cAACwa,EAAD,eAAetd,QAMbud,GAAQF,GAASG,gBAAK,kBAAM,iEAI5BC,GAAYJ,GAASG,gBAAK,kBAAM,8EAChCE,GAAOL,GAASG,gBAAK,kBAAM,uEAC3BG,GAAYN,GAASG,gBAAK,kBAAM,0DAkGvBI,GAhGe,CAC5B,CACEtO,KAAM,UACNuO,QACE,cAAC,GAAD,CAAWrB,QAAM,EAAjB,SACE,cAAC,GAAD,MAGJvc,SAAU,CACR,CACEqP,KAAM,UACNuO,QAAS,cAACH,GAAD,KAEX,CACEpO,KAAM,qBACNuO,QAAS,cAACH,GAAD,OAIf,CACEpO,KAAM,QACNuO,QACE,cAAC,GAAD,UACE,cAAC,GAAD,MAGJ5d,SAAU,CACR,CACEqP,KAAM,QACNuO,QAAS,cAACH,GAAD,KAEX,CACEpO,KAAM,mBACNuO,QAAS,cAACH,GAAD,OAIf,CACEpO,KAAM,QACNuO,QACE,cAAC,GAAD,UACE,cAAC,GAAD,MAGJ5d,SAAU,CACR,CACEqP,KAAM,QACNuO,QAAS,cAACJ,GAAD,OAIf,CACEnO,KAAM,SACNuO,QAAS,cAACF,GAAD,KAEX,CACErO,KAAM,IACNrP,SAAU,CACR,CACEqP,KAAM,IACNuO,QACE,cAAC,GAAD,CAAWrB,QAAM,EAAjB,SACE,cAAC,GAAD,MAGJvc,SAAU,CACR,CACEqP,KAAM,IACNuO,QAAS,cAACJ,GAAD,OAIf,CACEnO,KAAM,SACNuO,QACE,cAAC,GAAD,UACE,cAACN,GAAD,SAMV,CACEjO,KAAM,IACNuO,QACE,cAAC,GAAD,CAAWrB,QAAM,EAAjB,SACE,cAAC,GAAD,MAGJvc,SAAU,CAAC,CACTqP,KAAM,KACNuO,QAAS,cAACF,GAAD,Q,UC9DAG,GAtCC,WACd,IAAMlN,EAAUmN,YAAUH,IAClBnc,EAAaa,IAAbb,SACFoa,EAAOtQ,cAEb,GAAIyS,aACEjd,OAAO2V,SAASuH,OAAO7R,SAAS,yBAElC,OADArL,OAAO2V,SAAS9G,KAAO7O,OAAO2V,SAAS9G,KAAKsO,QAAQ,wBAAyB,2BACtE,wBAIXtd,IACA,IAAMU,EAAQ+F,GAAkB,CAC9BnH,UAAWuB,EAASvB,UACpBkB,oBAAqBK,EAASL,oBAC9BC,eAAgBI,EAASJ,eACzBC,MAAO,WAGT,OACE,cAAC0M,EAAA,EAAD,CAAe1M,MAAOA,EAAtB,SACE,eAAC,EAAD,CAAKpB,UAAWuB,EAASvB,UAAzB,UACE,cAACie,EAAA,EAAD,IACA,cAAC,IAAD,CACEtQ,SAAS,aACTuQ,aAAc,CACZhP,MAAO,CACLpL,aAAc,UAInB6X,EAAKwC,cAAgBzN,EAAU,cAACsM,GAAA,EAAD,U,qBC5BxCoB,IAASC,OACP,cAAC,aAAD,UACE,cAAC,IAAD,UACE,cAAC,IAAD,CAAeC,MAAOA,IAAtB,SACE,cAACC,EAAA,EAAD,CAAsBC,aAAW,EAAjC,SACE,cAACC,EAAA,EAAD,CAAsBC,YAAaC,IAAnC,SACE,cAAC,EAAD,UACE,cAAC,IAAD,UACE,cAAC,KAAD,UACE,cAACC,GAAA,EAAD,UACE,cAAC,GAAD,sBAUlB1e,SAAS8Z,eAAe,U,iCCtC1B,WAaezO,IAVI,WACjB,IAAMsT,EAAYhT,kBAAO,GAMzB,OAJA5L,qBAAU,kBAAM,WACd4e,EAAU7R,SAAU,KACnB,IAEI6R,I,qeCEMC,EAPE,uCAAG,WAAOC,EAAa/Y,EAAcgZ,GAAlC,iBAAA9U,EAAA,6DAClB+U,IAAOzT,SAAS0T,eACVC,EAFY,UAECJ,EAFD,YAEQK,YAAA,aAAwBpZ,QAASgZ,KAFzC,SAGAK,IAAMtD,IAAIoD,GAHV,cAGZlI,EAHY,yBAIXA,EAAI5H,MAJO,2CAAH,0D,QCFJiQ,EAAyB,uCAAG,4BAAApV,EAAA,sEACrB4U,EAChBS,IAAYC,YACZ,2BACA,IAJqC,cACjCvI,EADiC,yBAMhCA,GANgC,2CAAH,qDASzBwI,EAAkB,uCAAG,WAAOC,GAAP,6BAAAxV,EAAA,6DAAoByV,EAApB,yCACdb,EAChBS,IAAYC,YACZ,YACA,CAAEE,MAAKC,eAJuB,cAC1B1I,EAD0B,yBAMzBA,GANyB,2CAAH,sDASlB2I,EAAuB,uCAAG,WAAOF,GAAP,eAAAxV,EAAA,sEACnB4U,EAChBS,IAAYC,YACZ,yBACA,CAAEE,QAJiC,cAC/BzI,EAD+B,yBAM9BA,GAN8B,2CAAH,sDAoCvB4I,EAA4B,uCAAG,WAAOC,GAAP,eAAA5V,EAAA,sEACxB4U,EAChBS,IAAYQ,iBACZ,mBACA,CAAED,WAJsC,cACpC7I,EADoC,yBAMnCA,GANmC,2CAAH,sDAqH5B+I,EAAwB,uCAAG,WAAON,EAAa/N,EAAesO,EAAgBC,GAAnD,eAAAhW,EAAA,sEACpB4U,EAChBS,IAAYY,eACZ,iBACA,CAAET,MAAK/N,QAAOsO,SAAQC,UAJc,cAChCjJ,EADgC,yBAM/BA,GAN+B,2CAAH,4DAkBxBmJ,EAAe,uCAAG,WAAOC,GAAP,eAAAnW,EAAA,sEACX4U,EAChBS,IAAYY,eACZ,gBACA,CAAEE,MAAOre,KAAKC,UAAUoe,KAJG,cACvBpJ,EADuB,yBAMtBA,GANsB,2CAAH,sDAiFfqJ,EAAuB,uCAAG,WAAOvT,GAAP,eAAA7C,EAAA,sEACnB4U,EAChBS,IAAYY,eACZ,eACA,CAAEpT,UAJiC,cAC/BkK,EAD+B,yBAM9BA,GAN8B,2CAAH,sDASvBsJ,EAAe,uCAAG,WAAOxJ,GAAP,eAAA7M,EAAA,sEACX4U,EAChBS,IAAYY,eACZ,gBACA,CAAEpJ,QAJyB,cACvBE,EADuB,yBAMtBA,GANsB,2CAAH,sDASfuJ,EAA8B,uCAAG,WAAOvU,GAAP,eAAA/B,EAAA,sEAC1B4U,EAChBS,IAAYY,eACZ,oBACA,CAAElU,SAJwC,cACtCgL,EADsC,yBAMrCA,GANqC,2CAAH,sDA2B9BwJ,EAAc,uCAAG,WAAOC,EAAWT,EAAgBtO,EAAeyF,GAAjD,eAAAlN,EAAA,sEACV4U,EAChB,6CACA,SACA,CAAE4B,KAAM1e,KAAKC,UAAUye,GAAOT,SAAQtO,QAAOyF,WAAYpV,KAAKC,UAAUmV,KAJ9C,cACtBH,EADsB,yBAMrBA,GANqB,2CAAH,4DASd0J,EAAgC,uCAAG,WAAO5J,GAAP,eAAA7M,EAAA,sEAC5B4U,EAChBS,IAAYC,YACZ,UACA,CAAEzI,QAJ0C,cACxCE,EADwC,yBAMvCA,GANuC,2CAAH,uD,iCCvU7C,oEACO,IAAM2J,EAAW,SAAXA,EAAY7H,GACvB,MAAmB,kBAARA,GAA4B,OAARA,EACtBA,EAGLA,aAAe8H,KACV,IAAIA,KAAK9H,EAAI+H,WAGlB/H,aAAegI,MACVhI,EAAIiI,QAAO,SAACC,EAAK7P,EAAM8P,GAE5B,OADAD,EAAIC,GAAKN,EAASxP,GACX6P,IACN,IAGDlI,aAAeF,OACVA,OAAOsI,KAAKpI,GAAKiI,QAAO,SAACI,EAAQ9gB,GAEtC,OADA8gB,EAAO9gB,GAAOsgB,EAAS7H,EAAIzY,IACpB8gB,IACN,SAJL,GAQWC,EAAU,SAACpO,EAAaqO,GACvB,OAARrO,GAAyB,OAATqO,GACpBzI,OAAOsI,KAAKlO,GAAKiD,SAAQ,SAAC5V,GAAUghB,EAAKhhB,GAAO2S,EAAI3S,Q,8XCpBzCihB,G,MAAmB,WAC9B,MAAkCjD,IAAMkD,WAAWnZ,aAA3CH,EAAR,EAAQA,YAAaqC,EAArB,EAAqBA,SACrB,OAAKrC,EACaqC,EAASE,MAAK,SAACgX,GAAD,OAAOA,EAAEtX,iBAAmBjC,KADnC,OAKdgN,EAAsB,WACjC,IAAMwM,EAAgBH,IACtB,OAAKG,EACEzX,YAAcyX,GADM,MAIhBnZ,EAAuB,WAClC,IAAQW,EAAaoV,IAAMkD,WAAWpV,KAA9BlD,SACR,IAAKA,EAAU,OAAO,KACtB,MAAqCoV,IAAMkD,WAAWnZ,aAA9CH,EAAR,EAAQA,YAAa4D,EAArB,EAAqBA,YACrB,IAAK5D,EAAa,OAAO,KACzB,IAAMyZ,EAAe7V,EAAYrB,MAAK,SAACmX,GAAD,OAAQA,EAAGlX,MAAQxC,KACnD2Z,EAAchU,YAAe3E,GACnC,OAAO,2BACF2Y,GADL,IAEEC,OAAO,GAAD,mBAAMD,EAAYC,QAAlB,CAA0B,CAAElH,GAAI+G,EAAa7S,IAAK7C,KAAM0V,EAAa1V,WAYlE8V,EAAc,SAACC,EAAoBC,GAC9C,IAAQ/Y,EAAaoV,IAAMkD,WAAWpV,KAA9BlD,SACR,EAAmDoV,IAAMkD,WAAWnZ,aAA5DH,EAAR,EAAQA,YAAaga,EAArB,EAAqBA,aAAcpW,EAAnC,EAAmCA,YACnC,IAAK5C,IAAahB,EAAa,MAAO,GACtC,IAAMyZ,EAAe7V,EAAYrB,MAAK,SAACmX,GAAD,OAAQA,EAAGlX,MAAQxC,KACzD,IAAgB,OAAZyZ,QAAY,IAAZA,OAAA,EAAAA,EAAc1V,QAASxC,IAAgB,CACzC,GAAIuY,IAAevY,IAAgB,OAAOkY,EAAa7S,IACvD,GAAIkT,IAAeG,IAAc,OAAOjZ,EAAS6N,SAC5C,IAAgB,OAAZ4K,QAAY,IAAZA,OAAA,EAAAA,EAAc1V,QAASvC,IAAgB,CAChD,GAAIuY,IAAeG,IAAa,OAAOla,EACvC,GAAI+Z,IAAeI,IAAc,OAAOH,EACxC,GAAID,IAAevY,IAAgB,OAAOiY,EAAa7S,IAEzD,MAAO,IAGIwT,EAAoB,SAACrW,GAChC,MAAqCqS,IAAMkD,WAAWnZ,aAA9CH,EAAR,EAAQA,YAAa4D,EAArB,EAAqBA,YACrB,IAAK5D,EAAa,MAAO,GACzB,IAAMyZ,EAAe7V,EAAYrB,MAAK,SAACmX,GAAD,OAAQA,EAAGlX,MAAQxC,KACzD,MAAI,CAACia,IAAc1Y,IAAgBC,KAAgBwC,SAASD,GAAO,OAAO0V,QAAP,IAAOA,OAAP,EAAOA,EAAc7S,IACjF5G,GAGIsB,EAAgB,SAACwY,EAAoBC,GAChD,MAAqC3D,IAAMkD,WAAWnZ,aAA9CH,EAAR,EAAQA,YAAa4D,EAArB,EAAqBA,YACrB,IAAK5D,EAAa,OAAOqa,IACzB,IAAMZ,EAAe7V,EAAYrB,MAAK,SAACmX,GAAD,OAAQA,EAAGlX,MAAQxC,KACzD,IAAgB,OAAZyZ,QAAY,IAAZA,OAAA,EAAAA,EAAc1V,QAASxC,IAAgB,CACzC,GAAIuY,IAAevY,IAAgB,OAAOA,IAC1C,GAAIuY,IAAeG,IAAc,OAAOA,SACnC,IAAgB,OAAZR,QAAY,IAAZA,OAAA,EAAAA,EAAc1V,QAASvC,IAAgB,CAChD,GAAIuY,IAAeG,IAAa,OAAOA,IACvC,GAAIH,IAAeI,IAAc,OAAOA,IACxC,GAAIJ,IAAevY,IAAgB,OAAOA,IAE5C,OAAO6Y,KAGIC,EAAgB,SAACR,EAAoBC,GAArB,MAA2E,CACtGrH,GAAImH,EAAYC,EAAYC,GAC5BhW,KAAMzC,EAAcwY,EAAYC,KAUrBQ,EAAmB,WAC9B,MAAqCnE,IAAMkD,WAAWnZ,aAA9CH,EAAR,EAAQA,YAAa4D,EAArB,EAAqBA,YACrB,IAAK5D,EAAa,OAAO,KACzB,IAAMyZ,EAAe7V,EAAYrB,MAAK,SAACmX,GAAD,OAAQA,EAAGlX,MAAQxC,KACzD,OAAgB,OAAZyZ,QAAY,IAAZA,OAAA,EAAAA,EAAc1V,QAASxC,IAAuBlB,IAC3C2M,KAuBIwN,EAAqB,SAAChC,GACjC,IAAQiC,EAAiBrE,IAAMkD,WAAWnZ,aAAlCsa,aACFC,EAAU,YAAOD,GACvB,GAAIE,IAAiB3W,SAASwU,EAAKzU,MAAO,CACxC,IAAM3D,EAAoBC,IACtBD,GAAmBsa,EAAWxM,KAAK9N,QAClC,GAAIwa,IAAU5W,SAASwU,EAAKzU,MAAO,CACxC,IAAMgJ,EAAmBC,IACrBD,GAAkB2N,EAAWxM,KAAKnB,GAExC,OAAO2N,EAAWnY,MAAK,SAACsY,GAAD,OAAcA,EAASjB,OAAOrM,MAAK,gBAAGmF,EAAH,EAAGA,GAAI3O,EAAP,EAAOA,KAAP,OAAkB2O,IAAO8F,EAAK9F,IAAM3O,IAASyU,EAAKzU,a,sXCvGxGqJ,EAAQ0N,YAAY,CACxBpL,KAAM,WACNqL,aAbkC,CAClCC,cAAe,GACfC,uBAAuB,EACvBC,kBAAmB,GACnBC,2BAA2B,EAC3BC,gBAAiB,GACjBC,yBAAyB,EACzBC,eAAgB,GAChBC,wBAAwB,GAMxBC,SAAU,CACRC,WADQ,SACGvb,GACTA,EAAM8a,cAAcU,OAAO,EAAGxb,EAAM8a,cAAczW,QAClDrE,EAAMgb,kBAAkBQ,OAAO,EAAGxb,EAAMgb,kBAAkB3W,QAC1DrE,EAAMkb,gBAAgBM,OAAO,EAAGxb,EAAMkb,gBAAgB7W,QACtDrE,EAAMob,eAAeI,OAAO,EAAGxb,EAAMob,eAAe/W,QACpDrE,EAAM+a,uBAAwB,EAC9B/a,EAAMib,2BAA4B,EAClCjb,EAAMmb,yBAA0B,EAChCnb,EAAMqb,wBAAyB,GAEjCI,yBAXQ,SAWiBzb,EAAsB5C,GAC7C4C,EAAM+a,sBAAwB3d,EAAOse,SAEvCC,6BAdQ,SAcqB3b,EAAsB5C,GACjD4C,EAAMib,0BAA4B7d,EAAOse,SAE3CE,2BAjBQ,SAiBmB5b,EAAsB5C,GAC/C4C,EAAMmb,wBAA0B/d,EAAOse,SAEzCG,0BApBQ,SAoBkB7b,EAAsB5C,GAC9C4C,EAAMqb,uBAAyBje,EAAOse,SAExCI,iBAvBQ,SAuBS9b,EAAsB5C,GACrC4C,EAAM8a,cAAgB1d,EAAOse,QAC7B1b,EAAM+a,uBAAwB,GAEhCgB,qBA3BQ,SA2Ba/b,EAAsB5C,GACzC4C,EAAMgb,kBAAoB5d,EAAOse,QACjC1b,EAAMib,2BAA4B,GAEpCe,mBA/BQ,SA+BWhc,EAAsB5C,GACvC4C,EAAMkb,gBAAkB9d,EAAOse,QAC/B1b,EAAMmb,yBAA0B,GAElCc,kBAnCQ,SAmCUjc,EAAsB5C,GACtC4C,EAAMob,eAAiBhe,EAAOse,QAC9B1b,EAAMqb,wBAAyB,GAEjCa,kBAvCQ,SAuCUlc,EAAsB5C,GACtC,IAAM+e,EAAc/e,EAAOse,QACrBU,EAAQpc,EAAM8a,cAAcvW,WAAU,SAACyE,GAAD,OAAUA,EAAKwJ,KAAO2J,EAAY3J,MAC1E4J,GAAS,EAAGpc,EAAM8a,cAAcU,OAAOY,EAAO,EAAGD,GAChDnc,EAAM8a,cAAc9M,KAAKmO,IAEhCE,sBA7CQ,SA6Ccrc,EAAsB5C,GAC1C,IAAM+e,EAAc/e,EAAOse,QACrBU,EAAQpc,EAAMgb,kBAAkBzW,WAAU,SAACyE,GAAD,OAAUA,EAAKwJ,KAAO2J,EAAY3J,MAC9E4J,GAAS,EAAGpc,EAAMgb,kBAAkBQ,OAAOY,EAAO,EAAGD,GACpDnc,EAAMgb,kBAAkBhN,KAAKmO,IAEpCG,oBAnDQ,SAmDYtc,EAAsB5C,GACxC,IAAM+e,EAAc/e,EAAOse,QACrBU,EAAQpc,EAAMkb,gBAAgB3W,WAAU,SAACyE,GAAD,OAAUA,EAAKwJ,KAAO2J,EAAY3J,MAC5E4J,GAAS,EAAGpc,EAAMkb,gBAAgBM,OAAOY,EAAO,EAAGD,GAClDnc,EAAMkb,gBAAgBlN,KAAKmO,IAElCI,mBAzDQ,SAyDWvc,EAAsB5C,GACvC,IAAM+e,EAAc/e,EAAOse,QACrBU,EAAQpc,EAAMob,eAAe7W,WAAU,SAACyE,GAAD,OAAUA,EAAKwJ,KAAO2J,EAAY3J,MAC3E4J,GAAS,EAAGpc,EAAMob,eAAeI,OAAOY,EAAO,EAAGD,GACjDnc,EAAMob,eAAepN,KAAKmO,IAEjCK,wBA/DQ,SA+DgBxc,EAAsB5C,GAC5C,IAAM+e,EAAc/e,EAAOse,QACrBU,EAAQpc,EAAM8a,cAAcvW,WAAU,SAACyE,GAAD,MAAU,UAAGA,EAAKqB,QAAR,UAAsB8R,EAAY9R,SACpF+R,GAAS,EAAGpc,EAAM8a,cAAcU,OAAOY,EAAO,EAAGD,GAChDnc,EAAM8a,cAAc9M,KAAKmO,IAEhCM,4BArEQ,SAqEoBzc,EAAsB5C,GAChD,IAAM+e,EAAc/e,EAAOse,QACrBU,EAAQpc,EAAMgb,kBAAkBzW,WAAU,SAACyE,GAAD,MAAU,UAAGA,EAAKqB,QAAR,UAAsB8R,EAAY9R,SACxF+R,GAAS,EAAGpc,EAAMgb,kBAAkBQ,OAAOY,EAAO,EAAGD,GACpDnc,EAAMgb,kBAAkBhN,KAAKmO,IAEpCO,0BA3EQ,SA2EkB1c,EAAsB5C,GAC9C,IAAM+e,EAAc/e,EAAOse,QACrBU,EAAQpc,EAAMkb,gBAAgB3W,WAAU,SAACyE,GAAD,MAAU,UAAGA,EAAKqB,QAAR,UAAsB8R,EAAY9R,SACtF+R,GAAS,EAAGpc,EAAMkb,gBAAgBM,OAAOY,EAAO,EAAGD,GAClDnc,EAAMkb,gBAAgBlN,KAAKmO,IAElCQ,yBAjFQ,SAiFiB3c,EAAsB5C,GAC7C,IAAM+e,EAAc/e,EAAOse,QACrBU,EAAQpc,EAAMob,eAAe7W,WAAU,SAACyE,GAAD,MAAU,UAAGA,EAAKqB,QAAR,UAAsB8R,EAAY9R,SACrF+R,GAAS,EAAGpc,EAAMob,eAAeI,OAAOY,EAAO,EAAGD,GACjDnc,EAAMob,eAAepN,KAAKmO,OAKtBS,EAAY1P,EAAZ0P,QAEFC,EAAqB,kBAAgB,SAACzZ,GACjDA,EAAS8J,EAAM4P,QAAQvB,gBAGZE,EAA2B,SAACsB,GAAD,8CAAoC,WAAO3Z,GAAP,SAAAtB,EAAA,sDAC1EsB,EAAS8J,EAAM4P,QAAQrB,yBAAyBsB,IAD0B,2CAApC,uDAI3BpB,EAA+B,SAACoB,GAAD,8CAAoC,WAAO3Z,GAAP,SAAAtB,EAAA,sDAC9EsB,EAAS8J,EAAM4P,QAAQnB,6BAA6BoB,IAD0B,2CAApC,uDAI/BnB,EAA6B,SAACmB,GAAD,8CAAoC,WAAO3Z,GAAP,SAAAtB,EAAA,sDAC5EsB,EAAS8J,EAAM4P,QAAQlB,2BAA2BmB,IAD0B,2CAApC,uDAI7BlB,EAA4B,SAACkB,GAAD,8CAAoC,WAAO3Z,GAAP,SAAAtB,EAAA,sDAC3EsB,EAAS8J,EAAM4P,QAAQjB,0BAA0BkB,IAD0B,2CAApC,uDAgB5Bd,EAAoB,SAACjN,GAAD,8CAA4C,WAAO5L,GAAP,SAAAtB,EAAA,sDAC3EsB,EAAS8J,EAAM4P,QAAQb,kBAAkBjN,IADkC,2CAA5C,uDAgBpBuN,EAAqB,SAACzL,GAAD,8CAAwC,WAAO1N,GAAP,SAAAtB,EAAA,sDACxEsB,EAAS8J,EAAM4P,QAAQP,mBAAmBzL,IAD8B,2CAAxC,uDAgBrB6L,EAA2B,SAAC7L,GAAD,8CAAwC,WAAO1N,GAAP,SAAAtB,EAAA,sDAC9EsB,EAAS8J,EAAM4P,QAAQH,yBAAyB7L,IAD8B,2CAAxC,wD,iCC1LxC,sNAUIkM,GAAqB,EAEZzO,EAAc,SAACI,EAAavL,GAIvC,OAHAA,EAAS6Z,eACTC,IAAQC,UACR/Z,EAASga,eACF,IAAIC,SAAQ,SAACC,GAClBJ,IAAQK,eAAe5O,EAAKvL,GACzBwL,MAAK,WACJ0O,GAAQ,MAET9L,OAAM,WACL8L,GAAQ,UAKHE,EAAkB,SAACpa,GAI9B,OAHAA,EAAS6Z,eACTC,IAAQC,UACR/Z,EAASga,eACF,IAAIC,SAAQ,SAACC,GAClBJ,IAAQO,mBAAmBra,GACxBwL,MAAK,WACJ0O,GAAQ,MAET9L,OAAM,WACL8L,GAAQ,UAKH7O,EAAkB,SAACrL,GAC9BA,EAASsa,aAAoB,IAC7Bta,EAASua,aAAoB,IAC7Bva,EAASqY,aAAyB,IAClCrY,EAASuY,aAA6B,IACtCvY,EAASwY,aAA2B,IACpCxY,EAASyY,aAA0B,KAGxB9W,EAAmB,SAAC3B,GAC/BA,EAASyZ,eACTzZ,EAASwa,eACTxa,EAASya,eACTza,EAAS6Z,gBAmHIzI,IAhHK,SAAChC,EAAYiC,EAAWrR,EAAUJ,EAAQ4K,GACxDoP,IAEJc,YAAsC,GAAzBC,IAA8B,IAAMtJ,GAAW,GAE5DuI,GAAY,EACZ5Z,EAAS4a,YAAiBrL,IAAcC,UACxC7N,EAAiB3B,GAGjB6a,YAAkBzL,GAIf5D,MAAK,SAACsP,GACDA,IACF9a,EAAS+a,YAAYD,IACrBxP,YAAmCwP,EAAGvP,KACnCC,MAAK,SAACC,GACL,IAAqBC,EAAuGD,EAApHnL,YAAgCqL,EAAoFF,EAA9F1M,SAAwC6M,EAAsDH,EAArEI,cAAsCC,EAA+BL,EAA1CM,UAAgCC,EAAUP,EAArBQ,UACjGC,EAAQ,GACdJ,EAASpB,SAAQ,SAAC9E,GAChBsG,EAAMtB,KAAK,CACTuB,IAAKvG,EAAKuG,IACVjN,IAAK0G,EAAK1G,IACVkN,KAAMxG,EAAKwG,KACXC,MAAOzG,EAAKyG,MACZC,WAAY9V,KAAK+V,MAAM3G,EAAK0G,YAC5BE,WAAYhW,KAAK+V,MAAM3G,EAAK4G,YAC5BC,WAAYjW,KAAK+V,MAAM3G,EAAK6G,YAC5BC,YAAalW,KAAK+V,MAAM3G,EAAK8G,aAC7BC,UAAW/G,EAAK+G,UAChBC,UAAWhH,EAAKgH,eAGpB,IAAMtM,EAAc,GACdvB,EAAW,GACX8M,EAAgB,GAChBE,EAAY,GACZE,EAAY,GACZiB,EAAU,GAChBxB,EAAQhB,SAAQ,SAAC5L,GACf,GAAIA,EAAOqN,IAAK,CACd,IAAMgB,EAAOjB,EAAMjN,MAAK,SAAC2G,GAAD,OAAUA,EAAKuG,MAAQrN,EAAOqN,OAChDiB,EAAmBC,OAAOC,OAAOH,EAAKb,YAAYhO,KAAI,SAACiP,GAAD,OAASF,OAAOC,OAAOC,GAAK7M,UAAS,MAC3F8M,EAAmBH,OAAOC,OAAOH,EAAKX,YAAYlO,KAAI,SAACiP,GAAD,OAASF,OAAOC,OAAOC,GAAK7M,UAAS,MAC3FnB,EAAYT,EAAO2O,KAAKxM,OAC9B,GAAImM,EAAiB1M,UAAS,IAAS8M,EAAiB9M,UAAS,IAASnB,EAAY,EAAG,CACvFe,EAAYsK,KAAK9L,GACjB,IAAMjC,EAAe8O,EAAc1M,MAAK,SAAC2G,GAAD,OAAUA,EAAKjH,iBAAmBG,EAAOI,OAC7ErC,GAAckC,EAAS6L,KAAK/N,GAChC,IAAM6Q,EAAW9B,EAAW3M,MAAK,SAAC0O,GAAD,MAAS,UAAGA,EAAI1G,QAAP,UAAqBpK,EAAa+Q,kBACxEF,GAAU7B,EAAcjB,KAAK8C,GAC7BP,GAAMpB,EAAUnB,KAAKuC,GACzBrO,EAAO2O,KAAK/C,SAAQ,SAACmD,GACnB,IAAKX,EAAQxM,SAASmN,GAAM,CAC1BX,EAAQtC,KAAKiD,GACb,IAAMC,EAAO9B,EAAM/M,MAAK,SAAC2G,GAAD,OAAUA,EAAKiI,MAAQA,KAC/C5B,EAAUrB,KAAKkD,YAIhB,CACLxN,EAAYsK,KAAK9L,GACjB,IAAMjC,EAAe8O,EAAc1M,MAAK,SAAC2G,GAAD,OAAUA,EAAKjH,iBAAmBG,EAAOI,OAC7ErC,GAAckC,EAAS6L,KAAK/N,GAChC,IAAM6Q,EAAW9B,EAAW3M,MAAK,SAAC0O,GAAD,MAAS,UAAGA,EAAI1G,QAAP,UAAqBpK,EAAa+Q,kBACxEF,GAAU7B,EAAcjB,KAAK8C,OAGrCpN,EAAYyN,MAAK,SAACC,EAASC,GAAc,OAAID,EAAQvN,KAAOwN,EAAQxN,KAAa,EAAOuN,EAAQvN,KAAOwN,EAAQxN,MAAc,EAAU,KACvIT,EAASkO,YAAiB5N,EAAavB,EAAU8M,EAAeE,EAAWE,IAC3E,IAAI+O,EAAW,KACXC,EAAc,KACdlc,EAASkC,OAAS,IAChBuJ,GACFwQ,EAAWjc,EAASE,MAAK,SAACic,GAAD,OAAsBA,EAAiB1Q,aAAeA,QACjEyQ,EAAc3a,EAAYrB,MAAK,SAACH,GAAD,OAAYA,EAAOI,MAAQ8b,EAASrc,oBAEjFqc,EAAWjc,EAASoc,GAAG,GACvBF,EAAc3a,EAAYrB,MAAK,SAACH,GAAD,OAAYA,EAAOI,MAAQ8b,EAASrc,oBAGnEqc,GAAYC,IACgCzQ,GAE5CxK,EAASoL,YAAe4P,EAASrc,iBACjCqB,EAAS4a,YAAiBrL,IAAckC,YACxCmI,GAAY,GAJ4CvkB,OAAO2V,SAAS9G,KAAhB,kBAAkC8W,EAASxQ,WAA3C,8BAQ7D4D,OAAM,SAACtH,GACNhL,QAAQ8F,IAAI,4BAA6BpL,KAAKC,UAAUqQ,IACxD9G,EAASoL,YAAe,OACxBpL,EAAS4a,YAAiBrL,IAAcyB,OACxCpR,IACAiC,IAAMxH,MAAM,gCACZuf,GAAY,SAInBxL,OAAM,SAACtH,GACNhL,QAAQ8F,IAAI,mBAAoBpL,KAAKC,UAAUqQ,IAC/C9G,EAASoL,YAAe,OACxBpL,EAAS4a,YAAiBrL,IAAcyB,OACxCpR,IACAiC,IAAMxH,MAAM,mCACZuf,GAAY,Q,wOC/HZwB,EAAqB,SAACC,GAAD,MAAkC,CAC3DjM,GAAIiM,EAAIrC,MACRjhB,KAAMvB,KAAK+V,MAAM8O,EAAItjB,MACrBujB,OAAQD,EAAIE,aAAarH,IACzBsH,OAAQH,EAAII,WACZ9O,UAAW0O,EAAIK,YAAYpG,UAC3BqG,SAAUN,EAAIO,OACdC,MAAM,IA84BK/B,EAAU,I,iDAv3BbgC,OAAwB,K,KAExBvQ,IAAc,G,KAEdwQ,MAAgB,G,KAEhBC,KAAqB,K,KAErBnH,MAA8B,G,KAE9BoH,SAAwB,G,KAExBC,WAAqB,E,KAErBlc,SAAW,K,KAEXmc,OAAiB,E,KAEjBC,cAAwB,E,KAEzBC,UAAoB,E,2CAE3B,WACOC,KAAKR,SACVQ,KAAKD,UAAW,EAChBC,KAAKR,OAAOS,WACZD,KAAKtc,SAAW,KAChBsc,KAAKF,cAAe,EACpBE,KAAKL,SAAS7D,OAAO,EAAGkE,KAAKL,SAAShb,QACtCqb,KAAKJ,WAAa,EAClBI,KAAKN,KAAO,KACZM,KAAK/Q,IAAM,GACX+Q,KAAKzH,MAAQ,GACbyH,KAAKP,MAAQ,GACbO,KAAKH,OAAS,EACdG,KAAKR,OAAS,Q,4BAGhB,SAAevQ,EAAaiR,GAA8B,IAAD,OACvD,OAAIF,KAAKR,QAC6B,cAAhCQ,KAAKR,OAAOW,iBAAmE,eAAhCH,KAAKR,OAAOW,gBAK7DH,KAAKF,aAAqBnC,QAAQC,SAAQ,IAE9CzG,IAAOzT,SAAS0T,eAEhB4I,KAAKF,cAAe,EAEb,IAAInC,SAAQ,SAACC,EAASwC,GAC3B,EAAKC,SAASpR,GACXC,MAAK,SAACoR,GACL,EAAKb,MAAQa,EACbC,IAAcC,OAAO,EAAKf,OACvBvQ,MAAK,SAACuR,GACL,EAAKjB,OAASiB,EACd,EAAKxR,IAAMA,EACX,EAAKvL,SAAWwc,EAChB,EAAKQ,gBACL,EAAKX,UAAW,EAChB,EAAKD,cAAe,EACpBlC,GAAQ,MAET9L,OAAM,WACLsO,EAAO,IAAI1gB,MAAM,yDAGtBoS,OAAM,WACLsO,EAAO,IAAI1gB,MAAM,4CA7BZie,QAAQC,SAAQ,K,gCAkC7B,SAAmBsC,GAA8B,IAAD,OAC9C,OAAIF,KAAKR,QAC6B,cAAhCQ,KAAKR,OAAOW,iBAAmE,eAAhCH,KAAKR,OAAOW,gBAK7DH,KAAKF,aAAqBnC,QAAQC,SAAQ,IAE9CzG,IAAOzT,SAAS0T,eAEhB4I,KAAKF,cAAe,EAEb,IAAInC,SAAQ,SAACC,EAASwC,GAC3B,EAAKO,eACFzR,MAAK,SAACoR,GACL,EAAKb,MAAQa,EACbC,IAAcC,OAAO,EAAKf,OACvBvQ,MAAK,SAACuR,GACL,EAAKjB,OAASiB,EACd,EAAKxR,IAAM2R,IACX,EAAKld,SAAWwc,EAChB,EAAKW,oBACL,EAAKd,UAAW,EAChB,EAAKD,cAAe,EACpBlC,GAAQ,MAET9L,OAAM,WACLsO,EAAO,IAAI1gB,MAAM,yDAGtBoS,OAAM,WACLsO,EAAO,IAAI1gB,MAAM,4CA7BZie,QAAQC,SAAQ,K,oBAkC7B,WACE,OAAOoC,KAAK/Q,M,gCAGd,SAAmB6R,EAAa/B,GAAwB,IAAD,OACrDlG,YAAiC,GAAD,OAAIiI,EAAJ,WAAiB5R,MAAK,SAAC+H,GACrD8J,YAAS9J,GAAK/H,MAAK,SAAC8R,GAAc,IAAD,EAC/B,YAAKtd,gBAAL,gBAAgBud,YAAgBlC,EAAK+B,EAAKE,OACzClP,OAAM,oB,gCAIb,SAAmBgP,EAAa/B,GAAwB,IAAD,OACrDlG,YAAiC,GAAD,OAAIiI,EAAJ,SAAe5R,MAAK,SAAC+H,GACnD8J,YAAS9J,GAAK/H,MAAK,SAAC8R,GAAc,IAAD,EAC/B,YAAKtd,gBAAL,gBAAgBud,YAAgBlC,EAAK+B,EAAKE,OACzClP,OAAM,oB,2BAIb,WAAuB,IAAD,OAChBkO,KAAKR,SACPQ,KAAKR,OAAO0B,GAAG,mBAAmB,WAChC,EAAKrD,eAAe,EAAK5O,IAAK,EAAKvL,aAGrCsc,KAAKR,OAAO0B,GAAG,sBAAsB,WACnCC,YAAqB,EAAKlS,KAAK,GAC5BC,MAAK,SAACuQ,GACS,OAAVA,EACF,EAAKD,OAAO4B,YAAY3B,GAExB,EAAKhC,aAGR3L,OAAM,WACLtS,QAAQ8F,IAAI,6BAIlB0a,KAAKR,OAAO0B,GAAG,gBAAgB,SAACnC,GAC9B,GAAK,EAAKW,KAAV,CACA,IAAM2B,EAAOvC,EAAmBC,GAEhC,GAAI,EAAKW,KAAK9H,MAAQyJ,EAAKrC,OAAQ,CAAC,IAAD,EAGD,EAazB,EAbP,GAFA,EAAKW,SAASrR,KAAKyQ,GAEfsC,EAAKhC,WAAa,EAAKpQ,IACPoS,EAAK5lB,KAAf6lB,MACFlT,SAAQ,YAAoB,IAAjBjK,EAAgB,EAAhBA,KAAM2c,EAAU,EAAVA,SACRS,IAATpd,IACEA,EAAKC,SAAS,WAChB,EAAKod,mBAAmBV,EAAKO,GAE3Bld,EAAKC,SAAS,cAChB,EAAKqd,mBAAmBX,EAAKO,OAInC,YAAK3d,gBAAL,gBAAgBge,YAASL,SAEzB,YAAK3d,gBAAL,gBAAgBie,YAAQN,IAO1B,GAJA,YAAK3d,gBAAL,gBAAgBke,YAAmBP,EAAKvO,KACxC,EAAK8M,UAAYyB,EAAKvO,GACtB,EAAK+O,yBAED,EAAK5S,MAAQ,EAAKyQ,KAAKoC,UAAW,CACpC,IAAMC,EAAW,EAAKrC,KAAKP,WAC3B4C,EAAIC,YAAcX,EAAK5lB,KACvBsmB,EAAIE,gBAAkBZ,EAAKhR,UAC3B,EAAKqP,KAAKwC,iBAAiBH,IAI3BV,EAAKhC,WAAa,EAAKpQ,KACzBkT,YAA2Bd,EAAKrC,OAAQ,CAAC,CACvCa,MAAOwB,EAAKvO,GACZuM,SAAUgC,EAAKhC,SACf+C,YAAaf,EAAK5lB,KAAK2mB,YACvBC,SAAUhB,EAAK5lB,KAAK4mB,SACpBf,MAAOD,EAAK5lB,KAAK6lB,QACf,QAQRtB,KAAKR,OAAO0B,GAAG,kBAAkB,SAACnC,GAAc,IAAD,EAC7C,GAAK,EAAKW,KAAV,CACA,IAAM2B,EAAOvC,EAAmBC,EAAIuD,SAChC,EAAK5C,KAAK9H,MAAQyJ,EAAKrC,SAAQ,YAAKtb,gBAAL,gBAAgB6e,YAAWlB,KAC1DA,EAAKhC,WAAa,EAAKpQ,KACzBuT,YAAoB,CAClB5K,IAAKyJ,EAAKrC,OACVa,MAAOwB,EAAKvO,GACZuM,SAAUgC,EAAKhC,SACf+C,YAAaf,EAAK5lB,KAAK2mB,YACvBC,SAAUhB,EAAK5lB,KAAK4mB,SACpBf,MAAOD,EAAK5lB,KAAK6lB,YAKvBtB,KAAKR,OAAO0B,GAAG,kBAAkB,SAACnC,GAAoB,IAAD,EAC9C,EAAKW,OACN,EAAKA,KAAK9H,MAAQmH,EAAIE,aAAarH,MAAK,YAAKlU,gBAAL,gBAAgB+e,YAAc1D,EAAIrC,SAC1EqC,EAAIO,SAAW,EAAKrQ,KAAKkT,YAA2BpD,EAAIE,aAAarH,IAAK,GAAI,CAACmH,EAAIrC,YAGzFsD,KAAKR,OAAO0B,GAAG,iBAAiB,SAAC1b,GAAoB,IAAD,EAClD,GAAK,EAAKka,KAAV,CACA,IAAQ9H,EAAQpS,EAAEyZ,aAAVrH,IACA8K,EAAald,EAAbkd,SAEJA,IAAa,EAAKzT,KAClB2I,IAAQ,EAAK8H,KAAK9H,MAAK,YAAKlU,gBAAL,gBAAgBif,YAAiBD,SAG9D1C,KAAKR,OAAO0B,GAAG,eAAe,SAAC1b,GAAoB,IAAD,EAC3C,EAAKka,OACMla,EAAEyZ,aAAVrH,MACI,EAAK8H,KAAK9H,MAAK,YAAKlU,gBAAL,gBAAgBkf,oBAG7C5C,KAAKR,OAAO0B,GAAG,sBAAsB,SAAC2B,GAAyB,IAAD,EACvD,EAAKnD,OACMmD,EAARjL,MACI,EAAK8H,KAAK9H,MAAK,YAAKlU,gBAAL,gBAAgBof,oBAG7C9C,KAAKR,OAAO0B,GAAG,sBAAsB,YAAsB,IAAnB6B,EAAkB,EAAlBA,YACtC,GAAK,EAAKrD,MACMqD,EAAY9D,aAApBrH,MACI,EAAK8H,KAAK9H,IAAK,CAAC,IAAD,EACjB8K,EAAmCK,EAAnCL,SAAUM,EAAyBD,EAAzBC,qBACZC,EAAa,GACnBA,EAAWP,GAAYM,EACvB,YAAKtf,gBAAL,gBAAgBwf,YAAqBD,W,+BAM7C,WAA2B,IAAD,OACpBjD,KAAKR,SACPQ,KAAKR,OAAO0B,GAAG,mBAAmB,WAChC,EAAKnD,mBAAmB,EAAKra,aAG/Bsc,KAAKR,OAAO0B,GAAG,sBAAsB,WACnC1J,cACGtI,MAAK,SAACuQ,GACS,OAAVA,EACF,EAAKD,OAAO4B,YAAY3B,GAExB,EAAKhC,aAGR3L,OAAM,WACLtS,QAAQ8F,IAAI,6BAIlB0a,KAAKR,OAAO0B,GAAG,gBAAgB,SAACnC,GAC9B,GAAK,EAAKW,KAAV,CACA,IAEmC,IAF7B2B,EAAOvC,EAAmBC,GAEhC,GAAI,EAAKW,KAAK9H,MAAQyJ,EAAKrC,OACzB,EAAKW,SAASrR,KAAKyQ,GAEDsC,EAAK5lB,KAAf6lB,MACFlT,SAAQ,YAAoB,IAAjBjK,EAAgB,EAAhBA,KAAM2c,EAAU,EAAVA,SACRS,IAATpd,IACEA,EAAKC,SAAS,WAChB,EAAKod,mBAAmBV,EAAKO,GAE3Bld,EAAKC,SAAS,cAChB,EAAKqd,mBAAmBX,EAAKO,OAInC,YAAK3d,gBAAL,gBAAgBge,YAASL,IAEzB,YAAK3d,gBAAL,gBAAgBke,YAAmBP,EAAKvO,KACxC,EAAK8M,UAAYyB,EAAKvO,GACtB,EAAK+O,6BAQT7B,KAAKR,OAAO0B,GAAG,kBAAkB,SAACnC,GAAc,IAAD,EAC7C,GAAK,EAAKW,KAAV,CACA,IAAM2B,EAAOvC,EAAmBC,EAAIuD,SAChC,EAAK5C,KAAK9H,MAAQyJ,EAAKrC,SAAQ,YAAKtb,gBAAL,gBAAgB6e,YAAWlB,SAGhErB,KAAKR,OAAO0B,GAAG,kBAAkB,SAACnC,GAAoB,IAAD,EAC9C,EAAKW,MACN,EAAKA,KAAK9H,MAAQmH,EAAIE,aAAarH,MAAK,YAAKlU,gBAAL,gBAAgB+e,YAAc1D,EAAIrC,YAGhFsD,KAAKR,OAAO0B,GAAG,iBAAiB,SAAC1b,GAAoB,IAAD,EAClD,GAAK,EAAKka,KAAV,CACA,IAAQ9H,EAAQpS,EAAEyZ,aAAVrH,IACA8K,EAAald,EAAbkd,SACJ9K,IAAQ,EAAK8H,KAAK9H,MAAK,YAAKlU,gBAAL,gBAAgBif,YAAiBD,SAG9D1C,KAAKR,OAAO0B,GAAG,eAAe,SAAC1b,GAAoB,IAAD,EAC3C,EAAKka,OACMla,EAAEyZ,aAAVrH,MACI,EAAK8H,KAAK9H,MAAK,YAAKlU,gBAAL,gBAAgBkf,oBAG7C5C,KAAKR,OAAO0B,GAAG,sBAAsB,SAAC2B,GAAyB,IAAD,EACvD,EAAKnD,OACMmD,EAARjL,MACI,EAAK8H,KAAK9H,MAAK,YAAKlU,gBAAL,gBAAgBof,oBAG7C9C,KAAKR,OAAO0B,GAAG,sBAAsB,YAAsB,IAAnB6B,EAAkB,EAAlBA,YACtC,GAAK,EAAKrD,MACMqD,EAAY9D,aAApBrH,MACI,EAAK8H,KAAK9H,IAAK,CAAC,IAAD,EACjB8K,EAAmCK,EAAnCL,SAAUM,EAAyBD,EAAzBC,qBACZC,EAAa,GACnBA,EAAWP,GAAYM,EACvB,YAAKtf,gBAAL,gBAAgBwf,YAAqBD,W,wBAM7C,SAAWE,EAAyBC,EAAmB1f,GACrD,IACM2f,EADkBF,EAAajf,QAAO,SAAC6e,GAAD,OAAkBnI,YAAmB0I,aAAkBP,OAClE/gB,KAAI,SAAC+gB,GACpC,MAAI,CAACQ,IAAoBC,KAAkBpf,SAAS2e,EAAY5e,MAAc,CAAE2O,GAAI2Q,aAAgBV,GAAcngB,IAAKwgB,EAAWjf,KAAM4e,EAAY5e,MAC7I,CAAE2O,GAAI2Q,aAAgBV,GAAc5e,KAAM4e,EAAY5e,SAEzDuf,EAAiBP,EAAajf,QAAO,SAAC6e,GAAD,MAAiB,CAACzI,IAAaiJ,IAAoBC,KAAkBpf,SAAS2e,EAAY5e,SAAOnC,KAAI,SAAC+gB,GAAD,MAAkB,CAAEjQ,GAAIiQ,EAAY9T,IAAK9K,KAAMvC,QAC/LyhB,EAAS/U,KAAT,MAAA+U,EAAQ,YAASK,EAAexf,QAAO,SAAC6e,GAAD,OAAkBnI,YAAmBmI,QACxEM,EAAS1e,OAAS,GACpB2T,YAAgB+K,GACbnU,MAAK,SAACyU,GACLjgB,EAASkgB,YAAmBD,OAE7B7R,OAAM,SAACC,GACNvS,QAAQ8F,IAAR,qCAA0CpL,KAAKC,UAAU4X,U,6BAKjE,SAAgB8Q,GAAqC,IAAD,SAClD,IAAKA,EAAO,OAAOlF,QAAQyC,OAAO,IAAI1gB,MAAM,6BAC5CsgB,KAAKN,KAAOmD,EACZ,IAAMgB,EA1YoB,SAACnE,GAC7B,IAAMR,EAASQ,EAAKP,WACpB,MAAO,CACLvH,IAAK8H,EAAK9H,IACVjQ,MAAO+X,EAAKoE,aACZX,aAAcjE,EAAO6E,WACrB/B,YAAa9C,EAAO8C,YACpBC,gBAAiB/C,EAAO+C,gBACxB9d,KAAM+a,EAAO/a,KACb2d,UAAWpC,EAAKoC,UAChBkC,YAAa,EACbC,UAAU,EACVC,iBAAgD,OAA9BxE,EAAKsD,qBAAgC,EAAItD,EAAKsD,qBAChEmB,aAAoC,OAArBzE,EAAKsC,kBAA6CT,IAArB7B,EAAKsC,YAA6B,EAAItC,EAAKsC,YAAYtF,MACnGiD,SAAU,GACVyE,QAAS,IA2XcC,CAAsBxB,GAC7C7C,KAAKJ,UAAYiE,EAAOM,aACxB,UAAAnE,KAAKtc,gBAAL,cAAAsc,KAAgBsE,YAAUT,IAE1B,IAAMU,EAAW,GAoCjB,OAnCAA,EAASjW,KAAK0R,KAAKwE,WAAWX,EAAOV,aAAcM,aAAgBI,EAAOV,aAAaxgB,MAAK,SAACogB,GAAD,OAAiBA,EAAY9T,MAAQ4U,EAAO/B,cAAa9B,KAAKtc,WAC1J6gB,EAASjW,KAAKuU,EAAM4B,yBACjBvV,MAAK,SAACwV,GAAS,IAAD,EACb,YAAKhhB,gBAAL,gBAAgBihB,YAA0B,OAARD,EAAe,EAAIA,OAEtD5S,OAAM,SAACC,GACNvS,QAAQ8F,IAAR,kDAAuDpL,KAAKC,UAAU4X,SAG1E8R,EAAOV,aAAa/U,SAAQ,SAAC9E,QACEiY,IAAzB,EAAKhJ,MAAMjP,EAAK2F,OAClB,EAAKsJ,MAAMjP,EAAK2F,KAAO,KACvBsV,EAASjW,KAAK,EAAKkR,OAAOoF,QAAQtb,EAAK2F,KACpCC,MAAK,SAAC2V,GAAO,IAAD,EACX,EAAKtM,MAAMjP,EAAK2F,KAAO4V,EACvB,YAAKnhB,gBAAL,gBAAgBohB,YAAuBD,EAAEnC,SAAUmC,EAAEE,WACrD,EAAKxM,MAAMjP,EAAK2F,KAAKiS,GAAG,WAAW,SAAC8D,GAClCA,EAAIC,cAAc7W,SAAQ,SAAC8W,GAAQ,IAAD,EACrB,uBAAPA,IAA6B,YAAKxhB,gBAAL,gBAAgBohB,YAAuBE,EAAI1gB,KAAKoe,SAAUsC,EAAI1gB,KAAKygB,qBAIzGjT,OAAM,SAACC,GACNvS,QAAQ8F,IAAR,6CAAkDgE,EAAK2F,IAAvD,iBAAmE/U,KAAKC,UAAU4X,aAI1FwS,EAASjW,KAAK0R,KAAKmF,cAChBjW,MAAK,SAACkW,GAAU,IAAD,EACVA,EAAKzgB,OAAS,IAAG,YAAKjB,gBAAL,gBAAgB2hB,YAAYD,QAElDtT,OAAM,SAACC,GACNvS,QAAQ8F,IAAR,sCAA2CpL,KAAKC,UAAU4X,SAGvD,IAAI4L,SAAQ,SAACC,GAClBD,QAAQ2H,IAAIf,GACTrV,MAAK,WAAQ0O,Y,sBAIpB,SAAS3O,GACP,OAAO,IAAI0O,SAAQ,SAACC,EAASwC,GAC3Be,YAAqBlS,GAClBC,MAAK,SAACuQ,GACL7B,EAAQ6B,MAET3N,OAAM,WACLsO,EAAO,IAAI1gB,MAAM,6C,0BAKzB,WACE,OAAO,IAAIie,SAAQ,SAACC,EAASwC,GAC3B5I,cACGtI,MAAK,SAACuQ,GACL7B,EAAQ6B,MAET3N,OAAM,WACLsO,EAAO,IAAI1gB,MAAM,6C,gCAKzB,SAAmB4iB,GAAoC,IAAD,OAC5CuB,EAAW1M,IAAOuC,WAAW3M,KAA7B8W,OACAV,EAAsBU,EAAtBV,aAAcvL,EAAQiM,EAARjM,IActB,OAbIoI,KAAK/Q,KACPsI,IAAMgO,KAAK9N,IAAY+N,wBAAyB,CAC9CrhB,KAAM,SACNgf,aAAcA,EAAajf,QAAO,SAACuhB,GAAD,OAAUA,EAAKxW,MAAQ,EAAKA,OAAKjN,KAAI,SAACyjB,GAAD,MAAW,CAChFxW,IAAKwW,EAAKxW,IACV9K,KAAMshB,EAAKthB,KACXvB,IAAK6iB,EAAK7iB,QAEZgV,MACA9E,GAAIwP,EAAQ5F,QACX5K,OAAM,eAGJ6L,QAAQC,Y,2BAGjB,SAAciC,GACZ1I,IAAOzT,SAAS0T,eAChB,IAAK,IAAIgC,EAAI,EAAGA,EAAI4G,KAAKL,SAAShb,OAAQyU,IACxC,GAAI4G,KAAKL,SAASvG,GAAGsD,QAAUmD,EAAO,CAAC,IAAD,EACpC,UAAAG,KAAKtc,gBAAL,cAAAsc,KAAgByC,YAAc5C,IAC9BG,KAAKL,SAASvG,GAAGsM,SAASxW,MAAK,eAG/B8Q,KAAKL,SAAS7D,OAAO1C,EAAG,GACxB,MAIJ,OAAOuE,QAAQC,SAAQ,K,4BAGzB,SAAe+H,GAAqC,IAAD,OAYjD,OAXAxO,IAAOzT,SAAS0T,eAChB4I,KAAKL,SAASvR,SAAQ,SAACkU,GACgB,IAAD,EAAhCqD,EAAOvhB,SAASke,EAAQ5F,SAC1B,YAAKhZ,gBAAL,gBAAgB+e,YAAcH,EAAQ5F,QACtC4F,EAAQoD,SAASxW,MAAK,mBAK1B8Q,KAAKL,SAAWK,KAAKL,SAASzb,QAAO,SAACoe,GAAD,OAAcqD,EAAOvhB,SAASke,EAAQ5F,UAEpEiB,QAAQC,SAAQ,K,gCAGzB,SAAmBsB,EAAavX,EAAexD,EAAcyhB,GAAqC,IAAD,OAC/F,OAAK5F,KAAKR,QACVrI,IAAOzT,SAAS0T,eACT,IAAIuG,SAAQ,SAACC,EAASwC,GAC3B,EAAKZ,OAAOqG,mBAAmB,CAC7B/B,aAAcnc,EACdwX,WAAW,2BACJyG,EAAgB,CACnB5D,YAAa4D,EACb3D,iBAAkB,IAAIlJ,MAAQC,WAFhB,IADR,IAKR+K,WAAY7E,EACZ/a,WAGD+K,MAAK,SAACwQ,GACLA,EAAKjS,OACFyB,MAAK,SAAC4W,GACLC,YAAuCD,EAAWlO,IAAKsH,EAAOhb,QAAO,SAAC8hB,GAAD,OAAcA,EAAS/W,MAAQ,EAAKA,OAAKjN,KAAI,SAACgkB,GAAD,OAAcA,EAAS/W,QACtIC,MAAK,WACJ0O,EAAQkI,EAAWlO,QAEpB9F,OAAM,SAACC,GAAD,OAAS4L,QAAQyC,OAAO,IAAI1gB,MAAJ,4BAA+BqS,WAEjED,OAAM,SAACC,GAAD,OAAS4L,QAAQyC,OAAO,IAAI1gB,MAAJ,yBAA4BqS,WAE9DD,OAAM,SAACC,GACNqO,EAAO,IAAI1gB,MAAJ,mDAAsDxF,KAAKC,UAAU4X,aA1BzD4L,QAAQyC,OAAO,IAAI1gB,MAAM,qC,2CA+BpD,SAA8BumB,GAA0C,IAAD,OACrE,IAAKjG,KAAKN,KAAM,OAAO/B,QAAQyC,OAAO,IAAI1gB,MAAM,4BAChDyX,IAAOzT,SAAS0T,eAChB,IAAMmN,EAAW,GAIjB,OAHA0B,EAAc7X,SAAQ,SAAC8X,GACrB3B,EAASjW,KAAK,EAAKoR,KAAKyG,IAAID,EAAUjX,SAEjC,IAAI0O,SAAQ,SAACC,GAClBD,QAAQ2H,IAAIf,GAAUrV,MAAK,WACzB,IAAM6S,EAAW,EAAKrC,KAAKP,WACnB4E,EAAehC,EAAfgC,WACRhC,EAAIgC,WAAJ,sBAAqBA,GAArB,YAAoCkC,IACpC,EAAKvG,KAAKwC,iBAAiBH,GACxB7S,MAAK,WAAO,IAAD,EACV,YAAKxL,gBAAL,gBAAgB0iB,YAAsBH,IACtCrI,e,gDAMV,SAAmCyI,GAAgC,IAAD,OAChE,IAAKrG,KAAKN,KAAM,OAAO/B,QAAQyC,OAAO,IAAI1gB,MAAM,4BAChDyX,IAAOzT,SAAS0T,eAChB,IAAMmN,EAAW,GAIjB,OAHA8B,EAAKjY,SAAQ,SAACa,GACZsV,EAASjW,KAAK,EAAKoR,KAAK4G,kBAAkBrX,OAErC,IAAI0O,SAAQ,SAACC,GAClBD,QAAQ2H,IAAIf,GAAUrV,MAAK,WACzB,IAAM6S,EAAW,EAAKrC,KAAKP,WAC3B4C,EAAIgC,WAAahC,EAAIgC,WAAW7f,QAAO,SAACgiB,GAAD,OAAgBG,EAAKjiB,SAAS8hB,EAAUjX,QAC/E,EAAKyQ,KAAKwC,iBAAiBH,GACxB7S,MAAK,WAAO,IAAD,EACV,YAAKxL,gBAAL,gBAAgB6iB,YAAmBF,IACnCzI,e,+BAMV,WAAoC,IAAD,OACjCoC,KAAKL,SAAS7D,OAAO,EAAGkE,KAAKL,SAAShb,QACtCqb,KAAKJ,WAAa,EAClBI,KAAKH,OAAS,EACd,IAAM0E,EAAW,GAIjB,OAHAxT,OAAOsI,KAAK2G,KAAKzH,OAAOnK,SAAQ,SAACa,GAAS,IAAD,EACvCsV,EAASjW,KAAT,UAAc,EAAKiK,MAAMtJ,UAAzB,aAAc,EAAiBuX,kBAE1B,IAAI7I,SAAQ,SAACC,GAClBD,QAAQ2H,IAAIf,GAAUrV,MAAK,WAAO,IAAD,EAC/B,EAAKqJ,MAAQ,GACb,EAAKmH,KAAO,KACZ,YAAKhc,gBAAL,gBAAgB6Z,eAChBK,Y,gCAKN,WAAqC,IAAD,OAClC,OAAKoC,KAAKN,MACVvI,IAAOzT,SAAS0T,eACT,IAAIuG,SAAQ,SAACC,EAASwC,GAC3B,EAAKV,KAAK+G,SACPvX,MAAK,WACJ,EAAKwX,oBACFxX,MAAK,WACJ0O,OAED9L,OAAM,SAACC,GACNqO,EAAO,IAAI1gB,MAAJ,2DAA8DxF,KAAKC,UAAU4X,YAGzFD,OAAM,SAACC,GACNqO,EAAO,IAAI1gB,MAAJ,4DAA+DxF,KAAKC,UAAU4X,aAdpE4L,QAAQyC,OAAO,IAAI1gB,MAAM,8B,+BAmBlD,SAAkBinB,GAAsC,IAAD,OACrD,OAAK3G,KAAKN,MACVvI,IAAOzT,SAAS0T,eACT,IAAIuG,SAAQ,SAACC,EAASwC,GACvBuG,EAAWhiB,OAAS,EACtB,EAAK+a,KAAKkH,QACP1X,MAAK,WACJ,EAAKwX,oBACFxX,MAAK,WACJ0O,OAED9L,OAAM,SAACC,GACNqO,EAAO,IAAI1gB,MAAJ,2DAA8DxF,KAAKC,UAAU4X,YAGzFD,OAAM,SAACC,GACNqO,EAAO,IAAI1gB,MAAJ,2DAA8DxF,KAAKC,UAAU4X,SAGxF,EAAK8U,mCAAmCF,GACrCzX,MAAK,WACJ,EAAKwQ,KAAKkH,QACP1X,MAAK,WACJ,EAAKwX,oBACFxX,MAAK,WACJ0O,OAED9L,OAAM,SAACC,GACNqO,EAAO,IAAI1gB,MAAJ,2DAA8DxF,KAAKC,UAAU4X,YAGzFD,OAAM,SAACC,GACNqO,EAAO,IAAI1gB,MAAJ,2DAA8DxF,KAAKC,UAAU4X,YAGzFD,OAAM,SAACC,GACNqO,EAAO,IAAI1gB,MAAJ,+EAAkFxF,KAAKC,UAAU4X,aAnCzF4L,QAAQyC,OAAO,IAAI1gB,MAAM,8B,6BAyClD,SAAgBkY,GAA6B,IAAD,OAC1C,OAAKoI,KAAKR,QACVrI,IAAOzT,SAAS0T,eACT,IAAIuG,SAAQ,SAACC,EAASwC,GAC3B,EAAKsG,oBACFxX,MAAK,WACJ,EAAKsQ,OAAOsH,qBAAqBlP,GAC9B1I,MAAK,SAAC2T,GACL,EAAKkE,gBAAgBlE,GAClB3T,MAAK,WAAQ0O,UAEjB9L,OAAM,SAACC,GACNqO,EAAO,IAAI1gB,MAAJ,+CAAkDxF,KAAKC,UAAU4X,YAG7ED,OAAM,SAACC,GACNqO,EAAO,IAAI1gB,MAAJ,iDAAoDxF,KAAKC,UAAU4X,aAfvD4L,QAAQyC,OAAO,IAAI1gB,MAAM,sC,oCAoBpD,WAAyC,IAAD,WAetC,OAdAyX,IAAOzT,SAAS0T,eAChB,UAAA4I,KAAKtc,gBAAL,cAAAsc,KAAgBgH,eAChB,UAAAhH,KAAKtc,gBAAL,cAAAsc,KAAgB6B,YAAuB7B,KAAKJ,YAC5CI,KAAKN,KAAKuH,qBAAqB/X,MAAK,WAC9B,EAAKD,KACPsI,IAAMgO,KAAK9N,IAAY+N,wBAAyB,CAC9CrhB,KAAM,MACN8K,IAAK,EAAKA,IACV2I,IAAK,EAAK8H,KAAK9H,MACd9F,OAAM,kBAEVA,OAAM,eAGF6L,QAAQC,Y,sBAGjB,WACOoC,KAAKN,MACVM,KAAKN,KAAKwH,SACPhY,MAAK,eACL4C,OAAM,iB,yBAGX,SAAYqV,EAAejvB,GAA6D,IAAD,OACrF,IAAK8nB,KAAKN,KAAM,OAAO/B,QAAQyC,OAAO,IAAI1gB,MAAM,4BAChDyX,IAAOzT,SAAS0T,eAChB,IAAMgQ,EAAoB,GACpBC,EAA2B,GACjC,OAAO,IAAI1J,SAAQ,SAACC,EAASwC,GAC3B,EAAKV,KAAKyF,YAAYmC,IAAWH,EAAMjvB,GACpCgX,MAAK,SAACqY,GAiByB,IAAD,EAEtB,GAlBPA,EAAU1f,MAAMuG,SAAQ,SAAC9E,GACvB,IAAM+X,EAAOvC,EAAmBxV,GAChC+d,EAAW/Y,KAAKhF,GACE+X,EAAK5lB,KAAf6lB,MACFlT,SAAQ,YAAoB,IAAjBjK,EAAgB,EAAhBA,KAAM2c,EAAU,EAAVA,SACRS,IAATpd,IACEA,EAAKC,SAAS,WAChB,EAAKod,mBAAmBV,EAAKO,GAE3Bld,EAAKC,SAAS,cAChB,EAAKqd,mBAAmBX,EAAKO,OAInC+F,EAAI9Y,KAAK+S,MAEO,YAAdnpB,IACF,IAAKynB,UAASrR,KAAd,QAAsB+Y,IAEtB,IAAK1H,UAAS6H,QAAd,QAAyBH,GAE3BzJ,EAAQwJ,MAETtV,OAAM,SAACC,GACNqO,EAAO,IAAI1gB,MAAJ,0CAA6CxF,KAAKC,UAAU4X,c,4BAK3E,SAAe8N,EAAe4H,GAAkC,IAAD,OAC7D,IAAKzH,KAAKN,KAAM,OAAO/B,QAAQyC,OAAO,IAAI1gB,MAAM,4BAChD,IAAMqf,EAAMiB,KAAKL,SAAShd,MAAK,SAAC2G,GAAD,OAAUA,EAAKoT,QAAUmD,KACxD,IAAKd,EAAK,OAAOpB,QAAQyC,OAAO,IAAI1gB,MAAM,uBAC1CyX,IAAOzT,SAAS0T,eAChB,IAAM8H,EAASH,EAAII,WACfuI,EAAexI,EAAOyI,UAExBD,EADExI,EAAOyI,UAAUha,MAAK,qBAAGia,SAAwB,EAAK3Y,OACzCiQ,EAAOyI,UAAU3lB,KAAI,SAAC2X,GACnC,OAAIA,EAAEiO,SAAW,EAAK3Y,IAChB0K,EAAEkO,MAAMzjB,SAASqjB,GACZ,CACLG,OAAQjO,EAAEiO,OACVC,MAAOlO,EAAEkO,MAAM3jB,QAAO,SAAC4jB,GAAD,OAAQA,IAAOL,MAGlC,CACLG,OAAQjO,EAAEiO,OACVC,MAAM,GAAD,mBAAMlO,EAAEkO,OAAR,CAAeJ,KAGjB9N,KAGG,sBAAOuF,EAAOyI,WAAd,CAAyB,CACnCC,OAAQ5H,KAAK/Q,IACb4Y,MAAO,CAACJ,MAGZ,IAAMM,EAAS,2BACV7I,GADU,IAEbyI,UAAWD,IAEb,OAAO,IAAI/J,SAAQ,SAACC,GAClBmB,EAAImD,iBAAiB6F,GAAW7Y,MAAK,WACnC0O,GAAQ,MACP9L,OAAM,WACP8L,GAAQ,W,wBAcd,SAAWiC,EAAeiB,GACxB,IAAKd,KAAKN,KAAM,OAAO/B,QAAQyC,OAAO,IAAI1gB,MAAM,4BAChD,IAAMqf,EAAMiB,KAAKL,SAAShd,MAAK,SAAC2G,GAAD,OAAUA,EAAKoT,QAAUmD,KACxD,IAAKd,EAAK,OAAOpB,QAAQyC,OAAO,IAAI1gB,MAAM,uBAC1CyX,IAAOzT,SAAS0T,eAChB,IAAM3b,EAAOvB,KAAK+V,MAAM8O,EAAItjB,MACtBusB,EAAO,2BACRvsB,GADQ,IAEX6lB,MAAO7lB,EAAK6lB,MAAMpd,QAAO,SAAC+jB,GAAD,OAAOA,EAAEnH,MAAQA,OAE5C,OAAO,IAAInD,SAAQ,SAACC,GAClBmB,EAAImJ,WAAWhuB,KAAKC,UAAU6tB,IAC3B9Y,MAAK,WACJ0O,GAAQ,MAET9L,OAAM,WACL8L,GAAQ,W,2BAKhB,SAAciC,EAAejX,GAC3B,IAAKoX,KAAKN,KAAM,OAAO/B,QAAQyC,OAAO,IAAI1gB,MAAM,4BAChD,IAAMqf,EAAMiB,KAAKL,SAAShd,MAAK,SAAC2G,GAAD,OAAUA,EAAKoT,QAAUmD,KACxD,OAAKd,GACL5H,IAAOzT,SAAS0T,eACT,IAAIuG,SAAQ,SAACC,GAClBmB,EAAImJ,WAAWhuB,KAAKC,UAAL,2BACVD,KAAK+V,MAAM8O,EAAItjB,OADL,IAEb2mB,YAAaxZ,MAEZsG,MAAK,WACJ0O,GAAQ,MAET9L,OAAM,WACL8L,GAAQ,UAXGD,QAAQyC,OAAO,IAAI1gB,MAAM,yB,uBAgB5C,SAAUyoB,EAAejJ,GAAgC,IAAD,SACtD,OAAKc,KAAKN,MACVvI,IAAOzT,SAAS0T,eAChB,UAAA4I,KAAKtc,gBAAL,cAAAsc,KAAgB0B,YAAS,CACvB5O,GAAIkN,KAAKH,MAETpkB,KAAM,KACNujB,OAAQgB,KAAKN,KAAK9H,IAClBsH,SACA7O,WAAY,IAAI0I,MAAQC,UACxBuG,MAAM,EACNF,SAAUW,KAAK/Q,OAEjB+Q,KAAKH,QACE,IAAIlC,SAAQ,SAACC,EAASwC,GAC3B,EAAKV,KAAK0I,YAAYD,EAAOjJ,GAC1BhQ,MAAK,SAACwV,GACL,GAAI,EAAKzV,MAAQ,EAAKyQ,KAAKoC,UAAW,CACpC,IAAMC,EAAW,EAAKrC,KAAKP,WAC3B4C,EAAIC,YAAcmG,EAClBpG,EAAIE,iBAAmB,IAAIlJ,MAAQC,UACnC,EAAK0G,KAAKwC,iBAAiBH,GAE7BnE,EAAQ8G,MAET5S,OAAM,SAACC,GACNqO,EAAO,IAAI1gB,MAAJ,2CAA8CqS,YAzBpC4L,QAAQyC,OAAO,IAAI1gB,MAAM,8B,yBA8BlD,SAAY2iB,EAAkBD,EAAqBd,EAAc+G,GAAgC,IAAD,SAC9F,IAAKrI,KAAKN,KAAM,OAAO/B,QAAQyC,OAAO,IAAI1gB,MAAM,4BAChDyX,IAAOzT,SAAS0T,eAChB,IAAM3b,EAAO,CACXqX,GAAIwV,cACJjG,WACAD,cACAiG,UACA/G,SAEIiH,EAAS,CACbzV,GAAIkN,KAAKH,MACTpkB,OACAujB,OAAQgB,KAAKN,KAAK9H,IAClBsH,OAAQ,CAAEyI,UAAW,IACrBtX,WAAY,IAAI0I,MAAQC,UACxBuG,MAAM,EACNF,SAAUW,KAAK/Q,KAcjB,OAZA,UAAA+Q,KAAKtc,gBAAL,cAAAsc,KAAgB0B,YAAS6G,IACzBjH,EAAMlT,SAAQ,YAAoB,IAAjBjK,EAAgB,EAAhBA,KAAM2c,EAAU,EAAVA,SACRS,IAATpd,IACEA,EAAKC,SAAS,WAChB,EAAKod,mBAAmBV,EAAKyH,GAE3BpkB,EAAKC,SAAS,cAChB,EAAKqd,mBAAmBX,EAAKyH,OAInCvI,KAAKH,QACEG,KAAKN,KAAK0I,YAAYluB,KAAKC,UAAUsB,GAAO8sB,EAAOrJ,Y,kNCt7BxDsJ,EAAc,eAAC1Y,EAAD,uDAAQ,GAAR,OAAuBA,EACxCoG,QAAQ,MAAO,KACf3I,MAAM,KACNC,MAAM,EAAG,GACTxL,KAAI,SAAC2X,GAAD,OAAOA,GAAKA,EAAE,GAAGrM,iBACrBG,KAAK,KAEFgb,EAAS,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,WAWhFC,EAAuB,SAACC,GAEnC,IADA,IAAIC,EAAc,EACTxP,EAAI,EAAGA,EAAIuP,EAAShkB,OAAQyU,IACnCwP,GAAgBD,EAASE,WAAWzP,GAAK,GAE3C,OAAOqP,EAAOG,EAAcH,EAAO9jB,SAKtB6jB,I,kHCCFM,EAAkC,SAAC9wB,GAC9C,IAAQoJ,EAAsCpJ,EAAtCoJ,SAAUC,EAA4BrJ,EAA5BqJ,KAAMC,EAAsBtJ,EAAtBsJ,SAAUynB,EAAY/wB,EAAZ+wB,QAC5BC,EAAcnnB,YAAmBT,GACjC6nB,EAAaT,EAAYQ,GAAaxb,MAAM,EAAGub,EAAU,EAAI,GAC7DG,EACJ,cAACC,EAAA,EAAD,CACEhe,IAAG,OAAE/J,QAAF,IAAEA,OAAF,EAAEA,EAAU8nB,OACfvoB,GAAI,CACF3F,MAAOqG,EACPtG,OAAQsG,EACRzE,SAAS,GAAD,OAAKwsB,KAAKC,MAAMhoB,EAAO,KAAvB,iBACRkJ,QAASme,EAAqBO,GAC9B1rB,MAAO,SAACjE,GAAD,OAAWA,EAAMmE,QAAQY,KAAKF,SACrC1B,WAAY,QARhB,SAWGwsB,IAGL,IAAiB,IAAb3nB,IAAwBF,GAAaA,EAAS+C,OAASmW,KAAelZ,EAAS+C,OAASof,KAAsBniB,EAAS+C,OAASqf,IAAoB,OAAO0F,EAC/J,IAAMI,EAAcjoB,EAAO,EAC3B,OACE,eAACX,EAAA,EAAD,CACEC,GAAI,CACFC,QAAS,eACTiF,SAAU,YAHd,UAMGqjB,EACD,cAAC,IAAD,CACE9hB,MAAO,CACLpM,MAAM,GAAD,OAAKsuB,EAAL,MACLvuB,OAAO,GAAD,OAAKuuB,EAAL,MACN/rB,MAAO,OACPsI,SAAU,WACV+E,MAAM,IAAD,OAAM0e,EAAc,EAApB,MACLC,OAAO,IAAD,OAAMD,EAAc,EAApB,aAcHE,EAIR,SAAC,GAIC,IAHLpoB,EAGI,EAHJA,SACAsB,EAEI,EAFJA,QACArB,EACI,EADJA,KAEMooB,EAAUL,KAAKC,MAAMhoB,EAAO,KAClC,OACE,eAACX,EAAA,EAAD,CACEC,GAAI,CACFkF,SAAU,WACV7K,MAAOqG,EACPtG,OAAQsG,GAJZ,UAOE,cAAC,EAAD,CACED,SAAUA,EACVC,KAAMA,EACNC,UAAU,IAEZ,cAACZ,EAAA,EAAD,CACEC,GAAI,CACFkF,SAAU,WACV+E,MAAM,GAAD,QAAM6e,EAAU,EAAhB,MACLF,OAAO,GAAD,QAAME,EAAU,EAAhB,MACNlf,QAAS,mBACTvP,MAAOyuB,EAAU,EACjB1uB,OAAQ0uB,EAAU,EAClB7oB,QAAS,OACTO,WAAY,SACZ2E,eAAgB,SAChB9J,aAAc,OAXlB,SAcE,cAAC,EAAD,CACEoF,SAAUsB,EACVrB,KAAMooB,EACNnoB,UAAU,EACVynB,SAAO,W,iHCvEF7T,IA1CmC,SAAC,GAAkB,IAAhBwU,EAAe,EAAfA,SAC7CnsB,EAAQosB,cAAWlsB,QAAQU,QAAQF,KACzC,OACE,eAAC,IAAD,CACE0C,GAAE,aACAC,QAAS,OACT5F,MAAO,OACPD,OAAQ,OACRoG,WAAY,SACZlC,gBAAkByqB,EAAyDE,KAA9C,SAACtwB,GAAD,OAAWA,EAAMmE,QAAQG,WAAWC,SACjEgD,cAAe,SACfiF,eAAgB,SAChBpK,OAAQ,KACHguB,EAIA,GAJY,CACf7gB,KAAM,EACNhD,SAAU,QACViD,IAAK,IAbX,UAiBE,qBACEsC,IAAI,OACJD,IAAI,eACJ/D,MAAO,CACLpM,MAAO,QAET+L,UAAU,iBAEZ,cAAC,IAAD,CACE5C,KAAK,YACLpJ,OAAO,KACPC,MAAM,KACNuC,MAAOA,S,qnBC9BfssB,UAAQC,UAAUC,KAsFlB,IAAM5O,EAAsB,CAC1BxO,iBAAiB,EACjB0J,eAAe,EACf/R,KAAM,MAGF0lB,EAAoE,CACxEC,WAAY,SAAC3pB,EAAc5C,GACzB,MAAkCA,EAAOse,QAAjCrP,EAAR,EAAQA,gBAAiBrI,EAAzB,EAAyBA,KAEzB,OAAO,2BACFhE,GADL,IAEEqM,kBACA0J,eAAe,EACf/R,UAGJ4lB,MAAO,SAAC5pB,EAAc5C,GACpB,IAAQ4G,EAAS5G,EAAOse,QAAhB1X,KAER,OAAO,2BACFhE,GADL,IAEEqM,iBAAiB,EACjBrI,UAGJ6lB,YAAa,SAAC7pB,EAAc5C,GAC1B,IAAQ4G,EAAS5G,EAAOse,QAAhB1X,KAER,OAAO,2BACFhE,GADL,IAEEqM,iBAAiB,EACjBrI,UAGJ8lB,OAAQ,SAAC9pB,GAAD,mBAAC,eACJA,GADG,IAENqM,iBAAiB,EACjBrI,KAAM,QAER+lB,SAAU,SAAC/pB,GAAD,sBAA+BA,IACzCgqB,YAAa,SAAChqB,GAAD,sBAA+BA,IAC5CiqB,YAAa,SAACjqB,GAAD,sBAA+BA,IAC5CkqB,kBAAmB,SAAClqB,GAAD,sBAA+BA,IAClDmqB,eAAgB,SAACnqB,GAAD,sBAA+BA,KAG3C4c,EAAU,SAAC5c,EAAc5C,GAAf,OACdssB,EAAStsB,EAAOyG,MAAQ6lB,EAAStsB,EAAOyG,MAAM7D,EAAO5C,GAAU4C,GAG3DoqB,EAAclxB,wBAAa,2BAC5B2hB,GAD4B,IAE/BwP,SAAU,UACVC,MAAO,kBAAMjN,QAAQC,WACrBiN,YAAa,kBAAMlN,QAAQC,WAC3Bta,OAAQ,kBAAMqa,QAAQC,WACtBkN,SAAU,kBAAMnN,QAAQC,WACxBmN,WAAY,kBAAMpN,QAAQC,WAC1BoN,WAAY,kBAAMrN,QAAQC,WAC1BqN,iBAAkB,kBAAMtN,QAAQC,WAChCsN,cAAe,kBAAMvN,QAAQC,WAC7B7I,UAAW,kBAAM4I,QAAQC,cAGduN,EAAsC,SAACnzB,GAClD,IAAQC,EAAaD,EAAbC,SACR,EAA0BmzB,qBAAWlO,EAAS/B,GAA9C,mBAAO7a,EAAP,KAAcoD,EAAd,KAEAvL,qBAAU,YACQ,uCAAG,kCAAAiK,EAAA,+EAEIipB,IAAKC,2BAFT,OAEThnB,EAFS,YAIAid,KADXgK,EAHW,OAGFjnB,QAHE,IAGFA,GAHE,UAGFA,EAAM6a,kBAHJ,aAGF,EAAkBqM,OACLD,EAASjnB,EAAKmnB,UACxC/nB,EAAS,CACPS,KAAM,aACN6X,QAAS,CACPrP,iBAAiB,EACjBrI,KAAM,CACJwO,GAAIyY,EACJrC,OAAQ,GACRwC,MAAK,OAAEpnB,QAAF,IAAEA,GAAF,UAAEA,EAAM6a,kBAAR,aAAE,EAAkBuM,MACzB5b,KAAM,OAbG,gDAkBfpM,EAAS,CACPS,KAAM,aACN6X,QAAS,CACPrP,iBAAiB,EACjBrI,KAAM,QAtBK,yDAAH,qDA4BhBqnB,KACC,IAEH,IAAMf,EAAK,uCAAG,WAAOc,EAAeE,GAAtB,eAAAxpB,EAAA,sEACOipB,IAAKQ,OAAOH,EAAOE,GAD1B,YACNtnB,EADM,QAEHwnB,cAFG,uBAGVtsB,QAAQzB,MAAR,8CAAqDuG,EAAKwnB,cAA1D,mDAHU,0BAMZpoB,EAAS,CACPS,KAAM,QACN6X,QAAS,CACP1X,KAAM,CACJwO,GAAIxO,EAAK6a,WAAWqM,IACpBtC,OAAQ,GACRwC,MAAOpnB,EAAK6a,WAAWuM,MACvB5b,KAAMjO,YAAmB,CACvBkqB,UAAWznB,EAAK6a,WAAW,oBAC3B6M,WAAY1nB,EAAK6a,WAAW,4BAC5B8M,SAAU3nB,EAAK6a,WAAW,yBAhBtB,2CAAH,wDAuBLpK,EAAS,uCAAG,gCAAA3S,EAAA,kEAEN8pB,EAAgB/U,IAAOuC,WAAWpV,KAAlC4nB,YACAC,EAAiBD,EAAjBC,aACFC,EAAUhD,KAAKiD,OAAM,IAAItT,MAAOC,UAAY,OAC9CmT,EAAuC,GAAxBG,IAA6BF,GALlC,wBAMZ3O,cANY,SAON4N,IAAKkB,UAPC,OAQZ7oB,EAAS,CACPS,KAAM,aACN6X,QAAS,CACPrP,iBAAiB,EACjBrI,KAAM,QAZE,yCAeD+mB,IAAKmB,iBAfJ,iEAiBd/O,cAjBc,UAkBR4N,IAAKkB,UAlBG,QAmBd7oB,EAAS,CACPS,KAAM,aACN6X,QAAS,CACPrP,iBAAiB,EACjBrI,KAAM,QAvBI,0DAAH,qDA6BTumB,EAAW,uCAAG,WAAO4B,GAAP,2BAAArqB,EAAA,6DAAyBsqB,EAAzB,+BAAyC,KAAzC,SACZrB,IAAKsB,gBAAL,aACJC,eAAgBH,KACVC,GAAS,CAAEG,YAAaH,KAHd,2CAAH,sDAOXppB,EAAM,uCAAG,sBAAAlB,EAAA,6DACbqb,cADa,SAEP4N,IAAKkB,UAFE,OAGb7oB,EAAS,CACPS,KAAM,WAJK,2CAAH,qDAQN2mB,EAAQ,uCAAG,WAAOY,EAAeoB,EAAaC,EAAeC,EAAeC,EAAeC,EAAelmB,GAA/F,SAAA5E,EAAA,sEACTipB,IAAK8B,OAAO,CAChB1B,SAAUC,EACVE,SAAUkB,EACV3N,WAAY,CACV,eAAgB+N,EAChB,mBAAoBH,EACpB,kBAAmBE,EACnB,2BAA4BD,EAC5B,oBAAqBhmB,KATV,OAYftD,EAAS,CACPS,KAAM,aAbO,2CAAH,kEAiBR4mB,EAAU,uCAAG,WAAOU,EAAkB9gB,GAAzB,SAAAvI,EAAA,sEACXipB,IAAK+B,cAAc3B,EAAU9gB,GADlB,OAEjBjH,EAAS,CACPS,KAAM,gBAHS,2CAAH,wDAOV6mB,EAAU,uCAAG,WAAOS,GAAP,SAAArpB,EAAA,sEACXipB,IAAKgC,aAAa5B,GADP,OAEjB/nB,EAAS,CACPS,KAAM,gBAHS,2CAAH,sDAOV8mB,EAAgB,uCAAG,WAAOQ,GAAP,SAAArpB,EAAA,sEACjBipB,IAAKiC,eAAe7B,GADH,OAEvB/nB,EAAS,CACPS,KAAM,sBAHe,2CAAH,sDAOhB+mB,EAAa,uCAAG,WACpBO,EACA9gB,EACA4iB,GAHoB,SAAAnrB,EAAA,sEAKdipB,IAAKmC,qBAAqB/B,EAAU9gB,EAAM4iB,GAL5B,OAMpB7pB,EAAS,CACPS,KAAM,mBAPY,2CAAH,0DAWnB,OACE,cAACumB,EAAY5wB,SAAb,CACExB,MAAK,2BACAgI,GADA,IAEHqqB,SAAU,UACVC,QACAC,cACAvnB,SACAwnB,WACAC,aACAC,aACAC,mBACAC,gBACAnW,cAZJ,SAeG9c,KASQyyB,O,iCCnVf,sBAQejN,IALC,WACdD,IAAQC,UACRgQ,gB,iCCLF,+CAGIC,EAAiB,GAERD,EAAY,WACvBC,EAAQ5R,OAAO,EAAG4R,EAAQ/oB,SAyBbyZ,IAtBM,SAAfA,EAAgBuP,EAAkBjqB,GAAqD,IAAC,IAA5CkqB,IAA2C,4EAAfC,EAAe,iCAAfA,EAAe,kBAC3F,IAAgB,IAAZD,EAAkB,CACpB,IAAmC,IAA/BF,EAAQtpB,SAASV,GAAoB,OACzCgqB,EAAQpf,KAAK5K,GAKfoqB,YAAKH,GACFze,MAAK,WAKJxL,EAAQ,WAAR,EAAYmqB,GACT3e,MAAK,kBAAMkP,EAAY,WAAZ,GAAauP,EAAUjqB,GAAU,GAAjC,OAA2CmqB,OACtD/b,OAAM,WACL4b,EAAUA,EAAQxpB,QAAO,SAAC6pB,GAAD,OAASA,IAAQrqB,a,qLCTrCsqB,EATKC,YAAgB,CAClClhB,KAAMmhB,IACN3tB,aAAc4tB,IACd7pB,KAAM8pB,IACNC,QAASC,IACTC,IAAKC,IACLC,SAAUC,MCIGC,EAlBW,SAACC,GAAD,OAAY,SAACC,GAAD,OAAU,SAACnxB,GAC/C,IAAMoxB,EAASD,EAAKnxB,GAEpB,GAAIA,EAAOyG,KAAK0J,WAAW,eAAiBnQ,EAAOyG,KAAK0J,WAAW,SAAU,CAC3E,IACQgW,EADM+K,EAAOlV,WACI3M,KAAjB8W,OACFnc,EAAOtP,SAAS8Z,eAAe,WAC/B6c,EAAUrnB,EAAKsnB,aAAa,SACxB,OAANnL,QAAM,IAANA,OAAA,EAAAA,EAAQG,aAAc,EACxBtc,EAAKunB,aAAa,OAAQF,EAAQ7Y,QAAQ,cAAe,6BAEzDxO,EAAKunB,aAAa,OAAQF,EAAQ7Y,QAAQ,2BAA4B,gBAI1E,OAAO4Y,KCPHtY,EAAQ0Y,YAAe,CAC3BhS,QAAS8Q,EACTmB,SAA2D,SAAjDC,mIAAYC,iCACtBC,WAAY,SAACC,GAAD,OAA0BA,EAAqB,CACzDC,kBAAmB,CACjBC,eAAgB,CAAC,qBAElBC,OAAO,CAACf,OASAtuB,EAA+CsvB,IAE/ChsB,EAAc,kBAAMisB,eAElBpZ,O,gIC5BFuK,EAAQ,uCAAG,WAAO9J,GAAP,iBAAA7U,EAAA,sEACJytB,MAAM5Y,GADF,cAChB9H,EADgB,gBAEJA,EAAI2gB,cAFA,cAEhBC,EAFgB,yBAGfC,IAAIC,gBAAgB,IAAIC,KAAK,CAACH,MAHf,2CAAH,sDAMRI,EAAU,uCAAG,WAAOC,EAAmBnZ,GAA1B,SAAA7U,EAAA,+EAAwDytB,MAAM5Y,EAAK,CAC3FoZ,OAAQ,MACRC,QAAS,CACP,+BAAgC,IAChC,8BAA+B,IAC/B,eAAgB,IAElB70B,KAAM20B,IAELlhB,MAAK,SAACqhB,GAAD,OAAa5S,QAAQC,QAAQ2S,OATX,2CAAH,yD,wXCAXtd,E,kDAAAA,O,eAAAA,I,qBAAAA,I,0BAAAA,M,KA2BZ,IAAMkI,EAA0B,CAC9B/Z,SAAU,KACV8M,WAAY,GACZ8E,cAAeC,EAAcyB,KAC7B8b,kBAAmB,KACnBC,2BAA4B,KAC5BC,WAAY,KACZ1sB,YAAa,GACb2sB,kBAAkB,EAClBC,gBAAgB,EAChBC,eAAgB,KAChBjnB,aAAa,EACbgD,WAAY,KACZsf,YAAa,CAAE4E,MAAO,EAAG3E,aAAc,IAGnC3e,EAAQ0N,YAAY,CACxBpL,KAAM,OACNqL,eACAS,SAAU,CACRC,WADQ,SACGvb,GACTA,EAAMc,SAAW,KACjBd,EAAM4N,WAAa,GACnB5N,EAAM0S,cAAgBC,EAAcyB,KACpCpU,EAAMkwB,kBAAoB,KAC1BlwB,EAAMmwB,2BAA6B,KACnCnwB,EAAMowB,WAAa,KACnBpwB,EAAM0D,YAAY8X,OAAO,EAAGxb,EAAM0D,YAAYW,QAC9CrE,EAAMqwB,kBAAmB,EACzBrwB,EAAMswB,gBAAiB,EACvBtwB,EAAMuwB,eAAiB,KACvBvwB,EAAMsJ,aAAc,EACpBtJ,EAAMsM,WAAa,KACnBtM,EAAM4rB,YAAc,CAAE4E,MAAO,EAAG3E,aAAc,IAEhD/U,gBAhBQ,SAgBQ9W,GACdA,EAAM4rB,YAAY4E,OAAS,EAC3BxwB,EAAM4rB,YAAYC,aAAe/C,KAAKiD,OAAM,IAAItT,MAAOC,UAAY,MAErEiF,oBApBQ,SAoBY3d,EAAkB5C,GACpC4C,EAAMqwB,iBAAmBjzB,EAAOse,SAElC+U,WAvBQ,SAuBGzwB,EAAkB5C,GAC3B,IAAM4G,EAAO5G,EAAOse,QACpBzC,YAAQjV,EAAMhE,EAAMc,WAEtB4vB,QA3BQ,SA2BA1wB,EAAkB5C,GACxB,IAAM4G,EAAO5G,EAAOse,QACpB1b,EAAMc,SAAWkD,GAEnB2sB,UA/BQ,SA+BE3wB,EAAiB5C,GACzB,IAAMwrB,EAASxrB,EAAOse,QACtB1b,EAAMc,SAAS8nB,OAASA,GAE1B5K,iBAnCQ,SAmCShe,EAAkB5C,GACjC4C,EAAM0S,cAAgBtV,EAAOse,SAE/BkV,qBAtCQ,SAsCa5wB,EAAkB5C,GACrC4C,EAAMkwB,kBAAoB9yB,EAAOse,SAEnCmV,sBAzCQ,SAyCc7wB,EAAkB5C,GACtC4C,EAAMc,SAASgwB,iBAAmB1zB,EAAOse,SAE3CqV,8BA5CQ,SA4CsB/wB,EAAkB5C,GAC9C4C,EAAMmwB,2BAA6B/yB,EAAOse,SAE5CsV,cA/CQ,SA+CMhxB,EAAkB5C,GAC9B4C,EAAMowB,WAAahzB,EAAOse,SAE5BuV,cAlDQ,SAkDMjxB,EAAkB5C,GAC9B4C,EAAM4N,WAAaxQ,EAAOse,SAE5BwV,eArDQ,SAqDOlxB,EAAkB5C,GAC/B4C,EAAM0D,YAActG,EAAOse,QAC3B1b,EAAMqwB,kBAAmB,GAE3Bc,cAzDQ,SAyDMnxB,EAAkB5C,GAC9B,IAAMg0B,EAAgBh0B,EAAOse,QAC7B1b,EAAM0D,YAAYsK,KAAKojB,IAEzBC,iBA7DQ,SA6DSrxB,EAAkB5C,GACjC,IAAMg0B,EAAgBh0B,EAAOse,QACvB4V,EAActxB,EAAM0D,YAAYa,WAAU,SAACgtB,GAAD,OAAgBA,EAAW7qB,MAAQ0qB,EAAc1qB,OAC7F4qB,GAAe,GAAGtxB,EAAM0D,YAAY8X,OAAO8V,EAAa,EAAGF,IAEjEI,mBAlEQ,SAkEWxxB,EAAkB5C,GACnC,MAAmCA,EAAOse,QAAlChV,EAAR,EAAQA,IAAKe,EAAb,EAAaA,OAAQuI,EAArB,EAAqBA,UACf1B,EAAYtO,EAAM0D,YAAYrB,MAAK,SAACH,GAAD,OAAYA,EAAOwE,MAAQA,KAChE4H,IACFA,EAAU7G,OAASA,EACnB6G,EAAU0B,UAAYA,IAG1ByhB,iBA1EQ,SA0ESzxB,EAAkB5C,GACjC,IAAMs0B,EAAWt0B,EAAOse,QACxB1b,EAAM0D,YAAc1D,EAAM0D,YAAYE,QAAO,SAAC2tB,GAAD,OAAgBA,EAAW7qB,MAAQgrB,MAElFC,kBA9EQ,SA8EU3xB,EAAkB5C,GAClC4C,EAAMswB,eAAiBlzB,EAAOse,SAEhCkW,kBAjFQ,SAiFU5xB,EAAkB5C,GAClC4C,EAAMuwB,eAAiBnzB,EAAOse,SAEhCmW,cApFQ,SAoFM7xB,EAAkB5C,GAC9B4C,EAAMsM,WAAalP,EAAOse,SAE5BoW,eAvFQ,SAuFO9xB,EAAkB5C,GAC/B4C,EAAMsJ,YAAclM,EAAOse,YAKlBkB,EAAY1P,EAAZ0P,QAEFiB,EAAiB,kBAAgB,SAACza,GAC7CA,EAAS8J,EAAM4P,QAAQvB,gBAGZzE,EAAkB,yDAAiB,WAAO1T,GAAP,SAAAtB,EAAA,sDAC9CsB,EAAS8J,EAAM4P,QAAQhG,mBADuB,2CAAjB,uDAIlB6G,EAAsB,SAACZ,GAAD,8CAAoC,WAAO3Z,GAAP,SAAAtB,EAAA,sDACrEsB,EAAS8J,EAAM4P,QAAQa,oBAAoBZ,IAD0B,2CAApC,uDAItBoB,EAAc,SAAC0J,GAAD,8CAA2B,WAAOzkB,GAAP,SAAAtB,EAAA,sDACpDsB,EAAS8J,EAAM4P,QAAQ4T,QAAQ7I,IADqB,2CAA3B,uDAyBd7J,EAAmB,SAACvW,GAAD,8CAAsC,WAAOrE,GAAP,SAAAtB,EAAA,sDACpEsB,EAAS8J,EAAM4P,QAAQkB,iBAAiBvW,IAD4B,2CAAtC,uDAQnBupB,EAAgB,SAAC1Y,GAAD,8CAA0B,WAAOlV,GAAP,SAAAtB,EAAA,sDACrDsB,EAAS8J,EAAM4P,QAAQkU,cAAc1Y,IADgB,2CAA1B,uDAoChBuZ,EAAgB,SAACE,GAAD,8CAAgC,WAAO3uB,GAAP,SAAAtB,EAAA,sDAC3DsB,EAAS8J,EAAM4P,QAAQ+U,cAAcE,IADsB,2CAAhC,uDAIhBD,EAAiB,SAAChvB,GAAD,8CAAiC,WAAOM,GAAP,SAAAtB,EAAA,sDAC7DsB,EAAS8J,EAAM4P,QAAQgV,eAAehvB,IADuB,2CAAjC,wD,igCC9NxBkvB,EAAmB,SAAClwB,EAAuBmwB,GAG/C,OAFmB,IAAIxZ,KAAK3W,EAAEiO,WAAW2I,UACtB,IAAID,KAAKwZ,EAAEliB,WAAW2I,WASrCwZ,EAAgB,CACpB5a,IAAK,GACLjQ,MAAO,GACPqa,YAAa,GACbC,iBAAkB,EAClBtC,SAAU,GACV8S,UAAU,EACVxO,UAAU,EACVG,QAAS,GACTF,kBAAmB,EACnBC,cAAe,EACfrC,UAAW,GACXqB,aAAc,GACdhf,KAAMuuB,IACN1O,YAAa,GAGT2O,EAAiB,CACrB7f,GAAI,GACJ8E,IAAK,GACLjQ,MAAO,GACPirB,YAAa,GACbC,YAAa,GACbC,MAAO,GACP3uB,KAAMuuB,IACN3qB,OAAQ,EACRgrB,QAAS,CAAEjgB,GAAI,GAAI3O,KAAMsW,KACzBpK,UAAW,GACXC,UAAW,IAGP0iB,EAAmB,CACvB7f,OAAQ,SACRH,cAAeC,IAAcyB,MAczByG,EAA0B,CAC9BrO,aAAckmB,EACdC,eAAgB,KAChBC,eAAgB,KAChBrP,OAAQ2O,EACRW,QAASR,EACTS,oBAAqB,GACrBC,gBAAiB,KACjBpQ,WAAY,IAGRzV,EAAQ0N,YAAY,CACxBpL,KAAM,OACNqL,eACAS,SAAU,CACR0X,SADQ,SACChzB,GACPA,EAAMujB,OAAS2O,EACflyB,EAAM6yB,QAAUR,EAChBryB,EAAM2yB,eAAiB,KACvB3yB,EAAM4yB,eAAiB,KACvB5yB,EAAM8yB,oBAAoBtX,OAAO,EAAGxb,EAAM8yB,oBAAoBzuB,QAC9DrE,EAAM+yB,gBAAkB,KACxB/yB,EAAM2iB,WAAa,IAErBpR,kBAVQ,SAUUvR,GAChBA,EAAMwM,aAAekmB,GAEvBO,gBAbQ,SAaQjzB,EAAkB5C,GAChC4C,EAAMwM,aAAepP,EAAOse,SAE9BwX,eAhBQ,SAgBOlzB,EAAkB5C,GAC/B,MAA0CA,EAAOse,QAAzCmX,EAAR,EAAQA,QAASpP,EAAjB,EAAiBA,WAAY0P,EAA7B,EAA6BA,SAC7BnzB,EAAM6yB,QAAUA,EAChB7yB,EAAM8yB,oBAAN,YAAgCrP,GAChCzjB,EAAM8yB,oBAAoB3hB,KAAK6gB,GAC/BhyB,EAAM+yB,gBAAkBI,GAE1BC,cAvBQ,SAuBMpzB,EAAkB5C,GAC9B,IAAMi2B,EAAUj2B,EAAOse,QACvBjL,OAAOsI,KAAKsa,GAASvlB,SAAQ,SAAC5V,GAC5B8H,EAAM6yB,QAAQ36B,GAAOm7B,EAAQn7B,OAGjCo7B,uBA7BQ,SA6BetzB,EAAkB5C,GACvC4C,EAAM8yB,oBAAN,YAAgC11B,EAAOse,SACvC1b,EAAM8yB,oBAAoB3hB,KAAK6gB,IAEjChO,UAjCQ,SAiCEhkB,EAAkB5C,GAC1B4C,EAAMujB,OAASnmB,EAAOse,SAExB8G,aApCQ,SAoCKxiB,GACXA,EAAMujB,OAAO4O,UAAW,GAE1BpN,YAvCQ,SAuCI/kB,EAAkB5C,GAC5B,IAAM0nB,EAAO1nB,EAAOse,QACpB,KAAIoJ,EAAKzgB,OAAS,GAAlB,CACA,IAAQgb,EAAarf,EAAMujB,OAAnBlE,SACJA,EAAShb,OAAS,GAAKgb,EAASA,EAAShb,OAAS,GAAGmO,GAAKsS,EAAK,GAAGtS,GAAI6M,EAASrR,KAAT,MAAAqR,EAAQ,YAASyF,IACtFzF,EAAS6H,QAAT,MAAA7H,EAAQ,YAAYyF,IACrBzF,EAASA,EAAShb,OAAS,GAAGmO,KAAOsS,EAAKA,EAAKzgB,OAAS,GAAGmO,KAC7DxS,EAAMujB,OAAO7B,YAAc9nB,KAAKC,UAAUirB,EAAKA,EAAKzgB,OAAS,GAAGlJ,MAChE6E,EAAMujB,OAAO5B,gBAAkBmD,EAAKA,EAAKzgB,OAAS,GAAG0L,aAGzDwjB,kBAlDQ,SAkDUvzB,EAAkB5C,GAClC4C,EAAM2yB,eAAiBv1B,EAAOse,SAEhC8X,kBArDQ,SAqDUxzB,EAAkB5C,GAClC4C,EAAM4yB,eAAiBx1B,EAAOse,SAEhC2I,kBAxDQ,SAwDUrkB,EAAkB5C,GAClC4C,EAAMujB,OAAOG,YAActmB,EAAOse,SAEpC8I,uBA3DQ,SA2DexkB,EAAkB5C,GACvC,IAAMjC,EAAOiC,EAAOse,QACpB1b,EAAMujB,OAAOV,aAAa/U,SAAQ,SAAC5I,GAC7BA,EAAEyJ,MAAQxT,EAAKwT,MAAKzJ,EAAEuf,SAAWtpB,EAAKspB,cAG9CrD,SAjEQ,SAiECphB,EAAkB5C,GACzB,IAAMqhB,EAAMrhB,EAAOse,QACnB1b,EAAMujB,OAAOlE,SAASrR,KAAKyQ,GAC3Bze,EAAMujB,OAAO7B,YAAc9nB,KAAKC,UAAU4kB,EAAItjB,MAC9C6E,EAAMujB,OAAO5B,gBAAkBlD,EAAI1O,WAErCsR,QAvEQ,SAuEArhB,EAAkB5C,GAGxB,IAFA,IAAMqhB,EAAMrhB,EAAOse,QACX2D,EAAarf,EAAMujB,OAAnBlE,SACCvG,EAAIuG,EAAShb,OAAS,EAAGyU,GAAK,EAAGA,IAAK,CAC7C,IAAM9P,EAAOqW,EAASvG,GACtB,GAAI9P,EAAKwJ,GAAK,GAAKiM,EAAItjB,KAAKqX,KAAOxJ,EAAK7N,KAAKqX,GAAI,CAC/CxJ,EAAKiW,MAAO,EACZjW,EAAKwJ,GAAKiM,EAAIjM,GACd,SAINsT,sBAnFQ,SAmFc9lB,EAAkB5C,GAAmC,IAAD,GACxE,EAAA4C,EAAMujB,OAAOV,cAAa7U,KAA1B,oBAAkC5Q,EAAOse,WAE3CiF,gBAtFQ,SAsFQ3gB,EAAkB5C,GAChC,MAA0BA,EAAOse,QAAzB+C,EAAR,EAAQA,IAAK+B,EAAb,EAAaA,IAAK7J,EAAlB,EAAkBA,IAEZ8c,EADezzB,EAAMujB,OAAnBlE,SACWhd,MAAK,SAAC2G,GAAD,OAAUA,EAAK7N,KAAKqX,KAAOiM,EAAItjB,KAAKqX,MACtDkhB,EAAUlb,YAASib,EAAEt4B,MAC3Bs4B,EAAEt4B,KAAF,2BACKu4B,GADL,IAEE1S,MAAO0S,EAAQ1S,MAAMtf,KAAI,SAACimB,GAAD,mBAAC,eACrBA,GACCA,EAAEnH,MAAQA,GAAO,CACnBmT,SAAUhd,UAKlBsL,WArGQ,SAqGGjiB,EAAkB5C,GAC3B,IAAMqhB,EAAMrhB,EAAOse,QAEb+X,EADezzB,EAAMujB,OAAnBlE,SACWhd,MAAK,SAAC2G,GAAD,OAAUA,EAAKwJ,KAAOiM,EAAIjM,MAClDihB,EAAEt4B,KAAOsjB,EAAItjB,KACbs4B,EAAE7U,OAASH,EAAIG,OACf6U,EAAEJ,SAAU,GAEd3M,iBA7GQ,SA6GS1mB,GACfA,EAAMujB,OAAOG,YAAc,GAE7BvB,cAhHQ,SAgHMniB,EAAkB5C,GAG9B,IAFA,IAAMmiB,EAAQniB,EAAOse,QACb2D,EAAarf,EAAMujB,OAAnBlE,SACCvG,EAAI,EAAGA,EAAIuG,EAAShb,OAAQyU,IACnC,GAAIuG,EAASvG,GAAGtG,KAAO+M,EAAO,CAC5BF,EAAS7D,OAAO1C,EAAG,GACnB,QAINyI,uBA1HQ,SA0HevhB,EAAkB5C,GACvC4C,EAAMujB,OAAOK,iBAAmBxmB,EAAOse,SAEzC4F,mBA7HQ,SA6HWthB,EAAkB5C,GACnC4C,EAAMujB,OAAOM,aAAezmB,EAAOse,SAErC2G,iBAhIQ,SAgISriB,EAAkB5C,GACjC,IAAMuR,EAAMvR,EAAOse,QACb+G,EAAcziB,EAAMujB,OAAOV,aAAaxgB,MAAK,SAAC2G,GAAD,OAAUA,EAAK2F,MAAQA,KACtE8T,IACFziB,EAAMujB,OAAOO,QAAUX,aAAgBV,GACvCziB,EAAMujB,OAAOI,UAAW,IAG5BrB,eAxIQ,SAwIOtiB,GACbA,EAAMujB,OAAOI,UAAW,GAE1BsC,mBA3IQ,SA2IWjmB,EAAkB5C,GACnC,IAAM2oB,EAAO3oB,EAAOse,QACpB1b,EAAMujB,OAAOV,aAAe7iB,EAAMujB,OAAOV,aAAajf,QAAO,SAAC6e,GAAD,OAAmBsD,EAAKjiB,SAAS2e,EAAY9T,SAE5GiU,qBA/IQ,SA+Ia5iB,EAAkB5C,GACrC,IAAM2oB,EAAO3oB,EAAOse,QACpBjL,OAAOsI,KAAKgN,GAAMjY,SAAQ,SAACa,GACzB3O,EAAM2iB,WAAWhU,GAAOoX,EAAKpX,UAMtBiO,EAAY1P,EAAZ0P,QAEFrL,EAAoB,yDAAgB,WAAOnO,GAAP,SAAAtB,EAAA,sDAC/CsB,EAAS8J,EAAM4P,QAAQvL,qBADwB,2CAAhB,uDAIpB0hB,EAAkB,SAACW,GAAD,8CAAwC,WAAOxwB,GAAP,SAAAtB,EAAA,sDACrEsB,EAAS8J,EAAM4P,QAAQmW,gBAAgBW,IAD8B,2CAAxC,uDAIlBV,EAAiB,SAACL,EAAkBpP,EAAkC0P,GAArD,8CAAoF,WAAO/vB,GAAP,SAAAtB,EAAA,sDAChHsB,EAAS8J,EAAM4P,QAAQoW,eAAe,CAAEL,UAASpP,aAAY0P,cADmD,2CAApF,uDAIjBC,EAAgB,SAACP,GAAD,8CAA4B,WAAOzvB,GAAP,SAAAtB,EAAA,sDACvDsB,EAAS8J,EAAM4P,QAAQsW,cAAcP,IADkB,2CAA5B,uDAIhBS,EAAyB,SAAC7P,GAAD,8CAAgD,WAAOrgB,GAAP,SAAAtB,EAAA,sDACpFsB,EAAS8J,EAAM4P,QAAQwW,uBAAuB7P,IADsC,2CAAhD,uDAIzBO,EAAY,SAACT,GAAD,8CAA8B,WAAOngB,GAAP,SAAAtB,EAAA,sDACrDsB,EAAS8J,EAAM4P,QAAQkH,UAAUT,IADoB,2CAA9B,uDAIZf,EAAe,yDAAgB,WAAOpf,GAAP,SAAAtB,EAAA,sDAC1CsB,EAAS8J,EAAM4P,QAAQ0F,gBADmB,2CAAhB,uDAIfpB,EAAW,SAAC3C,GAAD,8CAA4B,WAAOrb,GAAP,SAAAtB,EAAA,sDAClDsB,EAAS8J,EAAM4P,QAAQsE,SAAS3C,IADkB,2CAA5B,uDAIX4C,EAAU,SAAC5C,GAAD,8CAA4B,WAAOrb,GAAP,SAAAtB,EAAA,sDACjDsB,EAAS8J,EAAM4P,QAAQuE,QAAQ5C,IADkB,2CAA5B,uDAIVwD,EAAa,SAACxD,GAAD,8CAA4B,WAAOrb,GAAP,SAAAtB,EAAA,sDACpDsB,EAAS8J,EAAM4P,QAAQmF,WAAWxD,IADkB,2CAA5B,uDAIbsG,EAAc,SAAC1F,GAAD,8CAAmC,WAAOjc,GAAP,SAAAtB,EAAA,sDAC5DsB,EAAS8J,EAAM4P,QAAQiI,YAAY1F,IADyB,2CAAnC,uDAIdgF,EAAoB,SAACwP,GAAD,8CAA2B,WAAOzwB,GAAP,SAAAtB,EAAA,sDAC1DsB,EAAS8J,EAAM4P,QAAQuH,kBAAkBwP,IADiB,2CAA3B,uDAIpBvS,EAAqB,SAACuS,GAAD,8CAA2B,WAAOzwB,GAAP,SAAAtB,EAAA,sDAC3DsB,EAAS8J,EAAM4P,QAAQwE,mBAAmBuS,IADiB,2CAA3B,uDAGrBtS,EAAyB,SAACsS,GAAD,8CAA2B,WAAOzwB,GAAP,SAAAtB,EAAA,sDAC/DsB,EAAS8J,EAAM4P,QAAQyE,uBAAuBsS,IADiB,2CAA3B,uDAGzBnN,EAAmB,yDAAgB,WAAOtjB,GAAP,SAAAtB,EAAA,sDAC9CsB,EAAS8J,EAAM4P,QAAQ4J,oBADuB,2CAAhB,uDAInBrE,EAAmB,SAAC1T,GAAD,OAAiB,SAACvL,GAChDA,EAAS8J,EAAM4P,QAAQuF,iBAAiB1T,MAG7B2T,EAAiB,kBAAM,SAAClf,GACnCA,EAAS8J,EAAM4P,QAAQwF,oBAGZkC,EAAyB,SAACsP,EAAcC,GAAf,OAAsC,SAAC3wB,GAC3EA,EAAS8J,EAAM4P,QAAQ0H,uBAAuB,CAAE7V,IAAKmlB,EAAMrP,SAAUsP,OAG1DjO,EAAwB,SAACrC,GAAD,OAAqC,SAACrgB,GACzEA,EAAS8J,EAAM4P,QAAQgJ,sBAAsBrC,MAGlCwC,EAAqB,SAACF,GAAD,OAA8B,SAAC3iB,GAC/DA,EAAS8J,EAAM4P,QAAQmJ,mBAAmBF,MAG/B9I,EAAc,kBAAgB,SAAC7Z,GAC1CA,EAAS8J,EAAM4P,QAAQkW,cAGZrS,EAAkB,SAAClC,EAAc+B,EAAa7J,GAA5B,OAAsD,SAACvT,GACpFA,EAAS8J,EAAM4P,QAAQ6D,gBAAgB,CAAElC,MAAK+B,MAAK7J,WAGxCwL,EAAgB,SAAC5C,GAAD,OAA6B,SAACnc,GACzDA,EAAS8J,EAAM4P,QAAQqF,cAAc5C,MAG1ByU,EAAgB,SAACzU,GAAD,OAA6B,SAACnc,GACzDA,EAAS8J,EAAM4P,QAAQyW,kBAAkBhU,IACzC0U,YAAW,WAAO,IAAD,EACf,UAAAn8B,SAAS8Z,eAAe,uBAAxB,SAAyCsiB,UACxC,OAGQC,EAAgB,SAAC5U,GAAD,OAA6B,SAACnc,GACzDA,EAAS8J,EAAM4P,QAAQ0W,kBAAkBjU,IACzC0U,YAAW,WAAO,IAAD,EACf,UAAAn8B,SAAS8Z,eAAe,uBAAxB,SAAyCsiB,UACxC,OAGQtR,EAAuB,SAACwR,GAAD,OAA2C,SAAChxB,GAC9EA,EAAS8J,EAAM4P,QAAQ8F,qBAAqBwR,O,gCCrV9C,wIAAO,IAAM3K,EAAgB,CAC3B4K,mBAAoB,iBACpBC,6BAA8B,sDAC9BC,mBAAoB,iBACpBC,kBAAmB,2BACnBC,6BAA8B,6BAC9BC,MAAO,CACLvmB,OAAQ,gDACRwmB,MAAO,CACL,QACA,SACA,WAEFC,eAAwD,qCACxDC,gBAAyD,gCACzDC,aAAc,QAEhBC,iBAAkB,qBAClBC,cAAe,CACbC,QAAQ,EACR9mB,OAAgD,cAChD+mB,SAAU,WAIDC,EAAa,iBAEbhe,EAAc,CACzBie,kBAAmB,wEACnBC,kBAAmB,wEACnBC,mBAAoB,gFACpBC,oBAAqB,wEACrBC,cAAe,mCACfC,iBAAkB,wEAClBC,OAAQ,sCACRC,OAAQ,gCACRC,mBAAoB,2CACpBje,iBAAkB,2CAClBke,UAAW,oCACXze,YAAa,sCACb0e,iBAAkB,uCAClBC,kBAAmB,6CACnBC,kBAAmB,6CACnBC,uBAAwB,8FACxBC,2BAA4B,qCAE5BhR,wBAAyB,2CACzBiR,kBAAmB,mCACnBC,mBAAoB,6DACpBC,oBAAqB,+BACrBC,iBAAkB,gCAClBC,eAAgB,oCAChBxe,eAAgB,wCAChBye,kBAAmB,8EAaRC,EAAS,M,+KCtDhBvpB,EAAQ0N,YAAY,CACxBpL,KAAM,MACNqL,aAN6B,CAC7B6b,KAAM,IAMNpb,SAAU,CACRC,WADQ,SACGvb,GACTA,EAAM02B,KAAO,IAEfC,QAJQ,SAIA32B,EAAiB5C,GACvB,IAAMw5B,EAAUx5B,EAAOse,QACvB1b,EAAM02B,KAAN,sBAAiB12B,EAAM02B,MAAvB,YAAgCE,EAAQhzB,QAAO,SAACqqB,GAAD,OAAUjuB,EAAM02B,KAAKrpB,MAAK,SAACwpB,GAAD,OAAQA,EAAGrkB,KAAOyb,EAAIzb,YAEjGskB,WARQ,SAQG92B,EAAiB5C,GAC1B,MAAgCA,EAAOse,QAA/Bkb,EAAR,EAAQA,QAASG,EAAjB,EAAiBA,WACjB/2B,EAAM02B,KAAN,sBAAiB12B,EAAM02B,KAAK9yB,QAAO,SAACqqB,GAAD,OAAS8I,EAAWjzB,SAASmqB,EAAIzb,QAApE,YAA6EokB,EAAQhzB,QAAO,SAACqqB,GAAD,OAAUjuB,EAAM02B,KAAKrpB,MAAK,SAACwpB,GAAD,OAAQA,EAAGrkB,KAAOyb,EAAIzb,eAKnIoK,EAAY1P,EAAZ0P,QAMF+Z,EAAU,SAACD,GAAD,OAA2B,SAACtzB,GACjDA,EAAS8J,EAAM4P,QAAQ6Z,QAAQD,MAGpBI,EAAa,SAACF,EAAgBG,GAAjB,OAAoD,SAAC3zB,GAC7EA,EAAS8J,EAAM4P,QAAQga,WAAW,CAAEF,UAASG,mB,wHCvClCC,EAAiB,SAACC,GAC7B,IAAKA,EAAM,MAAO,GAClB,IAAMC,EAAM,IAAIze,KACV5K,EAAK,IAAI4K,KAAKwe,GACpB,OAAIppB,EAAGspB,gBAAkBD,EAAIC,cAAsBC,YAAOvpB,EAAI,cAC1DA,EAAGwpB,aAAeH,EAAIG,YAAcxpB,EAAGypB,YAAcJ,EAAII,UAAkBF,YAAOvpB,EAAI,SAEnFupB,YAAOvpB,EAAI,YAyBP0pB,EAAsB,SAACN,GAClC,IAAKA,EAAM,MAAO,GAClB,IAAMO,EAAI,IAAI/e,KAAKwe,GACnB,OAAOG,YAAOI,EAAG,gB,kECjCJC,EAFOv+B,wBAAc,CAAE0L,QAAS,OCGhCwH,IAFG,kBAAMnS,qBAAWw9B,K,gKCiB7BvqB,EAAQ0N,YAAY,CACxBpL,KAAM,UACNqL,aATiC,CACjC6c,YAAa,GACbC,sBAAsB,EACtBC,UAAW,GACXC,oBAAoB,GAMpBvc,SAAU,CACRC,WADQ,SACGvb,GACTA,EAAM23B,sBAAuB,EAC7B33B,EAAM03B,YAAYlc,OAAO,EAAGxb,EAAM03B,YAAYrzB,QAC9CrE,EAAM63B,oBAAqB,EAC3B73B,EAAM43B,UAAUpc,OAAO,EAAGxb,EAAM43B,UAAUvzB,SAE5CyzB,eAPQ,SAOO93B,EAAqB5C,GAClC,IAAMs6B,EAAct6B,EAAOse,QAC3B1b,EAAM03B,YAAN,YAAwBA,GACxB13B,EAAM23B,sBAAuB,GAE/BI,iBAZQ,SAYS/3B,EAAqB5C,GACpC,IAAQs6B,EAAgBt6B,EAAOse,QAAvBgc,YACR13B,EAAM03B,YAAcA,EAAYtI,OAAOpvB,EAAM03B,cAE/CM,iBAhBQ,SAgBSh4B,EAAqB5C,GACpC,IAAM66B,EAAa76B,EAAOse,QACpBU,EAAQpc,EAAM03B,YAAYnzB,WAAU,SAACyE,GAAD,OAAUA,EAAKwJ,KAAOylB,EAAWzlB,MACvE4J,GAAS,EAAGpc,EAAM03B,YAAYtb,GAAS6b,EACtCj4B,EAAM03B,YAAY1pB,KAAKiqB,IAE9BC,kBAtBQ,SAsBUl4B,EAAqB5C,GACrC,IAAMjC,EAAOiC,EAAOse,QACduc,EAAaj4B,EAAM03B,YAAYr1B,MAAK,SAAC2G,GAAD,OAAUA,EAAKwJ,KAAOrX,EAAKqX,MACjEylB,GACFxnB,OAAOsI,KAAK5d,GAAM2S,SAAQ,SAAC5V,GACb,OAARA,IAAc+/B,EAAW//B,GAAOiD,EAAKjD,QAI/CigC,iBA/BQ,SA+BSn4B,EAAqB5C,GACpC,IAAMoV,EAAKpV,EAAOse,QAClB1b,EAAM03B,YAAc13B,EAAM03B,YAAY9zB,QAAO,SAACoF,GAAD,OAAUA,EAAKwJ,KAAOA,MAErE4lB,iBAnCQ,SAmCSp4B,EAAqB5C,GACpC,IAAMi7B,EAAgBj7B,EAAOse,QACvB4c,EAAc9f,YAASxY,EAAM03B,aACnCW,EAAcvqB,SAAQ,YAAqB,IAAlB0E,EAAiB,EAAjBA,GAAI+lB,EAAa,EAAbA,OACdD,EAAYj2B,MAAK,SAACiW,GAAD,OAAUA,EAAK9F,KAAOA,KAC/CgmB,aAAe,CAAEhmB,GAAI+lB,EAAQ10B,KAAMoW,QAE1Cja,EAAM03B,YAAcY,GAEtBG,iBA5CQ,SA4CSz4B,EAAqB5C,GACpC,IAAMi7B,EAAgBj7B,EAAOse,QACvB4c,EAAc9f,YAASxY,EAAM03B,aACnCW,EAAcvqB,SAAQ,YAAqB,IAAlB0E,EAAiB,EAAjBA,GAAI+lB,EAAa,EAAbA,OACdD,EAAYj2B,MAAK,SAACiW,GAAD,OAAUA,EAAK9F,KAAOA,KAC/CkmB,aAAe,CAAElmB,GAAI+lB,EAAQ10B,KAAMoW,QAE1Cja,EAAM03B,YAAcY,GAEtBK,wBArDQ,SAqDgB34B,EAAqB5C,GAC3C4C,EAAM23B,qBAAuBv6B,EAAOse,SAEtCkd,aAxDQ,SAwDK54B,EAAqB5C,GAChC,IAAMw6B,EAAYx6B,EAAOse,QACzB1b,EAAM43B,UAAN,YAAsBA,GACtB53B,EAAM63B,oBAAqB,GAE7BgB,eA7DQ,SA6DO74B,EAAqB5C,GAClC,IAAQw6B,EAAcx6B,EAAOse,QAArBkc,UACR53B,EAAM43B,UAAYA,EAAUxI,OAAOpvB,EAAM43B,YAE3CkB,eAjEQ,SAiEO94B,EAAqB5C,GAClC,IAAM27B,EAAW37B,EAAOse,QAClBU,EAAQpc,EAAM43B,UAAUrzB,WAAU,SAACyE,GAAD,OAAUA,EAAKwJ,KAAOumB,EAASvmB,MACnE4J,GAAS,EAAGpc,EAAM43B,UAAUxb,GAAS2c,EACpC/4B,EAAM43B,UAAU5pB,KAAK+qB,IAE5BC,gBAvEQ,SAuEQh5B,EAAqB5C,GACnC,IAAMjC,EAAOiC,EAAOse,QACdqd,EAAW/4B,EAAM43B,UAAUv1B,MAAK,SAAC2G,GAAD,OAAUA,EAAKwJ,KAAOrX,EAAKqX,MAC7DumB,GACFtoB,OAAOsI,KAAK5d,GAAM2S,SAAQ,SAAC5V,GACb,OAARA,IAAc6gC,EAAS7gC,GAAOiD,EAAKjD,QAI7C+gC,eAhFQ,SAgFOj5B,EAAqB5C,GAClC,IAAMoV,EAAKpV,EAAOse,QAClB1b,EAAM43B,UAAY53B,EAAM43B,UAAUh0B,QAAO,SAACoF,GAAD,OAAUA,EAAKwJ,KAAOA,MAEjE0mB,sBApFQ,SAoFcl5B,EAAqB5C,GACzC,MAAmCA,EAAOse,QAAlCyd,EAAR,EAAQA,QAAS3mB,EAAjB,EAAiBA,GAAIxC,EAArB,EAAqBA,UACrB,GAAImpB,EAAU,EAAG,CACf,IAAM/c,EAAQpc,EAAM43B,UAAUrzB,WAAU,SAACyE,GAAD,OAAUA,EAAKwJ,KAAOA,KAC9DxS,EAAM43B,UAAUpc,OAAOY,EAAO,OACzB,CACL,IAAM2c,EAAW/4B,EAAM43B,UAAUv1B,MAAK,SAAC2G,GAAD,OAAUA,EAAKwJ,KAAOA,KAC5DumB,EAAStxB,OAAS2xB,IAClBL,EAAS/oB,UAAYA,IAGzBqpB,iBA/FQ,SA+FSr5B,EAAqB5C,GACpC,IAAMi7B,EAAgBj7B,EAAOse,QACvB4c,EAAc9f,YAASxY,EAAM43B,WACnCS,EAAcvqB,SAAQ,YAAqB,IAAlB0E,EAAiB,EAAjBA,GAAI+lB,EAAa,EAAbA,OACdD,EAAYj2B,MAAK,SAACiW,GAAD,OAAUA,EAAK9F,KAAOA,KAC/C8mB,aAAe,CAAE9mB,GAAI+lB,EAAQ10B,KAAMoW,QAE1Cja,EAAM43B,UAAYU,GAEpBiB,iBAxGQ,SAwGSv5B,EAAqB5C,GACpC,IAAMi7B,EAAgBj7B,EAAOse,QACvB4c,EAAc9f,YAASxY,EAAM43B,WACnCS,EAAcvqB,SAAQ,YAAqB,IAAlB0E,EAAiB,EAAjBA,GAAI+lB,EAAa,EAAbA,OACdD,EAAYj2B,MAAK,SAACiW,GAAD,OAAUA,EAAK9F,KAAOA,KAC/CgnB,aAAe,CAAEhnB,GAAI+lB,EAAQ10B,KAAMoW,QAE1Cja,EAAM43B,UAAYU,GAEpBmB,sBAjHQ,SAiHcz5B,EAAqB5C,GACzC4C,EAAM63B,mBAAqBz6B,EAAOse,YAKzBkB,EAAY1P,EAAZ0P,QAKF8c,EAAkB,SAAChC,GAAD,8CAAyC,WAAOt0B,GAAP,SAAAtB,EAAA,sDACtEsB,EAAS8J,EAAM4P,QAAQgb,eAAeJ,IADgC,2CAAzC,wD,iCCjJhBlK,IAFF,SAACmM,GAAD,OAAiC,IAAItc,SAAQ,SAACxO,GAAD,OAASolB,WAAWplB,EAAK8qB,Q,yXCc7EC,EAAc,CAAEC,KAAM,EAAGC,KAAM,EAAGC,KAAM,EAAGC,MAAO,EAAGC,MAAO,GAqB5Dpf,EAAkC,CACtCnX,YAAa,GACbvB,SAAU,GACV8M,cAAe,GACfE,UAAW,GACXE,UAAW,GACXvP,YAAa,KACbga,aAAc,KACdogB,gBAAiB,GACjBC,oBAAqB,GACrBC,cAAe,GACfC,UAAW,KACXC,YAAa,GACb/f,aAAc,GACdhO,gBAAgB,EAChBguB,kBAAkB,EAClBC,UAAWZ,GAGPa,EAAY,SAAC34B,EAAkBmwB,GAAnB,OAAiDnwB,EAAE2N,MAAQwiB,EAAExiB,OAEzEvC,EAAQ0N,YAAY,CACxBpL,KAAM,eACNqL,eACAS,SAAU,CACRC,WADQ,SACGvb,GACTA,EAAM0D,YAAY8X,OAAO,EAAGxb,EAAM0D,YAAYW,QAC9CrE,EAAMmC,SAASqZ,OAAO,EAAGxb,EAAMmC,SAASkC,QACxCrE,EAAMiP,cAAcuM,OAAO,EAAGxb,EAAMiP,cAAc5K,QAClDrE,EAAMmP,UAAUqM,OAAO,EAAGxb,EAAMmP,UAAU9K,QAC1CrE,EAAMqP,UAAUmM,OAAO,EAAGxb,EAAMqP,UAAUhL,QAC1CrE,EAAMF,YAAc,KACpBE,EAAM8Z,aAAe,KACrB9Z,EAAMk6B,gBAAgB1e,OAAO,EAAGxb,EAAMk6B,gBAAgB71B,QACtDrE,EAAMm6B,oBAAoB3e,OAAO,EAAGxb,EAAMm6B,oBAAoB91B,QAC9DrE,EAAMo6B,cAAc5e,OAAO,EAAGxb,EAAMo6B,cAAc/1B,QAClDrE,EAAMq6B,UAAY,KAClBr6B,EAAMs6B,YAAY9e,OAAO,EAAGxb,EAAMs6B,YAAYj2B,QAC9CrE,EAAMua,aAAaiB,OAAO,EAAGxb,EAAMua,aAAalW,QAChDrE,EAAMuM,gBAAiB,EACvBvM,EAAMu6B,kBAAmB,EACzBv6B,EAAMw6B,UAAYZ,GAEpBc,kBAnBQ,SAmBU16B,EAA0B5C,GAC1C4C,EAAMuM,eAAiBnP,EAAOse,SAEhCif,aAtBQ,SAsBK36B,EAA0B5C,GACjC4C,EAAMq6B,WAAW5hC,OAAOi3B,IAAIkL,gBAAgB56B,EAAMq6B,WACtDr6B,EAAMq6B,UAAYj9B,EAAOse,SAE3BpK,iBA1BQ,SA0BStR,EAA0B5C,GACzC,MAA6DA,EAAOse,QAA5D5M,EAAR,EAAQA,QAASC,EAAjB,EAAiBA,cAAeC,EAAhC,EAAgCA,WAAYM,EAA5C,EAA4CA,MAAOF,EAAnD,EAAmDA,MACnDpP,EAAM0D,YAAcoL,EACpB9O,EAAMmC,SAAW4M,EACjB/O,EAAMiP,cAAgBD,EACtBhP,EAAMmP,UAAYG,EAClBtP,EAAMqP,UAAYD,EAClBpP,EAAMuM,gBAAiB,GAEzBsuB,uBAnCQ,SAmCe76B,EAA0B5C,GAC/C,IAAM09B,EAAa19B,EAAOse,QACpBqf,EAAW/6B,EAAMmC,SAASoC,WAAU,SAACnC,GAAD,OAAaA,EAAQL,iBAAmB+4B,EAAW/4B,kBACzFg5B,GAAY,GAAG/6B,EAAMmC,SAASqZ,OAAOuf,EAAU,EAAGD,IAExDE,uBAxCQ,SAwCeh7B,EAA0B5C,GAAwI,IAAD,EACtL,EAAqDA,EAAOse,QAApD6V,EAAR,EAAQA,WAAYnvB,EAApB,EAAoBA,QAAS64B,EAA7B,EAA6BA,SAAU5rB,EAAvC,EAAuCA,UACvCrP,EAAM0D,YAAYsK,KAAKujB,GACvBvxB,EAAMmC,SAAS6L,KAAK5L,GACpBpC,EAAMmP,UAAUnB,KAAKitB,IACrB,EAAAj7B,EAAMqP,WAAUrB,KAAhB,oBAAwBqB,KAE1B6rB,mBA/CQ,SA+CWl7B,EAA0B5C,GAC3C,IAAM+e,EAAc/e,EAAOse,QACrByf,EAAmBn7B,EAAMiP,cAAc1K,WAAU,SAACwM,GAAD,OAASA,EAAIyB,KAAO2J,EAAY3J,MACnF2oB,GAAoB,EAAGn7B,EAAMiP,cAAcuM,OAAO2f,EAAkB,EAAGhf,GACtEnc,EAAMiP,cAAcjB,KAAKmO,IAEhC3N,eArDQ,SAqDOxO,EAA0B5C,GACvC4C,EAAMF,YAAc1C,EAAOse,SAE7B0f,gBAxDQ,SAwDQp7B,EAA0B5C,GACxC4C,EAAM8Z,aAAe1c,EAAOse,SAE9B2f,yBA3DQ,SA2DiBr7B,EAA0B5C,GACjD,IAAMk+B,EAAUl+B,EAAOse,QACnB6f,EAAYv7B,EAAMmP,UAAU5K,WAAU,SAACgM,GAAD,OAAUA,EAAKhB,MAAQ+rB,EAAQ/rB,OACrEgsB,GAAa,GAAGv7B,EAAMmP,UAAUqM,OAAO+f,EAAW,EAAGD,IACzDC,EAAYv7B,EAAMm6B,oBAAoB51B,WAAU,SAACgM,GAAD,OAAUA,EAAKhB,MAAQ+rB,EAAQ/rB,SAC9D,GAAGvP,EAAMm6B,oBAAoB3e,OAAO+f,EAAW,EAAGD,GACnEt7B,EAAMm6B,oBAAoBhpB,KAAKspB,IAEjC/c,oBAnEQ,SAmEY1d,EAA0B5C,GAC5C4C,EAAMu6B,iBAAmBn9B,EAAOse,SAElC8f,mBAtEQ,SAsEWx7B,EAA0B5C,GAC3C,MAAkCA,EAAOse,QAAjC5M,EAAR,EAAQA,QAASQ,EAAjB,EAAiBA,MAAOF,EAAxB,EAAwBA,MACxBpP,EAAMk6B,gBAAkBprB,EACxB9O,EAAMm6B,oBAAsB7qB,EAC5BtP,EAAMo6B,cAAgBhrB,EACtBpP,EAAMm6B,oBAAoBhpB,KAAKspB,GAC/Bz6B,EAAMu6B,kBAAmB,GAE3BkB,kBA9EQ,SA8EUz7B,EAA0B5C,GAC1C,IAAMs+B,EAAYt+B,EAAOse,QACzB1b,EAAMk6B,gBAAgBlsB,KAAK0tB,IAE7BC,qBAlFQ,SAkFa37B,EAA0B5C,GAC7C,IAAMjC,EAAOiC,EAAOse,QACdpN,EAAYtO,EAAMk6B,gBAAgB73B,MAAK,SAACH,GAAD,OAAYA,EAAOwE,MAAQvL,EAAKuL,OACzE4H,GACFmC,OAAOsI,KAAK5d,GAAM2S,SAAQ,SAAC5V,GACb,QAARA,IAAeoW,EAAUpW,GAAOiD,EAAKjD,QAI/C0jC,iBA3FQ,SA2FS57B,EAA0B5C,GAAmC,IAAD,EAC3E,EAAkCA,EAAOse,QAAjCmgB,EAAR,EAAQA,WAAYC,EAApB,EAAoBA,WACpB,EAAA97B,EAAMk6B,iBAAgBlsB,KAAtB,oBAA8B6tB,EAAWn6B,KAAI,SAACQ,GAAD,mBAAC,eAAiBA,GAAlB,IAA0B2O,KAAM,UAC7E7Q,EAAMk6B,gBAAkBl6B,EAAMk6B,gBAAgBt2B,QAAO,SAAC1B,GAAD,OAAa45B,EAAUh4B,SAAS5B,EAAOwE,QAC5F1G,EAAMo6B,cAActsB,SAAQ,SAACoD,GAC3BA,EAAK6qB,KAAO7qB,EAAK6qB,KAAKn4B,QAAO,SAAC8tB,GAAD,OAAeoK,EAAUh4B,SAAS4tB,UAGnEsK,uBAnGQ,SAmGeh8B,EAA0B5C,GAC/C,IAAMsJ,EAAMtJ,EAAOse,QACnB1b,EAAMk6B,gBAAkBl6B,EAAMk6B,gBAAgBt2B,QAAO,SAAC1B,GAAD,OAAYwE,IAAQxE,EAAOwE,OAChF1G,EAAMo6B,cAActsB,SAAQ,SAACoD,GAC3BA,EAAK6qB,KAAO7qB,EAAK6qB,KAAKn4B,QAAO,SAAC8tB,GAAD,OAAcA,IAAahrB,SAG5Du1B,sBA1GQ,SA0Gcj8B,EAA0B5C,GAC9C,IAAMk+B,EAAUl+B,EAAOse,QACvB1b,EAAMm6B,oBAAoBnsB,KAAKstB,GAC/Bt7B,EAAMm6B,oBAAoBhpB,KAAKspB,IAEjCyB,2BA/GQ,SA+GmBl8B,EAA0B5C,GACnD,IAAMmS,EAAMnS,EAAOse,QACnB1b,EAAMmP,UAAYnP,EAAMmP,UAAUvL,QAAO,SAAC2M,GAAD,OAAUA,EAAKhB,MAAQA,KAChEvP,EAAMk6B,gBAAgBt2B,QAAO,SAAC1B,GAAD,OAAYA,EAAOqN,MAAQA,KAAKzB,SAAQ,SAAC5L,GACpElC,EAAMo6B,cAActsB,SAAQ,SAACoD,GAC3BA,EAAK6qB,KAAO7qB,EAAK6qB,KAAKn4B,QAAO,SAAC8tB,GAAD,OAAcA,IAAaxvB,EAAOwE,aAGnE1G,EAAMk6B,gBAAkBl6B,EAAMk6B,gBAAgBt2B,QAAO,SAAC1B,GAAD,OAAYA,EAAOqN,MAAQA,KAChFvP,EAAMm6B,oBAAsBn6B,EAAMm6B,oBAAoBv2B,QAAO,SAAC2M,GAAD,OAAUA,EAAKhB,MAAQA,MAEtF4sB,gBA1HQ,SA0HQn8B,EAA0B5C,GACxC,IAAMg/B,EAAUh/B,EAAOse,QACvB1b,EAAMo6B,cAAcpsB,KAAKouB,GACzBp8B,EAAMk6B,gBAAgBpsB,SAAQ,SAAC5L,GACzBk6B,EAAQL,KAAKj4B,SAAS5B,EAAOwE,MAC/BxE,EAAO2O,KAAK7C,KAAKouB,EAAQnrB,QAG7BjR,EAAM0D,YAAYoK,SAAQ,SAAC5L,GACrBk6B,EAAQL,KAAKj4B,SAAS5B,EAAOwE,MAC/BxE,EAAO2O,KAAK7C,KAAKouB,EAAQnrB,QAG7B,IAAMsI,EAAevZ,EAAM0D,YAAYrB,MAAK,SAACH,GAAD,OAAYA,EAAOI,MAAQtC,EAAMF,eACzEyZ,GAAgB6iB,EAAQL,KAAKj4B,SAASyV,EAAa7S,MAAM1G,EAAMqP,UAAUrB,KAAKouB,IAEpFC,qBA1IQ,SA0Iar8B,EAA0B5C,GAC7C,IAAM6T,EAAM7T,EAAOse,QACnB1b,EAAMqP,UAAYrP,EAAMqP,UAAUzL,QAAO,SAACsN,GAAD,OAAUA,EAAKD,MAAQA,KAChEjR,EAAMo6B,cAAgBp6B,EAAMo6B,cAAcx2B,QAAO,SAACsN,GAAD,OAAUA,EAAKD,MAAQA,KACxEjR,EAAMk6B,gBAAgBpsB,SAAQ,SAAC5L,GAC7BA,EAAO2O,KAAO3O,EAAO2O,KAAKjN,QAAO,SAAC20B,GAAD,OAAYA,IAAWtnB,QAE1DjR,EAAM0D,YAAYoK,SAAQ,SAAC5L,GACzBA,EAAO2O,KAAO3O,EAAO2O,KAAKjN,QAAO,SAAC20B,GAAD,OAAYA,IAAWtnB,SAG5DqrB,mBArJQ,SAqJWt8B,EAA0B5C,GAC3C,IAAMg/B,EAAUh/B,EAAOse,QACjB6gB,EAAUv8B,EAAMo6B,cAAc/3B,MAAK,SAAC6O,GAAD,OAAUA,EAAKD,MAAQmrB,EAAQnrB,OACxE,GAAIsrB,EAAS,CACX,IAAMC,EAAUD,EAAQR,KAClBU,EAAUL,EAAQL,KAClBW,EAAaF,EAAQ54B,QAAO,SAAC8tB,GAAD,OAAe+K,EAAQ34B,SAAS4tB,MAC5DiL,EAAUF,EAAQ74B,QAAO,SAAC8tB,GAAD,OAAe8K,EAAQ14B,SAAS4tB,MAC/D1xB,EAAMk6B,gBAAgBpsB,SAAQ,SAAC5L,GACzBw6B,EAAW54B,SAAS5B,EAAOwE,OAC7BxE,EAAO2O,KAAO3O,EAAO2O,KAAKjN,QAAO,SAAC20B,GAAD,OAAYA,IAAW6D,EAAQnrB,QAE9D0rB,EAAQ74B,SAAS5B,EAAOwE,MAC1BxE,EAAO2O,KAAK7C,KAAKouB,EAAQnrB,QAG7BjR,EAAM0D,YAAYoK,SAAQ,SAAC5L,GACrBw6B,EAAW54B,SAAS5B,EAAOwE,OAC7BxE,EAAO2O,KAAO3O,EAAO2O,KAAKjN,QAAO,SAAC20B,GAAD,OAAYA,IAAW6D,EAAQnrB,QAE9D0rB,EAAQ74B,SAAS5B,EAAOwE,MAC1BxE,EAAO2O,KAAK7C,KAAKouB,EAAQnrB,QAG7B,IAAMsI,EAAevZ,EAAM0D,YAAYrB,MAAK,SAACH,GAAD,OAAYA,EAAOI,MAAQtC,EAAMF,eACzEyZ,GAAgBmjB,EAAW54B,SAASyV,EAAa7S,OAAM1G,EAAMqP,UAAYrP,EAAMqP,UAAUzL,QAAO,SAACsN,GAAD,OAAUA,EAAKD,MAAQmrB,EAAQnrB,QAC/HsI,GAAgBojB,EAAQ74B,SAASyV,EAAa7S,MAAM1G,EAAMqP,UAAUrB,KAAKouB,GAC7Ep8B,EAAMo6B,cAAgBp6B,EAAMo6B,cAAc14B,KAAI,SAACwP,GAAD,OAAWA,EAAKD,MAAQmrB,EAAQnrB,IAAMmrB,EAAUlrB,OAGlG0rB,uBAnLQ,SAmLe58B,EAA0B5C,GAC/C,MAAkCA,EAAOse,QAAjCgW,EAAR,EAAQA,SAAU4I,EAAlB,EAAkBA,YAClBt6B,EAAMs6B,YAAcA,EACpB,IAAMp4B,EAASlC,EAAM0D,YAAYrB,MAAK,SAACkvB,GAAD,OAAgBA,EAAW7qB,MAAQgrB,KACrExvB,IAAQA,EAAOo4B,YAAcA,GACjC,IAAMuC,EAAiB78B,EAAMk6B,gBAAgB73B,MAAK,SAACkvB,GAAD,OAAgBA,EAAW7qB,MAAQgrB,KACjFmL,IAAgBA,EAAevC,YAAcA,IAEnDwC,eA3LQ,SA2LO98B,EAA0B5C,GACvC4C,EAAMs6B,YAAcl9B,EAAOse,SAE7BqhB,gBA9LQ,SA8LQ/8B,EAA0B5C,GACxC,IAAQmd,EAAiBnd,EAAOse,QAAxBnB,aACRva,EAAMua,aAAeA,GAEvB+I,mBAlMQ,SAkMWtjB,EAA0B5C,GAClBA,EAAOse,QAAxBnB,aACKzM,SAAQ,SAACkvB,GACpB,IAAMC,EAAUj9B,EAAMua,aAAalY,MAAK,SAAC2G,GAAD,OAAUA,EAAK2F,MAAQquB,EAAQruB,OACnEsuB,EACFxsB,OAAOsI,KAAKikB,GAASlvB,SAAQ,SAAC5V,GAChB,OAARA,GAAwB,WAARA,IAAkB+kC,EAAQ/kC,GAAO8kC,EAAQ9kC,IACjD,WAARA,GACF8kC,EAAQtjB,OAAO5L,SAAQ,SAACovB,GACtB,GAAIA,EAAM1qB,GAAI,CACZ,IAAM4J,EAAQ6gB,EAAQvjB,OAAOnV,WAAU,SAACiO,GAAD,OAAQA,EAAGA,KAAO0qB,EAAM1qB,MAC/DyqB,EAAQvjB,OAAO8B,OAAOY,EAAQ,EAAI6gB,EAAQvjB,OAAOrV,OAAS+X,EAAOA,EAAQ,EAAI,EAAI,EAAG8gB,UAKvFl9B,EAAMua,aAAavM,KAAKgvB,OAGnCG,gBArNQ,SAqNQn9B,EAA0B5C,GAAmC,IAAD,EACpEi2B,EAAUj2B,EAAOse,QACnB2X,IAAW,UAAA5iB,OAAOsI,KAAKsa,UAAZ,eAAsBhvB,QAAS,GAC5CoM,OAAOsI,KAAKsa,GAASvlB,SAAQ,SAAC5V,GAC5B8H,EAAMw6B,UAAUtiC,GAAOm7B,EAAQn7B,UAO1B0kB,EAAY1P,EAAZ0P,QAEFgB,EAAyB,kBAAgB,SAACxa,GACrDA,EAAS8J,EAAM4P,QAAQvB,gBAQZjK,EAAmB,SAAC8rB,EAAiBC,EAAcC,EAAoBC,EAAeC,GAAnE,8CAAgG,WAAOp6B,GAAP,SAAAtB,EAAA,sDAC9HsB,EAAS8J,EAAM4P,QAAQxL,iBAAiB,CACtCxC,QAASsuB,EACTruB,cAAesuB,EACfruB,WAAYsuB,EACZhuB,MAAOiuB,EACPnuB,MAAOouB,KANqH,2CAAhG,uDAkBnBhvB,EAAiB,SAAClM,GAAD,8CAA2B,WAAOc,GAAP,SAAAtB,EAAA,sDACvDsB,EAAS8J,EAAM4P,QAAQtO,eAAelM,IADiB,2CAA3B,uDAMjBob,EAAsB,SAACX,GAAD,8CAAoC,WAAO3Z,GAAP,SAAAtB,EAAA,sDACrEsB,EAAS8J,EAAM4P,QAAQY,oBAAoBX,IAD0B,2CAApC,uDAGtBye,EAAqB,SAAC1sB,EAAgBQ,EAAcF,EAAcmL,GAA7C,8CAA+E,WAAOnX,GAAP,SAAAtB,EAAA,sDAC/GsB,EAAS8J,EAAM4P,QAAQwG,mBAAmB,CAAE/I,aAAcA,KAC1DnX,EAAS8J,EAAM4P,QAAQ0e,mBAAmB,CACxC1sB,QAASA,EACTQ,MAAOA,EACPF,MAAOA,KALsG,2CAA/E,uDA6CrBkU,EAAqB,SAAC/I,GAAD,8CAAmC,WAAOnX,GAAP,SAAAtB,EAAA,sDACnEsB,EAAS8J,EAAM4P,QAAQwG,mBAAmB,CAAE/I,aAAcA,KADS,2CAAnC,uDAGrB6C,EAAoB,yDAAgB,WAAOha,GAAP,SAAAtB,EAAA,sDAC/CsB,EAAS8J,EAAM4P,QAAQigB,gBAAgB,CAAExiB,aAAc,MADR,2CAAhB,wD,gCCvWlBhZ,IAVY,SAACpG,GAC1B,GAAIA,EAAM,CACR,GAAIA,EAAKsiC,QAAS,OAAOtiC,EAAKsiC,QAC9B,GAAItiC,EAAKutB,YAAa,OAAOvtB,EAAKutB,YAClC,IAAMgV,EAAa,CAACviC,EAAKswB,UAAWtwB,EAAKuwB,WAAYvwB,EAAKwwB,UAAU/nB,QAAO,SAAC+5B,GAAD,QAASA,KAAGj8B,KAAI,SAACi8B,GAAD,OAAOA,EAAEC,UAAQzwB,KAAK,KACjH,GAAIuwB,EAAY,OAAOA,EAEzB,MAAO,Y,25FCLI1W,EAAY,GACZ6W,EAAoB,GAOpBv5B,EAAS,SAACw5B,EAAWlvB,EAAMmvB,GACtC,OAAID,EACKlvB,EAGFmvB,GAUIC,EAAe,SAACC,GAG3B,MADc,yJACDC,KAAKD,EAAWE,gBAGlBC,EAAkC,gBAClCC,EAAgC,WAChCC,EAA6B,WAC7BC,EAAgC,UAChCC,EAAkC,YAClCC,EAAgC,UAChCC,EAAkC,eAClCC,EAAgC,UAChCC,EAA6B,UAC7BC,EAAgC,SAChCC,EAAkC,WAClCC,EAAgC,SAEhCC,EAA6B,GAS7BC,EAAsC,iBACtCC,EAAwC,wDACxCC,EAAgC,kBAChCC,EAAkC,0DASlCC,EAA8B,oBAC9BC,EAAgC,yDAChCC,EAA6B,gBAC7BC,EAA+B,uDAC/BC,EAA6B,eAC7BC,EAA+B,+FAM/BC,EAAwB,SAACC,GACpC,IAAMC,EAAcD,EAASv7B,OAAS,EAAIu7B,EAAW,yBACrD,MAAM,GAAN,OAAUC,EAAV,iCAGWC,EAAqB,SAACC,EAAkBC,GACnD,IAAMH,EAAcG,EAAO37B,OAAS,EAAI27B,EAAS,yBAC3CC,EAAeF,EAAS17B,OAAS,EAAlB,YAA2B07B,EAA3B,KAAyC,IACxDG,EAAS,qBAAiBD,EAAjB,QACTE,EAAS,UAAMN,EAAN,sHAEf,MAAM,GAAN,OAAUK,GAAV,OAAsBC,GAAtB,OADkB,mFAmBPC,EAAoB,SAACC,GAGhC,IAFA,IAAIC,GAA6B,EAC7BC,EAAmB,GACdznB,EAAI,EAAGA,EAAIunB,EAAQh8B,OAAQyU,IAAK,CACvC,IAAM0nB,EAAYH,EAAQI,OAAO3nB,GAWjC,OAVkB,MAAd0nB,EACEF,GACFC,EAAQ,UAAMA,EAAN,UACRD,GAAoB,GAEpBA,GAAoB,EAGtBA,GAAoB,EAEdE,GACN,IAAK,IACHD,EAAQ,UAAMA,EAAN,QACR,MACF,IAAK,IACHA,EAAQ,UAAMA,EAAN,QACR,MACF,IAAK,IACHA,EAAQ,UAAMA,EAAN,SACR,MACF,IAAK,IACHA,EAAQ,UAAMA,EAAN,UACR,MACF,IAAK,KACHA,EAAQ,UAAMA,EAAN,UACR,MACF,QACEA,EAAQ,UAAMA,GAAN,OAAiBC,IAI/B,MAAM,MAAN,OAAaD,EAAb,SAGWG,EAAoB,SAAC3iC,GAAD,OAA6BA,GAAQA,IAASqiC,EAAkB,KAAgB,gBAATriC,GAE3F4iC,EAAoB,SAACC,GAChC,IAAMC,EAAM/oC,SAASgpC,cAAc,OAEnC,OADAD,EAAIhvB,UAAY+uB,EACTC,EAAI/e,aAAe+e,EAAIE,WAAa,IAGhCC,EAAc,SAACC,GAkB1B,OAZeA,EAAUrrB,QADD,0EAC0B,uCAKtBA,QADJ,iCAC6B,gDAKzBA,QADJ,2DAC6B,+BAkJ1CsrB,EAAe,CAC1BC,OAAQ,GACRC,aAAc,GACdC,aAAc,GACdC,KAAM,GACNC,OAAQ,GACRC,WAAY,GACZC,QAAS,IAuJEC,GAzIK,2BAAMR,GAAP,IAAqBS,YAAa,aACnC,2BAAMT,GAAP,IAAqBS,YAAa,UAwI7B,GAgBPC,EAAa,SAAC5pC,GACzB,OAAc,OAAVA,QAA4BipB,IAAVjpB,EAA4B,GAC3CA,GAGImiB,EAAe,EACfJ,EAAe,EACfC,EAAc,EACdC,EAAe,EACf3Y,EAAiB,EACjBD,EAAiB,EACjB4hB,EAAqB,EACrBC,EAAmB,EACnBxI,EAAY,CAACV,EAAaiJ,EAAoBC,GAC9CzI,EAAmB,CAACV,EAAczY,EAAgBD,GAElD8hB,EAAkB,SAAChoB,GAC9B,GAAIA,EAAM,CACR,GAAIsf,EAAiB3W,SAAS3I,EAAK0I,MAAO,OAAO1I,EAAKwT,IACtD,GAAI+L,EAAU5W,SAAS3I,EAAK0I,MAAO,OAAO1I,EAAKmH,IAEjD,MAAO,IAGIu/B,EAAoB,SAAC1mC,GAChC,OAAIA,EACEuf,EAAU5W,SAAS3I,EAAK0I,MAAcmW,EACnC7e,EAAK0I,KAEPsW,GAGI6I,EAAoB,SAAC7nB,GAAD,MAAqB,CAAEqX,GAAI2Q,EAAgBhoB,GAAO0I,KAAMg+B,EAAkB1mC,KAS9Fi3B,EAAwB,EAQxB0P,GAAmB,EACnBC,GAAkB,EAOlBC,GAAoB,EACpBC,GAAa,EACbC,GAAgB,EAChBC,GAAsB,EA8GtBC,IAxGH,GAAD,OAJqB,GAQpB,GAAD,OAPkB,GAiCjB,GAAD,OAJqB,GAQpB,GAAD,OAPuB,GAgBtB,GAAD,OAJ2B,GAQ1B,GAAD,OAP6B,GAgB5B,GAAD,OAJsB,GAQrB,GAAD,OAPoB,GAmBnB,GAAD,OAJoB,GAQnB,GAAD,OAP0B,GAmCL,GACjBC,GAAmB,EAWnBjJ,GAAiB,GAIjBkJ,GAAa,GAgCbC,IAbH,GAAD,OAJuB,GAQtB,GAAD,OAPsB,GAgBL,CACxBpwB,GAAI,QACJC,GAAI,QACJC,GAAI,mBACJC,GAAI,qBAGOrG,GAAgB,GAGhBu2B,GAAgB,GAEtB,SAASC,GAAgB1kC,GAC9B2kC,UAAUC,UAAUC,UAAU7kC,GAGzB,IA+BM8kC,GAAc,EAEdC,GAAiB,EAEjBC,GAAgB,EAgBhBC,GAAgB,GAEhBC,GAAc,GAoBdC,GAA2B,EAqB3Bj4B,GAAoB,EACpBI,GAAwB,EACxBF,GAAoB,EAEpBg4B,GAAwB,CACnC,CACE3wB,GAAI4vB,GACJpqC,MAAO,UACPiF,MAAO,WAET,CACEuV,GAvK2B,EAwK3Bxa,MAAO,SACPiF,MAAO,WAET,CACEuV,GAAI6vB,GACJrqC,MAAO,SACPiF,MAAO,YAIEsN,GAAkB,UAqGlB64B,GAAe,EACfC,GAAe,EAEfC,GAAgB,UAChBC,GAAY,wBACZja,GAAmB,UACnBka,GAAwB,UACxBC,GAAa,wBAEbnjB,GAAe,eAEf0L,GAAwB,IACxBjO,GAAyB,G,m+BC36BzB2lB,EAAU,uCAAG,WAAOC,EAAYC,GAAnB,SAAA9hC,EAAA,+EAA+CipB,IAAK8Y,qBAC3Ej1B,MAAK,SAACk1B,GAAD,OAAU,IAAIzmB,SAAa,SAACC,EAASwC,GACzC,IAAMikB,EAAS,IAAIC,IAAO,CACxBzC,OAAQpM,IACR8O,WAAY,aACZC,YAAaJ,IAETK,EAAsC,CAC1CC,aAAcT,EACdU,eAAgB,mBAEZC,EAAW,2BACVV,GAAM,IADI,IAEfW,OAAQ1tB,IAAOuC,WAAWnZ,aAAaH,cAEzCqkC,EAAWK,QAAU5qC,KAAKC,UAAUyqC,GACpCP,EAAOU,OAAON,GAAYO,UACvB91B,MAAK,SAACC,GACL,IAAM6M,EAAU9hB,KAAK+V,MAAMd,EAAI21B,SAC/BlnB,EAAQ5B,MAETlK,OAAM,SAACC,GAAD,OAASqO,EAAOrO,YAE1BD,OAAM,kBAAM,SAvBW,2CAAH,wDAyBVmzB,EAAY,SAAChB,EAAYC,EAAWgB,GAAxB,OAA2D,IAAIvnB,SAAQ,SAACC,EAASwC,GACnG8kB,GAAQ/tB,IAAOzT,SAAS0T,eAC7B4sB,EAAWC,EAAIC,GACZh1B,MAAK,SAAC3H,GACAA,QAA2Bga,IAAnBha,EAAK49B,UAGhB/kB,EAAO,IAAI1gB,MAAJ,oCAAuCxF,KAAKC,UAAUoN,EAAK69B,cAA3D,gBAAgFnB,EAAhF,eAAyF/pC,KAAKC,UAAU+pC,MAF/GtmB,EAAQrW,MAKXuK,OAAM,SAACC,GACNvS,QAAQzB,MAAM,sBAAuBkmC,EAAIC,EAAI7T,QAC7CjQ,EAAO,IAAI1gB,MAAJ,mCAAsCxF,KAAKC,UAAU4X,GAArD,gBAAiEkyB,EAAjE,eAA0E/pC,KAAKC,UAAU+pC,aClCzF3lB,EAAoB,SAAC6V,GAAD,OAC/B6Q,EAAUI,IAA4B,CAAEhV,OAAQ,MAAOphB,IAAKmlB,KAejDjT,EAAuB,SAACiT,EAAc8Q,GAAf,OAClCD,EAAUI,IAAmC,CAAEhV,OAAQ,sBAAuBphB,IAAKmlB,GAAQ8Q,IAGhFnf,EAAyC,SAACuf,EAAcC,GAAf,OACpDN,EAAUI,IAAmC,CAAEhV,OAAQ,sCAAuCzY,IAAK0tB,EAAMjf,KAAMkf,KAGpGC,EAAwB,SAACC,EAAkBC,GAAnB,OACnCT,EAAUI,IAAgC,CAAEhV,OAAQ,WAAYoV,cAAaC,+BA2ClE12B,EAAqC,SAAColB,GAAD,OAChD6Q,EAAUI,IAAoC,CAAEhV,OAAQ,gBAAiBphB,IAAKmlB,KAWnEuR,EAA2B,SAACC,GAAD,OACtCX,EAAUI,IAAoC,CAAEhV,OAAQ,cAAewV,KAAMD,KA2DlEE,EAAwB,SAACC,GAAD,OACnCd,EAAUI,IAAoC,CAAEhV,OAAQ,UAAWztB,IAAKmjC,KAmB7DC,EAAsC,SAAC50B,EAAejN,GAAhB,OACjD8gC,EAAUI,IAAgC,CAAEhV,OAAQ,uBAAwBjf,WAAUjN,UAe3E8hC,EAAmB,SAAC/O,EAAgBG,GAAjB,OAC9B4N,EAAUI,IAA2B,CAAEhV,OAAQ,gBAAiB6G,UAASG,gBA2B9D6O,EAAmC,SAACj3B,GAAD,OAC9Cg2B,EAAUI,IAAkC,CAAEhV,OAAQ,aAAcphB,SAOzDk3B,EAA6B,SAACl3B,GAAD,OACxCg2B,EAAUI,IAAkC,CAAEhV,OAAQ,cAAephB,SAO1Dm3B,EAA6B,SAACv8B,EAAew8B,GAAhB,OACxCpB,EAAUI,IAAkC,CAAEhV,OAAQ,wBAAyBxmB,QAAOw8B,cAG3ElkB,EAA6B,SAACvK,EAAa0uB,EAAgBlK,GAA9B,OACxC6I,EAAUI,IAA+B,CAAEhV,OAAQ,sBAAuBzY,MAAK0uB,UAASlK,eAG7E5Z,EAAsB,SAAC/mB,GAAD,OACjCwpC,EAAUI,IAA+B,CAAEhV,OAAQ,iBAAkB50B,UAG1D8qC,EAAuB,SAAC3uB,GAAD,OAClCqtB,EAAUI,IAA+B,CAAEhV,OAAQ,kBAAmBzY,SAG3D4uB,EAAoB,SAAC5uB,EAAamM,GAAd,OAC/BkhB,EAAUI,IAA+B,CAAEhV,OAAQ,oBAAqBzY,MAAKmM,gBAGlE0iB,EAAsB,SAAC7tB,EAAWmL,GAAZ,OACjCkhB,EAAUI,IAA+B,CAAEhV,OAAQ,cAAezX,OAAMmL,gBAG7D2iB,EAAsB,SAAC9uB,EAAanc,GAAd,OACjCwpC,EAAUI,IAA+B,CAAEhV,OAAQ,iBAAkBzY,MAAKnc,UAG/DkrC,EAAyB,SAAC/uB,GAAD,OACpCqtB,EAAUI,IAA+B,CAAEhV,OAAQ,oBAAqBzY,SAG7DgvB,EAAqB,SAAChvB,EAAasO,GAAd,OAChC+e,EAAUI,IAA+B,CAAEhV,OAAQ,gBAAiBzY,MAAKsO,eAG9D2gB,EAAwC,SAACjvB,EAAaqO,EAAsBmW,GAApC,OACnD6I,EAAUI,IAA+B,CAAEhV,OAAQ,0BAA2BzY,MAAKqO,gBAAemW,eAGvF0K,EAA6B,SAAClvB,EAAamvB,GAAd,OACxC9B,EAAUI,IAA+B,CAAEhV,OAAQ,wBAAyBzY,MAAKmvB,kBAOtEC,EAA4B,SAACzvC,GAAD,OACvC0tC,EAAUI,IAAoC,CAAEhV,OAAQ,MAAO94B,eAOpD0vC,EAA4B,SAAC9gB,EAAYT,GAAb,OACvCuf,EAAUI,IAAoC,CAAEhV,OAAQ,SAAUlK,MAAKT,YAG5DwhB,EAA6B,SAACtf,GAAD,OACxCqd,EAAUI,IAAkC,CAAEhV,OAAQ,iBAAkBzI,a,gCCxS1E,oBAKerkB,IAFC,kBAAMhJ,qBAAWmwB,O,gCCAjC,iHAEavoB,EAAgB,SAACO,GAAD,MAAyC,CACpEuM,IAAKizB,aAAWx/B,EAAQL,gBACxB2X,OAAQ,CAAC,CAAElH,GAAIovB,aAAWx/B,EAAQL,gBAAiB8B,KAAMmW,MACzDnW,KAAMmW,IACNyR,UAAWmW,aAAWx/B,EAAQqpB,WAC9BC,WAAYkW,aAAWx/B,EAAQspB,YAC/BC,SAAUiW,aAAWx/B,EAAQupB,UAC7B8R,QAASmE,aAAWx/B,EAAQG,aAC5BqmB,OAAQgZ,aAAWx/B,EAAQykC,MAC3BzF,aAAcQ,aAAWx/B,EAAQg/B,cACjCK,QAASG,aAAWx/B,EAAQq/B,SAC5BzhC,MAAO4hC,aAAWx/B,EAAQm/B,QAC1BD,KAAMM,aAAWx/B,EAAQk/B,MACzBE,WAAYI,aAAWx/B,EAAQo/B,YAC/B5U,MAAOgV,aAAWx/B,EAAQwqB,OAC1BxB,MAAOwW,aAAWx/B,EAAQgpB,OAC1B0b,QAASlF,aAAWx/B,EAAQ0kC,SAC5BC,UAAW3kC,EAAQ4kC,kBAAoB5kC,EAAQ4kC,iBAAiBC,UAGrDxhC,EAAiB,SAAC3E,GAAD,MAAkC,CAC9D6N,IAAKizB,aAAW9gC,EAAS6N,KACzB+K,OAAQ,CAAC,CAAElH,GAAIovB,aAAW9gC,EAAS6N,KAAM9K,KAAMkW,MAC/ClW,KAAMkW,IACN0R,UAAWmW,aAAW9gC,EAAS2qB,WAC/BC,WAAYkW,aAAW9gC,EAAS4qB,YAChCC,SAAUiW,aAAW9gC,EAAS6qB,UAC9B8R,QAASmE,aAAW9gC,EAAS28B,SAC7B7U,OAAQgZ,aAAW9gC,EAAS8nB,QAC5BwY,aAAcQ,aAAW9gC,EAASsgC,cAClCE,KAAMM,aAAW9gC,EAASwgC,MAC1BthC,MAAO4hC,aAAW9gC,EAASd,OAC3ByhC,QAASG,aAAW9gC,EAAS2gC,SAC7BD,WAAYI,aAAW9gC,EAAS0gC,YAChC5U,MAAOgV,aAAW9gC,EAAS8rB,OAC3BxB,MAAOwW,aAAW9gC,EAASsqB,OAC3B0b,QAASlF,aAAW9gC,EAASgmC,SAC7BC,UAAWjmC,EAASkmC,kBAAoBlmC,EAASkmC,iBAAiBC,UAGvDC,EAAmB,SAAC3V,GAAD,MAAyC,CACvE5iB,IAAKizB,aAAWrQ,EAAW7qB,KAC3BgT,OAAQ,CAAC,CAAElH,GAAIovB,aAAWrQ,EAAW7qB,KAAM7C,KAAM0tB,EAAW1tB,OAC5DA,KAAM0tB,EAAW1tB,KACjB4nB,UAAWmW,aAAWrQ,EAAW9F,WACjCC,WAAYkW,aAAWrQ,EAAW7F,YAClCC,SAAUiW,aAAWrQ,EAAW5F,UAChC8R,QAASmE,aAAWrQ,EAAWkM,SAC/B7U,OAAQ,GACRwY,aAAcQ,aAAWrQ,EAAW6P,cACpCE,KAAMM,aAAWrQ,EAAW+P,MAC5BthC,MAAO4hC,aAAWrQ,EAAWvxB,OAC7ByhC,QAASG,aAAWrQ,EAAWkQ,SAC/BD,WAAYI,aAAWrQ,EAAWiQ,YAClC5U,MAAOgV,aAAWrQ,EAAW3E,OAC7BxB,MAAOwW,aAAWrQ,EAAWnG,OAC7B0b,QAASlF,aAAWrQ,EAAWuV,SAC/BC,UAAW,CAAC,eAAgB,OAAQ,QAAS,UAAW,aAAc,QAAS,QAAS,c","file":"static/js/main.9157412a.chunk.js","sourcesContent":["import i18n from 'i18next';\r\nimport { initReactI18next } from 'react-i18next';\r\n\r\nconst resources = {\r\n en: {\r\n translation: {\r\n 'Welcome to React': 'Welcome to React and react-i18next'\r\n }\r\n },\r\n fr: {\r\n translation: {\r\n 'Welcome to React': 'Bienvenue à React et react-i18next'\r\n }\r\n }\r\n};\r\n\r\ni18n\r\n .use(initReactI18next)\r\n .init({\r\n resources,\r\n lng: 'en',\r\n fallbackLng: 'en',\r\n interpolation: {\r\n escapeValue: false\r\n }\r\n });\r\n","import { useEffect } from 'react';\r\nimport type { FC, ReactNode } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport createCache from '@emotion/cache';\r\nimport { CacheProvider } from '@emotion/react';\r\nimport stylisRTLPlugin from 'stylis-plugin-rtl';\r\n\r\ninterface RTLProps {\r\n children: ReactNode;\r\n direction: 'ltr' | 'rtl';\r\n}\r\n\r\nconst styleCache = () => createCache({\r\n key: 'rtl',\r\n prepend: true,\r\n // We have to temporary ignore this due to incorrect definitions\r\n // in the stylis-plugin-rtl module\r\n // @see https://github.com/styled-components/stylis-plugin-rtl/issues/23\r\n // @ts-ignore\r\n stylisPlugins: [stylisRTLPlugin]\r\n});\r\n\r\nconst RTL: FC = (props) => {\r\n const { children, direction } = props;\r\n\r\n useEffect(() => {\r\n document.dir = direction;\r\n }, [direction]);\r\n\r\n if (direction === 'rtl') {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n }\r\n\r\n return <>{children};\r\n};\r\n\r\nRTL.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n direction: PropTypes.oneOf(['ltr', 'rtl'])\r\n};\r\n\r\nexport default RTL;\r\n","import { useEffect } from 'react';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\nconst useScrollReset = (): null => {\r\n const { pathname } = useLocation();\r\n\r\n useEffect(() => {\r\n window.scrollTo(0, 0);\r\n }, [pathname]);\r\n\r\n return null;\r\n};\r\n\r\nexport default useScrollReset;\r\n","export const THEMES = {\r\n LIGHT: 'LIGHT',\r\n DARK: 'DARK',\r\n NATURE: 'NATURE',\r\n TOPBAR: 'TOPBAR',\r\n CUSTOM: 'CUSTOM'\r\n};\r\n","import { createContext, useEffect, useState } from 'react';\r\nimport type { FC, ReactNode } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { THEMES } from '../constants';\r\n\r\ninterface Settings {\r\n compact?: boolean;\r\n direction?: 'ltr' | 'rtl';\r\n responsiveFontSizes?: boolean;\r\n roundedCorners?: boolean;\r\n theme?: string;\r\n}\r\n\r\nexport interface SettingsContextValue {\r\n settings: Settings;\r\n saveSettings: (update: Settings) => void;\r\n}\r\n\r\ninterface SettingsProviderProps {\r\n children?: ReactNode;\r\n}\r\n\r\nconst initialSettings: Settings = {\r\n compact: true,\r\n direction: 'ltr',\r\n responsiveFontSizes: true,\r\n roundedCorners: true,\r\n theme: THEMES.NATURE\r\n};\r\n\r\nexport const restoreSettings = (): Settings | null => initialSettings;\r\n\r\nexport const storeSettings = (settings: Settings): void => {\r\n window.localStorage.setItem('settings', JSON.stringify(settings));\r\n};\r\n\r\nconst SettingsContext = createContext({\r\n settings: initialSettings,\r\n saveSettings: () => {}\r\n});\r\n\r\nexport const SettingsProvider: FC = (props) => {\r\n const { children } = props;\r\n const [settings, setSettings] = useState(initialSettings);\r\n\r\n useEffect(() => {\r\n const restoredSettings = restoreSettings();\r\n\r\n if (restoredSettings) {\r\n setSettings(restoredSettings);\r\n }\r\n }, []);\r\n\r\n const saveSettings = (updatedSettings: Settings): void => {\r\n setSettings(updatedSettings);\r\n storeSettings(updatedSettings);\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nSettingsProvider.propTypes = {\r\n children: PropTypes.node.isRequired\r\n};\r\n\r\nexport const SettingsConsumer = SettingsContext.Consumer;\r\n\r\nexport default SettingsContext;\r\n","import { useContext } from 'react';\r\nimport SettingsContext from 'src/contexts/SettingsContext';\r\nimport type { SettingsContextValue } from 'src/contexts/SettingsContext';\r\n\r\nconst useSettings = (): SettingsContextValue => useContext(SettingsContext);\r\n\r\nexport default useSettings;\r\n","import type { Shadows } from '@material-ui/core/styles/shadows';\r\n\r\nexport const lightShadows: Shadows = [\r\n 'none',\r\n '0px 1px 2px rgba(0, 0, 0, 0.12), 0px 0px 0px 1px rgba(0, 0, 0, 0.05)',\r\n '0px 2px 4px rgba(0, 0, 0, 0.15), 0px 0px 0px 1px rgba(0, 0, 0, 0.05)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 3px 4px -2px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 3px 4px -2px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 4px 6px -2px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 4px 6px -2px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 4px 8px -2px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 5px 8px -2px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 6px 12px -4px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 7px 12px -4px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 6px 16px -4px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 7px 16px -4px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 8px 18px -8px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 9px 18px -8px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 10px 20px -8px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 11px 20px -8px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 12px 22px -8px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 13px 22px -8px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 14px 24px -8px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 16px 28px -8px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 18px 30px -8px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 20px 32px -8px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 22px 34px -8px rgba(0,0,0,0.25)',\r\n '0 0 1px 0 rgba(0,0,0,0.31), 0 24px 36px -8px rgba(0,0,0,0.25)'\r\n];\r\n\r\nexport const darkShadows: Shadows = [\r\n 'none',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 3px 4px -2px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 2px 2px -2px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 3px 4px -2px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 3px 4px -2px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 4px 6px -2px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 4px 6px -2px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 4px 8px -2px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 5px 8px -2px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 6px 12px -4px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 7px 12px -4px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 6px 16px -4px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 7px 16px -4px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 8px 18px -8px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 9px 18px -8px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 10px 20px -8px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 11px 20px -8px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 12px 22px -8px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 13px 22px -8px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 14px 24px -8px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 16px 28px -8px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 18px 30px -8px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 20px 32px -8px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 22px 34px -8px rgba(0,0,0,0.50)',\r\n '0 0 1px 0 rgba(0,0,0,0.70), 0 24px 36px -8px rgba(0,0,0,0.50)'\r\n];\r\n\r\nexport const lightShadows2: Shadows = [\r\n 'none',\r\n '0px 2px 1px -1px rgba(145, 158, 171, 0.2),0px 1px 1px 0px rgba(145, 158, 171, 0.14),0px 1px 3px 0px rgba(145, 158, 171, 0.12)',\r\n '0px 3px 1px -2px rgba(145, 158, 171, 0.2),0px 2px 2px 0px rgba(145, 158, 171, 0.14),0px 1px 5px 0px rgba(145, 158, 171, 0.12)',\r\n '0px 3px 3px -2px rgba(145, 158, 171, 0.2),0px 3px 4px 0px rgba(145, 158, 171, 0.14),0px 1px 8px 0px rgba(145, 158, 171, 0.12)',\r\n '0px 2px 4px -1px rgba(145, 158, 171, 0.2),0px 4px 5px 0px rgba(145, 158, 171, 0.14),0px 1px 10px 0px rgba(145, 158, 171, 0.12)',\r\n '0px 3px 5px -1px rgba(145, 158, 171, 0.2),0px 5px 8px 0px rgba(145, 158, 171, 0.14),0px 1px 14px 0px rgba(145, 158, 171, 0.12)',\r\n '0px 3px 5px -1px rgba(145, 158, 171, 0.2),0px 6px 10px 0px rgba(145, 158, 171, 0.14),0px 1px 18px 0px rgba(145, 158, 171, 0.12)',\r\n '0px 4px 5px -2px rgba(145, 158, 171, 0.2),0px 7px 10px 1px rgba(145, 158, 171, 0.14),0px 2px 16px 1px rgba(145, 158, 171, 0.12)',\r\n '0px 5px 5px -3px rgba(145, 158, 171, 0.2),0px 8px 10px 1px rgba(145, 158, 171, 0.14),0px 3px 14px 2px rgba(145, 158, 171, 0.12)',\r\n '0px 5px 6px -3px rgba(145, 158, 171, 0.2),0px 9px 12px 1px rgba(145, 158, 171, 0.14),0px 3px 16px 2px rgba(145, 158, 171, 0.12)',\r\n '0px 6px 6px -3px rgba(145, 158, 171, 0.2),0px 10px 14px 1px rgba(145, 158, 171, 0.14),0px 4px 18px 3px rgba(145, 158, 171, 0.12)',\r\n '0px 6px 7px -4px rgba(145, 158, 171, 0.2),0px 11px 15px 1px rgba(145, 158, 171, 0.14),0px 4px 20px 3px rgba(145, 158, 171, 0.12)',\r\n '0px 7px 8px -4px rgba(145, 158, 171, 0.2),0px 12px 17px 2px rgba(145, 158, 171, 0.14),0px 5px 22px 4px rgba(145, 158, 171, 0.12)',\r\n '0px 7px 8px -4px rgba(145, 158, 171, 0.2),0px 13px 19px 2px rgba(145, 158, 171, 0.14),0px 5px 24px 4px rgba(145, 158, 171, 0.12)',\r\n '0px 7px 9px -4px rgba(145, 158, 171, 0.2),0px 14px 21px 2px rgba(145, 158, 171, 0.14),0px 5px 26px 4px rgba(145, 158, 171, 0.12)',\r\n '0px 8px 9px -5px rgba(145, 158, 171, 0.2),0px 15px 22px 2px rgba(145, 158, 171, 0.14),0px 6px 28px 5px rgba(145, 158, 171, 0.12)',\r\n '0px 8px 10px -5px rgba(145, 158, 171, 0.2),0px 16px 24px 2px rgba(145, 158, 171, 0.14),0px 6px 30px 5px rgba(145, 158, 171, 0.12)',\r\n '0px 8px 11px -5px rgba(145, 158, 171, 0.2),0px 17px 26px 2px rgba(145, 158, 171, 0.14),0px 6px 32px 5px rgba(145, 158, 171, 0.12)',\r\n '0px 9px 11px -5px rgba(145, 158, 171, 0.2),0px 18px 28px 2px rgba(145, 158, 171, 0.14),0px 7px 34px 6px rgba(145, 158, 171, 0.12)',\r\n '0px 9px 12px -6px rgba(145, 158, 171, 0.2),0px 19px 29px 2px rgba(145, 158, 171, 0.14),0px 7px 36px 6px rgba(145, 158, 171, 0.12)',\r\n '0px 10px 13px -6px rgba(145, 158, 171, 0.2),0px 20px 31px 3px rgba(145, 158, 171, 0.14),0px 8px 38px 7px rgba(145, 158, 171, 0.12)',\r\n '0px 10px 13px -6px rgba(145, 158, 171, 0.2),0px 21px 33px 3px rgba(145, 158, 171, 0.14),0px 8px 40px 7px rgba(145, 158, 171, 0.12)',\r\n '0px 10px 14px -6px rgba(145, 158, 171, 0.2),0px 22px 35px 3px rgba(145, 158, 171, 0.14),0px 8px 42px 7px rgba(145, 158, 171, 0.12)',\r\n '0px 11px 14px -7px rgba(145, 158, 171, 0.2),0px 23px 36px 3px rgba(145, 158, 171, 0.14),0px 9px 44px 8px rgba(145, 158, 171, 0.12)',\r\n '0px 11px 15px -7px rgba(145, 158, 171, 0.2),0px 24px 38px 3px rgba(145, 158, 171, 0.14),0px 9px 46px 8px rgba(145, 158, 171, 0.12)'\r\n];\r\n\r\nexport const darkShadows2: Shadows = [\r\n 'none',\r\n '0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0, 0, 0, 0.12)',\r\n '0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12)',\r\n '0px 3px 3px -2px rgba(0, 0, 0, 0.2),0px 3px 4px 0px rgba(0, 0, 0, 0.14),0px 1px 8px 0px rgba(0, 0, 0, 0.12)',\r\n '0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)',\r\n '0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 5px 8px 0px rgba(0, 0, 0, 0.14),0px 1px 14px 0px rgba(0, 0, 0, 0.12)',\r\n '0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0, 0, 0, 0.12)',\r\n '0px 4px 5px -2px rgba(0, 0, 0, 0.2),0px 7px 10px 1px rgba(0, 0, 0, 0.14),0px 2px 16px 1px rgba(0, 0, 0, 0.12)',\r\n '0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0, 0, 0, 0.12)',\r\n '0px 5px 6px -3px rgba(0, 0, 0, 0.2),0px 9px 12px 1px rgba(0, 0, 0, 0.14),0px 3px 16px 2px rgba(0, 0, 0, 0.12)',\r\n '0px 6px 6px -3px rgba(0, 0, 0, 0.2),0px 10px 14px 1px rgba(0, 0, 0, 0.14),0px 4px 18px 3px rgba(0, 0, 0, 0.12)',\r\n '0px 6px 7px -4px rgba(0, 0, 0, 0.2),0px 11px 15px 1px rgba(0, 0, 0, 0.14),0px 4px 20px 3px rgba(0, 0, 0, 0.12)',\r\n '0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 12px 17px 2px rgba(0, 0, 0, 0.14),0px 5px 22px 4px rgba(0, 0, 0, 0.12)',\r\n '0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 13px 19px 2px rgba(0, 0, 0, 0.14),0px 5px 24px 4px rgba(0, 0, 0, 0.12)',\r\n '0px 7px 9px -4px rgba(0, 0, 0, 0.2),0px 14px 21px 2px rgba(0, 0, 0, 0.14),0px 5px 26px 4px rgba(0, 0, 0, 0.12)',\r\n '0px 8px 9px -5px rgba(0, 0, 0, 0.2),0px 15px 22px 2px rgba(0, 0, 0, 0.14),0px 6px 28px 5px rgba(0, 0, 0, 0.12)',\r\n '0px 8px 10px -5px rgba(0, 0, 0, 0.2),0px 16px 24px 2px rgba(0, 0, 0, 0.14),0px 6px 30px 5px rgba(0, 0, 0, 0.12)',\r\n '0px 8px 11px -5px rgba(0, 0, 0, 0.2),0px 17px 26px 2px rgba(0, 0, 0, 0.14),0px 6px 32px 5px rgba(0, 0, 0, 0.12)',\r\n '0px 9px 11px -5px rgba(0, 0, 0, 0.2),0px 18px 28px 2px rgba(0, 0, 0, 0.14),0px 7px 34px 6px rgba(0, 0, 0, 0.12)',\r\n '0px 9px 12px -6px rgba(0, 0, 0, 0.2),0px 19px 29px 2px rgba(0, 0, 0, 0.14),0px 7px 36px 6px rgba(0, 0, 0, 0.12)',\r\n '0px 10px 13px -6px rgba(0, 0, 0, 0.2),0px 20px 31px 3px rgba(0, 0, 0, 0.14),0px 8px 38px 7px rgba(0, 0, 0, 0.12)',\r\n '0px 10px 13px -6px rgba(0, 0, 0, 0.2),0px 21px 33px 3px rgba(0, 0, 0, 0.14),0px 8px 40px 7px rgba(0, 0, 0, 0.12)',\r\n '0px 10px 14px -6px rgba(0, 0, 0, 0.2),0px 22px 35px 3px rgba(0, 0, 0, 0.14),0px 8px 42px 7px rgba(0, 0, 0, 0.12)',\r\n '0px 11px 14px -7px rgba(0, 0, 0, 0.2),0px 23px 36px 3px rgba(0, 0, 0, 0.14),0px 9px 44px 8px rgba(0, 0, 0, 0.12)',\r\n '0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0, 0, 0, 0.12)'\r\n];\r\n","import merge from 'lodash/merge';\r\nimport { createTheme, responsiveFontSizes } from '@material-ui/core/styles';\r\nimport type { Direction, Theme, ThemeOptions } from '@material-ui/core';\r\nimport { THEMES } from '../constants';\r\nimport { lightShadows, darkShadows } from './shadows';\r\n\r\ninterface ThemeConfig {\r\n direction?: Direction;\r\n responsiveFontSizes?: boolean;\r\n roundedCorners?: boolean;\r\n theme?: string;\r\n}\r\n\r\nconst baseOptions: ThemeOptions = {\r\n direction: 'ltr',\r\n components: {\r\n MuiAvatar: {\r\n styleOverrides: {\r\n fallback: {\r\n height: '75%',\r\n width: '75%'\r\n }\r\n }\r\n },\r\n MuiButton: {\r\n styleOverrides: {\r\n root: {\r\n textTransform: 'none'\r\n }\r\n }\r\n },\r\n MuiCssBaseline: {\r\n styleOverrides: {\r\n '*': {\r\n boxSizing: 'border-box'\r\n },\r\n html: {\r\n MozOsxFontSmoothing: 'grayscale',\r\n WebkitFontSmoothing: 'antialiased',\r\n height: '100%',\r\n width: '100%'\r\n },\r\n body: {\r\n height: '100%'\r\n },\r\n '#root': {\r\n height: '100%'\r\n },\r\n '#nprogress .bar': {\r\n zIndex: '2000 !important'\r\n }\r\n }\r\n },\r\n MuiCardHeader: {\r\n defaultProps: {\r\n titleTypographyProps: {\r\n variant: 'h6'\r\n }\r\n }\r\n },\r\n MuiLinearProgress: {\r\n styleOverrides: {\r\n root: {\r\n // borderRadius: 1,\r\n borderRadius: 0,\r\n overflow: 'hidden'\r\n }\r\n }\r\n },\r\n MuiListItemIcon: {\r\n styleOverrides: {\r\n root: {\r\n minWidth: 'auto',\r\n marginRight: '16px'\r\n }\r\n }\r\n },\r\n MuiPaper: {\r\n styleOverrides: {\r\n root: {\r\n backgroundImage: 'none'\r\n }\r\n }\r\n }\r\n },\r\n typography: {\r\n button: {\r\n fontWeight: 300\r\n },\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\"',\r\n h1: {\r\n fontWeight: 600,\r\n fontSize: '3.5rem'\r\n },\r\n h2: {\r\n fontWeight: 600,\r\n fontSize: '3rem'\r\n },\r\n h3: {\r\n fontWeight: 600,\r\n fontSize: '2.25rem'\r\n },\r\n h4: {\r\n fontWeight: 600,\r\n fontSize: '2rem'\r\n },\r\n h5: {\r\n fontWeight: 600,\r\n fontSize: '1.5rem'\r\n },\r\n h6: {\r\n fontWeight: 300,\r\n fontSize: '1.125rem'\r\n },\r\n overline: {\r\n fontWeight: 300\r\n }\r\n }\r\n};\r\n// export interface PaletteOptions {\r\n// primary?: PaletteColorOptions;\r\n// secondary?: PaletteColorOptions;\r\n// error?: PaletteColorOptions;\r\n// warning?: PaletteColorOptions;\r\n// info?: PaletteColorOptions;\r\n// success?: PaletteColorOptions;\r\n// mode?: PaletteMode;\r\n// tonalOffset?: PaletteTonalOffset;\r\n// contrastThreshold?: number;\r\n// common?: Partial;\r\n// grey?: ColorPartial;\r\n// text?: Partial;\r\n// divider?: string;\r\n// action?: Partial;\r\n// background?: Partial;\r\n// getContrastText?: (background: string) => string;\r\n// }\r\nconst themesOptions: Record = {\r\n [THEMES.TOPBAR]: {\r\n components: {\r\n MuiInputBase: {\r\n styleOverrides: {\r\n input: {\r\n '&::placeholder': {\r\n opacity: 0.86,\r\n color: '#42526e'\r\n },\r\n WebkitBoxShadow: '#fff'\r\n }\r\n }\r\n }\r\n },\r\n palette: {\r\n action: {\r\n active: '#6b778c'\r\n },\r\n background: {\r\n default: '#f4f5f7',\r\n paper: '#ffffff'\r\n },\r\n error: {\r\n contrastText: '#ffffff',\r\n main: '#f44336'\r\n },\r\n mode: 'light',\r\n primary: {\r\n contrastText: '#ffffff',\r\n main: '#fff'// '#008cff' // '#5664d2'\r\n },\r\n success: {\r\n contrastText: '#ffffff',\r\n main: '#4caf50'\r\n },\r\n text: {\r\n primary: '#172b4d',\r\n secondary: '#6b778c'\r\n },\r\n warning: {\r\n contrastText: '#ffffff',\r\n main: '#ff9800'\r\n }\r\n },\r\n shadows: lightShadows\r\n },\r\n [THEMES.CUSTOM]: {\r\n components: {\r\n MuiInputBase: {\r\n styleOverrides: {\r\n input: {\r\n '&::placeholder': {\r\n opacity: 0.86,\r\n color: '#42526e'\r\n },\r\n WebkitBoxShadow: '#000'\r\n }\r\n }\r\n },\r\n MuiButton: {\r\n styleOverrides: {\r\n label: {\r\n paddingLeft: 7,\r\n paddingRight: 7\r\n }\r\n }\r\n },\r\n MuiCard: {\r\n styleOverrides: {\r\n root: {\r\n boxShadow: 'none',\r\n },\r\n }\r\n },\r\n MuiTextField: {\r\n styleOverrides: {\r\n root: {\r\n '& .searchInput': {\r\n '& fieldset': {\r\n borderColor: '#fff',\r\n },\r\n '&:hover fieldset': {\r\n borderColor: '#01a65b'\r\n },\r\n '&.Mui-focused fieldset': {\r\n borderColor: '#01a65b',\r\n },\r\n }\r\n }\r\n }\r\n },\r\n MuiListItem: {\r\n styleOverrides: {\r\n root: {\r\n ':hover': {\r\n backgroundColor: '#e3f2fd'\r\n }\r\n },\r\n // selected: {\r\n // backgroundColor: '#addaf8'\r\n // }\r\n }\r\n }\r\n },\r\n palette: {\r\n action: {\r\n active: '#6b778c'\r\n },\r\n background: {\r\n default: '#ffffff', // '#f3f2ef',\r\n paper: '#ffffff'\r\n },\r\n divider: '#c4c4c4',\r\n error: {\r\n contrastText: '#ffffff',\r\n main: '#dc3535'\r\n },\r\n mode: 'light',\r\n secondary: {\r\n contrastText: '#ffffff',\r\n main: '#ffadbc' // '#F37878' // '#A2728D' // '#EAAFAD' // '#EACBC3' // '#5F5884' // '#A04C59' // '#798D97' // '#765f50' // '#f08585' // '#ffad98'\r\n },\r\n primary: {\r\n contrastText: '#ffffff',\r\n main: '#1695ea' // '#01a65b' // '#1B74E4'// '#008cff' // '#5664d2'\r\n },\r\n success: {\r\n contrastText: '#ffffff',\r\n main: '#4caf50'\r\n },\r\n text: {\r\n primary: '#172b4d',\r\n secondary: '#5b677c' // '#6b778c'\r\n },\r\n warning: {\r\n contrastText: '#ffffff',\r\n main: '#ffe9b1'\r\n }\r\n },\r\n shadows: lightShadows\r\n },\r\n [THEMES.LIGHT]: {\r\n components: {\r\n MuiInputBase: {\r\n styleOverrides: {\r\n input: {\r\n '&::placeholder': {\r\n opacity: 0.86,\r\n color: '#42526e'\r\n }\r\n }\r\n }\r\n }\r\n },\r\n palette: {\r\n action: {\r\n active: '#6b778c'\r\n },\r\n background: {\r\n default: '#f4f5f7',\r\n paper: '#ffffff'\r\n },\r\n error: {\r\n contrastText: '#ffffff',\r\n main: '#f44336'\r\n },\r\n mode: 'light',\r\n primary: {\r\n contrastText: '#ffffff',\r\n main: '#5664d2'\r\n },\r\n success: {\r\n contrastText: '#ffffff',\r\n main: '#4caf50'\r\n },\r\n text: {\r\n primary: '#172b4d',\r\n secondary: '#6b778c'\r\n },\r\n warning: {\r\n contrastText: '#ffffff',\r\n main: '#ff9800'\r\n }\r\n },\r\n shadows: lightShadows\r\n },\r\n [THEMES.DARK]: {\r\n components: {\r\n MuiTableCell: {\r\n styleOverrides: {\r\n root: {\r\n borderBottom: '1px solid rgba(145, 158, 171, 0.24)'\r\n }\r\n }\r\n }\r\n },\r\n palette: {\r\n background: {\r\n default: '#171c24',\r\n paper: '#222b36'\r\n },\r\n divider: 'rgba(145, 158, 171, 0.24)',\r\n error: {\r\n contrastText: '#ffffff',\r\n main: '#f44336'\r\n },\r\n mode: 'dark',\r\n primary: {\r\n contrastText: '#ffffff',\r\n main: '#688eff'\r\n },\r\n success: {\r\n contrastText: '#ffffff',\r\n main: '#4caf50'\r\n },\r\n text: {\r\n primary: '#ffffff',\r\n secondary: '#919eab'\r\n },\r\n warning: {\r\n contrastText: '#ffffff',\r\n main: '#ff9800'\r\n }\r\n },\r\n shadows: darkShadows\r\n },\r\n [THEMES.NATURE]: {\r\n components: {\r\n MuiTableCell: {\r\n styleOverrides: {\r\n root: {\r\n borderBottom: '1px solid rgba(145, 158, 171, 0.24)'\r\n }\r\n }\r\n }\r\n },\r\n palette: {\r\n background: {\r\n default: '#1c2531',\r\n paper: '#293142'\r\n },\r\n divider: 'rgba(145, 158, 171, 0.24)',\r\n error: {\r\n contrastText: '#ffffff',\r\n main: '#f44336'\r\n },\r\n mode: 'dark',\r\n primary: {\r\n contrastText: '#ffffff',\r\n main: '#01ab56'\r\n },\r\n success: {\r\n contrastText: '#ffffff',\r\n main: '#4caf50'\r\n },\r\n text: {\r\n primary: '#ffffff',\r\n secondary: '#919eab'\r\n },\r\n warning: {\r\n contrastText: '#ffffff',\r\n main: '#ff9800'\r\n }\r\n },\r\n shadows: darkShadows\r\n }\r\n};\r\n\r\nexport const createCustomTheme = (config: ThemeConfig = {}): Theme => {\r\n let themeOptions = themesOptions[config.theme];\r\n\r\n if (!themeOptions) {\r\n console.warn(new Error(`The theme ${config.theme} is not valid`));\r\n themeOptions = themesOptions[THEMES.LIGHT];\r\n }\r\n\r\n let theme = createTheme(\r\n merge(\r\n {},\r\n baseOptions,\r\n themeOptions,\r\n {\r\n ...(\r\n config.roundedCorners && {\r\n shape: {\r\n // borderRadius: 16\r\n borderRadius: 5\r\n }\r\n }\r\n )\r\n },\r\n {\r\n direction: config.direction\r\n }\r\n )\r\n );\r\n\r\n if (config.responsiveFontSizes) {\r\n theme = responsiveFontSizes(theme);\r\n }\r\n\r\n return theme as Theme;\r\n};\r\n\r\n// theme index #01a65b -> #1695ea\r\n// text light bg color #e7f7f0 -> #e3f2fd\r\n// bgcolor #e3e8e3 -> #f3f2ef\r\n","import { useEffect, useRef, useState, useCallback } from 'react';\r\nimport type { FC } from 'react';\r\nimport {\r\n Box,\r\n CircularProgress,\r\n Divider,\r\n IconButton,\r\n MenuItem,\r\n Popover,\r\n ThemeProvider,\r\n Typography\r\n} from '@material-ui/core';\r\nimport PropTypes from 'prop-types';\r\nimport useSettings from 'src/hooks/useSettings';\r\nimport { createCustomTheme } from 'src/theme';\r\nimport { useDispatch, useSelector } from 'src/store';\r\nimport useMounted from 'src/hooks/useMounted';\r\nimport { UserAvatar } from 'src/components/SmallUserInfo';\r\nimport { OrgMemberForOrg, Organization } from 'src/../../Common/Model/organization';\r\nimport Collapse from '@material-ui/core/Collapse';\r\nimport { orgToMiniUser, userToMiniUser } from 'src/utils/getUserMinInfo';\r\nimport 'src/theme/scrollbar.css';\r\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\r\nimport LogoutIcon from '@mui/icons-material/Logout';\r\nimport useAuth from 'src/hooks/useAuth';\r\nimport toast from 'react-hot-toast';\r\nimport { getActiveType, getActiveUserMinInfo } from 'src/utils/getActiveOrgInfo';\r\nimport getUserDisplayName from 'src/utils/getUserDisplayName';\r\nimport { ACCZIOM_CLIENT, ACCZIOM_MEMBER, tenary } from 'src/globals';\r\nimport { initializeStates } from 'src/worker/init';\r\nimport { useNavigate } from 'react-router-dom';\r\n\r\ninterface MeOrgsProps {\r\n orgs: Organization[];\r\n onMeClicked: () => void;\r\n onOrgClicked: (id: string) => Promise;\r\n opened: boolean;\r\n isSwitchingOrg: boolean;\r\n}\r\n\r\nconst MeOrgs: FC = ({ orgs, onMeClicked, onOrgClicked, opened, isSwitchingOrg }) => {\r\n const { activeOrgId } = useSelector((state) => state.organization);\r\n const activeUserMinInfo = getActiveUserMinInfo();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {getUserDisplayName(activeUserMinInfo)}\r\n \r\n \r\n \r\n \r\n {orgs.map((org) => {\r\n const orgMinInfo = orgToMiniUser(org);\r\n return (\r\n { await onOrgClicked(org.organizationId); }}\r\n sx={{\r\n pl: 6,\r\n pr: 3,\r\n py: 1.5\r\n }}\r\n disabled={isSwitchingOrg}\r\n >\r\n \r\n \r\n \r\n {getUserDisplayName(orgMinInfo)}\r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nMeOrgs.propTypes = {\r\n orgs: PropTypes.array.isRequired,\r\n onMeClicked: PropTypes.func.isRequired,\r\n onOrgClicked: PropTypes.func.isRequired,\r\n opened: PropTypes.bool.isRequired,\r\n isSwitchingOrg: PropTypes.bool.isRequired\r\n};\r\n\r\ninterface OrgTeamsProps {\r\n member: OrgMemberForOrg;\r\n onOrgClicked: (id: string) => Promise;\r\n isSwitchingOrg: boolean;\r\n}\r\n\r\nconst OrgTeams: FC = ({ member, onOrgClicked, isSwitchingOrg }) => {\r\n const { orgInfos, activeOrgId } = useSelector((state) => state.organization);\r\n const orgInfo = orgInfos.find((org) => org.organizationId === member.oid);\r\n\r\n return (\r\n \r\n { await onOrgClicked(orgInfo.organizationId); }}\r\n disabled={isSwitchingOrg}\r\n >\r\n \r\n \r\n \r\n {orgInfo.tradingName}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nOrgTeams.propTypes = {\r\n member: PropTypes.any.isRequired,\r\n onOrgClicked: PropTypes.func.isRequired,\r\n isSwitchingOrg: PropTypes.bool.isRequired\r\n};\r\n\r\ninterface OrgPopoverProps {\r\n loading: boolean;\r\n onChange: (oid: string) => Promise;\r\n isSwitchingOrg: boolean;\r\n}\r\n\r\nconst maxCount = 10;\r\n\r\nconst getPopHeight = (orgCount: number, teamCount: number, idx: number): number => {\r\n if (orgCount + teamCount > maxCount) {\r\n if (idx >= maxCount) return maxCount * 52;\r\n if (idx + teamCount >= maxCount) return (idx + 1) * 52 + (maxCount - 1 - idx) * 48;\r\n return teamCount * 48 + (maxCount - teamCount) * 52 + 52 + 1;\r\n }\r\n return orgCount * 52 + teamCount * 48 + 52 + 1;\r\n};\r\n\r\nconst OrgPopover: FC = ({ loading, onChange, isSwitchingOrg }) => {\r\n const { logout } = useAuth();\r\n const { settings } = useSettings();\r\n const mounted = useMounted();\r\n const dispatch = useDispatch();\r\n const navigate = useNavigate();\r\n const anchorRef = useRef(null);\r\n const { memberInfos, orgInfos, activeOrgId } = useSelector((state) => state.organization);\r\n const clientSupplierInfos = orgInfos.filter((org) => memberInfos.filter((member) => member.type === ACCZIOM_CLIENT).map((member) => member.oid).includes(org.organizationId));\r\n const clientSupplierIds = clientSupplierInfos.map((org) => org.organizationId);\r\n const { userInfo } = useSelector((state) => state.user);\r\n const [orgMenuOpen, setOrgMenuOpen] = useState(false);\r\n const [openedOrgId, setOpenedOrgId] = useState(activeOrgId);\r\n const [popHeight, setPopHeight] = useState(getPopHeight(\r\n clientSupplierIds.length > 0 ? memberInfos.length - clientSupplierIds.length + 1 : memberInfos.length,\r\n clientSupplierIds.length > 0 && clientSupplierIds.includes(openedOrgId) ? clientSupplierIds.length : 0,\r\n clientSupplierIds.length > 0 ? tenary(clientSupplierIds.includes(openedOrgId), 0, memberInfos.findIndex((member) => member.oid === openedOrgId) + 1) : memberInfos.findIndex((member) => member.oid === openedOrgId)\r\n ));\r\n\r\n const theme = createCustomTheme({\r\n direction: settings.direction,\r\n responsiveFontSizes: settings.responsiveFontSizes,\r\n roundedCorners: settings.roundedCorners,\r\n theme: 'CUSTOM'\r\n });\r\n\r\n const handleClickMe = (): void => {\r\n setOpenedOrgId(clientSupplierIds[0]);\r\n };\r\n\r\n const handleClickOrg = async (orgId: string): Promise => {\r\n setOpenedOrgId(orgId);\r\n if (activeOrgId !== orgId) await onChange(orgId);\r\n if (mounted.current) setOrgMenuOpen(false);\r\n };\r\n\r\n const handleLogout = useCallback(async (): Promise => {\r\n try {\r\n await logout();\r\n initializeStates(dispatch);\r\n navigate('/home');\r\n } catch (err) {\r\n console.log(err);\r\n toast.error('Unexpected error occured, Please try again!');\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (mounted.current) {\r\n setPopHeight(getPopHeight(\r\n clientSupplierIds.length > 0 ? memberInfos.length - clientSupplierIds.length + 1 : memberInfos.length,\r\n clientSupplierIds.length > 0 && clientSupplierIds.includes(openedOrgId) ? clientSupplierIds.length : 0,\r\n clientSupplierIds.length > 0 ? tenary(clientSupplierIds.includes(openedOrgId), 0, memberInfos.findIndex((member) => member.oid === openedOrgId) + 1) : memberInfos.findIndex((member) => member.oid === openedOrgId)\r\n ));\r\n }\r\n }, [mounted, memberInfos, openedOrgId]);\r\n\r\n useEffect(() => {\r\n if (mounted.current && orgMenuOpen) setOpenedOrgId(activeOrgId);\r\n }, [mounted, orgMenuOpen]);\r\n\r\n return (\r\n {\r\n if (!orgMenuOpen) setOrgMenuOpen(true);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {getUserDisplayName(userToMiniUser(userInfo))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n { setOrgMenuOpen(false); }}\r\n open={orgMenuOpen}\r\n PaperProps={{\r\n sx: {\r\n minWidth: 200,\r\n overflow: 'hidden',\r\n mt: 1\r\n }\r\n }}\r\n >\r\n \r\n {\r\n loading ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n {clientSupplierInfos.length > 0 && (\r\n \r\n )}\r\n {memberInfos.filter((member) => member.type === ACCZIOM_MEMBER).map((member) => (\r\n \r\n ))}\r\n \r\n \r\n thm.palette.secondary.main\r\n }\r\n }}\r\n >\r\n \r\n \r\n Sign Out\r\n \r\n \r\n \r\n \r\n )\r\n }\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nOrgPopover.propTypes = {\r\n loading: PropTypes.bool,\r\n onChange: PropTypes.func.isRequired,\r\n isSwitchingOrg: PropTypes.bool.isRequired\r\n};\r\n\r\nexport default OrgPopover;\r\n","import { useRef, useState } from 'react';\r\nimport type { FC } from 'react';\r\nimport {\r\n Box,\r\n Popover,\r\n Badge,\r\n Typography,\r\n MenuItem\r\n} from '@material-ui/core';\r\nimport PropTypes from 'prop-types';\r\nimport { tenary } from 'src/globals';\r\nimport { matchPath, useLocation, useNavigate } from 'react-router-dom';\r\nimport useMounted from 'src/hooks/useMounted';\r\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\r\n\r\ninterface SubItem {\r\n title: string;\r\n href?: string;\r\n onClick?: any;\r\n icon?: any;\r\n}\r\nexport interface Item {\r\n title: string;\r\n href?: string;\r\n onClick?: any;\r\n icon?: any;\r\n authRequired?: number;\r\n items?: SubItem[];\r\n}\r\n\r\ninterface NavMenuItemProps {\r\n data: Item;\r\n isHorizontal: boolean;\r\n value?: number;\r\n disabled?: boolean;\r\n}\r\n\r\nconst NavMenuItem: FC = (props) => {\r\n const navigate = useNavigate();\r\n const mounted = useMounted();\r\n const { pathname } = useLocation();\r\n const anchorRef = useRef(null);\r\n const { data, isHorizontal, value, disabled } = props;\r\n const { icon: Icon, title, href, onClick, items } = data;\r\n const [open, setOpen] = useState(false);\r\n const [status, setStatus] = useState('normal');\r\n\r\n const isSamePath = (path: string): boolean => {\r\n if (!path || ['/', '/home', '/login'].includes(path)) return false;\r\n return (!!matchPath({\r\n path,\r\n caseSensitive: false,\r\n end: false\r\n }, pathname));\r\n };\r\n const selected = !!href && isSamePath(href);\r\n\r\n const handleClose = (): void => {\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <>\r\n {\r\n event.stopPropagation();\r\n if (!disabled) setStatus('hover');\r\n }}\r\n onMouseLeave={(event) => {\r\n event.stopPropagation();\r\n if (!disabled) setStatus('normal');\r\n }}\r\n onMouseDown={(event) => {\r\n event.stopPropagation();\r\n if (!disabled) setStatus('down');\r\n }}\r\n onMouseUp={(event) => {\r\n event.stopPropagation();\r\n if (disabled) return;\r\n if (status !== 'down') return;\r\n if (items?.length > 0) {\r\n setOpen(true);\r\n setStatus('normal');\r\n } else {\r\n onClick?.();\r\n setStatus('normal');\r\n if (href) navigate(href);\r\n }\r\n }}\r\n style={{\r\n cursor: !disabled ? 'pointer' : 'default'\r\n }}\r\n sx={{\r\n py: isHorizontal ? 0.5 : 1,\r\n px: isHorizontal ? 1.5 : 1,\r\n borderRadius: 1,\r\n position: 'relative',\r\n transition: 'box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\r\n '::after': {\r\n content: '\"\"',\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: selected ? '#00000020' : '#00000000',\r\n position: 'absolute',\r\n left: '0px',\r\n top: '0px',\r\n zIndex: '-1',\r\n transition: 'background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\r\n borderRadius: 1\r\n },\r\n ...(selected && { boxShadow: '0px 1px 2px #0a164626' })\r\n }}\r\n >\r\n \r\n {value}\r\n \r\n ) : value\r\n }\r\n variant=\"dot\"\r\n color=\"error\"\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right'\r\n }}\r\n >\r\n theme.palette.divider,\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n mr: isHorizontal ? 0.5 : 0\r\n }}\r\n >\r\n \r\n \r\n \r\n theme.palette.divider\r\n }\r\n }}\r\n >\r\n \r\n {title}\r\n \r\n {items.length > 0 && (\r\n \r\n )}\r\n \r\n \r\n {items?.length > 0 && (\r\n \r\n {items.map((item) => {\r\n const SubIcon = item.icon as any;\r\n return (\r\n {\r\n event.stopPropagation();\r\n item.onClick?.();\r\n if (item.href) navigate(item.href);\r\n if (mounted.current) handleClose();\r\n }}\r\n sx={{\r\n px: 3,\r\n py: 1.5\r\n }}\r\n >\r\n \r\n \r\n \r\n {item.title}\r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nNavMenuItem.propTypes = {\r\n data: PropTypes.any,\r\n isHorizontal: PropTypes.bool,\r\n value: PropTypes.number,\r\n disabled: PropTypes.bool\r\n};\r\n\r\nexport default NavMenuItem;\r\n","import {\r\n Box,\r\n CircularProgress,\r\n TextField\r\n} from '@material-ui/core';\r\nimport { FC, useEffect, useState } from 'react';\r\nimport { BiSearch } from 'react-icons/bi';\r\nimport PropTypes from 'prop-types';\r\nimport { useLocation } from 'react-router-dom';\r\nimport useMounted from 'src/hooks/useMounted';\r\nimport { BACKGROUND_DEEP } from 'src/globals';\r\n\r\nconst SearchInput: FC<{\r\n placeholder?: string;\r\n onSearch: (query: string) => void;\r\n hasButton: boolean;\r\n isSearching?: boolean;\r\n disabled?: boolean;\r\n}> = ({\r\n placeholder,\r\n onSearch,\r\n hasButton,\r\n isSearching,\r\n disabled\r\n}) => {\r\n const mounted = useMounted();\r\n const { pathname } = useLocation();\r\n const [query, setQuery] = useState('');\r\n const [isFocused, setFocused] = useState(false);\r\n\r\n useEffect(() => {\r\n if (mounted.current) setQuery('');\r\n }, [mounted, pathname]);\r\n\r\n return (\r\n \r\n \r\n setFocused(true)}\r\n onBlur={() => setFocused(false)}\r\n InputProps={{\r\n sx: {\r\n fontSize: 15,\r\n bgcolor: 'background.paper',\r\n ...(hasButton && { pr: 4 })\r\n }\r\n }}\r\n onChange={(e) => {\r\n setQuery(e.target.value);\r\n if (!hasButton) onSearch(e.target.value);\r\n }}\r\n onKeyDown={async (e) => {\r\n if ((e.code === 'Enter' || e.code === 'NumpadEnter')) {\r\n onSearch(query);\r\n }\r\n }}\r\n placeholder={disabled ? '' : placeholder}\r\n value={query}\r\n size=\"small\"\r\n variant=\"outlined\"\r\n disabled={isSearching || disabled}\r\n />\r\n {!disabled && hasButton && (\r\n \r\n {\r\n if (!isSearching) onSearch(query);\r\n }}\r\n >\r\n {isSearching ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nSearchInput.propTypes = {\r\n placeholder: PropTypes.string,\r\n onSearch: PropTypes.func.isRequired,\r\n hasButton: PropTypes.bool.isRequired,\r\n isSearching: PropTypes.bool,\r\n disabled: PropTypes.bool\r\n};\r\n\r\nexport default SearchInput;\r\n","import type { FC } from 'react';\r\nimport { useState } from 'react';\r\nimport { Box } from '@material-ui/core';\r\nimport PropTypes from 'prop-types';\r\nimport { useNavigate } from 'react-router-dom';\r\n\r\ninterface NavItemProps {\r\n sourcePath: string;\r\n altName: string;\r\n height?: number;\r\n href?: string;\r\n}\r\n\r\nconst NavItem: FC = ({ sourcePath, altName, height, href }) => {\r\n const navigate = useNavigate();\r\n const [status, setStatus] = useState('normal');\r\n\r\n return (\r\n setStatus('hover')}\r\n onMouseLeave={() => setStatus('normal')}\r\n onMouseDown={() => setStatus('down')}\r\n onMouseUp={() => {\r\n if (status !== 'down') return;\r\n setStatus('normal');\r\n navigate(href);\r\n }}\r\n style={{\r\n cursor: 'pointer'\r\n }}\r\n sx={{\r\n pt: status === 'down' ? '9px' : '8px',\r\n pb: status === 'down' ? '7px' : '8px',\r\n pl: status === 'down' ? '9px' : '8px',\r\n pr: status === 'down' ? '7px' : '8px',\r\n borderRadius: 1,\r\n position: 'relative',\r\n transition: 'box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\r\n '::after': {\r\n content: '\"\"',\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: status === 'down' || status === 'hover' ? '#00000020' : '#00000000',\r\n position: 'absolute',\r\n left: '0px',\r\n top: '0px',\r\n zIndex: '-1',\r\n transition: 'background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\r\n borderRadius: 1\r\n },\r\n ...((status === 'down' || status === 'hover') && { boxShadow: '0px 1px 2px #0a164626' })\r\n }}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nNavItem.propTypes = {\r\n sourcePath: PropTypes.string,\r\n href: PropTypes.string,\r\n height: PropTypes.number,\r\n altName: PropTypes.string\r\n};\r\n\r\nexport default NavItem;\r\n","import { useState, useEffect } from 'react';\r\nimport type { FC } from 'react';\r\nimport { AppBar, Box, Typography } from '@material-ui/core';\r\nimport { experimentalStyled } from '@material-ui/core/styles';\r\nimport { useDispatch, useSelector } from 'src/store';\r\nimport { useLocation, useNavigate } from 'react-router-dom';\r\nimport useMounted from 'src/hooks/useMounted';\r\nimport { setActiveOrgId, setOrgStructures } from 'src/slices/organization';\r\nimport { initChatApi, initNeedReloads } from 'src/worker/init';\r\nimport { lambdaGetOrgActivatedMembersOfUser } from 'src/aws/lambdaDispatch';\r\nimport toast from 'react-hot-toast';\r\nimport OrgPopover from './OrgPopover';\r\nimport RateReviewIcon from '@mui/icons-material/RateReview';\r\nimport { NAVBAR_HEIGHT, REQUIRE_AUTH_MODE, REQUIRE_NONE_MODE, REQUIRE_NOT_AUTH_MODE } from 'src/globals';\r\nimport useSearch from 'src/hooks/useSearch';\r\nimport getUserDisplayName from 'src/utils/getUserDisplayName';\r\nimport AccountCircleOutlinedIcon from '@mui/icons-material/AccountCircleOutlined';\r\nimport NavMenuItem, { Item } from 'src/components/interact/NavMenuItem';\r\nimport TravelExploreIcon from '@mui/icons-material/TravelExplore';\r\nimport SearchInput from './SearchInput';\r\nimport useAuth from 'src/hooks/useAuth';\r\nimport NavItem from '../interact/NavItem';\r\nimport { UserAvatar } from '../SmallUserInfo';\r\nimport { getActiveOrgMinInfo } from 'src/utils/getActiveOrgInfo';\r\nimport CircleType from 'circletype';\r\nimport { cleanTwilioStatus } from 'src/slices/chat';\r\nimport { LoadingStatus } from 'src/slices/user';\r\n\r\nconst AccziomLogoIcon: FC<{ style: { width: string; height: string; } }> = ({ style }) => (\r\n \r\n \r\n \r\n);\r\n\r\nconst DashboardItems: Item[] = [\r\n {\r\n title: 'Go To Accziom',\r\n href: null,\r\n onClick: null,\r\n authRequired: REQUIRE_NONE_MODE,\r\n icon: AccziomLogoIcon,\r\n items: [],\r\n },\r\n {\r\n title: 'Public Forum',\r\n href: '/public',\r\n onClick: null,\r\n authRequired: REQUIRE_NONE_MODE,\r\n icon: TravelExploreIcon,\r\n items: []\r\n },\r\n {\r\n title: 'My Channels',\r\n href: '/mine',\r\n onClick: null,\r\n authRequired: REQUIRE_AUTH_MODE,\r\n icon: RateReviewIcon,\r\n items: []\r\n },\r\n {\r\n title: 'Sign In',\r\n href: '/login',\r\n onClick: null,\r\n authRequired: REQUIRE_NOT_AUTH_MODE,\r\n icon: AccountCircleOutlinedIcon,\r\n items: []\r\n }\r\n];\r\n\r\nconst searchBarUrls = {\r\n notAuthUrlsForSame: [],\r\n notAuthUrlsForStart: [\r\n '/public'\r\n ],\r\n authUrlsForSame: [],\r\n authUrlsForStart: [\r\n '/public',\r\n '/mine'\r\n ],\r\n};\r\n\r\nconst DashboardNavbarRoot = experimentalStyled(AppBar)(\r\n ({ theme }) => ({\r\n backgroundColor: theme.palette.background.paper,\r\n zIndex: theme.zIndex.drawer + 100,\r\n boxShadow: '3px 0px 5px rgba(0, 0, 0, .5)',\r\n // borderColor: theme.palette.background.paper,\r\n // borderBottomWidth: '1px',\r\n // borderBottomStyle: 'solid'\r\n })\r\n);\r\n\r\nconst LARGE_LOGO_SIZE = 64;\r\nconst TITLE_TEXT_RADIUS = 20;\r\nconst LOGO_BACK_SIZE = NAVBAR_HEIGHT;\r\nconst SHADOW_SIZE = 10;\r\n\r\nconst DashboardNavbar: FC = () => {\r\n const mounted = useMounted();\r\n const dispatch = useDispatch();\r\n const searchApi = useSearch();\r\n const navigate = useNavigate();\r\n const { pathname } = useLocation();\r\n const { isAuthenticated } = useAuth();\r\n const { userInfo, searchInfo, isSearching } = useSelector((state) => state.user);\r\n const { memberInfos, orgInfos, activeOrgId, orgsNeedReload } = useSelector((state) => state.organization);\r\n const { twilioStatus } = useSelector((state) => state.chat);\r\n const [isSwitchingOrg, setIsSwitchingOrg] = useState(false);\r\n const [items, setItems] = useState([]);\r\n const [loading, setLoading] = useState(false);\r\n const activeOrgMinInfo = getActiveOrgMinInfo();\r\n const displayTitle = getUserDisplayName(activeOrgMinInfo).toUpperCase();\r\n const href = `/${pathname.split('/').slice(1).join('/')}`;\r\n const enabledSearch = (!isAuthenticated && (searchBarUrls.notAuthUrlsForSame.includes(href) || searchBarUrls.notAuthUrlsForStart.some((subHref) => href.startsWith(subHref))))\r\n || (isAuthenticated && (searchBarUrls.authUrlsForSame.includes(href) || searchBarUrls.authUrlsForStart.some((subHref) => href.startsWith(subHref))));\r\n let circleType = null;\r\n\r\n const handleSearch = async (q: string): Promise => {\r\n searchApi.current?.onSearch?.(q);\r\n };\r\n\r\n const handleGotoAccziom = () => {\r\n if (!isAuthenticated) window.open('https://go.accziom.com', '_blank');\r\n else {\r\n const orgInfo = orgInfos.find((org) => org.organizationId === activeOrgId);\r\n window.open(`https://${orgInfo.domainName}.go.accziom.com`, '_blank');\r\n }\r\n };\r\n\r\n const setDashboardItems = () => {\r\n if (!mounted.current) return;\r\n const mm : Item[] = [];\r\n DashboardItems.forEach((item) => {\r\n const butItem = {\r\n ...item,\r\n ...(item.title === 'Go To Accziom' && { onClick: handleGotoAccziom })\r\n };\r\n if (!isAuthenticated && [REQUIRE_NONE_MODE, REQUIRE_NOT_AUTH_MODE].includes(item.authRequired)) mm.push(butItem);\r\n if (isAuthenticated && [REQUIRE_NONE_MODE, REQUIRE_AUTH_MODE].includes(item.authRequired)) mm.push(butItem);\r\n });\r\n setItems(mm);\r\n };\r\n\r\n useEffect(() => {\r\n setDashboardItems();\r\n }, [mounted, activeOrgId, pathname, isAuthenticated]);\r\n\r\n const getDataOnLoad = () => {\r\n if (!userInfo || loading || !orgsNeedReload) return;\r\n setLoading(true);\r\n lambdaGetOrgActivatedMembersOfUser(userInfo.uid)\r\n .then((res) => {\r\n const { memberInfos: members, orgInfos: organizations, categoryInfos: categories, roleInfos: strRoles, teamInfos: teams } = res;\r\n const roles = [];\r\n strRoles.forEach((item) => {\r\n roles.push({\r\n rid: item.rid,\r\n oid: item.oid,\r\n name: item.name,\r\n level: item.level,\r\n department: JSON.parse(item.department),\r\n assignment: JSON.parse(item.assignment),\r\n production: JSON.parse(item.production),\r\n transaction: JSON.parse(item.transaction),\r\n createdAt: item.createdAt,\r\n updatedAt: item.updatedAt\r\n });\r\n });\r\n const memberData = [];\r\n const orgData = [];\r\n const categoryData = [];\r\n const roleData = [];\r\n const teamData = [];\r\n const teamIds = [];\r\n members.forEach((member) => {\r\n if (member.rid) {\r\n const role = roles.find((item) => item.rid === member.rid);\r\n const departmentValues = Object.values(role.department).map((obj) => Object.values(obj).includes(true));\r\n const assignmentValues = Object.values(role.assignment).map((obj) => Object.values(obj).includes(true));\r\n const teamCount = member.tids.length;\r\n if (departmentValues.includes(true) || assignmentValues.includes(true) || teamCount > 0) {\r\n memberData.push(member);\r\n const organization = organizations.find((item) => item.organizationId === member.oid);\r\n if (organization) orgData.push(organization);\r\n const category = categories.find((cat) => `${cat.code}` === `${organization.anzicCategory}`);\r\n if (category) categoryData.push(category);\r\n if (role) roleData.push(role);\r\n member.tids.forEach((tid) => {\r\n if (!teamIds.includes(tid)) {\r\n teamIds.push(tid);\r\n const team = teams.find((item) => item.tid === tid);\r\n teamData.push(team);\r\n }\r\n });\r\n }\r\n } else {\r\n memberData.push(member);\r\n const organization = organizations.find((item) => item.organizationId === member.oid);\r\n if (organization) orgData.push(organization);\r\n const category = categories.find((cat) => `${cat.code}` === `${organization.anzicCategory}`);\r\n if (category) categoryData.push(category);\r\n }\r\n });\r\n memberData.sort((member0, member1) => { if (member0.type < member1.type) return 1; if (member0.type > member1.type) return -1; return 0; }); // sort by type, client first, member second\r\n dispatch(setOrgStructures(memberData, orgData, categoryData, roleData, teamData));\r\n dispatch(cleanTwilioStatus());\r\n })\r\n .catch((err) => {\r\n console.log(JSON.stringify(err));\r\n toast.error('Failed to get organization information!');\r\n })\r\n .finally(() => {\r\n if (mounted.current) setLoading(false);\r\n });\r\n };\r\n\r\n const switchOrg = async (orgId: string): Promise => {\r\n if (process.env.NODE_ENV === 'production') {\r\n const orgInfo = orgInfos.find((item) => item.organizationId === orgId);\r\n if (orgInfo?.domainName) {\r\n const domain = `${orgInfo.domainName}.community.accziom.com`;\r\n if (domain !== window.location.host) window.location.href = `https://${domain}`;\r\n }\r\n return;\r\n }\r\n setIsSwitchingOrg(true);\r\n try {\r\n const curMember = memberInfos.find((member) => member.oid === orgId);\r\n const chatLoaded = await initChatApi(curMember.mid, dispatch);\r\n if (chatLoaded) {\r\n dispatch(setActiveOrgId(orgId));\r\n initNeedReloads(dispatch);\r\n } else toast.error('Chat has not been initialized.');\r\n } catch (err) {\r\n toast.error('Switching organization has been failed.');\r\n } finally {\r\n if (mounted.current) setIsSwitchingOrg(false);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (mounted.current && isAuthenticated) getDataOnLoad();\r\n }, [mounted, orgsNeedReload, isAuthenticated]);\r\n\r\n useEffect(() => {\r\n const circularEle = document.getElementById('circular_title');\r\n if (mounted.current && isAuthenticated && circularEle) {\r\n document.getElementById('circular_title').innerHTML = displayTitle.length < 14 ? displayTitle : `${displayTitle.substring(0, 12)}...`;\r\n circleType = new CircleType(document.getElementById('circular_title'))\r\n .dir(1)\r\n .radius(LARGE_LOGO_SIZE / 2 + TITLE_TEXT_RADIUS);\r\n }\r\n return () => {\r\n if (mounted.current && isAuthenticated) {\r\n if (circleType) {\r\n circleType.destroy();\r\n circleType = null;\r\n }\r\n }\r\n };\r\n }, [mounted, isAuthenticated, displayTitle]);\r\n\r\n return (\r\n \r\n \r\n {isAuthenticated ? (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n navigate('/home');\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n )}\r\n {enabledSearch && (\r\n \r\n )}\r\n \r\n \r\n {\r\n items.map((item) => {\r\n let disabled = false;\r\n if (['/public', '/mine'].includes(item.href)) {\r\n if (twilioStatus.loadingStatus === LoadingStatus.LOADING && twilioStatus.option !== item.href.slice(1)) disabled = true;\r\n }\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n {isAuthenticated && (\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default DashboardNavbar;\r\n","import type { FC, ReactNode } from 'react';\r\nimport { Outlet, useSearchParams } from 'react-router-dom';\r\nimport { experimentalStyled } from '@material-ui/core/styles';\r\nimport DashboardNavbar from './DashboardNavbar';\r\nimport { NAVBAR_HEIGHT } from 'src/globals';\r\nimport useAuth from 'src/hooks/useAuth';\r\n\r\ninterface DashboardLayoutProps {\r\n children?: ReactNode;\r\n}\r\n\r\nconst DashboardLayoutRoot = experimentalStyled('div')(\r\n ({ theme }) => (\r\n {\r\n backgroundColor: theme.palette.background.default,\r\n display: 'flex',\r\n height: '100%',\r\n overflow: 'hidden',\r\n width: '100%'\r\n }\r\n )\r\n);\r\n\r\nconst AboutDashboardLayoutWrapper = experimentalStyled('div')({\r\n display: 'flex',\r\n flex: '1 1 auto',\r\n overflow: 'hidden',\r\n height: '100%',\r\n width: '100%'\r\n});\r\n\r\nconst DashboardLayoutWrapper = experimentalStyled('div')({\r\n display: 'flex',\r\n flex: '1 1 auto',\r\n overflow: 'hidden',\r\n paddingTop: NAVBAR_HEIGHT,\r\n height: '100%',\r\n width: '100%'\r\n});\r\n\r\nconst DashboardLayoutContainer = experimentalStyled('div')({\r\n display: 'flex',\r\n flex: '1 1 auto',\r\n overflow: 'hidden',\r\n width: '100%'\r\n});\r\n\r\nconst DashboardLayoutContent = experimentalStyled('div')({\r\n flex: '1 1 auto',\r\n height: '100%',\r\n width: '100%',\r\n overflow: 'auto',\r\n position: 'relative',\r\n WebkitOverflowScrolling: 'touch'\r\n});\r\n\r\nconst DashboardLayout: FC = () => {\r\n const auth = useAuth();\r\n const [searchParams] = useSearchParams();\r\n const isMyAbout = auth.isAuthenticated && !!searchParams.get('aboutus');\r\n\r\n return (\r\n \r\n {isMyAbout ? (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default DashboardLayout;\r\n","import { useEffect } from 'react';\r\nimport type { FC } from 'react';\r\nimport NProgress from 'nprogress';\r\nimport { Box } from '@material-ui/core';\r\nimport 'src/theme/nprogress.css';\r\n\r\nconst LoadingScreen: FC = () => {\r\n useEffect(() => {\r\n NProgress.start();\r\n\r\n return (): void => {\r\n NProgress.done();\r\n };\r\n }, []);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default LoadingScreen;\r\n","import { FC, ReactNode, useEffect, useState } from 'react';\r\nimport { Navigate, useNavigate } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport useAuth from 'src/hooks/useAuth';\r\n// import Login from 'src/pages/authentication/Login';\r\nimport { useDispatch, useSelector } from 'src/store';\r\nimport { LoadingStatus } from 'src/slices/user';\r\nimport SpinnerScreen from './SpinnerScreen';\r\nimport initialLoad, { initializeStates } from 'src/worker/init';\r\nimport toast from 'react-hot-toast';\r\n\r\ninterface AuthGuardProps {\r\n children: ReactNode;\r\n isFree?: boolean;\r\n}\r\n\r\nconst AuthGuard: FC = (props) => {\r\n const dispatch = useDispatch();\r\n const navigate = useNavigate();\r\n const { children, isFree } = props;\r\n const auth = useAuth();\r\n const { userInfo, domainName, loadingStatus } = useSelector((state) => state.user);\r\n const [error, setError] = useState(null);\r\n\r\n const handleLogout = async (): Promise => {\r\n try {\r\n await auth.logout();\r\n initializeStates(dispatch);\r\n navigate('/home');\r\n } catch (err) {\r\n console.log(err);\r\n toast.error('Unexpected error occured, Please try again!');\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (!auth.isAuthenticated) return;\r\n if (loadingStatus === LoadingStatus.NONE) {\r\n let subdomain = domainName;\r\n if (!subdomain) {\r\n if (process.env.NODE_ENV === 'production') {\r\n const domain = window.location.hostname;\r\n if (domain !== 'community.accziom.com') {\r\n const idx = domain.indexOf('.community.accziom.com');\r\n if (idx > 0) subdomain = domain.substring(0, idx);\r\n else setError('The organization domain not exists!');\r\n }\r\n }\r\n }\r\n initialLoad(auth.user.id, auth.checkLive, dispatch, handleLogout, subdomain);\r\n }\r\n }, [auth, userInfo, loadingStatus]);\r\n\r\n if (error) return ;\r\n\r\n if (!auth.isAuthenticated) {\r\n if (!isFree) {\r\n if (process.env.NODE_ENV === 'production') {\r\n window.location.href = 'https://community.accziom.com';\r\n return ;\r\n }\r\n return ;\r\n }\r\n return <>{children};\r\n }\r\n\r\n if (userInfo && userInfo.isFirst) {\r\n if (process.env.NODE_ENV === 'production') {\r\n window.location.href = 'https://go.accziom.com';\r\n return ;\r\n }\r\n return ;\r\n }\r\n\r\n if (loadingStatus !== LoadingStatus.COMPLETED) return ;\r\n\r\n return <>{children};\r\n};\r\n\r\nAuthGuard.propTypes = {\r\n children: PropTypes.node,\r\n isFree: PropTypes.bool\r\n};\r\n\r\nexport default AuthGuard;\r\n","import type { FC, ReactNode } from 'react';\r\nimport { Navigate } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport useAuth from 'src/hooks/useAuth';\r\n\r\ninterface GuestGuardProps {\r\n children: ReactNode;\r\n}\r\n\r\nconst GuestGuard: FC = ({ children }) => {\r\n const { isAuthenticated } = useAuth();\r\n if (isAuthenticated) return ;\r\n return <>{children};\r\n};\r\n\r\nGuestGuard.propTypes = {\r\n children: PropTypes.node\r\n};\r\n\r\nexport default GuestGuard;\r\n","import { Suspense, lazy } from 'react';\r\nimport type { RouteObject } from 'react-router-dom';\r\nimport DashboardLayout from 'src/components/dashboard/DashboardLayout';\r\nimport LoadingScreen from 'src/components/layout/LoadingScreen';\r\nimport AuthGuard from 'src/components/layout/AuthGuard';\r\nimport GuestGuard from 'src/components/layout/GuestGuard';\r\n\r\nconst Loadable = (Component) => (props) => (\r\n }>\r\n \r\n \r\n);\r\n\r\n// Authentication pages\r\n\r\nconst Login = Loadable(lazy(() => import('./pages/authentication/Login')));\r\n\r\n// Dashboard pages\r\n\r\nconst Dashboard = Loadable(lazy(() => import('src/pages/Dashboard')));\r\nconst Chat = Loadable(lazy(() => import('src/pages/chat')));\r\nconst ErrorPage = Loadable(lazy(() => import('src/pages/NotFound')));\r\n\r\nconst routes: RouteObject[] = [\r\n {\r\n path: '/public',\r\n element: (\r\n \r\n \r\n \r\n ),\r\n children: [\r\n {\r\n path: '/public',\r\n element: \r\n },\r\n {\r\n path: '/public/:threadKey',\r\n element: \r\n }\r\n ]\r\n },\r\n {\r\n path: '/mine',\r\n element: (\r\n \r\n \r\n \r\n ),\r\n children: [\r\n {\r\n path: '/mine',\r\n element: \r\n },\r\n {\r\n path: '/mine/:threadKey',\r\n element: \r\n }\r\n ]\r\n },\r\n {\r\n path: '/home',\r\n element: (\r\n \r\n \r\n \r\n ),\r\n children: [\r\n {\r\n path: '/home',\r\n element: \r\n }\r\n ]\r\n },\r\n {\r\n path: '/error',\r\n element: \r\n },\r\n {\r\n path: '/',\r\n children: [\r\n {\r\n path: '/',\r\n element: (\r\n \r\n \r\n \r\n ),\r\n children: [\r\n {\r\n path: '/',\r\n element: \r\n }\r\n ]\r\n },\r\n {\r\n path: '/login',\r\n element: (\r\n \r\n \r\n \r\n )\r\n }\r\n ]\r\n },\r\n {\r\n path: '/',\r\n element: (\r\n \r\n \r\n \r\n ),\r\n children: [{\r\n path: '/*',\r\n element: \r\n }]\r\n }\r\n];\r\n\r\nexport default routes;\r\n","import type { FC } from 'react';\r\nimport { useRoutes } from 'react-router-dom';\r\nimport { Toaster } from 'react-hot-toast';\r\nimport { CssBaseline, ThemeProvider } from '@material-ui/core';\r\nimport './i18n';\r\nimport RTL from 'src/components/RTL';\r\nimport useAuth from 'src/hooks/useAuth';\r\nimport useScrollReset from 'src/hooks/useScrollReset';\r\nimport useSettings from 'src/hooks/useSettings';\r\nimport routes from './routes';\r\nimport { createCustomTheme } from 'src/theme';\r\nimport SpinnerScreen from 'src/components/layout/SpinnerScreen';\r\nimport { isMobile } from 'react-device-detect';\r\n\r\nconst App: FC = () => {\r\n const content = useRoutes(routes);\r\n const { settings } = useSettings();\r\n const auth = useAuth();\r\n\r\n if (isMobile) {\r\n if (window.location.origin.includes('community.accziom.com')) {\r\n window.location.href = window.location.href.replace('community.accziom.com', 'community.m.accziom.com');\r\n return
;\r\n }\r\n }\r\n\r\n useScrollReset();\r\n const theme = createCustomTheme({\r\n direction: settings.direction,\r\n responsiveFontSizes: settings.responsiveFontSizes,\r\n roundedCorners: settings.roundedCorners,\r\n theme: 'CUSTOM'\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {auth.isInitialized ? content : }\r\n \r\n \r\n );\r\n};\r\n\r\nexport default App;\r\n","import 'react-perfect-scrollbar/dist/css/styles.css';\r\nimport 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css';\r\nimport 'react-quill/dist/quill.snow.css';\r\nimport 'nprogress/nprogress.css';\r\nimport { StrictMode } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { HelmetProvider } from 'react-helmet-async';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport { Provider as ReduxProvider } from 'react-redux';\r\nimport LocalizationProvider from '@material-ui/lab/LocalizationProvider';\r\nimport AdapterDateFns from '@material-ui/lab/AdapterDateFns';\r\nimport StyledEngineProvider from '@material-ui/core/StyledEngineProvider';\r\nimport App from './App';\r\nimport { AuthProvider } from 'src/contexts/AmplifyContext';\r\nimport { SettingsProvider } from 'src/contexts/SettingsContext';\r\nimport { CookiesProvider } from 'react-cookie';\r\nimport store from 'src/store';\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n","import { useEffect, useRef } from 'react';\r\nimport type { MutableRefObject } from 'react';\r\n\r\nconst useMounted = (): MutableRefObject => {\r\n const isMounted = useRef(true);\r\n\r\n useEffect(() => (): void => {\r\n isMounted.current = false;\r\n }, []);\r\n\r\n return isMounted;\r\n};\r\n\r\nexport default useMounted;\r\n","import axios from 'axios';\r\nimport * as querystring from 'querystring';\r\nimport { addCallApiCount } from 'src/slices/user';\r\nimport gstore from 'src/store';\r\n\r\nconst callHttpApi = async (url: string, mode: string, params: any) => {\r\n gstore.dispatch(addCallApiCount());\r\n const fullUrl = `${url}?${querystring.stringify({ mode, ...params })}`;\r\n const res = await axios.get(fullUrl);\r\n return res.data;\r\n};\r\n\r\nexport default callHttpApi;\r\n","import callHttpApi from './httpCall';\r\nimport { accsiomURIs } from 'src/config';\r\n\r\nexport const httpGetFreeCommunityToken = async () => {\r\n const res = await callHttpApi(\r\n accsiomURIs.channel_uri,\r\n 'GET_FREE_COMMUNITY_TOKEN',\r\n {}\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetChannelById = async (sid: string, getMessage = false) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.channel_uri,\r\n 'GET_BY_ID',\r\n { sid, getMessage }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetParticipantsById = async (sid: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.channel_uri,\r\n 'GET_PARTICIPANTS_BY_ID',\r\n { sid }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetAssetById = async (id: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.asset_uri,\r\n 'GET_BY_ID',\r\n { id }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetOtherAssetsOfSupplier = async (ownerId: string, curId: string, purpose: number) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.asset_uri,\r\n 'GET_OTHER_ASSETS',\r\n { ownerId, curId, purpose }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetMicroserviceForRequest = async (id: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.microservice_uri,\r\n 'GET_MICROSERVICE_FOR_REQUEST',\r\n { id }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetFileResourcesByItemId = async (itemId: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.microservice_uri,\r\n 'GET_FILERESOURCE',\r\n { itemId }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetPurchaseRatingStatistics = async (itemId: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.microservice_uri,\r\n 'GET_PURCHASE_RATING_STATISTICS',\r\n { itemId }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetRatingStatistics = async (itemId: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.microservice_uri,\r\n 'GET_RATING_STATISTICS',\r\n { itemId }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetRatingStatisticsByStar = async (itemId: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.microservice_uri,\r\n 'GET_RATING_STATISTICS_BY_STAR',\r\n { itemId }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetRatingsByItemId = async (itemId: string, offset: number, count: number) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.microservice_uri,\r\n 'GET_RATINGS',\r\n { itemId, offset, count }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetAssetThumbnail = async (id: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.asset_uri,\r\n 'GET_THUMBNAIL',\r\n { id }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetInvitationUrl = async (params: any) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.orgaboutus_uri,\r\n 'ENCRYPT_PARAMS',\r\n { params }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetInvitationDetails = async (text: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.orgaboutus_uri,\r\n 'DECRYPT_PARAMS',\r\n { text }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpCheckMemberStatus = async (email: string, orgId: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.orgaboutus_uri,\r\n 'CHECK_MEMBER_STATUS',\r\n { email, orgId }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpCheckClientOrgStatus = async (email: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.orgaboutus_uri,\r\n 'CHECK_CLIENT_ORG_STATUS',\r\n { email }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetOrgByDomainName = async (domain: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.orgaboutus_uri,\r\n 'GET_ORG_INFO_FROM_DOMAIN',\r\n { domain }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetOrgStructure = async (id: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.orgaboutus_uri,\r\n 'GET_ORG_STRUCTURE',\r\n { id }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetOrgBannerUrl = async (id: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.orgaboutus_uri,\r\n 'GET_BANNER_URL',\r\n { id }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpSearchChannelMessage = async (sid: string, query: string, offset: number, limit: number) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.orgaboutus_uri,\r\n 'SEARCH_MESSAGE',\r\n { sid, query, offset, limit }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpSearchOrganizations = async (offset: number, query: string, categories: string[], address: string, hideOrgIds: string[]) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.orgaboutus_uri,\r\n 'SEARCH',\r\n { offset, query, categories: JSON.stringify(categories), address, orgIds: JSON.stringify(hideOrgIds) }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetUsersMin = async (users: any[]) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.orgaboutus_uri,\r\n 'GET_USERS_MIN',\r\n { users: JSON.stringify(users) }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpFindAddress = async (query: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.orgaboutus_uri,\r\n 'SEARCH_ADDRESS',\r\n { query }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetExchangeRate = async (currencies: string[]) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.orgaboutus_uri,\r\n 'GET_EXCHANGE_RATE',\r\n { currencies: JSON.stringify(currencies) }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetAssetsPublishedByOwner = async (ownerId: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.asset_uri,\r\n 'GET_PUBLISHED',\r\n { ownerId }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetMicroservicesPublishedByOwner = async (ownerId: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.microservice_uri,\r\n 'GET_PUBLISHED',\r\n { ownerId }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetPartnerAssets = async (ownerId: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.asset_uri,\r\n 'GET_PARTNER_ASSETS',\r\n { ownerId }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetPartnerMicroservices = async (ownerId: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.microservice_uri,\r\n 'GET_PARTNER_MICROSERVICES',\r\n { ownerId }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpJoinAsClient = async (userInfo: any, domain: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.orgaboutus_uri,\r\n 'JOIN_AS_CLIENT',\r\n { userInfo, domain }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpJoinAsClientOrg = async (orgInfo: any, domain: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.orgaboutus_uri,\r\n 'JOIN_AS_CLIENT_ORG',\r\n { orgInfo, domain }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetOrganizationInfo = async (orgId: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.orgaboutus_uri,\r\n 'GET_ORG_INFO',\r\n { orgId }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetUserInfo = async (uid: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.orgaboutus_uri,\r\n 'GET_USER_INFO',\r\n { uid }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetAnzicTaxonomyInfoByType = async (type: number) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.orgaboutus_uri,\r\n 'GET_ANZIC_BY_TYPE',\r\n { type }\r\n );\r\n return res;\r\n};\r\n\r\nexport const ebsGetMicroservicesPublished = async (ownerIds: string[], offset: number, oids: string[], query: string, categories: string[], activeOrgId) => {\r\n const res = await callHttpApi(\r\n 'https://wsserver.accziom.com/mssearch',\r\n 'SEARCH',\r\n { ownerIds: ownerIds.join(','), offset, oids: oids.join(','), query, categories: categories.join(','), activeOrgId }\r\n );\r\n return res;\r\n};\r\n\r\nexport const ebsGetAssetsPublished = async (ownerIds: string[], offset: number, oids: string[], query: string, categories: string[], activeOrgId) => {\r\n const res = await callHttpApi(\r\n 'https://wsserver.accziom.com/assetsearch',\r\n 'SEARCH',\r\n { ownerIds: ownerIds.join(','), offset, oids: oids.join(','), query, categories: categories.join(','), activeOrgId }\r\n );\r\n return res;\r\n};\r\n\r\nexport const ebsGetChannels = async (info: any, offset: number, query: string, categories: any) => {\r\n const res = await callHttpApi(\r\n 'https://wsserver.accziom.com/channelsearch',\r\n 'SEARCH',\r\n { info: JSON.stringify(info), offset, query, categories: JSON.stringify(categories) }\r\n );\r\n return res;\r\n};\r\n\r\nexport const httpGetAttachmentFileDownloadUrl = async (uid: string) => {\r\n const res = await callHttpApi(\r\n accsiomURIs.channel_uri,\r\n 'GET_URL',\r\n { uid }\r\n );\r\n return res;\r\n};\r\n","// eslint-disable-next-line consistent-return\r\nexport const deepCopy = (obj) => {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return obj;\r\n }\r\n\r\n if (obj instanceof Date) {\r\n return new Date(obj.getTime());\r\n }\r\n\r\n if (obj instanceof Array) {\r\n return obj.reduce((arr, item, i) => {\r\n arr[i] = deepCopy(item);\r\n return arr;\r\n }, []);\r\n }\r\n\r\n if (obj instanceof Object) {\r\n return Object.keys(obj).reduce((newObj, key) => {\r\n newObj[key] = deepCopy(obj[key]);\r\n return newObj;\r\n }, {});\r\n }\r\n};\r\n\r\nexport const objCopy = (src: Object, dest: Object) => {\r\n if (src === null || dest === null) return;\r\n Object.keys(src).forEach((key) => { dest[key] = src[key]; });\r\n};\r\n\r\nexport const objToArray = (obj: any): [] => {\r\n if (obj === undefined || obj === null) return [];\r\n\r\n if (!Array.isArray(obj)) {\r\n const tmp: any = {};\r\n objCopy(obj, tmp);\r\n obj = [];\r\n obj.push(tmp);\r\n }\r\n\r\n return obj;\r\n};\r\n\r\nexport const itemFromArray = (arr: any[], key: string, value: string): any => arr.find((item) => item[key] === value);\r\n\r\nexport const objFromArray = (arr: any[], key = 'id'): {} => arr.reduce((\r\n accumulator,\r\n current\r\n) => {\r\n accumulator[current[key]] = current;\r\n return accumulator;\r\n}, {});\r\n\r\nexport const objSub = (dest: any, src: any) => {\r\n const { id, title, value, arr, cost } = src;\r\n\r\n if (dest[id] === undefined) dest[id] = {};\r\n if (typeof value === 'number' || typeof value === 'string' || typeof value === 'boolean') {\r\n dest[id].value = value;\r\n dest[id].id = id;\r\n dest[id].title = title;\r\n if (cost !== undefined && cost >= 0) dest[id].cost = cost;\r\n return;\r\n }\r\n\r\n if (arr !== undefined) {\r\n dest[id].value = arr;\r\n dest[id].id = id;\r\n if (cost !== undefined && cost >= 0) dest[id].cost = cost;\r\n return;\r\n }\r\n\r\n if (dest[id].child === undefined) dest[id].child = {};\r\n if (cost !== undefined && cost >= 0) dest[id].cost = cost;\r\n objSub(dest[id].child, value);\r\n};\r\n","import store from 'src/store';\r\nimport { UserMinInfo } from 'src/../../Common/Model/common';\r\nimport { orgToMiniUser, userToMiniUser } from './getUserMinInfo';\r\nimport { ACCZIOM_CLIENT, ACCZIOM_MEMBER, ACCZIOM_NONE, ACCZIOM_ORG, ACCZIOM_TEAM, ACCZIOM_USER, INDIVIDUAL_TYPES, ORG_TYPES, STATUS_ACTIVATED } from 'src/globals';\r\nimport { Organization, OrganizationExt } from 'src/../../Common/Model/organization';\r\nimport getUserDisplayName from './getUserDisplayName';\r\n\r\nexport const getActiveOrgInfo = (): OrganizationExt => {\r\n const { activeOrgId, orgInfos } = store.getState().organization;\r\n if (!activeOrgId) return null;\r\n const activeOrg = orgInfos.find((v) => v.organizationId === activeOrgId);\r\n return activeOrg;\r\n};\r\n\r\nexport const getActiveOrgMinInfo = (): UserMinInfo => {\r\n const activeOrgInfo = getActiveOrgInfo();\r\n if (!activeOrgInfo) return null;\r\n return orgToMiniUser(activeOrgInfo);\r\n};\r\n\r\nexport const getActiveUserMinInfo = (): UserMinInfo => {\r\n const { userInfo } = store.getState().user;\r\n if (!userInfo) return null;\r\n const { activeOrgId, memberInfos } = store.getState().organization;\r\n if (!activeOrgId) return null;\r\n const activeMember = memberInfos.find((mi) => mi.oid === activeOrgId);\r\n const initialized = userToMiniUser(userInfo);\r\n return {\r\n ...initialized,\r\n allIds: [...initialized.allIds, { id: activeMember.mid, type: activeMember.type }]\r\n } as UserMinInfo;\r\n};\r\n\r\nexport const isOwner = (): boolean => {\r\n const { activeOrgId, memberInfos, orgInfos } = store.getState().organization;\r\n if (!activeOrgId) return false;\r\n const activeOrg = orgInfos.find((orgInfo) => orgInfo.organizationId === activeOrgId);\r\n const activeMember = memberInfos.find((mi) => mi.oid === activeOrgId);\r\n return activeOrg.ownerId === activeMember.uid;\r\n};\r\n\r\nexport const getActiveId = (clientMode: number, memberMode: number): string => {\r\n const { userInfo } = store.getState().user;\r\n const { activeOrgId, activeTeamId, memberInfos } = store.getState().organization;\r\n if (!userInfo || !activeOrgId) return '';\r\n const activeMember = memberInfos.find((mi) => mi.oid === activeOrgId);\r\n if (activeMember?.type === ACCZIOM_CLIENT) {\r\n if (clientMode === ACCZIOM_CLIENT) return activeMember.mid;\r\n if (clientMode === ACCZIOM_USER) return userInfo.uid;\r\n } else if (activeMember?.type === ACCZIOM_MEMBER) {\r\n if (memberMode === ACCZIOM_ORG) return activeOrgId;\r\n if (memberMode === ACCZIOM_TEAM) return activeTeamId;\r\n if (memberMode === ACCZIOM_MEMBER) return activeMember.mid;\r\n }\r\n return '';\r\n};\r\n\r\nexport const getActiveIdByType = (type: number): string => {\r\n const { activeOrgId, memberInfos } = store.getState().organization;\r\n if (!activeOrgId) return '';\r\n const activeMember = memberInfos.find((mi) => mi.oid === activeOrgId);\r\n if ([ACCZIOM_USER, ACCZIOM_CLIENT, ACCZIOM_MEMBER].includes(type)) return activeMember?.mid;\r\n return activeOrgId;\r\n};\r\n\r\nexport const getActiveType = (clientMode: number, memberMode: number): number => {\r\n const { activeOrgId, memberInfos } = store.getState().organization;\r\n if (!activeOrgId) return ACCZIOM_NONE;\r\n const activeMember = memberInfos.find((mi) => mi.oid === activeOrgId);\r\n if (activeMember?.type === ACCZIOM_CLIENT) {\r\n if (clientMode === ACCZIOM_CLIENT) return ACCZIOM_CLIENT;\r\n if (clientMode === ACCZIOM_USER) return ACCZIOM_USER;\r\n } else if (activeMember?.type === ACCZIOM_MEMBER) {\r\n if (memberMode === ACCZIOM_ORG) return ACCZIOM_ORG;\r\n if (memberMode === ACCZIOM_TEAM) return ACCZIOM_TEAM;\r\n if (memberMode === ACCZIOM_MEMBER) return ACCZIOM_MEMBER;\r\n }\r\n return ACCZIOM_NONE;\r\n};\r\n\r\nexport const getActiveInfo = (clientMode: number, memberMode: number): { id: string, type: number } => ({\r\n id: getActiveId(clientMode, memberMode),\r\n type: getActiveType(clientMode, memberMode)\r\n});\r\n\r\nexport const getActiveMemberItemsPinned = (): string[] => {\r\n const { activeOrgId, memberInfos } = store.getState().organization;\r\n if (!activeOrgId) return [];\r\n const activeMember = memberInfos.find((mi) => mi.oid === activeOrgId);\r\n return activeMember?.itemsPinned;\r\n};\r\n\r\nexport const getActiveMinInfo = (): UserMinInfo => {\r\n const { activeOrgId, memberInfos } = store.getState().organization;\r\n if (!activeOrgId) return null;\r\n const activeMember = memberInfos.find((mi) => mi.oid === activeOrgId);\r\n if (activeMember?.type === ACCZIOM_CLIENT) return getActiveUserMinInfo();\r\n return getActiveOrgMinInfo();\r\n};\r\n\r\nexport const getActiveSuppliers = (): Organization[] => {\r\n const { activeOrgId, memberInfos, orgInfos } = store.getState().organization;\r\n if (!activeOrgId) return [];\r\n const activeMember = memberInfos.find((mi) => mi.oid === activeOrgId);\r\n const activeOrg = orgInfos.find((v) => v.organizationId === activeOrgId);\r\n if (!activeMember || !activeOrg) return [];\r\n return activeMember.type === ACCZIOM_MEMBER ? activeOrg.suppliers : [activeOrg as Organization];\r\n};\r\n\r\nexport const getActiveClients = (): any[] => {\r\n const { activeOrgId, membersInCurOrg } = store.getState().organization;\r\n if (!activeOrgId) return [];\r\n return membersInCurOrg.filter((member) => {\r\n if (member.status !== STATUS_ACTIVATED) return false;\r\n if (member.type === ACCZIOM_CLIENT) return true;\r\n if (member.type === ACCZIOM_MEMBER) return false;\r\n return member.oid === activeOrgId;\r\n }).map(({ mid, type }) => ({ id: mid, type }));\r\n};\r\n\r\nexport const getUserMinInfoByID = (info: { id: string; type: number; }): UserMinInfo => {\r\n const { userMinInfos } = store.getState().organization;\r\n const candidates = [...userMinInfos];\r\n if (INDIVIDUAL_TYPES.includes(info.type)) {\r\n const activeUserMinInfo = getActiveUserMinInfo();\r\n if (activeUserMinInfo) candidates.push(activeUserMinInfo);\r\n } else if (ORG_TYPES.includes(info.type)) {\r\n const activeOrgMinInfo = getActiveOrgMinInfo();\r\n if (activeOrgMinInfo) candidates.push(activeOrgMinInfo);\r\n }\r\n return candidates.find((miniUser) => miniUser.allIds.some(({ id, type }) => id === info.id && type === info.type));\r\n};\r\n\r\nexport const getActiveDisplayName = (): string => (getUserDisplayName(getActiveMinInfo()));\r\n","import { createSlice } from '@reduxjs/toolkit';\r\nimport type { PayloadAction } from '@reduxjs/toolkit';\r\nimport type { AppThunk } from 'src/store';\r\nimport { AnzicCategory } from 'src/../../Common/Model/taxonomy';\r\n\r\ninterface TaxonomyState {\r\n orgCategories: AnzicCategory[];\r\n orgCategoryNeedReload: boolean;\r\n serviceCategories: AnzicCategory[];\r\n serviceCategoryNeedReload: boolean;\r\n assetCategories: AnzicCategory[];\r\n assetCategoryNeedReload: boolean;\r\n chatCategories: AnzicCategory[];\r\n chatCategoryNeedReload: boolean;\r\n}\r\n\r\nconst initialState: TaxonomyState = {\r\n orgCategories: [],\r\n orgCategoryNeedReload: true,\r\n serviceCategories: [],\r\n serviceCategoryNeedReload: true,\r\n assetCategories: [],\r\n assetCategoryNeedReload: true,\r\n chatCategories: [],\r\n chatCategoryNeedReload: true\r\n};\r\n\r\nconst slice = createSlice({\r\n name: 'taxonomy',\r\n initialState,\r\n reducers: {\r\n clearState(state: TaxonomyState) {\r\n state.orgCategories.splice(0, state.orgCategories.length);\r\n state.serviceCategories.splice(0, state.serviceCategories.length);\r\n state.assetCategories.splice(0, state.assetCategories.length);\r\n state.chatCategories.splice(0, state.chatCategories.length);\r\n state.orgCategoryNeedReload = true;\r\n state.serviceCategoryNeedReload = true;\r\n state.assetCategoryNeedReload = true;\r\n state.chatCategoryNeedReload = true;\r\n },\r\n setOrgCategoryNeedReload(state: TaxonomyState, action: PayloadAction): void {\r\n state.orgCategoryNeedReload = action.payload;\r\n },\r\n setServiceCategoryNeedReload(state: TaxonomyState, action: PayloadAction): void {\r\n state.serviceCategoryNeedReload = action.payload;\r\n },\r\n setAssetCategoryNeedReload(state: TaxonomyState, action: PayloadAction): void {\r\n state.assetCategoryNeedReload = action.payload;\r\n },\r\n setChatCategoryNeedReload(state: TaxonomyState, action: PayloadAction): void {\r\n state.chatCategoryNeedReload = action.payload;\r\n },\r\n setOrgCategories(state: TaxonomyState, action: PayloadAction) {\r\n state.orgCategories = action.payload;\r\n state.orgCategoryNeedReload = false;\r\n },\r\n setServiceCategories(state: TaxonomyState, action: PayloadAction) {\r\n state.serviceCategories = action.payload;\r\n state.serviceCategoryNeedReload = false;\r\n },\r\n setAssetCategories(state: TaxonomyState, action: PayloadAction) {\r\n state.assetCategories = action.payload;\r\n state.assetCategoryNeedReload = false;\r\n },\r\n setChatCategories(state: TaxonomyState, action: PayloadAction) {\r\n state.chatCategories = action.payload;\r\n state.chatCategoryNeedReload = false;\r\n },\r\n updateOrgCategory(state: TaxonomyState, action: PayloadAction): void {\r\n const newCategory = action.payload;\r\n const index = state.orgCategories.findIndex((item) => item.id === newCategory.id);\r\n if (index >= 0) state.orgCategories.splice(index, 1, newCategory);\r\n else state.orgCategories.push(newCategory);\r\n },\r\n updateServiceCategory(state: TaxonomyState, action: PayloadAction): void {\r\n const newCategory = action.payload;\r\n const index = state.serviceCategories.findIndex((item) => item.id === newCategory.id);\r\n if (index >= 0) state.serviceCategories.splice(index, 1, newCategory);\r\n else state.serviceCategories.push(newCategory);\r\n },\r\n updateAssetCategory(state: TaxonomyState, action: PayloadAction): void {\r\n const newCategory = action.payload;\r\n const index = state.assetCategories.findIndex((item) => item.id === newCategory.id);\r\n if (index >= 0) state.assetCategories.splice(index, 1, newCategory);\r\n else state.assetCategories.push(newCategory);\r\n },\r\n updateChatCategory(state: TaxonomyState, action: PayloadAction): void {\r\n const newCategory = action.payload;\r\n const index = state.chatCategories.findIndex((item) => item.id === newCategory.id);\r\n if (index >= 0) state.chatCategories.splice(index, 1, newCategory);\r\n else state.chatCategories.push(newCategory);\r\n },\r\n updateOrgCategoryByCode(state: TaxonomyState, action: PayloadAction): void {\r\n const newCategory = action.payload;\r\n const index = state.orgCategories.findIndex((item) => `${item.code}` === `${newCategory.code}`);\r\n if (index >= 0) state.orgCategories.splice(index, 1, newCategory);\r\n else state.orgCategories.push(newCategory);\r\n },\r\n updateServiceCategoryByCode(state: TaxonomyState, action: PayloadAction): void {\r\n const newCategory = action.payload;\r\n const index = state.serviceCategories.findIndex((item) => `${item.code}` === `${newCategory.code}`);\r\n if (index >= 0) state.serviceCategories.splice(index, 1, newCategory);\r\n else state.serviceCategories.push(newCategory);\r\n },\r\n updateAssetCategoryByCode(state: TaxonomyState, action: PayloadAction): void {\r\n const newCategory = action.payload;\r\n const index = state.assetCategories.findIndex((item) => `${item.code}` === `${newCategory.code}`);\r\n if (index >= 0) state.assetCategories.splice(index, 1, newCategory);\r\n else state.assetCategories.push(newCategory);\r\n },\r\n updateChatCategoryByCode(state: TaxonomyState, action: PayloadAction): void {\r\n const newCategory = action.payload;\r\n const index = state.chatCategories.findIndex((item) => `${item.code}` === `${newCategory.code}`);\r\n if (index >= 0) state.chatCategories.splice(index, 1, newCategory);\r\n else state.chatCategories.push(newCategory);\r\n }\r\n }\r\n});\r\n\r\nexport const { reducer } = slice;\r\n\r\nexport const clearTaxonomyState = (): AppThunk => (dispatch): void => {\r\n dispatch(slice.actions.clearState());\r\n};\r\n\r\nexport const setOrgCategoryNeedReload = (needReload: boolean) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setOrgCategoryNeedReload(needReload));\r\n};\r\n\r\nexport const setServiceCategoryNeedReload = (needReload: boolean) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setServiceCategoryNeedReload(needReload));\r\n};\r\n\r\nexport const setAssetCategoryNeedReload = (needReload: boolean) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setAssetCategoryNeedReload(needReload));\r\n};\r\n\r\nexport const setChatCategoryNeedReload = (needReload: boolean) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setChatCategoryNeedReload(needReload));\r\n};\r\n\r\nexport const setOrgCategories = (categories: AnzicCategory[]) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setOrgCategories(categories));\r\n};\r\n\r\nexport const setServiceCategories = (categories: AnzicCategory[]) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setServiceCategories(categories));\r\n};\r\n\r\nexport const setAssetCategories = (categories: AnzicCategory[]) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setAssetCategories(categories));\r\n};\r\n\r\nexport const setChatCategories = (categories: AnzicCategory[]) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setChatCategories(categories));\r\n};\r\n\r\nexport const updateOrgCategory = (category: AnzicCategory) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.updateOrgCategory(category));\r\n};\r\n\r\nexport const updateServiceCategory = (category: AnzicCategory) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.updateServiceCategory(category));\r\n};\r\n\r\nexport const updateAssetCategory = (category: AnzicCategory) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.updateAssetCategory(category));\r\n};\r\n\r\nexport const updateChatCategory = (category: AnzicCategory) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.updateChatCategory(category));\r\n};\r\n\r\nexport const updateOrgCategoryByCode = (category: AnzicCategory) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.updateOrgCategoryByCode(category));\r\n};\r\n\r\nexport const updateServiceCategoryByCode = (category: AnzicCategory) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.updateServiceCategoryByCode(category));\r\n};\r\n\r\nexport const updateAssetCategoryByCode = (category: AnzicCategory) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.updateAssetCategoryByCode(category));\r\n};\r\n\r\nexport const updateChatCategoryByCode = (category: AnzicCategory) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.updateChatCategoryByCode(category));\r\n};\r\n\r\nexport default slice;\r\n","import { chatApi } from 'src/apis/chatApi';\r\nimport { lambdaGetOrgActivatedMembersOfUser, lambdaGetUserInfo } from 'src/aws/lambdaDispatch';\r\nimport { cleanUpChat } from 'src/slices/chat';\r\nimport { clearUserState, LoadingStatus, setLoadingStatus, setMemberNeedReload, setUserInfo } from 'src/slices/user';\r\nimport { setCurOrgNeedReload, setActiveOrgId, cleanUserMinInfos, clearOrganizationState, setOrgStructures } from 'src/slices/organization';\r\nimport toast from 'react-hot-toast';\r\nimport intervalJobs from 'src/utils/intervalJobs';\r\nimport { CHECK_INTERVAL_MINUTES } from 'src/globals';\r\nimport { clearTaxonomyState, setAssetCategoryNeedReload, setChatCategoryNeedReload, setOrgCategoryNeedReload, setServiceCategoryNeedReload } from 'src/slices/taxonomy';\r\n\r\nlet isLoading: boolean = false;\r\n\r\nexport const initChatApi = (uid: string, dispatch): Promise => {\r\n dispatch(cleanUpChat());\r\n chatApi.cleanUp();\r\n dispatch(cleanUserMinInfos());\r\n return new Promise((resolve) => {\r\n chatApi.initConnection(uid, dispatch)\r\n .then(() => {\r\n resolve(true);\r\n })\r\n .catch(() => {\r\n resolve(false);\r\n });\r\n });\r\n};\r\n\r\nexport const initFreeChatApi = (dispatch): Promise => {\r\n dispatch(cleanUpChat());\r\n chatApi.cleanUp();\r\n dispatch(cleanUserMinInfos());\r\n return new Promise((resolve) => {\r\n chatApi.initFreeConnection(dispatch)\r\n .then(() => {\r\n resolve(true);\r\n })\r\n .catch(() => {\r\n resolve(false);\r\n });\r\n });\r\n};\r\n\r\nexport const initNeedReloads = (dispatch) => {\r\n dispatch(setCurOrgNeedReload(true));\r\n dispatch(setMemberNeedReload(true));\r\n dispatch(setOrgCategoryNeedReload(true));\r\n dispatch(setServiceCategoryNeedReload(true));\r\n dispatch(setAssetCategoryNeedReload(true));\r\n dispatch(setChatCategoryNeedReload(true));\r\n};\r\n\r\nexport const initializeStates = (dispatch) => {\r\n dispatch(clearTaxonomyState());\r\n dispatch(clearOrganizationState());\r\n dispatch(clearUserState());\r\n dispatch(cleanUpChat());\r\n};\r\n\r\nconst initialLoad = (id: string, checkLive, dispatch, logout, domainName: string): void => {\r\n if (isLoading) return;\r\n\r\n intervalJobs(CHECK_INTERVAL_MINUTES * 60 * 1000, checkLive, true);\r\n\r\n isLoading = true;\r\n dispatch(setLoadingStatus(LoadingStatus.LOADING));\r\n initializeStates(dispatch);\r\n\r\n // console.log(id);\r\n lambdaGetUserInfo(id) // for normal start\r\n // lambdaGetUserInfo('28322ca1-f94f-48b2-8268-a78149521218') // for James\r\n // lambdaGetUserInfo('fcb2bd19-79da-49ab-97b8-098d8e6abfcb') // for Noble & Associates\r\n // lambdaGetUserInfo('469d19ff-2c34-4409-81b3-2feea660b7e7') // for LodgeiT\r\n .then((ui) => {\r\n if (ui) {\r\n dispatch(setUserInfo(ui));\r\n lambdaGetOrgActivatedMembersOfUser(ui.uid)\r\n .then((res) => {\r\n const { memberInfos: members, orgInfos: organizations, categoryInfos: categories, roleInfos: strRoles, teamInfos: teams } = res;\r\n const roles = [];\r\n strRoles.forEach((item) => {\r\n roles.push({\r\n rid: item.rid,\r\n oid: item.oid,\r\n name: item.name,\r\n level: item.level,\r\n department: JSON.parse(item.department),\r\n assignment: JSON.parse(item.assignment),\r\n production: JSON.parse(item.production),\r\n transaction: JSON.parse(item.transaction),\r\n createdAt: item.createdAt,\r\n updatedAt: item.updatedAt\r\n });\r\n });\r\n const memberInfos = [];\r\n const orgInfos = [];\r\n const categoryInfos = [];\r\n const roleInfos = [];\r\n const teamInfos = [];\r\n const teamIds = [];\r\n members.forEach((member) => {\r\n if (member.rid) {\r\n const role = roles.find((item) => item.rid === member.rid);\r\n const departmentValues = Object.values(role.department).map((obj) => Object.values(obj).includes(true));\r\n const assignmentValues = Object.values(role.assignment).map((obj) => Object.values(obj).includes(true));\r\n const teamCount = member.tids.length;\r\n if (departmentValues.includes(true) || assignmentValues.includes(true) || teamCount > 0) {\r\n memberInfos.push(member);\r\n const organization = organizations.find((item) => item.organizationId === member.oid);\r\n if (organization) orgInfos.push(organization);\r\n const category = categories.find((cat) => `${cat.code}` === `${organization.anzicCategory}`);\r\n if (category) categoryInfos.push(category);\r\n if (role) roleInfos.push(role);\r\n member.tids.forEach((tid) => {\r\n if (!teamIds.includes(tid)) {\r\n teamIds.push(tid);\r\n const team = teams.find((item) => item.tid === tid);\r\n teamInfos.push(team);\r\n }\r\n });\r\n }\r\n } else {\r\n memberInfos.push(member);\r\n const organization = organizations.find((item) => item.organizationId === member.oid);\r\n if (organization) orgInfos.push(organization);\r\n const category = categories.find((cat) => `${cat.code}` === `${organization.anzicCategory}`);\r\n if (category) categoryInfos.push(category);\r\n }\r\n });\r\n memberInfos.sort((member0, member1) => { if (member0.type < member1.type) return 1; if (member0.type > member1.type) return -1; return 0; }); // sort by type, client first, member second\r\n dispatch(setOrgStructures(memberInfos, orgInfos, categoryInfos, roleInfos, teamInfos));\r\n let firstOrg = null;\r\n let firstMember = null;\r\n if (orgInfos.length > 0) {\r\n if (domainName) {\r\n firstOrg = orgInfos.find((organizationInfo) => organizationInfo.domainName === domainName);\r\n if (firstOrg) firstMember = memberInfos.find((member) => member.oid === firstOrg.organizationId);\r\n } else {\r\n firstOrg = orgInfos.at(0);\r\n firstMember = memberInfos.find((member) => member.oid === firstOrg.organizationId);\r\n }\r\n }\r\n if (firstOrg && firstMember) {\r\n if (process.env.NODE_ENV === 'production' && !domainName) window.location.href = `https://${firstOrg.domainName}.community.accziom.com`;\r\n else {\r\n dispatch(setActiveOrgId(firstOrg.organizationId));\r\n dispatch(setLoadingStatus(LoadingStatus.COMPLETED));\r\n isLoading = false;\r\n }\r\n }\r\n })\r\n .catch((e) => {\r\n console.log('Get organization error : ', JSON.stringify(e));\r\n dispatch(setActiveOrgId(null));\r\n dispatch(setLoadingStatus(LoadingStatus.NONE));\r\n logout();\r\n toast.error('Failed to get organizations!');\r\n isLoading = false;\r\n });\r\n }\r\n })\r\n .catch((e) => {\r\n console.log('User not exists.', JSON.stringify(e));\r\n dispatch(setActiveOrgId(null));\r\n dispatch(setLoadingStatus(LoadingStatus.NONE));\r\n logout();\r\n toast.error('Failed to get user information!');\r\n isLoading = false;\r\n });\r\n};\r\n\r\nexport default initialLoad;\r\n","import Conversations, { User } from '@twilio/conversations';\r\nimport { lambdaGetTwilioToken, lambdaAddAndDeleteMessages, lambdaUpdateMessage, lambdaCreateCommunityAdminParticipants } from 'src/aws/lambdaDispatch';\r\nimport { fetchUrl } from 'src/utils/fileUpDownload';\r\nimport { Conversation } from '@twilio/conversations/lib/data/conversations';\r\nimport { Thread, Message as AccsiomMsg, Contact, MessageBody, MessageAttribue } from 'src/types/chat';\r\nimport { Message as TwilioMsg } from '@twilio/conversations/lib/message';\r\nimport {\r\n markThreadAsSeen,\r\n msgAdded,\r\n msgSent,\r\n msgUpdated,\r\n addRecipientsToThread,\r\n removeMessage,\r\n removeParticipants,\r\n setMessageThumb,\r\n setMsgUnreadCount,\r\n setTypingEnded,\r\n setTypingStarted,\r\n threadJoined,\r\n updateLastMsgIndex,\r\n updateLastReadMsgIndex,\r\n updateUserOnlineStatus,\r\n updateLastReadMsgIds,\r\n setThread,\r\n cleanUpChat,\r\n setMessages\r\n} from 'src/slices/chat';\r\nimport { updateUserMinInfos } from 'src/slices/organization';\r\nimport { Participant } from '@twilio/conversations/lib/participant';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n// modified by Makarov --2021/11/01\r\nimport { PAGE_SIZE, getUserIdByType, ACCZIOM_CLIENT_ORG, ACCZIOM_SUPPLIER, FREE_USER_ID, ACCZIOM_ORG, getUserInfoByType, ACCZIOM_MEMBER } from 'src/globals';\r\nimport axios from 'axios';\r\nimport gstore from 'src/store';\r\nimport { accsiomURIs } from 'src/config';\r\nimport { getUserMinInfoByID } from 'src/utils/getActiveOrgInfo';\r\nimport { httpGetAttachmentFileDownloadUrl, httpGetFreeCommunityToken, httpGetUsersMin } from './httpDispatch';\r\nimport { addCallApiCount } from 'src/slices/user';\r\n\r\nconst TwilioToAccsiomMsg = (msg: TwilioMsg) : AccsiomMsg => ({\r\n id: msg.index,\r\n body: JSON.parse(msg.body),\r\n convId: msg.conversation.sid,\r\n attrib: msg.attributes,\r\n createdAt: msg.dateCreated.getTime(),\r\n senderId: msg.author,\r\n sent: true\r\n} as AccsiomMsg);\r\n\r\nconst TwilioToAccsiomThread = (conv: Conversation) : Thread => {\r\n const attrib = conv.attributes as any;\r\n return {\r\n sid: conv.sid,\r\n title: conv.friendlyName,\r\n participants: attrib.recipients,\r\n lastMessage: attrib.lastMessage,\r\n lastMessageTime: attrib.lastMessageTime,\r\n type: attrib.type,\r\n createdBy: conv.createdBy,\r\n unreadCount: 0,\r\n isTyping: false,\r\n lastReadMsgIndex: conv.lastReadMessageIndex === null ? 0 : conv.lastReadMessageIndex,\r\n lastMsgIndex: (conv.lastMessage === null || conv.lastMessage === undefined) ? 0 : conv.lastMessage.index,\r\n messages: [],\r\n typerId: ''\r\n } as Thread;\r\n};\r\n\r\nclass ChatApi {\r\n private client: Conversations = null;\r\n\r\n private uid: string = '';\r\n\r\n private token: string = '';\r\n\r\n private conv: Conversation = null;\r\n\r\n private users: Record = {};\r\n\r\n private messages: TwilioMsg[] = [];\r\n\r\n private lastMsgId: number = -1;\r\n\r\n private dispatch = null;\r\n\r\n private msgId: number = -1;\r\n\r\n private isConnecting: boolean = false;\r\n\r\n public isActive: boolean = false;\r\n\r\n cleanUp(): void {\r\n if (!this.client) return;\r\n this.isActive = false;\r\n this.client.shutdown();\r\n this.dispatch = null;\r\n this.isConnecting = false;\r\n this.messages.splice(0, this.messages.length);\r\n this.lastMsgId = -1;\r\n this.conv = null;\r\n this.uid = '';\r\n this.users = {};\r\n this.token = '';\r\n this.msgId = -1;\r\n this.client = null;\r\n }\r\n\r\n initConnection(uid: string, _dispatch): Promise {\r\n if (this.client) {\r\n if (this.client.connectionState === 'connected' || this.client.connectionState === 'connecting') {\r\n return Promise.resolve(true);\r\n }\r\n }\r\n\r\n if (this.isConnecting) return Promise.resolve(true);\r\n\r\n gstore.dispatch(addCallApiCount());\r\n\r\n this.isConnecting = true;\r\n\r\n return new Promise((resolve, reject) => {\r\n this.getToken(uid)\r\n .then((_token) => {\r\n this.token = _token;\r\n Conversations.create(this.token)\r\n .then((_conn) => {\r\n this.client = _conn;\r\n this.uid = uid;\r\n this.dispatch = _dispatch;\r\n this.initListeners();\r\n this.isActive = true;\r\n this.isConnecting = false;\r\n resolve(true);\r\n })\r\n .catch(() => {\r\n reject(new Error('Failed with twilio conversation initialization'));\r\n });\r\n })\r\n .catch(() => {\r\n reject(new Error('Failed with twilio token request'));\r\n });\r\n });\r\n }\r\n\r\n initFreeConnection(_dispatch): Promise {\r\n if (this.client) {\r\n if (this.client.connectionState === 'connected' || this.client.connectionState === 'connecting') {\r\n return Promise.resolve(true);\r\n }\r\n }\r\n\r\n if (this.isConnecting) return Promise.resolve(true);\r\n\r\n gstore.dispatch(addCallApiCount());\r\n\r\n this.isConnecting = true;\r\n\r\n return new Promise((resolve, reject) => {\r\n this.getFreeToken()\r\n .then((_token) => {\r\n this.token = _token;\r\n Conversations.create(this.token)\r\n .then((_conn) => {\r\n this.client = _conn;\r\n this.uid = FREE_USER_ID;\r\n this.dispatch = _dispatch;\r\n this.initFreeListeners();\r\n this.isActive = true;\r\n this.isConnecting = false;\r\n resolve(true);\r\n })\r\n .catch(() => {\r\n reject(new Error('Failed with twilio conversation initialization'));\r\n });\r\n })\r\n .catch(() => {\r\n reject(new Error('Failed with twilio token request'));\r\n });\r\n });\r\n }\r\n\r\n getUid() : string {\r\n return this.uid;\r\n }\r\n\r\n loadImageThumbnail(uri: string, msg: AccsiomMsg): void {\r\n httpGetAttachmentFileDownloadUrl(`${uri}-thumb`).then((url) => {\r\n fetchUrl(url).then((localUrl) => {\r\n this.dispatch?.(setMessageThumb(msg, uri, localUrl));\r\n }).catch(() => {});\r\n });\r\n }\r\n\r\n loadVideoThumbnail(uri: string, msg: AccsiomMsg): void {\r\n httpGetAttachmentFileDownloadUrl(`${uri}.png`).then((url) => {\r\n fetchUrl(url).then((localUrl) => {\r\n this.dispatch?.(setMessageThumb(msg, uri, localUrl));\r\n }).catch(() => {});\r\n });\r\n }\r\n\r\n initListeners(): void {\r\n if (this.client) {\r\n this.client.on('connectionError', () => {\r\n this.initConnection(this.uid, this.dispatch);\r\n });\r\n\r\n this.client.on('tokenAboutToExpire', () => {\r\n lambdaGetTwilioToken(this.uid, true)\r\n .then((token) => {\r\n if (token !== null) {\r\n this.client.updateToken(token);\r\n } else {\r\n this.cleanUp();\r\n }\r\n })\r\n .catch(() => {\r\n console.log('updateToken Failed.');\r\n });\r\n });\r\n\r\n this.client.on('messageAdded', (msg: TwilioMsg) => {\r\n if (!this.conv) return;\r\n const aMsg = TwilioToAccsiomMsg(msg);\r\n\r\n if (this.conv.sid === aMsg.convId) {\r\n this.messages.push(msg);\r\n\r\n if (aMsg.senderId !== this.uid) {\r\n const { files } = aMsg.body;\r\n files.forEach(({ type, uri }) => {\r\n if (type !== undefined) {\r\n if (type.includes('image/')) {\r\n this.loadImageThumbnail(uri, aMsg);\r\n }\r\n if (type.includes('video/mp4')) {\r\n this.loadVideoThumbnail(uri, aMsg);\r\n }\r\n }\r\n });\r\n this.dispatch?.(msgAdded(aMsg));\r\n } else {\r\n this.dispatch?.(msgSent(aMsg));\r\n }\r\n\r\n this.dispatch?.(updateLastMsgIndex(aMsg.id));\r\n this.lastMsgId = aMsg.id;\r\n this.updateLastReadMsgIndex();\r\n\r\n if (this.uid === this.conv.createdBy) {\r\n const att: any = this.conv.attributes;\r\n att.lastMessage = aMsg.body;\r\n att.lastMessageTime = aMsg.createdAt;\r\n this.conv.updateAttributes(att);\r\n }\r\n }\r\n\r\n if (aMsg.senderId === this.uid) {\r\n lambdaAddAndDeleteMessages(aMsg.convId, [{\r\n msgId: aMsg.id,\r\n senderId: aMsg.senderId,\r\n textContent: aMsg.body.textContent,\r\n textType: aMsg.body.textType,\r\n files: aMsg.body.files\r\n }], []);\r\n }\r\n\r\n // if (aMsg && aMsg.convId) {\r\n // if (document.hasFocus() === false && window.Notification !== null && Notification.permission === 'granted') this.notifyMessage(aMsg);\r\n // }\r\n });\r\n\r\n this.client.on('messageUpdated', (msg: any) => {\r\n if (!this.conv) return;\r\n const aMsg = TwilioToAccsiomMsg(msg.message);\r\n if (this.conv.sid === aMsg.convId) this.dispatch?.(msgUpdated(aMsg));\r\n if (aMsg.senderId === this.uid) {\r\n lambdaUpdateMessage({\r\n sid: aMsg.convId,\r\n msgId: aMsg.id,\r\n senderId: aMsg.senderId,\r\n textContent: aMsg.body.textContent,\r\n textType: aMsg.body.textType,\r\n files: aMsg.body.files\r\n });\r\n }\r\n });\r\n\r\n this.client.on('messageRemoved', (msg: TwilioMsg) => {\r\n if (!this.conv) return;\r\n if (this.conv.sid === msg.conversation.sid) this.dispatch?.(removeMessage(msg.index));\r\n if (msg.author === this.uid) lambdaAddAndDeleteMessages(msg.conversation.sid, [], [msg.index]);\r\n });\r\n\r\n this.client.on('typingStarted', (p: Participant) => {\r\n if (!this.conv) return;\r\n const { sid } = p.conversation;\r\n const { identity } = p;\r\n\r\n if (identity === this.uid) return;\r\n if (sid === this.conv.sid) this.dispatch?.(setTypingStarted(identity));\r\n });\r\n\r\n this.client.on('typingEnded', (p: Participant) => {\r\n if (!this.conv) return;\r\n const { sid } = p.conversation;\r\n if (sid === this.conv.sid) this.dispatch?.(setTypingEnded());\r\n });\r\n\r\n this.client.on('conversationJoined', (_conv: Conversation) => {\r\n if (!this.conv) return;\r\n const { sid } = _conv;\r\n if (sid === this.conv.sid) this.dispatch?.(threadJoined());\r\n });\r\n\r\n this.client.on('participantUpdated', ({ participant }) => {\r\n if (!this.conv) return;\r\n const { sid } = participant.conversation;\r\n if (sid === this.conv.sid) {\r\n const { identity, lastReadMessageIndex } = participant;\r\n const lastMsgIds = {};\r\n lastMsgIds[identity] = lastReadMessageIndex;\r\n this.dispatch?.(updateLastReadMsgIds(lastMsgIds));\r\n }\r\n });\r\n }\r\n }\r\n\r\n initFreeListeners(): void {\r\n if (this.client) {\r\n this.client.on('connectionError', () => {\r\n this.initFreeConnection(this.dispatch);\r\n });\r\n\r\n this.client.on('tokenAboutToExpire', () => {\r\n httpGetFreeCommunityToken()\r\n .then((token) => {\r\n if (token !== null) {\r\n this.client.updateToken(token);\r\n } else {\r\n this.cleanUp();\r\n }\r\n })\r\n .catch(() => {\r\n console.log('updateToken Failed.');\r\n });\r\n });\r\n\r\n this.client.on('messageAdded', (msg: TwilioMsg) => {\r\n if (!this.conv) return;\r\n const aMsg = TwilioToAccsiomMsg(msg);\r\n\r\n if (this.conv.sid === aMsg.convId) {\r\n this.messages.push(msg);\r\n\r\n const { files } = aMsg.body;\r\n files.forEach(({ type, uri }) => {\r\n if (type !== undefined) {\r\n if (type.includes('image/')) {\r\n this.loadImageThumbnail(uri, aMsg);\r\n }\r\n if (type.includes('video/mp4')) {\r\n this.loadVideoThumbnail(uri, aMsg);\r\n }\r\n }\r\n });\r\n this.dispatch?.(msgAdded(aMsg));\r\n\r\n this.dispatch?.(updateLastMsgIndex(aMsg.id));\r\n this.lastMsgId = aMsg.id;\r\n this.updateLastReadMsgIndex();\r\n }\r\n\r\n // if (aMsg && aMsg.convId) {\r\n // if (document.hasFocus() === false && window.Notification !== null && Notification.permission === 'granted') this.notifyMessage(aMsg);\r\n // }\r\n });\r\n\r\n this.client.on('messageUpdated', (msg: any) => {\r\n if (!this.conv) return;\r\n const aMsg = TwilioToAccsiomMsg(msg.message);\r\n if (this.conv.sid === aMsg.convId) this.dispatch?.(msgUpdated(aMsg));\r\n });\r\n\r\n this.client.on('messageRemoved', (msg: TwilioMsg) => {\r\n if (!this.conv) return;\r\n if (this.conv.sid === msg.conversation.sid) this.dispatch?.(removeMessage(msg.index));\r\n });\r\n\r\n this.client.on('typingStarted', (p: Participant) => {\r\n if (!this.conv) return;\r\n const { sid } = p.conversation;\r\n const { identity } = p;\r\n if (sid === this.conv.sid) this.dispatch?.(setTypingStarted(identity));\r\n });\r\n\r\n this.client.on('typingEnded', (p: Participant) => {\r\n if (!this.conv) return;\r\n const { sid } = p.conversation;\r\n if (sid === this.conv.sid) this.dispatch?.(setTypingEnded());\r\n });\r\n\r\n this.client.on('conversationJoined', (_conv: Conversation) => {\r\n if (!this.conv) return;\r\n const { sid } = _conv;\r\n if (sid === this.conv.sid) this.dispatch?.(threadJoined());\r\n });\r\n\r\n this.client.on('participantUpdated', ({ participant }) => {\r\n if (!this.conv) return;\r\n const { sid } = participant.conversation;\r\n if (sid === this.conv.sid) {\r\n const { identity, lastReadMessageIndex } = participant;\r\n const lastMsgIds = {};\r\n lastMsgIds[identity] = lastReadMessageIndex;\r\n this.dispatch?.(updateLastReadMsgIds(lastMsgIds));\r\n }\r\n });\r\n }\r\n }\r\n\r\n loadAvatar(participants: Contact[], creatorId: string, dispatch: any): void {\r\n const newParticipants = participants.filter((participant) => !getUserMinInfoByID(getUserInfoByType(participant)));\r\n const newUsers = newParticipants.map((participant) => {\r\n if ([ACCZIOM_CLIENT_ORG, ACCZIOM_SUPPLIER].includes(participant.type)) return { id: getUserIdByType(participant), oid: creatorId, type: participant.type };\r\n return { id: getUserIdByType(participant), type: participant.type };\r\n });\r\n const nonIndividuals = participants.filter((participant) => [ACCZIOM_ORG, ACCZIOM_CLIENT_ORG, ACCZIOM_SUPPLIER].includes(participant.type)).map((participant) => ({ id: participant.uid, type: ACCZIOM_MEMBER }));\r\n newUsers.push(...nonIndividuals.filter((participant) => !getUserMinInfoByID(participant)));\r\n if (newUsers.length > 0) {\r\n httpGetUsersMin(newUsers)\r\n .then((miniUsers) => {\r\n dispatch(updateUserMinInfos(miniUsers));\r\n })\r\n .catch((err) => {\r\n console.log(`Failed to load avatar with ${JSON.stringify(err)}`);\r\n });\r\n }\r\n }\r\n\r\n setConvDispatch(_conv: Conversation): Promise {\r\n if (!_conv) return Promise.reject(new Error('Conversation not exists.'));\r\n this.conv = _conv;\r\n const thread: Thread = TwilioToAccsiomThread(_conv);\r\n this.lastMsgId = thread.lastMsgIndex;\r\n this.dispatch?.(setThread(thread));\r\n\r\n const promises = [];\r\n promises.push(this.loadAvatar(thread.participants, getUserIdByType(thread.participants.find((participant) => participant.uid === thread.createdBy)), this.dispatch)); // for chat thread by twilio\r\n promises.push(_conv.getUnreadMessagesCount()\r\n .then((val) => {\r\n this.dispatch?.(setMsgUnreadCount(val === null ? 0 : val));\r\n })\r\n .catch((err) => {\r\n console.log(`Failed to get unread message count with ${JSON.stringify(err)}`);\r\n }));\r\n\r\n thread.participants.forEach((item) => {\r\n if (this.users[item.uid] === undefined) {\r\n this.users[item.uid] = null;\r\n promises.push(this.client.getUser(item.uid)\r\n .then((u) => {\r\n this.users[item.uid] = u;\r\n this.dispatch?.(updateUserOnlineStatus(u.identity, u.isOnline));\r\n this.users[item.uid].on('updated', (evt) => {\r\n evt.updateReasons.forEach((ur) => {\r\n if (ur === 'reachabilityOnline') this.dispatch?.(updateUserOnlineStatus(evt.user.identity, evt.user.isOnline));\r\n });\r\n });\r\n })\r\n .catch((err) => {\r\n console.log(`Failed to get user information for ${item.uid} with ${JSON.stringify(err)}`);\r\n }));\r\n }\r\n });\r\n promises.push(this.getMessages()\r\n .then((msgs) => {\r\n if (msgs.length > 0) this.dispatch?.(setMessages(msgs));\r\n })\r\n .catch((err) => {\r\n console.log(`Failed to get messages with ${JSON.stringify(err)}`);\r\n }));\r\n\r\n return new Promise((resolve) => {\r\n Promise.all(promises)\r\n .then(() => { resolve(); });\r\n });\r\n }\r\n\r\n getToken(uid: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n lambdaGetTwilioToken(uid)\r\n .then((token) => {\r\n resolve(token);\r\n })\r\n .catch(() => {\r\n reject(new Error('Failed with twilio token request'));\r\n });\r\n });\r\n }\r\n\r\n getFreeToken(): Promise {\r\n return new Promise((resolve, reject) => {\r\n httpGetFreeCommunityToken()\r\n .then((token) => {\r\n resolve(token);\r\n })\r\n .catch(() => {\r\n reject(new Error('Failed with twilio token request'));\r\n });\r\n });\r\n }\r\n\r\n afterRemoveMessage(message: TwilioMsg): Promise {\r\n const { thread } = gstore.getState().chat;\r\n const { participants, sid } = thread;\r\n if (this.uid) {\r\n axios.post(accsiomURIs.twilio_notification_url, {\r\n type: 'remove',\r\n participants: participants.filter((part) => part.uid !== this.uid).map((part) => ({\r\n uid: part.uid,\r\n type: part.type,\r\n oid: part.oid\r\n })),\r\n sid,\r\n id: message.index\r\n }).catch(() => {});\r\n }\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n deleteMessage(msgId: number): Promise {\r\n gstore.dispatch(addCallApiCount());\r\n for (let i = 0; i < this.messages.length; i++) {\r\n if (this.messages[i].index === msgId) {\r\n this.dispatch?.(removeMessage(msgId));\r\n this.messages[i].remove().then(() => {\r\n // this.afterRemoveMessage(this.messages[i]);\r\n });\r\n this.messages.splice(i, 1);\r\n break;\r\n }\r\n }\r\n\r\n return Promise.resolve(true);\r\n }\r\n\r\n deleteMessages(msgIds: number[]): Promise {\r\n gstore.dispatch(addCallApiCount());\r\n this.messages.forEach((message) => {\r\n if (msgIds.includes(message.index)) {\r\n this.dispatch?.(removeMessage(message.index));\r\n message.remove().then(() => {\r\n // this.afterRemoveMessage(message);\r\n });\r\n }\r\n });\r\n this.messages = this.messages.filter((message) => !msgIds.includes(message.index));\r\n\r\n return Promise.resolve(true);\r\n }\r\n\r\n createConversation(attrib: any, title: string, type: number, firstMsg?: string): Promise {\r\n if (!this.client) return Promise.reject(new Error('Twilio client is not initiated'));\r\n gstore.dispatch(addCallApiCount());\r\n return new Promise((resolve, reject) => {\r\n this.client.createConversation({\r\n friendlyName: title,\r\n attributes: {\r\n ...(!firstMsg ? {} : {\r\n lastMessage: firstMsg,\r\n lastMessageTime: (new Date()).getTime()\r\n }),\r\n recipients: attrib,\r\n type\r\n }\r\n })\r\n .then((conv) => {\r\n conv.join()\r\n .then((joinedConv) => {\r\n lambdaCreateCommunityAdminParticipants(joinedConv.sid, attrib.filter((reiceipt) => reiceipt.uid !== this.uid).map((reiceipt) => reiceipt.uid))\r\n .then(() => {\r\n resolve(joinedConv.sid);\r\n })\r\n .catch((err) => Promise.reject(new Error(`Invitation error: ${err}`)));\r\n })\r\n .catch((err) => Promise.reject(new Error(`Joining error: ${err}`)));\r\n })\r\n .catch((err) => {\r\n reject(new Error(`Creating conversation failed with error: ${JSON.stringify(err)}`));\r\n });\r\n });\r\n }\r\n\r\n addParticipantsToConversation(newRecipients: Contact[]): Promise {\r\n if (!this.conv) return Promise.reject(new Error('Conversation not exists'));\r\n gstore.dispatch(addCallApiCount());\r\n const promises = [];\r\n newRecipients.forEach((recipient) => {\r\n promises.push(this.conv.add(recipient.uid));\r\n });\r\n return new Promise((resolve) => {\r\n Promise.all(promises).then(() => {\r\n const att: any = this.conv.attributes;\r\n const { recipients } = att;\r\n att.recipients = [...recipients, ...newRecipients];\r\n this.conv.updateAttributes(att)\r\n .then(() => {\r\n this.dispatch?.(addRecipientsToThread(newRecipients));\r\n resolve();\r\n });\r\n });\r\n });\r\n }\r\n\r\n removeParticipantsFromConversation(uids: string[]): Promise {\r\n if (!this.conv) return Promise.reject(new Error('Conversation not exists'));\r\n gstore.dispatch(addCallApiCount());\r\n const promises = [];\r\n uids.forEach((uid) => {\r\n promises.push(this.conv.removeParticipant(uid));\r\n });\r\n return new Promise((resolve) => {\r\n Promise.all(promises).then(() => {\r\n const att: any = this.conv.attributes;\r\n att.recipients = att.recipients.filter((recipient) => !uids.includes(recipient.uid));\r\n this.conv.updateAttributes(att)\r\n .then(() => {\r\n this.dispatch?.(removeParticipants(uids));\r\n resolve();\r\n });\r\n });\r\n });\r\n }\r\n\r\n cleanConversation(): Promise {\r\n this.messages.splice(0, this.messages.length);\r\n this.lastMsgId = -1;\r\n this.msgId = -1;\r\n const promises = [];\r\n Object.keys(this.users).forEach((uid) => {\r\n promises.push(this.users[uid]?.unsubscribe());\r\n });\r\n return new Promise((resolve) => {\r\n Promise.all(promises).then(() => {\r\n this.users = {};\r\n this.conv = null;\r\n this.dispatch?.(cleanUpChat());\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n deleteConversation(): Promise {\r\n if (!this.conv) return Promise.reject(new Error('Conversation not exists'));\r\n gstore.dispatch(addCallApiCount());\r\n return new Promise((resolve, reject) => {\r\n this.conv.delete()\r\n .then(() => {\r\n this.cleanConversation()\r\n .then(() => {\r\n resolve();\r\n })\r\n .catch((err) => {\r\n reject(new Error(`The conversation was failed to clean with Error: ${JSON.stringify(err)}`));\r\n });\r\n })\r\n .catch((err) => {\r\n reject(new Error(`The conversation was failed to delete with Error: ${JSON.stringify(err)}`));\r\n });\r\n });\r\n }\r\n\r\n leaveConversation(deletedIds: string[]): Promise {\r\n if (!this.conv) return Promise.reject(new Error('Conversation not exists'));\r\n gstore.dispatch(addCallApiCount());\r\n return new Promise((resolve, reject) => {\r\n if (deletedIds.length < 1) {\r\n this.conv.leave()\r\n .then(() => {\r\n this.cleanConversation()\r\n .then(() => {\r\n resolve();\r\n })\r\n .catch((err) => {\r\n reject(new Error(`The conversation was failed to clean with Error: ${JSON.stringify(err)}`));\r\n });\r\n })\r\n .catch((err) => {\r\n reject(new Error(`The conversation was failed to leave with Error: ${JSON.stringify(err)}`));\r\n });\r\n } else {\r\n this.removeParticipantsFromConversation(deletedIds)\r\n .then(() => {\r\n this.conv.leave()\r\n .then(() => {\r\n this.cleanConversation()\r\n .then(() => {\r\n resolve();\r\n })\r\n .catch((err) => {\r\n reject(new Error(`The conversation was failed to clean with Error: ${JSON.stringify(err)}`));\r\n });\r\n })\r\n .catch((err) => {\r\n reject(new Error(`The conversation was failed to leave with Error: ${JSON.stringify(err)}`));\r\n });\r\n })\r\n .catch((err) => {\r\n reject(new Error(`The conversation was failed to remove other participants with Error: ${JSON.stringify(err)}`));\r\n });\r\n }\r\n });\r\n }\r\n\r\n getConversation(sid: string): Promise {\r\n if (!this.client) return Promise.reject(new Error('Twilio client is not initiated.'));\r\n gstore.dispatch(addCallApiCount());\r\n return new Promise((resolve, reject) => {\r\n this.cleanConversation()\r\n .then(() => {\r\n this.client.getConversationBySid(sid)\r\n .then((_conv) => {\r\n this.setConvDispatch(_conv)\r\n .then(() => { resolve(); });\r\n })\r\n .catch((err) => {\r\n reject(new Error(`Get conversations failed with Error: ${JSON.stringify(err)}`));\r\n });\r\n })\r\n .catch((err) => {\r\n reject(new Error(`Clean conversations failed with Error: ${JSON.stringify(err)}`));\r\n });\r\n });\r\n }\r\n\r\n updateLastReadMsgIndex(): Promise {\r\n gstore.dispatch(addCallApiCount());\r\n this.dispatch?.(markThreadAsSeen());\r\n this.dispatch?.(updateLastReadMsgIndex(this.lastMsgId));\r\n this.conv.setAllMessagesRead().then(() => {\r\n if (this.uid) {\r\n axios.post(accsiomURIs.twilio_notification_url, {\r\n type: 'saw',\r\n uid: this.uid,\r\n sid: this.conv.sid\r\n }).catch(() => {});\r\n }\r\n }).catch(() => {});\r\n // conv.updateLastReadMessageIndex(this.lastMsgId[conv.sid]).catch(() => {});\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n onTyping(): void {\r\n if (!this.conv) return;\r\n this.conv.typing()\r\n .then(() => {})\r\n .catch(() => {});\r\n }\r\n\r\n getMessages(from?: number, direction?: 'backwards' | 'forward'): Promise {\r\n if (!this.conv) return Promise.reject(new Error('Conversation not exists'));\r\n gstore.dispatch(addCallApiCount());\r\n const ret: AccsiomMsg[] = [];\r\n const twilioMsgs : TwilioMsg[] = [];\r\n return new Promise((resolve, reject) => {\r\n this.conv.getMessages(PAGE_SIZE, from, direction)\r\n .then((paginator) => {\r\n paginator.items.forEach((item) => {\r\n const aMsg = TwilioToAccsiomMsg(item);\r\n twilioMsgs.push(item);\r\n const { files } = aMsg.body;\r\n files.forEach(({ type, uri }) => {\r\n if (type !== undefined) {\r\n if (type.includes('image/')) {\r\n this.loadImageThumbnail(uri, aMsg);\r\n }\r\n if (type.includes('video/mp4')) {\r\n this.loadVideoThumbnail(uri, aMsg);\r\n }\r\n }\r\n });\r\n ret.push(aMsg);\r\n });\r\n if (direction === 'forward') {\r\n this.messages.push(...twilioMsgs);\r\n } else {\r\n this.messages.unshift(...twilioMsgs);\r\n }\r\n resolve(ret);\r\n })\r\n .catch((err) => {\r\n reject(new Error(`Get messages failed with Error: ${JSON.stringify(err)}`));\r\n });\r\n });\r\n }\r\n\r\n changeReaction(msgId: number, emoji: string): Promise {\r\n if (!this.conv) return Promise.reject(new Error('Conversation not exists'));\r\n const msg = this.messages.find((item) => item.index === msgId);\r\n if (!msg) return Promise.reject(new Error('Message not exists'));\r\n gstore.dispatch(addCallApiCount());\r\n const attrib = msg.attributes as MessageAttribue;\r\n let newReactions = attrib.reactions;\r\n if (attrib.reactions.some(({ userId }) => userId === this.uid)) {\r\n newReactions = attrib.reactions.map((v) => {\r\n if (v.userId === this.uid) {\r\n if (v.marks.includes(emoji)) {\r\n return {\r\n userId: v.userId,\r\n marks: v.marks.filter((vv) => vv !== emoji)\r\n };\r\n }\r\n return {\r\n userId: v.userId,\r\n marks: [...v.marks, emoji]\r\n };\r\n }\r\n return v;\r\n });\r\n } else {\r\n newReactions = [...attrib.reactions, {\r\n userId: this.uid,\r\n marks: [emoji]\r\n }];\r\n }\r\n const newAttrib = {\r\n ...attrib,\r\n reactions: newReactions\r\n };\r\n return new Promise((resolve) => {\r\n msg.updateAttributes(newAttrib).then(() => {\r\n resolve(true);\r\n }).catch(() => {\r\n resolve(true);\r\n });\r\n // msg.updateBody(_body)\r\n // .then(() => {\r\n // this.dispatch?.(setEditingMsg('', 0));\r\n // resolve(true);\r\n // })\r\n // .catch(() => {\r\n // this.dispatch?.(setEditingMsg('', 0));\r\n // resolve(true);\r\n // });\r\n });\r\n }\r\n\r\n removeFile(msgId: number, uri: string): Promise {\r\n if (!this.conv) return Promise.reject(new Error('Conversation not exists'));\r\n const msg = this.messages.find((item) => item.index === msgId);\r\n if (!msg) return Promise.reject(new Error('Message not exists'));\r\n gstore.dispatch(addCallApiCount());\r\n const body = JSON.parse(msg.body);\r\n const newBody = {\r\n ...body,\r\n files: body.files.filter((f) => f.uri !== uri)\r\n };\r\n return new Promise((resolve) => {\r\n msg.updateBody(JSON.stringify(newBody))\r\n .then(() => {\r\n resolve(true);\r\n })\r\n .catch(() => {\r\n resolve(true);\r\n });\r\n });\r\n }\r\n\r\n updateMessage(msgId: number, content: string): Promise {\r\n if (!this.conv) return Promise.reject(new Error('Conversation not exists'));\r\n const msg = this.messages.find((item) => item.index === msgId);\r\n if (!msg) return Promise.reject(new Error('Message not exists'));\r\n gstore.dispatch(addCallApiCount());\r\n return new Promise((resolve) => {\r\n msg.updateBody(JSON.stringify({\r\n ...JSON.parse(msg.body),\r\n textContent: content\r\n }))\r\n .then(() => {\r\n resolve(true);\r\n })\r\n .catch(() => {\r\n resolve(true);\r\n });\r\n });\r\n }\r\n\r\n sendQuote(_body: string, attrib?: any): Promise {\r\n if (!this.conv) return Promise.reject(new Error('Conversation not exists'));\r\n gstore.dispatch(addCallApiCount());\r\n this.dispatch?.(msgAdded({\r\n id: this.msgId,\r\n // body: _body, TODO\r\n body: null,\r\n convId: this.conv.sid,\r\n attrib,\r\n createdAt: (new Date()).getTime(),\r\n sent: false,\r\n senderId: this.uid\r\n }));\r\n this.msgId--;\r\n return new Promise((resolve, reject) => {\r\n this.conv.sendMessage(_body, attrib)\r\n .then((val) => {\r\n if (this.uid === this.conv.createdBy) {\r\n const att: any = this.conv.attributes;\r\n att.lastMessage = _body;\r\n att.lastMessageTime = (new Date()).getTime();\r\n this.conv.updateAttributes(att);\r\n }\r\n resolve(val);\r\n })\r\n .catch((err) => {\r\n reject(new Error(`Send message failed with error : ${err}`));\r\n });\r\n });\r\n }\r\n\r\n sendMessage(textType: number, textContent: string, files: any[], replyTo: any): Promise {\r\n if (!this.conv) return Promise.reject(new Error('Conversation not exists'));\r\n gstore.dispatch(addCallApiCount());\r\n const body = {\r\n id: uuidv4(),\r\n textType,\r\n textContent,\r\n replyTo,\r\n files\r\n } as MessageBody;\r\n const newMsg = {\r\n id: this.msgId,\r\n body,\r\n convId: this.conv.sid,\r\n attrib: { reactions: [] },\r\n createdAt: (new Date()).getTime(),\r\n sent: false,\r\n senderId: this.uid\r\n };\r\n this.dispatch?.(msgAdded(newMsg));\r\n files.forEach(({ type, uri }) => {\r\n if (type !== undefined) {\r\n if (type.includes('image/')) {\r\n this.loadImageThumbnail(uri, newMsg);\r\n }\r\n if (type.includes('video/mp4')) {\r\n this.loadVideoThumbnail(uri, newMsg);\r\n }\r\n }\r\n });\r\n this.msgId--;\r\n return this.conv.sendMessage(JSON.stringify(body), newMsg.attrib);\r\n }\r\n}\r\n\r\nexport const chatApi = new ChatApi();\r\n","import getUserDisplayName from './getUserDisplayName';\r\n\r\nconst getInitials = (name = ''): string => name\r\n .replace(/\\s+/, ' ')\r\n .split(' ')\r\n .slice(0, 2)\r\n .map((v) => v && v[0].toUpperCase())\r\n .join('');\r\n\r\nconst colors = ['#FFCDD2', '#F8BBD0', '#E1BEE7', '#D1C4E9', '#C5CAE9', '#BBDEFB', '#B3E5FC', '#B2DFDB'];\r\n\r\n// const numberFromText = (text: string): number => {\r\n// const charCodes = text\r\n// .split('')\r\n// .map((char) => char.charCodeAt(0) - 65)\r\n// .join('');\r\n// return Math.trunc(parseInt(charCodes, 10));\r\n// };\r\n\r\n// export const getInitialBackground = (text: string): string => colors[numberFromText(text) % colors.length];\r\nexport const getInitialBackground = (initials: string): string => {\r\n let sumInitials = 0;\r\n for (let i = 0; i < initials.length; i++) {\r\n sumInitials += (initials.charCodeAt(i) - 65);\r\n }\r\n return colors[sumInitials % colors.length];\r\n};\r\n\r\nexport const getInitialOfMiniUser = (miniUser): string => (getInitials(getUserDisplayName(miniUser)));\r\n\r\nexport default getInitials;\r\n","import { FC, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Avatar, Box, Button, ListItem, Paper, Skeleton, Typography, Popover } from '@material-ui/core';\r\nimport getUserDisplayName from 'src/utils/getUserDisplayName';\r\nimport getInitials, { getInitialBackground } from 'src/utils/getInitials';\r\nimport { UserMinInfo } from 'src/../../Common/Model/common';\r\nimport { ACCZIOM_CLIENT_ORG, ACCZIOM_SUPPLIER, ACCZIOM_ORG } from 'src/globals';\r\nimport { SiGroupon } from 'react-icons/si';\r\nimport { httpGetOrganizationInfo, httpGetUserInfo } from 'src/apis/httpDispatch';\r\nimport useMounted from 'src/hooks/useMounted';\r\nimport BorderColorIcon from '@mui/icons-material/BorderColor';\r\nimport PhoneIcon from '@mui/icons-material/Phone';\r\nimport LinkIcon from '@mui/icons-material/Link';\r\nimport MailIcon from '@mui/icons-material/Mail';\r\nimport CakeIcon from '@mui/icons-material/Cake';\r\nimport PlaceIcon from '@mui/icons-material/Place';\r\nimport { toDisplayDateFormat } from 'src/utils/dateFormatUtils';\r\nimport OpenInNewIcon from '@mui/icons-material/OpenInNew';\r\nimport { useSelector } from 'src/store';\r\nimport { OrgMember } from 'src/../../Common/Model/organization';\r\n// import { getCountry } from 'src/utils/countries';\r\nimport 'src/theme/scrollbar.css';\r\nimport { memberToMiniUser } from 'src/utils/getUserMinInfo';\r\n\r\ninterface UserAvatarProps {\r\n userInfo?: UserMinInfo;\r\n size: number;\r\n showType?: boolean;\r\n isBatch?: boolean;\r\n}\r\n\r\nexport const UserAvatar: FC = (props) => {\r\n const { userInfo, size, showType, isBatch } = props;\r\n const displayName = getUserDisplayName(userInfo);\r\n const initialStr = getInitials(displayName).slice(0, isBatch ? 1 : 2);\r\n const avatar = (\r\n theme.palette.text.primary,\r\n fontWeight: 'bold'\r\n }}\r\n >\r\n {initialStr}\r\n \r\n );\r\n if (showType === false || (!userInfo || (userInfo.type !== ACCZIOM_ORG && userInfo.type !== ACCZIOM_CLIENT_ORG && userInfo.type !== ACCZIOM_SUPPLIER))) return avatar;\r\n const orgIconSize = size / 3;\r\n return (\r\n \r\n {avatar}\r\n \r\n \r\n );\r\n};\r\n\r\nUserAvatar.propTypes = {\r\n userInfo: PropTypes.any,\r\n size: PropTypes.number.isRequired,\r\n showType: PropTypes.bool,\r\n isBatch: PropTypes.bool\r\n};\r\n\r\nexport const UserAvatarWithOrg: FC<{\r\n userInfo: UserMinInfo;\r\n orgInfo: UserMinInfo;\r\n size: number;\r\n}> = ({\r\n userInfo,\r\n orgInfo,\r\n size\r\n}) => {\r\n const orgSize = Math.floor(size / 2.2);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nUserAvatarWithOrg.propTypes = {\r\n userInfo: PropTypes.any,\r\n orgInfo: PropTypes.any,\r\n size: PropTypes.number\r\n};\r\n\r\ninterface SmallUserInfoProps {\r\n userInfo?: UserMinInfo;\r\n}\r\n\r\nexport const SmallUserInfo: FC = (props) => {\r\n const { userInfo } = props;\r\n\r\n return (\r\n <>\r\n \r\n \r\n {getUserDisplayName(userInfo)}\r\n \r\n \r\n );\r\n};\r\n\r\nSmallUserInfo.propTypes = {\r\n userInfo: PropTypes.any\r\n};\r\n\r\nexport const SmallUserInfoGrouped: FC = (props) => {\r\n const { userInfo } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nSmallUserInfoGrouped.propTypes = {\r\n userInfo: PropTypes.any\r\n};\r\n\r\nconst ProfileInfo = (Icon: any, text: string) => (\r\n <>\r\n {!!text && (\r\n \r\n \r\n \r\n {text}\r\n \r\n \r\n )}\r\n \r\n);\r\n\r\ninterface MemberPopoverProps {\r\n memberInfo: OrgMember;\r\n children: any;\r\n}\r\n\r\nexport const MemberPopover: FC = (props) => {\r\n const { memberInfo, children } = props;\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const open = Boolean(anchorEl);\r\n\r\n const formalName = [memberInfo.firstName, memberInfo.middleName, memberInfo.lastName].filter((_) => !!_).map((_) => _.trim()).join(' ');\r\n // let realCountry = getCountry(memberInfo.country)?.text;\r\n // if (!realCountry) realCountry = memberInfo.country;\r\n // const detailAddr = [memberInfo.city, memberInfo.state, realCountry].filter((_) => !!_).map((_) => _.trim()).join(', ');\r\n\r\n const handleClick = (event: React.MouseEvent) => {\r\n setAnchorEl(event.currentTarget);\r\n event.stopPropagation();\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n if (!memberInfo) return (<>);\r\n\r\n return (\r\n \r\n \r\n {children}\r\n \r\n { e.stopPropagation(); }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {!formalName ? memberInfo.penName : formalName}\r\n \r\n \r\n \r\n \r\n {ProfileInfo(BorderColorIcon, memberInfo.penName)}\r\n {ProfileInfo(MailIcon, memberInfo.email)}\r\n {ProfileInfo(PhoneIcon, memberInfo.phone)}\r\n {ProfileInfo(LinkIcon, memberInfo.website)}\r\n \r\n \r\n {ProfileInfo(PlaceIcon, memberInfo.addressLine1)}\r\n {/* {detailAddr && (\r\n \r\n \r\n {detailAddr}\r\n \r\n \r\n )} */}\r\n \r\n {memberInfo.hiMsg && (\r\n \r\n \r\n \r\n {memberInfo.hiMsg}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nMemberPopover.propTypes = {\r\n memberInfo: PropTypes.any,\r\n children: PropTypes.any\r\n};\r\n\r\ninterface SmallMemberInfoProps {\r\n memberInfo?: OrgMember;\r\n}\r\n\r\nexport const SmallMemberInfoWithDetail: FC = (props) => {\r\n const { memberInfo } = props;\r\n if (!memberInfo) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nSmallMemberInfoWithDetail.propTypes = {\r\n memberInfo: PropTypes.any\r\n};\r\n\r\ninterface ProfilePopoverProps {\r\n userInfo: UserMinInfo;\r\n children: any;\r\n showMe?: boolean;\r\n}\r\n\r\nexport const ProfilePopover: FC = (props) => {\r\n const { userInfo, children, showMe } = props;\r\n const mounted = useMounted();\r\n // const navigate = useNavigate();\r\n const { activeOrgId } = useSelector((state) => state.organization);\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const [loadedInfo, setLoadedInfo] = useState(null);\r\n const [isLoading, setLoading] = useState(false);\r\n const [isLoadFailed, setLoadFailed] = useState(false);\r\n const open = Boolean(anchorEl);\r\n\r\n useEffect(() => {\r\n setLoadedInfo(null);\r\n setLoading(false);\r\n setLoadFailed(false);\r\n }, [userInfo]);\r\n\r\n const loadInfo = async () => {\r\n setLoading(true);\r\n try {\r\n if (userInfo.type === ACCZIOM_ORG) {\r\n const loadedOrgInfo = await httpGetOrganizationInfo(userInfo.uid);\r\n if (mounted.current) {\r\n setLoadedInfo(loadedOrgInfo);\r\n }\r\n } else {\r\n const loadedUserInfo = await httpGetUserInfo(userInfo.uid);\r\n if (mounted.current) {\r\n setLoadedInfo(loadedUserInfo);\r\n }\r\n }\r\n } catch (err) {\r\n if (mounted.current) setLoadFailed(true);\r\n } finally {\r\n if (mounted.current) setLoading(false);\r\n }\r\n };\r\n\r\n const handleClick = (event: React.MouseEvent) => {\r\n if (!showMe && userInfo.uid === activeOrgId) return;\r\n setAnchorEl(event.currentTarget);\r\n loadInfo();\r\n event.stopPropagation();\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const onVisitUs = () => {\r\n if (userInfo.uid === activeOrgId && showMe) return;\r\n const myUrl = window.location.origin;\r\n if (loadedInfo) {\r\n window.open(`${myUrl}/about/${loadedInfo.domainName}`);\r\n }\r\n };\r\n\r\n if (!userInfo) return (<>);\r\n\r\n return (\r\n \r\n \r\n {children}\r\n \r\n { e.stopPropagation(); }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {!isLoadFailed && (\r\n \r\n \r\n {userInfo.type !== ACCZIOM_ORG && `${userInfo.firstName} ${userInfo.lastName}`}\r\n {userInfo.type === ACCZIOM_ORG && userInfo.penName}\r\n \r\n \r\n )}\r\n {!isLoading && userInfo.type !== ACCZIOM_ORG && loadedInfo && (\r\n \r\n {ProfileInfo(BorderColorIcon, loadedInfo.penName)}\r\n {loadedInfo.publishedProfile?.includes('email') && ProfileInfo(MailIcon, loadedInfo.email)}\r\n {loadedInfo.publishedProfile?.includes('phone') && ProfileInfo(PhoneIcon, loadedInfo.phone)}\r\n {(!loadedInfo.publishedProfile || loadedInfo.publishedProfile?.includes('website')) && ProfileInfo(LinkIcon, loadedInfo.website)}\r\n {(!loadedInfo.publishedProfile || loadedInfo.publishedProfile?.includes('dateOfBirth')) && ProfileInfo(CakeIcon, toDisplayDateFormat(loadedInfo.dateOfBirth))}\r\n {loadedInfo.publishedProfile?.includes('location') && ProfileInfo(PlaceIcon, loadedInfo.addressLine1)}\r\n \r\n )}\r\n {!isLoading && userInfo.type === ACCZIOM_ORG && loadedInfo && (\r\n \r\n {ProfileInfo(MailIcon, loadedInfo.email)}\r\n {ProfileInfo(PhoneIcon, loadedInfo.phone)}\r\n {ProfileInfo(LinkIcon, loadedInfo.website)}\r\n {ProfileInfo(PlaceIcon, loadedInfo.addressLine1)}\r\n \r\n }\r\n onClick={onVisitUs}\r\n >\r\n Visit Us\r\n \r\n \r\n \r\n )}\r\n {isLoading && (\r\n \r\n \r\n \r\n \r\n )}\r\n {isLoadFailed && (\r\n \r\n Failed to get information.\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nProfilePopover.propTypes = {\r\n userInfo: PropTypes.any,\r\n children: PropTypes.any,\r\n showMe: PropTypes.bool\r\n};\r\n\r\nexport const SmallUserInfoWithDetail: FC = (props) => {\r\n const { userInfo } = props;\r\n if (!userInfo) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nSmallUserInfoWithDetail.propTypes = {\r\n userInfo: PropTypes.any\r\n};\r\n\r\ninterface SmallUserInfoListProps {\r\n userMinInfos: UserMinInfo[];\r\n}\r\n\r\nexport const SmallUserInfoList: FC = ({ userMinInfos }) => (\r\n <>\r\n {userMinInfos.map((info) => (\r\n \r\n ))}\r\n \r\n);\r\n\r\nSmallUserInfoList.propTypes = {\r\n userMinInfos: PropTypes.array\r\n};\r\n","import { Box } from '@material-ui/core';\r\nimport type { FC } from 'react';\r\nimport 'react-loader-spinner/dist/loader/css/react-spinner-loader.css';\r\nimport Loader from 'react-loader-spinner';\r\nimport { useTheme } from '@material-ui/core/styles';\r\nimport 'src/components/display/loading.css';\r\nimport PropTypes from 'prop-types';\r\nimport { THEME_COLOR_GRAY } from 'src/globals';\r\n\r\nconst SpinnerScreen: FC<{ noTopbar?: boolean }> = ({ noTopbar }) => {\r\n const color = useTheme().palette.primary.main;\r\n return (\r\n theme.palette.background.default : THEME_COLOR_GRAY, // '#1c2531',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n zIndex: 2000,\r\n ...(!noTopbar ? ({\r\n left: 0,\r\n position: 'fixed',\r\n top: 0\r\n }) : {})\r\n }}\r\n >\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nSpinnerScreen.propTypes = {\r\n noTopbar: PropTypes.bool\r\n};\r\n\r\nexport default SpinnerScreen;\r\n","import { createContext, useEffect, useReducer } from 'react';\r\nimport type { FC, ReactNode } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Amplify, { Auth } from 'aws-amplify';\r\nimport { amplifyConfig } from '../config';\r\nimport type { User } from 'src/types/user';\r\nimport cleanUp from 'src/utils/cleanUp';\r\nimport getUserDisplayName from 'src/utils/getUserDisplayName';\r\nimport gstore from 'src/store';\r\nimport { IDLE_DURATION_MINUTES } from 'src/globals';\r\n\r\nAmplify.configure(amplifyConfig);\r\n\r\ninterface State {\r\n isInitialized: boolean;\r\n isAuthenticated: boolean;\r\n user: User | null;\r\n}\r\n\r\ninterface AuthContextValue extends State {\r\n platform: 'Amplify';\r\n login: (email: string, password: string) => Promise;\r\n logout: () => Promise;\r\n loginSocial: (provider: string) => Promise;\r\n register: (email: string, password: string, fname: string, mname: string, lname: string, phone: string, mid: string) => Promise;\r\n verifyCode: (username: string, code: string) => Promise;\r\n resendCode: (username: string) => Promise;\r\n passwordRecovery: (username: string) => Promise;\r\n passwordReset: (\r\n username: string,\r\n code: string,\r\n newPassword: string\r\n ) => Promise;\r\n checkLive: () => Promise;\r\n}\r\n\r\ninterface AuthProviderProps {\r\n children: ReactNode;\r\n}\r\n\r\ntype InitializeAction = {\r\n type: 'INITIALIZE';\r\n payload: {\r\n isAuthenticated: boolean;\r\n user: User | null;\r\n };\r\n};\r\n\r\ntype LoginAction = {\r\n type: 'LOGIN';\r\n payload: {\r\n user: User;\r\n };\r\n};\r\n\r\ntype LoginSocialAction = {\r\n type: 'LOGINSOCIAL';\r\n payload: {\r\n user: User;\r\n };\r\n};\r\n\r\ntype LogoutAction = {\r\n type: 'LOGOUT';\r\n};\r\n\r\ntype RegisterAction = {\r\n type: 'REGISTER';\r\n};\r\n\r\ntype VerifyCodeAction = {\r\n type: 'VERIFY_CODE';\r\n};\r\n\r\ntype ResendCodeAction = {\r\n type: 'RESEND_CODE';\r\n};\r\n\r\ntype PasswordRecoveryAction = {\r\n type: 'PASSWORD_RECOVERY';\r\n};\r\n\r\ntype PasswordResetAction = {\r\n type: 'PASSWORD_RESET';\r\n};\r\n\r\ntype Action =\r\n | InitializeAction\r\n | LoginAction\r\n | LoginSocialAction\r\n | LogoutAction\r\n | RegisterAction\r\n | VerifyCodeAction\r\n | ResendCodeAction\r\n | PasswordRecoveryAction\r\n | PasswordResetAction;\r\n\r\nconst initialState: State = {\r\n isAuthenticated: false,\r\n isInitialized: false,\r\n user: null\r\n};\r\n\r\nconst handlers: Record State> = {\r\n INITIALIZE: (state: State, action: InitializeAction): State => {\r\n const { isAuthenticated, user } = action.payload;\r\n\r\n return {\r\n ...state,\r\n isAuthenticated,\r\n isInitialized: true,\r\n user\r\n };\r\n },\r\n LOGIN: (state: State, action: LoginAction): State => {\r\n const { user } = action.payload;\r\n\r\n return {\r\n ...state,\r\n isAuthenticated: true,\r\n user\r\n };\r\n },\r\n LOGINSOCIAL: (state: State, action: LoginSocialAction): State => {\r\n const { user } = action.payload;\r\n\r\n return {\r\n ...state,\r\n isAuthenticated: true,\r\n user\r\n };\r\n },\r\n LOGOUT: (state: State): State => ({\r\n ...state,\r\n isAuthenticated: false,\r\n user: null\r\n }),\r\n REGISTER: (state: State): State => ({ ...state }),\r\n VERIFY_CODE: (state: State): State => ({ ...state }),\r\n RESEND_CODE: (state: State): State => ({ ...state }),\r\n PASSWORD_RECOVERY: (state: State): State => ({ ...state }),\r\n PASSWORD_RESET: (state: State): State => ({ ...state })\r\n};\r\n\r\nconst reducer = (state: State, action: Action): State => (\r\n handlers[action.type] ? handlers[action.type](state, action) : state\r\n);\r\n\r\nconst AuthContext = createContext({\r\n ...initialState,\r\n platform: 'Amplify',\r\n login: () => Promise.resolve(),\r\n loginSocial: () => Promise.resolve(),\r\n logout: () => Promise.resolve(),\r\n register: () => Promise.resolve(),\r\n verifyCode: () => Promise.resolve(),\r\n resendCode: () => Promise.resolve(),\r\n passwordRecovery: () => Promise.resolve(),\r\n passwordReset: () => Promise.resolve(),\r\n checkLive: () => Promise.resolve()\r\n});\r\n\r\nexport const AuthProvider: FC = (props) => {\r\n const { children } = props;\r\n const [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n useEffect(() => {\r\n const initialize = async (): Promise => {\r\n try {\r\n const user = await Auth.currentAuthenticatedUser();\r\n let userid = user?.attributes?.sub;\r\n if (userid === undefined) userid = user.username;\r\n dispatch({\r\n type: 'INITIALIZE',\r\n payload: {\r\n isAuthenticated: true,\r\n user: {\r\n id: userid,\r\n avatar: '',\r\n email: user?.attributes?.email,\r\n name: ''\r\n }\r\n }\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: 'INITIALIZE',\r\n payload: {\r\n isAuthenticated: false,\r\n user: null\r\n }\r\n });\r\n }\r\n };\r\n\r\n initialize();\r\n }, []);\r\n\r\n const login = async (email: string, password: string): Promise => {\r\n const user = await Auth.signIn(email, password);\r\n if (user.challengeName) {\r\n console.error(`Unable to login, because challenge \"${user.challengeName}\" is mandated and we did not handle this case.`);\r\n return;\r\n }\r\n dispatch({\r\n type: 'LOGIN',\r\n payload: {\r\n user: {\r\n id: user.attributes.sub,\r\n avatar: '',\r\n email: user.attributes.email,\r\n name: getUserDisplayName({\r\n firstName: user.attributes['custom:firstname'],\r\n middleName: user.attributes['custom:custom:middlename'],\r\n lastName: user.attributes['custom:lastname'],\r\n })\r\n }\r\n }\r\n });\r\n };\r\n\r\n const checkLive = async (): Promise => {\r\n try {\r\n const { callApiInfo } = gstore.getState().user;\r\n const { lastCalledAt } = callApiInfo;\r\n const curTime = Math.round(new Date().getTime() / 1000);\r\n if (lastCalledAt + IDLE_DURATION_MINUTES * 60 < curTime) {\r\n cleanUp();\r\n await Auth.signOut();\r\n dispatch({\r\n type: 'INITIALIZE',\r\n payload: {\r\n isAuthenticated: false,\r\n user: null\r\n }\r\n });\r\n } else await Auth.currentSession();\r\n } catch (e) {\r\n cleanUp();\r\n await Auth.signOut();\r\n dispatch({\r\n type: 'INITIALIZE',\r\n payload: {\r\n isAuthenticated: false,\r\n user: null\r\n }\r\n });\r\n }\r\n };\r\n\r\n const loginSocial = async (provider: string, param: string = null): Promise => {\r\n await Auth.federatedSignIn({\r\n customProvider: provider,\r\n ...(!!param && { customState: param })\r\n });\r\n };\r\n\r\n const logout = async (): Promise => {\r\n cleanUp();\r\n await Auth.signOut();\r\n dispatch({\r\n type: 'LOGOUT'\r\n });\r\n };\r\n\r\n const register = async (email: string, pwd: string, fname: string, mname: string, lname: string, phone: string, mid: string): Promise => {\r\n await Auth.signUp({\r\n username: email,\r\n password: pwd,\r\n attributes: {\r\n 'custom:phone': phone,\r\n 'custom:firstname': fname,\r\n 'custom:lastname': lname,\r\n 'custom:custom:middlename': mname,\r\n 'custom:ldlddafefw': mid\r\n }\r\n });\r\n dispatch({\r\n type: 'REGISTER'\r\n });\r\n };\r\n\r\n const verifyCode = async (username: string, code: string): Promise => {\r\n await Auth.confirmSignUp(username, code);\r\n dispatch({\r\n type: 'VERIFY_CODE'\r\n });\r\n };\r\n\r\n const resendCode = async (username: string): Promise => {\r\n await Auth.resendSignUp(username);\r\n dispatch({\r\n type: 'RESEND_CODE'\r\n });\r\n };\r\n\r\n const passwordRecovery = async (username: string): Promise => {\r\n await Auth.forgotPassword(username);\r\n dispatch({\r\n type: 'PASSWORD_RECOVERY'\r\n });\r\n };\r\n\r\n const passwordReset = async (\r\n username: string,\r\n code: string,\r\n newPassword: string\r\n ): Promise => {\r\n await Auth.forgotPasswordSubmit(username, code, newPassword);\r\n dispatch({\r\n type: 'PASSWORD_RESET'\r\n });\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nAuthProvider.propTypes = {\r\n children: PropTypes.node.isRequired\r\n};\r\n\r\nexport default AuthContext;\r\n","import { chatApi } from 'src/apis/chatApi';\r\nimport { clearJobs } from './intervalJobs';\r\n\r\nconst cleanUp = (): void => {\r\n chatApi.cleanUp();\r\n clearJobs();\r\n};\r\n\r\nexport default cleanUp;\r\n","import wait from './wait';\r\n// import useAuth from 'src/hooks/useAuth';\r\n\r\nlet jobList: any[] = [];\r\n\r\nexport const clearJobs = (): void => {\r\n jobList.splice(0, jobList.length);\r\n};\r\n\r\nconst intervalJobs = (interval: number, dispatch, initial: boolean = true, ...args): void => {\r\n if (initial === true) {\r\n if (jobList.includes(dispatch) === true) return;\r\n jobList.push(dispatch);\r\n }\r\n\r\n // const auth = useAuth();\r\n\r\n wait(interval)\r\n .then(() => {\r\n // if (!auth.isAuthenticated) {\r\n // clearJobs();\r\n // return;\r\n // }\r\n dispatch(...args)\r\n .then(() => intervalJobs(interval, dispatch, false, ...args))\r\n .catch(() => {\r\n jobList = jobList.filter((job) => job !== dispatch);\r\n });\r\n });\r\n};\r\n\r\nexport default intervalJobs;\r\n","import { combineReducers } from '@reduxjs/toolkit';\r\nimport { reducer as chatReducer } from 'src/slices/chat';\r\nimport { reducer as userReducer } from 'src/slices/user';\r\nimport { reducer as organizationReducer } from 'src/slices/organization';\r\nimport { reducer as networkReducer } from 'src/slices/network';\r\nimport { reducer as tagReducer } from 'src/slices/tag';\r\nimport { reducer as taxonomyReducer } from 'src/slices/taxonomy';\r\n\r\nconst rootReducer = combineReducers({\r\n chat: chatReducer,\r\n organization: organizationReducer,\r\n user: userReducer,\r\n network: networkReducer,\r\n tag: tagReducer,\r\n taxonomy: taxonomyReducer\r\n});\r\n\r\nexport default rootReducer;\r\n","const favIconMiddleware = (_store) => (next) => (action) => {\r\n const result = next(action);\r\n\r\n if (action.type.startsWith('apprising/') || action.type.startsWith('chat/')) {\r\n const state = _store.getState();\r\n const { thread } = state.chat;\r\n const icon = document.getElementById('favicon');\r\n const curHref = icon.getAttribute('href');\r\n if (thread?.unreadCount > 0) {\r\n icon.setAttribute('href', curHref.replace('favicon.svg', 'favicon_notification.svg'));\r\n } else {\r\n icon.setAttribute('href', curHref.replace('favicon_notification.svg', 'favicon.svg'));\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport default favIconMiddleware;\r\n","import { useDispatch as useReduxDispatch, useSelector as useReduxSelector } from 'react-redux';\r\nimport type { TypedUseSelectorHook } from 'react-redux';\r\nimport type { ThunkAction } from 'redux-thunk';\r\nimport { configureStore } from '@reduxjs/toolkit';\r\nimport type { Action } from '@reduxjs/toolkit';\r\nimport rootReducer from './rootReducer';\r\nimport favIconMiddleware from './favicon';\r\n\r\nconst store = configureStore({\r\n reducer: rootReducer,\r\n devTools: process.env.REACT_APP_ENABLE_REDUX_DEV_TOOLS === 'true',\r\n middleware: (getDefaultMiddleware) => getDefaultMiddleware({\r\n serializableCheck: {\r\n ignoredActions: ['user/setAvatar']\r\n }\r\n }).concat([favIconMiddleware])\r\n});\r\n\r\nexport type RootState = ReturnType;\r\n\r\nexport type AppDispatch = typeof store.dispatch;\r\n\r\nexport type AppThunk = ThunkAction>;\r\n\r\nexport const useSelector: TypedUseSelectorHook = useReduxSelector;\r\n\r\nexport const useDispatch = () => useReduxDispatch();\r\n\r\nexport default store;\r\n","export const fetchUrl = async (url: string) => {\r\n const res = await fetch(url);\r\n const buf = await res.arrayBuffer();\r\n return URL.createObjectURL(new Blob([buf]));\r\n};\r\n\r\nexport const uploadFile = async (file: File | Blob, url: string): Promise => fetch(url, {\r\n method: 'put',\r\n headers: {\r\n 'Access-Control-Allow-Methods': '*',\r\n 'Access-Control-Allow-Origin': '*',\r\n 'Content-Type': ''\r\n },\r\n body: file,\r\n})\r\n .then((reponse) => Promise.resolve(reponse));\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\r\nimport { AppThunk } from 'src/store';\r\nimport { User } from 'src/../../Common/Model/user';\r\nimport { objCopy } from 'src/utils/copyObject';\r\nimport { Organization, OrgMemberForClient } from 'src/../../Common/Model/organization';\r\n\r\nexport enum LoadingStatus {\r\n NONE = 1,\r\n LOADING = 2,\r\n COMPLETED = 3\r\n}\r\n\r\ninterface SearchInputProps {\r\n hasButton?: boolean;\r\n placeHolder?: string;\r\n}\r\n\r\ninterface UserState {\r\n userInfo: User | null;\r\n domainName: string;\r\n loadingStatus: LoadingStatus;\r\n requestedLocation: string;\r\n registeredVerificationInfo: any;\r\n inviteInfo: any;\r\n memberInfos: OrgMemberForClient[];\r\n memberNeedReload: boolean;\r\n connectDlgOpen: boolean;\r\n signingOrgInfo: Organization;\r\n isSearching: boolean;\r\n searchInfo: SearchInputProps;\r\n callApiInfo: { count: number; lastCalledAt: number; };\r\n}\r\n\r\nconst initialState: UserState = {\r\n userInfo: null,\r\n domainName: '',\r\n loadingStatus: LoadingStatus.NONE,\r\n requestedLocation: null,\r\n registeredVerificationInfo: null,\r\n inviteInfo: null,\r\n memberInfos: [],\r\n memberNeedReload: true,\r\n connectDlgOpen: false,\r\n signingOrgInfo: null,\r\n isSearching: false,\r\n searchInfo: null,\r\n callApiInfo: { count: 0, lastCalledAt: 0 }\r\n};\r\n\r\nconst slice = createSlice({\r\n name: 'user',\r\n initialState,\r\n reducers: {\r\n clearState(state: UserState) {\r\n state.userInfo = null;\r\n state.domainName = '';\r\n state.loadingStatus = LoadingStatus.NONE;\r\n state.requestedLocation = null;\r\n state.registeredVerificationInfo = null;\r\n state.inviteInfo = null;\r\n state.memberInfos.splice(0, state.memberInfos.length);\r\n state.memberNeedReload = true;\r\n state.connectDlgOpen = false;\r\n state.signingOrgInfo = null;\r\n state.isSearching = false;\r\n state.searchInfo = null;\r\n state.callApiInfo = { count: 0, lastCalledAt: 0 };\r\n },\r\n addCallApiCount(state: UserState): void {\r\n state.callApiInfo.count += 1;\r\n state.callApiInfo.lastCalledAt = Math.round(new Date().getTime() / 1000);\r\n },\r\n setMemberNeedReload(state: UserState, action: PayloadAction): void {\r\n state.memberNeedReload = action.payload;\r\n },\r\n updateUser(state: UserState, action: PayloadAction): void {\r\n const user = action.payload;\r\n objCopy(user, state.userInfo);\r\n },\r\n setUser(state: UserState, action: PayloadAction): void {\r\n const user = action.payload as User;\r\n state.userInfo = user;\r\n },\r\n setAvatar(state:UserState, action: PayloadAction): void {\r\n const avatar = action.payload as string;\r\n state.userInfo.avatar = avatar;\r\n },\r\n setLoadingStatus(state: UserState, action: PayloadAction): void {\r\n state.loadingStatus = action.payload;\r\n },\r\n setRequestedLocation(state: UserState, action: PayloadAction): void {\r\n state.requestedLocation = action.payload;\r\n },\r\n setVerificationStatus(state: UserState, action: PayloadAction): void {\r\n state.userInfo.identityVerified = action.payload;\r\n },\r\n setRegisteredVerificationInfo(state: UserState, action: PayloadAction): void {\r\n state.registeredVerificationInfo = action.payload;\r\n },\r\n setInviteInfo(state: UserState, action: PayloadAction): void {\r\n state.inviteInfo = action.payload;\r\n },\r\n setDomainName(state: UserState, action: PayloadAction): void {\r\n state.domainName = action.payload;\r\n },\r\n setMemberInfos(state: UserState, action: PayloadAction): void {\r\n state.memberInfos = action.payload as OrgMemberForClient[];\r\n state.memberNeedReload = false;\r\n },\r\n addMemberInfo(state: UserState, action: PayloadAction): void {\r\n const newMemberInfo = action.payload as OrgMemberForClient;\r\n state.memberInfos.push(newMemberInfo);\r\n },\r\n updateMemberInfo(state: UserState, action: PayloadAction): void {\r\n const newMemberInfo = action.payload as OrgMemberForClient;\r\n const oldMemberId = state.memberInfos.findIndex((memberInfo) => memberInfo.mid === newMemberInfo.mid);\r\n if (oldMemberId >= 0) state.memberInfos.splice(oldMemberId, 1, newMemberInfo);\r\n },\r\n updateMemberStatus(state: UserState, action: PayloadAction<{ mid: string; status: number; updatedAt: Date }>): void {\r\n const { mid, status, updatedAt } = action.payload;\r\n const curMember = state.memberInfos.find((member) => member.mid === mid);\r\n if (curMember) {\r\n curMember.status = status;\r\n curMember.updatedAt = updatedAt;\r\n }\r\n },\r\n deleteMemberInfo(state: UserState, action: PayloadAction): void {\r\n const memberId = action.payload as string;\r\n state.memberInfos = state.memberInfos.filter((memberInfo) => memberInfo.mid !== memberId);\r\n },\r\n setConnectDlgOpen(state: UserState, action: PayloadAction): void {\r\n state.connectDlgOpen = action.payload;\r\n },\r\n setSigningOrgInfo(state: UserState, action: PayloadAction): void {\r\n state.signingOrgInfo = action.payload;\r\n },\r\n setSearchInfo(state: UserState, action: PayloadAction): void {\r\n state.searchInfo = action.payload;\r\n },\r\n setIsSearching(state: UserState, action: PayloadAction): void {\r\n state.isSearching = action.payload;\r\n }\r\n }\r\n});\r\n\r\nexport const { reducer } = slice;\r\n\r\nexport const clearUserState = (): AppThunk => (dispatch): void => {\r\n dispatch(slice.actions.clearState());\r\n};\r\n\r\nexport const addCallApiCount = () : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.addCallApiCount());\r\n};\r\n\r\nexport const setMemberNeedReload = (needReload: boolean) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setMemberNeedReload(needReload));\r\n};\r\n\r\nexport const setUserInfo = (_body: any) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setUser(_body));\r\n};\r\n\r\nexport const setVerificationStatus = (status: number) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setVerificationStatus(status));\r\n};\r\n\r\nexport const setRegisteredVerificationInfo = (body: any) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setRegisteredVerificationInfo(body));\r\n};\r\n\r\nexport const updateUserInfo = (_uid: string, _body: any) : AppThunk => async (dispatch): Promise => {\r\n // await lambdaPutUserInfo(_uid, _body);\r\n dispatch(slice.actions.updateUser(_body));\r\n};\r\n\r\nexport const setUserAvatar = (image: string) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setAvatar(image));\r\n};\r\n\r\nexport const updateUserAvatar = (image: string) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setAvatar(image));\r\n};\r\n\r\nexport const setLoadingStatus = (status: LoadingStatus) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setLoadingStatus(status));\r\n};\r\n\r\nexport const setRequestedLocation = (path: string) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setRequestedLocation(path));\r\n};\r\n\r\nexport const setInviteInfo = (info: any) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setInviteInfo(info));\r\n};\r\n\r\nexport const setDomainName = (domainName: string) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setDomainName(domainName));\r\n};\r\n\r\nexport const setMemberInfos = (members: OrgMemberForClient[]): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.setMemberInfos(members as OrgMemberForClient[]));\r\n};\r\n\r\nexport const addMemberInfo = (member: OrgMemberForClient): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.addMemberInfo(member as OrgMemberForClient));\r\n};\r\n\r\nexport const updateMemberInfo = (member: OrgMemberForClient): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.updateMemberInfo(member as OrgMemberForClient));\r\n};\r\n\r\nexport const updateMemberStatus = (mid: string, status: number, updatedAt: Date) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.updateMemberStatus({ mid, status, updatedAt }));\r\n};\r\n\r\nexport const deleteMemberInfo = (mid: string): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.deleteMemberInfo(mid));\r\n};\r\n\r\nexport const setConnectDlgOpen = (open: boolean) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setConnectDlgOpen(open));\r\n};\r\n\r\nexport const setSigningOrgInfo = (info: Organization) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setSigningOrgInfo(info));\r\n};\r\n\r\nexport const setSearchInfo = (searchFunc: any) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setSearchInfo(searchFunc));\r\n};\r\n\r\nexport const setIsSearching = (loading: boolean) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setIsSearching(loading));\r\n};\r\n\r\nexport default slice;\r\n","import { createSlice } from '@reduxjs/toolkit';\r\nimport type { PayloadAction } from '@reduxjs/toolkit';\r\nimport { AppThunk } from 'src/store';\r\nimport type { Thread, Message, Contact } from 'src/types/chat';\r\n// modified by Makarov --2021/11/01\r\nimport { ACCZIOM_NONE, COMMUNITY_CHAT_THREAD, getUserIdByType } from 'src/globals';\r\nimport { deepCopy } from 'src/utils/copyObject';\r\nimport { Channel, ChannelParticipant } from 'src/../../Common/Model/channel';\r\nimport { LoadingStatus } from './user';\r\n\r\nconst cmpParticipantFn = (a: ChannelParticipant, b: ChannelParticipant): number => {\r\n const at: number = new Date(a.createdAt).getTime();\r\n const bt: number = new Date(b.createdAt).getTime();\r\n return at - bt;\r\n};\r\n\r\ninterface ChatApiStatus {\r\n option: string;\r\n loadingStatus: LoadingStatus;\r\n}\r\n\r\nconst initialThread = {\r\n sid: '',\r\n title: '',\r\n lastMessage: '',\r\n lastMessageTime: -1,\r\n messages: [],\r\n isJoined: false,\r\n isTyping: false,\r\n typerId: '',\r\n lastReadMsgIndex: -1,\r\n lastMsgIndex: -1,\r\n createdBy: '',\r\n participants: [],\r\n type: COMMUNITY_CHAT_THREAD,\r\n unreadCount: 0,\r\n} as Thread;\r\n\r\nconst initialChannel = {\r\n id: '',\r\n sid: '',\r\n title: '',\r\n description: '',\r\n subCategory: '',\r\n thumb: '',\r\n type: COMMUNITY_CHAT_THREAD,\r\n status: 0,\r\n creator: { id: '', type: ACCZIOM_NONE },\r\n createdAt: '',\r\n updatedAt: ''\r\n} as Channel;\r\n\r\nconst initialApiStatus = {\r\n option: 'public',\r\n loadingStatus: LoadingStatus.NONE\r\n} as ChatApiStatus;\r\n\r\ninterface ChatState {\r\n twilioStatus: ChatApiStatus;\r\n msgEditingItem: any;\r\n msgQuotingItem: number;\r\n thread: Thread;\r\n channel: Channel;\r\n channelParticipants: ChannelParticipant[];\r\n channelThumbUrl: string;\r\n lastMsgIds: Record;\r\n}\r\n\r\nconst initialState: ChatState = {\r\n twilioStatus: initialApiStatus,\r\n msgEditingItem: null,\r\n msgQuotingItem: null,\r\n thread: initialThread,\r\n channel: initialChannel,\r\n channelParticipants: [],\r\n channelThumbUrl: null,\r\n lastMsgIds: {}\r\n};\r\n\r\nconst slice = createSlice({\r\n name: 'chat',\r\n initialState,\r\n reducers: {\r\n cleanAll(state: ChatState): void {\r\n state.thread = initialThread;\r\n state.channel = initialChannel;\r\n state.msgEditingItem = null;\r\n state.msgQuotingItem = null;\r\n state.channelParticipants.splice(0, state.channelParticipants.length);\r\n state.channelThumbUrl = null;\r\n state.lastMsgIds = {};\r\n },\r\n cleanTwilioStatus(state: ChatState): void {\r\n state.twilioStatus = initialApiStatus;\r\n },\r\n setTwilioStatus(state: ChatState, action: PayloadAction): void {\r\n state.twilioStatus = action.payload;\r\n },\r\n setChannelInfo(state: ChatState, action: PayloadAction<{ channel: Channel; recipients: ChannelParticipant[]; thumbUrl: string; }>): void {\r\n const { channel, recipients, thumbUrl } = action.payload;\r\n state.channel = channel;\r\n state.channelParticipants = [...recipients];\r\n state.channelParticipants.sort(cmpParticipantFn);\r\n state.channelThumbUrl = thumbUrl;\r\n },\r\n updateChannel(state: ChatState, action: PayloadAction): void {\r\n const updated = action.payload;\r\n Object.keys(updated).forEach((key) => {\r\n state.channel[key] = updated[key];\r\n });\r\n },\r\n setChannelParticipants(state: ChatState, action: PayloadAction): void {\r\n state.channelParticipants = [...action.payload];\r\n state.channelParticipants.sort(cmpParticipantFn);\r\n },\r\n setThread(state: ChatState, action: PayloadAction): void {\r\n state.thread = action.payload;\r\n },\r\n threadJoined(state: ChatState): void {\r\n state.thread.isJoined = true;\r\n },\r\n setMessages(state: ChatState, action: PayloadAction): void {\r\n const msgs = action.payload;\r\n if (msgs.length < 1) return;\r\n const { messages } = state.thread;\r\n if (messages.length > 0 && messages[messages.length - 1].id < msgs[0].id) messages.push(...msgs);\r\n else messages.unshift(...msgs);\r\n if (messages[messages.length - 1].id === msgs[msgs.length - 1].id) {\r\n state.thread.lastMessage = JSON.stringify(msgs[msgs.length - 1].body);\r\n state.thread.lastMessageTime = msgs[msgs.length - 1].createdAt;\r\n }\r\n },\r\n setMsgEditingItem(state: ChatState, action: PayloadAction): void {\r\n state.msgEditingItem = action.payload;\r\n },\r\n setMsgQuotingItem(state: ChatState, action: PayloadAction): void {\r\n state.msgQuotingItem = action.payload;\r\n },\r\n setMsgUnreadCount(state: ChatState, action: PayloadAction): void {\r\n state.thread.unreadCount = action.payload;\r\n },\r\n updateUserOnlineStatus(state: ChatState, action: PayloadAction): void {\r\n const body = action.payload;\r\n state.thread.participants.forEach((p) => {\r\n if (p.uid === body.uid) p.isOnline = body.isOnline;\r\n });\r\n },\r\n msgAdded(state: ChatState, action: PayloadAction): void {\r\n const msg = action.payload;\r\n state.thread.messages.push(msg);\r\n state.thread.lastMessage = JSON.stringify(msg.body);\r\n state.thread.lastMessageTime = msg.createdAt;\r\n },\r\n msgSent(state: ChatState, action: PayloadAction): void {\r\n const msg = action.payload;\r\n const { messages } = state.thread;\r\n for (let i = messages.length - 1; i >= 0; i--) {\r\n const item = messages[i];\r\n if (item.id < 0 && msg.body.id === item.body.id) {\r\n item.sent = true;\r\n item.id = msg.id;\r\n break;\r\n }\r\n }\r\n },\r\n addRecipientsToThread(state: ChatState, action: PayloadAction): void {\r\n state.thread.participants.push(...action.payload);\r\n },\r\n setMessageThumb(state: ChatState, action: PayloadAction): void {\r\n const { msg, uri, url } = action.payload;\r\n const { messages } = state.thread;\r\n const m = messages.find((item) => item.body.id === msg.body.id);\r\n const oldBody = deepCopy(m.body);\r\n m.body = {\r\n ...oldBody,\r\n files: oldBody.files.map((f) => ({\r\n ...f,\r\n ...(f.uri === uri && {\r\n thumbUri: url\r\n })\r\n }))\r\n };\r\n },\r\n msgUpdated(state: ChatState, action: PayloadAction): void {\r\n const msg = action.payload;\r\n const { messages } = state.thread;\r\n const m = messages.find((item) => item.id === msg.id);\r\n m.body = msg.body;\r\n m.attrib = msg.attrib;\r\n m.updated = true;\r\n },\r\n markThreadAsSeen(state: ChatState): void {\r\n state.thread.unreadCount = 0;\r\n },\r\n removeMessage(state: ChatState, action: PayloadAction): void {\r\n const msgId = action.payload;\r\n const { messages } = state.thread;\r\n for (let i = 0; i < messages.length; i++) {\r\n if (messages[i].id === msgId) {\r\n messages.splice(i, 1);\r\n break;\r\n }\r\n }\r\n },\r\n updateLastReadMsgIndex(state: ChatState, action: PayloadAction): void {\r\n state.thread.lastReadMsgIndex = action.payload;\r\n },\r\n updateLastMsgIndex(state: ChatState, action: PayloadAction): void {\r\n state.thread.lastMsgIndex = action.payload;\r\n },\r\n setTypingStarted(state: ChatState, action: PayloadAction): void {\r\n const uid = action.payload;\r\n const participant = state.thread.participants.find((item) => item.uid === uid);\r\n if (participant) {\r\n state.thread.typerId = getUserIdByType(participant);\r\n state.thread.isTyping = true;\r\n }\r\n },\r\n setTypingEnded(state: ChatState): void {\r\n state.thread.isTyping = false;\r\n },\r\n removeParticipants(state: ChatState, action: PayloadAction): void {\r\n const uids = action.payload;\r\n state.thread.participants = state.thread.participants.filter((participant) => !(uids.includes(participant.uid)));\r\n },\r\n updateLastReadMsgIds(state: ChatState, action: PayloadAction>): void {\r\n const uids = action.payload;\r\n Object.keys(uids).forEach((uid) => {\r\n state.lastMsgIds[uid] = uids[uid];\r\n });\r\n }\r\n }\r\n});\r\n\r\nexport const { reducer } = slice;\r\n\r\nexport const cleanTwilioStatus = (): AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.cleanTwilioStatus());\r\n};\r\n\r\nexport const setTwilioStatus = (newStatus: ChatApiStatus): AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setTwilioStatus(newStatus));\r\n};\r\n\r\nexport const setChannelInfo = (channel: Channel, recipients: ChannelParticipant[], thumbUrl: string): AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setChannelInfo({ channel, recipients, thumbUrl }));\r\n};\r\n\r\nexport const updateChannel = (channel: any): AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.updateChannel(channel));\r\n};\r\n\r\nexport const setChannelParticipants = (recipients: ChannelParticipant[]): AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setChannelParticipants(recipients));\r\n};\r\n\r\nexport const setThread = (thread: Thread): AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setThread(thread));\r\n};\r\n\r\nexport const threadJoined = (): AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.threadJoined());\r\n};\r\n\r\nexport const msgAdded = (msg: Message): AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.msgAdded(msg));\r\n};\r\n\r\nexport const msgSent = (msg: Message): AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.msgSent(msg));\r\n};\r\n\r\nexport const msgUpdated = (msg: Message): AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.msgUpdated(msg));\r\n};\r\n\r\nexport const setMessages = (messages: Message[]): AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setMessages(messages));\r\n};\r\n\r\nexport const setMsgUnreadCount = (num: number): AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setMsgUnreadCount(num));\r\n};\r\n\r\nexport const updateLastMsgIndex = (num: number): AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.updateLastMsgIndex(num));\r\n};\r\nexport const updateLastReadMsgIndex = (num: number): AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.updateLastReadMsgIndex(num));\r\n};\r\nexport const markThreadAsSeen = (): AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.markThreadAsSeen());\r\n};\r\n\r\nexport const setTypingStarted = (uid: string) => (dispatch): void => {\r\n dispatch(slice.actions.setTypingStarted(uid));\r\n};\r\n\r\nexport const setTypingEnded = () => (dispatch): void => {\r\n dispatch(slice.actions.setTypingEnded());\r\n};\r\n\r\nexport const updateUserOnlineStatus = (_uid: string, _isOnline: boolean) => (dispatch): void => {\r\n dispatch(slice.actions.updateUserOnlineStatus({ uid: _uid, isOnline: _isOnline }));\r\n};\r\n\r\nexport const addRecipientsToThread = (recipients: Contact[]): AppThunk => (dispatch): void => {\r\n dispatch(slice.actions.addRecipientsToThread(recipients));\r\n};\r\n\r\nexport const removeParticipants = (uids: string[]): AppThunk => (dispatch): void => {\r\n dispatch(slice.actions.removeParticipants(uids));\r\n};\r\n\r\nexport const cleanUpChat = (): AppThunk => (dispatch): void => {\r\n dispatch(slice.actions.cleanAll());\r\n};\r\n\r\nexport const setMessageThumb = (msg: Message, uri: string, url: string): AppThunk => (dispatch): void => {\r\n dispatch(slice.actions.setMessageThumb({ msg, uri, url }));\r\n};\r\n\r\nexport const removeMessage = (msgId: number): AppThunk => (dispatch): void => {\r\n dispatch(slice.actions.removeMessage(msgId));\r\n};\r\n\r\nexport const setEditingMsg = (msgId: number): AppThunk => (dispatch): void => {\r\n dispatch(slice.actions.setMsgEditingItem(msgId));\r\n setTimeout(() => {\r\n document.getElementById('messageInput')?.focus();\r\n }, 100);\r\n};\r\n\r\nexport const setQuotingMsg = (msgId: number): AppThunk => (dispatch): void => {\r\n dispatch(slice.actions.setMsgQuotingItem(msgId));\r\n setTimeout(() => {\r\n document.getElementById('messageInput')?.focus();\r\n }, 100);\r\n};\r\n\r\nexport const updateLastReadMsgIds = (dat: Record): AppThunk => (dispatch): void => {\r\n dispatch(slice.actions.updateLastReadMsgIds(dat));\r\n};\r\n\r\nexport default slice;\r\n","export const amplifyConfig = {\r\n aws_project_region: 'ap-southeast-2',\r\n aws_cognito_identity_pool_id: 'ap-southeast-2:d698958f-85fe-4b84-80a0-08641b4ff90a',\r\n aws_cognito_region: 'ap-southeast-2',\r\n aws_user_pools_id: 'ap-southeast-2_MWyIPtOb6',\r\n aws_user_pools_web_client_id: '5filq03kqveh2j4tkchc296fo2',\r\n oauth: {\r\n domain: 'accziom.auth.ap-southeast-2.amazoncognito.com',\r\n scope: [\r\n 'email',\r\n 'openid',\r\n 'profile',\r\n ],\r\n redirectSignIn: process.env.NODE_ENV === 'production' ? 'https://community.accziom.com/home' : 'http://localhost:3000/home',\r\n redirectSignOut: process.env.NODE_ENV === 'production' ? 'https://community.accziom.com' : 'http://localhost:3000',\r\n responseType: 'code'\r\n },\r\n federationTarget: 'COGINTO_USER_POOLS',\r\n cookieStorage: {\r\n secure: false,\r\n domain: process.env.NODE_ENV === 'production' ? 'accziom.com' : 'localhost',\r\n sameSite: 'strict'\r\n }\r\n};\r\n\r\nexport const AWS_REGION = 'ap-southeast-2';\r\n\r\nexport const accsiomURIs = {\r\n hpcalc_api_domain: 'https://www.wolframcloud.com/obj/4c1e027f-6fa7-4722-a0b9-aea08562d14a',\r\n hpanal_api_domain: 'https://www.wolframcloud.com/obj/4d216c6a-2a69-4716-81f7-469f83b1ead7',\r\n lifeexp_api_domain: 'http://ec2-52-78-11-78.ap-northeast-2.compute.amazonaws.com/wolfram/index.php',\r\n superann_api_domain: 'https://www.wolframcloud.com/obj/74b0c06c-5c3a-40f7-9c97-bf171df95a0e',\r\n websocket_url: 'wss://bsearchau.accziom.com:8018',\r\n map_image_domain: 'https://www.wolframcloud.com/obj/f0c13bbc-7cb8-4158-8112-41502c095272',\r\n os_uri: 'https://api.accziom.com/v1/orgQuery',\r\n bs_uri: 'https://bsearchau.accziom.com',\r\n validate_human_uri: 'https://api.accziom.com/v1/validateHuman',\r\n microservice_uri: 'https://api.accziom.com/v1/microservices',\r\n asset_uri: 'https://api.accziom.com/v1/assets',\r\n channel_uri: 'https://api.accziom.com/v1/channels',\r\n sync_connect_uri: 'https://api.accziom.com/sync/connect',\r\n sync_material_uri: 'https://api.accziom.com/sync/sync-material',\r\n show_material_uri: 'https://api.accziom.com/sync/show-material',\r\n import_sample_file_uri: 'https://accziom-public-asset.s3.ap-southeast-2.amazonaws.com/Accziom_Contacts_Template.xlsx',\r\n notification_websocket_url: 'https://notifications.accziom.com/',\r\n // twilio_notification_url: process.env.NODE_ENV === 'production' ? 'https://notifications.accziom.com/twilio' : 'http://localhost:3030/twilio',\r\n twilio_notification_url: 'https://notifications.accziom.com/twilio',\r\n mrc_websocket_url: 'wss://bsearchau.accziom.com:8887',\r\n aws_filethread_url: 'https://accziom-filethread.s3.ap-southeast-2.amazonaws.com',\r\n ipfs_filethread_url: 'https://gateway.ipfs.io/ipfs',\r\n apprising_ws_url: 'https://wsserver.accziom.com/',\r\n org_banner_uri: 'https://api.accziom.com/v1/banner',\r\n orgaboutus_uri: 'https://api.accziom.com/v1/orgaboutus',\r\n addresshelper_uri: 'https://7dxjjfw2m6zs3rp65eyv4cnqua0wsjhf.lambda-url.ap-southeast-2.on.aws/'\r\n};\r\n\r\nexport const googleMapApiKey = 'AIzaSyA8eVticKgtNJmpl6n-HxPAF5WIz65eTqQ';\r\n\r\nexport const QBO_URL_PREFIX = {\r\n PRODUCTION_APP: 'https://app.qbo.intuit.com/app',\r\n SANDBOX_APP: 'https://app.sandbox.qbo.intuit.com/app'\r\n};\r\nexport const XERO_DOMAIN = 'https://go.xero.com';\r\n\r\nexport const mrcPort = 8886;\r\n\r\nexport const bsPort = 8007;\r\n\r\n// old org cloudfront E2U2D826WTXP77\r\n// old org bucket accziom-org\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\r\nimport { AppThunk } from 'src/store';\r\nimport { Tag } from '../../../Common/Model/tag';\r\n\r\ninterface TagState {\r\n tags: Tag[];\r\n}\r\n\r\nconst initialState: TagState = {\r\n tags: []\r\n};\r\n\r\nconst slice = createSlice({\r\n name: 'tag',\r\n initialState,\r\n reducers: {\r\n clearState(state: TagState): void {\r\n state.tags = [];\r\n },\r\n addTags(state: TagState, action: PayloadAction) {\r\n const newTags = action.payload;\r\n state.tags = [...state.tags, ...newTags.filter((tag) => !state.tags.some((ot) => ot.id === tag.id))];\r\n },\r\n updateTags(state: TagState, action: PayloadAction<{ newTags: Tag[]; removedIds: string[]; }>) {\r\n const { newTags, removedIds } = action.payload;\r\n state.tags = [...state.tags.filter((tag) => removedIds.includes(tag.id)), ...newTags.filter((tag) => !state.tags.some((ot) => ot.id === tag.id))];\r\n }\r\n }\r\n});\r\n\r\nexport const { reducer } = slice;\r\n\r\nexport const clearTagState = (): AppThunk => (dispatch): void => {\r\n dispatch(slice.actions.clearState());\r\n};\r\n\r\nexport const addTags = (tags: Tag[]): AppThunk => (dispatch): void => {\r\n dispatch(slice.actions.addTags(tags));\r\n};\r\n\r\nexport const updateTags = (newTags: Tag[], removedIds: string[]): AppThunk => (dispatch): void => {\r\n dispatch(slice.actions.updateTags({ newTags, removedIds }));\r\n};\r\n\r\nexport default slice;\r\n","import { format } from 'date-fns';\r\n\r\nexport const chatDateFormat = (date: number): string => {\r\n if (!date) return '';\r\n const now = new Date();\r\n const mm = new Date(date);\r\n if (mm.getFullYear() !== now.getFullYear()) return format(mm, 'dd/MM/yyyy');\r\n if (mm.getMonth() !== now.getMonth() || mm.getDate() !== now.getDate()) return format(mm, 'MM-dd');\r\n\r\n return format(mm, 'HH:mm a');\r\n};\r\n\r\nexport const dateTimeFormat = (date: number | Date | string): string => {\r\n if (!date) return '';\r\n return format(new Date(date), 'dd/MM/yyyy hh:mm:ss a');\r\n};\r\n\r\nexport const getDateString = (date: Date): string => {\r\n if (!date) return '';\r\n if (!Number.isNaN(date.getTime())) return format(date, 'dd/MM/yyyy');\r\n return format(Date.now(), 'dd/MM/yyyy');\r\n};\r\n\r\nexport const ausFormatToDate = (date: string) => {\r\n if (!date) return '';\r\n const [d, m, y] = date.split('/');\r\n return `${m}/${d}/${y}`;\r\n};\r\n\r\nexport const getTodayDateStr = (): string => format(new Date(), 'dd/MM/yyyy');\r\n\r\nexport const getTodayDate = (): Date => (new Date((new Date()).toDateString()));\r\nexport const removeTime = (date: any) => (new Date((new Date(date)).toDateString()));\r\n\r\nexport const toDisplayDateFormat = (date: any): string => {\r\n if (!date) return '';\r\n const d = new Date(date);\r\n return format(d, 'dd/MM/yyyy');\r\n};\r\n","import { createContext } from 'react';\r\n\r\nconst SearchContext = createContext({ current: null });\r\n\r\nexport default SearchContext;\r\n","import { useContext } from 'react';\r\nimport SearchContext from 'src/contexts/SearchContext';\r\n\r\nconst useSearch = () => useContext(SearchContext);\r\n\r\nexport default useSearch;\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\r\nimport { AppThunk } from 'src/store';\r\nimport { Invitation, Referral } from 'src/../../Common/Model/network';\r\nimport { deepCopy } from 'src/utils/copyObject';\r\nimport { ACCZIOM_TEAM, STATUS_REMOVED } from 'src/globals';\r\n\r\ninterface NetworkState {\r\n invitations: Invitation[],\r\n invitationNeedReload: boolean,\r\n referrals: Referral[],\r\n referralNeedReload: boolean\r\n}\r\n\r\nconst initialState: NetworkState = {\r\n invitations: [],\r\n invitationNeedReload: true,\r\n referrals: [],\r\n referralNeedReload: true\r\n};\r\n\r\nconst slice = createSlice({\r\n name: 'network',\r\n initialState,\r\n reducers: {\r\n clearState(state: NetworkState): void {\r\n state.invitationNeedReload = true;\r\n state.invitations.splice(0, state.invitations.length);\r\n state.referralNeedReload = true;\r\n state.referrals.splice(0, state.referrals.length);\r\n },\r\n setInvitations(state: NetworkState, action: PayloadAction) {\r\n const invitations = action.payload;\r\n state.invitations = [...invitations];\r\n state.invitationNeedReload = false;\r\n },\r\n addNewInvitation(state: NetworkState, action: PayloadAction<{ invitations: Invitation[] }>) {\r\n const { invitations } = action.payload;\r\n state.invitations = invitations.concat(state.invitations);\r\n },\r\n updateInvitation(state: NetworkState, action: PayloadAction) {\r\n const invitation = action.payload;\r\n const index = state.invitations.findIndex((item) => item.id === invitation.id);\r\n if (index > -1) state.invitations[index] = invitation;\r\n else state.invitations.push(invitation);\r\n },\r\n replaceInvitation(state: NetworkState, action: PayloadAction) {\r\n const body = action.payload;\r\n const invitation = state.invitations.find((item) => item.id === body.id);\r\n if (invitation) {\r\n Object.keys(body).forEach((key) => {\r\n if (key !== 'id') invitation[key] = body[key];\r\n });\r\n }\r\n },\r\n removeInvitation(state: NetworkState, action: PayloadAction) {\r\n const id = action.payload;\r\n state.invitations = state.invitations.filter((item) => item.id !== id);\r\n },\r\n setInviterAgents(state: NetworkState, action: PayloadAction): void {\r\n const assignedTeams = action.payload;\r\n const updatedList = deepCopy(state.invitations);\r\n assignedTeams.forEach(({ id, teamId }) => {\r\n const item = updatedList.find((info) => info.id === id);\r\n item.inviterAgent = { id: teamId, type: ACCZIOM_TEAM };\r\n });\r\n state.invitations = updatedList;\r\n },\r\n setInviteeAgents(state: NetworkState, action: PayloadAction): void {\r\n const assignedTeams = action.payload;\r\n const updatedList = deepCopy(state.invitations);\r\n assignedTeams.forEach(({ id, teamId }) => {\r\n const item = updatedList.find((info) => info.id === id);\r\n item.inviteeAgent = { id: teamId, type: ACCZIOM_TEAM };\r\n });\r\n state.invitations = updatedList;\r\n },\r\n setInvitationNeedReload(state: NetworkState, action: PayloadAction) {\r\n state.invitationNeedReload = action.payload;\r\n },\r\n setReferrals(state: NetworkState, action: PayloadAction) {\r\n const referrals = action.payload;\r\n state.referrals = [...referrals];\r\n state.referralNeedReload = false;\r\n },\r\n addNewReferral(state: NetworkState, action: PayloadAction<{ referrals: Referral[] }>) {\r\n const { referrals } = action.payload;\r\n state.referrals = referrals.concat(state.referrals);\r\n },\r\n updateReferral(state: NetworkState, action: PayloadAction) {\r\n const referral = action.payload;\r\n const index = state.referrals.findIndex((item) => item.id === referral.id);\r\n if (index > -1) state.referrals[index] = referral;\r\n else state.referrals.push(referral);\r\n },\r\n replaceReferral(state: NetworkState, action: PayloadAction) {\r\n const body = action.payload;\r\n const referral = state.referrals.find((item) => item.id === body.id);\r\n if (referral) {\r\n Object.keys(body).forEach((key) => {\r\n if (key !== 'id') referral[key] = body[key];\r\n });\r\n }\r\n },\r\n removeReferral(state: NetworkState, action: PayloadAction) {\r\n const id = action.payload;\r\n state.referrals = state.referrals.filter((item) => item.id !== id);\r\n },\r\n removeReferralFromReq(state: NetworkState, action: PayloadAction<{ removed: number; id : string; updatedAt: Date | string; }>) {\r\n const { removed, id, updatedAt } = action.payload;\r\n if (removed > 0) {\r\n const index = state.referrals.findIndex((item) => item.id === id);\r\n state.referrals.splice(index, 1);\r\n } else {\r\n const referral = state.referrals.find((item) => item.id === id);\r\n referral.status = STATUS_REMOVED;\r\n referral.updatedAt = updatedAt;\r\n }\r\n },\r\n setCreatorAgents(state: NetworkState, action: PayloadAction): void {\r\n const assignedTeams = action.payload;\r\n const updatedList = deepCopy(state.referrals);\r\n assignedTeams.forEach(({ id, teamId }) => {\r\n const item = updatedList.find((info) => info.id === id);\r\n item.creatorAgent = { id: teamId, type: ACCZIOM_TEAM };\r\n });\r\n state.referrals = updatedList;\r\n },\r\n setPartnerAgents(state: NetworkState, action: PayloadAction): void {\r\n const assignedTeams = action.payload;\r\n const updatedList = deepCopy(state.referrals);\r\n assignedTeams.forEach(({ id, teamId }) => {\r\n const item = updatedList.find((info) => info.id === id);\r\n item.partnerAgent = { id: teamId, type: ACCZIOM_TEAM };\r\n });\r\n state.referrals = updatedList;\r\n },\r\n setReferralNeedReload(state: NetworkState, action: PayloadAction) {\r\n state.referralNeedReload = action.payload;\r\n },\r\n }\r\n});\r\n\r\nexport const { reducer } = slice;\r\n\r\nexport const clearNetworkState = (): AppThunk => (dispatch): void => {\r\n dispatch(slice.actions.clearState());\r\n};\r\nexport const loadInvitations = (invitations: Invitation[]): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.setInvitations(invitations));\r\n};\r\nexport const addNewInvitation = (invitations: Invitation[]): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.addNewInvitation({ invitations }));\r\n};\r\nexport const updateInvitation = (invitation: Invitation): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.updateInvitation(invitation));\r\n};\r\nexport const replaceInvitation = (body: any): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.replaceInvitation(body));\r\n};\r\nexport const removeInvitation = (id: string): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.removeInvitation(id));\r\n};\r\nexport const setInviterAgents = (assignedTeams: any): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.setInviterAgents(assignedTeams));\r\n};\r\nexport const setInviteeAgents = (assignedTeams: any): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.setInviteeAgents(assignedTeams));\r\n};\r\nexport const setInvitationNeedReload = (needReload: boolean): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.setInvitationNeedReload(needReload));\r\n};\r\nexport const loadReferrals = (referrals: Referral[]): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.setReferrals(referrals));\r\n};\r\nexport const addNewReferral = (referrals: Referral[]): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.addNewReferral({ referrals }));\r\n};\r\nexport const updateReferral = (referral: Referral): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.updateReferral(referral));\r\n};\r\nexport const replaceReferral = (body: any): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.replaceReferral(body));\r\n};\r\nexport const removeReferral = (id: string): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.removeReferral(id));\r\n};\r\nexport const removeReferralFromReq = (removed: number, id : string, updatedAt: Date | string): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.removeReferralFromReq({ removed, id, updatedAt }));\r\n};\r\nexport const setCreatorAgents = (assignedTeams: any): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.setCreatorAgents(assignedTeams));\r\n};\r\nexport const setPartnerAgents = (assignedTeams: any): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.setPartnerAgents(assignedTeams));\r\n};\r\nexport const setReferralNeedReload = (needReload: boolean): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.setReferralNeedReload(needReload));\r\n};\r\n\r\nexport default slice;\r\n","const wait = (time: number): Promise => new Promise((res) => setTimeout(res, time));\r\n\r\nexport default wait;\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\r\nimport { AppThunk } from 'src/store';\r\nimport { OrganizationExt, OrgMemberRole, OrgMemberForOrg, OrgTeam, OrgExtendedTeam } from 'src/../../Common/Model/organization';\r\nimport { UserMinInfo } from 'src/../../Common/Model/common';\r\nimport { AnzicCategory } from 'src/../../Common/Model/taxonomy';\r\n\r\ninterface ExchangeRate {\r\n AUD: number;\r\n USD: number;\r\n ETH: number;\r\n USDT: number;\r\n MERC: number;\r\n}\r\n\r\nconst initialRate = { AUD: -1, USD: -1, ETH: -1, USDT: -1, MERC: -1 };\r\n\r\ninterface OrganizationState {\r\n memberInfos: OrgMemberForOrg[],\r\n orgInfos: OrganizationExt[];\r\n categoryInfos: AnzicCategory[];\r\n roleInfos: OrgMemberRole[];\r\n teamInfos: OrgTeam[];\r\n activeOrgId: string;\r\n activeTeamId: string;\r\n membersInCurOrg: OrgMemberForOrg[];\r\n memberRolesInCurOrg: OrgMemberRole[];\r\n teamsInCurOrg: OrgExtendedTeam[];\r\n bannerUrl: string,\r\n itemsPinned: any[];\r\n userMinInfos: UserMinInfo[];\r\n orgsNeedReload: boolean;\r\n curOrgNeedReload: boolean;\r\n curExRate: ExchangeRate;\r\n}\r\n\r\nconst initialState: OrganizationState = {\r\n memberInfos: [],\r\n orgInfos: [],\r\n categoryInfos: [],\r\n roleInfos: [],\r\n teamInfos: [],\r\n activeOrgId: null,\r\n activeTeamId: null,\r\n membersInCurOrg: [],\r\n memberRolesInCurOrg: [],\r\n teamsInCurOrg: [],\r\n bannerUrl: null,\r\n itemsPinned: [],\r\n userMinInfos: [],\r\n orgsNeedReload: true,\r\n curOrgNeedReload: true,\r\n curExRate: initialRate\r\n};\r\n\r\nconst cmpRoleFn = (a: OrgMemberRole, b: OrgMemberRole): number => (a.level - b.level);\r\n\r\nconst slice = createSlice({\r\n name: 'organization',\r\n initialState,\r\n reducers: {\r\n clearState(state: OrganizationState): void {\r\n state.memberInfos.splice(0, state.memberInfos.length);\r\n state.orgInfos.splice(0, state.orgInfos.length);\r\n state.categoryInfos.splice(0, state.categoryInfos.length);\r\n state.roleInfos.splice(0, state.roleInfos.length);\r\n state.teamInfos.splice(0, state.teamInfos.length);\r\n state.activeOrgId = null;\r\n state.activeTeamId = null;\r\n state.membersInCurOrg.splice(0, state.membersInCurOrg.length);\r\n state.memberRolesInCurOrg.splice(0, state.memberRolesInCurOrg.length);\r\n state.teamsInCurOrg.splice(0, state.teamsInCurOrg.length);\r\n state.bannerUrl = null;\r\n state.itemsPinned.splice(0, state.itemsPinned.length);\r\n state.userMinInfos.splice(0, state.userMinInfos.length);\r\n state.orgsNeedReload = true;\r\n state.curOrgNeedReload = true;\r\n state.curExRate = initialRate;\r\n },\r\n setOrgsNeedReload(state: OrganizationState, action: PayloadAction): void {\r\n state.orgsNeedReload = action.payload;\r\n },\r\n setBannerUrl(state: OrganizationState, action: PayloadAction): void {\r\n if (state.bannerUrl) window.URL.revokeObjectURL(state.bannerUrl);\r\n state.bannerUrl = action.payload;\r\n },\r\n setOrgStructures(state: OrganizationState, action: PayloadAction): void {\r\n const { members, organizations, categories, roles, teams } = action.payload;\r\n state.memberInfos = members;\r\n state.orgInfos = organizations;\r\n state.categoryInfos = categories;\r\n state.roleInfos = roles;\r\n state.teamInfos = teams;\r\n state.orgsNeedReload = false;\r\n },\r\n updateOrganizationInfo(state: OrganizationState, action: PayloadAction): void {\r\n const newOrgInfo = action.payload as OrganizationExt;\r\n const oldOrgId = state.orgInfos.findIndex((orgInfo) => orgInfo.organizationId === newOrgInfo.organizationId);\r\n if (oldOrgId >= 0) state.orgInfos.splice(oldOrgId, 1, newOrgInfo);\r\n },\r\n createOrganizationInfo(state: OrganizationState, action: PayloadAction<{ memberInfo: OrgMemberForOrg, orgInfo: OrganizationExt, roleInfo: OrgMemberRole, teamInfos: OrgTeam[] }>): void {\r\n const { memberInfo, orgInfo, roleInfo, teamInfos } = action.payload;\r\n state.memberInfos.push(memberInfo);\r\n state.orgInfos.push(orgInfo);\r\n state.roleInfos.push(roleInfo);\r\n state.teamInfos.push(...teamInfos);\r\n },\r\n updateCategoryInfo(state: OrganizationState, action: PayloadAction): void {\r\n const newCategory = action.payload;\r\n const oldCategoryIndex = state.categoryInfos.findIndex((cat) => cat.id === newCategory.id);\r\n if (oldCategoryIndex >= 0) state.categoryInfos.splice(oldCategoryIndex, 1, newCategory);\r\n else state.categoryInfos.push(newCategory);\r\n },\r\n setActiveOrgId(state: OrganizationState, action: PayloadAction): void {\r\n state.activeOrgId = action.payload as string;\r\n },\r\n setActiveTeamId(state: OrganizationState, action: PayloadAction): void {\r\n state.activeTeamId = action.payload as string;\r\n },\r\n updateMemberRoleInCurOrg(state: OrganizationState, action: PayloadAction): void {\r\n const newRole = action.payload as OrgMemberRole;\r\n let oldRoleId = state.roleInfos.findIndex((role) => role.rid === newRole.rid);\r\n if (oldRoleId >= 0) state.roleInfos.splice(oldRoleId, 1, newRole);\r\n oldRoleId = state.memberRolesInCurOrg.findIndex((role) => role.rid === newRole.rid);\r\n if (oldRoleId >= 0) state.memberRolesInCurOrg.splice(oldRoleId, 1, newRole);\r\n state.memberRolesInCurOrg.sort(cmpRoleFn);\r\n },\r\n setCurOrgNeedReload(state: OrganizationState, action: PayloadAction): void {\r\n state.curOrgNeedReload = action.payload;\r\n },\r\n setCurOrgStructure(state: OrganizationState, action: PayloadAction): void {\r\n const { members, roles, teams } = action.payload;\r\n state.membersInCurOrg = members;\r\n state.memberRolesInCurOrg = roles;\r\n state.teamsInCurOrg = teams;\r\n state.memberRolesInCurOrg.sort(cmpRoleFn);\r\n state.curOrgNeedReload = false;\r\n },\r\n addMemberToCurOrg(state: OrganizationState, action: PayloadAction): void {\r\n const newMember = action.payload as OrgMemberForOrg;\r\n state.membersInCurOrg.push(newMember);\r\n },\r\n updateMemberInCurOrg(state: OrganizationState, action: PayloadAction): void {\r\n const body = action.payload;\r\n const curMember = state.membersInCurOrg.find((member) => member.mid === body.mid);\r\n if (curMember) {\r\n Object.keys(body).forEach((key) => {\r\n if (key !== 'mid') curMember[key] = body[key];\r\n });\r\n }\r\n },\r\n updateOrgMembers(state: OrganizationState, action: PayloadAction): void {\r\n const { newMembers, deleteIds } = action.payload;\r\n state.membersInCurOrg.push(...newMembers.map((member) => ({ ...member, tids: [] } as OrgMemberForOrg)));\r\n state.membersInCurOrg = state.membersInCurOrg.filter((member) => !deleteIds.includes(member.mid));\r\n state.teamsInCurOrg.forEach((team) => {\r\n team.mids = team.mids.filter((memberId) => !deleteIds.includes(memberId));\r\n });\r\n },\r\n deleteMemberFromCurOrg(state: OrganizationState, action: PayloadAction): void {\r\n const mid = action.payload as string;\r\n state.membersInCurOrg = state.membersInCurOrg.filter((member) => mid !== member.mid);\r\n state.teamsInCurOrg.forEach((team) => {\r\n team.mids = team.mids.filter((memberId) => memberId !== mid);\r\n });\r\n },\r\n addMemberRoleToCurOrg(state: OrganizationState, action: PayloadAction): void {\r\n const newRole = action.payload as OrgMemberRole;\r\n state.memberRolesInCurOrg.push(newRole);\r\n state.memberRolesInCurOrg.sort(cmpRoleFn);\r\n },\r\n deleteMemberRoleFromCurOrg(state: OrganizationState, action: PayloadAction): void {\r\n const rid = action.payload as string;\r\n state.roleInfos = state.roleInfos.filter((role) => role.rid !== rid);\r\n state.membersInCurOrg.filter((member) => member.rid === rid).forEach((member) => {\r\n state.teamsInCurOrg.forEach((team) => {\r\n team.mids = team.mids.filter((memberId) => memberId !== member.mid);\r\n });\r\n });\r\n state.membersInCurOrg = state.membersInCurOrg.filter((member) => member.rid !== rid);\r\n state.memberRolesInCurOrg = state.memberRolesInCurOrg.filter((role) => role.rid !== rid);\r\n },\r\n addTeamToCurOrg(state: OrganizationState, action: PayloadAction): void {\r\n const newTeam = action.payload as OrgExtendedTeam;\r\n state.teamsInCurOrg.push(newTeam);\r\n state.membersInCurOrg.forEach((member) => {\r\n if (newTeam.mids.includes(member.mid)) {\r\n member.tids.push(newTeam.tid);\r\n }\r\n });\r\n state.memberInfos.forEach((member) => {\r\n if (newTeam.mids.includes(member.mid)) {\r\n member.tids.push(newTeam.tid);\r\n }\r\n });\r\n const activeMember = state.memberInfos.find((member) => member.oid === state.activeOrgId);\r\n if (activeMember && newTeam.mids.includes(activeMember.mid)) state.teamInfos.push(newTeam as OrgTeam);\r\n },\r\n deleteTeamFromCurOrg(state: OrganizationState, action: PayloadAction): void {\r\n const tid = action.payload as string;\r\n state.teamInfos = state.teamInfos.filter((team) => team.tid !== tid);\r\n state.teamsInCurOrg = state.teamsInCurOrg.filter((team) => team.tid !== tid);\r\n state.membersInCurOrg.forEach((member) => {\r\n member.tids = member.tids.filter((teamId) => teamId !== tid);\r\n });\r\n state.memberInfos.forEach((member) => {\r\n member.tids = member.tids.filter((teamId) => teamId !== tid);\r\n });\r\n },\r\n updateTeamInCurOrg(state: OrganizationState, action: PayloadAction): void {\r\n const newTeam = action.payload as OrgExtendedTeam;\r\n const oldTeam = state.teamsInCurOrg.find((team) => team.tid === newTeam.tid);\r\n if (oldTeam) {\r\n const oldMids = oldTeam.mids;\r\n const newMids = newTeam.mids;\r\n const deleteMids = oldMids.filter((memberId) => !newMids.includes(memberId));\r\n const addMids = newMids.filter((memberId) => !oldMids.includes(memberId));\r\n state.membersInCurOrg.forEach((member) => {\r\n if (deleteMids.includes(member.mid)) {\r\n member.tids = member.tids.filter((teamId) => teamId !== newTeam.tid);\r\n }\r\n if (addMids.includes(member.mid)) {\r\n member.tids.push(newTeam.tid);\r\n }\r\n });\r\n state.memberInfos.forEach((member) => {\r\n if (deleteMids.includes(member.mid)) {\r\n member.tids = member.tids.filter((teamId) => teamId !== newTeam.tid);\r\n }\r\n if (addMids.includes(member.mid)) {\r\n member.tids.push(newTeam.tid);\r\n }\r\n });\r\n const activeMember = state.memberInfos.find((member) => member.oid === state.activeOrgId);\r\n if (activeMember && deleteMids.includes(activeMember.mid)) state.teamInfos = state.teamInfos.filter((team) => team.tid !== newTeam.tid);\r\n if (activeMember && addMids.includes(activeMember.mid)) state.teamInfos.push(newTeam as OrgTeam);\r\n state.teamsInCurOrg = state.teamsInCurOrg.map((team) => (team.tid === newTeam.tid ? newTeam : team));\r\n }\r\n },\r\n updateMemberPinnedItem(state: OrganizationState, action: PayloadAction): void {\r\n const { memberId, itemsPinned } = action.payload;\r\n state.itemsPinned = itemsPinned;\r\n const member = state.memberInfos.find((memberInfo) => memberInfo.mid === memberId);\r\n if (member) member.itemsPinned = itemsPinned;\r\n const memberInCurOrg = state.membersInCurOrg.find((memberInfo) => memberInfo.mid === memberId);\r\n if (memberInCurOrg) memberInCurOrg.itemsPinned = itemsPinned;\r\n },\r\n setItemsPinned(state: OrganizationState, action: PayloadAction): void {\r\n state.itemsPinned = action.payload;\r\n },\r\n setUserMinInfos(state: OrganizationState, action: PayloadAction<{ userMinInfos: UserMinInfo[]; }>) {\r\n const { userMinInfos } = action.payload;\r\n state.userMinInfos = userMinInfos;\r\n },\r\n updateUserMinInfos(state: OrganizationState, action: PayloadAction<{ userMinInfos: UserMinInfo[]; }>) {\r\n const { userMinInfos } = action.payload;\r\n userMinInfos.forEach((newInfo) => {\r\n const oldInfo = state.userMinInfos.find((item) => item.uid === newInfo.uid);\r\n if (oldInfo) {\r\n Object.keys(newInfo).forEach((key) => {\r\n if (key !== 'id' && key !== 'allIds') oldInfo[key] = newInfo[key];\r\n if (key === 'allIds') {\r\n newInfo.allIds.forEach((newId) => {\r\n if (newId.id) {\r\n const index = oldInfo.allIds.findIndex((id) => id.id === newId.id);\r\n oldInfo.allIds.splice(index < 0 ? oldInfo.allIds.length : index, index < 0 ? 0 : 1, newId);\r\n }\r\n });\r\n }\r\n });\r\n } else state.userMinInfos.push(newInfo);\r\n });\r\n },\r\n updateCurExRate(state: OrganizationState, action: PayloadAction): void {\r\n const updated = action.payload;\r\n if (updated && Object.keys(updated)?.length > 0) {\r\n Object.keys(updated).forEach((key) => {\r\n state.curExRate[key] = updated[key];\r\n });\r\n }\r\n }\r\n }\r\n});\r\n\r\nexport const { reducer } = slice;\r\n\r\nexport const clearOrganizationState = (): AppThunk => (dispatch): void => {\r\n dispatch(slice.actions.clearState());\r\n};\r\nexport const setOrgsNeedReload = (needReload: boolean) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setOrgsNeedReload(needReload));\r\n};\r\nexport const setBannerUrl = (url: string): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.setBannerUrl(url));\r\n};\r\nexport const setOrgStructures = (_members: any[], _orgs: any[], _categories: any[], _roles: any[], _teams: any[]) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setOrgStructures({\r\n members: _members as OrgMemberForOrg[],\r\n organizations: _orgs as OrganizationExt[],\r\n categories: _categories as AnzicCategory[],\r\n roles: _roles as OrgMemberRole[],\r\n teams: _teams as OrgTeam[]\r\n }));\r\n};\r\nexport const updateOrganizationInfo = (org: any): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.updateOrganizationInfo(org as OrganizationExt));\r\n};\r\nexport const createOrganizationInfo = (memberInfo: OrgMemberForOrg, orgInfo: OrganizationExt, roleInfo: OrgMemberRole, teamInfos: OrgTeam[]): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.createOrganizationInfo({ memberInfo, orgInfo, roleInfo, teamInfos }));\r\n};\r\nexport const updateCategoryInfo = (cat: any): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.updateCategoryInfo(cat as AnzicCategory));\r\n};\r\nexport const setActiveOrgId = (oid: string): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.setActiveOrgId(oid));\r\n};\r\nexport const setActiveTeamId = (tid: string): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.setActiveTeamId(tid));\r\n};\r\nexport const setCurOrgNeedReload = (needReload: boolean) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.setCurOrgNeedReload(needReload));\r\n};\r\nexport const setCurOrgStructure = (members: any[], roles: any[], teams: any[], userMinInfos: any[]): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.updateUserMinInfos({ userMinInfos: userMinInfos as UserMinInfo[] }));\r\n dispatch(slice.actions.setCurOrgStructure({\r\n members: members as OrgMemberForOrg[],\r\n roles: roles as OrgMemberRole[],\r\n teams: teams as OrgExtendedTeam[]\r\n }));\r\n};\r\nexport const addMemberToCurOrg = (member: any) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.addMemberToCurOrg(member as OrgMemberForOrg));\r\n};\r\nexport const updateMemberInCurOrg = (body: any) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.updateMemberInCurOrg(body));\r\n};\r\nexport const deleteMemberFromCurOrg = (mid: string): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.deleteMemberFromCurOrg(mid));\r\n};\r\nexport const addMemberRoleToCurOrg = (role: any): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.addMemberRoleToCurOrg(role as OrgMemberRole));\r\n};\r\nexport const updateMemberRoleInfo = (role: any): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.updateMemberRoleInCurOrg(role as OrgMemberRole));\r\n};\r\nexport const deleteMemberRoleFromCurOrg = (rid: string): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.deleteMemberRoleFromCurOrg(rid));\r\n};\r\nexport const addTeamToCurOrg = (team: any) : AppThunk => async (dispatch): Promise => {\r\n dispatch(slice.actions.addTeamToCurOrg(team as OrgExtendedTeam));\r\n};\r\nexport const deleteTeamFromCurOrg = (tid: string): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.deleteTeamFromCurOrg(tid));\r\n};\r\nexport const updateTeamInCurOrg = (team: any): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.updateTeamInCurOrg(team as OrgExtendedTeam));\r\n};\r\nexport const updateMemberPinnedItem = (memberId: string, itemsPinned: any): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.updateMemberPinnedItem({ memberId, itemsPinned }));\r\n};\r\nexport const setItemsPinned = (itemsPinned: any): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.setItemsPinned(itemsPinned));\r\n};\r\nexport const updateOrgMembers = (newMembers: any[], deleteIds: string[], userMinInfos: any[]): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.updateUserMinInfos({ userMinInfos: userMinInfos as UserMinInfo[] }));\r\n dispatch(slice.actions.updateOrgMembers({ newMembers, deleteIds }));\r\n};\r\nexport const updateUserMinInfos = (userMinInfos: any[]): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.updateUserMinInfos({ userMinInfos: userMinInfos as UserMinInfo[] }));\r\n};\r\nexport const cleanUserMinInfos = (): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.setUserMinInfos({ userMinInfos: [] }));\r\n};\r\nexport const updateCurExRate = (rateData: any): AppThunk => async (dispatch) => {\r\n dispatch(slice.actions.updateCurExRate(rateData));\r\n};\r\n\r\nexport default slice;\r\n","const getUserDisplayName = (body: any): string => {\r\n if (body) {\r\n if (body.penName) return body.penName;\r\n if (body.displayName) return body.displayName;\r\n const formalName = [body.firstName, body.middleName, body.lastName].filter((_) => !!_).map((_) => _.trim()).join(' ');\r\n if (formalName) return formalName;\r\n }\r\n return 'Unknown';\r\n};\r\n\r\nexport default getUserDisplayName;\r\n","// created by Makarov --2021/11/01\r\n\r\nexport const PAGE_SIZE = 20;\r\nexport const PRODUCT_PAGE_SIZE = 12;\r\nexport const ITEM_PAGE_SIZE = 10;\r\nexport const INVITATION_PAGE_START = 2;\r\nexport const STRIPE_PUBLISHABLE_KEY = 'pk_test_51L7w51D5b37GdQHI8J35rJRRrW909ledxjcCDkWeOqOAY4R4elZ20wWovOBbJctGWxzQkbkOhn950RBMTzMEgEHo005jr4zcWm';\r\nexport const WALLET_HISTORY_PAGE_SIZE = 15;\r\nexport const MESSAGE_MAX_LENGTH = 250;\r\n\r\nexport const tenary = (condition, then, otherwise): any => {\r\n if (condition) {\r\n return then;\r\n }\r\n\r\n return otherwise;\r\n};\r\n\r\nexport const getStreetInfoFromAddr = (addr: string): { streetName, streetNumber } => {\r\n const streetInfo = addr.split(',').at(0);\r\n const streetNumber = streetInfo.split(' ').at(0).trim();\r\n const streetName = streetInfo.replace(`${streetNumber} `, '').trim();\r\n return { streetName, streetNumber };\r\n};\r\n\r\nexport const isValidEmail = (custom_str: string): boolean => {\r\n // eslint-disable-next-line\r\n const regex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return regex.test(custom_str.toLowerCase());\r\n};\r\n\r\nexport const TAB_LABEL_ACCZIOM_USERS: string = 'Accziom Users';\r\nexport const TAB_LABEL_MY_CONTACTS: string = 'Contacts';\r\nexport const TAB_LABEL_PARTNERS: string = 'Partners';\r\nexport const TAB_LABEL_ORG_CLIENTS: string = 'Clients';\r\nexport const TAB_LABEL_ORG_SUPPLIERS: string = 'Suppliers';\r\nexport const TAB_LABEL_ORG_MEMBERS: string = 'Members';\r\nexport const TAB_VALUE_ACCZIOM_USERS: string = 'Accziom user';\r\nexport const TAB_VALUE_MY_CONTACTS: string = 'contact';\r\nexport const TAB_VALUE_PARTNERS: string = 'partner';\r\nexport const TAB_VALUE_ORG_CLIENTS: string = 'client';\r\nexport const TAB_VALUE_ORG_SUPPLIERS: string = 'supplier';\r\nexport const TAB_VALUE_ORG_MEMBERS: string = 'member';\r\n\r\nexport const INVITE_ITEM_HEIGHT: number = 80;\r\n\r\nexport const TAB_LABEL_MICROSERVICES: string = 'Microservices';\r\nexport const TAB_LABEL_GOODS: string = 'Goods';\r\nexport const TAB_LABEL_ASSETS: string = 'Assets';\r\nexport const TAB_VALUE_MICROSERVICES: string = 'microservices';\r\nexport const TAB_VALUE_GOODS: string = 'goods';\r\nexport const TAB_VALUE_ASSETS: string = 'assets';\r\n\r\nexport const DELETE_SINGLE_MESSAGE_TITLE: string = 'Delete Message';\r\nexport const DELETE_SINGLE_MESSAGE_CONTENT: string = 'Are you sure want to permanently delete this message?';\r\nexport const DELETE_MESSAGES_TITLE: string = 'Delete Messages';\r\nexport const DELETE_MESSAGES_CONTENT: string = 'Are you sure want to permanently delete these messages?';\r\nexport const DELETE_ROLE_TITLE: string = 'Delete Role';\r\nexport const DELETE_ROLE_CONTENT: string = 'Are you sure want to permanently delete this role and some members assigned to it?';\r\nexport const DELETE_TEAM_TITLE: string = 'Delete Team';\r\nexport const DELETE_TEAM_CONTENT: string = 'Are you sure want to permanently delete this team?';\r\nexport const DELETE_MEMBER_TITLE: string = 'Delete Member';\r\nexport const DELETE_MEMBER_CONTENT: string = 'Are you sure want to permanently release this member?';\r\nexport const DELETE_CONTACT_TITLE: string = 'Delete Contact';\r\nexport const DELETE_CONTACT_CONTENT: string = 'Would you mind remove this contact for sure?';\r\nexport const DELETE_THREAD_TITLE: string = 'Terminate Channel';\r\nexport const DELETE_THREAD_CONTENT: string = 'Are you sure want to permanently archive this channel?';\r\nexport const LEAVE_THREAD_TITLE: string = 'Leave Channel';\r\nexport const LEAVE_THREAD_CONTENT: string = 'Are you sure want to permanently leave this channel?';\r\nexport const LEAVE_WINDOW_TITLE: string = 'Leave Window';\r\nexport const LEAVE_WINDOW_CONTENT: string = 'Are you sure continue to leave this window? All of your work in this window will be crashed.';\r\nexport const CONFIRM_SCHEDULE_TITLE: string = 'Confirm Schedules';\r\nexport const CONFIRM_SCHEDULE_CONTENT: string = 'Are you sure want to accept these schedules?';\r\nexport const DELETE_SCHEDULE_TITLE: string = 'Delete Schedules';\r\nexport const DELETE_SCHEDULE_CONTENT: string = 'Are you sure want to permanently delete all schedules related to this one?';\r\n\r\nexport const getInviteEmailSubject = (userName: string): string => {\r\n const invitorName = userName.length > 0 ? userName : 'Anonymous Accziom-user';\r\n return `${invitorName} invited you to join Accziom`;\r\n};\r\n\r\nexport const getInviteEmailBody = (receiver: string, sender: string): string => {\r\n const invitorName = sender.length > 0 ? sender : 'Anonymous Accziom-user';\r\n const receiverName = receiver.length > 0 ? `. ${receiver},` : ',';\r\n const sentence1 = `Dear Mr/Mrs${receiverName}\\n\\n`;\r\n const sentence2 = `${invitorName} invites you to join us on Accziom - a business collaboration platform. Please click the link below and sign-up.\\n`;\r\n const sentence3 = 'If you have issues, don\\'t hesitate to contact us at support@mail.accziom.com\\n';\r\n return `${sentence1}${sentence2}${sentence3}`;\r\n};\r\n\r\nexport const getConnectEmailSubject = (userName: string): string => {\r\n const invitorName = userName.length > 0 ? userName : 'Anonymous Accziom-user';\r\n return `${invitorName} invited partner`;\r\n};\r\n\r\nexport const getConnectEmailBody = (receiver: string, sender: string): string => {\r\n const invitorName = sender.length > 0 ? sender : 'Anonymous Accziom-user';\r\n const receiverName = receiver.length > 0 ? `, ${receiver}.` : '.';\r\n const sentence1 = `Hello${receiverName}\\n\\n`;\r\n const sentence2 = 'We sincerely hope to become a trading partner with you in Accziom.\\n';\r\n const sentence3 = 'Thanks for your help.\\n\\n';\r\n const sentence4 = `From ${invitorName}.`;\r\n return `${sentence1}${sentence2}${sentence3}${sentence4}`;\r\n};\r\n\r\nexport const convertTextToHtml = (srcText: string): string => {\r\n let previousWasASpace: boolean = false;\r\n let destText: string = '';\r\n for (let i = 0; i < srcText.length; i++) {\r\n const oneLetter = srcText.charAt(i);\r\n if (oneLetter === ' ') {\r\n if (previousWasASpace) {\r\n destText = `${destText} `;\r\n previousWasASpace = false;\r\n } else {\r\n previousWasASpace = true;\r\n }\r\n } else {\r\n previousWasASpace = false;\r\n }\r\n switch (oneLetter) {\r\n case '<':\r\n destText = `${destText}<`;\r\n break;\r\n case '>':\r\n destText = `${destText}>`;\r\n break;\r\n case '&':\r\n destText = `${destText}&`;\r\n break;\r\n case '\"':\r\n destText = `${destText}"`;\r\n break;\r\n case '\\n':\r\n destText = `${destText}
`;\r\n break;\r\n default:\r\n destText = `${destText}${oneLetter}`;\r\n break;\r\n }\r\n }\r\n return `

${destText}

`;\r\n};\r\n\r\nexport const isNullForHtmlText = (text: string): boolean => (!text || text === convertTextToHtml('') || text === '


');\r\n\r\nexport const convertHtmlToText = (srcHtml: string): string => {\r\n const tmp = document.createElement('DIV');\r\n tmp.innerHTML = srcHtml;\r\n return tmp.textContent || tmp.innerText || '';\r\n};\r\n\r\nexport const linkifyText = (inputText: string): string => {\r\n let replacedText;\r\n\r\n // URLs starting with http://, https://, or ftp://\r\n // eslint-disable-next-line\r\n const replacePattern1 = /(\\b(https?|ftp):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])/gim;\r\n replacedText = inputText.replace(replacePattern1, '$1');\r\n\r\n // URLs starting with \"www.\" (without // before it, or it'd re-link the ones done above).\r\n // eslint-disable-next-line\r\n const replacePattern2 = /(^|[^\\/])(www\\.[\\S]+(\\b|$))/gim;\r\n replacedText = replacedText.replace(replacePattern2, '$1$2');\r\n\r\n // Change email addresses to mailto:: links.\r\n // eslint-disable-next-line\r\n const replacePattern3 = /(([a-zA-Z0-9\\-\\_\\.])+@[a-zA-Z\\_]+?(\\.[a-zA-Z]{2,6})+)/gim;\r\n replacedText = replacedText.replace(replacePattern3, '$1');\r\n\r\n return replacedText;\r\n};\r\n\r\nexport const contactFields = [\r\n {\r\n index: '0',\r\n label: 'Display Name',\r\n value: 'displayName',\r\n needed: true\r\n },\r\n {\r\n index: '1',\r\n label: 'First Name',\r\n value: 'firstName',\r\n needed: false\r\n },\r\n {\r\n index: '2',\r\n label: 'Middle Name',\r\n value: 'middleName',\r\n needed: false\r\n },\r\n {\r\n index: '3',\r\n label: 'Last Name',\r\n value: 'lastName',\r\n needed: false\r\n },\r\n {\r\n index: '4',\r\n label: 'Legal Name',\r\n value: 'legalName',\r\n needed: false\r\n },\r\n {\r\n index: '5',\r\n label: 'Trading Name',\r\n value: 'tradingName',\r\n needed: false\r\n },\r\n {\r\n index: '6',\r\n label: 'Casual Name',\r\n value: 'casualName',\r\n needed: false\r\n },\r\n {\r\n index: '7',\r\n label: 'Title',\r\n value: 'title',\r\n needed: false\r\n },\r\n {\r\n index: '8',\r\n label: 'Note',\r\n value: 'note',\r\n needed: false\r\n },\r\n {\r\n index: '9',\r\n label: 'Phone',\r\n value: 'primaryPhone',\r\n needed: true\r\n },\r\n {\r\n index: '10',\r\n label: 'Mobile',\r\n value: 'mobilePhone',\r\n needed: false\r\n },\r\n {\r\n index: '11',\r\n label: 'Fax',\r\n value: 'faxPhone',\r\n needed: false\r\n },\r\n {\r\n index: '12',\r\n label: 'Email',\r\n value: 'primaryEmail',\r\n needed: true\r\n },\r\n {\r\n index: '13',\r\n label: 'Tax Number',\r\n value: 'taxNumber',\r\n needed: false\r\n },\r\n {\r\n index: '14',\r\n label: 'Street',\r\n value: 'street',\r\n needed: false\r\n },\r\n {\r\n index: '15',\r\n label: 'Suburb',\r\n value: 'suburb',\r\n needed: false\r\n },\r\n {\r\n index: '16',\r\n label: 'State',\r\n value: 'state',\r\n needed: false\r\n },\r\n {\r\n index: '17',\r\n label: 'Postcode',\r\n value: 'postcode',\r\n needed: false\r\n },\r\n {\r\n index: '18',\r\n label: 'Website',\r\n value: 'website',\r\n needed: false\r\n },\r\n {\r\n index: '19',\r\n label: 'Entity Type',\r\n value: 'entityType',\r\n needed: false\r\n },\r\n {\r\n index: '20',\r\n label: 'ABN',\r\n value: 'abn',\r\n needed: false\r\n },\r\n {\r\n index: '21',\r\n label: 'ACN',\r\n value: 'acn',\r\n needed: false\r\n },\r\n {\r\n index: '22',\r\n label: 'Individual',\r\n value: 'isIndividual',\r\n needed: false\r\n },\r\n];\r\n\r\nexport const emptyAddress = {\r\n reason: '',\r\n addressLine1: '',\r\n addressLine2: '',\r\n city: '',\r\n region: '',\r\n postalCode: '',\r\n country: ''\r\n};\r\n\r\nexport const initializedContact = {\r\n isIndividual: false,\r\n displayName: '',\r\n firstName: '',\r\n middleName: '',\r\n lastName: '',\r\n legalName: '',\r\n tradingName: '',\r\n casualName: '',\r\n title: '',\r\n note: '',\r\n physicalAddress: { ...emptyAddress, addressType: 'PHYSICAL' },\r\n postalAddress: { ...emptyAddress, addressType: 'POBOX' },\r\n additionalAddresses: [],\r\n addresses: [],\r\n primaryPhone: '',\r\n mobilePhone: '',\r\n faxPhone: '',\r\n ddiPhone: '',\r\n additionalPhones: [],\r\n phoneNumbers: [],\r\n primaryEmail: '',\r\n alternativeEmail: '',\r\n additionalEmails: [],\r\n emails: [],\r\n taxNumber: '',\r\n website: '',\r\n entityType: 'Trust',\r\n abn: '',\r\n acn: ''\r\n};\r\n\r\nexport const contactSubKeys = [\r\n 'primaryEmail',\r\n 'alternativeEmail',\r\n 'additionalEmails',\r\n 'primaryPhone',\r\n 'mobilePhone',\r\n 'faxPhone',\r\n 'ddiPhone',\r\n 'additionalPhones',\r\n 'physicalAddress',\r\n 'postalAddress',\r\n 'billingAddress',\r\n 'streetAddress',\r\n 'additionalAddresses'\r\n];\r\n\r\nexport interface DblButtonMessageProps {\r\n onYesClick?: () => void;\r\n onNoClick?: () => void;\r\n messageTitle: string;\r\n messageContent: string;\r\n onClose?: (data: boolean) => void;\r\n}\r\n\r\nexport interface SingButtonMessageProps {\r\n buttonTitle?: string;\r\n onOkClick?: any;\r\n messageContent: string[];\r\n onClose?: (data: boolean) => void;\r\n}\r\n\r\nexport const CRYPTO_ETHER = 'Ether';\r\nexport const CRYPTO_TETHER = 'Tether';\r\nexport const CRYPTO_MRC = 'Merchant';\r\nexport const FIAT_AUD = 'AUD';\r\nexport const FIAT_USD = 'USD';\r\n\r\nexport const tokenData = [\r\n {\r\n name: CRYPTO_ETHER,\r\n title: 'Ethereum',\r\n unit: 'ETH',\r\n icon: '/static/ethereum.png',\r\n color: '#627EEA'\r\n },\r\n {\r\n name: CRYPTO_TETHER,\r\n title: 'Tether USD',\r\n unit: 'USDT',\r\n icon: '/static/tether-usdt.svg',\r\n color: '#53AE94'\r\n },\r\n {\r\n name: CRYPTO_MRC,\r\n title: 'Merchant Coin',\r\n unit: 'MERC',\r\n icon: '/static/MERc.png',\r\n color: '#226822'\r\n }\r\n];\r\n\r\nexport const cryptoCurrencies = [CRYPTO_ETHER, CRYPTO_TETHER, CRYPTO_MRC];\r\nexport const fiatCurrencies = [FIAT_AUD, FIAT_USD];\r\nexport const allCurrencyUnits = ['ETH', 'USDT', 'MERC', 'AUD', 'USD'];\r\n\r\nexport const fiatData = [\r\n {\r\n name: FIAT_AUD,\r\n title: 'Australian Dollar',\r\n unit: FIAT_AUD,\r\n icon: '/static/Australia.png'\r\n },\r\n {\r\n name: FIAT_USD,\r\n title: 'US Dollar',\r\n unit: FIAT_USD,\r\n icon: '/static/United-States.png'\r\n }\r\n];\r\n\r\nexport const currencyTypeToUnit = (type: string) => (\r\n cryptoCurrencies.includes(type)\r\n ? tokenData.find((v) => v.name === type).unit\r\n : type\r\n);\r\n\r\nexport const currencyUnitToType = (unit: string) => (\r\n fiatCurrencies.includes(unit)\r\n ? unit\r\n : tokenData.find((v) => v.unit === unit).name\r\n);\r\n\r\nexport const REOFFERDRAFT = -1;\r\nexport const REOFFERED = 0;\r\nexport const OFFERDRAFT = 1;\r\nexport const OFFERED = 2;\r\nexport const OFFERREQUESTDRAFT = 3;\r\nexport const DRAFT = 4;\r\nexport const REQUESTED = 5;\r\nexport const PROGRESSING = 6;\r\nexport const REJECTED = 7;\r\nexport const ARCHIVED = 8;\r\nexport const NEGOTIATION = 9;\r\nexport const CUSTOMER_REMOVED = 10;\r\nexport const SUPPLIER_REMOVED = 11;\r\n\r\nexport const TICKET_MODE_NORMAL = 1;\r\nexport const TICKET_MODE_PROPOSAL = 2;\r\n\r\nexport const NONE_TYPE_ITEM = 0;\r\nexport const MICROSERVICE = 1;\r\nexport const GOOD = 2;\r\nexport const MICROSERVICE_BUNDLE = 3;\r\nexport const ASSET = 4;\r\nexport const GOOD_BUNDLE = 5;\r\nexport const ASSET_BUNDLE = 6;\r\nexport const CHAT = 7;\r\nexport const CONTRACT = 8;\r\nexport const FILETHREAD = 9;\r\nexport const TICKET = 10;\r\nexport const INVOICE = 11;\r\nexport const RFQ = 12;\r\nexport const PURCHASEORDER = 13;\r\nexport const FRIEND = 14;\r\nexport const REFERRAL = 15;\r\nexport const SCHEDULE = 16;\r\nexport const PURCHASEDITEM = 17;\r\nexport const BS_FAVORITE = 18;\r\nexport const BS_SEARCH_HISTORY = 19;\r\nexport const INFORMATION = 20;\r\nexport const ORGJOIN = 21;\r\n\r\nexport const null2empty = (value: any) => {\r\n if (value === null || value === undefined) return '';\r\n return value;\r\n};\r\n\r\nexport const ACCZIOM_NONE = 0;\r\nexport const ACCZIOM_USER = 1;\r\nexport const ACCZIOM_ORG = 2;\r\nexport const ACCZIOM_TEAM = 3;\r\nexport const ACCZIOM_MEMBER = 4;\r\nexport const ACCZIOM_CLIENT = 5;\r\nexport const ACCZIOM_CLIENT_ORG = 6;\r\nexport const ACCZIOM_SUPPLIER = 7;\r\nexport const ORG_TYPES = [ACCZIOM_ORG, ACCZIOM_CLIENT_ORG, ACCZIOM_SUPPLIER];\r\nexport const INDIVIDUAL_TYPES = [ACCZIOM_USER, ACCZIOM_MEMBER, ACCZIOM_CLIENT];\r\n\r\nexport const getUserIdByType = (body: any): string => {\r\n if (body) {\r\n if (INDIVIDUAL_TYPES.includes(body.type)) return body.uid;\r\n if (ORG_TYPES.includes(body.type)) return body.oid;\r\n }\r\n return '';\r\n};\r\n\r\nexport const getUserTypeByType = (body: any): number => {\r\n if (body) {\r\n if (ORG_TYPES.includes(body.type)) return ACCZIOM_ORG;\r\n return body.type;\r\n }\r\n return ACCZIOM_NONE;\r\n};\r\n\r\nexport const getUserInfoByType = (body: any): any => ({ id: getUserIdByType(body), type: getUserTypeByType(body) });\r\n\r\nexport const USUAL_CHAT_THREAD = 0;\r\nexport const REQUEST_CHAT_THREAD = 1;\r\nexport const INNERORG_CHAT_THREAD = 2;\r\nexport const PROPOSAL_CHAT_THREAD = 3;\r\nexport const CONTRACT_CHAT_THREAD = 4;\r\nexport const FRIEND_CHAT_THREAD = 5;\r\nexport const REFERRAL_CHAT_THREAD = 6;\r\nexport const COMMUNITY_CHAT_THREAD = 7;\r\n\r\nexport const GOOD_PAGE_SIZE = 12;\r\n\r\nexport const TEMPLATE_DRAFT = 0;\r\nexport const TEMPLATE_PUBLISHED = 1;\r\n\r\nexport const NO_MEMBER_MODE = 0;\r\nexport const CHAT_MEMBER_MODE = 1;\r\nexport const ALL_MEMBER_MODE = 2;\r\n\r\nexport const NO_USER_MODE = 0;\r\nexport const ONLY_USER_MODE = 1;\r\nexport const ONLY_ORG_MODE = 2;\r\nexport const BOTH_USER_ORG_MODE = 3;\r\n\r\nexport const NO_TITLE_FIRSTMSG = 0;\r\nexport const ONLY_TITLE = 1;\r\nexport const ONLY_FIRSTMSG = 2;\r\nexport const BOTH_TITLE_FIRSTMSG = 3;\r\n\r\nexport const PRICE_PER_UNIT = 0;\r\nexport const TOTAL_PRICE = 1;\r\nexport const priceOptionModel = [\r\n {\r\n value: `${PRICE_PER_UNIT}`,\r\n label: 'Price Per Unit'\r\n },\r\n {\r\n value: `${TOTAL_PRICE}`,\r\n label: 'Total Price'\r\n }\r\n];\r\n\r\nexport const FINANCIAL_ASSET = 0;\r\nexport const PLANT_EQUIPMENT = 1;\r\nexport const LAND_BUILDING = 2;\r\nexport const INTANGIBLE_ASSET = 3;\r\nexport const MOTOR_VEHICLE = 4;\r\nexport const TODO_RESOURCE_COMMENT = 0;\r\nexport const TODO_RESOURCE_ATTACHMENT = 1;\r\n\r\nexport const DELIVERY_MODE = 0;\r\nexport const PAYMENT_MODE = 1;\r\nexport const REFERRAL_MODE = 2;\r\n\r\nexport const partsOfContract = {\r\n delivery: DELIVERY_MODE,\r\n payment: PAYMENT_MODE\r\n};\r\n\r\nexport const TRADE_CONTRACT = 0;\r\nexport const FINANCE_CONTRACT = 1;\r\nexport const contractTypeModel = [\r\n {\r\n value: `${TRADE_CONTRACT}`,\r\n label: 'Trade Contract'\r\n },\r\n {\r\n value: `${FINANCE_CONTRACT}`,\r\n label: 'Finance Contract'\r\n }\r\n];\r\n\r\nexport const SIMPLE_INTEREST_TYPE = 0;\r\nexport const COMPOUND_INTEREST_TYPE = 1;\r\nexport const interestTypeModel = [\r\n {\r\n value: `${SIMPLE_INTEREST_TYPE}`,\r\n label: 'Simple Interest'\r\n },\r\n {\r\n value: `${COMPOUND_INTEREST_TYPE}`,\r\n label: 'Compound Interest'\r\n }\r\n];\r\n\r\nexport const ON_COMMENCEMENT = 0;\r\nexport const ON_COMPLETION = 1;\r\nexport const paymentPointDelivery = [\r\n {\r\n value: `${ON_COMMENCEMENT}`,\r\n label: 'commencement'\r\n },\r\n {\r\n value: `${ON_COMPLETION}`,\r\n label: 'completion'\r\n }\r\n];\r\n\r\nexport const NOT_REQUIRED_PO = 0;\r\nexport const REQUIRED_PO = 1;\r\n\r\nexport const CONTRACT_MODE = 0;\r\nexport const PURCHASE_ORDER_MODE = 1;\r\nexport const scheduleFromModel = [\r\n {\r\n value: `${CONTRACT_MODE}`,\r\n label: 'Contract'\r\n },\r\n {\r\n value: `${PURCHASE_ORDER_MODE}`,\r\n label: 'Purchase Order'\r\n }\r\n];\r\n\r\nexport const FROM_NONE = 0;\r\nexport const FROM_PROPOSAL = 1;\r\nexport const FROM_REQUEST = 2;\r\n\r\nexport const BUNDLE_GOLD_LIST = 0;\r\nexport const BUNDLE_SILVER_LIST = 1;\r\nexport const BUNDLE_BRONZE_LIST = 2;\r\n\r\nexport const SERVICE_BUNDLE_TYPES = [BUNDLE_BRONZE_LIST, BUNDLE_SILVER_LIST, BUNDLE_GOLD_LIST];\r\n\r\nexport const DAY_MILISECONDS = 86400000;\r\nexport const MINUTE_MILISECONDS = 60000;\r\n\r\nexport const PAY_CREDIT_CARD = 1;\r\nexport const PAY_DIRECT_DEBIT = 2;\r\n\r\nexport const PAY_STRIPE = 1;\r\nexport const PAY_TEXT_STRIPE = 'stripe';\r\nexport const PAY_BIZCORE = 2;\r\nexport const PAY_TEXT_BIZCORE = 'bizcore';\r\nexport const PAY_CRYPTOCURRENCY = 3;\r\nexport const PAY_TEXT_CRYPTOCURRENCY = 'cryptocurrency';\r\n\r\nexport const STATUS_PENDING = 0;\r\nexport const STATUS_ACTIVATED = 1;\r\nexport const STATUS_DECLINED = 2;\r\nexport const STATUS_DEACTIVATED = 3;\r\nexport const STATUS_RECOMMENDED = 4;\r\nexport const STATUS_REJECTED = 5;\r\nexport const STATUS_NORMAL = 6;\r\nexport const STATUS_LOANED = 7;\r\nexport const STATUS_LEASED = 8;\r\nexport const STATUS_BROKEN = 9;\r\nexport const STATUS_EXPIRED = 10;\r\nexport const STATUS_COMPLETED = 11;\r\nexport const STATUS_REMOVED = 12;\r\nexport const STATUS_AVAILABLE = 13;\r\nexport const STATUS_RUNNING = 14;\r\nexport const STATUS_PENDING_TO_ORG = 15;\r\nexport const STATUS_ALL = 16;\r\n\r\nexport const BUYER_TO_SELLER = 1;\r\nexport const SELLER_TO_BUYER = 2;\r\n\r\nexport const ITEM_VIEW = 1;\r\n\r\nexport const TEAM_ITEM_MODE = 1;\r\nexport const ORG_ITEM_MODE = 2;\r\nexport const REFERED_ITEM_MODE = 3;\r\n\r\nexport const ONLY_ITEM_MODE = 1;\r\nexport const ONLY_BUNDLE_MODE = 2;\r\nexport const BOTH_ITEM_BUNDLE_MODE = 3;\r\n\r\nexport const FIND_SELLER_TYPE = 1;\r\nexport const FIND_BUYER_TYPE = 2;\r\nexport const findRefereeTypes = [\r\n {\r\n value: `${FIND_SELLER_TYPE}`,\r\n label: 'seller'\r\n },\r\n {\r\n value: `${FIND_BUYER_TYPE}`,\r\n label: 'buyer'\r\n }\r\n];\r\n\r\nexport const ALL_USER_MODE = 0;\r\nexport const ONLY_PARTNER_MODE = 1;\r\nexport const PARTNER_ME_MODE = 2;\r\n\r\nexport const UI_PADDING = {\r\n sm: '140px',\r\n md: '140px',\r\n lg: 'calc(3% + 140px)',\r\n xl: 'calc(8% + 140px)'\r\n};\r\n\r\nexport const NAVBAR_HEIGHT = 72;\r\nexport const SEARCHBAR_HEIGHT = 72;\r\nexport const NAVBUTTON_WIDTH = 500;\r\nexport const SIDEBAR_WIDTH = 25;\r\n\r\nexport function CopyToClipboard(text) {\r\n navigator.clipboard.writeText(text);\r\n}\r\n\r\nexport const IPFS_UPLOAD = 1;\r\nexport const AWS_UPLOAD = 2;\r\n\r\nexport const VERIFY_NONE = 0;\r\nexport const VERIFY_PROGRESSING = 1;\r\nexport const VERIFY_COMPLETED = 2;\r\n\r\nexport const SERVICE_REQUEST_STEP_INFOCOLLECT = 0;\r\nexport const SERVICE_REQUEST_STEP_CONFIRMED = 1;\r\nexport const SERVICE_REQUEST_STEP_COMPLETED = 2;\r\n\r\nexport const SERVICE_OFFER_STEP_INFOCOLLECT = 0;\r\nexport const SERVICE_OFFER_STEP_SELECT_CUSTOMERS = 1;\r\n\r\nexport const SORT_OPTIONS = [\r\n { label: 'Recently Added', value: 'Descending' },\r\n { label: 'Recently Updated', value: 'Updated' },\r\n { label: 'Name', value: 'Ascending' }\r\n];\r\n\r\nexport const MSG_NONE = 0;\r\nexport const MSG_REMOVE = 1;\r\nexport const MSG_REMOVE_WITH_OTHER = 2;\r\nexport const MSG_REJECT = 3;\r\nexport const MSG_SUPPRESS = 4;\r\nexport const MSG_NOT_REMOVE = 5;\r\nexport const MSG_LEAVE = 6;\r\nexport const MSG_ARCHIVE = 7;\r\nexport const MSG_NAVIGATE = 8;\r\nexport const MSG_REJECT_FOLLOWUP = 9;\r\n\r\nexport const SUBMIT_NONE = 0;\r\nexport const SUBMIT_TO_READY = 1;\r\nexport const SUBMIT_PUBLISH = 2;\r\nexport const SUBMIT_DUPLICATE = 3;\r\nexport const SUBMIT_REMOVE = 4;\r\nexport const SUBMIT_SIGN = 5;\r\nexport const SUBMIT_PURCHASE = 6;\r\nexport const SUBMIT_REJECT = 7;\r\nexport const SUBMIT_DOWNLOAD = 8;\r\nexport const SUBMIT_CREATE = 9;\r\nexport const SUBMIT_INVITE = 10;\r\nexport const SUBMIT_AGAIN = 11;\r\nexport const SUBMIT_ARCHIVE = 12;\r\nexport const SUBMIT_REJECT_FOLLOWUP = 13;\r\nexport const SUBMIT_SUPPRESS = 14;\r\nexport const SUBMIT_REGISTER = 15;\r\nexport const SUBMIT_RETURN = 16;\r\nexport const SUBMIT_CHAT = 17;\r\nexport const SUBMIT_POSTPONE = 18;\r\nexport const SUBMIT_CHANGE = 19;\r\nexport const SUBMIT_ACCEPT = 20;\r\nexport const SUBMIT_ACCEPT_FOLLOWUP = 21;\r\nexport const SUBMIT_JOIN = 22;\r\n\r\nexport const SHOW_NONE = 0;\r\nexport const SHOW_DETAIL = 1;\r\nexport const SHOW_VERIFY = 2;\r\nexport const SHOW_SHARE = 3;\r\nexport const SHOW_INVITE_MSG = 4;\r\nexport const SHOW_ADD_ITEM = 5;\r\nexport const SHOW_INVITE_USER = 6;\r\n\r\nexport const BEFORE_RESULT = -1;\r\nexport const RESULT_FALSE = 0;\r\nexport const RESULT_TRUE = 1;\r\n\r\nexport const etherscanEndpoint = 'https://goerli.etherscan.io';\r\n\r\nexport const ASSET_PURPOSE_KEEP = 0;\r\nexport const ASSET_PURPOSE_SALE = 1;\r\nexport const ASSET_PURPOSE_LEASE = 2;\r\n\r\nexport const RESOURCE_FILE_TYPE_IMAGE = 0;\r\nexport const RESOURCE_FILE_TYPE_VIDEO = 1;\r\nexport const RESOURCE_FILE_TYPE_FILE = 2;\r\n\r\nexport const BANNER_RATIO = '4 / 1';\r\n\r\nexport const PLATFORM_QBO = 'QBO';\r\nexport const PLATFORM_XERO = 'XERO';\r\n\r\nexport const INVITATION_EXPIRE_DAY = 30;\r\n\r\nexport const SELECT_PARTNER_ORG_MODE = 1;\r\nexport const SELECT_PARTNER_CLIENT_MODE = 2;\r\nexport const SELECT_PARTNER_PARTNER_MODE = 3;\r\nexport const SELECT_PARTNER_MEMBER_MODE = 4;\r\nexport const SELECT_PARTNER_SUPPLIER_MODE = 5;\r\n\r\nexport const NONE_BUTTON_MODE = 0;\r\nexport const FUNCTION_BUTTON_MODE = 1;\r\nexport const MORE_BUTTON_MODE = 2;\r\n\r\nexport const REQUIRE_NONE_MODE = 0;\r\nexport const REQUIRE_NOT_AUTH_MODE = 1;\r\nexport const REQUIRE_AUTH_MODE = 2;\r\n\r\nexport const participantStatusList = [\r\n {\r\n id: STATUS_PENDING,\r\n value: 'Pending',\r\n color: '#ff8a65'\r\n },\r\n {\r\n id: STATUS_DECLINED,\r\n value: 'Denied',\r\n color: '#ff8a65'\r\n },\r\n {\r\n id: STATUS_ACTIVATED,\r\n value: 'Active',\r\n color: '#d4f6cc'\r\n }\r\n];\r\n\r\nexport const BACKGROUND_DEEP = '#49759c';\r\n\r\nexport const defaultTeamData = [\r\n 'Sales',\r\n 'Advertising / Marketing',\r\n 'Operations',\r\n 'Software Development / Engineering',\r\n 'Partnerships',\r\n 'Legal',\r\n 'Finance / Accounting'\r\n];\r\n\r\nexport const scheduleDiagramStyle = {\r\n dayWidth: 21,\r\n lineHeight: 30,\r\n timeHeight: 30,\r\n titleWidth: 300,\r\n barPadding: 5,\r\n barBorderRadius: 8,\r\n borderColor: '#eeeeee',\r\n barColor: '#1695eaa0',\r\n weekLineColor: '#aaaaaa',\r\n weekendColor: '#fafafa',\r\n detailTextColor: '#303030',\r\n payColor: '#d03030'\r\n};\r\n\r\nexport const fullTags = [\r\n {\r\n type: 'Apps & functions',\r\n tags: [\r\n 'Accounting systems',\r\n 'Bills & expenses',\r\n 'CRM systems',\r\n 'System Conversion',\r\n 'Custom Integration',\r\n 'Debtor tracking',\r\n 'Ecommerce',\r\n 'Financial services',\r\n 'Inventory',\r\n 'Invoicing & jobs',\r\n 'Payments',\r\n 'Payroll HR',\r\n 'Point of sale',\r\n 'Practice management',\r\n 'Reporting',\r\n 'Time tracking',\r\n 'Document systems'\r\n ],\r\n color: '#4caf50'\r\n },\r\n {\r\n type: 'Tax Tags',\r\n tags: [\r\n 'Goods & services tax',\r\n 'Fuel tax',\r\n 'Income tax',\r\n 'Luxury car tax',\r\n 'Wine equalization tax',\r\n 'Payroll tax',\r\n 'Fringe Benefits Tax'\r\n ],\r\n color: '#ff9800'\r\n },\r\n {\r\n type: 'Activities',\r\n tags: [\r\n 'Bookkeeping',\r\n 'Payroll',\r\n 'Accounting',\r\n 'Advisory',\r\n 'Corporate Affairs'\r\n ],\r\n color: '#9c27b0'\r\n },\r\n {\r\n type: 'Industry tags',\r\n tags: [\r\n 'Agriculture, Forestry and Fishing',\r\n 'Mining',\r\n 'Manufacturing',\r\n 'Electricity, Gas, Water and Waste Services',\r\n 'Construction',\r\n 'Wholesale Trade',\r\n 'Retail Trade',\r\n 'Accommodation and Food Services',\r\n 'Transport, Postal and Warehousing',\r\n 'Information Media and Telecommunications',\r\n 'Financial and Insurance Services',\r\n 'Rental, Hiring and Real Estate Services',\r\n 'Professional, Scientific and Technical Services',\r\n 'Administrative and Support Services',\r\n 'Public Administration and Safety',\r\n 'Education and Training',\r\n 'Health Care and Social Assistance',\r\n 'Arts and Recreation Services'\r\n ],\r\n color: '#673ab7'\r\n }\r\n];\r\n\r\nexport const MESSAGE_TEXT = 1;\r\nexport const MESSAGE_HTML = 2;\r\n\r\nexport const HOVER_BGCOLOR = '#fafafa';\r\nexport const BOXSHADOW = '0px 0px 2px #00000070';\r\nexport const THEME_COLOR_GRAY = '#fafafa';\r\nexport const THEME_COLOR_DARK_GRAY = '#e8e8e8';\r\nexport const BOXSHADOW2 = '0px 2px 4px #0a164612';\r\n\r\nexport const FREE_USER_ID = 'FREE_USER_ID';\r\n\r\nexport const IDLE_DURATION_MINUTES = 120;\r\nexport const CHECK_INTERVAL_MINUTES = 5;\r\n","import { Auth } from 'aws-amplify';\r\nimport Lambda from 'aws-sdk/clients/lambda';\r\nimport { AWS_REGION } from 'src/config';\r\nimport { addCallApiCount } from 'src/slices/user';\r\nimport gstore from 'src/store';\r\n\r\ninterface AWSLambdaCallParameters {\r\n FunctionName: string,\r\n InvocationType: string,\r\n Payload?: string\r\n}\r\n\r\nexport const callLambda = async (fn: string, req?: any): Promise => Auth.currentCredentials()\r\n .then((cred) => new Promise((resolve, reject) => {\r\n const lambda = new Lambda({\r\n region: AWS_REGION,\r\n apiVersion: '2015-03-31',\r\n credentials: cred\r\n });\r\n const callParams: AWSLambdaCallParameters = {\r\n FunctionName: fn,\r\n InvocationType: 'RequestResponse'\r\n };\r\n const reqWithCred = {\r\n ...(!req ? {} : req),\r\n _orgId: gstore.getState().organization.activeOrgId\r\n };\r\n callParams.Payload = JSON.stringify(reqWithCred);\r\n lambda.invoke(callParams).promise()\r\n .then((res) => {\r\n const payload = JSON.parse(res.Payload as string);\r\n resolve(payload);\r\n })\r\n .catch((err) => reject(err));\r\n }))\r\n .catch(() => null);\r\n\r\nexport const lambdaRun = (fn: string, req?: any, notAdd?: boolean): Promise => new Promise((resolve, reject) => {\r\n if (!notAdd) gstore.dispatch(addCallApiCount());\r\n callLambda(fn, req)\r\n .then((data) => {\r\n if (!data || data.errorType === undefined) {\r\n resolve(data);\r\n } else {\r\n reject(new Error(`Failed with reject error: ${JSON.stringify(data.errorMessage)} for ${fn} by ${JSON.stringify(req)}`));\r\n }\r\n })\r\n .catch((err) => {\r\n console.error('lambda catch error:', fn, req.method);\r\n reject(new Error(`Failed with catch error: ${JSON.stringify(err)} for ${fn} by ${JSON.stringify(req)}`));\r\n });\r\n});\r\n","import * as LAMBDA_FN from 'src/../../Backend/constants.json';\r\nimport { lambdaRun } from './lambdaCall';\r\n\r\nexport const lambdaPutUserInfo = (_uid: string, _body: any) : Promise => (\r\n lambdaRun(LAMBDA_FN.FN_USER_DISPATCH, { method: 'PUT', uid: _uid, body: _body })\r\n);\r\n\r\nexport const lambdaPutUserInfoForFillup = (_uid: string, _body: any, email: string) : Promise => (\r\n lambdaRun(LAMBDA_FN.FN_USER_DISPATCH, { method: 'PUT_FOR_FILLUP', uid: _uid, body: _body, email })\r\n);\r\n\r\nexport const lambdaPutAvatar = (_uid: string, image: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_USER_DISPATCH, { method: 'PUT_AVATAR', uid: _uid, body: image })\r\n);\r\n\r\nexport const lambdaGetUserInfo = (_uid: string) : Promise => (\r\n lambdaRun(LAMBDA_FN.FN_USER_DISPATCH, { method: 'GET', uid: _uid })\r\n);\r\n\r\nexport const lambdaGetUserInfoByEmail = (_email: string) : Promise => (\r\n lambdaRun(LAMBDA_FN.FN_USER_DISPATCH, { method: 'GET_BY_EMAIL', email: _email })\r\n);\r\n\r\nexport const lambdaGetUserInfoByMemberId = (mid: string) : Promise => (\r\n lambdaRun(LAMBDA_FN.FN_USER_DISPATCH, { method: 'GET_BY_MEMBER_ID', mid })\r\n);\r\n\r\nexport const lambdaSearchUserByField = (_query: string, _fieldName: string) : Promise => (\r\n lambdaRun(LAMBDA_FN.FN_USER_DISPATCH, { method: 'SEARCH_BY_FIELD', query: _query, fieldName: _fieldName })\r\n);\r\n\r\nexport const lambdaGetTwilioToken = (_uid: string, notAdd?: boolean): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_TWILIO_REQUEST_TOKEN, { method: 'GET_COMMUNITY_TOKEN', uid: _uid }, notAdd)\r\n);\r\n\r\nexport const lambdaCreateCommunityAdminParticipants = (_sid: string, _uids: string[]): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_TWILIO_REQUEST_TOKEN, { method: 'CREATE_COMMUNITY_ADMIN_PARTICIPANTS', sid: _sid, uids: _uids })\r\n);\r\n\r\nexport const lambdaSendRawFeedback = (emailParams: any, emailTransportAttachments: any[]): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_FEEDBACK_DISPATCH, { method: 'SEND_RAW', emailParams, emailTransportAttachments })\r\n);\r\n\r\nexport const lambdaFindAddress = (_query: string) : Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ADDRESS_HELPER, { query: _query })\r\n);\r\n\r\nexport const lambdaAcceptInvitations = (mids: string[], uid: string = null, isCreateOrg: boolean): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'ACCEPT_INVITATIONS', mids, uid, isCreateOrg })\r\n);\r\n\r\nexport const lambdaJoinAsClient = (userInfo: any, domain: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'JOIN_AS_CLIENT', userInfo, domain })\r\n);\r\n\r\nexport const lambdaAcceptInvitationOnSingin = (organizationId: string, email: string, asMember: boolean): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'ACCEPT_INVITATION_ON_SIGN_IN', organizationId, email, asMember })\r\n);\r\n\r\nexport const lambdaAcceptOrgInvitationOnSingin = (organizationId: string, email: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'ACCEPT_ORG_INVITATION_ON_SIGN_IN', organizationId, email })\r\n);\r\n\r\nexport const lambdaGetPendingInvitations = (email: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'GET_PENDING_INVITATIONS', email })\r\n);\r\n\r\nexport const lambdaCreateOrganization = (org: any, adminRole: any, userInfo: any, isFirst: boolean, teamNames: string[]): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'CREATE_ORGANIZATION', org, adminRole, userInfo, isFirst, teamNames })\r\n);\r\n\r\nexport const lambdaSetOrganizationInfo = (_body: any): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'PUT', body: _body })\r\n);\r\n\r\nexport const lambdaGetUserMinInfos = (_users: any): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'GET_USERS_MIN', users: _users })\r\n);\r\n\r\nexport const lambdaSearchOrganizationByField = (_query: string, _fieldName: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'SEARCH_BY_FIELD', query: _query, fieldName: _fieldName })\r\n);\r\n\r\nexport const lambdaGetOrgActivatedMembersOfUser = (_uid: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'GET_ACTIVATED', uid: _uid })\r\n);\r\n\r\nexport const lambdaCheckRegisterInvite = (_uid: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'CHECK_REGISTER_INVITE', uid: _uid })\r\n);\r\n\r\nexport const lambdaGetOrganizationInfo = (_orgId: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'GET_ORG_INFO', orgId: _orgId })\r\n);\r\n\r\nexport const lambdaGetMembersFromOrgs = (_oids: string[]) : Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'GET_MEMBERS', oids: _oids })\r\n);\r\n\r\nexport const lambdaUpdateOrganizationInfo = (_orgId: string, _body: any): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'UPDATE', orgId: _orgId, body: _body })\r\n);\r\n\r\nexport const lambdaCheckDomainNameAvailable = (dn: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'CHECK_AVAILABILITY', domainName: dn })\r\n);\r\n\r\nexport const lambdaCheckEmailAvailable = (email: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'CHECK_EMAIL_AVAILABILITY', email })\r\n);\r\n\r\nexport const lambdaGetOrgMembersOfUser = (_uid: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'GET', uid: _uid })\r\n);\r\n\r\nexport const lambdaAddOrgMember = (_body: any): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'ADD_MEMBER', body: _body })\r\n);\r\n\r\nexport const lambdaAddAndDeleteMembers = (newMembers: any[], deleteIds: string[], orgId: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'ADD_DELETE_MEMBERS', newMembers, deleteIds, orgId })\r\n);\r\n\r\nexport const lambdaDeleteOrgMember = (_mid: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'DELETE_MEMBER', mid: _mid })\r\n);\r\n\r\nexport const lambdaUpdateOrgMember = (_mid: string, _body: any): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'UPDATE_MEMBER', mid: _mid, body: _body })\r\n);\r\n\r\nexport const lambdaUpdateOrgMemberWithEmail = (_body: any): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'UPDATE_MEMBER_WITH_EMAIL', body: _body })\r\n);\r\n\r\nexport const lambdaAddOrgMemberRole = (_body: any): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'ADD_MEMBER_ROLE', body: _body })\r\n);\r\n\r\nexport const lambdaUpdateOrgMemberRole = (_rid: string, _body: any): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'UPDATE_MEMBER_ROLE', rid: _rid, body: _body })\r\n);\r\n\r\nexport const lambdaDeleteOrgMemberRole = (_oid: string, _rid: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'DELETE_MEMBER_ROLE', oid: _oid, rid: _rid })\r\n);\r\n\r\nexport const lambdaAddOrgTeam = (_teamInfo: any, _memberIds: string[]): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'ADD_TEAM', teamInfo: _teamInfo, memberIds: _memberIds })\r\n);\r\n\r\nexport const lambdaUpdateOrgTeam = (_tid: string, _teamInfo: any, _addMemberIds: string[], _deleteMemberIds: string[]): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'UPDATE_TEAM', tid: _tid, teamInfo: _teamInfo, addMemberIds: _addMemberIds, deleteMemberIds: _deleteMemberIds })\r\n);\r\n\r\nexport const lambdaGetOrgStructure = (_oid: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'GET_ORG', oid: _oid })\r\n);\r\n\r\nexport const lambdaGetOrgTeamMembers = (_tid: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'GET_TEAM_MEMBER', tid: _tid })\r\n);\r\n\r\nexport const lambdaDeleteOrgTeam = (_tid: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'DELETE_TEAM', tid: _tid })\r\n);\r\n\r\nexport const lambdaGetOrgBannerUploadUrl = (id: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'GET_UP_BANNER_URL', id })\r\n);\r\n\r\nexport const lambdaGetOrgBannerUrl = (id: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ORGANIZATION_DISPATCH, { method: 'GET_BANNER_URL', id })\r\n);\r\n\r\nexport const lambdaCreateAnzicTaxonomyInfoByType = (category: any, type: number): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_TAXONOMY_DISPATCH, { method: 'CREATE_ANZIC_BY_TYPE', category, type })\r\n);\r\n\r\nexport const lambdaGetAnzicTaxonomyInfo = (): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_TAXONOMY_DISPATCH, { method: 'GET_ANZIC' })\r\n);\r\n\r\nexport const lambdaGetAnzicTaxonomyInfoByType = (type: number): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_TAXONOMY_DISPATCH, { method: 'GET_ANZIC_BY_TYPE', type })\r\n);\r\n\r\nexport const lambdaGetAnzicTaxonomyInfoByCodeAndType = (code: string, type: number): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_TAXONOMY_DISPATCH, { method: 'GET_ANZIC_BY_CODE_TYPE', code, type })\r\n);\r\n\r\nexport const lambdaUpdateTags = (newTags: any[], removedIds: string[]): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_TAG_DISPATCH, { method: 'UPDATE_SIMPLE', newTags, removedIds })\r\n);\r\n\r\nexport const lambdaCreateOrUpdateTags = (objectId: string, objectType: number, names: string[], removedIds: string[]): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_TAG_DISPATCH, { method: 'CREATE_OR_UPDATE', objectId, objectType, names, removedIds })\r\n);\r\n\r\nexport const lambdaDuplicateTags = (objectId: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_TAG_DISPATCH, { method: 'DUPLICATE', objectId })\r\n);\r\n\r\nexport const lambdaGetTags = (objectId: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_TAG_DISPATCH, { method: 'GET', objectId })\r\n);\r\n\r\nexport const lambdaGetMultiObjectTags = (ids: string[]): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_TAG_DISPATCH, { method: 'GET_MULTI', ids })\r\n);\r\n\r\nexport const lambdaCreatePurchaseHistory = (body: any): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_PURCHASEHISTORY_DISPATCH, { method: 'CREATE', body })\r\n);\r\n\r\nexport const lambdaSendMsgToPhone = (phoneNumber: string, msg: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_SNS_DISPATCH, { method: 'SNS_SEND', phoneNumber, msg })\r\n);\r\n\r\nexport const lambdaGetAttachmentFileUploadUrl = (uid: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ATTACHMENT_DISPATCH, { method: 'GET_UP_URL', uid })\r\n);\r\n\r\nexport const lambdaGetAttachmentFileDownloadUrl = (_uid: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ATTACHMENT_DISPATCH, { method: 'GET_URL', uid: _uid })\r\n);\r\n\r\nexport const lambdaDeleteAttachmentFile = (uid: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_ATTACHMENT_DISPATCH, { method: 'DELETE_FILE', uid })\r\n);\r\n\r\nexport const lambdaRemoveChatFromInvitation = (convId: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_INVITATION_DISPATCH, { method: 'REMOVE_CHAT', convId })\r\n);\r\n\r\nexport const lambdaSearchUserWithFriend = (query: string, showUser: number): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_INVITATION_DISPATCH, { method: 'SEARCH_USERS_BY_QUERY', query, showUser })\r\n);\r\n\r\nexport const lambdaAddAndDeleteMessages = (sid: string, newMsgs: any[], deleteIds: number[]): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_CHANNEL_DISPATCH, { method: 'ADD_DELETE_MESSAGES', sid, newMsgs, deleteIds })\r\n);\r\n\r\nexport const lambdaUpdateMessage = (body: any): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_CHANNEL_DISPATCH, { method: 'UPDATE_MESSAGE', body })\r\n);\r\n\r\nexport const lambdaPublishChannel = (sid: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_CHANNEL_DISPATCH, { method: 'PUBLISH_CHANNEL', sid })\r\n);\r\n\r\nexport const lambdaJoinChannel = (sid: string, recipients: any[]): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_CHANNEL_DISPATCH, { method: 'JOIN_PARTICIPANTS', sid, recipients })\r\n);\r\n\r\nexport const lambdaCreateChannel = (info: any, recipients: any[]): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_CHANNEL_DISPATCH, { method: 'ADD_CHANNEL', info, recipients })\r\n);\r\n\r\nexport const lambdaUpdateChannel = (sid: string, body: any): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_CHANNEL_DISPATCH, { method: 'UPDATE_CHANNEL', sid, body })\r\n);\r\n\r\nexport const lambdaTerminateChannel = (sid: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_CHANNEL_DISPATCH, { method: 'TERMINATE_CHANNEL', sid })\r\n);\r\n\r\nexport const lambdaLeaveChannel = (sid: string, recipient: any): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_CHANNEL_DISPATCH, { method: 'LEAVE_CHANNEL', sid, recipient })\r\n);\r\n\r\nexport const lambdaAddAndDeleteChannelParticipants = (sid: string, newRecipients: any[], deleteIds: string[]): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_CHANNEL_DISPATCH, { method: 'ADD_DELETE_PARTICIPANTS', sid, newRecipients, deleteIds })\r\n);\r\n\r\nexport const lambdaActivateParticipants = (sid: string, recipientIds: string[]): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_CHANNEL_DISPATCH, { method: 'ACTIVATE_PARTICIPANTS', sid, recipientIds })\r\n);\r\n\r\nexport const lambdaSearchChannelMessage = (sid: string, query: string, offset: number, limit: number): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_CHANNEL_DISPATCH, { method: 'SEARCH_MESSAGE', sid, query, offset, limit })\r\n);\r\n\r\nexport const lambdaCreateFileResources = (resources: any[]): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_FILERESOURCE_DISPATCH, { method: 'PUT', resources })\r\n);\r\n\r\nexport const lambdaGetFileResourcesByItemId = (itemId: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_FILERESOURCE_DISPATCH, { method: 'GET', itemId })\r\n);\r\n\r\nexport const lambdaUpdateFileResources = (add: any[], remove: string[]): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_FILERESOURCE_DISPATCH, { method: 'UPDATE', add, remove })\r\n);\r\n\r\nexport const lambdaGetInvitationRelated = (userId: string): Promise => (\r\n lambdaRun(LAMBDA_FN.FN_INVITATION_DISPATCH, { method: 'GET_BY_RELATED', userId })\r\n);\r\n","import { useContext } from 'react';\r\nimport AuthContext from 'src/contexts/AmplifyContext';\r\n\r\nconst useAuth = () => useContext(AuthContext);\r\n\r\nexport default useAuth;\r\n","import { User } from 'src/../../Common/Model/user';\r\nimport { Organization, OrgMember } from 'src/../../Common/Model/organization';\r\nimport { UserMinInfo } from 'src/../../Common/Model/common';\r\nimport { null2empty, ACCZIOM_USER, ACCZIOM_ORG } from 'src/globals';\r\n\r\nexport const orgToMiniUser = (orgInfo: Organization): UserMinInfo => ({\r\n uid: null2empty(orgInfo.organizationId),\r\n allIds: [{ id: null2empty(orgInfo.organizationId), type: ACCZIOM_ORG }],\r\n type: ACCZIOM_ORG,\r\n firstName: null2empty(orgInfo.firstName),\r\n middleName: null2empty(orgInfo.middleName),\r\n lastName: null2empty(orgInfo.lastName),\r\n penName: null2empty(orgInfo.tradingName),\r\n avatar: null2empty(orgInfo.logo),\r\n addressLine1: null2empty(orgInfo.addressLine1),\r\n country: null2empty(orgInfo.country),\r\n state: null2empty(orgInfo.region),\r\n city: null2empty(orgInfo.city),\r\n postalCode: null2empty(orgInfo.postalCode),\r\n phone: null2empty(orgInfo.phone),\r\n email: null2empty(orgInfo.email),\r\n website: null2empty(orgInfo.website),\r\n published: orgInfo.publishedProfile && orgInfo.publishedProfile.accziom\r\n});\r\n\r\nexport const userToMiniUser = (userInfo: User): UserMinInfo => ({\r\n uid: null2empty(userInfo.uid),\r\n allIds: [{ id: null2empty(userInfo.uid), type: ACCZIOM_USER }],\r\n type: ACCZIOM_USER,\r\n firstName: null2empty(userInfo.firstName),\r\n middleName: null2empty(userInfo.middleName),\r\n lastName: null2empty(userInfo.lastName),\r\n penName: null2empty(userInfo.penName),\r\n avatar: null2empty(userInfo.avatar),\r\n addressLine1: null2empty(userInfo.addressLine1),\r\n city: null2empty(userInfo.city),\r\n state: null2empty(userInfo.state),\r\n country: null2empty(userInfo.country),\r\n postalCode: null2empty(userInfo.postalCode),\r\n phone: null2empty(userInfo.phone),\r\n email: null2empty(userInfo.email),\r\n website: null2empty(userInfo.website),\r\n published: userInfo.publishedProfile && userInfo.publishedProfile.accziom\r\n});\r\n\r\nexport const memberToMiniUser = (memberInfo: OrgMember): UserMinInfo => ({\r\n uid: null2empty(memberInfo.mid),\r\n allIds: [{ id: null2empty(memberInfo.mid), type: memberInfo.type }],\r\n type: memberInfo.type,\r\n firstName: null2empty(memberInfo.firstName),\r\n middleName: null2empty(memberInfo.middleName),\r\n lastName: null2empty(memberInfo.lastName),\r\n penName: null2empty(memberInfo.penName),\r\n avatar: '',\r\n addressLine1: null2empty(memberInfo.addressLine1),\r\n city: null2empty(memberInfo.city),\r\n state: null2empty(memberInfo.state),\r\n country: null2empty(memberInfo.country),\r\n postalCode: null2empty(memberInfo.postalCode),\r\n phone: null2empty(memberInfo.phone),\r\n email: null2empty(memberInfo.email),\r\n website: null2empty(memberInfo.website),\r\n published: ['addressLine1', 'city', 'state', 'country', 'postalCode', 'phone', 'email', 'website']\r\n});\r\n"],"sourceRoot":""}