{"version":3,"sources":["api/withAuth.ts","models/TypeOfRepresentative.ts","models/Address.ts","models/Group.ts","models/Position.ts","models/Contact.ts","models/Workplace.ts","models/Department.ts","utils/format.ts","models/Member.ts","models/Profile.ts","api/profile/profile.ts","theme/palette.ts","assets/icons/AddContact.tsx","assets/icons/BookmarkFill.tsx","assets/icons/Calendar.tsx","assets/icons/Check.tsx","assets/icons/CheckFill.tsx","assets/icons/ChevronLeft.tsx","assets/icons/ChevronRight.tsx","assets/icons/ChevronDownFill.tsx","assets/icons/Close.tsx","assets/icons/ContactFill.tsx","assets/icons/ContactLedger.tsx","assets/icons/Delete.tsx","assets/icons/DeleteFill.tsx","assets/icons/Edit.tsx","assets/icons/EditFill.tsx","assets/icons/EmailFill.tsx","assets/icons/Envelop.tsx","assets/icons/FlagFill.tsx","assets/icons/Foa.tsx","assets/icons/HandshakeFill.tsx","assets/icons/Heart.tsx","assets/icons/Help.tsx","assets/icons/Info.tsx","assets/icons/Kontigenter.tsx","assets/icons/LinkFill.tsx","assets/icons/LockFill.tsx","assets/icons/Materialer.tsx","assets/icons/Medlemsfordele.tsx","assets/icons/MessageFill.tsx","assets/icons/Note.tsx","assets/icons/Notes.tsx","assets/icons/Ok.tsx","assets/icons/Organiseringsprocent.tsx","assets/icons/PersonalInfo.tsx","assets/icons/PersonSearch.tsx","assets/icons/PhotoFill.tsx","assets/icons/PinFill.tsx","assets/icons/Plus.tsx","assets/icons/Priority.tsx","assets/icons/Question.tsx","assets/icons/RatingStar.tsx","assets/icons/SearchPerson.tsx","assets/icons/Search.tsx","assets/icons/SendFill.tsx","assets/icons/SendToMany.tsx","assets/icons/Settings.tsx","assets/icons/StarYellow.tsx","assets/icons/Star.tsx","assets/icons/StarFill.tsx","assets/icons/SuitcaseFill.tsx","assets/icons/Tips.tsx","components/ui/Dialog/Dialog.tsx","components/ui/Typography/Typography.tsx","theme/breakpoints.ts","components/ui/Button/Button.tsx","store/auth/index.ts","components/ui/FormElememts/Select.tsx","api/departments/index.ts","components/ui/FormElememts/Input.tsx","hooks/useWindowSize.ts","components/ui/Card/Card.tsx","components/ui/Card/CardList.tsx","components/ui/Card/CardMobile.tsx","components/ui/Card/CardHeader.tsx","components/ui/Card/CardContentMobile.tsx","components/ui/Card/CardCell.tsx","components/ui/Circle/styles.ts","components/ui/Circle/Circle.tsx","components/ui/SortButton/index.tsx","utils/initials.ts","models/Filter.ts","utils/filterhelper.ts","api/members/members.ts","utils/sortHelper.ts","utils/searchHelper.ts","store/lokalise/lokaliseAtom.ts","components/ui/Loaders/Spinner.tsx","components/providers/Lokalise.tsx","utils/utils.ts","store/filter/filterAtom.ts","hooks/useSortMembersList.ts","theme/layout.ts","theme/reuseables.ts","components/ui/FormElememts/FormControl.tsx","components/modules/Imitator/index.tsx","api/misc/index.ts","utils/Auth0.tsx","theme/zIndex.ts","theme/index.ts","theme/sizes.ts","components/Layout/index.tsx","components/modules/Imitator/ImitatorNoAccessWarning.tsx","components/ui/TabbedMenu/index.tsx","components/Navigation/Menu/Menu.tsx","utils/Logout.ts","components/ui/Navbar/NavbarDesktop.tsx","api/Interceptor.tsx","components/Example/index.tsx","components/ui/Badge/Badge.tsx","components/ui/Favorite/index.tsx","api/favorite/index.ts","components/ui/NoteButton/index.tsx","components/ui/Accordion/Accordion.tsx","components/ui/FormElememts/Checkbox.tsx","components/pages/Members/Checkboxes.tsx","components/ui/Sidebar/index.tsx","components/pages/Members/Filter.tsx","components/modules/Filter/FiltersSummary.tsx","components/ui/FormElememts/stories/Input.stories.tsx","components/ui/SearchField/SearchField.tsx","components/ui/FormElememts/RadioButton.tsx","components/modules/GotoMembrsearchModal/index.tsx","components/modules/SignupMemberModal/index.tsx","components/modules/Headerlinks/index.tsx","components/pages/Members/index.tsx","components/ui/FormElememts/TextArea.tsx","components/modules/FormElements/FormInput.tsx","components/ui/Card/CardWithIconAndMessge.tsx","components/ui/FormElememts/DatePicker.tsx","components/ui/FormElememts/FormMessage.tsx","components/pages/AllMembers/index.tsx","api/updates/index.ts","models/UpdateBatch.ts","components/modules/FormElements/DrawerHeader.tsx","components/ui/FormElememts/FormHeader.tsx","components/modules/Updates/UpdateDetails.tsx","components/pages/Updates/index.tsx","api/notes/index.ts","models/Note.ts","components/modules/notes/AddNewNote.tsx","components/modules/notes/EditNote.tsx","components/modules/notes/EditMemberNoteButton.tsx","components/modules/notes/NoteSidebarCard.tsx","components/modules/notes/NoteOverviewSidebar.tsx","components/modules/notes/EditWorkplaceNotes.tsx","components/pages/Workplaces/WorkplaceCardCell.tsx","components/pages/Workplaces/index.tsx","components/ui/Card/CardColumn.tsx","components/ui/Card/CardColumnContainer.tsx","components/modules/EditMyProfile/index.tsx","components/ui/PercentLevel/PercentLevel.tsx","assets/img/gmapsBgImage.png","components/ui/GmapsLink/GmapsLink.tsx","components/modules/WorkplaceDropdown/index.tsx","components/pages/MyProfile/index.tsx","components/modules/EditMemberProfile/index.tsx","components/modules/CancelWorkplace/index.tsx","components/modules/AddMemberToWorkplace/index.tsx","components/ui/BackLink/index.tsx","components/modules/notes/EditMemberNotes.tsx","components/pages/MemberProfile/index.tsx","components/modules/AddMemberToOwnList/index.tsx","components/pages/MemberProfileFromSearch/index.tsx","components/ui/Footer/Footer.tsx","components/modules/notes/EditNoteFromPage.tsx","components/pages/MyNotes/NotePage.tsx","components/ui/ScrollToTopButton/ScrollToTopButton.tsx","components/pages/Organization/index.tsx","RoleBasedRoutes.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["oidcSettings","process","axiosWithAuth","axios","create","baseURL","doRefreshToken","userData","a","defaults","headers","common","post","qs","stringify","grant_type","redirect_uri","client_id","refresh_token","response","user","data","updatedUserDate","access_token","localStorage","setItem","JSON","clear","window","location","href","interceptors","request","use","config","localUser","getItem","parse","Authorization","error","Promise","reject","status","axiosWithImitator","profile","isImitator","apiProfile","myProfileId","params","TypeOfRepresentative","isActive","name","shortName","sort","type","showLongName","electedDate","alternateRepresentativeList","undefined","supplementedOfDutyType","pos","ErAktiv","KortNavn","Navn","Sorteringsorden","Type","VisLangtNavnIOversigt","Genvalgsdato","SupplererMedlemsidentList","SuppleresAfHvervsType","SuppleresHvervsType","mapTypeOfRepresentatives","map","build","Address","id","addressLine1","addressLine2","addressLine3","postDistrict","postNumber","address","Adresselinie1","Adresselinie2","Adresselinie3","Postdistrikt","Postnummer","Group","group","Nummer","Position","number","numbers","department","Faggruppe","Arbejdsstedsnumre","mapPositions","position","Contact","email","telephone","telephoneShow","mobile","mobileShow","isTelefonPrivate","contactInfoType","workPlacesContact","contact","Email","ErTelefonerHemmelige","KontaktoplysningerType","Telefon","TelefonVis","Mobil","MobilVis","KontaktoplysningerForArbejdssted","Workplace","mapContacts","isPrimaryWorkplace","okGroup","postionNumber","typeOfRepresentatives","hoursPerWeek","positions","numberOfNotes","trMemberList","numberOfMembers","searchable_name","searchable_address","mapWorkplaces","workplace","workPlace","Adresse","ErPrimaertArbejdssted","ArbejdsstedType","OKGruppe","Stillingsnummer","Timetal","Tillidshverv","Stillinger","AntalNoter","TRTillidshvervMedlemLister","length","forEach","item","Medlemsidenter","Array","from","Set","getNumberOfMembers","Department","registrationDate","Indmeldelsesdato","Date","formatDate","date","getDate","slice","getMonth","getFullYear","formatPhoneNumber","defaultGapSize","result","cloned","gap_size","substring","Member","workPlaces","allWorkPlaces","isFavorite","memberId","firstName","lastName","fullName","memberNumber","birthday","age","isOwnMember","primaryWorkPlace","profilePicture","content","mimeType","contactInfoList","privateContact","workContact","membershipInfo","searchable_fullName","searchable_workPlace","searchable_birthDay","searchable_age","mapMembers","member","Arbejdssteder","ErFavorit","OpdaterStatus","Medlemsident","Medlemsnummer","Fornavn","Efternavn","FuldeNavn","Afdeling","ErEgetMedlem","ProfilBillede","Content","Alder","KontaktoplysningerList","find","c","FoedselsDato","wpNumbers","wpNumber","wp","w","findMyWorkplaces","found","wordPlace","findPrimaryWorkPlace","Profile","roles","personalInfo","birthdate","totalNumberOfPeopleUserCovers","numberFoaMemberUserCovers","trForSelf","trForOthers","myProfile","TotalAntalKollegaerBrugerDaekker","AntalFoaMedlemmerBrugerDaekker","MimeType","BrugerSuppleantForTillidshvervMedlemmer","TillidhvervMedlemmerSuppleantForBruger","initialValue","getProfile","get","getProfileSupportInfo","updateProfile","values","getProfileByIdent","ident","getMemberForImitating","departmentNumber","profileAtom","atom","idAtom","getProfileAtom","atomWithQuery","queryKey","queryFn","colors","green","white","gray","black","borderColorLight","borderColor","labelColor","green200","green400","green500","green600","red100","red500","red600","orange500","orange600","gray500","gray600","gray700","gray800","gray900","blue300","errorBg","palette","link","foreground","background","navBackgroundColor","backgroundOpaque","primary","secondary","buttonPrimary","creme","CTAhover","SvgAddContact","title","titleId","props","viewBox","fill","xmlns","d","fillRule","clipRule","SvgBookmarkFill","SvgCalendar","SvgCheck","stroke","strokeWidth","strokeLinecap","strokeLinejoin","SvgCheckFill","SvgChevronLeft","SvgChevronRight","SvgChevronDownFill","opacity","SvgClose","SvgContactFill","SvgContactLedger","SvgDelete","SvgDeleteFill","SvgEdit","SvgEditFill","SvgEmailFill","SvgEnvelop","cx","cy","r","SvgFlagFill","SvgFoa","SvgHandshakeFill","SvgHeart","SvgHelp","SvgInfo","SvgKontigenter","SvgLinkFill","SvgLockFill","SvgMaterialer","SvgMedlemsfordele","SvgMessageFill","SvgNote","SvgNotes","SvgOk","SvgOrganiseringsprocent","SvgPersonalInfo","SvgPersonSearch","SvgPhotoFill","SvgPinFill","SvgPlus","SvgPriority","className","SvgQuestion","SvgRatingStar","SvgSearchPerson","SvgSearch","SvgSendFill","SvgSendToMany","SvgSettings","transform","SvgStarYellow","SvgStar","SvgStarFill","SvgSuitcaseFill","SvgTips","useStyles","createUseStyles","top","to","overlayContainer","left","width","height","zIndex","container","backgroundColor","borderRadius","boxShadow","maxWidth","maxHeight","padding","animation","AnimationEffect","pointerEvents","display","flexDirection","alignItems","textAlign","paddingTop","overlay","inset","button","right","margin","boxSizing","textDecoration","fontWeight","transition","cursor","border","circleIcon","iconBGColor","iconBorder","justifyContent","marginRight","defaultProps","description","trigger","defaultOpen","hideClose","icon","Dialog","children","theme","useTheme","classes","onOpenChange","open","documentWidth","document","documentElement","clientWidth","scrollBarWidth","innerWidth","body","style","overflow","paddingRight","classList","add","handleIsOpen","remove","asChild","Close","sizes","XXXS","XXS","XS","S","M","L","XL","XXL","XXXL","XXXXL","text","fontSize","size","weight","fontStyle","lineHeight","suggested","getLineheight","color","align","Typography","tag","Tag","spacing","breakpoints","Desktop","BUTTON_CONTAINER","minHeight","composes","outline","outlineOffset","Button","ref","onClick","disabled","buttonType","ButtonLink","target","isAuthenticatedAtom","chooseImitatorAtom","authRoles","wrap","select","paddingLeft","outlineColor","hasValue","transitionDuration","label","Select","React","forwardRef","options","onChange","defaultValue","placeholder","isOpen","useControlled","hasError","useState","query","setQuery","console","log","useEffect","value","e","hidden","htmlFor","getDepartments","Afdelinger","input","isDatePicker","span","lock","Input","required","useDisabled","setError","autoComplete","LockFill","useFloats","InputNumber","event","newValue","modified","replace","useWindowResize","innerHeight","windowSize","setWindowSize","onResize","resizeHandler","throttle","addEventListener","removeEventListener","row","gridTemplateColumns","wrapper","marginBottom","withHover","Card","url","useHover","showFooter","footer","tabIndex","role","onKeyDown","CardList","CardMobile","header","cellStyles","headerCell","CardHeader","CardHeaderCell","CardContentMobile","flexBasis","containerOpen","overflowHidden","CardCell","cirleIconStyles","iconContainer","borderWidth","withBorder","aspectRatio","styles","circle","customRight","mWidth","image","objectFit","iconWidth","Circle","CircleText","CircleIcon","CircleIcon2","CircleImage","src","alt","marginLeft","SortButton","property","direction","ChevronRight","getInitials","nameString","split","shift","charAt","pop","toUpperCase","FilterWorkplace","FilterWorkGroup","workGroup","FilterPosition","obj","FilterTypeOfRepresentative","FilterTRFor","memberIds","displayName","initialFilter","workplaces","groups","typeOfRepresentative","representing","initialSelectedFilters","initFilter","filter","UdsoegteArbejdssteder","UdsoegteFaggrupper","UdsoegteStillinger","UdsoegteTillidshverv","trust","trfor","updateWorkplaces","selectedItems","selected","isFound","some","indexOf","findIndex","splice","push","updatePositions","updateTypeOfRepresentatives","p","updateTRFor","duty","trFors","t","updateGroups","membersAtom","members","Medlemmer","searchMembers","queryString","getOwnMember","getMemberAfterSearch","updateOwnMember","addMemberToOwnList","addMemberToWorkplace","cancelMemberFromWorkplace","getMemberWorkPlaces","ArbejdsstedTRHvervMedlemLister","compareName","objectA","objectB","sorter","sortByNoteDate","notes","b","updated","getTime","compareAge","compareWorkplaces","toLowerCase","compareStatus","compareNotes","compareIsRead","isRead","compareNumberOfMembersOnWorkplace","compareIsOwnMember","compareDepartments","sortUpdatesBy","updates","sorted","sorted1","sorted2","created","sortByUpdateCreatedDate","compareMemberOnUpdateName","compareProfileOnUpdateName","sortByUpdateUpdatedDate","reverse","sortNotesBy","sortedNotes","n","isNotRead","sortNotesByDateAndIsRead","sortByNoteFavorite","sortBy","sortedMembers","sortByDate","filterByValue","array","includes","searchables","include","o","Object","keys","k","toString","Math","abs","projectId","getLokaliseDataFromApi","base","translations","val","key_name","web","trans","key_id","translation","loader","Spinner","setLokalise","getLokalise","key","lData","L_HTML","replacements","manipulated","identifier","s","dangerouslySetInnerHTML","__html","Lokalise","initialized","setInitialized","initFallback","myData","init","timeout","setTimeout","clearTimeout","getUpdateTypeLabel","getUpdateStatusLabel","filterAtom","filterSelected","sortedAtom","sortLock","searchAtom","searchNoteAtom","searchWorkplaceAtom","searchMembersAtom","showOnlyFavorites","allNotes","allWorkplaces","allUpdates","allUpdatesDone","allUpdatesInProgress","searchPageAtom","filteredItems","workplacesPageAtom","sortedWorkplaces","search","sortWorkplacesBy","updatePageAtom","all","sortedUpdates","updatePageDoneAtom","updatePageInProgressAtom","notePageAtom","filteredAtom","items","favoritesOnly","filtered","trFor","m","mem","filterTRforHelper","element","filterWorkplaces","workgroups","filterWorkgroups","filterPositions","pots","pot","filterTypeOfRepresentative","filterItems","Map","useSortMembersList","useAtom","setSortedAtom","setLock","sortState","setSortState","setSort","useContainerStyles","baseButton","sortPlaceholder","control","FormControl","headerArea","formArea","gap","topArea","borderBottom","headerActions","flexShrink","form","linkButton","textDecorationLine","subArea","messageWrapper","marginTop","selectContainer","selectTrigger","selectContent","hr","Imitator","authProfile","_set","_setDepartmentNumber","_setName","suggestions","_setSuggestions","setOptions","loading","setLoading","_setIsAuthenticated","layout","setAuthRoles","splitted","birthDay","Rolle","getDeps","RolleListe","depResponse","opt","chooseImitator","getWorkplacesAndPositions","userIsActiveInApp","Auth0","isAuthenticated","setIsAuthenticated","setProfile","setChooseImitator","_setLoading","_setRoles","periodicCheckInitiated","setPeriodicCheckInitiated","errorMessage","setErrorMessage","intiatePeriodicCheck","setInterval","validateImitator","profileData","authP","imitatorInStorage","setAlreadyAuthenticated","BrugerMedlemsident","Message","activeProfile","getToken","code","code_verifier","roleList","history","replaceState","pathname","checkUser","URLSearchParams","sessionStorage","signIn","generateCodeChallenge","codeVerifier","encoder","TextEncoder","encode","crypto","subtle","digest","base64Digest","base64encode","randomString","then","challenge","qParams","join","token","id_token","logoutURL","zIndexes","topNavigation","drawer","index","navbarDesktopHeight","Layout","ImitatorNoAccessWarning","show","onClose","SendFill","menu","listStyle","flexWrap","flexGrow","TabItem","showImitatorModal","setShowImitatorModal","preventDefault","TabbedMenu","links","Menu","linksToUse","logout","desktopOnly","inner","brandIcon","containerLogin","profileLink","greenText","containerProfilePicture","logo","helpContainer","NavbarDesktop","_setProfile","Foa","querySelector","scrollTo","getBoundingClientRect","behavior","scrollToFooter","Help","Heart","localProfileData","REDIRECT_TO_FOA_CODES","Interceptor","apiError","setApiError","errorStatusCode","setErrorStatusCode","interceptorId","eject","Example","Badge","star","useOnClick","bottom","Favorite","active","StarFill","RatingStar","setFavorite","removeFavorite","delete","note","noteText","NoteButton","accordion","fontFamily","flex","close","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","paddingBottom","formControl","contentWrapper","Accordion","ChevronDownFill","reversed","isChecked","borderLeft","Checkbox","checked","Checkboxes","handleChange","isSelected","visibility","medium","large","xlarge","Overlay","isShowing","hide","node","useRef","handleClickOutside","current","contains","onKeyPressed","ReactDOM","createPortal","getElementById","accordionWrapper","filterBottom","borderTop","Filter","setSelectedItems","setSelected","setIsOpen","Settings","onUpdateTRFor","pills","pillStyles","pill","closeIcon","Pill","FilterSummary","g","onUpdateGroups","onUpdateTypeOfRepresentatives","onUpdatePositions","onUpdateWorkplaces","tr","onUpdateTrFor","ifAny","args","borderTopColor","borderBottomColor","borderRightColor","searchButton","borderRight","typeSearch","minWidth","SearchField","searchButtonLabel","autoFocus","onSearch","Search","innerContainer","groupLabel","RadioButtons","labels","activeValue","modalButtons","modalCheckbox","GotoMembrsearchModal","showAgain","setShowAgain","hideMemberDialog","setHideMemberDialog","navigate","useNavigate","localData","AddContact","linkArea","SignupMemberModal","HeaderLinks","showGotoMembrsearchModal","headerAreaTop","sendingEmailSettings","dialogButtonsContainer","iconWrapper","searchField","Members","update","setFilter","setSearchAtom","isSendingView","setIsSendingView","isEmailSentView","setIsEmailSentView","AllChosen","setAllChosen","emailType","setEmailType","chosenMembers","setChosenMembers","mailingList","setMailingList","showDialog","setShowDialog","invalidEmailsList","setInvalidEmailsList","setShowOnlyFavorites","setFilterSelected","useSearchParams","searchParams","firstTimeSendingEmail","setfirstTimeSendingEmail","showFirstTimeModal","setHowFirstTimeShowModal","FIRST_TIME_EMAIL_KEY","copy","onClickFavorite","callback","handleSendingEmailView","v","checkValids","useCallback","isValid","invalidEmails","mailingListRaw","validEmail","mailingListString","navigator","platform","userAgent","confirmSendingEmail","SendToMany","Star","RadioButton","currentTarget","String","ml","idx","stopPropagation","toLocaleLowerCase","textarea","resize","count","TextArea","maxCount","setCount","containerRef","autoResize","scrollHeight","rows","cols","onFocus","maxLength","FormInput","register","rules","FormSelect","FormInputNumber","FormTextArea","message","CardWithIconAndMessge","datepickerWrapper","datepicker","DatePickerComponent","maxDate","minDate","disableCalendar","setBirthdate","showPicker","setShowPicker","setHasValue","asText","moment","format","calendarIcon","Calendar","dayPlaceholder","monthPlaceholder","yearPlaceholder","clearIcon","FormMessage","AllMembers","useForm","reset","handleSubmit","setValue","formState","getValues","selectedDate","_setSelectedDate","setResult","setIsValid","inputReference","isDirty","valid","fuldeNavn","foedselsesdato","telefon","afdelingsnummer","searchMembersApi","start","performance","now","duration","focus","setSelectedDate","toDateString","setDepartmentNumber","errors","PersonSearch","onSubmit","subtract","toDate","minLength","validate","trim","getAllUpdates","UpdateBatch","batchId","mapUpdates","BatchId","OpdateringType","RegTid","BehandlingTid","Medlem","Bruger","OpdateringBatchStatus","DrawerContent","DrawerHeaderMemberInfo","DrawerHeaderWorkplaceInfo","FormHeader","getLabel","fieldName","WebkitLineClamp","WebkitBoxOrient","textOverflow","deleteButtons","sidebarArea","oldName","UpdateDetailsSidebarContent","updateDetails","sortingArr","OpdateringFelter","OpdateringFeltType","field","NyVaerdiNavn","GlVaerdiNavn","dateString","nowYear","prototype","call","Number","isNaN","renderDate","FraDato","OphoertDato","OevrigeOplysninger","castAsMember","memberOnUpdate","DetailsOverlay","onHide","isFetching","setIsFetching","setUpdateDetails","place","fetch","response2","UpdateDetails","showUpdatedColumn","boolean","updateList","numberOfUpdate","customIcon","gridTemplateColumnsUpdated","Updates","showDone","setAllUpdates","setMonth","resZero","mapped","OpdateringBatches","fetchData","antal","getMemberNotes","getAllNotes","addNewNote","updateNote","updateNoteIsArchived","deleteNote","Note","referenceId","referenceType","archived","searchable_title","searchable_content","searchable_member","ReferenceId","Indhold","Titel","ReferenceType","NoteId","OpdaterTid","OpretTid","ReferenceNavn","ErLaest","mapNotes","AddNewNote","onUpdated","onClickCancel","hasNotes","dirtyFields","fieldsToEdit","datePlaceholder","EditNote","onCancel","EditMemberNoteButton","onClickCreate","onClickView","firstNoteLabel","Plus","card","actions","titleOpen","whiteSpace","contentOpen","NoteSidebarCard","onClickEdit","onClickDelete","showDelete","setShowDelete","readMore","setReadMore","isMore","setIsMore","contentRef","titleRef","checkLines","lines","getComputedStyle","getPropertyValue","round","parseFloat","wordBreak","prev","DeleteFill","EditFill","createNote","NoteOverviewSidebar","buttons","addNote","noteButton","EditWorkplaceNotes","setNotes","viewState","setViewState","editNote","setEditNote","notesMapped","Noter","numnerOfNotes","noteContent","googleLink","showMembers","contentMobile","WorkplaceCardCell","allMembers","membersForWorkplace","setMembersForWorkplace","setOpen","wpMembersIdents","wpMembers","onClickMapLink","PinFill","Workplaces","setAllWorkplaces","membersData","res","column","titleContainer","rowContainer","CardColumn","titleIcon","titleLabel","hideTitle","mailToLinkIcon","useContent","gridGap","CardColumnContainer","EditMyProfile","KontaktTR","err","Edit","ContactLedger","svgContainer","percentage","PercentCircle","progress","setProgress","useInView","inView","radius","circumference","PI","dash","strokeOpacity","strokeDasharray","end","gmapsContainer","gmapsImage","gmapsButton","GmapsLink","customedGmapsUrl","GmapsImage","dropdownIcon","dropdownItem","dropdownItems","check","WorkplaceDropdown","selectedWorkplace","setSelectedWorkplace","beforContent","afterContent","showHo","getPositionName","getGroupName","SuitcaseFill","ChevronLeft","Check","buildRow","profileHeader","nameContainer","edit","section","editIconWrapper","alignContent","confirmButtons","MyProfile","tors","percentageShowEdit","setPercentageShowEdit","percentageEditValue","setPercentageEditValue","percentageOfMembersCovered","setPercentageOfMembersCovered","calcPercentageCovered","calcPercentageCoveredInEditMode","getDuties","duties","tor","getTypeOfRepresentativeRows","names","tfo","getSuppleantNamesForTR","PersonalInfo","getMembershipInfoRows","noShowMessage","Envelop","getContactInfoRows","CheckFill","getSuppleantForTRRows","ProcentDaekker","EditMemberProfile","setPositions","setWorkplaces","setCustomErrors","selectedPostion","setSelectedPosition","formRef","setWP","wpp","wco","wc","getPositions","positionssss","setAttribute","resetForm","Aendringsdato","Arbejdsstednummer","KontaktPrivat","KontaktArbejde","Info","CancelWorkplace","setAddInfo","work","submitHandler","resolve","AddMemberToWorkplace","onCallSubstitute","setOnCallSubstitute","customErrors","noValidate","BackLink","EditMemberNotes","buildEmailRow","showModal","editButton","MemberProfile","useParams","_setData","backurl","setbackUrl","buildTOR","AddMemberToOwnList","MemberProfileFromSearch","birthYear","getPersonalInfoRows","getWorkInfo","contactLink","Footer","info","setInfo","getInfo","rel","EditNoteFromPage","_setMember","setMember","findMember","noteContentOpen","readIcon","ClampContent","checkNote","showMore","setShowMore","hasOverflow","setHasOverflow","isOverflow","setIsOverflow","useLayoutEffect","clientHeight","ResizeObserver","observe","useIsOverflow","NotePage","setAllNotes","_setSortLock","freezedNotes","setFreezedNotes","onClickSetArchived","Priority","ScrollToTopButton","offset","setOffset","onScroll","pageYOffset","passive","mainContent","viewportHeight","mainContentOffset","offsetTop","mainContentHeight","buttonHidden","buttonAbsoloute","titleContainerGreen","ContainerTip","Organisation","LinkListItem","linkText","linkURL","CollapseItem","buttonText","setShow","transformOrigin","marginInline","Kontigenter","Ok","Medlemsfordele","Materialer","HandshakeFill","gridColumn","Tips","ScrollToTop","useLocation","mobileOnly","RoleBasedRoutes","path","App","useIdleTimer","onIdle","fallback","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","render","StrictMode"],"mappings":"iUAMMA,EACSC,yBADTD,EAESC,uCAFTD,EAGYC,+BAOZC,EAAgBC,IAAMC,OAAO,CAC/BC,QAHYJ,wCAMHK,EAAc,uCAAG,WAAOC,GAAP,mBAAAC,EAAA,6DAC1BL,IAAMM,SAASC,QAAQC,OAAO,oBAAsB,iBAD1B,kBAICR,IAAMS,KAAN,UAChBZ,EADgB,iBAEnBa,IAAGC,UAAU,CACTC,WAAY,gBACZC,aAAchB,EACdiB,UAAWjB,EACXkB,cAAeX,EAASW,iBAVV,OAIhBC,EAJgB,OAchBC,EAAkBD,EAASE,MAC3BC,EAAkBf,GAERgB,aAAeH,EAAKG,aAEpCC,aAAaC,QAAQ,YAAaC,KAAKZ,UAAUQ,IAnB3B,kDAqBtBE,aAAaG,QACbC,OAAOC,SAASC,KAAO,IAtBD,0DAAH,sDA0B3B5B,EAAc6B,aAAaC,QAAQC,IAAnC,+BAAAzB,EAAA,MACI,WAAO0B,GAAP,iBAAA1B,EAAA,6DACU2B,EAAYX,aAAaY,QAAQ,aACjChB,EAAkBM,KAAKW,MAAMF,GAEnCD,EAAOxB,QAAU,CACb4B,cAAc,UAAD,OAAYlB,EAAKG,eALtC,kBAQWW,GARX,2CADJ,uDAWI,SAACK,GACGC,QAAQC,OAAOF,MAIvBrC,EAAc6B,aAAaZ,SAASc,KAChC,SAACd,GACG,OAAOA,KAEX,SAACoB,GACG,GAA8B,MAA1BA,EAAMpB,SAASuB,OAAgB,CAE/B,IAAMP,EAAYX,aAAaY,QAAQ,aACjChB,EAAkBM,KAAKW,MAAMF,GAE/Bf,EAAKG,cAAgBH,EAAKF,cAC1BZ,EAAec,IAEfI,aAAaG,QACbC,OAAOC,SAASC,KAAO,KAG/B,MAAMS,KAId,IAAMI,EAAoBzC,EAE1ByC,EAAkBZ,aAAaC,QAAQC,IAAvC,+BAAAzB,EAAA,MACI,WAAO0B,GAAP,iBAAA1B,EAAA,6DACUoC,EAAUpB,aAAaY,QAAQ,iBAC/BhB,EAAoBM,KAAKW,MAAMO,KAIjCxB,EAAKyB,YACLzB,EAAK0B,YACL1B,EAAK0B,WAAWC,cAEZb,EAAOc,OAEPd,EAAOc,OAAO,qCACV5B,EAAK0B,WAAWC,YAGpBb,EAAOc,OAAS,CACZ,oCACI5B,EAAK0B,WAAWC,cAlBpC,kBAuBWb,GAvBX,2CADJ,uDA0BI,SAACK,GACGC,QAAQC,OAAOF,M,2CCnGVU,EAAb,iDACIC,UAAW,EADf,KAGIC,KAAO,GAHX,KAKIC,UAAY,GALhB,KAOIC,KAAO,EAPX,KASIC,KAAO,GATX,KAWIC,cAAe,EAXnB,KAaIC,YAAc,GAblB,KAeIC,4BAA8B,KAAMC,EAfxC,KAiBIC,4BAjBJ,gDAmBI,SAAatC,GACT,IAAMuC,EAAM,IAAIX,EAahB,OAXAW,EAAIV,SAAW7B,EAAKwC,QACpBD,EAAIR,UAAY/B,EAAKyC,SACrBF,EAAIT,KAAO9B,EAAK0C,KAChBH,EAAIP,KAAOhC,EAAK2C,gBAChBJ,EAAIN,KAAOjC,EAAK4C,KAChBL,EAAIL,aAAelC,EAAK6C,sBACxBN,EAAIJ,YAAcnC,EAAK8C,aACvBP,EAAIH,4BAA8BpC,EAAK+C,0BACvCR,EAAID,uBACAtC,EAAKgD,uBAAyBhD,EAAKiD,0BAAuBZ,EAEvDE,MAjCf,KAqCO,SAASW,EACZlD,GAEA,OAAOA,GAAQA,EAAKmD,KAAI,SAACZ,GAAD,OAASX,EAAqBwB,MAAMb,MC7CzD,IAAMc,EAAb,iDACIC,GAAK,EADT,KAGIC,aAAe,GAHnB,KAKIC,aAAe,GALnB,KAOIC,aAAe,GAPnB,KASIC,aAAe,GATnB,KAWIC,WAAa,GAXjB,8CAaI,SAAa3D,GACT,IAAM4D,EAAU,IAAIP,EAQpB,OANAO,EAAQL,aAAevD,GAAQA,EAAK6D,cACpCD,EAAQJ,aAAexD,GAAQA,EAAK8D,cACpCF,EAAQH,aAAezD,GAAQA,EAAK+D,cACpCH,EAAQF,aAAe1D,GAAQA,EAAKgE,aACpCJ,EAAQD,WAAa3D,GAAQA,EAAKiE,WAE3BL,MAtBf,KCHaM,EAAb,iDACIZ,GAAK,EADT,KAGIxB,KAAO,GAHX,8CAKI,SAAa9B,GACT,IAAMmE,EAAQ,IAAID,EAKlB,OAHAC,EAAMb,GAAKtD,EAAKoE,OAChBD,EAAMrC,KAAO9B,EAAK0C,KAEXyB,MAXf,KCWO,IAAME,EAAb,iDACIf,GAAK,EADT,KAGIxB,KAAO,GAHX,KAKIqC,MAAe,IAAID,EALvB,KAOII,YAPJ,OASIC,QAAoB,GATxB,8CAWI,SAAavE,GACT,IAAMwE,EAAa,IAAIH,EAQvB,OANAG,EAAWlB,GAAKtD,EAAKoE,OACrBI,EAAW1C,KAAO9B,EAAK0C,KACvB8B,EAAWL,MAAQD,EAAMd,MAAMpD,EAAKyE,WACpCD,EAAWF,OAAStE,EAAKoE,OACzBI,EAAWD,QAAUvE,EAAK0E,kBAEnBF,MApBf,KAwBO,SAASG,EAAa3E,GACzB,OAAOA,EAAKmD,KAAI,SAACyB,GAAD,OAAcP,EAASjB,MAAMwB,MC5B1C,IAAMC,EAAb,iDACIvB,GAAK,EADT,KAGIxB,KAAO,GAHX,KAKIgD,MAAQ,GALZ,KAOIC,UAAY,GAPhB,KASIC,cAAgB,GATpB,KAWIC,OAAS,GAXb,KAaIC,WAAa,GAbjB,KAeIC,kBAAmB,EAfvB,KAiBIC,gBAAkB,GAjBtB,KAmBIb,QAAoB,GAnBxB,KAsBIc,uBAA2ChD,EAtB/C,8CAwBI,SAAarC,GACT,IAAMsF,EAAU,IAAIT,EAapB,OAXAS,EAAQR,MAAQ9E,EAAKuF,MACrBD,EAAQH,iBAAmBnF,EAAKwF,qBAChCF,EAAQF,gBAAkBpF,EAAKyF,uBAC/BH,EAAQP,UAAY/E,EAAK0F,QACzBJ,EAAQN,cAAgBhF,EAAK2F,WAC7BL,EAAQL,OAASjF,EAAK4F,MACtBN,EAAQJ,WAAalF,EAAK6F,SAC1BP,EAAQD,kBAAoBrF,EAAK8F,iCAC3BC,EAAU3C,MAAMpD,EAAK8F,uCACrBzD,EAECiD,MAtCf,KA0CO,SAASU,EAAYhG,GACxB,OAAOA,EAAKmD,KAAI,SAACmC,GAAD,OAAaT,EAAQzB,MAAMkC,MCvB/C,IAUaS,EAAb,mDACIjE,KAAO,GADX,KAGImE,oBAAqB,EAHzB,KAKIhE,KAAsB,KAL1B,KAOIiE,QAAyB,KAP7B,KASI5B,OAAS,EATb,KAWI6B,cAAgB,GAXpB,KAaIC,sBAAgD,GAbpD,KAeIxC,aAfJ,OAiBIyC,aAAe,EAjBnB,KAmBIC,eAnBJ,OAqBIhB,aArBJ,OAuBIiB,cAAgB,EAvBpB,KAyBIC,aAAsC,GAzB1C,KA2BIC,gBAAkB,EA3BtB,KA8BIC,gBAAkB,GA9BtB,KAgCIC,mBAAqB,MA2ClB,SAASC,EAAc5G,GAC1B,OAAOA,GAAQA,EAAKmD,KAAI,SAAC0D,GAAD,OAAed,EAAU3C,MAAMyD,MA5E9Cd,EAkCK3C,MAAQ,SAACpD,GACnB,IAAM8G,EAAY,IAAIf,EAoCtB,OAlCAe,EAAUhF,KAAO9B,EAAK0C,MAAQ,GAC9BoE,EAAUlD,QAAU5D,EAAK+G,SAAW1D,EAAQD,MAAMpD,EAAK+G,SACvDD,EAAUb,mBAAqBjG,EAAKgH,sBACpCF,EAAU7E,KAAOjC,EAAKiH,gBACtBH,EAAUxC,OAAStE,EAAKoE,OACxB0C,EAAUZ,QAAUlG,EAAKkH,SACzBJ,EAAUX,cAAgBnG,EAAKmH,gBAC/BL,EAAUT,aAAerG,EAAKoH,SAAW,EACzCN,EAAUV,sBAAwBlD,EAC9BlD,EAAKqH,cAGLrH,EAAKsH,aACLR,EAAUR,UAAY3B,EAAa3E,EAAKsH,aAG5CR,EAAUP,cAAgBvG,EAAKuH,YAAc,EAE7CT,EAAUN,aAAexG,EAAKwH,4BAA8B,GAExDV,EAAUN,cAAgBM,EAAUN,aAAaiB,SACjDX,EAAUL,gBApEK,SAACK,GACxB,IAAIL,EAAkB,GAMtB,OAJAK,EAAUN,aAAakB,SAAQ,SAACC,GAC5BlB,EAAe,sBAAOA,GAAP,YAA2BkB,EAAKC,oBAG5CC,MAAMC,KAAK,IAAIC,IAAItB,IAAkBgB,OA6DRO,CAAmBlB,IAOnDA,EAAUJ,gBAAkBI,EAAUhF,KAEtCgF,EAAUH,mBAAqBG,EAAUlD,QAAV,UACtBkD,EAAUlD,QAAQL,aADI,YACYuD,EAAUlD,QAAQF,aAD9B,YAC8CoD,EAAUlD,QAAQD,YACzF,GAECmD,GC5GR,IAAMmB,EAAb,iDACI3E,GAAK,GADT,KAGIxB,KAAO,GAHX,KAKIoG,sBAAqC7F,EALzC,8CAOI,SAAarC,GACT,IAAMwE,EAAa,IAAIyD,EAQvB,OANAzD,EAAWlB,GAAKtD,EAAKoE,OACrBI,EAAW1C,KAAO9B,EAAK0C,KACvB8B,EAAW0D,iBAAmBlI,EAAKmI,iBAC7B,IAAIC,KAAKpI,EAAKmI,uBACd9F,EAECmC,MAhBf,KCNO,IAAM6D,EAAa,SAACC,GACvB,OAAKA,EAEC,GAAN,OAAU,WAAIA,EAAKC,WAAYC,OAAO,GAAtC,YAA4C,WAAIF,EAAKG,WAAa,GAAID,OACjE,GADL,YAEKF,EAAKI,eAJQ,MAOTC,EAAoB,SAC7BrE,GASA,IAPU,IADVsE,EACS,uDADQ,EAEbC,EAAS,GACTC,EAASxE,EAGPyE,EAAWH,EAEVE,EAAOrB,OAAS,GAEnBoB,EAAM,UAAMA,EAAN,YAAgBC,EAAOE,UAAU,EAAGD,IAC1CD,EAASA,EAAOE,UAAUD,GAG9B,OAAOF,GCyEJ,IAAMI,EAAb,mDACIC,WAA0B,GAD9B,KAGIC,cAA6B,GAHjC,KAKIC,YAAa,EALjB,KAOI7C,cAAgB,EAPpB,KASIlF,OAAS,GATb,KAWIgI,SAAW,EAXf,KAaIC,UAAY,GAbhB,KAeIC,SAAW,GAff,KAiBIC,SAAW,GAjBf,KAmBIC,aAAe,GAnBnB,KAqBIC,cAA6BrH,EArBjC,KAuBIsH,SAA0BtH,EAvB9B,KAyBIiE,UAAwB,GAzB5B,KA2BIF,sBAAgD,GA3BpD,KA6BIwD,aAAc,EA7BlB,KA+BIpF,WAAqC,KA/BzC,KAiCIqF,sBAA0CxH,EAjC9C,KAmCIyH,eAAiB,CACbC,QAAS,GACTC,SAAU,IArClB,KAwCIC,gBAA6B,GAxCjC,KA0CIC,oBAAsC7H,EA1C1C,KA4CI8H,iBAAmC9H,EA5CvC,KA8CI+H,eAAiB,CACb9B,KAAM,GACNxG,KAAM,GACNwC,OAAQ,IAjDhB,KAqDI+F,oBAAsB,GArD1B,KAuDIC,qBAAuB,GAvD3B,KAyDIC,oBAAsB,GAzD1B,KA2DIC,oBAAqCnI,KAyFlC,SAASoI,EAAWzK,GACvB,OAAOA,EAAKmD,KAAI,SAACuH,GAAD,OAAYzB,EAAO7F,MAAMsH,MArJhCzB,EA6DK7F,MAAQ,SAACpD,GAA+B,IAAD,QAC3C0K,EAAS,IAAIzB,EAEnByB,EAAOvB,cAAgBvC,EAAc5G,EAAK2K,eAC1CD,EAAOtB,gBACgB/G,IAAnBrC,EAAK4K,WAA0B5K,EAAK4K,UACxCF,EAAOnE,cAAgBvG,EAAKuH,WAC5BmD,EAAOrJ,OAASrB,EAAK6K,cACrBH,EAAOpE,UAAYtG,EAAKsH,WAAa3C,EAAa3E,EAAKsH,YAAc,GACrEoD,EAAOrB,SAAWrJ,EAAK8K,aACvBJ,EAAOjB,aAAezJ,EAAK+K,cAC3BL,EAAOpB,UAAYtJ,EAAKgL,QACxBN,EAAOnB,SAAWvJ,EAAKiL,UACvBP,EAAOlB,SAAWxJ,EAAKkL,UACvBR,EAAON,eAAe9B,KAAtB,UAA6BtI,EAAKmL,gBAAlC,aAA6B,EAAehD,iBAC5CuC,EAAON,eAAetI,KAAtB,UAA6B9B,EAAKmL,gBAAlC,aAA6B,EAAezI,KAC5CgI,EAAON,eAAe9F,OAAtB,UAA+BtE,EAAKmL,gBAApC,aAA+B,EAAe/G,OAC9CsG,EAAOlG,WAAaxE,EAAKmL,SACnBlD,EAAW7E,MAAMpD,EAAKmL,eACtB9I,EACNqI,EAAOd,iBACmBvH,IAAtBrC,EAAKoL,cAA6BpL,EAAKoL,aAC3CV,EAAOtE,sBAAwBpG,EAAKqH,aAC9BnE,EAAyBlD,EAAKqH,cAC9B,GAINqD,EAAOZ,eAAeC,QAAtB,UAAgC/J,EAAKqL,qBAArC,aAAgC,EAAoBC,QAEpDZ,EAAOf,IAAM3J,EAAKuL,MAElBb,EAAOT,gBAAkBjK,EAAKwL,uBACxBxF,EAAYhG,EAAKwL,wBACjB,GAGNd,EAAOR,eAAiBQ,EAAOT,gBAAgBwB,MAC3C,SAACC,GAAD,MAA6B,WAAtBA,EAAEtG,mBAGbsF,EAAOP,YAAcO,EAAOT,gBAAgBwB,MACxC,SAACC,GAAD,MAA6B,YAAtBA,EAAEtG,mBAGbsF,EAAOhB,SAAW1J,EAAK2L,aACjB,IAAIvD,KAAKpI,EAAK2L,mBACdtJ,EAENqI,EAAOxB,WAhIR,SAA0BwB,GAC7B,IAD0D,EACtDxB,EAA0B,GAD4B,cAInCwB,EAAOpE,WAJ4B,IAI1D,2BAAyC,CAAC,IAAD,EAC/BsF,EAD+B,QACVrH,QADU,cAKdqH,GALc,yBAK1BC,EAL0B,QAM3BC,EAAKpB,EAAOvB,cAAcsC,MAAK,SAACM,GAAD,OAAQA,EAAEzH,UAAYuH,KAC3D3C,EAAU,sBAAOA,GAAe,CAAC4C,KAFrC,2BAAmC,IALE,gCAJiB,8BAe1D,OAAO5C,EAiHiB8C,CAAiBtB,GAKrCA,EAAOb,iBAnJR,SAA8Ba,GACjC,GAAIA,EAAOvB,cAAc1B,OAAS,EAAG,CACjC,IAAMwE,EAAQvB,EAAOvB,cAAcsC,MAC/B,SAACS,GAAD,OAAeA,EAAUjG,sBAG7B,GAAIgG,EACA,OAAOA,EAIf,OAAOvB,EAAOvB,cAAc,GAwIEgD,CAAqBzB,GAM3CA,EAAOb,mBACPa,EAAOJ,qBAAuBI,EAAOb,iBAAiB/H,MAMtD4I,EAAOb,mBACPa,EAAOJ,qBAAuBI,EAAOb,iBAAiB/H,MAG1D4I,EAAOL,oBAAsBK,EAAOlB,SAEpCkB,EAAOF,eAAiBxK,EAAKuL,MAE7B,IAAM7B,EAAW1J,EAAK2L,aAChB,IAAIvD,KAAKpI,EAAK2L,mBACdtJ,EAMN,OAJIqH,IACAgB,EAAOH,oBAAsBlC,EAAWqB,IAGrCgB,GClLR,IAAM0B,EAAb,mDACIlD,WAA0B,GAD9B,KAGIC,cAA6B,GAHjC,KAKIC,YAAa,EALjB,KAOI7C,cAAgB,EAPpB,KASIlF,OAAS,GATb,KAWIK,YAAc,EAXlB,KAaI4H,UAAY,GAbhB,KAeIC,SAAW,GAff,KAiBIC,SAAW,GAjBf,KAmBI6C,MAAkB,GAnBtB,KAqBIC,aAAe,CACXC,UAAW,GACX5C,IAAK,GAvBb,KA0BIS,eAAiB,CACb9B,KAAM,GACNxG,KAAM,GACNwC,OAAQ,IA7BhB,KAgCIwF,eAAiB,CACbC,QAAS,GACTC,SAAU,IAlClB,KAqCIP,aAAe,EArCnB,KAuCI+C,8BAAgC,EAvCpC,KAyCIC,0BAA4B,EAzChC,KA2CInG,UAAwB,GA3C5B,KA6CIF,sBAAgD,GA7CpD,KA+CI6D,gBAA6B,GA/CjC,KAiDIJ,sBAA0CxH,EAjD9C,KAmDI6H,oBAAsC7H,EAnD1C,KAqDI8H,iBAAmC9H,EArDvC,KAuDIqK,eAvDJ,OAyDIC,iBAzDJ,KAAaP,EA2DKhJ,MAAQ,SAACpD,GAAiC,IAAD,IAC7C4M,EAAY,IAAIR,EAmDtB,OAjDAQ,EAAUzD,cAAgBvC,EAAc5G,EAAK2K,eAC7CiC,EAAUxD,WAAapJ,EAAK4K,UAC5BgC,EAAUrG,cAAgBvG,EAAKuH,WAC/BqF,EAAUvL,OAASrB,EAAK6K,cACxB+B,EAAUtG,UAAY3B,EAAa3E,EAAKsH,YACxCsF,EAAUlL,YAAc1B,EAAK8K,aAC7B8B,EAAUtD,UAAYtJ,EAAKgL,QAC3B4B,EAAUrD,SAAWvJ,EAAKiL,UAC1B2B,EAAUpD,SAAWxJ,EAAKkL,UAC1B0B,EAAUnD,aAAezJ,EAAK+K,cAC9B6B,EAAUJ,8BACNxM,EAAK6M,iCACTD,EAAUH,0BACNzM,EAAK8M,+BACTF,EAAUN,aAAa3C,IAAM3J,EAAKuL,MAClCqB,EAAUN,aAAaC,UAAYvM,EAAK2L,aACxCiB,EAAU9C,eAAeC,QAAzB,OAAmC/J,QAAnC,IAAmCA,GAAnC,UAAmCA,EAAMqL,qBAAzC,aAAmC,EAAqBC,QACxDsB,EAAU9C,eAAeE,SAAzB,OAAoChK,QAApC,IAAoCA,GAApC,UAAoCA,EAAMqL,qBAA1C,aAAoC,EAAqB0B,SACzDH,EAAUxC,eAAe9B,KAAOtI,EAAKmL,SAAShD,iBAC9CyE,EAAUxC,eAAetI,KAAO9B,EAAKmL,SAASzI,KAC9CkK,EAAUxC,eAAe9F,OAAStE,EAAKmL,SAAS/G,OAChDwI,EAAUxG,sBAAwBlD,EAC9BlD,EAAKqH,cAETuF,EAAU3C,gBAAkBjK,EAAKwL,uBAC3BxF,EAAYhG,EAAKwL,wBACjB,GAENoB,EAAU1D,WA3GX,SAA0BwB,GAC7B,IAD2D,EACvDxB,EAA0B,GAD6B,cAIpCwB,EAAOpE,WAJ6B,IAI3D,2BAAyC,CAAC,IAAD,EAC/BsF,EAD+B,QACVrH,QADU,cAIdqH,GAJc,yBAI1BC,EAJ0B,QAK3BC,EAAKpB,EAAOvB,cAAcsC,MAAK,SAACM,GAAD,OAAQA,EAAEzH,UAAYuH,KAC3D3C,EAAU,sBAAOA,GAAe,CAAC4C,KAFrC,2BAAmC,IAJE,gCAJkB,8BAc3D,OAAO5C,EA6FoB8C,CAAiBY,GAExCA,EAAU/C,iBAzHX,SAA8Ba,GACjC,GAAIA,EAAOvB,cAAc1B,OAAS,EAAG,CACjC,IAAMwE,EAAQvB,EAAOvB,cAAcsC,MAC/B,SAACS,GAAD,OAAeA,EAAUjG,sBAE7B,GAAIgG,EACA,OAAOA,EAGf,OAAOvB,EAAOxB,WAAW,GAgHQiD,CAAqBS,GAGlDA,EAAU1C,eAAiB0C,EAAU3C,gBAAgBwB,MACjD,SAACC,GAAD,MAA6B,WAAtBA,EAAEtG,mBAGbwH,EAAUzC,YAAcyC,EAAU3C,gBAAgBwB,MAC9C,SAACC,GAAD,MAA6B,YAAtBA,EAAEtG,mBAGbwH,EAAUD,YAAclC,EACpBzK,EAAKgN,yCAGTJ,EAAUF,UAAYjC,EAClBzK,EAAKiN,wCAGFL,GC3If,IAAMM,EAA4B,CAC9BlN,UAAMqC,EACNb,YAAY,EACZC,gBAAYY,GAIV8K,EAAU,uCAAG,4BAAAhO,EAAA,sEACQN,EAAcuO,IAAd,iCADR,cACTtN,EADS,yBAGRA,GAHQ,2CAAH,qDAMVuN,EAAqB,uCAAG,4BAAAlO,EAAA,sEACHN,EAAcuO,IACjC,yCAFsB,cACpBtN,EADoB,yBAKnBA,GALmB,2CAAH,qDAQrBwN,EAAa,uCAAG,WAClBC,GADkB,eAAApO,EAAA,sEAGKN,EAAcU,KAAd,8BAEnBgO,GALc,cAGZzN,EAHY,yBAQXA,GARW,2CAAH,sDAYb0N,EAAiB,uCAAG,WAAOC,GAAP,eAAAtO,EAAA,6DAChBW,EAAWjB,EAAcuO,IAAd,qEACiDK,IAF5C,kBAKf3N,GALe,2CAAH,sDAQjB4N,GAAwB,SAC1BC,EACA7L,GAEA,OAAOjD,EAAcuO,IAAd,6DACmDO,EADnD,8BACyF7L,KAI9F8L,GAAcC,eAAkBX,GAEhCY,GAASD,eAAK,GAEdE,GAAiBC,yBAAc,SAACZ,GAAD,MAAU,CAC3Ca,SAAU,CAAC,YAAab,EAAIU,KAC5BI,QAAQ,WAAD,4BAAE,+BAAA/O,EAAA,2EAAS8O,SAAT,YACkBpP,EAAcuO,IAAd,4BADlB,cACCtN,EADD,OAGGE,EAASF,EAATE,KAHH,kBAIEoM,EAAQhJ,MAAMpD,IAJhB,2CAAF,mDAAC,O,iBC3FCmO,GAAS,CAClBC,MAAO,UACPC,MAAO,sBACPC,KAAM,UACNC,MAAO,gBACPC,iBAAkB,oBAClBC,YAAa,qBACbC,WAAY,qBAEZC,SAAU,0BACVC,SAAU,0BACVC,SAAU,oBACVC,SAAU,kBAEVC,OAAQ,wBACRC,OAAQ,mBACRC,OAAQ,mBAERC,UAAW,oBACXC,UAAW,oBAEXC,QAAS,qBACTC,QAAS,oBACTC,QAAS,qBACTC,QAAS,qBACTC,QAAS,wBAETC,QAAS,UAETvO,MAAO,mBACPwO,QAAS,wBAkBEC,GAfC,CACZxB,UACAyB,KAAM,GACNC,WAAY1B,GAAOC,MACnB0B,WAAY3B,GAAOG,KACnByB,mBAAoB5B,GAAOE,MAC3BI,YAAaN,GAAOC,MACpB4B,iBAAkB,wBAClBC,QAAS,UACTC,UAAW,OACXC,cAAehC,GAAOC,MACtBgC,MAAO,UACPC,SAAU,W,uCCyBCC,OA9Df,YAIyC,IAHrCC,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIM,EAAE,iJACFF,KAAK,YAET,uBACIE,EAAE,6IACFF,KAAK,YAET,uBACIG,SAAS,UACTC,SAAS,UACTF,EAAE,ynBACFF,KAAK,YAET,uBACIG,SAAS,UACTC,SAAS,UACTF,EAAE,4fACFF,KAAK,YAET,uBACIG,SAAS,UACTC,SAAS,UACTF,EAAE,sNACFF,KAAK,YAET,uBACIE,EAAE,6IACFF,KAAK,YAET,uBACIG,SAAS,UACTC,SAAS,UACTF,EAAE,2fACFF,KAAK,iBClBNK,I,uBCAAC,OA9Bf,YAIyC,IAHrCV,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIM,EAAE,4KACFF,KAAK,iB,uBCiBNO,OAjCf,YAIyC,IAHrCX,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIM,EAAE,gEACFM,OAAO,UACPC,YAAa,EACbC,cAAc,QACdC,eAAe,e,uBCahBC,OAhCf,YAIyC,IAHrChB,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIO,SAAS,UACTC,SAAS,UACTF,EAAE,olBACFF,KAAK,iB,uBCeNa,OAjCf,YAIyC,IAHrCjB,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIM,EAAE,sDACFM,OAAO,eACPC,YAAa,EACbC,cAAc,QACdC,eAAe,e,uBCchBG,OAjCf,YAIyC,IAHrClB,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIM,EAAE,sDACFM,OAAO,eACPC,YAAa,EACbC,cAAc,QACdC,eAAe,e,uBCqBhBI,OAxCf,YAIyC,IAHrCnB,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,WACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,qBAAGoB,QAAS,GAAZ,UACI,uBACIb,SAAS,UACTC,SAAS,UACTF,EAAE,8CAEN,uBACIA,EAAE,4CACFM,OAAO,eACPC,YAAa,IACbC,cAAc,QACdC,eAAe,kB,uBCQpBM,OAjCf,YAIyC,IAHrCrB,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIM,EAAE,uDACFM,OAAO,eACPC,YAAa,EACbC,cAAc,QACdC,eAAe,eCYhBO,I,uBCCAC,OAhCf,YAIyC,IAHrCvB,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIO,SAAS,UACTC,SAAS,UACTF,EAAE,+6BACFF,KAAK,sBCaNoB,I,uBCJAC,OA3Bf,YAIyC,IAHrCzB,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBAAMM,EAAE,uK,uBCiBLoB,OA/Bf,YAIyC,IAHrC1B,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIO,SAAS,UACTC,SAAS,UACTF,EAAE,4nB,uBCcHqB,OA/Bf,YAIyC,IAHrC3B,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIO,SAAS,UACTC,SAAS,UACTF,EAAE,wSCWHsB,I,uBCOAC,OAnCf,YAIyC,IAHrC7B,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,yBAAQ8B,GAAI,GAAIC,GAAI,GAAIC,EAAG,GAAI5B,KAAK,YACpC,uBACIE,EAAE,sKACFF,KAAK,iBAET,uBACIE,EAAE,wbACFF,KAAK,sBCMN6B,I,uBCMAC,OAjCf,YAIyC,IAHrClC,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIG,MAAM,6BACNF,QAAQ,aACR,kBAAiBF,GACbC,GAJR,cAMKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACII,KAAK,eACLE,EAAE,m8CAEN,uBACIF,KAAK,eACLE,EAAE,qV,uBCaH6B,OAhCf,YAIyC,IAHrCnC,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIO,SAAS,UACTC,SAAS,UACTF,EAAE,kyBACFF,KAAK,iB,uBCYNgC,OA9Bf,YAIyC,IAHrCpC,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,cACRC,KAAK,OACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIM,EAAE,+fACFF,KAAK,sB,uBCWNiC,OA3Bf,YAIyC,IAHrCrC,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBAAMM,EAAE,sQ,uBCkBLgC,OAhCf,YAIyC,IAHrCtC,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIO,SAAS,UACTC,SAAS,UACTF,EAAE,gSACFF,KAAK,sB,uBCeNmC,OAjCf,YAIyC,IAHrCvC,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRE,MAAM,6BACN,kBAAiBJ,GACbC,GAJR,cAMKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,qBAAGI,KAAK,OAAOG,SAAS,UAAxB,UACI,uBAAMD,EAAE,kBACR,uBACIA,EAAE,wzFACFF,KAAK,UACLG,SAAS,oBCSdiC,I,uBCKAC,OAhCf,YAIyC,IAHrCzC,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIO,SAAS,UACTC,SAAS,UACTF,EAAE,qaACFF,KAAK,iB,uBCeNsC,OAjCf,YAIyC,IAHrC1C,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRE,MAAM,6BACN,kBAAiBJ,GACbC,GAJR,cAMKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,qBAAGI,KAAK,OAAOG,SAAS,UAAxB,UACI,uBAAMD,EAAE,kBACR,uBACIA,EAAE,6sBACFF,KAAK,UACLG,SAAS,oB,uBCedoC,OAjCf,YAIyC,IAHrC3C,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRE,MAAM,6BACN,kBAAiBJ,GACbC,GAJR,cAMKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,qBAAGI,KAAK,OAAOG,SAAS,UAAxB,UACI,uBAAMD,EAAE,kBACR,uBACIA,EAAE,6qBACFF,KAAK,UACLG,SAAS,oBCcdqC,I,uBCJAC,OA5Bf,YAIyC,IAHrC7C,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBAAMM,EAAE,kkBACR,uBAAMA,EAAE,meCsBLwC,I,uBCJAC,OAjCf,YAIyC,IAHrC/C,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRE,MAAM,6BACN,kBAAiBJ,GACbC,GAJR,cAMKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,qBAAGI,KAAK,OAAOG,SAAS,UAAxB,UACI,uBAAMD,EAAE,kBACR,uBACIA,EAAE,s7BACFF,KAAK,UACLG,SAAS,oBCedyC,I,uBCIAC,OArCf,YAIyC,IAHrCjD,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIO,SAAS,UACTC,SAAS,UACTF,EAAE,oRACFF,KAAK,iBAET,uBACIE,EAAE,2EACFM,OAAO,UACPC,YAAa,S,uBCUdqC,OAjCf,YAIyC,IAHrClD,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBAAMM,EAAE,gMACR,yBAAQwB,GAAI,MAAOC,GAAI,MAAOC,EAAG,QACjC,uBACIzB,SAAS,UACTC,SAAS,UACTF,EAAE,0NCYH6C,I,uBCAAC,OA/Bf,YAIyC,IAHrCpD,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIO,SAAS,UACTC,SAAS,UACTF,EAAE,yV,uBCgBH+C,OAjCf,YAIyC,IAHrCrD,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIM,EAAE,qCACFM,OAAO,eACPC,YAAa,EACbC,cAAc,QACdC,eAAe,e,uBCWhBuC,OA9Bf,YAIyC,IAHrCtD,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIE,KAAK,eACLmD,UAAU,4HACV,cAAY,OACZpD,QAAQ,YACR,cAAY,mBACZ,kBAAiBF,GACbC,GAPR,cASKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,yBAAQ8B,GAAI,GAAIC,GAAI,GAAIC,EAAG,IAC3B,uBAAM1B,EAAE,wBCaLkD,I,uBCCAC,OA/Bf,YAIyC,IAHrCzD,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIQ,SAAS,UACTF,EAAE,4OACFM,OAAO,iBCoBR8C,I,uBCVAC,OA3Bf,YAIyC,IAHrC3D,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRE,MAAM,6BACND,KAAK,eACL,kBAAiBH,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBAAMM,EAAE,8X,uBCaLsD,OA3Bf,YAIyC,IAHrC5D,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBAAMM,EAAE,kV,uBCaLuD,OA3Bf,YAIyC,IAHrC7D,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBAAMM,EAAE,we,uBC6BLwD,OA3Cf,YAIyC,IAHrC9D,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIO,SAAS,UACTC,SAAS,UACTF,EAAE,gWAEN,yBACIwB,GAAI,OACJC,GAAI,OACJC,EAAG,KACH+B,UAAU,6BAEd,uBACIxD,SAAS,UACTC,SAAS,UACTF,EAAE,kUAEN,yBAAQ0B,EAAG,KAAM+B,UAAU,yCCExBC,I,uBCAAC,OAhCf,YAIyC,IAHrCjE,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBACIM,EAAE,+HACFM,OAAO,eACPC,YAAa,EACbE,eAAe,e,uBCShBmD,OA3Bf,YAIyC,IAHrClE,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBAAMM,EAAE,sI,uBCkBL6D,OAhCf,YAIyC,IAHrCnE,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN,kBAAiBJ,GACbC,GALR,cAOKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,uBAAMM,EAAE,8NACR,uBACIC,SAAS,UACTC,SAAS,UACTF,EAAE,0gB,uBCeH8D,OAjCf,YAIyC,IAHrCpE,EAGoC,EAHpCA,MACAC,EAEoC,EAFpCA,QACGC,EACiC,mBACpC,OACI,+CACIC,QAAQ,YACRE,MAAM,6BACN,kBAAiBJ,GACbC,GAJR,cAMKF,EAAQ,wBAAOjN,GAAIkN,EAAX,SAAqBD,IAAiB,KAC/C,qBAAGI,KAAK,OAAOG,SAAS,UAAxB,UACI,uBAAMD,EAAE,kBACR,uBACIA,EAAE,yoBACFF,KAAK,UACLG,SAAS,oBCIvB8D,GAAYC,aAAkD,CAEhE,wBAAyB,CACrB/M,KAAM,CACFgN,IAAK,OACLnD,QAAS,GAEboD,GAAI,CACAD,IAAK,MACLnD,QAAS,IAGjB,oBAAqB,CACjB7J,KAAM,CACF6J,QAAS,GAEboD,GAAI,CACApD,QAAS,IAGjBqD,iBAAkB,CACdpQ,SAAU,QACVkQ,IAAK,IACLG,KAAM,IACNC,MAAO,OACPC,OAAQ,SACRC,OAAQ,GAEZC,UAAW,CACPC,gBAAiB,QACjBC,aAAc,MACdC,UAEI,wFACJ5Q,SAAU,QACVkQ,IAAK,MACLG,KAAM,MACNX,UAAW,wBACXY,MAAO,OACPO,SAAU,QACVC,UAAW,OACXC,QAAS,UACTC,UAAW,kBACXC,gBAAiB,YACjBC,cAAe,OACfC,QAAS,OACTC,cAAe,SACfC,WAAY,SACZC,UAAW,SACXd,OAAQ,EACR,aAAc,CACVe,WAAY,SAGpBC,QAAS,CACLd,gBAAiB,qBACjB1Q,SAAU,QACVyR,MAAO,MACPT,UAAW,eAEfU,OAAQ,CACJ1R,SAAU,WACV2R,MAAO,EACPzB,IAAK,EACLiB,QAAS,eACTJ,QAAS,gBACTa,OAAQ,kBACRjB,aAAc,SACdkB,UAAW,aACXC,eAAgB,OAChBC,WAAY,IACZT,UAAW,SACXU,WAAY,WACZ9G,WAAY,cACZ0F,UAAW,EACX,UAAW,CACPqB,OAAQ,WAEZ,qBAAsB,OACtB,kBAAmB,OACnBC,OAAQ,EACR,cAAe,CACXnG,KAAMxC,GAAOiB,UAGrB2H,WAAY,CACRnS,SAAU,WACVkQ,IAAK,QACLI,MAAO,OACPC,OAAQ,OACRI,aAAc,MACdD,gBAAiB,YACb,OADkC,EAAlB0B,aACM7I,GAAOsB,SAEjCqH,OAAQ,YAAqB,IAAlBG,EAAiB,EAAjBA,WACP,MAAM,aAAN,OAAoBA,GAAc9I,GAAOE,QAE7C0H,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBC,YAAa,UAmBfC,GAAe,CACjB7G,MAAO,GACP8G,YAAa,GACbC,QAAS,iDACTC,aAAa,EACbC,WAAW,EACXC,UAAMpV,EACN2U,YAAa7I,GAAOsB,QACpBwH,WAAY9I,GAAOE,OAGjBqJ,GAAgC,SAAC,GAUhC,IATHC,EASE,EATFA,SACApH,EAQE,EARFA,MACA8G,EAOE,EAPFA,YACAC,EAME,EANFA,QACAC,EAKE,EALFA,YACAC,EAIE,EAJFA,UACAC,EAGE,EAHFA,KACAT,EAEE,EAFFA,YACAC,EACE,EADFA,WAkBMW,EAAQC,cACRC,EAAUlD,GAAU,2BACnB,CAAEoC,cAAaC,eADG,IAErBW,WAGJ,OACI,gBAAC,KAAD,CACIL,cAAeA,EACfQ,aAAc,SAACC,GAAD,OAAWA,EAzBZ,WACjB,IAAMC,EAAgBC,SAASC,gBAAgBC,YAEzCC,EADc9X,OAAO+X,WACUL,EAErCC,SAASK,KAAKC,MAAMC,SAAW,SAC/BP,SAASK,KAAKC,MAAME,aAApB,UAAsCL,EAAtC,MACAH,SAASK,KAAKI,UAAUC,IAAI,aAkBQC,IAdpCX,SAASK,KAAKC,MAAMC,SAAW,QAC/BP,SAASK,KAAKC,MAAME,aAAe,aACnCR,SAASK,KAAKI,UAAUG,OAAO,eAU/B,UAII,eAAC,KAAD,CAASC,SAAO,EAAhB,SAAkBzB,IAClB,gBAAC,KAAD,WACI,eAAC,KAAD,CAASxD,UAAWgE,EAAQ1B,UAC5B,eAAC,KAAD,CACItC,UAAS,UAAKgE,EAAQ9C,iBAAb,YACLyC,EAAO,WAAa,IAF5B,SAKI,uBACI3D,UAAS,UAAKgE,EAAQzC,UAAb,YACLoC,EAAO,WAAa,IAF5B,UAKKA,EACG,sBAAK3D,UAAWgE,EAAQf,WAAxB,SAAqCU,IACrC,KACJ,eAAC,KAAD,UAAQlH,IACR,eAAC,KAAD,UAAc8G,IACZG,EAIE,KAHA,eAAC,KAAD,CAAO1D,UAAWgE,EAAQxB,OAA1B,SACI,eAAC0C,GAAD,CAAW9D,MAAM,WAGxByC,cAQzBD,GAAON,aAAeA,G,oEC1MhB6B,GAAQ,CACVC,KAAM,IACNC,IAAK,KACLC,GAAI,EACJC,EAAG,MACHC,EAAG,KACHC,EAAG,IACHC,GAAI,KACJC,IAAK,MACLC,KAAM,IACNC,MAAO,GAQL/E,GAAYC,aAAsD,CACpE+E,KAAM,CACFC,SAAU,YAAe,IAAZC,EAAW,EAAXA,KACT,OAAOA,EAAI,UAAMb,GAAMa,GAAZ,OAAyB,QAExCnD,WAAY,YACR,OADwB,EAAboD,QACM,QAGrBC,UAAW,SACXC,WAAY,gBAAGH,EAAH,EAAGA,KAAH,gBAfE,SAACA,GACnB,IAAMI,EAAmB,IAAPJ,EAClB,OAAOI,EAAY,EAAIA,EAAY,EAaFC,CAAclB,GAAMa,IAArC,QACZM,MAAO,qBAAGA,OAAqBjM,GAAOI,OACtC2H,UAAW,YACP,OADsB,EAAZmE,OACM,WAMtBC,GAAkC,SAAC,GASlC,IAAD,IARFC,IAAKC,OAQH,MARS,IAQT,MAPFV,YAOE,MAPK,OAOL,MANFC,cAME,MANO,SAMP,MALFK,aAKE,MALM,OAKN,EAJFzC,EAIE,EAJFA,SAIE,IAHF8C,eAGE,MAHQ,WAGR,MAFFJ,aAEE,MAFM,OAEN,EADC5J,EACD,mBACImH,EAAQC,cACRC,EAAUlD,GAAU,2BACnB,CAAEkF,OAAMC,SAAQK,QAAOK,UAASJ,UADd,IAErBzC,WAGJ,OACI,eAAC4C,EAAD,2BAAS/J,GAAT,IAAgBqD,UAAWgE,EAAQ8B,KAAnC,SACKjC,M,SC9EE+C,GAJK,CAChBC,QAAS,KCqBPC,GAAmB,SAEnBhG,GAAYC,cAAgB,SAAC+C,GAAD,iCAC7BgD,GAAmB,CAChB7E,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBvB,QAAS,eACTa,OAAQ,kBACRjB,aAAc,MACdkB,UAAW,aACXC,eAAgB,OAChBC,WAAY,IACZT,UAAW,SACXU,WAAY,WACZpB,UAAW,EACX,UAAW,CACPqB,OAAQ,WAEZ,qBAAsB,OACtB,kBAAmB,OACnBC,OAAQ,IAnBkB,sCAuB1B+C,SAAU,UAvBgB,6BAwBHa,GAAYC,QAxBT,OAwBwB,CAC9C,IAAK,CACDd,SAAU,aA1BQ,qCAgC1BA,SAAU,SACVgB,UAAW,QAjCe,6BAkCHH,GAAYC,QAlCT,OAkCwB,CAC9C,IAAK,CACDd,SAAU,WApCQ,sCAyC1BA,SAAU,UAzCgB,6BA0CHa,GAAYC,QA1CT,OA0CwB,CAC9C,IAAK,CACDd,SAAU,eA5CQ,wBAiDtB,CACJiB,SAAS,IAAD,OAAMF,IACdtF,gBAAiBsC,EAAMzJ,OAAOE,MAC9B+L,MAAOxC,EAAMzJ,OAAOI,MACpBoH,QAAS,EACTa,OAAQ,EACRrB,OAAQ,OACRD,MAAO,OACPa,QAAS,UAzDiB,0BA4DrB,iBAAO,CACZ+E,SAAS,IAAD,OAAMF,IACdtF,gBAAiBsC,EAAMzJ,OAAOU,SAC9BuL,MAAOxC,EAAMzJ,OAAOE,MACpB,UAAW,CACPsC,KAAMiH,EAAMzJ,OAAOE,OAEvB,UAAW,CACPiH,gBAAiBsC,EAAMzJ,OAAOW,UAElC,oBAAqB,CACjBiM,QAAQ,aAAD,OAAenD,EAAMzJ,OAAOE,OACnC2M,cAAe,QAEnB,aAAc,CACVrJ,QAAS,QA3Ea,2BA8EnB,CACPmJ,SAAS,IAAD,OAAMF,IACdtF,gBAAiBsC,EAAMzJ,OAAOE,MAC9B+L,MAAOxC,EAAMzJ,OAAOI,MACpBuI,OAAQ,oBACR,UAAW,CACPnG,KAAMiH,EAAMzJ,OAAOU,UAEvB,UAAW,CACPyG,gBAAiBsC,EAAMzJ,OAAOW,SAC9BsL,MAAOxC,EAAMzJ,OAAOE,MACpB,cAAe,CACXsC,KAAMiH,EAAMzJ,OAAOE,QAG3B,WAAY,CACR0M,QAAQ,aAAD,OAAenD,EAAMzJ,OAAOW,UACnCwG,gBAAiBsC,EAAMzJ,OAAOE,MAC9B2M,cAAe,OACfZ,MAAOxC,EAAMzJ,OAAOI,OAExB,aAAc,CACVoD,QAAS,MApGa,wBAuGtB,CACJmJ,SAAS,IAAD,OAAMF,IACdtF,gBAAiBsC,EAAMzJ,OAAOa,OAC9BoL,MAAOxC,EAAMzJ,OAAOE,MACpByI,OAAQ,oBACR,UAAW,CACPxB,gBAAiBsC,EAAMzJ,OAAOc,OAC9BmL,MAAOxC,EAAMzJ,OAAOE,OAExB,WAAY,CACR0M,QAAQ,aAAD,OAAenD,EAAMzJ,OAAOc,QACnCqG,gBAAiBsC,EAAMzJ,OAAOE,MAC9B2M,cAAe,OACfZ,MAAOxC,EAAMzJ,OAAOI,OAExB,aAAc,CACVoD,QAAS,MAvHa,yBA0HrB,CACLmJ,SAAS,IAAD,OAAMF,IACdtF,gBAAiBsC,EAAMzJ,OAAOe,UAC9BkL,MAAOxC,EAAMzJ,OAAOE,MACpB,UAAW,CACPiH,gBAAiBsC,EAAMzJ,OAAOgB,UAC9BiL,MAAOxC,EAAMzJ,OAAOE,OAExB,oBAAqB,CACjB0M,QAAQ,aAAD,OAAenD,EAAMzJ,OAAOgB,WACnCmG,gBAAiBsC,EAAMzJ,OAAOE,MAC9B2M,cAAe,OACfZ,MAAOxC,EAAMzJ,OAAOI,OAExB,aAAc,CACVoD,QAAS,MAzIa,sBA4IxB,CACFoE,QAAS,OACTC,cAAe,SACfkB,eAAgB,SAChBC,YAAa,QACb,QAAS,CACLjC,MAAO,YAlJe,KAuJ5B+F,GAA0B,SAAC,EAY7BC,GACE,IAXEvD,EAWH,EAXGA,SACAwD,EAUH,EAVGA,QAUH,IATGlZ,YASH,MATU,UASV,MARG6X,YAQH,MARU,SAQV,MAPGsB,gBAOH,SANG3D,EAMH,EANGA,KAMH,IALG4D,kBAKH,MALgB,SAKhB,EAJG7C,EAIH,EAJGA,MAKEV,EAAUlD,KAEhB,OACI,0BACId,UAAS,UAAKgE,EAAQ7V,GAAb,YAAsB6V,EAAQgC,IACvCqB,QAASA,EACTlZ,KAAqB,WAAfoZ,EAA0B,SAAW,SAC3CD,SAAUA,EACV5C,MAAOA,EALX,UAOKf,GAAQ,uBAAM3D,UAAWgE,EAAQL,KAAzB,SAAgCA,IACxCE,MAKP2D,GAAwC,SAAC,EAG3CJ,GACE,IAHAvD,EAGD,EAHCA,SAGD,IAHWmC,YAGX,MAHkB,SAGlB,EAH4BrC,EAG5B,EAH4BA,KAAMxV,EAGlC,EAHkCA,KAAMxB,EAGxC,EAHwCA,KAAM8a,EAG9C,EAH8CA,OAIzCzD,EAAUlD,KAEhB,OACI,qBACId,UAAS,UAAKgE,EAAQ7V,GAAb,YAAsB6V,EAAQgC,IACvCrZ,KAAMA,EACN8a,OAAQA,EAHZ,UAKK9D,GAAQ,uBAAM3D,UAAWgE,EAAQL,KAAzB,SAAgCA,IACxCE,MCzNP6D,GAAsB3N,gBAAc,GACpC4N,GAAqB5N,gBAAc,GACnC6N,GAAY7N,eAAe,I,kGCwB3B+G,GAAYC,aAAgB,CAC9B8G,KAAM,CACF/W,SAAU,WACVuQ,OAAQ,WACRG,gBAAiBnH,GAAOE,MACxByI,OAAO,aAAD,OAAe3I,GAAOM,aAC5B8G,aAAc,MACdkD,SAAU,UAEdmD,OAAQ,CACJhX,SAAU,WACVuQ,OAAQ,WACR2B,OAAQ,EACR5B,MAAO,OACP2E,SAAU,OACV1D,WAAY,SACZ0F,YAAa,QACbnD,aAAc,OACd7B,OAAQ,UACRuD,MAAOjM,GAAOI,MAEd,kBAAmB,CACfwM,QAAS,QAEb,+CAAgD,CAC5CX,MAAOjM,GAAOU,SACdgL,SAAU,UACV1E,OAAQ,OACRD,MAAO,OACPI,gBAAiB,eAErB,gDAAiD,CAC7C7G,YAAaN,GAAOU,SACpBiN,aAAc3N,GAAOU,SACrBsH,WAAY,QAEhB,iDAAkD,CAC9C1H,YAAaN,GAAOU,SACpBiN,aAAc3N,GAAOU,SACrBsH,WAAY,QAEhB,qBAAsB,CAClBiE,MAAOjM,GAAOO,WACd,WAAY,CACR0L,MAAOjM,GAAOO,cAI1BqN,SAAU,CACN3B,MAAOjM,GAAOU,SACdgL,SAAU,UACV1E,OAAQ,OACRD,MAAO,OAEP8G,mBAAoB,QACpBlG,cAAe,OACflR,SAAU,WACVkQ,IAAK,IACLG,KAAM,IACNG,OAAQ,EACRe,WAAY,UACZ0F,YAAa,SACbnD,aAAc,OACd7B,OAAQ,WAEZoF,MAAO,CACHD,mBAAoB,QACpBlG,cAAe,OACflR,SAAU,WACVkQ,IAAK,IACLG,KAAM,IACNC,MAAO,oBACPC,OAAQ,OACRC,OAAQ,EACRyE,SAAU,OACV1D,WAAY,SACZ0F,YAAa,UACbnD,aAAc,OACd7B,OAAQ,UACRvB,gBAAiBnH,GAAOE,MACxB+L,MAAOjM,GAAOO,cAIhBwN,GAASC,IAAMC,YACjB,WAYIlB,GACE,IAXEmB,EAWH,EAXGA,QACAC,EAUH,EAVGA,SACAC,EASH,EATGA,aACAza,EAQH,EARGA,KACA0a,EAOH,EAPGA,YACAC,EAMH,EANGA,OACAC,EAKH,EALGA,cACAC,EAIH,EAJGA,SACGlM,EAGN,mBACKqH,EAAUlD,KAChB,EAA0BgI,mBACtBL,GADJ,mBAAOM,EAAP,KAAcC,EAAd,KAkBA,OAdAC,QAAQC,IAAIlb,EAAM,QAElBmb,qBAAU,WACFP,GACAI,EAASrM,EAAMyM,SAEpB,CAACzM,EAAMyM,MAAOR,IAEjBO,qBAAU,gBACS5a,IAAXoa,GAAyBA,GACzBK,EAAS,MAEd,CAACL,IAGA,uBACI3I,UAAWgE,EAAQ6D,KACnBnD,MAAK,eACE,CACC1B,OAAO,aAAD,OACF6F,EAAWxO,GAAOjN,MAAQiN,GAAOM,aAErC6G,gBAAiBqH,EACXxO,GAAOuB,QACPvB,GAAOE,QATzB,UAaI,kDACI6M,IAAKA,EACLpZ,KAAMA,EACNwB,GAAIxB,GACA2O,GAJR,IAKIqD,UAAWgE,EAAQ8D,OACnBW,aAAcA,EACdD,SAAU,SAACa,GACPJ,QAAQC,IAAIG,EAAE5B,OAAO2B,MAAO,kBAC5BJ,EAASK,EAAE5B,OAAO2B,OAClBZ,EAASa,IAVjB,UAaMZ,EAIE,KAHA,yBAAQW,MAAM,GAAGE,QAAM,EAAvB,SACK,MAGRf,EAAQlZ,KAAI,gBAAG8Y,EAAH,EAAGA,MAAOiB,EAAV,EAAUA,MAAV,OACT,yBAAQA,MAAOA,EAAf,SAAuBjB,WAI/B,wBACIzD,MAAK,eACE,CACClD,gBAAiBqH,EACX,cACAxO,GAAOE,QAGrBgP,QAASvb,EACTgS,UACI+I,GAAmB,KAAVA,EAAe/E,EAAQiE,SAAWjE,EAAQmE,MAV3D,SAaKO,GAAe1a,UC/L9Bwb,GAAc,uCAAG,4BAAAne,EAAA,sEACIN,EAAcuO,IAAd,+BADJ,cACbtN,EADa,yBAGGA,EAASE,KAAKud,W/DmBxBpa,KAAI,SAACqB,GAAD,OAAgByD,EAAW7E,MAAMoB,O+DtB9B,2CAAH,qD,wIC6BdoQ,GAAYC,aAAkD,CAChEQ,UAAW,CACPzQ,SAAU,WACVmR,QAAS,SAEbkG,MAAO,CACHrX,SAAU,WACVsQ,MAAO,OACP,wBAAyB,CACrBkF,MAAOjM,GAAOU,SACdyF,UAAW,oBACXuF,SAAU,WAEdO,MAAOjM,GAAOO,YAElB8O,MAAO,CACH3C,UAAW,OAGXtF,aAAc,MACdL,MAAO,OACP2G,YAAa,UAGb1F,WAAY,qBAAGsH,aAAmC,OAAS,KAE3D,WAAY,CACRnJ,UAAW,qBAAGmJ,aACK,oBAAsB,QACzCrD,MAAO,qBAAGqD,aACStP,GAAOU,SAAWV,GAAOO,YAC5CmL,SAAU,qBAAG4D,aAAmC,UAAY,SAGhE,iBAAkB,CACd9L,QAAS,KAEbyI,MAAOjM,GAAOI,MACd,mCAAoC,CAChC6L,MAAOjM,GAAOU,SACdyF,UAAW,oBACXuF,SAAU,WAEd,4BAA6B,CACzB1D,WAAY,QAGhB,UAAW,CACP1H,YAAa,qBAAGkO,SACDxO,GAAOjN,MAAQiN,GAAOU,UACrCiN,aAAc,qBAAGa,SACFxO,GAAOjN,MAAQiN,GAAOU,UACrCsH,WAAY,QAEhB,WAAY,CACR1H,YAAaN,GAAOU,SACpBiN,aAAc3N,GAAOU,SACrBsH,WAAY,QAEhB,aAAc,CACVb,gBAAiB,UACjB8E,MAAOjM,GAAOI,MACd,WAAY,CACR6L,MAAOjM,GAAOI,SAI1BmP,KAAM,CACF9Y,SAAU,WACVkQ,IAAK,IACLG,KAAM,SACN4E,SAAU,OACVmC,mBAAoB,QACpB5B,MAAOjM,GAAOO,YAElBiP,KAAM,CACF/Y,SAAU,WACVkQ,IAAK,IACLyB,MAAO,OACP5E,QAAS,QAIJiM,GAAwBxB,sBACjC,WAUIlB,GACE,IATEe,EASH,EATGA,MACA4B,EAQH,EARGA,SACA5b,EAOH,EAPGA,KACA6b,EAMH,EANGA,YACAnB,EAKH,EALGA,SACAc,EAIH,EAJGA,aACGhN,EAGN,mBACD,EAAgBmM,mBAAiB,IAA1BC,EAAP,oBACMjF,EAAQC,cACd,EAA0B+E,oBAAS,GAAnC,mBAAO1b,EAAP,KAAc6c,EAAd,KACMjG,EAAUlD,GAAU,2BACnB,CAAEiI,QAAOF,SAAUzb,EAAOuc,iBADR,IAErB7F,WAOJ,OAJAqF,qBAAU,WACNc,EAASpB,KACV,CAACA,IAGA,sBAAK7I,UAAWgE,EAAQzC,UAAxB,SACI,yBAAOgI,QAASpB,EAAOnI,UAAWgE,EAAQmE,MAA1C,UACI,gDACIha,KAAMA,GAAQ,OACdqB,GAAI2Y,EACJO,YAAaP,EACbnI,UAAWgE,EAAQ0F,OACf/M,GALR,IAMIyK,IAAKA,EACL2C,SAAUA,EACVG,aAAa,MACbxF,MAAK,2BACE/H,EAAM+H,OACN,CAIC1B,OAAO,aAAD,OACF6F,EAAWxO,GAAOjN,MAAQiN,GAAOM,kBAKjD,wBAAMqF,UAAWgE,EAAQ4F,KAAzB,UACKzB,EADL,IACa4B,GAAY,0CAExBpN,EAAM2K,UAAY0C,EACf,uBAAMhK,UAAWgE,EAAQ6F,KAAzB,SACI,eAACM,GAAD,CAAU/I,MAAM,OAAOvE,KAAMxC,GAAOqB,YAExC,aAOxBoO,GAAMxG,aAAe,CACjB0G,aAAa,EACbI,WAAW,EACXvB,UAAU,EACVc,cAAc,GAGX,IAAMU,GAA8B/B,sBAGzC,WAAqElB,GAAS,IAA3Ee,EAA0E,EAA1EA,MAAO4B,EAAmE,EAAnEA,SAAU5b,EAAyD,EAAzDA,KAAMqa,EAAmD,EAAnDA,SAAUK,EAAyC,EAAzCA,SAAUuB,EAA+B,EAA/BA,UAAczN,EAAiB,mBAC3E,EAAgBmM,mBAAiB,IAA1BC,EAAP,oBACMjF,EAAQC,cACd,EAA0B+E,oBAAS,GAAnC,mBAAO1b,EAAP,KAAc6c,EAAd,KACMjG,EAAUlD,GAAU,2BAAK,CAAEiI,QAAOF,SAAUzb,IAAzB,IAAkC0W,WAE3DqF,qBAAU,WACNc,EAASpB,KACV,CAACA,IAqBJ,OACI,sBAAK7I,UAAWgE,EAAQzC,UAAxB,SACI,yBAAOgI,QAASpB,EAAOnI,UAAWgE,EAAQmE,MAA1C,UACI,gDACIha,KAAMA,GAAQ,OACdqB,GAAI2Y,EACJO,YAAaP,EACbnI,UAAWgE,EAAQ0F,OACf/M,GALR,IAMIyK,IAAKA,EACL2C,SAAUA,EACVvB,SA9BK,SAAC8B,GAClB,IAAIC,EAAWD,EAAM7C,OAAO2B,MACtBoB,EAAWF,EACbF,GAEAG,GADAA,EAAWA,EAASE,QAAQ,YAAa,KAEpCA,QAAQ,KAAM,KACdA,QAAQ,MAAO,IACfA,QAAQ,IAAK,KAClBD,EAAS/C,OAAO2B,MAAQmB,GAExBC,EAAS/C,OAAO2B,MAAQmB,EAASE,QAAQ,UAAW,IAGpDjC,GACAA,EAASgC,IAgBDN,aAAa,MACbxF,MAAK,2BACE/H,EAAM+H,OACN,CAEC1B,OAAO,aAAD,OACF6F,EAAWxO,GAAOjN,MAAQiN,GAAOM,kBAKjD,wBAAMqF,UAAWgE,EAAQ4F,KAAzB,UACKzB,EADL,IACa4B,GAAY,0CAExBpN,EAAM2K,SACH,uBAAMtH,UAAWgE,EAAQ6F,KAAzB,SACI,eAACM,GAAD,CAAU/I,MAAM,OAAOvE,KAAMxC,GAAOqB,YAExC,aAMpB2O,GAAY/G,aAAe,CACvB8G,WAAW,GAGAN,U,UC3PTY,GAAkB,WACpB,MAAoC5B,mBAAqB,CACrD1H,MAAyB,qBAAX3U,OAAyB,EAAIA,OAAO+X,WAClDnD,OAA0B,qBAAX5U,OAAyB,EAAIA,OAAOke,cAFvD,mBAAOC,EAAP,KAAmBC,EAAnB,KAsBA,OAjBA1B,qBAAU,WACN,IAAM2B,EAAW,WACbD,EAAc,CACVzJ,MAAO3U,OAAO+X,WACdnD,OAAQ5U,OAAOke,eAIjBI,EAAgBC,aAAS,IAAKF,GAMpC,OAJAre,OAAOwe,iBAAiB,SAAUF,GAElCD,IAEO,kBAAMre,OAAOye,oBAAoB,SAAUH,MACnD,IAEIH,GCLL9J,GAAYC,cAAkD,iBAAO,CACvEoK,IAAK,YAAyC,IAAtCC,EAAqC,EAArCA,oBAAqBrE,EAAgB,EAAhBA,UACzB,MAAO,CACHjW,SAAU,WACV0Q,gBAAiBnH,GAAOE,MACxB6G,MAAO,OACPkF,MAAO,QACPrE,QAAS,OACTmJ,sBACArE,UAAWA,GAAa,SAGhCsE,QAAS,CACL5J,aAAc,MACd6J,aAAc,MACd9J,gBAAiBnH,GAAOE,MACxB0H,QAAS,OACTC,cAAe,SACfyC,SAAU,UAEd4G,UAAW,CACPzI,WAAY,eACZ,UAAW,CACPC,OAAQ,UACRvB,gBAAiB,gBAKvBgK,GAAwB,SAAC,GASxB,IAAD,IARFJ,2BAQE,MARoB,uCAQpB,EAPFK,EAOE,EAPFA,IACA1E,EAME,EANFA,UACAlD,EAKE,EALFA,SACAwD,EAIE,EAJFA,QACAqE,EAGE,EAHFA,SACAC,EAEE,EAFFA,WACAC,EACE,EADFA,OAEMhB,EAAaF,KACb5G,EAAQC,cACRC,EAAUlD,GAAU,2BAAK,CAAEsK,sBAAqBrE,cAA7B,IAA0CjD,WAEnE,OAAI8G,EAAWxJ,OAASwF,GAAYC,QAC5B4E,EAEI,sBAAKzL,UAAWgE,EAAQqH,QAAxB,SACI,eAAC,IAAD,CACIQ,SAAU,EACV7L,UAAS,UAAKgE,EAAQmH,IAAb,YAAoBnH,EAAQuH,WACrCtK,GAAIwK,EAHR,SAKK5H,MAOb,uBAAK7D,UAAWgE,EAAQqH,QAAxB,UACI,sBACIS,KAAK,SACLD,UAAW,EACX7L,UAAS,UAAKgE,EAAQmH,IAAb,YACLO,EAAW1H,EAAQuH,UAAY,IAEnCQ,UAAW1E,EACXA,QAASA,EACT3C,MAAO,CAAE3B,OAAQsE,EAAU,UAAY,WAR3C,SAUKxD,IAEJ+H,GAAUD,EAAa,+BAAMC,IAAgB,QAKnD,MAGXJ,GAAKlI,aAAe,CAChBoI,UAAU,GCxGd,IAAM5K,GAAYC,cAAgB,iBAAO,CACrCQ,UAAW,CACPH,MAAO,YAIT4K,GAAqB,SAAC,GAAkB,IAAhBnI,EAAe,EAAfA,SACpBG,EAAUlD,KAEhB,OAAO,sBAAKd,UAAWgE,EAAQzC,UAAxB,SAAoCsC,KCOzC/C,GAAYC,cAAkD,iBAAO,CACvEoK,IAAK,YAA8B,IAA3BC,EAA0B,EAA1BA,oBACJ,MAAO,CACHta,SAAU,WACV0Q,gBAAiBnH,GAAOE,MACxB6G,MAAO,OACPkF,MAAO,QACPgF,aAAc,OACdrJ,QAAS,OACTmJ,sBACAvJ,QAAS,aAKfoK,GAAwC,SAAC,GAKxC,IAJHR,EAIE,EAJFA,IACAL,EAGE,EAHFA,oBACA/D,EAEE,EAFFA,QACAxD,EACE,EADFA,SAEMC,EAAQC,cACRC,EAAUlD,GAAU,2BAAK,CAAEsK,wBAAR,IAA+BtH,WAGxD,OAFmB4G,KAEJtJ,MAAQwF,GAAYC,QAC3B4E,EAEI,eAAC,IAAD,CAAMI,SAAU,EAAG7L,UAAS,UAAKgE,EAAQmH,KAAOlK,GAAIwK,EAApD,SACK5H,IAMT,sBACI7D,UAAWgE,EAAQmH,IACnB9D,QAASA,GAAWA,EACpByE,KAAK,SACLD,UAAW,EACXE,UAAW1E,EALf,SAOKxD,IAKN,MAGXoI,GAAW3I,aAAe,CACtB8H,oBAAqB,WC1DzB,IAAMtK,GAAYC,aAAkD,CAChEmL,OAAQ,CACJjK,QAAS,OACTmJ,oBAAqB,YACjB,OAD8C,EAA1BA,wBAM1Be,GAAapL,aAAgB,CAC/BqL,WAAY,CACRvK,QAAS,gBAIXwK,GAA8B,SAAC,GAG9B,IAFHxI,EAEE,EAFFA,SAEE,IADFuH,2BACE,MADoB,uCACpB,EACItH,EAAQC,cACRC,EAAUlD,GAAU,2BAAK,CAAEsK,wBAAR,IAA+BtH,WAExD,OAAO,sBAAK9D,UAAWgE,EAAQkI,OAAxB,SAAiCrI,KAGtCyI,GAA2B,SAAC,GAAkB,IAAhBzI,EAAe,EAAfA,SAC1B+G,EAAaF,KACb1G,EAAUmI,KAEhB,OAAIvB,EAAWxJ,OAASwF,GAAYC,QACzB,sBAAK7G,UAAWgE,EAAQoI,WAAxB,SAAqCvI,IAGzC,MCzCL/C,GAAYC,cAAgB,iBAAO,CACrCoK,IAAK,CACD3J,gBAAiBnH,GAAOE,MACxB6G,MAAO,OACPkF,MAAO,QACPrE,QAAS,OACTC,cAAe,cAIjBqK,GAA8B,SAAC,GAAkB,IAAhB1I,EAAe,EAAfA,SAC7BG,EAAUlD,KAEhB,OAAO,sBAAKd,UAAWgE,EAAQmH,IAAxB,SAA8BtH,KCdnC/C,GAAYC,cAAgB,iBAAO,CACrCQ,UAAW,CACPzQ,SAAU,WACVmR,QAAS,OACTC,cAAe,SACfkB,eAAgB,SAChBoJ,UAAW,OACX3K,QAAS,cAEb4K,cAAe,CACX3b,SAAU,WACVmR,QAAS,OACTC,cAAe,SACfkB,eAAgB,QAChBoJ,UAAW,OACX3K,QAAS,cAEb6K,eAAgB,CACZ/H,SAAU,cAUZgI,GAAgC,SAAC,GAKhC,IAJHD,EAIE,EAJFA,eACA/D,EAGE,EAHFA,OACAtB,EAEE,EAFFA,QACAxD,EACE,EADFA,SAEMG,EAAUlD,KAEhB,OACI,sBACId,UAAS,UAAK2I,EAAS3E,EAAQyI,cAAgBzI,EAAQzC,UAA9C,YACLmL,EAAiB1I,EAAQ0I,eAAiB,IAE9CZ,KAAK,SACLzE,QAASA,GAAWA,EACpB0E,UAAW1E,GAAWA,EACtBwE,UAAW,EAPf,SASKhI,KAKb8I,GAASrJ,aAAe,CACpBoJ,gBAAgB,GChCb,IAAME,GAAkB7L,aAI7B,CACE8L,cAAe,CACX/b,SAAU,WACVsQ,MAAO,qBAAGA,OACVC,OAAQ,qBAAGD,OACXI,gBAAiB,YACb,OADsC,EAAtBA,iBACUnH,GAAOsB,SAErCqH,OAAQ,YAAkC,IAA/B8J,EAA8B,EAA9BA,YACP,OADqC,EAAjBC,WACH,UAAMD,EAAN,kBAA2BzS,GAAOE,OAAU,QAEjE0H,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChB3B,aAAc,MACdkD,SAAU,SACVqI,YAAa,SAIRC,GAASlM,aAAkD,CACpEmM,OAAQ,CACJpc,SAAU,WACVsQ,MAAO,OACPK,aAAc,MACdkD,SAAU,SACVqI,YAAa,MACb3J,YAAa,YACT,OAD8B,EAAlB8J,aACU,QAE1BxL,SAAU,qBAAGyL,QAAuB,YAExCtH,KAAM,CACFtE,gBAAiBnH,GAAOsB,QACxB0F,OAAQ,OACRD,MAAO,OACPK,aAAc,MACdQ,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChB2C,SAAU,qBAAGA,UAA2B,YACxCO,MAAOjM,GAAOU,SACd8H,WAAY,KAEhBwK,MAAO,CACH7L,gBAAiBnH,GAAOI,MACxB4G,OAAQ,OACRD,MAAO,OACP,QAAS,CACLkM,UAAW,QACXlM,MAAO,SAGfyL,cAAe,CACXpL,aAAc,MACdJ,OAAQ,OACRD,MAAO,OACPa,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBkD,MAAOjM,GAAOU,SACdiI,OAAO,aAAD,OAAe3I,GAAOE,OAC5BiH,gBAAiB,YACb,OADsC,EAAtBA,iBACUnH,GAAOsB,SAErChB,YAAa,YACT,OAD8B,EAAlBA,aACUN,GAAOE,OAEjCuS,YAAa,YACT,OAD8B,EAAlBA,aACU,OAG1B,UAAW,CACP1L,MAAO,qBAAGmM,WAA6B,WCrE7CC,GAAgC,SAAC,GAIhC,IAHH3J,EAGE,EAHFA,SAGE,IAFFuJ,cAEE,MAFO,UAEP,MADF/J,mBACE,MADY,OACZ,EACIS,EAAQC,cACRC,EAAUiJ,GAAO,2BAChB,CAAEG,SAAQD,YAAa9J,IADR,IAElBS,WAGJ,OAAO,sBAAK9D,UAAWgE,EAAQkJ,OAAxB,SAAiCrJ,KAGtC4J,GAAoC,SAAC,GAGpC,IAFH5J,EAEE,EAFFA,SAEE,IADFkC,gBACE,MADS,WACT,EACIjC,EAAQC,cACRC,EAAUiJ,GAAO,2BAChB,CAAElH,aADa,IAElBjC,WAGJ,OAAO,sBAAK9D,UAAWgE,EAAQ8B,KAAxB,SAA+BjC,KAGpC6J,GAAwC,SAAC,GAMxC,IALH7J,EAKE,EALFA,SACA0J,EAIE,EAJFA,UACA/L,EAGE,EAHFA,gBACA7G,EAEE,EAFFA,YACAmS,EACE,EADFA,YAEMhJ,EAAQC,cACRC,EAAUiJ,GAAO,2BAChB,CAAEM,YAAW/L,kBAAiB7G,cAAamS,gBAD5B,IAElBhJ,WAGJ,OAAO,sBAAK9D,UAAWgE,EAAQ6I,cAAxB,SAAwChJ,KAG7C8J,GAA0C,SAAC,GAM1C,IALHvM,EAKE,EALFA,MACAI,EAIE,EAJFA,gBACAqC,EAGE,EAHFA,SACAkJ,EAEE,EAFFA,WACAD,EACE,EADFA,YAEMhJ,EAAQC,cACRC,EAAU4I,GAAgB,2BACzB,CACCxL,QACAI,kBACAuL,aACAD,gBALuB,IAO3BhJ,WAGJ,OAAO,sBAAK9D,UAAWgE,EAAQ6I,cAAxB,SAAwChJ,KAG7C+J,GAA0C,SAAC,GAAa,IAAXnC,EAAU,EAAVA,IACzC3H,EAAQC,cACRC,EAAUiJ,GAAO,2BAChB,IADe,IAElBnJ,WAGJ,OACI,sBAAK9D,UAAWgE,EAAQqJ,MAAxB,SACI,sBAAKQ,IAAKpC,EAAKqC,IAAI,oBAK/BN,GAAOlK,aAAe,CAClB8J,OAAQ,UACR/J,YAAa,QAGjBsK,GAAYrK,aAAe,CACvBwJ,YAAa,OCvGjB,IAAMhM,GAAYC,cAAgB,iBAAO,CACrCyB,OAAQ,CACJP,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBvB,QAAS,WACTa,OAAQ,kBACRjB,aAAc,MACdkB,UAAW,aACXC,eAAgB,OAChBC,WAAY,IACZT,UAAW,SACXU,WAAY,WACZpB,UAAW,EACX,UAAW,CACPqB,OAAQ,UACRuD,MAAOjM,GAAOI,MACdoI,WAAY,OAEhB,qBAAsB,OACtB,kBAAmB,OACnBqD,UAAW,SACXH,SAAU,OACVI,WAAY,OACZG,MAAO,UACPtD,OAAQ,EACRhH,WAAY,OACZ,WAAY,CACR4G,eAAgB,YAChBC,WAAY,QAGpBc,KAAM,CACF1B,QAAS,OACTzB,UAAW,iBACX1P,SAAU,WACVid,WAAY,OACZ/M,IAAK,MACL,sBAAuB,CACnBR,UAAW,sBAKjBwN,GAA8B,SAAC,GAAuC,IAArC3G,EAAoC,EAApCA,QAASnZ,EAA2B,EAA3BA,KAAMF,EAAqB,EAArBA,KAAM6V,EAAe,EAAfA,SAClDG,EAAUlD,KAEhB,OACI,0BACI3S,KAAK,SACLkZ,QAASA,EACTrH,UAAS,UAAKgE,EAAQxB,OAAb,YACLtU,GAAQA,EAAK+f,WAAajgB,EAAO,SAAW,WAJpD,UAOI,gCAAO6V,IAEP,sBACI7D,UAAS,UAAKgE,EAAQL,KAAb,YACLzV,GACAA,EAAK+f,WAAajgB,GACC,gBAAnBE,EAAKggB,UACC,aACA,aANd,SASI,eAACC,GAAD,CAAc/M,MAAM,MAAMkF,MAAOjM,GAAOoB,gBC9E3C2S,GAAc,SAACC,GACxB,IAAM3Y,EAAW2Y,EAAWC,MAAM,KAElC,OADiB5Y,EAAS6Y,QAAQC,OAAO,GAAK9Y,EAAS+Y,MAAMD,OAAO,IACpDE,eCaPC,GAAb,iDACI3gB,KAAO,GADX,KAGIwB,GAAK,EAHT,8CAKI,SAAatD,GACT,IAAM8G,EAAY,IAAI2b,EAKtB,OAHA3b,EAAUxD,GAAKtD,EAAKoE,OACpB0C,EAAUhF,KAAO9B,EAAK0C,KAEfoE,MAXf,KAea4b,GAAb,iDACI5gB,KAAO,GADX,KAGIwB,GAAK,EAHT,8CAKI,SAAatD,GACT,IAAM2iB,EAAY,IAAID,EAKtB,OAHAC,EAAUrf,GAAKtD,EAAKoE,OACpBue,EAAU7gB,KAAO9B,EAAK0C,KAEfigB,MAXf,KAeaC,GAAb,iDACI9gB,KAAO,GADX,KAGIwB,GAAK,EAHT,8CAKI,SAAatD,GACT,IAAM6iB,EAAM,IAAID,EAKhB,OAHAC,EAAIvf,GAAKtD,EAAKoE,OACdye,EAAI/gB,KAAO9B,EAAK0C,KAETmgB,MAXf,KAeaC,GAAb,iDACIhhB,KAAO,GADX,KAGIG,KAAO,GAHX,KAKIF,UAAY,GALhB,8CAOI,SAAa/B,GACT,IAAM6iB,EAAM,IAAIC,EAMhB,OAJAD,EAAI/gB,KAAO9B,EAAK0C,KAChBmgB,EAAI5gB,KAAOjC,EAAK4C,KAAO5C,EAAK4C,KAAO,GACnCigB,EAAI9gB,UAAY/B,EAAKyC,SAAWzC,EAAKyC,SAAW,GAEzCogB,MAdf,KAkBaE,GAAb,iDACIhhB,UAAY,GADhB,KAGID,KAAO,GAHX,KAKIE,KAAO,EALX,KAOIC,KAAO,GAPX,KASI+gB,eATJ,OAWIC,YAAc,GAXlB,8CAaI,SAAajjB,GACT,IAAM6iB,EAAM,IAAIE,EAShB,OAPAF,EAAI/gB,KAAO9B,EAAK0C,KAChBmgB,EAAII,YAAJ,UAAqBjjB,EAAK0C,KAA1B,YAAkC1C,EAAKyC,SAAvC,KACAogB,EAAI9gB,UAAY/B,EAAKyC,SACrBogB,EAAI7gB,KAAOhC,EAAK2C,gBAChBkgB,EAAI5gB,KAAOjC,EAAK4C,KAChBigB,EAAIG,UAAYhjB,EAAK4H,eAEdib,MAvBf,KAmCaK,GAAyB,CAClCC,WAAY,GACZC,OAAQ,GACRC,qBAAsB,GACtBC,aAAc,GACdhd,UAAW,IAGFid,GAAkC,CAC3CJ,WAAY,GACZC,OAAQ,GACRC,qBAAsB,GACtBC,aAAc,GACdhd,UAAW,ICkBR,SAASkd,GAAWxjB,GACvB,IAAMyjB,EAAM,eAAQP,IAgCpB,OA9BIljB,EAAK0jB,wBACLD,EAAON,WAAanjB,EAAK0jB,sBAAsBvgB,KAAI,SAAC2D,GAAD,OAC/C2b,GAAgBrf,MAAM0D,OAI1B9G,EAAK2jB,qBACLF,EAAOL,OAASpjB,EAAK2jB,mBAAmBxgB,KAAI,SAACgB,GAAD,OACxCue,GAAgBtf,MAAMe,OAI1BnE,EAAK4jB,qBACLH,EAAOnd,UAAYtG,EAAK4jB,mBAAmBzgB,KAAI,SAACyB,GAAD,OAC3Cge,GAAexf,MAAMwB,OAIzB5E,EAAK6jB,uBACLJ,EAAOJ,qBAAuBrjB,EAAK6jB,qBAAqB1gB,KACpD,SAAC2gB,GAAD,OAAkBhB,GAA2B1f,MAAM0gB,OAIvD9jB,EAAKwH,6BACLic,EAAOH,aAAetjB,EAAKwH,2BAA2BrE,KAClD,SAAC4gB,GAAD,OAAuBhB,GAAY3f,MAAM2gB,OAI1CN,EAgCJ,SAASO,GACZld,EACAmd,GAEA,IAAMC,EAAQ,eAAQD,GAEhBE,EAAUD,EAASf,WAAWiB,MAAK,SAACzc,GAAD,OAAUA,EAAKrE,KAAOwD,EAAUxD,MACnE6f,EAAU,YAAOc,EAAcd,YAErC,GAAIgB,EAAS,CACT,IAAME,EAAUlB,EAAWmB,WAAU,SAACvY,GAAD,OAAOA,EAAEzI,KAAOwD,EAAUxD,MAC/D6f,EAAWoB,OAAOF,EAAS,GAC3BH,EAASf,WAAaA,OAEtBA,EAAWqB,KAAK1d,GAChBod,EAASf,WAAaA,EAG1B,OAAOe,EAGJ,SAASO,GACZ7f,EACAqf,GAEA,IAAMC,EAAQ,eAAQD,GAEhBE,EAAUD,EAAS5d,UAAU8d,MAAK,SAACzc,GAAD,OAAUA,EAAKrE,KAAOsB,EAAStB,MACjEgD,EAAS,YAAO2d,EAAc3d,WAEpC,GAAI6d,EAAS,CACT,IAAME,EAAU/d,EAAUge,WAAU,SAACvY,GAAD,OAAOA,EAAEzI,KAAOsB,EAAStB,MAC7DgD,EAAUie,OAAOF,EAAS,GAC1BH,EAAS5d,UAAYA,OAErBA,EAAUke,KAAK5f,GACfsf,EAAS5d,UAAYA,EAGzB,OAAO4d,EAGJ,SAASQ,GACZ9f,EACAqf,GAEA,IAAMC,EAAQ,eAAQD,GAEhBE,EAAUD,EAASb,qBAAqBe,MAC1C,SAACzc,GAAD,OAAUA,EAAK7F,OAAS8C,EAAS9C,QAE/BwE,EAAS,YAAO2d,EAAcZ,sBAEpC,GAAIc,EAAS,CACT,IAAME,EAAU/d,EAAUge,WAAU,SAACK,GAAD,OAAOA,EAAE7iB,OAAS8C,EAAS9C,QAC/DwE,EAAUie,OAAOF,EAAS,GAC1BH,EAASb,qBAAuB/c,OAEhCA,EAAUke,KAAK5f,GACfsf,EAASb,qBAAuB/c,EAGpC,OAAO4d,EAGJ,SAASU,GACZC,EACAZ,GAEA,IAAMC,EAAQ,eAAQD,GAEhBE,EAAUD,EAASZ,aAAac,MAClC,SAACzc,GAAD,OAAUA,EAAK7F,OAAS+iB,EAAK/iB,QAE3BgjB,EAAM,YAAOb,EAAcX,cAEjC,GAAIa,EAAS,CACT,IAAME,EAAUS,EAAOR,WAAU,SAACS,GAAD,OAAOA,EAAEjjB,OAAS+iB,EAAK/iB,QACxDgjB,EAAOP,OAAOF,EAAS,GACvBH,EAASZ,aAAewB,OAExBA,EAAON,KAAKK,GACZX,EAASZ,aAAewB,EAG5B,OAAOZ,EAGJ,SAASc,GACZ7gB,EACA8f,GAEA,IAAMC,EAAQ,eAAQD,GAChBE,EAAUD,EAASd,OAAOgB,MAAK,SAACzc,GAAD,OAAUA,EAAKrE,KAAOa,EAAMb,MAC3D8f,EAAM,YAAOa,EAAcb,QAEjC,GAAIe,EAAS,CACT,IAAME,EAAUjB,EAAOkB,WAAU,SAACvY,GAAD,OAAOA,EAAEzI,KAAOa,EAAMb,MACvD8f,EAAOmB,OAAOF,EAAS,GACvBH,EAASd,OAASA,OAElBA,EAAOoB,KAAKrgB,GACZ+f,EAASd,OAASA,EAGtB,OAAOc,ECxSX,IAAMpW,GAASD,eAAK,GAEdoX,GAAcjX,yBAAc,SAACZ,GAAD,MAAU,CACxCa,SAAU,CAAC,UAAWb,EAAIU,KAC1BI,QAAQ,WAAD,4BAAE,8BAAA/O,EAAA,4DAEO,kDAFP,SAGkBmC,EAAkB8L,IAD7B,mDAFP,cAGCtN,EAHD,OAKGE,EAASF,EAATE,KALH,kBAME,CACHklB,QAASza,EAAWzK,EAAKmlB,WACzB1B,OAAQD,GAAWxjB,KARlB,2CAAF,kDAAC,OA2BNolB,GAAa,uCAAG,WAAOC,GAAP,iBAAAlmB,EAAA,+EAGSmC,EAAkB8L,IAAlB,oCACUiY,IAJnB,cAGRvlB,EAHQ,yBAOPA,GAPO,uCASdoB,EAAK,KATS,kBAUPA,GAVO,yDAAH,sDAcbokB,GAAY,uCAAG,WAAOhiB,GAAP,eAAAnE,EAAA,sEACMmC,EAAkB8L,IAAlB,sDAC4B9J,IAFlC,cACXxD,EADW,yBAKVA,GALU,2CAAH,sDAQZylB,GAAoB,uCAAG,WAAOjiB,GAAP,eAAAnE,EAAA,sEACFmC,EAAkB8L,IAAlB,sDAC4B9J,IAF1B,cACnBxD,EADmB,yBAKlBA,GALkB,2CAAH,sDAQpB0lB,GAAe,uCAAG,WACpBjY,GADoB,eAAApO,EAAA,sEAGGmC,EAAkB/B,KAAlB,4BAEnBgO,GALgB,cAGdzN,EAHc,yBAObA,GAPa,2CAAH,sDAWf2lB,GAAkB,uCAAG,WACvBlY,GADuB,eAAApO,EAAA,sEAGAmC,EAAkB/B,KAAlB,iDAEnBgO,GALmB,cAGjBzN,EAHiB,yBAOhBA,GAPgB,2CAAH,sDAWlB4lB,GAAoB,uCAAG,WACzBnY,GADyB,eAAApO,EAAA,sEAGFmC,EAAkB/B,KAAlB,uCAEnBgO,GALqB,cAGnBzN,EAHmB,yBAOlBA,GAPkB,2CAAH,sDAUpB6lB,GAAyB,uCAAG,WAC9BpY,GAD8B,eAAApO,EAAA,sEAGPmC,EAAkB/B,KAAlB,4BAEnBgO,GAL0B,cAGxBzN,EAHwB,yBAOvBA,GAPuB,2CAAH,sDAWzB8lB,GAAmB,uCAAG,4BAAAzmB,EAAA,sEAGDmC,EAAkB8L,IACrC,mDAJoB,cAGlBtN,EAHkB,yBAOjB,CACHqjB,WAAYvc,EAAc9G,EAASE,KAAK6lB,kCARpB,2CAAH,qDCzFzB,SAASC,GAAeC,EAAYC,EAAYC,GAC5C,OAAIF,EAAQE,EAAOlE,UAAYiE,EAAQC,EAAOlE,WAClC,EAGRgE,EAAQE,EAAOlE,UAAYiE,EAAQC,EAAOlE,UACnC,EAEJ,EAuCX,SAASmE,GAAeC,GACpB,OAAOA,EAAMnkB,MACT,SAAC7C,EAASinB,GAAV,OAAsBA,EAAEC,QAAQC,UAAYnnB,EAAEknB,QAAQC,aAkB9D,SAASC,GAAWpnB,EAAWinB,GAC3B,OAAIjnB,EAAEwK,IAAMyc,EAAEzc,KACF,EAERxK,EAAEwK,IAAMyc,EAAEzc,IACH,EAEJ,EAGX,SAAS6c,GAAkBrnB,EAAWinB,GAClC,OACIjnB,EAAE0K,iBAAiB/H,KAAK2kB,cACxBL,EAAEvc,iBAAiB/H,KAAK2kB,eAEhB,EAGRtnB,EAAE0K,iBAAiB/H,KAAK2kB,cACxBL,EAAEvc,iBAAiB/H,KAAK2kB,cAEjB,EAEJ,EAGX,SAASC,GAAcvnB,GACnB,MAAiB,wBAAbA,EAAEkC,QACM,EAEK,mBAAblC,EAAEkC,OACK,EAEJ,EAGX,SAASslB,GAAaxnB,EAAuBinB,GACzC,OAAIjnB,EAAEoH,cAAgB6f,EAAE7f,eACZ,EAERpH,EAAEoH,cAAgB6f,EAAE7f,cACb,EAEJ,EAGX,SAASqgB,GAAcznB,GACnB,OAAKA,EAAE0nB,OAGH1nB,EAAE0nB,OACK,EAEJ,GALK,EAQhB,SAASC,GAAkC3nB,EAAcinB,GACrD,OAAIjnB,EAAEsH,gBAAkB2f,EAAE3f,iBACd,EAERtH,EAAEsH,gBAAkB2f,EAAE3f,gBACf,EAEJ,EAGX,SAASsgB,GAAmB5nB,GACxB,OAAIA,EAAEyK,aACM,EAEPzK,EAAEyK,YAGA,EAFI,EAKf,SAASod,GAAmB7nB,EAAWinB,GACnC,OACIjnB,EAAEqF,WAAW1C,MACbskB,EAAE5hB,WAAW1C,MACb3C,EAAEqF,WAAW1C,KAAK2kB,cAAgBL,EAAE5hB,WAAW1C,KAAK2kB,eAE5C,EAGRtnB,EAAEqF,WAAW1C,MACbskB,EAAE5hB,WAAW1C,MACb3C,EAAEqF,WAAW1C,KAAK2kB,cAAgBL,EAAE5hB,WAAW1C,KAAK2kB,cAE7C,EAEJ,EAGJ,IA4BMQ,GAAgB,SACzBC,EACAllB,GAEA,IAAImlB,EAAM,YAAOD,GAEjB,OAAQllB,EAAK+f,UACT,IAAK,SACD,IAAMqF,EAAUD,EAAO1D,QACnB,SAAC9b,GAAD,MAA0B,qBAAhBA,EAAKtG,UAEbgmB,EAAUF,EAAO1D,QACnB,SAAC9b,GAAD,MAA0B,oBAAhBA,EAAKtG,UAEnB8lB,EAAM,sBAAOC,GAAP,YAAmBC,IACzB,MAGJ,IAAK,UACDF,EA3JZ,SAAiCD,GAC7B,OAAOA,EAAQllB,MACX,SAAC7C,EAAgBinB,GAAjB,OACI,IAAIhe,KAAKge,EAAEkB,SAAShB,UAAY,IAAIle,KAAKjJ,EAAEmoB,SAAShB,aAwJ3CiB,CAAwBJ,GACjC,MACJ,IAAK,OACDA,EAASA,EAAOnlB,MAAK,SAAC7C,EAAGinB,GAAJ,OAxMjC,SAAmCjnB,EAAgBinB,GAC/C,OAAIjnB,EAAEuL,OAAOlB,SAAW4c,EAAE1b,OAAOlB,UACrB,EAGRrK,EAAEuL,OAAOlB,SAAW4c,EAAE1b,OAAOlB,SACtB,EAEJ,EAgMgCge,CAA0BroB,EAAGinB,MAC5D,MACJ,IAAK,aACDe,EAASA,EAAOnlB,MAAK,SAAC7C,EAAGinB,GAAJ,OACjBN,GAAY3mB,EAAGinB,EAAG,CAAErE,SAAU,YAElC,MACJ,IAAK,gBACDoF,EAASA,EAAOnlB,MAAK,SAAC7C,EAAGinB,GAAJ,OArMjC,SAAoCjnB,EAAgBinB,GAChD,OAAIjnB,EAAEoC,QAAQiI,SAAW4c,EAAE7kB,QAAQiI,UACvB,EAGRrK,EAAEoC,QAAQiI,SAAW4c,EAAE7kB,QAAQiI,SACxB,EAEJ,EA6LgCie,CAA2BtoB,EAAGinB,MAC7D,MACJ,IAAK,gBACDe,EAlKZ,SAAiCD,GAC7B,OAAOA,EAAQllB,MACX,SAAC7C,EAAgBinB,GAAjB,OACI,IAAIhe,KAAKge,EAAEC,SAASC,UAAY,IAAIle,KAAKjJ,EAAEknB,SAASC,aA+J3CoB,CAAwBP,GASzC,MAFuB,gBAAnBnlB,EAAKggB,YAA6BmF,EAASA,EAAOQ,WAE/CR,GAgBES,GAAc,SAACzB,EAAenkB,GACvC,IAAI6lB,EAAW,YAAO1B,GAEtB,OAAQnkB,EAAK+f,UACT,IAAK,SAGD8F,EApB4B,SACpC1B,EACAwB,GAGA,IAAId,EAASV,EAAM1C,QAAO,SAACqE,GAAD,OAAOA,EAAEjB,UAC/BkB,EAAY5B,EAAM1C,QAAO,SAACqE,GAAD,OAAQA,EAAEjB,UAIvC,OAHAA,EAASX,GAAeW,GACxBkB,EAAY7B,GAAe6B,GAEnBJ,EAAD,sBAA2Cd,GAA3C,YAAsDkB,IAAtD,sBAAeA,GAAf,YAA6BlB,IAUdmB,CAFdH,EAAcA,EAAY7lB,KAAK4kB,IAIR,gBAAnB5kB,EAAKggB,WAGT,MACJ,IAAK,OACD6F,EAAcA,EAAY7lB,MAAK,SAAC7C,EAAGinB,GAAJ,OAC3BN,GAAY3mB,EAAGinB,EAAG,CAAErE,SAAU,YAElC,MACJ,IAAK,OACD8F,EAAc3B,GAAe2B,GAC7B,MAEJ,IAAK,WACDA,EA7OZ,SAA4B1B,GACxB,OAAOA,EAAMnkB,MAAK,SAAC7C,EAASinB,GACxB,OAAIjnB,EAAEiK,YAAoB,EACtBgd,EAAEhd,WAAmB,EAClB,KAyOW6e,CAAmBJ,GAAa7lB,OAUtD,MAHuB,gBAAnBA,EAAKggB,WAAiD,WAAlBhgB,EAAK+f,WACzC8F,EAAcA,EAAYF,WAEvBE,GAGEK,GAAS,SAAChD,EAAmBljB,GACtC,IAAImmB,EAAa,YAAOjD,GAExB,OAAQljB,EAAK+f,UACT,IAAK,OACDoG,EAAgBA,EAAcnmB,MAAK,SAAC7C,EAAGinB,GAAJ,OAC/BN,GAAY3mB,EAAGinB,EAAG,CAAErE,SAAU,gBAElC,MAEJ,IAAK,cACDoG,EAAgBA,EAAcnmB,KAAKwkB,IACnC,MAEJ,IAAK,SACD2B,EAAgBA,EAAcnmB,KAAK0kB,IACnC,MAEJ,IAAK,QACDyB,EAAgBA,EAAcnmB,KAAK2kB,IACnC,MAEJ,IAAK,cACDwB,EAAgBA,EAAcnmB,KAAK+kB,IACnC,MAEJ,IAAK,aACDoB,EAAgBA,EAAcnmB,KAAKglB,IACnC,MAEJ,IAAK,WACDmB,EAjRZ,SAAoBjD,GAChB,OAAOA,EAAQljB,MACX,SAAC7C,EAAWinB,GAAZ,OAA0BA,EAAE1c,SAAS4c,UAAYnnB,EAAEuK,SAAS4c,aA+QxC8B,CAAWD,GAC3B,MACJ,IAAK,MACDA,EAAgBA,EAAcnmB,KAAKukB,IAU3C,MAHuB,gBAAnBvkB,EAAKggB,YACLmG,EAAgBA,EAAcR,WAE3BQ,GCxWEE,GAAgB,SACzBC,EACApL,EACAqL,GAEA,IAAMC,EAAcD,EACdA,EAASplB,KAAI,SAACslB,GAAD,2BAA2BA,WACxCpmB,EAEN,OAAOimB,EAAM7E,QAAO,SAACiF,GAAD,OAChBC,OAAOC,KAAKF,GAAGtE,MAAK,SAACyE,GACjB,QACIL,IACAA,EAAY/gB,SACgB,IAA5B+gB,EAAYnE,QAAQwE,QAKJ,kBAATH,EAAEG,KACTH,EAAEG,GAAGpC,cAAc8B,SAASrL,EAAMuJ,mBAMlB,kBAATiC,EAAEG,KACTH,EAAEG,GAAGC,WAAWP,SAASQ,KAAKC,KAAK9L,aCvB7C+L,GAAYrqB,kCAMZkP,GAASD,eAAK,GAEdqb,GAAsB,uCAAG,4BAAA/pB,EAAA,sEA6BJL,IAAMsO,IACzB,sDA9BuB,cA6BrBtN,EA7BqB,yBAgCpBA,EAASE,MAhCW,2CAAH,qDCVtB4U,ID6CkB5G,yBAAc,SAACZ,GAAD,MAAU,CAC5Ca,SAAU,CAAC,WAAYb,EAAIU,KAC3BI,QAAQ,WAAD,4BAAE,2CAAA/O,EAAA,2EAAS8O,SAAT,GACCpN,EAAS,CACXxB,QAAS,CACL,cAjDDT,6CAqDHuqB,EAAO,gDAPN,SAakBrqB,IAAMsO,IAAN,UAChB+b,EADgB,kDAC8BF,GAD9B,iBAEnBpoB,GAfC,cAaCf,EAbD,gBAiBchB,IAAMsO,IAAN,UACZ+b,EADY,kDACkCF,GADlC,SAEfpoB,GAnBC,OAiBC+nB,EAjBD,OAsBCQ,EAA8B,GAtB/B,cAwBaR,EAAK5oB,KAAK4oB,MAxBvB,IAwBL,IAxBK,iBAwBMS,EAxBN,QAyBDD,EAAaC,EAAIC,SAASC,KAAOzpB,EAASE,KAAKopB,aAAa3d,MACxD,SAAC+d,GAAD,OAAWA,EAAMC,SAAWJ,EAAII,UAClCC,aAHN,uBAAmC,IAxB9B,uDA6BEN,GA7BF,4CAAF,mDAAC,OC/CMvU,cAAgB,iBAAO,CACrC8U,OAAQ,CACJzU,MAAO,QACPC,OAAQ,QACRY,QAAS,OACTnR,SAAU,QACVkQ,IAAK,EACLmB,WAAY,SACZiB,eAAgB,SAChBjC,KAAM,IACNG,OAAQ,QAIVwU,GAAoB,WACtB,IAAM9R,EAAUlD,KAChB,OACI,sBAAKd,UAAWgE,EAAQ6R,OAAxB,SACI,uBAAK7V,UAAU,cAAf,UACI,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,+B,SCZV+V,GAAc,SAACT,GACjBjpB,aAAaC,QAAQ,eAAgBC,KAAKZ,UAAU2pB,KAGlDU,GAAc,WAChB,IAAMV,EAAejpB,aAAaY,QAAQ,gBAE1C,OAAOV,KAAKW,MAAMooB,IAGhB7P,GAAI,SAACwQ,GACP,IAAI7M,EAAQ,IAEN8M,EAAQF,KAKd,OAJIE,GAASA,EAAMD,KACf7M,EAAQ8M,EAAMD,IAGX7M,GAGL+M,GAAS,SAACF,EAAaG,GACzB,IAAIhN,EAAQ,IACN8M,EAAQF,KACVE,GAASA,EAAMD,KACf7M,EAAQ8M,EAAMD,IAElB,IAAII,EAAcjN,EAWlB,OATIgN,GAAgBvB,OAAOC,KAAKsB,GAAcziB,QAC1CkhB,OAAOC,KAAKsB,GAAcxiB,SAAQ,SAAC0iB,GAE/B,IAAMC,EAAIH,EAAaE,GACvBD,EAAcA,EAAY5L,QAAZ,WAAwB6L,EAAxB,eAA0CC,OAKzD,uBAAMC,wBAAyB,CAAEC,OAAQJ,MAG9CK,GAAqB,SAAC,GAAkB,IAAhB7S,EAAe,EAAfA,SAC1B,EAAsCiF,oBAAS,GAA/C,mBAAO6N,EAAP,KAAoBC,EAApB,KACMC,EAAe,WACbC,KACKH,IACDZ,GAAYe,IACZF,GAAe,MAKrBG,EAAI,uCAAG,8BAAA1rB,EAAA,6DACTwrB,IACMG,EAAUC,YAAW,WACvBJ,MACD,KAJM,SAMczB,KANd,OAMHppB,EANG,OAOTid,QAAQC,IAAIld,EAAU,YAElBA,IACA+pB,GAAY/pB,GACZkrB,aAAaF,GACbJ,GAAe,IAZV,2CAAH,qDAqBV,OALAzN,qBAAU,WAEN4N,MACD,IAEEJ,EAEE,qCAAG9S,IAFe,eAAC,GAAD,KC5EhBsT,GAAqB,SAAChpB,GAC/B,IAAIga,EAAQha,EAEZ,OAAQA,GACJ,IAAK,gBACDga,EAAQ1C,GAAE,uCACV,MACJ,IAAK,gBACD0C,EAAQ1C,GAAE,uCACV,MACJ,IAAK,2BACD0C,EAAQ1C,GAAE,kDACV,MACJ,IAAK,qCACD0C,EAAQ1C,GACJ,4DAOZ,OAAO0C,GAGEiP,GAAuB,SAAC7pB,GACjC,IAAI4a,EAAQ5a,EAEZ,OAAQA,GACJ,IAAK,mBACD4a,EAAQ1C,GAAE,4CACV,MACJ,IAAK,kBACD0C,EAAQ1C,GAAE,2CAMlB,OAAO0C,GCrBLkP,GAAatd,eAAcqV,IAC3BkI,GAAiBvd,eAAK0V,IACtB8H,GAAaxd,eARY,CAC3BmU,UAAW,YACXD,SAAU,SAORuJ,GAAWzd,gBAAK,GAChB0d,GAAa1d,eAAa,IAC1B2d,GAAiB3d,eAAa,IAC9B4d,GAAsB5d,eAAa,IACnC6d,GAAoB7d,eAAe,IACnC8d,GAAoB9d,gBAAc,GAClC+d,GAAW/d,eAAa,IACxBge,GAAgBhe,eAAkB,IAClCie,GAAaje,eAAoB,IACjCke,GAAiBle,eAAoB,IACrCme,GAAuBne,eAAoB,IAE3Coe,GAAiBpe,gBAAK,SAACT,GACzB,IAAM+Z,EAAS/Z,EAAIie,IACbnG,EAAU9X,EAAIse,IAChBQ,EAAa,YAAOhH,GAMxB,OAJIiC,IACA+E,EAAgBhE,GAAO,YAAIgE,GAAgB/E,IAGxC,YAAI+E,MAGTC,GAAqBte,gBAAK,SAACT,GAC7B,IAAM+Z,EAAS/Z,EAAIie,IACblI,EAAa/V,EAAIye,IACnBO,EAAgB,YAAOjJ,GACrBkJ,EAASjf,EAAIqe,IAanB,OAXItE,IACAiF,EN6HwB,SAC5BjJ,EACAnhB,GAEA,IAAImlB,EAAM,YAAOhE,GAEjB,OAAQnhB,EAAK+f,UACT,IAAK,OACDoF,EAASA,EAAOnlB,MAAK,SAAC7C,EAAGinB,GAAJ,OACjBN,GAAY3mB,EAAGinB,EAAG,CAAErE,SAAU,YAElC,MACJ,IAAK,kBACDoF,EAASA,EAAOnlB,KAAK8kB,IACrB,MACJ,IAAK,QACDK,EAASA,EAAOnlB,KAAK2kB,IAS7B,MAFuB,gBAAnB3kB,EAAKggB,YAA6BmF,EAASA,EAAOQ,WAE/CR,EMtJgBmF,CAAiBF,EAAkBjF,IAGtDkF,IACAD,EAAmB/D,GAAc,YAAI+D,GAAmBC,EAAQ,CAC5D,OACA,aAIDD,KAGLG,GAAiB1e,gBAAK,SAACT,GACzB,IAAM+Z,EAAS/Z,EAAIie,IACbmB,EAAMpf,EAAI0e,IACZW,EAAa,YAAOD,GAKxB,OAJIrF,IACAsF,EAAgBxF,GAAcwF,EAAetF,IAG1CsF,KAGLC,GAAqB7e,gBAAK,SAACT,GAC7B,IAAM+Z,EAAS/Z,EAAIie,IACbmB,EAAMpf,EAAI2e,IACZU,EAAa,YAAOD,GAKxB,OAJIrF,IACAsF,EAAgBxF,GAAcwF,EAAetF,IAG1CsF,KAGLE,GAA2B9e,gBAAK,SAACT,GACnC,IAAM+Z,EAAS/Z,EAAIie,IACbmB,EAAMpf,EAAI4e,IACZS,EAAa,YAAOD,GAKxB,OAJIrF,IACAsF,EAAgBxF,GAAcwF,EAAetF,IAG1CsF,KAGLG,GAAe/e,gBAAK,SAACT,GACvB,IAAM+Z,EAAS/Z,EAAIie,IACblF,EAAQ/Y,EAAIwe,IACd/D,EAAW,YAAO1B,GAChBkG,EAASjf,EAAIoe,IAenB,OAbIrE,IACAU,EAAcD,GAAYC,EAAaV,IAIvCkF,IACAxE,EAAcQ,GAAc,YAAIR,GAAcwE,EAAQ,CAClD,UACA,QACA,YAIDxE,KAILgF,GAAehf,gBAAK,SAACT,GACvB,IDlIiB0f,EAAiB/C,ECkI5B7F,EAAW9W,EAAIge,IACflG,EAAU9X,EAAI6X,IACdkC,EAAS/Z,EAAIie,IACbgB,EAASjf,EAAIme,IACbwB,EAAgB3f,EAAIue,IACtBO,ERoCD,SAAqBhI,EAAmB4I,GAC3C,IAAIE,EAAQ,YAAOF,GAyBnB,OAvBI5I,EAASZ,aAAa7b,SACtBulB,EAzDD,SACHC,EACAH,GAEA,IAAME,EAAqB,GAU3B,OARAC,EAAMvlB,SAAQ,SAAC+b,GACXA,EAAOT,UAAUtb,SAAQ,SAACpE,GACtB,IAAM4pB,EAAIJ,EAAMrhB,MAAK,SAAC0hB,GAAD,OAASA,EAAI9jB,WAAa/F,KAE3C4pB,GAAGF,EAASxI,KAAK0I,SAItBF,EA2CQI,CAAkBlJ,EAASZ,aAAc0J,IAGpD9I,EAASf,WAAW1b,SACpBulB,EA9ID,SACH7J,EACA2J,GAEA,IAAME,EAAqB,GAoB3B,OAlBAF,EAAMplB,SAAQ,SAACgD,GACX,OAAOA,EAAOxB,WAAWxB,SAAQ,SAACZ,GACdqc,EAAWiB,MAAK,SAACiJ,GAC7B,OAAIA,EAAQ/pB,KAAOwD,EAAUxC,YAQxB0oB,EAASvhB,MAAK,SAACyhB,GAAD,OAAOA,EAAE7jB,WAAaqB,EAAOrB,aAC5C2jB,EAASxI,KAAK9Z,UAMvBsiB,EAsHQM,CAAiBpJ,EAASf,WAAY6J,IAGjD9I,EAASd,OAAO3b,SAChBulB,EAvHD,SACHO,EACAT,GAEA,IAAME,EAAqB,GAoB3B,OAlBAF,EAAMplB,SAAQ,SAACgD,GACX,OAAOA,EAAOpE,UAAUoB,SAAQ,SAAC9C,GACb2oB,EAAWnJ,MAAK,SAACiJ,GAC7B,OAAIA,EAAQ/pB,KAAOsB,EAAST,MAAMb,QAQ7B0pB,EAASvhB,MAAK,SAACyhB,GAAD,OAAOA,EAAE7jB,WAAaqB,EAAOrB,aAC5C2jB,EAASxI,KAAK9Z,UAMvBsiB,EA+FQQ,CAAiBtJ,EAASd,OAAQ4J,IAG7C9I,EAAS5d,UAAUmB,SACnBulB,EAhGD,SACH1mB,EACAwmB,GAEA,IAAME,EAAqB,GAoB3B,OAlBAF,EAAMplB,SAAQ,SAACgD,GACX,OAAOA,EAAOpE,UAAUoB,SAAQ,SAAC9C,GACb0B,EAAU8d,MAAK,SAACiJ,GAC5B,OAAIA,EAAQ/pB,KAAOsB,EAAStB,QAQvB0pB,EAASvhB,MAAK,SAACyhB,GAAD,OAAOA,EAAE7jB,WAAaqB,EAAOrB,aAC5C2jB,EAASxI,KAAK9Z,UAMvBsiB,EAwEQS,CAAgBvJ,EAAS5d,UAAW0mB,IAG/C9I,EAASb,qBAAqB5b,SAC9BulB,EAnLD,SACHU,EACAZ,GAEA,IAAME,EAAqB,GAkB3B,OAhBAF,EAAMplB,SAAQ,SAACgD,GACX,OAAOA,EAAOtE,sBAAsBsB,SAAQ,SAACimB,GACzBD,EAAKtJ,MAAK,SAACiJ,GACvB,OAAIA,EAAQvrB,OAAS6rB,EAAI7rB,SAQzBkrB,EAASxI,KAAK9Z,SAKnBsiB,EA6JQY,CACP1J,EAASb,qBACT2J,IAIDA,EQ9Daa,CAAY3J,EAAD,YAAegB,EAAQA,UAmBtD,OAjBIiC,IACA+E,EAAgBhE,GAAO,YAAIgE,GAAgB/E,IAG3CkF,IACAH,EAAgB7D,GAAc,YAAI6D,GAAgBG,EAAQ,CACtD,WACA,YACA,WACA,SAIJU,IACAb,EAAgB,YAAIA,GAAezI,QAAO,SAACyJ,GAAD,OAAOA,EAAE9jB,eAGhD,aD1JU0jB,EC0JDZ,ED1JkBnC,EC0JH,WDzJT,YACf,IAAI+D,IAAIhB,EAAM3pB,KAAI,SAACwE,GAAD,MAAU,CAACA,EAAKoiB,GAAMpiB,OAAQ4F,eEgF5CwgB,GA7EY,WACvB,MAA0BC,kBAAQ3C,IAAzB4C,EAAT,oBACA,EAAoBD,kBAAQ1C,IAAnB4C,EAAT,oBACA,EAAkCtR,wBAC9Bva,GADJ,mBAAO8rB,EAAP,KAAkBC,EAAlB,KA+DA,MAAO,CAEHD,YACAE,QA3DY,SAACtM,GACbmM,GAAQ,GACJC,GAAaA,EAAUpM,WAAaA,GACpCqM,EAAa,CACTpM,UAC4B,cAAxBmM,EAAUnM,UACJ,cACA,YACVD,aAEJkM,EAAc,CACVjM,UAC4B,cAAxBmM,EAAUnM,UACJ,cACA,YACVD,eAGJqM,EAAa,CACTpM,UAAW,YACXD,aAEJkM,EAAc,CACVjM,UAAW,YACXD,eAoCRqM,iBClFFE,GAAqBzZ,aAAgB,CACvCQ,UAAU,cACNH,MAAO,OACPO,SAAU,SACVe,OAAQ,SACRb,QAAS,KAJJ,6BAKkB+E,GAAYC,QAL9B,OAK6C,CAC9C,IAAK,CACDhF,QAAS,OCPZ4Y,GAAuB,CAChCxY,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBvB,QAAS,eACTa,OAAQ,kBACRjB,aAAc,SACdkB,UAAW,aACXC,eAAgB,OAChBC,WAAY,IACZT,UAAW,SACXU,WAAY,WACZpB,UAAW,EACX1F,WAAY,UACZ,UAAW,CACP+G,OAAQ,WAEZ,qBAAsB,OACtB,kBAAmB,OACnBC,OAAQ,GAGC0X,GAAkB,CAC3BzY,QAAS,OACTE,WAAY,SACZN,QAAS,WACTa,OAAQ,kBACRjB,aAAc,MACdkB,UAAW,aACXC,eAAgB,OAChBC,WAAY,IACZT,UAAW,OACXU,WAAY,WACZpB,UAAW,EACX,qBAAsB,OACtB,kBAAmB,OACnBwE,UAAW,SACXH,SAAU,OACVI,WAAY,OACZG,MAAO,UACPtD,OAAQ,EACRhH,WAAY,QC1CV8E,GAAYC,cAAgB,iBAAO,CACrC4Z,QAAS,CACL7pB,SAAU,WACVwa,aAAc,YAIhBsP,GAAwB,SAAC,GAAkB,IAAhB/W,EAAe,EAAfA,SACvBG,EAAUlD,KAEhB,OAAO,sBAAKd,UAAWgE,EAAQ2W,QAAxB,SAAkC9W,KC2CvC/C,GAAYC,aAAgB,CAC9BQ,UAAU,cACNM,QAAS,UADJ,6BAEkB+E,GAAYC,QAF9B,OAE6C,CAC9C,IAAK,CACDhF,QAAS,KAIrBgZ,WAAY,CACR5Y,QAAS,OACTJ,QAAS,UACTkF,UAAW,QAEf+T,SAAU,CACN7Y,QAAS,OACTmJ,oBAAqB,cACrB2P,IAAK,OACLzP,aAAc,QAElB0P,QAAS,CACLC,aAAa,aAAD,OAAe5gB,GAAOmB,SAElCuL,UAAW,QAEfmU,cAAe,CACXnN,WAAY,OACZoN,WAAY,GAEhB/J,QAAS,CACL/O,WAAY,QAEhB+Y,KAAM,CACFnZ,QAAS,OACTmJ,oBAAqB,4BACrB2P,IAAK,QAETM,WAAY,CACRpZ,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBvB,QAAS,IACTa,OAAQ,IACRjB,aAAc,MACdkB,UAAW,aACXC,eAAgB,OAChBC,WAAY,IACZT,UAAW,SACXU,WAAY,WACZpB,UAAW,EACX,UAAW,CACPqB,OAAQ,WAEZ,qBAAsB,OACtB,kBAAmB,OACnBC,OAAQ,EACRsD,MAAOjM,GAAOU,SACdgL,SAAU,UACVuV,mBAAoB,aAExBC,QAAS,CACLtZ,QAAS,OACTmB,eAAgB,WAChBvB,QAAS,uBACToZ,aAAa,aAAD,OAAe5gB,GAAOM,cAEtCsI,WAAY,CACR7B,MAAO,OACPC,OAAQ,OACRI,aAAc,MACduB,OAAO,aAAD,OAAe3I,GAAOE,OAC5BiH,gBAAiBnH,GAAOsB,QACxBsG,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBC,YAAa,QAEjBqX,gBAAgB,eACTA,IAEPzkB,QAAS,CACLoM,WAAY,WACZJ,QAAS,OACTE,WAAY,SACZiB,eAAgB,UAEpBoY,eAAgB,CACZC,UAAW,WAEfC,gBAAiB,CACb5qB,SAAU,YAEd6qB,cAAe,CACX7qB,SAAU,WACViW,UAAW,OACXvF,gBAAiBnH,GAAOE,MACxByI,OAAO,aAAD,OAAe3I,GAAOM,aAC5B8G,aAAc,MACdL,MAAO,OACP2E,SAAU,WACVgC,YAAa,SACbnD,aAAc,SACd7B,OAAQ,UACRuD,MAAOjM,GAAOO,YAElBghB,cAAe,CACXjX,SAAU,SACVnD,gBAAiB,QACjBC,aAAc,MACdC,UAEI,yFAERoG,OAAQ,CACJhX,SAAU,WACViW,UAAW,OACXvF,gBAAiBnH,GAAOE,MACxByI,OAAO,aAAD,OAAe3I,GAAOM,aAC5B8G,aAAc,MACdL,MAAO,OACP2E,SAAU,WACVgC,YAAa,SACbnD,aAAc,SACd7B,OAAQ,UACRuD,MAAOjM,GAAOO,YAElBihB,GAAI,CACAhe,QAAS,KACT6E,OAAQ,OAIV0I,GAAsB,0BAEtB0Q,GAAe,WACjB,MAA4B5B,kBAAQpgB,IAApC,mBAAOiiB,EAAP,KAAoBC,EAApB,KACA,EAAiDlT,mBAAS,WAA1D,mBAAOjP,EAAP,KAAyBoiB,EAAzB,KACA,EAAyBnT,wBAA6Bva,GAAtD,mBAAOP,EAAP,KAAakuB,EAAb,KACA,EAAuCpT,mBAA8B,IAArE,mBAAOqT,EAAP,KAAoBC,EAApB,KACA,EAA8BtT,mBAA2B,IAAzD,mBAAOP,EAAP,KAAgB8T,EAAhB,KACA,EAA8BvT,oBAAS,GAAvC,mBAAOwT,EAAP,KAAgBC,EAAhB,KACMvY,EAAUlD,KAChB,EAA+BmZ,KAAvBM,EAAR,EAAQA,QAASF,EAAjB,EAAiBA,UACjB,EAAgCH,kBAAQxS,IAA/B8U,EAAT,oBACMC,EAASjC,KACf,EAA8BN,kBAAQtS,IAAtC,mBAAc8U,GAAd,WAEMnE,EAAM,uCAAG,WAAOxb,EAAWiX,GAAlB,iBAAA3oB,EAAA,6DACXkxB,GAAW,GADA,SAEY3iB,GAAsBmD,EAAGiX,GAFrC,QAELhoB,EAFK,QAKEE,MACTF,EAASE,KAAKmlB,WACdrlB,EAASE,KAAKmlB,UAAU1d,SAElBoB,EAAS/I,EAASE,KAAKmlB,UAAUhiB,KAAI,SAACuH,GACxC,IAAM+lB,EAAW/lB,EAAOQ,UAAUkX,MAAM,KACxC,MAAO,CACH/Y,SAAUqB,EAAOI,aACjBtB,SAAUinB,EAAS,GACnBC,SAAUD,EAAS,GACnB7rB,SAAU6rB,EAAS,GACnB7Q,KAAMlV,EAAOimB,UAIrBT,EAAgBrnB,IAGpBwnB,GAAW,GAvBA,2CAAH,wDAkCZpT,qBAAU,WACN,IAAM2T,EAAO,uCAAG,gCAAAzxB,EAAA,0DAER0wB,EAAY7vB,OACyC,IAArD6vB,EAAY7vB,KAAK6wB,WAAWxM,QAAQ,YAH5B,gBAKFxT,EAAsB,CACxB,CACIoL,MAAO4T,EAAY7vB,KAAKmL,SAASzI,KACjCwa,MAAO2S,EAAY7vB,KAAKmL,SAAS/G,SAIzC+rB,EAAWtf,GAEXkf,EAAqBF,EAAY7vB,KAAKmL,SAAS/G,QAdvC,uCAgBkBkZ,KAhBlB,OAgBFwT,EAhBE,OAiBFC,EAAwBD,EAAY3tB,KACtC,SAACqB,GACG,MAAO,CAAEyX,MAAOzX,EAAW1C,KAAMob,MAAO1Y,EAAWlB,OAI3D6sB,EAAWY,GAvBH,kCA0BL,GA1BK,4CAAH,qDA6BbH,MACD,IAEH,IAAMI,EAAc,uCAAG,WAAOtmB,GAAP,iBAAAvL,EAAA,sEACIqO,EAAkB9C,EAAOrB,UAD7B,OACbvJ,EADa,OAEbyB,EAAU6K,EAAQhJ,MAAMtD,EAASE,MAEvC6vB,EAAYpuB,WAAaF,EAEzBpB,aAAaC,QAAQ,eAAgBC,KAAKZ,UAAUowB,IACpD1vB,aAAaC,QAAQ,WAAYC,KAAKZ,UAAUiL,IAEhD8lB,EAAa,CAAC9lB,EAAOkV,OACrBkQ,EAAKD,GACLS,GAAoB,GAXD,4CAAH,sDAcpB,OACI,uBAAKxc,UAAS,UAAKyc,EAAOlb,UAAZ,iBAAd,UACI,sBAAKvB,UAAS,UAAKgE,EAAQ6W,WAAb,mBACd,sBAAK7a,UAAWgE,EAAQ6W,WAAxB,SACI,+BACI,eAAC,GAAD,CAAYpU,IAAI,KAAKT,KAAK,QAA1B,iCAMR,uBAAKhG,UAAWgE,EAAQ8W,SAAxB,UACI,eAAC,GAAD,UACI,eAAC1S,GAAD,CACIM,YAAY,qBACZF,SAAU,SAACa,GACP+S,EAAgB,IAChBF,EAAS,IACTD,EAAqB5S,EAAE5B,OAAO2B,QAElCb,QAASA,MAGjB,eAAC,GAAD,UACI,eAACuB,GAAD,CACI3B,MAAM,OACNna,KAAK,YACL+b,UAAQ,EACRX,MAAOpb,EACPsZ,UAAWzN,EACXkS,UAAW,SAAC1C,GACM,UAAVA,EAAE4M,MACEjoB,GAAiB,KAATA,GAAe6L,EACvB0e,EAAO1e,EAAkB7L,GAEzBouB,EAAgB,MAI5B5T,SAAU,SAACa,GAAD,OAAO6S,EAAS7S,EAAE5B,OAAO2B,YAG3C,eAAC,GAAD,CACI1E,MAAO,CAAErD,OAAQ,QACjBkG,WAAW,SACXpZ,KAAK,UACL6X,KAAK,QACLsB,UAAWzN,EACXwN,QAAS,WACDrZ,GAAiB,KAATA,GAAe6L,EACvB0e,EAAO1e,EAAkB7L,GAEzBouB,EAAgB,KAV5B,SAcK3W,GAAE,uCAIX,qBAAIzF,UAAWgE,EAAQ6X,KAEtBS,EAAU,eAAC,GAAD,IAAc,KAEvBH,EAAYxoB,OAQV,KAPA,eAAC,GAAD,CACIqS,KAAK,IACLO,MAAM,SACN7B,MAAO,CAAE+W,UAAW,QAHxB,sCASJ,sBAAKzb,UAAWgE,EAAQoN,QAAxB,SACK+K,GAAeA,EAAYxoB,OACxB,sBAAKqM,UAAU,UAAf,SACI,gBAAC,GAAD,WACI,gBAAC,GAAD,CACIoL,oBAAqBA,GADzB,UAGI,eAAC,GAAD,IACA,eAAC,GAAD,UACI,eAAC,GAAD,CACI/D,QAAS,kBAAMkT,EAAQ,SACvBrsB,KAAMmsB,EACNrsB,KAAK,OAHT,oBAQJ,eAAC,GAAD,UACI,eAAC,GAAD,CAAYgY,KAAK,KAAKC,OAAO,OAA7B,SACI,eAAC,GAAD,CACIoB,QAAS,kBACLkT,EAAQ,gBAEZrsB,KAAMmsB,EACNrsB,KAAK,cALT,uBAWR,eAAC,GAAD,UACI,sBAAKgS,UAAWgE,EAAQ0W,gBAAxB,qBAIJ,eAAC,GAAD,UACI,eAAC,GAAD,CACIrT,QAAS,kBAAMkT,EAAQ,eACvBrsB,KAAMmsB,EACNrsB,KAAK,aAHT,8BAQJ,eAAC,GAAD,OAEHmuB,EAAY9sB,KAAI,SAACuH,GAAD,OACb,qCACI,gBAAC,GAAD,CAEIwU,oBACIA,GAHR,UAMI,eAAC,GAAD,UACI,eAAC,GAAD,UACI,eAAC,GAAD,UACKgD,GACGxX,EAAOlB,gBAKvB,eAAC,GAAD,UACI,eAAC,GAAD,CAAYsQ,KAAK,KAAjB,SACKpP,EAAOlB,aAGhB,eAAC,GAAD,UACI,eAAC,GAAD,CAAYsQ,KAAK,KAAjB,SACKpP,EAAO9F,aAGhB,eAAC,GAAD,UACI,eAAC,GAAD,CAAYkV,KAAK,KAAjB,SACKpP,EAAOkV,SAGhB,eAAC,GAAD,UACI,eAAC,GAAD,CAAY9F,KAAK,KAAjB,SACKpP,EAAOgmB,aAIhB,eAAC,GAAD,UACI,eAAC,GAAD,CACIvV,QAAS,kBACL6V,EAAetmB,IAFvB,yBApCCA,EAAOrB,oBAiDhC,WCzbd4nB,GAAyB,uCAAG,8BAAA9xB,EAAA,sEAGPmC,EAAkB8L,IAAlB,gDAHO,cAGxBtN,EAHwB,OAOtBE,EAASF,EAATE,KAPsB,kBAQvB,CACHkJ,WAAYtC,EAAc5G,EAAK2K,iBATL,2CAAH,qDAazBumB,GAAiB,uCAAG,8BAAA/xB,EAAA,sEACCmC,EAAkB/B,KAAlB,2BADD,cAChBO,EADgB,OAGdE,EAASF,EAATE,KAHc,kBAIfA,GAJe,2CAAH,qDCCjBrB,GACSC,yBADTD,GAESC,uCAFTD,GAGYC,+BAHZD,GAIaC,OAJbD,GAKKC,yCAoXIuyB,GAlWS,SAAC,GAAkB,IAAhBxZ,EAAe,EAAfA,SACvB,EAA8CqW,kBAAQxS,IAAtD,mBAAO4V,EAAP,KAAwBC,EAAxB,KACA,EAAuBrD,kBAAQpgB,IAAtB0jB,EAAT,oBACA,EAA4CtD,kBAAQvS,IAApD,mBAAOuV,EAAP,KAAuBO,EAAvB,KACA,EAA+B3U,oBAAS,GAAxC,mBAAOwT,EAAP,KAAgBoB,EAAhB,KACA,EAAsBxD,kBAAQtS,IAArB+V,EAAT,oBACA,EAA4D7U,oBAAS,GAArE,mBAAO8U,EAAP,KAA+BC,EAA/B,KACA,EAAwC/U,wBACpCva,GADJ,mBAAOuvB,EAAP,KAAqBC,EAArB,KAIMC,EAAuB,WACpBJ,IACDC,GAA0B,GAC1BT,KACAa,aAAY,WACR5kB,MAzCc,OA8CpB6kB,EAAgB,uCAAG,WACrBC,GADqB,uBAAA9yB,EAAA,yDAGf+yB,EAAQ,CACVlyB,KAAMiyB,EAAYjyB,KAClBwB,YAAY,EACZC,gBAAYY,KAGV8vB,EAAoBhyB,aAAaY,QAAQ,aAT1B,wBAYX2J,EAASrK,KAAKW,MAAMmxB,GAZT,SAaM3kB,EAAkB9C,EAAOrB,UAb/B,OAaXvJ,EAbW,OAcXyB,EAAU6K,EAAQhJ,MAAMtD,EAASE,MAEvCkyB,EAAMzwB,WAAaF,EACnBkwB,EAAU,CAAC/mB,EAAOkV,OAClByR,GAAmB,GACnBE,GAAkB,GAClBC,GAAY,GACZF,EAAWY,GArBM,wBAuBjBZ,EAAWY,GACX/xB,aAAaC,QAAQ,eAAgBC,KAAKZ,UAAUyyB,IACpDb,GAAmB,GACnBE,GAAkB,GAClBC,GAAY,GA3BK,4CAAH,sDA+BhBY,EAAuB,uCAAG,WAAOH,GAAP,mBAAA9yB,EAAA,sEACLqO,EACnBykB,EAAYjyB,KAAKqyB,oBAFO,QACtBvyB,EADsB,SAKZA,EAASoB,OACrBf,aAAaC,QAAQ,eAAgB,MACjCN,EAASoB,OAASpB,EAASoB,MAAMoxB,SACjCT,EAAgB/xB,EAASoB,MAAMoxB,WAGnCT,OAAgBxvB,GACVkwB,EAAgBnmB,EAAQhJ,MAAMtD,EAASE,MACvCkyB,EAAQ,CACVlyB,KAAMiyB,EAAYjyB,KAClBwB,YAAY,EACZC,WAAY8wB,GAGhBd,EAAUQ,EAAYjyB,KAAK6wB,YAE3B1wB,aAAaC,QAAQ,eAAgBC,KAAKZ,UAAUyyB,IAEpDZ,EAAWY,GAEPD,EAAYjyB,MACZqxB,GAAmB,IAI3BG,GAAY,GA9BgB,2CAAH,sDAkCvBgB,EAAQ,uCAAG,WAAOC,GAAP,uBAAAtzB,EAAA,6DACPuzB,EAAgBvyB,aAAaY,QAAQ,iBAC3CjC,IAAMM,SAASC,QAAQC,OAAO,oBAAsB,iBAFvC,SAGUR,IAAMS,KAAN,UAChBZ,GADgB,iBAEnBa,IAAGC,UAAU,CACTC,WAAY,qBACZC,aAAchB,GACdiB,UAAWjB,GACX+zB,gBACAD,UAVK,cAGP3yB,EAHO,OAcPC,EAAkBD,EAASE,KAEjCG,aAAaC,QAAQ,YAAaC,KAAKZ,UAAUM,IAhBpC,SAkBaoN,IAlBb,OAkBP8kB,EAlBO,SAmBPU,EAAWV,EAAYjyB,KAAK6wB,cAIM,IAAnC8B,EAAStO,QAAQ,eACoB,IAAlCsO,EAAStO,QAAQ,aAKrB+N,EAAwBH,GACxBH,MAJAE,EAAiBC,GACjBH,KAMJvxB,OAAOqyB,QAAQC,aACX,GACA3a,SAAS3H,MACThQ,OAAOC,SAASsyB,UApCP,4CAAH,sDAyCRC,EAAS,uCAAG,WAAON,GAAP,mBAAAtzB,EAAA,yDACdqyB,GAAY,KACNtyB,EAAWiB,aAAaY,QAAQ,eAErB0xB,EAJH,iCAKgBtlB,IALhB,OAKJ8kB,EALI,SAMJU,EAAWV,EAAYjyB,KAAK6wB,cAIM,IAAnC8B,EAAStO,QAAQ,eACoB,IAAlCsO,EAAStO,QAAQ,aAKrB+N,EAAwBH,GACxBH,MAJAE,EAAiBC,GACjBH,KAdM,wBAmBHW,GAAiB,KAATA,EACfD,EAASC,GACDvzB,GAAauzB,IACrBpB,GAAmB,GACnBG,GAAY,IAvBF,4CAAH,sDA2BfvU,qBAAU,WACN,IAAMoI,EAAc9kB,OAAOC,SAAS6rB,OAE9BoG,EADS,IAAIO,gBAAgB3N,GACfjY,IAAI,QACpBqlB,GACAQ,eAAe7yB,QAAQ,UAAWC,KAAKZ,UAAUc,OAAOC,WAG5DgxB,GAAY,GAEZuB,EAAUN,KAEX,IAGH,IAAMS,EAAM,uCAAG,iBAKIC,EALJ,aAAAh0B,EAAA,0FAAAA,EAAA,MAKX,WAAqCi0B,GAArC,qBAAAj0B,EAAA,6DACUk0B,EAAU,IAAIC,YACdtzB,EAAOqzB,EAAQE,OAAOH,GAFhC,SAGyB7yB,OAAOizB,OAAOC,OAAOC,OAAO,UAAW1zB,GAHhE,cAGU0zB,EAHV,OAIUC,EAAeC,YAAaF,GAJtC,kBAOWC,EACFpV,QAAQ,MAAO,KACfA,QAAQ,MAAO,KACfA,QAAQ,KAAM,KAVvB,4CALW,uBAKI4U,EALJ,4CAkBLT,EAAgBmB,WAAsB,KAE5CV,EAAsBT,GAAeoB,MAAK,SAACC,GACvC5zB,aAAaC,QAAQ,gBAAiBsyB,GACtC,IAAMsB,EAAU,CAAC,gBAAD,OACIr1B,IADJ,gBAEHA,IAFG,wBAGKA,IAHL,oBAICA,IAJD,sDAMMo1B,GAIlB,gBACFE,KAAK,KAEP1zB,OAAOC,SAASC,KAAhB,UAA0B9B,GAA1B,6BAAqEq1B,MAnC9D,2CAAH,qDAmEZ,OAAI5D,EAEI,sBAAK5X,MAAO,CAAE+W,UAAW,SAAzB,SACI,eAAC,GAAD,OAKP6B,GAAmBJ,EAEhB,uCACI,eAAC,GAAD,IAYI,QAKZI,EAEI,iCAYQ,KACHzZ,KAMT,eAAC,GAAD,CACIL,QAAS,KACTC,aAAW,EACXC,WAAS,EACTC,KAAM,eAACwG,GAAD,CAAU/I,MAAM,SAJ1B,SAMI,uCAYQ,KACF0c,EAoBE,uCACI,eAAC,GAAD,CAAYpZ,MAAO,CAAE4G,aAAc,QAAUtF,KAAK,IAAlD,SACKmQ,GAAO,4BAEZ,eAAC,GAAD,CACI1P,IAAI,IACJT,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QACvB/E,MAAM,SAJV,SAMKuX,EACG,eAAC,GAAD,CACIrX,IAAI,IACJT,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QACvB/E,MAAM,SAJV,SAMKuX,IAEL,OAER,eAAC,GAAD,CAAQ9X,KAAK,SAASqB,QAzI3B,WACX,IAAMra,EAAYX,aAAaY,QAAQ,aAEjCmzB,EADkB7zB,KAAKW,MAAMF,GAChBqzB,SAGb/K,EAAejpB,aAAaY,QAAQ,gBAC1CZ,aAAaG,QACbH,aAAaC,QAAQ,eAAgBgpB,GAErC,IAAM4K,EAAU,CAAC,iBAAD,OACKE,GADL,mCANKt1B,iCASnBq1B,KAAK,KAEDG,EAAS,iDAA6CJ,GAE5DzzB,OAAOC,SAASC,KAAO2zB,EAEvBt1B,IAAMsO,IAAIgnB,GAAWN,MAAK,WACtBvzB,OAAOqyB,QAAQC,aACX,GACA3a,SAAS3H,MACThQ,OAAOC,SAASsyB,cAkHR,uBAxCJ,uCACI,eAAC,GAAD,CAAYta,MAAO,CAAE4G,aAAc,QAAUtF,KAAK,IAAlD,uBAIA,eAAC,GAAD,CACIS,IAAI,IACJT,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QACvB/E,MAAM,SAJV,wEASA,eAAC,GAAD,CAAQP,KAAK,SAASqB,QAAS+X,EAA/B,yBCnXXmB,GAAW,CACpBC,cAAe,EACfC,OAAQ,GCIGC,GAFD,CAAE7kB,WAASsJ,MCJX,CACVwb,oBAAqB,YDGOtmB,UAAQkmB,aEClCzf,GAAYC,cAAgB,SAAC+C,GAAD,MAAY,CAC1CvC,UAAU,cACNzQ,SAAU,WACV2qB,UAAW3X,EAAMqB,MAAMwb,oBACvBra,MAAOxC,EAAMjI,QAAQO,UACrB2K,UAAW,QACX3F,MAAO,OACPI,gBAAiBnH,GAAOiB,SANnB,6BAOkBsL,GAAYC,QAP9B,OAO6C,CAC9C4U,UAAU,QAAD,OAAU3X,EAAMqB,MAAMwb,oBAAtB,kBAWNC,GANU,SAAC,GAAkB,IAAhB/c,EAAe,EAAfA,SAClBG,EAAUlD,KAEhB,OAAO,sBAAKd,UAAWgE,EAAQzC,UAAxB,SAAoCsC,KCTzCgd,GAA4D,SAAC,GAG5D,IAFHC,EAEE,EAFFA,KACAC,EACE,EADFA,QAEA,OAAKD,EAGD,gBAAC,GAAD,CACItd,QAAS,KACTC,aAAW,EACXC,WAAS,EACTC,KAAM,eAACqd,GAAD,CAAU5f,MAAM,SAJ1B,UAMI,eAAC,GAAD,CACIsD,MAAO,CAAE4G,aAAc,QACvBtF,KAAK,IACLO,MAAM,SAHV,SAKKd,GAAE,sCAEP,eAAC,GAAD,CACIgB,IAAI,IACJT,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QACvB/E,MAAM,SAJV,SAMKd,GAAE,qCAEP,eAAC,GAAD,CAAQO,KAAK,SAASqB,QAAS,kBAAM0Z,GAAWA,KAAhD,SACKtb,GAAE,0CAzBG,MCDhB3E,GAAYC,aAAgB,CAC9BQ,UAAW,CACPvF,WAAY3B,GAAOC,MACnB8G,MAAO,QAEX6f,KAAK,cACDhf,QAAS,OACTb,MAAO,OACPe,WAAY,SACZiB,eAAgB,SAChBvB,QAAS,SACTqf,UAAW,OACXC,SAAU,OACVze,OAAQ,GARR,6BASuBkE,GAAYC,QATnC,OASkD,IAEtDhT,KAAK,cACDmI,WAAY,OACZolB,SAAU,EACVvf,QAAS,SAHT,6BAIuB+E,GAAYC,QAJnC,OAIkD,CAC9C,IAAK,CACDhF,QAAS,QAEb,gBAAiB,CACbJ,aAAc,cACdI,QAAS,oBAEb,eAAgB,CACZJ,aAAc,cACdI,QAAS,sBAIrB/F,KAAM,CACFmG,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBR,eAAgB,OAChB0D,MAAOjM,GAAOI,MACdsL,SAAU,OACVlE,QAAS,UACTJ,aAAc,MACdqB,WAAY,UACZ,oBAAqB,CACjBC,OAAQ,UACRvB,gBAAiBnH,GAAOC,MACxBgM,MAAOjM,GAAOE,UAUpB8mB,GAA4B,SAAC,GAAmB,IAAjBlZ,EAAgB,EAAhBA,MAAOlH,EAAS,EAATA,GAClC+C,EAAUlD,KAChB,EAAsBoZ,kBAAQpgB,IAAvBiiB,EAAP,oBACA,EAAkDjT,oBAAS,GAA3D,mBAAOwY,EAAP,KAA0BC,EAA1B,KAEA,MAAW,gBAAPtgB,GAAwB8a,EAAYruB,WAEhC,uCACI,qBAAIsS,UAAWgE,EAAQnQ,KAAvB,SACI,eAAC,IAAD,CACIoN,GAAIA,EACJoG,QAAS,SAACgC,GACNA,EAAEmY,iBACFD,GAAqB,IAEzBvhB,UAAW,gBAAGjS,EAAH,EAAGA,SAAH,gBACJiW,EAAQlI,KADJ,YACY/N,EAAW,SAAW,SAPjD,SAUI,+BAAMoa,QAGd,eAAC,GAAD,CACI2Y,KAAMQ,EACNP,QAAS,kBAAMQ,GAAqB,SAOhD,qBAAIvhB,UAAWgE,EAAQnQ,KAAvB,SACI,eAAC,IAAD,CACIoN,GAAIA,EACJjB,UAAW,gBAAGjS,EAAH,EAAGA,SAAH,gBACJiW,EAAQlI,KADJ,YACY/N,EAAW,SAAW,SAHjD,SAMI,+BAAMoa,SAMhBsZ,GAAiB,SAAC,GAAkB,IAAhB5d,EAAe,EAAfA,SAChBG,EAAUlD,KACV2b,EAASjC,KAEf,OACI,sBAAKxa,UAAWgE,EAAQzC,UAAxB,SACI,sBAAKvB,UAAWyc,EAAOlb,UAAvB,SACI,qBAAIvB,UAAWgE,EAAQid,KAAvB,SAA8Bpd,SCjHxC6d,GAAqB,CACvB,CACIzgB,GAAI,kBACJkH,MAAO,uCAEX,CACIlH,GAAI,uBACJkH,MAAO,uCAEX,CACIlH,GAAI,qBACJkH,MAAO,2CAEX,CACIlH,GAAI,cACJkH,MAAO,mCAEX,CACIlH,GAAI,qBACJkH,MAAO,2CAuBTwZ,GAAW,WACb,MAAsBzH,kBAAQpgB,IAExB8nB,GAFN,oBAEmBF,IAEnB,OACI,eAAC,GAAD,UACKE,EAAWvyB,KAAI,SAACyM,GACb,OACI,eAAC,GAAD,CAEImF,GAAInF,EAAKmF,GACTkH,MAAO1C,GAAE3J,EAAKqM,QAFTrM,EAAKqM,aC5DrB0Z,GAAS,WAClB,IAAM70B,EAAYX,aAAaY,QAAQ,aAEjCmzB,EADkB7zB,KAAKW,MAAMF,GAChBqzB,SAGb/K,EAAejpB,aAAaY,QAAQ,gBAC1CZ,aAAaG,QACbH,aAAaC,QAAQ,eAAgBgpB,GAErC,IAAM4K,EAAU,CAAC,iBAAD,OACKE,GADL,mCANKt1B,iCAUnBq1B,KAAK,KAEDG,EAAS,UAAMx1B,yBAAN,0BAA4Do1B,GAE3EzzB,OAAOC,SAASC,KAAO2zB,EAEvBt1B,IAAMsO,IAAIgnB,GAAWN,MAAK,WACtBvzB,OAAOqyB,QAAQC,aACX,GACA3a,SAAS3H,MACThQ,OAAOC,SAASsyB,cCVtBle,GAAYC,cAAgB,SAAC+C,GAAD,MAAY,CAC1CvC,UAAW,CACPzQ,SAAU,QACV0Q,gBAAiBsC,EAAMjI,QAAQI,mBAC/BmF,MAAO,OACPJ,IAAK,EACLK,OAAQ,cACR4Z,aAAa,aAAD,OAAenX,EAAMjI,QAAQlB,aACzCqB,WAAY3B,GAAOE,MACnB+G,OAAQ,EACR,mBAAoB,CAChBsD,aAAc,SAGtBkd,YAAY,6CACelb,GAAYC,QAD5B,OAC2C,CAC9C5E,QAAS,SAGjB8f,MAAO,CACH1gB,OAAQyC,EAAMqB,MAAMwb,oBACpB1e,QAAS,OACTmB,eAAgB,gBAChBjB,WAAY,UAEhB6f,UAAW,CACP/f,QAAS,OACTZ,OAAQ,OACRM,SAAU,YAEdsgB,eAAgB,CACZ7f,UAAW,QACXH,QAAS,OACTmB,eAAgB,SAChBjB,WAAY,SACZmE,MAAOjM,GAAOI,OAElBynB,YAAa,CACTtf,eAAgB,YAChB0D,MAAO,UACPvD,OAAQ,UACR,6BAA8B,CAC1BlF,QAAS,QAGjBskB,UAAW,CACP7b,MAAOxC,EAAMzJ,OAAOU,UAExBqnB,wBAAyB,CACrBvgB,QAAS,SACTT,MAAO,QAEXihB,KAAM,GACNC,cAAe,CACXrgB,QAAS,OACTE,WAAY,SACZkB,YAAa,OACbN,OAAQ,eAIVwf,GAA0B,WAAO,IAAD,EAC5Bve,EAAUlD,KACV2b,EAASjC,KACf,EAA+BN,kBAAQpgB,IAAvC,mBAAOrM,EAAP,KAAgB+0B,EAAhB,KACA,EAA+CtI,kBAAQxS,IAAvD,mBAAO4V,EAAP,KAAwBd,EAAxB,KACA,EAA4CtC,kBAAQvS,IAApD,mBAAOuV,EAAP,KAAuBO,EAAvB,KA8DA,OACI,uBAAKzd,UAAWgE,EAAQzC,UAAxB,UACI,uBAAKvB,UAAS,UAAKyc,EAAOlb,UAAZ,YAAyByC,EAAQ+d,OAA/C,UACI,eAAC,IAAD,CAAM/hB,UAAS,UAAKgE,EAAQge,UAAb,iBAAuC/gB,GAAG,IAAzD,SACI,eAACwhB,GAAD,CAAKnc,MAAM,cAEf,uBAAKtG,UAAWgE,EAAQie,eAAxB,UACK3E,EACG,gBAAC,GAAD,CACI5Y,MAAO,CACHzC,QAAS,OACTE,WAAY,SACZkB,YAAa,OACbN,OAAQ,WAEZ5U,KAAK,SACLkZ,QAAS,YAnEV,WACnB,IAAMuE,EAASxH,SAASse,cAAc,WAClC9W,GACAnf,OAAOk2B,SAAS,CACZ3hB,IAAK4K,EAAOgX,wBAAwB5hB,IACpCG,KAAM,EACN0hB,SAAU,WA8DMC,IATR,UAYI,eAAC,GAAD,CACI1hB,MAAM,OACN2L,YAAU,EACVD,YAAY,MAHhB,SAKI,eAACiW,GAAD,MAGJ,eAAC,GAAD,CAAYtc,IAAI,IAAIT,KAAK,KAAzB,yBAIJ,KAtEZ,qCACKsX,GAAoBA,IAAoBJ,EACrC,gBAAC,GAAD,CACIzW,IAAI,IACJT,KAAK,KACLtB,MAAO,CACHzC,QAAS,OACTE,WAAY,SACZkB,YAAa,OACbN,OAAQ,WAPhB,UAWI,eAAC,GAAD,CAAa3B,MAAM,OAAO2L,YAAU,EAACD,YAAY,MAAjD,SACI,sBACIpI,MAAO,CACHtD,MAAO,OACPC,OAAQ,OACRQ,QAAS,MACTyE,MAAOjM,GAAOC,OALtB,SAQI,eAAC0oB,GAAD,QAIR,eAAC,IAAD,CACIhjB,UAAWgE,EAAQke,YACnBjhB,GAAG,gBAFP,6BAOJ,OAyCCqc,IAAqBA,GAAmBJ,EACrC,uCACKI,GACG,qCACI,gBAAC,GAAD,CACI7W,IAAI,IACJT,KAAK,KACLtB,MAAO,CAAErB,YAAa,QAH1B,UAKI,uBAAMrD,UAAWgE,EAAQme,UAAzB,SACK1c,GACG,oCAGR,eAAC,IAAD,CACIzF,UAAWgE,EAAQke,YACnBjhB,GAAG,cAFP,gBAIKxT,QAJL,IAIKA,GAJL,UAIKA,EAASE,kBAJd,aAIK,EAAqB+H,gBAqBtC,eAAC,GAAD,CACIvH,KAAK,UACL6X,KAAK,QACLqB,QAASwa,GAHb,SAKKpc,GAAE,mCAGX,KACHhY,GAAWA,EAAQC,YAAc4vB,EAC9B,eAAC,GAAD,CACInvB,KAAK,UACL6X,KAAK,QACLqB,QArJH,WACjB,IAAM4b,EAAmB52B,aAAaY,QAAQ,gBACxCf,EAAoBK,KAAKW,MAAM+1B,GACrC/2B,EAAKyB,gBAAaY,EAClBlC,aAAaC,QAAQ,eAAgBC,KAAKZ,UAAUO,IACpDs2B,EAAYt2B,GACZuxB,GAAkB,GAClBjB,GAAoB,IA2IJ,SAKK/W,GAAE,sCAEP,WAGZ,sBAAKzF,UAAWgE,EAAQ8d,YAAxB,SACI,eAAC,GAAD,UC1OVoB,I,OAAwB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAyF7DC,GAvFe,SAAC,GAAkB,IAAhBtf,EAAe,EAAfA,SAC7B,EAAgCiF,oBAAkB,GAAlD,mBAAOsa,EAAP,KAAiBC,EAAjB,KACA,EAAwCva,wBACpCva,GADJ,mBAAOuvB,EAAP,KAAqBC,EAArB,KAGA,EAA8CjV,wBAC1Cva,GADJ,mBAAO+0B,EAAP,KAAwBC,EAAxB,KAIApa,qBAAU,WACN,IAGMqa,EAAgBz4B,EAAc6B,aAAaZ,SAASc,KACtD,SAACd,GACG,OAAOA,KAEX,SAACoB,GAaG,OAZIA,EAAMpB,SAASuB,OAAS,MAPhC81B,GAAY,GASJtF,EACI3wB,EAAMpB,SAASE,KAAKsyB,SACgB,KAAhCpxB,EAAMpB,SAASE,KAAKsyB,QAClBpxB,EAAMpB,SAASE,KAAKsyB,QACpB,mDAGV+E,EAAmBn2B,EAAMpB,SAASuB,SAG/B,CACHH,MAAOA,EAAMpB,SAASE,SAIlC,OAAO,WACHnB,EAAc6B,aAAaC,QAAQ42B,MAAMD,MAE9C,IAcH,OACI,uCACI,qCAAG3f,IAEFuf,EACG,gBAAC,GAAD,CACI5f,QAAS,KACTC,aAAW,EACXC,WAAS,EACTC,KAAM,eAACwG,GAAD,CAAU/I,MAAM,SAJ1B,UAMI,eAAC,GAAD,CACIsD,MAAO,CAAE4G,aAAc,QACvBtF,KAAK,IACLO,MAAM,SAHV,+BAOA,eAAC,GAAD,CACIE,IAAI,IACJT,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QACvB/E,MAAM,SAJV,SAMKuX,IAEL,eAAC,GAAD,CAAQ9X,KAAK,SAASqB,QAtClB,WACZic,IACwD,IAApDJ,GAAsB3S,QAAQ+S,KAC9B72B,OAAOC,SAASC,KAAO,uBAI/BoxB,OAAgBxvB,GAChB80B,GAAY,GACZE,OAAmBh1B,IA6BP,mBAIJ,S,SCxFVuS,GAAYC,aAAgB,CAC9BQ,UAAW,KAaAmiB,GAVW,WACtB,IAAM1f,EAAUlD,KAEhB,OACI,sBAAKd,UAAWgE,EAAQzC,UAAxB,SACI,4BCRNT,GAAYC,cAAgB,iBAAO,CACrCoK,IAAK,CACD3J,gBAAiB,0BACjBJ,MAAO,cACPkF,MAAOjM,GAAOU,SACdkH,QAAS,OACTR,aAAc,MACdI,QAAS,oBACTkE,SAAU,gBAIZ4d,GAAkB,SAAC,GAAkB,IAAhB9f,EAAe,EAAfA,SACjBG,EAAUlD,KAEhB,OAAO,sBAAKd,UAAWgE,EAAQmH,IAAxB,SAA8BtH,KCGnC/C,GAAYC,cAAkD,iBAAO,CACvE6iB,KAAK,cACD3hB,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChB3B,aAAc,MACdkB,UAAW,aACXC,eAAgB,OAChBoK,YAAa,MACb5K,UAAW,SACXU,WAAY,WACZpB,UAAW,EACXsB,OAAQ,iBACRxB,gBAAiB,UACjB,UAAW,CACPuB,OAAQ,qBAAG8gB,WAA+B,UAAY,WACtDriB,gBAAiB,WAErB,qBAAsB,OACtB,kBAAmB,OACnB1Q,SAAU,WACV2R,MAAO,YAAsB,IAAnBuD,EAAkB,EAAlBA,KACN,OADwB,EAAZvD,OACA,WAAQuD,EAAO,EAAf,OAEhB8d,OAAQ,YAAuB,IAApB9d,EAAmB,EAAnBA,KACP,OAD0B,EAAb8d,QACA,WAAQ9d,EAAO,EAAf,OAEjBhF,IAAK,QA1BL,6BA4BuB4F,GAAYC,QA5BnC,OA4BkD,CAC9C,IAAK,KAMb+C,KAAM,CACF3H,QAAS,YAIX8hB,GAA4B,SAAC,GAM5B,IALHC,EAKE,EALFA,OACA3c,EAIE,EAJFA,QAIE,IAHFrB,YAGE,MAHK,GAGL,EAFFvD,EAEE,EAFFA,MACAqhB,EACE,EADFA,OAEMhgB,EAAQC,cACR8f,IAAexc,EACfrD,EAAUlD,GAAU,2BAAK,CAAEkF,OAAM6d,aAAYphB,QAAOqhB,WAAjC,IAA2ChgB,WAE9D1C,EAAQ4E,EAAI,UAAMA,EAAN,MAAiB,OAEnC,OACI,0BAAQ7X,KAAK,SAASkZ,QAASA,EAASrH,UAAWgE,EAAQ4f,KAA3D,UACKI,GAAU,eAACC,GAAD,CAAU7iB,MAAOA,EAAOkF,MAAM,aACvC0d,GAAU,eAACE,GAAD,CAAY9iB,MAAOA,EAAOkF,MAAM,gBC1ElD6d,GAAW,uCAAG,WAAO30B,EAAYrB,GAAnB,SAAA9C,EAAA,wGAGTN,EAAcU,KAHL,0BAGe,KAAM,CACjCoC,OAAQ,CACJ,oBAAqB2B,EACrB,sBAAuBrB,MANf,2CAAH,wDAWXi2B,GAAc,uCAAG,WAAO50B,EAAYrB,GAAnB,SAAA9C,EAAA,sGAGZN,EAAcs5B,OAHF,wBAGc,CAC7Bx2B,OAAQ,CACJ,oBAAqB2B,EACrB,sBAAuBrB,MANZ,2CAAH,wDCPd2S,GAAYC,cAAgB,iBAAO,CACrCujB,KAAM,CACFljB,MAAO,OACPtQ,SAAU,WACVmR,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBT,UAAW,aACXC,eAAgB,OAChBE,WAAY,WACZpB,UAAW,EACXsB,OAAQ,IACRhH,WAAY,OACZ,UAAW,CACP+G,OAAQ,WAEZ,qBAAsB,OACtB,kBAAmB,QAEvBwhB,SAAU,CACNzzB,SAAU,WACVwV,MAAOjM,GAAOU,SACdgL,SAAU,OAGV/E,IAAK,MACLG,KAAM,MACNX,UAAW,6BAIbgkB,GAA8B,SAAC,GAA2B,IAAzBnd,EAAwB,EAAxBA,QAASxD,EAAe,EAAfA,SACtCG,EAAUlD,KAEhB,OACI,0BAAQ3S,KAAK,SAASkZ,QAASA,EAASrH,UAAWgE,EAAQsgB,KAA3D,UACI,eAAC,GAAD,CAAMljB,MAAM,OAAOkF,MAAM,4BACzB,uBAAMtG,UAAWgE,EAAQugB,SAAzB,SAAoC1gB,Q,SCnC1C/C,GAAYC,aAAgB,CAC9B,uBAAwB,CACpB/M,KAAM,CACFqN,OAAQ,GAEZJ,GAAI,CACAI,OAAQ,0CAGhB,qBAAsB,CAClBrN,KAAM,CACFqN,OAAQ,yCAEZJ,GAAI,CACAI,OAAQ,IAGhBojB,UAAW,CACP3zB,SAAU,WACV2Q,aAAc,MACdD,gBAAiB,OACjBwB,OAAQ,gCACRnB,QAAS,aAEb2B,QAAS,CACL1S,SAAU,WACV4nB,IAAK,QACLgM,WAAY,UACZljB,gBAAiB,cACjBK,QAAS,EACTR,OAAQ,OACRsjB,KAAM,EACN1iB,QAAS,OACTE,WAAY,SACZiB,eAAgB,gBAChB2C,SAAU,OACVI,WAAY,EACZG,MAAO,uBACP5E,UAAW,6BACXN,MAAO,OACP2B,OAAQ,WAEZ6hB,MAAO,CACHxjB,MAAO,MACPqB,MAAO,MACP3R,SAAU,WACV0P,UAAW,iBACXsC,WAAY,kBACZ,0BAA2B,CACvBtC,UAAW,iBAGnB3M,KAAM,CACF8Q,SAAU,SACV8W,UAAW,EAEX,gBAAiB,CACbA,UAAW,EACXoJ,oBAAqB,EACrBC,qBAAsB,GAG1B,eAAgB,CACZC,uBAAwB,EACxBC,wBAAyB,GAG7B,iBAAkB,CACdl0B,SAAU,WACVwQ,OAAQ,IAGhB4K,OAAQ,CACJwM,IAAK,QACLpS,MAAOjM,GAAOU,UAGlB0B,MAAO,CACH6J,MAAOjM,GAAOU,UAElB9E,QAAS,CACL0O,SAAU,SACVoB,SAAU,GACVO,MAAO,QACP2e,cAAe,UACf,uBAAwB,CACpBnjB,UAAU,mDAEd,yBAA0B,CACtBA,UAAU,kDAGlBojB,YAAa,CACTrjB,QAAS,QAEbsjB,eAAgB,CACZtjB,QAAS,UAIXujB,GAA6B,SAAC,GAAyB,IAAvBvhB,EAAsB,EAAtBA,SAAUpH,EAAY,EAAZA,MACtCuH,EAAUlD,KAEhB,OACI,eAAC,KAAD,CAAyB3S,KAAK,WAAW6R,UAAWgE,EAAQygB,UAA5D,SACI,gBAAC,KAAD,CAAyBrb,MAAM,SAASpJ,UAAWgE,EAAQnQ,KAA3D,UACI,eAAC,KAAD,CAA2BmM,UAAWgE,EAAQkI,OAA9C,SACI,gBAAC,KAAD,CAA4BlM,UAAWgE,EAAQR,QAA/C,UACI,eAAC,GAAD,CAAY8C,MAAOjM,GAAOU,SAAU0L,IAAI,KAAKT,KAAK,IAAlD,SACKvJ,IAEL,eAAC4oB,GAAD,CACIrlB,UAAWgE,EAAQ4gB,MACnBte,MAAM,cAIlB,eAAC,KAAD,CAA4BtG,UAAWgE,EAAQ/N,QAA/C,SACK4N,U,oDCxGf/C,GAAYC,aAAkD,CAChEQ,UAAW,CACPF,OAAQ,SACRY,QAAS,OACTE,WAAY,SACZ4D,SAAU,QAEd2D,MAAO,CACH5Y,SAAU,WACV+M,QAAS,EACT,kBAAmB,CACf5H,QAAS,QAEb,0BAA2B,CACvBA,QAAS,MAEb,0BAA2B,CACvBgR,QAAQ,GAAD,OAAK5M,GAAOC,MAAZ,eAGf6N,MAAO,CACHrX,SAAU,WACVmR,QAAS,eACT8F,YAAa,WACbnD,aAAc,qBAAG0gB,SAA2B,WAAa,GACzDjkB,OAAQ,SACRgB,WAAY,UACZiE,MAAOjM,GAAOI,MACdsI,OAAQ,UACR,oBAAqB,CACjBjS,SAAU,WACVmF,QAAS,KACTgM,QAAS,eACTR,aAAc,SACdD,gBAAiB,qBAAG+jB,UACJlrB,GAAOC,MAAQD,GAAOE,QAE1C,WAAY,CACR8G,OAAQ,SACRD,MAAO,SACP4B,OAAO,aAAD,OAAe3I,GAAOC,OAC5B6G,KAAM,qBAAGmkB,SAAgC,OAAJ,GACrC7iB,MAAO,qBAAG6iB,SAA2B,EAAI,QACzCtkB,IAAK,KAET,UAAW,CACPK,OAAQ,SACRD,MAAO,OACPokB,WAAW,gBAAD,OAAkBnrB,GAAOE,OACnC0gB,aAAa,gBAAD,OAAkB5gB,GAAOE,OACrCkH,aAAc,IACdjB,UAAW,iBACXW,KAAM,qBAAGmkB,SAAwC,OAAZ,WACrC7iB,MAAO,qBAAG6iB,SAAqC,MAAT,QACtCtkB,IAAK,aA4BFykB,GAvBkBnd,sBAC7B,WAAiElB,GAAS,IAAvEe,EAAsE,EAAtEA,MAAO4B,EAA+D,EAA/DA,SAAUwb,EAAqD,EAArDA,UAAW/1B,EAA0C,EAA1CA,GAA0C,IAAtC81B,gBAAsC,SAAjB3oB,EAAiB,mBAC/DmH,EAAQC,cACRC,EAAUlD,GAAU,2BAAK,CAAEykB,YAAWD,aAAnB,IAA+BxhB,WACxD,OACI,uBAAK9D,UAAWgE,EAAQzC,UAAxB,UACI,gDACIpT,KAAK,WACL6R,UAAWgE,EAAQ0F,MACnBla,GAAIA,GAAM2Y,EACVud,QAASH,GACL5oB,GALR,IAMIyK,IAAKA,EACL2C,SAAUA,KAEd,wBAAOR,QAAS/Z,GAAM2Y,EAAOnI,UAAWgE,EAAQmE,MAAhD,SACKA,UCtFfrH,GAAYC,aAAgB,CAC9BmkB,YAAa,CACTrjB,QAAS,YAIX8jB,GAAwB,SAAC,GAAyC,IAAvC3M,EAAsC,EAAtCA,MAAO4M,EAA+B,EAA/BA,aAAcC,EAAiB,EAAjBA,WAC5C7hB,EAAUlD,KAEhB,OACI,qCACKkY,EAAM3pB,KAAI,SAACwE,GACR,OACI,sBAAqBmM,UAAWgE,EAAQkhB,YAAxC,SACI,eAAC,GAAD,CACI1c,SAAU,WACNod,EAAa/xB,IAEjBsU,MAAOtU,EAAK7F,KACZu3B,UAAWM,EAAWhyB,MANpBA,EAAK7F,YCR7B8S,GAAYC,cAAgB,SAAC+C,GAAD,YAAY,CAC1C,wBAAyB,CACrB9P,KAAM,CACFwM,UAAW,oBAEfS,GAAI,CACAT,UAAW,kBAGnBe,WAAS,GACL+E,MAAOxC,EAAMjI,QAAQO,UACrBiF,OAAQ,QACRD,MAAO,OACPO,SAAU,OACV7Q,SAAU,QACVwQ,OAAQif,GAASE,OACjBzf,IAAK,EACLQ,gBAAiBsC,EAAMjI,QAAQI,mBAE/B6pB,WAAY,SACZnhB,SAAU,SACVnE,UAAW,mBACXsC,WAAY,cACZL,MAAO,EAEPf,UAAW,oCAhBN,4CAiBkBkF,GAAYC,QAjB9B,OAiB6C,CAC9C,IAAK,CACDzF,MAAO,WAnBV,eAsBL,WAAY,CACRZ,UAAW,gBACXslB,WAAY,YAxBX,GA2BTtjB,OAAQ,CACJ1R,SAAU,WACVwQ,OAAQif,GAASE,OAAS,EAC1Bhe,MAAO,EACPzB,IAAK,EACLiB,QAAS,eACTS,OAAQ,cACRjB,aAAc,MACdkB,UAAW,aACXC,eAAgB,OAChBC,WAAY,IACZT,UAAW,SACXU,WAAY,WACZ9G,WAAY,cACZ0F,UAAW,EACXL,OAAQ,OACRD,MAAO,OACP,UAAW,CACP2B,OAAQ,WAEZ,qBAAsB,OACtB,kBAAmB,OACnBC,OAAQ,IACR,cAAe,CACXnG,KAAMxC,GAAOiB,UAGrByqB,OAAQ,CACJhgB,SAAU,UAEdigB,MAAO,CACHjgB,SAAU,QAEdkgB,OAAQ,CACJlgB,SAAU,YAEdzD,QAAS,CACLxR,SAAU,QACVqQ,KAAM,IACNH,IAAK,IACLK,OAAQ,QACRD,MAAO,QACPE,OAAQ,SAIV4kB,GAA4B,SAAC,GAAmC,IAAjCriB,EAAgC,EAAhCA,SAAUsiB,EAAsB,EAAtBA,UAAWC,EAAW,EAAXA,KAChDC,EAAOhe,IAAMie,OAAuB,MACpCtiB,EAAUlD,KACVylB,EAAqB,SAACld,GACpBgd,GAAQA,EAAKG,SAAWH,EAAKG,QAAQC,SAASpd,EAAE5B,SAKhD4e,GACAA,EAAKG,SACLnd,EAAE5B,OAAO5C,UAAU4hB,SAAS,wBAM5BN,GACIC,GAAMA,KAIlB/d,IAAMc,WAAU,WACZ,GAAIgd,EAAW,CACX,IAAMhiB,EAAgBC,SAASC,gBAAgBC,YAEzCC,EADc9X,OAAO+X,WACUL,EAErCC,SAASK,KAAKC,MAAMC,SAAW,SAC/BP,SAASK,KAAKC,MAAME,aAApB,UAAsCL,EAAtC,MACAH,SAASK,KAAKI,UAAUC,IAAI,kBAE5BV,SAASK,KAAKC,MAAMC,SAAW,QAC/BP,SAASK,KAAKC,MAAME,aAAe,QACnCR,SAASK,KAAKI,UAAUG,OAAO,eAEpC,CAACmhB,IAEJ9d,IAAMc,WAAU,WAMZ,OAJA/E,SAAS6G,iBAAiB,UAAWyb,GACrCtiB,SAAS6G,iBAAiB,YAAasb,GAGhC,WACHniB,SAAS8G,oBAAoB,UAAWwb,GACxCtiB,SAAS8G,oBAAoB,YAAaqb,OAIlD,IAAMG,EAAe,SAACrd,GACJ,WAAVA,EAAE4M,KAAoBmQ,GAAQD,IAC9B9c,EAAEmY,iBACF4E,MAIR,OAAOO,IAASC,aACZ,uCACKT,EACG,sBACInmB,UAAWgE,EAAQ1B,QACnB+E,QAAS,kBAAM+e,KACfva,UAAW,EACXC,KAAK,SACL,aAAW,UACXC,UAAW,kBAAM9C,QAAQC,IAAI,eAEjC,KACJ,uBACIlJ,UAAS,UAAKgE,EAAQzC,UAAb,YACL4kB,EAAY,SAAW,UAE3B/e,IAAKif,EAJT,UAMI,yBAAQhf,QAAS+e,EAAMpmB,UAAWgE,EAAQxB,OAAQrU,KAAK,SAAvD,SACI,eAAC+W,GAAD,CAAW9D,MAAM,OAAOkF,MAAOjM,GAAOU,aAE1C,qCAAG8I,GAAYA,UAGvBO,SAASyiB,eAAe,UCvJ1B/lB,GAAYC,aAAgB,CAC9BokB,eAAgB,CACZtjB,QAAS,OACT8C,SAAU,OACVtD,OAAQ,OACR4jB,cAAe,SAEnBC,YAAa,CACTrjB,QAAS,UAEbilB,iBAAkB,CACdxb,aAAc,QAElByb,aAAc,CACV9kB,QAAS,OACTnR,SAAU,WACVgzB,OAAQ,IACR1iB,MAAO,OACPS,QAAS,OACTV,KAAM,IACNG,OAAQ,EACRtF,WAAY3B,GAAOE,MACnBysB,UAAU,aAAD,OAAe3sB,GAAOM,aAC/B,aAAc,CACVymB,SAAU,GAEd,0BAA2B,CACvB/d,YAAa,QAKZ4jB,GAAa,WACtB,MAA0Cne,mBAAQ,eAC3C2G,KADP,mBAAOU,EAAP,KAAsB+W,EAAtB,KAGMljB,EAAUlD,KAChB,EAAiBoZ,kBAAQ7C,IAAlB1H,EAAP,oBACA,EAAgCuK,kBAAQ5C,IAAxC,mBAAOlH,EAAP,KAAiB+W,EAAjB,KACA,EAA4Bre,oBAAS,GAArC,mBAAOH,EAAP,KAAeye,EAAf,KAOAje,qBAAU,WACN+d,EAAiB9W,KAClB,CAACA,IAkCJ,OACI,iCACI,eAAC,GAAD,CACIjiB,KAAK,UACL6X,KAAK,QACLrC,KAAM,eAAC0jB,GAAD,CAAUxqB,KAAK,SACrBwK,QAAS,kBAAM+f,GAAU,IACzB1iB,MAAO,CAAEqD,YAAa,QAL1B,SAOKtC,GAAE,+BAEP,gBAAC,GAAD,CAAS0gB,UAAWxd,EAAQyd,KAAM,kBAAMgB,GAAU,IAAlD,UACI,eAAC,GAAD,CACI3gB,IAAI,KACJT,KAAK,KACLO,MAAM,SACNN,OAAO,OACPvB,MAAO,CAAEhC,OAAQ,eALrB,SAOKyT,GAAO,qCAEZ,uBAAKnW,UAAWgE,EAAQmhB,eAAxB,UACI,sBAAKnlB,UAAWgE,EAAQ8iB,iBAAxB,SACI,eAAC,GAAD,CACIrqB,MAAOgJ,GAAE,yCADb,SAGI,eAAC,GAAD,CACIuT,MAAOrJ,EAAON,WACduW,aA5DD,SAAC5yB,GACxB,IAAMgmB,EAAQ9I,GAAiBld,EAAWmd,GAC1C+W,EAAiBlO,IA2DO6M,WAAY,SACR7yB,GADQ,QAGNmd,EAAcd,WAAW1X,MACvB,SAACM,GAAD,OAAOA,EAAEzI,KAAOwD,EAAUxD,aAM9C,sBAAKwQ,UAAWgE,EAAQ8iB,iBAAxB,SACI,eAAC,GAAD,CACIrqB,MAAOgJ,GAAE,wCADb,SAGI,eAAC,GAAD,CACIuT,MAAOrJ,EAAOL,OACdsW,aAxEL,SAAC/W,GACpB,IAAMmK,EAAQ9H,GAAarC,EAAWsB,GACtC+W,EAAiBlO,IAuEO6M,WAAY,SAACx1B,GAAD,QACN8f,EAAcb,OAAO3X,MACnB,SAACM,GAAD,OAAOA,EAAEzI,KAAOa,EAAMb,aAM1C,sBAAKwQ,UAAWgE,EAAQ8iB,iBAAxB,SACI,eAAC,GAAD,CACIrqB,MAAOgJ,GAAE,uCADb,SAGI,eAAC,GAAD,CACIuT,MAAOrJ,EAAOnd,UACdozB,aAlFF,SAAC90B,GACvB,IAAMkoB,EAAQrI,GAAgB7f,EAAUqf,GACxC+W,EAAiBlO,IAiFO6M,WAAY,SAAC/0B,GAAD,QACNqf,EAAc3d,UAAUmF,MACtB,SAACM,GAAD,OAAOA,EAAEzI,KAAOsB,EAAStB,aAM7C,sBAAKwQ,UAAWgE,EAAQ8iB,iBAAxB,SACI,eAAC,GAAD,CACIrqB,MAAOgJ,GAAE,2CADb,SAGI,eAAC,GAAD,CACIuT,MAAOrJ,EAAOJ,qBACdqW,aA5FU,SAClC/L,GAEA,IAAMb,EAAQpI,GAA4BiJ,EAAK1J,GAC/C+W,EAAiBlO,IAyFO6M,WAAY,SACR7V,GADQ,QAGNG,EAAcZ,qBAAqB5X,MACjC,SAACsZ,GAAD,OAAOA,EAAEjjB,OAASgiB,EAAMhiB,eAO5C,sBAAKgS,UAAWgE,EAAQ8iB,iBAAxB,SACI,eAAC,GAAD,CACIrqB,MAAOgJ,GAAE,oCADb,SAGI,qCACKkK,EAAOH,aAAangB,KACjB,SAAC4gB,GACG,OACI,sBAEIjQ,UAAWgE,EAAQkhB,YAFvB,SAII,eAAC,GAAD,CACI1c,SAAU,YA9GpC,SAAC2Q,GACnB,IAAMH,EAAQlI,GAAYqI,EAAOhJ,GACjC+W,EAAiBlO,GA6G+BsO,CAAcrX,IAElB9H,MAAO8H,EAAMd,YACboW,YACMpV,EAAcX,aAAa7X,MACzB,SAACsZ,GAAD,OACIA,EAAEjjB,OACFiiB,EAAMjiB,WAZjBiiB,EAAMd,sBAwBvC,uBAAKnP,UAAWgE,EAAQ+iB,aAAxB,UACI,eAAC,GAAD,CACI1f,QA/HJ,WAChB6f,EAAiBzX,IACjB0X,EAAY1X,KA8HQthB,KAAK,YACL6X,KAAK,QAHT,SAKKP,GAAE,0CAEP,eAAC,GAAD,CAAQ4B,QAzKX,WACb+f,GAAU,GACVD,EAAYhX,IAuK+BnK,KAAK,QAAhC,SACKP,GAAE,mDCrNzB3E,GAAYC,aAAgB,CAC9BwmB,MAAO,CACHtlB,QAAS,OACTZ,OAAQ,cACR0Z,IAAK,OACLoG,SAAU,OACVtf,QAAS,kBAEblP,gBAAiB,CACbsP,QAAS,OACTkZ,WAAY,IACZtZ,QAAS,kBAEbN,UAAW,CACPU,QAAS,QAEbO,OAAO,2BACAiY,IACA,CACC1X,OAAQ,UACRL,OAAQ,EACRb,QAAS,MAKf2lB,GAAazmB,aAAgB,CAC/B0mB,KAAM,CACFxlB,QAAS,OACTkZ,WAAY,EACZnY,OAAO,aAAD,OAAe3I,GAAOkB,SAC5BS,WAAY,OACZsK,MAAO,OACPzE,QAAS,oBACTJ,aAAc,MACdqB,WAAY,MACZ,UAAW,CACPC,OAAQ,UACRvB,gBAAiBnH,GAAOU,SACxBuL,MAAOjM,GAAOE,QAGtBmtB,UAAW,CACPlmB,gBAAiBnH,GAAOU,SACxB0G,aAAc,MACduL,YAAa,MACbnL,QAAS,QACTT,MAAO,cACPa,QAAS,OACTE,WAAY,SACZ4L,WAAY,MACZ,SAAU,CACNzQ,YAAa,UAIZqqB,GAAuB,SAAC,GAAwB,IAAtBxf,EAAqB,EAArBA,MAAOd,EAAc,EAAdA,QACpCrD,EAAUwjB,KAEhB,OACI,0BAAQxnB,UAAWgE,EAAQyjB,KAAMt5B,KAAK,SAASkZ,QAASA,EAAxD,UACI,gCAAOc,IACP,uBAAMnI,UAAWgE,EAAQ0jB,UAAzB,SACI,eAACxiB,GAAD,CAAO9D,MAAM,OAAOkF,MAAOjM,GAAOE,cAMrCqtB,GAAoB,WAC7B,MAAkB1N,kBAAQnB,IAAnB3H,EAAP,oBACMpN,EAAUlD,KAChB,EAAgCoZ,kBAAQ5C,IAAxC,mBAAOlH,EAAP,KAAiB+W,EAAjB,KAuCA,OACI,uBAAKnnB,UAAWgE,EAAQzC,UAAxB,UACI,sBAAKvB,UAAWgE,EAAQrR,gBAAxB,SACI,gBAAC,GAAD,CAAYqT,KAAK,KAAjB,mBACWoL,EAAQzd,OADnB,kBAIJ,uBAAKqM,UAAWgE,EAAQujB,MAAxB,UACKnX,EAASd,OAAOjgB,KAAI,SAACw4B,GAClB,OACI,eAAC,GAAD,CACI1f,MAAO0f,EAAE75B,KACTqZ,QAAS,kBAvCV,SAACwH,GACpB,IAAMmK,EAAQ9H,GAAarC,EAAWuB,GACtC+W,EAAYnO,GAqCuB8O,CAAeD,SAIzCzX,EAASb,qBAAqBlgB,KAAI,SAACwhB,GAChC,OACI,eAAC,GAAD,CACI1I,MAAO0I,EAAE7iB,KACTqZ,QAAS,kBArCK,SAClCwS,GAEA,IAAMb,EAAQpI,GAA4BiJ,EAAKzJ,GAC/C+W,EAAYnO,GAiCuB+O,CAA8BlX,SAIxDT,EAAS5d,UAAUnD,KAAI,SAACwhB,GACrB,OACI,eAAC,GAAD,CACI1I,MAAO0I,EAAE7iB,KACTqZ,QAAS,kBAlDP,SAACvW,GACvB,IAAMkoB,EAAQrI,GAAgB7f,EAAUsf,GACxC+W,EAAYnO,GAgDuBgP,CAAkBnX,SAI5CT,EAASf,WAAWhgB,KAAI,SAAC4I,GACtB,OACI,eAAC,GAAD,CACIkQ,MAAOlQ,EAAEjK,KACTqZ,QAAS,kBAzEN,SAACrU,GACxB,IAAMgmB,EAAQ9I,GAAiBld,EAAWod,GAC1C+W,EAAYnO,GAuEuBiP,CAAmBhwB,SAI7CmY,EAASZ,aAAangB,KAAI,SAAC64B,GACxB,OACI,eAAC,GAAD,CACI/f,MAAO+f,EAAG/Y,YACV9H,QAAS,kBA5EX,SAAC8R,GACnB,IAAMH,EAAQlI,GAAYqI,EAAO/I,GACjC+W,EAAYnO,GA0EuBmP,CAAcD,SAtDvC,WACV,IAAQ11B,EAAwD4d,EAAxD5d,UAAW6c,EAA6Ce,EAA7Cf,WAAYE,EAAiCa,EAAjCb,qBAAsBD,EAAWc,EAAXd,OACrD,OACI9c,EAAUmB,OAAS,GACnB0b,EAAW1b,OAAS,GACpB4b,EAAqB5b,OAAS,GAC9B2b,EAAO3b,OAAS,EAoDXy0B,GACG,yBACIj6B,KAAK,SACL6R,UAAWgE,EAAQxB,OACnB6E,QAAS,kBAAM8f,EAAY/X,KAH/B,SAKI,eAAC,GAAD,CACIpJ,KAAK,KACLtB,MAAO,CACH4B,MAAOjM,GAAOU,SACd6H,eAAgB,YAChBmF,YAAa,QALrB,0BAWJ,YCnMb,SAAS+B,GAAT,GAA2C,IAAvBue,EAAsB,oBAC7C,OAAO,eAAC,GAAD,aAAgBlgB,MAAM,cAAc4B,UAAU,GAAWse,I,+FCsB9DvnB,GAAYC,aAAkD,CAChEQ,UAAW,CACPzQ,SAAU,WACVsQ,MAAO,QAEXsI,MAAO,CACHrI,OAAQ,WACR2B,OAAO,aAAD,OAAe3I,GAAOM,aAC5B8G,aAAc,MACdL,MAAO,OACP2E,SAAU,WACVgC,YAAa,UACb,UAAW,CACPpN,YAAaN,GAAOU,SACpBiN,aAAc3N,GAAOU,UAEzB,WAAY,CACRJ,YAAaN,GAAOU,SACpBiN,aAAc3N,GAAOU,UAEzB,mBAAoB,CAChBkH,QAAS,QAEb,0BAA2B,CACvBqmB,eAAgBjuB,GAAOU,SACvBwtB,kBAAmBluB,GAAOU,SAC1BytB,iBAAkBnuB,GAAOU,WAGjCoN,MAAO,CACHlG,QAAS,mBAAiC,IAAjC,EAAG8G,MAAmBpV,OAAe,SAAW,QACzD7C,SAAU,WACVkR,cAAe,OACfb,KAAM,UACN4E,SAAU,mBAAiC,IAAjC,EAAGgD,MAAmBpV,OAAe,WAAa,WAC5DqN,IAAK,mBAAiC,IAAjC,EAAG+H,MAAmBpV,OAAe,MAAQ,YAClD6M,UAAW,mBACU,IADV,EAAGuI,MACJpV,OAAe,mBAAqB,SAC9C2S,MAAOjM,GAAOO,WACdkI,WAAY,iBAEhBN,OAAO,2BACAiY,IACA,CACC1X,OAAQ,UACR3B,MAAO,OACPS,QAAS,MACTa,OAAQ,IACRjB,aAAc,MACdzF,WAAY3B,GAAOiB,QACnBxK,SAAU,WACV2R,MAAO,OACPzB,IAAK,OACLM,OAAQ,MAGhBmnB,aAAc,CACV3D,qBAAsB,MACtBE,wBAAyB,MACzBQ,WAAW,aAAD,OAAenrB,GAAOM,aAChC+tB,YAAa,OACbzN,aAAc,OACd+L,UAAW,OACX1gB,MAAOjM,GAAOE,MACdzJ,SAAU,WACVsQ,MAAO,SACPa,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChB/B,OAAQ,OACRL,IAAK,MACLyB,MAAO,MACP,UAAW,CACPM,OAAQ,UACRpI,YAAaN,GAAOU,UAExB,WAAY,CACRJ,YAAaN,GAAOU,SACpBiN,aAAc3N,GAAOU,UAEzB,qBAAsB,OACtB,kBAAmB,OAGnByG,gBAAiB,kBACE,YADF,EAAGmnB,WACWtuB,GAAOE,MAAQF,GAAOU,UAGrD6tB,SAAU,kBACS,cADT,EAAGD,WACoB,OAAS,UAE9ChlB,KAAM,CAEF1B,QAAS,kBACU,YADV,EAAG0mB,WACmB,QAAU,QACzCvnB,MAAO,UACPkF,MAAOjM,GAAOU,YAIhB8tB,GAA+B,SAAC,GAS/B,IARH1gB,EAQE,EARFA,MACA4B,EAOE,EAPFA,SAOE,IANF4e,kBAME,MANW,UAMX,EALFG,EAKE,EALFA,kBACAC,EAIE,EAJFA,UACAC,EAGE,EAHFA,SACAxgB,EAEE,EAFFA,SACG7L,EACD,mBACF,EAA0BmM,mBAAiB,IAA3C,mBAAOC,EAAP,KAAcC,EAAd,KACMlF,EAAQC,cACRC,EAAUlD,GAAU,2BAAK,CAAEiI,QAAO4f,eAAf,IAA6B7kB,WAMtD,OACI,+CAAK9D,UAAWgE,EAAQzC,WAAe5E,GAAvC,cACI,eAAC,GAAD,CACIxO,KAAK,SACLqB,GAAI2Y,EACJiB,MAAOL,EACPgB,SAAUA,EACV5B,MAAOA,EACP4gB,UAAWA,EACX7e,aAAa,MACb1B,SAAU,SAACa,GACPL,EAASK,EAAE5B,OAAO2B,OAEdZ,GACAA,EAASa,EAAE5B,OAAO2B,UAI7BL,GACG,yBACI5a,KAAK,SACL6R,UAAWgE,EAAQxB,OACnB6E,QAAS,WACL2B,EAAS,IAELR,GACAA,EAAS,KAPrB,SAWI,eAACtD,GAAD,CAAO9D,MAAM,OAAOkF,MAAOjM,GAAOU,aAG1C,yBACIiF,UAAWgE,EAAQykB,aACnBphB,QAxCS,WACb2hB,GACAA,EAASjgB,IAuCL5a,KAAK,SAHT,SAKoB,YAAfw6B,EACG,eAACM,GAAD,CAAYjpB,UAAWgE,EAAQL,OAE/B,+BAAMmlB,WAO1BD,GAAYvlB,aAAe,CACvB0lB,cAAUz6B,EACVia,cAAUja,EACVmW,WAAOnW,EACPw6B,WAAW,GAGAF,U,yCC7LT/nB,GAAYC,aAAsC,CACpDQ,UAAW,CACPU,QAAS,QAEbinB,eAAgB,CACZjnB,QAAS,OACTJ,QAAS,YAEb6H,MAAO,CACH7L,QAAS,EACTuD,MAAO,EACP,2BAA4B,CACxB4B,OAAO,aAAD,OAAe3I,GAAOC,QAEhC,YAAa,CACT,WAAY,CACRrE,QAAS,QAIrBkS,MAAO,CACHrX,SAAU,WACViX,YAAa,SACb,WAAY,CACR9R,QAAS,KACTnF,SAAU,WACVmR,QAAS,eACTd,KAAM,EACNH,IAAK,MACLya,UAAW,UACXpa,OAAQ,SACRD,MAAO,SACP4B,OAAO,aAAD,OAAe3I,GAAOC,OAC5BmH,aAAc,OACdD,gBAAiBnH,GAAOE,MACxBwL,SAAU,WACVhD,OAAQ,YAGhBomB,WAAY,CACRtmB,WAAY,OAqCLumB,GAjCuB,SAAC,GAKhC,IAJHC,EAIE,EAJFA,OACAF,EAGE,EAHFA,WACAG,EAEE,EAFFA,YACG3sB,EACD,mBACIqH,EAAUlD,KAEhB,OACI,uBAAKd,UAAWgE,EAAQzC,UAAxB,UACI,oBAAGvB,UAAWgE,EAAQmlB,WAAtB,SAAmCA,MAChCE,GACCA,EAAOh6B,KAAI,SAAC8Y,GAAD,OACP,uBAAKnI,UAAWgE,EAAQklB,eAAxB,UACI,yDACI/6B,KAAK,QACLqB,GAAI2Y,EACJnI,UAAWgE,EAAQ0F,OACf/M,GAJR,IAKIyM,MAAOjB,EACPna,KAAMm7B,EACNlT,IAAK9N,EACLud,QAAS4D,IAAgBnhB,KAE7B,wBAAOnI,UAAWgE,EAAQmE,MAAOoB,QAASpB,EAA1C,SACKA,MAZoCA,UC3D3DrH,GAAYC,aAAgB,CAC9ByB,OAAO,2BACAiY,IACA,CACC/X,OAAQ,EACRb,QAAS,SACTkB,OAAQ,YAGhBwmB,aAAc,CACVtnB,QAAS,QAEbunB,cAAe,CACXvnB,QAAS,OACTnR,SAAU,WACV2R,MAAO,OACPzB,IAAK,UAIPyoB,GAA2B,WAC7B,MAAkC3gB,oBAAS,GAA3C,mBAAO4gB,EAAP,KAAkBC,EAAlB,KACA,EAAgD7gB,oBAAS,GAAzD,mBAAO8gB,EAAP,KAAyBC,EAAzB,KACM7lB,EAAUlD,KACVgpB,EAAWC,eAcjB,OAZA5gB,qBAAU,WACN,IAAM6gB,EAAY39B,aAAaY,QAAQ,gBAEnC+8B,KAGe,IAFAz9B,KAAKW,MAAM88B,IAGtBH,GAAoB,MAG7B,IAECD,EAEI,0BACIz7B,KAAK,SACL6R,UAAWgE,EAAQxB,OACnB6E,QAAS,kBAAMyiB,EAAS,yBAH5B,UAKI,eAAC,GAAD,CAAQzmB,YAAY,QAApB,SACI,eAAC,GAAD,CACI7B,gBAAiBnH,GAAOE,MACxBI,YAAaN,GAAOmB,QACpBsR,YAAY,MAHhB,SAKI,eAACmd,GAAD,QAGR,eAAC,GAAD,CAAYxjB,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAtC,SACKlB,GAAE,4CAOf,gBAAC,GAAD,CACIjC,QACI,0BAAQrV,KAAK,SAAS6R,UAAWgE,EAAQxB,OAAzC,UACI,eAAC,GAAD,CAAQa,YAAY,QAApB,SACI,eAAC,GAAD,CACI7B,gBAAiBnH,GAAOE,MACxBI,YAAaN,GAAOmB,QACpBsR,YAAY,MAHhB,SAKI,eAACmd,GAAD,QAGR,eAAC,GAAD,CAAYxjB,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAtC,SACKlB,GAAE,4CAIf/B,WAAS,EACTC,KAAM,eAACsmB,GAAD,CAAY7oB,MAAM,SAlB5B,UAoBI,sBAAKpB,UAAWgE,EAAQwlB,cAAxB,SACI,eAAC,GAAD,CACIrhB,MAAM,gBACNod,WAAYmE,EACZpE,UAAQ,EACR9c,SAAU,kBAAMmhB,GAAcD,QAGtC,eAAC,GAAD,CACIhlB,MAAO,CAAE4G,aAAc,QACvBtF,KAAK,IACLO,MAAM,SAHV,SAKK4P,GAAO,wCAEZ,eAAC,GAAD,CACI1P,IAAI,IACJT,KAAK,KACLO,MAAM,SACN7B,MAAO,CAAE4G,aAAc,QAJ3B,SAMK6K,GAAO,kCAEZ,uBAAKnW,UAAWgE,EAAQulB,aAAxB,UACI,eAAC,KAAD,CAAatkB,SAAO,EAApB,SACI,eAAC,GAAD,CACI9W,KAAK,YACL6X,KAAK,SACLqB,QAAS,WACAqiB,GACDr9B,aAAaC,QACT,eACAC,KAAKZ,WAAU,KAP/B,SAYKwqB,GAAO,4CAIhB,eAAC,GAAD,CACInQ,KAAK,SACLqB,QAAS,WACAqiB,GACDr9B,aAAaC,QACT,eACAC,KAAKZ,WAAU,IAGvBm+B,EAAS,yBATjB,SAYK3T,GAAO,gDCvItBrV,GAAYC,aAAgB,CAC9ByB,OAAO,2BACAiY,IACA,CACC/X,OAAQ,EACRb,QAAS,0BACTkB,OAAQ,YAGhBmnB,SAAU,CACNjoB,QAAS,OACTC,cAAe,SACfP,SAAU,QACVP,MAAO,OACPe,WAAY,SACZsZ,UAAW,OACX,MAAO,CACH/Y,OAAQ,UAEZ,WAAY,CACRtB,MAAO,OACPggB,SAAU,MAKhB+I,GAAwB,WAC1B,IAAMnmB,EAAUlD,KAChB,EAAsBoZ,kBAAQpgB,IAAvBiiB,EAAP,oBACA,EAAkDjT,oBAAS,GAA3D,mBAAOwY,EAAP,KAA0BC,EAA1B,KAEA,OACI,uCACI,gBAAC,GAAD,CACI/d,QACI,0BAAQrV,KAAK,SAAS6R,UAAWgE,EAAQxB,OAAzC,UACI,eAAC,GAAD,CAAQa,YAAY,QAApB,SACI,eAAC,GAAD,CACI7B,gBAAiBnH,GAAOE,MACxBI,YAAaN,GAAOmB,QACpBsR,YAAY,MAHhB,SAKI,eAAC2V,GAAD,CAAKnc,MAAOjM,GAAOa,aAG3B,eAAC,GAAD,CAAYuL,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAtC,SACKwP,GAAO,sCAIpBxS,KAAM,eAAC8e,GAAD,CAAKnc,MAAOjM,GAAOa,OAAQkG,MAAM,SACvC8B,YAAa7I,GAAOE,MACpB4I,WAAY9I,GAAOM,YAnBvB,UAqBI,eAAC,GAAD,CACI+J,MAAO,CAAE4G,aAAc,QACvBtF,KAAK,IACLO,MAAM,SAHV,SAKK4P,GAAO,iCAEZ,eAAC,GAAD,CAAYnQ,KAAK,KAAjB,SACKmQ,GAAO,2BAEZ,sBAAKnW,UAAWgE,EAAQkmB,SAAxB,SAII,eAAC,GAAD,CACIlkB,KAAK,QACLqB,QAAS,WACD0U,EAAYruB,WACZ6zB,GAAqB,GAErB90B,OAAOyX,KAEHpZ,6BACA,WAThB,SAcKqrB,GAAO,0CAIhB,sBAAKnW,UAAWgE,EAAQkmB,SAAxB,SAII,eAAC,GAAD,CACIlkB,KAAK,QACLqB,QAAS,WACD0U,EAAYruB,WACZ6zB,GAAqB,GAErB90B,OAAOyX,KAEHpZ,yCACA,WAThB,SAcKqrB,GAAO,oCAGhB,sBAAKnW,UAAWgE,EAAQkmB,SAAxB,SAKI,eAAC,GAAD,CACIlkB,KAAK,QACLqB,QAAS,WACL5a,OAAOyX,KAEH,gHACA,WANZ,SAUKiS,GAAO,0CAIpB,eAAC,GAAD,CACI2K,KAAMQ,EACNP,QAAS,kBAAMQ,GAAqB,UCvI9C6I,GAAoC,SAAC,GAAkC,IAAhCC,EAA+B,EAA/BA,yBACzC,OACI,uCACKA,EAA2B,eAAC,GAAD,IAA2B,KACvD,eAAC,GAAD,QAKZD,GAAY9mB,aAAe,CACvB+mB,0BAA0B,GCsC9B,IAAMvpB,GAAYC,aAAgB,CAC9B,oBAAqB,CACjB/M,KAAM,CACF6J,QAAS,GAEboD,GAAI,CACApD,QAAS,IAGjB0D,UAAU,cACNM,QAAS,YADJ,6BAEkB+E,GAAYC,QAF9B,OAE6C,CAC9C,IAAK,CACDhF,QAAS,OAIrBgZ,WAAY,CACR5Y,QAAS,OACTJ,QAAS,UACTkF,UAAW,QAEfujB,cAAe,CACXroB,QAAS,OACTJ,QAAS,eACToZ,aAAa,aAAD,OAAe5gB,GAAOM,aAClC2Q,aAAc,QAElB0P,QAAS,CACLC,aAAa,aAAD,OAAe5gB,GAAOmB,SAElCuL,UAAW,QAEfmU,cAAe,CACXjZ,QAAS,OACTmf,SAAU,EACVrT,WAAY,OACZ3K,eAAgB,WAChBjB,WAAY,aACZgZ,WAAY,GAEhBoP,qBAAsB,CAClBtoB,QAAS,OACTJ,QAAS,aACTkF,UAAW,OACX3F,MAAO,OACPI,gBAAiBnH,GAAOQ,SACxByL,MAAOjM,GAAOI,MACd2I,eAAgB,gBAChBjB,WAAY,SACZ,SAAU,CACNU,WAAY,KAEhBf,UAAW,eAEfsP,QAAS,CACL/O,WAAY,QAEhBqY,gBAAiB,CACbzY,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBvB,QAAS,gBACTa,OAAQ,kBACRjB,aAAc,MACdkB,UAAW,aACXC,eAAgB,OAChBC,WAAY,IACZT,UAAW,SACXU,WAAY,WACZpB,UAAW,EACX,UAAW,CACPqB,OAAQ,UACRuD,MAAOjM,GAAOI,MACdoI,WAAY,OAEhB,qBAAsB,OACtB,kBAAmB,OACnBqD,UAAW,SACXH,SAAU,OACVI,WAAY,OACZG,MAAO,UACPtD,OAAQ,EACRhH,WAAY,QAEhBwuB,uBAAwB,CACpBvoB,QAAS,OACTb,MAAO,OACPgC,eAAgB,gBAEpBZ,OAAO,2BACAiY,IACA,CACC1X,OAAQ,YAGhBwmB,aAAc,CACVtnB,QAAS,QAEbunB,cAAe,CACXvnB,QAAS,OACTnR,SAAU,WACV2R,MAAO,OACPzB,IAAK,QAETrO,gBAAiB,CACbsP,QAAS,OACTJ,QAAS,cACTuB,eAAgB,SAChBjB,WAAY,UAEhBsoB,YAAa,CACT35B,SAAU,YAEd45B,YAAY,cACRtpB,MAAO,OACPiC,YAAa,QAFN,6BAGgBuD,GAAYC,QAH5B,OAG2C,CAC9C,IAAK,CACDzF,MAAO,OACPwnB,SAAU,QACVvlB,YAAa,YAMvB+H,GAAsB,2BAkzBbuf,GAhzBW,WACtB,MAAkD7hB,oBAAS,GAA3D,mBAAOwY,EAAP,KAA0BC,EAA1B,KACA,EAAuBrH,kBAAQ/I,IAA/B,mBAAOjlB,EAAP,KAAa0+B,EAAb,KACM5mB,EAAUlD,KAChB,EAAkBoZ,kBAAQnB,IAAnB3H,EAAP,oBACA,EAAsB8I,kBAAQ7C,IAArBwT,EAAT,oBACA,EAA0B3Q,kBAAQzC,IAAzBqT,EAAT,oBACA,EAA0ChiB,oBAAkB,GAA5D,mBAAOiiB,EAAP,KAAsBC,EAAtB,KACA,EAA8CliB,oBAAkB,GAAhE,mBAAOmiB,EAAP,KAAwBC,EAAxB,KACA,EAAkCpiB,oBAAkB,GAApD,mBAAOqiB,EAAP,KAAkBC,EAAlB,KACA,EAAkCtiB,mBAAiB,eAAnD,mBAAOuiB,EAAP,KAAkBC,EAAlB,KACA,EAA0CxiB,mBAAmB,IAA7D,mBAAOyiB,EAAP,KAAsBC,EAAtB,KACA,EAAsC1iB,mBAAiB,IAAvD,mBAAO2iB,EAAP,KAAoBC,EAApB,KACA,EAAoC5iB,oBAAS,GAA7C,mBAAO6iB,EAAP,KAAmBC,EAAnB,KACA,EAAkD9iB,mBAAgB,IAAlE,mBAAO+iB,GAAP,KAA0BC,GAA1B,KACA,GAA8C5R,kBAAQrC,IAAtD,qBAAOoB,GAAP,MAAsB8S,GAAtB,MACA,GAA8B7R,kBAAQ5C,IAA7B0U,GAAT,qBACA,GAAuBC,cAAhBC,GAAP,qBACA,GAAsCpjB,oBAAS,GAA/C,qBAAO6N,GAAP,MAAoBC,GAApB,MACA,GAAsBsD,kBAAQpgB,IAAvBiiB,GAAP,qBACA,GAA0DjT,oBAAS,GAAnE,qBAAOqjB,GAAP,MAA8BC,GAA9B,MACA,GAAuDtjB,oBAAS,GAAhE,qBAAOujB,GAAP,MAA2BC,GAA3B,MACMC,GAAuB,mBAE7B,GAA+BtS,KAAvBM,GAAR,GAAQA,QAASF,GAAjB,GAAiBA,UAEjBlR,qBAAU,WACmB9c,aAAaY,QAAQs/B,KAG1CH,IAAyB,KAE9B,IAEHjjB,qBAAU,WACN,IAAMpM,EAAI7Q,EACV,GAAI6Q,GAAKA,EAAE4S,SAAWgH,GAAa,CAC/B,IAAM3e,EAAKk0B,GAAa5yB,IAAI,MAE5B,GADAsd,IAAe,GACX5e,EAAI,CACJ,IAAMG,EAAQ4E,EAAE4S,OAAON,WAAW1X,MAAK,SAACM,GAAD,OAAOA,EAAEzI,MAAQwI,KAExD,GAAIG,EAAO,CACP,IAAMq0B,EAAI,eAAQ/c,IAClB+c,EAAKnd,WAAWqB,KAAKvY,GACrB6zB,GAAkBQ,IAG1B3B,EAAU9tB,EAAE4S,QAEP0K,IACDE,GAAQ,WAGjB,CAACruB,EAAM2+B,IAEV,IAAM4B,GAAe,uCAAG,WAAO71B,GAAP,eAAAvL,EAAA,6DACdqhC,EAAW91B,EAAOtB,WAAa8uB,GAAiBD,GADlC,SAGGuI,EAAS,GAAD,OAAI91B,EAAOrB,UAAY,eAHlC,eAMhBq1B,EAAO,CAAEz8B,KAAM,YANC,2CAAH,sDAUfo3B,GAAY,SAAC3uB,GAAD,OACd20B,EAAcjb,MAAK,SAACiJ,GAAD,OAAaA,EAAQhkB,WAAaqB,EAAOrB,aAE1Do3B,GAAyB,kBAAY3B,GAAiB,SAAC4B,GAAD,OAAQA,MAY9DC,GAAcC,uBAAY,WAC5B,IAAIC,GAAU,EACd,GAAIxB,EAAe,CACf,IAAMyB,EAAgB,GAChBC,EAAiB1B,EAClBl8B,KAAI,SAACuH,GAAY,IAAD,QACP5F,EACY,gBAAdq6B,EACqC,MAAzB,OAANz0B,QAAM,IAANA,GAAA,UAAAA,EAAQP,mBAAR,eAAqBrF,SAArB,OACA4F,QADA,IACAA,GADA,UACAA,EAAQP,mBADR,aACA,EAAqBrF,OACa,MAA5B,OAAN4F,QAAM,IAANA,GAAA,UAAAA,EAAQR,sBAAR,eAAwBpF,SAAxB,OACA4F,QADA,IACAA,GADA,UACAA,EAAQR,sBADR,aACA,EAAwBpF,OAIlC,OAHKA,GAA0B,IAAjBA,EAAM2C,QAChBq5B,EAActc,KAAK9Z,EAAOlB,UAEvB1E,KAEV2e,QACG,SAACud,GAAD,YACmB3+B,IAAf2+B,GAA2C,OAAfA,KAGxCpB,GAAqBkB,GACrB,IAAMG,EACF1gC,OAAO2gC,UAAUC,SAAS5Y,SAAS,QACnChoB,OAAO2gC,UAAUE,UAAU7Y,SAAS,OAC9BwY,EAAe9M,KAAK,KACpB8M,EAAe9M,KAAK,KAC9BuL,EAAe,GAAD,OAAIyB,KAClBJ,IAAYI,EAAkBx5B,SAAWq5B,EAAcr5B,UAGnDlH,OAAOyX,KAAP,sBAA2BipB,GAAqB,UAC5CxB,GACAC,GAAc,GAElBe,MAIR,OAAOI,IACR,CAACxB,EAAeF,EAAWM,IAWxB4B,GAAsB,WARxB9gC,OAAOyX,KAAP,sBAA2BunB,GAAe,UACtCE,GACAC,GAAc,GAElBe,KACAzB,GAAmB,GAKnBF,GAAiB,GACjBE,GAAmB,IAmIvB,OACI,uBAAKlrB,UAAS,UAAKgE,EAAQzC,UAAb,YAAd,UACI,sBAAKvB,UAAS,UAAKgE,EAAQsmB,cAAb,iBAAd,SACI,sBAAKtqB,UAAWgE,EAAQkX,cAAxB,SACI,eAAC,GAAD,QAGR,uBAAKlb,UAAWgE,EAAQ6W,WAAxB,UACI,sBAAK7a,UAAU,eAAf,SACI,eAAC,GAAD,CAAYyG,IAAI,KAAKT,KAAK,QAA1B,SACKmQ,GAAO,2BAIhB,uBAAKnW,UAAWgE,EAAQkX,cAAxB,UACI,sBAAKlb,UAAWgE,EAAQ0mB,YAAxB,SACI,eAAC,GAAD,CACI3B,WAAS,EACT5gB,MAAO1C,GAAE,mCACTsE,UAAU,EACV4e,WAAW,UACXG,kBAAmBrjB,GACf,mCAEJujB,SAzIP,SAACzQ,GACduS,EAAcvS,IAyIM/P,SAtIN,SAAC+P,GACfuS,EAAcvS,QA0IF,eAAC,GAAD,UAGR,uBAAKvY,UAAS,UAAKgE,EAAQ6W,WAAb,iBAAd,UACI,eAAC,GAAD,IACA,uBAAK7a,UAAWgE,EAAQkX,cAAxB,WACM6P,IAAkBE,GAChB,eAAC,GAAD,CACI98B,KAAK,YACL6X,KAAK,QACLrC,KAAM,eAAC6pB,GAAD,CAAY3wB,KAAMxC,GAAOU,WAC/BsM,QAAS,WACD8kB,GACAG,IAAyB,GAEzBK,MAGRjoB,MAAO,CAAEqD,YAAa,QAX1B,SAaKtC,GAAE,qCAGX,eAAC,GAAD,CACItX,KAAO8qB,GAA8B,UAAd,YACvBjT,KAAK,QACLtB,MAAO,CACHkkB,SAAU,QACV7gB,YAAa,OACbnD,aAAc,QAElBjB,KACKsV,GAGG,eAACwU,GAAD,CAAM5wB,KAAMxC,GAAOE,QAFnB,eAAC0pB,GAAD,CAAUpnB,KAAK,mBAKvBwK,QAAS,kBAAM0kB,IAAsB9S,KAfzC,SAiBK,UAEQxT,GAFPwT,GAES,0CADA,qDAMtB8R,GACG,uBAAK/qB,UAAWgE,EAAQumB,qBAAxB,UACI,eAAC,GAAD,CACIpiB,MAAO1C,GAAE,gDACTjW,GAAG,OACH+1B,UAAW4F,EACX3iB,SAvRI,WAChB+iB,EAAc53B,SAAWyd,EAAQzd,QACjC63B,EAAiB,IACjBJ,GAAa,KAEbI,EAAiB,YAAIpa,IACrBga,GAAa,OAmRL,iCACI,gCAAOG,EAAc53B,SAAe,IACnCwiB,GACG,uDAGR,+BACI,eAACuX,GAAD,CACIvE,WAAY1jB,GACR,4CAEJ4jB,OAAQ,CACJ5jB,GACI,gDAEJA,GACI,iDAGR+C,SAAU,SAACa,GAAD,OACNiiB,EAAajiB,EAAEskB,cAAcvkB,QAEjCkgB,YAAa+B,MAGrB,eAAC,GAAD,CACIl9B,KAAK,YACL6X,KAAK,QACLqB,QAASslB,GAHb,SAKKlnB,GAAE,8CAEP,eAAC,GAAD,CACItX,KAAK,UACL6X,KAAK,QACLrC,KAAM,eAACqd,GAAD,CAAUnkB,KAAMxC,GAAOE,QAC7B8M,QAzPa,WACzB0U,GAAYruB,YACZ6zB,GAAqB,GACrByJ,GAAiB,GACjBE,GAAmB,GACnBM,EAAiB,IACjBJ,GAAa,IAEGyB,MAEZjB,GAAc,IAgPNtkB,SAAmC,IAAzBikB,EAAc53B,OAL5B,SAOK8R,GAAE,6CAKdwlB,GACG,uBAAKjrB,UAAWgE,EAAQumB,qBAAxB,UACI,iCACI,gCACKgB,EAAc53B,OAASk4B,GAAkBl4B,SACtC,IACPwiB,GACG,sDAGR,+BACI,kCACKA,GACG,qDAFR,IAIM,OACE,IACPkV,KAEL,eAAC,GAAD,CACIl9B,KAAK,YACL6X,KAAK,QACLqB,QAAS,WACL2jB,GAAiB,GACjBE,GAAmB,GACnBM,EAAiB,IACjBJ,GAAa,IAPrB,SAUK3lB,GAAE,yDAIf,sBAAKzF,UAAS,UAAKgE,EAAQoN,SAA3B,SACKA,GAAWA,EAAQzd,OAChB,gBAAC,GAAD,WACI,gBAAC,GAAD,CAAYyX,oBAAqBA,GAAjC,UACI,eAAC,GAAD,IACA,eAAC,GAAD,UACI,eAAC,GAAD,CACI/D,QAAS,kBAAMkT,GAAQ,SACvBrsB,KAAMmsB,GACNrsB,KAAK,OAHT,SAKKyX,GAAE,6CAGX,eAAC,GAAD,UACI,eAAC,GAAD,CACI4B,QAAS,kBAAMkT,GAAQ,gBACvBrsB,KAAMmsB,GACNrsB,KAAK,cAHT,SAKKyX,GACG,oDAIZ,eAAC,GAAD,UACI,eAAC,GAAD,CAAYO,KAAK,KAAKC,OAAO,OAA7B,SACI,eAAC,GAAD,CACIoB,QAAS,kBAAMkT,GAAQ,aACvBrsB,KAAMmsB,GACNrsB,KAAK,WAHT,SAKKyX,GACG,wDAKhB,eAAC,GAAD,UACI,eAAC,GAAD,CAAYO,KAAK,KAAKC,OAAO,OAA7B,SACI,eAAC,GAAD,CACIoB,QAAS,kBAAMkT,GAAQ,QACvBrsB,KAAMmsB,GACNrsB,KAAK,MAHT,SAKKyX,GACG,gDAKhB,eAAC,GAAD,UACI,eAAC,GAAD,CACI4B,QAAS,kBAAMkT,GAAQ,WACvBrsB,KAAMmsB,GACNrsB,KAAK,SAHT,SAKKyX,GACG,+CAIZ,eAAC,GAAD,UACI,eAAC,GAAD,CACI4B,QAAS,kBAAMkT,GAAQ,UACvBrsB,KAAMmsB,GACNrsB,KAAK,QAHT,SAKKyX,GACG,iDAKf2L,EAAQ/hB,KAAI,SAACuH,GAAD,iBACT,iCACI,gBAAC,GAAD,CACI6U,IACIsf,OACMx8B,EADO,0BAEYqI,EAAOrB,UAJxC,UAOI,eAAC,GAAD,UACKw1B,EACG,+BACI,eAAC,GAAD,CACIv7B,GAAIo+B,OAAOh3B,EAAOrB,UAClB4S,MAAM,GACNod,UAAWA,GACP3uB,GAEJ4R,SAAU,WACN,IAAMqlB,EAAE,YACDtC,GAEP,GAAIhG,GAAU3uB,GAAS,CACnB,IAAMk3B,EACFD,EAAGrd,WACC,SAAC4I,GAAD,OACIA,EAAE7jB,WACFqB,EAAOrB,aAEN,IAATu4B,GACAD,EAAGpd,OACCqd,EACA,GAGRtC,EAAiBqC,QAEjBA,EAAGnd,KAAK9Z,GACR40B,EAAiBqC,QAMjC,qCACI,gBAAC,GAAD,WACI,eAAC,GAAD,UACKzf,GACGxX,EAAOlB,YAGf,eAAC,GAAD,CACIsuB,OACIptB,EAAOtB,WAEX+R,QAAS,SAACgC,GACNA,EAAE0kB,kBACF1kB,EAAEmY,iBAEEzF,GAAYruB,WAEZ6zB,GACI,GAGJkL,GACI71B,aAsBhC,eAAC,GAAD,UACI,gBAAC,GAAD,WACI,eAAC,GAAD,CACI6P,IAAI,KACJT,KAAK,IACLW,QAAQ,QACRL,MAAM,qBAJV,SAMK1P,EAAOlB,WAEZ,eAAC,GAAD,CACIsQ,KAAK,KACLW,QAAQ,QACRL,MAAM,qBAHV,gBAKK1P,QALL,IAKKA,GALL,UAKKA,EAAQxB,WAAW,UALxB,aAKK,EAAuBpH,OAE5B,eAAC,GAAD,CACIgY,KAAK,MACLW,QAAQ,QACRL,MAAM,qBAHV,gBAKK1P,QALL,IAKKA,GALL,UAKKA,EAAQxB,WAAW,UALxB,aAKK,EAAuBpH,eAKxC,gBAAC,GAAD,CAEIod,oBAAqBA,GACrBK,IACIsf,OACMx8B,EADO,0BAEYqI,EAAOrB,UANxC,UASI,eAAC,GAAD,UACKw1B,EACG,+BACI,eAAC,GAAD,CACIv7B,GAAIo+B,OAAOh3B,EAAOrB,UAClB4S,MAAM,GACNod,UAAWA,GACP3uB,GAEJ4R,SAAU,WACN,IAAMqlB,EAAE,YACDtC,GAEP,GAAIhG,GAAU3uB,GAAS,CACnB,IAAMk3B,EACFD,EAAGrd,WACC,SAAC4I,GAAD,OACIA,EAAE7jB,WACFqB,EAAOrB,aAEN,IAATu4B,GACAD,EAAGpd,OACCqd,EACA,GAGRtC,EAAiBqC,QAEjBA,EAAGnd,KAAK9Z,GACR40B,EAAiBqC,QAMjC,uBACI7tB,UAAWgE,EAAQymB,YADvB,UAGI,eAAC,GAAD,UACI,eAAC,GAAD,UACKrc,GACGxX,EAAOlB,cAInB,eAAC,GAAD,CACIsuB,OAAQptB,EAAOtB,WACf+R,QAAS,SAACgC,GACNA,EAAE0kB,kBACF1kB,EAAEmY,iBAEEzF,GAAYruB,WAEZ6zB,GACI,GAGJkL,GACI71B,IAIZ6L,MAAM,eAKtB,eAAC,GAAD,UACI,eAAC,GAAD,CAAYuD,KAAK,KAAjB,SACKpP,EAAOlB,aAGhB,eAAC,GAAD,UACI,eAAC,GAAD,CAAYsQ,KAAK,KAAjB,gBACKpP,QADL,IACKA,GADL,UACKA,EAAQb,wBADb,aACK,EAA0B/H,SAGnC,eAAC,GAAD,UACI,eAAC,GAAD,CAAYgY,KAAK,KAAjB,SACKzR,EAAWqC,EAAOhB,cAG3B,eAAC,GAAD,UACI,eAAC,GAAD,CAAYoQ,KAAK,KAAjB,SACKpP,EAAOf,QAGhB,eAAC,GAAD,UAEI,kBADCe,EAAOrJ,OAAOygC,oBAEX,eAAC,GAAD,UACKvoB,GACG,yCAGR,OAER,eAAC,GAAD,UACI,eAAC,GAAD,CACI4B,QAAS,WACL,OAAO,GAFf,SAKKzQ,EAAOnE,oBA/GXmE,EAAOrB,YAnHVqB,EAAOrB,gBAyOzB,OAEP6b,EAAQzd,OACL,sBAAKqM,UAAWgE,EAAQrR,gBAAxB,SACI,gBAAC,GAAD,CAAYqT,KAAK,KAAjB,mBACWoL,EAAQzd,OADnB,kBAIJ,KACHg4B,GAA2C,IAA7BE,GAAkBl4B,OAC7B,gBAAC,GAAD,CACI6P,QAAS,KACTC,aAAW,EACXC,WAAS,EACTC,KAAM,eAAC6pB,GAAD,CAAYpsB,MAAM,OAAOvE,KAAMxC,GAAOU,WAJhD,UAMI,eAAC,GAAD,CACI2J,MAAO,CAAE4G,aAAc,QACvBtF,KAAK,IACLO,MAAM,SAHV,SAKK4P,GACG,qDAGPsV,EAAY93B,OAxiBrB,uCACI,eAAC,GAAD,CACI8S,IAAI,IACJT,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QACvB/E,MAAM,SAJV,SAOU4P,GADS,gBAAdkV,EAES,8DAGA,gEAGd,eAAC,GAAD,CACI5kB,IAAI,IACJT,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QACvB/E,MAAM,SAJV,SAMKslB,GAAkB1L,KAAK,QAE5B,eAAC,GAAD,CACI1Z,IAAI,IACJT,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QACvB/E,MAAM,SAJV,SAMK4P,GAAO,sDAEZ,uBAAKnW,UAAWgE,EAAQwmB,uBAAxB,UACI,eAAC,GAAD,CACIr8B,KAAK,YACL6X,KAAK,QACLqB,QAAS,WACLukB,GAAc,IAJtB,SAOKnmB,GACG,6DAGR,eAAC,GAAD,CACItX,KAAK,UACL6X,KAAK,QACLqB,QAASkmB,GAHb,SAKK9nB,GACG,+DA/FhB,uCACI,gBAAC,GAAD,CACIgB,IAAI,IACJT,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QACvB/E,MAAM,SAJV,4CAMiC,IACd,gBAAd8kB,EACK,cACA,uBAAwB,IATlC,OAYA,eAAC,GAAD,CACI5kB,IAAI,IACJT,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QACvB/E,MAAM,SAJV,SAMKslB,GAAkB1L,KAAK,QAE5B,eAAC,GAAD,CACI1Z,IAAI,IACJT,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QACvB/E,MAAM,SAJV,qDAQA,sBAAKvG,UAAWgE,EAAQwmB,uBAAxB,SACI,eAAC,GAAD,CACIr8B,KAAK,YACL6X,KAAK,QACLqB,QAAS,WACLukB,GAAc,IAJtB,wBA4jBJ,KACHS,GACG,gBAAC,GAAD,CACI7oB,QAAS,KACTC,aAAW,EACXC,WAAS,EACTC,KAAM,eAAC6pB,GAAD,CAAYpsB,MAAM,OAAOvE,KAAMxC,GAAOU,WAJhD,UAMI,eAAC,GAAD,CACI2J,MAAO,CAAE4G,aAAc,QACvBtF,KAAK,IACLO,MAAM,SAHV,SAKKd,GAAE,qDAEP,eAAC,GAAD,CACIgB,IAAI,IACJT,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QACvB/E,MAAM,SAJV,SAMKd,GAAE,oDAEP,sBAAKzF,UAAWgE,EAAQwmB,uBAAxB,SACI,eAAC,GAAD,CACIr8B,KAAK,UACL6X,KAAK,QACLqB,QAAS,WACLhb,aAAaC,QACTigC,GACA,QAEJH,IAAyB,GACzBE,IAAyB,GACzBK,MAVR,qBAiBR,KACJ,eAAC,GAAD,CACI7L,KAAMQ,EACNP,QAAS,kBAAMQ,GAAqB,U,2ECn8B9CzgB,GAAYC,aAAkD,CAChEQ,UAAW,CACPzQ,SAAU,WACVmR,QAAS,SAEbkG,MAAO,CACHrX,SAAU,SACVsQ,MAAO,OACP,wBAAyB,CACrBkF,MAAOjM,GAAOU,SACdgL,SAAU,UACV/E,IAAK,OAETsF,MAAOjM,GAAOO,YAElBqzB,SAAU,CACN5sB,OAAQ,OACR0F,UAAW,OACX/D,OAAO,aAAD,OAAe3I,GAAOM,aAC5B8G,aAAc,MACdL,MAAO,OACP2E,SAAU,OACVgC,YAAa,UACb1F,WAAY,OACZ6rB,OAAQ,OACR,iBAAkB,CACdrwB,QAAS,KAEbyI,MAAOjM,GAAOI,MACd,mCAAoC,CAChC6L,MAAOjM,GAAOU,SACdgL,SAAU,WAEd,4BAA6B,CACzB1D,WAAY,QAEhB,UAAW,CACP1H,YAAaN,GAAOU,SACpBiN,aAAc3N,GAAOU,SACrBsH,WAAY,QAEhB,WAAY,CACR1H,YAAaN,GAAOU,SACpBiN,aAAc3N,GAAOU,SACrBsH,WAAY,QAEhB,aAAc,CACVb,gBAAiB,UACjB8E,MAAOjM,GAAOoB,UAGtBmO,KAAM,CACF9Y,SAAU,WACVkQ,IAAK,MACLG,KAAM,MACNsB,MAAO,OACPsD,SAAU,OACVvE,gBAAiB,QACjBC,aAAc,MACdI,QAAS,mBACTqG,mBAAoB,QACpB5B,MAAOjM,GAAOO,YAElBiP,KAAM,CACF/Y,SAAU,WACVkQ,IAAK,IACLyB,MAAO,OACP5E,QAAS,MAEbswB,MAAO,CACHr9B,SAAU,WACVwV,MAAOjM,GAAOI,MACdsL,SAAU,OACV3D,UAAW,QACXC,WAAY,SAId+rB,GAA8B9lB,sBAGlC,WAAoDlB,GAAS,IAA1De,EAAyD,EAAzDA,MAAO4B,EAAkD,EAAlDA,SAAUskB,EAAwC,EAAxCA,SAAU7lB,EAA8B,EAA9BA,SAAa7L,EAAiB,mBAC1D,EAAgBmM,mBAAiB,IAA1BC,EAAP,oBACMjF,EAAQC,cACRC,EAAUlD,GAAU,2BAAK,CAAEiI,UAAR,IAAiBjF,WAC1C,EAA0BgF,mBACtBnM,EAAM8L,aAAemlB,OAAOjxB,EAAM8L,cAAc9U,OAAS,GAD7D,mBAAOw6B,EAAP,KAAcG,EAAd,KAGMC,EAAejI,iBAAO,MAEtBkI,EAAa,SAACnlB,GAChBA,EAAEskB,cAAcjpB,MAAMrD,OAAS,OAC/BgI,EAAEskB,cAAcjpB,MAAMrD,OAAtB,UAAkCgI,EAAEskB,cAAcc,aAAe,GAAjE,MAEIF,EAAa/H,UACb+H,EAAa/H,QAAQ9hB,MAAMrD,OAA3B,UACIgI,EAAEskB,cAAcc,aAAe,GADnC,QAMR,OACI,uCACI,sBAAKzuB,UAAWgE,EAAQzC,UAAW6F,IAAKmnB,EAAxC,SACI,yBAAOhlB,QAASpB,EAAOnI,UAAWgE,EAAQmE,MAA1C,UACI,qDACQxL,GADR,IAEIyK,IAAKA,EACL2C,SAAUA,EACV/J,UAAWgE,EAAQiqB,SACnBz+B,GAAI2Y,EACJumB,KAAM,EACNC,KAAM,EACNjmB,YAAaP,EACbymB,QAAS,SAACvlB,GACNilB,EAASjlB,EAAE5B,OAAO2B,MAAMzV,QACxB6U,EAASa,GACTmlB,EAAWnlB,IAEfb,SAAU,SAACa,GACPilB,EAASjlB,EAAE5B,OAAO2B,MAAMzV,QACxB6U,EAASa,GACTmlB,EAAWnlB,IAEfwlB,UAAWR,KAEf,wBAAMruB,UAAWgE,EAAQ4F,KAAzB,UACKzB,EADL,IACa4B,GAAY,0CAExBpN,EAAM2K,SACH,uBAAMtH,UAAWgE,EAAQ6F,KAAzB,SACI,eAACM,GAAD,CAAU/I,MAAM,OAAOvE,KAAMxC,GAAOqB,YAExC,UAGZ,uBAAKsE,UAAWgE,EAAQmqB,MAAxB,UACKA,EADL,MACeE,WAM3BD,GAAS9qB,aAAe,CACpB+qB,SAAU,K,gIC1IDS,GAAY,YAKwB,IAJ7C9gC,EAI4C,EAJ5CA,KACA+gC,EAG4C,EAH5CA,SACAC,EAE4C,EAF5CA,MACGryB,EACyC,mBAC5C,OACI,eAAC,GAAD,yBACI3O,KAAMA,GACF2O,GACCoyB,GAAYA,EAAS/gC,EAAMghC,MAK/BC,GAAa,YAKwB,IAJ9CjhC,EAI6C,EAJ7CA,KACA+gC,EAG6C,EAH7CA,SACAC,EAE6C,EAF7CA,MACGryB,EAC0C,mBAC7C,OACI,eAACyL,GAAD,yBACIpa,KAAMA,GACF2O,GACCoyB,GAAYA,EAAS/gC,EAAMghC,MAK/BE,GAAkB,YAKkB,IAJ7ClhC,EAI4C,EAJ5CA,KACA+gC,EAG4C,EAH5CA,SACAC,EAE4C,EAF5CA,MACGryB,EACyC,mBAC5C,OACI,eAAC0N,GAAD,yBACIrc,KAAMA,GACF2O,GACCoyB,GAAYA,EAAS/gC,EAAMghC,MAK/BG,GAAe,YAKwB,IAJhDnhC,EAI+C,EAJ/CA,KACA+gC,EAG+C,EAH/CA,SACAC,EAE+C,EAF/CA,MACGryB,EAC4C,mBAC/C,OACI,eAACyxB,GAAD,yBACIpgC,KAAMA,GACF2O,GACCoyB,GAAYA,EAAS/gC,EAAMghC,MCnFtCluB,GAAYC,cAAgB,iBAAO,CACrCoK,IAAK,WACD,MAAO,CACHra,SAAU,WACV0Q,gBAAiBnH,GAAOE,MACxB+L,MAAO,QACPgF,aAAc,OACd7J,aAAc,MACdL,MAAO,QACPO,SAAU,OACVE,QAAS,WACTI,QAAS,OACTC,cAAe,SACfC,WAAY,SACZiB,eAAgB,WAGxBO,KAAM,CACF7S,SAAU,WACVkQ,IAAK,SAETouB,QAAS,CACLrpB,SAAU,OACV0V,UAAW,SACX9Z,SAAU,QACVS,UAAW,cAIbitB,GAAyC,SAAC,GAIzC,IAHHxrB,EAGE,EAHFA,SACAF,EAEE,EAFFA,KACAyrB,EACE,EADFA,QAEMprB,EAAUlD,KAEhB,OACI,uBAAKd,UAAWgE,EAAQmH,IAAxB,UACI,sBAAKnL,UAAWgE,EAAQL,KAAxB,SAA+BA,IAC9ByrB,EAAU,sBAAKpvB,UAAWgE,EAAQorB,QAAxB,SAAkCA,IAAiB,KAC7DvrB,M,qBCjBP/C,I,OAAYC,aAAkD,CAChEuuB,kBAAmB,CACftsB,OAAQ,OACRlS,SAAU,WACVwV,MAAOjM,GAAOI,MACd,kBAAmB,CACf6L,MAAO,YACH,OADqB,EAAf2B,SACY,cAAgB,WAI9CsnB,WAAY,CACRz+B,SAAU,WACVwQ,OAAQ,EACRD,OAAQ,OACRD,MAAO,OACPJ,IAAK,IACLyB,MAAO,IACPL,UAAW,QACXY,OAAO,OACPvB,aAAc,OAElBe,OAAO,2BACAiY,IACA,CACC1X,OAAQ,UACRlB,QAAS,EACTa,OAAQ,IAGhBc,QAAS,CACL1S,SAAU,WACVkQ,IAAK,OACLyB,MAAO,OACP5E,QAAS,MAEb+mB,MAAO,CACH9zB,SAAU,WACVkQ,IAAK,OACLyB,MAAO,WAIT+sB,GAAuC,SAAC,GAQvC,IAPHrnB,EAOE,EAPFA,MACAiI,EAME,EANFA,SACA+W,EAKE,EALFA,YACAsI,EAIE,EAJFA,QACAC,EAGE,EAHFA,QACAC,EAEE,EAFFA,gBACA9mB,EACE,EADFA,SAEA,EAAkCC,wBAASva,GAA3C,mBAAOkK,EAAP,KAAkBm3B,EAAlB,KACA,EAAoC9mB,oBAAS,GAA7C,mBAAO+mB,EAAP,KAAmBC,EAAnB,KACA,EAAgChnB,oBAAS,GAAzC,mBAAOb,EAAP,KAAiB8nB,EAAjB,KACM/rB,EAAUlD,GAAU,eACnB,CAAEmH,cAGTkB,qBAAU,WACF1Q,GAAkC,IAArBA,EAAU9E,OACvBo8B,GAAY,GAEZA,GAAY,KAEjB,CAACt3B,IAEJ0Q,qBAAU,WACDiH,GACDwf,OAAarhC,KAElB,CAAC6hB,IAUJ,OACI,uBACIpQ,UAAWgE,EAAQsrB,kBADvB,UAII,eAAC,GAAD,CACInnB,MAAOA,EACP4B,UAAU,EACVzC,SAAUuoB,EACVpnB,aAAchQ,GAAa,GAC3B2Q,MAAO3Q,GAAa,GACpBkR,cAAY,IAEhB,sBACI3J,UAAWgE,EAAQurB,WACnB7qB,MAAO,CACH3B,OAAQ,UAERC,OAAO,aAAD,OACF6F,EAAWxO,GAAOjN,MAAQiN,GAAOM,aAErC8G,aAAc,OARtB,SAWI,eAAC,KAAD,CACIkuB,gBAAiBA,EACjBnnB,SAlCW,SAAC+M,GACxB,GAAmB,kBAARA,EAAkB,CACzB,IAAMya,EAASC,KAAO1a,GAAK2a,OAAO,cAClCN,EAAaI,GAEjBF,GAAc,GACd3I,EAAY5R,IA6BAnM,MAAOgH,EACPqf,QAASA,EACTC,QAASA,EACTS,aACI,eAACC,GAAD,CAAchvB,MAAM,OAAOkF,MAAOjM,GAAOU,WAE7Cm1B,OAAO,UACPG,eAAe,KACfC,iBAAiB,KACjBC,gBAAgB,mBAChBC,UAAW,eAACtrB,GAAD,CAAO9D,MAAM,OAAOkF,MAAOjM,GAAOU,mBC9I3D+F,GAAYC,cAAgB,iBAAO,CACrCquB,QAAS,CACLt+B,SAAU,WAEViV,SAAU,OACV3D,UAAW,QACXC,WAAY,OAEhByD,KAAM,CACFhV,SAAU,WACVwV,MAAOjM,GAAOO,YAElBxN,MAAO,CACH0D,SAAU,WACVwV,MAAOjM,GAAOjN,WAIhBqjC,GAA+B,SAAC,GAAoB,EAAlB3qB,KAAmB,IAAb1Y,EAAY,EAAZA,MACpC4W,EAAUlD,KAEhB,OACI,sBAAKd,UAAWgE,EAAQorB,QAAxB,SAEKhiC,EAAQ,uBAAM4S,UAAWgE,EAAQ5W,MAAzB,SAAiCA,IAAgB,QCmBhE0T,GAAYC,aAAgB,CAC9BQ,UAAU,cACNM,QAAS,UADJ,6BAEkB+E,GAAYC,QAF9B,OAE6C,CAC9C,IAAK,CACDhF,QAAS,KAIrBgZ,WAAY,CACR5Y,QAAS,OACTJ,QAAS,UACTkF,UAAW,QAEfiU,QAAS,CACLC,aAAa,aAAD,OAAe5gB,GAAOmB,SAElCuL,UAAW,QAEfmU,cAAe,CACXnN,WAAY,OACZoN,WAAY,GAEhB/J,QAAS,CACL/O,WAAY,QAEhB+Y,KAAK,cACDnZ,QAAS,OACT8Y,IAAK,QAFL,6BAGuBnU,GAAYC,QAHnC,OAGkD,CAC9C,IAAK,CACDuE,oBAAqB,+BAIjCiQ,WAAY,CACRpZ,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBvB,QAAS,IACTa,OAAQ,IACRjB,aAAc,MACdkB,UAAW,aACXC,eAAgB,OAChBC,WAAY,IACZT,UAAW,SACXU,WAAY,WACZpB,UAAW,EACX1F,WAAY,OACZ,UAAW,CACP+G,OAAQ,WAEZ,qBAAsB,OACtB,kBAAmB,OACnBC,OAAQ,EACRsD,MAAOjM,GAAOU,SACdgL,SAAU,UACVuV,mBAAoB,aAExBC,QAAS,CACLtZ,QAAS,OACTmB,eAAgB,WAChBvB,QAAS,uBACToZ,aAAa,aAAD,OAAe5gB,GAAOM,cAEtCsI,WAAY,CACR7B,MAAO,OACPC,OAAQ,OACRI,aAAc,MACduB,OAAO,aAAD,OAAe3I,GAAOE,OAC5BiH,gBAAiBnH,GAAOE,MACxB0H,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBC,YAAa,QAEjBpN,QAAS,CACLoM,WAAY,WACZJ,QAAS,OACTE,WAAY,SACZiB,eAAgB,UAEpBoY,eAAgB,CACZC,UAAW,WAEfC,gBAAiB,CACb5qB,SAAU,YAEd6qB,cAAe,CACX7qB,SAAU,WACViW,UAAW,OACXvF,gBAAiBnH,GAAOE,MACxByI,OAAO,aAAD,OAAe3I,GAAOM,aAC5B8G,aAAc,MACdL,MAAO,OACP2E,SAAU,WACVgC,YAAa,SACbnD,aAAc,SACd7B,OAAQ,UACRuD,MAAOjM,GAAOO,YAElBghB,cAAe,CACXjX,SAAU,SACVnD,gBAAiB,QACjBC,aAAc,MACdC,UAEI,yFAERoG,OAAQ,CACJhX,SAAU,WACVuQ,OAAQ,OACRG,gBAAiBnH,GAAOE,MACxByI,OAAO,aAAD,OAAe3I,GAAOM,aAC5B8G,aAAc,MACdL,MAAO,OACP2E,SAAU,WACVgC,YAAa,SACbnD,aAAc,SACd7B,OAAQ,UACRuD,MAAOjM,GAAOO,YAElBjI,gBAAiB,CACbsP,QAAS,OACTJ,QAAS,cACTuB,eAAgB,SAChBjB,WAAY,UAEhBmoB,cAAe,CACXroB,QAAS,OACTJ,QAAS,eACToZ,aAAa,aAAD,OAAe5gB,GAAOM,aAClC2Q,aAAc,UAQhBF,GAAsB,sBAOtBslB,GAAuB,WAAO,IAAD,EAC/B,EAAiD5nB,wBAASva,GAA1D,mBAAOsL,EAAP,KAAyBoiB,EAAzB,KACA,EACI0U,eADI5B,EAAR,EAAQA,SAAU6B,EAAlB,EAAkBA,MAAOC,EAAzB,EAAyBA,aAAcC,EAAvC,EAAuCA,SAAUC,EAAjD,EAAiDA,UAE3C/sB,GAFN,EAA4DgtB,UAE5ClwB,MAChB,EAA8BgI,mBAA2B,IAAzD,mBAAOP,EAAP,KAAgB8T,EAAhB,KACA,EAA0BvT,wBAA6Bva,GAAvD,mBAAOnB,EAAP,KAAc6c,EAAd,KACA,EAAyCnB,wBAASva,GAAlD,mBAAO0iC,EAAP,KAAqBC,EAArB,KACA,EAA8BpoB,oBAAS,GAAvC,mBAAOwT,EAAP,KAAgBC,EAAhB,KACA,EAAsBrC,kBAAQtC,IAArBuZ,EAAT,oBACA,EAAkBjX,kBAAQ/B,IAAnB/G,EAAP,oBAEA,EAA+B6I,KAAvBM,EAAR,EAAQA,QAASF,EAAjB,EAAiBA,UAEjB,EAA8BvR,oBAAS,GAAvC,mBAAOikB,EAAP,KAAgBqE,EAAhB,KAEMC,EAAiB/K,iBAAO,MAEtBgL,EAAYP,EAAZO,QAERnoB,qBAAU,WACNoR,EAAQ,UACT,IAEHpR,qBAAU,WACN,IAAIooB,GAAQ,EAERN,IACAM,GAAQ,GAGRD,IACAC,GAAQ,GAGR13B,IACA03B,GAAQ,GAGZH,EAAWG,KACZ,CAACD,EAASL,EAAcp3B,IAE3BsP,qBAAU,WACN,IAAM2T,EAAO,uCAAG,8BAAAzxB,EAAA,sEACcme,KADd,cACNwT,EADM,OAENC,EAAwBD,EAAY3tB,KACtC,SAACqB,GACG,MAAO,CAAEyX,MAAOzX,EAAW1C,KAAMob,MAAO1Y,EAAWlB,OAI3DohC,EAAM,CACFY,UAAW,GACXC,eAAgB,GAChBC,QAAS,GACTC,gBAAiB,KAErBtV,EAAWY,GAdC,mBAgBL,GAhBK,2CAAH,qDAmBbH,MACD,CAACiS,IAEJ,IAAM6C,EAAgB,uCAAG,WAAOrgB,GAAP,uBAAAlmB,EAAA,6DACfwmC,EAAQC,YAAYC,MADL,SAGEzgB,GAAcC,GAHhB,QAGfvlB,EAHe,SAKLA,EAASE,QACf6I,EAAS4B,EAAW3K,EAASE,KAAKmlB,YAE5B1d,QAQRw9B,EAAUp8B,GAEVkV,OAAS1b,KATT0b,EAAS,CACLpB,UAAU,EACVumB,QAAS,4BAEb+B,EAAU,MASZa,EAAWF,YAAYC,MAAQF,EACjC7a,EAAU,EAEVgb,EAAW,MACXhb,EAAU,IAAMgb,GAGpB/a,YAAW,WACPsF,GAAW,GACP8U,GAAkBA,EAAe7K,SACjC6K,EAAe7K,QAAQyL,UAE5Bjb,GAlCkB,2CAAH,sDA2DhBkb,EAAkB,SAAC19B,GACrB08B,EAAiB18B,GAEbs8B,EAAS,iBADTt8B,EAC2BA,EAAK29B,eAEL,KAI7BC,EAAsB,SAAChpB,GACzB0nB,EAAS,kBAAmB1nB,GAC5B6S,EAAqB7S,IAKjBipB,GAFI,IAAI/9B,KAEGy8B,EAAXsB,QA0BR,OACI,uBAAKryB,UAAS,UAAKgE,EAAQzC,UAAb,YAAd,UACI,sBAAKvB,UAAS,UAAKgE,EAAQsmB,cAAb,iBAAd,SACI,sBAAKtqB,UAAWgE,EAAQkX,cAAxB,SACI,eAAC,GAAD,CAAamP,0BAA0B,QAG/C,uBAAKrqB,UAAS,UAAKgE,EAAQ6W,YAA3B,UACI,sBAAK7a,UAAU,eAAf,SACI,eAAC,GAAD,CAAYyG,IAAI,KAAKT,KAAK,QAA1B,SACKmQ,GAAO,2BAGhB,sBAAKnW,UAAU,cAAf,SACI,eAAC,GAAD,CAAYyG,IAAI,KAAKT,KAAK,KAAKO,MAAM,SAArC,SACK4P,GAAO,8BAIpB,uBACInW,UAAS,UAAKgE,EAAQ6W,WAAb,iBACTnW,MAAO,CAAE4G,aAAc,QAF3B,UAII,+BACI,sBAAKtL,UAAWgE,EAAQf,WAAxB,SACI,eAACqvB,GAAD,CAAchsB,MAAOjM,GAAOU,SAAUqG,MAAM,aAGpD,iCACI,eAAC,GAAD,CACIqF,IAAI,KACJT,KAAK,IACLM,MAAOjM,GAAOI,MACdiK,MAAO,CAAE4G,aAAc,QAJ3B,SAMK6K,GAAO,qCAEZ,eAAC,GAAD,CAAY1P,IAAI,IAAIT,KAAK,IAAIM,MAAOjM,GAAOqB,QAA3C,SACKya,GAAO,0CAIpB,wBAAMoc,SAAU1B,GA1GP,SAAC3kC,GACdqwB,GAAW,GAEX,IAAM9iB,EAAM,eAAQvN,GAEfA,EAAKylC,wBACCl4B,EAAOk4B,gBAGlB,IAAM5oB,EAAgB,GACtB8L,OAAOC,KAAKrb,GAAQ7F,SAAQ,SAACwV,GACrBA,GAAmB,KAAVA,IACTL,EAAM,WAAD,OAAYK,IAAWld,EAAKkd,OAGzC,IAAMmI,EAAcsD,OAAOC,KAAK/L,GAC3B1Z,KAAI,SAAC4mB,GAAD,gBAAYA,EAAZ,YAAmBlN,EAAMkN,OAC7BkK,KAAK,KAEVyR,EAAiBrgB,MAuF2BvR,UAAWgE,EAAQoX,KAA3D,UACI,+BACI,eAAC,GAAD,aACIjT,MAAM,OACNna,KAAK,YACL+b,UAAU,EACV8kB,UAAW,GACX9F,WAAS,EACT3hB,IAAKiqB,GACDtC,EAAS,iBAIrB,eAAC,GAAD,CACI5mB,MAAO1C,GAAE,oCACT2K,SAAU6gB,EACV9J,YAAa+K,EACbzC,QAASQ,OAASuC,SAAS,EAAG,QAAQC,SACtC9C,iBAAe,IAEnB,iCACI,eAAC,GAAD,CACIxnB,MAAO1C,GAAE,kCACTzX,KAAK,UACL+b,UAAU,EACVglB,SAAUA,EACV5gC,KAAK,SACL0gC,UAAW,GACX6D,UAAW,EACX1D,MAAO,CACH2D,SAAU,SAACvpB,GAAD,QAhGV5Y,EAiGmB4Y,IAhGN,KAAlB5Y,EAAOoiC,QAIlBpiC,EAAOmD,OAAS,GA4F6B,cAjG9B,IAACnD,MAoGR,eAAC,GAAD,CAAasV,KAAK,GAAG1Y,MAAK,OAAEilC,QAAF,IAAEA,GAAF,UAAEA,EAAQX,eAAV,aAAE,EAAiBtC,aAGhD7mB,EACG,sBAAKvI,UAAWgE,EAAQ0X,gBAAxB,SACI,eAACtT,GAAD,yBACIM,YAAajD,GAAE,mCACf2D,MAAOvP,EACP4O,aAAc5O,EACd+O,eAAa,GACTmmB,EAAS,oBALjB,IAMIvmB,SAAU,SAACa,GAAD,OACN+oB,EAAoB/oB,EAAE5B,OAAO2B,QAEjCb,QAASA,OAGjB,KAEJ,eAAC,GAAD,CACI7D,MAAO,CAAErD,OAAQ,QACjBkG,WAAW,SACXpZ,KAAK,UACL6X,KAAK,QACLsB,UAAWylB,EALf,SAOKtnB,GAAE,uCAGX,sBAAKzF,UAAWgE,EAAQuX,QAAxB,SACI,yBACIptB,KAAK,SACL6R,UAAWgE,EAAQqX,WACnBhU,QAAS,WACL8pB,EAAU,IACVP,EAAM,CACFY,UAAW,GACXC,eAAgB,GAChBC,QAAS,GACTC,gBAAiB,KAErBO,OAAgB3jC,GAChB6jC,EAAoB,IACpBnoB,OAAS1b,IAbjB,SAgBKkX,GAAE,0CAGVrY,GAASA,EAAMyb,WAAayT,EACzB,sBAAKtc,UAAS,UAAKgE,EAAQ/N,QAAb,YAAd,SACI,sBAAK+J,UAAWgE,EAAQwX,eAAxB,SACI,eAAC,GAAD,CACI7X,KACI,sBAAK3D,UAAWgE,EAAQf,WAAxB,SACI,eAACqvB,GAAD,CACIhsB,MAAOjM,GAAOU,SACdqG,MAAM,WAIlBguB,QAAShiC,EAAMgiC,cAI3B,KACFhe,EAAQzd,QAAWvG,GAAUkvB,EAM3B,KALA,sBAAKtc,UAAS,UAAKgE,EAAQ/N,QAAb,YAAd,SACI,eAAC,GAAD,CAAYsQ,MAAM,SAASP,KAAK,IAAhC,SACKP,GAAE,uCAIf,uBAAKzF,UAAWgE,EAAQoN,QAAxB,UACKkL,EAAU,eAAC,GAAD,IAAc,MACvBA,GAAWlL,GAAWA,EAAQzd,OAC5B,sBAAKqM,UAAU,UAAf,SACI,gBAAC,GAAD,WACI,gBAAC,GAAD,CACIoL,oBAAqBA,GADzB,UAGI,eAAC,GAAD,IACA,eAAC,GAAD,UACI,eAAC,GAAD,CACI/D,QAAS,kBAAMkT,EAAQ,SACvBrsB,KAAMmsB,EACNrsB,KAAK,OAHT,SAKKyX,GACG,6CAIZ,eAAC,GAAD,UACI,eAAC,GAAD,CAAYO,KAAK,KAAKC,OAAO,OAA7B,SACI,eAAC,GAAD,CACIoB,QAAS,kBACLkT,EAAQ,gBAEZrsB,KAAMmsB,EACNrsB,KAAK,cALT,SAOKyX,GACG,sDAKhB,eAAC,GAAD,UACI,eAAC,GAAD,CACI4B,QAAS,kBAAMkT,EAAQ,eACvBrsB,KAAMmsB,EACNrsB,KAAK,aAHT,SAKKyX,GAAE,uCAGX,eAAC,GAAD,UACI,eAAC,GAAD,CACI4B,QAAS,kBAAMkT,EAAQ,gBACvBrsB,KAAMmsB,EACNrsB,KAAK,cAHT,yBASPojB,EAAQ/hB,KAAI,SAACuH,GAAD,iBACT,uCACI,gBAAC,GAAD,CACI6U,IACK7U,EAAOd,iBAEFvH,EAFN,+BAC8BqI,EAAOrB,UAH7C,UAOI,eAAC,GAAD,UACI,eAAC,GAAD,UACI,eAAC,GAAD,UACK6Y,GACGxX,EAAOlB,gBAKvB,eAAC,GAAD,UACI,gBAAC,GAAD,WACI,eAAC,GAAD,CACI+Q,IAAI,KACJT,KAAK,IACLW,QAAQ,QACRL,MAAM,qBAJV,SAMK1P,EAAOlB,WAEZ,eAAC,GAAD,CACIsQ,KAAK,KACLW,QAAQ,QACRL,MAAM,qBAHV,gBAMQ1P,QANR,IAMQA,GANR,UAMQA,EAAQb,wBANhB,aAMQ,EACM/H,OAGd,eAAC,GAAD,CACIgY,KAAK,MACLW,QAAQ,QACRL,MAAM,qBAHV,gBAMQ1P,QANR,IAMQA,GANR,UAMQA,EAAQb,wBANhB,aAMQ,EACM/H,eAM1B,gBAAC,GAAD,CACIyd,IACK7U,EAAOd,iBAEFvH,EAFN,+BAC8BqI,EAAOrB,UAIzC6V,oBACIA,GARR,UAWI,eAAC,GAAD,UACI,eAAC,GAAD,UACI,eAAC,GAAD,UACKgD,GACGxX,EAAOlB,gBAKvB,eAAC,GAAD,UACI,eAAC,GAAD,CAAYsQ,KAAK,KAAjB,SACKpP,EAAOlB,aAGhB,eAAC,GAAD,UACI,eAAC,GAAD,CAAYsQ,KAAK,KAAjB,gBACKpP,QADL,IACKA,GADL,UACKA,EAAQb,wBADb,aACK,EAA0B/H,SAGnC,eAAC,GAAD,UACK4I,EAAOlG,WACJ,eAAC,GAAD,CAAYsV,KAAK,KAAjB,SACKpP,EAAOlG,WAAW1C,OAEvB,OAER,eAAC,GAAD,UACK4I,EAAOd,YACJ,eAAC,GAAD,UACK2P,GACG,gDAGR,SAtCH7O,EAAOrB,qBA6ChC,KACH6b,EAAQzd,OACL,sBAAKqM,UAAWgE,EAAQrR,gBAAxB,SACI,gBAAC,GAAD,CAAYqT,KAAK,KAAjB,mBACWoL,EAAQzd,OADnB,kBAIJ,YClqBdk/B,GAAa,uCAAG,WAClB1kC,GADkB,iBAAA9C,EAAA,6DAGda,EAAO,GAEPiC,IACAjC,EAAO,CACH2B,OAAQ,CACJ,gCAAiCM,KAKvCnC,EAAWwB,EAAkB8L,IAAlB,gDAEbpN,GAfc,kBAiBXF,GAjBW,2CAAH,sDCsEN8mC,GAAb,mDACIC,QAAU,GADd,KAGI5kC,KAAO,GAHX,KAKIyI,YALJ,OAOInJ,aAPJ,OASI+lB,QAAU,GATd,KAWIjB,QAAU,GAXd,KAaIhlB,YAbJ,KA+CO,SAASylC,GAAW9mC,GACvB,OAAOA,GAAQA,EAAKmD,KAAI,SAACu7B,GAAD,OAAYkI,GAAYxjC,MAAMs7B,MAhD7CkI,GAeKxjC,MAAQ,SAACpD,GAAyC,IAAD,IACrD0+B,EAAS,IAAIkI,GA2BnB,OAzBAlI,EAAOmI,QAAU7mC,EAAK+mC,QACtBrI,EAAOz8B,KAAOjC,EAAKgnC,eACnBtI,EAAOpX,QAAUtnB,EAAKinC,OACtBvI,EAAOrY,QAAUrmB,EAAKknC,cACtBxI,EAAOh0B,OAAS,CACZhB,SAAU1J,EAAKmnC,OAAOx7B,aACtBnH,WAAY,CACR1C,MAAM,UAAA9B,EAAKmnC,OAAOh8B,gBAAZ,eAAsBzI,OAAQ,GACpC4B,QAAQ,UAAAtE,EAAKmnC,OAAOh8B,gBAAZ,eAAsB/G,SAAU,IAE5CkF,UAAWtJ,EAAKmnC,OAAOn8B,QACvBzB,SAAUvJ,EAAKmnC,OAAOl8B,UACtBzB,SAAUxJ,EAAKmnC,OAAOj8B,UACtB5H,GAAItD,EAAKmnC,OAAOr8B,aAChBlB,YAAa5J,EAAKmnC,OAAO/7B,aACzB9G,OAAQtE,EAAKmnC,OAAOp8B,eAExB2zB,EAAOn9B,QAAU,CACb+H,UAAWtJ,EAAKonC,OAAOp8B,QACvBzB,SAAUvJ,EAAKonC,OAAOn8B,UACtBzB,SAAUxJ,EAAKonC,OAAOl8B,UACtB5H,GAAItD,EAAKonC,OAAOt8B,cAEpB4zB,EAAOr9B,OAASrB,EAAKqnC,sBAEd3I,GC1Gf,IAAM9pB,GAAYC,cAAgB,iBAAO,CACrC4Z,QAAS,CACL1Y,QAAS,OACTnR,SAAU,WACVqR,WAAY,SACZmJ,aAAc,OACdF,oBAAqB,UACrBxG,aAAc,OACdmD,YAAa,OACbkT,aAAa,aAAD,OAAe5gB,GAAOM,aAClCyG,MAAO,oBACP6jB,cAAe,OACfjkB,IAAK,IACLqB,WAAY,OACZb,gBAAiBnH,GAAOE,MACxB+G,OAAQif,GAASE,QAErB0E,eAAgB,CACZtjB,QAAS,kBACT8C,SAAU,OACVtD,OAAQ,OACR4jB,cAAe,YAyBjBuO,GAAoB,SAAC,GAAkB,IAAhB3vB,EAAe,EAAfA,SACnBG,EAAUlD,KAChB,OAAO,sBAAKd,UAAWgE,EAAQmhB,eAAxB,SAAyCthB,KAG9C4vB,GAA+C,SAAC,GAAyB,IAAvB78B,EAAsB,EAAtBA,OAAQnJ,EAAc,EAAdA,QACtDuW,EAAUlD,KAEhB,OACI,+BACI,uBAAKd,UAAWgE,EAAQ2W,QAAxB,UACI,iCACI,eAAC,GAAD,CAAYlU,IAAI,KAAKT,KAAK,MAAMM,MAAM,qBAAtC,SACKb,GAAE,0CAEA,OAAN7O,QAAM,IAANA,KAAQlB,SACL,eAAC,GAAD,CAAY+Q,IAAI,IAAIT,KAAK,KAAzB,SACKpP,EAAOlB,WAGZ,eAAC,GAAD,CAAY+Q,IAAI,IAAIT,KAAK,KAAzB,gBACKvY,QADL,IACKA,OADL,EACKA,EAASiI,cAItB,iCACI,eAAC,GAAD,CAAY+Q,IAAI,KAAKT,KAAK,MAAMM,MAAM,sBAAtC,SACKb,GAAE,mDAEN7O,GAAUnJ,EACP,eAAC,GAAD,CAAYgZ,IAAI,IAAIT,KAAK,KAAzB,SACKzR,EACGqC,EAAM,OACAA,QADA,IACAA,OADA,EACAA,EAAQhB,SACR,IAAItB,KAAK7G,EAAQ+K,aAAaC,cAI5C,aAQlBi7B,GAAkD,SAAC,GAAe,IAAbj3B,EAAY,EAAZA,MACjDuH,EAAUlD,KAEhB,OACI,+BACI,sBAAKd,UAAWgE,EAAQ2W,QAAxB,SACI,iCACI,eAAC,GAAD,CAAYlU,IAAI,KAAKT,KAAK,MAAMM,MAAM,qBAAtC,SACKb,GAAE,kDAENhJ,GACG,eAAC,GAAD,CAAYgK,IAAI,IAAIT,KAAK,KAAzB,SACKvJ,YC/GvBqE,GAAYC,cAAgB,iBAAO,CACrC4Z,QAAS,CACL7pB,SAAU,WACVwa,aAAc,OACdrJ,QAAS,OACTE,WAAY,cAIdwxB,GAAuB,SAAC,GAAkB,IAAhB9vB,EAAe,EAAfA,SACtBG,EAAUlD,KAEhB,OAAO,sBAAKd,UAAWgE,EAAQ2W,QAAxB,SAAkC9W,KCShC+vB,GAAW,SAACC,GACrB,IAAI1rB,EAAQ0rB,EACZ,OAAQA,GAEJ,IAAK,oBACD1rB,EAAQ1C,GAAE,2CACV,MAEJ,IAAK,cACD0C,EAAQ1C,GAAE,4CACV,MAEJ,IAAK,UACD0C,EAAQ1C,GAAE,uCACV,MAEJ,IAAK,kBACD0C,EAAQ1C,GAAE,wCACV,MAEJ,IAAK,YACD0C,EAAQ1C,GAAE,yCACV,MAEJ,IAAK,WACD0C,EAAQ1C,GAAE,sCACV,MAEJ,IAAK,eACD0C,EAAQ1C,GAAE,2CACV,MAEJ,IAAK,iBACD0C,EAAQ1C,GAAE,8CACV,MAEJ,IAAK,cACD0C,EAAQ1C,GAAE,4CACV,MAEJ,IAAK,uBACD0C,EAAQ1C,GAAE,sDAMlB,OAAO0C,GASLrH,GAAYC,aAAgB,CAC9B,oBAAqB,CACjB/M,KAAM,CACF6J,QAAS,GAEboD,GAAI,CACApD,QAAS,IAGjBsnB,eAAgB,CACZtjB,QAAS,kBACT8C,SAAU,OACVtD,OAAQ,OACR4jB,cAAe,QAEnB1jB,UAAU,cACNM,QAAS,YADJ,6BAEkB+E,GAAYC,QAF9B,OAE6C,CAC9C,IAAK,CACDhF,QAAS,OAIrBgZ,WAAY,CACR5Y,QAAS,OACTJ,QAAS,UACTkF,UAAW,QAEfujB,cAAe,CACXroB,QAAS,OACTJ,QAAS,eACToZ,aAAa,aAAD,OAAe5gB,GAAOM,aAClC2Q,aAAc,QAElB0P,QAAS,CACLC,aAAa,aAAD,OAAe5gB,GAAOmB,SAElCuL,UAAW,QAEfmU,cAAe,CACXjZ,QAAS,OACTmf,SAAU,EACVrT,WAAY,OACZ3K,eAAgB,WAChBjB,WAAY,aACZgZ,WAAY,GAEhBoP,qBAAsB,CAClBtoB,QAAS,OACTJ,QAAS,aACTkF,UAAW,OACX3F,MAAO,OACPI,gBAAiBnH,GAAOQ,SACxByL,MAAOjM,GAAOI,MACd2I,eAAgB,gBAChBjB,WAAY,SACZ,SAAU,CACNU,WAAY,KAEhBf,UAAW,eAEf0oB,uBAAwB,CACpBvoB,QAAS,OACTb,MAAO,OACPgC,eAAgB,gBAEpBZ,OAAO,2BACAiY,IACA,CACC1X,OAAQ,YAGhBwmB,aAAc,CACVtnB,QAAS,QAEbunB,cAAe,CACXvnB,QAAS,OACTnR,SAAU,WACV2R,MAAO,OACPzB,IAAK,QAETypB,YAAa,CACT35B,SAAU,YAEdmF,QAAS,CACLgM,QAAS,cACT6xB,gBAAiB,IACjBC,gBAAiB,WACjBpvB,SAAU,SACVqvB,aAAc,YAElBC,cAAe,CACXjzB,IAAK,IACLyB,MAAO,IACPR,QAAS,OACTX,OAAQ,IACRxQ,SAAU,WACVqwB,SAAU,OACVre,WAAY,kBACZM,eAAgB,MAChBhC,MAAO,OACPC,OAAQ,OACRc,WAAY,SACZnG,WAAY,yBAEhB0e,gBAAgB,eACTA,IAEPwZ,YAAa,CACT5oB,aAAc,QAElBrI,WAAY,CACR7B,MAAO,OACPC,OAAQ,OACRI,aAAc,MACduB,OAAO,aAAD,OAAe3I,GAAOE,OAC5BiH,gBAAiBnH,GAAOsB,QACxBsG,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBC,YAAa,QAEjB8wB,QAAS,CACLvxB,eAAgB,eAChBX,QAAS,WAiBXmyB,GAAmE,SAAC,GAKpE,EAJF7+B,SAIG,IAHHq1B,EAGE,EAHFA,OACAyJ,EAEE,EAFFA,cAGMrwB,GADJ,EADF2E,OAEgB7H,MAChB,EAAoCgI,oBAAS,GAA7C,mBAgCMwrB,GAhCN,UAgCmB,CACf,oBACA,kBACA,UACA,cACA,uBACA,cACA,iBACA,iBAGJ,OACKD,GACAA,GACGA,EAAcE,mBACbF,EAAcE,iBAAiB5gC,OAE7B,KAGP,uBAAK+Q,MAAO,CAAEhC,OAAQ,eAAtB,UACI,eAAC,GAAD,UACI,eAAC,GAAD,CACI+D,IAAI,KACJT,KAAK,IACLW,QAAQ,QACRV,OAAO,OACPK,MAAOjM,GAAOU,SALlB,SAOK0K,GAAE,uCAGX,eAAC,GAAD,CACIgB,IAAI,KACJ/B,MAAO,CACHtD,MAAO,OACP4B,OAAQ,OACRgkB,UAAW,gCAGlBqN,EACG,uCACKA,EAAcE,iBAAiBrmC,MAC5B,SAAC7C,EAAGinB,GAAJ,OACIgiB,EAAW/jB,QAAQllB,EAAEmpC,oBACrBF,EAAW/jB,QAAQ+B,EAAEkiB,uBAC3BnlC,KAAI,SAAColC,GACH,MACoB,kBAAhB7J,EAAOz8B,MACsB,sBAA7BsmC,EAAMD,mBAEC,KAGP,gBAAC,GAAD,WACI,eAAC,GAAD,CACI/tB,IAAI,IACJT,KAAK,IACLC,OAAO,OACPvB,MAAO,CAAE4G,aAAc,OAJ3B,SAMKsoB,GAASa,EAAMD,sBAEpB,gBAAC,GAAD,CAAY/tB,IAAI,IAAIT,KAAK,IAAzB,UACI,uBACIhG,UACoB,kBAAhB4qB,EAAOz8B,MACP6V,EAAQmwB,QAHhB,SAMKM,EAAMC,cAAgB,MAEV,kBAAhB9J,EAAOz8B,KACJ,uBAAM6R,UAAWgE,EAAQmwB,QAAzB,SACKM,EAAME,cAAgB,MAE3B,cAKpB,gBAAC,GAAD,WACI,eAAC,GAAD,CACIluB,IAAI,IACJT,KAAK,IACLC,OAAO,OACPvB,MAAO,CAAE4G,aAAc,OAJ3B,SAMK7F,GAAE,kDAEP,eAAC,GAAD,CAAYgB,IAAI,IAAIT,KAAK,IAAzB,SArHD,SAAC4uB,GAChB,GAAmB,OAAfA,EACA,MAAO,aAGX,IAAMpgC,EAAO,IAAIF,KAAKsgC,GAEhBC,GADM,IAAIvgC,MACIM,cAChBm4B,GAAU,EAQd,MAN6C,kBAAzClY,OAAOigB,UAAU9f,SAAS+f,KAAKvgC,KAC1BwgC,OAAOC,MAAMzgC,EAAKge,aACnBua,GAAU,KAKbA,GACD8H,EAAUrgC,EAAKI,cAAgB,GAC/BigC,EAAUrgC,EAAKI,eAAiB,EAEzB,mBAGJL,EAAWC,GA8FG0gC,CACoC,kBAAjCb,EAAcnB,eACRmB,EAAcc,QACdd,EAAce,kBAI/Bf,EAAcgB,mBACX,gBAAC,GAAD,WACI,eAAC,GAAD,CACI5uB,IAAI,IACJT,KAAK,IACLC,OAAO,OACPvB,MAAO,CAAE4G,aAAc,OAJ3B,SAMK7F,GACG,mDAGR,eAAC,GAAD,CAAYgB,IAAI,IAAIT,KAAK,IAAzB,SACKquB,EAAcgB,wBAGvB,QAER,SAWVC,GAAe,SAACC,GAClB,IAAMnc,EAAI,IAAIjkB,EAMd,OAJAikB,EAAExjB,SAAW,IAAItB,KAAKihC,EAAe3/B,UACrCwjB,EAAE7jB,SAAWggC,EAAe/lC,GAC5B4pB,EAAE1jB,SAAW6/B,EAAe7/B,SAErB0jB,GAGLoc,GAAiB,SAAC,GAAmD,IAAD,IAAhD5K,EAAgD,EAAhDA,OAAQ6K,EAAwC,EAAxCA,OAAQ9sB,EAAgC,EAAhCA,OACtC,EAAoCG,oBAAS,GAA7C,mBAAO4sB,EAAP,KAAmBC,EAAnB,KACA,EAA0C7sB,wBACtCva,GADJ,mBAAO8lC,EAAP,KAAsBuB,EAAtB,KAIM7iC,EAAS,OAAGshC,QAAH,IAAGA,GAAH,UAAGA,EAAeE,wBAAlB,iBAAG,EAAiC58B,MAC/C,SAACk+B,GAAD,MAAwC,sBAA7BA,EAAMrB,6BADN,aAAG,EAEfE,aAqBH,OAnBAvrB,qBAAU,WACN,IAAM2sB,EAAK,uCAAG,4BAAAzqC,EAAA,6DACVsqC,GAAc,GADJ,kBJzXI5C,EI4X+BnI,EAAOmI,QJ3X3CvlC,EAAkB8L,IAC/B,yCACA,CACIzL,OAAQ,CACJ,4BAA6BklC,KIoXvB,OAGAgD,EAHA,OAINH,EAAiBG,EAAU7pC,MAC3BypC,GAAc,GALR,gDAONA,GAAc,GAPR,QAUVA,GAAc,GAVJ,kCJzXG,IAAC5C,IIyXJ,oBAAH,qDAaN2C,GAAerB,IAAiB1rB,GACjCmtB,MAEL,CAACJ,EAAY9K,EAAOmI,QAASsB,EAAe1rB,IAG3C,gBAAC,GAAD,CACIwd,UAAWxd,EACXyd,KAAM,WACEqP,GACAA,GAAO,IAJnB,UAQI,+BACI,eAAC,GAAD,CAAwB7+B,OAAQ0+B,GAAa1K,EAAOh0B,YAExD,gBAAC,GAAD,WACI,eAAC,GAAD,CACI6P,IAAI,KACJT,KAAK,KACLO,MAAM,SACNN,OAAO,OACPvB,MAAO,CAAEhC,OAAQ,eALrB,SAOKyU,GAAmByT,EAAOz8B,QAEd,uCAAhBy8B,EAAOz8B,MACJ,eAAC,GAAD,CAAYsY,IAAI,KAAKT,KAAK,IAAIO,MAAM,SAApC,SACI,eAAC,GAAD,CAAYE,IAAI,KAAKT,KAAK,IAAIO,MAAM,SAApC,SACKqkB,EAAOh0B,OAAOlB,aAIV,kBAAhBk1B,EAAOz8B,MACJ,eAAC,GAAD,CAAYsY,IAAI,KAAKT,KAAK,IAAIO,MAAM,SAApC,mBACQqkB,EAAOh0B,OAAOlB,UAAY,IADlC,kBAEsBnH,IAAdwE,EAA0BA,EAAY,OAIjC,kBAAhB63B,EAAOz8B,MACJ,eAAC,GAAD,CAAYsY,IAAI,KAAKT,KAAK,IAAIO,MAAM,SAApC,SACKqkB,EAAOh0B,OAAOlB,UAAY,MAGnC,eAAC,GAAD,CACIk1B,OAAQA,EACRr1B,SAAUq1B,EAAOh0B,OAAOpH,GACxBmZ,OAAQA,EACR0rB,cAAeA,IAEnB,uBAAK3vB,MAAO,CAAE+W,UAAW,QAAzB,UACI,eAAC,GAAD,UACI,eAAC,GAAD,CACIhV,IAAI,KACJT,KAAK,IACLW,QAAQ,QACRV,OAAO,OACPK,MAAOjM,GAAOU,SALlB,SAOK0K,GAAE,4CAGX,eAAC,GAAD,CACIgB,IAAI,KACJ/B,MAAO,CACH1B,OAAQ,OACR5B,MAAO,OACP4lB,UAAW,gCAGnB,gBAAC,GAAD,WACI,eAAC,GAAD,CACIvgB,IAAI,IACJT,KAAK,IACLC,OAAO,OACPvB,MAAO,CAAE4G,aAAc,OAJ3B,SAMK7F,GAAE,2CAEP,eAAC,GAAD,CAAYgB,IAAI,IAAIT,KAAK,IAAzB,SACK4kB,EAAOn9B,QAAQiI,cAiBxB,gBAAC,GAAD,WACI,eAAC,GAAD,CACI+Q,IAAI,IACJT,KAAK,IACLC,OAAO,OACPvB,MAAO,CAAE4G,aAAc,OAJ3B,SAMK7F,GAAE,6CAEP,eAAC,GAAD,CAAYgB,IAAI,IAAIT,KAAK,IAAzB,SACKzR,EAAW,IAAID,KAAKs2B,EAAOpX,eAiBpC,gBAAC,GAAD,WACI,eAAC,GAAD,CACI/M,IAAI,IACJT,KAAK,IACLC,OAAO,OACPvB,MAAO,CAAE4G,aAAc,OAJ3B,SAMK7F,GAAE,kDAEP,eAAC,GAAD,CAAYgB,IAAI,IAAIT,KAAK,IAAzB,SACK4kB,EAAOh0B,OAAOlG,WAAW1C,UAIlC,gBAAC,GAAD,WACI,eAAC,GAAD,CACIyY,IAAI,IACJT,KAAK,IACLC,OAAO,OACPvB,MAAO,CAAE4G,aAAc,OAJ3B,SAMK7F,GAAE,sCAEP,eAAC,GAAD,CAAYgB,IAAI,IAAIT,KAAK,IAAzB,SACKoR,GAAqBwT,EAAOr9B,aAGlB,qBAAlBq9B,EAAOr9B,OACJ,gBAAC,GAAD,WACI,eAAC,GAAD,CACIkZ,IAAI,IACJT,KAAK,IACLC,OAAO,OACPvB,MAAO,CAAE4G,aAAc,OAJ3B,uBAQA,eAAC,GAAD,CAAY7E,IAAI,IAAIT,KAAK,IAAzB,SACKzR,EAAW,IAAID,KAAKs2B,EAAOrY,eAGpC,eAOXyjB,GAA+B,SAAC,GAItC,IAHHpL,EAGE,EAHFA,OACAxf,EAEE,EAFFA,oBACA6qB,EACE,EADFA,kBAEMjyB,EAAUlD,KAChB,EAA4BgI,oBAAS,GAArC,mBAAOH,EAAP,KAAeye,EAAf,KAEA,MAAoB,kBAAhBwD,EAAOz8B,KACA,KAIP,uCACI,gBAAC,GAAD,CACIid,oBAAoB,OACpB/D,QAAS,kBAAM+f,GAAWze,IAF9B,UAKI,gBAAC,GAAD,WACI,eAAC,GAAD,CACIlC,IAAI,IACJT,KAAK,IACLC,OAAO,OACPvB,MAAO,CAAE4G,aAAc,OAJ3B,SAMK7F,GAAE,kDAEP,eAAC,GAAD,CAAYO,KAAK,KAAjB,SACKzR,EAAW,IAAID,KAAKs2B,EAAOpX,eAGpC,gBAAC,GAAD,WACI,eAAC,GAAD,CACI/M,IAAI,IACJT,KAAK,IACLC,OAAO,OACPvB,MAAO,CAAE4G,aAAc,OAJ3B,SAMK7F,GAAE,gDAEP,eAAC,GAAD,CAAYO,KAAK,KAAjB,SAAuB4kB,EAAOh0B,OAAOlB,cAEzC,gBAAC,GAAD,WACI,eAAC,GAAD,CACI+Q,IAAI,IACJT,KAAK,IACLC,OAAO,OACPvB,MAAO,CAAE4G,aAAc,OAJ3B,SAMK7F,GAAE,gDAEP,eAAC,GAAD,CAAYO,KAAK,KAAjB,SACI,uBAAMhG,UAAWgE,EAAQ/N,QAAzB,SACKkhB,GAAmByT,EAAOz8B,aAIvC,gBAAC,GAAD,CAAUue,gBAAc,EAAxB,UACI,eAAC,GAAD,CACIjG,IAAI,IACJT,KAAK,IACLC,OAAO,OACPvB,MAAO,CAAE4G,aAAc,OAJ3B,SAMK7F,GAAE,qDAEP,eAAC,GAAD,CAAYO,KAAK,KAAjB,SACI,uBAAMhG,UAAWgE,EAAQ/N,QAAzB,SACK20B,EAAOn9B,QAAQiI,gBAI3BugC,EACG,gBAAC,GAAD,WACI,eAAC,GAAD,CACIxvB,IAAI,IACJT,KAAK,IACLC,OAAO,OACPvB,MAAO,CAAE4G,aAAc,OAJ3B,SAMK7F,GAAE,mDAEP,eAAC,GAAD,CAAYO,KAAK,KAAjB,SACKzR,EAAW,IAAID,KAAKs2B,EAAOrY,eAGpC,KACJ,eAAC,GAAD,UACI,eAAC,GAAD,UACI,eAAC,GAAD,CAAYvM,KAAK,KAAjB,SACKoR,GAAqBwT,EAAOr9B,gBA1EpCq9B,EAAOmI,SAAU,IAAIz+B,MAAO69B,gBA+ErC,gBAAC,GAAD,CACIzmB,UAAQ,EAERN,oBAAqBA,EACrB/D,QAAS,WACL+f,GAAWze,IALnB,UAQI,eAAC,GAAD,UACI,eAAC,GAAD,CAAY3C,KAAK,KAAjB,SACKzR,EAAW,IAAID,KAAKs2B,EAAOpX,cAGpC,eAAC,GAAD,UACI,eAAC,GAAD,CAAYxN,KAAK,KAAjB,SAAuB4kB,EAAOh0B,OAAOlB,aAEzC,eAAC,GAAD,UACI,eAAC,GAAD,CAAYsQ,KAAK,KAAjB,SACI,uBAAMhG,UAAWgE,EAAQ/N,QAAzB,SACKkhB,GAAmByT,EAAOz8B,YAIvC,eAAC,GAAD,CAAUue,gBAAc,EAAxB,SACI,eAAC,GAAD,CAAY1G,KAAK,KAAjB,SACI,uBAAMhG,UAAWgE,EAAQ/N,QAAzB,SACK20B,EAAOn9B,QAAQiI,eAI3BugC,EACG,eAAC,GAAD,UACI,eAAC,GAAD,CAAYjwB,KAAK,KAAjB,SACKzR,EAAW,IAAID,KAAKs2B,EAAOrY,cAGpC,KACJ,eAAC,GAAD,UACI,eAAC,GAAD,UACI,eAAC,GAAD,CAAYvM,KAAK,KAAjB,SACKoR,GAAqBwT,EAAOr9B,gBAtCpCq9B,EAAOmI,SA2ChB,eAAC,GAAD,CACInI,OAAQA,EACR6K,OAAQ,SAACS,GAAD,OAAsB9O,EAAU8O,IACxCvtB,OAAQA,QCvsBlB7H,GAAYC,aAAgB,CAC9B,oBAAqB,CACjB/M,KAAM,CACF6J,QAAS,GAEboD,GAAI,CACApD,QAAS,IAGjB0D,UAAU,cACNM,QAAS,YADJ,6BAEkB+E,GAAYC,QAF9B,OAE6C,CAC9C,IAAK,CACDhF,QAAS,OAIrBgZ,WAAY,CACR5Y,QAAS,OACTJ,QAAS,UACTkF,UAAW,QAEfujB,cAAe,CACXroB,QAAS,OACTJ,QAAS,eACToZ,aAAa,aAAD,OAAe5gB,GAAOM,aAClC2Q,aAAc,QAElB0P,QAAS,CACLC,aAAa,aAAD,OAAe5gB,GAAOmB,SAElCuL,UAAW,QAEfmU,cAAe,CACXjZ,QAAS,OACTmf,SAAU,EACVrT,WAAY,OACZ3K,eAAgB,WAChBjB,WAAY,aACZgZ,WAAY,GAEhBoP,qBAAsB,CAClBtoB,QAAS,OACTJ,QAAS,aACTkF,UAAW,OACX3F,MAAO,OACPI,gBAAiBnH,GAAOQ,SACxByL,MAAOjM,GAAOI,MACd2I,eAAgB,gBAChBjB,WAAY,SACZ,SAAU,CACNU,WAAY,KAEhBf,UAAW,eAEfq0B,WAAY,CACR9zB,WAAY,QAEhBmoB,uBAAwB,CACpBvoB,QAAS,OACTb,MAAO,OACPgC,eAAgB,gBAEpBZ,OAAO,2BACAiY,IACA,CACC1X,OAAQ,YAGhBwmB,aAAc,CACVtnB,QAAS,QAEbunB,cAAe,CACXvnB,QAAS,OACTnR,SAAU,WACV2R,MAAO,OACPzB,IAAK,QAETo1B,eAAgB,CACZn0B,QAAS,OACTJ,QAAS,cACTuB,eAAgB,SAChBjB,WAAY,UAEhBsoB,YAAa,CACT35B,SAAU,YAEdmF,QAAS,CACLgM,QAAS,cACT6xB,gBAAiB,IACjBC,gBAAiB,WACjBpvB,SAAU,SACVqvB,aAAc,YAElBC,cAAe,CACXjzB,IAAK,IACLyB,MAAO,IACPR,QAAS,OACTX,OAAQ,IACRxQ,SAAU,WACVqwB,SAAU,OACVre,WAAY,kBACZM,eAAgB,MAChBhC,MAAO,OACPC,OAAQ,OACRc,WAAY,SACZnG,WAAY,yBAEhB0e,gBAAgB,eACTA,IAEP2b,WAAY,CACR70B,gBAAiBnH,GAAOU,SACxBkH,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBkD,MAAOjM,GAAOE,MACdsH,QAAS,UACTJ,aAAc,SAIhB2J,GAAsB,sBACtBkrB,GAA6B,2BAE7BC,GAAc,WAChB,MAA8BztB,oBAAS,GAAvC,mBAAOwT,EAAP,KAAgBC,EAAhB,KACMvY,EAAUlD,KAChB,EAA+BmZ,KAAvBM,EAAR,EAAQA,QAASF,EAAjB,EAAiBA,UAEjB,EAAgCvR,oBAAS,GAAzC,mBAAO0tB,EAAP,KACA,GADA,KAC2Btc,kBAAQtB,KACnC,GADA,oBACiCsB,kBAAQrB,KACzC,GADA,oBACiCqB,kBAAQlC,KAAzC,mBAAO5E,EAAP,KAAgBqjB,EAAhB,KACA,EAAwBvc,kBAAQzB,IAAzBE,EAAP,oBAEA,EAA+BuB,kBAAQjC,IACvC,GADA,oBACkCiC,kBAAQhC,KAA1C,oBAuCA,OAPA/O,qBAAU,WACDkR,GACDE,EAAQ,WAhCH,WAAY,4CACrB,kCAAAlvB,EAAA,6DACIkxB,GAAW,IACLxf,EAAI,IAAIzI,MAGZoiC,SAAS35B,EAAEpI,WAAa,GAL9B,SAM0Bk+B,KAN1B,OAMU8D,EANV,OAOUC,EAAS5D,GAAW2D,EAAQzqC,KAAK2qC,mBACjC3d,EAAW0d,EAAOjnB,QAAO,SAAC9b,GAC5B,MAAoB,oBAAhBA,EAAKtG,QAIW,qBAAhBsG,EAAKtG,QACE,IAAI+G,KAAKT,EAAK2f,SAAWzW,KAMxC05B,EACIvd,EAASvJ,QAAO,SAAC9b,GAAD,MAAwB,kBAAdA,EAAK1F,SAEnCouB,GAAW,GAvBf,6CADqB,uBAAC,WAAD,wBA2BrBua,GAOA/f,KACD,IAECuF,EAAgB,eAAC,GAAD,IAGhB,uBAAKtc,UAAS,UAAKgE,EAAQzC,UAAb,YAAd,UACI,sBAAKvB,UAAS,UAAKgE,EAAQsmB,cAAb,iBAAd,SACI,sBAAKtqB,UAAWgE,EAAQkX,cAAxB,SACI,eAAC,GAAD,QAGR,sBAAKlb,UAAWgE,EAAQ6W,WAAxB,SACI,sBAAK7a,UAAU,eAAf,SACI,eAAC,GAAD,CAAYyG,IAAI,KAAKT,KAAK,QAA1B,SAEUmQ,GADLqgB,EACY,wCACA,8CAIzB,sBAAKx2B,UAAWgE,EAAQ6W,WAAxB,SACI,eAAC,GAAD,CAAYpU,IAAI,IAAIT,KAAK,IAAIM,MAAOjM,GAAOqB,QAA3C,SAGUya,GAFJqgB,EAEW,mCADA,uCAIrB,sBAAKx2B,UAAWgE,EAAQ6W,WAAxB,SACI,+BACI,eAAC,GAAD,CAAY7U,KAAK,KAAjB,SACKmQ,GACG,iDACA,CACI4gB,MAAOnJ,OAAOjV,EAAchlB,gBAOhD,uBAAKqM,UAAS,UAAKgE,EAAQmyB,YAA3B,UACK/iB,GAAWA,EAAQzf,OAChB,eAAC,GAAD,UACI,gBAAC,GAAD,CACIyX,oBACIorB,EACMF,GACAlrB,GAJd,UAOI,eAAC,GAAD,UACI,eAAC,GAAD,CACI/D,QAAS,kBAAMkT,EAAQ,YACvBrsB,KAAMmsB,EACNrsB,KAAK,UAHT,SAKKyX,GACG,oDAIZ,eAAC,GAAD,UACI,eAAC,GAAD,CACI4B,QAAS,kBAAMkT,EAAQ,SACvBrsB,KAAMmsB,EACNrsB,KAAK,OAHT,SAKKyX,GACG,kDAIZ,eAAC,GAAD,UACI,eAAC,GAAD,CACI4B,QAAS,kBAAMkT,EAAQ,eACvBrsB,KAAMmsB,EACNrsB,KAAK,aAHT,SAKKyX,GACG,gDAIZ,eAAC,GAAD,UACI,eAAC,GAAD,CACI4B,QAAS,kBAAMkT,EAAQ,kBACvBrsB,KAAMmsB,EACNrsB,KAAK,gBAHT,SAKKyX,GACG,uDAIX+wB,EACG,eAAC,GAAD,UACI,eAAC,GAAD,CACInvB,QAAS,kBAAMkT,EAAQ,kBACvBrsB,KAAMmsB,EACNrsB,KAAK,gBAHT,SAKKyX,GACG,qDAIZ,KACJ,eAAC,GAAD,UACI,eAAC,GAAD,CACI4B,QAAS,kBAAMkT,EAAQ,WACvBrsB,KAAMmsB,EACNrsB,KAAK,SAHT,SAKKyX,GACG,uDAMpB,KACHkT,EAActpB,KAAI,SAACu7B,GAAD,OACf,eAAC,GAAD,CACIxf,oBACIorB,EACMF,GACAlrB,GAEV6qB,kBAAmBO,EACnB5L,OAAQA,UAIpB,sBAAK5qB,UAAWgE,EAAQoyB,eAAxB,SACI,eAAC,GAAD,CAAYpwB,KAAK,KAAjB,SACKmQ,GAAO,oCAAqC,CACzC4gB,MAAOnJ,OAAOjV,EAAchlB,kBClU9CqjC,GAAc,uCAAG,WACnBxnC,EACArB,GAFmB,iBAAA9C,EAAA,sEAIImC,EAAkB8L,IAAlB,kBAAyC,CAC5DzL,OAAQ,CACJ,sBAAuB2B,EACvB,wBAAyBrB,KAPd,cAIbnC,EAJa,OAWXE,EAASF,EAATE,KAXW,kBAYZA,GAZY,2CAAH,wDAgBd+qC,GAAW,uCAAG,0CAAA5rC,EAAA,6DAAO8C,EAAP,+BAAc,cAAd,SACOX,EAAkB8L,IAAlB,yBAAgD,CACnEzL,OAAQ,CACJ,wBAAyBM,KAHjB,cACVnC,EADU,yBAMTA,GANS,2CAAH,qDASXkrC,GAAU,uCAAG,WACfz9B,GADe,eAAApO,EAAA,sEAGQmC,EAAkB/B,KAAlB,kBAA0CgO,GAHlD,cAGTzN,EAHS,yBAKRA,GALQ,2CAAH,sDAQVmrC,GAAU,uCAAG,WAAO19B,GAAP,eAAApO,EAAA,sEACQmC,EAAkB/B,KAAlB,oBAA4CgO,GADpD,cACTzN,EADS,yBAGRA,GAHQ,2CAAH,sDAMVorC,GAAoB,uCAAG,WACzB5nC,EACAujB,GAFyB,eAAA1nB,EAAA,sEAIFmC,EAAkB/B,KAAlB,2BAEnB,KACA,CACIoC,OAAQ,CACJ,iBAAkB2B,EAClB,kBAAmBujB,KAVN,cAInB/mB,EAJmB,yBAelBA,GAfkB,2CAAH,wDAkBpBqrC,GAAU,uCAAG,WAAO7nC,GAAP,eAAAnE,EAAA,sEACQmC,EAAkB62B,OAAlB,iBAA2C,CAC9Dx2B,OAAQ,CACJ,iBAAkB2B,KAHX,cACTxD,EADS,yBAORA,GAPQ,2CAAH,sDCzBHsrC,GAAb,iDACIC,YAAc,GADlB,KAGIC,cAAgB,GAHpB,KAKI/6B,MAAQ,GALZ,KAOIxG,QAAU,GAPd,KASIzG,QAAyBjB,EAT7B,KAWIilB,aAA4BjlB,EAXhC,KAaIgkB,aAA4BhkB,EAbhC,KAeIP,KAAO,GAfX,KAiBIsH,YAAa,EAjBjB,KAmBImiC,UAAW,EAnBf,KAqBI1kB,QAAS,EArBb,KAwBI2kB,iBAAmB,GAxBvB,KA0BIC,mBAAqB,GA1BzB,KA4BIC,kBAAoB,GA5BxB,8CA8BI,SAAa1rC,GACT,IAAMo4B,EAAO,IAAIgT,EAqBjB,OAnBAhT,EAAKiT,YAAc3J,OAAO1hC,EAAK2rC,aAC/BvT,EAAKruB,QAAU/J,EAAK4rC,QACpBxT,EAAK7nB,MAAQvQ,EAAK6rC,MAClBzT,EAAKkT,cAAgBtrC,EAAK8rC,cAC1B1T,EAAK90B,GAAKtD,EAAK+rC,OACf3T,EAAK/R,QAAU,IAAIje,KAAKpI,EAAKgsC,YAC7B5T,EAAK9Q,QAAU,IAAIlf,KAAKpI,EAAKisC,UAC7B7T,EAAKt2B,KAAO9B,EAAKksC,eAAiB,GAClC9T,EAAKhvB,WAAapJ,EAAK4K,UACvBwtB,EAAKmT,SAAWvrC,EAAKmsC,QACrB/T,EAAKvR,OAAS7mB,EAAKmsC,QAGnB/T,EAAKqT,mBAAqBrT,EAAKruB,QAE/BquB,EAAKoT,iBAAmBpT,EAAK7nB,MAE7B6nB,EAAKsT,kBAAoBtT,EAAKt2B,KAEvBs2B,MApDf,KAwDO,SAASgU,GAASpsC,GACrB,OAAOA,EAAKmD,KAAI,SAACi1B,GAAD,OAAUgT,GAAKhoC,MAAMg1B,MC9EzC,IAAMxjB,GAAYC,aAAgB,CAC9BokB,eAAgB,CACZtjB,QAAS,kBACT8C,SAAU,OACVtD,OAAQ,qBACR4jB,cAAe,QAEnB6B,iBAAkB,CACdxb,aAAc,QAElBxD,OAAQ,CACJhX,SAAU,WACVuQ,OAAQ,WACRG,gBAAiBnH,GAAOE,MACxByI,OAAO,aAAD,OAAe3I,GAAOM,aAC5B8G,aAAc,MACdL,MAAO,OACP2E,SAAU,WACVgC,YAAa,SACbnD,aAAc,SACd7B,OAAQ,UACRuD,MAAOjM,GAAOO,YAElB4H,OAAO,2BACAiY,IACA,CACC1X,OAAQ,YAGhB+gB,OAAQ,CACJ7hB,QAAS,OACTnR,SAAU,WACVgzB,OAAQ,IACR1iB,MAAO,OACPS,QAAS,OACTV,KAAM,IACNnF,WAAY3B,GAAOE,MACnB+G,OAAQ,EACR0lB,UAAU,aAAD,OAAe3sB,GAAOM,aAC/B,aAAc,CACVymB,SAAU,GAEd,0BAA2B,CACvB/d,YAAa,QAWZk1B,GAA4B,SAAC,GAOnC,IANH3hC,EAME,EANFA,OACAzI,EAKE,EALFA,KACA6E,EAIE,EAJFA,UACAwlC,EAGE,EAHFA,UACAC,EAEE,EAFFA,cACAC,EACE,EADFA,SAEA,EAAsBxe,kBAAQpgB,IAAvBiiB,EAAP,oBACA,EAAkDjT,oBAAS,GAA3D,mBAAOwY,EAAP,KAA0BC,EAA1B,KACA,EACIoP,eADI5B,EAAR,EAAQA,SAAU8B,EAAlB,EAAkBA,aAAcE,EAAhC,EAAgCA,UAAWH,EAA3C,EAA2CA,MAErC5sB,EAAUlD,KAChB,EAA8BgI,oBAAS,GAAvC,mBAAOikB,EAAP,KAAgBqE,EAAhB,KAMQE,EAAyBP,EAAzBO,QAASqH,EAAgB5H,EAAhB4H,YAEXpG,EAAQ,uCAAG,WAAOrmC,GAAP,iBAAAb,EAAA,0DACT0wB,EAAYruB,WADH,uBAET6zB,GAAqB,GAFZ,6BAKPqX,EAAkC,CACpCf,YAAsB,WAAT1pC,EAAoByI,EAAOrB,SAAWvC,EAAUxC,OAC7DwnC,cAAwB,WAAT7pC,EAAoB,cAAgB,kBAGnDmjC,EAVS,wBAWLqH,EAAYb,UACZc,EAAad,QAAU5rC,EAAK4rC,SAG5Ba,EAAYZ,QACZa,EAAab,MAAQ7rC,EAAK6rC,OAhBrB,SAmBcb,GAAW0B,GAnBzB,OAmBH5sC,EAnBG,OAqBLwsC,GAAaxsC,GACbwsC,IAtBK,4CAAH,sDAoCd,OAJArvB,qBAAU,WAHNioB,EAAWE,MAQX,uCACI,wBACIiB,SAAU1B,EAAa0B,GACvBvyB,UAAWgE,EAAQmhB,eAFvB,UAII,eAAC,GAAD,CACI1e,IAAI,KACJT,KAAK,KACLO,MAAM,SACNN,OAAO,OACPvB,MAAO,CAAEhC,OAAQ,eALrB,SAOKyT,GAAO,8BAGZ,eAAC,GAAD,UACI,eAAC,GAAD,CACIhO,MAAO1C,GAAE,4CACTspB,SAAUA,EACV/gC,KAAK,QACL+b,UAAQ,EACR8kB,UAAW,QAInB,eAAC,GAAD,UACI,eAAC,GAAD,CACI1mB,MACIuwB,EACM,UACAjzB,GAAE,wCAEZspB,SAAUA,EACV/gC,KAAK,UACLqgC,SAAU,QAGlB,uBAAKruB,UAAWgE,EAAQ8f,OAAxB,UACI,eAAC,GAAD,CACIzc,QAAS,WAjFzBupB,IAmFoB6H,KAEJtqC,KAAK,YACL6X,KAAK,QANT,SAQKP,GAAE,sCAEP,eAAC,GAAD,CACI8B,WAAW,SACXpZ,KAAK,UACL6X,KAAK,QACLsB,UAAWylB,EAJf,SAMKtnB,GAAE,oCAIX,4BAEJ,eAAC,GAAD,CACIqb,KAAMQ,EACNP,QAAS,kBAAMQ,GAAqB,UAMpDgX,GAAWj1B,aAAe,CACtBo1B,UAAU,GC3Ld,IAAM53B,GAAYC,aAAgB,CAC9BokB,eAAgB,CACZtjB,QAAS,kBACT8C,SAAU,OACVtD,OAAQ,qBACR4jB,cAAe,QAEnB6B,iBAAkB,CACdxb,aAAc,QAElBxD,OAAQ,CACJhX,SAAU,WACVuQ,OAAQ,WACRG,gBAAiBnH,GAAOE,MACxByI,OAAO,aAAD,OAAe3I,GAAOM,aAC5B8G,aAAc,MACdL,MAAO,OACP2E,SAAU,WACVgC,YAAa,SACbnD,aAAc,SACd7B,OAAQ,UACRuD,MAAOjM,GAAOO,YAElB4H,OAAO,2BACAiY,IACA,CACC1X,OAAQ,YAGhB+gB,OAAQ,CACJ7hB,QAAS,OACTnR,SAAU,WACVgzB,OAAQ,IACR1iB,MAAO,OACPS,QAAS,OACTV,KAAM,IACNnF,WAAY3B,GAAOE,MACnB+G,OAAQ,EACR0lB,UAAU,aAAD,OAAe3sB,GAAOM,aAC/B,aAAc,CACVymB,SAAU,GAEd,0BAA2B,CACvB/d,YAAa,MAGrB7O,KAAM,CACF1D,SAAU,WACV2qB,UAAW,QAEfod,gBAAiB,CACb/nC,SAAU,WACVkQ,IAAK,QACLM,OAAQ,OAUHw3B,GAA0B,SAAC,GAAmC,IAAjCxU,EAAgC,EAAhCA,KAAMkU,EAA0B,EAA1BA,UAAWO,EAAe,EAAfA,SACvD,EACIpI,eADI5B,EAAR,EAAQA,SAAU8B,EAAlB,EAAkBA,aAAcD,EAAhC,EAAgCA,MAAOE,EAAvC,EAAuCA,SAEjC9sB,EAAUlD,KACVuwB,EAAiB/K,iBAAO,MAE9Bnd,qBAAU,WACFkoB,GAAkBA,EAAe7K,SACjCvP,YAAW,WACPoa,EAAe7K,QAAQyL,UACxB,OAER,CAAC3N,IAEJ,IAIMiO,EAAQ,uCAAG,WAAOrmC,GAAP,eAAAb,EAAA,6DACPutC,EAA+B,CACjCX,OAAQ3T,EAAK90B,KAGJsoC,QAAU5rC,EAAK4rC,cAAWvpC,EACvCqqC,EAAab,MAAQ7rC,EAAK6rC,OAASzT,EAAK7nB,MAN3B,SAQU06B,GAAWyB,GARrB,eAWLJ,GACAA,EAAUlU,GAZL,2CAAH,sDAiBd,OACI,qCACI,wBACIiO,SAAU1B,EAAa0B,GACvBvyB,UAAWgE,EAAQmhB,eAFvB,UAII,eAAC,GAAD,CACI1e,IAAI,KACJT,KAAK,KACLO,MAAM,SACNN,OAAO,OACPvB,MAAO,CAAEhC,OAAQ,eALrB,SAOK+C,GAAE,mCAGP,eAAC,GAAD,UACI,eAAC,GAAD,CACI0C,MAAO1C,GAAE,4CACTsE,UAAQ,EACRtB,aAAc6b,EAAK7nB,MACnBssB,WAAS,EACT3hB,IAAKiqB,EACL7oB,SAAU,SAACa,GACPynB,EAAS,QAASznB,EAAE5B,OAAO2B,YAKvC,eAAC,GAAD,UACI,eAAC,GAAD,CACIjB,MAAO1C,GAAE,yCACTspB,SAAUA,EACV/gC,KAAK,UACL+b,UAAU,EACVskB,SAAU,IACV5lB,aAAc6b,EAAKruB,YAG3B,sBAAK+J,UAAWgE,EAAQxP,KAAxB,SACI,uBAAMwL,UAAWgE,EAAQ60B,gBAAzB,SACI,gBAAC,GAAD,CAAY7yB,KAAK,MAAMM,MAAOjM,GAAOO,WAArC,4BACiB,IADjB,UAEQq1B,KAAO3L,EAAK/R,SAAS2d,OACrB,cAHR,gBAIaD,KAAO3L,EAAK/R,SAAS2d,OAAO,iBAKjD,uBAAKlwB,UAAWgE,EAAQ8f,OAAxB,UACI,eAAC,GAAD,CACIzc,QAAS,WACD0xB,GACAA,IA1ExBnI,KA8EgBziC,KAAK,YACL6X,KAAK,QART,SAUKP,GAAE,sCAEP,eAAC,GAAD,CAAQ8B,WAAW,SAASpZ,KAAK,UAAU6X,KAAK,QAAhD,SACKP,GAAE,oCAIX,+BCzKV3E,GAAYC,aAAgB,CAC9BsK,QAAS,CACLpJ,QAAS,QAEbO,OAAO,2BACAiY,IACA,CACCjZ,gBAAiBnH,GAAOE,MACxB8G,OAAQ,OACR0E,SAAU,OACVlE,QAAS,OACTJ,aAAc,SACdsB,OAAQ,UACRX,UAAW,OACXgB,eAAgB,UAGxB2J,WAAY,CACR/J,OAAO,aAAD,OAAe3I,GAAOM,gBAI9Bq+B,GAAsD,SAAC,GAMtD,IALHC,EAKE,EALFA,cACAC,EAIE,EAJFA,YACA7mB,EAGE,EAHFA,MACAtF,EAEE,EAFFA,WACAosB,EACE,EADFA,eAEMn1B,EAAUlD,KAEhB,OAAIuR,EAAM1e,OAAS,EAEX,uBAAKqM,UAAWgE,EAAQqH,QAAxB,UACI,0BACIrL,UAAWgE,EAAQxB,OACnBkC,MAAO,CAAE0c,SAAU,GACnBjzB,KAAK,SACLkZ,QAAS6xB,EAJb,UAMI,eAAC,GAAD,UACI,eAAC,GAAD,UACI,eAAC,GAAD,QAGR,0CACA,uBAAMx0B,MAAO,CAAEqJ,WAAY,QAA3B,SAAsCsE,EAAM1e,YAEhD,yBACIqM,UAAWgE,EAAQxB,OACnBkC,MAAO,CACHtD,MAAO,OACPS,QAAS,EACTM,WAAY,SACZiB,eAAgB,UAEpBjV,KAAK,SACLkZ,QAAS4xB,EATb,SAWI,eAACG,GAAD,CAAMh4B,MAAM,cAOxB,0BACIpB,UAAS,UAAKgE,EAAQxB,OAAb,YACLuK,EAAa/I,EAAQ+I,WAAa,IAEtCrI,MAAO,CAAEtD,MAAO,QAChBjT,KAAK,SACLkZ,QAAS4xB,EANb,UAQI,eAAC,GAAD,UACI,eAAC,GAAD,UACI,eAAC,GAAD,QAGR,gCAAOE,IACP,uBACIz0B,MAAO,CAAEqJ,WAAY,OAAQjd,SAAU,WAAYkQ,IAAK,OAD5D,SAGI,eAACo4B,GAAD,CAAMh4B,MAAM,OAAOkF,MAAOjM,GAAOU,iBAMjDi+B,GAAqB11B,aAAe,CAChC61B,eAAgB1zB,GAAE,0CC3FtB,IAAM3E,GAAYC,aAAgB,CAC9Bs4B,KAAM,CACFvoC,SAAU,WACV0Q,gBAAiBnH,GAAOE,MACxB6G,MAAO,OACPkF,MAAO,QACPgF,aAAc,OACd7J,aAAc,MACduB,OAAO,aAAD,OAAe3I,GAAOM,aAC5BkH,QAAS,OACTiB,WAAY,mBAEhBw2B,QAAS,CACLxoC,SAAU,WACVkQ,IAAK,OACLyB,MAAO,OACPR,QAAS,OACT8Y,IAAK,QAETvmB,KAAM,CACF1D,SAAU,WACVmR,QAAS,OACTmB,eAAgB,gBAChBqY,UAAW,QAEfwY,cAAe,CACXhyB,QAAS,OACTa,WAAY,kBACZ2Y,UAAW,QAEfhf,MAAO,CACHwF,QAAS,cACT6xB,gBAAiB,IACjBC,gBAAiB,WACjBpvB,SAAU,SACVqvB,aAAc,YAElBuF,UAAW,CACPt3B,QAAS,cAET8xB,gBAAiB,WACjBpvB,SAAU,UAGd1O,QAAS,CACLwlB,UAAW,OACXxZ,QAAS,cACT6xB,gBAAiB,IACjBC,gBAAiB,WACjBpvB,SAAU,SACV60B,WAAY,WACZxF,aAAc,YAElByF,YAAa,CACThe,UAAW,OACXxZ,QAAS,cACTu3B,WAAY,WAEZzF,gBAAiB,WACjBpvB,SAAU,YAKZ+0B,GAA4C,SAAC,GAI5C,IAHHpV,EAGE,EAHFA,KACAqV,EAEE,EAFFA,YACAC,EACE,EADFA,cAEM51B,EAAUlD,KAChB,EAAoCgI,oBAAS,GAA7C,mBAAO+wB,EAAP,KAAmBC,EAAnB,KACA,EAAgChxB,oBAAS,GAAzC,mBAAOixB,EAAP,KAAiBC,EAAjB,KACA,EAA4BlxB,oBAAS,GAArC,mBAAOmxB,EAAP,KAAeC,EAAf,KACMC,EAAa7T,mBACb8T,EAAW9T,mBAeX+T,EAAa,SAACjzB,EAAKkzB,GAErB,IAAMn0B,EAAa1Z,OACd8tC,iBAAiBnzB,EAAIof,SACrBgU,iBAAiB,eAGtBpzB,EAAIof,SACAvR,KAAKwlB,MAAMrzB,EAAIof,QAAQiI,aAAeiM,WAAWv0B,IAC7Cm0B,GACJJ,GAAU,IAQlB,OANA/wB,qBAAU,WACNkxB,EAAWF,EAAY,KACxB,CAACA,EAAY7V,IAChBnb,qBAAU,WACNkxB,EAAWD,EAAU,KACtB,CAACA,EAAU9V,IAEV,uBAAKtkB,UAAWgE,EAAQq1B,KAAxB,UAEI,eAAC,GAAD,CACIrzB,KAAK,IACLC,OAAO,OACPvB,MAAO,CACHugB,cAAe,QACfrgB,aAAc,QACd+1B,UAAW,cANnB,SASI,uBACIvzB,IAAKgzB,EACLp6B,UAAW+5B,EAAW/1B,EAAQu1B,UAAYv1B,EAAQvH,MAFtD,SAIK6nB,EAAK7nB,UAId,eAAC,GAAD,CAAYuJ,KAAK,KAAjB,SACI,uBACIoB,IAAK+yB,EACLn6B,UAAW+5B,EAAW/1B,EAAQy1B,YAAcz1B,EAAQ/N,QAFxD,SAIKquB,EAAKruB,YAId,uBAAK+J,UAAWgE,EAAQxP,KAAxB,UACI,eAAC,GAAD,CAAYwR,KAAK,MAAMM,MAAOjM,GAAOO,WAArC,mBACQq1B,KAAO3L,EAAK/R,SAAS2d,OAAO,cADpC,gBACyDD,KACjD3L,EAAK/R,SACP2d,OAAO,YAEZ+J,GACG,eAAC,GAAD,CACI9rC,KAAK,SACLuW,MAAO,CACH9B,eAAgB,aAEpByE,QAAS,kBAAM2yB,GAAY,SAACY,GAAD,OAAWA,MAL1C,SAQUzkB,GADL4jB,EACY,2BACA,+BAKzB,uBAAK/5B,UAAWgE,EAAQs1B,QAAxB,UACI,eAAC,GAAD,CAAQnrC,KAAK,SAASkZ,QAAS,kBAAMyyB,GAAc,IAAnD,SACI,eAAC,GAAD,CAAa14B,MAAM,OAAOI,gBAAiBnH,GAAOY,OAAlD,SACI,eAAC4/B,GAAD,CAAYz5B,MAAM,OAAOkF,MAAOjM,GAAOc,aAG/C,eAAC,GAAD,CAAQhN,KAAK,SAASkZ,QAvFb,WACbsyB,GACAA,EAAYrV,IAqFR,SACI,eAAC,GAAD,CAAaljB,MAAM,OAAnB,SACI,eAAC05B,GAAD,CAAU15B,MAAM,OAAOkF,MAAOjM,GAAOU,kBAIhD8+B,EACG,uBAAK75B,UAAS,UAAKgE,EAAQiwB,cAAb,YAAd,UACI,eAAC,GAAD,CACI5sB,QAAS,kBAAMyyB,GAAc,IAC7B9zB,KAAK,SACL7X,KAAK,YACLuW,MAAO,CAAE0c,SAAU,GAJvB,SAMK3b,GAAE,sCAEP,eAAC,GAAD,CACI4B,QAlGG,WACnByyB,GAAc,GACVF,GACAA,EAActV,IAgGFn2B,KAAK,SACL6X,KAAK,SACLtB,MAAO,CAAE0c,SAAU,GAJvB,SAMK3b,GAAE,qCAGX,SC5LV3E,GAAYC,aAAgB,CAC9BokB,eAAgB,CACZtjB,QAAS,kBACT8C,SAAU,OACVtD,OAAQ,OACR4jB,cAAe,QAEnB8V,WAAY,CACRzvB,aAAc,UAIhB0vB,GAAoD,SAAC,GAKpD,IAJH3oB,EAIE,EAJFA,MACAsnB,EAGE,EAHFA,YACAC,EAEE,EAFFA,cACAX,EACE,EADFA,cAEMj1B,EAAUlD,KAEhB,OACI,uBAAKd,UAAWgE,EAAQmhB,eAAxB,UACI,eAAC,GAAD,CACI1e,IAAI,KACJT,KAAK,IACLO,MAAM,SACNN,OAAO,OACPvB,MAAO,CAAEhC,OAAQ,UALrB,SAOKyT,GAAO,kCAEZ,sBAAKnW,UAAWgE,EAAQ+2B,WAAxB,SACI,eAAC,GAAD,CACI1oB,MAAO,GACP4mB,cAAeA,EACflsB,YAAU,EACVosB,eAAe,iBAGtB9mB,EACInkB,MACG,SAAC7C,EAASinB,GAAV,OACIA,EAAEC,QAAQC,UAAYnnB,EAAEknB,QAAQC,aAEvCnjB,KAAI,SAACi1B,GACF,OACI,eAAC,GAAD,CAEIA,KAAMA,EACNqV,YAAaA,EACbC,cAAeA,GAHVtV,EAAK90B,WCjChCsR,GAAYC,aAAgB,CAC9ByB,OAAO,2BACAiY,IACA,CACCjZ,gBAAiBnH,GAAOE,MACxBwL,SAAU,OACVlE,QAAS,OACTJ,aAAc,SACdsB,OAAQ,UACRX,UAAW,OACXgB,eAAgB,UAGxBtH,KAAM,CACF+G,WAAY,IACZkD,SAAU,OACVnD,eAAgB,aAEpBq4B,QAAQ,cACJh5B,QAAS,QADN,6BAEoB2E,GAAYC,QAFhC,OAE+C,CAC9C,IAAK,CACD5E,QAAS,OACTmJ,oBAAqB,iBAKjC8vB,QAAS,CACLpqC,SAAU,WACVkQ,IAAK,OAETm6B,WAAY,CACRrqC,SAAU,WACVkQ,IAAK,SAIPo6B,GAAkD,SAAC,GAAmB,IAAjBroC,EAAgB,EAAhBA,UACvD,EAAsBmnB,kBAAQpgB,IAAvBiiB,EAAP,oBACA,EAAkDjT,oBAAS,GAA3D,mBAAOwY,EAAP,KAA0BC,EAA1B,KACA,EAA0BzY,mBAAS,IAAnC,mBAAOuJ,EAAP,KAAcgpB,EAAd,KACA,EAA4BvyB,oBAAS,GAArC,mBAAOH,EAAP,KAAeye,EAAf,KACA,EAAkCte,mBAAqB,WAAvD,mBAAOwyB,EAAP,KAAkBC,EAAlB,KACA,EAA8BzyB,oBAAS,GAAvC,mBAAgByT,GAAhB,WACA,EAAgCzT,wBAA2Bva,GAA3D,mBAAOitC,EAAP,KAAiBC,EAAjB,KACMz3B,EAAUlD,KAEViW,EAAO,WAAY,4CACrB,8BAAA1rB,EAAA,sEAC2B2rC,GACnBjkC,EAAUvC,OACV,iBAHR,OACUxE,EADV,OAKU0vC,EAAcpD,GAAStsC,EAAS2vC,OAEtCN,EAASK,GAETnf,GAAW,GATf,4CADqB,uBAAC,WAAD,wBAarBua,IAGE8C,EAAa,uCAAG,WAAOtV,GAAP,SAAAj5B,EAAA,6DAClBkwC,EAAa,WADK,SAEKlE,GAAW/S,EAAK90B,IAFrB,gBAId+rC,EAAa,WACQ,IAAjBlpB,EAAM1e,QACNyzB,GAAU,GAEdrQ,KARc,2CAAH,sDAoBnB,OARA5N,qBAAU,WACFR,GACAoO,MAEL,CAACpO,IAKA,uCACI,uBAAK3I,UAAWgE,EAAQi3B,QAAxB,UACI,eAAC,GAAD,CACI9sC,KAAK,SACLuW,MAAO,CACH7B,WAAY,IACZkD,SAAU,OACVnD,eAAgB,aAEpByE,QAAS,WACA0U,EAAYruB,WAQb6zB,GAAqB,IAPrB6F,GAAU,GACNr0B,EAAUN,cAAgB,EAC1B8oC,EAAa,WAEbA,EAAa,YAb7B,SAoBKxoC,EAAUN,cAAgB,EAAI,YAAc,mBAEjD,sBAAKuN,UAAWgE,EAAQm3B,WAAxB,SACI,eAAC,GAAD,CACI9zB,QAAS,WACD0U,EAAYruB,WACZ6zB,GAAqB,GACdlP,EAAM1e,OAAS,IACtByzB,GAAU,GACVmU,EAAa,aANzB,SAUKxoC,EAAUN,kBAInB,yBACIuN,UAAWgE,EAAQxB,OACnBkC,MAAO,CACHtD,MAAO,OACPS,QAAS,EACTM,WAAY,SACZiB,eAAgB,UAEpBjV,KAAK,SACLkZ,QAAS,WACD0U,EAAYruB,WACZ6zB,GAAqB,IAErB6F,GAAU,GACVmU,EAAa,YAdzB,SAkBI,sBAAKv7B,UAAWgE,EAAQk3B,QAAxB,SACI,eAAC9B,GAAD,CAAMh4B,MAAM,OAAOkF,MAAOjM,GAAOU,kBAK7C,gBAAC,GAAD,CACIorB,UAAWxd,EACXyd,KAAM,WACFgB,GAAU,IAHlB,UAMI,eAAC,GAAD,CAA2B3qB,MAAO1J,EAAU/E,OAE7B,WAAdstC,EACG,eAAC,GAAD,CACItoC,UAAWD,EACX2lC,SAAU3lC,EAAUN,cAAgB,EACpCtE,KAAK,YACLsqC,cAAe,WACX8C,EAAa,WACQ,IAAjBlpB,EAAM1e,QACNyzB,GAAU,IAGlBoR,UAAW,WACP+C,EAAa,WACbxkB,OAGR,KAEW,SAAdukB,GAAwBE,EACrB,eAAC,GAAD,CACIlX,KAAMkX,EACNzC,SAAU,kBAAMwC,EAAa,YAC7B/C,UAAW,WACPzhB,IACAwkB,EAAa,cAGrB,KAEW,YAAdD,EACG,eAAC,GAAD,CACIjpB,MAAOA,EACPsnB,YAAa,SAACrV,GACV8C,GAAU,GACVqU,EAAYnX,GACZiX,EAAa,SAEjB3B,cAAeA,EACfX,cAAe,kBAAMsC,EAAa,aAEtC,QAER,eAAC,GAAD,CACIza,KAAMQ,EACNP,QAAS,kBAAMQ,GAAqB,UCvN9CzgB,GAAYC,aAAgB,CAC9B,oBAAqB,CACjB/M,KAAM,CACF6J,QAAS,GAEboD,GAAI,CACApD,QAAS,IAGjB0D,UAAU,cACNM,QAAS,YADJ,6BAEkB+E,GAAYC,QAF9B,OAE6C,CAC9C,IAAK,CACDhF,QAAS,OAIrBgZ,WAAY,CACR5Y,QAAS,OACTJ,QAAS,UACTkF,UAAW,QAEfujB,cAAe,CACXroB,QAAS,OACTJ,QAAS,eACToZ,aAAa,aAAD,OAAe5gB,GAAOM,aAClC2Q,aAAc,QAElB0P,QAAS,CACLC,aAAa,aAAD,OAAe5gB,GAAOmB,SAElCuL,UAAW,QAEfmU,cAAe,CACXjZ,QAAS,OACTmf,SAAU,EACVrT,WAAY,OACZ3K,eAAgB,WAChBjB,WAAY,aACZgZ,WAAY,GAEhBoP,qBAAsB,CAClBtoB,QAAS,OACTJ,QAAS,aACTkF,UAAW,OACX3F,MAAO,OACPI,gBAAiBnH,GAAOQ,SACxByL,MAAOjM,GAAOI,MACd2I,eAAgB,gBAChBjB,WAAY,SACZ,SAAU,CACNU,WAAY,KAEhBf,UAAW,eAEfuQ,MAAO,CACHhQ,WAAY,QAEhBmoB,uBAAwB,CACpBvoB,QAAS,OACTb,MAAO,OACPgC,eAAgB,gBAEpBZ,OAAO,2BACAiY,IACA,CACC1X,OAAQ,YAGhBwmB,aAAc,CACVtnB,QAAS,QAEbunB,cAAe,CACXvnB,QAAS,OACTnR,SAAU,WACV2R,MAAO,OACPzB,IAAK,QAET46B,cAAe,CACX35B,QAAS,OACTJ,QAAS,cACTuB,eAAgB,SAChBjB,WAAY,UAEhBsoB,YAAa,CACT35B,SAAU,YAEd+qC,YAAa,CACT55B,QAAS,cACT6xB,gBAAiB,IACjBC,gBAAiB,WACjBpvB,SAAU,SACVqvB,aAAc,YAElBmH,WAAY,CACRrqC,SAAU,YAEdmjC,cAAe,CACXjzB,IAAK,IACLyB,MAAO,IACPR,QAAS,OACTX,OAAQ,IACRxQ,SAAU,WACVqwB,SAAU,OACVre,WAAY,kBACZM,eAAgB,MAChBhC,MAAO,OACPC,OAAQ,OACRc,WAAY,SACZnG,WAAY,yBAEhB0e,gBAAgB,eACTA,IAEPohB,WAAY,CACR/tB,WAAY,QAEhBguB,YAAa,CACT95B,QAAS,QAEbnG,KAAM,CACF+G,WAAY,MACZkD,SAAU,OACVnD,eAAgB,YAChB0D,MAAOjM,GAAOI,MACd,+BAAgC,CAC5B6L,MAAOjM,GAAOI,OAElB,UAAW,CACP6L,MAAOjM,GAAOU,WAGtBpI,gBAAiB,CACboT,SAAU,OACVO,MAAOjM,GAAOI,MACd4I,YAAa,QAEjB24B,cAAe,CACXn6B,QAAS,QAEb6oB,YAAY,cACRtpB,MAAO,OACPiC,YAAa,QAFN,6BAGgBuD,GAAYC,QAH5B,OAG2C,CAC9C,IAAK,CACDzF,MAAO,OACPwnB,SAAU,QACVvlB,YAAa,YAcvB44B,GAAgD,SAAC,GAAwB,IAAtBjkC,EAAqB,EAArBA,GAAIkkC,EAAiB,EAAjBA,WACnDl4B,EAAUlD,KAChB,EAAsDgI,qBAAtD,mBAAOqzB,EAAP,KAA4BC,EAA5B,KACA,EAAwBtzB,oBAAS,GAAjC,mBAAO5E,EAAP,KAAam4B,EAAb,KA4BA,OAnBAlzB,qBAAU,WACN,IAAIxW,EAAkB,GAEtBqF,EAAGtF,aAAakB,SAAQ,SAACC,GACrBlB,EAAe,sBAAOA,GAAP,YAA2BkB,EAAKC,oBAGnD,IAAMwoC,EAAkBvoC,MAAMC,KAAK,IAAIC,IAAItB,IACrC4pC,EAAsB,GAC5BD,EAAgB1oC,SAAQ,SAACC,GACrB,IAAMsE,EAAQ+jC,EAAWvkC,MAAK,SAACyhB,GAAD,OAAOA,EAAE7jB,WAAa1B,KAEhDsE,GACAokC,EAAU7rB,KAAKvY,MAIvBikC,EAAuBG,KACxB,CAACvkC,IAEA,gBAAC,GAAD,CACIoT,oBAzCgB,qBA0ChBO,WAAYzH,EACZ0H,OACI,uCACI,sBACIlH,MAAO,CACHqD,YAAa,IACbkd,cAAe,OACf7jB,MAAO,OACP6Z,aAAa,aAAD,OAAe5gB,GAAOK,kBAClCgI,OAAQ,eANhB,SASI,eAAC,GAAD,CAAYsD,KAAK,IAAjB,4CAKHm2B,EACKA,EAAoB9sC,KAAI,SAACuH,GACrB,OACI,qCACI,gBAAC,GAAD,CAEIwU,oBAhEP,SAmEOK,IAAG,0BAAqB7U,EAAOrB,SAA5B,+BALP,UAOI,eAAC,GAAD,UACI,uBACIyK,UACIgE,EAAQymB,YAEZ/lB,MAAO,CACHqD,YAAa,QALrB,UAQI,eAAC,GAAD,UACI,eAAC,GAAD,UACKqG,GACGxX,EAAOlB,cAInB,eAAC,GAAD,CACIsuB,OAAQptB,EAAOtB,WACfmN,MAAM,eAIlB,eAAC,GAAD,UACI,uBACIiC,MAAO,CACHzC,QAAS,OACTE,WAAY,UAHpB,UAMI,eAAC,GAAD,CAAY6D,KAAK,KAAjB,SACKpP,EAAOlB,WAEZ,sBACIsK,UACIgE,EAAQm3B,WAFhB,SAKI,eAAC,GAAD,CACI9zB,QAAS,WACL4B,QAAQC,IACJ,UAHZ,SAOKtS,EAAOnE,yBAlDnBmE,EAAOrB,eA2D5B,QAnFlB,UAuFI,eAAC,GAAD,UACI,eAAC,GAAD,CAAYyQ,KAAK,KAAjB,SAAuBhO,EAAGhK,SAE9B,eAAC,GAAD,UACI,uBAAKgS,UAAWgE,EAAQ+3B,YAAxB,UACI,uBAAK/7B,UAAWgE,EAAQrR,gBAAxB,UACKwpC,GAAuBA,EAAoBxoC,OAAQ,OAGvDwoC,GAAuBA,EAAoBxoC,OACxC,eAAC,GAAD,CACIxF,KAAK,SACLuW,MAAO,CACH7B,WAAY,IACZkD,SAAU,OACVnD,eAAgB,aAEpByE,QAAS,kBAAMg1B,GAASn4B,IAP5B,SASMA,EAAyB,kBAAlB,kBAEb,UAGZ,eAAC,GAAD,UACI,uBAAKQ,MAAO,CAAEzC,QAAS,QAAvB,UACI,gBAAC,GAAD,CAAY+D,KAAK,KAAjB,UACKhO,EAAGlI,QAAQL,aADhB,KACgCuI,EAAGlI,QAAQD,WAAY,IAClDmI,EAAGlI,QAAQF,gBAEhB,eAAC,GAAD,CACIzB,KAAK,SACLuW,MAAO,CACHqJ,WAAY,OACZhL,OAAQ,WAEZsE,QAAS,kBAtJN,SAACtU,GAEpB,IAAM+I,EAAI,0DAAsD/I,EAAUjD,QAAQL,aAAxE,YAAwFsD,EAAUjD,QAAQJ,aAA1G,YAA0HqD,EAAUjD,QAAQH,aAA5I,eAA+JoD,EAAUjD,QAAQD,WAAjL,YAA+LkD,EAAUjD,QAAQF,cAE3NnD,OAAOyX,KAAKpI,EAAM,UAkJa0gC,CAAexkC,IANlC,SAQI,uBAAK0M,MAAO,CAAEzC,QAAS,QAAvB,UACI,eAAC,GAAD,CACI+D,KAAK,KACLtB,MAAO,CACH9B,eAAgB,aAHxB,qBAQA,eAAC65B,GAAD,CAASr7B,MAAM,OAAOkF,MAAOjM,GAAOU,qBAKpD,eAAC,GAAD,UACI,eAAC,GAAD,CAAoBhI,UAAWiF,UCrTzC8I,GAAYC,aAAgB,CAC9B,oBAAqB,CACjB/M,KAAM,CACF6J,QAAS,GAEboD,GAAI,CACApD,QAAS,IAGjB0D,UAAU,cACNM,QAAS,YADJ,6BAEkB+E,GAAYC,QAF9B,OAE6C,CAC9C,IAAK,CACDhF,QAAS,OAIrBgZ,WAAY,CACR5Y,QAAS,OACTJ,QAAS,UACTkF,UAAW,QAEfujB,cAAe,CACXroB,QAAS,OACTJ,QAAS,eACToZ,aAAa,aAAD,OAAe5gB,GAAOM,aAClC2Q,aAAc,QAElB0P,QAAS,CACLC,aAAa,aAAD,OAAe5gB,GAAOmB,SAElCuL,UAAW,QAEfmU,cAAe,CACXjZ,QAAS,OACTmf,SAAU,EACVrT,WAAY,OACZ3K,eAAgB,WAChBjB,WAAY,aACZgZ,WAAY,GAEhBoP,qBAAsB,CAClBtoB,QAAS,OACTJ,QAAS,aACTkF,UAAW,OACX3F,MAAO,OACPI,gBAAiBnH,GAAOQ,SACxByL,MAAOjM,GAAOI,MACd2I,eAAgB,gBAChBjB,WAAY,SACZ,SAAU,CACNU,WAAY,KAEhBf,UAAW,eAEfuQ,MAAO,CACHhQ,WAAY,QAEhBmoB,uBAAwB,CACpBvoB,QAAS,OACTb,MAAO,OACPgC,eAAgB,gBAEpBZ,OAAO,2BACAiY,IACA,CACC1X,OAAQ,YAGhBwmB,aAAc,CACVtnB,QAAS,QAEbunB,cAAe,CACXvnB,QAAS,OACTnR,SAAU,WACV2R,MAAO,OACPzB,IAAK,QAET46B,cAAe,CACX35B,QAAS,OACTJ,QAAS,cACTuB,eAAgB,SAChBjB,WAAY,UAEhBsoB,YAAa,CACT35B,SAAU,YAEd+qC,YAAa,CACT55B,QAAS,cACT6xB,gBAAiB,IACjBC,gBAAiB,WACjBpvB,SAAU,SACVqvB,aAAc,YAElBC,cAAe,CACXjzB,IAAK,IACLyB,MAAO,IACPR,QAAS,OACTX,OAAQ,IACRxQ,SAAU,WACVqwB,SAAU,OACVre,WAAY,kBACZM,eAAgB,MAChBhC,MAAO,OACPC,OAAQ,OACRc,WAAY,SACZnG,WAAY,yBAEhB0e,gBAAgB,eACTA,IAEPohB,WAAY,CACR/tB,WAAY,QAEhBguB,YAAa,CACT95B,QAAS,QAEbnG,KAAM,CACF+G,WAAY,MACZkD,SAAU,OACVnD,eAAgB,YAChB0D,MAAOjM,GAAOI,MACd,+BAAgC,CAC5B6L,MAAOjM,GAAOI,OAElB,UAAW,CACP6L,MAAOjM,GAAOU,WAGtBpI,gBAAiB,CACboT,SAAU,OACVO,MAAOjM,GAAOI,MACd4I,YAAa,QAEjB24B,cAAe,CACXn6B,QAAS,QAEb6oB,YAAY,cACRtpB,MAAO,OACPiC,YAAa,QAFN,6BAGgBuD,GAAYC,QAH5B,OAG2C,CAC9C,IAAK,CACDzF,MAAO,OACPwnB,SAAU,QACVvlB,YAAa,YAQvBq5B,GAAiB,WACnB,MAA8B5zB,oBAAS,GAAvC,mBAAOwT,EAAP,KAAgBC,EAAhB,KACMvY,EAAUlD,KAChB,EAA+BmZ,KAAvBM,EAAR,EAAQA,QAASF,EAAjB,EAAiBA,UACjB,EAA2BH,kBAAQ7B,IAA5BC,EAAP,oBACA,EAA0B4B,kBAAQvC,IAAzBmT,EAAT,oBACA,EAA6B5Q,kBAAQnC,IAA5B4kB,EAAT,oBACA,EAA8BziB,kBAAQ5C,IAA7B0U,EAAT,oBACA,EAAsB9R,kBAAQ/I,IAAvByrB,EAAP,oBAeAzzB,qBAAU,WAMN,OALKkR,GACDE,EAAQ,QAfH,WAAY,4CACrB,4BAAAlvB,EAAA,6DACIkvB,EAAQ,QADZ,SAEsBzI,KAFtB,OAEU+qB,EAFV,OAGI5zB,QAAQC,IAAI2zB,EAAK,UACjBF,EAAiBE,EAAIxtB,YAErBkN,GAAW,GANf,4CADqB,uBAAC,WAAD,wBAUrBua,GAOA/f,GAEO,WACHiV,EAAkBvc,OAEvB,IA6BH,OAAI6M,EAAgB,eAAC,GAAD,IAGhB,uBAAKtc,UAAS,UAAKgE,EAAQzC,UAAb,YAAd,UACI,sBAAKvB,UAAS,UAAKgE,EAAQsmB,cAAb,iBAAd,SACI,sBAAKtqB,UAAWgE,EAAQkX,cAAxB,SACI,eAAC,GAAD,QAGR,sBAAKlb,UAAWgE,EAAQ6W,WAAxB,SACI,sBAAK7a,UAAU,eAAf,SACI,eAAC,GAAD,CAAYyG,IAAI,KAAKT,KAAK,QAA1B,oCAKR,sBAAKhG,UAAWgE,EAAQ6W,WAAxB,SACI,eAAC,GAAD,CAAYpU,IAAI,IAAIT,KAAK,IAAIM,MAAOjM,GAAOqB,QAA3C,SACKya,GAAO,oDAGhB,sBAAKzR,MAAO,CAAE+W,UAAW,QAAzB,SACI,sBAAKzb,UAAWgE,EAAQkX,cAAxB,SACI,sBAAKlb,UAAWgE,EAAQ0mB,YAAxB,SACI,eAAC,GAAD,CACI3B,WAAS,EACT5gB,MAAO1C,GAAE,uCACTsE,UAAU,EACV4e,WAAW,UACXG,kBAAmBrjB,GACf,uCAEJujB,SAxCP,SAACzQ,GACduS,EAAcvS,IAwCM/P,SArCN,SAAC+P,GACfuS,EAAcvS,YA0CV,sBAAKvY,UAAS,UAAKgE,EAAQqO,OAA3B,SACKiG,GAAoBA,EAAiB3kB,OAClC,gBAAC,GAAD,WACI,gBAAC,GAAD,CAAYyX,oBAzGR,qBAyGJ,UACI,eAAC,GAAD,UACI,eAAC,GAAD,CACI/D,QAAS,kBAAMkT,EAAQ,SACvBrsB,KAAMmsB,EACNrsB,KAAK,OAHT,2BAQJ,eAAC,GAAD,UACI,eAAC,GAAD,CACIqZ,QAAS,kBAAMkT,EAAQ,oBACvBrsB,KAAMmsB,EACNrsB,KAAK,kBAHT,yBAQJ,eAAC,GAAD,UACI,sBAAKgS,UAAWgE,EAAQ0W,gBAAxB,uBAIJ,eAAC,GAAD,UACI,eAAC,GAAD,CACIrT,QAAS,kBAAMkT,EAAQ,UACvBrsB,KAAMmsB,EACNrsB,KAAK,QAHT,SAKI,uBAAM0W,MAAO,CAAEqD,YAAa,QAA5B,0BAMXuQ,EAAiBjpB,KAAI,SAAC2I,GAAD,OAClB,iCACI,eAAC,GAAD,CAAYoT,oBAAoB,OAAhC,SACI,sBAAKpL,UAAWgE,EAAQg4B,cAAxB,SACI,gBAAC,GAAD,WACI,eAAC,GAAD,CACIv1B,IAAI,KACJT,KAAK,KACLW,QAAQ,QACRL,MAAM,qBAJV,SAMKtO,EAAGhK,OAER,eAAC,GAAD,CACIgY,KAAK,KACLW,QAAQ,QACRL,MAAM,qBAHV,SAKI,gBAAC,GAAD,CAAYN,KAAK,KAAjB,UACKhO,EAAGlI,QAAQL,aADhB,IAC+B,IAC1BuI,EAAGlI,QAAQD,WAAY,IACvBmI,EAAGlI,QAAQF,kBAGpB,eAAC,GAAD,CACIzB,KAAK,SACLuW,MAAO,CACH3B,OAAQ,WAEZsE,QAAS,kBA1H9B,SAACrP,GAEpB,IAAM8D,EAAI,0DAAsD9D,EAAGlI,QAAQL,aAAjE,YAAiFuI,EAAGlI,QAAQJ,aAA5F,YAA4GsI,EAAGlI,QAAQH,aAAvH,eAA0IqI,EAAGlI,QAAQD,WAArJ,YAAmKmI,EAAGlI,QAAQF,cAExLnD,OAAOyX,KAAKpI,EAAM,UAuH0B0gC,CAAexkC,IANvB,SASI,uBACI0M,MAAO,CAAEzC,QAAS,QADtB,UAGI,eAAC,GAAD,CACI+D,KAAK,KACLtB,MAAO,CACH9B,eACI,aAJZ,qBASA,eAAC65B,GAAD,CACIr7B,MAAM,OACNkF,MAAOjM,GAAOU,gBAI1B,eAAC,GAAD,CACIhI,UAAWiF,WAK3B,eAAC,GAAD,CACIA,GAAIA,EACJkkC,WAAYU,EAAYxrB,YA1DtBpZ,EAAGxH,cA+DrB,OAER,sBAAKwP,UAAWgE,EAAQ43B,cAAxB,SACI,gBAAC,GAAD,CAAY51B,KAAK,KAAjB,mBACWsS,EAAiB3kB,OAD5B,0BCzWVmN,GAAYC,cAAkD,iBAAO,CACvE+7B,OAAQ,YAA8B,IAA3B1xB,EAA0B,EAA1BA,oBACP,MAAO,CACH5J,gBAAiBnH,GAAOE,MACxB6G,MAAO,OACPgK,sBACA3J,aAAc,QACdJ,OAAQ,cACRiK,aAAc,OACdsd,SAAU,IAGlBmU,eAAgB,CACZ96B,QAAS,OACTE,WAAY,SACZiB,eAAgB,aAChBvB,QAAS,QAEbm7B,aAAc,CACVn7B,QAAS,0BACTI,QAAS,OACTmB,eAAgB,gBAChBjB,WAAY,SACZw4B,UAAW,aAEX,MAAO,CACH14B,QAAS,gBAGjB4Z,GAAI,CACAhe,QAAS,KACT6E,OAAQ,SAKVu6B,GAA8B,SAAC,GAiB9B,IAhBH7xB,EAgBE,EAhBFA,oBACA8xB,EAeE,EAfFA,UACAC,EAcE,EAdFA,WACA5vB,EAaE,EAbFA,UACA6vB,EAYE,EAZFA,UAYE,IAXF1O,YAWE,MAXK,CACH,CACIvmB,MAAO,GACPiB,MAAO,GACPpT,eAAgB,CACZC,QAAS,KACTC,SAAU,MAEdmnC,eAAgB,OAGtB,EAEIv5B,GADa4G,KACL3G,eACRC,EAAUlD,GAAU,2BAAK,CAAEsK,wBAAR,IAA+BtH,WACxD,OACI,uBAAK9D,UAAWgE,EAAQ84B,OAAxB,UACMM,EAYE,KAXA,uBAAKp9B,UAAWgE,EAAQ+4B,eAAxB,UACI,eAAC,GAAD,UACI,eAAC,GAAD,CAAYxvB,UAAWA,EAAvB,SACK2vB,MAIT,eAAC,GAAD,CAAYz2B,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAQV,OAAO,OAArD,SACKk3B,OAIZzO,EAAKr/B,KAAI,SAAC8b,EAAKuV,GAAW,IAAD,QACtB,OAAyB,IAArBvV,EAAIhD,MAAMxU,QAAiBwX,EAAImyB,WAI/BnyB,EAAImyB,YAAcnyB,EAAIlV,QAElB,uCACI,qBAAI+J,UAAWgE,EAAQ6X,KACvB,sBAAK7b,UAAWgE,EAAQg5B,aAAxB,SACK7xB,EAAIlV,aAOjB,wCACMmnC,GAAcA,GAAuB,IAAV1c,EACzB,qBAAI1gB,UAAWgE,EAAQ6X,KACvB,KACJ,uBAAK7b,UAAWgE,EAAQg5B,aAAxB,UACI,sCACQ,OAAH7xB,QAAG,IAAHA,GAAA,UAAAA,EAAKnV,sBAAL,eAAqBC,WAArB,OACGkV,QADH,IACGA,GADH,UACGA,EAAKnV,sBADR,aACG,EAAqBE,WACjB,eAAC,GAAD,CAEIuV,IAAG,iBAAKN,QAAL,IAAKA,GAAL,UAAKA,EAAKnV,sBAAV,aAAK,EAAqBE,UAA1B,cAAqCiV,QAArC,IAAqCA,GAArC,UAAqCA,EAAKnV,sBAA1C,aAAqC,EAAqBC,aAI7E,iCACI,eAAC,GAAD,CACIwQ,IAAI,KACJT,KAAK,MACLM,MAAM,sBAHV,SAKK6E,EAAIhD,QAET,eAAC,GAAD,CAAY1B,IAAI,IAAIT,KAAK,KAAzB,SACKmF,EAAI/B,YAGT,OAAH+B,QAAG,IAAHA,OAAA,EAAAA,EAAKkyB,iBAAkBlyB,EAAIkyB,qBAzC7B,sCC/FrBv8B,GAAYC,cAAkD,iBAAO,CACvEQ,UAAU,cACNH,MAAO,OACPa,QAAS,OACTs7B,QAAS,UAHJ,6BAIkB32B,GAAYC,QAJ9B,OAI6C,CAC9C,IAAK,CACDuE,oBAAqB,qBAM/BoyB,GAAuC,SAAC,GAGvC,IAFHpyB,EAEE,EAFFA,oBACAvH,EACE,EADFA,SAGMC,GADa4G,KACL3G,eACRC,EAAUlD,GAAU,2BAAK,CAAEsK,wBAAR,IAA+BtH,WAMxD,OAAO,sBAAK9D,UAAWgE,EAAQzC,UAAxB,SAAoCsC,KCDzC/C,GAAYC,aAAgB,CAC9BokB,eAAgB,CACZtjB,QAAS,kBACT8C,SAAU,OACVtD,OAAQ,OACR4jB,cAAe,QAEnB6B,iBAAkB,CACdxb,aAAc,QAElBxD,OAAQ,CACJhX,SAAU,WACVuQ,OAAQ,WACRG,gBAAiBnH,GAAOE,MACxByI,OAAO,aAAD,OAAe3I,GAAOM,aAC5B8G,aAAc,MACdL,MAAO,OACP2E,SAAU,WACVgC,YAAa,SACbnD,aAAc,SACd7B,OAAQ,UACRuD,MAAOjM,GAAOO,YAElB4H,OAAO,2BACAiY,IACA,CACC1X,OAAQ,YAGhB+gB,OAAQ,CACJ7hB,QAAS,OACTnR,SAAU,WACVgzB,OAAQ,IACR1iB,MAAO,OACPS,QAAS,OACTV,KAAM,IACNnF,WAAY3B,GAAOE,MACnB+G,OAAQ,EACR0lB,UAAU,aAAD,OAAe3sB,GAAOM,aAC/B,aAAc,CACVymB,SAAU,GAEd,0BAA2B,CACvB/d,YAAa,QAqBZo6B,GAA+B,SAAC,GAAiB,IAAD,QAAdhwC,EAAc,EAAdA,QAC3C,EACIkjC,eADI5B,EAAR,EAAQA,SAAU8B,EAAlB,EAAkBA,aAAcE,EAAhC,EAAgCA,UAAWH,EAA3C,EAA2CA,MAErC5sB,EAAUlD,KAChB,EAA4BgI,oBAAS,GAArC,mBAAOH,EAAP,KAAeye,EAAf,KACA,EAAoCte,oBAAS,GAA7C,mBAAO6iB,EAAP,KAAmBC,EAAnB,KACA,EAAmB1R,kBAAQjgB,IAAlB2wB,EAAT,oBACQ0G,EAAiCP,EAAjCO,QAASqH,EAAwB5H,EAAxB4H,YAAatG,EAAWtB,EAAXsB,OAC9B,EAAsBnY,kBAAQpgB,IAAvBiiB,EAAP,oBACA,EAAkDjT,oBAAS,GAA3D,mBAAOwY,EAAP,KAA0BC,EAA1B,KAMMgR,EAAQ,uCAAG,WAAOrmC,GAAP,eAAAb,EAAA,0DACT0wB,EAAYruB,WADH,uBAET6zB,GAAqB,GAFZ,0BAMb,GAAI1M,OAAOC,KAAK6jB,GAAahlC,OAAQ,CAC3BilC,EAAqC,GAEvCD,EAAY+E,YACZ9E,EAAa8E,UAAY,GAErB/E,EAAY+E,UAAU5rC,OACG,KAAzB5F,EAAKwxC,UAAU5rC,QAEf8mC,EAAa8E,UAAU5rC,MAAQ5F,EAAKwxC,UAAU5rC,OAG9C6mC,EAAY+E,UAAUjsC,OACG,KAAzBvF,EAAKwxC,UAAUjsC,QAEfmnC,EAAa8E,UAAUjsC,MAAQvF,EAAKwxC,UAAUjsC,QAItD,IACqB+H,EAAco/B,KAE3BhO,EAAO,CAAEz8B,KAAM,YACfi5B,GAAU,GACVwE,GAAc,GAjC1BgF,KAoCM,MAAO+M,GACL10B,QAAQC,IAAI,eAAgBy0B,IAlCvB,2CAAH,sDAuCd,OACI,uCACI,0BACIxvC,KAAK,SACL6R,UAAWgE,EAAQxB,OACnB6E,QAAS,kBAAM+f,GAAU,IAH7B,UAKI,eAAC,GAAD,CAAQ/jB,YAAY,QAApB,SACI,eAAC,GAAD,UACI,eAACu6B,GAAD,QAGR,eAAC,GAAD,CAAYn3B,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAtC,SACKlB,GAAE,4CAGX,gBAAC,GAAD,CACI0gB,UAAWxd,EACXyd,KAAM,WACFwK,IACAxJ,GAAU,IAJlB,UAOI,eAAC,GAAD,CAAwB35B,QAASA,IACjC,wBACI8kC,SAAU1B,EAAa0B,GACvBvyB,UAAWgE,EAAQmhB,eAFvB,UAII,eAAC,GAAD,CACI1e,IAAI,KACJT,KAAK,KACLO,MAAM,SACNN,OAAO,OACPvB,MAAO,CAAEhC,OAAQ,eALrB,SAOK+C,GAAE,uCAGP,gBAAC,GAAD,WACI,eAAC,GAAD,CAAQpC,YAAY,QAApB,SACI,eAAC,GAAD,CAAYkK,UAAU,OAAtB,SACI,eAACswB,GAAD,QAGR,eAAC,GAAD,CAAYp3B,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAtC,wBAIJ,gBAAC,GAAD,WACI,eAAC,GAAD,CACIwB,MAAM,qBACNna,KAAK,kBACL+b,UAAU,EACVglB,SAAUA,EACVtmB,aAAY,UAAEhb,EAAQ2I,sBAAV,aAAE,EAAwBjF,OACtC0X,WAAW,OAACwpB,QAAD,IAACA,GAAD,UAACA,EAAQqL,iBAAT,QAAC,EAAmB5rC,MAAMs9B,SACrCJ,MAAO,CACH2D,SAAU,SAACvpB,GAAD,OACNA,EAAMzV,OAAS,IACdyV,GACD3D,GAAE,6CAGd,eAAC,GAAD,CACIK,KAAML,GAAE,yCACRrY,MAAK,OAAEilC,QAAF,IAAEA,GAAF,UAAEA,EAAQqL,iBAAV,aAAE,EAAmB5rC,MAAMs9B,aAGxC,eAAC,GAAD,UACI,eAAC,GAAD,CACIjnB,MAAM,qBACNna,KAAK,kBACL+b,UAAU,EACVglB,SAAUA,EACV5gC,KAAK,QACLsa,cAAc,UAAAhb,EAAQ2I,sBAAR,eAAwBpF,QAAS,OAGvD,uBAAKgP,UAAWgE,EAAQ8f,OAAxB,UACI,eAAC,GAAD,CACIzc,QAAS,WACL+f,GAAU,GACVwJ,KAEJziC,KAAK,YACL6X,KAAK,QANT,iBAUA,eAAC,GAAD,CACIuB,WAAW,SACXpZ,KAAK,UACL6X,KAAK,QACLsB,UAAWgqB,EAJf,SAMK7rB,GAAE,4CAIX,+BAGPkmB,EACG,gBAAC,GAAD,CACInoB,QAAS,KACTC,aAAW,EACXC,WAAS,EACTC,KAAM,eAACwG,GAAD,CAAU/I,MAAM,SAJ1B,UAMI,eAAC,GAAD,CACIsD,MAAO,CAAE4G,aAAc,QACvBtF,KAAK,IACLO,MAAM,SAHV,SAKK4P,GAAO,0CAEZ,eAAC,GAAD,CACI1P,IAAI,IACJT,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QACvB/E,MAAM,SAJV,SAMK4P,GAAO,oCAEZ,eAAC,GAAD,CAAQnQ,KAAK,SAASqB,QAAS,kBAAMukB,GAAc,IAAnD,SACKzV,GAAO,uCAGhB,KACJ,eAAC,GAAD,CACI2K,KAAMQ,EACNP,QAAS,kBAAMQ,GAAqB,U,+BCpR9CzgB,GAAYC,aAAgB,CAC9BQ,UAAW,CACPzQ,SAAU,WACV0Q,gBAAiBnH,GAAOU,SACxB0G,aAAc,QACdQ,QAAS,OACTZ,OAAQ,cACRa,cAAe,SACfC,WAAY,SACZiB,eAAgB,SAChBvB,QAAS,OACTO,UAAW,UAEf07B,aAAc,CACVj8B,QAAS,QAEbiE,KAAM,CACFhV,SAAU,WACVkQ,IAAK,MACLG,KAAM,MACNX,UAAW,wBACX8F,MAAOjM,GAAOE,OAElBwjC,WAAY,CACRl7B,WAAY,OAIdm7B,GAA8C,SAAC,GAI9C,IAHHh4B,EAGE,EAHFA,KACA1I,EAEE,EAFFA,YACAygC,EACE,EADFA,WAEM/5B,EAAUlD,KAChB,EAAgCgI,mBAAS,GAAzC,mBAAOm1B,EAAP,KAAiBC,EAAjB,KACA,EAAwBC,eAAhB/2B,EAAR,EAAQA,IAAKg3B,EAAb,EAAaA,OAEbj1B,qBAAU,WAEF+0B,EADAE,EACYL,EAEA,KAEjB,CAACK,EAAQL,IAEZ,IAAMnhC,EAAO,cAAUoJ,EAAV,YAAkBA,GACzBq4B,GAAUr4B,EAAO1I,GAAe,EAChCghC,EAAgBD,EAASppB,KAAKspB,GAAK,EACnCC,EAAQP,EAAWK,EAAiB,IAE1C,OACI,sBAAKt+B,UAAWgE,EAAQzC,UAAW6F,IAAKA,EAAxC,SAII,uBAAKpH,UAAWgE,EAAQ85B,aAAxB,UACI,uBAAK18B,MAAO4E,EAAM3E,OAAQ2E,EAAMpJ,QAASA,EAAzC,UACI,yBACIC,KAAK,OACLQ,OAAO,QACPohC,cAAc,WACdlgC,GAAIyH,EAAO,EACXxH,GAAIwH,EAAO,EACXvH,EAAG4/B,EACH/gC,YAAW,UAAKA,EAAL,QAEf,yBACIT,KAAK,OACLQ,OAAO,QACPkB,GAAIyH,EAAO,EACXxH,GAAIwH,EAAO,EACXvH,EAAG4/B,EACH/gC,YAAW,UAAKA,EAAL,MACXkD,UAAS,qBAAgBwF,EAAO,EAAvB,YAA4BA,EAAO,EAAnC,KACT04B,gBAAiB9Q,OAAO,CAAC4Q,EAAMF,EAAgBE,IAC/CjhC,cAAc,QACdmH,MAAO,CAAE5B,WAAY,iBAG7B,sBAAK9C,UAAWgE,EAAQ8B,KAAxB,SACI,eAAC,GAAD,CACIW,IAAI,KACJT,KAAK,OACLW,QAAQ,QACRL,MAAM,QACNL,OAAO,OALX,SAOKm4B,GACG,uCACI,eAAC,KAAD,CACIO,IAAKZ,EACLlM,MAAO,EACPG,SAAU,KAEd,mDC3GjB,OAA0B,yCCUnClxB,GAAYC,cAAgB,iBAAO,CACrC69B,eAAgB,CACZ9tC,SAAU,YAEd+tC,WAAY,CACRvxB,UAAW,QACXlM,MAAO,OACPC,OAAQ,QAEZy9B,YAAa,CACThuC,SAAU,WACVgzB,OAAQ,SACRrhB,MAAO,cAITs8B,GAA6B,SAAC,GAA0B,IAAxBC,EAAuB,EAAvBA,iBAC5Bh7B,EAAUlD,KAChB,OACI,uBAAKd,UAAWgE,EAAQ46B,eAAxB,UACI,sBACI/wB,IAAKoxB,GACLnxB,IAAI,qBACJ9N,UAAWgE,EAAQ66B,aAEvB,sBAAK7+B,UAAWgE,EAAQ86B,YAAxB,SACI,eAAC,GAAD,CACI3wC,KAAK,UACL6X,KAAK,QACLrZ,KAAMqyC,EACNv3B,OAAO,SAJX,SAMKhC,GAAE,gCChBjB3E,GAAYC,aAAgB,CAC9B+7B,OAAQ,CACJt7B,gBAAiBnH,GAAOE,MACxB6G,MAAO,OACPK,aAAc,QACdJ,OAAQ,cACRiK,aAAc,QAElByxB,eAAgB,CACZjsC,SAAU,WACVmR,QAAS,OACTE,WAAY,SACZiB,eAAgB,aAChBvB,QAAS,QAEbm7B,aAAc,CACVn7B,QAAS,0BACTI,QAAS,OACTmB,eAAgB,gBAChBjB,WAAY,SAEZ,MAAO,CACHF,QAAS,gBAGjB4Z,GAAI,CACAhe,QAAS,KACT6E,OAAQ,KAEZw8B,aAAc,CACV1+B,UAAW,gBACX1P,SAAU,WACV2R,MAAO,OACPzB,IAAK,OACL8B,WAAY,WACZ,WAAY,CACRtC,UAAW,mBAGnB2+B,aAAc,CACVruC,SAAU,WACVmR,QAAS,OACTe,OAAQ,OACRnB,QAAS,YAEbu9B,cAAe,CACXh+B,MAAO,OAEPc,cAAe,SACfL,QAAS,sBACTI,QAAS,OACTZ,OAAQ,EACRyB,WAAY,cACZ,WAAY,CACRb,QAAS,OACTZ,OAAQ,SAGhBg+B,MAAO,CACHvuC,SAAU,WACVid,WAAY,MACZ/M,IAAK,UAIPs+B,GAAwC,SAAC,GAQxC,IAmB0BvsC,EA1B7Bsc,EAOE,EAPFA,WACAkwB,EAME,EANFA,kBACAC,EAKE,EALFA,qBACA/xC,EAIE,EAJFA,QACAgyC,EAGE,EAHFA,aACAC,EAEE,EAFFA,aACAC,EACE,EADFA,OAEM37B,EAAUlD,KAChB,EAA4BgI,oBAAS,GAArC,mBAAOH,EAAP,KAAeye,EAAf,KAEMwY,EAAkB,SACpB5sC,EACA4D,GAEA,IAAMpH,EAAKwD,EAAUX,cAErB,OADcuE,EAAOpE,UAAUmF,MAAK,SAAClJ,GAAD,OAAUA,EAAIe,MAAQA,KAC7CxB,MAAQ,KAGnB6xC,EAAe,SAACjpC,GAClB,IAAMpH,EAAKoH,EAAOb,iBAAiB1D,cAEnC,OADcuE,EAAOpE,UAAUmF,MAAK,SAAClJ,GAAD,OAAUA,EAAIe,MAAQA,KAC7Ca,MAAMrC,MAAQ,KAc3BgxC,EAAmB,GACvB,UAAIO,QAAJ,IAAIA,KAAmBzvC,QAAS,CAC5B,aAMIyvC,QANJ,IAMIA,OANJ,EAMIA,EAAmBzvC,QALnBL,EADJ,EACIA,aACAC,EAFJ,EAEIA,aACAC,EAHJ,EAGIA,aACAC,EAJJ,EAIIA,aACAC,EALJ,EAKIA,WAEJmvC,EAAgB,0DAAsDvvC,EAAtD,YAAsEC,EAAtE,YAAsFC,EAAtF,eAAyGE,EAAzG,YAAuHD,GAG3I,OACI,uBAAKoQ,UAAWgE,EAAQ84B,OAAxB,UACI,eAAC,GAAD,CACI3uC,KAAK,SACLuW,MAAO,CACHtD,MAAO,OACPK,aAAc,EACdsB,OAAQsM,EAAW1b,OAAS,EAAI,UAAY,QAEhD0T,QAAS,WACDgI,EAAW1b,OAAS,GACpByzB,GAAWze,IATvB,SAaI,uBAAK3I,UAAWgE,EAAQ+4B,eAAxB,UACI,eAAC,GAAD,UACI,eAAC,GAAD,UACI,eAAC+C,GAAD,QAIR,eAAC,GAAD,CAAYr5B,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAQV,OAAO,OAArD,SACKkQ,GAAO,uCAGX9G,EAAW1b,OAAS,EACjB,sBACIqM,UACIgE,EAAQk7B,cAAgBv2B,EAAS,UAAY,IAFrD,SAKI,eAACo3B,GAAD,CAAa3+B,MAAM,WAEvB,UAIXiO,EAAW1b,OAAS,EACjB,sBACIqM,UACIgE,EAAQo7B,eAAiBz2B,EAAS,UAAY,IAFtD,SAKK0G,EAAWhgB,KAAI,SAAC4I,GACb,OACI,eAAC,GAAD,CACI9J,KAAK,SACLkZ,QAAS,WACL+f,GAAU,GACVoY,EAAqBvnC,IAJ7B,SAOI,uBAAK+H,UAAWgE,EAAQm7B,aAAxB,UACI,eAAC,GAAD,CACI14B,IAAI,IACJT,KAAK,IAELC,OACIs5B,EAAkB/uC,SAClByH,EAAEzH,OACI,OACA,SARd,SAWKyH,EAAEjK,OAENuxC,EAAkB/uC,SAAWyH,EAAEzH,OAC5B,sBAAKwP,UAAWgE,EAAQq7B,MAAxB,SACI,eAACW,GAAD,CAAO5+B,MAAM,WAEjB,eAMxB,KAEJ,qBAAIpB,UAAWgE,EAAQ6X,KAEtB4jB,EACG,sBAAKz/B,UAAWgE,EAAQg5B,aAAxB,SAAuCyC,IACvC,KAEJ,uCACI,sBAAKz/B,UAAWgE,EAAQg5B,aAAxB,SACI,uBACIt4B,MAAO,CACHzC,QAAS,OACTC,cAAe,SACfd,MAAO,QAJf,UAOI,eAAC,GAAD,CACIqF,IAAI,KACJT,KAAK,MACLM,MAAM,sBAHV,yBAOA,eAAC,GAAD,CACIG,IAAI,IACJT,KAAK,KACLtB,MAAO,CAAE4G,aAAc,QAH3B,SAKKi0B,EAAkBvxC,OAEvB,eAAC,GAAD,CAAWgxC,iBAAkBA,UAnIpBjsC,EAsIIwsC,EArItB,CACHU,GACIL,EAAgB7sC,EAAWtF,GAC3BgY,GAAE,iCAENw6B,GAAQ,OAACltC,QAAD,IAACA,OAAD,EAACA,EAAWR,aAAckT,GAAE,gCACpCw6B,GAASJ,EAAapyC,GAAUgY,GAAE,oCA+HUpW,KAAI,SAAC8b,GACzC,OACI,qCACmB,YAAdA,EAAIhD,OAAwBw3B,EACzB,uCACI,qBAAI3/B,UAAWgE,EAAQ6X,KACvB,sBAAK7b,UAAWgE,EAAQg5B,aAAxB,SACI,iCACI,eAAC,GAAD,CACIv2B,IAAI,KACJT,KAAK,MACLM,MAAM,sBAHV,SAKK6E,EAAIhD,QAET,eAAC,GAAD,CAAY1B,IAAI,IAAIT,KAAK,KAAzB,SACKmF,EAAI/B,gBAba,aAwBrDs2B,EACG,sBAAK1/B,UAAWgE,EAAQg5B,aAAxB,SAAuC0C,IACvC,SC9OV5+B,GAAYC,aAAgB,CAC9BQ,UAAU,cACN+E,MAAOjM,GAAOI,MACdoH,QAAS,YAFJ,6BAGkB+E,GAAYC,QAH9B,OAG6C,CAC9C,IAAK,CACDuE,oBAAqB,cACrBvJ,QAAS,cAIrBq+B,cAAe,CACXj+B,QAAS,OACTmB,eAAgB,gBAChBjB,WAAY,SACZN,QAAS,UAEbs+B,cAAe,CACXl+B,QAAS,OACTuK,UAAW,MACXrK,WAAY,SACZiB,eAAgB,cAEpBg9B,KAAK,yBACDn+B,QAAS,OACTE,WAAY,SACZiB,eAAgB,YACbqX,IACA,CACC1X,OAAQ,UACRL,OAAQ,MAGhB29B,QAAS,CACL/0B,aAAc,OAEd,SAAU,CACNzN,QAAS,MACT6E,OAAQ,cAGhB+nB,YAAa,CACT35B,SAAU,WACVsQ,MAAO,OACPiC,YAAa,QAEjB43B,QAAS,CACL75B,MAAO,OACPa,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBlB,cAAe,SACf,WAAY,CACRQ,OAAQ,SACRtB,MAAO,SAGfk/B,gBAAiB,CACbt/B,IAAK,IACLI,MAAO,OACPC,OAAQ,OACRvQ,SAAU,WACVmR,QAAS,OACTs+B,aAAc,SACdn9B,eAAgB,OAEpBo9B,eAAgB,CACZv+B,QAAS,OACTX,OAAQ,IACRxQ,SAAU,WACVqwB,SAAU,OACVre,WAAY,kBACZM,eAAgB,MAChBhC,MAAO,OACPC,OAAQ,OACRc,WAAY,SACZN,QAAS,cAIJo+B,GAAW,SACpB72B,EACAjB,EACAk1B,GAEA,MAAO,CACHl1B,QACAiB,QACAi0B,mBAIFoD,GAAsB,WACxB,IA2NkBC,EA7LW3jC,EA9BvBiH,EAAUlD,KAChB,EAAuBoZ,kBAAQjgB,IAA/B,mBAAO/N,EAAP,KAAa0+B,EAAb,KACA,EAAsB1Q,kBAAQpgB,IAAvBiiB,EAAP,oBACA,EAAkDjT,wBAEhDva,GAFF,mBAAOgxC,EAAP,KAA0BC,EAA1B,KAGA,EAAoD12B,oBAAS,GAA7D,mBAAO63B,EAAP,KAA2BC,EAA3B,KACA,EAAsD93B,wBAEpDva,GAFF,mBAAOsyC,EAAP,KAA4BC,EAA5B,KAGA,EACIh4B,mBAAS,GADb,mBAAOi4B,EAAP,KAAmCC,EAAnC,KAEA,EAAkDl4B,oBAAS,GAA3D,mBAAOwY,EAAP,KAA0BC,EAA1B,KAGM0f,EAAwB,SAC1BtoC,EACAD,GAEA,OAAQC,EAA4BD,EAAiC,KAInEwoC,EAAkC,WACpC,OAAIL,EAAsB30C,EAAKyM,0BACpB,IACHzM,EAAKyM,0BAA4BkoC,EAAuB,KAoD9DM,EAAY,SAACvqC,EAAgBnJ,GAC/B,IAAM2zC,EAAS,GAef,OAbAxqC,EAAOvB,cAAczB,SAAQ,SAACqE,GACtBA,EAAE3F,uBAAyB2F,EAAE3F,sBAAsBqB,QACnDsE,EAAE3F,sBAAsBsB,SAAQ,SAACqd,GAC7B,IAAM9Y,EAAQ1K,EAAQ6E,sBAAsBqF,MACxC,SAAC0pC,GAAD,OAASA,EAAIlzC,OAAS8iB,EAAEziB,0BAGxB2J,GACAipC,EAAO1wB,KAAKvY,EAAMnK,YAK3B,YAAI,IAAIiG,IAAImtC,IAASjhB,KAAK,MAAQ,IAoGvCmhB,EAA8B,SAACvkC,GACjC,IlEtQuB5O,EkEsQjBugC,EAAO,CACTuR,GAAQ,iBAEDljC,QAFC,IAEDA,OAFC,EAEDA,EAAG/O,KAFF,mBAEU+O,QAFV,IAEUA,OAFV,EAEUA,EAAG9O,UAFb,KAGJwX,GAAE,qCAENw6B,GACIljC,EAAIxI,EAAW,IAAID,KAAKyI,EAAE1O,cAAgB,MAC1CoX,GAAE,sCAaV,OlE3RuBtX,EkEkRJ4O,EAAE5O,MlErQO,IAZR,CACpB,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAGSoiB,QAAQpiB,IkEsQbugC,EAAKhe,KACDuvB,GlEpQsB,SAClC9xC,EACAV,GAEA,IAAM8zC,EAAQ,GAUd,OARA9zC,EAAQoL,YAAYjF,SAAQ,SAAC4tC,GACzBA,EAAIlvC,sBAAsBsB,SAAQ,SAACytC,GAC3BA,EAAI7yC,yBAA2BL,GAC/BozC,EAAM7wB,KAAK8wB,EAAI9rC,gBAKpB6rC,EAAMphB,KAAK,MkEuPFshB,CAAuB1kC,EAAE5O,KAAMjC,GAC/BuZ,GAAE,uCAKPipB,GAwDX,OA7BAvlB,qBAAU,WACNq2B,EAAqBtzC,EAAK6J,oBAC3B,IAEHoT,qBAAU,WACN63B,EAC2C,OAAvC90C,EAAKwM,8BACCuoC,EACI/0C,EAAKyM,0BACLzM,EAAKwM,+BAET,GAEVkoC,GAAsB,GAEtBE,OAAuBvyC,KACxB,CAACrC,IAEJid,qBAAU,WACFw3B,GACAK,EAA8BE,OAEnC,CACCD,EACAC,EACAH,EACAJ,IAGCz0C,EAGD,uBAAK8T,UAAS,UAAKgE,EAAQzC,UAAb,YAAd,UACI,uBAAKvB,UAAWgE,EAAQk8B,cAAxB,UACI,uBAAKlgC,UAAWgE,EAAQm8B,cAAxB,UACI,sBAAKngC,UAAWgE,EAAQymB,YAAxB,SACI,eAAC,GAAD,CAAarpB,MAAM,OAAO2L,YAAU,EAACD,YAAY,MAAjD,SACI,eAAC,GAAD,CAAY/G,SAAS,OAArB,SACKqI,GAAYliB,EAAKwJ,gBAI9B,eAAC,GAAD,CAAY+Q,IAAI,KAAKT,KAAK,QAAQW,QAAQ,QAA1C,SACKza,EAAKwJ,cAGbxJ,EAAO,eAAC,GAAD,CAAeuB,QAASvB,IAAW,QAE/C,uBAAK8T,UAAWgE,EAAQq8B,QAAxB,UAII,wBACA,gBAAC,GAAD,WACI,iCACI,eAAC,GAAD,CACInD,UAAW,eAACwE,GAAD,IACXvE,WAAY13B,GACR,gDAEJipB,MAjRK3xB,EAiRqB7Q,EAhRvC,CACH+zC,GACI1rC,EAAW,IAAID,KAAKyI,EAAEvE,aAAaC,YACnCgN,GAAE,qCAENw6B,GACIljC,EAAEvE,aAAa3C,IAAf,UAAwBkH,EAAEvE,aAAa3C,IAAvC,UAAkD,IAClD4P,GAAE,iCA0Qc,0BAER,eAAC,GAAD,CACIy3B,UAAW,eAACza,GAAD,IACX0a,WAAY13B,GACR,yCAEJipB,KA5QM,SAAC3xB,GAC3B,MAAO,CACHkjC,GAASljC,EAAEpH,aAAc8P,GAAE,sCAC3Bw6B,GACIljC,EAAEzG,eAAetI,KACjByX,GAAE,oCAENw6B,GACI1rC,EAAW,IAAID,KAAKyI,EAAEzG,eAAe9B,OACrCiR,GAAE,0CAmQgBk8B,CAAsBz1C,IACxB,sBAGXqzC,EACG,eAAC,GAAD,CACII,QAAQ,EACRtwB,WAAYnjB,EAAKkJ,WACjBmqC,kBAAmBA,EACnB9xC,QAASvB,EACTszC,qBAAsBA,EACtBC,aACI,iCACI,eAAC,GAAD,CACIz5B,KAAK,KACLtB,MAAO,CAAE4G,aAAc,QAF3B,SAIK6K,GACG,yCAGR,eAAC,GAAD,CACIzR,MAAO,CACHi2B,UAAW,cAEf30B,KAAK,QACLqB,QAAS,kBACL5a,OAAOyX,KAEHpZ,qDAEA,WAVZ,SAcKqrB,GACG,+CAMpB,KACHjqB,EAAKiK,iBAAmBjK,EAAKiK,gBAAgBxC,OAC1C,eAAC,GAAD,CACI4Z,UAAU,OACV2vB,UAAW,eAACW,GAAD,IACXV,WAAY13B,GAAE,kCACdipB,KA9SG,SAAC3xB,GAAuB,IAAD,EACxC6kC,EAAgB,UAAA7kC,EAAE3G,sBAAF,SAAkB/E,iBAClC,mBACA,IACN,MAAO,CACH4uC,GACIljC,EAAE3G,eAAiB2G,EAAE3G,eAAehF,WAAawwC,EACjDn8B,GAAE,yBAENw6B,GACIljC,EAAE3G,eAAiB2G,EAAE3G,eAAepF,MAAQ,MAC5CyU,GAAE,wBACF1I,EAAE3G,gBAAkB2G,EAAE3G,eAAepF,OACjC,oBAAGrE,KAAI,iBAAYoQ,EAAE5G,gBAAgB,GAAGnF,OAAxC,SACI,eAAC6wC,GAAD,CAASv7B,MAAOjM,GAAOC,MAAO8G,MAAM,aAgS1B0gC,CAAmB51C,IACrB,WAER,WAGZ,uBAAK8T,UAAWgE,EAAQq8B,QAAxB,UAII,wBACA,gBAAC,GAAD,WACI,iCACI,eAAC,GAAD,CACInD,UAAW,eAAC6E,GAAD,IACX5E,WAAW,QACXzO,KAAM,CACF,CACIvmB,MAAO,GACPiB,MAAO,GACPk0B,YAAY,EACZrnC,QACI,qCAEQ,uBACI+J,UAAWgE,EAAQi3B,QADvB,UAGI,eAAC,GAAD,CACIv2B,MAAO,CACHi2B,UACI,cAER30B,KAAK,QACLqB,QAAS,kBACL5a,OAAOyX,KAEHpZ,sFAEA,WAXZ,SAeKqrB,GACG,+CAGR,eAAC,GAAD,CACIzR,MAAO,CACHi2B,UACI,cAER30B,KAAK,QACLqB,QAAS,kBACL5a,OAAOyX,KAEHpZ,gGAEA,WAXZ,SAeKqrB,GACG,wDA1MtCuqB,EAoNYx0C,EAAKoG,sBAlN3B,qCACKouC,EACIxyC,MAAK,SAAC7C,EAAGinB,GACN,OAAIjnB,EAAE6C,KAAOokB,EAAEpkB,KAAa,EACxB7C,EAAE6C,KAAOokB,EAAEpkB,MAAc,EACtB,KAEVmB,KAAI,SAACgyC,GACF,OACI,eAAC,GAAD,CACIjE,WAAS,EACTF,UAAW,eAAC6E,GAAD,IACX5E,WAAW,QACXzO,KAAM4S,EAA4BD,IAJtC,UAKYA,EAAIlzC,MALhB,OAKuBkzC,EAAInzC,gBAuMnC,qCACKhC,EAAK0M,UAAUjF,OACZ,iCAnVM,SAACoJ,GAC3B,OAA2B,IAAvBA,EAAEnE,UAAUjF,OAER,eAAC,GAAD,CACIupC,UAAW,eAAC6E,GAAD,IACX5E,WAAY13B,GAAE,mCACdipB,KAAM,CACFuR,GACIljC,EAAEnE,UAAU,GAAGlD,SACf+P,GAAE,mCAENw6B,GACIkB,EAAUpkC,EAAEnE,UAAU,GAAImE,GAC1B0I,GAAE,4CAGN,oBAMZ,uCACI,eAAC,GAAD,CACIy3B,UAAW,eAAC6E,GAAD,IACX5E,WAAW,mBACXzO,KAAM,IACF,oBAEP3xB,EAAEnE,UAAUvJ,KAAI,SAAC64B,GACd,OACI,eAAC,GAAD,CACIkV,WAAS,EACTF,UAAW,eAAC6E,GAAD,IACX5E,WAAY13B,GAAE,wBACdipB,KAAM,CACFuR,GAAS/X,EAAGxyB,SAAU+P,GAAE,wBACxBw6B,GACIkB,EAAUjZ,EAAInrB,GACd0I,GAAE,kCARd,UAWYyiB,EAAG3yB,UAXf,OAW0B2yB,EAAGvyB,qBAySnBqsC,CAAsB91C,GAA5B,OACA,OAQR,eAAC,GAAD,CACIgxC,UAAW,eAACwE,GAAD,IACXvE,WAAY13B,GACR,2CAEJipB,KAAM,CACF,CACIvmB,MAAO,GACPiB,MAAO,GACPk0B,YAAY,EACZrnC,QACI,uBAAKyO,MAAO,CAAE/C,SAAU,QAAxB,UACI,eAAC,GAAD,CACIqE,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QAF3B,SAIK7F,GACG,0CAGR,qCAEQ,uBACIf,MAAO,CACH5T,SAAU,WACV4R,OAAQ,cACRT,QAAS,SAJjB,UAOM0+B,EAkDE,KAjDA,uCACI,eAAC72B,GAAD,CACI3B,MAAO1C,GACH,4CAEJ2D,MACIld,EAAKwM,8BAETqR,UAAU,IAEd,sBACI/J,UACIgE,EAAQs8B,gBAFhB,SAKI,eAAC,GAAD,CACInyC,KAAK,SACLuW,MAAO,CACHrB,YACI,OACJhC,OAAQ,OACRG,gBACI,eAER6F,QAAS,WAED0U,EAAYruB,WAEZ6zB,GACI,GAIRqf,GACI,IAnBZ,SAuBI,eAAC,GAAD,CAAax/B,MAAM,OAAnB,SACI,eAAC8D,GAAD,CACI9D,MAAM,OACNkF,MACIjM,GAAOU,oBASlC4lC,EACG,iCACI,+BACI,eAAC72B,GAAD,CACI3B,MAAM,cACN4gB,WAAS,EACTtgB,aACIo4B,EAEJz3B,MACIy3B,EAEJ92B,UACI,EAEJvB,SAAU,SACNa,GAEA,IAAMkM,EACFlM,EACK5B,OACA2B,MACT03B,GACKvrB,GAGLyrB,EACIE,UAKhB,uBACIlhC,UACIgE,EAAQw8B,eAFhB,UAKI,eAAC,GAAD,CACIn5B,QAAS,WAELu5B,GACI,GAEJE,OACIvyC,IAGRyX,KAAK,SACL7X,KAAK,YACLuW,MAAO,CACH0c,SAAU,GAblB,sBAkBA,eAAC,GAAD,CACI9Z,WAEQu5B,GACA30C,EAAKyM,6BAERkoC,GACDA,GACI,IAERx5B,QAAS,WACL,GACI0U,EAAYruB,WAEZ6zB,GACI,QAIR,GACIsf,EACF,CAEE,IAAMjI,EACF,GACJA,EAAa7/B,iCACT8nC,EAEArnC,EACIo/B,IAKJ3hB,YACI,kBACI2T,EACI,CACIz8B,KAAM,cAGlB,OAKhBuW,MAAO,CACH0c,SAAU,GAEdpb,KAAK,SAjDT,uBAuDR,UAKhB,eAAC,GAAD,CACIA,KAAM,IACN1I,YAAa,GACbygC,WACIgD,GAA8B,IAGtC,eAAC,GAAD,CACI/6B,KAAK,IACLO,MAAM,SACN7B,MAAO,CAAEhC,OAAQ,UAHrB,SAKKyT,GACG,uCACA,CACI8rB,eAAgBrU,OACZ3Y,KAAKwlB,MACDsG,IACC,GAET/nC,+BACI40B,OACI1hC,EAAKyM,2BAEbI,iCACI60B,OACI+S,EACME,GACI,EACJ30C,EAAKwM,gDAY3D,eAAC,GAAD,CACIooB,KAAMQ,EACNP,QAAS,kBAAMQ,GAAqB,SA5Z9B,MCpWhBzgB,GAAYC,aAAgB,CAC9BokB,eAAgB,CACZtjB,QAAS,kBACT8C,SAAU,OACVtD,OAAQ,qBACR4jB,cAAe,QAEnB6B,iBAAkB,CACdxb,aAAc,QAElBxD,OAAQ,CACJhX,SAAU,WACVuQ,OAAQ,WACRG,gBAAiBnH,GAAOE,MACxByI,OAAO,aAAD,OAAe3I,GAAOM,aAC5B8G,aAAc,MACdL,MAAO,OACP2E,SAAU,WACVgC,YAAa,SACbnD,aAAc,SACd7B,OAAQ,UACRuD,MAAOjM,GAAOI,OAElB+H,OAAO,2BACAiY,IACA,CACC5Y,QAAS,aACTkB,OAAQ,YAGhB+gB,OAAQ,CACJ7hB,QAAS,OACTnR,SAAU,WACVgzB,OAAQ,IACR1iB,MAAO,OACPS,QAAS,OACTV,KAAM,IACNnF,WAAY3B,GAAOE,MACnB+G,OAAQ,EACR0lB,UAAU,aAAD,OAAe3sB,GAAOM,aAC/B,aAAc,CACVymB,SAAU,GAEd,0BAA2B,CACvB/d,YAAa,QAyBZ6+B,GAAmC,SAAC,GAA2B,IAAD,gBAAxBtrC,EAAwB,EAAxBA,OAAQ4hC,EAAgB,EAAhBA,UACvD,EAA0B1vB,wBAA6Bva,GAAvD,mBACA,GADA,UAEIoiC,gBADI5B,EAAR,EAAQA,SAAU8B,EAAlB,EAAkBA,aAAcE,EAAhC,EAAgCA,UAAWH,EAA3C,EAA2CA,MAAOE,EAAlD,EAAkDA,SAE5C9sB,EAAUlD,KAChB,EAAkCgI,mBAAqB,IAAvD,mBAAkBq5B,GAAlB,WACA,EAAyCr5B,wBAASva,GAAlD,mBAAO0iC,EAAP,KAAqBC,EAArB,KACA,EAA4BpoB,oBAAS,GAArC,mBAAOH,EAAP,KAAeye,EAAf,KACA,EAAoCte,oBAAS,GAA7C,mBAAO6iB,EAAP,KAAmBC,EAAnB,KACA,EAA8B9iB,oBAAS,GAAvC,mBAAgBsoB,GAAhB,WACA,EAAoCtoB,oBAAS,GAA7C,mBACA,GADA,UACoCA,mBAAsB,KAA1D,mBAAmBs5B,GAAnB,WACA,EAAwCt5B,mBAAuB,IAA/D,mBAAqBu5B,GAArB,WACA,EAA+Cv5B,wBAC3Cva,GADJ,mBAAO+zC,GAAP,KAAwBC,GAAxB,KAGA,GAAsCz5B,wBAClCva,GADJ,qBAGA,IAHA,YAGkDua,oBAAS,IAA3D,qBAAOwY,GAAP,MAA0BC,GAA1B,MACA,GAAsBrH,kBAAQpgB,IAAvBiiB,GAAP,qBAEA,GAA8BjT,mBAA2B,IAAzD,qBAAOP,GAAP,MAAgB8T,GAAhB,MAEA,GAAkDvT,wBAEhDva,GAFF,qBAAOgxC,GAAP,MAA0BC,GAA1B,MAIMgD,GAAUlc,iBAAO,MAEjBmc,GAAQ,SAACzqC,GACX,IAAMG,EAAQvB,EAAOxB,WAAWuC,MAAK,SAAC+qC,GAAD,OAAS9U,OAAO8U,EAAIlyC,UAAYwH,KACrEwnC,GAAqBxnC,GAErB,IAAM2qC,EAAM/rC,EAAOT,gBAAgBwB,MAC/B,SAACirC,GAAD,MAC2B,YAAvBA,EAAGtxC,iBACHs8B,OAAOgV,EAAGrxC,kBAAkBf,UAAYwH,KAG5C2qC,GACA7R,EAAS,yBAA0B6R,EAAI1xC,gBAAa1C,GACpDuiC,EAAS,uBAAwB6R,EAAI3xC,YAASzC,KAE9CuiC,EAAS,8BAA0BviC,GACnCuiC,EAAS,4BAAwBviC,IAGrCg0C,GAAoBpqC,EAAM9F,eAEtB8F,GAASA,EAAM3F,WACf2vC,EAAahqC,EAAM3F,YAIrBqwC,GAAY,uCAAG,kCAAAx3C,EAAA,sEACM8xB,KADN,OACXnxB,EADW,OAEjBo2C,EAAcp2C,EAASoJ,YAEnBwB,IACMuB,EAAQnM,EAASoJ,WAAWuC,MAC9B,SAAC+qC,GAAD,OAASA,EAAIlyC,SAAWoG,EAAOb,iBAAiBvF,UAGpDgvC,GAAqB5R,OAAOh3B,EAAOb,iBAAiBvF,UAE9CmyC,EAAM/rC,EAAOT,gBAAgBwB,MAC/B,SAACirC,GAAD,MAC2B,YAAvBA,EAAGtxC,iBACHs8B,OAAOgV,EAAGrxC,kBAAkBf,UACxBo9B,OAAOh3B,EAAOb,iBAAiBvF,aAIvCsgC,EAAS,yBAA0B6R,EAAI1xC,WACvC6/B,EAAS,uBAAwB6R,EAAI3xC,SAErC8/B,EAAS,8BAA0BviC,GACnCuiC,EAAS,4BAAwBviC,IAGrCg0C,GAAoB3rC,EAAOb,iBAAiB1D,eAExC8F,GAASA,EAAM3F,YACf2vC,EAAahqC,EAAM3F,WAEbswC,EAAe3qC,EAAM3F,UAAUnD,KAAI,SAACZ,GACtC,MAAO,CAAE0Z,MAAOylB,OAAOn/B,EAAIT,MAAOob,MAAOwkB,OAAOn/B,EAAIe,QAGxD6sB,GAAWymB,KAnCF,2CAAH,qDAsDlB35B,qBAAU,YAdG,WAMT,GALIvS,EAAOb,kBACP+6B,EAAS,UAAWl6B,EAAOb,iBAAiBxD,cAEhDswC,KAEIL,IAAWA,GAAQhc,QAAS,CAC5B,IAAM9c,EAAQ84B,GAAQhc,QAAQ9D,cAAc,oBACxChZ,GACAA,EAAMq5B,aAAa,YAAa,KAMxChsB,KACD,CAACngB,IAEJ,IAAMosC,GAAY,WACd9R,OAAiB3iC,GACjBg0C,QAAoBh0C,GACpBk0C,GAAM7U,OAAOh3B,EAAOb,iBAAiBvF,SACrC6xC,EAAgB,IAChBzR,IACAE,EAAS,UAAWl6B,EAAOb,iBAAiBxD,eAGxC++B,GAAiCP,EAAjCO,QAASqH,GAAwB5H,EAAxB4H,YAAatG,GAAWtB,EAAXsB,OAExBE,GAAQ,uCAAG,WAAOrmC,GAAP,mBAAAb,EAAA,0DACT0wB,GAAYruB,WADH,uBAET6zB,IAAqB,GAFZ,8BAMT+P,KAAWL,EANF,wBAOHj+B,EAAY4D,EAAOxB,WAAWuC,MAChC,SAACK,GAAD,OAAQA,EAAGxH,UAAY+uC,MAGrB3G,EAAkC,CACpC5hC,aAAcJ,EAAOrB,SACrB0tC,cAAehT,KAAOgB,GAAcf,OAChC,uBAEJgT,kBAAmBlwC,EAAUxC,OAC7B6C,gBAAiBivC,IAGjB3J,GAAYrlC,UACZslC,EAAatlC,QAAU0hC,OACnBpH,OAAO1hC,EAAKoH,SAASmX,QAAQ,IAAK,OAItCkuB,GAAYwK,gBACZvK,EAAauK,cAAgB,GACzBxK,GAAYwK,cAAcrxC,QAC1B8mC,EAAauK,cAAcrxC,MAAQ5F,EAAKi3C,cAAcrxC,OAGtD6mC,GAAYwK,cAAc1xC,OACG,KAA7BvF,EAAKi3C,cAAc1xC,QAEnBmnC,EAAauK,cAAc1xC,MAAQvF,EAAKi3C,cAAc1xC,QAI1DknC,GAAYyK,iBACZxK,EAAawK,eAAiB,GAC1BzK,GAAYyK,eAAexxC,UAC3BgnC,EAAawK,eAAexxC,QACxB1F,EAAKk3C,eAAexxC,SAIxB+mC,GAAYyK,eAAe3xC,OACG,KAA9BvF,EAAKk3C,eAAe3xC,QAEpBmnC,EAAawK,eAAe3xC,MACxBvF,EAAKk3C,eAAe3xC,QAI5BknC,GAAYtD,qBACZuD,EAAavD,mBAAqBnpC,EAAKmpC,oBAxDlC,UA2DmB3jB,GAAgBknB,GA3DnC,SA2DH5sC,EA3DG,QA6DIoB,OAiBFpB,IACPo7B,GAAU,GACVwE,GAAc,GACdoX,KAEIxK,GACAA,EAAU5hC,IApFT,4CAAH,sDAoGd,OAJAuS,qBAAU,WALFmoB,IAAWL,GACXG,GAAW,MASf,uCACI,0BACIjjC,KAAK,SACL6R,UAAWgE,EAAQxB,OACnB6E,QAAS,kBAAM+f,GAAU,IAH7B,UAKI,eAAC,GAAD,CAAQ/jB,YAAY,OAAO+J,OAAO,OAAlC,SACI,eAAC,GAAD,CAAY5L,gBAAgB,qBAA5B,SACI,eAACs5B,GAAD,QAGR,eAAC,GAAD,CAAYr0B,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAtC,SACKlB,GAAE,iDAGX,gBAAC,GAAD,CACI0gB,UAAWxd,EACXyd,KAAM,WACF4c,KACA5b,GAAU,IAJlB,UAOI,eAAC,GAAD,CAAwBxwB,OAAQA,IAChC,wBACIwQ,IAAKo7B,GACLjQ,SAAU1B,EAAa0B,IACvBvyB,UAAWgE,EAAQmhB,eAHvB,UAKI,eAAC,GAAD,CACI1e,IAAI,KACJT,KAAK,KACLO,MAAM,SACNN,OAAO,OACPvB,MAAO,CAAEhC,OAAQ,eALrB,SAOKyT,GAAO,2CAGZ,gBAAC,GAAD,WACI,eAAC,GAAD,CAAQ9S,YAAY,QAApB,SACI,eAAC,GAAD,UACI,eAACy8B,GAAD,QAGR,eAAC,GAAD,CAAYr5B,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAtC,SACKwP,GAAO,0CAGfvf,GAAU2oC,IACP,eAAC,GAAD,UACK3oC,EAAOxB,WAAWzB,OAAS,EACxB,eAACyU,GAAD,yBACIK,aAAc82B,GACdn2B,MAAOm2B,IACHxQ,EAAS,sBAHjB,IAIIrmB,YAAajD,GACT,qDAEJ+C,SAAU,SAACa,GACPynB,EACI,oBACAkE,OAAO3rB,EAAE5B,OAAO2B,QAEpBq5B,GAAMp5B,EAAE5B,OAAO2B,QAEnBb,QAAS3R,EAAOxB,WAAW/F,KAAI,SAAC2I,GAM5B,MALU,CACNmQ,MAAOnQ,EAAGhK,KACVob,MAAOwkB,OAAO51B,EAAGxH,eAO7B,eAAC,GAAD,CACI8W,UAAQ,EACRa,MAAO1C,GACH,qDAEJ2D,MACIxS,EAAOxB,WAAWuC,MACd,SAACK,GAAD,OACIA,EAAGxH,UAAY+uC,MACrBvxC,SAMtB,eAAC,GAAD,UACKua,GAAQ5U,OACL,eAACyU,GAAD,yBACIK,aAAc65B,IACVvT,EAAS,oBAFjB,IAGI3lB,MAAOk5B,GACP95B,SAAU,SAACa,GACPynB,EACI,kBACAlD,OAAOvkB,EAAE5B,OAAO2B,QAEpBm5B,GAAoBl5B,EAAE5B,OAAO2B,QAEjCb,QAASA,GACTG,YAAajD,GACT,qDAGR,OAER,gBAAC,GAAD,WACI,eAAC,GAAD,CACI0C,MAAK,UAAK1C,GAAE,sCACZzX,KAAK,UACL+b,UAAQ,EACRK,WAAS,EACT2kB,SAAUA,EACVlmB,WAAW,OAACwpB,SAAD,IAACA,IAAD,UAACA,GAAQ/+B,eAAT,QAAC,EAAiB87B,SAC7BllB,aAAa,MACb/b,KAAK,OACL6gC,MAAO,CACH2D,SAAU,SAACvpB,GAAD,OACL4rB,OAAOpH,OAAOxkB,GAAOqB,QAAQ,IAAK,OAC/B,IACAuqB,OACIpH,OAAOxkB,GAAOqB,QAAQ,IAAK,OAC1B,IACThF,GACI,+CAIhB,eAAC,GAAD,CACIK,KAAML,GAAE,2CACRrY,MAAK,OAAEilC,SAAF,IAAEA,IAAF,UAAEA,GAAQ/+B,eAAV,aAAE,EAAiB87B,aAGhC,gBAAC,GAAD,WACI,eAAC,GAAD,CAAQ/rB,YAAY,QAApB,SACI,eAAC,GAAD,CAAYkK,UAAU,OAAtB,SACI,eAACswB,GAAD,QAGR,eAAC,GAAD,CAAYp3B,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAtC,SACKlB,GAAE,oCAGX,gBAAC,GAAD,WACI,eAAC,GAAD,CACI0C,MAAO1C,GAAE,oCACTzX,KAAK,sBACL+b,UAAU,EACVglB,SAAUA,EACVtmB,aAAY,UAAE7R,EAAOR,sBAAT,aAAE,EAAuBjF,OACrC0X,WAAW,OAACwpB,SAAD,IAACA,IAAD,UAACA,GAAQ8Q,qBAAT,QAAC,EAAuBrxC,MAAMs9B,SACzCJ,MAAO,CACH2D,SAAU,SAACvpB,GAAD,OACNA,EAAMzV,OAAS,IACdyV,GACD3D,GAAE,6CAGd,eAAC,GAAD,CACIK,KAAML,GAAE,yCACRrY,MAAK,OAAEilC,SAAF,IAAEA,IAAF,UAAEA,GAAQ8Q,qBAAV,aAAE,EAAuBrxC,MAAMs9B,aAG5C,eAAC,GAAD,UACI,eAAC,GAAD,CACIjnB,MAAO1C,GAAE,oCACTzX,KAAK,sBACL+b,UAAU,EACVglB,SAAUA,EACV5gC,KAAK,QACLsa,cAAc,UAAA7R,EAAOR,sBAAP,eAAuBpF,QAAS,OAGtD,gBAAC,GAAD,WACI,eAAC,GAAD,CACImX,MAAO1C,GACH,4CAEJzX,KAAK,yBACL+b,UAAU,EACVglB,SAAUA,EACVlmB,WAAW,OAACwpB,SAAD,IAACA,IAAD,UAACA,GAAQ+Q,sBAAT,QAAC,EAAwBxxC,QAAQw9B,SAC5CJ,MAAO,CACH2D,SAAU,SAACvpB,GAAD,OACLA,GAASA,EAAMzV,OAAS,IACxByV,GACD3D,GAAE,6CAGd,eAAC,GAAD,CACIK,KAAML,GAAE,yCACRrY,MAAK,OAAEilC,SAAF,IAAEA,IAAF,UAAEA,GAAQ+Q,sBAAV,aAAE,EAAwBxxC,QAAQw9B,aAG/C,eAAC,GAAD,UAUI,eAAC,GAAD,CACIjnB,MAAO1C,GAAE,mCACTzX,KAAK,uBACL+b,UAAU,EACVglB,SAAUA,EACV5gC,KAAK,YAGb,gBAAC,GAAD,WACI,eAAC,GAAD,CAAQkV,YAAY,QAApB,SACI,eAAC,GAAD,UACI,eAACggC,GAAD,QAGR,eAAC,GAAD,CAAY58B,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAtC,SACKwP,GACG,mDAIZ,eAAC,GAAD,UACI,eAAC,GAAD,CACIhO,MAAK,UAAK1C,GAAE,qCACZ2K,SAAU6gB,EACV9J,YAAa+J,EACbxB,QAASO,OAASuC,SAAS,EAAG,QAAQC,SACtChD,QAASQ,OAASnrB,IAAI,EAAG,QAAQ2tB,SACjC5pB,UAAQ,MAGhB,eAAC,GAAD,UACI,eAAC,GAAD,CACIV,MAAO1C,GAAE,6CACTspB,SAAUA,EACV/gC,KAAK,qBACL+b,UAAU,MAGlB,uBAAK/J,UAAWgE,EAAQ8f,OAAxB,UACI,eAAC,GAAD,CACIzc,QAAS,WACL+f,GAAU,GACV4b,MAEJ70C,KAAK,YACL6X,KAAK,QANT,SAQKP,GAAE,8CAEP,eAAC,GAAD,CACI8B,WAAW,SACXpZ,KAAK,UACL6X,KAAK,QACLsB,UAAWgqB,GAJf,SAMK7rB,GAAE,iDAIX,+BAGPkmB,EACG,gBAAC,GAAD,CACInoB,QAAS,KACTC,aAAW,EACXC,WAAS,EACTC,KAAM,eAACwG,GAAD,CAAU/I,MAAM,SAJ1B,UAMI,eAAC,GAAD,CACIsD,MAAO,CAAE4G,aAAc,QACvBtF,KAAK,IACLO,MAAM,SAHV,SAKK4P,GACG,6DAGR,eAAC,GAAD,CACI1P,IAAI,IACJT,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QACvB/E,MAAM,SAJV,SAMK4P,GACG,6DAGR,eAAC,GAAD,CAAQnQ,KAAK,SAASqB,QAAS,kBAAMukB,GAAc,IAAnD,SACKzV,GACG,kEAIZ,KACJ,eAAC,GAAD,CACI2K,KAAMQ,GACNP,QAAS,kBAAMQ,IAAqB,UC1mB9CzgB,GAAYC,aAAgB,CAC9BokB,eAAgB,CACZtjB,QAAS,kBACT8C,SAAU,OACVtD,OAAQ,qBACR4jB,cAAe,QAEnB6B,iBAAkB,CACdxb,aAAc,QAElBxD,OAAQ,CACJhX,SAAU,WACVuQ,OAAQ,WACRG,gBAAiBnH,GAAOE,MACxByI,OAAO,aAAD,OAAe3I,GAAOM,aAC5B8G,aAAc,MACdL,MAAO,OACP2E,SAAU,WACVgC,YAAa,SACbnD,aAAc,SACd7B,OAAQ,UACRuD,MAAOjM,GAAOO,YAElB4H,OAAO,2BACAiY,IACA,CACC1X,OAAQ,YAGhB+gB,OAAQ,CACJ7hB,QAAS,OACTnR,SAAU,WACVgzB,OAAQ,IACR1iB,MAAO,OACPS,QAAS,OACTV,KAAM,IACNnF,WAAY3B,GAAOE,MACnB+G,OAAQ,EACR0lB,UAAU,aAAD,OAAe3sB,GAAOM,aAC/B,aAAc,CACVymB,SAAU,GAEd,0BAA2B,CACvB/d,YAAa,QASZigC,GAAiC,SAAC,GAAgB,IAAd1sC,EAAa,EAAbA,OAC7C,EACI+5B,eADI5B,EAAR,EAAQA,SAAU6B,EAAlB,EAAkBA,MAAOG,EAAzB,EAAyBA,UAAWF,EAApC,EAAoCA,aAE9B7sB,EAAUlD,KAChB,EAA0BgI,mBAAsB,IAAvCs5B,EAAT,oBACA,EAAyCt5B,mBAAS,MAAlD,mBAAOmoB,EAAP,KAAqBC,EAArB,KACA,EAA4BpoB,oBAAS,GAArC,mBAAOH,EAAP,KAAeye,EAAf,KACA,EAAoCte,oBAAS,GAA7C,mBAAO6iB,EAAP,KAAmBC,EAAnB,KACA,EAA8B9iB,oBAAS,GAAvC,mBAAgBsoB,GAAhB,WACA,EAAsBlX,kBAAQpgB,IAAvBiiB,EAAP,oBACA,EAAkDjT,oBAAS,GAA3D,mBAAOwY,EAAP,KAA0BC,EAA1B,KAIA,EAA8BzY,wBAASva,GAAvC,mBAAgBg1C,GAAhB,WACA,EAAkDz6B,wBAEhDva,GAFF,mBAAOgxC,EAAP,KAA0BC,EAA1B,KAIMqD,EAAY,uCAAG,8BAAAx3C,EAAA,sEAKM8xB,KALN,OAKXnxB,EALW,OASjBqjB,GAFIA,EAAarjB,EAASoJ,YAEFua,QAAO,SAACkmB,GAC5B,OAAOj/B,EAAOxB,WAAWkb,MACrB,SAACkzB,GAAD,OAAUA,EAAKhzC,SAAWqlC,EAAMrlC,aAGxC4xC,EAAc/yB,GAdG,2CAAH,qDAiBlBlG,qBAAU,WACN05B,IAEiC,IAA7BjsC,EAAOxB,WAAWzB,QAClB6rC,EAAqB5R,OAAOh3B,EAAOb,iBAAiBvF,WAEzD,IAEH2Y,qBAAU,WAINioB,IADUH,KAAkBsO,KAE7B,CAACA,EAAmBtO,IAEvB,IAAM+R,EAAY,WACVpsC,EAAOxB,WAAWzB,QAAuC,IAA7BiD,EAAOxB,WAAWzB,OAC9C6rC,EAAqB5R,OAAOh3B,EAAOxB,WAAW,GAAG5E,SAEjDgvC,OAAqBjxC,GAGzB2iC,EAAiB,MACjBqS,OAAWh1C,GACXqiC,KAGa+H,GAAgB5H,EAAzBO,QAAyBP,EAAhB4H,aAEX8K,EAAa,uCAAG,WAClBv3C,GADkB,eAAAb,EAAA,0DAGd0wB,EAAYruB,WAHE,uBAId6zB,GAAqB,GAJP,kBAKPl0B,QAAQq2C,QAAQ,OALT,cAOZ9K,EAAkC,CACpC5hC,aAAcJ,EAAOrB,SACrB0tC,cAAehT,KAAOgB,GAAcf,OAAO,uBAC3CgT,kBAAmBlO,OAAOuK,IAG1B5G,EAAYtD,qBACZuD,EAAavD,mBAAqBnpC,EAAKmpC,oBAdzB,SAiBKxjB,GAA0B+mB,GAjB/B,uBAoBdxR,GAAU,GACVwE,GAAc,GACdoX,KAtBc,kBAyBX31C,QAAQq2C,QAAQ,OAzBL,4CAAH,sDA4BnB,OACI,uCACI,eAAC,GAAD,CAAQ19B,KAAK,QAAQqB,QAAS,kBAAM+f,GAAU,IAA9C,SACK3hB,GAAE,2DAEP,gBAAC,GAAD,CACI0gB,UAAWxd,EACXyd,KAAM,WACFgB,GAAU,GACV4b,KAJR,UAOI,eAAC,GAAD,CAAwBpsC,OAAQA,IAChC,wBACIoJ,UAAWgE,EAAQmhB,eACnBoN,SAAU1B,EAAa4S,GAF3B,UAII,eAAC,GAAD,CACIh9B,IAAI,KACJT,KAAK,KACLO,MAAM,SACNN,OAAO,OACPvB,MAAO,CAAEhC,OAAQ,eALrB,SAOKyT,GACG,4DAGR,gBAAC,GAAD,WACI,eAAC,GAAD,CAAQ9S,YAAY,QAApB,SACI,eAAC,GAAD,UACI,eAACy8B,GAAD,QAGR,eAAC,GAAD,CAAYr5B,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAtC,SACKwP,GAAO,0CAuBfvf,GACG,eAAC,GAAD,UACKA,EAAOxB,WAAWzB,OAAS,EACxB,eAACyU,GAAD,CACIM,YAAY,cACZF,SAAU,SAACa,GACPm2B,EAAqBn2B,EAAE5B,OAAO2B,QAElCb,QAAS3R,EAAOxB,WAAW/F,KAAI,SAAC2I,GAM5B,MALU,CACNmQ,MAAOnQ,EAAGhK,KACVob,MAAOwkB,OAAO51B,EAAGxH,cAO7B,eAAC,GAAD,CACI8W,UAAQ,EACRyC,UAAU,EACV5B,MAAOvR,EAAOb,iBAAiB/H,SAK/C,eAAC,GAAD,UACI,eAAC,GAAD,CACIma,MAAM,qCACNiI,SAAU6gB,EACVvB,QAASO,OAASuC,SAAS,EAAG,QAAQC,SACtCtL,YAAa,SAAC9d,GACV6nB,EAAiB7nB,QAI7B,eAAC,GAAD,UACI,eAAC,GAAD,CACIlB,MAAO1C,GAAE,6CACTspB,SAAUA,EACV/gC,KAAK,qBACL+b,UAAU,MAGlB,uBAAK/J,UAAWgE,EAAQ8f,OAAxB,UACI,eAAC,GAAD,CACIzc,QAAS,WACL+f,GAAU,GACV4b,KAEJ70C,KAAK,YACL6X,KAAK,QANT,sBAUA,eAAC,GAAD,CAAQuB,WAAW,SAASpZ,KAAK,UAAU6X,KAAK,QAAhD,qBAKJ,+BAGP2lB,EACG,gBAAC,GAAD,CACInoB,QAAS,KACTC,aAAW,EACXC,WAAS,EACTC,KAAM,eAACqd,GAAD,CAAU5f,MAAM,SAJ1B,UAMI,eAAC,GAAD,CACIsD,MAAO,CAAE4G,aAAc,QACvBtF,KAAK,IACLO,MAAM,SAHV,SAKK4P,GAAO,iDAEZ,eAAC,GAAD,CACI1P,IAAI,IACJT,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QACvB/E,MAAM,SAJV,SAMK4P,GAAO,2CAEZ,eAAC,GAAD,CAAQnQ,KAAK,SAASqB,QAAS,kBAAMukB,GAAc,IAAnD,SACKzV,GAAO,8CAGhB,KACJ,eAAC,GAAD,CACI2K,KAAMQ,EACNP,QAAS,kBAAMQ,GAAqB,UCjS9CzgB,GAAYC,aAAgB,CAC9BokB,eAAgB,CACZtjB,QAAS,kBACT8C,SAAU,OACVtD,OAAQ,qBACR4jB,cAAe,QAEnB6B,iBAAkB,CACdxb,aAAc,QAElBxD,OAAQ,CACJhX,SAAU,WACVuQ,OAAQ,WACRG,gBAAiBnH,GAAOE,MACxByI,OAAO,aAAD,OAAe3I,GAAOM,aAC5B8G,aAAc,MACdL,MAAO,OACP2E,SAAU,WACVgC,YAAa,SACbnD,aAAc,SACd7B,OAAQ,UACRuD,MAAOjM,GAAOO,YAElB4H,OAAO,2BACAiY,IACA,CACC1X,OAAQ,YAGhB+gB,OAAQ,CACJ7hB,QAAS,OACTnR,SAAU,WACVgzB,OAAQ,IACR1iB,MAAO,OACPS,QAAS,OACTV,KAAM,IACNnF,WAAY3B,GAAOE,MACnB+G,OAAQ,EACR0lB,UAAU,aAAD,OAAe3sB,GAAOM,aAC/B,aAAc,CACVymB,SAAU,GAEd,0BAA2B,CACvB/d,YAAa,QAgBZsgC,GAAsC,SAAC,GAAgB,IAAD,YAAb/sC,EAAa,EAAbA,OAClD,EACI+5B,eADI5B,EAAR,EAAQA,SAAUgC,EAAlB,EAAkBA,UAAWH,EAA7B,EAA6BA,MAAOC,EAApC,EAAoCA,aAAcC,EAAlD,EAAkDA,SAE5C9sB,EAAUlD,KAChB,EAAsBoZ,kBAAQpgB,IAAvBiiB,EAAP,oBACA,EAAkDjT,oBAAS,GAA3D,mBAAOwY,EAAP,KAA0BC,EAA1B,KACA,EAAoCzY,mBAAsB,IAA1D,mBAAO1T,EAAP,KAAmBgtC,EAAnB,KACA,EAAkCt5B,mBAAqB,IAAvD,mBAAOtW,EAAP,KAAkB2vC,EAAlB,KACA,EAAyCr5B,mBAAS,MAAlD,mBAAOmoB,EAAP,KAAqBC,EAArB,KACA,EAA4BpoB,oBAAS,GAArC,mBAAOH,EAAP,KAAeye,EAAf,KACA,EAAoCte,oBAAS,GAA7C,mBAAO6iB,EAAP,KAAmBC,EAAnB,KACA,EAA8B9iB,oBAAS,GAAvC,mBAAgBsoB,GAAhB,WACA,EAAgDtoB,oBAAkB,GAAlE,mBAAO86B,EAAP,KAAyBC,EAAzB,KACA,EAAwC/6B,mBAAuB,IAA/D,oBAAOg7B,GAAP,MAAqBzB,GAArB,MACA,GAA4Bv5B,mBAAiC,CACzDxV,aAAS/E,EACT8mC,wBAAoB9mC,IAFxB,qBAAOkL,GAAP,MAIA,IAJA,MAI+CqP,wBAC3Cva,IADJ,qBAAO+zC,GAAP,MAAwBC,GAAxB,MAGA,GAAkDz5B,wBAEhDva,GAFF,qBAAOgxC,GAAP,MAA0BC,GAA1B,MAIMqD,GAAY,uCAAG,8BAAAx3C,EAAA,sEACM8xB,KADN,OACXnxB,EADW,OAGjBid,QAAQC,IAAIld,GACZid,QAAQC,IAAItS,GAIZyY,GAFIA,EAAarjB,EAASoJ,YAEFua,QAAO,SAACkmB,GAC5B,OAAOj/B,EAAOxB,WAAWkb,MACrB,SAACkzB,GAAD,OAAUA,EAAKhzC,SAAWqlC,EAAMrlC,aAIxC4xC,EAAc/yB,GAdG,2CAAH,qDAiBlBlG,qBAAU,WACN05B,OACD,IAEH15B,qBAAU,WAQNioB,IAJMH,KACAqR,IACkB,YAApBA,MACE/C,MAEP,CAAC9lC,GAAQ6oC,GAAiB/C,GAAmBtO,EAAcF,IAE9D,IAAM0R,GAAQ,SAACzqC,GACX,IAAMG,EAAQ/C,EAAWuC,MAAK,SAAC+qC,GAAD,OAAS9U,OAAO8U,EAAIlyC,UAAYwH,KAE9DwnC,GAAqBxnC,GACrBuqC,GAAoB,WAEhBpqC,GAASA,EAAM3F,WACf2vC,EAAahqC,EAAM3F,YAIrBwwC,GAAY,WACd9R,EAAiB,MACjBsO,GAAqB,WACrB+C,GAAoB,WACpBF,GAAgB,IAChBzR,KAGI+H,GAAwB5H,EAAxB4H,YAAatG,GAAWtB,EAAXsB,OAEfoR,GAAa,uCAAG,WAClBv3C,GADkB,eAAAb,EAAA,0DAGd0wB,EAAYruB,WAHE,uBAId6zB,GAAqB,GAJP,kBAKPl0B,QAAQq2C,QAAQ,OALT,cAOZ9K,EAAkC,CACpC5hC,aAAcJ,EAAOrB,SACrB0tC,cAAehT,KAAOgB,GAAcf,OAAO,uBAC3CgT,kBAAmBlO,OAAOuK,IAC1BlsC,gBAAiBivC,IAAmB1U,OAAOh3B,EAAOpE,UAAU,GAAGhD,KAE/DmpC,GAAYrlC,UACZslC,EAAatlC,QAAU0hC,OACnBpH,OAAO1hC,EAAKoH,SAASmX,QAAQ,IAAK,OAItCkuB,GAAYtD,qBACZuD,EAAavD,mBAAqBnpC,EAAKmpC,oBAGvCuO,IACIhL,EAAavD,mBACbuD,EAAavD,mBAAb,UAAqCuD,EAAavD,mBAAlD,oBAEAuD,EAAavD,mBAAqB,iBA3BxB,SA+BKzjB,GAAqBgnB,GA/B1B,uBAkCdxR,GAAU,GACVwE,GAAc,GACdoX,MApCc,kBAuCX31C,QAAQq2C,QAAQ,OAvCL,4CAAH,sDA0CnB,OACI,uCACI,eAAC,GAAD,CAAQ19B,KAAK,QAAQqB,QAAS,kBAAM+f,GAAU,IAA9C,SACK3hB,GAAE,2DAEP,gBAAC,GAAD,CACI0gB,UAAWxd,EACXyd,KAAM,WACFgB,GAAU,GACV4b,MAJR,UAOI,eAAC,GAAD,CAAwBpsC,OAAQA,IAChC,wBACImtC,YAAU,EACV/jC,UAAWgE,EAAQmhB,eACnBoN,SAAU1B,EAAa4S,IAH3B,UAKI,eAAC,GAAD,CACIh9B,IAAI,KACJT,KAAK,KACLO,MAAM,SACNN,OAAO,OACPvB,MAAO,CAAEhC,OAAQ,eALrB,SAOKyT,GACG,0DAGR,gBAAC,GAAD,WACI,eAAC,GAAD,CAAQ9S,YAAY,QAApB,SACI,eAAC,GAAD,UACI,eAACy8B,GAAD,QAGR,eAAC,GAAD,CAAYr5B,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAtC,SACKwP,GAAO,0CAGhB,gBAAC,GAAD,WACI,eAAC,GAAD,CACI4Y,SAAUA,EACVhlB,UAAQ,EACR/b,KAAK,oBACL6a,WAAW,OAACwpB,SAAD,IAACA,IAAD,UAACA,GAAQ6Q,yBAAT,QAAC,EAA2B9T,SACvCJ,MAAO,CACHjlB,SAAU,gCACVvB,SAAU,SAACa,GACPo5B,GAAMp5B,EAAE5B,OAAO2B,OACf0nB,EACI,oBACAznB,EAAE5B,OAAO2B,SAIrBT,OAAQA,EACRD,YAAY,gBACZF,SAAU,SAACa,GACPo5B,GAAMp5B,EAAE5B,OAAO2B,OACf0nB,EAAS,oBAAqBznB,EAAE5B,OAAO2B,QAE3Cb,QAASnT,EAAW/F,KAAI,SAAC2I,GAMrB,MALU,CACNmQ,MAAOnQ,EAAGhK,KACVob,MAAOwkB,OAAO51B,EAAGxH,cAM7B,eAAC,GAAD,CACIsV,KAAK,GACL1Y,MAAK,OAAEilC,SAAF,IAAEA,IAAF,UAAEA,GAAQ6Q,yBAAV,aAAE,EAA2B9T,aAG1C,gBAAC,GAAD,WACI,eAAC,GAAD,CACIL,SAAUA,EACVhlB,UAAQ,EACR/b,KAAK,kBACL6a,WAAW,OAACwpB,SAAD,IAACA,IAAD,UAACA,GAAQh/B,uBAAT,QAAC,EAAyB+7B,SACrCJ,MAAO,CACHjlB,SAAU,8BACVvB,SAAU,SAACa,GACPk5B,GAAoBl5B,EAAE5B,OAAO2B,OAC7B0nB,EAAS,kBAAmBznB,EAAE5B,OAAO2B,SAG7CT,OAAQA,EACRrB,UAAWi4B,GACX72B,YAAY,aACZH,QAAS/V,EAAUnD,KAAI,SAACZ,GAMpB,MALU,CACN0Z,MAAO1Z,EAAIT,KACXob,MAAOwkB,OAAOn/B,EAAIe,UAM9B,eAAC,GAAD,CACIsW,KAAML,GAAE,2CACRrY,MAAK,OAAEilC,SAAF,IAAEA,IAAF,UAAEA,GAAQh/B,uBAAV,aAAE,EAAyB+7B,aAGxC,gBAAC,GAAD,WACI,eAAC,GAAD,CACIjnB,MAAK,UAAK1C,GACN,qCADC,MAGLzX,KAAK,UACL+b,UAAU,EACVK,WAAS,EACT2kB,SAAUA,EACVtmB,kBAAcla,EACdsa,WAAW,OAACwpB,SAAD,IAACA,IAAD,UAACA,GAAQ/+B,eAAT,QAAC,EAAiB87B,SAC7BJ,MAAO,CACH2D,SAAU,SAACvpB,GAAD,OACL4rB,OAAOpH,OAAOxkB,GAAOqB,QAAQ,IAAK,OAC/B,IACAuqB,OACIpH,OAAOxkB,GAAOqB,QAAQ,IAAK,OAC1B,IACThF,GACI,+CAIhB,eAAC,GAAD,CACIK,KAAML,GAAE,2CACRrY,MAAK,OAAEilC,SAAF,IAAEA,IAAF,UAAEA,GAAQ/+B,eAAV,aAAE,EAAiB87B,aAIhC,gBAAC,GAAD,WACI,eAAC,GAAD,CAAQ/rB,YAAY,QAApB,SACI,eAAC,GAAD,UACI,eAACggC,GAAD,QAGR,eAAC,GAAD,CAAY58B,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAtC,SACKwP,GACG,mDAIZ,gBAAC,GAAD,WACI,eAAC,GAAD,CACIhO,MAAK,UAAK1C,GAAE,qCACZ2K,SAAU6gB,EACV9J,YAAa,SAAC9d,GACV6nB,EAAiB7nB,GACjBg5B,GAAgB,KAEpBx5B,WAAW,OAACi7B,SAAD,IAACA,QAAcb,eAC1BvT,QAASO,OAASuC,SAAS,EAAG,QAAQC,SACtChD,QAASQ,OAASnrB,IAAI,EAAG,QAAQ2tB,WAErC,eAAC,GAAD,CACI3sB,KAAK,GACL1Y,MACI02C,GAAab,cACP,sCACA10C,OAIlB,eAAC,GAAD,UACI,eAAC,GAAD,CACI4Z,MAAO1C,GAAE,6CACTspB,SAAUA,EACV/gC,KAAK,qBACL+b,UAAU,MAGlB,eAAC,GAAD,UACI,eAAC,GAAD,CACI5B,MAAO1C,GAAE,qCACT8f,UAAWqe,EACXp7B,SAAU,WACNq7B,GAAqBD,QAIjC,uBAAK5jC,UAAWgE,EAAQ8f,OAAxB,UACI,eAAC,GAAD,CACIzc,QAAS,WACL+f,GAAU,GACV4b,MAEJ70C,KAAK,YACL6X,KAAK,QANT,sBAUA,eAAC,GAAD,CACIuB,WAAW,SACXpZ,KAAK,UACL6X,KAAK,QACLqB,QAAS,WACA4pB,GACDoR,GAAgB,CACZY,eAAe,KAP/B,SAYK9sB,GACG,4DAKZ,+BAGPwV,EACG,gBAAC,GAAD,CACInoB,QAAS,KACTC,aAAW,EACXC,WAAS,EACTC,KAAM,eAACqd,GAAD,CAAU5f,MAAM,SAJ1B,UAMI,eAAC,GAAD,CACIsD,MAAO,CAAE4G,aAAc,QACvBtF,KAAK,IACLO,MAAM,SAHV,SAKK4P,GACG,wDAGR,eAAC,GAAD,CACI1P,IAAI,IACJT,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QACvB/E,MAAM,SAJV,SAMK4P,GAAO,kDAEZ,eAAC,GAAD,CAAQnQ,KAAK,SAASqB,QAAS,kBAAMukB,GAAc,IAAnD,SACKzV,GAAO,qDAGhB,KACJ,eAAC,GAAD,CACI2K,KAAMQ,EACNP,QAAS,kBAAMQ,GAAqB,UCtc9CzgB,GAAYC,cAAgB,iBAAO,CACrCijC,SAAU,CACNniC,QAAS,SACTI,QAAS,OACT8D,SAAU,WACVO,MAAOjM,GAAOI,MACdoI,WAAY,MACZ,UAAW,CACPyD,MAAOjM,GAAOO,WACd,QAAS,CACL0L,MAAOjM,GAAOO,cAI1BgP,KAAM,CACF3H,QAAS,QACT8L,WAAY,YAIdi2B,GAAwC,SAAC,GAAmB,IAAjB/iC,EAAgB,EAAhBA,GAAIkH,EAAY,EAAZA,MAC3CnE,EAAUlD,KAEhB,OACI,gBAAC,IAAD,CAAMG,GAAIA,EAAIjB,UAAWgE,EAAQggC,SAAjC,UACI,eAAC71B,GAAD,CAAc7H,MAAOjM,GAAOI,MAAO2G,MAAM,QACzC,uBAAMpB,UAAWgE,EAAQ4F,KAAzB,SAAgCzB,QClBtC87B,GAA4C,SAAC,GAAgB,IAAdrtC,EAAa,EAAbA,OACjD,EAA0BkS,mBAAS,IAAnC,mBAAOuJ,EAAP,KAAcgpB,EAAd,KACA,EAA4BvyB,oBAAS,GAArC,mBAAOH,EAAP,KAAeye,EAAf,KACA,EAAkCte,mBAAqB,WAAvD,mBAAOwyB,EAAP,KAAkBC,EAAlB,KACA,EAA8BzyB,oBAAS,GAAvC,mBAAOwT,EAAP,KAAgBC,EAAhB,KACA,EAAgCzT,wBAA2Bva,GAA3D,mBAAOitC,EAAP,KAAiBC,EAAjB,KACA,EAAsBvhB,kBAAQpgB,IAAvBiiB,EAAP,oBAEMhF,EAAO,WAAY,4CACrB,8BAAA1rB,EAAA,0DACQ0wB,EAAYruB,WADpB,gBAEQ6uB,GAAW,GAFnB,gDAKmCya,GACnBpgC,EAAOrB,SACP,eAPhB,OAKkBvJ,EALlB,OASkB0vC,EAAcpD,GAAStsC,EAAS2vC,OAEtCN,EAASK,GAETnf,GAAW,GAbvB,kDAeYA,GAAW,GAfvB,2DADqB,uBAAC,WAAD,wBAqBrBua,IAGE8C,EAAa,uCAAG,WAAOtV,GAAP,SAAAj5B,EAAA,6DAClBkwC,EAAa,WADK,SAEKlE,GAAW/S,EAAK90B,IAFrB,gBAId+rC,EAAa,WACQ,IAAjBlpB,EAAM1e,QACNyzB,GAAU,GAEdrQ,KARc,2CAAH,sDAgBnB,OAJA5N,qBAAU,WACN4N,MACD,IAECuF,EAAgB,KAGhB,uCACI,+BACI,eAAC,GAAD,CACI2c,cAAe,WACX7R,GAAU,GACVmU,EAAa,WAEjBrC,YAAa,WACT9R,GAAU,GACVmU,EAAa,YAEjBlpB,MAAOA,MAIf,gBAAC,GAAD,CACI8T,UAAWxd,EACXyd,KAAM,WACFgB,GAAU,IAHlB,UAMI,eAAC,GAAD,CAAwBxwB,OAAQA,IAEjB,WAAd0kC,EACG,eAAC,GAAD,CACI1kC,OAAQA,EACRzI,KAAK,SACLuqC,SAAUrmB,EAAM1e,OAAS,EACzB8kC,cAAe,WACX8C,EAAa,WACQ,IAAjBlpB,EAAM1e,QACNyzB,GAAU,IAGlBoR,UAAW,WACP+C,EAAa,WACbxkB,OAGR,KAEW,SAAdukB,GAAwBE,EACrB,eAAC,GAAD,CACIlX,KAAMkX,EACNzC,SAAU,kBAAMwC,EAAa,YAC7B/C,UAAW,WACPzhB,IACAwkB,EAAa,cAGrB,KAEW,YAAdD,EACG,eAAC,GAAD,CACIjpB,MAAOA,EACPsnB,YAAa,SAACrV,GACV8C,GAAU,GACVqU,EAAYnX,GACZiX,EAAa,SAEjB3B,cAAeA,EACfX,cAAe,kBAAMsC,EAAa,aAEtC,YC5FP2I,GAAgB,SACzBlzC,EACAmX,EACAza,EACAy2C,EACA5iB,GAEA,MAAO,CACHpZ,MAAO,GACPiB,MAAO,GACPk0B,YAAY,EACZrnC,QAASjF,EACL,uCACI,qBACIrE,KAAI,iBAAYqE,GAChBqW,QAAS,SAACgC,GACF3b,IACA2b,EAAEmY,iBACFD,GAAqB,KAG7B7c,MAAO,CACHzC,QAAS,OACTb,MAAO,OACPgC,eAAgB,iBAXxB,UAcI,iCACI,eAAC,GAAD,CACIqD,IAAI,KACJT,KAAK,MACLM,MAAM,sBAHV,SAKK6B,IAEL,eAAC,GAAD,CAAY1B,IAAI,IAAIT,KAAK,KAAzB,SACKhV,GAAS,SAGlB,eAAC6wC,GAAD,CAASv7B,MAAOjM,GAAOC,MAAO8G,MAAM,YAExC,eAAC,GAAD,CACI0f,KAAMqjB,EACNpjB,QAAS,kBAAMQ,GAAqB,SAI5C,uCACI,iCACI,eAAC,GAAD,CAAY9a,IAAI,KAAKT,KAAK,MAAMM,MAAM,sBAAtC,SACK6B,IAEL,eAAC,GAAD,CAAY1B,IAAI,IAAIT,KAAK,KAAzB,SACKhV,GAAS,SAGlB,eAAC6wC,GAAD,CAASv7B,MAAOjM,GAAOC,MAAO8G,MAAM,cAM9CN,GAAYC,aAAgB,CAC9BQ,UAAU,cACN+E,MAAOjM,GAAOI,MACdoH,QAAS,YAFJ,6BAGkB+E,GAAYC,QAH9B,OAG6C,CAC9C,IAAK,CACDuE,oBAAqB,cACrBvJ,QAAS,cAIrBq+B,cAAe,CACXj+B,QAAS,OACTmB,eAAgB,gBAChBjB,WAAY,SACZN,QAAS,YAEbs+B,cAAe,CACXrvC,SAAU,WACVmR,QAAS,OACTE,WAAY,SACZiB,eAAgB,cAEpByX,WAAY,CACR5Y,QAAS,OACTJ,QAAS,UACTkF,UAAW,QAEfmF,OAAQ,CACJjK,QAAS,OACTmJ,oBAAqB,UACrB2P,IAAK,UAETG,cAAe,CACXjZ,QAAS,OACTC,cAAe,UAEnBk+B,KAAM,CACFn+B,QAAS,OACTuK,UAAW,MACXrK,WAAY,SACZiB,eAAgB,YAEpBi9B,QAAS,CACL/0B,aAAc,OAEd,SAAU,CACNzN,QAAS,MACT6E,OAAQ,cAGhBF,OAAO,2BACAiY,IACA,CACC1X,OAAQ,YAGhBk4B,QAAS,CACL75B,MAAO,OACPa,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBlB,cAAe,SACf,WAAY,CACRQ,OAAQ,SACRtB,MAAO,SAGfgjC,WAAY,CACRniC,QAAS,OACTmB,eAAgB,YAEpBqnB,YAAa,CACT35B,SAAU,WACVsQ,MAAO,OACPiC,YAAa,QAEjBgP,MAAO,CACHoJ,UAAW,UAIb4oB,GAA0B,WAC5B,IAAMrgC,EAAUlD,KACVjT,EAASy2C,eACf,EAAyBx7B,wBAA6Bva,GAAtD,mBAAOrC,EAAP,KAAaq4C,EAAb,KACA,EAAkDz7B,oBAAS,GAA3D,mBAAOwY,EAAP,KAA0BC,EAA1B,KACA,EAA8BzY,mBAAS,KAAvC,mBAAO07B,EAAP,KAAgBC,EAAhB,KACA,EAAkD37B,wBAEhDva,GAFF,mBAAOgxC,EAAP,KAA0BC,EAA1B,KAGA,EAAuBvT,cAAhBC,EAAP,oBACA,EAAsBhS,kBAAQpgB,IAAvBiiB,EAAP,oBAEMhF,EAAI,uCAAG,WAAOvnB,GAAP,mBAAAnE,EAAA,sEACcmmB,GAAahiB,GAD3B,cACHxD,EADG,OAEKmyB,EAAgBnyB,EAAtBE,KACFuB,EAAU0H,EAAO7F,MAAM6uB,GAC7BomB,EAAS92C,GAJA,kBAKFzB,GALE,2CAAH,sDAQVmd,qBAAU,WACN,IAAQ3Z,EAAO3B,EAAP2B,GAEJA,IACAunB,EAAKvnB,GAED08B,EAAa5yB,IAAI,YACjBmrC,EAAWvY,EAAa5yB,IAAI,eAGrC,CAACzL,EAAQq+B,IAEZ/iB,qBAAU,WACFjd,GAAQA,EAAK6J,mBAAqBwpC,GAClCC,EAAqBtzC,EAAK6J,oBAE/B,CAAC7J,IAEJ,IAY6B0K,EAkIvB8tC,EAAW,SAAC9tC,GACd,OACI,iCACI,eAAC,GAAD,CAAY6P,IAAI,KAAKT,KAAK,MAAMM,MAAM,sBAAtC,SACKb,GAAE,sCAEP,qCACK7O,EAAOtE,sBAAsBjD,KAAI,SAAClB,GAC/B,OACI,eAAC,GAAD,CAAYsY,IAAI,IAAIT,KAAK,KAAzB,SACK7X,EAAKH,gBAgC5By+B,EAAe,uCAAG,WAAO71B,GAAP,iBAAAvL,EAAA,6DACdqhC,EAAW91B,EAAOtB,WAAa8uB,GAAiBD,GADlC,SAGGuI,EAAS,GAAD,OAAI91B,EAAOrB,UAAY,eAHlC,gBAMR/F,EAAO3B,EAAP2B,KAEJunB,EAAKvnB,GARO,2CAAH,sDAarB,OAAKtD,EAGD,uBAAK8T,UAAS,UAAKgE,EAAQzC,UAAb,YAAd,UACI,uBAAKvB,UAAWgE,EAAQkI,OAAxB,UACI,iCACI,eAAC,GAAD,CACIjL,GAAIujC,EACJr8B,MACgB,MAAZq8B,EACM/+B,GAAE,2CACF,uBAGd,sBAAKzF,UAAWgE,EAAQk8B,cAAxB,SACI,uBAAKlgC,UAAWgE,EAAQm8B,cAAxB,UACI,uBAAKngC,UAAWgE,EAAQymB,YAAxB,UACI,eAAC,GAAD,CACIrpB,MAAM,OACN2L,YAAU,EACVD,YAAY,MAHhB,SAKI,eAAC,GAAD,CAAY/G,SAAS,OAArB,SACKqI,GAAYliB,EAAKwJ,cAG1B,eAAC,GAAD,CACI2R,QAAS,SAACgC,GACNA,EAAE0kB,kBACF1kB,EAAEmY,iBACFiL,EAAgBvgC,IAEpB83B,OAAQ93B,EAAKoJ,WACb0Q,KAAM,GACNvD,MAAM,QACNqhB,OAAO,YAIf,eAAC,GAAD,CAAYrd,IAAI,KAAKT,KAAK,QAAQW,QAAQ,QAA1C,SACKza,EAAKwJ,mBAKtB,uBAAKsK,UAAWgE,EAAQkX,cAAxB,UACKhvB,EACG,sBAAK8T,UAAWgE,EAAQogC,WAAxB,SACI,eAAC,GAAD,CACIxtC,OAAQ1K,EACRssC,UAAW,SAAC5hC,GAAD,OACPmgB,EAAK6W,OAAOh3B,EAAOrB,gBAI/B,KACJ,eAAC,GAAD,CAAiBqB,OAAQ1K,UAGjC,uBAAK8T,UAAWgE,EAAQq8B,QAAxB,UACI,wBACA,gBAAC,GAAD,WACI,iCACI,eAAC,GAAD,CACInD,UAAW,eAACwE,GAAD,IACXvE,WAAY13B,GACR,qDAEJipB,MA7PK93B,EA6PqB1K,EA5PvC,CACH+zC,GACI1rC,EAAWqC,EAAOhB,UAClB6P,GAAE,qCAENw6B,GACIrpC,EAAOf,IAAP,UAAgBe,EAAOf,IAAvB,UAAkC,IAClC4P,GAAE,iCAsPc,0BAER,eAAC,GAAD,CACIy3B,UAAW,eAACza,GAAD,IACX0a,WAAY13B,GACR,8CAEJipB,KAhHM,SAAC93B,GAC3B,MAAO,CACHqpC,GACIrpC,EAAOjB,aACP8P,GAAE,sCAENw6B,GACIrpC,EAAON,eAAetI,KACtByX,GAAE,oCAENw6B,GACI1rC,EAAW,IAAID,KAAKsC,EAAON,eAAe9B,OAC1CiR,GAAE,yCAEN,CACI0C,MAAO,GACPiB,MAAO,GACPk0B,YAAY,EACZrnC,QAASyuC,EAAS9tC,KA8FA+qC,CAAsBz1C,IACxB,sBAUXqzC,EACG,eAAC,GAAD,CACII,QAAM,EACNJ,kBAAmBA,EACnBlwB,WAAYnjB,EAAKkJ,WACjB3H,QAASvB,EACTszC,qBAAsBA,EACtBE,aACI,qCACI,uBAAK1/B,UAAWgE,EAAQi3B,QAAxB,UACK/uC,EACG,eAAC,GAAD,CACI0K,OAAQ1K,IAEZ,KACHA,EACG,eAAC,GAAD,CAAiB0K,OAAQ1K,IACzB,YAKpB,KACJ,eAAC,GAAD,CACIqhB,UAAU,OACV2vB,UAAW,eAACW,GAAD,IACXV,WAAY13B,GAAE,uCACdipB,KAlNO,SAAC93B,GAA2B,IAAD,YAC9CP,EAUJ,OARIkpC,IACAlpC,EAAcO,EAAOT,gBAAgBwB,MACjC,SAACirC,GAAD,MAC2B,YAAvBA,EAAGtxC,iBACHsxC,EAAGrxC,kBAAkBf,SAAW+uC,EAAkB/uC,WAIvD,CACHyvC,IACI,UAAArpC,EAAOR,sBAAP,eAAuBhF,cAClB,UAAAwF,EAAOR,sBAAP,SAAuB/E,iBAClB,mBACA,KACV,gBAEJ6yC,GAAa,UACTttC,EAAOR,sBADE,aACT,EAAuBpF,MACvByU,GAAE,oCACFsW,EAAYruB,WACZ4zB,EACAC,GAEJ0e,IACe,QAAX,EAAA5pC,SAAA,eAAapF,aACG,QAAX,EAAAoF,SAAA,SAAahF,iBAAmB,mBAAqB,KAC1DoU,GAAE,2CAENy+B,GAAa,UACT7tC,SADS,aACT,EAAarF,MACbyU,GAAE,mCACFsW,EAAYruB,WACZ4zB,EACAC,IA8KcugB,CAAmB51C,IACrB,oBAnHN,eAAC,GAAD,KC7XhB4U,GAAYC,aAAgB,CAC9BokB,eAAgB,CACZtjB,QAAS,kBACT8C,SAAU,OACVtD,OAAQ,qBACR4jB,cAAe,QAEnB6B,iBAAkB,CACdxb,aAAc,QAElBxD,OAAQ,CACJhX,SAAU,WACVuQ,OAAQ,WACRG,gBAAiBnH,GAAOE,MACxByI,OAAO,aAAD,OAAe3I,GAAOM,aAC5B8G,aAAc,MACdL,MAAO,OACP2E,SAAU,WACVgC,YAAa,SACbnD,aAAc,SACd7B,OAAQ,UACRuD,MAAOjM,GAAOO,YAElB4H,OAAO,2BACAiY,IACA,CACC1X,OAAQ,YAGhB+gB,OAAQ,CACJ7hB,QAAS,OACTnR,SAAU,WACVgzB,OAAQ,IACR1iB,MAAO,OACPS,QAAS,OACTV,KAAM,IACNnF,WAAY3B,GAAOE,MACnB+G,OAAQ,EACR0lB,UAAU,aAAD,OAAe3sB,GAAOM,aAC/B,aAAc,CACVymB,SAAU,GAEd,0BAA2B,CACvB/d,YAAa,QAiBZshC,GAAoC,SAAC,GAAgB,IAAD,YAAb/tC,EAAa,EAAbA,OAChD,EACI+5B,eADI5B,EAAR,EAAQA,SAAUgC,EAAlB,EAAkBA,UAAWH,EAA7B,EAA6BA,MAAOC,EAApC,EAAoCA,aAAcC,EAAlD,EAAkDA,SAE5C9sB,EAAUlD,KAChB,EAAsBoZ,kBAAQpgB,IAAvBiiB,EAAP,oBACA,EAAoCjT,mBAAsB,IAA1D,mBAAO1T,EAAP,KAAmBgtC,EAAnB,KACA,EAAkCt5B,mBAAqB,IAAvD,mBAAOtW,EAAP,KAAkB2vC,EAAlB,KACA,EAAyCr5B,mBAAS,MAAlD,mBAAOmoB,EAAP,KAAqBC,EAArB,KACA,EAAwCpoB,mBAAuB,IAA/D,mBAAOg7B,EAAP,KAAqBzB,EAArB,KACA,EAA4Bv5B,oBAAS,GAArC,mBAAOH,EAAP,KAAeye,EAAf,KACA,EAAoCte,oBAAS,GAA7C,mBAAO6iB,EAAP,KAAmBC,EAAnB,KACA,EAA8B9iB,oBAAS,GAAvC,mBAAgBsoB,GAAhB,WACA,EAAgDtoB,oBAAkB,GAAlE,mBAAO86B,EAAP,KAAyBC,EAAzB,KACA,EAA4B/6B,mBAAiC,CACzDxV,aAAS/E,EACT8mC,wBAAoB9mC,EACpB20C,uBAAmB30C,EACnB8E,qBAAiB9E,IAJrB,oBAAOkL,GAAP,MAOA,IAPA,MAO+CqP,wBAC3Cva,IADJ,qBAAO+zC,GAAP,MAAwBC,GAAxB,MAGA,GAAkDz5B,wBAEhDva,GAFF,qBAAOgxC,GAAP,MAA0BC,GAA1B,MAIMqD,GAAY,uCAAG,4BAAAx3C,EAAA,sEACM8xB,KADN,OACXnxB,EADW,OAEjBo2C,EAAcp2C,EAASoJ,YAFN,2CAAH,qDAKVujC,GAAwB5H,EAAxB4H,YAAatG,GAAWtB,EAAXsB,OACrB,GAAkDvpB,oBAAS,GAA3D,qBAAOwY,GAAP,MAA0BC,GAA1B,MACMyhB,GAAY,WACd9R,EAAiB,MACjBsO,GAAqB,WACrB+C,GAAoB,WACpBF,EAAgB,IAChBzR,KAGJznB,qBAAU,WACNF,QAAQC,IAAImpB,GAAQ,YACrB,CAACA,KAEJlpB,qBAAU,WACN4lB,EAAS,WACT8T,OACD,IAEH15B,qBAAU,WAQNioB,IAJMH,KACAqR,IACkB,YAApBA,MACE/C,MAEP,CAAC9lC,GAAQ6oC,GAAiB/C,GAAmBtO,EAAcF,IAE9D,IAYM0S,GAAa,uCAAG,WAClBv3C,GADkB,eAAAb,EAAA,0DAGd0wB,EAAYruB,WAHE,uBAId6zB,IAAqB,GAJP,kBAKPl0B,QAAQq2C,QAAQ,OALT,UAQZ9K,EAAkC,CACpC5hC,aAAcJ,EAAOrB,SACrB0tC,cAAehT,KAAOgB,GAAcf,OAAO,uBAC3CgT,kBAAmBlO,OAAOuK,IAC1BlsC,gBAAiBivC,IAAmB1U,OAAOh3B,EAAOpE,UAAU,GAAGhD,KAG/DmpC,GAAYrlC,UACZslC,EAAatlC,QAAU0hC,OACnBpH,OAAO1hC,EAAKoH,SAASmX,QAAQ,IAAK,OAItCkuB,GAAYtD,qBACZuD,EAAavD,mBAAqBnpC,EAAKmpC,oBAGvCuO,IACIhL,EAAavD,mBACbuD,EAAavD,mBAAb,UAAqCuD,EAAavD,mBAAlD,oBAEAuD,EAAavD,mBAAqB,iBAIrCpE,EAjCa,yCAkCP5jC,QAAQq2C,QAAQ,OAlCT,wBAqCK/xB,GAAmBinB,GArCxB,wBAwCdxR,GAAU,GACVwE,GAAc,GACdoX,MA1Cc,kBA6CX31C,QAAQq2C,QAAQ,OA7CL,4CAAH,sDAgDnB,OACI,uCACI,0BACIv1C,KAAK,SACL6R,UAAWgE,EAAQxB,OACnB6E,QAAS,kBAAM+f,GAAU,IAH7B,UAKI,eAAC,GAAD,CAAQ/jB,YAAY,QAApB,SACI,eAAC,GAAD,UACI,eAAC4mB,GAAD,QAGR,eAAC,GAAD,CAAYxjB,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAtC,SACKlB,GAAE,2DAGX,gBAAC,GAAD,CACI0gB,UAAWxd,EACXyd,KAAM,WACFgB,GAAU,GACV4b,MAJR,UAOI,eAAC,GAAD,CAAwBpsC,OAAQA,IAChC,wBACIoJ,UAAWgE,EAAQmhB,eACnBoN,SAAU1B,EAAa4S,IACvBM,YAAU,EAHd,UAKI,eAAC,GAAD,CACIt9B,IAAI,KACJT,KAAK,KACLO,MAAM,SACNN,OAAO,OACPvB,MAAO,CAAEhC,OAAQ,eALrB,SAOK+C,GAAE,wDAEP,gBAAC,GAAD,WACI,eAAC,GAAD,CAAQpC,YAAY,QAApB,SACI,eAAC,GAAD,UACI,eAACy8B,GAAD,QAGR,eAAC,GAAD,CAAYr5B,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAtC,SACKwP,GAAO,0CAGhB,eAAC,GAAD,IACA,gBAAC,GAAD,WACI,eAAC,GAAD,CACI4Y,SAAUA,EACVhlB,UAAQ,EACR/b,KAAK,oBACL6a,WAAW,OAACwpB,SAAD,IAACA,IAAD,UAACA,GAAQ6Q,yBAAT,QAAC,EAA2B9T,SACvCzmB,OAAQA,EACRD,YAAY,gBACZsmB,MAAO,CACHjlB,SAAU,gCACVvB,SAAU,SAACa,IAvHzB,SAACrR,GACX,IAAMG,EAAQ/C,EAAWuC,MACrB,SAAC+qC,GAAD,OAAS1N,OAAO0N,EAAIlyC,UAAYwkC,OAAOh9B,MAE3CwnC,GAAqBxnC,GACrBuqC,GAAoB,WAEhBpqC,GAASA,EAAM3F,WACf2vC,EAAahqC,EAAM3F,WAgHKiwC,CAAMp5B,EAAE5B,OAAO2B,OACf0nB,EACI,oBACAznB,EAAE5B,OAAO2B,SAIrBb,QAASnT,EAAW/F,KAAI,SAAC2I,GAMrB,MALU,CACNmQ,MAAOnQ,EAAGhK,KACVob,MAAOwkB,OAAO51B,EAAGxH,cAM7B,eAAC,GAAD,CACIsV,KAAML,GAAE,2CACRrY,MAAK,OAAEilC,SAAF,IAAEA,IAAF,UAAEA,GAAQ6Q,yBAAV,aAAE,EAA2B9T,aAG1C,gBAAC,GAAD,WACI,eAAC,GAAD,CACIL,SAAUA,EACVhlB,UAAQ,EACR/b,KAAK,kBACL6a,WAAW,OAACwpB,SAAD,IAACA,IAAD,UAACA,GAAQh/B,uBAAT,QAAC,EAAyB+7B,SACrCzmB,OAAQA,EACRrB,UAAWi4B,GACX72B,YAAY,aACZsmB,MAAO,CACHjlB,SAAU,8BACVvB,SAAU,SAACa,GACPk5B,GAAoBl5B,EAAE5B,OAAO2B,OAC7B0nB,EAAS,kBAAmBznB,EAAE5B,OAAO2B,SAG7Cb,QAAS/V,EAAUnD,KAAI,SAACZ,GAMpB,MALU,CACN0Z,MAAO1Z,EAAIT,KACXob,MAAOwkB,OAAOn/B,EAAIe,UAM9B,eAAC,GAAD,CACIsW,KAAML,GAAE,2CACRrY,MAAK,OAAEilC,SAAF,IAAEA,IAAF,UAAEA,GAAQh/B,uBAAV,aAAE,EAAyB+7B,aAGxC,gBAAC,GAAD,WACI,eAAC,GAAD,CACIjnB,MAAK,UAAK1C,GAAE,sCACZzX,KAAK,UACL+b,UAAQ,EACRK,WAAS,EACT2kB,SAAUA,EACVtmB,kBAAcla,EACdsa,WAAW,OAACwpB,SAAD,IAACA,IAAD,UAACA,GAAQ/+B,eAAT,QAAC,EAAiB87B,SAC7BJ,MAAO,CACHjlB,SAAU,6BACV4oB,SAAU,SAACvpB,GAAD,OACL4rB,OAAOpH,OAAOxkB,GAAOqB,QAAQ,IAAK,OAC/B,IACAuqB,OACIpH,OAAOxkB,GAAOqB,QAAQ,IAAK,OAC1B,IACThF,GACI,+CAIhB,eAAC,GAAD,CACIK,KAAML,GAAE,2CACRrY,MAAK,OAAEilC,SAAF,IAAEA,IAAF,UAAEA,GAAQ/+B,eAAV,aAAE,EAAiB87B,aAIhC,gBAAC,GAAD,WACI,eAAC,GAAD,CAAQ/rB,YAAY,QAApB,SACI,eAAC,GAAD,UACI,eAACggC,GAAD,QAGR,eAAC,GAAD,CAAY58B,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAtC,SACKwP,GACG,mDAIZ,gBAAC,GAAD,WACI,eAAC,GAAD,CACIhO,MAAK,UAAK1C,GAAE,qCACZ2K,SAAU6gB,EACV9J,YAAa,SAAC9d,GACVg5B,EAAgB,IAChBnR,EAAiB7nB,IAErBqmB,QAASO,OAASuC,SAAS,EAAG,QAAQC,SACtChD,QAASQ,OAASnrB,IAAI,EAAG,QAAQ2tB,SACjC5pB,WAAW,OAACi7B,QAAD,IAACA,MAAcb,iBAE9B,eAAC,GAAD,CACIn9B,KAAK,GACL1Y,MACI02C,EAAab,cACP,sCACA10C,OAIlB,eAAC,GAAD,UACI,eAAC,GAAD,CACI4Z,MAAO1C,GAAE,6CACTspB,SAAUA,EACV/gC,KAAK,qBACL+b,UAAU,MAGlB,eAAC,GAAD,UACI,eAAC,GAAD,CACI5B,MAAO1C,GAAE,qCACT8f,UAAWqe,EACXp7B,SAAU,WACNq7B,GAAqBD,QAIjC,uBAAK5jC,UAAWgE,EAAQ8f,OAAxB,UACI,eAAC,GAAD,CACIzc,QAAS,WACL+f,GAAU,GACV4b,MAEJ70C,KAAK,YACL6X,KAAK,QANT,sBAUA,eAAC,GAAD,CACIuB,WAAW,SACXpZ,KAAK,UACL6X,KAAK,QACLqB,QAAS,WACA4pB,GACDoR,EAAgB,CACZY,eAAe,KAP/B,SAYKx9B,GACG,0DAKZ,+BAGPkmB,EACG,gBAAC,GAAD,CACInoB,QAAS,KACTC,aAAW,EACXC,WAAS,EACTC,KAAM,eAACqd,GAAD,CAAU5f,MAAM,SAJ1B,UAMI,eAAC,GAAD,CACIsD,MAAO,CAAE4G,aAAc,QACvBtF,KAAK,IACLO,MAAM,SAHV,SAKK4P,GACG,sDAGR,eAAC,GAAD,CACI1P,IAAI,IACJT,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QACvB/E,MAAM,SAJV,SAMK4P,GAAO,gDAEZ,eAAC,GAAD,CAAQnQ,KAAK,SAASqB,QAAS,kBAAMukB,GAAc,IAAnD,SACKzV,GAAO,mDAGhB,KACJ,eAAC,GAAD,CACI2K,KAAMQ,GACNP,QAAS,kBAAMQ,IAAqB,UCtb9CzgB,GAAYC,aAAgB,CAC9BQ,UAAU,cACN+E,MAAOjM,GAAOI,MACdoH,QAAS,UAFJ,6BAGkB+E,GAAYC,QAH9B,OAG6C,CAC9C,IAAK,CACDhF,QAAS,KAIrBq+B,cAAe,CACXj+B,QAAS,OACTmB,eAAgB,gBAChBjB,WAAY,SACZN,QAAS,UAEbs+B,cAAe,CACXl+B,QAAS,OACTuK,UAAW,MACXrK,WAAY,SACZiB,eAAgB,cAEpBg9B,KAAM,CACFn+B,QAAS,OACTuK,UAAW,MACXrK,WAAY,SACZiB,eAAgB,YAEpBi9B,QAAS,CACL/0B,aAAc,OAEd,SAAU,CACNzN,QAAS,MACT6E,OAAQ,cAGhB+nB,YAAa,CACT35B,SAAU,WACVsQ,MAAO,OACPiC,YAAa,UAIfuhC,GAAoC,WAAO,IAAD,IACtC5gC,EAAUlD,KACVjT,EAASy2C,eACf,EAAsBpqB,kBAAQpgB,IAAvBiiB,EAAP,oBACA,EAAkDjT,oBAAS,GAA3D,mBAAOwY,EAAP,KAA0BC,EAA1B,KAEA,EAAyBzY,wBAA6Bva,GAAtD,mBAAOrC,EAAP,KAAaq4C,EAAb,KACMxtB,EAAI,uCAAG,WAAOvnB,GAAP,mBAAAnE,EAAA,sEACcomB,IAAsBjiB,GADpC,cACHxD,EADG,OAEKmyB,EAAgBnyB,EAAtBE,KACFuB,EAAU0H,EAAO7F,MAAM6uB,GAC7BomB,EAAS92C,GAJA,kBAKFzB,GALE,2CAAH,sDAQVmd,qBAAU,WACN,IAAQ3Z,EAAO3B,EAAP2B,GAEJA,GACAunB,EAAKvnB,KAEV,CAAC3B,IAEJ,IAAM+xC,EAAkB,WACpB,IAAMpwC,EAAKtD,EAAK6J,iBAAiB1D,cAEjC,OADcnG,EAAKsG,UAAUmF,MAAK,SAAClJ,GAAD,OAAUA,EAAIe,MAAQA,KAC3CxB,MAAQ,KAGnB6xC,EAAe,WACjB,IAAMrwC,EAAKtD,EAAK6J,iBAAiB1D,cAEjC,OADcnG,EAAKsG,UAAUmF,MAAK,SAAClJ,GAAD,OAAUA,EAAIe,MAAQA,KAC3Ca,MAAMrC,MAAQ,KA8FzB02C,EAAW,SAAC9tC,GACd,OACI,iCACI,eAAC,GAAD,CAAY6P,IAAI,KAAKT,KAAK,MAAMM,MAAM,sBAAtC,SACKb,GAAE,sCAEP,qCACK7O,EAAOtE,sBAAsBjD,KAAI,SAAClB,GAC/B,OACI,eAAC,GAAD,CAAYsY,IAAI,IAAIT,KAAK,KAAzB,SACK7X,EAAKH,gBAiClC,OAAK9B,EAGD,uBAAK8T,UAAS,UAAKgE,EAAQzC,UAAb,YAAd,UACI,eAAC,GAAD,CAAUN,GAAG,uBAAuBkH,MAAM,uBAC1C,uBAAKnI,UAAWgE,EAAQk8B,cAAxB,UACI,uBAAKlgC,UAAWgE,EAAQm8B,cAAxB,UACI,sBAAKngC,UAAWgE,EAAQymB,YAAxB,SACI,eAAC,GAAD,CAAarpB,MAAM,OAAO2L,YAAU,EAACD,YAAY,MAAjD,SACI,eAAC,GAAD,CAAY/G,SAAS,OAArB,SACKqI,GAAYliB,EAAKwJ,gBAI9B,eAAC,GAAD,CAAY+Q,IAAI,KAAKT,KAAK,QAAQW,QAAQ,QAA1C,SACKza,EAAKwJ,cAGd,sBAAKsK,UAAWgE,EAAQo8B,KAAxB,SACKl0C,EAAO,eAAC,GAAD,CAAoB0K,OAAQ1K,IAAW,UAGvD,uBAAK8T,UAAWgE,EAAQq8B,QAAxB,UACI,wBACA,gBAAC,GAAD,WACI,iCACI,eAAC,GAAD,CACInD,UAAW,eAACwE,GAAD,IACXvE,WAAY13B,GACR,sDAEJipB,KArKI,SAAC93B,GACzB,MAAO,CACHqpC,GAAS1rC,EAAWqC,EAAOhB,UAAW,iBAEtCqqC,GACIrpC,EAAOhB,SAAP,W1ElHOivC,E0EmHSjuC,EAAOhB,SAAShB,e1ElHxB,IAAIN,MACQM,cACXiwC,G0E+GT,UAEM,KACNp/B,GAAE,+B1ErHI,IAACo/B,E0EkRWC,CAAoB54C,IACtB,0BAGR,eAAC,GAAD,CACIgxC,UAAW,eAACza,GAAD,IACX0a,WAAY13B,GACR,8CAEJipB,KAhEM,SAAC93B,GAC3B,IAAM83B,EAAO,CACTuR,GACIrpC,EAAOjB,aACP8P,GAAE,sCAENw6B,GACIrpC,EAAON,eAAetI,KACtByX,GAAE,qCAaV,OATI7O,EAAOtE,sBAAsBqB,QAC7B+6B,EAAKhe,KAAK,CACNvI,MAAO,GACPiB,MAAO,GACPk0B,YAAY,EACZrnC,QAASyuC,EAAS9tC,KAInB83B,EA2CmBiT,CAAsBz1C,IACxB,sBAIZ,eAAC,GAAD,CACIgxC,UAAW,eAAC4C,GAAD,IACX3C,WAAY13B,GAAE,qCACdipB,KAzKA,SAAC37B,GACjB,IAAIisC,EAAmB,GACvB,UAAIjsC,QAAJ,IAAIA,KAAWjD,QAAS,CACpB,aAMIiD,QANJ,IAMIA,OANJ,EAMIA,EAAWjD,QALXL,EADJ,EACIA,aACAC,EAFJ,EAEIA,aACAC,EAHJ,EAGIA,aACAC,EAJJ,EAIIA,aACAC,EALJ,EAKIA,WAEJmvC,EAAgB,0DAAsDvvC,EAAtD,YAAsEC,EAAtE,YAAsFC,EAAtF,eAAyGE,EAAzG,YAAuHD,GAG3I,IAAM8+B,EAAc,GAoCpB,MAlCyB,KAArBsQ,EACAtQ,EAAKhe,KAAK,CACNvI,MAAO,GACPiB,MAAO,GACPk0B,aAAc0B,EACd/oC,UAAW+oC,GACP,uBACIt6B,MAAO,CACHzC,QAAS,OACTC,cAAe,UAHvB,UAMI,eAAC,GAAD,CACIuE,IAAI,KACJT,KAAK,MACLM,MAAM,sBAHV,SAKKb,GAAE,qCAEP,eAAC,GAAD,CACIgB,IAAI,IACJT,KAAK,KACLtB,MAAO,CAAE4G,aAAc,QAH3B,SAKKvY,EAAU/E,OAEf,eAAC,GAAD,CAAWgxC,iBAAkBA,SAKzCtQ,EAAKhe,KAAKuvB,GAAQ,OAACltC,QAAD,IAACA,OAAD,EAACA,EAAW/E,KAAM,gBAGlC,GAAN,OACO0gC,EACA,CACCuR,GAASL,IAAmBn6B,GAAE,iCAC9Bw6B,GAAQ,OACJltC,QADI,IACJA,OADI,EACJA,EAAWR,aACXkT,GAAE,gCAENw6B,GAASJ,IAAgB,eAgHXkF,CAAY74C,EAAK6J,mBAH3B,UAIS7J,EAAK6J,wBAJd,iBAIS,EAAuBjG,eAJhC,aAIS,EAAgCN,IAGzC,eAAC,GAAD,CACI+d,UAAU,OACV2vB,UAAW,eAACW,GAAD,IACXV,WAAY13B,GAAE,uCACdipB,KAnHO,SAAC93B,GAA2B,IAAD,IAClD,MAAO,CACHqpC,IACI,UAAArpC,EAAOR,sBAAP,eAAuBhF,aAAc,IACrCqU,GAAE,qCAENy+B,GAAa,UACTttC,EAAOR,sBADE,aACT,EAAuBpF,MACvByU,GAAE,oCACFsW,EAAYruB,WACZ4zB,EACAC,IAwGcugB,CAAmB51C,IACrB,oBAzDN,eAAC,GAAD,KC9OhB4U,GAAYC,cAAgB,iBAAO,CACrCQ,UAAU,cACNC,gBAAiBnH,GAAOU,SACxBqG,MAAO,OACP2F,UAAW,QACXzF,OAAQ,EACRO,QAAS,QALJ,6BAMkB+E,GAAYC,QAN9B,OAM6C,CAC9C,IAAK,CACDhF,QAAS,cAIrBkgB,MAAM,cACF9f,QAAS,OACTmJ,oBAAqB,MACrB2P,IAAK,OACL1Z,OAAQ,QAJP,6BAKsBuF,GAAYC,QALlC,OAKiD,CAC9C,IAAK,CACDuE,oBAAqB,cACrB2P,IAAK,SAIjBiqB,YAAa,CACTpiC,eAAgB,YAChB0D,MAAO,UACPvD,OAAQ,UACR,6BAA8B,CAC1BlF,QAAS,QAGjBi/B,OAAQ,OAGNmI,GAAmB,WACrB,IAAMjhC,EAAUlD,KACV2b,EAASjC,KACf,EAAwB1R,wBAA0Bva,GAAlD,mBAAO22C,EAAP,KAAaC,EAAb,KAkBA,OAhBAh8B,qBAAU,WACN,IAAMi8B,EAAO,uCAAG,8BAAA/5C,EAAA,sEACWkO,IADX,OACNvN,EADM,QAGNmM,EAAQnM,EAASE,KAAKwL,uBAAuBC,MAC/C,SAAC9D,GAAD,MAA+C,aAAhCA,EAAKlC,4BAIpBwzC,EAAQhtC,GARA,2CAAH,qDAYbitC,MACD,IAGC,sBAAKplC,UAAWgE,EAAQzC,UAAW/R,GAAG,SAAtC,SACI,uBAAKwQ,UAAS,UAAKyc,EAAOlb,UAAZ,YAAyByC,EAAQ+d,OAA/C,UACI,uBAAK/hB,UAAWgE,EAAQ84B,OAAxB,UACI,eAAC,GAAD,CACIr2B,IAAI,IACJT,KAAK,KACLW,QAAQ,QACRL,MAAOjM,GAAOE,MACd0L,OAAO,OALX,mCASA,wBACA,eAAC,GAAD,CACIQ,IAAI,IACJT,KAAK,KACLW,QAAQ,QACRL,MAAOjM,GAAOE,MAJlB,gDAQA,wBACA,eAAC,GAAD,CACIkM,IAAI,IACJT,KAAK,KACLW,QAAQ,QACRL,MAAOjM,GAAOE,MAJlB,8BAQA,wBACA,eAAC,GAAD,CACIkM,IAAI,IACJT,KAAK,KACLW,QAAQ,QACRL,MAAOjM,GAAOE,MAJlB,SAMI,oBACI5N,KAAK,2BACLqT,UAAWgE,EAAQghC,YAFvB,oCAQR,uBAAKhlC,UAAWgE,EAAQ84B,OAAxB,UACI,eAAC,GAAD,CACIr2B,IAAI,IACJT,KAAK,KACLW,QAAQ,QACRL,MAAOjM,GAAOE,MACd0L,OAAO,OALX,gCASA,wBACA,eAAC,GAAD,CACIQ,IAAI,IACJT,KAAK,KACLW,QAAQ,QACRL,MAAOjM,GAAOE,MAJlB,uCAQA,wBACA,gBAAC,GAAD,CACIkM,IAAI,IACJT,KAAK,KACLW,QAAQ,QACRL,MAAOjM,GAAOE,MAJlB,iBAMS,IACJ2qC,GAAQA,EAAKtzC,QACRiD,EAAkBqwC,EAAKtzC,SACvB,MAEV,wBACCszC,GAAQA,EAAKzzC,MACV,eAAC,GAAD,CACIgV,IAAI,IACJT,KAAK,KACLW,QAAQ,QACRL,MAAOjM,GAAOE,MAJlB,SAMI,oBACI5N,KAAI,iBAAYu4C,EAAKzzC,OACrBuO,UAAWgE,EAAQghC,YAFvB,SAIME,GAAQA,EAAKzzC,OAAU,OAGjC,QAER,uBAAKuO,UAAWgE,EAAQ84B,OAAxB,UACI,eAAC,GAAD,CACIr2B,IAAI,IACJT,KAAK,KACLW,QAAQ,QACRL,MAAOjM,GAAOE,MACd0L,OAAO,OALX,mBASA,wBACA,eAAC,GAAD,CACIQ,IAAI,IACJT,KAAK,KACLW,QAAQ,QACRL,MAAOjM,GAAOE,MAJlB,SAMI,oBACI5N,KAAK,0DACL8a,OAAO,SACPzH,UAAWgE,EAAQghC,YACnBK,IAAI,aAJR,2BASJ,wBACA,eAAC,GAAD,CACI5+B,IAAI,IACJT,KAAK,KACLW,QAAQ,QACRL,MAAOjM,GAAOE,MAJlB,SAMI,oBACI5N,KAAK,gEACL8a,OAAO,SACPzH,UAAWgE,EAAQghC,YACnBK,IAAI,aAJR,gCASJ,wBACA,eAAC,GAAD,CACI5+B,IAAI,IACJT,KAAK,KACLW,QAAQ,QACRL,MAAOjM,GAAOE,MAJlB,SAMI,oBACI5N,KAAK,6BACLqT,UAAWgE,EAAQghC,YAFvB,uCCjMlBlkC,GAAYC,aAAgB,CAC9Bu4B,QAAS,CACLr3B,QAAS,OACTnR,SAAU,WACVsS,eAAgB,cAYlBkiC,GAA6C,SAAC,GAI7C,IAHHhhB,EAGE,EAHFA,KACAkU,EAEE,EAFFA,UACAsB,EACE,EADFA,cAEA,EAAgBhxB,mBAAS,IAAlBuJ,EAAP,oBACA,EAA4BvJ,oBAAS,GAArC,mBAAOH,EAAP,KAAeye,EAAf,KACA,EAAkCte,mBAAqB,QAAvD,mBAAOwyB,EAAP,KAAkBC,EAAlB,KACA,EAAkBrhB,kBAAQ/I,IAAnBC,EAAP,oBACA,EAA6BtI,wBAA6Bva,GAA1D,mBAAOqI,EAAP,KAAe2uC,EAAf,KAEMvhC,EAAUlD,KAEV0kC,EAAS,uCAAG,WAAOh2C,GAAP,eAAAnE,EAAA,sEACSmmB,GAAaoc,OAAOp+B,IAD7B,OACRxD,EADQ,OAGdu5C,EAAWpwC,EAAO7F,MAAMtD,EAASE,OAHnB,2CAAH,sDAsBf,OAhBAid,qBAAU,WAWFR,GAVe,WAEf,IAAMxQ,EAAQiZ,EAAQA,QAAQzZ,MAC1B,SAACyhB,GAAD,OAAOA,EAAE7jB,YAAc+uB,EAAKiT,eAG5Bp/B,IAAUvB,GACV4uC,EAAUrtC,EAAM5C,UAIpBkwC,KAEL,CAAC98B,EAAQ/R,EAAQwa,EAAQA,QAASkT,EAAKiT,cAGtC,uCACI,uBAAKv3B,UAAWgE,EAAQs1B,QAAxB,UACI,eAAC,GAAD,CACInrC,KAAK,SACLkZ,QAAS,kBAAMyyB,EAAcxV,IAC7B5f,MAAO,CAAEqJ,WAAY,QAHzB,SAKI,eAAC,GAAD,CAAa3M,MAAM,OAAOI,gBAAiBnH,GAAOY,OAAlD,SACI,eAAC4/B,GAAD,CAAYz5B,MAAM,OAAOkF,MAAOjM,GAAOc,aAG/C,eAAC,GAAD,CACIhN,KAAK,SACLuW,MAAO,CAAEqJ,WAAY,QACrB1G,QAAS,WACLk0B,EAAa,QACbnU,GAAU,IALlB,SAQI,eAAC,GAAD,CAAahmB,MAAM,OAAnB,SACI,eAAC05B,GAAD,CAAU15B,MAAM,OAAOkF,MAAOjM,GAAOU,eAEnC,OAGd,gBAAC,GAAD,CACIorB,UAAWxd,EACXyd,KAAM,WACFgB,GAAU,IAHlB,UAMI,eAAC,GAAD,CAAwBxwB,OAAQA,IAEjB,WAAd0kC,EACG,eAAC,GAAD,CACI1kC,OAAQA,EACRzI,KAAK,SACLuqC,SAAUrmB,EAAM1e,OAAS,EACzB8kC,cAAe,WACX8C,EAAa,WACQ,IAAjBlpB,EAAM1e,QACNyzB,GAAU,IAGlBoR,UAAW,WACP+C,EAAa,cAGrB,KAEW,SAAdD,GAAwBhX,GAAQ3b,EAC7B,eAAC,GAAD,CACI2b,KAAMA,EACNyU,SAAU,WACN3R,GAAU,IAEdoR,UAAW,WACPpR,GAAU,GACNoR,GACAA,OAIZ,YC3Fd13B,GAAYC,aAAgB,CAC9B,oBAAqB,CACjB/M,KAAM,CACF6J,QAAS,GAEboD,GAAI,CACApD,QAAS,IAGjB0D,UAAU,cACNM,QAAS,YADJ,6BAEkB+E,GAAYC,QAF9B,OAE6C,CAC9C,IAAK,CACDhF,QAAS,OAIrBgZ,WAAY,CACR5Y,QAAS,OACTJ,QAAS,UACTkF,UAAW,QAEfujB,cAAe,CACXroB,QAAS,OACTJ,QAAS,eACToZ,aAAa,aAAD,OAAe5gB,GAAOM,aAClC2Q,aAAc,QAElB0P,QAAS,CACLC,aAAa,aAAD,OAAe5gB,GAAOmB,SAElCuL,UAAW,QAEfmU,cAAe,CACXjZ,QAAS,OACTmf,SAAU,EACVrT,WAAY,OACZ3K,eAAgB,WAChBjB,WAAY,aACZgZ,WAAY,GAEhBoP,qBAAsB,CAClBtoB,QAAS,OACTJ,QAAS,aACTkF,UAAW,OACX3F,MAAO,OACPI,gBAAiBnH,GAAOQ,SACxByL,MAAOjM,GAAOI,MACd2I,eAAgB,gBAChBjB,WAAY,SACZ,SAAU,CACNU,WAAY,KAEhBf,UAAW,eAEfuQ,MAAO,CACHhQ,WAAY,QAEhBmoB,uBAAwB,CACpBvoB,QAAS,OACTb,MAAO,OACPgC,eAAgB,gBAEpBZ,OAAO,2BACAiY,IACA,CACC1X,OAAQ,YAGhBwmB,aAAc,CACVtnB,QAAS,QAEbunB,cAAe,CACXvnB,QAAS,OACTnR,SAAU,WACV2R,MAAO,OACPzB,IAAK,QAETvO,cAAe,CACXwP,QAAS,OACTJ,QAAS,cACTuB,eAAgB,SAChBjB,WAAY,UAEhBsoB,YAAa,CACT35B,SAAU,YAEd+qC,YAAa,CACT55B,QAAS,cACT6xB,gBAAiB,IACjBC,gBAAiB,WACjBpvB,SAAU,SACVqvB,aAAc,WACdwF,WAAY,YAEhBkM,gBAAiB,CACbzjC,QAAS,cAET8xB,gBAAiB,WACjBpvB,SAAU,SAEV60B,WAAY,YAEhBvF,cAAe,CACXjzB,IAAK,IACLyB,MAAO,IACPR,QAAS,OACTX,OAAQ,IACRxQ,SAAU,WACVqwB,SAAU,OACVre,WAAY,kBACZM,eAAgB,MAChBhC,MAAO,OACPC,OAAQ,OACRc,WAAY,SACZnG,WACI,uGAER0e,gBAAgB,eACTA,IAEPirB,SAAU,CACN3pC,WAAY3B,GAAOG,KACnBiH,aAAc,MACdL,MAAO,OACPC,OAAQ,OACRY,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBL,OAAQ,UACR,QAAS,CACLuD,MAAOjM,GAAOE,MACd6G,MAAO,QAEX,WAAY,CACRpF,WAAY3B,GAAOU,WAG3B2vB,YAAY,cACRtpB,MAAO,OACPiC,YAAa,QAFN,6BAGgBuD,GAAYC,QAH5B,OAG2C,CAC9C,IAAK,CACDzF,MAAO,OACPwnB,SAAU,QACVvlB,YAAa,YAgCvBuiC,GAGD,SAAC,GAA4B,IAA1B3vC,EAAyB,EAAzBA,QAAS4vC,EAAgB,EAAhBA,UACb,EAAgC/8B,oBAAS,GAAzC,mBAAOg9B,EAAP,KAAiBC,EAAjB,KACA,EAAsC19B,IAAMS,UAAS,GAArD,mBAAOk9B,EAAP,KAAoBC,EAApB,KACA,EAA+Bn9B,oBAAS,GAAxC,mBACA,GADA,UAC4BA,oBAAS,IAArC,mBAAOmxB,EAAP,KAAeC,EAAf,KAEM9yB,EAAMiB,IAAMie,OAA+B,MAC3C4f,EApCmB,SAAC9+B,EAAKslB,GAC/B,MAAoCrkB,IAAMS,cAASva,GAAnD,mBAAO23C,EAAP,KAAmBC,EAAnB,KAsBA,OApBA99B,IAAM+9B,iBAAgB,WAClB,IAAQ5f,EAAYpf,EAAZof,QAEFhjB,EAAU,WACZ,IAAMwiC,EAAcxf,EAAQiI,aAAejI,EAAQ6f,aAEnDF,EAAcH,GAEVtZ,GAAUA,EAASsZ,IAGvBxf,IACI,mBAAoB/5B,QACpB,IAAI65C,eAAe9iC,GAAS+iC,QAAQ/f,GAGxChjB,OAEL,CAACkpB,EAAUtlB,IAEP8+B,EAaYM,CAAcp/B,GAAK,SAACmO,GAE/B2wB,IAAeF,GACfC,EAAeC,MAIjBliC,EAAUlD,KA4BhB,OANAqI,qBAAU,WACN8N,YAAW,YArBI,SACfkjB,EACAG,GAEA,GAAK7tC,QAGA0tC,EAAW3T,QAAhB,CAIA,IAAMrgB,EAAa1Z,OACd8tC,iBAAiBJ,EAAW3T,SAC5BgU,iBAAiB,eAGtBvlB,KAAKwlB,MAAMN,EAAW3T,QAAQiI,aAAeiM,WAAWv0B,IACpDm0B,GAASJ,GAAU,IAKnBG,CAAWjzB,EAAK,KACjB,OACJ,CAACA,EAAKnR,IAEJA,GAAuB,KAAZA,EAGZ,uBACIyO,MAAO,CACHzC,QAAS,OACTmB,eAAgB,iBAHxB,UAOI,eAAC,GAAD,CAAY4C,KAAK,KAAjB,SACI,uBACIoB,IAAKA,EACLpH,UAAS,UACL8lC,EAAW9hC,EAAQ0hC,gBAAkB1hC,EAAQ63B,aAHrD,SAMK5lC,MAGRgkC,EACG,yBACI9rC,KAAK,SACLuW,MAAO,CAEH7C,QAAS,EAETT,MAAO,OACPwnB,SAAU,OACV5sB,WAAY,cACZgH,OAAQ,OACRJ,eAAgB,YAChBX,QAAS,OACTmB,eAAgB,SAChB2K,WAAY,QAEhB1G,QAAS,WACL0+B,GAAaD,GACbD,KAjBR,SAoBMC,EAAwB,aAAb,aAEjB,QA3C2B,MAgDrC16B,GAAsB,0BAEtBq7B,GAAe,WACjB,MAA0B39B,mBAAiB,IAA3C,mBAAOuJ,EAAP,KAAcgpB,EAAd,KACA,EAA8BvyB,oBAAS,GAAvC,mBAAOwT,EAAP,KAAgBC,EAAhB,KACMvY,EAAUlD,KAChB,EAA+BmZ,KAAvBM,EAAR,EAAQA,QAASF,EAAjB,EAAiBA,UACjB,EAAsBH,kBAAQpB,IAAvB/E,EAAP,oBACA,EAAwBmG,kBAAQpC,IAAvB4uB,EAAT,oBACA,EAAoC59B,oBAAS,GAA7C,mBAAO+wB,EAAP,KAAmBC,EAAnB,KACA,EAAgChxB,oBAAS,GAAzC,mBAAOg9B,EAAP,KAAiBC,EAAjB,KACA,EAAgCj9B,wBAA2Bva,GAA3D,mBAAOitC,EAAP,KAAiBC,EAAjB,KACA,EAA6BvhB,kBAAQ1C,IAArC,mBAAO3N,EAAP,KAAa88B,EAAb,KACA,EAAwC79B,mBAAiB,IAAzD,mBAAO89B,EAAP,KAAqBC,EAArB,KACA,EAA0B3sB,kBAAQxC,IAAzBoT,EAAT,oBAUM/T,EAAO,WAAY,4CACrB,8BAAA1rB,EAAA,sEAC2B4rC,KAD3B,OACUjrC,EADV,OAEU0vC,EAAcpD,GAAStsC,EAASE,KAAKyvC,OAC3CN,EAASK,GACTgL,EAAYhL,GACZnf,GAAW,GALf,4CADqB,uBAAC,WAAD,wBASrBua,IAGE8C,EAAa,uCAAG,WAAOtV,GAAP,SAAAj5B,EAAA,sEACKgsC,GAAW/S,EAAK90B,IADrB,gBAGdsqC,GAAc,GACd/iB,KAJc,2CAAH,sDAQb+vB,EAAkB,uCAAG,WAAOxiB,GAAP,qBAAAj5B,EAAA,sEACA+rC,GAAqB9S,EAAK90B,IAAK80B,EAAKmT,UADpC,cACjBzrC,EADiB,gBAGLirC,KAHK,OAGjB4F,EAHiB,OAIjBnB,EAAcpD,GAASuE,EAAI3wC,KAAKyvC,OAChCtoB,EAAiB,IAEAxJ,EAAO+8B,EAAe7yB,GAE9BngB,SAAQ,SAACC,GACpB,IAAMsE,EAAQujC,EAAY/jC,MAAK,SAACqc,GAAD,OAAOA,EAAExkB,KAAOqE,EAAKrE,MAEhD2I,GACAkb,EAAO3C,KAAKvY,MAGpBwuC,GAAa,GACbE,EAAgBxzB,GAEZrnB,GACA+qB,IApBmB,4CAAH,sDAyCxB,OAPA5N,qBAAU,WACDkR,GACDE,EAAQ,UAEZxD,MACD,IAECuF,EAAgB,eAAC,GAAD,IAGhB,uBAAKtc,UAAS,UAAKgE,EAAQzC,UAAb,YAAd,UACI,sBAAKvB,UAAS,UAAKgE,EAAQsmB,cAAb,iBAAd,SACI,sBAAKtqB,UAAWgE,EAAQkX,cAAxB,SACI,eAAC,GAAD,QAGR,sBAAKlb,UAAWgE,EAAQ6W,WAAxB,SACI,sBAAK7a,UAAU,eAAf,SACI,eAAC,GAAD,CAAYyG,IAAI,KAAKT,KAAK,QAA1B,SACKmQ,GAAO,8BAIpB,sBAAKnW,UAAWgE,EAAQ6W,WAAxB,SACI,eAAC,GAAD,CAAYpU,IAAI,IAAIT,KAAK,IAAIM,MAAOjM,GAAOqB,QAA3C,SACKya,GAAO,4CAGhB,iCACI,gBAAC,GAAD,CAAYnQ,KAAK,KAAjB,6BACcqM,EAAM1e,OADpB,iBAGA,sBAAKqM,UAAWgE,EAAQkX,cAAxB,SACI,sBAAKlb,UAAWgE,EAAQ0mB,YAAxB,SACI,eAAC,GAAD,CACI3B,WAAS,EACT5gB,MAAO1C,GAAE,2BACTsE,UAAU,EACV4e,WAAW,UACXG,kBAAmBrjB,GAAE,2BACrBujB,SAtGP,SAACzQ,GACduS,EAAcvS,IAsGM/P,SAnGN,SAAC+P,GACfuS,EAAcvS,aAwGV,uBAAKvY,UAAS,UAAKgE,EAAQqO,OAA3B,UACKA,GAASA,EAAM1e,OACZ,eAAC,GAAD,UACI,gBAAC,GAAD,CAAYyX,oBAAqBA,GAAjC,UACI,eAAC,GAAD,UACI,eAAC,GAAD,CACI/D,QAAS,kBAAMkT,EAAQ,WACvBrsB,KAAMmsB,EACNrsB,KAAK,SAHT,SAKKyX,GAAE,2CAGX,eAAC,GAAD,UACI,eAAC,GAAD,CACI4B,QAAS,kBAAMkT,EAAQ,SACvBrsB,KAAMmsB,EACNrsB,KAAK,OAHT,SAKKyX,GAAE,yCAGX,eAAC,GAAD,UACI,eAAC,GAAD,CACI4B,QAAS,kBAAMkT,EAAQ,SACvBrsB,KAAMmsB,EACNrsB,KAAK,OAHT,SAKKyX,GAAE,yCAGX,eAAC,GAAD,UACI,sBAAKzF,UAAWgE,EAAQ0W,gBAAxB,SACKjV,GACG,+CAIZ,eAAC,GAAD,UACI,sBAAKzF,UAAWgE,EAAQ0W,gBAAxB,SACKjV,GAAE,yCAGX,eAAC,GAAD,SAGR,MACFoE,EAAO+8B,EAAe7yB,GAAa1kB,KAAI,SAACi1B,GAAD,OACrC,iCACI,gBAAC,GAAD,CACIlZ,oBAAoB,gBADxB,UAII,eAAC,GAAD,UACI,eAAC,GAAD,CACIjd,KAAK,SACLkZ,QAAS,kBAAMy/B,EAAmBxiB,IAFtC,SAII,sBACItkB,UACIgE,EAAQ2hC,UACNrhB,EAAKvR,OAAqB,GAAZ,WAHxB,SAMI,eAACg0B,GAAD,CAAUzgC,MAAOjM,GAAOU,iBAIpC,gBAAC,GAAD,WACI,eAAC,GAAD,CACI0L,IAAI,KACJT,KAAK,IACLW,QAAQ,QACRL,MAAM,qBAJV,SAMI,uBAAMtG,UAAWgE,EAAQ63B,YAAzB,SACKvX,EAAK7nB,UAGd,eAAC,GAAD,CAAYuJ,KAAK,KAAKW,QAAQ,QAA9B,SACI,uBAAM3G,UAAWgE,EAAQ63B,YAAzB,SACKvX,EAAKruB,YAGd,eAAC,GAAD,CACI+P,KAAK,KACLW,QAAQ,QACRL,MAAM,qBAHV,SAKKge,EAAKt2B,OAEV,eAAC,GAAD,CACIgY,KAAK,KACLW,QAAQ,QACRL,MAAM,qBAHV,SAKK/R,EAAW+vB,EAAK/R,cAGzB,eAAC,GAAD,UACI,eAAC,GAAD,CACI+R,KAAMA,EACNkU,UAAW,kBAAMzhB,KACjB+iB,cAAe,SAAC9lB,GACZynB,EAAYznB,GACZ8lB,GAAc,QAIzBD,GACD2B,GACAA,EAAShsC,KAAO80B,EAAK90B,GACjB,uBACIwQ,UAAS,UAAKgE,EAAQiwB,cAAb,YADb,UAGI,eAAC,GAAD,CACI5sB,QAAS,WACLyyB,GAAc,IAElB9zB,KAAK,SACL7X,KAAK,YALT,SAOKsX,GAAE,sCAEP,eAAC,GAAD,CACI4B,QAAS,WACLuyB,EAActV,IAElBn2B,KAAK,SACL6X,KAAK,SALT,SAOKP,GAAE,qCAGX,QAER,gBAAC,GAAD,CAEI2F,oBAAqBA,GAFzB,UAII,eAAC,GAAD,CAAUzC,OAAQ6yB,IAAalX,GAAQwhB,EAAvC,SACI,eAAC,GAAD,CACI33C,KAAK,SACLkZ,QAAS,kBAAMy/B,EAAmBxiB,IAFtC,SAII,sBACItkB,UACIgE,EAAQ2hC,UACNrhB,EAAKvR,OAAqB,GAAZ,WAHxB,SAMI,eAACg0B,GAAD,CAAUzgC,MAAOjM,GAAOU,iBAIpC,eAAC,GAAD,CACIsM,QAAS,WACDm0B,IAAalX,GACbmX,OAAYltC,GACZw3C,GAAY,KAEZtK,EAAYnX,GACZyhB,GAAY,KAGpBp9B,OAAQ6yB,IAAalX,GAAQwhB,EAVjC,SAYI,eAAC,GAAD,CAAY9/B,KAAK,KAAjB,SACKzR,EAAW+vB,EAAK/R,aAGzB,eAAC,GAAD,CAUI5J,OAAQ6yB,IAAalX,GAAQwhB,EAVjC,SAYI,eAAC,GAAD,CAAY9/B,KAAK,KAAjB,SAAuBse,EAAKt2B,SAEhC,eAAC,GAAD,CAUI2a,OAAQ6yB,IAAalX,GAAQwhB,EAVjC,SAYI,eAAC,GAAD,CAAY9/B,KAAK,KAAjB,SAUKse,EAAK7nB,UAGd,eAAC,GAAD,CAUIiQ,gBAAc,EAVlB,SAuBI,eAAC,GAAD,CACIzW,QAASquB,EAAKruB,QACd4vC,UAAW,YApSzB,SAACvhB,GACXkX,IAAalX,GACbmX,OAAYltC,GACZw3C,GAAY,KAEZtK,EAAYnX,GACZyhB,GAAY,IA+RgBF,CAAUvhB,QAmBtB,eAAC,GAAD,CAAU3b,OAAQ6yB,IAAalX,GAAQwhB,EAAvC,SACI,eAAC,GAAD,CACIxhB,KAAMA,EACNkU,UAAW,kBAAMzhB,KACjB+iB,cAAe,SAAC9lB,GACZynB,EAAYznB,GACZ8lB,GAAc,QAIzBD,GACD2B,GACAA,EAAShsC,KAAO80B,EAAK90B,GACjB,uBACIwQ,UAAS,UAAKgE,EAAQiwB,cAAb,YADb,UAGI,eAAC,GAAD,CACI5sB,QAAS,WACLyyB,GAAc,IAElB9zB,KAAK,SACL7X,KAAK,YALT,SAOKsX,GAAE,sCAEP,eAAC,GAAD,CACI4B,QAAS,WACLuyB,EAActV,IAElBn2B,KAAK,SACL6X,KAAK,SALT,SAOKP,GAAE,qCAGX,OAzJC6e,EAAK90B,MAzFR80B,EAAK90B,UAuPtB6iB,EAAM1e,OACH,sBAAKqM,UAAWgE,EAAQvR,cAAxB,SACI,gBAAC,GAAD,CAAYuT,KAAK,KAAjB,6BACcqM,EAAM1e,OADpB,mBAIJ,SC3tBVqzC,GAA8B,SAEhC5/B,GACE,IAAD,EACD,EAA4B0B,mBAAS,GAArC,mBAAOm+B,EAAP,KAAeC,EAAf,KAEA/9B,qBAAU,WAEN,IAAMg+B,EAAW,kBAAMD,EAAUz6C,OAAO26C,cAIxC,OAFA36C,OAAOye,oBAAoB,SAAUi8B,GACrC16C,OAAOwe,iBAAiB,SAAUk8B,EAAU,CAAEE,SAAS,IAChD,kBAAM56C,OAAOye,oBAAoB,SAAUi8B,MACnD,IAEH,IAIMG,EAAcljC,SAASyiB,eAAe,gBACtC0gB,EAAiB96C,OAAOke,YACxB68B,EAAiB,OAAGF,QAAH,IAAGA,OAAH,EAAGA,EAAaG,UACjCC,EAAiB,OAAGJ,QAAH,IAAGA,OAAH,EAAGA,EAAajB,aACjCsB,EAAY,UACbH,GAAqBP,EAASO,SADjB,SAEZI,EACFX,EAASM,EAAiBC,EAAoBE,EAElD,OACI,eAAC,GAAD,CACIrgC,QAfY,WAChB5a,OAAOk2B,SAAS,CAAE3hB,IAAK,EAAGG,KAAM,EAAG0hB,SAAU,YAezCne,MAAO,CACH5T,SAAU82C,EAAkB,WAAa,QACzC3lC,QAAS,QACTjB,IAAK4mC,EACCJ,EAAoBE,EAAoB,IACxC,qBACNjlC,MAAO,OACPjC,UAAWmnC,EACL,gCACA,iBACN7kC,WAAY,6BAZpB,SAeK2C,GAAE,gCCXT3E,GAAYC,aAAgB,CAC9BQ,UAAU,cACN+E,MAAOjM,GAAOI,MACdoH,QAAS,YAFJ,6BAGkB+E,GAAYC,QAH9B,OAG6C,CAC9C,IAAK,CACDuE,oBAAqB,cACrBvJ,QAAS,cAIrBq+B,cAAe,CACXj+B,QAAS,OACTmB,eAAgB,gBAChBjB,WAAY,SACZN,QAAS,UAEbs+B,cAAe,CACXl+B,QAAS,OACTuK,UAAW,MACXrK,WAAY,SACZiB,eAAgB,cAEpBg9B,KAAK,yBACDn+B,QAAS,OACTE,WAAY,SACZiB,eAAgB,YACbqX,IACA,CACC1X,OAAQ,UACRL,OAAQ,MAGhB29B,QAAS,CACL/0B,aAAc,OAEd,SAAU,CACNzN,QAAS,MACT6E,OAAQ,cAGhB+nB,YAAa,CACT35B,SAAU,WACVsQ,MAAO,OACPiC,YAAa,QAEjB43B,QAAS,CACL75B,MAAO,OACPa,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBlB,cAAe,SACf,WAAY,CACRQ,OAAQ,SACRtB,MAAO,SAGfk/B,gBAAiB,CACbt/B,IAAK,IACLI,MAAO,OACPC,OAAQ,OACRvQ,SAAU,WACVmR,QAAS,OACTs+B,aAAc,SACdn9B,eAAgB,OAEpBo9B,eAAgB,CACZv+B,QAAS,OACTX,OAAQ,IACRxQ,SAAU,WACVqwB,SAAU,OACVre,WAAY,kBACZM,eAAgB,MAChBhC,MAAO,OACPC,OAAQ,OACRc,WAAY,SACZN,QAAS,YAEbyoB,cAAe,CACXroB,QAAS,OACTJ,QAAS,eACToZ,aAAa,aAAD,OAAe5gB,GAAOM,aAClC2Q,aAAc,QAElB4P,cAAe,CACXnN,WAAY,OACZoN,WAAY,GAEhB4hB,eAAgB,CACZ96B,QAAS,OACTE,WAAY,SACZiB,eAAgB,aAChBP,WAAY,IACZrB,gBAAiBnH,GAAOE,MACxBkH,aAAc,QACd6J,aAAc,OACdzJ,QAAS,QAEbgmC,oBAAqB,CACjB5lC,QAAS,OACTqE,MAAOjM,GAAOE,MACd4H,WAAY,SACZiB,eAAgB,aAChBkI,aAAc,QAElBw8B,aAAc,CACVxhC,MAAOjM,GAAOE,MACd6I,eAAgB,aAChB5B,gBAAiBnH,GAAOC,MACxBmH,aAAc,QACdI,QAAS,UAgBXkmC,GAAyB,WAC3B,IAAM/jC,EAAUlD,KAChB,EAAuBoZ,kBAAQjgB,IAA/B,mBAAO/N,EAAP,KAAa0+B,EAAb,KACA,EAAsB1Q,kBAAQpgB,IAAvBiiB,EAAP,oBACA,EAAoDjT,oBAAS,GAA7D,mBAAO63B,EAAP,KAA2BC,EAA3B,KACA,EAAsD93B,wBAEpDva,GAFF,mBAAOsyC,EAAP,KAA4BC,EAA5B,KAGA,EACIh4B,mBAAS,GADb,mBAAOi4B,EAAP,KAAmCC,EAAnC,KAEA,EAAkDl4B,oBAAS,GAA3D,mBAAOwY,EAAP,KAA0BC,EAA1B,KAGM0f,EAAwB,SAC1BtoC,EACAD,GAEA,OAAQC,EAA4BD,EAAiC,KAInEwoC,EAAkC,WACpC,OAAIL,EAAsB30C,EAAKyM,0BACpB,IACHzM,EAAKyM,0BAA4BkoC,EAAuB,KAc9DmH,EAAe,SAAC,GAAqD,IAAnDC,EAAkD,EAAlDA,SAAUC,EAAwC,EAAxCA,QAASvkC,EAA+B,EAA/BA,KACvC,OACI,qBACIhX,KAAMu7C,EACNzgC,OAAO,SACPzH,UAAWgE,EAAQ+4B,eACnBsI,IAAI,aAJR,UAMI,eAAC,GAAD,UACI,eAAC,GAAD,CAAY93B,UAAU,OAAtB,SACK5J,GAAQ,eAAC+9B,GAAD,QAIjB,eAAC,GAAD,CAAYj7B,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAQV,OAAO,OAArD,SACKgiC,QAKXE,EAAe,SAAC,GAAqD,IAAnDC,EAAkD,EAAlDA,WAAYzkC,EAAsC,EAAtCA,KAAM+d,EAAgC,EAAhCA,MACtC,EAAwB5Y,oBAAS,GAAjC,mBAAOgY,EAAP,KAAaunB,EAAb,KACMjhC,EAAMiB,IAAMie,OAA8B,MAahD,OACI,uBACI5hB,MAAO,CACHtD,MAAO,OACPkK,aAAc,OACd9J,gBAAiBnH,GAAOE,MACxBkH,aAAc,SALtB,UAQI,0BACItT,KAAK,SACL6R,UAAWgE,EAAQ+4B,eACnBr4B,MAAO,CACH1B,OAAQ,OACR5B,MAAO,OACPkK,aAAc,IACdvI,OAAQ,WAEZsE,QA7BW,WACnB,GAAID,EAAIof,QACJ,GAAI1F,EACA1Z,EAAIof,QAAQ9hB,MAAMrD,OAAS,QACxB,CACH,IAAMA,EAAS+F,EAAIof,QAAQiI,aAC3BrnB,EAAIof,QAAQ9hB,MAAMrD,OAAlB,UAA8BA,GAGtCgnC,GAASvnB,IAWL,UAWI,eAAC,GAAD,UACI,eAAC,GAAD,CAAYvT,UAAU,OAAtB,SACK5J,GAAQ,eAAC+9B,GAAD,QAGjB,eAAC,GAAD,CAAYj7B,IAAI,KAAKT,KAAK,IAAIW,QAAQ,QAAQV,OAAO,OAArD,SACKmiC,IAEL,sBACI1jC,MAAO,CACHtD,MAAO,MACPC,OAAQ,OACRb,UAAWsgB,EACL,iBACA,gBACNwnB,gBAAiB,SACjBv6B,WAAY,OACZ1K,YAAa,SACbP,WAAY,mBAVpB,SAaI,eAACi9B,GAAD,SAGR,uBACI34B,IAAKA,EACL1C,MAAO,CACHC,SAAU,SACVtD,OAAQyf,EAAO1Z,EAAIof,QAAQiI,aAAe,IAC1C3rB,WAAY,qBACZtB,gBAAiBnH,GAAOE,MACxBkH,aAAc,SAPtB,UAUI,qBACIiD,MAAO,CACH/J,YAAaN,GAAOiB,QACpBitC,aAAc,UAIrB7mB,EAAMryB,KAAI,SAACyM,GACR,OACI,oBACInP,KAAMmP,EAAKosC,QACXzgC,OAAO,SACP/C,MAAO,CACH7C,QAAS,OACTyJ,aAAc,OACdrJ,QAAS,SAEbojC,IAAI,aARR,SAUI,eAAC,GAAD,CACI5+B,IAAI,KACJT,KAAK,IACLW,QAAQ,QACRV,OAAO,OAJX,SAMKnK,EAAKmsC,uBAkCtC,OAzBA9+B,qBAAU,WACN63B,EAC2C,OAAvC90C,EAAKwM,8BACCuoC,EACI/0C,EAAKyM,0BACLzM,EAAKwM,+BAET,GAEVkoC,GAAsB,GAEtBE,OAAuBvyC,KACxB,CAACrC,IAEJid,qBAAU,WACFw3B,GACAK,EAA8BE,OAEnC,CACCD,EACAC,EACAH,EACAJ,IAGCz0C,EAGD,uBAAK8T,UAAS,UAAKgE,EAAQzC,UAAb,YAAd,UACI,sBAAKvB,UAAS,UAAKgE,EAAQsmB,cAAb,iBAAd,SACI,sBAAKtqB,UAAWgE,EAAQkX,cAAxB,SACI,eAAC,GAAD,CAAamP,0BAA0B,QAG/C,sBAAKrqB,UAAWgE,EAAQk8B,cAAxB,SACI,sBAAKlgC,UAAWgE,EAAQm8B,cAAxB,SACI,eAAC,GAAD,CAAY15B,IAAI,KAAKT,KAAK,QAAQW,QAAQ,QAA1C,SACKlB,GAAE,4BAIf,sBAAKzF,UAAWgE,EAAQm8B,cAAxB,SACI,eAAC,GAAD,CAAY15B,IAAI,IAAIT,KAAK,IAAIM,MAAOjM,GAAOqB,QAA3C,SACK+J,GAAE,6BAGX,uBAAKzF,UAAWgE,EAAQq8B,QAAxB,UACI,wBACA,uBACI37B,MAAO,CACHzC,QAAS,OACTmJ,oBAAqB,UACrBmyB,QAAS,OACTn8B,MAAO,QALf,UAQI,uBACIsD,MAAO,CACH/C,SAAU,QAFlB,UAMI,eAACqmC,EAAD,CACIC,SAAUxiC,GAAE,4BACZyiC,QAASziC,GAAE,2BACX9B,KAAM,eAAC6kC,GAAD,MAEV,eAACL,EAAD,CACIC,WAAY3iC,GAAE,8BACdic,MAAO,CACH,CACIumB,SAAUxiC,GACN,wCAEJyiC,QAASziC,GACL,wCAGR,CACIwiC,SAAUxiC,GACN,wCAEJyiC,QAASziC,GACL,yCAIZ9B,KAAM,eAAC8kC,GAAD,MAEV,eAACT,EAAD,CACIC,SAAUxiC,GAAE,4BACZyiC,QAASziC,GAAE,2BACX9B,KAAM,eAAC+kC,GAAD,MAEV,eAACP,EAAD,CACIC,WAAY3iC,GAAE,8BACd9B,KAAM,eAACglC,GAAD,IACNjnB,MAAO,CACH,CACIumB,SAAUxiC,GACN,wCAEJyiC,QAASziC,GACL,wCAGR,CACIwiC,SAAUxiC,GACN,wCAEJyiC,QAASziC,GACL,wCAGR,CACIwiC,SAAUxiC,GACN,wCAEJyiC,QAASziC,GACL,wCAGR,CACIwiC,SAAUxiC,GACN,wCAEJyiC,QAASziC,GACL,2CAKhB,eAACuiC,EAAD,CACIC,SAAUxiC,GAAE,4BACZyiC,QAASziC,GAAE,2BACX9B,KAAM,eAACqf,GAAD,SAGd,eAAC,GAAD,CACIka,UAAW,eAAC0L,GAAD,IACXzL,WAAY13B,GACR,2CAEJipB,KAAM,CACF,CACIvmB,MAAO,GACPiB,MAAO,GACPk0B,YAAY,EACZrnC,QACI,qCACI,uBAAKyO,MAAO,CAAE/C,SAAU,QAAxB,UACI,eAAC,GAAD,CACIqE,KAAK,IACLtB,MAAO,CAAE4G,aAAc,QAF3B,SAIK7F,GACG,0CAGR,qCAEQ,uBACIf,MAAO,CACH5T,SACI,WACJ4R,OAAQ,cACRT,QAAS,SALjB,UAQM0+B,EAoDE,KAnDA,uCACI,eAAC72B,GAAD,CACI3B,MAAO1C,GACH,4CAEJ2D,MACIld,EAAKwM,8BAETqR,UACI,IAGR,sBACI/J,UACIgE,EAAQs8B,gBAFhB,SAKI,eAAC,GAAD,CACInyC,KAAK,SACLuW,MAAO,CACHrB,YACI,OACJhC,OAAQ,OACRG,gBACI,eAER6F,QAAS,WAED0U,EAAYruB,WAEZ6zB,GACI,GAIRqf,GACI,IAnBZ,SAuBI,eAAC,GAAD,CAAax/B,MAAM,OAAnB,SACI,eAAC8D,GAAD,CACI9D,MAAM,OACNkF,MACIjM,GAAOU,oBASlC4lC,EACG,iCACI,+BACI,eAAC72B,GAAD,CACI3B,MAAM,cACN4gB,WAAS,EACTtgB,aACIo4B,EAEJz3B,MACIy3B,EAEJ92B,UACI,EAEJvB,SAAU,SACNa,GAEA,IAAMkM,EACFlM,EACK5B,OACA2B,MACT03B,GACKvrB,GAGLyrB,EACIE,UAKhB,uBACIlhC,UACIgE,EAAQw8B,eAFhB,UAKI,eAAC,GAAD,CACIn5B,QAAS,WAELu5B,GACI,GAEJE,OACIvyC,IAGRyX,KAAK,SACL7X,KAAK,YACLuW,MAAO,CACH0c,SAAU,GAblB,sBAkBA,eAAC,GAAD,CACI9Z,WAEQu5B,GACA30C,EAAKyM,6BAERkoC,GACDA,GACI,IAERx5B,QAAS,WACL,GACI0U,EAAYruB,WAEZ6zB,GACI,QAIR,GACIsf,EACF,CAEE,IAAMjI,EACF,GACJA,EAAa7/B,iCACT8nC,EAEArnC,EACIo/B,IAKJ3hB,YACI,kBACI2T,EACI,CACIz8B,KAAM,cAGlB,OAKhBuW,MAAO,CACH0c,SAAU,GAEdpb,KAAK,SAjDT,uBAuDR,UAKhB,eAAC,GAAD,CACIA,KAAM,IACN1I,YAAa,GACbygC,WACIgD,GACA,IAGR,eAAC,GAAD,CACI/6B,KAAK,IACLO,MAAM,SACN7B,MAAO,CAAEhC,OAAQ,UAHrB,SAKKyT,GACG,uCACA,CACI8rB,eAAgBrU,OACZ3Y,KAAKwlB,MACDsG,IACC,GAET/nC,+BACI40B,OACI1hC,EAAKyM,2BAEbI,iCACI60B,OACI+S,EACME,GACI,EACJ30C,EAAKwM,4CAWvD,uBACIgM,MAAO,CAAEmkC,WAAY,GACrB7oC,UAAWgE,EAAQ8jC,aAFvB,UAII,uBAAK9nC,UAAWgE,EAAQ6jC,oBAAxB,UACI,eAAC,GAAD,CAAQz6B,OAAO,OAAf,SACI,eAAC,GAAD,CAAY5L,gBAAiBnH,GAAOE,MAApC,SACI,eAACuuC,GAAD,QAIR,eAAC,GAAD,CACIriC,IAAI,KACJT,KAAK,IACLW,QAAQ,QACRL,MAAOjM,GAAOE,MAJlB,SAMKkL,GAAE,gCAGX,eAAC,GAAD,CACIgB,IAAI,IACJT,KAAK,KACLtB,MAAO,CACHwB,UAAW,SACXszB,WAAY,YAEhB7yB,QAAQ,QACRL,MAAOjM,GAAOE,MARlB,SAUKkL,GAAE,qCAKnB,eAAC,GAAD,CACIqb,KAAMQ,EACNP,QAAS,kBAAMQ,GAAqB,SAvY9B,MCpUhBwnB,GAAkB,SAAC,GAAkB,IAAhBllC,EAAe,EAAfA,SACjBnX,EAAWs8C,eAKjB,OAJA7/B,qBAAU,WACN1c,OAAOk2B,SAAS,EAAG,KACpB,CAACj2B,IAEG,qCAAGmX,KAGR/C,GAAYC,aAAgB,CAC9BkC,WAAY,CACR7B,MAAO,OACPC,OAAQ,OACRI,aAAc,MACduB,OAAO,aAAD,OAAe3I,GAAOE,OAC5BiH,gBAAiBnH,GAAOsB,QACxBsG,QAAS,OACTE,WAAY,SACZiB,eAAgB,SAChBC,YAAa,QAEjBpN,QAAS,CACLoM,WAAY,OACZJ,QAAS,OACTE,WAAY,SACZiB,eAAgB,UAEpBoY,eAAgB,CACZC,UAAW,WAEfwtB,WAAW,6CACgBriC,GAAYC,QAD7B,OAC4C,CAC9C5E,QAAS,WAwFNinC,GAnFmB,WAC9B,MAAgBhvB,kBAAQtS,IAAjBrP,EAAP,oBACMkkB,EAASjC,KACTxW,EAAUlD,KAEhB,OAAsC,IAAlCvI,EAAMgY,QAAQ,eAEV,sBAAKvQ,UAAS,UAAKyc,EAAOlb,UAAZ,iBAAd,SACI,sBAAKvB,UAAS,UAAKgE,EAAQ/N,QAAb,YAAd,SACI,sBAAK+J,UAAWgE,EAAQwX,eAAxB,SACI,eAAC,GAAD,CACI7X,KACI,sBAAK3D,UAAWgE,EAAQf,WAAxB,SACI,eAACkH,GAAD,CACI7D,MAAOjM,GAAOU,SACdqG,MAAM,WAIlBguB,QAAQ,0GAS5B,qCACI,gBAAC,GAAD,WAEI,sBAAKpvB,UAAWgE,EAAQilC,WAAxB,SACI,eAAC,GAAD,MAEJ,sBACIjpC,UAAS,UAAKyc,EAAOlb,UAAZ,iBACT/R,GAAG,eAFP,SAII,gBAAC,KAAD,WACI,eAAC,KAAD,CAAO25C,KAAK,kBAAkB5vB,QAAS,eAAC,GAAD,MACvC,eAAC,KAAD,CACI4vB,KAAK,sBACL5vB,QAAS,eAAC,GAAD,MAEb,eAAC,KAAD,CACI4vB,KAAK,uBACL5vB,QAAS,eAAC,GAAD,MAEb,eAAC,KAAD,CACI4vB,KAAK,qBACL5vB,QAAS,eAAC,GAAD,MAEb,eAAC,KAAD,CAAO4vB,KAAK,cAAc5vB,QAAS,eAAC,GAAD,MACnC,eAAC,KAAD,CACI4vB,KAAK,qBACL5vB,QAAS,eAAC,GAAD,MAEb,eAAC,KAAD,CAAO4vB,KAAK,eAAe5vB,QAAS,eAAC,GAAD,MACpC,eAAC,KAAD,CAAO4vB,KAAK,cAAc5vB,QAAS,eAAC,GAAD,MACnC,eAAC,KAAD,CACI4vB,KAAK,gBACL5vB,QAAS,eAAC,GAAD,MAGb,eAAC,KAAD,CACI4vB,KAAK,2BACL5vB,QAAS,eAAC,GAAD,MAEb,eAAC,KAAD,CACI4vB,KAAK,IACL5vB,QAAS,eAAC,KAAD,CAAU9O,SAAO,EAACxJ,GAAG,2BAK1C,eAAC,GAAD,IAEA,eAAC,GAAD,UCvFDmoC,OA/Bf,WAOI,OAFAC,YAAa,CAAEC,OAJA,WACXznB,MAGmB7K,QAPL,OAUd,eAAC,IAAD,UACI,eAAC,WAAD,UACI,eAAC,WAAD,CAAUuyB,SAAU,eAAC,GAAD,IAApB,SACI,eAAC,GAAD,UACI,eAAC,IAAD,CAAezlC,MAAOA,GAAtB,SACI,eAAC,GAAD,UACI,gBAAC,GAAD,WACI,eAAC,GAAD,IACA,eAAC,GAAD,UACI,qCACI,eAAC,GAAD,wBCxB7B0lC,GAdS,SAACC,GACjBA,GAAeA,aAAuBC,UACtC,8BAAqB1pB,MACjB,YAAkD,IAA/C2pB,EAA8C,EAA9CA,OAAQC,EAAsC,EAAtCA,OAAQC,EAA8B,EAA9BA,OAAQC,EAAsB,EAAtBA,OAAQC,EAAc,EAAdA,QAC/BJ,EAAOF,GACPG,EAAOH,GACPI,EAAOJ,GACPK,EAAOL,GACPM,EAAQN,OCLxB9iB,IAASqjB,OACL,eAAC,IAAMC,WAAP,UACI,eAAC,GAAD,MAEJ7lC,SAASyiB,eAAe,SAM5B2iB,M","file":"static/js/main.85c5797e.chunk.js","sourcesContent":["import axios from 'axios'\r\nimport qs from 'qs'\r\nimport moment, { Moment } from 'moment'\r\nimport { IUserData } from '../utils/Auth0'\r\nimport { AuthProfile } from './profile/profile'\r\n\r\nconst oidcSettings = {\r\n authority: process.env.REACT_APP_AUTH_AUTHORITY,\r\n client_id: process.env.REACT_APP_AUTH_CLIENT_ID,\r\n redirect_uri: process.env.REACT_APP_AUTH_REDIRECT_URI,\r\n response_type: process.env.REACT_APP_AUTH_RESPONSE_TYPE,\r\n scope: process.env.REACT_APP_AUTH_REDIRECT_URI_SCOPE,\r\n}\r\n\r\nconst baseURL = process.env.REACT_APP_API_BASE_URL\r\n\r\nconst axiosWithAuth = axios.create({\r\n baseURL,\r\n})\r\n\r\nexport const doRefreshToken = async (userData: IUserData): Promise => {\r\n axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'\r\n\r\n try {\r\n const response = await axios.post(\r\n `${oidcSettings.authority}/oauth2/token`,\r\n qs.stringify({\r\n grant_type: 'refresh_token',\r\n redirect_uri: oidcSettings.redirect_uri,\r\n client_id: oidcSettings.client_id,\r\n refresh_token: userData.refresh_token,\r\n })\r\n )\r\n\r\n const user: IUserData = response.data\r\n const updatedUserDate = userData\r\n\r\n updatedUserDate.access_token = user.access_token\r\n\r\n localStorage.setItem('user_data', JSON.stringify(updatedUserDate))\r\n } catch {\r\n localStorage.clear()\r\n window.location.href = '/'\r\n }\r\n}\r\n\r\naxiosWithAuth.interceptors.request.use(\r\n async (config) => {\r\n const localUser = localStorage.getItem('user_data')\r\n const user: IUserData = JSON.parse(localUser)\r\n // eslint-disable-next-line no-param-reassign\r\n config.headers = {\r\n Authorization: `Bearer ${user.access_token}`,\r\n }\r\n\r\n return config\r\n },\r\n (error) => {\r\n Promise.reject(error)\r\n }\r\n)\r\n\r\naxiosWithAuth.interceptors.response.use(\r\n (response) => {\r\n return response\r\n },\r\n (error) => {\r\n if (error.response.status === 401) {\r\n // try refresh token.\r\n const localUser = localStorage.getItem('user_data')\r\n const user: IUserData = JSON.parse(localUser)\r\n\r\n if (user.access_token && user.refresh_token) {\r\n doRefreshToken(user)\r\n } else {\r\n localStorage.clear()\r\n window.location.href = '/'\r\n }\r\n }\r\n throw error\r\n }\r\n)\r\n\r\nconst axiosWithImitator = axiosWithAuth\r\n\r\naxiosWithImitator.interceptors.request.use(\r\n async (config) => {\r\n const profile = localStorage.getItem('profile_data')\r\n const user: AuthProfile = JSON.parse(profile)\r\n\r\n if (\r\n user &&\r\n user.isImitator &&\r\n user.apiProfile &&\r\n user.apiProfile.myProfileId\r\n ) {\r\n if (config.params) {\r\n // eslint-disable-next-line no-param-reassign\r\n config.params['request.imiteretBrugerMedlemIdent'] =\r\n user.apiProfile.myProfileId\r\n } else {\r\n // eslint-disable-next-line no-param-reassign\r\n config.params = {\r\n 'request.imiteretBrugerMedlemIdent':\r\n user.apiProfile.myProfileId,\r\n }\r\n }\r\n }\r\n\r\n return config\r\n },\r\n (error) => {\r\n Promise.reject(error)\r\n }\r\n)\r\n\r\n// Response interceptor for API calls\r\n// axiosApiInstance.interceptors.response.use(\r\n// (response) => {\r\n// return response\r\n// },\r\n// async function (error) {\r\n// const originalRequest = error.config\r\n// const localUser = localStorage.getItem('user_data')\r\n// const user: IUserData = JSON.parse(localUser)\r\n// if (error.response.status === 403 && !originalRequest._retry) {\r\n// // originalRequest._retry = true\r\n// // const access_token = await refreshAccessToken()\r\n// // axios.defaults.headers.common.Authorization =\r\n// `Bearer ${access_token}`\r\n// return axiosApiInstance(originalRequest)\r\n// }\r\n// return Promise.reject(error)\r\n// }\r\n// )\r\n\r\nexport { axiosWithAuth, axiosWithImitator }\r\n","export type TypeOfRepresentativeData = {\r\n ErAktiv: boolean\r\n KortNavn: string\r\n Navn: string\r\n Sorteringsorden: number\r\n Type: string\r\n Genvalgsdato: string\r\n VisLangtNavnIOversigt: boolean\r\n SupplererMedlemsidentList: []\r\n SuppleresAfHvervsType: string\r\n SuppleresHvervsType: string\r\n}\r\n\r\nexport class TypeOfRepresentative {\r\n isActive = true\r\n\r\n name = ''\r\n\r\n shortName = ''\r\n\r\n sort = 0\r\n\r\n type = ''\r\n\r\n showLongName = true\r\n\r\n electedDate = ''\r\n\r\n alternateRepresentativeList = [] || undefined\r\n\r\n supplementedOfDutyType: string | undefined\r\n\r\n static build(data: TypeOfRepresentativeData): TypeOfRepresentative {\r\n const pos = new TypeOfRepresentative()\r\n\r\n pos.isActive = data.ErAktiv\r\n pos.shortName = data.KortNavn\r\n pos.name = data.Navn\r\n pos.sort = data.Sorteringsorden\r\n pos.type = data.Type\r\n pos.showLongName = data.VisLangtNavnIOversigt\r\n pos.electedDate = data.Genvalgsdato\r\n pos.alternateRepresentativeList = data.SupplererMedlemsidentList\r\n pos.supplementedOfDutyType =\r\n data.SuppleresAfHvervsType || data.SuppleresHvervsType || undefined\r\n\r\n return pos\r\n }\r\n}\r\n\r\nexport function mapTypeOfRepresentatives(\r\n data: TypeOfRepresentativeData[]\r\n): TypeOfRepresentative[] {\r\n return data && data.map((pos) => TypeOfRepresentative.build(pos))\r\n}\r\n","export type IAddressData = {\r\n Adresselinie1: string\r\n Adresselinie2: string\r\n Adresselinie3: string\r\n Postdistrikt: string\r\n Postnummer: string\r\n}\r\n\r\nexport class Address {\r\n id = 0\r\n\r\n addressLine1 = ''\r\n\r\n addressLine2 = ''\r\n\r\n addressLine3 = ''\r\n\r\n postDistrict = ''\r\n\r\n postNumber = ''\r\n\r\n static build(data: IAddressData): Address {\r\n const address = new Address()\r\n\r\n address.addressLine1 = data && data.Adresselinie1\r\n address.addressLine2 = data && data.Adresselinie2\r\n address.addressLine3 = data && data.Adresselinie3\r\n address.postDistrict = data && data.Postdistrikt\r\n address.postNumber = data && data.Postnummer\r\n\r\n return address\r\n }\r\n}\r\n","export interface IGroupData {\r\n Nummer: number\r\n Navn: string\r\n}\r\n\r\nexport class Group {\r\n id = 0\r\n\r\n name = ''\r\n\r\n static build(data: IGroupData): Group {\r\n const group = new Group()\r\n\r\n group.id = data.Nummer\r\n group.name = data.Navn\r\n\r\n return group\r\n }\r\n}\r\n\r\nexport function mapGroups(data: IGroupData[]): Group[] {\r\n return data.map((group) => Group.build(group))\r\n}\r\n","import { Group } from './Group'\r\n\r\nexport type IPositionData = {\r\n Faggruppe: {\r\n Sektor: {\r\n Kode: string\r\n Navn: string\r\n }\r\n Nummer: number\r\n Navn: string\r\n }\r\n Navn: string\r\n Nummer: number\r\n Arbejdsstedsnumre: number[]\r\n}\r\n\r\nexport class Position {\r\n id = 0\r\n\r\n name = ''\r\n\r\n group: Group = new Group()\r\n\r\n number: number\r\n\r\n numbers: number[] = []\r\n\r\n static build(data: IPositionData): Position {\r\n const department = new Position()\r\n\r\n department.id = data.Nummer\r\n department.name = data.Navn\r\n department.group = Group.build(data.Faggruppe)\r\n department.number = data.Nummer\r\n department.numbers = data.Arbejdsstedsnumre\r\n\r\n return department\r\n }\r\n}\r\n\r\nexport function mapPositions(data: IPositionData[]): Position[] {\r\n return data.map((position) => Position.build(position))\r\n}\r\n","import { IWorkplaceData, Workplace } from './Workplace'\r\n\r\nexport type IContactData = {\r\n Email: string\r\n ErTelefonerHemmelige: boolean\r\n KontaktoplysningerType: string\r\n Telefon: string\r\n TelefonVis: string\r\n Mobil: string\r\n MobilVis: string\r\n KontaktoplysningerForArbejdssted: IWorkplaceData\r\n}\r\n\r\nexport class Contact {\r\n id = 0\r\n\r\n name = ''\r\n\r\n email = ''\r\n\r\n telephone = ''\r\n\r\n telephoneShow = ''\r\n\r\n mobile = ''\r\n\r\n mobileShow = ''\r\n\r\n isTelefonPrivate = false\r\n\r\n contactInfoType = ''\r\n\r\n numbers: number[] = []\r\n\r\n // Should refactor Workplace to get only Workplace's contact?\r\n workPlacesContact: Workplace | undefined = undefined\r\n\r\n static build(data: IContactData): Contact {\r\n const contact = new Contact()\r\n\r\n contact.email = data.Email\r\n contact.isTelefonPrivate = data.ErTelefonerHemmelige\r\n contact.contactInfoType = data.KontaktoplysningerType\r\n contact.telephone = data.Telefon\r\n contact.telephoneShow = data.TelefonVis\r\n contact.mobile = data.Mobil\r\n contact.mobileShow = data.MobilVis\r\n contact.workPlacesContact = data.KontaktoplysningerForArbejdssted\r\n ? Workplace.build(data.KontaktoplysningerForArbejdssted)\r\n : undefined\r\n\r\n return contact\r\n }\r\n}\r\n\r\nexport function mapContacts(data: IContactData[]): Contact[] {\r\n return data.map((contact) => Contact.build(contact))\r\n}\r\n","import {\r\n mapTypeOfRepresentatives,\r\n TypeOfRepresentative,\r\n TypeOfRepresentativeData,\r\n} from './TypeOfRepresentative'\r\nimport { IAddressData, Address } from './Address'\r\nimport { IPositionData, mapPositions, Position } from './Position'\r\nimport { Contact } from './Contact'\r\n\r\nexport type ITRhvervMedlemLists = {\r\n AntalIalt: number\r\n KortNavn: string\r\n Medlemsidenter: number[]\r\n Navn: string\r\n Sorteringsorden: number\r\n Type: string\r\n}\r\n\r\nexport type IWorkplaceData = {\r\n Navn: string\r\n ErPrimaertArbejdssted: boolean\r\n ArbejdsstedType: string | null\r\n Nummer: number\r\n OKGruppe: string | null\r\n Stillingsnummer: string\r\n Tillidshverv: TypeOfRepresentativeData[]\r\n Adresse: IAddressData\r\n Timetal: number\r\n Stillinger: IPositionData[]\r\n AntalNoter: number\r\n TRTillidshvervMedlemLister: ITRhvervMedlemLists[]\r\n}\r\n\r\nconst getNumberOfMembers = (workPlace: Workplace): number => {\r\n let numberOfMembers = []\r\n\r\n workPlace.trMemberList.forEach((item) => {\r\n numberOfMembers = [...numberOfMembers, ...item.Medlemsidenter]\r\n })\r\n\r\n return Array.from(new Set(numberOfMembers)).length\r\n}\r\n\r\nexport class Workplace {\r\n name = ''\r\n\r\n isPrimaryWorkplace = false\r\n\r\n type: string | null = null\r\n\r\n okGroup: string | null = null\r\n\r\n number = 0\r\n\r\n postionNumber = ''\r\n\r\n typeOfRepresentatives: TypeOfRepresentative[] = []\r\n\r\n address: Address | undefined\r\n\r\n hoursPerWeek = 0\r\n\r\n positions: Position[]\r\n\r\n contact: Contact | undefined\r\n\r\n numberOfNotes = 0\r\n\r\n trMemberList: ITRhvervMedlemLists[] = []\r\n\r\n numberOfMembers = 0\r\n\r\n // Searchables.\r\n searchable_name = ''\r\n\r\n searchable_address = ''\r\n\r\n public static build = (data: IWorkplaceData): Workplace => {\r\n const workPlace = new Workplace()\r\n\r\n workPlace.name = data.Navn || ''\r\n workPlace.address = data.Adresse && Address.build(data.Adresse)\r\n workPlace.isPrimaryWorkplace = data.ErPrimaertArbejdssted\r\n workPlace.type = data.ArbejdsstedType\r\n workPlace.number = data.Nummer\r\n workPlace.okGroup = data.OKGruppe\r\n workPlace.postionNumber = data.Stillingsnummer\r\n workPlace.hoursPerWeek = data.Timetal || 0\r\n workPlace.typeOfRepresentatives = mapTypeOfRepresentatives(\r\n data.Tillidshverv\r\n )\r\n\r\n if (data.Stillinger) {\r\n workPlace.positions = mapPositions(data.Stillinger)\r\n }\r\n\r\n workPlace.numberOfNotes = data.AntalNoter || 0\r\n\r\n workPlace.trMemberList = data.TRTillidshvervMedlemLister || []\r\n\r\n if (workPlace.trMemberList && workPlace.trMemberList.length) {\r\n workPlace.numberOfMembers = getNumberOfMembers(workPlace)\r\n }\r\n\r\n /**\r\n * Searchables.\r\n */\r\n\r\n workPlace.searchable_name = workPlace.name\r\n\r\n workPlace.searchable_address = workPlace.address\r\n ? `${workPlace.address.addressLine1} ${workPlace.address.postDistrict} ${workPlace.address.postNumber}`\r\n : ''\r\n\r\n return workPlace\r\n }\r\n}\r\n\r\nexport function mapWorkplaces(data: IWorkplaceData[]): Workplace[] {\r\n return data && data.map((workplace) => Workplace.build(workplace))\r\n}\r\n\r\nexport function attachContactInfo(workPlace: Workplace, data: any): Workplace {\r\n const wp = { ...workPlace }\r\n const found = data.KontaktoplysningerList.find((item) => {\r\n return (\r\n item.KontaktoplysningerForArbejdssted !== null &&\r\n item.KontaktoplysningerForArbejdssted.Nummer === workPlace.number\r\n )\r\n })\r\n\r\n if (found) {\r\n wp.contact = Contact.build(found)\r\n }\r\n\r\n return wp\r\n}\r\n","export interface Idata {\r\n Nummer: string\r\n Navn: string\r\n Indmeldelsesdato: string\r\n}\r\n\r\nexport class Department {\r\n id = ''\r\n\r\n name = ''\r\n\r\n registrationDate: Date | undefined = undefined\r\n\r\n static build(data: Idata): Department {\r\n const department = new Department()\r\n\r\n department.id = data.Nummer\r\n department.name = data.Navn\r\n department.registrationDate = data.Indmeldelsesdato\r\n ? new Date(data.Indmeldelsesdato)\r\n : undefined\r\n\r\n return department\r\n }\r\n}\r\n\r\nexport function mapDepartments(data: Idata[]): Department[] {\r\n return data.map((department) => Department.build(department))\r\n}\r\n","export const formatDate = (date: Date): string => {\r\n if (!date) return null\r\n\r\n return `${`0${date.getDate()}`.slice(-2)}.${`0${date.getMonth() + 1}`.slice(\r\n -2\r\n )}.${date.getFullYear()}`\r\n}\r\n\r\nexport const formatPhoneNumber = (\r\n number: string,\r\n defaultGapSize = 2\r\n): string => {\r\n let result = ''\r\n let cloned = number\r\n\r\n // Desired distance between spaces\r\n const gap_size = defaultGapSize\r\n\r\n while (cloned.length > 0) {\r\n // Loop through string\r\n result = `${result} ${cloned.substring(0, gap_size)}` // Insert space character\r\n cloned = cloned.substring(gap_size) // Trim String\r\n }\r\n\r\n return result\r\n}\r\n","import {\r\n attachContactInfo,\r\n IWorkplaceData,\r\n mapWorkplaces,\r\n Workplace,\r\n} from './Workplace'\r\nimport { IPositionData, mapPositions, Position } from './Position'\r\nimport {\r\n mapTypeOfRepresentatives,\r\n TypeOfRepresentative,\r\n TypeOfRepresentativeData,\r\n} from './TypeOfRepresentative'\r\nimport { Department } from './Department'\r\nimport { Contact, IContactData, mapContacts } from './Contact'\r\nimport { formatDate } from '../utils/format'\r\n\r\nexport type IMemberData = {\r\n Arbejdssteder: IWorkplaceData[]\r\n ErFavorit: boolean\r\n AntalNoter: number\r\n OpdaterStatus: string\r\n Stillinger: IPositionData[]\r\n Medlemsident: number\r\n Medlemsnummer: string\r\n Fornavn: string\r\n Efternavn: string\r\n FuldeNavn: string\r\n Tillidshverv: TypeOfRepresentativeData[]\r\n ErEgetMedlem: boolean\r\n Alder: number\r\n Afdeling: {\r\n Navn: string\r\n Nummer: string\r\n Indmeldelsesdato: string\r\n }\r\n ProfilBillede: { Content: string; MimeType: string }\r\n KontaktoplysningerList: IContactData[]\r\n FoedselsDato: string\r\n}\r\n\r\nexport type IUpdateMemberData = {\r\n KontaktPrivat?: {\r\n Fastnet?: string\r\n Mobil?: string\r\n Email?: string\r\n }\r\n KontaktArbejde?: {\r\n Telefon?: string\r\n Email?: string\r\n }\r\n Stillingsnummer?: string\r\n Timetal?: number\r\n Aendringsdato?: string\r\n OevrigeOplysninger?: string\r\n Arbejdsstednummer?: number\r\n Medlemsident: number\r\n}\r\n\r\nexport type ICancelWorkplace = {\r\n Aendringsdato?: string\r\n OevrigeOplysninger?: string\r\n Arbejdsstednummer?: number\r\n Medlemsident: number\r\n}\r\n\r\nexport function findPrimaryWorkPlace(member: Member): Workplace {\r\n if (member.allWorkPlaces.length > 1) {\r\n const found = member.allWorkPlaces.find(\r\n (wordPlace) => wordPlace.isPrimaryWorkplace\r\n )\r\n\r\n if (found) {\r\n return found\r\n }\r\n }\r\n\r\n return member.allWorkPlaces[0]\r\n}\r\n\r\nexport function findMyWorkplaces(member: Member): Workplace[] {\r\n let workPlaces: Workplace[] = []\r\n\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const position of member.positions) {\r\n const wpNumbers = position.numbers\r\n\r\n // eslint-disable-next-line guard-for-in\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const wpNumber of wpNumbers) {\r\n const wp = member.allWorkPlaces.find((w) => +w.number === +wpNumber)\r\n workPlaces = [...workPlaces, ...[wp]]\r\n }\r\n }\r\n\r\n return workPlaces\r\n}\r\n\r\nexport class Member {\r\n workPlaces: Workplace[] = []\r\n\r\n allWorkPlaces: Workplace[] = []\r\n\r\n isFavorite = false\r\n\r\n numberOfNotes = 0\r\n\r\n status = ''\r\n\r\n memberId = 0\r\n\r\n firstName = ''\r\n\r\n lastName = ''\r\n\r\n fullName = ''\r\n\r\n memberNumber = ''\r\n\r\n birthday: Date | undefined = undefined\r\n\r\n age: number | undefined = undefined\r\n\r\n positions: Position[] = []\r\n\r\n typeOfRepresentatives: TypeOfRepresentative[] = []\r\n\r\n isOwnMember = false\r\n\r\n department: Department | undefined = null\r\n\r\n primaryWorkPlace: Workplace | undefined = undefined\r\n\r\n profilePicture = {\r\n content: '',\r\n mimeType: '',\r\n }\r\n\r\n contactInfoList: Contact[] = []\r\n\r\n privateContact: Contact | undefined = undefined\r\n\r\n workContact: Contact | undefined = undefined\r\n\r\n membershipInfo = {\r\n date: '',\r\n name: '',\r\n number: '',\r\n }\r\n\r\n // Searchables.\r\n searchable_fullName = ''\r\n\r\n searchable_workPlace = ''\r\n\r\n searchable_birthDay = ''\r\n\r\n searchable_age: number | undefined = undefined\r\n\r\n public static build = (data: IMemberData): Member => {\r\n const member = new Member()\r\n\r\n member.allWorkPlaces = mapWorkplaces(data.Arbejdssteder)\r\n member.isFavorite =\r\n data.ErFavorit !== undefined ? data.ErFavorit : false\r\n member.numberOfNotes = data.AntalNoter\r\n member.status = data.OpdaterStatus\r\n member.positions = data.Stillinger ? mapPositions(data.Stillinger) : []\r\n member.memberId = data.Medlemsident\r\n member.memberNumber = data.Medlemsnummer\r\n member.firstName = data.Fornavn\r\n member.lastName = data.Efternavn\r\n member.fullName = data.FuldeNavn\r\n member.membershipInfo.date = data.Afdeling?.Indmeldelsesdato\r\n member.membershipInfo.name = data.Afdeling?.Navn\r\n member.membershipInfo.number = data.Afdeling?.Nummer\r\n member.department = data.Afdeling\r\n ? Department.build(data.Afdeling)\r\n : undefined\r\n member.isOwnMember =\r\n data.ErEgetMedlem !== undefined ? data.ErEgetMedlem : false\r\n member.typeOfRepresentatives = data.Tillidshverv\r\n ? mapTypeOfRepresentatives(data.Tillidshverv)\r\n : []\r\n\r\n // member.primaryWorkPlace = findPrimaryWorkPlace(member)\r\n\r\n member.profilePicture.content = data.ProfilBillede?.Content\r\n\r\n member.age = data.Alder\r\n\r\n member.contactInfoList = data.KontaktoplysningerList\r\n ? mapContacts(data.KontaktoplysningerList)\r\n : []\r\n\r\n // Map Contacts.\r\n member.privateContact = member.contactInfoList.find(\r\n (c) => c.contactInfoType === 'Privat'\r\n )\r\n\r\n member.workContact = member.contactInfoList.find(\r\n (c) => c.contactInfoType === 'Arbejde'\r\n )\r\n\r\n member.birthday = data.FoedselsDato\r\n ? new Date(data.FoedselsDato)\r\n : undefined\r\n\r\n member.workPlaces = findMyWorkplaces(member)\r\n\r\n // member.workPlaces.forEach((entry, index) => {\r\n // member.workPlaces[index] = attachContactInfo(entry, data)\r\n // })\r\n member.primaryWorkPlace = findPrimaryWorkPlace(member)\r\n // member.primaryWorkPlace = attachContactInfo(\r\n // member.primaryWorkPlace,\r\n // data\r\n // )\r\n\r\n if (member.primaryWorkPlace) {\r\n member.searchable_workPlace = member.primaryWorkPlace.name\r\n }\r\n\r\n /**\r\n * Searchables.\r\n */\r\n if (member.primaryWorkPlace) {\r\n member.searchable_workPlace = member.primaryWorkPlace.name\r\n }\r\n\r\n member.searchable_fullName = member.fullName\r\n\r\n member.searchable_age = data.Alder\r\n\r\n const birthday = data.FoedselsDato\r\n ? new Date(data.FoedselsDato)\r\n : undefined\r\n\r\n if (birthday) {\r\n member.searchable_birthDay = formatDate(birthday)\r\n }\r\n\r\n return member\r\n }\r\n}\r\n\r\nexport function mapMembers(data: IMemberData[]): Member[] {\r\n return data.map((member) => Member.build(member))\r\n}\r\n","/* eslint-disable no-restricted-syntax */\r\nimport { IWorkplaceData, mapWorkplaces, Workplace } from './Workplace'\r\nimport { IPositionData, mapPositions, Position } from './Position'\r\nimport { IContactData, mapContacts, Contact } from './Contact'\r\nimport {\r\n mapTypeOfRepresentatives,\r\n TypeOfRepresentative,\r\n TypeOfRepresentativeData,\r\n} from './TypeOfRepresentative'\r\nimport { IMemberData, mapMembers, Member } from './Member'\r\n\r\nexport type IProfileData = {\r\n Arbejdssteder: IWorkplaceData[]\r\n ErFavorit: boolean\r\n AntalNoter: number\r\n TotalAntalKollegaerBrugerDaekker: number\r\n AntalFoaMedlemmerBrugerDaekker: number\r\n OpdaterStatus: string\r\n Stillinger: IPositionData[]\r\n Medlemsident: number\r\n Fornavn: string\r\n Efternavn: string\r\n FuldeNavn: string\r\n FoedselsDato: string\r\n Alder: number\r\n Medlemsnummer: number\r\n Afdeling: { Indmeldelsesdato: string; Navn: string; Nummer: string }\r\n ProfilBillede: { Content: string; MimeType: string }\r\n Tillidshverv: TypeOfRepresentativeData[]\r\n KontaktoplysningerList: IContactData[]\r\n TillidhvervMedlemmerSuppleantForBruger: IMemberData[]\r\n BrugerSuppleantForTillidshvervMedlemmer: IMemberData[]\r\n}\r\n\r\nexport function findPrimaryWorkPlace(member: Profile): Workplace {\r\n if (member.allWorkPlaces.length > 1) {\r\n const found = member.allWorkPlaces.find(\r\n (wordPlace) => wordPlace.isPrimaryWorkplace\r\n )\r\n if (found) {\r\n return found\r\n }\r\n }\r\n return member.workPlaces[0]\r\n}\r\n\r\nexport function findMyWorkplaces(member: Profile): Workplace[] {\r\n let workPlaces: Workplace[] = []\r\n\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const position of member.positions) {\r\n const wpNumbers = position.numbers\r\n\r\n // eslint-disable-next-line guard-for-in\r\n for (const wpNumber of wpNumbers) {\r\n const wp = member.allWorkPlaces.find((w) => +w.number === +wpNumber)\r\n workPlaces = [...workPlaces, ...[wp]]\r\n }\r\n }\r\n\r\n return workPlaces\r\n}\r\n\r\nexport class Profile {\r\n workPlaces: Workplace[] = []\r\n\r\n allWorkPlaces: Workplace[] = []\r\n\r\n isFavorite = false\r\n\r\n numberOfNotes = 0\r\n\r\n status = ''\r\n\r\n myProfileId = 0\r\n\r\n firstName = ''\r\n\r\n lastName = ''\r\n\r\n fullName = ''\r\n\r\n roles: string[] = []\r\n\r\n personalInfo = {\r\n birthdate: '',\r\n age: 0,\r\n }\r\n\r\n membershipInfo = {\r\n date: '',\r\n name: '',\r\n number: '',\r\n }\r\n\r\n profilePicture = {\r\n content: '',\r\n mimeType: '',\r\n }\r\n\r\n memberNumber = 0\r\n\r\n totalNumberOfPeopleUserCovers = 0\r\n\r\n numberFoaMemberUserCovers = 0\r\n\r\n positions: Position[] = []\r\n\r\n typeOfRepresentatives: TypeOfRepresentative[] = []\r\n\r\n contactInfoList: Contact[] = []\r\n\r\n primaryWorkPlace: Workplace | undefined = undefined\r\n\r\n privateContact: Contact | undefined = undefined\r\n\r\n workContact: Contact | undefined = undefined\r\n\r\n trForSelf: Member[] | undefined\r\n\r\n trForOthers: Member[] | undefined\r\n\r\n public static build = (data: IProfileData): Profile => {\r\n const myProfile = new Profile()\r\n\r\n myProfile.allWorkPlaces = mapWorkplaces(data.Arbejdssteder)\r\n myProfile.isFavorite = data.ErFavorit\r\n myProfile.numberOfNotes = data.AntalNoter\r\n myProfile.status = data.OpdaterStatus\r\n myProfile.positions = mapPositions(data.Stillinger)\r\n myProfile.myProfileId = data.Medlemsident\r\n myProfile.firstName = data.Fornavn\r\n myProfile.lastName = data.Efternavn\r\n myProfile.fullName = data.FuldeNavn\r\n myProfile.memberNumber = data.Medlemsnummer\r\n myProfile.totalNumberOfPeopleUserCovers =\r\n data.TotalAntalKollegaerBrugerDaekker\r\n myProfile.numberFoaMemberUserCovers =\r\n data.AntalFoaMedlemmerBrugerDaekker\r\n myProfile.personalInfo.age = data.Alder\r\n myProfile.personalInfo.birthdate = data.FoedselsDato\r\n myProfile.profilePicture.content = data?.ProfilBillede?.Content\r\n myProfile.profilePicture.mimeType = data?.ProfilBillede?.MimeType\r\n myProfile.membershipInfo.date = data.Afdeling.Indmeldelsesdato\r\n myProfile.membershipInfo.name = data.Afdeling.Navn\r\n myProfile.membershipInfo.number = data.Afdeling.Nummer\r\n myProfile.typeOfRepresentatives = mapTypeOfRepresentatives(\r\n data.Tillidshverv\r\n )\r\n myProfile.contactInfoList = data.KontaktoplysningerList\r\n ? mapContacts(data.KontaktoplysningerList)\r\n : []\r\n\r\n myProfile.workPlaces = findMyWorkplaces(myProfile)\r\n\r\n myProfile.primaryWorkPlace = findPrimaryWorkPlace(myProfile)\r\n\r\n // Map Contacts.\r\n myProfile.privateContact = myProfile.contactInfoList.find(\r\n (c) => c.contactInfoType === 'Privat'\r\n )\r\n\r\n myProfile.workContact = myProfile.contactInfoList.find(\r\n (c) => c.contactInfoType === 'Arbejde'\r\n )\r\n\r\n myProfile.trForOthers = mapMembers(\r\n data.BrugerSuppleantForTillidshvervMedlemmer\r\n )\r\n\r\n myProfile.trForSelf = mapMembers(\r\n data.TillidhvervMedlemmerSuppleantForBruger\r\n )\r\n\r\n return myProfile\r\n }\r\n}\r\n\r\nexport function mapProfiles(data: IProfileData[]): Profile[] {\r\n return data && data.map((myProfile) => Profile.build(myProfile))\r\n}\r\n","import { atomWithQuery } from 'jotai/query'\r\nimport { atom } from 'jotai'\r\nimport { AxiosResponse } from 'axios'\r\nimport { axiosWithAuth, axiosWithImitator } from '../withAuth'\r\nimport { Profile } from '../../models/Profile'\r\nimport { IUpdateMyProfileData } from '../../components/modules/EditMyProfile'\r\n\r\ninterface keyValue {\r\n [id: string]: string\r\n}\r\n\r\ninterface IAuthProfile {\r\n Afdeling: {\r\n Nummer: string\r\n Navn: string\r\n }\r\n AlleTRTillidshvervTypeListe: number[]\r\n BrugerMedlemsident: number\r\n BrugerSagsbehandlerInitialer: null | string\r\n Dagsdato: string\r\n KanBestilleNoteRapport: boolean\r\n ManglerTrKontaktoplysninger: boolean\r\n MinVersionAndroid: null | string\r\n MinVersionIOS: null | string\r\n RolleListe: string[]\r\n ServiceBesked: null | string\r\n SkalVilkaarGodkendes: boolean\r\n}\r\n\r\nexport type AuthProfile = {\r\n data?: IAuthProfile\r\n isImitator: boolean\r\n apiProfile?: Profile | undefined\r\n}\r\n\r\nconst initialValue: AuthProfile = {\r\n data: undefined,\r\n isImitator: false,\r\n apiProfile: undefined,\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\r\nconst getProfile = async () => {\r\n const response = await axiosWithAuth.get(`/profil/hentbrugeropstartdata`)\r\n\r\n return response\r\n}\r\n\r\nconst getProfileSupportInfo = async (): Promise => {\r\n const response = await axiosWithAuth.get(\r\n '/profil/hentsupportkontaktoplysninger'\r\n )\r\n\r\n return response\r\n}\r\n\r\nconst updateProfile = async (\r\n values: IUpdateMyProfileData\r\n): Promise => {\r\n const response = await axiosWithAuth.post(\r\n `/profil/opdaterbrugerprofil`,\r\n values\r\n )\r\n\r\n return response\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\r\nconst getProfileByIdent = async (ident: number): Promise => {\r\n const response = axiosWithAuth.get(\r\n `/profil/hentbrugerprofil?request.imiteretBrugerMedlemIdent=${ident}`\r\n )\r\n\r\n return response\r\n}\r\n\r\nconst getMemberForImitating = (\r\n departmentNumber: string,\r\n name: string\r\n): Promise => {\r\n return axiosWithAuth.get(\r\n `/profil/soegtrtilimitering?request.afdelingsnummer=${departmentNumber}&request.fuldeNavn=${name}`\r\n )\r\n}\r\n\r\nconst profileAtom = atom(initialValue)\r\n\r\nconst idAtom = atom(1)\r\n\r\nconst getProfileAtom = atomWithQuery((get) => ({\r\n queryKey: ['myProfile', get(idAtom)],\r\n queryFn: async ({ queryKey: [,] }) => {\r\n const response = await axiosWithAuth.get(`/profil/hentbrugerprofil`)\r\n\r\n const { data } = response\r\n return Profile.build(data)\r\n },\r\n}))\r\n\r\nexport {\r\n profileAtom,\r\n getProfile,\r\n getProfileAtom,\r\n getProfileByIdent,\r\n getMemberForImitating,\r\n updateProfile,\r\n getProfileSupportInfo,\r\n}\r\n","export const colors = {\r\n green: '#297A71',\r\n white: 'rgba(255, 255, 255)',\r\n gray: '#E5E5E5',\r\n black: 'rgba(0, 0, 0)',\r\n borderColorLight: 'rgba(0, 0, 0, .1)',\r\n borderColor: 'rgba(0, 0, 0, 0.2)',\r\n labelColor: 'rgba(0, 0, 0, 0.4)',\r\n\r\n green200: 'rgba(41, 122 , 113, .1)', // #297A71 , opacity: .1\r\n green400: 'rgba(41, 122 , 113, .3)', // #297A71 , opacity: .3\r\n green500: 'rgb(41, 122 ,113)', // #297A71\r\n green600: 'rgb(24, 90, 81)', // #185A51\r\n\r\n red100: 'rgba(166, 25, 46, .1)',\r\n red500: 'rgb(166, 25, 46)',\r\n red600: 'rgb(140, 21, 61)',\r\n\r\n orange500: 'rgb(220, 107, 47)',\r\n orange600: 'rgba(220, 93, 47)',\r\n\r\n gray500: 'rgba(0, 0, 0, .05)',\r\n gray600: 'rgba(0, 0, 0, .1)',\r\n gray700: 'rgba(0, 0, 0, 0.2)',\r\n gray800: 'rgba(0, 0, 0, 0.4)',\r\n gray900: 'rgba(86, 88, 90, 0.9)',\r\n\r\n blue300: '#E9F4F3',\r\n\r\n error: 'rgb(235, 52, 52)',\r\n errorBg: 'rgb(235, 52, 52, .1)',\r\n}\r\n\r\nconst palette = {\r\n colors,\r\n link: {},\r\n foreground: colors.green,\r\n background: colors.gray,\r\n navBackgroundColor: colors.white,\r\n borderColor: colors.green,\r\n backgroundOpaque: 'rgba(255,255,255,0.9)',\r\n primary: '#464646', // Text\r\n secondary: '#fff', // Text\r\n buttonPrimary: colors.green,\r\n creme: '#dccab8',\r\n CTAhover: '#323232',\r\n}\r\n\r\nexport default palette\r\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgAddContact({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n \n \n \n \n \n )\n}\n\nSvgAddContact.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgAddContact\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgBookmarkFill({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgBookmarkFill.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgBookmarkFill\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgCalendar({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgCalendar.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgCalendar\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgCheck({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgCheck.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgCheck\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgCheckFill({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgCheckFill.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgCheckFill\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgChevronLeft({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgChevronLeft.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgChevronLeft\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgChevronRight({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgChevronRight.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgChevronRight\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgChevronDownFill({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n \n \n )\n}\n\nSvgChevronDownFill.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgChevronDownFill\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgClose({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgClose.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgClose\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgContactFill({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgContactFill.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgContactFill\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgContactLedger({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgContactLedger.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgContactLedger\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgDelete({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgDelete.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgDelete\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgDeleteFill({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgDeleteFill.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgDeleteFill\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgEdit({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgEdit.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgEdit\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgEditFill({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgEditFill.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgEditFill\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgEmailFill({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n )\n}\n\nSvgEmailFill.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgEmailFill\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgEnvelop({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n \n )\n}\n\nSvgEnvelop.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgEnvelop\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgFlagFill({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgFlagFill.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgFlagFill\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgFoa({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n )\n}\n\nSvgFoa.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgFoa\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgHandshakeFill({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgHandshakeFill.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgHandshakeFill\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgHeart({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgHeart.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgHeart\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgHelp({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgHelp.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgHelp\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgInfo({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgInfo.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgInfo\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgKontigenter({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n \n \n )\n}\n\nSvgKontigenter.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgKontigenter\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgLinkFill({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgLinkFill.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgLinkFill\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgLockFill({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgLockFill.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgLockFill\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgMaterialer({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n \n \n )\n}\n\nSvgMaterialer.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgMaterialer\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgMedlemsfordele({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n \n \n )\n}\n\nSvgMedlemsfordele.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgMedlemsfordele\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgMessageFill({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgMessageFill.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgMessageFill\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgNote({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n )\n}\n\nSvgNote.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgNote\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgNotes({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n \n \n \n )\n}\n\nSvgNotes.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgNotes\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgOk({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n \n \n )\n}\n\nSvgOk.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgOk\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgOrganiseringsprocent({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n \n \n )\n}\n\nSvgOrganiseringsprocent.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgOrganiseringsprocent\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgPersonalInfo({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n )\n}\n\nSvgPersonalInfo.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgPersonalInfo\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgPersonSearch({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n \n )\n}\n\nSvgPersonSearch.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgPersonSearch\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgPhotoFill({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgPhotoFill.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgPhotoFill\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgPinFill({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgPinFill.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgPinFill\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgPlus({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgPlus.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgPlus\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgPriority({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n )\n}\n\nSvgPriority.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgPriority\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgQuestion({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgQuestion.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgQuestion\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgRatingStar({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgRatingStar.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgRatingStar\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgSearchPerson({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n \n )\n}\n\nSvgSearchPerson.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgSearchPerson\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgSearch({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgSearch.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgSearch\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgSendFill({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgSendFill.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgSendFill\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgSendToMany({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgSendToMany.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgSendToMany\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgSettings({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n \n \n )\n}\n\nSvgSettings.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgSettings\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgStarYellow({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgStarYellow.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgStarYellow\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgStar({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgStar.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgStar\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgStarFill({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nSvgStarFill.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgStarFill\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgSuitcaseFill({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n )\n}\n\nSvgSuitcaseFill.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgSuitcaseFill\n","import * as React from 'react'\nimport { SVGProps } from 'react'\nimport PropTypes from 'prop-types'\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\n\nfunction SvgTips({\n title,\n titleId,\n ...props\n}: SVGProps & SVGRProps) {\n return (\n \n {title ? {title} : null}\n \n \n \n \n \n )\n}\n\nSvgTips.propTypes = {\n title: PropTypes.string,\n fill: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n stroke: PropTypes.string,\n color: PropTypes.string,\n}\nexport default SvgTips\n","import {\r\n Close,\r\n Root,\r\n Trigger,\r\n Overlay,\r\n Content,\r\n Title,\r\n Description,\r\n Portal,\r\n} from '@radix-ui/react-dialog'\r\n\r\nimport React, { ReactNode } from 'react'\r\nimport { createUseStyles, useTheme } from 'react-jss'\r\nimport { colors } from '../../../theme/palette'\r\nimport { Close as CloseIcon } from '../../../assets/icons'\r\n\r\ninterface StyleProps {\r\n iconBGColor?: string\r\n iconBorder?: string\r\n}\r\n\r\ntype RuleNames =\r\n | 'overlayContainer'\r\n | 'container'\r\n | 'overlay'\r\n | 'button'\r\n | 'circleIcon'\r\n | '@keyframes animatetop'\r\n | '@keyframes fadeIn'\r\n\r\nconst useStyles = createUseStyles({\r\n // const useStyles = createUseStyles({\r\n '@keyframes animatetop': {\r\n from: {\r\n top: '20px',\r\n opacity: 0,\r\n },\r\n to: {\r\n top: '50%',\r\n opacity: 1,\r\n },\r\n },\r\n '@keyframes fadeIn': {\r\n from: {\r\n opacity: 0,\r\n },\r\n to: {\r\n opacity: 1,\r\n },\r\n },\r\n overlayContainer: {\r\n position: 'fixed',\r\n top: '0',\r\n left: '0',\r\n width: '100%',\r\n height: '100svh',\r\n zIndex: 6,\r\n },\r\n container: {\r\n backgroundColor: 'white',\r\n borderRadius: '6px',\r\n boxShadow:\r\n // eslint-disable-next-line max-len\r\n 'rgba(14, 18, 22, 0.35) 0px 10px 38px -10px, rgba(14, 18, 22, 0.2) 0px 10px 20px -15px',\r\n position: 'fixed',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n width: '90vw',\r\n maxWidth: '500px',\r\n maxHeight: '85vh',\r\n padding: '2.75rem',\r\n animation: '.6s $animatetop',\r\n AnimationEffect: 'easeInOut',\r\n pointerEvents: 'auto',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n textAlign: 'center',\r\n zIndex: 5,\r\n '&.withIcon': {\r\n paddingTop: '80px',\r\n },\r\n },\r\n overlay: {\r\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n position: 'fixed',\r\n inset: '0px',\r\n animation: '.3s $fadeIn',\r\n },\r\n button: {\r\n position: 'absolute',\r\n right: 0,\r\n top: 0,\r\n display: 'inline-block',\r\n padding: '0.75em 1.75em',\r\n margin: '0 0.3em 0.3em 0',\r\n borderRadius: '0.25em',\r\n boxSizing: 'border-box',\r\n textDecoration: 'none',\r\n fontWeight: 400,\r\n textAlign: 'center',\r\n transition: 'all 0.2s',\r\n background: 'transparent',\r\n boxShadow: 0,\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n '-webkit-appearance': 'none',\r\n '-moz-appearance': 'none',\r\n border: 0,\r\n '&:hover svg': {\r\n fill: colors.gray500,\r\n },\r\n },\r\n circleIcon: {\r\n position: 'absolute',\r\n top: '-40px',\r\n width: '80px',\r\n height: '80px',\r\n borderRadius: '50%',\r\n backgroundColor: ({ iconBGColor }) => {\r\n return iconBGColor || colors.blue300\r\n },\r\n border: ({ iconBorder }) => {\r\n return `2px solid ${iconBorder || colors.white}`\r\n },\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '1rem',\r\n },\r\n})\r\n\r\nconst DialogTrigger: React.FC = ({ children }) => {\r\n return {children}\r\n}\r\n\r\ntype DialogProps = {\r\n title?: string\r\n description?: string\r\n trigger?: ReactNode\r\n defaultOpen?: boolean\r\n hideClose?: boolean\r\n icon?: ReactNode\r\n iconBGColor?: string\r\n iconBorder?: string\r\n}\r\n\r\nconst defaultProps = {\r\n title: '',\r\n description: '',\r\n trigger: <>Trigger,\r\n defaultOpen: false,\r\n hideClose: false,\r\n icon: undefined,\r\n iconBGColor: colors.blue300,\r\n iconBorder: colors.white,\r\n}\r\n\r\nconst Dialog: React.FC = ({\r\n children,\r\n title,\r\n description,\r\n trigger,\r\n defaultOpen,\r\n hideClose,\r\n icon,\r\n iconBGColor,\r\n iconBorder,\r\n}) => {\r\n const handleIsOpen = (): void => {\r\n const documentWidth = document.documentElement.clientWidth\r\n const windowWidth = window.innerWidth\r\n const scrollBarWidth = windowWidth - documentWidth\r\n\r\n document.body.style.overflow = 'hidden'\r\n document.body.style.paddingRight = `${scrollBarWidth}px`\r\n document.body.classList.add('no-scroll')\r\n }\r\n\r\n const handleIsClosed = (): void => {\r\n document.body.style.overflow = 'unset'\r\n document.body.style.paddingRight = 'unset'\r\n document.body.classList.remove('no-scroll')\r\n }\r\n\r\n const theme = useTheme()\r\n const classes = useStyles({\r\n ...{ iconBGColor, iconBorder },\r\n theme,\r\n })\r\n\r\n return (\r\n (open ? handleIsOpen() : handleIsClosed())}\r\n >\r\n {trigger}\r\n \r\n \r\n \r\n \r\n {icon ? (\r\n
{icon}
\r\n ) : null}\r\n {title}\r\n {description}\r\n {!hideClose ? (\r\n \r\n \r\n \r\n ) : null}\r\n {children}\r\n \r\n \r\n
\r\n \r\n )\r\n}\r\n\r\nDialog.defaultProps = defaultProps\r\n\r\nexport { Dialog, DialogTrigger }\r\n","/* eslint-disable react/require-default-props */\r\nimport React from 'react'\r\nimport { createUseStyles, useTheme } from 'react-jss'\r\nimport { colors } from '../../../theme/palette'\r\n\r\n// Define Component\r\ntype RuleNames = 'text'\r\ninterface TypoStyleProps {\r\n weight?: string\r\n size?: TypographyVariants\r\n color?: string\r\n spacing?: string\r\n align?: string\r\n}\r\n\r\nexport type TypographyVariants =\r\n | 'XXXS'\r\n | 'XXS'\r\n | 'XS'\r\n | 'S'\r\n | 'M'\r\n | 'L'\r\n | 'XL'\r\n | 'XXL'\r\n | 'XXXL'\r\n | 'XXXXL'\r\n\r\nconst sizes = {\r\n XXXS: 0.75,\r\n XXS: 0.875,\r\n XS: 1,\r\n S: 1.125,\r\n M: 1.25,\r\n L: 1.5,\r\n XL: 1.75,\r\n XXL: 2.188,\r\n XXXL: 2.5,\r\n XXXXL: 3,\r\n}\r\n\r\nconst getLineheight = (size: number): number => {\r\n const suggested = size * 1.3\r\n return suggested < 3 ? suggested : 3\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n text: {\r\n fontSize: ({ size }) => {\r\n return size ? `${sizes[size]}rem` : '1rem'\r\n },\r\n fontWeight: ({ weight }) => {\r\n return weight || 'bold'\r\n },\r\n\r\n fontStyle: 'normal',\r\n lineHeight: ({ size }) => `${getLineheight(sizes[size])}rem`,\r\n color: ({ color }) => color || colors.black,\r\n textAlign: ({ align }) => {\r\n return align || 'left'\r\n },\r\n // marginBottom: ({ spacing }) => spacing,\r\n },\r\n})\r\n\r\nconst Typography: React.FC = ({\r\n tag: Tag = 'p',\r\n size = 'XXXL',\r\n weight = 'normal',\r\n color = '#000',\r\n children,\r\n spacing = '0.625rem',\r\n align = 'left',\r\n ...props\r\n}) => {\r\n const theme = useTheme()\r\n const classes = useStyles({\r\n ...{ size, weight, color, spacing, align },\r\n theme,\r\n })\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\ntype TypoProps = {\r\n spacing?: string\r\n\r\n color?: string\r\n\r\n size?: TypographyVariants\r\n\r\n weight?: 'normal' | 'bold'\r\n\r\n align?: 'left' | 'center' | 'right'\r\n\r\n tag?: keyof JSX.IntrinsicElements\r\n} & React.HTMLAttributes\r\n\r\nexport { Typography }\r\n","const breakpoints = {\r\n Desktop: 990,\r\n}\r\n\r\nexport default breakpoints\r\n","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport breakpoints from '../../../theme/breakpoints'\r\n\r\nexport interface Props {\r\n onClick?: () => void\r\n type?: 'primary' | 'secondary' | 'danger' | 'warning' | 'action'\r\n size?: 'medium' | 'large' | 'xlarge'\r\n disabled?: boolean\r\n icon?: JSX.Element\r\n buttonType?: 'button' | 'submit'\r\n style?: React.CSSProperties\r\n}\r\n\r\nexport interface ButtonLinkProps {\r\n type?: 'primary' | 'secondary' | 'danger' | 'warning' | 'action'\r\n href?: string\r\n target?: string\r\n icon?: JSX.Element\r\n size?: 'medium' | 'large' | 'xlarge'\r\n}\r\n\r\nconst BUTTON_CONTAINER = 'button'\r\n\r\nconst useStyles = createUseStyles((theme) => ({\r\n [BUTTON_CONTAINER]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '0.5em 1.75em',\r\n margin: '0 0.3em 0.3em 0',\r\n borderRadius: '6px',\r\n boxSizing: 'border-box',\r\n textDecoration: 'none',\r\n fontWeight: 400,\r\n textAlign: 'center',\r\n transition: 'all 0.2s',\r\n boxShadow: 0,\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n '-webkit-appearance': 'none',\r\n '-moz-appearance': 'none',\r\n border: 0,\r\n },\r\n\r\n medium: {\r\n fontSize: '.875em',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n fontSize: '.875em',\r\n },\r\n },\r\n },\r\n\r\n large: {\r\n fontSize: '.875em',\r\n minHeight: '48px',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n fontSize: '1rem',\r\n },\r\n },\r\n },\r\n xlarge: {\r\n fontSize: '.875em',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n fontSize: '1.125rem',\r\n },\r\n },\r\n },\r\n\r\n action: {\r\n composes: `$${BUTTON_CONTAINER}`,\r\n backgroundColor: theme.colors.white,\r\n color: theme.colors.black,\r\n padding: 0,\r\n margin: 0,\r\n height: 'auto',\r\n width: 'auto',\r\n display: 'block',\r\n },\r\n\r\n primary: () => ({\r\n composes: `$${BUTTON_CONTAINER}`,\r\n backgroundColor: theme.colors.green500,\r\n color: theme.colors.white,\r\n '& > svg': {\r\n fill: theme.colors.white,\r\n },\r\n '&:hover': {\r\n backgroundColor: theme.colors.green600,\r\n },\r\n '&:focus, &:active': {\r\n outline: `2px solid ${theme.colors.white}`,\r\n outlineOffset: '-2px',\r\n },\r\n '&:disabled': {\r\n opacity: 0.3,\r\n },\r\n }),\r\n secondary: {\r\n composes: `$${BUTTON_CONTAINER}`,\r\n backgroundColor: theme.colors.white,\r\n color: theme.colors.black,\r\n border: '1px solid #DDDDDD',\r\n '& > svg': {\r\n fill: theme.colors.green500,\r\n },\r\n '&:hover': {\r\n backgroundColor: theme.colors.green600,\r\n color: theme.colors.white,\r\n '&:hover svg': {\r\n fill: theme.colors.white,\r\n },\r\n },\r\n '&:active': {\r\n outline: `2px solid ${theme.colors.green600}`,\r\n backgroundColor: theme.colors.white,\r\n outlineOffset: '-2px',\r\n color: theme.colors.black,\r\n },\r\n '&:disabled': {\r\n opacity: 0.3,\r\n },\r\n },\r\n danger: {\r\n composes: `$${BUTTON_CONTAINER}`,\r\n backgroundColor: theme.colors.red500,\r\n color: theme.colors.white,\r\n border: '1px solid #DDDDDD',\r\n '&:hover': {\r\n backgroundColor: theme.colors.red600,\r\n color: theme.colors.white,\r\n },\r\n '&:active': {\r\n outline: `2px solid ${theme.colors.red600}`,\r\n backgroundColor: theme.colors.white,\r\n outlineOffset: '-2px',\r\n color: theme.colors.black,\r\n },\r\n '&:disabled': {\r\n opacity: 0.3,\r\n },\r\n },\r\n warning: {\r\n composes: `$${BUTTON_CONTAINER}`,\r\n backgroundColor: theme.colors.orange500,\r\n color: theme.colors.white,\r\n '&:hover': {\r\n backgroundColor: theme.colors.orange600,\r\n color: theme.colors.white,\r\n },\r\n '&:focus, &:active': {\r\n outline: `2px solid ${theme.colors.orange600}`,\r\n backgroundColor: theme.colors.white,\r\n outlineOffset: '-2px',\r\n color: theme.colors.black,\r\n },\r\n '&:disabled': {\r\n opacity: 0.3,\r\n },\r\n },\r\n icon: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n marginRight: '.5rem',\r\n '& svg': {\r\n width: '1.75em',\r\n },\r\n },\r\n}))\r\n\r\nconst Button: React.FC = (\r\n {\r\n children,\r\n onClick,\r\n type = 'primary',\r\n size = 'medium',\r\n disabled = false,\r\n icon,\r\n buttonType = 'button',\r\n style,\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n ref\r\n) => {\r\n const classes = useStyles()\r\n\r\n return (\r\n \r\n {icon && {icon}}\r\n {children}\r\n \r\n )\r\n}\r\n\r\nconst ButtonLink: React.FC = (\r\n { children, size = 'medium', icon, type, href, target },\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n ref\r\n) => {\r\n const classes = useStyles()\r\n\r\n return (\r\n \r\n {icon && {icon}}\r\n {children}\r\n \r\n )\r\n}\r\n\r\nexport { Button, ButtonLink }\r\n","import { atom } from 'jotai'\r\n\r\nconst isAuthenticatedAtom = atom(false)\r\nconst chooseImitatorAtom = atom(false)\r\nconst authRoles = atom([])\r\n\r\nexport { isAuthenticatedAtom, chooseImitatorAtom, authRoles }\r\n","/* eslint-disable react/require-default-props */\r\nimport React, {\r\n DetailedHTMLProps,\r\n SelectHTMLAttributes,\r\n useEffect,\r\n useState,\r\n} from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { colors } from '../../../theme/palette'\r\n\r\nexport interface ISelectOptions {\r\n label: string\r\n value: string\r\n}\r\n\r\nexport type SelectProps3 = {\r\n options: ISelectOptions[]\r\n useControlled?: boolean\r\n isOpen?: boolean\r\n hasError?: boolean\r\n} & Omit<\r\n DetailedHTMLProps<\r\n SelectHTMLAttributes,\r\n HTMLSelectElement\r\n >,\r\n 'size'\r\n>\r\n\r\nconst useStyles = createUseStyles({\r\n wrap: {\r\n position: 'relative',\r\n height: '3.125rem',\r\n backgroundColor: colors.white,\r\n border: `1px solid ${colors.borderColor}`,\r\n borderRadius: '6px',\r\n overflow: 'hidden',\r\n },\r\n select: {\r\n position: 'relative',\r\n height: '3.125rem',\r\n border: 0,\r\n width: '100%',\r\n fontSize: '1rem',\r\n paddingTop: '.75rem',\r\n paddingLeft: '.5rem',\r\n paddingRight: '1rem',\r\n cursor: 'pointer',\r\n color: colors.black,\r\n\r\n '&:focus-visible': {\r\n outline: 'none',\r\n },\r\n '&:focus-within + label:not([class^=\"label\"])': {\r\n color: colors.green500,\r\n fontSize: '0.75rem',\r\n height: 'auto',\r\n width: 'auto',\r\n backgroundColor: 'transparent',\r\n },\r\n '&:focus + label + label:not([class^=\"label\"])': {\r\n borderColor: colors.green500,\r\n outlineColor: colors.green500,\r\n paddingTop: '12px',\r\n },\r\n '&:active + label + label:not([class^=\"label\"])': {\r\n borderColor: colors.green500,\r\n outlineColor: colors.green500,\r\n paddingTop: '12px',\r\n },\r\n '&:disabled + label': {\r\n color: colors.labelColor,\r\n '& + span': {\r\n color: colors.labelColor,\r\n },\r\n },\r\n },\r\n hasValue: {\r\n color: colors.green500,\r\n fontSize: '0.75rem',\r\n height: 'auto',\r\n width: 'auto',\r\n\r\n transitionDuration: '300ms',\r\n pointerEvents: 'none',\r\n position: 'absolute',\r\n top: '0',\r\n left: '0',\r\n zIndex: 1,\r\n paddingTop: '0.17rem',\r\n paddingLeft: '.75rem',\r\n paddingRight: '1rem',\r\n cursor: 'pointer',\r\n },\r\n label: {\r\n transitionDuration: '300ms',\r\n pointerEvents: 'none',\r\n position: 'absolute',\r\n top: '0',\r\n left: '0',\r\n width: 'calc(100% - 20px)',\r\n height: '100%',\r\n zIndex: 1,\r\n fontSize: '1rem',\r\n paddingTop: '.75rem',\r\n paddingLeft: '0.75rem',\r\n paddingRight: '1rem',\r\n cursor: 'pointer',\r\n backgroundColor: colors.white,\r\n color: colors.labelColor,\r\n },\r\n})\r\n\r\nconst Select = React.forwardRef(\r\n (\r\n {\r\n options,\r\n onChange,\r\n defaultValue,\r\n name,\r\n placeholder,\r\n isOpen,\r\n useControlled,\r\n hasError,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const classes = useStyles()\r\n const [query, setQuery] = useState(\r\n defaultValue\r\n )\r\n\r\n console.log(name, 'name')\r\n\r\n useEffect(() => {\r\n if (useControlled) {\r\n setQuery(props.value)\r\n }\r\n }, [props.value, useControlled])\r\n\r\n useEffect(() => {\r\n if (isOpen !== undefined && !isOpen) {\r\n setQuery('')\r\n }\r\n }, [isOpen])\r\n\r\n return (\r\n \r\n {\r\n console.log(e.target.value, 'e.target.value')\r\n setQuery(e.target.value)\r\n onChange(e)\r\n }}\r\n >\r\n {!defaultValue ? (\r\n \r\n ) : null}\r\n {options.map(({ label, value }) => (\r\n \r\n ))}\r\n \r\n\r\n \r\n {placeholder || name}\r\n \r\n \r\n )\r\n }\r\n)\r\n\r\nexport { Select }\r\n","import { mapDepartments } from '../../models/Department'\r\nimport { axiosWithAuth } from '../withAuth'\r\n\r\n// opslagsdata/hentafdelinger\r\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\r\nconst getDepartments = async () => {\r\n const response = await axiosWithAuth.get(`/opslagsdata/hentafdelinger`)\r\n\r\n return mapDepartments(response.data.Afdelinger)\r\n}\r\n\r\nexport { getDepartments }\r\n","import React, {\r\n ChangeEvent,\r\n DetailedHTMLProps,\r\n FC,\r\n forwardRef,\r\n InputHTMLAttributes,\r\n useEffect,\r\n useState,\r\n} from 'react'\r\nimport { createUseStyles, useTheme } from 'react-jss'\r\nimport { colors } from '../../../theme/palette'\r\nimport { LockFill } from '../../../assets/icons'\r\n\r\ntype RuleNames = 'label' | 'input' | 'container' | 'span' | 'lock'\r\n\r\ninterface StyleProps {\r\n query: string\r\n hasError: boolean\r\n isDatePicker?: boolean\r\n}\r\n\r\nexport type InputProps = {\r\n label: string\r\n required: boolean\r\n useDisabled?: boolean\r\n hasError?: boolean\r\n useFloats?: boolean\r\n isDatePicker?: boolean\r\n onChangeHandler?: (v: string) => void\r\n} & Omit<\r\n DetailedHTMLProps, HTMLInputElement>,\r\n 'size'\r\n>\r\n\r\nconst useStyles = createUseStyles({\r\n container: {\r\n position: 'relative',\r\n display: 'block',\r\n },\r\n label: {\r\n position: 'relative',\r\n width: '100%',\r\n '&:focus-within > span': {\r\n color: colors.green500,\r\n transform: 'translateY(-15px)',\r\n fontSize: '0.75rem',\r\n },\r\n color: colors.labelColor,\r\n },\r\n input: {\r\n minHeight: '48px',\r\n // border: ({ hasError }) =>\r\n // `1px solid ${hasError ? colors.error : colors.borderColor}`,\r\n borderRadius: '6px',\r\n width: '100%',\r\n paddingLeft: '0.75rem',\r\n // backgroundColor: ({ hasError }) => (hasError ? colors.errorBg : 'none'),\r\n\r\n paddingTop: ({ isDatePicker }) => (isDatePicker ? '12px' : '0'),\r\n\r\n '& + span': {\r\n transform: ({ isDatePicker }) =>\r\n isDatePicker ? 'translateY(-15px)' : 'none',\r\n color: ({ isDatePicker }) =>\r\n isDatePicker ? colors.green500 : colors.labelColor,\r\n fontSize: ({ isDatePicker }) => (isDatePicker ? '0.75rem' : '1rem'),\r\n },\r\n\r\n '&::placeholder': {\r\n opacity: '0',\r\n },\r\n color: colors.black,\r\n '&:not(:placeholder-shown) + span': {\r\n color: colors.green500,\r\n transform: 'translateY(-15px)',\r\n fontSize: '0.75rem',\r\n },\r\n '&:not(:placeholder-shown)': {\r\n paddingTop: '12px',\r\n },\r\n // backgroundColor: ({ hasError }) => (hasError ? colors.errorBg : 'none'),\r\n '&:focus': {\r\n borderColor: ({ hasError }) =>\r\n hasError ? colors.error : colors.green500,\r\n outlineColor: ({ hasError }) =>\r\n hasError ? colors.error : colors.green500,\r\n paddingTop: '12px',\r\n },\r\n '&:active': {\r\n borderColor: colors.green500,\r\n outlineColor: colors.green500,\r\n paddingTop: '12px',\r\n },\r\n '&:disabled': {\r\n backgroundColor: '#F5F6F8',\r\n color: colors.black,\r\n '& + span': {\r\n color: colors.black,\r\n },\r\n },\r\n },\r\n span: {\r\n position: 'absolute',\r\n top: '0',\r\n left: '.75rem',\r\n fontSize: '1rem',\r\n transitionDuration: '300ms',\r\n color: colors.labelColor,\r\n },\r\n lock: {\r\n position: 'absolute',\r\n top: '0',\r\n right: '10px',\r\n opacity: '.5',\r\n },\r\n})\r\n\r\nexport const Input: FC = forwardRef(\r\n (\r\n {\r\n label,\r\n required,\r\n type,\r\n useDisabled,\r\n hasError,\r\n isDatePicker,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const [query] = useState('')\r\n const theme = useTheme()\r\n const [error, setError] = useState(false)\r\n const classes = useStyles({\r\n ...{ query, hasError: error, isDatePicker },\r\n theme,\r\n })\r\n\r\n useEffect(() => {\r\n setError(hasError)\r\n }, [hasError])\r\n\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n)\r\n\r\nInput.defaultProps = {\r\n useDisabled: true,\r\n useFloats: false,\r\n hasError: false,\r\n isDatePicker: false,\r\n}\r\n\r\nexport const InputNumber: FC = forwardRef<\r\n HTMLInputElement,\r\n InputProps\r\n>(({ label, required, type, onChange, hasError, useFloats, ...props }, ref) => {\r\n const [query] = useState('')\r\n const theme = useTheme()\r\n const [error, setError] = useState(false)\r\n const classes = useStyles({ ...{ query, hasError: error }, theme })\r\n\r\n useEffect(() => {\r\n setError(hasError)\r\n }, [hasError])\r\n\r\n const handleChange = (event: ChangeEvent): void => {\r\n let newValue = event.target.value\r\n const modified = event\r\n if (useFloats) {\r\n newValue = newValue.replace(/[^0-9.,]/g, '')\r\n newValue = newValue\r\n .replace(/\\./, '#')\r\n .replace(/\\./g, '')\r\n .replace(/#/, '.')\r\n modified.target.value = newValue\r\n } else {\r\n modified.target.value = newValue.replace(/[^0-9]/g, '')\r\n }\r\n\r\n if (onChange) {\r\n onChange(modified)\r\n }\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n )\r\n})\r\n\r\nInputNumber.defaultProps = {\r\n useFloats: false,\r\n}\r\n\r\nexport default Input\r\n","import { useState, useEffect } from 'react'\r\nimport { throttle } from 'throttle-debounce'\r\n\r\ninterface WindowSize {\r\n width: number\r\n height: number\r\n}\r\n\r\nconst useWindowResize = (): WindowSize => {\r\n const [windowSize, setWindowSize] = useState({\r\n width: typeof window === 'undefined' ? 0 : window.innerWidth,\r\n height: typeof window === 'undefined' ? 0 : window.innerHeight,\r\n })\r\n\r\n useEffect(() => {\r\n const onResize = (): void => {\r\n setWindowSize({\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n })\r\n }\r\n\r\n const resizeHandler = throttle(200, onResize)\r\n\r\n window.addEventListener('resize', resizeHandler)\r\n\r\n onResize()\r\n\r\n return () => window.removeEventListener('resize', resizeHandler)\r\n }, [])\r\n\r\n return windowSize\r\n}\r\n\r\nexport { useWindowResize }\r\n","/* eslint-disable react/require-default-props */\r\nimport React from 'react'\r\nimport { createUseStyles, useTheme } from 'react-jss'\r\nimport { Link } from 'react-router-dom'\r\nimport { colors } from '../../../theme/palette'\r\nimport { useWindowResize } from '../../../hooks/useWindowSize'\r\nimport breakpoints from '../../../theme/breakpoints'\r\nimport { Button } from '../Button/Button'\r\n\r\ntype RuleNames = 'row' | 'withHover' | 'wrapper'\r\n\r\ninterface StyleProps {\r\n gridTemplateColumns?: string\r\n minHeight?: string\r\n}\r\n\r\ntype Props = {\r\n gridTemplateColumns?: string\r\n url?: string | undefined\r\n minHeight?: string\r\n onClick?: () => void\r\n useHover?: boolean\r\n showFooter?: boolean\r\n footer?: any\r\n}\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n row: ({ gridTemplateColumns, minHeight }) => {\r\n return {\r\n position: 'relative',\r\n backgroundColor: colors.white,\r\n width: '100%',\r\n color: 'black',\r\n display: 'grid',\r\n gridTemplateColumns,\r\n minHeight: minHeight || '65px',\r\n }\r\n },\r\n wrapper: {\r\n borderRadius: '4px',\r\n marginBottom: '5px',\r\n backgroundColor: colors.white,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n overflow: 'hidden',\r\n },\r\n withHover: {\r\n transition: '.15s ease-in',\r\n '&:hover': {\r\n cursor: 'pointer',\r\n backgroundColor: '#f5f5f5',\r\n },\r\n },\r\n}))\r\n\r\nconst Card: React.FC = ({\r\n gridTemplateColumns = 'repeat( auto-fit, minmax(1px, 1fr) )',\r\n url,\r\n minHeight,\r\n children,\r\n onClick,\r\n useHover,\r\n showFooter,\r\n footer,\r\n}) => {\r\n const windowSize = useWindowResize()\r\n const theme = useTheme()\r\n const classes = useStyles({ ...{ gridTemplateColumns, minHeight }, theme })\r\n\r\n if (windowSize.width >= breakpoints.Desktop) {\r\n if (url) {\r\n return (\r\n
\r\n \r\n {children}\r\n \r\n
\r\n )\r\n }\r\n\r\n return (\r\n
\r\n \r\n {children}\r\n
\r\n {footer && showFooter ?
{footer}
: null}\r\n \r\n )\r\n }\r\n\r\n return null\r\n}\r\n\r\nCard.defaultProps = {\r\n useHover: false,\r\n}\r\n\r\nexport { Card }\r\n","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n container: {\r\n width: '100%',\r\n },\r\n}))\r\n\r\nconst CardList: React.FC = ({ children }) => {\r\n const classes = useStyles()\r\n\r\n return
{children}
\r\n}\r\n\r\nexport { CardList }\r\n","import React from 'react'\r\nimport { createUseStyles, useTheme } from 'react-jss'\r\nimport { Link } from 'react-router-dom'\r\nimport { colors } from '../../../theme/palette'\r\nimport { useWindowResize } from '../../../hooks/useWindowSize'\r\nimport breakpoints from '../../../theme/breakpoints'\r\n\r\ntype RuleNames = 'row'\r\n\r\ninterface StyleProps {\r\n gridTemplateColumns?: string\r\n}\r\n\r\ninterface CardMobileProps {\r\n url?: string | undefined\r\n gridTemplateColumns?: string\r\n onClick?: () => void\r\n}\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n row: ({ gridTemplateColumns }) => {\r\n return {\r\n position: 'relative',\r\n backgroundColor: colors.white,\r\n width: '100%',\r\n color: 'black',\r\n marginBottom: '1rem',\r\n display: 'grid',\r\n gridTemplateColumns,\r\n padding: '10px',\r\n }\r\n },\r\n}))\r\n\r\nconst CardMobile: React.FC = ({\r\n url,\r\n gridTemplateColumns,\r\n onClick,\r\n children,\r\n}) => {\r\n const theme = useTheme()\r\n const classes = useStyles({ ...{ gridTemplateColumns }, theme })\r\n const windowSize = useWindowResize()\r\n\r\n if (windowSize.width < breakpoints.Desktop) {\r\n if (url) {\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n }\r\n\r\n return null\r\n}\r\n\r\nCardMobile.defaultProps = {\r\n gridTemplateColumns: '20% 80%',\r\n}\r\n\r\nexport { CardMobile }\r\n","/* eslint-disable react/require-default-props */\r\nimport React from 'react'\r\nimport { createUseStyles, useTheme } from 'react-jss'\r\nimport { useWindowResize } from '../../../hooks/useWindowSize'\r\nimport breakpoints from '../../../theme/breakpoints'\r\n\r\ntype RuleNames = 'header'\r\n\r\ninterface StyleProps {\r\n gridTemplateColumns?: string\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n header: {\r\n display: 'grid',\r\n gridTemplateColumns: ({ gridTemplateColumns }) => {\r\n return gridTemplateColumns\r\n },\r\n },\r\n})\r\n\r\nconst cellStyles = createUseStyles({\r\n headerCell: {\r\n padding: '.7rem 1rem',\r\n },\r\n})\r\n\r\nconst CardHeader: React.FC = ({\r\n children,\r\n gridTemplateColumns = 'repeat( auto-fit, minmax(1px, 1fr) )',\r\n}) => {\r\n const theme = useTheme()\r\n const classes = useStyles({ ...{ gridTemplateColumns }, theme })\r\n\r\n return
{children}
\r\n}\r\n\r\nconst CardHeaderCell: React.FC = ({ children }) => {\r\n const windowSize = useWindowResize()\r\n const classes = cellStyles()\r\n\r\n if (windowSize.width >= breakpoints.Desktop) {\r\n return
{children}
\r\n }\r\n\r\n return null\r\n}\r\n\r\ntype Props = {\r\n gridTemplateColumns?: string\r\n}\r\n\r\nexport { CardHeader, CardHeaderCell }\r\n","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { colors } from '../../../theme/palette'\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n row: {\r\n backgroundColor: colors.white,\r\n width: '100%',\r\n color: 'black',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n}))\r\n\r\nconst CardContentMobile: React.FC = ({ children }) => {\r\n const classes = useStyles()\r\n\r\n return
{children}
\r\n}\r\n\r\nexport { CardContentMobile }\r\n","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n container: {\r\n position: 'relative',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n flexBasis: 'auto',\r\n padding: '.7rem 1rem',\r\n },\r\n containerOpen: {\r\n position: 'relative',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'start',\r\n flexBasis: 'auto',\r\n padding: '.7rem 1rem',\r\n },\r\n overflowHidden: {\r\n overflow: 'hidden',\r\n },\r\n}))\r\n\r\ninterface ICardCell {\r\n overflowHidden?: boolean\r\n onClick?: () => void\r\n isOpen?: boolean\r\n}\r\n\r\nconst CardCell: React.FC = ({\r\n overflowHidden,\r\n isOpen,\r\n onClick,\r\n children,\r\n}) => {\r\n const classes = useStyles()\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\nCardCell.defaultProps = {\r\n overflowHidden: false,\r\n}\r\n\r\nexport { CardCell }\r\n","import { createUseStyles } from 'react-jss'\r\nimport { colors } from '../../../theme/palette'\r\n\r\ntype RuleNames = 'circle' | 'text' | 'image' | 'iconContainer'\r\ntype RuleNamesCirleIcon = 'iconContainer'\r\n\r\ninterface StyleProps {\r\n mWidth?: string\r\n customRight?: string\r\n fontSize?: string\r\n iconWidth?: string\r\n backgroundColor?: string\r\n borderColor?: string\r\n borderWidth?: string\r\n}\r\n\r\ninterface CirleIconStylesProps {\r\n width: string\r\n backgroundColor?: string\r\n withBorder?: boolean\r\n borderWidth: string\r\n}\r\n\r\nexport const cirleIconStyles = createUseStyles<\r\n RuleNamesCirleIcon,\r\n CirleIconStylesProps,\r\n Jss.Theme\r\n>({\r\n iconContainer: {\r\n position: 'relative',\r\n width: ({ width }) => width,\r\n height: ({ width }) => width,\r\n backgroundColor: ({ backgroundColor }) => {\r\n return backgroundColor || colors.blue300\r\n },\r\n border: ({ borderWidth, withBorder }) => {\r\n return withBorder ? `${borderWidth} solid ${colors.white}` : 'none'\r\n },\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n borderRadius: '50%',\r\n overflow: 'hidden',\r\n aspectRatio: '1/1',\r\n },\r\n})\r\n\r\nexport const styles = createUseStyles({\r\n circle: {\r\n position: 'relative',\r\n width: '100%',\r\n borderRadius: '50%',\r\n overflow: 'hidden',\r\n aspectRatio: '1/1',\r\n marginRight: ({ customRight }) => {\r\n return customRight || '1rem'\r\n },\r\n maxWidth: ({ mWidth }) => mWidth || '2.75rem',\r\n },\r\n text: {\r\n backgroundColor: colors.blue300,\r\n height: '100%',\r\n width: '100%',\r\n borderRadius: '50%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontSize: ({ fontSize }) => fontSize || '1.125rem',\r\n color: colors.green500,\r\n fontWeight: 700,\r\n },\r\n image: {\r\n backgroundColor: colors.black,\r\n height: '100%',\r\n width: '100%',\r\n '& img': {\r\n objectFit: 'cover',\r\n width: '100%',\r\n },\r\n },\r\n iconContainer: {\r\n borderRadius: '50%',\r\n height: '100%',\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: colors.green500,\r\n border: `3px solid ${colors.white}`,\r\n backgroundColor: ({ backgroundColor }) => {\r\n return backgroundColor || colors.blue300\r\n },\r\n borderColor: ({ borderColor }) => {\r\n return borderColor || colors.white\r\n },\r\n borderWidth: ({ borderWidth }) => {\r\n return borderWidth || '3px'\r\n },\r\n\r\n '& > svg': {\r\n width: ({ iconWidth }) => iconWidth || '70%',\r\n },\r\n },\r\n})\r\n","/* eslint-disable react/no-unused-prop-types */\r\nimport React from 'react'\r\nimport { useTheme } from 'react-jss'\r\nimport { styles, cirleIconStyles } from './styles'\r\n\r\ninterface CircleImageProps {\r\n url: string\r\n}\r\ninterface CircleProps {\r\n mWidth?: string\r\n marginRight?: string\r\n fontSize?: string\r\n borderWidth?: string\r\n}\r\n\r\ninterface CircleIconProps {\r\n iconWidth?: string\r\n backgroundColor?: string\r\n borderColor?: string\r\n borderWidth?: string\r\n}\r\n\r\ninterface CircleIcon2Props {\r\n width: string\r\n backgroundColor?: string\r\n withBorder?: boolean\r\n borderWidth?: string\r\n}\r\n\r\n// TODO Add extra icon (over) possibility - for ex. edit profile pic\r\n\r\nconst Circle: React.FC = ({\r\n children,\r\n mWidth = '2.75rem',\r\n marginRight = '1rem',\r\n}) => {\r\n const theme = useTheme()\r\n const classes = styles({\r\n ...{ mWidth, customRight: marginRight },\r\n theme,\r\n })\r\n\r\n return
{children}
\r\n}\r\n\r\nconst CircleText: React.FC = ({\r\n children,\r\n fontSize = '1.125rem',\r\n}) => {\r\n const theme = useTheme()\r\n const classes = styles({\r\n ...{ fontSize },\r\n theme,\r\n })\r\n\r\n return
{children}
\r\n}\r\n\r\nconst CircleIcon: React.FC = ({\r\n children,\r\n iconWidth,\r\n backgroundColor,\r\n borderColor,\r\n borderWidth,\r\n}) => {\r\n const theme = useTheme()\r\n const classes = styles({\r\n ...{ iconWidth, backgroundColor, borderColor, borderWidth },\r\n theme,\r\n })\r\n\r\n return
{children}
\r\n}\r\n\r\nconst CircleIcon2: React.FC = ({\r\n width,\r\n backgroundColor,\r\n children,\r\n withBorder,\r\n borderWidth,\r\n}) => {\r\n const theme = useTheme()\r\n const classes = cirleIconStyles({\r\n ...{\r\n width,\r\n backgroundColor,\r\n withBorder,\r\n borderWidth,\r\n },\r\n theme,\r\n })\r\n\r\n return
{children}
\r\n}\r\n\r\nconst CircleImage: React.FC = ({ url }) => {\r\n const theme = useTheme()\r\n const classes = styles({\r\n ...{},\r\n theme,\r\n })\r\n\r\n return (\r\n
\r\n \"profileimage\"\r\n
\r\n )\r\n}\r\n\r\nCircle.defaultProps = {\r\n mWidth: '2.75rem',\r\n marginRight: '1rem',\r\n}\r\n\r\nCircleIcon2.defaultProps = {\r\n borderWidth: '3px',\r\n}\r\n\r\nexport { Circle, CircleText, CircleImage, CircleIcon, CircleIcon2 }\r\n","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { ChevronRight } from '../../../assets/icons'\r\nimport { colors } from '../../../theme/palette'\r\nimport { sortProperty, sortProperties } from '../../../utils/sortHelper'\r\n\r\ninterface Props {\r\n onClick: (event: React.MouseEvent) => void\r\n sort: sortProperty\r\n name: sortProperties\r\n}\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n button: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '0.75em 0',\r\n margin: '0 0.3em 0.3em 0',\r\n borderRadius: '6px',\r\n boxSizing: 'border-box',\r\n textDecoration: 'none',\r\n fontWeight: 400,\r\n textAlign: 'center',\r\n transition: 'all 0.2s',\r\n boxShadow: 0,\r\n '&:hover': {\r\n cursor: 'pointer',\r\n color: colors.black,\r\n fontWeight: '700',\r\n },\r\n '-webkit-appearance': 'none',\r\n '-moz-appearance': 'none',\r\n fontStyle: 'normal',\r\n fontSize: '16px',\r\n lineHeight: '120%',\r\n color: '#000000',\r\n border: 0,\r\n background: 'none',\r\n '&.active': {\r\n textDecoration: 'underline',\r\n fontWeight: '700',\r\n },\r\n },\r\n icon: {\r\n display: 'flex',\r\n transform: 'rotate(-90deg)',\r\n position: 'relative',\r\n marginLeft: '10px',\r\n top: '1px',\r\n '.active &.ascending': {\r\n transform: 'rotate(90deg)',\r\n },\r\n },\r\n}))\r\n\r\nconst SortButton: React.FC = ({ onClick, sort, name, children }) => {\r\n const classes = useStyles()\r\n\r\n return (\r\n \r\n {children}\r\n\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport { SortButton }\r\n","export const getInitials = (nameString: string): string => {\r\n const fullName = nameString.split(' ')\r\n const initials = fullName.shift().charAt(0) + fullName.pop().charAt(0)\r\n return initials.toUpperCase()\r\n}\r\n","/* eslint-disable max-classes-per-file */\r\nexport interface Idata {\r\n Nummer: number\r\n Navn: string\r\n KortNavn?: string\r\n Type?: string\r\n}\r\n\r\nexport interface IdataTRfor {\r\n KortNavn: string\r\n Navn: string\r\n Sorteringsorden: number\r\n Type: string\r\n Medlemsidenter: number[]\r\n}\r\n\r\nexport class FilterWorkplace {\r\n name = ''\r\n\r\n id = 0\r\n\r\n static build(data: Idata): FilterWorkplace {\r\n const workPlace = new FilterWorkplace()\r\n\r\n workPlace.id = data.Nummer\r\n workPlace.name = data.Navn\r\n\r\n return workPlace\r\n }\r\n}\r\n\r\nexport class FilterWorkGroup {\r\n name = ''\r\n\r\n id = 0\r\n\r\n static build(data: Idata): FilterWorkGroup {\r\n const workGroup = new FilterWorkGroup()\r\n\r\n workGroup.id = data.Nummer\r\n workGroup.name = data.Navn\r\n\r\n return workGroup\r\n }\r\n}\r\n\r\nexport class FilterPosition {\r\n name = ''\r\n\r\n id = 0\r\n\r\n static build(data: Idata): FilterPosition {\r\n const obj = new FilterPosition()\r\n\r\n obj.id = data.Nummer\r\n obj.name = data.Navn\r\n\r\n return obj\r\n }\r\n}\r\n\r\nexport class FilterTypeOfRepresentative {\r\n name = ''\r\n\r\n type = ''\r\n\r\n shortName = ''\r\n\r\n static build(data: Idata): FilterTypeOfRepresentative {\r\n const obj = new FilterTypeOfRepresentative()\r\n\r\n obj.name = data.Navn\r\n obj.type = data.Type ? data.Type : ''\r\n obj.shortName = data.KortNavn ? data.KortNavn : ''\r\n\r\n return obj\r\n }\r\n}\r\n\r\nexport class FilterTRFor {\r\n shortName = ''\r\n\r\n name = ''\r\n\r\n sort = 0\r\n\r\n type = ''\r\n\r\n memberIds: number[]\r\n\r\n displayName = ''\r\n\r\n static build(data: IdataTRfor): FilterTRFor {\r\n const obj = new FilterTRFor()\r\n\r\n obj.name = data.Navn\r\n obj.displayName = `${data.Navn}(${data.KortNavn})`\r\n obj.shortName = data.KortNavn\r\n obj.sort = data.Sorteringsorden\r\n obj.type = data.Type\r\n obj.memberIds = data.Medlemsidenter\r\n\r\n return obj\r\n }\r\n}\r\n\r\nexport interface IFilter {\r\n workplaces: FilterWorkplace[]\r\n groups: FilterWorkGroup[]\r\n positions: FilterPosition[]\r\n typeOfRepresentative: FilterTypeOfRepresentative[]\r\n representing: FilterTRFor[]\r\n}\r\n\r\nexport const initialFilter: IFilter = {\r\n workplaces: [],\r\n groups: [],\r\n typeOfRepresentative: [],\r\n representing: [],\r\n positions: [],\r\n}\r\n\r\nexport const initialSelectedFilters: IFilter = {\r\n workplaces: [],\r\n groups: [],\r\n typeOfRepresentative: [],\r\n representing: [],\r\n positions: [],\r\n}\r\n","import {\r\n initialFilter,\r\n FilterWorkplace,\r\n IFilter,\r\n FilterWorkGroup,\r\n FilterPosition,\r\n FilterTypeOfRepresentative,\r\n Idata,\r\n IdataTRfor,\r\n FilterTRFor,\r\n} from '../models/Filter'\r\n\r\nimport { Member } from '../models/Member'\r\n\r\nexport type IFilterData = {\r\n UdsoegteArbejdssteder: Idata[]\r\n UdsoegteFaggrupper: Idata[]\r\n UdsoegteStillinger: Idata[]\r\n UdsoegteTillidshverv: Idata[]\r\n TRTillidshvervMedlemLister: IdataTRfor[]\r\n}\r\n\r\nexport function filterTypeOfRepresentative(\r\n pots: FilterTypeOfRepresentative[],\r\n items: Member[]\r\n): Member[] {\r\n const filtered: Member[] = []\r\n\r\n items.forEach((member) => {\r\n return member.typeOfRepresentatives.forEach((pot) => {\r\n const isFound = pots.some((element) => {\r\n if (element.name === pot.name) {\r\n return true\r\n }\r\n\r\n return false\r\n })\r\n\r\n if (isFound) {\r\n filtered.push(member)\r\n }\r\n })\r\n })\r\n\r\n return filtered\r\n}\r\n\r\nexport function filterWorkplaces(\r\n workplaces: FilterWorkplace[],\r\n items: Member[]\r\n): Member[] {\r\n const filtered: Member[] = []\r\n\r\n items.forEach((member) => {\r\n return member.workPlaces.forEach((workPlace) => {\r\n const isFound = workplaces.some((element) => {\r\n if (element.id === workPlace.number) {\r\n return true\r\n }\r\n\r\n return false\r\n })\r\n\r\n if (isFound) {\r\n if (!filtered.find((m) => m.memberId === member.memberId)) {\r\n filtered.push(member)\r\n }\r\n }\r\n })\r\n })\r\n\r\n return filtered\r\n}\r\n\r\nexport function filterWorkgroups(\r\n workgroups: FilterWorkGroup[],\r\n items: Member[]\r\n): Member[] {\r\n const filtered: Member[] = []\r\n\r\n items.forEach((member) => {\r\n return member.positions.forEach((position) => {\r\n const isFound = workgroups.some((element) => {\r\n if (element.id === position.group.id) {\r\n return true\r\n }\r\n\r\n return false\r\n })\r\n\r\n if (isFound) {\r\n if (!filtered.find((m) => m.memberId === member.memberId)) {\r\n filtered.push(member)\r\n }\r\n }\r\n })\r\n })\r\n\r\n return filtered\r\n}\r\n\r\nexport function filterPositions(\r\n positions: FilterPosition[],\r\n items: Member[]\r\n): Member[] {\r\n const filtered: Member[] = []\r\n\r\n items.forEach((member) => {\r\n return member.positions.forEach((position) => {\r\n const isFound = positions.some((element) => {\r\n if (element.id === position.id) {\r\n return true\r\n }\r\n\r\n return false\r\n })\r\n\r\n if (isFound) {\r\n if (!filtered.find((m) => m.memberId === member.memberId)) {\r\n filtered.push(member)\r\n }\r\n }\r\n })\r\n })\r\n\r\n return filtered\r\n}\r\n\r\nexport function filterTRforHelper(\r\n trFor: FilterTRFor[],\r\n items: Member[]\r\n): Member[] {\r\n const filtered: Member[] = []\r\n\r\n trFor.forEach((filter) => {\r\n filter.memberIds.forEach((id) => {\r\n const m = items.find((mem) => mem.memberId === id)\r\n\r\n if (m) filtered.push(m)\r\n })\r\n })\r\n\r\n return filtered\r\n}\r\n\r\nexport function initFilter(data: IFilterData): IFilter {\r\n const filter = { ...initialFilter }\r\n\r\n if (data.UdsoegteArbejdssteder) {\r\n filter.workplaces = data.UdsoegteArbejdssteder.map((workPlace: Idata) =>\r\n FilterWorkplace.build(workPlace)\r\n )\r\n }\r\n\r\n if (data.UdsoegteFaggrupper) {\r\n filter.groups = data.UdsoegteFaggrupper.map((group: Idata) =>\r\n FilterWorkGroup.build(group)\r\n )\r\n }\r\n\r\n if (data.UdsoegteStillinger) {\r\n filter.positions = data.UdsoegteStillinger.map((position: Idata) =>\r\n FilterPosition.build(position)\r\n )\r\n }\r\n\r\n if (data.UdsoegteTillidshverv) {\r\n filter.typeOfRepresentative = data.UdsoegteTillidshverv.map(\r\n (trust: Idata) => FilterTypeOfRepresentative.build(trust)\r\n )\r\n }\r\n\r\n if (data.TRTillidshvervMedlemLister) {\r\n filter.representing = data.TRTillidshvervMedlemLister.map(\r\n (trfor: IdataTRfor) => FilterTRFor.build(trfor)\r\n )\r\n }\r\n\r\n return filter\r\n}\r\n\r\nexport function filterItems(selected: IFilter, items: Member[]): Member[] {\r\n let filtered = [...items]\r\n\r\n if (selected.representing.length) {\r\n filtered = filterTRforHelper(selected.representing, filtered)\r\n }\r\n\r\n if (selected.workplaces.length) {\r\n filtered = filterWorkplaces(selected.workplaces, filtered)\r\n }\r\n\r\n if (selected.groups.length) {\r\n filtered = filterWorkgroups(selected.groups, filtered)\r\n }\r\n\r\n if (selected.positions.length) {\r\n filtered = filterPositions(selected.positions, filtered)\r\n }\r\n\r\n if (selected.typeOfRepresentative.length) {\r\n filtered = filterTypeOfRepresentative(\r\n selected.typeOfRepresentative,\r\n filtered\r\n )\r\n }\r\n\r\n return filtered\r\n}\r\n\r\nexport function updateWorkplaces(\r\n workPlace: FilterWorkplace,\r\n selectedItems: IFilter\r\n): IFilter {\r\n const selected = { ...selectedItems }\r\n\r\n const isFound = selected.workplaces.some((item) => item.id === workPlace.id)\r\n const workplaces = [...selectedItems.workplaces]\r\n\r\n if (isFound) {\r\n const indexOf = workplaces.findIndex((w) => w.id === workPlace.id)\r\n workplaces.splice(indexOf, 1)\r\n selected.workplaces = workplaces\r\n } else {\r\n workplaces.push(workPlace)\r\n selected.workplaces = workplaces\r\n }\r\n\r\n return selected\r\n}\r\n\r\nexport function updatePositions(\r\n position: FilterPosition,\r\n selectedItems: IFilter\r\n): IFilter {\r\n const selected = { ...selectedItems }\r\n\r\n const isFound = selected.positions.some((item) => item.id === position.id)\r\n const positions = [...selectedItems.positions]\r\n\r\n if (isFound) {\r\n const indexOf = positions.findIndex((w) => w.id === position.id)\r\n positions.splice(indexOf, 1)\r\n selected.positions = positions\r\n } else {\r\n positions.push(position)\r\n selected.positions = positions\r\n }\r\n\r\n return selected\r\n}\r\n\r\nexport function updateTypeOfRepresentatives(\r\n position: FilterTypeOfRepresentative,\r\n selectedItems: IFilter\r\n): IFilter {\r\n const selected = { ...selectedItems }\r\n\r\n const isFound = selected.typeOfRepresentative.some(\r\n (item) => item.name === position.name\r\n )\r\n const positions = [...selectedItems.typeOfRepresentative]\r\n\r\n if (isFound) {\r\n const indexOf = positions.findIndex((p) => p.name === position.name)\r\n positions.splice(indexOf, 1)\r\n selected.typeOfRepresentative = positions\r\n } else {\r\n positions.push(position)\r\n selected.typeOfRepresentative = positions\r\n }\r\n\r\n return selected\r\n}\r\n\r\nexport function updateTRFor(\r\n duty: FilterTRFor,\r\n selectedItems: IFilter\r\n): IFilter {\r\n const selected = { ...selectedItems }\r\n\r\n const isFound = selected.representing.some(\r\n (item) => item.name === duty.name\r\n )\r\n const trFors = [...selectedItems.representing]\r\n\r\n if (isFound) {\r\n const indexOf = trFors.findIndex((t) => t.name === duty.name)\r\n trFors.splice(indexOf, 1)\r\n selected.representing = trFors\r\n } else {\r\n trFors.push(duty)\r\n selected.representing = trFors\r\n }\r\n\r\n return selected\r\n}\r\n\r\nexport function updateGroups(\r\n group: FilterWorkGroup,\r\n selectedItems: IFilter\r\n): IFilter {\r\n const selected = { ...selectedItems }\r\n const isFound = selected.groups.some((item) => item.id === group.id)\r\n const groups = [...selectedItems.groups]\r\n\r\n if (isFound) {\r\n const indexOf = groups.findIndex((w) => w.id === group.id)\r\n groups.splice(indexOf, 1)\r\n selected.groups = groups\r\n } else {\r\n groups.push(group)\r\n selected.groups = groups\r\n }\r\n\r\n return selected\r\n}\r\n","import { atom, useAtom } from 'jotai'\r\nimport { atomWithQuery } from 'jotai/query'\r\nimport { AxiosResponse } from 'axios'\r\nimport { axiosWithAuth, axiosWithImitator } from '../withAuth'\r\nimport {\r\n mapMembers,\r\n IMemberData,\r\n IUpdateMemberData,\r\n Member,\r\n ICancelWorkplace,\r\n} from '../../models/Member'\r\nimport { IFilterData, initFilter } from '../../utils/filterhelper'\r\nimport { IFilter } from '../../models/Filter'\r\nimport { mapWorkplaces, Workplace } from '../../models/Workplace'\r\n\r\nexport type TypeResponseGetMembers = {\r\n Medlemmer: IMemberData[]\r\n}\r\nexport type TypeResponse = TypeResponseGetMembers & IFilterData\r\nconst idAtom = atom(1)\r\n\r\nconst membersAtom = atomWithQuery((get) => ({\r\n queryKey: ['members', get(idAtom)],\r\n queryFn: async () => {\r\n // const url = `/medlem/hentegnemedlemmer`\r\n const url = '/medlem/hentegnemedlemmerprarbejdsstedprtrhverv'\r\n const response = await axiosWithImitator.get(url)\r\n\r\n const { data } = response\r\n return {\r\n members: mapMembers(data.Medlemmer),\r\n filter: initFilter(data),\r\n }\r\n },\r\n}))\r\n\r\nconst getOwnMembers = async (): Promise<{\r\n members: Member[]\r\n filter: IFilter\r\n}> => {\r\n const response = await axiosWithImitator.get(`/medlem/hentegnemedlemmer`)\r\n\r\n const { data } = response\r\n return {\r\n members: mapMembers(data.Medlemmer),\r\n filter: initFilter(data),\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\r\nconst searchMembers = async (queryString: string) => {\r\n let error\r\n try {\r\n const response = await axiosWithImitator.get(\r\n `/medlem/soegallemedlemmer?${queryString}`\r\n )\r\n\r\n return response\r\n } catch (err) {\r\n error = err\r\n return error\r\n }\r\n}\r\n\r\nconst getOwnMember = async (id: string): Promise => {\r\n const response = await axiosWithImitator.get(\r\n `/medlem/hentegetmedlem?request.medlemsident=${id}`\r\n )\r\n\r\n return response\r\n}\r\n\r\nconst getMemberAfterSearch = async (id: number): Promise => {\r\n const response = await axiosWithImitator.get(\r\n `/medlem/hentsoegmedlem?request.medlemsident=${id}`\r\n )\r\n\r\n return response\r\n}\r\n\r\nconst updateOwnMember = async (\r\n values: IUpdateMemberData\r\n): Promise => {\r\n const response = await axiosWithImitator.post(\r\n `/opdatering/opdatermedlem`,\r\n values\r\n )\r\n return response\r\n}\r\n\r\n// opdatering/opdaterogtilfoejeksisterendemedlem\r\nconst addMemberToOwnList = async (\r\n values: IUpdateMemberData\r\n): Promise => {\r\n const response = await axiosWithImitator.post(\r\n `/opdatering/opdaterogtilfoejeksisterendemedlem`,\r\n values\r\n )\r\n return response\r\n}\r\n\r\n// opdatering/tilfoejmedlemarbejdssted\r\nconst addMemberToWorkplace = async (\r\n values: IUpdateMemberData\r\n): Promise => {\r\n const response = await axiosWithImitator.post(\r\n `/opdatering/tilfoejmedlemarbejdssted`,\r\n values\r\n )\r\n return response\r\n}\r\n\r\nconst cancelMemberFromWorkplace = async (\r\n values: ICancelWorkplace\r\n): Promise => {\r\n const response = await axiosWithImitator.post(\r\n `/opdatering/medlemophoert`,\r\n values\r\n )\r\n return response\r\n}\r\n\r\n// /medlem/hentegnemedlemmerprarbejdsstedprtrhverv\r\nconst getMemberWorkPlaces = async (): Promise<{\r\n workplaces: Workplace[]\r\n}> => {\r\n const response = await axiosWithImitator.get(\r\n '/medlem/hentegnemedlemmerprarbejdsstedprtrhverv'\r\n )\r\n\r\n return {\r\n workplaces: mapWorkplaces(response.data.ArbejdsstedTRHvervMedlemLister),\r\n }\r\n}\r\n\r\nexport {\r\n membersAtom,\r\n searchMembers,\r\n getMemberAfterSearch,\r\n getOwnMember,\r\n getOwnMembers,\r\n updateOwnMember,\r\n addMemberToOwnList,\r\n addMemberToWorkplace,\r\n cancelMemberFromWorkplace,\r\n getMemberWorkPlaces,\r\n}\r\n","import { Update } from '@reduxjs/toolkit'\r\nimport { Member } from '../models/Member'\r\nimport { Note } from '../models/Note'\r\nimport { UpdateBatch } from '../models/UpdateBatch'\r\nimport { Workplace } from '../models/Workplace'\r\n\r\nexport type sortProperties =\r\n | 'name'\r\n | 'arbejdssted'\r\n | 'status'\r\n | 'notes'\r\n | 'isOwnMember'\r\n | 'department'\r\n | 'birthday'\r\n | 'age'\r\n | 'date'\r\n | 'favorite'\r\n | 'created'\r\n | 'updateType'\r\n | 'updateProfile'\r\n | 'updateUpdated'\r\n | 'numberOfMembers'\r\n | 'isRead'\r\nexport type sortDirectionType = 'ascending' | 'descending '\r\n\r\nexport type sortProperty = {\r\n direction: sortDirectionType\r\n property: sortProperties\r\n}\r\n\r\nexport interface ISortName {\r\n property: Extract\r\n}\r\n\r\nfunction compareName(objectA: T, objectB: T, sorter: ISortName): number {\r\n if (objectA[sorter.property] < objectB[sorter.property]) {\r\n return -1\r\n }\r\n\r\n if (objectA[sorter.property] > objectB[sorter.property]) {\r\n return 1\r\n }\r\n return 0\r\n}\r\n\r\nfunction compareMemberOnUpdateName(a: UpdateBatch, b: UpdateBatch): number {\r\n if (a.member.fullName < b.member.fullName) {\r\n return -1\r\n }\r\n\r\n if (a.member.fullName > b.member.fullName) {\r\n return 1\r\n }\r\n return 0\r\n}\r\n\r\nfunction compareProfileOnUpdateName(a: UpdateBatch, b: UpdateBatch): number {\r\n if (a.profile.fullName < b.profile.fullName) {\r\n return -1\r\n }\r\n\r\n if (a.profile.fullName > b.profile.fullName) {\r\n return 1\r\n }\r\n return 0\r\n}\r\n\r\nfunction sortByNoteFavorite(notes: Note[]): Note[] {\r\n return notes.sort((a: Note, b: Note) => {\r\n if (a.isFavorite) return -1\r\n if (b.isFavorite) return 1\r\n return 0\r\n })\r\n}\r\n\r\nfunction sortByDate(members: Member[]): Member[] {\r\n return members.sort(\r\n (a: Member, b: Member) => b.birthday.getTime() - a.birthday.getTime()\r\n )\r\n}\r\n\r\nfunction sortByNoteDate(notes: Note[]): Note[] {\r\n return notes.sort(\r\n (a: Note, b: Note) => b.updated.getTime() - a.updated.getTime()\r\n )\r\n}\r\n\r\nfunction sortByUpdateCreatedDate(updates: UpdateBatch[]): UpdateBatch[] {\r\n return updates.sort(\r\n (a: UpdateBatch, b: UpdateBatch) =>\r\n new Date(b.created).getTime() - new Date(a.created).getTime()\r\n )\r\n}\r\n\r\nfunction sortByUpdateUpdatedDate(updates: UpdateBatch[]): UpdateBatch[] {\r\n return updates.sort(\r\n (a: UpdateBatch, b: UpdateBatch) =>\r\n new Date(b.updated).getTime() - new Date(a.updated).getTime()\r\n )\r\n}\r\n\r\nfunction compareAge(a: Member, b: Member): number {\r\n if (a.age < b.age) {\r\n return -1\r\n }\r\n if (a.age > b.age) {\r\n return 1\r\n }\r\n return 0\r\n}\r\n\r\nfunction compareWorkplaces(a: Member, b: Member): number {\r\n if (\r\n a.primaryWorkPlace.name.toLowerCase() <\r\n b.primaryWorkPlace.name.toLowerCase()\r\n ) {\r\n return -1\r\n }\r\n if (\r\n a.primaryWorkPlace.name.toLowerCase() >\r\n b.primaryWorkPlace.name.toLowerCase()\r\n ) {\r\n return 1\r\n }\r\n return 0\r\n}\r\n\r\nfunction compareStatus(a: Member): number {\r\n if (a.status === 'AfventerGodkendelse') {\r\n return -1\r\n }\r\n if (a.status === 'IkkeOpdateret ') {\r\n return 1\r\n }\r\n return 0\r\n}\r\n\r\nfunction compareNotes(a: Member | Workplace, b: Member | Workplace): number {\r\n if (a.numberOfNotes < b.numberOfNotes) {\r\n return -1\r\n }\r\n if (a.numberOfNotes > b.numberOfNotes) {\r\n return 1\r\n }\r\n return 0\r\n}\r\n\r\nfunction compareIsRead(a: Note): number {\r\n if (!a.isRead) {\r\n return -1\r\n }\r\n if (a.isRead) {\r\n return 1\r\n }\r\n return 0\r\n}\r\n\r\nfunction compareNumberOfMembersOnWorkplace(a: Workplace, b: Workplace): number {\r\n if (a.numberOfMembers < b.numberOfMembers) {\r\n return -1\r\n }\r\n if (a.numberOfMembers > b.numberOfMembers) {\r\n return 1\r\n }\r\n return 0\r\n}\r\n\r\nfunction compareIsOwnMember(a: Member): number {\r\n if (a.isOwnMember) {\r\n return -1\r\n }\r\n if (!a.isOwnMember) {\r\n return 1\r\n }\r\n return 0\r\n}\r\n\r\nfunction compareDepartments(a: Member, b: Member): number {\r\n if (\r\n a.department.name &&\r\n b.department.name &&\r\n a.department.name.toLowerCase() < b.department.name.toLowerCase()\r\n ) {\r\n return -1\r\n }\r\n if (\r\n a.department.name &&\r\n b.department.name &&\r\n a.department.name.toLowerCase() > b.department.name.toLowerCase()\r\n ) {\r\n return 1\r\n }\r\n return 0\r\n}\r\n\r\nexport const sortWorkplacesBy = (\r\n workplaces: Workplace[],\r\n sort: sortProperty\r\n): Workplace[] => {\r\n let sorted = [...workplaces]\r\n\r\n switch (sort.property) {\r\n case 'name':\r\n sorted = sorted.sort((a, b) =>\r\n compareName(a, b, { property: 'name' })\r\n )\r\n break\r\n case 'numberOfMembers':\r\n sorted = sorted.sort(compareNumberOfMembersOnWorkplace)\r\n break\r\n case 'notes':\r\n sorted = sorted.sort(compareNotes)\r\n break\r\n\r\n default:\r\n break\r\n }\r\n\r\n if (sort.direction === 'descending ') sorted = sorted.reverse()\r\n\r\n return sorted\r\n}\r\n\r\nexport const sortUpdatesBy = (\r\n updates: UpdateBatch[],\r\n sort: sortProperty\r\n): UpdateBatch[] => {\r\n let sorted = [...updates]\r\n\r\n switch (sort.property) {\r\n case 'status': {\r\n const sorted1 = sorted.filter(\r\n (item) => item.status === 'FaerdigBehandlet'\r\n )\r\n const sorted2 = sorted.filter(\r\n (item) => item.status === 'UnderOpdatering'\r\n )\r\n sorted = [...sorted1, ...sorted2]\r\n break\r\n }\r\n\r\n case 'created':\r\n sorted = sortByUpdateCreatedDate(sorted)\r\n break\r\n case 'name':\r\n sorted = sorted.sort((a, b) => compareMemberOnUpdateName(a, b))\r\n break\r\n case 'updateType':\r\n sorted = sorted.sort((a, b) =>\r\n compareName(a, b, { property: 'type' })\r\n )\r\n break\r\n case 'updateProfile':\r\n sorted = sorted.sort((a, b) => compareProfileOnUpdateName(a, b))\r\n break\r\n case 'updateUpdated':\r\n sorted = sortByUpdateUpdatedDate(sorted)\r\n break\r\n\r\n default:\r\n break\r\n }\r\n\r\n if (sort.direction === 'descending ') sorted = sorted.reverse()\r\n\r\n return sorted\r\n}\r\n\r\nexport const sortNotesByDateAndIsRead = (\r\n notes: Note[],\r\n reverse?: boolean\r\n): Note[] => {\r\n // Find all is read.\r\n let isRead = notes.filter((n) => n.isRead)\r\n let isNotRead = notes.filter((n) => !n.isRead)\r\n isRead = sortByNoteDate(isRead)\r\n isNotRead = sortByNoteDate(isNotRead)\r\n\r\n return !reverse ? [...isNotRead, ...isRead] : [...isRead, ...isNotRead]\r\n}\r\n\r\nexport const sortNotesBy = (notes: Note[], sort: sortProperty): Note[] => {\r\n let sortedNotes = [...notes]\r\n\r\n switch (sort.property) {\r\n case 'isRead':\r\n sortedNotes = sortedNotes.sort(compareIsRead)\r\n\r\n sortedNotes = sortNotesByDateAndIsRead(\r\n sortedNotes,\r\n sort.direction === 'descending '\r\n )\r\n\r\n break\r\n case 'name':\r\n sortedNotes = sortedNotes.sort((a, b) =>\r\n compareName(a, b, { property: 'name' })\r\n )\r\n break\r\n case 'date':\r\n sortedNotes = sortByNoteDate(sortedNotes)\r\n break\r\n\r\n case 'favorite':\r\n sortedNotes = sortByNoteFavorite(sortedNotes).sort()\r\n break\r\n\r\n default:\r\n break\r\n }\r\n\r\n if (sort.direction === 'descending ' && sort.property !== 'isRead')\r\n sortedNotes = sortedNotes.reverse()\r\n\r\n return sortedNotes\r\n}\r\n\r\nexport const sortBy = (members: Member[], sort: sortProperty): Member[] => {\r\n let sortedMembers = [...members]\r\n\r\n switch (sort.property) {\r\n case 'name':\r\n sortedMembers = sortedMembers.sort((a, b) =>\r\n compareName(a, b, { property: 'fullName' })\r\n )\r\n break\r\n\r\n case 'arbejdssted':\r\n sortedMembers = sortedMembers.sort(compareWorkplaces)\r\n break\r\n\r\n case 'status':\r\n sortedMembers = sortedMembers.sort(compareStatus)\r\n break\r\n\r\n case 'notes':\r\n sortedMembers = sortedMembers.sort(compareNotes)\r\n break\r\n\r\n case 'isOwnMember':\r\n sortedMembers = sortedMembers.sort(compareIsOwnMember)\r\n break\r\n\r\n case 'department':\r\n sortedMembers = sortedMembers.sort(compareDepartments)\r\n break\r\n\r\n case 'birthday':\r\n sortedMembers = sortByDate(sortedMembers)\r\n break\r\n case 'age':\r\n sortedMembers = sortedMembers.sort(compareAge)\r\n break\r\n\r\n default:\r\n break\r\n }\r\n\r\n if (sort.direction === 'descending ')\r\n sortedMembers = sortedMembers.reverse()\r\n\r\n return sortedMembers\r\n}\r\n","// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\r\nexport const filterByValue = (\r\n array: any[],\r\n value: string,\r\n includes?: string[]\r\n) => {\r\n const searchables = includes\r\n ? includes.map((include) => `searchable_${include}`)\r\n : undefined\r\n\r\n return array.filter((o) =>\r\n Object.keys(o).some((k) => {\r\n if (\r\n searchables &&\r\n searchables.length &&\r\n searchables.indexOf(k) === -1\r\n )\r\n return false\r\n\r\n if (\r\n typeof o[k] === 'string' &&\r\n o[k].toLowerCase().includes(value.toLowerCase())\r\n ) {\r\n return true\r\n }\r\n\r\n if (\r\n typeof o[k] === 'number' &&\r\n o[k].toString().includes(Math.abs(+value))\r\n ) {\r\n return true\r\n }\r\n\r\n return false\r\n })\r\n )\r\n}\r\n","import axios from 'axios'\r\nimport { atom } from 'jotai'\r\nimport { atomWithQuery } from 'jotai/query'\r\n\r\nconst apiKey = process.env.REACT_APP_LOKALISE_API_TOKEN\r\nconst projectId = process.env.REACT_APP_LOKALISE_PROJECT_ID\r\n\r\nexport interface ITranslations {\r\n [id: string]: string\r\n}\r\n\r\nconst idAtom = atom(1)\r\n\r\nconst getLokaliseDataFromApi = async (): Promise => {\r\n // const config = {\r\n // headers: {\r\n // 'x-api-token': apiKey,\r\n // },\r\n // }\r\n\r\n // let base = 'https://murmuring-castle-14887.herokuapp.com/'\r\n\r\n // if (process.env.NODE_ENV !== 'production') {\r\n // base = ''\r\n // }\r\n\r\n // const response = await axios.get(\r\n // `${base}https://api.lokalise.com/api2/projects/${projectId}/translations?limit=1000`,\r\n // config\r\n // )\r\n // const keys = await axios.get(\r\n // `${base}https://api.lokalise.com/api2/projects/${projectId}/keys?limit=1000`,\r\n // config\r\n // )\r\n\r\n // const translations: ITranslations = {}\r\n // // eslint-disable-next-line no-restricted-syntax\r\n // for (const val of keys.data.keys) {\r\n // translations[val.key_name.web] = response.data.translations.find(\r\n // (trans) => trans.key_id === val.key_id\r\n // ).translation\r\n // }\r\n const response = await axios.get(\r\n 'https://lokalise-foa-sandbox.azurewebsites.net/get'\r\n )\r\n return response.data\r\n}\r\n\r\nconst getLokaliseData = atomWithQuery((get) => ({\r\n queryKey: ['lokalise', get(idAtom)],\r\n queryFn: async ({ queryKey: [,] }) => {\r\n const config = {\r\n headers: {\r\n 'x-api-token': apiKey,\r\n },\r\n }\r\n\r\n let base = 'https://murmuring-castle-14887.herokuapp.com/'\r\n\r\n if (process.env.NODE_ENV !== 'production') {\r\n base = ''\r\n }\r\n\r\n const response = await axios.get(\r\n `${base}https://api.lokalise.com/api2/projects/${projectId}/translations`,\r\n config\r\n )\r\n const keys = await axios.get(\r\n `${base}https://api.lokalise.com/api2/projects/${projectId}/keys`,\r\n config\r\n )\r\n\r\n const translations: ITranslations = {}\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const val of keys.data.keys) {\r\n translations[val.key_name.web] = response.data.translations.find(\r\n (trans) => trans.key_id === val.key_id\r\n ).translation\r\n }\r\n return translations\r\n },\r\n}))\r\n\r\nexport { getLokaliseData, getLokaliseDataFromApi }\r\n","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n loader: {\r\n width: '100vw',\r\n height: '100vh',\r\n display: 'flex',\r\n position: 'fixed',\r\n top: 0,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n left: '0',\r\n zIndex: 4,\r\n },\r\n}))\r\n\r\nconst Spinner: React.FC = () => {\r\n const classes = useStyles()\r\n return (\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 { Spinner }\r\n","// import axios from 'axios'\r\n// import { atom, useAtom } from 'jotai'\r\n// import { atomWithQuery } from 'jotai/query'\r\nimport React, { useEffect, useState } from 'react'\r\nimport {\r\n ITranslations,\r\n getLokaliseData,\r\n getLokaliseDataFromApi,\r\n} from '../../store/lokalise/lokaliseAtom'\r\nimport { Spinner } from '../ui/Loaders/Spinner'\r\nimport myData from './translations.json'\r\n// const lokaliseAtom = atom({})\r\n\r\n// const lAtom = atom((get) => {\r\n// return get(lokaliseAtom)\r\n// })\r\n\r\ninterface IReplacement {\r\n [id: string]: string\r\n}\r\n\r\nconst setLokalise = (translations: ITranslations): void => {\r\n localStorage.setItem('translations', JSON.stringify(translations))\r\n}\r\n\r\nconst getLokalise = (): ITranslations | undefined => {\r\n const translations = localStorage.getItem('translations')\r\n\r\n return JSON.parse(translations)\r\n}\r\n\r\nconst L = (key: string): string => {\r\n let value = '-'\r\n // const [lData] = useAtom(lAtom)\r\n const lData = getLokalise()\r\n if (lData && lData[key]) {\r\n value = lData[key]\r\n }\r\n\r\n return value\r\n}\r\n\r\nconst L_HTML = (key: string, replacements?: IReplacement): JSX.Element => {\r\n let value = '-'\r\n const lData = getLokalise()\r\n if (lData && lData[key]) {\r\n value = lData[key]\r\n }\r\n let manipulated = value\r\n\r\n if (replacements && Object.keys(replacements).length) {\r\n Object.keys(replacements).forEach((identifier) => {\r\n // eslint-disable-next-line react/destructuring-assignment\r\n const s = replacements[identifier]\r\n manipulated = manipulated.replace(`%${identifier}%`, `${s}`)\r\n })\r\n }\r\n\r\n // eslint-disable-next-line react/no-danger\r\n return \r\n}\r\n\r\nconst Lokalise: React.FC = ({ children }) => {\r\n const [initialized, setInitialized] = useState(false)\r\n const initFallback = (): void => {\r\n if (myData) {\r\n if (!initialized) {\r\n setLokalise(myData)\r\n setInitialized(true)\r\n }\r\n }\r\n }\r\n\r\n const init = async (): Promise => {\r\n initFallback()\r\n const timeout = setTimeout(() => {\r\n initFallback()\r\n }, 10000)\r\n\r\n const response = await getLokaliseDataFromApi()\r\n console.log(response, 'response')\r\n\r\n if (response) {\r\n setLokalise(response)\r\n clearTimeout(timeout)\r\n setInitialized(true)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n // initFallback()\r\n init()\r\n }, [])\r\n\r\n if (!initialized) return \r\n\r\n return <>{children}\r\n}\r\n\r\nexport { Lokalise, getLokaliseData, L, L_HTML }\r\n","import { L } from '../components/providers/Lokalise'\r\nimport { Member } from '../models/Member'\r\nimport { Profile } from '../models/Profile'\r\n\r\nexport const getAge = (birthYear: number): number => {\r\n const currentDate = new Date()\r\n const currentYear = currentDate.getFullYear()\r\n return currentYear - birthYear\r\n}\r\n\r\nexport const uniq = (items: Member[], key: string): Member[] => {\r\n const arrayUniqueByKey = [\r\n ...new Map(items.map((item) => [item[key], item])).values(),\r\n ]\r\n\r\n return arrayUniqueByKey\r\n}\r\n\r\nexport const getUpdateTypeLabel = (type: string): string => {\r\n let label = type\r\n\r\n switch (type) {\r\n case 'OpdaterMedlem':\r\n label = L('MINEOPDATERINGER_TYPE_OpdaterMedlem') // 'Redigér medlemsdata'\r\n break\r\n case 'MedlemOphoert':\r\n label = L('MINEOPDATERINGER_TYPE_MedlemOphoert') // 'Stoppet på arbejdsstedet'\r\n break\r\n case 'TilfoejMedlemArbejdssted':\r\n label = L('MINEOPDATERINGER_TYPE_TilfoejMedlemArbejdssted') // 'Tilføj nyt arbejdssted på medlemmet'\r\n break\r\n case 'OpdaterOgTilfoejEksisterendeMedlem':\r\n label = L(\r\n 'MINEOPDATERINGER_TYPE_OpdaterOgTilfoejEksisterendeMedlem'\r\n ) // 'Tilføj kollega til Mine medlemmer'\r\n break\r\n default:\r\n break\r\n }\r\n\r\n return label\r\n}\r\n\r\nexport const getUpdateStatusLabel = (status: string): string => {\r\n let label = status\r\n\r\n switch (status) {\r\n case 'FaerdigBehandlet':\r\n label = L('MINEOPDATERINGER_STATUS_FaerdigBehandlet') // 'Færdig behandlet'\r\n break\r\n case 'UnderOpdatering':\r\n label = L('MINEOPDATERINGER_STATUS_UnderOpdatering') // Afventer opdatering'\r\n break\r\n default:\r\n break\r\n }\r\n\r\n return label\r\n}\r\n\r\n// 02\tFællestillidssuppleant\r\n// 04\tTillidssuppleant\r\n// 08\tMED Hoved.udv.suppleant\r\n// 16\tUdgået Lokal SU-supplean\r\n// 18\tCentralt hoved SU-suppl.\r\n// 24\tDistrikttillidsrep.suppl.\r\n// 31\tArbejdsmiljøudvalgsuppl.\r\n// 36\tSuppl.midlert.HSU(MT HSU)\r\n// 37\tHSIU - suppleant\r\nexport const isSuppleantFor = (type: string): boolean => {\r\n const types: string[] = [\r\n '02',\r\n '04',\r\n '08',\r\n '16',\r\n '18',\r\n '24',\r\n '31',\r\n '36',\r\n '37',\r\n ]\r\n\r\n return types.indexOf(type) !== -1\r\n}\r\n\r\nexport const getSuppleantNamesForTR = (\r\n type: string,\r\n profile: Profile\r\n): string => {\r\n const names = []\r\n\r\n profile.trForOthers.forEach((tfo) => {\r\n tfo.typeOfRepresentatives.forEach((tor) => {\r\n if (tor.supplementedOfDutyType === type) {\r\n names.push(tfo.fullName)\r\n }\r\n })\r\n })\r\n\r\n return names.join(', ')\r\n}\r\n","import { atom, useAtom } from 'jotai'\r\nimport { IMemberData, Member } from '../../models/Member'\r\nimport { filterItems, IFilterData } from '../../utils/filterhelper'\r\nimport {\r\n IFilter,\r\n initialFilter,\r\n initialSelectedFilters,\r\n} from '../../models/Filter'\r\nimport { membersAtom } from '../../api/members/members'\r\nimport {\r\n sortBy,\r\n sortNotesBy,\r\n sortProperty,\r\n sortUpdatesBy,\r\n sortWorkplacesBy,\r\n} from '../../utils/sortHelper'\r\nimport { filterByValue } from '../../utils/searchHelper'\r\nimport { uniq } from '../../utils/utils'\r\nimport { Note } from '../../models/Note'\r\nimport { Workplace } from '../../models/Workplace'\r\nimport { UpdateBatch } from '../../models/UpdateBatch'\r\n\r\nexport interface FilterState {\r\n filter: IFilter\r\n}\r\n\r\nexport type TypeResponseGetMembers = {\r\n Medlemmer: IMemberData[]\r\n}\r\n\r\nconst initSort: sortProperty = {\r\n direction: 'ascending',\r\n property: 'name',\r\n}\r\n\r\nexport type TypeResponse = TypeResponseGetMembers & IFilterData\r\nconst filterAtom = atom(initialFilter)\r\nconst filterSelected = atom(initialSelectedFilters)\r\nconst sortedAtom = atom(initSort)\r\nconst sortLock = atom(false)\r\nconst searchAtom = atom('')\r\nconst searchNoteAtom = atom('')\r\nconst searchWorkplaceAtom = atom('')\r\nconst searchMembersAtom = atom([])\r\nconst showOnlyFavorites = atom(false)\r\nconst allNotes = atom([])\r\nconst allWorkplaces = atom([])\r\nconst allUpdates = atom([])\r\nconst allUpdatesDone = atom([])\r\nconst allUpdatesInProgress = atom([])\r\n\r\nconst searchPageAtom = atom((get) => {\r\n const sorted = get(sortedAtom)\r\n const members = get(searchMembersAtom)\r\n let filteredItems = [...members]\r\n\r\n if (sorted) {\r\n filteredItems = sortBy([...filteredItems], sorted)\r\n }\r\n\r\n return [...filteredItems]\r\n})\r\n\r\nconst workplacesPageAtom = atom((get) => {\r\n const sorted = get(sortedAtom)\r\n const workplaces = get(allWorkplaces)\r\n let sortedWorkplaces = [...workplaces]\r\n const search = get(searchWorkplaceAtom)\r\n\r\n if (sorted) {\r\n sortedWorkplaces = sortWorkplacesBy(sortedWorkplaces, sorted)\r\n }\r\n\r\n if (search) {\r\n sortedWorkplaces = filterByValue([...sortedWorkplaces], search, [\r\n 'name',\r\n 'address',\r\n ])\r\n }\r\n\r\n return sortedWorkplaces\r\n})\r\n\r\nconst updatePageAtom = atom((get) => {\r\n const sorted = get(sortedAtom)\r\n const all = get(allUpdates)\r\n let sortedUpdates = [...all]\r\n if (sorted) {\r\n sortedUpdates = sortUpdatesBy(sortedUpdates, sorted)\r\n }\r\n\r\n return sortedUpdates\r\n})\r\n\r\nconst updatePageDoneAtom = atom((get) => {\r\n const sorted = get(sortedAtom)\r\n const all = get(allUpdatesDone)\r\n let sortedUpdates = [...all]\r\n if (sorted) {\r\n sortedUpdates = sortUpdatesBy(sortedUpdates, sorted)\r\n }\r\n\r\n return sortedUpdates\r\n})\r\n\r\nconst updatePageInProgressAtom = atom((get) => {\r\n const sorted = get(sortedAtom)\r\n const all = get(allUpdatesInProgress)\r\n let sortedUpdates = [...all]\r\n if (sorted) {\r\n sortedUpdates = sortUpdatesBy(sortedUpdates, sorted)\r\n }\r\n\r\n return sortedUpdates\r\n})\r\n\r\nconst notePageAtom = atom((get) => {\r\n const sorted = get(sortedAtom)\r\n const notes = get(allNotes)\r\n let sortedNotes = [...notes]\r\n const search = get(searchNoteAtom)\r\n\r\n if (sorted) {\r\n sortedNotes = sortNotesBy(sortedNotes, sorted)\r\n }\r\n\r\n // search\r\n if (search) {\r\n sortedNotes = filterByValue([...sortedNotes], search, [\r\n 'content',\r\n 'title',\r\n 'member',\r\n ])\r\n }\r\n\r\n return sortedNotes\r\n})\r\n\r\n// FilteredItems\r\nconst filteredAtom = atom((get) => {\r\n const selected = get(filterSelected)\r\n const members = get(membersAtom)\r\n const sorted = get(sortedAtom)\r\n const search = get(searchAtom)\r\n const favoritesOnly = get(showOnlyFavorites)\r\n let filteredItems = filterItems(selected, [...members.members])\r\n\r\n if (sorted) {\r\n filteredItems = sortBy([...filteredItems], sorted)\r\n }\r\n\r\n if (search) {\r\n filteredItems = filterByValue([...filteredItems], search, [\r\n 'fullName',\r\n 'workPlace',\r\n 'birthDay',\r\n 'age',\r\n ])\r\n }\r\n\r\n if (favoritesOnly) {\r\n filteredItems = [...filteredItems].filter((m) => m.isFavorite)\r\n }\r\n\r\n return [...uniq(filteredItems, 'memberId')]\r\n})\r\n\r\nexport {\r\n filterAtom,\r\n filteredAtom,\r\n filterSelected,\r\n sortedAtom,\r\n searchAtom,\r\n searchPageAtom,\r\n searchMembersAtom,\r\n showOnlyFavorites,\r\n notePageAtom,\r\n allNotes,\r\n allWorkplaces,\r\n workplacesPageAtom,\r\n allUpdates,\r\n allUpdatesInProgress,\r\n allUpdatesDone,\r\n updatePageDoneAtom,\r\n updatePageInProgressAtom,\r\n updatePageAtom,\r\n sortLock,\r\n searchWorkplaceAtom,\r\n searchNoteAtom,\r\n}\r\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\r\nimport { useState } from 'react'\r\nimport { useAtom } from 'jotai'\r\nimport { Member } from '../models/Member'\r\nimport {\r\n sortBy,\r\n sortProperties,\r\n sortProperty,\r\n sortNotesBy,\r\n sortUpdatesBy,\r\n} from '../utils/sortHelper'\r\nimport { sortedAtom, sortLock } from '../store/filter/filterAtom'\r\nimport { Note } from '../models/Note'\r\nimport { UpdateBatch } from '../models/UpdateBatch'\r\n\r\nconst useSortMembersList = () => {\r\n const [, setSortedAtom] = useAtom(sortedAtom)\r\n const [, setLock] = useAtom(sortLock)\r\n const [sortState, setSortState] = useState(\r\n undefined\r\n )\r\n // const [sortedList, _setSortedList] = useState<\r\n // Member[] | Note[] | UpdateBatch[]\r\n // >([])\r\n\r\n const setSort = (property: sortProperties): void => {\r\n setLock(false)\r\n if (sortState && sortState.property === property) {\r\n setSortState({\r\n direction:\r\n sortState.direction === 'ascending'\r\n ? 'descending '\r\n : 'ascending',\r\n property,\r\n })\r\n setSortedAtom({\r\n direction:\r\n sortState.direction === 'ascending'\r\n ? 'descending '\r\n : 'ascending',\r\n property,\r\n })\r\n } else {\r\n setSortState({\r\n direction: 'ascending',\r\n property,\r\n })\r\n setSortedAtom({\r\n direction: 'ascending',\r\n property,\r\n })\r\n }\r\n }\r\n\r\n // const setSortedList = (members: Member[]) => {\r\n // if (sortState) {\r\n // const list = sortBy(members, sortState)\r\n // _setSortedList(list)\r\n // } else {\r\n // _setSortedList(members)\r\n // }\r\n // }\r\n\r\n // const setSortedNoteList = (notes: Note[]) => {\r\n // if (sortState) {\r\n // const list = sortNotesBy(notes, sortState)\r\n // _setSortedList(list)\r\n // } else {\r\n // _setSortedList(notes)\r\n // }\r\n // }\r\n\r\n // const setSortedUpdatePageList = (updates: UpdateBatch[]) => {\r\n // if (sortState) {\r\n // const list = sortUpdatesBy(updates, sortState)\r\n // _setSortedList(list)\r\n // } else {\r\n // _setSortedList(updates)\r\n // }\r\n // }\r\n\r\n return {\r\n // sortedList,\r\n sortState,\r\n setSort,\r\n setSortState,\r\n // setSortedList,\r\n // setSortedNoteList,\r\n // setSortedUpdatePageList,\r\n }\r\n}\r\n\r\nexport default useSortMembersList\r\n","import { createUseStyles } from 'react-jss'\r\nimport breakpoints from './breakpoints'\r\n\r\nconst useContainerStyles = createUseStyles({\r\n container: {\r\n width: '100%',\r\n maxWidth: '1075px',\r\n margin: '0 auto',\r\n padding: '0',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n padding: 0,\r\n },\r\n },\r\n },\r\n})\r\n\r\nexport { useContainerStyles }\r\n","import { JssStyle } from 'jss'\r\nimport breakpoints from './breakpoints'\r\nimport { colors } from './palette'\r\n\r\nexport const baseButton: JssStyle = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '0.5em 1.75em',\r\n margin: '0 0.3em 0.3em 0',\r\n borderRadius: '0.25em',\r\n boxSizing: 'border-box',\r\n textDecoration: 'none',\r\n fontWeight: 400,\r\n textAlign: 'center',\r\n transition: 'all 0.2s',\r\n boxShadow: 0,\r\n background: 'inherit',\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n '-webkit-appearance': 'none',\r\n '-moz-appearance': 'none',\r\n border: 0,\r\n}\r\n\r\nexport const sortPlaceholder = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '0.75em 0',\r\n margin: '0 0.3em 0.3em 0',\r\n borderRadius: '6px',\r\n boxSizing: 'border-box',\r\n textDecoration: 'none',\r\n fontWeight: 400,\r\n textAlign: 'left',\r\n transition: 'all 0.2s',\r\n boxShadow: 0,\r\n '-webkit-appearance': 'none',\r\n '-moz-appearance': 'none',\r\n fontStyle: 'normal',\r\n fontSize: '16px',\r\n lineHeight: '120%',\r\n color: '#000000',\r\n border: 0,\r\n background: 'none',\r\n}\r\n","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n control: {\r\n position: 'relative',\r\n marginBottom: '20px',\r\n },\r\n}))\r\n\r\nconst FormControl: React.FC = ({ children }) => {\r\n const classes = useStyles()\r\n\r\n return
{children}
\r\n}\r\n\r\nexport { FormControl }\r\n","import React, { FC, useEffect, useState } from 'react'\r\nimport { useForm } from 'react-hook-form'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useAtom } from 'jotai'\r\nimport {\r\n getMemberForImitating,\r\n getProfileByIdent,\r\n profileAtom,\r\n} from '../../../api/profile/profile'\r\nimport { isAuthenticatedAtom, authRoles } from '../../../store/auth'\r\nimport { Profile } from '../../../models/Profile'\r\n\r\nimport { Department } from '../../../models/Department'\r\n\r\nimport breakpoints from '../../../theme/breakpoints'\r\nimport { colors } from '../../../theme/palette'\r\n\r\nimport { ISelectOptions, Select } from '../../ui/FormElememts/Select'\r\nimport { getDepartments } from '../../../api/departments'\r\nimport { Input } from '../../ui/FormElememts/Input'\r\nimport {\r\n Card,\r\n CardCell,\r\n CardHeader,\r\n CardHeaderCell,\r\n CardList,\r\n Circle,\r\n CircleText,\r\n} from '../../ui/Card'\r\nimport { SortButton } from '../../ui/SortButton'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport { getInitials } from '../../../utils/initials'\r\nimport useSortMembersList from '../../../hooks/useSortMembersList'\r\nimport { Button } from '../../ui/Button/Button'\r\n\r\nimport { useContainerStyles } from '../../../theme/layout'\r\nimport { L } from '../../providers/Lokalise'\r\nimport { sortPlaceholder } from '../../../theme/reuseables'\r\nimport { FormControl } from '../../ui/FormElememts/FormControl'\r\nimport { Spinner } from '../../ui/Loaders/Spinner'\r\n\r\nexport type RegistrationFormFields = {\r\n fuldeNavn: string\r\n foedselsesdato: string\r\n telefon: string\r\n afdelingsnummer: string\r\n}\r\n\r\nexport interface IMemberSuggestion {\r\n memberId: number\r\n fullName: string\r\n birthDay: string\r\n position: string\r\n role: string\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n container: {\r\n padding: '0 24px',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n padding: 0,\r\n },\r\n },\r\n },\r\n headerArea: {\r\n display: 'flex',\r\n padding: '.5rem 0',\r\n minHeight: '80px',\r\n },\r\n formArea: {\r\n display: 'grid',\r\n gridTemplateColumns: '3fr 3fr 1fr',\r\n gap: '20px',\r\n marginBottom: '50px',\r\n },\r\n topArea: {\r\n borderBottom: `1px solid ${colors.gray700}`,\r\n // TODO: remove this when this area has been developed.\r\n minHeight: '60px',\r\n },\r\n headerActions: {\r\n marginLeft: 'auto',\r\n flexShrink: 0,\r\n },\r\n members: {\r\n paddingTop: '20px',\r\n },\r\n form: {\r\n display: 'grid',\r\n gridTemplateColumns: '1fr 140px 140px 1fr 140px',\r\n gap: '10px',\r\n },\r\n linkButton: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '0',\r\n margin: '0',\r\n borderRadius: '6px',\r\n boxSizing: 'border-box',\r\n textDecoration: 'none',\r\n fontWeight: 400,\r\n textAlign: 'center',\r\n transition: 'all 0.2s',\r\n boxShadow: 0,\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n '-webkit-appearance': 'none',\r\n '-moz-appearance': 'none',\r\n border: 0,\r\n color: colors.green500,\r\n fontSize: '.875rem',\r\n textDecorationLine: 'underline',\r\n },\r\n subArea: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n padding: '1rem 160px 1rem 1rem',\r\n borderBottom: `1px solid ${colors.borderColor}`,\r\n },\r\n circleIcon: {\r\n width: '62px',\r\n height: '62px',\r\n borderRadius: '50%',\r\n border: `2px solid ${colors.white}`,\r\n backgroundColor: colors.blue300,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '1rem',\r\n },\r\n sortPlaceholder: {\r\n ...sortPlaceholder,\r\n },\r\n content: {\r\n paddingTop: '1.875rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n messageWrapper: {\r\n marginTop: '2.25rem',\r\n },\r\n selectContainer: {\r\n position: 'relative',\r\n },\r\n selectTrigger: {\r\n position: 'relative',\r\n minHeight: '48px',\r\n backgroundColor: colors.white,\r\n border: `1px solid ${colors.borderColor}`,\r\n borderRadius: '6px',\r\n width: '100%',\r\n fontSize: '1.125rem',\r\n paddingLeft: '.75rem',\r\n paddingRight: '.75rem',\r\n cursor: 'pointer',\r\n color: colors.labelColor,\r\n },\r\n selectContent: {\r\n overflow: 'hidden',\r\n backgroundColor: 'white',\r\n borderRadius: '6px',\r\n boxShadow:\r\n // eslint-disable-next-line max-len\r\n '0px 10px 38px -10px rgba(22, 23, 24, 0.35), 0px 10px 20px -15px rgba(22, 23, 24, 0.2)',\r\n },\r\n select: {\r\n position: 'relative',\r\n minHeight: '48px',\r\n backgroundColor: colors.white,\r\n border: `1px solid ${colors.borderColor}`,\r\n borderRadius: '6px',\r\n width: '100%',\r\n fontSize: '1.125rem',\r\n paddingLeft: '.75rem',\r\n paddingRight: '.75rem',\r\n cursor: 'pointer',\r\n color: colors.labelColor,\r\n },\r\n hr: {\r\n opacity: '.4',\r\n margin: '0',\r\n },\r\n})\r\n\r\nconst gridTemplateColumns = '10% 20% 20% 20% 15% 15%'\r\n\r\nconst Imitator: FC = () => {\r\n const [authProfile, _set] = useAtom(profileAtom)\r\n const [departmentNumber, _setDepartmentNumber] = useState('default')\r\n const [name, _setName] = useState(undefined)\r\n const [suggestions, _setSuggestions] = useState([])\r\n const [options, setOptions] = useState([])\r\n const [loading, setLoading] = useState(false)\r\n const classes = useStyles()\r\n const { setSort, sortState } = useSortMembersList()\r\n const [, _setIsAuthenticated] = useAtom(isAuthenticatedAtom)\r\n const layout = useContainerStyles()\r\n const [roles, setAuthRoles] = useAtom(authRoles)\r\n\r\n const search = async (d: string, n: string): Promise => {\r\n setLoading(true)\r\n const response = await getMemberForImitating(d, n)\r\n\r\n if (\r\n response.data &&\r\n response.data.Medlemmer &&\r\n response.data.Medlemmer.length\r\n ) {\r\n const result = response.data.Medlemmer.map((member: any) => {\r\n const splitted = member.FuldeNavn.split(',')\r\n return {\r\n memberId: member.Medlemsident,\r\n fullName: splitted[0],\r\n birthDay: splitted[1],\r\n position: splitted[2],\r\n role: member.Rolle,\r\n }\r\n })\r\n\r\n _setSuggestions(result)\r\n }\r\n\r\n setLoading(false)\r\n }\r\n\r\n // useEffect(() => {\r\n // if (name && name !== '' && departmentNumber) {\r\n // search(departmentNumber, name)\r\n // } else {\r\n // _setSuggestions([])\r\n // }\r\n // }, [departmentNumber, name])\r\n\r\n useEffect(() => {\r\n const getDeps = async (): Promise => {\r\n if (\r\n authProfile.data &&\r\n authProfile.data.RolleListe.indexOf('Imitator') !== -1\r\n ) {\r\n const d: ISelectOptions[] = [\r\n {\r\n label: authProfile.data.Afdeling.Navn,\r\n value: authProfile.data.Afdeling.Nummer,\r\n },\r\n ]\r\n\r\n setOptions(d)\r\n\r\n _setDepartmentNumber(authProfile.data.Afdeling.Nummer)\r\n } else {\r\n const depResponse = await getDepartments()\r\n const opt: ISelectOptions[] = depResponse.map(\r\n (department: Department) => {\r\n return { label: department.name, value: department.id }\r\n }\r\n )\r\n\r\n setOptions(opt)\r\n }\r\n\r\n return true\r\n }\r\n\r\n getDeps()\r\n }, [])\r\n\r\n const chooseImitator = async (member: IMemberSuggestion): Promise => {\r\n const response = await getProfileByIdent(member.memberId)\r\n const profile = Profile.build(response.data)\r\n\r\n authProfile.apiProfile = profile\r\n\r\n localStorage.setItem('profile_data', JSON.stringify(authProfile))\r\n localStorage.setItem('imitator', JSON.stringify(member))\r\n\r\n setAuthRoles([member.role])\r\n _set(authProfile)\r\n _setIsAuthenticated(true)\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n Søg TR & FTR\r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n {\r\n _setSuggestions([])\r\n _setName('')\r\n _setDepartmentNumber(e.target.value)\r\n }}\r\n options={options}\r\n />\r\n \r\n \r\n {\r\n if (e.key === 'Enter') {\r\n if (name && name !== '' && departmentNumber) {\r\n search(departmentNumber, name)\r\n } else {\r\n _setSuggestions([])\r\n }\r\n }\r\n }}\r\n onChange={(e) => _setName(e.target.value)}\r\n />\r\n \r\n {\r\n if (name && name !== '' && departmentNumber) {\r\n search(departmentNumber, name)\r\n } else {\r\n _setSuggestions([])\r\n }\r\n }}\r\n >\r\n {L('ALLEMEDLEMMER_FORM_SØG_KNAP')}\r\n \r\n
\r\n\r\n
\r\n\r\n {loading ? : null}\r\n\r\n {!suggestions.length ? (\r\n \r\n Vælg afdeling og navn\r\n \r\n ) : null}\r\n\r\n
\r\n {suggestions && suggestions.length ? (\r\n
\r\n \r\n \r\n \r\n \r\n setSort('name')}\r\n sort={sortState}\r\n name=\"name\"\r\n >\r\n Navn\r\n \r\n \r\n \r\n \r\n \r\n setSort('arbejdssted')\r\n }\r\n sort={sortState}\r\n name=\"arbejdssted\"\r\n >\r\n Hverv\r\n \r\n \r\n \r\n \r\n
\r\n Rolle\r\n
\r\n
\r\n \r\n setSort('department')}\r\n sort={sortState}\r\n name=\"department\"\r\n >\r\n Fødselsdato\r\n \r\n \r\n \r\n \r\n {suggestions.map((member) => (\r\n <>\r\n \r\n \r\n \r\n \r\n {getInitials(\r\n member.fullName\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {member.fullName}\r\n \r\n \r\n \r\n \r\n {member.position}\r\n \r\n \r\n \r\n \r\n {member.role}\r\n \r\n \r\n \r\n \r\n {member.birthDay}\r\n \r\n \r\n\r\n \r\n \r\n chooseImitator(member)\r\n }\r\n >\r\n Vælg\r\n \r\n \r\n \r\n \r\n ))}\r\n
\r\n
\r\n ) : null}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport { Imitator }\r\n","import { AxiosResponse } from 'axios'\r\nimport { axiosWithAuth, axiosWithImitator } from '../withAuth'\r\nimport { mapWorkplaces, Workplace } from '../../models/Workplace'\r\n\r\n// /opslagsdata/hentstillingfaggruppesektorlister\r\nconst getPositionsAndGroups = async (): Promise => {\r\n const response = await axiosWithImitator.get(\r\n `/opslagsdata/hentstillingfaggruppesektorlister`\r\n )\r\n\r\n const { data } = response\r\n return data\r\n}\r\n\r\n// /opslagsdata/henttrarbejdsstederogstillinger\r\nconst getWorkplacesAndPositions = async (): Promise<{\r\n workPlaces: Workplace[]\r\n}> => {\r\n const response = await axiosWithImitator.get(\r\n `/opslagsdata/henttrarbejdsstederogstillinger`\r\n )\r\n\r\n const { data } = response\r\n return {\r\n workPlaces: mapWorkplaces(data.Arbejdssteder),\r\n }\r\n}\r\n\r\nconst userIsActiveInApp = async (): Promise => {\r\n const response = await axiosWithImitator.post(`/profil/brugeraktiviapp`)\r\n\r\n const { data } = response\r\n return data\r\n}\r\n\r\nexport { getPositionsAndGroups, getWorkplacesAndPositions, userIsActiveInApp }\r\n","import React, { useEffect, useState } from 'react'\r\n/* eslint-disable max-len */\r\nimport axios, { AxiosResponse } from 'axios'\r\nimport { useAtom } from 'jotai'\r\nimport qs from 'qs'\r\nimport * as randomString from 'randomstring'\r\nimport { encode as base64encode } from 'base64-arraybuffer'\r\nimport {\r\n profileAtom,\r\n getProfile,\r\n getProfileByIdent,\r\n} from '../api/profile/profile'\r\nimport { Dialog } from '../components/ui/Dialog/Dialog'\r\nimport { Typography } from '../components/ui/Typography/Typography'\r\nimport { Button } from '../components/ui/Button/Button'\r\nimport { LockFill } from '../assets/icons'\r\nimport { Profile } from '../models/Profile'\r\nimport { Imitator } from '../components/modules/Imitator'\r\nimport {\r\n isAuthenticatedAtom,\r\n chooseImitatorAtom,\r\n authRoles,\r\n} from '../store/auth'\r\nimport { L_HTML } from '../components/providers/Lokalise'\r\nimport { Spinner } from '../components/ui/Loaders/Spinner'\r\nimport { userIsActiveInApp } from '../api/misc'\r\n\r\nconst PERIOD_CHECK_INTERVAL = 60 * 1000 * 5\r\n\r\nconst oidcSettings = {\r\n authority: process.env.REACT_APP_AUTH_AUTHORITY,\r\n client_id: process.env.REACT_APP_AUTH_CLIENT_ID,\r\n redirect_uri: process.env.REACT_APP_AUTH_REDIRECT_URI,\r\n response_type: process.env.REACT_APP_AUTH_RESPONSE_TYPE,\r\n scope: process.env.REACT_APP_AUTH_REDIRECT_URI_SCOPE,\r\n}\r\n\r\n// Disabled for now.\r\n// process.env.REACT_APP_AUTH_SETORIGIN\r\nconst setOriginUrl = undefined\r\n\r\nexport interface IUserData {\r\n access_token: string\r\n expires_in: number\r\n id_token: string\r\n refresh_token: string\r\n refresh_token_expires_in: string\r\n resource: string\r\n scope: string\r\n token_type: string\r\n}\r\n\r\nconst Auth0: React.FC = ({ children }) => {\r\n const [isAuthenticated, setIsAuthenticated] = useAtom(isAuthenticatedAtom)\r\n const [, setProfile] = useAtom(profileAtom)\r\n const [chooseImitator, setChooseImitator] = useAtom(chooseImitatorAtom)\r\n const [loading, _setLoading] = useState(true)\r\n const [, _setRoles] = useAtom(authRoles)\r\n const [periodicCheckInitiated, setPeriodicCheckInitiated] = useState(false)\r\n const [errorMessage, setErrorMessage] = useState(\r\n undefined\r\n )\r\n\r\n const intiatePeriodicCheck = (): void => {\r\n if (!periodicCheckInitiated) {\r\n setPeriodicCheckInitiated(true)\r\n userIsActiveInApp()\r\n setInterval(() => {\r\n getProfile()\r\n }, PERIOD_CHECK_INTERVAL)\r\n }\r\n }\r\n\r\n const validateImitator = async (\r\n profileData: AxiosResponse\r\n ): Promise => {\r\n const authP = {\r\n data: profileData.data,\r\n isImitator: true,\r\n apiProfile: undefined,\r\n }\r\n\r\n const imitatorInStorage = localStorage.getItem('imitator')\r\n\r\n if (imitatorInStorage) {\r\n const member = JSON.parse(imitatorInStorage)\r\n const response = await getProfileByIdent(member.memberId)\r\n const profile = Profile.build(response.data)\r\n\r\n authP.apiProfile = profile\r\n _setRoles([member.role])\r\n setIsAuthenticated(true)\r\n setChooseImitator(false)\r\n _setLoading(false)\r\n setProfile(authP)\r\n } else {\r\n setProfile(authP)\r\n localStorage.setItem('profile_data', JSON.stringify(authP))\r\n setIsAuthenticated(false)\r\n setChooseImitator(true)\r\n _setLoading(false)\r\n }\r\n }\r\n\r\n const setAlreadyAuthenticated = async (profileData: any): Promise => {\r\n const response = await getProfileByIdent(\r\n profileData.data.BrugerMedlemsident\r\n )\r\n\r\n if (response && response.error) {\r\n localStorage.setItem('profile_data', null)\r\n if (response.error && response.error.Message) {\r\n setErrorMessage(response.error.Message)\r\n }\r\n } else {\r\n setErrorMessage(undefined)\r\n const activeProfile = Profile.build(response.data)\r\n const authP = {\r\n data: profileData.data,\r\n isImitator: false,\r\n apiProfile: activeProfile,\r\n }\r\n\r\n _setRoles(profileData.data.RolleListe)\r\n\r\n localStorage.setItem('profile_data', JSON.stringify(authP))\r\n\r\n setProfile(authP)\r\n\r\n if (profileData.data) {\r\n setIsAuthenticated(true)\r\n }\r\n }\r\n\r\n _setLoading(false)\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\r\n const getToken = async (code: string) => {\r\n const code_verifier = localStorage.getItem('code_verifier')\r\n axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'\r\n const response = await axios.post(\r\n `${oidcSettings.authority}/oauth2/token`,\r\n qs.stringify({\r\n grant_type: 'authorization_code',\r\n redirect_uri: oidcSettings.redirect_uri,\r\n client_id: oidcSettings.client_id,\r\n code_verifier,\r\n code,\r\n })\r\n )\r\n\r\n const user: IUserData = response.data\r\n\r\n localStorage.setItem('user_data', JSON.stringify(user))\r\n\r\n const profileData = await getProfile()\r\n const roleList = profileData.data.RolleListe\r\n\r\n if (\r\n roleList &&\r\n (roleList.indexOf('Supporter') !== -1 ||\r\n roleList.indexOf('Imitator') !== -1)\r\n ) {\r\n validateImitator(profileData)\r\n intiatePeriodicCheck()\r\n } else {\r\n setAlreadyAuthenticated(profileData)\r\n intiatePeriodicCheck()\r\n }\r\n\r\n window.history.replaceState(\r\n {},\r\n document.title,\r\n window.location.pathname\r\n )\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\r\n const checkUser = async (code: string | undefined) => {\r\n _setLoading(true)\r\n const userData = localStorage.getItem('user_data')\r\n\r\n if (userData && !code) {\r\n const profileData = await getProfile()\r\n const roleList = profileData.data.RolleListe\r\n\r\n if (\r\n roleList &&\r\n (roleList.indexOf('Supporter') !== -1 ||\r\n roleList.indexOf('Imitator') !== -1)\r\n ) {\r\n validateImitator(profileData)\r\n intiatePeriodicCheck()\r\n } else {\r\n setAlreadyAuthenticated(profileData)\r\n intiatePeriodicCheck()\r\n }\r\n } else if (code && code !== '') {\r\n getToken(code)\r\n } else if (!userData && !code) {\r\n setIsAuthenticated(false)\r\n _setLoading(false)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n const queryString = window.location.search\r\n const params = new URLSearchParams(queryString)\r\n const code = params.get('code')\r\n if (code) {\r\n sessionStorage.setItem('testing', JSON.stringify(window.location))\r\n }\r\n\r\n _setLoading(true)\r\n\r\n checkUser(code)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\r\n const signIn = async () => {\r\n // if (setOriginUrl && setOriginUrl !== '') {\r\n // await axios.get(setOriginUrl)\r\n // }\r\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\r\n async function generateCodeChallenge(codeVerifier) {\r\n const encoder = new TextEncoder()\r\n const data = encoder.encode(codeVerifier)\r\n const digest = await window.crypto.subtle.digest('SHA-256', data)\r\n const base64Digest = base64encode(digest)\r\n\r\n // you can extract this replacing code to a function\r\n return base64Digest\r\n .replace(/\\+/g, '-')\r\n .replace(/\\//g, '_')\r\n .replace(/=/g, '')\r\n }\r\n\r\n const code_verifier = randomString.generate(128)\r\n\r\n generateCodeChallenge(code_verifier).then((challenge) => {\r\n localStorage.setItem('code_verifier', code_verifier)\r\n const qParams = [\r\n `redirect_uri=${oidcSettings.redirect_uri}`,\r\n `scope=${oidcSettings.scope}`,\r\n `response_type=${oidcSettings.response_type}`,\r\n `client_id=${oidcSettings.client_id}`,\r\n `code_challenge_method=S256`,\r\n `code_challenge=${challenge}`,\r\n // `${\r\n // process.env.NODE_ENV !== 'production' ? 'prompt=login' : ''\r\n // }`,\r\n 'max_age=1200',\r\n ].join('&')\r\n\r\n window.location.href = `${oidcSettings.authority}/oauth2/authorize?${qParams}`\r\n })\r\n }\r\n\r\n const logout = (): void => {\r\n const localUser = localStorage.getItem('user_data')\r\n const user: IUserData = JSON.parse(localUser)\r\n const token = user.id_token\r\n const redirect_uri = process.env.REACT_APP_AUTH_REDIRECT_URI\r\n\r\n const translations = localStorage.getItem('translations')\r\n localStorage.clear()\r\n localStorage.setItem('translations', translations)\r\n\r\n const qParams = [\r\n `id_token_hint=${token}`,\r\n `post_logout_redirect_uri=${redirect_uri}`,\r\n ].join('&')\r\n\r\n const logoutURL = `https://fs10.foa.dk/adfs/oauth2/logout?${qParams}`\r\n\r\n window.location.href = logoutURL\r\n\r\n axios.get(logoutURL).then(() => {\r\n window.history.replaceState(\r\n {},\r\n document.title,\r\n window.location.pathname\r\n )\r\n })\r\n }\r\n\r\n if (loading) {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n\r\n if (!isAuthenticated && chooseImitator) {\r\n return (\r\n <>\r\n \r\n {setOriginUrl ? (\r\n \r\n ) : null}\r\n \r\n )\r\n }\r\n\r\n if (isAuthenticated) {\r\n return (\r\n
\r\n {setOriginUrl ? (\r\n \r\n ) : null}\r\n {children}\r\n
\r\n )\r\n }\r\n\r\n return (\r\n }\r\n >\r\n <>\r\n {setOriginUrl ? (\r\n \r\n ) : null}\r\n {!errorMessage ? (\r\n <>\r\n \r\n {/* {L_HTML('LOGIN_POPUP_OVERSKRIFT')} */}\r\n Log på\r\n \r\n \r\n {/* {L_HTML('LOGIN_POPUP_TEXT')} */}\r\n Du skal logge på for at få adgang til Mine medlemmer\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n \r\n {L_HTML('LOGIN_POPUP_OVERSKRIFT')}\r\n \r\n \r\n {errorMessage ? (\r\n \r\n {errorMessage}\r\n \r\n ) : null}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n )\r\n}\r\nexport default Auth0\r\n","export const zIndexes = {\r\n topNavigation: 1,\r\n drawer: 2,\r\n}\r\n","import palette, { colors } from './palette'\r\nimport sizes from './sizes'\r\nimport { zIndexes } from './zIndex'\r\n\r\nconst index = { palette, sizes, colors, zIndexes }\r\n\r\nexport default index\r\n","const sizes = {\r\n navbarDesktopHeight: '5.125rem',\r\n}\r\n\r\nexport default sizes\r\n","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport breakpoints from '../../theme/breakpoints'\r\nimport { colors } from '../../theme/palette'\r\n\r\nconst useStyles = createUseStyles((theme) => ({\r\n container: {\r\n position: 'relative',\r\n marginTop: theme.sizes.navbarDesktopHeight,\r\n color: theme.palette.secondary,\r\n minHeight: '100vh',\r\n width: '100%',\r\n backgroundColor: colors.gray500,\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n marginTop: `calc(${theme.sizes.navbarDesktopHeight} + 9rem)`,\r\n },\r\n },\r\n}))\r\n\r\nconst Layout: React.FC = ({ children }) => {\r\n const classes = useStyles()\r\n\r\n return
{children}
\r\n}\r\n\r\nexport default Layout\r\n","import React, { FC } from 'react'\nimport { Dialog } from '../../ui/Dialog/Dialog'\nimport { SendFill } from '../../../assets/icons'\nimport { Typography } from '../../ui/Typography/Typography'\n// import { L_HTML } from '../../providers/Lokalise'\nimport { Button } from '../../ui/Button/Button'\nimport { L } from '../../providers/Lokalise'\n\nexport interface ImitatorNoAccessWarningProps {\n show?: boolean\n onClose?: () => void\n}\n\nconst ImitatorNoAccessWarning: FC = ({\n show,\n onClose,\n}) => {\n if (!show) return null\n\n return (\n }\n >\n \n {L('imitator_restricted_access_title')}\n \n \n {L('imitator_restricted_access_text')}\n \n \n \n )\n}\n\nexport { ImitatorNoAccessWarning }\n","import React, { FC, ReactElement, useState } from 'react'\r\nimport { useAtom } from 'jotai'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { NavLink } from 'react-router-dom'\r\nimport { colors } from '../../../theme/palette'\r\nimport { useContainerStyles } from '../../../theme/layout'\r\nimport breakpoints from '../../../theme/breakpoints'\r\nimport { Button, ButtonLink } from '../Button/Button'\r\nimport { ImitatorNoAccessWarning } from '../../modules/Imitator/ImitatorNoAccessWarning'\r\nimport { profileAtom } from '../../../api/profile/profile'\r\n\r\nexport interface IComponent {\r\n title: string\r\n component: ReactElement\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n container: {\r\n background: colors.green,\r\n width: '100%',\r\n },\r\n menu: {\r\n display: 'flex',\r\n width: '100%',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '2rem 0',\r\n listStyle: 'none',\r\n flexWrap: 'wrap',\r\n margin: 0,\r\n [`@media (max-width: ${breakpoints.Desktop}px)`]: {},\r\n },\r\n item: {\r\n background: '#fff',\r\n flexGrow: 1,\r\n padding: '.5rem',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n padding: '1rem',\r\n },\r\n '&:first-child': {\r\n borderRadius: '4px 0 0 4px',\r\n padding: '1rem 0 1rem 1rem',\r\n },\r\n '&:last-child': {\r\n borderRadius: '0 4px 4px 0',\r\n padding: '1rem 1rem 1rem 0',\r\n },\r\n },\r\n },\r\n link: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n textDecoration: 'none',\r\n color: colors.black,\r\n fontSize: '1rem',\r\n padding: '0.75rem',\r\n borderRadius: '6px',\r\n transition: 'all .3s',\r\n '&:hover, &.active': {\r\n cursor: 'pointer',\r\n backgroundColor: colors.green,\r\n color: colors.white,\r\n },\r\n },\r\n})\r\n\r\ninterface TabItemProps {\r\n to: string\r\n label: string\r\n}\r\n\r\nconst TabItem: FC = ({ label, to }) => {\r\n const classes = useStyles()\r\n const [authProfile] = useAtom(profileAtom)\r\n const [showImitatorModal, setShowImitatorModal] = useState(false)\r\n\r\n if (to === '/mine-noter' && authProfile.isImitator) {\r\n return (\r\n <>\r\n
  • \r\n {\r\n e.preventDefault()\r\n setShowImitatorModal(true)\r\n }}\r\n className={({ isActive }) =>\r\n `${classes.link} ${isActive ? 'active' : 'link'}`\r\n }\r\n >\r\n
    {label}
    \r\n \r\n
  • \r\n setShowImitatorModal(false)}\r\n />\r\n \r\n )\r\n }\r\n\r\n return (\r\n
  • \r\n \r\n `${classes.link} ${isActive ? 'active' : 'link'}`\r\n }\r\n >\r\n
    {label}
    \r\n \r\n
  • \r\n )\r\n}\r\n\r\nconst TabbedMenu: FC = ({ children }) => {\r\n const classes = useStyles()\r\n const layout = useContainerStyles()\r\n\r\n return (\r\n
    \r\n
    \r\n
      {children}
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport { TabbedMenu, TabItem }\r\n","import React, { FC } from 'react'\r\nimport { useAtom } from 'jotai'\r\nimport { TabbedMenu, TabItem } from '../../ui/TabbedMenu'\r\nimport { L } from '../../providers/Lokalise'\r\nimport { profileAtom } from '../../../api/profile/profile'\r\n\r\nexport interface ILinkItem {\r\n to: string\r\n label: string\r\n}\r\n\r\nconst links: ILinkItem[] = [\r\n {\r\n to: '/mine-medlemmer',\r\n label: 'HEADER_FANEBLAD_EGNEMEDLEMMER-TITEL',\r\n },\r\n {\r\n to: '/alle-foas-medlemmer',\r\n label: 'HEADER_FANEBLAD_ALLEMEDLEMMER-TITEL',\r\n },\r\n {\r\n to: '/mine-arbejdsteder',\r\n label: 'HEADER_FANEBLAD_MINEARBEJDSSTEDER-TITEL',\r\n },\r\n {\r\n to: '/mine-noter',\r\n label: 'HEADER_FANEBLAD_MINENOTER-TITEL',\r\n },\r\n {\r\n to: '/mine-opdateringer',\r\n label: 'HEADER_FANEBLAD_MINEOPDATERINGER-TITEL',\r\n },\r\n]\r\n\r\nconst linksForSupporter: ILinkItem[] = [\r\n {\r\n to: '/mine-medlemmer',\r\n label: 'HEADER_FANEBLAD_EGNEMEDLEMMER-TITEL',\r\n },\r\n {\r\n to: '/alle-foas-medlemmer',\r\n label: 'HEADER_FANEBLAD_ALLEMEDLEMMER-TITEL',\r\n },\r\n {\r\n to: '/mine-arbejdsteder',\r\n label: 'HEADER_FANEBLAD_MINEARBEJDSSTEDER-TITEL',\r\n },\r\n {\r\n to: '/mine-opdateringer',\r\n label: 'HEADER_FANEBLAD_MINEOPDATERINGER-TITEL',\r\n },\r\n]\r\n\r\nconst Menu: FC = () => {\r\n const [authProfile] = useAtom(profileAtom)\r\n\r\n const linksToUse = links\r\n\r\n return (\r\n \r\n {linksToUse.map((link: ILinkItem) => {\r\n return (\r\n \r\n )\r\n })}\r\n \r\n )\r\n}\r\n\r\nexport { Menu }\r\n","import axios from 'axios'\r\nimport { IUserData } from './Auth0'\r\n\r\nexport const logout = (): void => {\r\n const localUser = localStorage.getItem('user_data')\r\n const user: IUserData = JSON.parse(localUser)\r\n const token = user.id_token\r\n const redirect_uri = process.env.REACT_APP_AUTH_REDIRECT_URI\r\n\r\n const translations = localStorage.getItem('translations')\r\n localStorage.clear()\r\n localStorage.setItem('translations', translations)\r\n\r\n const qParams = [\r\n `id_token_hint=${token}`,\r\n `post_logout_redirect_uri=${redirect_uri}`,\r\n // `state=some random string`,\r\n ].join('&')\r\n\r\n const logoutURL = `${process.env.REACT_APP_AUTH_AUTHORITY}/oauth2/logout?${qParams}`\r\n\r\n window.location.href = logoutURL\r\n\r\n axios.get(logoutURL).then(() => {\r\n window.history.replaceState(\r\n {},\r\n document.title,\r\n window.location.pathname\r\n )\r\n })\r\n}\r\n","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { Link } from 'react-router-dom'\r\nimport { useAtom } from 'jotai'\r\nimport { useContainerStyles } from '../../../theme/layout'\r\nimport { colors } from '../../../theme/palette'\r\nimport { Foa, Help, HandshakeFill, Heart } from '../../../assets/icons'\r\nimport { Typography } from '../Typography/Typography'\r\nimport { Button } from '../Button/Button'\r\nimport { AuthProfile, profileAtom } from '../../../api/profile/profile'\r\nimport { isAuthenticatedAtom, chooseImitatorAtom } from '../../../store/auth'\r\nimport { Circle, CircleIcon, CircleIcon2 } from '../Circle/Circle'\r\nimport { L } from '../../providers/Lokalise'\r\nimport { Menu } from '../../Navigation/Menu/Menu'\r\nimport breakpoints from '../../../theme/breakpoints'\r\nimport { logout } from '../../../utils/Logout'\r\n\r\nconst useStyles = createUseStyles((theme) => ({\r\n container: {\r\n position: 'fixed',\r\n backgroundColor: theme.palette.navBackgroundColor,\r\n width: '100%',\r\n top: 0,\r\n height: 'max-content',\r\n borderBottom: `1px solid ${theme.palette.borderColor}`,\r\n background: colors.white,\r\n zIndex: 1,\r\n 'body.no-scroll &': {\r\n paddingRight: '17px',\r\n },\r\n },\r\n desktopOnly: {\r\n [`@media (max-width: ${breakpoints.Desktop}px)`]: {\r\n display: 'none',\r\n },\r\n },\r\n inner: {\r\n height: theme.sizes.navbarDesktopHeight,\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n },\r\n brandIcon: {\r\n display: 'flex',\r\n height: '100%',\r\n maxWidth: '7.813rem',\r\n },\r\n containerLogin: {\r\n textAlign: 'right',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n color: colors.black,\r\n },\r\n profileLink: {\r\n textDecoration: 'underline',\r\n color: 'inherit',\r\n cursor: 'pointer',\r\n '&:hover, &:focus, &:active': {\r\n opacity: '0.8',\r\n },\r\n },\r\n greenText: {\r\n color: theme.colors.green500,\r\n },\r\n containerProfilePicture: {\r\n padding: '0 1rem',\r\n width: '80px',\r\n },\r\n logo: {},\r\n helpContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n marginRight: '30px',\r\n cursor: 'pointer',\r\n },\r\n}))\r\n\r\nconst NavbarDesktop: React.FC = () => {\r\n const classes = useStyles()\r\n const layout = useContainerStyles()\r\n const [profile, _setProfile] = useAtom(profileAtom)\r\n const [isAuthenticated, _setIsAuthenticated] = useAtom(isAuthenticatedAtom)\r\n const [chooseImitator, setChooseImitator] = useAtom(chooseImitatorAtom)\r\n const changeMember = (): void => {\r\n const localProfileData = localStorage.getItem('profile_data')\r\n const data: AuthProfile = JSON.parse(localProfileData)\r\n data.apiProfile = undefined\r\n localStorage.setItem('profile_data', JSON.stringify(data))\r\n _setProfile(data)\r\n setChooseImitator(true)\r\n _setIsAuthenticated(false)\r\n }\r\n\r\n const scrollToFooter = (): void => {\r\n const footer = document.querySelector('#footer')\r\n if (footer) {\r\n window.scrollTo({\r\n top: footer.getBoundingClientRect().top,\r\n left: 0,\r\n behavior: 'smooth',\r\n })\r\n }\r\n }\r\n\r\n const organizeLink = (): JSX.Element => {\r\n return (\r\n <>\r\n {isAuthenticated || (isAuthenticated && !chooseImitator) ? (\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n\r\n \r\n Organisering\r\n \r\n \r\n ) : null}\r\n \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n {isAuthenticated ? (\r\n {\r\n scrollToFooter()\r\n }}\r\n >\r\n \r\n \r\n \r\n\r\n \r\n Hjælp\r\n \r\n \r\n ) : null}\r\n\r\n {organizeLink()}\r\n\r\n {isAuthenticated || (!isAuthenticated && chooseImitator) ? (\r\n <>\r\n {isAuthenticated && (\r\n <>\r\n \r\n \r\n {L(\r\n 'GENERISK_HEADER_LOGINSOM_TEKST'\r\n )}\r\n \r\n \r\n {profile?.apiProfile?.fullName}\r\n \r\n \r\n {/* \r\n \r\n \r\n \r\n {getInitials(\r\n profile.apiProfile\r\n .fullName\r\n )}\r\n \r\n \r\n \r\n
    */}\r\n \r\n )}\r\n \r\n {L('GENERISK_HEADER_LOGUD_KNAP')}\r\n \r\n \r\n ) : null}\r\n {profile && profile.isImitator && isAuthenticated ? (\r\n \r\n {L('GENERISK_HEADER_SKIFTMEDLEM_KNAP')}\r\n \r\n ) : null}\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport { NavbarDesktop }\r\n","import React, { useEffect, useState } from 'react'\r\nimport { axiosWithAuth } from './withAuth'\r\nimport { Dialog } from '../components/ui/Dialog/Dialog'\r\nimport { LockFill } from '../assets/icons'\r\nimport { Typography } from '../components/ui/Typography/Typography'\r\nimport { Button } from '../components/ui/Button/Button'\r\n\r\nconst REDIRECT_TO_FOA_CODES = [455, 456, 482, 483, 484, 490, 491, 494, 495, 503]\r\n\r\nconst Interceptor: React.FC = ({ children }) => {\r\n const [apiError, setApiError] = useState(false)\r\n const [errorMessage, setErrorMessage] = useState(\r\n undefined\r\n )\r\n const [errorStatusCode, setErrorStatusCode] = useState(\r\n undefined\r\n )\r\n\r\n useEffect(() => {\r\n const setError = (): void => {\r\n setApiError(true)\r\n }\r\n const interceptorId = axiosWithAuth.interceptors.response.use(\r\n (response) => {\r\n return response\r\n },\r\n (error) => {\r\n if (error.response.status > 401) {\r\n setError()\r\n setErrorMessage(\r\n error.response.data.Message &&\r\n error.response.data.Message !== ''\r\n ? error.response.data.Message\r\n : 'Kontakt din afdeling, hvis fejlen fortsætter'\r\n )\r\n\r\n setErrorStatusCode(error.response.status)\r\n }\r\n\r\n return {\r\n error: error.response.data,\r\n }\r\n }\r\n )\r\n return () => {\r\n axiosWithAuth.interceptors.request.eject(interceptorId)\r\n }\r\n }, [])\r\n\r\n const closeDialog = (): void => {\r\n if (errorStatusCode) {\r\n if (REDIRECT_TO_FOA_CODES.indexOf(errorStatusCode) !== -1) {\r\n window.location.href = 'https://www.foa.dk/'\r\n }\r\n }\r\n\r\n setErrorMessage(undefined)\r\n setApiError(false)\r\n setErrorStatusCode(undefined)\r\n }\r\n\r\n return (\r\n <>\r\n <>{children}\r\n\r\n {apiError ? (\r\n }\r\n >\r\n \r\n Der skete en fejl\r\n \r\n \r\n {errorMessage}\r\n \r\n \r\n \r\n ) : null}\r\n \r\n )\r\n}\r\n\r\nexport default Interceptor\r\n","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\n\r\nconst useStyles = createUseStyles({\r\n container: {},\r\n})\r\n\r\nconst Example: React.FC = () => {\r\n const classes = useStyles()\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default Example\r\n","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { colors } from '../../../theme/palette'\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n row: {\r\n backgroundColor: 'rgba(41, 122, 113, 0.1)',\r\n width: 'fit-content',\r\n color: colors.green500,\r\n display: 'flex',\r\n borderRadius: '4px',\r\n padding: '0.219rem 0.625rem',\r\n fontSize: '0.875rem',\r\n },\r\n}))\r\n\r\nconst Badge: React.FC = ({ children }) => {\r\n const classes = useStyles()\r\n\r\n return
    {children}
    \r\n}\r\n\r\nexport { Badge }\r\n","import React from 'react'\r\nimport { createUseStyles, useTheme } from 'react-jss'\r\nimport { StarFill, RatingStar } from '../../../assets/icons'\r\nimport breakpoints from '../../../theme/breakpoints'\r\n\r\ntype RuleNames = 'star' | 'span'\r\n\r\ninterface StyleProps {\r\n size: number\r\n useOnClick: boolean\r\n right?: string\r\n bottom?: string\r\n}\r\n\r\ninterface Props {\r\n active: boolean\r\n onClick?: (event: React.MouseEvent) => void\r\n size?: number\r\n right?: string\r\n bottom?: string\r\n}\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n star: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n borderRadius: '50%',\r\n boxSizing: 'border-box',\r\n textDecoration: 'none',\r\n aspectRatio: '1/1',\r\n textAlign: 'center',\r\n transition: 'all 0.2s',\r\n boxShadow: 0,\r\n border: '2px solid #fff',\r\n backgroundColor: '#F5F6F8',\r\n '&:hover': {\r\n cursor: ({ useOnClick }) => (useOnClick ? 'pointer' : 'inherit'),\r\n backgroundColor: '#ffffff',\r\n },\r\n '-webkit-appearance': 'none',\r\n '-moz-appearance': 'none',\r\n position: 'absolute',\r\n right: ({ size, right }) => {\r\n return right || `-${size / 3}px`\r\n },\r\n bottom: ({ size, bottom }) => {\r\n return bottom || `-${size / 2}px`\r\n },\r\n top: 'auto',\r\n // bottom: 0,\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n // top: '0',\r\n // bottom: 'auto',\r\n },\r\n },\r\n },\r\n span: {\r\n display: 'none',\r\n },\r\n}))\r\n\r\nconst Favorite: React.FC = ({\r\n active,\r\n onClick,\r\n size = 14,\r\n right,\r\n bottom,\r\n}) => {\r\n const theme = useTheme()\r\n const useOnClick = !!onClick\r\n const classes = useStyles({ ...{ size, useOnClick, right, bottom }, theme })\r\n\r\n const width = size ? `${size}px` : '14px'\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport { Favorite }\r\n","import { axiosWithAuth } from '../withAuth'\r\n\r\n/**\r\n * /favorit/tilfoejfavorit\r\n */\r\nconst setFavorite = async (id: string, type: string): Promise => {\r\n const url = `/favorit/tilfoejfavorit`\r\n\r\n return axiosWithAuth.post(url, null, {\r\n params: {\r\n 'request.favoritId': id,\r\n 'request.favoritType': type,\r\n },\r\n })\r\n}\r\n\r\nconst removeFavorite = async (id: string, type: string): Promise => {\r\n const url = `/favorit/fjernfavorit`\r\n\r\n return axiosWithAuth.delete(url, {\r\n params: {\r\n 'request.favoritId': id,\r\n 'request.favoritType': type,\r\n },\r\n })\r\n}\r\n\r\nexport { setFavorite, removeFavorite }\r\n","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { colors } from '../../../theme/palette'\r\nimport { Note } from '../../../assets/icons'\r\n\r\ninterface Props {\r\n onClick: (event: React.MouseEvent) => void\r\n}\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n note: {\r\n width: '53px',\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n boxSizing: 'border-box',\r\n textDecoration: 'none',\r\n transition: 'all 0.2s',\r\n boxShadow: 0,\r\n border: '0',\r\n background: 'none',\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n '-webkit-appearance': 'none',\r\n '-moz-appearance': 'none',\r\n },\r\n noteText: {\r\n position: 'absolute',\r\n color: colors.green500,\r\n fontSize: '14px',\r\n // top: '8px',\r\n // left: '23px',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n },\r\n}))\r\n\r\nconst NoteButton: React.FC = ({ onClick, children }) => {\r\n const classes = useStyles()\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport { NoteButton }\r\n","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport * as AccordionPrimitive from '@radix-ui/react-accordion'\r\nimport { ChevronDownFill } from '../../../assets/icons'\r\nimport { colors } from '../../../theme/palette'\r\nimport { Typography } from '../Typography/Typography'\r\n\r\nexport interface Props {\r\n title: string\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n '@keyframes slideDown': {\r\n from: {\r\n height: 0,\r\n },\r\n to: {\r\n height: 'var(--radix-accordion-content-height)',\r\n },\r\n },\r\n '@keyframes slideUp': {\r\n from: {\r\n height: 'var(--radix-accordion-content-height)',\r\n },\r\n to: {\r\n height: 0,\r\n },\r\n },\r\n accordion: {\r\n position: 'relative',\r\n borderRadius: '6px',\r\n backgroundColor: '#fff',\r\n border: '1px solid rgba(0, 0, 0, 0.2);',\r\n padding: '0 1.25rem',\r\n },\r\n trigger: {\r\n position: 'relative',\r\n all: 'unset',\r\n fontFamily: 'inherit',\r\n backgroundColor: 'transparent',\r\n padding: 0,\r\n height: '45px',\r\n flex: 1,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n fontSize: '15px',\r\n lineHeight: 1,\r\n color: 'hsl(250 43.0% 48.0%)',\r\n boxShadow: '0 1px 0 hsl(278deg 4% 89%)',\r\n width: '100%',\r\n cursor: 'pointer',\r\n },\r\n close: {\r\n width: '8px',\r\n right: '5px',\r\n position: 'absolute',\r\n transform: 'rotate(180deg)',\r\n transition: 'all .1s ease-in',\r\n '[data-state=\"open\"] > &': {\r\n transform: 'rotate(0deg)',\r\n },\r\n },\r\n item: {\r\n overflow: 'hidden',\r\n marginTop: 1,\r\n\r\n '&:first-child': {\r\n marginTop: 0,\r\n borderTopLeftRadius: 4,\r\n borderTopRightRadius: 4,\r\n },\r\n\r\n '&:last-child': {\r\n borderBottomLeftRadius: 4,\r\n borderBottomRightRadius: 4,\r\n },\r\n\r\n '&:focus-within': {\r\n position: 'relative',\r\n zIndex: 1,\r\n },\r\n },\r\n header: {\r\n all: 'unset',\r\n color: colors.green500,\r\n // margin: '0 1.25rem',\r\n },\r\n title: {\r\n color: colors.green500,\r\n },\r\n content: {\r\n overflow: 'hidden',\r\n fontSize: 15,\r\n color: 'black',\r\n paddingBottom: '1.25rem',\r\n '&[data-state=\"open\"]': {\r\n animation: `$slideDown 300ms cubic-bezier(0.87, 0, 0.13, 1)`,\r\n },\r\n '&[data-state=\"closed\"]': {\r\n animation: `$slideUp 300ms cubic-bezier(0.87, 0, 0.13, 1)`,\r\n },\r\n },\r\n formControl: {\r\n padding: '20px',\r\n },\r\n contentWrapper: {\r\n padding: '20px',\r\n },\r\n})\r\n\r\nconst Accordion: React.FC = ({ children, title }) => {\r\n const classes = useStyles()\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport { Accordion }\r\n","import React, {\r\n InputHTMLAttributes,\r\n DetailedHTMLProps,\r\n forwardRef,\r\n FC,\r\n} from 'react'\r\nimport { createUseStyles, useTheme } from 'react-jss'\r\nimport { colors } from '../../../theme/palette'\r\n\r\ntype RuleNames = 'label' | 'input' | 'container'\r\n\r\ntype InputProps = {\r\n isChecked: boolean\r\n label: string\r\n reversed?: boolean\r\n} & Omit<\r\n DetailedHTMLProps, HTMLInputElement>,\r\n 'size'\r\n>\r\n\r\ninterface StyleProps {\r\n isChecked: boolean\r\n reversed: boolean\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n container: {\r\n height: '1.5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n fontSize: '1rem',\r\n },\r\n input: {\r\n position: 'absolute',\r\n opacity: 0,\r\n '& + label:after': {\r\n content: 'none',\r\n },\r\n '&:checked + label:after': {\r\n content: '\"\"',\r\n },\r\n '&:focus + label::before': {\r\n outline: `${colors.green} auto 5px`,\r\n },\r\n },\r\n label: {\r\n position: 'relative',\r\n display: 'inline-block',\r\n paddingLeft: '2.125rem',\r\n paddingRight: ({ reversed }) => (reversed ? '2.125rem' : 0),\r\n height: '1.5rem',\r\n paddingTop: '.125rem',\r\n color: colors.black,\r\n cursor: 'pointer',\r\n '&:before, &:after': {\r\n position: 'absolute',\r\n content: '\"\"',\r\n display: 'inline-block',\r\n borderRadius: '.25rem',\r\n backgroundColor: ({ isChecked }) =>\r\n isChecked ? colors.green : colors.white,\r\n },\r\n '&:before': {\r\n height: '1.5rem',\r\n width: '1.5rem',\r\n border: `1px solid ${colors.green}`,\r\n left: ({ reversed }) => (!reversed ? 0 : 'auto'),\r\n right: ({ reversed }) => (reversed ? 0 : 'auto'),\r\n top: '0',\r\n },\r\n '&:after': {\r\n height: '0.5rem',\r\n width: '1rem',\r\n borderLeft: `0.2rem solid ${colors.white}`,\r\n borderBottom: `0.2rem solid ${colors.white}`,\r\n borderRadius: '0',\r\n transform: 'rotate(-45deg)',\r\n left: ({ reversed }) => (!reversed ? '0.25rem' : 'auto'),\r\n right: ({ reversed }) => (!reversed ? 'auto' : '4px'),\r\n top: '0.4rem',\r\n },\r\n },\r\n})\r\n\r\nconst Checkbox: FC = forwardRef(\r\n ({ label, required, isChecked, id, reversed = false, ...props }, ref) => {\r\n const theme = useTheme()\r\n const classes = useStyles({ ...{ isChecked, reversed }, theme })\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n )\r\n }\r\n)\r\n\r\nexport default Checkbox\r\n","import React, { FC } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport Checkbox from '../../ui/FormElememts/Checkbox'\r\n\r\nexport interface IItem {\r\n name: string\r\n}\r\n\r\ntype Props = {\r\n items: IItem[]\r\n isSelected: (item: IItem) => boolean\r\n handleChange: (item: IItem) => void\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n formControl: {\r\n padding: '20px 0',\r\n },\r\n})\r\n\r\nconst Checkboxes: FC = ({ items, handleChange, isSelected }) => {\r\n const classes = useStyles()\r\n\r\n return (\r\n <>\r\n {items.map((item: IItem) => {\r\n return (\r\n
    \r\n {\r\n handleChange(item)\r\n }}\r\n label={item.name}\r\n isChecked={isSelected(item)}\r\n />\r\n
    \r\n )\r\n })}\r\n \r\n )\r\n}\r\n\r\nexport { Checkboxes }\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @typescript-eslint/no-use-before-define */\r\nimport React from 'react'\r\nimport ReactDOM from 'react-dom'\r\n\r\n// eslint-disable-next-line import/no-extraneous-dependencies\r\nimport { createUseStyles } from 'react-jss'\r\nimport breakpoints from '../../../theme/breakpoints'\r\nimport { colors } from '../../../theme/palette'\r\nimport { zIndexes } from '../../../theme/zIndex'\r\nimport { Close as CloseIcon } from '../../../assets/icons'\r\n\r\ninterface IProps {\r\n isShowing: boolean\r\n hide: any\r\n hideHeader?: boolean\r\n level?: number\r\n}\r\n\r\nconst useStyles = createUseStyles((theme) => ({\r\n '@keyframes slideRight': {\r\n from: {\r\n transform: 'translateX(100%)',\r\n },\r\n to: {\r\n transform: 'translateX(0)',\r\n },\r\n },\r\n container: {\r\n color: theme.palette.secondary,\r\n height: '100vh',\r\n width: '100%',\r\n maxWidth: '100%',\r\n position: 'fixed',\r\n zIndex: zIndexes.drawer,\r\n top: 0,\r\n backgroundColor: theme.palette.navBackgroundColor,\r\n // animation: `.3s $slideRight forwards`,\r\n visibility: 'hidden',\r\n overflow: 'hidden',\r\n transform: 'translateX(100%)',\r\n transition: '.3s ease-in',\r\n right: 0,\r\n // paddingTop: '82px',\r\n boxShadow: '0px 0px 16px rgba(0, 0, 0, 0.25)',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n width: '500px',\r\n },\r\n },\r\n '&.active': {\r\n transform: 'translateX(0)',\r\n visibility: 'visible',\r\n },\r\n },\r\n button: {\r\n position: 'absolute',\r\n zIndex: zIndexes.drawer + 1,\r\n right: 0,\r\n top: 0,\r\n display: 'inline-block',\r\n margin: '20px 48px 0',\r\n borderRadius: '6px',\r\n boxSizing: 'border-box',\r\n textDecoration: 'none',\r\n fontWeight: 400,\r\n textAlign: 'center',\r\n transition: 'all 0.2s',\r\n background: 'transparent',\r\n boxShadow: 0,\r\n height: '10px',\r\n width: '10px',\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n '-webkit-appearance': 'none',\r\n '-moz-appearance': 'none',\r\n border: '0',\r\n '&:hover svg': {\r\n fill: colors.gray500,\r\n },\r\n },\r\n medium: {\r\n fontSize: '.875em',\r\n },\r\n large: {\r\n fontSize: '1rem',\r\n },\r\n xlarge: {\r\n fontSize: '1.125rem',\r\n },\r\n overlay: {\r\n position: 'fixed',\r\n left: '0',\r\n top: '0',\r\n height: '100vh',\r\n width: '100vw',\r\n zIndex: '2',\r\n },\r\n}))\r\n\r\nconst Overlay: React.FC = ({ children, isShowing, hide }) => {\r\n const node = React.useRef(null)\r\n const classes = useStyles()\r\n const handleClickOutside = (e: any): void => {\r\n if (node && node.current && node.current.contains(e.target)) {\r\n return\r\n }\r\n\r\n if (\r\n node &&\r\n node.current &&\r\n e.target.classList.contains('ignore-clickoutside')\r\n ) {\r\n return\r\n }\r\n\r\n // outside click\r\n if (isShowing) {\r\n if (hide) hide()\r\n }\r\n }\r\n\r\n React.useEffect(() => {\r\n if (isShowing) {\r\n const documentWidth = document.documentElement.clientWidth\r\n const windowWidth = window.innerWidth\r\n const scrollBarWidth = windowWidth - documentWidth\r\n\r\n document.body.style.overflow = 'hidden'\r\n document.body.style.paddingRight = `${scrollBarWidth}px`\r\n document.body.classList.add('no-scroll')\r\n } else {\r\n document.body.style.overflow = 'unset'\r\n document.body.style.paddingRight = 'unset'\r\n document.body.classList.remove('no-scroll')\r\n }\r\n }, [isShowing])\r\n\r\n React.useEffect(() => {\r\n // add when mounted\r\n document.addEventListener('keydown', onKeyPressed)\r\n document.addEventListener('mousedown', handleClickOutside)\r\n\r\n // return function to be called when unmounted\r\n return () => {\r\n document.removeEventListener('keydown', onKeyPressed)\r\n document.removeEventListener('mousedown', handleClickOutside)\r\n }\r\n })\r\n\r\n const onKeyPressed = (e: any): void => {\r\n if (e.key === 'Escape' && hide && isShowing) {\r\n e.preventDefault()\r\n hide()\r\n }\r\n }\r\n\r\n return ReactDOM.createPortal(\r\n <>\r\n {isShowing ? (\r\n hide()}\r\n tabIndex={-1}\r\n role=\"button\"\r\n aria-label=\"overlay\"\r\n onKeyDown={() => console.log('key down')}\r\n />\r\n ) : null}\r\n \r\n \r\n <>{children && children}\r\n
    \r\n ,\r\n document.getElementById('root') as HTMLElement\r\n )\r\n}\r\n\r\nexport { Overlay }\r\n","import React, { FC, useEffect, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useAtom } from 'jotai'\r\nimport { Drawer } from '../../ui/Drawer/Drawer'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { Settings } from '../../../assets/icons'\r\nimport {\r\n FilterPosition,\r\n FilterTRFor,\r\n FilterTypeOfRepresentative,\r\n FilterWorkGroup,\r\n FilterWorkplace,\r\n IFilter,\r\n initialSelectedFilters,\r\n} from '../../../models/Filter'\r\nimport {\r\n updateGroups,\r\n updateTypeOfRepresentatives,\r\n updatePositions,\r\n updateWorkplaces,\r\n updateTRFor,\r\n} from '../../../utils/filterhelper'\r\nimport { Accordion } from '../../ui/Accordion/Accordion'\r\nimport { Checkboxes } from './Checkboxes'\r\nimport { filterAtom, filterSelected } from '../../../store/filter/filterAtom'\r\nimport { Overlay } from '../../ui/Sidebar'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport Checkbox from '../../ui/FormElememts/Checkbox'\r\nimport { colors } from '../../../theme/palette'\r\n\r\nconst useStyles = createUseStyles({\r\n contentWrapper: {\r\n padding: '20px',\r\n overflow: 'auto',\r\n height: '100%',\r\n paddingBottom: '160px',\r\n },\r\n formControl: {\r\n padding: '20px 0',\r\n },\r\n accordionWrapper: {\r\n marginBottom: '20px',\r\n },\r\n filterBottom: {\r\n display: 'flex',\r\n position: 'absolute',\r\n bottom: '0',\r\n width: '100%',\r\n padding: '20px',\r\n left: '0',\r\n zIndex: 4,\r\n background: colors.white,\r\n borderTop: `1px solid ${colors.borderColor}`,\r\n '& > button': {\r\n flexGrow: 1,\r\n },\r\n '& > button:last-of-type': {\r\n marginRight: '0',\r\n },\r\n },\r\n})\r\n\r\nexport const Filter: FC = () => {\r\n const [selectedItems, setSelectedItems] = useState({\r\n ...initialSelectedFilters,\r\n })\r\n const classes = useStyles()\r\n const [filter] = useAtom(filterAtom)\r\n const [selected, setSelected] = useAtom(filterSelected)\r\n const [isOpen, setIsOpen] = useState(false)\r\n\r\n const onSubmit = (): void => {\r\n setIsOpen(false)\r\n setSelected(selectedItems)\r\n }\r\n\r\n useEffect(() => {\r\n setSelectedItems(selected)\r\n }, [selected])\r\n\r\n const onUpdateWorkplaces = (workPlace: FilterWorkplace): void => {\r\n const items = updateWorkplaces(workPlace, selectedItems)\r\n setSelectedItems(items)\r\n }\r\n\r\n const onUpdateGroups = (workGroup: FilterWorkGroup): void => {\r\n const items = updateGroups(workGroup, selectedItems)\r\n setSelectedItems(items)\r\n }\r\n\r\n const onUpdatePositions = (position: FilterPosition): void => {\r\n const items = updatePositions(position, selectedItems)\r\n setSelectedItems(items)\r\n }\r\n\r\n const onUpdateTypeOfRepresentatives = (\r\n pot: FilterTypeOfRepresentative\r\n ): void => {\r\n const items = updateTypeOfRepresentatives(pot, selectedItems)\r\n setSelectedItems(items)\r\n }\r\n\r\n const onUpdateTRFor = (trFor: FilterTRFor): void => {\r\n const items = updateTRFor(trFor, selectedItems)\r\n setSelectedItems(items)\r\n }\r\n\r\n const resetFilter = (): void => {\r\n setSelectedItems(initialSelectedFilters)\r\n setSelected(initialSelectedFilters)\r\n }\r\n\r\n return (\r\n
    \r\n }\r\n onClick={() => setIsOpen(true)}\r\n style={{ paddingLeft: '10px' }}\r\n >\r\n {L('MINEMEDLEMMER_FILTER_KNAP')}\r\n \r\n setIsOpen(false)}>\r\n \r\n {L_HTML('MINEMEDLEMMER_FILTER_TITEL_KNAP')}\r\n \r\n
    \r\n
    \r\n \r\n \r\n !!selectedItems.workplaces.find(\r\n (w) => w.id === workPlace.id\r\n )\r\n }\r\n />\r\n \r\n
    \r\n
    \r\n \r\n \r\n !!selectedItems.groups.find(\r\n (w) => w.id === group.id\r\n )\r\n }\r\n />\r\n \r\n
    \r\n
    \r\n \r\n \r\n !!selectedItems.positions.find(\r\n (w) => w.id === position.id\r\n )\r\n }\r\n />\r\n \r\n
    \r\n
    \r\n \r\n \r\n !!selectedItems.typeOfRepresentative.find(\r\n (t) => t.name === trust.name\r\n )\r\n }\r\n />\r\n \r\n
    \r\n\r\n
    \r\n \r\n <>\r\n {filter.representing.map(\r\n (trfor: FilterTRFor) => {\r\n return (\r\n \r\n {\r\n onUpdateTRFor(trfor)\r\n }}\r\n label={trfor.displayName}\r\n isChecked={\r\n !!selectedItems.representing.find(\r\n (t) =>\r\n t.name ===\r\n trfor.name\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 {L('MINEMEDLEMMER_FILTER_RYD-FILTRE_KNAP')}\r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n )\r\n}\r\n","import React, { FC } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useAtom } from 'jotai'\r\nimport { colors } from '../../../theme/palette'\r\nimport { Close } from '../../../assets/icons'\r\nimport {\r\n FilterPosition,\r\n FilterTRFor,\r\n FilterTypeOfRepresentative,\r\n FilterWorkGroup,\r\n FilterWorkplace,\r\n initialFilter,\r\n} from '../../../models/Filter'\r\nimport {\r\n updateGroups,\r\n updateTypeOfRepresentatives,\r\n updatePositions,\r\n updateWorkplaces,\r\n updateTRFor,\r\n} from '../../../utils/filterhelper'\r\nimport { filteredAtom, filterSelected } from '../../../store/filter/filterAtom'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport { baseButton } from '../../../theme/reuseables'\r\n\r\ninterface IPillProps {\r\n label: string\r\n onClick: (event: React.MouseEvent) => void\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n pills: {\r\n display: 'flex',\r\n height: 'fit-content',\r\n gap: '10px',\r\n flexWrap: 'wrap',\r\n padding: '.4rem 1rem 0 0',\r\n },\r\n numberOfMembers: {\r\n display: 'flex',\r\n flexShrink: '0',\r\n padding: '.8rem 1rem 0 0',\r\n },\r\n container: {\r\n display: 'flex',\r\n },\r\n button: {\r\n ...baseButton,\r\n ...{\r\n cursor: 'pointer',\r\n margin: 0,\r\n padding: 0,\r\n },\r\n },\r\n})\r\n\r\nconst pillStyles = createUseStyles({\r\n pill: {\r\n display: 'flex',\r\n flexShrink: 0,\r\n border: `1px solid ${colors.gray600}`,\r\n background: '#fff',\r\n color: '#000',\r\n padding: '0.375rem 0.625rem',\r\n borderRadius: '8px',\r\n transition: '.3s',\r\n '&:hover': {\r\n cursor: 'pointer',\r\n backgroundColor: colors.green500,\r\n color: colors.white,\r\n },\r\n },\r\n closeIcon: {\r\n backgroundColor: colors.green500,\r\n borderRadius: '50%',\r\n aspectRatio: '1/1',\r\n padding: '.2rem',\r\n width: 'fit-content',\r\n display: 'flex',\r\n alignItems: 'center',\r\n marginLeft: '5px',\r\n '& path': {\r\n strokeWidth: '6px',\r\n },\r\n },\r\n})\r\nexport const Pill: FC = ({ label, onClick }) => {\r\n const classes = pillStyles()\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport const FilterSummary: FC = () => {\r\n const [members] = useAtom(filteredAtom)\r\n const classes = useStyles()\r\n const [selected, setSelected] = useAtom(filterSelected)\r\n\r\n const onUpdateWorkplaces = (workPlace: FilterWorkplace): void => {\r\n const items = updateWorkplaces(workPlace, selected)\r\n setSelected(items)\r\n }\r\n\r\n const onUpdateTrFor = (trFor: FilterTRFor): void => {\r\n const items = updateTRFor(trFor, selected)\r\n setSelected(items)\r\n }\r\n\r\n const onUpdateGroups = (workGroup: FilterWorkGroup): void => {\r\n const items = updateGroups(workGroup, selected)\r\n setSelected(items)\r\n }\r\n\r\n const onUpdatePositions = (position: FilterPosition): void => {\r\n const items = updatePositions(position, selected)\r\n setSelected(items)\r\n }\r\n\r\n const onUpdateTypeOfRepresentatives = (\r\n pot: FilterTypeOfRepresentative\r\n ): void => {\r\n const items = updateTypeOfRepresentatives(pot, selected)\r\n setSelected(items)\r\n }\r\n\r\n const ifAny = (): boolean => {\r\n const { positions, workplaces, typeOfRepresentative, groups } = selected\r\n return (\r\n positions.length > 0 ||\r\n workplaces.length > 0 ||\r\n typeOfRepresentative.length > 0 ||\r\n groups.length > 0\r\n )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n Viser {members.length} medlemmer\r\n \r\n
    \r\n
    \r\n {selected.groups.map((g) => {\r\n return (\r\n onUpdateGroups(g)}\r\n />\r\n )\r\n })}\r\n {selected.typeOfRepresentative.map((p) => {\r\n return (\r\n onUpdateTypeOfRepresentatives(p)}\r\n />\r\n )\r\n })}\r\n {selected.positions.map((p) => {\r\n return (\r\n onUpdatePositions(p)}\r\n />\r\n )\r\n })}\r\n {selected.workplaces.map((w) => {\r\n return (\r\n onUpdateWorkplaces(w)}\r\n />\r\n )\r\n })}\r\n {selected.representing.map((tr) => {\r\n return (\r\n onUpdateTrFor(tr)}\r\n />\r\n )\r\n })}\r\n {ifAny() ? (\r\n setSelected(initialFilter)}\r\n >\r\n \r\n Ryd filtre\r\n \r\n \r\n ) : null}\r\n
    \r\n
    \r\n )\r\n}\r\n","import React, { ReactElement } from 'react'\r\n// eslint-disable-next-line import/no-extraneous-dependencies\r\nimport { Meta } from '@storybook/react'\r\nimport InputComponent from '../Input'\r\n\r\nexport default {\r\n title: 'Components/UI/FormElements/Input',\r\n component: InputComponent,\r\n} as Meta\r\n\r\nexport function Input({ ...args }): ReactElement {\r\n return \r\n}\r\n\r\nexport function InputRequired({ ...args }): ReactElement {\r\n return \r\n}\r\n","import React, { useState } from 'react'\r\nimport { createUseStyles, useTheme } from 'react-jss'\r\nimport { colors } from '../../../theme/palette'\r\nimport { Search as SearchIcon, StarFill, Close } from '../../../assets/icons'\r\nimport { Input } from '../FormElememts/stories/Input.stories'\r\nimport { Button } from '../Button/Button'\r\nimport { baseButton } from '../../../theme/reuseables'\r\n\r\ntype RuleNames =\r\n | 'label'\r\n | 'input'\r\n | 'container'\r\n | 'icon'\r\n | 'searchButton'\r\n | 'button'\r\n\r\ninterface StyleProps {\r\n query: string\r\n handleSearch?: () => void\r\n typeSearch?: string\r\n}\r\n\r\ntype Props = {\r\n label: string\r\n required: boolean\r\n typeSearch: string\r\n searchButtonLabel: string\r\n style?: React.CSSProperties\r\n onSearch?: (search: string) => void\r\n onChange?: (search: string) => void\r\n autoFocus?: boolean\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n container: {\r\n position: 'relative',\r\n width: '100%',\r\n },\r\n input: {\r\n height: '3.125rem',\r\n border: `1px solid ${colors.borderColor}`,\r\n borderRadius: '6px',\r\n width: '100%',\r\n fontSize: '1.125rem',\r\n paddingLeft: '1.25rem',\r\n '&:focus': {\r\n borderColor: colors.green500,\r\n outlineColor: colors.green500,\r\n },\r\n '&:active': {\r\n borderColor: colors.green500,\r\n outlineColor: colors.green500,\r\n },\r\n '&:focus ~ $label': {\r\n display: 'none',\r\n },\r\n '&:focus ~ $searchButton': {\r\n borderTopColor: colors.green500,\r\n borderBottomColor: colors.green500,\r\n borderRightColor: colors.green500,\r\n },\r\n },\r\n label: {\r\n display: ({ query }) => (query.length === 0 ? 'inline' : 'none'),\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n left: '1.25rem',\r\n fontSize: ({ query }) => (query.length === 0 ? '1.125rem' : '0.75rem'),\r\n top: ({ query }) => (query.length === 0 ? '50%' : '1.825rem'),\r\n transform: ({ query }) =>\r\n query.length === 0 ? 'translateY(-50%)' : 'unset',\r\n color: colors.labelColor,\r\n transition: '0.2s ease all',\r\n },\r\n button: {\r\n ...baseButton,\r\n ...{\r\n cursor: 'pointer',\r\n width: 'auto',\r\n padding: '3px',\r\n margin: '0',\r\n borderRadius: '50%',\r\n background: colors.gray500,\r\n position: 'absolute',\r\n right: '68px',\r\n top: '13px',\r\n zIndex: '3',\r\n },\r\n },\r\n searchButton: {\r\n borderTopRightRadius: '6px',\r\n borderBottomRightRadius: '6px',\r\n borderLeft: `1px solid ${colors.borderColor}`,\r\n borderRight: 'none',\r\n borderBottom: 'none',\r\n borderTop: 'none',\r\n color: colors.white,\r\n position: 'absolute',\r\n width: '3.75em',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '44px',\r\n top: '2px',\r\n right: '2px',\r\n '&:hover': {\r\n cursor: 'pointer',\r\n borderColor: colors.green500,\r\n },\r\n '&:active': {\r\n borderColor: colors.green500,\r\n outlineColor: colors.green500,\r\n },\r\n '-webkit-appearance': 'none',\r\n '-moz-appearance': 'none',\r\n\r\n // Primary specifics\r\n backgroundColor: ({ typeSearch }) =>\r\n typeSearch === 'primary' ? colors.white : colors.green500,\r\n\r\n // Secondary specifics\r\n minWidth: ({ typeSearch }) =>\r\n typeSearch === 'secondary' ? '8rem' : 'unset',\r\n },\r\n icon: {\r\n // Primary specifics\r\n display: ({ typeSearch }) =>\r\n typeSearch === 'primary' ? 'block' : 'none',\r\n width: '1.325em',\r\n color: colors.green500,\r\n },\r\n})\r\n\r\nconst SearchField: React.FC = ({\r\n label,\r\n required,\r\n typeSearch = 'primary',\r\n searchButtonLabel,\r\n autoFocus,\r\n onSearch,\r\n onChange,\r\n ...props\r\n}) => {\r\n const [query, setQuery] = useState('')\r\n const theme = useTheme()\r\n const classes = useStyles({ ...{ query, typeSearch }, theme })\r\n const handleSearch = (): void => {\r\n if (onSearch) {\r\n onSearch(query)\r\n }\r\n }\r\n return (\r\n
    \r\n {\r\n setQuery(e.target.value)\r\n\r\n if (onChange) {\r\n onChange(e.target.value)\r\n }\r\n }}\r\n />\r\n {query && (\r\n {\r\n setQuery('')\r\n\r\n if (onChange) {\r\n onChange('')\r\n }\r\n }}\r\n >\r\n \r\n \r\n )}\r\n \r\n {typeSearch === 'primary' ? (\r\n \r\n ) : (\r\n
    {searchButtonLabel}
    \r\n )}\r\n \r\n
    \r\n )\r\n}\r\n\r\nSearchField.defaultProps = {\r\n onSearch: undefined,\r\n onChange: undefined,\r\n style: undefined,\r\n autoFocus: false,\r\n}\r\n\r\nexport default SearchField\r\n","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { colors } from '../../../theme/palette'\r\n\r\ntype RuleNames =\r\n | 'label'\r\n | 'input'\r\n | 'container'\r\n | 'innerContainer'\r\n | 'groupLabel'\r\n\r\ntype Props = {\r\n labels: string[]\r\n groupLabel: string\r\n activeValue: string\r\n} & React.ComponentPropsWithoutRef<'input'>\r\n\r\nconst useStyles = createUseStyles({\r\n container: {\r\n display: 'flex',\r\n },\r\n innerContainer: {\r\n display: 'flex',\r\n padding: '0 1.5rem',\r\n },\r\n input: {\r\n opacity: 0,\r\n width: 0,\r\n '&:checked + label:before': {\r\n border: `7px solid ${colors.green}`,\r\n },\r\n '&:checked': {\r\n '&::after': {\r\n content: '\"\"',\r\n },\r\n },\r\n },\r\n label: {\r\n position: 'relative',\r\n paddingLeft: '1.7rem',\r\n '&:before': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n display: 'inline-block',\r\n left: 0,\r\n top: '50%',\r\n marginTop: '-0.6rem',\r\n height: '1.2rem',\r\n width: '1.2rem',\r\n border: `1px solid ${colors.green}`,\r\n borderRadius: '3rem',\r\n backgroundColor: colors.white,\r\n fontSize: '1.125rem',\r\n cursor: 'pointer',\r\n },\r\n },\r\n groupLabel: {\r\n fontWeight: 700,\r\n },\r\n})\r\n\r\nconst RadioButtons: React.FC = ({\r\n labels,\r\n groupLabel,\r\n activeValue,\r\n ...props\r\n}) => {\r\n const classes = useStyles()\r\n\r\n return (\r\n
    \r\n

    {groupLabel}

    \r\n {!!labels &&\r\n labels.map((label) => (\r\n
    \r\n \r\n \r\n
    \r\n ))}\r\n
    \r\n )\r\n}\r\n\r\nexport default RadioButtons\r\n","import React, { FC, useEffect, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useNavigate } from 'react-router-dom'\r\nimport { DialogClose } from '@radix-ui/react-dialog'\r\nimport { AddContact } from '../../../assets/icons'\r\nimport { baseButton } from '../../../theme/reuseables'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { Circle } from '../../ui/Card'\r\nimport { CircleIcon } from '../../ui/Circle/Circle'\r\nimport Checkbox from '../../ui/FormElememts/Checkbox'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport { Dialog } from '../../ui/Dialog/Dialog'\r\nimport { colors } from '../../../theme/palette'\r\n\r\nconst useStyles = createUseStyles({\r\n button: {\r\n ...baseButton,\r\n ...{\r\n margin: 0,\r\n padding: '0.5rem',\r\n cursor: 'pointer',\r\n },\r\n },\r\n modalButtons: {\r\n display: 'flex',\r\n },\r\n modalCheckbox: {\r\n display: 'flex',\r\n position: 'absolute',\r\n right: '20px',\r\n top: '20px',\r\n },\r\n})\r\n\r\nconst GotoMembrsearchModal: FC = () => {\r\n const [showAgain, setShowAgain] = useState(true)\r\n const [hideMemberDialog, setHideMemberDialog] = useState(false)\r\n const classes = useStyles()\r\n const navigate = useNavigate()\r\n\r\n useEffect(() => {\r\n const localData = localStorage.getItem('dialog1_show')\r\n\r\n if (localData) {\r\n const parsed = JSON.parse(localData)\r\n\r\n if (parsed === false) {\r\n setHideMemberDialog(true)\r\n }\r\n }\r\n }, [])\r\n\r\n if (hideMemberDialog) {\r\n return (\r\n navigate('/alle-foas-medlemmer')}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n {L('MINEMEDLEMMER_TILFØJKOLLEGA_KNAP')}\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\n \r\n {L('MINEMEDLEMMER_TILFØJKOLLEGA_KNAP')}\r\n \r\n \r\n }\r\n hideClose\r\n icon={}\r\n >\r\n
    \r\n setShowAgain(!showAgain)}\r\n />\r\n
    \r\n \r\n {L_HTML('TILFØJ-KOLLEGA_POPUP_OVERSKRIFT')}\r\n \r\n \r\n {L_HTML('TILFØJ-KOLLEGA-POPUP-TEXT')}\r\n \r\n
    \r\n \r\n {\r\n if (!showAgain) {\r\n localStorage.setItem(\r\n 'dialog1_show',\r\n JSON.stringify(false)\r\n )\r\n }\r\n }}\r\n >\r\n {L_HTML('TILFØJ-KOLLEGA-POPUP-ANNULER_KNAP')}\r\n \r\n \r\n\r\n {\r\n if (!showAgain) {\r\n localStorage.setItem(\r\n 'dialog1_show',\r\n JSON.stringify(false)\r\n )\r\n }\r\n navigate('/alle-foas-medlemmer')\r\n }}\r\n >\r\n {L_HTML('TILFØJ-KOLLEGA-POPUP-SØG_KNAP')}\r\n \r\n
    \r\n \r\n )\r\n}\r\n\r\nexport { GotoMembrsearchModal }\r\n","import React, { FC, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useAtom } from 'jotai'\r\nimport { Dialog } from '../../ui/Dialog/Dialog'\r\nimport { Foa } from '../../../assets/icons'\r\nimport { baseButton } from '../../../theme/reuseables'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport { Circle } from '../../ui/Card'\r\nimport { CircleIcon } from '../../ui/Circle/Circle'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { colors } from '../../../theme/palette'\r\nimport { profileAtom } from '../../../api/profile/profile'\r\nimport { ImitatorNoAccessWarning } from '../Imitator/ImitatorNoAccessWarning'\r\n\r\nconst useStyles = createUseStyles({\r\n button: {\r\n ...baseButton,\r\n ...{\r\n margin: 0,\r\n padding: '0.5rem 0rem 0.5rem 2rem',\r\n cursor: 'pointer',\r\n },\r\n },\r\n linkArea: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n maxWidth: '250px',\r\n width: '100%',\r\n alignItems: 'center',\r\n marginTop: '20px',\r\n '& p': {\r\n margin: '20px 0',\r\n },\r\n '& button': {\r\n width: '100%',\r\n flexGrow: 1,\r\n },\r\n },\r\n})\r\n\r\nconst SignupMemberModal: FC = () => {\r\n const classes = useStyles()\r\n const [authProfile] = useAtom(profileAtom)\r\n const [showImitatorModal, setShowImitatorModal] = useState(false)\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {L_HTML('BLANKETTER_POPUP_ÅBEN_KNAP')}\r\n \r\n \r\n }\r\n icon={}\r\n iconBGColor={colors.white}\r\n iconBorder={colors.borderColor}\r\n >\r\n \r\n {L_HTML('BLANKETTER_POPUP_OVERSKRIFT')}\r\n \r\n \r\n {L_HTML('BLANKETTER_POPUP_TEXT')}\r\n \r\n
    \r\n {/* \r\n {L_HTML('BLANKETTER_POPUP_INDEMELDELSE_TEXT')}\r\n */}\r\n {\r\n if (authProfile.isImitator) {\r\n setShowImitatorModal(true)\r\n } else {\r\n window.open(\r\n // eslint-disable-next-line max-len\r\n process.env.REACT_APP_LINK_INDEMELDELSE,\r\n '_blank'\r\n )\r\n }\r\n }}\r\n >\r\n {L_HTML('BLANKETTER_POPUP_INDEMELDELSE_KNAP')}\r\n \r\n
    \r\n\r\n
    \r\n {/* \r\n {L_HTML('BLANKETTER_POPUP_RINGOP_TEXT')}\r\n */}\r\n {\r\n if (authProfile.isImitator) {\r\n setShowImitatorModal(true)\r\n } else {\r\n window.open(\r\n // eslint-disable-next-line max-len\r\n process.env.REACT_APP_LINK_RING_MIG_OP,\r\n '_blank'\r\n )\r\n }\r\n }}\r\n >\r\n {L_HTML('BLANKETTER_POPUP_RINGOP_KNAP')}\r\n \r\n
    \r\n
    \r\n {/* \r\n {' '}\r\n {L_HTML('BLANKETTER_POPUP_KONTIGENT_TEXT')}\r\n */}\r\n {\r\n window.open(\r\n // eslint-disable-next-line max-len\r\n 'https://www.foa.dk/bliv-medlem/kontingenter?utm_source=MineMedlemmer&utm_medium=web&utm_campaign=tillidsvalgt',\r\n '_blank'\r\n )\r\n }}\r\n >\r\n {L_HTML('BLANKETTER_POPUP_KONTIGENT_KNAP')}\r\n \r\n
    \r\n \r\n setShowImitatorModal(false)}\r\n />\r\n \r\n )\r\n}\r\n\r\nexport { SignupMemberModal }\r\n","import React, { FC } from 'react'\r\nimport { GotoMembrsearchModal } from '../GotoMembrsearchModal'\r\nimport { SignupMemberModal } from '../SignupMemberModal'\r\n\r\ninterface HeaderLinksProps {\r\n showGotoMembrsearchModal?: boolean\r\n}\r\n\r\nconst HeaderLinks: FC = ({ showGotoMembrsearchModal }) => {\r\n return (\r\n <>\r\n {showGotoMembrsearchModal ? : null}\r\n \r\n \r\n )\r\n}\r\n\r\nHeaderLinks.defaultProps = {\r\n showGotoMembrsearchModal: true,\r\n}\r\n\r\nexport { HeaderLinks }\r\n","/* eslint-disable max-len */\r\nimport React, { useCallback, useEffect, useState } from 'react'\r\nimport { useAtom } from 'jotai'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useSearchParams } from 'react-router-dom'\r\nimport { Member } from '../../../models/Member'\r\nimport { IFilter, initialSelectedFilters } from '../../../models/Filter'\r\nimport { membersAtom } from '../../../api/members/members'\r\nimport {\r\n Card,\r\n CardCell,\r\n CardList,\r\n CardMobile,\r\n CardHeaderCell,\r\n CardHeader,\r\n CardContentMobile,\r\n CircleText,\r\n Circle,\r\n} from '../../ui/Card'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport { getInitials } from '../../../utils/initials'\r\nimport { Badge } from '../../ui/Badge/Badge'\r\nimport { Favorite } from '../../ui/Favorite'\r\nimport { removeFavorite, setFavorite } from '../../../api/favorite'\r\nimport { NoteButton } from '../../ui/NoteButton'\r\nimport { Filter } from './Filter'\r\nimport {\r\n filterAtom,\r\n filteredAtom,\r\n searchAtom,\r\n showOnlyFavorites,\r\n filterSelected,\r\n} from '../../../store/filter/filterAtom'\r\nimport { FilterSummary } from '../../modules/Filter/FiltersSummary'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { colors } from '../../../theme/palette'\r\nimport { SendFill, SendToMany, Star, StarFill } from '../../../assets/icons'\r\nimport breakpoints from '../../../theme/breakpoints'\r\nimport { SortButton } from '../../ui/SortButton'\r\nimport useSortMembersList from '../../../hooks/useSortMembersList'\r\nimport SearchField from '../../ui/SearchField/SearchField'\r\nimport { formatDate } from '../../../utils/format'\r\nimport Checkbox from '../../ui/FormElememts/Checkbox'\r\nimport RadioButtons from '../../ui/FormElememts/RadioButton'\r\nimport { Dialog } from '../../ui/Dialog/Dialog'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport { baseButton } from '../../../theme/reuseables'\r\nimport { HeaderLinks } from '../../modules/Headerlinks'\r\nimport { profileAtom } from '../../../api/profile/profile'\r\nimport { ImitatorNoAccessWarning } from '../../modules/Imitator/ImitatorNoAccessWarning'\r\n\r\ntype IData = {\r\n filter: IFilter\r\n members: Member[]\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n '@keyframes fadeIn': {\r\n from: {\r\n opacity: 0,\r\n },\r\n to: {\r\n opacity: 1,\r\n },\r\n },\r\n container: {\r\n padding: '0 1.5rem',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n padding: '0',\r\n },\r\n },\r\n },\r\n headerArea: {\r\n display: 'flex',\r\n padding: '.5rem 0',\r\n minHeight: '5rem',\r\n },\r\n headerAreaTop: {\r\n display: 'flex',\r\n padding: '1rem 0 .5rem',\r\n borderBottom: `1px solid ${colors.borderColor}`,\r\n marginBottom: '1rem',\r\n },\r\n topArea: {\r\n borderBottom: `1px solid ${colors.gray700}`,\r\n // TODO: remove this when this area has been developed.\r\n minHeight: '60px',\r\n },\r\n headerActions: {\r\n display: 'flex',\r\n flexGrow: 1,\r\n marginLeft: 'auto',\r\n justifyContent: 'flex-end',\r\n alignItems: 'flex-start',\r\n flexShrink: 0,\r\n },\r\n sendingEmailSettings: {\r\n display: 'flex',\r\n padding: '.5rem 1rem',\r\n minHeight: '5rem',\r\n width: '100%',\r\n backgroundColor: colors.green200,\r\n color: colors.black,\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n '& span': {\r\n fontWeight: 700,\r\n },\r\n animation: '.5s $fadeIn',\r\n },\r\n members: {\r\n paddingTop: '20px',\r\n },\r\n sortPlaceholder: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '0.75em 1.75em',\r\n margin: '0 0.3em 0.3em 0',\r\n borderRadius: '6px',\r\n boxSizing: 'border-box',\r\n textDecoration: 'none',\r\n fontWeight: 400,\r\n textAlign: 'center',\r\n transition: 'all 0.2s',\r\n boxShadow: 0,\r\n '&:hover': {\r\n cursor: 'pointer',\r\n color: colors.black,\r\n fontWeight: '700',\r\n },\r\n '-webkit-appearance': 'none',\r\n '-moz-appearance': 'none',\r\n fontStyle: 'normal',\r\n fontSize: '16px',\r\n lineHeight: '120%',\r\n color: '#000000',\r\n border: 0,\r\n background: 'none',\r\n },\r\n dialogButtonsContainer: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'space-around',\r\n },\r\n button: {\r\n ...baseButton,\r\n ...{\r\n cursor: 'pointer',\r\n },\r\n },\r\n modalButtons: {\r\n display: 'flex',\r\n },\r\n modalCheckbox: {\r\n display: 'flex',\r\n position: 'absolute',\r\n right: '20px',\r\n top: '20px',\r\n },\r\n numberOfMembers: {\r\n display: 'flex',\r\n padding: '30px 0 90px',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n iconWrapper: {\r\n position: 'relative',\r\n },\r\n searchField: {\r\n width: '100%',\r\n marginRight: '20px',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n width: 'auto',\r\n minWidth: '425px',\r\n marginRight: '20px',\r\n },\r\n },\r\n },\r\n})\r\n\r\nconst gridTemplateColumns = '8% 24% 24% 12% 8% 16% 8%'\r\n\r\nconst Members: React.FC = (): JSX.Element => {\r\n const [showImitatorModal, setShowImitatorModal] = useState(false)\r\n const [data, update] = useAtom(membersAtom)\r\n const classes = useStyles()\r\n const [members] = useAtom(filteredAtom)\r\n const [, setFilter] = useAtom(filterAtom)\r\n const [, setSearchAtom] = useAtom(searchAtom)\r\n const [isSendingView, setIsSendingView] = useState(false)\r\n const [isEmailSentView, setIsEmailSentView] = useState(false)\r\n const [AllChosen, setAllChosen] = useState(false)\r\n const [emailType, setEmailType] = useState('Arbejdsmail')\r\n const [chosenMembers, setChosenMembers] = useState([])\r\n const [mailingList, setMailingList] = useState('')\r\n const [showDialog, setShowDialog] = useState(false)\r\n const [invalidEmailsList, setInvalidEmailsList] = useState([])\r\n const [favoritesOnly, setShowOnlyFavorites] = useAtom(showOnlyFavorites)\r\n const [, setFilterSelected] = useAtom(filterSelected)\r\n const [searchParams] = useSearchParams()\r\n const [initialized, setInitialized] = useState(false)\r\n const [authProfile] = useAtom(profileAtom)\r\n const [firstTimeSendingEmail, setfirstTimeSendingEmail] = useState(true)\r\n const [showFirstTimeModal, setHowFirstTimeShowModal] = useState(false)\r\n const FIRST_TIME_EMAIL_KEY = 'first_time_email'\r\n\r\n const { setSort, sortState } = useSortMembersList()\r\n\r\n useEffect(() => {\r\n const localStorageData = localStorage.getItem(FIRST_TIME_EMAIL_KEY)\r\n\r\n if (localStorageData) {\r\n setfirstTimeSendingEmail(false)\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n const d = data as IData\r\n if (d && d.filter && !initialized) {\r\n const wp = searchParams.get('wp')\r\n setInitialized(true)\r\n if (wp) {\r\n const found = d.filter.workplaces.find((w) => w.id === +wp)\r\n\r\n if (found) {\r\n const copy = { ...initialSelectedFilters }\r\n copy.workplaces.push(found)\r\n setFilterSelected(copy)\r\n }\r\n }\r\n setFilter(d.filter)\r\n\r\n if (!sortState) {\r\n setSort('name')\r\n }\r\n }\r\n }, [data, setFilter])\r\n\r\n const onClickFavorite = async (member: Member): Promise => {\r\n const callback = member.isFavorite ? removeFavorite : setFavorite\r\n\r\n const response = await callback(`${member.memberId}`, 'MedlemIdent')\r\n\r\n if (response) {\r\n update({ type: 'refetch' })\r\n }\r\n }\r\n\r\n const isChecked = (member: Member): boolean =>\r\n chosenMembers.some((element) => element.memberId === member.memberId)\r\n\r\n const handleSendingEmailView = (): void => setIsSendingView((v) => !v)\r\n\r\n const handleChooseAll = (): void => {\r\n if (chosenMembers.length === members.length) {\r\n setChosenMembers([])\r\n setAllChosen(false)\r\n } else {\r\n setChosenMembers([...members])\r\n setAllChosen(true)\r\n }\r\n }\r\n\r\n const checkValids = useCallback(() => {\r\n let isValid = true\r\n if (chosenMembers) {\r\n const invalidEmails = []\r\n const mailingListRaw = chosenMembers\r\n .map((member) => {\r\n const email =\r\n emailType === 'Arbejdsmail'\r\n ? member?.workContact?.email !== '' &&\r\n member?.workContact?.email\r\n : member?.privateContact?.email !== '' &&\r\n member?.privateContact?.email\r\n if (!email || email.length === 0) {\r\n invalidEmails.push(member.fullName)\r\n }\r\n return email\r\n })\r\n .filter(\r\n (validEmail) =>\r\n validEmail !== undefined && validEmail !== null\r\n )\r\n\r\n setInvalidEmailsList(invalidEmails)\r\n const mailingListString =\r\n window.navigator.platform.includes('Win') ||\r\n window.navigator.userAgent.includes('Win')\r\n ? mailingListRaw.join(';')\r\n : mailingListRaw.join(',')\r\n setMailingList(`${mailingListString}`)\r\n isValid = !!mailingListString.length && !invalidEmails.length\r\n\r\n if (isValid) {\r\n window.open(`mailto:?bcc=${mailingListString}`, '_blank')\r\n if (showDialog) {\r\n setShowDialog(false)\r\n }\r\n handleSendingEmailView()\r\n }\r\n }\r\n\r\n return isValid\r\n }, [chosenMembers, emailType, showDialog])\r\n\r\n const sendEmail = (): void => {\r\n window.open(`mailto:?bcc=${mailingList}`, '_blank')\r\n if (showDialog) {\r\n setShowDialog(false)\r\n }\r\n handleSendingEmailView()\r\n setIsEmailSentView(true)\r\n }\r\n\r\n const confirmSendingEmail = (): void => {\r\n sendEmail()\r\n setIsSendingView(false)\r\n setIsEmailSentView(true)\r\n }\r\n\r\n const handleSendingEmailDialog = (): void => {\r\n if (authProfile.isImitator) {\r\n setShowImitatorModal(true)\r\n setIsSendingView(false)\r\n setIsEmailSentView(false)\r\n setChosenMembers([])\r\n setAllChosen(false)\r\n } else {\r\n const isValid = checkValids()\r\n if (!isValid) {\r\n setShowDialog(true)\r\n }\r\n }\r\n }\r\n\r\n const onSearch = (search: string): void => {\r\n setSearchAtom(search)\r\n }\r\n\r\n const useSearch = (search: string): void => {\r\n setSearchAtom(search)\r\n }\r\n\r\n const zeroValidAddresses = (): JSX.Element => {\r\n return (\r\n <>\r\n \r\n Følgende personer mangler en{' '}\r\n {emailType === 'Arbejdsmail'\r\n ? 'arbejdsmail'\r\n : 'privat e-mailadresse'}{' '}\r\n :\r\n \r\n \r\n {invalidEmailsList.join(', ')}\r\n \r\n \r\n Du kan derfor ikke sende mails til dem.\r\n \r\n
    \r\n {\r\n setShowDialog(false)\r\n }}\r\n >\r\n OK\r\n \r\n
    \r\n \r\n )\r\n }\r\n\r\n const multipleInvalidAddresses = (): JSX.Element => {\r\n return (\r\n <>\r\n \r\n {emailType === 'Arbejdsmail'\r\n ? L_HTML(\r\n 'MINEMEDLEMMER_KONTAKTFLERE_ARBEJDSMAIL_FEEDBACKVINDUE_TITEL'\r\n )\r\n : L_HTML(\r\n 'MINEMEDLEMMER_KONTAKTFLERE_PRIVATMAIL_FEEDBACKVINDUE_TITEL'\r\n )}\r\n \r\n \r\n {invalidEmailsList.join(', ')}\r\n \r\n \r\n {L_HTML('MINEMEDLEMMER_KONTAKTFLERE_FEEDBACKVINDUE_TEXT_1')}\r\n \r\n
    \r\n {\r\n setShowDialog(false)\r\n }}\r\n >\r\n {L(\r\n 'MINEMEDLEMMER_KONTAKTFLERE_FEEDBACKVINDUE_ANNULLER_KNAP'\r\n )}\r\n \r\n \r\n {L(\r\n 'MINEMEDLEMMER_KONTAKTFLERE_FEEDBACKVINDUE_SEND_KNAP'\r\n )}\r\n \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\n
    \r\n
    \r\n \r\n {L_HTML('MINEMEDLEMMER_TITEL')}\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 {!isSendingView && !isEmailSentView && (\r\n }\r\n onClick={() => {\r\n if (firstTimeSendingEmail) {\r\n setHowFirstTimeShowModal(true)\r\n } else {\r\n handleSendingEmailView()\r\n }\r\n }}\r\n style={{ paddingLeft: '10px' }}\r\n >\r\n {L('MINEMEDLEMMER_KONTAKTFLERE_KNAP')}\r\n \r\n )}\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n onClick={() => setShowOnlyFavorites(!favoritesOnly)}\r\n >\r\n {!favoritesOnly\r\n ? `${L('MINEMEDLEMMER_UDVALGTEMEDLEMMER_KNAP_OFF')}`\r\n : `${L('MINEMEDLEMMER_UDVALGTEMEDLEMMER_KNAP_ON')}`}\r\n \r\n
    \r\n
    \r\n\r\n {isSendingView && (\r\n
    \r\n \r\n
    \r\n {chosenMembers.length}{' '}\r\n {L_HTML(\r\n 'MINEMEDLEMMER_KONTAKTFLERE_MEDLEMMER-VALGT_LABEL'\r\n )}\r\n
    \r\n
    \r\n \r\n setEmailType(e.currentTarget.value)\r\n }\r\n activeValue={emailType}\r\n />\r\n
    \r\n \r\n {L('MINEMEDLEMMER_KONTAKTFLERE_ANNULLER_KNAP')}\r\n \r\n }\r\n onClick={handleSendingEmailDialog}\r\n disabled={chosenMembers.length === 0}\r\n >\r\n {L('MINEMEDLEMMER_KONTAKTFLERE_SEND_KNAP')}\r\n \r\n
    \r\n )}\r\n\r\n {isEmailSentView && (\r\n
    \r\n
    \r\n \r\n {chosenMembers.length - invalidEmailsList.length}\r\n {' '}\r\n {L_HTML(\r\n 'MINEMEDLEMMER_KONTAKTFLERE_FEEDBACK_ANTAL_LABEL'\r\n )}\r\n
    \r\n

    \r\n \r\n {L_HTML(\r\n 'MINEMEDLEMMER_KONTAKTFLERE_FEEDBACK_SENDTIL_LABEL'\r\n )}\r\n :{' '}\r\n {' '}\r\n {emailType}\r\n

    \r\n {\r\n setIsSendingView(false)\r\n setIsEmailSentView(false)\r\n setChosenMembers([])\r\n setAllChosen(false)\r\n }}\r\n >\r\n {L('MINEMEDLEMMER_KONTAKTFLERE_FEEDBACK_AFSLUT_LABEL')}\r\n \r\n
    \r\n )}\r\n
    \r\n {members && members.length ? (\r\n \r\n \r\n \r\n \r\n setSort('name')}\r\n sort={sortState}\r\n name=\"name\"\r\n >\r\n {L('MINEMEDLEMMER_TABEL_KOLONNETITEL_NAVN')}\r\n \r\n \r\n \r\n setSort('arbejdssted')}\r\n sort={sortState}\r\n name=\"arbejdssted\"\r\n >\r\n {L(\r\n 'MINEMEDLEMMER_TABEL_KOLONNETITEL_ARBEJDSSTED'\r\n )}\r\n \r\n \r\n \r\n \r\n setSort('birthday')}\r\n sort={sortState}\r\n name=\"birthday\"\r\n >\r\n {L(\r\n 'MINEMEDLEMMER_TABEL_KOLONNETITEL_FØDSELSDAG'\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n setSort('age')}\r\n sort={sortState}\r\n name=\"age\"\r\n >\r\n {L(\r\n 'MINEMEDLEMMER_TABEL_KOLONNETITEL_ALDER'\r\n )}\r\n \r\n \r\n \r\n \r\n setSort('status')}\r\n sort={sortState}\r\n name=\"status\"\r\n >\r\n {L(\r\n 'MINEMEDLEMMER_TABEL_KOLONNETITEL_STATUS'\r\n )}\r\n \r\n \r\n \r\n setSort('notes')}\r\n sort={sortState}\r\n name=\"notes\"\r\n >\r\n {L(\r\n 'MINEMEDLEMMER_TABEL_KOLONNETITEL_NOTER'\r\n )}\r\n \r\n \r\n \r\n {members.map((member) => (\r\n
    \r\n \r\n \r\n {isSendingView ? (\r\n
    \r\n {\r\n const ml = [\r\n ...chosenMembers,\r\n ]\r\n if (isChecked(member)) {\r\n const idx =\r\n ml.findIndex(\r\n (m) =>\r\n m.memberId ===\r\n member.memberId\r\n )\r\n if (idx !== -1) {\r\n ml.splice(\r\n idx,\r\n 1\r\n )\r\n }\r\n setChosenMembers(ml)\r\n } else {\r\n ml.push(member)\r\n setChosenMembers(ml)\r\n }\r\n }}\r\n />\r\n
    \r\n ) : (\r\n <>\r\n \r\n \r\n {getInitials(\r\n member.fullName\r\n )}\r\n \r\n {\r\n e.stopPropagation()\r\n e.preventDefault()\r\n if (\r\n authProfile.isImitator\r\n ) {\r\n setShowImitatorModal(\r\n true\r\n )\r\n } else {\r\n onClickFavorite(\r\n member\r\n )\r\n }\r\n }}\r\n />\r\n \r\n \r\n )}\r\n {/* \r\n \r\n {getInitials(member.fullName)}\r\n \r\n {\r\n e.stopPropagation()\r\n e.preventDefault()\r\n onClickFavorite(member)\r\n }}\r\n />\r\n */}\r\n
    \r\n \r\n \r\n \r\n {member.fullName}\r\n \r\n \r\n {member?.workPlaces[0]?.name}\r\n \r\n \r\n {member?.workPlaces[0]?.name}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {isSendingView ? (\r\n
    \r\n {\r\n const ml = [\r\n ...chosenMembers,\r\n ]\r\n if (isChecked(member)) {\r\n const idx =\r\n ml.findIndex(\r\n (m) =>\r\n m.memberId ===\r\n member.memberId\r\n )\r\n if (idx !== -1) {\r\n ml.splice(\r\n idx,\r\n 1\r\n )\r\n }\r\n setChosenMembers(ml)\r\n } else {\r\n ml.push(member)\r\n setChosenMembers(ml)\r\n }\r\n }}\r\n />\r\n
    \r\n ) : (\r\n \r\n \r\n \r\n {getInitials(\r\n member.fullName\r\n )}\r\n \r\n \r\n {\r\n e.stopPropagation()\r\n e.preventDefault()\r\n if (\r\n authProfile.isImitator\r\n ) {\r\n setShowImitatorModal(\r\n true\r\n )\r\n } else {\r\n onClickFavorite(\r\n member\r\n )\r\n }\r\n }}\r\n right=\"-10px\"\r\n />\r\n
    \r\n )}\r\n \r\n \r\n \r\n {member.fullName}\r\n \r\n \r\n \r\n \r\n {member?.primaryWorkPlace?.name}\r\n \r\n \r\n \r\n \r\n {formatDate(member.birthday)}\r\n \r\n \r\n \r\n \r\n {member.age}\r\n \r\n \r\n \r\n {member.status.toLocaleLowerCase() !==\r\n 'ikkeopdateret' ? (\r\n \r\n {L(\r\n 'MINEMEDLEMMER_STATUS-BADGE_AFVENTER'\r\n )}\r\n \r\n ) : null}\r\n \r\n \r\n {\r\n return true\r\n }}\r\n >\r\n {member.numberOfNotes}\r\n \r\n \r\n \r\n
    \r\n ))}\r\n \r\n ) : null}\r\n
    \r\n {members.length ? (\r\n
    \r\n \r\n Viser {members.length} medlemmer\r\n \r\n
    \r\n ) : null}\r\n {showDialog && invalidEmailsList.length !== 0 ? (\r\n }\r\n >\r\n \r\n {L_HTML(\r\n 'MINEMEDLEMMER_KONTAKTFLERE_FEEDBACKVINDUE_TITEL'\r\n )}\r\n \r\n {mailingList.length\r\n ? multipleInvalidAddresses()\r\n : zeroValidAddresses()}\r\n \r\n ) : null}\r\n {showFirstTimeModal ? (\r\n }\r\n >\r\n \r\n {L('MINEMEDLEMMER_KONTAKTFLERE_FØRSTE_GANG_TITEL')}\r\n \r\n \r\n {L('MINEMEDLEMMER_KONTAKTFLERE_FØRSTE_GANG_TEXT')}\r\n \r\n
    \r\n {\r\n localStorage.setItem(\r\n FIRST_TIME_EMAIL_KEY,\r\n 'true'\r\n )\r\n setfirstTimeSendingEmail(false)\r\n setHowFirstTimeShowModal(false)\r\n handleSendingEmailView()\r\n }}\r\n >\r\n OK\r\n \r\n
    \r\n \r\n ) : null}\r\n setShowImitatorModal(false)}\r\n />\r\n
    \r\n )\r\n}\r\n\r\nexport default Members\r\n","import React, {\r\n ChangeEvent,\r\n DetailedHTMLProps,\r\n FC,\r\n forwardRef,\r\n TextareaHTMLAttributes,\r\n useEffect,\r\n useRef,\r\n useState,\r\n} from 'react'\r\nimport { createUseStyles, useTheme } from 'react-jss'\r\nimport { LockFill } from '../../../assets/icons'\r\nimport { colors } from '../../../theme/palette'\r\n\r\ntype RuleNames = 'label' | 'textarea' | 'container' | 'span' | 'lock' | 'count'\r\n\r\ninterface StyleProps {\r\n query: string\r\n}\r\n\r\nexport type TextAreaProps = {\r\n label: string\r\n required?: boolean\r\n maxCount?: number\r\n} & Omit<\r\n DetailedHTMLProps<\r\n TextareaHTMLAttributes,\r\n HTMLTextAreaElement\r\n >,\r\n 'size'\r\n>\r\n\r\nconst useStyles = createUseStyles({\r\n container: {\r\n position: 'relative',\r\n display: 'block',\r\n },\r\n label: {\r\n position: 'static',\r\n width: '100%',\r\n '&:focus-within > span': {\r\n color: colors.green500,\r\n fontSize: '0.75rem',\r\n top: '2px',\r\n },\r\n color: colors.labelColor,\r\n },\r\n textarea: {\r\n height: '100%',\r\n minHeight: '3rem',\r\n border: `1px solid ${colors.borderColor}`,\r\n borderRadius: '6px',\r\n width: '100%',\r\n fontSize: '1rem',\r\n paddingLeft: '0.75rem',\r\n paddingTop: '30px',\r\n resize: 'none',\r\n '&::placeholder': {\r\n opacity: '0',\r\n },\r\n color: colors.black,\r\n '&:not(:placeholder-shown) + span': {\r\n color: colors.green500,\r\n fontSize: '0.75rem',\r\n },\r\n '&:not(:placeholder-shown)': {\r\n paddingTop: '30px',\r\n },\r\n '&:focus': {\r\n borderColor: colors.green500,\r\n outlineColor: colors.green500,\r\n paddingTop: '30px',\r\n },\r\n '&:active': {\r\n borderColor: colors.green500,\r\n outlineColor: colors.green500,\r\n paddingTop: '30px',\r\n },\r\n '&:disabled': {\r\n backgroundColor: '#F5F6F8',\r\n color: colors.gray800,\r\n },\r\n },\r\n span: {\r\n position: 'absolute',\r\n top: '2px',\r\n left: '2px',\r\n right: '20px',\r\n fontSize: '1rem',\r\n backgroundColor: 'white',\r\n borderRadius: '8px',\r\n padding: '10px 0.75rem 5px',\r\n transitionDuration: '300ms',\r\n color: colors.labelColor,\r\n },\r\n lock: {\r\n position: 'absolute',\r\n top: '0',\r\n right: '10px',\r\n opacity: '.5',\r\n },\r\n count: {\r\n position: 'relative',\r\n color: colors.black,\r\n fontSize: '15px',\r\n textAlign: 'right',\r\n paddingTop: '5px',\r\n },\r\n})\r\n\r\nconst TextArea: FC = forwardRef<\r\n HTMLTextAreaElement,\r\n TextAreaProps\r\n>(({ label, required, maxCount, onChange, ...props }, ref) => {\r\n const [query] = useState('')\r\n const theme = useTheme()\r\n const classes = useStyles({ ...{ query }, theme })\r\n const [count, setCount] = useState(\r\n props.defaultValue ? String(props.defaultValue).length : 0\r\n )\r\n const containerRef = useRef(null)\r\n\r\n const autoResize = (e: ChangeEvent): void => {\r\n e.currentTarget.style.height = 'auto'\r\n e.currentTarget.style.height = `${e.currentTarget.scrollHeight + 10}px`\r\n\r\n if (containerRef.current) {\r\n containerRef.current.style.height = `${\r\n e.currentTarget.scrollHeight + 10\r\n }px`\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n
    \r\n
    \r\n {count} / {maxCount}\r\n
    \r\n \r\n )\r\n})\r\n\r\nTextArea.defaultProps = {\r\n maxCount: 300,\r\n}\r\n\r\nexport { TextArea }\r\n","import React from 'react'\r\n\r\nimport {\r\n RegisterOptions,\r\n DeepMap,\r\n FieldError,\r\n UseFormRegister,\r\n Path,\r\n} from 'react-hook-form'\r\nimport Input, { InputNumber, InputProps } from '../../ui/FormElememts/Input'\r\nimport { TextArea, TextAreaProps } from '../../ui/FormElememts/TextArea'\r\nimport {\r\n Select,\r\n ISelectOptions,\r\n SelectProps3,\r\n} from '../../ui/FormElememts/Select'\r\n\r\nexport type FormInputProps = {\r\n name: Path\r\n rules?: RegisterOptions\r\n register?: UseFormRegister\r\n errors?: Partial>\r\n} & Omit\r\n\r\nexport type FormSelectProps = {\r\n name: Path\r\n rules?: RegisterOptions\r\n register?: UseFormRegister\r\n errors?: Partial>\r\n} & Omit\r\n\r\nexport type FormTextAreaProps = {\r\n name: Path\r\n rules?: RegisterOptions\r\n register?: UseFormRegister\r\n errors?: Partial>\r\n} & Omit\r\n\r\nexport const FormInput = >({\r\n name,\r\n register,\r\n rules,\r\n ...props\r\n}: FormInputProps): JSX.Element => {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport const FormSelect = >({\r\n name,\r\n register,\r\n rules,\r\n ...props\r\n}: FormSelectProps): JSX.Element => {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport const FormInputNumber = >({\r\n name,\r\n register,\r\n rules,\r\n ...props\r\n}: FormInputProps): JSX.Element => {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport const FormTextArea = >({\r\n name,\r\n register,\r\n rules,\r\n ...props\r\n}: FormTextAreaProps): JSX.Element => {\r\n return (\r\n \r\n )\r\n}\r\n","/* eslint-disable react/require-default-props */\r\nimport React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { colors } from '../../../theme/palette'\r\n\r\ntype Props = {\r\n icon: JSX.Element\r\n message?: string\r\n}\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n row: () => {\r\n return {\r\n position: 'relative',\r\n backgroundColor: colors.white,\r\n color: 'black',\r\n marginBottom: '1rem',\r\n borderRadius: '4px',\r\n width: '700px',\r\n maxWidth: '100%',\r\n padding: '3.375rem',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }\r\n },\r\n icon: {\r\n position: 'absolute',\r\n top: '-31px',\r\n },\r\n message: {\r\n fontSize: '1rem',\r\n marginTop: '1.5rem',\r\n maxWidth: '400px',\r\n textAlign: 'center',\r\n },\r\n}))\r\n\r\nconst CardWithIconAndMessge: React.FC = ({\r\n children,\r\n icon,\r\n message,\r\n}) => {\r\n const classes = useStyles()\r\n\r\n return (\r\n
    \r\n
    {icon}
    \r\n {message ?
    {message}
    : null}\r\n {children}\r\n
    \r\n )\r\n}\r\n\r\nexport { CardWithIconAndMessge }\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport moment from 'moment'\r\nimport React, { useEffect, useState } from 'react'\r\nimport DatePicker from 'react-date-picker'\r\nimport 'react-date-picker/dist/DatePicker.css'\r\nimport { createUseStyles } from 'react-jss'\r\nimport Input from './Input'\r\nimport { Calendar as CalendarIcon, Close } from '../../../assets/icons'\r\nimport { baseButton } from '../../../theme/reuseables'\r\nimport { colors } from '../../../theme/palette'\r\n\r\ntype RuleNames =\r\n | 'datepickerWrapper'\r\n | 'datepicker'\r\n | 'button'\r\n | 'trigger'\r\n | 'close'\r\n\r\ntype Props = {\r\n label: string\r\n selected: Date | undefined | null\r\n setSelected: (date: Date | undefined | null) => void\r\n maxDate?: Date\r\n minDate?: Date\r\n disableCalendar?: boolean\r\n hasError?: boolean\r\n}\r\n\r\ninterface StyleProps {\r\n hasValue?: boolean\r\n isDatePicker?: boolean\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n datepickerWrapper: {\r\n border: 'none',\r\n position: 'relative',\r\n color: colors.black,\r\n '& label > input': {\r\n color: ({ hasValue }) => {\r\n return hasValue ? 'transparent' : 'black'\r\n },\r\n },\r\n },\r\n datepicker: {\r\n position: 'absolute',\r\n zIndex: 3,\r\n height: '100%',\r\n width: '100%',\r\n top: '0',\r\n right: '0',\r\n textAlign: 'right',\r\n border: `none`,\r\n borderRadius: '6px',\r\n },\r\n button: {\r\n ...baseButton,\r\n ...{\r\n cursor: 'pointer',\r\n padding: 0,\r\n margin: 0,\r\n },\r\n },\r\n trigger: {\r\n position: 'absolute',\r\n top: '16px',\r\n right: '10px',\r\n opacity: '.8',\r\n },\r\n close: {\r\n position: 'absolute',\r\n top: '18px',\r\n right: '28px',\r\n },\r\n})\r\n\r\nconst DatePickerComponent: React.FC = ({\r\n label,\r\n selected,\r\n setSelected,\r\n maxDate,\r\n minDate,\r\n disableCalendar,\r\n hasError,\r\n}) => {\r\n const [birthdate, setBirthdate] = useState(undefined)\r\n const [showPicker, setShowPicker] = useState(false)\r\n const [hasValue, setHasValue] = useState(false)\r\n const classes = useStyles({\r\n ...{ hasValue },\r\n })\r\n\r\n useEffect(() => {\r\n if (birthdate && birthdate.length !== 0) {\r\n setHasValue(true)\r\n } else {\r\n setHasValue(false)\r\n }\r\n }, [birthdate])\r\n\r\n useEffect(() => {\r\n if (!selected) {\r\n setBirthdate(undefined)\r\n }\r\n }, [selected])\r\n\r\n const handleOnChangeDate = (val: any): void => {\r\n if (typeof val === 'object') {\r\n const asText = moment(val).format('DD.MM.YYYY')\r\n setBirthdate(asText)\r\n }\r\n setShowPicker(false)\r\n setSelected(val)\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n }\r\n format=\"dd.MM.y\"\r\n dayPlaceholder=\"dd\"\r\n monthPlaceholder=\"mm\"\r\n yearPlaceholder=\"åååå\"\r\n clearIcon={}\r\n />\r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport { DatePickerComponent }\r\n","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { colors } from '../../../theme/palette'\r\n\r\ninterface Props {\r\n text: string\r\n error?: string | undefined\r\n}\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n message: {\r\n position: 'relative',\r\n\r\n fontSize: '15px',\r\n textAlign: 'right',\r\n paddingTop: '5px',\r\n },\r\n text: {\r\n position: 'relative',\r\n color: colors.labelColor,\r\n },\r\n error: {\r\n position: 'relative',\r\n color: colors.error,\r\n },\r\n}))\r\n\r\nconst FormMessage: React.FC = ({ text, error }) => {\r\n const classes = useStyles()\r\n\r\n return (\r\n
    \r\n {/* {!error ? {text} : null} */}\r\n {error ? {error} : null}\r\n
    \r\n )\r\n}\r\n\r\nexport { FormMessage }\r\n","import React, { useEffect, useRef, useState } from 'react'\r\nimport { useForm } from 'react-hook-form'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useAtom } from 'jotai'\r\nimport moment from 'moment'\r\nimport { Department } from '../../../models/Department'\r\nimport { mapMembers } from '../../../models/Member'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { FormInputNumber } from '../../modules/FormElements/FormInput'\r\nimport { searchMembers } from '../../../api/members/members'\r\nimport {\r\n searchMembersAtom,\r\n searchPageAtom,\r\n} from '../../../store/filter/filterAtom'\r\n\r\nimport { getInitials } from '../../../utils/initials'\r\nimport { Badge } from '../../ui/Badge/Badge'\r\nimport {\r\n Card,\r\n CardCell,\r\n CardList,\r\n CardMobile,\r\n CardHeaderCell,\r\n CardHeader,\r\n CardContentMobile,\r\n CircleText,\r\n Circle,\r\n} from '../../ui/Card'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport breakpoints from '../../../theme/breakpoints'\r\nimport { colors } from '../../../theme/palette'\r\nimport { PersonSearch } from '../../../assets/icons'\r\nimport { getDepartments } from '../../../api/departments'\r\nimport { ISelectOptions, Select } from '../../ui/FormElememts/Select'\r\nimport { CardWithIconAndMessge } from '../../ui/Card/CardWithIconAndMessge'\r\nimport { SortButton } from '../../ui/SortButton'\r\nimport useSortMembersList from '../../../hooks/useSortMembersList'\r\nimport { DatePickerComponent } from '../../ui/FormElememts/DatePicker'\r\nimport { Loader } from '../../ui/Loaders/Loader'\r\nimport { FormMessage } from '../../ui/FormElememts/FormMessage'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport { HeaderLinks } from '../../modules/Headerlinks'\r\nimport Input from '../../ui/FormElememts/Input'\r\nimport { Spinner } from '../../ui/Loaders/Spinner'\r\n\r\nexport type RegistrationFormFields = {\r\n fuldeNavn: string\r\n foedselsesdato: string\r\n telefon: string\r\n afdelingsnummer: string\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n container: {\r\n padding: '0 24px',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n padding: 0,\r\n },\r\n },\r\n },\r\n headerArea: {\r\n display: 'flex',\r\n padding: '.5rem 0',\r\n minHeight: '80px',\r\n },\r\n topArea: {\r\n borderBottom: `1px solid ${colors.gray700}`,\r\n // TODO: remove this when this area has been developed.\r\n minHeight: '60px',\r\n },\r\n headerActions: {\r\n marginLeft: 'auto',\r\n flexShrink: 0,\r\n },\r\n members: {\r\n paddingTop: '20px',\r\n },\r\n form: {\r\n display: 'grid',\r\n gap: '10px',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n gridTemplateColumns: '1fr 180px 140px 1fr 140px',\r\n },\r\n },\r\n },\r\n linkButton: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '0',\r\n margin: '0',\r\n borderRadius: '6px',\r\n boxSizing: 'border-box',\r\n textDecoration: 'none',\r\n fontWeight: 400,\r\n textAlign: 'center',\r\n transition: 'all 0.2s',\r\n boxShadow: 0,\r\n background: 'none',\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n '-webkit-appearance': 'none',\r\n '-moz-appearance': 'none',\r\n border: 0,\r\n color: colors.green500,\r\n fontSize: '.875rem',\r\n textDecorationLine: 'underline',\r\n },\r\n subArea: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n padding: '1rem 160px 1rem 1rem',\r\n borderBottom: `1px solid ${colors.borderColor}`,\r\n },\r\n circleIcon: {\r\n width: '62px',\r\n height: '62px',\r\n borderRadius: '50%',\r\n border: `2px solid ${colors.white}`,\r\n backgroundColor: colors.white,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '1rem',\r\n },\r\n content: {\r\n paddingTop: '1.875rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n messageWrapper: {\r\n marginTop: '2.25rem',\r\n },\r\n selectContainer: {\r\n position: 'relative',\r\n },\r\n selectTrigger: {\r\n position: 'relative',\r\n minHeight: '48px',\r\n backgroundColor: colors.white,\r\n border: `1px solid ${colors.borderColor}`,\r\n borderRadius: '6px',\r\n width: '100%',\r\n fontSize: '1.125rem',\r\n paddingLeft: '.75rem',\r\n paddingRight: '.75rem',\r\n cursor: 'pointer',\r\n color: colors.labelColor,\r\n },\r\n selectContent: {\r\n overflow: 'hidden',\r\n backgroundColor: 'white',\r\n borderRadius: '6px',\r\n boxShadow:\r\n // eslint-disable-next-line max-len\r\n '0px 10px 38px -10px rgba(22, 23, 24, 0.35), 0px 10px 20px -15px rgba(22, 23, 24, 0.2)',\r\n },\r\n select: {\r\n position: 'relative',\r\n height: '48px',\r\n backgroundColor: colors.white,\r\n border: `1px solid ${colors.borderColor}`,\r\n borderRadius: '6px',\r\n width: '100%',\r\n fontSize: '1.125rem',\r\n paddingLeft: '.75rem',\r\n paddingRight: '.75rem',\r\n cursor: 'pointer',\r\n color: colors.labelColor,\r\n },\r\n numberOfMembers: {\r\n display: 'flex',\r\n padding: '30px 0 90px',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n headerAreaTop: {\r\n display: 'flex',\r\n padding: '1rem 0 .5rem',\r\n borderBottom: `1px solid ${colors.borderColor}`,\r\n marginBottom: '1rem',\r\n },\r\n})\r\n\r\ninterface IQuery {\r\n [key: string]: string\r\n}\r\n\r\nconst gridTemplateColumns = '12% 22% 22% 22% 22%'\r\n\r\ninterface IError {\r\n hasError: boolean\r\n message: string\r\n}\r\n\r\nconst AllMembers: React.FC = () => {\r\n const [departmentNumber, _setDepartmentNumber] = useState(undefined)\r\n const { register, reset, handleSubmit, setValue, formState, getValues } =\r\n useForm()\r\n const classes = useStyles()\r\n const [options, setOptions] = useState([])\r\n const [error, setError] = useState(undefined)\r\n const [selectedDate, _setSelectedDate] = useState(undefined)\r\n const [loading, setLoading] = useState(false)\r\n const [, setResult] = useAtom(searchMembersAtom)\r\n const [members] = useAtom(searchPageAtom)\r\n\r\n const { setSort, sortState } = useSortMembersList()\r\n\r\n const [isValid, setIsValid] = useState(false)\r\n\r\n const inputReference = useRef(null)\r\n\r\n const { isDirty } = formState\r\n\r\n useEffect(() => {\r\n setSort('name')\r\n }, [])\r\n\r\n useEffect(() => {\r\n let valid = false\r\n\r\n if (selectedDate) {\r\n valid = true\r\n }\r\n\r\n if (isDirty) {\r\n valid = true\r\n }\r\n\r\n if (departmentNumber) {\r\n valid = true\r\n }\r\n\r\n setIsValid(valid)\r\n }, [isDirty, selectedDate, departmentNumber])\r\n\r\n useEffect(() => {\r\n const getDeps = async (): Promise => {\r\n const depResponse = await getDepartments()\r\n const opt: ISelectOptions[] = depResponse.map(\r\n (department: Department) => {\r\n return { label: department.name, value: department.id }\r\n }\r\n )\r\n\r\n reset({\r\n fuldeNavn: '',\r\n foedselsesdato: '',\r\n telefon: '',\r\n afdelingsnummer: '',\r\n })\r\n setOptions(opt)\r\n\r\n return true\r\n }\r\n\r\n getDeps()\r\n }, [register])\r\n\r\n const searchMembersApi = async (queryString: string): Promise => {\r\n const start = performance.now()\r\n\r\n const response = await searchMembers(queryString)\r\n\r\n if (response && response.data) {\r\n const result = mapMembers(response.data.Medlemmer)\r\n\r\n if (!result.length) {\r\n setError({\r\n hasError: true,\r\n message: 'Ingen resultater fundet',\r\n })\r\n setResult([])\r\n // setMembers([])\r\n } else {\r\n setResult(result)\r\n // setMembers(result)\r\n setError(undefined)\r\n }\r\n }\r\n\r\n const duration = performance.now() - start\r\n let timeout = 0\r\n\r\n if (duration < 500) {\r\n timeout = 500 - duration\r\n }\r\n\r\n setTimeout(() => {\r\n setLoading(false)\r\n if (inputReference && inputReference.current) {\r\n inputReference.current.focus()\r\n }\r\n }, timeout)\r\n }\r\n\r\n const onSubmit = (data: RegistrationFormFields): void => {\r\n setLoading(true)\r\n\r\n const values = { ...data }\r\n\r\n if (!data.afdelingsnummer) {\r\n delete values.afdelingsnummer\r\n }\r\n\r\n const query: IQuery = {}\r\n Object.keys(values).forEach((value) => {\r\n if (value && value !== '') {\r\n query[`request.${value}`] = data[value]\r\n }\r\n })\r\n const queryString = Object.keys(query)\r\n .map((key) => `${key}=${query[key]}`)\r\n .join('&')\r\n\r\n searchMembersApi(queryString)\r\n }\r\n\r\n const setSelectedDate = (date: Date | undefined | null): void => {\r\n _setSelectedDate(date)\r\n if (date) {\r\n setValue('foedselsesdato', date.toDateString())\r\n } else {\r\n setValue('foedselsesdato', '')\r\n }\r\n }\r\n\r\n const setDepartmentNumber = (value: string | undefined): void => {\r\n setValue('afdelingsnummer', value)\r\n _setDepartmentNumber(value)\r\n }\r\n\r\n const max = new Date()\r\n\r\n const { errors } = formState\r\n\r\n const validateMobile = (number: string | undefined | null): boolean => {\r\n if (!number || number.trim() === '') {\r\n return true\r\n }\r\n\r\n if (number.length > 7) {\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n const validateName = (name: string | undefined | null): boolean => {\r\n if (!name || name.trim() === '') {\r\n return true\r\n }\r\n\r\n if (name.length > 43) {\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n {L_HTML('ALLEMEDLEMMER_TITEL')}\r\n \r\n
    \r\n
    \r\n \r\n {L_HTML('ALLEMEDLEMMER_TITEL')}\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n {L_HTML('ALLEMEDLEMMER_BESKRIVELSE_TITEL')}\r\n \r\n \r\n {L_HTML('ALLEMEDLEMMER_BESKRIVELSE_TEXT')}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n\r\n \r\n
    \r\n \r\n validateMobile(value) || 'Min. 8 tegn',\r\n }}\r\n />\r\n \r\n
    \r\n\r\n {options ? (\r\n
    \r\n \r\n setDepartmentNumber(e.target.value)\r\n }\r\n options={options}\r\n />\r\n
    \r\n ) : null}\r\n\r\n \r\n {L('ALLEMEDLEMMER_FORM_SØG_KNAP')}\r\n \r\n \r\n
    \r\n {\r\n setResult([])\r\n reset({\r\n fuldeNavn: '',\r\n foedselsesdato: '',\r\n telefon: '',\r\n afdelingsnummer: '',\r\n })\r\n setSelectedDate(undefined)\r\n setDepartmentNumber('')\r\n setError(undefined)\r\n }}\r\n >\r\n {L('ALLEMEDLEMMER_FILTER_NULSTIL_LABEL')}\r\n \r\n
    \r\n {error && error.hasError && !loading ? (\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n }\r\n message={error.message}\r\n />\r\n
    \r\n
    \r\n ) : null}\r\n {!members.length && !error && !loading ? (\r\n
    \r\n \r\n {L('ALLEMEDLEMMER_HJÆLPETEKST_01')}\r\n \r\n
    \r\n ) : null}\r\n
    \r\n {loading ? : null}\r\n {!loading && members && members.length ? (\r\n
    \r\n \r\n \r\n \r\n \r\n setSort('name')}\r\n sort={sortState}\r\n name=\"name\"\r\n >\r\n {L(\r\n 'MINEMEDLEMMER_TABEL_KOLONNETITEL_NAVN'\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n setSort('arbejdssted')\r\n }\r\n sort={sortState}\r\n name=\"arbejdssted\"\r\n >\r\n {L(\r\n 'MINEMEDLEMMER_TABEL_KOLONNETITEL_ARBEJDSSTED'\r\n )}\r\n \r\n \r\n \r\n \r\n setSort('department')}\r\n sort={sortState}\r\n name=\"department\"\r\n >\r\n {L('GENERISK_FORM_FOAAFDELING_LABEL')}\r\n \r\n \r\n \r\n setSort('isOwnMember')}\r\n sort={sortState}\r\n name=\"isOwnMember\"\r\n >\r\n Status\r\n \r\n \r\n \r\n {members.map((member) => (\r\n <>\r\n \r\n \r\n \r\n \r\n {getInitials(\r\n member.fullName\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {member.fullName}\r\n \r\n \r\n {\r\n member?.primaryWorkPlace\r\n ?.name\r\n }\r\n \r\n \r\n {\r\n member?.primaryWorkPlace\r\n ?.name\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {getInitials(\r\n member.fullName\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {member.fullName}\r\n \r\n \r\n \r\n \r\n {member?.primaryWorkPlace?.name}\r\n \r\n \r\n \r\n {member.department ? (\r\n \r\n {member.department.name}\r\n \r\n ) : null}\r\n \r\n \r\n {member.isOwnMember ? (\r\n \r\n {L(\r\n 'ALLEMEDLEMMER_ALLEREDE-MEDLEM_STATUS_BADGE'\r\n )}\r\n \r\n ) : null}\r\n \r\n \r\n \r\n ))}\r\n \r\n
    \r\n ) : null}\r\n {members.length ? (\r\n
    \r\n \r\n Viser {members.length} medlemmer\r\n \r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport { AllMembers }\r\n","import { AxiosResponse } from 'axios'\r\nimport { axiosWithImitator } from '../withAuth'\r\n\r\nconst getAllUpdates = async (\r\n type?: 'UnderOpdatering' | 'FaerdigBehandlet'\r\n): Promise => {\r\n let data = {}\r\n\r\n if (type) {\r\n data = {\r\n params: {\r\n 'request.opdateringBatchStatus': type,\r\n },\r\n }\r\n }\r\n\r\n const response = axiosWithImitator.get(\r\n `/opdatering/hentegnemedlemmeropdateringerlist`,\r\n data\r\n )\r\n return response\r\n}\r\n\r\nconst getAllWorkplaces = (): Promise => {\r\n const response = axiosWithImitator.get(\r\n '/medlem/hentegnemedlemmerprarbejdsstedprtrhverv'\r\n )\r\n\r\n return response\r\n}\r\n\r\nconst getUpdateDetails = (batchId: string): Promise => {\r\n const response = axiosWithImitator.get(\r\n '/opdatering/hentopdateringbatchdetalje',\r\n {\r\n params: {\r\n 'request.opdateringBathcId': batchId,\r\n },\r\n }\r\n )\r\n\r\n return response\r\n}\r\n\r\nexport { getAllUpdates, getAllWorkplaces, getUpdateDetails }\r\n","// \"BatchId\": \"00000000-0000-0000-0000-000000000000\",\r\n// \"OpdateringType\": \"OpdaterMedlem\",\r\n// \"Medlem\": {\r\n// \"Medlemsnummer\": 0,\r\n// \"FoedselsDato\": \"2022-05-19T06:07:58.363Z\",\r\n// \"Afdeling\": {\r\n// \"Nummer\": \"string\",\r\n// \"Navn\": \"string\"\r\n// },\r\n// \"ErEgetMedlem\": true,\r\n// \"Medlemsident\": 0,\r\n// \"Fornavn\": \"string\",\r\n// \"Efternavn\": \"string\",\r\n// \"FuldeNavn\": \"string\"\r\n// },\r\n// \"Bruger\": {\r\n// \"Medlemsident\": 0,\r\n// \"Fornavn\": \"string\",\r\n// \"Efternavn\": \"string\",\r\n// \"FuldeNavn\": \"string\"\r\n// },\r\n// \"RegTid\": \"2022-05-19T06:07:58.363Z\",\r\n// \"BehandlingTid\": \"2022-05-19T06:07:58.363Z\",\r\n// \"OpdateringBatchStatus\": \"UnderOpdatering\"\r\n\r\nexport type IUpdateBatchData = {\r\n BatchId: string\r\n OpdateringType: string\r\n Medlem: {\r\n Medlemsnummer: number\r\n FoedselsDato: string\r\n Afdeling: {\r\n Nummer: string\r\n Navn: string\r\n }\r\n ErEgetMedlem: boolean\r\n Medlemsident: number\r\n Fornavn: string\r\n Efternavn: string\r\n FuldeNavn: string\r\n }\r\n Bruger: {\r\n Medlemsident: 0\r\n Fornavn: string\r\n Efternavn: string\r\n FuldeNavn: string\r\n }\r\n RegTid: string\r\n BehandlingTid: string\r\n OpdateringBatchStatus: string\r\n}\r\n\r\nexport type MemberOnUpdate = {\r\n number: number\r\n birthday: string\r\n department: {\r\n number: string\r\n name: string\r\n }\r\n isOwnMember: boolean\r\n id: number\r\n firstName: string\r\n lastName: string\r\n fullName: string\r\n}\r\n\r\nexport type ProfileOnUpdate = {\r\n id: number\r\n firstName: string\r\n lastName: string\r\n fullName: string\r\n}\r\n\r\nexport class UpdateBatch {\r\n batchId = ''\r\n\r\n type = ''\r\n\r\n member: MemberOnUpdate\r\n\r\n profile: ProfileOnUpdate\r\n\r\n created = ''\r\n\r\n updated = ''\r\n\r\n status: string\r\n\r\n public static build = (data: IUpdateBatchData): UpdateBatch => {\r\n const update = new UpdateBatch()\r\n\r\n update.batchId = data.BatchId\r\n update.type = data.OpdateringType\r\n update.created = data.RegTid\r\n update.updated = data.BehandlingTid\r\n update.member = {\r\n birthday: data.Medlem.FoedselsDato,\r\n department: {\r\n name: data.Medlem.Afdeling?.Navn || '',\r\n number: data.Medlem.Afdeling?.Nummer || '',\r\n },\r\n firstName: data.Medlem.Fornavn,\r\n lastName: data.Medlem.Efternavn,\r\n fullName: data.Medlem.FuldeNavn,\r\n id: data.Medlem.Medlemsident,\r\n isOwnMember: data.Medlem.ErEgetMedlem,\r\n number: data.Medlem.Medlemsnummer,\r\n }\r\n update.profile = {\r\n firstName: data.Bruger.Fornavn,\r\n lastName: data.Bruger.Efternavn,\r\n fullName: data.Bruger.FuldeNavn,\r\n id: data.Bruger.Medlemsident,\r\n }\r\n update.status = data.OpdateringBatchStatus\r\n\r\n return update\r\n }\r\n}\r\n\r\nexport function mapUpdates(data: IUpdateBatchData[]): UpdateBatch[] {\r\n return data && data.map((update) => UpdateBatch.build(update))\r\n}\r\n","import React, { FC } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { Member } from '../../../models/Member'\r\nimport { Profile } from '../../../models/Profile'\r\nimport { colors } from '../../../theme/palette'\r\nimport { zIndexes } from '../../../theme/zIndex'\r\nimport { formatDate } from '../../../utils/format'\r\nimport { L } from '../../providers/Lokalise'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n control: {\r\n display: 'grid',\r\n position: 'absolute',\r\n alignItems: 'center',\r\n marginBottom: '20px',\r\n gridTemplateColumns: '1fr 1fr',\r\n paddingRight: '57px',\r\n paddingLeft: '20px',\r\n borderBottom: `2px solid ${colors.borderColor}`,\r\n width: 'calc(100% + 40px)',\r\n paddingBottom: '20px',\r\n top: '0',\r\n paddingTop: '20px',\r\n backgroundColor: colors.white,\r\n zIndex: zIndexes.drawer,\r\n },\r\n contentWrapper: {\r\n padding: '100px 20px 20px',\r\n overflow: 'auto',\r\n height: '100%',\r\n paddingBottom: '80px',\r\n },\r\n}))\r\n\r\nexport type DrawerHeaderType = {\r\n member?: Member\r\n profile?: Profile\r\n title?: string\r\n}\r\n\r\nconst DrawerHeader: FC = ({ title }) => {\r\n const classes = useStyles()\r\n return (\r\n
    \r\n
    \r\n {title ? (\r\n \r\n {title}\r\n \r\n ) : null}\r\n
    \r\n
    \r\n )\r\n}\r\n\r\nconst DrawerContent: FC = ({ children }) => {\r\n const classes = useStyles()\r\n return
    {children}
    \r\n}\r\n\r\nconst DrawerHeaderMemberInfo: FC = ({ member, profile }) => {\r\n const classes = useStyles()\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n {L('GENERISK_RETTELSER_MEDLEM_NAVN_LABEL')}\r\n \r\n {member?.fullName ? (\r\n \r\n {member.fullName}\r\n \r\n ) : (\r\n \r\n {profile?.fullName}\r\n \r\n )}\r\n
    \r\n
    \r\n \r\n {L('GENERISK_RETTELSER_MEDLEM_FØDSELSDAG_LABEL')}\r\n \r\n {member || profile ? (\r\n \r\n {formatDate(\r\n member\r\n ? member?.birthday\r\n : new Date(profile.personalInfo.birthdate)\r\n )}\r\n \r\n ) : (\r\n '-'\r\n )}\r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nconst DrawerHeaderWorkplaceInfo: FC = ({ title }) => {\r\n const classes = useStyles()\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n {L('MINEMEDLEMMER_TABEL_KOLONNETITEL_ARBEJDSSTED')}\r\n \r\n {title && (\r\n \r\n {title}\r\n \r\n )}\r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport {\r\n DrawerHeaderMemberInfo,\r\n DrawerHeaderWorkplaceInfo,\r\n DrawerHeader,\r\n DrawerContent,\r\n}\r\n","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n control: {\r\n position: 'relative',\r\n marginBottom: '20px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n}))\r\n\r\nconst FormHeader: React.FC = ({ children }) => {\r\n const classes = useStyles()\r\n\r\n return
    {children}
    \r\n}\r\n\r\nexport { FormHeader }\r\n","import React, { FC, useEffect, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport { Member } from '../../../models/Member'\r\nimport { colors } from '../../../theme/palette'\r\nimport { baseButton, sortPlaceholder } from '../../../theme/reuseables'\r\nimport { L } from '../../providers/Lokalise'\r\nimport { MemberOnUpdate, UpdateBatch } from '../../../models/UpdateBatch'\r\nimport { Overlay } from '../../ui/Sidebar'\r\nimport { formatDate } from '../../../utils/format'\r\nimport { Badge } from '../../ui/Badge/Badge'\r\nimport { Card, CardCell, CardMobile, Circle } from '../../ui/Card'\r\nimport breakpoints from '../../../theme/breakpoints'\r\nimport {\r\n DrawerContent,\r\n DrawerHeaderMemberInfo,\r\n} from '../FormElements/DrawerHeader'\r\nimport { getUpdateDetails } from '../../../api/updates'\r\nimport { EditFill, PersonalInfo } from '../../../assets/icons'\r\nimport { getUpdateStatusLabel, getUpdateTypeLabel } from '../../../utils/utils'\r\nimport { CircleIcon } from '../../ui/Circle/Circle'\r\nimport { FormHeader } from '../../ui/FormElememts/FormHeader'\r\nimport { FormControl } from '../../ui/FormElememts/FormControl'\r\n\r\nexport const getLabel = (fieldName: string): string => {\r\n let label = fieldName\r\n switch (fieldName) {\r\n // OPDATERINGER_DETALJER_ARBEJDSSTED_LABEL\r\n case 'Arbejdsstednummer':\r\n label = L('OPDATERINGER_DETALJER_ARBEJDSSTED_LABEL')\r\n break\r\n // OPDATERINGER_DETALJER_PRIVAT-MOBIL_LABEL\r\n case 'PrivatMobil':\r\n label = L('OPDATERINGER_DETALJER_PRIVAT-MOBIL_LABEL')\r\n break\r\n // OPDATERINGER_DETALJER_TIMETAL_LABEL\r\n case 'Timetal':\r\n label = L('OPDATERINGER_DETALJER_TIMETAL_LABEL')\r\n break\r\n // OPDATERINGER_DETALJER_STILLING_LABEL\r\n case 'Stillingsnummer':\r\n label = L('OPDATERINGER_DETALJER_STILLING_LABEL')\r\n break\r\n // OPDATERINGER_DETALJER_TRTELEFON_LABEL\r\n case 'TRTelefon':\r\n label = L('OPDATERINGER_DETALJER_TRTELEFON_LABEL')\r\n break\r\n // OPDATERINGER_DETALJER_TRMAIL_LABEL\r\n case 'TREmail ':\r\n label = L('OPDATERINGER_DETALJER_TRMAIL_LABEL')\r\n break\r\n // OPDATERINGER_DETALJER_ARBEJDSMAIL_LABEL\r\n case 'ArbejdsEmail':\r\n label = L('OPDATERINGER_DETALJER_ARBEJDSMAIL_LABEL')\r\n break\r\n // OPDATERINGER_DETALJER_ARBEJDSTELEFON_LABEL\r\n case 'ArbejdsTelefon':\r\n label = L('OPDATERINGER_DETALJER_ARBEJDSTELEFON_LABEL')\r\n break\r\n // OPDATERINGER_DETALJER_PRIVAT-EMAIL_LABEL\r\n case 'PrivatEmail':\r\n label = L('OPDATERINGER_DETALJER_PRIVAT-EMAIL_LABEL')\r\n break\r\n // OPDATERINGER_DETALJER_PRIVAT-FASTNET-TELEFON_LABEL\r\n case 'PrivatFastnetTelefon':\r\n label = L('OPDATERINGER_DETALJER_PRIVAT-FASTNET-TELEFON_LABEL')\r\n break\r\n default:\r\n break\r\n }\r\n\r\n return label\r\n}\r\n\r\ninterface EditProps {\r\n update: UpdateBatch\r\n gridTemplateColumns: string\r\n showUpdatedColumn?: boolean\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n '@keyframes fadeIn': {\r\n from: {\r\n opacity: 0,\r\n },\r\n to: {\r\n opacity: 1,\r\n },\r\n },\r\n contentWrapper: {\r\n padding: '100px 20px 20px',\r\n overflow: 'auto',\r\n height: '100%',\r\n paddingBottom: '80px',\r\n },\r\n container: {\r\n padding: '0 1.5rem',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n padding: '0',\r\n },\r\n },\r\n },\r\n headerArea: {\r\n display: 'flex',\r\n padding: '.5rem 0',\r\n minHeight: '5rem',\r\n },\r\n headerAreaTop: {\r\n display: 'flex',\r\n padding: '1rem 0 .5rem',\r\n borderBottom: `1px solid ${colors.borderColor}`,\r\n marginBottom: '1rem',\r\n },\r\n topArea: {\r\n borderBottom: `1px solid ${colors.gray700}`,\r\n // TODO: remove this when this area has been developed.\r\n minHeight: '60px',\r\n },\r\n headerActions: {\r\n display: 'flex',\r\n flexGrow: 1,\r\n marginLeft: 'auto',\r\n justifyContent: 'flex-end',\r\n alignItems: 'flex-start',\r\n flexShrink: 0,\r\n },\r\n sendingEmailSettings: {\r\n display: 'flex',\r\n padding: '.5rem 1rem',\r\n minHeight: '5rem',\r\n width: '100%',\r\n backgroundColor: colors.green200,\r\n color: colors.black,\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n '& span': {\r\n fontWeight: 700,\r\n },\r\n animation: '.5s $fadeIn',\r\n },\r\n dialogButtonsContainer: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'space-around',\r\n },\r\n button: {\r\n ...baseButton,\r\n ...{\r\n cursor: 'pointer',\r\n },\r\n },\r\n modalButtons: {\r\n display: 'flex',\r\n },\r\n modalCheckbox: {\r\n display: 'flex',\r\n position: 'absolute',\r\n right: '20px',\r\n top: '20px',\r\n },\r\n iconWrapper: {\r\n position: 'relative',\r\n },\r\n content: {\r\n display: '-webkit-box',\r\n WebkitLineClamp: '2',\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n deleteButtons: {\r\n top: '0',\r\n right: '0',\r\n display: 'flex',\r\n zIndex: '1',\r\n position: 'absolute',\r\n flexWrap: 'wrap',\r\n transition: 'all .3s ease-in',\r\n justifyContent: 'end',\r\n width: '100%',\r\n height: '100%',\r\n alignItems: 'center',\r\n background: 'rgba(255,255,255, .7)',\r\n },\r\n sortPlaceholder: {\r\n ...sortPlaceholder,\r\n },\r\n sidebarArea: {\r\n marginBottom: '20px',\r\n },\r\n circleIcon: {\r\n width: '62px',\r\n height: '62px',\r\n borderRadius: '50%',\r\n border: `2px solid ${colors.white}`,\r\n backgroundColor: colors.blue300,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '1rem',\r\n },\r\n oldName: {\r\n textDecoration: 'line-through',\r\n display: 'block',\r\n },\r\n})\r\n\r\nexport type RegistrationFormFields = {\r\n Titel: string\r\n Indhold: string\r\n ReferenceType: string\r\n}\r\n\r\nexport type UpdateDetailsSidebarContentType = {\r\n memberId: number\r\n update: UpdateBatch\r\n isOpen: boolean\r\n updateDetails: any | undefined\r\n}\r\n\r\nconst UpdateDetailsSidebarContent: FC = ({\r\n memberId,\r\n update,\r\n updateDetails,\r\n isOpen,\r\n}) => {\r\n const classes = useStyles()\r\n const [isFetching, setIsFetching] = useState(false)\r\n // const [updateDetails, setUpdateDetails] = useState(\r\n // undefined\r\n // )\r\n\r\n const renderDate = (dateString: string | null): string => {\r\n if (dateString === null) {\r\n return 'Ingen dato'\r\n }\r\n\r\n const date = new Date(dateString)\r\n const now = new Date()\r\n const nowYear = now.getFullYear()\r\n let isValid = false\r\n\r\n if (Object.prototype.toString.call(date) === '[object Date]') {\r\n if (!Number.isNaN(date.getTime())) {\r\n isValid = true\r\n }\r\n }\r\n\r\n if (\r\n !isValid ||\r\n nowYear - date.getFullYear() > 9 ||\r\n nowYear - date.getFullYear() < -9\r\n ) {\r\n return 'Ikke gyldig dato'\r\n }\r\n\r\n return formatDate(date)\r\n }\r\n\r\n const sortingArr = [\r\n 'Arbejdsstednummer',\r\n 'Stillingsnummer',\r\n 'Timetal',\r\n 'PrivatMobil',\r\n 'PrivatFastnetTelefon',\r\n 'PrivatEmail',\r\n 'ArbejdsTelefon',\r\n 'ArbejdsEmail',\r\n ]\r\n\r\n if (\r\n !updateDetails ||\r\n (updateDetails &&\r\n updateDetails.OpdateringFelter &&\r\n !updateDetails.OpdateringFelter.length)\r\n )\r\n return null\r\n\r\n return (\r\n
    \r\n \r\n \r\n {L('MINEOPDATERINGER_DETALJER_TITEL')}\r\n \r\n \r\n \r\n {updateDetails ? (\r\n <>\r\n {updateDetails.OpdateringFelter.sort(\r\n (a, b) =>\r\n sortingArr.indexOf(a.OpdateringFeltType) -\r\n sortingArr.indexOf(b.OpdateringFeltType)\r\n ).map((field) => {\r\n if (\r\n update.type === 'OpdaterMedlem' &&\r\n field.OpdateringFeltType === 'Arbejdsstednummer'\r\n ) {\r\n return null\r\n }\r\n return (\r\n \r\n \r\n {getLabel(field.OpdateringFeltType)}\r\n \r\n \r\n \r\n {field.NyVaerdiNavn || ' '}\r\n \r\n {update.type === 'OpdaterMedlem' ? (\r\n \r\n {field.GlVaerdiNavn || ' '}\r\n \r\n ) : null}\r\n \r\n \r\n )\r\n })}\r\n \r\n \r\n {L('MINEOPDATERINGER_DETALJER_ÆNDRES-PR_LABEL')}\r\n \r\n \r\n {renderDate(\r\n updateDetails.OpdateringType !== 'MedlemOphoert'\r\n ? updateDetails.FraDato\r\n : updateDetails.OphoertDato\r\n )}\r\n \r\n \r\n {updateDetails.OevrigeOplysninger ? (\r\n \r\n \r\n {L(\r\n 'MINEOPDATERINGER_DETALJER_ØVRIGE_OPL_LABEL'\r\n )}\r\n \r\n \r\n {updateDetails.OevrigeOplysninger}\r\n \r\n \r\n ) : null}\r\n \r\n ) : null}\r\n
    \r\n )\r\n}\r\n\r\ntype overlayProps = {\r\n update: UpdateBatch\r\n onHide?: (boolean: boolean) => void\r\n isOpen?: boolean\r\n}\r\n\r\nconst castAsMember = (memberOnUpdate: MemberOnUpdate): Member => {\r\n const m = new Member()\r\n\r\n m.birthday = new Date(memberOnUpdate.birthday)\r\n m.memberId = memberOnUpdate.id\r\n m.fullName = memberOnUpdate.fullName\r\n\r\n return m\r\n}\r\n\r\nconst DetailsOverlay = ({ update, onHide, isOpen }: overlayProps): any => {\r\n const [isFetching, setIsFetching] = useState(false)\r\n const [updateDetails, setUpdateDetails] = useState(\r\n undefined\r\n )\r\n\r\n const workplace = updateDetails?.OpdateringFelter?.find(\r\n (place) => place.OpdateringFeltType === 'Arbejdsstednummer'\r\n )?.NyVaerdiNavn\r\n\r\n useEffect(() => {\r\n const fetch = async (): Promise => {\r\n setIsFetching(true)\r\n try {\r\n const response2 = await getUpdateDetails(update.batchId)\r\n setUpdateDetails(response2.data)\r\n setIsFetching(false)\r\n } catch {\r\n setIsFetching(false)\r\n }\r\n\r\n setIsFetching(false)\r\n }\r\n\r\n if (!isFetching && !updateDetails && isOpen) {\r\n fetch()\r\n }\r\n }, [isFetching, update.batchId, updateDetails, isOpen])\r\n\r\n return (\r\n {\r\n if (onHide) {\r\n onHide(false)\r\n }\r\n }}\r\n >\r\n
    \r\n \r\n
    \r\n \r\n \r\n {getUpdateTypeLabel(update.type)}\r\n \r\n {update.type === 'OpdaterOgTilfoejEksisterendeMedlem' && (\r\n \r\n \r\n {update.member.fullName}\r\n \r\n \r\n )}\r\n {update.type === 'OpdaterMedlem' && (\r\n \r\n {`${update.member.fullName || ' '}, ${\r\n workplace !== undefined ? workplace : ' '\r\n }`}\r\n \r\n )}\r\n {update.type === 'MedlemOphoert' && (\r\n \r\n {update.member.fullName || ' '}\r\n \r\n )}\r\n \r\n
    \r\n \r\n \r\n {L('MINEOPDATERINGER_DETALJER_INFO_LABEL')}\r\n \r\n \r\n \r\n \r\n \r\n {L('MINEOPDATERINGER_DETALJER_INDSENDT-AF')}\r\n \r\n \r\n {update.profile.fullName}\r\n \r\n \r\n {/* \r\n \r\n Fødseldag\r\n \r\n \r\n {formatDate(new Date(update.member.birthday))}\r\n \r\n */}\r\n\r\n \r\n \r\n {L('MINEOPDATERINGER_DETALJER_INDSENDT-DATO')}\r\n \r\n \r\n {formatDate(new Date(update.created))}\r\n \r\n \r\n {/* \r\n \r\n {L('MINEOPDATERINGER_DETALJER_MEDLEM')}\r\n \r\n \r\n {update.member.fullName}\r\n \r\n */}\r\n\r\n \r\n \r\n {L('MINEOPDATERINGER_DETALJER_INDSENDT-TIL_LABEL')}\r\n \r\n \r\n {update.member.department.name}\r\n \r\n \r\n\r\n \r\n \r\n {L('MINEOPDATERINGER_DETALJER_STATUS')}\r\n \r\n \r\n {getUpdateStatusLabel(update.status)}\r\n \r\n \r\n {update.status === 'FaerdigBehandlet' ? (\r\n \r\n \r\n Opdateret\r\n \r\n \r\n {formatDate(new Date(update.updated))}\r\n \r\n \r\n ) : null}\r\n
    \r\n
    \r\n \r\n )\r\n}\r\n\r\nexport const UpdateDetails: FC = ({\r\n update,\r\n gridTemplateColumns,\r\n showUpdatedColumn,\r\n}) => {\r\n const classes = useStyles()\r\n const [isOpen, setIsOpen] = useState(false)\r\n\r\n if (update.type === 'OpdaterTR_FTR') {\r\n return null\r\n }\r\n\r\n return (\r\n <>\r\n setIsOpen(!isOpen)}\r\n key={update.batchId + new Date().toDateString()}\r\n >\r\n \r\n \r\n {L('MINEOPDATERINGER_INDSENDT_KOLONNE_OVERSKRIFT')}\r\n \r\n \r\n {formatDate(new Date(update.created))}\r\n \r\n \r\n \r\n \r\n {L('MINEOPDATERINGER_MEDLEM_KOLONNE_OVERSKRIFT')}\r\n \r\n {update.member.fullName}\r\n \r\n \r\n \r\n {L('MINEOPDATERINGER_MEDLEM_KOLONNE_OVERSKRIFT')}\r\n \r\n \r\n \r\n {getUpdateTypeLabel(update.type)}\r\n \r\n \r\n \r\n \r\n \r\n {L('MINEOPDATERINGER_INDSENDT-AF_KOLONNE_OVERSKRIFT')}\r\n \r\n \r\n \r\n {update.profile.fullName}\r\n \r\n \r\n \r\n {showUpdatedColumn ? (\r\n \r\n \r\n {L('MINEOPDATERINGER_OPDATERET_KOLONNE_OVERSKRIFT')}\r\n \r\n \r\n {formatDate(new Date(update.updated))}\r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n {getUpdateStatusLabel(update.status)}\r\n \r\n \r\n \r\n \r\n {\r\n setIsOpen(!isOpen)\r\n }}\r\n >\r\n \r\n \r\n {formatDate(new Date(update.created))}\r\n \r\n \r\n \r\n {update.member.fullName}\r\n \r\n \r\n \r\n \r\n {getUpdateTypeLabel(update.type)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {update.profile.fullName}\r\n \r\n \r\n \r\n {showUpdatedColumn ? (\r\n \r\n \r\n {formatDate(new Date(update.updated))}\r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n {getUpdateStatusLabel(update.status)}\r\n \r\n \r\n \r\n \r\n setIsOpen(boolean)}\r\n isOpen={isOpen}\r\n />\r\n \r\n )\r\n}\r\n","import React, { FC, useEffect, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useAtom } from 'jotai'\r\nimport { Archive, Note as NoteIcon } from '../../../assets/icons'\r\nimport useSortMembersList from '../../../hooks/useSortMembersList'\r\nimport breakpoints from '../../../theme/breakpoints'\r\nimport { colors } from '../../../theme/palette'\r\nimport { baseButton, sortPlaceholder } from '../../../theme/reuseables'\r\nimport { CardHeader, CardHeaderCell, CardList } from '../../ui/Card'\r\nimport { SortButton } from '../../ui/SortButton'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport {\r\n allUpdatesDone,\r\n allUpdatesInProgress,\r\n updatePageDoneAtom,\r\n updatePageInProgressAtom,\r\n allUpdates,\r\n updatePageAtom,\r\n} from '../../../store/filter/filterAtom'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport { getAllUpdates } from '../../../api/updates'\r\nimport { mapUpdates } from '../../../models/UpdateBatch'\r\nimport { Loader } from '../../ui/Loaders/Loader'\r\nimport { UpdateDetails } from '../../modules/Updates/UpdateDetails'\r\nimport { HeaderLinks } from '../../modules/Headerlinks'\r\nimport { Spinner } from '../../ui/Loaders/Spinner'\r\n\r\nconst useStyles = createUseStyles({\r\n '@keyframes fadeIn': {\r\n from: {\r\n opacity: 0,\r\n },\r\n to: {\r\n opacity: 1,\r\n },\r\n },\r\n container: {\r\n padding: '0 1.5rem',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n padding: '0',\r\n },\r\n },\r\n },\r\n headerArea: {\r\n display: 'flex',\r\n padding: '.5rem 0',\r\n minHeight: '5rem',\r\n },\r\n headerAreaTop: {\r\n display: 'flex',\r\n padding: '1rem 0 .5rem',\r\n borderBottom: `1px solid ${colors.borderColor}`,\r\n marginBottom: '1rem',\r\n },\r\n topArea: {\r\n borderBottom: `1px solid ${colors.gray700}`,\r\n // TODO: remove this when this area has been developed.\r\n minHeight: '60px',\r\n },\r\n headerActions: {\r\n display: 'flex',\r\n flexGrow: 1,\r\n marginLeft: 'auto',\r\n justifyContent: 'flex-end',\r\n alignItems: 'flex-start',\r\n flexShrink: 0,\r\n },\r\n sendingEmailSettings: {\r\n display: 'flex',\r\n padding: '.5rem 1rem',\r\n minHeight: '5rem',\r\n width: '100%',\r\n backgroundColor: colors.green200,\r\n color: colors.black,\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n '& span': {\r\n fontWeight: 700,\r\n },\r\n animation: '.5s $fadeIn',\r\n },\r\n updateList: {\r\n paddingTop: '20px',\r\n },\r\n dialogButtonsContainer: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'space-around',\r\n },\r\n button: {\r\n ...baseButton,\r\n ...{\r\n cursor: 'pointer',\r\n },\r\n },\r\n modalButtons: {\r\n display: 'flex',\r\n },\r\n modalCheckbox: {\r\n display: 'flex',\r\n position: 'absolute',\r\n right: '20px',\r\n top: '20px',\r\n },\r\n numberOfUpdate: {\r\n display: 'flex',\r\n padding: '30px 0 90px',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n iconWrapper: {\r\n position: 'relative',\r\n },\r\n content: {\r\n display: '-webkit-box',\r\n WebkitLineClamp: '2',\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n deleteButtons: {\r\n top: '0',\r\n right: '0',\r\n display: 'flex',\r\n zIndex: '1',\r\n position: 'absolute',\r\n flexWrap: 'wrap',\r\n transition: 'all .3s ease-in',\r\n justifyContent: 'end',\r\n width: '100%',\r\n height: '100%',\r\n alignItems: 'center',\r\n background: 'rgba(255,255,255, .7)',\r\n },\r\n sortPlaceholder: {\r\n ...sortPlaceholder,\r\n },\r\n customIcon: {\r\n backgroundColor: colors.green500,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: colors.white,\r\n padding: '2px 5px',\r\n borderRadius: '4px',\r\n },\r\n})\r\n\r\nconst gridTemplateColumns = '16% 23% 23% 21% 18%'\r\nconst gridTemplateColumnsUpdated = '16% 19% 21% 17% auto 18%'\r\n\r\nconst Updates: FC = () => {\r\n const [loading, setLoading] = useState(true)\r\n const classes = useStyles()\r\n const { setSort, sortState } = useSortMembersList()\r\n\r\n const [showDone, setShowDone] = useState(false)\r\n const [sortedUpdateDone] = useAtom(updatePageDoneAtom)\r\n const [sortedUpdateInProgress] = useAtom(updatePageInProgressAtom)\r\n const [updates, setAllUpdates] = useAtom(allUpdates)\r\n const [sortedUpdates] = useAtom(updatePageAtom)\r\n\r\n const [, _setAllUpdatesDone] = useAtom(allUpdatesDone)\r\n const [, _setUpdatesInProgress] = useAtom(allUpdatesInProgress)\r\n\r\n const init = (): void => {\r\n async function fetchData(): Promise {\r\n setLoading(true)\r\n const d = new Date()\r\n\r\n // Set it to three month ago\r\n d.setMonth(d.getMonth() - 1)\r\n const resZero = await getAllUpdates()\r\n const mapped = mapUpdates(resZero.data.OpdateringBatches)\r\n const filtered = mapped.filter((item) => {\r\n if (item.status === 'UnderOpdatering') {\r\n return true\r\n }\r\n\r\n if (item.status === 'FaerdigBehandlet') {\r\n return new Date(item.created) > d\r\n }\r\n\r\n return false\r\n })\r\n\r\n setAllUpdates(\r\n filtered.filter((item) => item.type !== 'OpdaterTR_FTR')\r\n )\r\n setLoading(false)\r\n }\r\n\r\n fetchData()\r\n }\r\n\r\n useEffect(() => {\r\n if (!sortState) {\r\n setSort('created')\r\n }\r\n init()\r\n }, [])\r\n\r\n if (loading) return \r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n {showDone\r\n ? L_HTML('MINEOPDATERINGER_UDFØRT_OVERSKRIFT')\r\n : L_HTML('MINEOPDATERINGER_AFVENTER_OVERSKRIFT')}\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n {!showDone\r\n ? L_HTML('MINEOPDATERINGER_AFVENTER_TEKST')\r\n : L_HTML('MINEOPDATERINGER_UDFØRT_TEKST')}\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n {L_HTML(\r\n 'MINEOPDATERINGER_VISER-ANTAL_OPDATERINGER_TEXT',\r\n {\r\n antal: String(sortedUpdates.length),\r\n }\r\n )}\r\n \r\n
    \r\n
    \r\n\r\n
    \r\n {updates && updates.length ? (\r\n \r\n \r\n \r\n setSort('created')}\r\n sort={sortState}\r\n name=\"created\"\r\n >\r\n {L(\r\n 'MINEOPDATERINGER_INDSENDT_KOLONNE_OVERSKRIFT'\r\n )}\r\n \r\n \r\n \r\n setSort('name')}\r\n sort={sortState}\r\n name=\"name\"\r\n >\r\n {L(\r\n 'MINEOPDATERINGER_MEDLEM_KOLONNE_OVERSKRIFT'\r\n )}\r\n \r\n \r\n \r\n setSort('updateType')}\r\n sort={sortState}\r\n name=\"updateType\"\r\n >\r\n {L(\r\n 'MINEOPDATERINGER_TYPE_KOLONNE_OVERSKRIFT'\r\n )}\r\n \r\n \r\n \r\n setSort('updateProfile')}\r\n sort={sortState}\r\n name=\"updateProfile\"\r\n >\r\n {L(\r\n 'MINEOPDATERINGER_INDSENDT-AF_KOLONNE_OVERSKRIFT'\r\n )}\r\n \r\n \r\n {showDone ? (\r\n \r\n setSort('updateUpdated')}\r\n sort={sortState}\r\n name=\"updateUpdated\"\r\n >\r\n {L(\r\n 'MINEOPDATERINGER_OPDATERET_KOLONNE_OVERSKRIFT'\r\n )}\r\n \r\n \r\n ) : null}\r\n \r\n setSort('status')}\r\n sort={sortState}\r\n name=\"status\"\r\n >\r\n {L(\r\n 'MINEOPDATERINGER_STATUS_KOLONNE_OVERSKRIFT'\r\n )}\r\n \r\n \r\n \r\n \r\n ) : null}\r\n {sortedUpdates.map((update) => (\r\n \r\n ))}\r\n
    \r\n
    \r\n \r\n {L_HTML('MINEOPDATERINGER_VISER-ANTAL_TEXT', {\r\n antal: String(sortedUpdates.length),\r\n })}\r\n \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport { Updates }\r\n","import { AxiosResponse } from 'axios'\r\nimport {\r\n NoteResponse,\r\n CreateNewNoteType,\r\n UpdateNoteType,\r\n DeleteNoteType,\r\n} from '../../models/Note'\r\nimport { axiosWithImitator } from '../withAuth'\r\n\r\nexport type NoteTypes = 'MedlemIdent' | 'ArbejdsstedNr'\r\n\r\nexport type getNotesReponse = {\r\n Noter: NoteResponse[]\r\n AntalIalt: number\r\n}\r\n\r\nconst getMemberNotes = async (\r\n id: number,\r\n type: NoteTypes\r\n): Promise => {\r\n const response = await axiosWithImitator.get(`/note/hentnoter`, {\r\n params: {\r\n 'request.referenceId': id,\r\n 'request.referenceType': type,\r\n },\r\n })\r\n\r\n const { data } = response\r\n return data\r\n}\r\n\r\n// /note/hentbrugersnoter\r\nconst getAllNotes = async (type = 'MedlemIdent'): Promise => {\r\n const response = await axiosWithImitator.get(`/note/hentbrugersnoter`, {\r\n params: {\r\n 'request.referenceType': type,\r\n },\r\n })\r\n return response\r\n}\r\n\r\nconst addNewNote = async (\r\n values: CreateNewNoteType\r\n): Promise => {\r\n const response = await axiosWithImitator.post(`/note/opretnote`, values)\r\n\r\n return response\r\n}\r\n\r\nconst updateNote = async (values: UpdateNoteType): Promise => {\r\n const response = await axiosWithImitator.post(`/note/opdaternote`, values)\r\n\r\n return response\r\n}\r\n\r\nconst updateNoteIsArchived = async (\r\n id: number,\r\n isRead: boolean\r\n): Promise => {\r\n const response = await axiosWithImitator.post(\r\n `/note/opdaternoteerlaest`,\r\n null,\r\n {\r\n params: {\r\n 'request.noteId': id,\r\n 'request.erLaest': isRead,\r\n },\r\n }\r\n )\r\n\r\n return response\r\n}\r\n\r\nconst deleteNote = async (id: number): Promise => {\r\n const response = await axiosWithImitator.delete(`/note/sletnote`, {\r\n params: {\r\n 'request.noteId': id,\r\n },\r\n })\r\n\r\n return response\r\n}\r\n\r\nexport {\r\n getMemberNotes,\r\n addNewNote,\r\n updateNote,\r\n deleteNote,\r\n getAllNotes,\r\n updateNoteIsArchived,\r\n}\r\n","// ErFavorit: false\r\n// ErLaest: false\r\n// Indhold: \"Havde også vagt sidste år..\\nVend tilbage\"\r\n// NoteId: 114\r\n// OpdaterTid: \"2022-01-31T11:19:11.3827028\"\r\n// OpretTid: \"2022-01-20T10:23:44.3796811\"\r\n// ReferenceId: 1000156792\r\n// ReferenceType: \"MedlemIdent\"\r\n// Titel: \"Vagt 24 dec. Hvad gælder?\"\r\n\r\nexport type NoteResponse = {\r\n ErFavorit: boolean\r\n ErLaest: boolean\r\n Indhold: string\r\n NoteId: number\r\n OpdaterTid: string\r\n OpretTid: string\r\n ReferenceId: number\r\n ReferenceType: string\r\n Titel: string\r\n ReferenceNavn: string\r\n}\r\n\r\nexport interface INote {\r\n referenceId?: string\r\n referenceType: string\r\n title: string\r\n content: string\r\n NoteId: number\r\n}\r\n\r\nexport type CreateNewNoteType = {\r\n ReferenceId?: number\r\n ReferenceType?: string\r\n Titel?: string\r\n Indhold?: string\r\n}\r\n\r\nexport type UpdateNoteType = {\r\n NoteId: number\r\n Titel?: string\r\n Indhold?: string\r\n}\r\n\r\nexport type DeleteNoteType = {\r\n NoteId: number\r\n}\r\n\r\nexport class Note {\r\n referenceId = ''\r\n\r\n referenceType = ''\r\n\r\n title = ''\r\n\r\n content = ''\r\n\r\n id: number | undefined = undefined\r\n\r\n created: Date | undefined = undefined\r\n\r\n updated: Date | undefined = undefined\r\n\r\n name = ''\r\n\r\n isFavorite = false\r\n\r\n archived = false\r\n\r\n isRead = false\r\n\r\n // Searchables.\r\n searchable_title = ''\r\n\r\n searchable_content = ''\r\n\r\n searchable_member = ''\r\n\r\n static build(data: NoteResponse): Note {\r\n const note = new Note()\r\n\r\n note.referenceId = String(data.ReferenceId)\r\n note.content = data.Indhold\r\n note.title = data.Titel\r\n note.referenceType = data.ReferenceType\r\n note.id = data.NoteId\r\n note.updated = new Date(data.OpdaterTid)\r\n note.created = new Date(data.OpretTid)\r\n note.name = data.ReferenceNavn || ''\r\n note.isFavorite = data.ErFavorit\r\n note.archived = data.ErLaest\r\n note.isRead = data.ErLaest\r\n\r\n // Searchables.\r\n note.searchable_content = note.content\r\n\r\n note.searchable_title = note.title\r\n\r\n note.searchable_member = note.name\r\n\r\n return note\r\n }\r\n}\r\n\r\nexport function mapNotes(data: NoteResponse[]): Note[] {\r\n return data.map((note) => Note.build(note))\r\n}\r\n","import React, { FC, useEffect, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useForm } from 'react-hook-form'\r\nimport { useAtom } from 'jotai'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport { Member } from '../../../models/Member'\r\nimport { colors } from '../../../theme/palette'\r\nimport { FormInput, FormTextArea } from '../FormElements/FormInput'\r\nimport { FormControl } from '../../ui/FormElememts/FormControl'\r\nimport { baseButton } from '../../../theme/reuseables'\r\nimport { addNewNote } from '../../../api/notes'\r\nimport { CreateNewNoteType } from '../../../models/Note'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport { Workplace } from '../../../models/Workplace'\r\nimport { ImitatorNoAccessWarning } from '../Imitator/ImitatorNoAccessWarning'\r\nimport { profileAtom } from '../../../api/profile/profile'\r\n\r\ninterface EditProps {\r\n member?: Member\r\n workPlace?: Workplace\r\n type: 'member' | 'workplace'\r\n onUpdated?: () => void\r\n onClickCancel?: () => void\r\n hasNotes?: boolean\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n contentWrapper: {\r\n padding: '100px 20px 20px',\r\n overflow: 'auto',\r\n height: 'calc(100% - 100px)',\r\n paddingBottom: '80px',\r\n },\r\n accordionWrapper: {\r\n marginBottom: '20px',\r\n },\r\n select: {\r\n position: 'relative',\r\n height: '3.125rem',\r\n backgroundColor: colors.white,\r\n border: `1px solid ${colors.borderColor}`,\r\n borderRadius: '6px',\r\n width: '100%',\r\n fontSize: '1.125rem',\r\n paddingLeft: '.75rem',\r\n paddingRight: '.75rem',\r\n cursor: 'pointer',\r\n color: colors.labelColor,\r\n },\r\n button: {\r\n ...baseButton,\r\n ...{\r\n cursor: 'pointer',\r\n },\r\n },\r\n bottom: {\r\n display: 'flex',\r\n position: 'absolute',\r\n bottom: '0',\r\n width: '100%',\r\n padding: '20px',\r\n left: '0',\r\n background: colors.white,\r\n zIndex: 4,\r\n borderTop: `1px solid ${colors.borderColor}`,\r\n '& > button': {\r\n flexGrow: 1,\r\n },\r\n '& > button:last-of-type': {\r\n marginRight: '0',\r\n },\r\n },\r\n})\r\n\r\nexport type RegistrationFormFields = {\r\n Titel: string\r\n Indhold: string\r\n ReferenceType: string\r\n}\r\n\r\nexport const AddNewNote: FC = ({\r\n member,\r\n type,\r\n workPlace,\r\n onUpdated,\r\n onClickCancel,\r\n hasNotes,\r\n}) => {\r\n const [authProfile] = useAtom(profileAtom)\r\n const [showImitatorModal, setShowImitatorModal] = useState(false)\r\n const { register, handleSubmit, formState, reset } =\r\n useForm()\r\n const classes = useStyles()\r\n const [isValid, setIsValid] = useState(false)\r\n\r\n const resetForm = (): void => {\r\n reset()\r\n }\r\n\r\n const { isDirty, dirtyFields } = formState\r\n\r\n const onSubmit = async (data: RegistrationFormFields): Promise => {\r\n if (authProfile.isImitator) {\r\n setShowImitatorModal(true)\r\n return\r\n }\r\n const fieldsToEdit: CreateNewNoteType = {\r\n ReferenceId: type === 'member' ? member.memberId : workPlace.number,\r\n ReferenceType: type === 'member' ? 'MedlemIdent' : 'ArbejdsstedNr',\r\n }\r\n\r\n if (isDirty) {\r\n if (dirtyFields.Indhold) {\r\n fieldsToEdit.Indhold = data.Indhold\r\n }\r\n\r\n if (dirtyFields.Titel) {\r\n fieldsToEdit.Titel = data.Titel\r\n }\r\n\r\n const response = await addNewNote(fieldsToEdit)\r\n\r\n if (onUpdated && response) {\r\n onUpdated()\r\n }\r\n }\r\n }\r\n\r\n const checkIsValid = (): void => {\r\n // setIsValid(isDirty && dirtyFields.Indhold && dirtyFields.Indhold)\r\n setIsValid(isDirty)\r\n }\r\n\r\n useEffect(() => {\r\n checkIsValid()\r\n })\r\n\r\n return (\r\n <>\r\n \r\n \r\n {L_HTML('NOTER_NY-NOTE_FORM_TITEL')}\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
    \r\n {\r\n resetForm()\r\n onClickCancel()\r\n }}\r\n type=\"secondary\"\r\n size=\"large\"\r\n >\r\n {L('NOTER_REDIGER_FORM_ANNULLER_KNAP')}\r\n \r\n \r\n {L('NOTER_REDIGER_FORM_GEM_KNAP')}\r\n \r\n
    \r\n\r\n
    \r\n \r\n setShowImitatorModal(false)}\r\n />\r\n \r\n )\r\n}\r\n\r\nAddNewNote.defaultProps = {\r\n hasNotes: false,\r\n}\r\n","import React, { FC, useEffect, useRef, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useForm } from 'react-hook-form'\r\nimport moment from 'moment'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport { colors } from '../../../theme/palette'\r\nimport { FormTextArea } from '../FormElements/FormInput'\r\nimport { FormControl } from '../../ui/FormElememts/FormControl'\r\nimport { baseButton } from '../../../theme/reuseables'\r\nimport { updateNote } from '../../../api/notes'\r\nimport { Note, UpdateNoteType } from '../../../models/Note'\r\nimport { L } from '../../providers/Lokalise'\r\nimport Input from '../../ui/FormElememts/Input'\r\n\r\ninterface EditProps {\r\n note: Note\r\n onUpdated?: (note: Note) => void\r\n onCancel?: () => void\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n contentWrapper: {\r\n padding: '100px 20px 20px',\r\n overflow: 'auto',\r\n height: 'calc(100% - 100px)',\r\n paddingBottom: '80px',\r\n },\r\n accordionWrapper: {\r\n marginBottom: '20px',\r\n },\r\n select: {\r\n position: 'relative',\r\n height: '3.125rem',\r\n backgroundColor: colors.white,\r\n border: `1px solid ${colors.borderColor}`,\r\n borderRadius: '6px',\r\n width: '100%',\r\n fontSize: '1.125rem',\r\n paddingLeft: '.75rem',\r\n paddingRight: '.75rem',\r\n cursor: 'pointer',\r\n color: colors.labelColor,\r\n },\r\n button: {\r\n ...baseButton,\r\n ...{\r\n cursor: 'pointer',\r\n },\r\n },\r\n bottom: {\r\n display: 'flex',\r\n position: 'absolute',\r\n bottom: '0',\r\n width: '100%',\r\n padding: '20px',\r\n left: '0',\r\n background: colors.white,\r\n zIndex: 4,\r\n borderTop: `1px solid ${colors.borderColor}`,\r\n '& > button': {\r\n flexGrow: 1,\r\n },\r\n '& > button:last-of-type': {\r\n marginRight: '0',\r\n },\r\n },\r\n date: {\r\n position: 'relative',\r\n marginTop: '20px',\r\n },\r\n datePlaceholder: {\r\n position: 'absolute',\r\n top: '-38px',\r\n zIndex: '1',\r\n },\r\n})\r\n\r\nexport type RegistrationFormFields = {\r\n Titel: string\r\n Indhold: string\r\n ReferenceType: string\r\n}\r\n\r\nexport const EditNote: FC = ({ note, onUpdated, onCancel }) => {\r\n const { register, handleSubmit, reset, setValue } =\r\n useForm()\r\n const classes = useStyles()\r\n const inputReference = useRef(null)\r\n\r\n useEffect(() => {\r\n if (inputReference && inputReference.current) {\r\n setTimeout(() => {\r\n inputReference.current.focus()\r\n }, 500)\r\n }\r\n }, [note])\r\n\r\n const resetForm = (): void => {\r\n reset()\r\n }\r\n\r\n const onSubmit = async (data: RegistrationFormFields): Promise => {\r\n const fieldsToEdit: UpdateNoteType = {\r\n NoteId: note.id,\r\n }\r\n\r\n fieldsToEdit.Indhold = data.Indhold || undefined\r\n fieldsToEdit.Titel = data.Titel || note.title\r\n\r\n const response = await updateNote(fieldsToEdit)\r\n\r\n if (response) {\r\n if (onUpdated) {\r\n onUpdated(note)\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n {L('NOTER_REDIGER-NOTE_FORM_TITEL')}\r\n \r\n\r\n \r\n {\r\n setValue('Titel', e.target.value)\r\n }}\r\n />\r\n \r\n\r\n \r\n \r\n \r\n
    \r\n \r\n \r\n Sidst ændret{' '}\r\n {`${moment(note.updated).format(\r\n 'DD.MM.YYYY'\r\n )}, kl.${moment(note.updated).format('HH:mm')}`}\r\n \r\n \r\n
    \r\n\r\n
    \r\n {\r\n if (onCancel) {\r\n onCancel()\r\n }\r\n resetForm()\r\n }}\r\n type=\"secondary\"\r\n size=\"large\"\r\n >\r\n {L('NOTER_REDIGER_FORM_ANNULLER_KNAP')}\r\n \r\n \r\n
    \r\n\r\n
    \r\n \r\n \r\n )\r\n}\r\n","import React, { FC } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { Note as NoteIcon, Plus } from '../../../assets/icons'\r\nimport { Note } from '../../../models/Note'\r\nimport { colors } from '../../../theme/palette'\r\nimport { baseButton } from '../../../theme/reuseables'\r\nimport { L } from '../../providers/Lokalise'\r\nimport { Circle } from '../../ui/Card'\r\nimport { CircleIcon } from '../../ui/Circle/Circle'\r\n\r\ninterface EditMemberNoteButtonProps {\r\n onClickCreate?: () => void\r\n onClickView?: () => void\r\n notes: Note[]\r\n withBorder?: boolean\r\n firstNoteLabel?: string\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n wrapper: {\r\n display: 'flex',\r\n },\r\n button: {\r\n ...baseButton,\r\n ...{\r\n backgroundColor: colors.white,\r\n height: '56px',\r\n fontSize: '18px',\r\n padding: '16px',\r\n borderRadius: '0.5rem',\r\n cursor: 'pointer',\r\n textAlign: 'left',\r\n justifyContent: 'start',\r\n },\r\n },\r\n withBorder: {\r\n border: `1px solid ${colors.borderColor}`,\r\n },\r\n})\r\n\r\nconst EditMemberNoteButton: FC = ({\r\n onClickCreate,\r\n onClickView,\r\n notes,\r\n withBorder,\r\n firstNoteLabel,\r\n}) => {\r\n const classes = useStyles()\r\n\r\n if (notes.length > 0) {\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n Noter\r\n {notes.length}\r\n \r\n \r\n \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\n {firstNoteLabel}\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nEditMemberNoteButton.defaultProps = {\r\n firstNoteLabel: L('PROFIL_NOTER_FORM_FØRSTE-NOTE_KNAP'),\r\n}\r\n\r\nexport { EditMemberNoteButton }\r\n","import moment from 'moment'\r\nimport React, { FC, useEffect, useRef, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { Delete, DeleteFill, Edit, EditFill } from '../../../assets/icons'\r\nimport { Note } from '../../../models/Note'\r\nimport { colors } from '../../../theme/palette'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { CircleIcon2 } from '../../ui/Circle/Circle'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\n\r\ninterface NoteSidebarCardProps {\r\n note: Note\r\n onClickEdit?: (note: Note) => void\r\n onClickDelete?: (note: Note) => void\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n card: {\r\n position: 'relative',\r\n backgroundColor: colors.white,\r\n width: '100%',\r\n color: 'black',\r\n marginBottom: '10px',\r\n borderRadius: '4px',\r\n border: `1px solid ${colors.borderColor}`,\r\n padding: '1rem',\r\n transition: 'all 0.5s linear',\r\n },\r\n actions: {\r\n position: 'absolute',\r\n top: '10px',\r\n right: '10px',\r\n display: 'flex',\r\n gap: '10px',\r\n },\r\n date: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n marginTop: '20px',\r\n },\r\n deleteButtons: {\r\n display: 'flex',\r\n transition: 'all .3s ease-in',\r\n marginTop: '20px',\r\n },\r\n title: {\r\n display: '-webkit-box',\r\n WebkitLineClamp: '1',\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n titleOpen: {\r\n display: '-webkit-box',\r\n // WebkitLineClamp: '1',\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden',\r\n // textOverflow: 'ellipsis',\r\n },\r\n content: {\r\n marginTop: '10px',\r\n display: '-webkit-box',\r\n WebkitLineClamp: '2',\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden',\r\n whiteSpace: 'pre-wrap',\r\n textOverflow: 'ellipsis',\r\n },\r\n contentOpen: {\r\n marginTop: '10px',\r\n display: '-webkit-box',\r\n whiteSpace: 'pre-wrap',\r\n // WebkitLineClamp: '2',\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden',\r\n // textOverflow: 'ellipsis',\r\n },\r\n})\r\n\r\nconst NoteSidebarCard: FC = ({\r\n note,\r\n onClickEdit,\r\n onClickDelete,\r\n}) => {\r\n const classes = useStyles()\r\n const [showDelete, setShowDelete] = useState(false)\r\n const [readMore, setReadMore] = useState(false)\r\n const [isMore, setIsMore] = useState(false)\r\n const contentRef = useRef()\r\n const titleRef = useRef()\r\n\r\n const onHandleEdit = (): void => {\r\n if (onClickEdit) {\r\n onClickEdit(note)\r\n }\r\n }\r\n\r\n const onHandleDelete = (): void => {\r\n setShowDelete(false)\r\n if (onClickDelete) {\r\n onClickDelete(note)\r\n }\r\n }\r\n\r\n const checkLines = (ref, lines: number): void => {\r\n // eslint-disable-next-line no-unused-expressions\r\n const lineHeight = window\r\n .getComputedStyle(ref.current)\r\n .getPropertyValue('line-height')\r\n\r\n // eslint-disable-next-line no-unused-expressions\r\n ref.current &&\r\n Math.round(ref.current.scrollHeight / parseFloat(lineHeight)) >\r\n lines &&\r\n setIsMore(true)\r\n }\r\n useEffect(() => {\r\n checkLines(contentRef, 2)\r\n }, [contentRef, note])\r\n useEffect(() => {\r\n checkLines(titleRef, 1)\r\n }, [titleRef, note])\r\n return (\r\n
    \r\n {/* --------- headline -------- */}\r\n \r\n \r\n {note.title}\r\n \r\n \r\n {/* ------- text content --------- */}\r\n \r\n \r\n {note.content}\r\n \r\n \r\n {/* ---------- date -------- */}\r\n
    \r\n \r\n {`${moment(note.updated).format('DD.MM.YYYY')}, kl.${moment(\r\n note.updated\r\n ).format('HH:mm')}`}\r\n \r\n {isMore && (\r\n setReadMore((prev) => !prev)}\r\n >\r\n {readMore\r\n ? L_HTML('NOTER_SIDEBAR_VIS_MINDRE')\r\n : L_HTML('NOTER_SIDEBAR_VIS_MERE')}\r\n \r\n )}\r\n
    \r\n\r\n
    \r\n \r\n \r\n
    \r\n {showDelete ? (\r\n
    \r\n setShowDelete(false)}\r\n size=\"xlarge\"\r\n type=\"secondary\"\r\n style={{ flexGrow: 1 }}\r\n >\r\n {L('NOTER_REDIGER_FORM_ANNULLER_KNAP')}\r\n \r\n \r\n {L('NOTER_SIDEBAR_SLET-NOTE_KNAP')}\r\n \r\n
    \r\n ) : null}\r\n
    \r\n )\r\n}\r\n\r\nexport { NoteSidebarCard }\r\n","import React, { FC } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { Note } from '../../../models/Note'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport { EditMemberNoteButton } from './EditMemberNoteButton'\r\nimport { NoteSidebarCard } from './NoteSidebarCard'\r\nimport { colors } from '../../../theme/palette'\r\n\r\ninterface NoteOverviewSidebarProps {\r\n notes: Note[]\r\n onClickEdit: (note: Note) => void\r\n onClickDelete: (note: Note) => void\r\n onClickCreate: () => void\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n contentWrapper: {\r\n padding: '100px 20px 20px',\r\n overflow: 'auto',\r\n height: '100%',\r\n paddingBottom: '80px',\r\n },\r\n createNote: {\r\n marginBottom: '20px',\r\n },\r\n})\r\n\r\nconst NoteOverviewSidebar: FC = ({\r\n notes,\r\n onClickEdit,\r\n onClickDelete,\r\n onClickCreate,\r\n}) => {\r\n const classes = useStyles()\r\n\r\n return (\r\n
    \r\n \r\n {L_HTML('NOTER_SIDEBAR_OVERSIGT_TITEL')}\r\n \r\n
    \r\n \r\n
    \r\n {notes\r\n .sort(\r\n (a: Note, b: Note) =>\r\n b.updated.getTime() - a.updated.getTime()\r\n )\r\n .map((note) => {\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n )\r\n}\r\n\r\nexport { NoteOverviewSidebar }\r\n","import React, { FC, useEffect, useState } from 'react'\r\nimport { useAtom } from 'jotai'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { deleteNote, getMemberNotes } from '../../../api/notes'\r\nimport { Member } from '../../../models/Member'\r\nimport { Note, mapNotes } from '../../../models/Note'\r\nimport { Workplace } from '../../../models/Workplace'\r\nimport { colors } from '../../../theme/palette'\r\nimport { baseButton } from '../../../theme/reuseables'\r\nimport { Circle } from '../../ui/Card'\r\nimport { CircleIcon } from '../../ui/Circle/Circle'\r\nimport { NoteButton } from '../../ui/NoteButton'\r\nimport { Overlay } from '../../ui/Sidebar'\r\nimport { DrawerHeaderWorkplaceInfo } from '../FormElements/DrawerHeader'\r\nimport { AddNewNote } from './AddNewNote'\r\nimport { EditMemberNoteButton } from './EditMemberNoteButton'\r\nimport { EditNote } from './EditNote'\r\nimport { NoteOverviewSidebar } from './NoteOverviewSidebar'\r\nimport { Note as NoteIcon, Plus } from '../../../assets/icons'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport breakpoints from '../../../theme/breakpoints'\r\nimport { ImitatorNoAccessWarning } from '../Imitator/ImitatorNoAccessWarning'\r\n\r\nimport { profileAtom } from '../../../api/profile/profile'\r\n\r\ntype ViewStates = 'default' | 'create' | 'edit' | 'delete'\r\n\r\ninterface EditWorkplaceNotesProps {\r\n workplace: Workplace\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n button: {\r\n ...baseButton,\r\n ...{\r\n backgroundColor: colors.white,\r\n fontSize: '16px',\r\n padding: '16px',\r\n borderRadius: '0.5rem',\r\n cursor: 'pointer',\r\n textAlign: 'left',\r\n justifyContent: 'start',\r\n },\r\n },\r\n link: {\r\n fontWeight: 400,\r\n fontSize: '16px',\r\n textDecoration: 'underline',\r\n },\r\n buttons: {\r\n display: 'flex',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n display: 'grid',\r\n gridTemplateColumns: '2fr 1fr 1fr',\r\n // justifyContent: 'start',\r\n },\r\n },\r\n },\r\n addNote: {\r\n position: 'relative',\r\n top: '6px',\r\n },\r\n noteButton: {\r\n position: 'relative',\r\n top: '4px',\r\n },\r\n})\r\n\r\nconst EditWorkplaceNotes: FC = ({ workplace }) => {\r\n const [authProfile] = useAtom(profileAtom)\r\n const [showImitatorModal, setShowImitatorModal] = useState(false)\r\n const [notes, setNotes] = useState([])\r\n const [isOpen, setIsOpen] = useState(false)\r\n const [viewState, setViewState] = useState('default')\r\n const [loading, setLoading] = useState(true)\r\n const [editNote, setEditNote] = useState(undefined)\r\n const classes = useStyles()\r\n\r\n const init = (): void => {\r\n async function fetchData(): Promise {\r\n const response = await getMemberNotes(\r\n workplace.number,\r\n 'ArbejdsstedNr'\r\n )\r\n const notesMapped = mapNotes(response.Noter)\r\n\r\n setNotes(notesMapped)\r\n\r\n setLoading(false)\r\n }\r\n\r\n fetchData()\r\n }\r\n\r\n const onClickDelete = async (note: Note): Promise => {\r\n setViewState('default')\r\n const response = await deleteNote(note.id)\r\n if (response) {\r\n setViewState('default')\r\n if (notes.length === 1) {\r\n setIsOpen(false)\r\n }\r\n init()\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n init()\r\n }\r\n }, [isOpen])\r\n\r\n // if (loading) return null\r\n\r\n return (\r\n <>\r\n
    \r\n {\r\n if (!authProfile.isImitator) {\r\n setIsOpen(true)\r\n if (workplace.numberOfNotes > 0) {\r\n setViewState('default')\r\n } else {\r\n setViewState('create')\r\n }\r\n } else {\r\n setShowImitatorModal(true)\r\n }\r\n }}\r\n >\r\n {workplace.numberOfNotes > 0 ? 'Vis noter' : 'Tilføj note'}\r\n \r\n
    \r\n {\r\n if (authProfile.isImitator) {\r\n setShowImitatorModal(true)\r\n } else if (notes.length > 0) {\r\n setIsOpen(true)\r\n setViewState('default')\r\n }\r\n }}\r\n >\r\n {workplace.numberOfNotes}\r\n \r\n
    \r\n\r\n {\r\n if (authProfile.isImitator) {\r\n setShowImitatorModal(true)\r\n } else {\r\n setIsOpen(true)\r\n setViewState('create')\r\n }\r\n }}\r\n >\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n\r\n {\r\n setIsOpen(false)\r\n }}\r\n >\r\n \r\n\r\n {viewState === 'create' ? (\r\n 0}\r\n type=\"workplace\"\r\n onClickCancel={() => {\r\n setViewState('default')\r\n if (notes.length === 0) {\r\n setIsOpen(false)\r\n }\r\n }}\r\n onUpdated={() => {\r\n setViewState('default')\r\n init()\r\n }}\r\n />\r\n ) : null}\r\n\r\n {viewState === 'edit' && editNote ? (\r\n setViewState('default')}\r\n onUpdated={() => {\r\n init()\r\n setViewState('default')\r\n }}\r\n />\r\n ) : null}\r\n\r\n {viewState === 'default' ? (\r\n {\r\n setIsOpen(true)\r\n setEditNote(note)\r\n setViewState('edit')\r\n }}\r\n onClickDelete={onClickDelete}\r\n onClickCreate={() => setViewState('create')}\r\n />\r\n ) : null}\r\n \r\n setShowImitatorModal(false)}\r\n />\r\n \r\n )\r\n}\r\n\r\nexport { EditWorkplaceNotes }\r\n","import React, { FC, useEffect, useState } from 'react'\nimport { createUseStyles } from 'react-jss'\nimport { PinFill } from '../../../assets/icons'\nimport breakpoints from '../../../theme/breakpoints'\nimport { colors } from '../../../theme/palette'\nimport { baseButton, sortPlaceholder } from '../../../theme/reuseables'\nimport { Card, CardCell, Circle, CircleText } from '../../ui/Card'\nimport { Typography } from '../../ui/Typography/Typography'\nimport { Button } from '../../ui/Button/Button'\nimport { Workplace } from '../../../models/Workplace'\nimport { EditWorkplaceNotes } from '../../modules/notes/EditWorkplaceNotes'\nimport { Member } from '../../../models/Member'\nimport { getInitials } from '../../../utils/initials'\nimport { Favorite } from '../../ui/Favorite'\nimport { NoteButton } from '../../ui/NoteButton'\n\nconst useStyles = createUseStyles({\n '@keyframes fadeIn': {\n from: {\n opacity: 0,\n },\n to: {\n opacity: 1,\n },\n },\n container: {\n padding: '0 1.5rem',\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\n '&': {\n padding: '0',\n },\n },\n },\n headerArea: {\n display: 'flex',\n padding: '.5rem 0',\n minHeight: '5rem',\n },\n headerAreaTop: {\n display: 'flex',\n padding: '1rem 0 .5rem',\n borderBottom: `1px solid ${colors.borderColor}`,\n marginBottom: '1rem',\n },\n topArea: {\n borderBottom: `1px solid ${colors.gray700}`,\n // TODO: remove this when this area has been developed.\n minHeight: '60px',\n },\n headerActions: {\n display: 'flex',\n flexGrow: 1,\n marginLeft: 'auto',\n justifyContent: 'flex-end',\n alignItems: 'flex-start',\n flexShrink: 0,\n },\n sendingEmailSettings: {\n display: 'flex',\n padding: '.5rem 1rem',\n minHeight: '5rem',\n width: '100%',\n backgroundColor: colors.green200,\n color: colors.black,\n justifyContent: 'space-between',\n alignItems: 'center',\n '& span': {\n fontWeight: 700,\n },\n animation: '.5s $fadeIn',\n },\n notes: {\n paddingTop: '20px',\n },\n dialogButtonsContainer: {\n display: 'flex',\n width: '100%',\n justifyContent: 'space-around',\n },\n button: {\n ...baseButton,\n ...{\n cursor: 'pointer',\n },\n },\n modalButtons: {\n display: 'flex',\n },\n modalCheckbox: {\n display: 'flex',\n position: 'absolute',\n right: '20px',\n top: '20px',\n },\n numnerOfNotes: {\n display: 'flex',\n padding: '30px 0 90px',\n justifyContent: 'center',\n alignItems: 'center',\n },\n iconWrapper: {\n position: 'relative',\n },\n noteContent: {\n display: '-webkit-box',\n WebkitLineClamp: '2',\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n noteButton: {\n position: 'relative',\n },\n deleteButtons: {\n top: '0',\n right: '0',\n display: 'flex',\n zIndex: '1',\n position: 'absolute',\n flexWrap: 'wrap',\n transition: 'all .3s ease-in',\n justifyContent: 'end',\n width: '100%',\n height: '100%',\n alignItems: 'center',\n background: 'rgba(255,255,255, .7)',\n },\n sortPlaceholder: {\n ...sortPlaceholder,\n },\n googleLink: {\n marginLeft: 'auto',\n },\n showMembers: {\n display: 'flex',\n },\n link: {\n fontWeight: '400',\n fontSize: '16px',\n textDecoration: 'underline',\n color: colors.black,\n '&:visited, &:active, &:focus': {\n color: colors.black,\n },\n '&:hover': {\n color: colors.green500,\n },\n },\n numberOfMembers: {\n fontSize: '16px',\n color: colors.black,\n marginRight: '20px',\n },\n contentMobile: {\n padding: '20px',\n },\n searchField: {\n width: '100%',\n marginRight: '20px',\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\n '&': {\n width: 'auto',\n minWidth: '425px',\n marginRight: '20px',\n },\n },\n },\n})\n\nconst gridTemplateColumns = '23% 20% auto 230px'\nconst gridTemplateColumnsMembers = '8% 92%'\n\ntype WorkplaceCardCellProps = {\n wp: Workplace\n allMembers: Member[]\n}\n\nconst WorkplaceCardCell: FC = ({ wp, allMembers }) => {\n const classes = useStyles()\n const [membersForWorkplace, setMembersForWorkplace] = useState()\n const [open, setOpen] = useState(false)\n\n const onClickMapLink = (workplace: Workplace): void => {\n // eslint-disable-next-line max-len\n const link = `https://www.google.com/maps/search/?api=1&query=${workplace.address.addressLine1}+${workplace.address.addressLine2}+${workplace.address.addressLine3}%2C+${workplace.address.postNumber}+${workplace.address.postDistrict}`\n\n window.open(link, '_blank')\n }\n\n useEffect(() => {\n let numberOfMembers = []\n\n wp.trMemberList.forEach((item) => {\n numberOfMembers = [...numberOfMembers, ...item.Medlemsidenter]\n })\n\n const wpMembersIdents = Array.from(new Set(numberOfMembers))\n const wpMembers: Member[] = []\n wpMembersIdents.forEach((item) => {\n const found = allMembers.find((m) => m.memberId === item)\n\n if (found) {\n wpMembers.push(found)\n }\n })\n\n setMembersForWorkplace(wpMembers)\n }, [wp])\n return (\n \n \n \n Medlemmer på arbejdssted:\n \n
    \n\n {membersForWorkplace\n ? membersForWorkplace.map((member) => {\n return (\n <>\n \n \n \n \n \n {getInitials(\n member.fullName\n )}\n \n \n \n
    \n \n \n \n \n {member.fullName}\n \n \n {\n console.log(\n 'click'\n )\n }}\n >\n {member.numberOfNotes}\n \n
    \n
    \n \n \n \n )\n })\n : null}\n \n }\n >\n \n {wp.name}\n \n \n
    \n
    \n {membersForWorkplace && membersForWorkplace.length}{' '}\n
    \n\n {membersForWorkplace && membersForWorkplace.length ? (\n setOpen(!open)}\n >\n {!open ? 'Vis medlemmer' : 'Skjul medlemmer'}\n \n ) : null}\n
    \n
    \n \n
    \n \n {wp.address.addressLine1}, {wp.address.postNumber}{' '}\n {wp.address.postDistrict}\n \n onClickMapLink(wp)}\n >\n
    \n \n Vis vej\n \n \n
    \n \n
    \n
    \n \n \n \n \n )\n}\n\nexport { WorkplaceCardCell }\n","import React, { FC, useEffect, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useAtom } from 'jotai'\r\nimport { Link } from 'react-router-dom'\r\nimport { PinFill } from '../../../assets/icons'\r\nimport useSortMembersList from '../../../hooks/useSortMembersList'\r\nimport breakpoints from '../../../theme/breakpoints'\r\nimport { colors } from '../../../theme/palette'\r\nimport { baseButton, sortPlaceholder } from '../../../theme/reuseables'\r\nimport { membersAtom, getMemberWorkPlaces } from '../../../api/members/members'\r\n\r\nimport {\r\n Card,\r\n CardCell,\r\n CardContentMobile,\r\n CardHeader,\r\n CardHeaderCell,\r\n CardList,\r\n CardMobile,\r\n} from '../../ui/Card'\r\nimport { SortButton } from '../../ui/SortButton'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport {\r\n workplacesPageAtom,\r\n allWorkplaces,\r\n filterSelected,\r\n searchWorkplaceAtom,\r\n} from '../../../store/filter/filterAtom'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { Workplace } from '../../../models/Workplace'\r\n\r\nimport { NoteButton } from '../../ui/NoteButton'\r\nimport { EditWorkplaceNotes } from '../../modules/notes/EditWorkplaceNotes'\r\nimport { initialSelectedFilters } from '../../../models/Filter'\r\nimport { HeaderLinks } from '../../modules/Headerlinks'\r\nimport { Spinner } from '../../ui/Loaders/Spinner'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport SearchField from '../../ui/SearchField/SearchField'\r\nimport { WorkplaceCardCell } from './WorkplaceCardCell'\r\n\r\nconst useStyles = createUseStyles({\r\n '@keyframes fadeIn': {\r\n from: {\r\n opacity: 0,\r\n },\r\n to: {\r\n opacity: 1,\r\n },\r\n },\r\n container: {\r\n padding: '0 1.5rem',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n padding: '0',\r\n },\r\n },\r\n },\r\n headerArea: {\r\n display: 'flex',\r\n padding: '.5rem 0',\r\n minHeight: '5rem',\r\n },\r\n headerAreaTop: {\r\n display: 'flex',\r\n padding: '1rem 0 .5rem',\r\n borderBottom: `1px solid ${colors.borderColor}`,\r\n marginBottom: '1rem',\r\n },\r\n topArea: {\r\n borderBottom: `1px solid ${colors.gray700}`,\r\n // TODO: remove this when this area has been developed.\r\n minHeight: '60px',\r\n },\r\n headerActions: {\r\n display: 'flex',\r\n flexGrow: 1,\r\n marginLeft: 'auto',\r\n justifyContent: 'flex-end',\r\n alignItems: 'flex-start',\r\n flexShrink: 0,\r\n },\r\n sendingEmailSettings: {\r\n display: 'flex',\r\n padding: '.5rem 1rem',\r\n minHeight: '5rem',\r\n width: '100%',\r\n backgroundColor: colors.green200,\r\n color: colors.black,\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n '& span': {\r\n fontWeight: 700,\r\n },\r\n animation: '.5s $fadeIn',\r\n },\r\n notes: {\r\n paddingTop: '20px',\r\n },\r\n dialogButtonsContainer: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'space-around',\r\n },\r\n button: {\r\n ...baseButton,\r\n ...{\r\n cursor: 'pointer',\r\n },\r\n },\r\n modalButtons: {\r\n display: 'flex',\r\n },\r\n modalCheckbox: {\r\n display: 'flex',\r\n position: 'absolute',\r\n right: '20px',\r\n top: '20px',\r\n },\r\n numnerOfNotes: {\r\n display: 'flex',\r\n padding: '30px 0 90px',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n iconWrapper: {\r\n position: 'relative',\r\n },\r\n noteContent: {\r\n display: '-webkit-box',\r\n WebkitLineClamp: '2',\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n deleteButtons: {\r\n top: '0',\r\n right: '0',\r\n display: 'flex',\r\n zIndex: '1',\r\n position: 'absolute',\r\n flexWrap: 'wrap',\r\n transition: 'all .3s ease-in',\r\n justifyContent: 'end',\r\n width: '100%',\r\n height: '100%',\r\n alignItems: 'center',\r\n background: 'rgba(255,255,255, .7)',\r\n },\r\n sortPlaceholder: {\r\n ...sortPlaceholder,\r\n },\r\n googleLink: {\r\n marginLeft: 'auto',\r\n },\r\n showMembers: {\r\n display: 'flex',\r\n },\r\n link: {\r\n fontWeight: '400',\r\n fontSize: '16px',\r\n textDecoration: 'underline',\r\n color: colors.black,\r\n '&:visited, &:active, &:focus': {\r\n color: colors.black,\r\n },\r\n '&:hover': {\r\n color: colors.green500,\r\n },\r\n },\r\n numberOfMembers: {\r\n fontSize: '16px',\r\n color: colors.black,\r\n marginRight: '20px',\r\n },\r\n contentMobile: {\r\n padding: '20px',\r\n },\r\n searchField: {\r\n width: '100%',\r\n marginRight: '20px',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n width: 'auto',\r\n minWidth: '425px',\r\n marginRight: '20px',\r\n },\r\n },\r\n },\r\n})\r\n\r\nconst gridTemplateColumns = '23% 20% auto 230px'\r\n\r\nconst Workplaces: FC = () => {\r\n const [loading, setLoading] = useState(true)\r\n const classes = useStyles()\r\n const { setSort, sortState } = useSortMembersList()\r\n const [sortedWorkplaces] = useAtom(workplacesPageAtom)\r\n const [, setSearchAtom] = useAtom(searchWorkplaceAtom)\r\n const [, setAllWorkplaces] = useAtom(allWorkplaces)\r\n const [, setFilterSelected] = useAtom(filterSelected)\r\n const [membersData] = useAtom(membersAtom)\r\n\r\n const init = (): void => {\r\n async function fetchData(): Promise {\r\n setSort('name')\r\n const res = await getMemberWorkPlaces()\r\n console.log(res, 'ressss')\r\n setAllWorkplaces(res.workplaces)\r\n\r\n setLoading(false)\r\n }\r\n\r\n fetchData()\r\n }\r\n\r\n useEffect(() => {\r\n if (!sortState) {\r\n setSort('date')\r\n }\r\n init()\r\n\r\n return () => {\r\n setFilterSelected(initialSelectedFilters)\r\n }\r\n }, [])\r\n\r\n const getNumberOfMembers = (workPlace: Workplace): number => {\r\n let numberOfMembers = []\r\n\r\n workPlace.trMemberList.forEach((item) => {\r\n numberOfMembers = [...numberOfMembers, ...item.Medlemsidenter]\r\n })\r\n\r\n const members = Array.from(new Set(numberOfMembers))\r\n\r\n return members.length\r\n }\r\n\r\n const onClickMapLink = (wp: Workplace): void => {\r\n // eslint-disable-next-line max-len\r\n const link = `https://www.google.com/maps/search/?api=1&query=${wp.address.addressLine1}+${wp.address.addressLine2}+${wp.address.addressLine3}%2C+${wp.address.postNumber}+${wp.address.postDistrict}`\r\n\r\n window.open(link, '_blank')\r\n }\r\n\r\n const onSearch = (search: string): void => {\r\n setSearchAtom(search)\r\n }\r\n\r\n const useSearch = (search: string): void => {\r\n setSearchAtom(search)\r\n }\r\n\r\n if (loading) return \r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n Mine arbejdssteder\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n {L_HTML('MINEARBEJDSSTEDER_ARKIVEREDE_OVERSKRIFT_TEXT')}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n {sortedWorkplaces && sortedWorkplaces.length ? (\r\n \r\n \r\n \r\n setSort('name')}\r\n sort={sortState}\r\n name=\"name\"\r\n >\r\n Arbejdssted\r\n \r\n \r\n \r\n setSort('numberOfMembers')}\r\n sort={sortState}\r\n name=\"numberOfMembers\"\r\n >\r\n Medlemmer\r\n \r\n \r\n \r\n
    \r\n Adresse\r\n
    \r\n
    \r\n \r\n setSort('notes')}\r\n sort={sortState}\r\n name=\"notes\"\r\n >\r\n \r\n Noter\r\n \r\n \r\n \r\n
    \r\n {sortedWorkplaces.map((wp) => (\r\n
    \r\n \r\n
    \r\n \r\n \r\n {wp.name}\r\n \r\n \r\n \r\n {wp.address.addressLine1},{' '}\r\n {wp.address.postNumber}{' '}\r\n {wp.address.postDistrict}\r\n \r\n \r\n \r\n onClickMapLink(wp)\r\n }\r\n >\r\n \r\n \r\n Vis vej\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 ) : null}\r\n
    \r\n
    \r\n \r\n Viser {sortedWorkplaces.length} arbejdssteder\r\n \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport { Workplaces }\r\n","/* eslint-disable react/require-default-props */\r\nimport React from 'react'\r\nimport { createUseStyles, useTheme } from 'react-jss'\r\nimport { colors } from '../../../theme/palette'\r\nimport { useWindowResize } from '../../../hooks/useWindowSize'\r\nimport breakpoints from '../../../theme/breakpoints'\r\nimport { CircleIcon, Circle, CircleImage } from '../Circle/Circle'\r\nimport { Typography } from '../Typography/Typography'\r\n\r\ntype RuleNames = 'column' | 'titleContainer' | 'rowContainer' | 'hr'\r\n\r\ninterface StyleProps {\r\n gridTemplateColumns?: string\r\n iconWidth?: string\r\n}\r\n\r\nexport type Row = {\r\n label: string\r\n value: string | number\r\n profilePicture?: {\r\n content: string\r\n mimeType: string\r\n }\r\n useContent?: boolean\r\n content?: JSX.Element\r\n mailToLinkIcon?: JSX.Element\r\n}\r\n\r\ntype Props = {\r\n gridTemplateColumns?: string\r\n titleLabel?: string\r\n titleIcon?: JSX.Element\r\n rows?: Row[]\r\n iconWidth?: string\r\n hideTitle?: boolean\r\n}\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n column: ({ gridTemplateColumns }) => {\r\n return {\r\n backgroundColor: colors.white,\r\n width: '100%',\r\n gridTemplateColumns,\r\n borderRadius: '.5rem',\r\n height: 'fit-content',\r\n marginBottom: '20px',\r\n minWidth: 0,\r\n }\r\n },\r\n titleContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-start',\r\n padding: '1rem',\r\n },\r\n rowContainer: {\r\n padding: '.75rem 1rem .75rem 1rem',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n wordBreak: 'break-word',\r\n\r\n '& a': {\r\n display: 'inline-flex',\r\n },\r\n },\r\n hr: {\r\n opacity: '.4',\r\n margin: '0',\r\n },\r\n}))\r\n\r\n// TODO add possibility to have a tooltip - ? icon\r\nconst CardColumn: React.FC = ({\r\n gridTemplateColumns,\r\n titleIcon,\r\n titleLabel,\r\n iconWidth,\r\n hideTitle,\r\n rows = [\r\n {\r\n label: '',\r\n value: '',\r\n profilePicture: {\r\n content: null,\r\n mimeType: null,\r\n },\r\n mailToLinkIcon: null,\r\n },\r\n ],\r\n}) => {\r\n const windowSize = useWindowResize()\r\n const theme = useTheme()\r\n const classes = useStyles({ ...{ gridTemplateColumns }, theme })\r\n return (\r\n
    \r\n {!hideTitle ? (\r\n
    \r\n \r\n \r\n {titleIcon}\r\n \r\n \r\n\r\n \r\n {titleLabel}\r\n \r\n
    \r\n ) : null}\r\n {rows.map((row, index) => {\r\n if (row.label.length === 0 && !row.useContent) {\r\n return <>\r\n }\r\n\r\n if (row.useContent && row.content) {\r\n return (\r\n <>\r\n
    \r\n
    \r\n {row.content}\r\n
    \r\n \r\n )\r\n }\r\n\r\n return (\r\n <>\r\n {!hideTitle || (hideTitle && index !== 0) ? (\r\n
    \r\n ) : null}\r\n
    \r\n <>\r\n {row?.profilePicture?.content &&\r\n row?.profilePicture?.mimeType && (\r\n \r\n )}\r\n \r\n
    \r\n \r\n {row.label}\r\n \r\n \r\n {row.value}\r\n \r\n
    \r\n {row?.mailToLinkIcon && row.mailToLinkIcon}\r\n
    \r\n \r\n )\r\n })}\r\n
    \r\n )\r\n}\r\n\r\nexport { CardColumn }\r\n","/* eslint-disable react/require-default-props */\r\nimport React from 'react'\r\nimport { createUseStyles, useTheme } from 'react-jss'\r\nimport { useWindowResize } from '../../../hooks/useWindowSize'\r\nimport breakpoints from '../../../theme/breakpoints'\r\n\r\ntype RuleNames = 'container'\r\n\r\ninterface StyleProps {\r\n gridTemplateColumns?: string\r\n}\r\n\r\ntype Props = {\r\n gridTemplateColumns?: string\r\n}\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n container: {\r\n width: '100%',\r\n display: 'grid',\r\n gridGap: '1.5rem',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n gridTemplateColumns: '1fr 1fr 1fr',\r\n },\r\n },\r\n },\r\n}))\r\n\r\nconst CardColumnContainer: React.FC = ({\r\n gridTemplateColumns,\r\n children,\r\n}) => {\r\n const windowSize = useWindowResize()\r\n const theme = useTheme()\r\n const classes = useStyles({ ...{ gridTemplateColumns }, theme })\r\n\r\n // if (windowSize.width >= breakpoints.Desktop) {\r\n // return
    {children}
    \r\n // }\r\n\r\n return
    {children}
    \r\n}\r\n\r\nexport { CardColumnContainer }\r\n","import React, { FC, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useForm } from 'react-hook-form'\r\nimport { useAtom } from 'jotai'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport {\r\n ContactLedger,\r\n Edit,\r\n PersonalInfo,\r\n LockFill,\r\n CheckFill,\r\n SuitcaseFill,\r\n} from '../../../assets/icons'\r\nimport { Circle } from '../../ui/Card'\r\nimport { CircleIcon } from '../../ui/Circle/Circle'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport { Input } from '../../ui/FormElememts/stories/Input.stories'\r\nimport { colors } from '../../../theme/palette'\r\nimport { formatDate } from '../../../utils/format'\r\nimport { FormInput, FormInputNumber } from '../FormElements/FormInput'\r\nimport { FormControl } from '../../ui/FormElememts/FormControl'\r\nimport { FormHeader } from '../../ui/FormElememts/FormHeader'\r\nimport { baseButton } from '../../../theme/reuseables'\r\nimport { Overlay } from '../../ui/Sidebar'\r\nimport { Dialog } from '../../ui/Dialog/Dialog'\r\nimport { DrawerHeaderMemberInfo } from '../FormElements/DrawerHeader'\r\nimport { Profile } from '../../../models/Profile'\r\nimport {\r\n getProfileAtom,\r\n updateProfile,\r\n profileAtom,\r\n} from '../../../api/profile/profile'\r\nimport { FormMessage } from '../../ui/FormElememts/FormMessage'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport { ImitatorNoAccessWarning } from '../Imitator/ImitatorNoAccessWarning'\r\n\r\ninterface EditProps {\r\n profile: Profile\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n contentWrapper: {\r\n padding: '100px 20px 20px',\r\n overflow: 'auto',\r\n height: '100%',\r\n paddingBottom: '80px',\r\n },\r\n accordionWrapper: {\r\n marginBottom: '20px',\r\n },\r\n select: {\r\n position: 'relative',\r\n height: '3.125rem',\r\n backgroundColor: colors.white,\r\n border: `1px solid ${colors.borderColor}`,\r\n borderRadius: '6px',\r\n width: '100%',\r\n fontSize: '1.125rem',\r\n paddingLeft: '.75rem',\r\n paddingRight: '.75rem',\r\n cursor: 'pointer',\r\n color: colors.labelColor,\r\n },\r\n button: {\r\n ...baseButton,\r\n ...{\r\n cursor: 'pointer',\r\n },\r\n },\r\n bottom: {\r\n display: 'flex',\r\n position: 'absolute',\r\n bottom: '0',\r\n width: '100%',\r\n padding: '20px',\r\n left: '0',\r\n background: colors.white,\r\n zIndex: 4,\r\n borderTop: `1px solid ${colors.borderColor}`,\r\n '& > button': {\r\n flexGrow: 1,\r\n },\r\n '& > button:last-of-type': {\r\n marginRight: '0',\r\n },\r\n },\r\n})\r\n\r\nexport type RegistrationFormFields = {\r\n KontaktTR: {\r\n Mobil: string\r\n Email: string\r\n }\r\n TotalAntalKollegaerBrugerDaekker: number\r\n}\r\n\r\nexport interface IUpdateMyProfileData {\r\n KontaktTR?: {\r\n Mobil?: string\r\n Email?: string\r\n }\r\n TotalAntalKollegaerBrugerDaekker?: number\r\n}\r\n\r\nexport const EditMyProfile: FC = ({ profile }) => {\r\n const { register, handleSubmit, formState, reset } =\r\n useForm()\r\n const classes = useStyles()\r\n const [isOpen, setIsOpen] = useState(false)\r\n const [showDialog, setShowDialog] = useState(false)\r\n const [, update] = useAtom(getProfileAtom)\r\n const { isDirty, dirtyFields, errors } = formState\r\n const [authProfile] = useAtom(profileAtom)\r\n const [showImitatorModal, setShowImitatorModal] = useState(false)\r\n\r\n const resetForm = (): void => {\r\n reset()\r\n }\r\n\r\n const onSubmit = async (data: RegistrationFormFields): Promise => {\r\n if (authProfile.isImitator) {\r\n setShowImitatorModal(true)\r\n return\r\n }\r\n\r\n if (Object.keys(dirtyFields).length) {\r\n const fieldsToEdit: IUpdateMyProfileData = {}\r\n\r\n if (dirtyFields.KontaktTR) {\r\n fieldsToEdit.KontaktTR = {}\r\n if (\r\n dirtyFields.KontaktTR.Mobil &&\r\n data.KontaktTR.Mobil !== ''\r\n ) {\r\n fieldsToEdit.KontaktTR.Mobil = data.KontaktTR.Mobil\r\n }\r\n if (\r\n dirtyFields.KontaktTR.Email &&\r\n data.KontaktTR.Email !== ''\r\n ) {\r\n fieldsToEdit.KontaktTR.Email = data.KontaktTR.Email\r\n }\r\n }\r\n\r\n try {\r\n const response = updateProfile(fieldsToEdit)\r\n if (response) {\r\n update({ type: 'refetch' })\r\n setIsOpen(false)\r\n setShowDialog(true)\r\n resetForm()\r\n }\r\n } catch (err) {\r\n console.log('fetch failed', err)\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n setIsOpen(true)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n {L('TRPROFIL_DETALJE_REDIGERMEDLEM_KNAP')}\r\n \r\n \r\n {\r\n reset()\r\n setIsOpen(false)\r\n }}\r\n >\r\n \r\n \r\n \r\n {L('TR-PROFIL_REDIGER_DATA_OVERSKRIFT')}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Kontakt\r\n \r\n \r\n \r\n \r\n value.length > 7 ||\r\n !value ||\r\n L('GENERISK_FORM_MOBIL_VALIDERINGS_TEKST'),\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n {\r\n setIsOpen(false)\r\n reset()\r\n }}\r\n type=\"secondary\"\r\n size=\"large\"\r\n >\r\n Luk\r\n \r\n \r\n {L('TR-PROFIL_REDIGER_DATA_INDSEND_KNAP')}\r\n \r\n
    \r\n\r\n
    \r\n \r\n \r\n {showDialog ? (\r\n }\r\n >\r\n \r\n {L_HTML('EGEN-PROFIL-REDIGER_POPUP_OVERSKRIFT')}\r\n \r\n \r\n {L_HTML('EGEN-PROFIL-REDIGER_POPUP_TEXT')}\r\n \r\n \r\n \r\n ) : null}\r\n setShowImitatorModal(false)}\r\n />\r\n \r\n )\r\n}\r\n","import React, { useState, useEffect } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useInView } from 'react-intersection-observer'\r\nimport CountUp from 'react-countup'\r\nimport { colors } from '../../../theme/palette'\r\nimport { Typography } from '../Typography/Typography'\r\n\r\ninterface PercentCircleProps {\r\n size: number\r\n strokeWidth: number\r\n percentage: number\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n container: {\r\n position: 'relative',\r\n backgroundColor: colors.green500,\r\n borderRadius: '.5rem',\r\n display: 'flex',\r\n height: 'fit-content',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '2rem',\r\n textAlign: 'center',\r\n },\r\n svgContainer: {\r\n padding: '2rem',\r\n },\r\n text: {\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n color: colors.white,\r\n },\r\n percentage: {\r\n fontWeight: 700,\r\n },\r\n})\r\n\r\nconst PercentCircle: React.FC = ({\r\n size,\r\n strokeWidth,\r\n percentage,\r\n}) => {\r\n const classes = useStyles()\r\n const [progress, setProgress] = useState(0)\r\n const { ref, inView } = useInView()\r\n\r\n useEffect(() => {\r\n if (inView) {\r\n setProgress(percentage)\r\n } else {\r\n setProgress(0)\r\n }\r\n }, [inView, percentage])\r\n\r\n const viewBox = `0 0 ${size} ${size}`\r\n const radius = (size - strokeWidth) / 2\r\n const circumference = radius * Math.PI * 2\r\n const dash = (progress * circumference) / 100\r\n\r\n return (\r\n
    \r\n {/* \r\n Organiseringsprocent\r\n */}\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n {inView && (\r\n <>\r\n \r\n %\r\n \r\n )}\r\n \r\n
    \r\n
    \r\n {/* \r\n \r\n {inView && (\r\n <>\r\n \r\n %\r\n \r\n )}\r\n {' '}\r\n af dine kollegaer er organiseret\r\n */}\r\n
    \r\n )\r\n}\r\n\r\nexport { PercentCircle }\r\n","export default __webpack_public_path__ + \"static/media/gmapsBgImage.08e42bea.png\";","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport GmapsImage from '../../../assets/img/gmapsBgImage.png'\r\nimport { L } from '../../providers/Lokalise'\r\nimport { ButtonLink } from '../Button/Button'\r\n\r\ninterface Props {\r\n customedGmapsUrl: string\r\n}\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n gmapsContainer: {\r\n position: 'relative',\r\n },\r\n gmapsImage: {\r\n objectFit: 'cover',\r\n width: '100%',\r\n height: '100%',\r\n },\r\n gmapsButton: {\r\n position: 'absolute',\r\n bottom: '.75rem',\r\n right: '.75rem',\r\n },\r\n}))\r\n\r\nconst GmapsLink: React.FC = ({ customedGmapsUrl }) => {\r\n const classes = useStyles()\r\n return (\r\n
    \r\n \r\n
    \r\n \r\n {L('GENERISK_VISVEJ_KNAP')}\r\n \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport { GmapsLink }\r\n","import React, { FC, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { Check, ChevronLeft, SuitcaseFill } from '../../../assets/icons'\r\nimport { Member } from '../../../models/Member'\r\nimport { Profile } from '../../../models/Profile'\r\nimport { Workplace } from '../../../models/Workplace'\r\nimport { colors } from '../../../theme/palette'\r\nimport { buildRow } from '../../pages/MyProfile'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { Circle } from '../../ui/Card'\r\nimport { Row } from '../../ui/Card/CardColumn'\r\nimport { CircleIcon } from '../../ui/Circle/Circle'\r\nimport { GmapsLink } from '../../ui/GmapsLink/GmapsLink'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\n\r\ninterface WorkPlaceProps {\r\n selectedWorkplace: Workplace\r\n setSelectedWorkplace: (workplace: Workplace) => void\r\n workplaces: Workplace[]\r\n profile: Profile | Member\r\n beforContent?: JSX.Element\r\n afterContent?: JSX.Element\r\n showHo?: boolean\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n column: {\r\n backgroundColor: colors.white,\r\n width: '100%',\r\n borderRadius: '.5rem',\r\n height: 'fit-content',\r\n marginBottom: '20px',\r\n },\r\n titleContainer: {\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-start',\r\n padding: '1rem',\r\n },\r\n rowContainer: {\r\n padding: '.75rem 1rem .75rem 1rem',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n\r\n '& a': {\r\n display: 'inline-flex',\r\n },\r\n },\r\n hr: {\r\n opacity: '.4',\r\n margin: '0',\r\n },\r\n dropdownIcon: {\r\n transform: 'rotate(90deg)',\r\n position: 'absolute',\r\n right: '27px',\r\n top: '29px',\r\n transition: 'all .15s',\r\n '&.active': {\r\n transform: 'rotate(-90deg)',\r\n },\r\n },\r\n dropdownItem: {\r\n position: 'relative',\r\n display: 'flex',\r\n border: 'none',\r\n padding: '0 0 10px',\r\n },\r\n dropdownItems: {\r\n width: '100%',\r\n // display: 'flex',\r\n flexDirection: 'column',\r\n padding: '10px 20px 20px 22px',\r\n display: 'none',\r\n height: 0,\r\n transition: 'height .15s',\r\n '&.active': {\r\n display: 'flex',\r\n height: 'auto',\r\n },\r\n },\r\n check: {\r\n position: 'relative',\r\n marginLeft: '5px',\r\n top: '-1px',\r\n },\r\n})\r\n\r\nconst WorkplaceDropdown: FC = ({\r\n workplaces,\r\n selectedWorkplace,\r\n setSelectedWorkplace,\r\n profile,\r\n beforContent,\r\n afterContent,\r\n showHo,\r\n}) => {\r\n const classes = useStyles()\r\n const [isOpen, setIsOpen] = useState(false)\r\n\r\n const getPositionName = (\r\n workPlace: Workplace,\r\n member: Profile | Member\r\n ): string => {\r\n const id = workPlace.postionNumber\r\n const group = member.positions.find((pos) => +pos.id === +id)\r\n return group.name || '-'\r\n }\r\n\r\n const getGroupName = (member: Profile | Member): string => {\r\n const id = member.primaryWorkPlace.postionNumber\r\n const group = member.positions.find((pos) => +pos.id === +id)\r\n return group.group.name || '-'\r\n }\r\n\r\n const getPositionInfoRows = (workplace: Workplace): Row[] => {\r\n return [\r\n buildRow(\r\n getPositionName(workplace, profile),\r\n L('GENERISK_FORM_STILLING_LABEL')\r\n ),\r\n buildRow(workplace?.hoursPerWeek, L('GENERISK_FORM_TIMETAL_LABEL')),\r\n buildRow(getGroupName(profile), L('GENERISK_FORM_FAGGRUPPE_LABEL')),\r\n ]\r\n }\r\n\r\n let customedGmapsUrl = ''\r\n if (selectedWorkplace?.address) {\r\n const {\r\n addressLine1,\r\n addressLine2,\r\n addressLine3,\r\n postDistrict,\r\n postNumber,\r\n } = selectedWorkplace?.address\r\n customedGmapsUrl = `https://www.google.com/maps/search/?api=1&query=${addressLine1}+${addressLine2}+${addressLine3}%2C+${postNumber}+${postDistrict}`\r\n }\r\n\r\n return (\r\n
    \r\n 1 ? 'pointer' : 'auto',\r\n }}\r\n onClick={() => {\r\n if (workplaces.length > 1) {\r\n setIsOpen(!isOpen)\r\n }\r\n }}\r\n >\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {L_HTML('GENERISK_FORM_ANSÆTTELSE_TITEL')}\r\n \r\n\r\n {workplaces.length > 1 ? (\r\n \r\n \r\n
    \r\n ) : null}\r\n
    \r\n \r\n\r\n {workplaces.length > 1 ? (\r\n \r\n {workplaces.map((w) => {\r\n return (\r\n {\r\n setIsOpen(false)\r\n setSelectedWorkplace(w)\r\n }}\r\n >\r\n
    \r\n \r\n {w.name}\r\n \r\n {selectedWorkplace.number === w.number ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n \r\n )\r\n })}\r\n
    \r\n ) : null}\r\n\r\n
    \r\n\r\n {beforContent ? (\r\n
    {beforContent}
    \r\n ) : null}\r\n\r\n <>\r\n
    \r\n \r\n \r\n Arbejdssted\r\n \r\n \r\n {selectedWorkplace.name}\r\n \r\n \r\n
    \r\n
    \r\n {getPositionInfoRows(selectedWorkplace).map((row) => {\r\n return (\r\n <>\r\n {row.label === 'Timetal' && !showHo ? null : (\r\n <>\r\n
    \r\n
    \r\n
    \r\n \r\n {row.label}\r\n \r\n \r\n {row.value}\r\n \r\n
    \r\n
    \r\n \r\n )}\r\n \r\n )\r\n })}\r\n \r\n\r\n {afterContent ? (\r\n
    {afterContent}
    \r\n ) : null}\r\n
    \r\n )\r\n}\r\n\r\nexport { WorkplaceDropdown }\r\n","import { useAtom } from 'jotai'\r\nimport React, { useEffect, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\n\r\nimport { Profile } from '../../../models/Profile'\r\nimport { getInitials } from '../../../utils/initials'\r\n\r\nimport {\r\n getProfileAtom,\r\n profileAtom,\r\n updateProfile,\r\n} from '../../../api/profile/profile'\r\nimport { colors } from '../../../theme/palette'\r\nimport { CircleText, CircleIcon2 } from '../../ui/Circle/Circle'\r\nimport { CardColumn, Row } from '../../ui/Card/CardColumn'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport { baseButton } from '../../../theme/reuseables'\r\nimport {\r\n CheckFill,\r\n Foa,\r\n PersonalInfo,\r\n ContactLedger,\r\n Envelop,\r\n Close,\r\n} from '../../../assets/icons'\r\nimport { CardColumnContainer } from '../../ui/Card/CardColumnContainer'\r\nimport { formatDate } from '../../../utils/format'\r\nimport {\r\n EditMyProfile,\r\n IUpdateMyProfileData,\r\n} from '../../modules/EditMyProfile'\r\nimport { Workplace } from '../../../models/Workplace'\r\nimport { PercentCircle } from '../../ui/PercentLevel/PercentLevel'\r\nimport { TypeOfRepresentative } from '../../../models/TypeOfRepresentative'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { Member } from '../../../models/Member'\r\nimport { WorkplaceDropdown } from '../../modules/WorkplaceDropdown'\r\nimport { Input } from '../../ui/FormElememts/Input'\r\nimport breakpoints from '../../../theme/breakpoints'\r\nimport { getSuppleantNamesForTR, isSuppleantFor } from '../../../utils/utils'\r\nimport { ImitatorNoAccessWarning } from '../../modules/Imitator/ImitatorNoAccessWarning'\r\n\r\nconst useStyles = createUseStyles({\r\n container: {\r\n color: colors.black,\r\n padding: '0 1.5rem',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n gridTemplateColumns: '1fr 1fr 1fr',\r\n padding: '0 0 5rem',\r\n },\r\n },\r\n },\r\n profileHeader: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n padding: '3rem 0',\r\n },\r\n nameContainer: {\r\n display: 'flex',\r\n flexBasis: '50%',\r\n alignItems: 'center',\r\n justifyContent: 'flex-start',\r\n },\r\n edit: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n ...baseButton,\r\n ...{\r\n cursor: 'pointer',\r\n margin: '0',\r\n },\r\n },\r\n section: {\r\n marginBottom: '3rem',\r\n\r\n '& > hr': {\r\n opacity: '0.2',\r\n margin: '1.25rem 0',\r\n },\r\n },\r\n iconWrapper: {\r\n position: 'relative',\r\n width: '90px',\r\n marginRight: '30px',\r\n },\r\n buttons: {\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexDirection: 'column',\r\n '& button': {\r\n margin: '10px 0',\r\n width: '100%',\r\n },\r\n },\r\n editIconWrapper: {\r\n top: '0',\r\n width: '100%',\r\n height: '100%',\r\n position: 'absolute',\r\n display: 'flex',\r\n alignContent: 'center',\r\n justifyContent: 'end',\r\n },\r\n confirmButtons: {\r\n display: 'flex',\r\n zIndex: '1',\r\n position: 'relative',\r\n flexWrap: 'wrap',\r\n transition: 'all .3s ease-in',\r\n justifyContent: 'end',\r\n width: '100%',\r\n height: '100%',\r\n alignItems: 'center',\r\n padding: '20px 0 0',\r\n },\r\n})\r\n\r\nexport const buildRow = (\r\n value: string | number,\r\n label: string,\r\n mailToLinkIcon?: JSX.Element\r\n): Row => {\r\n return {\r\n label,\r\n value,\r\n mailToLinkIcon,\r\n }\r\n}\r\n\r\nconst MyProfile: React.FC = () => {\r\n const classes = useStyles()\r\n const [data, update] = useAtom(getProfileAtom)\r\n const [authProfile] = useAtom(profileAtom)\r\n const [selectedWorkplace, setSelectedWorkplace] = useState<\r\n Workplace | undefined\r\n >(undefined)\r\n const [percentageShowEdit, setPercentageShowEdit] = useState(false)\r\n const [percentageEditValue, setPercentageEditValue] = useState<\r\n number | undefined\r\n >(undefined)\r\n const [percentageOfMembersCovered, setPercentageOfMembersCovered] =\r\n useState(0)\r\n const [showImitatorModal, setShowImitatorModal] = useState(false)\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const calcPercentageCovered = (\r\n numberFoaMemberUserCovers: number,\r\n totalNumberOfPeopleUserCovers: number\r\n ): number => {\r\n return (numberFoaMemberUserCovers / totalNumberOfPeopleUserCovers) * 100\r\n }\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const calcPercentageCoveredInEditMode = (): number => {\r\n if (percentageEditValue < data.numberFoaMemberUserCovers || 0)\r\n return 100\r\n return (data.numberFoaMemberUserCovers / percentageEditValue) * 100\r\n }\r\n\r\n // TODO add Labels from sitecore\r\n const getPersonalInfoRows = (d: Profile): Row[] => {\r\n return [\r\n buildRow(\r\n formatDate(new Date(d.personalInfo.birthdate)),\r\n L('GENERISK_FORM_FØDSELDAG_LABEL')\r\n ),\r\n buildRow(\r\n d.personalInfo.age ? `${d.personalInfo.age} år` : '-',\r\n L('GENERISK_FORM_ALDER_LABEL')\r\n ),\r\n ]\r\n }\r\n\r\n const getMembershipInfoRows = (d: Profile): Row[] => {\r\n return [\r\n buildRow(d.memberNumber, L('GENERISK_FORM_MEDLEMSNUMMER_LABEL')),\r\n buildRow(\r\n d.membershipInfo.name,\r\n L('GENERISK_FORM_FOAAFDELING_LABEL')\r\n ),\r\n buildRow(\r\n formatDate(new Date(d.membershipInfo.date)),\r\n L('GENERISK_FORM_INDMELDELSESDATO_LABEL')\r\n ),\r\n ]\r\n }\r\n\r\n const getContactInfoRows = (d: Profile): Row[] => {\r\n const noShowMessage = d.privateContact?.isTelefonPrivate\r\n ? 'Hemmeligt nummer'\r\n : '-'\r\n return [\r\n buildRow(\r\n d.privateContact ? d.privateContact.mobileShow : noShowMessage,\r\n L('TRPROFIL_MOBIL_LABEL')\r\n ),\r\n buildRow(\r\n d.privateContact ? d.privateContact.email : 'N/A',\r\n L('TRPROFIL_EMAIL_LABEL'),\r\n d.privateContact && d.privateContact.email && (\r\n \r\n \r\n \r\n )\r\n ),\r\n ]\r\n }\r\n\r\n const getDuties = (member: Member, profile: Profile): string => {\r\n const duties = []\r\n\r\n member.allWorkPlaces.forEach((w) => {\r\n if (w.typeOfRepresentatives && w.typeOfRepresentatives.length) {\r\n w.typeOfRepresentatives.forEach((t) => {\r\n const found = profile.typeOfRepresentatives.find(\r\n (tor) => tor.type === t.supplementedOfDutyType\r\n )\r\n\r\n if (found) {\r\n duties.push(found.name)\r\n }\r\n })\r\n }\r\n })\r\n return [...new Set(duties)].join(',') || ''\r\n }\r\n\r\n const getSuppleantForTRRows = (d: Profile): JSX.Element => {\r\n if (d.trForSelf.length === 1) {\r\n return (\r\n }\r\n titleLabel={L('TRPROFIL_MINE-SUPPLEANTER_TITEL')}\r\n rows={[\r\n buildRow(\r\n d.trForSelf[0].fullName,\r\n L('TRPROFIL_MINE-SUPPLEANTER_NAVN')\r\n ),\r\n buildRow(\r\n getDuties(d.trForSelf[0], d),\r\n L('TRPROFIL_MINE-SUPPLEANTER_TILLIDHVERV')\r\n ),\r\n ]}\r\n key=\"Mine suppleanter\"\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n }\r\n titleLabel=\"Mine suppleanter\"\r\n rows={[]}\r\n key=\"Mine suppleanter\"\r\n />\r\n {d.trForSelf.map((tr) => {\r\n return (\r\n }\r\n titleLabel={L('TRPROFIL_HVERV_TITEL')}\r\n rows={[\r\n buildRow(tr.fullName, L('TRPROFIL_HVERV_NAVN')),\r\n buildRow(\r\n getDuties(tr, d),\r\n L('TRPROFIL_HVERV_TILLIDSHVERV')\r\n ),\r\n ]}\r\n key={`${tr.memberId}${tr.memberNumber}`}\r\n />\r\n )\r\n })}\r\n \r\n )\r\n }\r\n\r\n // const getAlternateRepresentativeRows = (d: Profile): JSX.Element => {\r\n // if (d.trForOthers.length === 1) {\r\n // return (\r\n // }\r\n // titleLabel={L('TRPROFIL_SUPPLEANT-FOR_TITEL')}\r\n // rows={[\r\n // buildRow(\r\n // d.trForOthers[0].fullName,\r\n // L('TRPROFIL_SUPPLEANT-FOR_NAVN')\r\n // ),\r\n // buildRow(\r\n // getDuties(d.trForOthers[0], d),\r\n // L('TRPROFIL_SUPPLEANT-FOR_TILLIDSHVERV')\r\n // ),\r\n // ]}\r\n // key=\"Jeg er suppleant for\"\r\n // />\r\n // )\r\n // }\r\n\r\n // return (\r\n // <>\r\n // }\r\n // titleLabel=\"Jeg er suppleant for\"\r\n // rows={[]}\r\n // key=\"Jeg er suppleant for\"\r\n // />\r\n // {d.trForOthers.map((tr) => {\r\n // return (\r\n // }\r\n // titleLabel=\"Hverv\"\r\n // rows={[\r\n // buildRow(tr.fullName, 'Navn'),\r\n // buildRow(getDuties(tr, d), 'Tillidshverv'),\r\n // ]}\r\n // key={`${tr.memberId}${tr.memberNumber}`}\r\n // />\r\n // )\r\n // })}\r\n // \r\n // )\r\n // }\r\n\r\n const getTypeOfRepresentativeRows = (d: TypeOfRepresentative): Row[] => {\r\n const rows = [\r\n buildRow(\r\n // eslint-disable-next-line max-len\r\n `${d?.name}(${d?.shortName})`,\r\n L('GENERISK_FORM_TILLIDSHVERV_LABEL')\r\n ),\r\n buildRow(\r\n d ? formatDate(new Date(d.electedDate)) : 'N/A',\r\n L('GENERISK_FORM_GENVALGSDATO_LABEL')\r\n ),\r\n ]\r\n\r\n if (isSuppleantFor(d.type)) {\r\n rows.push(\r\n buildRow(\r\n getSuppleantNamesForTR(d.type, data),\r\n L('GENERISK_FORM_SUPPLEANT_FOR_LABEL')\r\n )\r\n )\r\n }\r\n\r\n return rows\r\n }\r\n\r\n const buildTor = (tors: TypeOfRepresentative[]): JSX.Element => {\r\n return (\r\n <>\r\n {tors\r\n .sort((a, b) => {\r\n if (a.sort > b.sort) return 1\r\n if (a.sort < b.sort) return -1\r\n return 0\r\n })\r\n .map((tor) => {\r\n return (\r\n }\r\n titleLabel=\"Hverv\"\r\n rows={getTypeOfRepresentativeRows(tor)}\r\n key={`${tor.type}${tor.sort}`}\r\n />\r\n )\r\n })}\r\n \r\n )\r\n }\r\n\r\n useEffect(() => {\r\n setSelectedWorkplace(data.primaryWorkPlace)\r\n }, [])\r\n\r\n useEffect(() => {\r\n setPercentageOfMembersCovered(\r\n data.totalNumberOfPeopleUserCovers !== null\r\n ? calcPercentageCovered(\r\n data.numberFoaMemberUserCovers,\r\n data.totalNumberOfPeopleUserCovers\r\n )\r\n : 0\r\n )\r\n setPercentageShowEdit(false)\r\n\r\n setPercentageEditValue(undefined)\r\n }, [data])\r\n\r\n useEffect(() => {\r\n if (percentageShowEdit) {\r\n setPercentageOfMembersCovered(calcPercentageCoveredInEditMode())\r\n }\r\n }, [\r\n calcPercentageCovered,\r\n calcPercentageCoveredInEditMode,\r\n percentageOfMembersCovered,\r\n percentageShowEdit,\r\n ])\r\n\r\n if (!data) return null\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n {getInitials(data.fullName)}\r\n \r\n \r\n
    \r\n \r\n {data.fullName}\r\n \r\n
    \r\n {data ? : null}\r\n
    \r\n
    \r\n {/* \r\n Profil\r\n */}\r\n
    \r\n \r\n
    \r\n }\r\n titleLabel={L(\r\n 'TRPROFIL_DETALJE_PERSONLIGEOPLYSNINGER-TITEL'\r\n )}\r\n rows={getPersonalInfoRows(data)}\r\n key=\"Personlige oplysninger\"\r\n />\r\n }\r\n titleLabel={L(\r\n 'TRPROFIL_DETALJE_FOAMEDLEMSSKAB-TITEL'\r\n )}\r\n rows={getMembershipInfoRows(data)}\r\n key=\"FOA medlemsskab\"\r\n />\r\n
    \r\n {selectedWorkplace ? (\r\n \r\n \r\n {L_HTML(\r\n 'TRPROFIL_BLANKET_RET_PERSONOPL_TEXT'\r\n )}\r\n \r\n \r\n window.open(\r\n // eslint-disable-next-line max-len\r\n process.env\r\n .REACT_APP_LINK_RET_PERSONOPLYSINGER,\r\n '_blank'\r\n )\r\n }\r\n >\r\n {L_HTML(\r\n 'TRPROFIL_BLANKET_RET_PERSONOPL_LABEL'\r\n )}\r\n \r\n
    \r\n }\r\n />\r\n ) : null}\r\n {data.contactInfoList && data.contactInfoList.length ? (\r\n }\r\n titleLabel={L('TRPROFIL_DETALJE_KONTAKT-TITEL')}\r\n rows={getContactInfoRows(data)}\r\n key=\"Kontakt\"\r\n />\r\n ) : null}\r\n \r\n
    \r\n
    \r\n {/* \r\n {L('GENERISK_FORM_TILLIDSHVERV_LABEL')}\r\n */}\r\n
    \r\n \r\n
    \r\n }\r\n titleLabel=\"Hverv\"\r\n rows={[\r\n {\r\n label: '',\r\n value: '',\r\n useContent: true,\r\n content: (\r\n <>\r\n {\r\n \r\n \r\n window.open(\r\n // eslint-disable-next-line max-len\r\n process.env\r\n .REACT_APP_LINK_BLANKET_OPHØR_TRHVERV,\r\n '_blank'\r\n )\r\n }\r\n >\r\n {L_HTML(\r\n 'TRPROFIL_BLANKET_RET_OPHØR-HVERV_LABEL'\r\n )}\r\n \r\n \r\n window.open(\r\n // eslint-disable-next-line max-len\r\n process.env\r\n .REACT_APP_LINK_BLANKET_OPDATER_TRHVERV,\r\n '_blank'\r\n )\r\n }\r\n >\r\n {L_HTML(\r\n 'TRPROFIL_BLANKET_RET_OPDATER-HVERV_LABEL'\r\n )}\r\n \r\n
    \r\n }\r\n \r\n ),\r\n },\r\n ]}\r\n />\r\n {buildTor(data.typeOfRepresentatives)}\r\n
    \r\n\r\n <>\r\n {data.trForSelf.length ? (\r\n
    {getSuppleantForTRRows(data)}
    \r\n ) : null}\r\n {/* {data.trForOthers.length ? (\r\n
    {getAlternateRepresentativeRows(data)}
    \r\n ) : null} */}\r\n {/* {data.trForSelf.length\r\n ? getSuppleantForTRRows(data)\r\n : null} */}\r\n \r\n }\r\n titleLabel={L(\r\n 'TRPROFIL_ORGANISERINGSWIDGET_OVERSKRIFT'\r\n )}\r\n rows={[\r\n {\r\n label: '',\r\n value: '',\r\n useContent: true,\r\n content: (\r\n
    \r\n \r\n {L(\r\n 'TRPROFIL_ORGANISERINGSWIDGET_TEKST_1'\r\n )}\r\n \r\n <>\r\n {\r\n \r\n {!percentageShowEdit ? (\r\n <>\r\n \r\n \r\n {\r\n if (\r\n authProfile.isImitator\r\n ) {\r\n setShowImitatorModal(\r\n true\r\n )\r\n return\r\n }\r\n setPercentageShowEdit(\r\n true\r\n )\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n ) : null}\r\n\r\n {percentageShowEdit ? (\r\n
    \r\n
    \r\n {\r\n const val =\r\n e\r\n .target\r\n .value\r\n setPercentageEditValue(\r\n +val\r\n )\r\n\r\n setPercentageOfMembersCovered(\r\n calcPercentageCoveredInEditMode()\r\n )\r\n }}\r\n />\r\n
    \r\n \r\n {\r\n // setShowDelete(false)\r\n setPercentageShowEdit(\r\n false\r\n )\r\n setPercentageEditValue(\r\n undefined\r\n )\r\n }}\r\n size=\"xlarge\"\r\n type=\"secondary\"\r\n style={{\r\n flexGrow: 1,\r\n }}\r\n >\r\n Annuller\r\n \r\n =\r\n data.numberFoaMemberUserCovers\r\n ) ||\r\n !percentageEditValue ||\r\n percentageEditValue >=\r\n 3000\r\n }\r\n onClick={() => {\r\n if (\r\n authProfile.isImitator\r\n ) {\r\n setShowImitatorModal(\r\n true\r\n )\r\n return\r\n }\r\n if (\r\n percentageEditValue\r\n ) {\r\n // Try to set value.\r\n const fieldsToEdit: IUpdateMyProfileData =\r\n {}\r\n fieldsToEdit.TotalAntalKollegaerBrugerDaekker =\r\n percentageEditValue\r\n const response =\r\n updateProfile(\r\n fieldsToEdit\r\n )\r\n if (\r\n response\r\n ) {\r\n setTimeout(\r\n () =>\r\n update(\r\n {\r\n type: 'refetch',\r\n }\r\n ),\r\n 100\r\n )\r\n }\r\n }\r\n }}\r\n style={{\r\n flexGrow: 1,\r\n }}\r\n size=\"xlarge\"\r\n >\r\n Gem\r\n \r\n
    \r\n \r\n ) : null}\r\n \r\n }\r\n \r\n\r\n \r\n \r\n {L_HTML(\r\n 'TRPROFIL_ORGANISERINGSWIDGET_TEKST_2',\r\n {\r\n ProcentDaekker: String(\r\n Math.round(\r\n percentageOfMembersCovered\r\n ) || 0\r\n ),\r\n AntalFoaMedlemmerBrugerDaekker:\r\n String(\r\n data.numberFoaMemberUserCovers\r\n ),\r\n TotalAntalKollegaerBrugerDaekker:\r\n String(\r\n percentageShowEdit\r\n ? percentageEditValue ||\r\n 0\r\n : data.totalNumberOfPeopleUserCovers\r\n ),\r\n }\r\n )}\r\n \r\n \r\n ),\r\n },\r\n ]}\r\n />\r\n \r\n \r\n setShowImitatorModal(false)}\r\n />\r\n \r\n )\r\n}\r\n\r\nexport { MyProfile }\r\n","import React, { FC, useEffect, useRef, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useForm } from 'react-hook-form'\r\nimport moment from 'moment'\r\nimport { useAtom } from 'jotai'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport {\r\n ContactLedger,\r\n Info,\r\n LockFill,\r\n EditFill,\r\n SuitcaseFill,\r\n} from '../../../assets/icons'\r\nimport { Circle } from '../../ui/Card'\r\nimport { CircleIcon } from '../../ui/Circle/Circle'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport { IUpdateMemberData, Member } from '../../../models/Member'\r\nimport { Input } from '../../ui/FormElememts/stories/Input.stories'\r\nimport { Position } from '../../../models/Position'\r\nimport { getWorkplacesAndPositions } from '../../../api/misc'\r\nimport { colors } from '../../../theme/palette'\r\nimport { DatePickerComponent } from '../../ui/FormElememts/DatePicker'\r\nimport {\r\n FormInput,\r\n FormInputNumber,\r\n FormTextArea,\r\n} from '../FormElements/FormInput'\r\nimport { FormControl } from '../../ui/FormElememts/FormControl'\r\nimport { FormHeader } from '../../ui/FormElememts/FormHeader'\r\nimport { baseButton } from '../../../theme/reuseables'\r\nimport { Overlay } from '../../ui/Sidebar'\r\nimport { Dialog } from '../../ui/Dialog/Dialog'\r\nimport { updateOwnMember } from '../../../api/members/members'\r\nimport { DrawerHeaderMemberInfo } from '../FormElements/DrawerHeader'\r\nimport { FormMessage } from '../../ui/FormElememts/FormMessage'\r\nimport { Workplace } from '../../../models/Workplace'\r\nimport { Contact } from '../../../models/Contact'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport { ISelectOptions, Select } from '../../ui/FormElememts/Select'\r\nimport { profileAtom } from '../../../api/profile/profile'\r\nimport { ImitatorNoAccessWarning } from '../Imitator/ImitatorNoAccessWarning'\r\n\r\ninterface EditProps {\r\n member: Member\r\n onUpdated?: (member: Member) => void\r\n}\r\n\r\ninterface IError {\r\n hasError: boolean\r\n message: JSX.Element\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n contentWrapper: {\r\n padding: '100px 20px 20px',\r\n overflow: 'auto',\r\n height: 'calc(100% - 100px)',\r\n paddingBottom: '80px',\r\n },\r\n accordionWrapper: {\r\n marginBottom: '20px',\r\n },\r\n select: {\r\n position: 'relative',\r\n height: '3.125rem',\r\n backgroundColor: colors.white,\r\n border: `1px solid ${colors.borderColor}`,\r\n borderRadius: '6px',\r\n width: '100%',\r\n fontSize: '1.125rem',\r\n paddingLeft: '.75rem',\r\n paddingRight: '.75rem',\r\n cursor: 'pointer',\r\n color: colors.black,\r\n },\r\n button: {\r\n ...baseButton,\r\n ...{\r\n padding: '2.5rem 0 0',\r\n cursor: 'pointer',\r\n },\r\n },\r\n bottom: {\r\n display: 'flex',\r\n position: 'absolute',\r\n bottom: '0',\r\n width: '100%',\r\n padding: '20px',\r\n left: '0',\r\n background: colors.white,\r\n zIndex: 4,\r\n borderTop: `1px solid ${colors.borderColor}`,\r\n '& > button': {\r\n flexGrow: 1,\r\n },\r\n '& > button:last-of-type': {\r\n marginRight: '0',\r\n },\r\n },\r\n})\r\n\r\nexport type RegistrationFormFields = {\r\n KontaktPrivat: {\r\n Fastnet: string\r\n Mobil: string\r\n Email: string\r\n }\r\n KontaktArbejde: {\r\n Telefon: string\r\n Email: string\r\n }\r\n Stillingsnummer: string\r\n Timetal: number\r\n OevrigeOplysninger: string\r\n Arbejdsstednummer: number\r\n}\r\n\r\nexport type CustomErrors = {\r\n Aendringsdato?: boolean\r\n}\r\n\r\nexport const EditMemberProfile: FC = ({ member, onUpdated }) => {\r\n const [error, setError] = useState(undefined)\r\n const { register, handleSubmit, formState, reset, setValue } =\r\n useForm()\r\n const classes = useStyles()\r\n const [positions, setPositions] = useState([])\r\n const [selectedDate, _setSelectedDate] = useState(undefined)\r\n const [isOpen, setIsOpen] = useState(false)\r\n const [showDialog, setShowDialog] = useState(false)\r\n const [isValid, setIsValid] = useState(false)\r\n const [isFetching, setIsFetching] = useState(false)\r\n const [workPlaces, setWorkplaces] = useState([])\r\n const [customErrors, setCustomErrors] = useState({})\r\n const [selectedPostion, setSelectedPosition] = useState(\r\n undefined\r\n )\r\n const [workContact, setWorkContact] = useState(\r\n undefined\r\n )\r\n const [showImitatorModal, setShowImitatorModal] = useState(false)\r\n const [authProfile] = useAtom(profileAtom)\r\n\r\n const [options, setOptions] = useState([])\r\n\r\n const [selectedWorkplace, setSelectedWorkplace] = useState<\r\n string | undefined\r\n >(undefined)\r\n\r\n const formRef = useRef(null)\r\n\r\n const setWP = (wp: string): void => {\r\n const found = member.workPlaces.find((wpp) => String(wpp.number) === wp)\r\n setSelectedWorkplace(wp)\r\n\r\n const wco = member.contactInfoList.find(\r\n (wc) =>\r\n wc.contactInfoType === 'Arbejde' &&\r\n String(wc.workPlacesContact.number) === wp\r\n )\r\n\r\n if (wco) {\r\n setValue('KontaktArbejde.Telefon', wco.telephone || undefined)\r\n setValue('KontaktArbejde.Email', wco.email || undefined)\r\n } else {\r\n setValue('KontaktArbejde.Telefon', undefined)\r\n setValue('KontaktArbejde.Email', undefined)\r\n }\r\n\r\n setSelectedPosition(found.postionNumber)\r\n\r\n if (found && found.positions) {\r\n setPositions(found.positions)\r\n }\r\n }\r\n\r\n const getPositions = async (): Promise => {\r\n const response = await getWorkplacesAndPositions()\r\n setWorkplaces(response.workPlaces)\r\n\r\n if (member) {\r\n const found = response.workPlaces.find(\r\n (wpp) => wpp.number === member.primaryWorkPlace.number\r\n )\r\n\r\n setSelectedWorkplace(String(member.primaryWorkPlace.number))\r\n\r\n const wco = member.contactInfoList.find(\r\n (wc) =>\r\n wc.contactInfoType === 'Arbejde' &&\r\n String(wc.workPlacesContact.number) ===\r\n String(member.primaryWorkPlace.number)\r\n )\r\n\r\n if (wco) {\r\n setValue('KontaktArbejde.Telefon', wco.telephone)\r\n setValue('KontaktArbejde.Email', wco.email)\r\n } else {\r\n setValue('KontaktArbejde.Telefon', undefined)\r\n setValue('KontaktArbejde.Email', undefined)\r\n }\r\n\r\n setSelectedPosition(member.primaryWorkPlace.postionNumber)\r\n\r\n if (found && found.positions) {\r\n setPositions(found.positions)\r\n\r\n const positionssss = found.positions.map((pos) => {\r\n return { label: String(pos.name), value: String(pos.id) }\r\n })\r\n\r\n setOptions(positionssss)\r\n }\r\n }\r\n }\r\n\r\n const init = (): void => {\r\n if (member.primaryWorkPlace) {\r\n setValue('Timetal', member.primaryWorkPlace.hoursPerWeek)\r\n }\r\n getPositions()\r\n\r\n if (formRef && formRef.current) {\r\n const input = formRef.current.querySelector('[name=\"Timetal\"]')\r\n if (input) {\r\n input.setAttribute('autofocus', '')\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n init()\r\n }, [member])\r\n\r\n const resetForm = (): void => {\r\n _setSelectedDate(undefined)\r\n setSelectedPosition(undefined)\r\n setWP(String(member.primaryWorkPlace.number))\r\n setCustomErrors({})\r\n reset()\r\n setValue('Timetal', member.primaryWorkPlace.hoursPerWeek)\r\n }\r\n\r\n const { isDirty, dirtyFields, errors } = formState\r\n\r\n const onSubmit = async (data: RegistrationFormFields): Promise => {\r\n if (authProfile.isImitator) {\r\n setShowImitatorModal(true)\r\n return\r\n }\r\n\r\n if (isDirty && selectedDate) {\r\n const workPlace = member.workPlaces.find(\r\n (wp) => wp.number === +selectedWorkplace\r\n )\r\n\r\n const fieldsToEdit: IUpdateMemberData = {\r\n Medlemsident: member.memberId,\r\n Aendringsdato: moment(selectedDate).format(\r\n 'YYYY-MM-DD HH:mm:ss'\r\n ),\r\n Arbejdsstednummer: workPlace.number,\r\n Stillingsnummer: selectedPostion,\r\n }\r\n\r\n if (dirtyFields.Timetal) {\r\n fieldsToEdit.Timetal = Number(\r\n String(data.Timetal).replace(',', '.')\r\n )\r\n }\r\n\r\n if (dirtyFields.KontaktPrivat) {\r\n fieldsToEdit.KontaktPrivat = {}\r\n if (dirtyFields.KontaktPrivat.Mobil) {\r\n fieldsToEdit.KontaktPrivat.Mobil = data.KontaktPrivat.Mobil\r\n }\r\n if (\r\n dirtyFields.KontaktPrivat.Email &&\r\n data.KontaktPrivat.Email !== ''\r\n ) {\r\n fieldsToEdit.KontaktPrivat.Email = data.KontaktPrivat.Email\r\n }\r\n }\r\n\r\n if (dirtyFields.KontaktArbejde) {\r\n fieldsToEdit.KontaktArbejde = {}\r\n if (dirtyFields.KontaktArbejde.Telefon) {\r\n fieldsToEdit.KontaktArbejde.Telefon =\r\n data.KontaktArbejde.Telefon\r\n // fieldsToEdit.KontaktArbejde.Telefon = '1212akkvll'\r\n }\r\n if (\r\n dirtyFields.KontaktArbejde.Email &&\r\n data.KontaktArbejde.Email !== ''\r\n ) {\r\n fieldsToEdit.KontaktArbejde.Email =\r\n data.KontaktArbejde.Email\r\n }\r\n }\r\n\r\n if (dirtyFields.OevrigeOplysninger) {\r\n fieldsToEdit.OevrigeOplysninger = data.OevrigeOplysninger\r\n }\r\n\r\n const response: any = await updateOwnMember(fieldsToEdit)\r\n\r\n if (response.error) {\r\n // setError({\r\n // hasError: true,\r\n // message: (\r\n //
    \r\n // {response.error.ModelState &&\r\n // Object.keys(response.error.ModelState).map(\r\n // (i) => (\r\n //

    \r\n // {response.error.ModelState[i]}\r\n //

    \r\n // )\r\n // )}\r\n //
    \r\n // ),\r\n // })\r\n // resetForm()\r\n } else if (response) {\r\n setIsOpen(false)\r\n setShowDialog(true)\r\n resetForm()\r\n\r\n if (onUpdated) {\r\n onUpdated(member)\r\n }\r\n }\r\n }\r\n }\r\n\r\n const checkIsValid = (): void => {\r\n if (isDirty && selectedDate) {\r\n setIsValid(true)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n checkIsValid()\r\n })\r\n\r\n return (\r\n <>\r\n setIsOpen(true)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n {L('MINEMEDLEMMER_DETALJE_REDIGERMEDLEM_KNAP')}\r\n \r\n \r\n {\r\n resetForm()\r\n setIsOpen(false)\r\n }}\r\n >\r\n \r\n \r\n \r\n {L_HTML('MINEMEDLEMMER_RETMEDLEMSDETALJE_TITEL')}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {L_HTML('GENERISK_FORM_ANSÆTTELSE_TITEL')}\r\n \r\n \r\n {member && selectedWorkplace && (\r\n \r\n {member.workPlaces.length > 1 ? (\r\n {\r\n setValue(\r\n 'Arbejdsstednummer',\r\n Number(e.target.value)\r\n )\r\n setWP(e.target.value)\r\n }}\r\n options={member.workPlaces.map((wp) => {\r\n const o = {\r\n label: wp.name,\r\n value: String(wp.number),\r\n }\r\n\r\n return o\r\n })}\r\n />\r\n ) : (\r\n \r\n wp.number === +selectedWorkplace\r\n ).name\r\n }\r\n />\r\n )}\r\n \r\n )}\r\n \r\n {options.length ? (\r\n {\r\n setValue(\r\n 'Stillingsnummer',\r\n String(e.target.value)\r\n )\r\n setSelectedPosition(e.target.value)\r\n }}\r\n options={options}\r\n placeholder={L(\r\n 'MINEMEDLEMMER_RETMEDLEMSDETALJE_STILLING_LABEL'\r\n )}\r\n />\r\n ) : null}\r\n \r\n \r\n \r\n (Number(String(value).replace(',', '.')) >=\r\n 0.5 &&\r\n Number(\r\n String(value).replace(',', '.')\r\n ) <= 99) ||\r\n L(\r\n 'GENERISK_FORM_TIMETAL_VALIDERINGS_TEKST'\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 {L('GENERISK_FORM_KONTAKT_TITEL')}\r\n \r\n \r\n \r\n \r\n value.length > 7 ||\r\n !value ||\r\n L('GENERISK_FORM_MOBIL_VALIDERINGS_TEKST'),\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n (value && value.length > 7) ||\r\n !value ||\r\n L('GENERISK_FORM_MOBIL_VALIDERINGS_TEKST'),\r\n }}\r\n />\r\n \r\n \r\n \r\n {/* \r\n setSelectedWorkmail(e.target.value)\r\n }\r\n /> */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {L_HTML(\r\n 'GENERISK_FORM_YDERLIGERE-OPLYSNINGER_TITEL'\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n {\r\n setIsOpen(false)\r\n resetForm()\r\n }}\r\n type=\"secondary\"\r\n size=\"large\"\r\n >\r\n {L('MINEMEDLEMMER_RETMEDLEMSDETALJE_LUK_KNAP')}\r\n \r\n \r\n {L('MINEMEDLEMMER_RETMEDLEMSDETALJE_GEM_KNAP')}\r\n \r\n
    \r\n\r\n
    \r\n \r\n \r\n {showDialog ? (\r\n }\r\n >\r\n \r\n {L_HTML(\r\n 'MINEMEDLEMMER_RETMEDLEMSDETALJE_INDSENDT-FEEDBACK_TITEL'\r\n )}\r\n \r\n \r\n {L_HTML(\r\n 'MINEMEDLEMMER_RETMEDLEMSDETALJE_INDSENDT-FEEDBACK_TEKST'\r\n )}\r\n \r\n \r\n \r\n ) : null}\r\n setShowImitatorModal(false)}\r\n />\r\n {/* {error && error.hasError ? (\r\n }\r\n >\r\n \r\n Fejl\r\n \r\n \r\n {error.message}\r\n \r\n \r\n \r\n ) : null} */}\r\n \r\n )\r\n}\r\n","import React, { FC, useEffect, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useForm } from 'react-hook-form'\r\nimport moment from 'moment'\r\nimport { useAtom } from 'jotai'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { SendFill, SuitcaseFill } from '../../../assets/icons'\r\nimport { Circle } from '../../ui/Card'\r\nimport { CircleIcon } from '../../ui/Circle/Circle'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport { IUpdateMemberData, Member } from '../../../models/Member'\r\nimport { getWorkplacesAndPositions } from '../../../api/misc'\r\nimport { colors } from '../../../theme/palette'\r\nimport { DatePickerComponent } from '../../ui/FormElememts/DatePicker'\r\nimport { FormControl } from '../../ui/FormElememts/FormControl'\r\nimport { FormHeader } from '../../ui/FormElememts/FormHeader'\r\nimport { baseButton } from '../../../theme/reuseables'\r\nimport { Overlay } from '../../ui/Sidebar'\r\nimport { Dialog } from '../../ui/Dialog/Dialog'\r\nimport { cancelMemberFromWorkplace } from '../../../api/members/members'\r\nimport { Workplace } from '../../../models/Workplace'\r\nimport { DrawerHeaderMemberInfo } from '../FormElements/DrawerHeader'\r\nimport { FormTextArea } from '../FormElements/FormInput'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport Input from '../../ui/FormElememts/Input'\r\nimport { Select } from '../../ui/FormElememts/Select'\r\nimport { ImitatorNoAccessWarning } from '../Imitator/ImitatorNoAccessWarning'\r\nimport { profileAtom } from '../../../api/profile/profile'\r\n\r\ninterface EditProps {\r\n member: Member\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n contentWrapper: {\r\n padding: '100px 20px 20px',\r\n overflow: 'auto',\r\n height: 'calc(100% - 100px)',\r\n paddingBottom: '80px',\r\n },\r\n accordionWrapper: {\r\n marginBottom: '20px',\r\n },\r\n select: {\r\n position: 'relative',\r\n height: '3.125rem',\r\n backgroundColor: colors.white,\r\n border: `1px solid ${colors.borderColor}`,\r\n borderRadius: '6px',\r\n width: '100%',\r\n fontSize: '1.125rem',\r\n paddingLeft: '.75rem',\r\n paddingRight: '.75rem',\r\n cursor: 'pointer',\r\n color: colors.labelColor,\r\n },\r\n button: {\r\n ...baseButton,\r\n ...{\r\n cursor: 'pointer',\r\n },\r\n },\r\n bottom: {\r\n display: 'flex',\r\n position: 'absolute',\r\n bottom: '0',\r\n width: '100%',\r\n padding: '20px',\r\n left: '0',\r\n background: colors.white,\r\n zIndex: 4,\r\n borderTop: `1px solid ${colors.borderColor}`,\r\n '& > button': {\r\n flexGrow: 1,\r\n },\r\n '& > button:last-of-type': {\r\n marginRight: '0',\r\n },\r\n },\r\n})\r\n\r\nexport type RegistrationFormFields = {\r\n OevrigeOplysninger?: string\r\n}\r\n\r\nexport const CancelWorkplace: FC = ({ member }) => {\r\n const { register, reset, formState, handleSubmit } =\r\n useForm()\r\n const classes = useStyles()\r\n const [, setWorkplaces] = useState([])\r\n const [selectedDate, _setSelectedDate] = useState(null)\r\n const [isOpen, setIsOpen] = useState(false)\r\n const [showDialog, setShowDialog] = useState(false)\r\n const [isValid, setIsValid] = useState(false)\r\n const [authProfile] = useAtom(profileAtom)\r\n const [showImitatorModal, setShowImitatorModal] = useState(false)\r\n // const [values, setValues] = useState({\r\n // OevrigeOplysninger: undefined,\r\n // })\r\n const [addInfo, setAddInfo] = useState(undefined)\r\n const [selectedWorkplace, setSelectedWorkplace] = useState<\r\n string | undefined\r\n >(undefined)\r\n\r\n const getPositions = async (): Promise => {\r\n // if (member.workPlaces.length && member.workPlaces.length === 1) {\r\n // setSelectedWorkplace(String(member.workPlaces[0].number))\r\n // }\r\n\r\n const response = await getWorkplacesAndPositions()\r\n\r\n let workplaces = response.workPlaces\r\n\r\n workplaces = workplaces.filter((place) => {\r\n return member.workPlaces.some(\r\n (work) => work.number !== place.number\r\n )\r\n })\r\n setWorkplaces(workplaces)\r\n }\r\n\r\n useEffect(() => {\r\n getPositions()\r\n\r\n if (member.workPlaces.length === 1) {\r\n setSelectedWorkplace(String(member.primaryWorkPlace.number))\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n let valid = false\r\n\r\n valid = !!selectedDate && !!selectedWorkplace\r\n setIsValid(valid)\r\n }, [selectedWorkplace, selectedDate])\r\n\r\n const resetForm = (): void => {\r\n if (member.workPlaces.length && member.workPlaces.length === 1) {\r\n setSelectedWorkplace(String(member.workPlaces[0].number))\r\n } else {\r\n setSelectedWorkplace(undefined)\r\n }\r\n\r\n _setSelectedDate(null)\r\n setAddInfo(undefined)\r\n reset()\r\n }\r\n\r\n const { isDirty, dirtyFields } = formState\r\n\r\n const submitHandler = async (\r\n data: RegistrationFormFields\r\n ): Promise => {\r\n if (authProfile.isImitator) {\r\n setShowImitatorModal(true)\r\n return Promise.resolve('OK')\r\n }\r\n const fieldsToEdit: IUpdateMemberData = {\r\n Medlemsident: member.memberId,\r\n Aendringsdato: moment(selectedDate).format('YYYY-MM-DD HH:mm:ss'),\r\n Arbejdsstednummer: Number(selectedWorkplace),\r\n }\r\n\r\n if (dirtyFields.OevrigeOplysninger) {\r\n fieldsToEdit.OevrigeOplysninger = data.OevrigeOplysninger\r\n }\r\n\r\n const response = await cancelMemberFromWorkplace(fieldsToEdit)\r\n\r\n if (response) {\r\n setIsOpen(false)\r\n setShowDialog(true)\r\n resetForm()\r\n }\r\n\r\n return Promise.resolve('OK')\r\n }\r\n\r\n return (\r\n <>\r\n \r\n {\r\n setIsOpen(false)\r\n resetForm()\r\n }}\r\n >\r\n \r\n \r\n \r\n {L_HTML(\r\n 'MINEMEDLEMMER_DETALJE_STOPPET-PÅ-ARBEDJSPLADS_TITEL'\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {L_HTML('GENERISK_FORM_ANSÆTTELSE_TITEL')}\r\n \r\n \r\n {/* \r\n {\r\n setSelectedWorkplace(e.target.value)\r\n }}\r\n >\r\n \r\n {member.workPlaces.map((work) => {\r\n return (\r\n \r\n )\r\n })}\r\n \r\n */}\r\n {member && (\r\n \r\n {member.workPlaces.length > 1 ? (\r\n {\r\n setSelectedWorkplace(e.target.value)\r\n }}\r\n options={member.workPlaces.map((wp) => {\r\n const o = {\r\n label: wp.name,\r\n value: String(wp.number),\r\n }\r\n\r\n return o\r\n })}\r\n />\r\n ) : (\r\n \r\n )}\r\n \r\n )}\r\n \r\n {\r\n _setSelectedDate(e)\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n
    \r\n {\r\n setIsOpen(false)\r\n resetForm()\r\n }}\r\n type=\"secondary\"\r\n size=\"large\"\r\n >\r\n Annuller\r\n \r\n \r\n
    \r\n\r\n
    \r\n \r\n \r\n {showDialog ? (\r\n }\r\n >\r\n \r\n {L_HTML('STOPPET-PÅ-ARBEJDSPLADS_POPUP_OVERSKRIFT')}\r\n \r\n \r\n {L_HTML('STOPPET-PÅ-ARBEJDSPLADS_POPUP_TEXT')}\r\n \r\n \r\n \r\n ) : null}\r\n setShowImitatorModal(false)}\r\n />\r\n \r\n )\r\n}\r\n","import React, { FC, useEffect, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useForm } from 'react-hook-form'\r\nimport moment from 'moment'\r\nimport { useAtom } from 'jotai'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { SendFill, Info, SuitcaseFill } from '../../../assets/icons'\r\nimport { Circle } from '../../ui/Card'\r\nimport { CircleIcon } from '../../ui/Circle/Circle'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport { IUpdateMemberData, Member } from '../../../models/Member'\r\nimport { Position } from '../../../models/Position'\r\nimport { getWorkplacesAndPositions } from '../../../api/misc'\r\nimport { colors } from '../../../theme/palette'\r\nimport { DatePickerComponent } from '../../ui/FormElememts/DatePicker'\r\nimport { FormControl } from '../../ui/FormElememts/FormControl'\r\nimport { FormHeader } from '../../ui/FormElememts/FormHeader'\r\nimport { baseButton } from '../../../theme/reuseables'\r\nimport { Overlay } from '../../ui/Sidebar'\r\nimport { Dialog } from '../../ui/Dialog/Dialog'\r\nimport { addMemberToWorkplace } from '../../../api/members/members'\r\nimport { Workplace } from '../../../models/Workplace'\r\nimport { DrawerHeaderMemberInfo } from '../FormElements/DrawerHeader'\r\nimport {\r\n FormInputNumber,\r\n FormTextArea,\r\n FormSelect,\r\n} from '../FormElements/FormInput'\r\nimport { FormMessage } from '../../ui/FormElememts/FormMessage'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport { Select } from '../../ui/FormElememts/Select'\r\nimport Checkbox from '../../ui/FormElememts/Checkbox'\r\nimport { ImitatorNoAccessWarning } from '../Imitator/ImitatorNoAccessWarning'\r\nimport { profileAtom } from '../../../api/profile/profile'\r\n\r\ninterface EditProps {\r\n member: Member\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n contentWrapper: {\r\n padding: '100px 20px 20px',\r\n overflow: 'auto',\r\n height: 'calc(100% - 100px)',\r\n paddingBottom: '80px',\r\n },\r\n accordionWrapper: {\r\n marginBottom: '20px',\r\n },\r\n select: {\r\n position: 'relative',\r\n height: '3.125rem',\r\n backgroundColor: colors.white,\r\n border: `1px solid ${colors.borderColor}`,\r\n borderRadius: '6px',\r\n width: '100%',\r\n fontSize: '1.125rem',\r\n paddingLeft: '.75rem',\r\n paddingRight: '.75rem',\r\n cursor: 'pointer',\r\n color: colors.labelColor,\r\n },\r\n button: {\r\n ...baseButton,\r\n ...{\r\n cursor: 'pointer',\r\n },\r\n },\r\n bottom: {\r\n display: 'flex',\r\n position: 'absolute',\r\n bottom: '0',\r\n width: '100%',\r\n padding: '20px',\r\n left: '0',\r\n background: colors.white,\r\n zIndex: 4,\r\n borderTop: `1px solid ${colors.borderColor}`,\r\n '& > button': {\r\n flexGrow: 1,\r\n },\r\n '& > button:last-of-type': {\r\n marginRight: '0',\r\n },\r\n },\r\n})\r\n\r\nexport type RegistrationFormFields = {\r\n Timetal?: string\r\n OevrigeOplysninger?: string\r\n Arbejdsstednummer?: string\r\n Stillingsnummer?: string\r\n}\r\n\r\nexport type CustomErrors = {\r\n Aendringsdato?: boolean\r\n}\r\n\r\nexport const AddMemberToWorkplace: FC = ({ member }) => {\r\n const { register, formState, reset, handleSubmit, setValue } =\r\n useForm()\r\n const classes = useStyles()\r\n const [authProfile] = useAtom(profileAtom)\r\n const [showImitatorModal, setShowImitatorModal] = useState(false)\r\n const [workPlaces, setWorkplaces] = useState([])\r\n const [positions, setPositions] = useState([])\r\n const [selectedDate, _setSelectedDate] = useState(null)\r\n const [isOpen, setIsOpen] = useState(false)\r\n const [showDialog, setShowDialog] = useState(false)\r\n const [isValid, setIsValid] = useState(false)\r\n const [onCallSubstitute, setOnCallSubstitute] = useState(false)\r\n const [customErrors, setCustomErrors] = useState({})\r\n const [values, setValues] = useState({\r\n Timetal: undefined,\r\n OevrigeOplysninger: undefined,\r\n })\r\n const [selectedPostion, setSelectedPosition] = useState(\r\n undefined\r\n )\r\n const [selectedWorkplace, setSelectedWorkplace] = useState<\r\n string | undefined\r\n >(undefined)\r\n\r\n const getPositions = async (): Promise => {\r\n const response = await getWorkplacesAndPositions()\r\n\r\n console.log(response)\r\n console.log(member)\r\n\r\n let workplaces = response.workPlaces\r\n\r\n workplaces = workplaces.filter((place) => {\r\n return member.workPlaces.some(\r\n (work) => work.number !== place.number\r\n )\r\n })\r\n\r\n setWorkplaces(workplaces)\r\n }\r\n\r\n useEffect(() => {\r\n getPositions()\r\n }, [])\r\n\r\n useEffect(() => {\r\n let valid = false\r\n\r\n valid =\r\n !!selectedDate &&\r\n !!selectedPostion &&\r\n selectedPostion !== 'default' &&\r\n !!selectedWorkplace\r\n setIsValid(valid)\r\n }, [values, selectedPostion, selectedWorkplace, selectedDate, formState])\r\n\r\n const setWP = (wp: string): void => {\r\n const found = workPlaces.find((wpp) => String(wpp.number) === wp)\r\n\r\n setSelectedWorkplace(wp)\r\n setSelectedPosition('default')\r\n\r\n if (found && found.positions) {\r\n setPositions(found.positions)\r\n }\r\n }\r\n\r\n const resetForm = (): void => {\r\n _setSelectedDate(null)\r\n setSelectedWorkplace('default')\r\n setSelectedPosition('default')\r\n setCustomErrors({})\r\n reset()\r\n }\r\n\r\n const { dirtyFields, errors } = formState\r\n\r\n const submitHandler = async (\r\n data: RegistrationFormFields\r\n ): Promise => {\r\n if (authProfile.isImitator) {\r\n setShowImitatorModal(true)\r\n return Promise.resolve('OK')\r\n }\r\n const fieldsToEdit: IUpdateMemberData = {\r\n Medlemsident: member.memberId,\r\n Aendringsdato: moment(selectedDate).format('YYYY-MM-DD HH:mm:ss'),\r\n Arbejdsstednummer: Number(selectedWorkplace),\r\n Stillingsnummer: selectedPostion || String(member.positions[0].id),\r\n }\r\n if (dirtyFields.Timetal) {\r\n fieldsToEdit.Timetal = Number(\r\n String(data.Timetal).replace(',', '.')\r\n )\r\n }\r\n\r\n if (dirtyFields.OevrigeOplysninger) {\r\n fieldsToEdit.OevrigeOplysninger = data.OevrigeOplysninger\r\n }\r\n\r\n if (onCallSubstitute) {\r\n if (fieldsToEdit.OevrigeOplysninger) {\r\n fieldsToEdit.OevrigeOplysninger = `${fieldsToEdit.OevrigeOplysninger} - Tilkaldevikar`\r\n } else {\r\n fieldsToEdit.OevrigeOplysninger = 'Tilkaldevikar'\r\n }\r\n }\r\n\r\n const response = await addMemberToWorkplace(fieldsToEdit)\r\n\r\n if (response) {\r\n setIsOpen(false)\r\n setShowDialog(true)\r\n resetForm()\r\n }\r\n\r\n return Promise.resolve('OK')\r\n }\r\n\r\n return (\r\n <>\r\n \r\n {\r\n setIsOpen(false)\r\n resetForm()\r\n }}\r\n >\r\n \r\n \r\n \r\n {L_HTML(\r\n 'MINEMEDLEMMER_TILFØJ-ARBEJDSSTED_OVERSKRIFT_LABEL'\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {L_HTML('GENERISK_FORM_ANSÆTTELSE_TITEL')}\r\n \r\n \r\n \r\n {\r\n setWP(e.target.value)\r\n setValue(\r\n 'Arbejdsstednummer',\r\n e.target.value\r\n )\r\n },\r\n }}\r\n isOpen={isOpen}\r\n placeholder=\"Arbejdssted *\"\r\n onChange={(e) => {\r\n setWP(e.target.value)\r\n setValue('Arbejdsstednummer', e.target.value)\r\n }}\r\n options={workPlaces.map((wp) => {\r\n const o = {\r\n label: wp.name,\r\n value: String(wp.number),\r\n }\r\n\r\n return o\r\n })}\r\n />\r\n \r\n \r\n \r\n {\r\n setSelectedPosition(e.target.value)\r\n setValue('Stillingsnummer', e.target.value)\r\n },\r\n }}\r\n isOpen={isOpen}\r\n disabled={!selectedWorkplace}\r\n placeholder=\"Stilling *\"\r\n options={positions.map((pos) => {\r\n const o = {\r\n label: pos.name,\r\n value: String(pos.id),\r\n }\r\n\r\n return o\r\n })}\r\n />\r\n \r\n \r\n \r\n \r\n (Number(String(value).replace(',', '.')) >=\r\n 0.5 &&\r\n Number(\r\n String(value).replace(',', '.')\r\n ) <= 99) ||\r\n L(\r\n 'GENERISK_FORM_TIMETAL_VALIDERINGS_TEKST'\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 {L_HTML(\r\n 'GENERISK_FORM_YDERLIGERE-OPLYSNINGER_TITEL'\r\n )}\r\n \r\n \r\n \r\n {\r\n _setSelectedDate(e)\r\n setCustomErrors({})\r\n }}\r\n hasError={!!customErrors?.Aendringsdato}\r\n minDate={moment().subtract(1, 'year').toDate()}\r\n maxDate={moment().add(1, 'year').toDate()}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n setOnCallSubstitute(!onCallSubstitute)\r\n }}\r\n />\r\n \r\n
    \r\n {\r\n setIsOpen(false)\r\n resetForm()\r\n }}\r\n type=\"secondary\"\r\n size=\"large\"\r\n >\r\n Annuller\r\n \r\n {\r\n if (!selectedDate) {\r\n setCustomErrors({\r\n Aendringsdato: true,\r\n })\r\n }\r\n }}\r\n >\r\n {L_HTML(\r\n 'MINEMEDLEMMER_TILFØJ-ARBEJDSSTED_TILFØJ_LABEL'\r\n )}\r\n \r\n
    \r\n\r\n
    \r\n \r\n \r\n {showDialog ? (\r\n }\r\n >\r\n \r\n {L_HTML(\r\n 'TILFØJ-MEDLEM-TIL-ARBEJDSPLADS_POPUP_OVERSKRIFT'\r\n )}\r\n \r\n \r\n {L_HTML('TILFØJ-MEDLEM-TIL-ARBEJDSPLADS_POPUP_TEXT')}\r\n \r\n \r\n \r\n ) : null}\r\n setShowImitatorModal(false)}\r\n />\r\n \r\n )\r\n}\r\n","import React from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { Link } from 'react-router-dom'\r\nimport { ChevronRight } from '../../../assets/icons'\r\nimport { colors } from '../../../theme/palette'\r\n\r\ninterface BackLinkInterface {\r\n to: string\r\n label: string\r\n}\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n BackLink: {\r\n padding: '20px 0',\r\n display: 'flex',\r\n fontSize: '1.125rem',\r\n color: colors.black,\r\n fontWeight: '700',\r\n '&:hover': {\r\n color: colors.labelColor,\r\n '& svg': {\r\n color: colors.labelColor,\r\n },\r\n },\r\n },\r\n span: {\r\n display: 'block',\r\n marginLeft: '12px',\r\n },\r\n}))\r\n\r\nconst BackLink: React.FC = ({ to, label }) => {\r\n const classes = useStyles()\r\n\r\n return (\r\n \r\n \r\n {label}\r\n \r\n )\r\n}\r\n\r\nexport { BackLink }\r\n","import React, { FC, useEffect, useState } from 'react'\r\nimport { useAtom } from 'jotai'\r\nimport { deleteNote, getMemberNotes } from '../../../api/notes'\r\nimport { Member } from '../../../models/Member'\r\nimport { Note, mapNotes } from '../../../models/Note'\r\nimport { Overlay } from '../../ui/Sidebar'\r\nimport { DrawerHeaderMemberInfo } from '../FormElements/DrawerHeader'\r\nimport { AddNewNote } from './AddNewNote'\r\nimport { EditMemberNoteButton } from './EditMemberNoteButton'\r\nimport { EditNote } from './EditNote'\r\nimport { NoteOverviewSidebar } from './NoteOverviewSidebar'\r\nimport { profileAtom } from '../../../api/profile/profile'\r\n\r\ntype ViewStates = 'default' | 'create' | 'edit' | 'delete'\r\n\r\ninterface EditMemberNotesProps {\r\n member: Member\r\n}\r\n\r\nconst EditMemberNotes: FC = ({ member }) => {\r\n const [notes, setNotes] = useState([])\r\n const [isOpen, setIsOpen] = useState(false)\r\n const [viewState, setViewState] = useState('default')\r\n const [loading, setLoading] = useState(true)\r\n const [editNote, setEditNote] = useState(undefined)\r\n const [authProfile] = useAtom(profileAtom)\r\n\r\n const init = (): void => {\r\n async function fetchData(): Promise {\r\n if (authProfile.isImitator) {\r\n setLoading(false)\r\n } else {\r\n try {\r\n const response = await getMemberNotes(\r\n member.memberId,\r\n 'MedlemIdent'\r\n )\r\n const notesMapped = mapNotes(response.Noter)\r\n\r\n setNotes(notesMapped)\r\n\r\n setLoading(false)\r\n } catch {\r\n setLoading(false)\r\n }\r\n }\r\n }\r\n\r\n fetchData()\r\n }\r\n\r\n const onClickDelete = async (note: Note): Promise => {\r\n setViewState('default')\r\n const response = await deleteNote(note.id)\r\n if (response) {\r\n setViewState('default')\r\n if (notes.length === 1) {\r\n setIsOpen(false)\r\n }\r\n init()\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n init()\r\n }, [])\r\n\r\n if (loading) return null\r\n\r\n return (\r\n <>\r\n
    \r\n {\r\n setIsOpen(true)\r\n setViewState('create')\r\n }}\r\n onClickView={() => {\r\n setIsOpen(true)\r\n setViewState('default')\r\n }}\r\n notes={notes}\r\n />\r\n
    \r\n\r\n {\r\n setIsOpen(false)\r\n }}\r\n >\r\n \r\n\r\n {viewState === 'create' ? (\r\n 0}\r\n onClickCancel={() => {\r\n setViewState('default')\r\n if (notes.length === 0) {\r\n setIsOpen(false)\r\n }\r\n }}\r\n onUpdated={() => {\r\n setViewState('default')\r\n init()\r\n }}\r\n />\r\n ) : null}\r\n\r\n {viewState === 'edit' && editNote ? (\r\n setViewState('default')}\r\n onUpdated={() => {\r\n init()\r\n setViewState('default')\r\n }}\r\n />\r\n ) : null}\r\n\r\n {viewState === 'default' ? (\r\n {\r\n setIsOpen(true)\r\n setEditNote(note)\r\n setViewState('edit')\r\n }}\r\n onClickDelete={onClickDelete}\r\n onClickCreate={() => setViewState('create')}\r\n />\r\n ) : null}\r\n \r\n \r\n )\r\n}\r\n\r\nexport { EditMemberNotes }\r\n","import React, { useEffect, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useParams, useSearchParams } from 'react-router-dom'\r\nimport { AxiosResponse } from 'axios'\r\nimport { useAtom } from 'jotai'\r\nimport { getInitials } from '../../../utils/initials'\r\nimport { colors } from '../../../theme/palette'\r\nimport { CircleText, CircleIcon2 } from '../../ui/Circle/Circle'\r\nimport { CardColumn, Row } from '../../ui/Card/CardColumn'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport {\r\n SuitcaseFill,\r\n Foa,\r\n PersonalInfo,\r\n ContactLedger,\r\n Envelop,\r\n} from '../../../assets/icons'\r\nimport { CardColumnContainer } from '../../ui/Card/CardColumnContainer'\r\nimport { getOwnMember } from '../../../api/members/members'\r\nimport { Member } from '../../../models/Member'\r\nimport { Loader } from '../../ui/Loaders/Loader'\r\nimport { buildRow } from '../MyProfile'\r\nimport { formatDate } from '../../../utils/format'\r\nimport { EditMemberProfile } from '../../modules/EditMemberProfile'\r\nimport { CancelWorkplace } from '../../modules/CancelWorkplace'\r\nimport { AddMemberToWorkplace } from '../../modules/AddMemberToWorkplace'\r\nimport { baseButton } from '../../../theme/reuseables'\r\nimport { GmapsLink } from '../../ui/GmapsLink/GmapsLink'\r\nimport { Workplace } from '../../../models/Workplace'\r\nimport { Favorite } from '../../ui/Favorite'\r\nimport { BackLink } from '../../ui/BackLink'\r\nimport { L } from '../../providers/Lokalise'\r\nimport { EditMemberNotes } from '../../modules/notes/EditMemberNotes'\r\nimport { AuthProfile, profileAtom } from '../../../api/profile/profile'\r\nimport { WorkplaceDropdown } from '../../modules/WorkplaceDropdown'\r\nimport breakpoints from '../../../theme/breakpoints'\r\nimport { Spinner } from '../../ui/Loaders/Spinner'\r\nimport { Contact } from '../../../models/Contact'\r\nimport { removeFavorite, setFavorite } from '../../../api/favorite'\r\nimport { ImitatorNoAccessWarning } from '../../modules/Imitator/ImitatorNoAccessWarning'\r\n\r\nexport const buildEmailRow = (\r\n email: string | undefined,\r\n label: string,\r\n isImitator?: boolean,\r\n showModal?: boolean,\r\n setShowImitatorModal?: (show: boolean) => void\r\n): Row => {\r\n return {\r\n label: '',\r\n value: '',\r\n useContent: true,\r\n content: email ? (\r\n <>\r\n {\r\n if (isImitator) {\r\n e.preventDefault()\r\n setShowImitatorModal(true)\r\n }\r\n }}\r\n style={{\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'space-between',\r\n }}\r\n >\r\n
    \r\n \r\n {label}\r\n \r\n \r\n {email || '-'}\r\n \r\n
    \r\n \r\n \r\n setShowImitatorModal(false)}\r\n />\r\n \r\n ) : (\r\n <>\r\n
    \r\n \r\n {label}\r\n \r\n \r\n {email || '-'}\r\n \r\n
    \r\n \r\n \r\n ),\r\n }\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n container: {\r\n color: colors.black,\r\n padding: '0 1.5rem',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n gridTemplateColumns: '1fr 1fr 1fr',\r\n padding: '0 0 5rem',\r\n },\r\n },\r\n },\r\n profileHeader: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n padding: '1.5rem 0',\r\n },\r\n nameContainer: {\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-start',\r\n },\r\n headerArea: {\r\n display: 'flex',\r\n padding: '.5rem 0',\r\n minHeight: '5rem',\r\n },\r\n header: {\r\n display: 'grid',\r\n gridTemplateColumns: '2fr 1fr',\r\n gap: '1.5rem',\r\n },\r\n headerActions: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n edit: {\r\n display: 'flex',\r\n flexBasis: '50%',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n },\r\n section: {\r\n marginBottom: '3rem',\r\n\r\n '& > hr': {\r\n opacity: '0.2',\r\n margin: '1.25rem 0',\r\n },\r\n },\r\n button: {\r\n ...baseButton,\r\n ...{\r\n cursor: 'pointer',\r\n },\r\n },\r\n buttons: {\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexDirection: 'column',\r\n '& button': {\r\n margin: '10px 0',\r\n width: '100%',\r\n },\r\n },\r\n editButton: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n },\r\n iconWrapper: {\r\n position: 'relative',\r\n width: '90px',\r\n marginRight: '30px',\r\n },\r\n notes: {\r\n marginTop: 'auto',\r\n },\r\n})\r\n\r\nconst MemberProfile: React.FC = () => {\r\n const classes = useStyles()\r\n const params = useParams()\r\n const [data, _setData] = useState(undefined)\r\n const [showImitatorModal, setShowImitatorModal] = useState(false)\r\n const [backurl, setbackUrl] = useState('/')\r\n const [selectedWorkplace, setSelectedWorkplace] = useState<\r\n Workplace | undefined\r\n >(undefined)\r\n const [searchParams] = useSearchParams()\r\n const [authProfile] = useAtom(profileAtom)\r\n\r\n const init = async (id: string): Promise => {\r\n const response = await getOwnMember(id)\r\n const { data: profileData } = response\r\n const profile = Member.build(profileData)\r\n _setData(profile)\r\n return response\r\n }\r\n\r\n useEffect(() => {\r\n const { id } = params\r\n\r\n if (id) {\r\n init(id)\r\n\r\n if (searchParams.get('backUrl')) {\r\n setbackUrl(searchParams.get('backUrl'))\r\n }\r\n }\r\n }, [params, searchParams])\r\n\r\n useEffect(() => {\r\n if (data && data.primaryWorkPlace && !selectedWorkplace) {\r\n setSelectedWorkplace(data.primaryWorkPlace)\r\n }\r\n }, [data])\r\n\r\n const getPositionName = (): string => {\r\n const id = data.primaryWorkPlace.postionNumber\r\n const group = data.positions.find((pos) => +pos.id === +id)\r\n return group.name || '-'\r\n }\r\n\r\n const getGroupName = (): string => {\r\n const id = data.primaryWorkPlace.postionNumber\r\n const group = data.positions.find((pos) => +pos.id === +id)\r\n return group.group.name || '-'\r\n }\r\n\r\n const getPersonalInfoRows = (member: Member): Row[] => {\r\n return [\r\n buildRow(\r\n formatDate(member.birthday),\r\n L('GENERISK_FORM_FØDSELDAG_LABEL')\r\n ),\r\n buildRow(\r\n member.age ? `${member.age} år` : '-',\r\n L('GENERISK_FORM_ALDER_LABEL')\r\n ),\r\n ]\r\n }\r\n\r\n const getWorkInfo = (workplace: Workplace): Row[] => {\r\n let customedGmapsUrl = ''\r\n if (workplace && workplace.address) {\r\n const {\r\n addressLine1,\r\n addressLine2,\r\n addressLine3,\r\n postDistrict,\r\n postNumber,\r\n } = workplace?.address\r\n\r\n customedGmapsUrl = `https://www.google.com/maps/search/?api=1&query=${addressLine1}+${addressLine2}+${addressLine3}%2C+${postNumber}+${postDistrict}`\r\n }\r\n\r\n const rows: Row[] = []\r\n\r\n if (customedGmapsUrl !== '') {\r\n rows.push({\r\n label: '',\r\n value: '',\r\n useContent: !!customedGmapsUrl,\r\n content: !!customedGmapsUrl && (\r\n \r\n \r\n Arbejdssted\r\n \r\n \r\n {workplace.name}\r\n \r\n \r\n
    \r\n ),\r\n })\r\n } else {\r\n rows.push(buildRow(workplace?.name, 'Arbejdssted'))\r\n }\r\n\r\n const defaults = [\r\n ...rows,\r\n ...[\r\n buildRow(getPositionName(), L('GENERISK_FORM_STILLING_LABEL')),\r\n buildRow(\r\n workplace?.hoursPerWeek,\r\n L('GENERISK_FORM_TIMETAL_LABEL')\r\n ),\r\n buildRow(getGroupName(), L('GENERISK_FORM_FAGGRUPPE_LABEL')),\r\n ],\r\n ]\r\n defaults.push({\r\n label: '',\r\n value: '',\r\n useContent: true,\r\n content: (\r\n
    \r\n {data ? : null}\r\n {data ? : null}\r\n
    \r\n ),\r\n })\r\n\r\n return defaults\r\n }\r\n\r\n const getContactInfoRows = (member: Member): Row[] => {\r\n let workContact: Contact | undefined\r\n\r\n if (selectedWorkplace) {\r\n workContact = member.contactInfoList.find(\r\n (wc) =>\r\n wc.contactInfoType === 'Arbejde' &&\r\n wc.workPlacesContact.number === selectedWorkplace.number\r\n )\r\n }\r\n\r\n return [\r\n buildRow(\r\n member.privateContact?.mobileShow ||\r\n (member.privateContact?.isTelefonPrivate\r\n ? 'Hemmeligt nummer'\r\n : '-'),\r\n 'Privat mobil'\r\n ),\r\n buildEmailRow(\r\n member.privateContact?.email,\r\n L('GENERISK_FORM_PRIVAT-EMAIL_LABEL'),\r\n authProfile.isImitator,\r\n showImitatorModal,\r\n setShowImitatorModal\r\n ),\r\n buildRow(\r\n workContact?.telephone ||\r\n (workContact?.isTelefonPrivate ? 'Hemmeligt nummer' : '-'),\r\n L('GENERISK_FORM_ARBEDJSPLADS-MOBIL_LABEL')\r\n ),\r\n buildEmailRow(\r\n workContact?.email,\r\n L('GENERISK_FORM_ARBEJDSMAIL_LABEL'),\r\n authProfile.isImitator,\r\n showImitatorModal,\r\n setShowImitatorModal\r\n ),\r\n ]\r\n }\r\n\r\n const buildTOR = (member: Member): JSX.Element => {\r\n return (\r\n
    \r\n \r\n {L('GENERISK_FORM_TILLIDSHVERV_LABEL')}\r\n \r\n <>\r\n {member.typeOfRepresentatives.map((type) => {\r\n return (\r\n \r\n {type.name}\r\n \r\n )\r\n })}\r\n \r\n
    \r\n )\r\n }\r\n\r\n const getMembershipInfoRows = (member: Member): Row[] => {\r\n return [\r\n buildRow(\r\n member.memberNumber,\r\n L('GENERISK_FORM_MEDLEMSNUMMER_LABEL')\r\n ),\r\n buildRow(\r\n member.membershipInfo.name,\r\n L('GENERISK_FORM_FOAAFDELING_LABEL')\r\n ),\r\n buildRow(\r\n formatDate(new Date(member.membershipInfo.date)),\r\n L('GENERISK_FORM_INDMELDELSESDATO_LABEL')\r\n ),\r\n {\r\n label: '',\r\n value: '',\r\n useContent: true,\r\n content: buildTOR(member),\r\n },\r\n ]\r\n }\r\n\r\n const onClickFavorite = async (member: Member): Promise => {\r\n const callback = member.isFavorite ? removeFavorite : setFavorite\r\n\r\n const response = await callback(`${member.memberId}`, 'MedlemIdent')\r\n\r\n if (response) {\r\n const { id } = params\r\n if (id) {\r\n init(id)\r\n }\r\n }\r\n }\r\n\r\n if (!data) return \r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n {getInitials(data.fullName)}\r\n \r\n \r\n {\r\n e.stopPropagation()\r\n e.preventDefault()\r\n onClickFavorite(data)\r\n }}\r\n active={data.isFavorite}\r\n size={24}\r\n right=\"-15px\"\r\n bottom=\"-2px\"\r\n />\r\n
    \r\n\r\n \r\n {data.fullName}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n {data ? (\r\n
    \r\n \r\n init(String(member.memberId))\r\n }\r\n />\r\n
    \r\n ) : null}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n }\r\n titleLabel={L(\r\n 'MINEMEDLEMMER_DETALJE_PERSONLIGEOPLYSNINGER-TITEL'\r\n )}\r\n rows={getPersonalInfoRows(data)}\r\n key=\"Personlige oplysninger\"\r\n />\r\n }\r\n titleLabel={L(\r\n 'MINEMEDLEMMER_DETALJE_FOAMEDLEMSSKAB-TITEL'\r\n )}\r\n rows={getMembershipInfoRows(data)}\r\n key=\"FOA medlemsskab\"\r\n />\r\n
    \r\n {/* }\r\n titleLabel={L('GENERISK_FORM_ANSÆTTELSE_TITEL')}\r\n rows={getWorkInfo(data.primaryWorkPlace)}\r\n key={data.primaryWorkPlace?.address?.id}\r\n /> */}\r\n\r\n {selectedWorkplace ? (\r\n \r\n
    \r\n {data ? (\r\n \r\n ) : null}\r\n {data ? (\r\n \r\n ) : null}\r\n
    \r\n \r\n }\r\n />\r\n ) : null}\r\n }\r\n titleLabel={L('MINEMEDLEMMER_DETALJE_KONTAKT-TITEL')}\r\n rows={getContactInfoRows(data)}\r\n key=\"Kontakt\"\r\n />\r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport { MemberProfile }\r\n","import React, { FC, useEffect, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useForm } from 'react-hook-form'\r\nimport moment from 'moment'\r\nimport { useAtom } from 'jotai'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { SendFill, Info, SuitcaseFill, AddContact } from '../../../assets/icons'\r\nimport { Circle } from '../../ui/Card'\r\nimport { CircleIcon } from '../../ui/Circle/Circle'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport { IUpdateMemberData, Member } from '../../../models/Member'\r\nimport { Position } from '../../../models/Position'\r\nimport { getWorkplacesAndPositions } from '../../../api/misc'\r\nimport { colors } from '../../../theme/palette'\r\nimport { DatePickerComponent } from '../../ui/FormElememts/DatePicker'\r\nimport { FormControl } from '../../ui/FormElememts/FormControl'\r\nimport { FormHeader } from '../../ui/FormElememts/FormHeader'\r\nimport { baseButton } from '../../../theme/reuseables'\r\nimport { Overlay } from '../../ui/Sidebar'\r\nimport { Dialog } from '../../ui/Dialog/Dialog'\r\nimport { addMemberToOwnList } from '../../../api/members/members'\r\nimport { Workplace } from '../../../models/Workplace'\r\nimport { DrawerHeaderMemberInfo } from '../FormElements/DrawerHeader'\r\nimport {\r\n FormInputNumber,\r\n FormTextArea,\r\n FormSelect,\r\n} from '../FormElements/FormInput'\r\nimport { FormMessage } from '../../ui/FormElememts/FormMessage'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport { Select } from '../../ui/FormElememts/Select'\r\nimport Checkbox from '../../ui/FormElememts/Checkbox'\r\nimport { ImitatorNoAccessWarning } from '../Imitator/ImitatorNoAccessWarning'\r\nimport { profileAtom } from '../../../api/profile/profile'\r\n\r\ninterface EditProps {\r\n member: Member\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n contentWrapper: {\r\n padding: '100px 20px 20px',\r\n overflow: 'auto',\r\n height: 'calc(100% - 100px)',\r\n paddingBottom: '80px',\r\n },\r\n accordionWrapper: {\r\n marginBottom: '20px',\r\n },\r\n select: {\r\n position: 'relative',\r\n height: '3.125rem',\r\n backgroundColor: colors.white,\r\n border: `1px solid ${colors.borderColor}`,\r\n borderRadius: '6px',\r\n width: '100%',\r\n fontSize: '1.125rem',\r\n paddingLeft: '.75rem',\r\n paddingRight: '.75rem',\r\n cursor: 'pointer',\r\n color: colors.labelColor,\r\n },\r\n button: {\r\n ...baseButton,\r\n ...{\r\n cursor: 'pointer',\r\n },\r\n },\r\n bottom: {\r\n display: 'flex',\r\n position: 'absolute',\r\n bottom: '0',\r\n width: '100%',\r\n padding: '20px',\r\n left: '0',\r\n background: colors.white,\r\n zIndex: 4,\r\n borderTop: `1px solid ${colors.borderColor}`,\r\n '& > button': {\r\n flexGrow: 1,\r\n },\r\n '& > button:last-of-type': {\r\n marginRight: '0',\r\n },\r\n },\r\n})\r\n\r\nexport type RegistrationFormFields = {\r\n Timetal?: string\r\n OevrigeOplysninger?: string\r\n Arbejdsstednummer?: string\r\n Stillingsnummer?: string\r\n Aendringsdato?: string\r\n}\r\n\r\nexport type CustomErrors = {\r\n Aendringsdato?: boolean\r\n}\r\n\r\nexport const AddMemberToOwnList: FC = ({ member }) => {\r\n const { register, formState, reset, handleSubmit, setValue } =\r\n useForm()\r\n const classes = useStyles()\r\n const [authProfile] = useAtom(profileAtom)\r\n const [workPlaces, setWorkplaces] = useState([])\r\n const [positions, setPositions] = useState([])\r\n const [selectedDate, _setSelectedDate] = useState(null)\r\n const [customErrors, setCustomErrors] = useState({})\r\n const [isOpen, setIsOpen] = useState(false)\r\n const [showDialog, setShowDialog] = useState(false)\r\n const [isValid, setIsValid] = useState(false)\r\n const [onCallSubstitute, setOnCallSubstitute] = useState(false)\r\n const [values, setValues] = useState({\r\n Timetal: undefined,\r\n OevrigeOplysninger: undefined,\r\n Arbejdsstednummer: undefined,\r\n Stillingsnummer: undefined,\r\n })\r\n\r\n const [selectedPostion, setSelectedPosition] = useState(\r\n undefined\r\n )\r\n const [selectedWorkplace, setSelectedWorkplace] = useState<\r\n string | undefined\r\n >(undefined)\r\n\r\n const getPositions = async (): Promise => {\r\n const response = await getWorkplacesAndPositions()\r\n setWorkplaces(response.workPlaces)\r\n }\r\n\r\n const { dirtyFields, errors } = formState\r\n const [showImitatorModal, setShowImitatorModal] = useState(false)\r\n const resetForm = (): void => {\r\n _setSelectedDate(null)\r\n setSelectedWorkplace('default')\r\n setSelectedPosition('default')\r\n setCustomErrors({})\r\n reset()\r\n }\r\n\r\n useEffect(() => {\r\n console.log(errors, 'errors')\r\n }, [errors])\r\n\r\n useEffect(() => {\r\n register('Timetal')\r\n getPositions()\r\n }, [])\r\n\r\n useEffect(() => {\r\n let valid = false\r\n\r\n valid =\r\n !!selectedDate &&\r\n !!selectedPostion &&\r\n selectedPostion !== 'default' &&\r\n !!selectedWorkplace\r\n setIsValid(valid)\r\n }, [values, selectedPostion, selectedWorkplace, selectedDate, formState])\r\n\r\n const setWP = (wp: string): void => {\r\n const found = workPlaces.find(\r\n (wpp) => Number(wpp.number) === Number(wp)\r\n )\r\n setSelectedWorkplace(wp)\r\n setSelectedPosition('default')\r\n\r\n if (found && found.positions) {\r\n setPositions(found.positions)\r\n }\r\n }\r\n\r\n const submitHandler = async (\r\n data: RegistrationFormFields\r\n ): Promise => {\r\n if (authProfile.isImitator) {\r\n setShowImitatorModal(true)\r\n return Promise.resolve('OK')\r\n }\r\n\r\n const fieldsToEdit: IUpdateMemberData = {\r\n Medlemsident: member.memberId,\r\n Aendringsdato: moment(selectedDate).format('YYYY-MM-DD HH:mm:ss'),\r\n Arbejdsstednummer: Number(selectedWorkplace),\r\n Stillingsnummer: selectedPostion || String(member.positions[0].id),\r\n }\r\n\r\n if (dirtyFields.Timetal) {\r\n fieldsToEdit.Timetal = Number(\r\n String(data.Timetal).replace(',', '.')\r\n )\r\n }\r\n\r\n if (dirtyFields.OevrigeOplysninger) {\r\n fieldsToEdit.OevrigeOplysninger = data.OevrigeOplysninger\r\n }\r\n\r\n if (onCallSubstitute) {\r\n if (fieldsToEdit.OevrigeOplysninger) {\r\n fieldsToEdit.OevrigeOplysninger = `${fieldsToEdit.OevrigeOplysninger} - Tilkaldevikar`\r\n } else {\r\n fieldsToEdit.OevrigeOplysninger = 'Tilkaldevikar'\r\n }\r\n }\r\n\r\n if (!selectedDate) {\r\n return Promise.resolve('OK')\r\n }\r\n\r\n const response = await addMemberToOwnList(fieldsToEdit)\r\n\r\n if (response) {\r\n setIsOpen(false)\r\n setShowDialog(true)\r\n resetForm()\r\n }\r\n\r\n return Promise.resolve('OK')\r\n }\r\n\r\n return (\r\n <>\r\n setIsOpen(true)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n {L('ALLEMEDLEMMER_TILFØJ-TIL-MIN-ARBEJDSPLADS_TEKST')}\r\n \r\n \r\n {\r\n setIsOpen(false)\r\n resetForm()\r\n }}\r\n >\r\n \r\n \r\n \r\n {L('ALLEMEDLEMMER_TILFØJ-TIL-MIN-ARBEJDSPLADS_TEKST')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {L_HTML('GENERISK_FORM_ANSÆTTELSE_TITEL')}\r\n \r\n \r\n \r\n \r\n {\r\n setWP(e.target.value)\r\n setValue(\r\n 'Arbejdsstednummer',\r\n e.target.value\r\n )\r\n },\r\n }}\r\n options={workPlaces.map((wp) => {\r\n const o = {\r\n label: wp.name,\r\n value: String(wp.number),\r\n }\r\n\r\n return o\r\n })}\r\n />\r\n \r\n \r\n \r\n {\r\n setSelectedPosition(e.target.value)\r\n setValue('Stillingsnummer', e.target.value)\r\n },\r\n }}\r\n options={positions.map((pos) => {\r\n const o = {\r\n label: pos.name,\r\n value: String(pos.id),\r\n }\r\n\r\n return o\r\n })}\r\n />\r\n \r\n \r\n \r\n \r\n (Number(String(value).replace(',', '.')) >=\r\n 0.5 &&\r\n Number(\r\n String(value).replace(',', '.')\r\n ) <= 99) ||\r\n L(\r\n 'GENERISK_FORM_TIMETAL_VALIDERINGS_TEKST'\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 {L_HTML(\r\n 'GENERISK_FORM_YDERLIGERE-OPLYSNINGER_TITEL'\r\n )}\r\n \r\n \r\n \r\n {\r\n setCustomErrors({})\r\n _setSelectedDate(e)\r\n }}\r\n minDate={moment().subtract(1, 'year').toDate()}\r\n maxDate={moment().add(1, 'year').toDate()}\r\n hasError={!!customErrors?.Aendringsdato}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n setOnCallSubstitute(!onCallSubstitute)\r\n }}\r\n />\r\n \r\n
    \r\n {\r\n setIsOpen(false)\r\n resetForm()\r\n }}\r\n type=\"secondary\"\r\n size=\"large\"\r\n >\r\n Annuller\r\n \r\n {\r\n if (!selectedDate) {\r\n setCustomErrors({\r\n Aendringsdato: true,\r\n })\r\n }\r\n }}\r\n >\r\n {L(\r\n 'ALLEMEDLEMMER_TILFØJ-TIL-MIN-ARBEJDSPLADS_KNAP'\r\n )}\r\n \r\n
    \r\n\r\n
    \r\n \r\n \r\n {showDialog ? (\r\n }\r\n >\r\n \r\n {L_HTML(\r\n 'TILFØJ-MEDLEM-TIL-EGEN-LISTE_POPUP_OVERSKRIFT'\r\n )}\r\n \r\n \r\n {L_HTML('TILFØJ-MEDLEM-TIL-EGEN-LISTE_POPUP_TEXT')}\r\n \r\n \r\n \r\n ) : null}\r\n setShowImitatorModal(false)}\r\n />\r\n \r\n )\r\n}\r\n","import React, { useEffect, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\n\r\nimport { useParams } from 'react-router-dom'\r\nimport { useAtom } from 'jotai'\r\nimport { getInitials } from '../../../utils/initials'\r\n\r\nimport { colors } from '../../../theme/palette'\r\nimport { CircleText, CircleIcon2 } from '../../ui/Circle/Circle'\r\nimport { CardColumn, Row } from '../../ui/Card/CardColumn'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport {\r\n SuitcaseFill,\r\n Foa,\r\n PersonalInfo,\r\n ContactLedger,\r\n} from '../../../assets/icons'\r\nimport { CardColumnContainer } from '../../ui/Card/CardColumnContainer'\r\nimport { getMemberAfterSearch } from '../../../api/members/members'\r\nimport { Member } from '../../../models/Member'\r\nimport { Loader } from '../../ui/Loaders/Loader'\r\n// import { EditMemberProfile } from '../../modules/EditMemberProfile'\r\nimport { AddMemberToOwnList } from '../../modules/AddMemberToOwnList'\r\nimport { buildRow } from '../MyProfile'\r\nimport { formatDate } from '../../../utils/format'\r\nimport { GmapsLink } from '../../ui/GmapsLink/GmapsLink'\r\nimport { Workplace } from '../../../models/Workplace'\r\nimport { BackLink } from '../../ui/BackLink'\r\nimport { getAge } from '../../../utils/utils'\r\nimport { L } from '../../providers/Lokalise'\r\nimport { profileAtom } from '../../../api/profile/profile'\r\nimport breakpoints from '../../../theme/breakpoints'\r\nimport { Spinner } from '../../ui/Loaders/Spinner'\r\nimport { buildEmailRow } from '../MemberProfile'\r\n\r\nconst useStyles = createUseStyles({\r\n container: {\r\n color: colors.black,\r\n padding: '0 24px',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n padding: 0,\r\n },\r\n },\r\n },\r\n profileHeader: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n padding: '3rem 0',\r\n },\r\n nameContainer: {\r\n display: 'flex',\r\n flexBasis: '50%',\r\n alignItems: 'center',\r\n justifyContent: 'flex-start',\r\n },\r\n edit: {\r\n display: 'flex',\r\n flexBasis: '50%',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n },\r\n section: {\r\n marginBottom: '3rem',\r\n\r\n '& > hr': {\r\n opacity: '0.2',\r\n margin: '1.25rem 0',\r\n },\r\n },\r\n iconWrapper: {\r\n position: 'relative',\r\n width: '90px',\r\n marginRight: '30px',\r\n },\r\n})\r\n\r\nconst MemberProfileFromSearch: React.FC = () => {\r\n const classes = useStyles()\r\n const params = useParams()\r\n const [authProfile] = useAtom(profileAtom)\r\n const [showImitatorModal, setShowImitatorModal] = useState(false)\r\n\r\n const [data, _setData] = useState(undefined)\r\n const init = async (id: string): Promise => {\r\n const response = await getMemberAfterSearch(+id)\r\n const { data: profileData } = response\r\n const profile = Member.build(profileData)\r\n _setData(profile)\r\n return response\r\n }\r\n\r\n useEffect(() => {\r\n const { id } = params\r\n\r\n if (id) {\r\n init(id)\r\n }\r\n }, [params])\r\n\r\n const getPositionName = (): string => {\r\n const id = data.primaryWorkPlace.postionNumber\r\n const group = data.positions.find((pos) => +pos.id === +id)\r\n return group.name || '-'\r\n }\r\n\r\n const getGroupName = (): string => {\r\n const id = data.primaryWorkPlace.postionNumber\r\n const group = data.positions.find((pos) => +pos.id === +id)\r\n return group.group.name || '-'\r\n }\r\n\r\n const getPersonalInfoRows = (member: Member): Row[] => {\r\n return [\r\n buildRow(formatDate(member.birthday), 'Fødselsdag'),\r\n // buildRow(member.age ? `${member.age} år` : '-', 'Alder'),\r\n buildRow(\r\n member.birthday\r\n ? `${getAge(member.birthday.getFullYear())} år`\r\n : null,\r\n L('GENERISK_FORM_ALDER_LABEL')\r\n ),\r\n ]\r\n }\r\n\r\n const getWorkInfo = (workplace: Workplace): Row[] => {\r\n let customedGmapsUrl = ''\r\n if (workplace?.address) {\r\n const {\r\n addressLine1,\r\n addressLine2,\r\n addressLine3,\r\n postDistrict,\r\n postNumber,\r\n } = workplace?.address\r\n customedGmapsUrl = `https://www.google.com/maps/search/?api=1&query=${addressLine1}+${addressLine2}+${addressLine3}%2C+${postNumber}+${postDistrict}`\r\n }\r\n\r\n const rows: Row[] = []\r\n\r\n if (customedGmapsUrl !== '') {\r\n rows.push({\r\n label: '',\r\n value: '',\r\n useContent: !!customedGmapsUrl,\r\n content: !!customedGmapsUrl && (\r\n \r\n \r\n {L('GENERISK_FORM_ARBEJDSSTED_LABEL')}\r\n \r\n \r\n {workplace.name}\r\n \r\n \r\n
    \r\n ),\r\n })\r\n } else {\r\n rows.push(buildRow(workplace?.name, 'Arbejdssted'))\r\n }\r\n\r\n return [\r\n ...rows,\r\n ...[\r\n buildRow(getPositionName(), L('GENERISK_FORM_STILLING_LABEL')),\r\n buildRow(\r\n workplace?.hoursPerWeek,\r\n L('GENERISK_FORM_TIMETAL_LABEL')\r\n ),\r\n buildRow(getGroupName(), 'Faggruppe'),\r\n ],\r\n ]\r\n }\r\n\r\n const getContactInfoRows = (member: Member): Row[] => {\r\n return [\r\n buildRow(\r\n member.privateContact?.mobileShow || '-',\r\n L('GENERISK_FORM_PRIVAT-MOBIL_LABEL')\r\n ),\r\n buildEmailRow(\r\n member.privateContact?.email,\r\n L('GENERISK_FORM_PRIVAT-EMAIL_LABEL'),\r\n authProfile.isImitator,\r\n showImitatorModal,\r\n setShowImitatorModal\r\n ),\r\n ]\r\n }\r\n\r\n const buildTOR = (member: Member): JSX.Element => {\r\n return (\r\n
    \r\n \r\n {L('GENERISK_FORM_TILLIDSHVERV_LABEL')}\r\n \r\n <>\r\n {member.typeOfRepresentatives.map((type) => {\r\n return (\r\n \r\n {type.name}\r\n \r\n )\r\n })}\r\n \r\n
    \r\n )\r\n }\r\n\r\n const getMembershipInfoRows = (member: Member): Row[] => {\r\n const rows = [\r\n buildRow(\r\n member.memberNumber,\r\n L('GENERISK_FORM_MEDLEMSNUMMER_LABEL')\r\n ),\r\n buildRow(\r\n member.membershipInfo.name,\r\n L('GENERISK_FORM_FOAAFDELING_LABEL')\r\n ),\r\n ]\r\n\r\n if (member.typeOfRepresentatives.length) {\r\n rows.push({\r\n label: '',\r\n value: '',\r\n useContent: true,\r\n content: buildTOR(member),\r\n })\r\n }\r\n\r\n return rows\r\n }\r\n\r\n if (!data) return \r\n\r\n return (\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n {getInitials(data.fullName)}\r\n \r\n \r\n
    \r\n \r\n {data.fullName}\r\n \r\n
    \r\n
    \r\n {data ? : null}\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n }\r\n titleLabel={L(\r\n 'ALLEMEDLEMMER_DETALJE_PERSONLIGE-OPLYSNINGER_TITEL'\r\n )}\r\n rows={getPersonalInfoRows(data)}\r\n key=\"Personlige oplysninger\"\r\n />\r\n\r\n }\r\n titleLabel={L(\r\n 'ALLEMEDLEMMER_DETALJE_FOAMEDLEMSSKAB-TITEL'\r\n )}\r\n rows={getMembershipInfoRows(data)}\r\n key=\"FOA medlemsskab\"\r\n />\r\n
    \r\n\r\n }\r\n titleLabel={L('GENERISK_FORM_ANSÆTTELSE_TITEL')}\r\n rows={getWorkInfo(data.primaryWorkPlace)}\r\n key={data.primaryWorkPlace?.address?.id}\r\n />\r\n\r\n }\r\n titleLabel={L('ALLEMEDLEMMER_DETALJE_KONTAKT_TITEL')}\r\n rows={getContactInfoRows(data)}\r\n key=\"Kontakt\"\r\n />\r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport { MemberProfileFromSearch }\r\n","import React, { useEffect, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useContainerStyles } from '../../../theme/layout'\r\nimport { colors } from '../../../theme/palette'\r\nimport { Typography } from '../Typography/Typography'\r\nimport { getProfileSupportInfo } from '../../../api/profile/profile'\r\nimport breakpoints from '../../../theme/breakpoints'\r\nimport { formatPhoneNumber } from '../../../utils/format'\r\n\r\nconst useStyles = createUseStyles(() => ({\r\n container: {\r\n backgroundColor: colors.green500,\r\n width: '100%',\r\n minHeight: '20rem',\r\n zIndex: 1,\r\n padding: '20px',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n padding: '40px 0 0',\r\n },\r\n },\r\n },\r\n inner: {\r\n display: 'grid',\r\n gridTemplateColumns: '1fr',\r\n gap: '40px',\r\n height: '100%',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n gridTemplateColumns: '1fr 1fr 1fr',\r\n gap: '20%',\r\n },\r\n },\r\n },\r\n contactLink: {\r\n textDecoration: 'underline',\r\n color: 'inherit',\r\n cursor: 'pointer',\r\n '&:hover, &:focus, &:active': {\r\n opacity: '0.8',\r\n },\r\n },\r\n column: {},\r\n}))\r\n\r\nconst Footer: React.FC = () => {\r\n const classes = useStyles()\r\n const layout = useContainerStyles()\r\n const [info, setInfo] = useState(undefined)\r\n\r\n useEffect(() => {\r\n const getInfo = async (): Promise => {\r\n const response = await getProfileSupportInfo()\r\n\r\n const found = response.data.KontaktoplysningerList.find(\r\n (item: any) => item.KontaktoplysningerType === 'Afdeling'\r\n )\r\n\r\n if (found) {\r\n setInfo(found)\r\n }\r\n }\r\n\r\n getInfo()\r\n }, [])\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n Tekniske udfordringer\r\n \r\n
    \r\n \r\n Kontakt hotline for tillidsvalgte:\r\n \r\n
    \r\n \r\n Tlf: 46 97 25 75\r\n \r\n
    \r\n \r\n \r\n tv-hotline@foa.dk\r\n \r\n \r\n
    \r\n
    \r\n \r\n Fejl i medlemsdata\r\n \r\n
    \r\n \r\n Kontakt din FOA-afdeling:\r\n \r\n
    \r\n \r\n Tlf:{' '}\r\n {info && info.Telefon\r\n ? formatPhoneNumber(info.Telefon)\r\n : ''}\r\n \r\n
    \r\n {info && info.Email ? (\r\n \r\n \r\n {(info && info.Email) || ''}\r\n \r\n \r\n ) : null}\r\n
    \r\n
    \r\n \r\n Andet\r\n \r\n
    \r\n \r\n \r\n Quick guide\r\n \r\n \r\n
    \r\n \r\n \r\n Brugervejledning\r\n \r\n \r\n
    \r\n \r\n \r\n Ideer/forslag?\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport { Footer }\r\n","import React, { FC, useEffect, useRef, useState } from 'react'\r\nimport { useAtom } from 'jotai'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { Member } from '../../../models/Member'\r\nimport { Note } from '../../../models/Note'\r\nimport { Overlay } from '../../ui/Sidebar'\r\nimport { DrawerHeaderMemberInfo } from '../FormElements/DrawerHeader'\r\nimport { AddNewNote } from './AddNewNote'\r\nimport { EditNote } from './EditNote'\r\nimport { getOwnMember, membersAtom } from '../../../api/members/members'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { CircleIcon2 } from '../../ui/Circle/Circle'\r\nimport { Archive, DeleteFill, EditFill } from '../../../assets/icons'\r\nimport { colors } from '../../../theme/palette'\r\n// import { L } from '../../providers/Lokalise'\r\n\r\nconst useStyles = createUseStyles({\r\n actions: {\r\n display: 'flex',\r\n position: 'relative',\r\n justifyContent: 'flex-end',\r\n },\r\n})\r\n\r\ntype ViewStates = 'default' | 'create' | 'edit' | 'delete'\r\n\r\ninterface EditMemberNotesProps {\r\n note: Note\r\n onUpdated?: () => void\r\n setShowDelete: (note: Note) => void\r\n}\r\n\r\nconst EditNoteFromPage: FC = ({\r\n note,\r\n onUpdated,\r\n setShowDelete,\r\n}) => {\r\n const [notes] = useState([])\r\n const [isOpen, setIsOpen] = useState(false)\r\n const [viewState, setViewState] = useState('edit')\r\n const [members] = useAtom(membersAtom)\r\n const [member, _setMember] = useState(undefined)\r\n\r\n const classes = useStyles()\r\n\r\n const setMember = async (id: number): Promise => {\r\n const response = await getOwnMember(String(id))\r\n\r\n _setMember(Member.build(response.data))\r\n }\r\n\r\n useEffect(() => {\r\n const findMember = (): void => {\r\n // init()\r\n const found = members.members.find(\r\n (m) => m.memberId === +note.referenceId\r\n )\r\n\r\n if (found && !member) {\r\n setMember(found.memberId)\r\n }\r\n }\r\n if (isOpen) {\r\n findMember()\r\n }\r\n }, [isOpen, member, members.members, note.referenceId])\r\n\r\n return (\r\n <>\r\n
    \r\n setShowDelete(note)}\r\n style={{ marginLeft: '20px' }}\r\n >\r\n \r\n \r\n \r\n \r\n {\r\n setViewState('edit')\r\n setIsOpen(true)\r\n }}\r\n >\r\n \r\n \r\n \r\n {' '}\r\n
    \r\n\r\n {\r\n setIsOpen(false)\r\n }}\r\n >\r\n \r\n\r\n {viewState === 'create' ? (\r\n 0}\r\n onClickCancel={() => {\r\n setViewState('default')\r\n if (notes.length === 0) {\r\n setIsOpen(false)\r\n }\r\n }}\r\n onUpdated={() => {\r\n setViewState('default')\r\n }}\r\n />\r\n ) : null}\r\n\r\n {viewState === 'edit' && note && isOpen ? (\r\n {\r\n setIsOpen(false)\r\n }}\r\n onUpdated={() => {\r\n setIsOpen(false)\r\n if (onUpdated) {\r\n onUpdated()\r\n }\r\n }}\r\n />\r\n ) : null}\r\n \r\n \r\n )\r\n}\r\n\r\nexport { EditNoteFromPage }\r\n","import React, { FC, useEffect, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useAtom } from 'jotai'\r\nimport {\r\n deleteNote,\r\n getAllNotes,\r\n updateNoteIsArchived,\r\n} from '../../../api/notes'\r\nimport { Priority } from '../../../assets/icons'\r\nimport useSortMembersList from '../../../hooks/useSortMembersList'\r\nimport { mapNotes, Note } from '../../../models/Note'\r\nimport breakpoints from '../../../theme/breakpoints'\r\nimport { colors } from '../../../theme/palette'\r\nimport { baseButton, sortPlaceholder } from '../../../theme/reuseables'\r\nimport { formatDate } from '../../../utils/format'\r\nimport {\r\n Card,\r\n CardCell,\r\n CardContentMobile,\r\n CardHeader,\r\n CardHeaderCell,\r\n CardList,\r\n CardMobile,\r\n} from '../../ui/Card'\r\nimport { SortButton } from '../../ui/SortButton'\r\nimport { Typography } from '../../ui/Typography/Typography'\r\nimport {\r\n notePageAtom,\r\n allNotes,\r\n sortLock,\r\n searchNoteAtom,\r\n} from '../../../store/filter/filterAtom'\r\nimport { EditNoteFromPage } from '../../modules/notes/EditNoteFromPage'\r\nimport { Button } from '../../ui/Button/Button'\r\nimport { L, L_HTML } from '../../providers/Lokalise'\r\nimport { Loader } from '../../ui/Loaders/Loader'\r\nimport { HeaderLinks } from '../../modules/Headerlinks'\r\nimport { Spinner } from '../../ui/Loaders/Spinner'\r\nimport SearchField from '../../ui/SearchField/SearchField'\r\n\r\nconst useStyles = createUseStyles({\r\n '@keyframes fadeIn': {\r\n from: {\r\n opacity: 0,\r\n },\r\n to: {\r\n opacity: 1,\r\n },\r\n },\r\n container: {\r\n padding: '0 1.5rem',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n padding: '0',\r\n },\r\n },\r\n },\r\n headerArea: {\r\n display: 'flex',\r\n padding: '.5rem 0',\r\n minHeight: '5rem',\r\n },\r\n headerAreaTop: {\r\n display: 'flex',\r\n padding: '1rem 0 .5rem',\r\n borderBottom: `1px solid ${colors.borderColor}`,\r\n marginBottom: '1rem',\r\n },\r\n topArea: {\r\n borderBottom: `1px solid ${colors.gray700}`,\r\n // TODO: remove this when this area has been developed.\r\n minHeight: '60px',\r\n },\r\n headerActions: {\r\n display: 'flex',\r\n flexGrow: 1,\r\n marginLeft: 'auto',\r\n justifyContent: 'flex-end',\r\n alignItems: 'flex-start',\r\n flexShrink: 0,\r\n },\r\n sendingEmailSettings: {\r\n display: 'flex',\r\n padding: '.5rem 1rem',\r\n minHeight: '5rem',\r\n width: '100%',\r\n backgroundColor: colors.green200,\r\n color: colors.black,\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n '& span': {\r\n fontWeight: 700,\r\n },\r\n animation: '.5s $fadeIn',\r\n },\r\n notes: {\r\n paddingTop: '20px',\r\n },\r\n dialogButtonsContainer: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'space-around',\r\n },\r\n button: {\r\n ...baseButton,\r\n ...{\r\n cursor: 'pointer',\r\n },\r\n },\r\n modalButtons: {\r\n display: 'flex',\r\n },\r\n modalCheckbox: {\r\n display: 'flex',\r\n position: 'absolute',\r\n right: '20px',\r\n top: '20px',\r\n },\r\n numberOfNotes: {\r\n display: 'flex',\r\n padding: '30px 0 90px',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n iconWrapper: {\r\n position: 'relative',\r\n },\r\n noteContent: {\r\n display: '-webkit-box',\r\n WebkitLineClamp: '2',\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'pre-wrap',\r\n },\r\n noteContentOpen: {\r\n display: '-webkit-box',\r\n // WebkitLineClamp: '2',\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden',\r\n // textOverflow: 'ellipsis',\r\n whiteSpace: 'pre-wrap',\r\n },\r\n deleteButtons: {\r\n top: '0',\r\n right: '0',\r\n display: 'flex',\r\n zIndex: '1',\r\n position: 'absolute',\r\n flexWrap: 'wrap',\r\n transition: 'all .3s ease-in',\r\n justifyContent: 'end',\r\n width: '100%',\r\n height: '100%',\r\n alignItems: 'center',\r\n background:\r\n 'linear-gradient(90deg, rgba(255,255,255,0.7) 0%, rgba(255,255,255,1) 62%, rgba(255,255,255,1) 100%)',\r\n },\r\n sortPlaceholder: {\r\n ...sortPlaceholder,\r\n },\r\n readIcon: {\r\n background: colors.gray,\r\n borderRadius: '50%',\r\n width: '25px',\r\n height: '25px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n cursor: 'pointer',\r\n '& svg': {\r\n color: colors.white,\r\n width: '20px',\r\n },\r\n '&.active': {\r\n background: colors.green500,\r\n },\r\n },\r\n searchField: {\r\n width: '100%',\r\n marginRight: '20px',\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n '&': {\r\n width: 'auto',\r\n minWidth: '425px',\r\n marginRight: '20px',\r\n },\r\n },\r\n },\r\n})\r\n\r\nexport const useIsOverflow = (ref, callback?): boolean => {\r\n const [isOverflow, setIsOverflow] = React.useState(undefined)\r\n\r\n React.useLayoutEffect(() => {\r\n const { current } = ref\r\n\r\n const trigger = (): void => {\r\n const hasOverflow = current.scrollHeight > current.clientHeight\r\n\r\n setIsOverflow(hasOverflow)\r\n\r\n if (callback) callback(hasOverflow)\r\n }\r\n\r\n if (current) {\r\n if ('ResizeObserver' in window) {\r\n new ResizeObserver(trigger).observe(current)\r\n }\r\n\r\n trigger()\r\n }\r\n }, [callback, ref])\r\n\r\n return isOverflow\r\n}\r\n\r\nconst ClampContent: FC<{\r\n content: string\r\n checkNote: () => void\r\n}> = ({ content, checkNote }) => {\r\n const [showMore, setShowMore] = useState(false)\r\n const [hasOverflow, setHasOverflow] = React.useState(false)\r\n const [touched, setStouched] = useState(false)\r\n const [isMore, setIsMore] = useState(false)\r\n\r\n const ref = React.useRef(null)\r\n const isOverflow = useIsOverflow(ref, (val) => {\r\n // console.log(val, 'isoverfglow')\r\n if (isOverflow && !hasOverflow) {\r\n setHasOverflow(isOverflow)\r\n }\r\n })\r\n\r\n const classes = useStyles()\r\n\r\n const checkLines = (\r\n contentRef: React.MutableRefObject,\r\n lines: number\r\n ): void => {\r\n if (!window) {\r\n return\r\n }\r\n if (!contentRef.current) {\r\n return\r\n }\r\n // eslint-disable-next-line no-unused-expressions\r\n const lineHeight = window\r\n .getComputedStyle(contentRef.current)\r\n .getPropertyValue('line-height')\r\n\r\n // eslint-disable-next-line no-unused-expressions\r\n Math.round(contentRef.current.scrollHeight / parseFloat(lineHeight)) >\r\n lines && setIsMore(true)\r\n }\r\n\r\n useEffect(() => {\r\n setTimeout(() => {\r\n checkLines(ref, 2)\r\n }, 500)\r\n }, [ref, content])\r\n\r\n if (!content || content === '') return null\r\n\r\n return (\r\n \r\n \r\n \r\n {content}\r\n \r\n \r\n {isMore ? (\r\n {\r\n setShowMore(!showMore)\r\n checkNote()\r\n }}\r\n >\r\n {!showMore ? 'Vis mere' : 'Vis mindre'}\r\n \r\n ) : null}\r\n
    \r\n )\r\n}\r\n\r\nconst gridTemplateColumns = '7% 10% 15% 15% auto 10%'\r\n\r\nconst NotePage: FC = () => {\r\n const [notes, setNotes] = useState([])\r\n const [loading, setLoading] = useState(true)\r\n const classes = useStyles()\r\n const { setSort, sortState } = useSortMembersList()\r\n const [sortedNotes] = useAtom(notePageAtom)\r\n const [, setAllNotes] = useAtom(allNotes)\r\n const [showDelete, setShowDelete] = useState(false)\r\n const [showMore, setShowMore] = useState(false)\r\n const [editNote, setEditNote] = useState(undefined)\r\n const [lock, _setSortLock] = useAtom(sortLock)\r\n const [freezedNotes, setFreezedNotes] = useState([])\r\n const [, setSearchAtom] = useAtom(searchNoteAtom)\r\n\r\n const onSearch = (search: string): void => {\r\n setSearchAtom(search)\r\n }\r\n\r\n const useSearch = (search: string): void => {\r\n setSearchAtom(search)\r\n }\r\n\r\n const init = (): void => {\r\n async function fetchData(): Promise {\r\n const response = await getAllNotes()\r\n const notesMapped = mapNotes(response.data.Noter)\r\n setNotes(notesMapped)\r\n setAllNotes(notesMapped)\r\n setLoading(false)\r\n }\r\n\r\n fetchData()\r\n }\r\n\r\n const onClickDelete = async (note: Note): Promise => {\r\n const response = await deleteNote(note.id)\r\n if (response) {\r\n setShowDelete(false)\r\n init()\r\n }\r\n }\r\n\r\n const onClickSetArchived = async (note: Note): Promise => {\r\n const response = await updateNoteIsArchived(note.id, !note.archived)\r\n\r\n const res = await getAllNotes()\r\n const notesMapped = mapNotes(res.data.Noter)\r\n const sorted: Note[] = []\r\n\r\n const notesToIterate = lock ? freezedNotes : sortedNotes\r\n\r\n notesToIterate.forEach((item) => {\r\n const found = notesMapped.find((n) => n.id === item.id)\r\n\r\n if (found) {\r\n sorted.push(found)\r\n }\r\n })\r\n _setSortLock(true)\r\n setFreezedNotes(sorted)\r\n\r\n if (response) {\r\n init()\r\n }\r\n }\r\n\r\n const checkNote = (note: Note): void => {\r\n if (editNote === note) {\r\n setEditNote(undefined)\r\n setShowMore(false)\r\n } else {\r\n setEditNote(note)\r\n setShowMore(true)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (!sortState) {\r\n setSort('isRead')\r\n }\r\n init()\r\n }, [])\r\n\r\n if (loading) return \r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n {L_HTML('MINENOTER_OVERSKRIFT')}\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n {L_HTML('MINENOTER_ARKIVEREDE_OVERSKRIFT_TEXT')}\r\n \r\n
    \r\n
    \r\n \r\n Viser {`${notes.length} `} noter\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n {notes && notes.length ? (\r\n \r\n \r\n \r\n setSort('isRead')}\r\n sort={sortState}\r\n name=\"isRead\"\r\n >\r\n {L('MINENOTER_TABEL_KOLONNETITEL_STATUS')}\r\n \r\n \r\n \r\n setSort('date')}\r\n sort={sortState}\r\n name=\"date\"\r\n >\r\n {L('MINENOTER_TABEL_KOLONNETITEL_DATO')}\r\n \r\n \r\n \r\n setSort('name')}\r\n sort={sortState}\r\n name=\"name\"\r\n >\r\n {L('MINENOTER_TABEL_KOLONNETITEL_NAVN')}\r\n \r\n \r\n \r\n
    \r\n {L(\r\n 'MINENOTER_TABEL_KOLONNETITEL_OVERSKRIFT'\r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n {L('MINENOTER_TABEL_KOLONNETITEL_NOTE')}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n ) : null}\r\n {(lock ? freezedNotes : sortedNotes).map((note) => (\r\n
    \r\n \r\n \r\n onClickSetArchived(note)}\r\n >\r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n {note.title}\r\n \r\n \r\n \r\n \r\n {note.content}\r\n \r\n \r\n \r\n {note.name}\r\n \r\n \r\n {formatDate(note.updated)}\r\n \r\n \r\n \r\n init()}\r\n setShowDelete={(n) => {\r\n setEditNote(n)\r\n setShowDelete(true)\r\n }}\r\n />\r\n \r\n {showDelete &&\r\n editNote &&\r\n editNote.id === note.id ? (\r\n \r\n {\r\n setShowDelete(false)\r\n }}\r\n size=\"xlarge\"\r\n type=\"secondary\"\r\n >\r\n {L('NOTER_REDIGER_FORM_ANNULLER_KNAP')}\r\n \r\n {\r\n onClickDelete(note)\r\n }}\r\n type=\"danger\"\r\n size=\"xlarge\"\r\n >\r\n {L('NOTER_SIDEBAR_SLET-NOTE_KNAP')}\r\n \r\n
    \r\n ) : null}\r\n \r\n \r\n \r\n onClickSetArchived(note)}\r\n >\r\n \r\n \r\n
    \r\n \r\n \r\n {\r\n if (editNote === note) {\r\n setEditNote(undefined)\r\n setShowMore(false)\r\n } else {\r\n setEditNote(note)\r\n setShowMore(true)\r\n }\r\n }}\r\n isOpen={editNote === note && showMore}\r\n >\r\n \r\n {formatDate(note.updated)}\r\n \r\n \r\n {\r\n // if (editNote === note) {\r\n // setEditNote(undefined)\r\n // setShowMore(false)\r\n // } else {\r\n // setEditNote(note)\r\n // setShowMore(true)\r\n // }\r\n // }}\r\n isOpen={editNote === note && showMore}\r\n >\r\n {note.name}\r\n \r\n {\r\n // if (editNote === note) {\r\n // setEditNote(undefined)\r\n // setShowMore(false)\r\n // } else {\r\n // setEditNote(note)\r\n // setShowMore(true)\r\n // }\r\n // }}\r\n isOpen={editNote === note && showMore}\r\n >\r\n \r\n {/* \r\n {note.title}\r\n */}\r\n {note.title}\r\n \r\n \r\n {\r\n // if (editNote === note) {\r\n // setEditNote(undefined)\r\n // setShowMore(false)\r\n // } else {\r\n // setEditNote(note)\r\n // setShowMore(true)\r\n // }\r\n // }}\r\n overflowHidden\r\n // isOpen={editNote === note && showMore}\r\n >\r\n {/* */}\r\n {/* \r\n {note.content}\r\n */}\r\n {\r\n checkNote(note)\r\n }}\r\n // onClick={() => {\r\n // if (editNote === note) {\r\n // setEditNote(undefined)\r\n // setShowMore(false)\r\n // } else {\r\n // setEditNote(note)\r\n // setShowMore(true)\r\n // }\r\n // }}\r\n />\r\n {/* */}\r\n {/* \r\n {editNote === note && showMore\r\n ? ''\r\n : 'vis mere'}\r\n */}\r\n \r\n \r\n init()}\r\n setShowDelete={(n) => {\r\n setEditNote(n)\r\n setShowDelete(true)\r\n }}\r\n />\r\n \r\n {showDelete &&\r\n editNote &&\r\n editNote.id === note.id ? (\r\n \r\n {\r\n setShowDelete(false)\r\n }}\r\n size=\"xlarge\"\r\n type=\"secondary\"\r\n >\r\n {L('NOTER_REDIGER_FORM_ANNULLER_KNAP')}\r\n \r\n {\r\n onClickDelete(note)\r\n }}\r\n type=\"danger\"\r\n size=\"xlarge\"\r\n >\r\n {L('NOTER_SIDEBAR_SLET-NOTE_KNAP')}\r\n \r\n
    \r\n ) : null}\r\n \r\n \r\n ))}\r\n \r\n {notes.length ? (\r\n
    \r\n \r\n Viser {`${notes.length} `} noter\r\n \r\n
    \r\n ) : null}\r\n \r\n )\r\n}\r\n\r\nexport { NotePage }\r\n","import React, { useEffect, useState } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { L } from '../../providers/Lokalise'\r\nimport { Button } from '../Button/Button'\r\n\r\nconst ScrollToTopButton: React.FC = (\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n ref\r\n) => {\r\n const [offset, setOffset] = useState(0)\r\n\r\n useEffect(() => {\r\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\r\n const onScroll = () => setOffset(window.pageYOffset)\r\n // clean up code\r\n window.removeEventListener('scroll', onScroll)\r\n window.addEventListener('scroll', onScroll, { passive: true })\r\n return () => window.removeEventListener('scroll', onScroll)\r\n }, [])\r\n\r\n const scrollToTop = (): void => {\r\n window.scrollTo({ top: 0, left: 0, behavior: 'smooth' })\r\n }\r\n\r\n const mainContent = document.getElementById('main-content')\r\n const viewportHeight = window.innerHeight\r\n const mainContentOffset = mainContent?.offsetTop\r\n const mainContentHeight = mainContent?.clientHeight\r\n const buttonHidden =\r\n (mainContentOffset && offset < mainContentOffset) ?? true\r\n const buttonAbsoloute =\r\n offset + viewportHeight > mainContentOffset + mainContentHeight\r\n\r\n return (\r\n \r\n {L('GENERISK_TIL-TOPPEN_LABEL')}\r\n \r\n )\r\n}\r\n\r\nexport { ScrollToTopButton }\r\n","import { useAtom } from 'jotai'\nimport React, { useEffect, useState } from 'react'\nimport { createUseStyles } from 'react-jss'\n\nimport { Link } from 'react-router-dom'\n\nimport {\n getProfileAtom,\n profileAtom,\n updateProfile,\n} from '../../../api/profile/profile'\nimport { colors } from '../../../theme/palette'\nimport { Circle, CircleIcon, CircleIcon2 } from '../../ui/Circle/Circle'\nimport { CardColumn, Row } from '../../ui/Card/CardColumn'\nimport { Typography } from '../../ui/Typography/Typography'\nimport { baseButton } from '../../../theme/reuseables'\nimport {\n PersonalInfo,\n Close,\n HandshakeFill,\n ChevronLeft,\n Kontigenter,\n Ok,\n Tips,\n Organiseringsprocent,\n Medlemsfordele,\n Materialer,\n Heart,\n} from '../../../assets/icons'\nimport { IUpdateMyProfileData } from '../../modules/EditMyProfile'\nimport { PercentCircle } from '../../ui/PercentLevel/PercentLevel'\nimport { L, L_HTML } from '../../providers/Lokalise'\nimport { Button } from '../../ui/Button/Button'\nimport { Input } from '../../ui/FormElememts/Input'\nimport breakpoints from '../../../theme/breakpoints'\nimport { ImitatorNoAccessWarning } from '../../modules/Imitator/ImitatorNoAccessWarning'\nimport { HeaderLinks } from '../../modules/Headerlinks'\n\nconst useStyles = createUseStyles({\n container: {\n color: colors.black,\n padding: '0 1.5rem',\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\n '&': {\n gridTemplateColumns: '1fr 1fr 1fr',\n padding: '0 0 5rem',\n },\n },\n },\n profileHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '3rem 0',\n },\n nameContainer: {\n display: 'flex',\n flexBasis: '50%',\n alignItems: 'center',\n justifyContent: 'flex-start',\n },\n edit: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n ...baseButton,\n ...{\n cursor: 'pointer',\n margin: '0',\n },\n },\n section: {\n marginBottom: '3rem',\n\n '& > hr': {\n opacity: '0.2',\n margin: '1.25rem 0',\n },\n },\n iconWrapper: {\n position: 'relative',\n width: '90px',\n marginRight: '30px',\n },\n buttons: {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexDirection: 'column',\n '& button': {\n margin: '10px 0',\n width: '100%',\n },\n },\n editIconWrapper: {\n top: '0',\n width: '100%',\n height: '100%',\n position: 'absolute',\n display: 'flex',\n alignContent: 'center',\n justifyContent: 'end',\n },\n confirmButtons: {\n display: 'flex',\n zIndex: '1',\n position: 'relative',\n flexWrap: 'wrap',\n transition: 'all .3s ease-in',\n justifyContent: 'end',\n width: '100%',\n height: '100%',\n alignItems: 'center',\n padding: '20px 0 0',\n },\n headerAreaTop: {\n display: 'flex',\n padding: '1rem 0 .5rem',\n borderBottom: `1px solid ${colors.borderColor}`,\n marginBottom: '1rem',\n },\n headerActions: {\n marginLeft: 'auto',\n flexShrink: 0,\n },\n titleContainer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n fontWeight: 400,\n backgroundColor: colors.white,\n borderRadius: '.5rem',\n marginBottom: '1rem',\n padding: '1rem',\n },\n titleContainerGreen: {\n display: 'flex',\n color: colors.white,\n alignItems: 'center',\n justifyContent: 'flex-start',\n marginBottom: '1rem',\n },\n ContainerTip: {\n color: colors.white,\n justifyContent: 'flex-start',\n backgroundColor: colors.green,\n borderRadius: '.5rem',\n padding: '1rem',\n },\n})\n\nexport const buildRow = (\n value: string | number,\n label: string,\n mailToLinkIcon?: JSX.Element\n): Row => {\n return {\n label,\n value,\n mailToLinkIcon,\n }\n}\n\nconst Organisation: React.FC = () => {\n const classes = useStyles()\n const [data, update] = useAtom(getProfileAtom)\n const [authProfile] = useAtom(profileAtom)\n const [percentageShowEdit, setPercentageShowEdit] = useState(false)\n const [percentageEditValue, setPercentageEditValue] = useState<\n number | undefined\n >(undefined)\n const [percentageOfMembersCovered, setPercentageOfMembersCovered] =\n useState(0)\n const [showImitatorModal, setShowImitatorModal] = useState(false)\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const calcPercentageCovered = (\n numberFoaMemberUserCovers: number,\n totalNumberOfPeopleUserCovers: number\n ): number => {\n return (numberFoaMemberUserCovers / totalNumberOfPeopleUserCovers) * 100\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const calcPercentageCoveredInEditMode = (): number => {\n if (percentageEditValue < data.numberFoaMemberUserCovers || 0)\n return 100\n return (data.numberFoaMemberUserCovers / percentageEditValue) * 100\n }\n\n type linkItemProps = {\n linkText: string\n linkURL: string\n icon?: JSX.Element\n }\n type collapseProps = {\n buttonText: string\n icon?: JSX.Element\n links: linkItemProps[]\n }\n\n const LinkListItem = ({ linkText, linkURL, icon }: linkItemProps): any => {\n return (\n \n \n \n {icon || }\n \n \n\n \n {linkText}\n \n \n )\n }\n const CollapseItem = ({ buttonText, icon, links }: collapseProps): any => {\n const [show, setShow] = useState(false)\n const ref = React.useRef(null)\n\n const toggleCollapse = (): void => {\n if (ref.current) {\n if (show) {\n ref.current.style.height = '0'\n } else {\n const height = ref.current.scrollHeight\n ref.current.style.height = `${height}`\n }\n }\n setShow(!show)\n }\n return (\n \n \n \n \n {icon || }\n \n \n \n {buttonText}\n \n \n \n \n \n \n \n\n {links.map((link) => {\n return (\n \n \n {link.linkText}\n \n \n )\n })}\n \n \n )\n }\n useEffect(() => {\n setPercentageOfMembersCovered(\n data.totalNumberOfPeopleUserCovers !== null\n ? calcPercentageCovered(\n data.numberFoaMemberUserCovers,\n data.totalNumberOfPeopleUserCovers\n )\n : 0\n )\n setPercentageShowEdit(false)\n\n setPercentageEditValue(undefined)\n }, [data])\n\n useEffect(() => {\n if (percentageShowEdit) {\n setPercentageOfMembersCovered(calcPercentageCoveredInEditMode())\n }\n }, [\n calcPercentageCovered,\n calcPercentageCoveredInEditMode,\n percentageOfMembersCovered,\n percentageShowEdit,\n ])\n\n if (!data) return null\n\n return (\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n {L('organisering_titel')}\n \n
    \n
    \n
    \n \n {L('organisering_subtitel')}\n \n
    \n
    \n
    \n \n \n }\n />\n }\n />\n }\n />\n }\n links={[\n {\n linkText: L(\n 'organisering_button_4_sublink_1_text'\n ),\n linkURL: L(\n 'organisering_button_4_sublink_1_url'\n ),\n },\n {\n linkText: L(\n 'organisering_button_4_sublink_2_text'\n ),\n linkURL: L(\n 'organisering_button_4_sublink_2_url'\n ),\n },\n {\n linkText: L(\n 'organisering_button_4_sublink_3_text'\n ),\n linkURL: L(\n 'organisering_button_4_sublink_3_url'\n ),\n },\n {\n linkText: L(\n 'organisering_button_4_sublink_4_text'\n ),\n linkURL: L(\n 'organisering_button_4_sublink_4_url'\n ),\n },\n ]}\n />\n }\n />\n
    \n }\n titleLabel={L(\n 'TRPROFIL_ORGANISERINGSWIDGET_OVERSKRIFT'\n )}\n rows={[\n {\n label: '',\n value: '',\n useContent: true,\n content: (\n <>\n
    \n \n {L(\n 'TRPROFIL_ORGANISERINGSWIDGET_TEKST_1'\n )}\n \n <>\n {\n \n {!percentageShowEdit ? (\n <>\n \n \n {\n if (\n authProfile.isImitator\n ) {\n setShowImitatorModal(\n true\n )\n return\n }\n setPercentageShowEdit(\n true\n )\n }}\n >\n \n \n \n \n
    \n \n ) : null}\n\n {percentageShowEdit ? (\n
    \n
    \n {\n const val =\n e\n .target\n .value\n setPercentageEditValue(\n +val\n )\n\n setPercentageOfMembersCovered(\n calcPercentageCoveredInEditMode()\n )\n }}\n />\n
    \n \n {\n // setShowDelete(false)\n setPercentageShowEdit(\n false\n )\n setPercentageEditValue(\n undefined\n )\n }}\n size=\"xlarge\"\n type=\"secondary\"\n style={{\n flexGrow: 1,\n }}\n >\n Annuller\n \n =\n data.numberFoaMemberUserCovers\n ) ||\n !percentageEditValue ||\n percentageEditValue >=\n 3000\n }\n onClick={() => {\n if (\n authProfile.isImitator\n ) {\n setShowImitatorModal(\n true\n )\n return\n }\n if (\n percentageEditValue\n ) {\n // Try to set value.\n const fieldsToEdit: IUpdateMyProfileData =\n {}\n fieldsToEdit.TotalAntalKollegaerBrugerDaekker =\n percentageEditValue\n const response =\n updateProfile(\n fieldsToEdit\n )\n if (\n response\n ) {\n setTimeout(\n () =>\n update(\n {\n type: 'refetch',\n }\n ),\n 100\n )\n }\n }\n }}\n style={{\n flexGrow: 1,\n }}\n size=\"xlarge\"\n >\n Gem\n \n
    \n
    \n ) : null}\n \n }\n \n\n \n \n {L_HTML(\n 'TRPROFIL_ORGANISERINGSWIDGET_TEKST_2',\n {\n ProcentDaekker: String(\n Math.round(\n percentageOfMembersCovered\n ) || 0\n ),\n AntalFoaMedlemmerBrugerDaekker:\n String(\n data.numberFoaMemberUserCovers\n ),\n TotalAntalKollegaerBrugerDaekker:\n String(\n percentageShowEdit\n ? percentageEditValue ||\n 0\n : data.totalNumberOfPeopleUserCovers\n ),\n }\n )}\n \n \n \n ),\n },\n ]}\n />\n \n
    \n \n \n \n \n \n\n \n {L('organisering_tips_titel')}\n \n
    \n \n {L('organisering_tips_text')}\n \n \n \n \n setShowImitatorModal(false)}\n />\n \n )\n}\n\nexport { Organisation }\n","/* eslint-disable default-case */\r\nimport React, { FC, useEffect } from 'react'\r\nimport { createUseStyles } from 'react-jss'\r\nimport { useAtom } from 'jotai'\r\nimport { Routes, Route, Navigate, useLocation } from 'react-router-dom'\r\nimport Example from './components/Example'\r\nimport { Menu } from './components/Navigation/Menu/Menu'\r\nimport Members from './components/pages/Members'\r\nimport { AllMembers } from './components/pages/AllMembers'\r\nimport { Updates } from './components/pages/Updates'\r\nimport { Workplaces } from './components/pages/Workplaces'\r\nimport './theme/global.css'\r\nimport { useContainerStyles } from './theme/layout'\r\nimport { MyProfile } from './components/pages/MyProfile'\r\nimport { MemberProfile } from './components/pages/MemberProfile'\r\nimport { MemberProfileFromSearch } from './components/pages/MemberProfileFromSearch'\r\nimport { Footer } from './components/ui/Footer/Footer'\r\nimport { authRoles } from './store/auth'\r\nimport { CardWithIconAndMessge } from './components/ui/Card/CardWithIconAndMessge'\r\nimport { LockFill } from './assets/icons'\r\nimport { colors } from './theme/palette'\r\nimport { NotePage } from './components/pages/MyNotes/NotePage'\r\nimport { ScrollToTopButton } from './components/ui/ScrollToTopButton/ScrollToTopButton'\r\nimport breakpoints from './theme/breakpoints'\r\nimport { Organisation } from './components/pages/Organization'\r\n\r\nconst ScrollToTop: FC = ({ children }) => {\r\n const location = useLocation()\r\n useEffect(() => {\r\n window.scrollTo(0, 0)\r\n }, [location])\r\n\r\n return <>{children}\r\n}\r\n\r\nconst useStyles = createUseStyles({\r\n circleIcon: {\r\n width: '62px',\r\n height: '62px',\r\n borderRadius: '50%',\r\n border: `2px solid ${colors.white}`,\r\n backgroundColor: colors.blue300,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: '1rem',\r\n },\r\n content: {\r\n paddingTop: '5rem',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n messageWrapper: {\r\n marginTop: '2.25rem',\r\n },\r\n mobileOnly: {\r\n [`@media (min-width: ${breakpoints.Desktop}px)`]: {\r\n display: 'none',\r\n },\r\n },\r\n})\r\n\r\nconst RoleBasedRoutes: React.FC = (): JSX.Element => {\r\n const [roles] = useAtom(authRoles)\r\n const layout = useContainerStyles()\r\n const classes = useStyles()\r\n\r\n if (roles.indexOf('AktivBruger') === -1) {\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n }\r\n message=\"Siden er begrænset af profilen. Vælg en anden rolle på knappen til højre øverst.\"\r\n />\r\n
    \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\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\n\r\n \r\n\r\n