{"version":3,"sources":["const.js","helpers.js","validators.js","sorters.js","serializers.js","context/menuContext.js","context/user-context.js","fetch.js","urls/frontend.js","components/vars/vars.js","components/common/Text.js","components/common/atoms/Loader.js","static/img/loading.svg","components/common/atoms/LoaderIcon.js","components/common/Box.js","components/common/Breadcrumps.js","components/common/GridCustom.js","components/common/ButtonStyled.js","components/common/ButtonCreatePdf.js","components/common/Container.js","components/common/DateCalendar.js","components/common/FieldWithLabel.js","components/common/Select.js","components/common/DateSelect.js","components/common/DialogCustom.js","components/common/Ellipsis.js","components/common/GridCellCustom.js","components/common/LinearProgressCustom.js","components/common/MenuBasic.js","components/common/MenuDrawer.js","static/img/fe_ue_logos.png","components/common/Message.js","components/common/molecules/AuditData.js","components/common/molecules/CancelSaveButtonsRow.js","components/common/molecules/ErrorList.js","components/common/molecules/FetchErrorWithOkayButton.js","components/common/molecules/FiltersButton.js","components/common/molecules/InfoTextWithIcon.js","components/common/molecules/NotPermittedPage.js","components/common/molecules/PaginatedListHeader.js","components/common/molecules/SortersSelect.js","components/common/MoreOptionsButton.js","components/common/NextStep.js","components/common/TextFieldCustom.js","components/common/NumberTextField.js","components/common/NotFoundPage.js","components/common/OfferStatus.js","urls/api.js","components/common/organisms/DeleteImplementationLevel.js","components/common/organisms/ImplementationLevelForm.js","hooks/permissionsHooks.js","hooks/useFetchApi.js","components/layoutElements/implementationLevelsManagement/Activities.js","components/layoutElements/implementationLevelsManagement/ImplementationLevelTableRow.js","components/layoutElements/implementationLevelsManagement/Institutions.js","components/layoutElements/implementationLevelsManagement/PerspectivesTableRow.js","components/layoutElements/implementationLevelsManagement/Perspectives.js","components/layoutElements/implementationLevelsManagement/Priorities.js","components/layoutElements/implementationLevelsManagement/Programmes.js","components/layoutElements/implementationLevelsManagement/Regions.js","components/layoutElements/implementationLevelsManagement/Subactivities.js","components/common/organisms/ImplementationLevelManagement.js","components/common/organisms/SortersFiltersRow.js","components/common/Pagination.js","components/common/PdfHeader.js","components/common/SkipLinks.js","components/common/Steps.js","components/common/TableCustom.js","components/common/WysiwygEditor.js","components/layoutElements/uzytkownicy/BladLogowania.js","components/layoutElements/uzytkownicy/FiltryUzytkownikow.js","components/layoutElements/common/BaseComponent.js","components/layoutElements/common/DanePodmiotu.js","components/layoutElements/common/FormDanePodmiotuFields.js","foreignCountries.js","components/layoutElements/common/FormKraj.js","components/layoutElements/common/FormMiejscowosc.js","components/layoutElements/common/ProjectNumberSelectsWithPerspectives.js","components/layoutElements/common/Zalacznik.js","components/layoutElements/common/Zalaczniki.js","components/layoutElements/common/ZalacznikiSelect.js","components/layoutElements/uzytkownicy/FormDanePodmiotu.js","components/layoutElements/uzytkownicy/FormOsobaDoKontaktu.js","components/layoutElements/uzytkownicy/Logowanie.js","helpers_permissions.js","components/layoutElements/uzytkownicy/PermissionList.js","components/layoutElements/uzytkownicy/PermissionsMoreOptionButton.js","components/layoutElements/uzytkownicy/PermissionListImplementationLevelCellProgrammePriorityActivity.js","components/layoutElements/uzytkownicy/PermissionListImplementationLevelCell.js","components/layoutElements/uzytkownicy/PermissionListRow.js","components/layoutElements/uzytkownicy/PermissionsHistoryListRow.js","components/layoutElements/uzytkownicy/PermissionsHistory.js","components/layoutElements/uzytkownicy/UserPermissionsListGrantedCell.js","components/layoutElements/uzytkownicy/UserPermissionsListRow.js","components/layoutElements/uzytkownicy/PermissionUsers.js","components/layoutElements/uzytkownicy/SearchUserForm.js","components/layoutElements/uzytkownicy/UserHeader.js","components/layoutElements/uzytkownicy/UserPermissionsFormCommonFields.js","components/layoutElements/uzytkownicy/UserPermissionsAdministrationForm.js","components/layoutElements/uzytkownicy/UserPermissionsImplementationLevelFields.js","components/layoutElements/uzytkownicy/UserPermissionsImplementationLevelForm.js","components/layoutElements/uzytkownicy/UserPermissionsRemovingPermissionDialog.js","components/layoutElements/uzytkownicy/Permissions.js","components/layoutElements/uzytkownicy/ProfilUzytkownika.js","components/layoutElements/uzytkownicy/SessionDialog.js","components/layoutElements/uzytkownicy/Sesja.js","components/layoutElements/uzytkownicy/UserContactPersonsList.js","components/layoutElements/uzytkownicy/UserDataForm.js","components/layoutElements/uzytkownicy/UserEconomicSubjectData.js","components/layoutElements/uzytkownicy/User.js","filters.js","components/layoutElements/uzytkownicy/Uzytkownicy.js","components/layoutElements/uzytkownicy/Users.js","components/layoutElements/zarzadzanieTrescia/DraftToComponents.js","components/layoutElements/zarzadzanieTrescia/Ciasteczka.js","components/layoutElements/zarzadzanieTrescia/CiasteczkaFront.js","components/layoutElements/zarzadzanieTrescia/DraftToPdf.js","components/layoutElements/zarzadzanieTrescia/FormCiasteczka.js","components/layoutElements/zarzadzanieTrescia/FormKomunikat.js","components/layoutElements/LandingPage.js","context/advertisementContext.js","components/layoutElements/ogloszenia/FormPublikowanie.js","components/layoutElements/ogloszenia/AlreadyPublishedInfo.js","components/layoutElements/ogloszenia/BaseStepComponent.js","components/layoutElements/ogloszenia/FormKryteriumOceny.js","components/layoutElements/ogloszenia/Zamowienie.js","components/layoutElements/ogloszenia/StepCzesciKryteria.js","components/layoutElements/ogloszenia/hoc/withStepConfiguration.js","components/layoutElements/ogloszenia/StepPozostale.js","components/layoutElements/ogloszenia/FormKodCPV.js","components/layoutElements/ogloszenia/KodyCPV.js","components/layoutElements/ogloszenia/FormMiejsceRealizacji.js","components/layoutElements/ogloszenia/MiejsceRealizacji.js","components/layoutElements/ogloszenia/MiejscaRealizacji.js","components/layoutElements/ogloszenia/FormPrzedmiotZamowienia.js","components/layoutElements/ogloszenia/PrzedmiotZamowienia.js","components/layoutElements/ogloszenia/StepPrzedmiotZamowienia.js","components/layoutElements/ogloszenia/FormHarmonogram.js","components/layoutElements/ogloszenia/Harmonogramy.js","components/layoutElements/ogloszenia/StepTerminy.js","components/layoutElements/ogloszenia/FormWarunekUdzialu.js","components/layoutElements/ogloszenia/WarunkiUdzialu.js","components/layoutElements/ogloszenia/StepWarunki.js","components/layoutElements/ogloszenia/StepZalaczniki.js","components/layoutElements/ogloszenia/FormOgloszenie.js","components/layoutElements/ogloszenia/Ogloszenia.js","components/layoutElements/zarzadzanieTrescia/PomocEkranowa.js","components/layoutElements/projekty/Form.js","components/layoutElements/projekty/Ogloszenie.js","components/layoutElements/projekty/Projekt.js","components/layoutElements/projekty/Projekty.js","components/layoutElements/newsletter/NewsletterSettingsFilter.js","components/layoutElements/newsletter/NewsletterSettings.js","components/layoutElements/newsletter/FavoritesFilters.js","components/layoutElements/newsletter/Favorites.js","components/layoutElements/zarzadzanieTrescia/TrescPreview.js","components/layoutElements/zarzadzanieTrescia/FormPomoc.js","components/layoutElements/zarzadzanieTrescia/FormRegulamin.js","components/layoutElements/zarzadzanieTrescia/FormTrescOgolna.js","components/layoutElements/zarzadzanieTrescia/Komunikat.js","components/layoutElements/zarzadzanieTrescia/Komunikaty.js","components/layoutElements/zarzadzanieTrescia/KomunikatFront.js","components/layoutElements/zarzadzanieTrescia/KomunikatyFront.js","static/fonts/Roboto-Bold.ttf","static/fonts/Roboto-Italic.ttf","static/fonts/Roboto-Regular-with-special.ttf","components/vars/pdfStyles.js","components/layoutElements/zarzadzanieTrescia/PdfWithDraftContent.js","components/layoutElements/zarzadzanieTrescia/Pomoc.js","components/layoutElements/zarzadzanieTrescia/PomocUsun.js","components/layoutElements/zarzadzanieTrescia/Pomoce.js","components/layoutElements/zarzadzanieTrescia/PomoceFrontPdf.js","components/layoutElements/zarzadzanieTrescia/PomoceFront.js","components/layoutElements/zarzadzanieTrescia/PomocFront.js","components/layoutElements/zarzadzanieTrescia/Regulamin.js","components/layoutElements/zarzadzanieTrescia/Regulaminy.js","components/layoutElements/zarzadzanieTrescia/TresciOgolne.js","components/layoutElements/zarzadzanieTrescia/TrescOgolna.js","components/layoutElements/zarzadzanieTrescia/ZarzadzanieTrescia.js","components/layoutElements/zarzadzanieTrescia/ZoltyPasekFront.js","components/layoutElements/DeklaracjaDostepnosci.js","components/layoutElements/management/AdvertisementDataFilters.js","components/layoutElements/management/AdvertisementListRow.js","components/layoutElements/management/AdvertiserDataFilters.js","components/layoutElements/management/UserDataFilters.js","components/layoutElements/management/AdvertisementsFilters.js","components/layoutElements/management/Advertisements.js","components/layoutElements/management/EditProjectForm.js","components/layoutElements/management/ProjectListRow.js","components/layoutElements/management/ProjectsFilters.js","components/layoutElements/management/Projects.js","components/layoutElements/ogloszenia/FiltryWyszukiwarki.js","components/layoutElements/ogloszenia/FormRozstrzygniecieWariant.js","components/layoutElements/ogloszenia/FormCzescRozstrzygniecia.js","components/layoutElements/oferty/FiltryOfert.js","components/layoutElements/oferty/FormWariant.js","components/layoutElements/oferty/FormOfertaFields.js","components/layoutElements/oferty/FormOferta.js","components/layoutElements/oferty/Oferta.js","components/layoutElements/oferty/OfertaBox.js","components/layoutElements/oferty/OfertaPreview.js","components/layoutElements/oferty/Oferty.js","components/layoutElements/oferty/OfertyOwnerClosedStatus.js","components/layoutElements/oferty/OfertyOffererClosedStatus.js","components/layoutElements/oferty/OfertyOffererPublishedStatus.js","components/layoutElements/oferty/OfertyResolvedStatusPdf.js","components/layoutElements/oferty/OfertyOwnerResolvedStatus.js","components/layoutElements/oferty/OfertyOffererResolvedStatus.js","components/layoutElements/oferty/OfertyOwnerPublishedStatus.js","components/layoutElements/ogloszenia/FormRozstrzygniecie.js","components/layoutElements/ogloszenia/ListaWersji.js","components/layoutElements/ogloszenia/ManageAdvertisementButtons.js","components/layoutElements/pytania/PytaniaForOgloszeniePdf.js","components/layoutElements/pytania/BasePytaniaForOgloszenieWidthPdf.js","components/layoutElements/pytania/FormOdpowiedz.js","components/layoutElements/pytania/FormPytanie.js","components/layoutElements/pytania/Pytanie.js","components/layoutElements/pytania/PytaniaForOgloszenieAnnouncementOwner.js","components/layoutElements/pytania/PytaniaForOgloszenieAnonymous.js","components/layoutElements/pytania/PytaniaForOgloszenieLoggedIn.js","components/layoutElements/ogloszenia/OgloszenieDetails.js","components/layoutElements/ogloszenia/OgloszeniePdf.js","components/layoutElements/ogloszenia/Ogloszenie.js","components/layoutElements/ogloszenia/Wyszukiwarka.js","components/layoutElements/newsletter/Notifications.js","components/layoutElements/newsletter/Newsletter.js","components/layoutElements/subscriptions/UnsubscribeSuccess.js","components/layoutElements/subscriptions/Subscriptions.js","components/Routes.js","components/App.js","static/img/FE_footer.png","serviceWorker.js","index.js"],"names":["SELECT_CLASSNAME","SELECT_INVALID_CLASSNAME","CZY_PROJEKT_CHOICES","PROJECTS_MANAGEMENTS_CHOICES","SEARCH_DATE_CHOICES","SEARCH_CUSTOM_NAME","ADVERTISEMENT_STATUS_FILTERS_CHOICES","map","choice","value","label","MIEJSCE_REALIZACJI_OLD_BK_DICT","NIP_CHARS_IMPORTANCE","PESEL_CHARS_IMPORTANCE","EKRANY","EKRANY_DICT","e","id","EKRANOWA","OGOLNA","USER_STATUS_CHOICES","RODZAJ_ADRESU_CHOICES","RODZAJ_ADRESU_FILTERS_CHOICES","TYP_NUMERU_IDENTYFIKACYJNEGO","TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES","TOKEN_COOKIE_NAME","USER_DATA_COOKIE_NAME","OFERTA_STATUSES","draft","nazwa","submitted","withdrawn","emptyValueList","computeProgress","additionalAttrFilledLen","arguments","length","undefined","additionalAttrLen","filledInputsLen","inputs","document","querySelectorAll","$i","startsWith","includes","parentNode","firstChild","textContent","selectInputs","i","multiselectInputs","selectedOptions","inputsLen","getLastTemporaryId","attribute","subAttributeName","temporaryIds","obj","o","parseInt","temporaryId","Math","max","getLastTemporaryIdFromList","list","fillWithLeadingZero","toString","repeat","datetimeStringToISO","date","replace","dateToString","getFullYear","getMonth","getDate","dateToStringOldBK","datetimeToString","getHours","getMinutes","dateStringToYearMonth","dateString","substring","listOrEmpty","isNotEmpty","stringOrEmpty","setCustomSelectAttributes","selectRef","inputId","current","querySelector","getAttribute","setAttribute","setCustomInputAttributes","inputRef","setAttr","button","style","right","setFocusOnElement","elRef","focus","triggerBodyClick","click","getCookieValue","name","cookie","split","n","v","trim","getAuthTokenCookieValue","authTokenCookieValue","decodeURIComponent","deleteCookie","callback","refreshCookie","maxAge","refreshTimerAfterRequest","statusCode","window","sessionComponent","showUnauthorizedMessage","refreshTimerAfterSativaRequest","handleRefreshSessionTime","countWysiwygChars","content","counter","block","blocks","text","extractYoutubeSrc","url","long_domain","URL","hostname","params","URLSearchParams","searchParams","videoId","pathname","get","splitedPath","_boolToInt","paramString","_timeInSeconds","timeString","match","exec","durationGroups","groups","duration","timeDict","days","hours","minutes","seconds","key","multipleValue","Object","entries","allowedParams","iframeParamName","convertFunc","default_","iframeParams","p","paramStr","keys","protocol","getRodzajAdresuDict","kraj","generatePdfDocument","async","documentComponent","fileName","creatingCallback","blob","pdf","toBlob","saveAs","saveFileFromApi","result","fetch","headers","getBreakIndex","charsList","slicedLine","splittingCharsIndexes","char","lastIndexOf","splitLineByChar","textLength","lines","line","lineLength","entersInLine","isEnter","test","push","missingText","enterIndex","indexOf","realMissingText","breakIndex","roundStringTo","splittedValue","firstPart","slice","padEnd","redirectToLoginView","sessionStorage","setItem","location","search","href","slugify","toLowerCase","sortOrderItems","orderItem1","orderItem2","getSortedOrderItemsFromOrder","orderList","orderItems","order","orderItem","przedmiotyZamowienia","sort","getOrderItemsLength","reformatDanePodmiotu","data","assign","typNumeruIdentyfikacyjnego","filter","t","rodzajAdresu","adres","getPricesRange","prices","pricesDict","maxPriceLength","price","padStart","paddedPriced","min","isAdvertisementLocked","statusDict","checkHasPrev","pageNumber","checkHasNext","paginatedBy","total","ceil","sortProgrammes","programme1","programme2","code","localeCompare","sortImplementationLevelByNumberCode","obj1","obj2","hasSubactivities","perspectiveData","activity_types","activityTypes","hasPerspectiveRegions","hasPerspectiveInstitutions","getActivityUrlByPerspectiveData","getActivityChildUrlByPerspectiveData","serializePerspectiveForSelect","perspectives","getUserFullName","forename","imie","surname","nazwisko","serializeAuditData","createdAt","dataUtworzenia","created_at","createdBy","ktoUtworzyl","created_by","modifiedAt","dataModyfikacji","modified_at","modifiedBy","ktoModyfikowal","modified_by","generateUUIDV4","c","crypto","getRandomValues","Uint8Array","module","exports","checkRequired","checkRequiredPrzedmiotZamowienia","checkListRequired","checkNabor","projectsSelected","checkProjekty","msg","checkSelectRequired","checkDatesDependency","start","end","Date","checkEmail","checkSimilarValueOnList","valueList","message","checkSimilarTitleValueOnList","titleValidatorData","validators","formStep","projectsValidationData","enrollmentValidatorData","contactPersonsValidatorData","advertisementValidators","tytul","projekty","nabor","osobyDoKontaktu","zamowienia_kryteriaOceny","przedmiotyZamowienia_harmonogramy","przedmiotyZamowienia_warunkiUdzialu","publishedAdvertisementOwnerValidators","publishedAdvertisementAdminValidators","zamowienieValidators","kryteriaOceny","kryteriumOcenyValidators","opis","przedmiotZamowieniaValidators","kategoria","podkategoria","kodyCPV","miejscaRealizacji","publishedPrzedmiotZamowieniaValidators","harmonogramValidators","koniecRealizacji","dependent","warunekUdzialuValidators","typ","zalacznikValidators","nested","validateAdvertisementBaseAttributes","advertisement","validatorsDict","z","zamowienia","errors","stepErrors","attrName","error","validateZamowienieAttributes","ogloszenie","validateFieldAttributes","validatePrzedmiotyZamowieniaInZamowienie","validateSzacunkowaWartosc","zamowienie","szacunkowaWartosc","validateKryteriumOcenyAttributes","kryteriumOceny","validatePrzedmiotZamowieniaBaseAttributes","przedmiotZamowienia","isAlreadyPublished","validateHarmonogramAttributes","harmonogram","validateWarunekUdzialuAttributes","warunekUdzialu","validateZalacznikAttributes","zalacznik","objectList","fieldValidators","stepName","attr","validateWysiwygEditor","checkWysiwygEditorRequired","validateSearchFilters","filters","isValid","status","type","from","to","validatePersonalData","isAdresPart","controlSum","checkNip","numerIdentyfikacyjny","checkPesel","checkKodPocztowy","kodPocztowy","validateOsobaDoKontaktu","ADVERTISEMENTS_SORTING_VALUES","PROJECTS_SORTING_VALUES","sortAdvertisements","advertisementList","sortingValue","o1","o2","splittingValue","value1","value2","attribbuteName","sortByAdvertisementNumber","nr1","nr2","year1","userId1","announcementId1","year2","userId2","announcementId2","sortProjects","projectList","p1","p2","sortProgrammeFilter","sortMiejsceRealizacjiFilter","mr1","mr2","v1","v2","setInitialSorterByUrlParam","urlParams","sorters","defaultSorter","sorter","mapServerFront","account_disabled","account_disabled_at","accountDisabled","active","activities","activity","added_at","address","address_type","addressType","advertisements","advertiser_address_details","advertiser_name","answer","attached_advertisements_amount","attachments","category","children","chosen_offer_variant","chosenOfferVariant","comment","commune","contact_persons","country","cpv_items","current_exists","description","dictionaries","economic_subject","economicSubject","email","end_at","enrollment","enrollment_number","estimated_value","evaluation_criteria","expiration_date","file","file_to_load","for_publication_exists","fulfillment_place","fulfillment_places","full_number","general_content","general_content_items","has_advertisements","has_draft","has_draft_advertisements","has_published_advertisements","headline","help","helps","identification_number","identification_number_type","identifier","institution","institutionNumber","is_admin","is_author","is_created_by_advertiser","is_mine","isAdmin","is_protocol","isProtocol","is_refused","is_variant","isVariant","last_publicated_version_id","last_version","locality","no_offer_selected","noOfferSelected","number","number_description","order_node","order_nodes","orderNode","orderNodes","orders","offers","offerset","offersets","order_id","order_items","order_temporary_id","orders_amount","original_content","page","parent","partial_offer_allowed","partial_payment","participation_conditions","perspective","phone_number","planned_sign_date","postcode","poviat","price_criterion","priorities","priority","programme","programmes","project","projects","projects_enrollments","publication_date","question","questions","refusedOfferSets","region","regulations","relatives","relatives_pointing_to_current","screen","settlement","slug","start_at","statement","statements","street","subcategories","subcategory","submission_deadline","supplementary_orders","tax_identification_number","temporary_id","timetable_items","title","terms_of_contract_change","teryt_items","user","userEmail","userForename","userSurname","users","warranty_period","variants","version","voivodeship","yellow_stripe","osoba","account_type","mapFrontServer","aktualnyIstnieje","cena","czyAktywny","czyDopuszczalnaOfertaCzesciowa","czyKryteriumCenowe","czyMaKopieRobocza","czyWariantowe","czyWystepujePlatnoscCzesciowa","czyZoltyPasek","daneAdresoweOgloszeniodawcy","danePodmiotu","dataDodania","dataOpublikowania","dataWaznosci","dataZablokowaniaKonta","doPublikacjiIstnieje","dzialania","dzialanie","dzieci","ekran","emailUzytkownika","gmina","harmonogramy","identyfikator","imieUzytkownika","instytucja","jestAutorem","jestProtokolem","kod","komentarz","komunikat","komunikaty","kontoZablokowane","liczbaZamowien","miejscowosc","naglowek","nazwiskoUzytkownika","nip","numer","numerDomu","numerNaboru","odpowiedz","oferty","ofertyDoUsuniecia","ogloszenia","okresGwarancji","osiePriorytetowe","osPriorytetowa","pakietOfert","perspektywa","planowanyTerminPodpisaniaUmowy","plik","plikDoWgrania","poczatekRealizacji","podkategorie","pomoc","pomoce","powiat","powiazane","powiazaneDlaObecnego","programOperacyjny","programyOperacyjne","projekt","pytania","pytanie","regulaminy","rozdzialNadrzedny","slowniki","strona","numerInstytucji","numerTelefonu","terminOfert","teryty","tresc","trescOgolna","tresciOgolne","trescOryginalna","ulica","uzytkownicy","warianty","warunkiUdzialu","warunkiZmianyUmowy","wojewodztwo","wybranyWariant","zadnaOfertaWybrana","zamowieniaUzupelniajace","zamowieniaNodes","zamowienieId","zamowienieNode","zamowienieTemporaryId","zalaczniki","accountType","serializeObject","object","toServer","nonRecursiveKeys","dateWithTime","serializationDct","serializedObject","serializedName","Array","isArray","serializedObjectList","serializeObjectList","date_","serializeDate","getSerializedObject","config","mapToCamelCaseName","doNotTranslateNames","dateAttributes","dateTimeAttributes","dateTimeToLastMinuteAttributes","removeTemporaryId","mapToCamelCase","getSerializedList","getSerializedDate","part","index","charAt","toUpperCase","join","serializeJsonPathList","serializedList","element","serializeJsonPathObject","findJsonPathErrors","path","getSerializedNestedErrorsFromServer","pathPrefix","nestedFields","attrBasePathPrefix","errors_","baseAttrErrors","objectErrors","subAttrName","subAttrErrors","getSerializedObjectErrorsFormServer","serializedErrors","attrErrors","getSerializedErrorsFromServer","forEach","jp","ERRORS_SERVER_FRONT","translateErrorMessage","serializeOrderItemCategories","categoriesList","categories","cat","subcat","serializeUrlParams","serializationDict","serializedDict","val","MenuContext","createContext","menuLinkKey","refreshBadgesCount","updateMenuKey","refreshBadges","MenuProvider","React","Component","constructor","props","super","this","setState","prevState","state","render","createElement","Provider","Consumer","EMPTY_USER","advertisementManagerType","isAuthor","EMPTY_AUTH","expire","UserContext","auth","permissions","set","setAdvertisementManagerType","refresh","refreshTimer","logout","removePermission","UserProvider","_this","meta","serializePermission","adProjEnrAdm","adProjectEnrollments","usersAdm","usersAdministration","usersAdmUsersAdministration","usersAndPermissionsPreviewListUsers","previewListUsers","usersAdmPermissionsAdministration","permissionsAdministration","usersAndPermissionsPreviewListUsersAuthorized","previewListUsersAuthorized","contentAdm","contentAdministration","contentAdmContentAdministration","contentAdmPermissionsAdministration","implementationLevelsDictionaryAdm","implementationLevelsDictionaryAdministration","implementationLevelsDictionaryAdmPermissionsAdministration","implementationLevelsDictionaryAdmImplementationLevelsDictionaryAdministration","fullUsersAndPermissions","usersPermissionsManagement","functionality","functionalityManagement","permissionsManagement","blockingUsers","projectsEnrollments","projectsEnrollmentsAdministration","searchNPreviewData","advertisementAdministration","fullContent","values","generalContentCookiesRegulation","contentPermissionsManagement","addImplementationLevelPermission","implementationLevelsDictionaryPermissionsManagement","previewDictionaries","previewData","editingDictionaries","editData","first_name","last_name","permissionName","fetchApi","method","body","callbackSuccess","callbackError","callbackIncorrectStatus","callbackShowErrors","xhr","XMLHttpRequest","urlParamsPart","k","subvalue","open","encodeURI","setRequestHeader","timeout","ontimeout","onerror","onload","success","jsonData","JSON","parse","responseText","send","stringify","fetchSativaApi","URLS","home","pattern","login","loginError","advertisementsSearch","advertisementsNew","advertisementsDetails","getUrl","advertisementId","advertisementsDetailsDraft","advertisementsDetailsVersion","advertisementsEdit","newsletter","accessibility","usersDetails","userId","usersMyProfile","managementProjects","managementAdvertisements","managementContents","managementContentsHelps","managementContentsHelpsNew","managementContentsHelpsEdit","managementContentsHelpsDetails","managementContentsRegulations","managementContentsRegulationsCurrent","managementContentsRegulationsForPublishing","managementContentsRegulationsNew","managementContentsRegulationsEdit","managementContentsCookies","managementContentsCookiesNew","managementContentsCookiesEdit","managementContentsGeneralContents","managementContentsGeneralContentsEdit","managementContentsGeneralContentsDetails","managementContentsStatements","managementContentsStatementsNew","managementContentsStatementsEdit","managementContentsStatementsDetails","managementPerspectives","managementProgrammesForPerspective","perspectiveId","managementPrioritiesForProgramme","programmeId","managementSubactivitiesForPriority","priorityId","managementActivitiesForPriority","managementRegionsForSubactivity","activityId","managementInstitutionsForActivity","helpsDetails","subscriptions","statementsDetails","sativaUsersDetails","userIdentifier","colors","primary","secondary","warn","background","disabled","surface","onPrimary","onSecondary","onSurface","onError","darkBg","textPrimaryOnBackground","textSecondaryOnBackground","textHintOnBackground","textDisabledOnBackground","textIconOnBackground","textPrimaryOnLight","textSecondaryOnLight","textHintOnLight","textDisabledOnLight","textIconOnLight","textPrimaryOnDark","textSecondaryOnDark","textHintOnDark","textDisabledOnDark","textIconOnDark","customSelectStyles","input","styles","color","minWidth","fontSize","option","provided","isFocused","isSelected","backgroundColor","fontWeight","borderWidth","singleValue","placeholder","multiValue","multiValueLabel","multiValueRemove","cursor","Text","accentHeader","className","errorColorReverse","htmlFor","info","labelFor","mainHeader","sectionHeader","tag","use","otherProps","errorTextStyle","errorColorReverseStyle","headerTextStyle","infoTextStyle","Typography","marginTop","marginBottom","Loader","role","LoaderIcon","src","loaderIcon","alt","Box","ariaLabelMoreOptions","boxTag","boxWithMenu","flexiblewidth","fullwidth","headerTag","invalid","selected","subtitle","titleOneRow","titleTwoRows","titleWithSubtitle","colorsToolbar","setOpen","useState","toolbar","menuSection","ToolbarSection","alignEnd","MenuSurfaceAnchor","Button","onClick","currentTarget","blur","unelevated","Icon","icon","MenuSurface","onClose","evt","Toolbar","ToolbarRow","alignStart","ToolbarTitle","theme","zIndex","marginRight","size","boxClassName","Elevation","ThemeProvider","options","Breadcrumps","isFront","notZarzadzanieTrescia","breadcrumpsClassName","Link","GridCustom","center","centerHorizontal","centerVertical","flexBottom","flexEnd","flexS","flexM","flexL","flexTop","fullheight","keyName","noWrap","gridClassName","GridTag","ButtonStyled","add","cancel","lite","next","noMargin","prev","print","remove","removeFull","save","buttonIconStyle","cancelBtnStyle","disabledBtnStyle","prevBgStyle","primaryBtnStyle","outlineBtnStyle","removeFullBgStyle","danger","outlined","ripple","ButtonCreatePdf","pdfCreatingOn","pdfCreatingButtonLabel","Container","containerTag","titleTag","containerClassName","registerLocale","pl","WEEKDAYS","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday","MONTHS","January","February","March","April","May","June","July","August","September","October","November","December","isSameDay","date1","date2","dfIsSameDay","ExtendedDatePicker","DatePicker","componentDidUpdate","prevProps","calendar","this_","replaceDays","preSelection","openToDate","DateCalendar","handleCalendarOpen","onCalendarOpen","handleTranslateCalendar","handleMonthChange","handleChange","translateCalendarFields","onChange","replacePartOfAriaLabel","englishPhrase","polishPhrase","parentRef","calendarField","newAriaLabel","showMonthYearPicker","weekDay","month","day","year","day_","month_","ariaLabel","ariaDescribedby","dateCalendarId","dateFormatCustom","dateFormat","dateName","maxDate","minDate","showTimeSelect","showTimeSelectOnly","timeIntervals","timeCaption","customInput","TextField","isClearable","NaN","locale","placeholderText","onCalendarClose","onMonthChange","FieldWithLabel","fieldWithLabelClassName","useEffect","ref","instructionsAriaMessage","event","context","isSearchable","isMulti","isDisabled","valueEventAriaMessage","Select","ReactSelect","componentDidMount","select","announceAriaLiveContext","_ref4","ariaLiveContext","announceAriaLiveSelection","_ref5","ariaLiveSelection","constructAriaLiveMessage","selectValue","focusedValue","focusedOption","menuIsOpen","inputValue","screenReaderStatus","focusedValueMsg","_ref","getOptionLabel","valueFocusAriaMessage","focusedOptionMsg","_ref2","optionFocusAriaMessage","resultsMsg","_ref3","screenReaderMessage","resultsAriaMessage","count","countOptions","renderDropdownIndicator","DropdownIndicator","components","innerProps","onMouseDown","onDropdownIndicatorMouseDown","onTouchEnd","onDropdownIndicatorTouchEnd","indicatorId","commonProps","renderClearIndicator","ClearIndicator","isLoading","hasValue","clearValue","CHOICES_DICT","ch","DateSelect","odInputRef","createRef","doInputRef","Fragment","selectedOption","updateDate","selectAriaLabel","noOptionsMessage","DialogCustom","ariaLabelledby","dialogRef","dialogTitle","dialogTitleError","onKeyDown","DialogTitle","Dialog","preventOutsideDismiss","ev","FocusTrap","focusTrapOptions","fallbackFocus","tabIndex","DialogContent","Ellipsis","lineHeight","ellipsisRef","ellipsisMaxHeight","ellipsis","setEllipsisContainer","longText","setLongText","clientHeight","maxHeight","overflow","bottom","height","GridCellCustom","fill","customRef","gridCellClassName","flexGrow","LinearProgressCustom","classNameInfo","progress","progressBarClassName","progressBarInfoClassName","LinearProgress","MenuBasic","forwardRef","Theme","link","ListItem","disabledFrom","ListItemGraphic","addProgressIcon","currentMenuLink","iconStyle","MenuDrawer","mobile","openMenu","onMenuClose","useContext","useLocation","badges","setBadges","response","Drawer","modal","dismissible","DrawerContent","display","flexDirection","linkTo","ListItemText","linkName","my_advertisement_badge_count","my_offer_set_badge_count","favorite_advertisement_badge_count","Badge","align","renderBadge","ListDivider","textAlign","renderUeLogo","Message","messageIcon","messageTitle","basicClassName","EMPTY_VALUE","AuditData","boxProps","CancelSaveButtonsRow","disabledSave","cancelText","saveText","onCancel","onSave","ErrorList","containerId","errorList","FetchErrorWithOkayButton","buttonLabel","infoMsg","onClickOkay","FiltersButton","filtersCounter","filteringLabel","onOpenFilters","InfoTextWithIcon","NotPermittedPage","PaginatedListHeader","SortersSelect","selectedSort","sortingLabel","sortingValues","onChangeSort","MoreOptionsButton","menuContentRef","useRef","menuAriaLabel","anchorCorner","onOpen","handleOpen","NextStep","prevStep","stepTitle","nextStepClassName","TextFieldCustom","isInputFocused","isIconClicked","blurInputTimeout","handleBlurInput","bind","handleClickIcon","handleFocusInput","componentWillUnmount","clearTimeout","onClear","onBlur","setTimeout","onFocus","props_","autoFocus","clearFieldContext","NumberTextField","handleBlur","target","handleKeyPress","valueLenth","keyIndex","selectionStart","preventDefault","comaIndex","handlePaste","pastedData","clipboardData","getData","isFieldInvalid","fieldId","parentTemporaryId","characterCount","formLocked","maxLength","onKeyPress","onPaste","NotFoundPage","OfferStatus","statusIcon","statusName","API_URLS","usersFindUser","usersPermissionsAdvertisementsProjectsEnrollments","usersPermissionsAdvertisementsProjectsEnrollmentsDetails","usersPermissionsDictionaries","usersPermissionsDictionariesDetails","usersPermissionsContent","usersPermissionsContentDetails","usersPermissionsUsers","usersPermissionsUsersDetails","usersPermissionsContentDictionariesUsers","usersPermissionsHistoryAdvertisementsProjectsEnrollments","usersPermissionsHistoryContentDictionariesUsers","usersPermissionsHistoryContent","usersPermissionsHistoryDictionaries","usersPermissionsHistoryUsers","helpAdmin","helpAdminDictionaries","helpAdminDetails","helpId","statementsAdmin","statementsAdminDetails","statementId","cookiesAdmin","generalContentAdmin","generalContentAdminDetails","generalContentId","regulationsAdmin","regulationsAdminDetails","perspectivesAdmin","programmesAdmin","programmesAdd","programmesEdit","prioritiesAdmin","prioritiesAdd","prioritiesEdit","activitiesAdmin","activitiesAdd","activitiesEdit","regions","regionsAdmin","regionsAdd","regionsEdit","regionId","institutions","institutionsAdmin","institutionsAdd","institutionsEdit","institutionId","DeleteImplementationLevel","apiUrlName","item","parentFormLabel","RelatedObjectsExistInfoComponent","titleFormLabel","onDelete","deletingOn","setDeletingOn","fetchError","setFetchError","objectRelatedWithOthers","setObjectRelatedWithOthers","xhrFetch","responseData","responseErrors","allFields","abort","DEFAULT_DATA","ImplementationLevelForm","addApiUrlName","additionalSaveData","codeMaxLength","editApiUrlName","originalData","isNew","setData","savingOn","setSavingOn","setErrors","handleChangeAttribute","prevValue","isCodeInvalid","isNameInvalid","required","useCheckPermissionExists","checkingExistedPermissionOn","setCheckingExistedPermissionOn","fetchDataDict","setExistsErrorOn","setPermissions403errorOn","existingPermissionData","setExistedPermissionData","callbackPermissionDoesNotExists","authorized","permission","useOneTimeFetchApi","fetchData","serializeFetchDataFunction","updatedData","message403error","callback403","requestId","loadingOn","setLoadingOn","prevData","uzytkownik","sortUrlParams","param1","param2","usePaginatedFetchApi","getFiltersFetchData","objectsAttrName","baseApiUrl","serializationUrlDictToPolish","serializerConfig","history","useHistory","permissionsCheckingOn","setPermissionsCheckingOn","notPermitted","setNotPermitted","serializedUrlData","dataWithoutAll","urlWithParams","limit","data_","objects","hasPrev","hasNext","updateData","objectId","usePutFormFetchApi","callbackPutSuccess","callbackObjectExists","defaultSaveBtnText","saveBtnText","setSaveBtnText","saveMsgTimeout","Activities","useParams","ImplementationLevelManagement","addItemButtonLabel","apiUrl","auditDataBoxTitle","auditDataObjectName","getParentFormLabel","programmeCode","priorityCode","activityCode","listObjectName","rowComponentProps","getItemLinkFunction","withLink","showAuditData","tableName","ImplementationLevelTableRow","onEdit","DataTableRow","DataTableCell","Institutions","PerspectivesTableRow","Perspectives","addItemButtonVisible","RowComponent","sortItemsFunction","tableHeaderList","hasSubactivities_","Priorities","Programmes","getItemLinkUrl","Regions","Subactivities","formOn","setFormOn","editedItem","setEditedItem","setRequestId","deletedItem","setDeletedItem","items","useMemo","items_","handleSetEditedItem","handleUpdateRequestId","handleSetDeletedItem","editingDictionariesPermission","levelName","levelUrl","levelData","TableCustom","SortersFiltersRow","filtersAreOn","FiltersComponent","onCloseFilters","onUpdateFilters","Pagination","currentPage","handleChangePage","oneRow","PdfHeader","flexContainerStyle","metaSectionStyle","textInfoStyle","View","fixed","totalPages","StyleSheet","create","paddingHorizontal","paddingVertical","paddingBottom","marginHorizontal","borderBottomWidth","borderBottomColor","borderBottomStyle","justifyContent","fontStyle","SkipLinks","Steps","elementToFocusRef","onPrevClick","prevLabel","onNextClick","nextLabel","DataTable","DataTableContent","DataTableHead","tableHeader","DataTableHeadCell","DataTableBody","WysiwygEditor","initialContentState","handleContentStateChange","contentState","onContentStateChange","wysiwygClassName","Editor","wrapperClassName","editorClassName","stripPastedStyles","BladLogowania","FiltryUzytkownikow","handleApplyFilters","handleChangeFilter","updateFilters","s","closeFilters","BaseComponent","message403","preState","formPreState","initializingOn","pageNotFound","pageNotPermitted","getAdditionalState","getFormAdditionalState","postState","formPostState","handleFetchSuccess","handleFetchError","handleFetchIncorrectStatus","setAdditionalHandlers","scrollTo","fetchInitialData","getFetchError","getFetchIncorrectStatusError","getFetchUrl","getFetchMethod","getFetchData","Error","renderFetchError","renderElements","renderHeader","renderBeforeContent","renderContent","FormBaseComponent","handleSave","fetchSaveError","xhrFetchSave","getSaveUrl","getSaveMethod","getDataForSaving","handleFetchSaveSuccess","handleFetchSaveError","handleFetchSaveIncorrectStatus","handleShowSaveErrors","getFetchSaveError","saveBtnDefaultText","getFetchSaveIncorrectStatusError","PaginatedBaseComponent","withUrlUpdating","mapToCamelCaseNameFromServer","reinitializeData","handleChangeSort","handleCloseFilters","updateUrl","objectsName","dialogComponent","paginateBy","filtersComponentClass","getFiltersCount","getUrlParams","renderSorters","renderFiltersButton","renderFilters","renderAdditionalAfterBaseContent","renderFiltersCount","renderList","renderEmptyObjects","renderFiltersComponent","DanePodmiotu","FormDanePodmiotuFields","handlePasteNumerIdentyfikacyjny","stopPropagation","changeNumerIdentyfikacyjny","changeAttribute","poland","isNazwaInvalid","adresErrors","isKodPocztowyInvalid","isUlicaInvalid","isNumerDomuInvalid","isFormInvalid","autoComplete","changeRodzajAdresu","renderIdentyfikator","renderKraj","renderMiejscowosc","krajErrors","isKrajInvalid","FormKraj","krajName","changeKraj","miejscowoscErrors","isMiejscowoscInvalid","FormMiejscowosc","changeMiejscowosc","numerIdentyfikacyjnyErrors","isNumerIdentyfikacyjnyInvalid","onKeyUp","foreignCountries","handleChangeKraj","kraj_","selectMiejscowoscMenuIsOpen","inputOptions","moreOptionsAvailable","xhrTimeout","handleChangeInputMiejscowosc","handleBlurMiejscowosc","handleChangeMiejscowosc","locality_search_key","request_id","sortMiejscowosc","m","last_page","moreOptionsAvailableText","IndicatorSeparator","menuPortal","menuList","onInputChange","SELECT_CLASS_NAME","SELECT_INVALID_CLASS_NAME","INSTITUTION_NUMBER_DEFAULT_DICT","ProjectNumberSelectsWithPerspectives","handleChangePerspectiveSelect","priorityFetchError","activityFetchError","regionFetchError","institutionFetchError","onChangePerspective","handleChangePerspective","programmeFetchError","perspective_","withInstitutionNumber","handleChangeProgramme","onChangeProgramme","handleChangePriority","onChangePriority","handleChangeActivity","onChangeActivity","handleChangInstitutionNumber","onChangeInstitutionNumber","handleChangeRegion","onChangeRegion","handleChangeInstitution","onChangeInstitution","handleFetchObjectsSuccess","objectListName","handleFetchObjectsError","errorObjectLabel","errorName","handleFetchObjectsIncorrectStatus","perspectivesAsSelect","setDefaultSelectValueLabelBasedOnId","fetchProgrammes","fetchPriorities","fetchActivities","hasRegions","hasInstitutions","fetchRegions","fetchInstitutions","objectsList","objectName","changeObjectHandler","fetchObjects","parentObjectName","mode","activityErrors","institutionErrors","institutionNumberErrors","perspectiveErrors","priorityErrors","programmeErrors","regionErrors","isPerspectiveInvalid","isProgrammeInvalid","isPriorityInvalid","isActivityInvalid","isInstitutionNumberInvalid","isRegionInvalid","isInstitutionInvalid","formInvalid","activityLabel","Radio","checked","Zalacznik","handleCloseConfirmRemovingDialog","confirmRemovingOn","handleSaveFileFromApi","loadingInProgress","loadingFileName","showLoadedSuccessMsg","showLoadingErrorMsg","blockedFilesExtensions","successMessageTimeout","errorMessageTimeout","removingDialogComponent","xhrSaveFile","handleRemoveZalacznik","handleAddPlik","zalacznikTitleId","checkAttributeName","isCheckInvalid","withCheck","Checkbox","checkLabel","onCheckChange","saveZalacznikAttributes","renderFile","uri","renderOwner","fileError","loadFileError","noUploadError","Dropzone","onDrop","getRootProps","getInputProps","clearFileErrors","position","width","left","removeZalacznik","files","currentComponentFile","validate","filesLength","zalacznikiLength","addZalacznik","fileNameList","extension","formData","FormData","append","contextForSaving","upload","onprogress","loaded","Zalaczniki","header","withoutHeader","zalacznikiErrors","isZalacznikiInvalid","reverse","ZalacznikiSelect","selectedZalacznik","setSelectedZalacznik","selectWrapperClassName","setSelectWrapperClassName","concat","menuShouldScrollIntoView","offersetId","downloadAllAttachments","EMPTY_DATA","FormDanePodmiotu","handleChangeRodzajAdresu","dct","dict","handleChangeNumerIdentyfikacyjny","saveDanePodmiotu","closeDanePodmiotuForm","FormOsobaDoKontaktu","handlePasteNumerTelefonu","phoneNumber","contact_person","saveOsobaDoKontaktu","isImieInvalid","isNazwiskoInvalid","isEmailInvalid","closeOsobaDoKontaktuFormForm","Logowanie","userData","atob","redirectToCurrentPathname","currentPathname","getItem","contextType","getPermissionsValuesDict","defaultDict","checkSinglePermission","prevChecks","child","getGroupChecked","checks","getGroupIndeterminate","getMainGroupIndeterminate","group","PERMISSIONS_NAMES_DICT","all","blocking","functionalityManagementImplementationLevel","translatePermissionName","getPerspectiveLabel_","getRegionCode","getInstitutionCode","getActivityCode","getPriorityCode","getRegionOrInstitutionCode","getImplementationLevelLabels","emptyData","sortKeysList","sortList","PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT","getPermissionHistoryUsersTitle","isHistory","isImplementationLevelType","every","el","isRegion","levelSuffix","PermissionList","additionalFetchData","hideAddPermissionButtonIfFullList","initialRequestId","withHistory","onOpenForm","onOpenHistory","setInitializingOn","setPageNumber","is403error","setIs403error","sortContentUsersPermissions","callbackFetchError","hideAddAdministrationPermissionButton","permissionsNames","setPermissions","perm","permissionsToSet","mapDict","notSetPermissionsValues","PermissionsMoreOptionButton","onOpenUserList","OBJECT_TYPE_DICT","dataObjectName","subactivity","PermissionListImplementationLevelCellProgrammePriorityActivity","fullPermission","objectType","onSetActiveHistoryPermission","onSetActiveUsersPermission","initializationOn","setInitializationOn","isOpen","setIsOpen","subObjects","setSubObjects","typeDict","permissionForActionDict","isMainLevel","PermissionListImplementationLevelCell","theLowestLevel","PermissionListRow","OPERATION_TYPE_SERIALIZERS","permissionsDenied","permissionsGranted","permissionsModified","PermissionsHistoryListRow","addedAt","implementationLevelName","authorizedUserEmail","operationType","addedBy","PermissionsHistory","setFilters","addedAtFrom","addedAtTo","addedByEmail","isPickerOpen","setIsPickerOpen","handleCalendarClose","events","permissionsHistory","addedAtFromRef","addedAtToRef","keyCode","nativeEvent","stopImmediatePropagation","UserPermissionsListGrantedCell","groupNameList","groupName","groupGranted","_","getGrantedPermissionsForGroup","UserPermissionsListRow","onSetEditedPermission","onSetRemovedPermission","implementationLevelLabels","hasHigherLevelPermissions","canEdit","canDelete","TAB_INDEXES","REVERTED_TAB_INDEXES","getRowKey","objectData","_objectData$implement","PermissionUsers","activeUsersPermission","selectedTab","setSelectedTab","listType","TabBar","activeTabIndex","onActivate","detail","Tab","ADD_PERMISSION_MODE_CONTEXTS","administration","implementationLevel","SearchUserForm","addPermissionMode","searchingOn","setSearchingOn","setEmail","setIdentifier","contexts","onFindUser","isIdentifierInvalid","UserHeader","withButtons","UserPermissionsFormCommonFields","checksSortDict","defaultChecksDict","disabledCancelButton","disabledSaveButton","editionModeOn","existsErrorOn","existsErrorLabel","saveUrl","setAdditionalErrors","setEditionModeOn","onSavePermissionSuccess","onSetSavingOn","setChecks","additionalFetchDataValuesAsString","groupCheckedValues","permissionErrors","decisions","getPermissionErrors","functionalityDisabled","permissionsDisabled","indeterminate","groupName_","groupPermissions","groupDisabled","handleCheckGroup","permissionName_","permissionValue","handleCheckSinglePermission","SCOPES","permissionType","contents","SELECT_CHOICES","scope","s1","s2","DEFAULT_CHOICE","USERS_ADMINISTRATION_DEFAULT_CHECKS_DICT","CONTENT_ADMINISTRATION_DEFAULT_CHECKS_DICT","IMPLEMENTATION_LEVELS_DICTIONARY_ADMINISTRATION_DEFAULT_CHECKS_DICT","USERS_ADMINISTRATION_CHECKS_SORT_DICT","CONTENT_ADMINISTRATION_CHECKS_SORT_DICT","IMPLEMENTATION_LEVELS_DICTIONARY_ADMINISTRATION_CHECKS_SORT_DICT","EXISTS_ERROR_LABEL","UserPermissionsAdministrationForm","initialData","selectedScope","setSelectedScope","id_","label_","permissionType_","permissions403errorOn","disabledFields","DEFAULT_CHECKS_DICT","CHECKS_SORT_DICT","serializeImplementationLevel","dataDict","UserPermissionsImplementationLevelFields","implementationLevels","setImplementationLevels","implementationLevelsErrors","setImplementationLevelsErrors","permissionsForCheckboxes","setPermissionsForCheckboxes","checkingCheckboxesPermissionOn","setCheckingCheckboxesPermissionOn","levelNames","currentUserId","grantedPermissions","handleChangeProjectNumberSelect","permission403exists","implementationLevelsPermissionErrors","UserPermissionsImplementationLevelForm","dataPerspectives","UserPermissionsRemovingPermissionDialog","questionSuffix","onCloseRemovedPermissionDialog","onRemovePermissionSuccess","removingPermissionOn","setRemovingPermissionOn","setError","permission_","permissionDescription","isError","TABLE_HEADER_LIST","Permissions","setAddPermissionMode","userForPermissionAdding","setUserForPermissionAdding","administrationPermissionsRequestId","setAdministrationPermissionsRequestId","implementationLevelPermissionsRequestId","setImplementationLevelPermissionsRequestId","activeHistoryPermission","setActiveHistoryPermission","setActiveUsersPermission","lastActiveUsersPermission","setLastActiveUsersPermission","handleCloseHistory","handleCloseUsers","handleOpenHistory","handleOpenUsers","editedPermission","setEditedPermission","handleCloseEditPermission","removedPermission","setRemovedPermission","handleCloseRemovePermission","dialogAdditionalFetchData","url_","dialogAdditionalFetchData_","isHistoryPermission","activePermission","permissionListAdditionalFetchData","handleCloseAddPermissionForm","PermissionFormComponent","prevId","ProfilUzytkownika","handleSaveDanePodmiotu","changeDataOn","handleSaveOsobaDoKontaktu","formOsobaDoKontaktuOn","editedOsobaDoKontaktu","renderProfilUzytkownika","renderDanePodmiotu","renderOsobyDoKontaktu","renderOsobaDoKontaktu","SessionDialog","messageRole","messageContent","withButton","dialogButton","Sesja","refreshSessionErrorDialogOn","handleSessionErrorDialogClose","handleSessionDialogClose","handleExpirationDialogClose","reload","handleUnauthorizedDialogClose","unauthorizedDialogOn","initializeSessionTime","sessionTime","computeSessionTime","startSessionTime","logoutDone","logoutDialogOn","sessionIntervalId","clearInterval","now","nowUTC","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","floor","getTime","setInterval","renderLogoutDialog","renderUnauthorizedDialog","minRemaining","secRemaining","renderRefreshSessionErrorDialog","renderRefreshSessionDialog","sec","UserContactPersonsList","contactPersons","cp","UserDataForm","onUpdateUserData","blockedAccount","setBlockedAccount","originalBlockedAccount","setOriginalBlockedAccount","blockedAccountsErrors","hasBlockingUserPermission","UserEconomicSubjectData","dane","uprawnienia","serializeFetchData","User","updatedUserData","setUpdatedUserData","setPageNotPermitted","section","administrationFormOn","setAdministrationFormOn","implementationLevelFormOn","setImplementationLevelFormOn","handleCloseAdministrationForm","handleCloseImplementationLevelForm","handleSavePermissionSuccess","isAdministrationPermission","handleSetEditedPermission","handleSetRemovedPermission","administrationHistoryOn","setAdministrationHistoryOn","implementationLevelHistoryOn","setImplementationLevelHistoryOn","ADVERTISEMENTS_CLEANED_FILTERS","ogloszenie_numer","PROJECTS_CLEANED_FILTERS","calyNumer","SEARCH_CLEANED_FILTERS","publicationDateRange","submissionDeadlineRange","advertiserName","advertiserIdentificationNumber","cpvItem","fulfillmentPlaces","USERS_CLEANED_FILTERS","FAVORITES_ADVERT_CLEANED_FILTERS","PROJECTS_MANAGEMENTS_CLEANED_FILTERS","fullNumber","ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS","advertiserAddressType","advertiserIdentificationNumberType","advertiserAddressCountry","advertiserAddressVoivodeship","advertiserAddressPoviat","advertiserAddressCommune","advertiserAddressLocality","announcementStatus","announcementNumber","announcementProjectEnrollmentPerspective","announcementProjectEnrollmentProgramme","announcementProjectEnrollmentPriority","announcementProjectEnrollmentActivity","announcementProjectEnrollmentInstitution","announcementProjectEnrollmentRegion","announcementProjectEnrollmentFullNumber","announcementPublicationDateFrom","announcementPublicationDateTo","submissionDeadlineFrom","submissionDeadlineTo","getSearchFiltersCount","some","getUsersFiltersCount","getFavoritesAdvertFiltersCount","getOffersFiltersCount","emptyFilters","getProjectsManagementsFiltersCount","getAdvertisementsManagementsFiltersCount","Uzytkownicy","queryDict","renderUzytkownik","lista","Users","DraftToComponents","isEmptyString","str","isAtomicEntityBlock","entityRanges","isList","blockType","orderedListIndex","renderBlockquote","renderOrderedListItem","renderUnorderedListItem","renderAtomic","entityMap","renderText","renderSections","entity","renderLink","renderImage","renderEmbed","targetOption","frameBorder","inlineStyleRanges","renderPureText","range","offset","charsWithStyles","charStyles","Set","r","currentText","currentStyle","blockSections","renderSection","blockKey","bold","italic","bolditalic","italicbold","Ciasteczka","cookies","ciasteczka","auditData","COOKIE_NAME","CiasteczkaFront","showCookies","handleCloseCiasteczka","savingDate","DraftToPdf","blockquote","listItem","Image","image","infoText","paddingLeft","marginVertical","textDecoration","SAVE_BUTTON_DEFAULT_LABEL","FormCiasteczka","editing","firstSaving","trescMaxLength","isTrescInvalid","localization","toolbarHidden","EMPTY_KOMUNIKAT","czyBezterminowy","FormKomunikat","newData","handleClearAttributeError","requiredMsg","isNaglowekInvalid","isDataWaznosciValid","dataWaznosciInputRef","LandingPage","handleSearch","getSearchUrl","query","handleNewsletter","_this$props$user","trescPreviewId","placement","homepageBox1","homepageBox2","homepageBox3","homepageBox1IsEmpty","homepageBox2IsEmpty","homepageBox3IsEmpty","renderSearch","renderTrescOgolna","onSubmit","renderAddOgloszenieLink","onLoginClick","CLEANED_STEP_ERRORS","CLEANED_FORM_ERRORS","AdvertisementContext","validationOn","formErrors","roboczeStatus","statusyOgloszenia","zagranicaId","typMiejscaRealizacji","przedmiotZamowieniaKategoria","przedmiotZamowieniaKategoriaDict","przedmiotZamowieniaPodkategoriaDict","typWarunku","nabory","teryt","setConstsFromServer","setConstsFromAdvertisementData","setOgloszenie","saveOgloszenie","updateOgloszenieBeforePublishing","savePrzedmiotZamowienia","removePrzedmiotZamowienia","setAttributeValue","savePrzedmiotZamowieniaListAttributeValue","removePrzedmiotZamowieniaListAttributeValue","saveHarmonogram","removeHarmonogram","saveWarunekUdzialu","removeWarunekUdzialu","addZamowienie","removeZamowienie","movePrzedmiotZamowienia","setZamowienieAttributeValue","saveKryteriumOceny","removeKryteriumOceny","saveZamowienieListAttributeValue","removeZamowienieListAttributeValue","changeProjectsSelected","setZalacznikAttributes","changeFormLockedState","clearStepError","clearPrzedmiotZamowieniaErrors","clearAttributeError","clearFormErrors","clearState","AdvertisementProvider","order_item_categories","announcement_status_draft","announcement_statuses","adresId","address_id","abroad_id","order_fulfillment_place_types","participation_condition_types","enrollment_numbers","teryt_data","terminOfertData","terminOfertWithTime","terminOfertGodzina","pz","newZamowienieTemporaryId","pz_","zamowienia_","attributeName","przedmiotZamowieniaTemporaryId","origin","zamowieniaErrors","zamowieniaStepErrors","kryteriaOcenyErrors","kryteriaOcenyStepErrors","przedmiotyZamowieniaErrors","przedmiotyZamowieniaStepErrors","harmonogramyErrors","harmonogramyStepErrors","warunkiUdzialuErrors","warunkiUdzialuStepErrors","zalacznikiStepErrors","finalStepErrors","formOgloszenie","AdvertisementConsumer","FormPublikowanie","handleCloseDialog","publishingOn","handleChangePublikujOdRazu","publikujOdRazu","publishImmediately","handleChangeTerminOfertData","handleChangeTerminOfertWithTime","isChecked","dialogPublishClassName","handlePublish","handleFetchPublishSuccess","handleFetchPublishError","handleFetchPublishIncorrectStatus","setPublishingSuccessInfo","handleValidate","today","getTomorrow","terminOfert_","setHours","renderError","renderForm","terminOfertDataError","isTerminOfertDataInvalid","terminOfertGodzinaError","isTerminOfertGodzinaInvalid","terminSkladaniaOfertAriDescribedby1","terminSkladaniaOfertAriDescribedby2","terminSkladaniaOfertAriDescribedby","terminOfertInputRef","renderWhenPublishPart","renderPublicationDateField","h","isInvalid","dataOpublikowaniaInputRef","AlreadyPublishedInfo","BaseStepComponent","isPreview","FormKryteriumOceny","onCloseForm","textarea","Zamowienie","handleCloseForm","newKryteriumOcenyOn","editingKryteriumOCenyId","handleSaveKryteriumOceny","onSaveKryteriumOceny","handleChangeSzacunkowaWartosc","onSetZamowienieAttribute","handleBlurSzacunkowaWartosc","handleSzacunkowaWartoscKeyPress","szacunkowaWartoscLenth","handleSzacunkowaWartoscPaste","handleCloseRemoveZamowienieDialog","isRemoving","handleMovePrzedmiotZamowieniaFromList","saveDraggedTemporaryId","then","onMovePrzedmiotZamowienia","kryteriaOceny_","czyWariantowe_","tytul_","isInvalidTytul","tytulId","isSzacunkowaWartoscInvalid","szacunkowaWartoscId","Droppable","onDropCallback","renderRemoveZamowienie","renderPrzedmiotZamowienia","ko","renderKryteriumOceny","renderKryteriumOcenyForm","renderNewKryteriumOcenyButton","zamowienieTemporaryIds","indexOnList","Draggable","isDragAndDropElement","onDragCallback","onRemoveZamowienie","Kryterium","cenowe","zawiera","additionalClassName","onRemoveKryteriumOceny","kryteriumOcenyLastTemporaryId","StepCzesciKryteria","handleSaveCzyDopuszczalnaOfertaCzesciowa","handleSaveDraggableTemporaryId","Promise","resolve","reject","draggedTemporaryId","handleMovePrzedmiotZamowienia","changeCzyDopuszczalnaOfertaCzesciowaForbidden","radioDisabled","PomocEkranowa","pomocEkranowaContent","renderZamowienia","onChangeCurrentMenuLink","NO_PROJECT_TEXT","NO_PROJECT_ADMIN_TEXT","NO_ENROLLMENT_TEXT","NO_ENROLLMENT_ADMIN_TEXT","NO_OSOBY_TEXT","StepPozostale","StepComponent","sortProjectsEnrollments","osobyDoKontaktu_","isProjektyInvalid","isNumerNaboruInvalid","isTytulInvalid","isOsobyDoKontaktuInvalid","projectsEnrollmentsDisabled","contactPersonsDisabled","onChangeProjectsSelected","closeMenuOnSelect","defaultValue","withStepConfiguration","FormKodCPV","initial","setInitialOptions","selectedKod","selectedKodError","selectMenuIsOpen","handleChangeInputKodCPV","handleBlurKodCPV","handleChangeKodCPV","handleAddKodCPV","search_key","usedIds","String","addKodCPV","isSelectInvalid","renderButtons","addButtonDisabled","onCancelKodCPV","KodyCPV","handleCancelKodCPV","newKodOn","handleRemoveKodCPV","selectedCode","removeKodCPV","kod_","renderNewKodForm","errorsKodyCPV","POLAND","EMPTY_ADDRESS","FormMiejsceRealizacji","handleChangeTyp","handleSaveMiejsceRealizacji","handleChangeZagranicaAttribute","field","saveMiejsceRealizacji","isSaveButtonDisabled","miejscowosc1","miejscowosc2","renderAdresForm","renderZagranicaForm","cancelNewMiejsceRealizacji","MiejsceRealizacji","ogloszeniaContext","miejsceRealizacji","removeMiejsceRealizacji","MiejscaRealizacji","newMiejsceRealizacjiOn","mr","renderNewMiejsceRealizacjiForm","lastTemporaryId","errorsKodyMiejscaRealizacji","FormPrzedmiotZamowienia","handleRemoveMiejsceRealizacji","selectClassName","selectInvalidClassName","kategoriaInvalid","miejsceRealizacjiLastTemporaryId","PrzedmiotZamowienia","handleCloseRemovingDialog","isRemovingOn","kodyCPVPrzedmiotuZamowienia","onEditClick","renderRemovingPart","onRemoveClick","StepPrzedmiotZamowienia","formPrzedmiotZamowieniaOn","addedPrzedmiotZamowieniaId","editedPrzedmiotZamowieniaId","handleEditClick","handleRemovePrzedmiotZamowienia","przedmiotZamowieniaError","renderPrzedmiotZamowieniaForm","przedmiotZamowieniaData","pzLength","FormHarmonogram","handleEscPress","poczatekInputRef","koniecInputRef","koniecRealizacjiErrorVisible","Harmonogramy","newHarmonogramOn","editingHarmonogramId","onSaveHarmonogram","renderHarmonogram","renderHarmonogramForm","renderNewHarmonogramButton","etapErrors","onRemoveHarmonogram","harm","StepTerminy","przedmiotyZamowienia_","planowanyTerminPodpisaniaUmowyInputRef","dateCalendarRef","FormWarunekUdzialu","clearFunct","stateDict","opisError","typError","isValidating","mergeErrors","globalErrors","errorsOpisVisible","errorsTypVisible","usedWarunkiUdzialuIds","WarunkiUdzialu","newWarunekUdzialuOn","editingWarunekUdzialuTemporaryId","onSaveWarunekUdzialu","wu","renderWarunekUdzialu","renderWarunekUdzialuForm","renderNewWarunekUdzialuButton","onRemoveWarunekUdzialu","w","StepWarunki","StepZalaczniki","distinguishAttachments","oldAttachments","currentAttachments","attachment","oldAttachmentsLength","renderCurrentAttachments","renderOldAttachments","attachmentsLength","DEFAULT_OGLOSZENIE","FormOgloszenie","handleChangeCurrentMenuLink","handleSetCurrentMenuLink","menuLinksMapNameId","handleChangeProjectsSelected","handleReturnToList","handleFetchOgloszenieSuccess","additionalSuccessFunction","addTemporaryId","reformatPrzedmiotyZamowieniaData","preview","instruction","validationAria","clearMenuErrorTimeout","menuLinksMapIdName","cleanData","xhrSaveFetch","callbackError_","callbackIncorrectStatus_","getAdvertisementDataFromServer","handlePublishByAdmin","notValidByAdminError","handleClosePublishingSuccessDialog","handleClosePublishingByAdminErrorDialog","initializeData","formContentRef","publishingSuccessInfo","menuLinks","step","menuBasicRef","version_mode","getPublishedDataForSaving","groupUuid","group_uuid","renderInstruction","renderFuturePublishingInfo","renderTerminy","renderWarunki","renderCzesciKryteria","renderPozostale","renderZalaczniki","renderPublishingByAdminError","renderPublishingSuccessInfo","ANNOUNCEMENT_STATUS_DRAFT","ANNOUNCEMENT_STATUS_PUBLISHED","ANNOUNCEMENT_STATUSES","Ogloszenia","obublikowaneStatusId","roboczeStatusId","statusyOgloszen","handleRemoveOgloszenie","removeFunct","xhrRemoveAdvertisement","removedOgloszenieId","handleFetchRemoveOgloszenieSuccess","handleFetchRemoveOgloszenieError","handleFetchRemoveOgloszenieIncorrectStatus","handleCloseActionDialog","fetchActionError","handleCopyOgloszenie","baseOgloszenieId","copyingOgloszenieId","xhrCopyAdvertisement","handleFetchCopyOgloszenieSuccess","handleFetchCopyOgloszenieError","handleFetchCopyOgloszenieIncorrectStatus","copiedOgloszenieIds","handleToggleFilters","setFiltersData","handleCancelOgloszenie","cancelledOgloszenieId","handleFetchCancelOgloszenieSuccess","handleFetchCancelOgloszenieError","handleFetchCancelOgloszenieIncorrectStatus","xhrCancelAdvertisement","ogloszenieData","removedOgloszenieTitle","cancelledOgloszenieTitle","currentSortingValue","actionComponent","createdByList","modifiedByList","creators","modifiers","creator","modifier","filterAdvertisements","subattr","adValue","Switch","renderAddOgloszenieButton","renderOgloszenie","renderRemovingOgloszenie","renderCancellingOgloszenie","renderCopiedMessage","ktoUtworzylList","ktoUtworzylDict","username","ktoModyfikowalList","ktoModyfikowalDict","dataUtworzeniaInputRef","dataModyfikacjiInputRef","_ref6","_ref7","isDraft","isPublished","isLocked","BadgeAnchor","badge_count","renderActionDialog","baseOgloszenieTytul","verbString","actionName","actionPrefix","fetchHandler","showText","SELECTS_CODES","dzialanieIpoddzialanie","Form","handleChangePerspektywa","setNumberParts","updateNumber","handleChangeProgramOperacyjny","handleChangeOsPriorytetowa","handleChangeDzialanie","handleChangeInstytucja","handleChangeOthers","changeInputNumber","getSuffixDefaultDict","handleChangeInstitutionNumber","suffix","isProjekt","perspektywy","getFullNumber","parts","suffixMask","regiony","instytucje","separator","alternativeAttrName","attrValue","onNumberChange","renderNumer","renderNazwa","renderSelects","renderOthers","isSuffixInvalid","maxSuffixLength","Ogloszenie","showDetails","setShowDetails","wersja","prevShowDetails","Projekt","handleShowOgloszenia","detailsOn","initializingDetailsOn","getOgloszenia","handleHideOgloszenia","handleFetchOgloszeniaSuccess","handleFetchOgloszeniaError","handleFetchOgloszeniaIncorrectStatus","handleCloseRemovingOn","removingOn","isProject","renderOgloszeniaDetails","ogloszenia_","maOpublikowaneOgloszenia","maRoboczeOgloszenia","onRemove","Projekty","projektyNabory","handleRemove","handleFetchRemoveSuccess","handleFetchRemoveError","handleFetchRemoveIncorrectStatus","serializedData","removingError","czyNewProjekt","filterProjects","renderRemovingErrorDialog","userProjectsNumbers","serializeProgrammeSelectStructure","NewsletterSettingsFilter","_state$currentDiction","_state$currentDiction2","_state$filters$advert","_state$filters$advert2","_state$filters$advert3","_Object$keys$filter","isSelectOpen","currentDictionaries","errorNipOgloszeniodawcy","fromEntries","operation_programme","location_id","_state$filters$progra","_state$filters$progra2","_state$filters$fulfil","_state$filters$fulfil2","operationalProgramsIdsInFilter","x","fulfillmentPlacesIdsInFilter","updatedFilters","newFilters","close","onMenuOpen","_state$filters$catego","NewsletterSettings","showDeleteFilterModal","setShowDeleteFilterModal","filterModalData","setFilterModalData","visible","setAdvertisements","yesterdayDate","valueOf","dayBeforeYesterdayDate","advertisementsFilters","setAdvertisementsFilters","updatedCount","setUpdatedCount","newCount","setNewCount","isBusy","setIsBusy","refreshUpdatedAnnouncementsCount","announcements","refreshNewAnnouncementsCount","refreshFilters","newsletter_filters","mappedFilters","modalFilter","modal_settings","buildFilterName","filterByPropertiesCount","countFilters","enabled","promise1","refreshAnnouncements","promise2","promise3","mapAndSaveFilter","onSuccess","_filter$programme$map","_filter$programme","_filter$category","_filter$subcategory","_filter$cpvItem$map","_filter$cpvItem","_filter$fulfillmentPl","_filter$fulfillmentPl2","filterToSave","advertiser_identification_number","programme_ids","category_id","subcategory_id","cpv_item_ids","fulfillment_place_codes","rest","hasOwnProperty","gap","padding","enableDisableFilter","marginLeft","listStyleType","_advertisement$advert","dangerouslySetInnerHTML","__html","favorite","findIndex","updatedObjects","editFilter","existingFilter","_Object$keys","addFilter","FavoritesFilters","updateDictionaries","_filters$category","Favorites","handleReload","handleAddToFavorites","handleRemoveFromFavorites","subname","_o$ogloszenie$status","_o$ogloszenie$status2","_o$dataOpublikowania","TrescPreview","closePreview","renderPreview","pop","FormPomoc","availableParents","parents_candidates","availableRelatives","availableScreens","screens_available","typOgolna","isRoot","root","hasChildren","has_children","originalTypOgolna","originalRozdzialNadrzedny","relatives_candidates","handleSaveTypOgolna","handleUploadFile","uploadImageError","handleLoadEmbed","embeddedUrl","loadEmbedError","entityRange","handlePreview","previewOn","dictionary","typeChosen","renderTypOgolnaForm","renderTypNaEkranieForm","renderCommonFields","renderPowiazaneForm","renderUploadImageErrorDialog","renderLoadEmbedErrorDialog","isRozdzialNadrzednyInvalid","isEkranInvalid","inline","inDropdown","urlEnabled","uploadEnabled","alignmentEnabled","uploadCallback","previewImage","inputAccept","present","mandatory","defaultSize","embedded","embedCallback","optionsForPowiazane","renderErrorDialog","FormRegulamin","regulamin","FormTrescOgolna","Komunikat","setUrlWithCorrectSlug","Komunikaty","k1","k2","KomunikatFront","KomunikatyFront","Font","register","family","fonts","robotoRegular","robotoItalic","robotoBold","registerHyphenationCallback","word","pdfStyles","mainPdfContainerStyle","fontFamily","flexWrap","gridSection","borderedSectionStyle","borderLeftWidth","borderLeftColor","borderedDashedSectionStyle","borderStyle","borderColor","borderedSeparateSectionStyle","pzTitleSection","textHeaderStyle","textWithLabelStyle","labelStyle","labelHeaderStyle","dateTextStyle","errorStyle","titleStyle","sectionTitleStyle","PdfWithDraftContent","Document","Page","wrap","renderFooter","Pomoc","handleCreatePdf","pdfHeaderText","ekranLabel","PdfText","pdfHeaderStyle","pdfHeaderSecondaryStyle","callbackPfdCreated","onpopstate","handleChangePomoc","newId","newSlug","PomocUsun","handleRemovePomoc","removePomoc","fetchRemoveError","renderRemovingImpossible","renderRelatives","renderConfirmation","closePomocForRemoving","Pomoce","handleChangeTypPomocy","pomocForRemoving","pomocForPreview","PomoceFrontPdf","renderPomoc","deepLevel","sectionTextStyle","renderPomocePodrzedne","pomocId","pomocePodrzedne","secondarySectionStyle","noPadding","PomoceFront","sortPomoce","pomocePodrzedneClassName","PomocFront","Regulamin","front","renderPdfButton","Regulaminy","currentExists","forPublicationExists","handleCloseCurrentVersionDialog","editCurrentVersionOn","handleRemoveDoOpublikowania","removingDoOpublikowaniaOn","handleCloseRemoveDoOpublikowaniaDialog","renderEditCurrentVersionDialog","renderRemoveDoOpublikowaniaDialog","TresciOgolne","trescForPreview","TrescOgolna","ZarzadzanieTrescia","timerRefreshed","setTimerRefreshed","Card","CardPrimaryAction","CardMedia","ZoltyPasekFront","trescKomunikatu","b","DeklaracjaDostepnosci","listStyle","AdvertisementDataFilters","onChangeFilter","onChangeProjectNumberSelect","announcementPublicationDateFromInputRef","announcementPublicationDateToInputRef","submissionDeadlineFromInputRef","submissionDeadlineToInputRef","STATUS_ICONS","DRAFT","PUBLISHED","CLOSED","CANCELLED","LOCKED","RESOLVED","AdvertisementListRow","onFilterAdvertisementByUserEmail","advertisement_","publicationDate","versionPublicationDate","submissionDeadline","advertisementPublicationDate","handleGoToManageUserPage","handleFilterProjectsByUserEmail","handleFilterAdvertisementsByUserEmail","AdvertiserDataFilters","onChangeAdvertiserIdentificationNumber","onChangePolishLocality","advertiserAddressTypeValue","onChangeAdvertiserAddressType","onChangeAdvertiserIdentificationNumberType","UserDataFilters","AdvertisementsFilters","setSerializedData","prevFilters","SORTERS","announcementStatus_asc","announcementStatus_desc","announcementNumber_asc","announcementNumber_desc","userEmail_asc","userEmail_desc","announcementPublicationDate_asc","announcementPublicationDate_desc","submissionDeadline_asc","submissionDeadline_desc","title_asc","title_desc","SORTING_VALUES","DEFAULT_SORTER","SERIALIZER_CONFIG","SERIALIZATION_URL_LIST","SERIALIZATION_URL_DICT_TO_POLISH","eng","pol","IMPLEMENTATION_LEVEL_SELECTS_NAMES_LIST","Advertisements","setInitialPageNumber","setSelectedSort","setFiltersCounter","setFiltersAreOn","setCleanedLocalityFilters","filtersData","filters_","setValue","valueName","searchParamValue","type_","filterSet","setInitialFilters","EditProjectForm","setName","setFetchSaveError","attachedAdvertisementsAmount","ADVERTISEMENTS_GET_COMMON_URL_PARAMS","ProjectListRow","onFilterProjectsByUserEmail","onSelectProjectForEditing","handleFilterAdvertisementsByFullNumber","ProjectsFilters","Projects","editedProject","setEditedProject","projectId","ANULOWANE_STATUS","OPUBLIKOWANE_STATUS","ZAMKNIETE_STATUS","ROZSTRZYGNIETE_STATUS","FiltryWyszukiwarki","handleChangeStatusFilter","handleChangeDateFilter","filterName","renderInformacjeOogloszeniu","renderDaneOgloszeniodawcy","statuses","FormRozstrzygniecieWariant","wariant","checkboxLabel","nazwaOferenta","offerTitle","isRefused","onOfferRestore","ofertaId","hasOfertaManyWarianty","onOfferRefuse","onWariantSelect","FormCzescRozstrzygniecia","handleRefuse","refusingOfertaId","handleRestore","restoringOfertaId","ofertaIdAttributeName","sortWarianty","w1","w2","hasManyWarianty","hasMultiplyZamowienia","renderNotRefused","renderRefused","onNoOfferSelectedChange","renderRefusingDialog","refused","renderRestoringDialog","renderDialog","titleAdverb","additionalInfo","OGLOSZENIE_STATUS_CHOICES","OFERTA_STATUS_CHOICES","FiltryOfert","submissionDeadlineInputRef","announcementPublicationDateInputRef","announcementPublicationDate","offerStatus","FormWariant","onlyCena","priceAutofocus","renderCena","onChangeWariantAttribute","wariantOpisId","isOpisInvalid","onRemoveWariant","FormOfertaFields","getWariantLasttemporaryId","getEmptyOferta","getEmptyWariant","renderOferty","withDanePodmiotuForm","ofertyErrors","isOfertyInvalid","renderMultiplyOferta","renderSingleOferta","zamowienieNodeId","oferta","czyWariantoweErrors","isCzyWariantoweInvalid","changeAddOferta","changeCzyWariantowa","renderWarianty","wariantyErrors","isWariantyInvalid","onAddWariant","renderSingleWariant","changeAddZalacznik","changeRemoveZalacznik","changeSaveZalacznikAttributes","EMPTY_DANE_PODMIOTU_DATA","FormOferta","handleFetchUserDataSuccess","handleFetchOfferDataSuccess","handleCloseCancellingDialog","cancellingOn","handleCloseSubmittingDialog","submittingDialogOn","handleChangeAddOferta","handleChangeCzyWariantowa","handleAddWariant","handleChangeWariantAttribute","handleRemoveWariant","handleAddZalacznik","handleSaveZalacznikAttributes","ogloszenieId","handleSubmit","getSubmitUrl","getSerializedDataForSubmitting","handleFetchSubmitSuccess","onSubmitOferta","getWariantLastTemporaryId","getDataForSubmitting","statusOferty","ogloszenieErrors","formOfertaErrors","renderCancelDialog","renderRemoveDialog","renderSubmitDialog","confirmButton","renderBaseDialog","onConfirm","FormOfertaOgloszeniodawca","onSubmitForm","Oferta","handleCloseWithdrawingDialog","withdrawingOn","handleWithdraw","handleFetchWithdrawSuccess","handleFetchWithdrawError","handleFetchWithdrawIncorrectStatus","onWithdrawOferta","fetchWithdrawError","getOfferData","commonState","onClosePreview","renderActionsButtons","renderWithdrawDialog","renderWariantowa","renderNiewariantowa","withdrawingError","OfertaBox","myOfferLabel","showMyOfferLabel","showFullVariants","showAttachments","pakietId","OfertaPreview","Oferty","handleClosePreview","previewedOfferAnnouncementId","getEmptyFilters","ofertaLabel","totalString","renderPakietOfert","offerSubtitle","ostatniaWersja","OfertyOwnerClosedStatus","handleMyOfferButtonClick","isAdvertisementOwner","onlyAdmin","extra","is_advertiser","pakietyOfert","sortOferty","oferta1","oferta2","wariant1","wariant2","FormRozstrzygniecie","renderMyOfferButton","po","renderZamowienie","isMultiply","oferentId","renderOferta","renderOfertaBox","OfertyOffererClosedStatus","OfertyOffererPublishedStatus","handleWithdrawOferta","withdrawingOfferConfirmationOn","submittingOfferConfirmationOn","handleCloseWithdrawingOfferConfirmationDialog","handleSubmitOferta","offerSetId","handleCloseSubmittingOfferConfirmationDialog","renderWithdrawingOfferConfirmationDialog","renderSubmittingOfferConfirmationDialog","OfertyResolvedStatusPdf","checkRefused","offerId","rozstrzygniecie","tytulOgloszenia","renderKomentarz","renderSelectedOferta","zamowienieFromRozstrzygniecie","selectedWariantId","selectedPakietOfert","selectedOferta","selectedWariant","oferta_","offerVariantDescrStyle","filteredOferty","otherOffersContainerStyle","selectedOfferStyle","commentTextStyle","whiteSpace","OfertyOwnerResolvedStatus","handleFetchSettlementSuccess","toFixAttributes","renderZalacznikiRozstrzygniecia","OfertyOffererResolvedStatus","OfertyOwnerPublishedStatus","handleRemoveBadge","offersCount","offer","badge","offerFormOn","editingOffersetId","handleSubmitOfertaForm","idsDict","handleCloseOfferPreview","offerPreviewOn","previewedOfferId","handleChangeZalacznikIsProtocol","handleNoOfferSelectedChange","handleRefuseOffer","setOfferRefuseValue","handleRestoreOffer","handleSelectWariant","wariantId","handleRemoveOfertaZewnetrzna","pakietOfertId","variantsIds","getNotSerializedDataForSaving","errorsDialogOn","getOfertyByZamowienieNodeId","getMenuLinks","nieMaWiecejOfert","links","wariantIds","prevWybranyWariant","currentMenuLinkName","renderOffersCompleting","renderOffers","renderSummary","renderFormOferta","renderOfertaPreview","pakietyOfertZewnetrzne","renderOfertaZewnetrzna","isRemoved","offersStateDict","renderSelectedOfertyList","renderErrorsDialog","isKomentarzInvalid","renderZamowienieSummary","zamowienieFromState","renderUnexpectedSummaryPartError","renderNoOfferSelected","renderNoChoice","zamowienieErrors","ListaWersji","handleFetchVersionListSuccess","versions","handleFetchVersionListError","handleFetchVersionListIncorrectStatus","closeVersionDialog","sortVersions","published","renderVersionList","currentlyVisibleMarker","renderDraftList","isCreatedByAdvertiser","ManageAdvertisementButtons","onChangeAdvertisementStatus","confirmDialogOn","setConfirmDialogOn","usePutFetchApi","userBasicPermission","hasPermission","parentName","handleCloseConfirmDialog","advertiser","PytaniaForOgloszeniePdf","numerOgloszenia","renderQuestionsList","q","renderQuestion","renderAnswer","answerLabel","answerContainerStyle","questionContainerStyle","myLabelStyle","textTransform","BasePytaniaForOgloszenieWidthPdf","renderPrintButton","FormOdpowiedz","handleSaveDraft","handleSavePublished","xhrSave","onUpdate","pytanieTresc","isPytanieTrescInvalid","questionLabel","FormPytanie","onAddQuestion","Pytanie","handleAnswer","onClickAnswer","reloadAnnouncement","noAuthorLabel","renderPytanieLabel","renderOdpowiedz","allowAnswer","renderPytanieButton","renderOdpowiedzLabel","annoucementOwner","PytaniaForOgloszenieAnnouncementOwner","handleUpdate","answeredQuestionId","handleShowAnswerForm","answerFormOn","renderAnswerForm","answeredQuestion","PytaniaForOgloszenieAnonymous","ogloszenieStatus","PytaniaForOgloszenieLoggedIn","handleAddQuestion","questionFormOn","confirmInfo","myQuestionsList","publishedQuestionsList","a","renderQuestionForm","renderConfirmationDialog","questionsListName","questionsList","noQuestionsInfo","noAuthor","OgloszenieDetails","getPrzedmiotyZamowieniaList","getHarmonogramList","hasPointer","prepareChartData","firstDate","lastDate","maxDistance","factor","nextObj","showVersionModeInfo","versionMode","ostatniaOpublikowanaWersjaId","renderOrigin","renderDaneAdresoweOgloszeniodawcy","renderPodsumowanie","indexVersion","all_available_version_ids","draftMode","renderAttachmentsForOrigin","daneAdresowe","tableOfContetns","refs","offsetTop","renderPrzedmiotyZamowienia","renderKryteriaOceny","renderKodyCPV","renderMiejscaRealizacji","renderWarunkiUdziaÅ‚u","renderOgloszeniePodsumowanie","renderPrzedmiotyZamowieniaPodsumowanie","dateForShowing","renderChartData","renderTextError","harmonogramForRendering","h1","h2","OgloszeniePdf","renderPublishedDates","borderLeftStyle","sortAttachmentsByOrigins","czyUlubione","offer_set_badge_count","question_badge_count","isCurrentVersion","handleCloseVersionDialog","showOtherVersionOn","handleChangeTab","handleChangeAdvertisementStatus","handleAddToFavorite","handleRemoveFromFavorite","versionId","origins","originsIds","originId","origin1","origin2","isMyAdvertisement","userAnonymous","renderPytania","renderOfertyForPublishedStatus","renderOfertyForCancelledStatus","renderOfertyForClosedStatus","renderOfertyForResolvedStatus","renderOfertyForAfterPublishedStatus","OwnerComponent","OffererComponent","STATUS_MAP","Wyszukiwarka","handleChangeQuery","renderObject","moje","nazwaOgloszeniodawcy","renderOldBkLink","isPublicationDateRangeCustom","isSubmissionDeadlineRangeCustom","action","translationMap","MY_ADVERTISEMENT","MY_OFFERS","MY_FAVORITE_ADVERTISEMENT","MY_ADVERTISEMENT_QUESTION_SUBMITTED","MY_ADVERTISEMENT_OFFER_SUBMITTED_OR_CHANGED","MY_ADVERTISEMENT_OFFER_WITHDRAWN","MY_ADVERTISEMENT_ENDS_IN_24_HOURS","MY_OFFERS_ADVERTISEMENT_SUBMITTED_CHANGES","MY_OFFERS_ADVERTISEMENT_STATUS_CHANGED","MY_OFFERS_ADVERTISEMENT_ANSWER_SUBMITTED_OR_CHANGED","MY_FAVORITE_ADVERTISEMENT_SUBMITTED_CHANGES","MY_FAVORITE_ADVERTISEMENT_STATUS_CHANGED","MY_FAVORITE_ADVERTISEMENT_ANSWER_SUBMITTED_OR_CHANGED","MY_FAVORITE_ADVERTISEMENT_ENDS_IN_24_HOURS","CircleWithLetter","Notifications","_notificationOptions$","notificationOptions","setNotificationOptions","notificationsEnabled","notifications","margin","handleToggleNotifications","handleToggleNotification","j","tabIndexMap","Map","Newsletter","_location$search","_location$search$spli","activeTab","setActiveTabIndex","tabName","getMapKeyByValue","UnsubscribeSuccess","handleGoToMainPage","UnsubscribeConfirmation","token","setToken","handleError","handleConfirm","setConfirmed","Subscriptions","confirmed","URL_PATTERNS_BY_MENU_LINK_NAME","projectsManagement","advertisementsManagement","contentsManagement","implementationLevelsDictionaryManagement","Routes","onSetMenuLinkByName","patternList","getComponent","component","Redirect","Route","exact","SKIP_LINKS_PRIVATE","SKIP_LINKS","MENU_LINKS","onlyAuthenticated","UePadding","UeFooter","maxWidth","App","clearAuthCookie","handleLogin","handleLogout","xhrLogoutFetch","handleFetchLogoutSuccess","handleFetchLogoutError","handleFetchLogoutIncorrectStatus","logoutDoneOn","logoutError","handleSetMenuLinkByName","currentHref","appContentRef","updateMenuDisplay","addEventListener","setCurrentMenuLink","innerWidth","skipLinks","Router","TopAppBarFixedAdjust","renderMenu","renderLogoutError","TopAppBar","TopAppBarRow","TopAppBarSection","TopAppBarTitle","renderUserWidget","TopAppBarActionItem","DrawerAppContent","Boolean","ReactDOM","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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aACJ,IAAK,QACL,IAAK,YACL,IAAK,WACL,IAAK,WACL,IAAK,SACL,IAAK,QACL,IAAK,gDACL,IAAK,SACL,IAAK,YACL,IAAK,OACL,IAAK,SACL,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,UACL,IAAK,QACL,IAAK,gBACL,IAAK,QACL,IAAK,aACL,IAAK,aACL,IAAK,YACL,IAAK,aACL,IAAK,UACL,IAAK,QACL,IAAK,SACL,IAAK,WACL,IAAK,UACL,IAAK,OACL,IAAK,QACL,IAAK,2BACL,IAAK,SACL,IAAK,YACL,IAAK,aACL,IAAK,YACL,IAAK,SACL,IAAK,UACL,IAAK,aACL,IAAK,gBACL,IAAK,SACL,IAAK,WACL,IAAK,aACL,IAAK,WACL,IAAK,kBACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,QACL,IAAK,UACL,IAAK,YACL,IAAK,OACL,IAAK,UACL,IAAK,WACL,IAAK,iBACL,IAAK,gBACL,IAAK,OACL,IAAK,WACL,IAAK,QACL,IAAK,YACL,IAAK,SACL,IAAK,oBACL,IAAK,WACL,IAAK,OACL,IAAK,WACL,IAAK,sBACL,IAAK,2DACL,IAAK,YACL,IAAK,aACL,IAAK,wBACL,IAAK,kCACL,IAAK,mBACL,IAAK,kBACL,IAAK,UACL,IAAK,QACL,IAAK,UACL,IAAK,SACL,IAAK,mBACL,IAAK,mBACL,IAAK,sBACL,IAAK,cACL,IAAK,4BACL,IAAK,0BACL,IAAK,WACL,IAAK,QACL,IAAK,0BACL,IAAK,aACL,IAAK,UACL,IAAK,SACL,IAAK,UACL,IAAK,eACL,IAAK,WACL,IAAK,gBACL,IAAK,gBACL,IAAK,UACL,IAAK,YACL,IAAK,4BACL,IAAK,QACL,IAAK,QACL,IAAK,wBACL,IAAK,UACL,IAAK,uBACL,IAAK,QACL,IAAK,aACL,IAAK,UACL,IAAK,mBACL,IAAK,YACL,IAAK,SACL,IAAK,WACL,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,oBACL,IAAK,UACL,IAAK,SACL,IAAK,eACL,IAAK,SACL,IAAK,SACL,IAAK,UACL,IAAK,UACL,IAAK,aACL,IAAK,UACL,IAAK,kBACL,IAAK,UACL,IAAK,YACL,IAAK,aACL,IAAK,kBACL,IAAK,UACL,IAAK,cACL,IAAK,iBACL,IAAK,0CACL,IAAK,gBACL,IAAK,+BACL,IAAK,qBACL,IAAK,iCACL,IAAK,cACL,IAAK,0CACL,IAAK,yBACL,IAAK,4BACL,IAAK,kBACL,IAAK,cACL,IAAK,iBACL,IAAK,uBACL,IAAK,6DACL,IAAK,SACL,IAAK,yBACL,IAAK,WACL,IAAK,gCC/OHra,GAAc,CAChBpvC,MAAO,EACPC,MAAO,4BAMX,MAAM8oD,WAAiBx7B,YAEnBC,YAAYC,GACRC,MAAMD,GACN,IAAIvjB,EAAO,KACPujB,EAAMu7B,WACN9+C,EAAO,CACHlK,MAAOytB,EAAMu7B,SACb/oD,MAAOwtB,EAAMu7B,WAGrBr7B,KAAKG,MAAQ,CAAC5jB,QAEdyjB,KAAK+7B,iBAAmB/7B,KAAK+7B,iBAAiB1X,KAAKrkB,KACvD,CAIA+7B,iBAAiB1f,GACbrc,KAAKC,SACD,CAAC1jB,KAAM8/B,IACP,IAAMrc,KAAKF,MAAMw7B,WAAWjf,IAEpC,CAIAjc,SACI,MAAM,KAAE7jB,GAASyjB,KAAKG,OAChB,MAAErY,EAAK,WAAEo+B,EAAU,QAAE7X,EAAO,YAAE2J,GAAgBhY,KAAKF,MAEzD,IAEIztB,EAFAm+B,EAAU70B,OAAO6nB,OAAOs4B,IAAkB3pD,KAC1C6pD,IAAK,CAAM3pD,MAAO2pD,EAAO1pD,MAAO0pD,MAYpC,OAVIhkB,EACA3lC,EAAQkK,GAERi0B,EAAU,CAACiR,MAAgBjR,GAC3Bn+B,EAAQ,CACJA,MAAOkK,EAAOA,EAAKlK,MAAQovC,GAAYpvC,MACvCC,MAAOiK,EAAOA,EAAKjK,MAAQmvC,GAAYnvC,QAK3CqtB,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,OACNq6B,SAAS,aACTx1B,UAAWwoB,IAAMuc,YACjBpP,IAAI,SAEJnN,IAAAU,cAAC4Y,GAAM,CACH,aAAY,QAAQ5K,GAAWvmB,IAC/B,gBAAc,OACdykB,UAAW8B,EAzDE,uCADR,gBA2DL2J,YAAaA,EACbe,WAAYmN,EACZrzC,GAAG,aACHgmC,cAAc,EACd2D,iBAAkBA,IAAM,sBACxBhM,QAASA,EACTxE,YAAagM,EAAcyJ,GAAYnvC,MAAQ,GAC/Cu5C,UAAU,EACV5R,mBAAoBA,IAAe,wCACnC7O,OAAQF,EACR74B,MAAOA,EACP+jC,SAAUiG,GAAkBrc,KAAK+7B,iBAAiB1f,KAErDhO,GAAW1O,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEA,GAGrC,EC/EJ,MAAM25B,GAAc,CAChBpvC,MAAO,EACPC,MAAO,iCAMX,MAAMmpD,WAAwB77B,YAE1BC,YAAYC,GACRC,MAAMD,GACNE,KAAKG,MAAQxkB,OAAOwE,OAAO,CACvByX,YAAakI,EAAMlI,aAAe,KAClCqkC,6BAA6B,EAC7BC,aAAc,GACdC,sBAAsB,EACtB/R,WAAY,KAGhBpqB,KAAK+sB,UAAY,EAEjB/sB,KAAKwqB,SAAW,KAChBxqB,KAAKo8B,WAAa,KAElBp8B,KAAKq8B,6BAA+Br8B,KAAKq8B,6BAA6BhY,KAAKrkB,MAC3EA,KAAK42B,mBAAqB52B,KAAK42B,mBAAmBvS,KAAKrkB,MACvDA,KAAK62B,iBAAmB72B,KAAK62B,iBAAiBxS,KAAKrkB,MACnDA,KAAK82B,2BAA6B92B,KAAK82B,2BAA2BzS,KAAKrkB,MACvEA,KAAKs8B,sBAAwBt8B,KAAKs8B,sBAAsBjY,KAAKrkB,MAC7DA,KAAKu8B,wBAA0Bv8B,KAAKu8B,wBAAwBlY,KAAKrkB,KACrE,CAIAwkB,uBAE0B,OAAlBxkB,KAAKwqB,UACLxqB,KAAKwqB,SAASI,OAEtB,CAIAyR,6BAA6BriB,GACD,OAApBha,KAAKo8B,aACL3X,aAAazkB,KAAKo8B,YAClBp8B,KAAKo8B,WAAa,MAElBpiB,EAAWhmC,OAAS,EACpBgsB,KAAKC,SAAS,CACVg8B,6BAA6B,EAC7BC,aAAc,GACdC,sBAAsB,EACtB/R,WAAY,MAGhBpqB,KAAK+sB,YACL/sB,KAAKo8B,WAAaxX,YAAW,KACzB5kB,KAAKC,SACD,CAACi8B,aAAc,GAAIC,sBAAsB,EAAO/R,WAAY,KAC5D,KAEIpqB,KAAKwqB,SAAWpmB,EACZ,0BACA,MACA,CAAC,EACD,CAACo4B,oBAAqBxiB,EAAYyiB,WAAYz8B,KAAK+sB,WACnD/sB,KAAK42B,mBACL52B,KAAK62B,iBACL72B,KAAK82B,2BACR,GAER,GACF,KAEX,CAEAF,mBAAmB12C,GACf8f,KAAKwqB,SAAW,KACZh1C,SAAS0K,EAAKu8C,YAAcz8B,KAAK+sB,WAIrC/sB,KAAKC,SAAS,CACVg8B,6BAA6B,EAC7BC,cAAe9/B,YAAoBlc,GAAMga,QAAU,IAAIna,KAAKigB,KAAK08B,iBAAiBvqD,KAC9EwqD,IAAC,CAAMtqD,MAAOsqD,EAAGrqD,MAAO,GAAGqqD,EAAE/kC,qBAAqB+kC,EAAE/hC,qBAAqB+hC,EAAExjC,eAAewjC,EAAE5lC,aAChGolC,qBAAsBj8C,EAAKshB,KAAKo7B,UAAY,GAEpD,CAEA/F,iBAAiB32C,GACb8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVmqB,WAAY,0DAAsClqC,EAAKiF,WAE/D,CAEA2xC,2BAA2BptC,GACvBsW,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVmqB,WAAY,mHAA2E1gC,MAE/F,CAEA4yC,sBAAsBpf,GAClBld,KAAKC,SAAS,CAACg8B,6BAA6B,GAChD,CAEAM,wBAAwBlgB,GACpB,MAAMhqC,EAA2B,OAAnBgqC,EAA0B,KAAOA,EAAehqC,MAC9D2tB,KAAKC,SACD,CACIg8B,6BAA6B,EAC7BrkC,YAAavlB,IAEjB,IAAM2tB,KAAKF,MAAM47B,kBAAkBrpD,IAE3C,CAIA+tB,SACI,MAAM,MAAEtY,EAAK,WAAEo+B,EAAU,YAAElO,EAAW,QAAE3J,GAAYrO,KAAKF,OACnD,WACFsqB,EAAU,aACV8R,EAAY,YACZtkC,EAAW,qBACXukC,EAAoB,4BACpBF,GACAj8B,KAAKG,MAEH08B,EAA2B,wIAEjC,OACIl9B,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,wBACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,aAEhBigB,GAAwBx8B,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAEmwB,GACrCl9B,IAAAU,cAAC4Y,GAAM,CACH,aAAY,qDAA2CkjB,EAAuBU,EAA2B,MAAMxuB,EAAUvmB,EAAQ,MAAMsiC,EAAWp2C,OAAS,EAAIo2C,EAAa,KAC5K7d,UAAW8B,EA3IE,uCADR,gBA6IL4M,WAAY,CACRD,kBAAmBA,IAAM,KACzB8hB,mBAAoBA,IAAM,MAE9B9kB,YAAaA,EACbe,WAAYmN,EACZnM,WAAYkiB,EACZzf,iBAAkBA,IAAM,sBACxBhM,QAAS0rB,EACTlwB,YAAagM,EAAcyJ,GAAYnvC,MAAQ,GAC/C2nC,mBAAoBA,IAAe,wCACnC7O,OAAQ,IACDF,EACH6xB,WAAYA,CAACtxB,EAAUtL,KAAK,IACvBsL,EACHwS,UAAW,UAEb+e,SAAUA,CAACvxB,EAAUtL,KAAK,IACrBsL,EACHwS,UAAW,WAGjB5rC,MAAOulB,EACD,CACEvlB,MAAOulB,EACPtlB,MAAO,GAAGslB,EAAYA,qBAAqBA,EAAYgD,qBAAqBhD,EAAYuB,eAAevB,EAAYb,UACnHihB,EAAc,KAAOyJ,GAC7BkD,OAAQ3kB,KAAKs8B,sBACblmB,SAAUpW,KAAKu8B,wBACfU,cAAej9B,KAAKq8B,+BAEvBhuB,GAAW1O,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEA,GACxBsiC,EAAWp2C,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEsiC,GAGnD,E,aCrKJ,MAAM8S,GAAoB,gBACpBC,GAA4B,uCACrBC,GAAkC,CAC3C/qD,MAAO,GACPuP,KAAM,QACNtP,MAAO,SAIJ,MAAM+qD,WAA6Cz9B,YAEtDC,YAAYC,GACRC,MAAMD,GA0JV,KAEAw9B,8BAAiCjhB,IAC7BA,EAAiBA,GAAkB,KAE/Brc,KAAKF,MAAMvN,cAAgB8pB,GAC/Brc,KAAKC,SACD,CACIjN,WAAY,KACZH,WAAY,KACZ9F,WAAY,KACZk8B,QAAS,KACTK,aAAc,KACdiU,mBAAoB,GACpBC,mBAAoB,GACpBC,iBAAkB,GAClBC,sBAAuB,KAE3B,IAAM19B,KAAKF,MAAM69B,oBACb,CACIprC,YAAa8pB,EACbtpB,UAAW,KACXD,SAAU,KACV9F,SAAU,KACVwG,OAAQ,KACRtD,YAAa,QAGxB,EACJ,KAED0tC,wBAA2B1gB,IACvB,MAAM7qC,EAAQ6qC,EAAG7N,cAAch9B,MAC/B2tB,KAAKC,SACD,CACIjN,WAAY,KACZH,WAAY,KACZ9F,WAAY,KACZk8B,QAAS,KACTK,aAAc,KACdiU,mBAAoB,GACpBC,mBAAoB,GACpBK,oBAAqB,GACrBJ,iBAAkB,GAClBC,sBAAuB,KAE3B,KACI19B,KAAKF,MAAM69B,oBACP,CACIprC,YAAayN,KAAKF,MAAMpd,aAAarC,QACjCy9C,GACIA,EAAazrD,MAAM0D,aAAe1D,EAAM0D,aAC9C,GACFgd,UAAW,KACXD,SAAU,KACV9F,SAAU,QACNgT,KAAKF,MAAMi+B,sBACT,CAAC5tC,kBAAmB,IAAIitC,KACxB,CAAC,EAEP5pC,OAAQ,KACRtD,YAAa,MAEpB,GAER,EACH,KAEF8tC,sBAAyB3hB,IACrBA,EAAiBA,GAAkB,KAE/Brc,KAAKF,MAAM/M,YAAcspB,GAC7Brc,KAAKC,SACD,CACIpN,WAAY,KACZ9F,WAAY,KACZk8B,QAAS,KACTK,aAAc,KACdiU,mBAAoB,GACpBC,mBAAoB,GACpBC,iBAAkB,GAClBC,sBAAuB,KAE3B,IAAM19B,KAAKF,MAAMm+B,kBACb,CACIlrC,UAAWspB,EACXvpB,SAAU,KACV9F,SAAU,KACVwG,OAAQ,KACRtD,YAAa,QAGxB,EACH,KAEFguC,qBAAwB7hB,IACpBA,EAAiBA,GAAkB,KAE/Brc,KAAKF,MAAMhN,WAAaupB,GAC5Brc,KAAKC,SACD,CACIlT,WAAY,KACZk8B,QAAS,KACTK,aAAc,KACdkU,mBAAoB,GACpBC,iBAAkB,GAClBC,sBAAuB,KAE3B,IAAM19B,KAAKF,MAAMq+B,iBACb,CACIrrC,SAAUupB,EACVrvB,SAAU,KACVwG,OAAQ,KACRtD,YAAa,QAExB,EACH,KAEFkuC,qBAAwB/hB,IACpBA,EAAiBA,GAAkB,KAE/Brc,KAAKF,MAAM9S,WAAaqvB,GAC5Brc,KAAKC,SACD,CACIgpB,QAAS,KACTK,aAAc,KACdmU,iBAAkB,GAClBC,sBAAuB,KAE3B,IAAM19B,KAAKF,MAAMu+B,iBACb,CACIrxC,SAAUqvB,EACV7oB,OAAQ,KACRtD,YAAa,QAExB,EACH,KAEFouC,6BAAgCjsD,IAC5B2tB,KAAKF,MAAMy+B,0BAA0BlsD,EAAM,EAC9C,KAEDmsD,mBAAsBniB,IAClBA,EAAiBA,GAAkB,KACnCrc,KAAKF,MAAM2+B,eAAe,CAACjrC,OAAQ6oB,GAAgB,EACtD,KAEDqiB,wBAA2BriB,IACvBA,EAAiBA,GAAkB,KACnCrc,KAAKF,MAAM6+B,oBAAoB,CAACzuC,YAAamsB,GAAgB,EAChE,KAEDuiB,0BAA4B,CAAC1+C,EAAM2+C,KAC/B7+B,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACV,CAAC4+B,GAAiB3+C,EAAK2+C,GAAgB1sD,KAAI+J,IAAC,CACxC7J,MAAO6J,EAAErJ,GACT+O,KAAM1F,EAAE0F,KACRtP,MAAO,GAAG4J,EAAE0F,UAAU1F,EAAE7D,YAE9B,EACL,KAEDymD,wBAA0B,CAAC5+C,EAAM6+C,EAAkBC,KAC/Ch/B,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACV,CAAC++B,GAAY,uCAAwBD,MACvC,EACL,KAEDE,kCAAoC,CAACv1C,EAAQq1C,EAAkBC,KAC3Dh/B,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACV,CAAC++B,GAAY,uCAAwBD,+DACGr1C,MAC1C,EAtUFsW,KAAKG,MAAQ,CACTnN,WAAY,KACZH,WAAY,KACZ9F,WAAY,KACZk8B,QAAS,KACTK,aAAc,KACdkU,mBAAoB,GACpBD,mBAAoB,GACpBM,oBAAqB,GACrBJ,iBAAkB,GAClBC,sBAAuB,IAE3B19B,KAAKwqB,SAAW,IACpB,CAEArR,oBACI,GAAKnZ,KAAKF,MAAMpd,aAAa1O,OAA7B,CAEA,GAAIgsB,KAAKF,MAAMo/B,qBAAsB,CACjC,MAAM,YAAE3sC,GAAgByN,KAAKF,MAC7B,IAAMvN,IAAeA,EAAYlgB,MAAU,OAE3C,IAAKkgB,EAAYjgB,MAKb,YAJA0tB,KAAKm/B,oCACDn/B,KAAKF,MAAMpd,aAAc6P,EAAa,cACtCyN,KAAKF,MAAM69B,oBAIvB,CACA39B,KAAKo/B,iBAdyC,CAelD,CAEA9pB,mBAAmBC,EAAWrV,GAE1B,GAAIF,KAAKG,MAAM09B,oBAAoB7pD,QAC/BgsB,KAAKG,MAAMq9B,mBAAmBxpD,QAC9BgsB,KAAKG,MAAMo9B,mBAAmBvpD,QACZ,OAAlBgsB,KAAKwqB,SAAqB,OAG9B,IAAKxqB,KAAKF,MAAMpd,aAAa1O,OAAU,OAEvC,MAAM,YAAEue,GAAgByN,KAAKF,MAC7B,IAAMvN,IAAeA,EAAYlgB,MAAU,OAE3C,GAAIkgB,IAAgBgjB,EAAUhjB,YAE1B,YADAyN,KAAKo/B,kBAIT,MAAM,UAAErsC,GAAciN,KAAKF,MAC3B,GAAKE,KAAKG,MAAMnN,YAAgBD,GAAaA,EAAU1gB,MAIvD,GAAK0gB,EAAUzgB,MAKR,GACHygB,IAAcwiB,EAAUxiB,WACvBA,IAAciN,KAAKG,MAAMtN,aAAeqN,EAAUrN,WAEnDmN,KAAKq/B,sBACF,CACH,MAAM,SAAEvsC,GAAakN,KAAKF,MAC1B,IACKE,KAAKG,MAAMtN,aACVC,IAAYA,EAASzgB,MACvB,OAEJ,GAAKygB,EAASxgB,MAKP,GACHwgB,IAAayiB,EAAUziB,UACtBA,IAAakN,KAAKG,MAAMpT,aAAemT,EAAUnT,WAElDiT,KAAKs/B,sBACF,CACH,MAAM,SAAEtyC,GAAagT,KAAKF,MAC1B,IACKE,KAAKG,MAAMpT,aACVC,IAAYA,EAAS3a,MACvB,OAEJ,MAAMktD,EAAal9C,YAAsBkQ,GACnCitC,EAAkBl9C,YAA2BiQ,GAEnD,GAAKvF,EAAS1a,OAKP,GACH0a,IAAauoB,EAAUvoB,UACtBuyC,IAAev/B,KAAKG,MAAM8oB,UAAY/oB,EAAU+oB,SAChDuW,IAAoBx/B,KAAKG,MAAMmpB,eAAiBppB,EAAUopB,aAEvDiW,EACAv/B,KAAKy/B,eACED,GACPx/B,KAAK0/B,yBAGT,GAAIH,EAAY,CACZ,MAAM,OAAC/rC,GAAUwM,KAAKF,MACtB,IACKE,KAAKG,MAAM8oB,UACVz1B,IAAUA,EAAOnhB,MAEnB,OAGCmhB,EAAOlhB,OACR0tB,KAAKm/B,oCACDn/B,KAAKG,MAAM8oB,QAASz1B,EAAQ,SAC5BwM,KAAKF,MAAMu+B,iBAGvB,MAAO,GAAImB,EAAiB,CACxB,MAAM,YAACtvC,GAAe8P,KAAKF,MAC3B,IACKE,KAAKG,MAAMmpB,eACVp5B,IAAeA,EAAY7d,MAE7B,OAGC6d,EAAY5d,OACb0tB,KAAKm/B,oCACDn/B,KAAKG,MAAMmpB,aAAcp5B,EACzB,cAAe8P,KAAKF,MAAMu+B,iBAGtC,OA7CAr+B,KAAKm/B,oCACDn/B,KAAKG,MAAMpT,WAAYC,EAAU,WACjCgT,KAAKF,MAAMu+B,iBA6CvB,MAnEIr+B,KAAKm/B,oCACDn/B,KAAKG,MAAMtN,WAAYC,EAAU,WACjCkN,KAAKF,MAAMq+B,iBAkEvB,MArFIn+B,KAAKm/B,oCACDn/B,KAAKG,MAAMnN,WAAYD,EAAW,YAClCiN,KAAKF,MAAMm+B,kBAoFvB,CAEAzZ,uBAC0B,OAAlBxkB,KAAKwqB,UACLxqB,KAAKwqB,SAASI,OAEtB,CAsLAuU,oCACIQ,EAAapkC,EAAQqkC,EAAYC,GAEjC,IAAK,IAAIvqD,KAAOqqD,EACZ,GAAIrqD,EAAIjD,QAAUkpB,EAAOlpB,MAErB,YADAwtD,EAAoB,CAAC,CAACD,GAAatqD,IAI3CuqD,EAAoB,CAAC,CAACD,GAAa,MACvC,CAEAE,aAAY3lB,GAMR,IANS,WACTyP,EAAU,UACVoV,EAAS,iBACTD,EAAgB,eAChBF,EAAc,iBACdkB,GACH5lB,EACG,MAAMhoB,EAAS6N,KAAKF,MAAMigC,GACrB5tC,IAAYA,EAAO9f,OAAS8f,EAAOtf,MACxCmtB,KAAKwqB,SAAWpmB,EACZsiB,GAASkD,GAAYrjB,OAAOpU,EAAO9f,OAAS8f,EAAOtf,IACnD,MACA,CAAC,EACD,CAACmtD,KAAMhgC,KAAKF,MAAMkgC,MAAQ,YACzB9/C,GAAS8f,KAAK4+B,0BAA0B1+C,EAAM2+C,KAC9C3+C,GAAS8f,KAAK8+B,wBACX5+C,EAAM6+C,EAAkBC,KAC3Bt1C,GAAWsW,KAAKi/B,kCACbv1C,EAAQq1C,EAAkBC,KAEtC,CAEAI,kBACIp/B,KAAK8/B,aAAa,CACdlW,WAAY,aACZoV,UAAW,sBACXD,iBAAkB,4BAClBF,eAAgB,aAChBkB,iBAAkB,eAE1B,CAEAV,kBACIr/B,KAAK8/B,aAAa,CACdlW,WAAY,aACZoV,UAAW,qBACXD,iBAAkB,qBAClBF,eAAgB,aAChBkB,iBAAkB,aAE1B,CAEAT,kBACIt/B,KAAK8/B,aAAa,CACdlW,WAAY,aACZoV,UAAW,qBACXD,iBAAkB98C,YAAiB+d,KAAKF,MAAMvN,aACxC,2CAAyB,oBAC/BssC,eAAgB,aAChBkB,iBAAkB,YAE1B,CAEAN,eACIz/B,KAAK8/B,aAAa,CACdlW,WAAY,UACZoV,UAAW,mBACXD,iBAAkB,cAClBF,eAAgB,UAChBkB,iBAAkB,YAE1B,CAEAL,oBACI1/B,KAAK8/B,aAAa,CACdlW,WAAY,eACZoV,UAAW,wBACXD,iBAAkB,aAClBF,eAAgB,eAChBkB,iBAAkB,YAE1B,CAIA3/B,SACI,MAAM,SACFpT,EAAQ,eACRizC,EAAc,SACdr2B,EAAQ,YACRoO,EAAW,YACX9nB,EAAW,kBACXgwC,EAAiB,kBACjB/vC,EAAiB,wBACjBgwC,EAAuB,YACvB5tC,EAAW,kBACX6tC,EAAoB,GAAE,aACtB19C,EAAY,qBACZw8C,EAAoB,SACpBpsC,EAAQ,eACRutC,EAAc,UACdttC,EAAS,gBACTutC,EAAe,OACf9sC,EAAM,aACN+sC,EAAY,sBACZxC,GACA/9B,KAAKF,OACH,mBACF09B,EAAkB,sBAClBE,EAAqB,mBACrBH,EAAkB,oBAClBM,EAAmB,iBACnBJ,GACAz9B,KAAKG,MAEHo/B,EAAal9C,YAAsBkQ,GACnCitC,EAAkBl9C,YAA2BiQ,GAE7CiuC,EAAuBtB,GACzBkB,EAAkBpsD,OAAS,EACzBysD,EAAqBH,EAAgBtsD,OAAS,EAC9C0sD,EAAoBL,EAAersD,OAAS,EAC5C2sD,EAAoBV,EAAejsD,OAAS,EAClD,IAAI4sD,GAA6B,EAC7B7C,IACA6C,EACIrB,GAAcY,EAAwBnsD,OAAS,GAEvD,MAAM6sD,EAAkBtB,GAAcgB,EAAavsD,OAAS,EACtD8sD,EAAuBtB,GAAmBU,EAAkBlsD,OAAS,EACrE+sD,EAAcP,GAAwBC,GACxCC,GAAqBC,GACrBC,GAA8BC,GAC9BC,EAEEE,EAAgB/+C,YAAiBsQ,GACjC,qCAA6B,iBAEnC,OACIoN,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GAChB+wB,EAEOv/B,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,wBACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,aAEjBvc,IAAAU,cAAC4Y,GAAM,CACH1M,UAAW2wB,GACXllB,YAAaA,EACbe,WAAYnP,EACZ4S,iBAAkBA,IAAM,sBACxBhM,QAAS9tB,EACTspB,YAAY,2BACZiO,mBAAoBA,IAAe,wCACnC7O,OAAQF,EACR74B,MAAOkgB,EACP6jB,SAAUpW,KAAKs9B,gCAClBkD,GACG7gC,IAAAU,cAAC6hB,GAAS,CACNC,YAAY,cACZC,UAAWge,KAMvBzgC,IAAAU,cAAA,gBACIV,IAAAU,cAACgM,EAAI,CAACS,IAAI,SAASP,UAAU,SAAQ,yBACpC7pB,EAAavQ,KAAI2rD,GACdn+B,IAAAU,cAAC4gC,KAAK,CACFC,QAAS3uC,EAAYlgB,MAAM0D,aAAe+nD,EAAazrD,MAAM0D,WAC7D6zB,SAAUA,EACVnuB,IAAKqiD,EAAazrD,MAClBC,MAAOwrD,EAAaxrD,MACpB+F,KAAK,gBACLhG,MAAOyrD,EAAazrD,MACpB+jC,SAAUpW,KAAK49B,8BAOvCj+B,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,qBACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,aAEjBvc,IAAAU,cAAC4Y,GAAM,CACH,mBAAkB4kB,EAAoB7pD,OAAS,EAAI,uBAAyB,KAC5Eu4B,UAAWk0B,EAAqBtD,GAA4BD,GAC5DllB,YAAaA,EACbe,WAAYnP,GAAas1B,IAAyB3sC,EAClDiqB,iBAAkBA,IAAM,sBACxBhM,SAAUxQ,KAAKG,MAAMnN,YAAc,IAAIjT,KAAK0B,KAC5CuqB,YAAY,2BACZiO,mBAAoBA,IAAe,wCACnC7O,OAAQF,EACR74B,MAAO0gB,EACPqjB,SAAUpW,KAAKg+B,wBAClByC,GACG9gC,IAAAU,cAAC6hB,GAAS,CACNC,YAAY,0BACZC,UAAWke,IAGlBzC,EAAoB7pD,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,wBAAwBgrD,IAE9El+B,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,uBACN,aAA0B,OAAdygB,EAAqB,KAAO,2HACxC+Z,IAAI,QACJ31B,UAAWwoB,IAAMuc,YACjBoB,SAAwB,OAAdvqB,EAAqB,KAAO,KACtC4M,IAAAU,cAAC4Y,GAAM,CACH,mBAAkBskB,EAAmBvpD,OAAS,EAAI,4BAA8B,KAChFu4B,UAAWm0B,EAAoBvD,GAA4BD,GAC3DllB,YAAaA,EACbe,WAAYnP,GAA0B,OAAd7W,EACxBypB,iBAAkBA,IAAM,sBACxBhM,QAAuB,OAAdzd,EAAsBiN,KAAKG,MAAMtN,YAAc,GAAM,KAC9DmZ,YAAY,2BACZiO,mBAAoBA,IAAe,wCACnC7O,OAAQF,EACR74B,MAAOygB,EACPsjB,SAAUpW,KAAKk+B,uBAClBwC,GACG/gC,IAAAU,cAAC6hB,GAAS,CACNC,YAAY,uBACZC,UAAWie,IAGlB9C,EAAmBvpD,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,6BAA6B0qD,KAGtF59B,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACiY,GAAc,CACXhmC,MAAO0uD,EACP,aAAyB,OAAbluC,EAAoB,KAAO,GAAGkuC,wHAC1Cl0B,IAAI,QACJ31B,UAAWwoB,IAAMuc,YACjBoB,SAAuB,OAAbxqB,EAAoB,KAAO,KAErC6M,IAAAU,cAAC4Y,GAAM,CACH,mBAAkBukB,EAAmBxpD,OAAS,EAAI,wBAA0B,KAC5Eu4B,UAAWo0B,EAAoBxD,GAA4BD,GAC3DllB,YAAaA,EACbe,WAAYnP,GAAyB,OAAb9W,EACxB0pB,iBAAkBA,IAAM,sBACxBhM,QAAsB,OAAb1d,EAAqBkN,KAAKG,MAAMpT,YAAc,GAAM,KAC7Dif,YAAY,2BACZiO,mBAAoBA,IAAe,wCACnC7O,OAAQF,EACR74B,MAAO2a,EACPopB,SAAUpW,KAAKo+B,uBAClBuC,GACGhhC,IAAAU,cAAC6hB,GAAS,CACNC,YAAY,kBACZC,UAAW6d,IAGlBzC,EAAmBxpD,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,yBAAyB2qD,KAGjF+B,GACG5/B,IAAAU,cAAAV,IAAAyc,SAAA,KACK2hB,GACGp+B,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,mBACNq6B,SAAS,sBACTG,IAAI,QACJ31B,UAAWwoB,IAAMuc,aAEjBvc,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkB,gCAA+B4c,EAA6B,0BAA4B,IAC1G,aAAY,6BAA6BzwC,EAAkB9d,MAAM2B,oBACjE,iBAAe,EACf,gBAAe,EACfiyC,gBAAc,EACdjB,kBAAkB,mBAClBpb,SAAUA,EACVuE,WAAS,EACTt7B,GAAG,sBACHw7B,QAASuyB,EACTza,UAAW,EACX9zC,MAAO8d,EAAkB9d,MACzB+jC,SAAUuC,GAAS3Y,KAAKs+B,6BAA6B3lB,EAAMwM,OAAO9yC,OAClEqyC,QAAS/L,GAAS3Y,KAAKs+B,6BAA6B,MACvDsC,GACGjhC,IAAAU,cAAC6hB,GAAS,CACNC,YAAY,yBACZC,UAAW+d,IAGnBxgC,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAAC75B,GAAG,gCACV8sB,IAAAU,cAAA,QAAMkM,UAAU,WAAU,mCAAsC,WAKhF5M,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,SACN,aAAyB,OAAb0a,EAAoB,KAAO,0GACvC8f,IAAI,QACJ31B,UAAWwoB,IAAMuc,YACjBoB,SAAuB,OAAbtwB,EAAoB,KAAO,KAErC2S,IAAAU,cAAC4Y,GAAM,CACH,mBAAkBwkB,EAAiBzpD,OAAS,EAAI,qBAAuB,KACvEu4B,UAAWs0B,EAAkB1D,GAA4BD,GACzDllB,YAAaA,EACbe,WAAYnP,GAAyB,OAAb5c,EACxBwvB,iBAAkBA,IAAM,sBACxBhM,QAAsB,OAAbxjB,EAAqBgT,KAAKG,MAAM8oB,SAAW,GAAM,KAC1Djd,YAAY,2BACZiO,mBAAoBA,IAAe,wCACnC7O,OAAQF,EACR74B,MAAOmhB,EACP4iB,SAAUpW,KAAKw+B,qBAClBqC,GACGlhC,IAAAU,cAAC6hB,GAAS,CACNC,YAAY,eACZC,UAAWme,IAGlB9C,EAAiBzpD,OAAS,GACvB2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,sBAAsB4qD,GAExCsD,GAAephC,IAAAU,cAAA,QAAMoN,KAAK,QAAQlB,UAAU,WAAU,yCAKtEizB,GACG7/B,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,aACN,aAAyB,OAAb0a,EAAoB,KAAO,mGACvC8f,IAAI,QACJ31B,UAAWwoB,IAAMuc,YACjBoB,SAAuB,OAAbtwB,EAAoB,KAAO,KAErC2S,IAAAU,cAAC4Y,GAAM,CACH,mBAAkBykB,EAAsB1pD,OAAS,EAAI,0BAA4B,KACjFu4B,UAAWu0B,EAAuB3D,GAA4BD,GAC9DllB,YAAaA,EACbe,WAAYnP,GAAyB,OAAb5c,EACxBwvB,iBAAkBA,IAAM,sBACxBhM,QAAsB,OAAbxjB,EAAqBgT,KAAKG,MAAMmpB,cAAgB,GAAM,KAC/Dtd,YAAY,2BACZiO,mBAAoBA,IAAe,wCACnC7O,OAAQF,EACR74B,MAAO6d,EACPkmB,SAAUpW,KAAK0+B,0BAClBoC,GACGnhC,IAAAU,cAAC6hB,GAAS,CACNC,YAAY,oBACZC,UAAW8d,IAGlBxC,EAAsB1pD,OAAS,GAC5B2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,2BAA2B6qD,GAE7CqD,GAAephC,IAAAU,cAAA,QAAMoN,KAAK,QAAQlB,UAAU,WAAU,wCAM/E,E,uBCttBJ,MAAM40B,WAAkBvhC,YAEpBC,YAAYC,GACRC,MAAMD,GAAO,KAwDjBshC,iCAAmC,KAC/BphC,KAAKC,SAAS,CAACohC,mBAAmB,GAAO,EAC5C,KAEJC,sBAAwB,CAACtnD,EAAK2C,KACvBqjB,KAAKC,UACD,IAAMhjB,YACFjD,EACZ2C,IACK,EAhEDqjB,KAAKG,MAAQ,CACTkhC,mBAAmB,EACnBziB,SAAU,KACV2iB,mBAAmB,EACnBC,gBAAiB,KACjBC,sBAAsB,EACtBC,qBAAqB,EACrB/5C,OAAQ,CAAC,GAGbqY,KAAK2hC,uBAAyB,CAAC,OAC/B3hC,KAAK4hC,sBAAwB,KAC7B5hC,KAAK6hC,oBAAsB,KAC3B7hC,KAAK8hC,wBAA0B,KAC/B9hC,KAAK+hC,YAAc,KAEnB/hC,KAAKgiC,sBAAwBhiC,KAAKgiC,sBAAsB3d,KAAKrkB,MAC7DA,KAAKiiC,cAAgBjiC,KAAKiiC,cAAc5d,KAAKrkB,KACjD,CAEAsV,mBAAmBC,EAAWrV,GACtBA,EAAU0e,WAAa5e,KAAKG,MAAMye,UAAoC,IAAxB5e,KAAKG,MAAMye,WACzD5e,KAAKC,SAAS,CACVuhC,gBAAiB,KACjBC,sBAAsB,IAG1BzhC,KAAK4hC,sBAAwBhd,YAAW,KACpC5kB,KAAK4hC,sBAAwB,KAC7B5hC,KAAKC,SAAS,CACVwhC,sBAAsB,EACtBF,mBAAmB,GACrB,GACH,KAEX,CAEApoB,oBACQnZ,KAAKF,MAAM9W,UAAU8P,eACrBkH,KAAKiiC,cAAc,CAACjiC,KAAKF,MAAM9W,UAAU8P,eAEjD,CAEA0rB,uBACuC,OAA/BxkB,KAAK4hC,uBACLnd,aAAazkB,KAAK4hC,uBAEW,OAA7B5hC,KAAK6hC,qBACLpd,aAAazkB,KAAK6hC,qBAEG,OAArB7hC,KAAK+hC,aACL/hC,KAAK+hC,YAAYnX,OAEzB,CAcAxqB,SACI,MAAM1X,EAAqBsX,KAAKF,MAAMpX,mBAChCjB,EAAIuY,KAAKF,MAAM9W,UACfvT,EAAcgS,EAAEhS,YAChBywC,EAAalmB,KAAKF,MAAMomB,WACxBgc,EAAmB,aAAaz6C,EAAEhS,uBAElCkS,EAAShM,OAAOwE,OAAO,CAAC,EAAG6f,KAAKF,MAAMnY,QAAU,CAAC,EAAGqY,KAAKG,MAAMxY,QAC/Dw6C,EAAqBniC,KAAKF,MAAMqiC,mBAChCC,GAAkBz6C,EAAOw6C,IAAuB,IAAInuD,OAAS,EAC7DumD,GAAkB5yC,EAAOlU,OAAS,IAAIO,OAAS,EAErD,OACI2rB,IAAAU,cAACyN,EAAG,CAAChB,IAAI,MACJ9M,KAAKF,MAAMuiC,WACR1iC,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACiiC,KAAQ,CACL,mBAAkBF,EAAiB,mBAAqB,KACxDlB,QAASz5C,EAAE06C,GACXv4B,SAAUsc,EACV5zC,MAAO0tB,KAAKF,MAAMyiC,WAClBnsB,SAAUuC,GAAS3Y,KAAKF,MAAM0iC,cAAc7pB,EAAMwM,OAAO+b,QAASzrD,KAErE2sD,GACGziC,IAAAU,cAAA,MAAIxtB,GAAG,oBACF8U,EAAOw6C,GAAoBhwD,KAAI,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,OAKxF+sB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,6BAAmBw6B,IAAI,QAAQH,SAAUu1B,GAC3DviC,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkBuW,EAAiB,wBAA0B,KAC7D,aAAY,yEAA4D9yC,EAAEhU,MAAMO,oBAChF,gBAAe,IACf+wC,WAAS,EACTkB,gBAAc,EACdjB,kBAAkB,6BAClBpb,SAAUlhB,GAAsBw9B,EAChC/X,WAAS,EACTt7B,GAAIqvD,EACJ7zB,QAASksB,EACTpU,UAAW,IACX9zC,MAAOoV,EAAEhU,MACTkxC,OAASzH,GAAOld,KAAKF,MAAM2iC,wBAAwBh7C,EAAEhS,YAAa,CAAChC,MAAOypC,EAAGiI,OAAO9yC,MAAMqG,SAC1F09B,SAAW8G,GAAOld,KAAKF,MAAM2iC,wBAAwBh7C,EAAEhS,YAAa,CAAChC,MAAOypC,EAAGiI,OAAO9yC,QACtFqyC,SAAUh8B,GAAkB,CAAMw0B,GAAOld,KAAKF,MAAM2iC,wBAAwBh7C,EAAEhS,YAAa,CAAChC,MAAO,QAEtG8mD,GAAkB56B,IAAAU,cAAA,MAAIxtB,GAAG,yBAAyB8U,EAAOlU,MAAMtB,KAAI,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,OAEhH+sB,IAAAU,cAACiY,GAAc,KACVtY,KAAK0iC,WAAWjtD,EAAakS,KAEhCe,GACEiX,IAAAU,cAACwR,EAAY,CACTjI,SAAUsc,EACV7T,QAAM,EACNjD,QAASA,IAAMpP,KAAKC,SAAS,CAACohC,mBAAmB,KAAQ,gCAC3C1hC,IAAAU,cAAA,QAAMkM,UAAU,WAAU,IAAE9kB,EAAEhU,QAGnDusB,KAAKG,MAAMkhC,mBACR1hC,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,SACVqQ,YAAY,gEACZD,UAAY74B,IAAOkc,KAAK8hC,wBAA0Bh+C,CAAC,EACnD6rB,QAAS3P,KAAKohC,kCAEdzhC,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACzC,QAASA,KAAOpP,KAAKC,SAAS,CAACohC,mBAAmB,GAAO,EAAGtvB,QAAM,GAAC,UACjFpS,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKgiC,sBAAuB3vB,QAAM,GAAC,mCAIrEkoB,GAAkB56B,IAAAU,cAAA,QAAMoN,KAAK,QAAQlB,UAAU,WAAU,sCAGtE,CAEAm2B,WAAWjtD,EAAakS,GAEpB,MAAMF,EAAIuY,KAAKF,MAAM9W,UACf41B,EAAWjf,IAAAU,cAACqe,GAAoB,CAACE,SAAU5e,KAAKG,MAAMye,UAAY,IAClE92B,GAASH,EAAOkR,MAAQ,IAAI7kB,OAAS,EAAI2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,mBAAmB8U,EAAOkR,MAAe,KACvG,GAAIpR,EAAEoR,KAAKhmB,GAAI,CACX,MAAMgmB,EAAOpR,EAAEoR,KACf,OACI8G,IAAAU,cAAAV,IAAAyc,SAAA,KACKpc,KAAKG,MAAMohC,mBAAqB3iB,EAChC5e,KAAKG,MAAMshC,sBAAwB9hC,IAAAU,cAACgM,EAAI,CAACE,UAAU,eAAekB,KAAK,UAAS,4BACjF9N,IAAAU,cAACgM,EAAI,KAAExT,EAAKplB,OAC3BksB,IAAAU,cAACwR,EAAY,CAACtF,UAAU,mBAAmB6C,QAAU8N,GAAOld,KAAKshC,sBAAsBzoC,EAAK8pC,IAAK9pC,EAAKplB,QAAQ,8BAAiBksB,IAAAU,cAAA,QAAMkM,UAAU,WAAU,IAAE9kB,EAAEhU,OAASolB,EAAKplB,QAC3JqU,EACAkY,KAAK4iC,YAAYn7C,GAG9B,CAGA,GAAIuY,KAAKG,MAAMohC,kBACX,OACI5hC,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,KAAErM,KAAKG,MAAMqhC,iBACjB5iB,EACA92B,GAKb,IAAI+6C,EAAY,KAEhB,MAAMC,GAAiBn7C,EAAOkR,MAAQ,IAAI7kB,OAAS,EAAI,kBAAoB,KACrE+uD,EAAgB/iC,KAAKG,MAAMuhC,oBAAsB,uBAAyB,KAShF,OANImB,EADAC,GAAiBC,EACL,GAAGD,KAAiBC,IAEnBD,GAAiBC,EAK9BpjC,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC2iC,KAAQ,CAACC,OAAQjjC,KAAKiiC,gBAClB9nB,IAAA,IAAC,aAAC+oB,EAAY,cAAEC,GAAchpB,EAAA,OAC3Bxa,IAAAU,cAAA,MAAS6iC,EAAa,CAAC32B,UAAW,aAC9B5M,IAAAU,cAAA,QAAA1kB,OAAAwE,OAAA,CACI,mBAAkB0iD,EAClBj5B,SAAU5J,KAAKF,MAAMomB,WACrBrzC,GAAG,YACHgF,MAAO,CAAC0oC,QAAS,UACb4iB,EAAc,CACd/zB,QAAS8N,GAAMld,KAAKojC,gBAAgB3tD,GACpCoC,MAAO,CAAC0oC,QAAS,QAAS8iB,SAAU,WAAYC,MAAO,EAAGllB,OAAQ,EAAGmlB,KAAM,cAGnF5jC,IAAAU,cAAA,SAAOkM,UAAU,0BAA0BE,QAAQ,aAAY,0FAC7D,IAGb3kB,EACAkY,KAAKG,MAAMuhC,qBAAuB/hC,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,wBAAuB,+BAGrF,CAEA+vD,YAAY55C,GACR,IAAKA,EAAU6P,KAAKxV,YAAe,OAAO,KAC1C,MAAM,eACFH,EAAc,YACdG,GACA2F,EAAU6P,KACd,OACI8G,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,gBAClBqtB,IAAAU,cAACgM,EAAI,KAAEhpB,EAAYR,KAAK,IAAEQ,EAAYN,WAE1C4c,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,6BAClBqtB,IAAAU,cAACgM,EAAI,KAAEnpB,IAIvB,CAEAkgD,gBAAgB3tD,GACZuqB,KAAKC,UACAC,IACG,IAAIvY,EAASuY,EAAUvY,OAEvB,cADOA,EAAa,KACb,CAACA,OAAQA,EAAO,GAGnC,CAEAq6C,wBACyC,OAAjChiC,KAAK8hC,yBACL9hC,KAAKohC,mCAETphC,KAAKF,MAAM0jC,gBAAgBxjC,KAAKF,MAAM9W,UAAUvT,YACpD,CAEAwsD,cAAcwB,GACV,IAAKA,EAAMzvD,OAGP,YADAgsB,KAAKC,SAAS,CAACuhC,gBAAiB,KAAM5iB,SAAU,OAKpD,IAAI8kB,EAAuBD,EAAM,GAOjC,GALIzjC,KAAK2jC,SAASD,IACd1jC,KAAKuS,KAAKmxB,GAIVD,EAAMzvD,OAAS,EAAG,CAClB,IAAI4vD,EAAcH,EAAMzvD,OACpBgsB,KAAKF,MAAMqmB,YACXyd,EAAcluD,KAAKsL,IACfyiD,EAAMzvD,OAENgsB,KAAKF,MAAMqmB,WAAanmB,KAAKF,MAAM+jC,iBAAmB,KAI9D,IAAK,IAAI/uD,EAAE,EAAGA,EAAE8uD,EAAa9uD,IACzBkrB,KAAKF,MAAMgkC,aAAa,CAAChrC,cAAe2qC,EAAM3uD,IAEtD,CACJ,CAEA6uD,SAAS30C,GACL,MAAM+0C,EAAe/0C,EAAK3W,KAAKE,MAAM,KAC/ByrD,EAAYD,EAAaA,EAAa/vD,OAAS,GAErD,OAAIgsB,KAAK2hC,uBAAuBltD,SAASuvD,EAAU3kD,gBAC/C2gB,KAAKC,UACAC,IACU,CACHvY,OAAQhM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUvY,OAAQ,CACxCkR,KAAM,CAAC,4CAA6B7J,EAAK3W,6CAA0C2rD,iCAEvFtC,qBAAqB,MAG7B,KACI1hC,KAAK6hC,oBAAsBjd,YAAW,KAClC5kB,KAAK6hC,oBAAsB,KAC3B7hC,KAAKC,SAAS,CAACyhC,qBAAqB,GAAO,GAC5C,IAAK,KAGT,IAGsB,OAA7B1hC,KAAK6hC,qBACLpd,aAAazkB,KAAK6hC,qBAEtB7hC,KAAKC,UAAUC,IACX,IAAIvY,EAASuY,EAAUvY,OAEvB,cADOA,EAAOkR,KACP,CACHlR,OAAQA,EACR+5C,qBAAqB,EACxB,KAEE,EACX,CAEAnvB,KAAKvjB,GACDgR,KAAKC,SAAS,CAAC2e,SAAU,EAAG2iB,mBAAmB,EAAMC,gBAAiBxyC,EAAK3W,OAE3E,MAAM4rD,EAAW,IAAIC,SACrBD,EAASE,OAAO,OAAQn1C,GAExBgR,KAAK+hC,YAAc,IAAIn9B,eACvB5E,KAAK+hC,YAAY/8B,KAAK,OAAQ,sBAAsBhF,KAAKF,MAAMskC,kBAAoB,aAEnF,MAAMxrD,EAAuBD,cACzBC,GACAonB,KAAK+hC,YAAY78B,iBAAiB,eAAgBtsB,GAOtDonB,KAAK+hC,YAAYsC,OAAOC,WAJJ1xD,IAChBotB,KAAKC,SAAS,CAAC2e,SAAUhsC,EAAE2xD,OAAS3xD,EAAE2O,OAAO,EAKjDye,KAAK+hC,YAAY18B,QAAU,KACvBrF,KAAK+hC,YAAc,KACnB/hC,KAAKC,UAASC,IAAS,CACnBvY,OAAQhM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUvY,OAAQ,CAACkR,KAAM,CAAC,yDACrD,EAGPmH,KAAK+hC,YAAYz8B,OAAS,KACtBpsB,YACIN,EAAsBonB,KAAK+hC,YAAYr4C,QAC3C,IACI5B,EADAyd,GAAU,EAEVC,EAAW,CAAC,EAChB,IACIA,EAAWC,KAAKC,MAAM1F,KAAK+hC,YAAYp8B,aAC3C,CAAE,MAAM7d,GACJyd,GAAU,CACd,CAEA,GAAIA,EAAS,CACT,GAAwB,OAApBC,EAAS9b,OAAiB,CAC1B,MAAMsF,EAAOwW,EAAStlB,KAAK8O,KAW3B,YAVAgR,KAAKF,MAAM2iC,wBAAwBziC,KAAKF,MAAM9W,UAAUvT,YAAa,CACjEojB,KAAM,CACFhmB,GAAImc,EAAKnc,GACT8vD,IAAK3zC,EAAK2zC,IACVlvD,MAAOub,EAAK3W,KACZ6K,eAAgB8L,EAAK7L,WACrBE,YAAa,CAACR,KAAMmM,EAAK1L,WAAWV,SAAUG,SAAUiM,EAAK1L,WAAWR,UAE5EgW,cAAe,MAGvB,CACIhR,EADO0d,EAAS7d,OACR+W,YAAsB8G,EAAS7d,OAAOqH,MAEtC0P,YAAsB8G,EAASrgB,QAE/C,MACI2C,EADmC,MAA5BkY,KAAK+hC,YAAYr4C,OAChB,uEAEA,4DAAwCsW,KAAK+hC,YAAYr4C,oDAErEsW,KAAKC,UAASC,IAAS,CACnBvY,OAAQhM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUvY,OAAQ,CAACkR,KAAM,CAAC/Q,SAExDkY,KAAK+hC,YAAc,IAAI,EAE3B/hC,KAAK+hC,YAAYn8B,KAAKq+B,EAC1B,EClZJ,MAAMO,GAAc1kC,IAChB,MAAM,SACFlS,EAAQ,OACRjG,EAAM,WACNu+B,EAAU,OACVue,EAAM,mBACN/7C,EAAkB,cAClBg8C,EAAa,WACbtpC,GACA0E,EACE6kC,GAAoB7kC,EAAMnY,QAAU,CAAC,GAAGA,QAAU,GAClDi9C,EAAsBD,EAAiB3wD,OAAS,EAEhD6vD,EAAmB/jC,EAAM+jC,kBAAoBzoC,EAAWpnB,OAE9D,OACI2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACKwoB,GAAuBjlC,IAAAU,cAAA,MAAIoN,KAAK,SAASk3B,EAAiBxyD,KAAI,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,MACvG+sB,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACoD,SAAO,IACvBmzB,GAAiB/kC,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKD,eAAa,GAAE43B,GAAU,yBACxD/7C,KAAwBoX,EAAMqmB,WAAa0d,EAAmB/jC,EAAMqmB,YACnExmB,IAAAU,cAACwR,EAAY,CACTC,KAAG,EACHlI,SAAUsc,EACV9W,QAAStP,EAAMgkC,aACf5xB,UAAQ,GACX,8BAKRtkB,EACD+R,IAAAU,cAACyQ,EAAU,CAAChE,IAAI,MACX,IAAI1R,GAAYypC,UAAU1yD,KAAIsV,GAC3BkY,IAAAU,cAAC8gC,GAAS,CACNz4C,mBAAoBA,EACpBy5C,mBAAoBriC,EAAMqiC,mBAC1BI,WAAYziC,EAAMyiC,WAClB6B,iBAAkBtkC,EAAMskC,iBACxBz8C,QAASA,GAAU,CAAC,GAAGF,EAAEhS,cAAgB,CAAC,EAC1CywC,WAAYA,EACZzqC,IAAKgM,EAAEhS,YACP0wC,UAAWrmB,EAAMqmB,UACjBkc,UAAWviC,EAAMuiC,UACjBr5C,UAAWvB,EACXo8C,iBAAkBA,EAClBpB,wBAAyB3iC,EAAM2iC,wBAC/Be,gBAAiB1jC,EAAM0jC,gBACvBM,aAAchkC,EAAMgkC,aACpBtB,cAAe1iC,EAAM0iC,mBAIlC,ECpDL/gB,GAAc,CAChBpvC,MAAO,EACPC,MAAO,WAGLwyD,GAAoBhlC,IACtB,MAAOilC,EAAmBC,GAAwBn2B,mBAAS4S,KACpDwjB,EAAwBC,GAA6Br2B,mBAAS,MAErE,GAAgC,IAA5B/O,EAAM1E,WAAWpnB,OACjB,OAAO2rB,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,wBAGtB,IAAI8D,EAAU,CAACiR,IAAe0jB,UAAUrlC,EAAM1E,WAAWjpB,KAAIsV,IACzD,IAAInV,EAAQmV,EAAEhU,MAId,OAHIqsB,EAAMxtB,QAAqC,IAA5BmV,EAAEqY,EAAMxtB,MAAMuV,YAC7BvV,GAAS,MAAMwtB,EAAMxtB,MAAM+b,eAExB,CAAChc,MAAOoV,EAAE5U,GAAIP,QAAOumB,KAAMpR,EAAEoR,KAAK,KAU7C,OACI8G,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CACPY,QAAM,EACNR,YAAU,EACV3E,UAAW04B,GAEXtlC,IAAAU,cAAC4Y,GAAM,CACH,aAAW,uBACX1M,UAAU,wCACViQ,iBAAkBA,IAAM,sBACxBhM,QAASA,EACTxE,YAAY,gCACZiO,mBAAoBA,IAAe,wCACnC7O,OAAQF,EACR74B,MAAO0yD,EACP3uB,SAAUiG,GAAkB2oB,EAAqB3oB,GACjD+oB,0BAAwB,EACxBvgB,QAASA,IAAMqgB,EAA0B,2BACzCvgB,OAAQA,IAAMugB,EAA0B,QAEf,IAA5BH,EAAkB1yD,OAAe0yD,EAAkBlsC,KAAK8pC,IAAI3uD,OAAS,GACjF2rB,IAAAU,cAACwR,EAAY,CAACtF,UAAU,mBAAmB6C,QAAU8N,GAAOjgC,YAAgB8nD,EAAkBlsC,KAAK8pC,IAAKoC,EAAkBlsC,KAAKplB,QAAQ,UAC/HksB,IAAAU,cAAA,QAAMkM,UAAU,WAAU,wBAAYw4B,EAAkBtxD,OAASsxD,EAAkBlsC,KAAKplB,QAGhE,MAApBqsB,EAAMulC,YACH1lC,IAAAU,cAACwR,EAAY,CAACtF,UAAU,mBAAmB6C,QAAU8N,GAlCtCooB,MAC3B,MAAMtrD,EAAM,iBAAiB8lB,EAAMulC,6BAC7B1oD,EAAW,wBAAcmjB,EAAMulC,iBAErC,OAAOpoD,YAAgBjD,EAAK2C,EAAS,EA8BmC2oD,IAA0B,0CAK5D,IAA5BP,EAAkB1yD,QAAgB0yD,EAAkBlsC,KAAK8pC,KACvDhjC,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,2BAA0B,4FAGlD,ECnDL0yD,GAAa,CACf1yD,GAAI,KACJY,MAAO,GACP2M,2BAJyCjN,IAA6ByL,MAAM,EAAG,GAId,GACjEsL,qBAAsB,GACtB3J,aAfA,CACIlO,MAAO,SACPC,MAAO,UAcXkO,MAAO,CACHjE,KAAM,SACNqe,YAAa,GACbzB,OAAQ,GACRpC,MAAO,GACPa,YAAa,GACbvN,YAAa,GACbkQ,MAAO,GACPtC,UAAW,KAKnB,MAAMutC,WAAyB5lC,YAE3BC,YAAYC,GAAQ,IAADyB,EACfxB,MAAMD,GAAMyB,EAAAvB,KAoBhB,KAEAylC,yBAA4BpzD,IACxB,IAAIqzD,EAAM,CACNx7C,qBAAsB,GACtB3J,aAAclO,GAEdmO,EAAQ,CACRjE,KAAM,KACNqe,YAAa,GACbzB,OAAQ,GACRpC,MAAO,GACPa,YAAa,IAEG,WAAhBvlB,EAAMA,OACNmO,EAAMjE,KAAO,SACbmpD,EAAgC,2BAAIvyD,IAA6B,IAGjEuyD,EAAgC,2BAAIvyD,IAA6B,GAGrE6sB,KAAKC,UAASC,IACH,CAAChgB,KAAMvE,OAAOwE,OAAO,CAAC,EAAG+f,EAAUhgB,KAAM,IACzCwlD,EACHllD,MAAO7E,OAAOwE,OAAO,CAAC,EAAG+f,EAAUhgB,KAAKM,MAAOA,QAErD,EACL,KAEDirC,sBAAwB,CAACpzC,EAAMhG,EAAO0X,KAClCiW,KAAKC,UAASC,IACV,IAAIylC,EAAO,CAAC,CAACttD,GAAOhG,GAIpB,MAHa,+BAATgG,GAAyC6nB,EAAUhgB,KAAiC,2BAAE7N,QAAUA,EAAMA,QACtGszD,EAA2B,qBAAI,IAE/B57C,EACO,CAAC7J,KAAMvE,OAAOwE,OAAO,CAAC,EAAG+f,EAAUhgB,KAAM,CAC5CM,MAAO7E,OAAOwE,OAAO,CAAC,EAAG+f,EAAUhgB,KAAKM,MAAOmlD,MAG5C,CAACzlD,KAAMvE,OAAOwE,OAAO,CAAC,EAAG+f,EAAUhgB,KAAMylD,GACpD,GACF,EACL,KAEDpJ,wBAA2BlqD,IACvB2tB,KAAKC,UAASC,IACH,CAAChgB,KAAMvE,OAAOwE,OAAO,CAAC,EAAG+f,EAAUhgB,KAAM,CAC5CM,MAAO7E,OAAOwE,OAAO,CAAC,EAAG+f,EAAUhgB,KAAKM,MAAOnO,QAErD,EACL,KAEDuzD,iCAAmC,SAACvzD,GAA6C,IAApB8zC,EAASpyC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,KAAlBA,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,KAE7C1B,EAAQA,EAAM8D,QAAQ,SAAU,KAEhCgwC,IACA9zC,EAAQA,EAAMuM,MAAM,EAAGunC,IAE3B5kB,EAAKtB,UAASC,IACH,CAAChgB,KAAMvE,OAAOwE,OAAO,CAAC,EAAG+f,EAAUhgB,KAAM,CAACgK,qBAAsB7X,OAE/E,EAAC,KAEDylD,WAAa,KACT93B,KAAKC,SACD,CAACqrB,UAAU,EAAMlB,WAAY,KAC7B,KACI,MAAMlqC,EAAO8f,KAAK6lB,WACXp8B,EAAS9B,GAAUmC,aAAqB5J,GAC3CuJ,EAEAuW,KAAKg4B,aAAe5zB,EAChBpE,KAAKorB,MAAQ,8BAAgC,+BAA+BprB,KAAKG,MAAMjgB,KAAKrN,KAC5FmtB,KAAKorB,MAAQ,OAAS,MACtB,CAAC,EACDhvB,YAAoBlc,EAAM,CAACsb,UAAU,IACrCwE,KAAKo4B,uBACLp4B,KAAKq4B,qBACLr4B,KAAKs4B,gCAGTt4B,KAAKC,SAAS,CAACqrB,UAAU,EAAO3jC,UACpC,GAEP,EACJ,KAEDywC,uBAA0Bl4C,IACtB8f,KAAKg4B,aAAe,KAEpB,IAAIzJ,EAAQ5yC,OAAOwE,OAAO,CAAC,EAAG6f,KAAKG,MAAMjgB,MACrC8f,KAAKorB,QACLmD,EAAU,GAAIruC,EAAKqO,iBAAiB1b,IAExCmtB,KAAKF,MAAM+lC,iBAAiBtX,EAAM,EACrC,KAED8J,qBAAwBn4C,IACpB8f,KAAKg4B,aAAe,KACpBh4B,KAAKC,SAAS,CACVqrB,UAAU,EACVlB,WAAY,yDAA0C1rB,YAAsBxe,EAAKiF,YACnF,EACL,KAEDmzC,+BAAkC5uC,IAC9BsW,KAAKg4B,aAAe,KAEpBh4B,KAAKC,SAAS,CACVqrB,UAAU,EACVlB,WAAY,2FAAuE1gC,MACrF,EArIFsW,KAAKorB,OAASzvC,OAAOS,KAAK0jB,EAAM5f,MAAMlM,OACtCgsB,KAAKG,MAAQ,CACTmrB,UAAU,EACVprC,KAAMvE,OAAOwE,OAAO,CAAC,EAAGolD,GAAYzlC,EAAM5f,MAC1CyH,OAAQ,CAAC,EACTyiC,WAAY,IAGhBpqB,KAAKm5B,gBAAkB,KACvBn5B,KAAKg4B,aAAe,IACxB,CAEAxT,uBAE8B,OAAtBxkB,KAAKg4B,cACLh4B,KAAKg4B,aAAapN,OAE1B,CAyHA/E,UACI,MAAM3lC,EAAO8f,KAAKG,MAAMjgB,KAClBM,EAAQN,EAAKM,MACnB,MAAO,CACH/M,MAAOyM,EAAKzM,MACZ2M,2BAA4BF,EAAKE,2BAA2B/N,MAC5D6X,qBAAsBhK,EAAKgK,qBAC3B3J,aAAcL,EAAKK,aAAalO,MAChCmO,MAAO,CACHjE,KAAM2D,EAAKM,MAAMjE,KACjBqe,YAAapa,EAAMoa,YACnBzB,OAAQ3Y,EAAM2Y,OACdpC,MAAOvW,EAAMuW,MACba,YAAapX,EAAMoX,YACnBvN,YAAa7J,EAAM6J,YACnBkQ,MAAO/Z,EAAM+Z,MACbtC,UAAWzX,EAAMyX,WAG7B,CAIAmI,SACI,OACIT,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,sBACVqQ,aAAgB5c,KAAKorB,MAAQ,QAAU,UAA1B,iBACbzO,UAAY74B,IAAQkc,KAAKm5B,gBAAkBr1C,CAAC,EAC5C6rB,QAAS3P,KAAKF,MAAMgmC,uBAEpBnmC,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC45B,GAAsB,CACnB/5C,KAAM8f,KAAKG,MAAMjgB,KACjByH,OAAQqY,KAAKG,MAAMxY,OACnB0yC,gBAAiBr6B,KAAKyrB,sBACtBiQ,kBAAmB17B,KAAKu8B,wBACxBnC,2BAA4Bp6B,KAAK4lC,iCACjC9K,mBAAoB96B,KAAKylC,2BAE7B9lC,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKF,MAAMgmC,sBAAuB/zB,QAAM,GAAC,UAChEpS,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAK83B,WAAYtuB,SAAO,GAAC,SACtC7J,IAAAU,cAAA,QAAMkM,UAAU,WAAU,oBAGvCvM,KAAKG,MAAMiqB,WAAWp2C,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAASzN,KAAKG,MAAMiqB,aAI1F,EC9NJ,MAAMmb,GAAa,CACf1yD,GAAI,KACJgQ,KAAM,GACNE,SAAU,GACViX,cAAe,GACfvL,MAAO,IAIX,MAAMs3C,WAA4BnmC,YAE9BC,YAAYC,GACRC,MAAMD,GAsBV,KAEA2rB,sBAAwB,CAACpzC,EAAMhG,KAC3B2tB,KAAKC,UAASC,IACV,IAAIvY,EAAShM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUvY,QAMzC,MALa,UAATtP,SACOsP,EAAOtP,GACE,kBAATA,IACPhG,EAAQA,EAAM8D,QAAQ,WAAY,KAE/B,CAAC+J,KAAMvE,OAAOwE,OAAO,CAAC,EAAG+f,EAAUhgB,KAAM,CAAC,CAAC7H,GAAOhG,IAASsV,SAAO,GAC3E,EACL,KAEDq+C,yBAA4B9oB,IAExBA,EAAGid,kBACHjd,EAAGsI,iBAGH,MACMG,GADgBzI,EAAG0I,eAAiBxsC,OAAOwsC,eAChBC,QAAQ,QAAQ1vC,QAAQ,YAAa,IAAIuC,OAC1EsnB,KAAKyrB,sBAAsB,gBAAiB9F,EAAW,EAC1D,KAEDmS,WAAa,KACT93B,KAAKC,SACD,CAACqrB,UAAU,EAAMlB,WAAY,KAC7B,KACI,MAAO3gC,EAAS9B,GAAU2C,aAAwB0V,KAAKG,MAAMjgB,MAC7D,GAAIuJ,EAAS,CACT,MAAM,KAAEvJ,EAAI,MAAEkrC,GAAUprB,KAAKG,MAE7BH,KAAKg4B,aAAe5zB,EAChBgnB,EAAQ,6BAA+B,8BAA8BlrC,EAAKrN,KAC1Eu4C,EAAQ,OAAS,MACjB,CAAC,EACD,CACIxoC,SAAU1C,EAAK2C,KACfC,QAAS5C,EAAK6C,SACdkjD,YAAa/lD,EAAK8Z,cAClBvL,MAAOvO,EAAKuO,OAEhBuR,KAAKo4B,uBACLp4B,KAAKq4B,qBACLr4B,KAAKs4B,+BAEb,MACIt4B,KAAKC,SAAS,CAACqrB,UAAU,EAAO3jC,UACpC,GAEP,EACJ,KAEDywC,uBAA0Bl4C,IACtB8f,KAAKg4B,aAAe,KAEpB,IAAIzJ,EAAQ5yC,OAAOwE,OAAO,CAAC,EAAG6f,KAAKG,MAAMjgB,MACrC8f,KAAKG,MAAMirB,QACXmD,EAAU,GAAIruC,EAAKgmD,eAAerzD,IAEtCmtB,KAAKF,MAAMqmC,oBAAoB5X,EAAOvuB,KAAKG,MAAMirB,MAAM,EAC1D,KAEDiN,qBAAwBn4C,IACpB8f,KAAKg4B,aAAe,KACpBh4B,KAAKC,SAAS,CACVqrB,UAAU,EACVlB,WAAY,2DAA4C1rB,YAAsBxe,EAAKiF,YACrF,EACL,KAEDmzC,+BAAkC5uC,IAC9BsW,KAAKg4B,aAAe,KAEpBh4B,KAAKC,SAAS,CACVqrB,UAAU,EACVlB,WAAY,6FAAyE1gC,MACvF,EAnGFsW,KAAKG,MAAQ,CACTmrB,UAAU,EACVprC,KAAqB,OAAf4f,EAAM5f,KAAgB4f,EAAM5f,KAAOqlD,GACzCna,MAAsB,OAAftrB,EAAM5f,KACbyH,OAAQ,CAAC,EACTyiC,WAAY,IAGhBpqB,KAAKm5B,gBAAkB,KACvBn5B,KAAKg4B,aAAe,IACxB,CAIAxT,uBAE8B,OAAtBxkB,KAAKg4B,cACLh4B,KAAKg4B,aAAapN,OAE1B,CAqFAxqB,SACI,MAAM,KAAClgB,EAAI,OAAEyH,EAAM,WAAEyiC,EAAU,SAAEkB,GAAYtrB,KAAKG,MAC5CimC,GAAiBz+C,EAAO9E,MAAQ,IAAI7O,OAAS,EAC7CqyD,GAAqB1+C,EAAO5E,UAAY,IAAI/O,OAAS,EACrDsyD,GAAkB3+C,EAAO8G,OAAS,IAAIza,OAAS,EAC/C4mD,EAAgBwL,GAAiBC,GAAqBC,EAE5D,OACI3mC,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,sBACVqQ,aAAgB5c,KAAKG,MAAMirB,MAAQ,QAAU,UAAhC,0BACbzO,UAAY74B,IAAQkc,KAAKm5B,gBAAkBr1C,CAAC,EAC5C6rB,QAAS3P,KAAKF,MAAMymC,8BAEpB5mC,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,YAAOw6B,IAAI,QAAQH,SAAS,WAC9ChN,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkBoiB,EAAgB,aAAe,KACjD,aAAY,wDAAgDlmD,EAAK2C,KAAK7O,oBACtEiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,YAClBpb,SAAU0hB,EACVz4C,GAAG,UACHw7B,QAAS+3B,EACTjgB,UAAW,IACX9zC,MAAO6N,EAAK2C,KACZuzB,SAAW8G,GAAOld,KAAKyrB,sBAAsB,OAAQvO,EAAGiI,OAAO9yC,OAC/DqyC,QAAUxH,GAAOld,KAAKyrB,sBAAsB,OAAQ,MACvD2a,GAAiBzmC,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,cAAc8U,EAAO9E,OAE1D8c,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,WAAWw6B,IAAI,QAAQH,SAAS,cAClDhN,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkBqiB,EAAoB,gBAAkB,KACxD,aAAY,uDAAoDnmD,EAAK6C,SAAS/O,oBAC9EiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,WAClBpb,SAAU0hB,EACVz4C,GAAG,aACHw7B,QAASg4B,EACTlgB,UAAW,IACX9zC,MAAO6N,EAAK6C,SACZqzB,SAAW8G,GAAOld,KAAKyrB,sBAAsB,WAAYvO,EAAGiI,OAAO9yC,OACnEqyC,QAAUxH,GAAOld,KAAKyrB,sBAAsB,WAAY,MAC3D4a,GAAqB1mC,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,iBAAiB8U,EAAO5E,YAGrE4c,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,iBAAiBw6B,IAAI,QAAQH,SAAS,YACxDhN,IAAAU,cAAC2jB,GAAe,CACZ,aAAY,4DAAyD9jC,EAAK8Z,cAAchmB,oBACxFiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,iBAClBpb,SAAU0hB,EACVz4C,GAAG,WACHszC,UAAW,GACX9zC,MAAO6N,EAAK8Z,cACZoc,SAAW8G,GAAOld,KAAKyrB,sBAAsB,gBAAiBvO,EAAGiI,OAAO9yC,OACxEqyC,QAAUxH,GAAOld,KAAKyrB,sBAAsB,gBAAiB,IAC7DpF,QAASrmB,KAAKgmC,4BAEtBrmC,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,eAAew6B,IAAI,QAAQH,SAAS,YACtDhN,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkBsiB,EAAiB,cAAgB,KACnD,aAAY,2DAAwDpmD,EAAKuO,MAAMza,oBAC/EiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,eAClBpb,SAAU0hB,EACVz4C,GAAG,WACHw7B,QAASi4B,EACTngB,UAAW,IACXx8B,KAAK,QACLtX,MAAO6N,EAAKuO,MACZ2nB,SAAW8G,GAAOld,KAAKyrB,sBAAsB,QAASvO,EAAGiI,OAAO9yC,OAChEqyC,QAAUxH,GAAOld,KAAKyrB,sBAAsB,QAAS,MACxD6a,GAAkB3mC,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,eAAe8U,EAAO8G,SAGhEkR,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKF,MAAMymC,6BAA8Bx0B,QAAM,GAAC,UACvEpS,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAK83B,WAAYtuB,SAAO,GAAC,SACtC7J,IAAAU,cAAA,QAAMkM,UAAU,WAAU,6BAGvC6d,EAAWp2C,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAS2c,GACnDwQ,GAAiBj7B,IAAAU,cAAA,QAAMoN,KAAK,QAAQlB,UAAU,WAAU,uCAIzE,ECnNJ,MAAMi6B,WAAkB5mC,YAEpBC,YAAYC,GACRC,MAAMD,GACNE,KAAKmF,QAAU,IACnB,CAEAqf,uBAEyB,OAAjBxkB,KAAKmF,SACLsf,aAAazkB,KAAKmF,QAE1B,CAEAgU,oBACI,MAAM7gC,EAASF,YAAe9E,KAC9B,GAAIgF,GAAUA,EAAOtE,OAAQ,CACzB,MAAMyyD,EAAWhhC,KAAKC,MAAMghC,KAAK7tD,mBAAmBP,KACpD0nB,KAAK4Y,QAAQ5X,IAAIylC,GACjB3tD,YAAaxF,IACjB,CACA0sB,KAAKmF,QAAUyf,YAAW,KACtB5kB,KAAK2mC,2BAA2B,GACjC,IACP,CAEArxB,mBAAmBC,EAAWrV,GACtBqV,EAAU1gB,KAAK5E,aAAe+P,KAAKF,MAAMjL,KAAK5E,YAA6C,OAA/B+P,KAAKF,MAAMjL,KAAK5E,YAC5E+P,KAAK2mC,2BAEb,CAIAA,4BACI,IAAIC,EAAkB7nD,eAAe8nD,QAAQ,oBAAsB,IAC3C,oBAApBD,IACAA,EAAkB,KAEtB5mC,KAAKF,MAAM+tB,QAAQ1vC,KAAKyoD,EAC5B,CAIAxmC,SACI,OACIT,IAAAU,cAACghB,GAAO,CACJ9b,SAAO,EACP+b,YAAY,uBACZC,aAAa,yCAAoC,kDAI7D,EAGJilB,GAAUM,YAAcjmC,EC7DjB,MAAMkmC,GAA2BA,CAACC,EAAav1B,EAASp/B,KAC3D,IAAIqzD,EAAM,CAAC,EACX,IAAK,IAAIjqD,KAAOE,OAAOS,KAAK4qD,EAAYv1B,IACpCi0B,EAAIjqD,GAAOpJ,EAEf,MAAO,CAAC,CAACo/B,GAAUi0B,EAAI,EAGduB,GAAwBA,CAACC,EAAY/0C,EAAQg1C,EAAO90D,KAEtD,CACH,CAAC8f,GAAS,IACH+0C,EAAW/0C,GACd,CAACg1C,GAAQ90D,KASR+0D,GAAkBA,CAACC,EAAQhvD,KACpC,MAAM0oB,EAAcsmC,EAAOhvD,IAAS,CAAC,EACrC,QAAKsD,OAAOS,KAAK2kB,GAAa/sB,SAGtB2H,OAAO6nB,OAAOzC,GAAatsB,UAAS,EAAM,EAGzC6yD,GAAwBA,CAACD,EAAQhvD,KAC1C,MAAMmrB,EAAS7nB,OAAO6nB,OAAO6jC,EAAOhvD,IACpC,OAAOmrB,EAAO/uB,UAAS,IAAU+uB,EAAO/uB,UAAS,EAAK,EAG7C8yD,GAA6BF,IACtC,IAAI7jC,EAAS,GACb,IAAK,IAAIgkC,KAAS7rD,OAAO6nB,OAAO6jC,GAC5B7jC,EAAS,IAAIA,KAAW7nB,OAAO6nB,OAAOgkC,IAE1C,OAAOhkC,EAAO/uB,UAAS,IAAU+uB,EAAO/uB,UAAS,EAAK,EASpDgzD,GAAyB,CAC3BC,IAAK,wBACL7lC,oBAAqB,2BACrBG,iBAAkB,0CAClBkB,cAAe,kCACfZ,sBAAuB,2BACvBmB,gCAAiC,6CACjCxP,WAAY,aACZpE,KAAM,QACNuT,kCAAmC,oBACnCC,mBAAoB,qCACpBW,SAAU,gBACVV,4BAA6B,kBAC7BqkC,SAAU,8BACVzlC,0BAA2B,iCAC3BE,2BAA4B,uDAC5BY,wBAAyB,2BACzB4kC,2CAA4C,wDAC5C3kC,sBAAuB,qCACvBP,6CAA8C,2BAC9CoB,YAAa,uBAGJ+jC,GAA2BxvD,GAC7BovD,GAAuBpvD,IAASA,EAGrCyvD,GAAwBv1C,GAEnBA,EAAc,GAAGA,EAAY1f,IAAM,MAAQ,GAGhDk1D,GAAgB,SAACh1C,EAAWD,EAAU9F,EAAUwG,GAClD,MAAO,GAAGs0C,GAD2D/zD,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,QACxBgf,EAAUnR,MAAQ,MAAMkR,EAASlR,MAAQ,MAAMoL,EAASpL,MAAQ,MAAM4R,EAAO5R,MAAQ,IACvI,EAEMomD,GAAqB,SAACj1C,EAAWD,EAAU9F,EAAUkD,GACvD,MAAO,GAAG43C,GADqE/zD,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,QAClCgf,EAAUnR,MAAQ,MAAMkR,EAASlR,MAAQ,MAAMoL,EAASpL,MAAQ,MAAMsO,EAAYtO,MAAQ,IAC5I,EAEaqmD,GAAkB,SAACl1C,EAAWD,EAAU9F,GACjD,MAAO,GAAG86C,GAD4D/zD,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,QACzBgf,EAAUnR,MAAQ,MAAMkR,EAASlR,MAAQ,MAAMoL,EAASpL,MAAQ,IAClH,EAEMsmD,GAAkB,SAACn1C,EAAWD,GAChC,MAAO,GAAGg1C,GAD2C/zD,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,QACRgf,EAAUnR,MAAQ,MAAMkR,EAASlR,MAAQ,IAC3F,EAEaumD,GAA6B,SACtCp1C,EAAWD,EAAU9F,EAAUwG,EAAQtD,GACrC,IADkDqC,EAAWxe,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,KAEhE,OAAIyf,EACOu0C,GACHh1C,EAAWD,EAAU9F,EAAUwG,EAAQjB,GAE3CrC,EACO83C,GACHj1C,EAAWD,EAAU9F,EAAUkD,EAAaqC,GAG7C01C,GAAgBl1C,EAAWD,EAAU9F,EAAUuF,EAC1D,EAEa61C,GAAgC5b,IACzC,MAAM6b,EAAY,CACdzmD,KAAM,KACNvJ,KAAM,KACNgW,YAAa,MAEjB,IAAKm+B,EAAWz5B,UACZ,OAAOs1C,EAEX,MAAM,UAAEt1C,GAAcy5B,EACtB,IAAKA,EAAW15B,SACZ,MAAO,CACHlR,KAAMmR,EAAUnR,MAAQ,GACxBvJ,KAAM0a,EAAU1a,MAAQ,GACxBgW,YAAa,kBAGrB,MAAM,SAAEyE,GAAa05B,EACrB,IAAKA,EAAWx/B,SACZ,MAAO,CACHpL,KAAMsmD,GAAgBn1C,EAAWD,GACjCza,KAAMya,EAASza,MAAQ,GACvBgW,YAAa,4BAGrB,MAAM,SAAErB,GAAaw/B,EACrB,IAAKA,EAAWh5B,SAAWg5B,EAAWt8B,YAClC,MAAO,CACHtO,KAAMqmD,GAAgBl1C,EAAWD,EAAU9F,GAC3C3U,KAAM2U,EAAS3U,MAAQ,GACvBgW,YAAahM,YAAsBmqC,EAAWj6B,aACxC,oBACAjQ,YAA2BkqC,EAAWj6B,aAClC,uBAAyB,IAI3C,MAAM,YAAErC,EAAW,OAAEsD,GAAWg5B,EAChC,OAAKt8B,EAOE,CACHtO,KAAMomD,GAAmBj1C,EAAWD,EAAU9F,EAAUkD,GACxD7X,KAAM6X,EAAY7X,MAAQ,GAC1BgW,YAAa,IATN,CACHzM,KAAMmmD,GAAch1C,EAAWD,EAAU9F,EAAUwG,GACnDnb,KAAMmb,EAAOnb,MAAQ,GACrBgW,YAAa,GAOpB,EAGQi6C,GAAeA,CAACzyD,EAAM0yD,KAC/B1yD,EAAKkK,MAAK,CAACgL,EAAQC,IACRu9C,EAASjqD,QAAQyM,EAAO,IAAMw9C,EAASjqD,QAAQ0M,EAAO,MAE1DnV,GAGE2yD,GAAyD,CAClE3mC,oBAAqB,6BACrBa,6CACI,8DACJJ,sBAAuB,sCAGdmmC,GAAiCA,CAACjc,EAAYkc,KACvD,GAAIlc,EAAWmc,0BAA2B,CACtC,MAAM,UACF51C,EAAY,KAAI,SAChBD,EAAW,KAAI,SACf9F,EAAW,KAAI,YACfkD,EAAc,KAAI,OAClBsD,EAAS,MACTg5B,EAAWA,WAEf,GAAI,CAACz5B,EAAWD,EAAU9F,EAAUwG,GAAUtD,GAAa04C,OAAMC,GAAa,OAAPA,IAAc,CACjF,MAAMC,EAAsB,OAAXt1C,EACXu1C,EAAcD,EAAW,UAAY,aAC3C,MAAO,GAAGJ,EACJ,sBAAsBK,IACtB,iDAAyCA,OAC3CD,EACE,GAAGf,GAAch1C,EAAWD,EAAU9F,EAAUwG,MAAWA,EAAOnb,OAClE,GAAG2vD,GAAmBj1C,EAAWD,EAAU9F,EAAUkD,MAAgBA,EAAY7X,QAE3F,CACA,MAAI,CAAC0a,EAAWD,EAAU9F,GAAU47C,OAAMC,GAAa,OAAPA,IACrC,GAAGH,EACJ,oCACA,kEACFT,GAAgBl1C,EAAWD,EAAU9F,MAAaA,EAAS3U,OAE/D,CAAC0a,EAAWD,GAAU81C,OAAMC,GAAa,OAAPA,IAC3B,GAAGH,EACJ,yBACA,uDACFR,GAAgBn1C,EAAWD,MAAaA,EAASza,OAEvC,OAAd0a,EACO,GAAG21C,EACJ,qBACA,4DACO31C,EAAUnR,MAAQ,MAAMmR,EAAU1a,QAEzCqwD,EACJ,iBACA,8BAFC,iDAIX,CACA,MAAO,GAAGA,EACJ,iBACA,gDACcF,GAAuDhc,EAAWA,WAAW7iC,OAAO,ECzM/Fq/C,GAAiB7uB,IAcvB,IAdwB,oBAC3B8uB,EAAsB,CAAC,EAAC,kCACxBC,GAAoC,EAAK,iBACzCC,EAAmB,EAAC,0BACpBR,EAAyB,UACzB5b,EAAY,EAAC,aACb8D,EAAY,gBACZE,EAAe,MACfr8B,EAAK,IACL1a,EAAG,YACHovD,EAAW,WACXC,EAAU,cACVC,KACGxpC,GACNqa,EACG,MAAOkc,EAAgBkT,GAAqB16B,oBAAS,IAC9CztB,EAAYooD,GAAiB36B,mBAAS,IACtCub,EAAYC,GAAiBxb,mBAAS,OACtC3uB,EAAMmrC,GAAWxc,mBAAS,OAC1B46B,EAAYC,GAAiB76B,oBAAS,GAE7C2J,qBAAU,KACFuU,IAAcoc,GAElBK,EAAc,KAAK,GACpB,CAACL,EAAkBpc,IAEtBvU,qBAAU,KACN,GAAmB,OAAfp3B,EAGA,YADAooD,EAAc,GAGlB,IAAIhf,EAAW,KAEf,SAASmf,EAA4B99C,EAAIC,GACrC,OAAO08C,GAAuD38C,EAAGlC,MAAM9H,cACnE2mD,GAAuD18C,EAAGnC,MAAO,KACzE,CAoBA,SAASigD,EAAmBzkD,GACxBqlC,EAAW,KACXH,EAAcllC,GACdokD,GAAkB,EACtB,CA6BA,OAVAA,GAAkB,GAClBlf,EAAc,MACdG,EAAWpmB,EACPpqB,EAAK,MAAO,CAAC,EAAG,CACZs0C,MAxFK,GAyFLp8B,KAAM9Q,KACH6nD,IA/CX,SAAyB/oD,GACrBsqC,EAAW,KACX,MAAM,MAAEjpC,GAAUrB,EAAKshB,KACjBT,EAAc3E,YAChBlc,EAAM,CAACoc,oBAAoB,IAAOyE,YACtCsqB,EAAQ,CACJtqB,YAAa4nC,EACP5nC,GAAe,GACfplB,OAAOC,QAAQmlB,GACZ5uB,KAAIooC,IAAA,IAAE5wB,EAAMzJ,GAAKq6B,EAAA,MAAM,IAAIr6B,EAAMyJ,OAAK,IACtC5J,KAAK4pD,GACdpoD,MAAOA,EACPktC,QAASttC,YAAaC,GACtBstC,QAASrtC,YAxDJ,GAwD+BD,EAAYG,KAEpDgoD,GAAkB,EACtB,IAQA,SAAuBrpD,GACnB0pD,EACI,6DAAyClrC,YAAsBxe,EAAKiF,WAC5E,IAEA,SAAiCuE,GAC7B,GAAe,MAAXA,EAIA,OAHAkgD,EACI,kEACJF,GAAc,GAGlBE,EACI,sHAA8ElgD,KAEtF,IAYO,KACc,OAAb8gC,GAAoBA,EAASI,OAAO,CAC3C,GACF,CAACqe,EAAqBN,EAA2BvnD,EAAYpH,IAMhE,MAAM,YAAE+mB,GAAgB+e,qBAAWjf,GAEnC,IAAIgpC,GAAwC,EAC5C,GAAM3pD,EACF,GAAIyoD,EACAkB,GACK9oC,EAAY4C,qCACd,CACH,MAAMmmC,EAAmB,CACrB,wBACA,+CACA,uBAEJ,GAAIZ,EAAmC,CAEnC,MAAMa,EAAiB7pD,EAAK6gB,YAAY5uB,KAAI63D,GAAQA,EAAKrgD,OACzD,IAAIsgD,EAAmB,GACvB,IAAK,IAAI9lC,KAAkB2lC,EAClBC,EAAet1D,SAAS0vB,IACzB8lC,EAAiB9rD,KAAKgmB,GAGzB8lC,EAAiBj2D,SAClB61D,GAAwC,EAEhD,KAAO,CAEH,MAAMK,EAAU,CACZ5nC,sBAAuB,+BACvBI,6CACI,sDACJb,oBAAqB,8BAEzB,IAAIsoC,EAA0B,GAC9B,IAAK,IAAIhmC,KAAkB2lC,EACvBK,EAA0B,IACnBA,KACAxuD,OAAO6nB,OAAOzC,EAAYmpC,EAAQ/lC,MAG7C0lC,GACKM,EAAwB11D,UAAS,EAC1C,CACJ,CAGJ,OACIkrB,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAElY,GAC1B00C,IAAgBK,GACb9pC,IAAAU,cAACyQ,EAAU,CAACS,SAAO,GACf5R,IAAAU,cAACwR,EAAY,CAACG,MAAI,EAAC5C,QAASk6B,GAAe,oBAMtDjT,EACK12B,IAAAU,cAACmN,EAAM,MACN4c,EACGzqB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAS2c,GAExBzqB,IAAAU,cAAAV,IAAAyc,SAAA,KACoB,IAAfl8B,EAAKqB,MACAoe,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,uBAEV6X,IAAAU,cAACkyB,GAAW,CACRxB,gBAAiBA,GAChB7wC,EAAK6gB,YAAY5uB,KAAIopB,GAClBoE,IAAAU,cAACwwB,EAAYl1C,OAAAwE,OAAA,CACTwoD,0BAA2BA,EAC3BltD,IAAKktD,EACCR,GACE5sC,EAAOxI,WAAa,CAAC,EACrBwI,EAAOzI,UAAY,CAAC,EACpByI,EAAOvO,UAAY,CAAC,EACpBuO,EAAO/H,QAAU,KACjB+H,EAAOrL,aAAe,KACtBqL,EAAOhJ,aAAe,MAExBgJ,EAAO5R,KAEb6iC,WAAYjxB,GACRuE,OAKvB5f,EAAKqB,MAhMb,IAiMWoe,IAAAU,cAACwyB,GAAU,CACPC,YAAa1xC,EACbstC,QAASxuC,EAAKwuC,QACdD,QAASvuC,EAAKuuC,QACdsE,iBAlGhC,WAAsC,IAAZ9gB,IAAIl+B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAC1By1D,GAAcr3B,GAAQF,EAAOE,EAAO,EAAIz8B,KAAKC,IAAIw8B,EAAM,EAAG,IAC9D,MAsGU03B,IAA0CJ,GACxC9pC,IAAAU,cAACwR,EAAY,CACTC,KAAG,EACH1C,QAASx8B,IACLy2D,IACAz2D,EAAEy8B,cAAcC,MAAM,GACvB,qBAIH,ECxOP86B,GAA8BjwB,IAEpC,IAFqC,cACxCmvB,EAAa,eAAEe,GAClBlwB,EACG,OACIxa,IAAAU,cAACgjB,GAAiB,CACd9W,UAAU,4BACViX,cAAc,iEAEd7jB,IAAAU,cAAA,MAAIkM,UAAU,kCACV5M,IAAAU,cAAA,UACIV,IAAAU,cAACwR,EAAY,CAACzC,QAASi7B,GAAgB,+BAI3C1qC,IAAAU,cAAA,UACIV,IAAAU,cAACwR,EAAY,CAACzC,QAASk6B,GAAe,oBAK9B,ECftBgB,GAAmB,CACrBv3C,UAAW,CACPuvB,YAAa,MACbioB,eAAgB,aAChBvwD,IAAK0sC,GAAS7zB,YAElBC,SAAU,CACNwvB,YAAa,oBACbioB,eAAgB,aAChBvwD,IAAK0sC,GAAS35B,YAElBy9C,YAAa,CACTloB,YAAa,cACbioB,eAAgB,UAChBvwD,IAAK0sC,GAASuC,SAElBj8B,SAAU,CACNs1B,YAAa,aACbioB,eAAgB,eAChBvwD,IAAK0sC,GAAS4C,eAKTmhB,GAAiEtwB,IAOvE,IAPwE,eAC3EuwB,EAAc,WACdnL,EAAU,OACVhkC,EAAM,WACNovC,EAAU,6BACVC,EAA4B,2BAC5BC,KAA+B/qC,GAClCqa,EACG,MAAO2wB,EAAkBC,GAAuBl8B,oBAAS,IAClDm8B,EAAQC,GAAap8B,oBAAS,IAC9Bq8B,EAAYC,GAAiBt8B,mBAAS,OACtCub,EAAYC,GAAiBxb,mBAAS,MAEvCu8B,EAAWd,GAAiBK,GAElCnyB,qBAAU,KAEN,GADA6R,EAAc,OACT2gB,GAAyB,OAAfE,EAAuB,OACtCH,GAAoB,GAwBpB,IAAIvgB,EAAWpmB,EACXgnC,EAASpxD,IAAIusB,OAAOhL,EAAO1oB,IAAK,MAAO,CAAC,EAAG,CAAC,GAvBhD,SAAyBqN,GACrBsqC,EAAW,KACX2gB,EAAcjrD,EAAKkrD,EAASb,iBAC5BQ,GAAoB,EACxB,IAEA,SAAuB7qD,GACnBsqC,EAAW,KACXH,EACI,+CAAgC3rB,YAAsBxe,EAAKiF,YAE/D4lD,GAAoB,EACxB,IAEA,SAAiCrhD,GAC7B8gC,EAAW,KACXH,EACI,wGAAqE3gC,MAEzEqhD,GAAoB,EACxB,IAOA,MAAO,KACc,OAAbvgB,GAAoBA,EAASI,OAAO,CAC3C,GACF,CAACogB,EAAQzvC,EAAO1oB,GAAIq4D,EAAYE,IAEnC,MAAMC,EAA0B,CAC5B1C,2BAA2B,EAC3Bnc,WAAYke,GAEhB,OACI/qC,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,OAAKkM,UAAU,0BACX5M,IAAAU,cAAC+pC,GAA2B,CACxBd,cAAeA,IAAMsB,EACjBS,GAEJhB,eAAgBA,IAAMQ,EAClBQ,KAER1rC,IAAAU,cAACgM,EAAI,CAACE,UAAWzM,EAAMwrC,YAAc,yBAA2B,yBAA0B/vC,EAAO3Z,KAAK,IAAE2Z,EAAOljB,KAC1G2yD,EAEOrrC,IAAAU,cAAC8O,IAAM,CACH5C,UAAU,yBACVkD,KAAK,oBACLn9B,MAAO,wBAAc84D,EAAS9oB,cAC9BlT,QAASA,IAAM67B,GAAU,KAI7BtrC,IAAAU,cAAC8O,IAAM,CACH5C,UAAU,yBACVkD,KAAK,sBACLn9B,MAAO,0BAAgB84D,EAAS9oB,cAChClT,QAASA,IAAM67B,GAAU,OAM5CD,GACGrrC,IAAAU,cAAA,OAAKkM,UAAU,2BACVu+B,EACKnrC,IAAAU,cAACqN,EAAU,MAET/N,IAAAU,cAAAV,IAAAyc,SAAA,KACoB,OAAf8uB,GAAuBA,EAAW/4D,KAAImD,GACnCqqB,IAAAU,cAAC+b,WAAQ,CAAC3gC,IAAKnG,EAAIzC,IACC,cAAf83D,GACGhrC,IAAAU,cAACoqC,GAA8D,CAC3DC,eAAgB,IAAIA,EAAgB53C,SAAUxd,GAC9CiqD,WAAYA,EACZ+L,aAAa,EACb/vC,OAAQjmB,EACRq1D,WAAW,WACXC,6BAA8BA,EAC9BC,2BAA4BA,IAEpB,aAAfF,GACGhrC,IAAAU,cAACoqC,GAA8D,CAC3DC,eAAgB,IAAIA,EAAgB19C,SAAU1X,GAC9CiqD,WAAYA,EACZ+L,aAAa,EACb/vC,OAAQjmB,EACRq1D,WAAYpL,EAAa,cAAgB,WACzCqL,6BAA8BA,EAC9BC,2BAA4BA,IAEnC,CAAC,WAAY,eAAep2D,SAASk2D,IAClChrC,IAAAU,cAAA,OAAKkM,UAAU,yDACX5M,IAAAU,cAAC+pC,GAA2B,CACxBd,cAAeA,IAAMsB,EAA6B,CAC9CjC,2BAA2B,EAC3Bnc,WAAY,IACLke,EACH,CAAgB,aAAfC,EAA4B,cAAgB,UAAWr1D,KAGhE+0D,eAAgBA,IAAMQ,EAA2B,CAC7ClC,2BAA2B,EAC3Bnc,WAAY,IACLke,EACH,CAAgB,aAAfC,EAA4B,cAAgB,UAAWr1D,OAIpEqqB,IAAAU,cAACgM,EAAI,CAACE,UAAU,yBAAyBj3B,EAAIsM,KAAK,IAAEtM,EAAI+C,UAKxD,OAAf6yD,IAAwBA,EAAWl3D,QAAU2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACykB,UAAU,eAAc,qBAClE,OAAf6d,GAAuBzqB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEsiC,KAM1D,ECzKEmhB,GAAwCpxB,IAE9C,IAF+C,WAClDqS,EAAU,6BAAEoe,EAA4B,2BAAEC,GAC7C1wB,EACG,MAAM,YACF5nB,EAAc,KAAI,UAClBQ,EAAY,KAAI,SAChBD,EAAW,KAAI,SACf9F,EAAW,KAAI,YACfkD,EAAc,KAAI,OAClBsD,EAAS,MACTg5B,EAEE+S,EAAal9C,YAAsBkQ,GACnCi5C,EAAiBjM,EAAa/rC,EAAStD,EAG7C,GAAI,CAAC6C,EAAWD,EAAU9F,EAAUw+C,GAAgB5C,OAAMC,GAAa,OAAPA,IAAc,CAC1E,MAAMwC,EAA0B,CAC5B1C,2BAA2B,EAC3Bnc,WAAY,CACRj6B,cACAQ,YACAD,WACA9F,WACA,CAACuyC,EAAa,SAAW,eAAgBiM,IAGjD,OACI7rC,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,KAAEtZ,EAAUnR,KAAK,IAAEmR,EAAU1a,MAClCsnB,IAAAU,cAAA,OAAKkM,UAAU,0BACX5M,IAAAU,cAACgM,EAAI,CAACE,UAAU,yDACXzZ,EAASlR,KAAK,IAAEkR,EAASza,OAGlCsnB,IAAAU,cAAA,OAAKkM,UAAU,0BACX5M,IAAAU,cAACgM,EAAI,CAACE,UAAU,yDACXvf,EAASpL,KAAK,IAAEoL,EAAS3U,OAGlCsnB,IAAAU,cAAA,OAAKkM,UAAU,0BACX5M,IAAAU,cAAC+pC,GAA2B,CACxBd,cAAeA,IAAMsB,EACjBS,GACJhB,eAAgBA,IAAMQ,EAClBQ,KACR1rC,IAAAU,cAACgM,EAAI,CAACE,UAAU,0BACXi/B,EAAe5pD,KAAK,IAAE4pD,EAAenzD,OAK1D,CAGA,MACI,CAAC0a,EAAWD,EAAU9F,GAAU47C,OAAMC,GAAa,OAAPA,KACzB,OAAnB2C,EAGI7rC,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,KAAEtZ,EAAUnR,KAAK,IAAEmR,EAAU1a,MAClCsnB,IAAAU,cAACoqC,GAA8D,CAC3DC,eAAgBle,EAChB+S,WAAYA,EACZ+L,aAAa,EACb/vC,OAAQvO,EACR29C,WAAYpL,EAAa,cAAgB,WACzCqL,6BAA8BA,EAC9BC,2BAA4BA,KAOxC,CAAC93C,EAAWD,GAAU81C,OAAMC,GAAa,OAAPA,KAClC,CAAC77C,EAAUw+C,GAAgB5C,OAAMC,GAAa,OAAPA,IAGnClpC,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,KAAEtZ,EAAUnR,KAAK,IAAEmR,EAAU1a,MAClCsnB,IAAAU,cAACoqC,GAA8D,CAC3DC,eAAgBle,EAChB+S,WAAYA,EACZ+L,aAAa,EACb/vC,OAAQzI,EACR63C,WAAW,WACXC,6BAA8BA,EAC9BC,2BAA4BA,KAO1B,OAAd93C,GACA,CAACD,EAAU9F,EAAUw+C,GAAgB5C,OAAMC,GAAa,OAAPA,IAG7ClpC,IAAAU,cAACoqC,GAA8D,CAC3DC,eAAgBle,EAChB+S,WAAYA,EACZ+L,aAAa,EACb/vC,OAAQxI,EACR43C,WAAW,YACXC,6BAA8BA,EAC9BC,2BAA4BA,IAGjC,IAAI,EC1GFY,GAAoBtxB,IAG1B,IAH2B,0BAC9BwuB,EAAyB,WAAEnc,EAAU,6BAAEoe,EAA4B,2BACnEC,GACH1wB,EAEG,MAAMpZ,GACFyrB,EAAWzrB,aAAe,CAAC,GAAGmB,2BAA6B,CAAC,EAC1DmpC,EAA0B,CAC5B1C,2BAA2B,EAC3Bnc,WAAY,CAAC7iC,KAAM6iC,EAAW7iC,OAElC,OACIgW,IAAAU,cAACkwB,KAAY,KACT5wB,IAAAU,cAACmwB,KAAa,CAACjkB,UAAU,qCACpBo8B,EACKhpC,IAAAU,cAACkrC,GAAqC,CACpC/e,WAAYA,EACZoe,6BAA8BA,EAC9BC,2BAA4BA,IAE5BlrC,IAAAU,cAAA,OAAKkM,UAAU,0BACX5M,IAAAU,cAAC+pC,GAA2B,CACxBd,cAAeA,IAAMsB,EACjBS,GAEJhB,eAAgBA,IAAMQ,EAClBQ,KAER1rC,IAAAU,cAACgM,EAAI,KAAEm8B,GAAuDhc,EAAW7iC,SAKzFgW,IAAAU,cAACmwB,KAAa,OACRzvB,EAAYqB,4BACVzC,IAAAU,cAACgM,EAAI,CAACE,UAAU,kDACXs7B,GAAwB,iCAG/B9mC,EAAYiC,yBACVrD,IAAAU,cAACgM,EAAI,CAACE,UAAU,qDACXs7B,GACGc,EACM,6CACA,8BAIhB5nC,EAAYkC,uBACVtD,IAAAU,cAACgM,EAAI,CAACE,UAAU,wDACXs7B,GAAwB,2BAI1B,EC5DjB6D,GAA6B,CAC/BC,kBAAmB,uBACnBC,mBAAoB,wBACpBC,oBAAqB,mCAIZC,GAA4B3xB,IAElC,IAFmC,MACtCxB,EAAK,0BAAEgwB,EAAyB,KAAE3I,GACrC7lB,EACG,OACIxa,IAAAU,cAACkwB,KAAY,KACT5wB,IAAAU,cAACmwB,KAAa,KAAE7X,EAAMozB,SAAW,IACjCpsC,IAAAU,cAACmwB,KAAa,KACA,gBAATwP,EACK2I,EACIhwB,EAAMqzB,wBACLxD,GAAuD7vB,EAAMC,UAC5DD,EAAMC,QACZD,EAAMszB,qBAGhBtsC,IAAAU,cAACmwB,KAAa,KACTkb,GAA2B/yB,EAAMuzB,gBAC9BvzB,EAAMuzB,eAEdvsC,IAAAU,cAACmwB,KAAa,MAAG7X,EAAMwzB,SAAW,CAAC,GAAG19C,OAAS,IACpC,ECTV29C,GAAqBjyB,IAAmC,IAAlC,YAACyC,EAAc,MAAO9c,GAAMqa,EAC3D,MAAOkc,EAAgBkT,GAAqB16B,oBAAS,IAC9Cke,EAAW2E,GAAgB7iB,mBAAS,OACpCztB,EAAYooD,GAAiB36B,mBAAS,IACtCub,EAAYC,GAAiBxb,mBAAS,OACtCrlB,EAAS6iD,GAAcx9B,mBAAS,CACnCy9B,YAAa,GACbC,UAAW,GACXC,aAAc,MAEXtsD,EAAMmrC,GAAWxc,mBAAS,OAC1B49B,EAAcC,GAAmB79B,oBAAS,GA8DjD,SAASgnB,EAAmBx9C,EAAMhG,GAC9Bg6D,GAAW3gB,IAAS,IAASliC,EAAS,CAACnR,GAAOhG,KAClD,CAMA,SAASyjC,IACL42B,GAAgB,EACpB,CAEA,SAASC,IACLD,GAAgB,EACpB,CA1EAl0B,qBAAU,KACNkZ,EAAa,EAAE,GAChB,IAEHlZ,qBAAU,KACNkZ,GAAahG,GAAaA,EAAY,GAAE,GACzC,CAACtqC,IAoDJo3B,qBAlDA,WACI,GAAkB,OAAduU,EAAsB,OAC1B,IAAIvC,EAAW,KAef,SAASof,EAAmBzkD,GACxBqlC,EAAW,KACXH,EAAcllC,GACdokD,GAAkB,EACtB,CAyBA,OAVAA,GAAkB,GAClBlf,EAAc,MACdG,EAAWpmB,EACPtE,EAAM9lB,IAAK,MAAO,CAAC,EAAG,CAClBuyC,WAAYzsB,EAAMiH,OAAQunB,MAhErB,GAiELp8B,KAAM9Q,KAAeoI,KACjBsW,EAAMmpC,qBAAuB,CAAC,IAtC1C,SAAyB/oD,GACrBsqC,EAAW,KACX,MAAM,MAAEjpC,GAAUrB,EAAKshB,KACvB6pB,EAAQ,CACJuhB,OAAQxwC,YACJlc,EAAM,CAACoc,oBAAoB,IAAOuwC,oBAAsB,GAC5DtrD,MAAOA,EACPktC,QAASttC,YAAaC,GACtBstC,QAASrtC,YApCJ,GAoC+BD,EAAYG,KAEpDgoD,GAAkB,EACtB,IAQA,SAAuBrpD,GACnB0pD,EACI,gEAA4ClrC,YAAsBxe,EAAKiF,WAE/E,IAEA,SAAiCuE,GAC7BkgD,EAA8B,MAAXlgD,EACb,yDACA,yHAAiFA,KAE3F,IAYO,KACc,OAAb8gC,GAAoBA,EAASI,OAAO,CAEhD,GACsB,CAACmC,IA4BvB,MAAM+f,EAAiBvpB,mBACjBwpB,EAAexpB,mBACf+oB,EAAgB9iD,EAAQ8iD,YACxB,IAAIvnD,KAAKyE,EAAQ8iD,aACjB,GACAC,EAAc/iD,EAAQ+iD,UAAY,IAAIxnD,KAAKyE,EAAQ+iD,WAAa,GAEtE,OACI5sC,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,sBACVqQ,YAAaA,EACbjN,QAAS7P,EAAM6P,QACfmN,UAtBR,SAAwBnE,GACE,KAAlBA,EAAMq0B,UACFP,EACA9zB,EAAMs0B,YAAYC,2BAElBptC,EAAM6P,UAGlB,GAgBQhQ,IAAAU,cAACgM,EAAI,KAAC,mBACN1M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACoD,SAAO,EAACF,OAAK,EAAC9E,UAAU,wBAE1C5M,IAAAU,cAAA,OAAKid,SAAS,MACd3d,IAAAU,cAACiY,GAAc,CACX5gC,SAAUo1D,EACVx6D,MAAM,KACNw6B,IAAI,SACJnN,IAAAU,cAACwV,EAAY,CACT0B,SAAS,KACT3N,SAAUysB,EACV7e,QAAS+0B,QAAat4D,EACtBuiC,UAAWs2B,EACXz6D,MAAOi6D,EACPv2B,eAAgBD,EAChBsC,gBAAiBu0B,EACjBv2B,SAAUlgC,GAAQ2/C,EAAmB,cAAez/C,YAAaF,OAEzEypB,IAAAU,cAACiY,GAAc,CACX5gC,SAAUq1D,EACVz6D,MAAM,KACNw6B,IAAI,SACJnN,IAAAU,cAACwV,EAAY,CACT0B,SAAS,KACT3N,SAAUysB,EACV5e,QAAS60B,QAAer4D,EACxBuiC,UAAWu2B,EACX16D,MAAOk6D,EACPx2B,eAAgBD,EAChBsC,gBAAiBu0B,EACjBv2B,SAAUlgC,GAAQ2/C,EAAmB,YAAaz/C,YAAaF,OAEvEypB,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,qBACNq6B,SAAS,0BACTG,IAAI,SACJnN,IAAAU,cAAC2jB,GAAe,CACZ,aAAY,iEAAyDx6B,EAAQgjD,aAAax4D,oBAC1F,gBAAe,IACfiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,qBAClBpb,SAAUysB,EACVxjD,GAAG,0BACHszC,UAAW,IACX9zC,MAAOmX,EAAQgjD,aACfp2B,SAAU8G,GAAM2Y,EAAmB,eAAgB3Y,EAAGiI,OAAO9yC,OAC7DqyC,QAASxH,GAAM2Y,EAAmB,eAAgB,OAE1Dl2B,IAAAU,cAACwR,EAAY,CACTtF,UAAU,kCACV3C,SAAUysB,EACVrkB,MAAI,EACJ5C,QAASA,KACDhuB,EAAa,EACbooD,EAAc,GAEd9X,GAAahG,GAAaA,EAAY,GAC1C,GACD,YAIV2K,EACK12B,IAAAU,cAACmN,EAAM,MACN4c,EACGzqB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEsiC,GAEXzqB,IAAAU,cAAAV,IAAAyc,SAAA,KACoB,IAAfl8B,EAAKqB,MACAoe,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,uBAEV6X,IAAAU,cAACkyB,GAAW,CACRxB,gBAAiBjxB,EAAMixB,iBACtB7wC,EAAK0sD,OAAOz6D,KAAIwmC,GACbhZ,IAAAU,cAACyrC,GAAyB,CACtBnzB,MAAOA,EACPgwB,0BACI7oC,EAAM6oC,0BAEVltD,IAAKk9B,EAAM9lC,GACXmtD,KAAMlgC,EAAMkgC,UAK/B9/C,EAAKqB,MA1Mb,IA2MWoe,IAAAU,cAACwyB,GAAU,CACPC,YAAa1xC,EACbwoB,SAAUysB,EACV3H,QAASxuC,EAAKwuC,QACdD,QAASvuC,EAAKuuC,QACdsE,iBAhIhC,WAAsC,IAAZ9gB,IAAIl+B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAC1By1D,GAAcr3B,GAAQF,EAAOE,EAAO,EAAIz8B,KAAKC,IAAIw8B,EAAM,EAAG,IAC9D,KAoIQxS,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC4F,QAAStP,EAAM6P,SAAS,YAIvC,E,wBCxOhB,MAAMw9B,GAAiChzB,IAEvC,IAFwC,cAC3CizB,EAAa,0BAAEzE,EAAyB,YAAE5nC,GAC7CoZ,EACG,OACIxa,IAAAU,cAAAV,IAAAyc,SAAA,KACKgxB,EAAcj7D,KAAIk7D,IACf,GAAIjG,GAAgBrmC,EAAassC,GAC7B,OACI1tC,IAAAU,cAACgM,EAAI,CAACE,UAAU,yBAAyB9wB,IAAK4xD,GACzCxF,GAAwBwF,GAAW,6BAKhD,MAAMC,ERsBwBvsC,MACrCA,GACEplB,OAAOC,QAAQmlB,GAAa1gB,QAC/B85B,IAAA,IAAEozB,EAAGl7D,GAAM8nC,EAAA,OAAe,IAAV9nC,CAAc,IAAEF,KAAIooC,IAAA,IAAEliC,EAAMk1D,GAAEhzB,EAAA,OAAKliC,CAAI,IQzB1Bm1D,CACjBzsC,EAAYssC,IAChB,OAAKC,EAAat5D,OAGd2rB,IAAAU,cAAC+b,WAAQ,CAAC3gC,IAAK4xD,GACX1tC,IAAAU,cAACgM,EAAI,CAACE,UAAU,0BAA0Bs7B,GAAwBwF,IACjEC,EAAan7D,KAAIgyB,GACdxE,IAAAU,cAACgM,EAAI,CACDE,UAAU,wBACV9wB,IAAK,GAAG4xD,KAAalpC,KACpB0jC,GACGc,GAAgD,4BAAnBxkC,EACvB,6CACAA,OAZS,IAgBpB,IAGpB,EClBEspC,GAAyBtzB,IAG/B,IAHgC,0BACnCwuB,EAAyB,KAAE3I,EAAO,iBAAgB,WAAExT,EAAU,sBAC9DkhB,EAAqB,uBAAEC,GAC1BxzB,EAKOyzB,EAA4B,CAAC,EACtB,mBAAP5N,GAA2B2I,IAC3BiF,EAA4BxF,GAA6B5b,IAG7D,MAAQD,WAAY13B,EAAO,CAAC,GAAM23B,EAClC,OACI7sB,IAAAU,cAACkwB,KAAY,KACT5wB,IAAAU,cAACmwB,KAAa,KACA,mBAATwP,GAA6B2I,EAEtBhpC,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACE,UAAU,2BACZ5M,IAAAU,cAAA,SAAIutC,EAA0BhsD,MAAS,IAAEgsD,EAA0Bv1D,MAEtEu1D,EAA0Bv/C,YAAYra,OAAS,GAC5C2rB,IAAAU,cAACgM,EAAI,CAACE,UAAU,yBACXqhC,EAA0Bv/C,cAKzCsR,IAAAU,cAACgM,EAAI,KAAEm8B,GAAuDhc,EAAW7iC,OAErE,aAATq2C,GACGrgC,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,KAAExX,EAAKjS,UAAY,GAAG,IAAEiS,EAAK/R,SAAW,IAC7C6c,IAAAU,cAACgM,EAAI,CAACE,UAAU,yBAAyB1X,EAAKpG,OAAS,MAInEkR,IAAAU,cAACmwB,KAAa,CAACjkB,UAAU,wCACpBo8B,EACKhpC,IAAAU,cAAC8sC,GAA8B,CAC7BC,cAAe,CACX,oCACA,8BACA,6BAEJzE,2BAA2B,EAC3B5nC,YAAayrB,EAAWzrB,cAC1BpB,IAAAU,cAAC8sC,GAA8B,CAC7BC,cACwB,wBAApB5gB,EAAW7iC,KACT,CACE,sBACA,6BACoB,0BAApB6iC,EAAW7iC,KACT,CACE,wBACA,6BACA,CACA,+CACA,6BAGZg/C,2BAA2B,EAC3B5nC,YAAayrB,EAAWzrB,eAIpCpB,IAAAU,cAACmwB,KAAa,CAACjkB,UAAU,4BACX,aAATyzB,GAAuBxT,EAAWqhB,0BAC7BluC,IAAAU,cAACgM,EAAI,KAAC,wDAEJ1M,IAAAU,cAAAV,IAAAyc,SAAA,KACKoQ,EAAWshB,SACRnuC,IAAAU,cAACwR,EAAY,CACTG,MAAI,EACJ5C,QAASA,IAAMs+B,EACf/E,EAA2Bnc,IAC9B,UAIJA,EAAWuhB,WACRpuC,IAAAU,cAACwR,EAAY,CACTQ,QAAM,EACNjD,QAASA,IAAMu+B,EACXhF,EAA2Bnc,IAC5B,eAQhB,ECtGjBwhB,GACM,EAGNC,GAAuB,CACzB,EAAG,SACH,EAAG,aAIP,SAASC,GAAUC,EAAYxF,GAC3B,IAAKA,EACD,OAAOwF,EAAW5hB,WAAW15C,GAEjC,IAAI4I,EAAM0yD,EAAW5hB,WAAW15C,GAChC,IAAK,IAAIm5D,IAA2B,CAChC,YAAa,WAAY,WAAY,SAAU,eAChD,CAAC,IAADoC,EACwC,QAAvCA,EAAID,EAAWnC,UAAwB,IAAAoC,GAAnCA,EAAqCv7D,KACrC4I,GAAO,IAAI0yD,EAAWnC,GAAyBn5D,KAEvD,CACA,OAAO4I,CACX,CAGO,MAAM4yD,GAAkBl0B,IAExB,IAFyB,sBAC5Bm0B,EAAqB,0BAAE3F,EAAyB,QAAEh5B,KAAY7P,GACjEqa,EACG,MAAOkc,EAAgBkT,GAAqB16B,oBAAS,IAC9CztB,EAAYooD,GAAiB36B,mBAAS,IACtCub,EAAYC,GAAiBxb,mBAAS,OACtC3uB,EAAMmrC,GAAWxc,mBAAS,OAC1B0/B,EAAaC,GAAkB3/B,mBAASm/B,IAkE/C,OAXAx1B,qBArDA,WACI,IAAIgS,EAAW,KAef,SAASof,EAAmBzkD,GACxBqlC,EAAW,KACXH,EAAcllC,GACdokD,GAAkB,EACtB,CA6BA,OAdAA,GAAkB,GAClBlf,EAAc,MACdG,EAAWpmB,EACPtE,EAAM9lB,IAAK,MAAO,CAAC,EAAG,CAClBs0C,MA3EK,GA4ELp8B,KAAM9Q,KACF0e,EAAMmpC,qBAAuB,CAAC,KAC9BN,EACE,CAAC8F,SAAUR,GAAqBM,IAChC,CAAC,IAzCf,SAAyBruD,GACrBsqC,EAAW,KACX,MAAM,MAAEjpC,GAAUrB,EAAKshB,KACvB6pB,EAAQ,CACJtqB,YAAa3E,YACTlc,EAAM,CAACoc,oBAAoB,IAAOyE,aAAe,GACrDxf,MAAOA,EACPktC,QAASttC,YAAaC,GACtBstC,QAASrtC,YA/CJ,GA+C+BD,EAAYG,KAEpDgoD,GAAkB,EACtB,IAQA,SAAuBrpD,GACnB0pD,EACI,mEAA4ClrC,YAAsBxe,EAAKiF,WAE/E,IAEA,SAAiCuE,GAC7BkgD,EAA8B,MAAXlgD,EACb,oFAAkEi/C,EAA4B,yBAAsB,iBACpH,4HAAiFj/C,KAE3F,IAgBO,KACc,OAAb8gC,GAAoBA,EAASI,OAAO,CAEhD,GACoB,CAACxpC,EAAYmtD,IAY7B5uC,IAAAU,cAAAV,IAAAyc,SAAA,KACKusB,GACG2F,EAAsB9hB,WAAW15B,UAE7B6M,IAAAU,cAACquC,KAAM,CACHC,eAAgBJ,EAChBK,WAZpB,SAAyB1xB,GACrBssB,EAAc,GACdgF,EAAetxB,EAAG2xB,OAAO7xC,MAC7B,GAUoB2C,IAAAU,cAACyuC,KAAG,CAACx8D,MAAM,gCACXqtB,IAAAU,cAACyuC,KAAG,CAACx8D,MAAM,kBAItB+jD,EACK12B,IAAAU,cAACmN,EAAM,MACN4c,EACGzqB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEsiC,GAEXzqB,IAAAU,cAAAV,IAAAyc,SAAA,KACoB,IAAfl8B,EAAKqB,MACAoe,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,yCAEV6X,IAAAU,cAACkyB,GAAW,CACRxB,gBAAiB,CAAC,kBAAc,cAAe,mBAC9C7wC,EAAK6gB,YAAY5uB,KAAIopB,GAClBoE,IAAAU,cAACotC,GAAsB,CACnBhyD,IAAKyyD,GAAU3yC,EAAQotC,GACvBA,0BAA2BA,EAC3B3I,KAAK,WACLxT,WAAY,IACLjxB,KACCotC,EACE,CAAC,EACD,CAACh/C,KAAM2kD,EAAsB9hB,WAAW7iC,OAGlD+jD,sBAAuB5tC,EAAM4tC,sBAC7BC,uBAAwB7tC,EAAM6tC,4BAKjDztD,EAAKqB,MA9Ib,IA+IWoe,IAAAU,cAACwyB,GAAU,CACPC,YAAa1xC,EACbwoB,SAAUysB,EACV3H,QAASxuC,EAAKwuC,QACdD,QAASvuC,EAAKuuC,QACdsE,iBAzDhC,WAAsC,IAAZ9gB,IAAIl+B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAC1By1D,GAAcr3B,GAAQF,EAAOE,EAAO,EAAIz8B,KAAKC,IAAIw8B,EAAM,EAAG,IAC9D,KA6DQxS,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC4F,QAASO,GAAS,YAI7C,EClKLo/B,GAA+B,CACjCC,eAAgB,CAAC,wBAAyB,uBAC1CC,oBAAqB,CAAC,sCAIbC,GAAiB/0B,IAAoC,IAAnC,kBAACg1B,KAAsBrvC,GAAMqa,EACxD,MAAOi1B,EAAaC,GAAkBxgC,oBAAS,IACxCub,EAAYC,GAAiBxb,mBAAS,OACtClnB,EAAQ6jC,GAAa3c,mBAAS,CAAC,IAC/BpgB,EAAO6gD,GAAYzgC,mBAAS,KAC5B5e,EAAYs/C,GAAiB1gC,mBAAS,IAqE7C2J,qBAnEA,WACI,IAAK42B,EAAe,OACpB,IAAI5kB,EAAW,KAOf,SAASof,EAAmBzkD,GACxBqlC,EAAW,KACXH,EAAc,2DAAuCllC,KACrDkqD,GAAe,EACnB,CAgCAA,GAAe,GACfhlB,EAAc,MACdmB,EAAU,CAAC,GACX,IAAIkB,EAAY,CACZ8iB,SAAUT,GAA6BI,IAc3C,OAZI1gD,EAAMza,SACN04C,EAAiB,MAAIj+B,GAErBwB,EAAWjc,SACX04C,EAAsB,WAAIz8B,GAG9Bu6B,EAAWpmB,EACPsiB,GAASC,cAAc3sC,IAAK,MAAO,CAAC,EAAG0yC,GAvD3C,SAAyBxsC,GACrBsqC,EAAW,KACX1qB,EAAM2vC,WAAWvvD,EAAK2U,MAAQ,KAClC,IAQA,SAAuB3U,GACnB0pD,EAAmBlrC,YAAsBxe,EAAKiF,SAClD,IAEA,SAAiCuE,GAC7B,IAAIvE,EAAU,GACd,OAAQuE,GACJ,KAAK,IACDvE,EAAU,kEAA8E,mBAAtBgqD,EAC5D,gBACA,gCAEN,MACJ,KAAK,IACDhqD,EAAU,kDACV,MACJ,QACIA,EAAU,4DAAwCuE,KAE1DkgD,EAAmBzkD,EACvB,IAEA,SAA4BwC,GACxB6iC,EAAW,KACXgB,EAAUltB,YACN3W,EAAQ,CAAC4U,qBAAqB,KAElC8yC,GAAe,EACnB,IAoBO,KACc,OAAb7kB,GAAoBA,EAASI,OAAO,CAEhD,GACgB,CAACwkB,IAEjB,MAAM9I,GAAkB3+C,EAAO8G,OAAS,IAAIza,OAAS,EAC/C07D,GAAuB/nD,EAAOsI,YAAc,IAAIjc,OAAS,EAE/D,OACI2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,KAAC,iCACN1M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,eACNq6B,SAAS,WACTG,IAAI,SACJnN,IAAAU,cAAC2jB,GAAe,CACZiC,gBAAc,EACdrc,SAAUwlC,EACVjhC,WAAS,EACTt7B,GAAG,WACHw7B,QAASi4B,EACTngB,UAAW,IACX9zC,MAAOoc,EACP2nB,SAAU8G,GAAMoyB,EAASpyB,EAAGiI,OAAO9yC,OACnCqyC,QAASxH,GAAMoyB,EAAS,MAC3BhJ,GACG3mC,IAAAU,cAAA,MAAIxtB,GAAG,eACF8U,EAAO8G,MAAMtc,KAAI,CAACS,EAAGkC,IAClB6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,OAK9C+sB,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,gBACNq6B,SAAS,gBACTG,IAAI,SACJnN,IAAAU,cAAC2jB,GAAe,CACZiC,gBAAc,EACdrc,SAAUwlC,EACVjhC,WAAS,EACTt7B,GAAG,gBACHw7B,QAASqhC,EACTvpB,UAAW,IACX9zC,MAAO4d,EACPmmB,SAAU8G,GAAMqyB,EAAcryB,EAAGiI,OAAO9yC,OACxCqyC,QAASxH,GAAMqyB,EAAc,MAChCG,GACG/vC,IAAAU,cAAA,MAAIxtB,GAAG,oBACF8U,EAAOsI,WAAW9d,KAAI,CAACS,EAAGkC,IACvB6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,QAMlD+sB,IAAAU,cAACuhB,GAAoB,CACjBhY,SAAUwlC,EACVvtB,cAAepzB,EAAMza,SAAYic,EAAWjc,OAC5C+tC,SAAS,2BACTC,SAAUliB,EAAMkiB,SAChBC,OAAQA,IAAMotB,GAAe,KACjB,OAAfjlB,GAAuBzqB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACykB,UAAU,wBAAwB6d,IACpEziC,EAAOgjC,WAAa,IAAI32C,OAAS,GAC/B2rB,IAAAU,cAAA,MAAIxtB,GAAG,cACF8U,EAAOgjC,UAAUx4C,KAAI,CAACS,EAAGkC,IACtB6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,MAI3C,EC1JE+8D,GAAax1B,IAAmC,IAAlC,KAAEtlB,EAAI,YAAE+6C,GAAc,GAAMz1B,EACnD,OACIxa,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GACpB/X,EAAKhS,MAAQgS,EAAKjS,SAAS,IAAEiS,EAAK9R,UAAY8R,EAAK/R,SAEvD8sD,GACGjwC,IAAAU,cAACyQ,EAAU,CAACS,SAAO,GACf5R,IAAAU,cAACwQ,IAAI,CACDtE,UAAU,gDACV1iB,GAAIkc,EAAK9Q,MAAMwI,MAAM,8CAGzBkC,IAAAU,cAAA,KACIkM,UAAU,iDACVptB,KAAM4mB,EAAKsD,mBAAmB9C,OAAO1R,EAAKoC,gBAAgB,4BAM1E0I,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,gBAClBqtB,IAAAU,cAACgM,EAAI,KAAExX,EAAKpG,QAEhBkR,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,iBAClBqtB,IAAAU,cAACgM,EAAI,KAAExX,EAAKoC,eAAiBpC,EAAK5E,cAG3C,ECnBE4/C,GAAkC11B,IAmBxC,IAnByC,oBAC5C8uB,EAAmB,eACnB6G,EAAc,kBACdC,EAAiB,SACjBnmC,EAAQ,qBAAEomC,EAAoB,mBAAEC,EAAkB,cAClDC,EAAa,uBACb9jB,EAAsB,cACtB+jB,EAAa,iBAAEC,EAAgB,0BAC/BzH,EAAyB,YACzB5nC,EAAW,QACXsvC,EAAO,SACP/kB,EAAQ,oBACRglB,EAAmB,iBACnBC,EAAgB,iBAChBrkB,EAAgB,OAChBnlB,EAAM,SACNib,EAAQ,wBACRwuB,EAAuB,cACvBC,GACHt2B,EACG,MAAOktB,EAAQqJ,GAAa7hC,mBAAS,IAAIkhC,IAEzC9G,EAAsBA,GAAuB,CAAC,EAE9C,MAAM,WAAE7e,EAAU,OAAEziC,EAAM,YAAEsnC,GAAgBJ,GAAmB,CAC3D70C,IAAKq2D,EACL3jB,UAAW,CAACF,WAAY,CACpBD,WAAY/2C,SAASuxB,MAClBsgC,KACA4B,IAEP1kC,gBAAiBisC,EACjBzhB,qBAAsBA,IAAM7C,GAAiB,GAC7Cc,UAAW1B,EACX2B,aAAcwjB,EACdpsC,OAAQ6rC,EAAgB,MAAQ,OAChClhB,mBAAoB,qBACpBzyB,qBAAqB,EACrBswB,gBAAiB,0KAIf8jB,EAAoCh1D,OAAO6nB,OAC7CylC,GAAqB9rC,KAAK,IAI9Bqb,qBAHA,WACI0T,GAAiB,EACrB,GACoC,CAACykB,IAMrCn4B,qBAJA,WACS83B,GACLA,EAAoB3oD,EACxB,GAC0C,CAACA,IAwC3C,IAAIipD,EAAqB,CAAC,EAC1B,IAAK,IAAIvD,KAAa1xD,OAAOS,KAAKirD,GAC9BuJ,EAAmBvD,GAAajG,GAC5BC,EAAQgG,GAGhB,MAAMwD,EbpG0BlpD,KACxBA,EAAO6kC,YAAc,CAAC,GAAGskB,WAAa,GamGrBC,CAAoBppD,GAG7C,IAAIqpD,GAAwB,EACxBC,GAAsB,EAa1B,OAZIlwC,IACAiwC,GAAyBjwC,EAAYgC,cACrCkuC,GAAuBlwC,EAAYA,aAWnCpB,IAAAU,cAAAV,IAAAyc,SAAA,KACK+zB,IAAkBD,GACfvwC,IAAAU,cAACgiB,GAAwB,CACrBC,YAAY,wCACZC,SAAO,EACPp9B,QAAS,gFAAiEirD,GAAoB,iBAC9F5tB,YAtChB,WACIkuB,EAAqC,OAA3BtkB,EACJA,EAAyB2jB,GAE/B7jB,GAAiB,GACjBqkB,GAAiB,EACrB,IAkCQ5wC,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,cAAcw6B,IAAI,SACnC+jC,EAAiB78D,OAAS,GAAK68D,EAAiB1+D,KAC7C,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,GAAIlC,KAEnC+sB,IAAAU,cAAA,OAAKkM,UAAU,2BACX5M,IAAAU,cAACiiC,KAAQ,CACLpB,SAAUvlD,OAAO6nB,OAAOotC,GAAoBn8D,UAAS,GACrDm1B,SACIonC,GAAyBC,GACzBrnC,GAAYumC,EAEhBe,cAAe3J,GAA0BF,GACzC/0D,MAAOu1D,GAAwB,OAC/BzxB,SAnFpB,SAAwB8G,GACpB,MAAMgkB,EAAUhkB,EAAGiI,OAAO+b,QAC1BwP,GAAUhlB,IACN,IAAIga,EAAM,CAAC,EACX,IAAK,IAAI2H,KAAa1xD,OAAOS,KAAKsvC,GAC9Bga,EAAM,IACCA,KACAqB,GACCgJ,EAAmB1C,EAAWnM,IAG1C,OAAOwE,CAAG,GAElB,KAyEa4C,GAAa3sD,OAAOC,QAAQyrD,GAASyI,EAAe50D,QAAQ/I,KACzDooC,IAAqC,IAAnC42B,EAAYC,GAAiB72B,EAC3B,MAAM82B,EAjCJ,8BAiCuCF,EAhC9CF,EAEJD,EA+BS,OACIrxC,IAAAU,cAAC+b,WAAQ,CAAC3gC,IAAK01D,GACXxxC,IAAAU,cAAA,OAAKkM,UAAU,wBACX5M,IAAAU,cAACiiC,KAAQ,CACLpB,QAAS0P,EAAmBO,KAAe,EAC3CvnC,SACIynC,GAAiBznC,GACjBumC,EAEJe,cAAe5J,GACXD,EAAQ8J,GACZ7+D,MAAO,GAAGu1D,GAAwBsJ,8BAClC/6B,SAAU8G,GAtF9C,SAA0BA,EAAImwB,GAC1B,MAAMnM,EAAUhkB,EAAGiI,OAAO+b,QAC1BwP,GAAUxJ,IAAU,IACbA,KACAH,GAAyBgJ,EAAmB1C,EAAWnM,MAElE,CAgFoDoQ,CAAiBp0B,EAAIi0B,MAE5C7I,GACG3sD,OAAOC,QAAQw1D,GACftB,EAAeqB,IACjBh/D,KACEuoC,IAAA,IAAE62B,EAAiBC,GAAgB92B,EAAA,OACnC/a,IAAAU,cAAC+b,WAAQ,CAAC3gC,IAAK81D,GACX5xC,IAAAU,cAAA,OAAKkM,UAAU,wBACX5M,IAAAU,cAACiiC,KAAQ,CACLpB,QAASmG,EAAO8J,GAAYI,GAC5B3nC,SACIynC,GAAiBznC,GACjBumC,EAEJ79D,MAAOu1D,GACHc,GAAiD,4BAApB4I,EAC3B,6CACAA,GAENn7B,SAAU8G,IAAMu0B,OAlGvBvQ,EAmGWhkB,EAAGiI,OAAO+b,QAnGZ/uC,EAmGqBg/C,EAnGbhK,EAmGyBoK,OAlG3Eb,GAAUxJ,IAAU,IACbA,KACAD,GAAsBC,EAAY/0C,EAAQg1C,EAAOjG,OAH5D,IAAqCA,EAAS/uC,EAAQg1C,CAoGR,KAEH,IAER,KAK3BxnC,IAAAU,cAACuhB,GAAoB,CACjBhY,SAAUomC,EACVnuB,aAAcouB,EACdluB,SAAUkN,EACVjN,SAAUA,EACVC,OAAQA,IAAMwuB,GAAc,KAChB,OAAfrmB,GAAuBzqB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEsiC,GACpC+lB,GAAiBD,GACdvwC,IAAAU,cAACgiB,GAAwB,CACrBC,YAAY,KACZn9B,QAAQ,wJACRq9B,YAAaR,IAEtB,EClNL0vB,GAAS,CACXz8C,MAAO,CACHpiB,GAAI,EACJP,MAAO,sCACPq/D,eAAgB,uBAEpBC,SAAU,CACN/+D,GAAI,EACJP,MAAO,kCACPq/D,eAAgB,yBAEpBrjD,aAAc,CACVzb,GAAI,EACJP,MAAO,8DACPq/D,eAAgB,iDAGlBE,GAAiBl2D,OAAO6nB,OAAOkuC,IAChCv/D,KAAI2/D,GAAS,CAACA,EAAMj/D,GAAIi/D,EAAMx/D,MAAOw/D,EAAMH,kBAC3C5xD,MAAK,CAACgyD,EAAIC,IAAOD,EAAGl/D,GAAKm/D,EAAGn/D,KAC3Bo/D,GAAiBJ,GAAe,GAChCK,GAA2C,CAC7CrwC,oBAAqB,CACjBG,kBAAkB,EAClBkB,eAAe,GAEnBhB,0BAA2B,CACvBE,4BAA4B,EAC5BY,yBAAyB,EACzBC,uBAAuB,IAGzBkvC,GAA6C,CAC/C7vC,sBAAuB,CACnBmB,iCAAiC,EACjCxP,YAAY,EACZpE,MAAM,GAEVqS,0BAA2B,CACvBE,4BAA4B,EAC5BY,yBAAyB,EACzBC,uBAAuB,IAGzBmvC,GAAsE,CACxE1vC,6CAA8C,CAC1CoB,aAAa,EACbE,UAAU,GAEd9B,0BAA2B,CACvBE,4BAA4B,EAC5BY,yBAAyB,EACzBC,uBAAuB,IAGzBovC,GAAwC,CAC1Cn3D,OAAQ,CAAC,sBAAuB,6BAChC2mB,oBAAqB,CAAC,mBAAoB,iBAC1CK,0BAA2B,CACvB,6BAA8B,0BAC9B,0BAGFowC,GAA0C,CAC5Cp3D,OAAQ,CAAC,wBAAyB,6BAClConB,sBAAuB,CACnB,kCAAmC,aAAc,QACrDJ,0BAA2B,CACvB,6BAA8B,0BAC9B,0BAGFqwC,GAAmE,CACrEr3D,OAAQ,CACJ,+CACA,6BAEJwnB,6CAA8C,CAAC,cAAe,YAC9DR,0BAA2B,CACvB,6BAA8B,0BAC9B,0BAGFswC,GAAqB,mCAGdC,GAAoCt4B,IAE1C,IAF2C,YAC9Cu4B,EAAc,KAAI,OAAE3rC,EAAM,SAAEib,EAAQ,wBAAEwuB,GACzCr2B,EACG,MAAO+1B,EAAeK,GAAoB1hC,mBAAyB,OAAhB6jC,IAC5CpnB,EAAUC,GAAe1c,oBAAS,IAClC8jC,EAAeC,GAAoB/jC,mBAAS,MAenD2J,qBAbA,WAEI,GAAI03B,EACA,IAAK,IAAK2C,EAAKC,EAAQC,KAAoBlB,GACvC,GAAIkB,IAAoBL,EAAY/oD,KAEhC,YADAipD,EAAiB,CAACvgE,MAAMwgE,EAAKvgE,MAAOwgE,IAKhDF,EAAiB,CACbvgE,MAAO4/D,GAAe,GAAI3/D,MAAO2/D,GAAe,IACxD,GACmC,IAGnC,MAAOe,EAAuB7mB,GAA4Btd,oBAAS,IAC5DshC,EAAejkB,GAAoBrd,oBAAS,IAE/Ckd,EAA6BC,GAC9Bnd,oBAAS,GAOZ2J,qBALA,WAC0B,OAAlBm6B,GAA0BzC,IAC9B/jB,GAAyB,GACzBH,GAA+B,GACnC,GACyC,CAAC2mB,IAE1C,MAAM,uBAAEvmB,GAA2BN,GAC/BC,EAA6BC,EACX,OAAlB2mB,EAAyB,GAAMjB,GAAOz8C,MAAMpiB,KAAO8/D,EAActgE,MAC3Dq0C,GAASS,6BAA6B1pB,KACtCi0C,GAAOE,SAAS/+D,KAAO8/D,EAActgE,MACjCq0C,GAASO,+BAA+BxpB,KACxCipB,GAASK,oCAAoCtpB,KAEvD,CAAC,EAAGyuB,EAAkBC,EAA0BplB,IAG9C,YAAEhG,GAAgB+e,qBAAWjf,GAEnC,GAAsB,OAAlB8xC,EAA0B,OAAO,KAErC,MAAMM,EAAiB3nB,GAAYS,EAC7BkkB,EAAqBgD,GAAkBD,EAC7C,OACIrzC,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,8BAA8Bw6B,IAAI,SACpDnN,IAAAU,cAAC4Y,GAAM,CACH,aAAW,8BACX1M,UAAU,gBACVwM,WAAYm3B,GAAiB5kB,EAC7B9a,QAASqhC,GAAe1/D,KACpBC,IAAM,CAAMC,MAAOD,EAAO,GAAIE,MAAOF,EAAO,OAChD6nC,mBAAoBA,IAAc,GAClC7O,OAAQF,EACR74B,MAAOsgE,EACPv8B,SAAUiG,GAAkBu2B,EAAiBv2B,MAEpD22B,GACGrzC,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAQ,6HAI5BikC,GAAOz8C,MAAMpiB,KAAO8/D,EAActgE,OAC/BstB,IAAAU,cAACwvC,GAA+B,CAC5BC,eAAgBuC,GAChBtC,kBAAmBG,EACe,OAA3B9jB,EACGA,EACAsmB,EAAY3xC,YAEhBmxC,GAENtoC,SAAUqpC,EACVjD,qBAAsBiD,EACtBhD,mBAAoBA,EACpBC,cAAeA,EACf9jB,uBAAwBA,EACxB+jB,cAAeA,EACfC,iBAAkBoC,GAClBzxC,YAAaA,EAAY+B,2BACzButC,QAAS3pB,GAASQ,sBAAsBzpB,KACxC6tB,SAAUA,EACVilB,iBAAkBA,EAClBrkB,iBAAkBA,EAClBnlB,OAAQA,EACRib,SAAUA,EACVwuB,wBAAyBA,EACzBC,cAAellB,IAEtBmmB,GAAOE,SAAS/+D,KAAO8/D,EAActgE,OAClCstB,IAAAU,cAACwvC,GAA+B,CAC5BC,eAAgBwC,GAChBvC,kBAAmBG,EACe,OAA3B9jB,EACGA,EACAsmB,EAAY3xC,YAEhBoxC,GAENvoC,SAAUqpC,EACVjD,qBAAsBiD,EACtBhD,mBAAoBA,EACpBC,cAAeA,EACf9jB,uBAAwBA,EACxB+jB,cAAeA,EACfC,iBAAkBoC,GAClBzxC,YAAaA,EAAY2C,6BACzB2sC,QAAS3pB,GAASM,wBAAwBvpB,KAC1C6tB,SAAUA,EACVilB,iBAAkBA,EAClBrkB,iBAAkBA,EAClBnlB,OAAQA,EACRib,SAAUA,EACVwuB,wBAAyBA,EACzBC,cAAellB,IAEtBmmB,GAAOpjD,aAAazb,KAAO8/D,EAActgE,OACtCstB,IAAAU,cAACwvC,GAA+B,CAC5BC,eAAgByC,GAChBxC,kBAAmBG,EACe,OAA3B9jB,EACIA,EACAsmB,EAAY3xC,YAEjBqxC,GAENxoC,SAAUqpC,EACVjD,qBAAsBiD,EACtBhD,mBAAoBA,EACpB7jB,uBAAwBA,EACxB8jB,cAAeA,EACfC,cAAeA,EACfC,iBAAkBoC,GAClBzxC,YAAaA,EAAY6C,oDACzBysC,QAAS3pB,GAASI,6BAA6BrpB,KAC/C6tB,SAAUA,EACVilB,iBAAkBA,EAClBrkB,iBAAkBA,EAClBnlB,OAAQA,EACRib,SAAUA,EACVwuB,wBAAyBA,EACzBC,cAAellB,IAExB,EC1OL2nB,GAAsB,CACxB9vC,kCAAmC,CACjCC,oBAAoB,EACpBW,UAAU,GAEZV,4BAA6B,CAC3BD,oBAAoB,EACpBskC,UAAU,EACV3jC,UAAU,GAEZ9B,0BAA2B,CACvBE,4BAA4B,EAC5BY,yBAAyB,EACzBC,uBAAuB,IAIzBkwC,GAAmB,CACrBj4D,OAAQ,CACJ,oCACA,8BACA,6BAEJkoB,kCAAmC,CAAC,qBAAsB,YAC1DE,4BAA6B,CACzB,qBAAsB,WAAY,YACtCpB,0BAA2B,CACvB,6BAA8B,0BAC9B,0BAKR,SAASkxC,GAA6BC,GAClC,IAAKA,EAAY,OAAO,KAGxB,IAAI3N,EAAM,IAAI2N,GAGd,OAFA3N,EAAW,MAAIA,EAAI7yD,UACZ6yD,EAAQ,GACRA,CACX,CAGO,MAAM4N,GAA2Cn5B,IAEjD,IAFkD,YACrDu4B,EAAW,aAAEhwD,EAAY,OAAEqkB,EAAM,SAAEib,EAAQ,wBAAEwuB,GAChDr2B,EACG,MAAO+1B,EAAeK,GAAoB1hC,mBAAyB,OAAhB6jC,IAC5CpnB,EAAUC,GAAe1c,oBAAS,IAClC0kC,EAAsBC,GAA2B3kC,mBACpD,CACItc,YAAa,KAAMQ,UAAW,KAAMD,SAAU,KAAM9F,SAAU,KAC9DkD,YAAa,KAAMsD,OAAQ,QAG/BigD,EAA4BC,GAC5B7kC,mBAAS,CAAC,GAEd2J,qBAAU,KACD03B,GAAkBwC,GAEvBc,EAAwB,CACpBjhD,YAAa6gD,GAA6BV,EAAYngD,aACtDQ,UAAWqgD,GAA6BV,EAAY3/C,WACpDD,SAAUsgD,GAA6BV,EAAY5/C,UACnD9F,SAAUomD,GAA6BV,EAAY1lD,UACnDkD,YAAakjD,GAA6BV,EAAYxiD,aACtDsD,OAAQ4/C,GAA6BV,EAAYl/C,SACnD,GACH,CAAC08C,EAAewC,IAMnB,MAAOM,EAAuB7mB,GAA4Btd,oBAAS,IAG/D8kC,EAA0BC,GAC1B/kC,mBAAS,CAAC9L,eAAe,EAAMhC,aAAa,KAE5C8yC,EAAgCC,GAChCjlC,oBAAS,IAENshC,EAAejkB,GAAoBrd,oBAAS,IAE/Ckd,EAA6BC,GAC7Bnd,oBAAS,GAEb2J,qBAAU,KACN2T,GAAyB,GACc,OAAnConB,EAAqBxgD,YACzB6gD,EACI,CAAC7wC,eAAe,EAAOhC,aAAa,IACxC+yC,GAAkC,GAAK,GACxC,CAACP,IAEJ,MAAM7mB,EAAYoF,mBACd,KACI,IAAIiiB,EACA,CAAC,cAAe,YAAa,WAAY,YACzC1xD,YAAsBkxD,EAAqBhhD,cAC3CwhD,EAAW51D,KAAK,UAEhBmE,YAA2BixD,EAAqBhhD,cAChDwhD,EAAW51D,KAAK,eAEpB,MAAMk1D,EAAW,CAAC,EAClB,IAAK,IAAIjhB,KAAa2hB,EAClBV,EAASjhB,GAAamhB,EAAqBnhB,GACrCmhB,EAAqBnhB,GAAW//C,MAAQ,KAElD,OAAOghE,CAAQ,GAChB,CAACE,KAEF,KAAE1+C,GAASirB,qBAAWjf,IACpBhuB,GAAImhE,GAAkBn/C,EAE9B2jB,qBAAU,KACN,IAAKq7B,EAAkC,OAEvC,IAAIrpB,EAAW,KAsBf,SAAS8B,IACL9B,EAAW,KACXspB,GAAkC,EACtC,CAqBA,OAXAtpB,EAAWpmB,EACPsiB,GAASG,yDAAyDppB,KAClE,MAAO,CAAC,EACR,CACI8uB,WAAYynB,EACZhU,KAAM,eACHtT,IAvCX,SAAkCxsC,GAC9BsqC,EAAW,KACX,MAAMtoB,GAA6BhiB,EAAKssC,YAAc,CAAC,GAClDtqB,2BAA6B,CAAC,EAC7B+xC,EAAqB,CACvBlxC,cACIb,EAA0Bc,0BAA2B,EACzDjC,YACImB,EAA0Be,wBAAyB,GAE3D2wC,EAA4BK,GAC5BH,GAAkC,GAC7B5D,IACD+D,EAAmBlxC,gBACnBkxC,EAAmBlzC,aAEnBirB,GAA+B,EAEvC,GAuB8BM,GAhB9B,SAA2CnzC,GACvCqxC,EAAW,KACQ,MAAfrxC,GACAgzC,GAAyB,GAE7BG,GACJ,IAaO,KACc,OAAb9B,GACAA,EAASI,OACb,CACH,GACF,CAACipB,IAEJ,MAAM,uBAAEznB,GAA2BN,GAC/BC,EAA6BC,EAC7BtF,GAASG,yDAAyDppB,KAClEivB,EAAWR,EAAkBC,EAA0BplB,GAG3D,SAASmtC,EAAgCh0D,GACrCszD,GAAwB9nB,IAAS,IAASA,KAAcxrC,MACjC,OAAnBA,EAAK6S,WACLm5B,GAAiB,EAEzB,CAEA,MAAM+mB,EAAiBlnB,GACA8nB,GACAvoB,EACjB6oB,EAAsBnB,IACvBa,IACAF,EAAyB5wC,gBACzB4wC,EAAyB5yC,YAGxBqzC,EACFX,EAA2BjnB,YAAc,CAAC,EAE9C,OACI7sB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,wBAAmBw6B,IAAI,WACtCojC,GAAsD,OAArCqD,EAAqBhhD,cACrCoN,IAAAU,cAACg9B,GAAoC,CACjCrwC,SAAUumD,EAAqBvmD,SAC/BizC,eAAgBmU,EAAqCpnD,UAAY,GACjE4c,SAAUqpC,GAAkB/C,EAC5BhgD,YAAaqjD,EAAqBrjD,YAClCgwC,kBAAmBkU,EAAqClkD,aAAe,GACvE8nB,aAAa,EACbgoB,KAAK,cACLztC,YAAaghD,EAAqBhhD,YAClC6tC,kBAAmBgU,EAAqC7hD,aAAe,GACvE7P,aAAcA,EACdw8C,sBAAsB,EACtBpsC,SAAUygD,EAAqBzgD,SAC/ButC,eAAgB+T,EAAqCthD,UAAY,GACjEC,UAAWwgD,EAAqBxgD,UAChCutC,gBAAiB8T,EAAqCrhD,WAAa,GACnES,OAAQ+/C,EAAqB//C,OAC7B+sC,aAAc6T,EAAqC5gD,QAAU,GAC7DuqC,uBAAuB,EACvBM,iBAAkB6V,EAClBvV,oBAAqBuV,EACrBvW,oBAAqBuW,EACrB/V,iBAAkB+V,EAClBjW,kBAAmBiW,EACnBzV,eAAgByV,KAI3BL,GACGl0C,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACe,KAAK,SAAQ,yEAI3B0mC,GACGx0C,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAQ,4FAEe,OAAnC8lC,EAAqBxgD,WAAsB,sCAGpD4M,IAAAU,cAACwvC,GAA+B,CAC5B5G,oBAAqBvc,EACrBojB,eAAgBqD,GAChBpD,kBAAmBG,EACe,OAA3B9jB,EACGA,EACAsmB,EAAY3xC,YAEhBmyC,GAENtpC,SAAUqpC,EACVjD,qBAAsB1kB,EACtB2kB,mBAAoBgD,GAAkBkB,EACtCjE,cAAeA,EACf9jB,uBAAwBA,EACxB+jB,cAAeA,EACfC,iBAAiB,yBACjBzH,2BAA2B,EAC3B5nC,YAAa4yC,EACbtD,QAAS3pB,GAASE,kDAAkDnpB,KACpE6tB,SAAUA,EACVglB,oBAAqBoD,EACrBnD,iBAAkBA,EAClBrkB,iBAAkBA,EAClBnlB,OAAQA,EACRib,SAAUA,EACVwuB,wBAAyBA,EACzBC,cAAellB,IACpB,ECpRE8oB,GAAyCl6B,IAE/C,IAFgD,YACnDu4B,EAAc,KAAI,OAAE3rC,EAAM,SAAEib,EAAQ,wBAAEwuB,GACzCr2B,EACG,MAAOj6B,KAAMo0D,EAAgB,UAAEtnB,EAAS,WAAE5C,GAAcqC,GAAmB,CACvEzyC,IAAK0sC,GAAShkC,aAAa+a,KAC3BivB,UAAW,CAACsT,KAAM,eAClBrT,2BAA4BlqC,MAGhC,OAAOuqC,EAAYrtB,IAAAU,cAACmN,EAAM,MAAO4c,EAEzBzqB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEsiC,GACbzqB,IAAAU,cAACwR,EAAY,CAACE,QAAM,EAAC3C,QAAS4S,GAAU,OAI5CriB,IAAAU,cAACizC,GAAwC,CACrCZ,YAAaA,EACbhwD,aAAc4xD,EAAiB5xD,aAC/BqkB,OAAQA,EACRib,SAAUA,EACVwuB,wBAAyBA,GAEpC,ECxBQ+D,GAA0Cp6B,IAGhD,IAHiD,WACpDqS,EAAU,eAAEgoB,EAAiB,GAAE,OAAEztC,EAAM,+BACvC0tC,EAA8B,0BAAEC,GACnCv6B,EAEG,MAAOw6B,EAAsBC,GAA2B/lC,oBAAS,IAC1Dub,EAAYC,GAAiBxb,mBAAS,IAuE7C2J,qBArEA,WACI,IAAKm8B,EACD,OAGJ,IAAInqB,EAAW,KAQf,SAASqqB,EAAS1vD,GACdqlC,EAAW,KACXoqB,GAAwB,GACxBvqB,EAAcllC,EAClB,CAaA,IAAI8mC,EAAgB,CAAC,EACjBjyC,EAAM,GACV,GAAIwyC,EAAWmc,0BAA2B,CACtC,MAAOnc,WAAYsoB,GAAetoB,EAClC,IAAK,IAAIn0C,IAAQ,CACb,cAAe,YAAa,WAAY,WAAY,SACpD,eAEA4zC,EAAc5zC,GACVy8D,EAAYz8D,GAAQy8D,EAAYz8D,GAAMxF,GAAK,KAEnDmH,EAAM0sC,GAASE,kDAAkDnpB,IACrE,MACI,OAAQ+uB,EAAWA,WAAW7iC,MAC1B,IAAK,sBACD3P,EAAM0sC,GAASQ,sBAAsBzpB,KACrC,MACJ,IAAK,wBACDzjB,EAAM0sC,GAASM,wBAAwBvpB,KACvC,MACJ,IAAK,+CACDzjB,EAAM0sC,GAASI,6BAA6BrpB,KAC5C,MACJ,QACIzjB,EAAM,GAWlB,OAPAwwC,EAAWpmB,EACPpqB,EAAK,SAAU,CAAC,EAChB,CAACuyC,WAAY/2C,SAASuxB,MAAaklB,IArDvC,SAAyB/rC,GACrBsqC,EAAW,KAEXkqB,EAA0Bx0D,GAAM,EACpC,IAQA,SAAuBA,GACnB20D,EAAS,yDAAqC30D,EAAKiF,UACvD,IAEA,SAAiCuE,GAC7BmrD,EAAoB,MAAXnrD,EACH,8DACA,oGAA4DA,KAEtE,IAqCO,KACc,OAAb8gC,GAAoBA,EAASI,OAAO,CAEhD,GAC4B,CAAC+pB,IAE7B,IAAII,EAAwB,GAC5B,GAAmB,OAAfvoB,EACA,GAAIA,EAAWmc,0BAA2B,CACtC,MAAMiF,EAA4BxF,GAC9B5b,EAAWA,YACfuoB,EAAwB,GAAGnH,EAA0BhsD,QAAQgsD,EAA0Bv1D,MAC3F,MACI08D,EACIvM,GACIhc,EAAWA,WAAW7iC,MAItC,MAAMqrD,EAAU5qB,EAAWp2C,OAAS,EACpC,OACI2rB,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,SACVqQ,YAAao4B,EACP,GACA,qDAA2CD,KAAyBP,KAE1E33B,iBAAkBm4B,EAAU5qB,EAAa,GACzCza,QAAS8kC,GACRO,EAEMr1C,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC7BxR,IAAAU,cAACwR,EAAY,CACTrI,SAAO,EACP4F,QAASqlC,GAAgC,OAMjD90C,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CACTE,QAAM,EACNnI,SAAU+qC,EACVvlC,QAASqlC,GAAgC,UAG7C90C,IAAAU,cAACwR,EAAY,CACTjI,SAAU+qC,EACVtiC,QAAM,EACNjD,QAASA,IAAMwlC,GAAwB,IACtCD,EACK,4BACA,0BAMX,ECtHjBM,GAAoB,CAAC,QAAS,kCAGvBC,GAAep1C,IACxB,MAAM,KAAEjL,GAASirB,qBAAWjf,IACpBhuB,GAAImhE,GAAkBn/C,GAGvBs6C,EAAmBgG,GAAwBtmC,mBAAS,OACpDumC,EAAyBC,GAA8BxmC,mBAAS,OAGnEymC,EACAC,GACA1mC,mBAhBkC,IAkBlC2mC,EACAC,GACA5mC,mBAnBwC,IAqCxC6mC,EACAC,GACA9mC,mBAAS,OAETy/B,EACAsH,GACA/mC,mBAAS,OAETgnC,EACAC,GACAjnC,mBAAS,MAEb,SAASknC,IACLJ,EAA2B,KAC/B,CAEA,SAASK,IACLJ,EAAyB,KAC7B,CAEA,SAASK,EAAkBzpB,GACO,OAA1B8hB,GACA0H,IAEJL,EAA2BnpB,EAC/B,CAEA,SAAS0pB,EAAgB1pB,GACW,OAA5BkpB,GACAK,IAEJH,EAAyBppB,GACzBspB,EAA6BtpB,EACjC,CAEA,MAAO2pB,EAAkBC,GAAuBvnC,mBAAS,MAOzD,SAASwnC,EAA0Bn2D,GAE/Bk2D,EAAoB,MAEpBR,EAAyBC,EAC7B,CAeA,MAAOS,EAAmBC,GAAwB1nC,mBAAS,MAO3D,SAAS2nC,EAA4Bt2D,GAEjCq2D,EAAqB,MAErBX,EAAyBC,EAC7B,CAeA,MAAO77D,EAAKy8D,GAA6B3kB,mBACrC,KACI,IAAI4kB,EAAO,GACPC,EAA6B,CAAC,EAClC,GAAgC,OAA5BjB,GAA8D,OAA1BpH,EAAgC,CACpE,MAAMsI,EAAkD,OAA5BlB,EACtBmB,EAAmBnB,GACrBpH,EACJ,GAAIuI,EAAiBlO,0BAA2B,CAC5C+N,EAAOhwB,GAASkwB,EACV,2DACA,qDACJn5C,KACF,MAAM,UACF1K,EAAY,KAAI,SAChBD,EAAW,KAAI,SACf9F,EAAW,KAAI,YACfkD,EAAc,KAAI,OAClBsD,EAAS,MACTqjD,EAAiBrqB,WACrBmqB,EAA6B,CACzB5jD,UAAyB,OAAdA,EAAqBA,EAAUlgB,GAAK,KAC/CigB,SAAuB,OAAbA,EAAoBA,EAASjgB,GAAK,KAC5Cma,SAAuB,OAAbA,EAAoBA,EAASna,GAAK,KAC5Cqd,YAA6B,OAAhBA,EAAuBA,EAAYrd,GAAK,KACrD2gB,OAAmB,OAAXA,EAAkBA,EAAO3gB,GAAK,KAE9C,MACI6jE,EAA4C,wBAArCG,EAAiBrqB,WAAW7iC,KAC7B+8B,GAASkwB,EACL,+BACA,yBACJn5C,KACqC,0BAArCo5C,EAAiBrqB,WAAW7iC,KACxB+8B,GAASkwB,EACL,iCACA,2BACJn5C,KACAipB,GAASkwB,EACL,sCACA,gCACJn5C,KAETm5C,IACDD,EAAiC,KAAI,cAE7C,CACA,MAAO,CAACD,EAAMC,EAA2B,GAE7C,CAACjB,EAAyBpH,IAGxBwI,EAAoChlB,mBACtC,MAAQkO,KAAM,kBAAmBzT,WAAYynB,KAC7C,CAACA,IAGL,SAAS+C,EAA6B72D,GAElCi1D,EAAqB,MACrBE,EAA2B,KAC/B,CAeA,IAAI2B,EAA0B,KAa9B,OAZyB,OAArBb,EACAa,EAA0Bb,EAAiBxN,0BACrC0L,GACA5B,GAEN,CAAC,iBAAkB,uBAAuBh+D,SAAS06D,KAEnD6H,EAAgD,wBAAtB7H,EACpBkF,GACA5B,IAIN9yC,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC2oC,GAAc,CACXC,oBAAqB6N,EACrBnO,2BAA2B,EAC3B5b,UAAWuoB,EACXzkB,aAAc4a,GACd1a,gBAAiBkkB,GACjBvgD,MAAM,gBACN1a,IAAK0sC,GAASU,yCAAyC3pB,KACvD2rC,aAAa,EACbC,WAAYA,IAAM8L,EAAqB,kBACvCvK,6BAA8BqL,EAC9BpL,2BAA4BqL,IAChCv2C,IAAAU,cAAC2oC,GAAc,CACXC,oBAAqB6N,EACrBnO,2BAA2B,EAC3B5b,UAAWyoB,EACX3kB,aAAc4a,GACd1a,gBAAiBkkB,GACjBvgD,MAAM,yBACN1a,IAAK0sC,GAASE,kDAAkDnpB,KAChE2rC,aAAa,EACbC,WAAYA,IAAM8L,EAAqB,uBACvCvK,6BAA8BqL,EAC9BpL,2BAA4BqL,IACH,OAA5BR,GACG/1C,IAAAU,cAAC+rC,GAAkB,CACfnD,oBAAqBwN,EACrB75B,YAAa6rB,GACTiN,GAAyB,GAE7B/M,0BAA2B+M,EAAwB/M,0BACnD3I,KAAK,cACLjP,gBAAiB,CACb,cAAe,kBAAc,kBAC7B,sCAEJ/2C,IAAKA,EACL+sB,OAAQ,KACR4I,QAASomC,IAEU,OAA1BzH,GACG3uC,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,sBACVqQ,YAAa6rB,GACT6F,GAAuB,GAC3B3+B,QAASqmC,GACTr2C,IAAAU,cAACguC,GAAe,CACZC,sBAAuBA,EACvBrF,oBAAqBwN,EACrB9N,0BAA2B2F,EAAsB3F,0BACjD3uD,IAAKA,EACL21B,QAASqmC,EACTtI,sBAnMpB,SAAmC/E,EAA2Bnc,GAC1DwpB,IACAI,EAAoB,CAACzN,4BAA2Bnc,cACpD,EAiMoBmhB,uBAzKpB,SAAoChF,EAA2Bnc,GAC3DwpB,IACAO,EAAqB,CAAC5N,4BAA2Bnc,cACrD,KAyK+B,OAAtB8pB,GACG32C,IAAAU,cAACk0C,GAAuC,CACpC/nB,WAAY8pB,EACZ9B,eAAgB,qBAAgB8B,EAAkB9pB,WAAWD,WAAW3pC,YAAY0zD,EAAkB9pB,WAAWD,WAAWzpC,UAC5HikB,QAASuvC,EAAkB9pB,WAAWD,YAAc,CAAC,GAAG15C,GACxD4hE,+BAAgC+B,EAChC9B,0BAtKhB,SAA4Cx0D,IAGnCo2D,EAAkB9pB,WAAWD,YAAc,CAAC,GAAG15C,KAAOmhE,IACnDsC,EAAkB3N,0BAClB8M,GAA2CwB,GAAUA,EAAS,IAE9D1B,GAAsC0B,GAAUA,EAAS,KAGjET,GACJ,IA6J8B,OAArBL,GACGx2C,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,sBACVoD,QAAS0mC,GACT12C,IAAAU,cAACgM,EAAI,KAAC,iCACN1M,IAAAU,cAACsvC,GAAU,CACP96C,KAAMshD,EAAiB3pB,WAAWD,YAAc,CAAC,EACjDqjB,aAAa,IACjBjwC,IAAAU,cAAC22C,EAAuB,CACpBtE,YAAayD,EAAiB3pB,WAC9BzlB,QAASovC,EAAiB3pB,WAAWD,YAAc,CAAC,GAAG15C,GACvDmvC,SAAUq0B,EACV7F,wBA/MpB,SAA0CtwD,IAGjCi2D,EAAiB3pB,WAAWD,YAAc,CAAC,GAAG15C,KAAOmhE,IAClDmC,EAAiBxN,0BACjB8M,GAA2CwB,GAAUA,EAAS,IAE9D1B,GAAsC0B,GAAUA,EAAS,KAGjEZ,GACJ,KAuMS,CAAC,iBAAkB,uBAAuB5hE,SAAS06D,KAChB,OAA5BiG,EAEIz1C,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,SACVoD,QAASonC,GACTp3C,IAAAU,cAAC6uC,GAAc,CACXC,kBAAmBA,EACnBntB,SAAU+0B,EACVtH,WAAY4F,KAIpB11C,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,sBACVoD,QAASonC,GACTp3C,IAAAU,cAACgM,EAAI,KAAC,iCACN1M,IAAAU,cAACsvC,GAAU,CACP96C,KAAMugD,EACNxF,aAAa,IACjBjwC,IAAAU,cAAC22C,EAAuB,CACpBjwC,OAAQquC,EAAwBviE,GAChCmvC,SAAU+0B,EACVvG,wBAlI5B,SAA6CtwD,GAGrCk1D,EAAwBviE,KAAOmhE,IACL,wBAAtB7E,EACAsG,GAA2CwB,GAAUA,EAAS,IAE9D1B,GAAsC0B,GAAUA,EAAS,KAGjEF,GACJ,MA4HO,EC9UX,MAAMG,WAA0BjhB,GAAcp2B,cAAA,SAAA9rB,WAAA,KAe1CojE,uBAA0Bj3D,IACtB8f,KAAKC,UAASC,IAAS,CACnBk3C,cAAc,EACdjqB,WAAYxxC,OAAOwE,OAAO,CAAC,EAAG+f,EAAUitB,WAAY,CAAC/2B,aAAclW,OACpE,EACN,KAEDm3D,0BAA4B,CAACn3D,EAAMkrC,KAC/BprB,KAAKC,UAASC,IACV,IAAIna,EAMJ,OAJIA,EADAqlC,EACkB,IAAIlrB,EAAUitB,WAAWpnC,gBAAiB7F,GAE1CggB,EAAUitB,WAAWpnC,gBAAgB5T,KAAIoD,GAAKA,EAAE1C,KAAOqN,EAAKrN,GAAKqN,EAAO3K,IAEvF,CACH+hE,uBAAuB,EACvBC,sBAAuB,KACvBpqB,WAAYxxC,OAAOwE,OAAO,CAAC,EAAG+f,EAAUitB,WAAY,CAACpnC,gBAAiBA,IACzE,GACH,CACL,CAhCD6wC,mBAAmB12C,GACf6f,MAAM62B,mBAAmB12C,GAEzB,IAAIitC,EAAa/wB,YAAoBlc,GAAMitC,WAC3CA,EAAW/2B,aAAenW,YAAqBktC,EAAW/2B,cAC1D4J,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBlJ,WAAYA,GAEpB,CA2BAqJ,mBAAmB12B,GACf,MAAO,CACHs3C,cAAc,EACdE,uBAAuB,EACvBnqB,WAAY,CAAC,EACboqB,sBAAuB,KAE/B,CAEAngB,cACI,MAAO,cACX,CAEAF,cAAc/xC,GACV,MAAO,uDAAwCA,GACnD,CAEAgyC,6BAA6BztC,GACzB,MAAO,8FAA0EA,IACrF,CAIAguC,eACI,OACI/3B,IAAAU,cAACoQ,EAAW,CAACE,uBAAqB,GAC9BhR,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,2BAGjD,CAEAqrB,gBAEI,OADAvjD,SAASqgB,MAAQ,6CAEbiL,IAAAU,cAAAV,IAAAyc,SAAA,KACKpc,KAAKw3C,0BACLx3C,KAAKy3C,qBACLz3C,KAAK03C,wBACL13C,KAAKG,MAAMi3C,cACRz3C,IAAAU,cAACmlC,GAAgB,CACbtlD,KAAM8f,KAAKG,MAAMgtB,WAAW/2B,aAC5B0vC,sBAAuBA,IAAM9lC,KAAKC,SAAS,CAACm3C,cAAc,IAC1DvR,iBAAkB7lC,KAAKm3C,yBAE9Bn3C,KAAKG,MAAMm3C,uBACR33C,IAAAU,cAAC0lC,GAAmB,CAChB7lD,KAAM8f,KAAKG,MAAMo3C,sBACjBhR,6BAA8BA,IAAMvmC,KAAKC,SACrC,CAACq3C,uBAAuB,EAAOC,sBAAuB,OAE1DpR,oBAAqBnmC,KAAKq3C,4BAI9C,CAEAG,0BACI,MAAMrqB,EAAantB,KAAKG,MAAMgtB,WAC9B,OACIxtB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,+CAC1BjN,IAAAU,cAACyQ,EAAU,CAACS,SAAO,GACf5R,IAAAU,cAAA,KAAGlhB,KAAK,UAAUotB,UAAU,kDAAiD,sBAGrF5M,IAAAU,cAACyN,EAAG,CAACU,YAAY,aAAajC,UAAU,cACpC5M,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,wBAClBqtB,IAAAU,cAACgM,EAAI,KAAE8gB,EAAWtqC,KAAK,IAAEsqC,EAAWpqC,WAExC4c,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,gBAClBqtB,IAAAU,cAACgM,EAAI,KAAE8gB,EAAW1+B,SAKtC,CAEAgpD,qBACI,IAAI/9D,EAAS9B,EAkBb,OAhBK+D,OAAOS,KAAK4jB,KAAKG,MAAMgtB,WAAW/2B,cAAcpiB,QAQjD0F,EAAUimB,IAAAU,cAAC25B,GAAY,CAAC5jC,aAAc4J,KAAKG,MAAMgtB,WAAW/2B,eAC5Dxe,EACI+nB,IAAAU,cAACwR,EAAY,CAACzC,QAASA,IAAMpP,KAAKC,SAAS,CAACm3C,cAAc,IAAQplC,MAAI,GAAC,0BAT3Et4B,EAAUimB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,wCACtBlQ,EACI+nB,IAAAU,cAACwR,EAAY,CAACzC,QAASA,IAAMpP,KAAKC,SAAS,CAACm3C,cAAc,IAAQtlC,KAAG,GAAC,wBAc1EnS,IAAAU,cAACyN,EAAG,CAACU,YAAY,gBAAgBjC,UAAU,cACvC5M,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACdv5B,GAEJ8B,EAGb,CAEAg+D,wBACI,MAAM3xD,EAAkBia,KAAKG,MAAMgtB,WAAWpnC,iBAAmB,GACjE,IAAIrM,EAAU,KAed,OAXIA,EAHCqM,EAAgB/R,OAIb2rB,IAAAU,cAACkyB,GAAW,CAACxB,gBAAiB,CAC1B,uBACA,iBACA,eACA,gBAEChrC,EAAgB5T,KAAIoD,GAAKyqB,KAAK23C,sBAAsBpiE,MATnDoqB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,4CActB6X,IAAAU,cAACyN,EAAG,CAACU,YAAY,oBAAoBjC,UAAU,cAC3C5M,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACzC,QAASA,IAAMpP,KAAKC,SAAS,CAACq3C,uBAAuB,IAAQxlC,KAAG,GAAC,iCAElFp4B,EAGb,CAEAi+D,sBAAsBpiD,GAClB,MAAM,MACF9G,EAAK,GACL5b,EAAE,KACFgQ,EAAI,SACJE,EAAQ,cACRiX,GACAzE,EAEJ,OACIoK,IAAAU,cAACkwB,KAAY,CAAC90C,IAAK5I,GACf8sB,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAACgM,EAAI,KAAExpB,EAAK,IAAEE,IAElB4c,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAACgM,EAAI,KAAErS,GAAiB,MAE5B2F,IAAAU,cAACmwB,KAAa,CAACjkB,UAAU,2BACrB5M,IAAAU,cAACgM,EAAI,KAAE5d,IAEXkR,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAACwR,EAAY,CACTrI,SAAO,EACP4F,QAASA,IAAMpP,KAAKC,SAAS,CAACq3C,uBAAuB,EAAMC,sBAAuBhiD,KAAS,SACrFoK,IAAAU,cAAA,QAAMkM,UAAU,WAAU,IAAE1pB,EAAK,IAAEE,KAK7D,ECpNJ,MAAM60D,GAAiB93C,IAEnB,MAAM/mB,EAAW+mB,EAAM/mB,SACjBuoC,EAAcxhB,EAAMwhB,aAAe,qBACzC,OACI3hB,IAAAU,cAACoc,GAAY,CACTC,eAAe,qBACfnQ,UAAU,wBACVoD,QAAS52B,GAET4mB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACghB,GAAO,CACJv5B,MAAOgY,EAAMhY,MACbjV,GAAG,qBACHyuC,YAAaA,EACbC,aAAczhB,EAAMyhB,aACpB9T,KAAM3N,EAAM+3C,aAEX/3C,EAAMg4C,gBAEVh4C,EAAMi4C,YACHp4C,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACzC,QAASr2B,EAAUywB,SAAO,GAAE1J,EAAMk4C,cAAgB,QAIjE,ECnBvB,MAAMC,WAAcr4C,YAEhBC,YAAYC,GACRC,MAAMD,GA2CV,KAEAtmB,yBAA2B,KACvBwmB,KAAKwqB,SAAW1kB,EACZ,YACA9F,KAAK42B,mBACL52B,KAAK62B,iBACL72B,KAAK82B,2BACR,EACJ,KAEDF,mBAAsB12C,IAClB8f,KAAKwqB,SAAW,KAChBxqB,KAAK4Y,QAAQ1X,QAAQhhB,EAAK,EAC7B,KAED22C,iBAAoB32C,IAChB8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CAACi4C,6BAA6B,GAAM,EACrD,KAEDphB,2BAA8BptC,IAC1BsW,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CAACi4C,6BAA6B,GAAM,EACrD,KAEDC,8BAAgC,KAC5Bn4C,KAAKC,SAAS,CAACi4C,6BAA6B,GAAO,EACtD,KAEDE,yBAA2B,KACvBp4C,KAAKC,SAAS,CAACi4C,6BAA6B,GAAO,EACtD,KAEDG,4BAA8B,KAE1Bj/D,OAAO6F,SAASq5D,QAAQ,EAC3B,KAEDC,8BAAgC,KAC5Bv4C,KAAKC,SACD,CAACu4C,sBAAsB,IACvB,KACI1/D,YAAazF,KAEb+F,OAAO6F,SAASq5D,QAAQ,GAE/B,EAGL,KAEAG,sBAAwB,KACpB,MAAMC,EAAc14C,KAAK24C,qBACzB34C,KAAKC,SACD,CAACy4C,gBACD,IAAM14C,KAAK44C,oBACd,EACJ,KA8BDh4C,OAAS,KACLZ,KAAKC,SAAS,CAAC44C,YAAY,GAAM,EAnIjC74C,KAAKG,MAAQ,CACTu4C,YAAa,KACbR,6BAA6B,EAC7BY,gBAAgB,EAChBD,YAAY,EACZL,sBAAqB,GAGzBx4C,KAAKwqB,SAAW,KAChBxqB,KAAK+4C,kBAAoB,IAC7B,CAIA5/B,oBACQnZ,KAAK4Y,QAAQ9X,KAAKF,QAClBZ,KAAKy4C,uBAEb,CAEAnjC,mBAAmBC,EAAWrV,GACtBA,EAAUw4C,cAAgB14C,KAAKG,MAAMu4C,aAC9B14C,KAAKG,MAAMu4C,cAAgB14C,KAAK24C,uBACvCK,cAAch5C,KAAK+4C,mBACnB/4C,KAAK+4C,kBAAoB,KACzB/4C,KAAKy4C,wBAEb,CAEAj0B,uBAE0B,OAAlBxkB,KAAKwqB,UACLxqB,KAAKwqB,SAASI,QAIa,OAA3B5qB,KAAK+4C,oBACLC,cAAch5C,KAAK+4C,mBACnB/4C,KAAK+4C,kBAAoB,KAEjC,CA8DAJ,qBACI,MAAMM,EAAM,IAAIl0D,KACVm0D,EAAS,IAAIn0D,KACfk0D,EAAIE,iBAAkBF,EAAIG,cAAeH,EAAII,aAC7CJ,EAAIK,cAAeL,EAAIM,gBAAiBN,EAAIO,iBAChD,OAAOhkE,SAASwqB,KAAK4Y,QAAQ9X,KAAKF,QAAUlrB,KAAK+jE,MAAMP,EAAOQ,UAAY,IAC9E,CAEAd,mBAEI5/D,YAAc3F,IAAmB2sB,KAAKG,MAAMu4C,aAC5C14C,KAAK+4C,kBAAoB3/D,OAAOugE,aAC5B,KAAO35C,KAAKC,UAASC,IACjB,GAA8B,IAA1BA,EAAUw4C,YAKV,OAAIx4C,EAAUw4C,YAAc,IAAM,EACvB,CAACA,YAAa,EAAGI,gBAAgB,GAErC,CAACJ,YAAax4C,EAAUw4C,YAAc,GAP7CM,cAAch5C,KAAK+4C,mBACnB/4C,KAAK+4C,kBAAoB,KACzB/4C,KAAK4Y,QAAQxX,OAAOpB,KAAKY,OAM7B,GACF,GACF,IAER,CAMA1nB,yBAAyBN,GACrB,MAAMqgE,EAAM,IAAIl0D,KACVm0D,EAAS,IAAIn0D,KACfk0D,EAAIE,iBAAkBF,EAAIG,cAAeH,EAAII,aAC7CJ,EAAIK,cAAeL,EAAIM,gBAAiBN,EAAIO,iBAChDx5C,KAAK4Y,QAAQzX,aACTzrB,KAAK+jE,MAAMP,EAAOQ,UAAY,KAAQ,MACtC,KACI,MAAMhB,EAAc14C,KAAK24C,qBACzB3/D,YACI3F,IAAmBqlE,EAAa9/D,GACpConB,KAAKC,SAAS,CAACy4C,eAAa,GAGxC,CAEAp/D,0BACI0mB,KAAKC,SAAS,CAACu4C,sBAAsB,GACzC,CAIAp4C,SACI,MAAMs4C,EAAc14C,KAAKG,MAAMu4C,YAC/B,IAAKA,GAAeA,EAAc,EAC9B,OAAI14C,KAAKG,MAAM24C,eACJ94C,KAAK45C,qBAET55C,KAAKG,MAAMq4C,qBAAuBx4C,KAAK65C,2BAA6B,KAG/E,MAAM74D,KAAS03D,EAAc,IACvBoB,EAAehkE,YAAoBkL,GACnC+4D,EAAejkE,YAAoB4iE,EAAoB,GAAN13D,GACvD,OACI2e,IAAAU,cAAA,OAAKkM,UAAU,gBAAgBkB,KAAK,SAChC9N,IAAAU,cAACgM,EAAI,CAACx5B,GAAG,0BAA0B,GAAGinE,KAAgBC,KACtDp6C,IAAAU,cAAC8O,IAAM,CACH,aAAY,sCAA4B2qC,WAAsBC,0CAC9DxtC,UAAU,8BACV6C,QAASpP,KAAKxmB,yBACdkb,MAAM,+BACN6a,YAAU,GACV5P,IAAAU,cAAA,QAAMkM,UAAU,WAAU,gCAC1B5M,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAK,iBAEjCzP,KAAKG,MAAM+3C,6BAA+Bl4C,KAAKg6C,kCAC/Ch6C,KAAKG,MAAMq4C,sBAAwBx4C,KAAK65C,2BACvCnB,EAAc,KAAQ14C,KAAKi6C,2BAA2BH,EAAcC,GAGlF,CAEAC,kCACI,OAAOr6C,IAAAU,cAACu3C,GAAa,CACV7+D,SAAUinB,KAAKm4C,8BACfrwD,OAAK,EACLy5B,aAAa,gEACbD,YAAY,gBACZy2B,YAAU,GACzB,CAEAkC,2BAA2Bj5D,EAAKk5D,GAC5B,OAAOv6C,IAAAU,cAACu3C,GAAa,CACT7+D,SAAUinB,KAAKxmB,yBACf+nC,aAAc,sCAA4BvgC,WAAak5D,YACvD54B,YAAY,gBACZu2B,YAAY,QACZE,YAAU,EACVC,aAAa,iCAC7B,CAEA4B,qBACI,OAAI55C,KAAKG,MAAM04C,WACJl5C,IAAAU,cAACu3C,GAAa,CACT7+D,SAAUinB,KAAKq4C,4BACfP,eAAe,mHACfv2B,aAAa,0CACbw2B,YAAY,IAErBp4C,IAAAU,cAACu3C,GAAa,CACT7+D,SAAUinB,KAAKq4C,4BACf92B,aAAa,6CAC7B,CAEAs4B,2BACI,OAAOl6C,IAAAU,cAACu3C,GAAa,CACT7+D,SAAUinB,KAAKu4C,8BACfh3B,aAAa,mEACbw2B,YAAY,GAC5B,EAIJE,GAAMnR,YAAcjmC,EC3Ob,MAAMs5C,GAAyBhgC,IAAyB,IACvDzgC,GAD+B,eAAE0gE,GAAgBjgC,EAuBrD,OApBIzgC,EADA0gE,EAAepmE,OAEX2rB,IAAAU,cAACkyB,GAAW,CAACxB,gBAAiB,CAC1B,uBACA,iBACA,iBAECqpB,EAAejoE,KAAIkoE,GAChB16C,IAAAU,cAACkwB,KAAY,CAAC90C,IAAK4+D,EAAGxnE,IAClB8sB,IAAAU,cAACmwB,KAAa,KAAE6pB,EAAGx3D,KAAK,IAAEw3D,EAAGt3D,UAC7B4c,IAAAU,cAACmwB,KAAa,KAAE6pB,EAAGrgD,eACnB2F,IAAAU,cAACmwB,KAAa,CAACjkB,UAAU,2BACpB8tC,EAAG5rD,WAOdkR,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,4CAGtB6X,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,qBACzBlzB,EACO,EClBP4gE,GAAengC,IAAiC,IAAhC,KAAEtlB,EAAI,iBAAE0lD,GAAkBpgC,EACnD,MAAO6S,EAAWC,GAAgBpe,oBAAS,IACpC2rC,EAAgBC,GAAqB5rC,mBAASha,EAAK6C,mBACnDgjD,EAAwBC,GAA6B9rC,mBACxDha,EAAK6C,mBAEH,YAAEqJ,EAAW,iBAAEM,GAAqBye,qBAAWjf,GAQrD,MAAQhuB,GAAIggE,GAAQxjB,eACd,WAAEjF,EAAU,OAAEziC,EAAM,YAAEsnC,GAAgBJ,GAAmB,CAC3D70C,IAAK0sC,GAAS5f,aAAaP,OAAOssC,GAClCnmB,UAAWtwB,YACP,CAAC1E,iBAAkB8iD,GAAiB,CAACh/C,UAAU,IACnD+I,gBAXJ,SAA4BrkB,GACxB+sC,GAAa,GACb0tB,EAA0BH,GAC1BD,EAAiBn+C,YAAoBlc,GAAMitC,WAC/C,EAQIH,YACAC,eACAJ,gBAAiB,6DACjBC,YAAaA,IAAMzrB,EAAiB,mBAGlCu5C,EAAwBjzD,EAAO+P,kBAAoB,GACnDmjD,EAA4B95C,EAAYmC,cAC9C,OACIvD,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,mBAC1BjN,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QACjBuoE,EAEOl7C,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACiiC,KAAQ,CACLpB,QAASsZ,EACT5wC,SAAUojB,EACV16C,MAAM,4BACN8jC,SAAW8G,GAAOu9B,EAAkBv9B,EAAGiI,OAAO+b,WAEjD0Z,EAAsB5mE,OAAS,GAAK4mE,EAAsBzoE,KACvD,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,GAAIlC,MAKvC+sB,IAAAU,cAACgM,EAAI,KAAC,UACMquC,EAAyB,cAAgB,YAKjE/6C,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,2BAClBqtB,IAAAU,cAACgM,EAAI,KAAExX,EAAK2B,uBAAyB,SAG5CqkD,GACGl7C,IAAAU,cAAAV,IAAAyc,SAAA,KACKo+B,IAAmBE,GAChB/6C,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,kEACX/M,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,kEAGnB/M,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CACTjI,SAAUojB,EACVxjB,SAAO,EACP4F,QAASA,IAAM6d,GAAa,IAC3BgC,KAKD,OAAf7E,GAAuBzqB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEsiC,GAC7B,ECxFP0wB,GAA0B3gC,IAA0B,IACzDzgC,GADgC,gBAAE8U,GAAiB2rB,EAQvD,OANIx+B,OAAOS,KAAKoS,GAAiBxa,QAC7Bwa,EAAkBvO,YAAqBuO,GACvC9U,EAAUimB,IAAAU,cAAC25B,GAAY,CAAC5jC,aAAc5H,KAEtC9U,EAAUimB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,wCAGtB6X,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,4BACjB5M,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,iBACzBlzB,EACO,ECgBds0D,GAAc,CAChB+M,KAAM,EACNC,YAAa,GAEX/M,GAAuB,CACzB,EAAG,OACH,EAAG,eAIDgH,GAAoB,CAAC,QAAS,cAAe,kBAEnD,SAASgG,GAAmB/6D,GAExB,OAAOkc,YAAoBlc,EAC/B,CAGO,MAAMg7D,GAAQp7C,IACjB,MAAOq7C,EAAiBC,GAAsBvsC,mBAAS,OAC/Ch8B,GAAIggE,GAAQxjB,eACbkH,EAAkB8kB,GAAuBxsC,oBAAS,IAEnD,iBAAExN,GAAqBye,qBAAWjf,GAOxC,MAAM,KAAC3gB,EAAI,UAAE8sC,EAAS,WAAE5C,GAAcqC,GAAmB,CACrDzyC,IAAK0sC,GAAS5f,aAAaP,OAAOssC,GAClClmB,2BAA4BsuB,GAC5BruB,YAAauuB,EACbruB,YATJ,WACIuuB,GAAoB,GACpBh6C,EAAiB,sCACrB,IAQMxM,EAAgB,OAAT3U,EAAgB,CAAC,EAAIA,EAAKitC,YAEhCohB,EAAaC,GAAkB3/B,mBAASm/B,GAAY+M,MAO3DviC,qBALA,WACI,MACM8iC,EADS,IAAIjhE,gBAAgBylB,EAAM+tB,QAAQ5uC,SAASC,QACnCzE,IAAI,WAAa,OACxC+zD,EAAeR,GAAYsN,IAAYtN,GAAY+M,KACvD,GACyB,IAEzB,MAAOQ,EAAsBC,GAA2B3sC,oBAAS,IAE7D4sC,EACAC,GACA7sC,oBAAS,IAETymC,EACAC,GACA1mC,mBA/CkC,IAiDlC2mC,EACAC,GACA5mC,mBAlDwC,GA+D5C,MAAOsnC,EAAkBC,GAAuBvnC,mBAAS,MAOzD,SAAS8sC,IACLH,GAAwB,GACC,OAArBrF,GACAC,EAAoB,KAE5B,CAOA,SAASwF,IACLF,GAA6B,GACJ,OAArBvF,GACAC,EAAoB,KAE5B,CAEA,SAASyF,EAA4B37D,EAAM47D,GACnCA,GACAN,GAAwB,GACxBjG,GAAsC0B,GAAUA,EAAS,MAEzDyE,GAA6B,GAC7BjG,GAA2CwB,GAAUA,EAAS,KAEzC,OAArBd,GACAC,EAAoB,KAE5B,CAEA,SAAS2F,EAA0BpT,EAA2Bnc,GAC1D4pB,EAAoB5pB,GAChBmc,EACA+S,GAA6B,GAE7BF,GAAwB,EAEhC,CAEA,MAAOlF,EAAmBC,GAAwB1nC,mBAAS,MAE3D,SAASmtC,EAA2BrT,EAA2Bnc,GAC3D+pB,EAAqB,CACjB5N,4BACAnc,cAER,CAiBA,MACIyvB,EACAC,GACArtC,oBAAS,IAETstC,EACAC,GACAvtC,oBAAS,GAoBb,MAAMioC,EAAoChlB,mBACtC,MAAQkO,KAAM,iBAAkBzT,WAAYsmB,KAAO,CAACA,IAExD,OAAItc,EACO52B,IAAAU,cAACyiB,GAAgB,MAIxBnjB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACoQ,EAAW,CAACE,uBAAqB,GAC9BhR,IAAAU,cAAA,MAAIkM,UAAU,qBACV5M,IAAAU,cAACwQ,IAAI,CAAChnB,GAAIkc,EAAK9Q,MAAMwI,MAAM,qDAI/BkC,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,oBAExCygB,EACKrtB,IAAAU,cAACmN,EAAM,MACN4c,EACGzqB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEsiC,GAEXzqB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACsvC,GAAU,CAAC96C,KAAMA,KAEtB8K,IAAAU,cAACquC,KAAM,CACHC,eAAgBJ,EAChBK,WA1I5B,SAAyB1xB,GACrB,MAAMlgB,EAAQkgB,EAAG2xB,OAAO7xC,MACxBwxC,EAAexxC,GACf8C,EAAM+tB,QAAQ1vC,KACV,GAAG/E,OAAO6F,SAASzE,mBAAmByzD,GAAqBjxC,IAAUixC,GAAqB,KAClG,GAsI4BtuC,IAAAU,cAACyuC,KAAG,CAAC,aAAW,0DAAgDx8D,MAAM,0BACtEqtB,IAAAU,cAACyuC,KAAG,CAAC,aAAW,gDAA2Cx8D,MAAM,iBAEpEi8D,IAAgBP,GAAY+M,KAErBp7C,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACi6C,GAAY,CACTzlD,KAAMA,EACN0lD,iBA5IxC,SAA8Br6D,GAC1Bk7D,EAAmBl7D,EACvB,IA2IoCyf,IAAAU,cAACy6C,GAAuB,CACpBtsD,gBAAiBqG,EAAKuB,eAC1BuJ,IAAAU,cAAC85C,GAAsB,CACnBC,eAAgBvlD,EAAK9O,iBAAmB,MAGhD4Z,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC2oC,GAAc,CACXC,oBAAqB6N,EACrB3N,iBAlNF,EAmNER,2BAA2B,EAC3BO,mCAAmC,EACnCnc,UAAWuoB,EACXzkB,aAAc4c,GACd1c,gBAAiBkkB,GACjBvgD,MAAM,gBACN1a,IAAK0sC,GAASU,yCAAyC3pB,KACvD2rC,aAAa,EACbC,WAzJxC,WACIqS,GAA6B,GAC7BF,GAAwB,EAC5B,EAuJwClS,cA3ExC,WACI8S,GAAgC,GAChCF,GAA2B,EAC/B,EAyEwCxO,sBAAuBqO,EACvBpO,uBAAwBqO,IAC5Br8C,IAAAU,cAAC2oC,GAAc,CACXC,oBAAqB6N,EACrB3N,iBAhOI,EAiOJR,2BAA2B,EAC3B5b,UAAWyoB,EACX3kB,aAAc4c,GACd1c,gBAAiBkkB,GACjBvgD,MAAM,yBACN1a,IAAK0sC,GAASE,kDAAkDnpB,KAChE2rC,aAAa,EACbC,WA3JxC,WACImS,GAAwB,GACxBE,GAA6B,EACjC,EAyJwCpS,cApFxC,WACI4S,GAA2B,GAC3BE,GAAgC,EACpC,EAkFwC1O,sBAAuBqO,EACvBpO,uBAAwBqO,IAC3BT,GACG57C,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,sBACVoD,QAASgsC,GACTh8C,IAAAU,cAACoyC,GAAiC,CAC9BC,YAAayD,EACbpvC,OAAQ8rC,EACR7wB,SAAU25B,EACVnL,wBACKtwD,GAAS27D,EAA4B37D,GAAM,MAI3Du7D,GACG97C,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,sBACVoD,QAASisC,GACTj8C,IAAAU,cAACg0C,GAAsC,CACnC3B,YAAayD,EACbpvC,OAAQ8rC,EACR7wB,SAAU45B,EACVpL,wBACKtwD,GAAS27D,EAA4B37D,GAAM,MAKrC,OAAtBo2D,GACG32C,IAAAU,cAACk0C,GAAuC,CACpC/nB,WAAY8pB,EACZvvC,OAAQ8rC,EACR4B,+BAnJ5C,WACI8B,EAAqB,KACzB,EAkJ4C7B,0BAhJ5C,WACQ4B,EAAkB3N,0BAClB8M,GACIwB,GAAUA,EAAS,IAEvB1B,GACI0B,GAAUA,EAAS,IAE3BV,EAAqB,KACzB,IA0IqC0F,GACGt8C,IAAAU,cAAC+rC,GAAkB,CACfzD,2BAA2B,EAC3B3I,KAAK,cACLjP,gBAAiB,CAAC,cAAe,oBAAqB,kBAAmB,sCACzE/2C,IAAK0sC,GAASY,gDAAgD7pB,KAC9DsJ,OAAQ8rC,EACRljC,QA5H5C,WACIusC,GAA2B,EAC/B,IA6HqCC,GACGx8C,IAAAU,cAAC+rC,GAAkB,CACfzD,2BAA2B,EAC3B3I,KAAK,cACLjP,gBAAiB,CAAC,cAAe,gBAAiB,kBAAmB,sCACrE/2C,IAAK0sC,GAASW,yDAAyD5pB,KACvEsJ,OAAQ8rC,EACRljC,QAlI5C,WACIysC,GAAgC,EACpC,MAyIO,EC3ULC,GAAiC,CACnCh5D,YAAa,EACbH,eAAgB,GAChBS,eAAgB,EAChBH,gBAAiB,GACjByW,YAAa,GACbrU,MAAO,GACP02D,iBAAkB,GAClB5yD,OAAQ,GAGN6yD,GAA2B,CAC7BC,UAAW,GACX/oE,MAAO,GACP0T,IAAK,CAAC9U,MAAOP,IAAoB,GAAG,GAAIQ,MAAOR,IAAoB,GAAG,KAGpE2qE,GAAyB,CAC3B/nD,MAAO,GACPgoD,qBAAsB,CAClB/yD,KAAM,KACNC,KAAM,GACNC,GAAI,IAER8yD,wBAAyB,CACrBhzD,KAAM,KACNC,KAAM,GACNC,GAAI,IAERH,OAAQ,CAAC,aACTkzD,eAAgB,GAChBC,+BAAgC,GAChClvD,SAAU,KACVyG,YAAa,KACb0oD,QAAS,GACTC,kBAAmB,GACnBhqD,UAAW,IAGTiqD,GAAwB,CAC1B/sD,WAAY,GACZxB,MAAO,GACP7L,SAAU,GACVE,QAAS,GACT4G,OAAQ,CAACrX,MAAOW,IAAoB,GAAG,GAAIV,MAAOU,IAAoB,GAAG,KAIvEiqE,GAAmC,CACrCvzD,OAAQ,CAAC,aACTmzD,+BAAgC,GAChClvD,SAAU,KACVyG,YAAa,KACb0oD,QAAS,GACTC,kBAAmB,GACnBhqD,UAAW,GACXitC,KAAM,YAGJkd,GAAuC,CACzCpoD,UAAW,GACXC,aAAc,GACdC,YAAa,GACbrL,KAAM,CAACtX,MAAON,IAA6B,GAAG,GAAIO,MAAOP,IAA6B,GAAG,IACzForE,WAAY,GACZ9kE,KAAM,GACNka,YAAa,KACbQ,UAAW,KACXD,SAAU,KACV9F,SAAU,KACVkD,YAAa,KACbsD,OAAQ,MAGN4pD,GAA6C,CAC/CtoD,UAAW,GACXC,aAAc,GACdC,YAAa,GACb4nD,eAAgB,GAEhBS,sBAAuBnqE,IAA8BmN,QACjDjO,GAA2B,QAAjBA,EAAOC,QAAiB,GAEtCirE,mCACIlqE,IAAqCiN,QACjCjO,GAA2B,QAAjBA,EAAOC,QAAiB,GAC1CwqE,+BAAgC,GAChCU,yBAA0B,GAC1BC,6BAA8B,GAC9BC,wBAAyB,GACzBC,yBAA0B,GAC1BC,0BAA2B,GAC3BC,mBAAoB1rE,IAAqC,GACzD2rE,mBAAoB,GACpBnpD,MAAO,GACPopD,yCAA0C,KAC1CC,uCAAwC,KACxCC,sCAAuC,KACvCC,sCAAuC,KACvCC,yCAA0C,KAC1CC,oCAAqC,KACrCC,wCAAyC,GACzCC,gCAAiC,GACjCC,8BAA+B,GAC/BC,uBAAwB,GACxBC,qBAAsB,IA4DpBC,GAAyBj1D,IAC3B,IAAI7P,EAAU,EACd,IAAK,IAAKtB,EAAMhG,KAAUsJ,OAAOC,QAAQ4N,GACjC,CAAC,SAAU,UAAW,oBAAqB,aAAa/U,SAAS4D,GAE7DhG,EAAM2B,QACN2F,IAEG,CAAC,uBAAwB,2BAA2BlF,SAAS4D,GAChEsD,OAAO6nB,OAAOnxB,GAAOqsE,MAAKjmE,KAAOA,KACjCkB,IAEKtH,GACTsH,IAGR,OAAOA,CAAO,EAGZglE,GAAwBn1D,IAC1B,IAAI7P,EAAU,EACd,IAAK,IAAKtB,EAAMhG,KAAUsJ,OAAOC,QAAQ4N,GACxB,WAATnR,GAAqB2kE,GAAsB3kE,KAAUhG,GACrDsH,IAGR,OAAOA,CAAO,EAGZilE,GAAkCp1D,IACpC,IAAI7P,EAAU,EACd,IAAK,IAAKtB,EAAMhG,KAAUsJ,OAAOC,QAAQ4N,GACjCyzD,GAAiC5kE,KAAUhG,KAEvCypB,MAAMC,QAAQ1pB,IAAWypB,MAAMC,QAAQ1pB,IAAUA,EAAM2B,OAAS,IAEhE2F,IAKZ,OAAOA,CAAO,EAGZklE,GAAwBA,CAACr1D,EAASs1D,KACpC,IAAInlE,EAAU,EACd,IAAK,IAAKtB,EAAMhG,KAAUsJ,OAAOC,QAAQ4N,IACjC,CAAC,SAAU,WAAW/U,SAAS4D,IAASymE,EAAazmE,KAAUhG,IAC/DsH,IAGR,OAAOA,CAAO,EAGZolE,GAAsCv1D,IACxC,GAAgB,OAAZA,EAAoB,OAAO,EAC/B,IAAI7P,EAAU,EACd,IAAK,IAAKtB,EAAMhG,KAAUsJ,OAAOC,QAAQ4N,IACjC,CAAC,QAAU/U,SAAS4D,IAAS6kE,GAAqC7kE,KAAUhG,IAC5EsH,IAGR,OAAOA,CAAO,EAGZqlE,GAA4Cx1D,IAC9C,GAAgB,OAAZA,EAAoB,OAAO,EAC/B,IAAI7P,EAAU,EACd,IAAK,IAAKtB,EAAMhG,KAAUsJ,OAAOC,QAAQ4N,GACjC,CACA,+BACA,0BACA,4BACF/U,SAAS4D,KAIE,uCAATA,GAOA,CAAC,wBAAyB,sBAAsB5D,SAAS4D,IACrD+kE,GAA2C/kE,KAAUhG,IACzDsH,IAR4C,WAAxC6P,EAAQ6zD,sBAAsBhrE,OAE9BsH,KASZ,OAAOA,CAAO,EC1PlB,MAAMslE,WAAoBtmB,GAAuB94B,cAAA,SAAA9rB,WAAA,KAC7CmiD,WAAa,2EAAyD,KAuEtEpJ,YAAc,KACV9sB,KAAK4Y,QAAQvX,iBAAiB,sCAAsC,CACvE,CAvED8X,oBACI,IAAKnZ,KAAK4Y,QAAQ7X,YAAYgB,oCAM1B,OALA3oB,OAAO49C,SAAS,EAAG,QACnBh3B,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBE,kBAAmB,IAI3Bx2B,MAAMoZ,mBACV,CAIAgd,SAASr2B,GACLC,MAAMo2B,SAASr2B,GACfE,KAAKk5B,YAAc,cACnBl5B,KAAKo5B,WAAa,IAClBp5B,KAAKmjB,cAAgB,CACjB,CAAC,aAAc,uCACf,CAAC,QAAS,qBACV,CAAC,WAAY,cACb,CAAC,UAAW,eACZ,CAAC,SAAU,gBAEfnjB,KAAKkjB,aAAe,8BACpBljB,KAAK2iB,eAAiB,qBACtB3iB,KAAKq5B,sBAAwB1D,GAE7B31B,KAAKs5B,gBAAkBqlB,EAC3B,CAEAnoB,mBAAmB12B,GACf,MAAO,IACAC,MAAMy2B,mBAAmB12B,GAC5BmjB,aAAc,CAAC5wC,MAAO2tB,KAAKmjB,cAAc,GAAG,GAAI7wC,MAAO0tB,KAAKmjB,cAAc,GAAG,IAC7EqL,QAAS,CAAC,EACVhlC,QAASwzD,GAEjB,CAEA5lB,cACI,OAAO1Q,GAASzxB,MAAMwI,IAC1B,CAEA65B,eACI,IAAI4nB,EAAYn/C,MAAMu3B,eAGtB,IAAK,IAAKj/C,EAAMhG,KAAUsJ,OAAOC,QAAQokB,KAAKG,MAAM3W,SACnC,WAATnR,EACA6mE,EAAU7mE,GAAQhG,EAAMA,MACjBA,IAAU2qE,GAAsB3kE,KACvC6mE,EAAU7mE,GAAQhG,EAAMqG,QAIhC,OAAOwmE,CACX,CAEAhoB,cAAc/xC,GAEV,MAAO,+DADPA,EAAU4a,MAAMm3B,cAAc/xC,IAElC,CAECgyC,6BAA6BztC,GAC1B,MAAO,wHAA6EA,IACxF,CAQAguC,eACI,OACI/3B,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,8CAElC,CAEA6sB,sBACI,OACI95B,IAAAU,cAAAV,IAAAyc,SAAA,KACKrc,MAAM05B,sBACP95B,IAAAU,cAACyQ,EAAU,CAACS,SAAO,GACf5R,IAAAU,cAAA,KAAGlhB,KAAK,4BAA4BotB,UAAU,kDAAiD,mCAI/G,CAEAutB,qBACI,OAAOn6B,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAQ,qFACpC,CAEAosB,aACI,MAAMt4C,EAAQye,KAAKG,MAAM5e,MACzB,OACIoe,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACC,cAAY,EAACQ,IAAI,KAAKW,KAAK,UAAS,cAC1BlsB,EAAQye,KAAKo5B,WAAa,GAAK,cAAU73C,EAAM,IAAY,IAAVA,EAAc,mBAAgB,uBAAe,KAE9Goe,IAAAU,cAACkyB,GAAW,CAACxB,gBAAiB,CAC1B,eACA,uBACA,yCACApxB,IAAAU,cAAA,QAAMkM,UAAU,WAAU,WAEzBvM,KAAKG,MAAMquB,QAAQr8C,KAAIoD,GAAKyqB,KAAKm/C,iBAAiB5pE,MAInE,CAEA4pE,iBAAiBhyB,GACb,OACIxtB,IAAAU,cAACkwB,KAAY,CAAC90C,IAAK0xC,EAAWt6C,IAC1B8sB,IAAAU,cAACmwB,KAAa,KAAC7wB,IAAAU,cAACgM,EAAI,KAAE8gB,EAAW1+B,QACjCkR,IAAAU,cAACmwB,KAAa,KAAC7wB,IAAAU,cAACgM,EAAI,KAAE8gB,EAAWtqC,KAAK,IAAEsqC,EAAWpqC,WACnD4c,IAAAU,cAACmwB,KAAa,KACTrD,EAAWz1B,iBAAmBiI,IAAAU,cAACgM,EAAI,KAAC1M,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAK,SAAS53B,MAAO,CAAEwzB,MAAO9B,EAAOmB,iBAAmBhW,MAAM,gBAAgB,gBAAsBiL,IAAAU,cAACgM,EAAI,KAAC1M,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAK,eAAe53B,MAAO,CAAEwzB,MAAO9B,EAAOE,WAAa/U,MAAM,YAAY,YAC3QiL,IAAAU,cAACgM,EAAI,CAACE,UAAU,yBAAwB,OAAK4gB,EAAWl2B,gBAE5D0I,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAACsD,IAAK+D,IAAMhnB,GAAI,gBAAgBsjC,EAAWt6C,MAAM,wBAItF,EAGJosE,GAAYnY,YAAcjmC,EC5I1B,MAAMmtC,GAAc,CAChBoR,MAAO,EACPpE,YAAa,GAEX/M,GAAuB,CACzB,EAAG,QACH,EAAG,eAIMoR,GAASv/C,IAClB,MAAOyuC,EAAaC,GAAkB3/B,mBAASm/B,GAAYoR,OACrDngE,EAAW8gC,cAqBjB,OAnBAvH,qBAAU,KACNnkC,SAASqgB,MAAQ,+CAAqC,GACvD,IAEH8jB,qBAAU,KACN,MACM8iC,EADS,IAAIjhE,gBAAgB4E,EAASC,QACrBzE,IAAI,WAAa,QACxC+zD,EAAeR,GAAYsN,IAAYtN,GAAYoR,MAAM,GAC1D,CAACngE,EAASC,SAYTygB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACoQ,EAAW,CAACE,uBAAqB,GAC9BhR,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,qDAIzC5M,IAAAU,cAACquC,KAAM,CACHC,eAAgBJ,EAChBK,WAlBZ,SAAyB1xB,GACrBpd,EAAM+tB,QAAQ1vC,KACV,GAAGc,EAASzE,mBACRyzD,GAAqB/wB,EAAG2xB,OAAO7xC,QAC/BixC,GAAqB,KAGjC,GAYYtuC,IAAAU,cAACyuC,KAAG,CAAC,aAAW,+DAAkDx8D,MAAM,+BACxEqtB,IAAAU,cAACyuC,KAAG,CAAC,aAAW,iEAAkDx8D,MAAM,kCAE3Ei8D,IAAgBP,GAAYoR,OACzBz/C,IAAAU,cAAC4+C,GAAgBn/C,GAEpByuC,IAAgBP,GAAYgN,aAAer7C,IAAAU,cAAC60C,GAAW,MACzD,ECpDX,MAAMoK,WAA0B1/C,YAI5B2/C,cAAcC,GACV,YAAevrE,IAARurE,GAA6B,OAARA,GAA+B,IAAfA,EAAIxrE,QAAsC,IAAtBwrE,EAAI9mE,OAAO1E,MAC/E,CAEAyrE,oBAAoB7lE,GAChB,OAAOA,EAAM8lE,aAAa1rE,OAAS,GAAoB,WAAf4F,EAAM+P,IAClD,CAEAg2D,OAAOC,GACH,MAAqB,wBAAdA,GAAqD,sBAAdA,CAClD,CAIAx/C,SACI,MAAM,KAAEqN,GAASzN,KAAKF,MAEtB,OAAOH,IAAAU,cAAA,WAASkM,UAAU,sBAAsBkB,KAAMA,GAAOzN,KAAK43B,gBACtE,CAEAA,gBACI,MAAMl+C,EAAUsmB,KAAKF,MAAMpmB,QACrBG,EAASH,EAAQG,OACvB,KAAMA,GAAUA,EAAO7F,OAAS,GAAM,OAAO,KAC7C,IAAI6rE,EAAmB,EACvB,OAAOhmE,EAAO1H,KAAIyH,IACd,OAAQA,EAAM+P,MACV,IAAK,aAED,OADAk2D,EAAmB,EACZ7/C,KAAK8/C,iBAAiBlmE,GACjC,IAAK,oBAED,OADAimE,IACO7/C,KAAK+/C,sBAAsBnmE,EAAOimE,GAC7C,IAAK,sBAED,OADAA,EAAmB,EACZ7/C,KAAKggD,wBAAwBpmE,GACxC,QAEI,OADAimE,EAAmB,EACf7/C,KAAKy/C,oBAAoB7lE,GAClBomB,KAAKigD,aAAarmE,EAAOF,EAAQwmE,UAAUtmE,EAAM8lE,aAAa,GAAGjkE,MAErEukB,KAAKmgD,WAAWvmE,GAC/B,GAER,CAEAkmE,iBAAiBlmE,GACb,OACI+lB,IAAAU,cAACgN,IAAU,CAAC5xB,IAAK7B,EAAM6B,IAAKqxB,IAAI,IAAIP,UAAU,mCAC1C5M,IAAAU,cAACmP,IAAI,CAACC,KAAK,eAAe,cAAY,SACrCzP,KAAKogD,eAAexmE,GAGjC,CAEAmmE,sBAAsBnmE,EAAOojB,GACzB,OAAO2C,IAAAU,cAACgM,EAAI,CAAC5wB,IAAK7B,EAAM6B,IAAKqxB,IAAI,KAAKP,UAAU,2BAA2BvP,EAAM,KAAGgD,KAAKogD,eAAexmE,GAC5G,CAEAomE,wBAAwBpmE,GACpB,OAAO+lB,IAAAU,cAACgM,EAAI,CAAC5wB,IAAK7B,EAAM6B,IAAKqxB,IAAI,KAAKP,UAAU,2BAA0B,KAAGvM,KAAKogD,eAAexmE,GACrG,CAEAqmE,aAAarmE,EAAOymE,GAChB,OAAQA,EAAO12D,MACX,IAAK,OACD,OAAOqW,KAAKsgD,WAAW1mE,EAAOymE,EAAOngE,MACzC,IAAK,QACD,OAAO8f,KAAKugD,YAAY3mE,EAAOymE,EAAOngE,MAC1C,IAAK,gBACD,OAAO8f,KAAKwgD,YAAY5mE,EAAOymE,EAAOngE,MAC1C,QACI,OAAO,KAEnB,CAEAogE,WAAW1mE,EAAOsG,GACd,OAAOyf,IAAAU,cAAA,KAAG5kB,IAAK7B,EAAM6B,IAAK5I,GAAI,YAAc+G,EAAM6B,IAAK0D,KAAMe,EAAKlG,IAAKuyB,UAAU,YAAY4Y,OAAQjlC,EAAKugE,cAAgB,IAAKzgD,KAAKogD,eAAexmE,GACvJ,CAEA2mE,YAAY3mE,EAAOsG,GACf,OAAOyf,IAAAU,cAAA,OAAK5kB,IAAK7B,EAAM6B,IAAKkyB,IAAKztB,EAAKytB,IAAKE,IAAK3tB,EAAK2tB,KAAO,GAAIy1B,MAAOpjD,EAAKojD,MAAOllB,OAAQl+B,EAAKk+B,QACpG,CAEAoiC,YAAY5mE,EAAOsG,GACf,OAAOyf,IAAAU,cAAA,UAAQ5kB,IAAK7B,EAAM6B,IAAK6nD,MAAOpjD,EAAKojD,MAAOllB,OAAQl+B,EAAKk+B,OAAQzQ,IAAKztB,EAAKytB,IAAK+yC,YAAY,IAAIhsD,MAAO9a,EAAM6B,KACvH,CAEA0kE,WAAWvmE,GACP,OAAO+lB,IAAAU,cAAA,KAAG5kB,IAAK7B,EAAM6B,KAAMukB,KAAKogD,eAAexmE,GACnD,CAEAwmE,eAAexmE,GACX,IAAKA,EAAM+mE,kBAAkB3sE,OACzB,OAAOgsB,KAAK4gD,eAAehnE,EAAME,KAAMF,EAAM6B,KAEjD,MAAMklE,EAAoB/mE,EAAM+mE,kBAAkBxuE,KAAI0uE,GAAS,CAACA,EAAMC,OAAQD,EAAMC,OAASD,EAAM7sE,OAAQ6sE,EAAMhpE,MAAMwH,iBAEvH,IAAI0hE,EAAkB,GAClBjsE,EAAI,EACR,IAAK,IAAI2I,KAAQ7D,EAAME,KAAM,CACzB,IAAIknE,EAAa,IAAIC,IACrB,IAAK,IAAIC,KAAKP,EACN7rE,GAAKosE,EAAE,IAAMpsE,GAAKosE,EAAE,IACpBF,EAAWlvC,IAAIovC,EAAE,IAGzBH,EAAgB5iE,KAAK,CAACV,EAAM,IAAIujE,GAAY7jD,KAAK,MACjDroB,GACJ,CAEA,IAAIqsE,EAAc,GACdC,EAAe,GACfC,EAAgB,GACpB,IAAK,IAAK5jE,EAAM5F,KAAUkpE,EAClBlpE,IAAUupE,EACVD,GAAe1jE,GAEf4jE,EAAcljE,KAAK,CAACgjE,EAAaC,IACjCD,EAAc1jE,EACd2jE,EAAevpE,GAKvB,OAFAwpE,EAAcljE,KAAK,CAACgjE,EAAaC,IAE1BC,EAAclvE,KAAI,CAACmpE,EAASxmE,IACxBkrB,KAAKshD,cAAc1nE,EAAM6B,IAAM3G,EAAGwmE,IAEjD,CAEAsF,eAAe9mE,EAAMynE,GACjB,OAAOznE,CACX,CAEAwnE,cAAc7lE,EAAK6/D,GACf,OAAO37C,IAAAU,cAAA,QAAM5kB,IAAKA,EAAK5D,MAAOuzB,GAAOkwC,EAAQ,KAAMA,EAAQ,GAC/D,EAIJ,MAAMlwC,GAAS,CACXo2C,KAAM,CACF31C,WAAY,QAEhB41C,OAAQ,CACJvtB,UAAW,UAEfwtB,WAAY,CACRxtB,UAAW,SACXroB,WAAY,QAEhB81C,WAAY,CACRztB,UAAW,SACXroB,WAAY,SChJpB,MAAM+1C,WAAmB3rB,GAAcp2B,cAAA,SAAA9rB,WAAA,KAkDnC+4C,YAAc,KACV9sB,KAAKqB,kBAAkB,CAC1B,CAhDDu1B,mBAAmB12C,GAGf,GAFA6f,MAAM62B,mBAAmB12C,GAEZ,OAATA,EACA8f,KAAKC,SAAS,CAACo2B,gBAAgB,QAC5B,CACH,MAAMwrB,EAAUzlD,YACZlc,EACA,CACIub,iBAAkB,CAAC,SACnBe,eAAgB,CAAC,qBACjBC,mBAAoB,CAAC,uBAG7BuD,KAAKC,SAAS,CACVo2B,gBAAgB,EAChByrB,WAAYD,EACZE,UAAW/+D,YAAmB6+D,IAEtC,CACJ,CAIArrB,mBAAmB12B,GACf,MAAO,CACHgiD,WAAY,CACR3nD,MAAO,GACP7D,kBAAmB,IAEvByrD,UAAW,CAAC,EAEpB,CAEA3qB,cACI,OAAO1Q,GAASuB,aAAaxqB,IACjC,CAEAy5B,cAAc/xC,GACV,MAAO,mDAAoCA,GAC/C,CAEAgyC,6BAA6BztC,GACzB,MAAO,0FAAsEA,IACjF,CAMA2X,mBACIrB,KAAK4Y,QAAQvX,iBAAiB,kCAClC,CAIAq2B,eACI,OACI/3B,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACoQ,EAAW,KACR9Q,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,eAEzC5M,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,cAGtC,CAEAgrB,gBACI,GAAoC,KAAhC53B,KAAKG,MAAM2hD,WAAW3nD,MACtB,OAAOwF,IAAAU,cAACwR,EAAY,CAACC,KAAG,EAAC1C,QAASA,IAAMpP,KAAKF,MAAM+tB,QAAQ1vC,KAAK,yCAAyC,oBACtG,CACH,MAAM2jE,EAAa9hD,KAAKG,MAAM2hD,WAC9B,OACIniD,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACq0B,KAAS,CAACnoB,UAAU,SACjB5M,IAAAU,cAACs0B,KAAgB,KACbh1B,IAAAU,cAACu0B,KAAa,KACVj1B,IAAAU,cAACkwB,KAAY,KACT5wB,IAAAU,cAACy0B,KAAiB,KAAC,mBACnBn1B,IAAAU,cAACy0B,KAAiB,KAAC,mBACnBn1B,IAAAU,cAACy0B,KAAiB,QAG1Bn1B,IAAAU,cAAC00B,KAAa,KACVp1B,IAAAU,cAACkwB,KAAY,KACT5wB,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAACi/C,GAAiB,CAAC5lE,QAASooE,EAAW3nD,SAE3CwF,IAAAU,cAACmwB,KAAa,KAAC,SAAOsxB,EAAWxrD,mBACjCqJ,IAAAU,cAACmwB,KAAa,KAAC7wB,IAAAU,cAACwR,EAAY,CAACG,MAAI,EAACE,UAAQ,EAAC9C,QAASA,IAAMpP,KAAKF,MAAM+tB,QAAQ1vC,KAAK,2CAA2C,eAK7IwhB,IAAAU,cAACqhB,GAAc1hB,KAAKG,MAAM4hD,WAGtC,CACJ,EAGJH,GAAW9a,YAAcjmC,ECpHzB,MAAMmhD,GAAc,OAGpB,MAAMC,WAAwBhsB,GAAcp2B,cAAA,SAAA9rB,WAexC,KAEA6iD,mBAAsB12C,IAGlB,GAFA6f,MAAM62B,mBAAmB12C,GAEZ,OAATA,EACA8f,KAAKC,SAAS,CAACo2B,gBAAgB,QAC5B,CAEH,MAAMz6B,EAAmBQ,YACrBlc,EACA,CACIub,iBAAkB,CAAC,SACnBe,eAAgB,CAAC,qBACjBC,mBAAoB,CAAC,uBAGzBjnB,SAAS4C,YAAe4pE,OAAkB,IAAIj9D,KAAK6W,EAAiBtF,mBAAmBojD,UACvF15C,KAAKC,SAAS,CAACo2B,gBAAgB,IAE/Br2B,KAAKC,SAAS,CACVo2B,gBAAgB,EAChB6rB,aAAa,EACbJ,WAAYlmD,GAGxB,GACH,KAEDi7B,iBAAoB32C,IAEhB8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CAACo2B,gBAAgB,GAAO,EACzC,KAEDS,2BAA8BptC,IAC1BsW,KAAK62B,iBAAiB,KAAK,EAC9B,KAEDsrB,sBAAyBC,IACrB/tE,SAASiE,OAAS,GAAG0pE,MAAe,IAAIj9D,KAAKib,KAAKG,MAAM2hD,WAAWxrD,mBAAmBojD,mBACtF15C,KAAKC,SAAS,CAACiiD,aAAa,GAAO,CACtC,CArDD1rB,mBAAmB12B,GACf,MAAO,CACHoiD,aAAa,EACbJ,WAAY,CAAC,EAErB,CAEA1qB,cACI,MAAO,cACX,CAgDAh3B,SACI,OAAIJ,KAAKG,MAAMk2B,iBAAmBr2B,KAAKG,MAAM+hD,YAAsB,KAE/DviD,IAAAU,cAACyQ,EAAU,CAACY,QAAM,EAACvD,WAAS,EAAC5B,UAAU,sBACnC5M,IAAAU,cAACi/C,GAAiB,CAAC5lE,QAASsmB,KAAKG,MAAM2hD,WAAW3nD,QAClDwF,IAAAU,cAACwR,EAAY,CACTzC,QAASpP,KAAKmiD,sBACd34C,SAAO,GAEP7J,IAAAU,cAAA,QAAMkM,UAAU,WAAU,sFAAkE,UAAO5M,IAAAU,cAAA,QAAMkM,UAAU,WAAU,aAI7I,EChFJ,MAAM81C,WAAmB/C,GAGrBl/C,SACI,OAAOJ,KAAK43B,eAChB,CAEAkoB,iBAAiBlmE,GACb,OAAO+lB,IAAAU,cAACgM,KAAI,CAAC5wB,IAAK7B,EAAM6B,IAAK5D,MAAOuzB,GAAOk3C,YAAY,IAAEtiD,KAAKogD,eAAexmE,GAAO,IACxF,CAEAmmE,sBAAsBnmE,EAAOojB,GACzB,OAAO2C,IAAAU,cAACgM,KAAI,CAAC5wB,IAAK7B,EAAM6B,IAAK5D,MAAOuzB,GAAOm3C,UAAWvlD,EAAM,KAAGgD,KAAKogD,eAAexmE,GACvF,CAEAomE,wBAAwBpmE,GACpB,OAAO+lB,IAAAU,cAACgM,KAAI,CAAC5wB,IAAK7B,EAAM6B,IAAK5D,MAAOuzB,GAAOm3C,UAAU,KAAGviD,KAAKogD,eAAexmE,GAChF,CAEA0mE,WAAW1mE,EAAOsG,GACd,OAAOyf,IAAAU,cAACgM,KAAI,CAAC5wB,IAAK7B,EAAM6B,IAAK5D,MAAOuzB,GAAO+T,MAAOj/B,EAAKlG,IAC3D,CAEAumE,YAAY3mE,EAAOsG,GACf,OACIyf,IAAAU,cAACmiD,KAAK,CAAC/mE,IAAK7B,EAAM6B,IAAKkyB,IAAKztB,EAAKytB,IAAK91B,MAAOuzB,GAAOq3C,OACvD,CAELjC,YAAY5mE,EAAOsG,GACf,OAAOyf,IAAAU,cAACgM,KAAI,CAAC5wB,IAAK7B,EAAM6B,IAAK5D,MAAOuzB,GAAOs3C,UAAU,oCAAyB/iD,IAAAU,cAACgM,KAAI,CAACx0B,MAAOuzB,GAAO+T,MAAOj/B,EAAKytB,KAClH,CAEAwyC,WAAWvmE,GACP,OAAO+lB,IAAAU,cAACgzB,KAAI,CAAC53C,IAAK7B,EAAM6B,KAAMukB,KAAKogD,eAAexmE,GACtD,CAEAgnE,eAAe9mE,EAAMynE,GACjB,OAAO5jE,YAAgB7D,GAAM3H,KAAI,CAAC2L,EAAMhJ,IAAM6qB,IAAAU,cAACgM,KAAI,CAAC5wB,IAAK8lE,EAAWzsE,GAAIgJ,IAC5E,CAEAwjE,cAAc7lE,EAAK6/D,GACf,OAAO37C,IAAAU,cAACgM,KAAI,CAAC5wB,IAAKA,EAAK5D,MAAOuzB,GAAOkwC,EAAQ,KAAMA,EAAQ,GAC/D,EAIJ,MAAMlwC,GAASooB,KAAWC,OAAO,CAC7B+tB,KAAM,CACF31C,WAAY,QAEhB41C,OAAQ,CACJvtB,UAAW,UAEfwtB,WAAY,CACRxtB,UAAW,SACXroB,WAAY,QAEhB81C,WAAY,CACRztB,UAAW,SACXroB,WAAY,QAEhBy2C,WAAY,CACRpuB,UAAW,SACXyuB,YAAa,GACbC,eAAgB,IAEpBH,MAAO,CACHliC,QAAS,QACT8iB,SAAU,WACVuf,eAAgB,GAChB/uB,iBAAkB,OAClByP,MAAO,KAEXof,SAAU,CACNE,eAAgB,GAChB1uB,UAAW,SACXroB,WAAY,QAEhBsT,KAAM,CACF+U,UAAW,SACXroB,WAAY,OACZg3C,eAAgB,aAEpBN,SAAU,CACNI,YAAa,MCrEfG,GAA4B,oBAGlC,MAAMC,WAAuBnB,GAIzBzoC,oBACSnZ,KAAKF,MAAMkjD,QAIZjjD,MAAMoZ,oBAHNnZ,KAAKC,SAAS,CAACo2B,gBAAgB,GAKvC,CAIAO,mBAAmB12C,GACf8f,KAAKwqB,SAAW,KACH,OAATtqC,EACA8f,KAAKC,SAAS,CAACo2B,gBAAgB,EAAOC,cAAc,IAEpDt2B,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBl8B,MAAOiC,YACHlc,EAAM,CAACub,iBAAkB,CAAC,WAAatB,OAGvD,CAEAsxB,sBAAsBpzC,EAAMhG,GACxB2tB,KAAKC,UAASC,IAAS,CACnB,CAAC7nB,GAAOhG,EACRsV,OAAQhM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUvY,OAAQ,CAAC,CAACtP,GAAO,QAE7D,CAEAy/C,aACI93B,KAAKC,SACD,CAACqrB,UAAU,EAAMyM,eAAgB,GAAI9I,YAAa,wBAClD,KACI,MAAOxlC,EAAS9B,GAAUqY,KAAK2jC,WAC3Bl6C,EAEAuW,KAAKwqB,SAAWpmB,EACZsiB,GAASuB,aAAaxqB,KACtBuC,KAAKijD,YAAc,OAAS,MAC5B,CAAC,EACD7mD,YACI,CAACjC,MAAO6F,KAAKG,MAAMhG,OACnB,CAACqB,UAAU,EAAMC,iBAAkB,CAAC,WAExCuE,KAAKo4B,uBACLp4B,KAAKq4B,qBACLr4B,KAAKs4B,gCAGTt4B,KAAKC,SAAS,CAACqrB,UAAU,EAAO3jC,SAAQsnC,YAAa6zB,IACzD,GAGZ,CAEA1qB,uBAAuBl4C,GACnB8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SACD,CAACqrB,UAAU,EAAO2D,YAAa,aAC/B,KACIjvB,KAAKijD,aAAc,EACnBjjD,KAAKmvB,eAAiBvK,YAAW,KAC7B5kB,KAAKC,SAAS,CAACgvB,YAAa6zB,IAA2B,GACxD,IAAK,GAGpB,CAEAzqB,qBAAqBn4C,GACjB8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVqrB,UAAU,EACV2D,YAAa6zB,GACb/qB,eAAgB,oDAAqC73C,EAAKiF,WAElE,CAEAmzC,+BAA+B5uC,GAC3BsW,KAAKwqB,SAAW,KAChB,IAAIrlC,EAAU,GACC,MAAXuE,IACAvE,EAAU,8BAAyB6a,KAAKijD,YAClC,YAAc,uBAEpBjjD,KAAKqB,oBAETrB,KAAKC,SAAS,CACVqrB,UAAU,EACV2D,YAAa6zB,GACb/qB,eAAgB5yC,GAAW,sFAAkEuE,MAErG,CAIAysC,SAASr2B,GACLE,KAAKkjD,eAAiB,IACtBljD,KAAKijD,aAAc,CACvB,CAEAzsB,mBAAmB12B,GACf,MAAO,CACH3F,MAAO,GACPmxB,UAAU,EACVyM,eAAgB,GAChBpwC,OAAQ,CACJwS,MAAO,IAEX80B,YAAa6zB,GAErB,CAEA/rB,wBACI/2B,KAAK83B,WAAa93B,KAAK83B,WAAWzT,KAAKrkB,MACvCA,KAAKo4B,uBAAyBp4B,KAAKo4B,uBAAuB/T,KAAKrkB,MAC/DA,KAAKq4B,qBAAuBr4B,KAAKq4B,qBAAqBhU,KAAKrkB,MAC3DA,KAAKs4B,+BAAiCt4B,KAAKs4B,+BAA+BjU,KAAKrkB,KACnF,CAEA2jC,WAEI3jC,KAAKC,SAAS,CAACtY,OAAQ,CAAC,IAExB,IAAI8B,GAAU,EACV9B,EAAS,CAAC,EAGd,MAAMwS,EAAQ6F,KAAKG,MAAMhG,MASzB,OARK9Q,aAAsB8Q,GAGhB1gB,YAAkB0gB,GAAS6F,KAAKkjD,iBACvCv7D,EAAc,MAAI,2CAAiCqY,KAAKkjD,4BACxDz5D,GAAU,IAJV9B,EAAc,MAAI,yBAClB8B,GAAU,GAMP,CAACA,EAAS9B,EACrB,CAIA+vC,eACI,OACI/3B,IAAAU,cAACoQ,EAAW,KACR9Q,IAAAU,cAAA,MAAIkM,UAAU,qBAAoB5M,IAAAU,cAACwQ,IAAI,CAAChnB,GAAG,mCAAkC,eAC7E8V,IAAAU,cAAA,MAAIkM,UAAU,wBAAwBvM,KAAKF,MAAMkjD,QAAU,SAAW,QAAQ,eAG1F,CAEAprB,gBACI,MAAM,OACFjwC,EAAM,eACNowC,EAAc,YACd9I,EAAW,SACX3D,EAAQ,MACRnxB,GACA6F,KAAKG,MACHgjD,GAAkBx7D,EAAOwS,OAAS,IAAInmB,OAAS,EACrD,OACI2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAE5M,KAAKF,MAAMkjD,QAAU,SAAW,QAAQ,eACnErjD,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,kBAAQi6B,UAAU,mBACpC5M,IAAAU,cAAC20B,GAAa,CACVprB,SAAU0hB,EACVjd,QAAS80C,EACTluB,oBAAqB96B,EACrBipD,aAAc,CAAElrC,OAAQ,MACxBiO,UAAWnmB,KAAKkjD,eAChBp0C,QAAS,CAAC0B,QAAS,IACnB6yC,eAAa,EACbjuB,qBAAuBD,GAAiBn1B,KAAKyrB,sBAAsB,QAAS0J,KAE/EguB,GAAkBxjD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEH,EAAOwS,SAG/CwF,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CACTjI,SAAU0hB,EACV/Y,MAAI,EACJnD,QAASpP,KAAK83B,YAChB7I,IAEL8I,EAAe/jD,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAASsqB,IAIxE,EAGJgrB,GAAejc,YAAcjmC,ECtM7B,MAAMyiD,GAAkB,CACpBzwE,GAAI,KACJglB,SAAU,GACVsC,MAAO,GACPjE,eAAe,EACfN,YAAY,EACZ2tD,iBAAiB,EACjBjtD,kBAAmB,GACnBC,aAAc,GACdzC,KAAM,IAEJgvD,GAA4B,mBAGlC,MAAMU,WAAsBvtB,GAAcp2B,cAAA,SAAA9rB,WAAA,KA8LtC+4C,YAAc,KACV9sB,KAAKqB,kBAAkB,CAC1B,CA5LD8X,oBACQnZ,KAAKG,MAAMirB,MACXprB,KAAKC,SAAS,CAACo2B,gBAAgB,IAG/Br2B,KAAKi3B,kBAEb,CAIAL,mBAAmB12C,GACf6f,MAAM62B,mBAAmB12C,GAEzB,MAAMsX,EAAY4E,YACdlc,EACA,CACIub,iBAAkB,CAAC,SACnBe,eAAgB,CAAC,oBAAqB,gBACtCC,mBAAoB,CAAC,oBAAqB,kBAEhDjF,UACGA,EAGDwI,KAAKC,SACD,CACIo2B,gBAAgB,EAChB7+B,UAAW7b,OAAOwE,OAAOqX,EAAW,CAChC3kB,GAAImtB,KAAKF,MAAM/kB,MAAMX,OAAOvH,GAC5B0wE,gBAA4C,KAA3B/rD,EAAUjB,iBAGnC,KACI,MAAMjK,EAAY0T,KAAKF,MAAM/kB,MAAMX,OAC/B4lB,KAAKF,MAAMkjD,SAAWxrD,EAAU1D,OAASxH,EAAUwH,MAEnDkM,KAAKF,MAAM+tB,QAAQ1vC,KAAK,mCAAmCmO,EAAUzZ,MAAM2kB,EAAU1D,cACzF,IAfRkM,KAAKC,SAAS,CAACo2B,gBAAgB,EAAOC,cAAc,GAmB5D,CAEA7K,sBAAsBpzC,EAAMhG,GACxB,IAAIoxE,EAAU,CAAC,CAACprE,GAAOhG,GACV,eAATgG,GAA0BhG,IAC1BoxE,EAAuB,eAAI,GAE/BzjD,KAAKC,UAASC,IAAS,CACnB1I,UAAW7b,OAAOwE,OAAO,CAAC,EAAG+f,EAAU1I,UAAWisD,GAClD97D,OAAQhM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUvY,OAAQ,CAAC,CAACtP,GAAO,QAE7D,CAEAqrE,0BAA0BrrE,GACtB2nB,KAAKC,UAASC,IAAS,CACnBvY,OAAQhM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUvY,OAAQ,CAAC,CAACtP,GAAO,QAE7D,CAEAy/C,aACI93B,KAAKC,SACD,CAACqrB,UAAU,EAAMyM,eAAgB,GAAI9I,YAAa,wBAClD,KACI,MAAOxlC,EAAS9B,GAAUqY,KAAK2jC,WAC/B,GAAIl6C,EAAS,CACT,MAAM2hC,EAAQprB,KAAKG,MAAMirB,MAEzBprB,KAAKwqB,SAAWpmB,EACZgnB,EACM1E,GAASoB,gBAAgBrqB,KACzBipB,GAASqB,uBAAuBxhB,OAC9BvG,KAAKG,MAAM3I,UAAU3kB,IAC7Bu4C,EAAQ,OAAS,MACjB,CAAC,EACDhvB,YACI4D,KAAKG,MAAM3I,UAAW,CAACgE,UAAU,EAAMC,iBAAkB,CAAC,WAC9DuE,KAAKo4B,uBACLp4B,KAAKq4B,qBACLr4B,KAAKs4B,+BAEb,MACIt4B,KAAKC,SAAS,CAACqrB,UAAU,EAAO3jC,SAAQsnC,YAAa6zB,IACzD,GAGZ,CAEA1qB,uBAAuBl4C,GACnB8f,KAAKg4B,aAAe,KAEpB,MAAMxgC,EAAY4E,YAAoBlc,GAAMsX,UAC5CwI,KAAKC,UAASC,IAAS,CACforB,UAAU,EACV2D,YAAa,WACb7D,OAAO,EACP5zB,UAAW7b,OAAOwE,OAAO,CAAC,EAAG+f,EAAU1I,UAAWA,OAEtD,KACIwI,KAAKijD,aAAc,EACnB,MAAM32D,EAAY0T,KAAKF,MAAM/kB,MAAMX,OAC/B4lB,KAAKF,MAAMkjD,SAAWxrD,EAAU1D,OAASxH,EAAUwH,MAEnDkM,KAAKF,MAAM+tB,QAAQ1vC,KAAK,mCAAmCmO,EAAUzZ,MAAM2kB,EAAU1D,eAEzFkM,KAAKmvB,eAAiBvK,YAAW,KAC7B5kB,KAAKC,SAAS,CAACgvB,YAAa6zB,IAA2B,GACxD,IAAK,GAGpB,CAEAzqB,qBAAqBn4C,GACjB8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVqrB,UAAU,EACV2D,YAAa6zB,GACb/qB,eAAgB,oDAAqCr5B,YAAsBxe,EAAKiF,YAExF,CAEAmzC,+BAA+B5uC,GAE3B,GADAsW,KAAKwqB,SAAW,KACD,MAAX9gC,EACAsW,KAAKC,SAAS,CAACqrB,UAAU,EAAOgL,cAAc,QAC3C,CACH,IAAInxC,EAAU,GACC,MAAXuE,IACAvE,EAAU,8BAAyB6a,KAAKG,MAAMirB,MACxC,YAAc,uBAEpBprB,KAAKqB,oBAETrB,KAAKC,SAAS,CACVqrB,UAAU,EACV2D,YAAa6zB,GACb/qB,eAAgB5yC,GACZ,sFAAkEuE,MAE9E,CACJ,CAIAysC,SAASr2B,GACLE,KAAKkjD,eAAiB,GAC1B,CAEA1sB,mBAAmB12B,GACf,MAAO,CACHsrB,OAAQtrB,EAAMkjD,QACd13B,UAAU,EACV9zB,UAAW8rD,GACXvrB,eAAgB,GAChBpwC,OAAQ,CACJwS,MAAO,IAEX80B,YAAa6zB,GAErB,CAEA/rB,wBACI/2B,KAAK83B,WAAa93B,KAAK83B,WAAWzT,KAAKrkB,MACvCA,KAAKo4B,uBAAyBp4B,KAAKo4B,uBAAuB/T,KAAKrkB,MAC/DA,KAAKq4B,qBAAuBr4B,KAAKq4B,qBAAqBhU,KAAKrkB,MAC3DA,KAAKs4B,+BAAiCt4B,KAAKs4B,+BAA+BjU,KAAKrkB,KACnF,CAEAo3B,cACI,OAAO1Q,GAASqB,uBAAuBxhB,OACnCvG,KAAKF,MAAM/kB,MAAMX,OAAOvH,GAChC,CAEAykD,eACI,MAAO,CAAC1e,QAAS,cACrB,CAEAse,cAAc/xC,GACV,MAAO,6DAA8CA,GACzD,CAEAgyC,6BAA6BztC,GACzB,MAAO,oGAAgFA,IAC3F,CAMA2X,mBACIrB,KAAK4Y,QAAQvX,iBAAiB,aAClC,CAEAsiC,WACI,IAAIl6C,GAAU,EACd,MAAMk6D,EAAc,yBACpB,IAAIh8D,EAAS,CAAC,EAEd,MAAM,gBACF47D,EAAe,aACfhtD,EAAY,SACZsB,EAAQ,MACRsC,GACA6F,KAAKG,MAAM3I,UAuBf,OApBKK,EAAS7jB,SACV2T,EAAiB,SAAIg8D,EACrBl6D,GAAU,GAITJ,aAAsB8Q,GAGhB1gB,YAAkB0gB,GAAS6F,KAAKkjD,iBACvCv7D,EAAc,MAAI,2CAAiCqY,KAAKkjD,4BACxDz5D,GAAU,IAJV9B,EAAc,MAAIg8D,EAClBl6D,GAAU,GAOT85D,GAAoBhtD,EAAaviB,SAClC2T,EAAqB,aAAIg8D,EACzBl6D,GAAU,GAGP,CAACA,EAAS9B,EACrB,CAIA+vC,eACI,MAAMlgC,EAAYwI,KAAKG,MAAM3I,UAC7B,OACImI,IAAAU,cAACoQ,EAAW,KACR9Q,IAAAU,cAAA,MAAIkM,UAAU,qBAAoB5M,IAAAU,cAACwQ,IAAI,CAAChnB,GAAG,mCAAkC,eAC3D,OAAjB2N,EAAU3kB,GACP8sB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,MAAIkM,UAAU,qBAAoB5M,IAAAU,cAACwQ,IAAI,CAAChnB,GAAI,mCAAmC2N,EAAU3kB,MAAM2kB,EAAU1D,QAAQ,iCACjH6L,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,WAGzC5M,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,mBAIrD,CAEAqrB,gBACI,MAAM,OACFjwC,EAAM,eACNowC,EAAc,UACdvgC,EAAS,YACTy3B,EAAW,SACX3D,GACAtrB,KAAKG,MAEHgjD,GAAkBx7D,EAAOwS,OAAS,IAAInmB,OAAS,EAC/C4vE,GAAqBj8D,EAAOkQ,UAAY,IAAI7jB,OAAS,EACrD6vE,GAAuBl8D,EAAO4O,cAAgB,IAAIviB,OAAS,EAE3D8vE,EAAuBnkD,IAAMuc,YAEnC,OACIvc,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,sBAAoBpV,EAAUK,UACxD8H,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,mBACNq6B,SAAS,cACTG,IAAI,SAEJnN,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkB4/B,EAAoB,iBAAmB,KACzD39B,gBAAc,EACdjB,kBAAkB,mBAClBpb,SAAU0hB,EACVz4C,GAAG,cACHw7B,QAASu1C,EACTz1C,WAAS,EACTgY,UAAW,IACX9zC,MAAOmlB,EAAUK,SACjB6sB,QAAUxH,GAAOld,KAAKyrB,sBAAsB,WAAY,IACxDrV,SAAW8G,GAAOld,KAAKyrB,sBAAsB,WAAYvO,EAAGiI,OAAO9yC,OACnEwyC,QAAU3H,GAAOld,KAAK0jD,0BAA0B,cACnDE,GAAqBjkD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,kBAAkB8U,EAAOkQ,YAGtE8H,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,kBAAQi6B,UAAU,mBACpC5M,IAAAU,cAAC20B,GAAa,CACV,mBAAkBmuB,EAAiB,kBAAoB,KACvDv5C,SAAU0hB,EACVjd,QAAS80C,EACTluB,oBAAqBz9B,EAAU2C,MAC/BipD,aAAc,CAAElrC,OAAQ,MACxBiO,UAAWnmB,KAAKkjD,eAChBp0C,QAAS,CAAC0B,QAAS,IACnB6yC,eAAa,EACbjuB,qBAAuBD,GAAiBn1B,KAAKyrB,sBAAsB,QAAS0J,KAE/EguB,GAAkBxjD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,mBAAmB8U,EAAOwS,SAGpEwF,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACiiC,KAAQ,CACLpB,QAAS1pC,EAAU5B,WACnBgU,SAAU0hB,EACVh5C,MAAM,eACN8jC,SAAWuC,GAAU3Y,KAAKyrB,sBAAsB,aAAc9S,EAAMwM,OAAO+b,WAE/EvhC,IAAAU,cAACiiC,KAAQ,CACL14B,SAAU0hB,EACV4V,QAAS1pC,EAAU+rD,gBACnBjxE,MAAM,oBACN8jC,SAAWuC,IACP,MAAMuoB,EAAUvoB,EAAMwM,OAAO+b,QAC7BlhC,KAAKyrB,sBAAsB,kBAAmByV,GAC1CA,GACAlhC,KAAKyrB,sBAAsB,eAAgB,GAC/C,IAGR9rB,IAAAU,cAACiiC,KAAQ,CACLpB,QAAS1pC,EAAUtB,cACnB0T,SAAU0hB,IAAa9zB,EAAU5B,WACjCtjB,MAAM,gCACN8jC,SAAWuC,GAAU3Y,KAAKyrB,sBAAsB,gBAAiB9S,EAAMwM,OAAO+b,aAGpF1pC,EAAU5B,YAAc+J,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GAACxR,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,6EACvDlV,EAAU+rD,iBACR5jD,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,0BAAgBoF,SAAUosE,EAAsBv3C,UAAW+e,GAAY,YACzF3rB,IAAAU,cAACwV,EAAY,CACTsB,gBAAiB0sC,EAAsB,qBAAuB,KAC9Dj6C,SAAU0hB,EACVnd,WAAS,EACTE,QAASw1C,EACTpsC,QAAUjgB,EAAUjB,aAA4BxR,KAAK2gB,MAAMlO,EAAUjB,cAAlC,IAAIxR,KACvCyxB,UAAWstC,EACXzxE,MAAO0S,KAAK2gB,MAAMlO,EAAUjB,cAC5B6f,SAAWlgC,GAAS8pB,KAAKyrB,sBAAsB,eAAiBv1C,EAAYE,YAAaF,GAAlB,MAE1E2tE,GAAuBlkD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,sBAAsB8U,EAAO4O,eAG5EoJ,IAAAU,cAACyQ,EAAU,CAACK,SAAO,EAAC5E,UAAU,uBAC1B5M,IAAAU,cAACwR,EAAY,CAACjI,SAAU0hB,EAAU/Y,MAAI,EAACnD,QAASpP,KAAK83B,YAAa7I,IAErE8I,EAAe/jD,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAASsqB,IAIxE,EAGJyrB,GAAc1c,YAAcjmC,ECpY5B,MAAMkjD,WAAoB9tB,GAAcp2B,cAAA,SAAA9rB,WAAA,KAyCpCiwE,aAAe,KACXhkD,KAAKF,MAAM+tB,QAAQ1vC,KAAK6hB,KAAKikD,aAAajkD,KAAKG,MAAM+jD,OAAO,EAC/D,KAEDC,iBAAmB,KAAO,IAADC,EACM,QAAT,QAAfA,EAAApkD,KAAKF,MAAMjL,YAAI,IAAAuvD,OAAA,EAAfA,EAAiBvxE,KAKpBkM,eAAeC,QACb,kBACA+mB,EAAKa,WAAWnJ,MAGlB3e,aAAoB,IAThBkhB,KAAKF,MAAM+tB,QAAQ1vC,KAAK4nB,EAAKa,WAAWnJ,KASlB,CAC7B,CArDDm5B,mBAAmB12C,GACf6f,MAAM62B,mBAAmB12C,GAGzB,MAAMxG,EAAUsmB,KAAKF,MAAMpmB,QAC3B,IAAI2qE,EAAiB,KACjBrkD,KAAKF,MAAMpmB,UACX2qE,EAAiB3qE,EAAQ7G,IAG7B,IAAIstB,EAAQ,CAACk2B,gBAAgB,GAC7B,MAAMh8B,EAAe+B,YACjBlc,EAAM,CAACub,iBAAkB,CAAC,WAAapB,aAC3C,IAAK,IAAIvlB,IAAK,CAAC,EAAG,EAAG,GAAI,CACrB,IAAI+U,EAAKwQ,EAAaha,QAAOwJ,GAAMA,EAAGy6D,YAAc,eAAexvE,MAAK,GACpE+U,EACuB,OAAnBw6D,GAA2Bx6D,EAAGhX,KAAOwxE,IACrCx6D,EAAKnQ,GAGTmQ,EAAK,CAAC,EAEVsW,EAAM,cAAcrrB,KAAO+U,CAC/B,CACAmW,KAAKC,SAASE,EAClB,CAEA02B,iBAAiB32C,GAEb8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CAACo2B,gBAAgB,GACnC,CAEAS,2BAA2B3xC,GACvB6a,KAAK62B,iBAAiB,CAAC,EAC3B,CAsBAL,mBAAmB12B,GACf,MAAO,CACHykD,aAAc,CAAC,EACfC,aAAc,CAAC,EACfC,aAAc,CAAC,EACfP,MAAO,GAEf,CAEA9sB,cACI,MAAO,sBACX,CAEA6sB,aAAaC,GACT,OAAKA,EAAMlwE,OAGJixB,UAAU,wBAAwBi/C,KAF9B,oBAGf,CAIAtsB,gBACIvjD,SAASqgB,MAAQ,6BACjB,MAAM,aACF6vD,EAAY,aACZC,EAAY,aACZC,GACAzkD,KAAKG,MAEHukD,EAA2D,IAArC/oE,OAAOS,KAAKmoE,GAAcvwE,SAAiBqV,aAAsB1N,OAAOS,KAAKmoE,EAAapqD,OAAOnmB,OAAS,EAAIuwE,EAAapqD,MAAQ,IACzJwqD,EAA2D,IAArChpE,OAAOS,KAAKooE,GAAcxwE,SAAiBqV,aAAsB1N,OAAOS,KAAKooE,EAAarqD,OAAOnmB,OAAS,EAAIwwE,EAAarqD,MAAQ,IACzJyqD,EAA2D,IAArCjpE,OAAOS,KAAKqoE,GAAczwE,SAAiBqV,aAAsB1N,OAAOS,KAAKqoE,EAAatqD,OAAOnmB,OAAS,EAAIywE,EAAatqD,MAAQ,IAC/J,OAAIuqD,GAAuBC,GAAuBC,EACvC5kD,KAAK6kD,eAIZllD,IAAAU,cAAAV,IAAAyc,SAAA,KACKpc,KAAK6kD,gBACJH,GAAuB1kD,KAAK8kD,kBAAkBP,GAChD5kD,IAAAU,cAACyQ,EAAU,CAACO,OAAK,EAAClD,WAAS,EAAC5B,UAAU,0BAClC5M,IAAAU,cAACge,GAAc,MACTsmC,GAAuB3kD,KAAK8kD,kBAAkBN,IAEpD7kD,IAAAU,cAACge,GAAc,CAACC,MAAI,IACdsmC,GAAuB5kD,KAAK8kD,kBAAkBL,KAKpE,CAEAI,eACI,OACEllD,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,UACnB5M,IAAAU,cAACyQ,EAAU,CAACQ,OAAK,EAACnD,WAAS,EAAC8C,gBAAc,GACxCtR,IAAAU,cAAA,QACE0kD,SAAU/kD,KAAKgkD,aACfz3C,UAAU,eACVkB,KAAK,UAEL9N,IAAAU,cAAA,SAAOkM,UAAU,UAAUE,QAAQ,mBAAkB,4BAGrD9M,IAAAU,cAAA,WAASkM,UAAU,2BACjB5M,IAAAU,cAAA,OAAKkM,UAAU,oBACb5M,IAAAU,cAACgM,EAAI,KAAC,qBACN1M,IAAAU,cAACwQ,IAAI,CACHhnB,GAAImW,KAAKikD,aAAa,oBACtB13C,UAAU,gCAEV5M,IAAAU,cAAA,QAAMkM,UAAU,WAAU,sBAAyB,qBAGrD5M,IAAAU,cAACwQ,IAAI,CACHhnB,GAAImW,KAAKikD,aAAa,yBACtB13C,UAAU,gCAEV5M,IAAAU,cAAA,QAAMkM,UAAU,WAAU,sBAAyB,0BAGrD5M,IAAAU,cAACwQ,IAAI,CACHhnB,GAAImW,KAAKikD,aAAa,4BACtB13C,UAAU,gCAEV5M,IAAAU,cAAA,QAAMkM,UAAU,WAAU,sBAAyB,8BAIvD5M,IAAAU,cAAC2jB,GAAe,CACdzX,UAAU,gBACV15B,GAAG,kBACHszC,UAAW,IACX/P,SAAW8G,GAAOld,KAAKC,SAAS,CAAEikD,MAAOhnC,EAAGiI,OAAO9yC,QACnDqyC,QAAUxH,GAAOld,KAAKC,SAAS,CAAEikD,MAAO,KACxCl4C,YAAY,uBACZ35B,MAAO2tB,KAAKG,MAAM+jD,SAGtBvkD,IAAAU,cAACwR,EAAY,CACXzC,QAASpP,KAAKgkD,aACdx6C,SAAO,EACPiG,KAAK,SACLlD,UAAU,eACX,4BAGD5M,IAAAU,cAACwR,EAAY,CACXzC,QAAU8N,IACRA,EAAGsI,iBACHxlB,KAAKmkD,kBAAkB,EAEzBnyC,MAAI,EACJvC,KAAK,OACLlD,UAAU,eACX,mDACkC5M,IAAAU,cAAA,QAAMkM,UAAU,WAAU,gEAG/D5M,IAAAU,cAAA,WAASkM,UAAU,qBAChBvM,KAAKglD,4BAKlB,CAEAA,0BACI,MAAMnwD,EAAOmL,KAAKF,MAAMjL,KACxB,OAAKA,GAA4B,OAApBA,EAAK5E,WAiBd0P,IAAAU,cAACwR,EAAY,CACT/E,IAAK+D,IACLhnB,GAAG,mBACHhX,GAAG,6BACHm/B,MAAI,EACJE,UAAQ,EACRzC,KAAK,cACLlD,UAAU,eAAc,yBAtBxB5M,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACwR,EAAY,CACTtF,UAAU,cACVkD,KAAK,cACLuC,MAAI,EACJE,UAAQ,EACR9C,QAASpP,KAAKF,MAAMmlD,cACvB,wBACmBtlD,IAAAU,cAAA,QAAMkM,UAAU,WAAU,sDAE9C5M,IAAAU,cAACgM,EAAI,CAACE,UAAU,gBAAe,oBAgB/C,CAEAu4C,kBAAkBxnD,GACd,OACIqC,IAAAU,cAACgT,EAAS,CAAC3e,MAAO4I,EAAQzF,UACtB8H,IAAAU,cAACi/C,GAAiB,CAAC5lE,QAAS4jB,EAAQnD,QAGhD,E,OC1NJ,MAAM+qD,GAAsB,CACxB,UAAa,KACb,QAAW,KACX,QAAW,KACX,eAAkB,KAClB,UAAa,KACb,WAAc,MAGZC,GAAsB,CACxBn9D,WAAY,CAAC,EACbN,WAAY,CAAC,EACbpB,cAAe,CAAC,EAChBxG,qBAAsB,CAAC,EACvBkX,aAAc,CAAC,EACf0D,eAAgB,CAAC,EACjBU,WAAY,CAAC,GAIXgqD,GAAuB/lD,wBAAc,CAEvCrX,WAAY,KACZq9D,cAAc,EACd/5B,UAAU,EAEV1jC,WAAYjM,OAAOwE,OAAO,CAAC,EAAG+kE,IAC9BI,WAAY3pE,OAAOwE,OAAO,CAAC,EAAGglE,IAE9BI,cAAe,KACfC,kBAAmB,CAAC,EACpBC,YAAa,KACbC,qBAAsB,CAAC,EACvBC,6BAA8B,GAC9BC,iCAAkC,CAAC,EACnCC,oCAAqC,CAAC,EACtCC,WAAY,CAAC,EACbjgE,SAAU,GACVkgE,OAAQ,GACRhgE,gBAAiB,GACjBigE,MAAO,GAEPC,oBAAqBA,OACrBC,+BAAgCA,OAChCC,cAAeA,OACfC,eAAgBA,OAChBC,iCAAkCA,OAClCC,wBAAyBA,OACzBC,0BAA2BA,OAC3BC,kBAAmBA,OACnBC,0CAA2CA,OAC3CC,4CAA6CA,OAC7CC,gBAAiBA,OACjBC,kBAAmBA,OACnBC,mBAAoBA,OACpBC,qBAAsBA,OACtBC,cAAeA,OACfC,iBAAkBA,OAClBC,wBAAyBA,OACzBC,4BAA6BA,OAC7BC,mBAAoBA,OACpBC,qBAAsBA,OACtBC,iCAAkCA,OAClCC,mCAAoCA,OACpCC,uBAAwBA,OACxBzjB,aAAcA,OACdN,gBAAiBA,OACjBgkB,uBAAwBA,OACxBC,sBAAuBA,OACvB9jB,SACIA,CAACn/C,EAAkBkE,EAAoB+X,KAAvCkjC,EACJ+jB,eAAgBA,OAChBC,+BAAgCA,OAChCC,oBAAqBA,OACrBC,gBAAiBA,OACjBC,WAAYA,SAIT,MAAMC,WAA8BpoD,IAAMC,UAE7CC,YAAYC,GAAQ,IAADyB,EACfxB,MAAMD,GAAMyB,EAAAvB,KAAC,KAmEjBimD,oBAAsB,CAAC/lE,EAAMnH,KACzB,MACI6sE,EACAC,GACAlnD,YAA6Bze,EAAK8nE,uBACtChoD,KAAKC,SACD,CACIslD,cAAerlE,EAAK+nE,0BACpBzC,kBAAmBtlE,EAAKgoE,sBACxBC,QAASjoE,EAAKkoE,WACd3C,YAAavlE,EAAKmoE,UAClB3C,qBAAsBxlE,EAAKooE,8BAC3B3C,6BAA8B9oD,YAAkB3c,EAAK8nE,uBACrDpC,iCAAkCA,EAClCC,oCAAqCA,EACrCC,WAAY5lE,EAAKqoE,8BACjB1iE,SAAUgX,YAAkB3c,EAAKgT,UACjC6yD,OAAQlpD,YAAkB3c,EAAKsoE,oBAC/BziE,gBAAiB8W,YAAkB3c,EAAK+N,iBACxC+3D,MAAO9lE,EAAKuoE,YAEhB1vE,EACH,EACJ,KAEDmtE,+BAAiC,CAAChmE,EAAMnH,KACpCinB,KAAKC,SACD,CACIpa,SAAUgX,YAAkB3c,EAAKgT,UAAY,IAC7C6yD,OAAQlpD,YAAkB3c,EAAKsoE,oBAAsB,IACrDziE,gBAAiB8W,YAAkB3c,EAAK+N,iBAAmB,KAE/DlV,EACH,EACJ,KAEDotE,cAAgB,SAACjmE,GAAyB,IAClC8H,EADejP,EAAQhF,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,KAGxBiU,EADS,OAAT9H,EACa,CACT8H,WAAY,CACRnV,GAAI,KACJ6W,OAAQ,CAAC,EACTsO,MAAO,KACP1B,kBAAoB,IAExBzjB,GAAI,KACJ6W,OAAQ,CAAC7W,GAAI0uB,EAAKpB,MAAMolD,eACxB1/D,SAAU,GACVD,MAAO,GACPmV,wBAAyB,GACzBjV,MAAO,KACP6U,mBAAoB,GACpB9E,gCAAgC,EAChCS,kBAAmB,GACnB2D,YAAa,GACbrB,+BAAgC,GAChClR,WAAY,GACZ3B,gBAAiB,GACjBqV,WAAY,IAGHlb,EAEjBqhB,EAAKtB,SACD,CAACjY,eACD,KAAWjP,GAAYA,GAAW,GAE1C,EAAC,KAEDqtE,eAAiB,CAAClmE,EAAMnH,KAChBmH,EAAK8H,YACLgY,KAAKC,UACDC,IAAS,CACLlY,WAAYrM,OAAOwE,OACf,CAAC,EAAG+f,EAAUlY,WACd,CACInV,GAAIqN,EAAKrN,GACTmV,WAAYrM,OAAOwE,OACf,CAAC,EAAG+f,EAAUlY,WAAWA,WAAY9H,EAAK8H,iBAI1DjP,EAER,EACH,KAEDstE,iCAAoCttE,IAChCinB,KAAKC,UACDC,IAAS,CACLlY,WAAYrM,OAAOwE,OACf,CAAC,EAAG+f,EAAUlY,WAAY,CACtBsO,kBAAmB,GACnBoyD,gBAAiB,GACjBC,qBAAqB,EACrBC,mBAAoB,QAIhC7vE,EACH,EACJ,KAEDutE,wBAA0B,CAACpmE,EAAMkrC,EAAOryC,KACpCinB,KAAKC,UACAC,IAEG,IAAIxY,EAAa,IADEwY,EAAUlY,WACGN,YAiChC,OA/BI0jC,GACK1jC,EAAW1T,QACZ0T,EAAWvJ,KAAK,CACZtL,GAAI,KACJ4C,YAAa,EACbylB,eAAgB,KAChBpb,qBAAsB,GACtBkW,eAAe,EACf1P,cAAe,GACf+B,kBAAmB,GACnBzC,MAAO,KAIf1F,EAAmB,aAAI,GACvBA,EAAqB,eAAI,GACzBwH,EAAW,GAAG5H,qBAAqB3B,KAAK+B,IAExCwH,EAAaA,EAAWvV,KAAIsV,IACxB,IAAI3H,EAAuB,GAC3B,IAAK,IAAI+oE,KAAMphE,EAAE3H,qBACT+oE,EAAGpzE,cAAgByK,EAAKzK,YACxBqK,EAAqB3B,KAAKxC,OAAOwE,OAAO,CAAC,EAAG0oE,EAAI3oE,IAEhDJ,EAAqB3B,KAAK0qE,GAIlC,OADAphE,EAAE3H,qBAAuBA,EAClB2H,CAAC,IAGT,CACHO,WAAYrM,OAAOwE,OACf,CAAC,EAAG+f,EAAUlY,WAAY,CAACN,eAClC,IAEL,IAAM3O,KACT,EACJ,KAEDwtE,0BAA6B9wE,IACzBuqB,KAAKC,UACAC,IACU,CACHlY,WAAYrM,OAAOwE,OACf,CAAC,EAAG+f,EAAUlY,WACd,CAACN,WAAYwY,EAAUlY,WAAWN,WAAWvV,KAAIsV,IAC7CA,EAAE3H,qBAAuB2H,EAAE3H,qBAAqBO,QAC5CwoE,GAAMA,EAAGpzE,cAAgBA,IACtBgS,UAK1B,EACJ,KAEDw/D,wBAA0B,CAAC6B,EAA0BrzE,EAAasD,KAC9DinB,KAAKC,UACAC,IACG,MAAMxY,EAAawY,EAAUlY,WAAWN,WAExC,IAAIqhE,EAAM,KACV,IAAK,IAAIthE,KAAKC,EACV,IAAK,IAAImhE,KAAMphE,EAAE3H,qBACb,GAAI+oE,EAAGpzE,cAAgBA,EAAa,CAChCszE,EAAMF,EACN,KACJ,CAIR,GAAY,OAARE,EAAc,CAEd,IAAIC,EAAc,GAClB,IAAK,IAAIvhE,KAAKC,EAEVD,EAAE3H,qBAAuB2H,EAAE3H,qBAAqBO,QAC5CwoE,GAAMA,EAAGpzE,cAAgBA,IAEzBgS,EAAEhS,cAAgBqzE,IAClBrhE,EAAE3H,qBAAuB,IAAI2H,EAAE3H,qBAAsBipE,IAEzDC,EAAY7qE,KAAKsJ,GAErB,MAAO,CACHO,WAAYrM,OAAOwE,OACf,CAAC,EAAG+f,EAAUlY,WAAY,CAACN,WAAYshE,IAEnD,CAAS,MAAO,CAAC,CAAE,GAGvBjwE,EACH,EACJ,KAEDytE,kBAAoB,CAACyC,EAAe52E,KAChC2tB,KAAKC,UAASC,IAAS,CACnBlY,WAAYrM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUlY,WAAY,CAAC,CAACihE,GAAgB52E,OACvE,EACN,KAEDo0E,0CAA4C,CAACvmE,EAAMkrC,EAAOvjC,EAAU9O,KAChE,MAAMmwE,EAAiChpE,EAAqC,sCACrEA,EAAqC,+BAC5C8f,KAAKC,UACDC,IACW,CACHlY,WAAYrM,OAAOwE,OACf,CAAC,EAAG+f,EAAUlY,WACd,CAACN,WAAYwY,EAAUlY,WAAWN,WAAWvV,KAAIsV,IAC7C,IAAI3H,EAAuB,GAC3B,IAAK,IAAI+oE,KAAMphE,EAAE3H,qBAAsB,CACnC,GAAI+oE,EAAGpzE,cAAgByzE,EACnB,GAAI99B,EACAy9B,EAAGhhE,GAAY,IAAIghE,EAAGhhE,GAAW3H,OAC9B,CACH,IAAIsuC,EAAU,GACd,IAAK,IAAIj5C,KAAKszE,EAAGhhE,GACTtS,EAAEE,cAAgByK,EAAKzK,cACvBF,EAAI2K,GAERsuC,EAAQrwC,KAAK5I,GAEjBszE,EAAGhhE,GAAY2mC,CACnB,CAEJ1uC,EAAqB3B,KAAK0qE,EAC9B,CAEA,OADAphE,EAAE3H,qBAAuBA,EAClB2H,CAAC,SAKxB1O,EACH,EACJ,KAED2tE,4CAA8C,CAACwC,EAAgCzzE,EAAaoS,KACxFmY,KAAKC,UACDC,IACW,CACHlY,WAAYrM,OAAOwE,OACf,CAAC,EAAG+f,EAAUlY,WACd,CAACN,WAAYwY,EAAUlY,WAAWN,WAAWvV,KAAIsV,IAC7C,IAAI3H,EAAuB,GAC3B,IAAK,IAAI+oE,KAAMphE,EAAE3H,qBACT+oE,EAAGpzE,cAAgByzE,IACnBL,EAAGhhE,GAAYghE,EAAGhhE,GAAUxH,QAAO9K,GAAKA,EAAEE,cAAgBA,KAE9DqK,EAAqB3B,KAAK0qE,GAG9B,OADAphE,EAAE3H,qBAAuBA,EAClB2H,CAAC,SAK3B,EACJ,KAEDk/D,gBAAkB,CAACzmE,EAAMkrC,EAAOryC,IACrBinB,KAAKymD,0CACRvmE,EAAMkrC,EAAO,eAAgBryC,GACpC,KAED6tE,kBAAoB,CAACsC,EAAgCzzE,KACjDuqB,KAAK0mD,4CACDwC,EAAgCzzE,EAAa,eAAe,EACnE,KAEDoxE,mBAAqB,CAAC3mE,EAAMkrC,EAAOryC,IACxBinB,KAAKymD,0CACRvmE,EAAMkrC,EAAO,iBAAkBryC,GACtC,KAED+tE,qBAAuB,CAACoC,EAAgCzzE,KACpDuqB,KAAK0mD,4CACDwC,EAAgCzzE,EAAa,iBAAiB,EACrE,KAEDsxE,cAAgB,KAEP/mD,KAAKG,MAAMnY,WAAW6N,gCAC3BmK,KAAKC,UAASC,IAAS,CACnBlY,WAAYrM,OAAOwE,OACf,CAAC,EAAG+f,EAAUlY,WACd,CAACN,WAAY,IAAIwY,EAAUlY,WAAWN,WAAY,CAC9C7U,GAAI,KACJ4C,YAAaC,KAAKC,OAAOoB,YAAYmpB,EAAUlY,WAAWN,YAAYvV,KAAIsV,GAAKA,EAAEhS,eAAgB,EACjGmQ,MAAO,GACPoQ,eAAe,EACflW,qBAAsB,GACtBuI,kBAAmB,GACnB/B,cAAe,UAGxB,EACN,KAED0gE,iBAAoBvxE,IAChBuqB,KAAKC,UAASC,IAAS,CACnBlY,WAAYrM,OAAOwE,OACf,CAAC,EAAG+f,EAAUlY,WACd,CAACN,WAAYwY,EAAUlY,WAAWN,WAAWrH,QAAOoH,GAAKA,EAAEhS,cAAgBA,SAEhF,EACN,KAEDyxE,4BAA8B,CAACzxE,EAAaoS,EAAUxV,KAClD2tB,KAAKC,UAASC,IAAS,CACnBlY,WAAYrM,OAAOwE,OACf,CAAC,EAAG+f,EAAUlY,WACd,CAACN,WAAYwY,EAAUlY,WAAWN,WAAWvV,KAAIsV,IACzCA,EAAEhS,cAAgBA,IAClBgS,EAAEI,GAAYxV,GAEXoV,UAGhB,EACN,KAED4/D,iCAAmC,SAACnnE,EAAMkrC,EAAOvjC,GAA6B,IAAnB9O,EAAQhF,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,KAChE,MAAMonB,EAAwBjb,EAA4B,6BACnDA,EAA4B,sBACnCqhB,EAAKtB,UACDC,IACW,CACHlY,WAAYrM,OAAOwE,OACf,CAAC,EAAG+f,EAAUlY,WACd,CAACN,WAAYwY,EAAUlY,WAAWN,WAAWvV,KAAIsV,IAC7C,GAAIA,EAAEhS,cAAgB0lB,EAClB,GAAIiwB,EACA3jC,EAAEI,GAAY,IAAIJ,EAAEI,GAAW3H,OAC5B,CACH,IAAIsuC,EAAU,GACd,IAAK,IAAIj5C,KAAKkS,EAAEI,GACRtS,EAAEE,cAAgByK,EAAKzK,cACvBF,EAAI2K,GAERsuC,EAAQrwC,KAAK5I,GAEjBkS,EAAEI,GAAY2mC,CAClB,CAEJ,OAAO/mC,CAAC,UAKxB,KAAW1O,GAAWA,GAAU,GAExC,EAAC,KAEDuuE,mCAAqC,CAACnsD,EAAuB1lB,EAAaoS,KACtEmY,KAAKC,UACDC,IAAS,CACLlY,WAAYrM,OAAOwE,OACf,CAAC,EAAG+f,EAAUlY,WACd,CAACN,WAAYwY,EAAUlY,WAAWN,WAAWvV,KAAIsV,IACzCA,EAAEhS,cAAgB0lB,IAClB1T,EAAEI,GAAYJ,EAAEI,GAAUxH,QAAO9K,GAAKA,EAAEE,cAAgBA,KAErDgS,UAItB,EACJ,KAED0/D,mBAAqB,CAACjnE,EAAMkrC,EAAOryC,KAC/BinB,KAAKqnD,iCACDnnE,EAAMkrC,EAAO,gBAAiBryC,EAAS,EAC9C,KAEDquE,qBAAuB,CAACjsD,EAAuB1lB,KAC3CuqB,KAAKsnD,mCACDnsD,EAAuB1lB,EAAa,gBAAgB,EAC3D,KAED8xE,uBAA0BrmB,IACtBlhC,KAAKC,UACDC,IAAS,CACLlY,WAAY,IACLkY,EAAUlY,cACTk5C,EAAU,CAACp7C,MAAO,MAAQ,CAACD,SAAU,QAGpD,EACJ,KAEDi+C,aAAgB5jD,IACZA,EAAOA,GAAQ,CAAC,EAChB8f,KAAKC,UACDC,IACI,MAAM9E,EAAa8E,EAAUlY,WAAWoT,WACxC,MAAO,CACHpT,WAAYrM,OAAOwE,OACf,CAAC,EAAG+f,EAAUlY,WACd,CAACoT,WAAY,IAAIA,EAAY,CACzBvoB,GAAI,KACJ4C,YAAaG,YAA2BwlB,GAAc,EACtD3nB,MAAO,GACPolB,KAAM,CACFhmB,GAAI,KACJ8vD,IAAK,GACLlvD,MAAO,GACPyP,eAAgB,GAChBG,YAAa,CAACR,KAAM,GAAIE,SAAU,KAEtC+V,cAAe5Y,EAAK4Y,eAAiB,KACrCqwD,OAAQ,CACJt2E,GAA0C,UAAtCqtB,EAAUlY,WAAW0B,OAAOpX,MAAoB4tB,EAAUlY,WAAWnV,GAAK,UAI7F,GAER,EACJ,KAED2wD,gBAAmB/tD,IACfuqB,KAAKC,UACDC,IACI,MAAM3qB,EAAI2qB,EAAUlY,WACpB,MAAO,CAACA,WAAYrM,OAAOwE,OACvB,CAAC,EAAG5K,EAAG,CAAC6lB,WAAY7lB,EAAE6lB,WAAW/a,QAAOoH,GAAKA,EAAEhS,cAAgBA,MACjE,GAET,EACJ,KAED+xE,uBAAyB,CAAC/xE,EAAayK,KACnC8f,KAAKC,UACDC,IACI,IAAI9E,EAAa,GACjB,IAAK,IAAI3T,KAAKyY,EAAUlY,WAAWoT,WAC3B3T,EAAEhS,cAAgBA,IAClBgS,EAAI9L,OAAOwE,OAAOsH,EAAGvH,IAEzBkb,EAAWjd,KAAKsJ,GAEpB,MAAO,CAACO,WAAYrM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUlY,WAAY,CAACoT,eAAa,GAEjF,EACJ,KAEDqsD,sBAAwB,SAAC5/D,EAAUxV,GAA0B,IAAnB0G,EAAQhF,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,KAC/CwtB,EAAKtB,SACD,CAAC,CAACpY,GAAWxV,IACb,KACQ0G,GAAWA,GAAU,GAGrC,EAAC,KAED4qD,SAAW,CAACn/C,EAAkBkE,EAAoB+X,KAC9C,MAAM,WAAEzY,GAAegY,KAAKG,MAC5B,IAAKxY,EAAQC,GAAcN,aACvBU,EACAxD,EACAkE,EACO+X,EAAyBC,SACtBva,KACAC,KAEJT,MAGNyjE,EAAmB,CAAC,EACpBC,EAAuB,CAAC,EACxBC,EAAsB,CAAC,EACvBC,EAA0B,CAAC,EAC/B,IAAK7gE,EAAoB,EAEpB0gE,EAAkBC,GAAwBthE,aACvCC,EAAYU,GAEhB,IAAIpC,EAAgB,GACpB,IAAK,IAAImB,KAAKO,EAAWN,WACrBpB,EAAgB,IAAIA,KAAkBmB,EAAEnB,gBAE3CgjE,EAAqBC,GAA2BjhE,aAAiChC,EACtF,CAEA,IAAIxG,EAAuB,GAC3B,IAAK,IAAI2H,KAAKO,EAAWN,WACrB5H,EAAuB,IAAIA,KAAyB2H,EAAE3H,sBAE1D,MAAO0pE,EAA4BC,GAAkCjhE,aACjE1I,EAAsB4I,GAE1B,IAAIsO,EAAe,GACnB,IAAK,IAAI6xD,KAAM/oE,EACXkX,EAAe,IAAIA,KAAiB6xD,EAAG7xD,cAE3C,MAAO0yD,EAAoBC,GAA0BhhE,aAA8BqO,GAEnF,IAAI4yD,EAAuB,CAAC,EACxBC,EAA2B,CAAC,EAChC,IAAKnhE,EAAoB,CAErB,IAAIgS,EAAiB,GACrB,IAAK,IAAImuD,KAAM/oE,EACX4a,EAAiB,IAAIA,KAAmBmuD,EAAGnuD,iBAE9CkvD,EAAsBC,GAA4BhhE,aAAiC6R,EACxF,CAEA,IAAIiqC,EAAmB,CAAC,EACpBmlB,EAAuB,CAAC,GAC3BnlB,EAAkBmlB,GAAwB/gE,aAA4Bf,EAAWoT,YAElF,MAAM2uD,EAAkBpuE,OAAOwE,OAC3B,CACI,WAAa,EACb,SAAW,EACX,SAAW,EACX,gBAAkB,EAClB,WAAa,EACb,YAAc,GACfyH,EAAYyhE,EAAsBE,EACrCE,EAAgCE,EAChCE,EAA0BC,GAgB9B,OAdA9pD,KAAKC,SAAS,CACVrY,WAAYmiE,EACZzE,WAAY,CACRt9D,WAAYL,EACZD,WAAY0hE,EACZ9iE,cAAegjE,EACfxpE,qBAAsB0pE,EACtBxyD,aAAc0yD,EACdhvD,eAAgBkvD,EAChBxuD,WAAYupC,KAKqD,IAAlEhpD,OAAO6nB,OAAOumD,GAAiB1pE,QAAOzN,IAAW,IAANA,IAAYoB,MAAY,EAC7E,KAED0zE,eAAkBv+D,IACd6W,KAAKC,UAAUC,IACX,IAAIvY,EAAShM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUtY,YAEzC,OADAD,EAAOwB,GAAY,KACZ,CAACvB,WAAYD,EAAO,GAC7B,EACL,KAEDggE,+BAAiC,CAAClyE,EAAasD,KACvCinB,KAAKG,MAAMmlD,WAAWxlE,qBAAqBrK,GAC3CuqB,KAAKC,UACDC,IACI,IAAIvY,EAAShM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUolD,WAAWxlE,sBAEpD,cADO6H,EAAOlS,GACP,CAAC6vE,WAAY3pE,OAAOwE,OAAO,CAAC,EAAG+f,EAAUolD,WAAY,CAAC78D,oBAAqBd,IAAS,IAE/F,IAAM5O,MAGVA,GACJ,EACH,KAED6uE,oBAAsB,CAAC5oB,EAAWvpD,EAAaoS,KACvCmY,KAAKG,MAAMmlD,WAAWtmB,GAAWvpD,IAAgBuqB,KAAKG,MAAMmlD,WAAWtmB,GAAWvpD,GAAaoS,IAC/FmY,KAAKC,UAAUC,IACX,IAAIvY,EAAShM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUolD,WAAWtmB,IAEpD,cADOr3C,EAAOlS,GAAaoS,GACpB,CAACy9D,WAAY3pE,OAAOwE,OAAO,CAAC,EAAG+f,EAAUolD,WAAY,CAAC,CAACtmB,GAAYr3C,IAAS,GAE3F,EACH,KAEDkgE,gBAAkB,KACd7nD,KAAKC,SAAS,CACVrY,WAAYs9D,GACZI,WAAYH,IACd,EACL,KAED2C,WAAa,WAAoB,IAAnB/uE,EAAQhF,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,KACnBwtB,EAAKtB,SACD,CAEIjY,WAAY,KACZq9D,cAAc,EACd/5B,UAAU,EAEV1jC,WAAYjM,OAAOwE,OAAO,CAAC,EAAG+kE,IAC9BI,WAAY3pE,OAAOwE,OAAO,CAAC,EAAGglE,IAE9BI,cAAe,KACfC,kBAAmB,CAAC,EACpB2C,QAAS,KACT1C,YAAa,KACbC,qBAAsB,CAAC,EACvBC,6BAA8B,GAC9BC,iCAAkC,CAAC,EACnCC,oCAAqC,CAAC,EACtCC,WAAY,CAAC,EACbjgE,SAAU,GACVkgE,OAAQ,GACRhgE,gBAAiB,GACjBigE,MAAO,KAEX,KACQjtE,GAAYA,GAAW,GAGvC,EAjrBIinB,KAAKG,MAAQ,CAETnY,WAAY,KACZq9D,cAAc,EACd/5B,UAAU,EAEV1jC,WAAYjM,OAAOwE,OAAO,CAAC,EAAG+kE,IAC9BI,WAAY3pE,OAAOwE,OAAO,CAAC,EAAGglE,IAE9BI,cAAe,KACfC,kBAAmB,CAAC,EACpB2C,QAAS,KACT1C,YAAa,KACbC,qBAAsB,CAAC,EACvBC,6BAA8B,GAC9BC,iCAAkC,CAAC,EACnCC,oCAAqC,CAAC,EACtCC,WAAY,CAAC,EACbjgE,SAAU,GACVkgE,OAAQ,GACRhgE,gBAAiB,GACjBigE,MAAO,GAEPC,oBAAqBjmD,KAAKimD,oBAC1BC,+BAAgClmD,KAAKkmD,+BACrCC,cAAenmD,KAAKmmD,cACpBC,eAAgBpmD,KAAKomD,eACrBC,iCAAkCrmD,KAAKqmD,iCACvCC,wBAAyBtmD,KAAKsmD,wBAC9BC,0BAA2BvmD,KAAKumD,0BAChCU,wBAAyBjnD,KAAKinD,wBAC9BT,kBAAmBxmD,KAAKwmD,kBACxBC,0CAA2CzmD,KAAKymD,0CAChDC,4CAA6C1mD,KAAK0mD,4CAClDC,gBAAiB3mD,KAAK2mD,gBACtBC,kBAAmB5mD,KAAK4mD,kBACxBC,mBAAoB7mD,KAAK6mD,mBACzBC,qBAAsB9mD,KAAK8mD,qBAC3BC,cAAe/mD,KAAK+mD,cACpBC,iBAAkBhnD,KAAKgnD,iBACvBE,4BAA6BlnD,KAAKknD,4BAClCC,mBAAoBnnD,KAAKmnD,mBACzBC,qBAAsBpnD,KAAKonD,qBAC3BC,iCAAkCrnD,KAAKqnD,iCACvCC,mCAAoCtnD,KAAKsnD,mCACzCC,uBAAwBvnD,KAAKunD,uBAC7BzjB,aAAc9jC,KAAK8jC,aACnBN,gBAAiBxjC,KAAKwjC,gBACtBgkB,uBAAwBxnD,KAAKwnD,uBAC7BC,sBAAuBznD,KAAKynD,sBAC5B9jB,SAAU3jC,KAAK2jC,SAEf+jB,eAAgB1nD,KAAK0nD,eACrBC,+BAAgC3nD,KAAK2nD,+BACrCC,oBAAqB5nD,KAAK4nD,oBAC1BC,gBAAiB7nD,KAAK6nD,gBACtBC,WAAY9nD,KAAK8nD,WAEzB,CAEAxyC,mBAAmBC,EAAWrV,GACI,OAA1BF,KAAKG,MAAMnY,YAAuB5O,OAAO4wE,gBACzC5wE,OAAO4wE,eAAen2E,iBAE9B,CAmnBAusB,SACI,OACIT,IAAAU,cAAC+kD,GAAqB9kD,SAAQ,CAACjuB,MAAO2tB,KAAKG,OACtCH,KAAKF,MAAMlS,SAGxB,EAIG,MAAMq8D,GAAwB7E,GAAqB7kD,S,cC9wB1D,MAAMkhB,GAAc,CAChBpvC,MAAO,KACPC,MAAO,mBAIX,MAAM43E,WAAyBtqD,YAE3BC,YAAYC,GACRC,MAAMD,GA+CV,KAEAs4B,uBAA0Bl4C,IACtB,MAAM8pE,EAAiBhqD,KAAKF,MAAMkqD,eAClCA,EAAe5xB,uBACXl4C,GACA,KACI8pE,EAAepxC,QAAQytC,kCACnB,IAAMrmD,KAAKC,SAAS,CAChBo2B,gBAAgB,EAChB//B,kBAAmB,MAE1B,GAER,EACJ,KAEDu+C,SAAY1vD,IACR6a,KAAKC,SAAS,CAACo2B,gBAAgB,EAAOvuC,MAAO3C,GAAS,EACzD,KAEDkzC,qBAAwBn4C,IACpB8f,KAAK60C,SACD,kGAAsE,EAC7E,KAEDvc,+BAAkC5uC,IAC9BsW,KAAK60C,SACD,2GAA+EnrD,KAAU,EAChG,KAEDygE,kBAAoB,KAChBnqD,KAAKF,MAAMkqD,eAAe/pD,SAAS,CAACmqD,cAAc,GAAO,EAC5D,KAEDC,2BAA8B1xC,IAC1B,MAAM2xC,EAA+C,SAA9B3xC,EAAMtJ,cAAch9B,MAC3C,IAAI6N,EAAO,CAACqqE,mBAAoBD,GAC5BA,IACApqE,EAAwB,kBAAI,IAEhC8f,KAAKC,SAAS/f,EAAK,EACtB,KAEDsqE,4BAA+Bt0E,IAC3B,IAAIgK,EAAO,CAACwoE,gBAAkBxyE,EAAYE,YAAaF,GAAlB,IAChCA,IACDgK,EAAyB,mBAAI,GAC7BA,EAA0B,qBAAI,GAElC8f,KAAKC,UACDC,IACIhgB,EAAiB,WAAIvE,OAAOwE,OAAO,CAAC,EAAG+f,EAAUolD,WAAY,CAACsD,mBAAoB,GAAIF,gBAAiB,KAChGxoE,IAEd,EACJ,KAEDuqE,gCAAmCvtC,IAC/B,MAAMwtC,EAAYxtC,EAAGiI,OAAO+b,QAC5B,IAAIhhD,EAAO,CAACyoE,oBAAqB+B,GAC5BA,IACDxqE,EAAyB,mBAAIuhC,IAEjCzhB,KAAKC,SAAS/f,EAAK,EACtB,KAED41B,mBAAqB,KACjB9V,KAAKC,SAAS,CAAE0qD,uBAAwB,mBAAmB,EAC9D,KAEDhe,oBAAsB,KAClB3sC,KAAKC,SAAS,CAAE0qD,uBAAwB,MAAO,EAClD,KAEDC,cAAgB,KACZ5qD,KAAKC,SACD,CAACqrB,UAAU,IACX,KACI,MAAO7hC,EAAS9B,GAAUqY,KAAK2jC,WAC3Bl6C,EACAuW,KAAKwqB,SAAWpmB,EACZ,sBAAsBpE,KAAKF,MAAMkqD,eAAepxC,QAAQ5wB,WAAWA,WAAWnV,aAC9E,OACA,CAAC,EACDupB,YAAoB4D,KAAK6lB,UAAW,CAACrqB,UAAU,IAC/CwE,KAAK6qD,0BACL7qD,KAAK8qD,wBACL9qD,KAAK+qD,mCAGT/qD,KAAKC,SAAS,CAACqrB,UAAU,EAAOg6B,WAAY39D,GAChD,GAEP,EACJ,KAEDkjE,0BAA6B3qE,IACzB8f,KAAKwqB,SAAW,KAChBxqB,KAAKF,MAAMkqD,eAAegB,yBACrBhrD,KAAKG,MAAM7J,kBAEP,mFADC,4DAET,EACJ,KAEDw0D,wBAA2B5qE,IACvB8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVnY,MAAO,qFAAyD4W,YAAsBxe,EAAKiF,yEAC3FmmC,UAAU,GACZ,EACL,KAEDy/B,kCAAqCrhE,IACjCsW,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVnY,MAAO,2GAA+E4B,mEACtF4hC,UAAU,GACZ,EApKF,MAAM/1C,EAAIuqB,EAAMkqD,eAAepxC,QAAQ5wB,WACvCgY,KAAKpH,+BAAiCrjB,EAAEqjB,+BAExCoH,KAAKG,MAAO,CACRk2B,gBAAgB,EAChB/K,UAAU,EACVi/B,mBAAoBzqD,EAAMkqD,eAAethE,oBAA8C,KAAxBnT,EAAE+gB,kBACjEA,kBAAmB/gB,EAAE+gB,kBACrBoyD,gBAAiB,GACjBC,qBAAqB,EACrBC,mBAAoBnnC,GACpB35B,MAAO,GACPw9D,WAAY,CAAC,EACbqF,uBAAwB,MAG5B3qD,KAAKwqB,SAAW,IACpB,CAIArR,oBACI,MAAM6wC,EAAiBhqD,KAAKF,MAAMkqD,eAC9BA,EAAeiB,iBACfjB,EAAelyB,WACX,KACA93B,KAAKo4B,uBACLp4B,KAAKq4B,qBACLr4B,KAAKs4B,gCAGTt4B,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBvuC,MAAO,wHAGnB,CAEA08B,uBAE0B,OAAlBxkB,KAAKwqB,UACLxqB,KAAKwqB,SAASI,OAEtB,CA8HA+Y,WACI,MAAM,kBACFrtC,EAAiB,mBACjBi0D,EAAkB,mBAClB3B,EAAkB,gBAClBF,EAAe,oBACfC,GACA3oD,KAAKG,MAET,IAAI1W,GAAU,EACV9B,EAAS,CAAC,EAET4iE,GAAuBj0D,IACxB7M,GAAU,EACV9B,EAA0B,kBAAI,0BAGlC,MAAMujE,EAAQ90E,YAAa,IAAI2O,MA2B/B,OAzBIuR,GAAqBA,GAAqB40D,IAC1CzhE,GAAU,EACV9B,EAA0B,kBAAI,wEAE7B+gE,GAIGC,GAAoD,OAA7BC,EAAmBv2E,QAC1CoX,GAAU,EACV9B,EAA2B,mBAAI,0BAG/BqY,KAAKpH,gCAAkChiB,YAAsBopB,KAAKpH,gCAAkChiB,YAAsB8xE,IAC1Hj/D,GAAU,EACV9B,EAAwB,gBAAI,kPACrB2O,GAAqBoyD,GAAmBpyD,GAC/C7M,GAAU,EACV9B,EAAwB,gBAAI,6FACrB+gE,GAAmBwC,IAC1BzhE,GAAU,EACV9B,EAAwB,gBAAI,sFAhBhC8B,GAAU,EACV9B,EAAwB,gBAAI,0BAmBzB,CAAC8B,EAAS9B,EACrB,CAEAwjE,cACI,OAAO,IAAIpmE,MAAK,IAAIA,MAAO20D,UAAY,MAC3C,CAEA7zB,UACI,MAAM,kBACFvvB,EAAiB,mBACjBsyD,EAAkB,gBAClBF,EAAe,oBACfC,GACA3oD,KAAKG,MAET,IAAIirD,EAOJ,OALIA,EADAzC,EACe,GAAGlyE,YAAiB,IAAIsO,KAAK,IAAIA,KAAK2jE,GAAiB2C,SAASzC,EAAmBv2E,OAAS,UAE5F,GAAGq2E,aAGf,CACH71E,GAAImtB,KAAKF,MAAMkqD,eAAepxC,QAAQ5wB,WAAWnV,GACjDyjB,kBAAmBA,EACnB2D,YAAamxD,EAErB,CAIAhrD,SACI,IAAI1mB,EAAU,KAQd,OANIA,EADAsmB,KAAKG,MAAMk2B,eACD12B,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAAC4Q,SAAS,KAAI,+DAG9Btd,KAAKG,MAAMrY,MAAM9T,OAAS,EAAIgsB,KAAKsrD,cAAgBtrD,KAAKurD,aAI5D5rD,IAAAU,cAACoc,GAAY,CACT9M,QAAS3P,KAAKmqD,mBAEbzwE,EAGb,CAEA4xE,cACI,OACI3rD,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACghB,GAAO,CACJv5B,OAAK,EACLw5B,YAAY,QACZC,aAAcvhB,KAAKG,MAAMrY,QAC7B6X,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKmqD,kBAAmB3gD,SAAO,GAAC,OAIvE,CAEA+hD,aACI,MAAM,kBACFj1D,EAAiB,mBACjBi0D,EAAkB,SAClBj/B,EAAQ,mBACRs9B,EAAkB,gBAClBF,EAAe,oBACfC,GACA3oD,KAAKG,MAEHqrD,EAAuBxrD,KAAKG,MAAMmlD,WAAWoD,iBAAmB,GAChE+C,EAA2BD,EAAqBx3E,OAAS,EACzD03E,EAA0B1rD,KAAKG,MAAMmlD,WAAWsD,oBAAsB,GACtE+C,EAA8BD,EAAwB13E,OAAS,EACrE,IAAI43E,EAAsC,KACtCC,EAAsC,KACtCC,EAAqC,KAEzCF,GAAuC,CAAC,GAAI,MAAMn3E,SAASi0E,IAAoB,qBAC/EmD,EAAsCJ,GAA4B,wBAClEK,EAAsCF,GAAuCC,EAAuC,GAAGD,KAAuCC,IAAyCD,GAAuCC,EAE9O,MAAME,EAAsBpsD,IAAMuc,YAClC,OACIvc,IAAAU,cAAA,OAAKkM,UAAWvM,KAAKG,MAAMwqD,wBACtB3qD,KAAKgsD,yBACJzB,GAAsBvqD,KAAKisD,6BAC7BtsD,IAAAU,cAACyQ,EAAU,CAACM,OAAK,EAACjD,WAAS,EAAC5B,UAAU,qBAClC5M,IAAAU,cAACiY,GAAc,CACX/L,UAAW+e,GAAY,WACvB5zC,SAAUq0E,EACVz5E,MAAM,8BACNw6B,IAAI,SACJnN,IAAAU,cAACwV,EAAY,CACTsB,gBAAiB20C,EACjBliD,SAAU0hB,EACVnd,WAAS,EACTE,QAASo9C,EACTh0C,QAAUnhB,EAAyCvR,KAAK2gB,MAAMpP,GAAhC0J,KAAKmrD,cACnC30C,UAAWu1C,EACX15E,MAAO0S,KAAK2gB,MAAMgjD,GAClBtyC,SAAUpW,KAAKwqD,4BACfz0C,eAAgB/V,KAAK8V,mBACrBsC,gBAAiBpY,KAAK2sC,sBAEzB8e,GAA4B9rD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,yBAAyB24E,IAEzE7rD,IAAAU,cAAA,eACIV,IAAAU,cAACiiC,KAAQ,CACL14B,SAAU0hB,IAAao9B,EACvBp2E,MAAM,yCACN4uD,QAASynB,EACTvyC,SAAUpW,KAAKyqD,gCACfl+C,UAAU,+BAEd5M,IAAAU,cAAC4Y,GAAM,CACH,aAAY,WAAW0yC,EAA8BD,EAAyB,KAC9En/C,UAAWo/C,EAA8B,uCAAyC,gBAClF5yC,WAAYuS,IAAao9B,IAAoBC,EAC7Cn4C,QAAS,CAACiR,IAAe0jB,OAAO,IAAIrpC,MAAM,IAAI1f,QAAQjK,KAAI+5E,IAC/C,CAAC75E,MAAO65E,EAAG55E,MAAO,GAAGwD,YAAoBo2E,aAEpDlgD,YAAY,kBACZiO,mBAAoBA,IAAe,wCACnC5nC,MAAOu2E,EACPxyC,SAAWiG,GAAmBrc,KAAKC,SAAS,CAAC2oD,mBAAoBvsC,IACjEjR,OAAQF,EACRsR,iBAAkBA,IAAM,wBAE3BmvC,GAA+BhsD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAE4jE,MAGnD,CAAC,GAAI,MAAMj3E,SAASi0E,IAAoB/oD,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAAC75B,GAAG,sBAAqB,4WAC7E8sB,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACjI,SAAU0hB,EAAUlc,QAASpP,KAAKmqD,kBAAmBp4C,QAAM,GAAC,0BAC1EpS,IAAAU,cAACwR,EAAY,CAACjI,SAAU0hB,EAAUlc,QAASpP,KAAK4qD,cAAer4C,MAAI,GAAC,mCAIpF,CAEAy5C,wBACI,MAAM,mBAACzB,EAAkB,SAAEj/B,GAAYtrB,KAAKG,MACtCzX,EAAqBsX,KAAKF,MAAMkqD,eAAethE,mBAErD,OACIiX,IAAAU,cAAA,gBACIV,IAAAU,cAACgM,EAAI,CAACS,IAAI,SAASP,UAAU,SAAQ,kDACrC5M,IAAAU,cAAC4gC,KAAK,CACFr3B,SAAUlhB,GAAsB4iC,EAChCj5C,OAAO,EACPgG,KAAK,+BACL6oD,SAAgC,IAAvBqpB,EACTn0C,SAAUpW,KAAKqqD,2BACf/3E,MAAM,mBACNO,GAAG,qBAEP8sB,IAAAU,cAAC4gC,KAAK,CACFr3B,SAAUlhB,GAAsB4iC,EAChCj5C,OAAO,EACPgG,KAAK,+BACL6oD,SAAgC,IAAvBqpB,EACTn0C,SAAUpW,KAAKqqD,2BACf/3E,MAAM,6BAEToW,GAAsBiX,IAAAU,cAACgM,EAAI,CAACE,UAAU,gBAAe,gJAGlE,CAEA0/C,6BACI,MAAMnkE,EAAQkY,KAAKG,MAAMmlD,WAAWhvD,mBAAqB,GACnD61D,EAAYrkE,EAAM9T,OAAS,EAC3Bo4E,EAA4BzsD,IAAMuc,YACxC,OACIvc,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,kBAAkBoF,SAAU00E,EAA2B7/C,UAAWvM,KAAKG,MAAMmrB,UAAY,YAC3G3rB,IAAAU,cAACwV,EAAY,CACTsB,gBAAiBg1C,EAAY,0BAA4B,KACzDviD,SAAU5J,KAAKG,MAAMmrB,SACrBnd,WAAS,EACTE,QAAS89C,EACT10C,QAASzX,KAAKmrD,cACd30C,UAAW41C,EACX/5E,MAAO0S,KAAK2gB,MAAM1F,KAAKG,MAAM7J,mBAC7B8f,SAAWlgC,GAAS8pB,KAAKC,SAAS,CAAC3J,kBAAmBlgB,YAAaF,OACtEi2E,GAAaxsD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,2BAA2BiV,GAGpE,EChbJ,MAAMukE,GAAuBlyC,IAAa,IAAZ,KAACzN,GAAKyN,EAChC,MAAM,KAAEtlB,GAASirB,qBAAWjf,GAE5B,OAAOlB,IAAAU,cAACwiB,GAAgB,CAAC19B,QAASunB,IAC9B7X,EAAK4L,yBAAyBjQ,QACxB,oEACA,qHAGL,ECZT,MAAM87D,WAA0B1sD,YAAUC,cAAA,SAAA9rB,WAAA,KACtCoV,SAAW,EAAG,CAIdgwB,oBACSnZ,KAAKF,MAAMysD,WACZnzE,OAAO49C,SAAS,EAAG,GAIvBh3B,KAAK4Y,QAAQ8uC,eAAe1nD,KAAK7W,UAE7B/P,OAAO4wE,gBACP5wE,OAAO4wE,eAAen2E,iBAE9B,CAEAyhC,mBAAmBC,EAAWrV,GACtB9mB,OAAO4wE,gBACP5wE,OAAO4wE,eAAen2E,iBAE9B,E,cClBJ,MAAM24E,WAA2B5sD,YAE7BC,YAAYC,GACRC,MAAMD,GAwBV,KAEAg4B,WAAa,KACT,MAAM,MAAC1M,EAAK,eAAE7iC,GAAkByX,KAAKF,MAErCE,KAAKF,MAAMmiB,OAAO,CACdpvC,GAAIu4C,EAAQ,KAAO7iC,EAAe1V,GAClC4C,YAAa8S,EAAe9S,YAC5B0lB,sBAAuB6E,KAAKF,MAAM3E,sBAClCrF,mBAAoBkK,KAAKG,MAAMrK,mBAC/BtP,KAAMwZ,KAAKG,MAAM3Z,KAAK9N,QACvB0yC,EAAM,EACZ,KAED++B,kBAAoB,KAChBnqD,KAAKF,MAAM2sD,aAAa,EArCpB3sD,EAAMsrB,MACNprB,KAAKG,MAAQxkB,OAAOwE,OAAO,CAAC,EAAG2f,EAAMvX,eAAgB,CACjDuN,oBAAoB,EACpBtP,KAAM,KAGVwZ,KAAKG,MAAQxkB,OAAOwE,OAAO,CAAC,EAAG2f,EAAMvX,eAE7C,CAIA4wB,oBACI//B,OAAO4wE,eAAen2E,iBAC1B,CAEAyhC,mBAAmBC,EAAWrV,GACtB9mB,OAAO4wE,gBACP5wE,OAAO4wE,eAAen2E,iBAE9B,CAsBAusB,SACI,OACIT,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,SACVqQ,YAAY,wBACZjN,QAAS3P,KAAKmqD,mBAEdxqD,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACiiC,KAAQ,CACLhwD,MAAM,wBACN4uD,QAASlhC,KAAKG,MAAMrK,mBACpBsgB,SAAWuC,GAAU3Y,KAAKC,SAAS,CAACnK,mBAAoB6iB,EAAMwM,OAAO+b,YAEzEvhC,IAAAU,cAAC4pD,GAAqB,MACjB9vC,IAAmB,IAAlB,WAACmrC,GAAWnrC,EACV,MAAM1kC,EAAcuqB,KAAKF,MAAMvX,eAAe9S,YACxCkS,EAAS29D,EAAWh/D,cAAc7Q,IAAgB,CAAC,EACzD,OACIkqB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,OAAOw6B,IAAI,QAAQH,SAAS,0BAC9ChN,IAAAU,cAAC2jB,GAAe,CACZ,oBAAmBr8B,EAAOnB,MAAQ,IAAIxS,OAAS,EAAI,4BAA8B,KACjFgxC,kBAAkB,OAClB0nC,UAAQ,EACRr+C,SAAU1mB,EAAOnB,MAAQ,IAAIxS,OAAS,EACtCm6B,WAAS,EACTgY,UAAW,IACX,gBAAe,IACfF,gBAAc,EACd5zC,MAAO2tB,KAAKG,MAAM3Z,KAClB4vB,SAAWuC,GAAU3Y,KAAKC,SAAS,CAACzZ,KAAMmyB,EAAMwM,OAAO9yC,QACvDqyC,QAAUxH,GAAOld,KAAKC,SAAS,CAACzZ,KAAM,KACtC3T,GAAG,yBACH,aAAY,mDAAgDmtB,KAAKG,MAAM3Z,KAAKxS,uBAC9E2T,EAAOnB,MAAQ,IAAIxS,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,4BAA4B46B,KAAK,SAAS9lB,EAAOnB,MACtF,IAI7BmZ,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKmqD,kBAAmBp4C,QAAM,GAAC,UACtDpS,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAK83B,WAAYvlB,MAAI,GAAEvS,KAAKF,MAAMsrB,MAAQ,QAAU,mBAK/F,EC9EJ,MAAMuhC,WAAmB/sD,YAErBC,YAAYC,GACRC,MAAMD,GAAO,KAgBjB8sD,gBAAkB,KACd5sD,KAAKC,SACD,CACI4sD,qBAAqB,EACrBC,wBAAyB,OAE7B,KACQ1zE,OAAO4wE,gBAAkB5wE,OAAO4wE,eAAen2E,iBAAiB,GAE3E,EACJ,KAEDk5E,yBAA2B,CAAC7sE,EAAMkrC,KAC9B,MAAM3jC,EAAIuY,KAAKF,MAAM1X,WACjBgjC,IAAU3jC,EAAEnB,cAActS,QAC1BgsB,KAAK4Y,QAAQgvC,oBAAoB,aAAcngE,EAAEhS,YAAa,kBAElEuqB,KAAKF,MAAMktD,qBAAqB9sE,EAAMkrC,EAAOprB,KAAK4sD,gBAAgB,EACrE,KAEDK,8BAAiC/vC,IAC7B,IAAI7qC,EAAQ6qC,EAAGiI,OAAO9yC,MACtB2tB,KAAKC,UACDC,KACgC,IAAxB7tB,EAAMiM,QAAQ,MAAejM,EAAM2B,OAAS,KAC5C3B,EAAQ6tB,EAAU7X,mBAEf,CAACA,kBAAmBhW,MAE/B,IAAM2tB,KAAKF,MAAMotD,yBACbltD,KAAKF,MAAM1X,WAAW3S,YAAa,oBAAqBpD,IAC/D,EACJ,KAED86E,4BAA+BjwC,IAC3B,IAAI7qC,EAAQoM,YAAcy+B,EAAGiI,OAAO9yC,OACpC2tB,KAAKC,SACD,CAAC5X,kBAAmBhW,IACpB,IAAM2tB,KAAKF,MAAMotD,yBACbltD,KAAKF,MAAM1X,WAAW3S,YAAa,oBAAqBpD,IAC/D,EACJ,KAED+6E,gCAAmClwC,IAC/B,MAAM70B,EAAoB2X,KAAKG,MAAM9X,kBAC/BglE,EAAyBhlE,EAAkBrU,OAC3CyH,EAAMyhC,EAAGzhC,IACT6pC,EAAWpI,EAAGiI,OAAOI,eAC3B,GAAK,QAAQrnC,KAAKzC,GAIlB,GAAY,MAARA,EAAa,CACb,GAAI4M,EAAkB/J,QAAQ,MAAQ,GAAgC,IAA3B+uE,EAEvC,YADAnwC,EAAGsI,iBAGP,GAAIF,EAAW+nC,EAAyB,EAEpC,YADAnwC,EAAGsI,gBAGX,KAAO,CAGH,MAAMC,EAAYp9B,EAAkB/J,QAAQ,KAE5C,IAAmB,IAAfmnC,GAA+C,KAA3B4nC,EAEpB,YADAnwC,EAAGsI,iBAIP,GAAkB,KAAdC,GAAoBH,GAAY,GAEhC,YADApI,EAAGsI,iBAIHC,GAAa,GAAK4nC,IAA2B5nC,EAAY,GAAKH,EAAWG,GACzEvI,EAAGsI,gBAEX,MA9BItI,EAAGsI,gBA8BP,EACH,KAED8nC,6BAAgCpwC,IAE5BA,EAAGsI,iBAEH,MACMG,GADgBzI,EAAG0I,eAAiBxsC,OAAOwsC,eAChBC,QAAQ,QACrC,sBAAsB3nC,KAAKynC,IAC3B3lB,KAAKC,SAAS,CAAC5X,kBAAmBs9B,GACtC,EACH,KAED4nC,kCAAoC,KAChCvtD,KAAKC,SAAS,CAACutD,YAAY,GAAO,EA7GlCxtD,KAAKG,MAAQ,CACT0sD,qBAAqB,EACrBC,wBAAyB,KACzBU,YAAY,EACZnlE,kBAAmByX,EAAM1X,WAAWC,mBAAqB,GAEjE,CAIAolE,sCAAsCtyD,EAAuB+tD,GACzDlpD,KAAKF,MAAM4tD,uBAAuBxE,GAAgCyE,MAC9D,IAAM3tD,KAAKF,MAAM8tD,0BAA0BzyD,IACnD,CAqGAiF,SAEI,MAAM,mBAAE1X,EAAkB,WAAEw9B,EAAU,yBAAEgnC,GAA6BltD,KAAKF,OACpE,cAAE9J,EAAa,cAAE1P,EAAa,qBAAExG,EAAoB,YAAErK,EAAW,MAAEmQ,GAAUoa,KAAKF,MAAM1X,WACxFylE,EAAiB92E,YAAYuP,GAC7BwnE,EAAiB93D,IAAiB,EAClC+3D,EAASnoE,GAAS,GAGlBgiE,EAAsB5nD,KAAK4Y,QAAQgvC,oBACnCjgE,EAASqY,KAAK4Y,QAAQ0sC,WAAW59D,WAAWjS,IAAgB,CAAC,EAE7Du4E,GAAkBrmE,EAAO/B,OAAS,IAAI5R,OAAS,EAC/Ci6E,EAAU,YAAYx4E,IAEtBy4E,GAA8BvmE,EAAOU,mBAAqB,IAAIrU,OAAS,EACvEm6E,EAAsB,wBAAwB14E,IAEpD,OACIkqB,IAAAU,cAAC+tD,aAAS,CAACC,eAAgBA,IAAO3lE,GAAsBw9B,EAAc,CAAC,EAAIlmB,KAAKF,MAAM8tD,0BAA0Bn4E,IAC5GkqB,IAAAU,cAACgT,EAAS,CAAC53B,IAAKhG,GACZkqB,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKR,cAAY,GAAC,wBAAOtM,KAAKF,MAAM9C,OAC7CgD,KAAKsuD,0BAEV3uD,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,aAAQw6B,IAAI,QAAQH,SAAUshD,GAChDtuD,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkBgqC,EAAiB,cAAgB,KACnD,aAAY,wDAAgDD,EAAO/5E,oBACnE,iBAAe,EACf,gBAAe,GACfgxC,kBAAkB,aAClBiB,gBAAc,EACdrc,SAAUlhB,GAAsBw9B,EAChC/X,WAAS,EACTt7B,GAAIo7E,EACJ5/C,QAAS2/C,EACT7nC,UAAW,GACX9zC,MAAO07E,GAAU,GACjB33C,SAAU8G,GAAMgwC,EACZz3E,EAAa,QAASynC,EAAGiI,OAAO9yC,OAEpCqyC,QAASxH,GAAMgwC,EACXz3E,EAAa,QAAS,MAE7Bu4E,GAAkBruD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,eAAe8U,EAAO/B,QAE5D+Z,IAAAU,cAACiiC,KAAQ,CACL/1B,UAAU,4BACV3C,SAAUlhB,GAAsBw9B,EAChC5zC,MAAM,sCACN4uD,QAAS4sB,EACT13C,SAAU8G,GAAMgwC,EACZz3E,EAAa,gBAAiBynC,EAAGiI,OAAO+b,WAIhDvhC,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKD,eAAa,GAAC,4BAC7BlN,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,sBAAiB5sB,EAAqB9L,QACjD2rB,IAAAU,cAAA,UACKvgB,EAAqB3N,KAAK02E,GAAO7oD,KAAKuuD,0BAA0B1F,OAEnElhE,EAAO7H,sBAAwB,IAAI9L,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEH,EAAO7H,sBAEvE6f,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,cAASw6B,IAAI,QAAQH,SAAUwhD,GACjDxuD,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkB,2BAA0BkqC,EAA6B,2BAA6B,IACtG,gBAAe,GACflpC,kBAAkB,cAClBiB,gBAAc,EACdrc,SAAUsc,EACV/X,WAAS,EACTt7B,GAAIs7E,EACJ9/C,QAAS6/C,EACT/nC,UAAW,GACX9zC,MAAO2tB,KAAKG,MAAM9X,mBAAqB,GACvCs8B,OAAQ3kB,KAAKmtD,4BACbtoC,QAAU3H,GAAO0qC,EAAoB,aAAcnyE,EAAa,qBAChE2gC,SAAUpW,KAAKitD,8BACfvoC,QAAUxH,GAAOld,KAAKC,SAAS,CAAC5X,kBAAmB,KAAK,KACpD6kE,EAAyBz3E,EAAa,oBAAqB,GAAG,IAElE2wC,WAAYpmB,KAAKotD,gCACjB/mC,QAASrmB,KAAKstD,+BAEjBY,GAA8BvuD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,2BAA2B8U,EAAOU,mBAChFsX,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAAC75B,GAAG,2BAA0B,0DAG5C8sB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,kBAClBqtB,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,8BAAyBmhD,EAAe75E,QACnD2rB,IAAAU,cAACyQ,EAAU,CAAChE,IAAI,MACX+gD,EAAe17E,KAAIq8E,GAAMxuD,KAAKyuD,qBAAqBD,OAEtD7mE,EAAOrB,eAAiB,IAAItS,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC6X,IAAAU,cAAA,QAAMkM,UAAU,WAAU,qBAAwB,IAAE5kB,EAAOrB,gBAEtH0Z,KAAK0uD,2BACL1uD,KAAK2uD,iCAItB,CAEAJ,0BAA0B1F,GACtB,MAAM,mBAACngE,EAAkB,WAAEw9B,GAAclmB,KAAKF,MAC9C,IAAImO,EAuBJ,OAtBKvlB,GAAsBsX,KAAKF,MAAM8uD,uBAAuB56E,OAAS,IAClEi6B,EACItO,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,MAAIkM,UAAU,WAAU,gDACxB5M,IAAAU,cAAA,MAAIkM,UAAU,yBACTvM,KAAKF,MAAM8uD,uBAAuBvuE,QAC3B85B,IAAA,IAAE1kC,EAAao5E,GAAY10C,EAAA,OAAK3kC,SAASC,KAAiBD,SAASwqB,KAAKF,MAAM1X,WAAW3S,YAAY,IAAEtD,KACvGooC,IAAA,IAAE9kC,EAAao5E,GAAYt0C,EAAA,OAC/B5a,IAAAU,cAAA,MAAI5kB,IAAKhG,GACLkqB,IAAAU,cAACwR,EAAY,CACTtF,UAAU,iBACV3C,SAAUsc,EACV9W,QAASA,IAAMpP,KAAKytD,sCAAsCh4E,EAAaozE,EAAGpzE,cAAc,qCACpEo5E,GAEvB,OAQrBlvD,IAAAU,cAACyuD,aAAS,CACNC,sBAAoB,EACpBtzE,IAAKotE,EAAGpzE,YACRu5E,eAAgBA,IAAOtmE,GAAsBw9B,EAAc,CAAC,EAAIlmB,KAAKF,MAAM4tD,uBAAuB7E,EAAGpzE,cAErGkqB,IAAAU,cAACyN,EAAG,CACAK,WAAS,EACTrB,IAAI,KACJ4B,kBAAmB1O,KAAK4Y,QAAQgtC,iCAAiCiD,EAAGniE,YAAc,IAClF6nB,SAAUvO,KAAK4Y,QAAQitC,oCAAoCgD,EAAGliE,eAAiB,IAC/EsnB,YAAaA,EACbF,qBAAqB,qCAErBpO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACmd,GAAQ,KACL7d,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAas8C,EAAGriE,SAMxD,CAEA8nE,yBACI,OAAItuD,KAAKF,MAAMpX,mBAA6B,KACxCsX,KAAKG,MAAMqtD,WACPxtD,KAAKF,MAAM1X,WAAWtI,qBAAqB9L,OAEvC2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAQ,wGACzB9N,IAAAU,cAACwR,EAAY,CAACzC,QAASA,IAAMpP,KAAKC,SAAS,CAACutD,YAAY,IAAQhkD,SAAO,GAAC,OAKhF7J,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,SACVqQ,YAAY,uIACZjN,QAAS3P,KAAKutD,mCAEd5tD,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKutD,kCAAmCx7C,QAAM,GAAC,UACtEpS,IAAAU,cAACwR,EAAY,CAACzC,QAASA,IAAMpP,KAAKF,MAAMmvD,mBAAmBjvD,KAAKF,MAAM1X,WAAW3S,aAAc48B,QAAM,GAAC,eAOlH1S,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACwR,EAAY,CACTjI,SAAU5J,KAAKF,MAAMomB,YAAclmB,KAAKF,MAAM1X,WAAWtI,qBAAqB9L,OAAS,EACvFq+B,QAAM,EACNjD,QAASA,IAAMpP,KAAKC,SAAS,CAACutD,YAAY,KAAQ,gDAKlE,CAEAiB,qBAAqBlmE,GACjB,MAAM29B,EAAalmB,KAAKF,MAAMomB,WAC9B,OACIvmB,IAAAU,cAACyN,EAAG,CAACryB,IAAK8M,EAAe9S,YAAaq3B,IAAI,MACrCnxB,OAAOS,KAAK4jB,KAAK4Y,QAAQ0sC,WAAWh/D,cAAciC,EAAe9S,cAAgB,CAAC,GAAGzB,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC6X,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAM,CAAEA,KAAM,UAAWW,KAAM,UAAYv4B,MAAO,CAACs4B,YAAa,KAAMxQ,IAAAU,cAAA,QAAMkM,UAAU,UAAS2iD,WAAS,EAACC,QAAM,EAACC,SAAO,IAAS,qBACzQzvD,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,wBAClBqtB,IAAAU,cAACgM,EAAI,KAAE9jB,EAAeuN,mBAAqB,MAAQ,QAEvD6J,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAahkB,EAAe/B,MAAQ,OAEtDwZ,KAAKF,MAAMpX,oBACTiX,IAAAU,cAACyQ,EAAU,CAACK,SAAO,EAACk+C,oBAAoB,0BACpC1vD,IAAAU,cAACwR,EAAY,CACTjI,SAAUsc,EACV7T,QAAM,EACNjD,QAASA,IAAMpP,KAAKF,MAAMwvD,uBACtBtvD,KAAKF,MAAM1X,WAAW3S,YAAa8S,EAAe9S,cACpD,aAGNkqB,IAAAU,cAACwR,EAAY,CACTjI,SAAUsc,EACVlU,MAAI,EACJ5C,QAASA,IAAMpP,KAAKC,SAChB,CAAC6sD,wBAAyBvkE,EAAe9S,eAC3C,SACKkG,OAAOS,KAAK4jB,KAAK4Y,QAAQ0sC,WAAWh/D,cAAciC,EAAe9S,cAAgB,CAAC,GAAGzB,OAAS,GAAK2rB,IAAAU,cAAA,QAAMkM,UAAU,WAAU,uDAM5J,CAEAmiD,2BACI,GAAI1uD,KAAKF,MAAMpX,qBAAwBsX,KAAKG,MAAM0sD,qBACP,OAAvC7sD,KAAKG,MAAM2sD,wBAAqC,OAAO,KAE3D,MAAM,wBACFA,EAAuB,oBACvBD,GACA7sD,KAAKG,MAEH1Y,EAAIuY,KAAKF,MAAM1X,WAErB,IAAIomE,EAOJ,OALIA,EADA3B,EACK,CAACp3E,YAAauqB,KAAKF,MAAMyvD,8BAAgC,GAEzD9nE,EAAEnB,cAAcjG,QAAOykB,GAAKA,EAAErvB,cAAgBq3E,IAAyB,GAGzEntD,IAAAU,cAACmsD,GAAkB,CACdphC,MAAOyhC,EACPtkE,eAAgBimE,EAChBrzD,sBAAuB1T,EAAEhS,YACzBg3E,YAAazsD,KAAK4sD,gBAClB3qC,OAAQjiB,KAAK+sD,0BAC7B,CAEA4B,gCACI,GAAI3uD,KAAKF,MAAMpX,oBAAsBsX,KAAKG,MAAM0sD,oBAAuB,OAAO,KAC9E,MAAM,YAAEp3E,GAAgBuqB,KAAKF,MAAM1X,WAC7BT,EAASqY,KAAK4Y,QAAQ0sC,WAAW59D,WAAWjS,IAAgB,CAAC,EACnE,OAAOkqB,IAAAU,cAACwR,EAAY,CACRC,KAAG,EACHlI,SAAU5J,KAAKF,MAAMomB,WACrB9W,QAASA,IAAMpP,KAAKC,SAAS,CAAC4sD,qBAAqB,EAAMC,wBAAyB,QAAQ,mBACzEnlE,EAAOrB,eAAiB,IAAItS,OAAS,GAAK2rB,IAAAU,cAAA,QAAMkM,UAAU,WAAU,IAAE5kB,EAAOrB,eAE9G,EAIJqmE,GAAW7lB,YAAcse,GCjYzB,MAAMoK,WAA2BlD,GAG7BzsD,YAAYC,GACRC,MAAMD,GAAO,KAHjB3W,SAAW,iBAOX,KAEAsmE,yCAA4CvyC,IACxC,MAAMrnB,EAA4D,SAA3BqnB,EAAG7N,cAAch9B,MACxD2tB,KAAK4Y,QAAQ4tC,kBACT,iCAAkC3wD,EAA+B,EACxE,KAED65D,+BAAkCj6E,GACvB,IAAIk6E,SAAQ,CAACC,EAASC,KACzB7vD,KAAKC,SAAS,CAAC6vD,mBAAoBr6E,GAAcm6E,IAAU,IAElE,KAEDG,8BAAiC50D,IAC7B6E,KAAK4Y,QAAQquC,wBACT9rD,EACA6E,KAAKG,MAAM2vD,oBACX,IAAM9vD,KAAKC,SAAS,CAAC6vD,mBAAoB,QAC5C,EAtBD9vD,KAAKG,MAAQ,CAAC2vD,mBAAqB,KACvC,CA0BA1vD,SACI,MAAM,mBAAE1X,EAAkB,UAAE6jE,GAAcvsD,KAAKF,MACzComB,EAAaqmC,GAAavsD,KAAK4Y,QAAQysC,cAAgBrlD,KAAK4Y,QAAQ0S,SACpE/1C,EAAIg3E,EAAY,CAAC,EAAIvsD,KAAK4Y,QAAQ5wB,WAClC6N,GAAiC02D,GAAoBh3E,EAAEsgB,+BACvDm6D,EAAgDn6D,GAAkCtgB,EAAEmS,WAAW1T,OAAS,EACxGi8E,EAAgBvnE,GAAsBw9B,GAAc8pC,EAE1D,OACIrwD,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC6vD,GAAa,CAACr5D,MAAM,kCAAkCnd,QAASsmB,KAAKF,MAAMqwD,uBAC1EznE,GAAsBiX,IAAAU,cAACgsD,GAAoB,MAC5C1sD,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAAA,gBACIV,IAAAU,cAACgM,EAAI,CAACS,IAAI,SAASP,UAAU,SAAQ,gDACrC5M,IAAAU,cAAC4gC,KAAK,CACF5uD,OAAO,EACPu3B,SAAUqmD,EACV53E,KAAK,2CACL6oD,SAA4C,IAAnCrrC,EACTugB,SAAUpW,KAAKyvD,yCACfn9E,MAAM,MACN,aAAW,mDACXO,GAAG,aAEP8sB,IAAAU,cAAC4gC,KAAK,CACF5uD,OAAO,EACPu3B,SAAUqmD,EACV53E,KAAK,2CACL6oD,SAA4C,IAAnCrrC,EACTugB,SAAUpW,KAAKyvD,yCACfn9E,MAAM,MACN,aAAW,wDAGjBoW,GAAsBsnE,GACpBrwD,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,+FAGlB1M,KAAKowD,iBAAiBlqC,GAEvBvmB,IAAAU,cAAC+zB,GAAK,CACFxqB,SAAUsc,EACVmO,kBAAmBr0B,KAAKF,MAAMu0B,kBAC9B3F,SAAO,EACPD,SAAO,EACPgG,UAAU,iBACVF,UAAU,UACVC,YAAaA,IAAMx0B,KAAKF,MAAMuwD,wBAAwB,aACtD/7B,YAAaA,IAAMt0B,KAAKF,MAAMuwD,wBAAwB,aAItE,CAEAD,iBAAiBlqC,GACb,IAAKlmB,KAAKF,MAAMysD,WAAavsD,KAAK4Y,QAAQ5wB,WAAWN,WAAW1T,OAAQ,CACpE,MAAM0U,EAAqBsX,KAAKF,MAAMpX,oBAChC,+BACFmN,EAA8B,WAC9BnO,GACAsY,KAAK4Y,QAAQ5wB,WACX4mE,EAAyBlnE,EAAWvV,KAAI,CAACsV,EAAG3S,IAAM,CAAC2S,EAAEhS,YAAaX,EAAI,KAC5E,OACI6qB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,0CAA2BhlB,EAAW1T,QACjD2rB,IAAAU,cAAA,UACKtpB,YAAY2Q,GAAYvV,KAAI,CAACsV,EAAG3S,IAC7B6qB,IAAAU,cAACssD,GAAU,CACPjkE,mBAAoBA,EACpBw9B,WAAYA,EACZzqC,IAAKgM,EAAEhS,YACPunB,MAAOloB,EAAI,EACXy6E,8BAA+Br6E,YAC3BwS,EAAY,iBAChBU,WAAYX,EACZmnE,uBAAwBA,EACxB1B,yBAA0BltD,KAAK4Y,QAAQsuC,4BACvC8F,qBAAsBhtD,KAAK4Y,QAAQuuC,mBACnCmI,uBAAwBtvD,KAAK4Y,QAAQwuC,qBACrC6H,mBAAoBjvD,KAAK4Y,QAAQouC,iBACjC0G,uBAAwB1tD,KAAK0vD,+BAC7B9B,0BAA2B5tD,KAAK+vD,oCAG1CrnE,GAAsBmN,GACpB8J,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACjI,SAAUsc,EAAY9W,QAASpP,KAAK4Y,QAAQmuC,cAAej1C,KAAG,GAAC,6CAKjG,CAAO,OAAK9R,KAAK4Y,QAAQ0sC,WAAWt9D,WAAWhC,0BAA4B,IAAIhS,OACpE2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,2GACR,IACnB,EAIJ0nE,GAAmB1oB,YAAcse,G,aC9I1B,MCUDkL,GACF,iFACEC,GACF,2DACEC,GACF,+EACEC,GACF,yDACEC,GACF,sFAuPEC,ID1QgCC,GCsBX9wD,IAEvB,SAAS+wD,EAAwB5nE,GAC7B,OAAO0C,aAAa1C,EAAY,gBACpC,CAEA,MAAM,mBAAEP,EAAkB,UAAE6jE,EAAS,iBAAE/nE,GAAqBsb,GAEtD,KAAEjL,GAASirB,qBAAWjf,IACtB,yBAAEJ,GAA6B5L,EAC/B+jB,EAAUkH,qBAAWslC,KACrB,OACFW,EACA/9D,WAAYzS,EAAC,gBACbwQ,EAAe,SACfF,EAAQ,kBACR2gE,GACA5tC,EAEEsN,EAAaqmC,GAAa3zC,EAAQysC,cAAgBzsC,EAAQ0S,SAE1D3jC,EAASixB,EAAQ0sC,WAAWt9D,WAC5B8oE,EAAmBvE,EAAY,GAAKx1E,YAAYxB,EAAEwQ,iBAElDgrE,GAAqBppE,EAAO9B,UAAY,IAAI7R,OAAS,EACrDg9E,GAAwBrpE,EAAO7B,OAAS,IAAI9R,OAAS,EACrDi9E,GAAkBtpE,EAAO/B,OAAS,IAAI5R,OAAS,EAC/Ck9E,GAA4BvpE,EAAO5B,iBAAmB,IAAI/R,OAAS,EAEzE,IAAI4R,EAAQ,GACRmV,EAA0B,GAC1BJ,EAAqB,GACpB4xD,IACD3mE,EAAQrQ,EAAEqQ,MACV+U,EAAqBplB,EAAEolB,mBACvBI,EAA0BxlB,EAAEwlB,yBAGhC,MAAM,SAAE2F,GAAaD,EAEf0wD,EAA8BjrC,GAC/Bx9B,GAAsBgY,EACrB0wD,EAAyBlrC,GAC1Bx9B,GAAsB+X,EAAyBjQ,QAEpD,OACImP,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC6vD,GAAa,CAACr5D,MAAM,2BAA2Bnd,QAASomB,EAAMqwD,uBAC9DznE,GAAsBiX,IAAAU,cAACgsD,GAAoB,MAC5C1sD,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,yBAClBqtB,IAAAU,cAACgN,IAAU,CAACN,IAAI,YAAYD,IAAI,MAAMy/C,EAAY,IAAMh3E,EAAEyS,WAAWgQ,OAAS,MAElF2H,IAAAU,cAACiiC,KAAQ,CACLpB,QAAS18C,EACTolB,SAAUunD,EACV7+E,OAAUouB,EAAW,MAAQ,2BAAtB,WACP0V,SAAUtW,EAAMuxD,2BAEpB1xD,IAAAU,cAACyQ,EAAU,CAACkiB,QAAM,EAAC7kB,WAAS,EAAC+C,YAAU,GAClC1sB,GACGmb,IAAAU,cAACiY,GAAc,CACX,aAAY5vB,EACN,oFACA,YAAa7C,EAAS7R,OAElB,GADC0sB,EAAW4vD,GAAkBC,MAEhCQ,EAAoBppE,EAAO9B,SAAW,KAE9CvT,MAAM,WACN6E,UAAWwoB,IAAMuc,YACjBpP,IAAI,SAEJnN,IAAAU,cAAC4Y,GAAM,CACH1M,UAAWwkD,EAAoBl/E,IAA2BD,IAC1D0/E,mBAAmB,EACnBC,aAAchF,EAAY,GAAK1mE,EAASxF,QACpCnE,GAAK3G,EAAEsQ,SAASpR,SAASe,SAAS0G,EAAErJ,OACtCV,KAAI+J,IAAC,CAAM7J,MAAO6J,EAAErJ,GAAIP,MAAO4J,EAAEsgE,cACnCzjC,WAAYo4C,EACZn5C,aAAa,EACbc,SAAO,EACPD,cAAY,EACZ2D,iBAAkBA,IAAM,sBACxBhM,QACIqgD,EAAwBhrE,GACnB1T,KAAI+J,IAAC,CAAM7J,MAAO6J,EAAErJ,GAAIP,MAAO4J,EAAEsgE,cAE1CxwC,YAAY,aACZiO,mBAAoBA,IAAe,8EACnC7O,OAAQF,EACRkL,SAAUphC,GAAmBwxE,EACzB,WAAgC,OAApBxxE,EAA2B,GAAK,IAAIA,GAAiB7C,KAAIq5B,GAAUh2B,SAASg2B,EAAOn5B,aAGrGwT,EAAS7R,QACP2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,oBACV6tB,EAAW4vD,GAAkBC,IAGrCQ,GAAqBpxD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEH,EAAO9B,YAGhDrB,GACEmb,IAAAU,cAACiY,GAAc,CACX,aAAY5vB,EACN,gEACA,YAAUq9D,EAAO/xE,OAEb,GADC0sB,EAAW8vD,GAAqBC,MAEnCO,EAAuBrpE,EAAO7B,MAAQ,KAE9CxT,MAAM,WACN6E,UAAWwoB,IAAMuc,YACjBpP,IAAI,SAEJnN,IAAAU,cAAC4Y,GAAM,CACH1M,UAAWykD,EAAuBn/E,IAA2BD,IAC7D0/E,mBAAmB,EACnBC,aAAehF,GAAyB,OAAZh3E,EAAEuQ,MAAkB,KAC5CigE,EAAO1lE,QAAO7H,GAAKjD,EAAEuQ,MAAMzT,QAAUmG,EAAE3F,KAClCV,KAAI+J,IAAC,CAAM7J,MAAO6J,EAAErJ,GAAIP,MAAO4J,EAAEsgE,cAE1CzjC,WAAYo4C,EACZn5C,aAAa,EACba,cAAY,EACZ2D,iBAAkBA,IAAM,sBACxBhM,QACIqgD,EAAwB9K,GACnB5zE,KAAIqG,IAAC,CAAMnG,MAAOmG,EAAE3F,GAAIP,MAAOkG,EAAEgkE,cAE1CxwC,YAAY,aACZiO,mBAAoBA,IAAe,wCACnC7O,OAAQF,EACRkL,SAAUiG,GAAkBmqC,EAAkB,QAASnqC,MAEzD0pC,EAAO/xE,QACL2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GACN4Y,EAAW8vD,GAAqBC,IAGxCO,GAAwBrxD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEH,EAAO7B,SAIzD6Z,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,aAAQw6B,IAAI,QAAQH,SAAS,YAC/ChN,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkBitC,EAAiB,cAAgB,KACnD,aAAY,0DAAkDrrE,EAAM5R,oBACpE,gBAAe,IACfiyC,gBAAc,EACdjB,kBAAkB,aAClBpb,SAAUsc,EACV/X,WAAS,EACTt7B,GAAG,WACHw7B,QAAS4iD,EACT9qC,UAAW,IACXumC,UAAQ,EACRr6E,MAAOuT,EACPwwB,SAAU8G,GAAMspC,EAAkB,QAAStpC,EAAGiI,OAAO9yC,OACrDqyC,QAASxH,GAAMspC,EAAkB,QAAS,MAC7CyK,GAAkBtxD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,eAAe8U,EAAO/B,QAE5D+Z,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,wCACNq6B,SAAS,6BACTG,IAAI,SAEJnN,IAAAU,cAAC2jB,GAAe,CACZ,aAAYt7B,EACN,yFACA,qFAAqEqS,EAAwB/mB,oBAEnG,gBAAe,IACfiyC,gBAAc,EACdjB,kBAAkB,wCAClBpb,SAAUlhB,GAAsBw9B,EAChC/X,WAAS,EACTt7B,GAAG,6BACHszC,UAAW,IACXumC,UAAQ,EACRr6E,MAAO0oB,EACPqb,SAAU8G,GAAMspC,EAAkB,0BAA2BtpC,EAAGiI,OAAO9yC,OACvEqyC,QAASxH,GAAMspC,EAAkB,0BAA2B,OAEpE7mD,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,uBACNq6B,SAAS,wBACTG,IAAI,SAEJnN,IAAAU,cAAC2jB,GAAe,CACZ,aAAYt7B,EACN,wEACA,oEAAiEiS,EAAmB3mB,oBAE1F,gBAAe,IACfgxC,kBAAkB,uBAClBiB,gBAAc,EACdrc,SAAUlhB,GAAsBw9B,EAChCrzC,GAAG,wBACHs7B,WAAS,EACTgY,UAAW,IACXumC,UAAQ,EACRr6E,MAAOsoB,EACPyb,SAAU8G,GAAMspC,EAAkB,qBAAsBtpC,EAAGiI,OAAO9yC,OAClEqyC,QAASxH,GAAMspC,EAAkB,qBAAsB,OAE/D7mD,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,oBAAoBw6B,IAAI,QAAQ31B,UAAWwoB,IAAMuc,aACnEvc,IAAAU,cAAC4Y,GAAM,CACH,aAAY,qBAAsBlzB,EAAgB/R,OAAyB,GAAhB08E,MAAsBQ,EAA2BvpE,EAAO5B,gBAAkB,KACrIwmB,UAAW2kD,EAA2B,EAAIr/E,IAA2BD,IACrE0/E,mBAAmB,EACnBC,aAAcxrE,EAAgB1F,QAAO9K,GAAKu7E,EAAiBr8E,SAASc,EAAE1C,MAAKV,KACvEoD,IAAC,CAAMlD,MAAOkD,EAAE1C,GAAIP,MAAOiD,EAAEsN,KAAO,IAAMtN,EAAEwN,aAChDi1B,aAAa,EACbe,WAAYq4C,EACZt4C,SAAO,EACPD,cAAY,EACZ2D,iBAAkBA,IAAM,sBACxBhM,QAASzqB,EAAgB5T,KAAIoD,IAAC,CAAMlD,MAAOkD,EAAE1C,GAAIP,MAAOiD,EAAEsN,KAAO,IAAMtN,EAAEwN,aACzEipB,YAAY,aACZiO,mBAAoBA,IAAe,8EACnC7O,OAAQF,EACRkL,SAAUphC,GAAmBwxE,EACzB,kBAAuC,OAApBxxE,EAA2B,GAAK,IAAIA,GAAiB7C,KAAIq5B,GAAUA,EAAOn5B,YAEnG0T,EAAgB/R,QAAU2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAE4oE,IACxCQ,GAA4BvxD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEH,EAAO5B,mBAGzD4Z,IAAAU,cAAC+zB,GAAK,CACFxqB,SAAUsc,EACVmO,kBAAmBv0B,EAAMu0B,kBACzB3F,SAAO,EACPD,SAAO,EACPgG,UAAU,uBACVF,UAAU,8BACVC,YAAaA,IAAM10B,EAAMuwD,wBAAwB,cACjD/7B,YAAaA,IAAMx0B,EAAMuwD,wBAAwB,oBAEtD,EDtQ0ClnE,GC0QU,YDxQnD2W,IACJ,MAAM8Y,EAAUkH,qBAAWslC,IAoB3B,OAlBA5sC,qBAAU,KACD1Y,EAAMysD,WACPnzE,OAAO49C,SAAS,EAAG,GAIvBpe,EAAQ8uC,eAAev+D,IAEnB/P,OAAO4wE,gBACP5wE,OAAO4wE,eAAen2E,kBAEnB,KACCuF,OAAO4wE,gBACP5wE,OAAO4wE,eAAen2E,iBAC1B,IAEL,IAEI8rB,IAAAU,cAACuwD,GAAkB9wD,EAAS,GAvBN0xD,IAACZ,GAAeznE,GECrD,MAAMsoE,WAAmB7xD,YAErBC,YAAYC,GACRC,MAAMD,GACN,MAAM4xD,EAAU5xD,EAAM4xD,QAAU1xD,KAAK2xD,oBAAuB7xD,EAAMgZ,QAAU,GAAK,KACjF9Y,KAAKG,MAAQ,CACTyxD,YAAaF,EACbG,iBAAkB,GAClBC,kBAAkB,EAClB51B,aAAcw1B,EACdv1B,sBAAsB,EACtB/R,WAAY,IAGhBpqB,KAAK+sB,UAAY,EAEjB/sB,KAAKwqB,SAAW,KAChBxqB,KAAKo8B,WAAa,KAElBp8B,KAAK+xD,wBAA0B/xD,KAAK+xD,wBAAwB1tC,KAAKrkB,MACjEA,KAAK42B,mBAAqB52B,KAAK42B,mBAAmBvS,KAAKrkB,MACvDA,KAAK62B,iBAAmB72B,KAAK62B,iBAAiBxS,KAAKrkB,MACnDA,KAAK82B,2BAA6B92B,KAAK82B,2BAA2BzS,KAAKrkB,MACvEA,KAAKgyD,iBAAmBhyD,KAAKgyD,iBAAiB3tC,KAAKrkB,MACnDA,KAAKiyD,mBAAqBjyD,KAAKiyD,mBAAmB5tC,KAAKrkB,MACvDA,KAAKkyD,gBAAkBlyD,KAAKkyD,gBAAgB7tC,KAAKrkB,KACrD,CAIAwkB,uBAE0B,OAAlBxkB,KAAKwqB,UACLxqB,KAAKwqB,SAASI,QAIM,OAApB5qB,KAAKo8B,YACL3X,aAAazkB,KAAKo8B,WAE1B,CAIA21B,wBAAwB/3C,GACI,OAApBha,KAAKo8B,aACL3X,aAAazkB,KAAKo8B,YAClBp8B,KAAKo8B,WAAa,MAGlBpiB,EAAWhmC,OAAS,IAAMgmC,EAAWhmC,OAAS,IAAM,2HAAqCkK,KAAK87B,IAC9Fha,KAAKC,SAAS,CACV6xD,kBAAkB,EAClB51B,aAAc,GACdC,sBAAsB,EACtB/R,WAAY,MAGhBpqB,KAAK+sB,YACL/sB,KAAKo8B,WAAaxX,YAAW,KACzB5kB,KAAKC,SACD,CAACi8B,aAAc,GAAIC,sBAAsB,EAAO/R,WAAY,KAC5D,KAEIpqB,KAAKwqB,SAAWpmB,EACZ,wBACA,MACA,CAAC,EACD,CAAC+tD,WAAYn4C,EAAYyiB,WAAYz8B,KAAK+sB,WAC1C/sB,KAAK42B,mBACL52B,KAAK62B,iBACL72B,KAAK82B,2BACR,GAER,GACF,KAEX,CAEAF,mBAAmB12C,GAGf,GAFA8f,KAAKwqB,SAAW,KAEZh1C,SAAS0K,EAAKu8C,YAAcz8B,KAAK+sB,UAEjC,OAEJ,IAAImP,EAAe9/B,YAAoBlc,GAAM0G,SAAW,GACpDs1C,EAAaloD,QAAUgsB,KAAKF,MAAMsyD,UAClCl2B,EAAeA,EAAa77C,QACxBmrB,IAAWxL,KAAKF,MAAMsyD,QAAQ39E,SAAS+2B,EAAO34B,OAEtDmtB,KAAKC,SAAS,CACV6xD,kBAAkB,EAClB51B,aAAcA,EAAa/pD,KACvBq5B,IAAM,CACFn5B,MAAOm5B,EAAO34B,GACdqN,KAAM,CAACrN,GAAIw/E,OAAO7mD,EAAO34B,IAAKykB,IAAKkU,EAAOlU,IAAK7jB,MAAO+3B,EAAO/3B,OAC7DnB,MAAO,GAAGk5B,EAAOlU,OAAOkU,EAAO/3B,YAGvC0oD,qBAAsBj8C,EAAKshB,KAAKo7B,UAAY,GAEpD,CAEA/F,iBAAiB32C,GACb8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVmqB,WAAY,qDAAmClqC,EAAKiF,WAE5D,CAEA2xC,2BAA2BptC,GACvBsW,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVmqB,WAAY,8GAAwE1gC,MAE5F,CAEAsoE,iBAAiB90C,GACbld,KAAKC,SAAS,CAAC6xD,kBAAkB,GACrC,CAEAG,mBAAmB51C,GACf,IAAIu1C,EAEAA,EADA5xD,KAAKF,MAAMgZ,SACIuD,GAAkB,IAAIlqC,KAAIoD,GAAKA,EAAE2K,OAElCm8B,EAAen8B,KAEjC8f,KAAKC,SACD,CACI6xD,kBAAkB,EAClBF,gBAEJ,KACS5xD,KAAKF,MAAM8vC,aACZ5vC,KAAKF,MAAMwyD,UAAUtyD,KAAKG,MAAMyxD,YACpC,GAGZ,CAEAM,gBAAgBv5C,GACP3Y,KAAK2jC,YACV3jC,KAAKF,MAAMwyD,UAAUtyD,KAAKG,MAAMyxD,YACpC,CAIAD,oBACI,MAAMD,EAAU1xD,KAAKF,MAAM4xD,QAC3B,OAAI1xD,KAAKF,MAAMgZ,QACJ44C,EAAQv/E,KAAI2C,IACR,CACHzC,MAAOmD,SAASV,EAAEjC,IAClBqN,KAAMpL,EACNxC,MAAO,GAAGwC,EAAEwiB,OAAOxiB,EAAErB,YAGtB,CACHpB,MAAOmD,SAASk8E,EAAQ7+E,IACxBqN,KAAMwxE,EACNp/E,MAAO,GAAGo/E,EAAQp6D,OAAOo6D,EAAQj+E,QAG7C,CAEAkwD,WAGI,OADA3jC,KAAKC,SAAS,CAAC4xD,iBAAkB,KACF,OAA3B7xD,KAAKG,MAAMyxD,cACX5xD,KAAKC,SAAS,CAAC4xD,iBAAkB,4BAC1B,EAGf,CAIAzxD,SACI,MAAM,WACFgqB,EAAU,aACV8R,EAAY,qBACZC,EAAoB,YACpBy1B,EAAW,iBACXC,EAAgB,iBAChBC,GACA9xD,KAAKG,MACHoyD,EAAkBV,EAAiB79E,OAAS,EAC5C6oD,EAA2B,2HACjC,OACIl9B,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,UAAUw6B,IAAI,QAAQ31B,UAAWwoB,IAAMuc,aACxDigB,GAAwBx8B,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAEmwB,GACrCl9B,IAAAU,cAAC4Y,GAAM,CACHgB,mBAAoBA,IAAe,wCACnCs3C,aAAcK,EACd94C,QAAS9Y,KAAKF,MAAMgZ,UAAW,EAC/BiB,WAAY+3C,EACZthD,QAAS0rB,EACTlwB,YAAY,2CACZZ,OAAQF,EACRqB,UAAWgmD,EAAkB,uCAAyC,gBACtE5tC,OAAQ3kB,KAAKgyD,iBACb57C,SAAUpW,KAAKiyD,mBACfh1B,cAAej9B,KAAK+xD,wBACpB92C,WAAY,CACRD,kBAAmBA,IAAM,KACzB8hB,mBAAoBA,IAAM,MAE9BtgB,iBAAkBA,IAAM,sBACxB,aAAY,mDAAmD2f,EAAuBU,EAA2B,MAAM01B,EAAkBV,EAAmB,MAAMznC,EAAWp2C,OAAS,EAAIo2C,EAAa,OAE1MmoC,GAAmB5yD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,kBAAkBg/E,GACpDznC,EAAWp2C,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,wBAAwBu3C,IAEpEpqB,KAAKF,MAAM8vC,aAAe5vC,KAAKwyD,gBAG5C,CAEAA,gBACI,MAAMC,EAA+C,OAA3BzyD,KAAKG,MAAMyxD,YACrC,OACIjyD,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CACTE,QAAM,EACN3C,QAASpP,KAAKF,MAAM4yD,gBACvB,SAAM/yD,IAAAU,cAAA,QAAMkM,UAAU,WAAU,wBACjC5M,IAAAU,cAACwR,EAAY,CACTC,KAAM2gD,EACN7oD,SAAU6oD,EACV5/E,GAAG,mCACHu8B,QAASpP,KAAKkyD,iBACjB,QAAKvyD,IAAAU,cAAA,QAAMkM,UAAU,WAAU,aAAWkmD,GAAqB,iEAG5E,EC/OJ,MAAME,WAAgB/yD,YAElBC,YAAYC,GACRC,MAAMD,GAAO,KAuBjB8yD,mBAAqB,KACjB5yD,KAAKC,SAAS,CAAC4yD,UAAU,EAAOjB,YAAa,MAAM,EAvBnD5xD,KAAKG,MAAQ,CACT0yD,UAAU,EACVjB,YAAa,MAGjB5xD,KAAKkyD,gBAAkBlyD,KAAKkyD,gBAAgB7tC,KAAKrkB,MACjDA,KAAK8yD,mBAAqB9yD,KAAK8yD,mBAAmBzuC,KAAKrkB,KAC3D,CAIAkyD,gBAAgBa,GACZ/yD,KAAKC,SACD,CAAC4yD,UAAU,IACX,IAAM7yD,KAAKF,MAAMwyD,UAAUS,IAEnC,CAEAD,mBAAmBjgB,GACf7yC,KAAKF,MAAMkzD,aAAangB,EAC5B,CAQAzyC,SACI,MAAMxZ,EAAUoZ,KAAKF,MAAMlZ,QAC3B,OACI+Y,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,wBAAmB9lB,EAAQ5S,QACtC2rB,IAAAU,cAAA,UACKzZ,EAAQzU,KAAI8gF,GAELtzD,IAAAU,cAACyQ,EAAU,CAACr1B,IAAKw3E,EAAKpgF,GAAIo+B,gBAAc,EAAC9C,WAAS,EAAC5B,UAAU,oBAAoBO,IAAI,MACjFnN,IAAAU,cAACgM,EAAI,KAAE4mD,EAAK37D,IAAI,IAAE27D,EAAKx/E,OACvBksB,IAAAU,cAACwR,EAAY,CAACzC,QAAU8N,GAAOld,KAAK8yD,mBAAmBG,EAAKpgF,IAAKw/B,QAAM,EAAC9F,UAAU,eAAc,YACxF5M,IAAAU,cAAA,QAAMkM,UAAU,WAAU,iBAMjDvM,KAAKkzD,mBAGlB,CAEAA,mBACI,OAAIlzD,KAAKG,MAAM0yD,SACJlzD,IAAAU,cAACoxD,GAAU,CACNW,QAASpyD,KAAKF,MAAMlZ,QAAQzU,KAAI2yB,GAAKtvB,SAASsvB,EAAEjyB,MAChD+8D,aAAW,EACX0iB,UAAWtyD,KAAKkyD,gBAChBQ,eAAgB1yD,KAAK4yD,qBAGjCjzD,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACC,KAAG,EAACj/B,GAAG,yBAAyBu8B,QAASA,IAAMpP,KAAKC,SAAS,CAAC4yD,UAAU,KAAQ,gBAC7ElzD,IAAAU,cAAA,QAAMkM,UAAU,WAAU,IAAEvM,KAAKF,MAAMqzD,gBAIpE,EC5DJ,MAAMC,GAAS,SACTC,GAAgB,CAClB92E,KAAM62E,GACNx4D,YAAa,KACbzB,OAAQ,KACRpC,MAAO,KACPa,YAAa,IAIjB,MAAM07D,WAA8B1zD,YAEhCC,YAAYC,GACRC,MAAMD,GACNE,KAAKG,MAAQxkB,OAAOwE,OAAO,CACvBgH,IAAK,KACLqzC,YAAa,CAAC,GACf64B,IAEHrzD,KAAKu8B,wBAA0Bv8B,KAAKu8B,wBAAwBlY,KAAKrkB,MACjEA,KAAKuzD,gBAAkBvzD,KAAKuzD,gBAAgBlvC,KAAKrkB,MACjDA,KAAKwzD,4BAA8BxzD,KAAKwzD,4BAA4BnvC,KAAKrkB,KAC7E,CAIAmZ,oBACInZ,KAAKC,SAAS,CAAC9Y,IAAK6Y,KAAK4Y,QAAQuvC,SACrC,CAIA5rB,wBAAwBlqD,GACpB2tB,KAAKC,UAASC,IAAS,CAEfs6B,YAAa7+C,OAAOwE,OAAO,CAAC,EAAG+f,EAAUs6B,YAAa,CAAC5iC,YAAa,KACpErb,KAAM62E,MACH/gF,KAGf,CAEAohF,+BAA+BphF,EAAOqhF,GAClC1zD,KAAKC,UAASC,IAAS,CAEfs6B,YAAa7+C,OAAOwE,OAAO,CAAC,EAAG+f,EAAUs6B,YAAa,CAAC,CAACk5B,GAAQ,KAChE,CAACA,GAAQrhF,KAGrB,CAEAkhF,gBAAgBv+E,GACZ,MAAMmS,EAAM3R,SAASR,EAAgB3C,OACjC8U,IAAQ6Y,KAAK4Y,QAAQuvC,QACrBnoD,KAAKC,SAAS,CACV9Y,IAAKA,KACFksE,GACH74B,YAAa,CAAC,IAEXrzC,IAAQ6Y,KAAK4Y,QAAQ6sC,YAC5BzlD,KAAKC,SAAS,CACV9Y,IAAKA,EACL5K,KAAM,KACNqe,YAAa,KACbzB,OAAQ,KACRpC,MAAO,KACPa,YAAa,GACb4iC,YAAa,CAAC,IAGlBx6B,KAAKC,SAAS,CACV9Y,IAAKA,EACL5K,KAAM62E,GACNx4D,YAAa,KACbzB,OAAQ,KACRpC,MAAO,KACPa,YAAa,KACb4iC,YAAa,CAAC,GAG1B,CAEAg5B,8BACSxzD,KAAK2jC,YACV3jC,KAAKF,MAAM6zD,sBAAsB,CAC7B9gF,GAAI,KACJ4C,YAAauqB,KAAKF,MAAMrqB,YACxB0R,IAAK6Y,KAAKG,MAAMhZ,IAChB5K,KAAMyjB,KAAKG,MAAM5jB,KACjBqe,YAAaoF,KAAKG,MAAMvF,YACxBzB,OAAQ6G,KAAKG,MAAMhH,OACnBpC,MAAOiJ,KAAKG,MAAMpJ,MAClBa,YAAaoI,KAAKG,MAAMvI,aAEhC,CAIAg8D,uBAGI,MAAM,KACFr3E,EAAI,YACJqb,EAAW,IACXzQ,GACA6Y,KAAKG,MACT,OACKhZ,IAAQ6Y,KAAK4Y,QAAQuvC,SAA0C,KAA9BvwD,GAAe,IAAI5jB,QACpDmT,IAAQ6Y,KAAK4Y,QAAQ6sC,gBAAkBlpE,GAAQ,IAAIvI,SAAW4jB,GAAe,IAAI5jB,OAE1F,CAEA0oD,gBAAgBm3B,EAAcC,GAC1B,OAAOD,EAAaj8D,YAAY/V,cAAciyE,EAAal8D,YAAa,KAC5E,CAEA+rC,WAEI3jC,KAAKC,SAAS,CAACu6B,YAAa,CAAC,IAC7B,MAAM,KACFj+C,EAAI,YACJqb,EAAW,IACXzQ,GACA6Y,KAAKG,MACT,GAAIhZ,IAAQ6Y,KAAK4Y,QAAQuvC,UAAYvwD,EAAY5jB,OAE7C,OADAgsB,KAAKC,SAAS,CAACu6B,YAAa,CAAC5iC,YAAa,6BACnC,EAEX,GAAIzQ,IAAQ6Y,KAAK4Y,QAAQ6sC,gBAAkBlpE,GAAQ,IAAIvI,SAAW4jB,EAAY5jB,QAAS,CACnF,IAAI2T,EAAS,CAAC,EACd,IAAK,IAAItP,IAAQ,CAAC,OAAQ,gBAChB2nB,KAAKG,MAAM9nB,IAAS,IAAIrE,SAC1B2T,EAAOtP,GAAQ,0BAIvB,OADA2nB,KAAKC,SAAS,CAACu6B,YAAa7yC,KACrB,CACX,CACA,OAAO,CACX,CAIAyY,SACI,MAAMwzD,EAAuB5zD,KAAK4zD,wBAC5B,QACFzL,EAAO,qBACPzC,EAAoB,YACpBD,GACAzlD,KAAK4Y,QACHzxB,EAAM6Y,KAAKG,MAAMhZ,IAEvB,OACIwY,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,gBAAgBw6B,IAAI,QAAQ31B,UAAWwoB,IAAMuc,aAC/Dvc,IAAAU,cAAC4Y,GAAM,CACH1M,UAAU,gBACVgP,YAAY,qBACZ1C,cAAc,EACd2D,iBAAkBA,IAAM,sBACxBhM,QAAS70B,OAAOC,QAAQ8pE,GAAsBvzE,KAAIgoC,IAAmB,IAAjB1+B,EAAKpJ,GAAM8nC,EAC3D,MAAO,CAAC9nC,MAAOoJ,EAAKnJ,MAAOD,EAAM,IAErC4nC,mBAAoBA,IAAe,wCACnC7O,OAAQF,EACR74B,MAAO,CACHA,MAAO2tB,KAAKG,MAAMhZ,IAClB7U,MAAOozE,EAAqB1lD,KAAKG,MAAMhZ,MAE3CivB,SAAUpW,KAAKuzD,kBAEnB5zD,IAAAU,cAACyQ,EAAU,CAACM,OAAK,EAACM,QAAM,EAACvD,WAAS,GAC7Bg6C,IAAYhhE,GAAO6Y,KAAK+zD,kBACxBtO,IAAgBt+D,GAAO6Y,KAAKg0D,uBAEjCr0D,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKF,MAAMm0D,2BAA4BliD,QAAM,GAAC,SAAMpS,IAAAU,cAAA,QAAMkM,UAAU,WAAU,kCACrG5M,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKwzD,4BAA6B1hD,KAAM8hD,EAAsBhqD,SAAUgqD,GAAsB,QAAKj0D,IAAAU,cAAA,QAAMkM,UAAU,WAAU,uBAAqBqnD,GAAwB,iFAIjN,CAEAG,kBACI,MAAMv5B,EAAcx6B,KAAKG,MAAMq6B,YACzB+3B,EAAkB/3B,EAAY5iC,aAAe4iC,EAAY5iC,YAAY5jB,OAAS,EACpF,OACI2rB,IAAAU,cAACo7B,GAAe,CACZ3zC,MAAOyqE,EAAkB/3B,EAAY5iC,YAAc,GACnDyW,QAASkkD,EACT72B,kBAAmB17B,KAAKu8B,yBAEpC,CAEAy3B,sBACI,MAAM,YACFx5B,EAAW,KACXj+C,EAAI,YACJqb,GACAoI,KAAKG,MACHoyD,EAAkB/3B,EAAYj+C,MAAQi+C,EAAYj+C,KAAKvI,OAAS,EACtE,OACI2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC+6B,GAAQ,CACLtzC,MAAOyqE,EAAkB/3B,EAAYj+C,KAAO,GAC5C8xB,QAASkkD,EACTh2E,KAAMA,EACN++C,WAAajf,GAAmBrc,KAAKyzD,+BAA+Bp3C,EAAehqC,MAAO,UAE9FstB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,wBAAcw6B,IAAI,QAAQH,SAAS,kBACrDhN,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkBwW,EAAY5iC,aAAe4iC,EAAY5iC,YAAY5jB,OAAS,EAAI,oBAAsB,KACxGgxC,kBAAkB,wBAClB3yC,MAAOulB,GAAe,GACtBwe,SAAWuC,GAAU3Y,KAAKyzD,+BAA+B96C,EAAMwM,OAAO9yC,MAAO,eAC7EqyC,QAASA,IAAM1kB,KAAKyzD,+BAA+B,GAAI,eACvD,gBAAc,OACd5gF,GAAG,mBACN2nD,EAAY5iC,aAAe4iC,EAAY5iC,YAAY5jB,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,qBAAqB2nD,EAAY5iC,cAIlI,EAGJ07D,GAAsBxsB,YAAcse,GCzOpC,MAAM8O,GAAqBp0D,IACvB,MAAMq0D,EAAoBr0C,qBAAWslC,KAE/B,MACFruD,EAAK,KACLxa,EAAI,YACJqb,EAAW,OACXuB,EAAM,YACN1jB,EAAW,IACX0R,EAAG,YACHyT,GACAkF,EAAMs0D,kBAEV,IAAIlnE,EAAU,KAkCd,OAjCI/F,IAAQgtE,EAAkBhM,QAC1Bj7D,EACIyS,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACgM,EAAI,KAAE9vB,IAEXojB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,kBAClBqtB,IAAAU,cAACgM,EAAI,KAAEzR,IAEX+E,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,UAClBqtB,IAAAU,cAACgM,EAAI,KAAElT,GAAU,MAErBwG,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,SAClBqtB,IAAAU,cAACgM,EAAI,KAAEtV,GAAS,MAEpB4I,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,yBAClBqtB,IAAAU,cAACgM,EAAI,KAAEzU,GAAe,OAI3BzQ,IAAQgtE,EAAkB1O,cACjCv4D,EACIyS,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACgM,EAAI,KAAE9vB,GAAQ,MAEnBojB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,yBAClBqtB,IAAAU,cAACgM,EAAI,KAAEzU,GAAe,QAOlC+H,IAAAU,cAAA,MAAIkM,UAAU,oBACV5M,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAAC9C,WAAS,GAChCxO,IAAAU,cAACgM,EAAI,KAAE8nD,EAAkBzO,qBAAqBv+D,IAC9CwY,IAAAU,cAACwR,EAAY,CAACzC,QAASA,IAAMtP,EAAMu0D,wBAAwB5+E,GAAc48B,QAAM,EAAC9F,UAAU,eAAc,YAChG5M,IAAAU,cAAA,QAAMkM,UAAU,WAAU,yBAGrCrf,EACA,ECtDb,MAAMonE,WAA0B10D,YAE5BC,YAAYC,GACRC,MAAMD,GACNE,KAAKG,MAAQ,CACTo0D,wBAAwB,GAG5Bv0D,KAAKwzD,4BAA8BxzD,KAAKwzD,4BAA4BnvC,KAAKrkB,KAC7E,CAEAI,SACI,MAAMvZ,EAAoBmZ,KAAKF,MAAMjZ,kBACrC,OACI8Y,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,cAAa,6BAA2B1lB,EAAkB7S,QAC/E2rB,IAAAU,cAAA,UACKxZ,EAAkB1U,KAAKqiF,GACpB70D,IAAAU,cAAC6zD,GAAiB,CACdz4E,IAAK+4E,EAAG/+E,YACR2+E,kBAAmBI,EACnBH,wBAAyBr0D,KAAKF,MAAMu0D,6BAG/Cr0D,KAAKy0D,iCAGlB,CAEAA,iCACI,GAAIz0D,KAAKG,MAAMo0D,uBAAwB,CAGnC,MAAM9+E,EAAcC,KAAKC,IAAIqqB,KAAKF,MAAM40D,gBAAiB9+E,YAA2BoqB,KAAKF,MAAMjZ,oBAAsB,EACrH,OAAO8Y,IAAAU,cAACizD,GAAqB,CACjB79E,YAAaA,EACbw+E,2BAA4BA,IAAMj0D,KAAKC,SAAS,CAACs0D,wBAAwB,IACzEZ,sBAAuB3zD,KAAKwzD,4BAC5B3/E,gBAAiBmsB,KAAKF,MAAMjsB,iBAC5C,CACI,OAA4C,KAAxCmsB,KAAKF,MAAMjZ,kBAAkB7S,OACtB,KAGP2rB,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACC,KAAG,EAACj/B,GAAG,oCAAoCu8B,QAASA,IAAMpP,KAAKC,SAAS,CAACs0D,wBAAwB,KAAQ,2BAC3F50D,IAAAU,cAAA,QAAMkM,UAAU,WAAU,IAAEvM,KAAKF,MAAM60D,8BAKnF,CAEAnB,4BAA4BtzE,GACxB8f,KAAKF,MAAM6zD,sBAAsBzzE,GAAMytE,MACnC,IAAM3tD,KAAKC,SAAS,CAACs0D,wBAAwB,KACrD,ECtDJ,MAAM9yC,GAAc,CAChBpvC,MAAO,EACPC,MAAO,WAIX,MAAMsiF,WAAgCh1D,YAElCC,YAAYC,GACRC,MAAMD,GA+BV,KAEAoyD,gBAAmB56D,IACf0I,KAAKC,UACDC,IAAS,CACLtZ,QAAS,IAAIsZ,EAAUtZ,QAAS0Q,MAEvC,EACJ,KAEDw7D,mBAAsBjgB,IAClB7yC,KAAKC,UAASC,IAAS,CACnBtZ,QAASsZ,EAAUtZ,QAAQvG,QAAOuB,GAAQpM,SAASoM,EAAK/O,MAAQ2C,SAASq9D,QAC1E,EACN,KAEDgiB,8BAAiCp/E,IAC7BuqB,KAAKC,UAASC,IAAS,CACnBrZ,kBAAmBqZ,EAAUrZ,kBAAkBxG,QAAOm0E,GAAMA,EAAG/+E,cAAgBA,OAChF,EACN,KAED+9E,4BAA8B,CAACtzE,EAAMkrC,IAC1B,IAAIukC,SAAQ,CAACC,EAASC,KACzB7vD,KAAKC,UAASC,IAAS,CACnBrZ,kBAAmB,IAAIqZ,EAAUrZ,kBAAmB3G,MACpD0vE,IAAU,IAErB,KAED93B,WAAa,KACT,MAAM53C,EAAO8f,KAAK6lB,UAClB7lB,KAAK4Y,QAAQ+uC,+BACT3nD,KAAKF,MAAMrX,oBAAoBhT,aAC/B,IAAMuqB,KAAKF,MAAMmiB,OAAO/hC,IAC3B,EAjED,MAAM2oE,EAAK/oD,EAAMrX,qBAAuB,CAAC,EACzCuX,KAAKG,MAAQ,CACT1qB,YAAaozE,EAAGpzE,YAChB5C,GAAIg2E,EAAGh2E,IAAM,KACb6T,UAAWmiE,EAAGniE,WAAa,KAC3BC,aAAckiE,EAAGliE,cAAgB,KACjC4R,eAAgBswD,EAAGtwD,gBAAkB,GACrC/R,KAAMqiE,EAAGriE,MAAQ,GACjBI,QAASiiE,EAAGjiE,SAAW,GACvBC,kBAAmBgiE,EAAGhiE,mBAAqB,GAC3Cc,OAAQ,CAAC,EAGjB,CAIAwxB,oBACInZ,KAAKC,SACD,CAACtY,OAAQqY,KAAK4Y,QAAQ0sC,WAAWxlE,qBAAqBkgB,KAAKF,MAAMrX,oBAAoBhT,cAAgB,CAAC,IACtG,IAAM2D,OAAO4wE,eAAen2E,mBAEpC,CAEAyhC,mBAAmBC,EAAWrV,GACtB9mB,OAAO4wE,gBACP5wE,OAAO4wE,eAAen2E,iBAE9B,CA0CAgyC,UACI,IAAI3lC,EAAOvE,OAAOwE,OAAO,CAAC,EAAG6f,KAAKG,OAElC,cADOjgB,EAAa,OACbA,CACX,CAIAkgB,SACI,MAAM,OACFzY,EAAM,UACNjB,EAAS,QACTE,EAAO,kBACPC,EAAiB,eACjB0R,EAAc,KACd/R,EAAI,aACJG,GACAqZ,KAAKG,OACJ,oCACD0lD,EAAmC,6BACnCF,EAA4B,iCAC5BC,GACA5lD,KAAK4Y,QAEHk8C,EAAkB,gBAClBC,EAAyB,uCACzBrsE,EAAqBsX,KAAKF,MAAMpX,mBAChCssE,GAAoBrtE,EAAOjB,WAAa,IAAI1S,OAAS,EAE3D,OACI2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAAC+C,YAAU,EAACG,OAAK,GAClC1R,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,qCACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,YACjB3P,UAAU,uBACV5M,IAAAU,cAAC4Y,GAAM,CACH,aAAY,sCAAmCtxB,EAAOjB,WAAa,KACnE6lB,WAAa5kB,EAAOjB,WAAa,IAAI1S,OAAS,EAAK+gF,EAAyBD,EAC5Ev5C,YAAY,kBACZxC,WAAYrwB,EACZ8zB,iBAAkBA,IAAM,sBACxBhM,QAAS,CAACiR,IAAe0jB,UAAUwgB,EAA6BxzE,KAAImO,IAAC,CAAMjO,MAAOiO,EAAEzN,GAAIP,MAAOgO,EAAE7M,WACjGwmC,mBAAoBA,IAAe,wCACnC7O,OAAQF,EACR74B,MAAO,CAACA,MAAOqU,GAAa+6B,GAAYpvC,MAAOC,MAAOszE,EAAiCl/D,IAAc+6B,GAAYnvC,OACjH8jC,SAAWiG,IACPrc,KAAKC,SAAS,CAACvZ,UAAWlR,SAAS6mC,EAAehqC,QAAU,KAAMsU,aAAc,MAAM,IAG7FquE,GAAoBr1D,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEH,EAAOjB,YAE7CiZ,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,eACN,aAA0B,OAAdoU,EAAqB,KAAO,iIAA0GiB,EAAOhB,cAAgB,KACzKxP,UAAWwoB,IAAMuc,YACjBpP,IAAI,QACJwQ,SAAwB,OAAd52B,EAAqB,KAAO,KAEtCiZ,IAAAU,cAAC4Y,GAAM,CACH1M,WAAa5kB,EAAOhB,cAAgB,IAAI3S,OAAS,EAAK+gF,EAAyBD,EAC/Ev5C,YAAY,qBACZxC,WAAYrwB,GAAoC,OAAdhC,EAClC81B,iBAAkBA,IAAM,sBACxBhM,QAAuB,OAAd9pB,EAAqB,CAAC+6B,IAAiB,CAACA,IAAe0jB,UACzDwgB,EAA6BtlE,QAAOykB,GAAKtvB,SAASsvB,EAAEjyB,MAAQ2C,SAASkR,KAAY,GAAGsS,aAAa7mB,KAAI+J,IAAC,CAAM7J,MAAO6J,EAAErJ,GAAIP,MAAO4J,EAAEzI,WACzIwmC,mBAAoBA,IAAe,wCACnC7O,OAAQF,EACR74B,MAAO,CAACA,MAAOsU,GAAgB86B,GAAYpvC,MAAOC,MAAOuzE,EAAoCl/D,IAAiB86B,GAAYnvC,OAC1H8jC,SAAWiG,GAAmBrc,KAAKC,SAAS,CAACtZ,aAAcnR,SAAS6mC,EAAehqC,QAAU,UAE/FsV,EAAOhB,cAAgB,IAAI3S,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEH,EAAOhB,eAEnEgZ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,kBAAkBw6B,IAAI,QAAQH,SAAS,qBACzDhN,IAAAU,cAAC2jB,GAAe,CACZ,gBAAe,IACfgB,kBAAkB,kBAClB7W,WAAS,EACT8X,gBAAc,EACdE,UAAW,IACX9zC,MAAOkmB,EACP6d,SAAWuC,GAAU3Y,KAAKC,SAAS,CAAC1H,eAAgBogB,EAAMwM,OAAO9yC,QACjEqyC,QAAU/L,GAAU3Y,KAAKC,SAAS,CAAC1H,eAAgB,KACnD1lB,GAAG,oBACH,aAAY,8DAA2D0lB,EAAevkB,wBAIlG2rB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,OAAOw6B,IAAI,QAAQH,SAAS,cAC9ChN,IAAAU,cAAC2jB,GAAe,CACZ,oBAAmBr8B,EAAOnB,MAAQ,IAAIxS,OAAS,EAAI,gBAAkB,KACrE04E,UAAQ,EACRv+C,WAAS,EACTgY,UAAW,IACX,gBAAe,IACfnB,kBAAkB,OAClBiB,gBAAc,EACd5X,SAAU1mB,EAAOnB,MAAQ,IAAIxS,OAAS,EACtC3B,MAAOmU,EACP4vB,SAAWuC,GAAU3Y,KAAKC,SAAS,CAACzZ,KAAMmyB,EAAMwM,OAAO9yC,QACvDqyC,QAAUxH,GAAOld,KAAKC,SAAS,CAACzZ,KAAM,KACtC3T,GAAG,aACH,aAAY,qDAAkD2T,EAAKxS,uBACrE2T,EAAOnB,MAAQ,IAAIxS,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,iBAAiB8U,EAAOnB,OAE9EmZ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,aAChBqV,EAAOf,SAAW,IAAI5S,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEH,EAAOf,SAC1D+Y,IAAAU,cAACsyD,GAAO,CACJQ,cAAexrE,EAAOf,QACtBA,QAASA,EACT0rE,UAAWtyD,KAAKkyD,gBAChBc,aAAchzD,KAAK8yD,sBAE3BnzD,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,uBAChBqV,EAAOd,mBAAqB,IAAI7S,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC6X,IAAAU,cAAA,QAAMkM,UAAU,WAAU,yBAA6B5kB,EAAOd,mBAC1H8Y,IAAAU,cAACi0D,GAAiB,CACdK,4BAA6BhtE,EAAOd,kBACpCA,kBAAmBA,EACnB6tE,gBAAiB10D,KAAKF,MAAMm1D,iCAC5BZ,wBAAyBr0D,KAAK60D,8BAC9BlB,sBAAuB3zD,KAAKwzD,+BAEpC7zD,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACE,QAAM,EAAC3C,QAASpP,KAAKF,MAAM2sD,aAAa,UACtD9sD,IAAAU,cAACwR,EAAY,CACTtF,UAAU,qBACV15B,GAAG,uCACH0/B,MAAI,EACJnD,QAASpP,KAAK83B,YAAY,mCAM9C,EAGJ88B,GAAwB9tB,YAAcse,G,OC5NtC,MAAM8P,WAA4Bt1D,YAE9BC,YAAYC,GACRC,MAAMD,GAAO,KA4EjBq1D,0BAA4B,KACxBn1D,KAAKC,SAAS,CAACm1D,cAAc,GAAO,EA5EpCp1D,KAAKG,MAAQ,CACTi1D,cAAc,EAEtB,CAIAh1D,SACI,MAAMyoD,EAAK7oD,KAAKF,MAAMrX,oBAChBy9B,EAAalmB,KAAKF,MAAMomB,WAE9B,IAAImvC,EAQJ,OANIA,EADAr+E,YAAW6xE,EAAGjiE,SACgB7P,YAAY8xE,EAAGjiE,SAASzU,KAAI8gF,GAC/CtzD,IAAAU,cAACgM,EAAI,CAAC5wB,IAAKw3E,EAAKpgF,IAAKogF,EAAK37D,IAAI,IAAE27D,EAAKx/E,SAGlB,IAG9BksB,IAAAU,cAAC4pD,GAAqB,MACjB9vC,IAAA,IAAC,WACEmrC,EAAU,oCACVO,EAAmC,iCACnCD,GACHzrC,EAAA,OACGxa,IAAAU,cAACyN,EAAG,CACAK,WAAS,EACTE,QAAS1yB,OAAOS,KAAKkpE,EAAWxlE,qBAAqB+oE,EAAGpzE,cAAgB,CAAC,GAAGzB,OAAS,EACrF06B,kBAAmBk3C,EAAiCiD,EAAGniE,YAAc,IACrEomB,IAAI,KACJyB,SAAUs3C,EAAoCgD,EAAGliE,eAAiB,IAClEonB,qBAAsB,uDAA+C/N,KAAKF,MAAMpX,mBAAgC,GAAX,eACrGulB,YACItO,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,MAAIkM,UAAU,WAAU,qDACxB5M,IAAAU,cAAA,UACKV,IAAAU,cAAA,UACGV,IAAAU,cAACwR,EAAY,CACTtF,UAAU,iBACV3C,SAAUsc,EACVlU,MAAI,EACJ5C,QAASA,IAAMpP,KAAKF,MAAMw1D,YAAYzM,EAAGpzE,cAAc,YAI7DuqB,KAAKF,MAAMpX,oBACTiX,IAAAU,cAAA,UACIV,IAAAU,cAACwR,EAAY,CACTtF,UAAU,iBACV3C,SAAUsc,EACV7T,QAAM,EACNjD,QAASA,IAAMpP,KAAKC,SAAS,CAACm1D,cAAc,KAAQ,iBAQ5Ez1D,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACmd,GAAQ,KACL7d,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAas8C,EAAGriE,MAAQ,OAGhDmZ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,WACjB+iF,GAEJr1D,KAAKu1D,qBACJ,GAItB,CAMAA,qBACI,GAAIv1D,KAAKG,MAAMi1D,aACX,OACIz1D,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,SACVqQ,YAAY,oEACZjN,QAAS3P,KAAKm1D,2BAEdx1D,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,KAAC,6IACN1M,IAAAU,cAACgM,EAAI,KAAC,wBACN1M,IAAAU,cAACgM,EAAI,KAAC,WACN1M,IAAAU,cAACgM,EAAI,KAAC,eACN1M,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKm1D,0BAA2BpjD,QAAM,GAAC,UAC9DpS,IAAAU,cAACwR,EAAY,CAACzC,QAASA,IAAMpP,KAAKF,MAAM01D,cAAcx1D,KAAKF,MAAMrX,oBAAoBhT,aAAc48B,QAAM,GAAC,eAMlI,EC7FJ,MAAMojD,WAAgCnJ,GAGlCzsD,YAAYC,GACRC,MAAMD,GAAO,KAHjB3W,SAAW,YAWX,KAEAyjE,gBAAkB,KACd5sD,KAAKC,SACD,CACIy1D,2BAA2B,EAC3BC,2BAA4B,KAC5BC,4BAA6B,OAEjC,KACQx8E,OAAO4wE,gBAAkB5wE,OAAO4wE,eAAen2E,iBAAiB,GAE3E,EACJ,KAEDikD,WAAc53C,IACV,MAAMkrC,EAAmD,OAA3CprB,KAAKG,MAAMy1D,4BACzB51D,KAAK4Y,QAAQ0tC,wBACTpmE,EACAkrC,GACA,IAAMprB,KAAKC,SACP,CACIy1D,2BAA2B,EAC3BC,2BAA4BvqC,EAAQlrC,EAAKzK,YAAc,KACvDmgF,4BAA6B,QAGxC,EACJ,KAEDC,gBAAmBpgF,IACfuqB,KAAKC,SAAS,CACVy1D,2BAA2B,EAC3BE,4BAA6BngF,GAC/B,EACL,KAEDqgF,gCAAmCrgF,IAC/BuqB,KAAK4Y,QAAQ2tC,0BAA0B9wE,EAAY,EA7CnDuqB,KAAKG,MAAQ,CACTu1D,2BAA2B,EAC3BC,2BAA4B,KAC5BC,4BAA6B,KAErC,CA6CAx1D,SACI,MAAM,mBAAE1X,EAAkB,UAAE6jE,GAAcvsD,KAAKF,MACzCi2D,EAA2B/1D,KAAK4Y,QAAQ0sC,WAAWt9D,WAAWlI,qBAC9DvK,EAAIyqB,KAAK4Y,QAAQ5wB,WACjBlI,EAAuBysE,EAAY,GAAK9sE,YAA6BlK,EAAEmS,YAEvEw+B,EAAalmB,KAAKF,MAAMysD,WAAavsD,KAAK4Y,QAAQysC,cAAgBrlD,KAAK4Y,QAAQ0S,SACrF,OACI3rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC6vD,GAAa,CAACr5D,MAAM,yBAAyBnd,QAASsmB,KAAKF,MAAMqwD,uBACjEznE,GAAsBiX,IAAAU,cAACgsD,GAAoB,OAC1C3jE,GACEiX,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CACTC,KAAG,EACHvF,UAAU,gBACV3C,SAAUsc,EACVrzC,GAAG,sCACHu8B,QAAUx8B,IACNotB,KAAKC,SAAS,CAACy1D,2BAA2B,IAC1C9iF,EAAEy8B,cAAcC,MAAM,GACtB,uCAKhB3P,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKD,eAAa,GAAC,sCAC7BlN,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,sBAAiB5sB,EAAqB9L,QACjD2rB,IAAAU,cAAA,UACKvgB,EAAqB3N,KAAI02E,GACflpD,IAAAU,cAAC60D,GAAmB,CACvBhvC,WAAYA,EACZx9B,mBAAoBA,EACpBjN,IAAKotE,EAAGpzE,YACRgT,oBAAqBogE,EACrByM,YAAat1D,KAAK61D,gBAClBL,cAAex1D,KAAK81D,sCAG9B9+E,YAAW8I,KAA0Bi2E,GAA4B,IAAI/hF,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEiuE,GAClGp2D,IAAAU,cAAC+zB,GAAK,CACFxqB,SAAUsc,EACVmO,kBAAmBr0B,KAAKF,MAAMu0B,kBAC9B3F,SAAO,EACP+F,UAAU,UACVD,YAAaA,IAAMx0B,KAAKF,MAAMuwD,wBAAwB,aAEf,OAA1CrwD,KAAKG,MAAMw1D,4BAAuCpgF,EAAEsgB,gCAAkCtgB,EAAEmS,WAAW1T,OAAS,GACzG2rB,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,SACVsQ,iBAAiB,6JACjBhlC,MAAO,CAAEq4B,OAAQ,KACjBP,QAASA,IAAM3P,KAAKC,SAAS,CAAE01D,2BAA4B,QAE3Dh2D,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACzC,QAASA,IAAMpP,KAAKC,SAAS,CAAE01D,2BAA4B,OAASnsD,SAAO,GAAC,QAIrGxJ,KAAKG,MAAMu1D,2BAA6B11D,KAAKg2D,8BAA8Bl2E,GAGxF,CAEAk2E,8BAA8Bl2E,GAC1B,IAAIm2E,EAA0B,CAAC,EAC/B,MAAM,4BAAEL,GAAgC51D,KAAKG,MACvC+1D,EAAWp2E,EAAqB9L,OAChC0T,EAAasY,KAAK4Y,QAAQ5wB,WAAWN,WAE3C,GAAoC,OAAhCkuE,EACAK,EAAqC,YAAIC,EAAWxgF,KAAKC,OAAOmK,EAAqB3N,KAAI02E,GAAMA,EAAGpzE,eAAgB,EAAI,EACtHwgF,EAA+C,sBAAIvuE,EAAW1T,OAAS0B,KAAKsL,OAAO0G,EAAWvV,KAAIsV,GAAKA,EAAEhS,eAAgB,OAEzH,IAAK,IAAIozE,KAAM/oE,EACX,GAAI+oE,EAAGpzE,cAAgBmgF,EAA6B,CAChDK,EAA0BpN,EAC1B,KACJ,CAGR,MAAMngE,EAAqBsX,KAAKF,MAAMpX,mBACtC,OACIiX,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,sBACVqQ,aAAgD,OAAhCg5C,EAAuC,QAAU,UAApD,2BACb/9E,MAAO,CAAEq4B,OAAQ,KACjBP,QAAS3P,KAAK4sD,iBAEdjtD,IAAAU,cAAAV,IAAAyc,SAAA,KACK1zB,GAAsBiX,IAAAU,cAACgsD,GAAoB,MAC5C1sD,IAAAU,cAACu0D,GAAuB,CACpBlsE,mBAAoBA,EACpBusE,iCAAkC//E,YAC9B4K,EAAsB,qBAC1B2I,oBAAqBwtE,EACrBxJ,YAAazsD,KAAK4sD,gBAClB3qC,OAAQjiB,KAAK83B,cAKjC,EAIJ29B,GAAwB3uB,YAAcse,GClKtC,MAAM+Q,WAAwBv2D,YAE1BC,YAAYC,GACRC,MAAMD,GA4BV,KAEAs2D,eAAkBz9C,IACI,KAAlBA,EAAMq0B,UACFhtC,KAAKG,MAAMssC,aACX9zB,EAAMs0B,YAAYC,2BAElBltC,KAAKF,MAAM2sD,cAEnB,EAGA,KAEA30B,WAAa,KACT,MAAM,MAAC1M,EAAK,YAAExiC,GAAeoX,KAAKF,MAClCE,KAAKF,MAAMmiB,OAAO,CACdpvC,GAAIu4C,EAAQ,KAAOxiC,EAAY/V,GAC/B4C,YAAamT,EAAYnT,YACzByzE,+BAAgClpD,KAAKF,MAAMopD,+BAC3CnwD,mBAAoBiH,KAAKG,MAAMpH,mBAC/B/R,iBAAkBgZ,KAAKG,MAAMnZ,iBAC7BR,KAAMwZ,KAAKG,MAAM3Z,KAAK9N,OACtBud,8BAA+B+J,KAAKG,MAAMlK,+BAC3Cm1B,EAAM,EACZ,KAED++B,kBAAoB,KAChBnqD,KAAKF,MAAM2sD,aAAa,EAC3B,KAED32C,mBAAqB,KACjB9V,KAAKC,SAAS,CAACwsC,cAAc,GAAM,EACtC,KAEDE,oBAAsB,KAClB3sC,KAAKC,SAAS,CAACwsC,cAAc,GAAO,EA9DhC3sC,EAAMsrB,MACNprB,KAAKG,MAAQxkB,OAAOwE,OAAO,CAAC,EAAG2f,EAAMlX,YAAa,CAC9CmQ,mBAAoB,GACpB/R,iBAAkB,GAClBR,KAAM,GACNyP,+BAA+B,EAC/Bw2C,cAAc,IAGlBzsC,KAAKG,MAAQxkB,OAAOwE,OAChB,CAACssD,cAAc,GAAQ3sC,EAAMlX,YAEzC,CAIAuwB,oBACI//B,OAAO4wE,eAAen2E,iBAC1B,CAEAyhC,mBAAmBC,EAAWrV,GACtB9mB,OAAO4wE,gBACP5wE,OAAO4wE,eAAen2E,iBAE9B,CA2CAusB,SACI,MAAMi2D,EAAmB12D,IAAMuc,YACzBo6C,EAAiB32D,IAAMuc,YAC7B,OACIvc,IAAAU,cAAC4pD,GAAqB,MACjB9vC,IAAwC,IAAvC,WAACmrC,EAAU,oBAAEsC,GAAoBztC,EAC/B,MAAM1kC,EAAcuqB,KAAKF,MAAMlX,YAAYnT,YACrCkS,EAAS29D,EAAWtuD,aAAavhB,IAAgB,CAAC,EAClD8gF,GAAgC5uE,EAAOX,kBAAoB,IAAIhT,OAAS,EAC9E,OACI2rB,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,SACV10B,MAAO,CAAEq4B,OAAQ,KACjBP,QAAS3P,KAAKmqD,kBACdrtC,UAAW9c,KAAKo2D,gBAEhBz2D,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACE,UAAU,wBAAuB,cACvC5M,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,OAAOw6B,IAAI,QAAQH,SAAS,uBAC9ChN,IAAAU,cAAC2jB,GAAe,CACZ,aAAY,oDAAiDhkB,KAAKG,MAAM3Z,KAAKxS,oBAC7E,gBAAe,IACfgxC,kBAAkB,OAClBiB,gBAAc,EACd9X,WAAS,EACTt7B,GAAG,sBACHszC,UAAW,IACX/P,SAAWuC,GAAU3Y,KAAKC,SAAS,CAACzZ,KAAMmyB,EAAMwM,OAAO9yC,QACvDqyC,QAAUxH,GAAOld,KAAKC,SAAS,CAACzZ,KAAM,KACtCkmE,UAAQ,EACRr6E,MAAO2tB,KAAKG,MAAM3Z,QAG1BmZ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,gBAAWw6B,IAAI,QAAQp1B,SAAU2+E,GACnD12D,IAAAU,cAACwV,EAAY,CACT0B,SAAS,gBACTpJ,WAAS,EACTqI,UAAW6/C,EACXhkF,MAAO0S,KAAK2gB,MAAM1F,KAAKG,MAAMpH,oBAC7Bgd,eAAgB/V,KAAK8V,mBACrBsC,gBAAiBpY,KAAK2sC,oBACtBv2B,SAAWlgC,GAAS8pB,KAAKC,SAAS,CAAClH,mBAAoB3iB,YAAaF,QAE5EypB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,SAASw6B,IAAI,QAAQp1B,SAAU4+E,GACjD32D,IAAAU,cAACwV,EAAY,CACTsB,gBAAiBo/C,EAA+B,yBAA2B,KAC3Eh/C,SAAS,SACTpJ,WAAS,EACTE,QAASkoD,EACT//C,UAAW8/C,EACXjkF,MAAO0S,KAAK2gB,MAAM1F,KAAKG,MAAMnZ,kBAC7B+uB,eAAgB/V,KAAK8V,mBACrBsC,gBAAiBpY,KAAK2sC,oBACtBv2B,SAAWlgC,GAAS8pB,KAAKC,SACrB,CAACjZ,iBAAkB5Q,YAAaF,KAChC,KACQqgF,GACA3O,EAAoB,eAAgBnyE,EAAa,mBACrD,IAGRovC,QAAU3H,IAAQ0qC,EAAoB,eAAgBnyE,EAAa,mBAAmB,IACzF8gF,GAAgC52D,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,0BAA0B8U,EAAOX,mBAErF2Y,IAAAU,cAACiiC,KAAQ,CACLhwD,MAAM,8CACN4uD,QAASlhC,KAAKG,MAAMlK,8BACpBmgB,SAAWuC,GAAU3Y,KAAKC,SAAS,CAAChK,8BAA+B0iB,EAAMwM,OAAO+b,YACpFvhC,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKmqD,kBAAmBp4C,QAAM,GAAC,UACtDpS,IAAAU,cAACwR,EAAY,CAACh/B,GAAG,yCAAyC0/B,MAAI,EAACnD,QAASpP,KAAK83B,YAAa93B,KAAKF,MAAMsrB,MAAQ,QAAU,mBAEzHzjC,EAAOX,kBAAoB,IAAIhT,OAAS,GAAK2rB,IAAAU,cAAA,QAAMoN,KAAK,QAAQlB,UAAU,WAAU,uCAE/E,GAKnC,ECjKJ,MAAMiqD,WAAqB52D,YAEvBC,YAAYC,GACRC,MAAMD,GAOV,KAEA8sD,gBAAkB,KACd5sD,KAAKC,SACD,CACIw2D,kBAAkB,EAClBC,qBAAsB,OAE1B,KACQt9E,OAAO4wE,gBAAkB5wE,OAAO4wE,eAAen2E,iBAAiB,GAE3E,EACJ,KAEDikD,WAAa,CAAC53C,EAAMkrC,KAChBprB,KAAKF,MAAM62D,kBAAkBz2E,EAAMkrC,EAAOprB,KAAK4sD,gBAAgB,EArB/D5sD,KAAKG,MAAQ,CACTs2D,kBAAkB,EAClBC,qBAAsB,KAE9B,CAsBAt2D,SACI,MAAM,aACFpJ,EAAY,eACZuB,EAAc,KACd/R,EAAI,aACJG,EAAY,IACZQ,GACA6Y,KAAKF,MACT,OACIH,IAAAU,cAAC4pD,GAAqB,MACjB9vC,IAAA,IAAC,WAACmrC,EAAU,oCAAEO,EAAmC,iCAAED,GAAiCzrC,EAAA,OACjFxa,IAAAU,cAACyN,EAAG,CACAhB,IAAI,KACJ4B,kBAAmBk3C,EAAiCz+D,IAAQ,IAC5DonB,SAAUs3C,EAAoCl/D,IAAiB,IAC/DwnB,WAAS,GACTxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACmd,GAAQ,KACL7d,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAa/lB,KAGpC+R,EAAevkB,OAAS,GACrB2rB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,mBAClBqtB,IAAAU,cAACgM,EAAI,KAAE9T,IAGfoH,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKD,eAAa,GAAC,SAC7BlN,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,sBAAiB1V,EAAahjB,QACzC2rB,IAAAU,cAACyQ,EAAU,CAAChE,IAAI,MACX9V,EAAa7kB,KAAI,CAAC+5E,EAAGp3E,IACXkrB,KAAK42D,kBAAkB1K,EAAGp3E,EAAI,EAAGwwE,MAG/CtlD,KAAK62D,wBACL72D,KAAK82D,6BACJ,GAItB,CAEAF,kBAAkBhuE,EAAaoU,EAAOsoD,GAClC,MAAMp/B,EAAalmB,KAAKF,MAAMomB,WACxB6wC,EAAap7E,OAAOS,KAAKkpE,EAAWtuD,aAAapO,EAAYnT,cAAgB,CAAC,GAAGzB,OAAS,EAChG,OACI2rB,IAAAU,cAACyN,EAAG,CAACryB,IAAKmN,EAAYnT,YAAaq3B,IAAI,MACnCnN,IAAAU,cAAA,eACK02D,GACGp3D,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SACb9N,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAM,CAAEA,KAAM,UAAWW,KAAM,UAAYv4B,MAAO,CAACs4B,YAAa,KAAM,oCAGvGxQ,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKR,cAAY,GAAC,QAAMtP,GAClC2C,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACmd,GAAQ,KACL7d,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAa3jB,EAAYpC,MAAQ,OAGzDmZ,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,iBAClBqtB,IAAAU,cAACgM,EAAI,KAAEzjB,EAAYmQ,oBAAsB,MAE7C4G,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,UAClBqtB,IAAAU,cAACgM,EAAI,KAAEzjB,EAAY5B,kBAAoB,OAG/C2Y,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,+CAClBqtB,IAAAU,cAACgM,EAAI,KAAEzjB,EAAYqN,8BAAgC,MAAQ,SAGnE0J,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CACTjI,SAAUsc,EACV7T,QAAM,EACNjD,QAASA,IAAMpP,KAAKF,MAAMk3D,oBACtBh3D,KAAKF,MAAMopD,+BAAgCtgE,EAAYnT,cACzD,YACEkqB,IAAAU,cAAA,QAAMkM,UAAU,WAAU,SAAOvP,IAEzC2C,IAAAU,cAACwR,EAAY,CACTjI,SAAUsc,EACVlU,MAAI,EACJ5C,QAASA,IAAMpP,KAAKC,SAChB,CAACy2D,qBAAsB9tE,EAAYnT,eACrC,SACIkqB,IAAAU,cAAA,QAAMkM,UAAU,WAAU,SAAOvP,EAAM,IAAE+5D,EAAa,uCAA+B,MAK/G,CAEAF,wBACI,MAAM,qBACFH,EAAoB,iBACpBD,GACAz2D,KAAKG,MAET,GAAIs2D,GAA6C,OAAzBC,EAA+B,CACnD,IAAIxK,EAQJ,OANIA,EADAuK,EACI,CAAChhF,YAAauqB,KAAKF,MAAM40D,gBAAkB,GAE3C10D,KAAKF,MAAM9I,aAAa3W,QACxB42E,GAAQA,EAAKxhF,cAAgBihF,IAAsB,GAGpD/2D,IAAAU,cAAC81D,GAAe,CACXvtE,YAAasjE,EACb9gC,MAAOqrC,EACPvN,+BAAgClpD,KAAKF,MAAMopD,+BAC3CuD,YAAazsD,KAAK4sD,gBAClB3qC,OAAQjiB,KAAK83B,YAC7B,CACA,OAAO,IACX,CAEAg/B,6BACI,OAAI92D,KAAKG,MAAMs2D,iBAA2B,KAEtC92D,IAAAU,cAACyQ,EAAU,CAACK,SAAO,EAACk+C,oBAAoB,0BACpC1vD,IAAAU,cAACwR,EAAY,CACTC,KAAG,EACHlI,SAAU5J,KAAKF,MAAMomB,WACrBrzC,GAAI,KAAKmtB,KAAKF,MAAMopD,6DACpB95C,QAASA,IAAMpP,KAAKC,SAAS,CAACw2D,kBAAkB,KAAQ,cAKxE,ECvJJ,MAAMS,WAAoB5K,GAAkBzsD,cAAA,SAAA9rB,WAAA,KACxCoV,SAAW,SAAU,CAIrBiX,SACI,MAAM,UAAEmsD,GAAcvsD,KAAKF,MACrBomB,EAAaqmC,GAAavsD,KAAK4Y,QAAQysC,cAAgBrlD,KAAK4Y,QAAQ0S,SACpE/1C,EAAIyqB,KAAK4Y,QAAQ5wB,WACjBlI,EAAuBysE,EAAY,GAAK9sE,YAA6BlK,EAAEmS,YAE7E,IAAIyvE,EACAr3E,EAAqB9L,OACrBmjF,EAAwBx3D,IAAAU,cAAA,UAAKvgB,EAAqB3N,KAAI02E,GAClDlpD,IAAAU,cAACm2D,GAAY,CACTtwC,WAAYA,EACZlvB,aAAcjgB,YAAY8xE,EAAG7xD,cAC7Bvb,IAAKotE,EAAGpzE,YACRi/E,gBAAiBx/E,YACb4K,EAAsB,gBAC1ByY,eAAgBswD,EAAGtwD,eACnB/R,KAAMqiE,EAAGriE,KACTG,aAAckiE,EAAGliE,aACjBuiE,+BAAgCL,EAAGpzE,YACnC0R,IAAK0hE,EAAGniE,UACRiwE,kBAAmB32D,KAAK4Y,QAAQ+tC,gBAChCqQ,oBAAqBh3D,KAAK4Y,QAAQguC,wBAElC5mD,KAAK4Y,QAAQ0sC,WAAWt9D,WAAW/B,mCAAqC,IAAIjS,SACpFmjF,EAAwBx3D,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,iFAGxC,MAAMsvE,EAAyCz3D,IAAMuc,YACrD,OACIvc,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC6vD,GAAa,CAACr5D,MAAM,8BAA8Bnd,QAASsmB,KAAKF,MAAMqwD,uBACvExwD,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAAA,eACIV,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,sBACjBi6E,EAAY,MAAQh3E,EAAEyS,WAAWsO,mBAAqB,OAE3DqJ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,oCAAoCw6B,IAAI,QAAQp1B,SAAU0/E,GAC5Ez3D,IAAAU,cAACwV,EAAY,CACTwhD,gBAAiB13D,IAAMuc,YACvB5E,WAAW,gCACXD,iBAAiB,UACjBE,SAAS,oCACT3N,SAAUsc,EACV1P,UAAW4gD,EACXzgD,qBAAmB,EACnBtkC,MAAOk6E,EAAY,GAAKxnE,KAAK2gB,MAAMnwB,EAAEqjB,gCAAkC,IACvEwd,SAAUlgC,GAAQ8pB,KAAK4Y,QAAQ4tC,kBAAkB,iCAAkCpwE,YAAaF,SAI/GihF,EACDx3D,IAAAU,cAAC+zB,GAAK,CACFxqB,SAAUsc,EACVmO,kBAAmBr0B,KAAKF,MAAMu0B,kBAC9B3F,SAAO,EACPD,SAAO,EACPgG,UAAU,UACVF,UAAU,YACVC,YAAaA,IAAMx0B,KAAKF,MAAMuwD,wBAAwB,WACtD/7B,YAAaA,IAAMt0B,KAAKF,MAAMuwD,wBAAwB,eAItE,EAIJ6G,GAAYpwB,YAAcse,GClF1B,MAAM3jC,GAAc,CAChBpvC,MAAO,EACPC,MAAO,mBAIX,MAAMglF,WAA2B13D,YAE7BC,YAAYC,GACRC,MAAMD,GAAO,KAmCjBg4B,WAAcy/B,IACV,IAAKv3D,KAAK2jC,SAAS4zB,GAAe,OAClC,MAAM,MAACnsC,EAAK,eAAEtiC,GAAkBkX,KAAKF,MAErCE,KAAKF,MAAMmiB,OAAO,CACdpvC,GAAIu4C,EAAQ,KAAOtiC,EAAejW,GAClC4C,YAAaqT,EAAerT,YAC5ByzE,+BAAgClpD,KAAKF,MAAMopD,+BAC3C/hE,IAAK6Y,KAAKG,MAAMhZ,IAChBX,KAAMwZ,KAAKG,MAAM3Z,KAAK9N,QACvB0yC,EAAM,EACZ,KAED++B,kBAAoB,KAChBnqD,KAAKF,MAAM2sD,aAAa,EA/CxB,IAAI+K,EAAY,CACZC,UAAW,GACXC,SAAU,GACVC,cAAc,GAEd73D,EAAMsrB,MACNprB,KAAKG,MAAQxkB,OAAOwE,OAAOq3E,EAAW13D,EAAMhX,eAAgB,CACxD3B,IAAK,KACLX,KAAM,KAGVwZ,KAAKG,MAAQxkB,OAAOwE,OAAOq3E,EAAW13D,EAAMhX,eAEpD,CAIAqwB,oBACI//B,OAAO4wE,eAAen2E,iBAC1B,CAEAyhC,mBAAmBC,EAAWrV,GACtB9mB,OAAO4wE,gBACP5wE,OAAO4wE,eAAen2E,iBAE9B,CAIA0/E,gBAAgBlhF,GACZ2tB,KAAKC,SAAS,CAAC9Y,IAAK3R,SAASnD,IAAU,MAC3C,CAqBAulF,YAAYC,GAER,IAAIlwE,EAAShM,OAAOwE,OAAO,CAAC,EAAG03E,GAG/B,IAAK,IAAIx/E,IAAQ,CAAC,MAAO,QAAS,CAC9B,MAAMyP,EAAQkY,KAAKG,MAAM,GAAG9nB,UACxByP,EAAM9T,SACN2T,EAAOtP,GAAQyP,EAEvB,CAEA,OAAOH,CACX,CAEAg8C,SAAS4zB,GAEL,MAAM9hF,EAAcuqB,KAAKF,MAAMhX,eAAerT,YAC9C8hF,EAAW,iBAAkB9hF,EAAa,QAC1C8hF,EAAW,iBAAkB9hF,EAAa,OAC1CuqB,KAAKC,SAAS,CAAC03D,cAAc,EAAMF,UAAW,GAAIC,SAAU,KAE5D,IAAIjuE,GAAU,EAUd,OATuB,OAAnBuW,KAAKG,MAAMhZ,MACX6Y,KAAKC,SAAS,CAACy3D,SAAU,2BACzBjuE,GAAU,GAETuW,KAAKG,MAAM3Z,KAAK9N,SACjBsnB,KAAKC,SAAS,CAACw3D,UAAW,2BAC1BhuE,GAAU,GAEduW,KAAKC,SAAS,CAAC03D,cAAc,IACtBluE,CACX,CAIA2W,SACI,MAAMu3D,EAAe33D,KAAKG,MAAMw3D,aAChC,OACIh4D,IAAAU,cAAC4pD,GAAqB,MACjB9vC,IAAoD,IAAnD,oBAACytC,EAAmB,WAAEtC,EAAU,WAAEQ,GAAW3rC,EAC3C,MAAM1kC,EAAcuqB,KAAKF,MAAMhX,eAAerT,YACxCkS,EAASqY,KAAK43D,YAAYtS,EAAW5qD,eAAejlB,IAGpDqiF,GAAqBnwE,EAAOnB,MAAQ,IAAIxS,OAAS,EACjD+jF,GAAoBpwE,EAAOR,KAAO,IAAInT,OAAS,EAErD,OACI2rB,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,SACVqQ,YAAY,6BACZjN,QAAS3P,KAAKmqD,mBAEdxqD,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,gBAAgBw6B,IAAI,QAAQ31B,UAAWwoB,IAAMuc,aAC/Dvc,IAAAU,cAAC4Y,GAAM,CACH,aAAY,iBAAiBtxB,EAAOR,KAAO,KAC3C,mBAAkB4wE,EAAmB,YAAc,KACnD99C,mBAAoBA,IAAe,wCACnC1N,UAAWwrD,EAhBA,uCADP,gBAkBJh/C,WAAY4+C,EACZ,iBAAe,EACfnnD,QAAS,CAACiR,IAAe0jB,UAAUxpD,OAAOC,QAAQkqE,GAAYzlE,QAAOk6B,IAAA,IAAE1nC,EAAI06D,GAAEhzB,EAAA,OAAMva,KAAKF,MAAMk4D,sBAAsBvjF,SAASe,SAAS3C,GAAI,IAAEkN,OAAO5N,KAAIuoC,IAAA,IAAEj/B,EAAKpJ,GAAMqoC,EAAA,MAAM,CAACroC,MAAOoJ,EAAKnJ,MAAOD,EAAM,KACpMA,MAAO,CAACA,MAAO2tB,KAAKG,MAAMhZ,KAAOs6B,GAAYpvC,MAAOC,MAAOwzE,EAAW9lD,KAAKG,MAAMhZ,MAAQs6B,GAAYnvC,OACrG8jC,SAAWiG,GAAmBrc,KAAKuzD,gBAAgBl3C,EAAehqC,OAClE+4B,OAAQF,EACRsR,iBAAkBA,IAAM,wBAE3Bu7C,GAAoBp4D,IAAAU,cAACgM,EAAI,CAACx5B,GAAG,YAAYiV,OAAK,GAAEH,EAAOR,MAE5DwY,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,iBAAiBw6B,IAAI,QAAQH,SAAS,0BACxDhN,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkB8zC,EAAoB,aAAe,KACrD9yC,kBAAkB,iBAClBpb,SAAU+tD,EACVjL,UAAQ,EACRv+C,WAAS,EACTE,QAASypD,EACT3xC,UAAW,IACXF,gBAAc,EACd5zC,MAAO2tB,KAAKG,MAAM3Z,KAClB4vB,SAAWuC,GAAU3Y,KAAKC,SAAS,CAACzZ,KAAMmyB,EAAMwM,OAAO9yC,QACvDqyC,QAAUxH,GAAOld,KAAKC,SAAS,CAACzZ,KAAM,KACtC,iBAAe,EACf3T,GAAG,yBACH,aAAY,8DAA2DmtB,KAAKG,MAAM3Z,KAAKxS,sBAE1F8jF,GAAqBn4D,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,cAAc8U,EAAOnB,OAE9DmZ,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CACTE,QAAM,EACNnI,SAAU+tD,EACVvoD,QAASpP,KAAKmqD,mBAAoB,UACtCxqD,IAAAU,cAACwR,EAAY,CACT,aAAY7R,KAAKF,MAAMsrB,MAAQ,6BAA0B,uCACzDxhB,SAAU+tD,EACVplD,MAAI,EACJnD,QAASA,IAAMpP,KAAK83B,WAAW8vB,IAC9B5nD,KAAKF,MAAMsrB,MAAQ,QAAU,mBAGpCzjC,EAAOR,KAAOQ,EAAOnB,MAAQ,IAAIxS,OAAS,GAAK2rB,IAAAU,cAAA,QAAMoN,KAAK,QAAQlB,UAAU,WAAU,uCAEjF,GAKnC,EC7KJ,MAAM0rD,WAAuBr4D,YAEzBC,YAAYC,GACRC,MAAMD,GAOV,KAEA8sD,gBAAkB,KACd5sD,KAAKC,SACD,CACIi4D,qBAAqB,EACrBC,iCAAkC,OAEtC,KACQ/+E,OAAO4wE,gBAAkB5wE,OAAO4wE,eAAen2E,iBAAiB,GAE3E,EACJ,KAEDikD,WAAa,CAAC53C,EAAMkrC,KAChBprB,KAAKF,MAAMs4D,qBAAqBl4E,EAAMkrC,EAAOprB,KAAK4sD,gBAAgB,EArBlE5sD,KAAKG,MAAQ,CACT+3D,qBAAqB,EACrBC,iCAAkC,KAE1C,CAsBA/3D,SACI,MAAM,KACF5Z,EAAI,aACJG,EAAY,IACZQ,EAAG,eACHuT,GACAsF,KAAKF,MACT,OACKH,IAAAU,cAAC4pD,GAAqB,MAClB9vC,IAAA,IAAC,WACEmrC,EAAU,oCACVO,EAAmC,iCACnCD,EAAgC,WAChCE,GACH3rC,EAAA,OACGxa,IAAAU,cAACyN,EAAG,CACAhB,IAAI,KACJ4B,kBAAmBk3C,EAAiCz+D,IAAQ,IAC5DonB,SAAUs3C,EAAoCl/D,IAAiB,IAC/DwnB,WAAS,GACTxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACmd,GAAQ,KACL7d,IAAAU,cAACgM,EAAI,CAACE,UAAU,2BAA2B/lB,KAGnDmZ,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKD,eAAa,GAAC,aAC7BlN,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,sBAAiBhS,EAAe1mB,QAC3C2rB,IAAAU,cAACyQ,EAAU,CAAChE,IAAI,MACXpS,EAAevoB,KAAKkmF,GAAOr4D,KAAKs4D,qBAAqBD,EAAI/S,EAAYQ,MAEzE9lD,KAAKu4D,2BACLv4D,KAAKw4D,8BAA8B1S,GAClC,GAItB,CAEAwS,qBAAqBxvE,EAAgBw8D,EAAYQ,GAC7C,MAAM5/B,EAAalmB,KAAKF,MAAMomB,WAC9B,OACIvmB,IAAAU,cAACyN,EAAG,CAACryB,IAAKqN,EAAerT,YAAaq3B,IAAI,MACrCnxB,OAAOS,KAAKkpE,EAAW5qD,eAAe5R,EAAerT,cAAgB,CAAC,GAAGzB,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAQ9N,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAM,CAAEA,KAAM,UAAWW,KAAM,UAAYv4B,MAAO,CAACs4B,YAAa,KAAM,qBAChNxQ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,iBAClBqtB,IAAAU,cAACgM,EAAI,KAAEy5C,EAAWh9D,EAAe3B,MAAQ,MAE7CwY,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,kBAClBqtB,IAAAU,cAACmd,GAAQ,KACL7d,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAazjB,EAAetC,MAAQ,QAG1DwZ,KAAKF,MAAMpX,oBACTiX,IAAAU,cAACyQ,EAAU,CAACK,SAAO,EAAC5E,UAAU,wBAC1B5M,IAAAU,cAACwR,EAAY,CACTjI,SAAUsc,EACV7T,QAAM,EACNjD,QAASA,IAAMpP,KAAKF,MAAM24D,uBACtBz4D,KAAKF,MAAMopD,+BAAgCpgE,EAAerT,cAC5D,aAGNkqB,IAAAU,cAACwR,EAAY,CACTjI,SAAUsc,EACVlU,MAAI,EACJ5C,QAASA,IAAMpP,KAAKC,SAChB,CAACi4D,oBAAqB,KAAMC,iCAAkCrvE,EAAerT,eAC/E,WAO1B,CAEA8iF,2BACI,MAAM,iCACFJ,EAAgC,oBAChCD,GACAl4D,KAAKG,MACT,GAAI+3D,GAA4D,OAArCC,EAA2C,CAClE,MAAM,gBACFzD,EAAe,+BACfxL,EAA8B,eAC9BxuD,GACAsF,KAAKF,MAET,IAAIu4D,EAAIL,EAWR,OAVIE,GACAG,EAAK,CAAC5iF,YAAai/E,EAAkB,GACrCsD,EAAwBt9D,EAAevoB,KAAIkmF,GAAM7iF,SAAS6iF,EAAGlxE,SAE7DkxE,EAAK39D,EAAera,QAChBq4E,GAAKA,EAAEjjF,cAAgB0iF,IAAkC,GAC7DH,EAAwBt9D,EAAevoB,KACnCkmF,GAAM7iF,SAAS6iF,EAAGlxE,OAAM9G,QAAQxN,GAAOA,IAAO2C,SAAS6iF,EAAGlxE,QAG3DwY,IAAAU,cAACi3D,GAAkB,CACdlsC,MAAO8sC,EACPhP,+BAAgCA,EAChC8O,sBAAuBA,EACvBlvE,eAAgBuvE,EAChB5L,YAAazsD,KAAK4sD,gBAClB3qC,OAAQjiB,KAAK83B,YAC7B,CACA,OAAO,IACX,CAEA0gC,8BAA8B1S,GAC1B,OAAI9lD,KAAKF,MAAMpX,mBAA6B,MAEvCsX,KAAKG,MAAM+3D,qBACRv8E,OAAOS,KAAK0pE,GAAYzlE,QAAOxN,IAAOmtB,KAAKF,MAAMpF,eAAevoB,KAC5DkmF,GAAM7iF,SAAS6iF,EAAGlxE,OAAM1S,SAASe,SAAS3C,MAAMmB,OAEpD2rB,IAAAU,cAACyQ,EAAU,CAACK,SAAO,EAACk+C,oBAAoB,0BACpC1vD,IAAAU,cAACwR,EAAY,CACTC,KAAG,EACHlI,SAAU5J,KAAKF,MAAMomB,WACrBrzC,GAAI,KAAKmtB,KAAKF,MAAMopD,gEACpB95C,QAASA,IAAMpP,KAAKC,SAAS,CAACi4D,qBAAqB,EAAMC,iCAAkC,QAAQ,oBAM5G,IACX,EC1JJ,MAAMQ,WAAoBrM,GAAkBzsD,cAAA,SAAA9rB,WAAA,KACxCoV,SAAW,SAAU,CAIrBiX,SACI,MAAM,mBAAE1X,EAAkB,UAAE6jE,GAAcvsD,KAAKF,MACzComB,EAAaqmC,GAAavsD,KAAK4Y,QAAQysC,cAAgBrlD,KAAK4Y,QAAQ0S,SACpE/1C,EAAIyqB,KAAK4Y,QAAQ5wB,WACjBlI,EAAuBysE,EAAY,GAAK9sE,YAA6BlK,EAAEmS,YAE7E,IAAIyvE,EAqBJ,OApBIr3E,EAAqB9L,OACrBmjF,EAAwBr3E,EAAqB3N,KAAI02E,GAC7ClpD,IAAAU,cAAC43D,GAAc,CACXvvE,mBAAoBA,EACpBw9B,WAAYA,EACZzqC,IAAKotE,EAAGpzE,YACRi/E,gBAAiBx/E,YACb4K,EAAsB,kBAC1B0G,KAAMqiE,EAAGriE,KACTG,aAAckiE,EAAGliE,aACjBuiE,+BAAgCL,EAAGpzE,YACnC0R,IAAK0hE,EAAGniE,UACRgU,eAAgB3jB,YAAY8xE,EAAGnuD,gBAC/B09D,qBAAsBp4D,KAAK4Y,QAAQiuC,mBACnC4R,uBAAwBz4D,KAAK4Y,QAAQkuC,0BAErC9mD,KAAK4Y,QAAQ0sC,WAAWt9D,WAAW9B,qCAAuC,IAAIlS,SACtFmjF,EAAwBx3D,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,iFAIpC6X,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC6vD,GAAa,CAACr5D,MAAM,+BAA+Bnd,QAASsmB,KAAKF,MAAMqwD,uBACvEznE,GAAsBiX,IAAAU,cAACgsD,GAAoB,MAC5C1sD,IAAAU,cAACyQ,EAAU,CAAChE,IAAI,MAAMqqD,GACtBx3D,IAAAU,cAAC+zB,GAAK,CACFxqB,SAAUsc,EACVmO,kBAAmBr0B,KAAKF,MAAMu0B,kBAC9B3F,SAAO,EACPD,SAAO,EACPgG,UAAU,8BACVF,UAAU,UACVC,YAAaA,IAAMx0B,KAAKF,MAAMuwD,wBAAwB,kBACtD/7B,YAAaA,IAAMt0B,KAAKF,MAAMuwD,wBAAwB,aAItE,EAIJsI,GAAY7xB,YAAcse,GCpD1B,MAAMwT,WAAuBtM,GAAkBzsD,cAAA,SAAA9rB,WAAA,KAC3CoV,SAAW,YAAa,CAGxB0vE,yBACI,IAAIC,EAAiB,GACjBC,EAAqB,GACzB,MAAM/wE,EAAagY,KAAK4Y,QAAQ5wB,WAChC,IAAK,IAAIgxE,KAAchxE,EAAWoT,WACzB49D,EAAW7P,SACiB,UAA5BnhE,EAAW0B,OAAOpX,OAAqB0mF,EAAW7P,OAAOt2E,KAAOmtB,KAAK4Y,QAAQ5wB,WAAWnV,IAAoC,UAA5BmV,EAAW0B,OAAOpX,OAA8C,OAAzB0mF,EAAW7P,OAAOt2E,GAC1JkmF,EAAmB56E,KAAK66E,GAExBF,EAAe36E,KAAK66E,IAG5B,MAAO,CAACF,EAAgBC,EAC5B,CAIA34D,SACI,MAAM,mBAAE1X,EAAkB,UAAE6jE,GAAcvsD,KAAKF,MACzComB,EAAaqmC,GAAavsD,KAAK4Y,QAAQysC,cAAgBrlD,KAAK4Y,QAAQ0S,UACnEwtC,EAAgBC,GAAsBxM,EAAY,CAAC,GAAI,IAAMvsD,KAAK64D,yBACnEI,EAAuBH,EAAe9kF,OAC5C,OACI2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC6vD,GAAa,CAACr5D,MAAM,gCAAgCnd,QAASsmB,KAAKF,MAAMqwD,uBACzExwD,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKD,eAAa,GAAC,wBAC7BlN,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,iBAAgB,sBAAiBusD,EAAe9kF,OAAS+kF,EAAmB/kF,QACjG2rB,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,mDAlCI,GAkCgD,eAC9D1M,KAAKk5D,yBACFH,EAAoBE,EAAsBvwE,EAAoBw9B,GACjElmB,KAAKm5D,qBAAqBL,EAAgBG,EAAsBvwE,GACjEiX,IAAAU,cAAC+zB,GAAK,CACFxqB,SAAUsc,EACVmO,kBAAmBr0B,KAAKF,MAAMu0B,kBAC9B5F,SAAO,EACP8F,UAAU,iBACVD,YAAaA,IAAMt0B,KAAKF,MAAMuwD,wBAAwB,eAItE,CAEA6I,yBAAyBxrE,EAAaurE,EAAsBvwE,EAAoBw9B,GAC5E,OACIvmB,IAAAU,cAACmkC,GAAU,CACP97C,oBAAoB,EACpB07C,iBAAiB,gBACjBz8C,OAAQqY,KAAK4Y,QAAQ0sC,WAAWlqD,WAChC8qB,WAAYA,EACZue,OAAQ/7C,EAAqB,0DAAwC,GACrEy9B,UAzDe,GA0Dfue,gBAAiBh8C,GAAsBuwE,GACvC79D,WAAY1N,EACZm2C,iBAAkBn2C,EAAY1Z,OAASilF,EACvCn1B,aAAc9jC,KAAK4Y,QAAQkrB,aAC3BN,gBAAiBxjC,KAAK4Y,QAAQ4qB,gBAC9Bf,wBAAyBziC,KAAK4Y,QAAQ4uC,wBACrCyR,EAAuB,GAAKt5D,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,iBAAgB,sBAAiB7e,EAAY1Z,QAG3G,CAEAmlF,qBAAqBzrE,EAAa0rE,EAAmB1wE,GACjD,OAAK0wE,EAEDz5D,IAAAU,cAACmkC,GAAU,CACP97C,mBAAoBA,EACpB07C,iBAAiB,gBACjBz8C,OAAQqY,KAAK4Y,QAAQ0sC,WAAWlqD,WAChCqpC,OAAQ,qDACRve,YAAY,EACZC,UA9Ee,GA+Ef/qB,WAAY1N,EACZo2C,aAAc9jC,KAAK4Y,QAAQkrB,aAC3BN,gBAAiBxjC,KAAK4Y,QAAQ4qB,gBAC9Bf,wBAAyBziC,KAAK4Y,QAAQ4uC,wBACtC7nD,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,iBAAgB,sBAAiB7e,EAAY1Z,QAClE2rB,IAAAU,cAACgsD,GAAoB,CAAC3/C,KAAK,0JAdF,IAiBrC,EAIJksD,GAAe9xB,YAAcse,GCxE7B,MAAMiU,GAAqB,CACvBrxE,WAAY,CACRnV,GAAI,KACJ6W,OAAQ,CAAC,EACTsO,MAAO,KACP1B,kBAAoB,IAExBzjB,GAAI,KACJgT,SAAU,GACVD,MAAO,GACPmV,wBAAyB,GACzBjV,MAAO,KACP6U,mBAAoB,GACpB9E,gCAAgC,EAChCS,kBAAmB,GACnB2D,YAAa,GACbrB,+BAAgC,GAChClR,WAAY,GACZ3B,gBAAiB,GACjBqV,WAAY,IAIhB,MAAMk+D,WAAuBrjC,GAAcp2B,cAAA,IAAA0B,EAAA,SAAAxtB,WAAAwtB,EAAAvB,KAAA,KAgFvCu5D,4BAA+BpwE,IAC3B6W,KAAKw5D,yBAAyBx5D,KAAKy5D,mBAAmBtwE,GAAU,EACnE,KAEDuwE,6BAAgCx8C,IAC5B,MAAMgkB,EAAUhkB,EAAGiI,OAAO+b,QAC1BlhC,KAAKC,SACD,CAACzb,iBAAkB08C,IACnB,IAAMlhC,KAAK4Y,QAAQ2uC,uBAAuBrmB,IAC7C,EACJ,KAEDy4B,mBAAqB,KACjB35D,KAAKF,MAAM+tB,QAAQ1vC,KAAK4nB,EACpB/F,KAAKF,MAAM2mC,SAAShmC,yBAAyBjQ,QACvC,2BACA,kBACRiN,KAAK,EACV,KAEDm8D,6BAA+B,SAAC15E,GAA0C,IAApC25E,EAAyB9lF,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,KAC5DwtB,EAAKipB,SAAW,KAEhB,IAAIxiC,EAAarM,OAAOwE,OACpB,CAAC,EAAGk5E,GACJj9D,YAAoBlc,EAAKqH,cAAe,CACpCiV,eAAgB,CACZ,iCAAkC,kBAClC,qBAAsB,mBAAoB,qBAC9CC,mBAAoB,CAAC,kBACrBq9D,gBAAgB,KAIxB,MAAMh0E,EAAQkC,EAAWA,WAAWlC,OAAS,KAC7CnK,OAAOwE,OAAO6H,EAAY,CACtBN,WAAY6Z,EAAKw4D,iCAAiC/xE,EAAWN,YAC7D7B,SAAUmC,EAAWA,WAAWnC,SAAS1T,KAAI+J,GAAKA,EAAErJ,KACpDkT,gBAAiBiC,EAAWjC,gBAAgB5T,KAAIoD,GAAKA,EAAE1C,KACvDiT,MAAiB,OAAVA,EAAiB,CAACzT,MAAOyT,EAAMjT,GAAIP,MAAOwT,EAAM02D,WAAa,cAEjEx0D,EAAWA,WAAqB,gBAChCA,EAAWA,WAAkB,MAEpC3T,SAASqgB,MAAQ,uDAA+C1M,EAAWpC,MAC3E2b,EAAK7Y,oBAAuB6Y,EAAKzB,MAAMk6D,SAAkBxkF,SACrDwS,EAAWA,WAAW0B,OAAO7W,MAAQ2C,SAAS+rB,EAAKqX,QAAQ2sC,eAE/DhkD,EAAKqX,QAAQstC,+BACThmE,EAAKoO,cACL,KACI,MAAM,YAAC8I,GAAc,GAASpP,EAAWA,WACzCuZ,EAAKzB,MAAMmB,4BACP,CAACP,SAAUtJ,EAAa5G,SAAU4G,IAClC,KACImK,EAAKqX,QAAQutC,cACTn+D,GACA,IAAMuZ,EAAKtB,SACP,CACIo2B,gBAAgB,EAChB7xC,iBAAkBwD,EAAWnC,SAAS7R,OAAS,GAA0B,OAArBgU,EAAWlC,QAEnE,KAEQ+zE,GACAA,GACJ,KAGX,GAER,GAGb,EAAC,KAEDhjC,iBAAoB32C,IAChB8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SACD,CACImqB,WAAY1rB,YAAsBxe,EAAKiF,SACvCkxC,gBAAgB,IAEpB,KACQr2B,KAAK4Y,QAAQ0S,UACbtrB,KAAK4Y,QAAQ6uC,sBAAsB,YAAY,EACnD,GAEP,EACJ,KAED3wB,2BAA8BptC,IAC1BsW,KAAKwqB,SAAW,KAEZ,CAAC,IAAK,KAAK/1C,SAASiV,GACpBsW,KAAKC,SAAS,CAACq2B,cAAc,EAAMD,gBAAgB,IAGvDr2B,KAAKC,SACD,CACImqB,WAAY,4DAAwC1gC,KACpD2sC,gBAAgB,IAEpB,KACQr2B,KAAK4Y,QAAQ0S,UACbtrB,KAAK4Y,QAAQ6uC,sBAAsB,YAAY,EACnD,GAEP,EACJ,KAEDwD,eAAiB,KACbjrD,KAAK4Y,QAAQ6uC,sBAAsB,gBAAgB,GAEnDznD,KAAKC,SAAS,CACVg6D,aAAa,EACbC,eAAgB,yIAEpBt1C,YAAY1kB,IACRF,KAAKC,SAAS,CAAEi6D,eAAgBh6D,GAAY,GAC7C,KAEH,IAAI1b,EAAmBwb,KAAKG,MAAM3b,iBAE9Bwb,KAAKtX,oBACLsX,KAAKF,MAAM2mC,SAAShmC,yBAAyBC,WAG7Clc,EAAmB,MAGvB,MAAMiF,EAAUuW,KAAK4Y,QAAQ+qB,SACzBn/C,EACAwb,KAAKtX,mBACLsX,KAAKF,MAAM2mC,SAAShmC,0BAUxB,OANAT,KAAKm6D,sBAAwBv1C,YAAW,KACpC5kB,KAAK4Y,QAAQ8uC,eAAe1nD,KAAKo6D,mBAAmBp6D,KAAKG,MAAMqf,iBAAiB,GACjF,KAEHxf,KAAK4Y,QAAQ6uC,sBAAsB,gBAAgB,GAE5Ch+D,CAAO,EACjB,KAEDquC,WAAa,WAKP,IAHFvzB,EAAexwB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,KAChBywB,EAAazwB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,KACd0wB,EAAuB1wB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,KAGxB,MAAMsmF,EAAYA,KACd94D,EAAK+4D,aAAe,KACpB/4D,EAAKqX,QAAQ6uC,sBAAsB,YAAY,EAAM,EAGzD,IAAI8S,EAAiB,KACjB/1D,IACA+1D,EAAkBr6E,IACdskB,EAActkB,GACdm6E,GAAW,GAInB,IAAIG,EAA2B,KAC3B/1D,IACA+1D,EAA4B9wE,IACxB+a,EAAwB/a,GACxB2wE,GAAW,GAInB94D,EAAKqX,QAAQ6uC,sBACT,YAAY,GACZ,KACI,MAAMr8B,EAAQ7pB,EAAKpB,MAAMirB,MACnBlrC,EAAOqhB,EAAK42B,mBAElB52B,EAAK+4D,aAAel2D,EAChBgnB,EAAQ,qBAAuB,sBAAsBlrC,EAAK8H,WAAWnV,KACrEu4C,EAAQ,OAAS,MACjB,CAAC,EACDhvB,YAAoBlc,EAAM,CAACsb,UAAU,IACrC+I,GAAmBhD,EAAK62B,uBACxBmiC,GAAkBh5D,EAAK82B,qBACvBmiC,GAA4Bj5D,EAAK+2B,+BACpC,GAGb,EAAC,KAEDF,uBAAyB,SAACl4C,GAAyB,IAAnBnH,EAAQhF,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,KACrCwtB,EAAK+4D,aAAe,KAEpB/4D,EAAKqX,QAAQivC,kBAEb,MAAM7/D,EAAaoU,YAAoBlc,EAAKqH,eAC5Cga,EAAKqX,QAAQwtC,eACTp+D,GACA,IAAMuZ,EAAKk5D,+BACPl5D,EAAKqX,QAAQ5wB,WAAWA,WAAWnV,IACnC,KACI0uB,EAAKqX,QAAQ6uC,sBACT,YAAY,GACZ,KACIlmD,EAAKtB,SACD,CACImrB,OAAO,EACP2M,eAAgB,GAChB9I,YAAa,aAEjB,KACI1tB,EAAK4tB,eAAiBvK,YAAW,KAC7BrjB,EAAKtB,SAAS,CAACgvB,YAAa,mCAAyB,GACtD,KACCl2C,GAAYA,GAAW,GAElC,GAER,KAIjB,EAAC,KAEDs/C,qBAAwBn4C,IACpB8f,KAAKs6D,aAAe,KACpBt6D,KAAKC,SACD,CAAC83B,eAAgBr5B,YAAsBxe,EAAKiF,WAC5C,IAAM6a,KAAK4Y,QAAQ6uC,sBAAsB,YAAY,IACxD,EACJ,KAEDnvB,+BAAkC5uC,IAE9B,IAAIhF,EADJsb,KAAKs6D,aAAe,KAGhB51E,EADW,MAAXgF,EACM,0DAEA,4DAAwCA,KAElDsW,KAAKC,SACD,CAAC83B,eAAgBrzC,IACjB,IAAMsb,KAAK4Y,QAAQ6uC,sBAAsB,YAAY,IACxD,EACJ,KASDiT,qBAAuB,KACf16D,KAAKirD,iBACLjrD,KAAK83B,WACD,MACA,IAAM93B,KAAKgrD,yBACP,+DAGRhrD,KAAKC,SAAS,CACV06D,qBACI,wHAGZ,EACH,KAED/P,cAAgB,KACZ,MAAM,yBAAEnqD,GAA6BT,KAAKF,MAAM2mC,SAC5ChmC,EAAyBC,SACzBV,KAAKC,SAAS,CAACmqD,cAAc,IACtB3pD,EAAyBjQ,SAChCwP,KAAK06D,sBACT,EACH,KAEDE,mCAAqC,KACjC56D,KAAKF,MAAM+tB,QAAQ1vC,KACf6hB,KAAKF,MAAM2mC,SAAShmC,yBAAyBC,SACvCqF,EAAK1Y,eAAeoQ,KACpBsI,EAAKO,sBAAsBC,OAAOvG,KAAKF,MAAM/kB,MAAMX,OAAOvH,IACnE,EACJ,KAEDgoF,wCAA0C,KACtC76D,KAAKC,SAAS,CAAC06D,qBAAsB,IAAI,CAC5C,CAnXDxhD,oBAEInZ,KAAK4Y,QAAQkvC,YACT,KACQ9nD,KAAKF,MAAMk6D,UAEf3lF,SAASqgB,MAAQ,iCAA2BsL,KAAKG,MAAMirB,MAAQ,wBAAqB,0BACpFrrB,MAAMoZ,oBAAmB,GAGrC,CAEA7D,mBAAmBC,EAAWrV,GACtBqV,EAAUxO,SAAW/G,KAAKF,MAAMiH,QAChC/G,KAAKC,UAASC,IACLF,KAAKG,MAAMirB,OACZprB,KAAK86D,gBACT,GAGZ,CAEAt2C,uBACIzkB,MAAMykB,uBAEoB,OAAtBxkB,KAAKs6D,cACLt6D,KAAKs6D,aAAa1vC,QAGa,OAA/B5qB,KAAKm6D,uBACL11C,aAAazkB,KAAKm6D,uBAItBn6D,KAAK4Y,QAAQkvC,aACT9nD,KAAKF,MAAMmB,6BACXjB,KAAKF,MAAMmB,4BACP,CAACP,UAAU,EAAOlQ,SAAS,GAEvC,CAIAomC,mBAAmB12C,GACf8f,KAAKwqB,SAAW,KAChB,MAAM,MAAEY,GAAUprB,KAAKG,MAClBirB,GAEDzvC,OAAOwE,OAAOD,EAAM,CAChBgT,SAAU,GACVs1D,mBAAoB,GACpBv6D,gBAAiB,KAIzB+R,KAAK4Y,QAAQqtC,oBACT/lE,GACA,KAEQkrC,EACAprB,KAAKF,MAAMmB,4BACP,CAACP,UAAU,EAAMlQ,SAAS,GAC1BwP,KAAK4Y,QAAQutC,cACT,MACA,IAAMnmD,KAAKC,SAAS,CAACo2B,gBAAgB,OAI7Cr2B,KAAKy6D,+BAA+Bz6D,KAAKF,MAAM/kB,MAAMX,OAAOvH,GAChE,GAGZ,CAEA2mF,yBAAyB3mF,GACrBmtB,KAAKC,SAAS,CAACuf,gBAAiB3sC,IAChCkF,YAAkBioB,KAAK+6D,eAC3B,CA4PA/P,yBAAyBt+C,GACrB1M,KAAKC,SAAS,CACVmqD,cAAc,EACd4Q,sBAAuBtuD,GAE/B,CAyCAypB,SAASr2B,GACLE,KAAKw5D,yBAA2Bx5D,KAAKw5D,yBAAyBn1C,KAAKrkB,MACnEA,KAAKi7D,UAAY,CACb,CAAC5iF,KAAM,YAAaxF,GAAI,EAAGP,MAAO,YAAa88B,QAASpP,KAAKw5D,0BAC7D,CAACnhF,KAAM,UAAWxF,GAAI,EAAGP,MAAO,UAAW88B,QAASpP,KAAKw5D,0BACzD,CAACnhF,KAAM,UAAWxF,GAAI,EAAGP,MAAO,UAAW88B,QAASpP,KAAKw5D,0BACzD,CAACnhF,KAAM,iBAAkBxF,GAAI,EAAGP,MAAO,8BAAqB88B,QAASpP,KAAKw5D,0BAC1E,CAACnhF,KAAM,YAAaxF,GAAI,EAAGP,MAAO,iBAAa88B,QAASpP,KAAKw5D,0BAC7D,CAACnhF,KAAM,aAAcxF,GAAI,EAAGP,MAAO,uBAAc88B,QAASpP,KAAKw5D,2BAEnEx5D,KAAKy5D,mBAAqB,CAAC,EAC3Bz5D,KAAKo6D,mBAAqB,CAAC,EAC3B,IAAK,IAAIj7C,KAAQnf,KAAKi7D,UAClBj7D,KAAKy5D,mBAAmBt6C,EAAK9mC,MAAQ8mC,EAAKtsC,GAC1CmtB,KAAKo6D,mBAAmBj7C,EAAKtsC,IAAMssC,EAAK9mC,KAG5C2nB,KAAKtX,oBAAqB,CAC9B,CAEA8tC,mBAAmB12B,GACf,MAAO,CACHu2B,gBAAgBv2B,EAAMk6D,QACtBp7C,SAAU,EACVY,gBAAiB1f,EAAMk6D,SAAWl6D,EAAMo7D,MAAOl7D,KAAKy5D,mBAAmB35D,EAAMo7D,OAAa,EAC1FjsC,YAAa,kCACbgrC,aAAa,EACb7uC,MAAOtrB,EAAMsrB,MACb8uC,eAAgB,KAChB9P,cAAc,EACd5lE,kBAAkB,EAClBuzC,eAAgB,GAChB4iC,qBAAsB,GACtBK,sBAAuB,GAE/B,CAEAtkC,UAAU52B,GACNC,MAAM22B,UAAU52B,GAChBE,KAAKm6D,sBAAwB,KAC7Bn6D,KAAK+6D,eAAiBp7D,IAAMuc,YAC5Blc,KAAKm7D,aAAex7D,IAAMuc,YAC1Blc,KAAKs6D,aAAe,IACxB,CAEAljC,cACI,MAAO,mBACX,CAEAF,cAAc/xC,GAEV,MAAO,6DADPA,EAAU4a,MAAMm3B,cAAc/xC,IAElC,CAEAgyC,6BAA6BztC,GACzB,MAAO,oGAAgFA,IAC3F,CAEA+wE,+BAA+B5nB,EAAKgnB,GAChC75D,KAAKwqB,SAAWpmB,EACZ,sBAAsByuC,IACtB,MACA,CAAC,EACD,CACIvkD,aAAc,CAAC,WAAY,qBAAsB,mBACjD8sE,aAAc,4BAEjBl7E,GAAS8f,KAAK45D,6BAA6B15E,EAAM25E,IAClD75D,KAAK62B,iBACL72B,KAAK82B,2BAEb,CAEAjjD,kBACI,IAAI+qC,EAEAA,EADA5e,KAAKG,MAAMqf,kBAAoBxf,KAAKy5D,mBAA8B,UACvD5lF,YAAgBmM,YAAoBggB,KAAK4Y,QAAQ5wB,WAAWN,YAAc,EAAI,EAAI,EAAG,GAErF7T,cAEX+qC,IAAa5e,KAAKG,MAAMye,UACxB5e,KAAKC,SAAS,CAAC2e,YAEvB,CAEAm7C,iCAAiCryE,GAC7B,IAAIjS,EAAc,EAClB,OAAOiS,EAAWvV,KAAIsV,IAClB,IAAI3H,EAAuB,GAC3B,IAAK,IAAI+oE,KAAMphE,EAAE3H,qBAAsB,CACnC+oE,EAAGpzE,YAAcA,IACjBozE,EAAGniE,UAAYmiE,EAAGniE,UAAYmiE,EAAGniE,UAAU7T,GAAK,KAChDg2E,EAAGliE,aAAekiE,EAAGliE,aAAekiE,EAAGliE,aAAa9T,GAAK,KACzD,IAAK,IAAI2hF,KAAM3L,EAAGhiE,kBACd2tE,EAAGrtE,IAAMqtE,EAAGrtE,IAAItU,GAEpB,IAAK,IAAIwlF,KAAMxP,EAAGnuD,eACd29D,EAAGlxE,IAAMkxE,EAAGlxE,IAAItU,GAEpBiN,EAAqB3B,KAAK0qE,EAC9B,CAEA,OADAphE,EAAE3H,qBAAuBA,EAClB2H,CAAC,GAEhB,CAEA0wC,mBACI,GAAIn4B,KAAKtX,mBACL,OAAOsX,KAAKq7D,4BAGhB,MAAMrzE,EAAagY,KAAK4Y,QAAQ5wB,WAChC,MAAO,CACHA,WAAY,CACRnV,GAAImV,EAAWA,WAAWnV,GAC1BgT,SAAUmC,EAAWnC,SACrBC,MAA4B,OAArBkC,EAAWlC,MAAiB,KAAOkC,EAAWlC,MAAMzT,OAE/DQ,GAAImV,EAAWnV,GACf+S,MAAOoC,EAAWpC,MAAMlN,OACxBqiB,wBAAyB/S,EAAW+S,wBAAwBriB,OAC5DiiB,mBAAoB3S,EAAW2S,mBAAmBjiB,OAClDmd,+BAAgC7N,EAAW6N,+BAC3C+C,+BAAgC5Q,EAAW4Q,+BAC3ClR,WAAYM,EAAWN,WAAWvV,KAAIsV,IAAC,CAE/B5U,GAAI4U,EAAE5U,GACNqoB,eAAgBzT,EAAEyT,eAAiBzT,EAAEyT,eAAeroB,GAAK,KACzD+S,MAAO6B,EAAE7B,MACToQ,cAAevO,EAAEuO,cACjBlW,qBAAsB2H,EAAE3H,qBAAqB3N,KAAI02E,GACtCltE,OAAOwE,OAAO,CAAC,EAAG0oE,EAAI,CAACjiE,QAASiiE,EAAGjiE,QAAQzU,KAAI8gF,GAAQA,EAAKpgF,SAEvEwV,kBAAmBZ,EAAEY,kBACrB/B,cAAemB,EAAEnB,kBAGzBP,gBAAiBiC,EAAWjC,gBAC5BqV,WAAYpT,EAAWoT,WAAWjpB,KAAIsV,IAAC,CAAM5U,GAAI4U,EAAE5U,GAAIY,MAAOgU,EAAEhU,MAAOolB,KAAMpR,EAAEoR,KAAKhmB,OAE5F,CAEAwoF,4BACI,MAAM,WAAErzE,GAAcgY,KAAK4Y,SACrB,yBAAEnY,GAA6BT,KAAKF,MAAM2mC,SAChD,MAAO,CACHz+C,WAAY,CACRnV,GAAImV,EAAWA,WAAWnV,MAEtB4tB,EAAyBjQ,QACvB,CACE3K,SAAUmC,EAAWnC,SACrBC,MAA4B,OAArBkC,EAAWlC,MAAiB,KAAOkC,EAAWlC,MAAMzT,OAE7D,CAAC,GAGXQ,GAAImV,EAAWnV,GACf+S,MAAOoC,EAAWpC,MAAMlN,OACxBkgB,+BAAgC5Q,EAAW4Q,+BAC3ClR,WAAYM,EAAWN,WAAWvV,KAAIsV,IAAC,CAE/B5U,GAAI4U,EAAE5U,GACNqoB,eAAgBzT,EAAEyT,eAAeroB,GACjCiN,qBAAsB2H,EAAE3H,qBAAqB3N,KAAI02E,IAAE,CAE3Ch2E,GAAIg2E,EAAGh2E,GACP0lB,eAAgBswD,EAAGtwD,eACnB/R,KAAMqiE,EAAGriE,KACTI,QAASiiE,EAAGjiE,QAAQzU,KAAI8gF,GAAQA,EAAKpgF,KACrCgU,kBAAmBgiE,EAAGhiE,kBACtBmQ,aAAc6xD,EAAG7xD,aACjBskE,UAAWzS,EAAG0S,eAGtBlzE,kBAAmBZ,EAAEY,yBAIzBoY,EAAyBC,SACvB,CAAC3a,gBAAiBiC,EAAWjC,iBAC7B,CAAC,EAEPqV,WAAYpT,EAAWoT,WAAWjpB,KAC9BsV,IAAC,CAAM5U,GAAI4U,EAAE5U,GAAIY,MAAOgU,EAAEhU,MAAOolB,KAAMpR,EAAEoR,KAAKhmB,OAE1D,CAIA+kD,gBACI,MAAMpY,EAAkBxf,KAAKG,MAAMqf,gBAEnC,IAAIuY,EAAiB,KAUrB,OATI/3B,KAAKG,MAAM43B,eAAe/jD,SAC1B+jD,EACIp4B,IAAAU,cAACyQ,EAAU,CAACE,kBAAgB,GACxBrR,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAASzN,KAAKG,MAAM43B,gBACrCp4B,IAAAU,cAACwR,EAAY,CAACzC,QAASA,IAAMpP,KAAKC,SAAS,CAAC83B,eAAgB,KAAM/lB,MAAI,GAAC,QAM/ErS,IAAAU,cAACyQ,EAAU,CAACQ,OAAK,EAACI,QAAM,GACpB/R,IAAAU,cAACge,GAAc,KACX1e,IAAAU,cAAC2e,GAAS,CACNO,iBAAiB,EACjB3xB,SAAUoS,KAAKi7D,UACfz7C,gBAAiBA,EACjB5V,WAAY5J,KAAKF,MAAMk6D,SAAWh6D,KAAK4Y,QAAQysC,cAAgBrlD,KAAK4Y,QAAQ0S,SAC5E3jC,OAAQqY,KAAK4Y,QAAQhxB,WACrB6wB,IAAKzY,KAAKm7D,aACVzmE,OAAUsL,KAAKG,MAAMirB,MAAQ,UAAY,UAAlC,qBACVprB,KAAKG,MAAM85D,aAAej6D,KAAKw7D,qBAEpC77D,IAAAU,cAACge,GAAc,CAACC,MAAI,EAACC,UAAWve,KAAK+6D,eAAgBz9C,SAAS,MACzDtd,KAAKy7D,6BACN97D,IAAAU,cAACqe,GAAoB,CAACE,SAAU5e,KAAKG,MAAMye,WAC1CY,IAAoBxf,KAAKy5D,mBAA8B,WAAKz5D,KAAKuuD,4BACjE/uC,IAAoBxf,KAAKy5D,mBAA4B,SAAKz5D,KAAK07D,gBAC/Dl8C,IAAoBxf,KAAKy5D,mBAA4B,SAAKz5D,KAAK27D,gBAC/Dn8C,IAAoBxf,KAAKy5D,mBAAmC,gBAAKz5D,KAAK47D,uBACtEp8C,IAAoBxf,KAAKy5D,mBAA8B,WAAKz5D,KAAK67D,kBACjEr8C,IAAoBxf,KAAKy5D,mBAA+B,YAAKz5D,KAAK87D,mBAElE97D,KAAKwyD,gBACLz6B,GAEJ/3B,KAAKG,MAAMw6D,qBAAqB3mF,OAAS,GACtCgsB,KAAK+7D,+BAER/7D,KAAKG,MAAM66D,sBAAsBhnF,OAAS,GACvCgsB,KAAKg8D,8BAIrB,CAEAR,oBACI,OACI77D,IAAAU,cAAA,WAASkM,UAAU,eACf5M,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC/M,IAAAU,cAACmP,IAAI,CAACC,KAAK,OAAO,cAAY,SAAS,uBAClD9P,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC/M,IAAAU,cAACmP,IAAI,CAACC,KAAK,gBAAgB,cAAY,SAAS,iBAGvE,CAEAgsD,6BACI,GAAIz7D,KAAKF,MAAMk6D,QAAW,OAC1B,MAAM1jE,EAAoB0J,KAAK4Y,QAAQ5wB,WAAWsO,kBAClD,OAAIA,GAAqBA,EAAoBlgB,YAAa,IAAI2O,MAEtD4a,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,gLAKZ,IACX,CAEA6hD,4BACI,MAAMhC,IAAcvsD,KAAKF,MAAMk6D,QAC/B,OAAOr6D,IAAAU,cAACo1D,GAAuB,CACnBphC,kBAAmBr0B,KAAK+6D,eACxBryE,mBAAoBsX,KAAKtX,mBACzB6jE,UAAWA,EACX4D,qBAAsB5D,EAAYvsD,KAAKF,MAAMpmB,QAAU,KACvD22E,wBAAyBrwD,KAAKu5D,6BAE9C,CAEAmC,gBACI,MAAMnP,IAAcvsD,KAAKF,MAAMk6D,QAC/B,OAAOr6D,IAAAU,cAAC62D,GAAW,CACP7iC,kBAAmBr0B,KAAK+6D,eACxBxO,UAAWA,EACX4D,qBAAsB5D,EAAYvsD,KAAKF,MAAMpmB,QAAU,KACvD22E,wBAAyBrwD,KAAKu5D,6BAE9C,CAEAoC,gBACI,MAAMpP,IAAcvsD,KAAKF,MAAMk6D,QAC/B,OAAOr6D,IAAAU,cAACs4D,GAAW,CACPtkC,kBAAmBr0B,KAAK+6D,eACxBryE,mBAAoBsX,KAAKtX,mBACzB6jE,UAAWA,EACX4D,qBAAsB5D,EAAYvsD,KAAKF,MAAMpmB,QAAU,KACvD22E,wBAAyBrwD,KAAKu5D,6BAE9C,CAEAqC,uBACI,MAAMrP,IAAcvsD,KAAKF,MAAMk6D,QAC/B,OAAOr6D,IAAAU,cAACmvD,GAAkB,CACdn7B,kBAAmBr0B,KAAK+6D,eACxBryE,mBAAoBsX,KAAKtX,mBACzB6jE,UAAWA,EACX4D,qBAAsB5D,EAAYvsD,KAAKF,MAAMpmB,QAAU,KACvD22E,wBAAyBrwD,KAAKu5D,6BAE9C,CAEAsC,kBACI,MAAMtP,IAAcvsD,KAAKF,MAAMk6D,QAC/B,OAAOr6D,IAAAU,cAACswD,GAAa,CACTt8B,kBAAmBr0B,KAAK+6D,eACxBryE,mBAAoBsX,KAAKtX,mBACzB6jE,UAAWA,EACX4D,qBAAsB5D,EAAYvsD,KAAKF,MAAMpmB,QAAU,KACvD8K,iBAAkBwb,KAAKG,MAAM3b,iBAC7B6rE,wBAAyBrwD,KAAKu5D,4BAC9BlI,yBAA0BrxD,KAAK05D,8BAE/C,CAEAoC,mBACI,MAAMvP,IAAcvsD,KAAKF,MAAMk6D,QAC/B,OAAOr6D,IAAAU,cAACu4D,GAAc,CACVvkC,kBAAmBr0B,KAAK+6D,eACxBryE,mBAAoBsX,KAAKtX,mBACzB6jE,UAAWA,EACX4D,qBAAsB5D,EAAYvsD,KAAKF,MAAMpmB,QAAU,KACvD22E,wBAAyBrwD,KAAKu5D,6BAE9C,CAEA/G,gBACI,MAAMjG,IAAcvsD,KAAKF,MAAMk6D,QACzB9zC,EAAaqmC,GAAavsD,KAAK4Y,QAAQysC,cAAgBrlD,KAAK4Y,QAAQ0S,UACpE,YAAE2uC,EAAW,YAAEhrC,EAAW,eAAEirC,GAAmBl6D,KAAKG,MAC1D,OACIR,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CACTjI,SAAUsc,EACVlU,MAAI,EACJE,UAAQ,EACR9C,QAASpP,KAAKirD,gBACjB,4CACAiP,GACGv6D,IAAAU,cAAA,QAAMkM,UAAU,UAAUkB,KAAK,QAAQ,YAAU,aAAaysD,GAEjED,GACGt6D,IAAAU,cAAA,UAAQ1W,KAAK,SAASylB,QAASA,IAAMr3B,YAAkBioB,KAAKm7D,cAAe5uD,UAAU,WAAU,yBAGvG5M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAAC5B,UAAU,4BAC1BggD,GAAavsD,KAAKF,MAAM2mC,SAAShmC,yBAAyBC,WACxDf,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACwR,EAAY,CAACjI,SAAUsc,EAAY9W,QAASpP,KAAK83B,WAAYvlB,MAAI,EAACL,UAAQ,GAAE+c,GAC5D,aAAhBA,GAA8BtvB,IAAAU,cAAA,QAAMoN,KAAK,QAAQlB,UAAU,WAAU,cAG9E5M,IAAAU,cAACwR,EAAY,CACTtF,UAAU,+BACV3C,SAAUsc,EACVhU,UAAQ,EACR9C,QAASpP,KAAK4qD,cACdr4C,MAAI,GACP,6BAIL5S,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACwR,EAAY,CAACjI,SAAUsc,EAAY9W,QAASpP,KAAK25D,mBAAoBxnD,MAAI,EAACD,UAAQ,GAAC,0CAEvFlS,KAAKG,MAAMiqD,cACRzqD,IAAAU,cAAC6pD,GAAgBvuE,OAAAwE,OAAA,GAAK6f,KAAKF,MAAK,CAAEkqD,eAAgBhqD,KAAMulD,cAAevlD,KAAK4Y,QAAQ2sC,iBAGpG,CAEAyW,8BACI,OACIr8D,IAAAU,cAACoc,GAAY,CAAC9M,QAAS3P,KAAK46D,oCACxBj7D,IAAAU,cAACghB,GAAO,CACJ9b,SAAO,EACP+b,YAAY,uBACZC,aAAcvhB,KAAKG,MAAM66D,wBAC7Br7D,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAK46D,mCAAoCpxD,SAAO,GAAC,OAIxF,CAEAuyD,+BACI,OACIp8D,IAAAU,cAACoc,GAAY,CAAC9M,QAAS3P,KAAK66D,yCACxBl7D,IAAAU,cAACghB,GAAO,CACJv5B,OAAK,EACLw5B,YAAY,QACZC,aAAcvhB,KAAKG,MAAMw6D,uBAC7Bh7D,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CACTrI,SAAO,EACP4F,QAASpP,KAAK66D,yCACjB,OAMjB,EAIJvB,GAAexyB,YAAcse,G,qBCjyB7B,MAAM3jC,GAAc,CAChBpvC,MAAO,EACPC,MAAO,mBAEL2pF,GAA4B,4BAC5BC,GAAgC,gCAChCC,GAAwB,wBAG9B,MAAMC,WAAmBnmC,GAAcp2B,cAAA,SAAA9rB,WAsBnC,KAEA6iD,mBAAsB12C,IAClB6f,MAAM62B,mBAAmB12C,GAEzB,MAAMoY,EAAa2D,YAAoB/b,EAAKmN,gBAG5C2S,KAAKq8D,qBAAuBn8E,EAAKoO,aAAa4tE,IAC9Cl8D,KAAKs8D,gBAAkBp8E,EAAKoO,aAAa2tE,IACzCj8D,KAAKu8D,gBAAkBr8E,EAAKoO,aAAa6tE,IAGzCn8D,KAAKC,SAAS,CAACo2B,gBAAgB,EAAO/9B,WAAYA,GAAY,EACjE,KAEDkkE,uBAAyB,CAACC,EAAatjC,KAE/Bn5B,KAAK08D,uBAAyBt4D,EAC9B,sBAAsBpE,KAAKG,MAAMw8D,sBACjC,SACA,CAAC,EACD,CAAC,EACD38D,KAAK48D,mCACL58D,KAAK68D,iCACL78D,KAAK88D,2CACR,EACJ,KAEDF,mCAAsC18E,IAClC8f,KAAK08D,uBAAyB,KAG9B18D,KAAKC,UAASC,IAAS,CACnB5H,WAAY4H,EAAU5H,WAAWjY,QAAO9K,GAAKA,EAAEyS,WAAWnV,KAAOqtB,EAAUy8D,yBAC3E38D,KAAK+8D,wBAAwB,EACpC,KAEDF,iCAAoC38E,IAChC8f,KAAK08D,uBAAyB,KAC9B18D,KAAKC,SAAS,CAAC+8D,iBAAkB98E,EAAKiF,SAAS,EAClD,KAED23E,2CAA8CpzE,IAC1CsW,KAAK08D,uBAAyB,KAC9B18D,KAAKC,SAAS,CAAC+8D,iBAAkB,4DAAwCtzE,MAAW,EACvF,KAEDuzE,qBAAwBC,IACpBl9D,KAAKC,SACD,CAACk9D,oBAAqBD,IACtB,KACIl9D,KAAKo9D,qBAAuBh5D,EACxB,sBAAsB84D,SACtB,OACA,CAAC,EACD,CAAC,EACDl9D,KAAKq9D,iCACLr9D,KAAKs9D,+BACLt9D,KAAKu9D,yCACR,GAER,EACJ,KAEDF,iCAAmC,CAACn9E,EAAMg9E,KACtCl9D,KAAKo9D,qBAAuB,KAG5B,MAAMp1E,EAAasT,YAAgBpb,EAAKqH,eACxCyY,KAAKC,UAASC,IAAS,CACnB5H,WAAY,IAAI4H,EAAU5H,WAAYtQ,GACtCw1E,oBAAqB,IAAIt9D,EAAUs9D,oBAAqBx1E,EAAWA,WAAWnV,OAC/E,EACN,KAEDyqF,+BAAkCp9E,IAC9B8f,KAAKo9D,qBAAuB,KAC5Bp9D,KAAKC,SAAS,CAAC+8D,iBAAkB,uFAA8D98E,EAAKiF,WAAW,EAClH,KAEDo4E,yCAA4C7zE,IACxCsW,KAAKo9D,qBAAuB,KAC5Bp9D,KAAKC,SAAS,CAAC+8D,iBAAkB,+FAAsEtzE,MAAW,EACrH,KAED+zE,oBAAuBv8B,IACfA,GACAlhC,KAAK09D,iBACL19D,KAAKC,SAAS,CAACwyB,cAAc,KAE7BzyB,KAAKC,SAAS,CACVwyB,cAAc,EACdjpC,QAAS6yD,IAEjB,EACH,KAEDxmB,mBAAqB,CAACx9C,EAAMhG,KACxB2tB,KAAKC,UAAUC,IACJ,CAAC1W,QAAS7N,OAAOwE,OAAO,CAAC,EAAG+f,EAAU1W,QAAS,CAAC,CAACnR,GAAOhG,OACjE,EACL,KAEDsrF,uBAAyB,KAErB39D,KAAK08D,uBAAyBt4D,EAC1B,sBAAsBpE,KAAKG,MAAMy9D,+BACjC,OACA,CAAC,EACD,CAAC,EACD59D,KAAK69D,mCACL79D,KAAK89D,iCACL99D,KAAK+9D,2CACR,EACJ,KAEDF,mCAAsC39E,IAClC8f,KAAKg+D,uBAAyB,KAC9B,MAAMC,EAAiB3iE,YAAgBpb,EAAKqH,eAG5CyY,KAAKC,UACDC,IACI,IAAI5H,EAAa,GACjB,IAAK,IAAI/iB,KAAK2qB,EAAU5H,WAChB/iB,EAAEyS,WAAWnV,KAAOqtB,EAAU09D,wBAC9BroF,EAAEyS,WAAW0B,OAAS/N,OAAOwE,OAAO,CAAC,EAAG5K,EAAEyS,WAAW0B,OAAQu0E,EAAev0E,SAEhF4O,EAAWna,KAAK5I,GAEpB,MAAO,CAAC+iB,aAAW,GAEvB0H,KAAK+8D,wBACR,EACJ,KAEDe,iCAAoC59E,IAChC8f,KAAKg+D,uBAAyB,KAC9Bh+D,KAAKC,SAAS,CAAC+8D,iBAAkB98E,EAAKiF,SAAS,EAClD,KAED44E,2CAA8Cr0E,IAC1CsW,KAAKg+D,uBAAyB,KAC9Bh+D,KAAKC,SAAS,CAAC+8D,iBAAkB,4DAAwCtzE,MAAW,EACvF,KAEDqzE,wBAA0B,KACtB/8D,KAAKC,SAAS,CACV08D,oBAAqB,KACrBuB,uBAAwB,GACxBN,sBAAuB,KACvBO,yBAA0B,IAC5B,CACL,CA5KDhlD,oBACQnZ,KAAKF,MAAMk6D,UAEf3lF,SAASqgB,MAAQ,+CACjBqL,MAAMoZ,oBACV,CAEAqL,uBACIzkB,MAAMykB,uBAEN,IAAK,IAAI7f,IAAO,CAAC3E,KAAK08D,uBAAwB18D,KAAKo9D,qBAClCp9D,KAAKg+D,wBACN,OAARr5D,GACAA,EAAIimB,OAGhB,CAgKA4L,mBAAmB12B,GACf,MAAO,CACHu2B,gBAAgBv2B,EAAMk6D,QACtBvnC,cAAc,EACd2rC,oBAAqB,CACjB/rF,MAAOkY,KAA8B,GAAG,GACxCjY,MAAOiY,KAA8B,GAAG,IAE5CoyE,oBAAqB,KACrBuB,uBAAwB,GACxBN,sBAAuB,KACvBO,yBAA0B,GAC1B30E,QAAS7N,OAAOwE,OAAO,CAAC,EAAGk8D,IAC3B8gB,oBAAqB,KACrBK,oBAAqB,GACrBllE,WAAY,GACZ0kE,iBAAkB,GAE1B,CAEAtmC,UAAU52B,GACNE,KAAKq8D,qBAAuB,KAC5Br8D,KAAKs8D,gBAAkB,KACvBt8D,KAAKu8D,gBAAkB,CAAC,EAExBv8D,KAAKq+D,gBAAkB,KAGvBr+D,KAAK08D,uBAAyB,KAC9B18D,KAAKo9D,qBAAuB,KAC5Bp9D,KAAKg+D,uBAAyB,KAE1Bh+D,KAAKF,MAAMk6D,UAEfh6D,KAAKs+D,cAAgB,GACrBt+D,KAAKu+D,eAAiB,GAC1B,CAEAnnC,cACI,MAAO,oBACX,CAEAE,eACI,MAAO,CACHhpC,aAAc,CACV2tE,GAA2BC,GAC3BC,IACJn8B,KAAM,aAEd,CAEA9I,cAAc/xC,GAEV,MAAO,2DADPA,EAAU4a,MAAMm3B,cAAc/xC,IAElC,CAEAgyC,6BAA6BztC,GACzB,MAAO,2HAA8EA,IACzF,CAIAg0E,iBAGI,IAAIc,EAAW,GACXF,EAAgB,GAChBG,EAAY,GACZF,EAAiB,GAErB,IAAK,IAAIhpF,KAAKyqB,KAAKG,MAAM7H,WAAY,CACjC,MAAM,YAAEjV,EAAW,eAAEM,GAAmBpO,EAAEyS,WAC1C,GAAI3E,EAAa,CACb,MAAMq7E,EAAU/7E,YAAgBU,GAC3Bm7E,EAAS/pF,SAASiqF,KACnBF,EAASrgF,KAAKugF,GACdJ,EAAcngF,KAAK,CAACugF,EAASr7E,EAAYxQ,KAEjD,CAEA,GAAI8Q,EAAgB,CAChB,MAAMg7E,EAAWh8E,YAAgBgB,GAC5B86E,EAAUhqF,SAASkqF,KACpBF,EAAUtgF,KAAKwgF,GACfJ,EAAepgF,KAAK,CAACwgF,EAAUh7E,EAAe9Q,KAEtD,CACJ,CAEAmtB,KAAKs+D,cAAgBA,EAAcv+E,OAAO5N,KAAIgoC,IAAA,IAAEukD,EAAS7rF,GAAGsnC,EAAA,MAAK,CAACtnC,EAAI6rF,EAAQ,IAC9E1+D,KAAKu+D,eAAiBA,EAAex+E,OAAO5N,KAAIooC,IAAA,IAAEokD,EAAU9rF,GAAG0nC,EAAA,MAAK,CAAC1nC,EAAI8rF,EAAS,GACtF,CAIA/mC,gBACI,MAAM,sBACFgmC,EAAqB,oBACrBT,EAAmB,oBACnBiB,EAAmB,QACnB50E,EAAO,aACPipC,EAAY,WACZn6B,EAAU,oBACVqkE,GACA38D,KAAKG,OACH,QAAE65D,GAAYh6D,KAAKF,MAEnBzS,EAAiB5C,anCtNFm0E,EAACl0E,EAAmB+nC,EAAcjpC,KAC3D,IAAKipC,EACD,OAAO/nC,EAGX,IAAI2C,EAAiB3C,EAAkB9L,QACvC,IAAK,IAAKvG,EAAMhG,KAAUsJ,OAAOC,QAAQ4N,GACrC,GAAIA,EAAQnR,KAAUgkE,GAA+BhkE,GACjD,GAAI,CAAC,cAAe,kBAAkB5D,SAAS4D,GAC3CgV,EAAiBA,EAAehN,QAAO9K,GAAKA,EAAEyS,WAAW3P,GAAMxF,KAAOR,SACnE,GAAa,WAATgG,EACPgV,EAAiBA,EAAehN,QAAO9K,GAAKA,EAAEyS,WAAW0B,OAAO7W,KAAOR,SACpE,GAAa,UAATgG,EACPgV,EAAiBA,EAAehN,QAAO9K,GAAiB,OAAZA,EAAE8C,IAAkB9C,EAAE8C,GAAMgH,cAAc5K,SAASpC,EAAMgN,sBAClG,GAAa,qBAAThH,EAA6B,CACpC,MAAO+Q,EAAMy1E,GAAWxmF,EAAKE,MAAM,KACnC8U,EAAiBA,EAAehN,QAAO9K,IACnC,MAAMupF,EAAUvpF,EAAE6T,GAAMy1E,GACxB,OAAmB,OAAZC,GAAoBA,EAAQz/E,cAAc5K,SAASpC,EAAMgN,cAAc,GAEtF,MACIgO,EADgB,gBAAThV,EACUgV,EAAehN,QAAO9K,IACnC,IAAI0kB,EAAc1kB,EAAE8C,GAIpB,OAHM4hB,IACFA,EAAcA,EAAYrb,MAAM,EAAG,KAEhCqb,IAAgB5nB,CAAK,IAGfgb,EAAehN,QAAO9K,GAAKA,EAAE8C,KAAUhG,IAIpE,OAAOgb,CAAc,EmCsLbuxE,CAAqBtmE,EAAYm6B,EAAcjpC,GAC/C40E,EAAoB/rF,OAGxB,OACIstB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC6vD,GAAa,CAACr5D,MAAM,gCAAgCnd,QAASsmB,KAAKF,MAAMysD,UAAYvsD,KAAKF,MAAMpmB,QAAU,OAC1GimB,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,4BAC1BjN,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,8BAAkBrf,EAAerZ,QAC5C2rB,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,qBACjB5M,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACiY,GAAc,CAACxL,IAAI,QAAQx6B,MAAM,SAAS6E,UAAWwoB,IAAMuc,aACxDvc,IAAAU,cAAC4Y,GAAM,CACHgB,mBAAoBA,IAAe,wCACnC1N,UAAU,gBACVwM,WAAYihD,EACZnhD,cAAc,EACdrI,QAASjmB,KAA8BpY,KAAIuoC,IAAA,IAAEroC,EAAOC,GAAMooC,EAAA,MAAM,CAACroC,QAAOC,QAAM,IAC9ED,MAAO+rF,EACPhoD,SAAWiG,GAAmBrc,KAAKC,SAAS,CAACm+D,oBAAqB/hD,IAClEjR,OAAQF,EACRsR,iBAAkBA,IAAM,yBAGhC7c,IAAAU,cAACiY,GAAc,CACX/L,UAAU,6BACVj6B,MAAM,UACNq6B,SAAS,wBACTG,IAAI,SAEJnN,IAAAU,cAAC0+D,KAAM,CACH,aAAY,8BAA0BtsC,EAAe,uHAAkG,UACvJyO,QAASzO,EACT7oB,SAAUowD,EACV5jD,SAAW8G,GAAOld,KAAKy9D,oBAAoBvgD,EAAGiI,OAAO+b,SACrDruD,GAAG,6BAKnB8sB,IAAAU,cAACyQ,EAAU,CAACQ,OAAK,EAACI,QAAM,EAACH,SAAO,GAC3BkhB,GAAgBzyB,KAAK05B,gBACtB/5B,IAAAU,cAACyQ,EAAU,CAACE,kBAAgB,EAACzE,UAAU,sBAAsBO,IAAI,MAC5D9M,KAAKg/D,4BACL3xE,EAAelb,KAAKoD,GAAMyqB,KAAKi/D,iBAAiB1pF,MAE5B,OAAxBonF,GAAgC38D,KAAKk/D,2BACX,OAA1BtB,GAAkC59D,KAAKm/D,8BAEnB,OAAxBhC,GAAgCn9D,KAAKo/D,oBAClC/xE,EAAehN,QAAO9K,GAAKC,SAASD,EAAEyS,WAAWnV,MAAQ2C,SAAS2nF,KAAsB,GAAGv3E,OAG3G,CAEA8zC,gBACI,MAAMlwC,EAAUwW,KAAKG,MAAM3W,QAErB61E,EAAkBr/D,KAAKs+D,cACvBgB,EAAkB,CAAC,EACzB,IAAK,IAAKzsF,EAAI0sF,KAAaF,EACvBC,EAAgBzsF,GAAM0sF,EAG1B,MAAMC,EAAqBx/D,KAAKu+D,eAC1BkB,EAAqB,CAAC,EAC5B,IAAK,IAAK5sF,EAAI0sF,KAAaC,EACvBC,EAAmB5sF,GAAM0sF,EAG7B,MAAMG,EAAyB//D,IAAMuc,YAC/ByjD,EAA0BhgE,IAAMuc,YAChC6vC,EAAsBpsD,IAAMuc,YAElC,OACIvc,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,UAAU10B,MAAO,CAACq4B,OAAQ,IAC3CvQ,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,aAAQw6B,IAAI,QAAQH,SAAS,oBAC/ChN,IAAAU,cAAC2jB,GAAe,CACZe,WAAS,EACTC,kBAAkB,aAClBmB,UAAW,IACX9zC,MAAOmX,EAAQ5D,MACfwwB,SAAW8G,GAAOld,KAAK61B,mBAAmB,QAAS3Y,EAAGiI,OAAO9yC,OAC7Dk6B,UAAU,iBACVmY,QAAUxH,GAAOld,KAAK61B,mBAAmB,QAAS,IAClDhjD,GAAG,sBAEX8sB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,wBAAmBw6B,IAAI,QAAQH,SAAS,qBAC1DhN,IAAAU,cAAC2jB,GAAe,CACZgB,kBAAkB,wBAClBmB,UAAW,GACX9zC,MAAOmX,EAAQ8yD,iBACflmC,SAAW8G,GAAOld,KAAK61B,mBAAmB,mBAAoB3Y,EAAGiI,OAAO9yC,OACxEk6B,UAAU,iBACVmY,QAAUxH,GAAOld,KAAK61B,mBAAmB,mBAAoB,IAC7DhjD,GAAG,uBAEX8sB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,gBAAWw6B,IAAI,QAAQ31B,UAAWwoB,IAAMuc,aAC1Dvc,IAAAU,cAAC4Y,GAAM,CACHgB,mBAAoBA,IAAe,wCACnC1N,UAAU,+BACViE,QAAS,CAACiR,IAAe0jB,UAAUk6B,EAAgBltF,KAAImnC,IAAA,IAAEzmC,EAAIP,GAAMgnC,EAAA,MAAM,CAACjnC,MAAOQ,EAAIP,MAAOA,EAAM,KAClGD,MAAO,CAACA,MAAOmX,EAAQnG,aAAeo+B,GAAYpvC,MAAOC,MAAOgtF,EAAgB91E,EAAQnG,cAAgBo+B,GAAYnvC,OACpH8jC,SAAWiG,GAAkBrc,KAAK61B,mBAC9B,cAAkC,OAAnBxZ,EAA0B,EAAI7mC,SAAS6mC,EAAehqC,QACzE+4B,OAAQF,EACRsR,iBAAkBA,IAAM,yBAGhC7c,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,kBAAkBw6B,IAAI,QAAQp1B,SAAUgoF,GAC1D//D,IAAAU,cAACwV,EAAY,CACT0B,SAAS,kBACTf,UAAWkpD,EACXrtF,MAAO0S,KAAK2gB,MAAMlc,EAAQtG,gBAC1BkzB,SAAWlgC,GAAS8pB,KAAK61B,mBAAmB,iBAAkBz/C,YAAaF,OAEnFypB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,SAASw6B,IAAI,QAAQ31B,UAAWwoB,IAAMuc,aACxDvc,IAAAU,cAAC4Y,GAAM,CACHgB,mBAAoBA,IAAe,wCACnC1N,UAAU,+BACViE,QAAS,CAACiR,IAAe0jB,UAAUxpD,OAAOC,QAAQokB,KAAKu8D,iBAAiBpqF,KAAIsnC,IAAA,IAAE5mC,EAAIwF,GAAKohC,EAAA,MAAK,CAACphC,EAAMxF,EAAG,IAAEkN,OAAO5N,KAAIytF,IAAA,IAAEvnF,EAAMxF,GAAG+sF,EAAA,MAAM,CAACvtF,MAAOQ,EAAIP,MAAO+F,EAAK,KAC5JhG,MAAO,CAACA,MAAOmX,EAAQE,QAAU+3B,GAAYpvC,MAAOC,MAAO0tB,KAAKu8D,gBAAgB/yE,EAAQE,SAAW+3B,GAAYnvC,OAC/G8jC,SAAWiG,GAAkBrc,KAAK61B,mBAC9B,SAA6B,OAAnBxZ,EAA0B,EAAI7mC,SAAS6mC,EAAehqC,QACpE+4B,OAAQF,EACRsR,iBAAkBA,IAAM,yBAGhC7c,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,mBAAcw6B,IAAI,QAAQ31B,UAAWwoB,IAAMuc,aAC7Dvc,IAAAU,cAAC4Y,GAAM,CACHgB,mBAAoBA,IAAe,wCACnC1N,UAAU,+BACViE,QAAS,CAACiR,IAAe0jB,UAAUq6B,EAAmBrtF,KAAI0tF,IAAA,IAAEhtF,EAAIP,GAAMutF,EAAA,MAAM,CAACxtF,MAAOQ,EAAIP,MAAOA,EAAM,KACrGD,MAAO,CAACA,MAAOmX,EAAQ7F,gBAAkB89B,GAAYpvC,MAAOC,MAAOmtF,EAAmBj2E,EAAQ7F,iBAAmB89B,GAAYnvC,OAC7H8jC,SAAWiG,GAAkBrc,KAAK61B,mBAC9B,iBAAqC,OAAnBxZ,EAA0B,EAAI7mC,SAAS6mC,EAAehqC,QAC5E+4B,OAAQF,EACRsR,iBAAkBA,IAAM,yBAGhC7c,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,mBAAmBw6B,IAAI,QAAQp1B,SAAUioF,GAC3DhgE,IAAAU,cAACwV,EAAY,CACT0B,SAAS,mBACTf,UAAWmpD,EACXttF,MAAO0S,KAAK2gB,MAAMlc,EAAQhG,iBAC1B4yB,SAAWlgC,GAAS8pB,KAAK61B,mBAAmB,kBAAmBz/C,YAAaF,OAEpFypB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,8BAAyBw6B,IAAI,QAAQp1B,SAAUq0E,GACjEpsD,IAAAU,cAACwV,EAAY,CACT0B,SAAS,8BACTf,UAAWu1C,EACX15E,MAAO0S,KAAK2gB,MAAMlc,EAAQyQ,aAC1Bmc,SAAWlgC,GAAS8pB,KAAK61B,mBAAmB,cAAez/C,YAAaF,QAKhG,CAEA8oF,4BACI,OACIr/D,IAAAU,cAACyN,EAAG,CAACI,eAAa,GACdvO,IAAAU,cAACyQ,EAAU,CAACC,QAAM,EAACS,YAAU,GACzB7R,IAAAU,cAACwR,EAAY,CACTC,KAAG,EACHlI,WAAY5J,KAAKF,MAAMk6D,QACvB5qD,QAASA,IAAMpP,KAAKF,MAAM+tB,QAAQ1vC,KAAK,oBACvCouB,UAAU,OAAO,+BAMrC,CAEA0yD,iBAAiB1pF,GACb,MAAMmU,EAASlU,SAASD,EAAEyS,WAAW0B,OAAO7W,IACtCitF,EAAUp2E,IAAWlU,SAASwqB,KAAKs8D,iBACnCyD,EAAcr2E,IAAWlU,SAASwqB,KAAKq8D,sBACvC2D,EAAW/+E,YAAsB1L,EAAEyS,WAAW0B,SAC9C,kBAAE4M,GAAsB/gB,EAAEyS,WAChC,OACI2X,IAAAU,cAACyN,EAAG,CACAvB,UAAU,qBACV2B,eAAa,EACbpB,IAAI,KACJ0B,YAAaj5B,EAAEqQ,OAAS,IACxBnK,IAAKlG,EAAE1C,GACPk7B,qBAAsB,qCAA2Bx4B,EAAEqQ,oCACnDqoB,YACItO,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,MAAIkM,UAAU,WAAU,0CACxB5M,IAAAU,cAAA,UACIV,IAAAU,cAAA,UACIV,IAAAU,cAACwR,EAAY,CACTjI,UAAWk2D,IAAYC,EACvB3wD,QAASA,IAAMpP,KAAKF,MAAM+tB,QAAQ1vC,KAC9B4nB,EAAKY,mBAAmBJ,OAAOhxB,EAAEyS,WAAWnV,KAEhD05B,UAAU,kBAAkB,WAIpC5M,IAAAU,cAAA,UACIV,IAAAU,cAACwR,EAAY,CACTtF,UAAU,iBACV3C,SAAUo2D,EACV5wD,QAASA,KACLpP,KAAKi9D,qBAAqB1nF,EAAEyS,WAAWnV,IAEvCqF,aAAkB,GAEzB,YAILynB,IAAAU,cAAA,UACIV,IAAAU,cAACwR,EAAY,CACTzC,QAASA,KACLpP,KAAKC,SACD,CAAC08D,oBAAqBpnF,EAAEyS,WAAWnV,GAAIqrF,uBAAwB3oF,EAAEqQ,QACjE,IAAM1N,eACT,EAEL0xB,UAAWk2D,EACXvzD,UAAU,kBAAkB,cAIpC5M,IAAAU,cAAA,UACIV,IAAAU,cAACwR,EAAY,CACTzC,QAASA,KACLpP,KAAKC,SACD,CAAC29D,sBAAuBroF,EAAEyS,WAAWnV,GAAIsrF,yBAA0B5oF,EAAEqQ,QACrE,IAAM1N,eACT,EAEL0xB,UAAWm2D,EACXxzD,UAAU,kBAAkB,cAQ/CvM,KAAKG,MAAMq9D,oBAAoB/oF,SAASc,EAAEyS,WAAWnV,KAAO8sB,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,8BACxE/M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,yBAClBqtB,IAAAU,cAACgM,EAAI,KAAE92B,EAAEyS,WAAWgQ,OAAS,MAEjC2H,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,UAClBqtB,IAAAU,cAACgM,EAAI,KAAE92B,EAAEyS,WAAW0B,OAAOjW,OAC1BiW,IAAWsW,KAAKq8D,sBAAwB9mF,EAAEyS,WAAW+N,mBAAqB4J,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,uCAG9F/M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAO,SAAyB,OAAjBgkB,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmBtiB,QAAS,GAAKsiB,EAAoBlgB,YAAa,IAAI2O,MAAU,cAAgB,gBAC3H4a,IAAAU,cAACgM,EAAI,KAAE/V,GAAqB,MAEhCqJ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,+BAClBqtB,IAAAU,cAACgM,EAAI,KAAE92B,EAAE0kB,aAAe,OAGhC0F,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,gDAClBqtB,IAAAU,cAACgM,EAAI,KACA92B,EAAEsgB,+BAAiC,MAAQ,MAC3CtgB,EAAEsgB,gCAAkC,uBAAatgB,EAAEoiB,oBAI5DgI,IAAAU,cAAC4/D,KAAW,CAACpoF,MAAO,CAACyrD,MAAO,SACxB3jC,IAAAU,cAACwR,EAAY,CACTtF,UAAU,gBACV3C,SAAUo2D,EACVx2D,SAAO,EACPsD,IAAK+D,IACLhnB,GAAI,eAAetU,EAAEyS,WAAWnV,KAAK6W,IAAWsW,KAAKs8D,gBAAkB,WAAa,MACvF,+BACkB38D,IAAAU,cAAA,QAAMkM,UAAU,WAAW,oBAAeh3B,EAAEqQ,UAE9DrQ,EAAE2qF,YAAc,GAAKvgE,IAAAU,cAAC0gB,KAAK,CAACzuC,MAAOiD,EAAE2qF,eAMtD,CAEAhB,2BACI,OAAOl/D,KAAKmgE,mBAAmB,mBAAU,YAAQ,UAAWngE,KAAKw8D,uBACrE,CAEA4C,oBAAoBgB,GAChB,IAAI1mF,EAQJ,OANIA,EADAsmB,KAAKG,MAAM68D,iBAAiBhpF,OAExB2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAQ,2DAAqCzN,KAAKG,MAAM68D,kBAGnE,mBAAcoD,EAAoBpsF,OAAS,EAAI,IAAMosF,EAAsB,IAAM,6CAG3FzgE,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,SACVqQ,YAAaljC,EACbi2B,QAASA,IAAM3P,KAAKC,SAAS,CAAEk9D,oBAAqB,KAAMH,iBAAkB,MAE5Er9D,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACzC,QAASA,IAAMpP,KAAKC,SAAS,CAACk9D,oBAAqB,KAAMH,iBAAkB,KAAMxzD,SAAO,GAAC,OAIvH,CAEA21D,6BACI,OAAOn/D,KAAKmgE,mBAAmB,gBAAY,SAAU,YAAangE,KAAK29D,uBAC3E,CAEAwC,mBAAmBE,EAAYC,EAAYC,EAAcC,GACrD,IAAI9mF,EAASgb,EAAQ,KA4BrB,OA3BIsL,KAAKG,MAAM68D,iBAAiBhpF,QAC5B0gB,EAAQ,2BAAiB2rE,qBAEzB3mF,EACIimB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAASzN,KAAKG,MAAM68D,kBACrCr9D,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CACTzC,QAASA,IAAMpP,KAAKC,SAChB,CAAC+8D,iBAAkB,GAAI,CAAC,GAAGuD,iBAA6B,KAAM,CAAC,GAAGA,oBAAgC,KAEtG/2D,SAAO,GAAC,UAOxB9U,EAAQ,uBAAuB2rE,sBAA0BrgE,KAAKG,MAAM,GAAGogE,qBAAkC,sBAEzG7mF,EACIimB,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAK+8D,wBAAyBhrD,QAAM,GAAC,8BAC5DpS,IAAAU,cAACwR,EAAY,CAACzC,QAASoxD,EAAcnuD,QAAM,GAAEiuD,EAAW,sBAKhE3gE,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,SACVqQ,YAAaloB,EACbioB,UAAY74B,IAAQkc,KAAKq+D,gBAAkBv6E,CAAC,EAC5C6rB,QAASA,KAAQ3P,KAAKC,SAAS,CAAE,CAAC,GAAGsgE,iBAA6B,KAAM,CAAC,GAAGA,oBAAgC,IAAK,GAEhH7mF,EAGb,EC3qBJ,MAAMw2E,WAAsBj6B,GAIxB9c,oBAEQnZ,KAAKF,MAAMpmB,QACXsmB,KAAKC,SAAS,CAACo2B,gBAAgB,EAAOp9B,MAAO+G,KAAKF,MAAMpmB,UAI5DsmB,KAAKi3B,kBACT,CAIAL,mBAAmB12C,GACf6f,MAAM62B,mBAAmB12C,GACzB8f,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBp9B,MAAOmD,YACHlc,EAAM,CAACub,iBAAkB,CAAC,WAAaxC,OAEnD,CAEA49B,iBAAiB32C,GAEb8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CAACo2B,gBAAgB,GACnC,CAEAS,2BAA2BptC,GAEvBsW,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CAACo2B,gBAAgB,GACnC,CAIAG,mBAAmB12B,GACf,MAAO,CACH2gE,UAAU,EACVxnE,MAAO,CAAC,EAEhB,CAEAm+B,cACI,MAAO,aAAap3B,KAAKF,MAAMjJ,OACnC,CAEAygC,eACI,MAAO,CAAC1jC,OAAQoM,KAAKF,MAAMjJ,MAC/B,CAIAuJ,SACI,GAAIJ,KAAKG,MAAMk2B,iBAAmB16C,OAAOS,KAAK4jB,KAAKG,MAAMlH,OAAOjlB,OAAU,OAAO,KACjF,MAAM,MACFilB,EAAK,SACLwnE,GACAzgE,KAAKG,MACT,OACIR,IAAAU,cAAA,WAASkM,UAAU,QACf5M,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKR,cAAY,GAAErT,EAAMpB,UACnC8H,IAAAU,cAACwR,EAAY,CAACG,MAAI,EAAC5C,QAASA,IAAMpP,KAAKC,UAASC,IAAS,CAAMugE,UAAWvgE,EAAUugE,aAAal0D,UAAU,mBAAmBk0D,EAAW,kBAAe,qBACvJA,GAAY9gE,IAAAU,cAACi/C,GAAiB,CAAC5lE,QAASuf,EAAMkB,QAG3D,EAIJ+1D,GAAcppB,YAAcse,GCjE5B,MAAMsb,GAAgB,CAClBpnE,kBAAmB,OACnBb,eAAgB,KAChB9B,UAAW,KACXgqE,uBAAwB,QACxBntE,OAAQ,KACR2D,WAAY,SAIhB,MAAMypE,WAAa/oC,GAAkBh4B,cAAA,SAAA9rB,WAAA,KAkCjC8sF,wBAA0B,CAAC3gF,EAAMnH,KAC7BinB,KAAKC,SACD,CACItH,YAAazY,EAAKqS,YAClB+G,kBAAmBpZ,EAAK6S,UACxB0F,eAAgBvY,EAAK4S,SACrB6D,UAAWzW,EAAK8M,SAChB+M,gBAAiB7Z,EAAKiQ,kBACtBqD,OAAQtT,EAAKsT,OACb2D,WAAYjX,EAAKgQ,cAErB,KACI8P,KAAK8gE,iBACL9gE,KAAK+gE,eACDhoF,GACAA,GACJ,GAEP,EACJ,KAEDioF,8BAAgC,CAAC9gF,EAAMnH,KACnCinB,KAAKC,SACD,CACI3G,kBAAmBpZ,EAAK6S,UACxB0F,eAAgBvY,EAAK4S,SACrB6D,UAAWzW,EAAK8M,SAChBwG,OAAQtT,EAAKsT,OACb2D,WAAYjX,EAAKgQ,cAErB,KACI8P,KAAK+gE,eACDhoF,GACAA,GACJ,GAEP,EACH,KAEFkoF,2BAA6B,CAAC/gF,EAAMnH,KAChCinB,KAAKC,SACD,CACIxH,eAAgBvY,EAAK4S,SACrB6D,UAAWzW,EAAK8M,SAChBwG,OAAQtT,EAAKsT,OACb2D,WAAYjX,EAAKgQ,cAErB,KACI8P,KAAK+gE,eACDhoF,GACAA,GACJ,GAEP,EACH,KAEFmoF,sBAAwB,CAAChhF,EAAMnH,KAC3BinB,KAAKC,SACD,CACItJ,UAAWzW,EAAK8M,SAChBwG,OAAQtT,EAAKsT,OACb2D,WAAYjX,EAAKgQ,cAErB,KACI8P,KAAK+gE,eACDhoF,GAAYA,GAAU,GAEjC,EACH,KAEFylD,mBAAsBt+C,IAClB8f,KAAKC,SACD,CAACzM,OAAQtT,EAAKsT,QACdwM,KAAK+gE,aACR,EACH,KAEFI,uBAA0BjhF,IACtB8f,KAAKC,SACD,CAAC9I,WAAYjX,EAAKgQ,aAClB8P,KAAK+gE,aACR,EACH,KAeFK,mBAAsB/uF,IAClB2tB,KAAKqhE,kBACDhvF,EAAO,SAAU,IAAI2tB,KAAKshE,wBAAwB,EACxD,KAEFC,8BAAiClvF,IAC7B2tB,KAAKqhE,kBACDhvF,EAAO,kBAAmB+qD,GAAgC,EACjE,KAEDtF,WAAa,KACT93B,KAAKC,SACD,CAACqrB,UAAU,EAAM3jC,OAAQ,CAAC,IAC1B,KACI,IAAIzH,EAAO,CACPzM,MAAOusB,KAAKG,MAAM1sB,MAAMiF,OACxB4gB,mBAAoB0G,KAAKG,MAAM7G,mBAAqB,CAAC,GAAGjnB,OAAS,EACjEomB,gBAAiBuH,KAAKG,MAAM1H,gBAAkB,CAAC,GAAGpmB,OAAS,EAC3DskB,WAAYqJ,KAAKG,MAAMxJ,WAAa,CAAC,GAAGtkB,OAAS,EACjD2lB,MAAOgI,KAAKG,MAAMqhE,OAAOnvF,OAAS,IAGtC,MAAM,YAAEsmB,GAAgBqH,KAAKG,MAC7BjgB,EAAkB,YAAIyY,EAAYtmB,MAC9BgQ,YAAsBsW,KACjBqH,KAAKF,MAAM2hE,YACZvhF,EAAwB,kBACpB8f,KAAKG,MAAMpG,gBAAgB1nB,OAAS,IAE5C6N,EAAa,QAAK8f,KAAKG,MAAM3M,QAAU,CAAC,GAAGnhB,OAAS,GAEpDiQ,YAA2BqW,KAC3BzY,EAAkB,aACd8f,KAAKG,MAAMhJ,YAAc,CAAC,GAAG9kB,OAAS,GAI9C2tB,KAAKg4B,aAAe5zB,EAChBpE,KAAKF,MAAMuwC,QACX,OACA,CAAC,EACDj0C,YAAoBlc,EAAM,CAACsb,UAAU,IACrCwE,KAAKo4B,uBACLp4B,KAAKq4B,qBACLr4B,KAAKs4B,+BACLt4B,KAAKu4B,qBACR,GAER,EACJ,KAEDH,uBAA0Bl4C,IACtB6f,MAAMq4B,uBAAuBl4C,GAC7B8f,KAAKF,MAAMmiB,OAAO7lB,YAAoBlc,GAAM8f,KAAKF,MAAM2hE,UAAY,UAAY,SAAS,CAC3F,CArLD7qC,mBAAmB12C,GAEf,GADA6f,MAAM62B,mBAAmB12C,IACpBA,EAAKwC,cAAgB,IAAI1O,OAA9B,CACI,MAAM0O,EACFD,YAA8BvC,GAAMwC,aACxCsd,KAAKC,SACD,CACIo2B,gBAAgB,EAChBjM,WAAY,GACZzxB,YAAajW,EAAa,GAC1Bg/E,YAAah/E,IAEjB,KACIsd,KAAK8gE,iBACL9gE,KAAKC,SAAS,CAACk9C,WAAYn9C,KAAK2hE,iBAAiB,GAI7D,MACA3hE,KAAK62B,iBAAiB,CAAC,EAC3B,CAEAC,2BAA2BptC,GACvBsW,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBjM,WAAYpqB,KAAKm3B,6BAA6BztC,IAEtD,CAsFA23E,kBAAkBhvF,EAAOwV,EAAUm/C,GAC/B30D,EAAQA,EAAM8D,QAAQ,iBAAkB,IAAI+mB,cAC5C8C,KAAKC,UACDC,IAAS,CACL,CAACrY,GAAW,IACLqY,EAAUrY,MACRxV,EAAsB,CAACA,QAAOuP,KAAMvP,EAAOC,MAAOD,GAA1C20D,MAGrBhnC,KAAK+gE,aAEb,CA4DA5qC,SAASr2B,GACLE,KAAK4hE,MAAQ,EACjB,CAEAN,uBACI,MAAO,CACHjvF,MAAO,GACPuP,KAAMoe,KAAKF,MAAM+hE,WACjBvvF,MAAO0tB,KAAKF,MAAM+hE,WAE1B,CAEArrC,mBAAmB12B,GACf,MAAO,CAEHrsB,MAAO,GACPklB,YAAa,KACbW,kBAAmB,KACnBb,eAAgB,KAChB9B,UAAW,KAEXoD,gBAAiB,IAAIqjC,IACrB5pC,OAAQ,KACR2D,WAAY,KACZqqE,OAAQ,IAAIxhE,KAAKshE,wBAEjBnkB,WAAY,GACZukB,YAAa,GACblpE,iBAAkB,GAClB9B,UAAW,GACXorE,QAAS,GACTC,WAAY,GAEpB,CAEArrC,UAAU52B,GACNE,KAAKg4B,aAAe,KACpBh4B,KAAKG,MAAkB,WAAIH,KAAK2hE,eACpC,CAEAvqC,cACI,OAAO1Q,GAAShkC,aAAa+a,IACjC,CAEAy5B,cAAc/xC,GACV,MAAO,6DAA8CuZ,YAAsBvZ,IAC/E,CAEAgyC,6BAA6BztC,GACzB,MAAO,sHAAmFA,IAC9F,CAEAo3E,iBACI,IAAIc,EAAQ,CACR,CAAC,GAAI,qBACL,CAAC,IAAK,mBAEV,MAAM,YAAEjpE,GAAgBqH,KAAKG,MACvBo/B,EAAal9C,YAAsBsW,GACnC6mC,EAAkBl9C,YAA2BqW,GAE/C4mC,IACAqiC,EAAMzjF,KAAK,CAAC,IAAK,YAAa,2BACzB6hB,KAAKF,MAAM2hE,WACZG,EAAMzjF,KAAK,CAAC,IAAK,oBAErByjF,EAAMzjF,KAAK,CAAC,IAAK,YAEjBqhD,IACAoiC,EAAMzjF,KAAK,CAAC,IAAK,cACjByjF,EAAMzjF,KAAK,CAAC,IAAK,gBAGrByjF,EAAMzjF,KAAK,CAAC,IAAK,WACjB6hB,KAAK4hE,MAAQA,CACjB,CAEAD,gBACI,IAAIxkB,EAAa,GACjB,IAAK,IAAK6kB,EAAWn6E,EAAUo6E,KAAwBjiE,KAAK4hE,MAAO,CAC/D,MAAMM,EAAYliE,KAAKG,MAAMtY,GAC7Bs1D,GAAc,GAAG6kB,IAA0B,OAAdE,EACtBxB,GAAcuB,IAAwBvB,GAAc74E,GACrDq6E,EAAUtgF,MAEpB,CACA,OAAOu7D,CACX,CAEA4jB,eACI,MAAM5jB,EAAan9C,KAAK2hE,gBACxB3hE,KAAKC,SACD,CAACk9C,eACD,KACQn9C,KAAKF,MAAMqiE,gBACXniE,KAAKF,MAAMqiE,eAAehlB,EAC9B,GAGZ,CAIA/8C,SAEI,IAAI1mB,EACJ,GAAIsmB,KAAKG,MAAMk2B,eACX38C,EAAUimB,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAAC4Q,SAAS,KAAI,oCAC/B,CACH,MAAM,MAAE5oB,GAAUsL,KAAKF,MACvBpmB,EACIimB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,MAAIxtB,GAAG,iBAAiB05B,UAAU,qBAAoB,IAAE7X,GACvDsL,KAAKoiE,cACLpiE,KAAKqiE,cACN1iE,IAAAU,cAACyQ,EAAU,CAACK,SAAO,EAAC5E,UAAU,0BAC1B5M,IAAAU,cAACwR,EAAY,CACTE,QAAM,EACNnI,SAAU5J,KAAKG,MAAMmrB,SACrBlc,QAASpP,KAAKF,MAAM6P,SACvB,UACDhQ,IAAAU,cAACwR,EAAY,CACTjI,SAAU5J,KAAKG,MAAMmrB,SACrB9hB,SAAO,EACP4F,QAASpP,KAAK83B,YACjB,SACSn4B,IAAAU,cAAA,QAAMkM,UAAU,WAAU,cAGvCvM,KAAKsrD,YAAY,cACjBtrD,KAAKsrD,YAAY,kBAG9B,CAEA,OACI3rD,IAAAU,cAACoc,GAAY,CACTC,eAAe,iBACfnQ,UAAU,sBACVoD,QAAS3P,KAAKF,MAAM6P,SAEnBj2B,EAIb,CAEC0oF,cACG,OACIziE,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,GACtBtR,IAAAU,cAACgM,EAAI,CAACE,UAAU,sBAAqB,wBAAsB,IAAC5M,IAAAU,cAACgM,EAAI,CAACC,cAAY,GAAEtM,KAAKG,MAAMg9C,aAE9Fn9C,KAAKsiE,gBACLtiE,KAAKuiE,eAGlB,CAEAD,gBACI,MAAM,OAAE36E,GAAWqY,KAAKG,MACxB,OACIR,IAAAU,cAACg9B,GAAoC,CACjCrwC,SAAUgT,KAAKG,MAAMxJ,UACrBspC,eAAgBt4C,EAAOgP,WAAa,GACpCiT,SAAU5J,KAAKG,MAAMmrB,SACrBp7B,YAAa8P,KAAKG,MAAMhJ,WACxB+oC,kBAAmBv4C,EAAOwP,YAAc,GACxChH,kBAAmB6P,KAAKG,MAAMpG,gBAC9BomC,wBAAyBx4C,EAAOoS,iBAAmB,GACnDxH,YAAayN,KAAKG,MAAMxH,YACxBynC,kBAAmBz4C,EAAOgR,YAC1BjW,aAAcsd,KAAKG,MAAMuhE,YACzB5uE,SAAUkN,KAAKG,MAAM1H,eACrB4nC,eAAgB14C,EAAO8Q,gBAAkB,GACzC1F,UAAWiN,KAAKG,MAAM7G,kBACtBgnC,gBAAiB34C,EAAO2R,mBAAqB,GAC7C9F,OAAQwM,KAAKG,MAAM3M,OACnB+sC,aAAc54C,EAAO6L,QAAU,GAC/BuqC,uBAAwB/9B,KAAKF,MAAM2hE,UACnCpjC,iBAAkBr+B,KAAKkhE,sBACvBviC,oBAAqB3+B,KAAKmhE,uBAC1B5iC,0BAA2Bv+B,KAAKuhE,8BAChC5jC,oBAAqB39B,KAAK6gE,wBAC1B1iC,iBAAkBn+B,KAAKihE,2BACvBhjC,kBAAmBj+B,KAAKghE,8BACxBviC,eAAgBz+B,KAAKw+B,oBAGjC,CAEA+jC,eACI,MAAM,OAAE56E,EAAM,OAAE65E,GAAWxhE,KAAKG,MAC1BqiE,GAAmB76E,EAAOqQ,OAAS,IAAIhkB,OAAS,EAChDyuF,EAAkBziE,KAAKF,MAAM+hE,WAAW7tF,OAC9C,OACI2rB,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,qCACNq6B,SAAS,YACTG,IAAI,QACJ31B,UAAWwoB,IAAMuc,aAEjBvc,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkB,oBAAmBw+C,EAAkB,0BAA4B,IACnF,aAAY,+CAAgChB,EAAOnvF,MAAM2B,oBACzD,iBAAe,EACf,gBAAeyuF,EACfx8C,gBAAc,EACdjB,kBAAkB,qCAClBpb,SAAU5J,KAAKG,MAAMmrB,SACrBnd,WAAS,EACTt7B,GAAG,YACHw7B,QAASm0D,EACTr8C,UAAWs8C,EACXpwF,MAAOmvF,EAAOnvF,MACd+jC,SAAUuC,GAAS3Y,KAAKohE,mBAAmBzoD,EAAMwM,OAAO9yC,OACxDqyC,QAAS/L,GAAS3Y,KAAKohE,mBAAmB,MAC7CoB,GAAmB7iE,IAAAU,cAAA,MAAIxtB,GAAG,0BAA0B8U,EAAOqQ,MAAM7lB,KAAI,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,MAC9G+sB,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAAC75B,GAAG,oBAAmB8sB,IAAAU,cAAA,QAAMkM,UAAU,WAAU,mCAAuCvM,KAAKF,MAAM+hE,YAGzH,CAEAQ,cACI,MAAM,OAAE16E,EAAM,MAAElU,EAAK,SAAE63C,GAAatrB,KAAKG,MACnCo6B,GAAkB5yC,EAAOlU,OAAS,IAAIO,OAAS,EACrD,OACI2rB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,aAAQw6B,IAAI,QAAQH,SAAS,YAC/ChN,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkBuW,EAAiB,cAAgB,KACnD,aAAY,yDAAiD9mD,EAAMO,oBACnE,iBAAe,EACf,gBAAe,IACfiyC,gBAAc,EACdjB,kBAAkB,aAClBpb,SAAU0hB,EACVjd,QAASksB,EACT1nD,GAAG,WACHszC,UAAW,IACX0F,UAAQ,EACR1d,WAAS,EACT97B,MAAOoB,EACP2iC,SAAWuC,GAAU3Y,KAAKC,SAAS,CAACxsB,MAAOklC,EAAMwM,OAAO9yC,QACxDqyC,QAAU/L,GAAU3Y,KAAKC,SAAS,CAACxsB,MAAO,OAC7C8mD,GAAkB56B,IAAAU,cAAA,MAAIxtB,GAAG,eAAe8U,EAAOlU,MAAMtB,KAAI,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,MAG9G,CAEA04E,YAAYtsB,GACR,OAAIh/B,KAAKG,MAAM6+B,GAAWhrD,OAElB2rB,IAAAU,cAACyQ,EAAU,CAACE,kBAAgB,GACxBrR,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEkY,KAAKG,MAAM6+B,IACxBr/B,IAAAU,cAACwR,EAAY,CAACzC,QAASA,IAAMpP,KAAKC,SAAS,CAAC,CAAC++B,GAAY,KAAMhtB,MAAI,GAAC,OAIzE,IACX,ECrdJ,MAAM0wD,GAAc5iE,IAChB,MAAO6iE,EAAaC,GAAkB/zD,oBAAS,GACzC7mB,EAAa8X,EAAM9X,WACnB66E,EAAS76E,EAAW66E,OAE1B,OACIljE,IAAAU,cAAA,WAASkM,UAAU,oBACf5M,IAAAU,cAACmd,GAAQ,KACL7d,IAAAU,cAACgM,EAAI,CAACE,UAAU,eAAes2D,EAAOj9E,OAAS,MAEnD+Z,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,SAClBqtB,IAAAU,cAACgM,EAAI,KAAErkB,EAAWgQ,OAAS,MAE9B2qE,GACGhjE,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,UAClBqtB,IAAAU,cAACgM,EAAI,KAAErkB,EAAW0B,OAAOjW,SAIpCkvF,GACGhjE,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,mBAClBqtB,IAAAU,cAACgM,EAAI,KAAEw2D,EAAOvsE,mBAAqB,MAEvCqJ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,+BAClBqtB,IAAAU,cAACgM,EAAI,KAAEw2D,EAAO5oE,aAAe,OAIzC0F,IAAAU,cAACwR,EAAY,CACTG,MAAI,EACJ5C,QAASA,IAAMwzD,GAAeE,IAAoBA,IAClD,cAAaH,EAAc,YAAS,eAAY,uCAA4BE,EAAOj9E,OAAS,QAAUoC,EAAWgQ,SAE/G2qE,EAAc,aAAU,gBAAa,sCAE3ChjE,IAAAU,cAACwR,EAAY,CACT/E,IAAK+D,IACLhnB,GAAI,eAAe7B,EAAWnV,KAAiC,UAA5BmV,EAAW0B,OAAOpX,MAAoB,WAAa,KACtFk3B,SAAO,EACP,aAAY,oCAA4Bq5D,EAAOj9E,OAAS,SAAWoC,EAAWgQ,QAAS,mCAGrF,ECnClB,MAAM+qE,WAAgBnjE,YAElBC,YAAYC,GACRC,MAAMD,GAuBV,KAEAkjE,qBAAuB,KACnBhjE,KAAKC,SACD,CACIgjE,WAAW,EACXC,uBAAuB,EACvB94C,WAAY,IAEhBpqB,KAAKmjE,cACR,EACJ,KAEDC,qBAAuB,KACnBpjE,KAAKC,SAAS,CACVgjE,WAAW,EACXC,uBAAuB,EACvB94C,WAAY,IACd,EACL,KAEDi5C,6BAAgCnjF,IAC5B8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVijE,uBAAuB,EACvB5qE,WAAY8D,YAAoBlc,GAAMoY,YACxC,EACL,KAEDgrE,2BAA8BpjF,IAC1B8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVijE,uBAAuB,EACvB94C,WAAY,kEAAyC1rB,YAAsBxe,EAAKiF,YAClF,EACL,KAEDo+E,qCAAwC75E,IACpCsW,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVijE,uBAAuB,EACvB94C,WAAY,2HAA8E1gC,MAC5F,EACL,KAED85E,sBAAwB,KACpBxjE,KAAKC,SAAS,CAACwjE,YAAY,GAAO,EAnElCzjE,KAAKG,MAAQ,CACT7H,WAAY,GACZ2qE,WAAW,EACXC,uBAAuB,EACvBO,YAAY,EACZr5C,WAAY,IAEhBpqB,KAAK0jE,UAAkC,YAAtB5jE,EAAMtG,QAAQrS,IAE/B6Y,KAAKwqB,SAAW,IACpB,CAIAhG,uBAE0B,OAAlBxkB,KAAKwqB,UACLxqB,KAAKwqB,SAASI,OAEtB,CAqDAu4C,gBAEInjE,KAAKwqB,SAAWpmB,EACZ,yCAAyCpE,KAAKF,MAAMtG,QAAQ3mB,KAC5D,MACA,CAAC,EACD,CAAC,EACDmtB,KAAKqjE,6BACLrjE,KAAKsjE,2BACLtjE,KAAKujE,qCAEb,CAIAnjE,SACI,MAAM,QAAE5G,GAAYwG,KAAKF,OACnB,UAAEmjE,GAAcjjE,KAAKG,MACrBujE,EAA4B,YAAhBlqE,EAAQrS,IAE1B,OACIwY,IAAAU,cAACyN,EAAG,CAACU,YAAahV,EAAQgjD,UAAW1vC,IAAI,KAAKoB,eAAa,GACvDvO,IAAAU,cAACiY,GAAc,CAAChmC,MAAOoxF,EAAY,UAAY,YAC3C/jE,IAAAU,cAACgM,EAAI,KAAE7S,EAAQ/lB,OAAS,MAE5BksB,IAAAU,cAAA,WACIV,IAAAU,cAACwR,EAAY,CACTrI,SAAO,EACP4F,QAAS6zD,EAAYjjE,KAAKojE,qBAAuBpjE,KAAKgjE,sBAErDC,EAAY,SAAW,cAAS,sBAAYS,EAAY,YAAc,UACvE/jE,IAAAU,cAAA,QAAMkM,UAAU,WAAW/S,EAAQ/lB,QAEtCusB,KAAK2jE,0BACL3jE,KAAKu1D,sBAEV51D,IAAAU,cAACqhB,GAAS,CACNnV,UAAU,kBACVtpB,UAAWuW,EAAQtW,eACnBE,UAAWT,YAAgB6W,EAAQnW,aAAe,CAAC,GACnD6qB,eAAa,EACb3qB,WAAYiW,EAAQhW,gBACpBE,WAAYf,YAAgB6W,EAAQ7V,gBAAkB,CAAC,KAIvE,CAEAggF,0BACI,IAAK3jE,KAAKG,MAAM8iE,UAAa,OAAO,KACpC,GAAIjjE,KAAKG,MAAM+iE,sBACX,OAAOvjE,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,gDAEtB,GAAI1M,KAAKG,MAAMiqB,WAAWp2C,OACtB,OAAO2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAASzN,KAAKG,MAAMiqB,YAGhD,MAAM,WAAE9xB,GAAe0H,KAAKG,OACtB,QAAE3G,GAAYwG,KAAKF,MACzB,IAAI8jE,EAUJ,OARIA,EADAtrE,EAAWtkB,OAEP2rB,IAAAU,cAAA,UACK/H,EAAWnmB,KAAIoD,GAAKoqB,IAAAU,cAAA,MAAI5kB,IAAKlG,EAAE1C,IAAI8sB,IAAAU,cAACqiE,GAAU,CAAC16E,WAAYzS,QAItDoqB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,OAAKkY,KAAK0jE,UAAY,UAAY,WAAQ,4CAGpE/jE,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKR,cAAY,GAAC,2BAExB3M,IAAAU,cAAA,QAAMkM,UAAU,WACX,uBAAkBvM,KAAK0jE,UAAY,WAAa,YAAYlqE,EAAQ/lB,SAClE,KAEVmwF,EAGb,CAEArO,qBACI,IAAKv1D,KAAKG,MAAMsjE,WACZ,OACI9jE,IAAAU,cAACwR,EAAY,CACTQ,QAAM,EACNjD,QAASA,IAAMpP,KAAKC,SAAS,CAACwjE,YAAY,KAC7C,YACQzjE,KAAK0jE,UAAY,YAAc,aAAU/jE,IAAAU,cAAA,QAAMkM,UAAU,WAAU,IAAEvM,KAAKF,MAAMtG,QAAQ/lB,QAKzG,GAAIusB,KAAKF,MAAMtG,QAAQqqE,yBACnB,OACIlkE,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAQ,QAAMzN,KAAK0jE,UAAY,WAAa,SAAS,wGACtE/jE,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKwjE,sBAAuBh6D,SAAO,GAAC,OAIvE,MAAM,QAAEhQ,GAAYwG,KAAKF,MACzB,IAAIpb,EAUJ,OARIA,EADA8U,EAAQsqE,oBAEJnkE,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAQ,OAChBzN,KAAK0jE,UAAY,UAAY,WAAQ,mHAI5C/jE,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACe,KAAK,SAAQ,OAAKzN,KAAK0jE,UAAY,UAAY,WAAQ,2FAGxE/jE,IAAAU,cAAAV,IAAAyc,SAAA,KACK13B,EACDib,IAAAU,cAACwR,EAAY,CACTQ,QAAM,EACNjD,QAASA,IAAMpP,KAAKF,MAAMikE,SAASvqE,EAAQ3mB,GAAImtB,KAAK0jE,YACvD,YACQ1jE,KAAK0jE,UAAY,YAAc,aAAU/jE,IAAAU,cAAA,QAAMkM,UAAU,WAAW/S,EAAQ/lB,QAErFksB,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKwjE,sBAAuBzxD,QAAM,GAAC,SAAMpS,IAAAU,cAAA,QAAMkM,UAAU,WAAU,YAAUvM,KAAK0jE,UAAY,aAAe,WAAYlqE,EAAQ/lB,QAGpK,EC/LJ,MAAMuwF,WAAiB/tC,GAAcp2B,cAAA,SAAA9rB,WAcjC,KAEA6iD,mBAAsB12C,IAClB6f,MAAM62B,mBAAmB12C,GACzB8f,KAAKC,SAAS,CACVpa,SAAUuW,YAAoBlc,GAAM+jF,eACpC5tC,gBAAgB,GAClB,EACL,KAEDyB,WAAc53C,IACV8f,KAAKC,UAASC,IACH,CACHoxB,QAAQ,EACRzrC,SAAU,IAAIqa,EAAUra,SAAU3F,MAExC,EACL,KAmBDgkF,aAAe,CAACrxF,EAAI6wF,KAEhB1jE,KAAKwqB,SAAWpmB,EACZ,QAAQs/D,EAAY,UAAY,gBAAgB7wF,IAChD,SACA,CAAC,EACD,CAAC,EACDmtB,KAAKmkE,yBACLnkE,KAAKokE,uBACLpkE,KAAKqkE,iCACR,EACJ,KAEDF,yBAA4BjkF,IACxB8f,KAAKwqB,SAAW,KAChB,MAAM85C,EAAiBloE,YAAoBlc,GAC3C8f,KAAKC,UAASC,IAAS,CACnBra,SAAUqa,EAAUra,SAASxF,QACzBnE,GAAK1G,SAAS0G,EAAErJ,MAAQ2C,UAAU8uF,EAAe9qE,SAAW8qE,EAAex+E,OAAS,CAAC,GAAGjT,MAE5F0xF,cAAe,MAChB,EACN,KAEDH,uBAA0BlkF,IACtB8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CAACskE,cAAe,qDAAiC7lE,YAAsBxe,EAAKiF,YAAY,EACzG,KAEDk/E,iCAAoC36E,IAChCsW,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CAACskE,cAAe,8GAAsE76E,MAAW,CAClH,CA9EDyvB,oBACQnZ,KAAKF,MAAMk6D,QACXh6D,KAAKC,SAAS,CAACo2B,gBAAgB,KAInChiD,SAASqgB,MAAQ,wCACjBqL,MAAMoZ,oBACV,CAqBAskD,oBAAoBv8B,GACZA,EACAlhC,KAAKC,SAAS,CAACwyB,cAAc,IAE7BzyB,KAAKC,SAAS,CACVwyB,cAAc,EACdjpC,QAAS+yD,IAGrB,CAEA1mB,mBAAmBx9C,EAAMhG,GACrB2tB,KAAKC,UAASC,IACH,CAAC1W,QAAS7N,OAAOwE,OAAO,CAAC,EAAG+f,EAAU1W,QAAS,CAAC,CAACnR,GAAOhG,OAEvE,CAsCAmkD,mBAAmB12B,GACf,MAAO,CACHs+D,oBAAqB,CACjB/rF,MAAOmY,KAAwB,GAAG,GAClClY,MAAOkY,KAAwB,GAAG,IAEtCg6E,eAAe,EACflzC,QAAQ,EACRmB,cAAc,EACdjpC,QAAS7N,OAAOwE,OAAO,CAAC,EAAGo8D,IAC3B12D,SAAU,GACV0+E,cAAe,GAEvB,CAEAntC,cACI,MAAO,yBACX,CAEAF,cAAc/xC,GACV,MAAO,yEAAoDuZ,YAAsBvZ,IACrF,CAEAgyC,6BAA6BztC,GACzB,MAAO,kIAAyFA,IACpG,CAIAkuC,gBACI,MAAM,oBACFwmC,EAAmB,QACnB50E,EAAO,aACPipC,EAAY,OACZnB,EAAM,SACNzrC,GACAma,KAAKG,MAEHjN,EAAWvH,axCIF84E,EAAC74E,EAAa6mC,EAAcjpC,KAC/C,IAAKipC,EACD,OAAO7mC,EAGX,IAAK,IAAKvT,EAAMhG,KAAUsJ,OAAOC,QAAQ4N,GACjCA,EAAQnR,KAAUkkE,GAAyBlkE,KAC9B,QAATA,EACoB,QAAhBhG,EAAMA,QACNuZ,EAAcA,EAAYvL,QAAOnE,IAAgB,YAAVA,EAAEiL,KAAmBpR,aAAe1D,EAAMA,SAGrFuZ,EAAcA,EAAYvL,QACtBnE,GAAiB,OAAZA,EAAE7D,IAAkB6D,EAAE7D,GAAMgH,cAAc5K,SAASpC,EAAMgN,kBAI9E,OAAOuM,CAAW,EwCpBV64E,CAAe5+E,EAAU4sC,EAAcjpC,GACvC40E,EAAoB/rF,OAGlBk6E,IAAcvsD,KAAKF,MAAMk6D,QAE/B,OACIr6D,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC6vD,GAAa,CAACr5D,MAAM,2BAA2Bnd,QAAS6yE,EAAYvsD,KAAKF,MAAMpmB,QAAU,OAC1FimB,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,mCAC1BjN,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,iBAAgB,sBAAiBrZ,EAASlf,QAC/D2rB,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,sBACjB5M,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,SAASw6B,IAAI,QAAQ31B,UAAWwoB,IAAMuc,aACxDvc,IAAAU,cAAC4Y,GAAM,CACHgB,mBAAoBA,IAAe,wCACnC5nC,MAAO+rF,EACPrlD,WAAYwzC,EACZ1zC,cAAc,EACdrI,QAAShmB,KAAwBrY,KAAIgoC,IAAA,IAAE9nC,EAAOC,GAAM6nC,EAAA,MAAM,CAAC9nC,QAAOC,QAAM,IACxE8jC,SAAWiG,GAAmBrc,KAAKC,SAAS,CAACm+D,oBAAqB/hD,IAClE9P,UAAU,gBACVnB,OAAQF,EACRsR,iBAAkBA,IAAM,yBAGhC7c,IAAAU,cAACiY,GAAc,CACX/L,UAAU,6BACVj6B,MAAM,UACNw6B,IAAI,QACJH,SAAS,sBAEThN,IAAAU,cAAC0+D,KAAM,CACH,aAAY,8BAA0B/+D,KAAKG,MAAMsyB,aAAe,uHAAkG,UAClKyO,QAASzO,EACT7oB,SAAU2iD,EACVn2C,SAAW8G,GAAOld,KAAKy9D,oBAAoBvgD,EAAGiI,OAAO+b,SACrDruD,GAAG,0BAKnB8sB,IAAAU,cAACyQ,EAAU,CAACQ,OAAK,EAACI,QAAM,EAACH,SAAO,GAC3BkhB,GAAgBzyB,KAAK05B,gBACtB/5B,IAAAU,cAACyQ,EAAU,CAAChE,IAAI,MACZnN,IAAAU,cAACyN,EAAG,CAACI,eAAa,EAACpB,IAAI,MACnBnN,IAAAU,cAAA,WACIV,IAAAU,cAACwR,EAAY,CACTC,KAAG,EACHlI,SAAU2iD,EACVn9C,QAAUx8B,IACNotB,KAAKC,SAAS,CAACqxB,QAAQ,EAAMkzC,eAAe,IAC5C5xF,EAAEy8B,cAAcC,MAAM,GACvB,iBAGP3P,IAAAU,cAACwR,EAAY,CACTC,KAAG,EACHlI,SAAU2iD,EACVn9C,QAAUx8B,IACNotB,KAAKC,SAAS,CAACqxB,QAAQ,EAAMkzC,eAAe,IAC5C5xF,EAAEy8B,cAAcC,MAAM,GACvB,oBAKdpc,EAAS/gB,KAAI+J,GAAKyjB,IAAAU,cAAC0iE,GAAO,CAACtnF,IAAKS,EAAErJ,GAAI2mB,QAAStd,EAAG6nF,SAAU/jE,KAAKkkE,mBAGzE5yC,GAAUtxB,KAAKurD,aACfvrD,KAAKG,MAAMokE,cAAcvwF,OAAS,GAAKgsB,KAAK0kE,4BAGzD,CAEAhrC,gBACI,MAAMlwC,EAAUwW,KAAKG,MAAM3W,QAC3B,OACImW,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,WACjB5M,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,4BAA4Bw6B,IAAI,QAAQH,SAAS,6BACnEhN,IAAAU,cAAC2jB,GAAe,CACZe,WAAS,EACTxY,UAAU,iBACVyY,kBAAkB,4BAClBnyC,GAAG,4BACHujC,SAAW8G,GAAOld,KAAK61B,mBAAmB,YAAa3Y,EAAGiI,OAAO9yC,OACjEqyC,QAAUxH,GAAOld,KAAK61B,mBAAmB,YAAa,IACtDxjD,MAAOmX,EAAQgzD,aAGvB78C,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,iCAA4Bw6B,IAAI,QAAQH,SAAS,4BACnEhN,IAAAU,cAAC2jB,GAAe,CACZgB,kBAAkB,sBAClB3yC,MAAOmX,EAAQ/V,MACf2iC,SAAW8G,GAAOld,KAAK61B,mBAAmB,QAAS3Y,EAAGiI,OAAO9yC,OAC7Dk6B,UAAU,iBACVmY,QAAUxH,GAAOld,KAAK61B,mBAAmB,QAAS,IAClDhjD,GAAG,8BAEX8sB,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,cACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,aAEjBvc,IAAAU,cAAC4Y,GAAM,CACHgB,mBAAoBA,IAAe,wCACnC1N,UAAU,gBACViE,QAAS1+B,IAAoBK,KAAI4jD,IAAC,CAAM1jD,MAAO0jD,EAAE,GAAIzjD,MAAOyjD,EAAE,OAC9D1jD,MAAO,CAACA,MAAOmX,EAAQrC,IAAI9U,OAASP,IAAoB,GAAG,GAAIQ,MAAOkX,EAAQrC,IAAI7U,OAASR,IAAoB,GAAG,IAClHskC,SAAWiG,GAAmBrc,KAAK61B,mBAAmB,MAAOxZ,GAC7DjR,OAAQF,MAMhC,CAEAqgD,aACI,IAAIkW,EAAWI,EAAYxxB,EAAS37C,EAYpC,OAXIsL,KAAKG,MAAMqkE,eACX/C,GAAY,EACZI,EAAa,UACbxxB,EAAU,eACV37C,EAAQ,kBAER+sE,GAAY,EACZI,EAAa,SACbxxB,EAAU,kBACV37C,EAAQ,kBAELiL,IAAAU,cAACugE,GAAI,CACRa,UAAWA,EACXI,WAAYA,EACZxxB,QAASA,EACT37C,MAAOA,EACPiwE,oBAAqB3kE,KAAKG,MAAMta,SAAS1T,KAAI+J,GAAKA,EAAE8b,QACpD2X,QAASA,IAAM3P,KAAKC,SAAS,CAACqxB,QAAQ,IACtCrP,OAAQjiB,KAAK83B,YACrB,CAEA4sC,4BACI,OACI/kE,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,SACVsQ,iBAAkB7c,KAAKG,MAAMokE,cAC7B50D,QAASA,IAAM3P,KAAKC,SAAS,CAAEskE,cAAe,MAE9C5kE,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACzC,QAASA,IAAMpP,KAAKC,SAAS,CAACskE,cAAe,KAAM/6D,SAAO,GAAC,OAIzF,EC1RJ,MAAMiY,GAAc,CAClBpvC,MAAO,EACPC,MAAO,WAKHsyF,GAAqC1kF,IACzC,IAAIquC,EAAQ,CAAC,EACb,IAAK,IAAIx7B,KAAapX,OAAO6nB,OAAOtjB,GAClCquC,EAAMx7B,EAAUlgB,IAAM,GAAGkgB,EAAUnR,KAAKsb,mBAAmBnK,EAAU1a,OAEvE,OAAOsD,OAAOC,QAAQ2yC,GAAOxuC,KAAKgM,OAAwB,EAAE,EAgBjD84E,GAA4B/kE,IAAW,IAADglE,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACjD,MAAOhlE,EAAOF,GAAY4O,mBAAS,CACjCu2D,cAAc,EACd92E,aAAc,CACZgL,kBAAmB,GACnBqsD,6BAA8B,GAC9ByO,kBAAmB,IAErBiR,oBAAqB,CACnB/rE,kBAAmB,GACnBqsD,6BAA8B,GAC9ByO,kBAAmB,IAErBzsE,OAAQ,CAAE29E,wBAAyB,CAAC,GACpC97E,SA3B+BlU,EA2BIwqB,EAAMzf,QA1BtC/K,EAIEqG,OAAO4pF,YACZ5pF,OAAOC,QAAQtG,GAAK+K,QAClB85B,IAAA,IAAEozB,EAAGl7D,GAAM8nC,EAAA,OACC,OAAV9nC,KAAoBypB,MAAMC,QAAQ1pB,IAAUA,EAAM2B,OAAS,EAAE,KAN1D,CAAC,IAyB4C,CAAC,GACrD2nC,WAAW,IA5BoBrmC,MA+BjCkjC,qBAAU,KACRpU,EACE,mCACA,MACA,CAAC,EACD,CAAC,GACAlkB,IACC,MAAMoO,EAAe,CACnBq3D,6BAA8B1pD,YAC5B/b,EAA0B,uBAE5BoZ,kBAAmBsrE,GACjB1kF,EAAKslF,qBAEPpR,kBACEz4E,OAAOC,QAAQsE,EAAKulF,aAAa1lF,KAC/BiM,OACG,IAETiU,EAAS,IAAKE,EAAO7R,aAAcA,EAAcqtB,WAAW,GAAQ,IAEtE,SACA,QACD,GACA,IAGHnD,qBAAU,KAAO,IAADktD,EAAAC,EAAAC,EAAAC,EACd,MAAMC,EAC6C,QADfJ,EACX,QADWC,EAClCxlE,EAAM3W,QAAQuJ,iBAAS,IAAA4yE,OAAA,EAAvBA,EAAyBxzF,KAAK4zF,GAAM,GAAGA,EAAE1zF,iBAAQ,IAAAqzF,IAAI,GAEjDM,EACgD,QADpBJ,EACD,QADCC,EAChC1lE,EAAM3W,QAAQuzD,yBAAiB,IAAA8oB,OAAA,EAA/BA,EAAiC1zF,KAAK4zF,GAAMA,EAAE1zF,eAAM,IAAAuzF,IAAI,GAEpDP,EAAsB,CAC1B1f,6BACExlD,EAAM7R,aAAaq3D,6BACrByO,kBAAmBj0D,EAAM7R,aAAa8lE,kBAAkB/zE,QACrD0lF,IAAOC,EAA6BvxF,SAASsxF,EAAE,MAElDzsE,kBAAmB6G,EAAM7R,aAAagL,kBAAkBjZ,QACrD0lF,IAAOD,EAA+BrxF,SAASsxF,EAAE,OAItD9lE,EAAS,IAAKE,EAAOklE,uBAAsB,GAC1C,CAACllE,EAAM3W,QAAS2W,EAAM7R,eAEzB,MAAMunC,EAAqBA,CAACx9C,EAAMhG,KAChC,IAAIszD,EAAO,CAAE,CAACttD,GAAOhG,GAOrB,GANa,mCAATgG,EAEFstD,EAAqC,+BAAItzD,EAAM8D,QAAQ,cAAe,IAEtEwvD,EAAKttD,GAAQhG,EAEF,aAATgG,EAAqB,CACvB,IAAI4tF,EAAiB9lE,EAAM3W,QAC3By8E,EAAe7xE,iBAAcngB,EAC7BgsB,EAAS,IAAKE,EAAO3W,QAASy8E,WACvBtgC,EAAkB,WAC3B,CAEA,IAAIh+C,EAAShM,OAAOwE,OAAO,CAAC,EAAGggB,EAAMxY,eAC9BA,EAAOtP,GAEd,MAAM6tF,EAAavqF,OAAOwE,OAAO,CAAC,EAAGggB,EAAM3W,QAASm8C,GAE9B,KAAb,OAALtzD,QAAK,IAALA,OAAK,EAALA,EAAO2B,SAAiB3B,UACnB6zF,EAAW7tF,GAGpB4nB,EAAS,IACJE,EACHxY,SACA6B,QAAS08E,GACT,EAaJ,OAAO/lE,EAAMwb,UACXhc,IAAAU,cAAAV,IAAAyc,SAAA,MAEAzc,IAAAU,cAACoc,GAAY,CACX9M,QAAS7P,EAAMqmE,MACf55D,UAAU,sBACVmQ,eAAe,iBACfI,UAjBmBnE,IACH,WAAdA,EAAMl9B,MACJ0kB,EAAMilE,aACRzsD,EAAMwhB,kBAENr6B,EAAMqmE,QAEV,GAYExmE,IAAAU,cAAA,MAAIxtB,GAAG,iBAAiB05B,UAAU,qBAAoB,qBAGtD5M,IAAAU,cAAA,WAASkM,UAAU,mCACjB5M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACzB1R,IAAAU,cAACiY,GAAc,CACbhmC,MAAM,qBACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,aAEjBvc,IAAAU,cAAC4Y,GAAM,CACLgB,mBAAoBA,IACX,wCAET1N,UAAU,gBACVuM,SAAO,EACPtI,QAASrQ,EAAMklE,oBAAoB/rE,kBAAkBnnB,KACnDooC,IAAA,IAAEloC,EAAOC,GAAMioC,EAAA,MAAM,CAAEloC,QAAOC,QAAO,IAEvC05B,YAAY,2BACZ35B,MAAO8tB,EAAM3W,QAAQuJ,UACrBqjB,SAAWiG,GACTwZ,EAAmB,YAAaxZ,GAAkB,IAEpD+pD,WAAYA,IAAMnmE,EAAS,IAAKE,EAAOilE,cAAc,IACrDvlD,YAAaA,IAAM5f,EAAS,IAAKE,EAAOilE,cAAc,IACtDh6D,OAAQF,EACRsR,iBAAkBA,IAAM,yBAG5B7c,IAAAU,cAACiY,GAAc,CACbhmC,MAAM,qCACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,aAEjBvc,IAAAU,cAAC4Y,GAAM,CACLgB,mBAAoBA,IACX,wCAET1N,UAAU,gBACViE,QAAS,CAACiR,IAAa0jB,UAClBhlC,EAAMklE,oBAAoB1f,6BAA6BxzE,KACvDmO,IAAC,CACAjO,MAAOiO,EAAEzN,GACTP,MAAOgO,EAAE7M,WAIfpB,MAAO8tB,EAAM3W,QAAQmE,UAAY8zB,GACjCrL,SAAWiG,IACTwZ,EACE,WACyB,IAAzBxZ,EAAehqC,MAAc,KAAOgqC,EACrC,EAEH+pD,WAAYA,IAAMnmE,EAAS,IAAKE,EAAOilE,cAAc,IACrDvlD,YAAaA,IAAM5f,EAAS,IAAKE,EAAOilE,cAAc,IACtDh6D,OAAQF,EACRsR,iBAAkBA,IAAM,0BAI9B7c,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACzB1R,IAAAU,cAACiY,GAAc,CACbhmC,MAAM,eACN,aAC6B,OAA3B6tB,EAAM3W,QAAQmE,SACV,KACA,gIAENxW,UAAWwoB,IAAMuc,YACjBpP,IAAI,QACJwQ,SAAqC,OAA3Bnd,EAAM3W,QAAQmE,SAAoB,KAAO,KAEnDgS,IAAAU,cAAC4Y,GAAM,CACLgB,mBAAoBA,IACX,wCAET1N,UAAU,gBACVwM,WAAuC,OAA3B5Y,EAAM3W,QAAQmE,SAC1B6iB,QAC6B,OAA3BrQ,EAAM3W,QAAQmE,SACV,CAAC8zB,IACD,CAACA,IAAa0jB,UAUP,QATL2/B,EAKM,QALNC,EAAI5kE,EAAMklE,oBAAoB1f,6BAC3BtlE,QACEykB,IAAC,IAAAuhE,EAAA,OACA7wF,SAASsvB,EAAEjyB,MACX2C,SAA+B,QAAvB6wF,EAAClmE,EAAM3W,QAAQmE,gBAAQ,IAAA04E,OAAA,EAAtBA,EAAwBh0F,MAAM,IACzC,UAAE,IAAA0yF,OAAA,EALFA,EAMA/rE,aAAa7mB,KAAK+J,IAAC,CACnB7J,MAAO6J,EAAErJ,GACTP,MAAO4J,EAAEzI,iBACR,IAAAqxF,IAAI,IAGjBzyF,MAAO8tB,EAAM3W,QAAQ4K,aAAeqtB,GACpCrL,SAAWiG,GACTwZ,EACE,cACyB,IAAzBxZ,EAAehqC,MAAc,KAAOgqC,GAGxC+pD,WAAYA,IAAMnmE,EAAS,IAAKE,EAAOilE,cAAc,IACrDvlD,YAAaA,IAAM5f,EAAS,IAAKE,EAAOilE,cAAc,IACtDh6D,OAAQF,EACR,cAAwC,OAA3B/K,EAAM3W,QAAQmE,SAC3B,aAAuC,OAA3BwS,EAAM3W,QAAQmE,UAAqB,eAC/C6uB,iBAAkBA,IAAM,yBAG5B7c,IAAAU,cAACoxD,GAAU,CACT34C,SAAO,EACP44C,QAASvxD,EAAM3W,QAAQszD,QACvBwV,UAAYt9E,GACV6gD,EAAmB,UAAW7gD,GAAmB,OAIvD2qB,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACzB1R,IAAAU,cAACiY,GAAc,CACbhmC,MAAM,qBACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,aAEjBvc,IAAAU,cAAC4Y,GAAM,CACLgB,mBAAoBA,IACX,wCAET1N,UAAU,gBACVuM,SAAO,EACPtI,QAASrQ,EAAMklE,oBAAoBjR,kBAAkBjiF,KAAKwqD,IAAC,CACzDtqD,MAAOsqD,EAAE,GACTrqD,MAAOqqD,EAAE,OAEX3wB,YAAY,2BACZ35B,MAAO8tB,EAAM3W,QAAQuzD,kBACrB3mC,SAAWiG,GACTwZ,EAAmB,oBAAqBxZ,GAAkB,IAE5D+pD,WAAYA,IAAMnmE,EAAS,IAAKE,EAAOilE,cAAc,IACrDvlD,YAAaA,IAAM5f,EAAS,IAAKE,EAAOilE,cAAc,IACtDh6D,OAAQ,IACHF,EACH6xB,WAAYA,CAACtxB,EAAUtL,KAAK,IACvBsL,EACHwS,UAAW,UAEb+e,SAAUA,CAACvxB,EAAUtL,KAAK,IACrBsL,EACHwS,UAAW,WAGfzB,iBAAkBA,IAAM,yBAG5B7c,IAAAU,cAACiY,GAAc,CACbhmC,MAAM,6CACNw6B,IAAI,QACJH,SAAS,oDAEThN,IAAAU,cAAC2jB,GAAe,CACd,oBACG7jB,EAAMxY,OAAO29E,yBAA2B,IAAItxF,OAAS,EAClD,sDACA,KAEN,aAAY,+EAC0C,QAD1CgxF,EACkC,QADlCC,EACV9kE,EAAM3W,QAAQqzD,sCAA8B,IAAAooB,OAAA,EAA5CA,EAA8CjxF,cAAM,IAAAgxF,IAAI,eAE1D,gBAAe,IACf/+C,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,6CAClBnyC,GAAG,mDACHw7B,SAAUlO,EAAMxY,OAAO29E,yBAA2B,IAAItxF,OAAS,EAC/DmyC,UAAW,IACX/P,SAAW8G,GACT2Y,EACE,iCACA3Y,EAAGiI,OAAO9yC,OAGdqyC,QAAUxH,GACR2Y,EAAmB,iCAAkC,IAEvDgG,QAAU3e,GACR2Y,EACE,iCACA3Y,EAAGiI,OAAO9yC,OAGdA,MAAmD,QAA9C6yF,EAAE/kE,EAAM3W,QAAQqzD,sCAA8B,IAAAqoB,IAAI,MAEvD/kE,EAAMxY,OAAO29E,yBAA2B,IAAItxF,OAAS,GACrD2rB,IAAAU,cAACgM,EAAI,CACHvkB,OAAK,EACLjV,GAAG,uDAEFstB,EAAMxY,OAAO29E,4BAMxB3lE,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACjBxR,IAAAU,cAACwR,EAAY,CACXjI,UACsD,QAApDu7D,EAAAxpF,OAAOS,KAAK+jB,EAAM3W,SAASnJ,QAAQ0lF,GAAY,OAANA,WAAW,IAAAZ,OAAA,EAApDA,EAAsDnxF,SAAU,EAElEo7B,QAASA,KACPtP,EAAMyS,KAAKpS,EAAM3W,QAAQ,EAE3BggB,SAAO,GACR,UAGD7J,IAAAU,cAACwR,EAAY,CAACzC,QAAStP,EAAMqmE,MAAO9zD,QAAM,GAAC,WAKhD,ECnXUi0D,GAAqBnsD,IAA6B,IAA5B,UAAEoyC,EAAS,QAAE7yE,GAASygC,EACvD,MAAOosD,EAAuBC,GAA4B33D,wBAAS56B,IAC5DwyF,EAAiBC,GAAsB73D,mBAAS,CACrD83D,SAAS,EACTtmF,YAAQpM,KAEHuV,EAAS6iD,GAAcx9B,mBAAS,KAChCxhB,EAAgBu5E,GAAqB/3D,mBAAS,IAE/Cg4D,EAAgBzwF,YACpB,IAAI2O,MAAK,IAAIA,MAAO+hF,UAAY,QAG5BC,EAAyB3wF,YAC7B,IAAI2O,MAAK,IAAIA,MAAO+hF,UAAY,UAG3BE,EAAuBC,GAA4Bp4D,mBAAS,CACjE3c,KAAM,EACN3Q,MAAO,EACPu1B,IAAK+vD,EACLn9E,OAAQ,SAGHw9E,EAAcC,GAAmBt4D,mBAAS,IAC1Cu4D,EAAUC,GAAex4D,mBAAS,IAClCy4D,EAAQC,GAAa14D,oBAAS,GAI/B24D,EAAmCA,IAChC,IAAI7X,SAAQ,CAACC,EAASC,KAC3BzrD,EACE,yDAAyD4iE,EAAsBlwD,gCAC/E,MACA,CAAC,EACD,CAAC,GACA2wD,IACCN,EAAgBM,EAAcjmE,KAAKjgB,OACnCquE,GAAS,IAEX,KACEC,GAAQ,IAEV,KACEA,GAAQ,GAEX,IAIC6X,EAA+BA,IAC5B,IAAI/X,SAAQ,CAACC,EAASC,KAC3BzrD,EACE,yDAAyD4iE,EAAsBlwD,4BAC/E,MACA,CAAC,EACD,CAAC,GACA2wD,IACCJ,EAAYI,EAAcjmE,KAAKjgB,OAC/BquE,GAAS,IAEX,KACEC,GAAQ,IAEV,KACEA,GAAQ,GAEX,IAIC8X,EAAiBA,KACrBvjE,EACE,0BACA,MACA,CAAC,EACD,CAAC,GACA5a,IACC,MAAM,mBAAEo+E,GAAuBp+E,EAEzBq+E,EAAgBD,EAAmBz1F,KAAKkO,IAC5C,MAAMynF,EAAcznF,EAAO0nF,eAE3B,MAAO,CACLl1F,GAAIgR,cACJxL,KAAM2vF,EAAgBF,GACtBznF,OAAQ,IAAKynF,EAAaj1F,GAAIwN,EAAOxN,IACrCo1F,wBAAyBC,EAAaJ,GACtCK,QAAS9nF,EAAO8nF,QACjB,IAGH97B,EAAWw7B,EAAc,IAE3B,SACA,QACD,EAGHrvD,qBAAU,KACRmvD,GAAgB,GACf,IAEHnvD,qBAAU,KACR+uD,GAAU,GAEV,IAAIa,EAAWC,IACXC,EAAWd,IACXe,EAAWb,IAEf/X,QAAQjoB,IAAI,CAAC0gC,EAAUE,EAAUC,IAAW5a,MAAK,KAC/C4Z,GAAU,EAAM,GAChB,GACD,CACDP,EAAsB90E,KACtB80E,EAAsBt9E,OACtBs9E,EAAsBlwD,MAGxB,MAAMoxD,EAAgB7nF,GACU1E,OAAOS,KAAKiE,GACvClO,KAAKsJ,GACAqgB,MAAMC,QAAQ1b,EAAO5E,KAAS4E,EAAO5E,GAAKzH,OAAS,IAE3C8nB,MAAMC,QAAQ1b,EAAO5E,KAAS4E,EAAO5E,IAAgB,OAARA,EADhD4E,EAAO5E,GAIT,OAER4E,QAAQ0lF,GAAMA,IAEY/xF,OAGzBq0F,EAAuBA,KAC3B,MAAM7+E,EAAUw9E,EAEhB,OAAO,IAAIrX,SAAQ,CAACC,EAASC,KAC3BzrD,EACE,2CAA2C5a,EAAQ0I,oBAAgC1I,EAAQstB,yBAAyBttB,EAAQE,SAC5H,MACA,CAAC,EACD,CAAC,GACA+9E,IACCb,EAAkBa,EAAcp6E,gBAChC45E,EAAyB,IACpBD,EACHzlF,MAAOkmF,EAAcjmE,KAAKjgB,QAGL,QAAnBiI,EAAQE,OACV29E,EAAYI,EAAcjmE,KAAKjgB,OACH,YAAnBiI,EAAQE,QACjBy9E,EAAgBM,EAAcjmE,KAAKjgB,OAErCquE,GAAS,IAEX,KACEC,GAAQ,IAEV,KACEA,GAAQ,GAEX,GACD,EAmCE2Y,EAAmBA,CAAC31F,EAAIwN,EAAQooF,KAAe,IAADC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAClD,MAAMC,EAAe,CACnBC,iCAAkC9oF,EAAOw8D,+BACzCusB,cAAoD,QAAvCV,EAAkB,QAAlBC,EAAEtoF,EAAO0S,iBAAS,IAAA41E,OAAA,EAAhBA,EAAkBx2F,KAAK4zF,GAAMA,EAAE1zF,eAAM,IAAAq2F,IAAI,GACxDW,YAA4B,QAAjBT,EAAEvoF,EAAOsN,gBAAQ,IAAAi7E,OAAA,EAAfA,EAAiBv2F,MAC9Bi3F,eAAkC,QAApBT,EAAExoF,EAAO+T,mBAAW,IAAAy0E,OAAA,EAAlBA,EAAoBx2F,MACpCk3F,aAA8C,QAAlCT,EAAgB,QAAhBC,EAAE1oF,EAAOy8D,eAAO,IAAAisB,OAAA,EAAdA,EAAgB52F,KAAK4zF,GAAMA,EAAElzF,YAAG,IAAAi2F,IAAI,GAClDU,wBAC+C,QADxBR,EACG,QADHC,EACrB5oF,EAAO08D,yBAAiB,IAAAksB,OAAA,EAAxBA,EAA0B92F,KAAK4zF,GAAMA,EAAE1zF,eAAM,IAAA22F,IAAI,IASrD5kE,EANmBvxB,EACf,2BAA2BA,IAC3B,0BAEkBA,EAAK,MAAQ,OAKjC,CAAC,EACDq2F,GACA,IAAMT,MACN,SACA,QACD,EAgDGT,EAAmB3nF,IACvB,MAAM,GAAExN,KAAO42F,GAASppF,EAqBxB,OAnBmB1E,OAAO6nB,OAAOimE,GAC9BppF,QAAQ0lF,GAAMA,IACd5zF,KAAKE,GACAypB,MAAMC,QAAQ1pB,GACTA,EACJF,KAAK03C,GACAA,EAAK6/C,eAAe,SACf7/C,EAAKv3C,MAEL,GAAGu3C,EAAKvyB,OAAOuyB,EAAKp2C,UAG9B0pB,KAAK,MACkB,kBAAV9qB,EACJ,OAALA,QAAK,IAALA,OAAK,EAALA,EAAOC,MAEPD,IAGKgO,QAAQ0lF,GAAMA,IAAG5oE,KAAK,KAAK,EAiD/C,OACEwC,IAAAU,cAAAV,IAAAyc,SAAA,KACEzc,IAAAU,cAAA,OAAKxoB,MAAO,CAAE0oC,QAAS,OAAQC,cAAe,WAC5C7gB,IAAAU,cAAC6vD,GAAa,CACZr5D,MAAM,sBACNnd,QAAS6yE,EAAY7yE,EAAU,OAEjCimB,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,0BAI1BjN,IAAAU,cAAA,OAAKxoB,MAAO,CAAE0oC,QAAS,OAAQC,cAAe,SAAUmpD,IAAK,SAC1DngF,EAAQrX,KAAI,CAACkO,EAAQ2c,IAElB2C,IAAAU,cAACiQ,IAAS,CAAC7oB,EAAG,EAAG5P,MAAO,CAAE+xF,QAAS,IAAMnuF,IAAKuhB,GAC5C2C,IAAAU,cAACyQ,EAAU,CACTG,gBAAc,EACd9C,WAAS,EACT5B,UAAU,uBAEV5M,IAAAU,cAAC0+D,KAAM,CACL,aAAY,8BAAoB1+E,EAAOhI,OACvCxF,GAAI,WAAWmqB,IACfkkC,QAAS7gD,EAAO8nF,QAChB/xD,SAAW8G,GA5ID2sD,EAAC3oC,EAAS7gD,KACpC+jB,EACE,2BAA2B/jB,EAAOA,OAAOxN,aACzC,MACA,CAAC,EACD,CAAEs1F,QAASjnC,IACX,KACE,MAAM+kC,EAAiB,IAClBz8E,EAAQrX,KAAK4zF,IACVA,EAAElzF,KAAOwN,EAAOxN,KAClBkzF,EAAEoC,QAAUjnC,GAGP6kC,MAGX15B,EAAW45B,GACXoC,IACAb,IACAE,GAA8B,IAEhC,SACA,QACD,EAsHiBmC,CAAoB3sD,EAAGiI,OAAO+b,QAAS7gD,IAGxCA,EAAOhI,MAEVsnB,IAAAU,cAACyQ,EAAU,CACTY,QAAM,EACNnF,UAAU,sCAEV5M,IAAAU,cAACwR,EAAY,CACXpC,KAAK,OACLuC,MAAI,EACJ5C,QAASA,KACPs3D,EAAmB,CACjBC,SAAS,EACTtmF,OAAQA,EAAOA,OACfxN,GAAIwN,EAAOxN,IACX,GAEL,SAEC8sB,IAAAU,cAAC0gB,KAAK,CACJxU,UAAU,YACVj6B,MAAO+N,EAAO4nF,wBACdjnD,MAAM,YAIVrhB,IAAAU,cAACwR,EAAY,CACXQ,QAAM,EACN5C,KAAK,SACLL,QAASA,KACPo3D,EAAyBnmF,EAAO,GAEnC,mBASbsf,IAAAU,cAACwR,EAAY,CACXpC,KAAK,MACLuC,MAAI,EACJn6B,MAAO,CAAEiyF,WAAY,QACrB16D,QAASA,KACPs3D,EAAmB,CAAEC,SAAS,EAAMtmF,YAAQpM,GAAY,GAE3D,SAGD0rB,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,UAI1BjN,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACD,kBAAgB,GACzCrR,IAAAU,cAAA,SAAG,uBACHV,IAAAU,cAACwR,EAAY,CACXrI,QAASw9D,EAAsBlwD,MAAQiwD,EACvC/0D,KAAMg1D,EAAsBlwD,MAAQiwD,EACpCn9D,SAAU09D,EACVl4D,QAASA,KACP63D,EAAyB,IACpBD,EACHlwD,IAAKiwD,EACL70E,KAAM,GACN,GAGH60E,GAEHpnE,IAAAU,cAACwR,EAAY,CACXrI,QAASw9D,EAAsBlwD,MAAQ+vD,EACvC70D,KAAMg1D,EAAsBlwD,MAAQ+vD,EACpCj9D,SAAU09D,EACVl4D,QAASA,KACP63D,EAAyB,IACpBD,EACHlwD,IAAK+vD,EACL30E,KAAM,GACN,GAGH20E,IAILlnE,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACD,kBAAgB,GACzCrR,IAAAU,cAACwR,EAAY,CACXrI,QAA0C,QAAjCw9D,EAAsBt9E,OAC/BsoB,KAAuC,QAAjCg1D,EAAsBt9E,OAC5BkgB,SAAU09D,EACVl4D,QAASA,KACP63D,EAAyB,IACpBD,EACHt9E,OAAQ,MACRwI,KAAM,GACN,GAEL,SACQk1E,EAAS,wBAElBznE,IAAAU,cAACwR,EAAY,CACXrI,QAA0C,YAAjCw9D,EAAsBt9E,OAC/BsoB,KAAuC,YAAjCg1D,EAAsBt9E,OAC5BkgB,SAAU09D,EACVl4D,QAASA,KACP63D,EAAyB,IACpBD,EACHt9E,OAAQ,UACRwI,KAAM,GACN,GAEL,mBACkBg1E,EAAa,yBAIlCvnE,IAAAU,cAAA,MAAIxoB,MAAO,CAAEkyF,cAAe,SACzB18E,EAAelb,KAAKoV,IAAmB,IAADyiF,EACrC,OACErqE,IAAAU,cAAA,MACE5kB,IAAK8L,EAAc1U,GACnB05B,UAAU,iCAEV5M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAAC1yB,IAAK8L,EAAcA,cAAc1U,IACrD8sB,IAAAU,cAACge,GAAc,KACb1e,IAAAU,cAACwQ,IAAI,CACHhnB,GAAI,eAAetC,EAAcA,cAAc1U,KAC/C05B,UAAU,aAEV5M,IAAAU,cAAA,QACE4pE,wBAAyB,CACvBC,OAAQ3iF,EAAcmN,UAI3BnN,EAAcgJ,SACboP,IAAAU,cAAA,QAAMkM,UAAU,gBAAe,0BAGjChlB,EAAcgJ,SACdoP,IAAAU,cAACge,GAAc,CAACxmC,MAAO,CAAEyzB,SAAU,WACL,IAA3B/jB,EAAc4iF,UACbxqE,IAAAU,cAACwR,EAAY,CACXzC,QAASA,KA1MH7T,MAC5B6I,EACE,gCAF0B7I,EA0M8BhU,GAxMlBA,cAAc1U,KACpD,OACA,CAAC,EACD,CAAC,GACD,KACE,MAAMmqB,EAAQ3P,EAAe+8E,WAAW90F,GAAQA,EAAIzC,KAAO0oB,EAAO1oB,KAC5Dw3F,EAAiB,IAAIh9E,GAC3Bg9E,EAAertE,GAAS,IAAKqtE,EAAertE,GAAQmtE,UAAU,GAC9DvD,EAAkByD,EAAe,GAgMoC,EACnD7gE,SAAO,EACPiG,KAAK,YACN,sBAEC9P,IAAAU,cAAA,QAAMkM,UAAU,WAAU,mBACZhlB,EAAcmN,SAIJ,IAA3BnN,EAAc4iF,UACbxqE,IAAAU,cAACwR,EAAY,CACXzC,QAASA,KAvME7T,MACjC6I,EACE,gCAF+B7I,EAwMiBhU,GAtMVA,cAAc1U,KACpD,SACA,CAAC,EACD,CAAC,GACD,KACE,MAAMmqB,EAAQ3P,EAAe+8E,WAAW90F,GAAQA,EAAIzC,KAAO0oB,EAAO1oB,KAC5Dw3F,EAAiB,IAAIh9E,GAC3Bg9E,EAAertE,GAAS,IAAKqtE,EAAertE,GAAQmtE,UAAU,GAC9DvD,EAAkByD,EAAe,GA+Ld,EACDh4D,QAAM,EACN5C,KAAK,SACN,yBAEC9P,IAAAU,cAAA,QAAMkM,UAAU,WACb,IAAI,mBACOhlB,EAAcmN,UAQtCiL,IAAAU,cAAA,KACE4pE,wBAAyB,CACvBC,OAAQ3iF,EAAc8G,eAG1BsR,IAAAU,cAACyQ,EAAU,CAACO,OAAK,EAAClD,WAAS,GACzBxO,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,wBAAuB,iBAC3BhlB,EAAc6L,kBAE/BuM,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,wBAAuB,gCACjBhlB,EAAc8M,qBAEzCsL,IAAAU,cAACgM,EAAI,CACHK,MAAI,EACJH,UAAU,2DAEV5M,IAAAU,cAAA,QACE4pE,wBAAyB,CACvBC,OAAqB,OAAb3iF,QAAa,IAAbA,GAAyC,QAA5ByiF,EAAbziF,EAAe+F,kCAA0B,IAAA08E,OAA5B,EAAbA,EAA2C3xF,UAIvDkP,EAAc4H,mBAAqB,IAAInb,OAAS,GAChD2rB,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,wBAClBhlB,EAAc4H,oBAIlB,KAIXwQ,IAAAU,cAACwyB,GAAU,CACTC,YAAak0C,EAAsB90E,KACnCw8B,QAviBW,EAwiBTs4C,EAAsB90E,KACtB80E,EAAsBzlF,MAExBktC,QAASu4C,EAAsB90E,KAAO,EACtC6gC,iBA9RiB,aAAKh/C,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAE1BkzF,EAAyB,IACpBD,EACH90E,KAAM80E,EAAsB90E,KAAO,IAGjC80E,EAAsB90E,KAAO,GAC/B+0E,EAAyB,IACpBD,EACH90E,KAAM80E,EAAsB90E,KAAO,GAI3C,KAmRKu0E,EAAgBE,SACfhnE,IAAAU,cAACwkE,GAAwB,CACvBxkF,OAAQomF,EAAgBpmF,OACxBkyB,KAAOlyB,IACDomF,EAAgBpmF,OA5ZXiqF,EAACz3F,EAAIwN,KACtBmoF,EAAiBnoF,EAAOxN,GAAIwN,GAAQ,KAClC,MAAM4lF,EAAiBz8E,EAAQrX,KAAKo4F,GAC9BA,EAAe13F,KAAOA,EACjB,CACLA,GAAIA,EACJwF,KAAM2vF,EAAgB3nF,GACtBA,OAAQA,EACR4nF,wBAAyBC,EAAa7nF,IAGjCkqF,IAIXl+B,EAAW45B,GACXoC,IACAb,GAAkC,GAClC,EA2YQ8C,CAAW7D,EAAgB5zF,GAAIwN,GAxaxBA,KAAY,IAADmqF,GACL,QAAnBA,EAAA7uF,OAAOS,KAAKiE,UAAO,IAAAmqF,OAAA,EAAnBA,EAAqBx2F,QAAS,GAChCw0F,EAAiB,KAAMnoF,GAAQ,KAC7BsnF,IACAU,IACAb,IACAE,GAA8B,GAElC,EAkaU+C,CAAUpqF,GAGZqmF,EAAmB,CAAEC,SAAS,EAAOtmF,YAAQpM,GAAY,EAE3DkyF,MAAOA,KACLO,EAAmB,CAAEC,SAAS,EAAOtmF,YAAQpM,GAAY,IAI9DsyF,GACC5mE,IAAAU,cAACoc,GAAY,CACXlQ,UAAU,SACVqQ,YAAY,0DACZjN,QAASA,KACP62D,OAAyBvyF,EAAU,GAGrC0rB,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAChCxR,IAAAU,cAACwR,EAAY,CACXzC,QAASA,KACPo3D,OAAyBvyF,EAAU,EAErC89B,QAAM,GACP,UAGDpS,IAAAU,cAACwR,EAAY,CACXzC,QAASA,KAhXC/uB,MACpB+jB,EACE,4BAFkB/jB,EAiXKkmF,GA/WWlmF,OAAOxN,KACzC,SACA,CAAC,EACD,CAAC,GACD,KACE,MAAMqzF,EAAa18E,EAAQnJ,QAAQ0lF,GAAMA,EAAElzF,KAAOwN,EAAOxN,KACzDw5D,EAAW65B,GACXmC,IACAb,IACAE,IACAlB,OAAyBvyF,EAAU,IAErC,SACA,QAkW6C,EAErCo+B,QAAM,GACP,eAMN,ECpnBDoP,GAAc,CAClBpvC,MAAO,EACPC,MAAO,WAKHsyF,GAAqC1kF,IACzC,IAAIquC,EAAQ,CAAC,EACb,IAAK,IAAIx7B,KAAapX,OAAO6nB,OAAOtjB,GAClCquC,EAAMx7B,EAAUlgB,IAAM,GAAGkgB,EAAUnR,KAAKsb,mBAAmBnK,EAAU1a,OAEvE,OAAOsD,OAAOC,QAAQ2yC,GAAOxuC,KAAKgM,OAAwB,EAAE,EAG9D,MAAM2+E,WAAyB9qE,YAC7BC,YAAYC,GACVC,MAAMD,GAENE,KAAKG,MAAQ,CACXk2B,gBAAgB,EAChB7sC,QAASsW,EAAMtW,QACf8E,aAAcwR,EAAMxR,aACpB3G,OAAQ,CAAC,GAGXqY,KAAKwqB,SAAW,KAEhBxqB,KAAK42B,mBAAqB52B,KAAK42B,mBAAmBvS,KAAKrkB,MACvDA,KAAK62B,iBAAmB72B,KAAK62B,iBAAiBxS,KAAKrkB,MACnDA,KAAK82B,2BACH92B,KAAK82B,2BAA2BzS,KAAKrkB,MACvCA,KAAK41B,mBAAqB51B,KAAK41B,mBAAmBvR,KAAKrkB,KACzD,CAEAmZ,oBACOx9B,OAAOS,KAAK4jB,KAAKG,MAAM7R,cAActa,OAYxCgsB,KAAKC,SAAS,CAAEo2B,gBAAgB,IAVhCr2B,KAAKwqB,SAAWpmB,EACd,mCACA,MACA,CAAC,EACD,CAAC,EACDpE,KAAK42B,mBACL52B,KAAK62B,iBACL72B,KAAK82B,2BAKX,CAEAtS,uBAEwB,OAAlBxkB,KAAKwqB,UACPxqB,KAAKwqB,SAASI,OAElB,CAIAgM,mBAAmB12C,GACjB8f,KAAKwqB,SAAW,KAChB,IAAIl8B,EAAe,CACjBq3D,6BAA8B1pD,YAC5B/b,EAA0B,uBAE5BoZ,kBAAmBsrE,GACjB1kF,EAAKslF,qBAEPpR,kBACEz4E,OAAOC,QAAQsE,EAAKulF,aAAa1lF,KAAKiM,OACtC,IAGJgU,KAAKC,SACH,CACEo2B,gBAAgB,EAChB/nC,iBAEF,IAAM0R,KAAKF,MAAM6qE,mBAAmBr8E,IAExC,CAEAuoC,iBAAiB32C,GACf8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACZo2B,gBAAgB,EAChBjM,WAAY,6DAA2ClqC,EAAKiF,WAEhE,CAEA2xC,2BAA2BptC,GACzBsW,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACZo2B,gBAAgB,EAChBjM,WAAY,4DAAwC1gC,MAExD,CAEAksC,qBACE51B,KAAKF,MAAMg2B,cAAc91B,KAAKG,MAAM3W,QACtC,CAEAqsC,mBAAmBx9C,EAAMhG,GACvB2tB,KAAKC,UAAUC,IACb,IAAIylC,EAAO,CAAE,CAACttD,GAAOhG,GACR,mCAATgG,EAEFstD,EAAqC,+BAAItzD,EAAM8D,QAC7C,cACA,IAGFwvD,EAAKttD,GAAQhG,EAEF,aAATgG,IACFstD,EAAkB,YAAI,MAGxB,IAAIh+C,EAAShM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUvY,QAEzC,cADOA,EAAOtP,GACP,CAAEsP,SAAQ6B,QAAS7N,OAAOwE,OAAO,CAAC,EAAG+f,EAAU1W,QAASm8C,GAAO,GAE1E,CAIAvlC,SACE,MAAM5W,EAAUwW,KAAKG,MAAM3W,QAC3B,OAAIwW,KAAKG,MAAMk2B,eAEX12B,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAAC4Q,SAAS,KAAI,gCAMxB3d,IAAAU,cAAAV,IAAAyc,SAAA,KACEzc,IAAAU,cAAA,WAASkM,UAAU,mCACjB5M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACzB1R,IAAAU,cAACiY,GAAc,CACbhmC,MAAM,qBACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,aAEjBvc,IAAAU,cAAC4Y,GAAM,CACLgB,mBAAoBA,IACX,wCAET1N,UAAU,gBACVuM,SAAO,EACPtI,QAASxQ,KAAKG,MAAM7R,aAAagL,kBAAkBnnB,KACjDgoC,IAAA,IAAE9nC,EAAOC,GAAM6nC,EAAA,MAAM,CAAE9nC,QAAOC,QAAO,IAEvC05B,YAAY,2BACZ35B,MAAOmX,EAAQuJ,UACfqjB,SAAWiG,GACTrc,KAAK61B,mBAAmB,YAAaxZ,GAAkB,IAEzDjR,OAAQF,EACRsR,iBAAkBA,IAAM,yBAG5B7c,IAAAU,cAACiY,GAAc,CACbhmC,MAAM,qCACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,aAEjBvc,IAAAU,cAAC4Y,GAAM,CACLgB,mBAAoBA,IACX,wCAET1N,UAAU,gBACViE,QAAS,CAACiR,IAAa0jB,UAClBnlC,KAAKG,MAAM7R,aAAaq3D,6BAA6BxzE,KACrDmO,IAAC,CACAjO,MAAOiO,EAAEzN,GACTP,MAAOgO,EAAE7M,WAIfpB,MAAOmX,EAAQmE,UAAY8zB,GAC3BrL,SAAWiG,IACTrc,KAAK61B,mBACH,WACyB,IAAzBxZ,EAAehqC,MAAc,KAAOgqC,EACrC,EAEHjR,OAAQF,EACRsR,iBAAkBA,IAAM,0BAI9B7c,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACzB1R,IAAAU,cAACiY,GAAc,CACbhmC,MAAM,eACN,aACuB,OAArBkX,EAAQmE,SACJ,KACA,gIAENxW,UAAWwoB,IAAMuc,YACjBpP,IAAI,QACJwQ,SAA+B,OAArB9zB,EAAQmE,SAAoB,KAAO,KAE7CgS,IAAAU,cAAC4Y,GAAM,CACLgB,mBAAoBA,IACX,wCAET1N,UAAU,gBACVwM,WAAiC,OAArBvvB,EAAQmE,SACpB6iB,QACuB,OAArBhnB,EAAQmE,SACJ,CAAC8zB,IACD,CAACA,IAAa0jB,UACTnlC,KAAKG,MAAM7R,aAAaq3D,6BACxBtlE,QACEykB,IAAC,IAAA8lE,EAAA,OACAp1F,SAASsvB,EAAEjyB,MACX2C,SAAyB,QAAjBo1F,EAACphF,EAAQmE,gBAAQ,IAAAi9E,OAAA,EAAhBA,EAAkBv4F,MAAM,IACnC,GACD2mB,aAAa7mB,KAAK+J,IAAC,CAClB7J,MAAO6J,EAAErJ,GACTP,MAAO4J,EAAEzI,WAIrBpB,MAAOmX,EAAQ4K,aAAeqtB,GAC9BrL,SAAWiG,GACTrc,KAAK61B,mBACH,cACyB,IAAzBxZ,EAAehqC,MAAc,KAAOgqC,GAGxCjR,OAAQF,EACR,cAAkC,OAArB1hB,EAAQmE,SACrB,aAAiC,OAArBnE,EAAQmE,UAAqB,eACzC6uB,iBAAkBA,IAAM,yBAG5B7c,IAAAU,cAACoxD,GAAU,CACT34C,SAAO,EACP44C,QAASloE,EAAQszD,QACjBwV,UAAYt9E,GACVgrB,KAAK61B,mBAAmB,UAAW7gD,GAAmB,OAI5D2qB,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACzB1R,IAAAU,cAACiY,GAAc,CACbhmC,MAAM,qBACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,aAEjBvc,IAAAU,cAAC4Y,GAAM,CACLgB,mBAAoBA,IACX,wCAET1N,UAAU,gBACVuM,SAAO,EACPtI,QAASxQ,KAAKG,MAAM7R,aAAa8lE,kBAAkBjiF,KAChDwqD,IAAC,CACAtqD,MAAOsqD,EAAE,GACTrqD,MAAOqqD,EAAE,OAGb3wB,YAAY,2BACZ35B,MAAOmX,EAAQuzD,kBACf3mC,SAAWiG,GACTrc,KAAK61B,mBACH,oBACAxZ,GAAkB,IAGtBjR,OAAQF,EACRsR,iBAAkBA,IAAM,yBAG5B7c,IAAAU,cAACiY,GAAc,CACbhmC,MAAM,6CACNw6B,IAAI,QACJH,SAAS,oDAEThN,IAAAU,cAAC2jB,GAAe,CACd,oBACGhkB,KAAKG,MAAMxY,OAAO29E,yBAA2B,IAAItxF,OAAS,EACvD,sDACA,KAEN,aAAY,+EAA0EwV,EAAQqzD,+BAA+B7oE,oBAC7H,gBAAe,IACfiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,6CAClBnyC,GAAG,mDACHw7B,SACGrO,KAAKG,MAAMxY,OAAO29E,yBAA2B,IAAItxF,OAAS,EAE7DmyC,UAAW,IACX/P,SAAW8G,GACTld,KAAK61B,mBACH,iCACA3Y,EAAGiI,OAAO9yC,OAGdqyC,QAAUxH,GACRld,KAAK61B,mBACH,iCACA,IAGJgG,QAAU3e,GACRld,KAAK61B,mBACH,iCACA3Y,EAAGiI,OAAO9yC,OAGdA,MAAOmX,EAAQqzD,kCAEf78C,KAAKG,MAAMxY,OAAO29E,yBAA2B,IAAItxF,OACjD,GACA2rB,IAAAU,cAACgM,EAAI,CACHvkB,OAAK,EACLjV,GAAG,uDAEFmtB,KAAKG,MAAMxY,OAAO29E,4BAM7B3lE,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACjBxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKF,MAAMk2B,aAAcjkB,QAAM,GAAC,UAGvDpS,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAK41B,mBAAoBpsB,SAAO,GAAC,sBAOlE,ECtVF,MAAMqhE,WAAkBlyC,GAAuB94B,cAAA,IAAA0B,EAAA,SAAAxtB,WAAAwtB,EAAAvB,KAAA,KAqB7C8qE,aAAe,WACbvpE,EAAKtB,SAAS,CAAEo2B,gBAAgB,EAAMjM,WAAY,GAAIoE,QAAS,KAAM,KACnEjtB,EAAK01B,kBAAkB,GAE3B,EAAE,KAmHF8zC,qBAAwBl4F,IACtBuxB,EAAS,+BAA+BvxB,IAAM,OAAQ,CAAC,EAAG,CAAC,GAAG,KAC5DmtB,KAAK8qE,cAAc,GACnB,EACF,KAEFE,0BAA6Bn4F,IAC3BuxB,EAAS,+BAA+BvxB,IAAM,SAAU,CAAC,EAAG,CAAC,GAAG,KAC9DmtB,KAAK8qE,cAAc,GACnB,CACF,CArJF30C,SAASr2B,GACPC,MAAMo2B,SAASr2B,GACfE,KAAKk5B,YAAc,aACnBl5B,KAAKo5B,WAAa,GAClBp5B,KAAKmjB,cAAgB,CACnB,CAAC,kBAAmB,0CACpB,CAAC,qBAAsB,oCACvB,CAAC,UAAW,mBAEdnjB,KAAK2iB,eAAiB,qBACtB3iB,KAAKq5B,sBAAwBqxC,GAE7B1qE,KAAKs5B,gBAAkBslB,EACzB,CAEAloB,UAAU52B,GACRC,MAAM22B,UAAU52B,GAChBE,KAAK1R,aAAe,CAAC,CACvB,CAQAkoC,mBAAmB12B,GACjB,MAAM1lB,EAAS,IAAIC,gBAAgBylB,EAAM7gB,SAASC,QAClD,OAAOvD,OAAOwE,OAAO,CAAC,EAAG4f,MAAMy2B,mBAAmB12B,GAAQ,CACxDmjB,aAAc,CACZ5wC,MAAO2tB,KAAKmjB,cAAc,GAAG,GAC7B7wC,MAAO0tB,KAAKmjB,cAAc,GAAG,IAE/B+gC,MAAO9pE,EAAOK,IAAI,MAAQ,GAC1B+O,QAASyzD,IAEb,CAEAvlB,eACE,OACE/3B,IAAAU,cAAAV,IAAAyc,SAAA,KACEzc,IAAAU,cAAC6vD,GAAa,CACZr5D,MAAM,iBACNnd,QAASsmB,KAAKF,MAAMysD,UAAYvsD,KAAKF,MAAMpmB,QAAU,OAEvDimB,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,uCAKhC,CAEAktB,qBACE,OACEn6B,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAQ,mFAI7B,CAEA2pB,cACE,MAAO,oBACT,CAEAE,eACE,IAAI4nB,EAAYn/C,MAAMu3B,eAElBt3B,KAAKG,MAAM+jD,MAAMlwE,SACnBkrE,EAAiB,MAAIl/C,KAAKG,MAAM+jD,OAElC,IAAK,IAAK7rE,EAAMhG,KAAUsJ,OAAOC,QAAQokB,KAAKG,MAAM3W,SAClD,GAAI,CAAC,uBAAwB,2BAA2B/U,SAAS4D,GAC/D,IAAK,IAAK4yF,EAASlmE,KAAappB,OAAOC,QAAQvJ,GAC7B,SAAZ44F,GAGElmE,IACJm6C,EAAU,GAAG7mE,KAAQ4yF,MAAclmE,OAGrB,YAAT1sB,EACLsD,OAAOS,KAAK/J,GAAO2B,SACrBkrE,EAAU7mE,GAAQhG,EAAMF,KAAKmlB,GAAQA,EAAIA,OAElC,cAAgBjf,EACrBhG,EAAM2B,SACRkrE,EAAU7mE,GAAQhG,EAAMF,KAAKqiF,GAAOA,EAAGniF,MAAM6qB,iBAEtC,sBAAwB7kB,EAC7BhG,EAAM2B,SACRkrE,EAAU7mE,GAAQhG,EAAMF,KAAKqiF,GAAOA,EAAGniF,SAEhC,CAAC,WAAY,eAAeoC,SAAS4D,GAChC,OAAVhG,IACF6sE,EAAU7mE,GAAQhG,EAAMC,QAGhB,WAAT+F,GAAqBsD,OAAOS,KAAK/J,GAAO2B,QACzC3B,IAAU4qE,GAAiC5kE,IAGzB,SAATA,KADT6mE,EAAU7mE,GAAQhG,GAKtB,OAAO6sE,CACT,CAEAnlB,yBACE,OACEp6B,IAAAU,cAAA,KAAMg5B,sBAAqB,CACzB/qC,aAAc0R,KAAK1R,aACnB9E,QAASwW,KAAKG,MAAM3W,QACpBwsC,aAAcA,IAAMh2B,KAAKC,SAAS,CAAEwyB,cAAc,IAClDk4C,mBAAqBr8E,GAClB0R,KAAK1R,aAAeA,EAEvBwnC,cAAe91B,KAAK41B,oBAG1B,CAEAiE,aACE,MAAMt4C,EAAQye,KAAKG,MAAM5e,MACzB,OACEoe,IAAAU,cAAAV,IAAAyc,SAAA,KACEzc,IAAAU,cAACgM,EAAI,CAACC,cAAY,EAACQ,IAAI,KAAKW,KAAK,SAAQ,cAC3BlsB,EAAQye,KAAKo5B,WAAa,GAAK,cAC1C73C,EAAM,uBAEToe,IAAAU,cAACyQ,EAAU,CAACQ,OAAK,EAACI,QAAM,EAACH,SAAO,GAC9B5R,IAAAU,cAACyQ,EAAU,CAACE,kBAAgB,EAACzE,UAAU,sBAAsBO,IAAI,MAC9D9M,KAAKG,MAAMquB,QAAQr8C,KAAKoD,GAAMyqB,KAAKi/D,iBAAiB1pF,OAK/D,CAcA0pF,iBAAiB1pF,GAAI,IAAD21F,EAAAC,EAAAC,EAClB,MAAM1hF,EAASlU,SAA4B,QAApB01F,EAAC31F,EAAEyS,WAAW0B,cAAM,IAAAwhF,OAAA,EAAnBA,EAAqBr4F,IACvCmtF,EAAW/+E,YAAsB1L,EAAEyS,WAAW0B,QACpD,OACEiW,IAAAU,cAACyN,EAAG,CACFvB,UAAU,qBACV2B,eAAa,EACbpB,IAAI,KACJ0B,YAAaj5B,EAAEqQ,OAAS,IACxBnK,IAAKlG,EAAE1C,IAEP8sB,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACnBxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,yBACpBqtB,IAAAU,cAACgM,EAAI,KAAE92B,EAAEyS,WAAWgQ,OAAS,MAE/B2H,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,UACpBqtB,IAAAU,cAACgM,EAAI,KAAqB,QAArB8+D,EAAE51F,EAAEyS,WAAW0B,cAAM,IAAAyhF,OAAA,EAAnBA,EAAqB13F,SAGhCksB,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACnBxO,IAAAU,cAACiY,GAAc,CACbhmC,MAAO,SACc,QAAnB84F,EAAA71F,EAAE+gB,yBAAiB,IAAA80E,OAAA,EAAnBA,EAAqBp3F,QAAS,GAC9BuB,EAAE+gB,kBAAoBlgB,YAAa,IAAI2O,MACnC,cACA,gBAGN4a,IAAAU,cAACgM,EAAI,KAAE92B,EAAE+gB,mBAAqB,MAEhCqJ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,+BACpBqtB,IAAAU,cAACgM,EAAI,KAAE92B,EAAE0kB,aAAe,OAG5B0F,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,gDACpBqtB,IAAAU,cAACgM,EAAI,KACF92B,EAAEsgB,+BAAiC,MAAQ,MAC3CtgB,EAAEsgB,gCACD,uBAAatgB,EAAEoiB,oBAIrBgI,IAAAU,cAAC4/D,KAAW,CAACpoF,MAAO,CAAEyrD,MAAO,SAC3B3jC,IAAAU,cAACwR,EAAY,CACXtF,UAAU,gBACV3C,SAAUo2D,EACVx2D,SAAO,EACPsD,IAAK+D,IACLhnB,GAAI,eAAetU,EAAEyS,WAAWnV,KAC9B6W,IAAWsW,KAAKs8D,gBAAkB,WAAa,MAElD,+BAEC38D,IAAAU,cAAA,QAAMkM,UAAU,WAAW,oBAAeh3B,EAAEqQ,UAE7CrQ,EAAE2qF,YAAc,GACfvgE,IAAAU,cAAC0gB,KAAK,CAACzuC,MAAOiD,EAAE2qF,gBAIJ,IAAf3qF,EAAE40F,UACDxqE,IAAAU,cAACwR,EAAY,CACXzC,QAASA,IAAMpP,KAAK+qE,qBAAqBx1F,EAAEyS,WAAWnV,IACtD22B,SAAO,EACPiG,KAAK,YACN,sBAEC9P,IAAAU,cAAA,QAAMkM,UAAU,WAAU,oBAAah3B,EAAEqQ,SAG7B,IAAfrQ,EAAE40F,UACDxqE,IAAAU,cAACwR,EAAY,CACXzC,QAASA,IAAMpP,KAAKgrE,0BAA0Bz1F,EAAEyS,WAAWnV,IAC3Dw/B,QAAM,EACN5C,KAAK,SACN,yBAEC9P,IAAAU,cAAA,QAAMkM,UAAU,WAAU,oBAAah3B,EAAEqQ,QAKnD,ECvPF,MAAMylF,WAAqBzrE,YAIvBQ,SACI,OACIT,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,mDACV10B,MAAO,CAACq4B,OAAQ,KAChBP,QAAS3P,KAAKF,MAAMwrE,cAEpB3rE,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKF,MAAMwrE,aAAc9hE,SAAO,EAAC+C,UAAU,8BAA6B,wBAC/F5M,IAAAU,cAAA,KAAGkM,UAAU,yBAAwB,8BACpCvM,KAAKurE,iBAItB,CAEAA,gBACI,IAAI3rE,EAAY,KACZs7D,EAAO,KACX,OAAQl7D,KAAKF,MAAMlM,QACf,IAAK,WACDgM,EAAYmkD,GACZ,MACJ,IAAK,iCACDnkD,EAAYokE,GACZ,MACJ,IAAK,mCACDpkE,EAAYw8D,GACZ,MACJ,IAAK,wBACDx8D,EAAY0mE,GACZ,MACJ,IAAK,iBACD1mE,EAAYirE,GACZ,MACJ,QACIjrE,EAAY05D,GACZ4B,EAAOl7D,KAAKF,MAAMlM,OAAOrb,MAAM,KAAKizF,MAE5C,OAAK5rE,EACED,IAAAU,cAACT,EAAS,CAACo6D,SAAO,EAACtgF,QAASsmB,KAAKF,MAAMpmB,QAASwhF,KAAMA,EAAWj8E,SAAU,CAACC,OAAQ,CAAC,KADnE,IAE7B,ECvBJ,MAAMuiC,GAAc,CAChBpvC,MAAO,EACPC,MAAO,mBAELwwE,GAA4B,eAGlC,MAAM2oB,WAAkBx1C,GAAcp2B,cAAA,SAAA9rB,WAAA,KA2UlC+4C,YAAc,KACV9sB,KAAKqB,kBAAkB,CAC1B,CAzUD8X,oBACInZ,KAAKi3B,kBACT,CAEAzS,uBACIzkB,MAAMykB,uBACmB,OAArBxkB,KAAK+hC,aACL/hC,KAAK+hC,YAAYnX,OAEzB,CAIAgM,mBAAmB12C,GACf6f,MAAM62B,mBAAmB12C,GAEzB,MAAMokF,EAAiBloE,YACnBlc,EAAM,CAACub,iBAAkB,CAAC,WAC9B,GAAIuE,KAAKG,MAAMirB,MAOX,YANAprB,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBq1C,iBAAkBpH,EAAeprE,OAAOyyE,mBAAmBzrF,MAAQ,GACnE0rF,mBAAoBtH,EAAeprE,OAAOyyE,mBAAmBzrF,MAAQ,GACrE2rF,iBAAkBvH,EAAeprE,OAAO4yE,mBAAqB,KAIrE,MAAM7yE,EAAQqrE,EAAerrE,MACvB8yE,EAAY9yE,EAAM9R,MAAQpU,IAC1B6mB,EAAqBX,EAAMW,kBAA2B,CAACvnB,MAAO4mB,EAAMW,kBAAkB/mB,GAAIP,MAAO2mB,EAAMW,kBAAkB/B,UAA1E,KACrDmI,KAAKC,SACD,CACIo2B,gBAAgB,KACb16C,OAAOwE,OAAO,CAAC,EAAG8Y,EAAO,CACxBpC,MAAOk1E,EAAYtqD,GACfxoB,EAAMpC,MAAQ,CAACxkB,MAAO4mB,EAAMpC,MAAOvkB,MAAOK,IAAYsmB,EAAMpC,OAAOvkB,OAASmvC,GAChFtnB,MAAQxe,OAAOS,KAAK6c,EAAMkB,OAAOnmB,OAAcilB,EAAMkB,MAAX,GAC1CP,oBACAR,UAAWH,EAAMG,UAAUjnB,KAAI+J,IAAC,CAAM7J,MAAO6J,EAAErJ,GAAIP,MAAO4J,EAAE2b,eAEhEm0E,OAAQ/yE,EAAMgzE,OAAQ,EACtBC,YAAajzE,EAAMkzE,eAAgB,EACnCC,kBAAmBL,EACnBM,0BAAiD,OAAtBzyE,EAA6B,KAAOA,EAAkBvnB,MACjF05F,YACAL,iBAAkBpH,EAAezqE,SAAS8xE,mBAAmBzrF,MAAQ,GACrE0rF,mBAAoBtH,EAAezqE,SAASyyE,qBAAqBpsF,MAAQ,GACzE2rF,iBAAkBvH,EAAezqE,SAASiyE,mBAAqB,KAEnE,KAEI,MAAMx/E,EAAY0T,KAAKF,MAAM/kB,MAAMX,OAC/B6e,EAAMnF,OAASxH,EAAUwH,MACzBkM,KAAKF,MAAM+tB,QAAQ1vC,KAAK,8BAA8BmO,EAAUzZ,MAAMomB,EAAMnF,cAChF,GAGZ,CAEAy4E,oBAAoBrvD,GAChBld,KAAKC,SAAS,CACV8rE,UAAsC,SAA3B7uD,EAAG7N,cAAch9B,MAC5BwkB,MAAO4qB,GACP7nB,kBAAmB6nB,GACnBroB,UAAW,IAEnB,CAEAqyB,sBAAsBpzC,EAAMhG,GACxB2tB,KAAKC,UAASC,IAAS,CACnB,CAAC7nB,GAAOhG,EACRsV,OAAQhM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUvY,OAAQ,CAAC,CAACtP,GAAO,QAE7D,CAEAqrE,0BAA0BrrE,GACtB2nB,KAAKC,UAASC,IAAS,CACnBvY,OAAQhM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUvY,OAAQ,CAAC,CAACtP,GAAO,QAE7D,CAEAm0F,iBAAiBx9E,GACb,OAAO,IAAI2gE,SAAQ,CAACC,EAASC,KACzB,MAAM5rB,EAAW,IAAIC,SACrBD,EAASE,OAAO,OAAQn1C,GAExBgR,KAAK+hC,YAAc,IAAIn9B,eACvB5E,KAAK+hC,YAAY/8B,KAAK,OAAQ,2BAE9B,MAAMpsB,EAAuBD,cACzBC,GACAonB,KAAK+hC,YAAY78B,iBACb,eAAgBtsB,GAGxBonB,KAAK+hC,YAAYz8B,OAAS,KACtBpsB,YACIN,EAAsBonB,KAAK+hC,YAAYr4C,QAC3C,IACI5B,EADAyd,GAAU,EAEVC,EAAW,CAAC,EAChB,IACIA,EAAWC,KAAKC,MAAM1F,KAAK+hC,YAAYp8B,aAC3C,CAAE,MAAM7d,GACJyd,GAAU,CACd,CAEA,GAAIA,EAAS,CACT,GAAwB,OAApBC,EAAS9b,OAET,YADAkmE,EAAQ,CAAC1vE,KAAM,CAACi/B,KAAM3Z,EAAStlB,KAAK8O,KAAK2zC,OAGzC76C,EADO0d,EAAS7d,OACR+W,YAAsB8G,EAAS7d,OAAOqH,MAEtC0P,YAAsB8G,EAASrgB,QAE/C,MACI2C,EADmC,MAA5BkY,KAAK+hC,YAAYr4C,OAChB,uEAEA,4DAAwCsW,KAAK+hC,YAAYr4C,oDAErEsW,KAAKC,SAAS,CAACwsE,iBAAkB3kF,IAAQ,IAAM+nE,EAAO/nE,KACtDkY,KAAK+hC,YAAc,IAAI,EAG3B/hC,KAAK+hC,YAAY18B,QAAU,KACvBrF,KAAK+hC,YAAc,KACnB,MAAMj6C,EAAQ,6FACdkY,KAAKC,SAAS,CAACwsE,iBAAkB3kF,IAAQ,IAAM+nE,EAAO/nE,IAAO,EAGjEkY,KAAK+hC,YAAYn8B,KAAKq+B,EAAS,GAEvC,CAEAyoC,gBAAgB1yF,GACZ,MAAM2yF,EAAc5yF,YAAkBC,GACtC,GAAK2yF,EAIL,OAAOA,EAHH3sE,KAAKC,SAAS,CAAC2sE,eAAgB,iCAIvC,CAEA90C,aACI93B,KAAKC,SACD,CAACqrB,UAAU,EAAMyM,eAAgB,GAAI9I,YAAa,wBAClD,KACI,MAAOxlC,EAAS9B,GAAUqY,KAAK2jC,WAC/B,GAAIl6C,EAAS,CACT,MAAM,GAAE5W,EAAE,MAAEu4C,GAAUprB,KAAKG,MAC3B,IAAK,IAAIvmB,KAASomB,KAAKG,MAAMhG,MAAMtgB,OACjD,GAAkB,aAAfD,EAAM+P,MAAuB/P,EAAM8lE,aAAa1rE,OAAO,CACzD,IAAK,IAAI64F,KAAejzF,EAAM8lE,oBACtB1/C,KAAKG,MAAMhG,MAAM+lD,UAAU2sB,EAAYpxF,KAE/C7B,EAAM8lE,aAAa1rE,OAAS,CAC7B,CAGcgsB,KAAKwqB,SAAWpmB,EACZgnB,EACM1E,GAASgB,UAAUjqB,KACnBipB,GAASkB,iBAAiBrhB,OAAO1zB,GACvCu4C,EAAQ,OAAS,MACjB,CAAC,EACDhvB,YACI,CACIvpB,GAAIA,EACJsU,IAAK6Y,KAAKG,MAAM4rE,UAAYh5F,IAASD,IACrC8mB,kBAAmBoG,KAAKG,MAAMvG,kBAAoBoG,KAAKG,MAAMvG,kBAAkBvnB,MAAQ,KACvFwkB,MAAOmJ,KAAKG,MAAMtJ,MAAMxkB,MACxBwlB,SAAUmI,KAAKG,MAAMtI,SACrBsC,MAAO6F,KAAKG,MAAMhG,MAClBf,UAAW4G,KAAKG,MAAM/G,UAAUjnB,KAAI+J,GAAKA,EAAE7J,QAC3C45F,KAAMjsE,KAAKG,MAAM6rE,QAErB,CAACxwE,UAAU,EAAMC,iBAAkB,CAAC,WAExCuE,KAAKo4B,uBACLp4B,KAAKq4B,qBACLr4B,KAAKs4B,+BAEb,MACIt4B,KAAKC,SAAS,CAACqrB,UAAU,EAAO3jC,SAAQsnC,YAAa6zB,IACzD,GAGZ,CAEA1qB,uBAAuBl4C,GACnB8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,UACDC,IAAS,CACLkrB,OAAO,EACPE,UAAU,EACV2D,YAAa,WACbp8C,GAAIupB,YAAoBlc,GAAM+Y,MAAMpmB,GACpCw5F,0BAA2D,OAAhCnsE,EAAUtG,kBAA6B,KAAOsG,EAAUtG,kBAAkBvnB,UAEzG,KACI2tB,KAAKorB,OAAQ,EACbprB,KAAKmvB,eAAiBvK,YAAW,KAC7B5kB,KAAKC,SAAS,CAACgvB,YAAa6zB,IAA2B,GACxD,IAAK,GAGpB,CAEAzqB,qBAAqBn4C,GACjB8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVqrB,UAAU,EACV2D,YAAa6zB,GACb/qB,eAAgB,gDAAiC73C,EAAKiF,WAE9D,CAEAmzC,+BAA+B5uC,GAE3B,GADAsW,KAAKwqB,SAAW,KACD,MAAX9gC,EACAsW,KAAKC,SAAS,CAACqrB,UAAU,EAAOgL,cAAc,QAC3C,CACH,IAAInxC,EAAU,GACC,MAAXuE,IACAvE,EAAU,8BAAyB6a,KAAKG,MAAMirB,MACxC,YAAc,mBAEpBprB,KAAKqB,oBAETrB,KAAKC,SAAS,CACVqrB,UAAU,EACV2D,YAAa6zB,GACb/qB,eAAgB5yC,GAAW,kFAA8DuE,MAEjG,CACJ,CAEAojF,gBACI,GAA+B,IAA3B9sE,KAAKG,MAAMtJ,MAAMxkB,MAAe,OACpC,MAAOoX,EAAS9B,GAAUqY,KAAK2jC,WAC3Bl6C,EACAuW,KAAKC,SAAS,CAAC8sE,WAAW,IAE1B/sE,KAAKC,SAAS,CAACtY,UAEvB,CAIAwuC,SAASr2B,GACLE,KAAKkjD,eAAiB,GAC1B,CAEA1sB,mBAAmB12B,GACf,MAAO,CACHsrB,OAAQtrB,EAAMkjD,QACdgpB,QAAQ,EACRE,aAAa,EACba,WAAW,EACXX,kBAAmB,KACnBC,0BAA2B,EAC3Bx5F,GAAI,KACJk5F,UAAW,KACXnyE,kBAAmB6nB,GACnB5qB,MAAO4qB,GACP5pB,SAAU,GACVsC,MAAO,GACPf,UAAW,GACXkyB,UAAU,EACV3jC,OAAQ,CACJkP,MAAO,GACPgB,SAAU,IAEd40E,iBAAkB,GAClBG,eAAgB,GAChB70C,eAAgB,GAChB9I,YAAa6zB,GACb4oB,iBAAkB,GAClBE,mBAAoB,GACpBC,iBAAkB,GAE1B,CAEAn1C,UAAU52B,GACNE,KAAK+hC,YAAc,IACvB,CAEAhL,wBACI/2B,KAAKusE,oBAAsBvsE,KAAKusE,oBAAoBloD,KAAKrkB,MACzDA,KAAKwsE,iBAAmBxsE,KAAKwsE,iBAAiBnoD,KAAKrkB,MACnDA,KAAK0sE,gBAAkB1sE,KAAK0sE,gBAAgBroD,KAAKrkB,MACjDA,KAAK83B,WAAa93B,KAAK83B,WAAWzT,KAAKrkB,MACvCA,KAAKo4B,uBAAyBp4B,KAAKo4B,uBAAuB/T,KAAKrkB,MAC/DA,KAAKq4B,qBAAuBr4B,KAAKq4B,qBAAqBhU,KAAKrkB,MAC3DA,KAAKs4B,+BAAiCt4B,KAAKs4B,+BAA+BjU,KAAKrkB,MAC/EA,KAAK8sE,cAAgB9sE,KAAK8sE,cAAczoD,KAAKrkB,KACjD,CAEAo3B,cACI,OAAIp3B,KAAKG,MAAMirB,MACJ1E,GAASiB,sBAAsBlqB,KAEnCipB,GAASkB,iBAAiBrhB,OAAOvG,KAAKF,MAAM/kB,MAAMX,OAAOvH,GACpE,CAEAykD,eACI,OAAIt3B,KAAKG,MAAMirB,MACJ,CAAC,EAEL,CAAC4hD,WAAY,mBACxB,CAEA91C,cAAc/xC,GACV,OAAI6a,KAAKG,MAAMirB,MACJ,oEAAqDjmC,IAEzD,+CAAgCA,GAC3C,CAEAgyC,6BAA6BztC,GACzB,OAAIsW,KAAKG,MAAMirB,MACJ,2GAAuF1hC,IAE3F,sFAAkEA,IAC7E,CAMA2X,mBACIrB,KAAK4Y,QAAQvX,iBAAiB,OAClC,CAEAsiC,WACI,IAAIl6C,GAAU,EACd,MAAM,OACFuiF,EAAM,SACNn0E,EAAQ,kBACR+B,EAAiB,MACjBO,EAAK,UACL4xE,GACA/rE,KAAKG,MACHwjD,EAAc,yBACpB,IAAIh8D,EAAS,CAAC,EA6Bd,MA1BK,EAAC,GAAM,GAAOlT,SAASs3F,KACxBpkF,EAAkB,UAAIg8D,EACtBl6D,GAAU,GAITuiF,IAAwB,IAAdD,GAAkD,IAA5BnyE,EAAkBvnB,QACnDsV,EAA0B,kBAAIg8D,EAC9Bl6D,GAAU,GAIToO,EAAS7jB,SACV2T,EAAiB,SAAIg8D,EACrBl6D,GAAU,GAITJ,aAAsB8Q,GAGhB1gB,YAAkB0gB,GAAS6F,KAAKkjD,iBACvCv7D,EAAc,MAAI,2CAAiCqY,KAAKkjD,4BACxDz5D,GAAU,IAJV9B,EAAc,MAAIg8D,EAClBl6D,GAAU,GAMP,CAACA,EAAS9B,EACrB,CAIA+vC,eACI,OACI/3B,IAAAU,cAACoQ,EAAW,KACR9Q,IAAAU,cAAA,MAAIkM,UAAU,qBAAoB5M,IAAAU,cAACwQ,IAAI,CAAChnB,GAAG,8BAA6B,UACxE8V,IAAAU,cAAA,MAAIkM,UAAU,wBAAwBvM,KAAKG,MAAMirB,MAAQ,QAAU,SAAS,UAGxF,CAEAwM,gBACI,MAAM,MACF/gC,EAAK,MACLu0B,EAAK,eACLwhD,EAAc,SACd/0E,EAAQ,UACRk1E,EAAS,SACTzhD,EAAQ,MACRnxB,EAAK,UACL4xE,EAAS,iBACTU,GACAzsE,KAAKG,MACH8sE,EAAa,EAAC,GAAM,GAAOx4F,SAASs3F,GAC1C,OACIpsE,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAE5M,KAAKG,MAAMirB,MAAQ,QAAU,SAAS,UACjEzrB,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,0BACjB5M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAAA,gBACIV,IAAAU,cAACgM,EAAI,CAACS,IAAI,SAASP,UAAU,SAAQ,eACnC6e,GAASzrB,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,gEACtB/M,IAAAU,cAAC4gC,KAAK,CACFC,SAAuB,IAAd6qC,EACTniE,UAAWwhB,GAASE,EACpBjzC,KAAK,gBACLhG,OAAO,EACP+jC,SAAUpW,KAAKusE,oBACfj6F,MAAM,cAEVqtB,IAAAU,cAAC4gC,KAAK,CACFC,SAAuB,IAAd6qC,EACTniE,UAAWwhB,GAASE,EACpBjzC,KAAK,gBACLhG,OAAO,EACP+jC,SAAUpW,KAAKusE,oBACfj6F,MAAM,4BAIH,IAAdy5F,GAAsB/rE,KAAKktE,uBACb,IAAdnB,GAAuB/rE,KAAKmtE,yBAC5BF,GAAcjtE,KAAKotE,sBACL,IAAdrB,GAAsB/rE,KAAKqtE,sBAC3BJ,GAAcjtE,KAAKwyD,cAAcuZ,IAErCU,EAAiBz4F,OAAS,GAAKgsB,KAAKstE,+BACpCV,EAAe54F,OAAS,GAAKgsB,KAAKutE,6BAClCR,GACGptE,IAAAU,cAACgrE,GAAY,CACT3xF,QAAS,CAACme,WAAUsC,SACpBvG,OAAQjhB,IAAYkkB,EAAMxkB,OAAOQ,GACjCy4F,aAAcA,IAAMtrE,KAAKC,SAAS,CAAC8sE,WAAW,MAKlE,CAEAG,sBACI,MAAM,OACFvlF,EAAM,YACNukF,EAAW,OACXF,EAAM,0BACNK,EAAyB,kBACzBD,EAAiB,kBACjBxyE,EAAiB,SACjB0xB,EAAQ,UACRygD,GACA/rE,KAAKG,MACHqtE,GAA8B7lF,EAAOiS,mBAAqB,IAAI5lB,OAAS,EAC7E,OACI2rB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,gCACjB05F,GACGrsE,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,yHAEbs/D,GAAUD,GAAaK,GAAqBxyE,EAAkBvnB,QAAUg6F,GAA6BH,GACnGvsE,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,8LAEf/M,IAAAU,cAAC4Y,KAAM,CACH,mBAAkBu0D,EAA6B,0BAA4B,KAC3EjhE,UAAWihE,EAA6B,uCAAyC,gBACjFz0D,WAAYizD,GAAU1gD,EACtB9a,QAAS,CAACiR,MAAgBzhB,KAAKG,MAAMurE,iBAAiBv5F,KAAI+J,IAAC,CAAM7J,MAAO6J,EAAErJ,GAAIP,MAAO4J,EAAE2b,cACvFmU,YAAY,aACZ35B,MAAOunB,EACPwc,SAAWiG,GAAmBrc,KAAKyrB,sBAAsB,oBAAqBpP,GAC9EjR,OAAQF,IAEXsiE,GAA8B7tE,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,2BAA2B8U,EAAOiS,mBAG5F,CAEAuzE,yBACI,MAAM,iBACFtB,EAAgB,MAChBh1E,EAAK,OACLlP,EAAM,SACN2jC,GACAtrB,KAAKG,MACHstE,GAAkB9lF,EAAOkP,OAAS,IAAI7iB,OAAS,EACrD,OACI2rB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,UAChBu5F,EAAiB73F,QAAU2rB,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,+KACxC/M,IAAAU,cAAC4Y,KAAM,CACH,mBAAkBw0D,EAAiB,cAAgB,KACnDlhE,UAAWkhE,EAAiB,uCAAyC,gBACrE10D,WAAYuS,EACZ9a,QAAS,CAACiR,IAAe0jB,UAAU0mC,EAAiB15F,KAAI4jD,IAC7C,CAAC1jD,MAAO0jD,EAAGzjD,MAAOK,IAAYojD,GAAGzjD,WAE5C2nC,mBAAoBA,IAAe,wCACnC5nC,MAAOwkB,EACPuf,SAAWiG,GAAmBrc,KAAKyrB,sBAAsB,QAASpP,GAClEjR,OAAQF,IAEXuiE,GAAkB9tE,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,eAAe8U,EAAOkP,OAGpE,CAEAu2E,qBACI,MAAM,OACFzlF,EAAM,SACN2jC,EAAQ,SACRzzB,EAAQ,MACRsC,GACA6F,KAAKG,MACHyjD,GAAqBj8D,EAAOkQ,UAAY,IAAI7jB,OAAS,EACrDmvE,GAAkBx7D,EAAOwS,OAAS,IAAInmB,OAAS,EACrD,OACI2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,oBAClBqtB,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkB4/B,EAAoB,iBAAmB,KACzD39B,gBAAc,EACdjB,kBAAkB,mBAClBpb,SAAU0hB,EACVjd,QAASu1C,EACTz1C,WAAS,EACTgY,UAAW,IACX9zC,MAAOwlB,EACP6sB,QAAUxH,GAAOld,KAAKyrB,sBAAsB,WAAY,IACxDrV,SAAW8G,GAAOld,KAAKyrB,sBAAsB,WAAYvO,EAAGiI,OAAO9yC,OACnEwyC,QAAU3H,GAAOld,KAAK0jD,0BAA0B,cACnDE,GAAqBjkD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,kBAAkB8U,EAAOkQ,WAElE8H,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,kBAAQi6B,UAAU,qBACpC5M,IAAAU,cAAC20B,GAAa,CACV3mB,QAAS80C,EACTluB,oBAAqB96B,EACrBgsB,UAAWnmB,KAAKkjD,eAChBp0C,QAAS,CACL0B,QAAS,CAAC,SAAU,OAAQ,YAAa,OAAQ,QAAS,YAC1Dk9D,OAAQ,CACJC,YAAY,EACZn9D,QAAS,CAAC,OAAQ,WAEtB36B,KAAM,CACF83F,YAAY,EACZn9D,QAAS,CAAC,YAAa,YAE3BovC,UAAW,CACP+tB,YAAY,EACZn9D,QAAS,CAAC,eAEd2O,KAAM,CAAEwuD,YAAY,GACpBlrB,MAAO,CACHmrB,YAAY,EACZC,eAAe,EACfC,kBAAkB,EAClBC,eAAgB/tE,KAAKwsE,iBACrBwB,cAAc,EACdC,YAAa,qDACbpgE,IAAK,CAACqgE,SAAS,EAAMC,WAAW,GAChCC,YAAa,CACThwD,OAAQ,OACRklB,MAAO,MAGf+qC,SAAU,CACND,YAAa,CACThwD,OAAQ,IACRklB,MAAO,KAEXgrC,cAAetuE,KAAK0sE,kBAG5BtpB,aAAc,CAAElrC,OAAQ,MACxBkd,qBAAuBD,GAAiBn1B,KAAKyrB,sBAAsB,QAAS0J,KAE/EguB,GAAkBxjD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEH,EAAOwS,QAIvD,CAEAkzE,sBACI,MAAMkB,EAAsBvuE,KAAKG,MAAMyrE,mBAAmBz5F,KAAI+uE,IAAC,CAAM7uE,MAAO6uE,EAAEruE,GAAIP,MAAO4uE,EAAErpD,aACrFm0E,EAAShsE,KAAKG,MAAM6rE,OAC1B,OACIrsE,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,kBAChB05F,GAAUrsE,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,2GAA+F6hE,EAAoBv6F,QAAU2rB,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,mEAC/J/M,IAAAU,cAAC4Y,KAAM,CACH1M,UAAW,gBACX+kD,mBAAmB,EACnBC,aAAcvxD,KAAKG,MAAM/G,UACzB4e,aAAa,EACbe,WAAY/Y,KAAKG,MAAM6rE,SAAWuC,EAAoBv6F,QAAUgsB,KAAKG,MAAMmrB,SAC3ExS,SAAO,EACPD,cAAY,EACZrI,QAAS+9D,EACTviE,YAAY,aACZiO,mBAAoBA,IAAe,wCACnC7D,SAAUphC,GAAmBgrB,KAAKyrB,sBAC9B,YAAiC,OAApBz2C,EAA2B,GAAKA,GAEjDo2B,OAAQF,KAK5B,CAEAoiE,+BACI,OAAOttE,KAAKwuE,kBAAkB,mBAClC,CAEAjB,6BACI,OAAOvtE,KAAKwuE,kBAAkB,iBAClC,CAEAA,kBAAkBxvC,GAGd,OACIr/B,IAAAU,cAACoc,GAAY,CACTI,iBAAkB7c,KAAKG,MAAM6+B,GAC7BnnD,MAAO,CAACq4B,OAAQ,KAChBP,QAASA,IAAM3P,KAAKC,SAAS,CAAC,CAAC++B,GAAY,MAE3Cr/B,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACzC,QAASA,IAAMpP,KAAKC,SAAS,CAAE,CAAC++B,GAAY,KAAOx1B,SAAO,GAAC,OAIzF,CAEAgpD,cAAcuZ,GACV,MAAM,MACFl1E,EAAK,eACLkhC,EAAc,YACd9I,EAAW,SACX3D,GACAtrB,KAAKG,MACT,OACIR,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAAC3C,WAAyB,IAAd49D,EAAqB56D,SAAuB,IAAd46D,IAClC,IAAdA,GAAuBpsE,IAAAU,cAACwR,EAAY,CAACjI,SAA0B,IAAhB/S,EAAMxkB,OAAei5C,EAAU9hB,SAAO,EAAC4F,QAASpP,KAAK8sE,eAAe,2BACpHntE,IAAAU,cAACwR,EAAY,CAACjI,SAAU0hB,EAAU/Y,MAAI,EAACnD,QAASpP,KAAK83B,YAAa7I,IAErE8I,EAAe/jD,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEiwC,GAGvD,EAGJ0zC,GAAU3kC,YAAcjmC,ECvqBxB,MAAMiiD,GAA4B,mBAGlC,MAAM2rB,WAAsBx4C,GAAcp2B,cAAA,SAAA9rB,WAAA,KA6KtC+4C,YAAc,KACV9sB,KAAKqB,kBAAkB,CAC1B,CA5KD8X,oBACSnZ,KAAKF,MAAMkjD,QAIZjjD,MAAMoZ,oBAHNnZ,KAAKC,SAAS,CAACo2B,gBAAgB,GAKvC,CAIAO,mBAAmB12C,GACf6f,MAAM62B,mBAAmB12C,GAEzB,MAAMwuF,EAAYtyE,YACdlc,EACA,CACIub,iBAAkB,CAAC,SACnBe,eAAgB,CAAC,qBACjBC,mBAAoB,CAAC,uBAE3B9C,WACG+0E,EAGD1uE,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBl8B,MAAOu0E,EAAUv0E,MACjB7D,kBAAoC,aAAjB0J,KAAK5K,QAAyB,GAAKs5E,EAAUp4E,oBALpE0J,KAAKC,SAAS,CAACo2B,gBAAgB,EAAOC,cAAc,GAQ5D,CAEA7K,sBAAsBpzC,EAAMhG,GACxB2tB,KAAKC,UAASC,IAAS,CACnB,CAAC7nB,GAAOhG,EACRsV,OAAQhM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUvY,OAAQ,CAAC,CAACtP,GAAO,QAE7D,CAEAy/C,aACI93B,KAAKC,SACD,CAACqrB,UAAU,EAAMyM,eAAgB,GAAI9I,YAAa,wBAClD,KACI,MAAOxlC,EAAS9B,GAAUqY,KAAK2jC,WAC3Bl6C,EAEAuW,KAAKwqB,SAAWpmB,EACZsiB,GAAS2B,iBAAiB5qB,KAC1BuC,KAAKijD,YAAc,OAAS,MAC5B,CAAC,EACD7mD,YACI,CAACjC,MAAO6F,KAAKG,MAAMhG,OACnB,CAACqB,UAAU,EAAMC,iBAAkB,CAAC,WAExCuE,KAAKo4B,uBACLp4B,KAAKq4B,qBACLr4B,KAAKs4B,gCAGTt4B,KAAKC,SAAS,CAACqrB,UAAU,EAAO3jC,SAAQsnC,YAAa6zB,IACzD,GAGZ,CAEA1qB,uBAAuBl4C,GACnB8f,KAAKg4B,aAAe,KACpBh4B,KAAKC,SACD,CACIqrB,UAAU,EACV2D,YAAa,WACb34B,kBAAmB8F,YACflc,EACA,CACIsc,eAAgB,CAAC,qBACjBC,mBAAoB,CAAC,uBAE3B9C,WAAWrD,oBACjB,KACI0J,KAAKijD,aAAc,EACnBjjD,KAAKmvB,eAAiBvK,YAAW,KAC7B5kB,KAAKC,SAAS,CAACgvB,YAAa6zB,IAA2B,GACxD,IAAK,GAGpB,CAEAzqB,qBAAqBn4C,GACjB8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVqrB,UAAU,EACV2D,YAAa6zB,GACb/qB,eAAgB,oDAAqC73C,EAAKiF,WAElE,CAEAmzC,+BAA+B5uC,GAE3B,GADAsW,KAAKwqB,SAAW,KACD,MAAX9gC,EACAsW,KAAKC,SAAS,CAACqrB,UAAU,EAAOgL,cAAc,QAC3C,CACH,IAAInxC,EAAU,GACC,MAAXuE,IACAvE,EAAU,8BAAyB6a,KAAKijD,YAClC,YAAc,uBAEpBjjD,KAAKqB,oBAETrB,KAAKC,SAAS,CACVqrB,UAAU,EACV2D,YAAa6zB,GACb/qB,eAAgB5yC,GAAW,sFAAkEuE,MAErG,CACJ,CAIAysC,SAASr2B,GAKL,GAJAE,KAAKkjD,eAAiB,IACtBljD,KAAKijD,aAAenjD,EAAMkjD,QAE1BhjD,KAAK5K,QAAU,KACX0K,EAAMkjD,QAAS,CACf,MAAM5oE,EAAS,IAAIC,gBAAgBylB,EAAM7gB,SAASC,QAClD8gB,KAAK5K,QAAUhb,EAAOK,IAAI,WAAaulB,KAAK5K,OAChD,CACJ,CAEAohC,mBAAmB12B,GACf,MAAO,CACHwrB,UAAU,EACVnxB,MAAO,GACP7D,kBAAmB,GACnByhC,eAAgB,GAChBpwC,OAAQ,CACJwS,MAAO,IAEX80B,YAAa6zB,GAErB,CAEA/rB,wBACI/2B,KAAK83B,WAAa93B,KAAK83B,WAAWzT,KAAKrkB,MACvCA,KAAKo4B,uBAAyBp4B,KAAKo4B,uBAAuB/T,KAAKrkB,MAC/DA,KAAKq4B,qBAAuBr4B,KAAKq4B,qBAAqBhU,KAAKrkB,MAC3DA,KAAKs4B,+BAAiCt4B,KAAKs4B,+BAA+BjU,KAAKrkB,KACnF,CAEAo3B,cACI,OAAO1Q,GAAS2B,iBAAiB5qB,IACrC,CAEA65B,eACI,IAAI4sB,EAAQ,CAAC,EAIb,MAHuB,aAAjBlkD,KAAK5K,UACP8uD,EAAe,QAAI,mBAEhBA,CACX,CAEAhtB,cAAc/xC,GACV,MAAO,oEAAqDA,GAChE,CAEAgyC,6BAA6BztC,GACzB,MAAO,2GAAuFA,IAClG,CAMA2X,mBACIrB,KAAK4Y,QAAQvX,iBAAiB,kCAClC,CAEAsiC,WACI,IAAIl6C,GAAU,EACV9B,EAAS,CAAC,EAEd,MAAMwS,EAAQ6F,KAAKG,MAAMhG,MAUzB,OARK9Q,aAAsB8Q,GAGhB1gB,YAAkB0gB,GAAS6F,KAAKkjD,iBACvCv7D,EAAc,MAAI,2CAAiCqY,KAAKkjD,4BACxDz5D,GAAU,IAJV9B,EAAc,MAAI,yBAClB8B,GAAU,GAMP,CAACA,EAAS9B,EACrB,CAIA+vC,eACI,OACI/3B,IAAAU,cAACoQ,EAAW,KACR9Q,IAAAU,cAAA,MAAIkM,UAAU,qBAAoB5M,IAAAU,cAACwQ,IAAI,CAAChnB,GAAG,mCAAkC,cAC7E8V,IAAAU,cAAA,MAAIkM,UAAU,wBAAwBvM,KAAKF,MAAMkjD,QAAU,SAAW,QAAQ,cAG1F,CAEAprB,gBACI,MAAM,kBACFthC,EAAiB,OACjB3O,EAAM,eACNowC,EAAc,YACd9I,EAAW,SACX3D,EAAQ,MACRnxB,GACA6F,KAAKG,MACHgjD,GAAkBx7D,EAAOwS,OAAS,IAAInmB,OAAS,EACrD,OACI2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAE5M,KAAKF,MAAMkjD,QAAU,SAAW,QAAQ,cACnErjD,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,kBAAQi6B,UAAU,mBACpC5M,IAAAU,cAAC20B,GAAa,CACVprB,SAAU0hB,EACVjd,QAAS80C,EACTluB,oBAAqB96B,EACrBgsB,UAAWnmB,KAAKkjD,eAChBp0C,QAAS,CACL0B,QAAS,CAAC,OAAQ,QAClB36B,KAAM,CACF83F,YAAY,EACZn9D,QAAS,CAAC,YAAa,YAE3B2O,KAAM,CAAEwuD,YAAY,IAExBvqB,aAAc,CAAElrC,OAAQ,MACxBkd,qBAAuBD,GAAiBn1B,KAAKyrB,sBAAsB,QAAS0J,KAE/EguB,GAAkBxjD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEH,EAAOwS,SAG/CwF,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACd7a,EAAkBtiB,OAAS,GAAM,IAAI+Q,KAAKuR,GAAmBojD,WAAY,IAAI30D,MAAO20D,WAAc/5C,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,mCAAiCpW,EAAkB,MAErKqJ,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACjI,SAAU0hB,EAAU/Y,MAAI,EAACnD,QAASpP,KAAK83B,YAAa7I,IAErE8I,EAAe/jD,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAASsqB,IAIxE,EAGJ02C,GAAc3nC,YAAcjmC,ECrQ5B,MAAMiiD,GAA4B,yBAGlC,MAAM6rB,WAAwB14C,GAAcp2B,cAAA,SAAA9rB,WAAA,KA6IxC+4C,YAAc,KACV9sB,KAAKqB,kBAAkB,CAC1B,CA3IDu1B,mBAAmB12C,GACf6f,MAAM62B,mBAAmB12C,GAEzB,MAAMka,EAAcgC,YAChBlc,EAAM,CAACub,iBAAkB,CAAC,WAAarB,YAC3C4F,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBxjD,GAAI2C,SAASwqB,KAAKF,MAAM/kB,MAAMX,OAAOvH,IACrCglB,SAAUuC,EAAYvC,SACtBsC,MAAOxe,OAAOS,KAAKge,EAAYD,OAAOnmB,OAAS,EAAIomB,EAAYD,MAAQ,IAE/E,CAEAsxB,sBAAsBpzC,EAAMhG,GACxB2tB,KAAKC,UAASC,IAAS,CACnB,CAAC7nB,GAAOhG,EACRsV,OAAQhM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUvY,OAAQ,CAAC,CAACtP,GAAO,QAE7D,CAEAy/C,aACI93B,KAAKC,SACD,CAACqrB,UAAU,EAAMyM,eAAgB,GAAI9I,YAAa,wBAClD,KACI,MAAOxlC,EAAS9B,GAAUqY,KAAK2jC,WAC/B,GAAIl6C,EAAS,CACT,MAAMopD,EAAM7yC,KAAKF,MAAM/kB,MAAMX,OAAOvH,GAEpCmtB,KAAKwqB,SAAWpmB,EACZsiB,GAASyB,2BAA2B5hB,OAAOssC,GAC3C,MACA,CAAC,EACDz2C,YACI,CAACvpB,GAAIggE,EAAK14C,MAAO6F,KAAKG,MAAMhG,OAC5B,CAACqB,UAAU,EAAMC,iBAAkB,CAAC,WAExCuE,KAAKo4B,uBACLp4B,KAAKq4B,qBACLr4B,KAAKs4B,+BAEb,MACIt4B,KAAKC,SAAS,CAACqrB,UAAU,EAAO3jC,SAAQsnC,YAAa6zB,IACzD,GAGZ,CAEA1qB,uBAAuBl4C,GACnB8f,KAAKg4B,aAAe,KACpBh4B,KAAKC,SACD,CACIqrB,UAAU,EACV2D,YAAa,aAEjB,KACIjvB,KAAKmvB,eAAiBvK,YAAW,KAC7B5kB,KAAKC,SAAS,CAACgvB,YAAa6zB,IAA2B,GACxD,IAAK,GAGpB,CAEAzqB,qBAAqBn4C,GACjB8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVqrB,UAAU,EACV2D,YAAa6zB,GACb/qB,eAAgB,gEAAyC73C,EAAKiF,WAEtE,CAEAmzC,+BAA+B5uC,GAE3B,GADAsW,KAAKwqB,SAAW,KACD,MAAX9gC,EACAsW,KAAKC,SAAS,CAACqrB,UAAU,EAAOgL,cAAc,QAC3C,CACH,IAAInxC,EAAU,GACC,MAAXuE,IACAvE,EAAU,6DAEV6a,KAAKqB,oBAETrB,KAAKC,SAAS,CACVqrB,UAAU,EACV2D,YAAa6zB,GACb/qB,eAAgB5yC,GAAW,kGAAsEuE,MAEzG,CACJ,CAIAysC,SAASr2B,GACLE,KAAKkjD,eAAiB,GAC1B,CAEA1sB,mBAAmB12B,GACf,MAAO,CACHitE,WAAW,EACXzhD,UAAU,EACVz4C,GAAI,GACJglB,SAAU,GACVsC,MAAO,GACPxS,OAAQ,CACJwS,MAAO,IAEX80B,YAAa6zB,GACb/qB,eAAgB,GAExB,CAEAhB,wBACI/2B,KAAK83B,WAAa93B,KAAK83B,WAAWzT,KAAKrkB,MACvCA,KAAK83B,WAAa93B,KAAK83B,WAAWzT,KAAKrkB,MACvCA,KAAKo4B,uBAAyBp4B,KAAKo4B,uBAAuB/T,KAAKrkB,MAC/DA,KAAKq4B,qBAAuBr4B,KAAKq4B,qBAAqBhU,KAAKrkB,MAC3DA,KAAKs4B,+BAAiCt4B,KAAKs4B,+BAA+BjU,KAAKrkB,KACnF,CAEAo3B,cACI,OAAO1Q,GAASyB,2BAA2B5hB,OACvCvG,KAAKF,MAAM/kB,MAAMX,OAAOvH,GAChC,CAEA8wD,WACI,IAAIl6C,GAAU,EACV9B,EAAS,CAAC,EAQd,OALIlO,YAAkBumB,KAAKG,MAAMhG,OAAS6F,KAAKkjD,iBAC3Cv7D,EAAc,MAAI,2CAAiCqY,KAAKkjD,4BACxDz5D,GAAU,GAGP,CAACA,EAAS9B,EACrB,CAMA0Z,mBACIrB,KAAK4Y,QAAQvX,iBAAiB,kCAClC,CAIAq2B,eACI,OACI/3B,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACoQ,EAAW,KACR9Q,IAAAU,cAAA,MAAIkM,UAAU,qBAAoB5M,IAAAU,cAACwQ,IAAI,CAAChnB,GAAG,sCAAqC,0BAChF8V,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,UAAQvM,KAAKG,MAAMtI,WAE5D8H,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,WAAS5M,KAAKG,MAAMtI,UAG1D,CAEA+/B,gBACI,MAAM,OACFjwC,EAAM,eACNowC,EAAc,GACdllD,EAAE,SACFglB,EAAQ,UACRk1E,EAAS,YACT99C,EAAW,SACX3D,EAAQ,MACRnxB,GACA6F,KAAKG,MACHgjD,GAAkBx7D,EAAOwS,OAAS,IAAInmB,OAAS,EACrD,OACI2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,mBACjB5M,IAAAU,cAAC20B,GAAa,CACVprB,SAAU0hB,EACVjd,QAAS80C,EACTluB,oBAAqB96B,EACrBipD,aAAc,CAAElrC,OAAQ,MACxBiO,UAAWnmB,KAAKkjD,eAChB7tB,iBAAiB,gCACjBvmB,QAAS,CACL0B,QAAS,CAAC,SAAU,OAAQ,aAC5Bk9D,OAAQ,CACJC,YAAY,EACZn9D,QAAS,CAAC,OAAQ,WAEtB36B,KAAM,CACF83F,YAAY,EACZn9D,QAAS,CAAC,YAAa,YAE3BovC,UAAW,CACP+tB,YAAY,EACZn9D,QAAS,CAAC,gBAGlB4kB,qBAAuBD,GAAiBn1B,KAAKyrB,sBAAsB,QAAS0J,KAE/EguB,GAAkBxjD,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEH,EAAOwS,OACvCwF,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACwR,EAAY,CAACjI,SAAU0hB,EAAU9hB,SAAO,EAAC4F,QAASA,IAAMpP,KAAKC,SAAS,CAAC8sE,WAAW,KAAQ,2BAC3FptE,IAAAU,cAACwR,EAAY,CAACjI,SAAU0hB,EAAU/Y,MAAI,EAACnD,QAASpP,KAAK83B,YAAa7I,IAErE8I,EAAe/jD,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAASsqB,IAE3Dg1C,GACGptE,IAAAU,cAACgrE,GAAY,CACT3xF,QAAS,CAAC7G,KAAIglB,WAAUsC,SACxBvG,OAAO,WACP03E,aAAcA,IAAMtrE,KAAKC,SAAS,CAAC8sE,WAAW,MAKlE,EAGJ4B,GAAgB7nC,YAAcjmC,EC9N9B,MAAM+tE,WAAkB34C,GAAcp2B,cAAA,SAAA9rB,WAAA,KA4DlC+4C,YAAc,KACV9sB,KAAK4Y,QAAQvX,iBAAiB,aAAa,CAC9C,CA1DDu1B,mBAAmB12C,GACf6f,MAAM62B,mBAAmB12C,GAEzB,MAAMsX,EAAY4E,YACdlc,EACA,CACIub,iBAAkB,CAAC,SACnBe,eAAgB,CAAC,oBAAqB,gBACtCC,mBAAoB,CAAC,oBAAqB,kBAEhDjF,UACGA,EAGDwI,KAAKC,SACD,CACIo2B,gBAAgB,EAChB7+B,YACAuqD,UAAW/+D,YAAmBwU,KAElC,IAAMwI,KAAK6uE,sBAAsBr3E,KARrCwI,KAAKC,SAAS,CAACo2B,gBAAgB,EAAOC,cAAc,GAW5D,CAIAE,mBAAmB12B,GACf,MAAO,CAACtI,UAAW,CAAC,EAAGuqD,UAAW,CAAC,EACvC,CAEA3qB,cACI,OAAO1Q,GAASqB,uBAAuBxhB,OACnCvG,KAAKF,MAAM/kB,MAAMX,OAAOvH,GAChC,CAEAykD,eACI,MAAO,CAAC1e,QAAS,cACrB,CAEAse,cAAc/xC,GACV,MAAO,mDAAoCA,GAC/C,CAEAgyC,6BAA6BztC,GACzB,MAAO,0FAAsEA,IACjF,CAEAmlF,sBAAsBr3E,GAElB,MAAMlL,EAAY0T,KAAKF,MAAM/kB,MAAMX,OAC/Bod,EAAU1D,OAASxH,EAAUwH,MAC7BkM,KAAKF,MAAM+tB,QAAQ1vC,KAAK,mCAAmCmO,EAAUzZ,MAAM2kB,EAAU1D,OAE7F,CAQA4jC,eACI,OACI/3B,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACoQ,EAAW,KACR9Q,IAAAU,cAAA,MAAIkM,UAAU,qBAAoB5M,IAAAU,cAACwQ,IAAI,CACnChnB,GAAG,mCAAkC,eAEzC8V,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,iCAGzC5M,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,iCACT5M,KAAKG,MAAM3I,UAAUK,UAGlD,CAEA+/B,gBACI,MAAMpgC,EAAYwI,KAAKG,MAAM3I,UAC7B,OACImI,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,sCACjB5M,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC0I,UAAQ,EAChB9C,QAASA,IAAMpP,KAAKF,MAAM+tB,QAAQ1vC,KAAK,mCAAmC6hB,KAAKF,MAAM/kB,MAAMX,OAAOvH,MAAM2kB,EAAU1D,gBAAgB,qBAGpJ6L,IAAAU,cAACyQ,EAAU,CAACQ,OAAK,EAACnD,WAAS,EAACuD,QAAM,GAC9B/R,IAAAU,cAAA,WACIkM,UAAU,qDACV5M,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,oBAClBqtB,IAAAU,cAACgM,EAAI,KAAE7U,EAAUK,WAErB8H,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,mBAClBqtB,IAAAU,cAACi/C,GAAiB,CAAC5lE,QAAS8d,EAAU2C,SAE1CwF,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACgM,EAAI,KAAE7U,EAAU1D,QAGzB6L,IAAAU,cAAA,SACIkM,UAAU,sDACV5M,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,WACjBklB,EAAU5B,WACP+J,IAAAU,cAACmP,IAAI,CAACC,KAAK,eACL53B,MAAO,CAACwzB,MAAO9B,EAAOE,WACtB/U,MAAM,MAAM,cAAY,SAE9BiL,IAAAU,cAACmP,IAAI,CAACC,KAAK,SACL53B,MAAO,CAACwzB,MAAO9B,EAAOmB,iBACtBhW,MAAM,MAAM,cAAY,UAGtCiL,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,4BACjBklB,EAAUtB,cACPyJ,IAAAU,cAACmP,IAAI,CAACC,KAAK,eACL53B,MAAO,CAACwzB,MAAO9B,EAAOE,WACtB/U,MAAM,MAAM,cAAY,SAE9BiL,IAAAU,cAACmP,IAAI,CAACC,KAAK,SACL53B,MAAO,CAACwzB,MAAO9B,EAAOmB,iBACtBhW,MAAM,MAAM,cAAY,WAI1CiL,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,gBACiB,IAAlCklB,EAAUjB,aAAaviB,OACpB2rB,IAAAU,cAACmP,IAAI,CAACC,KAAK,eACL53B,MAAO,CAACwzB,MAAO9B,EAAOE,WACtB/U,MAAM,MAAM,cAAY,SAE9BiL,IAAAU,cAACmP,IAAI,CAACC,KAAK,SACL53B,MAAO,CAACwzB,MAAO9B,EAAOmB,iBACtBhW,MAAM,MAAM,cAAY,UAGtCiL,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,2BAClBqtB,IAAAU,cAACgM,EAAI,KAAE7U,EAAUjB,cAAgB,OAGzCoJ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,sBAClBqtB,IAAAU,cAACgM,EAAI,KAAE7U,EAAUlB,uBAKjCqJ,IAAAU,cAACqhB,GAAc1hB,KAAKG,MAAM4hD,WAGtC,EAGJ6sB,GAAU9nC,YAAcjmC,EC7JxB,MAAMiuE,WAAmB74C,GAAcp2B,cAAA,SAAA9rB,WAAA,KAsCnC+4C,YAAc,KACV9sB,KAAK4Y,QAAQvX,iBAAiB,aAAa,CAC9C,CApCDu1B,mBAAmB12C,GACf6f,MAAM62B,mBAAmB12C,GAEzB8f,KAAKC,SAAS,CACVo2B,gBAAgB,EAChB5+B,WAAY2E,YACRlc,EACA,CACIub,iBAAkB,CAAC,SACnBe,eAAgB,CAAC,qBACjBC,mBAAoB,CAAC,uBAE3BhF,YAEV,CAIA++B,mBAAmB12B,GACf,MAAO,CAACrI,WAAY,GACxB,CAEA2/B,cACI,OAAO1Q,GAASoB,gBAAgBrqB,IACpC,CAEAy5B,cAAc/xC,GACV,MAAO,uDAAqCA,GAChD,CAEAgyC,6BAA6BztC,GACzB,MAAO,8FAAuEA,IAClF,CAQAguC,eACI,OACI/3B,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACoQ,EAAW,KACR9Q,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,eAEzC5M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAAC8C,gBAAc,GAChCtR,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,cAC1BjN,IAAAU,cAACwR,EAAY,CAACC,KAAG,EAAC1C,QAASA,IAAMpP,KAAKF,MAAM+tB,QAAQ1vC,KAAK,yCAAyC,oBAIlH,CAEAy5C,gBACI,IAAK53B,KAAKG,MAAM1I,WAAWzjB,OACvB,OAAO2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAQ,+CAKpC,OACI9N,IAAAU,cAACq0B,KAAS,CAACnoB,UAAU,SACjB5M,IAAAU,cAACs0B,KAAgB,KACbh1B,IAAAU,cAAC00B,KAAa,KACT/0B,KAAKG,MAAM1I,WAAW1X,MAP1BA,CAACgvF,EAAIC,IACPD,EAAGl8F,GAAKm8F,EAAGn8F,IAAM,EAAI,IAMkBV,KAAI2yB,GAClCnF,IAAAU,cAACkwB,KAAY,CAAC90C,IAAKqpB,EAAEjyB,IACjB8sB,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAACgM,EAAI,KAAEvH,EAAEjN,UACT8H,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,WACjBwyB,EAAElP,WACC+J,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAK,eAAe53B,MAAO,CAAEwzB,MAAO9B,EAAOE,WAAa/U,MAAM,QAEvFiL,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAK,SAAS53B,MAAO,CAAEwzB,MAAO9B,EAAOmB,iBAAmBhW,MAAM,SAG/FiL,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,4BACjBwyB,EAAE5O,cACCyJ,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAK,eAAe53B,MAAO,CAAEwzB,MAAO9B,EAAOE,WAAa/U,MAAM,QAEvFiL,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAK,SAAS53B,MAAO,CAAEwzB,MAAO9B,EAAOmB,iBAAmBhW,MAAM,SAG/FiL,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,sBACjBwyB,EAAExO,mBAAqB,OAIpCqJ,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAACwR,EAAY,CAACG,MAAI,EAAC5C,QAASA,IAAMpP,KAAKF,MAAM+tB,QAAQ1vC,KAAK,mCAAmC2mB,EAAEjyB,MAAMiyB,EAAEhR,gBAAgB,UACvH6L,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC4F,QAASA,IAAMpP,KAAKF,MAAM+tB,QAAQ1vC,KAAK,mCAAmC2mB,EAAEjyB,MAAMiyB,EAAEhR,SAAS,2BAQnJ,EAGJg7E,GAAWhoC,YAAcjmC,ECzHzB,MAAMouE,WAAuBL,GAAU/uE,cAAA,SAAA9rB,WAAA,KAoBnC+4C,YAAc,MAAQ,CAhBtBsK,cACI,MAAO,mBAAmBp3B,KAAKF,MAAM/kB,MAAMX,OAAOvH,IACtD,CAEAykD,eACI,MAAO,CAAC,CACZ,CAEAu3C,sBAAsBr3E,GAElB,MAAMlL,EAAY0T,KAAKF,MAAM/kB,MAAMX,OAC/Bod,EAAU1D,OAASxH,EAAUwH,MAC7BkM,KAAKF,MAAM+tB,QAAQ1vC,KAAK,eAAemO,EAAUzZ,MAAM2kB,EAAU1D,OAEzE,CAMA4jC,eACI,OACI/3B,IAAAU,cAACoQ,EAAW,CAACC,SAAO,GAChB/Q,IAAAU,cAAA,MAAIkM,UAAU,qBAAoB5M,IAAAU,cAACwQ,IAAI,CAAChnB,GAAG,eAAc,eACzD8V,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,gCAGjD,CAEAqrB,gBACIvjD,SAASqgB,MAAQ,yCACjB,MAAM8C,EAAYwI,KAAKG,MAAM3I,UAC7B,OACImI,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,cAAY5M,KAAKG,MAAM3I,UAAUK,SAAS,KACpE8H,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,sBAClBqtB,IAAAU,cAACgM,EAAI,KAAE7U,EAAUlB,oBAEpBtf,YAAWwgB,EAAUjB,eAClBoJ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,2BAClBqtB,IAAAU,cAACgM,EAAI,KAAE7U,EAAUjB,gBAI7BoJ,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,mBAClBqtB,IAAAU,cAACi/C,GAAiB,CAAC5lE,QAAS8d,EAAU2C,UAK1D,ECrDJ,MAAM+0E,WAAwBJ,GAI1B13C,cACI,MAAO,iBACX,CAIAM,eACI,OACI/3B,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACoQ,EAAW,CAACC,SAAO,GAChB/Q,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,eAEzC5M,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,wBAGtC,CAEAgrB,gBAEI,GADJvjD,SAASqgB,MAAQ,2CACRsL,KAAKG,MAAM1I,WAAWzjB,OACvB,OAAO2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAQ,wBAKpC,OACI9N,IAAAU,cAACkyB,GAAW,CAACxB,gBAAiB,CAAC,qBAAsB,6BAAoBpxB,IAAAU,cAAA,QAAMkM,UAAU,WAAU,uBAC9FvM,KAAKG,MAAM1I,WAAWpX,QACnBykB,IAAsB,IAAjBA,EAAElP,cAAyBkP,EAAEvO,aAAaviB,QAAU8wB,EAAEvO,cAAgBngB,YAAa,IAAI2O,SAC9FhF,MAPGA,CAACgvF,EAAIC,IACPD,EAAGz4E,kBAAoB04E,EAAG14E,mBAAqB,EAAI,IAMzCnkB,KAAI2yB,GACbnF,IAAAU,cAACkwB,KAAY,CAAC90C,IAAKqpB,EAAEjyB,IACjB8sB,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAACgM,EAAI,KAAEvH,EAAExO,oBAEbqJ,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAACgM,EAAI,KAAEvH,EAAEjN,WAEb8H,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAACwR,EAAY,CAAC/E,IAAK+D,IAAMhnB,GAAI,eAAeib,EAAEjyB,MAAMiyB,EAAEhR,OAAQ0V,SAAO,EAAC0I,UAAQ,GAAC,oBAClEvS,IAAAU,cAAA,QAAMkM,UAAU,WAAU,oBAQ/D,EC/DW,WAA0B,wCCA1B,OAA0B,0CCA1B,OAA0B,wDCMzC4iE,KAAKC,SAAS,CAAEC,OAAQ,SAAUC,MAAO,CACrC,CAAE3hE,IAAK4hE,IACP,CAAE5hE,IAAK6hE,GAAct7C,UAAW,UAChC,CAAEvmB,IAAK8hE,GAAY5jE,WAAY,QAGnCsjE,KAAKO,6BAA4BC,IAG7B,IAAI/N,EAAQ,GAEZ,GAAI+N,EAAK37F,QAAU27F,EAAK37F,OAHH,GAIjB4tF,EAAQ,CAAC+N,QAET,IAAK,IAAI76F,EAAI,EAAGA,EAAI66F,EAAK37F,OAAQc,GANhB,GAOb8sF,EAAMzjF,KAAKwxF,EAAK/wF,MAAM9J,EAAGA,EAPZ,KAWrB,OAAO8sF,CAAK,IAIhB,MAAMgO,GAAYp8C,KAAWC,OAAO,CAChCo8C,sBAAuB,CACnBjG,QAAS,GACTr+D,SAAU,GACVkS,WAAY,IACZqyD,WAAY,UAEhB58C,mBAAoB,CAChB3S,QAAS,OACTC,cAAe,MACfuvD,SAAU,QAEdC,YAAa,CACT1sC,MAAO,KAEX2sC,qBAAsB,CAClBt8C,gBAAiB,EACjBD,kBAAmB,GACnBkvB,eAAgB,GAChBknB,WAAY,GACZoG,gBAAiB,EACjBC,gBAAiB,WAErBC,2BAA4B,CACxBxG,QAAS,GACTr8D,aAAc,GACdzB,YAAa,EACbukE,YAAa,SACbC,YAAa,WAEjBC,6BAA8B,CAC1B38C,cAAe,EACfrmB,aAAc,GACdumB,kBAAmB,EACnBC,kBAAmB,WAEvBy8C,eAAgB,CACZ5G,QAAS,EACTr8D,aAAc,GACdzB,YAAa,EACbokE,gBAAiB,EACjBI,YAAa,WAEjBG,gBAAiB,CACbnjE,UAAW,GACXC,aAAc,EACdhC,SAAU,GACVM,WAAY,KAEhB6kE,mBAAoB,CAChBplE,SAAU,MACViC,aAAc,IAElBojE,WAAY,CACRrjE,UAAW,EACXC,aAAc,EACdhC,SAAU,GACVM,WAAY,IACZR,MAAO,WAEXulE,iBAAkB,CACdrlE,SAAU,GACV+B,UAAW,IAEfujE,cAAe,CACXhlE,WAAY,KAEhBunB,cAAe,CACX7lB,aAAc,EACdhC,SAAU,GACV2oB,UAAW,SACX7oB,MAAO,WAEXylE,WAAY,CACRzlE,MAAO,WAEX0lE,WAAY,CACRxlE,SAAU,IAEdylE,kBAAmB,CACfpH,QAAS,EACTjnB,YAAa,GACbp1C,aAAc,GACdhC,SAAU,GACVM,WAAY,IACZykE,YAAa,UACbJ,gBAAiB,KC3GnBe,GAAuBnxE,GAErBH,IAAAU,cAAC6wE,KAAQ,KACLvxE,IAAAU,cAAC8wE,KAAI,CAAC/gE,KAAK,KAAKv4B,MAAO+3F,GAAUC,sBAAuBuB,MAAI,GACxDzxE,IAAAU,cAAC4yB,GAAS,CAACv+B,MAAOoL,EAAMpL,QACvBoL,EAAM43B,cAAgB53B,EAAM43B,eAC7B/3B,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO+3F,GAAUW,8BACnB5wE,IAAAU,cAACgiD,GAAU,CAAC3oE,QAASomB,EAAMpmB,WAE9BomB,EAAMuxE,cAAgBvxE,EAAMuxE,iBCQ7C,MAAMC,WAAcr7C,GAAcp2B,cAAA,SAAA9rB,WAAA,KAmD9Bw9F,gBAAkB,KACd,MAAMt4E,EAAQ+G,KAAKG,MAAMlH,MACzB+G,KAAKC,SACD,CAACkT,eAAe,IAChB,KACI,IAAIq+D,EACAC,EAAa,MACbx4E,EAAM8yE,UACNyF,EAAgB,iCAAwBv4E,EAAMW,kBAA4BX,EAAMW,kBAAkB/B,SAAhC,SAE9DoB,EAAMpC,QACN46E,EAAa9+F,IAAYsmB,EAAMpC,OAAOvkB,OAASm/F,GAEnDD,EAAgB,UAAUC,KAE9Bj1F,YACImjB,IAAAU,cAAC4wE,GAAmB,CAChBv3F,QAASuf,EAAMkB,MACfu9B,aAAcA,IACV/3B,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACqxE,KAAO,CAAC75F,MAAO,CAACuzB,GAAOumE,eAAgBvmE,GAAOwmE,0BAC1CJ,GAEL7xE,IAAAU,cAACqxE,KAAO,CAAC75F,MAAOuzB,GAAOumE,gBAAgB,eAAQ14E,EAAMpB,aAIjE,YACAmI,KAAK6xE,mBACR,GAER,EACJ,KAgCDA,mBAAqB,KACjB7xE,KAAKC,SAAS,CAACkT,eAAe,GAAO,EACxC,KAED2Z,YAAc,KACV9sB,KAAK4Y,QAAQvX,iBAAiB,OAAO,CACxC,CArHD8X,oBACIpZ,MAAMoZ,oBAEN//B,OAAO04F,WAAa,KAChB9xE,KAAK8qE,cAAc,CAE3B,CAEAtmD,uBACIprC,OAAO04F,WAAa,MACxB,CAIAl7C,mBAAmB12C,GACf6f,MAAM62B,mBAAmB12C,GAEzB,MAAM+Y,EAAQmD,YACVlc,EACA,CACIub,iBAAkB,CAAC,SACnBe,eAAgB,CAAC,qBACjBC,mBAAoB,CAAC,uBAE3BxD,MACF+G,KAAKC,SACD,CACIo2B,gBAAgB,EAChBp9B,MAAOtd,OAAOwE,OAAO8Y,EAAO,CAAC8yE,UAAW9yE,EAAM9R,MAAQpU,MACtDgvE,UAAW/+D,YAAmBiW,KAElC,IAAM+G,KAAK6uE,sBAAsB51E,IAEzC,CAEA6xE,eACI9qE,KAAKC,SACD,CAACo2B,gBAAgB,IACjB,KAAOr2B,KAAKi3B,kBAAkB,GAEtC,CAEA86C,kBAAkBC,EAAOC,GACrBjyE,KAAKF,MAAM+tB,QAAQ1vC,KAAK,8BAA8B6zF,KAASC,KAC/DjyE,KAAK8qE,cACT,CAsCAt0C,mBAAmB12B,GACf,MAAO,CACH7G,MAAO,CAAC,EACRka,eAAe,EACf4uC,UAAW,CAAC,EAEpB,CAEA3qB,cACI,OAAO1Q,GAASkB,iBAAiBrhB,OAAOvG,KAAKF,MAAM/kB,MAAMX,OAAOvH,GACpE,CAEAqkD,cAAc/xC,GACV,MAAO,+CAAgCA,GAC3C,CAEAgyC,6BAA6BztC,GACzB,MAAO,sFAAkEA,IAC7E,CAEAmlF,sBAAsB51E,GAElB,MAAM3M,EAAY0T,KAAKF,MAAM/kB,MAAMX,OAC/B6e,EAAMnF,OAASxH,EAAUwH,MACzBkM,KAAKF,MAAM+tB,QAAQ1vC,KAAK,8BAA8BmO,EAAUzZ,MAAMomB,EAAMnF,OAEpF,CAYA4jC,eACI,OACI/3B,IAAAU,cAACoQ,EAAW,KACR9Q,IAAAU,cAAA,MAAIkM,UAAU,qBAAoB5M,IAAAU,cAACwQ,IAAI,CAAChnB,GAAG,8BAA6B,UACxE8V,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,qBAGjD,CAEAqrB,gBACI,MAAM3+B,EAAQ+G,KAAKG,MAAMlH,OACnB,GACFpmB,EAAE,SACFglB,EAAQ,kBACR+B,EAAiB,KACjB9F,EAAI,UACJi4E,GACA9yE,EAEJ,IAAIw4E,EAAa,MAKjB,OAJKx4E,EAAM8yE,WAAa9yE,EAAMpC,QAC1B46E,EAAa9+F,IAAYsmB,EAAMpC,OAAOvkB,OAASm/F,GAI/C9xE,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAAC6S,EAAe,CACZC,cAAenT,KAAKG,MAAMgT,cAC1B/D,QAASpP,KAAKuxE,mBAEtB5xE,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAE/U,GAC3B8H,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,sCACjB5M,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC0I,UAAQ,EAAC9C,QAASA,IAAMpP,KAAKF,MAAM+tB,QAAQ1vC,KAAK,8BAA8BtL,KAAMihB,aAAgB,iBAE9H6L,IAAAU,cAACyQ,EAAU,CAACQ,OAAK,EAACnD,WAAS,EAACuD,QAAM,GAC9B/R,IAAAU,cAAA,WAASkM,UAAU,qDACf5M,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,cAClBqtB,IAAAU,cAACgM,EAAI,KAAE0/D,EAAY,YAAW,aAElCpsE,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,oBAClBqtB,IAAAU,cAACgM,EAAI,KAAExU,IAEX8H,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,mBAClBqtB,IAAAU,cAACi/C,GAAiB,CAAC5lE,QAASuf,EAAMkB,UAG1CwF,IAAAU,cAAA,SAAOkM,UAAU,sDACb5M,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,sBAClBqtB,IAAAU,cAACgM,EAAI,KAAEpT,EAAM3C,oBAEjBqJ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACgM,EAAI,KAAEvY,IAEVi4E,GACGpsE,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,gCAChBsnB,EACE+F,IAAAU,cAAA,UAAQ5kB,IAAKme,EAAkB/mB,GAAIu8B,QAASA,IAAMpP,KAAK+xE,kBAAkBn4E,EAAkB/mB,GAAI+mB,EAAkB9F,MAAOyY,UAAU,aAC9H5M,IAAAU,cAACmP,IAAI,CAACC,KAAK,cAAc,cAAY,OAAOlD,UAAU,yBAA0B3S,EAAkB/B,UAFpF8H,IAAAU,cAACgM,EAAI,KAAC,QAMhC1M,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,kBACjB2mB,EAAMG,UAAUplB,OAAS,EAAIilB,EAAMG,UAAUjnB,KAAI+J,GAC9CyjB,IAAAU,cAAA,UAAQ5kB,IAAKS,EAAErJ,GAAIu8B,QAASA,IAAMpP,KAAK+xE,kBAAkB71F,EAAErJ,GAAIqJ,EAAE4X,MAAOyY,UAAU,aAC9E5M,IAAAU,cAACmP,IAAI,CAACC,KAAK,cAAc,cAAY,OAAOlD,UAAU,yBAA0BrwB,EAAE2b,YAErF8H,IAAAU,cAACgM,EAAI,KAAC,UAIrB0/D,GACEpsE,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,SAClBqtB,IAAAU,cAACgM,EAAI,KAAEolE,IAGf9xE,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,MAClBqtB,IAAAU,cAACgM,EAAI,KAAEx5B,OAKvB8sB,IAAAU,cAACqhB,GAAc1hB,KAAKG,MAAM4hD,WAGtC,EAGJ,MAAM32C,GAASooB,KAAWC,OAAO,CAC7Bk+C,eAAgB,CACZl0D,WAAY,IACZlQ,aAAc,EACdhC,SAAU,GACVM,WAAY,QAEhB+lE,wBAAyB,CACrBrmE,SAAU,MAIlB+lE,GAAMxqC,YAAcjmC,E,mCC/OpB,MAAMqxE,WAAkBj8C,GAIpB9c,oBACQnZ,KAAKF,MAAMisE,UACX/rE,KAAKi3B,mBAELj3B,KAAKC,SAAS,CAACo2B,gBAAgB,GAEvC,CAIAO,mBAAmB12C,GACf6f,MAAM62B,mBAAmB12C,GACzB8f,KAAKC,SAAS,CACVo2B,gBAAgB,KACbj6B,YAAoBlc,GAAM+Y,OAErC,CAEAk5E,oBACInyE,KAAKC,SAAS,CAACwjE,YAAY,IAC3BzjE,KAAKwqB,SAAWpmB,EACZsiB,GAASkB,iBAAiBrhB,OAAOvG,KAAKF,MAAM7G,MAAMpmB,IAClD,SACA,CAAC,EACD,CAAC,EACDmtB,KAAKmkE,yBACLnkE,KAAKokE,uBACLpkE,KAAKqkE,iCAEb,CAEAF,yBAAyBjkF,GACrB8f,KAAKg4B,aAAe,KACpBh4B,KAAKF,MAAMsyE,YAAYpyE,KAAKF,MAAM7G,MAAMpmB,GAC5C,CAEAuxF,uBAAuBlkF,GACnB8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVwjE,YAAY,EACZ4O,iBAAkB,oDAAgCnyF,EAAKiF,WAE/D,CAEAk/E,iCAAiC36E,GAC7BsW,KAAKwqB,SAAW,KAChB,IAAIrlC,EAAU,GACC,MAAXuE,IACAvE,EAAU,8CAEV6a,KAAK4Y,QAAQvX,iBAAiB,SAElCrB,KAAKC,SAAS,CACVwjE,YAAY,EACZ4O,iBAAkBltF,GAAW,oFAAgEuE,MAErG,CAIA8sC,mBAAmB12B,GACf,MAAO,CACH2jE,YAAY,EACZ4O,iBAAkB,GAClBpG,MAAM,EACNr1E,OAAQ,GACRyC,qBAAsB,GAE9B,CAEA09B,wBACI/2B,KAAKmyE,kBAAoBnyE,KAAKmyE,kBAAkB9tD,KAAKrkB,MACrDA,KAAKmkE,yBAA2BnkE,KAAKmkE,yBAAyB9/C,KAAKrkB,MACnEA,KAAKokE,uBAAyBpkE,KAAKokE,uBAAuB//C,KAAKrkB,MAC/DA,KAAKqkE,iCAAmCrkE,KAAKqkE,iCAAiChgD,KAAKrkB,KACvF,CAEAo3B,cACI,MAAO,aAAap3B,KAAKF,MAAM7G,MAAMpmB,YACzC,CAEAqkD,cAAc/xC,GACV,MAAO,sDAAuCA,GAClD,CAEAgyC,6BAA6BztC,GACzB,MAAO,6FAAyEA,IACpF,CAIA0W,SACI,IAAI1mB,EAAU,KACVkU,EAAW,KACf,GAAIoS,KAAKG,MAAMk2B,eACX38C,EAAUimB,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAAC4Q,SAAS,KAAI,oCAC/B,CACH,MAAMrkB,EAAQ+G,KAAKF,MAAM7G,MACrB+G,KAAKF,MAAMisE,UACP/rE,KAAKG,MAAM8rE,MACXr+E,EAAW+R,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,UAAS,2CAA0BxU,EAAMpB,SAAS,uDAC9Ene,EAAUsmB,KAAKsyE,yBAAyB1kF,IACjCoS,KAAKG,MAAMvJ,OAAO5iB,QAAUgsB,KAAKG,MAAM9G,qBAAqBrlB,QACnE4Z,EAAWoS,KAAKuyE,kBAChB74F,EAAUsmB,KAAKsyE,yBAAyB1kF,IAExClU,EAAUsmB,KAAKwyE,qBAGdv5E,EAAMpC,OAGPjJ,EAAW+R,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,UAAS,WAASxU,EAAMpB,SAAS,+EAA0DoB,EAAMpC,MAAgBlkB,IAAYsmB,EAAMpC,OAAOvkB,MAAjC,MAAuC,qEAC5KoH,EAAUsmB,KAAKsyE,yBAAyB1kF,IAHxClU,EAAUsmB,KAAKwyE,oBAM3B,CAEA,OACI7yE,IAAAU,cAACoc,GAAY,CACT9M,QAAS3P,KAAKF,MAAM2yE,uBAEnB/4F,EAGb,CAEA44F,yBAAyB1kF,GACrB,OACI+R,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,MAAIxtB,GAAG,eAAe+a,GACtB+R,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKF,MAAM2yE,sBAAuBjpE,SAAO,GAAC,OAIjF,CAEA+oE,kBACI,OACI5yE,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,UAAS,2CAA0BzN,KAAKF,MAAM7G,MAAMpB,SAAS,gEAC7EmI,KAAKG,MAAMvJ,OAAO5iB,OAAS,GAAKgsB,KAAK65B,WAAW,8DAAkD75B,KAAKG,MAAMvJ,QAC7GoJ,KAAKG,MAAM9G,qBAAqBrlB,OAAS,GAAKgsB,KAAK65B,WAAW,4CAAqC75B,KAAKG,MAAM9G,sBAG3H,CAEAwgC,WAAW4K,EAAQjW,GACf,OACI7uB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,KAAEo4B,GACP9kC,IAAAU,cAAA,UACKmuB,EAAQr8C,KAAIoD,GACToqB,IAAAU,cAAA,MAAI5kB,IAAKlG,EAAE1C,IAAI8sB,IAAAU,cAACwQ,IAAI,CAAChnB,GAAI,8BAA8BtU,EAAE1C,MAAM0C,EAAEue,OAAQyY,UAAU,aAAY5M,IAAAU,cAACmP,IAAI,CAACC,KAAK,cAAc,cAAY,OAAOlD,UAAU,yBAA0Bh3B,EAAEsiB,cAKrM,CAEA26E,qBACI,MAAM,iBACFH,EAAgB,WAChB5O,GACAzjE,KAAKG,MACT,OACIR,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,MAAIxtB,GAAG,eAAc,+CAAmCmtB,KAAKF,MAAM7G,MAAMpB,SAAS,MAClF8H,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACjI,SAAU65D,EAAYr0D,QAASpP,KAAKF,MAAM2yE,sBAAuB1gE,QAAM,GAAC,8BACtFpS,IAAAU,cAACwR,EAAY,CAACjI,SAAU65D,EAAYr0D,QAASpP,KAAKmyE,kBAAmB9/D,QAAM,GAAC,oBAE/EggE,EAAiBr+F,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAS4kE,GAGtE,EAGJH,GAAUprC,YAAcjmC,ECzKxB,MAAM6xE,WAAez8C,GAAcp2B,cAAA,SAAA9rB,WAAA,KA0E/B+4C,YAAc,KACV9sB,KAAK4Y,QAAQvX,iBAAiB,OAAO,CACxC,CAxEDu1B,mBAAmB12C,GACf6f,MAAM62B,mBAAmB12C,GACzB8f,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBjM,WAAY,GACZlxB,OAAQkD,YACJlc,EAAM,CAACub,iBAAkB,CAAC,WAAavC,QAEnD,CAEAy5E,sBAAsB5G,GAClB/rE,KAAKC,SACD,CACIo2B,gBAAgB,EAChB01C,YACA7yE,OAAQ,KAEZ,KACI8G,KAAKF,MAAM+tB,QAAQ1vC,KAAK,+BAA2C,IAAd4tF,EAAsB,gBAAkB,KAC7F/rE,KAAKi3B,kBAAkB,GAGnC,CAEAk7C,kBAAkBt/B,GACd7yC,KAAKC,UAASC,IACH,CACH0yE,iBAAkB,KAClB15E,OAAQgH,EAAUhH,OAAO7Y,QAAOnE,GAAKA,EAAErJ,KAAOggE,OAG1D,CAIArc,mBAAmB12B,GAEf,MAAO,CACHitE,WAAW,EACX7zE,OAAQ,GACR6yE,UAAiC,aAJtB,IAAI1xF,gBAAgBylB,EAAM7gB,SAASC,QAI5BzE,IAAI,OACtBo4F,gBAAiB,KACjBD,iBAAkB,KAE1B,CAEA77C,wBACI/2B,KAAKmyE,kBAAoBnyE,KAAKmyE,kBAAkB9tD,KAAKrkB,KACzD,CAEAo3B,cACI,OAAO1Q,GAASgB,UAAUjqB,IAC9B,CAEA65B,eACI,IAAI4sB,EAAQ,CAAC,EAIb,OAHKlkD,KAAKG,MAAM4rE,YACZ7nB,EAAY,KAAI,mBAEbA,CACX,CAEAhtB,cAAc/xC,GACV,MAAO,+CAAgCA,GAC3C,CAEAgyC,6BAA6BztC,GACzB,MAAO,sFAAkEA,IAC7E,CAOAguC,eACI,MAAMq0C,EAAY/rE,KAAKG,MAAM4rE,UAC7B,OACIpsE,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACoQ,EAAW,KACR9Q,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,UAEzC5M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAAC8C,gBAAc,GAChCtR,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,SAC1BjN,IAAAU,cAACwR,EAAY,CAACC,KAAG,EAAC1C,QAASA,IAAMpP,KAAKF,MAAM+tB,QAAQ1vC,KAAK,oCAAoC,gBAEjGwhB,IAAAU,cAACquC,KAAM,KACH/uC,IAAAU,cAACyuC,KAAG,CAACllC,UAAwB,IAAdmiE,EAAoB38D,QAASA,IAAMpP,KAAK2yE,uBAAsB,IAAO,aACpFhzE,IAAAU,cAACyuC,KAAG,CAACllC,UAAwB,IAAdmiE,EAAqB38D,QAASA,IAAMpP,KAAK2yE,uBAAsB,IAAQ,yBAItG,CAEA/6C,gBACI,OACIj4B,IAAAU,cAAAV,IAAAyc,SAAA,KACKpc,KAAK65B,aACL75B,KAAKG,MAAM4sE,WAAa/sE,KAAKurE,gBACG,OAAhCvrE,KAAKG,MAAMyyE,kBACRjzE,IAAAU,cAAC6xE,GAAS,CACNj5E,MAAO+G,KAAKG,MAAMyyE,iBAClB7G,UAAW/rE,KAAKG,MAAM4rE,UACtB0G,sBAAuBA,IAAMzyE,KAAKC,SAAS,CAAC2yE,iBAAkB,OAC9DR,YAAapyE,KAAKmyE,oBAKtC,CAEAt4C,aACI,IAAK75B,KAAKG,MAAMjH,OAAOllB,OACnB,OAAO2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAQ,yCAAkCzN,KAAKG,MAAM4rE,UAAY,aAAY,uBAAuB,KAEhI,MAAMA,EAAY/rE,KAAKG,MAAM4rE,UAM7B,OACIpsE,IAAAU,cAACq0B,KAAS,CAACnoB,UAAU,SACjB5M,IAAAU,cAACs0B,KAAgB,KACbh1B,IAAAU,cAACu0B,KAAa,KACVj1B,IAAAU,cAACkwB,KAAY,KACT5wB,IAAAU,cAACy0B,KAAiB,KAAC,4BACjBi3C,GAAapsE,IAAAU,cAACy0B,KAAiB,KAAC,4BAClCn1B,IAAAU,cAACy0B,KAAiB,QAG1Bn1B,IAAAU,cAAC00B,KAAa,KACT/0B,KAAKG,MAAMjH,OAAOnZ,MAftBA,CAAC8L,EAAIC,IACPD,EAAGhZ,GAAKiZ,EAAGjZ,IAAM,EAAI,IAccV,KAAI+J,GAC9ByjB,IAAAU,cAACkwB,KAAY,CAAC90C,IAAKS,EAAErJ,IACjB8sB,IAAAU,cAACmwB,KAAa,KACTu7C,IAAc7vF,EAAE0d,mBAAqB+F,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,aACjD/M,IAAAU,cAACgM,EAAI,KAAEnwB,EAAE2b,YAEXk0E,GACEpsE,IAAAU,cAACmwB,KAAa,CAACjkB,UAAU,2BACfrwB,EAAE2a,MAAoD8I,IAAAU,cAACgM,EAAI,KAAG15B,IAAYuJ,EAAE2a,OAAOvkB,OAAzEqtB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,+BACxB6X,IAAAU,cAACwR,EAAY,CAACG,MAAI,EAACpI,UAAW1tB,EAAE2a,MAAOuY,QAASA,IAAMpP,KAAKC,SAAS,CAAC8sE,WAAW,EAAM8F,gBAAiB32F,IAAKg2B,UAAQ,GAAC,4BAKjIvS,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAACwR,EAAY,CAACQ,QAAM,EAACjD,QAASA,IAAMpP,KAAKC,SAAS,CAAC2yE,iBAAkB12F,KAAK,aAC1EyjB,IAAAU,cAACwR,EAAY,CAACG,MAAI,EAAC5C,QAASA,IAAMpP,KAAKF,MAAM+tB,QAAQ1vC,KAAK,8BAA8BjC,EAAErJ,MAAMqJ,EAAE4X,gBAAgB,UAClH6L,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC4F,QAASA,IAAMpP,KAAKF,MAAM+tB,QAAQ1vC,KAAK,8BAA8BjC,EAAErJ,MAAMqJ,EAAE4X,SAAS,2BAQ9I,CAEAy3E,gBACI,MAAMtyE,EAAQ+G,KAAKG,MAAM0yE,gBACzB,OAAK55E,EAAMpC,MAEP8I,IAAAU,cAACgrE,GAAY,CACT3xF,QAAS,CAACme,SAAUoB,EAAMpB,SAAUsC,MAAOlB,EAAMkB,OACjDvG,OAAQjhB,IAAYsmB,EAAMpC,OAAOhkB,GACjCy4F,aAAcA,IAAMtrE,KAAKC,SAAS,CAAC8sE,WAAW,EAAO8F,gBAAiB,SALnD,IAQ/B,EAGJH,GAAO5rC,YAAcjmC,ECnMrB,MAAMiyE,WAAuBlzE,YAEzBQ,SACI,OACIT,IAAAU,cAAC6wE,KAAQ,KACLvxE,IAAAU,cAAC8wE,KAAI,CAAC/gE,KAAK,KAAKv4B,MAAO+3F,GAAUC,sBAAuBuB,MAAI,GACxDzxE,IAAAU,cAAC4yB,GAAS,MACVtzB,IAAAU,cAACgzB,KAAI,KACArzB,KAAK+yE,YAAY/yE,KAAKF,MAAM5G,OAAO,GAAI8G,KAAKF,MAAM5G,OAAQ,KAK/E,CAEA65E,YAAY95E,EAAOC,EAAQ85E,GACvB,OACIrzE,IAAAU,cAACgzB,KAAI,CAAC53C,IAAKwd,EAAMpmB,IACb8sB,IAAAU,cAACgM,KAAI,CAACx0B,MAAO+3F,GAAUa,iBAAkBx3E,EAAMpB,UAC/C8H,IAAAU,cAACgzB,KAAI,CAACx7C,MAAOuzB,GAAO6nE,kBAChBtzE,IAAAU,cAACgiD,GAAU,CAAC3oE,QAASuf,EAAMkB,SAE9B6F,KAAKkzE,sBAAsBj6E,EAAMpmB,GAAIqmB,EAAQ85E,GAG1D,CAEAE,sBAAsBC,EAASj6E,EAAQ85E,GACnC,MAAMI,EAAkBl6E,EAAO7Y,QAAOnE,GAAKA,EAAE0d,kBAAkB/mB,KAAOsgG,IACtE,OAAKC,EAAgBp/F,OAEjB2rB,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO,CAACuzB,GAAOioE,sBAAwBL,GAAa,GAAM5nE,GAAOkoE,YAClEF,EAAgBjhG,KAAI+J,GAAK8jB,KAAK+yE,YAAY72F,EAAGgd,EAAQ85E,EAAY,MAHpC,IAM1C,EAIJ,MAAM5nE,GAASooB,KAAWC,OAAO,CAC7Bw/C,iBAAkB,CACd1lE,aAAc,IAElB8lE,sBAAuB,CACnB1wB,YAAa,IAEjB2wB,UAAW,CACP3wB,YAAa,KC5CrB,MAAM4wB,WAAoBt9C,GAAcp2B,cAAA,SAAA9rB,WAAA,KAapCw9F,gBAAkB,KACdvxE,KAAKC,SACD,CAACkT,eAAe,IAChB,IAAM32B,YACFmjB,IAAAU,cAACyyE,GAAc,CAAC55E,OAAQ8G,KAAKG,MAAMjH,OAAOnZ,KAAKigB,KAAKwzE,cACpD,YACAxzE,KAAK6xE,qBAEZ,EACJ,KAuBDA,mBAAqB,KACjB7xE,KAAKC,SAAS,CAACkT,eAAe,GAAO,CACxC,CA3CDyjB,mBAAmB12C,GACf6f,MAAM62B,mBAAmB12C,GACzB8f,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBn9B,OAAQkD,YACJlc,EAAM,CAACub,iBAAkB,CAAC,WAAavC,QAEnD,CAeAs9B,mBAAmB12B,GACf,MAAO,CACH5G,OAAQ,GACRia,eAAe,EAEvB,CAEAikB,cACI,MAAO,WACX,CAEAF,cAAc/xC,GACV,MAAO,+CAAgCA,GAC3C,CAEAgyC,6BAA6BztC,GACzB,MAAO,sFAAkEA,IAC7E,CAMA8pF,WAAW3nF,EAAIC,GACX,OAAOD,EAAGhZ,GAAKiZ,EAAGjZ,GAAK,GAAK,CAChC,CAIA6kD,eACI,OACI/3B,IAAAU,cAACoQ,EAAW,CAACC,SAAO,GAChB/Q,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,SAGjD,CAEAqrB,gBAEI,GADAvjD,SAASqgB,MAAQ,sCACZsL,KAAKG,MAAMjH,OAAOllB,OACnB,OAAO2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAQ,gCAEpC,MAAMvU,EAAS8G,KAAKG,MAAMjH,OAAOnZ,KAAKigB,KAAKwzE,YAC3C,OACI7zE,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAAC8C,gBAAc,GAChCtR,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,SAC1BjN,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAAC6S,EAAe,CACZC,cAAenT,KAAKG,MAAMgT,cAC1B/D,QAASpP,KAAKuxE,oBAI1B5xE,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,yBACjB5M,IAAAU,cAAA,UACKL,KAAK+yE,YAAY75E,EAAO,GAAIA,EAAQ,KAKzD,CAEA65E,YAAY95E,EAAOC,EAAQ85E,GACvB,OACIrzE,IAAAU,cAAA,MAAI5kB,IAAKwd,EAAMpmB,IACX8sB,IAAAU,cAACwQ,IAAI,CAAChnB,GAAI,UAAUoP,EAAMpmB,MAAMomB,EAAMnF,OAAQyY,UAAU,aAAY5M,IAAAU,cAACmP,IAAI,CAACC,KAAK,cAAc,cAAY,OAAOlD,UAAU,yBAA0BtT,EAAMpB,UACzJmI,KAAKkzE,sBAAsBj6E,EAAMpmB,GAAIqmB,EAAQ85E,GAG1D,CAEAE,sBAAsBC,EAASj6E,EAAQ85E,GACnC,MAAMI,EAAkBl6E,EAAO7Y,QAAOnE,GAAKA,EAAE0d,kBAAkB/mB,KAAOsgG,IACtE,IAAKC,EAAgBp/F,OAAU,OAAO,KAEtC,IAAIy/F,EAA2B,sBAE/B,OADIT,GAAa,IAAKS,GAA4B,8BAE9C9zE,IAAAU,cAAA,MAAIkM,UAAWknE,GACVL,EAAgBjhG,KAAI+J,GAAK8jB,KAAK+yE,YAAY72F,EAAGgd,EAAQ85E,EAAY,KAG9E,EC9GJ,MAAMU,WAAmBpC,GAIrBS,kBAAkBC,EAAOC,GACrBjyE,KAAKF,MAAM+tB,QAAQ1vC,KAAK,UAAU6zF,KAASC,KAC3CjyE,KAAK8qE,cACT,CAIA1zC,cACI,MAAO,aAAap3B,KAAKF,MAAM/kB,MAAMX,OAAOvH,IAChD,CAEAg8F,sBAAsB51E,GAElB,MAAM3M,EAAY0T,KAAKF,MAAM/kB,MAAMX,OAC/B6e,EAAMnF,OAASxH,EAAUwH,MACzBkM,KAAKF,MAAM+tB,QAAQ1vC,KAAK,UAAUmO,EAAUzZ,MAAMomB,EAAMnF,OAEhE,CAIA4jC,eACI,OACI/3B,IAAAU,cAACoQ,EAAW,CAACC,SAAO,GAChB/Q,IAAAU,cAAA,MAAIkM,UAAU,qBAAoB5M,IAAAU,cAACwQ,IAAI,CAAChnB,GAAG,UAAS,UACpD8V,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,4BAGjD,CAEAqrB,gBACIvjD,SAASqgB,MAAQ,qCACjB,MAAMuE,EAAQ+G,KAAKG,MAAMlH,MACzB,OACI0G,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,UAAUO,IAAI,WAC/BnN,IAAAU,cAACgN,IAAU,CAACN,IAAI,YAAYD,IAAI,KAAKP,UAAU,mBAAmBvM,KAAKG,MAAMlH,MAAMpB,UACnF8H,IAAAU,cAACi/C,GAAiB,CAAC5lE,QAASuf,EAAMkB,MAAOoS,UAAU,mBAEvD5M,IAAAU,cAACyQ,EAAU,KACN7X,EAAMG,UAAUplB,OAAS,GACtB2rB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,kBACjB2mB,EAAMG,UAAUjnB,KAAI+J,GACjByjB,IAAAU,cAAA,UAAQ5kB,IAAKS,EAAErJ,GAAIu8B,QAASA,IAAMpP,KAAK+xE,kBAAkB71F,EAAErJ,GAAIqJ,EAAE4X,MAAOyY,UAAU,aAAY5M,IAAAU,cAACmP,IAAI,CAACC,KAAK,cAAc,cAAY,OAAOlD,UAAU,yBAA0BrwB,EAAE2b,aAI5L8H,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,sBAClBqtB,IAAAU,cAACgM,EAAI,KAAEpT,EAAM3C,qBAKjC,EC7CJ,MAAMq9E,WAAkB19C,GAAcp2B,cAAA,SAAA9rB,WAAA,KA0BlCw9F,gBAAkB,KACdvxE,KAAKC,SACD,CAACkT,eAAe,IAChB,KACQnT,KAAKF,MAAMzoB,QACXmF,YACImjB,IAAAU,cAAC4wE,GAAmB,CAChBv5C,aAAcA,IAAM/3B,IAAAU,cAACqxE,KAAO,CAAC75F,MAAOuzB,GAAOumE,gBAAgB,aAC3Dj4F,QAASsmB,KAAKG,MAAMhG,MACpBk3E,aAAcA,IAAM1xE,IAAAU,cAACqxE,KAAO,KAAC,gCAA8B1xE,KAAKG,MAAM7J,kBAAkB,OAE5F,gBACA0J,KAAK6xE,oBAGTr1F,YACImjB,IAAAU,cAAC4wE,GAAmB,CAACv3F,QAASsmB,KAAKG,MAAMhG,MAAOzF,MAAM,yCACtD,iCACAsL,KAAK6xE,mBAEb,GAEP,EACJ,KAmCDA,mBAAqB,KACjB7xE,KAAKC,SAAS,CAACkT,eAAe,GAAO,EACxC,KAED2Z,YAAc,KACV9sB,KAAK4Y,QAAQvX,iBAAiB,kCAAkC,CACnE,CAtFDu1B,mBAAmB12C,GACf6f,MAAM62B,mBAAmB12C,GAEzB,MAAMwuF,EAAYtyE,YACdlc,EACA,CACIub,iBAAkB,CAAC,SACnBe,eAAgB,CAAC,uBAEvB7C,WACG+0E,EAGD1uE,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBl8B,MAAOu0E,EAAUv0E,MACjB7D,kBAAmBo4E,EAAUp4E,kBAC7ByrD,UAAW/+D,YAAmB0rF,KANlC1uE,KAAKC,SAAS,CAACo2B,gBAAgB,EAAOC,cAAc,GAS5D,CA6BAE,mBAAmB12B,GACf,MAAO,CACH3F,MAAO,GACP7D,kBAAmB,GACnB6c,eAAe,EACf4uC,UAAW,CAAC,EAEpB,CAEA3qB,cACI,OAAO1Q,GACH1mB,KAAKF,MAAM8zE,MAAQ,cAAgB,oBACrCn2E,IACN,CAEA65B,eACI,IAAI4sB,EAAQ,CAAC,EAIb,OAHKlkD,KAAKF,MAAMzoB,UACZ6sE,EAAe,QAAI,mBAEhBA,CACX,CAEAhtB,cAAc/xC,GACV,MAAO,mDAAoCA,GAC/C,CAEAgyC,6BAA6BztC,GACzB,MAAO,0FAAsEA,IACjF,CAYAguC,eACI,OACI/3B,IAAAU,cAACoQ,EAAW,CAACC,QAAS1Q,KAAKF,MAAM8zE,OAC3B5zE,KAAKF,MAAM8zE,MACTj0E,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,aAErC5M,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,MAAIkM,UAAU,qBAAoB5M,IAAAU,cAACwQ,IAAI,CAAChnB,GAAG,mCAAkC,cAC7E8V,IAAAU,cAAA,MAAIkM,UAAU,wBAAwBvM,KAAKF,MAAMzoB,QAAU,qCAA+B,gDAK9G,CAEAugD,gBACIvjD,SAASqgB,MAAQ,yCACjB,MAAM4B,EAAoB0J,KAAKG,MAAM7J,kBAErC,OAAI0J,KAAKF,MAAMzoB,QAEPsoB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAAC8C,gBAAc,EAACG,OAAK,GACtCzR,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,aACrB5M,KAAK6zE,mBAEdl0E,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,sBACjB5M,IAAAU,cAACi/C,GAAiB,CAAC5lE,QAASsmB,KAAKG,MAAMhG,SAE3CwF,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,+BAClBqtB,IAAAU,cAACgM,EAAI,KAAE/V,IAEXqJ,IAAAU,cAACqhB,GAAc1hB,KAAKG,MAAM4hD,YAKlCpiD,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAAC8C,gBAAc,EAACG,OAAK,GACtCzR,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,YAASjN,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,8BAC9C/M,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACdnR,KAAK6zE,oBAGdl0E,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,sBACjB5M,IAAAU,cAACi/C,GAAiB,CAAC5lE,QAASsmB,KAAKG,MAAMhG,SAE3CwF,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,sBAClBqtB,IAAAU,cAACgM,EAAI,KAAE/V,IAEXqJ,IAAAU,cAACqhB,GAAc1hB,KAAKG,MAAM4hD,WAGtC,CAEA8xB,kBACI,IAAIzgE,EAgBJ,OAZQA,EAFJpT,KAAKG,MAAMgT,cACPnT,KAAKF,MAAMzoB,QACc,uCAEA,mEAGzB2oB,KAAKF,MAAMzoB,QACc,iCAEA,6DAK7BsoB,IAAAU,cAAC6S,EAAe,CACZC,cAAenT,KAAKG,MAAMgT,cAC1B/D,QAASpP,KAAKuxE,iBAAkBn+D,EAE5C,EAGJ,MAAMhI,GAASooB,KAAWC,OAAO,CAC7Bk+C,eAAgB,CACZl0D,WAAY,IACZlQ,aAAc,EACdhC,SAAU,GACVM,WAAY,UAIpB8nE,GAAU7sC,YAAcjmC,EC1LxB,MAAMizE,WAAmB79C,GAAcp2B,cAAA,SAAA9rB,WAAA,KAwGnC+4C,YAAc,KACV9sB,KAAKqB,kBAAkB,CAC1B,CAtGDu1B,mBAAmB12C,GACf6f,MAAM62B,mBAAmB12C,GAEzB,MAAMyZ,EAAayC,YAAoBlc,GAAMyZ,WAC7CqG,KAAKC,SAAS,CACVo2B,gBAAgB,EAChB09C,cAAep6E,EAAWjE,iBAC1Bs+E,qBAAsBr6E,EAAWlD,sBAEzC,CAEAw9E,kCACIj0E,KAAKC,SAAS,CAACi0E,sBAAsB,GACzC,CAEAC,8BACIn0E,KAAKC,SAAS,CAACm0E,2BAA2B,GAC9C,CAEAC,yCACIr0E,KAAKC,SAAS,CAACm0E,2BAA2B,GAC9C,CAEAlQ,eAEIlkE,KAAKwqB,SAAWpmB,EACZsiB,GAAS2B,iBAAiB5qB,KAC1B,SACA,CAAC,EACD,CAAC,EACDuC,KAAKmkE,yBACLnkE,KAAKokE,uBACLpkE,KAAKqkE,iCAEb,CAEAF,yBAAyBjkF,GACrB8f,KAAKg4B,aAAe,KACpBh4B,KAAKC,SAAS,CAACm0E,2BAA2B,EAAOJ,sBAAsB,GAC3E,CAEA5P,uBAAuBlkF,GACnB8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVoyE,iBAAkB,+DAA2CnyF,EAAKiF,WAE1E,CAEAk/E,iCAAiC36E,GAE7B,GADAsW,KAAKwqB,SAAW,KACD,MAAX9gC,EACAsW,KAAKC,SAAS,CAACqrB,UAAU,EAAOgL,cAAc,QAC3C,CACH,IAAInxC,EAAU,GACC,MAAXuE,IACAvE,EAAU,kDAEV6a,KAAKqB,oBAETrB,KAAKC,SAAS,CACVoyE,iBAAkBltF,GAAW,+FAA2EuE,MAEhH,CACJ,CAIA8sC,mBAAmB12B,GACf,MAAO,CACHo0E,sBAAsB,EACtBE,2BAA2B,EAC3BL,eAAe,EACfC,sBAAsB,EACtB3B,iBAAkB,GAE1B,CAEAt7C,wBACI/2B,KAAKi0E,gCAAkCj0E,KAAKi0E,gCAAgC5vD,KAAKrkB,MACjFA,KAAKm0E,4BAA8Bn0E,KAAKm0E,4BAA4B9vD,KAAKrkB,MACzEA,KAAKq0E,uCAAyCr0E,KAAKq0E,uCAAuChwD,KAAKrkB,MAE/FA,KAAKkkE,aAAelkE,KAAKkkE,aAAa7/C,KAAKrkB,MAC3CA,KAAKmkE,yBAA2BnkE,KAAKmkE,yBAAyB9/C,KAAKrkB,MACnEA,KAAKokE,uBAAyBpkE,KAAKokE,uBAAuB//C,KAAKrkB,MAC/DA,KAAKqkE,iCAAmCrkE,KAAKqkE,iCAAiChgD,KAAKrkB,KACvF,CAEAo3B,cACI,OAAO1Q,GAAS4B,wBAAwB7qB,IAC5C,CAEAy5B,cAAc/xC,GACV,MAAO,uDAAqCA,GAChD,CAEAgyC,6BAA6BztC,GACzB,MAAO,8FAAuEA,IAClF,CAMA2X,mBACIrB,KAAK4Y,QAAQvX,iBAAiB,kCAClC,CAIAq2B,eACI,OACI/3B,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACoQ,EAAW,KACR9Q,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,cAEzC5M,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,aAGtC,CAEAgrB,gBAEI,GADAvjD,SAASqgB,MAAQ,2CACZsL,KAAKG,MAAM4zE,cACZ,OAAOp0E,IAAAU,cAACwR,EAAY,CAACC,KAAG,EAAC1C,QAASA,IAAMpP,KAAKF,MAAM+tB,QAAQ1vC,KAAK,yCAAyC,mBAG7G,MAAM0vC,EAAU7tB,KAAKF,MAAM+tB,QAC3B,OACIluB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACq0B,KAAS,CAACnoB,UAAU,SACjB5M,IAAAU,cAACs0B,KAAgB,KACbh1B,IAAAU,cAACu0B,KAAa,KACVj1B,IAAAU,cAACkwB,KAAY,KACT5wB,IAAAU,cAACy0B,KAAiB,KAAC,qBACnBn1B,IAAAU,cAACy0B,KAAiB,QAG1Bn1B,IAAAU,cAAC00B,KAAa,KACVp1B,IAAAU,cAACkwB,KAAY,KACT5wB,IAAAU,cAACmwB,KAAa,KAAC,mBACf7wB,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAACwR,EAAY,CAACG,MAAI,EAAC5C,QAASA,IAAMpP,KAAKC,SAAS,CAACi0E,sBAAsB,KAAQ,UAC/Ev0E,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC4F,QAASA,IAAMye,EAAQ1vC,KAAK,6CAA6C,uBAGtG6hB,KAAKG,MAAM6zE,sBACRr0E,IAAAU,cAACkwB,KAAY,KACT5wB,IAAAU,cAACmwB,KAAa,KAAC,6BACf7wB,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAACwR,EAAY,CAACG,MAAI,EAAC5C,QAASA,IAAMye,EAAQ1vC,KAAK,2CAA2C,UAC1FwhB,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC4F,QAASA,IAAMye,EAAQ1vC,KAAK,qDAAqD,qBACvGwhB,IAAAU,cAACwR,EAAY,CAACQ,QAAM,EAACjD,QAASpP,KAAKm0E,6BAA6B,kBAOvFn0E,KAAKG,MAAM+zE,sBAAwBl0E,KAAKs0E,iCACxCt0E,KAAKG,MAAMi0E,2BAA6Bp0E,KAAKu0E,oCAG1D,CAEAD,iCACI,MAAMzmD,EAAU7tB,KAAKF,MAAM+tB,QAC3B,IAAIn0C,EAASgb,EAAQ,KAsBrB,OArBIsL,KAAKG,MAAM6zE,sBACXt/E,EAAQ,iDACRhb,EACIimB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC4F,QAASA,IAAMye,EAAQ1vC,KAAK,2DAA2D,oEAC7GwhB,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACwR,EAAY,CAACE,QAAM,EAAC3C,QAASpP,KAAKi0E,iCAAiC,UACpEt0E,IAAAU,cAACwR,EAAY,CAACG,MAAI,EAAC5C,QAASA,IAAMye,EAAQ1vC,KAAK,2CAA2C,6CAKtGuW,EAAO,gEACPhb,EACIimB,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACwR,EAAY,CAACE,QAAM,EAAC3C,QAASpP,KAAKi0E,iCAAiC,UACpEt0E,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC4F,QAASA,IAAMye,EAAQ1vC,KAAK,2DAA2D,4EAMrHwhB,IAAAU,cAACoc,GAAY,CACTG,YAAaloB,EACbib,QAAS3P,KAAKi0E,iCAEbv6F,EAGb,CAEA66F,oCACI,OACI50E,IAAAU,cAACoc,GAAY,CACTG,YAAY,kFACZjN,QAAS3P,KAAKq0E,wCAEd10E,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKq0E,uCAAwCtiE,QAAM,GAAC,UAC3EpS,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKkkE,aAAc7xD,QAAM,GAAC,cAEpDrS,KAAKG,MAAMkyE,iBAAiBr+F,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAASzN,KAAKG,MAAMkyE,mBAIhG,EAGJyB,GAAWhtC,YAAcjmC,EC7NzB,MAAM2zE,WAAqBv+C,GAAcp2B,cAAA,SAAA9rB,WAAA,KAoCrC+4C,YAAc,KACV9sB,KAAK4Y,QAAQvX,iBAAiB,kCAAkC,CACnE,CAlCDu1B,mBAAmB12C,GACf6f,MAAM62B,mBAAmB12C,GACzB8f,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBjM,WAAY,GACZ/vB,aAAc+B,YACVlc,EAAM,CAACub,iBAAkB,CAAC,WAAapB,cAEnD,CAIAm8B,mBAAmB12B,GACf,MAAO,CACHitE,WAAW,EACX1yE,aAAc,GACdo6E,gBAAiB,KAEzB,CAEAr9C,cACI,OAAO1Q,GAASwB,oBAAoBzqB,IACxC,CAEAy5B,cAAc/xC,GACV,MAAO,gEAAyCA,GACpD,CAEAgyC,6BAA6BztC,GACzB,MAAO,uGAA2EA,IACtF,CAQAguC,eACI,OACI/3B,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACoQ,EAAW,KACR9Q,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,0BAEzC5M,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,yBAGtC,CAEAgrB,gBACI,OACIj4B,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACq0B,KAAS,CAACnoB,UAAU,SACjB5M,IAAAU,cAACs0B,KAAgB,KACbh1B,IAAAU,cAACu0B,KAAa,KACVj1B,IAAAU,cAACkwB,KAAY,KACT5wB,IAAAU,cAACy0B,KAAiB,KAAC,qBACnBn1B,IAAAU,cAACy0B,KAAiB,QAG1Bn1B,IAAAU,cAAC00B,KAAa,KACT/0B,KAAKG,MAAM9F,aAAaloB,KAAI0X,GACzB8V,IAAAU,cAACkwB,KAAY,CAAC90C,IAAKoO,EAAGhX,IAClB8sB,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAACgM,EAAI,KAAExiB,EAAGgO,WAEd8H,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAACwR,EAAY,CAACG,MAAI,EAAC5C,QAASA,IAAMpP,KAAKC,SAAS,CAAC8sE,WAAW,EAAM0H,gBAAiB5qF,KAAM,2BACzF8V,IAAAU,cAACwR,EAAY,CAACG,MAAI,EAAC5C,QAASA,IAAMpP,KAAKF,MAAM+tB,QAAQ1vC,KAAK,sCAAsC0L,EAAGhX,cAAc,UACjH8sB,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC4F,QAASA,IAAMpP,KAAKF,MAAM+tB,QAAQ1vC,KAAK,sCAAsC0L,EAAGhX,OAAO,4BAOpImtB,KAAKG,MAAM4sE,WAAa/sE,KAAKurE,gBAG1C,CAEAA,gBACI,OACI5rE,IAAAU,cAACgrE,GAAY,CACT3xF,QAASsmB,KAAKG,MAAMs0E,gBACpB7gF,OAAO,WACP03E,aAAcA,IAAMtrE,KAAKC,SAAS,CAAC8sE,WAAW,EAAO0H,gBAAiB,QAGlF,EAGJD,GAAa1tC,YAAcjmC,EC/F3B,MAAM6zE,WAAoBz+C,GAAcp2B,cAAA,SAAA9rB,WAAA,KAmCpC+4C,YAAc,KACV9sB,KAAK4Y,QAAQvX,iBAAiB,kCAAkC,CACnE,CAjCDu1B,mBAAmB12C,GACf6f,MAAM62B,mBAAmB12C,GACzB,MAAMka,EAAcgC,YAChBlc,EAAM,CAACub,iBAAkB,CAAC,WAAarB,YAC3C4F,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBjM,WAAY,GACZhwB,cACA2nD,UAAW/+D,YAAmBoX,IAEtC,CAIAo8B,mBAAmB12B,GACf,MAAO,CAAC1F,YAAa,KAAM2nD,UAAW,CAAC,EAC3C,CAEA3qB,cACI,OAAO1Q,GAASyB,2BAA2B5hB,OACvCvG,KAAKF,MAAM/kB,MAAMX,OAAOvH,GAChC,CAEAqkD,cAAc/xC,GACV,MAAO,+DAAwCA,GACnD,CAEAgyC,6BAA6BztC,GACzB,MAAO,sGAA0EA,IACrF,CAQAguC,eACI,OACI/3B,IAAAU,cAACoQ,EAAW,KACR9Q,IAAAU,cAAA,MAAIkM,UAAU,qBAAoB5M,IAAAU,cAACwQ,IAAI,CAAChnB,GAAG,sCAAqC,0BAChF8V,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,qBAAWvM,KAAKG,MAAM/F,YAAc4F,KAAKG,MAAM/F,YAAYvC,SAAW,IAGvH,CAEA+/B,gBACI,MAAM/tC,EAAKmW,KAAKG,MAAM/F,YACtB,OACIuF,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAE/iB,EAAGgO,UAC9B8H,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC4F,QAASA,IAAMpP,KAAKF,MAAM+tB,QAAQ1vC,KAAK,sCAAsC6hB,KAAKF,MAAM/kB,MAAMX,OAAOvH,cAAc,WAE7I8sB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,mBAClBqtB,IAAAU,cAACi/C,GAAiB,CAAC5lE,QAASmQ,EAAGsQ,UAGvCwF,IAAAU,cAACqhB,GAAc1hB,KAAKG,MAAM4hD,WAGtC,EAGJ2yB,GAAY5tC,YAAcjmC,E,oBC7E1B,MAAM8zE,GAAsB70E,IACxB,MAAO80E,EAAgBC,GAAqBhmE,oBAAS,GAChD+lE,IACDr7F,cACAs7F,GAAkB,IAGtBr8D,qBAAU,KACNnkC,SAASqgB,MAAQ,iEAA6C,GAC/D,IAEH,MAAM,YAAEqM,GAAgB+e,qBAAWjf,GAEnC,OAAKE,EAAYwC,YAGb5D,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,gCAC1BjN,IAAAU,cAAA,WACIV,IAAAU,cAAA,MAAIkM,UAAU,kDACTxL,EAAYlR,MACT8P,IAAAU,cAAA,UACIV,IAAAU,cAACy0E,KAAI,CAAChoE,IAAK+D,IAAMhnB,GAAG,6BAA6B0iB,UAAU,wBACvD5M,IAAAU,cAAC00E,KAAiB,KACdp1E,IAAAU,cAAC20E,KAAS,CAACzoE,UAAU,wBACjB5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,kBAAmBW,KAAM,UAAY,cAAY,UAEzEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,YAAYD,IAAI,KAAKP,UAAU,wBAAuB,YAKrFxL,EAAY0C,iCACT9D,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,UACIV,IAAAU,cAACy0E,KAAI,CAAChoE,IAAK+D,IAAMhnB,GAAG,kCAAkC0iB,UAAU,wBAC5D5M,IAAAU,cAAC00E,KAAiB,KACdp1E,IAAAU,cAAC20E,KAAS,CAACzoE,UAAU,wBACjB5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,YAAaW,KAAM,UAAY,cAAY,UAEnEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,YAAYD,IAAI,KAAKP,UAAU,wBAAuB,gBAIlF5M,IAAAU,cAAA,UACIV,IAAAU,cAACy0E,KAAI,CAAChoE,IAAK+D,IAAMhnB,GAAG,kCAAkC0iB,UAAU,wBAC5D5M,IAAAU,cAAC00E,KAAiB,KACdp1E,IAAAU,cAAC20E,KAAS,CAACzoE,UAAU,wBACjB5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,gBAAiBW,KAAM,UAAY,cAAY,UAEvEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,YAAYD,IAAI,KAAKP,UAAU,wBAAuB,iBAIlF5M,IAAAU,cAAA,UACIV,IAAAU,cAACy0E,KAAI,CAAChoE,IAAK+D,IAAMhnB,GAAG,qCAAqC0iB,UAAU,wBAC/D5M,IAAAU,cAAC00E,KAAiB,KACdp1E,IAAAU,cAAC20E,KAAS,CAACzoE,UAAU,wBACjB5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,aAAcW,KAAM,UAAY,cAAY,UAEpEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,YAAYD,IAAI,KAAKP,UAAU,wBAAuB,6BAMzFxL,EAAY9M,YACT0L,IAAAU,cAAA,UACIV,IAAAU,cAACy0E,KAAI,CAAChoE,IAAK+D,IAAMhnB,GAAG,kCAAkC0iB,UAAU,wBAC5D5M,IAAAU,cAAC00E,KAAiB,KACdp1E,IAAAU,cAAC20E,KAAS,CAACzoE,UAAU,wBACjB5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,eAAgBW,KAAM,UAAY,cAAY,UAEtEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,YAAYD,IAAI,KAAKP,UAAU,wBAAuB,oBA5D/D5M,IAAAU,cAACyiB,GAAgB,KAmEjD,ECrFX,MAAMmyD,WAAwBhG,GAI1Br4C,mBAAmB12C,GACf8f,KAAKwqB,SAAW,KAChB,MAAMhzB,EAAY4E,YACdlc,EACA,CACIub,iBAAkB,CAAC,SACnBe,eAAgB,CAAC,oBAAqB,gBACtCC,mBAAoB,CAAC,oBAAqB,kBAEhDhF,WAAW,GACRD,EAGDwI,KAAKC,SAAS,CAACo2B,gBAAgB,EAAO7+B,cAFtCwI,KAAKC,SAAS,CAACo2B,gBAAgB,GAIvC,CAIAe,cACI,MAAO,iBACX,CAEAE,eACI,MAAO,CAAChiC,eAAe,EAC3B,CAIA8K,SACI,OAAIJ,KAAKG,MAAMk2B,iBAAmB16C,OAAOS,KAAK4jB,KAAKG,MAAM3I,WAAWxjB,OAAiB,KAC9EgsB,KAAK43B,eAChB,CAEAA,gBACI,MAAM,MAAEz9B,GAAU6F,KAAKG,MAAM3I,UACvB09E,EAAkB/6E,EAAMtgB,OAAO1H,KAAIgjG,GAAKA,EAAEr7F,OAAMqjB,KAAK,KAE3D,OACIwC,IAAAU,cAAA,WAASkM,UAAU,iBAAiB,aAAY,yBAAoB2oE,IAAmBznE,KAAK,SAAS,YAAU,UAC3G9N,IAAAU,cAACi/C,GAAiB,CAAC5lE,QAASygB,IAGxC,EC9CJ,MAAMi7E,GAAyBt1E,IAC3BzrB,SAASqgB,MAAQ,sEACjBtb,OAAO49C,SAAS,EAAG,GAEnB,MAAO49C,EAAgBC,GAAqBhmE,oBAAS,GAMrD,OALK+lE,IACDr7F,cACAs7F,GAAkB,IAIlBl1E,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,WACjB5M,IAAAU,cAACgN,IAAU,CAACx6B,GAAG,kBAAkBk6B,IAAI,YAAYD,IAAI,KAAKP,UAAU,mBAAkB,uEACtF5M,IAAAU,cAACgN,IAAU,CAACx6B,GAAG,aAAak6B,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB5M,IAAAU,cAAA,QAAMxtB,GAAG,gBAAe,gDAAmD,kTAAuP8sB,IAAAU,cAAA,KAAGxtB,GAAG,WAAWsM,KAAK,IAAIotB,UAAU,aAAY,4DAA4D,KACxf5M,IAAAU,cAAA,MAAIkM,UAAU,iBACV5M,IAAAU,cAAA,MAAIkM,UAAU,sBACV5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,wCAAqCnN,IAAAU,cAAA,QAAMxtB,GAAG,wBAAuB,6BAE5G8sB,IAAAU,cAAA,MAAIkM,UAAU,sBACV5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,gCAA6BnN,IAAAU,cAAA,QAAMxtB,GAAG,0BAAyB,uBAInH8sB,IAAAU,cAACgN,IAAU,CAACN,IAAI,YAAYD,IAAI,KAAKP,UAAU,wCAAuC,uCACtF5M,IAAAU,cAACgN,IAAU,CAACx6B,GAAG,cAAck6B,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,oMAE3E5M,IAAAU,cAACgN,IAAU,CAACx6B,GAAG,qBAAqBk6B,IAAI,YAAYD,IAAI,KAAKP,UAAU,wCAAuC,kDAC9G5M,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,yCAA4B5M,IAAAU,cAAA,QAAMxtB,GAAG,0BAAyB,gCACxH8sB,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,8CAAsC5M,IAAAU,cAAA,QAAMxtB,GAAG,sBAAqB,qBAC9H8sB,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,+EAA6D5M,IAAAU,cAAA,KAAGlhB,KAAK,qEAAqEotB,UAAU,aAAY,kGAA8E,oBAExS5M,IAAAU,cAACgN,IAAU,CAACx6B,GAAG,cAAck6B,IAAI,YAAYD,IAAI,KAAKP,UAAU,wCAAuC,wBACvG5M,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,oGAE1D5M,IAAAU,cAACgN,IAAU,CAACx6B,GAAG,eAAek6B,IAAI,YAAYD,IAAI,KAAKP,UAAU,wCAAuC,wCACxG5M,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,wLAAkJ5M,IAAAU,cAAA,KAAGlhB,KAAK,0BAA0BtM,GAAG,cAAa,oBAAoB,sBAAmB8sB,IAAAU,cAAA,KAAGlhB,KAAK,uBAAuBtM,GAAG,gBAAe,oBAAoB,KAC1W8sB,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,wJAC1D5M,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,uDAC1D5M,IAAAU,cAAA,MAAIkM,UAAU,iBACD5M,IAAAU,cAAA,MAAIkM,UAAU,sBACV5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,gCAEvCnN,IAAAU,cAAA,MAAIkM,UAAU,sBACV5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,wDAEnDnN,IAAAU,cAAA,MAAIkM,UAAU,sBACE5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,qHAEnDnN,IAAAU,cAAA,MAAIkM,UAAU,sBACE5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,0GAGpDnN,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,2IAC1D5M,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,sUAC1D5M,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,gOAE1D5M,IAAAU,cAACgN,IAAU,CAACx6B,GAAG,iBAAiBk6B,IAAI,YAAYD,IAAI,KAAKP,UAAU,wCAAuC,kFAC1G5M,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,oRAC1D5M,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,qQAC1D5M,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,gIAAiG5M,IAAAU,cAAA,KAAGlhB,KAAK,2BAA0B,oBAAoB,KACjNwgB,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,0GAAoE5M,IAAAU,cAAA,KAAGlhB,KAAK,sFAAsFotB,UAAU,YAAY7X,MAAM,4EAAiE,gCAAgC,KAEzViL,IAAAU,cAACgN,IAAU,CAACN,IAAI,YAAYD,IAAI,KAAKP,UAAU,wCAAuC,6BAC7E5M,IAAAU,cAACgN,IAAU,CAACx6B,GAAG,oBAAoBk6B,IAAI,YAAYD,IAAI,KAAKP,UAAU,wCAAuC,8CAC7G5M,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,2NACnE5M,IAAAU,cAAA,MAAIkM,UAAU,iBACD5M,IAAAU,cAAA,MAAIkM,UAAU,sBACV5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,0BAEvCnN,IAAAU,cAAA,MAAIkM,UAAU,sBACV5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,+CAEnDnN,IAAAU,cAAA,MAAIkM,UAAU,sBACE5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,4CAEnDnN,IAAAU,cAAA,MAAIkM,UAAU,sBACE5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,qHAEnDnN,IAAAU,cAAA,MAAIkM,UAAU,sBACE5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,sDAGpDnN,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,8EAC1D5M,IAAAU,cAAA,MAAIkM,UAAU,8BAA8B10B,MAAO,CAAEw9F,UAAW,UAAWvL,WAAY,SAC1EnqE,IAAAU,cAAA,UACIV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,6IAEpCnN,IAAAU,cAAA,UACIV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,sIAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,mKAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,kHAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,0IAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,wMAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,iMAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,4JAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,0KAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,4IAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,qGAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,4QAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,2IAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,iQAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,kOAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,6SAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,qIAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,2GAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,mMAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,iJAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,sHAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,oGAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,6QAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,qeAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,sbAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,oeAEhDnN,IAAAU,cAAA,UACgBV,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,KAAI,mKAIjDnN,IAAAU,cAACgN,IAAU,CAACx6B,GAAG,mBAAmBk6B,IAAI,YAAYD,IAAI,KAAKP,UAAU,wCAAuC,0DAC5G5M,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,4IAC1D5M,IAAAU,cAAA,MAAIkM,UAAU,+BACD5M,IAAAU,cAAA,MAAIkM,UAAU,sBACV5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,iCAAoBnN,IAAAU,cAAA,KAAGlhB,KAAK,yEAAyEotB,UAAU,YAAY7X,MAAM,kEAAkD,sBAAkB,oSAE5OiL,IAAAU,cAAA,MAAIkM,UAAU,sBACV5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,kJAEnDnN,IAAAU,cAAA,MAAIkM,UAAU,sBACE5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,sCAAyBnN,IAAAU,cAAA,KAAGlhB,KAAK,kCAAiC,2BAA4B,MAEjJwgB,IAAAU,cAAA,MAAIkM,UAAU,sBACE5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,0FAA6EnN,IAAAU,cAAA,KAAGlhB,KAAK,wBAAuB,gBAAiB,MAEhLwgB,IAAAU,cAAA,MAAIkM,UAAU,sBACE5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,6IAEnDnN,IAAAU,cAAA,MAAIkM,UAAU,sBACE5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,mEAA4CnN,IAAAU,cAAA,KAAGlhB,KAAK,uBAAsB,iBAE7HwgB,IAAAU,cAAA,MAAIkM,UAAU,sBACE5M,IAAAU,cAACmP,IAAI,CAACC,KAAM,CAAEA,KAAM,cAAeW,KAAM,UAAY,cAAY,SACjEzQ,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,QAAO,mLAGpDnN,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,oOAC1D5M,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQD,IAAI,IAAIP,UAAU,iBAAgB,8BAA2B5M,IAAAU,cAAA,KAAGlhB,KAAK,kEAAkEotB,UAAU,YAAY7X,MAAM,+CAAoC,0CAAgC,KAC9O,EC7MP4gF,GAA2Bn7D,IAEjC,IAFkC,QACrC3wB,EAAO,aAAE9G,EAAY,eAAE6yF,EAAc,4BAAEC,GAC1Cr7D,EACG,MAAMkkC,EAAoC70D,EAAQ60D,gCAC5C,IAAIt5D,KAAKyE,EAAQ60D,iCACjB,GACAC,EAAkC90D,EAAQ80D,8BAC1C,IAAIv5D,KAAKyE,EAAQ80D,+BACjB,GACAC,EAA2B/0D,EAAQ+0D,uBACnC,IAAIx5D,KAAKyE,EAAQ+0D,wBACjB,GACAC,EAAyBh1D,EAAQg1D,qBACjC,IAAIz5D,KAAKyE,EAAQg1D,sBACjB,GACAi3B,EAA0C91E,IAAMuc,YAChDw5D,EAAwC/1E,IAAMuc,YAC9Cy5D,EAAiCh2E,IAAMuc,YACvC05D,EAA+Bj2E,IAAMuc,YAE3C,OACIvc,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,SACN6E,UAAWwoB,IAAMuc,YACjBpP,IAAI,SACJnN,IAAAU,cAAC4Y,GAAM,CACH,aAAW,SACX1M,UAAU,gBACViE,QAASt+B,IACT+nC,mBAAoBA,IAAc,GAClC7O,OAAQF,EACR74B,MAAOmX,EAAQo0D,mBACfxnC,SAAUiG,GAAkBk5D,EACxB,qBAAsBl5D,MAGlC1c,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,QACNq6B,SAAS,gCACTG,IAAI,SACJnN,IAAAU,cAAC2jB,GAAe,CACZ,aAAY,mDAAgDx6B,EAAQq0D,mBAAmB7pE,oBACvFiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,QAClBnyC,GAAG,gCACHszC,UAAW,GACX9zC,MAAOmX,EAAQq0D,mBACfznC,SAAU8G,GAAMq4D,EAAe,qBAAsBr4D,EAAGiI,OAAO9yC,OAC/DqyC,QAASxH,GAAMq4D,EAAe,qBAAsB,QAGhE51E,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,aACNq6B,SAAS,mBACTG,IAAI,SACJnN,IAAAU,cAAC2jB,GAAe,CACZiC,gBAAc,EACd,aAAY,yDAAiDz8B,EAAQkL,MAAM1gB,oBAC3Eu4B,UAAU,iBACVyY,kBAAkB,aAClBnyC,GAAG,mBACHszC,UAAW,IACX9zC,MAAOmX,EAAQkL,MACf0hB,SAAU8G,GAAMq4D,EAAe,QAASr4D,EAAGiI,OAAO9yC,OAClDqyC,QAASxH,GAAMq4D,EAAe,QAAS,QAGnD51E,IAAAU,cAACg9B,GAAoC,CACjCrwC,SAAUxD,EAAQy0D,sCAClBhe,eAAgB,GAChBr2B,UAAU,EACV1Z,YAAa1G,EAAQ00D,yCACrBhe,kBAAmB,GACnBloB,aAAa,EACbgoB,KAAK,iBACLztC,YAAa/I,EAAQs0D,yCACrB1d,kBAAmB,GACnB19C,aAAcA,EACdw8C,sBAAsB,EACtBpsC,SAAUtJ,EAAQw0D,sCAClB3d,eAAgB,GAChBttC,UAAWvJ,EAAQu0D,uCACnBzd,gBAAiB,GACjB9sC,OAAQhK,EAAQ20D,oCAChB5d,aAAc,GACdxC,uBAAuB,EACvBM,iBAAkBm3C,EAClB72C,oBAAqB62C,EACrB73C,oBAAqB63C,EACrBr3C,iBAAkBq3C,EAClBv3C,kBAAmBu3C,EACnB/2C,eAAgB+2C,IAEpB71E,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,4BACNq6B,SAAS,qDACTG,IAAI,SACJnN,IAAAU,cAAC2jB,GAAe,CACZ,aAAY,uEAAoEx6B,EAAQ40D,wCAAwCpqE,oBAChIiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,4BAClBnyC,GAAG,qDACHszC,UAAW,GACX9zC,MAAOmX,EAAQ40D,wCACfhoC,SAAU8G,GAAMq4D,EAAe,0CAA2Cr4D,EAAGiI,OAAO9yC,OACpFqyC,QAASxH,GAAMq4D,EAAe,0CAA2C,QAGrF51E,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,kBACNw6B,IAAI,SACJnN,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CACX5gC,SAAU+9F,EACVnjG,MAAM,KACNw6B,IAAI,SACJnN,IAAAU,cAACwV,EAAY,CACT0B,SAAS,KACTC,QAAS8mC,QAAiCrqE,EAC1CuiC,UAAWi/D,EACXpjG,MAAOgsE,EACPjoC,SAAUlgC,GAAQq/F,EAAe,kCAAmCn/F,YAAaF,OAEzFypB,IAAAU,cAACiY,GAAc,CACX5gC,SAAUg+F,EACVpjG,MAAM,KACNw6B,IAAI,SACJnN,IAAAU,cAACwV,EAAY,CACT0B,SAAS,KACTE,QAAS4mC,QAAmCpqE,EAC5CuiC,UAAWk/D,EACXrjG,MAAOisE,EACPloC,SAAUlgC,GAAQq/F,EAAe,gCAAiCn/F,YAAaF,SAI/FypB,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,8BACNw6B,IAAI,SACJnN,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CACX5gC,SAAUi+F,EACVrjG,MAAM,KACNw6B,IAAI,SACJnN,IAAAU,cAACwV,EAAY,CACT0B,SAAS,KACTC,QAASgnC,QAAwBvqE,EACjCuiC,UAAWm/D,EACXtjG,MAAOksE,EACPnoC,SAAUlgC,GAAQq/F,EAAe,yBAA0Bn/F,YAAaF,OAEhFypB,IAAAU,cAACiY,GAAc,CACX5gC,SAAUk+F,EACVtjG,MAAM,KACNw6B,IAAI,SACJnN,IAAAU,cAACwV,EAAY,CACT0B,SAAS,KACTE,QAAS8mC,QAA0BtqE,EACnCuiC,UAAWo/D,EACXvjG,MAAOmsE,EACPpoC,SAAUlgC,GAAQq/F,EAAe,uBAAwBn/F,YAAaF,UAK3F,ECjLL2/F,GAAe,CACjBC,MAAO,yBACPC,UAAW,iBACXC,OAAQ,aACRC,UAAW,oBACXC,OAAQ,gBACRC,SAAU,mBAIDC,GAAuBj8D,IAE7B,IAF8B,cACjC5yB,EAAa,iCAAE8uF,GAClBl8D,EACO0T,EAAUC,cACd,MACIvmC,cAAe+uF,EACfC,gBAAiBC,EAAsB,mBACvCC,GACAlvF,GAEAnE,UAAWyR,EAAI,OACfnL,EACA6sF,gBAAiBG,GACjBJ,GAeE,YAAEv1E,GAAgB+e,qBAAWjf,GAEnC,OACIlB,IAAAU,cAACkwB,KAAY,KACT5wB,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAAA,OAAKkM,UAAU,+BACX5M,IAAAU,cAACwQ,IAAI,CAAChnB,GAAI,eAAeysF,EAAezjG,KAAsB,UAAjB6W,EAAOpX,MAAoB,WAAa,KAAMi6B,UAAU,aAChG+pE,EAAenlF,QAEpBwO,IAAAU,cAACmd,GAAQ,CAACC,WAAY,GAAI5/B,MAAO,GAC7B8hB,IAAAU,cAACgM,EAAI,CAACU,IAAI,UAAUR,UAAU,oCAAoChlB,EAAcmN,UAI5FiL,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAAA,OAAKkM,UAAW,oCAAoD,cAAjB7iB,EAAOpX,MAAwB,iBAAmB,KACjGqtB,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAMomE,GAAansF,EAAOpX,SACnDqtB,IAAAU,cAACgM,EAAI,KAAE3iB,EAAOrR,QAGtBsnB,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAAA,OAAKkM,UAAU,qCACX5M,IAAAU,cAAA,OAAKkM,UAAU,+BACX5M,IAAAU,cAACgM,EAAI,KAAExX,EAAKjS,SAAS,IAAEiS,EAAK/R,SAC5B6c,IAAAU,cAACgM,EAAI,CAACU,IAAI,UAAUR,UAAU,oCAAoC1X,EAAKpG,QAE3EkR,IAAAU,cAACgjB,GAAiB,CAACG,cAAc,+KAC7B7jB,IAAAU,cAACgM,EAAI,CAACU,IAAI,UAAUR,UAAU,kCAAiC,MAAI1X,EAAK5E,YACxE0P,IAAAU,cAAA,MAAIkM,UAAU,yCACTxL,EAAY8B,yBACTlD,IAAAU,cAAA,UACIV,IAAAU,cAACwR,EAAY,CAACK,UAAQ,EAAC9C,QAvCtBunE,KAC7B9oD,EAAQ1vC,KAAK4nB,EAAKe,aAAaP,OAAO1R,EAAKhiB,IAAI,GAsCuC,sCAKjEkuB,EAAYoC,qBACTxD,IAAAU,cAAA,UACIV,IAAAU,cAACwR,EAAY,CAACK,UAAQ,EAAC9C,QAnDfwnE,KACpC/oD,EAAQ1vC,KACJ,GAAG4nB,EAAKkB,mBAAmBxJ,cAAc5I,EAAKpG,2BAA2B,GAiDgB,8BAKzEkR,IAAAU,cAAA,UAAIV,IAAAU,cAACwR,EAAY,CAACK,UAAQ,EAAC9C,QA/CLynE,KAC1CR,EAAiCxhF,EAAKpG,MAAM,GA8CmD,gCAK3FkR,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAAA,OAAKkM,UAAU,+BACO,UAAjB7iB,EAAOpX,MACJqtB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACU,IAAI,UAAUR,UAAU,oCACzBmqE,EACK,2BAA2BA,IAC3B,6BAGS,OAAlBD,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBziG,QAAS,GAC1B2rB,IAAAU,cAACgM,EAAI,CAACU,IAAI,UAAUR,UAAU,oCAAmC,WACpDkqE,IAKrB,CAAC,YAAa,UAAUhiG,SAASiV,EAAOpX,OAEhCqtB,IAAAU,cAACgM,EAAI,CAACU,IAAI,UAAUR,UAAU,oCAAmC,eAChDmqE,GAIjB/2E,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACU,IAAI,UAAUR,UAAU,oCAAmC,eAChDmqE,GAEhBA,IAAiCF,GAC9B72E,IAAAU,cAACgM,EAAI,CAACU,IAAI,UAAUR,UAAU,gDAA+C,gBAC3DiqE,GAGtB72E,IAAAU,cAACgM,EAAI,CAACU,IAAI,UAAUR,UAAU,oCAAmC,WACpDkqE,MAO1B,ECxHVK,GAAwB38D,IAG9B,IAH+B,QAClC3wB,EAAO,uCAAEutF,EAAsC,eAAExB,EAAc,uBAC/DyB,KAA2Bl3E,GAC9Bqa,EACG,MAAM,sBAAEkjC,EAAqB,mCAAEC,GAAuC9zD,GAC9DnX,MAAO4kG,GAA+B55B,EAa9C,OACI19C,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,QACNq6B,SAAS,4BACTG,IAAI,SACJnN,IAAAU,cAAC2jB,GAAe,CACZ,aAAY,oDAAiDx6B,EAAQozD,eAAe5oE,oBACpFiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,QAClBnyC,GAAG,4BACHszC,UAAW,IACX9zC,MAAOmX,EAAQozD,eACfxmC,SAAU8G,GAAMq4D,EAAe,iBAAkBr4D,EAAGiI,OAAO9yC,OAC3DqyC,QAASxH,GAAMq4D,EAAe,iBAAkB,QAI5D51E,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,EAAC9E,UAAU,8CAClC5M,IAAAU,cAACiY,GAAc,CACX/L,UAAU,4CACVj6B,MAAM,gBACN6E,UAAWwoB,IAAMuc,YACjBpP,IAAI,SACJnN,IAAAU,cAAC4Y,GAAM,CACH,aAAW,sGACX1M,UAAU,gBACViE,QAASt9B,IACT+mC,mBAAoBA,IAAc,GAClC7O,OAAQF,EACR74B,MAAOgrE,EACPjnC,SAAUiG,GACNvc,EAAMo3E,8BAA8B76D,MAIhB,WAA/B46D,GACGt3E,IAAAU,cAAA,OAAKkM,UAAU,+CACX5M,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,YACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,aAEjBvc,IAAAU,cAAC4Y,GAAM,CACH,aAAW,YACX1M,UAAU,gBACViE,QAASp9B,IACT6mC,mBAAoBA,IAAc,GAClC7O,OAAQF,EACR74B,MAAOirE,EACPlnC,SAAUiG,GACNvc,EAAMq3E,2CAA2C96D,KAGxDihC,GAAmF,QAA7CA,EAAmCjrE,OACtEstB,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,yFAGlB,CAAC,MAAO,SAASj4B,SAAS6oE,EAAmCjrE,QAC1DstB,IAAAU,cAACiY,GAAc,CACXhmC,MAAOgrE,EAAmChrE,MAC1Cq6B,SAAS,4CACTG,IAAI,SACJnN,IAAAU,cAAC2jB,GAAe,CACZ,mBAAiB,oCACjB,aAAY,GAAGs5B,EAAmChrE,uCAAiF,QAA7CgrE,EAAmCjrE,MAAkB,GAAK,eAAemX,EAAQqzD,+BAA+B7oE,oBACtMiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAmBs4B,EAAmChrE,MACtDO,GAAG,gDACHszC,UAAwD,QAA7Cm3B,EAAmCjrE,MAAkB,GAAK,GACrEA,MAAOmX,EAAQqzD,+BACfzmC,SAAU8G,GAAM65D,EAAuC75D,EAAGiI,OAAO9yC,OAAO,GACxEqyC,QAASxH,GAAM65D,EAAuC,IACtDl7C,QAAS3e,GAAM65D,EAAuC75D,EAAGiI,OAAO9yC,OAAO,GACvEg0C,QAxFhC,SAAyCnJ,GAErCA,EAAGid,kBACHjd,EAAGsI,iBAGH,MACMG,GADgBzI,EAAG0I,eAAiBxsC,OAAOwsC,eAChBC,QAAQ,QACzCkxD,EAAuCpxD,GAAY,EACvD,IAgF4BhmB,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAAC75B,GAAG,yCAAwC,iCAKtC,WAA/BokG,GACGt3E,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,wBACNq6B,SAAS,gDACTG,IAAI,SACJnN,IAAAU,cAAC2jB,GAAe,CACZ,aAAY,oEAAiEx6B,EAAQqzD,+BAA+B7oE,oBACpHiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,wBAClBnyC,GAAG,4CACHszC,UAAW,IACX9zC,MAAOmX,EAAQqzD,+BACfzmC,SAAU8G,GAAM65D,EAAuC75D,EAAGiI,OAAO9yC,OACjEqyC,QAASxH,GAAM65D,EAAuC,MAC1Dp3E,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAAC75B,GAAG,yCAAwC,sCAIlC,WAA/BokG,GACGt3E,IAAAU,cAACo7B,GAAe,CACZ3zC,MAAM,GACNkwB,aAAW,EACX3J,SAAS,EACTzW,YAAapO,EAAQm0D,0BAA0B3pE,OAAS,EAClD,CACE4mB,YAAapR,EAAQg0D,6BACrBrkD,OAAQ3P,EAAQi0D,wBAChB1mD,MAAOvN,EAAQk0D,yBACf9lD,YAAapO,EAAQm0D,2BAEvB,KAENjiB,kBAAmBs7C,IAEK,WAA/BC,GACGt3E,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC+6B,GAAQ,CACLtzC,MAAO,GACPo+B,YAAY,EACZlO,aAAW,EACX3J,SAAS,EACTgtB,SAAU7xC,EAAQ+zD,yBAClBjiB,WAAYjf,GAAkBk5D,EAC1B,2BACmB,OAAnBl5D,EAA0B,GAAKA,EAAe/pC,SAEtDqtB,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,wBACNw6B,IAAI,QACJH,SAAS,wCAEThN,IAAAU,cAAC2jB,GAAe,CACZ,aAAY,mEAAsDx6B,EAAQm0D,0BAA0B3pE,oBACpGiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,wBAClBnyC,GAAG,uCACHszC,UAAW,GACX9zC,MAAOmX,EAAQm0D,0BACfvnC,SAAU8G,GAAMq4D,EAAe,4BAA6Br4D,EAAGiI,OAAO9yC,OACtEqyC,QAASxH,GAAMq4D,EAAe,4BAA6B,QAI5E,EClLE6B,GAAkBj9D,IAA6D,IAA5D,UAACrlB,EAAS,aAAEC,EAAY,YAAEC,EAAW,eAAEugF,GAAep7D,EAElF,OACIxa,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,eACNw6B,IAAI,QACJH,SAAS,wBAEThN,IAAAU,cAAC2jB,GAAe,CACZ,aAAY,2DAAwDlvB,EAAU9gB,oBAC9EiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,eAClBnyC,GAAG,uBACHszC,UAAW,IACX9zC,MAAOyiB,EACPshB,SAAU8G,GAAMq4D,EAAe,YAAar4D,EAAGiI,OAAO9yC,OACtDqyC,QAASxH,GAAMq4D,EAAe,YAAa,QAGvD51E,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,YACNw6B,IAAI,QACJH,SAAS,2BAEThN,IAAAU,cAAC2jB,GAAe,CACZ,aAAY,uDAA+CjvB,EAAa/gB,oBACxEiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,YAClBnyC,GAAG,0BACHszC,UAAW,GACX9zC,MAAO0iB,EACPqhB,SAAU8G,GAAMq4D,EAAe,eAAgBr4D,EAAGiI,OAAO9yC,OACzDqyC,QAASxH,GAAMq4D,EAAe,eAAgB,OAEtD51E,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,WACNw6B,IAAI,QACJH,SAAS,0BAEThN,IAAAU,cAAC2jB,GAAe,CACZ,aAAY,sDAAmDhvB,EAAYhhB,oBAC3EiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,WAClBnyC,GAAG,yBACHszC,UAAW,GACX9zC,MAAO2iB,EACPohB,SAAU8G,GAAMq4D,EAAe,cAAer4D,EAAGiI,OAAO9yC,OACxDqyC,QAASxH,GAAMq4D,EAAe,cAAe,QAG1D,EC3CE8B,GAAyBv3E,IAClC,MAAOtW,EAAS6iD,GAAcx9B,mBAAS/O,EAAMtW,UACvC,KAACtJ,EAAI,UAAE8sC,EAAS,WAAE5C,GAAcqC,GAAmB,CACrDzyC,IAAK0sC,GAAShkC,aAAa+a,KAC3BivB,UAAW,CAACsT,KAAM,kBAClBrT,2BAA4BlqC,MAGhC,SAASozC,EAAmBx9C,EAAMhG,GAC9Bg6D,EAAW,IAAI7iD,EAAS,CAACnR,GAAOhG,GACpC,CAoDA,SAASilG,EAAkBp3F,EAAM+e,GAC7B,IAAIqlE,EAAiB,CAAC,EACtB,IAAK,IAAKjsF,EAAMhG,KAAUsJ,OAAOC,QAAQsE,GACrCokF,EAAerlE,EAAkB5mB,IAAShG,EAE9Cg6D,EAAW,IAAI7iD,KAAY86E,GAC/B,CA+BA,OAAOt3C,EAAYrtB,IAAAU,cAACmN,EAAM,MAAO4c,EAEzBzqB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEsiC,GACbzqB,IAAAU,cAACwR,EAAY,CAACE,QAAM,EAAC3C,QAAStP,EAAM6yB,gBAAgB,OAIxDhzB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,WAASkM,UAAU,mCACf5M,IAAAU,cAACgM,EAAI,CAACE,UAAU,mCAAkC,iCAClD5M,IAAAU,cAAC+2E,GAAe,CACZtiF,UAAWtL,EAAQsL,UACnBC,aAAcvL,EAAQuL,aACtBC,YAAaxL,EAAQwL,YACrBugF,eAAgB1/C,IACpBl2B,IAAAU,cAACgM,EAAI,CAACE,UAAU,mCAAkC,0BAClD5M,IAAAU,cAACy2E,GAAqB,CAClBttF,QAASA,EACT0tF,8BAtGpB,SAA2C7kG,GACvCg6D,GAAWkrC,IACP,IAAI7xC,EAAM,CACN2X,sBAAuBhrE,EACvBwqE,+BAAgC,GAChCc,0BAA2B,IAmB/B,OAjBAjY,EAAwC,mCACpB,WAAhBrzD,EAAMA,MACAe,IAAqCiN,QACnCjO,GAA2B,QAAjBA,EAAOC,QAAiB,GACpC+qE,GACsC,mCAC5B,WAAhB/qE,EAAMA,QACNqzD,EAAM,IAAIA,EACN8X,6BAA8B,GAC9BC,wBAAyB,GACzBC,yBAA0B,GAC1BC,0BAA2B,KAGf,WAAhBtrE,EAAMA,QACNqzD,EAA8B,yBAAI,IAE/B,IAAI6xC,KAAgB7xC,EAAI,GAEvC,EA6EoBqxC,uCAhEpB,SAAoD1kG,GAAiB0B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,KAE7D1B,EAAQA,EAAM8D,QAAQ,SAAU,KAEpC0/C,EAAmB,iCAAkCxjD,EACzD,EA4DoB8kG,2CA5EpB,SAAwD9kG,GACpDg6D,GAAWkrC,IACP,IAAI7xC,EAAM,CAAC4X,mCAAoCjrE,GAK/C,OAJIklG,EAAYj6B,mCAAmCjrE,QAAUA,EAAMA,QAE/DqzD,EAAoC,+BAAI,IAErC,IAAIl8C,KAAYk8C,EAAI,GAEnC,EAoEoB6vC,eAAgB1/C,EAChBmhD,uBAzCpB,SAAoC92F,GACnB,OAATA,IAEAA,EAAO,CACH0a,YAAa,GACbzB,OAAQ,GACRpC,MAAO,GACPa,YAAa,KAGrB0/E,EAAkBp3F,EAAM,CACpB0a,YAAa,+BACbzB,OAAQ,0BACRpC,MAAO,2BACPa,YAAa,6BAErB,IA0BgB+H,IAAAU,cAACgM,EAAI,CAACE,UAAU,mCAAkC,gCAClD5M,IAAAU,cAACi1E,GAAwB,CACrB9rF,QAASA,EACT9G,aAAcxC,EAAKwC,aACnB6yF,eAAgB1/C,EAChB2/C,4BA1DpB,SAAyCt1F,GACrCo3F,EAAkBp3F,EAAM,CACpBqS,YAAa,2CACbQ,UAAW,yCACXD,SAAU,wCACV9F,SAAU,wCACVkD,YAAa,2CACbsD,OAAQ,uCAEhB,KAmDYmM,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACE,QAAM,EAAC3C,QAAStP,EAAM6yB,gBAAgB,UACpDhzB,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC4F,QAxHtC,WACItP,EAAM8yB,gBAAgBppC,EAC1B,GAsHmE,sBAIlE,EC5HCguF,GAAU,CACZC,uBACI,CAAC,yBAA0B,2BAAuB,GACtDC,wBACI,CAAC,0BAA2B,4BAAwB,GACxDC,uBACI,CAAC,yBAA0B,0CAAiC,GAChEC,wBACI,CAAC,0BAA2B,2CAAkC,GAClEC,cAAe,CACX,gBACA,gFAA0D,GAC9DC,eAAgB,CACZ,iBACA,iFAA2D,GAC/DC,gCAAiC,CAC7B,kCACA,sDAA6C,GACjDC,iCAAkC,CAC9B,mCACA,uDAA8C,GAClDC,uBAAwB,CACpB,yBAA0B,gDAAuC,GACrEC,wBAAyB,CACrB,0BAA2B,iDAAwC,GACvEC,UAAW,CAAC,YAAa,yCAAgC,IACzDC,WAAY,CAAC,aAAc,0CAAiC,KAE1DC,GAAiB18F,OAAO6nB,OAAOg0E,IAASz3F,MAAK,CAACgyD,EAAIC,IAAOD,EAAG,GAAKC,EAAG,KACpEsmC,GAAiB,0BAIjBC,GAAoB,CACtB/7E,eAAgB,CAAC,kBAAmB,sBACpCC,mBAAoB,CAAC,sBACrBC,+BAAgC,CAAC,sBACjCC,mBAAmB,GAEjB67E,GAAyB,CAC3B,CAAC,YAAa,SACd,CAAC,eAAgB,QACjB,CAAC,cAAe,YAChB,CAAC,iBAAkB,iBACnB,CAAC,wBAAyB,aAC1B,CAAC,qCAAsC,kBACvC,CAAC,iCAAkC,cACnC,CAAC,2BAA4B,QAC7B,CAAC,+BAAgC,OACjC,CAAC,0BAA2B,OAC5B,CAAC,2BAA4B,MAC7B,CAAC,4BAA6B,eAC9B,CAAC,qBAAsB,aACvB,CAAC,qBAAsB,YACvB,CAAC,QAAS,SACV,CAAC,2CAA4C,eAC7C,CAAC,yCAA0C,qBAC3C,CAAC,wCAAyC,kBAC1C,CAAC,wCAAyC,aAC1C,CAAC,2CAA4C,cAC7C,CAAC,sCAAuC,UACxC,CAAC,0CAA2C,aAC5C,CAAC,kCAAmC,cACpC,CAAC,gCAAiC,cAClC,CAAC,yBAA0B,iBAC3B,CAAC,uBAAwB,iBACzB,CAAC,OAAQ,WAEPC,GAAmC,CAAC,EAC1C,IAAK,IAAKC,GAAKC,MAAQH,GACnBC,GAAiCC,IAAOC,GAG5C,MAAMC,GAA0C,CAC5C,2CACA,yCACA,wCACA,wCACA,2CACA,uCAgJJ,SAASprD,GAAoBhkC,GACzB,MAAMtJ,EAAO,CAAC,EACd,IAAK,IAAK7H,EAAMhG,KAAUsJ,OAAOC,QAAQ4N,GACjC,CACA,wBACA,qCACA,sBACF/U,SAAS4D,GACP6H,EAAK7H,GAAQhG,EAAMA,MACZA,IAAU+qE,GAA2C/kE,KACxDugG,GAAwCnkG,SAAS4D,GAEjD6H,EAAK7H,GAAQhG,EAAMA,MAEnB6N,EAAK7H,GAAQhG,EAAMqG,QAI/B,OAAOwH,CACX,CAGO,MAAM24F,GAAkB/4E,IAC3B,MAAM1lB,EAAS,IAAIC,gBAAgBylB,EAAM7gB,SAASC,SAE3CkC,EAAYooD,GAAiB36B,mBArKxC,SAA8BviB,GAC1B,IAAIlL,EAAa5L,SAAS8W,EAAU7R,IAAI,WAIxC,OAHM2G,EAAa,IACfA,EAAa,GAEVA,CACX,CA+JiD03F,CAAqB1+F,KAE3D6oC,EAAc81D,GAAmBlqE,mBAAS,OAC1CrlB,EAAS6iD,GAAcx9B,mBAAS,OAChC6T,EAAgBs2D,GAAqBnqE,mBAAS,IAC9C4jB,EAAcwmD,GAAmBpqE,oBAAS,GAoDjD2J,qBAlDA,WAEIugE,EACI1sF,aAA2BjS,EAAQo9F,GAASc,KAGhD,MAAMY,EAA6BC,IAC/BA,EAAc,IAAIA,EACd37B,6BAA8B,GAC9BC,wBAAyB,GACzBC,yBAA0B,GAC1BC,0BAA2B,IAE/BtR,EAAW8sC,GACXH,EAAkBh6B,GAAyCm6B,GAAa,EAEtEC,EApLd,SAA2B9sF,GAEvB,IAAI9C,EAAU,CACV6zD,sBACID,GAA2CC,sBAC/CC,mCACIF,GAA2CE,mCAC/CT,+BACIO,GAA2CP,+BAC/CU,yBACIH,GAA2CG,yBAC/CC,6BACIJ,GAA2CI,6BAC/CC,wBACIL,GAA2CK,wBAC/CC,yBACIN,GAA2CM,yBAC/CC,0BACIP,GAA2CO,2BAGnD,MAAM07B,EAAYC,IACd,MAAMjnG,EAAQia,EAAU7R,IAAIg+F,GAAiCa,IACzDjnG,GAASA,EAAM2B,SACfwV,EAAQ8vF,GAAajnG,EACzB,EAGJ,IAAK,IAAKgG,EAAMhG,KAAUsJ,OAAOC,QACzBwhE,IAA6C,CACjD,GAAI,CACA,qCACA,iCACA,2BACA,+BACA,0BACA,2BACA,6BACF3oE,SAAS4D,GAAS,SACpB,IAAIkhG,EAAmBjtF,EAAU7R,IAC7Bg+F,GAAiCpgG,IACrC,GAAa,0BAATA,GACA,IAAK,IAAIjG,KAAUc,IACf,GAAIqmG,GAAoBnnG,EAAOC,QAAUknG,EAAkB,CAEvD,GADA/vF,EAAQnR,GAAQjG,EACS,WAArBmnG,EAA+B,CAG/B,MAAM/7B,EAA+BlxD,EAAU7R,IAC3Cg+F,GAA+D,+BAAM,KACnEh7B,EAA0BnxD,EAAU7R,IACtCg+F,GAA0D,0BAAM,KAC9D/6B,EAA2BpxD,EAAU7R,IACvCg+F,GAA2D,2BAAM,KAC/D96B,EAA4BrxD,EAAU7R,IACxCg+F,GAA4D,4BAAM,KAClEj7B,GACGC,GACAC,GACAC,IAEHn0D,EAAU,IAAIA,EACVg0D,+BACAC,0BACAC,2BACAC,8BAIR,MAAML,EAAqChxD,EAAU7R,IACjDg+F,GAAqE,qCAAM,GAC/E,IAAKn7B,EAAmCtpE,OAAU,MAGlD,IAAK,IAAIwlG,KAASpmG,IACd,GAAIkqE,IAAuCk8B,EAAMnnG,MAAO,CACpDmX,EAA4C,mCAAIgwF,EAEhDH,EAAS,kCACT,KACJ,CAER,MACI7vF,EAA4C,mCACxCpW,IAAqCiN,QACjCjO,GAA2B,QAAjBA,EAAOC,QACnB,GACmB,WAArBknG,IAEAF,EAAS,kCAETA,EAAS,4BAETA,EAAS,8BAGjB,KACJ,OAED,GAAa,uBAAThhG,EAA+B,CAEtC,IAAIohG,GAAY,EAChB,IAAK,IAAIrnG,KAAUF,IACf,GAAIqnG,GAAoBnnG,EAAOC,QAAUknG,EAAkB,CACvD/vF,EAAQnR,GAAQjG,EAChBqnG,GAAY,EACZ,KACJ,CAECA,IAEDjwF,EAAQnR,GAAQhG,EAExB,MAAWumG,GAAwCnkG,SAAS4D,IACxDkhG,EAAmB/jG,SAAS+jG,GAE5B/vF,EAAQnR,GAAQkhG,EAAmB,EAC7B,CAAClnG,MAAOknG,GAAoBlnG,GAC3B,CAEP,kCAAmC,gCACnC,yBAA0B,wBAC5BoC,SAAS4D,GACPmR,EAAQnR,GAAQ,oBAAoB6F,KAAKq7F,GACnCA,EAAmBlnG,EAEzBmX,EAAQnR,GAAQkhG,GAAoBlnG,CAE5C,CACA,OAAOmX,CACX,CAkDyBkwF,CAAkBt/F,GACnC,IAAIowC,EAAW,KA6Bf,MA5B6C,WAAzC4uD,EAAS/7B,sBAAsBhrE,OAAsB+mG,EAASz7B,0BAA0B3pE,OACxFw2C,EAAWpmB,EACP,0BACA,MACA,CAAC,EACD,CAACo4B,oBAAqB48C,EAASz7B,4BAC9Bz9D,IACG,IAAK,IAAI,YAACmV,EAAW,OAAE1C,EAAM,QAAE3E,EAAO,SAAEgD,KAAa9Q,EAAK0U,aAAe,GAErE,GAAIS,IAAgB+jF,EAAS57B,8BACtB7qD,IAAWymF,EAAS37B,yBACpBzvD,IAAYorF,EAAS17B,0BACrB1sD,IAAaooF,EAASz7B,0BAIzB,OAFAtR,EAAW+sC,QACXJ,EAAkBh6B,GAAyCo6B,IAInEF,EAA0BE,EAAS,IAEvC,IAAMF,EAA0BE,KAChC,IAAMF,EAA0BE,MAGpC/sC,EAAW+sC,GACXJ,EAAkBh6B,GAAyCo6B,KAExD,KACc,OAAb5uD,GAAoBA,EAASI,OAAO,CAEhD,GACsC,IAEtC,MAAM,KACF1qC,EAAI,UAAE8sC,EAAS,WAAE5C,EAAU,aAAE6D,EAAY,sBAAEF,GAC3CR,GACAnsC,EAAY6hC,EAAcz5B,EAASgkC,GAvRtB,GADK,WAEL,2BAwRbirD,GAAkCF,KAEhC,iBAAEl3E,GAAqBye,qBAAWjf,GAOxC,GANA2X,qBAAU,KACFyV,GACA5sB,EAAiB,iBACrB,GACD,CAAC4sB,IAEAF,EACA,OAAOpuB,IAAAU,cAACmN,EAAM,MAGlB,GAAIygB,EACA,OAAOtuB,IAAAU,cAACyiB,GAAgB,MAgB5B,SAASkW,IACLigD,GAAgB,EACpB,CASA,SAASpC,EAAsC/hF,GAC3C00C,EAAc,GACd,MAAM/8C,EAAS+qF,GAAQc,IACvBS,EAAgB,CAAC1mG,MAAOoa,EAAO,GAAIna,MAAOma,EAAO,KACjD4/C,EAAW,IAAI+Q,GAA4CtoD,aAC/D,CAEA,OACI6K,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACoQ,EAAW,CAACE,uBAAqB,GAC9BhR,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,oCAEzC5M,IAAAU,cAAC0iB,GAAmB,CAChBruB,MAAM,2BACNnT,MAAOrB,EAAOA,EAAKqB,MAAQ,IAC/Boe,IAAAU,cAACmyB,GACG,CACAvP,aAAcA,EACdE,cAAek1D,GACfj1D,aAvCZ,SAA0BH,GACtBumB,EAAc,GACduvC,EAAgB91D,EACpB,EAsCYz5B,QAASA,EACTk5B,eAAgBA,EAChB+P,aAAcA,EACdC,iBAAkB2kD,GAClB1kD,eAAgBqG,EAChBpW,cAzCZ,WACIq2D,GAAgB,EACpB,EAwCYrmD,gBAlCZ,SAA6BppC,GACzBggD,EAAc,GACd6C,EAAW7iD,GACXwvC,IACAggD,EAAkBh6B,GAAyCx1D,GAC/D,IA8BSwjC,EACKrtB,IAAAU,cAACmN,EAAM,MACN4c,EACGzqB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEsiC,GAEXlqC,GAAQA,EAAKsuC,QAAQx6C,OAAS,EAEtB2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACkyB,GAAW,CACRxB,gBAAiB,CAAC,aAAc,SAAU,kBAAc,SAEvD7wC,EAAKsuC,QAAQr8C,KAAIoV,GACdoY,IAAAU,cAAC+1E,GAAoB,CACjB7uF,cAAeA,EACf9L,IAAK8L,EAAc1U,GACnBwjG,iCAAkCQ,OAG9Cl3E,IAAAU,cAACwyB,GAAU,CACPC,YAAa1xC,EACbstC,QAASxuC,EAAKwuC,QACdD,QAASvuC,EAAKuuC,QACdsE,iBA3ExC,WAAsC,IAAZ9gB,IAAIl+B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAC1By1D,GAAcr3B,GAAQF,EAAOE,EAAO,EAAIz8B,KAAKC,IAAIw8B,EAAM,EAAG,IAC9D,MA6E0BxS,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,oFAI/B,EC3aE6xF,GAAkBx/D,IAAiC,IAAhC,QAAClnB,EAAO,QAAE0c,EAAO,OAAEsS,GAAO9H,EACtD,MAAMupD,EAA6B,YAAjBzwE,EAAQtJ,MAEnBtR,EAAMuhG,GAAW/qE,mBAAS5b,EAAQ5a,OAClCizC,EAAUC,GAAe1c,oBAAS,IAClClnB,EAAQ6jC,GAAa3c,mBAAS,CAAC,IAC/BkpB,EAAgB8hD,GAAqBhrE,mBAAS,MA0CrD2J,qBAxCA,WACI,IAAK8S,EAAY,OAEjB,IAAId,EAAW,KAiCf,OALAA,EAAWpmB,EACP,cAAcs/D,EAAY,UAAY,gBAAgBzwE,EAAQpgB,KAC9D,MAAO,CAAC,EAAG,CAACwF,SA5BhB,SAAyB6H,GACrBsqC,EAAW,KACXvI,EAAOhvB,EAAQpgB,GAAIqN,EAAKwjF,EAAY,UAAY,cACpD,IAEA,SAAuBxjF,GACnBsqC,EAAW,KACXqvD,EAAkB35F,EAAKiF,SACvBomC,GAAY,EAChB,IAEA,SAAiC7hC,GAC7B8gC,EAAW,KACXqvD,EAA6B,MAAXnwF,EACZ,0CAAqCg6E,EAAY,WAAa,YAC9D,4DAAwCh6E,MAE9C6hC,GAAY,EAChB,IAEA,SAAgC5jC,GAC5B6iC,EAAW,KACXgB,EAAUltB,YAA8B3W,EAAQ,CAAC2U,oBAAoB,KACrEivB,GAAY,EAChB,IAOO,KACc,OAAbf,GAAoBA,EAASI,OAAO,CAEhD,GACgB,CAACU,IAOjB,MAAMM,GAAiBjkC,EAAOtP,MAAQ,IAAIrE,OAAS,EACnD,OACI2rB,IAAAU,cAACoc,GAAY,CACTC,eAAe,iBACfnQ,UAAU,SACVoD,QAASA,GAEThQ,IAAAU,cAAA,MAAIxtB,GAAG,iBAAiB05B,UAAU,qBAAoB,UAAQm3D,EAAY,UAAY,YACtF/jE,IAAAU,cAACgM,EAAI,CAACE,UAAU,sBAAqB,SAAY,IAAC5M,IAAAU,cAACgM,EAAI,CAACC,cAAY,GAAErZ,EAAQkqD,YAC9Ex9C,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,aACNw6B,IAAI,QACJH,SAAS,WAEThN,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkB4H,EAAgB,aAAe,KACjD,aAAY,yDAAiDvzC,EAAKrE,oBAClE,iBAAe,EACf,gBAAe,IACfiyC,gBAAc,EACdjB,kBAAkB,aAClBpb,SAAU0hB,EACVnd,WAAS,EACTt7B,GAAG,UACHw7B,QAASud,EACTzF,UAAW,IACX0F,SAAU63C,EACVrxF,MAAOgG,EACP+9B,SAAU8G,GAAM08D,EAAQ18D,EAAGiI,OAAO9yC,OAClCqyC,QAASxH,GAAM08D,EAAQ,MAC1BhuD,GAAiBjsB,IAAAU,cAAA,MAAIxtB,GAAG,cAAc8U,EAAOtP,KAAKlG,KAAI,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,OAElGqgB,EAAQ6mF,6BAA+B,GACpCn6E,IAAAU,cAACwiB,GAAgB,CAAC19B,QAAS,4GAA0Fu+E,EAAY,UAAY,gBAEjJ/jE,IAAAU,cAACuhB,GAAoB,CAAChY,SAAU0hB,EAAUtJ,SAAUrS,EAASsS,OAxCrE,WACIuJ,EAAU,CAAC,GACXD,GAAY,EAChB,IAsC4B,OAAnBwM,GACGp4B,IAAAU,cAACgiB,GAAwB,CACrBl9B,QAAS4yC,EACTvV,YAAaA,IAAMq3D,EAAkB,QAElC,ECrGjBE,GACF,wFAISC,GAAiB7/D,IACU,IADT,QAAClnB,EAAO,4BAAEgnF,EAA2B,0BAC5DC,GAA0B//D,EAC1B0T,EAAUC,cACd,MAAM41C,EAA6B,YAAjBzwE,EAAQtJ,MAClBvG,UAAWyR,GAAS5B,EAkBtB6mF,EAA+B7mF,EAAQ6mF,8BAAgC,GAEvE,YAAE/4E,GAAgB+e,qBAAWjf,GAEnC,OACIlB,IAAAU,cAACkwB,KAAY,KACT5wB,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAAA,OAAKkM,UAAU,mCACX5M,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAMi0D,EAAY,QAAU,kBACrD/jE,IAAAU,cAACgM,EAAI,KAAEq3D,EAAY,UAAY,cAGvC/jE,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAAA,OAAKkM,UAAU,qCACX5M,IAAAU,cAAA,OAAKkM,UAAU,+BACX5M,IAAAU,cAACgM,EAAI,KAAExX,EAAKjS,SAAS,IAAEiS,EAAK/R,SAC5B6c,IAAAU,cAACgM,EAAI,CAACU,IAAI,UAAUR,UAAU,oCAAoC1X,EAAKpG,QAE3EkR,IAAAU,cAACgjB,GAAiB,CAACG,cAAc,+KAC7B7jB,IAAAU,cAACgM,EAAI,CAACU,IAAI,UAAUR,UAAU,kCAAiC,MAAI1X,EAAK5E,YACxE0P,IAAAU,cAAA,MAAIkM,UAAU,yCACTxL,EAAY8B,yBACTlD,IAAAU,cAAA,UACIV,IAAAU,cAACwR,EAAY,CAACK,UAAQ,EAAC9C,QAnCtBunE,KAC7B9oD,EAAQ1vC,KAAK4nB,EAAKe,aAAaP,OAAO1R,EAAKhiB,IAAI,GAkCuC,sCAKlE8sB,IAAAU,cAAA,UAAIV,IAAAU,cAACwR,EAAY,CAACK,UAAQ,EAAC9C,QA5CXwnE,KACpCqD,EAA4BplF,EAAKpG,MAAM,GA2CkD,8BACpEsS,EAAY1T,gBACTsS,IAAAU,cAAA,UACIV,IAAAU,cAACwR,EAAY,CAACK,UAAQ,EAAC9C,QAvCTynE,KAC1ChpD,EAAQ1vC,KAAK,GAAG4nB,EAAKmB,yBAAyBzJ,cAAc5I,EAAKpG,QAAQsrF,KAAuC,GAsCb,gCAS/Fp6E,IAAAU,cAACmwB,KAAa,KACV7wB,IAAAU,cAAA,OAAKkM,UAAU,qCACX5M,IAAAU,cAAA,OAAKkM,UAAU,+BACX5M,IAAAU,cAACgM,EAAI,KAAEpZ,EAAQkqD,YACfx9C,IAAAU,cAACgM,EAAI,CAACU,IAAI,UAAUR,UAAU,oCAAoCtZ,EAAQ5a,QAE5E0oB,EAAY1T,gBAAkB4F,EAAQ66C,UACpCnuC,IAAAU,cAACgjB,GAAiB,CAACG,cAAc,mDAC7B7jB,IAAAU,cAAA,MAAIkM,UAAU,yCACTxL,EAAY1T,gBACbsS,IAAAU,cAAA,UACIV,IAAAU,cAACwR,EAAY,CACTjI,UAAWkwE,EACX5nE,UAAQ,EACR9C,QA1DW+qE,KAC3CtsD,EAAQ1vC,KAAK,GAAG4nB,EAAKmB,yBAAyBzJ,kBAAkBxK,EAAQkqD,aAAa48B,KAAuC,GA0D/F,iCAEGp6E,IAAAU,cAAA,QACIkM,UAAU,oCACV7X,MAAM,kCAAwBolF,KAIzC7mF,EAAQ66C,SACLnuC,IAAAU,cAAA,UACIV,IAAAU,cAACwR,EAAY,CACTK,UAAQ,EACR9C,QAAS8N,GAAMg9D,EAA0BjnF,IAC5C,UACWywE,EAAY,UAAY,iBASrD,EC/FV0W,GAAmBt6E,IAC5B,MAAOtW,EAAS6iD,GAAcx9B,mBAAS/O,EAAMtW,UACvC,KAACtJ,EAAI,UAAE8sC,EAAS,WAAE5C,GAAcqC,GAAmB,CACrDzyC,IAAK0sC,GAAShkC,aAAa+a,KAC3BivB,UAAW,CAACsT,KAAM,wBAClBrT,2BAA4BlqC,MAGhC,SAASozC,EAAmBx9C,EAAMhG,GAC9Bg6D,EAAW,IAAI7iD,EAAS,CAACnR,GAAOhG,GACpC,CAMA,SAAS6hE,EAAgCh0D,GACrCmsD,EAAW,IAAI7iD,KAAYtJ,GAC/B,CAEA,OAAO8sC,EAAYrtB,IAAAU,cAACmN,EAAM,MAAO4c,EAEzBzqB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEsiC,GACbzqB,IAAAU,cAACwR,EAAY,CAACE,QAAM,EAAC3C,QAAStP,EAAM6yB,gBAAgB,OAIxDhzB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,WAASkM,UAAU,mCACf5M,IAAAU,cAACgM,EAAI,KAAC,iCACN1M,IAAAU,cAAC+2E,GAAe,CACZtiF,UAAWtL,EAAQsL,UACnBC,aAAcvL,EAAQuL,aACtBC,YAAaxL,EAAQwL,YACrBugF,eAAgB1/C,IACpBl2B,IAAAU,cAACgM,EAAI,KAAC,sCACN1M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,WACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,YAAaoB,SAAS,MACvC3d,IAAAU,cAAC4Y,GAAM,CACH,aAAW,WACX1M,UAAU,gBACV0N,mBAAoBA,IAAc,GAClCzJ,QAASz+B,IAA6BI,KAAI4jD,IAAC,CAAM1jD,MAAO0jD,EAAE,GAAIzjD,MAAOyjD,EAAE,OACvE3qB,OAAQF,EACR74B,MAAO,CAACA,MAAOmX,EAAQG,KAAKtX,OAASN,IAA6B,GAAG,GAAIO,MAAOkX,EAAQG,KAAKrX,OAASP,IAA6B,GAAG,IACtIqkC,SAAWiG,GAAmBwZ,EAAmB,OAAQxZ,MAEjE1c,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,QACNw6B,IAAI,QACJH,SAAS,yBAEThN,IAAAU,cAAC2jB,GAAe,CACZ,aAAW,QACXzX,UAAU,iBACVyY,kBAAkB,QAClBnyC,GAAG,wBACHR,MAAOmX,EAAQ2zD,WACf/mC,SAAU8G,GAAM2Y,EAAmB,aAAc3Y,EAAGiI,OAAO9yC,OAC3DqyC,QAASxH,GAAM2Y,EAAmB,aAAc,QAG5Dl2B,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,aACNw6B,IAAI,QACJH,SAAS,mBAEThN,IAAAU,cAAC2jB,GAAe,CACZ,aAAW,aACXzX,UAAU,iBACVyY,kBAAkB,aAClBnyC,GAAG,kBACHR,MAAOmX,EAAQnR,KACf+9B,SAAU8G,GAAM2Y,EAAmB,OAAQ3Y,EAAGiI,OAAO9yC,OACrDqyC,QAASxH,GAAM2Y,EAAmB,OAAQ,QAGtDl2B,IAAAU,cAACg9B,GAAoC,CACjCrwC,SAAUxD,EAAQwD,SAClBizC,eAAgB,GAChBr2B,UAAU,EACV1Z,YAAa1G,EAAQ0G,YACrBgwC,kBAAmB,GACnBloB,aAAa,EACbgoB,KAAK,uBACLztC,YAAa/I,EAAQ+I,YACrB6tC,kBAAmB,GACnB19C,aAAcxC,EAAKwC,aACnBw8C,sBAAsB,EACtBpsC,SAAUtJ,EAAQsJ,SAClButC,eAAgB,GAChBttC,UAAWvJ,EAAQuJ,UACnButC,gBAAiB,GACjB9sC,OAAQhK,EAAQgK,OAChB+sC,aAAc,GACdxC,uBAAuB,EACvBM,iBAAkB6V,EAClBvV,oBAAqBuV,EACrBvW,oBAAqBuW,EACrB/V,iBAAkB+V,EAClBjW,kBAAmBiW,EACnBzV,eAAgByV,KAExBv0C,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACE,QAAM,EAAC3C,QAAStP,EAAM6yB,gBAAgB,UACpDhzB,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC4F,QAlGtC,WACItP,EAAM8yB,gBAAgBppC,EAC1B,GAgGmE,sBAIlE,EC5GCguF,GAAU,CACZ7tF,KAAM,CAAC,OAAQ,qBAAiB,GAChCmL,UAAW,CAAC,YAAa,qCAAiC,GAC1DqoD,WAAY,CAAC,aAAc,aAAc,IAEvCk7B,GAAiB18F,OAAO6nB,OAAOg0E,IAASz3F,MAAK,CAACgyD,EAAIC,IAAOD,EAAG,GAAKC,EAAG,KACpEsmC,GAAiB,OAIjBE,GAAyB,CAC3B,CAAC,YAAa,SACd,CAAC,eAAgB,QACjB,CAAC,cAAe,YAChB,CAAC,OAAQ,OACT,CAAC,aAAc,SACf,CAAC,OAAQ,SACT,CAAC,cAAe,eAChB,CAAC,YAAa,qBACd,CAAC,WAAY,kBACb,CAAC,WAAY,aACb,CAAC,cAAe,cAChB,CAAC,SAAU,UACX,CAAC,OAAQ,WAEPC,GAAmC,CAAC,EAC1C,IAAK,IAAKC,GAAKC,MAAQH,GACnBC,GAAiCC,IAAOC,GA2C5C,SAASnrD,GAAoBhkC,GACzB,MAAMtJ,EAAO,CAAC,EACd,IAAK,IAAK7H,EAAMhG,KAAUsJ,OAAOC,QAAQ4N,GACjC,CAAC,QAAU/U,SAAS4D,GAChB,CAAC,UAAW,cAAc5D,SAASpC,EAAMA,SACzC6N,EAAK7H,GAAQhG,EAAMA,OAEhBA,IAAU6qE,GAAqC7kE,KAClD,CACA,cAAe,YAAa,WAAY,WACxC,cAAe,UACjB5D,SAAS4D,GACP6H,EAAK7H,GAAQhG,EAAMA,MAEnB6N,EAAK7H,GAAQhG,EAAMqG,QAI/B,OAAOwH,CACX,CAGO,MAAMm6F,GAAYv6E,IACrB,MAAM1lB,EAAS,IAAIC,gBAAgBylB,EAAM7gB,SAASC,SAC3CkC,EAAYooD,GAAiB36B,mBA/DxC,SAA8BviB,GAC1B,IAAIlL,EAAa5L,SAAS8W,EAAU7R,IAAI,WAIxC,OAHM2G,EAAa,IACfA,EAAa,GAEVA,CACX,CAyDiD03F,CAAqB1+F,KAE3D6oC,EAAc81D,GAAmBlqE,mBAAS,OAC1CrlB,EAAS6iD,GAAcx9B,mBAAS,OAChC6T,EAAgBs2D,GAAqBnqE,mBAAS,IAC9C4jB,EAAcwmD,GAAmBpqE,oBAAS,GAajD2J,qBAXA,WAEIugE,EACI1sF,aAA2BjS,EAAQo9F,GAASc,KAGhD,MAAMc,EApEd,SAA2B9sF,GACvB,IAAI9C,EAAU,CAAC,EACf,IAAK,IAAKnR,EAAMhG,KAAUsJ,OAAOC,QAAQshE,IAAuC,CAC5E,IAAIq8B,EAAmBjtF,EAAU7R,IAC7Bg+F,GAAiCpgG,IACrC,GAAa,SAATA,EAAiB,CACjB,IAAIohG,GAAY,EAChB,IAAK,IAAID,KAASznG,IACd,GAAIwnG,GAAoBA,EAAiBxjG,aAAeyjG,EAAM,GAAI,CAC9DhwF,EAAQnR,GAAQ,CAAChG,MAAOmnG,EAAM,GAAIlnG,MAAOknG,EAAM,IAC/CC,GAAY,EACZ,KACJ,CAECA,IACDjwF,EAAQnR,GAAQhG,EAExB,KAAW,CACP,cAAe,YAAa,WAAY,WAAY,cACpD,UACFoC,SAAS4D,IACPkhG,EAAmB/jG,SAAS+jG,GAE5B/vF,EAAQnR,GAAQkhG,EAAmB,EAAI,CAAClnG,MAAOknG,GAAoBlnG,GAEnEmX,EAAQnR,GAAQkhG,GAAoBlnG,CAE5C,CACA,OAAOmX,CACX,CAuCyBkwF,CAAkBt/F,GACnCiyD,EAAW+sC,GACXJ,EAAkBj6B,GAAmCq6B,GACzD,GAEsC,IAEtC,MAAM,KACFl5F,EAAI,UAAE8sC,EAAS,WAAE5C,EAAU,aAAE6D,EAAY,sBAAEF,EAAqB,WAChEY,GACApB,GACAnsC,EAAY6hC,EAAcz5B,EAASgkC,GA9GtB,GADK,sBAEL,gCA+GbirD,GAAkC,CAAC,GAAG,IACnC6B,EAAeC,GAAoB1rE,mBAAS,OAE7C,iBAAExN,GAAqBye,qBAAWjf,GAOxC,GANA2X,qBAAU,KACFyV,GACA5sB,EAAiB,sBACrB,GACD,CAAC4sB,IAEAF,EACA,OAAOpuB,IAAAU,cAACmN,EAAM,MAGlB,GAAIygB,EACA,OAAOtuB,IAAAU,cAACyiB,GAAgB,MAY5B,SAASkW,IACLigD,GAAgB,EACpB,CASA,SAASrC,EAAgC9hF,GACrC00C,EAAc,GACd,MAAM/8C,EAAS+qF,GAAQc,IACvBS,EAAgB,CAAC1mG,MAAOoa,EAAO,GAAIna,MAAOma,EAAO,KACjD4/C,EAAW,IAAI6Q,GAAsCpoD,aACzD,CAWA,OACI6K,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACoQ,EAAW,CAACE,uBAAqB,GAC9BhR,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,wCAEzC5M,IAAAU,cAAC0iB,GAAmB,CAChBruB,MAAM,kCACNnT,MAAOrB,EAAOA,EAAKqB,MAAQ,IAC/Boe,IAAAU,cAACmyB,GACG,CACAvP,aAAcA,EACdE,cAAek1D,GACfj1D,aAhDZ,SAA0BH,GACtBumB,EAAc,GACduvC,EAAgB91D,EACpB,EA+CYz5B,QAASA,EACTk5B,eAAgBA,EAChB+P,aAAcA,EACdC,iBAAkB0nD,GAClBznD,eAAgBqG,EAChBpW,cAlDZ,WACIq2D,GAAgB,EACpB,EAiDYrmD,gBA3CZ,SAA6BppC,GACzBggD,EAAc,GACd6C,EAAW7iD,GACXwvC,IACAggD,EAAkBj6B,GAAmCv1D,GACzD,IAuCSwjC,EACKrtB,IAAAU,cAACmN,EAAM,MACN4c,EACGzqB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEsiC,GAEXlqC,GAAQA,EAAKsuC,QAAQx6C,OAAS,EAEtB2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACkyB,GAAW,CACRxB,gBAAiB,CAAC,WAAY,kBAAc,UAE3C7wC,EAAKsuC,QAAQr8C,KAAI8gB,GACd0M,IAAAU,cAAC25E,GAAc,CACXv+F,IAAKwX,EAAQpgB,GACbogB,QAASA,EACTgnF,4BAA6BrD,EAC7BsD,0BAA2BjnF,GAAWsnF,EAAiBtnF,QAGnE0M,IAAAU,cAACwyB,GAAU,CACPC,YAAa1xC,EACbstC,QAASxuC,EAAKwuC,QACdD,QAASvuC,EAAKuuC,QACdsE,iBAtDxC,WAAsC,IAAZ9gB,IAAIl+B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAC1By1D,GAAcr3B,GAAQF,EAAOE,EAAO,EAAIz8B,KAAKC,IAAIw8B,EAAM,EAAG,IAC9D,KAsDmD,OAAlBmoE,GACG36E,IAAAU,cAACs5E,GAAe,CACZ1mF,QAASqnF,EACT3qE,QAASA,IAAM4qE,EAAiB,MAChCt4D,OAxDxC,SAA2Bu4D,EAAWt6F,GAClCyuC,EAAW6rD,EAAW,CAACniG,KAAM6H,EAAK7H,OAClCkiG,EAAiB,KACrB,KAyD0B56E,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,6FAI/B,EC5OL25B,GAAc,CAChBpvC,MAAO,EACPC,MAAO,WAGLmoG,GAAmB,YACnBC,GAAsB,YACtBC,GAAmB,SACnBC,GAAwB,WAGxBhW,GAAqC1kF,IACvC,IAAIquC,EAAQ,CAAC,EACb,IAAK,IAAIx7B,KAAapX,OAAO6nB,OAAOtjB,GAChCquC,EAAMx7B,EAAUlgB,IACZ,GAAGkgB,EAAUnR,KAAKsb,mBAAmBnK,EAAU1a,OAEvD,OAAOsD,OAAOC,QAAQ2yC,GAAOxuC,KAAKgM,OAAwB,EAAE,EAIhE,MAAM8uF,WAA2Bj7E,YAE7BC,YAAYC,GACRC,MAAMD,GAENE,KAAKG,MAAQ,CACTk2B,gBAAgB,EAChB7sC,QAASsW,EAAMtW,QACf7B,OAAQ,CAAC,EACTyiC,WAAY,GACZ97B,aAAcwR,EAAMxR,cAGxB0R,KAAKwqB,SAAW,KAEhBxqB,KAAK42B,mBAAqB52B,KAAK42B,mBAAmBvS,KAAKrkB,MACvDA,KAAK62B,iBAAmB72B,KAAK62B,iBAAiBxS,KAAKrkB,MACnDA,KAAK82B,2BAA6B92B,KAAK82B,2BAA2BzS,KAAKrkB,MACvEA,KAAK41B,mBAAqB51B,KAAK41B,mBAAmBvR,KAAKrkB,KAC3D,CAIAmZ,oBACSx9B,OAAOS,KAAK4jB,KAAKG,MAAM7R,cAActa,OAWtCgsB,KAAKC,SAAS,CAACo2B,gBAAgB,IAT/Br2B,KAAKwqB,SAAWpmB,EAAS,mCACrB,MACA,CAAC,EACD,CAAC,EACDpE,KAAK42B,mBACL52B,KAAK62B,iBACL72B,KAAK82B,2BAKjB,CAEAtS,uBAE0B,OAAlBxkB,KAAKwqB,UACLxqB,KAAKwqB,SAASI,OAEtB,CAIAgM,mBAAmB12C,GACf8f,KAAKwqB,SAAW,KAChB,IAAIl8B,EAAe,CACfq3D,6BAA8B1pD,YAAoB/b,EAA0B,uBAC5EoZ,kBAAmBsrE,GACf1kF,EAAKslF,qBACTpR,kBAAmBz4E,OAAOC,QAAQsE,EAAKulF,aAAa1lF,KAChDiM,OAAgC,IAGxCgU,KAAKC,SACD,CACIo2B,gBAAgB,EAChB/nC,iBAEJ,IAAM0R,KAAKF,MAAM6qE,mBAAmBr8E,IAE5C,CAEAuoC,iBAAiB32C,GACb8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBjM,WAAY,6DAA2ClqC,EAAKiF,WAEpE,CAEA2xC,2BAA2BptC,GACvBsW,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBjM,WAAY,4DAAwC1gC,MAE5D,CAEAmsC,mBAAmBx9C,EAAMhG,GACrB2tB,KAAKC,UAASC,IACV,IAAIylC,EAAO,CAAC,CAACttD,GAAOhG,GACP,mCAATgG,EAEAstD,EAAqC,+BAAItzD,EAAM8D,QAAQ,cAAe,IAEtEwvD,EAAKttD,GAAQhG,EAEJ,aAATgG,IACAstD,EAAkB,YAAI,MAG1B,IAAIh+C,EAAShM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUvY,QAEzC,cADOA,EAAOtP,GACP,CAACsP,SAAQ6B,QAAS7N,OAAOwE,OAAO,CAAC,EAAG+f,EAAU1W,QAASm8C,GAAM,GAE5E,CAEAm1C,yBAAyBzoG,EAAO6uD,GAC5BlhC,KAAKC,UAASC,IACV,GAAIghC,GACA,IAAKhhC,EAAU1W,QAAQE,OAAOjV,SAASpC,GAAQ,CAE3C,IAAIsV,EAAShM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUvY,QAEzC,cADOA,EAAe,OACf,CACHA,SACA6B,QAAS7N,OAAOwE,OAAO,CAAC,EAAG+f,EAAU1W,QAAS,CAACE,OAAQ,IAAIwW,EAAU1W,QAAQE,OAAQrX,KAE7F,OAEA,GAAI6tB,EAAU1W,QAAQE,OAAOjV,SAASpC,GAAQ,CAE1C,IAAIsV,EAAShM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUvY,QAEzC,cADOA,EAAe,OACf,CACHA,SACA6B,QAAS7N,OAAOwE,OAAO,CAAC,EAAG+f,EAAU1W,QAAS,CAACE,OAAQwW,EAAU1W,QAAQE,OAAOrJ,QAAO01C,GAAKA,IAAM1jD,MAE1G,CAEJ,MAAO,CAAC,CAAC,GAEjB,CAEA0oG,uBAAuBC,EAAY3nC,GAC/BrzC,KAAKC,UAASC,IAEV,IAAIvY,EAAShM,OAAOwE,OAAO,CAAC,EAAG+f,EAAUvY,QAEzC,cADOA,EAAOqzF,GACP,CACHrzF,SACA6B,QAAS7N,OAAOwE,OAAO,CAAC,EAAG+f,EAAU1W,QACjC,CAAC,CAACwxF,GAAar/F,OAAOwE,OAAO,CAAC,EAAG+f,EAAU1W,QAAQwxF,GAAa3nC,KACvE,GAET,CAEAzd,qBACI,MAAMpsC,EAAUwW,KAAKG,MAAM3W,SACpBC,EAAS9B,GAAU4B,aAAsBC,GAC5CC,EACAuW,KAAKF,MAAMg2B,cAActsC,GAG7BwW,KAAKC,SAAS,CAACtY,UACnB,CAIAyY,SACI,OAAIJ,KAAKG,MAAMk2B,eACJ12B,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAAC4Q,SAAS,KAAI,gCACxBtd,KAAKG,MAAMiqB,WAAWp2C,OAEzB2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAASzN,KAAKG,MAAMiqB,YACrCzqB,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKF,MAAMk2B,aAAchkB,MAAI,GAAC,QAM7DrS,IAAAU,cAAAV,IAAAyc,SAAA,KACKpc,KAAKi7E,8BACLj7E,KAAKuuD,4BACLvuD,KAAKk7E,4BACNv7E,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKF,MAAMk2B,aAAcjkB,QAAM,GAAC,UACvDpS,IAAAU,cAACwR,EAAY,CAACh/B,GAAG,2CAA2Cu8B,QAASpP,KAAK41B,mBAAoBpsB,SAAO,GAAC,sBAK1H,CAEAyxE,8BACI,MAAM,OACFtzF,EAAM,QACN6B,GACAwW,KAAKG,MACHg7E,EAAW3xF,EAAQE,OACzB,OACIiW,IAAAU,cAAA,WAASkM,UAAU,mCACf5M,IAAAU,cAACgM,EAAI,KAAC,gCACN1M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,6BAAmBw6B,IAAI,QAAQH,SAAS,oBAC1DhN,IAAAU,cAAC2jB,GAAe,CACZ,aAAY,0EAA6Dx6B,EAAQkL,MAAM1gB,oBACvF,gBAAe,IACfiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,6BAClBnyC,GAAG,mBACHszC,UAAW,IACX/P,SAAW8G,GAAOld,KAAK61B,mBAAmB,QAAS3Y,EAAGiI,OAAO9yC,OAC7DqyC,QAAUxH,GAAOld,KAAK61B,mBAAmB,QAAS,IAClDxjD,MAAOmX,EAAQkL,SAEvBiL,IAAAU,cAAA,gBACIV,IAAAU,cAACgM,EAAI,CAACS,IAAI,SAASP,UAAU,SAAQ,0BACrC5M,IAAAU,cAACiiC,KAAQ,CACLhwD,MAAM,uBACN4uD,QAASi6C,EAAS1mG,SAASimG,IAC3BtkE,SAAWuC,GAAU3Y,KAAK86E,yBAAyBJ,GAAqB/hE,EAAMwM,OAAO+b,WAEzFvhC,IAAAU,cAACiiC,KAAQ,CACLhwD,MAAM,iBACN4uD,QAASi6C,EAAS1mG,SAASkmG,IAC3BvkE,SAAWuC,GAAU3Y,KAAK86E,yBAAyBH,GAAkBhiE,EAAMwM,OAAO+b,WAEtFvhC,IAAAU,cAACiiC,KAAQ,CACLhwD,MAAM,YACN4uD,QAASi6C,EAAS1mG,SAASgmG,IAC3BrkE,SAAWuC,GAAU3Y,KAAK86E,yBAAyBL,GAAkB9hE,EAAMwM,OAAO+b,WAEtFvhC,IAAAU,cAACiiC,KAAQ,CACLhwD,MAAM,sBACN4uD,QAASi6C,EAAS1mG,SAASmmG,IAC3BxkE,SAAWuC,GAAU3Y,KAAK86E,yBAAyBF,GAAuBjiE,EAAMwM,OAAO+b,WAE1Fv5C,EAAO+B,QAAU/B,EAAO+B,OAAO1V,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAS9lB,EAAO+B,UAGvFiW,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,kBAAkBw6B,IAAI,QAAQp1B,SAAUioB,IAAMuc,aAChEvc,IAAAU,cAAC2b,GAAU,CACPO,gBAAiB,mBAAmB50B,EAAO+0D,sBAAwB/0D,EAAO+0D,qBAAqB1oE,OAAS,EAAI2T,EAAO+0D,qBAAuB,KAC1IrqE,MAAOmX,EAAQkzD,qBACfpgC,WAAYA,CAACjkC,EAAMhG,IAAU2tB,KAAK+6E,uBAAuB,uBAAwB1iG,EAAMhG,KAE1FsV,EAAO+0D,sBAAwB/0D,EAAO+0D,qBAAqB1oE,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEH,EAAO+0D,uBAElG/8C,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,8BAAyBw6B,IAAI,SAC/CnN,IAAAU,cAAC2b,GAAU,CACPO,gBAAiB,+BAA0B50B,EAAOg1D,yBAA2Bh1D,EAAOg1D,wBAAwB3oE,OAAS,EAAI2T,EAAOg1D,wBAA0B,KAC1JtqE,MAAOmX,EAAQmzD,wBACfrgC,WAAYA,CAACjkC,EAAMhG,IAAU2tB,KAAK+6E,uBAAuB,0BAA2B1iG,EAAMhG,KAE7FsV,EAAOg1D,yBAA2Bh1D,EAAOg1D,wBAAwB3oE,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAS9lB,EAAOg1D,2BAGzHh9C,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,qBACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,aAEjBvc,IAAAU,cAAC4Y,GAAM,CACHgB,mBAAoBA,IAAe,wCACnC1N,UAAU,gBACVuM,SAAO,EACPtI,QAASxQ,KAAKG,MAAM7R,aAAagL,kBAAkBnnB,KAC/CgoC,IAAA,IAAE9nC,EAAOC,GAAM6nC,EAAA,MAAM,CAAC9nC,QAAOC,QAAM,IAEvC05B,YAAY,2BACZ35B,MAAOmX,EAAQuJ,UACfqjB,SAAWiG,GAAmBrc,KAAK61B,mBAAmB,YAAaxZ,GAAkB,IACrFjR,OAAQF,EACRsR,iBAAkBA,IAAM,yBAK5C,CAEA0+D,4BACI,MAAM1xF,EAAUwW,KAAKG,MAAM3W,QACrB87E,EAA0BtlE,KAAKG,MAAMxY,OAAOk1D,+BAClD,OACIl9C,IAAAU,cAAA,WAASkM,UAAU,mCACf5M,IAAAU,cAACgM,EAAI,KAAC,6BACN1M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,6BAAwBw6B,IAAI,QAAQH,SAAS,oCAC/DhN,IAAAU,cAAC2jB,GAAe,CACZ,aAAY,yEAAiEx6B,EAAQozD,eAAe5oE,oBACpG,gBAAe,IACfiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,6BAClBnyC,GAAG,mCACHszC,UAAW,IACX/P,SAAW8G,GAAOld,KAAK61B,mBAAmB,iBAAkB3Y,EAAGiI,OAAO9yC,OACtEqyC,QAAUxH,GAAOld,KAAK61B,mBAAmB,iBAAkB,IAC3DxjD,MAAOmX,EAAQozD,kBAEvBj9C,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,6CAAwCw6B,IAAI,QAAQH,SAAS,oDAC/EhN,IAAAU,cAAC2jB,GAAe,CACZ,oBAAmBshD,GAA2B,IAAItxF,OAAS,EAAI,sDAAwD,KACvH,aAAY,+EAA0EwV,EAAQqzD,+BAA+B7oE,oBAC7H,gBAAe,IACfiyC,gBAAc,EACd1Z,UAAU,iBACVyY,kBAAkB,6CAClBnyC,GAAG,mDACHw7B,SAAUi3D,GAA2B,IAAItxF,OAAS,EAClDmyC,UAAW,IACX/P,SAAW8G,GAAOld,KAAK61B,mBAAmB,iCAAkC3Y,EAAGiI,OAAO9yC,OACtFqyC,QAAUxH,GAAOld,KAAK61B,mBAAmB,iCAAkC,IAC3EgG,QAAU3e,GAAOld,KAAK61B,mBAAmB,iCAAkC3Y,EAAGiI,OAAO9yC,OACrFA,MAAOmX,EAAQqzD,kCACjByoB,GAA2B,IAAItxF,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACjV,GAAG,uDAAuDyyF,KAKzI,CAEA/W,4BACI,MAAM,kBACF6F,EAAiB,6BACjBzO,GACA3lD,KAAKG,MAAM7R,cACT,SACFX,EAAQ,QACRmvD,EAAO,kBACPC,EAAiB,YACjB3oD,GACA4L,KAAKG,MAAM3W,QACf,OACImW,IAAAU,cAAA,WAASkM,UAAU,mCACf5M,IAAAU,cAACgM,EAAI,KAAC,6CACN1M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,qCACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,aAEjBvc,IAAAU,cAAC4Y,GAAM,CACHgB,mBAAoBA,IAAe,wCACnC1N,UAAU,gBACViE,QAAS,CAACiR,IAAe0jB,UAAUwgB,EAA6BxzE,KAAImO,IAAC,CAAMjO,MAAOiO,EAAEzN,GAAIP,MAAOgO,EAAE7M,WACjGpB,MAAOsb,GAAY8zB,GACnBrL,SAAWiG,IACPrc,KAAK61B,mBAAmB,WAAqC,IAAzBxZ,EAAehqC,MAAc,KAAOgqC,EAAe,EAE3FjR,OAAQF,EACRsR,iBAAkBA,IAAM,yBAGhC7c,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,eACN,aAAyB,OAAbqb,EAAoB,KAAO,gIACvCxW,UAAWwoB,IAAMuc,YACjBpP,IAAI,QACJwQ,SAAuB,OAAb3vB,EAAoB,KAAO,KAErCgS,IAAAU,cAAC4Y,GAAM,CACHgB,mBAAoBA,IAAe,wCACnC1N,UAAU,gBACVwM,WAAyB,OAAbprB,EACZ6iB,QAAsB,OAAb7iB,EAAoB,CAAC8zB,IAAiB,CAACA,IAAe0jB,UACxDwgB,EAA6BtlE,QAAOykB,GAAKtvB,SAASsvB,EAAEjyB,MAAQ2C,SAASmY,EAAStb,SAAQ,GAAG2mB,aAAa7mB,KAAI+J,IAAC,CAAM7J,MAAO6J,EAAErJ,GAAIP,MAAO4J,EAAEzI,WAC9IpB,MAAO+hB,GAAeqtB,GACtBrL,SAAWiG,GAAmBrc,KAAK61B,mBAAmB,cAAwC,IAAzBxZ,EAAehqC,MAAc,KAAOgqC,GACzGjR,OAAQF,EACR,cAA0B,OAAbvd,EACb,aAAyB,OAAbA,GAAqB,eACjC6uB,iBAAkBA,IAAM,0BAIpC7c,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACoxD,GAAU,CACP34C,SAAO,EACP44C,QAAS5U,EACTwV,UAAWt9E,GAAmBgrB,KAAK61B,mBAAmB,UAAW7gD,GAAmB,MACxF2qB,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,qBACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,aAEjBvc,IAAAU,cAAC4Y,GAAM,CACHgB,mBAAoBA,IAAe,wCACnC1N,UAAU,gBACVuM,SAAO,EACPtI,QAAS4jD,EAAkBjiF,KAAIwqD,IAAC,CAAMtqD,MAAOsqD,EAAE,GAAIrqD,MAAOqqD,EAAE,OAC5D3wB,YAAY,2BACZ35B,MAAO0qE,EACP3mC,SAAWiG,GAAmBrc,KAAK61B,mBAAmB,oBAAqBxZ,GAAkB,IAC7FjR,OAAQF,EACRsR,iBAAkBA,IAAM,0BAMhD,EC5aJ,MAAM4+D,GAA8Bt7E,IAChC,MAAM,QAAEu7E,GAAYv7E,EACdw7E,EAAgB37E,IAAAU,cAAAV,IAAAyc,SAAA,KAAE,uBAAezc,IAAAU,cAAA,QAAMkM,UAAU,WAAU,MAAI8uE,EAAQE,gBAE7E,IAAIC,EAAa,GAAGH,EAAQ1lF,WAK5B,OAJI0lF,EAAQ1vE,aACR6vE,EAAa77E,IAAAU,cAAAV,IAAAyc,SAAA,KAAEzc,IAAAU,cAAA,QAAMkM,UAAU,WAAU,oBAAuB,IAAE8uE,EAAQ1lF,KAAK,SAI/EgK,IAAAU,cAACyN,EAAG,CAACU,YAAagtE,EAAY1uE,IAAI,MAC9BnN,IAAAU,cAACgM,EAAI,KAAEgvE,EAAQE,eACdF,EAAQ70F,KAAKxS,OAAS,GACnB2rB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAa8uE,EAAQ70F,OAG7CmZ,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,uBACNw6B,IAAI,QACJ31B,UAAWkkG,EAAQjgF,WAAWpnB,OAAS,EAAI2rB,IAAMuc,YAAc,MAC/Dvc,IAAAU,cAACykC,GAAgB,CAAC1pC,WAAYigF,EAAQjgF,cAEzCigF,EAAQI,WACL97E,IAAAU,cAACwR,EAAY,CACTrI,SAAO,EACP4F,QAAS8N,GAAMpd,EAAM47E,eAAeL,EAAQM,WAC/C,+BAAgB77E,EAAM87E,uBAAyB,8BAClDP,EAAQI,WACN97E,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACwR,EAAY,CACTQ,QAAM,EACNjD,QAAS8N,GAAMpd,EAAM+7E,cAAcR,EAAQM,WAC9C,0BAAah8E,IAAAU,cAAA,QAAMkM,UAAU,WAAU,OAAK8uE,EAAQE,cAAc,KAASz7E,EAAM87E,uBAAyB,6BAC3Gj8E,IAAAU,cAACiiC,KAAQ,CACL/1B,UAAU,uCACVj6B,MAAOgpG,EACPp6C,QAASm6C,EAAQ1vE,WACjByK,SAAU8G,GAAMpd,EAAMg8E,gBAClB5+D,EAAGiI,OAAO+b,QAASphC,EAAM5E,eAAgBmgF,EAAQxoG,OAI/D,EC1CRm7D,GACU,EADVA,GAEO,EAIb,MAAM+tC,WAAiCn8E,YAEnCC,YAAYC,GACRC,MAAMD,GAQV,KAEAk8E,aAAgBL,IACZ37E,KAAKC,SAAS,CAACg8E,iBAAkBN,GAAU,EAC9C,KAEDO,cAAiBP,IACb37E,KAAKC,SAAS,CAACk8E,kBAAmBR,GAAU,EAC/C,KAEDxxB,kBAAqBiyB,IACjBp8E,KAAKC,SAAS,CAAC,CAACm8E,GAAwB,MAAM,EACjD,KAQDC,aAAe,CAACC,EAAIC,IACTD,EAAGf,cAAc15F,cAAc06F,EAAGhB,cAAe,MA5BxDv7E,KAAKG,MAAQ,CACTouC,YAAaP,GACbiuC,iBAAkB,KAClBE,kBAAmB,KAE3B,CAkBAK,gBAAgBb,GACZ,OAAO37E,KAAKF,MAAMrF,SAASpa,QAAOq4E,GAAKA,EAAEijB,WAAaA,IAAU3nG,OAAS,CAC7E,CAQAosB,SACI,OAAIJ,KAAKF,MAAMrF,SAASzmB,OAEhB2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACKpc,KAAK03B,eACN/3B,IAAAU,cAACquC,KAAM,CACHC,eAAgB3uC,KAAKG,MAAMouC,YAC3BhiC,UAAU,UACVqiC,WAAY1xB,GAAMld,KAAKC,SAAS,CAACsuC,YAAarxB,EAAG2xB,OAAO7xC,SAExD2C,IAAAU,cAACyuC,KAAG,KAAC,yCACLnvC,IAAAU,cAACyuC,KAAG,KAAC,qBAETnvC,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKD,eAAa,GAAC,qBAAgB7M,KAAKF,MAAM28E,uBAAyB,wBAChFz8E,KAAKF,MAAM28E,uBAAyB98E,IAAAU,cAACgM,EAAI,CAAC/5B,OAAK,GAAE0tB,KAAKF,MAAM1X,WAAWxC,OACvEoa,KAAK08E,mBACL18E,KAAK28E,iBAKdh9E,IAAAU,cAAAV,IAAAyc,SAAA,KACKpc,KAAK03B,eACN/3B,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKD,eAAa,GAAC,cAAY7M,KAAKF,MAAM28E,uBAAyB,wBAC5Ez8E,KAAKF,MAAM28E,uBAAyB98E,IAAAU,cAACgM,EAAI,CAAC/5B,OAAK,GAAE0tB,KAAKF,MAAM1X,WAAWxC,OACvEoa,KAAK08E,mBAGlB,CAEAhlD,eACI,MAAMtvC,EAAa4X,KAAKF,MAAM1X,WAE9B,OACIuX,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,OAAKkM,UAAU,uBACX5M,IAAAU,cAAA,QAAMkM,UAAU,UAAUkB,KAAK,SAAQ,uKACvC9N,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKD,eAAa,GAAC,0CAC7BlN,IAAAU,cAACgM,EAAI,CAAC/5B,OAAK,GAAE8V,EAAWxC,QAG5B+Z,IAAAU,cAACyQ,EAAU,CAAChE,IAAI,MACX1kB,EAAW9B,cAAcnU,KAAIq8E,GAC1B7uD,IAAAU,cAACyN,EAAG,CAACryB,IAAK+yE,EAAG37E,GAAIi6B,IAAI,KAAK0B,YAAaggD,EAAG14D,mBAAqB,mBAAqB,wBAC/E04D,EAAGhoE,SAO5B,CAEAk2F,mBACI,GAAI18E,KAAKG,MAAMouC,cAAgBP,GAA4B,OAAO,KAClE,MAAM5lD,EAAa4X,KAAKF,MAAM1X,WACxBqS,EAAWuF,KAAKF,MAAMrF,SAASpa,QAAOq4E,IAAMA,EAAE+iB,YAEpD,OACI97E,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,sBAAiBjS,EAASzmB,QACrC2rB,IAAAU,cAACyQ,EAAU,CAAChE,IAAI,MACXrS,EAAS1a,KAAKigB,KAAKq8E,cAAclqG,KAAIumF,GAClC/4D,IAAAU,cAAC+6E,GAA0B,CACvBQ,sBAAuB57E,KAAKw8E,gBAAgB9jB,EAAEijB,UAC9ClgG,IAAKi9E,EAAE7lF,GACPwoG,QAAS3iB,EACTx9D,eAAgB9S,EAAW8S,eAAeroB,GAC1CgpG,cAAe77E,KAAKg8E,aACpBF,gBAAiB97E,KAAKF,MAAMg8E,qBAElCrhF,EAASzmB,QAAU2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,8BAAkBkY,KAAKF,MAAM28E,uBAAyB,0BAAgBz8E,KAAKF,MAAM1X,WAAWxC,WAEjI+Z,IAAAU,cAACyQ,EAAU,CAACE,kBAAgB,GACxBrR,IAAAU,cAACiiC,KAAQ,CACL/1B,UAAU,gBACVj6B,MAAM,kCACN4uD,QAASlhC,KAAKF,MAAMhF,mBACpBsb,SAAUuC,GAAS3Y,KAAKF,MAAM88E,wBAAwBjkE,EAAMwM,OAAO+b,QAAS94C,EAAW8S,eAAeroB,OAG7E,OAAhCmtB,KAAKG,MAAM87E,kBAA6Bj8E,KAAK68E,uBAG1D,CAEAF,gBACI,GAAI38E,KAAKG,MAAMouC,cAAgBP,GAAyB,OAAO,KAC/D,MAAMvzC,EAAWuF,KAAKF,MAAMrF,SAASpa,QAAOq4E,GAAKA,EAAE+iB,YACnD,OACI97E,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,sBAAiBjS,EAASzmB,QACrC2rB,IAAAU,cAACyQ,EAAU,CAAChE,IAAI,MACXrS,EAAS1a,KAAKigB,KAAKq8E,cAAclqG,KAAIumF,GAClC/4D,IAAAU,cAAC+6E,GAA0B,CACvBQ,sBAAuB57E,KAAKw8E,gBAAgB9jB,EAAEijB,UAC9ClgG,IAAKi9E,EAAE7lF,GACPiqG,SAAO,EACPzB,QAAS3iB,EACTx9D,eAAgB8E,KAAKF,MAAM1X,WAAW8S,eAAeroB,GACrD6oG,eAAgB17E,KAAKk8E,mBAIC,OAAjCl8E,KAAKG,MAAMg8E,mBAA8Bn8E,KAAK+8E,wBAG3D,CAEAF,uBACI,OAAO78E,KAAKg9E,aACR,mBACA,gBACAh9E,KAAKF,MAAM+7E,cACX,0EAER,CAEAkB,wBACI,OAAO/8E,KAAKg9E,aACR,oBACA,qBACAh9E,KAAKF,MAAM47E,eACX,+EAER,CAEAsB,aAAaZ,EAAuBa,EAAalkG,EAAUmkG,GACvD,IAAIxoF,EAAQ,uBAAuBuoF,wBAMnC,OALIj9E,KAAKw8E,gBAAgBx8E,KAAKG,MAAMi8E,IAChC1nF,GAAS,sCAETA,GAAS,IAGTiL,IAAAU,cAACoc,GAAY,CACTG,YAAaloB,EACbib,QAASA,IAAM3P,KAAKmqD,kBAAkBiyB,IAEtCz8E,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,KAAE6wE,GACPv9E,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACE,QAAM,EAAC3C,QAASA,IAAMpP,KAAKmqD,kBAAkBiyB,IAAwB,OACnFz8E,IAAAU,cAACwR,EAAY,CACTU,MAAI,EACJnD,QAASA,KACL,MAAMusE,EAAW37E,KAAKG,MAAMi8E,GAC5Bp8E,KAAKC,SACD,CAAC,CAACm8E,GAAwB,OAC1B,IAAMrjG,EAASinB,KAAKF,MAAM1X,WAAW8S,eAAeroB,GAAI8oG,IAC3D,GAER,SAKrB,ECjMJ,MAAMwB,GAA4B,CAC9B,CAAC,MAAO,aACR,CAAC,YAAa,gBACd,CAAC,SAAU,kBACX,CAAC,YAAa,aACd,CAAC,WAAY,wBAEXC,GAAwB,CAC1B,CAAC,MAAO,aACR,CAAC,QAAS,WACV,CAAC,YAAa,sBAIlB,MAAMC,WAAoBz9E,YAEtBC,YAAYC,GACRC,MAAMD,GAAO,KAejB81B,mBAAqB,KACjB51B,KAAKF,MAAMg2B,cAAc91B,KAAKG,MAAM3W,QAAQ,EAd5CwW,KAAKG,MAAQ,CACT3W,QAASsW,EAAMtW,QAEvB,CAIAqsC,mBAAmBx9C,EAAMhG,GACrB2tB,KAAKC,UAASC,IACH,CAAC1W,QAAS7N,OAAOwE,OAAO,CAAC,EAAG+f,EAAU1W,QAAS,CAAC,CAACnR,GAAOhG,OAEvE,CAQA+tB,SACI,MAAM5W,EAAUwW,KAAKG,MAAM3W,QACrB8zF,EAA6B39E,IAAMuc,YACnCqhE,EAAsC59E,IAAMuc,YAClD,OACIvc,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,WAASkM,UAAU,mCACf5M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,6BAAmBw6B,IAAI,QAAQH,SAAS,oBAC1DhN,IAAAU,cAAC2jB,GAAe,CACZgB,kBAAkB,6BAClB3yC,MAAOmX,EAAQkL,MACf0hB,SAAW8G,GAAOld,KAAK61B,mBAAmB,QAAS3Y,EAAGiI,OAAO9yC,OAC7Dk6B,UAAU,iBACVmY,QAAUxH,GAAOld,KAAK61B,mBAAmB,QAAS,IAClDhjD,GAAG,sBAEX8sB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,wBAAmBw6B,IAAI,QAAQH,SAAS,qBAC1DhN,IAAAU,cAAC2jB,GAAe,CACZgB,kBAAkB,wBAClB3yC,MAAOmX,EAAQq0D,mBACfznC,SAAW8G,GAAOld,KAAK61B,mBAAmB,qBAAsB3Y,EAAGiI,OAAO9yC,OAC1Ek6B,UAAU,iBACVmY,QAAUxH,GAAOld,KAAK61B,mBAAmB,qBAAsB,IAC/DhjD,GAAG,wBAGf8sB,IAAAU,cAACyQ,EAAU,CAACO,OAAK,GACb1R,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,8BAAyBw6B,IAAI,QAAQp1B,SAAU4lG,GACjE39E,IAAAU,cAACwV,EAAY,CACT0B,SAAS,8BACTf,UAAW8mE,EACXjrG,MAAO0S,KAAK2gB,MAAMlc,EAAQitF,oBAC1BrgE,SAAUlgC,GAAQ8pB,KAAK61B,mBAAmB,qBAAsBz/C,YAAaF,OAErFypB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,qCAAgCw6B,IAAI,QAAQp1B,SAAU6lG,GACxE59E,IAAAU,cAACwV,EAAY,CACT0B,SAAS,qCACTf,UAAW+mE,EACXlrG,MAAO0S,KAAK2gB,MAAMlc,EAAQg0F,6BAC1BpnE,SAAUlgC,GAAQ8pB,KAAK61B,mBAAmB,8BAA+Bz/C,YAAaF,QAGlGypB,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACvB1R,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,yBACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,aACjBvc,IAAAU,cAAC4Y,GAAM,CACHgB,mBAAoBA,IAAe,wCACnC1N,UAAU,gBACViE,QAAS2sE,GAA0BhrG,KAAI4jD,IAAC,CAAM1jD,MAAO0jD,EAAE,GAAIzjD,MAAOyjD,EAAE,OACpE1jD,MAAO,CAACA,MAAOmX,EAAQo0D,mBAAmBvrE,OAAS8qG,GAA0B,GAAG,GAAI7qG,MAAOkX,EAAQo0D,mBAAmBtrE,OAAS6qG,GAA0B,GAAG,IAC5J/mE,SAAUiG,GAAkBrc,KAAK61B,mBAAmB,qBAAsBxZ,GAC1EjR,OAAQF,KAGhBvL,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,gBACNw6B,IAAI,QACJ31B,UAAWwoB,IAAMuc,aACjBvc,IAAAU,cAAC4Y,GAAM,CACHgB,mBAAoBA,IAAe,wCACnC1N,UAAU,gBACViE,QAAS4sE,GAAsBjrG,KAAI4jD,IAAC,CAAM1jD,MAAO0jD,EAAE,GAAIzjD,MAAOyjD,EAAE,OAChE1jD,MAAO,CAACA,MAAOmX,EAAQi0F,YAAYprG,OAAS+qG,GAAsB,GAAG,GAAI9qG,MAAOkX,EAAQi0F,YAAYnrG,OAAS8qG,GAAsB,GAAG,IACtIhnE,SAAUiG,GAAkBrc,KAAK61B,mBAAmB,cAAexZ,GACnEjR,OAAQF,OAKxBvL,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKF,MAAMk2B,aAAcjkB,QAAM,GAAC,UACvDpS,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAK41B,mBAAoBpsB,SAAO,GAAC,sBAIxE,EC1HJ,MAAMk0E,GAAe59E,IACjB,MAAM,OAAEnY,EAAM,WAAEu+B,EAAU,SAAEy3D,EAAQ,eAAEC,EAAc,QAAEvC,GAAYv7E,EAE5D+9E,EAAaA,IAEXl+E,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC4kB,GAAe,CACZp9B,SAAS,OACTk9B,UAAW64D,EACXj2F,OAAQA,EAAOgO,KACfuwB,WAAYA,EACZ/X,WAAS,EACT77B,MAAM,OACN0zC,kBAAmBq1D,EAAQ5lG,YAC3BpD,MAAOgpG,EAAQ1lF,KACfygB,SAAU/jC,GAASytB,EAAMg+E,yBAAyB,OAAQzrG,KAE5DsV,EAAOgO,MAAQgK,IAAAU,cAAA,QAAMoN,KAAK,QAAQlB,UAAU,WAAU,uCAKpE,GAAIoxE,EACA,OAAOE,IAGX,MAAME,EAAgB,WAAW1C,EAAQ5lG,sBACnCuoG,GAAiBr2F,EAAOnB,MAAQ,IAAIxS,OAAS,EACnD,OACI2rB,IAAAU,cAACyN,EAAG,CAACI,eAAa,EAACpB,IAAI,MAClB+wE,IACDl+E,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,OAAOw6B,IAAI,QAAQH,SAAUoxE,GAC/Cp+E,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkBg6D,EAAgB,gBAAkB,KACpD,aAAY,mDAAgD3C,EAAQ70F,KAAKxS,oBACzE,gBAAe,IACfiyC,gBAAc,EACdjB,kBAAkB,OAClBpb,SAAUsc,EACV/X,WAAS,EACTt7B,GAAIkrG,EACJ1vE,QAAS2vE,EACT73D,UAAW,IACX9zC,MAAOgpG,EAAQ70F,KACf4vB,SAAU8G,GAAMpd,EAAMg+E,yBAAyB,OAAQ5gE,EAAGiI,OAAO9yC,OACjEqyC,QAASxH,GAAMpd,EAAMg+E,yBAAyB,OAAQ,IACtDpxB,UAAQ,IACXsxB,GACGr+E,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,MAAIxtB,GAAG,iBAAiB8U,EAAOnB,KAAKrU,KAAI,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,MAChF+sB,IAAAU,cAAA,QAAMoN,KAAK,QAAQlB,UAAU,WAAU,wCAInD5M,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CACTjI,SAAUsc,EACV7T,QAAM,EACNjD,QAAStP,EAAMm+E,iBAAiB,YAAIt+E,IAAAU,cAAA,QAAMkM,UAAU,WAAU,cAEpE,ECrDd,MAAM2xE,WAAyBt+E,YAI3Bu+E,4BACI,IAAIzpB,EAAkB,EACtB,IAAK,IAAIn/E,KAAKoG,OAAO6nB,OAAOxD,KAAKF,MAAM1H,QACnC,IAAK,IAAIsgE,KAAKnjF,EAAEklB,SACRi+D,EAAEjjF,YAAci/E,IAChBA,EAAkBgE,EAAEjjF,aAIhC,OAAOi/E,CACX,CAEA0pB,iBACI,MAAO,CACHpoF,eAAe,EACfyE,SAAU,CAACuF,KAAKq+E,mBAExB,CAEAA,kBACI,MAAO,CACHxrG,GAAI,KACJ4C,YAAauqB,KAAKm+E,4BAClBxoF,KAAM,GACNnP,KAAM,GAEd,CAIA4Z,SACI,OACIT,IAAAU,cAAAV,IAAAyc,SAAA,KACKpc,KAAKy3C,qBACLz3C,KAAKs+E,eACLt+E,KAAK87D,mBAGlB,CAEArkB,qBACI,OAAKz3C,KAAKF,MAAMy+E,qBAEZ5+E,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,sCACjB5M,IAAAU,cAACyQ,EAAU,CAACK,SAAO,EAAChD,WAAS,GACzBxO,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,kBAE9BjN,IAAAU,cAAC45B,GAAsB,CACnB/5C,KAAM8f,KAAKF,MAAM1J,aACjBzO,OAAQqY,KAAKF,MAAMnY,OAAOyO,cAAgB,CAAC,EAC3C8vB,WAAYlmB,KAAKF,MAAMomB,WACvBmU,gBAAiBr6B,KAAKF,MAAMu6B,gBAC5BqB,kBAAmB17B,KAAKF,MAAM47B,kBAC9BtB,2BAA4Bp6B,KAAKF,MAAMs6B,2BACvCU,mBAAoB96B,KAAKF,MAAMg7B,sBAbI,IAiBnD,CAEAwjD,eACI,MAAM52F,EAAasY,KAAKF,MAAMpY,WACxB82F,GAAgBx+E,KAAKF,MAAMnY,OAAOyQ,QAAU,CAAC,GAAGzQ,QAAU,GAC1D82F,EAAkBD,EAAaxqG,OAAS,EAE9C,OACI2rB,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,sBACjB5M,IAAAU,cAACyQ,EAAU,CAACK,SAAO,EAAChD,WAAS,GACzBxO,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,gBAE7B6xE,GAAmB9+E,IAAAU,cAAA,UAAKm+E,EAAarsG,KAAI,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,MACjF8U,EAAW1T,OAAS,EACjB0T,EAAWvV,KAAIsV,GAAKuY,KAAK0+E,qBAAqBj3F,KAC9CuY,KAAK2+E,mBAAmBj3F,EAAW,IAGnD,CAEAg3F,qBAAqBt2F,GACjB,MAAMw2F,EAAmBx2F,EAAW8S,eAAeroB,GAC7CgsG,EAAS7+E,KAAKF,MAAM1H,OAAO/X,QAC7B9K,GAAKA,EAAE2lB,iBAAmB0jF,IAAkB,IAAM,KAChDl0B,EAAuB,OAAXm0B,EACZ34D,EAAalmB,KAAKF,MAAMomB,WACxB44D,EAAiC,OAAXD,EAAkB,CAAC,IAAM7+E,KAAKF,MAAMnY,OAAOyQ,QAAU,CAAC,GAAGymF,EAAOppG,cAAgB,CAAC,GAAGugB,eAAiB,GAC3H+oF,EAAoC,OAAXF,GAAyBC,EAAoB9qG,OAAS,EACrF,OACI2rB,IAAAU,cAACgT,EAAS,CAAC53B,IAAKmjG,EAAkBryE,UAAYm+C,EAAqC,KAAzB,wBACtD/qD,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,EAAC9E,UAAU,wBAClC5M,IAAAU,cAAA,OAAKkM,UAAU,oBACX5M,IAAAU,cAACiiC,KAAQ,CACL,aAAY,6DAAqCl6C,EAAWxC,QAC5Ds7C,QAASwpB,EACTn+C,UAAU,gBACV3C,SAAUsc,EACV5zC,MAAM,iEACN8jC,SAAUuC,GAAS3Y,KAAKF,MAAMk/E,gBAAgBJ,EAAkBjmE,EAAMwM,OAAO+b,WAEjFvhC,IAAAU,cAACgM,EAAI,CAAC/5B,OAAK,GAAE8V,EAAWxC,QAE3BwC,EAAW4N,eAAiB00D,GAAwB,OAAXm0B,GACtCl/E,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACiiC,KAAQ,CACL,mBAAkBy8C,EAAyB,sBAAwB,KACnE79C,QAAS29C,EAAO7oF,cAChBuW,UAAU,gBACV3C,SAAUsc,EACV5zC,MAAO,oBACP8jC,SAAUuC,GAAS3Y,KAAKF,MAAMm/E,oBAAoBL,EAAkBjmE,EAAMwM,OAAO+b,WAEpF69C,GACGp/E,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,MAAIxtB,GAAG,uBAAuBisG,EAAoB3sG,KAAI,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,MAC9F+sB,IAAAU,cAAA,QAAMoN,KAAK,QAAQlB,UAAU,WAAU,yCAM1Dm+C,GAAa1qD,KAAKk/E,eAAe92F,EAAYy2F,GAG1D,CAEAF,mBAAmBv2F,GACf,IAAKA,EAAc,OAAO,KAC1B,MAAMy2F,EAAS7+E,KAAKF,MAAM1H,OAAO/X,QAC7B9K,GAAKA,EAAE2lB,iBAAmB9S,EAAW8S,eAAeroB,KAAI,IAAM,KAClE,OAAKgsG,EAEDl/E,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,EAAC9E,UAAU,wBAClC5M,IAAAU,cAAA,OAAKkM,UAAU,aACX5M,IAAAU,cAACgM,EAAI,CAACC,cAAY,GAAC,sCACnB3M,IAAAU,cAACgM,EAAI,CAAC/5B,OAAK,GAAE8V,EAAWxC,QAE3BwC,EAAW4N,eACR2J,IAAAU,cAACiiC,KAAQ,CACLpB,QAAS29C,EAAO7oF,cAChBuW,UAAU,gBACV3C,SAAU5J,KAAKF,MAAMomB,WACrB5zC,MAAO,oBACP8jC,SAAUuC,GAAS3Y,KAAKF,MAAMm/E,oBAAoB72F,EAAW8S,eAAeroB,GAAI8lC,EAAMwM,OAAO+b,YAIxGlhC,KAAKk/E,eAAe92F,EAAYy2F,IAlBnB,IAqB1B,CAEAK,eAAe92F,EAAYy2F,GACvB,GAAIz2F,EAAW4N,cAAe,CAC1B,MAAM4oF,EAAmBx2F,EAAW8S,eAAeroB,GAC7CqzC,EAAalmB,KAAKF,MAAMomB,WACxBi5D,IAAmBn/E,KAAKF,MAAMnY,OAAOyQ,QAAU,CAAC,GAAGymF,EAAOppG,cAAgB,CAAC,GAAGglB,UAAY,CAAC,EAC3F2kF,GAAqBD,EAAex3F,QAAU,IAAI3T,OAAS,EACjE,OACI2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACKyiE,EAAO7oF,eACJ2J,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACoD,SAAO,GACzB5R,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKD,eAAa,GAAC,sBAC5BgyE,EAAOpkF,SAASzmB,OA1KrB,IA2KQ2rB,IAAAU,cAACwR,EAAY,CACTC,KAAG,EACHlI,SAAUsc,EACV9W,QAASA,IAAMpP,KAAKF,MAAMu/E,aAAaT,IAAoB,yBAKvEj/E,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,iBAAgB,sBAAiBsyE,EAAOpkF,SAASzmB,QACtE2rB,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,sCApLX,GAoLyD,kBACxD0yE,GACGz/E,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,UAAK8+E,EAAex3F,OAAOxV,KAAI,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,MACvE+sB,IAAAU,cAAA,QAAMoN,KAAK,QAAQlB,UAAU,WAAU,uCAG/C5M,IAAAU,cAACyQ,EAAU,CAAChE,IAAI,MACX+xE,EAAOpkF,SAAStoB,KAAIumF,GAEb/4D,IAAAU,cAACq9E,GAAW,CACR/1F,OAAQw3F,EAAezmB,EAAEjjF,cAAgB,CAAC,EAC1CywC,WAAYA,EACZzqC,IAAKi9E,EAAEjjF,YACPmoG,gBAAc,EACdvC,QAAS3iB,EACTolB,yBAA0BA,CAACj2F,EAAUxV,IAAU2tB,KAAKF,MAAMg+E,yBACtDc,EAAkBlmB,EAAEjjF,YAAaoS,EAAUxV,GAE/C4rG,gBAAiBA,IAAMj+E,KAAKF,MAAMm+E,gBAAgBW,EAAkBlmB,EAAEjjF,oBAO5FopG,EAAO7oF,eAAiBgK,KAAKs/E,oBAAoBT,EAAQD,GAGvE,CACI,OAAO5+E,KAAKs/E,oBAAoBT,EAAQz2F,EAAW8S,eAAeroB,GAE1E,CAEAysG,oBAAoBT,EAAQ5jF,GACxB,MAAMogF,EAAUwD,EAAOpkF,SAAS,GAC1B0kF,IAAmBn/E,KAAKF,MAAMnY,OAAOyQ,QAAU,CAAC,GAAGymF,EAAOppG,cAAgB,CAAC,GAAGglB,UAAY,CAAC,EACjG,OACIkF,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACq9E,GAAW,CACR/1F,OAAQw3F,EAAe9D,EAAQ5lG,cAAgB,CAAC,EAChDywC,WAAYlmB,KAAKF,MAAMomB,WACvBzqC,IAAK4/F,EAAQ5lG,YACbkoG,UAAU,EACVtC,QAASA,EACTyC,yBAA0BA,CAACj2F,EAAUxV,IAAU2tB,KAAKF,MAAMg+E,yBACtD7iF,EAAcogF,EAAQ5lG,YAAaoS,EAAUxV,GAEjD4rG,gBAAiBA,IAAMj+E,KAAKF,MAAMm+E,gBAAgBhjF,EAAcogF,EAAQ5lG,eAE1E0pG,GAAkBx/E,IAAAU,cAAA,QAAMoN,KAAK,QAAQlB,UAAU,WAAU,sCAGvE,CAEAuvD,mBACI,OACIn8D,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,sCACjB5M,IAAAU,cAACmkC,GAAU,CACPJ,iBAAiB,QACjBz8C,OAAQqY,KAAKF,MAAMnY,OAAOyT,YAAc,CAAC,EACzC8qB,WAAYlmB,KAAKF,MAAMomB,WACvBqmC,WAAW,EACXpmC,UApPW,GAqPX/qB,WAAY4E,KAAKF,MAAM1E,WACvB0oC,aAAc9jC,KAAKF,MAAMy/E,mBACzB/7C,gBAAiBxjC,KAAKF,MAAM0/E,sBAC5B/8C,wBAAyBziC,KAAKF,MAAM2/E,+BAEpC9/E,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,iBAAgB,sBAAiBvM,KAAKF,MAAM1E,WAAWpnB,QAC5E2rB,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,mDA3PA,GA2PoD,gBAI/E,ECtPJ,MAoBMgzE,GAA2B,CAC7BjsG,MAAO,GACP8M,aArBA,CACIlO,MAAO,SACPC,MAAO,UAoBXkO,MAAO,CACHjE,KAAM,SACNqe,YAAa,GACbzB,OAAQ,GACRpC,MAAO,GACPa,YAAa,GACbvN,YAAa,GACbkQ,MAAO,GACPtC,UAAW,IAEf7X,2BAtBA,CACI/N,MAAO,MACPC,MAAO,OAqBX4X,qBAAsB,IAI1B,MAAMy1F,WAAmB9nD,GAAkBh4B,cAAA,SAAA9rB,WAEvC,KAEA6rG,2BAA8B1/F,IAC1B8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,UACDC,IACI,IAAI9H,EAAS,GACb,MAAM1Q,EAAasY,KAAKF,MAAMpY,WAI9B,OAH0B,IAAtBA,EAAW1T,QACXokB,EAAOja,KAAK6hB,KAAKo+E,eAAe,EAAG12F,EAAW,GAAGwT,eAAeroB,KAE7D,CACHwjD,gBAAgB,EAChBjgC,aAAcnW,YACVmc,YAAoBlc,GAAMitC,WAAW/2B,cACzCgC,OAAQA,EACRgD,WAAY,GACZvoB,GAAI,KACJ6W,OAAQnW,IAAgBC,MAC3B,GAER,EACJ,KAEDqsG,4BAA+B3/F,IAC3B8f,KAAKwqB,SAAW,KAChBtqC,EAAOkc,YACHlc,EAAM,CAAC45E,gBAAgB,IACzBphE,YACFsH,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBjgC,aAAcnW,YAAqBC,EAAKkW,cACxCgC,QAASlY,EAAKkY,QAAU,IAAIjmB,KAAIoD,IAC5BA,EAAE2lB,eAAiB3lB,EAAE2lB,eAAeroB,GAC7B0C,KAEX6lB,WAAYlb,EAAKkb,YAAc,GAC/BvoB,GAAIqN,EAAKrN,GACT6W,OAAQxJ,EAAKwJ,QACf,EACL,KAEDo2F,4BAA8B,KAC1B9/E,KAAKC,SAAS,CAAC8/E,cAAc,GAAO,EACvC,KAED5qB,0BAA4B,KACxBn1D,KAAKC,SAAS,CAACwjE,YAAY,GAAO,EACrC,KAEDuc,4BAA8B,KAC1BhgF,KAAKC,SAAS,CAACggF,oBAAoB,GAAO,EAC7C,KAEDC,sBAAwB,CAACtB,EAAkBl0B,KACvC1qD,KAAKC,UAASC,GACNwqD,EACO,CAACtyD,OAAQ,IAAI8H,EAAU9H,OAAQ4H,KAAKo+E,eACvC1oG,KAAKC,OAAYuqB,EAAU9H,OAAOjmB,KAAIoD,GAAKA,EAAEE,cAAe,GAAM,EAClEmpG,KAGG,CAACxmF,OAAQ8H,EAAU9H,OAAO/X,QAC7B9K,GAAKA,EAAE2lB,iBAAmB0jF,MAEpC,EACL,KAEDuB,0BAA4B,CAACvB,EAAkBl0B,KAC3C1qD,KAAKC,UAASC,IACV,IAAIzF,EAAW,GAIf,OAHKiwD,GACDjwD,EAAStc,KAAK6hB,KAAKq+E,mBAEhB,CAACjmF,OAAQ8H,EAAU9H,OAAOjmB,KAAIoD,IAC7BA,EAAE2lB,iBAAmB0jF,IACrBrpG,EAAEygB,cAAgB00D,EAClBn1E,EAAEklB,SAAWA,GAEVllB,KACR,GACL,EACL,KAED6qG,iBAAoBxB,IAChB5+E,KAAKC,UAASC,IACH,CAAC9H,OAAQ8H,EAAU9H,OAAOjmB,KAAIoD,IAC7BA,EAAE2lB,iBAAmB0jF,IACrBrpG,EAAEklB,SAAW,IAAIllB,EAAEklB,SAAUuF,KAAKq+E,oBAE/B9oG,QAEb,EACL,KAED8qG,6BAA+B,CAACzB,EAAkBnpG,EAAaoS,EAAUxV,KACrE2tB,KAAKC,UAASC,GACHA,EAAU9H,OAAOjmB,KAAIoD,IACxB,GAAIA,EAAE2lB,iBAAmB0jF,EAAkB,CACvC,IAAInkF,EAAW,GACf,IAAK,IAAIi+D,KAAKnjF,EAAEklB,SACRi+D,EAAEjjF,cAAgBA,IAClBijF,EAAE7wE,GAAYxV,GAElBooB,EAAStc,KAAKu6E,GAGlBnjF,EAAEklB,SAAWA,CACjB,CACA,OAAOllB,CAAC,KAEd,EACL,KAED+qG,oBAAsB,CAAC1B,EAAkBnpG,KACrCuqB,KAAKC,UAASC,IACH,CAAC9H,OAAQ8H,EAAU9H,OAAOjmB,KAAIoD,IAC7BA,EAAE2lB,iBAAmB0jF,IACrBrpG,EAAEklB,SAAWllB,EAAEklB,SAASpa,QAAOq4E,GAAKA,EAAEjjF,cAAgBA,KAEnDF,QAEb,EACL,KAEDgrG,mBAAsBrgG,IAClBA,EAAOA,GAAQ,CAAC,EAEhB8f,KAAKC,UAASC,IACH,CAAC9E,WAAY,IAAI8E,EAAU9E,WAAY,CAC1CvoB,GAAI,KACJ4C,YAAaG,YAA2BsqB,EAAU9E,YAAc,EAChE3nB,MAAO,GACPolB,KAAM,CACFhmB,GAAI,KACJ8vD,IAAK,GACLlvD,MAAO,GACPyP,eAAgB,GAChBG,YAAa,CAACR,KAAM,GAAIE,SAAU,KAEtC+V,cAAe5Y,EAAK4Y,eAAiB,UAE3C,EACL,KAED0nF,8BAAgC,CAAC/qG,EAAayK,KAC1C8f,KAAKC,UAAUC,IACX,IAAI9E,EAAa,GACjB,IAAK,IAAI3T,KAAKyY,EAAU9E,WAChB3T,EAAEhS,cAAgBA,IAClBgS,EAAI9L,OAAOwE,OAAOsH,EAAGvH,IAEzBkb,EAAWjd,KAAKsJ,GAEpB,MAAO,CAAC2T,aAAW,GACrB,EACL,KAED4mC,sBAAyBvsD,IACrBuqB,KAAKC,UAASC,IACH,CAAC9E,WAAY8E,EAAU9E,WAAW/a,QAAQoH,GAAMA,EAAEhS,cAAgBA,OAC3E,EACL,KAED2iD,uBAA0Bl4C,IACtB6f,MAAMq4B,uBAAuBl4C,GAC7BA,EAAOkc,YAAoBlc,EAAM,CAAC45E,gBAAgB,IAAOphE,YACzDsH,KAAKC,SACD,CACIqrB,UAAU,EACVF,OAAO,EACP6D,YAAa,WACbp8C,GAAIqN,EAAKrN,GACT6W,OAAQxJ,EAAKwJ,OACb0R,WAAYlb,EAAKkb,aAErB,KACI4E,KAAKmvB,eAAiBvK,YAAW,KAC7B5kB,KAAKC,SAAS,CAACgvB,YAAajvB,KAAKy4B,oBAAoB,GACtD,IAAK,GAEf,EACJ,KAEDF,qBAAwB5wC,IACpBqY,KAAKg4B,aAAe,KACpBh4B,KAAKC,UACDC,IAAS,CACLorB,UAAU,EACV2D,YAAajvB,KAAKy4B,mBAClB9wC,OAAQwW,YACJxW,EACA,CACIK,WAAYgY,KAAKF,MAAM2gF,aACvBroF,OAAQ8H,EAAU9H,OAClBgD,WAAY8E,EAAU9E,YAE1B,CAAC,SAAU,WAAY,kBAGlC,EACJ,KAED8oE,aAAe,KACXlkE,KAAKwqB,SAAWpmB,EACZ,8BAA8BpE,KAAKF,MAAM2gF,eACzC,SACA,CAAC,EACD,CAAC,EACDzgF,KAAKmkE,yBACLnkE,KAAKokE,uBACLpkE,KAAKqkE,iCACR,EACJ,KAEDF,yBAA4BjkF,IACxB8f,KAAKwqB,SAAW,KAChBpxC,OAAO6F,SAASq5D,QAAQ,EAC3B,KAED8rB,uBAA0BlkF,IACtB8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVwjE,YAAY,EACZ4O,iBAAkB,oDAAgC3zE,YAAsBxe,EAAKiF,YAC/E,EACL,KAEDk/E,iCAAoC36E,IAChCsW,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVwjE,YAAY,EACZ4O,iBAAkB,+FAAuD3oF,MAC3E,EACL,KAEDg3F,aAAe,KACX1gF,KAAKC,SACD,CAACqrB,UAAU,EAAM20D,oBAAoB,EAAOloD,eAAgB,KAC5D,KACI/3B,KAAKg4B,aAAe5zB,EAChBpE,KAAK2gF,eACL,MACA,CAAC,EACD3gF,KAAK4gF,iCACL5gF,KAAK6gF,yBACL7gF,KAAKq4B,qBACLr4B,KAAKs4B,+BACLt4B,KAAKu4B,qBACR,GAER,EACJ,KAEDsoD,yBAA4B3gG,IACxB8f,KAAKg4B,aAAe,KACpBh4B,KAAKF,MAAMghF,gBAAgB5gG,EAAKyR,UAAY,CAAC,GAAG9e,IAAM,KAAK,EAC9D,KAiBDokD,iBAAmB,KACXj3B,KAAKG,MAAMirB,MACXprB,KAAKwqB,SAAWpmB,EACZ,eACA,MACA,CAAC,EACD,CAAC,EACDpE,KAAK4/E,2BACL5/E,KAAK62B,iBACL72B,KAAK82B,4BAGT92B,KAAKwqB,SAAWpmB,EACZ,8BAA8BpE,KAAKF,MAAM2gF,eACzC,MACA,CAAC,EACD,CAAC,EACDzgF,KAAK6/E,4BACL7/E,KAAK62B,iBACL72B,KAAK82B,2BAEb,CACH,CAnCDN,mBAAmB12B,GACf,MAAO,CACHsrB,MAAOtrB,EAAMsrB,MACb20D,cAAc,EACdtc,YAAY,EACZwc,oBAAoB,EACpB7pF,aAAc,CAAC,EACfgC,OAAQ,GACRgD,WAAY,GACZi3E,iBAAkB,GAE1B,CA0BAn7C,cAAc/xC,GAEV,OADAA,EAAUuZ,YAAsBvZ,GAC5B6a,KAAKG,MAAMirB,MACJ,oEAAqDjmC,IAEzD,sDAAuCA,GAClD,CAEAgyC,6BAA6BztC,GACzB,OAAIsW,KAAKG,MAAMirB,MACJ,2GAAuF1hC,IAE3F,6FAAyEA,IACpF,CAEAq3F,4BACI,IAAIrsB,EAAkB,EACtB,IAAK,IAAIn/E,KAAKoG,OAAO6nB,OAAOxD,KAAKG,MAAM/H,QACnC,IAAK,IAAIsgE,KAAKnjF,EAAEklB,SACRi+D,EAAEjjF,YAAci/E,IAChBA,EAAkBgE,EAAEjjF,aAIhC,OAAOi/E,CACX,CAEA0pB,eAAe3oG,EAAampG,GACxB,MAAO,CACH/rG,GAAI,KACJ4C,cACAylB,eAAgB0jF,EAChB5oF,eAAe,EACfyE,SAAU,CAACuF,KAAKq+E,mBAExB,CAEAA,kBACI,MAAO,CACHxrG,GAAI,KACJ4C,YAAauqB,KAAK+gF,4BAA8B,EAChDprF,KAAM,KACNnP,KAAM,GAEd,CAEA4vC,aAAat2B,GACTE,KAAKy4B,mBAAqB,wCAC9B,CAEAR,aACI,OAAOj4B,KAAKG,MAAMirB,MAAQ,gBAAkB,8BAA8BprB,KAAKF,MAAM2gF,cACzF,CAEAvoD,gBACI,OAAOl4B,KAAKG,MAAMirB,MAAQ,OAAS,KACvC,CAEA+M,mBACI,MAAMj4C,EAAO,CACTkY,OAAQ4H,KAAKG,MAAM/H,OACnBgD,WAAY4E,KAAKG,MAAM/E,WAAWjpB,KAAIsV,IAC3B,CAAC5U,GAAI4U,EAAE5U,GAAIY,MAAOgU,EAAEhU,MAAOolB,KAAMpR,EAAEoR,KAAKhmB,QAMvD,OAHImtB,KAAKG,MAAMirB,QACXlrC,EAAiB,WAAI8f,KAAKF,MAAM2gF,cAE7BrkF,YAAoBlc,EAAM,CAACsb,UAAU,GAChD,CAEAmlF,eACI,MAAO,8BAA8B3gF,KAAKF,MAAM2gF,qBACpD,CAEAO,uBACI,MAAO,CACHh5F,WAAYgY,KAAKF,MAAM2gF,aACvBroF,OAAQ4H,KAAKG,MAAM/H,OACnBgD,WAAY4E,KAAKG,MAAM/E,WAAWjpB,KAAIsV,IAC3B,CAAC5U,GAAI4U,EAAE5U,GAAIY,MAAOgU,EAAEhU,MAAOolB,KAAMpR,EAAEoR,KAAKhmB,OAG3D,CAEA+tG,iCACI,OAAOxkF,YACH4D,KAAKghF,uBAAwB,CAACxlF,UAAU,GAChD,CAIAo8B,gBACI,MAAMqpD,EAAejhF,KAAKG,MAAMzW,OAC1Bw8B,EAAalmB,KAAKG,MAAMmrB,UACxB,eAAEyM,EAAc,iBAAEs6C,EAAgB,MAAEjnD,GAAUprB,KAAKG,MACnD+gF,GAAoBlhF,KAAKG,MAAMxY,QAAU,CAAC,GAAGK,YAAc,GAC3Dm5F,EAAmB9O,EAAiBr+F,OAAS,GAAK+jD,EAAe/jD,OAAS,GAAKktG,EAAiBltG,OAAS,EAE/G,OACI2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAEwe,EAAQ,YAAW,SAAS,gBACtDprB,KAAKy3C,qBACN93C,IAAAU,cAAC69E,GAAgB,CACbv2F,OAAQqY,KAAKG,MAAMxY,OACnBu+B,WAAYA,EACZ9tB,OAAQ4H,KAAKG,MAAM/H,OACnBmmF,sBAAsB,EACtBnjF,WAAY4E,KAAKG,MAAM/E,WACvB1T,WAAYsY,KAAKF,MAAMpY,WACvBs3F,gBAAiBh/E,KAAKkgF,sBACtBjB,oBAAqBj/E,KAAKmgF,0BAC1BZ,mBAAoBv/E,KAAKugF,mBACzBf,sBAAuBx/E,KAAKgiC,sBAC5By9C,8BAA+Bz/E,KAAKwgF,8BACpCnB,aAAcr/E,KAAKogF,iBACnBtC,yBAA0B99E,KAAKqgF,6BAC/BpC,gBAAiBj+E,KAAKsgF,sBAE1B3gF,IAAAU,cAACyQ,EAAU,CAACK,SAAO,EAAChD,WAAS,EAACkD,OAAK,EAACE,SAAO,GACvC5R,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACwR,EAAY,CACTE,QAAM,EACNnI,SAAUsc,EACV9W,QAAUx8B,IACNotB,KAAKC,SAAS,CAAC8/E,cAAc,IAC7BntG,EAAEy8B,cAAcC,MAAM,GACvB,UACK8b,EAAQ,YAAc,cAAS,YAEzCA,GACEzrB,IAAAU,cAACwR,EAAY,CACTjI,SAAUsc,EACV7T,QAAM,EACNjD,QAASA,IAAMpP,KAAKC,SAAS,CAACwjE,YAAY,EAAM4O,iBAAkB,MAAM,yBAI9D,OAAjB4O,GAAyB,CAAC,QAAS,aAAaxsG,SAASwsG,EAAa3uG,QACnEqtB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACwR,EAAY,CACTjI,SAAUsc,EACVlU,MAAI,EACJ5C,QAASpP,KAAK83B,YACb93B,KAAKG,MAAM8uB,aAEY,aAA3BjvB,KAAKG,MAAM8uB,aAA8BtvB,IAAAU,cAAA,QAAMoN,KAAK,QAAQlB,UAAU,WAAU,eAI7F5M,IAAAU,cAACwR,EAAY,CACTtF,UAAU,gBACV3C,SAAUsc,IAAevqC,OAAOS,KAAK4jB,KAAKG,MAAM/J,cAAcpiB,OAC9Du+B,MAAI,EACJnD,QAASA,IAAMpP,KAAKC,SAChB,CAACggF,oBAAoB,EAAMxc,YAAY,EAAOsc,cAAc,KAAS,kCAIhF1N,EAAiBr+F,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEuqF,GAC5Ct6C,EAAe/jD,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEiwC,GAC1CmpD,EAAiBltG,OAAS,GAAK2rB,IAAAU,cAAA,UAAK6gF,EAAiB/uG,KAAI,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,MACjGuuG,GAAoBxhF,IAAAU,cAAA,QAAMkM,UAAU,UAAUkB,KAAK,SAAQ,uCAE1DyY,GAAclmB,KAAKG,MAAM4/E,cAAgB//E,KAAKohF,sBAC9Cl7D,GAAclmB,KAAKG,MAAMsjE,YAAczjE,KAAKqhF,sBAC5Cn7D,GAAclmB,KAAKG,MAAM8/E,oBAAsBjgF,KAAKshF,qBAGlE,CAEA7pC,qBACI,IAAI/9D,EAsBJ,OATIA,EAZCiC,OAAOS,KAAK4jB,KAAKG,MAAM/J,cAAcpiB,OAalC2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC25B,GAAY,CAAC5jC,aAAc4J,KAAKG,MAAM/J,eACvCuJ,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,qFACuD/M,IAAAU,cAACwQ,IAAI,CAAChnB,GAAG,0BAA0B0iB,UAAU,aAAY,mCAAiC,6BAdhK5M,IAAAU,cAAA,OAAKoN,KAAK,SAAS,YAAU,UACzB9N,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,+EAC0D6X,IAAAU,cAACwQ,IAAI,CAAChnB,GAAG,0BAA0B0iB,UAAU,aAAY,mCAAiC,KAEhK5M,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,uIAgBpB6X,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACyQ,EAAU,CAACK,SAAO,EAAChD,WAAS,GACzBxO,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,kBAE7BlzB,EAGb,CAEA0nG,qBACI,IAAIG,EAOJ,OALIA,EADAvhF,KAAKG,MAAMirB,MACKzrB,IAAAU,cAACwR,EAAY,CAACU,MAAI,EAACzF,IAAK+D,IAAMzB,QAASA,IAAMh2B,OAAO6F,SAASq5D,SAAUzuD,GAAI,eAAemW,KAAKF,MAAM2gF,gBAAgB,OAErH9gF,IAAAU,cAACwR,EAAY,CAACU,MAAI,EAACnD,QAASA,IAAMh2B,OAAO6F,SAASq5D,UAAU,OAI5E34C,IAAAU,cAACoc,GAAY,CACTG,YAAa,qCAAgC5c,KAAKG,MAAMirB,MAAQ,YAAc,0EAC9Ezb,QAAS3P,KAAK8/E,6BAEdngF,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAK8/E,4BAA6B/tE,QAAM,GAAC,OAC/DwvE,GAIjB,CAEAC,iBAAiB7xE,EAAS8xE,EAAW/sF,GACjC,OACIiL,IAAAU,cAACoc,GAAY,CACTG,YAAaloB,EACbib,QAASA,GAEThQ,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACE,QAAM,EAAC3C,QAASO,GAAS,OACvChQ,IAAAU,cAACwR,EAAY,CAACU,MAAI,EAACnD,QAASqyE,GAAW,QAIvD,CAEAJ,qBACI,OAAOrhF,KAAKwhF,iBACRxhF,KAAKm1D,0BAA2Bn1D,KAAKkkE,aACrC,4DAER,CAEAod,qBACI,OAAOthF,KAAKwhF,iBACRxhF,KAAKggF,4BAA6BhgF,KAAK0gF,aACvC,iEAER,EAIJ,MAAMgB,WAAkC/B,GAAW9/E,cAAA,IAAA0B,EAAA,SAAAxtB,WAAAwtB,EAAAvB,KAE/C,KAEAylC,yBAA4BpzD,IACxB2tB,KAAKC,UAASC,IACV,GAAI7tB,EAAMA,QAAU6tB,EAAU9J,aAAa7V,aAAalO,MACpD,MAAO,CAAC,EAEZ,IAAIqzD,EAAM,CACNx7C,qBAAsB,GACtB3J,aAAclO,GAEdmO,EAAQ,CACRjE,KAAM,KACNqe,YAAa,GACbzB,OAAQ,GACRpC,MAAO,GACPa,YAAa,IASjB,MAPoB,WAAhBvlB,EAAMA,OACNmO,EAAMjE,KAAO,SACbmpD,EAAgC,2BAAIvyD,IAA6B,IAGjEuyD,EAAgC,2BAAIvyD,IAA6B,GAE9D,CAACijB,aAAcza,OAAOwE,OAAO,CAAC,EAAG+f,EAAU9J,aAAc,IACzDsvC,EACHllD,MAAO7E,OAAOwE,OAAO,CAAC,EAAG+f,EAAU9J,aAAa5V,MAAOA,KACxD,GACL,EACL,KAEDirC,sBAAwB,CAACpzC,EAAMhG,EAAO0X,KAClCiW,KAAKC,UAASC,IACV,IAAIylC,EAAO,CAAC,CAACttD,GAAOhG,GAIpB,MAHa,+BAATgG,GAAyC6nB,EAAU9J,aAAyC,2BAAE/jB,QAAUA,EAAMA,QAC9GszD,EAA2B,qBAAI,IAE/B57C,EACO,CAACqM,aAAcza,OAAOwE,OAAO,CAAC,EAAG+f,EAAU9J,aAAc,CAC5D5V,MAAO7E,OAAOwE,OAAO,CAAC,EAAG+f,EAAU9J,aAAa5V,MAAOmlD,MAGpD,CAACvvC,aAAcza,OAAOwE,OAAO,CAAC,EAAG+f,EAAU9J,aAAcuvC,GACpE,GACF,EACL,KAEDpJ,wBAA2BlqD,IACvB2tB,KAAKC,UAASC,IACH,CAAC9J,aAAcza,OAAOwE,OAAO,CAAC,EAAG+f,EAAU9J,aAAc,CAC5D5V,MAAO7E,OAAOwE,OAAO,CAAC,EAAG+f,EAAU9J,aAAa5V,MAAOnO,QAE7D,EACL,KAEDuzD,iCAAmC,SAACvzD,GAAiB0B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,KAE7C1B,EAAQA,EAAM8D,QAAQ,QAAS,KAEnCorB,EAAKtB,UAASC,IACH,CAAC9J,aAAcza,OAAOwE,OAAO,CAAC,EAAG+f,EAAU9J,aAAc,CAAClM,qBAAsB7X,OAE/F,EAAC,KAEDylD,WAAa,OAAQ,KAErBS,qBAAwB5wC,IACpBqY,KAAKg4B,aAAe,KACpBh4B,KAAKC,UACDC,IAAS,CACLorB,UAAU,EACV2D,YAAajvB,KAAKy4B,mBAClB9wC,OAAQwW,YACJxW,EACAqY,KAAKghF,uBACL,CAAC,SAAU,WAAY,kBAGlC,EACJ,KAEDH,yBAA4B3gG,IACxB8f,KAAKF,MAAM6hF,aAAazhG,EAAM8f,KAAKG,MAAMirB,MAAM,EAGnD,KAEA6L,iBAAmB,KACf,GAAIj3B,KAAKG,MAAMirB,MAAO,CAClB,IAAIlrC,EAAO,CAACm2C,gBAAgB,GACS,IAAjCr2B,KAAKF,MAAMpY,WAAW1T,SACtBkM,EAAa,OAAI,CAAC8f,KAAKo+E,eACnB,EAAGp+E,KAAKF,MAAMpY,WAAW,GAAGwT,eAAeroB,MAEnDmtB,KAAKC,SAAS/f,EAClB,MACI8f,KAAKwqB,SAAWpmB,EACZ,iBAAiBpE,KAAKF,MAAM67E,WAC5B,MACA,CAAC,EACD,CAAC,EACD37E,KAAK6/E,4BACL7/E,KAAK62B,iBACL72B,KAAK82B,2BAEb,CACH,CAEDN,mBAAmB12B,GACf,OAAOnkB,OAAOwE,OACV4f,MAAMy2B,mBAAmB12B,GACzB,CAAC1J,aAAcza,OAAOwE,OAAO,CAAC,EAAGu/F,KAEzC,CAEAtpD,aAAat2B,GACTE,KAAKy4B,mBAAqB,oBAC9B,CAEAkoD,eACI,OAAI3gF,KAAKG,MAAMirB,MACJ,8BAA8BprB,KAAKF,MAAM2gF,sBAE7C,iBAAiBzgF,KAAKF,MAAM67E,iBACvC,CAEAqF,uBACI,MAAM5qF,EAAe4J,KAAKG,MAAM/J,aAC1B5V,EAAQ4V,EAAa5V,MAC3B,MAAO,CACHwH,WAAYgY,KAAKF,MAAM2gF,aACvBrqF,aAAc,CACV3iB,MAAO2iB,EAAa3iB,MACpB2M,2BAA4BgW,EAAahW,2BAA2B/N,MACpE6X,qBAAsBkM,EAAalM,qBACnC1J,MAAO,CACHjE,KAAMiE,EAAMjE,KACZqe,YAAapa,EAAMoa,YACnBzB,OAAQ3Y,EAAM2Y,OACdpC,MAAOvW,EAAMuW,MACba,YAAapX,EAAMoX,YACnBvN,YAAa7J,EAAM6J,YACnBkQ,MAAO/Z,EAAM+Z,MACbtC,UAAWzX,EAAMyX,YAGzBG,OAAQ4H,KAAKG,MAAM/H,OACnBgD,WAAY4E,KAAKG,MAAM/E,WAAWjpB,KAAIsV,IAC3B,CAAC5U,GAAI4U,EAAE5U,GAAI4C,YAAagS,EAAEhS,YAAahC,MAAOgU,EAAEhU,MAAOolB,KAAMpR,EAAEoR,KAAKhmB,OAGvF,CAIA6kD,eACI,OAAO,IACX,CAEAE,gBACI,MAAM,eAAEG,EAAc,MAAE3M,GAAUprB,KAAKG,MACjC+gF,GAAoBlhF,KAAKG,MAAMxY,QAAU,CAAC,GAAGK,YAAc,GAC3Dk+B,EAAalmB,KAAKG,MAAMmrB,SAC9B,OACI3rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAEwe,EAAQ,QAAU,SAAS,gBACtDzrB,IAAAU,cAAC69E,GAAgB,CACb9nF,aAAc4J,KAAKG,MAAM/J,aACzBzO,OAAQqY,KAAKG,MAAMxY,OACnBu+B,WAAYA,EACZ9tB,OAAQ4H,KAAKG,MAAM/H,OACnBmmF,sBAAsB,EACtBnjF,WAAY4E,KAAKG,MAAM/E,WACvB1T,WAAYsY,KAAKF,MAAMpY,WACvB2yC,gBAAiBr6B,KAAKyrB,sBACtBiQ,kBAAmB17B,KAAKu8B,wBACxBnC,2BAA4Bp6B,KAAK4lC,iCACjC9K,mBAAoB96B,KAAKylC,yBACzBu5C,gBAAiBh/E,KAAKkgF,sBACtBjB,oBAAqBj/E,KAAKmgF,0BAC1BZ,mBAAoBv/E,KAAKugF,mBACzBf,sBAAuBx/E,KAAKgiC,sBAC5By9C,8BAA+Bz/E,KAAKwgF,8BACpCnB,aAAcr/E,KAAKogF,iBACnBtC,yBAA0B99E,KAAKqgF,6BAC/BpC,gBAAiBj+E,KAAKsgF,sBAE1B3gF,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CACTE,QAAM,EACNnI,SAAUsc,EACV9W,QAASpP,KAAKF,MAAM2sD,aAAa,UACzBrhC,EAAQ,YAAc,cAAS,WAE3CzrB,IAAAU,cAACwR,EAAY,CACTjI,SAAUsc,EACV1c,SAAO,EACP4F,QAASpP,KAAK0gF,cAChB1gF,KAAKG,MAAM8uB,cAEhB8I,EAAe/jD,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAASsqB,GACvDmpD,EAAiBltG,OAAS,GAAK2rB,IAAAU,cAAA,MAAIoN,KAAK,SAASyzE,EAAiB/uG,KAAI,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,MAC9GotB,KAAKG,MAAM4/E,cAAgB//E,KAAKohF,qBAG7C,EC3xBJ,MAAMQ,WAAe3rD,GAAcp2B,cAAA,SAAA9rB,WAAA,KAmB/B8rG,4BAA+B3/F,IAC3B8f,KAAKwqB,SAAW,MAChBtqC,EAAOkc,YACHlc,EAAM,CAAC45E,gBAAgB,IAAOphE,aAO9BsH,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBjgC,aAAclW,EAAKkW,aAAenW,YAAqBC,EAAKkW,cAAgB,CAAC,EAC7EgC,QAASlY,EAAKkY,QAAU,IAAIjmB,KAAIoD,IAC5BA,EAAE2lB,eAAiB3lB,EAAE2lB,eAAeroB,GAC7B0C,KAEX6lB,WAAYlb,EAAKkb,YAAc,GAC/BvoB,GAAIqN,EAAKrN,GACT6W,OAAQxJ,EAAKwJ,OACbq4D,UAAW/+D,YAAmB9C,KAflC8f,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBjM,WAAY,sDAepB,EACH,KAEDy3D,6BAA+B,KAC3B7hF,KAAKC,SAAS,CAAC6hF,eAAe,GAAO,EACxC,KAEDC,eAAiB,KACT/hF,KAAKF,MAAMk6D,UAEfh6D,KAAKwqB,SAAWpmB,EACZ,8BAA8BpE,KAAKF,MAAM2gF,wBACzC,MACA,CAAC,EACD,CAAC,EACDzgF,KAAKgiF,2BACLhiF,KAAKiiF,yBACLjiF,KAAKkiF,oCACR,EACJ,KAEDF,2BAA8B9hG,IAC1B8f,KAAKwqB,SAAW,KAChBxqB,KAAKF,MAAMqiF,kBAAkB,EAChC,KAEDF,yBAA4B/hG,IACxB8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACV6hF,eAAe,EACfM,mBAAoB,gDAAiC1jF,YAAsBxe,EAAKiF,YAClF,EACL,KAED+8F,mCAAsCx4F,IAClCsW,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACV6hF,eAAe,EACfM,mBAAoB,2FAAwD14F,MAC9E,EACL,KAmCD24F,aAAe,KACX,IAAIroG,EAEAA,EADAgmB,KAAKF,MAAM67E,SACL,iBAAiB37E,KAAKF,MAAM67E,WAE5B,8BAA8B37E,KAAKF,MAAM2gF,eAEnDzgF,KAAKwqB,SAAWpmB,EACZpqB,EACA,MACA,CAAC,EACD,CAAC,EACDgmB,KAAK6/E,4BACL7/E,KAAK62B,iBACL72B,KAAK82B,2BACR,CACJ,CAhIDF,mBAAmB12C,GACf8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SACD,CAACvY,YAAa4T,YAAgBpb,EAAKqH,eAAeG,YAAc,IAAIvV,KAAIsV,IAC7D,CACH5U,GAAI4U,EAAE5U,GACNqoB,eAAgBzT,EAAEyT,eAClBtV,MAAO6B,EAAE7B,MACToQ,cAAevO,EAAEuO,mBAGzBgK,KAAKqiF,aAEb,CAoEA7rD,mBAAmB12B,GACf,MAAMwiF,EAAc,CAChB56F,WAAY,GACZ0O,aAAc,CAAC,EACfgC,OAAQ,GACRgD,WAAY,GACZ2mD,UAAW,CAAC,GAEhB,OAAI/hD,KAAKF,MAAMk6D,QACJsoB,EAEJ,IACAA,EACHR,eAAe,EACfM,mBAAoB,GAE5B,CAEAhrD,cACI,MAAO,sBAAsBp3B,KAAKF,MAAM2gF,cAC5C,CAEAvpD,cAAc/xC,GAEV,MAAO,sDADPA,EAAU4a,MAAMm3B,cAAc/xC,IAElC,CAEAgyC,6BAA6BztC,GACzB,MAAO,+GAA4EA,IACvF,CAsBA8tC,mBACI,OAAIx3B,KAAKF,MAAMk6D,QAEPr6D,IAAAU,cAACghB,GAAO,CACJv5B,OAAK,EACLjV,GAAG,qBACHyuC,YAAY,iBACZC,aAAcvhB,KAAKG,MAAMiqB,YACzBzqB,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC4F,QAASpP,KAAKF,MAAMyiF,gBAAgB,OAI/DxiF,MAAMy3B,kBACjB,CAEAE,eACI,GAAI13B,KAAKG,MAAMk2B,gBAAkBr2B,KAAKG,MAAMiqB,WAAWp2C,OAAU,OAAO,KAExE,MAAM,MAAC1B,EAAK,MAAEmB,GAASusB,KAAKG,MAAMzW,OAElC,OACIiW,IAAAU,cAAAV,IAAAyc,SAAA,KACKpc,KAAKF,MAAMk6D,SACRr6D,IAAAU,cAACwR,EAAY,CACTtF,UAAU,6BACV/C,SAAO,EACP4F,QAASpP,KAAKF,MAAMyiF,gBAAgB,wBAI5C5iF,IAAAU,cAACkmB,GAAW,CACRC,WAAsB,UAAVl0C,EAAoB,aAA0B,cAAVA,EAAwB,uBAAyB,oBACjGm0C,WAAYhzC,IAChBksB,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,uBAGtC,CAEAgrB,gBACI,OACIj4B,IAAAU,cAAAV,IAAAyc,SAAA,KACKpc,KAAKy3C,qBACLz3C,KAAKs+E,eACLt+E,KAAK87D,oBACJ97D,KAAKF,MAAMk6D,SACTr6D,IAAAU,cAAAV,IAAAyc,SAAA,KACKpc,KAAKwiF,uBACLxiF,KAAKG,MAAM2hF,eAAiB9hF,KAAKyiF,wBAGzCziF,KAAKG,MAAM/J,aAAa/S,YAAYxQ,KAAOmtB,KAAK4Y,QAAQ/jB,KAAKhiB,IAC1D8sB,IAAAU,cAACqhB,GAAc1hB,KAAKG,MAAM4hD,WAI1C,CAEAtK,qBACI,IAAI/9D,EAeJ,OAPIA,EAPCiC,OAAOS,KAAK4jB,KAAKG,MAAM/J,cAAcpiB,OAQlC2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC25B,GAAY,CAAC5jC,aAAc4J,KAAKG,MAAM/J,eACvCuJ,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,iEARf/M,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,+EAC0D6X,IAAAU,cAACwQ,IAAI,CAAChnB,GAAG,0BAA0B0iB,UAAU,aAAY,mCAAiC,KAYpK5M,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,iBACzBlzB,EAGb,CAEA4kG,eACI,MAAM52F,EAAasY,KAAKG,MAAMzY,WAC9B,OACIiY,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,sCACjB5M,IAAAU,cAACyQ,EAAU,CAACK,SAAO,EAAChD,WAAS,GACzBxO,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,gBAE7BllB,EAAW1T,OAAS,EACjB0T,EAAWvV,KAAIsV,GAAKuY,KAAK0+E,qBAAqBj3F,KAC9CuY,KAAK2+E,qBAGrB,CAEAD,qBAAqBt2F,GACjB,MAAMy2F,EAAS7+E,KAAKG,MAAM/H,OAAO/X,QAAO9K,GAAKA,EAAE2lB,iBAAmB9S,EAAW8S,eAAeroB,KAAI,IAAM,KACtG,OAAKgsG,EASDl/E,IAAAU,cAACgT,EAAS,CAAC53B,IAAKojG,EAAOhsG,GAAIs7B,WAAS,GAChCxO,IAAAU,cAACyQ,EAAU,CAACK,SAAO,EAAChD,WAAS,GACzBxO,IAAAU,cAAA,OAAKkM,UAAU,oDACX5M,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAY5M,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAK,cAAc,mDACxE9P,IAAAU,cAACgM,EAAI,CAAC/5B,OAAK,GAAE8V,EAAWxC,QAE3Bi5F,EAAO7oF,eAAiB2J,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAY5M,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAK,cAAc,uBAEpGovE,EAAO7oF,cAAgBgK,KAAK0iF,iBAAiB7D,GAAU7+E,KAAK2iF,oBAAoB9D,IAfjFl/E,IAAAU,cAAA,OAAK5kB,IAAK2M,EAAWvV,GAAI05B,UAAU,+EAC/B5M,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAY5M,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAK,WAAW,mDACrE9P,IAAAU,cAACgM,EAAI,CAAC/5B,OAAK,GAAE8V,EAAWxC,MAAM,IAAC+Z,IAAAU,cAAA,YAAM,WAgBrD,CAEAqiF,iBAAiB7D,GACb,OACIl/E,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKD,eAAa,GAAC,sBAC7BlN,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,sBAAiBmyE,EAAOpkF,SAASzmB,QAC5C2rB,IAAAU,cAACyQ,EAAU,CAAChE,IAAI,MACX+xE,EAAOpkF,SAAStoB,KAAIumF,GACjB/4D,IAAAU,cAACyN,EAAG,CAACryB,IAAKi9E,EAAE7lF,GAAIi6B,IAAI,KAAK0B,YAAa,GAAGkqD,EAAE/iE,WAAYuY,eAAa,GAC/DwqD,EAAElyE,KAAKxS,OAAS,GACb2rB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAamsD,EAAElyE,WAQ/D,CAEAm8F,oBAAoB9D,GAChB,OACIl/E,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACgM,EAAI,KAAEwyE,EAAOpkF,SAAS,GAAG9E,KAAK,QAG3C,CAEAgpF,qBACI,MAAME,EAAS7+E,KAAKG,MAAM/H,OAAO,GACjC,OACIuH,IAAAU,cAACgT,EAAS,CAAC53B,IAAKojG,EAAOhsG,GAAIs7B,WAAS,GAChCxO,IAAAU,cAACyQ,EAAU,CAACK,SAAO,EAAChD,WAAS,GACzBxO,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAY5M,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAK,cAAc,8BACvEovE,EAAO7oF,eAAiB2J,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAY5M,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAK,cAAc,uBAEpGovE,EAAO7oF,cAAgBgK,KAAK0iF,iBAAiB7D,GAAU7+E,KAAK2iF,oBAAoB9D,GAG7F,CAEA/iB,mBACI,MAAM,WAAE1gE,EAAU,GAAEvoB,GAAOmtB,KAAKG,MAChC,OACIR,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,sCACjB5M,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKD,eAAa,GAAC,wBAC7BlN,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,iBAAgB,sBAAiBnR,EAAWpnB,QACjE2rB,IAAAU,cAACykC,GAAgB,CAAC1pC,WAAYA,EAAYiqC,WAAYxyD,IAGlE,CAEA2vG,uBACI,GAAgC,cAA5BxiF,KAAKG,MAAMzW,OAAOpX,MAAyB,OAAO,KACtD,MAAMswG,EAAmB5iF,KAAKG,MAAMiiF,mBACpC,OACIziF,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CACTG,MAAI,EACJ5C,QAASA,IAAMpP,KAAKC,SAAS,CAAC6hF,eAAe,EAAMM,mBAAoB,MAAM,wBAIrFziF,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACdyxE,EAAiB5uG,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAE86F,IAI7D,CAEAH,uBACI,OACI9iF,IAAAU,cAACoc,GAAY,CACTG,YAAY,wDACZjN,QAAS3P,KAAK6hF,8BAEdliF,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACE,QAAM,EAAC3C,QAASpP,KAAK6hF,8BAA8B,OACjEliF,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC4F,QAASpP,KAAK+hF,gBAAgB,QAIpE,EAIJH,GAAO96C,YAAcjmC,EC1WrB,MAAMgiF,GAAa/iF,IACf,MAAM,UAAEyM,EAAS,OAAEsyE,GAAW/+E,GACxB,aAAE1J,EAAY,SAAEqE,GAAaokF,EAEnC,IAKIlpF,EALAmtF,EAAe,KACfhjF,EAAMijF,mBACND,EAAenjF,IAAAU,cAACgM,EAAI,CAACE,UAAU,yBAAwB,gBAI3D,IAAI/lB,EAAO,KACX,GAAIsZ,EAAMkjF,iBAEFrtF,EADA8E,EAASzmB,OAAS,EAEd2rB,IAAAU,cAAA,UACK5F,EAAStoB,KAAI,CAACumF,EAAG5jF,IACd6qB,IAAAU,cAAA,MAAI5kB,IAAK3G,EAAGy3B,UAAU,WAClB5M,IAAAU,cAACgM,EAAI,CAACE,UAAU,kBAAkBz3B,EAAI,EAAE,KAAG4jF,EAAE/iE,KAAK,QAClDgK,IAAAU,cAACgM,EAAI,CAACE,UAAU,8BAA8BmsD,EAAElyE,UAMzD,GAAGiU,EAAS,GAAG9E,WAEtBmK,EAAM6L,YAAclR,EAAS,GAAGjU,KAAKxS,OAAS,IAC9CwS,EACImZ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,OAAOw6B,IAAI,SAC7BnN,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAa9R,EAAS,GAAGjU,aAKrD,GAAIiU,EAASzmB,OAAS,EAAG,CACrB,MAAM0M,EAASD,YAAega,EAAStoB,KAAIumF,GAAKA,EAAE/iE,QAClDA,EAAO,GAAGjV,EAAOM,SAASN,EAAO/K,YAAY8kB,EAASzmB,kBAC1D,MACI2hB,EAAO,GAAG8E,EAAS,GAAG9E,WAI9B,IAAIyF,EAAa,KACb0E,EAAMmjF,kBACN7nF,EACIuE,IAAAU,cAACiY,GAAc,CACXhmC,MAAM,uBACNw6B,IAAI,QACJ31B,UAAW0nG,EAAOzjF,WAAWpnB,OAAS,EAAI2rB,IAAMuc,YAAc,MAC9Dvc,IAAAU,cAACykC,GAAgB,CAAC1pC,WAAYyjF,EAAOzjF,WAAYiqC,WAAYw5C,EAAOqE,aAKhF,MAAM1iG,EAAQ4V,EAAa5V,OAAS,CAAC,EACrC,OACImf,IAAAU,cAACyN,EAAG,CACAI,eAAa,EACb3B,UAAWA,EACXO,IAAI,KACJ0B,YACI7O,IAAAU,cAAAV,IAAAyc,SAAA,KAAE,UACUhmB,EAAa3iB,MACpBqvG,IAIRjE,EAAOpD,WAAa97E,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC6X,IAAAU,cAAA,QAAMkM,UAAU,WAAU,mBAAsB,aACjF5M,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,iBAAiBw6B,IAAI,SACvCnN,IAAAU,cAACgM,EAAI,KAAEjW,EAAa3iB,QAExBksB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,wBAAcw6B,IAAI,SACpCnN,IAAAU,cAACgM,EAAI,KAAE,GAAG7rB,EAAMoX,aAAe,KAAoB,WAAfpX,EAAMjE,KAAoB,GAAK,MAAQiE,EAAMjE,MAAQ,QAE7FojB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,OAAOw6B,IAAI,SAASnX,GACzCnP,EACA4U,GAEH,ECjFR+nF,GAAiBrjF,GAEfH,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,sBACVoD,QAAS7P,EAAMyiF,gBAEf5iF,IAAAU,cAACuhF,GAAM,CACHnB,aAAc3gF,EAAM2gF,aACpB9E,SAAU77E,EAAM67E,SAChB3hB,SAAS,EACTuoB,eAAgBziF,EAAMyiF,kBCHtC,MAAMa,WAAezqD,GAAuB94B,cAAA,SAAA9rB,WAExC,KAEAsvG,mBAAqB,KACjBrjF,KAAKC,SAAS,CACV8sE,WAAW,EACXuW,6BAA8B,MAChC,CACL,CAIDntD,SAASr2B,GACLC,MAAMo2B,SAASr2B,GACfE,KAAKk5B,YAAc,eACnBl5B,KAAKmjB,cAAgB,CACjB,CAAC,wBAAyB,0CAC1B,CAAC,yBAA0B,2CAC3B,CAAC,yBAA0B,2CAC3B,CAAC,0BAA2B,4CAC5B,CAAC,yBAA0B,iDAC3B,CAAC,0BAA2B,kDAC5B,CAAC,yBAA0B,4CAC3B,CAAC,0BAA2B,6CAC5B,CAAC,kBAAmB,mCACpB,CAAC,mBAAoB,oCACrB,CAAC,kCAAmC,oDACpC,CAAC,mCAAoC,sDAEzCnjB,KAAKkjB,aAAe,gBACpBljB,KAAK2iB,eAAiB,qBACtB3iB,KAAKq5B,sBAAwBgkD,GAE7Br9E,KAAKs5B,gBAAkBulB,EAC3B,CAEAroB,mBAAmB12B,GACf,IAAImjB,EACJ,IAAK,IAAI8S,KAAK/1B,KAAKmjB,cACf,GAAa,4BAAT4S,EAAE,GAAkC,CACpC9S,EAAe8S,EACf,KACJ,CAEJ,MAAO,IACAh2B,MAAMy2B,mBAAmB12B,GAC5BmjB,aAAc,CAAC5wC,MAAO4wC,EAAa,GAAI3wC,MAAO2wC,EAAa,IAC3DuL,QAAS,CAAC,EACVhlC,QAASwW,KAAKujF,kBACdxW,WAAW,EACXuW,6BAA8B,KAEtC,CAEAlsD,cACI,MAAO,kBACX,CAEAE,eACI,IAAI4nB,EAAYn/C,MAAMu3B,eAGtB,MAAMwnB,EAAe9+C,KAAKujF,kBAC1B,IAAK,IAAKlrG,EAAMhG,KAAUsJ,OAAOC,QAAQokB,KAAKG,MAAM3W,SAC5C,CAAC,qBAAsB,eAAe/U,SAAS4D,GAC3B,QAAhBhG,EAAMA,QACN6sE,EAAU7mE,GAAQhG,EAAMA,MAAM6qB,eAE3B7qB,IAAUysE,EAAazmE,KAC9B6mE,EAAU7mE,GAAQhG,EAAMqG,QAIhC,OAAOwmE,CACX,CAEAhoB,cAAc/xC,GAEV,MAAO,8CADPA,EAAU4a,MAAMm3B,cAAc/xC,IAElC,CAEAgyC,6BAA6BztC,GACzB,MAAO,qFAAiEA,IAC5E,CAEA65F,kBACI,MAAO,CACH7uF,MAAO,GACP+hF,mBAAoB,GACpB+G,4BAA6B,GAC7B3/B,mBAAoB,GACpBD,mBAAoB,CAACvrE,MAAO8qG,GAA0B,GAAG,GAAI7qG,MAAO6qG,GAA0B,GAAG,IACjGM,YAAa,CAACprG,MAAO+qG,GAAsB,GAAG,GAAI9qG,MAAO8qG,GAAsB,GAAG,IAE1F,CAIA1lD,eAEI,OADArjD,SAASqgB,MAAQ,sCAEbiL,IAAAU,cAACoQ,EAAW,CAACE,uBAAqB,GAC9BhR,IAAAU,cAAA,MAAIkM,UAAU,wBAAuB,eAGjD,CAEAqtB,qBACI,OAAO55B,KAAKs5B,gBAAgBt5B,KAAKG,MAAM3W,QAASwW,KAAKujF,kBACzD,CAEAzpD,qBACI,OAAOn6B,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,4DACtB,CAEAmtB,aACI,MAAMt4C,EAAQye,KAAKG,MAAM5e,MACzB,IAAIiiG,EAAc,GAClB,GAAc,IAAVjiG,EACAiiG,EAAc,kBACX,CACH,MAAMC,EAAcliG,EAAMxL,WAEtBytG,EADA,CAAC,IAAK,IAAK,KAAK/uG,SAASgvG,EAAY7kG,MAAM6kG,EAAYzvG,OAAS,IAClD,SAEA,OAEtB,CACA,OACI2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACC,cAAY,EAACQ,IAAI,KAAKP,UAAU,gBAAe,cAAYhrB,EAAQye,KAAKo5B,WAAa,GAAK,cAAU73C,EAAM,IAAEiiG,GAClH7jF,IAAAU,cAACyQ,EAAU,CAAChE,IAAI,MACX9M,KAAKG,MAAMquB,QAAQr8C,KAAIumB,GAAesH,KAAK0jF,kBAAkBhrF,MAI9E,CAEAgrF,kBAAkBhrF,GACd,MAAM,kBAAEpC,EAAiB,MAAE0B,EAAK,OAAEtO,GAAWgP,EAAY1Q,WAEnDgT,GAAmBtC,EAAYN,QAAU,IAAIjmB,KAAIoD,GAAKA,EAAE2lB,iBACxD2nE,EAASnqE,EAAY1Q,WAAW66E,QAAU,CAAC,EAC3C4d,EAAe/nF,EAAY1Q,WAAWnV,GACtC8wG,EACFhkF,IAAAU,cAAAV,IAAAyc,SAAA,KAAEzc,IAAAU,cAAA,QAAMkM,UAAU,WAAU,iDAAsCvU,GAEhEgoE,EAAW/+E,YAAsByI,GAEvC,OACIiW,IAAAU,cAACyN,EAAG,CACAvB,UAAU,aACV2B,eAAa,EACbE,UAAU,KACV3yB,IAAKid,EAAY7lB,GACjB07B,SAAUo1E,EACV72E,IAAI,KACJ2B,aAAcuxD,EAAW,GAAK,uBAAuB1pE,KAErDqJ,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,0BAClBqtB,IAAAU,cAACgM,EAAI,KAAE3iB,EAAOjW,QAElBksB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,+BACjB0tF,EAAWrgE,IAAAU,cAACgM,EAAI,CAACE,UAAU,2BAAmC5M,IAAAU,cAACgM,EAAI,KAAEw2D,EAAO5oE,eAGrF0F,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,8BACjB0tF,EAAWrgE,IAAAU,cAACgM,EAAI,CAACE,UAAU,2BAAmC5M,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAas2D,EAAOj9E,SAG3G+Z,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,iBAClBqtB,IAAAU,cAACgM,EAAI,KAAE3T,EAAYhP,OAAOjW,QAE9BksB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,+CACjB0tF,EAAWrgE,IAAAU,cAACgM,EAAI,CAACE,UAAU,4BACvBs2D,EAAOn7E,YAAc,IAAI1T,OAAS,EAAI,4BACnCgnB,EAAgB7oB,KAAIsV,GAChBkY,IAAAU,cAACgM,EAAI,CAAC5wB,IAAKgM,EAAE5U,IAAI,KAAG4U,EAAEm8F,eAAeh+F,OAAS,QAKlE+Z,IAAAU,cAAA,OAAKkM,UAAU,iBACX5M,IAAAU,cAACwR,EAAY,CACTjI,SAAUo2D,EACVx2D,SAAO,EACP4F,QAAUx8B,IACNotB,KAAKC,SAAS,CAAC8sE,WAAW,EAAMuW,6BAA8B7C,IAC9D7tG,EAAEy8B,cAAcC,MAAM,GACvB,uBAGP3P,IAAAU,cAAC4/D,KAAW,CAACpoF,MAAO,CAACyrD,MAAO,SACxB3jC,IAAAU,cAACwR,EAAY,CACTjI,SAAUo2D,EACVx2D,SAAO,EACPsD,IAAK+D,IACLhnB,GAAI,eAAe42F,KAAgB,yDAGtC/nF,EAAYwnE,YAAc,GAAKvgE,IAAAU,cAAC0gB,KAAK,CAACzuC,MAAOomB,EAAYwnE,gBAK9E,CAEAvmC,mCACI,OAAO35B,KAAKG,MAAM4sE,UAAY/sE,KAAKurE,gBAAkB,IACzD,CAEAA,gBACI,OAAO5rE,IAAAU,cAAC8iF,GAAa,CACjB1C,aAAczgF,KAAKG,MAAMmjF,6BACzBf,eAAgBviF,KAAKqjF,oBAC7B,EC7NJ,MAAMQ,WAAgC5tD,GAAcp2B,cAAA,SAAA9rB,WAAA,KAChDkvG,iBAAkB,EAAK,KACvBD,kBAAmB,EAAK,KAoBxBc,yBAA2B,KACnB9jF,KAAKF,MAAMikF,uBAAyB/jF,KAAKF,MAAMkkF,WACnDhkF,KAAKC,SAAS,CAAC8sE,WAAW,GAAM,EACnC,KAEDsW,mBAAqB,KACjBrjF,KAAKC,SAAS,CAAC8sE,WAAW,GAAO,CACpC,CAvBDn2C,mBAAmB12C,GACf8f,KAAKwqB,SAAW,KAChB,MAAM85C,EAAkBloE,YAAoBlc,GAExC8f,KAAKF,MAAMmB,6BAA+B/gB,EAAK+jG,OAAStoG,OAAOS,KAAK8D,EAAK+jG,OAAOjwG,QAChFgsB,KAAKF,MAAMmB,4BAA4B,CACnCP,SAAUxgB,EAAK+jG,MAAMC,cAAe1zF,QAAStQ,EAAK+jG,MAAM7zF,WAIhE4P,KAAKC,SAAS,CACVo2B,gBAAgB,EAChB8tD,aAAc7f,EAAe6f,cAErC,CAaA3tD,mBAAmB12B,GACf,MAAO,CACHwxB,QAAQ,EACRy7C,WAAW,EACXoX,aAAc,GAEtB,CAEA/sD,cACI,MAAO,8BAA8Bp3B,KAAKF,MAAM9X,WAAWA,WAAWnV,SAC1E,CAEAqkD,cAAc/xC,GACV,MAAO,qDAAsCuZ,YAAsBvZ,IACvE,CAEAgyC,6BAA6BztC,GACzB,MAAO,8GAA2EA,IACtF,CAEA06F,WAAWC,EAASC,GAChB,OAAOD,EAAQjuF,aAAa3iB,MAAMoO,cAAcyiG,EAAQluF,aAAa3iB,MAAO,KAChF,CAEA4oG,aAAakI,EAAUC,GACnB,OAAOD,EAAS5uF,KAAO6uF,EAAS7uF,IACpC,CAIA8hC,iBACI,MAAMssD,EAAuB/jF,KAAKF,MAAMikF,qBACxC,GAAIA,GAAwB/jF,KAAKG,MAAMmxB,OACnC,OAAO3xB,IAAAU,cAACokF,GAAmB9oG,OAAAwE,OAAA,GAAK6f,KAAKF,MAAK,CAAEsrB,OAAO,EAAM+4D,aAAcnkF,KAAKG,MAAMgkF,gBAEtF,MAAMH,EAAYhkF,KAAKF,MAAMkkF,UAC7B,OACIrkF,IAAAU,cAAAV,IAAAyc,SAAA,KACK4nE,GAAahkF,KAAK0kF,sBAClB1kF,KAAK43B,gBACLmsD,GACGpkF,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC4F,QAASA,IAAMpP,KAAKC,SAAS,CAACqxB,QAAQ,IAAQ/kB,UAAU,gBAAgBkD,KAAK,iBAAgB,+BAG1Hu0E,GAAahkF,KAAKG,MAAM4sE,WAAa/sE,KAAKurE,gBAGvD,CAEAmZ,sBACI,OAAI1kF,KAAKG,MAAMgkF,aAAa9jG,QACpBskG,GAAMA,EAAGthG,YAAYxQ,KAAOmtB,KAAKF,MAAMjL,KAAKhiB,KAAImB,OAEhD2rB,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC4F,QAASpP,KAAK8jF,0BAA0B,mCAMnE,IACX,CAEAlsD,gBACI,MAAMlwC,EAAasY,KAAKF,MAAM9X,WAAWN,WACzC,OAAIA,EAAW1T,OAAS,EACb0T,EAAWvV,KAAIsV,GAAKuY,KAAK4kF,iBAAiBn9F,GAAG,KAEjDuY,KAAK4kF,iBAAiBl9F,EAAW,IAAI,EAChD,CAEAk9F,iBAAiBx8F,EAAYy8F,GACzB,OACIllF,IAAAU,cAAA,OAAK5kB,IAAK2M,EAAWvV,GAAI05B,UAAU,eAC/B5M,IAAAU,cAAA,OAAKkM,UAAU,uBACX5M,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKD,eAAa,GAAC,kCAAsBg4E,GAAc,yBAChEA,GAAcllF,IAAAU,cAACgM,EAAI,CAAC/5B,OAAK,GAAE8V,EAAWxC,QAE1Coa,KAAKs+E,aAAal2F,EAAYy8F,GAG3C,CAEAvG,aAAal2F,EAAYy8F,GACrB,IAAIzsF,EAAS,GACb,IAAK,IAAIusF,KAAM3kF,KAAKG,MAAMgkF,aACtB,IAAK,IAAI5uG,KAAKovG,EAAGvsF,OACb,GAAI7iB,EAAE2lB,eAAeroB,KAAOuV,EAAW8S,eAAeroB,GAAI,CACtD,IAAIgsG,EAASljG,OAAOwE,OAAO,CAAC,EAAG5K,EAAG,CAC9BuvG,UAAWH,EAAGthG,YAAYxQ,GAC1BujB,aAAcuuF,EAAGvuF,aACjBgF,WAAYupF,EAAGvpF,WACf8nF,SAAUyB,EAAG9xG,KAEjBulB,EAAOja,KAAK0gG,GACZ,KACJ,CAGR,OAAKzmF,EAAOpkB,OASR2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,sBAAiBtU,EAAOpkB,QACnC2rB,IAAAU,cAACyQ,EAAU,CAAChE,IAAI,MACX1U,EAAOrY,KAAKigB,KAAKokF,YAAYjyG,KAAIoD,GAAKyqB,KAAK+kF,aAAaxvG,OAV7DoqB,IAAAU,cAAA,OAAKkM,UAAU,eACX5M,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,iBAAgB,wBACrC5M,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,2CAA0B+8F,EAAa,yBAAez8F,EAAWxC,QAAU,IAYvG,CAEAm/F,aAAalG,GACT,MAAM93E,EAAS/G,KAAKF,MAAMjL,KAAKhiB,GACzBkwG,GAAmB/iF,KAAKF,MAAMikF,yBAC9Bh9E,GAAS83E,EAAOiG,YAAc/9E,GACpC,OAAO/G,KAAKglF,gBAAgBnG,EAAQkE,EACxC,CAEAiC,gBAAgBnG,EAAQkE,GAAqC,IAAnBp3E,EAAU53B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAChD,OAAO4rB,IAAAU,cAACwiF,GAAS,CACNt2E,UAAWZ,EAAa,gBAAkB,GAC1CA,WAAYA,EACZlwB,IAAKojG,EAAOhsG,GACZgsG,OAAQA,EACRoE,gBAAiBjjF,KAAKijF,gBACtBD,iBAAkBhjF,KAAKgjF,iBACvBD,iBAAkBA,GACjC,CAEAxX,gBACI,OAAO5rE,IAAAU,cAAC8iF,GAAa,CACjB1C,aAAczgF,KAAKF,MAAM9X,WAAWA,WAAWnV,GAC/C0vG,eAAgBviF,KAAKqjF,oBAC7B,EClLJ,MAAM4B,WAAkCpB,GAAwBhkF,cAAA,SAAA9rB,WAAA,KAC5DkvG,iBAAkB,EAAM,KACxBD,kBAAmB,CAAM,CAIzBvrD,iBACI,OACI93B,IAAAU,cAAAV,IAAAyc,SAAA,KACKpc,KAAK0kF,sBACL1kF,KAAK43B,gBACL53B,KAAKG,MAAM4sE,WAAa/sE,KAAKurE,gBAG1C,ECTJ,MAAM2Z,WAAqCjvD,GAAcp2B,cAAA,SAAA9rB,WAAA,KAqBrD64E,gBAAkB,KACd5sD,KAAKC,SACD,CAACqxB,QAAQ,IACT,IAAMtxB,KAAK8qE,gBACd,EACJ,KAEDqa,qBAAuB,KACnBnlF,KAAKC,UAASC,IAAS,CACnBoxB,QAAQ,EACR8zD,gCAAgC,EAChCC,+BAA+B,EAC/B3sF,YAAa/c,OAAOwE,OAChB,CAAC,EAAG+f,EAAUxH,YAAa,CAAChP,OAAQnW,IAAgBI,eACzD,EACN,KAED2xG,8CAAgD,KAC5ClsG,OAAO6F,SAASq5D,QAAQ,EAC3B,KAEDitC,mBAAsBC,IAClBxlF,KAAKC,UAASC,IAAS,CACnBoxB,QAAQ,EACR8zD,gCAAgC,EAChCC,+BAA+B,EAC/B3sF,YAAa/c,OAAOwE,OAChB,CAAC,EAAG+f,EAAUxH,YAAa,CAAChP,OAAQnW,IAAgBG,UAAWb,GAAI2yG,OACxE,EACN,KAEDC,6CAA+C,KAC3CrsG,OAAO6F,SAASq5D,QAAQ,EAC3B,KAEDwyB,aAAe,KACX9qE,KAAKC,SACD,CAACo2B,gBAAgB,EAAMjM,WAAY,GAAI1xB,YAAa,OACpD,KAAOsH,KAAKi3B,kBAAkB,GACjC,CACJ,CAzDDL,mBAAmB12C,GACf8f,KAAKwqB,SAAW,KAEhB,MACM9xB,EADiB0D,YAAoBlc,EAAM,CAAC45E,gBAAgB,IAC/BphE,YAC9BA,EAKLsH,KAAKC,SAAS,CACVo2B,gBAAgB,EAChB/E,OAAQ,CAAC,QAAS,aAAa78C,SAASikB,EAAYhP,OAAOpX,OAC3DomB,YAAaA,IAPbsH,KAAKC,SAAS,CAACo2B,gBAAgB,GASvC,CA8CAG,mBAAmB12B,GACf,MAAO,CACHwxB,QAAQ,EACR8zD,gCAAgC,EAChCC,+BAA+B,EAC/B3sF,YAAa,KAErB,CAEA0+B,cACI,MAAO,8BAA8Bp3B,KAAKF,MAAM9X,WAAWA,WAAWnV,IAC1E,CAEAqkD,cAAc/xC,GACV,MAAO,sDAAuCuZ,YAAsBvZ,IACxE,CAEAgyC,6BAA6BztC,GACzB,MAAO,+GAA4EA,IACvF,CAIAkuC,gBACI,GAAI53B,KAAKG,MAAMmxB,OACX,OACI3xB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACs/E,GAAU,CACPv0D,MAAkC,OAA3BprB,KAAKG,MAAMzH,YAClB+nF,aAAczgF,KAAKF,MAAM9X,WAAWA,WAAWnV,GAC/C6U,WAAYsY,KAAKF,MAAM9X,WAAWN,WAClC+kE,YAAazsD,KAAK4sD,gBAClBk0B,eAAgB9gF,KAAKulF,qBAExBvlF,KAAKG,MAAMilF,gCAAkCplF,KAAK0lF,4CAI/D,MAAM,YAAEhtF,GAAgBsH,KAAKG,MAC7B,OAAKzH,GAAgBA,EAAY7lB,GAQ7B8sB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACuhF,GAAM,CAACnB,aAAczgF,KAAKF,MAAM9X,WAAWA,WAAWnV,GAAIsvG,iBAAkBniF,KAAKmlF,uBACjFnlF,KAAKG,MAAMklF,+BAAiCrlF,KAAK2lF,2CARlDhmF,IAAAU,cAAA,OAAKkM,UAAU,wBACX5M,IAAAU,cAACwR,EAAY,CAACC,KAAG,EAAC1C,QAASA,IAAMpP,KAAKC,SAAS,CAACqxB,QAAQ,IAAQ/kB,UAAU,iBAAgB,yBAU1G,CAEAi1E,iBAAiB7xE,EAASjb,EAAOhb,GAC7B,OACIimB,IAAAU,cAACoc,GAAY,CACTG,YAAaloB,EACbib,QAASA,GAEThQ,IAAAU,cAAAV,IAAAyc,SAAA,KACK1iC,EACDimB,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC4F,QAASO,GAAS,QAK5D,CAEA+1E,2CACI,OAAO1lF,KAAKwhF,iBACRxhF,KAAKslF,8CACL,mCAEI3lF,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACgM,EAAI,KAAC,kGACN1M,IAAAU,cAACgM,EAAI,KAAC,yGAItB,CAEAs5E,0CACI,OAAO3lF,KAAKwhF,iBACRxhF,KAAKylF,6CACL,yCAA2B,KAEnC,EC3JJ,MAAMG,WAAgChmF,YAIlCimF,aAAaC,GACT,IAAIrK,GAAY,EAChB,IAAK,IAAIh0F,KAAKuY,KAAKF,MAAMimF,gBAAgB/qF,gBACrC,IAAK,IAAIzlB,KAAKkS,EAAE2Q,OACZ,GAAI7iB,EAAE1C,KAAOizG,EAAS,CAClBrK,EAAYlmG,EAAEkmG,UACd,KACJ,CAGR,OAAOA,CACX,CAIAr7E,SACI,OACIT,IAAAU,cAAC6wE,KAAQ,KACLvxE,IAAAU,cAAC8wE,KAAI,CAAC/gE,KAAK,KAAKv4B,MAAO+3F,GAAUC,sBAAuBuB,MAAI,GACxDzxE,IAAAU,cAAC4yB,GAAS,MACVtzB,IAAAU,cAACgzB,KAAI,KACD1zB,IAAAU,cAACgM,KAAI,CAACx0B,MAAO+3F,GAAUe,YAAY,wCACnChxE,IAAAU,cAACgM,KAAI,KAAErM,KAAKF,MAAMkmF,iBACjBhmF,KAAK43B,gBACL53B,KAAKimF,oBAK1B,CAEAruD,gBACI,OAAI53B,KAAKF,MAAMpY,WAAW1T,OAAS,EACxBgsB,KAAKF,MAAMpY,WAAWvV,KAAIsV,GAAKuY,KAAK4kF,iBAAiBn9F,GAAG,KAE5DuY,KAAK4kF,iBAAiB5kF,KAAKF,MAAMpY,WAAW,IAAI,EAC3D,CAEAk9F,iBAAiBx8F,EAAYy8F,GACzB,OACIllF,IAAAU,cAACgzB,KAAI,CAAC53C,IAAK2M,EAAWvV,IAClB8sB,IAAAU,cAACgM,KAAI,CAACx0B,MAAO+3F,GAAUgB,kBAAkB,uBACrBiU,EAAa,sBAAYz8F,EAAWxC,QAAU,IAEjEoa,KAAKkmF,qBAAqB99F,EAAYy8F,GACtC7kF,KAAKs+E,aAAal2F,EAAYy8F,GAG3C,CAEAqB,qBAAqB99F,EAAYy8F,GAC7B,MAAMsB,GACFnmF,KAAKF,MAAMimF,gBAAgB/qF,iBAAmB,IAAI3a,QAC9CoH,GAAKA,EAAE5U,KAAOuV,EAAW8S,eAAeroB,KAAI,GACpD,IAAKszG,IAAkCA,EAA8BtrF,eACjE,OAAO8E,IAAAU,cAACgM,KAAI,KAAEw4E,EAAa,0BAAgBz8F,EAAWxC,aAAe,MAAM,gCAG/E,MAAMwgG,EAAoBD,EAA8BtrF,eAAehoB,GACvE,IA0BI4xD,EA1BA4hD,EAAsB,KACtBC,EAAiB,KACjBC,EAAkB,KACtB,IAAK,IAAI5B,KAAM3kF,KAAKF,MAAMqkF,aAAc,CACpC,IAAK,IAAI5uG,KAAKovG,EAAGvsF,OAAQ,CACrB,IAAK,IAAIsgE,KAAKnjF,EAAEklB,SACZ,GAAIi+D,EAAE7lF,KAAOuzG,EAAmB,CAC5BC,EAAsB1B,EACtB2B,EAAiB/wG,EACjBgxG,EAAkB7tB,EAClB,KACJ,CAEJ,GAAwB,OAApB6tB,EACA,KAER,CACA,GAAwB,OAApBA,EACA,KAER,CAEA,IAAKA,EACD,OAAO5mF,IAAAU,cAACgM,KAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAQ,oDAKhCg3B,EADAogD,EACS,0BAAgBz8F,EAAWxC,qCAE3B,8BAGb,MAAM4gG,EAAU,CACZ3zG,GAAIyzG,EAAezzG,GACnBujB,aAAciwF,EAAoBjwF,aAClCqE,SAAU,CAAC8rF,IAGf,OACI5mF,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,KAAI,CAACx0B,MAAO+3F,GAAUe,YAAalsC,GACnCzkC,KAAKglF,gBAAgBwB,EAAS,CAACD,IAAmB,GAG/D,CAEA1I,WAAWpjF,GACP,IAAI9E,EAeJ,OAbIA,EADA8E,EAASzmB,OAAS,EAEd2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACK3hB,EAAStoB,KAAI,CAACumF,EAAG5jF,IACd6qB,IAAAU,cAACgzB,KAAI,CAAC53C,IAAK3G,GACP6qB,IAAAU,cAACgM,KAAI,KAAEv3B,EAAI,EAAE,KAAG4jF,EAAE/iE,KAAK,QACtBhY,YAAgB+6E,EAAElyE,MAAMrU,KAAI,CAAC2L,EAAMhJ,IAAM6qB,IAAAU,cAACgM,KAAI,CAAC5wB,IAAK3G,EAAG+C,MAAOuzB,GAAOq7E,wBAAyB3oG,SAMxG6hB,IAAAU,cAACgM,KAAI,KAAE5R,EAAS,GAAG9E,KAAK,QAG/BgK,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,KAAI,CAACx0B,MAAO+3F,GAAUe,YAAY,QAClCh7E,EAGb,CAEA2oF,aAAal2F,EAAYy8F,GACrB,IAAIzsF,EAAS,GACb,IAAK,IAAIusF,KAAM3kF,KAAKF,MAAMqkF,aACtB,IAAK,IAAI5uG,KAAKovG,EAAGvsF,OACb,GAAI7iB,EAAE2lB,eAAeroB,KAAOuV,EAAW8S,eAAeroB,GAAI,CACtD,IAAIgsG,EAASljG,OAAOwE,OAAO,CAAC,EAAG5K,EAAG,CAC9BuvG,UAAWH,EAAGthG,YAAYxQ,GAC1BujB,aAAcuuF,EAAGvuF,aACjBgF,WAAYupF,EAAGvpF,WACfqgF,UAAWz7E,KAAK6lF,aAAatwG,EAAE1C,MAEnCulB,EAAOja,KAAK0gG,GACZ,KACJ,CAIR,IAAKzmF,EAAOpkB,OACR,OAAO2rB,IAAAU,cAACgM,KAAI,KAAC,2CAA0Bw4E,EAAa,yBAAez8F,EAAWxC,QAAU,IAK5F,MAAMwgG,IAAsBpmF,KAAKF,MAAMimF,gBAAgB/qF,iBAAmB,IAAI3a,QAC1EoH,GAAKA,EAAE5U,KAAOuV,EAAW8S,eAAeroB,KAAI,IAAM,CAAC,GAAGgoB,eAAehoB,GAEzE,IAAI6zG,EAAiB,GACrB,IAAK,IAAInxG,KAAK6iB,EAAQ,CAClB,IAAIymF,EAASljG,OAAOwE,OAAO,CAAC,EAAG5K,GAC/BspG,EAAOpkF,SAAWllB,EAAEklB,SAASpa,QAAOq4E,GAAKA,EAAE7lF,KAAOuzG,IAClDM,EAAevoG,KAAK0gG,EACxB,CAGA,OAFA6H,EAAiBA,EAAermG,QAAO9K,GAAKA,EAAEklB,SAASzmB,OAAS,IAE3D0yG,EAAe1yG,OAKhB2rB,IAAAU,cAACgzB,KAAI,CAACx7C,MAAOuzB,GAAOu7E,2BAChBhnF,IAAAU,cAACgM,KAAI,KAAC,wBAAiBw4E,EAAa,0BAAgBz8F,EAAWxC,SAAW,IAC1E+Z,IAAAU,cAACgM,KAAI,CAACx0B,MAAO+3F,GAAUx8C,eAAe,sBAAiBszD,EAAe1yG,QACrE0yG,EAAe3mG,KAAKigB,KAAKokF,YAAYjyG,KAAIoD,GAAKyqB,KAAKglF,gBAAgBzvG,EAAGA,EAAEklB,aAPtEkF,IAAAU,cAACgM,KAAI,KAAC,qCAAyBw4E,EAAa,yBAAez8F,EAAWxC,QAAU,GAU/F,CAEAo/F,gBAAgBnG,EAAQpkF,GAA2B,IAAjB6T,EAAQv6B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GACtC,MAAM,2BAAEq8F,EAA0B,WAAEO,GAAef,GAC7Cx5E,EAAeyoF,EAAOzoF,aACtB5V,EAAQ4V,EAAa5V,MAC3B,OACImf,IAAAU,cAACgzB,KAAI,CAAC53C,IAAKojG,EAAOhsG,GAAIgF,MAAOy2B,EAAWlD,GAAOw7E,mBAAqBxW,GAC/DyO,EAAOpD,WAAa97E,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,aAC9ChxE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,kBACzBhxE,IAAAU,cAACgM,KAAI,KAAEjW,EAAa3iB,OACpBksB,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,yBACzBhxE,IAAAU,cAACgM,KAAI,KAAE,GAAG7rB,EAAMoX,cAA6B,WAAfpX,EAAMjE,KAAoB,GAAK,KAAOiE,EAAMjE,QACzEyjB,KAAK69E,WAAWpjF,GAG7B,CAEAwrF,kBACI,OAAMjmF,KAAKF,MAAMimF,gBAAgBxuF,WAAa,IAAIvjB,OAE9C2rB,IAAAU,cAACgzB,KAAI,KACD1zB,IAAAU,cAACgM,KAAI,CAACx0B,MAAO+3F,GAAUe,YAAY,aAClChzF,YAAgBqiB,KAAKF,MAAMimF,gBAAgBxuF,WAAWplB,KAAI,CAAC2L,EAAMhJ,IAAM6qB,IAAAU,cAACgM,KAAI,CAAC5wB,IAAK3G,EAAG+C,MAAOuzB,GAAOy7E,kBAAmB/oG,MAJ5D,IAOvE,EAGJ,MAAMstB,GAASooB,KAAWC,OAAO,CAC7BmzD,mBAAoB,CAChBhd,QAAS,GACTr8D,aAAc,GACdzB,YAAa,EACbwkE,YAAa,WAEjBqW,0BAA2B,CACvBr5E,UAAW,IAEfm5E,uBAAwB,CACpB9jC,YAAa,GACbp1C,aAAc,GAElBs5E,iBAAkB,CACdC,WAAY,cC3NpB,MAAMC,WAAkClD,GAAwBhkF,cAAA,SAAA9rB,WAAA,KAsC5DizG,6BAAgC9mG,IAC5B8f,KAAKC,SAAS,CACVo2B,gBAAgB,EAChB0vD,gBAAiB3pF,YAAoBlc,GAAM6lG,iBAC7C,EACL,KAEDxU,gBAAkB,KACd,MAAM,WAAEvpF,GAAegY,KAAKF,MAC5BE,KAAKC,SACD,CAACkT,eAAe,IAChB,IAAM32B,YACFmjB,IAAAU,cAACulF,GAAuB,CACpBzB,aAAcnkF,KAAKG,MAAMgkF,aACzB4B,gBAAiB/lF,KAAKG,MAAM4lF,gBAC5BC,gBAAiBh+F,EAAWpC,MAC5B8B,WAAYsY,KAAKF,MAAM9X,WAAWN,aACtC,8BAA8BM,EAAWA,WAAWnV,SACpDmtB,KAAK6xE,qBAEZ,EACJ,KAiBDA,mBAAqB,KACjB7xE,KAAKC,SAAS,CAACkT,eAAe,GAAO,CACxC,CA1EDyjB,mBAAmB12C,GACf8f,KAAKwqB,SAAW,KAChB,MAAM85C,EAAkBloE,YAAoBlc,EAAM,CAAC+mG,gBAAiB,CAAC,UAEjEjnF,KAAKF,MAAMmB,6BAA+B/gB,EAAK+jG,OAAStoG,OAAOS,KAAK8D,EAAK+jG,OAAOjwG,QAChFgsB,KAAKF,MAAMmB,4BAA4B,CACnCP,SAAUxgB,EAAK+jG,MAAMC,cAAe1zF,QAAStQ,EAAK+jG,MAAM7zF,WAIhE4P,KAAKC,SACD,CAACkkF,aAAc7f,EAAe6f,eAC9B,KACInkF,KAAKwqB,SAAWpmB,EACZ,sBAAsBpE,KAAKF,MAAM9X,WAAWA,WAAWnV,gBACvD,MACA,CAAC,EACD,CAAC,EACDmtB,KAAKgnF,6BACLhnF,KAAK62B,iBACL72B,KAAK82B,2BACR,GAGb,CAEAA,2BAA2BptC,GACvBsW,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBjM,WAAYpqB,KAAKm3B,6BAA6BztC,IAEtD,CA2BA8sC,mBAAmB12B,GACf,OAAOnkB,OAAOwE,OAAO,CAAC,EAAG4f,MAAMy2B,mBAAmB12B,GAAQ,CAACqT,eAAe,GAC9E,CAEA+jB,cAAc/xC,GAEV,MAAO,oEADPA,EAAU4a,MAAMm3B,cAAc/xC,IAElC,CAEAgyC,6BAA6BztC,GACzB,MAAO,6HAAqFA,IAChG,CAMAm8F,aAAaC,GACT,IAAIrK,GAAY,EAChB,IAAK,IAAIh0F,KAAKuY,KAAKG,MAAM4lF,gBAAgB/qF,gBACrC,IAAK,IAAIzlB,KAAKkS,EAAE2Q,OACZ,GAAI7iB,EAAE1C,KAAOizG,EAAS,CAClBrK,EAAYlmG,EAAEkmG,UACd,KACJ,CAGR,OAAOA,CACX,CAIAhkD,iBACI,MAAMssD,EAAuB/jF,KAAKF,MAAMikF,qBACxC,GAAIA,GAAwB/jF,KAAKG,MAAMmxB,OACnC,OAAO3xB,IAAAU,cAACokF,GAAmB9oG,OAAAwE,OAAA,GAAK6f,KAAKF,MAAK,CAAEsrB,OAAO,EAAO+4D,aAAcnkF,KAAKG,MAAMgkF,gBAEvF,MAAMH,EAAYhkF,KAAKF,MAAMkkF,UAC7B,OACIrkF,IAAAU,cAAAV,IAAAyc,SAAA,KACK2nE,GAAwB/jF,KAAK6zE,kBAC7BmQ,GAAahkF,KAAK0kF,sBAClB1kF,KAAK43B,gBACL53B,KAAKknF,kCACLlnF,KAAKimF,kBACLlC,GACGpkF,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACtF,UAAU,gBAAgB/C,SAAO,EAAC4F,QAASA,IAAMpP,KAAKC,SAAS,CAACqxB,QAAQ,KAAQ,oCAKrG0yD,GAAahkF,KAAKG,MAAM4sE,WAAa/sE,KAAKurE,gBAGvD,CAEAsI,kBACI,OACIl0E,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAAC6S,EAAe,CACZC,cAAenT,KAAKG,MAAMgT,cAC1B/D,QAASpP,KAAKuxE,iBACjB,sBACsB5xE,IAAAU,cAAA,QAAMkM,UAAU,WAAU,kEAAsDvM,KAAKF,MAAM9X,WAAWpC,QAIzI,CAEAg/F,iBAAiBx8F,EAAYy8F,GACzB,OACIllF,IAAAU,cAAA,OAAK5kB,IAAK2M,EAAWvV,GAAI05B,UAAU,eAC/B5M,IAAAU,cAAA,OAAKkM,UAAU,uBACX5M,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKD,eAAa,GAAC,uBAAgBg4E,GAAc,sBAC1DA,GAAcllF,IAAAU,cAACgM,EAAI,CAAC/5B,OAAK,GAAE8V,EAAWxC,QAE1Coa,KAAKkmF,qBAAqB99F,EAAYy8F,GACtC7kF,KAAKs+E,aAAal2F,EAAYy8F,GAG3C,CAEAqB,qBAAqB99F,EAAYy8F,GAC7B,MAAMsB,GACFnmF,KAAKG,MAAM4lF,gBAAgB/qF,iBAAmB,IAAI3a,QAC9CoH,GAAKA,EAAE5U,KAAOuV,EAAW8S,eAAeroB,KAAI,GACpD,IAAKszG,IAAkCA,EAA8BtrF,eACjE,OAAO8E,IAAAU,cAACgM,EAAI,CAACC,cAAY,GAAEu4E,EAAa,0BAAgBz8F,EAAWxC,aAAe,MAAM,gCAG5F,MAAMwgG,EAAoBD,EAA8BtrF,eAAehoB,GACvE,IA0BI4xD,EA1BA4hD,EAAsB,KACtBC,EAAiB,KACjBC,EAAkB,KACtB,IAAK,IAAI5B,KAAM3kF,KAAKG,MAAMgkF,aAAc,CACpC,IAAK,IAAI5uG,KAAKovG,EAAGvsF,OAAQ,CACrB,IAAK,IAAIsgE,KAAKnjF,EAAEklB,SACZ,GAAIi+D,EAAE7lF,KAAOuzG,EAAmB,CAC5BC,EAAsB1B,EACtB2B,EAAiB/wG,EACjBgxG,EAAkB7tB,EAClB,KACJ,CAEJ,GAAwB,OAApB6tB,EACA,KAER,CACA,GAAwB,OAApBA,EACA,KAER,CAEA,IAAKA,EACD,OAAO5mF,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAQ,oDAKhCg3B,EADAogD,EACS,0BAAgBz8F,EAAWxC,qCAE3B,8BAGb,MAAM4gG,EAAU,CACZ3zG,GAAIyzG,EAAezzG,GACnBujB,aAAciwF,EAAoBjwF,aAClCqE,SAAU,CAAC8rF,GACXnrF,WAAYirF,EAAoBjrF,WAChC8nF,SAAUmD,EAAoBxzG,IAE5Bk0B,EAAS/G,KAAKF,MAAMjL,KAAKhiB,GACzBkwG,GAAmB/iF,KAAKF,MAAMikF,yBAC9Bh9E,GAASs/E,EAAoBhjG,YAAYxQ,KAAOk0B,GAEtD,OACIpH,IAAAU,cAAA,OAAK5kB,IAAK6qG,EAAezzG,IACrB8sB,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKR,cAAY,GAAEm4B,GAC5BzkC,KAAKglF,gBAAgBwB,EAASzD,GAAkB,GAG7D,CAEAzE,aAAal2F,EAAYy8F,GACrB,IAAIzsF,EAAS,GACb,IAAK,IAAIusF,KAAM3kF,KAAKG,MAAMgkF,aACtB,IAAK,IAAI5uG,KAAKovG,EAAGvsF,OACb,GAAI7iB,EAAE2lB,eAAeroB,KAAOuV,EAAW8S,eAAeroB,GAAI,CACtD,IAAIgsG,EAASljG,OAAOwE,OAAO,CAAC,EAAG5K,EAAG,CAC9BuvG,UAAWH,EAAGthG,YAAYxQ,GAC1BujB,aAAcuuF,EAAGvuF,aACjBgF,WAAYupF,EAAGvpF,WACfqgF,UAAWz7E,KAAK6lF,aAAatwG,EAAE1C,IAC/BqwG,SAAUyB,EAAG9xG,KAEjBulB,EAAOja,KAAK0gG,GACZ,KACJ,CAIR,IAAKzmF,EAAOpkB,OACR,OAAO2rB,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,2CAA0Bm4E,EAAa,yBAAez8F,EAAWxC,QAAU,IAKjG,MAAMwgG,IAAsBpmF,KAAKG,MAAM4lF,gBAAgB/qF,iBAAmB,IAAI3a,QAC1EoH,GAAKA,EAAE5U,KAAOuV,EAAW8S,eAAeroB,KAAI,IAAM,CAAC,GAAGgoB,eAAehoB,GAEzE,IAAI6zG,EAAiB,GACrB,IAAK,IAAInxG,KAAK6iB,EAAQ,CAClB,IAAIymF,EAASljG,OAAOwE,OAAO,CAAC,EAAG5K,GAC/BspG,EAAOpkF,SAAWllB,EAAEklB,SAASpa,QAAOq4E,GAAKA,EAAE7lF,KAAOuzG,IAClDM,EAAevoG,KAAK0gG,EACxB,CAGA,OAFA6H,EAAiBA,EAAermG,QAAO9K,GAAKA,EAAEklB,SAASzmB,OAAS,IAE3D0yG,EAAe1yG,OAKhB2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKR,cAAY,GAAC,wBAAiBu4E,EAAa,0BAAgBz8F,EAAWxC,SAAW,IAChG+Z,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,sBAAiBg6E,EAAe1yG,QAC3C2rB,IAAAU,cAACyQ,EAAU,KACN41E,EAAe3mG,KAAKigB,KAAKokF,YAAYjyG,KAAIoD,GAAKyqB,KAAK+kF,aAAaxvG,OARlEoqB,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,qCAAyBm4E,EAAa,yBAAez8F,EAAWxC,QAAU,GAYpG,CAEAshG,kCACI,MAAM9rF,EAAa4E,KAAKG,MAAM4lF,gBAAgB3qF,WAC9C,OACIuE,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKD,eAAa,GAAC,wBAC5BzR,EAAWpnB,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,sBAAiBtR,EAAWpnB,QACjE2rB,IAAAU,cAACykC,GAAgB,CACbxyD,MAAO,CAACuV,SAAU,iBAAkBwG,YAAa,oBACjD+M,WAAYA,IAG5B,CAEA6qF,kBACI,OAAMjmF,KAAKG,MAAM4lF,gBAAgBxuF,WAAa,IAAIvjB,OAE9C2rB,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,aAC1BjN,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAavM,KAAKG,MAAM4lF,gBAAgBxuF,YAJG,IAOvE,EC7RJ,MAAM4vF,WAAoCJ,GAA0BlnF,cAAA,SAAA9rB,WAAA,KAChEkvG,iBAAkB,EAAM,KACxBD,kBAAmB,CAAM,CAIzBvrD,iBACI,OACI93B,IAAAU,cAAAV,IAAAyc,SAAA,KACKpc,KAAK0kF,sBACL1kF,KAAK43B,gBACL53B,KAAKimF,kBACLjmF,KAAKG,MAAM4sE,WAAa/sE,KAAKurE,gBAG1C,ECVJ,MAAM6b,WAAmCnxD,GAAcp2B,cAAA,SAAA9rB,WAAA,KAerDszG,kBAAqBx0G,IACnBuxB,EACI,uBAAuBvxB,IACvB,SACA,CAAC,EACD,CAAC,GACD,KACImtB,KAAKi3B,mBACLj3B,KAAKF,MAAMoB,UACXlB,KAAK4Y,QAAQnZ,eAAe,GAEnC,CACD,CArBFm3B,mBAAmB12C,GACjB6f,MAAM62B,qBACN52B,KAAKC,SAAS,CACZo2B,gBAAgB,EAChBixD,YAAapnG,EAAK0R,UAAU5d,OAC5B0d,OAAQxR,EAAK0R,WAEjB,CAkBA4kC,mBAAmB12B,GACjB,MAAO,CAAEwnF,YAAa,EACxB,CAEAlwD,cACE,MAAO,8BAA8Bp3B,KAAKF,MAAM9X,WAAWA,WAAWnV,SACxE,CAEAqkD,cAAc/xC,GACZ,MAAO,qDAAsCuZ,YAC3CvZ,IAEJ,CAEAgyC,6BAA6BztC,GAC3B,MAAO,8GAA2EA,IACpF,CAIAkuC,gBACE,OACEj4B,IAAAU,cAAAV,IAAAyc,SAAA,KACEzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKD,eAAa,GAAC,mCAG7BlN,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,iBAAgB,sBAClBvM,KAAKG,MAAMmnF,aAE7BtnF,KAAK65B,aAGZ,CAEAA,aACE,OAAK75B,KAAKG,MAAMmnF,YAId3nF,IAAAU,cAAAV,IAAAyc,SAAA,KACEzc,IAAAU,cAACgM,EAAI,CAACC,cAAY,GAAC,oFAGnB3M,IAAAU,cAACyQ,EAAU,CAAChE,IAAI,MACb,IAAI9M,KAAKG,MAAMzO,QAAQvf,KAAI,CAACo1G,EAAOvqF,IAClC2C,IAAAU,cAACyN,EAAG,CACFryB,IAAKuhB,EACL8P,IAAI,KACJ0B,YAAY,SACZN,eAAa,EACb,cAAY,QAEZvO,IAAAU,cAACgM,EAAI,CAACE,UAAU,2BAChB5M,IAAAU,cAACgM,EAAI,CAACE,UAAU,2BAChB5M,IAAAU,cAACgM,EAAI,CAACE,UAAU,2BAChB5M,IAAAU,cAACgM,EAAI,CAACE,UAAU,2BACfg7E,EAAMC,OACL7nF,IAAAU,cAAC4/D,KAAW,KACVtgE,IAAAU,cAACwR,EAAY,CACXrI,SAAO,EACPiG,KAAK,QACLL,QAASA,IAAMpP,KAAKqnF,kBAAkBE,EAAM10G,KAC7C,kCAGD8sB,IAAAU,cAAC0gB,KAAK,CAACzuC,MAAM,YA7BlB,IAqCX,EAxGI80G,GAEGtgD,YAAc1nC,ECqBvB,MAAMqlF,WAA4B5sD,GAAkBh4B,cAAA,SAAA9rB,WAAA,KAuDhD64E,gBAAkB,KACd5sD,KAAKC,SAAS,CAACwnF,aAAa,EAAOC,kBAAmB,MAAM,EAC/D,KAEDC,uBAAyB,CAACznG,EAAMkrC,MAC5BlrC,EAAOkc,YAAoBlc,GAAMwY,aAC5BtC,aAAenW,YAAqBC,EAAKkW,cAE9C,IAAIwxF,EAAU,CAAC,EACf,IAAK,IAAIryG,KAAK2K,EAAKkY,OACfwvF,EAAQryG,EAAE2lB,eAAeroB,IAAM0C,EAAE1C,GAErCmtB,KAAKC,UACDC,GACQkrB,EACO,CACHq8D,aAAa,EACbtD,aAAc,IAAIjkF,EAAUikF,aAAcjkG,GAC1C8a,gBAAiBkF,EAAUlF,gBAAgB7oB,KAAIsV,IAC3C,GAAImgG,EAAQngG,EAAE5U,IAAK,CACf,MAAM8oG,EAAWiM,EAAQngG,EAAE5U,IAC3B4U,EAAE2Q,OAAS,IAAI3Q,EAAE2Q,OAAQ,CAACvlB,GAAI8oG,EAAUlmG,YAAakmG,EAAUF,WAAW,GAC9E,CACA,OAAOh0F,CAAC,KAIT,CACHggG,aAAa,EACbC,kBAAmB,KACnBvD,aAAcjkF,EAAUikF,aAAahyG,KAAIwyG,GACjCA,EAAG9xG,KAAOqN,EAAKrN,GACRqN,EAEJykG,MAK1B,EACJ,KAEDkD,wBAA0B,KACtB7nF,KAAKC,SAAS,CAAC6nF,gBAAgB,EAAOC,iBAAkB,MAAM,EACjE,KAEDxH,mBAAsBrgG,IAClBA,EAAOA,GAAQ,CAAC,EAEhB8f,KAAKC,UAASC,IAAS,CACnB9E,WAAY,IAAI8E,EAAU9E,WAAY,CAClCvoB,GAAI,KACJ4C,YAAaG,YAA2BsqB,EAAU9E,YAAc,EAChE/D,gBAAgB,EAChB5jB,MAAO,GACPolB,KAAM,CACFhmB,GAAI,KACJ8vD,IAAK,GACLlvD,MAAO,GACPyP,eAAgB,GAChBG,YAAa,CAACR,KAAM,GAAIE,SAAU,KAEtC+V,cAAe5Y,EAAK4Y,eAAiB,UAE1C,EACN,KAED0nF,8BAAgC,CAAC/qG,EAAayK,KAC1C8f,KAAKC,UAASC,IACH,CAAC9E,WAAY8E,EAAU9E,WAAWjpB,KAAIsV,GACrCA,EAAEhS,cAAgBA,EACXkG,OAAOwE,OAAOsH,EAAGvH,GAEjBuH,OAGjB,EACL,KAEDu6C,sBAAyBvsD,IACrBuqB,KAAKC,UAASC,IACH,CAAC9E,WAAY8E,EAAU9E,WAAW/a,QAAOoH,GAAKA,EAAEhS,cAAgBA,OACzE,EACL,KAEDuyG,gCAAkC,CAAC9mD,EAASzrD,KACxCuqB,KAAKC,UAASC,IACV,IAAI9E,EAAa,GACjB,IAAK,IAAI3T,KAAKyY,EAAU9E,WAChB3T,EAAEhS,cAAgBA,EAClBgS,EAAE4P,eAAiB6pC,EAEfA,IACAz5C,EAAE4P,gBAAiB,GAG3B+D,EAAWjd,KAAKsJ,GAEpB,MAAO,CAAC2T,WAAYA,EAAW,GACjC,EACL,KAED6sF,4BAA8B,CAAC/mD,EAASjmC,KACpC+E,KAAKC,UAASC,IACH,CAAClF,gBAAiBkF,EAAUlF,gBAAgB7oB,KAAIsV,IAC/CA,EAAE5U,KAAOooB,IACTxT,EAAEqT,mBAAqBomC,EACnBA,IACAz5C,EAAEoT,eAAiB,OAGpBpT,QAEb,EACL,KAEDygG,kBAAoB,CAACjtF,EAAc0gF,KAC/B37E,KAAKmoF,oBAAoBltF,EAAc0gF,GAAU,EAAK,EACzD,KAEDyM,mBAAqB,CAACntF,EAAc0gF,KAChC37E,KAAKmoF,oBAAoBltF,EAAc0gF,GAAU,EAAM,EAC1D,KAED0M,oBAAsB,CAACnnD,EAAShmC,EAAgBotF,KAC5CtoF,KAAKC,UAASC,IAAS,CACnBlF,gBAAiBkF,EAAUlF,gBAAgB7oB,KAAIsV,IACvCA,EAAE5U,KAAOqoB,IACLgmC,GACAz5C,EAAEoT,eAAiBytF,EACnB7gG,EAAEqT,oBAAqB,GAEvBrT,EAAEoT,eAAiB,MAGpBpT,QAEZ,EACN,KAED8gG,6BAAgCC,IAC5BxoF,KAAKC,UAASC,IAEV,IAAIuoF,EAAc,GAClB,IAAK,IAAI9D,KAAMzkF,EAAUikF,aACrB,GAAIQ,EAAG9xG,KAAO21G,EAAe,CACzB,IAAK,IAAIjzG,KAAKovG,EAAGvsF,OACbqwF,EAAc,IAAIA,KAAgBlzG,EAAEklB,SAAStoB,KAAIumF,GAAKA,EAAE7lF,MAE5D,KACJ,CAEJ,MAAO,CACHwlB,kBAAmB,IAAI6H,EAAU7H,kBAAmBmwF,GACpDxtF,gBAAiBkF,EAAUlF,gBAAgB7oB,KAAIsV,IACvCghG,EAAYh0G,SAASgT,EAAEoT,kBACvBpT,EAAEoT,eAAiB,MAEhBpT,KAEd,GACH,EACL,KAOD8wC,qBAAwB5wC,IACpBqY,KAAKg4B,aAAe,KACpB,MAAMl6B,EAAUK,YACZxW,EACAqY,KAAK0oF,gCACL,CAAC,oBAAqB,kBAAmB,SAAU,eAEvD1oF,KAAKC,UACDC,IAAS,CACLorB,UAAU,EACV2D,YAAajvB,KAAKy4B,mBAClB9wC,OAAQmW,EACR6qF,eAAgBhtG,OAAO6nB,OAAO1F,EAAQ9C,iBAAiB3a,QACnDoH,IAAMA,EAAEqT,oBAAsB,IAAI9mB,OAAS,IAAGA,OAAS,KAElE,CACJ,CA9ODmlC,oBACI//B,OAAO49C,SAAS,EAAG,GACnBh3B,KAAKw5D,yBAAyB,GAE1Bx5D,KAAKF,MAAMsrB,MACXprB,KAAKC,SAAS,CAACo2B,gBAAgB,IAE/Br2B,KAAKi3B,kBAEb,CAGAL,mBAAmB12C,GACf8f,KAAKwqB,SAAW,KAChBtqC,EAAOkc,YAAoBlc,EAAM,CAAC45E,gBAAgB,IAAOisB,gBACzD,IAAK,IAAIt+F,KAAKvH,EAAK8a,gBACfvT,EAAEoT,eAAiBpT,EAAEoT,eAAehoB,IAAM,KAE9CmtB,KAAKC,SAAStkB,OAAOwE,OACjBD,EACA,CAACm2C,gBAAgB,IAEzB,CAEAmjC,yBAAyB3mF,GACrBmtB,KAAKC,UAASC,IAEN,MAAM+6D,EAAY/6D,EAAU+6D,UAC5B,IAAIhpD,EAAO,KAAME,EAAK,KAAM95B,EAAK,KACjC,IAAK,IAAIvD,EAAE,EAAGA,EAAImmF,EAAUjnF,OAAQc,IAC5BjC,IAAOooF,EAAUnmF,GAAGjC,KACpBwF,EAAO4iF,EAAUnmF,GAAGuD,KAChBvD,EAAI,IACJq9B,EAAO,CACH7/B,MAAO2oF,EAAUnmF,EAAI,GAAGxC,MACxBO,GAAIooF,EAAUnmF,EAAI,GAAGjC,KAGzBiC,EAAImmF,EAAUjnF,OAAS,IACvBi+B,EAAO,CACH3/B,MAAO2oF,EAAUnmF,EAAI,GAAGxC,MACxBO,GAAIooF,EAAUnmF,EAAI,GAAGjC,MAKrC,MAAO,CACH2sC,gBAAiB,CAAC3sC,KAAIwF,OAAM45B,OAAME,QACrC,GAGb,CAsKAimB,uBAAuBl4C,GACnB8f,KAAKg4B,aAAe,KACpB5+C,OAAO6F,SAASq5D,QACpB,CAsBAniB,SAASr2B,GAELE,KAAKw5D,yBAA2Bx5D,KAAKw5D,yBAAyBn1C,KAAKrkB,KACvE,CAEAo2B,aAAat2B,GACTE,KAAKy4B,mBAAqB,+BAC9B,CAEAjC,mBAAmB12B,GAEf,MAAM8oF,EAA+BhK,IACjC,IAAIxmF,EAAS,GACb,IAAK,IAAIusF,KAAM3kF,KAAKF,MAAMqkF,aACtB,IAAK,IAAI5uG,KAAKovG,EAAGvsF,OACTwmF,IAAqBrpG,EAAE2lB,eAAeroB,IACtCulB,EAAOja,KAAK,CAACtL,GAAI0C,EAAE1C,GAAI4C,YAAaF,EAAE1C,GAAI4oG,WAAW,IAIjE,OAAOrjF,CAAM,EAGX1Q,EAAasY,KAAKF,MAAM9X,WAAWN,WACzC,MAAO,CACH0jC,MAAOtrB,EAAMsrB,MACbq8D,aAAa,EACbC,kBAAmB,KACnBI,gBAAgB,EAChBC,iBAAkB,KAClBY,gBAAgB,EAChB1tB,UAAWj7D,KAAK6oF,aAAanhG,GAC7B83B,gBAAiB,CACb3sC,GAAI,KACJwF,KAAM,KACN45B,KAAM,KACNE,KAAM,MAEVgyE,aAAc,IAAInkF,KAAKF,MAAMqkF,cAC7B2E,kBAAkB,EAClBzwF,kBAAmB,GACnB+C,WAAY,GACZ7D,UAAW,GACXyD,gBAAiBtT,EAAWvV,KAAIsV,IAAC,CAC7B5U,GAAI4U,EAAEyT,eAAeroB,GACrB4C,YAAagS,EAAE5U,GACfioB,oBAAoB,EACpBD,eAAgB,KAChBzC,OAAQwwF,EAA4BnhG,EAAEyT,eAAeroB,QAGjE,CAEAukD,cACI,MAAO,sBAAsBp3B,KAAKF,MAAM9X,WAAWA,WAAWnV,eAClE,CAEAqkD,cAAc/xC,GAEV,OADAA,EAAUuZ,YAAsBvZ,GAC5B6a,KAAKG,MAAMirB,MACJ,iFAA6DjmC,GAG5E,CAEAgyC,6BAA6BztC,GACzB,OAAIsW,KAAKG,MAAMirB,MACJ,wHAA+F1hC,IAEnG,wHAA+FA,IAC1G,CAEAm/F,aAAanhG,GACT,IAAIsV,EAAQ,EACR+rF,EAAQ,CACR,CAAC1wG,KAAM,oBAAqBxF,GAAImqB,IAAS1qB,MAAO,sBAAuB88B,QAASpP,KAAKw5D,2BAEzF,IAAK,IAAI/xE,KAAKC,EACVqhG,EAAM5qG,KAAK,CAAC9F,KAAMoP,EAAE5U,GAAIA,GAAImqB,EAAO1qB,MAAO,UAASoV,EAAW1T,OAAS,EAAI,wBAAgBgpB,EAAQ,IAAMoS,QAASpP,KAAKw5D,2BACvHx8D,IAGJ,OADA+rF,EAAM5qG,KAAK,CAAC9F,KAAM,UAAWxF,GAAImqB,EAAO1qB,MAAO,eAAgB88B,QAASpP,KAAKw5D,2BACtEuvB,CACX,CAEAZ,oBAAoBltF,EAAc0gF,EAAUF,GACxCz7E,KAAKC,UAASC,IACV,IAAI8oF,EAAa,GACjB,GAAIvN,EAEA,IAAK,IAAIkJ,KAAMzkF,EAAUikF,aACrB,IAAK,IAAI5uG,KAAKovG,EAAGvsF,OACT7iB,EAAE1C,KAAO8oG,IACTqN,EAAazzG,EAAEklB,SAAStoB,KAAIumF,GAAKA,EAAE7lF,MAOnD,IAAIo2G,EAAqB,KACzB,IAAK,IAAIxhG,KAAKyY,EAAUlF,gBAChBvT,EAAE5U,KAAOooB,IACTguF,EAAqBxhG,EAAEoT,gBAI/B,MAAO,CACHG,gBAAiBkF,EAAUlF,gBAAgB7oB,KAAIsV,IACvCA,EAAE5U,KAAOooB,IACTxT,EAAE2Q,OAAS3Q,EAAE2Q,OAAOjmB,KAAIoD,IAChBA,EAAE1C,KAAO8oG,IACTpmG,EAAEkmG,UAAYA,GAEXlmG,KAEXkS,EAAEoT,eAAiB4gF,GAAauN,EAAWv0G,SAASw0G,GAAsB,KAAOA,GAE9ExhG,KAEd,GAET,CAEAwwC,aACI,MAAO,sBAAsBj4B,KAAKF,MAAM9X,WAAWA,WAAWnV,YAClE,CAEAqlD,gBACI,OAAOl4B,KAAKF,MAAMsrB,MAAQ,OAAS,KACvC,CAEA+M,mBACI,OAAO/7B,YACH4D,KAAK0oF,gCACL,CAACltF,UAAU,EAAMmB,mBAAmB,GAE5C,CAEA+rF,gCACI,MAAO,CACHrwF,kBAAmB2H,KAAKG,MAAM9H,kBAC9B2C,gBAAiBgF,KAAKG,MAAMnF,gBAC5BzD,UAAWyI,KAAKG,MAAM5I,UACtB6D,WAAY4E,KAAKG,MAAM/E,WAAWjpB,KAAIsV,IAAC,CACnC5U,GAAI4U,EAAE5U,GACN4C,YAAagS,EAAEhS,YACfhC,MAAOgU,EAAEhU,MACTolB,KAAMpR,EAAEoR,KAAKhmB,GACbwkB,eAAgB5P,EAAE4P,mBAG9B,CAIAugC,gBACI,MAAMsxD,EAAsBlpF,KAAKG,MAAMqf,gBAAgBnnC,KACvD,OACIsnB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAACQ,OAAK,EAACI,QAAM,GACpB/R,IAAAU,cAACge,GAAc,KACX1e,IAAAU,cAAC2e,GAAS,CACNO,iBAAiB,EACjB3xB,SAAUoS,KAAKG,MAAM86D,UACrBz7C,gBAAiBxf,KAAKG,MAAMqf,gBAAgB3sC,GAC5C+2B,SAAU5J,KAAKG,MAAMmrB,SACrBjM,aAAcrf,KAAKG,MAAM2oF,iBAAmB,KAAO,EACnDnhG,OAAQ,CAAC,EACT+M,OAAUsL,KAAKG,MAAMirB,MAAQ,YAAc,UAApC,2BAEfzrB,IAAAU,cAACge,GAAc,CAAC9R,UAAU,2BAA2B15B,GAAG,yBAC3B,sBAAxBq2G,GAA+ClpF,KAAKmpF,yBACpDnpF,KAAKF,MAAM9X,WAAWN,WAAWvV,KAAIsV,GAC9ByhG,IAAwBzhG,EAAE5U,GACnBmtB,KAAKopF,aAAa3hG,GAEtB,OAEc,YAAxByhG,GAAqClpF,KAAKqpF,kBAGlDrpF,KAAKG,MAAMsnF,aAAeznF,KAAKspF,mBAC/BtpF,KAAKG,MAAM2nF,gBAAkB9nF,KAAKupF,sBAG/C,CAEAJ,yBACI,MAAMK,EAAyBxpF,KAAKG,MAAMgkF,aAAa9jG,QACnDskG,GAAMA,EAAGthG,YAAYxQ,KAAOmtB,KAAKF,MAAMjL,KAAKhiB,KAChD,OACI8sB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAAA,QAAMkM,UAAU,UAAUkB,KAAK,SAAQ,+UACvC9N,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CACTC,KAAG,EACHlI,SAAU5J,KAAKG,MAAM2oF,iBACrB15E,QAASA,IAAMpP,KAAKC,SAAS,CAACwnF,aAAa,KAC9C,2EAIL9nF,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKD,eAAa,GAAC,wEAC7BlN,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,sBAAiB88E,EAAuBx1G,QACnD2rB,IAAAU,cAACyQ,EAAU,CAAChE,IAAI,MACX08E,EAAuBr3G,KAAI0sG,GAAU7+E,KAAKypF,uBAAuB5K,MAEtEl/E,IAAAU,cAACyQ,EAAU,CAACE,kBAAgB,GACxBrR,IAAAU,cAACiiC,KAAQ,CACLpB,QAASlhC,KAAKG,MAAM2oF,iBACpBv8E,UAAU,gBACVj6B,MAAM,2BACN8jC,SAAUuC,GAAS3Y,KAAKC,SAAS,CAAC6oF,iBAAkBnwE,EAAMwM,OAAO+b,cAI7EvhC,IAAAU,cAAC+zB,GAAK,CACFxqB,SAAU5J,KAAKG,MAAM2oF,iBAAmB,KAAO,EAC/Cp6D,SAAO,EACP+F,UAAWz0B,KAAKG,MAAMqf,gBAAgBvN,KAAK3/B,MAC3CkiD,YAAaA,IAAMx0B,KAAKw5D,yBAAyBx5D,KAAKG,MAAMqf,gBAAgBvN,KAAKp/B,MAIjG,CAEA42G,uBAAuB/wF,GACnB,MAAM,MAAElY,EAAK,MAAE/M,GAAUilB,EAAYtC,aAC/B1O,EAAasY,KAAKF,MAAM9X,WAAWN,WACnCgiG,EAAY1pF,KAAKG,MAAM9H,kBAAkB5jB,SAASikB,EAAY7lB,IACpE,OACI8sB,IAAAU,cAACyN,EAAG,CACAG,YAAay7E,EAAY,KACrB/pF,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,MAAIkM,UAAU,WAAU,0CACxB5M,IAAAU,cAAA,UACIV,IAAAU,cAAA,UACIV,IAAAU,cAACwR,EAAY,CACTtF,UAAU,iBACV6C,QAASA,IAAMpP,KAAKC,SAAS,CAACwnF,aAAa,EAAMC,kBAAoBhvF,EAAY7lB,MAAM,UAG3F8sB,IAAAU,cAACwR,EAAY,CAACtF,UAAU,iBAAiB6C,QAASA,IAAMpP,KAAKuoF,6BAA6B7vF,EAAY7lB,KAAK,gBAK3H4I,IAAKid,EAAY7lB,GACjB27B,YAAa,UAAU/6B,IACvBq5B,IAAI,MAEJnN,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,kBAClBqtB,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAa94B,IAEjCksB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,yBAClBqtB,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAa/rB,EAAMoX,YAA4B,WAAfpX,EAAMjE,KAAoB,KAAOiE,EAAMjE,KAAO,KAEjGmL,EAAW1T,OAAS,GACjB2rB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,0CAChBomB,EAAYN,QAAU,IAAIjmB,KAAIoD,GAC5BoqB,IAAAU,cAACgM,EAAI,CAACE,UAAU,YAAY9wB,IAAKlG,EAAE1C,IAAI,OAAK0C,EAAE2lB,gBAAkB,CAAC,GAAG0oF,gBAAkB,CAAC,GAAGh+F,UAIrG8jG,EACO/pF,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,+EAEZ6X,IAAAU,cAACwR,EAAY,CACTqF,UAAW,uCAA0BzjC,IACrC84B,UAAU,gBACV/C,SAAO,EACP4F,QAASA,IAAMpP,KAAKC,SAAS,CAAC6nF,gBAAgB,EAAMC,iBAAkBrvF,EAAY7lB,MACrF,gCAKrB,CAEAu2G,aAAahhG,GACT,IAAIuhG,EAAkB,CAAC,EACnB9uF,EAAiB,KACrB,IAAK,IAAIpT,KAAKuY,KAAKG,MAAMnF,gBAAiB,CAClCvT,EAAE5U,KAAOuV,EAAW8S,eAAeroB,KACnCgoB,EAAiBpT,EAAEoT,gBAEvB,IAAK,IAAItlB,KAAKkS,EAAE2Q,OACZuxF,EAAgBp0G,EAAE1C,IAAM0C,EAAEkmG,SAElC,CAEA,IAAIhhF,EAAW,GACf,MAAMpC,EAAoB2H,KAAKG,MAAM9H,kBACrC,IAAK,IAAIssF,KAAM3kF,KAAKG,MAAMgkF,aACtB,IAAI9rF,EAAkB5jB,SAASkwG,EAAG9xG,IAGlC,IAAK,IAAI0C,KAAKovG,EAAGvsF,OACb,GAAI7iB,EAAE2lB,eAAeroB,KAAOuV,EAAW8S,eAAeroB,GAClD,IAAK,IAAI6lF,KAAKnjF,EAAEklB,SACZA,EAAStc,KAAKxC,OAAOwE,OAAO,CAAC,EAAGu4E,EAAG,CAC/B6iB,eAAgBoJ,EAAGvuF,cAAgB,CAAC,GAAG3iB,OAAS,GAChDgoG,UAAWkO,EAAgBp0G,EAAE1C,MAAO,EACpC84B,WAAY9Q,IAAmB69D,EAAE7lF,GACjC8oG,SAAUpmG,EAAE1C,GACZuoB,WAAYupF,EAAGvpF,YAAc,MAOjD,IAAIN,GAAqB,EACzB,IAAK,IAAIrT,KAAKuY,KAAKG,MAAMnF,gBACrB,GAAIvT,EAAE5U,KAAOuV,EAAW8S,eAAeroB,GAAI,CACvCioB,EAAqBrT,EAAEqT,mBACvB,KACJ,CAGJ,OACI6E,IAAAU,cAACge,GAAc,CAAC5iC,IAAK2M,EAAWvV,GAAI05B,UAAU,4BAC1C5M,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAAA,QAAMkM,UAAU,UAAUkB,KAAK,SAAQ,+IACvC9N,IAAAU,cAAC07E,GAAwB,CACrBU,sBAAuBz8E,KAAKF,MAAM9X,WAAWN,WAAW1T,OAAS,EACjE8mB,mBAAoBA,EACpBL,SAAUA,EACVrS,WAAYA,EACZw0F,wBAAyB58E,KAAKioF,4BAC9BpM,cAAe77E,KAAKkoF,kBACpBxM,eAAgB17E,KAAKooF,mBACrBtM,gBAAiB97E,KAAKqoF,uBAG9B1oF,IAAAU,cAAC+zB,GAAK,CACF1F,SAAO,EACPD,SAAO,EACPgG,UAAWz0B,KAAKG,MAAMqf,gBAAgBvN,KAAK3/B,MAC3CiiD,UAAWv0B,KAAKG,MAAMqf,gBAAgBrN,KAAK7/B,MAC3CkiD,YAAaA,IAAMx0B,KAAKw5D,yBAAyBx5D,KAAKG,MAAMqf,gBAAgBvN,KAAKp/B,IACjFyhD,YAAaA,IAAMt0B,KAAKw5D,yBAAyBx5D,KAAKG,MAAMqf,gBAAgBrN,KAAKt/B,MAIjG,CAEAw2G,gBACI,MAAMnjE,EAAalmB,KAAKG,MAAMmrB,SACxByM,EAAiB/3B,KAAKG,MAAM43B,eAClC,OACIp4B,IAAAU,cAACge,GAAc,CAAC9R,UAAU,4BACtB5M,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAAA,QAAMkM,UAAU,UAAUkB,KAAK,SAAQ,sLACvC9N,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,gBACzB5M,KAAK4pF,2BACL5pF,KAAK87D,mBACL97D,KAAKimF,mBAEVtmF,IAAAU,cAAC+zB,GAAK,CACFxqB,SAAUsc,EACVuI,SAAO,EACP8F,UAAWv0B,KAAKG,MAAMqf,gBAAgBrN,KAAK7/B,MAC3CgiD,YAAaA,IAAMt0B,KAAKw5D,yBAAyBx5D,KAAKG,MAAMqf,gBAAgBrN,KAAKt/B,MAErF8sB,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CACTtF,UAAU,gBACV3C,SAAUsc,EACV3T,MAAI,EACJnD,QAASpP,KAAK83B,YAChB93B,KAAKG,MAAM8uB,cAEhB8I,EAAe/jD,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAASsqB,GACvD/3B,KAAKG,MAAMwoF,gBAAkB3oF,KAAK6pF,qBAG/C,CAEAP,mBACI,OACI3pF,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,sBACVoD,QAAS3P,KAAK4sD,iBAEdjtD,IAAAU,cAACqhF,GAAyB,CACtBt2D,MAAwC,OAAjCprB,KAAKG,MAAMunF,kBAClBjH,aAAczgF,KAAKF,MAAM9X,WAAWA,WAAWnV,GAC/C8oG,SAAU37E,KAAKG,MAAMunF,kBACrBhgG,WAAYsY,KAAKF,MAAM9X,WAAWN,WAAWvV,KAAIsV,IAAC,CAC9C5U,GAAI4U,EAAE5U,GACNqoB,eAAgBzT,EAAEyT,eAClBtV,MAAO6B,EAAE7B,MACToQ,cAAevO,EAAEuO,kBAErBy2D,YAAazsD,KAAK4sD,gBAClB+0B,aAAc3hF,KAAK2nF,yBAInC,CAEA4B,sBACI,OAAKvpF,KAAKG,MAAM4nF,iBACTpoF,IAAAU,cAAC8iF,GAAa,CACjBxH,SAAU37E,KAAKG,MAAM4nF,iBACrBtH,aAAczgF,KAAKF,MAAM9X,WAAWA,WAAWnV,GAC/C0vG,eAAgBviF,KAAK6nF,0BAJkB,IAK/C,CAEA/rB,mBACI,OACIn8D,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACmkC,GAAU,CACPrC,mBAAmB,iBACnBI,WAAW,+BACX6B,iBAAiB,aACjBz8C,OAAQqY,KAAKG,MAAMxY,OAAOyT,YAAc,CAAC,EACzC8qB,WAAYlmB,KAAKG,MAAMmrB,SACvBihC,WAAW,EACXpmC,UA7pBW,GA8pBXkc,WAAW,EACXjnC,WAAY4E,KAAKG,MAAM/E,WACvB0oC,aAAc9jC,KAAKugF,mBACnB/8C,gBAAiBxjC,KAAKgiC,sBACtBS,wBAAyBziC,KAAKwgF,8BAC9Bh+C,cAAexiC,KAAKgoF,iCAEpBroF,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,iBAAgB,sBAAiBvM,KAAKG,MAAM/E,WAAWpnB,QAC5E2rB,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,mDAtqBA,GAsqBoD,gBAI/E,CAEAu5E,kBACI,MAAM6D,GAAsB9pF,KAAKG,MAAMxY,OAAO4P,WAAa,IAAIvjB,OAAS,EACxE,OACI2rB,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,YAAYw6B,IAAI,QAAQH,SAAS,YACnDhN,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkB8lE,EAAqB,cAAgB,KACvD,aAAY,yDAAsD9pF,KAAKG,MAAM5I,UAAUvjB,oBACvF,gBAAe,IACfiyC,gBAAc,EACdjB,kBAAkB,YAClBpb,SAAU5J,KAAKG,MAAMmrB,SACrBjd,QAASy7E,EACT37E,WAAS,EACTt7B,GAAG,WACHszC,UAAW,IACXumC,UAAQ,EACRr6E,MAAO2tB,KAAKG,MAAM5I,UAClB6e,SAAUuC,GAAS3Y,KAAKC,SAAS,CAAC1I,UAAWohB,EAAMwM,OAAO9yC,QAC1DqyC,QAAUxH,GAAOld,KAAKC,SAAS,CAAC1I,UAAW,OAC9CuyF,GAAsBnqF,IAAAU,cAAA,MAAIxtB,GAAG,eAAemtB,KAAKG,MAAMxY,OAAO4P,UAAUplB,KAAI,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,OAIrI,CAEAg3G,2BACI,MAAMliG,EAAasY,KAAKF,MAAM9X,WAAWN,WACzC,OAA0B,IAAtBA,EAAW1T,OACJgsB,KAAK+pF,wBAAwBriG,EAAW,IAAI,GAEhDA,EAAWvV,KAAIsV,GAAKuY,KAAK+pF,wBAAwBtiG,GAAG,IAC/D,CAEAsiG,wBAAwB3hG,EAAYy8F,GAChC,IAAImF,EAAsB,KAC1B,IAAK,IAAIviG,KAAKuY,KAAKG,MAAMnF,gBACjBvT,EAAE5U,KAAOuV,EAAW8S,eAAeroB,KACnCm3G,EAAsBviG,GAI9B,IAAKuiG,EACD,OAAOhqF,KAAKiqF,iCAAiC7hG,EAAYy8F,GAG7D,GAAImF,EAAoBlvF,mBACrB,OAAOkF,KAAKkqF,sBAAsB9hG,EAAYy8F,GAGjD,GAA2C,OAAvCmF,EAAoBnvF,eACrB,OAAOmF,KAAKmqF,eAAe/hG,EAAYy8F,GAI1C,IAuBIn4E,EAvBA7R,EAAiB,KACrB,IAAK,IAAI8pF,KAAM3kF,KAAKG,MAAMgkF,aAAc,CACpC,IAAK,IAAI5uG,KAAKovG,EAAGvsF,OAAQ,CACrB,IAAK,IAAIsgE,KAAKnjF,EAAEklB,SACZ,GAAIi+D,EAAE7lF,KAAOm3G,EAAoBnvF,eAAgB,CAC7CA,EAAiBlf,OAAOwE,OACpB,CAAC,EAAGu4E,EAAG,CAAC6iB,cAAeoJ,EAAGvuF,aAAa3iB,QAC3C,KACJ,CAEJ,GAAuB,OAAnBonB,EACA,KAER,CACA,GAAuB,OAAnBA,EACA,KAER,CAEA,OAAuB,OAAnBA,EACOmF,KAAKiqF,iCAAiC7hG,EAAYy8F,IAKzDn4E,EADAm4E,EACOllF,IAAAU,cAACgM,EAAI,CAAC/5B,OAAK,GAAC,yBAAa8V,EAAWxC,MAAM,iCAE1C+Z,IAAAU,cAACgM,EAAI,CAAC/5B,OAAK,GAAC,+BAInBqtB,IAAAU,cAAA,OAAK5kB,IAAK2M,EAAWvV,GAAI05B,UAAU,0BAC9BG,EACD/M,IAAAU,cAACyN,EAAG,CAACU,YAAa,GAAG3T,EAAelF,YAChCgK,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAa1R,EAAe0gF,eAC3C1gF,EAAerU,KAAKxS,OAAS,GAC1B2rB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAa1R,EAAerU,SAMpE,CAEA0jG,sBAAsB9hG,EAAYy8F,GAC9B,OAAIA,EAEIllF,IAAAU,cAAA,OAAKkM,UAAU,yBAAyB9wB,IAAK2M,EAAWvV,IACpD8sB,IAAAU,cAACgM,EAAI,CAAC/5B,OAAK,GAAC,yBAAa8V,EAAWxC,MAAM,sCAKlD+Z,IAAAU,cAAA,OAAKkM,UAAU,0BACX5M,IAAAU,cAACgM,EAAI,CAAC/5B,OAAK,GAAC,mCAGxB,CAEA63G,eAAe/hG,EAAYy8F,GACvB,OAAIA,EAEIllF,IAAAU,cAAA,OAAK5kB,IAAK2M,EAAWvV,GAAI05B,UAAU,0BAC/B5M,IAAAU,cAACgM,EAAI,CAAC/5B,OAAK,GAAC,yBAAa8V,EAAWxC,MAAM,KAC1C+Z,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,wBAKpB6X,IAAAU,cAAA,OAAKkM,UAAU,0BACX5M,IAAAU,cAACgM,EAAI,KAAC,cACN1M,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,uBAGxB,CAEAmiG,iCAAiC7hG,EAAYy8F,GACzC,OAAIA,EAEIllF,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK2M,EAAWvV,GAAI46B,KAAK,SAAQ,sEACCrlB,EAAWxC,MAAM,KAIhE+Z,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAQ,4CACpC,CAEAo8E,qBACI,MAAMliG,EAASqY,KAAKG,MAAMxY,OAAOqT,iBAAmB,CAAC,EAC/CtT,EAAasY,KAAKF,MAAM9X,WAAWN,WACnCm9F,EAAan9F,EAAW1T,OAAS,EACvC,OACI2rB,IAAAU,cAACoc,GAAY,CACTlQ,UAAU,SACVsQ,iBAAiB,yGACjBlN,QAASA,IAAM3P,KAAKC,SAAS,CAAC0oF,gBAAgB,KAE9ChpF,IAAAU,cAAAV,IAAAyc,SAAA,KACK10B,EAAWvV,KAAIsV,IACZ,MAAM2iG,GAAoBziG,EAAOF,EAAEyT,eAAeroB,KAAO,CAAC,GAAGioB,oBAAsB,GACnF,GAAIsvF,EAAiBp2G,OAAQ,CACzB,IAAI04B,EAMJ,OAJIA,EADAm4E,EACOllF,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,yBAAaL,EAAE7B,MAAM,gEAEjC+Z,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,yEAGnB6X,IAAAU,cAAA,OAAK5kB,IAAKgM,EAAE5U,GAAI46B,KAAK,SAAS,YAAU,UACnCf,EACA09E,EAAiBj4G,KAAI,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,GAAIlC,KAGjE,CACA,OAAO,IAAI,IAEf+sB,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACzC,QAASA,IAAMpP,KAAKC,SAAS,CAAC0oF,gBAAgB,IAASn/E,SAAO,GAAC,QAKjG,ECp3BJ,MAAM6gF,WAAoBzqF,YAEtBC,YAAYC,GACRC,MAAMD,GAiCV,KAEAwqF,8BAAiCpqG,IAC7B8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CAACo2B,gBAAgB,EAAOk0D,SAAUtuF,YAAoB/b,EAAKqqG,WAAW,EACvF,KAEDC,4BAA+BtqG,IAC3B8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CAACo2B,gBAAgB,EAAOvuC,MAAO,oFAAgE4W,YAAsBxe,EAAKiF,YAAY,EACvJ,KAEDslG,sCAAyC/gG,IACrCsW,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CAACo2B,gBAAgB,EAAOvuC,MAAO,4FAAwE4B,MAAW,EACnI,KAEDygE,kBAAoB,KAChBnqD,KAAKF,MAAM4qF,oBAAoB,EAjD/B1qF,KAAKG,MAAO,CACRk2B,gBAAgB,EAChBk0D,SAAU,GACVziG,MAAO,IAGXkY,KAAKwqB,SAAW,IACpB,CAIArR,oBAEInZ,KAAKwqB,SAAWpmB,EACZ,sBAAsBpE,KAAKF,MAAM2gF,wBACjC,MACA,CAAC,EACD,CAACzgD,KAAM,cACPhgC,KAAKsqF,8BACLtqF,KAAKwqF,4BACLxqF,KAAKyqF,sCAEb,CAEAjmE,uBAE0B,OAAlBxkB,KAAKwqB,UACLxqB,KAAKwqB,SAASI,OAEtB,CAyBA+/D,aAAaJ,GACT,IAAI/2G,EAAQ,KAAMo3G,EAAY,GAC9B,IAAK,IAAInyG,KAAK8xG,EACN9xG,EAAEiR,OAAO7W,KAAOmtB,KAAKF,MAAMw8D,gBAC3B9oF,EAAQiF,EAERmyG,EAAUzsG,KAAK1F,GASvB,OAJAmyG,EAAU7qG,MAAK,CAACoM,EAAIC,IACTD,EAAGtZ,GAAKuZ,EAAGvZ,IAAM,EAAI,IAGzB,CAACW,EAAOo3G,EACnB,CAIAxqF,SACI,IAAI1mB,EAAU,KACd,MAAM,MAAEoO,GAAUkY,KAAKG,MAOvB,OAJIzmB,EADAsmB,KAAKG,MAAMk2B,eACD12B,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,uCAEX5kB,EAAM9T,OAAS,EAAIgsB,KAAKsrD,cAAgBtrD,KAAK6qF,oBAGvDlrF,IAAAU,cAACoc,GAAY,CACT9M,QAAS3P,KAAKmqD,kBACdvtC,YAAc90B,EAAM9T,OAAS,EAAK8T,EAAQ,oCAEzCpO,EAGb,CAEA4xE,cACI,OACI3rD,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKmqD,kBAAmB3gD,SAAO,GAAC,MAGnE,CAEAqhF,oBACI,IAAInxG,EAAU,KACd,GAAIsmB,KAAKG,MAAMoqF,SAASv2G,OAAQ,CAE5B,IAAKR,EAAOo3G,GAAa5qF,KAAK2qF,aAAa3qF,KAAKG,MAAMoqF,UAEtD,MAAM9J,EAAezgF,KAAKF,MAAM2gF,aAChC,IAAIqK,EACAnrF,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACmP,IAAI,CAACC,KAAK,eAAe,cAAY,OAAO53B,MAAO,CAAC,YAAe,KACpE8nB,IAAAU,cAACgM,EAAI,KAAC,+BAId3yB,EACIimB,IAAAU,cAAAV,IAAAyc,SAAA,KACKpc,KAAK+qF,gBAAgBv3G,EAAOs3G,GAC5BF,EAAU52G,OAAS,EAChB2rB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,wBACjBs4G,EAAUz4G,KAAI,CAACsG,EAAGukB,IACf2C,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACx1B,IAAKhD,EAAE5F,GAAI05B,UAAU,2BAC5C5M,IAAAU,cAAA,UAAQ+O,QAASA,IAAMpP,KAAKF,MAAMw4C,OAAiB,IAAVt7C,EAAc,eAAeyjF,IAAiB,eAAeA,WAAsBhoG,EAAE5F,MAAO05B,UAAU,aAAY,UAC/Iq+E,EAAU52G,OAASgpB,EAAM,kBAAgBvkB,EAAE6d,kBAA6B,IAAV0G,EAAc,4BAAoB,IAE3GxnB,SAASwqB,KAAKF,MAAMjtB,MAAQ4F,EAAE5F,IAAMi4G,GACnCryG,EAAEuyG,uBACArrF,IAAAU,cAACgM,EAAI,CAACE,UAAU,kCAAiC,6CAOjE5M,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,8BAG3B,MACIhzB,EAAUimB,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,4CAEzB,OACI/M,IAAAU,cAAAV,IAAAyc,SAAA,KACK1iC,EACDimB,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAACE,SAAO,GAC9BxR,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKmqD,kBAAmB3gD,SAAO,GAAC,YAIvE,CAEAuhF,gBAAgBv3G,EAAOs3G,GACnB,OAAK9qF,KAAKF,MAAMY,UAAaltB,EAEzBmsB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,mBACP,OAAVkB,EACGmsB,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,GACtBtR,IAAAU,cAAA,UAAQ+O,QAASA,IAAMpP,KAAKF,MAAMw4C,OAAO,eAAet4C,KAAKF,MAAM2gF,wBAAyBl0E,UAAU,aAAY,gCAChF/4B,EAAMgQ,iBAEvChO,SAASwqB,KAAKF,MAAMjtB,MAAQW,EAAMX,IAAMi4G,GAE7CnrF,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,0BAVsB,IAajD,EC/JG,MAAMu+E,GAA6B9wE,IAEnC,IAFoC,cACvC5yB,EAAa,4BAAE2jG,GAClB/wE,GAEO,KAAEj6B,EAAM8sC,UAAW8d,GAAqBre,GAAmB,CAC3DzyC,IAAK,sDAAsDuN,EAAcS,WAAWnV,OAGxF,MAAMmtF,EAAW/+E,YAAsBsG,EAAcS,WAAW0B,QAChE,IAAImkC,EAAUC,cACd,MAAOq9D,EAAiBC,GAAsBv8E,oBAAS,IAChDme,EAAWC,GAAgBpe,oBAAS,IACpCub,EAAYC,GAAiBxb,mBAAS,MhK0KnBsL,KAQvB,IARwB,mBAC7B2U,EAAkB,UAClBpC,EAAY,CAAC,EAAC,UACdM,EAAS,gBACTH,EAAkB,KAAI,aACtBI,EAAY,cACZ5C,EAAa,IACbrwC,GACDmgC,EAuCC3B,qBArCA,WACE,IAAKwU,EAAa,OAClBC,GAAa,GACb5C,EAAc,MAEd,IAAIG,EAAW,KA4Bf,OAJAA,EAAWpmB,EACTpqB,EAAK,MAAO,CAAC,EAAG0yC,GAvBlB,SAAyBxsC,GACvBsqC,EAAW,KACXsE,EAAmB5uC,GACnB+sC,GAAa,EACf,IAEA,SAAuB/sC,GACrBsqC,EAAW,KACXH,EAAcnqC,EAAKiF,SACnB8nC,GAAa,EACf,IAEA,SAAiCvjC,GAC/B8gC,EAAW,KACXH,EACa,MAAX3gC,GAAkBmjC,EACdA,EACA,4DAAwCnjC,MAE9CujC,GAAa,EACf,IAMO,KACY,OAAbzC,GAAoBA,EAASI,OAAO,CAE5C,GACgB,CAACoC,GAER,EgKnNPq+D,CAAe,CACXrxG,IAAK,4BAA4BuN,EAAcS,WAAWnV,MAAMmtF,EAAW,KAAO,SAClFlxC,mBARJ,SAA4B5uC,GACxBkrG,GAAmB,GACnBF,EACI9uF,YAAoBlc,GAAM8H,WAAW0B,OAC7C,EAKIsjC,YACAC,eACA5C,gBACAwC,gBACI,8BAAyBmzC,EAAW,eAAiB,qDAI7D,MAAQj/D,YAAauqF,GAAwBxrE,qBAAWjf,GAExD,GAAIiqC,IAAqB5qD,EAAQ,OAAO,KAExC,SAASqrG,EAAcC,EAAYnzG,GAC/B,OAAQ6H,EAAKssC,WAAWg/D,IAAe,CAAC,GAAGnzG,KAAS,CACxD,CAGA,IAAKkzG,EAAc,8BAA+B,sBAC9C,OAAO,KAQX,SAASE,IACLL,GAAmB,EACvB,CAWA,MAAO/nG,YAAaqoG,EAAa,CAAC,GAAKnkG,EAAcS,WAmBrD,MAAM83E,EAAoD,UAA1Cv4E,EAAcS,WAAW0B,OAAOpX,MAChD,OACIqtB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,EAAC9E,UAAU,eAClC5M,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,mBAClBqtB,IAAAU,cAACgM,EAAI,KACA2zD,GAAYF,EACP,2FACA,6BAGRA,GACEngE,IAAAU,cAAAV,IAAAyc,SAAA,KACKmvE,EAAc,8BAA+B,aAC1C5rF,IAAAU,cAACwR,EAAY,CACTjI,SAAoD,cAA1CriB,EAAcS,WAAW0B,OAAOpX,MAC1Cm9B,KAAK,OACLuC,MAAI,EACJ5C,QA1ChC,WACIye,EAAQ1vC,KACJ4nB,EAAKY,mBAAmBJ,OAAOhf,EAAcS,WAAWnV,IAChE,GAwC6B,UAKJ04G,EAAc,8BAA+B,aAC1C5rF,IAAAU,cAACwR,EAAY,CACTG,MAAI,EACJvC,KAAMuwD,EAAW,eAAiB,SAClC5wD,QAjEhC,WACIib,EAAc,MACd+gE,GAAmB,EACvB,EA+DgC5hF,SAAO,GAENw2D,EAAW,WAAa,cAM7CrgE,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACmD,OAAK,EAAC/E,UAAU,qBAClC5M,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,mBAClBqtB,IAAAU,cAACgM,EAAI,KAAE1pB,YAAgB+oG,IACvB/rF,IAAAU,cAACgM,EAAI,CAACE,UAAU,wDAAwDm/E,EAAWj9F,OACnFkR,IAAAU,cAACgM,EAAI,CAACE,UAAU,0BAAyB,MAAIm/E,EAAWz0F,gBAE5D0I,IAAAU,cAAA,OAAKkM,UAAU,wBACV++E,EAAoBvpF,qCACjBpC,IAAAU,cAACwR,EAAY,CACTG,MAAI,EACJvC,KAAK,SACLL,QAjE5B,WACIye,EAAQ1vC,KAAK4nB,EAAKe,aAAaP,OAAOmlF,EAAW74G,IACrD,GAgEyB,qCAIJ04G,EAAc,oCAAqC,uBAChD5rF,IAAAU,cAACwR,EAAY,CACTG,MAAI,EACJvC,KAAK,cACLL,QAtE5B,WACIye,EAAQ1vC,KACJ,GAAG4nB,EAAKkB,mBAAmBxJ,cAAciuF,EAAWj9F,2BAC5D,GAoEyB,sBAILkR,IAAAU,cAACwR,EAAY,CACTG,MAAI,EACJvC,KAAK,cACLL,QAzExB,WAIIye,EAAQ1vC,KACJ,GAAG4nB,EAAKmB,yBAAyBzJ,cAAciuF,EAAWj9F,6FAClE,GAoEqB,+BAMZ08F,GACGxrF,IAAAU,cAACoc,GAAY,CACTG,YAAa,uBAAuBojD,EAAW,kBAAe,wCAC9DrwD,QAAS87E,GAET9rF,IAAAU,cAACuhB,GAAoB,CACjBhY,SAAUojB,EACVlL,WAAW,MACXC,SAAS,MACTC,SAAUypE,EACVxpE,OA9GpB,WACIgL,GAAa,EACjB,IA6GgC,OAAf7C,GAAuBzqB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEsiC,IAG9C,ECjLX,MAAMuhE,WAAgC/rF,YAGlCQ,SACI,MAAM,gBAAEwrF,EAAe,gBAAE5F,GAAoBhmF,KAAKF,OAC5C,WAAE6wE,EAAU,sBAAEd,GAA0BD,GAE9C,OACIjwE,IAAAU,cAAC6wE,KAAQ,KACLvxE,IAAAU,cAAC8wE,KAAI,CAAC/gE,KAAK,KAAKv4B,MAAOg4F,EAAuBuB,MAAI,GAC9CzxE,IAAAU,cAAC4yB,GAAS,MACVtzB,IAAAU,cAACgzB,KAAI,KACD1zB,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,sBAAeib,GACxCjsF,IAAAU,cAACgM,KAAI,KAAE25E,GACNhmF,KAAK6rF,wBAK1B,CAEAA,sBACI,MAAM,QAAEpyF,GAAYuG,KAAKF,OACnB,gBAAE2wE,EAAe,cAAEr9C,GAAkBw8C,GAE3C,OAAIn2E,EAAQzlB,QAAU,EAEd2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,KAAI,CAACx0B,MAAO44F,GAAiB,gDAC9B9wE,IAAAU,cAACgM,KAAI,KAAC,sBAAiB5S,EAAQzlB,QAC9BylB,EAAQtnB,KAAI25G,GAAK9rF,KAAK+rF,eAAeD,MAK3CnsF,IAAAU,cAACgM,KAAI,CAACx0B,MAAOu7C,GAAe,mCACvC,CAEA44D,aAAa34F,GACT,MAAM,UAAE8E,GAAc9E,EAEtB,GAAI8E,EAAW,CACX,MAAM,OAAEzO,GAAW2J,EAEnB,IAAI44F,EAAc,GAOlB,MANqB,cAAjBviG,EAAOpX,MACP25G,EAAc,uBACU,UAAjBviG,EAAOpX,QACd25G,EAAc,6BAIdtsF,IAAAU,cAACgzB,KAAI,CAACx7C,MAAOuzB,GAAO8gF,sBAChBvsF,IAAAU,cAACgM,KAAI,CAACx0B,MAAO+3F,GAAUe,YAAasb,GACnCtuG,YAAgBwa,EAAUgC,OAAOhoB,KAAI,CAAC2L,EAAMhJ,IAAM6qB,IAAAU,cAACgM,KAAI,CAAC5wB,IAAK3G,GAAIgJ,KAG9E,CAEA,OAAO6hB,IAAAU,cAACgM,KAAI,CAACx0B,MAAO+3F,GAAUx8C,eAAe,2BACjD,CAEA24D,eAAe14F,GACX,MAAM,kBAAEiD,EAAiB,eAAEpT,EAAc,GAAErQ,EAAE,YAAEukB,EAAW,MAAEY,EAAK,MAAEmC,GAAU9G,EAE7E,OACIsM,IAAAU,cAACgzB,KAAI,CAAC53C,IAAK5I,EAAIgF,MAAOuzB,GAAO+gF,wBACxB/0F,GAAeuI,IAAAU,cAACgM,KAAI,CAACx0B,MAAOuzB,GAAOghF,cAAc,gBAClDzsF,IAAAU,cAACgM,KAAI,CAACx0B,MAAO+3F,GAAUe,YAAY,iBAAe34E,EAAM,wBAAiB9U,EAAgBoT,GAAqB,wBAAwBA,KACrI3Y,YAAgBwc,GAAOhoB,KAAI,CAAC2L,EAAMhJ,IAAM6qB,IAAAU,cAACgM,KAAI,CAAC5wB,IAAK3G,GAAIgJ,KACvDkiB,KAAKgsF,aAAa34F,GAG/B,EAIJ,MAAM+X,GAASooB,KAAWC,OAAO,CAC7B24D,aAAc,CACV9oD,MAAO,GACPxP,kBAAmB,EACnBC,kBAAmB,UACnB1oB,MAAO,UACPghF,cAAe,YACf9gF,SAAU,GACVM,WAAY,KAEhBsgF,uBAAwB,CACpBx4D,gBAAiB,GACjBpmB,aAAc,GACdumB,kBAAmB,EACnBC,kBAAmB,WAEvBm4D,qBAAsB,CAClBvpC,YAAa,MC7FrB,MAAM2pC,WAAyCr2D,GAAcp2B,cAAA,SAAA9rB,WAAA,KAazDw9F,gBAAkB,KACd,MAAM,WAAEvpF,EAAU,MAAEpC,GAAUoa,KAAKF,MAAM9X,WAEzCgY,KAAKC,SACD,CAACkT,eAAe,IAChB,IAAM32B,YACFmjB,IAAAU,cAACsrF,GAAuB,CACpBlyF,QAASuG,KAAKG,MAAM1G,QACpBusF,gBAAiBpgG,EACjBgmG,gBAAiB5jG,EAAWgQ,QAChC,4BAA4BhQ,EAAWgQ,YACvCgI,KAAK6xE,qBAEZ,EAGL,KAEAA,mBAAqB,KACjB7xE,KAAKC,SAAS,CAACkT,eAAe,GAAO,CACxC,CA7BDyjB,mBAAmB12C,GACf8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVmqB,WAAY,GACZiM,gBAAgB,EAChB58B,QAAS2C,YAAoBlc,GAAMuZ,SAE3C,CAwBA29B,cACI,MAAO,8BAA8Bp3B,KAAKF,MAAM9X,WAAWA,WAAWnV,IAC1E,CAEAqkD,cAAc/xC,GAEV,MAAO,4EADPA,EAAU4a,MAAMm3B,cAAc/xC,IAElC,CAEAgyC,6BAA6BztC,GACzB,MAAO,mHAAqFA,IAChG,CAIA6iG,oBACI,OACI5sF,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAAC6S,EAAe,CACZC,cAAenT,KAAKG,MAAMgT,cAC1B/D,QAASpP,KAAKuxE,iBAAiB,0BACT5xE,IAAAU,cAAA,QAAMkM,UAAU,WAAU,uBAAgBvM,KAAKF,MAAM9X,WAAWpC,QAItG,EClDJ,MAAM4mG,WAAsB5sF,YACxBC,YAAYC,GAAQ,IAADyB,EACfxB,MAAMD,GAAMyB,EAAAvB,KAAC,KAajBysF,gBAAkB,IAAMzsF,KAAK83B,aAAa,KAE1C40D,oBAAsB,IAAM1sF,KAAK83B,YAAW,GAAM,KAElDA,WAAa,WAAsB,IAArB8yD,EAAS72G,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GACnBwtB,EAAKtB,SACD,CAACqrB,UAAU,IACX,KAEI/pB,EAAKorF,QAAUvoF,EACX,iBAAiB7C,EAAKzB,MAAMpG,QAAQ7mB,KAAK+3G,EAAY,gBAAkB,KACvE,MACA,CAAC,EACDxuF,YAAoBmF,EAAKskB,UAAW,CAAErqB,UAAU,IAChD+F,EAAK62B,uBACL72B,EAAK82B,qBACL92B,EAAK+2B,+BACL/2B,EAAKg3B,qBACR,GAGb,EAAC,KAEDH,uBAA0Bl4C,IACtB8f,KAAK2sF,QAAU,KACf3sF,KAAKF,MAAM8sF,SACP5sF,KAAKF,MAAMpG,QAAQ7mB,GACnBupB,YAAoBlc,GAAMwZ,QAC7B,EACJ,KAED2+B,qBAAwBn4C,IACpB8f,KAAK2sF,QAAU,KAEf3sF,KAAKC,SAAS,CACVmqB,WAAY1rB,YAAsBxe,EAAKiF,SACvCmmC,UAAU,GACZ,EACL,KAEDgN,+BAAkC5uC,IAC9BsW,KAAK2sF,QAAU,KAEf3sF,KAAKC,SAAS,CACVmqB,WAAY,4DAAwC1gC,KACpD4hC,UAAU,GACZ,EACL,KAEDiN,qBAAwB5wC,IACpBqY,KAAK2sF,QAAU,KAEf3sF,KAAKC,SAAS,CACVtY,OAAQwW,YAAoCxW,EAAQqY,KAAK6lB,WACzDyF,UAAU,GACZ,EAnEF,MAAM,QAAE5xB,GAAYsG,KAAKF,MACzBE,KAAKG,MAAQ,CACTttB,GAAI6mB,EAAQvB,UAAUtlB,IAAM,GAC5BsnB,MAAOT,EAAQvB,UAAUgC,OAAS,GAClC0yF,aAAcnzF,EAAQS,MACtBmxB,UAAU,EACVlB,WAAY,GACZziC,OAAQ,CAAC,EACTyjC,OAAQ1xB,EAAQvB,UAAUtlB,GAElC,CA4DAgzC,UACI,MAAO,CACH1rB,MAAO6F,KAAKG,MAAM0sF,aAClB10F,UAAW,CAACgC,MAAO6F,KAAKG,MAAMhG,OAEtC,CAEAiG,SACI,MAAM,YAAEqsD,GAAgBzsD,KAAKF,OACvB,kBACFxJ,EAAiB,eACjBpT,EAAc,MACd8U,GACAgI,KAAKF,MAAMpG,SAET,OACF/R,EAAM,WACNyiC,EAAU,aACVyiE,EAAY,SACZvhE,EAAQ,MACRnxB,GACA6F,KAAKG,MAEHgjD,IAAmBx7D,EAAOwQ,WAAa,CAAC,GAAGgC,OAAS,IAAInmB,OAAS,EACjE84G,GAAyBnlG,EAAOwS,OAAS,IAAInmB,OAAS,EACtD4mD,EAAgBuoB,GAAkB2pC,EAExC,IAAIC,EAAgB,cAAc/0F,yBAAwB9U,IAM1D,OAJIoT,IACAy2F,GAAiB,wBAAwBz2F,KAIzCqJ,IAAAU,cAACoc,GAAY,CACTG,YAAY,uBACZjN,QAAS88C,GAET9sD,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACE,UAAU,mBAAmBwgF,GACnCptF,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,0BAAgBw6B,IAAI,QAAQH,SAAS,mBACvDhN,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkB8oE,EAAwB,qBAAuB,KACjE,aAAY,uEAA0DD,EAAa74G,oBACnF,gBAAe,IACfiyC,gBAAc,EACdjB,kBAAkB,0BAClBpb,SAAU0hB,EACVnd,WAAS,EACTt7B,GAAG,kBACHw7B,QAASy+E,EACT3mE,UAAW,IACXzB,QAAUxH,GAAOld,KAAKC,SAAS,CAAC4sF,aAAc,KAC9Cz2E,SAAW8G,GAAOld,KAAKC,SAAS,CAAC4sF,aAAc3vE,EAAGiI,OAAO9yC,QACzDq6E,UAAQ,EACRr6E,MAAOw6G,IACVC,GAAyBntF,IAAAU,cAAA,MAAIxtB,GAAG,sBAAsB8U,EAAOwS,MAAMhoB,KAAI,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,OAEpH+sB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,iBAAYw6B,IAAI,QAAQH,SAAS,sBACnDhN,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkBm/B,EAAiB,wBAA0B,KAC7D,aAAY,8DAAsDhpD,EAAMnmB,oBACxE,gBAAe,IACfiyC,gBAAc,EACdjB,kBAAkB,iBAClBpb,SAAU0hB,EACVnd,WAAS,EACTt7B,GAAG,qBACHw7B,QAAS80C,EACTh9B,UAAW,IACXzB,QAAUxH,GAAOld,KAAKC,SAAS,CAAC9F,MAAO,KACvCic,SAAW8G,GAAOld,KAAKC,SAAS,CAAC9F,MAAO+iB,EAAGiI,OAAO9yC,QAClDq6E,UAAQ,EACRr6E,MAAO8nB,IACVgpD,GAAkBxjD,IAAAU,cAAA,MAAIxtB,GAAG,yBAAyB8U,EAAOwQ,UAAUgC,MAAMhoB,KAAI,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,OAEzHw3C,EAAWp2C,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAS2c,GACpDzqB,IAAAU,cAACyQ,EAAU,CAACS,SAAO,EAACpD,WAAS,GACzBxO,IAAAU,cAACyQ,EAAU,KACPnR,IAAAU,cAACwR,EAAY,CACTE,QAAM,EACNnI,SAAU0hB,EACVlc,QAASq9C,GAAa,UAGY,cAApCzsD,KAAKF,MAAMpG,QAAQhQ,OAAOpX,OACxBqtB,IAAAU,cAACwR,EAAY,CACTjI,SAAU0hB,EACVtZ,MAAI,EACJ5C,QAASpP,KAAKysF,iBAAkB,oCAK5C9sF,IAAAU,cAACwR,EAAY,CACTtF,UAAU,gBACV3C,SAAU0hB,EACVlc,QAASpP,KAAK0sF,oBACdn6E,MAAI,GAAE,cAIbqoB,GAAiBj7B,IAAAU,cAAA,QAAMoN,KAAK,QAAQlB,UAAU,WAAU,uCAIzE,ECnLJ,MAAMygF,WAAoBptF,YACtBC,YAAYC,GACRC,MAAMD,GAAO,KAUjBg4B,WAAa,KACT93B,KAAKC,SACD,CAACqrB,UAAU,IACX,KAEItrB,KAAK2sF,QAAUvoF,EACX,gBACA,OACA,CAAC,EACDhI,YACI,CACIjC,MAAO6F,KAAKG,MAAMhG,MAClBnS,WAAYgY,KAAKF,MAAM0G,iBAE3B,CAAChL,UAAU,IAEfwE,KAAKo4B,uBACLp4B,KAAKq4B,qBACLr4B,KAAKs4B,+BACLt4B,KAAKu4B,qBACR,GAER,EACJ,KAEDH,uBAA0Bl4C,IACtB8f,KAAK2sF,QAAU,KACf3sF,KAAKF,MAAMmtF,cAAc7wF,YAAoBlc,GAAMwZ,QAAQ,EAC9D,KAED2+B,qBAAwBn4C,IACpB8f,KAAK2sF,QAAU,KAEf3sF,KAAKC,SAAS,CACVmqB,WAAY1rB,YAAsBxe,EAAKiF,SACvCmmC,UAAU,GACZ,EACL,KAEDgN,+BAAkC5uC,IAC9BsW,KAAK2sF,QAAU,KAEf3sF,KAAKC,SAAS,CACVmqB,WAAY,4DAAwC1gC,KACpD4hC,UAAU,GACZ,EACL,KAEDiN,qBAAwB5wC,IACpBqY,KAAK2sF,QAAU,KAEf3sF,KAAKC,SAAS,CACVtY,OAAQ2W,YAA8B3W,GACtC2jC,UAAU,GACZ,EA9DFtrB,KAAKG,MAAQ,CACThG,MAAO,GACPmxB,UAAU,EACVlB,WAAY,GACZziC,OAAQ,CAAC,EAEjB,CA2DAyY,SACI,MAAM,YAAEqsD,GAAgBzsD,KAAKF,OACvB,OAAEnY,EAAM,WAAEyiC,EAAU,SAAEkB,EAAQ,MAAEnxB,GAAU6F,KAAKG,MAC/CgjD,GAAkBx7D,EAAOwS,OAAS,IAAInmB,OAAS,EAErD,OACI2rB,IAAAU,cAACoc,GAAY,CACTG,YAAY,gBACZjN,QAAS88C,GAET9sD,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,0BAAgBw6B,IAAI,QAAQH,SAAS,YACvDhN,IAAAU,cAAC2jB,GAAe,CACZ,mBAAkBm/B,EAAiB,cAAgB,KACnD,aAAY,uEAA0DhpD,EAAMnmB,oBAC5E,gBAAe,IACfiyC,gBAAc,EACdjB,kBAAkB,0BAClBpb,SAAU0hB,EACVnd,WAAS,EACTt7B,GAAG,WACHw7B,QAAS80C,EACTz+B,QAAUxH,GAAOld,KAAKC,SAAS,CAAC9F,MAAO,KACvCic,SAAW8G,GAAOld,KAAKC,SAAS,CAAC9F,MAAO+iB,EAAGiI,OAAO9yC,QAClD8zC,UAAW,IACX9zC,MAAO8nB,EACPuyD,UAAQ,IACXvJ,GAAkBxjD,IAAAU,cAAA,MAAIxtB,GAAG,cAAc46B,KAAK,SAAS9lB,EAAOwS,MAAMhoB,KAAI,CAACS,EAAGkC,IAAM6qB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAACrM,IAAK3G,EAAGg4B,IAAI,MAAMl6B,OAElHw3C,EAAWp2C,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAS2c,GACpDzqB,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACoD,SAAO,GACzB5R,IAAAU,cAACwR,EAAY,CACTE,QAAM,EACNnI,SAAU0hB,EACVlc,QAASq9C,GAAa,UAG1B9sD,IAAAU,cAACwR,EAAY,CACTtF,UAAU,gBACV3C,SAAU0hB,EACV7b,KAAM6b,EAAW,OAAS,OAC1Blc,QAASpP,KAAK83B,WACdtuB,SAAO,GACN8hB,EAAW,kBAAe,mBAMnD,EC1HJ,MAAM4hE,WAAgBttF,YAAUC,cAAA,SAAA9rB,WAG9B,KAEAo5G,aAAgBv6G,IACdotB,KAAKF,MAAMstF,cAAcptF,KAAKF,MAAMzM,SAASxgB,IAC7CD,EAAEy8B,cAAcC,MAAM,EACtB,KAEF+3E,kBAAoB,KAClBjjF,EACE,uBAAuBpE,KAAKF,MAAMzM,SAASxgB,KAC3C,SACA,CAAC,EACD,CAAC,GACD,KACEmtB,KAAKF,MAAMutF,oBAAoB,GAElC,CACD,CAGFjtF,SACE,MAAM,YAAEhJ,EAAW,MAAE+C,EAAK,gBAAEG,EAAe,MAAEktF,GAAUxnF,KAAKF,MAAMzM,UAC5D,cAAEoM,GAAkBO,KAAK4Y,QAE/B,OACEjZ,IAAAU,cAACgT,EAAS,CAACC,aAAa,KAAK/G,UAAU,YACpCnV,IAAgB4I,KAAKF,MAAMwtF,eAC1B3tF,IAAAU,cAACgM,EAAI,CAACE,UAAU,gBAAe,gBAEjC5M,IAAAU,cAACiY,GAAc,CAAChmC,MAAO0tB,KAAKutF,sBACzBjzF,GAAmBA,IAAoBH,GACtCwF,IAAAU,cAAAV,IAAAyc,SAAA,KACEzc,IAAAU,cAACgM,EAAI,CAACE,UAAU,sCAAqC,kEAGrD5M,IAAAU,cAACgM,EAAI,CAACE,UAAU,wCACbjS,IAIPqF,IAAAU,cAACgM,EAAI,CAACE,UAAU,aACbjS,GAAmBA,IAAoBH,GACtCwF,IAAAU,cAAA,QAAMkM,UAAU,WAAU,sCAE3BpS,GAAS,KAGb6F,KAAKwtF,kBACLxtF,KAAKF,MAAM2tF,aACV9tF,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GAAEnR,KAAK0tF,uBAE3BlG,GACC7nF,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACjBxR,IAAAU,cAAC4/D,KAAW,KACVtgE,IAAAU,cAACwR,EAAY,CACXzC,QAASA,KACPpP,KAAKqnF,oBACL5nF,GAAe,EAEjB+J,SAAO,EACPiG,KAAK,SACN,iCAEC9P,IAAAU,cAAA,QAAMkM,UAAU,WAAU,gBAAcvM,KAAKutF,uBAE/C5tF,IAAAU,cAAC0gB,KAAK,CAACzuC,MAAM,QAMzB,CAEAi7G,qBACE,MAAM,kBAAEj3F,EAAiB,eAAEpT,EAAc,MAAE8U,EAAK,OAAEtO,GAChDsW,KAAKF,MAAMzM,SAEb,IAAI05F,EAAgB,iBAAiB/0F,yBAAwB9U,IAM7D,MAJqB,cAAjBwG,EAAOpX,QACTy6G,GAAiB,wBAAwBz2F,KAGpCy2F,CACT,CAEAY,uBACE,MAAyC,cAArC3tF,KAAKF,MAAMzM,SAAS3J,OAAOpX,MACtB,uBAEA,2BAEX,CAEAk7G,kBACE,OAAIxtF,KAAKF,MAAMzM,SAAS8E,UAEpBwH,IAAAU,cAACiY,GAAc,CACbhmC,MAAO0tB,KAAK2tF,uBACZphF,UAAU,oBAEV5M,IAAAU,cAACmP,IAAI,CACH,cAAY,OACZC,KAAK,2BACLlD,UAAU,0BAEZ5M,IAAAU,cAACgM,EAAI,CAACE,UAAU,aACbvM,KAAKF,MAAMzM,SAAS8E,UAAUgC,QAMhCwF,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,kBACpB,CAEAghF,sBACE,MAAM,OAAEhkG,GAAWsW,KAAKF,MAAMzM,SAE9B,IAAK2M,KAAKF,MAAM8tF,iBACd,OAAO,KAET,OAAQlkG,EAAOpX,OACb,IAAK,QACH,OACEqtB,IAAAU,cAACwR,EAAY,CAACG,MAAI,EAACE,UAAQ,EAAC9C,QAASpP,KAAKmtF,cAAc,oBAEtDxtF,IAAAU,cAAA,QAAMkM,UAAU,WAAU,IAAEvM,KAAKutF,uBAGvC,IAAK,YACH,OACE5tF,IAAAU,cAACwR,EAAY,CAACG,MAAI,EAACE,UAAQ,EAAC9C,QAASpP,KAAKmtF,cAAc,SAChDxtF,IAAAU,cAAA,QAAMkM,UAAU,WAAU,IAAEvM,KAAKutF,uBAG7C,IAAK,MACH,OACE5tF,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC0I,UAAQ,EAAC9C,QAASpP,KAAKmtF,cAAc,oBAEzDxtF,IAAAU,cAAA,QAAMkM,UAAU,WAAU,OAAKvM,KAAKutF,uBAG1C,QACE,OAAO,KAEb,EArJIL,GACGpmD,YAAc1nC,ECRvB,MAAMyuF,WAA8CvB,GAAiCzsF,cAAA,SAAA9rB,WAAA,KAEjF+5G,aAAe,CAACj7G,EAAIqN,KAChB,MAAM,UAAEiY,EAAS,OAAEzO,EAAM,MAAEyQ,GAAUja,EACrC8f,KAAKC,UACDC,IAAS,CACL6tF,mBAAoB,KACpBt0F,QAASyG,EAAUzG,QAAQtnB,KAAI25G,IACvBA,EAAEj5G,KAAOA,IACTi5G,EAAInwG,OAAOwE,OAAO,CAAC,EAAG2rG,EAAG,CACrB3xF,MAAOA,EACPzQ,OAAQA,EACRyO,UAAW,CACPtlB,GAAIslB,EAAUtlB,GACdsnB,MAAOhC,EAAUgC,UAItB2xF,QAGlB,EACJ,KAEDkC,qBAAwBn7G,IACpBmtB,KAAKC,SAAS,CAACguF,cAAc,EAAMF,mBAAoBl7G,GAAI,CAC9D,CAID2jD,mBAAmB12B,GACf,MAAO,CACHrG,QAAS,GACTw0F,cAAc,EACdF,mBAAoB,KACpB56E,eAAe,EAEvB,CAIAykB,gBACI,MAAMn+B,EAAUuG,KAAKG,MAAM1G,QAE3B,OAAKA,EAAQzlB,OAKT2rB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,uBAChBvM,KAAKusF,oBACN5sF,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,kBAC1BjN,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,sBAAiBjT,EAAQzlB,QACnCgsB,KAAKG,MAAM8tF,cAAgBjuF,KAAKkuF,mBACjCvuF,IAAAU,cAAA,UACK5G,EAAQtnB,KAAK25G,GAENnsF,IAAAU,cAAC6sF,GAAO,CACJO,YAA+D,cAAlDztF,KAAKF,MAAM9X,WAAWA,WAAW0B,OAAOpX,MACrDmJ,IAAKqwG,EAAEj5G,GACPwgB,SAAUy4F,EACV8B,kBAAgB,EAChBR,cAAeptF,KAAKguF,qBACpBX,mBAAoBrtF,KAAKF,MAAMutF,0BAnBhD1tF,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,mCA2B1B,CAEAwhF,iBAAiBx0F,GACb,GAAsC,OAAlCsG,KAAKG,MAAM4tF,mBAA+B,OAAO,KAErD,MAAMI,EAAmBnuF,KAAKG,MAAM1G,QAAQpZ,QAAOyrG,GAAKA,EAAEj5G,KAAOmtB,KAAKG,MAAM4tF,qBAAoB,GAChG,MAAI,CAAC,UAAM95G,GAAWQ,SAAS05G,GAA4B,KAEvDxuF,IAAAU,cAACmsF,GAAa,CACV9yF,QAASy0F,EACT1hC,YAAaA,IAAMzsD,KAAKC,SAAS,CAACguF,cAAc,EAAOF,mBAAoB,OAC3EnB,SAAU5sF,KAAK8tF,cAE3B,ECrFJ,MAAMM,WAAsC9B,GAIxC91D,mBAAmB12B,GACf,MAAO,CACHrG,QAAS,GAEjB,CAIAm+B,gBACI,MAAMn+B,EAAUuG,KAAKG,MAAM1G,QACrB40F,EAAmBruF,KAAKF,MAAM9X,WAAWA,WAAW0B,OAAOpX,MAEjE,OACIqtB,IAAAU,cAAAV,IAAAyc,SAAA,KAC0B,cAArBiyE,GACG1uF,IAAAU,cAAA,OAAKkM,UAAU,wBACX5M,IAAAU,cAACwR,EAAY,CAACC,KAAG,EAAC1C,QAAStwB,IAAqBytB,UAAU,iBAAgB,iBAC1E5M,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,qBAInB/M,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,uBAChBvM,KAAKusF,oBACJ9yF,EAAQzlB,OACN2rB,IAAAU,cAAA,OAAKkM,UAAU,4BACX5M,IAAAU,cAACgM,EAAI,CAACO,YAAU,GAAC,qCACjBjN,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,iBAAgB,sBAAiB9S,EAAQzlB,QAC9D2rB,IAAAU,cAAA,UACK5G,EAAQtnB,KAAK25G,GAAMnsF,IAAAU,cAAC6sF,GAAO,CAACzxG,IAAKqwG,EAAEj5G,GAAIwgB,SAAUy4F,EAAGuB,mBAAoBrtF,KAAKF,MAAMutF,yBAL7E1tF,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,8DAY9C,ECvCJ,MAAM4hF,WAAqChC,GAAiCzsF,cAAA,SAAA9rB,WAAA,KAExEw6G,kBAAqBruG,IACjB8f,KAAKC,UAASC,IAAS,CACnBsuF,gBAAgB,EAChB/0F,QAAS,IAAIyG,EAAUzG,QAASvZ,GAChCuuG,aAAa,KACd,CACN,CAIDj4D,mBAAmB12B,GACf,MAAO,CACHrG,QAAS,GACT+0F,gBAAgB,EAChBC,aAAa,EAErB,CAIA72D,gBACI,MAAM,YAAE62D,EAAW,QAAEh1F,EAAO,eAAE+0F,GAAoBxuF,KAAKG,MACjDkuF,EAAmBruF,KAAKF,MAAM9X,WAAWA,WAAW0B,OAAOpX,MAC3Do8G,EAAkBj1F,EAAQpZ,QAAOyrG,GAAKA,EAAE10F,cACxCu3F,EAAyBl1F,EAAQpZ,QAAOyrG,GAAwB,cAAnBA,EAAEpiG,OAAOpX,QAG5D,OAFAo8G,EAAgB3uG,MAAK,CAAC6uG,EAAEzZ,IAAOyZ,EAAE52F,MAAQm9E,EAAEn9E,MAAS,EAAMm9E,EAAEn9E,MAAQ42F,EAAE52F,OAAU,EAAI,IAGhF2H,IAAAU,cAAAV,IAAAyc,SAAA,KAC0B,cAArBiyE,GACG1uF,IAAAU,cAAA,OAAKkM,UAAU,wBACX5M,IAAAU,cAACwR,EAAY,CACTC,KAAG,EACHvF,UAAU,gBACV6C,QAAUx8B,IACNotB,KAAKC,SAAS,CAACuuF,gBAAgB,IAC/B57G,EAAEy8B,cAAcC,MAAM,GACtB,kBAKhB3P,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,uBAChBvM,KAAK6rF,oBAAoB,eAAgB6C,EAAiB,6DAAyC,IAExG/uF,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,uBAChBvM,KAAKusF,oBACLvsF,KAAK6rF,oBAAoB,0DAAsD8C,EAAwB,8DAE3GH,GAAkBxuF,KAAK6uF,qBACvBJ,GAAezuF,KAAK8uF,2BAGjC,CAEAjD,oBAAoBkD,EAAmBC,EAAeC,GAAkC,IAAjBC,EAAQn7G,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAC3E,OAAIi7G,EAAch7G,OAEV2rB,IAAAU,cAAA,OAAKkM,UAAU,4BACX5M,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAEmiF,GAC3BpvF,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,sBAAiBsiF,EAAch7G,QAC1C2rB,IAAAU,cAAA,UACK2uF,EAAc78G,KAAK25G,GAAMnsF,IAAAU,cAAC6sF,GAAO,CAACzxG,IAAKqwG,EAAEj5G,GAAIwgB,SAAUy4F,EAAGwB,cAAe4B,EAAU7B,mBAAoBrtF,KAAKF,MAAMutF,yBAM5H1tF,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAEuiF,EACvB,CAEAJ,qBACI,OACIlvF,IAAAU,cAAC2sF,GAAW,CACRxmF,gBAAiBxG,KAAKF,MAAM9X,WAAWA,WAAWnV,GAClD45E,YAAaA,IAAMzsD,KAAKC,SAAS,CAACuuF,gBAAgB,IAClDvB,cAAejtF,KAAKuuF,mBAEhC,CAEAO,2BACI,OACInvF,IAAAU,cAACoc,GAAY,CACTG,YAAY,wBACZjN,QAASA,IAAM3P,KAAKC,SAAS,CAACwuF,aAAa,KAC3C9uF,IAAAU,cAACyQ,EAAU,CAACK,SAAO,GACfxR,IAAAU,cAACwR,EAAY,CAACU,MAAI,EAACnD,QAASA,IAAMpP,KAAKC,SAAS,CAAEwuF,aAAa,KAAU,OAIzF,EC5EJ,MAAMt7G,GAA+B,CACjC,IAAO,MACP,MAAS,QACT,kBAAqB,yBAIzB,MAAMg8G,WAA0BvvF,YAAUC,cAAA,SAAA9rB,WAAA,KAmG1CutD,sBAAwB,CAACtnD,EAAK2C,KACtBqjB,KAAKC,UACD,IAAMhjB,YACFjD,EACZ2C,IACK,CACJ,CArGDw8B,oBACI9kC,SAASqgB,MAAQ,kEAAkDsL,KAAKF,MAAM9X,WAAWpC,MACzFxM,OAAO49C,SAAS,EAAG,EACvB,CAIAo4D,8BACI,IAAItvG,EAAuB,GAC3B,IAAK,IAAI2H,KAAKuY,KAAKF,MAAM9X,WAAWN,WAChC5H,EAAuB,IAAIA,KAAyB2H,EAAE3H,sBAE1D,OAAOA,CACX,CAEAuvG,mBAAmBvvG,GACf,IAAIkX,EAAe,GACnB,IAAK,IAAI6xD,KAAM/oE,EAAsB,CACjC,IAAK9I,YAAW6xE,EAAG7xD,aAAc,QAC7B,SAEJ,IAAIliB,EAAI,EACR,IAAK,IAAIo3E,KAAKrD,EAAG7xD,aACbA,EAAa7Y,KAAK,CACdjI,KAAMg2E,EAAEnzD,mBACRzmB,MAAO,OAAOwC,sBAAiB+zE,EAAGniE,UAAUjT,OAAS,SAASo1E,EAAGliE,aAAalT,OAAS,UAAUo1E,EAAGriE,MAAQ,IAAI1P,UAAU,EAAG,UAC7H2E,IAAK,GAAGotE,EAAGh2E,MAAMiC,MACjBw6G,YAAY,IAEhBt4F,EAAa7Y,KAAK,CACdjI,KAAMg2E,EAAEllE,iBACR1U,MAAO,OAAOwC,eAAe+zE,EAAGniE,UAAUjT,OAAS,SAASo1E,EAAGliE,aAAalT,OAAS,UAAUo1E,EAAGriE,MAAQ,IAAI1P,UAAU,EAAG,WAAWo1E,EAAEj2D,8BAAgC,gEAAoC,KAC5Mxa,IAAI,GAAGotE,EAAGh2E,MAAMiC,MAChBw6G,YAAY,IAEhBx6G,GAER,CACA,OAAOkiB,CACX,CAEAu4F,iBAAiBv4F,GAGb,GAA4B,KAD5BA,EAAejgB,YAAYigB,IACVhjB,OACbgjB,EAAa,GAAW,OAAI,MACzB,CACH,MAAMw4F,EAAYx4F,EAAa,GAAG9gB,KAClC,GAAKs5G,EAAUx7G,OAIR,CACH,IAAIy7G,EAAW,GACf,IAAK,IAAI36G,EAAIkiB,EAAahjB,OAAS,EAAGc,GAAK,EAAGA,IAC1C,GAAIkC,YAAWggB,EAAaliB,GAAGoB,MAAO,CAClCu5G,EAAWz4F,EAAaliB,GAAGoB,KAC3B,KACJ,CAGJ,MAAMw5G,EAAc,IAAI3qG,KACpB9O,YAAoBw5G,IAAW/1C,UAAY,IAAI30D,KAC/C9O,YAAoBu5G,IAAY91C,UAC9Bi2C,EAAqC,KAA3B34F,EAAahjB,OAAS,GACtC,IAAK,IAAIc,EAAI,EAAGA,EAAIkiB,EAAahjB,OAAQc,IAAK,CAC1C,MAAMQ,EAAM0hB,EAAaliB,GACzB,GAAKQ,EAAIY,KAAKlC,OAEP,CACH,MAAM47G,EAAU54F,EAAaliB,EAAI,GACjC,GAAIA,EAAIkiB,EAAahjB,OAAS,GAAsB,OAAjB47G,EAAQ15G,KACvC,GAAIZ,EAAIY,OAAS05G,EAAQ15G,KACrBZ,EAAY,OAAI,EAChBs6G,EAAoB,YAAI,OACrB,GAAKA,EAAQ15G,KAAKlC,OAElB,CACH,MAAMoqC,GAAU,IAAIr5B,KAChB9O,YAAoB25G,EAAQ15G,OAAOwjE,UAAY,IAAI30D,KACnD9O,YAAoBX,EAAIY,OAAOwjE,WAAag2C,EAAcC,EAC9Dr6G,EAAY,OAAI8oC,EAAS,GAAK,GAAMA,EAAS,IAAM,IAAMA,CAC7D,MANI9oC,EAAY,OAlCjB,QA0CCA,EAAY,OA1Cb,EA4CP,MAlBIA,EAAY,OA1BT,EA6CX,CACJ,MAvCI,IAAK,IAAIA,KAAO0hB,EACZ1hB,EAAY,OARL,GAgDf0hB,EAAaA,EAAahjB,OAAS,GAAW,OAAI,CACtD,CACA,OAAOgjB,CACX,CAYAoJ,SACI,MAAM7qB,EAAIyqB,KAAKF,MAAM9X,YACf,WAAEA,GAAezS,GACjB,MAAEuQ,GAAUkC,EACZ6nG,EAAsB7vF,KAAKF,MAAMgwF,aAAkC,UAAnBv6G,EAAEmU,OAAOpX,OAAqB0V,EAAW+nG,+BAAiCx6G,EAAE1C,GAClI,OACI8sB,IAAAU,cAAAV,IAAAyc,SAAA,KACKyzE,GAAuBlwF,IAAAU,cAACgM,EAAI,CAACE,UAAU,gBAAe5M,IAAAU,cAACmP,IAAI,CAACC,KAAK,QAAQ,cAAY,OAAO53B,MAAO,CAAC,YAAe,KAAM,wFAA4EtC,EAAE+gB,kBAAkB,KAC1NqJ,IAAAU,cAACgT,EAAS,CAAC9G,UAAU,mBACjB5M,IAAAU,cAACyQ,EAAU,CAACQ,OAAK,EAACnD,WAAS,EAACuD,QAAM,GAC9B/R,IAAAU,cAAA,WAASkM,UAAU,qDACdv1B,YAAWgR,EAAWnC,SAAU,SAC7B8Z,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,uCACjB0V,EAAWnC,SAAS1T,KAAI+J,GAAKyjB,IAAAU,cAACgM,EAAI,CAAC5wB,IAAKS,EAAErJ,IAAKqJ,EAAEsgE,UAAU,MAAItgE,EAAEzI,YAGvEqS,GACC6Z,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,qCAClBqtB,IAAAU,cAACgM,EAAI,KAAEvmB,EAAM02D,UAAW12D,EAAMrS,MAAMO,OAAS,EAAI,MAAM8R,EAAMrS,QAAU,KAG9EuD,YAAWzB,EAAEwlB,0BACV4E,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,yCAClBqtB,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAah3B,EAAEwlB,0BAGtC/jB,YAAWzB,EAAEolB,qBACVgF,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,wBAClBqtB,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAah3B,EAAEolB,qBAGtC3jB,YAAWzB,EAAE6lB,WAAY,SACtBuE,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,wBAEjBiD,EAAE6lB,WAAWjpB,KAAIg3E,GAAUnpD,KAAKgwF,aAAa7mC,OAI1DxpD,IAAAU,cAAA,SAAOkM,UAAU,sDACb5M,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,gDAClBqtB,IAAAU,cAACgM,EAAI,MAAuC,IAArC92B,EAAEsgB,+BAA0C,MAAQ,QAG9DmK,KAAKiwF,oCACLj5G,YAAWzB,EAAEwQ,gBAAiB,SAAWia,KAAK03C,2BAI1D13C,KAAKowD,mBACLpwD,KAAKkwF,sBACJloG,EAAWoP,aAAepP,EAAWwI,UACnCmP,IAAAU,cAACqhB,GAAc1hB,KAAKF,MAAMiiD,WAI1C,CAEAiuC,aAAa7mC,GACT,MAAMnhE,EAAagY,KAAKF,MAAM9X,WAC9B,IAAImoG,GAAgBnoG,EAAWA,WAAWooG,2BAA6B,IAAI9xG,QAAQ6qE,EAAOt2E,IACtFs9G,GAAgB,EAChBA,IAEAA,EAAe,GAEnB,IAAI79G,EAAQ62E,EAAOt2E,KAAOmV,EAAWnV,GACjCmtB,KAAKF,MAAMuwF,UAAY,4BAA8B,wCAA8BlnC,EAAO7yD,oBAC1F,UAAU65F,WAAsBhnC,EAAO7yD,oBAC3C,OAAO0J,KAAKswF,2BAA2BnnC,EAAQ72E,EACnD,CAEAg+G,2BAA2BnnC,EAAQ72E,GAC/B,OACIqtB,IAAAU,cAAC+b,WAAQ,CAAC3gC,IAAK0tE,EAAOt2E,IAClB8sB,IAAAU,cAACgN,IAAU,CAACP,IAAI,KAAKC,IAAI,SAASR,UAAU,wBAAuB,+BAAwBj6B,GAC3FqtB,IAAAU,cAAA,MAAIkM,UAAU,sBACT48C,EAAO/tD,WAAWjpB,KAAI,CAACsV,EAAG3S,IACnB2S,EAAEhU,MAAMO,QAAU2H,OAAOS,KAAKqL,EAAEoR,MAAM7kB,OAElC2rB,IAAAU,cAAA,MAAI5kB,IAAKgM,EAAE5U,GAAI05B,UAAU,2CACrB5M,IAAAU,cAACgM,EAAI,CAAC5wB,IAAKgM,EAAE5U,IACRiC,EAAI,EAAE,KAAG2S,EAAEhU,OAAS,gCACpBgU,EAAEoR,MAAQpR,EAAEoR,KAAK8pC,IAAI3uD,OAAS,GAAK2rB,IAAAU,cAACwR,EAAY,CAACtF,UAAU,mBAAmB6C,QAAU8N,GAAOld,KAAKshC,sBAAsB75C,EAAEoR,KAAK8pC,IAAKl7C,EAAEoR,KAAKplB,QAAQ,aAIvJ,QAKnC,CAEAw8G,oCACI,IAAKjwF,KAAKF,MAAM9X,WAAWmO,4BACvB,OAAO,KAEX,MAAMo6F,EAAevwF,KAAKF,MAAM9X,WAAWmO,6BAA+B,CAAC,EACrE3V,EAAQ+vG,EAAa/vG,OAAS,CAAC,EACrC,OACImf,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,sCAClBqtB,IAAAU,cAACgM,EAAI,KAAEkkF,EAAa98G,OACpBksB,IAAAU,cAACgM,EAAI,KAAE7rB,EAAM+Z,MAAM,IAAE/Z,EAAMyX,WAC3B0H,IAAAU,cAACgM,EAAI,KAAE7rB,EAAM6J,YAAY,IAAE7J,EAAMoX,aACd,WAAlBpX,EAAM0N,SACHyR,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,KAAC,oBAAkB7rB,EAAMuW,OAC9B4I,IAAAU,cAACgM,EAAI,KAAC,WAAS7rB,EAAM2Y,QACrBwG,IAAAU,cAACgM,EAAI,KAAC,SAAO7rB,EAAMoa,cAGX,WAAfpa,EAAMjE,MACHojB,IAAAU,cAACgM,EAAI,KAAE7rB,EAAMjE,MAEjBojB,IAAAU,cAACgM,EAAI,KAAEl5B,GAA6Bo9G,EAAanwG,4BAA4B,KAAGmwG,EAAarmG,sBAGzG,CAEAwtD,wBACI,OACI/3C,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,qBACjB0tB,KAAKF,MAAM9X,WAAWjC,gBAAgB5T,KAAIojB,GAEnCoK,IAAAU,cAAA,OAAK5kB,IAAK8Z,EAAM1iB,GAAI05B,UAAU,oBAC1B5M,IAAAU,cAACgM,EAAI,KAAE1pB,YAAgB4S,IACvBoK,IAAAU,cAACgM,EAAI,KAAC,SAAO9W,EAAMyE,eAAiB,KACpC2F,IAAAU,cAACgM,EAAI,KAAC,WAAS9W,EAAM9G,UAM7C,CAEA2hE,mBACI,MAAM76E,EAAIyqB,KAAKF,MAAM9X,WAErB,IAAKhR,YAAWzB,EAAEmS,YACd,OACIiY,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,kCAC1BjN,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,wDAM5B,IAAI0oG,EAAkB,KAElBj7G,EAAEmS,WAAW1T,OAAS,IACtBw8G,EACI7wF,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAACgM,EAAI,CAACE,UAAU,SAAQ,oBACvBh3B,EAAEmS,WAAWvV,KAAI,CAACsV,EAAG3S,IAClB6qB,IAAAU,cAAA,UAAQ5kB,IAAKgM,EAAE5U,GAAIu8B,QAASA,IAAMh2B,OAAO49C,SAAS,EAAGy5D,EAAK37G,GAAGuC,QAAQq5G,WAAYnkF,UAAU,qCAAoC5M,IAAAU,cAAA,QAAMkM,UAAU,WAAU,sCAA0B,wBAAOz3B,EAAI,EAAGkC,YAAWyQ,EAAE7B,QAAU,KAAK6B,EAAE7B,aAM/O,MAAM6qG,EAAOl7G,EAAEmS,WAAWvV,KAAIsV,GAAKkY,IAAMuc,cAEzC,OACIvc,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,kCACzB4jF,EACD7wF,IAAAU,cAAA,UACK9qB,EAAEmS,WAAWvV,KAAI,CAACsV,EAAG3S,IAClB6qB,IAAAU,cAAA,MAAI5kB,IAAKgM,EAAE5U,GAAI4lC,IAAKg4E,EAAK37G,GAAIy3B,UAAU,sBACnC5M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACuD,QAAM,EAACH,SAAO,EAACF,OAAK,GACtC1R,IAAAU,cAAA,WAASkM,UAAU,4BACf5M,IAAAU,cAACgM,EAAI,CAACO,YAAU,EAACE,IAAI,MAAK,wBAAOh4B,EAAI,GACpCkC,YAAWyQ,EAAE7B,QAAU+Z,IAAAU,cAACgN,IAAU,CAACN,IAAI,YAAYD,IAAI,MAAMrlB,EAAE7B,QAEpE+Z,IAAAU,cAAA,WAASkM,UAAU,4BACdv1B,YAAWyQ,EAAEY,oBACVsX,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,eAClBqtB,IAAAU,cAACgN,IAAU,CAACN,IAAI,aAAatlB,EAAEY,kBAAkBlS,QAAQ,IAAK,KAAK,SAG3EwpB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,sCAClBqtB,IAAAU,cAACgM,EAAI,MAAsB,IAApB5kB,EAAEuO,cAAyB,MAAQ,UAIrDgK,KAAK2wF,2BAA2BlpG,EAAE3H,sBAClCkgB,KAAK4wF,oBAAoBnpG,EAAEnB,mBAMpD,CAEAqqG,2BAA2B7wG,GACvB,OAAI9I,YAAW8I,EAAsB,QAE7B6f,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKR,cAAY,GAAC,4BAC5B3M,IAAAU,cAAA,UACKvgB,EAAqB3N,KAAK02E,GAAO7oD,KAAKuuD,0BAA0B1F,OAM7ElpD,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKR,cAAY,GAAC,4BAC5B3M,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,oDAGxB,CAEAymE,0BAA0B9lE,GACtB,OAAOkX,IAAAU,cAACyN,EAAG,CACCK,WAAS,EACT1yB,IAAKgN,EAAoB5V,GACzBu7B,UAAU,KACVtB,IAAI,KACJ4B,kBAAmBjmB,EAAoB/B,UAAUjT,OAAS,IAC1D86B,SAAU9lB,EAAoB9B,aAAalT,OAAS,KAEnDuD,YAAWyR,EAAoBjC,OAC5BmZ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAa9jB,EAAoBjC,OAGxDxP,YAAWyR,EAAoB8P,iBAC5BoH,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,mBAClBqtB,IAAAU,cAACgM,EAAI,KAAE5jB,EAAoB8P,iBAGlCvhB,YAAWyR,EAAoB7B,QAAS,SAAWoZ,KAAK6wF,cAAcpoG,EAAoB7B,SAC1F5P,YAAWyR,EAAoB5B,kBAAmB,SAAWmZ,KAAK8wF,wBAAwBroG,EAAoB5B,mBAC9G7P,YAAWyR,EAAoBuO,aAAc,SAAWgJ,KAAK42D,kBAAkBnuE,EAAoBuO,cACnGhgB,YAAWyR,EAAoBiS,eAAgB,SAAWsF,KAAK+wF,0BAAqBtoG,EAAoBiS,gBAEzH,CAEAm2F,cAAcjqG,GACV,OACI+Y,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,YACjBsU,EAAQzU,KAAI8gF,GAAQtzD,IAAAU,cAACgM,EAAI,CAAC5wB,IAAKw3E,EAAKpgF,IAAKogF,EAAK37D,IAAI,IAAE27D,EAAKx/E,SAGtE,CAEAq9G,wBAAwBjqG,GACpB,OACI8Y,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,sBACjBuU,EAAkB1U,KAAIqiF,IACnB,IAAItnE,EAAU,KAgCd,OA/BIsnE,EAAGj4E,MAAQi4E,EAAG55D,aAAe45D,EAAGr7D,QAAUq7D,EAAGz9D,OAASy9D,EAAG58D,eACzD1K,EACIyS,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAAC5B,UAAU,qBAC3Bv1B,YAAWw9E,EAAGj4E,OACXojB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACgM,EAAI,KAAEmoD,EAAGj4E,OAGjBvF,YAAWw9E,EAAG55D,cACX+E,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,kBAClBqtB,IAAAU,cAACgM,EAAI,KAAEmoD,EAAG55D,cAGjB5jB,YAAWw9E,EAAGr7D,SACXwG,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,UAClBqtB,IAAAU,cAACgM,EAAI,KAAEmoD,EAAGr7D,QAAU,MAG3BniB,YAAWw9E,EAAGz9D,QACX4I,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,SAClBqtB,IAAAU,cAACgM,EAAI,KAAEmoD,EAAGz9D,OAAS,MAG1B/f,YAAWw9E,EAAG58D,cACX+H,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,yBAClBqtB,IAAAU,cAACgM,EAAI,KAAEmoD,EAAG58D,aAAe,QAOzC+H,IAAAU,cAAA,OAAK5kB,IAAK+4E,EAAG3hF,IACT8sB,IAAAU,cAACyQ,EAAU,CAACG,gBAAc,EAAC1E,UAAU,qBACjC5M,IAAAU,cAACgM,EAAI,KAAEmoD,EAAGrtE,IAAI1T,QAEjByZ,EACC,IAK1B,CAEA0pE,kBAAkB5/D,GACd,IAAIliB,EAAI,EACR,OACI6qB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKR,cAAY,GAAC,eAC5B3M,IAAAU,cAAA,UACKrJ,EAAa7kB,KAAK+5E,IACfp3E,IAEI6qB,IAAAU,cAAA,MAAI5kB,IAAKywE,EAAEr5E,GAAI05B,UAAU,oBACrB5M,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,QAAM53B,GACjB6qB,IAAAU,cAACyQ,EAAU,KACN95B,YAAWk1E,EAAEnzD,qBACV4G,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,4BAClBqtB,IAAAU,cAACgM,EAAI,KAAE6/C,EAAEnzD,qBAGhB/hB,YAAWk1E,EAAEllE,mBACV2Y,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,qBAClBqtB,IAAAU,cAACgM,EAAI,KAAE6/C,EAAEllE,mBAGjB2Y,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,kEAClBqtB,IAAAU,cAACgM,EAAI,MAAsC,IAApC6/C,EAAEj2D,8BAAyC,MAAQ,SAGjEjf,YAAWk1E,EAAE1lE,OACVmZ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAa2/C,EAAE1lE,YASnE,CAEAuqG,4BAAqBr2F,GACjB,OACIiF,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKR,cAAY,GAAC,kDAC3B5R,EAAevoB,KAAKkmF,GACjB14D,IAAAU,cAAA,OAAK5kB,IAAK48E,EAAGxlF,GAAI05B,UAAU,oBACR,OAAd8rD,EAAGlxE,IAAItU,IACJ8sB,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,OAClBqtB,IAAAU,cAACgM,EAAI,KAAEgsD,EAAGlxE,IAAI1T,QAGrBuD,YAAWqhF,EAAG7xE,OACXmZ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAa8rD,EAAG7xE,UAO5D,CAEAoqG,oBAAoBtqG,GAChB,OAAKtP,YAAWsP,EAAe,QAS3BqZ,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKR,cAAY,GAAC,kBAC5B3M,IAAAU,cAACyQ,EAAU,CAAChE,IAAI,MACXxmB,EAAcnU,KAAKq8E,GAChB7uD,IAAAU,cAACyN,EAAG,CAACryB,IAAK+yE,EAAG37E,GAAIi6B,IAAI,MACjBnN,IAAAU,cAACgM,EAAI,CAAC/5B,OAAK,GAAC,wBACZqtB,IAAAU,cAACgM,EAAI,MAA4B,IAA1BmiD,EAAG14D,mBAA8B,MAAQ,OAC/C9e,YAAWw3E,EAAGhoE,OACXmZ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,QAClBqtB,IAAAU,cAACgM,EAAI,CAACE,UAAU,aAAaiiD,EAAGhoE,YAhBpDmZ,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKR,cAAY,GAAC,kBAC5B3M,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAC,0CAsB5B,CAEAooG,qBACI,OACIvwF,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,gBAC1BjN,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKR,cAAY,GAAC,iEAC3BtM,KAAKgxF,+BAENrxF,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKR,cAAY,GAAC,yDAC3BtM,KAAKixF,yCAGlB,CAEAD,+BACI,MAAMz7G,EAAIyqB,KAAKF,MAAM9X,WACfY,EAAc,CAChB,CACI1S,KAAMX,EAAE+gB,mBAAqB,GAC7BhkB,MAAO,qBACPmJ,IAAK,GAAGlG,EAAE1C,uBACVy8G,YAAY,GAEhB,CACIp5G,KAAMX,EAAE0kB,aAAe,GACvB3nB,MAAO,8BACPmJ,IAAK,GAAGlG,EAAE1C,iBACVy8G,YAAY,GAEhB,CACIp5G,KAAMX,EAAEqjB,gCAAkC,GAC1Cs4F,eAAiBt6G,YAAsBrB,EAAEqjB,gCACzCtmB,MAAO,oCACPmJ,IAAK,GAAGlG,EAAE1C,oCACVy8G,YAAY,IAGpB,OAAOtvF,KAAKmxF,gBAAgBvoG,EAChC,CAEAqoG,yCACI,MAAMnxG,EAAuBkgB,KAAKovF,8BAClC,IAAKtvG,EAAqB9L,OACtB,OAAOgsB,KAAKoxF,gBAAgB,qDAGhC,MAAMC,EAA0BrxF,KAAKqvF,mBAAmBvvG,GACxD,OAAKuxG,EAAwBr9G,QAI7Bq9G,EAAwBtxG,MAAK,CAACuxG,EAAIC,IACP,IAAnBD,EAAGp7G,KAAKlC,OAAsB,EACX,IAAnBu9G,EAAGr7G,KAAKlC,QACLs9G,EAAGp7G,KAAOq7G,EAAGr7G,MADe,EACH,IAG7B8pB,KAAKmxF,gBAAgBE,IATjBrxF,KAAKoxF,gBAAgB,kEAUpC,CAEAD,gBAAgBn6F,GAEZ,OADAgJ,KAAKuvF,iBAAiBv4F,GACfA,EAAa7kB,KAAK+5E,GACrBvsD,IAAAU,cAAA,OAAK5kB,IAAKywE,EAAEzwE,IAAK8wB,UAAU,aACvB5M,IAAAU,cAACyQ,EAAU,CAACY,QAAM,GACd/R,IAAAU,cAAA,OAAKkM,UAAU,mBACX5M,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAM,CAAEA,KAAMy8C,EAAEojC,YAAc,iBAE3D3vF,IAAAU,cAACgM,EAAI,CAACE,UAAU,mBAAmB2/C,EAAEglC,gBAAkBhlC,EAAEh2E,MAAQ,aAAa,MAAIg2E,EAAE55E,QAExFqtB,IAAAU,cAAA,OAAKkM,UAAU,4BAA4B10B,MAAO,CAACumC,OAAQ,GAAG8tC,EAAE9tC,gBAG5E,CAEAgzE,gBAAgBt3G,GACZ,OAAO6lB,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,GAAEhO,EACxB,ECnlBJ,MAAM03G,WAAsBrC,GAIxBh2E,oBAEI,CAKJ/Y,SACI,MAAM,mBACF8yB,EAAkB,WAClBy9C,EAAU,mBACVD,EAAkB,sBAClBb,EAAqB,kBACrBmB,EAAiB,WACjBD,GACAnB,GAEEr6F,EAAIyqB,KAAKF,MAAM9X,WACflC,EAAQvQ,EAAEyS,WAAWlC,MACrB4O,EAAQ,GAAGlf,SAASwqB,KAAKF,MAAMw8D,mBAAqB9mF,SAASD,EAAEmU,OAAO7W,IAAM,mCAAgC,KAAK0C,EAAEqQ,QACnHiqG,EAAsB7vF,KAAKF,MAAMgwF,aAAkC,UAAnBv6G,EAAEmU,OAAOpX,OAAqBiD,EAAEyS,WAAW+nG,+BAAiCx6G,EAAE1C,GACpI,OACI8sB,IAAAU,cAAC6wE,KAAQ,CACLx8E,MAAOA,EACPgqE,QAAQ,0EACR/+D,IAAAU,cAAC8wE,KAAI,CAAC/gE,KAAK,KAAKv4B,MAAOg4F,EAAuBuB,MAAI,GAC9CzxE,IAAAU,cAAC4yB,GAAS,CAACv+B,MAAOA,IAEjBm7F,GAAuBlwF,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,wFAA4Ep7F,EAAE+gB,kBAAkB,KACjJqJ,IAAAU,cAACgM,KAAI,CAACx0B,MAAOm5F,GAAmB,mBAChCrxE,IAAAU,cAACgzB,KAAI,CAACx7C,MAAOq7C,GACRl8C,YAAWzB,EAAEyS,WAAWgQ,QACrB2H,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,SACzBhxE,IAAAU,cAACgM,KAAI,KAAE92B,EAAEyS,WAAWgQ,QAG5B2H,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,MACzBhxE,IAAAU,cAACgM,KAAI,KAAE92B,EAAEyS,WAAWnV,MAG3BmE,YAAWzB,EAAEyS,WAAWnC,SAAU,SAC/B8Z,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,uCACxBp7F,EAAEyS,WAAWnC,SAAS1T,KAAI+J,GAAKyjB,IAAAU,cAACgM,KAAI,CAAC5wB,IAAKS,EAAErJ,IAAKqJ,EAAEsgE,UAAU,MAAItgE,EAAEzI,YAGzEqS,GACA6Z,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACR/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,qCACzBhxE,IAAAU,cAACgM,KAAI,KAAEvmB,EAAM02D,UAAW12D,EAAMrS,MAAMO,OAAS,EAAI,MAAM8R,EAAMrS,QAAU,KAG9EuD,YAAWzB,EAAEqQ,QACV+Z,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,cACxBhzF,YAAgBpI,EAAEqQ,OAAOzT,KAAI,CAAC2L,EAAMhJ,IAAM6qB,IAAAU,cAACgM,KAAI,CAAC5wB,IAAK3G,EAAG+C,MAAOk5F,GAAajzF,MAGpF9G,YAAWzB,EAAEwlB,0BACV4E,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,yCACxBhzF,YAAgBpI,EAAEwlB,yBAAyB5oB,KAAI,CAAC2L,EAAMhJ,IAAM6qB,IAAAU,cAACgM,KAAI,CAAC5wB,IAAK3G,GAAIgJ,MAGnF9G,YAAWzB,EAAEolB,qBACVgF,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,wBACxBhzF,YAAgBpI,EAAEolB,oBAAoBxoB,KAAI,CAAC2L,EAAMhJ,IAAM6qB,IAAAU,cAACgM,KAAI,CAAC5wB,IAAK3G,GAAIgJ,MAG9E9G,YAAWzB,EAAE6lB,WAAY,SACtBuE,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,wBAExBp7F,EAAE6lB,WAAWjpB,KAAIg3E,GAAUnpD,KAAKgwF,aAAa7mC,MAGtDxpD,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,gDACzBhxE,IAAAU,cAACgM,KAAI,MAAuC,IAArC92B,EAAEsgB,+BAA0C,MAAQ,QAE/D8J,IAAAU,cAACgzB,KAAI,CAACx7C,MAAOq7C,GACRlzB,KAAKyxF,qBAAqBl8G,IAE/BoqB,IAAAU,cAACgzB,KAAI,CAACx7C,MAAOq7C,GACRl8C,YAAWzB,EAAE0kB,cACV0F,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,+BACzBhxE,IAAAU,cAACgM,KAAI,KAAE92B,EAAE0kB,cAGhBjjB,YAAWzB,EAAEqjB,iCACV+G,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,qCACzBhxE,IAAAU,cAACgM,KAAI,KAAEz1B,YAAsBrB,EAAEqjB,mCAI1CoH,KAAKiwF,oCACLj5G,YAAWzB,EAAEwQ,gBAAiB,SAAWia,KAAK03C,wBAC/C/3C,IAAAU,cAACgM,KAAI,CAACx0B,MAAOm5F,GAAmB,kCAC/BhxE,KAAKowD,mBACNzwD,IAAAU,cAACgM,KAAI,CAACx0B,MAAOm5F,GAAmB,gBAC/BhxE,KAAKkwF,sBAItB,CAEAI,2BAA2BnnC,EAAQ72E,GAC/B,OACIqtB,IAAAU,cAACgzB,KAAI,CAAC53C,IAAK0tE,EAAOt2E,IACd8sB,IAAAU,cAACgM,KAAI,KAAC,+BAAwB/5B,GAC7B62E,EAAO/tD,WAAWjpB,KAAI,CAACsV,EAAG3S,IACnB2S,EAAEhU,MAAMO,QAAW2H,OAAOS,KAAKqL,EAAEoR,MAAM7kB,OAChC2rB,IAAAU,cAACgM,KAAI,CAAC5wB,IAAKgM,EAAE5U,IAAKiC,EAAI,EAAE,KAAG2S,EAAEhU,OAAS,iCAClC,OAI/B,CAEAg+G,qBAAqBzpG,GACjB,GAAIgY,KAAKF,MAAMuwF,UAAa,OAAO,KACnC,MAAM,WACF1f,EAAU,mBACVD,GACAd,GACJ,OAAI5vE,KAAKF,MAAMgwF,aAAe94G,YAAWgR,EAAWsO,mBAE5CqJ,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,6BACzBhxE,IAAAU,cAACgM,KAAI,KAAErkB,EAAWsO,oBAK1BqJ,IAAAU,cAAAV,IAAAyc,SAAA,KACKplC,YAAWgR,EAAWA,WAAWsO,oBAC9BqJ,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,sCACzBhxE,IAAAU,cAACgM,KAAI,KAAErkB,EAAWA,WAAWsO,oBAGpCtf,YAAWgR,EAAWsO,oBACnBqJ,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,yBACzBhxE,IAAAU,cAACgM,KAAI,KAAErkB,EAAWsO,oBAKtC,CAEA25F,oCACI,IAAKjwF,KAAKF,MAAM9X,WAAWmO,4BACvB,OAAO,KAEX,MAAM,qBACF85E,EAAoB,YACpBD,EAAW,WACXW,EAAU,mBACVD,GACAd,GAEE2gB,EAAevwF,KAAKF,MAAM9X,WAAWmO,6BAA+B,CAAC,EACrE3V,EAAQ+vG,EAAa/vG,OAAS,CAAC,EACrC,OACImf,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,EAAoBU,MAAM,GACnCzxE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,sCACzBhxE,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO,CAACo4F,EAAsBD,IAChCrwE,IAAAU,cAACgM,KAAI,KAAEkkF,EAAa98G,OACpBksB,IAAAU,cAACgM,KAAI,KAAE7rB,EAAM+Z,MAAM,IAAE/Z,EAAMyX,WAC3B0H,IAAAU,cAACgM,KAAI,KAAE7rB,EAAM6J,YAAY,IAAE7J,EAAMoX,aACd,WAAlBpX,EAAM0N,SACHyR,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,KAAI,KAAC,oBAAkB7rB,EAAMuW,OAC9B4I,IAAAU,cAACgM,KAAI,KAAC,WAAS7rB,EAAM2Y,QACrBwG,IAAAU,cAACgM,KAAI,KAAC,SAAO7rB,EAAMoa,cAIX,WAAfpa,EAAMjE,MACHojB,IAAAU,cAACgM,KAAI,KAAE7rB,EAAMjE,MAEjBojB,IAAAU,cAACgM,KAAI,KAAEl5B,GAA6Bo9G,EAAanwG,4BAA4B,KAAGmwG,EAAarmG,uBAI7G,CAEAwtD,wBACI,MAAM,qBACFu4B,EAAoB,mBACpB/8C,EAAkB,YAClB88C,EAAW,WACXW,EAAU,mBACVD,GACAd,GAEJ,OACIjwE,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,EAAoBU,MAAM,GACnCzxE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,qBACzBhxE,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO,CAACq7C,EAAoB,CAAC68C,SAAU,UACxC/vE,KAAKF,MAAM9X,WAAWjC,gBAAgB5T,KAAIojB,GAEnCoK,IAAAU,cAACgzB,KAAI,CAAC53C,IAAK8Z,EAAM1iB,GAAIgF,MAAO,CAACo4F,EAAsBD,IAC/CrwE,IAAAU,cAACgM,KAAI,KAAE9W,EAAM1S,KAAK,IAAE0S,EAAMxS,UAC1B4c,IAAAU,cAACgM,KAAI,KAAC,SAAO9W,EAAMyE,eAAiB,KACpC2F,IAAAU,cAACgM,KAAI,KAAC,WAAS9W,EAAM9G,WAOjD,CAEA2hE,mBACI,MAAM76E,EAAIyqB,KAAKF,MAAM9X,WACrB,IAAKhR,YAAWzB,EAAEmS,YAAa,CAC3B,MAAM,cACF0rC,EAAa,WACb09C,GACAlB,GACJ,OACIjwE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO,CAACu7C,EAAe09C,IAAa,qDAElD,CACA,MAAM,WACFH,EAAU,kBACVK,EAAiB,mBACjBN,EAAkB,WAClBK,GACAnB,GAEJ,OACIjwE,IAAAU,cAACgzB,KAAI,KACA99C,EAAEmS,WAAWvV,KAAI,CAACsV,EAAG3S,IAClB6qB,IAAAU,cAACgzB,KAAI,CAAC53C,IAAKgM,EAAE5U,IACT8sB,IAAAU,cAACgM,KAAI,CAACx0B,MAAOm5F,GAAmB,yBAAQl8F,EAAI,GAC3CkC,YAAWyQ,EAAE7B,QACV+Z,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,+BAAc77F,EAAI,GAC3C6qB,IAAAU,cAACgM,KAAI,CAACx0B,MAAOk5F,GAAatpF,EAAE7B,QAGnC5O,YAAWyQ,EAAEY,oBACVsX,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,gCAAe77F,EAAI,GAC5C6qB,IAAAU,cAACgM,KAAI,CAACx0B,MAAOk5F,GAAatpF,EAAEY,kBAAkBlS,QAAQ,IAAK,KAAK,SAGxEwpB,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,sCACzBhxE,IAAAU,cAACgM,KAAI,MAAsB,IAApB5kB,EAAEuO,cAAyB,MAAQ,QAE9C2J,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,gDAAiC77F,EAAI,GAC7DkrB,KAAK2wF,2BAA2BlpG,EAAE3H,uBAEvC6f,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,sCAA0B77F,EAAI,GACtDkrB,KAAK4wF,oBAAoBnpG,EAAEnB,mBAMpD,CAEAqqG,2BAA2B7wG,GACtB,GAAI9I,YAAW8I,EAAsB,QAClC,OAAOA,EAAqB3N,KAAK02E,GAAO7oD,KAAKuuD,0BAA0B1F,KAE3E,MAAM,WACFioB,EAAU,cACV19C,GACAw8C,GACJ,OACIjwE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO,CAACu7C,EAAe09C,IAAa,mDAElD,CAEAviB,0BAA0B9lE,GACtB,MAAM,qBACFwnF,EAAoB,WACpBU,EAAU,eACVH,EAAc,mBACdE,GACAd,GAEJ,OACIjwE,IAAAU,cAACgzB,KAAI,CAAC53C,IAAKgN,EAAoB5V,GAAIgF,MAAOo4F,GACtCtwE,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO24F,GACT7wE,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,OACzBhxE,IAAAU,cAACgM,KAAI,KAAE5jB,EAAoB/B,UAAUjT,OAAS,MAElDksB,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,gBACzBhxE,IAAAU,cAACgM,KAAI,KAAE5jB,EAAoB9B,aAAalT,OAAS,OAGzDksB,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACR15F,YAAWyR,EAAoBjC,OAC5BmZ,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,QACxBhzF,YAAgB8K,EAAoBjC,MAAMrU,KAAI,CAAC2L,EAAMhJ,IAAM6qB,IAAAU,cAACgM,KAAI,CAAC5wB,IAAK3G,GAAIgJ,OAIvF6hB,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACR15F,YAAWyR,EAAoB8P,iBAC5BoH,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,mBACzBhxE,IAAAU,cAACgM,KAAI,KAAE5jB,EAAoB8P,kBAItCvhB,YAAWyR,EAAoB7B,QAAS,SAAWoZ,KAAK6wF,cAAcpoG,EAAoB7B,SAC1F5P,YAAWyR,EAAoB5B,kBAAmB,SAAWmZ,KAAK8wF,wBAAwBroG,EAAoB5B,mBAC9G7P,YAAWyR,EAAoBuO,aAAc,SAAWgJ,KAAK42D,kBAAkBnuE,EAAoBuO,cACnGhgB,YAAWyR,EAAoBiS,eAAgB,SAAWsF,KAAK+wF,0BAAqBtoG,EAAoBiS,gBAGrH,CAEAm2F,cAAcjqG,GACV,MAAM,WACF+pF,EAAU,mBACVD,GACAd,GAEJ,OACIjwE,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,YACxB/pF,EAAQzU,KAAI8gF,GAAStzD,IAAAU,cAACgM,KAAI,CAAC5wB,IAAKw3E,EAAKpgF,IAAKogF,EAAK37D,IAAI,IAAE27D,EAAKx/E,SAGvE,CAEAq9G,wBAAwBjqG,GACpB,MAAM,mBACFqsC,EAAkB,WAClBy9C,EAAU,mBACVD,GACAd,GAEJ,OACIjwE,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,sBACxB9pF,EAAkB1U,KAAIqiF,IACnB,IAAItnE,EAAU,KAqCd,OApCIsnE,EAAGj4E,MAAQi4E,EAAG55D,aAAe45D,EAAGr7D,QAAUq7D,EAAGz9D,OAASy9D,EAAG58D,eACzD1K,EACIyS,IAAAU,cAACgzB,KAAI,CAACx7C,MAAOq7C,GACRl8C,YAAWw9E,EAAGj4E,OACXojB,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,QACzBhxE,IAAAU,cAACgM,KAAI,KAAEmoD,EAAGj4E,OAGjBvF,YAAWw9E,EAAG55D,cACX+E,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,kBACzBhxE,IAAAU,cAACgM,KAAI,KAAEmoD,EAAG55D,cAGjB5jB,YAAWw9E,EAAGr7D,SACXwG,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,UACzBhxE,IAAAU,cAACgM,KAAI,KAAEmoD,EAAGr7D,QAAU,MAG3BniB,YAAWw9E,EAAGz9D,QACX4I,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,SACzBhxE,IAAAU,cAACgM,KAAI,KAAEmoD,EAAGz9D,OAAS,MAG1B/f,YAAWw9E,EAAG58D,cACX+H,IAAAU,cAACgzB,KAAI,KACD1zB,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,yBACzBhxE,IAAAU,cAACgM,KAAI,KAAEmoD,EAAG58D,aAAe,QAOzC+H,IAAAU,cAACgzB,KAAI,CAAC53C,IAAK+4E,EAAG3hF,IACV8sB,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAanc,EAAGrtE,IAAI1T,OAChCyZ,EACE,IAK3B,CAEA0pE,kBAAkB5/D,GACd,MAAM,6BACFu5E,EAA4B,mBAC5Br9C,EAAkB,WAClBy9C,EAAU,mBACVD,GACAd,GAEJ,IAAI96F,EAAI,EACR,OACI6qB,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,eACxB35E,EAAa7kB,KAAK+5E,IACfp3E,IAEI6qB,IAAAU,cAACgzB,KAAI,CAAC53C,IAAKywE,EAAEr5E,GAAIgF,MAAO04F,GACpB5wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,QAAM77F,GAC/B6qB,IAAAU,cAACgzB,KAAI,CAACx7C,MAAOq7C,GACRl8C,YAAWk1E,EAAEnzD,qBACV4G,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,4BACzBhxE,IAAAU,cAACgM,KAAI,KAAE6/C,EAAEnzD,qBAGhB/hB,YAAWk1E,EAAEllE,mBACV2Y,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,qBACzBhxE,IAAAU,cAACgM,KAAI,KAAE6/C,EAAEllE,oBAIpBhQ,YAAWk1E,EAAE1lE,OACVmZ,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,QACxBhzF,YAAgBuuE,EAAE1lE,MAAMrU,KAAI,CAAC2L,EAAMhJ,IAAM6qB,IAAAU,cAACgM,KAAI,CAAC5wB,IAAK3G,GAAIgJ,MAGjE6hB,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,kEACzBhxE,IAAAU,cAACgM,KAAI,MAAsC,IAApC6/C,EAAEj2D,8BAAyC,MAAQ,YAOtF,CAEA86F,4BAAqBr2F,GACjB,MAAM,WACFi2E,EAAU,mBACVD,GACAd,GAEJ,OACIjwE,IAAAU,cAACgzB,KAAI,KACD1zB,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,kDACxBj2E,EAAevoB,KAAKkmF,GACjB14D,IAAAU,cAACgzB,KAAI,CAAC53C,IAAK48E,EAAGxlF,IACK,OAAdwlF,EAAGlxE,IAAItU,IACJ8sB,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,OACzBhxE,IAAAU,cAACgM,KAAI,KAAEgsD,EAAGlxE,IAAI1T,QAGrBuD,YAAWqhF,EAAG7xE,OACXmZ,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,QACxBhzF,YAAgB06E,EAAG7xE,MAAMrU,KAAI,CAAC2L,EAAMhJ,IAAM6qB,IAAAU,cAACgM,KAAI,CAAC5wB,IAAK3G,GAAIgJ,SAOtF,CAEA8yG,oBAAoBtqG,GAChB,IAAKtP,YAAWsP,EAAe,QAAS,CACpC,MAAM,WACFwqF,EAAU,cACV19C,GACAw8C,GACJ,OACIjwE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO,CAACu7C,EAAe09C,IAAa,yCAElD,CACA,MAAM,6BACFP,EAA4B,WAC5BI,EAAU,mBACVD,GACAd,GACJ,OACIjwE,IAAAU,cAAAV,IAAAyc,SAAA,KACK91B,EAAcnU,KAAKq8E,GAChB7uD,IAAAU,cAACgzB,KAAI,CAAC53C,IAAK+yE,EAAG37E,GAAIgF,MAAO04F,GACrB5wE,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,yBACzBhxE,IAAAU,cAACgM,KAAI,MAA4B,IAA1BmiD,EAAG14D,mBAA8B,MAAQ,QAEnD9e,YAAWw3E,EAAGhoE,OACXmZ,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,QACxBhzF,YAAgB6wE,EAAGhoE,MAAMrU,KAAI,CAAC2L,EAAMhJ,IAAM6qB,IAAAU,cAACgM,KAAI,CAAC5wB,IAAK3G,GAAIgJ,SAOtF,CAEAoyG,qBACI,MAAM,WACFvf,EAAU,mBACVD,GACAd,GAEJ,OACIjwE,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,iEACxB3wE,KAAKgxF,gCAEVrxF,IAAAU,cAACgzB,KAAI,CAACx7C,MAAO64F,GACT/wE,IAAAU,cAACgM,KAAI,CAACx0B,MAAO84F,GAAY,yDACxB3wE,KAAKixF,0CAItB,CAEAE,gBAAgBn6F,GAEZ,OADAgJ,KAAKuvF,iBAAiBv4F,GACfA,EAAa7kB,KAAK+5E,GACrBvsD,IAAAU,cAACgzB,KAAI,CAAC53C,IAAKywE,EAAEzwE,KACTkkB,IAAAU,cAACgM,KAAI,CAACx0B,OAAQq0E,EAAEojC,YAAc,CAAC3sC,YAAa,KACxChjD,IAAAU,cAACgM,KAAI,CAACx0B,MAAO+3F,GAAUiB,eAAgB3kB,EAAEojC,WAAa,MAAQ,GAAKpjC,EAAEglC,gBAAkBhlC,EAAEh2E,MAAQ,cAAoB,MAAIg2E,EAAE55E,OAE/HqtB,IAAAU,cAACgM,KAAI,CAACx0B,MAAO,CAACumC,OAAQ,GAAG8tC,EAAE9tC,WAAY8xD,gBAAiB,EAAGwhB,gBAAiB,cAGxF,CAEAN,gBAAgBt3G,GACZ,OAAO6lB,IAAAU,cAACgM,KAAI,CAACx0B,MAAO,CAAC+3F,GAAUx8C,cAAew8C,GAAUkB,aAAch3F,EAC1E,ECpgBJ,MAAMmiF,GAA4B,4BAC5BC,GAAgC,gCAChCluB,GAAc,CAChBhmD,WAAY,EACZoQ,OAAQ,EACRqB,QAAS,GAEPw0C,GAAuB,CACzB,EAAG,aACH,EAAG,SACH,EAAG,WAIP,MAAMy0B,WAAmBzsC,GAAcp2B,cAAA,IAAA0B,EAAA,SAAAxtB,WAAAwtB,EAAAvB,KA0BnC,KAEA42B,mBAAsB12C,IAClB8f,KAAKwqB,SAAW,KAEhB,MAAMxiC,EAAasT,YAAgBpb,EAAKqH,eACxCyY,KAAKF,MAAMmB,4BACP,CACIP,SAAU1Y,EAAWA,WAAWoP,cAAe,EAC/C5G,QAASxI,EAAWA,WAAWwI,UAAW,IAE9C,KAEIwP,KAAKq8D,qBAAuBn8E,EAAKoO,aAAa4tE,IAC9Cl8D,KAAKs8D,gBAAkB9mF,SAAS0K,EAAKoO,aAAa2tE,KAGlDj0E,EAAWoT,WAAa4E,KAAK2xF,yBACzB3pG,EAAWoT,YAAc,IAE7BpT,EAAW4pG,YAAc1xG,EAAKiqF,SAC9BniF,EAAWw/F,MAAQtnG,EAAKsnG,MACxBx/F,EAAW6pG,sBAAwB3xG,EAAK2xG,sBACxC7pG,EAAW8pG,qBAAuB5xG,EAAK4xG,qBAGvC,IAAIx2C,EADW,IAAIjhE,gBAAgB2lB,KAAKF,MAAM7gB,SAASC,QAClCzE,IAAI,WAAa,aACtC,MAAMs3G,IACA/xF,KAAKF,MAAMuwF,WAAarwF,KAAKF,MAAMgwF,aACpCiC,IACDz2C,EAAU,cAGdt7C,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBruC,WAAYA,EACZumD,YAAaP,GAAYsN,IAAY,EACrCyG,UAAW/+D,YAAmB+uG,EACxB7xG,EAAKqH,cAAcA,cACnBrH,EAAKqH,gBAEb,GAET,EACJ,KAEDsvC,iBAAoB32C,IAChB8f,KAAKwqB,SAAW,KAChBxqB,KAAKC,SAAS,CACVmqB,WAAY1rB,YAAsBxe,EAAKiF,SACvCkxC,gBAAgB,GAClB,EACL,KAEDS,2BAA8BptC,IAC1BsW,KAAKwqB,SAAW,KAED,MAAX9gC,EAIJsW,KAAKC,SAAS,CACVo2B,gBAAgB,EAChBjM,WAAuB,MAAX1gC,EACN,sDACA,4DAAwCA,OAP9CsW,KAAKC,SAAS,CAACq2B,cAAc,EAAMD,gBAAgB,GAQrD,EACL,KAED27D,yBAA2B,KACvBhyF,KAAKC,SAAS,CAACgyF,oBAAoB,GAAO,EAC7C,KAEDnnB,aAAe,WAAgB,IAAf3rD,EAAIprC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,KACJ,OAATorC,GACA5d,EAAKzB,MAAM+tB,QAAQ1vC,KAAKghC,GAE5B5d,EAAKtB,SACD,CAACo2B,gBAAgB,EAAM47D,oBAAoB,GAC3C1wF,EAAK01B,iBAEb,EAAC,KAEDs6C,gBAAkB,KACdvxE,KAAKC,SACD,CAACkT,eAAe,IAChB,IAAM32B,YACFmjB,IAAAU,cAACmxF,GAAa,CACVnB,UAAWrwF,KAAKF,MAAMuwF,UACtBroG,WAAYgY,KAAKG,MAAMnY,WACvBs0E,gBAAiBt8D,KAAKs8D,gBACtBwzB,YAAa9vF,KAAKF,MAAMgwF,cAC5B,cAAc9vF,KAAKF,MAAM/kB,MAAMX,OAAOvH,SACtCmtB,KAAK6xE,qBAEZ,EACJ,KAEDqgB,gBAAmBh1E,IACf,MAAMqxB,EAAcrxB,EAAG2xB,OAAO7xC,MAC9BgD,KAAKC,SACD,CAACsuC,YAAaA,IACd,KAEIvuC,KAAKF,MAAM+tB,QAAQ1vC,KACf,GAAG/E,OAAO6F,SAASzE,mBAAmByzD,GAAqBM,IAAgBN,GAAqB,KAAK,GAEhH,EACJ,KAEDkkD,gCAAmCzoG,IAC/BsW,KAAKC,UAASC,IAAS,CACnBlY,WAAY,IACLkY,EAAUlY,WACTA,WAAY,IAAIkY,EAAUlY,WAAWA,WAAY0B,cAG1D,EACN,KAED0oG,oBAAsB,KAClBhuF,EACI,+BAA+BpE,KAAKF,MAAM/kB,MAAMX,OAAOvH,KACvD,OACA,CAAC,EACD,CAAC,GACD,KACImtB,KAAK8qE,cAAc,GAExB,EACN,KAEDuc,kBAAoB,KAChBjjF,EACI,4BAA4BpE,KAAKF,MAAM/kB,MAAMX,OAAOvH,KACpD,SACA,CAAC,EACD,CAAC,GACD,KACImtB,KAAK8qE,eACL9qE,KAAK4Y,QAAQnZ,eAAe,GAEjC,EACN,KAED4yF,yBAA2B,KACvBjuF,EACI,+BAA+BpE,KAAKF,MAAM/kB,MAAMX,OAAOvH,KACvD,SACA,CAAC,EACD,CAAC,GACD,KACImtB,KAAK8qE,cAAc,GAExB,EACN,KAoCD+G,mBAAqB,KACjB7xE,KAAKC,SAAS,CAACkT,eAAe,GAAO,CACxC,CArNDgG,oBACIpZ,MAAMoZ,oBACN//B,OAAO04F,WAAa,KAChB9xE,KAAK8qE,cAAc,CAE3B,CAEAx1D,mBAAmBC,EAAWrV,GACtBqV,EAAU1gB,KAAK5E,aAAe+P,KAAKF,MAAMjL,KAAK5E,YAC9C+P,KAAK8qE,cAEb,CAEAtmD,uBACIzkB,MAAMykB,uBACNxkB,KAAKF,MAAMmB,4BACP,CAACP,UAAU,EAAOlQ,SAAS,IAC/BpX,OAAO04F,WAAa,MACxB,CAiKAt7C,mBAAmB12B,GACf,MAAO,CACHmyF,oBAAoB,EACpB9+E,eAAe,EACfnrB,WAAY,KACZumD,YAAa,KACbwT,UAAW,CAAC,EAEpB,CAEArrB,UAAU52B,GACNC,MAAM22B,UAAU52B,GAChBE,KAAKq8D,qBAAuB,KAC5Br8D,KAAKs8D,gBAAkB,IAC3B,CAEAllC,cACI,IAAIp9C,EAAM,sBAAsBgmB,KAAKF,MAAM/kB,MAAMX,OAAOvH,KAIxD,OAHImtB,KAAKF,MAAMgwF,cACX91G,GAAO,aAAagmB,KAAKF,MAAM/kB,MAAMX,OAAOk4G,aAEzCt4G,CACX,CAEAs9C,eACI,IAAIhzB,EAAO,CAAChW,aAAc,CAAC2tE,GAA2BC,KAItD,OAHIl8D,KAAKF,MAAMuwF,YACX/rF,EAAmB,aAAI,SAEpBA,CACX,CAMAqtF,yBAAyBjkG,GACrB,IAAI6kG,EAAU,CAAC,EACXC,EAAa,GACjB,IAAK,IAAIx5B,KAActrE,EAAa,CAChC,MAAM+kG,GAAYz5B,EAAW7P,QAAU,CAAC,GAAGt2E,IAAM,KAC5C4/G,IACAD,EAAW/9G,SAASg+G,GAarBF,EAAQE,GAAsB,WAAI,IAAIF,EAAQE,GAAsB,WAAG,CACnE5/G,GAAImmF,EAAWnmF,GACfY,MAAOulF,EAAWvlF,MAClBolB,KAAMmgE,EAAWngE,QAfrB05F,EAAQE,GAAY,CAChBn8F,kBAAmB0iE,EAAW7P,OAAO7yD,mBAAqB,GAC1D8E,WAAY,CACR,CACIvoB,GAAImmF,EAAWnmF,GACfY,MAAOulF,EAAWvlF,MAClBolB,KAAMmgE,EAAWngE,QAI7B25F,EAAWr0G,KAAKs0G,IAQxB,CAGA,OADkB92G,OAAOC,QAAQ22G,GAASpgH,KAAI+N,GAAQvE,OAAOwE,OAAOD,EAAK,GAAI,CAACrN,GAAI2C,SAAS0K,EAAK,QAC7EH,MAAK,CAAC2yG,EAASC,IACvBD,EAAQ7/G,GAAK8/G,EAAQ9/G,IAEpC,CAIA4+G,qBAAqBzpG,GACjB,OAAIgY,KAAKF,MAAMuwF,UAAoB,KAE/BrwF,KAAKF,MAAMgwF,aAAe94G,YAAWgR,EAAWsO,mBAE5CqJ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,4BAA4Bi6B,UAAU,sBACxD5M,IAAAU,cAACgM,EAAI,KAAErkB,EAAWsO,oBAK1BqJ,IAAAU,cAAAV,IAAAyc,SAAA,KACKplC,YAAWgR,EAAWA,WAAWsO,oBAC9BqJ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,qCAAgCi6B,UAAU,sBAC5D5M,IAAAU,cAACgM,EAAI,KAAErkB,EAAWA,WAAWsO,oBAGpCtf,YAAWgR,EAAWsO,oBACnBqJ,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,wBAAwBi6B,UAAU,sBACpD5M,IAAAU,cAACgM,EAAI,KAAErkB,EAAWsO,oBAKtC,CAEAohC,eACI,GAA8B,OAA1B13B,KAAKG,MAAMnY,WAAuB,OAAO,KAC7C,MAAMzS,EAAIyqB,KAAKG,MAAMnY,WACrB,IAAI4qG,GAAoB,EAKxB,OAJI5yF,KAAKF,MAAMjL,KAAKhiB,KAAO0C,EAAEyS,WAAW3E,YAAYxQ,KAChD+/G,GAAoB,GAIpBjzF,IAAAU,cAAAV,IAAAyc,SAAA,MACMpc,KAAKF,MAAM+yF,gBACLt9G,EAAEyS,WAAWoP,aACduI,IAAAU,cAAC4qF,GAA0B,CAC1B1jG,cAAehS,EACf21G,4BAA6BlrF,KAAKmyF,kCAE1CxyF,IAAAU,cAACyQ,EAAU,CAACM,OAAK,EAACjD,WAAS,EAAC8C,gBAAc,GACrCj6B,YAAWzB,EAAEyS,WAAWgQ,QACrB2H,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKF,YAAU,GAAC,sBAAer3B,EAAEyS,WAAWgQ,OAE1D2H,IAAAU,cAACyQ,EAAU,MACR8hF,IAAuC,IAAlBr9G,EAAEq8G,aAA0BjyF,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKoyF,oBAAqB5oF,SAAO,EAC5GiG,KAAK,YAAW,sBAAmB9P,IAAAU,cAAA,QAAMkM,UAAU,WAAU,oBAAavM,KAAKG,MAAMnY,WAAWpC,SAC7FgtG,IAAuC,IAAlBr9G,EAAEq8G,aAAyBjyF,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKqyF,yBAA0BhgF,QAAM,EAC/G5C,KAAK,SAAQ,yBAAiB9P,IAAAU,cAAA,QAAMkM,UAAU,WAAU,oBAAavM,KAAKG,MAAMnY,WAAWpC,QAC3F+Z,IAAAU,cAAC6S,EAAe,CACZC,cAAenT,KAAKG,MAAMgT,cAC1B/D,QAASpP,KAAKuxE,iBACjB,mBACmB5xE,IAAAU,cAAA,QAAMkM,UAAU,WAAU,oBAAavM,KAAKG,MAAMnY,WAAWpC,UAMrF+Z,IAAAU,cAACgT,EAAS,KACLr8B,YAAWzB,EAAEqQ,QACV+Z,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKP,UAAU,8BAA8Bh3B,EAAEqQ,OAE7D+Z,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,EAACJ,gBAAc,GACtCtR,IAAAU,cAACgM,EAAI,CAACS,IAAI,KAAKR,cAAY,GAAC,2BAAoB/2B,EAAEyS,WAAW0B,OAAOjW,OACnE8B,EAAEiyG,OAAS7nF,IAAAU,cAAC4/D,KAAW,KACpBtgE,IAAAU,cAACwR,EAAY,CAACzC,QAASpP,KAAKqnF,kBAAmB79E,SAAO,EAACiG,KAAK,SAAQ,iCAAyB9P,IAAAU,cAAA,QAAMkM,UAAU,WAAU,oBAAavM,KAAKG,MAAMnY,WAAWpC,QAC1J+Z,IAAAU,cAAC0gB,KAAK,CAACzuC,MAAM,OAGhBkD,SAASD,EAAEmU,OAAO7W,MAAQmtB,KAAKs8D,iBAAmB38D,IAAAU,cAACgM,EAAI,CAACC,cAAY,GAAC,kBAAgB/2B,EAAEmU,OAAOjW,OAC/FksB,IAAAU,cAACwR,EAAY,CACTtF,UAAU,6BACVyF,MAAI,EACJE,UAAQ,EACR9C,QAAUx8B,IACNotB,KAAKC,SAAS,CAACgyF,oBAAoB,IACnCr/G,EAAEy8B,cAAcC,MAAM,GACvB,wBACkB3P,IAAAU,cAAA,QAAMkM,UAAU,WAAU,oBAAah3B,EAAEqQ,QAEjEoa,KAAKG,MAAM8xF,oBACRtyF,IAAAU,cAACgqF,GAAW,CACRx3G,GAAI0C,EAAE1C,GACN6tB,SAAUnrB,EAAEyS,WAAW3E,YAAYxQ,KAAOmtB,KAAKF,MAAMjL,KAAKhiB,GAC1DktF,YAAa//D,KAAKq8D,uBAAyB9mF,EAAEyS,WAAW0B,OAAO7W,GAC/D4tG,aAAczgF,KAAKF,MAAM/kB,MAAMX,OAAOvH,GACtCypF,gBAAiBt8D,KAAKs8D,gBACtBouB,mBAAoB1qF,KAAKgyF,yBACzB15C,OAAQt4C,KAAK8qE,gBAGzBnrE,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,EAACkD,OAAK,GACtBr6B,YAAWzB,EAAE0kB,cACV0F,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,8BAAyBi6B,UAAU,sBACrD5M,IAAAU,cAACgM,EAAI,KAAE92B,EAAE0kB,cAGhB+F,KAAKyxF,qBAAqBl8G,GAC1ByB,YAAWzB,EAAEqjB,iCACV+G,IAAAU,cAACiY,GAAc,CAAChmC,MAAM,oCAAoCi6B,UAAU,sBAChE5M,IAAAU,cAACgM,EAAI,KAAEz1B,YAAsBrB,EAAEqjB,oCAK/C+G,IAAAU,cAACquC,KAAM,CACHC,eAAgB3uC,KAAKG,MAAMouC,YAC3BK,WAAY5uC,KAAKkyF,iBAEjBvyF,IAAAU,cAACyuC,KAAG,CAACx8D,MAAM,kBAAa,aAAW,sDACnCqtB,IAAAU,cAACyuC,KAAG,CAACx8D,MAAM,SAAS,aAAW,2CAAsCs3B,SAAU5J,KAAKF,MAAMuwF,WAAarwF,KAAKF,MAAMgwF,aAC7Gv6G,EAAEs8G,sBAAwB,GAAKlyF,IAAAU,cAAC0gB,KAAK,CAACzuC,MAAOiD,EAAEs8G,sBAAuB7wE,MAAM,YAEjFrhB,IAAAU,cAACyuC,KAAG,CAACx8D,MAAM,UAAU,aAAW,4CAAuCs3B,SAAU5J,KAAKF,MAAMuwF,WAAarwF,KAAKF,MAAMgwF,aAC/Gv6G,EAAEu8G,qBAAuB,GAAKnyF,IAAAU,cAAC0gB,KAAK,CAACzuC,MAAOiD,EAAEu8G,qBAAuB9wE,MAAM,aAKhG,CAEA4W,gBACI,OAAQ53B,KAAKG,MAAMouC,aACf,KAAKP,GAAoB,OACrB,OAAOhuC,KAAKs+E,eAChB,KAAKtwC,GAAqB,QACtB,OAAOhuC,KAAK8yF,gBAChB,QACI,OAAO9yF,KAAKi/D,mBAExB,CAEAqf,eACI,GAAIt+E,KAAKF,MAAMuwF,WAAarwF,KAAKF,MAAMgwF,YAAe,OAAO,KAC7D,OAAQ9vF,KAAKG,MAAMnY,WAAWA,WAAW0B,OAAOpX,OAC5C,IAAK,QAUL,QACI,OAAO,KATX,IAAK,YACD,OAAO0tB,KAAK+yF,iCAChB,IAAK,YACD,OAAO/yF,KAAKgzF,iCAChB,IAAK,SACD,OAAOhzF,KAAKizF,8BAChB,IAAK,WACD,OAAOjzF,KAAKkzF,gCAIxB,CAEAH,iCACI,OAAI/yF,KAAKF,MAAM+yF,cAEPlzF,IAAAU,cAAA,OAAKkM,UAAU,wBACX5M,IAAAU,cAACwR,EAAY,CAACC,KAAG,EAAC1C,QAAStwB,IAAqBytB,UAAU,iBAAgB,yBAC1E5M,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,qBAKnB1M,KAAKF,MAAMjL,KAAK4L,yBAAyBC,SAClCf,IAAAU,cAAC+mF,GAA0B,CAACp/F,WAAYgY,KAAKG,MAAMnY,WAAYkZ,QAASA,IAAMlB,KAAK8qE,iBAEvFnrE,IAAAU,cAAC6kF,GAA4B,CAACl9F,WAAYgY,KAAKG,MAAMnY,YAChE,CAEAgrG,iCACI,OAAOrzF,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,sEACtB,CAEAumF,8BACI,OAAOjzF,KAAKmzF,oCACRtP,GAAyBoB,GACjC,CAEAiO,gCACI,OAAOlzF,KAAKmzF,oCACRpM,GAA2BI,GACnC,CAEAgM,oCAAoCC,EAAgBC,GAChD,MAAM,yBAAE5yF,GAA6BT,KAAKF,MAAMjL,MACxC6L,SAAUqjF,GAAyBtjF,EAC3C,OAAIsjF,GAAwBtjF,EAAyBjQ,QAC1CmP,IAAAU,cAAC+yF,EAAcz3G,OAAAwE,OAAA,GACP6f,KAAKF,MAAK,CACdikF,qBAAsBA,EACtB/7F,WAAYgY,KAAKG,MAAMnY,WACvBg8F,WAAYD,KAEpBpkF,IAAAU,cAACgzF,EAAgB13G,OAAAwE,OAAA,GAAK6f,KAAKF,MAAK,CAAE9X,WAAYgY,KAAKG,MAAMnY,aACpE,CAEA8qG,gBAEI,OAAI9yF,KAAKF,MAAM+yF,cACJlzF,IAAAU,cAAC+tF,GAA6B,CAACpmG,WAAYgY,KAAKG,MAAMnY,WAAYqlG,mBAAoBrtF,KAAK8qE,eAC3F9qE,KAAKG,MAAMnY,WAAWA,WAAW3E,YAAYxQ,KAAOmtB,KAAKF,MAAMjL,KAAKhiB,GACpE8sB,IAAAU,cAACwtF,GAAqC,CAAC7lG,WAAYgY,KAAKG,MAAMnY,WAAYqlG,mBAAoBrtF,KAAK8qE,eAGvGnrE,IAAAU,cAACiuF,GAA4B,CAACtmG,WAAYgY,KAAKG,MAAMnY,WAAYqlG,mBAAoBrtF,KAAK8qE,cACrG,CAEA7L,mBACI,GAA8B,OAA1Bj/D,KAAKG,MAAMnY,WAAuB,OAAO,KAC7C,MAAMzS,EAAIyqB,KAAKG,MAAMnY,WACrB,OACI2X,IAAAU,cAAC8uF,GAAiB,CACdptC,UAAW/hD,KAAKG,MAAM4hD,UACtB/5D,WAAYzS,EACZu6G,YAAa9vF,KAAKF,MAAMgwF,YACxBO,UAAWrwF,KAAKF,MAAMuwF,WAElC,EAzdE3tB,GAEK57B,YAAc1nC,ECnDzB,MAAMk0F,GAAa,CACfrd,UAAW,WACXF,UAAW,SACXC,OAAQ,YAIZ,MAAMud,WAAqB56D,GAAuB94B,cAAA,IAAA0B,EAAA,SAAAxtB,WAAAwtB,EAAAvB,KAgB9C,KAEA8qE,aAAe,WACXvpE,EAAKtB,SACD,CAACo2B,gBAAgB,EAAMjM,WAAY,GAAIoE,QAAS,KAChD,KAAOjtB,EAAK01B,kBAAkB,GAEtC,EAAC,KAEDypD,aAAgBxjE,IACZA,EAAGsI,iBACHxlB,KAAK8qE,cAAc,EACtB,KAED0oB,kBAAqBnhH,IACjB2tB,KAAKC,SACD,CAACikD,MAAO7xE,EAAO+O,WAAY,IAC3B,KAEI4e,KAAKF,MAAM+tB,QAAQ1vC,KACf8mB,UAAU,GAAG7rB,OAAO6F,SAASzE,WAAWnI,EAAM2B,OAAS,EAAI,MAAM3B,IAAU,MAAM,GAE5F,EACJ,KAED04F,qBAAwBxvE,IACpB6I,EACI,+BAA+B7I,EAAO1oB,KACtC,OACA,CAAC,EACD,CAAC,GACD,KACI,MAAMmqB,EAAQgD,KAAKG,MAAMquB,QAAQ47C,WAAU90F,GAAOA,EAAIzC,KAAO0oB,EAAO1oB,KAC9Dw3F,EAAiB,IAAIrqE,KAAKG,MAAMquB,SACtC67C,EAAertE,GAAS,IAAKqtE,EAAertE,GAAQmtE,UAAU,GAC9DnqE,KAAKC,SAAS,CAAEuuB,QAAS67C,GAAiB,GAE/C,EACN,KAEDW,0BAA6BzvE,IACzB6I,EACI,+BAA+B7I,EAAO1oB,KACtC,SACA,CAAC,EACD,CAAC,GACD,KACI,MAAMmqB,EAAQgD,KAAKG,MAAMquB,QAAQ47C,WAAU90F,GAAOA,EAAIzC,KAAO0oB,EAAO1oB,KAC9Dw3F,EAAiB,IAAIrqE,KAAKG,MAAMquB,SACtC67C,EAAertE,GAAS,IAAKqtE,EAAertE,GAAQmtE,UAAU,GAC9DnqE,KAAKC,SAAS,CAAEuuB,QAAS67C,GAAiB,GAE/C,CACN,CAjEDlxD,oBACI9kC,SAASqgB,MAAQ,4CAEjBqL,MAAMoZ,mBACV,CAEA7D,mBAAmBC,EAAWrV,GACtBqV,EAAUjM,iBAAmBtJ,KAAKF,MAAMwJ,gBACxCtJ,KAAK8qE,cAEb,CA2DA30C,SAASr2B,GACLC,MAAMo2B,WAGNn2B,KAAKk5B,YAAc,aACnBl5B,KAAKo5B,WAAa,GAClBp5B,KAAKmjB,cAAgB,CACjB,CAAC,kBAAmB,0CACpB,CAAC,qBAAsB,oCACvB,CAAC,UAAW,mBAEhBnjB,KAAKkjB,aAAe,6BACpBljB,KAAKq5B,sBAAwBwhD,GAE7B76E,KAAKs5B,gBAAkBmlB,EAC3B,CAEAjoB,mBAAmB12B,GACf,MAAM1lB,EAAS,IAAIC,gBAAgBylB,EAAM7gB,SAASC,QAClD,OAAOvD,OAAOwE,OAAO,CAAC,EAAG4f,MAAMy2B,mBAAmB12B,GAAQ,CACtDmjB,aAAc,CAAC5wC,MAAO2tB,KAAKmjB,cAAc,GAAG,GAAI7wC,MAAO0tB,KAAKmjB,cAAc,GAAG,IAC7E+gC,MAAO9pE,EAAOK,IAAI,MAAQ,GAC1B+O,QAASizD,IAEjB,CAEA/lB,UAAU52B,GACNC,MAAM22B,UAAU52B,GAChBE,KAAK1R,aAAe,CAAC,CACzB,CAEA8oC,cACI,MAAO,2BACX,CAEAE,eACI,IAAI4nB,EAAYn/C,MAAMu3B,eAElBt3B,KAAKG,MAAM+jD,MAAMlwE,SACjBkrE,EAAiB,MAAIl/C,KAAKG,MAAM+jD,OAEpC,IAAK,IAAK7rE,EAAMhG,KAAUsJ,OAAOC,QAAQokB,KAAKG,MAAM3W,SAChD,GAAI,CAAC,uBAAwB,2BAA2B/U,SAAS4D,GAC7D,IAAK,IAAK4yF,EAASlmE,KAAappB,OAAOC,QAAQvJ,GAC3B,SAAZ44F,GACElmE,IACFm6C,EAAU,GAAG7mE,KAAQ4yF,MAAclmE,OAG3B,YAAT1sB,EACHsD,OAAOS,KAAK/J,GAAO2B,SACnBkrE,EAAU7mE,GAAQhG,EAAMF,KAAImlB,GAAOA,EAAIA,OAEpC,cAAgBjf,EACnBhG,EAAM2B,SACFkrE,EAAU7mE,GAAQhG,EAAMF,KAAIqiF,GAAMA,EAAGniF,MAAM6qB,iBAE5C,sBAAwB7kB,EACvBhG,EAAM2B,SACFkrE,EAAU7mE,GAAQhG,EAAMF,KAAIqiF,GAAMA,EAAGniF,SAE1C,CAAC,WAAY,eAAeoC,SAAS4D,GAC9B,OAAVhG,IACA6sE,EAAU7mE,GAAQhG,EAAMC,QAEX,WAAT+F,GAAqBsD,OAAOS,KAAK/J,GAAO2B,QAC5C3B,IAAUoqE,GAAuBpkE,MAErC6mE,EAAU7mE,GAAQhG,GAG1B,OAAO6sE,CACX,CAEAhoB,cAAc/xC,GAEV,MAAO,6DADPA,EAAU4a,MAAMm3B,cAAc/xC,IAElC,CAEAgyC,6BAA6BztC,GACzB,MAAO,sHAAyEA,IACpF,CAIAguC,eACI,OACI/3B,IAAAU,cAACgT,EAAS,KACN1T,IAAAU,cAAA,QAAM0kD,SAAU/kD,KAAK0gF,cACjB/gF,IAAAU,cAAA,SAAOoM,QAAQ,eAAeF,UAAU,WAAU,4BAClD5M,IAAAU,cAACyQ,EAAU,CAACM,OAAK,EAACjD,WAAS,GACvBxO,IAAAU,cAAC2jB,GAAe,CACZgB,kBAAkB,SAClB7W,WAAS,EACTgY,UAAW,IACX9zC,MAAO2tB,KAAKG,MAAM+jD,MAClB9tC,SAAU8G,GAAMld,KAAKwzF,kBAAkBt2E,EAAGiI,OAAO9yC,OACjDqyC,QAASxH,GAAMld,KAAKwzF,kBAAkB,IACtC3gH,GAAG,iBACP8sB,IAAAU,cAACwR,EAAY,CAACtF,UAAU,cAAckD,KAAK,SAAS58B,GAAG,mBAAmB22B,SAAO,EAAC4F,QAASpP,KAAK8qE,cAAc,YAKlI,CAEAhxC,qBACI,OAAOn6B,IAAAU,cAACgM,EAAI,CAACvkB,OAAK,EAAC2lB,KAAK,SAAQ,mFACpC,CAEAosB,aACI,MAAMt4C,EAAQye,KAAKG,MAAM5e,MACzB,OACIoe,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACgM,EAAI,CAACC,cAAY,EAACQ,IAAI,KAAKW,KAAK,SAAQ,cAAYlsB,EAAQye,KAAKo5B,WAAa,GAAK,cAAU73C,EAAM,uBACpGoe,IAAAU,cAAA,UACKL,KAAKG,MAAMquB,QAAQr8C,KAAIoD,GAAKyqB,KAAKyzF,aAAal+G,MAI/D,CAEAwkD,yBACI,OACIp6B,IAAAU,cAAA,KAAMg5B,sBAAqB,CACvB/qC,aAAc0R,KAAK1R,aACnB9E,QAASwW,KAAKG,MAAM3W,QACpBwsC,aAAcA,IAAMh2B,KAAKC,SAAS,CAACwyB,cAAc,IACjDk4C,mBAAoBr8E,GAAgB0R,KAAK1R,aAAeA,EACxDwnC,cAAe91B,KAAK41B,oBAGhC,CAEA69D,aAAal4F,GACT,OACIoE,IAAAU,cAAA,MAAI5kB,IAAK8f,EAAO1oB,GAAI05B,UAAU,iCAC1B5M,IAAAU,cAACyQ,EAAU,CAAC3C,WAAS,GACjBxO,IAAAU,cAACge,GAAc,KACX1e,IAAAU,cAACwQ,IAAI,CAAChnB,GAAI,eAAe0R,EAAO1oB,KAAM05B,UAAU,aAAY5M,IAAAU,cAAA,QAAM4pE,wBAAyB,CAACC,OAAQ3uE,EAAO3V,UAC1G2V,EAAOm4F,MAAQ/zF,IAAAU,cAAA,QAAMkM,UAAU,gBAAe,0BAEjDhR,EAAOm4F,MACL/zF,IAAAU,cAACge,GAAc,CAACxmC,MAAO,CAACyzB,SAAU,WACR,IAApB/P,EAAO4uE,UAAuBxqE,IAAAU,cAACwR,EAAY,CAACzC,QAASA,IAAMpP,KAAK+qE,qBAAqBxvE,GAASiO,SAAO,EACnGiG,KAAK,YAAW,sBAAmB9P,IAAAU,cAAA,QAAMkM,UAAU,WAAU,oBAAahR,EAAO3V,SAC/D,IAApB2V,EAAO4uE,UAAsBxqE,IAAAU,cAACwR,EAAY,CAACzC,QAASA,IAAMpP,KAAKgrE,0BAA0BzvE,GAAS8W,QAAM,EACtG5C,KAAK,SAAQ,yBAAiB9P,IAAAU,cAAA,QAAMkM,UAAU,WAAU,oBAAahR,EAAO3V,UAK5F+Z,IAAAU,cAAA,KAAG4pE,wBAAyB,CAACC,OAAQ3uE,EAAOpB,SAC5CwF,IAAAU,cAACyQ,EAAU,CAACO,OAAK,EAAClD,WAAS,GACvBxO,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,wBAAuB,iBAAehR,EAAOjF,mBAClEqJ,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,wBAAuB,gCAAyBhR,EAAOtB,aAC5E0F,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,2DAA0D5M,IAAAU,cAAA,QAAM4pE,wBAAyB,CAACC,OAAQ3uE,EAAOo4F,0BAC5Hp4F,EAAO64D,mBAAqB,IAAIpgF,OAAS,GAAK2rB,IAAAU,cAACgM,EAAI,CAACK,MAAI,EAACH,UAAU,wBAAwBhR,EAAO64D,oBAIpH,CAEAz6B,mCACI,OAAO35B,KAAK4zF,iBAChB,CAEAA,kBACI,MAAMpqG,EAAUwW,KAAKG,MAAM3W,QACrBqqG,EAAqE,WAAtCrqG,EAAQkzD,qBAAqB/yD,KAC5DmqG,EAA2E,WAAzCtqG,EAAQmzD,wBAAwBhzD,KACxE,OACIgW,IAAAU,cAAA,QAAMhoB,KAAK,SAASgsB,OAAO,OAAO0vF,OAAO,qFAAqF5uE,OAAO,UAChInlB,KAAKG,MAAM+jD,MAAMlwE,OAAS,GAAK2rB,IAAAU,cAAA,SAAO1W,KAAK,SAAS9W,GAAG,iBAAiBwF,KAAK,kBAAkBhG,MAAO2tB,KAAKG,MAAM+jD,QACjH16D,EAAQE,OAAOvX,KAAI,CAAC4jD,EAAGjhD,IAAM6qB,IAAAU,cAAA,SAAO1W,KAAK,SAASlO,IAAK3G,EAAGjC,GAAI,iBAAiBiC,IAAKuD,KAAK,mBAAmBhG,MAAO,GAAGihH,GAAWv9D,SACjI89D,GAAgCrqG,EAAQkzD,qBAAqB9yD,MAC1D+V,IAAAU,cAAA,SAAO1W,KAAK,SAAS9W,GAAG,mBAAmBwF,KAAK,oBAAoBhG,MAAO,GAAGmE,YAAkB,IAAIuO,KAAKyE,EAAQkzD,qBAAqB9yD,WAEzIiqG,GAAgCrqG,EAAQkzD,qBAAqB7yD,IAC1D8V,IAAAU,cAAA,SAAO1W,KAAK,SAAS9W,GAAG,kBAAkBwF,KAAK,mBAAmBhG,MAAO,GAAGmE,YAAkB,IAAIuO,KAAKyE,EAAQkzD,qBAAqB7yD,SAEvIiqG,GAAmCtqG,EAAQmzD,wBAAwB/yD,MAChE+V,IAAAU,cAAA,SAAO1W,KAAK,SAAS9W,GAAG,8BAA8BwF,KAAK,+BAA+BhG,MAAO,GAAGmE,YAAkB,IAAIuO,KAAKyE,EAAQmzD,wBAAwB/yD,WAElKkqG,GAAmCtqG,EAAQmzD,wBAAwB9yD,IAChE8V,IAAAU,cAAA,SAAO1W,KAAK,SAAS9W,GAAG,6BAA6BwF,KAAK,8BAA8BhG,MAAO,GAAGmE,YAAkB,IAAIuO,KAAKyE,EAAQmzD,wBAAwB9yD,SAEjK8V,IAAAU,cAAA,SAAO1W,KAAK,SAAS9W,GAAG,iBAAiBwF,KAAK,kBAAkBhG,MAAM,QACrEmX,EAAQmE,UAAYgS,IAAAU,cAAA,SAAO1W,KAAK,SAAS9W,GAAG,oBAAoBwF,KAAK,qBAAqBhG,MAAOmX,EAAQmE,WACzGnE,EAAQ4K,aAAeuL,IAAAU,cAAA,SAAO1W,KAAK,SAAS9W,GAAG,uBAAuBwF,KAAK,wBAAwBhG,MAAOmX,EAAQ4K,cAClH5K,EAAQuzD,kBAAkB5qE,KAAIwqD,IAC3B,MAAMtqD,EAAQE,IAA+BoqD,EAAEtqD,OAC/C,OAAMA,EACKstB,IAAAU,cAAA,SAAO1W,KAAK,SAASlO,IAAKpJ,EAAOQ,GAAI,mBAAmBR,IAASgG,KAAK,qBAAqBhG,MAAOA,IAElG,IACX,IAEJstB,IAAAU,cAACwR,EAAY,CAACG,MAAI,EAAC5C,QAASA,OAAWzlB,KAAK,UAAS,wDAAsCgW,IAAAU,cAAA,QAAMkM,UAAU,WAAU,2CAGjI,EC9RJ,MAAMynF,GAAiB,CACrBC,iBAAkB,gCAClBC,UAAW,iDACXC,0BAA2B,uCAC3BC,oCACE,0DACFC,4CACE,uEACFC,iCACE,sDACFC,kCACE,wEACFC,0CACE,yDACFC,uCAAwC,+CACxCC,oDACE,qEACFC,4CACE,mEACFC,yCACE,yDACFC,sDACE,+EACAC,2CACA,6EAGEC,GAAmBA,IAErBp1F,IAAAU,cAAA,OAAKkM,UAAU,UACb5M,IAAAU,cAAA,YAAM,MAOL,MAAM20F,GAAiBl1F,IAAW,IAADm1F,EACtC,MAAOC,EAAqBC,GAA0BtmF,qBAEtD2J,qBAAU,KACRpU,EAAS,iCAAkC,MAAO,CAAC,EAAG,CAAC,GAAIlkB,IACzDi1G,EAAuBj1G,EAAK,GAC5B,GACD,IAEH,MAAMk1G,EAA0C,OAAnBF,QAAmB,IAAnBA,GAAkC,QAAfD,EAAnBC,EAAqBG,qBAAa,IAAAJ,OAAf,EAAnBA,EAAoC9sB,QAgDjE,OACExoE,IAAAU,cAAA,OAAKxoB,MAAO,CAAE0oC,QAAS,OAAQC,cAAe,SAAUmpD,IAAK,SAC3DhqE,IAAAU,cAACgN,IAAU,CAACN,IAAI,YAAYD,IAAI,MAAK,+BAGrCnN,IAAAU,cAACiQ,IAAS,CAAC7oB,EAAG,EAAG5P,MAAO,CAAE8xB,WAAYJ,EAAOG,OAC3C/J,IAAAU,cAACyQ,EAAU,KACTnR,IAAAU,cAAA,KAAGxoB,MAAO,CAAEy9G,OAAQ,KAAM,mEACyB31F,IAAAU,cAAC00F,GAAgB,MAAG,wDAK3Ep1F,IAAAU,cAACiQ,IAAS,CAAC7oB,EAAG,GACZkY,IAAAU,cAAA,OACExoB,MAAO,CAAE8xB,WAAYJ,EAAOC,QAAS6B,MAAO,QAASu+D,QAAS,KAE9DjqE,IAAAU,cAACgN,IAAU,CAACN,IAAI,YAAYD,IAAI,MAAK,gCAIvCnN,IAAAU,cAACyQ,EAAU,KACTnR,IAAAU,cAACiY,GAAc,CACbhmC,MAAM,oCACNw6B,IAAI,QACJH,SAAS,wBACT90B,MAAO,CAAEy9G,OAAQ,KAEjB31F,IAAAU,cAAC0+D,KAAM,CACL,cACEq2B,EAAuB,mBAAW,mBADxB,iBAGZl0D,QAASk0D,EACTh/E,SAAW8G,IAAOq4E,OA/EKr0D,EA+EqBhkB,EAAGiI,OAAO+b,aA9EhE98B,EACE,+CACA,MACA,CAAC,EACD,CAAE+jE,QAASjnC,IACX,KACEi0D,EAAuB,IAClBD,EACHG,cAAe,IACVH,EAAoBG,cACvBltB,QAASjnC,IAEX,IAb2BA,KA+EwC,EAC/DruD,GAAG,6BAMVuiH,GACCz1F,IAAAU,cAACiQ,IAAS,CAAC7oB,EAAG,GACZkY,IAAAU,cAAA,OACExoB,MAAO,CAAE8xB,WAAYJ,EAAOC,QAAS6B,MAAO,QAASu+D,QAAS,KAE9DjqE,IAAAU,cAACgN,IAAU,CAACN,IAAI,YAAYD,IAAI,MAAK,yCAKtCooF,EAAoBh6G,OAAO/I,KAAKq1D,GAE7B7nC,IAAAU,cAAA,OAAKxoB,MAAO,CAAEiyF,WAAY,IACxBnqE,IAAAU,cAAA,KAAGxoB,MAAO,CAACg0B,WAAY,QAASmoF,GAAexsD,EAAM79C,OACpD69C,EAAM3V,MAAM1/C,KAAK03C,GAEdlqB,IAAAU,cAACyQ,EAAU,KACTnR,IAAAU,cAACiY,GAAc,CACbhmC,MAAO0hH,GAAenqE,EAAKlgC,MAC3BmjB,IAAI,QACJH,SAAU,gBAAgBkd,EAAKlgC,OAC/B4iB,UAAU,sBAEV5M,IAAAU,cAAC0+D,KAAM,CACL,aAAY,GACVq2B,EAAuB,mBAAW,mCAClBpB,GAAexsD,EAAM79C,QACvCu3C,QAASrX,EAAKs+C,QACd/xD,SAAW8G,GAhGFs4E,EAAC7rG,EAAMu3C,KACtC,MAAMhmD,EAAS,IAAIg6G,EAAoBh6G,QAEvC,IAAK,IAAIpG,EAAI,EAAGA,EAAIoG,EAAOlH,OAAQc,IAAK,CACtC,MAAM0yD,EAAQtsD,EAAOpG,GACrB,IAAK,IAAI2gH,EAAI,EAAGA,EAAIjuD,EAAM3V,MAAM79C,OAAQyhH,IAAK,CAC3C,MAAM5rE,EAAO2d,EAAM3V,MAAM4jE,GACzB,GAAI5rE,EAAKlgC,OAASA,EAAM,CACtBkgC,EAAKs+C,QAAUjnC,EACf,KACF,CACF,CACF,CAEA98B,EACE,kCAAkCza,IAClC,MACA,CAAC,EACD,CAAEw+E,QAASjnC,IACX,KACEi0D,EAAuB,IAClBD,EACHh6G,OAAQ,IAAIA,IACZ,GAEL,EAwEuBs6G,CACE3rE,EAAKlgC,KACLuzB,EAAGiI,OAAO+b,SAGdruD,GAAI,gBAAgBg3C,EAAKlgC,iBAWzC,ECjLJ+rG,GAAc,IAAIC,IAAI,CAC1B,CAAC,aAAc,GACf,CAAC,gBAAiB,GAClB,CAAC,WAAY,KAYf,MAAMC,GAAc91F,IAClB,MAAM7gB,EAAW8gC,cACX8N,EAAUC,cAEhBtV,qBAAU,KACRz5B,eAAeC,QACb,kBACA5F,OAAO6F,SAASzE,SAAWpB,OAAO6F,SAASC,OAC5C,GACA,IAEHs5B,qBAAU,KAAO,IAADq9E,EAAAC,EACd,MAAMC,EAA2B,QAAlBF,EAAG52G,EAASC,cAAM,IAAA22G,GAAmB,QAAnBC,EAAfD,EAAiBt9G,MAAM,mBAAW,IAAAu9G,OAAnB,EAAfA,EAAqC,GACnDC,GACFC,EAAkBN,GAAYj7G,IAAIs7G,GACpC,GACC,CAAC92G,EAASC,SAEb,MAAOyvD,EAAgBqnD,GAAqBnnF,mBAAS,IAE/C,KAAEha,GAASirB,qBAAWjf,GAE5B,OACElB,IAAAU,cAAAV,IAAAyc,SAAA,KACuB,OAApBvnB,EAAK5E,WACJ0P,IAAAU,cAAA,SAAG,6EAEHV,IAAAU,cAAAV,IAAAyc,SAAA,KACEzc,IAAAU,cAACquC,KAAM,CACLC,eAAgBA,EAChBC,WAAaj2B,IACX,MAAMs9E,EAxCpB,SAA0B5jH,GACxB,IAAK,IAAKoJ,EAAK0jB,KAAQu2F,GAAY95G,UACjC,GAAIujB,IAAQ9sB,EACV,OAAOoJ,CAIb,CAiC8By6G,CAAiBv9E,EAAMk2B,OAAO7xC,OAC9C6wB,EAAQ1vC,KAAK,GAAG/E,OAAO6F,SAASzE,mBAAmBy7G,IAAU,GAG/Dt2F,IAAAU,cAACyuC,KAAG,KAAC,cACLnvC,IAAAU,cAACyuC,KAAG,KAAC,iBACLnvC,IAAAU,cAACyuC,KAAG,KAAC,aAEa,IAAnBH,GAAwBhvC,IAAAU,cAACimE,GAAkB,MACxB,IAAnB33B,GAAwBhvC,IAAAU,cAAC20F,GAAa,MACnB,IAAnBrmD,GAAwBhvC,IAAAU,cAACwqE,GAAc/qE,IAG3C,EC5DMq2F,GAAqBA,KAC9B,MAAMtoE,EAAUC,cAMhB,OACEnuB,IAAAU,cAACgT,EAAS,KACR1T,IAAAU,cAACyQ,EAAU,CAACE,kBAAgB,GAC1BrR,IAAAU,cAACmP,IAAI,CACHjD,UAAU,6BACVkD,KAAM,CAAEA,KAAM,wBACd,cAAY,UAGhB9P,IAAAU,cAACyQ,EAAU,CAACU,YAAU,EAACR,kBAAgB,GACrCrR,IAAAU,cAACgN,IAAU,CACTN,IAAI,YACJD,IAAI,KACJj1B,MAAO,CAAEspC,UAAW,SAAUm0E,OAAQ,WACvC,2DAIH31F,IAAAU,cAACyQ,EAAU,CAACU,YAAU,EAACR,kBAAgB,GACrCrR,IAAAU,cAACgN,IAAU,CAACN,IAAI,SAAQ,iEACqB,IAC3CpN,IAAAU,cAAA,KAAGlhB,KAAM4mB,EAAKa,WAAWnJ,MAAM,sBAAsB,MAGzDkC,IAAAU,cAACyQ,EAAU,CAACU,YAAU,EAACR,kBAAgB,GACrCrR,IAAAU,cAACgN,IAAU,CAACN,IAAI,SAAQ,oEACwB,IAC9CpN,IAAAU,cAAA,KAAGlhB,KAAM,GAAG4mB,EAAKa,WAAWnJ,6BAA6B,2BAErD,MAIRkC,IAAAU,cAACyQ,EAAU,CAACU,YAAU,EAACR,kBAAgB,GACrCrR,IAAAU,cAACgN,IAAU,CAACN,IAAI,QAAQl1B,MAAO,CAAEy1B,UAAW,SAAU,wFAIxD3N,IAAAU,cAACyQ,EAAU,CAACU,YAAU,EAACR,kBAAgB,GACrCrR,IAAAU,cAACwR,EAAY,CACXrI,SAAO,EACP+C,UAAU,cACV6C,QA9CmBgnF,KACzBvoE,EAAQ1vC,KAAK4nB,EAAKC,KAAKvI,KAAK,GA8CvB,OAIO,ECpDZ44F,GAA2Bv2F,IAC/B,MAAM+tB,EAAUC,cACV7uC,EAAW8gC,eAEVu2E,EAAOC,GAAY1nF,wBAAS56B,GAEnCukC,qBAAU,KAAO,IAADq9E,EAAAC,EACd,MAAMQ,EAAuB,QAAlBT,EAAG52G,EAASC,cAAM,IAAA22G,GAAkB,QAAlBC,EAAfD,EAAiBt9G,MAAM,kBAAU,IAAAu9G,OAAlB,EAAfA,EAAoC,GAC9CQ,EACFC,EAASD,GAETF,GACF,GAEC,CAACn3G,EAASC,SAEb,MAAMk3G,EAAqBA,KACzBvoE,EAAQ1vC,KAAK4nB,EAAKC,KAAKvI,KAAK,EAGxB+4F,EAAe1uG,IACnB,MAAM,IAAIyvC,MAAMzvC,EAAM,EAiBxB,OACE6X,IAAAU,cAACgT,EAAS,KACR1T,IAAAU,cAACyQ,EAAU,CAACE,kBAAgB,GAC1BrR,IAAAU,cAACmP,IAAI,CACHjD,UAAU,oBACVkD,KAAM,CAAEA,KAAM,gBACd,cAAY,UAGhB9P,IAAAU,cAACyQ,EAAU,CAACU,YAAU,EAACR,kBAAgB,GACrCrR,IAAAU,cAACgN,IAAU,CACTN,IAAI,YACJD,IAAI,KACJj1B,MAAO,CAAEspC,UAAW,SAAUm0E,OAAQ,WACvC,+CAC8B31F,IAAAU,cAAA,WAAM,gCAIvCV,IAAAU,cAACyQ,EAAU,CAACU,YAAU,EAACR,kBAAgB,GACrCrR,IAAAU,cAACwR,EAAY,CAACrI,SAAO,EAAC+C,UAAU,cAAc6C,QAlC9BqnF,KACpBryF,EACE,kCAAkCkyF,IAClC,OACA,CAAC,EACD,CAAC,GACD,KACEx2F,EAAM42F,cAAa,EAAK,GAE1BF,EACAA,EACD,GAuByE,qEAGtE72F,IAAAU,cAACwR,EAAY,CAACG,MAAI,EAACzF,UAAU,cAAc6C,QAASgnF,GAAoB,gDAIhE,EAIHO,GAAgBA,KAC3B,MAAOC,EAAWF,GAAgB7nF,oBAAS,GAE3C,OAAO+nF,EACLj3F,IAAAU,cAAC81F,GAAkB,MAEnBx2F,IAAAU,cAACg2F,GAAuB,CAACK,aAAcA,GACxC,EC7CGG,GAAiC,CACnC3jG,SAAU,CAAC6S,EAAK7S,SAAS+S,SACzB5Y,eAAgB,CACZ,iBAAkB,oBAAqB,sBAAsBlb,KAC7DkG,GAAQ0tB,EAAK1tB,GAAM4tB,UACvBvU,OAAQ,CAACqU,EAAKrU,OAAOuU,SACrBW,WAAY,CAACb,EAAKa,WAAWX,SAC7BY,cAAe,CAACd,EAAKc,cAAcZ,SACnChR,MAAO,CAAC,QAAS,eAAgB,kBAAkB9iB,KAC/CkG,GAAQ0tB,EAAK1tB,GAAM4tB,UACvB6wF,mBAAoB,CAAC/wF,EAAKkB,mBAAmBhB,SAC7C8wF,yBAA0B,CAAChxF,EAAKmB,yBAAyBjB,SACzD+wF,mBAAoB,CAChB,qBACA,0BACA,6BACA,8BACA,iCACA,gCACA,uCACA,6CACA,mCACA,oCACA,4BACA,+BACA,gCACA,oCACA,wCACA,2CACA,+BACA,kCACA,mCACA,uCACF7kH,KAAIkG,GAAQ0tB,EAAK1tB,GAAM4tB,UACzBgxF,yCAA0C,CACtC,yBACA,qCACA,mCACA,qCACA,kCACA,kCACA,qCACF9kH,KAAIkG,GAAQ0tB,EAAK1tB,GAAM4tB,WAIvBixF,GAAS/8E,IAA4C,IAA3C,aAAE8qC,EAAY,oBAAEkyC,GAAqBh9E,EAEjD,MAAM,YACFpZ,EAAW,KACXlM,EAAI,4BACJoM,GACA6e,qBAAWjf,GACTgyF,EAAoC,OAApBh+F,EAAK5E,WAErB49B,EAAUC,cAehBtV,qBAbA,WACI,IAAK,IAAKmI,EAAUy2E,KAAgBz7G,OAAOC,QACnCi7G,IACJ,IAAK,IAAI5wF,KAAWmxF,EAChB,GAAInxF,EAAQ/nB,KAAK2vC,EAAQ5uC,SAASzE,UAE9B,YADA28G,EAAoBx2E,GAMhCw2E,EAAoB,KACxB,GACuB,CAACtpE,EAAQ5uC,SAASzE,WAEzC,MAAM68G,EAAe,SAACC,GAAoC,IAAzBnzF,EAAcpwB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,KAC5C,OAAI8+G,EACOlzF,IAAAU,cAACk3F,IAAQ,CAAC1tG,GAAG,MAED,OAAnBsa,GAA4BpD,EAAYoD,GAGrCmzF,EAFI33F,IAAAU,cAACimB,GAAY,KAG5B,GAEM,YAAEhnB,GAAgBwgB,qBAAW1gB,GAEnC,OACIO,IAAAU,cAAC0nD,GAAqB,KAClBpoD,IAAAU,cAAC0+D,IAAM,KACHp/D,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKC,KAAKvI,KACtB2C,OAASN,GAAUH,IAAAU,cAAC0jD,GAAWpoE,OAAAwE,OAAA,GACvB2f,EAAK,CACTjL,KAAMA,EACNowD,aAAcA,OAEtBtlD,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKG,MAAMzI,KACvB2C,OAASN,GAAUH,IAAAU,cAACmmC,GAAS7qD,OAAAwE,OAAA,GAAK2f,EAAK,CAAEjL,KAAMA,OAEnD8K,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKI,WAAW1I,KAC5B2C,OAASN,GAAU+yF,EACblzF,IAAAU,cAACq1B,GAAkB51B,GACnBH,IAAAU,cAACk3F,IAAQ,CAAC1tG,GAAG,QAEvB8V,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAK7S,SAASuK,KAC1B2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAAC2jE,GAAalkE,MAEtBH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAK1Y,eAAeoQ,KAChC2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAAC+7D,GAAet8D,MAExBH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKK,qBAAqB3I,KACtC2C,OAASN,GAAUH,IAAAU,cAACkzF,GAAY53G,OAAAwE,OAAA,GACxB2f,EAAK,CAAEwJ,eAAgBzU,EAAK5E,gBAExC0P,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKM,kBAAkB5I,KACnC2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACi5D,GAAc39E,OAAAwE,OAAA,GACP2f,EAAK,CACTsrB,OAAO,EACP3S,IAAM30B,IAAO1K,OAAO4wE,eAAiBlmE,CAAC,EACtCmd,4BAA6BA,EAC7BwlC,SAAU5xC,QAGtB8K,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKO,sBAAsB7I,KACvC2C,OAASN,GAAUH,IAAAU,cAACqiE,GAAU/mF,OAAAwE,OAAA,GACtB2f,EAAK,CACTjL,KAAMA,EACNg+F,cAAeA,EACf5xF,4BAA6BA,OAErCtB,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKU,2BAA2BhJ,KAC5C2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACqiE,GAAU/mF,OAAAwE,OAAA,GACH2f,EAAK,CACTuwF,WAAW,EACXx7F,KAAMA,EACNoM,4BAA6BA,QAGzCtB,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKW,6BAA6BjJ,KAC9C2C,OAASN,GAAUH,IAAAU,cAACqiE,GAAU/mF,OAAAwE,OAAA,GACtB2f,EAAK,CACTjL,KAAMA,EACNg+F,cAAeA,EACf/C,aAAa,EACb7uF,4BAA6BA,OAErCtB,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKY,mBAAmBlJ,KACpC2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACi5D,GAAc39E,OAAAwE,OAAA,GACP2f,EAAK,CACTsrB,OAAO,EACP3S,IAAM30B,IAAO1K,OAAO4wE,eAAiBlmE,CAAC,EACtCmd,4BAA6BA,EAC7BwlC,SAAU5xC,QAGtB8K,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKrU,OAAO+L,KACxB2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAAC+iF,GAAWtjF,MAEpBH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKa,WAAWnJ,KAC5B2C,OAASN,GAAUH,IAAAU,cAACu1F,GAAUj6G,OAAAwE,OAAA,CAAC1E,IAAK6jB,GAAiBQ,MACzDH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKc,cAAcpJ,KAC/B65F,UAAWliB,KACfz1E,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAK9Q,MAAMwI,KACvB2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACg/C,GAAK1jE,OAAAwE,OAAA,CAAC1E,IAAK6jB,GAAiBQ,IAC7B,6BAERH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKe,aAAarJ,KAC9B2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAAC66C,GAASp7C,GACV,6BAERH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKiB,eAAevJ,KAChC2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAAC62C,GAAsBp3C,MAE/BH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKkB,mBAAmBxJ,KACpC2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACg6E,GAAQ1+F,OAAAwE,OAAA,CAAC1E,IAAK6jB,GAAiBQ,IAChC,yBAERH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKmB,yBAAyBzJ,KAC1C2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACw4E,GAAcl9F,OAAAwE,OAAA,CAAC1E,IAAK6jB,GAAiBQ,IACtC,oBAERH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKoB,mBAAmB1J,KACpC2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACs0E,GAAuB70E,GAAW,iBAE3CH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKqB,wBAAwB3J,KACzC2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACqyE,GAAW5yE,GAAW,iBAE/BH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKsB,2BAA2B5J,KAC5C2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACorE,GAAc3rE,GAAW,iBAElCH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKuB,4BAA4B7J,KAC7C2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACorE,GAAS9vF,OAAAwE,OAAA,GAAK2f,EAAK,CAAEkjD,SAAS,KAAU,iBAEjDrjD,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKwB,+BAA+B9J,KAChD2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACixE,GAAUxxE,GAAW,iBAE9BH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKyB,8BAA8B/J,KAC/C2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACyzE,GAAeh0E,GAAW,iBAEnCH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAK0B,qCAAqChK,KACtD2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACszE,GAASh4F,OAAAwE,OAAA,GAAK2f,EAAK,CAAE8zE,OAAO,EAAOv8F,SAAS,KAC7C,iBAERsoB,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EACLh6F,KAAMsI,EAAK2B,2CAA2CjK,KACtD2C,OAASN,GAAUu3F,EAChB13F,IAAAU,cAACszE,GAASh4F,OAAAwE,OAAA,GAAK2f,EAAK,CAAE8zE,OAAO,EAAOv8F,SAAS,KAC5C,iBAERsoB,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAK4B,iCAAiClK,KAClD2C,OAASN,GAAUu3F,EAChB13F,IAAAU,cAACouE,GAAkB3uE,MAE1BH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAK6B,kCAAkCnK,KACnD2C,OAASN,GAAUu3F,EAChB13F,IAAAU,cAACouE,GAAa9yF,OAAAwE,OAAA,GAAK2f,EAAK,CAAEkjD,SAAS,KAClC,iBAERrjD,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAK8B,0BAA0BpK,KAC3C2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACuhD,GAAe9hD,GAAW,iBAEnCH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAK+B,6BAA6BrK,KAC9C2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAAC0iD,GAAmBjjD,GAAW,iBAEvCH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKgC,8BAA8BtK,KAC/C2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAAC0iD,GAAcpnE,OAAAwE,OAAA,GAAK2f,EAAK,CAAEkjD,SAAS,KACpC,iBAERrjD,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKiC,kCAAkCvK,KACnD2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACm0E,GAAiB10E,GAAW,iBAErCH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EACLh6F,KAAMsI,EAAKkC,sCAAsCxK,KACjD2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACsuE,GAAoB7uE,GAAW,iBAExCH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EACLh6F,KAAMsI,EAAKmC,yCAAyCzK,KACpD2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACq0E,GAAgB50E,GAAW,iBAEpCH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKoC,6BAA6B1K,KAC9C2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACyuE,GAAehvE,GAAW,iBAEnCH,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKqC,gCAAgC3K,KACjD2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACmjD,GAAa7nE,OAAAwE,OAAA,GAAK2f,EAAK,CAAEkjD,SAAS,KACnC,iBAERrjD,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKsC,iCAAiC5K,KAClD2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACmjD,GAAa7nE,OAAAwE,OAAA,GAAK2f,EAAK,CAAEkjD,SAAS,KACnC,iBAERrjD,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKuC,oCAAoC7K,KACrD2C,OAASN,GAAUu3F,EACf13F,IAAAU,cAACuuE,GAAc9uE,GAAW,iBAElCH,IAAAU,cAACm3F,IAAK,CAACC,OAAK,EAACh6F,KAAMsI,EAAKwC,uBAAuB9K,MAC1C45F,EAAa13F,IAAAU,cAACswB,GAAY,MAAK,wBAEpChxB,IAAAU,cAACm3F,IAAK,CAACC,OAAK,EAACh6F,KAAMsI,EAAKyC,mCAAmC/K,MACtD45F,EAAa13F,IAAAU,cAAC6wB,GAAU,MAAK,wBAElCvxB,IAAAU,cAACm3F,IAAK,CAACC,OAAK,EAACh6F,KAAMsI,EAAK2C,iCAAiCjL,MACpD45F,EAAa13F,IAAAU,cAAC4wB,GAAU,MAAK,wBAElCtxB,IAAAU,cAACm3F,IAAK,CAACC,OAAK,EAACh6F,KAAMsI,EAAK6C,mCAAmCnL,MACtD45F,EAAa13F,IAAAU,cAACgxB,GAAa,MAAK,wBAErC1xB,IAAAU,cAACm3F,IAAK,CAACC,OAAK,EAACh6F,KAAMsI,EAAK+C,gCAAgCrL,MACnD45F,EAAa13F,IAAAU,cAAC+uB,GAAU,MAAK,wBAElCzvB,IAAAU,cAACm3F,IAAK,CAACC,OAAK,EAACh6F,KAAMsI,EAAKgD,gCAAgCtL,MACnD45F,EAAa13F,IAAAU,cAAC+wB,GAAO,MAAK,wBAE/BzxB,IAAAU,cAACm3F,IAAK,CAACC,OAAK,EAACh6F,KAAMsI,EAAKkD,kCAAkCxL,MACrD45F,EAAa13F,IAAAU,cAACowB,GAAY,MAAK,wBAEpC9wB,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKjW,MAAM2N,KACvB65F,UAAW/jB,KACf5zE,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKmD,aAAazL,KAC9B65F,UAAW5jB,KACf/zE,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKtS,YAAYgK,KAC7B2C,OAASN,GACLH,IAAAU,cAACszE,GAASh4F,OAAAwE,OAAA,GAAK2f,EAAK,CAAE8zE,OAAO,EAAMv8F,SAAS,OAEpDsoB,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKoD,cAAc1L,KAC/B65F,UAAWX,KACfh3F,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAK9R,WAAWwJ,KAC5B65F,UAAWpoB,KACfvvE,IAAAU,cAACm3F,IAAK,CACFC,OAAK,EAACh6F,KAAMsI,EAAKqD,kBAAkB3L,KACnC65F,UAAWroB,KACftvE,IAAAU,cAACm3F,IAAK,CAAC/5F,KAAK,IAAI65F,UAAWhxE,MAEX,ECrXhC,MAAMoxE,GAAqB,CACvB,CACI7kH,GAAI,EACJP,MAAO,+BACPmuC,OAAQ1a,EAAK7S,SAASuK,MAE1B,CACI5qB,GAAI,EACJP,MAAO,qCACPmuC,OAAQ1a,EAAK1Y,eAAeoQ,MAEhC,CACI5qB,GAAI,EACJP,MAAO,wBACPmuC,OAAQ1a,EAAKrU,OAAO+L,OAItBk6F,GAAa,CACf,CACI9kH,GAAI,EACJP,MAAO,mDACPmuC,OAAQ1a,EAAKc,cAAcpJ,MAE/B,CACI5qB,GAAI,EACJP,MAAO,8BACPmuC,OAAQ,MAIVm3E,GAAa,CACf,CACInoF,KAAM,kBACN58B,GAAI,EACJP,MAAO,yBACPmuC,OAAQ1a,EAAK7S,SAASuK,KACtBplB,KAAM,WACNw/G,mBAAmB,GAEvB,CACIpoF,KAAM,OACN58B,GAAI,EACJP,MAAO,uBACPmuC,OAAQ1a,EAAK1Y,eAAeoQ,KAC5BplB,KAAM,iBACNw/G,mBAAmB,GAEvB,CACIpoF,KAAM,OACN58B,GAAI,EACJP,MAAO,cACPmuC,OAAQ1a,EAAKrU,OAAO+L,KACpBplB,KAAM,SACNw/G,mBAAmB,GAEvB,CACIpoF,KAAM,OACN58B,GAAI,EACJP,MAAO,sCACPmuC,OAAQ,GAAG1a,EAAKa,WAAWnJ,yBAC3BplB,KAAM,aACNw/G,mBAAmB,GAEvB,CACIpoF,KAAM,gBACN58B,GAAI,EACJP,MAAO,mCACPmuC,OAAQ1a,EAAKc,cAAcpJ,KAC3BplB,KAAM,iBAEV,CACIo3B,KAAM,SACN58B,GAAI,EACJP,MAAO,mDACPmuC,OAAQ,GAAG1a,EAAK9Q,MAAMwI,oBACtBplB,KAAM,QACNw/G,mBAAmB,EACnB1zF,eAAgB,2BAEpB,CACIsL,KAAM,oBACN58B,GAAI,EACJP,MAAO,2DACPmuC,OAAQ1a,EAAKwC,uBAAuB9K,KACpCplB,KAAM,2CACNw/G,mBAAmB,EACnB1zF,eAAgB,uBAEpB,CACIsL,KAAM,iBACN58B,GAAI,EACJP,MAAO,+BACPmuC,OAAQ1a,EAAKoB,mBAAmB1J,KAChCplB,KAAM,qBACNw/G,mBAAmB,EACnB1zF,eAAgB,eAEpB,CACIsL,KAAM,cACN58B,GAAI,EACJP,MAAO,yCACPmuC,OAAQ1a,EAAKkB,mBAAmBxJ,KAChCplB,KAAM,qBACNw/G,mBAAmB,EACnB1zF,eAAgB,uBAEpB,CACIsL,KAAM,cACN58B,GAAI,GACJP,MAAO,kCACPmuC,OAAQ1a,EAAKmB,yBAAyBzJ,KACtCplB,KAAM,2BACNw/G,mBAAmB,EACnB1zF,eAAgB,mBAKlB2zF,GAAah4F,GAGU,KAFRigB,cAEJvlC,SACFmlB,IAAAU,cAAAV,IAAAyc,SAAA,MAGJzc,IAAAU,cAAA,OAAKxoB,MAAO,CAAC+7C,cAAe,WAIjCmkE,GAAYj4F,GAGW,KAFRigB,cAEJvlC,SACFmlB,IAAAU,cAAAV,IAAAyc,SAAA,MAIPzc,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,OAAKxoB,MAAO,CAACspC,UAAW,WACpBxhB,IAAAU,cAAA,OAAKxoB,MAAO,CAACmgH,SAAU,QAAS10D,MAAO,MAAOllB,OAAQ,QAASvQ,IAAI,gGAA6FF,ICvKjK,wyMDyKHhO,IAAAU,cAAA,OAAKxoB,MAAO,CAACspC,UAAW,SAAU5T,aAAc,SAAS,8FAQrE,MAAM0qF,WAAYr4F,YAEdC,YAAYC,GACRC,MAAMD,GAoDV,KAEA82B,mBAAsB12C,IAClB8f,KAAKwqB,SAAW,KAChBxqB,KAAK4Y,QAAQ5X,IACT9gB,GACA,IAAM8f,KAAKC,SAAS,CAACo2B,gBAAgB,KACxC,EACJ,KAEDQ,iBAAoB32C,IAChB8f,KAAKwqB,SAAW,KAChBxqB,KAAKk4F,kBACLl4F,KAAKC,SAAS,CAACo2B,gBAAgB,GAAO,EACzC,KAEDS,2BAA8BptC,IAC1BsW,KAAKwqB,SAAW,KAChBxqB,KAAKk4F,kBACLl4F,KAAKC,SAAS,CAACo2B,gBAAgB,GAAO,EACzC,KAED8hE,YAAc,KACVr5G,aAAqB,EACxB,KAEDs5G,aAAe,KACXp4F,KAAKq4F,eAAiBvyF,EAClB,oBACA9F,KAAKs4F,yBACLt4F,KAAKu4F,uBACLv4F,KAAKw4F,iCACR,EACJ,KAEDF,yBAA4Bp4G,IACxB8f,KAAKq4F,eAAiB,KACtBr4F,KAAKk4F,iBACD,IAAMl4F,KAAK4Y,QAAQxX,QAAO,IAAMpB,KAAKC,SAAS,CAACw4F,cAAc,OAChE,EACJ,KAEDF,uBAA0Br4G,IACtB8f,KAAKq4F,eAAiB,KACtBr4F,KAAKC,SAAS,CAACy4F,YAAa,4DAAwCx4G,EAAKiF,WAAW,EACvF,KAEDqzG,iCAAoC9uG,IAChCsW,KAAKq4F,eAAiB,KACtBr4F,KAAKC,SAAS,CAACy4F,YAAa,uGAA+DhvG,MAAW,EACzG,KAEDivG,wBAA2Bh4E,IACvB,GAAiB,OAAbA,EAAJ,CAIA,IAAK,IAAIxB,KAAQy4E,GACb,GAAIz4E,EAAK9mC,OAASsoC,EAEd,YADA3gB,KAAKC,SAAS,CAACuf,gBAAiBL,EAAKtsC,KAI7CmtB,KAAKC,SAAS,CAACuf,gBAAiB,MAPhC,MAFIxf,KAAKC,SAAS,CAACuf,gBAAiB,MASE,EACzC,KAaD04E,gBAAkB,WAAoB,IAAnBn/G,EAAQhF,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAC,KACxB+E,YAAazF,IAAmB0F,EACpC,EAlIIinB,KAAKG,MAAQ,CACTk2B,eAAgBj9C,OAAO6F,SAASzE,WAAaurB,EAAKG,MAAMzI,KACxD+hB,gBAAiB,KACjBI,UAAU,EACVD,QAAQ,EACRi5E,YAAa,IACbF,YAAa,GACbD,cAAc,GAGlBz4F,KAAK64F,cAAgBl5F,IAAMuc,YAE3Blc,KAAKwqB,SAAW,KAChBxqB,KAAKq4F,eAAiB,KAEtBr4F,KAAK84F,kBAAoB94F,KAAK84F,kBAAkBz0E,KAAKrkB,KACzD,CAIAmZ,oBACInZ,KAAK84F,oBACL1/G,OAAO2/G,iBAAiB,SAAU/4F,KAAK84F,mBAEnC94F,KAAKG,MAAMk2B,iBAEPj+C,YAAe/E,KACf2sB,KAAKwqB,SAAWpmB,EACZ,+BACA,MACA,CAAC,EACD,CAAC,EACDpE,KAAK42B,mBACL52B,KAAK62B,iBACL72B,KAAK82B,4BAGT92B,KAAKC,SAAS,CAACo2B,gBAAgB,IAG3C,CAEA7R,uBAEI,IAAK,IAAIrnC,IAAS,CAAC6iB,KAAKwqB,SAAUxqB,KAAKq4F,gBACrB,OAAVl7G,GACAA,EAAMytC,OAGlB,CAsEAouE,mBAAmBnmH,GACfmtB,KAAKC,SAAS,CAACuf,gBAAiB3sC,IAChCkF,YAAkBioB,KAAK64F,cAC3B,CAEAC,oBACI94F,KAAKC,SAAS,CAAC0f,SAAQvmC,OAAO6/G,YAAc,OAChD,CAQA74F,SACI,GAAIJ,KAAKG,MAAMk2B,eACX,OAAO12B,IAAAU,cAACgM,EAAI,CAACK,MAAI,GAAC,gCAGtB,IAAIwsF,EAAY,IAAIvB,IAMpB,OALI33F,KAAK4Y,QAAQ/jB,KAAK5E,aAClBipG,EAAY,IAAIxB,MAAuBC,KAKvCh4F,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAC84F,IAAM,KACHx5F,IAAAU,cAACX,EAAY,CAAC7nB,MAAO,CAAC0oC,QAAS,SAC3B5gB,IAAAU,cAAC8zB,GAAS,CAACvmC,SAAUsrG,IACrBv5F,IAAAU,cAAC4hD,GAAe,MACfjiD,KAAK03B,eACN/3B,IAAAU,cAAC+4F,IAAoB,MACpBp5F,KAAKq5F,aACLr5F,KAAK43B,gBACL53B,KAAKqxE,iBAGbrxE,KAAKG,MAAMu4F,YAAY1kH,OAAS,GAAKgsB,KAAKs5F,oBAC1Ct5F,KAAKG,MAAMs4F,cAAgBz4F,KAAK45C,qBAG7C,CAEAliB,eACI,MAAM,OAAE/X,GAAW3f,KAAKG,MACxB,OACIR,IAAAU,cAACk5F,IAAS,CAACjmE,OAAQ3T,EAAQpT,WAAYoT,GAAU,wBAC7ChgB,IAAAU,cAACm5F,IAAY,KACT75F,IAAAU,cAACo5F,IAAgB,CAAC1pF,YAAU,GACvB4P,GACGhgB,IAAAU,cAAC8O,IAAM,CACH5C,UAAU,8BACV6C,QAASA,KAAOpP,KAAKC,UAASC,IAAS,CAAM0f,UAAW1f,EAAU0f,YAAW,EAC7ElrB,MAAM,mBACN6a,YAAU,GACV5P,IAAAU,cAAA,QAAMkM,UAAU,WAAU,oBAC1B5M,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAK,UAGtC9P,IAAAU,cAACq5F,IAAc,CAAC5sF,IAAI,MAChBnN,IAAAU,cAACwQ,IAAI,CAAChnB,GAAIkc,EAAKC,KAAKvI,KAAM8O,UAAU,mBAAkB,gCAK9D5M,IAAAU,cAACo5F,IAAgB,CAACxqF,UAAQ,GACtBtP,IAAAU,cAAC43C,GAAK,CAACx/B,IAAK30B,IAAM1K,OAAOC,iBAAmByK,CAAC,IAC5Ckc,KAAK25F,qBAK1B,CAEAA,mBACI,GAAqC,OAAjC35F,KAAK4Y,QAAQ/jB,KAAK5E,WAClB,OACI0P,IAAAU,cAAC8O,IAAM,CACH5C,UAAU,8BACV6C,QAASpP,KAAKm4F,YACdzjG,MAAM,UACN6a,YAAU,GACV5P,IAAAU,cAAA,QAAMkM,UAAU,WAAU,oBAC1B5M,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAK,wBAI1C,MAAM,SAAE7sB,EAAQ,QAAEE,GAAYkd,KAAK4Y,QAAQ/jB,KAC3C,OACI8K,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAACwQ,IAAI,CAAChnB,GAAIkc,EAAKiB,eAAevJ,KAAM8O,UAAU,aAC1C5M,IAAAU,cAACu5F,IAAmB,CAChB,cAAY,QACZ,aAAW,gBACXllG,MAAM,gBACN+a,KAAK,oBAEb9P,IAAAU,cAACgM,EAAI,CAACE,UAAU,oBAAoB3pB,EAAS,IAAEE,GAC/C6c,IAAAU,cAAC8O,IAAM,CACH5C,UAAU,8BACV6C,QAASpP,KAAKo4F,aACd1jG,MAAM,UACN6a,YAAU,GACV5P,IAAAU,cAAA,QAAMkM,UAAU,WAAU,oBAC1B5M,IAAAU,cAACmP,IAAI,CAAC,cAAY,OAAOC,KAAK,wBAI9C,CAEA4pF,aACI,MAAM,gBACF75E,EAAe,OACfG,EAAM,SACNC,GACA5f,KAAKG,MAET,IAAI86D,EAAY,IAAI28B,IACpB,GAAK53F,KAAK4Y,QAAQ/jB,KAAK5E,WAEhB,CACH,MAAM8Q,EAAcf,KAAK4Y,QAAQ7X,YACjCk6D,EAAYA,EAAU56E,QAClB8+B,IAASA,EAAKhb,gBACVpD,EAAYoe,EAAKhb,kBAAmB,GAEhD,MAPI82D,EAAYA,EAAU56E,QAAO8+B,IAAmC,IAA3BA,EAAK04E,oBAS9C,OACIl4F,IAAAU,cAACqf,GAAU,CACP9xB,SAAUqtE,EACVz7C,gBAAiBA,EACjBI,SAAUA,EACVC,YAAaA,KAAO7f,KAAKC,UAASC,IAAS,CAAM0f,UAAW1f,EAAU0f,YAAW,EACjFD,OAAQA,GAEpB,CAEAiY,gBACI,OACIj4B,IAAAU,cAACw5F,IAAgB,KACbl6F,IAAAU,cAAA,OAAKoY,IAAKzY,KAAK64F,cAAev7E,SAAS,MACnC3d,IAAAU,cAAC40E,GAAe,MAChBt1E,IAAAU,cAAA,QAAMkM,UAAU,QACZ5M,IAAAU,cAAC62F,GAAM,CACHjyC,aAAcjlD,KAAKm4F,YACnBhB,oBAAqBn3F,KAAK24F,4BAGtCh5F,IAAAU,cAACy3F,GAAS,MAGtB,CAEAzmB,eACI,OACI1xE,IAAAU,cAAAV,IAAAyc,SAAA,KACIzc,IAAAU,cAAA,OAAKxoB,MAAO,CAAC4mC,SAAU,KACvB9e,IAAAU,cAAA,UAAQkM,UAAU,UACd5M,IAAAU,cAAA,OAAK,aAAW,sBACZV,IAAAU,cAAC03F,GAAQ,MACTp4F,IAAAU,cAAA,MAAIkM,UAAU,gBACV5M,IAAAU,cAAA,UAAIV,IAAAU,cAACwQ,IAAI,CAAChnB,GAAIkc,EAAKjW,MAAM2N,KAAM8O,UAAU,+BAA8B,UACvE5M,IAAAU,cAAA,UAAIV,IAAAU,cAACwQ,IAAI,CAAChnB,GAAIkc,EAAKtS,YAAYgK,KAAM8O,UAAU,+BAA8B,cAC7E5M,IAAAU,cAAA,UAAIV,IAAAU,cAACwQ,IAAI,CAAChnB,GAAIkc,EAAK9R,WAAWwJ,KAAM8O,UAAU,+BAA8B,kBAMpG,CAEA+sF,oBACI,OAAO35F,IAAAU,cAACu3C,GAAa,CACV7+D,SAAUA,IAAMinB,KAAKC,SAAS,CAACy4F,YAAa,KAC5C5wG,OAAK,EACLy5B,aAAcvhB,KAAKG,MAAMu4F,YACzBp3E,YAAY,gBACZy2B,YAAU,GACzB,CAEA6B,qBACI,OAAOj6C,IAAAU,cAACu3C,GAAa,CACV7+D,SAAUA,IAAMK,OAAO6F,SAASq5D,SAChCR,eAAe,mHACfv2B,aAAa,0CACbw2B,YAAU,GACzB,EAIJkgD,GAAInxD,YAAcjmC,EAEHo3F,UEneK6B,QACW,cAA7B1gH,OAAO6F,SAAS9E,UAEe,UAA7Bf,OAAO6F,SAAS9E,UAEhBf,OAAO6F,SAAS9E,SAASY,MACvB,2D,OCPNg/G,IAAS35F,OACLT,IAAAU,cAACkQ,IAAa,CAACC,QAASjH,GACpB5J,IAAAU,cAACiB,EAAY,KACT3B,IAAAU,cAAC43F,GAAG,QAGZ5jH,SAAS2lH,eAAe,SDgHtB,kBAAmBC,WACrBA,UAAUC,cAAcC,MAAMxsC,MAAKysC,IACjCA,EAAaC,YAAY,G","file":"static/js/main.2b19e2e0.chunk.js","sourcesContent":["const SELECT_CLASSNAME = 'select-custom';\nconst SELECT_INVALID_CLASSNAME = 'select-custom select-custom--invalid';\n\n///////////////////////////////////////////////////////////////////////////////\n// projekty //\n///////////////////////////////////////////////////////////////////////////////\n\nconst CZY_PROJEKT_CHOICES = [\n ['all', 'Wszystkie'],\n ['true', 'Projekty'],\n ['false', 'Nabory'],\n]\n\n// used in projects management filters\nconst PROJECTS_MANAGEMENTS_CHOICES = [\n ['all', 'Wszystkie'],\n ['project', 'Projekt'],\n ['enrollment', 'Nabór'],\n]\n\n///////////////////////////////////////////////////////////////////////////////\n// ogloszenia //\n///////////////////////////////////////////////////////////////////////////////\nconst SEARCH_DATE_CHOICES = [\n ['0', '--- Wybierz ---', '', ''],\n ['last_week', 'ostatni tydzieÅ„', '-1week', 'today'],\n ['last_two_weeks', 'ostatnie 2 tygodnie', '-2weeks', 'today'],\n ['last_month', 'ostatni miesiÄ…c', '-1month', 'today'],\n ['custom', 'niestandardowo', '', ''],\n];\n\nconst SEARCH_CUSTOM_NAME = SEARCH_DATE_CHOICES[4][0];\n\nconst ADVERTISEMENT_STATUS_FILTERS_CHOICES = [\n ['all', 'Wszystkie'],\n ['CANCELLED', 'Anulowane'],\n ['PUBLISHED', 'Opublikowane'],\n ['DRAFT', 'Robocze'],\n ['RESOLVED', 'RozstrzygniÄ™te'],\n ['LOCKED', 'Zablokowane'],\n ['CLOSED', 'ZamkniÄ™te'],\n].map(choice => ({value: choice[0], label: choice[1]}));\n\n// Current values versus values from old Baza KonkurencyjnoÅ›ci\nconst MIEJSCE_REALIZACJI_OLD_BK_DICT = {\n 'poland': 0,\n 'abroad': -1,\n '02': 1,\n '04': 2,\n '06': 3,\n '08': 4,\n '10': 5,\n '12': 6,\n '14': 7,\n '16': 8,\n '18': 9,\n '20': 10,\n '22': 11,\n '24': 12,\n '26': 13,\n '28': 14,\n '30': 15,\n '32': 16,\n};\n\nconst NIP_CHARS_IMPORTANCE = {\n 0: 6,\n 1: 5,\n 2: 7,\n 3: 2,\n 4: 3,\n 5: 4,\n 6: 5,\n 7: 6,\n 8: 7,\n};\n\nconst PESEL_CHARS_IMPORTANCE = {\n 0: 9,\n 1: 7,\n 2: 3,\n 3: 1,\n 4: 9,\n 5: 7,\n 6: 3,\n 7: 1,\n 8: 9,\n 9: 7,\n};\n\n///////////////////////////////////////////////////////////////////////////////\n// zarzÄ…dzanie treÅ›ciÄ… //\n///////////////////////////////////////////////////////////////////////////////\n\nconst EKRANY = [\n ['form_ogloszenie_przedmiot','Formularz dodawania ogÅ‚oszenia - Przedmiot', 'form_announcement_item'],\n ['form_ogloszenie_terminy','Formularz dodawania ogÅ‚oszenia - Terminy', 'form_announcement_deadlines'],\n ['form_ogloszenie_warunki','Formularz dodawania ogÅ‚oszenia - Warunki', 'form_announcement_conditions'],\n ['form_ogloszenie_czesciKryteria','Formularz dodawania ogÅ‚oszenia - Części i kryteria', 'form_announcement_partscriteria'],\n ['form_ogloszenie_pozostale','Formularz dodawania ogÅ‚oszenia - PozostaÅ‚e', 'form_announcement_others'],\n ['form_ogloszenie_zalaczniki','Formularz dodawania ogÅ‚oszenia - ZaÅ‚Ä…czniki', 'form_announcement_attachments'],\n ['projekty_lista_ogloszeniodawca','Projekty - Lista projektów - OgÅ‚oszeniodawca', 'projects_list_advertiser'],\n ['ogloszenia_lista_ogloszeniodawca','OgÅ‚oszenia - Lista ogÅ‚oszeÅ„ - OgÅ‚oszeniodawca', 'announcements_list_advertiser'],\n ['newsletter_ustawienia','Newsletter', 'newsletter_settings'],\n ['ulubione_lista','Ulubione', 'favorites_list'],\n];\n\nconst EKRANY_DICT = {};\nfor (let e of EKRANY) {\n EKRANY_DICT[e[2]] = {id: e[0], label: e[1]};\n}\n\n// pomoc types\nconst EKRANOWA = 'screen_assigned';\nconst OGOLNA = 'general';\n\n\n///////////////////////////////////////////////////////////////////////////////\n// użytkownicy //\n///////////////////////////////////////////////////////////////////////////////\nconst USER_STATUS_CHOICES = [\n ['all', 'Wszyscy'],\n ['active', 'Aktywni'],\n ['blocked', 'Zablokowani'],\n];\nconst RODZAJ_ADRESU_CHOICES = [\n {\n value: 'poland',\n label: 'Polska',\n },\n {\n value: 'abroad',\n label: 'Zagranica',\n },\n];\nconst RODZAJ_ADRESU_FILTERS_CHOICES = [\n {\n value: 'all',\n label: 'Wszystkie',\n },\n ...RODZAJ_ADRESU_CHOICES\n];\nconst TYP_NUMERU_IDENTYFIKACYJNEGO = [\n ['nip', 'NIP'],\n ['pesel', 'PESEL'],\n ['numer_zagraniczny', 'Numer identyfikacyjny'],\n].map(choice => ({value: choice[0], label: choice[1]}));\nconst TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES = [\n ['all', 'Wszystkie'],\n ['nip', 'NIP'],\n ['pesel', 'PESEL'],\n].map(choice => ({value: choice[0], label: choice[1]}));\nconst TOKEN_COOKIE_NAME = 'auth_token';\nconst USER_DATA_COOKIE_NAME = 'auth_data';\n\n\n///////////////////////////////////////////////////////////////////////////////\n// oferty //\n///////////////////////////////////////////////////////////////////////////////\nconst OFERTA_STATUSES = {\n draft: {\n label: 'DRAFT',\n nazwa: 'Robocza',\n },\n submitted: {\n label: 'SUBMITTED',\n nazwa: 'ZÅ‚ożona',\n },\n withdrawn: {\n label: 'WITHDRAWN',\n nazwa: 'Wycofana',\n },\n};\n\n\nexport {\n ADVERTISEMENT_STATUS_FILTERS_CHOICES,\n CZY_PROJEKT_CHOICES,\n EKRANOWA,\n EKRANY_DICT,\n MIEJSCE_REALIZACJI_OLD_BK_DICT,\n NIP_CHARS_IMPORTANCE,\n OFERTA_STATUSES,\n OGOLNA,\n PESEL_CHARS_IMPORTANCE,\n PROJECTS_MANAGEMENTS_CHOICES,\n RODZAJ_ADRESU_CHOICES,\n RODZAJ_ADRESU_FILTERS_CHOICES,\n SEARCH_CUSTOM_NAME,\n SEARCH_DATE_CHOICES,\n SELECT_CLASSNAME,\n SELECT_INVALID_CLASSNAME,\n TOKEN_COOKIE_NAME,\n TYP_NUMERU_IDENTYFIKACYJNEGO,\n TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES,\n USER_DATA_COOKIE_NAME,\n USER_STATUS_CHOICES,\n};\n","import { saveAs } from 'file-saver';\nimport { pdf } from '@react-pdf/renderer';\n\nimport { TYP_NUMERU_IDENTYFIKACYJNEGO, TOKEN_COOKIE_NAME } from './const';\n\n\nconst emptyValueList = [\n '',\n 'Wybierz',\n '--- Wybierz ---',\n 'Wybierz...',\n 'Wpisz co najmniej 5 cyfr lub 3 litery...',\n 'Wpisz co najmniej 3 litery...',\n 'Zacznij wpisywać...'\n];\n\n\nconst computeProgress = (additionalAttrFilledLen=0, additionalAttrLen=0) => {\n let filledInputsLen = 0;\n\n // text, number, date, textarea inputs\n // 'user-searching-input' if for user changing\n const inputs = document.querySelectorAll(\n 'input[type=text]:not([disabled=\"\"]):not([id=\"user-searching-input\"]), input[type=number]:not([disabled=\"\"]), input[type=date]:not([disabled=\"\"]), input[type=file]:not([disabled=\"\"]), textarea:not([disabled=\"\"])');\n for (let $i of inputs) {\n if ($i.id.startsWith('react-select')) {\n if (!emptyValueList.includes($i.parentNode.parentNode.parentNode.firstChild.textContent)) {\n filledInputsLen++;\n }\n } else {\n if ($i.value) {\n filledInputsLen++;\n }\n }\n }\n\n // selects\n const selectInputs = document.querySelectorAll('select:not([multiple=\"\"])');\n for (let i of selectInputs) {\n if (i.value !== '0') {\n filledInputsLen++;\n }\n }\n\n // multiselects\n const multiselectInputs = document.querySelectorAll('select[multiple=\"\"]');\n for (let i of multiselectInputs) {\n if (i.selectedOptions.length) {\n filledInputsLen++;\n }\n }\n\n filledInputsLen += additionalAttrFilledLen;\n const inputsLen = inputs.length + selectInputs.length + multiselectInputs.length + additionalAttrLen;\n return inputsLen === 0 ? 1 : (filledInputsLen === 0 ? 0 : filledInputsLen / inputsLen);\n}\n\n\nconst getLastTemporaryId = (attribute, subAttributeName) => {\n // get last subAttribute temporaryId (needed for adding subAttribute)\n let temporaryIds = [];\n for (let obj of attribute) {\n temporaryIds = [...temporaryIds, ...(obj[subAttributeName] || []).map((o) => parseInt(o.temporaryId))];\n }\n return temporaryIds.length > 0 ? Math.max(...temporaryIds) : 0\n}\n\n\nconst getLastTemporaryIdFromList = (list) => {\n const temporaryIds = list.map((obj) => obj.temporaryId);\n return temporaryIds.length > 0 ? Math.max(...temporaryIds) : 0\n}\n\n\nconst fillWithLeadingZero = (value, length=2) => {\n value = value.toString();\n if (value.length >= length) {\n return value\n }\n return `${'0'.repeat(length - value.length)}${value}`\n};\n\nconst datetimeStringToISO = (date) => {\n if (!date) { return '' }\n return date.replace(/\\s/g, 'T')\n}\n\nconst dateToString = (date) => {\n if (!date) { return '' }\n return `${date.getFullYear()}-${fillWithLeadingZero(date.getMonth() + 1)}-${fillWithLeadingZero(date.getDate())}`\n};\n\nconst dateToStringOldBK = (date) => {\n if (!date) { return '' }\n return `${fillWithLeadingZero(date.getDate())}.${fillWithLeadingZero(date.getMonth() + 1)}.${date.getFullYear()}`\n};\n\nconst datetimeToString = (date) => {\n if (!date) { return '' }\n return `${date.getFullYear()}-${fillWithLeadingZero(date.getMonth() + 1)}-${fillWithLeadingZero(date.getDate())} ${fillWithLeadingZero(date.getHours())}:${fillWithLeadingZero(date.getMinutes())}`\n};\n\nconst dateStringToYearMonth = (dateString) => {\n return (dateString || '').substring(0, 7)\n};\n\nconst timeToString = (date) => {\n if (!date) { return '' }\n return `${fillWithLeadingZero(date.getHours())}:${fillWithLeadingZero(date.getMinutes())}:${fillWithLeadingZero(date.getSeconds())}`\n};\n\nconst listOrEmpty = (value) => {\n return value || []\n}\n\nconst stringOrEmpty = (value) => {\n return value || ''\n}\n\nconst isNotEmpty = (value, fieldType='str') => {\n if (fieldType === 'list') {\n value = listOrEmpty(value);\n }\n value = stringOrEmpty(value);\n return value.length > 0\n};\n\nconst setCustomSelectAttributes = (selectRef) => {\n const inputId = selectRef.current.querySelector('input').getAttribute('id');\n selectRef.current.querySelector('label').setAttribute('for', inputId);\n};\n\nconst setCustomInputAttributes = (inputRef) => {\n const setAttr = (inputRef, querySelector) => {\n const button = inputRef.current.querySelector(querySelector);\n\n if (button) {\n button.setAttribute('aria-label', 'Wyczyść pole');\n button.setAttribute('type', 'button');\n button.style.right = '12px';\n }\n };\n\n setAttr(inputRef, 'button.react-datepicker__close-icon');\n};\n\nconst setFocusOnElement = (elRef) => {\n if (elRef) {\n elRef.current.focus();\n elRef.current.setAttribute('tabIndex', '-1');\n }\n}\n\nconst triggerBodyClick = () => {\n document.querySelector('body').click();\n};\n\nconst getCookieValue = (name) => {\n for (let cookie of document.cookie.split(';')) {\n const [n, v] = cookie.trim().split('=');\n if (n === name) {\n return v\n }\n }\n return null\n};\n\nconst getAuthTokenCookieValue = () => {\n let authTokenCookieValue = getCookieValue(TOKEN_COOKIE_NAME);\n if (authTokenCookieValue === 'null') {\n authTokenCookieValue = null;\n }\n if (authTokenCookieValue) {\n authTokenCookieValue = decodeURIComponent(authTokenCookieValue);\n }\n return authTokenCookieValue\n};\n\nconst deleteCookie = (name, callback=null) => {\n document.cookie = `${name}=null;Max-Age=10;path=/`;\n if (callback) { callback() }\n};\n\nconst refreshCookie = (name, maxAge, value=null) => {\n value = value || getCookieValue(name);\n if (value) {\n document.cookie = `${name}=${value};Max-Age=${maxAge};path=/`;\n }\n};\n\nconst refreshTimerAfterRequest = (authTokenCookieValue, statusCode) => {\n if (!authTokenCookieValue || (statusCode > 400 && statusCode !== 403)) {\n if (statusCode === 401) {\n if (window.sessionComponent) {\n window.sessionComponent.showUnauthorizedMessage();\n } else {\n // user couldn't authenticate, remove cookie\n deleteCookie(TOKEN_COOKIE_NAME);\n }\n }\n return\n }\n if (window.sessionComponent) {\n window.sessionComponent.refreshTimerAfterRequest(authTokenCookieValue);\n }\n};\n\nconst refreshTimerAfterSativaRequest = (authTokenCookieValue, statusCode) => {\n if (window.sessionComponent) {\n window.sessionComponent.handleRefreshSessionTime();\n }\n};\n\nconst countWysiwygChars = (content) => {\n if (!content) { return 0 }\n let counter = 0;\n for (let block of content.blocks) {\n counter += block.text.length;\n counter++;\n }\n // remove enter after last block\n counter--;\n return counter\n};\n\nconst extractYoutubeSrc = (url) => {\n /*\n examples:\n http://www.youtube.com/watch?v=KjgWWjkNbhU&feature=youtu.be\n http://www.youtube.com/watch?v=KjgWWjkNbhU\n http://youtu.be/KjgWWjkNbhU\n with timing\n https://youtu.be/KjgWWjkNbhU?t=9s\n https://www.youtube.com/watch?time_continue=9&v=KjgWWjkNbhU\n return\n http://www.youtube.com/embed/KjgWWjkNbhU?rel=0[&start=9 opcja]\n */\n\n const long_domain = 'www.youtube.com',\n short_domain = 'youtu.be';\n\n try {\n url = new URL(url);\n } catch {\n return ''\n }\n\n if (![long_domain, short_domain].includes(url.hostname)) { return ''}\n\n const params = new URLSearchParams(url.searchParams);\n let videoId;\n if (url.hostname === long_domain && url.pathname.startsWith('/watch')) {\n // Long url - http://www.youtube.com/watch?v=KjgWWjkNbhU\n videoId = params.get('v');\n } else {\n // Short url - http://youtu.be/KjgWWjkNbhU\n // Embed url - https://www.youtube.com/embed/KjgWWjkNbhU\n const splitedPath = url.pathname.split('/')\n videoId = splitedPath[splitedPath.length - 1]\n }\n\n if (!videoId) { return '' }\n\n const _boolToInt = (paramString) => {\n if (['1', 'true', 'True'].includes(paramString)) { return 1 }\n if (['0', 'false', 'False'].includes(paramString)) { return 0 }\n return null\n };\n\n const _timeInSeconds = (timeString) => {\n const regex = /^((?<days>\\d+)d)?((?<hours>\\d+)h)?((?<minutes>\\d+)m)?((?<seconds>\\d+)s?)?$/gi;\n\n const match = regex.exec(timeString || '');\n if (!match) { return null }\n\n const durationGroups = match.groups;\n let duration = 0;\n const timeDict = {\n days: 60 * 60 * 24,\n hours: 60 * 60,\n minutes: 60,\n seconds: 1,\n };\n\n for (let [key, multipleValue] of Object.entries(timeDict)) {\n if (durationGroups[key]) {\n duration += (parseInt(durationGroups[key]) || 0) * multipleValue;\n }\n }\n\n return duration || null\n };\n\n const _timeInInt = (timeString) => {\n // parseInt returns first digits from string, we don't want to do that\n const regex = /^\\d+$/;\n if (!regex.exec(timeString)) { return null }\n return parseInt(timeString);\n };\n\n const allowedParams =[\n {\n name: 'rel',\n iframeParamName: 'rel',\n convertFunc: _boolToInt,\n default_: 0,\n },\n {\n name: 'loop',\n iframeParamName: 'loop',\n convertFunc: _boolToInt,\n },\n {\n name: 't',\n iframeParamName: 'start',\n convertFunc: _timeInSeconds,\n },\n {\n name: 'time_continue',\n iframeParamName: 'start',\n convertFunc: _timeInSeconds,\n },\n {\n name: 'start',\n iframeParamName: 'start',\n convertFunc: _timeInInt,\n },\n {\n name: 'end',\n iframeParamName: 'end',\n convertFunc: _timeInSeconds,\n },\n ];\n\n const iframeParams = {};\n for (let p of allowedParams) {\n const paramStr = params.get(p['name']);\n if (paramStr) {\n // convert param value string\n let value = p['convertFunc'](paramStr);\n if (value === null) {\n if (!Object.keys(p).includes('default_')) {\n // param value is invalid and it hasn't got default\n // skip this param\n continue\n }\n // param value is invalid, get default\n value = p['default_'];\n }\n iframeParams[p['iframeParamName']] = value;\n } else if (Object.keys(p).includes('default_')) {\n iframeParams[p['iframeParamName']] = p['default_'];\n }\n }\n return `${url.protocol}//www.youtube.com/embed/${videoId}?${new URLSearchParams(iframeParams).toString()}`\n};\n\nconst getRodzajAdresuDict = (kraj) => {\n if (kraj === 'Polska') {\n return {\n value: 'poland',\n label: 'Polska',\n }\n }\n return {\n value: 'abroad',\n label: 'Zagranica',\n }\n}\n\nconst generatePdfDocument = async (documentComponent, fileName, creatingCallback) => {\n const blob = await pdf(documentComponent).toBlob();\n if (creatingCallback) {\n creatingCallback();\n }\n saveAs(blob, fileName);\n};\n\nconst saveFileFromApi = async (url, fileName) => {\n\tconst authTokenCookieValue = getAuthTokenCookieValue();\n\t\n\tlet result = null;\n\tif(authTokenCookieValue){\n\t result = await fetch(url, {\t\n\t headers: {'X-Auth-Token': authTokenCookieValue}\n\t })\n\t}else {\n\t\tresult = await fetch(url)\n\t}\n\n\tif(result != null){\n \tconst blob = await result.blob()\n\t\tsaveAs(blob, fileName);\n\t}\n };\n\nconst getBreakIndex = (charsList, slicedLine) => {\n let splittingCharsIndexes = charsList.map(\n char => slicedLine.lastIndexOf(char));\n return Math.max(...splittingCharsIndexes)\n}\n\n\nconst splitLineByChar = (text) => {\n const textLength = text.length;\n\n let lines = [];\n let line = '';\n let lineLength = 0;\n let entersInLine = 0;\n\n let i = 0;\n while (i < textLength) {\n let char = text[i];\n const isEnter = /\\n/.test(char);\n if (isEnter) {\n entersInLine += 1;\n }\n line += char;\n i++;\n lineLength++;\n if (lineLength >= 1000 || entersInLine >= 40) {\n if (isEnter) {\n lines.push(line);\n line = '';\n lineLength = 0;\n entersInLine = 0;\n } else {\n // find first enter char before missing 4000th char for this line in missing text\n const missingText = text.substring(i, i + 4001 - lineLength);\n const enterIndex = missingText.indexOf('\\n');\n if (enterIndex > -1) {\n // add chars until enter\n line += missingText.substring(0, enterIndex + 1);\n lines.push(line);\n line = '';\n lineLength = 0;\n entersInLine = 0;\n i += enterIndex + 1;\n } else {\n // check length of real missing text\n const realMissingText = text.substring(i);\n if (lineLength + realMissingText.length < 4000) {\n line += realMissingText;\n i += realMissingText.length;\n } else {\n // maybe there is some char from the list before 4000th char\n const breakIndex = getBreakIndex([' ', ',', ';', '?', '!'], missingText);\n if (breakIndex > -1) {\n line += missingText.substring(0, breakIndex + 1)\n lines.push(line);\n line = '';\n lineLength = 0;\n entersInLine = 0;\n i += breakIndex + 1;\n } else {\n // cut line util 4001st char\n line += missingText;\n lines.push(line);\n line = '';\n lineLength = 0;\n entersInLine = 0;\n i += missingText.length;\n }\n }\n }\n }\n }\n }\n lines.push(line)\n return lines\n};\n\n\nconst roundStringTo = (value, n=2) => {\n if (!value.length) {\n return value\n }\n value = value.replace(',', '.');\n // cut to n decimal\n const splittedValue = value.split('.');\n\n let firstPart = splittedValue[0];\n // manage leading zeros\n if (!firstPart) {\n firstPart ='0';\n } else {\n while (true) {\n if (firstPart.length > 1 && firstPart[0] === '0') {\n firstPart = firstPart.slice(1);\n } else {\n break\n }\n }\n }\n return `${firstPart},${splittedValue.length > 1 ? splittedValue[1].slice(0, n).padEnd(n, '0') : '00'}`\n};\n\nconst redirectToLoginView = (ovverrideCurrentPathname = true) => {\n if(ovverrideCurrentPathname) {\n sessionStorage.setItem(\n 'currentPathname', window.location.pathname + window.location.search);\n }\n\n // \"log in\" user, go to backend\n window.location.href = '/api/authentication/login-redirect';\n}\n\nconst slugify = (value) => {\n return value.toString().toLowerCase().trim()\n .replace(/\\s+/g, '-') // Replace spaces with '-'\n .replace(/Ä…/g, 'a') // Replace Polish char\n .replace(/ć/g, 'c') // Replace Polish char\n .replace(/Ä™/g, 'e') // Replace Polish char\n .replace(/Å‚/g, 'Å‚') // Replace Polish char\n .replace(/Å„/g, 'n') // Replace Polish char\n .replace(/ó/g, 'o') // Replace Polish char\n .replace(/Å›/g, 's') // Replace Polish char\n .replace(/ź/g, 'z') // Replace Polish char\n .replace(/ż/g, 'z') // Replace Polish char\n .replace(/[^\\w-]+/g, '') // Remove all non-word chars\n .replace(/--+/g, '-') // Replace multiple '-' with single '-'\n};\n\nconst sortOrderItems = (orderItem1, orderItem2) => {\n return orderItem1.temporaryId > orderItem2.temporaryId ? 1 : -1\n};\n\nconst getSortedOrderItemsFromOrder = (orderList) => {\n let orderItems = [];\n for (let order of orderList) {\n for (let orderItem of order.przedmiotyZamowienia) {\n orderItems.push(orderItem);\n }\n }\n orderItems.sort(sortOrderItems);\n return orderItems\n};\n\nconst getOrderItemsLength = (orderList) => {\n let orderItems = [];\n for (let order of orderList) {\n for (let orderItem of order.przedmiotyZamowienia) {\n orderItems.push(orderItem);\n }\n }\n return orderItems.length\n};\n\nconst reformatDanePodmiotu = (data) => {\n if (data) {\n return Object.assign(\n {}, data,\n {\n typNumeruIdentyfikacyjnego: TYP_NUMERU_IDENTYFIKACYJNEGO.filter(\n t => t.value === data.typNumeruIdentyfikacyjnego)[0] || TYP_NUMERU_IDENTYFIKACYJNEGO[0],\n rodzajAdresu: getRodzajAdresuDict(data.adres.kraj),\n }\n )\n }\n return {}\n};\n\nconst getPricesRange = (prices) => {\n let pricesDict = {};\n let maxPriceLength = Math.max(...prices.map(p => p.length));\n for (let price of prices) {\n pricesDict[price.padStart(maxPriceLength, '0')] = price;\n }\n const paddedPriced = Object.keys(pricesDict).sort();\n return {\n min: pricesDict[paddedPriced[0]],\n max: pricesDict[paddedPriced[paddedPriced.length - 1]]\n }\n};\n\nconst isAdvertisementLocked = (statusDict) => {\n return ((statusDict || {}).label || '') === 'LOCKED'\n};\n\n// pagination\nconst checkHasPrev = (pageNumber) => {\n return pageNumber > 1\n};\n\nconst checkHasNext = (paginatedBy, pageNumber, total) => {\n return Math.ceil(total / paginatedBy) > pageNumber\n}\n\n// implementation levels\nconst sortProgrammes = (programme1, programme2) => {\n return programme1.code.localeCompare(programme2.code, 'pl')\n}\n\nconst sortImplementationLevelByNumberCode = (obj1, obj2) => {\n return obj1.code.localeCompare(obj2.code, 'pl')\n};\n\nconst hasSubactivities = (perspectiveData) => {\n perspectiveData = perspectiveData || {};\n return (\n perspectiveData.activity_types || perspectiveData.activityTypes || []\n ).includes('subactivities')\n};\n\nconst hasPerspectiveRegions = (perspectiveData) => {\n perspectiveData = perspectiveData || {};\n return (\n perspectiveData.activity_types || perspectiveData.activityTypes || []\n ).includes('regions')\n};\n\nconst hasPerspectiveInstitutions = (perspectiveData) => {\n perspectiveData = perspectiveData || {};\n return (\n perspectiveData.activity_types || perspectiveData.activityTypes || []\n ).includes('institutions')\n};\n\nconst getActivityUrlByPerspectiveData = (perspectiveData) => {\n return hasSubactivities(perspectiveData)\n ? 'managementSubactivitiesForPriority'\n : 'managementActivitiesForPriority'\n};\n\nconst getActivityChildUrlByPerspectiveData = (perspectiveData) => {\n perspectiveData = perspectiveData || {};\n const activityTypes =\n perspectiveData.activity_types || perspectiveData.activityTypes || [];\n if (activityTypes.includes('regions')) {\n return 'managementRegionsForSubactivity'\n }\n if (activityTypes.includes('institutions')) {\n return 'managementInstitutionsForActivity'\n }\n return null\n};\n\nconst serializePerspectiveForSelect = (data) => {\n return {\n perspectives: data.perspectives.map(p => ({\n value: p.id,\n code: p.name,\n label: p.name,\n activity_types: p.activity_types || p.activityTypes,\n })),\n }\n}\n\nconst getUserFullName = (data) => {\n const forename = data.imie || data.forename || '';\n const surname = data.nazwisko || data.surname || '';\n return (forename.length || surname.length) ? `${forename} ${surname}` : null\n}\n\nconst serializeAuditData = (data) => {\n return {\n createdAt:\n data.dataUtworzenia || data.createdAt || data.created_at || null,\n createdBy: getUserFullName(\n data.ktoUtworzyl || data.createdBy || data.created_by || {}),\n modifiedAt:\n data.dataModyfikacji || data.modifiedAt || data.modified_at || null,\n modifiedBy: getUserFullName(\n data.ktoModyfikowal || data.modifiedBy || data.modified_by || {}),\n }\n}\n\nconst generateUUIDV4 = () => {\n return \"10000000-1000-4000-8000-100000000000\".replace(/[018]/g, c =>\n (+c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> +c / 4).toString(16)\n );\n }\n\n\nexport {\n checkHasNext,\n checkHasPrev,\n computeProgress,\n countWysiwygChars,\n dateToString,\n dateToStringOldBK,\n datetimeToString,\n datetimeStringToISO,\n dateStringToYearMonth,\n deleteCookie,\n extractYoutubeSrc,\n fillWithLeadingZero,\n generatePdfDocument,\n\tsaveFileFromApi,\n getActivityChildUrlByPerspectiveData,\n getActivityUrlByPerspectiveData,\n getAuthTokenCookieValue,\n getCookieValue,\n getLastTemporaryId,\n getLastTemporaryIdFromList,\n getOrderItemsLength,\n getPricesRange,\n getRodzajAdresuDict,\n getSortedOrderItemsFromOrder,\n getUserFullName,\n hasPerspectiveInstitutions,\n hasPerspectiveRegions,\n hasSubactivities,\n isAdvertisementLocked,\n isNotEmpty,\n listOrEmpty,\n redirectToLoginView,\n reformatDanePodmiotu,\n refreshCookie,\n refreshTimerAfterRequest,\n refreshTimerAfterSativaRequest,\n roundStringTo,\n serializeAuditData,\n serializePerspectiveForSelect,\n setCustomInputAttributes,\n setCustomSelectAttributes,\n setFocusOnElement,\n slugify,\n sortImplementationLevelByNumberCode,\n sortProgrammes,\n splitLineByChar,\n timeToString,\n triggerBodyClick,\n generateUUIDV4,\n};\n\nif (typeof module === 'object' && module.exports) {\n module.exports = {\n extractYoutubeSrc,\n getPricesRange,\n getRodzajAdresuDict,\n roundStringTo,\n slugify,\n };\n}\n","import {\n NIP_CHARS_IMPORTANCE,\n PESEL_CHARS_IMPORTANCE,\n SEARCH_CUSTOM_NAME\n} from './const';\nimport { countWysiwygChars, slugify } from './helpers';\n\n\n///////////////////////////////////////////////////////////////////////////////\n// fields checks //\n///////////////////////////////////////////////////////////////////////////////\nconst checkRequired = (value) => {\n if (!value || !value.length) {\n return 'To pole jest wymagane.'\n }\n return ''\n}\n\nconst checkRequiredPrzedmiotZamowienia = (value) => {\n return checkListRequired(\n value, 'Dodaj co najmniej jeden przedmiot zamówienia, aby zdefiniować dla niego atrybuty.')\n}\n\nconst checkNabor = (value, projectsSelected) => {\n // don't validate if projectsSelected is null\n if (projectsSelected === null) { return '' }\n if (!projectsSelected && (!value || !value.value)) {\n return 'To pole jest wymagane.'\n }\n return ''\n}\n\nconst checkProjekty = (value, projectsSelected) => {\n // don't validate if projectsSelected is null\n if (projectsSelected === null) { return '' }\n if (projectsSelected && (!value || !value.length)) {\n return 'To pole jest wymagane.'\n }\n return ''\n}\n\nconst checkListRequired = (value, msg='') => {\n if (!value.length) {\n return msg || 'To pole jest wymagane.'\n }\n return ''\n}\n\nconst checkSelectRequired = (value) => {\n if ([0, '0', null].includes(value)) {\n return 'To pole jest wymagane.'\n }\n return ''\n}\n\n\nconst checkDatesDependency = (start, end) => {\n if (!start.length || !end.length) { return '' }\n if (new Date(start) > new Date(end)) {\n return 'Data koÅ„ca musi być późniejsza niż data poczÄ…tku.'\n }\n return ''\n}\n\n\nconst checkWysiwygEditorRequired = (content) => {\n if (!content || !content.blocks.length) { return false }\n return countWysiwygChars(content) > 0\n}\n\n\nconst checkNip = (value) => {\n let error = '';\n if (value.length) {\n if (!/^\\d{10}$/.test(value)) {\n error = 'Wpisz poprawny numer NIP.';\n } else {\n // count control sum\n let controlSum = 0;\n for (let i=0; i < value.length - 1; i++) {\n controlSum += parseInt(value[i]) * NIP_CHARS_IMPORTANCE[i];\n }\n if (controlSum % 11 !== parseInt(value[9])) {\n error = 'Wpisz poprawny numer NIP. Suma kontrolna jest nieprawidÅ‚owa.';\n }\n }\n }\n return error\n};\n\n\nconst checkPesel = (value) => {\n let error = '';\n if (value.length) {\n if (!/^\\d{11}$/.test(value)) {\n error = 'Wpisz poprawny numer PESEL.';\n } else {\n // count control sum\n let controlSum = 0;\n for (let i=0; i < value.length - 1; i++) {\n controlSum += parseInt(value[i]) * PESEL_CHARS_IMPORTANCE[i];\n }\n if (controlSum % 10 !== parseInt(value[10])) {\n error = 'Wpisz poprawny numer PESEL. Suma kontrolna jest nieprawidÅ‚owa.';\n }\n }\n }\n return error\n};\n\nconst checkKodPocztowy = (value) => {\n let error = '';\n if (value.length) {\n if (!/^\\d{2}-\\d{3}$/.test(value)) {\n error = 'Wpisz poprawny kod pocztowy.';\n }\n }\n return error\n};\n\nconst checkEmail = (value) => {\n if (value.length) {\n // check spaces; check if includes @ char; check dot char after @ char\n if (value.includes(' ') || value.split('@').length !== 2 || value.indexOf('.', value.indexOf('@')) < 0) {\n return 'Wpisz poprawny adres e-mail.'\n }\n }\n return ''\n};\n\nconst checkSimilarValueOnList = (value, valueList, message='') => {\n if (valueList.map(v => slugify(v)).filter(v => v === slugify(value)).length > 1) {\n return message || 'Wartość tego pola jest podobna do wartoÅ›ci analogicznego pola w innym obiekcie na liÅ›cie.'\n }\n return ''\n};\n\nconst checkSimilarTitleValueOnList = (value, valueList) => {\n return (checkSimilarValueOnList(\n value, valueList,\n 'TytuÅ‚ tej części jest zbyt podobny do tytuÅ‚u innej części. ZmieÅ„ tytuÅ‚ tak, aby Å‚atwo byÅ‚o go odróżnić od pozostaÅ‚ych.'\n ))\n}\n\n\n///////////////////////////////////////////////////////////////////////////////\n// configs //\n///////////////////////////////////////////////////////////////////////////////\n\nconst ogloszeniePrzedmiotZamowieniaRequiredValidators = {\n zamowienia_kryteriaOceny: {\n validators: [checkRequiredPrzedmiotZamowienia, ],\n formStep: 'czesciKryteria',\n },\n przedmiotyZamowienia: {\n validators: [checkRequiredPrzedmiotZamowienia, ],\n formStep: 'przedmiot',\n },\n przedmiotyZamowienia_harmonogramy: {\n validators: [checkRequiredPrzedmiotZamowienia, ],\n formStep: 'terminy',\n },\n przedmiotyZamowienia_warunkiUdzialu: {\n validators: [checkRequiredPrzedmiotZamowienia, ],\n formStep: 'warunki',\n },\n};\n\nconst titleValidatorData = {\n validators: [checkRequired, ],\n formStep: 'pozostale',\n};\nconst projectsValidationData = {\n validators: [checkProjekty, ],\n formStep: 'pozostale',\n};\nconst enrollmentValidatorData = {\n validators: [checkNabor, ],\n formStep: 'pozostale',\n};\nconst contactPersonsValidatorData = {\n validators: [checkListRequired, ],\n formStep: 'pozostale',\n};\n\nconst advertisementValidators = {\n tytul: titleValidatorData,\n projekty: projectsValidationData,\n nabor: enrollmentValidatorData,\n osobyDoKontaktu: contactPersonsValidatorData,\n ...ogloszeniePrzedmiotZamowieniaRequiredValidators,\n};\n\nconst publishedAdvertisementOwnerValidators = {\n tytul: titleValidatorData,\n osobyDoKontaktu: contactPersonsValidatorData,\n};\n\nconst publishedAdvertisementAdminValidators = {\n tytul: titleValidatorData,\n projekty: projectsValidationData,\n nabor: enrollmentValidatorData,\n};\n\nconst zamowienieValidators = {\n kryteriaOceny: [checkListRequired, ],\n tytul: [checkRequired, checkSimilarTitleValueOnList],\n};\n\nconst kryteriumOcenyValidators = {\n opis: [checkRequired, ],\n};\n\nconst przedmiotZamowieniaValidators = {\n kategoria: [checkSelectRequired, ],\n podkategoria: [checkSelectRequired, ],\n opis: [checkRequired, ],\n kodyCPV: [checkListRequired, ],\n miejscaRealizacji: [checkListRequired, ],\n};\n\nconst publishedPrzedmiotZamowieniaValidators = {\n opis: [checkRequired, ],\n kodyCPV: [checkListRequired, ],\n miejscaRealizacji: [checkListRequired, ],\n};\n\nconst harmonogramValidators = {\n koniecRealizacji: [checkRequired, ],\n dependent: [\n // validator name, attributes names as props for validator, attribute name for error showing\n [checkDatesDependency, ['poczatekRealizacji', 'koniecRealizacji'], 'koniecRealizacji'],\n ]\n};\n\nconst warunekUdzialuValidators = {\n typ: [checkSelectRequired, ],\n opis: [checkRequired, ],\n};\n\nconst zalacznikValidators = {\n nazwa: [checkRequired, ],\n nested: [\n // validator name, subattribute name, attribute name for error showing\n [checkRequired, 'uri', 'plik']]\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n// functions //\n///////////////////////////////////////////////////////////////////////////////\n\nconst validateAdvertisementBaseAttributes = (\n advertisement, projectsSelected, validatorsDict\n) => {\n let przedmiotyZamowienia = [];\n for (let z of advertisement.zamowienia) {\n przedmiotyZamowienia = [...przedmiotyZamowienia, ...z.przedmiotyZamowienia];\n }\n let errors = {};\n let stepErrors = {};\n for (let [attrName, validators] of Object.entries(validatorsDict)) {\n let value = advertisement[attrName];\n for (let v of validators.validators) {\n let error;\n if ([checkNabor, checkProjekty].includes(v)) {\n error = v(value, projectsSelected);\n } else {\n if (v === checkRequiredPrzedmiotZamowienia) {\n value = przedmiotyZamowienia;\n }\n error = v(value);\n }\n if (error.length > 0) {\n errors[attrName] = error;\n stepErrors[validators.formStep] = true;\n break\n }\n }\n }\n return [errors, stepErrors]\n}\n\n\nconst validateZamowienieAttributes = (ogloszenie) => {\n // validate basic fields\n let [errors, stepErrors] = validateFieldAttributes(\n ogloszenie.zamowienia, zamowienieValidators, 'czesciKryteria');\n // validate if zamowienie has at least one przedmiotZamowienia\n\n let przedmiotyZamowienia = [];\n for (let z of ogloszenie.zamowienia) {\n przedmiotyZamowienia = [...przedmiotyZamowienia, ...z.przedmiotyZamowienia];\n }\n [errors, stepErrors] = validatePrzedmiotyZamowieniaInZamowienie(\n ogloszenie.zamowienia, errors, stepErrors);\n // validate szcunkowaWartosci\n [errors, stepErrors] = validateSzacunkowaWartosc(\n ogloszenie.zamowienia, errors, stepErrors);\n return [errors, stepErrors]\n}\n\n\nconst validatePrzedmiotyZamowieniaInZamowienie = (zamowienie, errors, stepErrors) => {\n // every zamowienie has to have at least one przedmiotZamowienia\n for (let z of zamowienie) {\n if (!z.przedmiotyZamowienia.length) {\n errors[z.temporaryId]['przedmiotyZamowienia'] = 'Brak przedmiotów zamówienia dla tego zamówienia.';\n stepErrors['czesciKryteria'] = true;\n }\n }\n return [errors, stepErrors]\n}\n\n\nconst validateSzacunkowaWartosc = (zamowienia, errors, stepErrors) => {\n for (let z of zamowienia) {\n let value = z.szacunkowaWartosc;\n if (!value.length) { return [errors, stepErrors] }\n if (!/^\\d{1,24},\\d{2}$/.test(value)) {\n errors[z.temporaryId]['szacunkowaWartosc'] = 'Wpisz poprawnÄ… wartość zgodnie ze wzorem.';\n stepErrors['czesciKryteria'] = true;\n } else {\n if (parseInt(value.replace(',', '')) === 0) {\n errors[z.temporaryId]['szacunkowaWartosc'] = 'Ta wartość powinna być wiÄ™ksza od 0.';\n stepErrors['czesciKryteria'] = true;\n }\n if (value.length > 27) {\n errors[z.temporaryId]['szacunkowaWartosc'] = 'Ta wartość nie może być wiÄ™ksza od 999999999999999999999999,99.';\n stepErrors['czesciKryteria'] = true;\n }\n }\n }\n return [errors, stepErrors]\n}\n\n\nconst validateKryteriumOcenyAttributes = (kryteriumOceny) => {\n return validateFieldAttributes(kryteriumOceny, kryteriumOcenyValidators, 'czesciKryteria')\n}\n\n\nconst validatePrzedmiotZamowieniaBaseAttributes = (przedmiotZamowienia, isAlreadyPublished) => {\n return validateFieldAttributes(\n przedmiotZamowienia,\n isAlreadyPublished ? publishedPrzedmiotZamowieniaValidators : przedmiotZamowieniaValidators,\n 'przedmiot'\n )\n};\n\n\nconst validateHarmonogramAttributes = (harmonogram) => {\n return validateFieldAttributes(harmonogram, harmonogramValidators, 'terminy')\n}\n\n\nconst validateWarunekUdzialuAttributes = (warunekUdzialu) => {\n return validateFieldAttributes(warunekUdzialu, warunekUdzialuValidators, 'warunki')\n}\n\n\nconst validateZalacznikAttributes = (zalacznik) => {\n return validateFieldAttributes(zalacznik, zalacznikValidators, 'zalaczniki')\n}\n\n\nconst validateFieldAttributes = (objectList, fieldValidators, stepName) => {\n let errors = {};\n let stepErrors = {};\n for (let attr of objectList) {\n errors[attr.temporaryId] = {};\n for (let [attrName, validators] of Object.entries(fieldValidators)) {\n if (attrName === 'dependent') {\n for (let v of validators) {\n let error = v[0](...v[1].map((name) => attr[name]));\n if (error.length > 0) {\n errors[attr.temporaryId][v[2]] = error;\n stepErrors[stepName] = true;\n break\n }\n }\n continue\n }\n if (attrName === 'nested') {\n for (let v of validators) {\n let error = v[0](attr[v[2]][v[1]]);\n if (error.length > 0) {\n errors[attr.temporaryId][v[2]] = error;\n stepErrors[stepName] = true;\n break\n }\n }\n continue\n }\n const value = attr[attrName];\n for (let v of validators) {\n let error;\n if ([checkSimilarValueOnList, checkSimilarTitleValueOnList].includes(v)) {\n error = v(value, objectList.map(o => o[attrName]));\n } else {\n error = v(value);\n }\n if (error.length > 0) {\n errors[attr.temporaryId][attrName] = stepName === 'zalaczniki' ? [error] : error;\n stepErrors[stepName] = true;\n break\n }\n }\n }\n }\n return [errors, stepErrors]\n}\n\n\nconst validateWysiwygEditor = (content) => {\n return checkWysiwygEditorRequired(content);\n};\n\n// search validators\n\nconst validateSearchFilters = (filters) => {\n let errors = {};\n let isValid = true;\n\n // validate status - at least one check has to be checked\n if (!filters.status.length) {\n errors['status'] = 'Wybierz przynajmniej jeden status ogÅ‚oszenia.';\n isValid = false;\n }\n\n // validate dates\n for (let name of ['publicationDateRange', 'submissionDeadlineRange']) {\n if (filters[name].type === SEARCH_CUSTOM_NAME) {\n if (!filters[name].from && !filters[name].to) {\n errors[name] = 'Wybierz przynajmniej jednÄ… z dat.'\n isValid = false;\n }\n }\n }\n\n return [isValid, errors]\n}\n\n// user validators\n\nconst validatePersonalData = (data) => {\n let errors = {\n adres: {},\n };\n let isValid = true;\n let error = '';\n\n // check required\n for (let [name, isAdresPart] of [\n ['nazwa', false], ['miejscowosc', true], ['kodPocztowy', true],\n ['numerIdentyfikacyjny', false], ['numerDomu', true]]\n ) {\n error = checkRequired(isAdresPart ? data.adres[name] : data[name]);\n if (error.length) {\n isValid = false;\n if (isAdresPart) {\n errors['adres'][name] = [error, ];\n } else {\n errors[name] = [error, ];\n }\n }\n }\n\n if (data.rodzajAdresu === 'poland') {\n // check NIP and PESEL sum control\n if (data.typNumeruIdentyfikacyjnego === 'nip') {\n error = checkNip(data.numerIdentyfikacyjny);\n } else if (data.typNumeruIdentyfikacyjnego === 'pesel') {\n error = checkPesel(data.numerIdentyfikacyjny);\n }\n if (error.length) {\n isValid = false;\n errors['numerIdentyfikacyjny'] = [error, ];\n }\n\n // check kod pocztowy\n error = checkKodPocztowy(data.adres.kodPocztowy);\n if (error.length) {\n isValid = false;\n errors['adres']['kodPocztowy'] = [error, ];\n }\n } else {\n // check kraj\n error = checkRequired(data.adres.kraj);\n if (error.length) {\n isValid = false;\n errors['adres']['kraj'] = [error, ];\n }\n }\n\n return [isValid, errors]\n};\n\n\nconst validateOsobaDoKontaktu = (data) => {\n let errors = {};\n let isValid = true;\n let error = '';\n\n // check required fields\n for (let name of ['imie', 'nazwisko', 'email']) {\n const value = data[name];\n error = checkRequired(value);\n if (error.length) {\n isValid = false;\n errors[name] = error;\n } else if (name === 'email') {\n // validate email structure\n error = checkEmail(value);\n if (error.length) {\n isValid = false;\n errors[name] = error;\n }\n }\n }\n\n return [isValid, errors]\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n// exports //\n///////////////////////////////////////////////////////////////////////////////\n\nexport {\n advertisementValidators,\n ogloszeniePrzedmiotZamowieniaRequiredValidators,\n publishedAdvertisementAdminValidators,\n publishedAdvertisementOwnerValidators,\n validateHarmonogramAttributes,\n validateKryteriumOcenyAttributes,\n validateAdvertisementBaseAttributes,\n validateOsobaDoKontaktu,\n validatePersonalData,\n validatePrzedmiotZamowieniaBaseAttributes,\n validateSearchFilters,\n validateWarunekUdzialuAttributes,\n validateWysiwygEditor,\n validateZalacznikAttributes,\n validateZamowienieAttributes\n}\n\n\nif (typeof module === 'object' && module.exports) {\n module.exports = {\n checkDatesDependency,\n checkListRequired,\n checkNabor,\n checkRequired,\n checkRequiredPrzedmiotZamowienia,\n checkSelectRequired,\n checkSimilarValueOnList,\n publishedAdvertisementOwnerValidators,\n validateAdvertisementBaseAttributes,\n };\n}\n","\nconst ADVERTISEMENTS_SORTING_VALUES = [\n ['terminOfert_asc', 'termin skÅ‚adania ofert rosnÄ…co'],\n ['terminOfert_desc', 'termin skÅ‚adania ofert malejÄ…co'],\n ['ogloszenie_numer_asc', 'numer rosnÄ…co'],\n ['ogloszenie_numer_desc', 'numer malejÄ…co'],\n ['tytul_asc', 'tytuÅ‚ rosnÄ…co'],\n ['tytul_desc', 'tytuÅ‚ malejÄ…co'],\n ['ogloszenie_status_nazwa_asc', 'status rosnÄ…co'],\n ['ogloszenie_status_nazwa_desc', 'status malejÄ…co'],\n];\n\nconst PROJECTS_SORTING_VALUES = [\n ['calyNumer_asc', 'numer rosnÄ…co'],\n ['calyNumer_desc', 'numer malejÄ…co'],\n ['nazwa_asc', 'nazwa rosnÄ…co'],\n ['nazwa_desc', 'nazwa malejÄ…co'],\n];\n\nconst sortByAdvertisementNumber = (order, nr1, nr2) => {\n // if number mask will change, sort in other way\n const [year1, userId1, announcementId1] = nr1.split('-');\n const [year2, userId2, announcementId2] = nr2.split('-');\n if (year1 !== year2) {\n if (order === 'asc') {\n return year2 < year1 ? 1 : -1\n } else {\n return year2 > year1 ? 1 : -1\n }\n }\n if (userId1 !== userId2) {\n if (order === 'asc') {\n return parseInt(userId2) < parseInt(userId1) ? 1 : -1\n } else {\n return parseInt(userId2) > parseInt(userId1) ? 1 : -1\n }\n }\n if (order === 'asc') {\n return parseInt(announcementId2) < parseInt(announcementId1) ? 1 : -1\n } else {\n return parseInt(announcementId2) > parseInt(announcementId1) ? 1 : -1\n }\n}\n\nconst sortAdvertisements = (advertisementList, sortingValue) => {\n return advertisementList.slice().sort((o1, o2) => {\n const splittingValue = sortingValue.split('_');\n let value1, value2, order, attribbuteName;\n if (splittingValue.length === 4) {\n attribbuteName = splittingValue[2];\n value1 = o1[splittingValue[0]][splittingValue[1]][attribbuteName];\n value2 = o2[splittingValue[0]][splittingValue[1]][attribbuteName];\n order = splittingValue[3];\n } else if (splittingValue.length === 3) {\n attribbuteName = splittingValue[1];\n value1 = o1[splittingValue[0]][attribbuteName];\n value2 = o2[splittingValue[0]][attribbuteName];\n order = splittingValue[2];\n } else {\n attribbuteName = splittingValue[0];\n value1 = o1[attribbuteName];\n value2 = o2[attribbuteName];\n order = splittingValue[1];\n }\n if ([null, ''].includes(value1)) {return 1}\n if ([null, ''].includes(value2)) {return -1}\n if (attribbuteName === 'numer') {\n return sortByAdvertisementNumber(order, value1, value2)\n }\n if (attribbuteName === 'tytul') {\n if (order === 'asc') {\n return value1.toLowerCase().localeCompare(value2.toLowerCase(), 'pl')\n }\n return value2.toLowerCase().localeCompare(value1.toLowerCase(), 'pl')\n }\n if (order === 'asc') {\n return value2 < value1 ? 1 : -1\n }\n return value2 > value1 ? 1 : -1\n })\n};\n\nconst sortProjects = (projectList, sortingValue) => {\n const p = projectList.slice().sort((p1, p2) => {\n const [attribbuteName, order] = sortingValue.split('_');\n const value1 = p1[attribbuteName];\n const value2 = p2[attribbuteName];\n if ([null, ''].includes(value1)) {return 1}\n if ([null, ''].includes(value2)) {return -1}\n if (order === 'asc') {\n return value1.toLowerCase().localeCompare(value2.toLowerCase(), 'pl')\n }\n return value2.toLowerCase().localeCompare(value1.toLowerCase(), 'pl')\n })\n return p\n};\n\n// search filters\nconst sortProgrammeFilter = (value1, value2) => {\n return value1[1].toLowerCase().localeCompare(value2[1].toLowerCase(), 'pl')\n};\nconst sortMiejsceRealizacjiFilter = (mr1, mr2) => {\n const v1 = mr1[0], v2 = mr2[0];\n if (v1 === 'abroad') {\n return 1\n }\n if (v2 === 'abroad') {\n return -1\n }\n if (v1 === 'poland') {\n return 1\n }\n if (v2 === 'poland') {\n return -1\n }\n return v1.toLowerCase().localeCompare(v2.toLowerCase(), 'pl')\n};\n\n\nconst setInitialSorterByUrlParam = (urlParams, sorters, defaultSorter) => {\n let sort = urlParams.get('sort');\n if (!Object.keys(sorters).includes(sort)) {\n sort = defaultSorter;\n }\n const sorter = sorters[sort];\n return {value: sorter[0], label: sorter[1]}\n}\n\n\nexport {\n ADVERTISEMENTS_SORTING_VALUES,\n PROJECTS_SORTING_VALUES,\n setInitialSorterByUrlParam,\n sortAdvertisements,\n sortMiejsceRealizacjiFilter,\n sortProgrammeFilter,\n sortProjects,\n};\n\n\nif (typeof module === 'object' && module.exports) {\n module.exports = {\n sortProjects,\n };\n}\n","import jp from 'jsonpath';\n\n// from server\nconst mapServerFront = {\n account_disabled: 'kontoZablokowane',\n account_disabled_at: 'dataZablokowaniaKonta',\n accountDisabled: 'kontoZablokowane',\n active: 'czyAktywny',\n activities: 'dzialania',\n activity: 'dzialanie',\n added_at: 'dataDodania',\n address: 'adres',\n address_type: 'rodzajAdresu',\n addressType: 'rodzajAdresu',\n advertisement: 'ogloszenie',\n advertisements: 'ogloszenia',\n advertiser_address_details: 'daneAdresoweOgloszeniodawcy',\n advertiser_name: 'nazwaOgloszeniodawcy',\n answer: 'odpowiedz',\n attached_advertisements_amount: 'attachedAdvertisementsAmount',\n attachments: 'zalaczniki',\n category: 'kategoria',\n children: 'dzieci',\n chosen_offer_variant: 'wybranyWariant',\n chosenOfferVariant: 'wybranyWariant',\n code: 'kod',\n comment: 'komentarz',\n commune: 'gmina',\n contact_persons: 'osobyDoKontaktu',\n content: 'tresc',\n country: 'kraj',\n cpv_items: 'kodyCPV',\n created_by: 'ktoUtworzyl',\n created_at: 'dataUtworzenia',\n current_exists: 'aktualnyIstnieje',\n description: 'opis',\n dictionaries: 'slowniki',\n economic_subject: 'danePodmiotu',\n economicSubject: 'danePodmiotu',\n email: 'email',\n end_at: 'koniecRealizacji',\n enrollment: 'nabor',\n enrollment_number: 'numerNaboru',\n estimated_value: 'szacunkowaWartosc',\n evaluation_criteria: 'kryteriaOceny',\n expiration_date: 'dataWaznosci',\n file: 'plik',\n file_to_load: 'plikDoWgrania',\n for_publication_exists: 'doPublikacjiIstnieje',\n forename: 'imie',\n fulfillment_place: 'miejsceRealizacji',\n fulfillment_places: 'miejscaRealizacji',\n full_number: 'calyNumer',\n general_content: 'trescOgolna',\n general_content_items: 'tresciOgolne',\n has_advertisements: 'maOgloszenia',\n has_draft: 'czyMaKopieRobocza',\n has_draft_advertisements: 'maRoboczeOgloszenia',\n has_published_advertisements: 'maOpublikowaneOgloszenia',\n headline: 'naglowek',\n help: 'pomoc',\n helps: 'pomoce',\n id: 'id',\n identification_number: 'numerIdentyfikacyjny',\n identification_number_type: 'typNumeruIdentyfikacyjnego',\n identifier: 'identyfikator',\n institution: 'instytucja',\n institutionNumber: 'numerInstytucji',\n is_admin: 'isAdmin',\n is_author: 'jestAutorem',\n is_created_by_advertiser: 'isCreatedByAdvertiser',\n is_mine: 'moje',\n isAdmin: 'isAdmin',\n is_protocol: 'jestProtokolem',\n isProtocol: 'jestProtokolem',\n is_refused: 'isRefused',\n is_variant: 'czyWariantowe',\n isVariant: 'czyWariantowe',\n last_publicated_version_id: 'ostatniaOpublikowanaWersjaId',\n label: 'label',\n last_version: 'ostatniaWersja',\n locality: 'miejscowosc',\n modified_at: 'dataModyfikacji',\n modified_by: 'ktoModyfikowal',\n name: 'nazwa',\n no_offer_selected: 'zadnaOfertaWybrana',\n noOfferSelected: 'zadnaOfertaWybrana',\n number: 'numer',\n number_description: 'numerDomu',\n order_node: 'zamowienieNode',\n order_nodes: 'zamowieniaNodes',\n order: 'zamowienie',\n orderNode: 'zamowienieNode',\n orderNodes: 'zamowieniaNodes',\n orders: 'zamowienia',\n offers: 'oferty',\n offerset: 'pakietOfert',\n offersets: 'pakietyOfert',\n order_id: 'zamowienieId',\n order_items: 'przedmiotyZamowienia',\n order_temporary_id: 'zamowienieTemporaryId',\n orders_amount: 'liczbaZamowien',\n original_content: 'trescOryginalna',\n page: 'strona',\n parent: 'rozdzialNadrzedny',\n partial_offer_allowed: 'czyDopuszczalnaOfertaCzesciowa',\n partial_payment: 'czyWystepujePlatnoscCzesciowa',\n participation_conditions: 'warunkiUdzialu',\n perspective: 'perspektywa',\n phone_number: 'numerTelefonu',\n planned_sign_date: 'planowanyTerminPodpisaniaUmowy',\n postcode: 'kodPocztowy',\n poviat: 'powiat',\n price: 'cena',\n price_criterion: 'czyKryteriumCenowe',\n priorities: 'osiePriorytetowe',\n priority: 'osPriorytetowa',\n programme: 'programOperacyjny',\n programmes: 'programyOperacyjne',\n project: 'projekt',\n projects: 'projekty',\n projects_enrollments: 'projektyNabory',\n publication_date: 'dataOpublikowania',\n question: 'pytanie',\n questions: 'pytania',\n refusedOfferSets: 'ofertyDoUsuniecia',\n region: 'region',\n regulations: 'regulaminy',\n relatives: 'powiazane',\n relatives_pointing_to_current: 'powiazaneDlaObecnego',\n screen: 'ekran',\n settlement: 'rozstrzygniecie',\n slug: 'slug',\n start_at: 'poczatekRealizacji',\n statement: 'komunikat',\n statements: 'komunikaty',\n status: 'status',\n street: 'ulica',\n subcategories: 'podkategorie',\n subcategory: 'podkategoria',\n submission_deadline: 'terminOfert',\n supplementary_orders: 'zamowieniaUzupelniajace',\n surname: 'nazwisko',\n tax_identification_number: 'nip',\n temporary_id: 'temporaryId',\n timetable_items: 'harmonogramy',\n title: 'tytul',\n terms_of_contract_change: 'warunkiZmianyUmowy',\n teryt_items: 'teryty',\n type: 'typ',\n user: 'uzytkownik',\n userEmail: 'emailUzytkownika',\n userForename: 'imieUzytkownika',\n userSurname: 'nazwiskoUzytkownika',\n users: 'uzytkownicy',\n warranty_period: 'okresGwarancji',\n variants: 'warianty',\n version: 'wersja',\n voivodeship: 'wojewodztwo',\n yellow_stripe: 'czyZoltyPasek',\n osoba: 'osoba',\n account_type: 'accountType',\n}\n\n// to server\nconst mapFrontServer = {\n adres: 'address',\n aktualnyIstnieje: 'currentExists',\n cena: 'price',\n czyAktywny: 'active',\n czyDopuszczalnaOfertaCzesciowa: 'partialOfferAllowed',\n czyKryteriumCenowe: 'priceCriterion',\n czyMaKopieRobocza: 'hasDraft',\n czyWariantowe: 'isVariant',\n czyWystepujePlatnoscCzesciowa: 'partialPayment',\n czyZoltyPasek: 'yellowStripe',\n daneAdresoweOgloszeniodawcy: 'advertiserAddressDetails',\n danePodmiotu: 'economicSubject',\n dataDodania: 'addedAt',\n dataModyfikacji: 'modifiedAt',\n dataOpublikowania: 'publicationDate',\n dataUtworzenia: 'createdAt',\n dataWaznosci: 'expirationDate',\n dataZablokowaniaKonta: 'accountDisabledAt',\n doPublikacjiIstnieje: 'forPublicationExists',\n dzialania: 'activities',\n dzialanie: 'activity',\n dzieci: 'children',\n ekran: 'screen',\n email: 'email',\n emailUzytkownika: 'userEmail',\n gmina: 'commune',\n harmonogramy: 'timetableItems',\n id: 'id',\n identyfikator: 'identifier',\n imie: 'forename',\n imieUzytkownika: 'userForename',\n instytucja: 'institution',\n isAdmin: 'isAdmin',\n jestAutorem: 'isAuthor',\n jestProtokolem: 'isProtocol',\n kategoria: 'category',\n kod: 'code',\n kodyCPV: 'cpvItems',\n kodPocztowy: 'postcode',\n komentarz: 'comment',\n komunikat: 'statement',\n komunikaty: 'statements',\n koniecRealizacji: 'endAt',\n kontoZablokowane: 'accountDisabled',\n kraj: 'country',\n kryteriaOceny: 'evaluationCriteria',\n ktoModyfikowal: 'modifiedBy',\n ktoUtworzyl: 'createdBy',\n label: 'label',\n liczbaZamowien: 'ordersAmount',\n miejscaRealizacji: 'fulfillmentPlaces',\n miejscowosc: 'locality',\n nabor: 'enrollment',\n naglowek: 'headline',\n nazwa: 'name',\n nazwisko: 'surname',\n nazwiskoUzytkownika: 'userSurname',\n nip: 'taxIdentificationNumber',\n numer: 'number',\n numerDomu: 'numberDescription',\n numerIdentyfikacyjny: 'identificationNumber',\n numerNaboru: 'enrollmentNumber',\n odpowiedz: 'answer',\n oferty: 'offers',\n ofertyDoUsuniecia: 'refusedOfferSets',\n ogloszenia: 'advertisements',\n ogloszenie: 'advertisement',\n okresGwarancji: 'warrantyPeriod',\n opis: 'description',\n osiePriorytetowe: 'priorities',\n osPriorytetowa: 'priority',\n osoba: 'osoba',\n osobyDoKontaktu: 'contactPersons',\n pakietOfert: 'offerset',\n perspektywa: 'perspective',\n planowanyTerminPodpisaniaUmowy: 'plannedSignDate',\n plik: 'file',\n plikDoWgrania: 'fileToLoad',\n poczatekRealizacji: 'startAt',\n podkategoria: 'subcategory',\n podkategorie: 'subcategories',\n pomoc: 'help',\n pomoce: 'helps',\n powiat: 'poviat',\n powiazane: 'relatives',\n powiazaneDlaObecnego: 'relativesPointingToCurrent',\n programOperacyjny: 'programme',\n programyOperacyjne: 'programmes',\n projekt: 'project',\n projekty: 'projects',\n przedmiotyZamowienia: 'orderItems',\n pytania: 'questions',\n pytanie: 'question',\n region: 'region',\n regulaminy: 'regulations',\n rodzajAdresu: 'addressType',\n rozdzialNadrzedny: 'parent',\n slug: 'slug',\n slowniki: 'dictionaries',\n status: 'status',\n strona: 'page',\n szacunkowaWartosc: 'estimatedValue',\n numerInstytucji: 'institutionNumber',\n numerTelefonu: 'phoneNumber',\n temporaryId: 'temporaryId',\n terminOfert: 'submissionDeadline',\n teryty: 'terytItems',\n tresc: 'content',\n trescOgolna: 'generalContent',\n tresciOgolne: 'generalContentItems',\n trescOryginalna: 'originalContent',\n typ: 'type',\n typNumeruIdentyfikacyjnego: 'identificationNumberType',\n tytul: 'title',\n ulica: 'street',\n uzytkownicy: 'users',\n warianty: 'variants',\n warunkiUdzialu: 'participationConditions',\n warunkiZmianyUmowy: 'termsOfContractChange',\n wojewodztwo: 'voivodeship',\n wybranyWariant: 'chosenOfferVariant',\n zadnaOfertaWybrana: 'noOfferSelected',\n zamowieniaUzupelniajace: 'supplementaryOrders',\n zamowienia: 'orders',\n zamowieniaNodes: 'orderNodes',\n zamowienie: 'order',\n zamowienieId: 'orderId',\n zamowienieNode: 'orderNode',\n zamowienieTemporaryId: 'orderTemporaryId',\n zalaczniki: 'attachments',\n accountType: 'account_type',\n}\n\n\nconst serializeObject = (object, toServer=false, nonRecursiveKeys=[], dateWithTime=false) => {\n // old serializer; don't use it with a new functionality\n const serializationDct = toServer ? mapFrontServer : mapServerFront;\n let serializedObject = {};\n for (let attrName of Object.keys(object)) {\n const value = object[attrName];\n const serializedName = serializationDct[attrName] || attrName;\n if (nonRecursiveKeys && nonRecursiveKeys.includes(toServer ? attrName : serializedName)) {\n serializedObject[serializedName] = value || (value === false ? value : (toServer ? null : ''));\n } else if (Array.isArray(value)) {\n let serializedObjectList = serializeObjectList(value, toServer, nonRecursiveKeys, dateWithTime);\n serializedObject[serializedName] = serializedObjectList;\n } else if ((!toServer && ['created_at', 'end_at', 'modified_at',\n 'planned_sign_date', 'publication_date', 'start_at',\n 'submission_deadline'].includes(attrName))\n || (toServer && ['dataUtworzenia', 'dataModyfikacji',\n 'dataOpublikowania', 'koniecRealizacji', 'poczatekRealizacji',\n 'planowanyTerminPodpisaniaUmowy', 'terminOfert'].includes(attrName))) {\n // serialize date\n if (['terminOfert', 'submission_deadline'].includes(attrName)) {\n let date_ = serializeDate(value, toServer, true);\n if (attrName === 'submission_deadline' && !!date_) {\n date_ = date_.replace(' 23:59:59', '');\n }\n serializedObject[serializedName] = date_;\n } else {\n serializedObject[serializedName] = serializeDate(value, toServer, dateWithTime);\n }\n } else if (typeof value === 'object' && value !== null) {\n serializedObject[serializedName] = serializeObject(value, toServer, nonRecursiveKeys, dateWithTime);\n } else {\n serializedObject[serializedName] = value || (value === false ? value : (toServer ? null : ''));\n }\n }\n return serializedObject\n};\n\nconst getSerializedObject = (object, config=null) => {\n config = config || {};\n const toServer = config['toServer'] || false;\n const mapToCamelCaseName = config['mapToCamelCaseName'] || false;\n const doNotTranslateNames = config['doNotTranslateNames'] || false;\n const serializationDct = toServer ? mapFrontServer : mapServerFront;\n const nonRecursiveKeys = config['nonRecursiveKeys'] || [];\n // all date (and datetime) fields add here:\n const dateAttributes = config['dateAttributes'] || [];\n // only datetime fields add here:\n const dateTimeAttributes = config['dateTimeAttributes'] || [];\n // add here datetime attributes if you want to cut 23:59:59:\n const dateTimeToLastMinuteAttributes = config['dateTimeToLastMinuteAttributes'] || [];\n const removeTemporaryId = config['removeTemporaryId'] || false;\n\n let serializedObject = {};\n for (let attrName of Object.keys(object)) {\n if (removeTemporaryId && attrName === 'temporaryId') {\n continue\n }\n const value = object[attrName];\n let serializedName;\n if (doNotTranslateNames) {\n serializedName = attrName;\n } else if (mapToCamelCaseName) {\n serializedName = mapToCamelCase(attrName);\n } else {\n serializedName = serializationDct[attrName] || attrName;\n }\n if (nonRecursiveKeys.length && nonRecursiveKeys.includes(toServer ? attrName : serializedName)) {\n serializedObject[serializedName] = value || (value === false ? value : (toServer ? null : ''));\n } else if (Array.isArray(value)) {\n serializedObject[serializedName] = getSerializedList(value, config);\n } else if (dateAttributes.includes(attrName) || dateAttributes.includes(serializedName)) {\n // serialize date\n if (dateTimeAttributes.includes(attrName) || dateTimeAttributes.includes(serializedName)) {\n let date_ = getSerializedDate(value, toServer, true);\n if ((dateTimeToLastMinuteAttributes.includes(attrName) || dateTimeToLastMinuteAttributes.includes(serializedName)) && !!date_) {\n date_ = date_.replace(' 23:59:59', '');\n }\n serializedObject[serializedName] = date_;\n } else {\n serializedObject[serializedName] = getSerializedDate(value, toServer, false);\n }\n } else if (typeof value === 'object' && value !== null) {\n serializedObject[serializedName] = getSerializedObject(value, config);\n } else {\n serializedObject[serializedName] = value || (value === false ? value : (toServer ? null : ''));\n }\n }\n return serializedObject\n}\n\nconst mapToCamelCase = (value) => {\n return value.split('_').map((part, index) => index > 0 ? part.charAt(0).toUpperCase() + part.slice(1) : part).join('')\n};\n\nconst getSerializedDate = (value, toServer, withTime=false) => {\n if (toServer) {\n if (value === '') { return null }\n } else if (value === null) { return '' }\n return withTime ? value : value.slice(0, 10)\n}\n\nconst getSerializedList = (objectList, config) => {\n if (!objectList.length) {return []}\n\n if (typeof objectList[0] !== 'object') {return objectList}\n\n if ((config || {})['addTemporaryId'] || false) {\n return objectList.map(object => Object.assign(\n getSerializedObject(object, config),\n {temporaryId: object.id}\n ))\n }\n return objectList.map(object => getSerializedObject(object, config))\n}\n\n\nconst serializeJsonPathList = (list) => {\n let serializedList = [];\n for (let element of list) {\n if (element === undefined) {\n serializedList.push({});\n } else if (typeof element !== 'object') {\n serializedList.push(element);\n } else {\n serializedList.push(serializeJsonPathObject(element));\n }\n }\n return serializedList\n};\n\nconst serializeJsonPathObject = (object) => {\n let serializedObject = {};\n for (let attrName of Object.keys(object)) {\n const value = object[attrName];\n if (Array.isArray(value)) {\n serializedObject[attrName] = serializeJsonPathList(value);\n } else {\n serializedObject[attrName] = value;\n }\n }\n return serializedObject\n};\n\n\nconst findJsonPathErrors = (errors, path) => {\n for (let e of errors) {\n if (e.path === path) {\n return e.errors\n }\n }\n return []\n};\n\nconst getSerializedNestedErrorsFromServer = (errors, data, attrName, pathPrefix, nestedFields) => {\n const attrBasePathPrefix = `${pathPrefix}${mapFrontServer[attrName]}`;\n let errors_ = {};\n const baseAttrErrors = findJsonPathErrors(errors, attrBasePathPrefix);\n if (baseAttrErrors.length) {\n errors_['errors'] = baseAttrErrors;\n }\n\n // iterate objects on list\n for (let i=0; i < data[attrName].length; i++) {\n const obj = data[attrName][i];\n let objectErrors = {}\n for (let subAttrName of Object.keys(obj)) {\n if (nestedFields.includes(subAttrName)) {\n objectErrors[subAttrName] = getSerializedNestedErrorsFromServer(\n errors, obj, subAttrName, `${attrBasePathPrefix}.${i}.`, nestedFields);\n } else {\n const subAttrPathPrefix = `${attrBasePathPrefix}.${i}.${mapFrontServer[subAttrName]}`;\n const subAttrErrors = findJsonPathErrors(errors, subAttrPathPrefix);\n if (subAttrErrors.length) {\n objectErrors[subAttrName] = subAttrErrors;\n }\n }\n }\n errors_[obj.temporaryId] = objectErrors;\n }\n return errors_\n}\n\nconst getSerializedObjectErrorsFormServer = (errors, data, nestedFields=[], pathPrefix='$.') => {\n let serializedErrors = {};\n for (let attrName of Object.keys(data)) {\n if (nestedFields.includes(attrName)) {\n serializedErrors[attrName] = getSerializedNestedErrorsFromServer(\n errors, data, attrName, pathPrefix, nestedFields);\n } else if (typeof data[attrName] === 'object' && data[attrName] !== null) {\n serializedErrors[attrName] = getSerializedObjectErrorsFormServer(\n errors, data[attrName], nestedFields, `${pathPrefix}${mapFrontServer[attrName]}.`);\n } else {\n const attrPathPrefix = `${pathPrefix}${mapFrontServer[attrName]}`;\n const attrErrors = findJsonPathErrors(errors, attrPathPrefix);\n if (attrErrors.length) {\n serializedErrors[attrName] = attrErrors;\n }\n }\n }\n return serializedErrors\n};\n\nconst getSerializedErrorsFromServer = (errors, config={}) => {\n // set config according to config in getSerializedObject function\n let serializedErrors = {};\n errors.forEach(error => jp.value(serializedErrors, error.path, error.errors));\n return getSerializedObject(serializeJsonPathObject(serializedErrors), config)\n};\n\nconst serializeDate = (value, toServer, withTime=false) => {\n if (toServer) {\n if (value === '') { return null }\n } else if (value === null) { return '' }\n return withTime ? value : value.slice(0, 10)\n}\n\nconst serializeObjectList = (objectList, toServer=false, nonRecursiveKeys=[], dateWithTime=false) => {\n if (!objectList.length) {return []}\n if (typeof objectList[0] !== 'object') {return objectList}\n return objectList.map(object => Object.assign(\n serializeObject(object, toServer, nonRecursiveKeys, dateWithTime),\n {temporaryId: object.id}\n ))\n}\n\n\nconst ERRORS_SERVER_FRONT = {\n 'credentials (mail and password) are required.': 'credentials (mail and password) are required.',\n 'DateTime::__construct(): Failed to parse time string (some-bad-format) at position 0 (s): The timezone could not be found in the database': 'DateTime::__construct(): Failed to parse time string (some-bad-format) at position 0 (s): The timezone could not be found in the database', // new advertisement\n 'email is not unique': 'email is not unique', // new user\n 'missing parameters': 'missing parameters', // new advertisement\n 'missing params': 'missing params', // new user\n 'no results': 'no results', // delete project\n 'Number is not unique.': 'Istnieje w bazie projekt o takim numerze.', // add project\n 'Project not found': 'Nie ma takiego projektu.', // delete project\n 'Session ID is required': 'Session ID is required',\n 'Session invalid.': 'Session invalid.',\n 'User not found.': 'Nie ma takiego użytkownika.',\n 'An empty file is not allowed.': 'Nie udaÅ‚o siÄ™ wgrać pliku, ponieważ jest on pusty.',\n 'Internal Server Error': 'WystÄ…piÅ‚ bÅ‚Ä…d serwera.',\n 'Unauthorized': 'WystÄ…piÅ‚ problem z uwierzytelnieniem użytkownika.',\n}\n\n\nconst translateErrorMessage = (message) => {\n return ERRORS_SERVER_FRONT[message] || message\n}\n\n\nconst serializeOrderItemCategories = (categoriesList) => {\n let categories = {}, subcategories = {};\n for (let cat of categoriesList) {\n categories[cat.id] = cat.name;\n for (let subcat of cat.subcategories) {\n subcategories[subcat.id] = subcat.name;\n }\n }\n return [categories, subcategories]\n}\n\nfunction serializeUrlParams(params, serializationDict) {\n let serializedDict = {};\n for (let [key, val] of Object.entries(params)) {\n serializedDict[serializationDict[key] || key] = val;\n }\n return serializedDict\n}\n\n\nexport {\n getSerializedObjectErrorsFormServer,\n getSerializedErrorsFromServer,\n getSerializedList,\n getSerializedObject,\n mapServerFront,\n serializeObject,\n serializeObjectList,\n serializeOrderItemCategories,\n serializeUrlParams,\n translateErrorMessage,\n};\n\n\nif (typeof module === 'object' && module.exports) {\n module.exports = {\n getSerializedObjectErrorsFormServer,\n };\n}\n","import React, { createContext } from 'react';\n\n/*\n What is this for?\n This one is updated after link in menu was clicked. If it changes some\n components will be rerendered - in Routes.js define them th key as\n menuLinkKey and that's all what you need to refresh page content.\n*/\n\nconst MenuContext = createContext({\n menuLinkKey: 0,\n refreshBadgesCount: 0,\n updateMenuKey: () => {},\n refreshBadges: () => {}\n});\n\n\nexport class MenuProvider extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n menuLinkKey: 0,\n updateMenuKey: this.updateMenuKey,\n refreshBadges: this.refreshBadges\n }\n }\n\n refreshBadges = () => {\n this.setState(prevState => ({refreshBadgesCount: prevState.refreshBadgesCount + 1}))\n }\n\n updateMenuKey = () => {\n this.setState(prevState => ({menuLinkKey: prevState.menuLinkKey + 1}));\n }\n\n render() {\n return (\n <MenuContext.Provider value={this.state}>\n {this.props.children}\n </MenuContext.Provider>\n );\n }\n}\n\nexport const MenuConsumer = MenuContext.Consumer;\nexport { MenuContext };\n","import React, { createContext } from 'react';\n\nimport { getSerializedObject } from '../serializers';\n\n\nconst EMPTY_USER = {\n accountType: 'USER',\n email: '',\n forename: '',\n id: null,\n identifier: null,\n surname: '',\n advertisementManagerType: {\n isAuthor: false,\n isAdmin: false,\n },\n};\nconst EMPTY_AUTH = { expire: null };\n\n\nconst UserContext = createContext({\n // errors\n user: {...EMPTY_USER},\n auth: {...EMPTY_AUTH},\n permissions: {},\n set: () => {},\n setAdvertisementManagerType: () => {},\n refresh: () => {},\n refreshTimer: () => {},\n logout: () => {},\n removePermission: () => {},\n});\n\n\nexport class UserProvider extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n user: {...EMPTY_USER},\n auth: {...EMPTY_AUTH},\n permissions: {},\n set: this.set,\n setAdvertisementManagerType: this.setAdvertisementManagerType,\n refresh: this.refresh,\n refreshTimer: this.refreshTimer,\n logout: this.logout,\n removePermission: this.removePermission,\n };\n }\n\n set = (data, callback=null) => {\n // from backend, at the beginning of application life or after login\n this.setState(\n prevState => ({\n user: Object.assign({}, prevState.user, getSerializedObject(data.user || {}, {mapToCamelCaseName: true})),\n auth: Object.assign(\n {}, prevState.auth, (data.meta || {}).auth || {}),\n permissions: this.serializePermission(data.permissions || {}),\n }),\n () => {\n if (callback) {\n callback();\n }\n }\n );\n }\n\n setAdvertisementManagerType = (data, callback=null) => {\n this.setState(\n prevState => ({\n user: {...prevState.user, advertisementManagerType: data},\n }),\n () => {\n if (callback) { callback() }\n }\n );\n }\n\n serializePermission = (permissions) => {\n /*\n Full expected permissions is a dict like that:\n {\n adProjectEnrollments: {\n advertisementAdministration: {\n searchNPreviewData: true,\n blocking: true,\n editData: true\n },\n projectsEnrollmentsAdministration: {\n searchNPreviewData: true,\n editData: true\n },\n permissionsAdministration: {\n previewListUsersAuthorized: true,\n functionalityManagement: true,\n permissionsManagement: true\n }\n },\n contentAdministration: {\n contentAdministration: {\n help: true,\n generalContentCookiesRegulation: true,\n statements: true\n },\n permissionsAdministration: {\n previewListUsersAuthorized: true,\n functionalityManagement: true,\n permissionsManagement: true\n }\n },\n implementationLevelsDictionaryAdministration: {\n implementationLevelsDictionaryAdministration: {\n previewData: true,\n editData: true\n },\n permissionsAdministration: {\n previewListUsersAuthorized: true,\n functionalityManagement: true,\n permissionsManagement: true\n }\n },\n usersAdministration: {\n usersAdministration: {\n previewListUsers: true,\n blockingUsers: true\n },\n permissionsAdministration: {\n previewListUsersAuthorized: true,\n functionalityManagement: true,\n permissionsManagement: true\n }\n }\n }\n */\n permissions = permissions || {};\n const adProjEnrAdm = permissions.adProjectEnrollments || {};\n\n const usersAdm = permissions.usersAdministration || {};\n const usersAdmUsersAdministration =\n usersAdm.usersAdministration || {};\n const usersAndPermissionsPreviewListUsers =\n usersAdmUsersAdministration.previewListUsers || false;\n const usersAdmPermissionsAdministration =\n usersAdm.permissionsAdministration || {}\n const usersAndPermissionsPreviewListUsersAuthorized =\n usersAdmPermissionsAdministration.previewListUsersAuthorized ||\n false;\n\n const contentAdm = permissions.contentAdministration || {};\n const contentAdmContentAdministration =\n contentAdm.contentAdministration || {};\n const contentAdmPermissionsAdministration =\n contentAdm.permissionsAdministration || {};\n const implementationLevelsDictionaryAdm =\n permissions.implementationLevelsDictionaryAdministration || {};\n const implementationLevelsDictionaryAdmPermissionsAdministration =\n implementationLevelsDictionaryAdm.permissionsAdministration || {};\n const implementationLevelsDictionaryAdmImplementationLevelsDictionaryAdministration =\n implementationLevelsDictionaryAdm.implementationLevelsDictionaryAdministration || {};\n\n return {\n // used in menu\n fullUsersAndPermissions: usersAndPermissionsPreviewListUsers ||\n usersAndPermissionsPreviewListUsersAuthorized,\n usersAndPermissionsPreviewListUsers,\n usersAndPermissionsPreviewListUsersAuthorized,\n // used in add/edit permissions forms\n usersPermissionsManagement: {\n functionality:\n usersAdmPermissionsAdministration.functionalityManagement ||\n false,\n permissions:\n usersAdmPermissionsAdministration.permissionsManagement ||\n false,\n },\n blockingUsers:\n usersAdmUsersAdministration.blockingUsers || false,\n // used in menu\n projectsEnrollments: (adProjEnrAdm\n .projectsEnrollmentsAdministration || {})\n .searchNPreviewData || false,\n // used in menu\n advertisements: (adProjEnrAdm\n .advertisementAdministration || {})\n .searchNPreviewData || false,\n // used in menu\n fullContent: Object.values(contentAdmContentAdministration).filter(\n value => value === true).length > 0,\n help: contentAdmContentAdministration.help || false,\n generalContentCookiesRegulation:\n contentAdmContentAdministration.generalContentCookiesRegulation\n || false,\n statements: contentAdmContentAdministration.statements || false,\n // used in add/edit permissions forms\n contentPermissionsManagement: {\n functionality:\n contentAdmPermissionsAdministration.functionalityManagement,\n permissions:\n contentAdmPermissionsAdministration.permissionsManagement,\n },\n addImplementationLevelPermission:\n (adProjEnrAdm.permissionsAdministration || {}).functionalityManagement ||\n (adProjEnrAdm.permissionsAdministration || {}).permissionsManagement ||\n false\n ,\n // used in add/edit permissions forms\n implementationLevelsDictionaryPermissionsManagement: {\n functionality:\n implementationLevelsDictionaryAdmPermissionsAdministration.functionalityManagement,\n permissions:\n implementationLevelsDictionaryAdmPermissionsAdministration.permissionsManagement,\n },\n previewDictionaries:\n implementationLevelsDictionaryAdmImplementationLevelsDictionaryAdministration\n .previewData || false,\n editingDictionaries:\n implementationLevelsDictionaryAdmImplementationLevelsDictionaryAdministration\n .editData || false,\n }\n }\n\n refresh = (data) => {\n // from sativa\n this.setState(\n prevState => {\n // if identifier is null, user has logged out in the meantime, do nothing\n if (prevState.user.identifier === null) {\n return {}\n }\n const user = data.data;\n return {\n user: Object.assign(\n {},\n prevState.user,\n {\n email: user.email,\n forename: user.first_name,\n identifier: user.id,\n surname: user.last_name,\n }\n ),\n auth: Object.assign(\n {},\n prevState.auth,\n {expire: data.meta.expire}\n ),\n }\n },\n );\n }\n\n refreshTimer = (expire, callback) => {\n this.setState(\n prevState => {\n // if identifier is null, user has logged out in the meantime, do nothing\n if (prevState.user.identifier === null) { return {} }\n return {\n auth: Object.assign(\n {},\n prevState.auth,\n {expire}\n ),\n }\n },\n () => {\n // run callback only if authenticated\n if (this.state.user.identifier !== null) { callback() }\n }\n );\n }\n\n logout = (callback=null) => {\n this.setState(\n {\n user: EMPTY_USER,\n auth: EMPTY_AUTH,\n permissions: {},\n },\n () => {\n if (callback) {\n callback();\n }\n }\n );\n }\n\n removePermission = (permissionName) => {\n /*\n Possible permission's names:\n fullUsersAndPermissions, usersAndPermissionsPreviewListUsers,\n usersAndPermissionsPreviewListUsersAuthorized,\n blockingUsers,\n projectsEnrollments,\n advertisements,\n fullContent, help, generalContentCookiesRegulation, statements,\n previewDictionaries, editingDictionaries\n */\n this.setState(prevState => {\n let permissions = {\n ...prevState.permissions,\n [permissionName]: false\n };\n if ([\n 'help', 'generalContentCookiesRegulation', 'statements'\n ].includes(permissionName)) {\n permissions['fullContent'] = permissions.help ||\n permissions.generalContentCookiesRegulation ||\n permissions.statements;\n } else if ([\n 'usersAndPermissionsPreviewListUsers',\n 'usersAndPermissionsPreviewListUsersAuthorized'\n ].includes(permissionName)) {\n permissions['fullUsersAndPermissions'] =\n permissions.usersAndPermissionsPreviewListUsers ||\n permissions.usersAndPermissionsPreviewListUsersAuthorized\n }\n return {permissions}\n });\n }\n\n render() {\n return (\n <UserContext.Provider value={this.state}>\n {this.props.children}\n </UserContext.Provider>\n );\n }\n}\n\n\nexport const UserConsumer = UserContext.Consumer;\nexport { UserContext };\n","import { TOKEN_COOKIE_NAME } from './const';\nimport {\n getAuthTokenCookieValue,\n getCookieValue,\n refreshTimerAfterRequest\n} from './helpers';\n\n\nconst fetchApi = (url, method, headers, body, callbackSuccess,\n callbackError, callbackIncorrectStatus, callbackShowErrors=null) => {\n\n const xhr = new XMLHttpRequest();\n if (!['POST', 'PUT'].includes(method)) {\n if (Object.keys(body).length) {\n let urlParamsPart = '';\n for (let [k, v] of Object.entries(body)) {\n if (Array.isArray(v)) {\n let i = 0;\n for (let subvalue of v) {\n urlParamsPart += `&${k}[${i++}]=${subvalue}`;\n }\n } else {\n urlParamsPart += `&${k}=${v}`;\n }\n }\n if (urlParamsPart.length) {\n url += `?${urlParamsPart.substring(1)}`;\n }\n }\n }\n xhr.open(method, encodeURI(url));\n\n // headers\n xhr.setRequestHeader('Content-type','application/json; charset=utf-8');\n const authTokenCookieValue = getAuthTokenCookieValue();\n if (authTokenCookieValue) {\n xhr.setRequestHeader('X-Auth-Token', authTokenCookieValue);\n }\n if (headers || null) {\n for (let [name, value] of Object.entries(headers)) {\n xhr.setRequestHeader(name, value);\n }\n }\n\n // define values and callbacks\n xhr.timeout = 40000;\n xhr.ontimeout = () => {\n callbackError({message: 'Serwer zbyt dÅ‚ugo nie odpowiada.'})\n }\n xhr.onerror = () => {callbackIncorrectStatus(xhr.status)};\n xhr.onload = () => {\n if ([403, 404].includes(xhr.status)) {\n callbackIncorrectStatus(xhr.status);\n return\n }\n\n let success = true;\n let jsonData = {};\n try {\n jsonData = JSON.parse(xhr.responseText);\n } catch(error) {\n success = false;\n }\n if (!success) {\n callbackError({message: 'WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d.'});\n } else {\n refreshTimerAfterRequest(authTokenCookieValue, xhr.status);\n if (jsonData.status === 'OK') {\n callbackSuccess(jsonData.data);\n } else if (jsonData.status === 'Error') {\n if (callbackShowErrors && jsonData.errors && Object.keys(jsonData.errors).length > 0) {\n callbackShowErrors(jsonData.errors)\n } else {\n callbackError(jsonData);\n }\n } else {\n callbackIncorrectStatus(xhr.status);\n }\n }\n };\n\n xhr.send(JSON.stringify(body));\n return xhr\n};\n\n\nconst fetchSativaApi = (url, callbackSuccess, callbackError, callbackIncorrectStatus) => {\n\n const xhr = new XMLHttpRequest();\n xhr.open('GET', encodeURI('/konto' + url));\n\n // headers\n xhr.setRequestHeader('Content-Type', 'application/json');\n const authTokenCookieValue = getAuthTokenCookieValue();\n if (authTokenCookieValue) {\n xhr.setRequestHeader('ACCESS-TOKEN', decodeURIComponent(\n getCookieValue(TOKEN_COOKIE_NAME)));\n }\n\n // define values and callbacks\n xhr.timeout = 15000;\n xhr.ontimeout = () => {\n callbackError({message: 'Serwer zbyt dÅ‚ugo nie odpowiada.'})\n }\n xhr.onerror = () => {callbackIncorrectStatus(xhr.status)};\n xhr.onload = () => {\n if (xhr.status === 200) {\n let success = true;\n let jsonData = {};\n try {\n jsonData = JSON.parse(xhr.responseText);\n } catch(error) {\n success = false;\n }\n if (!success) {\n callbackError({message: 'WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d.'});\n } else {\n callbackSuccess(jsonData);\n }\n return\n }\n callbackIncorrectStatus(xhr.status);\n };\n xhr.send();\n return xhr\n}\n\n\nexport { fetchApi, fetchSativaApi }\n","// Notice! Remember to set double '\\' in regex if needed, e.g. (\\\\d+),\n// otherwise regex won't work\nexport const URLS = {\n home: {\n path: '/',\n pattern: /^\\/$/\n },\n login: {\n path: '/logowanie',\n pattern: /^\\/logowanie$/\n },\n loginError: {\n path: '/blad-logowania',\n pattern: /^\\/blad-logowania$/\n },\n projects: {\n path: '/projekty',\n pattern: /^\\/projekty$/,\n },\n advertisements: {\n path: '/ogloszenia',\n pattern: /^\\/ogloszenia$/,\n },\n advertisementsSearch: {\n path: '/ogloszenia/szukaj',\n pattern: /^\\/ogloszenia\\/szukaj$/,\n },\n advertisementsNew: {\n path: '/ogloszenia/nowe',\n pattern: /^\\/ogloszenia\\/nowe$/,\n },\n advertisementsDetails: {\n path: '/ogloszenia/:id(\\\\d+)',\n pattern: /^\\/ogloszenia\\/\\d+$/,\n getUrl: (advertisementId) => `/ogloszenia/${advertisementId}`,\n },\n advertisementsDetailsDraft: {\n path: '/ogloszenia/:id(\\\\d+)/robocza',\n pattern: /^\\/ogloszenia\\/\\d+\\/robocza$/,\n },\n advertisementsDetailsVersion: {\n path: '/ogloszenia/:id(\\\\d+)/wersja:versionId(\\\\d+)',\n pattern: /^\\/ogloszenia\\/\\d+\\/wersja\\d+$/,\n },\n advertisementsEdit: {\n path: '/ogloszenia/:id(\\\\d+)/edytuj',\n pattern: /^\\/ogloszenia\\/\\d+\\/edytuj$/,\n getUrl: (advertisementId) => `/ogloszenia/${advertisementId}/edytuj`,\n },\n offers: {\n path: '/oferty',\n pattern: /^\\/oferty$/,\n },\n newsletter: {\n path: '/newsletter',\n pattern: /^\\/newsletter$/,\n },\n accessibility: {\n path: '/deklaracja-dostepnosci',\n pattern: /^\\/deklaracja-dostepnosci$/,\n },\n users: {\n path: '/uzytkownicy',\n pattern: /^\\/uzytkownicy$/,\n },\n usersDetails: {\n path: '/uzytkownicy/:id(\\\\d+)',\n pattern: /^\\/uzytkownicy\\/\\d+$/,\n getUrl: (userId) => `/uzytkownicy/${userId}`\n },\n usersMyProfile: {\n path: '/uzytkownicy/moj-profil',\n pattern: /^\\/uzytkownicy\\/moj-profil$/,\n },\n managementProjects: {\n path: '/administracja/projekty',\n pattern: /^\\/administracja\\/projekty$/,\n },\n managementAdvertisements: {\n path: '/administracja/ogloszenia',\n pattern: /^\\/administracja\\/ogloszenia$/,\n },\n managementContents: {\n path: '/zarzadzanie-trescia',\n pattern: /^\\/zarzadzanie-trescia$/,\n },\n managementContentsHelps: {\n path: '/zarzadzanie-trescia/pomoc',\n pattern: /^\\/zarzadzanie-trescia\\/pomoc$/,\n },\n managementContentsHelpsNew: {\n path: '/zarzadzanie-trescia/pomoc/nowa',\n pattern: /^\\/zarzadzanie-trescia\\/pomoc\\/nowa$/,\n },\n managementContentsHelpsEdit: {\n path: '/zarzadzanie-trescia/pomoc/:id(\\\\d+)-:slug([\\\\w-]+)/edytuj',\n pattern: /^\\/zarzadzanie-trescia\\/pomoc\\/\\d+-[\\w-]+\\/edytuj$/,\n },\n managementContentsHelpsDetails: {\n path: '/zarzadzanie-trescia/pomoc/:id(\\\\d+)-:slug([\\\\w-]+)',\n pattern: /^\\/zarzadzanie-trescia\\/pomoc\\/\\d+-[\\w-]+$/,\n },\n managementContentsRegulations: {\n path: '/zarzadzanie-trescia/regulaminy',\n pattern: /^\\/zarzadzanie-trescia\\/regulaminy$/,\n },\n managementContentsRegulationsCurrent: {\n path: '/zarzadzanie-trescia/regulaminy/aktualny',\n pattern: /^\\/zarzadzanie-trescia\\/regulaminy\\/aktualny$/,\n },\n managementContentsRegulationsForPublishing: {\n path: '/zarzadzanie-trescia/regulaminy/do-opublikowania',\n pattern: /^\\/zarzadzanie-trescia\\/regulaminy\\/do-opublikowania$/,\n },\n managementContentsRegulationsNew: {\n path: '/zarzadzanie-trescia/regulaminy/nowy',\n pattern: /^\\/zarzadzanie-trescia\\/regulaminy\\/nowy$/,\n },\n managementContentsRegulationsEdit: {\n path: '/zarzadzanie-trescia/regulaminy/edytuj',\n pattern: /^\\/zarzadzanie-trescia\\/regulaminy\\/edytuj$/,\n },\n managementContentsCookies: {\n path: '/zarzadzanie-trescia/ciasteczka',\n pattern: /^\\/zarzadzanie-trescia\\/ciasteczka$/,\n },\n managementContentsCookiesNew: {\n path: '/zarzadzanie-trescia/ciasteczka/nowe',\n pattern: /^\\/zarzadzanie-trescia\\/ciasteczka\\/nowe$/,\n },\n managementContentsCookiesEdit: {\n path: '/zarzadzanie-trescia/ciasteczka/edytuj',\n pattern: /^\\/zarzadzanie-trescia\\/ciasteczka\\/edytuj$/,\n },\n managementContentsGeneralContents: {\n path: '/zarzadzanie-trescia/tresci-ogolne',\n pattern: /^\\/zarzadzanie-trescia\\/tresci-ogolne$/,\n },\n managementContentsGeneralContentsEdit: {\n path: '/zarzadzanie-trescia/tresci-ogolne/:id(\\\\d+)/edytuj',\n pattern: /^\\/zarzadzanie-trescia\\/tresci-ogolne\\/\\d+\\/edytuj$/,\n },\n managementContentsGeneralContentsDetails: {\n path: '/zarzadzanie-trescia/tresci-ogolne/:id(\\\\d+)',\n pattern: /^\\/zarzadzanie-trescia\\/tresci-ogolne\\/\\d+$/\n },\n managementContentsStatements: {\n path: '/zarzadzanie-trescia/komunikaty',\n pattern: /^\\/zarzadzanie-trescia\\/komunikaty$/,\n },\n managementContentsStatementsNew: {\n path: '/zarzadzanie-trescia/komunikaty/nowy',\n pattern: /^\\/zarzadzanie-trescia\\/komunikaty\\/nowy$/,\n },\n managementContentsStatementsEdit: {\n path: '/zarzadzanie-trescia/komunikaty/:id(\\\\d+)-:slug([\\\\w-]+)/edytuj',\n pattern: /^\\/zarzadzanie-trescia\\/komunikaty\\/\\d+-[\\w-]+\\/edytuj$/,\n },\n managementContentsStatementsDetails: {\n path: '/zarzadzanie-trescia/komunikaty/:id(\\\\d+)-:slug([\\\\w-]+)',\n pattern: /^\\/zarzadzanie-trescia\\/komunikaty\\/\\d+-[\\w-]+$/,\n },\n managementPerspectives: {\n path: '/administracja/perspektywy',\n pattern: /^\\/administracja\\/perspektywy$/,\n },\n managementProgrammesForPerspective: {\n path: '/administracja/perspektywy/:perspectiveId(\\\\d+)/programy',\n pattern: /^\\/administracja\\/perspektywy\\/\\d+\\/programy$/,\n getUrl: (perspectiveId) => `/administracja/perspektywy/${perspectiveId}/programy`,\n },\n managementPrioritiesForProgramme: {\n path: '/administracja/programy/:programmeId(\\\\d+)/osie',\n pattern: /^\\/administracja\\/programy\\/\\d+\\/osie$/,\n getUrl: (programmeId) =>\n `/administracja/programy/${programmeId}/osie`,\n },\n managementSubactivitiesForPriority: {\n path: '/administracja/osie/:priorityId(\\\\d+)/dzialania-i-poddzialania',\n pattern: /^\\/administracja\\/osie\\/\\d+\\/dzialania-i-poddzialania$/,\n getUrl: (priorityId) =>\n `/administracja/osie/${priorityId}/dzialania-i-poddzialania`,\n },\n managementActivitiesForPriority: {\n path: '/administracja/osie/:priorityId(\\\\d+)/dzialania',\n pattern: /^\\/administracja\\/osie\\/\\d+\\/dzialania$/,\n getUrl: (priorityId) => `/administracja/osie/${priorityId}/dzialania`,\n },\n managementRegionsForSubactivity: {\n path: '/administracja/dzialania-i-poddzialania/:activityId(\\\\d+)/regiony',\n pattern: /^\\/dzialania-i-poddzialania\\/osie\\/\\d+\\/regiony$/,\n getUrl: (activityId) => `/administracja/dzialania-i-poddzialania/${activityId}/regiony`,\n },\n managementInstitutionsForActivity: {\n path: '/administracja/dzialania/:activityId(\\\\d+)/instytucje',\n pattern: /^\\/administracja\\/dzialania\\/\\d+\\/instytucje$/,\n getUrl: (activityId) => `/administracja/dzialania/${activityId}/instytucje`,\n },\n helps: {\n path: '/pomoc',\n pattern: /^\\/pomoc$/,\n },\n helpsDetails: {\n path: '/pomoc/:id(\\\\d+)-:slug([\\\\w-]+)',\n pattern: /^\\/pomoc\\/\\d+-[\\w-]+$/,\n },\n regulations: {\n path: '/regulamin',\n pattern: /^\\/regulamin$/,\n },\n subscriptions: {\n path: '/subskrypcje',\n pattern: /^\\/subskrypcje$/,\n },\n statements: {\n path: '/komunikaty',\n pattern: /^\\/komunikaty$/,\n },\n statementsDetails: {\n path: '/komunikaty/:id(\\\\d+)-:slug([\\\\w-]+)',\n pattern: /^\\/komunikaty\\/\\d+-[\\w-]+$/,\n },\n // sativa\n sativaUsersDetails: {\n getUrl: (userIdentifier) => `/konto/panel/uzytkownicy/${userIdentifier}`\n },\n};\n","const colors = {\n primary: '#0d47a1',\n secondary: '#5eb96a',\n warn: '#fff2b2',\n error: '#eb0000',\n background: '#fff',\n disabled: '#f2f2f2',\n surface: '#fff',\n onPrimary: '#fff',\n onSecondary: 'rgba(0, 0, 0, 0.87)',\n onSurface: 'rgba(0, 0, 0, 0.87)',\n onError: '#fff',\n darkBg: '#757575',\n textPrimaryOnBackground: 'rgba(0, 0, 0, 0.87)',\n textSecondaryOnBackground: 'rgba(0, 0, 0, 0.7)',\n textHintOnBackground: 'rgba(0, 0, 0, 0.7)',\n textDisabledOnBackground: 'rgba(0, 0, 0, 0.7)',\n textIconOnBackground: 'rgb(0, 0, 0)',\n textPrimaryOnLight: 'rgba(0, 0, 0, 0.87)',\n textSecondaryOnLight: 'rgba(0, 0, 0, 0.7)',\n textHintOnLight: '#757575',\n textDisabledOnLight: 'rgba(0, 0, 0, 0.7)',\n textIconOnLight: 'rgba(0, 0, 0, 0.7)',\n textPrimaryOnDark: 'white',\n textSecondaryOnDark: 'rgba(255, 255, 255, 0.7)',\n textHintOnDark: 'rgba(255, 255, 255, 0.5)',\n textDisabledOnDark: 'rgba(255, 255, 255, 0.5)',\n textIconOnDark: 'rgba(255, 255, 255, 0.5)',\n};\n\nconst customSelectStyles = {\n input: (styles, state) => {\n return {\n ...styles,\n color: '#000',\n minWidth: 200,\n fontSize: 16,\n }\n },\n option: (provided, state) => ({\n ...provided,\n color: state.isFocused ? '#fff' : (state.isSelected ? colors.primary : '#000'),\n backgroundColor: state.isFocused ? colors.primary : (state.isSelected ? 'rgba(0, 0, 0, .04)' : '#fff'),\n fontWeight: state.isSelected && '900',\n fontSize: 16,\n borderWidth: state.isSelected && 1,\n ':active': {\n backgroundColor: colors.primary,\n color: '#fff',\n },\n }),\n singleValue: (provided, state) => ({\n ...provided,\n color: '#000'\n }),\n placeholder: (styles) => ({\n ...styles,\n color: 'rgba(0, 0, 0, 0.7)'\n }),\n multiValue: (styles) => {\n return {\n ...styles,\n color: '#fff',\n backgroundColor: colors.primary,\n }\n },\n multiValueLabel: (styles) => {\n return {\n ...styles,\n color: '#fff'\n }\n },\n multiValueRemove: (styles) => {\n return {\n ...styles,\n ':hover': {\n backgroundColor: colors.primary,\n color: '#fff',\n cursor: 'pointer'\n }\n }\n },\n}\n\n\nexport { colors, customSelectStyles };\n","// USAGE:\n// <Text>text</Text> - black text\n// <Text label>text</Text> - grey uppercase text, label for <FieldWithLabel /> component\n// <Text info>text</Text> - primary (blue) color\n// <Text error>text</Text> - red color\n// <Text accentHeader>text</Text> - bigger (18px) blue (primary) text\n// <Text mainHeader tag=\"h2\">text</Text> - bigger (28px) blue (primary) text for section title\n// <Text sectionHeader tag=\"h2\">text</Text> - bigger (28px) without margin-bottom\n\n\nimport React from 'react';\nimport { Typography } from '@rmwc/typography';\n\nimport { colors } from '../vars/vars'\n\n\nconst Text = (props) => {\n const {\n accentHeader,\n children,\n className,\n error,\n errorColorReverse,\n htmlFor,\n info,\n label,\n labelFor,\n mainHeader,\n sectionHeader,\n tag,\n use,\n ...otherProps\n } = props;\n\n const {\n errorTextStyle,\n errorColorReverseStyle,\n headerTextStyle,\n infoTextStyle,\n } = styles;\n\n return (\n <Typography\n tag={tag ? tag : 'p'}\n use={label ? 'body2' : (use ? use : 'subtitle2')}\n style={info ? infoTextStyle : (error ? errorTextStyle : (errorColorReverse ? errorColorReverseStyle : (accentHeader && headerTextStyle)))}\n className={[label ? 'label' : 'text', mainHeader && 'text--main-header', sectionHeader && 'text--section-header', className]}\n htmlFor={labelFor || htmlFor || null}\n {...otherProps} >\n {children}\n </Typography>\n );\n}\n\nconst styles = {\n errorTextStyle: {\n color: colors.error,\n },\n errorColorReverseStyle: {\n color: '#fff',\n },\n infoTextStyle: {\n color: colors.primary,\n fontWeight: '400',\n },\n headerTextStyle: {\n fontSize: 18,\n fontWeight: 700,\n marginTop: 0,\n marginBottom: 10,\n color: colors.primary,\n },\n}\n\n\nexport { Text };\n","import React from 'react';\n\nimport { Text } from '../Text';\n\n\nexport const Loader = (props) => {\n return <Text info role=\"alert\">Trwa inicjalizacja danych...</Text>\n}\n","export default __webpack_public_path__ + \"static/media/loading.96f909e5.svg\";","import React from 'react';\nimport loaderIcon from '../../../static/img/loading.svg';\n\nexport const LoaderIcon = (props) => <img src={loaderIcon} alt=\"Trwa Å‚adowanie danych...\" />;\n","import React from 'react';\nimport { Button } from '@rmwc/button';\nimport { Elevation } from '@rmwc/elevation';\nimport { Icon } from '@rmwc/icon';\nimport { Toolbar, ToolbarRow, ToolbarSection, ToolbarTitle } from '@rmwc/toolbar';\nimport { ThemeProvider } from '@rmwc/theme';\nimport { Typography } from '@rmwc/typography';\nimport { MenuSurfaceAnchor, MenuSurface } from '@rmwc/menu';\nimport '@material/menu/dist/mdc.menu.css';\nimport '@material/menu-surface/dist/mdc.menu-surface.css';\nimport '@material/list/dist/mdc.list.css';\nimport '@material/button/dist/mdc.button.css';\nimport '@rmwc/icon/icon.css';\n\nimport { colors } from '../vars/vars';\nimport { Text } from './Text';\n\n\nconst Box = (props) => {\n const {\n ariaLabelMoreOptions,\n boxTag,\n boxWithMenu,\n className,\n children,\n flexiblewidth,\n fullwidth,\n headerTag,\n invalid,\n selected,\n subtitle,\n titleOneRow,\n titleTwoRows,\n titleWithSubtitle,\n ...otherProps\n } = props;\n\n const colorsToolbar = {\n primary: colors.primary\n };\n\n const [open, setOpen] = React.useState(false);\n\n let menuSection = (\n <ToolbarSection alignEnd className=\"box__toolbar-section\">\n <MenuSurfaceAnchor>\n <Button\n title={ariaLabelMoreOptions}\n onClick={e => {\n setOpen(!open);\n e.currentTarget.blur();\n }}\n unelevated\n className=\"btn--icon-only btn--primary\" >\n <span className=\"sr-only\">\n {ariaLabelMoreOptions}\n {invalid && '. Uwaga, edytuj, aby poprawić bÅ‚Ä™dy!'}\n </span>\n <Icon aria-hidden=\"true\" icon=\"more_vert\" />\n </Button>\n <MenuSurface open={open} onClose={evt => setOpen(false)} role=\"dialog\" >\n <nav className=\"box__corner-menu\">\n {boxWithMenu}\n </nav>\n </MenuSurface>\n </MenuSurfaceAnchor>\n </ToolbarSection>\n );\n\n let toolbar;\n if (![null, undefined].includes(titleOneRow)) {\n toolbar = (\n <Toolbar>\n <ToolbarRow>\n <ToolbarSection alignStart className=\"box__toolbar-section box__title-section\">\n <ToolbarTitle tag={headerTag || 'h2'}>{titleOneRow}</ToolbarTitle>\n </ToolbarSection>\n {boxWithMenu && menuSection}\n </ToolbarRow>\n </Toolbar>\n )\n }\n\n if (![null, undefined].includes(titleTwoRows)) {\n toolbar = (\n <Toolbar theme='primaryBg'>\n <ToolbarRow>\n <ToolbarSection alignStart style={{zIndex: 0}} className=\"box__title-section\">\n <Typography use=\"subtitle2\">{subtitle}</Typography>\n </ToolbarSection>\n {boxWithMenu && menuSection}\n </ToolbarRow>\n <ToolbarRow>\n <ToolbarTitle tag={headerTag || 'h2'}>{titleTwoRows}</ToolbarTitle>\n </ToolbarRow>\n </Toolbar>\n )\n }\n\n if (![null, undefined].includes(titleWithSubtitle)) {\n toolbar = (\n <Toolbar theme='primaryBg'>\n <ToolbarRow>\n <ToolbarSection alignStart className=\"box__flex-title box__title-section\">\n <ToolbarTitle tag={headerTag || 'h2'}>{titleWithSubtitle}</ToolbarTitle>\n </ToolbarSection>\n {boxWithMenu && menuSection}\n </ToolbarRow>\n <ToolbarRow>\n <Typography use=\"subtitle2\">{subtitle}</Typography>\n {invalid ? <Text errorColorReverse style={{ marginRight: 25, marginBottom: 5 }}><Icon aria-hidden=\"true\" icon={{ icon: 'warning', size: 'xsmall' }} style={{marginRight: 3}} /> BÅ‚Ä™dy!</Text> : ''}\n </ToolbarRow>\n </Toolbar>\n )\n }\n\n let boxClassName = 'box ';\n fullwidth && (boxClassName += 'box--long-content ');\n flexiblewidth && (boxClassName += 'box--flexible ');\n selected && (boxClassName += 'box--selected ')\n className && (boxClassName += className);\n\n return (\n <Elevation z='3' tag={boxTag || 'section'} className={boxClassName} theme='background' {...otherProps}>\n <ThemeProvider options={colorsToolbar} >\n {toolbar}\n </ThemeProvider>\n <div className=\"box__content\">\n {children}\n </div>\n </Elevation>\n );\n}\n\nexport { Box };\n","// USAGE\n// <Breadcrumps>\n// <li className=\"breadcrumps__link\">Link to upper content</li>\n// <li className=\"breadcrumps__current\">Inactive text of current content</li>\n// </Breadcrumps>\n\nimport React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Icon } from '@rmwc/icon';\n\n\nconst Breadcrumps = (props) => {\n const {\n className,\n children,\n isFront,\n notZarzadzanieTrescia,\n } = props;\n\n let breadcrumpsClassName = 'breadcrumps ';\n className && (breadcrumpsClassName += className);\n\n return (\n <nav className={breadcrumpsClassName}>\n <ul className=\"breadcrumps__list\">\n <li className=\"breadcrumps__link\"><Link to='/' title=\"Strona główna\"><Icon aria-hidden=\"true\" icon={{ icon: 'home', size: 'small' }} style={{ marginTop: 3 }}/></Link></li>\n {!isFront && !notZarzadzanieTrescia && <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia'>Administracja treÅ›ciami</Link></li>}\n {children}\n </ul>\n </nav>\n );\n}\n\nexport { Breadcrumps };\n","// <GridCustom /> without props gives you container with:\n// display: flex\n// flex-wrap: wrap\n// justify-content: flex-start\n\n// center prop makes the container content centered\n// centerHorizontal prop makes the container content centered horizontaly\n// centerVertical prop makes the container content centered verticaly\n// flexS prop makes the container displayed: flex from 600px up\n// flexM prop makes the container displayed: flex from 800px up\n// flexL prop makes the container displayed: flex from 1150px up\n// fullwidth prop gives justify-content: space-between\n// flexTop prop makes the container content justify-content: flex-start\n// flexEnd prop gives justify-content: flex-end\n// noWrap prop gives flex-wrap: nowrap\n\n// <GridCustom flexEnd className=\" box__button-container\"> - places button container always on bottom right\n\n\n\nimport React from 'react';\n\nconst GridCustom = (props) => {\n const {\n center,\n centerHorizontal,\n centerVertical,\n className,\n flexBottom,\n flexEnd,\n flexS,\n flexM,\n flexL,\n flexTop,\n fullheight,\n fullwidth,\n keyName,\n noWrap,\n tag,\n } = props;\n\n let gridClassName = 'grid-custom ';\n\n if (flexS) {\n gridClassName += 'grid-custom--flex-s '\n } else if (flexM) {\n gridClassName += 'grid-custom--flex-m '\n } else if (flexL) {\n gridClassName += 'grid-custom--flex-l '\n };\n\n fullheight && (gridClassName += 'grid-custom--full-height ');\n fullwidth && (gridClassName += 'grid-custom--full-width ');\n noWrap && (gridClassName += 'grid-custom--one-row ');\n center && (gridClassName += 'grid-custom--center ');\n centerHorizontal && (gridClassName += 'grid-custom--center-h ');\n centerVertical && (gridClassName += 'grid-custom--center-v ');\n flexEnd && (gridClassName += 'grid-custom--end ');\n flexTop && (gridClassName += 'grid-custom--top ');\n flexBottom && (gridClassName += 'grid-custom--bottom ');\n className && (gridClassName += className);\n\n const GridTag = tag ? tag : 'section';\n\n return (\n <GridTag\n className={gridClassName}\n key={keyName}\n >\n {props.children}\n </GridTag>\n );\n}\n\nexport { GridCustom };\n","// Possible button variants:\n// <ButtonStyled>No props</ButtonStyled> - blue text, no bg, no icon\n// <ButtonStyled lite>lite</ButtonStyled> - blue text, blue border, no icon\n// <ButtonStyled cancel>cancel</ButtonStyled> - gray text, gray border, no icon\n// <ButtonStyled next>next</ButtonStyled> - white text, blue bg, arrow_forward icon\n// <ButtonStyled prev>prev</ButtonStyled> - white text, gray bg, arrow_back icon\n// <ButtonStyled save>save</ButtonStyled> - white text, green bg, done icon\n// <ButtonStyled add>add</ButtonStyled> - white text, blue bg, add icon\n// <ButtonStyled remove>remove</ButtonStyled> - red text, red border, no icon\n// <ButtonStyled removeFull>removeFull</ButtonStyled> - white text, red bg, no icon\n// <ButtonStyled noMargin>noMargin</ButtonStyled> - removes site margin, gives: margin: .5em 0\n\n\nimport React from 'react';\nimport { Button } from '@rmwc/button';\nimport { Icon } from '@rmwc/icon';\nimport '@material/button/dist/mdc.button.css';\nimport { GridCustom } from './GridCustom';\n\nimport { colors } from '../vars/vars';\n\n\nconst ButtonStyled = (props) => {\n const {\n add,\n cancel,\n children,\n className,\n disabled,\n icon,\n id,\n lite,\n next,\n noMargin,\n onClick,\n prev,\n primary,\n print,\n remove,\n removeFull,\n save,\n tag,\n to,\n ...otherProps\n } = props;\n\n const {\n buttonIconStyle,\n cancelBtnStyle,\n disabledBtnStyle,\n prevBgStyle,\n primaryBtnStyle,\n outlineBtnStyle,\n removeFullBgStyle\n } = styles;\n\n return (\n <Button\n className={[noMargin ? 'button--no-margin ' : '', className]}\n danger={remove || removeFull}\n disabled={disabled}\n id={id}\n outlined={lite || remove}\n ripple={false}\n style={disabled ? disabledBtnStyle : ( add || next || primary || print || save ? primaryBtnStyle : (prev ? prevBgStyle : (removeFull ? removeFullBgStyle : (remove || lite ? outlineBtnStyle: (cancel && cancelBtnStyle)))))}\n tag={tag}\n to={to}\n unelevated={cancel || next || save || add || removeFull || prev || primary || print}\n onClick={onClick}\n {...otherProps}\n >\n <GridCustom centerVertical centerHorizontal>\n {(add || cancel || icon || next || prev || print || save) && (\n <Icon\n icon={\n next ? 'arrow_forward' : (prev ? 'arrow_back' : (save ? 'done' : (add ? 'add' : (cancel ? 'clear' : (print ? 'print' : icon)))))\n }\n aria-hidden=\"true\"\n style={buttonIconStyle} />\n )}\n {children}\n </GridCustom>\n\n </Button>\n );\n}\n\nconst styles = {\n cancelBtnStyle: {\n backgroundColor: colors.darkBg\n },\n disabledBtnStyle: {\n backgroundColor: colors.disabled,\n color: '#000',\n borderWidth: 0\n },\n primaryBtnStyle: {\n backgroundColor: colors.primary\n },\n prevBgStyle: {\n backgroundColor: colors.darkBg\n },\n removeFullBgStyle: {\n backgroundColor: colors.error\n },\n outlineBtnStyle: {\n borderWidth: 2,\n backgroundColor: '#fff',\n },\n buttonIconStyle: {\n marginRight: 10\n }\n}\n\nexport { ButtonStyled };\n","import React from 'react';\nimport { ButtonStyled } from './ButtonStyled';\n\nconst ButtonCreatePdf = (props) => {\n const {\n children,\n onClick,\n pdfCreatingOn\n } = props;\n\n let pdfCreatingButtonLabel;\n\n if (pdfCreatingOn) {\n pdfCreatingButtonLabel = 'Tworzenie pliku pdf...'\n } else {\n pdfCreatingButtonLabel = 'Pobierz plik pdf'\n }\n\n return (\n <ButtonStyled\n className=\"btn--pdf-dowload\"\n disabled={pdfCreatingOn}\n onClick={onClick}\n print\n >\n {children || pdfCreatingButtonLabel}\n <span className=\"sr-only\"> Generowanie pliku PDF może potrwać kilka sekund.</span>\n </ButtonStyled>\n )\n}\n\n\nexport { ButtonCreatePdf };\n","import React from 'react';\nimport { Elevation } from '@rmwc/elevation';\nimport { ThemeProvider } from '@rmwc/theme';\nimport { Toolbar, ToolbarRow, ToolbarTitle } from '@rmwc/toolbar';\nimport '@material/toolbar/dist/mdc.toolbar.css';\n\nimport { colors } from '../vars/vars';\n\n\nconst Container = (props) => {\n const {\n containerTag,\n children,\n className,\n style,\n titleTag,\n title\n } = props;\n\n const colorsToolbar = {\n primary: colors.primary,\n }\n\n\n let toolbar;\n if (title) {\n toolbar = (\n <ThemeProvider options={colorsToolbar}>\n <Toolbar theme='primaryBg'>\n <ToolbarRow>\n <ToolbarTitle tag={titleTag ? titleTag : 'h2'}>{title}</ToolbarTitle>\n </ToolbarRow>\n </Toolbar>\n </ThemeProvider>\n )\n }\n\n let containerClassName = 'container ';\n className && (containerClassName += className);\n\n return (\n <Elevation\n z='2'\n tag={containerTag || 'section'}\n className={containerClassName}\n theme='background'\n style={style}>\n {toolbar}\n <div className=\"container__content\">\n {children}\n </div>\n </Elevation>\n );\n}\n\nexport { Container };\n","// https://reactdatepicker.com/\n// https://www.npmjs.com/package/react-datepicker\n\nimport React, { Component } from 'react';\nimport dfIsSameDay from 'date-fns/isSameDay';\nimport DatePicker, { registerLocale } from \"react-datepicker\";\nimport { TextField } from '@rmwc/textfield';\nimport \"react-datepicker/dist/react-datepicker.css\";\n\nimport { fillWithLeadingZero } from '../../helpers';\n\nimport pl from 'date-fns/locale/pl';\nregisterLocale('pl', pl)\n\n\nconst WEEKDAYS = {\n Monday: 'poniedziaÅ‚ek',\n Tuesday: 'wtorek',\n Wednesday: 'Å›roda',\n Thursday: 'czwartek',\n Friday: 'piÄ…tek',\n Saturday: 'sobota',\n Sunday: 'niedziela',\n};\nconst MONTHS = {\n January: 'styczeÅ„',\n February: 'luty',\n March: 'marzec',\n April: 'kwiecieÅ„',\n May: 'maj',\n June: 'czerwiec',\n July: 'lipiec',\n August: 'sierpieÅ„',\n September: 'wrzesieÅ„',\n October: 'październik',\n November: 'listopad',\n December: 'grudzieÅ„',\n};\n\n\nconst isSameDay = (date1, date2) => {\n if (date1 && date2) {\n return dfIsSameDay(date1, date2);\n } else {\n return !date1 && !date2;\n }\n}\n\n\nclass ExtendedDatePicker extends DatePicker {\n\n componentDidUpdate(prevProps, prevState) {\n super.componentDidUpdate(prevProps, prevState);\n if (this.calendar) {\n const this_ = this;\n this.calendar.componentDidUpdate = function(prevProps) {\n this_.props.replaceDays();\n if (this.props.preSelection && !isSameDay(this.props.preSelection, prevProps.preSelection)) {\n this.setState({\n date: this.props.preSelection\n });\n } else if (this.props.openToDate && !isSameDay(this.props.openToDate, prevProps.openToDate)) {\n this.setState({\n date: this.props.openToDate\n });\n }\n };\n }\n }\n}\n\n\nclass DateCalendar extends Component {\n\n // handlers\n\n handleCalendarOpen = () => {\n if (this.props.onCalendarOpen) {\n this.props.onCalendarOpen();\n }\n this.handleTranslateCalendar();\n }\n\n handleMonthChange = () => {\n // this method is needed for calendar with limited days\n this.handleTranslateCalendar();\n this.replaceDays();\n }\n\n handleTranslateCalendar() {\n if (this.props.showMonthYearPicker) {\n this.translateCalendarFields('button.react-datepicker__navigation--previous', 'Poprzedni rok');\n this.translateCalendarFields('button.react-datepicker__navigation--next', 'Kolejny rok');\n } else {\n this.translateCalendarFields('button.react-datepicker__navigation--previous', 'Poprzedni miesiÄ…c');\n this.translateCalendarFields('button.react-datepicker__navigation--next', 'Kolejny miesiÄ…c');\n }\n }\n\n handleChange = (value) => {\n if (value !== null) {\n this.translateCalendarFields(\n '.react-datepicker__month',\n `MiesiÄ…c-${value.getFullYear()}-${fillWithLeadingZero(value.getMonth() + 1)}`\n );\n }\n this.props.onChange(value);\n }\n\n // helpers\n\n // Translate .react-datepicker-popper fields to Polish\n translateCalendarFields(querySelector, ariaLabel) {\n if (!this.props.parentRef.current) { return }\n const calendarField = this.props.parentRef.current.querySelector(querySelector);\n\n if (calendarField) {\n calendarField.setAttribute('aria-label', ariaLabel);\n }\n }\n\n replacePartOfAriaLabel = (querySelector, englishPhrase, polishPhrase) => {\n if (!this.props.parentRef.current) { return }\n this.props.parentRef.current.querySelectorAll(querySelector).forEach(calendarField => {\n const newAriaLabel = calendarField.getAttribute('aria-label').replace(\n englishPhrase, polishPhrase);\n calendarField.setAttribute('aria-label', newAriaLabel);\n });\n }\n\n replaceDays = () => {\n if (this.props.showMonthYearPicker) { return }\n if (this.props.parentRef.current) {\n this.replacePartOfAriaLabel('.react-datepicker__month', 'month', 'MiesiÄ…c')\n this.props.parentRef.current.querySelectorAll('.react-datepicker__day').forEach(calendarField => {\n // 'Choose Sunday, March 1st, 2020'\n const [weekDay, month, day, year] = calendarField.getAttribute('aria-label').replace(/,/g, '').split(' ').slice(1);\n let day_, month_;\n if (Object.keys(WEEKDAYS).includes(weekDay)) {\n day_ = day.replace('st', '').replace('nd', '').replace('rd', '').replace('th', '');\n month_ = MONTHS[month];\n } else {\n day_ = month;\n month_ = day;\n }\n calendarField.setAttribute(\n 'aria-label',\n `Wybierz ${WEEKDAYS[weekDay] || weekDay} ${day_} ${month_} ${year}`\n );\n });\n }\n }\n\n render() {\n const {\n ariaDescribedby,\n dateCalendarId,\n dateFormatCustom,\n dateFormat,\n dateName,\n disabled,\n fullwidth,\n invalid,\n maxDate,\n minDate,\n showMonthYearPicker,\n showTimeSelect,\n showTimeSelectOnly,\n timeIntervals,\n timeCaption,\n value,\n } = this.props;\n\n // NOTE! Don't set onFocus, because it destroy translation\n return (\n <ExtendedDatePicker\n customInput={\n <TextField\n aria-describedby={ariaDescribedby}\n aria-label={`Wpisz lub wybierz z kalendarza datÄ™ ${dateName || ''} w formacie: ${dateFormat || 'rok myÅ›lnik miesiÄ…c myÅ›lnik dzieÅ„'}.`}\n fullwidth={fullwidth}\n id={dateCalendarId}\n invalid={invalid}\n />\n }\n dateFormat={dateFormatCustom ? dateFormatCustom : \"yyyy-MM-dd\"}\n disabled={disabled}\n isClearable={![NaN, null, ''].includes(value)}\n locale=\"pl\"\n maxDate={maxDate}\n minDate={minDate}\n placeholderText=\"\"\n replaceDays={this.replaceDays}\n replacePartOfAriaLabel={this.replacePartOfAriaLabel}\n selected={value}\n showTimeSelect={showTimeSelect}\n showTimeSelectOnly={showTimeSelectOnly}\n timeIntervals={timeIntervals}\n timeCaption={timeCaption}\n onChange={this.handleChange}\n onCalendarClose={this.props.onCalendarClose}\n onCalendarOpen={this.handleCalendarOpen}\n onMonthChange={this.handleMonthChange}\n showMonthYearPicker={showMonthYearPicker}\n />\n );\n }\n}\n\nexport { DateCalendar };\n","import React, { useEffect } from 'react';\n\nimport { setCustomInputAttributes, setCustomSelectAttributes } from '../../helpers';\nimport { Text } from './Text';\n\nconst FieldWithLabel = (props) => {\n const {\n className,\n children,\n inputRef,\n labelFor,\n label,\n selectRef,\n tag,\n ...otherProps\n } = props;\n\n let fieldWithLabelClassName = 'field-with-label ';\n className && (fieldWithLabelClassName += className);\n\n // Add selectRef={React.createRef()} to <FieldWithLabel> with select and inputRef={React.createRef()} to dateTime input.\n // Adding inputRef to text input forces proper reading of aria-label of input trailing icon (for cleaning text input value).\n useEffect(() => {\n if (selectRef && selectRef.current !== null) {\n setCustomSelectAttributes(selectRef);\n }\n\n if (inputRef && inputRef.current !== null) {\n setCustomInputAttributes(inputRef);\n }\n });\n\n return (\n <div\n className={fieldWithLabelClassName}\n ref={selectRef || inputRef}\n {...otherProps}\n >\n <Text label tag={tag ? tag : 'p'} labelFor={tag === 'label' && labelFor}>{label}</Text>\n {children}\n </div>\n );\n}\n\nexport { FieldWithLabel };\n","import React from 'react';\nimport ReactSelect from 'react-select';\nimport { Icon } from '@rmwc/icon';\n\n\nconst instructionsAriaMessage = (event, context) => {\n const { isSearchable, isMulti, label, isDisabled } = context;\n switch (event) {\n case 'menu':\n return `Użyj strzaÅ‚ek góra, dół, aby wybrać opcjÄ™ ${isDisabled ? '' : ', wciÅ›nij Enter, aby wybrać aktualnie zaznaczonÄ… opcjÄ™'}, wciÅ›nij Escape żeby wyjść z menu, wciÅ›nij Tab żeby wybrać opcjÄ™ i wyjść z menu.`;\n case 'input':\n return `${label ? label : 'Select'} jest zaznaczona ${\n isSearchable ? ', wpisz, żeby odÅ›wieżyć listÄ™. Lista opcji zawÄ™zi siÄ™ po wpisaniu kolejnych znaków.' : ''\n }, wciÅ›nij strzaÅ‚kÄ™ w dół, aby otworzyć menu, ${\n isMulti ? ' wciÅ›nij strzaÅ‚kÄ™ w lewo, żeby zaznaczyć wybranÄ… wartość.' : ''\n }`;\n case 'value':\n return 'Użyj strzaÅ‚ek w lewo i w prawo aby przeÅ‚Ä…czać siÄ™ miÄ™dzy zaznaczonymi wartoÅ›ciami, wciÅ›nij Backspace, aby nie zaznaczyć wartoÅ›ci.';\n default:\n return null;\n }\n};\n\n\nconst valueEventAriaMessage = (event, context) => {\n const { value, isDisabled } = context;\n if (!value) return;\n switch (event) {\n case 'deselect-option':\n case 'pop-value':\n case 'remove-value':\n return `opcja ${value}, niewybrana.`;\n case 'select-option':\n return isDisabled ? `opcja ${value} jest nieaktywna. Wybierz innÄ… opcjÄ™.` : `Wybrano opcjÄ™ ${value}.`;\n default:\n return null;\n }\n};\n\n\nconst valueFocusAriaMessage = ({focusedValue, getOptionLabel, selectValue}) => {\n return `wartość ${getOptionLabel(focusedValue)} jest zaznaczona, ${selectValue.indexOf(focusedValue) + 1} z ${selectValue.length}.`\n}\n\n\nexport const optionFocusAriaMessage = ({focusedOption, getOptionLabel, options}) => {\n return `Opcja ${getOptionLabel(focusedOption)}, zaznaczona ${focusedOption.isDisabled ? ' jest nieakywna' : ''}, ${options.indexOf(\n focusedOption) + 1} z ${options.length}.`\n}\n\n\nexport const resultsAriaMessage = ({inputValue, screenReaderMessage}) => {\n return `${screenReaderMessage}${inputValue ? ' dla szukanej frazy ' + inputValue : ''}.`\n}\n\n\nclass Select extends ReactSelect {\n\n componentDidMount() {\n const this_ = this.select;\n this_.announceAriaLiveContext = ({event, context}) => {\n this_.setState({\n ariaLiveContext: instructionsAriaMessage(event, {\n ...context,\n label: this_.props['aria-label'],\n }),\n });\n };\n this_.announceAriaLiveSelection = ({event, context}) => {\n this_.setState({\n ariaLiveSelection: valueEventAriaMessage(event, context),\n });\n };\n this_.constructAriaLiveMessage = () => {\n const {\n ariaLiveContext,\n selectValue,\n focusedValue,\n focusedOption,\n } = this_.state;\n const { options, menuIsOpen, inputValue, screenReaderStatus } = this_.props;\n\n // An aria live message representing the currently focused value in the select.\n const focusedValueMsg = focusedValue ? valueFocusAriaMessage({focusedValue, getOptionLabel: this_.getOptionLabel, selectValue}) : '';\n // An aria live message representing the currently focused option in the select.\n const focusedOptionMsg = focusedOption && menuIsOpen ? optionFocusAriaMessage({focusedOption, getOptionLabel: this_.getOptionLabel, options}): '';\n // An aria live message representing the set of focusable results and current searchterm/inputvalue.\n const resultsMsg = resultsAriaMessage({inputValue, screenReaderMessage: screenReaderStatus({ count: this_.countOptions() })});\n\n return `${focusedValueMsg} ${focusedOptionMsg} ${resultsMsg} ${ariaLiveContext}`;\n };\n\n this_.renderDropdownIndicator = () => {\n const { DropdownIndicator } = this_.components;\n if (!DropdownIndicator) return null;\n\n const innerProps = {\n onMouseDown: this_.onDropdownIndicatorMouseDown,\n onTouchEnd: this_.onDropdownIndicatorTouchEnd,\n 'aria-hidden': 'true',\n id: this.props.indicatorId,\n };\n\n return (\n <DropdownIndicator\n {...this_.commonProps}\n innerProps={innerProps}\n isDisabled={this_.props.isDisabled}\n isFocused={this_.state.isFocused}\n />\n );\n };\n\n this_.renderClearIndicator = () => {\n const { ClearIndicator } = this_.components;\n const { isDisabled, isLoading } = this_.props;\n\n if (\n !this_.isClearable() ||\n !ClearIndicator ||\n isDisabled ||\n !this_.hasValue() ||\n isLoading\n ) {\n return null;\n }\n\n return (\n <button\n aria-label=\"Wyczyść pole\"\n className='text-field-clear'\n type=\"button\"\n onClick={() => { this_.clearValue()} }\n >\n <Icon aria-hidden=\"true\" icon=\"cancel\" className=\"select-custom__icon\" />\n </button>\n );\n }\n }\n}\n\n\nexport { Select };\n","import React from 'react';\n\nimport { customSelectStyles } from '../vars/vars';\nimport { DateCalendar } from './DateCalendar';\nimport { FieldWithLabel } from './FieldWithLabel';\nimport { Select } from './Select';\n\nimport { SEARCH_DATE_CHOICES } from '../../const';\nimport { dateToString } from '../../helpers';\n\n\nconst CHOICES_DICT = {};\nfor (let ch of SEARCH_DATE_CHOICES) {\n CHOICES_DICT[ch[0]] = ch[1];\n}\n\n\nconst DateSelect = (props) => {\n const type = props.value.type || '0';\n const selectValue = {value: type, label: CHOICES_DICT[type]};\n\n const from = !!props.value.from ? new Date(props.value.from) : '';\n const to = !!props.value.to ? new Date(props.value.to) : '';\n const odInputRef = React.createRef();\n const doInputRef = React.createRef();\n\n return (\n <>\n <Select\n screenReaderStatus={() => {return ''}}\n className=\"select-custom\"\n options={SEARCH_DATE_CHOICES.map(choice => ({value: choice[0], label: choice[1], data: {from: choice[2], to: choice[3]}}))}\n value={selectValue}\n onChange={selectedOption => props.updateDate(\n {type: selectedOption.value, ...selectedOption.data})}\n styles={customSelectStyles}\n aria-describedby={props.ariaDescribedby}\n aria-label={props.selectAriaLabel || ''}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n />\n {selectValue.value === 'custom' && (\n <>\n <FieldWithLabel label=\"Od\" tag=\"label\" inputRef={odInputRef}>\n <DateCalendar\n dateName=\"Od\"\n maxDate={to || undefined}\n parentRef={odInputRef}\n value={from}\n onChange={date => props.updateDate({from: dateToString(date)})} />\n </FieldWithLabel>\n <FieldWithLabel label=\"Do\" tag=\"label\" inputRef={doInputRef}>\n <DateCalendar\n dateName=\"Do\"\n minDate={from || undefined}\n parentRef={doInputRef}\n value={to}\n onChange={date => props.updateDate({to: dateToString(date)})} />\n </FieldWithLabel>\n </>\n )}\n </>\n )\n}\n\n\nexport { DateSelect };\n","import React from 'react';\nimport FocusTrap from 'focus-trap-react';\nimport { Dialog, DialogContent, DialogTitle } from '@rmwc/dialog';\n\nconst DialogCustom = (props) => {\n const {\n ariaLabelledby,\n children,\n dialogRef,\n dialogTitle,\n dialogTitleError,\n onClose,\n onKeyDown,\n ...otherProps\n } = props;\n\n let title = null;\n\n if (dialogTitle) {\n title = <DialogTitle id={ariaLabelledby || null}>{dialogTitle}</DialogTitle>;\n }\n\n if (dialogTitleError) {\n title = <DialogTitle id={ariaLabelledby || null} className=\"dialog-error\">{dialogTitleError}</DialogTitle>;\n }\n\n function handleKeyDown(ev) {\n if (onKeyDown) {\n onKeyDown(ev);\n } else if (ev.key === 'Escape') {\n onClose();\n }\n }\n\n return (\n <>\n <Dialog\n aria-labelledby={ariaLabelledby || null}\n aria-modal=\"true\"\n open\n preventOutsideDismiss={true}\n role=\"dialog\"\n ref={dialogRef || null}\n onClose={onClose}\n onKeyDown={handleKeyDown}\n {...otherProps}\n >\n <FocusTrap focusTrapOptions={{\n fallbackFocus: '#dialogContainer'\n }}>\n <div id=\"dialogContainer\" tabIndex=\"-1\">\n <div tabIndex={0}>{title}</div>\n <DialogContent>\n {children}\n </DialogContent>\n </div>\n </FocusTrap>\n </Dialog>\n </>\n )\n}\n\n\nexport { DialogCustom };\n","// USAGE:\n// Do not provide any props if you use <Ellipsis /> to normal text paragraph,\n// which line-height = 25px (font-size = 16px).\n// If font-size is bigger, provide `lineHeight` prop.\n// To set lineHeight use number of px, but do not add px unit ex.: lineHeight={10}.\n// There are 4 lines by default.\n// If you want to show different number of lines, put it in `lines` prop\n\nimport React, { useEffect, useState } from 'react';\nimport { Button } from '@rmwc/button';\nimport { Icon } from '@rmwc/icon';\n\nconst Ellipsis = (props) => {\n const {\n children,\n lineHeight,\n lines,\n } = props;\n\n let ellipsisRef = React.createRef();\n let ellipsisMaxHeight = (lines || 4) * (lineHeight || 25);\n\n const [ellipsis, setEllipsisContainer] = useState(true);\n const [longText, setLongText] = useState(true);\n\n useEffect(() => {\n // If text is short (height of text is smaller than ellipsis container height (ellipsisMaxHeight), dont set the ellipsis container.\n if (ellipsisRef.current.querySelector('.text').clientHeight <= ellipsisMaxHeight) {\n setLongText(false);\n }\n }, [ellipsisRef, ellipsisMaxHeight]);\n\n return (\n <>\n <div\n className=\"ellipsis-container\"\n ref={ellipsisRef}\n style={(longText && ellipsis) ? { maxHeight: ellipsisMaxHeight, overflow: 'hidden'} : null} >\n {children}\n </div>\n {longText && (\n <div className=\"ellipsis\" style={{ bottom: (lineHeight || 25) }}>\n {ellipsis &&\n <span className=\"ellipsis__mask\" style={{ height: (lineHeight || 25) }}></span>\n }\n <Button\n className=\"ellipsis__button\"\n onClick={() => setEllipsisContainer(!ellipsis)}\n style={!ellipsis && { marginTop: (lineHeight || 25) }}\n >\n <Icon aria-hidden=\"true\" icon={ellipsis ? 'keyboard_arrow_down' : 'keyboard_arrow_up'} />\n {ellipsis ? 'Czytaj wiÄ™cej' : 'Ukryj tekst'}\n </Button>\n </div>\n )}\n </>\n );\n}\n\nexport { Ellipsis };\n","import React from 'react';\n\n\nconst GridCellCustom = (props) => {\n const {\n className,\n children,\n fill,\n customRef,\n ...otherProps\n } = props;\n\n let gridCellClassName = 'grid-custom__cell ';\n className && (gridCellClassName += className);\n\n return (\n <div\n className={gridCellClassName}\n style={fill && {flexGrow: '1'}}\n ref={customRef}\n {...otherProps} >\n {children}\n </div>\n );\n}\n\nexport { GridCellCustom };\n","import React from 'react';\nimport { LinearProgress } from '@rmwc/linear-progress';\nimport '@material/linear-progress/dist/mdc.linear-progress.css';\n\n\nconst LinearProgressCustom = (props) => {\n const {\n className,\n classNameInfo,\n progress\n } = props;\n\n let progressBarClassName = 'progress-bar ';\n className && (progressBarClassName += className);\n\n let progressBarInfoClassName = 'progress-bar__progress-info ';\n className && (progressBarInfoClassName += classNameInfo);\n\n return (\n <div className={progressBarClassName} >\n <p className={progressBarInfoClassName}>\n <span aria-hidden=\"true\">0%</span>\n <span aria-hidden=\"true\">100%</span>\n </p>\n <LinearProgress\n progress={progress}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={progress * 100}\n />\n </div>\n );\n}\n\nexport { LinearProgressCustom };\n","import React from 'react';\n\nimport { ListItem, ListItemGraphic } from '@rmwc/list';\nimport { Theme } from '@rmwc/theme';\nimport { Typography } from '@rmwc/typography';\n\nimport '@material/theme/dist/mdc.theme.css';\nimport '@material/list/dist/mdc.list.css';\nimport '@material/typography/dist/mdc.typography.css';\n\n\nconst MenuBasic = React.forwardRef((props, ref) => {\n return (\n <Theme tag=\"nav\" use=\"primaryBg\" className=\"menu-basic\">\n {props.title && props.title.length > 0 && (\n <Typography tag=\"h2\" use=\"headline5 onPrimary\" theme={'onPrimary'} className=\"ogloszenie-progress-title\">{props.title}</Typography>\n )}\n <ul ref={ref} className=\"ogloszenie-progress-list\" tabIndex=\"-1\">\n {props.children.map((link) =>\n <li key={link.id}>\n <ListItem\n className=\"ogloszenie-progress-list__button\"\n disabled={props.disabled}\n id={`${link.name}_button_id`}\n tag=\"button\"\n onClick={() => (props.disabled || (props.disabledFrom && props.disabledFrom <= link.id)) ? {} : link.onClick(link.id)}\n >\n <ListItemGraphic\n aria-hidden=\"true\"\n use=\"onPrimary\"\n icon={(\n props.addProgressIcon && props.currentMenuLink !== null && link.id < props.currentMenuLink)\n ? 'lens'\n : (props.currentMenuLink !== null && link.id === props.currentMenuLink ? 'adjust' : 'panorama_fish_eye'\n )}\n style={styles.iconStyle}/>\n <ListItemGraphic\n aria-hidden=\"true\"\n use=\"onPrimary\"\n icon={ props.errors[link.name] === true ? 'error_outline' : (props.errors[link.name] === false ? 'done' : '')}\n style={styles.iconStyle}/>\n <Typography\n theme={'onPrimary'}\n use=\"body2\" >\n {link.label}\n <span className=\"sr-only\">\n {\n (\n (props.currentMenuLink !== null && link.id < props.currentMenuLink)\n ? ' WypeÅ‚nione.'\n : (\n props.currentMenuLink !== null && link.id === props.currentMenuLink\n ? ' W trakcie wypeÅ‚niania.' : ' PrzyszÅ‚y etap.'\n )\n ) + (\n props.errors[link.name] === true\n ? ' Wymaga uwagi.'\n : (props.errors[link.name] === false ? ' Poprawna walidacja.' : '')\n )\n }\n </span>\n </Typography>\n </ListItem>\n </li>\n )}\n </ul>\n </Theme>\n )\n})\n\nconst styles = {\n iconStyle: {\n color: '#fff'\n }\n}\n\n\nexport { MenuBasic };\n","// Don't forget to add menu button trigger in component where <MenuDrawer /> is placed\n// e.g. <IconButton onClick={() => {this.setState(prevState => ({openMenu: !prevState.openMenu}))}} icon=\"menu\" />\n\nimport React, { useContext, useEffect, useState } from 'react';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport { Drawer, DrawerContent } from '@rmwc/drawer';\nimport { ListDivider, ListItem, ListItemGraphic, ListItemText } from '@rmwc/list';\nimport '@material/drawer/dist/mdc.drawer.css';\nimport '@material/icon-button/dist/mdc.icon-button.css';\nimport '@material/list/dist/mdc.list.css';\n\nimport { MenuContext } from '../../context/menuContext';\nimport { UserContext } from '../../context/user-context';\n\nimport ueLogo from '../../static/img/fe_ue_logos.png'\nimport { Badge } from '@rmwc/badge';\nimport '@rmwc/badge/badge.css';\nimport { fetchApi } from '../../fetch';\n\nconst MenuDrawer = (props) => {\n const {\n currentMenuLink,\n mobile,\n openMenu,\n onMenuClose,\n } = props;\n\n const { updateMenuKey, refreshBadgesCount } = useContext(MenuContext);\n\n const location = useLocation();\n\n const [badges, setBadges] = useState();\n\n const { user } = useContext(UserContext);\n\n useEffect(() => {\n if(user?.id !== null) {\n fetchApi(\n '/api/badge/menu',\n 'GET',\n {},\n {},\n (response) => {\n setBadges(response);\n },\n () => {},\n () => {})\n }\n\n }, [user, refreshBadgesCount]);\n\n function renderUeLogo() {\n if (location.pathname != '/') {\n return (\n <footer style={{textAlign: \"center\"}}>\n <img src={ueLogo} alt='Zestawienie znaków: Fundusze Europejskie, Barwy Rzeczypospolitej Polskiej, Unia Europejska' />\n </footer>\n )\n }\n }\n\n const renderBadge = (linkName) => {\n\n const map = {\n advertisements: badges?.my_advertisement_badge_count,\n offers: badges?.my_offer_set_badge_count,\n newsletter: badges?.favorite_advertisement_badge_count\n };\n\n const value = map[linkName];\n\n return value > 0 ? <Badge align=\"inline\" label={value} size=\"small\"/> : <></>\n }\n\n return (\n <Drawer modal={mobile} dismissible={!mobile} open={!mobile ? true : openMenu} onClose={onMenuClose}>\n <DrawerContent style={{display: \"flex\", flexDirection: \"column\"}}>\n <nav style={{flexGrow: \"1\"}}>\n <ul>\n {props.children.map((link) =>\n <li\n key={link.id}\n onClick={updateMenuKey}\n >\n <ListItem tag={Link} to={link.linkTo} className=\"menu-item\">\n <ListItemGraphic\n aria-hidden=\"true\"\n icon={link.icon}\n theme={(currentMenuLink && link.id === currentMenuLink) ? 'primary' : 'textSecondaryOnLight'} />\n <ListItemText theme={(currentMenuLink && link.id === currentMenuLink) ? 'primary' : 'textSecondaryOnLight'}>\n {link.label}\n </ListItemText>\n {renderBadge(link.name)}\n </ListItem>\n <ListDivider />\n </li>\n )}\n </ul>\n </nav>\n {renderUeLogo()}\n </DrawerContent>\n </Drawer>\n )\n}\n\n\nexport { MenuDrawer };\n","export default \"data:image/png;base64,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\"","import React from 'react';\nimport { Icon } from '@rmwc/icon';\n\nimport { Text } from './Text'\n\nconst Message = (props) => {\n const {\n className,\n children,\n error,\n id,\n messageIcon,\n messageTitle,\n role,\n success\n } = props;\n\n let basicClassName = 'message'\n\n if (error) {\n basicClassName += ' message--error'\n } else if (success) {\n basicClassName += ' message--success'\n }\n\n return (\n <div className={basicClassName + ` ${className || ''}`} id={id}>\n <Icon icon={messageIcon} className=\"message__icon\" aria-hidden=\"true\" />\n <Text\n aria-live={role ? null : 'assertive'}\n className=\"message__title\"\n role={role || 'alert'}\n tag=\"h2\"\n >\n {messageTitle}\n </Text>\n {children && <Text className=\"message__additional-info\">{children}</Text>}\n </div>\n )\n}\n\nexport { Message };\n","import React, { useContext } from 'react';\n\nimport { UserContext } from '../../../context/user-context';\nimport { Box } from '../Box';\nimport { FieldWithLabel } from '../FieldWithLabel';\nimport { Text } from '../Text';\n\n\nconst EMPTY_VALUE = 'Brak danych';\n\n\nexport const AuditData = ({\n createdAt,\n createdBy,\n modifiedAt,\n modifiedBy,\n titleOneRow,\n ...boxProps\n}) => {\n const { user } = useContext(UserContext);\n if (!user.identifier) { return null }\n return (\n <Box\n fullwidth\n titleOneRow={titleOneRow || 'Dane audytowe'}\n {...boxProps}\n >\n <section className=\"grid-custom grid-custom--flex-m grid-custom--full-width audit-meta\">\n <>\n <FieldWithLabel label=\"Kto utworzyÅ‚\">\n <Text>{createdBy || EMPTY_VALUE}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Kiedy utworzyÅ‚\">\n <Text>{createdAt || EMPTY_VALUE}</Text>\n </FieldWithLabel>\n </>\n <>\n <FieldWithLabel label=\"Kto modyfikowaÅ‚\">\n <Text>{modifiedBy || EMPTY_VALUE}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Kiedy modyfikowaÅ‚\">\n <Text>{modifiedAt || EMPTY_VALUE}</Text>\n </FieldWithLabel>\n </>\n </section>\n </Box>\n )\n};\n","import React from 'react';\n\nimport { ButtonStyled, GridCustom } from'../../common';\n\n\nexport const CancelSaveButtonsRow = ({\n disabled, disabledSave, cancelText, saveText, onCancel, onSave\n}) => {\n return (\n <GridCustom flexEnd className=\" box__button-container\">\n <ButtonStyled cancel disabled={disabled} onClick={onCancel}>\n {cancelText || 'Anuluj'}\n </ButtonStyled>\n <ButtonStyled\n disabled={disabled || disabledSave}\n primary\n onClick={onSave}>\n {saveText || 'Zapisz'}\n </ButtonStyled>\n </GridCustom>\n )\n}\n","import React from 'react';\n\nimport { Text } from '../Text';\n\n\nexport const ErrorList = ({containerId, errorList}) => {\n return (\n <ul id={containerId}>\n {errorList.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}\n </ul>\n )\n}\n","import React from 'react';\n\nimport { GridCustom, Text } from'../../common';\n\n\nexport const FetchErrorWithOkayButton = ({\n buttonLabel,\n infoMsg,\n message,\n onClickOkay,\n}) => {\n return (\n <GridCustom centerVertical className=\"fetch-error-with-ok-btn\">\n <Text error={!infoMsg} info={infoMsg} role=\"alert\">{message}</Text>\n <button onClick={onClickOkay} className={`fetch-btn ${infoMsg ? 'fetch-btn--info' : 'fetch-btn--error'}`}>{buttonLabel || 'OK'}</button>\n </GridCustom>\n )\n}\n","import React from 'react';\n\nimport { ButtonStyled } from'../ButtonStyled';\n\n\nexport const FiltersButton = ({filtersCounter: counter, filteringLabel, onOpenFilters}) => {\n return (\n <ButtonStyled\n lite\n onClick={e => {\n onOpenFilters();\n e.currentTarget.blur();\n }}>\n {filteringLabel || 'Filtruj listÄ™'}\n <span className=\"sr-only\"> Liczba aktywnych filtrów: </span>\n <span className=\"btn--counter btn--counter-primary\" title=\"Wybrane filtry\">{counter}</span>\n </ButtonStyled>\n )\n}\n","import React from 'react';\nimport { Icon } from '@rmwc/icon';\nimport { Text } from'../../common';\n\n\nexport const InfoTextWithIcon = ({message, icon, ...props}) => {\n return (\n <Text role=\"status\" className=\"success-text\">\n <Icon icon={icon || 'error'} aria-hidden={true} />\n {message}\n </Text>\n )\n}\n","import React from 'react';\n\nimport { Message } from '../Message';\n\n\nexport const NotPermittedPage = ({ message }) => {\n return (\n <Message\n messageIcon=\"report_problem\"\n messageTitle=\"WystÄ…piÅ‚ bÅ‚Ä…d\" >\n {message || 'Nie masz uprawnieÅ„ do przeglÄ…dania tej strony.'}\n </Message>\n );\n}\n","import React from 'react';\n\nimport { Text } from '../Text';\n\n\nexport const PaginatedListHeader = ({title, total}) => {\n return (\n <div className=\"section-header\">\n <Text tag=\"h1\" sectionHeader>{title}</Text>\n <Text info className=\"text--counter\">Liczba wyników: {total}</Text>\n </div>\n )\n}\n","import React from 'react';\n\nimport { customSelectStyles } from '../../vars/vars';\nimport { FieldWithLabel, Select } from '../../common';\n\n\nexport const SortersSelect = ({selectedSort, sortingLabel, sortingValues, onChangeSort}) => {\n // sortingValues as a list [[value1, label1], [value2, label2]]\n return (\n <FieldWithLabel\n label={sortingLabel || \"Sortuj listÄ™\"}\n tag=\"label\"\n selectRef={React.createRef()}\n className=\"search__select-sorter\"\n tabIndex=\"-1\">\n <Select\n aria-label={sortingLabel}\n className=\"selectClassName\"\n options={(sortingValues || []).map(value => ({value: value[0], label: value[1]}))}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n screenReaderStatus={() => {return ''}}\n styles={customSelectStyles}\n value={selectedSort}\n onChange={onChangeSort}\n />\n </FieldWithLabel>\n )\n}\n","import React, {useRef, useState} from 'react';\nimport { Button } from '@rmwc/button';\nimport { Icon } from '@rmwc/icon';\nimport { MenuSurfaceAnchor, MenuSurface } from '@rmwc/menu';\n\nconst MoreOptionsButton = (props) => {\n const [open, setOpen] = useState(false); \n const menuContentRef = useRef();\n const {\n children,\n className,\n menuAriaLabel,\n ...otherProps\n } = props;\n\n const handleOpen = () => {\n menuContentRef.current.focus();\n }\n\n return (\n <MenuSurfaceAnchor {...otherProps}>\n <Button\n aria-label={menuAriaLabel}\n onClick={e => {\n setOpen(!open);\n e.currentTarget.blur();\n }}\n unelevated\n className=\"more-options__btn\" >\n <Icon aria-hidden=\"true\" icon=\"more_horiz\" className=\"more-options__icon\" />\n </Button>\n <MenuSurface\n anchorCorner=\"bottomLeft\"\n className={`more-options__menu ${className || ''}`}\n onClose={() => setOpen(false)}\n onOpen={handleOpen}\n open={open}\n >\n <>\n <div ref={menuContentRef} aria-hidden={true} tabIndex={0} />\n <nav role=\"dialog\">\n {children}\n </nav>\n </>\n </MenuSurface>\n </MenuSurfaceAnchor>\n );\n}\n\nexport { MoreOptionsButton };\n","import React from 'react';\nimport { Typography } from '@rmwc/typography';\nimport { ButtonStyled } from '.';\n\n\nconst NextStep = (props) => {\n const {\n className,\n disabled,\n onClick,\n prevStep,\n stepTitle\n } = props;\n\n let nextStepClassName = 'next-step ';\n className && (nextStepClassName += className);\n\n return (\n <aside className={nextStepClassName}>\n <nav className='next-step__content'>\n <Typography use='button' theme={'textHintOnBackground'}>{prevStep ? 'Poprzedni' : 'NastÄ™pny'} krok</Typography>\n {prevStep && <ButtonStyled disabled={disabled} onClick={onClick} prev><span className=\"sr-only\">Poprzedni krok </span>{stepTitle}</ButtonStyled>}\n {!prevStep && <ButtonStyled disabled={disabled} onClick={onClick} next><span className=\"sr-only\">NastÄ™pny krok </span>{stepTitle}</ButtonStyled>}\n </nav>\n </aside>\n );\n}\n\nexport { NextStep };\n","// TextFieldCustom adds clear field (onClear) function to text field\n\nimport React, { Component } from 'react';\nimport { Icon } from '@rmwc/icon';\nimport { TextField } from '@rmwc/textfield';\n\n\nclass TextFieldCustom extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isInputFocused: false,\n isIconClicked: false,\n };\n this.blurInputTimeout = null;\n\n this.handleBlurInput = this.handleBlurInput.bind(this);\n this.handleClickIcon = this.handleClickIcon.bind(this);\n this.handleFocusInput = this.handleFocusInput.bind(this);\n }\n\n // basic functions\n\n componentWillUnmount() {\n if (this.blurInputTimeout !== null) {\n clearTimeout(this.blurInputTimeout);\n this.blurInputTimeout = null;\n }\n }\n\n // handlers\n\n handleClickIcon(ev) {\n this.setState({isIconClicked: true}, () => {\n if (this.props.onClear) {\n this.props.onClear(ev);\n }\n this.setState({isIconClicked: false});\n });\n }\n\n // TODO: if icon to clear text field is visible always when the field is not empty, handleBlurInput(ev) and handleFocusInput(ev) should be deleted.\n handleBlurInput(ev) {\n if (this.props.onBlur) {\n this.props.onBlur(ev);\n }\n this.blurInputTimeout = setTimeout(() => {\n if (!this.state.isIconClicked) {\n this.setState({isInputFocused: false});\n }\n }, 150);\n }\n\n handleFocusInput(ev) {\n if (this.props.onFocus) {\n this.props.onFocus(ev);\n }\n this.setState({isInputFocused: true});\n }\n\n // rendering\n\n render() {\n const props_ = Object.assign({}, this.props, {\n onBlur: this.handleBlurInput,\n onFocus: this.handleFocusInput,\n });\n // this is not a basic component prop, it throws error if declared and not used\n delete props_['onClear'];\n // this is not a basic component prop, it should be deleted not to propagate when not used\n delete props_['clearFieldContext'];\n\n return (\n <div className=\"text-field-custom-container\">\n <TextField autoFocus={this.props.autoFocus || false} {...props_} />\n {props_.value.length ? (\n <button\n className=\"text-field-clear\"\n onClick={this.handleClickIcon}\n type=\"button\"\n >\n <span className=\"sr-only\">Wyczyść pole {this.props.clearFieldContext}</span>\n <Icon aria-hidden=\"true\" icon=\"cancel\" />\n </button>\n ) : null}\n </div>\n )\n }\n};\n\n\nexport { TextFieldCustom };\n","import React, { Component } from 'react';\n\nimport { roundStringTo } from '../../helpers';\nimport { FieldWithLabel } from './FieldWithLabel';\nimport { Text } from './Text';\nimport { TextFieldCustom } from './TextFieldCustom';\n\n\nclass NumberTextField extends Component {\n\n constructor(props) {\n super(props);\n this.state = {value: props.value || ''};\n }\n\n // handlers\n\n handleBlur = (ev) => {\n let value = roundStringTo(ev.target.value);\n this.setState(\n {value},\n () => this.props.onChange(value)\n );\n }\n\n handleChange = (ev) => {\n let value = ev.target.value;\n this.setState(\n prevState => {\n if (value.indexOf(',') === -1 && value.length > 24) {\n value = prevState.szacunkowaWartosc;\n }\n return {value: value}\n },\n () => this.props.onChange(value)\n );\n }\n\n handleKeyPress = (ev) => {\n const value = this.state.value;\n const valueLenth = value.length;\n const key = ev.key;\n const keyIndex = ev.target.selectionStart;\n if (!/[\\d,]/.test(key)) {\n ev.preventDefault();\n return\n }\n if (key === ',') {\n if (value.indexOf(',') > -1 || valueLenth === 0) {\n ev.preventDefault();\n return\n }\n if (keyIndex < valueLenth - 2) {\n ev.preventDefault();\n return\n }\n } else {\n // it's digit\n\n const comaIndex = value.indexOf(',');\n\n if (comaIndex === -1 && valueLenth === 24) {\n ev.preventDefault();\n return\n }\n\n if (comaIndex === 24 && keyIndex <= 24) {\n ev.preventDefault();\n return\n }\n\n if (comaIndex > -1 && valueLenth === comaIndex + 3 && keyIndex > comaIndex) {\n ev.preventDefault();\n }\n }\n }\n handlePaste = (ev) => {\n // stop data actually being pasted into input\n ev.preventDefault();\n // set pasted data via clipboard API\n const clipboardData = ev.clipboardData || window.clipboardData;\n const pastedData = clipboardData.getData('Text');\n if (/^\\d{1,24}(,\\d{2})?$/.test(pastedData)) {\n this.setState({value: pastedData});\n }\n }\n\n // rendering\n\n render() {\n const { errors, label } = this.props;\n\n const isFieldInvalid = (errors || []).length > 0\n const fieldId = `${this.props.attrName}_id_${this.props.parentTemporaryId}`;\n\n return (\n <FieldWithLabel label={label} tag=\"label\" labelFor={fieldId}>\n <TextFieldCustom\n aria-describedby={`text_field_custom_id${isFieldInvalid ? ' text_field_custom_error' : ''}`}\n aria-valuemax={27}\n autoFocus={this.props.autoFocus || false}\n clearFieldContext={label || null}\n characterCount\n disabled={this.props.formLocked}\n fullwidth={this.props.fullwidth}\n id={fieldId}\n invalid={isFieldInvalid}\n maxLength={27}\n value={this.state.value}\n onBlur={this.handleBlur}\n onFocus={this.props.onFocus}\n onChange={this.handleChange}\n onClear={(ev) => this.setState({value: ''}, () => {\n this.props.onChange('')\n })}\n onKeyPress={this.handleKeyPress}\n onPaste={this.handlePaste}\n />\n {isFieldInvalid && <ul id=\"text_field_custom_error\">{errors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n <Text id=\"text_field_custom_id\" info>Wpisz wartość zgodnie ze wzorem: 1000000,00</Text>\n </FieldWithLabel>\n )\n }\n}\n\nexport { NumberTextField };\n","import React from 'react';\n\nimport { Message } from './Message';\n\n\nconst NotFoundPage = (props) => {\n return (\n <Message\n messageIcon=\"report_problem\"\n messageTitle=\"BÅ‚Ä…d 404\" >\n Strona nie istnieje\n </Message>\n );\n}\n\nexport { NotFoundPage };\n","import React from 'react';\nimport { Icon } from '@rmwc/icon';\n\nimport { GridCustom } from './GridCustom';\nimport { Text } from './Text';\n\nconst OfferStatus = (props) => {\n const {\n className,\n statusIcon,\n statusName,\n } = props;\n\n return (\n <div className={`offer__status ${className || ''}`}>\n <Text label aria-hidden=\"true\">Status oferty</Text>\n <GridCustom noWrap centerHorizontal>\n <Icon aria-hidden=\"true\" icon={statusIcon} className=\"offer__status-icon\" />\n <Text tag=\"h2\" className=\"offer__status-name\" id=\"statusName_id\"><span className=\"sr-only\">Status oferty: </span>{statusName}</Text>\n </GridCustom>\n </div>\n )\n}\n\nexport { OfferStatus };\n","export const API_URLS = {\n // users\n users: {\n path: '/api/admin/users',\n },\n usersDetails: {\n getUrl: (userId) => `/api/admin/users/${userId}`,\n },\n usersFindUser: {\n url: '/api/admin/users/find',\n },\n /* watch modes for this url\n modeUserCurrent - needs 'authorized' as current user id - current user's permissions\n modeUserCustom - needs 'authorized' as requested user id - requested user's permissions\n modeContext - don't add 'authorized' to GET parameters - all permissions\n */\n usersPermissionsAdvertisementsProjectsEnrollments: {\n path: '/api/admin/permissions_ads_projects_enrollments',\n },\n usersPermissionsAdvertisementsProjectsEnrollmentsDetails: {\n path: '/api/admin/permissions_ads_projects_enrollments/package',\n description: 'used for single permission details',\n },\n /* watch modes for this url\n modeUserCurrent - needs 'authorized' as current user id - current user's permissions\n modeUserCustom - needs 'authorized' as requested user id - requested user's permissions\n modeContext - don't add 'authorized' to GET parameters - all permissions\n */\n usersPermissionsDictionaries: {\n path: '/api/admin/permissions_dictionary',\n },\n usersPermissionsDictionariesDetails: {\n path: '/api/admin/permissions_dictionary/package',\n description: 'used for single permission details',\n },\n /* watch modes for this url\n modeUserCurrent - needs 'authorized' as current user id - current user's permissions\n modeUserCustom - needs 'authorized' as requested user id - requested user's permissions\n modeContext - don't add 'authorized' to GET parameters - all permissions\n */\n usersPermissionsContent: {\n path: '/api/admin/permissions_content',\n },\n usersPermissionsContentDetails: {\n path: '/api/admin/permissions_content/package',\n description: 'used for single permission details',\n },\n /* watch modes for this url\n modeUserCurrent - needs 'authorized' as current user id - current user's permissions\n modeUserCustom - needs 'authorized' as requested user id - requested user's permissions\n modeContext - don't add 'authorized' to GET parameters - all permissions\n */\n usersPermissionsUsers: {\n path: '/api/admin/permissions_users',\n },\n usersPermissionsUsersDetails: {\n path: '/api/admin/permissions_users/package',\n description: 'used for single permission details',\n },\n usersPermissionsContentDictionariesUsers: {\n path: '/api/admin/permissions_cont_dict_users',\n },\n usersPermissionsHistoryAdvertisementsProjectsEnrollments: {\n path: '/api/admin/permissions_history_ads_projects_enrollments',\n },\n usersPermissionsHistoryContentDictionariesUsers: {\n path: '/api/admin/permissions_history_cont_dict_users',\n },\n usersPermissionsHistoryContent: {\n path: '/api/admin/permissions_history_content',\n },\n usersPermissionsHistoryDictionaries: {\n path: '/api/admin/permissions_history_dictionaries',\n },\n usersPermissionsHistoryUsers: {\n path: '/api/admin/permissions_history_users',\n },\n // content administration\n helpAdmin: {\n path: '/api/admin/help'\n },\n helpAdminDictionaries: {\n path: '/api/admin/help/dictionaries',\n },\n helpAdminDetails: {\n getUrl: (helpId) => `/api/admin/help/${helpId}`\n },\n statementsAdmin: {\n path: '/api/admin/statements'\n },\n statementsAdminDetails: {\n getUrl: (statementId) => `/api/admin/statements/${statementId}`\n },\n cookiesAdmin: {\n path: '/api/admin/cookies',\n },\n generalContentAdmin: {\n path: '/api/admin/general-content',\n },\n generalContentAdminDetails: {\n getUrl: (generalContentId) => `/api/admin/general-content/${\n generalContentId}`,\n },\n regulations: {\n path: '/api/regulations',\n },\n regulationsAdmin: {\n path: '/api/admin/regulations',\n },\n regulationsAdminDetails: {\n // Attention! It doesn't return a single regulation details\n path: '/api/admin/regulations/details',\n },\n // implementation levels\n perspectives: {\n path: '/api/perspectives',\n },\n perspectivesAdmin: {\n path: '/api/admin/dictionaries_perspective',\n },\n programmes: {\n getUrl: (perspectiveId = 0) =>\n `/api/programme/perspective/${perspectiveId}`,\n },\n programmesAdmin: {\n getUrl: (perspectiveId = 0) =>\n `/api/admin/dictionaries_programme/perspective/${perspectiveId}`,\n },\n programmesAdd: {\n path: '/api/admin/dictionaries_programme',\n },\n programmesEdit: {\n getUrl: (programmeId) => `/api/admin/dictionaries_programme/${programmeId}`,\n },\n priorities: {\n getUrl: (programmeId) => `/api/priority/programme/${programmeId}`\n },\n prioritiesAdmin: {\n getUrl: (programmeId) =>\n `/api/admin/dictionaries_priority/programme/${programmeId}`\n },\n prioritiesAdd: {\n path: '/api/admin/dictionaries_priority',\n },\n prioritiesEdit: {\n getUrl: (priorityId) => `/api/admin/dictionaries_priority/${priorityId}`,\n },\n activities: {\n getUrl: (priorityId) => `/api/activity/priority/${priorityId}`\n },\n activitiesAdmin: {\n getUrl: (priorityId) =>\n `/api/admin/dictionaries_activity/priority/${priorityId}`\n },\n activitiesAdd: {\n path: '/api/admin/dictionaries_activity',\n },\n activitiesEdit: {\n getUrl: (activityId) => `/api/admin/dictionaries_activity/${activityId}`,\n },\n regions: {\n getUrl: (activityId) => `/api/region/activity/${activityId}`\n },\n regionsAdmin: {\n getUrl: (activityId) =>\n `/api/admin/dictionaries_region/activity/${activityId}`\n },\n regionsAdd: {\n path: '/api/admin/dictionaries_region',\n },\n regionsEdit: {\n getUrl: (regionId) => `/api/admin/dictionaries_region/${regionId}`,\n },\n institutions: {\n getUrl: (activityId) => `/api/institution/activity/${activityId}`\n },\n institutionsAdmin: {\n getUrl: (activityId) =>\n `/api/admin/dictionaries_institution/activity/${activityId}`\n },\n institutionsAdd: {\n path: '/api/admin/dictionaries_institution',\n },\n institutionsEdit: {\n getUrl: (institutionId) =>\n `/api/admin/dictionaries_institution/${institutionId}`,\n },\n}\n","import React, { useContext, useEffect, useState } from 'react';\n\nimport { UserContext } from '../../../context/user-context';\nimport { API_URLS } from '../../../urls/api';\nimport { fetchApi } from '../../../fetch';\nimport {\n getSerializedErrorsFromServer,\n translateErrorMessage\n} from '../../../serializers';\nimport {\n ButtonStyled,\n CancelSaveButtonsRow,\n DialogCustom,\n FieldWithLabel,\n GridCustom,\n Text\n} from '../../common';\n\n\nexport const DeleteImplementationLevel = ({\n apiUrlName,\n item,\n parentFormLabel,\n perspectiveData,\n RelatedObjectsExistInfoComponent,\n titleFormLabel,\n onCancel,\n onDelete\n}) => {\n const [deletingOn, setDeletingOn] = useState(false);\n const [fetchError, setFetchError] = useState(null);\n const [\n objectRelatedWithOthers, setObjectRelatedWithOthers\n ] = useState(false);\n\n const { removePermission } = useContext(UserContext);\n\n useEffect(() => {\n if (!deletingOn) { return }\n\n setFetchError(null);\n let xhrFetch = null;\n\n function callbackSuccess(responseData) {\n xhrFetch = null;\n onDelete();\n }\n\n function callbackError(responseData) {\n xhrFetch = null;\n setFetchError(translateErrorMessage(responseData.message));\n setDeletingOn(false);\n }\n\n function callbackIncorrectStatus(status) {\n xhrFetch = null;\n setFetchError(\n status === 403\n ? 'Nie masz uprawnieÅ„ do usuwania elementów sÅ‚ownika poziomów wdrożenia.'\n : `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`);\n setDeletingOn(false);\n if (status === 403) {\n removePermission('editingDictionaries');\n }\n }\n\n function callbackShowErrors(responseErrors) {\n xhrFetch = null;\n const errors = getSerializedErrorsFromServer(\n responseErrors, {doNotTranslateNames: true});\n if (((errors || {}).allFields || {}).id) {\n setObjectRelatedWithOthers(true);\n }\n setDeletingOn(false);\n }\n\n xhrFetch = fetchApi(\n API_URLS[apiUrlName].getUrl(item.id),\n 'DELETE', {}, {},\n callbackSuccess,\n callbackError,\n callbackIncorrectStatus,\n callbackShowErrors\n );\n\n return () => {\n if (xhrFetch !== null) {xhrFetch.abort()}\n }\n }, [deletingOn]); // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <DialogCustom\n ariaLabelledby=\"addDialogLabel\"\n className=\"dialog\"\n onClose={onCancel}\n >\n <h2 id=\"addDialogLabel\" className=\"text--main-header\">\n {objectRelatedWithOthers\n ? 'Niemożliwe usuniÄ™cie'\n : 'Potwierdzenie usuniÄ™cia'\n } {titleFormLabel}\n </h2>\n <FieldWithLabel\n label=\"Kod\"\n tag=\"label\"\n labelFor=\"id_code\"\n >\n <GridCustom noWrap centerVertical className=\"code-input-container code-input-container--edition\">\n {parentFormLabel && <Text accentHeader className=\"code-input-container__first-part\">{parentFormLabel}</Text>}\n <Text accentHeader>{item.code}</Text>\n </GridCustom>\n </FieldWithLabel>\n <FieldWithLabel\n label=\"Nazwa\"\n tag=\"label\"\n labelFor=\"id_name\"\n >\n <Text>{item.name}</Text>\n </FieldWithLabel>\n\n {objectRelatedWithOthers\n ? (\n <>\n <RelatedObjectsExistInfoComponent\n perspectiveData={perspectiveData} />\n <GridCustom flexEnd>\n <ButtonStyled cancel onClick={onCancel}>OK</ButtonStyled>\n </GridCustom>\n </>\n )\n : (\n <>\n <CancelSaveButtonsRow\n disabled={deletingOn}\n saveText=\"UsuÅ„\"\n onCancel={onCancel}\n onSave={() => setDeletingOn(true)} />\n {!!fetchError && <Text error>{fetchError}</Text>}\n </>\n )\n }\n\n </DialogCustom>\n )\n};\n","import React, { useContext, useEffect, useState } from 'react';\n\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport {\n getSerializedErrorsFromServer,\n translateErrorMessage\n} from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n CancelSaveButtonsRow,\n DialogCustom,\n FieldWithLabel,\n GridCustom,\n Text,\n TextFieldCustom\n} from '../../common';\n\n\nconst DEFAULT_DATA = {\n code: '',\n name: '',\n};\n\n\nexport const ImplementationLevelForm = ({\n addApiUrlName,\n additionalSaveData,\n codeMaxLength = 2,\n editApiUrlName,\n originalData, // original if exists\n parentFormLabel,\n titleFormLabel,\n onCancel,\n onSave\n}) => {\n const isNew = originalData === null;\n const [data, setData] = useState(\n {...(isNew ? DEFAULT_DATA : originalData)});\n const [savingOn, setSavingOn] = useState(false);\n const [errors, setErrors] = useState({});\n const [fetchError, setFetchError] = useState(null);\n\n function handleChangeAttribute(name, value) {\n setData(prevValue => ({\n ...prevValue,\n [name]: value,\n }));\n }\n\n const { removePermission } = useContext(UserContext);\n\n useEffect(() => {\n if (!savingOn) { return }\n setErrors({});\n setFetchError(null);\n let xhrFetch = null;\n\n function callbackSuccess(responseData) {\n xhrFetch = null;\n onSave();\n }\n\n function callbackError(responseData) {\n xhrFetch = null;\n setFetchError(translateErrorMessage(responseData.message));\n setSavingOn(false);\n }\n\n function callbackIncorrectStatus(status) {\n xhrFetch = null;\n setFetchError(\n status === 403\n ? 'Nie masz uprawnieÅ„ do zapisu elementów sÅ‚ownika poziomów wdrożenia.'\n : `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`);\n setSavingOn(false);\n if (status === 403) {\n removePermission('editingDictionaries');\n }\n }\n\n function callbackShowErrors(errors) {\n xhrFetch = null;\n setErrors(getSerializedErrorsFromServer(\n errors, {doNotTranslateNames: true}));\n setSavingOn(false);\n }\n\n xhrFetch = fetchApi(\n isNew ? API_URLS[addApiUrlName].path : API_URLS[editApiUrlName].getUrl(data.id),\n isNew ? 'POST' : 'PUT',\n {},\n {\n ...(isNew ? {...additionalSaveData, code: data.code} : {}),\n name: data.name,\n },\n callbackSuccess,\n callbackError,\n callbackIncorrectStatus,\n callbackShowErrors\n );\n\n return () => {\n if (xhrFetch !== null) {xhrFetch.abort()}\n }\n }, [savingOn]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const isCodeInvalid = (errors.code || []).length > 0;\n const isNameInvalid = (errors.name || []).length > 0;\n return (\n <DialogCustom\n ariaLabelledby=\"addDialogLabel\"\n className=\"dialog\"\n onClose={onCancel}\n >\n <h2 id=\"addDialogLabel\" className=\"text--main-header\">\n {isNew ? 'Dodawanie' : 'Edycja'} {titleFormLabel}\n </h2>\n\n {isNew\n ? (\n <>\n <FieldWithLabel\n label=\"Kod\"\n tag=\"label\"\n labelFor=\"id_code\"\n >\n <GridCustom fullwidth noWrap className=\"code-input-container\">\n {parentFormLabel && <Text accentHeader>{parentFormLabel}</Text>}\n <TextFieldCustom\n aria-describedby={isCodeInvalid ? 'code_error' : null}\n aria-label={`Kod, maksymalna liczba znaków: ${codeMaxLength}. Wpisano ${data.code.length} znaków.`}\n aria-required={true}\n aria-valuemax={codeMaxLength}\n characterCount\n clearFieldContext=\"code\"\n disabled={savingOn}\n fullwidth\n id=\"id_code\"\n invalid={isCodeInvalid}\n maxLength={codeMaxLength}\n required\n value={data.code}\n onChange={ev => handleChangeAttribute(\n 'code', ev.target.value\n )}\n onClear={ev => handleChangeAttribute('code', '')}\n />\n </GridCustom>\n {isCodeInvalid && (\n <ul id=\"code_error\">\n {errors.code.map((e, i) =>\n <Text error key={i} tag=\"li\">{e}</Text>\n )}\n </ul>\n )}\n </FieldWithLabel>\n </>\n )\n : (\n <FieldWithLabel\n label=\"Kod\"\n tag=\"label\"\n labelFor=\"id_code\"\n >\n <GridCustom noWrap centerVertical className=\"code-input-container code-input-container--edition\">\n {parentFormLabel && <Text accentHeader className=\"code-input-container__first-part\">{parentFormLabel}</Text>}\n <Text accentHeader>{data.code}</Text>\n </GridCustom>\n </FieldWithLabel>\n )\n }\n <FieldWithLabel\n label=\"Nazwa\"\n tag=\"label\"\n labelFor=\"id_name\"\n >\n <TextFieldCustom\n aria-describedby={isCodeInvalid ? 'name_error' : null}\n aria-label={`Kod, maksymalna liczba znaków: 1000. Wpisano ${data.name.length} znaków.`}\n aria-required={true}\n aria-valuemax={1000}\n characterCount\n clearFieldContext=\"name\"\n disabled={savingOn}\n fullwidth\n id=\"id_name\"\n invalid={isNameInvalid}\n maxLength={1000}\n required\n value={data.name}\n onChange={ev => handleChangeAttribute(\n 'name', ev.target.value\n )}\n onClear={ev => handleChangeAttribute('name', '')}\n />\n {isNameInvalid && (\n <ul id=\"name_error\">\n {errors.name.map((e, i) =>\n <Text error key={i} tag=\"li\">{e}</Text>\n )}\n </ul>\n )}\n </FieldWithLabel>\n\n <CancelSaveButtonsRow\n disabled={savingOn}\n onCancel={onCancel}\n onSave={() => setSavingOn(true)} />\n {!!fetchError && <Text error>{fetchError}</Text>}\n </DialogCustom>\n )\n};\n","import { useEffect, useState } from 'react';\n\nimport { fetchApi } from '../fetch';\n\n\nexport const useCheckPermissionExists = (\n checkingExistedPermissionOn, setCheckingExistedPermissionOn, url,\n fetchDataDict, setExistsErrorOn, setPermissions403errorOn, userId\n) => {\n const [existingPermissionData, setExistedPermissionData] = useState(null);\n\n function checkPermission() {\n if (!checkingExistedPermissionOn || !url.length) { return }\n\n let xhrFetch = null;\n\n function callbackPermissionExists(data) {\n xhrFetch = null;\n setExistedPermissionData(data.permission);\n setCheckingExistedPermissionOn(false);\n setExistsErrorOn(true);\n }\n\n function callbackPermissionDoesNotExists() {\n xhrFetch = null;\n setCheckingExistedPermissionOn(false);\n }\n\n function callbackPermissionIncorrectStatus(statusCode) {\n if (statusCode === 403) {\n setPermissions403errorOn(true);\n }\n callbackPermissionDoesNotExists();\n }\n\n xhrFetch = fetchApi(\n url, 'GET', {},\n {authorized: userId, ...fetchDataDict},\n callbackPermissionExists, callbackPermissionDoesNotExists,\n callbackPermissionIncorrectStatus\n );\n return () => {\n if (xhrFetch !== null) {\n xhrFetch.abort();\n }\n }\n }\n useEffect(checkPermission, [checkingExistedPermissionOn]);\n\n return {existingPermissionData}\n};\n","import { useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\n\nimport { fetchApi } from '../fetch';\nimport {\n getSerializedErrorsFromServer,\n getSerializedObject,\n serializeUrlParams,\n translateErrorMessage\n} from '../serializers';\n\n\nexport const useOneTimeFetchApi = (config) => {\n const url = config.url || '';\n const fetchData = config.fetchData || {};\n const serializeFetchDataFunction = config.serializeFetchDataFunction ||\n (data => data);\n const updatedData = config.updatedData || null;\n const message403error = config.message403error || '';\n const callback403 = config.callback403 || (() => {});\n const requestId = config.requestId || 1;\n\n const [loadingOn, setLoadingOn] = useState(true);\n const [fetchError, setFetchError] = useState(null);\n const [data, setData] = useState(null);\n\n function getDataFromServer() {\n setLoadingOn(true);\n setFetchError(null);\n\n let xhrFetch = null;\n\n function callbackSuccess(data) {\n xhrFetch = null;\n setData(serializeFetchDataFunction(data));\n setLoadingOn(false);\n }\n\n function callbackError(data) {\n xhrFetch = null;\n setFetchError(translateErrorMessage(data.message));\n setLoadingOn(false);\n }\n\n function callbackIncorrectStatus(status) {\n xhrFetch = null;\n if (status === 403) {\n if (message403error.length) {\n setFetchError(message403error);\n }\n callback403();\n } else {\n setFetchError(`WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`);\n }\n setLoadingOn(false);\n }\n\n xhrFetch = fetchApi(\n url, 'GET', {}, fetchData,\n callbackSuccess, callbackError, callbackIncorrectStatus\n );\n return () => {\n if (xhrFetch !== null) {xhrFetch.abort()}\n }\n }\n useEffect(getDataFromServer, [requestId]);\n\n useEffect(() => {\n if (updatedData === null) { return }\n setData(prevData =>\n ({...prevData, ...{uzytkownik: {...prevData.uzytkownik, ...updatedData}}})\n );\n }, [updatedData])\n\n return {data, loadingOn, fetchError}\n};\n\nconst sortUrlParams = (param1, param2) => {\n return param1[0].localeCompare(param2[0], 'pl')\n};\n\nexport const usePaginatedFetchApi = (\n pageNumber, selectedSort, filters, getFiltersFetchData, paginatedBy,\n objectsAttrName, baseApiUrl, serializationUrlDictToPolish,\n serializerConfig={}) => {\n let history = useHistory();\n const [permissionsCheckingOn, setPermissionsCheckingOn] = useState(true);\n const [notPermitted, setNotPermitted] = useState(false);\n const [loadingOn, setLoadingOn] = useState(true);\n const [fetchError, setFetchError] = useState(null);\n const [data, setData] = useState(null);\n\n function getDataFromServer() {\n if (selectedSort === null) { return }\n setLoadingOn(true);\n setFetchError(null);\n let data = {\n page: pageNumber,\n sort: selectedSort.value,\n ...(filters !== null ? getFiltersFetchData(filters) : {}),\n };\n\n let urlParams = '?';\n const serializedUrlData = serializeUrlParams(\n data, serializationUrlDictToPolish);\n for (let [index, [k, v]] of Object.entries(\n serializedUrlData).sort(sortUrlParams).entries()) {\n urlParams += `${index > 0 ? '&' : ''}${k}=${v}`;\n }\n\n // it looks odd, but it's necessary, because some filters have to be set\n // as all and backend doesn't like \"all\"\n const dataWithoutAll = {};\n for (let [name, value] of Object.entries(data)) {\n if (value !== 'all') {\n dataWithoutAll[name] = value;\n }\n }\n\n const urlWithParams = `${window.location.pathname}${urlParams}`;\n if (window.location.pathname + window.location.search !== urlWithParams) {\n history.replace(urlWithParams);\n }\n\n function checkHasPrev() {\n return pageNumber > 1\n }\n\n function checkHasNext(total) {\n return Math.ceil(total / paginatedBy) > pageNumber\n }\n\n let xhrFetch = null;\n\n function callbackSuccess(data_) {\n xhrFetch = null;\n const { total } = data_.meta;\n setData({\n objects: getSerializedObject(\n data_, {mapToCamelCaseName: true, ...serializerConfig})[objectsAttrName] || [],\n total: total,\n hasPrev: checkHasPrev(),\n hasNext: checkHasNext(total),\n });\n if (permissionsCheckingOn) {\n setPermissionsCheckingOn(false);\n }\n setLoadingOn(false);\n }\n\n function callbackError(data_) {\n xhrFetch = null;\n setFetchError(data_.message);\n if (permissionsCheckingOn) {\n setPermissionsCheckingOn(false);\n }\n setLoadingOn(false);\n }\n\n function callbackIncorrectStatus(status) {\n xhrFetch = null;\n if (status === 403) {\n setNotPermitted(true);\n if (permissionsCheckingOn) {\n setPermissionsCheckingOn(false);\n }\n setLoadingOn(false);\n return\n }\n setFetchError(`WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`);\n setLoadingOn(false);\n }\n\n xhrFetch = fetchApi(\n baseApiUrl, 'GET', {}, {...dataWithoutAll, limit: paginatedBy},\n callbackSuccess, callbackError, callbackIncorrectStatus\n );\n return () => {\n if (xhrFetch !== null) {xhrFetch.abort()}\n }\n }\n useEffect(getDataFromServer, [pageNumber, selectedSort, filters])\n\n function updateData(objectId, data_) {\n setData(prevData => ({\n objects: prevData.objects.map(obj => {\n if (obj.id === objectId) {\n obj = {...obj, ...data_};\n }\n return obj\n }),\n }));\n }\n\n return {\n data, fetchError, loadingOn, notPermitted, permissionsCheckingOn,\n updateData\n }\n}\n\nexport const usePutFetchApi = ({\n callbackPutSuccess,\n fetchData = {},\n loadingOn,\n message403error = null,\n setLoadingOn,\n setFetchError,\n url\n}) => {\n\n function save() {\n if (!loadingOn) { return }\n setLoadingOn(true);\n setFetchError(null);\n\n let xhrFetch = null;\n\n function callbackSuccess(data) {\n xhrFetch = null;\n callbackPutSuccess(data);\n setLoadingOn(false);\n }\n\n function callbackError(data) {\n xhrFetch = null;\n setFetchError(data.message);\n setLoadingOn(false);\n }\n\n function callbackIncorrectStatus(status) {\n xhrFetch = null;\n setFetchError(\n status === 403 && message403error\n ? message403error\n : `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n );\n setLoadingOn(false);\n }\n\n xhrFetch = fetchApi(\n url, 'PUT', {}, fetchData,\n callbackSuccess, callbackError, callbackIncorrectStatus\n );\n return () => {\n if (xhrFetch !== null) {xhrFetch.abort()}\n }\n }\n useEffect(save, [loadingOn]);\n\n return {}\n};\n\n\nexport const usePutFormFetchApi = (config) => {\n\n const url = config.url || '';\n const fetchData = config.fetchData || {};\n const callbackPutSuccess = config.callbackSuccess || (() => {});\n const callbackObjectExists = config.callbackObjectExists || null;\n const loadingOn = config.loadingOn || false;\n const setLoadingOn = config.setLoadingOn || (() => {});\n const method = config.method || 'PUT';\n const defaultSaveBtnText = config.defaultSaveBtnText || 'Zapisz zmiany';\n const doNotTranslateNames = config.doNotTranslateNames || false;\n const message403error = config.message403error || '';\n const callback403 = config.callback403 || (() => {});\n\n const [fetchError, setFetchError] = useState(null);\n const [errors, setErrors] = useState({});\n const [saveBtnText, setSaveBtnText] = useState(defaultSaveBtnText);\n\n function save() {\n if (!loadingOn) { return }\n setLoadingOn(true);\n setFetchError(null);\n setErrors({});\n setSaveBtnText('Trwa zapisywanie zmian...');\n\n let xhrFetch = null;\n let saveMsgTimeout = null;\n\n function callbackSuccess(data) {\n xhrFetch = null;\n setSaveBtnText('Zapisano');\n saveMsgTimeout = setTimeout(() => {\n setSaveBtnText(defaultSaveBtnText);\n }, 5000);\n setLoadingOn(false);\n callbackPutSuccess(data);\n }\n\n function callbackError(data) {\n xhrFetch = null;\n if (data.message === 'permissions.store.set_exists' &&\n callbackObjectExists !== null) {\n callbackObjectExists();\n } else {\n setFetchError(translateErrorMessage(data.message));\n }\n setSaveBtnText(defaultSaveBtnText);\n setLoadingOn(false);\n }\n\n function callbackIncorrectStatus(status) {\n xhrFetch = null;\n if (method === 'PUT' && status === 404 && callbackObjectExists !== null) {\n callbackObjectExists();\n } else {\n let message;\n if (status === 403) {\n message = message403error;\n callback403();\n }\n setFetchError(\n message || `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`);\n }\n setSaveBtnText(defaultSaveBtnText);\n setLoadingOn(false);\n }\n\n function callbackShowErrors(errors) {\n xhrFetch = null;\n setErrors(getSerializedErrorsFromServer(errors, {doNotTranslateNames}));\n setSaveBtnText(defaultSaveBtnText);\n setLoadingOn(false);\n }\n\n xhrFetch = fetchApi(\n url, method, {}, fetchData,\n callbackSuccess, callbackError, callbackIncorrectStatus,\n callbackShowErrors\n );\n return () => {\n if (xhrFetch !== null) {xhrFetch.abort()}\n if (saveMsgTimeout !== null) {\n // TODO: it cleans timeout every time function ends, not as is expected\n clearTimeout(saveMsgTimeout);\n setSaveBtnText(defaultSaveBtnText);\n }\n }\n }\n useEffect(save, [loadingOn]);\n\n return {fetchError, errors, saveBtnText}\n};\n","import React from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { API_URLS } from '../../../urls/api';\nimport { URLS } from '../../../urls/frontend';\nimport { ImplementationLevelManagement, Text } from '../../common';\n\n\nconst RelatedObjectsExistInfoComponent = (props) => (\n <>\n <Text error>Nie można usunąć dziaÅ‚ania, ponieważ jest ono powiÄ…zane z innym obiektem.</Text>\n <Text error>Upewnij siÄ™, że dziaÅ‚anie nie ma instytucji, nie istniejÄ… projekty lub nabory oparte o to dziaÅ‚anie oraz nie sÄ… przyznane uprawnienia do tego dziaÅ‚ania, a nastÄ™pnie spróbuj ponownie.</Text>\n </>\n);\n\n\nexport const Activities = (props) => {\n const { priorityId } = useParams();\n\n function getItemLinkUrl(item) {\n return URLS.managementInstitutionsForActivity.getUrl(item.id)\n }\n\n function getParentFormLabel(programmeCode, priorityCode, activityCode) {\n return `${programmeCode}.${priorityCode}.`\n }\n\n return (\n <ImplementationLevelManagement\n addApiUrlName=\"activitiesAdd\"\n addItemButtonLabel=\"Dodaj dziaÅ‚anie\"\n additionalSaveData={{priority: parseInt(priorityId)}} // for form\n apiUrl={API_URLS.activitiesAdmin.getUrl(priorityId)}\n auditDataBoxTitle=\"Dane audytowe dla osi priorytetowej\"\n auditDataObjectName=\"priority\"\n editApiUrlName=\"activitiesEdit\"\n getParentFormLabel={getParentFormLabel}\n listObjectName=\"activities\"\n RelatedObjectsExistInfoComponent={RelatedObjectsExistInfoComponent}\n rowComponentProps={{\n getItemLinkFunction: getItemLinkUrl, withLink: true\n }}\n showAuditData={true}\n tableName=\"Lista dziaÅ‚aÅ„\"\n titleFormLabel=\"dziaÅ‚ania\"\n />\n )\n};\n","import React, { useContext } from 'react';\nimport { Link } from 'react-router-dom';\nimport { DataTableCell, DataTableRow } from '@rmwc/data-table';\n\nimport { UserContext } from '../../../context/user-context';\nimport { ButtonStyled, MoreOptionsButton, Text } from '../../common';\n\n\nexport const ImplementationLevelTableRow = ({\n getItemLinkFunction = (() => '/'),\n item,\n perspectiveData = {},\n withLink = false,\n onDelete,\n onEdit\n}) => {\n const { permissions } = useContext(UserContext);\n return (\n <DataTableRow>\n <DataTableCell>\n <Text>{item.code}</Text>\n </DataTableCell>\n <DataTableCell>\n {withLink\n ? (\n <Link\n className=\"link-text administration__table-link\"\n to={getItemLinkFunction(item, perspectiveData)}\n >\n {item.name}\n </Link>\n )\n : <Text>{item.name}</Text>\n }\n </DataTableCell>\n {permissions.editingDictionaries && (\n <DataTableCell>\n <MoreOptionsButton\n className=\"administration__more-options\"\n menuAriaLabel=\"Otwórz menu: Zmien nazwÄ™ lub usuÅ„\"\n >\n <ul className=\"permissions__more-options-list\">\n <li>\n <ButtonStyled noMargin onClick={() => onEdit(item)}>\n ZmieÅ„ nazwÄ™\n </ButtonStyled>\n </li>\n <li>\n <ButtonStyled noMargin onClick={() => onDelete(item)}>\n UsuÅ„\n </ButtonStyled>\n </li>\n </ul>\n </MoreOptionsButton>\n </DataTableCell>\n )}\n\n </DataTableRow>\n )\n};\n","import React from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { API_URLS } from '../../../urls/api';\nimport { ImplementationLevelManagement, Text } from '../../common';\n\n\nconst RelatedObjectsExistInfoComponent = (props) => (\n <>\n <Text error>Nie można usunąć instytucji, ponieważ jest ona powiÄ…zana z innym obiektem.</Text>\n <Text error>Upewnij siÄ™, że nie istniejÄ… projekty lub nabory oparte o tÄ™ instytucjÄ™ oraz nie sÄ… przyznane uprawnienia do tej instytucji, a nastÄ™pnie spróbuj ponownie.</Text>\n </>\n);\n\n\nexport const Institutions = (props) => {\n const { activityId } = useParams();\n\n function getParentFormLabel(programmeCode, priorityCode, activityCode) {\n return `${programmeCode}.${priorityCode}.${activityCode}-`\n }\n\n return (\n <ImplementationLevelManagement\n addApiUrlName=\"institutionsAdd\"\n addItemButtonLabel=\"Dodaj instytucjÄ™\"\n additionalSaveData={{activity: parseInt(activityId)}} // for form\n apiUrl={API_URLS.institutionsAdmin.getUrl(activityId)}\n auditDataBoxTitle=\"Dane audytowe dla dziaÅ‚ania\"\n auditDataObjectName=\"activity\"\n codeMaxLength={5}\n editApiUrlName=\"institutionsEdit\"\n getParentFormLabel={getParentFormLabel}\n listObjectName=\"institutions\"\n RelatedObjectsExistInfoComponent={RelatedObjectsExistInfoComponent}\n showAuditData={true}\n tableName=\"Lista instytucji\"\n titleFormLabel=\"instytucji\"\n />\n )\n};\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { DataTableCell, DataTableRow } from '@rmwc/data-table';\n\nimport { URLS } from '../../../urls/frontend';\n\n\nexport const PerspectivesTableRow = ({item}) => {\n return (\n <DataTableRow>\n <DataTableCell>\n <Link to={URLS.managementProgrammesForPerspective.getUrl(item.id)} className=\"link-text\">\n {item.name}\n </Link>\n </DataTableCell>\n </DataTableRow>\n )\n};\n","import React from 'react';\n\nimport { API_URLS } from '../../../urls/api';\nimport { ImplementationLevelManagement } from '../../common';\nimport { PerspectivesTableRow } from './PerspectivesTableRow';\n\n\nexport const Perspectives = (props) => {\n return (\n <ImplementationLevelManagement\n addItemButtonVisible={false}\n apiUrl={API_URLS.perspectivesAdmin.path}\n listObjectName=\"perspectives\"\n RowComponent={PerspectivesTableRow}\n sortItemsFunction={null}\n tableHeaderList={['Nazwa']}\n tableName=\"Lista perspektyw\"\n />\n )\n};\n","import React from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport {\n getActivityUrlByPerspectiveData,\n hasSubactivities\n} from '../../../helpers';\nimport { URLS } from '../../../urls/frontend';\nimport { API_URLS } from '../../../urls/api';\nimport {ImplementationLevelManagement, Text} from '../../common';\n\n\nconst RelatedObjectsExistInfoComponent = ({perspectiveData}) => {\n const hasSubactivities_ = hasSubactivities(perspectiveData);\n return (\n <>\n <Text error>\n Nie można usunąć osi priorytetowej, ponieważ jest ona\n powiÄ…zana z innym obiektem.\n </Text>\n <Text error>\n Upewnij siÄ™, że oÅ› priorytetowa nie ma dziaÅ‚aÅ„\n {hasSubactivities_ && ' i poddziaÅ‚aÅ„'}, nie istniejÄ… projekty\n lub nabory oparte o tÄ™ oÅ› priorytetowÄ… oraz nie sÄ… przyznane\n uprawnienia do tej osi priorytetowej, a nastÄ™pnie spróbuj ponownie.\n </Text>\n </>\n )\n};\n\n\nexport const Priorities = (props) => {\n const { programmeId } = useParams();\n\n function getItemLinkUrl(item, perspectiveData) {\n return URLS[getActivityUrlByPerspectiveData(perspectiveData)]\n .getUrl(item.id)\n }\n\n function getParentFormLabel(programmeCode, priorityCode, activityCode) {\n return `${programmeCode}.`\n }\n\n return (\n <ImplementationLevelManagement\n addApiUrlName=\"prioritiesAdd\"\n addItemButtonLabel=\"Dodaj oÅ› priorytetowÄ…\"\n additionalSaveData={{programme: parseInt(programmeId)}} // for form\n apiUrl={API_URLS.prioritiesAdmin.getUrl(programmeId)}\n auditDataBoxTitle=\"Dane audytowe dla programu operacyjnego\"\n auditDataObjectName=\"programme\"\n editApiUrlName=\"prioritiesEdit\"\n getParentFormLabel={getParentFormLabel}\n listObjectName=\"priorities\"\n RelatedObjectsExistInfoComponent={RelatedObjectsExistInfoComponent}\n rowComponentProps={{\n getItemLinkFunction: getItemLinkUrl, withLink: true\n }}\n showAuditData={true}\n tableName=\"Lista osi priorytetowych\"\n titleFormLabel=\"osi priorytetowej\"\n />\n )\n};\n","import React from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { API_URLS } from '../../../urls/api';\nimport { URLS } from '../../../urls/frontend';\nimport { sortProgrammes } from '../../../helpers';\nimport { ImplementationLevelManagement, Text } from '../../common';\n\n\nconst RelatedObjectsExistInfoComponent = (props) => (\n <>\n <Text error>Nie można usunąć programu operacyjnego, ponieważ jest on powiÄ…zany z innym obiektem.</Text>\n <Text error>Upewnij siÄ™, że program operacyjny nie ma osi priorytetowych, nie istniejÄ… projekty lub nabory oparte o ten program operacyjny oraz nie sÄ… przyznane uprawnienia do tego programu operacyjnego, a nastÄ™pnie spróbuj ponownie.</Text>\n </>\n);\n\n\nexport const Programmes = (props) => {\n const { perspectiveId } = useParams();\n\n function getItemLinkUrl(item) {\n return URLS.managementPrioritiesForProgramme.getUrl(item.id)\n }\n\n return (\n <ImplementationLevelManagement\n addApiUrlName=\"programmesAdd\"\n addItemButtonLabel=\"Dodaj program operacyjny\"\n additionalSaveData={{perspective: parseInt(perspectiveId)}} // for form\n apiUrl={API_URLS.programmesAdmin.getUrl(perspectiveId)}\n codeMaxLength={4}\n editApiUrlName=\"programmesEdit\"\n getItemLinkFunction={getItemLinkUrl}\n listObjectName=\"programmes\"\n RelatedObjectsExistInfoComponent={RelatedObjectsExistInfoComponent}\n rowComponentProps={{\n getItemLinkFunction: getItemLinkUrl, withLink: true\n }}\n sortItemsFunction={sortProgrammes}\n tableName=\"Lista programów operacyjnych\"\n titleFormLabel=\"programu operacyjnego\"\n />\n )\n};\n","import React from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { API_URLS } from '../../../urls/api';\nimport { ImplementationLevelManagement, Text } from '../../common';\n\n\nconst RelatedObjectsExistInfoComponent = (props) => (\n <>\n <Text error>Nie można usunąć regionu, ponieważ jest on powiÄ…zany z innym obiektem.</Text>\n <Text error>Upewnij siÄ™, że nie istniejÄ… projekty lub nabory oparte o ten region oraz nie sÄ… przyznane uprawnienia do tego regionu, a nastÄ™pnie spróbuj ponownie.</Text>\n </>\n);\n\n\nexport const Regions = (props) => {\n const { activityId } = useParams();\n\n function getParentFormLabel(programmeCode, priorityCode, activityCode) {\n return `${programmeCode}.${priorityCode}.${activityCode}.`\n }\n\n return (\n <ImplementationLevelManagement\n addApiUrlName=\"regionsAdd\"\n addItemButtonLabel=\"Dodaj region\"\n additionalSaveData={{activity: parseInt(activityId)}} // for form\n apiUrl={API_URLS.regionsAdmin.getUrl(activityId)}\n auditDataBoxTitle=\"Dane audytowe dla dziaÅ‚ania i poddziaÅ‚ania\"\n auditDataObjectName=\"activity\"\n editApiUrlName=\"regionsEdit\"\n getParentFormLabel={getParentFormLabel}\n listObjectName=\"regions\"\n RelatedObjectsExistInfoComponent={RelatedObjectsExistInfoComponent}\n showAuditData={true}\n tableName=\"Lista regionów\"\n titleFormLabel=\"regionu\"\n />\n )\n};\n","import React from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { API_URLS } from '../../../urls/api';\nimport { URLS } from '../../../urls/frontend';\nimport { ImplementationLevelManagement, Text } from '../../common';\n\n\nconst RelatedObjectsExistInfoComponent = (props) => (\n <>\n <Text error>Nie można usunąć dziaÅ‚ania i poddziaÅ‚ania, ponieważ jest ono powiÄ…zane z innym obiektem.</Text>\n <Text error>Upewnij siÄ™, że dziaÅ‚anie i poddziaÅ‚anie nie ma regionów, nie istniejÄ… projekty lub nabory oparte o to dziaÅ‚anie i poddziaÅ‚anie oraz nie sÄ… przyznane uprawnienia do tego dziaÅ‚ania i poddziaÅ‚ania, a nastÄ™pnie spróbuj ponownie.</Text>\n </>\n);\n\n\nexport const Subactivities = (props) => {\n const { priorityId } = useParams();\n\n function getItemLinkUrl(item) {\n return URLS.managementRegionsForSubactivity.getUrl(item.id)\n }\n\n function getParentFormLabel(programmeCode, priorityCode, activityCode) {\n return `${programmeCode}.${priorityCode}.`\n }\n\n return (\n <ImplementationLevelManagement\n addApiUrlName=\"activitiesAdd\"\n addItemButtonLabel=\"Dodaj dziaÅ‚anie i poddziaÅ‚anie\"\n additionalSaveData={{priority: parseInt(priorityId)}} // for form\n apiUrl={API_URLS.activitiesAdmin.getUrl(priorityId)}\n auditDataBoxTitle=\"Dane audytowe dla osi priorytetowej\"\n auditDataObjectName=\"priority\"\n codeMaxLength={5}\n editApiUrlName=\"activitiesEdit\"\n getParentFormLabel={getParentFormLabel}\n listObjectName=\"activities\"\n RelatedObjectsExistInfoComponent={RelatedObjectsExistInfoComponent}\n rowComponentProps={{\n getItemLinkFunction: getItemLinkUrl, withLink: true\n }}\n showAuditData={true}\n tableName=\"Lista dziaÅ‚aÅ„ i poddziaÅ‚aÅ„\"\n titleFormLabel=\"dziaÅ‚ania i poddziaÅ‚ania\"\n />\n )\n};\n","import React, { useContext, useMemo, useState } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { UserContext } from '../../../context/user-context';\nimport {\n getActivityChildUrlByPerspectiveData,\n getActivityUrlByPerspectiveData,\n serializeAuditData,\n sortImplementationLevelByNumberCode\n} from '../../../helpers';\nimport { useOneTimeFetchApi } from '../../../hooks';\nimport { URLS } from '../../../urls/frontend';\nimport {\n AuditData,\n Breadcrumps,\n ButtonStyled,\n Container,\n GridCustom,\n Loader,\n PaginatedListHeader,\n TableCustom,\n Text\n} from '../../common';\nimport {\n ImplementationLevelTableRow\n} from '../../layoutElements/implementationLevelsManagement';\nimport { DeleteImplementationLevel } from './DeleteImplementationLevel';\nimport { ImplementationLevelForm } from './ImplementationLevelForm';\n\n\nexport const ImplementationLevelManagement = ({\n addApiUrlName,\n addItemButtonLabel,\n addItemButtonVisible = true,\n additionalSaveData = {},\n apiUrl,\n auditDataBoxTitle,\n auditDataObjectName,\n codeMaxLength,\n editApiUrlName,\n getParentFormLabel = null,\n listObjectName,\n RelatedObjectsExistInfoComponent,\n RowComponent = ImplementationLevelTableRow,\n rowComponentProps = {},\n showAuditData = false,\n sortItemsFunction = sortImplementationLevelByNumberCode,\n tableHeaderList,\n tableName,\n titleFormLabel\n}) => {\n const [formOn, setFormOn] = useState(false);\n const [editedItem, setEditedItem] = useState(null);\n const [requestId, setRequestId] = useState(1);\n const [deletedItem, setDeletedItem] = useState(null);\n\n const { permissions, removePermission } = useContext(UserContext);\n\n const {data, loadingOn, fetchError} = useOneTimeFetchApi({\n url: apiUrl,\n message403error: 'Nie masz uprawnieÅ„ do przeglÄ…dania elementów sÅ‚ownika poziomów wdrożenia.',\n callback403: () => removePermission('previewDictionaries'),\n requestId,\n });\n\n const items = useMemo(\n () => {\n if (!data) { return [] }\n\n let items_ = [];\n if (data[listObjectName]) {\n items_ = data[listObjectName] || [];\n }\n if (sortItemsFunction) {\n items_.sort(sortItemsFunction);\n }\n\n return items_\n }, [data] // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n function handleCancelFormOn() {\n setFormOn(false);\n setEditedItem(null);\n }\n\n function handleSetEditedItem(item) {\n setDeletedItem(null);\n setEditedItem(item);\n setFormOn(true);\n }\n\n function handleUpdateRequestId() {\n setRequestId(prevValue => prevValue + 1);\n }\n\n function handleSetDeletedItem(item) {\n setFormOn(false);\n setEditedItem(null);\n setDeletedItem(item);\n }\n\n function handleCancelDeleting() {\n setDeletedItem(null);\n }\n\n let parentFormLabel = '';\n let perspectiveId, programmeId, priorityId, activityId;\n if (data) {\n perspectiveId = (data.perspective || {}).id;\n programmeId = (data.programme || {}).id;\n priorityId = (data.priority || {}).id;\n activityId = (data.activity || {}).id;\n if (getParentFormLabel) {\n parentFormLabel = getParentFormLabel(\n (data.programme || {}).code,\n (data.priority || {}).code,\n (data.activity || {}).code\n );\n }\n }\n\n const { editingDictionaries: editingDictionariesPermission } = permissions;\n if (!tableHeaderList) {\n tableHeaderList = ['Kod', 'Nazwa'];\n if (editingDictionariesPermission) {\n tableHeaderList.push('');\n }\n }\n\n return (\n <>\n <Breadcrumps notZarzadzanieTrescia>\n <li className=\"breadcrumps__current\">\n Administracja sÅ‚ownikiem poziomów wdrażania\n </li>\n </Breadcrumps>\n {loadingOn\n ? <Loader />\n : !!fetchError\n ? <Text error>{fetchError}</Text>\n : (\n <Container>\n <div className=\"administration__header-links\">\n {data.perspective && (\n <Link to={URLS.managementProgrammesForPerspective.getUrl(perspectiveId)} className=\"link-text administration__header-link\">\n {data.perspective.name}\n </Link>\n )}\n {[\n ['programme', programmeId ? URLS.managementPrioritiesForProgramme.getUrl(programmeId) : null],\n ['priority', priorityId ? URLS[getActivityUrlByPerspectiveData(data.perspective)].getUrl(priorityId) : null],\n ['activity', activityId ? URLS[getActivityChildUrlByPerspectiveData(data.perspective)].getUrl(activityId) : null]\n ].map(([levelName, levelUrl]) => {\n if (levelUrl && data[levelName]) {\n const levelData = data[levelName] || {};\n return (\n <p key={levelName} className=\"administration__indented\">\n <span className=\"administration__code\">{levelData.code}</span>\n <Link to={levelUrl} className=\"link-text\">\n {levelData.name}\n </Link>\n </p>\n )\n }\n return null\n })}\n </div>\n <GridCustom fullwidth flexTop>\n <PaginatedListHeader\n title={tableName}\n total={data.meta ? data.meta.total : 0} />\n {addItemButtonVisible && editingDictionariesPermission && (\n <ButtonStyled add onClick={() => setFormOn(true)}>\n {addItemButtonLabel || 'Dodaj'}\n </ButtonStyled>\n )}\n </GridCustom>\n {items.length > 0 && (\n <TableCustom tableHeaderList={tableHeaderList}>\n {items.map(item => (\n <RowComponent\n key={item.id}\n item={item}\n perspectiveData={data.perspective || {}}\n {...rowComponentProps}\n onEdit={handleSetEditedItem}\n onDelete={handleSetDeletedItem}\n />\n ))}\n </TableCustom>\n )}\n {formOn && (\n <ImplementationLevelForm\n addApiUrlName={addApiUrlName}\n additionalSaveData={additionalSaveData}\n codeMaxLength={codeMaxLength}\n editApiUrlName={editApiUrlName}\n originalData={editedItem}\n parentFormLabel={parentFormLabel}\n titleFormLabel={titleFormLabel}\n onCancel={handleCancelFormOn}\n onSave={handleUpdateRequestId}\n />\n )}\n {deletedItem !== null && (\n <DeleteImplementationLevel\n apiUrlName={editApiUrlName}\n item={deletedItem}\n parentFormLabel={parentFormLabel}\n perspectiveData={data.perspective || {}}\n RelatedObjectsExistInfoComponent={RelatedObjectsExistInfoComponent}\n titleFormLabel={titleFormLabel}\n onCancel={handleCancelDeleting}\n onDelete={handleUpdateRequestId}\n />\n )}\n {showAuditData && auditDataObjectName &&\n <AuditData\n {...serializeAuditData(data[auditDataObjectName])}\n titleOneRow={`${auditDataBoxTitle} ${parentFormLabel}`}\n />\n }\n </Container>\n )\n }\n </>\n )\n};\n","import React from 'react';\n\nimport { DialogCustom, FiltersButton, GridCustom, SortersSelect } from '../../common';\n\n\nexport const SortersFiltersRow = ({\n filters, filtersAreOn, FiltersComponent, onCloseFilters, onUpdateFilters, ...props}) => {\n return (\n <>\n <GridCustom className=\" search__options\">\n <SortersSelect {...props} />\n <FiltersButton {...props} />\n </GridCustom>\n {filtersAreOn && (\n <DialogCustom\n className=\"dialog-long-content\"\n onClose={onCloseFilters}\n >\n <FiltersComponent\n filters={filters}\n onCloseFilters={onCloseFilters}\n onUpdateFilters={onUpdateFilters} />\n </DialogCustom>\n )}\n </>\n )\n}\n","import React from 'react';\n\nimport { ButtonStyled } from './ButtonStyled';\nimport { GridCustom } from './GridCustom';\n\n\nconst Pagination = (props) => {\n const {\n currentPage,\n disabled,\n handleChangePage,\n hasNext,\n hasPrev\n } = props;\n\n return (\n <GridCustom centerVertical oneRow fullwidth className=\"pagination\">\n <ButtonStyled disabled={disabled || !hasPrev} onClick={() => handleChangePage(false)} lite>Poprzednia<span className=\"sr-only\"> strona</span></ButtonStyled>\n <span className=\"pagination__current\">{currentPage}</span>\n <ButtonStyled disabled={disabled || !hasNext} onClick={() => handleChangePage(true)} lite>NastÄ™pna<span className=\"sr-only\"> strona</span></ButtonStyled>\n </GridCustom>\n )\n}\n\nexport { Pagination };\n","import React from 'react';\nimport { Text, View, StyleSheet } from '@react-pdf/renderer';\n\nimport { datetimeToString } from '../../helpers';\n\n\nconst PdfHeader = (props) => {\n\n const {\n flexContainerStyle,\n metaSectionStyle,\n textInfoStyle,\n } = styles;\n\n return (\n <View style={metaSectionStyle} fixed>\n <View style={flexContainerStyle}>\n <Text style={textInfoStyle}>Wygenerowano: {datetimeToString(new Date())}</Text>\n <Text render={({ pageNumber, totalPages }) => (\n `Strona ${pageNumber} / ${totalPages}`\n )} fixed style={textInfoStyle} />\n </View>\n <Text style={textInfoStyle}>Wygenerowano za poÅ›rednictwem serwisu Baza KonkurencyjnoÅ›ci.</Text>\n {props.title && props.title.length > 0 && <Text style={[textInfoStyle, {maxHeight: 30}]}>{props.title}</Text>}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n metaSectionStyle: {\n paddingHorizontal: 20,\n paddingVertical: 5,\n paddingBottom: 0,\n marginHorizontal: -20,\n marginTop: -10,\n marginBottom: 10,\n borderBottomWidth: 1,\n borderBottomColor: '#666A6D',\n borderBottomStyle: 'dashed',\n },\n flexContainerStyle: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n textInfoStyle: {\n marginBottom: 5,\n fontSize: 10,\n fontStyle: 'italic',\n color: '#666A6D'\n },\n});\n\n\nexport { PdfHeader };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { Typography } from '@rmwc/typography';\nimport '@material/list/dist/mdc.list.css';\n\n\nconst SkipLinks = (props) => {\n return (\n <nav aria-label=\"Nawigacja pomocnicza\">\n <ul>\n {props.children.map((link) =>\n <li key={link.id}>\n <Typography\n tag={Link}\n to={link.linkTo}\n className=\"skip-link\"\n tabIndex={link.id} >\n {link.label}\n </Typography>\n </li>\n )}\n </ul>\n </nav>\n )\n}\n\n\nexport { SkipLinks };\n","import React from 'react';\nimport { setFocusOnElement } from '../../helpers';\nimport { NextStep } from '.';\n\n\nconst Steps = (props) => {\n const className = \"next-step-container\" + (!props.hasPrev ? ' next-step-container--one-item' : '');\n return (\n <section className={className}>\n {props.hasPrev && <NextStep\n disabled={props.disabled || false}\n onClick={() => {\n setFocusOnElement(props.elementToFocusRef)\n props.onPrevClick()\n }}\n stepTitle={props.prevLabel}\n prevStep\n />}\n {props.hasNext && <NextStep\n disabled={props.disabled || false}\n onClick={() => {\n setFocusOnElement(props.elementToFocusRef)\n props.onNextClick()\n }}\n stepTitle={props.nextLabel}\n />}\n </section>\n );\n}\n\nexport { Steps };\n","// USAGE:\n// This component renders \"outer\" part of the table: table layout, header and body wrapper.\n// It doesnt render <tbody></tbody> content.\n// To fill in the table, please provide imports:\n// import { TableCustom } from '<path_to>/common';\n// import { DataTableCell, DataTableRow } from '@rmwc/data-table';\n// and fill in the <DataTableRow/> as needed.\n// Expample:\n// <TableCustom tableHeaderList={['Col1 header', 'Col2 header', 'Col3 header']}>\n// <DataTableRow>\n// <DataTableCell>Col1 content</DataTableCell>\n// <DataTableCell>Col2 content</DataTableCell>\n// <DataTableCell>Col3 content</DataTableCell>\n// </DataTableRow >\n// </TableCustom>\n\nimport React from 'react';\nimport {\n DataTable,\n DataTableBody,\n DataTableContent,\n DataTableHead,\n DataTableHeadCell,\n DataTableRow,\n} from '@rmwc/data-table';\nimport { Typography } from '@rmwc/typography';\n\nconst TableCustom = (props) => {\n const {\n children,\n tableHeaderList,\n ...otherProps\n } = props;\n\n return (\n <DataTable className=\"table table--full-width\" {...otherProps}>\n <DataTableContent>\n <DataTableHead>\n <DataTableRow>\n {tableHeaderList.map(tableHeader => \n <DataTableHeadCell key={tableHeader}>\n <Typography use=\"subtitle2\" className=\"table__header\">\n {tableHeader}\n </Typography>\n </DataTableHeadCell>\n )}\n </DataTableRow>\n </DataTableHead>\n <DataTableBody>\n {children}\n </DataTableBody>\n </DataTableContent>\n </DataTable>\n );\n}\n\nexport { TableCustom };\n","// https://jpuri.github.io/react-draft-wysiwyg/\n\nimport React, { Component } from 'react';\nimport { Editor } from 'react-draft-wysiwyg';\nimport 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css';\n\nimport { countWysiwygChars } from '../../helpers';\nimport { GridCustom } from './GridCustom';\nimport { Text } from './Text';\n\n\nclass WysiwygEditor extends Component {\n\n constructor(props) {\n super(props);\n this.state = {counter: countWysiwygChars(props.initialContentState)};\n\n this.handleContentStateChange = this.handleContentStateChange.bind(this);\n }\n\n // handlers\n\n handleContentStateChange(contentState) {\n this.props.onContentStateChange(contentState);\n this.setState({counter: countWysiwygChars(contentState)});\n }\n\n // rendering\n\n render() {\n\n const props_ = Object.assign({}, this.props, {\n onContentStateChange: this.handleContentStateChange\n });\n\n return (\n <section className={this.props.wysiwygClassName || 'wysiwyg'}>\n <Editor {...props_} wrapperClassName=\"wysiwyg__wrapper\" editorClassName=\"wysiwyg__editor\" stripPastedStyles={true} />\n <GridCustom centerVertical flexEnd><Text className=\"wysiwyg__counter\">{this.state.counter}{!this.props.maxLength ? '' : ' / ' + this.props.maxLength}</Text></GridCustom>\n </section>\n );\n }\n}\n\nexport { WysiwygEditor };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { Message } from '../../common';\n\n\nconst BladLogowania = (props) => {\n return (\n <Message\n error\n messageIcon=\"highlight_off\"\n messageTitle=\"WystÄ…piÅ‚ bÅ‚Ä…d logowania.\" >\n Przejdź na <Link to={'/'} className=\"link-text\">stronÄ™ głównÄ…</Link>.\n </Message>\n )\n}\n\n\nexport { BladLogowania };\n","import React, { Component } from 'react';\n\nimport { USER_STATUS_CHOICES } from '../../../const';\nimport {\n ButtonStyled,\n FieldWithLabel,\n GridCustom,\n Select,\n TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\n\n\nclass FiltryUzytkownikow extends Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n filters: props.filters,\n };\n\n this.handleApplyFilters = this.handleApplyFilters.bind(this);\n }\n\n //handlers\n\n handleChangeFilter(name, value) {\n this.setState(prevState => {\n return {filters: Object.assign({}, prevState.filters, {[name]: value})}\n });\n }\n\n handleApplyFilters() {\n this.props.updateFilters(this.state.filters);\n }\n\n // rendering\n\n render() {\n const filters = this.state.filters;\n return (\n <>\n <section className=\"filters-dialog__filters-section\">\n <GridCustom fullwidth flexM>\n <FieldWithLabel label=\"Identyfikator użytkownika\" tag=\"label\" labelFor=\"filters_identifier_id\">\n <TextFieldCustom\n className=\"filters__input\"\n clearFieldContext=\"identyfikator użytkownika\"\n id=\"filters_identifier_id\"\n value={filters.identifier}\n onChange={(ev) => this.handleChangeFilter('identifier', ev.target.value)}\n onClear={(ev) => this.handleChangeFilter('identifier', '')} />\n </FieldWithLabel>\n <FieldWithLabel label=\"Adres e-mail\" tag=\"label\" labelFor=\"filters_email_id\">\n <TextFieldCustom\n clearFieldContext=\"adres e-mail\"\n value={filters.email}\n onChange={(ev) => this.handleChangeFilter('email', ev.target.value)}\n className=\"filters__input\"\n onClear={(ev) => this.handleChangeFilter('email', '')}\n id=\"filters_email_id\"\n />\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth flexM>\n <FieldWithLabel label=\"ImiÄ™\" tag=\"label\" labelFor=\"filters_name_id\">\n <TextFieldCustom\n clearFieldContext=\"imiÄ™\"\n value={filters.forename}\n onChange={(ev) => this.handleChangeFilter('forename', ev.target.value)}\n className=\"filters__input\"\n onClear={(ev) => this.handleChangeFilter('forename', '')}\n id=\"filters_name_id\"\n />\n </FieldWithLabel>\n <FieldWithLabel label=\"Nazwisko\" tag=\"label\" labelFor=\"filters_surname_id\">\n <TextFieldCustom\n clearFieldContext=\"nazwisko\"\n value={filters.surname}\n onChange={(ev) => this.handleChangeFilter('surname', ev.target.value)}\n className=\"filters__input\"\n onClear={(ev) => this.handleChangeFilter('surname', '')}\n id=\"filters_surname_id\"\n />\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"Status\"\n tag=\"label\"\n selectRef={React.createRef()}>\n <Select\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n className=\"select-custom\"\n options={USER_STATUS_CHOICES.map(s => ({value: s[0], label: s[1]}))}\n value={{value: filters.status.value || USER_STATUS_CHOICES[0][0], label: filters.status.label || USER_STATUS_CHOICES[0][1]}}\n onChange={(selectedOption) => this.handleChangeFilter('status', selectedOption)}\n styles={customSelectStyles}\n />\n </FieldWithLabel>\n </GridCustom>\n </section>\n <GridCustom flexEnd>\n <ButtonStyled onClick={this.props.closeFilters} cancel>Anuluj</ButtonStyled>\n <ButtonStyled onClick={this.handleApplyFilters} primary>Zastosuj kryteria</ButtonStyled>\n </GridCustom>\n </>\n )\n }\n}\n\n\nexport { FiltryUzytkownikow };\n","import React, { Component } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport {\n getSerializedErrorsFromServer,\n getSerializedObject,\n translateErrorMessage\n} from '../../../serializers';\nimport {\n ButtonStyled, Container, DialogCustom, FieldWithLabel, GridCustom,\n NotFoundPage, NotPermittedPage, Pagination, Select, Text\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\n\n\nclass BaseComponent extends Component {\n message403 = null;\n\n constructor(props) {\n super(props);\n\n this.preState(props);\n this.formPreState(props);\n this.state = Object.assign(\n {\n initializingOn: true,\n pageNotFound: false,\n pageNotPermitted: false,\n fetchError: '',\n },\n this.getAdditionalState(props),\n this.getFormAdditionalState(props)\n );\n this.postState(props);\n this.formPostState(props);\n\n this.xhrFetch = null;\n\n this.handleFetchSuccess = this.handleFetchSuccess.bind(this);\n this.handleFetchError = this.handleFetchError.bind(this);\n this.handleFetchIncorrectStatus = this.handleFetchIncorrectStatus.bind(this);\n\n this.setAdditionalHandlers();\n }\n\n // basic functions\n\n componentDidMount() {\n window.scrollTo(0, 0);\n\n this.fetchInitialData();\n }\n\n componentWillUnmount() {\n // abort api request if exists\n if (this.xhrFetch !== null) {\n this.xhrFetch.abort();\n }\n\n // clear timeouts if exist\n if (this.saveMsgTimeout !== null) {\n clearTimeout(this.saveMsgTimeout);\n }\n }\n\n // handlers\n\n handleFetchSuccess(data) {\n this.xhrFetch = null;\n }\n\n handleFetchError(data) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n initializingOn: false,\n fetchError: this.getFetchError(data.message || ''),\n });\n }\n\n handleFetchIncorrectStatus(status) {\n this.xhrFetch = null; // clean xhr object\n if (status === 404) {\n this.setState({initializingOn: false, pageNotFound: true});\n } else if (status === 403) {\n this.setState(\n {\n initializingOn: false,\n pageNotPermitted: true,\n },\n this.callback403\n );\n } else {\n this.setState({\n initializingOn: false,\n fetchError: this.getFetchIncorrectStatusError(status),\n });\n }\n }\n\n // helpers\n\n preState(props) {\n return\n }\n\n formPreState(props) {\n return\n }\n\n getAdditionalState(props) {\n return {}\n }\n\n getFormAdditionalState(props) {\n return {}\n }\n\n postState(props) {\n this.saveMsgTimeout = null;\n }\n\n formPostState(props) {\n return\n }\n\n setAdditionalHandlers() {\n return\n }\n\n fetchInitialData() {\n // get object(s) from server\n this.xhrFetch = fetchApi(\n this.getFetchUrl(),\n this.getFetchMethod(),\n {},\n this.getFetchData(),\n this.handleFetchSuccess,\n this.handleFetchError,\n this.handleFetchIncorrectStatus,\n );\n }\n\n getFetchUrl() {\n throw new Error('Not implemented fetch url!')\n }\n\n getFetchMethod() {\n return 'GET'\n }\n\n getFetchData() {\n return {}\n }\n\n getFetchError(message) {\n return translateErrorMessage(message)\n }\n\n getFetchIncorrectStatusError(status) {\n return `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n callback403 = () => { return }\n\n // rendering\n\n render() {\n if (this.state.pageNotFound) { return <NotFoundPage /> }\n if (this.state.pageNotPermitted) {\n return <NotPermittedPage message={this.message403} />\n }\n\n let content = null;\n if (this.state.initializingOn) {\n content = <Text info tabIndex=\"1\">Trwa inicjalizacja danych...</Text>;\n } else if (this.state.fetchError.length) {\n content = this.renderFetchError();\n } else {\n content = this.renderElements();\n }\n\n return (\n <>\n {this.renderHeader()}\n {this.renderBeforeContent()}\n {content}\n </>\n )\n }\n\n renderFetchError() {\n return <Text error role=\"alert\">{this.state.fetchError}</Text>\n }\n\n renderHeader() {\n return null\n }\n\n renderBeforeContent() {\n return null\n }\n\n renderElements() {\n return this.renderContent()\n }\n\n renderContent() {\n return null\n }\n}\n\n\nclass FormBaseComponent extends BaseComponent {\n\n // basic functions\n\n componentWillUnmount() {\n super.componentWillUnmount();\n\n if (this.xhrFetchSave !== null) {\n this.xhrFetchSave.abort();\n }\n }\n\n // handlers\n\n handleSave = () => {\n this.setState(\n {savingOn: true, errors: {}, fetchSaveError: '', saveBtnText: 'Trwa zapisywanie...'},\n () => {\n this.xhrFetchSave = fetchApi(\n this.getSaveUrl(),\n this.getSaveMethod(),\n {},\n this.getDataForSaving(),\n this.handleFetchSaveSuccess,\n this.handleFetchSaveError,\n this.handleFetchSaveIncorrectStatus,\n this.handleShowSaveErrors,\n );\n }\n );\n }\n\n handleFetchSaveSuccess(data) {\n this.xhrFetchSave = null;\n }\n\n handleFetchSaveError = (data) => {\n this.xhrFetchSave = null;\n this.setState({\n fetchSaveError: this.getFetchSaveError(data.message),\n saveBtnText: this.saveBtnDefaultText,\n savingOn: false,\n });\n }\n\n handleFetchSaveIncorrectStatus = (status) => {\n this.xhrFetchSave = null;\n this.setState({\n fetchSaveError: this.getFetchSaveIncorrectStatusError(status),\n saveBtnText: this.saveBtnDefaultText,\n savingOn: false,\n });\n }\n\n handleShowSaveErrors = (errors) => {\n this.xhrFetchSave = null;\n this.setState({\n errors: getSerializedErrorsFromServer(errors),\n saveBtnText: this.saveBtnDefaultText,\n savingOn: false,\n });\n }\n\n // helpers\n\n formPreState(props) {\n this.saveBtnDefaultText = 'Zapisz zmiany';\n }\n\n getFormAdditionalState(props) {\n return {\n savingOn: false,\n errors: {},\n fetchSaveError: '',\n saveBtnText: this.saveBtnDefaultText,\n }\n }\n\n formPostState(props) {\n this.xhrFetchSave = null;\n this.handleFetchSaveSuccess = this.handleFetchSaveSuccess.bind(this)\n }\n\n getSaveUrl() {\n throw new Error('Not implemented save fetch url!')\n }\n\n getSaveMethod() {\n return 'POST'\n }\n\n getDataForSaving() {\n return {}\n }\n\n getFetchSaveError(message) {\n return translateErrorMessage(message)\n }\n\n getFetchSaveIncorrectStatusError(status) {\n return `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n}\n\n\nclass PaginatedBaseComponent extends BaseComponent {\n withUrlUpdating = false;\n mapToCamelCaseNameFromServer = false;\n\n componentDidUpdate(prevProps, prevState) {\n // it manages every url change, including back button\n // don't init again from handlers\n const prevParams = prevProps.location.search;\n const params = this.props.location.search;\n if (prevParams !== params) {\n this.setState(\n {initializingOn: true},\n this.fetchInitialData\n );\n }\n }\n\n // handlers\n\n handleFetchSuccess(data){\n super.handleFetchSuccess(data);\n\n const total = data.meta.total;\n const config = this.mapToCamelCaseNameFromServer ? {mapToCamelCaseName: true} : {}\n this.setState(prevState => ({\n initializingOn: false,\n objects: getSerializedObject(data, config)[this.objectsName] || [],\n total: total,\n hasPrev: this.checkHasPrev(),\n hasNext: this.checkHasNext(total, prevState.pageNumber),\n }));\n }\n\n handleFetchIncorrectStatus(status) {\n this.xhrFetch = null; // clean xhr object\n if (status === 403) {\n this.setState(\n {\n initializingOn: false,\n pageNotPermitted: true,\n },\n this.callback403\n );\n return\n }\n this.setState({\n initializingOn: false,\n fetchError: this.getFetchIncorrectStatusError(status),\n });\n }\n\n handleChangePage = (next=true) => {\n this.setState(\n prevState => ({\n pageNumber: next ? prevState.pageNumber + 1 : Math.max(prevState.pageNumber -1, 1)}),\n this.reinitializeData\n );\n }\n\n handleChangeSort = (selectedOption) => {\n this.setState(\n {selectedSort: selectedOption},\n this.reinitializeData\n )\n }\n\n handleApplyFilters = (filters) => {\n let data = {\n filters,\n filtersAreOn: false,\n fetchError: '',\n objects: [],\n pageNumber: 1, // reset pageNumber\n };\n if (!this.withUrlUpdating) {\n Object.assign(data, {\n initializingOn: true,\n });\n }\n this.setState(data, this.reinitializeData);\n }\n\n handleCloseFilters = () => {\n this.setState({filtersAreOn: false});\n }\n\n // helpers\n\n preState(props) {\n this.dialogComponent = null;\n\n // redefine these values in your class if needed\n this.objectsName = 'objects';\n this.paginateBy = 50;\n this.sortingValues = [];\n this.sortingLabel = 'Sortuj wyniki wyszukiwania';\n this.filteringLabel = 'Opcje zaawansowane';\n this.filtersComponentClass = null;\n\n this.getFiltersCount = (filters) => { return 0 };\n }\n\n getAdditionalState(props) {\n const params = new URLSearchParams(props.location.search);\n let pageNumber = parseInt(params.get('strona'));\n if (!(pageNumber > 0)) {\n pageNumber = 1;\n }\n\n return {\n pageNumber: pageNumber,\n total: 0,\n hasNext: false,\n hasPrev: false,\n selectedSort: {value: 0, label: ''},\n filtersAreOn: false,\n filters: {},\n objects: [],\n }\n }\n\n reinitializeData = () => {\n if (this.withUrlUpdating) {\n // only update url, it will fetch after url changing\n this.updateUrl();\n } else {\n this.fetchInitialData();\n }\n }\n \n updateUrl() {\n // remember to have an access to history\n this.props.history.push(\n `${window.location.pathname}?strona=${this.state.pageNumber}${this.getUrlParams()}`);\n }\n\n getUrlParams() {\n // define url params as string; page number is already applied\n return ''\n }\n\n getFetchData() {\n return {\n page: this.state.pageNumber,\n limit: this.paginateBy,\n sort: this.state.selectedSort.value,\n };\n }\n\n checkHasNext(total, pageNumber) {\n return Math.ceil(total / this.paginateBy) > (pageNumber || this.state.pageNumber)\n }\n\n checkHasPrev() {\n return this.state.pageNumber > 1\n }\n\n // rendering\n\n renderBeforeContent() {\n return (\n <>\n <GridCustom className=\" search__options\">\n {this.renderSorters()}\n {this.renderFiltersButton()}\n </GridCustom>\n {this.state.filtersAreOn && this.renderFilters()}\n </>\n )\n }\n\n renderElements() {\n return (\n <>\n <Container>\n {this.renderContent()}\n </Container>\n {this.renderAdditionalAfterBaseContent()}\n </>\n )\n }\n\n renderSorters() {\n return (\n <FieldWithLabel\n label={this.sortingLabel}\n tag=\"label\"\n selectRef={React.createRef()}\n className=\"search__select-sorter\" >\n <Select\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n className=\"selectClassName\"\n options={this.sortingValues.map(value => ({value: value[0], label: value[1]}))}\n value={this.state.selectedSort}\n onChange={this.handleChangeSort}\n styles={customSelectStyles}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n />\n </FieldWithLabel>\n )\n }\n\n renderFiltersButton() {\n return (\n <ButtonStyled\n lite\n onClick={(e) => {\n this.setState({filtersAreOn: true});\n e.currentTarget.blur();\n }}>\n {this.filteringLabel} <span className=\"btn--counter btn--counter-primary\" title=\"Aktywne filtry\">\n <span className=\"sr-only\"> Liczba aktywnych filtrów </span>{this.renderFiltersCount()}\n </span>\n </ButtonStyled>\n )\n }\n\n renderFiltersCount() {\n return this.getFiltersCount(this.state.filters)\n }\n\n renderContent() {\n if (!this.state.objects.length) {\n return this.renderEmptyObjects()\n }\n return (\n <>\n {this.renderList()}\n <Pagination\n currentPage={this.state.pageNumber}\n hasNext={this.state.hasNext}\n hasPrev={this.state.hasPrev}\n handleChangePage={this.handleChangePage} />\n </>\n )\n }\n\n renderEmptyObjects() { return null }\n\n renderList() { return null }\n\n renderFilters() {\n return (\n <DialogCustom\n className=\"dialog-long-content\"\n dialogRef={c => this.dialogComponent = c}\n onClose={this.handleCloseFilters}\n >\n {this.renderFiltersComponent()}\n </DialogCustom>\n )\n }\n\n renderFiltersComponent() {\n return <this.filtersComponentClass\n filters={this.state.filters}\n closeFilters={this.handleCloseFilters}\n updateFilters={this.handleApplyFilters} />\n }\n\n renderAdditionalAfterBaseContent() {\n return null\n }\n}\n\n\nexport { BaseComponent, FormBaseComponent, PaginatedBaseComponent };\n","import React from 'react';\nimport { Typography } from '@rmwc/typography';\n\nimport { FieldWithLabel, GridCustom, Text } from '../../common';\n\n\nconst DanePodmiotu = (props) => {\n const danePodmiotu = props.danePodmiotu;\n const adres = danePodmiotu.adres;\n return (\n <>\n <Typography use=\"headline5\" className=\"long-text\">{danePodmiotu.nazwa}</Typography>\n <GridCustom flexM fullwidth className=\"company-meta\">\n <FieldWithLabel label=\"Rodzaj adresu\">\n <Text>{danePodmiotu.rodzajAdresu.label}</Text>\n </FieldWithLabel>\n <FieldWithLabel label={danePodmiotu.typNumeruIdentyfikacyjnego.label}>\n <Text>{danePodmiotu.numerIdentyfikacyjny}</Text>\n </FieldWithLabel>\n {danePodmiotu.rodzajAdresu.value === 'abroad' && (\n <FieldWithLabel label=\"Kraj\">\n <Text>{adres.kraj}</Text>\n </FieldWithLabel>\n )}\n <FieldWithLabel label=\"Miejscowość\">\n <Text>{adres.kodPocztowy} {adres.miejscowosc}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Adres\">\n <Text>{adres.ulica || ''} {adres.numerDomu || ''}</Text>\n </FieldWithLabel>\n </GridCustom>\n </>\n );\n}\n\n\nexport { DanePodmiotu };\n","import React, { Component } from 'react';\n\nimport {\n RODZAJ_ADRESU_CHOICES,\n TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES\n} from '../../../const';\nimport { FieldWithLabel, GridCustom, Select, Text, TextFieldCustom } from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { FormKraj, FormMiejscowosc } from '../common';\n\n\nclass FormDanePodmiotuFields extends Component {\n\n // handlers\n handlePasteNumerIdentyfikacyjny = (ev, maxLength) => {\n // stop data actually being pasted into input\n ev.stopPropagation();\n ev.preventDefault();\n\n // set pasted data via clipboard API\n const clipboardData = ev.clipboardData || window.clipboardData;\n const pastedData = clipboardData.getData('Text');\n this.props.changeNumerIdentyfikacyjny(pastedData, true, maxLength);\n }\n\n // rendering\n\n render() {\n const {changeAttribute, data, errors, formLocked } = this.props;\n const adres = data.adres;\n const poland = data.rodzajAdresu.value === 'poland';\n\n const isNazwaInvalid = (errors.nazwa || []).length > 0;\n const adresErrors = errors.adres || {};\n const isKodPocztowyInvalid = (adresErrors.kodPocztowy || []).length > 0;\n const isUlicaInvalid = (adresErrors.ulica || []).length > 0;\n const isNumerDomuInvalid = (adresErrors.numerDomu || []).length > 0;\n const isFormInvalid = isNazwaInvalid || adresErrors.length > 0 || isKodPocztowyInvalid || isUlicaInvalid || isNumerDomuInvalid;\n\n return (\n <>\n <GridCustom fullwidth flexM>\n <FieldWithLabel label=\"Nazwa\" tag=\"label\" labelFor=\"name_id\">\n <TextFieldCustom\n aria-describedby={isNazwaInvalid ? 'name_error' : null}\n aria-label={`Nazwa, maksymalna liczba znaków: 250. Wpisano ${data.nazwa.length} znaków.`}\n autoComplete=\"organization\"\n autoFocus\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"nazwa\"\n disabled={formLocked}\n id=\"name_id\"\n invalid={isNazwaInvalid}\n maxLength={250}\n value={data.nazwa}\n onChange={(ev) => changeAttribute('nazwa', ev.target.value)}\n onClear={(ev) => changeAttribute('nazwa', '')} />\n {isNazwaInvalid && <ul id=\"name_error\">{errors.nazwa.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"Rodzaj adresu\"\n tag=\"label\"\n selectRef={React.createRef()}>\n <Select\n screenReaderStatus={() => {return 'Wybierz opcjÄ™ z listy rozwijanej'}}\n className=\"select-custom\"\n isDisabled={formLocked}\n options={RODZAJ_ADRESU_CHOICES}\n value={data.rodzajAdresu}\n onChange={selectedOption => this.props.changeRodzajAdresu(selectedOption)}\n styles={customSelectStyles} />\n </FieldWithLabel>\n {this.renderIdentyfikator()}\n </GridCustom>\n {this.renderKraj()}\n {this.renderMiejscowosc()}\n <GridCustom fullwidth flexM>\n <FieldWithLabel label=\"Kod pocztowy\" tag=\"label\" labelFor=\"postal_code_id\">\n <TextFieldCustom\n aria-describedby={isKodPocztowyInvalid ? 'postal_code_error' : null}\n aria-label={`Kod pocztowy, maksymalna liczba znaków: ${poland ? 6 : 10}. Wpisano ${adres.kodPocztowy.length} znaków.`}\n autoComplete=\"postal-code\"\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"kod pocztowy\"\n disabled={formLocked}\n id=\"postal_code_id\"\n invalid={isKodPocztowyInvalid}\n maxLength={poland ? 6 : 10}\n value={adres.kodPocztowy}\n onChange={(ev) => changeAttribute('kodPocztowy', ev.target.value, true)}\n onClear={(ev) => changeAttribute('kodPocztowy', '', true)} />\n {isKodPocztowyInvalid && <ul id=\"postal_code_error\">{adresErrors.kodPocztowy.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n </FieldWithLabel>\n <FieldWithLabel label=\"Ulica\" tag=\"label\" labelFor=\"street_id\">\n <TextFieldCustom\n aria-describedby={isUlicaInvalid ? 'street_error' : null}\n aria-label={`Ulica, maksymalna liczba znaków: 255. Wpisano ${adres.ulica.length} znaków.`}\n autoComplete=\"address-line1\"\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"ulica\"\n disabled={formLocked}\n id=\"street_id\"\n invalid={isUlicaInvalid}\n maxLength={255}\n value={adres.ulica}\n onChange={(ev) => changeAttribute('ulica', ev.target.value, true)}\n onClear={(ev) => changeAttribute('ulica', '', true)} />\n {isUlicaInvalid && <ul id=\"street_error\">{adresErrors.ulica.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n </FieldWithLabel>\n <FieldWithLabel label=\"Numer\" tag=\"label\" labelFor=\"number_id\">\n <TextFieldCustom\n aria-describedby={isNumerDomuInvalid ? 'number_error' : null}\n aria-label={`Numer, maksymalna liczba znaków: 120. Wpisano ${adres.numerDomu.length} znaków.`}\n autoComplete=\"address-line1\"\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"numer\"\n disabled={formLocked}\n id=\"number_id\"\n invalid={isNumerDomuInvalid}\n maxLength={120}\n value={adres.numerDomu}\n onChange={(ev) => changeAttribute('numerDomu', ev.target.value, true)}\n onClear={(ev) => changeAttribute('numerDomu', '', true)} />\n {isNumerDomuInvalid && <ul id=\"number_error\">{adresErrors.numerDomu.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n </FieldWithLabel>\n </GridCustom>\n {isFormInvalid && <span role=\"alert\" className=\"sr-only\">Formularz zawiera bÅ‚Ä™dy.</span>}\n </>\n )\n }\n\n renderKraj() {\n if (this.props.data.rodzajAdresu.value === 'poland') {\n return null\n }\n const krajErrors = (this.props.errors.adres || {}).kraj || [];\n const isKrajInvalid = krajErrors.length > 0;\n return (\n <FormKraj\n error={isKrajInvalid ? krajErrors[0] : ''}\n formLocked={this.props.formLocked}\n invalid={isKrajInvalid}\n isClearable\n krajName={this.props.data.adres.kraj}\n changeKraj={(selectedOption) => this.props.changeAttribute(\n 'kraj', selectedOption === null ? null : selectedOption.label, true\n )} />\n )\n }\n\n renderMiejscowosc() {\n const miejscowoscErrors = (this.props.errors.adres || {}).miejscowosc || [];\n const isMiejscowoscInvalid = miejscowoscErrors.length > 0;\n const { data, formLocked } = this.props;\n const adres = data.adres;\n if (data.rodzajAdresu.value === 'poland') {\n const miejscowosc = adres.miejscowosc.length > 0 ? {\n wojewodztwo: adres.wojewodztwo,\n powiat: adres.powiat,\n gmina: adres.gmina,\n miejscowosc: adres.miejscowosc,\n } : null;\n return (\n <FormMiejscowosc\n error={isMiejscowoscInvalid ? miejscowoscErrors[0] : ''}\n formLocked={formLocked}\n invalid={isMiejscowoscInvalid}\n miejscowosc={miejscowosc}\n changeMiejscowosc={this.props.changeMiejscowosc} />\n )\n }\n return (\n <FieldWithLabel label=\"Miejscowość\" tag=\"label\" labelFor=\"city_id\">\n <TextFieldCustom\n aria-describedby={isMiejscowoscInvalid ? 'city_error' : null}\n aria-label={`Miejscowość, maksymalna liczba znaków: 100. Wpisano ${adres.miejscowosc.length} znaków.`}\n autoComplete=\"address-line2\"\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"miejscowość\"\n disabled={formLocked}\n id=\"city_id\"\n invalid={isMiejscowoscInvalid}\n maxLength={100}\n value={adres.miejscowosc}\n onChange={ev => this.props.changeAttribute('miejscowosc', ev.target.value, true)}\n onClear={ev => this.props.changeAttribute('miejscowosc', '', true)} />\n {isMiejscowoscInvalid && <ul id=\"city_error\">{miejscowoscErrors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n </FieldWithLabel>\n )\n }\n\n renderIdentyfikator() {\n const { data, formLocked } = this.props;\n const numerIdentyfikacyjnyErrors = this.props.errors.numerIdentyfikacyjny || [];\n const isNumerIdentyfikacyjnyInvalid = numerIdentyfikacyjnyErrors.length > 0;\n\n if (data.rodzajAdresu.value !== 'poland') {\n return (\n <FieldWithLabel label=\"Numer identyfikacyjny\" tag=\"label\" labelFor=\"identification_number_id\">\n <TextFieldCustom\n aria-describedby={`identification_number_info${isNumerIdentyfikacyjnyInvalid ? ' identification_number_error' : ''}`}\n aria-label={`Numer identyfikacyjny (dla podmiotów zagranicznych), maksymalna liczba znaków: 255. Wpisano ${data.numerIdentyfikacyjny.length} znaków.`}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"numer identyfikacyjny\"\n disabled={formLocked}\n id=\"identification_number_id\"\n invalid={isNumerIdentyfikacyjnyInvalid}\n maxLength={255}\n value={data.numerIdentyfikacyjny}\n onChange={ev => this.props.changeNumerIdentyfikacyjny(ev.target.value)}\n onClear={ev => this.props.changeNumerIdentyfikacyjny('')} />\n <Text info id=\"identification_number_info\">(dla podmiotów zagranicznych)</Text>\n {isNumerIdentyfikacyjnyInvalid && (\n <>\n <ul id=\"identification_number_error\">{numerIdentyfikacyjnyErrors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>\n <span role=\"alert\" className=\"sr-only\">Formularz zawiera bÅ‚Ä™dy!</span>\n </>\n )}\n </FieldWithLabel>\n )\n }\n const maxLength = data.typNumeruIdentyfikacyjnego.value === 'nip' ? 10 : 11;\n return (\n <>\n <FieldWithLabel\n label=\"NIP/PESEL\"\n tag=\"label\"\n selectRef={React.createRef()} >\n <Select\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n className=\"select-custom\"\n isDisabled={formLocked}\n options={TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES}\n value={this.props.data.typNumeruIdentyfikacyjnego}\n onChange={selectedOption => this.props.changeAttribute('typNumeruIdentyfikacyjnego', selectedOption)}\n styles={customSelectStyles}\n />\n </FieldWithLabel>\n <FieldWithLabel label={data.typNumeruIdentyfikacyjnego.label} tag=\"label\" labelFor=\"numerIdentyfikacyjny_id\">\n <TextFieldCustom\n aria-describedby={`identification_number_info${isNumerIdentyfikacyjnyInvalid ? ' identification_number_error' : ''}`}\n aria-label={`${data.typNumeruIdentyfikacyjnego.label} (dla podmiotów z Polski), maksymalna liczba znaków: ${maxLength}. Wpisz tylko cyfry. Wpisano ${data.numerIdentyfikacyjny.length} znaków.`}\n aria-valuemax={maxLength}\n characterCount\n className=\"filters__input\"\n clearFieldContext={data.typNumeruIdentyfikacyjnego.label}\n disabled={formLocked}\n id=\"numerIdentyfikacyjny_id\"\n invalid={isNumerIdentyfikacyjnyInvalid}\n maxLength={maxLength}\n value={data.numerIdentyfikacyjny}\n onChange={(ev) => this.props.changeNumerIdentyfikacyjny(ev.target.value, true)}\n onClear={(ev) => this.props.changeNumerIdentyfikacyjny('')}\n onKeyUp={(ev) => this.props.changeNumerIdentyfikacyjny(ev.target.value, true)}\n onPaste={(ev) => this.handlePasteNumerIdentyfikacyjny(ev, maxLength)} />\n <Text info id=\"identification_number_info\">(dla podmiotów z Polski)</Text>\n {isNumerIdentyfikacyjnyInvalid && (\n <>\n <ul id=\"identification_number_error\">{numerIdentyfikacyjnyErrors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>\n <span role=\"alert\" className=\"sr-only\">Formularz zawiera bÅ‚Ä™dy!</span>\n </>\n )}\n </FieldWithLabel>\n </>\n )\n }\n}\n\n\nexport { FormDanePodmiotuFields };\n","const foreignCountries = {\n 1: 'Afganistan',\n 2: 'Albania',\n 3: 'Algieria',\n 4: 'Andora',\n 5: 'Angola',\n 6: 'Anguilla',\n 7: 'Antarktyda',\n 8: 'Antigua i Barbuda',\n 9: 'Arabia Saudyjska',\n 10: 'Argentyna',\n 11: 'Armenia',\n 12: 'Aruba',\n 13: 'Australia',\n 14: 'Austria',\n 15: 'Azerbejdżan',\n 16: 'Bahamy',\n 17: 'Bahrajn',\n 18: 'Bangladesz',\n 19: 'Barbados',\n 20: 'Belgia',\n 21: 'Belize',\n 22: 'Benin',\n 23: 'Bermudy',\n 24: 'Bhutan',\n 25: 'BiaÅ‚oruÅ›',\n 26: 'Boliwia',\n 27: 'Bonaire, Sint Eustatius i Saba',\n 28: 'Botswana',\n 29: 'BoÅ›nia i Hercegowina',\n 30: 'Brazylia',\n 31: 'Brunei Darussalam',\n 32: 'Brytyjskie Terytorium Oceanu Indyjskiego',\n 33: 'Brytyjskie Wyspy Dziewicze',\n 34: 'BuÅ‚garia',\n 35: 'Burkina Faso',\n 36: 'Burundi',\n 37: 'Ceuta',\n 38: 'Chile',\n 39: 'Chiny',\n 40: 'Chorwacja',\n 41: 'Curaçao',\n 42: 'Cypr',\n 43: 'Czad',\n 44: 'Czarnogóra',\n 45: 'Dalekie Wyspy Mniejsze Stanów Zjednoczonych',\n 46: 'Dania',\n 47: 'Demokratyczna Republika Kongo',\n 48: 'Dominika',\n 49: 'Dominikana',\n 50: 'Dżibuti',\n 51: 'Egipt',\n 52: 'Ekwador',\n 53: 'Erytrea',\n 54: 'Estonia',\n 55: 'Etiopia',\n 56: 'Falklandy',\n 57: 'Fidżi',\n 58: 'Filipiny',\n 59: 'Finlandia',\n 60: 'Francja',\n 61: 'Francuskie Terytorium PoÅ‚udniowe',\n 62: 'Gabon',\n 63: 'Gambia',\n 64: 'Ghana',\n 65: 'Gibraltar',\n 66: 'Grecja',\n 67: 'Grenada',\n 68: 'Grenlandia',\n 69: 'Gruzja',\n 70: 'Guam',\n 71: 'Gujana',\n 72: 'Gujana Francuska',\n 73: 'Gwadelupa',\n 74: 'Gwatemala',\n 75: 'Gwinea',\n 76: 'Gwinea Równikowa',\n 77: 'Gwinea-Bissau',\n 78: 'Haiti',\n 79: 'Hiszpania',\n 80: 'Holandia',\n 81: 'Honduras',\n 82: 'Hongkong',\n 83: 'Indie',\n 84: 'Indonezja',\n 85: 'Irak',\n 86: 'Iran',\n 87: 'Irlandia',\n 88: 'Islandia',\n 89: 'Izrael',\n 90: 'Jamajka',\n 91: 'Japonia',\n 92: 'Jemen',\n 93: 'Jordania',\n 94: 'Kajmany',\n 95: 'Kambodża',\n 96: 'Kamerun',\n 97: 'Kanada',\n 98: 'Katar',\n 99: 'Kazachstan',\n 100: 'Kenia',\n 101: 'Kirgistan',\n 102: 'Kiribati',\n 103: 'Kolumbia',\n 104: 'Komory',\n 105: 'Kongo',\n 106: 'KoreaÅ„ska Republika Ludowo-Demokratyczna',\n 107: 'Kosowo',\n 108: 'Kostaryka',\n 109: 'Kuba',\n 110: 'Kuwejt',\n 111: 'Laos',\n 112: 'Lesotho',\n 113: 'Liban',\n 114: 'Liberia',\n 115: 'Libia',\n 116: 'Liechtenstein',\n 117: 'Litwa',\n 118: 'Luksemburg',\n 119: 'Åotwa',\n 120: 'Macedonia',\n 121: 'Madagaskar',\n 122: 'Majotta',\n 123: 'Makau',\n 124: 'Malawi',\n 125: 'Malediwy',\n 126: 'Malezja',\n 127: 'Mali',\n 128: 'Malta',\n 129: 'Mariany Północne',\n 130: 'Maroko',\n 131: 'Martynika',\n 132: 'Mauretania',\n 133: 'Mauritius',\n 134: 'Meksyk',\n 135: 'Melilla',\n 136: 'Mikronezja',\n 137: 'MoÅ‚dawia',\n 138: 'Monako',\n 139: 'Mongolia',\n 140: 'Montserrat',\n 141: 'Mozambik',\n 142: 'Myanmar (Burma)',\n 143: 'Namibia',\n 144: 'Nauru',\n 145: 'Nepal',\n 146: 'Niemcy',\n 147: 'Niger',\n 148: 'Nigeria',\n 149: 'Nikaragua',\n 150: 'Niue',\n 151: 'Norfolk',\n 152: 'Norwegia',\n 153: 'Nowa Kaledonia',\n 154: 'Nowa Zelandia',\n 155: 'Oman',\n 156: 'Pakistan',\n 157: 'Palau',\n 158: 'Palestyna',\n 159: 'Panama',\n 160: 'Papua Nowa Gwinea',\n 161: 'Paragwaj',\n 162: 'Peru',\n 163: 'Pitcairn',\n 164: 'Polinezja Francuska',\n 165: 'PoÅ‚udniowa Georgia i PoÅ‚udniowe Wyspy Sandwich',\n 166: 'Portoryko',\n 167: 'Portugalia',\n 168: 'Rep.PoÅ‚ud.Afryki',\n 169: 'Rep.ÅšrodkowoafryaÅ„ska',\n 170: 'Republika Czeska',\n 171: 'Republika Korei',\n 172: 'Reunion',\n 173: 'Rosja',\n 174: 'Rumunia',\n 175: 'Rwanda',\n 176: 'Sahara Zachodnia',\n 177: 'Saint Barthelemy',\n 178: 'Saint Kitts i Nevis',\n 179: 'Saint Lucia',\n 180: 'Saint Vincent i Grenadyny',\n 181: 'Saint-Pierre i Miquelon',\n 182: 'Salwador',\n 183: 'Samoa',\n 184: 'Samoa AmerykaÅ„skie',\n 185: 'San Marino',\n 186: 'Senegal',\n 187: 'Serbia',\n 188: 'Seszele',\n 189: 'Sierra Leone',\n 190: 'Singapur',\n 191: 'SÅ‚owacja',\n 192: 'SÅ‚owenia',\n 193: 'Somalia',\n 194: 'Sri Lanka',\n 195: 'Stany Zjednoczone Ameryki',\n 196: 'Suazi',\n 197: 'Sudan',\n 198: 'Sudan PoÅ‚udniowy',\n 199: 'Surinam',\n 200: 'Svalbard i Jan Mayen',\n 201: 'Syria',\n 202: 'Szwajcaria',\n 203: 'Szwecja',\n 204: 'Tadżykistan',\n 205: 'Tajlandia',\n 206: 'Tajwan',\n 207: 'Tanzania',\n 208: 'Togo',\n 209: 'Tokelau',\n 210: 'Tonga',\n 211: 'Trynidad i Tobago',\n 212: 'Tunezja',\n 213: 'Turcja',\n 214: 'Turkmenistan',\n 215: 'Tuvalu',\n 216: 'Uganda',\n 217: 'Ukraina',\n 218: 'Urugwaj',\n 219: 'Uzbekistan',\n 220: 'Vanuatu',\n 221: 'Wallis i Futuna',\n 222: 'Watykan',\n 223: 'Wenezuela',\n 224: 'WÄ™gry',\n 225: 'Wielka Brytania',\n 226: 'Wietnam',\n 227: 'WÅ‚ochy',\n 228: 'Wschodni Timor',\n 229: 'Wybrzeże KoÅ›ci SÅ‚oniowej',\n 230: 'Wyspa Bouveta',\n 231: 'Wyspa Bożego Narodzenia',\n 232: 'Wyspa Sint Maarten',\n 233: 'Wyspa ÅšwiÄ™tej Heleny',\n 234: 'Wyspy Cooka',\n 235: 'Wyspy Dziewicze Stanów Zjednoczonych',\n 236: 'Wyspy Heard i McDonald',\n 237: 'Wyspy Kokosowe (Keelinga)',\n 238: 'Wyspy Marshalla',\n 239: 'Wyspy Owcze',\n 240: 'Wyspy Salomona',\n 241: 'Wyspy Turks i Caicos',\n 242: 'Wyspy ÅšwiÄ™tego Tomasza i Książęca',\n 243: 'Zambia',\n 244: 'Zielony PrzylÄ…dek',\n 245: 'Zimbabwe',\n 246: 'Zjednoczone Emiraty Arabskie'}\n\n\nexport { foreignCountries }\n","import React, { Component } from 'react';\n\nimport { foreignCountries } from '../../../foreignCountries';\nimport { FieldWithLabel, Select, Text } from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\n\n\nconst EMPTY_VALUE = {\n value: 0,\n label: 'Zacznij wpisywać...',\n};\nconst SELECT_CLASSNAME = 'select-custom';\nconst SELECT_INVALID_CLASSNAME = 'select-custom select-custom--invalid';\n\n\nclass FormKraj extends Component {\n\n constructor(props) {\n super(props);\n let kraj = null;\n if (props.krajName) {\n kraj = {\n value: props.krajName,\n label: props.krajName,\n }\n }\n this.state = {kraj};\n\n this.handleChangeKraj = this.handleChangeKraj.bind(this);\n }\n\n // handlers\n\n handleChangeKraj(selectedOption) {\n this.setState(\n {kraj: selectedOption},\n () => this.props.changeKraj(selectedOption)\n );\n }\n\n // rendering\n\n render() {\n const { kraj } = this.state;\n const { error, formLocked, invalid, isClearable } = this.props;\n\n let options = Object.values(foreignCountries).map(\n kraj_ => ({value: kraj_, label: kraj_}));\n let value;\n if (isClearable) {\n value = kraj;\n } else {\n options = [EMPTY_VALUE, ...options];\n value = {\n value: kraj ? kraj.value : EMPTY_VALUE.value,\n label: kraj ? kraj.label : EMPTY_VALUE.label\n };\n }\n\n return (\n <FieldWithLabel\n label=\"Kraj\"\n labelFor=\"country_id\"\n selectRef={React.createRef()}\n tag=\"label\"\n >\n <Select\n aria-label={`Kraj ${invalid && error}`}\n aria-required=\"true\"\n className={invalid ? SELECT_INVALID_CLASSNAME : SELECT_CLASSNAME}\n isClearable={isClearable}\n isDisabled={formLocked}\n id=\"country_id\"\n isSearchable={true}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n options={options}\n placeholder={isClearable ? EMPTY_VALUE.label : ''}\n required={true}\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n styles={customSelectStyles}\n value={value}\n onChange={selectedOption => this.handleChangeKraj(selectedOption)}\n />\n {invalid && <Text error>{error}</Text>}\n </FieldWithLabel>\n )\n }\n}\n\n\nexport { FormKraj };\n","import React, { Component } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport { getSerializedObject } from '../../../serializers';\nimport { FieldWithLabel, Select, Text } from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\n\nconst EMPTY_VALUE = {\n value: 0,\n label: 'Wpisz co najmniej 3 litery...',\n}\nconst SELECT_CLASSNAME = 'select-custom';\nconst SELECT_INVALID_CLASSNAME = 'select-custom select-custom--invalid';\n\n\nclass FormMiejscowosc extends Component {\n\n constructor(props) {\n super(props);\n this.state = Object.assign({\n miejscowosc: props.miejscowosc || null,\n selectMiejscowoscMenuIsOpen: false,\n inputOptions: [],\n moreOptionsAvailable: false,\n fetchError: '',\n });\n\n this.requestId = 0;\n\n this.xhrFetch = null;\n this.xhrTimeout = null;\n\n this.handleChangeInputMiejscowosc = this.handleChangeInputMiejscowosc.bind(this);\n this.handleFetchSuccess = this.handleFetchSuccess.bind(this);\n this.handleFetchError = this.handleFetchError.bind(this);\n this.handleFetchIncorrectStatus = this.handleFetchIncorrectStatus.bind(this);\n this.handleBlurMiejscowosc = this.handleBlurMiejscowosc.bind(this);\n this.handleChangeMiejscowosc = this.handleChangeMiejscowosc.bind(this);\n }\n\n // basic functions\n\n componentWillUnmount() {\n // abort api request if exist\n if (this.xhrFetch !== null) {\n this.xhrFetch.abort();\n }\n }\n\n // handlers\n\n handleChangeInputMiejscowosc(inputValue) {\n if (this.xhrTimeout !== null) {\n clearTimeout(this.xhrTimeout);\n this.xhrTimeout = null;\n }\n if (inputValue.length < 3) {\n this.setState({\n selectMiejscowoscMenuIsOpen: false,\n inputOptions: [],\n moreOptionsAvailable: false,\n fetchError: ''\n });\n } else {\n this.requestId++;\n this.xhrTimeout = setTimeout(() => {\n this.setState(\n {inputOptions: [], moreOptionsAvailable: false, fetchError: ''},\n () => {\n // get data from server\n this.xhrFetch = fetchApi(\n '/api/dictionaries/teryt',\n 'GET',\n {},\n {locality_search_key: inputValue, request_id: this.requestId},\n this.handleFetchSuccess,\n this.handleFetchError,\n this.handleFetchIncorrectStatus,\n );\n }\n );\n }, 500);\n };\n }\n\n handleFetchSuccess(data) {\n this.xhrFetch = null;\n if (parseInt(data.request_id) < this.requestId) {\n // do nothing, there is another fetch on the fly\n return\n }\n this.setState({\n selectMiejscowoscMenuIsOpen: true,\n inputOptions: (getSerializedObject(data).teryty || []).sort(this.sortMiejscowosc).map(\n m => ({value: m, label: `${m.miejscowosc} (woj. ${m.wojewodztwo}, pow. ${m.powiat}, gm. ${m.gmina})`})),\n moreOptionsAvailable: data.meta.last_page > 1,\n });\n }\n\n handleFetchError(data) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n fetchError: `Nie udaÅ‚o siÄ™ pobrać miejscowoÅ›ci. ${data.message}`,\n });\n }\n\n handleFetchIncorrectStatus(status) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n fetchError: `Nie udaÅ‚o siÄ™ pobrać miejscowoÅ›ci. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`,\n });\n }\n\n handleBlurMiejscowosc(ev) {\n this.setState({selectMiejscowoscMenuIsOpen: false});\n }\n\n handleChangeMiejscowosc(selectedOption) {\n const value = selectedOption === null ? null : selectedOption.value;\n this.setState(\n {\n selectMiejscowoscMenuIsOpen: false,\n miejscowosc: value,\n },\n () => this.props.changeMiejscowosc(value)\n );\n }\n\n // rendering\n\n render() {\n const { error, formLocked, isClearable, invalid } = this.props;\n const {\n fetchError,\n inputOptions,\n miejscowosc,\n moreOptionsAvailable,\n selectMiejscowoscMenuIsOpen,\n } = this.state;\n\n const moreOptionsAvailableText = 'Istnieje wiÄ™cej pasujÄ…cych wyników. JeÅ›li na liÅ›cie nie ma szukanej miejscowoÅ›ci, wpisz dodatkowe litery.'\n\n return (\n <FieldWithLabel\n label=\"Miejscowość\"\n tag=\"label\"\n selectRef={React.createRef()}\n >\n {moreOptionsAvailable && <Text info>{moreOptionsAvailableText}</Text>}\n <Select\n aria-label={`Miejscowość, wpisz co najmniej 3 litery ${moreOptionsAvailable ? moreOptionsAvailableText : ''} ${invalid ? error : ''} ${fetchError.length > 0 ? fetchError : ''}`}\n className={invalid ? SELECT_INVALID_CLASSNAME : SELECT_CLASSNAME}\n components={{\n DropdownIndicator: () => null,\n IndicatorSeparator: () => null\n }}\n isClearable={isClearable}\n isDisabled={formLocked}\n menuIsOpen={selectMiejscowoscMenuIsOpen}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n options={inputOptions}\n placeholder={isClearable ? EMPTY_VALUE.label : ''}\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n styles={{\n ...customSelectStyles,\n menuPortal: (provided, state) => ({\n ...provided,\n maxHeight: \"160px\",\n }),\n menuList: (provided, state) => ({\n ...provided,\n maxHeight: \"160px\",\n }),\n }} \n value={miejscowosc\n ? {\n value: miejscowosc,\n label: `${miejscowosc.miejscowosc} (woj. ${miejscowosc.wojewodztwo}, pow. ${miejscowosc.powiat}, gm. ${miejscowosc.gmina})`\n } : isClearable ? null : EMPTY_VALUE}\n onBlur={this.handleBlurMiejscowosc}\n onChange={this.handleChangeMiejscowosc}\n onInputChange={this.handleChangeInputMiejscowosc}\n />\n {invalid && <Text error>{error}</Text>}\n {fetchError.length > 0 && <Text error>{fetchError}</Text>}\n </FieldWithLabel>\n )\n }\n}\n\n\nexport { FormMiejscowosc };\n","import React, { Component } from 'react';\nimport { Radio } from '@rmwc/radio';\n\nimport { fetchApi } from '../../../fetch';\nimport {\n hasPerspectiveInstitutions,\n hasPerspectiveRegions,\n hasSubactivities,\n sortProgrammes\n} from '../../../helpers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n ErrorList,\n FieldWithLabel,\n GridCustom,\n Select,\n Text,\n TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\n\n\nconst SELECT_CLASS_NAME = 'select-custom';\nconst SELECT_INVALID_CLASS_NAME = 'select-custom select-custom--invalid';\nexport const INSTITUTION_NUMBER_DEFAULT_DICT = {\n value: '',\n code: 'AA.00',\n label: 'AA.00',\n};\n\n\nexport class ProjectNumberSelectsWithPerspectives extends Component {\n\n constructor(props) {\n super(props);\n // please, don't change nulls into empty lists, otherwise you destroy\n // a mechanism for filling selects\n this.state = {\n programmes: null,\n priorities: null,\n activities: null,\n regions: null,\n institutions: null,\n activityFetchError: '',\n priorityFetchError: '',\n programmeFetchError: '',\n regionFetchError: '',\n institutionFetchError: '',\n }\n this.xhrFetch = null;\n }\n\n componentDidMount() {\n if (!this.props.perspectives.length) { return }\n\n if (this.props.perspectivesAsSelect) {\n const { perspective } = this.props;\n if (!(perspective && perspective.value)) { return }\n\n if (!perspective.label) {\n this.setDefaultSelectValueLabelBasedOnId(\n this.props.perspectives, perspective, 'perspective',\n this.props.onChangePerspective\n );\n return\n }\n }\n this.fetchProgrammes();\n }\n\n componentDidUpdate(prevProps, prevState) {\n\n if (this.state.programmeFetchError.length ||\n this.state.activityFetchError.length ||\n this.state.priorityFetchError.length ||\n this.xhrFetch !== null) { return }\n\n // set perspective, programme, priority, activity, institution, region\n if (!this.props.perspectives.length) { return }\n\n const { perspective } = this.props;\n if (!(perspective && perspective.value)) { return }\n\n if (perspective !== prevProps.perspective) {\n this.fetchProgrammes();\n return\n }\n\n const { programme } = this.props;\n if (!this.state.programmes || !(programme && programme.value)) {\n return\n }\n\n if (!programme.label) {\n this.setDefaultSelectValueLabelBasedOnId(\n this.state.programmes, programme, 'programme',\n this.props.onChangeProgramme\n );\n } else if (\n programme !== prevProps.programme ||\n (programme && !this.state.priorities && !prevState.priorities)\n ) {\n this.fetchPriorities();\n } else {\n const { priority } = this.props;\n if (\n !this.state.priorities ||\n !(priority && priority.value)\n ) { return }\n\n if (!priority.label) {\n this.setDefaultSelectValueLabelBasedOnId(\n this.state.priorities, priority, 'priority',\n this.props.onChangePriority\n );\n } else if (\n priority !== prevProps.priority ||\n (priority && !this.state.activities && !prevState.activities)\n ) {\n this.fetchActivities();\n } else {\n const { activity } = this.props;\n if (\n !this.state.activities ||\n !(activity && activity.value)\n ) { return }\n\n const hasRegions = hasPerspectiveRegions(perspective);\n const hasInstitutions = hasPerspectiveInstitutions(perspective);\n\n if (!activity.label) {\n this.setDefaultSelectValueLabelBasedOnId(\n this.state.activities, activity, 'activity',\n this.props.onChangeActivity\n );\n } else if (\n activity !== prevProps.activity ||\n (hasRegions && !this.state.regions && !prevState.regions) ||\n (hasInstitutions && !this.state.institutions && !prevState.institutions)\n ) {\n if (hasRegions) {\n this.fetchRegions();\n } else if (hasInstitutions) {\n this.fetchInstitutions();\n }\n } else {\n if (hasRegions) {\n const {region} = this.props;\n if (\n !this.state.regions ||\n !(region && region.value)\n ) {\n return\n }\n\n if (!region.label) {\n this.setDefaultSelectValueLabelBasedOnId(\n this.state.regions, region, 'region',\n this.props.onChangeActivity\n );\n }\n } else if (hasInstitutions) {\n const {institution} = this.props;\n if (\n !this.state.institutions ||\n !(institution && institution.value)\n ) {\n return\n }\n\n if (!institution.label) {\n this.setDefaultSelectValueLabelBasedOnId(\n this.state.institutions, institution,\n 'institution', this.props.onChangeActivity\n );\n }\n }\n }\n }\n }\n }\n\n componentWillUnmount() {\n if (this.xhrFetch !== null) {\n this.xhrFetch.abort();\n }\n }\n\n // handlers\n\n handleChangePerspectiveSelect = (selectedOption) => {\n selectedOption = selectedOption || null;\n // if user clicked the same option\n if (this.props.perspective === selectedOption) { return }\n this.setState(\n {\n programmes: null,\n priorities: null,\n activities: null,\n regions: null,\n institutions: null,\n priorityFetchError: '',\n activityFetchError: '',\n regionFetchError: '',\n institutionFetchError: '',\n },\n () => this.props.onChangePerspective(\n {\n perspective: selectedOption,\n programme: null,\n priority: null,\n activity: null,\n region: null,\n institution: null,\n }\n )\n );\n }\n\n handleChangePerspective = (ev) => {\n const value = ev.currentTarget.value;\n this.setState(\n {\n programmes: null,\n priorities: null,\n activities: null,\n regions: null,\n institutions: null,\n priorityFetchError: '',\n activityFetchError: '',\n programmeFetchError: '',\n regionFetchError: '',\n institutionFetchError: '',\n },\n () => {\n this.props.onChangePerspective(\n {\n perspective: this.props.perspectives.filter(\n perspective_ =>\n perspective_.value.toString() === value.toString()\n )[0],\n programme: null,\n priority: null,\n activity: null,\n ...(this.props.withInstitutionNumber\n ? {institutionNumber: {...INSTITUTION_NUMBER_DEFAULT_DICT}}\n : {}\n ),\n region: null,\n institution: null,\n }\n )\n }\n );\n };\n\n handleChangeProgramme = (selectedOption) => {\n selectedOption = selectedOption || null;\n // if user clicked the same option\n if (this.props.programme === selectedOption) { return }\n this.setState(\n {\n priorities: null,\n activities: null,\n regions: null,\n institutions: null,\n priorityFetchError: '',\n activityFetchError: '',\n regionFetchError: '',\n institutionFetchError: '',\n },\n () => this.props.onChangeProgramme(\n {\n programme: selectedOption,\n priority: null,\n activity: null,\n region: null,\n institution: null,\n }\n )\n );\n };\n\n handleChangePriority = (selectedOption) => {\n selectedOption = selectedOption || null;\n // if user clicked the same option\n if (this.props.priority === selectedOption) { return }\n this.setState(\n {\n activities: null,\n regions: null,\n institutions: null,\n activityFetchError: '',\n regionFetchError: '',\n institutionFetchError: '',\n },\n () => this.props.onChangePriority(\n {\n priority: selectedOption,\n activity: null,\n region: null,\n institution: null,\n })\n );\n };\n\n handleChangeActivity = (selectedOption) => {\n selectedOption = selectedOption || null;\n // if user clicked the same option\n if (this.props.activity === selectedOption) { return }\n this.setState(\n {\n regions: null,\n institutions: null,\n regionFetchError: '',\n institutionFetchError: '',\n },\n () => this.props.onChangeActivity(\n {\n activity: selectedOption,\n region: null,\n institution: null,\n })\n );\n };\n\n handleChangInstitutionNumber = (value) => {\n this.props.onChangeInstitutionNumber(value);\n }\n\n handleChangeRegion = (selectedOption) => {\n selectedOption = selectedOption || null;\n this.props.onChangeRegion({region: selectedOption});\n }\n\n handleChangeInstitution = (selectedOption) => {\n selectedOption = selectedOption || null;\n this.props.onChangeInstitution({institution: selectedOption});\n }\n\n handleFetchObjectsSuccess = (data, objectListName) => {\n this.xhrFetch = null;\n this.setState({\n [objectListName]: data[objectListName].map(p => ({\n value: p.id,\n code: p.code,\n label: `${p.code} - ${p.name}`\n }))\n });\n }\n\n handleFetchObjectsError = (data, errorObjectLabel, errorName) => {\n this.xhrFetch = null;\n this.setState({\n [errorName]: `Nie udaÅ‚o siÄ™ pobrać ${errorObjectLabel}.`,\n });\n }\n\n handleFetchObjectsIncorrectStatus = (status, errorObjectLabel, errorName) => {\n this.xhrFetch = null;\n this.setState({\n [errorName]: `Nie udaÅ‚o siÄ™ pobrać ${errorObjectLabel}. ` +\n `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n });\n }\n\n // helpers\n\n setDefaultSelectValueLabelBasedOnId(\n objectsList, object, objectName, changeObjectHandler\n ) {\n for (let obj of objectsList) {\n if (obj.value === object.value) {\n changeObjectHandler({[objectName]: obj});\n return\n }\n }\n changeObjectHandler({[objectName]: null});\n }\n\n fetchObjects({\n apiUrlName,\n errorName,\n errorObjectLabel,\n objectListName,\n parentObjectName\n }) {\n const parent = this.props[parentObjectName];\n if (!parent || !(parent.value || parent.id)) { return }\n this.xhrFetch = fetchApi(\n API_URLS[apiUrlName].getUrl(parent.value || parent.id),\n 'GET',\n {},\n {mode: this.props.mode || 'default'},\n (data) => this.handleFetchObjectsSuccess(data, objectListName),\n (data) => this.handleFetchObjectsError(\n data, errorObjectLabel, errorName),\n (status) => this.handleFetchObjectsIncorrectStatus(\n status, errorObjectLabel, errorName),\n );\n }\n\n fetchProgrammes() {\n this.fetchObjects({\n apiUrlName: 'programmes',\n errorName: 'programmeFetchError',\n errorObjectLabel: 'programów operacyjnych',\n objectListName: 'programmes',\n parentObjectName: 'perspective',\n });\n }\n\n fetchPriorities() {\n this.fetchObjects({\n apiUrlName: 'priorities',\n errorName: 'priorityFetchError',\n errorObjectLabel: 'osi priorytetowych',\n objectListName: 'priorities',\n parentObjectName: 'programme',\n });\n }\n\n fetchActivities() {\n this.fetchObjects({\n apiUrlName: 'activities',\n errorName: 'activityFetchError',\n errorObjectLabel: hasSubactivities(this.props.perspective)\n ? 'dziaÅ‚aÅ„ i poddziaÅ‚aÅ„' : 'dziaÅ‚aÅ„',\n objectListName: 'activities',\n parentObjectName: 'priority',\n });\n }\n\n fetchRegions() {\n this.fetchObjects({\n apiUrlName: 'regions',\n errorName: 'regionFetchError',\n errorObjectLabel: 'regionów',\n objectListName: 'regions',\n parentObjectName: 'activity',\n });\n }\n\n fetchInstitutions() {\n this.fetchObjects({\n apiUrlName: 'institutions',\n errorName: 'institutionFetchError',\n errorObjectLabel: 'instytucji',\n objectListName: 'institutions',\n parentObjectName: 'activity',\n });\n }\n\n // rendering\n\n render() {\n const {\n activity,\n activityErrors,\n disabled,\n isClearable,\n institution,\n institutionErrors,\n institutionNumber,\n institutionNumberErrors,\n perspective,\n perspectiveErrors = [],\n perspectives,\n perspectivesAsSelect,\n priority,\n priorityErrors,\n programme,\n programmeErrors,\n region,\n regionErrors,\n withInstitutionNumber\n } = this.props;\n const {\n activityFetchError,\n institutionFetchError,\n priorityFetchError,\n programmeFetchError,\n regionFetchError\n } = this.state;\n\n const hasRegions = hasPerspectiveRegions(perspective);\n const hasInstitutions = hasPerspectiveInstitutions(perspective);\n\n const isPerspectiveInvalid = perspectivesAsSelect &&\n perspectiveErrors.length > 0;\n const isProgrammeInvalid = programmeErrors.length > 0;\n const isPriorityInvalid = priorityErrors.length > 0;\n const isActivityInvalid = activityErrors.length > 0;\n let isInstitutionNumberInvalid = false;\n if (withInstitutionNumber) {\n isInstitutionNumberInvalid =\n hasRegions && institutionNumberErrors.length > 0;\n }\n const isRegionInvalid = hasRegions && regionErrors.length > 0;\n const isInstitutionInvalid = hasInstitutions && institutionErrors.length > 0;\n const formInvalid = isPerspectiveInvalid || isProgrammeInvalid ||\n isPriorityInvalid || isActivityInvalid ||\n isInstitutionNumberInvalid || isRegionInvalid ||\n isInstitutionInvalid;\n\n const activityLabel = hasSubactivities(perspective)\n ? 'DziaÅ‚anie i poddziaÅ‚anie' : 'DziaÅ‚anie';\n\n return (\n <>\n <GridCustom fullwidth>\n {perspectivesAsSelect\n ? (\n <FieldWithLabel\n label=\"Perspektywa finansowa\"\n tag=\"label\"\n selectRef={React.createRef()}\n >\n <Select\n className={SELECT_CLASS_NAME}\n isClearable={isClearable}\n isDisabled={disabled}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n options={perspectives}\n placeholder=\"Zacznij wpisywać...\"\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n styles={customSelectStyles}\n value={perspective}\n onChange={this.handleChangePerspectiveSelect} />\n {isPerspectiveInvalid &&\n <ErrorList\n containerId=\"perspective\"\n errorList={perspectiveErrors}\n />\n }\n </FieldWithLabel>\n )\n : (\n <fieldset>\n <Text tag=\"legend\" className=\"label\">Perspektywa finansowa</Text>\n {perspectives.map(perspective_ => (\n <Radio\n checked={perspective.value.toString() === perspective_.value.toString()}\n disabled={disabled}\n key={perspective_.value}\n label={perspective_.label}\n name=\"typRadioGroup\"\n value={perspective_.value}\n onChange={this.handleChangePerspective}\n />\n ))}\n </fieldset>\n )\n }\n </GridCustom>\n <GridCustom>\n <FieldWithLabel\n label=\"Program Operacyjny\"\n tag=\"label\"\n selectRef={React.createRef()}\n >\n <Select\n aria-describedby={programmeFetchError.length > 0 ? 'programmeFetch_error' : null}\n className={isProgrammeInvalid ? SELECT_INVALID_CLASS_NAME : SELECT_CLASS_NAME}\n isClearable={isClearable}\n isDisabled={disabled || (perspectivesAsSelect && !perspective)}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n options={(this.state.programmes || []).sort(sortProgrammes)}\n placeholder=\"Zacznij wpisywać...\"\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n styles={customSelectStyles}\n value={programme}\n onChange={this.handleChangeProgramme} />\n {isProgrammeInvalid &&\n <ErrorList\n containerId=\"programOperacyjny_error\"\n errorList={programmeErrors}\n />\n }\n {programmeFetchError.length > 0 && <Text error id=\"programmeFetch_error\">{programmeFetchError}</Text>}\n </FieldWithLabel>\n <FieldWithLabel\n label=\"OÅ› priorytetowa\"\n aria-label={programme !== null ? null : 'OÅ› priorytetowa, pole nieaktywne. Aby wybrać oÅ› priorytetowÄ…, musisz wybrać Program operacyjny.'}\n tag=\"label\"\n selectRef={React.createRef()}\n tabIndex={programme !== null ? null : '0'}>\n <Select\n aria-describedby={priorityFetchError.length > 0 ? 'osPriorytetowaFetch_error' : null}\n className={isPriorityInvalid ? SELECT_INVALID_CLASS_NAME : SELECT_CLASS_NAME}\n isClearable={isClearable}\n isDisabled={disabled || programme === null}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n options={programme !== null ? (this.state.priorities || []) : null}\n placeholder=\"Zacznij wpisywać...\"\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n styles={customSelectStyles}\n value={priority}\n onChange={this.handleChangePriority} />\n {isPriorityInvalid &&\n <ErrorList\n containerId=\"osPriorytetowa_error\"\n errorList={priorityErrors}\n />\n }\n {priorityFetchError.length > 0 && <Text error id=\"osPriorytetowaFetch_error\">{priorityFetchError}</Text>}\n </FieldWithLabel>\n </GridCustom>\n <GridCustom>\n <FieldWithLabel\n label={activityLabel}\n aria-label={priority !== null ? null : `${activityLabel}, pole nieaktywne. Aby wybrać dziaÅ‚anie i poddziaÅ‚anie, musisz wybrać oÅ› priorytetowÄ….`}\n tag=\"label\"\n selectRef={React.createRef()}\n tabIndex={priority !== null ? null : '0'}\n >\n <Select\n aria-describedby={activityFetchError.length > 0 ? 'dzialanie_fetch_error' : null}\n className={isActivityInvalid ? SELECT_INVALID_CLASS_NAME : SELECT_CLASS_NAME}\n isClearable={isClearable}\n isDisabled={disabled || priority === null}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n options={priority !== null ? (this.state.activities || []) : null}\n placeholder=\"Zacznij wpisywać...\"\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n styles={customSelectStyles}\n value={activity}\n onChange={this.handleChangeActivity} />\n {isActivityInvalid &&\n <ErrorList\n containerId=\"dzialanie_error\"\n errorList={activityErrors}\n />\n }\n {activityFetchError.length > 0 && <Text error id=\"dzialanie_fetch_error\">{activityFetchError}</Text>}\n </FieldWithLabel>\n </GridCustom>\n {hasRegions && (\n <>\n {withInstitutionNumber && (\n <GridCustom>\n <FieldWithLabel\n label=\"Numer instytucji\"\n labelFor=\"numer_instytucji_id\"\n tag=\"label\"\n selectRef={React.createRef()}\n >\n <TextFieldCustom\n aria-describedby={`institution_number_mask_info${isInstitutionNumberInvalid ? ' numer_instytucji_error' : ''}`}\n aria-label={`Numer instytucji. Wpisano ${institutionNumber.value.length} znaków.`}\n aria-required={true}\n aria-valuemax={5}\n characterCount\n clearFieldContext=\"numer instytucji\"\n disabled={disabled}\n fullwidth\n id=\"numer_instytucji_id\"\n invalid={isInstitutionNumberInvalid}\n maxLength={5}\n value={institutionNumber.value}\n onChange={event => this.handleChangInstitutionNumber(event.target.value)}\n onClear={event => this.handleChangInstitutionNumber('')} />\n {isInstitutionNumberInvalid &&\n <ErrorList\n containerId=\"numer_instytucji_error\"\n errorList={institutionNumberErrors}\n />\n }\n <Text info id=\"institution_number_mask_info\">\n <span className=\"sr-only\">Wpisz numer zgodnie ze wzorem: </span>AA.00\n </Text>\n </FieldWithLabel>\n </GridCustom>\n )}\n <GridCustom>\n <FieldWithLabel\n label=\"Region\"\n aria-label={activity !== null ? null : 'Region, pole nieaktywne. Aby wybrać region, musisz wybrać dziaÅ‚anie i poddziaÅ‚anie.'}\n tag=\"label\"\n selectRef={React.createRef()}\n tabIndex={activity !== null ? null : '0'}\n >\n <Select\n aria-describedby={regionFetchError.length > 0 ? 'region_fetch_error' : null}\n className={isRegionInvalid ? SELECT_INVALID_CLASS_NAME : SELECT_CLASS_NAME}\n isClearable={isClearable}\n isDisabled={disabled || activity === null}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n options={activity !== null ? (this.state.regions || []) : null}\n placeholder=\"Zacznij wpisywać...\"\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n styles={customSelectStyles}\n value={region}\n onChange={this.handleChangeRegion} />\n {isRegionInvalid &&\n <ErrorList\n containerId=\"region_error\"\n errorList={regionErrors}\n />\n }\n {regionFetchError.length > 0 &&\n <Text error id=\"region_fetch_error\">{regionFetchError}</Text>\n }\n {formInvalid && <span role=\"alert\" className=\"sr-only\">Formularz zawiera bÅ‚Ä™dy.</span>}\n </FieldWithLabel>\n </GridCustom>\n </>\n )}\n {hasInstitutions && (\n <GridCustom>\n <FieldWithLabel\n label=\"Instytucja\"\n aria-label={activity !== null ? null : 'Instytucja, pole nieaktywne. Aby wybrać instytucjÄ™, musisz wybrać dziaÅ‚anie.'}\n tag=\"label\"\n selectRef={React.createRef()}\n tabIndex={activity !== null ? null : '0'}\n >\n <Select\n aria-describedby={institutionFetchError.length > 0 ? 'institution_fetch_error' : null}\n className={isInstitutionInvalid ? SELECT_INVALID_CLASS_NAME : SELECT_CLASS_NAME}\n isClearable={isClearable}\n isDisabled={disabled || activity === null}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n options={activity !== null ? (this.state.institutions || []) : null}\n placeholder=\"Zacznij wpisywać...\"\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n styles={customSelectStyles}\n value={institution}\n onChange={this.handleChangeInstitution} />\n {isInstitutionInvalid &&\n <ErrorList\n containerId=\"institution_error\"\n errorList={institutionErrors}\n />\n }\n {institutionFetchError.length > 0 &&\n <Text error id=\"institution_fetch_error\">{institutionFetchError}</Text>\n }\n {formInvalid && <span role=\"alert\" className=\"sr-only\">Formularz zawiera bÅ‚Ä™dy.</span>}\n </FieldWithLabel>\n </GridCustom>\n )}\n </>\n )\n }\n}\n","import React, { Component } from 'react';\nimport Dropzone from 'react-dropzone';\nimport { Checkbox } from '@rmwc/checkbox';\n\nimport { getAuthTokenCookieValue, refreshTimerAfterRequest, saveFileFromApi } from '../../../helpers';\nimport { translateErrorMessage } from '../../../serializers';\nimport {\n Box,\n ButtonStyled,\n DialogCustom,\n FieldWithLabel,\n GridCustom,\n LinearProgressCustom,\n Text,\n TextFieldCustom\n} from '../../common';\n\n\nclass Zalacznik extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n confirmRemovingOn: false,\n progress: null,\n loadingInProgress: false,\n loadingFileName: null,\n showLoadedSuccessMsg: false,\n showLoadingErrorMsg: false,\n errors: {},\n };\n\n this.blockedFilesExtensions = ['exe', ];\n this.successMessageTimeout = null;\n this.errorMessageTimeout = null;\n this.removingDialogComponent = null;\n this.xhrSaveFile = null;\n\n this.handleRemoveZalacznik = this.handleRemoveZalacznik.bind(this);\n this.handleAddPlik = this.handleAddPlik.bind(this);\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevState.progress !== this.state.progress && this.state.progress === 1.0) {\n this.setState({\n loadingFileName: null,\n showLoadedSuccessMsg: true,\n });\n\n this.successMessageTimeout = setTimeout(() => {\n this.successMessageTimeout = null;\n this.setState({\n showLoadedSuccessMsg: false,\n loadingInProgress: false,\n });\n }, 7000);\n }\n }\n\n componentDidMount() {\n if (this.props.zalacznik.plikDoWgrania) {\n this.handleAddPlik([this.props.zalacznik.plikDoWgrania, ]);\n }\n }\n\n componentWillUnmount() {\n if (this.successMessageTimeout !== null) {\n clearTimeout(this.successMessageTimeout);\n }\n if (this.errorMessageTimeout !== null) {\n clearTimeout(this.errorMessageTimeout);\n }\n if (this.xhrSaveFile !== null) {\n this.xhrSaveFile.abort();\n }\n }\n\n handleCloseConfirmRemovingDialog = () => {\n this.setState({confirmRemovingOn: false});\n }\n\n\thandleSaveFileFromApi = (url, fileName) => {\n this.setState(\n () => saveFileFromApi(\n url,\n\t\t\t\tfileName)\n );\n }\n\n render() {\n const isAlreadyPublished = this.props.isAlreadyPublished;\n const z = this.props.zalacznik;\n const temporaryId = z.temporaryId;\n const formLocked = this.props.formLocked;\n const zalacznikTitleId = `zalacznik_${z.temporaryId}_title_id`;\n\n const errors = Object.assign({}, this.props.errors || {}, this.state.errors);\n const checkAttributeName = this.props.checkAttributeName;\n const isCheckInvalid = (errors[checkAttributeName] || []).length > 0;\n const isNazwaInvalid = (errors.nazwa || []).length > 0;\n\n return (\n <Box tag=\"li\">\n {this.props.withCheck && (\n <>\n <Checkbox\n aria-describedby={isCheckInvalid ? 'withCheck_errors' : null}\n checked={z[checkAttributeName]}\n disabled={formLocked}\n label={this.props.checkLabel}\n onChange={event => this.props.onCheckChange(event.target.checked, temporaryId)}\n />\n {isCheckInvalid && (\n <ul id=\"withCheck_errors\">\n {errors[checkAttributeName].map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}\n </ul>\n )}\n </>\n )}\n <FieldWithLabel label=\"Nazwa zaÅ‚Ä…cznika\" tag=\"label\" labelFor={zalacznikTitleId}>\n <TextFieldCustom\n aria-describedby={isNazwaInvalid ? 'zalacznik_title_error' : null}\n aria-label={`Nazwa zaÅ‚Ä…cznika, maksymalna liczba znaków: 100. Wpisano ${z.nazwa.length} znaków.`}\n aria-valuemax={100}\n autoFocus\n characterCount\n clearFieldContext=\"nazwa zaÅ‚Ä…cznika\"\n disabled={isAlreadyPublished || formLocked}\n fullwidth\n id={zalacznikTitleId}\n invalid={isNazwaInvalid}\n maxLength={100}\n value={z.nazwa}\n onBlur={(ev) => this.props.saveZalacznikAttributes(z.temporaryId, {nazwa: ev.target.value.trim()})}\n onChange={(ev) => this.props.saveZalacznikAttributes(z.temporaryId, {nazwa: ev.target.value})}\n onClear={!isAlreadyPublished && ((ev) => this.props.saveZalacznikAttributes(z.temporaryId, {nazwa: ''}))}\n />\n {isNazwaInvalid && <ul id=\"zalacznik_title_error\">{errors.nazwa.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n </FieldWithLabel>\n <FieldWithLabel>\n {this.renderFile(temporaryId, errors)}\n </FieldWithLabel>\n {!isAlreadyPublished && (\n <ButtonStyled\n disabled={formLocked}\n remove\n onClick={() => this.setState({confirmRemovingOn: true})}>\n UsuÅ„ zaÅ‚Ä…cznik<span className=\"sr-only\"> {z.nazwa}</span>\n </ButtonStyled>\n )}\n {this.state.confirmRemovingOn && (\n <DialogCustom \n className=\"dialog\"\n dialogTitle=\"Czy na pewno chcesz usunąć ten zaÅ‚Ä…cznik?\"\n dialogRef={(c) => {this.removingDialogComponent = c}}\n onClose={this.handleCloseConfirmRemovingDialog}\n >\n <GridCustom centerVertical flexEnd>\n <ButtonStyled onClick={() => {this.setState({confirmRemovingOn: false})}} cancel>Anuluj</ButtonStyled>\n <ButtonStyled onClick={this.handleRemoveZalacznik} remove>UsuÅ„ zaÅ‚Ä…cznik</ButtonStyled>\n </GridCustom>\n </DialogCustom>\n )}\n {isNazwaInvalid && <span role=\"alert\" className=\"sr-only\">Formularz zawiera bÅ‚Ä™dy.</span>}\n </Box>\n )\n }\n\n renderFile(temporaryId, errors) {\n // loaded file\n const z = this.props.zalacznik;\n const progress = <LinearProgressCustom progress={this.state.progress || 0} />;\n const error = (errors.plik || '').length > 0 ? <Text error id=\"load_file_error\">{errors.plik}</Text> : null;\n if (z.plik.id) {\n const plik = z.plik;\n return (\n <>\n {this.state.loadingInProgress && progress}\n {this.state.showLoadedSuccessMsg && <Text className=\"success-text\" role=\"status\">Plik zostaÅ‚ dodany!</Text>}\n <Text>{plik.nazwa}</Text>\n\t\t\t\t\t<ButtonStyled className=\"btn--pdf-dowload\" onClick={(ev) => this.handleSaveFileFromApi(plik.uri, plik.nazwa)}>Pobierz zaÅ‚Ä…cznik<span className=\"sr-only\"> {z.nazwa || plik.nazwa}</span></ButtonStyled>\n {error}\n {this.renderOwner(z)}\n </>\n )\n }\n\n // loading file\n if (this.state.loadingInProgress) {\n return (\n <>\n <Text>{this.state.loadingFileName}</Text>\n {progress}\n {error}\n </>\n )\n }\n\n let fileError = null;\n\n const loadFileError = (errors.plik || '').length > 0 ? 'load_file_error' : null;\n const noUploadError = this.state.showLoadingErrorMsg ? 'no_file_upload_error' : null;\n\n if (loadFileError && noUploadError) {\n fileError = `${loadFileError} ${noUploadError}`;\n } else {\n fileError = (loadFileError || noUploadError)\n }\n\n // set file\n return (\n <>\n <Dropzone onDrop={this.handleAddPlik}>\n {({getRootProps, getInputProps}) => (\n <div {...getRootProps({className: 'dropzone'})}>\n <input\n aria-describedby={fileError}\n disabled={this.props.formLocked}\n id=\"fileinput\"\n style={{display: 'block'}}\n {...getInputProps({\n onClick: ev => this.clearFileErrors(temporaryId),\n style: {display: 'block', position: 'absolute', width: 0, height: 0, left: '-1000%'},\n })}\n />\n <label className=\"drag-n-drop-input-label\" htmlFor=\"fileinput\">PrzeciÄ…gnij i upuść pliki lub kliknij, aby wybrać plik z komputera</label>\n </div>\n )}\n </Dropzone>\n {error}\n {this.state.showLoadingErrorMsg && <Text error id=\"no_file_upload_error\">Plik nie zostaÅ‚ dodany</Text>}\n </>\n )\n }\n\n renderOwner(zalacznik) {\n if (!zalacznik.plik.ktoUtworzyl) { return null }\n const {\n dataUtworzenia,\n ktoUtworzyl,\n } = zalacznik.plik;\n return (\n <>\n <FieldWithLabel label=\"Dodany przez\">\n <Text>{ktoUtworzyl.imie} {ktoUtworzyl.nazwisko}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Data i czas dodania pliku\">\n <Text>{dataUtworzenia}</Text>\n </FieldWithLabel>\n </>\n )\n }\n\n clearFileErrors(temporaryId) {\n this.setState(\n (prevState) => {\n let errors = prevState.errors;\n delete errors['plik'];\n return {errors: errors}\n }\n );\n }\n\n handleRemoveZalacznik() {\n if (this.removingDialogComponent !== null){\n this.handleCloseConfirmRemovingDialog();\n }\n this.props.removeZalacznik(this.props.zalacznik.temporaryId);\n }\n\n handleAddPlik(files) {\n if (!files.length) {\n // stop loading\n this.setState({loadingFileName: null, progress: null});\n return\n }\n\n // get first file and use it it current component\n let currentComponentFile = files[0];\n\n if (this.validate(currentComponentFile)) {\n this.save(currentComponentFile);\n }\n\n // render components for other files\n if (files.length > 1) {\n let filesLength = files.length;\n if (this.props.maxLength) {\n filesLength = Math.min(\n files.length,\n // available attachments to load\n this.props.maxLength - (this.props.zalacznikiLength - 1) // 1 is because of current input\n );\n }\n // start from the second file, because the first one is already added\n for (let i=1; i<filesLength; i++) {\n this.props.addZalacznik({plikDoWgrania: files[i]})\n }\n }\n }\n\n validate(file) {\n const fileNameList = file.name.split('.');\n const extension = fileNameList[fileNameList.length - 1];\n\n if (this.blockedFilesExtensions.includes(extension.toLowerCase())) {\n this.setState(\n (prevState) => {\n return {\n errors: Object.assign({}, prevState.errors, {\n plik: [`Nie udaÅ‚o siÄ™ dodać pliku ${file.name}. Dodawanie plików z rozszerzeniem ${extension} zostaÅ‚o zablokowane.`]\n }),\n showLoadingErrorMsg: true,\n }\n },\n () => {\n this.errorMessageTimeout = setTimeout(() => {\n this.errorMessageTimeout = null;\n this.setState({showLoadingErrorMsg: false})\n }, 5000);\n }\n );\n return false\n }\n\n if (this.errorMessageTimeout !== null){\n clearTimeout(this.errorMessageTimeout);\n }\n this.setState((prevState) => {\n let errors = prevState.errors;\n delete errors.plik;\n return {\n errors: errors,\n showLoadingErrorMsg: false,\n }\n });\n return true\n }\n\n save(file) {\n this.setState({progress: 0, loadingInProgress: true, loadingFileName: file.name});\n\n const formData = new FormData();\n formData.append('file', file);\n\n this.xhrSaveFile = new XMLHttpRequest();\n this.xhrSaveFile.open('POST', `/api/files?context=${this.props.contextForSaving || 'default'}`);\n\n const authTokenCookieValue = getAuthTokenCookieValue();\n if (authTokenCookieValue) {\n this.xhrSaveFile.setRequestHeader('X-Auth-Token', authTokenCookieValue);\n }\n\n const onProgress = (e) => {\n this.setState({progress: e.loaded / e.total})\n };\n\n this.xhrSaveFile.upload.onprogress = onProgress;\n\n this.xhrSaveFile.onerror = () => {\n this.xhrSaveFile = null;\n this.setState(prevState => ({\n errors: Object.assign({}, prevState.errors, {plik: ['WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d.']}),\n }));\n };\n\n this.xhrSaveFile.onload = () => {\n refreshTimerAfterRequest(\n authTokenCookieValue, this.xhrSaveFile.status);\n let success = true;\n let error;\n let jsonData = {};\n try {\n jsonData = JSON.parse(this.xhrSaveFile.responseText);\n } catch(error) {\n success = false;\n }\n\n if (success) {\n if (jsonData.status === 'OK') {\n const file = jsonData.data.file;\n this.props.saveZalacznikAttributes(this.props.zalacznik.temporaryId, {\n plik: {\n id: file.id,\n uri: file.uri,\n nazwa: file.name,\n dataUtworzenia: file.created_at,\n ktoUtworzyl: {imie: file.created_by.forename, nazwisko: file.created_by.surname},\n },\n plikDoWgrania: null,\n });\n return\n } else if (jsonData.errors) {\n error = translateErrorMessage(jsonData.errors.file);\n } else {\n error = translateErrorMessage(jsonData.message);\n }\n } else if (this.xhrSaveFile.status === 413) {\n error = 'Wybrany plik jest zbyt duży. Maksymalny rozmiar pliku to 25 MB.';\n } else {\n error = `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${this.xhrSaveFile.status}. Nie udaÅ‚o siÄ™ dodać pliku.`;\n }\n this.setState(prevState => ({\n errors: Object.assign({}, prevState.errors, {plik: [error]}),\n }));\n this.xhrSaveFile = null;\n };\n this.xhrSaveFile.send(formData);\n }\n}\n\n\nexport { Zalacznik };\n","import React from 'react';\n\nimport { ButtonStyled, GridCustom, Text } from '../../common';\nimport { Zalacznik } from './Zalacznik';\n\n\nconst Zalaczniki = (props) => {\n const {\n children,\n errors,\n formLocked,\n header,\n isAlreadyPublished,\n withoutHeader,\n zalaczniki\n } = props;\n const zalacznikiErrors = (props.errors || {}).errors || [];\n const isZalacznikiInvalid = zalacznikiErrors.length > 0;\n // it is possible to rewrite this value\n const zalacznikiLength = props.zalacznikiLength || zalaczniki.length;\n\n return (\n <>\n {isZalacznikiInvalid && <ul role=\"alert\">{zalacznikiErrors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n <GridCustom fullwidth flexTop>\n {!withoutHeader && <Text tag=\"h2\" sectionHeader>{header || 'ZaÅ‚Ä…czniki'}</Text>}\n {(!isAlreadyPublished && (!props.maxLength || zalacznikiLength < props.maxLength)) && (\n <ButtonStyled\n add\n disabled={formLocked}\n onClick={props.addZalacznik}\n noMargin\n >\n Dodaj zaÅ‚Ä…cznik\n </ButtonStyled>\n )}\n </GridCustom>\n {children}\n <GridCustom tag=\"ul\">\n {[...zalaczniki].reverse().map(z => (\n <Zalacznik\n isAlreadyPublished={isAlreadyPublished}\n checkAttributeName={props.checkAttributeName}\n checkLabel={props.checkLabel}\n contextForSaving={props.contextForSaving}\n errors={(errors || {})[z.temporaryId] || {}}\n formLocked={formLocked}\n key={z.temporaryId}\n maxLength={props.maxLength}\n withCheck={props.withCheck}\n zalacznik={z}\n zalacznikiLength={zalacznikiLength}\n saveZalacznikAttributes={props.saveZalacznikAttributes}\n removeZalacznik={props.removeZalacznik}\n addZalacznik={props.addZalacznik}\n onCheckChange={props.onCheckChange}\n />)\n )}\n </GridCustom>\n </>\n )\n}\n\nexport { Zalaczniki };\n","import React, { useState } from 'react';\n\nimport { GridCustom, Select, Text, ButtonStyled } from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { saveFileFromApi } from '../../../helpers';\n\n\nconst EMPTY_VALUE = {\n value: 0,\n label: 'Wybierz',\n};\n\nconst ZalacznikiSelect = (props) => {\n const [selectedZalacznik, setSelectedZalacznik] = useState(EMPTY_VALUE);\n const [selectWrapperClassName, setSelectWrapperClassName] = useState(null)\n \n if (props.zalaczniki.length === 0) {\n return <Text info>Liczba wyników: 0</Text>\n }\n \n let options = [EMPTY_VALUE, ].concat(...props.zalaczniki.map(z => {\n let label = z.nazwa;\n if (props.label && z[props.label.attrName] === true) {\n label += ` - ${props.label.description}`;\n }\n return {value: z.id, label, plik: z.plik}\n }))\n\n const downloadAllAttachments = () => {\n const url = `/api/offerset/${props.offersetId}/attachments.zip`;\n const fileName = `ZaÅ‚Ä…czniki-${props.offersetId}.zip`;\n\n return saveFileFromApi(url, fileName);\n }\n\n return (\n <>\n <GridCustom\n noWrap\n flexBottom\n className={selectWrapperClassName}\n >\n <Select\n aria-label=\"ZaÅ‚Ä…czniki\"\n className=\"select-custom select-custom--download\"\n noOptionsMessage={() => 'Brak wybranej opcji'}\n options={options}\n placeholder=\"Brak zaÅ‚Ä…czników\"\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n styles={customSelectStyles}\n value={selectedZalacznik}\n onChange={selectedOption => setSelectedZalacznik(selectedOption)}\n menuShouldScrollIntoView\n onFocus={() => setSelectWrapperClassName('select-download-wrapper')}\n onBlur={() => setSelectWrapperClassName(null)}\n />\n {selectedZalacznik.value !== 0 && selectedZalacznik.plik.uri.length > 0 && (\n\t\t\t\t\t<ButtonStyled className=\"btn--pdf-dowload\" onClick={(ev) => saveFileFromApi(selectedZalacznik.plik.uri, selectedZalacznik.plik.nazwa)}>\n\t\t\t\t\t\tPobierz<span className=\"sr-only\"> zaÅ‚Ä…cznik {selectedZalacznik.nazwa || selectedZalacznik.plik.nazwa}</span>\n\t\t\t\t\t</ButtonStyled>\n )}\n {props.offersetId != null && (\n <ButtonStyled className=\"btn--pdf-dowload\" onClick={(ev) => downloadAllAttachments()}>\n Pobierz wszystkie zaÅ‚Ä…czniki\n </ButtonStyled>\n )}\n\n {(selectedZalacznik.value !== 0 && !selectedZalacznik.plik.uri) && (\n <Text error id=\"selectedZalacznik_error\">Tego pliku nie da siÄ™ pobrać. Skontaktuj siÄ™ z obsÅ‚ugÄ… strony.</Text>\n )}\n </GridCustom>\n </>\n )\n}\n\nexport { ZalacznikiSelect };\n","import React, { Component } from 'react';\n\nimport { TYP_NUMERU_IDENTYFIKACYJNEGO } from '../../../const';\nimport { fetchApi } from '../../../fetch';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { validatePersonalData } from '../../../validators';\nimport { ButtonStyled, DialogCustom, GridCustom, Text } from '../../common';\nimport { FormDanePodmiotuFields } from '../common';\n\nconst RODZAJ_ADRESU_CHOICES = [\n {\n value: 'poland',\n label: 'Polska',\n },\n {\n value: 'abroad',\n label: 'Zagranica',\n },\n];\nconst TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES = TYP_NUMERU_IDENTYFIKACYJNEGO.slice(0, 2);\nconst EMPTY_DATA = {\n id: null,\n nazwa: '',\n typNumeruIdentyfikacyjnego: TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES[0],\n numerIdentyfikacyjny: '',\n rodzajAdresu: RODZAJ_ADRESU_CHOICES[0],\n adres: {\n kraj: 'Polska',\n wojewodztwo: '',\n powiat: '',\n gmina: '',\n miejscowosc: '',\n kodPocztowy: '',\n ulica: '',\n numerDomu: '',\n },\n};\n\n\nclass FormDanePodmiotu extends Component {\n\n constructor(props) {\n super(props);\n this.isNew = !Object.keys(props.data).length;\n this.state = {\n savingOn: false,\n data: Object.assign({}, EMPTY_DATA, props.data),\n errors: {},\n fetchError: '',\n };\n\n this.dialogComponent = null;\n this.xhrFetchSave = null;\n }\n\n componentWillUnmount() {\n // abort api request if exist\n if (this.xhrFetchSave !== null) {\n this.xhrFetchSave.abort();\n }\n }\n\n // handlers\n\n handleChangeRodzajAdresu = (value) => {\n let dct = {\n numerIdentyfikacyjny: '',\n rodzajAdresu: value,\n };\n let adres = {\n kraj: null,\n wojewodztwo: '',\n powiat: '',\n gmina: '',\n miejscowosc: '',\n };\n if (value.value === 'poland') {\n adres.kraj = 'Polska';\n dct['typNumeruIdentyfikacyjnego'] = TYP_NUMERU_IDENTYFIKACYJNEGO[0];\n } else {\n // set abroad\n dct['typNumeruIdentyfikacyjnego'] = TYP_NUMERU_IDENTYFIKACYJNEGO[2];\n }\n\n this.setState(prevState => {\n return {data: Object.assign({}, prevState.data, {\n ...dct,\n adres: Object.assign({}, prevState.data.adres, adres),\n })}\n });\n }\n\n handleChangeAttribute = (name, value, isAdresPart) => {\n this.setState(prevState => {\n let dict = {[name]: value};\n if (name === 'typNumeruIdentyfikacyjnego' && prevState.data['typNumeruIdentyfikacyjnego'].value !== value.value) {\n dict['numerIdentyfikacyjny'] = '';\n }\n if (isAdresPart) {\n return {data: Object.assign({}, prevState.data, {\n adres: Object.assign({}, prevState.data.adres, dict),\n })}\n } else {\n return {data: Object.assign({}, prevState.data, dict)}\n }\n });\n }\n\n handleChangeMiejscowosc = (value) => {\n this.setState(prevState => {\n return {data: Object.assign({}, prevState.data, {\n adres: Object.assign({}, prevState.data.adres, value)\n })}\n });\n }\n\n handleChangeNumerIdentyfikacyjny = (value, onlyDigits=false, maxLength=null) => {\n if (onlyDigits) {\n value = value.replace(/[^\\d]/g, '');\n }\n if (maxLength) {\n value = value.slice(0, maxLength);\n }\n this.setState(prevState => {\n return {data: Object.assign({}, prevState.data, {numerIdentyfikacyjny: value})}\n });\n }\n\n handleSave = () => {\n this.setState(\n {savingOn: true, fetchError: ''},\n () => {\n const data = this.getData();\n const [isValid, errors] = validatePersonalData(data);\n if (isValid) {\n // save danePodmiotu on server\n this.xhrFetchSave = fetchApi(\n this.isNew ? '/api/users/economic-subject' : `/api/users/economic-subject/${this.state.data.id}`,\n this.isNew ? 'POST' : 'PUT',\n {},\n getSerializedObject(data, {toServer: true}),\n this.handleFetchSaveSuccess,\n this.handleFetchSaveError,\n this.handleFetchSaveIncorrectStatus,\n );\n } else {\n this.setState({savingOn: false, errors});\n }\n }\n );\n }\n\n handleFetchSaveSuccess = (data) => {\n this.xhrFetchSave = null;\n\n let data_ = Object.assign({}, this.state.data);\n if (this.isNew) {\n data_['id'] = data.economic_subject.id;\n }\n this.props.saveDanePodmiotu(data_);\n }\n\n handleFetchSaveError = (data) => {\n this.xhrFetchSave = null; // clean xhr object\n this.setState({\n savingOn: false,\n fetchError: `Nie udaÅ‚o siÄ™ zapisać danych podmiotu. ${translateErrorMessage(data.message)}`,\n });\n }\n\n handleFetchSaveIncorrectStatus = (status) => {\n this.xhrFetchSave = null; // clean xhr object\n\n this.setState({\n savingOn: false,\n fetchError: `Podczas zapisu danych podmiotu wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`,\n });\n }\n\n // helpers\n\n getData() {\n const data = this.state.data;\n const adres = data.adres;\n return {\n nazwa: data.nazwa,\n typNumeruIdentyfikacyjnego: data.typNumeruIdentyfikacyjnego.value,\n numerIdentyfikacyjny: data.numerIdentyfikacyjny,\n rodzajAdresu: data.rodzajAdresu.value,\n adres: {\n kraj: data.adres.kraj,\n wojewodztwo: adres.wojewodztwo,\n powiat: adres.powiat,\n gmina: adres.gmina,\n miejscowosc: adres.miejscowosc,\n kodPocztowy: adres.kodPocztowy,\n ulica: adres.ulica,\n numerDomu: adres.numerDomu,\n },\n }\n }\n\n // rendering\n\n render() {\n return (\n <DialogCustom\n className=\"dialog-long-content\"\n dialogTitle={`${this.isNew ? 'Dodaj' : 'Edytuj'} dane podmiotu`}\n dialogRef={(c) => { this.dialogComponent = c }}\n onClose={this.props.closeDanePodmiotuForm}\n >\n <>\n <FormDanePodmiotuFields\n data={this.state.data}\n errors={this.state.errors}\n changeAttribute={this.handleChangeAttribute}\n changeMiejscowosc={this.handleChangeMiejscowosc}\n changeNumerIdentyfikacyjny={this.handleChangeNumerIdentyfikacyjny}\n changeRodzajAdresu={this.handleChangeRodzajAdresu}\n />\n <GridCustom flexEnd>\n <ButtonStyled onClick={this.props.closeDanePodmiotuForm} cancel>Anuluj</ButtonStyled>\n <ButtonStyled onClick={this.handleSave} primary>\n Zapisz<span className=\"sr-only\"> dane podmiotu</span>\n </ButtonStyled>\n </GridCustom>\n {this.state.fetchError.length > 0 && <Text error role=\"alert\">{this.state.fetchError}</Text>}\n </>\n </DialogCustom>\n )\n }\n}\n\n\nexport { FormDanePodmiotu };\n","import React, { Component } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport { translateErrorMessage } from '../../../serializers';\nimport { validateOsobaDoKontaktu } from '../../../validators';\nimport {ButtonStyled, DialogCustom, FieldWithLabel, GridCustom, Text,\n TextFieldCustom } from '../../common';\n\n\nconst EMPTY_DATA = {\n id: null,\n imie: '',\n nazwisko: '',\n numerTelefonu: '',\n email: '',\n};\n\n\nclass FormOsobaDoKontaktu extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n savingOn: false,\n data: props.data !== null ? props.data : EMPTY_DATA,\n isNew: props.data === null,\n errors: {},\n fetchError: '',\n };\n\n this.dialogComponent = null;\n this.xhrFetchSave = null;\n }\n\n // basic functions\n\n componentWillUnmount() {\n // abort api request if exist\n if (this.xhrFetchSave !== null) {\n this.xhrFetchSave.abort();\n }\n }\n\n // handlers\n\n handleChangeAttribute = (name, value) => {\n this.setState(prevState => {\n let errors = Object.assign({}, prevState.errors);\n if (name === 'email') {\n delete errors[name];\n } else if (name === 'numerTelefonu') {\n value = value.replace(/[^\\d+ -]/, '');\n }\n return {data: Object.assign({}, prevState.data, {[name]: value}), errors}\n });\n }\n\n handlePasteNumerTelefonu = (ev) => {\n // stop data actually being pasted into input\n ev.stopPropagation();\n ev.preventDefault();\n\n // set pasted data via clipboard API\n const clipboardData = ev.clipboardData || window.clipboardData;\n const pastedData = clipboardData.getData('Text').replace(/[^\\d+ -]/g, '').trim();\n this.handleChangeAttribute('numerTelefonu', pastedData);\n }\n\n handleSave = () => {\n this.setState(\n {savingOn: true, fetchError: ''},\n () => {\n const [isValid, errors] = validateOsobaDoKontaktu(this.state.data);\n if (isValid) {\n const { data, isNew } = this.state;\n // save osobaDoKontaktu on server\n this.xhrFetchSave = fetchApi(\n isNew ? '/api/users/contact-persons' : `/api/users/contact-persons/${data.id}`,\n isNew ? 'POST' : 'PUT',\n {},\n {\n forename: data.imie,\n surname: data.nazwisko,\n phoneNumber: data.numerTelefonu,\n email: data.email,\n },\n this.handleFetchSaveSuccess,\n this.handleFetchSaveError,\n this.handleFetchSaveIncorrectStatus,\n );\n } else {\n this.setState({savingOn: false, errors});\n }\n }\n );\n }\n\n handleFetchSaveSuccess = (data) => {\n this.xhrFetchSave = null;\n\n let data_ = Object.assign({}, this.state.data);\n if (this.state.isNew) {\n data_['id'] = data.contact_person.id;\n }\n this.props.saveOsobaDoKontaktu(data_, this.state.isNew);\n }\n\n handleFetchSaveError = (data) => {\n this.xhrFetchSave = null; // clean xhr object\n this.setState({\n savingOn: false,\n fetchError: `Nie udaÅ‚o siÄ™ zapisać osoby do kontaktu. ${translateErrorMessage(data.message)}`,\n });\n }\n\n handleFetchSaveIncorrectStatus = (status) => {\n this.xhrFetchSave = null; // clean xhr object\n\n this.setState({\n savingOn: false,\n fetchError: `Podczas zapisu osoby do kontaktu wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`,\n });\n }\n\n // rendering\n\n render() {\n const {data, errors, fetchError, savingOn} = this.state;\n const isImieInvalid = (errors.imie || '').length > 0;\n const isNazwiskoInvalid = (errors.nazwisko || '').length > 0;\n const isEmailInvalid = (errors.email || '').length > 0;\n const isFormInvalid = isImieInvalid || isNazwiskoInvalid || isEmailInvalid;\n\n return (\n <DialogCustom\n className=\"dialog-long-content\"\n dialogTitle={`${this.state.isNew ? 'Dodaj' : 'Edytuj'} osobÄ™ do kontaktu`}\n dialogRef={(c) => { this.dialogComponent = c }}\n onClose={this.props.closeOsobaDoKontaktuFormForm}\n >\n <>\n <GridCustom fullwidth flexM>\n <FieldWithLabel label=\"ImiÄ™\" tag=\"label\" labelFor=\"name_id\">\n <TextFieldCustom\n aria-describedby={isImieInvalid ? 'name_error' : null}\n aria-label={`ImiÄ™, maksymalna liczba znaków: 500. Wpisano ${data.imie.length} znaków.`}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"imiÄ™\"\n disabled={savingOn}\n id=\"name_id\"\n invalid={isImieInvalid}\n maxLength={500}\n value={data.imie}\n onChange={(ev) => this.handleChangeAttribute('imie', ev.target.value)}\n onClear={(ev) => this.handleChangeAttribute('imie', '')} />\n {isImieInvalid && <Text error id=\"name_error\">{errors.imie}</Text>}\n </FieldWithLabel>\n <FieldWithLabel label=\"Nazwisko\" tag=\"label\" labelFor=\"surname_id\">\n <TextFieldCustom\n aria-describedby={isNazwiskoInvalid ? 'surname_error' : null}\n aria-label={`Nazwisko, maksymalna liczba znaków: 500. Wpisano ${data.nazwisko.length} znaków.`}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"nazwisko\"\n disabled={savingOn}\n id=\"surname_id\"\n invalid={isNazwiskoInvalid}\n maxLength={500}\n value={data.nazwisko}\n onChange={(ev) => this.handleChangeAttribute('nazwisko', ev.target.value)}\n onClear={(ev) => this.handleChangeAttribute('nazwisko', '')} />\n {isNazwiskoInvalid && <Text error id=\"surname_error\">{errors.nazwisko}</Text>}\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth flexM>\n <FieldWithLabel label=\"Numer telefonu\" tag=\"label\" labelFor=\"phone_id\">\n <TextFieldCustom\n aria-label={`Numer telefonu, maksymalna liczba znaków: 45. Wpisano ${data.numerTelefonu.length} znaków.`}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"numer telefonu\"\n disabled={savingOn}\n id=\"phone_id\"\n maxLength={45}\n value={data.numerTelefonu}\n onChange={(ev) => this.handleChangeAttribute('numerTelefonu', ev.target.value)}\n onClear={(ev) => this.handleChangeAttribute('numerTelefonu', '')}\n onPaste={this.handlePasteNumerTelefonu} />\n </FieldWithLabel>\n <FieldWithLabel label=\"Adres e-mail\" tag=\"label\" labelFor=\"email_id\">\n <TextFieldCustom\n aria-describedby={isEmailInvalid ? 'email_error' : null}\n aria-label={`Adres e-mail, maksymalna liczba znaków: 500. Wpisano ${data.email.length} znaków.`}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"adres e-mail\"\n disabled={savingOn}\n id=\"email_id\"\n invalid={isEmailInvalid}\n maxLength={500}\n type=\"email\"\n value={data.email}\n onChange={(ev) => this.handleChangeAttribute('email', ev.target.value)}\n onClear={(ev) => this.handleChangeAttribute('email', '')} />\n {isEmailInvalid && <Text error id=\"email_error\">{errors.email}</Text>}\n </FieldWithLabel>\n </GridCustom>\n <GridCustom flexEnd>\n <ButtonStyled onClick={this.props.closeOsobaDoKontaktuFormForm} cancel>Anuluj</ButtonStyled>\n <ButtonStyled onClick={this.handleSave} primary>\n Zapisz<span className=\"sr-only\"> osobÄ™ do kontaktu</span>\n </ButtonStyled>\n </GridCustom>\n {fetchError.length > 0 && <Text error role=\"alert\">{fetchError}</Text>}\n {isFormInvalid && <span role=\"alert\" className=\"sr-only\">Formularz zawiera bÅ‚Ä™dy.</span>}\n </>\n </DialogCustom>\n )\n }\n}\n\n\nexport { FormOsobaDoKontaktu };\n","import React, { Component } from 'react';\n\nimport { USER_DATA_COOKIE_NAME } from '../../../const';\nimport { UserContext } from '../../../context/user-context';\nimport { deleteCookie, getCookieValue } from '../../../helpers';\nimport { Message } from '../../common';\n\n\nclass Logowanie extends Component {\n\n constructor(props) {\n super(props);\n this.timeout = null;\n }\n\n componentWillUnmount() {\n // clear timeout\n if (this.timeout !== null) {\n clearTimeout(this.timeout);\n }\n }\n\n componentDidMount() {\n const cookie = getCookieValue(USER_DATA_COOKIE_NAME);\n if (cookie && cookie.length) {\n const userData = JSON.parse(atob(decodeURIComponent(cookie)));\n this.context.set(userData)\n deleteCookie(USER_DATA_COOKIE_NAME);\n }\n this.timeout = setTimeout(() => {\n this.redirectToCurrentPathname();\n }, 5000);\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.user.identifier !== this.props.user.identifier && this.props.user.identifier === null) {\n this.redirectToCurrentPathname();\n }\n }\n\n // helpers\n\n redirectToCurrentPathname() {\n let currentPathname = sessionStorage.getItem('currentPathname') || '/';\n if (currentPathname === '/blad-logowania') {\n currentPathname = '/';\n }\n this.props.history.push(currentPathname);\n }\n\n // rendering\n\n render() {\n return (\n <Message\n success\n messageIcon=\"check_circle_outline\"\n messageTitle=\"Logowanie zakoÅ„czone powodzeniem\" >\n NastÄ™puje powrót do poprzedniej strony.\n </Message>\n )\n }\n}\n\nLogowanie.contextType = UserContext;\n\n\nexport { Logowanie };\n","import {hasPerspectiveInstitutions, hasPerspectiveRegions} from './helpers';\n\n\nexport const getPermissionsValuesDict = (defaultDict, keyName, value) => {\n let dct = {};\n for (let key of Object.keys(defaultDict[keyName])) {\n dct[key] = value;\n }\n return {[keyName]: dct}\n};\n\nexport const checkSinglePermission = (prevChecks, parent, child, value) => {\n // check as mark, not check as check if value is equal to something\n return {\n [parent]: {\n ...prevChecks[parent],\n [child]: value,\n },\n }\n};\n\nexport const getPermissionErrors = (errors) => {\n return (errors.permission || {}).decisions || []\n};\n\nexport const getGroupChecked = (checks, name) => {\n const permissions = checks[name] || {};\n if (!Object.keys(permissions).length) {\n return false\n }\n return !Object.values(permissions).includes(false)\n};\n\nexport const getGroupIndeterminate = (checks, name) => {\n const values = Object.values(checks[name]);\n return values.includes(false) && values.includes(true)\n};\n\nexport const getMainGroupIndeterminate = (checks) => {\n let values = [];\n for (let group of Object.values(checks)) {\n values = [...values, ...Object.values(group)];\n }\n return values.includes(false) && values.includes(true)\n};\n\nexport const getGrantedPermissionsForGroup = (permissions) => {\n if (!permissions) { return false }\n return Object.entries(permissions).filter(\n ([_, value]) => value === true).map(([name, _]) => name)\n};\n\nconst PERMISSIONS_NAMES_DICT = {\n all: 'Wszystkie uprawnienia',\n usersAdministration: 'Funkcjonalność',\n previewListUsers: 'PodglÄ…d listy użytkowników',\n blockingUsers: 'Blokowanie użytkowników',\n contentAdministration: 'Funkcjonalność',\n generalContentCookiesRegulation: 'TreÅ›ci ogólne, cookies i regulamin',\n statements: 'Komunikaty',\n help: 'Pomoc',\n projectsEnrollmentsAdministration: 'Projekty i nabory',\n searchNPreviewData: 'Wyszukiwanie i podglÄ…d danych',\n editData: 'Edycja danych',\n advertisementAdministration: 'OgÅ‚oszenia',\n blocking: 'Blokowanie i odblokowywanie',\n permissionsAdministration: 'ZarzÄ…dzanie uprawnieniami',\n previewListUsersAuthorized: 'PodglÄ…d listy uprawnionych użytkowników',\n functionalityManagement: 'Dla funkcjonalnoÅ›ci',\n functionalityManagementImplementationLevel: 'Dla projektów i naborów oraz ogÅ‚oszeÅ„',\n permissionsManagement: 'Dla zarzÄ…dzania uprawnieniami',\n implementationLevelsDictionaryAdministration: 'Funkcjonalność',\n previewData: 'PodglÄ…d danych',\n};\n\nexport const translatePermissionName = (name) => {\n return PERMISSIONS_NAMES_DICT[name] || name\n};\n\nconst getPerspectiveLabel_ = (perspective) => {\n // if perspective is set, add it to string - it may be needed for key prop\n return perspective ? `${perspective.id || ''}.` : ''\n}\n\nconst getRegionCode = (programme, priority, activity, region, perspective=null) => {\n return `${getPerspectiveLabel_(perspective)}${programme.code || ''}.${priority.code || ''}.${activity.code || ''}-${region.code || ''}`\n};\n\nconst getInstitutionCode = (programme, priority, activity, institution, perspective=null) => {\n return `${getPerspectiveLabel_(perspective)}${programme.code || ''}.${priority.code || ''}.${activity.code || ''}-${institution.code || ''}`\n};\n\nexport const getActivityCode = (programme, priority, activity, perspective=null) => {\n return `${getPerspectiveLabel_(perspective)}${programme.code || ''}.${priority.code || ''}.${activity.code || ''}`\n};\n\nconst getPriorityCode = (programme, priority, perspective=null) => {\n return `${getPerspectiveLabel_(perspective)}${programme.code || ''}.${priority.code || ''}`\n};\n\nexport const getRegionOrInstitutionCode = (\n programme, priority, activity, region, institution, perspective=null\n) => {\n if (region) {\n return getRegionCode(\n programme, priority, activity, region, perspective)\n }\n if (institution) {\n return getInstitutionCode(\n programme, priority, activity, institution, perspective)\n }\n // maybe there is neither region nor institution, then get activity code\n return getActivityCode(programme, priority, activity, perspective)\n};\n\nexport const getImplementationLevelLabels = (permission) => {\n const emptyData = {\n code: null,\n name: null,\n description: null,\n };\n if (!permission.programme) {\n return emptyData\n }\n const { programme } = permission;\n if (!permission.priority) {\n return {\n code: programme.code || '',\n name: programme.name || '',\n description: 'Wszystkie osie',\n }\n }\n const { priority } = permission;\n if (!permission.activity) {\n return {\n code: getPriorityCode(programme, priority),\n name: priority.name || '',\n description: 'Wszystkie dziaÅ‚ania',\n }\n }\n const { activity } = permission;\n if (!permission.region && !permission.institution) {\n return {\n code: getActivityCode(programme, priority, activity),\n name: activity.name || '',\n description: hasPerspectiveRegions(permission.perspective)\n ? 'Wszystkie regiony'\n : hasPerspectiveInstitutions(permission.perspective)\n ? 'Wszystkie instytucje' : '',\n }\n }\n\n const { institution, region } = permission;\n if (!institution) {\n return {\n code: getRegionCode(programme, priority, activity, region),\n name: region.name || '',\n description: '',\n }\n }\n return {\n code: getInstitutionCode(programme, priority, activity, institution),\n name: institution.name || '',\n description: '',\n }\n};\n\nexport const sortKeysList = (list, sortList) => {\n list.sort((value1, value2) => {\n return sortList.indexOf(value1[0]) - sortList.indexOf(value2[0])\n });\n return list\n};\n\nexport const PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT = {\n usersAdministration: 'Lista użytkowników',\n implementationLevelsDictionaryAdministration:\n 'ZarzÄ…dzanie sÅ‚ownikami poziomów wdrożenia',\n contentAdministration: 'ZarzÄ…dzanie treÅ›ciÄ…',\n};\n\nexport const getPermissionHistoryUsersTitle = (permission, isHistory) => {\n if (permission.isImplementationLevelType) {\n const {\n programme = null,\n priority = null,\n activity = null,\n institution = null,\n region = null\n } = permission.permission;\n\n if ([programme, priority, activity, region || institution].every(el => el !== null)) {\n const isRegion = region !== null;\n const levelSuffix = isRegion ? 'regionu' : 'instytucji';\n return `${isHistory\n ? `Historia zmian dla ${levelSuffix}`\n : `Lista użytkowników z uprawnieniami do ${levelSuffix}`\n } ${isRegion\n ? `${getRegionCode(programme, priority, activity, region)} ${region.name}`\n : `${getInstitutionCode(programme, priority, activity, institution)} ${institution.name}`\n }`\n }\n if ([programme, priority, activity].every(el => el !== null)) {\n return `${isHistory\n ? 'Historia zmian dla dziaÅ‚ania'\n : 'Lista użytkowników z uprawnieniami do dziaÅ‚ania'\n } ${getActivityCode(programme, priority, activity)} ${activity.name}`\n }\n if ([programme, priority].every(el => el !== null)) {\n return `${isHistory\n ? 'Historia zmian dla osi'\n : 'Lista użytkowników z uprawnieniami do osi'\n } ${getPriorityCode(programme, priority)} ${priority.name}`\n }\n if (programme !== null) {\n return `${isHistory\n ? 'Historia zmian dla'\n : 'Lista użytkowników z uprawnieniami do'\n } programu ${programme.code || ''} ${programme.name}`\n }\n return `${isHistory\n ? 'Historia zmian'\n : 'Lista użytkowników'\n } - staÅ‚o siÄ™ coÅ› nieoczekiwanego`\n }\n return `${isHistory\n ? 'Historia zmian'\n : 'Lista użytkowników'\n } dla uprawnienia ${PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT[permission.permission.type]}`\n};\n","import React, { useContext, useEffect, useState } from 'react';\n\nimport { UserContext } from '../../../context/user-context';\nimport { checkHasNext, checkHasPrev } from '../../../helpers';\nimport {\n getRegionOrInstitutionCode,\n PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT\n} from '../../../helpers_permissions';\nimport { fetchApi } from '../../../fetch';\nimport {\n getSerializedObject,\n translateErrorMessage\n} from '../../../serializers';\nimport {\n ButtonStyled,\n Container,\n GridCustom,\n Loader,\n Pagination,\n TableCustom,\n Text\n} from '../../common';\n\n\nconst PAGINATED_BY = 20;\n\n\nexport const PermissionList = ({\n additionalFetchData = {},\n hideAddPermissionButtonIfFullList = false,\n initialRequestId = 1,\n isImplementationLevelType,\n requestId = 1,\n RowComponent,\n tableHeaderList,\n title,\n url,\n withHistory,\n onOpenForm,\n onOpenHistory,\n ...props\n}) => {\n const [initializingOn, setInitializingOn] = useState(true);\n const [pageNumber, setPageNumber] = useState(1);\n const [fetchError, setFetchError] = useState(null);\n const [data, setData] = useState(null);\n const [is403error, setIs403error] = useState(false);\n\n useEffect(() => {\n if (requestId === initialRequestId) { return }\n // clear pageNumber, because it's needed to change if useEffect below could run\n setPageNumber(null);\n }, [initialRequestId, requestId]);\n\n useEffect(() => {\n if (pageNumber === null) {\n // set pageNumber to 1, it should't be empty\n setPageNumber(1);\n return\n }\n let xhrFetch = null;\n\n function sortContentUsersPermissions(p1, p2) {\n return PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT[p1.type].localeCompare(\n PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT[p2.type], 'pl')\n }\n\n function callbackSuccess(data) {\n xhrFetch = null;\n const { total } = data.meta;\n const permissions = getSerializedObject(\n data, {mapToCamelCaseName: true}).permissions;\n setData({\n permissions: isImplementationLevelType\n ? permissions || []\n : Object.entries(permissions)\n .map(([type, data]) => ({...data, type}))\n .sort(sortContentUsersPermissions),\n total: total,\n hasPrev: checkHasPrev(pageNumber),\n hasNext: checkHasNext(PAGINATED_BY, pageNumber, total),\n });\n setInitializingOn(false);\n }\n\n function callbackFetchError(message) {\n xhrFetch = null;\n setFetchError(message);\n setInitializingOn(false);\n }\n\n function callbackError(data) {\n callbackFetchError(\n `Nie udaÅ‚o siÄ™ pobrać listy uprawnieÅ„. ${translateErrorMessage(data.message)}`);\n }\n\n function callbackIncorrectStatus(status) {\n if (status === 403) {\n callbackFetchError(\n 'Nie masz uprawnieÅ„ do pobrania listy uprawnieÅ„.');\n setIs403error(true);\n return\n }\n callbackFetchError(\n `Nie udaÅ‚o siÄ™ pobrać listy uprawnieÅ„. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n );\n }\n\n setInitializingOn(true);\n setFetchError(null);\n xhrFetch = fetchApi(\n url, 'GET', {}, {\n limit: PAGINATED_BY,\n page: pageNumber,\n ...additionalFetchData\n },\n callbackSuccess, callbackError, callbackIncorrectStatus\n );\n return () => {\n if (xhrFetch !== null) {xhrFetch.abort()}\n }\n }, [additionalFetchData, isImplementationLevelType, pageNumber, url]);\n\n function handleChangePage(next=true) {\n setPageNumber(prev => next ? prev + 1 : Math.max(prev -1, 1));\n }\n\n const { permissions } = useContext(UserContext);\n\n let hideAddAdministrationPermissionButton = false;\n if (!!data) {\n if (isImplementationLevelType) {\n hideAddAdministrationPermissionButton =\n !permissions.addImplementationLevelPermission;\n } else {\n const permissionsNames = [\n 'contentAdministration',\n 'implementationLevelsDictionaryAdministration',\n 'usersAdministration'\n ];\n if (hideAddPermissionButtonIfFullList) {\n // check if permission list is full\n const setPermissions = data.permissions.map(perm => perm.type);\n let permissionsToSet = [];\n for (let permissionName of permissionsNames) {\n if (!setPermissions.includes(permissionName)) {\n permissionsToSet.push(permissionName);\n }\n }\n if (!permissionsToSet.length) {\n hideAddAdministrationPermissionButton = true;\n }\n } else {\n // check if at least one permission is set\n const mapDict = {\n contentAdministration: 'contentPermissionsManagement',\n implementationLevelsDictionaryAdministration:\n 'implementationLevelsDictionaryPermissionsManagement',\n usersAdministration: 'usersPermissionsManagement',\n };\n let notSetPermissionsValues = [];\n for (let permissionName of permissionsNames) {\n notSetPermissionsValues = [\n ...notSetPermissionsValues,\n ...Object.values(permissions[mapDict[permissionName]])\n ];\n }\n hideAddAdministrationPermissionButton =\n !notSetPermissionsValues.includes(true);\n }\n }\n }\n\n return (\n <Container>\n <GridCustom fullwidth>\n <Text tag=\"h2\" mainHeader>{title}</Text>\n {withHistory && !is403error && (\n <GridCustom flexTop>\n <ButtonStyled lite onClick={onOpenHistory}>\n Historia zmian\n </ButtonStyled>\n </GridCustom>\n )}\n </GridCustom>\n {initializingOn\n ? <Loader />\n : (fetchError\n ? <Text error role=\"alert\">{fetchError}</Text>\n : (\n <>\n {data.total === 0\n ? <Text error>Brak uprawnieÅ„</Text>\n : (\n <TableCustom\n tableHeaderList={tableHeaderList}>\n {data.permissions.map(object => (\n <RowComponent\n isImplementationLevelType={isImplementationLevelType}\n key={isImplementationLevelType\n ? getRegionOrInstitutionCode(\n object.programme || {},\n object.priority || {},\n object.activity || {},\n object.region || null,\n object.institution || null,\n object.perspective || null\n )\n : object.type\n }\n permission={object}\n {...props} />\n ))}\n </TableCustom>\n )\n }\n {data.total > PAGINATED_BY && (\n <Pagination\n currentPage={pageNumber}\n hasNext={data.hasNext}\n hasPrev={data.hasPrev}\n handleChangePage={handleChangePage} />\n )}\n </>\n )\n )\n }\n {!hideAddAdministrationPermissionButton && !is403error && (\n <ButtonStyled\n add\n onClick={e => {\n onOpenForm();\n e.currentTarget.blur();\n }}>\n Dodaj uprawnienia\n </ButtonStyled>\n )}\n </Container>\n )\n};\n","import React from 'react';\n\nimport { ButtonStyled, MoreOptionsButton } from '../../common';\n\n\nexport const PermissionsMoreOptionButton = ({\n onOpenHistory, onOpenUserList\n}) => {\n return (\n <MoreOptionsButton\n className=\"permissions__more-options\"\n menuAriaLabel=\"Otwórz menu: Lista użytkowników lub historia zmian\"\n >\n <ul className=\"permissions__more-options-list\">\n <li>\n <ButtonStyled onClick={onOpenUserList}>\n Lista użytkowników\n </ButtonStyled>\n </li>\n <li>\n <ButtonStyled onClick={onOpenHistory}>\n Historia zmian\n </ButtonStyled>\n </li>\n </ul>\n </MoreOptionsButton>\n)\n};\n\n","import React, { Fragment, useEffect, useState } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport { translateErrorMessage } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { Button } from '@rmwc/button';\nimport { LoaderIcon, Text } from '../../common';\nimport { PermissionsMoreOptionButton } from './PermissionsMoreOptionButton';\n\n\nconst OBJECT_TYPE_DICT = {\n programme: {\n buttonLabel: 'osi',\n dataObjectName: 'priorities',\n url: API_URLS.priorities,\n },\n priority: {\n buttonLabel: 'dziaÅ‚aÅ„',\n dataObjectName: 'activities',\n url: API_URLS.activities,\n },\n subactivity: {\n buttonLabel: 'regionów',\n dataObjectName: 'regions',\n url: API_URLS.regions,\n },\n activity: {\n buttonLabel: 'instytucji',\n dataObjectName: 'institutions',\n url: API_URLS.institutions,\n },\n}\n\n\nexport const PermissionListImplementationLevelCellProgrammePriorityActivity = ({\n fullPermission,\n hasRegions,\n object,\n objectType,\n onSetActiveHistoryPermission,\n onSetActiveUsersPermission, ...props\n}) => {\n const [initializationOn, setInitializationOn] = useState(true);\n const [isOpen, setIsOpen] = useState(false);\n const [subObjects, setSubObjects] = useState(null);\n const [fetchError, setFetchError] = useState(null);\n\n const typeDict = OBJECT_TYPE_DICT[objectType];\n\n useEffect(() => {\n setFetchError(null);\n if (!isOpen || subObjects !== null) { return }\n setInitializationOn(true);\n\n function callbackSuccess(data) {\n xhrFetch = null;\n setSubObjects(data[typeDict.dataObjectName]);\n setInitializationOn(false);\n }\n\n function callbackError(data) {\n xhrFetch = null;\n setFetchError(\n `Nie udaÅ‚o siÄ™ pobrać danych. ${translateErrorMessage(data.message)}`\n );\n setInitializationOn(false);\n }\n\n function callbackIncorrectStatus(status) {\n xhrFetch = null;\n setFetchError(\n `Nie udaÅ‚o siÄ™ pobrać danych. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n );\n setInitializationOn(false);\n }\n\n let xhrFetch = fetchApi(\n typeDict.url.getUrl(object.id), 'GET', {}, {},\n callbackSuccess, callbackError, callbackIncorrectStatus\n );\n\n return () => {\n if (xhrFetch !== null) {xhrFetch.abort()}\n }\n }, [isOpen, object.id, subObjects, typeDict]);\n\n const permissionForActionDict = {\n isImplementationLevelType: true,\n permission: fullPermission\n };\n return (\n <>\n <div className=\"permissions__level-row\">\n <PermissionsMoreOptionButton\n onOpenHistory={() => onSetActiveHistoryPermission(\n permissionForActionDict\n )}\n onOpenUserList={() => onSetActiveUsersPermission(\n permissionForActionDict\n )} />\n <Text className={props.isMainLevel ? 'permissions__main-name' : 'permissions__indented'}>{object.code} {object.name}\n {isOpen\n ? (\n <Button\n className=\"permissions__show-less\"\n icon='keyboard_arrow_up'\n label={`zwiÅ„ listÄ™ ${typeDict.buttonLabel}`}\n onClick={() => setIsOpen(false)}\n />\n )\n : (\n <Button\n className=\"permissions__show-more\"\n icon='keyboard_arrow_down'\n label={`rozwiÅ„ listÄ™ ${typeDict.buttonLabel}`}\n onClick={() => setIsOpen(true)}\n />\n )\n }\n </Text>\n </div>\n {isOpen && (\n <div className=\"permissions__level-list\">\n {initializationOn\n ? <LoaderIcon />\n : (\n <>\n {subObjects !== null && subObjects.map(obj => (\n <Fragment key={obj.id}>\n {objectType === 'programme' && (\n <PermissionListImplementationLevelCellProgrammePriorityActivity\n fullPermission={{...fullPermission, priority: obj}}\n hasRegions={hasRegions}\n isMainLevel={false}\n object={obj}\n objectType=\"priority\"\n onSetActiveHistoryPermission={onSetActiveHistoryPermission}\n onSetActiveUsersPermission={onSetActiveUsersPermission} />\n )}\n {objectType === 'priority' && (\n <PermissionListImplementationLevelCellProgrammePriorityActivity\n fullPermission={{...fullPermission, activity: obj}}\n hasRegions={hasRegions}\n isMainLevel={false}\n object={obj}\n objectType={hasRegions ? 'subactivity' : 'activity'}\n onSetActiveHistoryPermission={onSetActiveHistoryPermission}\n onSetActiveUsersPermission={onSetActiveUsersPermission} />\n )}\n {['activity', 'subactivity'].includes(objectType) && (\n <div className=\"permissions__level-row permissions__level-row--deeper\">\n <PermissionsMoreOptionButton\n onOpenHistory={() => onSetActiveHistoryPermission({\n isImplementationLevelType: true,\n permission: {\n ...fullPermission,\n [objectType === 'activity' ? 'institution' : 'region']: obj\n }\n })}\n onOpenUserList={() => onSetActiveUsersPermission({\n isImplementationLevelType: true,\n permission: {\n ...fullPermission,\n [objectType === 'activity' ? 'institution' : 'region']: obj\n }\n })}\n />\n <Text className=\"permissions__indented\">{obj.code} {obj.name}</Text>\n </div>\n )}\n </Fragment>\n ))}\n {subObjects !== null && !subObjects.length && <Text error className=\"text--error\">Lista jest pusta.</Text>}\n {fetchError !== null && <Text error>{fetchError}</Text>}\n </>\n )\n }\n </div>\n )} \n </>\n )\n};\n","import React from 'react';\n\nimport { hasPerspectiveRegions } from '../../../helpers';\nimport { Text } from '../../common';\nimport {\n PermissionListImplementationLevelCellProgrammePriorityActivity\n} from './PermissionListImplementationLevelCellProgrammePriorityActivity';\nimport { PermissionsMoreOptionButton } from './PermissionsMoreOptionButton';\n\n\nexport const PermissionListImplementationLevelCell = ({\n permission, onSetActiveHistoryPermission, onSetActiveUsersPermission\n}) => {\n const {\n perspective = null,\n programme = null,\n priority = null,\n activity = null,\n institution = null,\n region = null\n } = permission;\n\n const hasRegions = hasPerspectiveRegions(perspective);\n const theLowestLevel = hasRegions ? region : institution;\n\n // region/institution level\n if ([programme, priority, activity, theLowestLevel].every(el => el !== null)) {\n const permissionForActionDict = {\n isImplementationLevelType: true,\n permission: {\n perspective,\n programme,\n priority,\n activity,\n [hasRegions ? 'region' : 'institution']: theLowestLevel\n },\n };\n return (\n <>\n <Text>{programme.code} {programme.name}</Text>\n <div className=\"permissions__level-row\">\n <Text className=\"permissions__indented permissions__indented--on-start\">\n {priority.code} {priority.name}\n </Text>\n </div>\n <div className=\"permissions__level-row\">\n <Text className=\"permissions__indented permissions__indented--on-start\">\n {activity.code} {activity.name}\n </Text>\n </div>\n <div className=\"permissions__level-row\">\n <PermissionsMoreOptionButton\n onOpenHistory={() => onSetActiveHistoryPermission(\n permissionForActionDict)}\n onOpenUserList={() => onSetActiveUsersPermission(\n permissionForActionDict)} />\n <Text className=\"permissions__main-name\">\n {theLowestLevel.code} {theLowestLevel.name}\n </Text>\n </div>\n </>\n )\n }\n\n // activity level\n if (\n [programme, priority, activity].every(el => el !== null) &&\n theLowestLevel === null\n ) {\n return (\n <>\n <Text>{programme.code} {programme.name}</Text>\n <PermissionListImplementationLevelCellProgrammePriorityActivity\n fullPermission={permission}\n hasRegions={hasRegions}\n isMainLevel={true}\n object={activity}\n objectType={hasRegions ? 'subactivity' : 'activity'}\n onSetActiveHistoryPermission={onSetActiveHistoryPermission}\n onSetActiveUsersPermission={onSetActiveUsersPermission} />\n </>\n )\n }\n\n // priority level\n if (\n [programme, priority].every(el => el !== null) &&\n [activity, theLowestLevel].every(el => el === null)\n ) {\n return (\n <>\n <Text>{programme.code} {programme.name}</Text>\n <PermissionListImplementationLevelCellProgrammePriorityActivity\n fullPermission={permission}\n hasRegions={hasRegions}\n isMainLevel={true}\n object={priority}\n objectType=\"priority\"\n onSetActiveHistoryPermission={onSetActiveHistoryPermission}\n onSetActiveUsersPermission={onSetActiveUsersPermission} />\n </>\n )\n }\n\n // programme level\n if (\n programme !== null &&\n [priority, activity, theLowestLevel].every(el => el === null)\n ) {\n return (\n <PermissionListImplementationLevelCellProgrammePriorityActivity\n fullPermission={permission}\n hasRegions={hasRegions}\n isMainLevel={true}\n object={programme}\n objectType=\"programme\"\n onSetActiveHistoryPermission={onSetActiveHistoryPermission}\n onSetActiveUsersPermission={onSetActiveUsersPermission} />\n )\n }\n return null\n};\n","import React from 'react';\nimport { DataTableCell, DataTableRow } from '@rmwc/data-table';\n\nimport {\n PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT,\n translatePermissionName\n} from '../../../helpers_permissions';\nimport { Text } from '../../common';\nimport {\n PermissionListImplementationLevelCell\n} from './PermissionListImplementationLevelCell';\nimport { PermissionsMoreOptionButton } from './PermissionsMoreOptionButton';\n\n\nexport const PermissionListRow = ({\n isImplementationLevelType, permission, onSetActiveHistoryPermission,\n onSetActiveUsersPermission\n}) => {\n\n const permissions = (\n permission.permissions || {}).permissionsAdministration || {};\n const permissionForActionDict = {\n isImplementationLevelType: false,\n permission: {type: permission.type},\n };\n return (\n <DataTableRow>\n <DataTableCell className=\"permissions__col-permissions-list\">\n {isImplementationLevelType\n ? <PermissionListImplementationLevelCell\n permission={permission}\n onSetActiveHistoryPermission={onSetActiveHistoryPermission}\n onSetActiveUsersPermission={onSetActiveUsersPermission} />\n : (\n <div className=\"permissions__level-row\">\n <PermissionsMoreOptionButton\n onOpenHistory={() => onSetActiveHistoryPermission(\n permissionForActionDict\n )}\n onOpenUserList={() => onSetActiveUsersPermission(\n permissionForActionDict\n )} />\n <Text>{PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT[permission.type]}</Text>\n </div>\n )\n }\n </DataTableCell>\n <DataTableCell>\n {(permissions.previewListUsersAuthorized || false) &&\n <Text className=\"permissions__legend permissions__legend--users\">\n {translatePermissionName('previewListUsersAuthorized')}\n </Text>\n }\n {(permissions.functionalityManagement || false) &&\n <Text className=\"permissions__legend permissions__legend--projects\">\n {translatePermissionName(\n isImplementationLevelType\n ? 'functionalityManagementImplementationLevel'\n : 'functionalityManagement'\n )}\n </Text>\n }\n {(permissions.permissionsManagement || false) &&\n <Text className=\"permissions__legend permissions__legend--permissions\">\n {translatePermissionName('permissionsManagement')}\n </Text>\n }\n </DataTableCell>\n </DataTableRow>\n )\n};\n","import React from 'react';\nimport { DataTableCell, DataTableRow } from '@rmwc/data-table';\n\nimport {\n PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT\n} from '../../../helpers_permissions';\n\n\nconst OPERATION_TYPE_SERIALIZERS = {\n permissionsDenied: 'Odebrano uprawnienia',\n permissionsGranted: 'Przyznano uprawnienia',\n permissionsModified: 'Zmieniono zakres uprawnieÅ„',\n};\n\n\nexport const PermissionsHistoryListRow = ({\n event, isImplementationLevelType, mode\n}) => {\n return (\n <DataTableRow>\n <DataTableCell>{event.addedAt || ''}</DataTableCell>\n <DataTableCell>\n {mode === 'userHistory'\n ? isImplementationLevelType\n ? event.implementationLevelName\n : (PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT[event.context] ||\n event.context)\n : event.authorizedUserEmail\n }\n </DataTableCell>\n <DataTableCell>\n {OPERATION_TYPE_SERIALIZERS[event.operationType] ||\n event.operationType}\n </DataTableCell>\n <DataTableCell>{(event.addedBy || {}).email || ''}</DataTableCell>\n </DataTableRow>\n )\n};\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport { checkHasNext, checkHasPrev, dateToString } from '../../../helpers';\nimport {\n getSerializedObject,\n translateErrorMessage\n} from '../../../serializers';\nimport {\n ButtonStyled,\n DateCalendar,\n DialogCustom,\n FieldWithLabel,\n GridCustom,\n Loader,\n Pagination,\n TableCustom,\n Text,\n TextFieldCustom\n} from '../../common';\nimport { PermissionsHistoryListRow } from './PermissionsHistoryListRow';\n\n\nconst PAGINATED_BY = 20;\n\n\nexport const PermissionsHistory = ({dialogTitle = '', ...props}) => {\n const [initializingOn, setInitializingOn] = useState(true);\n const [requestId, setRequestId] = useState(null);\n const [pageNumber, setPageNumber] = useState(1);\n const [fetchError, setFetchError] = useState(null);\n const [filters, setFilters] = useState({\n addedAtFrom: '',\n addedAtTo: '',\n addedByEmail: '',\n });\n const [data, setData] = useState(null);\n const [isPickerOpen, setIsPickerOpen] = useState(false);\n\n useEffect(() => {\n setRequestId(1);\n }, []);\n\n useEffect(() => {\n setRequestId(prevValue => prevValue + 1);\n }, [pageNumber]);\n\n function getHistory() {\n if (requestId === null) { return }\n let xhrFetch = null;\n\n function callbackSuccess(data) {\n xhrFetch = null;\n const { total } = data.meta;\n setData({\n events: getSerializedObject(\n data, {mapToCamelCaseName: true}).permissionsHistory || [],\n total: total,\n hasPrev: checkHasPrev(pageNumber),\n hasNext: checkHasNext(PAGINATED_BY, pageNumber, total),\n });\n setInitializingOn(false);\n }\n\n function callbackFetchError(message) {\n xhrFetch = null;\n setFetchError(message);\n setInitializingOn(false);\n }\n\n function callbackError(data) {\n callbackFetchError(\n `Nie udaÅ‚o siÄ™ pobrać historii uprawnieÅ„. ${translateErrorMessage(data.message)}`\n );\n }\n\n function callbackIncorrectStatus(status) {\n callbackFetchError(status === 403\n ? 'Nie masz uprawnieÅ„ do przeglÄ…dania historii.'\n : `Nie udaÅ‚o siÄ™ pobrać historii uprawnieÅ„. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n );\n }\n\n setInitializingOn(true);\n setFetchError(null);\n xhrFetch = fetchApi(\n props.url, 'GET', {}, {\n authorized: props.userId, limit: PAGINATED_BY,\n page: pageNumber, ...filters,\n ...(props.additionalFetchData || {})\n },\n callbackSuccess, callbackError, callbackIncorrectStatus\n );\n return () => {\n if (xhrFetch !== null) {xhrFetch.abort()}\n }\n }\n useEffect(getHistory, [requestId, ]);\n\n function handleChangeFilter(name, value) {\n setFilters(prevValue => ({...filters, [name]: value}));\n }\n\n function handleChangePage(next=true) {\n setPageNumber(prev => next ? prev + 1 : Math.max(prev -1, 1));\n }\n\n function handleCalendarOpen() {\n setIsPickerOpen(true)\n }\n\n function handleCalendarClose() {\n setIsPickerOpen(false)\n }\n\n function handleEscPress(event) {\n if (event.keyCode === 27) {\n if (isPickerOpen) {\n event.nativeEvent.stopImmediatePropagation();\n } else {\n props.onClose();\n }\n }\n }\n\n const addedAtFromRef = useRef();\n const addedAtToRef = useRef();\n const addedAtFrom = !!filters.addedAtFrom\n ? new Date(filters.addedAtFrom)\n : '';\n const addedAtTo = !!filters.addedAtTo ? new Date(filters.addedAtTo) : '';\n\n return (\n <DialogCustom\n className=\"dialog-long-content\"\n dialogTitle={dialogTitle}\n onClose={props.onClose}\n onKeyDown={handleEscPress}\n >\n <Text>Zakres historii</Text>\n <GridCustom fullwidth flexTop flexM className=\"permissions__history\">\n {/* Empty div for WCAG purpose: prevents autofocus of the first calendar field */}\n <div tabIndex=\"0\"></div>\n <FieldWithLabel\n inputRef={addedAtFromRef}\n label=\"od\"\n tag=\"label\">\n <DateCalendar\n dateName=\"Od\"\n disabled={initializingOn}\n maxDate={addedAtTo || undefined}\n parentRef={addedAtFromRef}\n value={addedAtFrom}\n onCalendarOpen={handleCalendarOpen}\n onCalendarClose={handleCalendarClose}\n onChange={date => handleChangeFilter('addedAtFrom', dateToString(date))} />\n </FieldWithLabel>\n <FieldWithLabel\n inputRef={addedAtToRef}\n label=\"do\"\n tag=\"label\">\n <DateCalendar\n dateName=\"Do\"\n disabled={initializingOn}\n minDate={addedAtFrom || undefined}\n parentRef={addedAtToRef}\n value={addedAtTo}\n onCalendarOpen={handleCalendarOpen}\n onCalendarClose={handleCalendarClose}\n onChange={date => handleChangeFilter('addedAtTo', dateToString(date))} />\n </FieldWithLabel>\n <FieldWithLabel\n label=\"wprowadzajÄ…cy\"\n labelFor=\"filters_addedByEmail_id\"\n tag=\"label\">\n <TextFieldCustom\n aria-label={`WprowadzajÄ…cy, maksymalna liczba znaków: 100. Wpisano ${filters.addedByEmail.length} znaków.`}\n aria-valuemax={100}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"wprowadzajÄ…cy\"\n disabled={initializingOn}\n id=\"filters_addedByEmail_id\"\n maxLength={100}\n value={filters.addedByEmail}\n onChange={ev => handleChangeFilter('addedByEmail', ev.target.value)}\n onClear={ev => handleChangeFilter('addedByEmail', '')} />\n </FieldWithLabel>\n <ButtonStyled\n className=\"permissions__history-filter-btn\"\n disabled={initializingOn}\n lite\n onClick={() => {\n if (pageNumber > 1) {\n setPageNumber(1);\n } else {\n setRequestId(prevValue => prevValue + 1)\n }\n }}>\n Filtruj\n </ButtonStyled>\n </GridCustom>\n {initializingOn\n ? <Loader />\n : (fetchError\n ? <Text error>{fetchError}</Text>\n : (\n <>\n {data.total === 0\n ? <Text error>Historia jest pusta</Text>\n : (\n <TableCustom\n tableHeaderList={props.tableHeaderList}>\n {data.events.map(event => (\n <PermissionsHistoryListRow\n event={event}\n isImplementationLevelType={\n props.isImplementationLevelType\n }\n key={event.id}\n mode={props.mode} />\n ))}\n </TableCustom>\n )\n }\n {data.total > PAGINATED_BY && (\n <Pagination\n currentPage={pageNumber}\n disabled={initializingOn}\n hasNext={data.hasNext}\n hasPrev={data.hasPrev}\n handleChangePage={handleChangePage} />\n )}\n </>\n )\n )\n }\n <GridCustom flexEnd>\n <ButtonStyled primary onClick={props.onClose}>\n Zamknij\n </ButtonStyled>\n </GridCustom>\n </DialogCustom>\n )\n};\n","import React, { Fragment } from 'react';\n\nimport {\n getGrantedPermissionsForGroup,\n getGroupChecked,\n translatePermissionName\n} from '../../../helpers_permissions';\nimport { Text } from '../../common';\n\n\nexport const UserPermissionsListGrantedCell = ({\n groupNameList, isImplementationLevelType, permissions\n}) => {\n return (\n <>\n {groupNameList.map(groupName => {\n if (getGroupChecked(permissions, groupName)) {\n return (\n <Text className=\"permissions__main-name\" key={groupName}>\n {translatePermissionName(groupName)} - peÅ‚ne uprawnienia\n </Text>\n )\n }\n\n const groupGranted = getGrantedPermissionsForGroup(\n permissions[groupName]);\n if (!groupGranted.length) { return null }\n\n return (\n <Fragment key={groupName}>\n <Text className=\"permissions__main-name\">{translatePermissionName(groupName)}</Text>\n {groupGranted.map(permissionName => (\n <Text\n className=\"permissions__indented\"\n key={`${groupName}_${permissionName}`}>\n {translatePermissionName(\n isImplementationLevelType && permissionName === 'functionalityManagement'\n ? 'functionalityManagementImplementationLevel'\n : permissionName\n )}\n </Text>\n ))}\n </Fragment>\n )\n })}\n </>\n )\n};\n","/*\n<DataTableRow>\n <DataTableCell>\n <Text>Lista użytkowników</Text>\n <Text className=\"permissions__level-name\"><b>EFGH - 01</b> Nazwa osi priorytetowej</Text>\n <Text className=\"permissions__sub-name\">Wszystkie dziaÅ‚ania</Text>\n </DataTableCell>\n <DataTableCell>\n <Text className=\"permissions__main-name\">Funkcjonalność - peÅ‚ne uprawnienia</Text>\n <Text>ZarzÄ…dzanie uprawnieniami</Text>\n <Text className=\"permissions__indented\">PodglÄ…d listy uprawnionych użytkowników</Text>\n <Text className=\"permissions__indented\">Dla projektów i naborów</Text>\n </DataTableCell>\n</DataTableRow>\n*/\n\nimport React from 'react';\nimport { DataTableCell, DataTableRow } from '@rmwc/data-table';\n\nimport {\n getImplementationLevelLabels,\n PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT\n} from '../../../helpers_permissions';\nimport { ButtonStyled, Text } from '../../common';\nimport { UserPermissionsListGrantedCell } from './UserPermissionsListGrantedCell';\n\n\nexport const UserPermissionsListRow = ({\n isImplementationLevelType, mode = 'permissionData', permission,\n onSetEditedPermission, onSetRemovedPermission\n}) => {\n /* possible modes:\n permissionData - set the first cell as permission name\n userData - set the first cell as user data (full name and email)\n */\n let implementationLevelLabels = {};\n if (mode==='permissionData' && isImplementationLevelType) {\n implementationLevelLabels = getImplementationLevelLabels(permission);\n }\n\n const { authorized: user = {} } = permission;\n return (\n <DataTableRow>\n <DataTableCell>\n {mode === 'permissionData' && isImplementationLevelType\n ? (\n <>\n <Text className=\"permissions__level-name\">\n <b>{implementationLevelLabels.code}</b> {implementationLevelLabels.name}\n </Text>\n {implementationLevelLabels.description.length > 0 && (\n <Text className=\"permissions__sub-name\">\n {implementationLevelLabels.description}\n </Text>\n )}\n </>\n )\n : <Text>{PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT[permission.type]}</Text>\n }\n {mode === 'userData' && (\n <>\n <Text>{user.forename || ''} {user.surname || ''}</Text>\n <Text className=\"permissions__sub-name\">{user.email || ''}</Text>\n </>\n )}\n </DataTableCell>\n <DataTableCell className=\"permissions__col-permissions-details\">\n {isImplementationLevelType\n ? <UserPermissionsListGrantedCell\n groupNameList={[\n 'projectsEnrollmentsAdministration',\n 'advertisementAdministration',\n 'permissionsAdministration'\n ]}\n isImplementationLevelType={true}\n permissions={permission.permissions} />\n : <UserPermissionsListGrantedCell\n groupNameList={\n permission.type === 'usersAdministration'\n ? [\n 'usersAdministration',\n 'permissionsAdministration'\n ] : permission.type === 'contentAdministration'\n ? [\n 'contentAdministration',\n 'permissionsAdministration'\n ] : [\n 'implementationLevelsDictionaryAdministration',\n 'permissionsAdministration'\n ]\n }\n isImplementationLevelType={false}\n permissions={permission.permissions}\n />\n }\n </DataTableCell>\n <DataTableCell className=\"permissions__col-buttons\">\n {mode === 'userData' && permission.hasHigherLevelPermissions\n ? <Text>Użytkownik ma uprawnienia wyższego poziomu</Text>\n : (\n <>\n {permission.canEdit && (\n <ButtonStyled\n lite\n onClick={() => onSetEditedPermission(\n isImplementationLevelType, permission)}\n >\n Edytuj\n </ButtonStyled>\n )}\n {permission.canDelete && (\n <ButtonStyled\n remove\n onClick={() => onSetRemovedPermission(\n isImplementationLevelType, permission\n )}>\n UsuÅ„\n </ButtonStyled>\n )}\n </>\n )\n }\n </DataTableCell>\n </DataTableRow>\n )\n};\n","import React, { useEffect, useState } from 'react';\nimport { TabBar, Tab } from '@rmwc/tabs';\n\nimport { fetchApi } from '../../../fetch';\nimport { checkHasNext, checkHasPrev } from '../../../helpers';\nimport {\n getSerializedObject,\n translateErrorMessage\n} from '../../../serializers';\nimport {\n ButtonStyled,\n GridCustom,\n Loader,\n Pagination,\n TableCustom,\n Text\n} from '../../common';\nimport { UserPermissionsListRow } from './UserPermissionsListRow';\n\n\nconst PAGINATED_BY = 20;\nconst TAB_INDEXES = {\n direct: 0,\n inherited: 1,\n};\nconst REVERTED_TAB_INDEXES = {\n 0: 'direct',\n 1: 'inherited',\n};\n\n\nfunction getRowKey(objectData, isImplementationLevelType) {\n if (!isImplementationLevelType) {\n return objectData.authorized.id\n }\n let key = objectData.authorized.id;\n for (let implementationLevelName of [\n 'programme', 'priority', 'activity', 'region', 'institution'\n ]) {\n if (objectData[implementationLevelName]?.id) {\n key += `_${objectData[implementationLevelName].id}`;\n }\n }\n return key\n}\n\n\nexport const PermissionUsers = ({\n activeUsersPermission, isImplementationLevelType, onClose, ...props\n}) => {\n const [initializingOn, setInitializingOn] = useState(true)\n const [pageNumber, setPageNumber] = useState(1)\n const [fetchError, setFetchError] = useState(null)\n const [data, setData] = useState(null)\n const [selectedTab, setSelectedTab] = useState(TAB_INDEXES.direct);\n\n function getUsers() {\n let xhrFetch = null;\n\n function callbackSuccess(data) {\n xhrFetch = null;\n const { total } = data.meta;\n setData({\n permissions: getSerializedObject(\n data, {mapToCamelCaseName: true}).permissions || [],\n total: total,\n hasPrev: checkHasPrev(pageNumber),\n hasNext: checkHasNext(PAGINATED_BY, pageNumber, total),\n });\n setInitializingOn(false);\n }\n\n function callbackFetchError(message) {\n xhrFetch = null;\n setFetchError(message);\n setInitializingOn(false);\n }\n\n function callbackError(data) {\n callbackFetchError(\n `Nie udaÅ‚o siÄ™ pobrać listy użytkowników. ${translateErrorMessage(data.message)}`\n );\n }\n\n function callbackIncorrectStatus(status) {\n callbackFetchError(status === 403\n ? `Nie masz uprawnieÅ„ do przeglÄ…dania listy użytkowników dla tego ${isImplementationLevelType ? 'poziomu wdrożenia' : 'uprawnienia'}.`\n : `Nie udaÅ‚o siÄ™ pobrać listy użytkowników. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n );\n }\n\n setInitializingOn(true);\n setFetchError(null);\n xhrFetch = fetchApi(\n props.url, 'GET', {}, {\n limit: PAGINATED_BY,\n page: pageNumber,\n ...(props.additionalFetchData || {}),\n ...(isImplementationLevelType\n ? {listType: REVERTED_TAB_INDEXES[selectedTab]}\n : {}\n ),\n },\n callbackSuccess, callbackError, callbackIncorrectStatus\n );\n return () => {\n if (xhrFetch !== null) {xhrFetch.abort()}\n }\n }\n useEffect(getUsers, [pageNumber, selectedTab]);\n\n function handleChangePage(next=true) {\n setPageNumber(prev => next ? prev + 1 : Math.max(prev -1, 1));\n }\n\n function handleChangeTab(ev) {\n setPageNumber(1);\n setSelectedTab(ev.detail.index);\n }\n\n return (\n <>\n {isImplementationLevelType &&\n activeUsersPermission.permission.priority &&\n (\n <TabBar\n activeTabIndex={selectedTab}\n onActivate={handleChangeTab}>\n <Tab label=\"Przyznane bezpoÅ›rednio\" />\n <Tab label=\"Dziedziczone\" />\n </TabBar>\n )\n }\n {initializingOn\n ? <Loader />\n : (fetchError\n ? <Text error>{fetchError}</Text>\n : (\n <>\n {data.total === 0\n ? <Text error>Lista użytkowników jest pusta</Text>\n : (\n <TableCustom\n tableHeaderList={['Użytkownik', \"Uprawnienia\", 'DziaÅ‚ania']}>\n {data.permissions.map(object => (\n <UserPermissionsListRow\n key={getRowKey(object, isImplementationLevelType)}\n isImplementationLevelType={isImplementationLevelType}\n mode=\"userData\"\n permission={{\n ...object,\n ...(isImplementationLevelType\n ? {}\n : {type: activeUsersPermission.permission.type}\n )\n }}\n onSetEditedPermission={props.onSetEditedPermission}\n onSetRemovedPermission={props.onSetRemovedPermission} />\n ))}\n </TableCustom>\n )\n }\n {data.total > PAGINATED_BY && (\n <Pagination\n currentPage={pageNumber}\n disabled={initializingOn}\n hasNext={data.hasNext}\n hasPrev={data.hasPrev}\n handleChangePage={handleChangePage} />\n )}\n </>\n )\n )\n }\n <GridCustom flexEnd>\n <ButtonStyled primary onClick={onClose}>\n Zamknij\n </ButtonStyled>\n </GridCustom>\n </>\n )\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport {\n getSerializedErrorsFromServer,\n translateErrorMessage\n} from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n CancelSaveButtonsRow,\n FieldWithLabel,\n GridCustom,\n Text,\n TextFieldCustom\n} from '../../common';\n\n\nconst ADD_PERMISSION_MODE_CONTEXTS = {\n administration: ['contentAdministration', 'usersAdministration'],\n implementationLevel: ['adProjectEnrollmentAdministration'],\n}\n\n\nexport const SearchUserForm = ({addPermissionMode, ...props}) => {\n const [searchingOn, setSearchingOn] = useState(false);\n const [fetchError, setFetchError] = useState(null);\n const [errors, setErrors] = useState({});\n const [email, setEmail] = useState('');\n const [identifier, setIdentifier] = useState('');\n\n function save() {\n if (!searchingOn) { return }\n let xhrFetch = null;\n\n function callbackSuccess(data) {\n xhrFetch = null;\n props.onFindUser(data.user || null);\n }\n\n function callbackFetchError(message) {\n xhrFetch = null;\n setFetchError(`Nie udaÅ‚o siÄ™ wyszukać użytkownika. ${message}`);\n setSearchingOn(false);\n }\n\n function callbackError(data) {\n callbackFetchError(translateErrorMessage(data.message));\n }\n\n function callbackIncorrectStatus(status) {\n let message = '';\n switch (status) {\n case 403:\n message = `Nie masz uprawnieÅ„ do nadawania uprawnieÅ„ w obszarze ${addPermissionMode === 'administration'\n ? 'Administracji'\n : 'Poziomów wdrożenia'\n }.`;\n break;\n case 404:\n message = 'Użytkownik o podanych danych nie istnieje.';\n break;\n default:\n message = `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`;\n }\n callbackFetchError(message);\n }\n\n function callbackShowErrors(errors) {\n xhrFetch = null;\n setErrors(getSerializedErrorsFromServer(\n errors, {doNotTranslateNames: true}\n ));\n setSearchingOn(false);\n }\n\n setSearchingOn(true);\n setFetchError(null);\n setErrors({});\n let fetchData = {\n contexts: ADD_PERMISSION_MODE_CONTEXTS[addPermissionMode],\n };\n if (email.length) {\n fetchData['email'] = email;\n }\n if (identifier.length) {\n fetchData['identifier'] = identifier;\n }\n\n xhrFetch = fetchApi(\n API_URLS.usersFindUser.url, 'GET', {}, fetchData,\n callbackSuccess, callbackError, callbackIncorrectStatus,\n callbackShowErrors\n );\n return () => {\n if (xhrFetch !== null) {xhrFetch.abort()}\n }\n }\n useEffect(save, [searchingOn]);\n\n const isEmailInvalid = (errors.email || []).length > 0;\n const isIdentifierInvalid = (errors.identifier || []).length > 0;\n\n return (\n <>\n <Text>Informacje o użytkowniku</Text>\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"Adres e-mail\"\n labelFor=\"email_id\"\n tag=\"label\">\n <TextFieldCustom\n characterCount\n disabled={searchingOn}\n fullwidth\n id=\"email_id\"\n invalid={isEmailInvalid}\n maxLength={200}\n value={email}\n onChange={ev => setEmail(ev.target.value)}\n onClear={ev => setEmail('')} />\n {isEmailInvalid &&\n <ul id=\"email_error\">\n {errors.email.map((e, i) =>\n <Text error key={i} tag=\"li\">{e}</Text>\n )}\n </ul>\n }\n </FieldWithLabel>\n <FieldWithLabel\n label=\"Identyfikator\"\n labelFor=\"identifier_id\"\n tag=\"label\">\n <TextFieldCustom\n characterCount\n disabled={searchingOn}\n fullwidth\n id=\"identifier_id\"\n invalid={isIdentifierInvalid}\n maxLength={100}\n value={identifier}\n onChange={ev => setIdentifier(ev.target.value)}\n onClear={ev => setIdentifier('')} />\n {isIdentifierInvalid &&\n <ul id=\"identifier_error\">\n {errors.identifier.map((e, i) =>\n <Text error key={i} tag=\"li\">{e}</Text>\n )}\n </ul>\n }\n </FieldWithLabel>\n </GridCustom>\n <CancelSaveButtonsRow\n disabled={searchingOn}\n disabledSave={!email.length && ! identifier.length}\n saveText=\"Wybierz użytkownika\"\n onCancel={props.onCancel}\n onSave={() => setSearchingOn(true)} />\n {fetchError !== null && <Text error className=\"dialog__global-error\">{fetchError}</Text>}\n {(errors.allFields || []).length > 0 &&\n <ul id=\"form_error\">\n {errors.allFields.map((e, i) =>\n <Text error key={i} tag=\"li\">{e}</Text>\n )}\n </ul>\n }\n </>\n )\n};\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { URLS } from '../../../urls/frontend';\nimport {\n FieldWithLabel,\n GridCustom,\n Text\n} from '../../common';\n\n\nexport const UserHeader = ({ user, withButtons = true }) => {\n return (\n <>\n <GridCustom fullwidth>\n <Text tag=\"h2\" mainHeader>\n {user.imie || user.forename} {user.nazwisko || user.surname}\n </Text>\n {withButtons && (\n <GridCustom flexTop>\n <Link\n className=\"mdc-button mdc-button--unelevated btn--cancel\"\n to={URLS.users.path}>\n Wróć do listy użytkowników\n </Link>\n <a\n className=\"mdc-button mdc-button--unelevated btn--primary\"\n href={URLS.sativaUsersDetails.getUrl(user.identyfikator)}>\n Konto użytkownika\n </a>\n </GridCustom>\n )}\n </GridCustom>\n <GridCustom fullwidth>\n <FieldWithLabel label=\"Adres e-mail\">\n <Text>{user.email}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Identyfikator\">\n <Text>{user.identyfikator || user.identifier}</Text>\n </FieldWithLabel>\n </GridCustom>\n </>\n )\n};\n","import React, { Fragment, useEffect, useState } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\n\nimport {\n checkSinglePermission,\n getGroupChecked,\n getGroupIndeterminate,\n getMainGroupIndeterminate,\n getPermissionErrors,\n getPermissionsValuesDict,\n sortKeysList,\n translatePermissionName\n} from '../../../helpers_permissions';\nimport { usePutFormFetchApi } from '../../../hooks';\nimport {\n CancelSaveButtonsRow,\n FetchErrorWithOkayButton,\n FieldWithLabel,\n Text\n} from '../../common';\n\n\nexport const UserPermissionsFormCommonFields = ({\n additionalFetchData,\n checksSortDict,\n defaultChecksDict,\n disabled, disabledCancelButton, disabledSaveButton,\n editionModeOn,\n existingPermissionData,\n existsErrorOn, existsErrorLabel,\n isImplementationLevelType,\n permissions,\n saveUrl,\n savingOn,\n setAdditionalErrors,\n setEditionModeOn,\n setExistsErrorOn,\n userId,\n onCancel,\n onSavePermissionSuccess,\n onSetSavingOn\n}) => {\n const [checks, setChecks] = useState({...defaultChecksDict});\n\n additionalFetchData = additionalFetchData || {};\n\n const { fetchError, errors, saveBtnText } = usePutFormFetchApi({\n url: saveUrl,\n fetchData: {permission: {\n authorized: parseInt(userId),\n ...checks,\n ...additionalFetchData\n }},\n callbackSuccess: onSavePermissionSuccess,\n callbackObjectExists: () => setExistsErrorOn(true),\n loadingOn: savingOn,\n setLoadingOn: onSetSavingOn,\n method: editionModeOn ? 'PUT' : 'POST',\n defaultSaveBtnText: \"Zapisz uprawnienia\",\n doNotTranslateNames: true,\n message403error: 'Nie masz uprawnieÅ„ do zapisu wybranych uprawnieÅ„. ' +\n 'JeÅ›li uważasz, że to pomyÅ‚ka, odÅ›wież stronÄ™ i spróbuj jeszcze raz.',\n });\n\n const additionalFetchDataValuesAsString = Object.values(\n additionalFetchData).join('');\n function updateExistErrorInParent() {\n setExistsErrorOn(false);\n }\n useEffect(updateExistErrorInParent, [additionalFetchDataValuesAsString]);\n\n function updateAdditionalErrorsInParent() {\n if (!setAdditionalErrors) { return }\n setAdditionalErrors(errors);\n }\n useEffect(updateAdditionalErrorsInParent, [errors]);\n\n function handleCheckAll(ev) {\n const checked = ev.target.checked;\n setChecks(prevValue => {\n let dct = {};\n for (let groupName of Object.keys(prevValue)) {\n dct = {\n ...dct,\n ...getPermissionsValuesDict(\n defaultChecksDict, groupName, checked),\n };\n }\n return dct\n });\n }\n\n function handleCheckGroup(ev, groupName) {\n const checked = ev.target.checked;\n setChecks(prevChecks => ({\n ...prevChecks,\n ...getPermissionsValuesDict(defaultChecksDict, groupName, checked),\n }));\n }\n\n function handleCheckSinglePermission(checked, parent, child) {\n setChecks(prevChecks => ({\n ...prevChecks,\n ...checkSinglePermission(prevChecks, parent, child, checked),\n }));\n }\n\n function handleLoadExistedPermissionData() {\n setChecks(existingPermissionData !== null\n ? existingPermissionData : defaultChecksDict\n );\n setExistsErrorOn(false);\n setEditionModeOn(true);\n }\n\n let groupCheckedValues = {};\n for (let groupName of Object.keys(checks)) {\n groupCheckedValues[groupName] = getGroupChecked(\n checks, groupName);\n }\n\n const permissionErrors = getPermissionErrors(errors);\n\n // These values say if checkboxes have to be disabled\n let functionalityDisabled = false;\n let permissionsDisabled = false;\n if (permissions) {\n functionalityDisabled = !permissions.functionality;\n permissionsDisabled = !permissions.permissions;\n }\n\n function checkDisabledGroup(groupName) {\n if (groupName === 'permissionsAdministration') {\n return permissionsDisabled\n }\n return functionalityDisabled\n }\n\n return (\n <>\n {existsErrorOn && !editionModeOn && (\n <FetchErrorWithOkayButton\n buttonLabel=\"wczytaj i edytuj zapisane uprawnienia\"\n infoMsg\n message={`Istnieje pakiet uprawnieÅ„ dla wybranych powyżej danych. ZmieÅ„ ${existsErrorLabel || 'wybór'} lub`}\n onClickOkay={handleLoadExistedPermissionData} />\n )}\n <FieldWithLabel label=\"Uprawnienia\" tag=\"label\">\n {permissionErrors.length > 0 && permissionErrors.map(\n (e, i) => <Text error key={i}>{e}</Text>\n )}\n <div className=\"permissions__level-main\">\n <Checkbox\n checked={!Object.values(groupCheckedValues).includes(false)}\n disabled={\n functionalityDisabled || permissionsDisabled ||\n disabled || existsErrorOn\n }\n indeterminate={getMainGroupIndeterminate(checks)}\n label={translatePermissionName('all')}\n onChange={handleCheckAll} />\n </div>\n\n {sortKeysList(Object.entries(checks), checksSortDict.groups).map(\n ([groupName_, groupPermissions]) => {\n const groupDisabled = checkDisabledGroup(groupName_);\n return (\n <Fragment key={groupName_}>\n <div className=\"permissions__level-1\">\n <Checkbox\n checked={groupCheckedValues[groupName_] || false}\n disabled={\n groupDisabled || disabled ||\n existsErrorOn\n }\n indeterminate={getGroupIndeterminate(\n checks, groupName_)}\n label={`${translatePermissionName(groupName_)} - peÅ‚ne uprawnienia`}\n onChange={ev => handleCheckGroup(ev, groupName_)} />\n </div>\n {sortKeysList(\n Object.entries(groupPermissions),\n checksSortDict[groupName_]\n ).map(\n ([permissionName_, permissionValue]) => (\n <Fragment key={permissionName_}>\n <div className=\"permissions__level-2\">\n <Checkbox\n checked={checks[groupName_][permissionName_]}\n disabled={\n groupDisabled || disabled ||\n existsErrorOn\n }\n label={translatePermissionName(\n isImplementationLevelType && permissionName_ === 'functionalityManagement'\n ? 'functionalityManagementImplementationLevel'\n : permissionName_\n )}\n onChange={ev => handleCheckSinglePermission(\n ev.target.checked, groupName_, permissionName_\n )} />\n </div>\n </Fragment>\n ))}\n </Fragment>\n )\n }\n )}\n </FieldWithLabel>\n <CancelSaveButtonsRow\n disabled={disabledCancelButton}\n disabledSave={disabledSaveButton}\n saveText={saveBtnText}\n onCancel={onCancel}\n onSave={() => onSetSavingOn(true)} />\n {fetchError !== null && <Text error>{fetchError}</Text>}\n {existsErrorOn && editionModeOn && (\n <FetchErrorWithOkayButton\n buttonLabel=\"OK\"\n message=\"Próbujesz edytować nieistniejÄ…cy zestaw uprawnieÅ„. OdÅ›wież stronÄ™ z listÄ… uprawnieÅ„ i spróbuj ponownie.\"\n onClickOkay={onCancel} />\n )}\n </>\n )\n};\n","import React, { useContext, useEffect, useState } from 'react';\n\nimport { UserContext } from '../../../context/user-context';\nimport { useCheckPermissionExists } from '../../../hooks';\nimport { API_URLS } from '../../../urls/api';\nimport { customSelectStyles } from '../../vars/vars';\nimport { FieldWithLabel, Select, Text } from '../../common';\nimport {\n UserPermissionsFormCommonFields\n} from './UserPermissionsFormCommonFields';\n\n\nconst SCOPES = {\n users: {\n id: 0,\n label: 'ZarzÄ…dzanie użytkownikami',\n permissionType: 'usersAdministration',\n },\n contents: {\n id: 1,\n label: 'ZarzÄ…dzanie treÅ›ciami',\n permissionType: 'contentAdministration',\n },\n dictionaries: {\n id: 2,\n label: 'ZarzÄ…dzanie sÅ‚ownikami poziomów wdrożenia',\n permissionType: 'implementationLevelsDictionaryAdministration',\n },\n};\nconst SELECT_CHOICES = Object.values(SCOPES)\n .map(scope => [scope.id, scope.label, scope.permissionType])\n .sort((s1, s2) => s1.id < s2.id);\nconst DEFAULT_CHOICE = SELECT_CHOICES[0]\nconst USERS_ADMINISTRATION_DEFAULT_CHECKS_DICT = {\n usersAdministration: {\n previewListUsers: false,\n blockingUsers: false,\n },\n permissionsAdministration: {\n previewListUsersAuthorized: false,\n functionalityManagement: false,\n permissionsManagement: false,\n },\n};\nconst CONTENT_ADMINISTRATION_DEFAULT_CHECKS_DICT = {\n contentAdministration: {\n generalContentCookiesRegulation: false,\n statements: false,\n help: false,\n },\n permissionsAdministration: {\n previewListUsersAuthorized: false,\n functionalityManagement: false,\n permissionsManagement: false,\n },\n};\nconst IMPLEMENTATION_LEVELS_DICTIONARY_ADMINISTRATION_DEFAULT_CHECKS_DICT = {\n implementationLevelsDictionaryAdministration: {\n previewData: false,\n editData: false,\n },\n permissionsAdministration: {\n previewListUsersAuthorized: false,\n functionalityManagement: false,\n permissionsManagement: false,\n },\n};\nconst USERS_ADMINISTRATION_CHECKS_SORT_DICT = {\n groups: ['usersAdministration', 'permissionsAdministration'],\n usersAdministration: ['previewListUsers', 'blockingUsers'],\n permissionsAdministration: [\n 'previewListUsersAuthorized', 'functionalityManagement',\n 'permissionsManagement'\n ],\n};\nconst CONTENT_ADMINISTRATION_CHECKS_SORT_DICT = {\n groups: ['contentAdministration', 'permissionsAdministration'],\n contentAdministration: [\n 'generalContentCookiesRegulation', 'statements', 'help'],\n permissionsAdministration: [\n 'previewListUsersAuthorized', 'functionalityManagement',\n 'permissionsManagement'\n ],\n};\nconst IMPLEMENTATION_LEVELS_DICTIONARY_ADMINISTRATION_CHECKS_SORT_DICT = {\n groups: [\n 'implementationLevelsDictionaryAdministration',\n 'permissionsAdministration'\n ],\n implementationLevelsDictionaryAdministration: ['previewData', 'editData'],\n permissionsAdministration: [\n 'previewListUsersAuthorized', 'functionalityManagement',\n 'permissionsManagement'\n ],\n};\nconst EXISTS_ERROR_LABEL = 'NazwÄ™ obszaru administracji';\n\n\nexport const UserPermissionsAdministrationForm = ({\n initialData = null, userId, onCancel, onSavePermissionSuccess\n}) => {\n const [editionModeOn, setEditionModeOn] = useState(initialData !== null);\n const [savingOn, setSavingOn] = useState(false);\n const [selectedScope, setSelectedScope] = useState(null);\n\n function setInitialSelectedScope() {\n // set correct scope\n if (editionModeOn) {\n for (let [id_, label_, permissionType_] of SELECT_CHOICES) {\n if (permissionType_ === initialData.type) {\n setSelectedScope({value:id_, label: label_});\n return\n }\n }\n }\n setSelectedScope({\n value: DEFAULT_CHOICE[0], label: DEFAULT_CHOICE[1]});\n }\n useEffect(setInitialSelectedScope, []);\n\n // this one is set if request for checkboxes values returns 403\n const [permissions403errorOn, setPermissions403errorOn] = useState(false);\n const [existsErrorOn, setExistsErrorOn] = useState(false);\n const [\n checkingExistedPermissionOn, setCheckingExistedPermissionOn\n ]= useState(false);\n\n function callbackSelectedScopeChanging() {\n if (selectedScope === null || editionModeOn) { return }\n setPermissions403errorOn(false);\n setCheckingExistedPermissionOn(true);\n }\n useEffect(callbackSelectedScopeChanging, [selectedScope]);\n\n const { existingPermissionData } = useCheckPermissionExists(\n checkingExistedPermissionOn, setCheckingExistedPermissionOn,\n selectedScope === null ? '' : (SCOPES.users.id === selectedScope.value\n ? API_URLS.usersPermissionsUsersDetails.path\n : SCOPES.contents.id === selectedScope.value\n ? API_URLS.usersPermissionsContentDetails.path\n : API_URLS.usersPermissionsDictionariesDetails.path\n ),\n {}, setExistsErrorOn, setPermissions403errorOn, userId\n );\n\n const { permissions } = useContext(UserContext);\n\n if (selectedScope === null) { return null }\n\n const disabledFields = savingOn || checkingExistedPermissionOn;\n const disabledSaveButton = disabledFields || permissions403errorOn;\n return (\n <>\n <FieldWithLabel label=\"Nazwa obszaru administracji\" tag=\"label\">\n <Select\n aria-label=\"Nazwa obszaru administracji\"\n className=\"select-custom\"\n isDisabled={editionModeOn || savingOn}\n options={SELECT_CHOICES.map(\n choice => ({value: choice[0], label: choice[1]}))}\n screenReaderStatus={() => {return ''}}\n styles={customSelectStyles}\n value={selectedScope}\n onChange={selectedOption => setSelectedScope(selectedOption)} />\n </FieldWithLabel>\n {permissions403errorOn && (\n <Text error role=\"alert\">\n Nie masz uprawnieÅ„ do nadawania uprawnieÅ„ dla wybranego obszaru administracji. ZmieÅ„ obszar administracji.\n </Text>\n )}\n {SCOPES.users.id === selectedScope.value && (\n <UserPermissionsFormCommonFields\n checksSortDict={USERS_ADMINISTRATION_CHECKS_SORT_DICT}\n defaultChecksDict={editionModeOn\n ? (existingPermissionData !== null\n ? existingPermissionData\n : initialData.permissions\n )\n : USERS_ADMINISTRATION_DEFAULT_CHECKS_DICT\n }\n disabled={disabledFields}\n disabledCancelButton={disabledFields}\n disabledSaveButton={disabledSaveButton}\n editionModeOn={editionModeOn}\n existingPermissionData={existingPermissionData}\n existsErrorOn={existsErrorOn}\n existsErrorLabel={EXISTS_ERROR_LABEL}\n permissions={permissions.usersPermissionsManagement}\n saveUrl={API_URLS.usersPermissionsUsers.path}\n savingOn={savingOn}\n setEditionModeOn={setEditionModeOn}\n setExistsErrorOn={setExistsErrorOn}\n userId={userId}\n onCancel={onCancel}\n onSavePermissionSuccess={onSavePermissionSuccess}\n onSetSavingOn={setSavingOn} />\n )}\n {SCOPES.contents.id === selectedScope.value && (\n <UserPermissionsFormCommonFields\n checksSortDict={CONTENT_ADMINISTRATION_CHECKS_SORT_DICT}\n defaultChecksDict={editionModeOn\n ? (existingPermissionData !== null\n ? existingPermissionData\n : initialData.permissions\n )\n : CONTENT_ADMINISTRATION_DEFAULT_CHECKS_DICT\n }\n disabled={disabledFields}\n disabledCancelButton={disabledFields}\n disabledSaveButton={disabledSaveButton}\n editionModeOn={editionModeOn}\n existingPermissionData={existingPermissionData}\n existsErrorOn={existsErrorOn}\n existsErrorLabel={EXISTS_ERROR_LABEL}\n permissions={permissions.contentPermissionsManagement}\n saveUrl={API_URLS.usersPermissionsContent.path}\n savingOn={savingOn}\n setEditionModeOn={setEditionModeOn}\n setExistsErrorOn={setExistsErrorOn}\n userId={userId}\n onCancel={onCancel}\n onSavePermissionSuccess={onSavePermissionSuccess}\n onSetSavingOn={setSavingOn} />\n )}\n {SCOPES.dictionaries.id === selectedScope.value && (\n <UserPermissionsFormCommonFields\n checksSortDict={IMPLEMENTATION_LEVELS_DICTIONARY_ADMINISTRATION_CHECKS_SORT_DICT}\n defaultChecksDict={editionModeOn\n ? (existingPermissionData !== null\n ? existingPermissionData\n : initialData.permissions\n )\n : IMPLEMENTATION_LEVELS_DICTIONARY_ADMINISTRATION_DEFAULT_CHECKS_DICT\n }\n disabled={disabledFields}\n disabledCancelButton={disabledFields}\n disabledSaveButton={disabledSaveButton}\n existingPermissionData={existingPermissionData}\n editionModeOn={editionModeOn}\n existsErrorOn={existsErrorOn}\n existsErrorLabel={EXISTS_ERROR_LABEL}\n permissions={permissions.implementationLevelsDictionaryPermissionsManagement}\n saveUrl={API_URLS.usersPermissionsDictionaries.path}\n savingOn={savingOn}\n setEditionModeOn={setEditionModeOn}\n setExistsErrorOn={setExistsErrorOn}\n userId={userId}\n onCancel={onCancel}\n onSavePermissionSuccess={onSavePermissionSuccess}\n onSetSavingOn={setSavingOn} />\n )}\n </>\n )\n};\n","import React, { useContext, useEffect, useMemo, useState } from 'react';\n\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport { useCheckPermissionExists } from '../../../hooks';\nimport { API_URLS } from '../../../urls/api';\nimport { FieldWithLabel, Text } from '../../common';\nimport { ProjectNumberSelectsWithPerspectives } from '../common';\nimport {\n UserPermissionsFormCommonFields\n} from './UserPermissionsFormCommonFields';\nimport {\n hasPerspectiveInstitutions,\n hasPerspectiveRegions\n} from \"../../../helpers\";\n\n\nconst DEFAULT_CHECKS_DICT = {\n projectsEnrollmentsAdministration: {\n searchNPreviewData: false,\n editData: false,\n },\n advertisementAdministration: {\n searchNPreviewData: false,\n blocking: false,\n editData: false,\n },\n permissionsAdministration: {\n previewListUsersAuthorized: false,\n functionalityManagement: false,\n permissionsManagement: false,\n },\n};\n\nconst CHECKS_SORT_DICT = {\n groups: [\n 'projectsEnrollmentsAdministration',\n 'advertisementAdministration',\n 'permissionsAdministration'\n ],\n projectsEnrollmentsAdministration: ['searchNPreviewData', 'editData'],\n advertisementAdministration: [\n 'searchNPreviewData', 'blocking', 'editData'],\n permissionsAdministration: [\n 'previewListUsersAuthorized', 'functionalityManagement',\n 'permissionsManagement'\n ],\n};\n\n\nfunction serializeImplementationLevel(dataDict) {\n if (!dataDict) { return null } // it can be even 'undefined'\n\n // change id into value according to needed key for implementation level\n let dct = {...dataDict};\n dct['value'] = dct.id;\n delete dct['id'];\n return dct\n};\n\n\nexport const UserPermissionsImplementationLevelFields = ({\n initialData, perspectives, userId, onCancel, onSavePermissionSuccess\n}) => {\n const [editionModeOn, setEditionModeOn] = useState(initialData !== null);\n const [savingOn, setSavingOn] = useState(false);\n const [implementationLevels, setImplementationLevels] = useState(\n {\n perspective: null, programme: null, priority: null, activity: null,\n institution: null, region: null\n });\n const [\n implementationLevelsErrors, setImplementationLevelsErrors\n ] = useState({});\n\n useEffect(() => {\n if (!editionModeOn || !initialData) { return }\n // use initial data if edition mode\n setImplementationLevels({\n perspective: serializeImplementationLevel(initialData.perspective),\n programme: serializeImplementationLevel(initialData.programme),\n priority: serializeImplementationLevel(initialData.priority),\n activity: serializeImplementationLevel(initialData.activity),\n institution: serializeImplementationLevel(initialData.institution),\n region: serializeImplementationLevel(initialData.region),\n });\n }, [editionModeOn, initialData]);\n\n /*\n this one is set if request for permissions for checkboxes or just\n request for checkboxes values returns 403\n */\n const [permissions403errorOn, setPermissions403errorOn] = useState(false);\n // these say if user has permissions for checkboxes groups\n const [\n permissionsForCheckboxes, setPermissionsForCheckboxes\n ] = useState({functionality: true, permissions: true});\n const [\n checkingCheckboxesPermissionOn, setCheckingCheckboxesPermissionOn\n ] = useState(false);\n\n const [existsErrorOn, setExistsErrorOn] = useState(false);\n const [\n checkingExistedPermissionOn, setCheckingExistedPermissionOn\n ] = useState(false);\n\n useEffect(() => {\n setPermissions403errorOn(false);\n if (implementationLevels.programme === null) { return }\n setPermissionsForCheckboxes(\n {functionality: false, permissions: false});\n setCheckingCheckboxesPermissionOn(true);\n }, [implementationLevels]);\n\n const fetchData = useMemo(\n () => {\n let levelNames =\n ['perspective', 'programme', 'priority', 'activity'];\n if (hasPerspectiveRegions(implementationLevels.perspective)) {\n levelNames.push('region');\n }\n if (hasPerspectiveInstitutions(implementationLevels.perspective)) {\n levelNames.push('institution');\n }\n const dataDict = {};\n for (let levelName of levelNames) {\n dataDict[levelName] = implementationLevels[levelName]\n ? implementationLevels[levelName].value : null\n }\n return dataDict\n }, [implementationLevels]);\n\n const { user } = useContext(UserContext);\n const { id: currentUserId } = user;\n\n useEffect(() => {\n if (!checkingCheckboxesPermissionOn) { return }\n // set checkboxes permissions\n let xhrFetch = null;\n\n function callbackPermissionExists(data) {\n xhrFetch = null;\n const permissionsAdministration = (data.permission || {})\n .permissionsAdministration || {};\n const grantedPermissions = {\n functionality:\n permissionsAdministration.functionalityManagement || false,\n permissions:\n permissionsAdministration.permissionsManagement || false,\n };\n setPermissionsForCheckboxes(grantedPermissions);\n setCheckingCheckboxesPermissionOn(false);\n if (!editionModeOn && (\n grantedPermissions.functionality ||\n grantedPermissions.permissions\n )) {\n setCheckingExistedPermissionOn(true);\n }\n }\n\n function callbackPermissionDoesNotExists() {\n xhrFetch = null;\n setCheckingCheckboxesPermissionOn(false);\n }\n\n function callbackPermissionIncorrectStatus(statusCode) {\n xhrFetch = null;\n if (statusCode === 403) {\n setPermissions403errorOn(true);\n }\n callbackPermissionDoesNotExists();\n }\n\n xhrFetch = fetchApi(\n API_URLS.usersPermissionsAdvertisementsProjectsEnrollmentsDetails.path,\n 'GET', {},\n {\n authorized: currentUserId,\n mode: 'inherited',\n ...fetchData\n },\n callbackPermissionExists, callbackPermissionDoesNotExists,\n callbackPermissionIncorrectStatus\n );\n return () => {\n if (xhrFetch !== null) {\n xhrFetch.abort();\n }\n }\n }, [checkingCheckboxesPermissionOn]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const { existingPermissionData } = useCheckPermissionExists(\n checkingExistedPermissionOn, setCheckingExistedPermissionOn,\n API_URLS.usersPermissionsAdvertisementsProjectsEnrollmentsDetails.path,\n fetchData, setExistsErrorOn, setPermissions403errorOn, userId\n );\n\n function handleChangeProjectNumberSelect(data) {\n setImplementationLevels(prevValue => ({...prevValue, ...data}));\n if (data.programme === null) {\n setExistsErrorOn(false);\n }\n }\n\n const disabledFields = checkingExistedPermissionOn ||\n checkingCheckboxesPermissionOn ||\n savingOn;\n const permission403exists = permissions403errorOn || (\n !checkingCheckboxesPermissionOn &&\n !permissionsForCheckboxes.functionality &&\n !permissionsForCheckboxes.permissions\n )\n\n const implementationLevelsPermissionErrors =\n implementationLevelsErrors.permission || {};\n\n return (\n <>\n <FieldWithLabel label=\"Poziom wdrożenia\" tag=\"label\">\n {(!editionModeOn || implementationLevels.perspective !== null) && (\n <ProjectNumberSelectsWithPerspectives\n activity={implementationLevels.activity}\n activityErrors={implementationLevelsPermissionErrors.activity || []}\n disabled={disabledFields || editionModeOn}\n institution={implementationLevels.institution}\n institutionErrors={implementationLevelsPermissionErrors.institution || []}\n isClearable={true}\n mode=\"permissions\"\n perspective={implementationLevels.perspective}\n perspectiveErrors={implementationLevelsPermissionErrors.perspective || []}\n perspectives={perspectives}\n perspectivesAsSelect={true}\n priority={implementationLevels.priority}\n priorityErrors={implementationLevelsPermissionErrors.priority || []}\n programme={implementationLevels.programme}\n programmeErrors={implementationLevelsPermissionErrors.programme || []}\n region={implementationLevels.region}\n regionErrors={implementationLevelsPermissionErrors.region || []}\n withInstitutionNumber={false}\n onChangeActivity={handleChangeProjectNumberSelect}\n onChangeInstitution={handleChangeProjectNumberSelect}\n onChangePerspective={handleChangeProjectNumberSelect}\n onChangePriority={handleChangeProjectNumberSelect}\n onChangeProgramme={handleChangeProjectNumberSelect}\n onChangeRegion={handleChangeProjectNumberSelect}\n />\n )}\n </FieldWithLabel>\n {checkingCheckboxesPermissionOn && (\n <Text info role=\"alert\">\n Trwa sprawdzanie uprawnieÅ„ dla wybranego poziomu wdrożenia.\n </Text>\n )}\n {permission403exists && (\n <Text error role=\"alert\">\n Nie masz uprawnieÅ„ do nadawania uprawnieÅ„ dla wybranego poziomu wdrożenia.\n {implementationLevels.programme !== null && ' ZmieÅ„ poziom wdrożenia.'}\n </Text>\n )}\n <UserPermissionsFormCommonFields\n additionalFetchData={fetchData}\n checksSortDict={CHECKS_SORT_DICT}\n defaultChecksDict={editionModeOn\n ? (existingPermissionData !== null\n ? existingPermissionData\n : initialData.permissions\n )\n : DEFAULT_CHECKS_DICT\n }\n disabled={disabledFields}\n disabledCancelButton={savingOn}\n disabledSaveButton={disabledFields || permission403exists}\n editionModeOn={editionModeOn}\n existingPermissionData={existingPermissionData}\n existsErrorOn={existsErrorOn}\n existsErrorLabel=\"Poziomy wdrożenia\"\n isImplementationLevelType={true}\n permissions={permissionsForCheckboxes}\n saveUrl={API_URLS.usersPermissionsAdvertisementsProjectsEnrollments.path}\n savingOn={savingOn}\n setAdditionalErrors={setImplementationLevelsErrors}\n setEditionModeOn={setEditionModeOn}\n setExistsErrorOn={setExistsErrorOn}\n userId={userId}\n onCancel={onCancel}\n onSavePermissionSuccess={onSavePermissionSuccess}\n onSetSavingOn={setSavingOn} />\n </>\n )\n};\n","import React from 'react';\n\nimport { serializePerspectiveForSelect } from '../../../helpers';\nimport { useOneTimeFetchApi } from '../../../hooks';\nimport { API_URLS } from '../../../urls/api';\nimport { ButtonStyled, Loader, Text } from '../../common';\nimport {\n UserPermissionsImplementationLevelFields\n} from './UserPermissionsImplementationLevelFields';\n\n\nexport const UserPermissionsImplementationLevelForm = ({\n initialData = null, userId, onCancel, onSavePermissionSuccess\n}) => {\n const {data: dataPerspectives, loadingOn, fetchError} = useOneTimeFetchApi({\n url: API_URLS.perspectives.path,\n fetchData: {mode: 'permissions'},\n serializeFetchDataFunction: serializePerspectiveForSelect,\n });\n\n return loadingOn ? <Loader /> : (fetchError\n ? (\n <>\n <Text error>{fetchError}</Text>\n <ButtonStyled cancel onClick={onCancel}>OK</ButtonStyled>\n </>\n )\n : (\n <UserPermissionsImplementationLevelFields\n initialData={initialData}\n perspectives={dataPerspectives.perspectives}\n userId={userId}\n onCancel={onCancel}\n onSavePermissionSuccess={onSavePermissionSuccess} />\n )\n )\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport {\n getImplementationLevelLabels,\n PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT\n} from '../../../helpers_permissions';\nimport { API_URLS } from '../../../urls/api';\nimport { ButtonStyled, DialogCustom, GridCustom } from '../../common';\n\n\nexport const UserPermissionsRemovingPermissionDialog = ({\n permission, questionSuffix = '', userId,\n onCloseRemovedPermissionDialog, onRemovePermissionSuccess\n}) => {\n\n const [removingPermissionOn, setRemovingPermissionOn] = useState(false);\n const [fetchError, setFetchError] = useState('');\n\n function removePermission() {\n if (!removingPermissionOn) {\n return\n }\n\n let xhrFetch = null;\n\n function callbackSuccess(data) {\n xhrFetch = null;\n // true means removingWithSuccess\n onRemovePermissionSuccess(data, true);\n }\n\n function setError(message) {\n xhrFetch = null;\n setRemovingPermissionOn(false);\n setFetchError(message);\n }\n\n function callbackError(data) {\n setError(`Nie udaÅ‚o siÄ™ usunąć uprawnienia. ${data.message}`);\n }\n\n function callbackIncorrectStatus(status) {\n setError(status === 403\n ? 'Nie masz uprawnieÅ„ do usuniÄ™cia tego uprawnienia.'\n : `Nie udaÅ‚o siÄ™ usunąć uprawnienia. WystÄ…piÅ‚ bÅ‚Ä…d o kodzie ${status}.`\n );\n }\n\n let fetchDataDict = {};\n let url = '';\n if (permission.isImplementationLevelType) {\n const {permission: permission_} = permission;\n for (let name of [\n 'perspective', 'programme', 'priority', 'activity', 'region',\n 'institution'\n ]) {\n fetchDataDict[name] =\n permission_[name] ? permission_[name].id : null;\n }\n url = API_URLS.usersPermissionsAdvertisementsProjectsEnrollments.path;\n } else {\n switch (permission.permission.type) {\n case 'usersAdministration':\n url = API_URLS.usersPermissionsUsers.path;\n break\n case 'contentAdministration':\n url = API_URLS.usersPermissionsContent.path;\n break\n case 'implementationLevelsDictionaryAdministration':\n url = API_URLS.usersPermissionsDictionaries.path;\n break\n default:\n url = '';\n }\n }\n\n xhrFetch = fetchApi(\n url, 'DELETE', {},\n {authorized: parseInt(userId) , ...fetchDataDict},\n callbackSuccess, callbackError,\n callbackIncorrectStatus\n );\n\n return () => {\n if (xhrFetch !== null) {xhrFetch.abort()}\n }\n }\n useEffect(removePermission, [removingPermissionOn]);\n\n let permissionDescription = '';\n if (permission !== null) {\n if (permission.isImplementationLevelType) {\n const implementationLevelLabels = getImplementationLevelLabels(\n permission.permission);\n permissionDescription = `${implementationLevelLabels.code} ${implementationLevelLabels.name}`;\n } else {\n permissionDescription =\n PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT[\n permission.permission.type\n ];\n }\n }\n const isError = fetchError.length > 0;\n return (\n <DialogCustom\n className=\"dialog\"\n dialogTitle={isError\n ? ''\n : `Czy na pewno chcesz usunąć uprawnienie \"${permissionDescription}\"${questionSuffix}?`\n }\n dialogTitleError={isError ? fetchError : ''}\n onClose={onCloseRemovedPermissionDialog}>\n {isError\n ? (\n <GridCustom centerVertical flexEnd>\n <ButtonStyled\n primary\n onClick={onCloseRemovedPermissionDialog}>\n OK\n </ButtonStyled>\n </GridCustom>\n )\n : (\n <GridCustom centerVertical flexEnd>\n <ButtonStyled\n cancel\n disabled={removingPermissionOn}\n onClick={onCloseRemovedPermissionDialog}>\n Anuluj\n </ButtonStyled>\n <ButtonStyled\n disabled={removingPermissionOn}\n remove\n onClick={() => setRemovingPermissionOn(true)}>\n {removingPermissionOn\n ? 'Trwa usuwanie uprawnienia'\n : 'UsuÅ„ uprawnienie'\n }\n </ButtonStyled>\n </GridCustom>\n )\n }\n </DialogCustom>\n )\n};\n","import React, { useContext, useMemo, useState } from 'react';\n\nimport { UserContext } from '../../../context/user-context';\nimport { getPermissionHistoryUsersTitle } from '../../../helpers_permissions';\nimport { API_URLS } from '../../../urls/api';\nimport { DialogCustom, Text } from '../../common';\nimport { PermissionList } from './PermissionList';\nimport { PermissionsHistory } from './PermissionsHistory';\nimport { PermissionListRow } from './PermissionListRow';\nimport { PermissionUsers } from './PermissionUsers';\nimport { SearchUserForm } from './SearchUserForm';\nimport { UserHeader } from './UserHeader';\nimport {\n UserPermissionsAdministrationForm\n} from './UserPermissionsAdministrationForm';\nimport {\n UserPermissionsImplementationLevelForm\n} from './UserPermissionsImplementationLevelForm';\nimport {\n UserPermissionsRemovingPermissionDialog\n} from './UserPermissionsRemovingPermissionDialog';\n\n\nconst ADMINISTRATION_INITIAL_REQUEST_ID = 1;\nconst IMPLEMENTATION_LEVEL_INITIAL_REQUEST_ID = 1;\nconst TABLE_HEADER_LIST = ['Nazwa', 'ZarzÄ…dzanie uprawnieniami'];\n\n\nexport const Permissions = (props) => {\n const { user } = useContext(UserContext);\n const { id: currentUserId } = user;\n\n // possible choices of addPermissionMode: administration, implementationLevel\n const [addPermissionMode, setAddPermissionMode] = useState(null);\n const [userForPermissionAdding, setUserForPermissionAdding] = useState(null);\n\n const [\n administrationPermissionsRequestId,\n setAdministrationPermissionsRequestId\n ] = useState(ADMINISTRATION_INITIAL_REQUEST_ID);\n const [\n implementationLevelPermissionsRequestId,\n setImplementationLevelPermissionsRequestId\n ] = useState(IMPLEMENTATION_LEVEL_INITIAL_REQUEST_ID);\n\n /*\n activeHistoryPermission/activeUsersPermission structure:\n {\n isImplementationLevelType: <true || false>,\n permission: {\n type: <contentAdministration || usersAdministration>, // only if not isImplementationLevelType\n perspective: <dict>, // only if isImplementationLevelType; should be set to distinguish regions and institutions\n programme: <dict>, // only if isImplementationLevelType; at least should be set\n priority: <dict>, // only if isImplementationLevelType; it's possible to not set at all\n activity: <dict>, // only if isImplementationLevelType; it's possible to not set at all\n institution: <dict>, // only if isImplementationLevelType; it's possible to not set at all\n region: <dict>, // only if isImplementationLevelType; it's possible to not set at all\n }\n }\n */\n const [\n activeHistoryPermission,\n setActiveHistoryPermission\n ] = useState(null);\n const [\n activeUsersPermission,\n setActiveUsersPermission\n ] = useState(null);\n const [\n lastActiveUsersPermission,\n setLastActiveUsersPermission\n ] = useState(null);\n\n function handleCloseHistory() {\n setActiveHistoryPermission(null);\n }\n\n function handleCloseUsers() {\n setActiveUsersPermission(null);\n }\n\n function handleOpenHistory(permission) {\n if (activeUsersPermission !== null) {\n handleCloseUsers();\n }\n setActiveHistoryPermission(permission);\n }\n\n function handleOpenUsers(permission) {\n if (activeHistoryPermission !== null) {\n handleCloseHistory();\n }\n setActiveUsersPermission(permission);\n setLastActiveUsersPermission(permission);\n }\n\n const [editedPermission, setEditedPermission] = useState(null);\n\n function handleSetEditedPermission(isImplementationLevelType, permission) {\n handleCloseUsers();\n setEditedPermission({isImplementationLevelType, permission});\n }\n\n function handleCloseEditPermission(data) {\n // close dialog\n setEditedPermission(null);\n // turn user list back\n setActiveUsersPermission(lastActiveUsersPermission);\n }\n\n function handleCloseEditPermissionSuccess(data) {\n // check if current user permission was changed;\n // if yes - refresh permissions list\n if ((editedPermission.permission.authorized || {}).id === currentUserId) {\n if (editedPermission.isImplementationLevelType) {\n setImplementationLevelPermissionsRequestId(prevId => prevId + 1);\n } else {\n setAdministrationPermissionsRequestId(prevId => prevId + 1);\n }\n }\n handleCloseEditPermission(data);\n }\n\n const [removedPermission, setRemovedPermission] = useState(null);\n\n function handleSetRemovedPermission(isImplementationLevelType, permission) {\n handleCloseUsers();\n setRemovedPermission({isImplementationLevelType, permission});\n }\n\n function handleCloseRemovePermission(data) {\n // close dialog\n setRemovedPermission(null);\n // turn user list back\n setActiveUsersPermission(lastActiveUsersPermission);\n }\n\n function handleCloseRemovePermissionSuccess(data) {\n // check if current user permission was removed;\n // if yes - refresh permissions list\n if ((removedPermission.permission.authorized || {}).id === currentUserId) {\n if (removedPermission.isImplementationLevelType) {\n setImplementationLevelPermissionsRequestId(prevId => prevId + 1);\n } else {\n setAdministrationPermissionsRequestId(prevId => prevId + 1);\n }\n }\n handleCloseRemovePermission(data);\n }\n\n const [url, dialogAdditionalFetchData] = useMemo(\n () => {\n let url_ = '';\n let dialogAdditionalFetchData_ = {};\n if (activeHistoryPermission !== null || activeUsersPermission !== null) {\n const isHistoryPermission = activeHistoryPermission !== null;\n const activePermission = activeHistoryPermission ||\n activeUsersPermission;\n if (activePermission.isImplementationLevelType) {\n url_ = API_URLS[isHistoryPermission\n ? 'usersPermissionsHistoryAdvertisementsProjectsEnrollments'\n : 'usersPermissionsAdvertisementsProjectsEnrollments'\n ].path;\n const {\n programme = null,\n priority = null,\n activity = null,\n institution = null,\n region = null\n } = activePermission.permission;\n dialogAdditionalFetchData_ = {\n programme: programme !== null ? programme.id : null,\n priority: priority !== null ? priority.id : null,\n activity: activity !== null ? activity.id : null,\n institution: institution !== null ? institution.id : null,\n region: region !== null ? region.id : null,\n };\n } else {\n url_ = activePermission.permission.type === 'usersAdministration'\n ? API_URLS[isHistoryPermission\n ? 'usersPermissionsHistoryUsers'\n : 'usersPermissionsUsers'\n ].path\n : activePermission.permission.type === 'contentAdministration'\n ? API_URLS[isHistoryPermission\n ? 'usersPermissionsHistoryContent'\n : 'usersPermissionsContent'\n ].path\n : API_URLS[isHistoryPermission\n ? 'usersPermissionsHistoryDictionaries'\n : 'usersPermissionsDictionaries'\n ].path\n }\n if (!isHistoryPermission) {\n dialogAdditionalFetchData_['mode'] = 'modeContext';\n }\n }\n return [url_, dialogAdditionalFetchData_]\n },\n [activeHistoryPermission, activeUsersPermission]\n );\n\n const permissionListAdditionalFetchData = useMemo(\n () => ({mode: 'modeUserCurrent', authorized: currentUserId}),\n [currentUserId]\n );\n\n function handleCloseAddPermissionForm(data) {\n // close dialog\n setAddPermissionMode(null);\n setUserForPermissionAdding(null);\n }\n\n function handleCloseAddPermissionFormSuccess(data) {\n // check if current user permission was added;\n // if yes - refresh permissions list\n if (userForPermissionAdding.id === currentUserId) {\n if (addPermissionMode === 'implementationLevel') {\n setImplementationLevelPermissionsRequestId(prevId => prevId + 1);\n } else {\n setAdministrationPermissionsRequestId(prevId => prevId + 1);\n }\n }\n handleCloseAddPermissionForm(data);\n }\n\n let PermissionFormComponent = null;\n if (editedPermission !== null) {\n PermissionFormComponent = editedPermission.isImplementationLevelType\n ? UserPermissionsImplementationLevelForm\n : UserPermissionsAdministrationForm;\n } else if (\n ['administration', 'implementationLevel'].includes(addPermissionMode)\n ) {\n PermissionFormComponent = addPermissionMode === 'implementationLevel'\n ? UserPermissionsImplementationLevelForm\n : UserPermissionsAdministrationForm;\n }\n\n return (\n <>\n <PermissionList\n additionalFetchData={permissionListAdditionalFetchData}\n isImplementationLevelType={false}\n requestId={administrationPermissionsRequestId}\n RowComponent={PermissionListRow}\n tableHeaderList={TABLE_HEADER_LIST}\n title=\"Administracja\"\n url={API_URLS.usersPermissionsContentDictionariesUsers.path}\n withHistory={false}\n onOpenForm={() => setAddPermissionMode('administration')}\n onSetActiveHistoryPermission={handleOpenHistory}\n onSetActiveUsersPermission={handleOpenUsers} />\n <PermissionList\n additionalFetchData={permissionListAdditionalFetchData}\n isImplementationLevelType={true}\n requestId={implementationLevelPermissionsRequestId}\n RowComponent={PermissionListRow}\n tableHeaderList={TABLE_HEADER_LIST}\n title=\"Poziomy wdrożenia\"\n url={API_URLS.usersPermissionsAdvertisementsProjectsEnrollments.path}\n withHistory={false}\n onOpenForm={() => setAddPermissionMode('implementationLevel')}\n onSetActiveHistoryPermission={handleOpenHistory}\n onSetActiveUsersPermission={handleOpenUsers} />\n {activeHistoryPermission !== null && (\n <PermissionsHistory\n additionalFetchData={dialogAdditionalFetchData}\n dialogTitle={getPermissionHistoryUsersTitle(\n activeHistoryPermission, true\n )}\n isImplementationLevelType={activeHistoryPermission.isImplementationLevelType}\n mode=\"fullHistory\"\n tableHeaderList={[\n 'Data zmiany', \"Użytkownik\", 'Rodzaj operacji',\n 'Użytkownik wprowadzajÄ…cy'\n ]}\n url={url}\n userId={null}\n onClose={handleCloseHistory} />\n )}\n {activeUsersPermission !== null && (\n <DialogCustom\n className=\"dialog-long-content\"\n dialogTitle={getPermissionHistoryUsersTitle(\n activeUsersPermission, false)}\n onClose={handleCloseUsers}>\n <PermissionUsers\n activeUsersPermission={activeUsersPermission}\n additionalFetchData={dialogAdditionalFetchData}\n isImplementationLevelType={activeUsersPermission.isImplementationLevelType}\n url={url}\n onClose={handleCloseUsers}\n onSetEditedPermission={handleSetEditedPermission}\n onSetRemovedPermission={handleSetRemovedPermission} />\n </DialogCustom>\n )}\n {removedPermission !== null && (\n <UserPermissionsRemovingPermissionDialog\n permission={removedPermission}\n questionSuffix={` użytkownika ${removedPermission.permission.authorized.forename} ${removedPermission.permission.authorized.surname}`}\n userId={(removedPermission.permission.authorized || {}).id}\n onCloseRemovedPermissionDialog={handleCloseRemovePermission}\n onRemovePermissionSuccess={handleCloseRemovePermissionSuccess} />\n )}\n {editedPermission !== null && (\n <DialogCustom\n className=\"dialog-long-content\"\n onClose={handleCloseEditPermission}>\n <Text>Informacje o użytkowniku</Text>\n <UserHeader\n user={editedPermission.permission.authorized || {}}\n withButtons={false} />\n <PermissionFormComponent\n initialData={editedPermission.permission}\n userId={(editedPermission.permission.authorized || {}).id}\n onCancel={handleCloseEditPermission}\n onSavePermissionSuccess={handleCloseEditPermissionSuccess} />\n </DialogCustom>\n )}\n {['administration', 'implementationLevel'].includes(addPermissionMode)\n && (userForPermissionAdding === null\n ? (\n <DialogCustom\n className=\"dialog\"\n onClose={handleCloseAddPermissionForm}>\n <SearchUserForm\n addPermissionMode={addPermissionMode}\n onCancel={handleCloseAddPermissionForm}\n onFindUser={setUserForPermissionAdding} />\n </DialogCustom>\n )\n : (\n <DialogCustom\n className=\"dialog-long-content\"\n onClose={handleCloseAddPermissionForm}>\n <Text>Informacje o użytkowniku</Text>\n <UserHeader\n user={userForPermissionAdding}\n withButtons={false} />\n <PermissionFormComponent\n userId={userForPermissionAdding.id}\n onCancel={handleCloseAddPermissionForm}\n onSavePermissionSuccess={handleCloseAddPermissionFormSuccess} />\n </DialogCustom>\n )\n )\n }\n </>\n )\n};\n","import React from 'react';\nimport {\n DataTableCell,\n DataTableRow,\n} from '@rmwc/data-table';\n\nimport { reformatDanePodmiotu } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { Box, Breadcrumps, ButtonStyled, FieldWithLabel, GridCustom, TableCustom, Text } from '../../common';\nimport { BaseComponent, DanePodmiotu } from '../common';\nimport { FormDanePodmiotu } from './FormDanePodmiotu';\nimport { FormOsobaDoKontaktu } from './FormOsobaDoKontaktu';\n\n\nclass ProfilUzytkownika extends BaseComponent {\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n\n let uzytkownik = getSerializedObject(data).uzytkownik;\n uzytkownik.danePodmiotu = reformatDanePodmiotu(uzytkownik.danePodmiotu);\n this.setState({\n initializingOn: false,\n uzytkownik: uzytkownik,\n });\n }\n\n handleSaveDanePodmiotu = (data) => {\n this.setState(prevState => ({\n changeDataOn: false,\n uzytkownik: Object.assign({}, prevState.uzytkownik, {danePodmiotu: data}),\n }));\n }\n\n handleSaveOsobaDoKontaktu = (data, isNew) => {\n this.setState(prevState => {\n let osobyDoKontaktu;\n if (isNew) {\n osobyDoKontaktu = [...prevState.uzytkownik.osobyDoKontaktu, data];\n } else {\n osobyDoKontaktu = prevState.uzytkownik.osobyDoKontaktu.map(o => o.id === data.id ? data : o);\n }\n return {\n formOsobaDoKontaktuOn: false,\n editedOsobaDoKontaktu: null,\n uzytkownik: Object.assign({}, prevState.uzytkownik, {osobyDoKontaktu: osobyDoKontaktu}),\n }\n });\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n changeDataOn: false,\n formOsobaDoKontaktuOn: false,\n uzytkownik: {},\n editedOsobaDoKontaktu: null,\n }\n }\n\n getFetchUrl() {\n return '/api/users/0'\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać danych profilu. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Podczas pobierania danych profilu wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n // rendering\n\n renderHeader() {\n return (\n <Breadcrumps notZarzadzanieTrescia>\n <li className=\"breadcrumps__current\">Profil użytkownika</li>\n </Breadcrumps>\n )\n }\n\n renderContent() {\n document.title = \"Baza KonkurencyjnoÅ›ci - mój profil\";\n return (\n <>\n {this.renderProfilUzytkownika()}\n {this.renderDanePodmiotu()}\n {this.renderOsobyDoKontaktu()}\n {this.state.changeDataOn && (\n <FormDanePodmiotu\n data={this.state.uzytkownik.danePodmiotu}\n closeDanePodmiotuForm={() => this.setState({changeDataOn: false})}\n saveDanePodmiotu={this.handleSaveDanePodmiotu} />\n )}\n {this.state.formOsobaDoKontaktuOn && (\n <FormOsobaDoKontaktu\n data={this.state.editedOsobaDoKontaktu}\n closeOsobaDoKontaktuFormForm={() => this.setState(\n {formOsobaDoKontaktuOn: false, editedOsobaDoKontaktu: null}\n )}\n saveOsobaDoKontaktu={this.handleSaveOsobaDoKontaktu} />\n )}\n </>\n )\n }\n\n renderProfilUzytkownika() {\n const uzytkownik = this.state.uzytkownik;\n return (\n <>\n <GridCustom fullwidth>\n <Text tag=\"h2\" mainHeader>Mój profil w Bazie KonkurencyjnoÅ›ci</Text>\n <GridCustom flexTop>\n <a href='/konto/' className=\"mdc-button mdc-button--unelevated btn--primary\">Ustawienia konta</a>\n </GridCustom>\n </GridCustom>\n <Box titleOneRow=\"Twoje dane\" className=\"users__box\">\n <FieldWithLabel label=\"ImiÄ™ i nazwisko\">\n <Text>{uzytkownik.imie} {uzytkownik.nazwisko}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Adres e-mail\">\n <Text>{uzytkownik.email}</Text>\n </FieldWithLabel>\n </Box>\n </>\n )\n }\n\n renderDanePodmiotu() {\n let content, button;\n\n if (!Object.keys(this.state.uzytkownik.danePodmiotu).length) {\n content = <Text error>Brak zdefiniowanych danych podmiotu.</Text>;\n button = (\n <ButtonStyled onClick={() => this.setState({changeDataOn: true})} add>\n Dodaj dane podmiotu\n </ButtonStyled>\n );\n } else {\n content = <DanePodmiotu danePodmiotu={this.state.uzytkownik.danePodmiotu} />;\n button = (\n <ButtonStyled onClick={() => this.setState({changeDataOn: true})} lite>\n Edytuj dane podmiotu\n </ButtonStyled>\n );\n }\n\n return (\n <Box titleOneRow=\"Dane podmiotu\" className=\"users__box\">\n <GridCustom flexEnd>\n {button}\n </GridCustom>\n {content}\n </Box>\n )\n }\n\n renderOsobyDoKontaktu() {\n const osobyDoKontaktu = this.state.uzytkownik.osobyDoKontaktu || [];\n let content = null;\n if (!osobyDoKontaktu.length) {\n content = <Text error>Brak zdefiniowanych osób do kontaktu.</Text>;\n } else {\n content = (\n <TableCustom tableHeaderList={[\n 'ImiÄ™ i nazwisko',\n 'Numer telefonu',\n 'Adres e-mail',\n 'Edytuj dane',\n ]}>\n {osobyDoKontaktu.map(o => this.renderOsobaDoKontaktu(o))}\n </TableCustom>\n );\n }\n return (\n <Box titleOneRow=\"Osoby do kontaktu\" className=\"users__box\">\n <GridCustom flexEnd>\n <ButtonStyled onClick={() => this.setState({formOsobaDoKontaktuOn: true})} add>Dodaj osobÄ™ do kontaktu</ButtonStyled>\n </GridCustom>\n {content}\n </Box>\n )\n }\n\n renderOsobaDoKontaktu(osoba) {\n const {\n email,\n id,\n imie,\n nazwisko,\n numerTelefonu\n } = osoba;\n\n return (\n <DataTableRow key={id}>\n <DataTableCell>\n <Text>{imie} {nazwisko}</Text>\n </DataTableCell>\n <DataTableCell>\n <Text>{numerTelefonu || '-'}</Text>\n </DataTableCell>\n <DataTableCell className=\"table__width-needy-cell\">\n <Text>{email}</Text>\n </DataTableCell>\n <DataTableCell>\n <ButtonStyled\n primary\n onClick={() => this.setState({formOsobaDoKontaktuOn: true, editedOsobaDoKontaktu: osoba})}>\n Edytuj<span className=\"sr-only\"> {imie} {nazwisko}</span>\n </ButtonStyled>\n </DataTableCell>\n </DataTableRow>\n )\n }\n}\n\n\nexport { ProfilUzytkownika };\n","import React from 'react';\n\nimport { ButtonStyled, DialogCustom, GridCustom, Message } from '../../common';\n\n\nconst SessionDialog = (props) => {\n\n const callback = props.callback;\n const messageIcon = props.messageIcon || 'power_settings_new';\n return (\n <DialogCustom\n ariaLabelledby=\"sessionDialogLabel\"\n className=\"dialog dialog--sesion\"\n onClose={callback}\n >\n <>\n <Message\n error={props.error}\n id=\"sessionDialogLabel\"\n messageIcon={messageIcon}\n messageTitle={props.messageTitle}\n role={props.messageRole}\n >\n {props.messageContent}\n </Message>\n {props.withButton && (\n <GridCustom centerVertical flexEnd>\n <ButtonStyled onClick={callback} primary>{props.dialogButton || 'OK'}</ButtonStyled>\n </GridCustom>\n )}\n </>\n </DialogCustom>\n );\n}\n\n\nexport { SessionDialog };\n","import React, { Component } from 'react';\nimport { Button } from '@rmwc/button';\nimport { Icon } from '@rmwc/icon';\n\nimport { TOKEN_COOKIE_NAME } from '../../../const';\nimport { fetchSativaApi } from '../../../fetch';\nimport { deleteCookie, fillWithLeadingZero, refreshCookie } from '../../../helpers';\nimport { Text } from '../../common/Text';\nimport { UserContext } from '../../../context/user-context';\nimport { SessionDialog } from './SessionDialog';\n\n\nclass Sesja extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n sessionTime: null,\n refreshSessionErrorDialogOn: false,\n logoutDialogOn: false,\n logoutDone: false,\n unauthorizedDialogOn:false,\n };\n\n this.xhrFetch = null;\n this.sessionIntervalId = null;\n }\n\n // basic functions\n\n componentDidMount() {\n if (this.context.auth.expire) {\n this.initializeSessionTime();\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevState.sessionTime === this.state.sessionTime\n && this.state.sessionTime !== this.computeSessionTime()) {\n clearInterval(this.sessionIntervalId);\n this.sessionIntervalId = null;\n this.initializeSessionTime();\n }\n }\n\n componentWillUnmount() {\n // abort api request if exist\n if (this.xhrFetch !== null) {\n this.xhrFetch.abort();\n }\n\n // abort interval if exist\n if (this.sessionIntervalId !== null) {\n clearInterval(this.sessionIntervalId)\n this.sessionIntervalId = null;\n }\n }\n\n // handlers\n\n handleRefreshSessionTime = () => {\n this.xhrFetch = fetchSativaApi(\n '/api/user',\n this.handleFetchSuccess,\n this.handleFetchError,\n this.handleFetchIncorrectStatus,\n );\n }\n\n handleFetchSuccess = (data) => {\n this.xhrFetch = null;\n this.context.refresh(data);\n }\n\n handleFetchError = (data) => {\n this.xhrFetch = null;\n this.setState({refreshSessionErrorDialogOn: true});\n }\n\n handleFetchIncorrectStatus = (status) => {\n this.xhrFetch = null;\n this.setState({refreshSessionErrorDialogOn: true});\n }\n\n handleSessionErrorDialogClose = () => {\n this.setState({refreshSessionErrorDialogOn: false});\n }\n\n handleSessionDialogClose = () => {\n this.setState({refreshSessionErrorDialogOn: false});\n }\n\n handleExpirationDialogClose = () => {\n // refresh page\n window.location.reload();\n }\n\n handleUnauthorizedDialogClose = () => {\n this.setState(\n {unauthorizedDialogOn: false},\n () => {\n deleteCookie(TOKEN_COOKIE_NAME);\n // refresh page\n window.location.reload();\n }\n );\n }\n\n // helpers\n\n initializeSessionTime = () => {\n const sessionTime = this.computeSessionTime();\n this.setState(\n {sessionTime},\n () => this.startSessionTime()\n );\n }\n\n computeSessionTime() {\n const now = new Date();\n const nowUTC = new Date(\n now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),\n now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());\n return parseInt(this.context.auth.expire) - Math.floor(nowUTC.getTime() / 1000)\n }\n\n startSessionTime() {\n // refresh cookie expire\n refreshCookie(TOKEN_COOKIE_NAME, this.state.sessionTime);\n this.sessionIntervalId = window.setInterval(\n () => {this.setState(prevState => {\n if (prevState.sessionTime === 0) {\n clearInterval(this.sessionIntervalId);\n this.sessionIntervalId = null;\n this.context.logout(this.expire)\n } else {\n if (prevState.sessionTime - 1 === 0) {\n return {sessionTime: 0, logoutDialogOn: true}\n }\n return {sessionTime: prevState.sessionTime - 1}\n }\n })},\n 1000\n );\n }\n\n expire = () => {\n this.setState({logoutDone: true});\n }\n\n refreshTimerAfterRequest(authTokenCookieValue) {\n const now = new Date();\n const nowUTC = new Date(\n now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),\n now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());\n this.context.refreshTimer(\n Math.floor(nowUTC.getTime() / 1000) + 1800,\n () => {\n const sessionTime = this.computeSessionTime();\n refreshCookie(\n TOKEN_COOKIE_NAME, sessionTime, authTokenCookieValue);\n this.setState({sessionTime});\n }\n );\n }\n\n showUnauthorizedMessage() {\n this.setState({unauthorizedDialogOn: true});\n }\n\n // rendering\n\n render() {\n const sessionTime = this.state.sessionTime;\n if (!sessionTime || sessionTime < 1) {\n if (this.state.logoutDialogOn) {\n return this.renderLogoutDialog()\n }\n return this.state.unauthorizedDialogOn ? this.renderUnauthorizedDialog() : null\n }\n\n const min = ~~(sessionTime / 60);\n const minRemaining = fillWithLeadingZero(min);\n const secRemaining = fillWithLeadingZero(sessionTime - min * 60);\n return (\n <div className=\"session-timer\" role=\"timer\">\n <Text id=\"session_time_remaining\">{`${minRemaining}:${secRemaining}`}</Text>\n <Button\n aria-label={`Do koÅ„ca sesji pozostaÅ‚o ${minRemaining} minut ${secRemaining} sekund. OdÅ›wież czas sesji.`}\n className=\"btn--icon-only btn--primary\"\n onClick={this.handleRefreshSessionTime}\n title=\"OdÅ›wież czas sesji\"\n unelevated>\n <span className=\"sr-only\">OdÅ›wież czas sesji</span>\n <Icon aria-hidden=\"true\" icon=\"watch_later\" />\n </Button>\n {this.state.refreshSessionErrorDialogOn && this.renderRefreshSessionErrorDialog()}\n {this.state.unauthorizedDialogOn && this.renderUnauthorizedDialog()}\n {(sessionTime < 120) && this.renderRefreshSessionDialog(minRemaining, secRemaining)}\n </div>\n )\n }\n\n renderRefreshSessionErrorDialog() {\n return <SessionDialog\n callback={this.handleSessionErrorDialogClose}\n error\n messageTitle=\"Nie udaÅ‚o siÄ™ odÅ›wieżyć czasu sesji.\"\n messageIcon=\"error_outline\"\n withButton />\n }\n\n renderRefreshSessionDialog(min, sec) {\n return <SessionDialog\n callback={this.handleRefreshSessionTime}\n messageTitle={`Do koÅ„ca sesji pozostaÅ‚o ${min} minut ${sec} sekund.`}\n messageIcon=\"error_outline\"\n messageRole=\"timer\"\n withButton\n dialogButton=\"PrzedÅ‚uż czas sesji\" />\n }\n\n renderLogoutDialog() {\n if (this.state.logoutDone) {\n return <SessionDialog\n callback={this.handleExpirationDialogClose}\n messageContent=\"Aby uzyskać dostÄ™p do widoków dla zarejestrowanych użytkowników, zaloguj siÄ™ ponownie.\"\n messageTitle=\"Użytkownik zostaÅ‚ wylogowany.\"\n withButton={true} />\n }\n return <SessionDialog\n callback={this.handleExpirationDialogClose}\n messageTitle=\"Sesja wygasÅ‚a. Trwa wylogowywanie...\" />\n }\n\n renderUnauthorizedDialog() {\n return <SessionDialog\n callback={this.handleUnauthorizedDialogClose}\n messageTitle=\"WystÄ…piÅ‚ problem z uwierzytelnieniem użytkownika.\"\n withButton={true} />\n }\n}\n\n\nSesja.contextType = UserContext;\n\n\nexport { Sesja };\n","import React from 'react';\nimport {\n DataTableCell,\n DataTableRow,\n} from '@rmwc/data-table';\n\nimport { Container, TableCustom, Text } from '../../common';\n\n\nexport const UserContactPersonsList = ({ contactPersons }) => {\n let content;\n if (contactPersons.length) {\n content = (\n <TableCustom tableHeaderList={[\n 'ImiÄ™ i nazwisko',\n 'Numer telefonu',\n 'Adres e-mail',\n ]}>\n {contactPersons.map(cp => (\n <DataTableRow key={cp.id}>\n <DataTableCell>{cp.imie} {cp.nazwisko}</DataTableCell>\n <DataTableCell>{cp.numerTelefonu}</DataTableCell>\n <DataTableCell className=\"table__width-needy-cell\">\n {cp.email}\n </DataTableCell>\n </DataTableRow>\n ))}\n </TableCustom>\n );\n } else {\n content = <Text error>Brak zdefiniowanych osób do kontaktu.</Text>;\n }\n return (\n <Container>\n <Text tag=\"h2\" mainHeader>Osoby do kontaktu</Text>\n {content}\n </Container>\n )\n};\n","import React, { useContext, useState } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\nimport { useParams } from 'react-router-dom';\n\nimport { UserContext } from '../../../context/user-context';\nimport { usePutFormFetchApi } from '../../../hooks';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\n\nimport {\n ButtonStyled,\n Container,\n GridCustom,\n FieldWithLabel,\n Text\n} from '../../common';\n\n\nexport const UserDataForm = ({ user, onUpdateUserData }) => {\n const [loadingOn, setLoadingOn] = useState(false);\n const [blockedAccount, setBlockedAccount] = useState(user.kontoZablokowane);\n const [originalBlockedAccount, setOriginalBlockedAccount] = useState(\n user.kontoZablokowane);\n\n const { permissions, removePermission } = useContext(UserContext);\n\n function handleFetchSuccess(data) {\n setLoadingOn(false);\n setOriginalBlockedAccount(blockedAccount);\n onUpdateUserData(getSerializedObject(data).uzytkownik);\n }\n\n const { id: id_ } = useParams();\n const { fetchError, errors, saveBtnText } = usePutFormFetchApi({\n url: API_URLS.usersDetails.getUrl(id_),\n fetchData: getSerializedObject(\n {kontoZablokowane: blockedAccount}, {toServer: true}),\n callbackSuccess: handleFetchSuccess,\n loadingOn,\n setLoadingOn,\n message403error: 'Nie masz uprawnieÅ„ do blokowania użytkowników',\n callback403: () => removePermission('blockingUsers'),\n });\n\n const blockedAccountsErrors = errors.kontoZablokowane || [];\n const hasBlockingUserPermission = permissions.blockingUsers;\n return (\n <Container>\n <Text tag=\"h2\" mainHeader>Blokada profilu</Text>\n <GridCustom fullwidth>\n <FieldWithLabel label=\"Stan\">\n {hasBlockingUserPermission\n ? (\n <>\n <Checkbox\n checked={blockedAccount}\n disabled={loadingOn}\n label=\"Zablokuj użytkownika\"\n onChange={(ev) => setBlockedAccount(ev.target.checked)}\n />\n {blockedAccountsErrors.length > 0 && blockedAccountsErrors.map(\n (e, i) => <Text error key={i}>{e}</Text>\n )}\n </>\n )\n : (\n <Text>\n Profil {originalBlockedAccount ? 'zablokowany' : 'aktywny'}\n </Text>\n )\n }\n </FieldWithLabel>\n <FieldWithLabel label=\"Data zablokowania konta\">\n <Text>{user.dataZablokowaniaKonta || '---'}</Text>\n </FieldWithLabel>\n </GridCustom>\n {hasBlockingUserPermission && (\n <>\n {blockedAccount !== originalBlockedAccount && (\n <>\n <Text info>Upewnij siÄ™, że na pewno chcesz zapisać zmiany.</Text>\n <Text info>Zmieniasz wartość pola \"Zablokuj użytkownika\".</Text>\n </>\n )}\n <GridCustom flexEnd>\n <ButtonStyled\n disabled={loadingOn}\n primary\n onClick={() => setLoadingOn(true)}>\n {saveBtnText}\n </ButtonStyled>\n </GridCustom>\n </>\n )}\n {fetchError !== null && <Text error>{fetchError}</Text>}\n </Container>\n )\n};\n","import React from 'react';\n\nimport { reformatDanePodmiotu } from '../../../helpers';\nimport { Container, Text } from '../../common';\nimport { DanePodmiotu } from '../common';\n\n\nexport const UserEconomicSubjectData = ({ economicSubject }) => {\n let content;\n if (Object.keys(economicSubject).length) {\n economicSubject = reformatDanePodmiotu(economicSubject);\n content = <DanePodmiotu danePodmiotu={economicSubject} />;\n } else {\n content = <Text error>Brak zdefiniowanych danych podmiotu.</Text>;\n }\n return (\n <Container className=\"users__container--middle\">\n <Text tag=\"h2\" mainHeader>Dane podmiotu</Text>\n {content}\n </Container>\n )\n};\n","import React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { Link, useParams } from 'react-router-dom';\nimport { TabBar, Tab } from '@rmwc/tabs';\n\nimport { UserContext } from '../../../context/user-context';\nimport { useOneTimeFetchApi } from '../../../hooks';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { URLS } from '../../../urls/frontend';\nimport {\n Breadcrumps,\n Container,\n DialogCustom,\n Loader,\n NotPermittedPage,\n Text\n} from '../../common';\nimport { PermissionList } from './PermissionList';\nimport { PermissionsHistory } from './PermissionsHistory';\nimport { UserContactPersonsList } from './UserContactPersonsList';\nimport { UserDataForm } from './UserDataForm';\nimport { UserEconomicSubjectData } from './UserEconomicSubjectData';\nimport { UserHeader } from './UserHeader';\nimport {\n UserPermissionsAdministrationForm\n} from './UserPermissionsAdministrationForm';\nimport {\n UserPermissionsImplementationLevelForm\n} from './UserPermissionsImplementationLevelForm';\nimport { UserPermissionsListRow } from './UserPermissionsListRow';\nimport {\n UserPermissionsRemovingPermissionDialog\n} from './UserPermissionsRemovingPermissionDialog';\n\n\nconst TAB_INDEXES = {\n dane: 0,\n uprawnienia: 1,\n};\nconst REVERTED_TAB_INDEXES = {\n 0: 'dane',\n 1: 'uprawnienia',\n};\nconst ADMINISTRATION_INITIAL_REQUEST_ID = 1;\nconst IMPLEMENTATION_LEVEL_INITIAL_REQUEST_ID = 1;\nconst TABLE_HEADER_LIST = ['Nazwa', 'Uprawnienia', 'DziaÅ‚ania'];\n\nfunction serializeFetchData(data) {\n // it has to be serialized because some child components need like that\n return getSerializedObject(data)\n}\n\n\nexport const User = (props) => {\n const [updatedUserData, setUpdatedUserData] = useState(null);\n const { id: id_ } = useParams();\n const [pageNotPermitted, setPageNotPermitted] = useState(false);\n\n const { removePermission } = useContext(UserContext);\n\n function callback403() {\n setPageNotPermitted(true);\n removePermission('usersAndPermissionsPreviewListUsers');\n }\n\n const {data, loadingOn, fetchError} = useOneTimeFetchApi({\n url: API_URLS.usersDetails.getUrl(id_),\n serializeFetchDataFunction: serializeFetchData,\n updatedData: updatedUserData,\n callback403,\n });\n const user = data === null ? {} : data.uzytkownik;\n\n const [selectedTab, setSelectedTab] = useState(TAB_INDEXES.dane);\n\n function setInitialTab() {\n const params = new URLSearchParams(props.history.location.search);\n const section = params.get('sekcja') || 'dane';\n setSelectedTab(TAB_INDEXES[section] || TAB_INDEXES.dane);\n }\n useEffect(setInitialTab, []);\n\n const [administrationFormOn, setAdministrationFormOn] = useState(false);\n const [\n implementationLevelFormOn,\n setImplementationLevelFormOn\n ] = useState(false);\n const [\n administrationPermissionsRequestId,\n setAdministrationPermissionsRequestId\n ] = useState(ADMINISTRATION_INITIAL_REQUEST_ID);\n const [\n implementationLevelPermissionsRequestId,\n setImplementationLevelPermissionsRequestId\n ] = useState(IMPLEMENTATION_LEVEL_INITIAL_REQUEST_ID);\n\n function handleChangeTab(ev) {\n const index = ev.detail.index\n setSelectedTab(index);\n props.history.push(\n `${window.location.pathname}?sekcja=${REVERTED_TAB_INDEXES[index] || REVERTED_TAB_INDEXES[0]}`);\n }\n\n function handleUpdateUserData(data) {\n setUpdatedUserData(data);\n }\n\n const [editedPermission, setEditedPermission] = useState(null);\n\n function handleOpenAdministrationForm() {\n setImplementationLevelFormOn(false);\n setAdministrationFormOn(true);\n }\n\n function handleCloseAdministrationForm() {\n setAdministrationFormOn(false);\n if (editedPermission !== null) {\n setEditedPermission(null);\n }\n }\n\n function handleOpenImplementationLevelForm() {\n setAdministrationFormOn(false);\n setImplementationLevelFormOn(true);\n }\n\n function handleCloseImplementationLevelForm() {\n setImplementationLevelFormOn(false);\n if (editedPermission !== null) {\n setEditedPermission(null);\n }\n }\n\n function handleSavePermissionSuccess(data, isAdministrationPermission) {\n if (isAdministrationPermission) {\n setAdministrationFormOn(false);\n setAdministrationPermissionsRequestId(prevId => prevId + 1);\n } else {\n setImplementationLevelFormOn(false);\n setImplementationLevelPermissionsRequestId(prevId => prevId + 1);\n }\n if (editedPermission !== null) {\n setEditedPermission(null);\n }\n }\n\n function handleSetEditedPermission(isImplementationLevelType, permission) {\n setEditedPermission(permission);\n if (isImplementationLevelType) {\n setImplementationLevelFormOn(true);\n } else {\n setAdministrationFormOn(true);\n }\n }\n\n const [removedPermission, setRemovedPermission] = useState(null);\n\n function handleSetRemovedPermission(isImplementationLevelType, permission) {\n setRemovedPermission({\n isImplementationLevelType,\n permission,\n });\n }\n\n function handleCloseRemovedPermissionDialog() {\n setRemovedPermission(null);\n }\n\n function handleRemovePermissionSuccess() {\n if (removedPermission.isImplementationLevelType) {\n setImplementationLevelPermissionsRequestId(\n prevId => prevId + 1);\n } else {\n setAdministrationPermissionsRequestId(\n prevId => prevId + 1);\n }\n setRemovedPermission(null);\n }\n\n const [\n administrationHistoryOn,\n setAdministrationHistoryOn\n ] = useState(false);\n const [\n implementationLevelHistoryOn,\n setImplementationLevelHistoryOn\n ] = useState(false);\n\n function handleOpenAdministrationHistory() {\n setImplementationLevelHistoryOn(false);\n setAdministrationHistoryOn(true);\n }\n\n function handleOpenImplementationLevelHistory() {\n setAdministrationHistoryOn(false);\n setImplementationLevelHistoryOn(true);\n }\n\n function handleCloseAdministrationHistory() {\n setAdministrationHistoryOn(false);\n }\n\n function handleCloseImplementationLevelHistory() {\n setImplementationLevelHistoryOn(false);\n }\n\n const permissionListAdditionalFetchData = useMemo(\n () => ({mode: 'modeUserCustom', authorized: id_}), [id_]);\n\n if (pageNotPermitted) {\n return <NotPermittedPage />\n }\n\n return (\n <>\n <Breadcrumps notZarzadzanieTrescia>\n <li className=\"breadcrumps__link\">\n <Link to={URLS.users.path}>\n Administracja użytkownikami i uprawnieniami\n </Link>\n </li>\n <li className=\"breadcrumps__current\">Użytkownik</li>\n </Breadcrumps>\n {loadingOn\n ? <Loader />\n : (fetchError\n ? <Text error>{fetchError}</Text>\n : (\n <>\n <Container>\n <UserHeader user={user} />\n </Container>\n <TabBar\n activeTabIndex={selectedTab}\n onActivate={handleChangeTab}>\n <Tab aria-label=\"Dane użytkownika, panel zakÅ‚adek, lista 1 z 2\" label=\"Dane użytkownika\" />\n <Tab aria-label=\"Uprawnienia, panel zakÅ‚adek, lista 2 z 2\" label=\"Uprawnienia\" />\n </TabBar>\n {selectedTab === TAB_INDEXES.dane\n ? (\n <>\n <UserDataForm\n user={user}\n onUpdateUserData={handleUpdateUserData} />\n <UserEconomicSubjectData\n economicSubject={user.danePodmiotu} />\n <UserContactPersonsList\n contactPersons={user.osobyDoKontaktu || []} />\n </>\n ) : (\n <>\n <PermissionList\n additionalFetchData={permissionListAdditionalFetchData}\n initialRequestId={ADMINISTRATION_INITIAL_REQUEST_ID}\n isImplementationLevelType={false}\n hideAddPermissionButtonIfFullList={true}\n requestId={administrationPermissionsRequestId}\n RowComponent={UserPermissionsListRow}\n tableHeaderList={TABLE_HEADER_LIST}\n title=\"Administracja\"\n url={API_URLS.usersPermissionsContentDictionariesUsers.path}\n withHistory={true}\n onOpenForm={handleOpenAdministrationForm}\n onOpenHistory={handleOpenAdministrationHistory}\n onSetEditedPermission={handleSetEditedPermission}\n onSetRemovedPermission={handleSetRemovedPermission} />\n <PermissionList\n additionalFetchData={permissionListAdditionalFetchData}\n initialRequestId={IMPLEMENTATION_LEVEL_INITIAL_REQUEST_ID}\n isImplementationLevelType={true}\n requestId={implementationLevelPermissionsRequestId}\n RowComponent={UserPermissionsListRow}\n tableHeaderList={TABLE_HEADER_LIST}\n title=\"Poziomy wdrożenia\"\n url={API_URLS.usersPermissionsAdvertisementsProjectsEnrollments.path}\n withHistory={true}\n onOpenForm={handleOpenImplementationLevelForm}\n onOpenHistory={handleOpenImplementationLevelHistory}\n onSetEditedPermission={handleSetEditedPermission}\n onSetRemovedPermission={handleSetRemovedPermission} />\n {administrationFormOn && (\n <DialogCustom\n className=\"dialog-long-content\"\n onClose={handleCloseAdministrationForm}>\n <UserPermissionsAdministrationForm\n initialData={editedPermission}\n userId={id_}\n onCancel={handleCloseAdministrationForm}\n onSavePermissionSuccess={\n (data) => handleSavePermissionSuccess(data, true)\n } />\n </DialogCustom>\n )}\n {implementationLevelFormOn && (\n <DialogCustom\n className=\"dialog-long-content\"\n onClose={handleCloseImplementationLevelForm}>\n <UserPermissionsImplementationLevelForm\n initialData={editedPermission}\n userId={id_}\n onCancel={handleCloseImplementationLevelForm}\n onSavePermissionSuccess={\n (data) => handleSavePermissionSuccess(data, false)\n } />\n </DialogCustom>\n )}\n\n {removedPermission !== null && (\n <UserPermissionsRemovingPermissionDialog\n permission={removedPermission}\n userId={id_}\n onCloseRemovedPermissionDialog={handleCloseRemovedPermissionDialog}\n onRemovePermissionSuccess={handleRemovePermissionSuccess} />\n )}\n\n {administrationHistoryOn && (\n <PermissionsHistory\n isImplementationLevelType={false}\n mode=\"userHistory\"\n tableHeaderList={['Data zmiany', \"Nazwa uprawnienia\", 'Rodzaj operacji', 'Użytkownik wprowadzajÄ…cy']}\n url={API_URLS.usersPermissionsHistoryContentDictionariesUsers.path}\n userId={id_}\n onClose={handleCloseAdministrationHistory} />\n )}\n\n {implementationLevelHistoryOn && (\n <PermissionsHistory\n isImplementationLevelType={true}\n mode=\"userHistory\"\n tableHeaderList={['Data zmiany', \"Nazwa poziomu\", 'Rodzaj operacji', 'Użytkownik wprowadzajÄ…cy']}\n url={API_URLS.usersPermissionsHistoryAdvertisementsProjectsEnrollments.path}\n userId={id_}\n onClose={handleCloseImplementationLevelHistory} />\n )}\n </>\n )\n }\n </>\n )\n )\n }\n </>\n )\n};\n","import {\n ADVERTISEMENT_STATUS_FILTERS_CHOICES,\n CZY_PROJEKT_CHOICES,\n PROJECTS_MANAGEMENTS_CHOICES,\n RODZAJ_ADRESU_FILTERS_CHOICES,\n TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES,\n USER_STATUS_CHOICES\n} from './const';\n\n\nconst ADVERTISEMENTS_CLEANED_FILTERS = {\n ktoUtworzyl: 0,\n dataUtworzenia: '',\n ktoModyfikowal: 0,\n dataModyfikacji: '',\n terminOfert: '',\n tytul: '',\n ogloszenie_numer: '',\n status: 0,\n};\n\nconst PROJECTS_CLEANED_FILTERS = {\n calyNumer: '',\n nazwa: '',\n typ: {value: CZY_PROJEKT_CHOICES[0][0], label: CZY_PROJEKT_CHOICES[0][1]},\n};\n\nconst SEARCH_CLEANED_FILTERS = {\n title: '',\n publicationDateRange: {\n type: null,\n from: '',\n to: '',\n },\n submissionDeadlineRange: {\n type: null,\n from: '',\n to: '',\n },\n status: ['PUBLISHED', ],\n advertiserName: '',\n advertiserIdentificationNumber: '',\n category: null,\n subcategory: null,\n cpvItem: [],\n fulfillmentPlaces: [],\n programme: [],\n};\n\nconst USERS_CLEANED_FILTERS = {\n identifier: '',\n email: '',\n forename: '',\n surname: '',\n status: {value: USER_STATUS_CHOICES[0][0], label: USER_STATUS_CHOICES[0][1]},\n};\n\n\nconst FAVORITES_ADVERT_CLEANED_FILTERS = {\n status: ['PUBLISHED', ],\n advertiserIdentificationNumber: '',\n category: null,\n subcategory: null,\n cpvItem: [],\n fulfillmentPlaces: [],\n programme: [],\n mode: 'favorite'\n};\n\nconst PROJECTS_MANAGEMENTS_CLEANED_FILTERS = {\n userEmail: '',\n userForename: '',\n userSurname: '',\n type: {value: PROJECTS_MANAGEMENTS_CHOICES[0][0], label: PROJECTS_MANAGEMENTS_CHOICES[0][1]},\n fullNumber: '',\n name: '',\n perspective: null,\n programme: null,\n priority: null,\n activity: null,\n institution: null,\n region: null,\n};\n\nconst ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS = {\n userEmail: '',\n userForename: '',\n userSurname: '',\n advertiserName: '',\n // Poland\n advertiserAddressType: RODZAJ_ADRESU_FILTERS_CHOICES.filter(\n choice => choice.value === 'all')[0],\n // NIP\n advertiserIdentificationNumberType:\n TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES.filter(\n choice => choice.value === 'all')[0],\n advertiserIdentificationNumber: '',\n advertiserAddressCountry: '',\n advertiserAddressVoivodeship: '',\n advertiserAddressPoviat: '',\n advertiserAddressCommune: '',\n advertiserAddressLocality: '',\n announcementStatus: ADVERTISEMENT_STATUS_FILTERS_CHOICES[0],\n announcementNumber: '',\n title: '',\n announcementProjectEnrollmentPerspective: null,\n announcementProjectEnrollmentProgramme: null,\n announcementProjectEnrollmentPriority: null,\n announcementProjectEnrollmentActivity: null,\n announcementProjectEnrollmentInstitution: null,\n announcementProjectEnrollmentRegion: null,\n announcementProjectEnrollmentFullNumber: '',\n announcementPublicationDateFrom: '',\n announcementPublicationDateTo: '',\n submissionDeadlineFrom: '',\n submissionDeadlineTo: '',\n};\n\nconst filterAdvertisements = (advertisementList, filtersAreOn, filters) => {\n if (!filtersAreOn) {\n return advertisementList\n }\n\n let advertisements = advertisementList.slice();\n for (let [name, value] of Object.entries(filters)) {\n if (filters[name] !== ADVERTISEMENTS_CLEANED_FILTERS[name]) {\n if (['ktoUtworzyl', 'ktoModyfikowal'].includes(name)) {\n advertisements = advertisements.filter(o => o.ogloszenie[name].id === value);\n } else if (name === 'status') {\n advertisements = advertisements.filter(o => o.ogloszenie.status.id === value);\n } else if (name === 'tytul') {\n advertisements = advertisements.filter(o => o[name] !== null && o[name].toLowerCase().includes(value.toLowerCase()));\n } else if (name === 'ogloszenie_numer') {\n const [attr, subattr] = name.split('_');\n advertisements = advertisements.filter(o => {\n const adValue = o[attr][subattr];\n return adValue !== null && adValue.toLowerCase().includes(value.toLowerCase())\n });\n } else if (name === 'terminOfert') {\n advertisements = advertisements.filter(o => {\n let terminOfert = o[name];\n if (!!terminOfert) {\n terminOfert = terminOfert.slice(0, 10);\n }\n return terminOfert === value;\n });\n } else {\n advertisements = advertisements.filter(o => o[name] === value);\n }\n }\n }\n return advertisements\n}\n\nconst filterProjects = (projectList, filtersAreOn, filters) => {\n if (!filtersAreOn) {\n return projectList\n }\n\n for (let [name, value] of Object.entries(filters)) {\n if (filters[name] !== PROJECTS_CLEANED_FILTERS[name]) {\n if (name === 'typ') {\n if (value.value !== 'all') {\n projectList = projectList.filter(p => (p.typ === 'project').toString() === value.value);\n }\n } else {\n projectList = projectList.filter(\n p => p[name] !== null && p[name].toLowerCase().includes(value.toLowerCase()));\n }\n }\n }\n return projectList\n}\n\n\nconst getSearchFiltersCount = (filters) => {\n let counter = 0;\n for (let [name, value] of Object.entries(filters)) {\n if (['status', 'cpvItem', 'fulfillmentPlaces', 'programme'].includes(name)) {\n // list counters\n if (value.length) {\n counter++;\n }\n } else if (['publicationDateRange', 'submissionDeadlineRange'].includes(name)) {\n if (Object.values(value).some(v => !!v)) {\n counter++;\n }\n } else if (!!value) {\n counter++;\n }\n }\n return counter\n}\n\nconst getUsersFiltersCount = (filters) => {\n let counter = 0;\n for (let [name, value] of Object.entries(filters)) {\n if (name === 'status' || USERS_CLEANED_FILTERS[name] !== value) {\n counter++;\n }\n }\n return counter\n}\n\nconst getFavoritesAdvertFiltersCount = (filters) => {\n let counter = 0;\n for (let [name, value] of Object.entries(filters)) {\n if (FAVORITES_ADVERT_CLEANED_FILTERS[name] !== value) {\n \n if(!Array.isArray(value) || (Array.isArray(value) && value.length > 0))\n {\n counter++;\n }\n \n }\n }\n return counter\n}\n\nconst getOffersFiltersCount = (filters, emptyFilters) => {\n let counter = 0;\n for (let [name, value] of Object.entries(filters)) {\n if (['status', 'isAdmin'].includes(name) || emptyFilters[name] !== value) {\n counter++;\n }\n }\n return counter\n}\n\nconst getProjectsManagementsFiltersCount = (filters) => {\n if (filters === null) { return 0 }\n let counter = 0;\n for (let [name, value] of Object.entries(filters)) {\n if (['type', ].includes(name) || PROJECTS_MANAGEMENTS_CLEANED_FILTERS[name] !== value) {\n counter++;\n }\n }\n return counter\n};\n\nconst getAdvertisementsManagementsFiltersCount = (filters) => {\n if (filters === null) { return 0 }\n let counter = 0;\n for (let [name, value] of Object.entries(filters)) {\n if ([\n 'advertiserAddressVoivodeship',\n 'advertiserAddressPoviat',\n 'advertiserAddressCommune'\n ].includes(name)) {\n // don't count it, because they are not inputs\n continue\n }\n if (name === 'advertiserIdentificationNumberType') {\n if (filters.advertiserAddressType.value === 'poland') {\n // identification number select is shown\n counter++;\n }\n continue\n }\n if (['advertiserAddressType', 'announcementStatus'].includes(name) ||\n ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS[name] !== value ) {\n counter++;\n }\n }\n return counter\n};\n\n\nexport {\n ADVERTISEMENTS_CLEANED_FILTERS,\n ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS,\n PROJECTS_CLEANED_FILTERS,\n PROJECTS_MANAGEMENTS_CLEANED_FILTERS,\n SEARCH_CLEANED_FILTERS,\n USERS_CLEANED_FILTERS,\n FAVORITES_ADVERT_CLEANED_FILTERS,\n filterAdvertisements,\n filterProjects,\n getAdvertisementsManagementsFiltersCount,\n getOffersFiltersCount,\n getProjectsManagementsFiltersCount,\n getSearchFiltersCount,\n getUsersFiltersCount,\n getFavoritesAdvertFiltersCount\n};\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { DataTableCell, DataTableRow } from '@rmwc/data-table';\nimport { Icon } from '@rmwc/icon';\n\nimport { UserContext } from '../../../context/user-context';\nimport { getUsersFiltersCount, USERS_CLEANED_FILTERS } from '../../../filters';\nimport { API_URLS } from '../../../urls/api';\nimport { ButtonStyled, GridCustom, TableCustom, Text } from '../../common';\nimport { colors } from '../../vars/vars';\nimport { PaginatedBaseComponent } from '../common';\nimport { FiltryUzytkownikow } from './FiltryUzytkownikow';\n\n\nclass Uzytkownicy extends PaginatedBaseComponent {\n message403 = 'Nie masz uprawnieÅ„ do przeglÄ…dania listy użytkowników.';\n\n componentDidMount() {\n if (!this.context.permissions.usersAndPermissionsPreviewListUsers) {\n window.scrollTo(0, 0);\n this.setState({\n initializingOn: false,\n pageNotPermitted : true,\n });\n return\n }\n super.componentDidMount();\n }\n\n // helpers\n\n preState(props) {\n super.preState(props);\n this.objectsName = 'uzytkownicy';\n this.paginateBy = 100;\n this.sortingValues = [\n ['identifier', 'Po identyfikatorze Użytkownika'],\n ['email', 'Po adresie e-mail'],\n ['forename', 'Po imieniu'],\n ['surname', 'Po nazwisku'],\n ['status', 'Po statusie'],\n ];\n this.sortingLabel = 'Sortuj użytkowników';\n this.filteringLabel = 'Filtruj listÄ™';\n this.filtersComponentClass = FiltryUzytkownikow;\n\n this.getFiltersCount = getUsersFiltersCount;\n }\n\n getAdditionalState(props) {\n return {\n ...super.getAdditionalState(props),\n selectedSort: {value: this.sortingValues[3][0], label: this.sortingValues[3][1]},\n objects: {},\n filters: USERS_CLEANED_FILTERS,\n }\n }\n\n getFetchUrl() {\n return API_URLS.users.path\n }\n\n getFetchData() {\n let queryDict = super.getFetchData();\n\n // set filters values\n for (let [name, value] of Object.entries(this.state.filters)) {\n if (name === 'status') {\n queryDict[name] = value.value;\n } else if (value !== USERS_CLEANED_FILTERS[name]) {\n queryDict[name] = value.trim();\n }\n }\n\n return queryDict\n }\n\n getFetchError(message) {\n message = super.getFetchError(message);\n return `Nie udaÅ‚o siÄ™ wyszukać użytkowników. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Nie udaÅ‚o siÄ™ wyszukać użytkowników. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n callback403 = () => {\n this.context.removePermission('usersAndPermissionsPreviewListUsers');\n }\n\n // rendering\n\n renderHeader() {\n return (\n <Text tag=\"h1\" mainHeader>Użytkownicy Bazy KonkurencyjnoÅ›ci</Text>\n )\n }\n\n renderFiltersButton() {\n return (\n <>\n {super.renderFiltersButton()}\n <GridCustom flexTop>\n <a href='/konto/panel/uzytkownicy/' className=\"mdc-button mdc-button--unelevated btn--primary\">Lista użytkowników CAS</a>\n </GridCustom>\n </>\n )\n }\n\n renderEmptyObjects() {\n return <Text error role=\"alert\">Nie znaleziono użytkowników speÅ‚niajÄ…cych kryteria wyszukiwania.</Text>\n }\n\n renderList() {\n const total = this.state.total;\n return (\n <>\n <Text accentHeader tag=\"h2\" role=\"status\">\n Znaleziono {total < this.paginateBy ? '' : 'okoÅ‚o '}{total} {total === 1 ? 'użytkownika' : 'użytkowników'}.\n </Text>\n <TableCustom tableHeaderList={[\n 'Adres e-mail',\n 'ImiÄ™ i nazwisko',\n 'Status, Identyfikator Użytkownika',\n <span className=\"sr-only\">Opcje</span>,\n ]}>\n {this.state.objects.map(o => this.renderUzytkownik(o))}\n </TableCustom>\n </>\n )\n }\n\n renderUzytkownik(uzytkownik) {\n return (\n <DataTableRow key={uzytkownik.id}>\n <DataTableCell><Text>{uzytkownik.email}</Text></DataTableCell>\n <DataTableCell><Text>{uzytkownik.imie} {uzytkownik.nazwisko}</Text></DataTableCell>\n <DataTableCell>\n {uzytkownik.kontoZablokowane ? <Text><Icon aria-hidden=\"true\" icon=\"cancel\" style={{ color: colors.textHintOnLight }} title=\"zablokowany\" /> zablokowany</Text> : <Text><Icon aria-hidden=\"true\" icon=\"check_circle\" style={{ color: colors.secondary }} title=\"aktywny\" /> aktywny</Text>}\n <Text className=\"table__secondary-info\">Id: {uzytkownik.identyfikator}</Text>\n </DataTableCell>\n <DataTableCell>\n <ButtonStyled primary tag={Link} to={`/uzytkownicy/${uzytkownik.id}`}>PodglÄ…d danych</ButtonStyled>\n </DataTableCell>\n </DataTableRow>\n )\n }\n}\n\nUzytkownicy.contextType = UserContext;\n\nexport { Uzytkownicy };\n","import React, { useEffect, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { TabBar, Tab } from '@rmwc/tabs';\n\nimport { Breadcrumps } from '../../common';\nimport { Permissions } from './Permissions';\nimport { Uzytkownicy } from './Uzytkownicy';\n\n\nconst TAB_INDEXES = {\n lista: 0,\n uprawnienia: 1,\n};\nconst REVERTED_TAB_INDEXES = {\n 0: 'lista',\n 1: 'uprawnienia',\n};\n\n\nexport const Users = (props) => {\n const [selectedTab, setSelectedTab] = useState(TAB_INDEXES.lista);\n const location = useLocation();\n\n useEffect(() => {\n document.title = \"Baza KonkurencyjnoÅ›ci - użytkownicy\";\n }, []);\n\n useEffect(() => {\n const params = new URLSearchParams(location.search);\n const section = params.get('sekcja') || 'lista';\n setSelectedTab(TAB_INDEXES[section] || TAB_INDEXES.lista);\n }, [location.search]);\n\n function handleChangeTab(ev) {\n props.history.push(\n `${location.pathname}?sekcja=${\n REVERTED_TAB_INDEXES[ev.detail.index] ||\n REVERTED_TAB_INDEXES[0]\n }`\n );\n }\n\n return (\n <>\n <Breadcrumps notZarzadzanieTrescia>\n <li className=\"breadcrumps__current\">\n Administracja użytkownikami i uprawnieniami\n </li>\n </Breadcrumps>\n <TabBar\n activeTabIndex={selectedTab}\n onActivate={handleChangeTab}>\n <Tab aria-label=\"Lista użytkowników, panel zakÅ‚adek, lista 1 z 2\" label=\"Lista użytkowników\" />\n <Tab aria-label=\"PrzeglÄ…d uprawnieÅ„, panel zakÅ‚adek, lista 2 z 2\" label=\"PrzeglÄ…d uprawnieÅ„\" />\n </TabBar>\n {selectedTab === TAB_INDEXES.lista && (\n <Uzytkownicy {...props} />\n )}\n {selectedTab === TAB_INDEXES.uprawnienia && <Permissions />}\n </>\n )\n};\n","import React, { Component } from 'react';\nimport { Icon } from '@rmwc/icon';\nimport { Typography } from '@rmwc/typography';\n\nimport { Text } from '../../common';\n\n\nclass DraftToComponents extends Component {\n\n // helpers\n\n isEmptyString(str) {\n return str === undefined || str === null || str.length === 0 || str.trim().length === 0\n }\n\n isAtomicEntityBlock(block) {\n return block.entityRanges.length > 0 || block.type === 'atomic'\n }\n\n isList(blockType) {\n return blockType === 'unordered-list-item' || blockType === 'ordered-list-item';\n }\n\n // rendering\n\n render() {\n const { role } = this.props;\n\n return <section className=\"draft-to-components\" role={role}>{this.renderContent()}</section>\n }\n\n renderContent() {\n const content = this.props.content;\n const blocks = content.blocks;\n if (!(blocks && blocks.length > 0)) { return null }\n let orderedListIndex = 0;\n return blocks.map(block => {\n switch (block.type) {\n case 'blockquote':\n orderedListIndex = 0;\n return this.renderBlockquote(block)\n case 'ordered-list-item':\n orderedListIndex++;\n return this.renderOrderedListItem(block, orderedListIndex)\n case 'unordered-list-item':\n orderedListIndex = 0;\n return this.renderUnorderedListItem(block)\n default:\n orderedListIndex = 0;\n if (this.isAtomicEntityBlock(block)) {\n return this.renderAtomic(block, content.entityMap[block.entityRanges[0].key])\n }\n return this.renderText(block)\n }\n })\n }\n\n renderBlockquote(block) {\n return (\n <Typography key={block.key} tag=\"p\" className=\"draft-to-components__blockquote\">\n <Icon icon=\"format_quote\" aria-hidden=\"true\"/>\n {this.renderSections(block)}\n </Typography>\n )\n }\n\n renderOrderedListItem(block, index) {\n return <Text key={block.key} tag=\"ol\" className=\"draft-to-components__ol\">{index}. {this.renderSections(block)}</Text>\n }\n\n renderUnorderedListItem(block) {\n return <Text key={block.key} tag=\"ul\" className=\"draft-to-components__ul\">- {this.renderSections(block)}</Text>\n }\n\n renderAtomic(block, entity) {\n switch (entity.type) {\n case 'LINK':\n return this.renderLink(block, entity.data)\n case 'IMAGE':\n return this.renderImage(block, entity.data)\n case 'EMBEDDED_LINK':\n return this.renderEmbed(block, entity.data)\n default:\n return null\n }\n }\n\n renderLink(block, data) {\n return <a key={block.key} id={'a11y-url-' + block.key} href={data.url} className=\"link-text\" target={data.targetOption || ''}>{this.renderSections(block)}</a>\n }\n\n renderImage(block, data) {\n return <img key={block.key} src={data.src} alt={data.alt || ''} width={data.width} height={data.height}/>\n }\n\n renderEmbed(block, data) {\n return <iframe key={block.key} width={data.width} height={data.height} src={data.src} frameBorder=\"0\" title={block.key}></iframe>\n }\n\n renderText(block) {\n return <p key={block.key}>{this.renderSections(block)}</p>\n }\n\n renderSections(block) {\n if (!block.inlineStyleRanges.length) {\n return this.renderPureText(block.text, block.key)\n }\n const inlineStyleRanges = block.inlineStyleRanges.map(range => [range.offset, range.offset + range.length, range.style.toLowerCase()]);\n\n let charsWithStyles = [];\n let i = 0;\n for (let char of block.text) {\n let charStyles = new Set();\n for (let r of inlineStyleRanges) {\n if (i >= r[0] && i <= r[1]) {\n charStyles.add(r[2]);\n }\n }\n charsWithStyles.push([char, [...charStyles].join('')]);\n i++;\n }\n\n let currentText = '';\n let currentStyle = '';\n let blockSections = [];\n for (let [char, style] of charsWithStyles) {\n if (style === currentStyle) {\n currentText += char;\n } else {\n blockSections.push([currentText, currentStyle]);\n currentText = char;\n currentStyle = style\n }\n }\n blockSections.push([currentText, currentStyle]);\n\n return blockSections.map((section, i) => {\n return this.renderSection(block.key + i, section)\n })\n }\n\n renderPureText(text, blockKey) {\n return text;\n }\n\n renderSection(key, section) {\n return <span key={key} style={styles[section[1]]}>{section[0]}</span>\n }\n}\n\n\nconst styles = {\n bold: {\n fontWeight: 'bold',\n },\n italic: {\n fontStyle: 'italic',\n },\n bolditalic: {\n fontStyle: 'italic',\n fontWeight: 'bold',\n },\n italicbold: {\n fontStyle: 'italic',\n fontWeight: 'bold',\n },\n // ^ these styles should be doubled because it is difference if italic or bold is choosen first\n};\n\n\nexport { DraftToComponents };\n","import React from 'react';\nimport {\n DataTable,\n DataTableBody,\n DataTableCell,\n DataTableContent,\n DataTableHead,\n DataTableHeadCell,\n DataTableRow,\n} from '@rmwc/data-table';\n\nimport { UserContext } from '../../../context/user-context';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { AuditData, Breadcrumps, ButtonStyled, Text } from '../../common';\nimport { BaseComponent } from '../common';\nimport { DraftToComponents } from './DraftToComponents';\nimport {serializeAuditData} from \"../../../helpers\";\n\n\nclass Ciasteczka extends BaseComponent {\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n\n if (data === null) {\n this.setState({initializingOn: false});\n } else {\n const cookies = getSerializedObject(\n data,\n {\n nonRecursiveKeys: ['tresc', ],\n dateAttributes: ['dataOpublikowania'],\n dateTimeAttributes: ['dataOpublikowania'],\n }\n );\n this.setState({\n initializingOn: false,\n ciasteczka: cookies,\n auditData: serializeAuditData(cookies),\n });\n }\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n ciasteczka: {\n tresc: '',\n dataOpublikowania: '',\n },\n auditData: {},\n }\n }\n\n getFetchUrl() {\n return API_URLS.cookiesAdmin.path\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać ciasteczek. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Podczas pobierania ciasteczek wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n callback403 = () => {\n this.removePermission();\n }\n\n removePermission() {\n this.context.removePermission('generalContentCookiesRegulation');\n }\n\n // rendering\n\n renderHeader() {\n return (\n <>\n <Breadcrumps>\n <li className=\"breadcrumps__current\">Ciasteczka</li>\n </Breadcrumps>\n <Text tag=\"h2\" mainHeader>Ciasteczka</Text>\n </>\n )\n }\n\n renderContent() {\n if (this.state.ciasteczka.tresc === '') {\n return <ButtonStyled add onClick={() => this.props.history.push('/zarzadzanie-trescia/ciasteczka/nowe')}>Dodaj ciasteczka</ButtonStyled>;\n } else {\n const ciasteczka = this.state.ciasteczka;\n return (\n <>\n <DataTable className=\"table\">\n <DataTableContent>\n <DataTableHead>\n <DataTableRow>\n <DataTableHeadCell>Treść</DataTableHeadCell>\n <DataTableHeadCell>Aktualna wersja</DataTableHeadCell>\n <DataTableHeadCell></DataTableHeadCell>\n </DataTableRow>\n </DataTableHead>\n <DataTableBody>\n <DataTableRow>\n <DataTableCell>\n <DraftToComponents content={ciasteczka.tresc} />\n </DataTableCell>\n <DataTableCell>z dn. {ciasteczka.dataOpublikowania}</DataTableCell>\n <DataTableCell><ButtonStyled lite noMargin onClick={() => this.props.history.push('/zarzadzanie-trescia/ciasteczka/edytuj')}>Edytuj</ButtonStyled></DataTableCell>\n </DataTableRow>\n </DataTableBody>\n </DataTableContent>\n </DataTable>\n <AuditData {...this.state.auditData} />\n </>\n );\n }\n }\n}\n\nCiasteczka.contextType = UserContext;\n\nexport { Ciasteczka };\n","import React from 'react';\n\nimport { getCookieValue } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { ButtonStyled, GridCustom } from '../../common';\nimport { BaseComponent } from '../common';\nimport { DraftToComponents } from './DraftToComponents';\n\n\nconst COOKIE_NAME = 'bzkc';\n\n\nclass CiasteczkaFront extends BaseComponent {\n\n // helpers\n\n getAdditionalState(props) {\n return {\n showCookies: false,\n ciasteczka: {},\n }\n }\n\n getFetchUrl() {\n return '/api/cookies'\n }\n\n // handlers\n\n handleFetchSuccess = (data) => {\n super.handleFetchSuccess(data);\n\n if (data === null) {\n this.setState({initializingOn: false});\n } else {\n // if cookies accepted, don't render them\n const serializedObject = getSerializedObject(\n data,\n {\n nonRecursiveKeys: ['tresc', ],\n dateAttributes: ['dataOpublikowania'],\n dateTimeAttributes: ['dataOpublikowania'],\n }\n );\n if (parseInt(getCookieValue(COOKIE_NAME)) === new Date(serializedObject.dataOpublikowania).getTime()) {\n this.setState({initializingOn: false});\n } else {\n this.setState({\n initializingOn: false,\n showCookies: true,\n ciasteczka: serializedObject,\n });\n }\n }\n }\n\n handleFetchError = (data) => {\n // do nothing, don't render error\n this.xhrFetch = null; // clean xhr object\n this.setState({initializingOn: false});\n }\n\n handleFetchIncorrectStatus = (status) => {\n this.handleFetchError(null);\n }\n\n handleCloseCiasteczka = (savingDate) => {\n document.cookie = `${COOKIE_NAME}=${new Date(this.state.ciasteczka.dataOpublikowania).getTime()};path=/`;\n this.setState({showCookies: false});\n }\n\n // rendering\n\n render() {\n if (this.state.initializingOn || !this.state.showCookies) { return null }\n return (\n <GridCustom noWrap fullwidth className=\" cookies-container\">\n <DraftToComponents content={this.state.ciasteczka.tresc} />\n <ButtonStyled\n onClick={this.handleCloseCiasteczka}\n primary\n >\n <span className=\"sr-only\">AkceptujÄ™ politykÄ™ dotyczÄ…cÄ… wykorzystania plików cookies. </span>Zamknij<span className=\"sr-only\"> pop-up.</span>\n </ButtonStyled>\n </GridCustom>\n )\n }\n}\n\n\nexport { CiasteczkaFront };\n","import React from 'react';\nimport { Image, StyleSheet, Text, View } from '@react-pdf/renderer';\n\nimport { splitLineByChar } from '../../../helpers';\nimport { DraftToComponents } from './DraftToComponents';\n\nclass DraftToPdf extends DraftToComponents {\n\n // rendering\n render() {\n return this.renderContent()\n }\n\n renderBlockquote(block) {\n return <Text key={block.key} style={styles.blockquote}>\"{this.renderSections(block)}\"</Text>\n }\n\n renderOrderedListItem(block, index) {\n return <Text key={block.key} style={styles.listItem}>{index}. {this.renderSections(block)}</Text>\n }\n\n renderUnorderedListItem(block) {\n return <Text key={block.key} style={styles.listItem}>- {this.renderSections(block)}</Text>\n }\n\n renderLink(block, data) {\n return <Text key={block.key} style={styles.link}>{data.url}</Text>\n }\n\n renderImage(block, data) {\n return (\n <Image key={block.key} src={data.src} style={styles.image} />\n )}\n\n renderEmbed(block, data) {\n return <Text key={block.key} style={styles.infoText}>OdnoÅ›nik do multimediów: <Text style={styles.link}>{data.src}</Text></Text>\n }\n\n renderText(block) {\n return <View key={block.key}>{this.renderSections(block)}</View>\n }\n\n renderPureText(text, blockKey) {\n return splitLineByChar(text).map((line, i) => <Text key={blockKey + i}>{line}</Text>)\n }\n\n renderSection(key, section) {\n return <Text key={key} style={styles[section[1]]}>{section[0]}</Text>\n }\n}\n\n\nconst styles = StyleSheet.create({\n bold: {\n fontWeight: 'bold',\n },\n italic: {\n fontStyle: 'italic',\n },\n bolditalic: {\n fontStyle: 'italic',\n fontWeight: 'bold',\n },\n italicbold: {\n fontStyle: 'italic',\n fontWeight: 'bold',\n },\n blockquote: {\n fontStyle: 'italic',\n paddingLeft: 20,\n marginVertical: 20\n },\n image: {\n display: 'block',\n position: 'relative',\n marginVertical: 20,\n marginHorizontal: 'auto',\n width: 200,\n },\n infoText: {\n marginVertical: 20,\n fontStyle: 'italic',\n fontWeight: 'bold'\n },\n link: {\n fontStyle: 'normal',\n fontWeight: 'bold',\n textDecoration: 'underline'\n },\n listItem: {\n paddingLeft: 20,\n }\n});\n\n\nexport { DraftToPdf };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport { countWysiwygChars } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { validateWysiwygEditor } from '../../../validators';\nimport {\n Breadcrumps,\n ButtonStyled,\n Container,\n FieldWithLabel,\n GridCustom,\n Text,\n WysiwygEditor,\n} from '../../common';\nimport { Ciasteczka } from './Ciasteczka';\n\n\nconst SAVE_BUTTON_DEFAULT_LABEL = 'Zapisz ciasteczka';\n\n\nclass FormCiasteczka extends Ciasteczka {\n\n // basic functions\n\n componentDidMount() {\n if (!this.props.editing) {\n this.setState({initializingOn: false});\n } else {\n // get ciasteczka from server\n super.componentDidMount();\n }\n }\n\n // handlers\n\n handleFetchSuccess(data) {\n this.xhrFetch = null;\n if (data === null) {\n this.setState({initializingOn: false, pageNotFound: true});\n } else {\n this.setState({\n initializingOn: false,\n tresc: getSerializedObject(\n data, {nonRecursiveKeys: ['tresc', ]}).tresc\n });\n }\n }\n\n handleChangeAttribute(name, value) {\n this.setState(prevState => ({\n [name]: value,\n errors: Object.assign({}, prevState.errors, {[name]: ''}),\n }));\n }\n\n handleSave() {\n this.setState(\n {savingOn: true, fetchSaveError: '', saveBtnText: 'Trwa zapisywanie...'},\n () => {\n const [isValid, errors] = this.validate();\n if (isValid) {\n // save ciasteczka on server\n this.xhrFetch = fetchApi(\n API_URLS.cookiesAdmin.path,\n this.firstSaving ? 'POST' : 'PUT',\n {},\n getSerializedObject(\n {tresc: this.state.tresc},\n {toServer: true, nonRecursiveKeys: ['tresc',]}\n ),\n this.handleFetchSaveSuccess,\n this.handleFetchSaveError,\n this.handleFetchSaveIncorrectStatus,\n );\n } else {\n this.setState({savingOn: false, errors, saveBtnText: SAVE_BUTTON_DEFAULT_LABEL});\n }\n }\n );\n }\n\n handleFetchSaveSuccess(data) {\n this.xhrFetch = null;\n this.setState(\n {savingOn: false, saveBtnText: 'Zapisano'},\n () => {\n this.firstSaving = false;\n this.saveMsgTimeout = setTimeout(() => {\n this.setState({saveBtnText: SAVE_BUTTON_DEFAULT_LABEL})\n }, 5000)\n }\n );\n }\n\n handleFetchSaveError(data) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n savingOn: false,\n saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n fetchSaveError: `Nie udaÅ‚o siÄ™ zapisać ciasteczek. ${data.message}`,\n });\n }\n\n handleFetchSaveIncorrectStatus(status) {\n this.xhrFetch = null; // clean xhr object\n let message = '';\n if (status === 403) {\n message = `Nie masz uprawnieÅ„ do ${this.firstSaving\n ? 'dodawania' : 'edycji'} ciasteczek.`;\n // update permission value in context\n this.removePermission();\n }\n this.setState({\n savingOn: false,\n saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n fetchSaveError: message || `Podczas zapisu ciasteczek wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`,\n });\n }\n\n // helpers\n\n preState(props) {\n this.trescMaxLength = 1000;\n this.firstSaving = true;\n }\n\n getAdditionalState(props) {\n return {\n tresc: '',\n savingOn: false,\n fetchSaveError: '',\n errors: {\n tresc: '',\n },\n saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n }\n }\n\n setAdditionalHandlers() {\n this.handleSave = this.handleSave.bind(this);\n this.handleFetchSaveSuccess = this.handleFetchSaveSuccess.bind(this);\n this.handleFetchSaveError = this.handleFetchSaveError.bind(this);\n this.handleFetchSaveIncorrectStatus = this.handleFetchSaveIncorrectStatus.bind(this);\n }\n\n validate() {\n // clean errors\n this.setState({errors: {}});\n\n let isValid = true;\n let errors = {};\n\n // validate tresc\n const tresc = this.state.tresc;\n if (!validateWysiwygEditor(tresc)) {\n errors['tresc'] = 'To pole jest wymagane.';\n isValid = false;\n } else if (countWysiwygChars(tresc) > this.trescMaxLength) {\n errors['tresc'] = `To pole może mieć maksymalnie ${this.trescMaxLength} znaków.`;\n isValid = false;\n }\n\n return [isValid, errors]\n }\n\n // rendering\n\n renderHeader() {\n return (\n <Breadcrumps>\n <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia/ciasteczka'>Ciasteczka</Link></li>\n <li className=\"breadcrumps__current\">{this.props.editing ? 'Edytuj' : 'Dodaj'} ciasteczka</li>\n </Breadcrumps>\n )\n }\n\n renderContent() {\n const {\n errors,\n fetchSaveError,\n saveBtnText,\n savingOn,\n tresc,\n } = this.state;\n const isTrescInvalid = (errors.tresc || '').length > 0;\n return (\n <>\n <Text tag=\"h2\" mainHeader>{this.props.editing ? 'Edytuj' : 'Dodaj'} ciasteczka</Text>\n <Container>\n <GridCustom fullwidth>\n <FieldWithLabel label=\"Treść\" className=\"wysiwyg-wrapper\">\n <WysiwygEditor\n disabled={savingOn}\n invalid={isTrescInvalid}\n initialContentState={tresc}\n localization={{ locale: 'pl' }}\n maxLength={this.trescMaxLength}\n toolbar={{options: []}}\n toolbarHidden\n onContentStateChange={(contentState) => this.handleChangeAttribute('tresc', contentState)}\n />\n {isTrescInvalid && <Text error>{errors.tresc}</Text>}\n </FieldWithLabel>\n </GridCustom>\n <GridCustom flexEnd>\n <ButtonStyled\n disabled={savingOn}\n save\n onClick={this.handleSave}\n >{saveBtnText}</ButtonStyled>\n </GridCustom>\n {fetchSaveError.length > 0 && <Text error role=\"alert\">{fetchSaveError}</Text>}\n </Container>\n </>\n )\n }\n}\n\nFormCiasteczka.contextType = UserContext;\n\nexport { FormCiasteczka };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Checkbox } from '@rmwc/checkbox';\n\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport { countWysiwygChars, dateToString } from '../../../helpers';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { validateWysiwygEditor } from '../../../validators';\nimport {\n Breadcrumps,\n ButtonStyled,\n Container,\n DateCalendar,\n FieldWithLabel,\n GridCustom,\n Text,\n TextFieldCustom,\n WysiwygEditor,\n} from '../../common';\nimport { BaseComponent } from '../common';\n\n\nconst EMPTY_KOMUNIKAT = {\n id: null,\n naglowek: '',\n tresc: '',\n czyZoltyPasek: false,\n czyAktywny: true,\n czyBezterminowy: true,\n dataOpublikowania: '',\n dataWaznosci: '',\n slug: '',\n};\nconst SAVE_BUTTON_DEFAULT_LABEL = 'Zapisz komunikat';\n\n\nclass FormKomunikat extends BaseComponent {\n\n // base functions\n\n componentDidMount() {\n if (this.state.isNew) {\n this.setState({initializingOn: false});\n } else {\n // it is editing, get object from server\n this.fetchInitialData();\n }\n }\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n\n const komunikat = getSerializedObject(\n data,\n {\n nonRecursiveKeys: ['tresc'],\n dateAttributes: ['dataOpublikowania', 'dataWaznosci'],\n dateTimeAttributes: ['dataOpublikowania', 'dataWaznosci'],\n }\n ).komunikat;\n if (!komunikat) {\n this.setState({initializingOn: false, pageNotFound: true});\n } else {\n this.setState(\n {\n initializingOn: false,\n komunikat: Object.assign(komunikat, {\n id: this.props.match.params.id,\n czyBezterminowy: komunikat.dataWaznosci === '',\n }),\n },\n () => {\n const urlParams = this.props.match.params;\n if (this.props.editing && komunikat.slug !== urlParams.slug) {\n // update url if slugs are not equal\n this.props.history.push(`/zarzadzanie-trescia/komunikaty/${urlParams.id}-${komunikat.slug}/edytuj`);\n }\n }\n );\n }\n }\n\n handleChangeAttribute(name, value) {\n let newData = {[name]: value}\n if (name === 'czyAktywny' && !value) {\n newData['czyZoltyPasek'] = false;\n }\n this.setState(prevState => ({\n komunikat: Object.assign({}, prevState.komunikat, newData),\n errors: Object.assign({}, prevState.errors, {[name]: ''}),\n }));\n }\n\n handleClearAttributeError(name) {\n this.setState(prevState => ({\n errors: Object.assign({}, prevState.errors, {[name]: ''}),\n }));\n }\n\n handleSave() {\n this.setState(\n {savingOn: true, fetchSaveError: '', saveBtnText: 'Trwa zapisywanie...'},\n () => {\n const [isValid, errors] = this.validate();\n if (isValid) {\n const isNew = this.state.isNew;\n // save object on server\n this.xhrFetch = fetchApi(\n isNew\n ? API_URLS.statementsAdmin.path\n : API_URLS.statementsAdminDetails.getUrl(\n this.state.komunikat.id),\n isNew ? 'POST' : 'PUT',\n {},\n getSerializedObject(\n this.state.komunikat, {toServer: true, nonRecursiveKeys: ['tresc', ]}),\n this.handleFetchSaveSuccess,\n this.handleFetchSaveError,\n this.handleFetchSaveIncorrectStatus,\n );\n } else {\n this.setState({savingOn: false, errors, saveBtnText: SAVE_BUTTON_DEFAULT_LABEL});\n }\n }\n );\n }\n\n handleFetchSaveSuccess(data) {\n this.xhrFetchSave = null;\n\n const komunikat = getSerializedObject(data).komunikat;\n this.setState(prevState => ({\n savingOn: false,\n saveBtnText: 'Zapisano',\n isNew: false,\n komunikat: Object.assign({}, prevState.komunikat, komunikat),\n }),\n () => {\n this.firstSaving = false;\n const urlParams = this.props.match.params;\n if (this.props.editing && komunikat.slug !== urlParams.slug) {\n // update url if slugs are not equal\n this.props.history.push(`/zarzadzanie-trescia/komunikaty/${urlParams.id}-${komunikat.slug}/edytuj`);\n }\n this.saveMsgTimeout = setTimeout(() => {\n this.setState({saveBtnText: SAVE_BUTTON_DEFAULT_LABEL})\n }, 5000)\n }\n );\n }\n\n handleFetchSaveError(data) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n savingOn: false,\n saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n fetchSaveError: `Nie udaÅ‚o siÄ™ zapisać komunikatu. ${translateErrorMessage(data.message)}`,\n });\n }\n\n handleFetchSaveIncorrectStatus(status) {\n this.xhrFetch = null; // clean xhr object\n if (status === 404) {\n this.setState({savingOn: false, pageNotFound: true});\n } else {\n let message = '';\n if (status === 403) {\n message = `Nie masz uprawnieÅ„ do ${this.state.isNew\n ? 'dodawania' : 'edycji'} komunikatu.`;\n // update permission value in context\n this.removePermission();\n }\n this.setState({\n savingOn: false,\n saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n fetchSaveError: message ||\n `Podczas zapisu komunikatu wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`,\n });\n }\n }\n\n // helpers\n\n preState(props) {\n this.trescMaxLength = 2000;\n }\n\n getAdditionalState(props) {\n return {\n isNew: !props.editing,\n savingOn: false,\n komunikat: EMPTY_KOMUNIKAT,\n fetchSaveError: '',\n errors: {\n tresc: '',\n },\n saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n }\n }\n\n setAdditionalHandlers() {\n this.handleSave = this.handleSave.bind(this);\n this.handleFetchSaveSuccess = this.handleFetchSaveSuccess.bind(this);\n this.handleFetchSaveError = this.handleFetchSaveError.bind(this);\n this.handleFetchSaveIncorrectStatus = this.handleFetchSaveIncorrectStatus.bind(this);\n }\n\n getFetchUrl() {\n return API_URLS.statementsAdminDetails.getUrl(\n this.props.match.params.id)\n }\n\n getFetchData() {\n return {context: 'admin_panel'}\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać komunikatu do edycji. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Podczas pobierania komunikatu do edycji wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n callback403 = () => {\n this.removePermission();\n }\n\n removePermission() {\n this.context.removePermission('statements');\n }\n\n validate() {\n let isValid = true;\n const requiredMsg = 'To pole jest wymagane.';\n let errors = {};\n\n const {\n czyBezterminowy,\n dataWaznosci,\n naglowek,\n tresc,\n } = this.state.komunikat;\n\n // validate naglowek\n if (!naglowek.length) {\n errors['naglowek'] = requiredMsg;\n isValid = false;\n }\n\n // validate tresc\n if (!validateWysiwygEditor(tresc)) {\n errors['tresc'] = requiredMsg;\n isValid = false;\n } else if (countWysiwygChars(tresc) > this.trescMaxLength) {\n errors['tresc'] = `To pole może mieć maksymalnie ${this.trescMaxLength} znaków.`;\n isValid = false;\n }\n\n // validate dataWaznosci\n if (!czyBezterminowy && !dataWaznosci.length) {\n errors['dataWaznosci'] = requiredMsg;\n isValid = false;\n }\n\n return [isValid, errors]\n }\n\n // rendering\n\n renderHeader() {\n const komunikat = this.state.komunikat;\n return (\n <Breadcrumps>\n <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia/komunikaty'>Komunikaty</Link></li>\n {komunikat.id !== null ? (\n <>\n <li className=\"breadcrumps__link\"><Link to={`/zarzadzanie-trescia/komunikaty/${komunikat.id}-${komunikat.slug}`}>Szczegóły komunikatu</Link></li>\n <li className=\"breadcrumps__current\">Edycja</li>\n </>\n ) : (\n <li className=\"breadcrumps__current\">Dodaj komunikat</li>\n )}\n </Breadcrumps>\n )\n }\n\n renderContent() {\n const {\n errors,\n fetchSaveError,\n komunikat,\n saveBtnText,\n savingOn,\n } = this.state;\n\n const isTrescInvalid = (errors.tresc || '').length > 0;\n const isNaglowekInvalid = (errors.naglowek || '').length > 0;\n const isDataWaznosciValid = (errors.dataWaznosci || '').length > 0;\n\n const dataWaznosciInputRef = React.createRef();\n\n return (\n <>\n <Text tag=\"h2\" mainHeader>Edycja komunikatu: {komunikat.naglowek}</Text>\n <Container>\n <GridCustom fullwidth>\n <FieldWithLabel\n label=\"Nagłówek\"\n labelFor=\"naglowek_id\"\n tag=\"label\"\n >\n <TextFieldCustom\n aria-describedby={isNaglowekInvalid ? 'naglowek_error' : null}\n characterCount\n clearFieldContext=\"nagłówek\"\n disabled={savingOn}\n id=\"naglowek_id\"\n invalid={isNaglowekInvalid}\n fullwidth\n maxLength={200}\n value={komunikat.naglowek}\n onClear={(ev) => this.handleChangeAttribute('naglowek', '')}\n onChange={(ev) => this.handleChangeAttribute('naglowek', ev.target.value)}\n onFocus={(ev) => this.handleClearAttributeError('naglowek')} />\n {isNaglowekInvalid && <Text error id=\"naglowek_error\">{errors.naglowek}</Text>}\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth>\n <FieldWithLabel label=\"Treść\" className=\"wysiwyg-wrapper\">\n <WysiwygEditor\n aria-describedby={isTrescInvalid ? 'komunikat_error' : null}\n disabled={savingOn}\n invalid={isTrescInvalid}\n initialContentState={komunikat.tresc}\n localization={{ locale: 'pl' }}\n maxLength={this.trescMaxLength}\n toolbar={{options: []}}\n toolbarHidden\n onContentStateChange={(contentState) => this.handleChangeAttribute('tresc', contentState)}\n />\n {isTrescInvalid && <Text error id=\"komunikat_error\">{errors.tresc}</Text>}\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth>\n <Checkbox\n checked={komunikat.czyAktywny}\n disabled={savingOn}\n label=\"Czy aktywny?\"\n onChange={(event) => this.handleChangeAttribute('czyAktywny', event.target.checked)}\n />\n <Checkbox\n disabled={savingOn}\n checked={komunikat.czyBezterminowy}\n label=\"Czy bezterminowy?\"\n onChange={(event) => {\n const checked = event.target.checked\n this.handleChangeAttribute('czyBezterminowy', checked);\n if (checked) {\n this.handleChangeAttribute('dataWaznosci', '');\n }\n }}\n />\n <Checkbox\n checked={komunikat.czyZoltyPasek}\n disabled={savingOn || !komunikat.czyAktywny}\n label=\"Czy żółty pasek?\"\n onChange={(event) => this.handleChangeAttribute('czyZoltyPasek', event.target.checked)}\n />\n </GridCustom>\n {!komunikat.czyAktywny && <GridCustom flexEnd><Text info>Komunikat nieaktywny nie może być żółtym paskiem</Text></GridCustom>}\n {!komunikat.czyBezterminowy && (\n <FieldWithLabel label=\"Data ważnoÅ›ci\" inputRef={dataWaznosciInputRef} className={savingOn && 'disabled'}>\n <DateCalendar\n ariaDescribedby={isDataWaznosciValid ? 'dataWaznosci_error' : null}\n disabled={savingOn}\n fullwidth\n invalid={isDataWaznosciValid}\n minDate={!komunikat.dataWaznosci ? new Date() : Date.parse(komunikat.dataWaznosci)}\n parentRef={dataWaznosciInputRef}\n value={Date.parse(komunikat.dataWaznosci)}\n onChange={(date) => this.handleChangeAttribute('dataWaznosci', !date ? '' : dateToString(date))}\n />\n {isDataWaznosciValid && <Text error id=\"dataWaznosci_error\">{errors.dataWaznosci}</Text>}\n </FieldWithLabel>\n )}\n <GridCustom flexEnd className=\" separate-container\">\n <ButtonStyled disabled={savingOn} save onClick={this.handleSave}>{saveBtnText}</ButtonStyled>\n </GridCustom>\n {fetchSaveError.length > 0 && <Text error role=\"alert\">{fetchSaveError}</Text>}\n </Container>\n </>\n )\n }\n}\n\nFormKomunikat.contextType = UserContext;\n\nexport { FormKomunikat };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { getSerializedObject } from '../../serializers';\nimport { validateWysiwygEditor } from '../../validators';\nimport { ButtonStyled, Container, GridCellCustom, GridCustom, Text, TextFieldCustom } from '../common';\nimport { BaseComponent } from './common';\nimport { DraftToComponents } from './zarzadzanieTrescia';\nimport { redirectToLoginView } from '../../helpers';\nimport { URLS } from '../../urls/frontend';\n\n\nclass LandingPage extends BaseComponent {\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n\n // if it is preview for zarzadzanie trescia, get data from props\n const content = this.props.content;\n let trescPreviewId = null;\n if (this.props.content) {\n trescPreviewId = content.id;\n }\n\n let state = {initializingOn: false,};\n const tresciOgolne = getSerializedObject(\n data, {nonRecursiveKeys: ['tresc', ]}).tresciOgolne;\n for (let i of [1, 2, 3]) {\n let to = tresciOgolne.filter(to => to.placement === `homepage_box${i}`)[0];\n if (to) {\n if (trescPreviewId !== null && to.id === trescPreviewId) {\n to = content;\n }\n } else {\n to = {};\n }\n state[`homepageBox${i}`] = to;\n }\n this.setState(state);\n }\n\n handleFetchError(data) {\n // do nothing, don't render error\n this.xhrFetch = null; // clean xhr object\n this.setState({initializingOn: false});\n }\n\n handleFetchIncorrectStatus(message) {\n this.handleFetchError({});\n }\n\n handleSearch = () => {\n this.props.history.push(this.getSearchUrl(this.state.query));\n }\n\n handleNewsletter = () => {\n if(this.props.user?.id !== null) {\n this.props.history.push(URLS.newsletter.path)\n return;\n }\n\n sessionStorage.setItem(\n \"currentPathname\",\n URLS.newsletter.path\n );\n\n redirectToLoginView(false);\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n homepageBox1: {},\n homepageBox2: {},\n homepageBox3: {},\n query: '',\n }\n }\n\n getFetchUrl() {\n return '/api/general-content'\n }\n\n getSearchUrl(query) {\n if (!query.length) {\n return '/ogloszenia/szukaj'\n }\n return encodeURI(`/ogloszenia/szukaj?q=${query}`)\n }\n\n // rendering\n\n renderContent() {\n document.title = \"Baza KonkurencyjnoÅ›ci\";\n const {\n homepageBox1,\n homepageBox2,\n homepageBox3\n } = this.state;\n\n const homepageBox1IsEmpty = Object.keys(homepageBox1).length === 0 || !validateWysiwygEditor(Object.keys(homepageBox1.tresc).length > 0 ? homepageBox1.tresc : '');\n const homepageBox2IsEmpty = Object.keys(homepageBox2).length === 0 || !validateWysiwygEditor(Object.keys(homepageBox2.tresc).length > 0 ? homepageBox2.tresc : '');\n const homepageBox3IsEmpty = Object.keys(homepageBox3).length === 0 || !validateWysiwygEditor(Object.keys(homepageBox3.tresc).length > 0 ? homepageBox3.tresc : '');\n if (homepageBox1IsEmpty && homepageBox2IsEmpty && homepageBox3IsEmpty) {\n return this.renderSearch()\n }\n\n return (\n <>\n {this.renderSearch()}\n {!homepageBox1IsEmpty && this.renderTrescOgolna(homepageBox1)}\n <GridCustom flexM fullwidth className=\" landing-page-contacts\">\n <GridCellCustom>\n {!homepageBox2IsEmpty && this.renderTrescOgolna(homepageBox2)}\n </GridCellCustom>\n <GridCellCustom fill>\n {!homepageBox3IsEmpty && this.renderTrescOgolna(homepageBox3)}\n </GridCellCustom>\n </GridCustom>\n </>\n )\n }\n\n renderSearch() {\n return (\n <Container className=\"search\">\n <GridCustom flexL fullwidth centerVertical>\n <form\n onSubmit={this.handleSearch}\n className=\"search__form\"\n role=\"search\"\n >\n <label className=\"sr-only\" htmlFor=\"search_input_id\">\n Wyszukaj ogÅ‚oszenie\n </label>\n <section className=\"search__input-container\">\n <div className=\"search__examples\">\n <Text>Na przykÅ‚ad:</Text>\n <Link\n to={this.getSearchUrl(\"roboty budowlane\")}\n className=\"link-text link-text--primary\"\n >\n <span className=\"sr-only\">Sugerowana fraza: </span>roboty\n budowlane,\n </Link>\n <Link\n to={this.getSearchUrl(\"dostawa komputerów\")}\n className=\"link-text link-text--primary\"\n >\n <span className=\"sr-only\">Sugerowana fraza: </span>dostawa\n komputerów,\n </Link>\n <Link\n to={this.getSearchUrl(\"szkolenie pracowników\")}\n className=\"link-text link-text--primary\"\n >\n <span className=\"sr-only\">Sugerowana fraza: </span>\n szkolenie pracowników.\n </Link>\n </div>\n <TextFieldCustom\n className=\"search__input\"\n id=\"search_input_id\"\n maxLength={250}\n onChange={(ev) => this.setState({ query: ev.target.value })}\n onClear={(ev) => this.setState({ query: \"\" })}\n placeholder=\"Wpisz, czego szukasz\"\n value={this.state.query}\n />\n </section>\n <ButtonStyled\n onClick={this.handleSearch}\n primary\n icon=\"search\"\n className=\"search__btn\"\n >\n Wyszukaj ogÅ‚oszenie\n </ButtonStyled>\n <ButtonStyled\n onClick={(ev) => {\n ev.preventDefault();\n this.handleNewsletter();\n }}\n lite\n icon=\"mail\"\n className=\"search__btn\"\n >\n Zapisz siÄ™ na newsletter ogÅ‚oszeÅ„<span className=\"sr-only\"> Zaloguj siÄ™, aby zapisać siÄ™ na newsletter</span>\n </ButtonStyled>\n </form>\n <section className=\"search__secondary\">\n {this.renderAddOgloszenieLink()}\n </section>\n </GridCustom>\n </Container>\n );\n }\n\n renderAddOgloszenieLink() {\n const user = this.props.user;\n if (!user || user.identifier === null) {\n return (\n <>\n <ButtonStyled\n className=\"search__btn\"\n icon=\"library_add\"\n lite\n noMargin\n onClick={this.props.onLoginClick}\n >\n Dodaj ogÅ‚oszenie<span className=\"sr-only\"> Zaloguj siÄ™, aby dodać ogÅ‚oszenie</span>\n </ButtonStyled>\n <Text className=\"search__info\">Wymaga logowania</Text>\n </>\n )\n }\n return (\n <ButtonStyled\n tag={Link}\n to=\"/ogloszenia/nowe\"\n id=\"dodaj_ogloszenie_button_id\"\n lite\n noMargin\n icon=\"library_add\"\n className=\"search__btn\">\n Dodaj ogÅ‚oszenie\n </ButtonStyled>\n )\n }\n\n renderTrescOgolna(element) {\n return (\n <Container title={element.naglowek}>\n <DraftToComponents content={element.tresc} />\n </Container>\n )\n }\n}\n\n\nexport { LandingPage };\n","import React, { createContext } from 'react';\n\nimport { getLastTemporaryIdFromList, listOrEmpty } from '../helpers';\nimport {\n getSerializedList,\n serializeOrderItemCategories\n} from '../serializers';\nimport {\n advertisementValidators,\n publishedAdvertisementAdminValidators,\n publishedAdvertisementOwnerValidators,\n validateHarmonogramAttributes,\n validateKryteriumOcenyAttributes,\n validateAdvertisementBaseAttributes,\n validatePrzedmiotZamowieniaBaseAttributes,\n validateWarunekUdzialuAttributes,\n validateZalacznikAttributes,\n validateZamowienieAttributes\n} from '../validators';\n\n\nconst CLEANED_STEP_ERRORS = {\n 'przedmiot': null,\n 'terminy': null,\n 'warunki': null,\n 'czesciKryteria': null,\n 'pozostale': null,\n 'zalaczniki': null,\n};\n\nconst CLEANED_FORM_ERRORS = {\n ogloszenie: {},\n zamowienia: {},\n kryteriaOceny: {},\n przedmiotyZamowienia: {},\n harmonogramy: {},\n warunkiUdzialu: {},\n zalaczniki: {},\n};\n\n\nconst AdvertisementContext = createContext({\n // base variables\n ogloszenie: null,\n validationOn: false,\n savingOn: false,\n // errors\n stepErrors: Object.assign({}, CLEANED_STEP_ERRORS),\n formErrors: Object.assign({}, CLEANED_FORM_ERRORS),\n // const from server\n roboczeStatus: null,\n statusyOgloszenia: {},\n zagranicaId: null,\n typMiejscaRealizacji: {},\n przedmiotZamowieniaKategoria: [], // the whole list\n przedmiotZamowieniaKategoriaDict: {}, // dict only with types\n przedmiotZamowieniaPodkategoriaDict: {}, // dict only with subcategories\n typWarunku: {},\n projekty: [],\n nabory: [],\n osobyDoKontaktu: [],\n teryt: [],\n // functions\n setConstsFromServer: () => {},\n setConstsFromAdvertisementData: () => {},\n setOgloszenie: () => {},\n saveOgloszenie: () => {},\n updateOgloszenieBeforePublishing: () => {},\n savePrzedmiotZamowienia: () => {},\n removePrzedmiotZamowienia: () => {},\n setAttributeValue: () => {},\n savePrzedmiotZamowieniaListAttributeValue: () => {},\n removePrzedmiotZamowieniaListAttributeValue: () => {},\n saveHarmonogram: () => {},\n removeHarmonogram: () => {},\n saveWarunekUdzialu: () => {},\n removeWarunekUdzialu: () => {},\n addZamowienie: () => {},\n removeZamowienie: () => {},\n movePrzedmiotZamowienia: () => {},\n setZamowienieAttributeValue: () => {},\n saveKryteriumOceny: () => {},\n removeKryteriumOceny: () => {},\n saveZamowienieListAttributeValue: () => {},\n removeZamowienieListAttributeValue: () => {},\n changeProjectsSelected: () => {},\n addZalacznik: () => {},\n removeZalacznik: () => {},\n setZalacznikAttributes: () => {},\n changeFormLockedState: () => {},\n validate:\n (projectsSelected, isAlreadyPublished, advertisementManagerType) => {},\n clearStepError: () => {},\n clearPrzedmiotZamowieniaErrors: () => {},\n clearAttributeError: () => {},\n clearFormErrors: () => {},\n clearState: () => {},\n});\n\n\nexport class AdvertisementProvider extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n // base variables\n ogloszenie: null,\n validationOn: false,\n savingOn: false,\n // errors\n stepErrors: Object.assign({}, CLEANED_STEP_ERRORS),\n formErrors: Object.assign({}, CLEANED_FORM_ERRORS),\n // const from server\n roboczeStatus: null,\n statusyOgloszenia: {},\n adresId: null,\n zagranicaId: null,\n typMiejscaRealizacji: {},\n przedmiotZamowieniaKategoria: [], // the whole list\n przedmiotZamowieniaKategoriaDict: {}, // dict only with types\n przedmiotZamowieniaPodkategoriaDict: {}, // dict only with subcategories\n typWarunku: {},\n projekty: [],\n nabory: [],\n osobyDoKontaktu: [],\n teryt: [],\n // functions\n setConstsFromServer: this.setConstsFromServer,\n setConstsFromAdvertisementData: this.setConstsFromAdvertisementData,\n setOgloszenie: this.setOgloszenie,\n saveOgloszenie: this.saveOgloszenie,\n updateOgloszenieBeforePublishing: this.updateOgloszenieBeforePublishing,\n savePrzedmiotZamowienia: this.savePrzedmiotZamowienia,\n removePrzedmiotZamowienia: this.removePrzedmiotZamowienia,\n movePrzedmiotZamowienia: this.movePrzedmiotZamowienia,\n setAttributeValue: this.setAttributeValue,\n savePrzedmiotZamowieniaListAttributeValue: this.savePrzedmiotZamowieniaListAttributeValue,\n removePrzedmiotZamowieniaListAttributeValue: this.removePrzedmiotZamowieniaListAttributeValue,\n saveHarmonogram: this.saveHarmonogram,\n removeHarmonogram: this.removeHarmonogram,\n saveWarunekUdzialu: this.saveWarunekUdzialu,\n removeWarunekUdzialu: this.removeWarunekUdzialu,\n addZamowienie: this.addZamowienie,\n removeZamowienie: this.removeZamowienie,\n setZamowienieAttributeValue: this.setZamowienieAttributeValue,\n saveKryteriumOceny: this.saveKryteriumOceny,\n removeKryteriumOceny: this.removeKryteriumOceny,\n saveZamowienieListAttributeValue: this.saveZamowienieListAttributeValue,\n removeZamowienieListAttributeValue: this.removeZamowienieListAttributeValue,\n changeProjectsSelected: this.changeProjectsSelected,\n addZalacznik: this.addZalacznik,\n removeZalacznik: this.removeZalacznik,\n setZalacznikAttributes: this.setZalacznikAttributes,\n changeFormLockedState: this.changeFormLockedState,\n validate: this.validate,\n // clean errors\n clearStepError: this.clearStepError,\n clearPrzedmiotZamowieniaErrors: this.clearPrzedmiotZamowieniaErrors,\n clearAttributeError: this.clearAttributeError,\n clearFormErrors: this.clearFormErrors,\n clearState: this.clearState,\n };\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (this.state.ogloszenie !== null && window.formOgloszenie) {\n window.formOgloszenie.computeProgress();\n }\n }\n\n setConstsFromServer = (data, callback) => {\n const [\n przedmiotZamowieniaKategoriaDict,\n przedmiotZamowieniaPodkategoriaDict\n ] = serializeOrderItemCategories(data.order_item_categories);\n this.setState(\n {\n roboczeStatus: data.announcement_status_draft,\n statusyOgloszenia: data.announcement_statuses,\n adresId: data.address_id,\n zagranicaId: data.abroad_id,\n typMiejscaRealizacji: data.order_fulfillment_place_types,\n przedmiotZamowieniaKategoria: getSerializedList(data.order_item_categories),\n przedmiotZamowieniaKategoriaDict: przedmiotZamowieniaKategoriaDict,\n przedmiotZamowieniaPodkategoriaDict: przedmiotZamowieniaPodkategoriaDict,\n typWarunku: data.participation_condition_types,\n projekty: getSerializedList(data.projects),\n nabory: getSerializedList(data.enrollment_numbers),\n osobyDoKontaktu: getSerializedList(data.contact_persons),\n teryt: data.teryt_data,\n },\n callback\n );\n }\n\n setConstsFromAdvertisementData = (data, callback) => {\n this.setState(\n {\n projekty: getSerializedList(data.projects || []),\n nabory: getSerializedList(data.enrollment_numbers || []),\n osobyDoKontaktu: getSerializedList(data.contact_persons || []),\n },\n callback\n );\n }\n\n setOgloszenie = (data, callback=null) => {\n let ogloszenie;\n if (data === null) {\n ogloszenie = {\n ogloszenie: {\n id: null,\n status: {},\n numer: null,\n dataOpublikowania : '',\n },\n id: null,\n status: {id: this.state.roboczeStatus},\n projekty: [],\n tytul: '',\n zamowieniaUzupelniajace: '',\n nabor: null,\n warunkiZmianyUmowy: '',\n czyDopuszczalnaOfertaCzesciowa: false,\n dataOpublikowania: '',\n terminOfert: '',\n planowanyTerminPodpisaniaUmowy: '',\n zamowienia: [],\n osobyDoKontaktu: [],\n zalaczniki: [],\n }\n } else {\n ogloszenie = data;\n }\n this.setState(\n {ogloszenie},\n () => {if (callback) { callback() }}\n );\n }\n\n saveOgloszenie = (data, callback) => {\n if (data.ogloszenie) {\n this.setState(\n prevState => ({\n ogloszenie: Object.assign(\n {}, prevState.ogloszenie,\n {\n id: data.id,\n ogloszenie: Object.assign(\n {}, prevState.ogloszenie.ogloszenie, data.ogloszenie),\n }\n ),\n }),\n callback\n );\n }\n }\n\n updateOgloszenieBeforePublishing = (callback) => {\n this.setState(\n prevState => ({\n ogloszenie: Object.assign(\n {}, prevState.ogloszenie, {\n dataOpublikowania: '',\n terminOfertData: '',\n terminOfertWithTime: false,\n terminOfertGodzina: '',\n }\n )\n }),\n callback\n );\n }\n\n savePrzedmiotZamowienia = (data, isNew, callback) => {\n this.setState(\n (prevState) => {\n const ogloszenie = prevState.ogloszenie;\n let zamowienia = [...ogloszenie.zamowienia];\n\n if (isNew) {\n if (!zamowienia.length) {\n zamowienia.push({\n id: null,\n temporaryId: 1,\n zamowienieNode: null,\n przedmiotyZamowienia: [],\n czyWariantowe: false,\n kryteriaOceny: [],\n szacunkowaWartosc: '',\n tytul: '',\n });\n }\n\n data['harmonogramy'] = [];\n data['warunkiUdzialu'] = [];\n zamowienia[0].przedmiotyZamowienia.push(data);\n } else {\n zamowienia = zamowienia.map(z => {\n let przedmiotyZamowienia = [];\n for (let pz of z.przedmiotyZamowienia) {\n if (pz.temporaryId === data.temporaryId) {\n przedmiotyZamowienia.push(Object.assign({}, pz, data));\n } else {\n przedmiotyZamowienia.push(pz);\n }\n }\n z.przedmiotyZamowienia = przedmiotyZamowienia;\n return z\n })\n }\n return {\n ogloszenie: Object.assign(\n {}, prevState.ogloszenie, {zamowienia}),\n }\n },\n () => callback()\n );\n }\n\n removePrzedmiotZamowienia = (temporaryId) => {\n this.setState(\n (prevState) => {\n return {\n ogloszenie: Object.assign(\n {}, prevState.ogloszenie,\n {zamowienia: prevState.ogloszenie.zamowienia.map(z => {\n z.przedmiotyZamowienia = z.przedmiotyZamowienia.filter(\n pz => pz.temporaryId !== temporaryId);\n return z\n })}\n ),\n }\n }\n );\n }\n\n movePrzedmiotZamowienia = (newZamowienieTemporaryId, temporaryId, callback) => {\n this.setState(\n (prevState) => {\n const zamowienia = prevState.ogloszenie.zamowienia;\n // get przedmiotZamowienia\n let pz_ = null;\n for (let z of zamowienia) {\n for (let pz of z.przedmiotyZamowienia) {\n if (pz.temporaryId === temporaryId) {\n pz_ = pz;\n break\n }\n }\n }\n\n if (pz_ !== null) {\n // remove from old zamowienie, add to new zamowienie\n let zamowienia_ = [];\n for (let z of zamowienia) {\n // remove\n z.przedmiotyZamowienia = z.przedmiotyZamowienia.filter(\n pz => pz.temporaryId !== temporaryId);\n // add\n if (z.temporaryId === newZamowienieTemporaryId) {\n z.przedmiotyZamowienia = [...z.przedmiotyZamowienia, pz_];\n }\n zamowienia_.push(z);\n }\n return {\n ogloszenie: Object.assign(\n {}, prevState.ogloszenie, {zamowienia: zamowienia_}),\n }\n } else { return {} }\n\n },\n callback\n );\n }\n\n setAttributeValue = (attributeName, value) => {\n this.setState(prevState => ({\n ogloszenie: Object.assign({}, prevState.ogloszenie, {[attributeName]: value})\n }));\n }\n\n savePrzedmiotZamowieniaListAttributeValue = (data, isNew, attrName, callback) => {\n const przedmiotZamowieniaTemporaryId = data['przedmiotZamowieniaTemporaryId'];\n delete data['przedmiotZamowieniaTemporaryId'];\n this.setState(\n prevState => {\n return {\n ogloszenie: Object.assign(\n {}, prevState.ogloszenie,\n {zamowienia: prevState.ogloszenie.zamowienia.map(z => {\n let przedmiotyZamowienia = [];\n for (let pz of z.przedmiotyZamowienia) {\n if (pz.temporaryId === przedmiotZamowieniaTemporaryId) {\n if (isNew) {\n pz[attrName] = [...pz[attrName], data];\n } else {\n let objects = [];\n for (let o of pz[attrName]) {\n if (o.temporaryId === data.temporaryId) {\n o = data;\n }\n objects.push(o);\n }\n pz[attrName] = objects;\n }\n }\n przedmiotyZamowienia.push(pz);\n }\n z.przedmiotyZamowienia = przedmiotyZamowienia;\n return z\n })}\n ),\n }\n },\n callback\n )\n }\n\n removePrzedmiotZamowieniaListAttributeValue = (przedmiotZamowieniaTemporaryId, temporaryId, attrName) => {\n this.setState(\n prevState => {\n return {\n ogloszenie: Object.assign(\n {}, prevState.ogloszenie,\n {zamowienia: prevState.ogloszenie.zamowienia.map(z => {\n let przedmiotyZamowienia = [];\n for (let pz of z.przedmiotyZamowienia) {\n if (pz.temporaryId === przedmiotZamowieniaTemporaryId) {\n pz[attrName] = pz[attrName].filter(o => o.temporaryId !== temporaryId);\n }\n przedmiotyZamowienia.push(pz);\n }\n z.przedmiotyZamowienia = przedmiotyZamowienia;\n return z\n })}\n ),\n }\n }\n );\n }\n\n saveHarmonogram = (data, isNew, callback) => {\n return this.savePrzedmiotZamowieniaListAttributeValue(\n data, isNew, 'harmonogramy', callback);\n }\n\n removeHarmonogram = (przedmiotZamowieniaTemporaryId, temporaryId) => {\n this.removePrzedmiotZamowieniaListAttributeValue(\n przedmiotZamowieniaTemporaryId, temporaryId, 'harmonogramy');\n }\n\n saveWarunekUdzialu = (data, isNew, callback) => {\n return this.savePrzedmiotZamowieniaListAttributeValue(\n data, isNew, 'warunkiUdzialu', callback);\n }\n\n removeWarunekUdzialu = (przedmiotZamowieniaTemporaryId, temporaryId) => {\n this.removePrzedmiotZamowieniaListAttributeValue(\n przedmiotZamowieniaTemporaryId, temporaryId, 'warunkiUdzialu');\n }\n\n addZamowienie = () => {\n // don't add zamowienie if oferta czesciowa is unavailable\n if (!this.state.ogloszenie.czyDopuszczalnaOfertaCzesciowa) { return }\n this.setState(prevState => ({\n ogloszenie: Object.assign(\n {}, prevState.ogloszenie,\n {zamowienia: [...prevState.ogloszenie.zamowienia, {\n id: null,\n temporaryId: Math.max(...listOrEmpty(prevState.ogloszenie.zamowienia).map(z => z.temporaryId)) + 1,\n tytul: '',\n czyWariantowe: false,\n przedmiotyZamowienia: [],\n szacunkowaWartosc: '',\n kryteriaOceny: [],\n }]}\n ),\n }));\n }\n\n removeZamowienie = (temporaryId) => {\n this.setState(prevState => ({\n ogloszenie: Object.assign(\n {}, prevState.ogloszenie,\n {zamowienia: prevState.ogloszenie.zamowienia.filter(z => z.temporaryId !== temporaryId)}\n ),\n }));\n }\n\n setZamowienieAttributeValue = (temporaryId, attrName, value) => {\n this.setState(prevState => ({\n ogloszenie: Object.assign(\n {}, prevState.ogloszenie,\n {zamowienia: prevState.ogloszenie.zamowienia.map(z => {\n if (z.temporaryId === temporaryId) {\n z[attrName] = value;\n }\n return z\n })}\n ),\n }));\n }\n\n saveZamowienieListAttributeValue = (data, isNew, attrName, callback=null) => {\n const zamowienieTemporaryId = data['zamowienieTemporaryId'];\n delete data['zamowienieTemporaryId'];\n this.setState(\n prevState => {\n return {\n ogloszenie: Object.assign(\n {}, prevState.ogloszenie,\n {zamowienia: prevState.ogloszenie.zamowienia.map(z => {\n if (z.temporaryId === zamowienieTemporaryId) {\n if (isNew) {\n z[attrName] = [...z[attrName], data];\n } else {\n let objects = [];\n for (let o of z[attrName]) {\n if (o.temporaryId === data.temporaryId) {\n o = data;\n }\n objects.push(o);\n }\n z[attrName] = objects;\n }\n }\n return z\n })}\n ),\n }\n },\n () => {if (callback) {callback()}}\n )\n }\n\n removeZamowienieListAttributeValue = (zamowienieTemporaryId, temporaryId, attrName) => {\n this.setState(\n prevState => ({\n ogloszenie: Object.assign(\n {}, prevState.ogloszenie,\n {zamowienia: prevState.ogloszenie.zamowienia.map(z => {\n if (z.temporaryId === zamowienieTemporaryId) {\n z[attrName] = z[attrName].filter(o => o.temporaryId !== temporaryId);\n }\n return z\n })}\n ),\n })\n );\n }\n\n saveKryteriumOceny = (data, isNew, callback) => {\n this.saveZamowienieListAttributeValue(\n data, isNew, 'kryteriaOceny', callback);\n }\n\n removeKryteriumOceny = (zamowienieTemporaryId, temporaryId) => {\n this.removeZamowienieListAttributeValue(\n zamowienieTemporaryId, temporaryId, 'kryteriaOceny');\n }\n\n changeProjectsSelected = (checked) => {\n this.setState(\n prevState => ({\n ogloszenie: {\n ...prevState.ogloszenie,\n ...(checked ? {nabor: null} : {projekty: []})\n }\n })\n );\n }\n\n addZalacznik = (data) => {\n data = data || {};\n this.setState(\n prevState => {\n const zalaczniki = prevState.ogloszenie.zalaczniki;\n return {\n ogloszenie: Object.assign(\n {}, prevState.ogloszenie,\n {zalaczniki: [...zalaczniki, {\n id: null,\n temporaryId: getLastTemporaryIdFromList(zalaczniki) + 1,\n nazwa: '',\n plik: {\n id: null,\n uri: '',\n nazwa: '',\n dataUtworzenia: '',\n ktoUtworzyl: {imie: '', nazwisko: ''},\n },\n plikDoWgrania: data.plikDoWgrania || null,\n origin: {\n id: prevState.ogloszenie.status.label === 'DRAFT' ? prevState.ogloszenie.id : null,\n }\n }]}\n ),\n }\n }\n );\n }\n\n removeZalacznik = (temporaryId) => {\n this.setState(\n prevState => {\n const o = prevState.ogloszenie;\n return {ogloszenie: Object.assign(\n {}, o, {zalaczniki: o.zalaczniki.filter(z => z.temporaryId !== temporaryId)}\n )}\n }\n );\n }\n\n setZalacznikAttributes = (temporaryId, data) => {\n this.setState(\n prevState => {\n let zalaczniki = [];\n for (let z of prevState.ogloszenie.zalaczniki) {\n if (z.temporaryId === temporaryId) {\n z = Object.assign(z, data);\n }\n zalaczniki.push(z);\n }\n return {ogloszenie: Object.assign({}, prevState.ogloszenie, {zalaczniki})}\n }\n );\n }\n\n changeFormLockedState = (attrName, value, callback=null) => {\n this.setState(\n {[attrName]: value},\n () => {\n if (callback) {callback()}\n }\n );\n }\n\n validate = (projectsSelected, isAlreadyPublished, advertisementManagerType) => {\n const { ogloszenie } = this.state;\n let [errors, stepErrors] = validateAdvertisementBaseAttributes(\n ogloszenie,\n projectsSelected,\n isAlreadyPublished\n ? (advertisementManagerType.isAuthor\n ? publishedAdvertisementOwnerValidators\n : publishedAdvertisementAdminValidators\n )\n : advertisementValidators\n );\n\n let zamowieniaErrors = {};\n let zamowieniaStepErrors = {};\n let kryteriaOcenyErrors = {};\n let kryteriaOcenyStepErrors = {};\n if (!isAlreadyPublished) {\n // do not validate zamowienia and kryteriaOceny\n [zamowieniaErrors, zamowieniaStepErrors] = validateZamowienieAttributes(\n ogloszenie, isAlreadyPublished);\n\n let kryteriaOceny = [];\n for (let z of ogloszenie.zamowienia) {\n kryteriaOceny = [...kryteriaOceny, ...z.kryteriaOceny];\n }\n [kryteriaOcenyErrors, kryteriaOcenyStepErrors] = validateKryteriumOcenyAttributes(kryteriaOceny);\n }\n\n let przedmiotyZamowienia = [];\n for (let z of ogloszenie.zamowienia) {\n przedmiotyZamowienia = [...przedmiotyZamowienia, ...z.przedmiotyZamowienia];\n }\n const [przedmiotyZamowieniaErrors, przedmiotyZamowieniaStepErrors] = validatePrzedmiotZamowieniaBaseAttributes(\n przedmiotyZamowienia, isAlreadyPublished);\n\n let harmonogramy = [];\n for (let pz of przedmiotyZamowienia) {\n harmonogramy = [...harmonogramy, ...pz.harmonogramy];\n }\n const [harmonogramyErrors, harmonogramyStepErrors] = validateHarmonogramAttributes(harmonogramy);\n\n let warunkiUdzialuErrors = {};\n let warunkiUdzialuStepErrors = {};\n if (!isAlreadyPublished) {\n // do not validate warunkiUdzialu\n let warunkiUdzialu = [];\n for (let pz of przedmiotyZamowienia) {\n warunkiUdzialu = [...warunkiUdzialu, ...pz.warunkiUdzialu];\n }\n [warunkiUdzialuErrors, warunkiUdzialuStepErrors] = validateWarunekUdzialuAttributes(warunkiUdzialu);\n }\n\n let zalacznikiErrors = {};\n let zalacznikiStepErrors = {};\n [zalacznikiErrors, zalacznikiStepErrors] = validateZalacznikAttributes(ogloszenie.zalaczniki);\n\n const finalStepErrors = Object.assign(\n {\n 'przedmiot': false,\n 'terminy': false,\n 'warunki': false,\n 'czesciKryteria': false,\n 'pozostale': false,\n 'zalaczniki': false,\n }, stepErrors, zamowieniaStepErrors, kryteriaOcenyStepErrors,\n przedmiotyZamowieniaStepErrors, harmonogramyStepErrors,\n warunkiUdzialuStepErrors, zalacznikiStepErrors\n );\n this.setState({\n stepErrors: finalStepErrors,\n formErrors: {\n ogloszenie: errors,\n zamowienia: zamowieniaErrors,\n kryteriaOceny: kryteriaOcenyErrors,\n przedmiotyZamowienia: przedmiotyZamowieniaErrors,\n harmonogramy: harmonogramyErrors,\n warunkiUdzialu: warunkiUdzialuErrors,\n zalaczniki: zalacznikiErrors,\n },\n });\n\n // return if is valid\n return Object.values(finalStepErrors).filter(e => e === true).length === 0\n }\n\n clearStepError = (stepName) => {\n this.setState((prevState) => {\n let errors = Object.assign({}, prevState.stepErrors);\n errors[stepName] = null;\n return {stepErrors: errors}\n })\n }\n\n clearPrzedmiotZamowieniaErrors = (temporaryId, callback) => {\n if (this.state.formErrors.przedmiotyZamowienia[temporaryId]) {\n this.setState(\n prevState => {\n let errors = Object.assign({}, prevState.formErrors.przedmiotyZamowienia);\n delete errors[temporaryId];\n return {formErrors: Object.assign({}, prevState.formErrors, {przedmiotZamowienia: errors})}\n },\n () => callback()\n )\n } else {\n callback();\n }\n }\n\n clearAttributeError = (errorName, temporaryId, attrName) => {\n if (this.state.formErrors[errorName][temporaryId] && this.state.formErrors[errorName][temporaryId][attrName]) {\n this.setState((prevState) => {\n let errors = Object.assign({}, prevState.formErrors[errorName]);\n delete errors[temporaryId][attrName];\n return {formErrors: Object.assign({}, prevState.formErrors, {[errorName]: errors})}\n });\n }\n }\n\n clearFormErrors = () => {\n this.setState({\n stepErrors: CLEANED_STEP_ERRORS,\n formErrors: CLEANED_FORM_ERRORS\n });\n }\n\n clearState = (callback=null) => {\n this.setState(\n {\n // base variables\n ogloszenie: null,\n validationOn: false,\n savingOn: false,\n // errors\n stepErrors: Object.assign({}, CLEANED_STEP_ERRORS),\n formErrors: Object.assign({}, CLEANED_FORM_ERRORS),\n // const from server\n roboczeStatus: null,\n statusyOgloszenia: {},\n adresId: null,\n zagranicaId: null,\n typMiejscaRealizacji: {},\n przedmiotZamowieniaKategoria: [], // the whole list\n przedmiotZamowieniaKategoriaDict: {}, // dict only with types\n przedmiotZamowieniaPodkategoriaDict: {}, // dict only with subcategories\n typWarunku: {},\n projekty: [],\n nabory: [],\n osobyDoKontaktu: [],\n teryt: [],\n },\n () => {\n if (callback) { callback() }\n }\n );\n }\n\n render() {\n return (\n <AdvertisementContext.Provider value={this.state}>\n {this.props.children}\n </AdvertisementContext.Provider>\n );\n }\n}\n\n\nexport const AdvertisementConsumer = AdvertisementContext.Consumer;\nexport { AdvertisementContext };\n","import React, { Component } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\nimport { Radio } from '@rmwc/radio';\nimport '@material/checkbox/dist/mdc.checkbox.css';\nimport '@material/radio/dist/mdc.radio.css';\n\nimport { fetchApi } from '../../../fetch';\nimport { dateStringToYearMonth, datetimeToString, dateToString,\n fillWithLeadingZero } from '../../../helpers';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { customSelectStyles } from '../../vars/vars';\nimport {\n ButtonStyled,\n DateCalendar,\n DialogCustom,\n FieldWithLabel,\n GridCustom,\n Message,\n Select,\n Text,\n} from '../../common';\n\n\nconst EMPTY_VALUE = {\n value: null,\n label: '--- Wybierz ---',\n};\n\n\nclass FormPublikowanie extends Component {\n\n constructor(props) {\n super(props);\n\n const o = props.formOgloszenie.context.ogloszenie;\n this.planowanyTerminPodpisaniaUmowy = o.planowanyTerminPodpisaniaUmowy;\n\n this.state ={\n initializingOn: true,\n savingOn: false,\n publishImmediately: props.formOgloszenie.isAlreadyPublished || o.dataOpublikowania === '',\n dataOpublikowania: o.dataOpublikowania,\n terminOfertData: '',\n terminOfertWithTime: false,\n terminOfertGodzina: EMPTY_VALUE,\n error: '',\n formErrors: {},\n dialogPublishClassName: null,\n };\n\n this.xhrFetch = null;\n }\n\n // basic functions\n\n componentDidMount() {\n const formOgloszenie = this.props.formOgloszenie;\n if (formOgloszenie.handleValidate()) {\n formOgloszenie.handleSave(\n null,\n this.handleFetchSaveSuccess,\n this.handleFetchSaveError,\n this.handleFetchSaveIncorrectStatus,\n );\n } else {\n this.setState({\n initializingOn: false,\n error: 'OgÅ‚oszenie zawiera bÅ‚Ä™dy. Po ich poprawieniu spróbuj opublikować ogÅ‚oszenie jeszcze raz.',\n });\n }\n }\n\n componentWillUnmount() {\n // abort api request if exist\n if (this.xhrFetch !== null) {\n this.xhrFetch.abort();\n }\n }\n\n // handlers\n\n handleFetchSaveSuccess = (data) => {\n const formOgloszenie = this.props.formOgloszenie;\n formOgloszenie.handleFetchSaveSuccess(\n data,\n () => {\n formOgloszenie.context.updateOgloszenieBeforePublishing(\n () => this.setState({\n initializingOn: false,\n dataOpublikowania: '',\n })\n );\n }\n );\n }\n\n setError = (message) => {\n this.setState({initializingOn: false, error: message});\n }\n\n handleFetchSaveError = (data) => {\n this.setError(\n 'Podczas próby opublikowania ogÅ‚oszenia wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d.');\n }\n\n handleFetchSaveIncorrectStatus = (status) => {\n this.setError(\n `Podczas próby opublikowania ogÅ‚oszenia wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`);\n }\n\n handleCloseDialog = () => {\n this.props.formOgloszenie.setState({publishingOn: false})\n }\n\n handleChangePublikujOdRazu = (event) => {\n const publikujOdRazu = event.currentTarget.value === 'true';\n let data = {publishImmediately: publikujOdRazu};\n if (publikujOdRazu) {\n data['dataOpublikowania'] = '';\n }\n this.setState(data);\n }\n\n handleChangeTerminOfertData = (date) => {\n let data = {terminOfertData: !date ? '' : dateToString(date)};\n if (!date) {\n data['terminOfertGodzina'] = '';\n data['terminOfertWithTime'] = false;\n }\n this.setState(\n prevState => {\n data['formErrors'] = Object.assign({}, prevState.formErrors, {terminOfertGodzina: '', terminOfertData: ''});\n return data\n }\n );\n }\n\n handleChangeTerminOfertWithTime = (ev) => {\n const isChecked = ev.target.checked;\n let data = {terminOfertWithTime: isChecked};\n if (!isChecked) {\n data['terminOfertGodzina'] = EMPTY_VALUE;\n }\n this.setState(data);\n }\n\n handleCalendarOpen = () => {\n this.setState({ dialogPublishClassName: 'dialog--publish'})\n }\n\n handleCalendarClose = () => {\n this.setState({ dialogPublishClassName: null })\n }\n\n handlePublish = () => {\n this.setState(\n {savingOn: true},\n () => {\n const [isValid, errors] = this.validate();\n if (isValid) {\n this.xhrFetch = fetchApi(\n `/api/announcements/${this.props.formOgloszenie.context.ogloszenie.ogloszenie.id}/publish`,\n 'POST',\n {},\n getSerializedObject(this.getData(), {toServer: true}),\n this.handleFetchPublishSuccess,\n this.handleFetchPublishError,\n this.handleFetchPublishIncorrectStatus,\n );\n } else {\n this.setState({savingOn: false, formErrors: errors});\n }\n }\n );\n }\n\n handleFetchPublishSuccess = (data) => {\n this.xhrFetch = null;\n this.props.formOgloszenie.setPublishingSuccessInfo(\n !this.state.dataOpublikowania\n ? 'OgÅ‚oszenie zostaÅ‚o pomyÅ›lnie opublikowane.'\n :'OgÅ‚oszenie zostaÅ‚o zapisane z przyszÅ‚Ä… datÄ… publikacji.'\n );\n }\n\n handleFetchPublishError = (data) => {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n error: `Podczas próby opublikowania ogÅ‚oszenia wystÄ…piÅ‚ bÅ‚Ä…d. ${translateErrorMessage(data.message)} Dane ogÅ‚oszenia zostaÅ‚y zachowane w kopii roboczej.`,\n savingOn: false,\n });\n }\n\n handleFetchPublishIncorrectStatus = (status) => {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n error: `Podczas próby opublikowania ogÅ‚oszenia wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}. Dane ogÅ‚oszenia zostaÅ‚y zachowane w kopii roboczej.`,\n savingOn: false,\n });\n }\n\n // helpers\n\n validate() {\n const {\n dataOpublikowania,\n publishImmediately,\n terminOfertGodzina,\n terminOfertData,\n terminOfertWithTime,\n } = this.state;\n\n let isValid = true;\n let errors = {};\n\n if (!publishImmediately && !dataOpublikowania) {\n isValid = false;\n errors['dataOpublikowania'] = 'To pole jest wymagane.';\n }\n\n const today = dateToString(new Date());\n\n if (dataOpublikowania && dataOpublikowania <= today) {\n isValid = false;\n errors['dataOpublikowania'] = 'Data publikacji musi być późniejsza niż dziÅ›.';\n }\n if (!terminOfertData) {\n isValid = false;\n errors['terminOfertData'] = 'To pole jest wymagane.';\n } else {\n if (terminOfertWithTime && terminOfertGodzina.value === null) {\n isValid = false;\n errors['terminOfertGodzina'] = 'To pole jest wymagane.';\n }\n\n if (this.planowanyTerminPodpisaniaUmowy && dateStringToYearMonth(this.planowanyTerminPodpisaniaUmowy) < dateStringToYearMonth(terminOfertData)) {\n isValid = false;\n errors['terminOfertData'] = 'Planowany termin podpisania umowy nie może być wczeÅ›niejszy niż miesiÄ…c i rok wskazane w terminie ofert. Wróć do formularza ogÅ‚oszenia i zamieÅ„ planowany termin podpisania umowy w sekcji Terminy.';\n } else if (dataOpublikowania && terminOfertData <= dataOpublikowania) {\n isValid = false;\n errors['terminOfertData'] = 'Termin skÅ‚adania ofert musi być późniejszy niż data opublikowania.';\n } else if (terminOfertData <= today) {\n isValid = false;\n errors['terminOfertData'] = 'Termin skÅ‚adania ofert musi być późniejszy niż dziÅ›.';\n }\n }\n\n return [isValid, errors]\n }\n\n getTomorrow() {\n return new Date(new Date().getTime() + 24 * 60 * 60 * 1000)\n }\n\n getData() {\n const {\n dataOpublikowania,\n terminOfertGodzina,\n terminOfertData,\n terminOfertWithTime\n } = this.state;\n\n let terminOfert_;\n if (terminOfertWithTime) {\n terminOfert_ = `${datetimeToString(new Date(new Date(terminOfertData).setHours(terminOfertGodzina.value || 0)))}:00`;\n } else {\n terminOfert_ = `${terminOfertData} 23:59:59`;\n }\n\n return {\n id: this.props.formOgloszenie.context.ogloszenie.id,\n dataOpublikowania: dataOpublikowania,\n terminOfert: terminOfert_,\n }\n }\n\n // rendering\n\n render() {\n let content = null;\n if (this.state.initializingOn) {\n content = <Text info tabIndex=\"1\">Trwa sprawdzanie danych do opublikowania ogÅ‚oszenia...</Text>;\n } else {\n content = (\n this.state.error.length > 0 ? this.renderError() : this.renderForm()\n );\n }\n return (\n <DialogCustom\n onClose={this.handleCloseDialog}\n >\n {content}\n </DialogCustom>\n )\n }\n\n renderError() {\n return (\n <>\n <Message\n error\n messageIcon=\"clear\"\n messageTitle={this.state.error} />\n <GridCustom flexEnd>\n <ButtonStyled onClick={this.handleCloseDialog} primary>OK</ButtonStyled>\n </GridCustom>\n </>\n )\n }\n\n renderForm() {\n const {\n dataOpublikowania,\n publishImmediately,\n savingOn,\n terminOfertGodzina,\n terminOfertData,\n terminOfertWithTime,\n } = this.state;\n\n const terminOfertDataError = this.state.formErrors.terminOfertData || '';\n const isTerminOfertDataInvalid = terminOfertDataError.length > 0;\n const terminOfertGodzinaError = this.state.formErrors.terminOfertGodzina || '';\n const isTerminOfertGodzinaInvalid = terminOfertGodzinaError.length > 0;\n let terminSkladaniaOfertAriDescribedby1 = null;\n let terminSkladaniaOfertAriDescribedby2 = null;\n let terminSkladaniaOfertAriDescribedby = null;\n\n terminSkladaniaOfertAriDescribedby1 = !['', null].includes(terminOfertData) && 'terminOfertData_id';\n terminSkladaniaOfertAriDescribedby2 = isTerminOfertDataInvalid && 'terminOfertData_error';\n terminSkladaniaOfertAriDescribedby = (terminSkladaniaOfertAriDescribedby1 && terminSkladaniaOfertAriDescribedby2) ? `${terminSkladaniaOfertAriDescribedby1} ${terminSkladaniaOfertAriDescribedby2}` : (terminSkladaniaOfertAriDescribedby1 || terminSkladaniaOfertAriDescribedby2)\n\n const terminOfertInputRef = React.createRef();\n return (\n <div className={this.state.dialogPublishClassName}>\n {this.renderWhenPublishPart()}\n {!publishImmediately && this.renderPublicationDateField()}\n <GridCustom flexS fullwidth className=\" date-time-picker\">\n <FieldWithLabel\n className={savingOn && 'disabled'}\n inputRef={terminOfertInputRef}\n label=\"Termin skÅ‚adania ofert\"\n tag=\"label\">\n <DateCalendar\n ariaDescribedby={terminSkladaniaOfertAriDescribedby}\n disabled={savingOn}\n fullwidth\n invalid={isTerminOfertDataInvalid}\n minDate={!dataOpublikowania ? this.getTomorrow() : Date.parse(dataOpublikowania)}\n parentRef={terminOfertInputRef}\n value={Date.parse(terminOfertData)}\n onChange={this.handleChangeTerminOfertData}\n onCalendarOpen={this.handleCalendarOpen}\n onCalendarClose={this.handleCalendarClose}\n />\n {isTerminOfertDataInvalid && <Text error id=\"terminOfertData_error\">{terminOfertDataError}</Text>}\n </FieldWithLabel>\n <section>\n <Checkbox\n disabled={savingOn || !terminOfertData}\n label=\"Wskaż konkretnÄ… godzinÄ™\"\n checked={terminOfertWithTime}\n onChange={this.handleChangeTerminOfertWithTime}\n className=\"date-time-picker__checkbox\"\n />\n <Select\n aria-label={`Godzina ${isTerminOfertGodzinaInvalid ? terminOfertGodzinaError: ''}`}\n className={isTerminOfertGodzinaInvalid ? 'select-custom select-custom--invalid' : 'select-custom'}\n isDisabled={savingOn || !terminOfertData || !terminOfertWithTime}\n options={[EMPTY_VALUE, ].concat([...Array(24).keys()].map(h => {\n return {value: h, label: `${fillWithLeadingZero(h)}:00`}\n }))}\n placeholder=\"--- Wybierz ---\"\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n value={terminOfertGodzina}\n onChange={(selectedOption) => this.setState({terminOfertGodzina: selectedOption})}\n styles={customSelectStyles}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n />\n {isTerminOfertGodzinaInvalid && <Text error>{terminOfertGodzinaError}</Text>}\n </section>\n </GridCustom>\n {!['', null].includes(terminOfertData) && <Text info id=\"terminOfertData_id\">Konieczne jest zachowanie zgodnego z Wytycznymi, minimalnego okresu miÄ™dzy publikacjÄ… ogÅ‚oszenia a terminem skÅ‚adania ofert. Uwaga! Jeżeli koniec wyznaczonego terminu przypada na sobotÄ™ lub dzieÅ„ ustawowo wolny od pracy, w Bazie należy zaznaczyć dzieÅ„ nastÄ™pujÄ…cy po dniu lub dniach wolnych od pracy.</Text>}\n <GridCustom centerVertical flexEnd>\n <ButtonStyled disabled={savingOn} onClick={this.handleCloseDialog} cancel>Wróć do edycji</ButtonStyled>\n <ButtonStyled disabled={savingOn} onClick={this.handlePublish} save>Potwierdź publikacjÄ™</ButtonStyled>\n </GridCustom>\n </div>\n )\n }\n\n renderWhenPublishPart() {\n const {publishImmediately, savingOn} = this.state;\n const isAlreadyPublished = this.props.formOgloszenie.isAlreadyPublished;\n\n return (\n <fieldset>\n <Text tag=\"legend\" className=\"label\">Kiedy chcesz opublikować ogÅ‚oszenie:</Text>\n <Radio\n disabled={isAlreadyPublished || savingOn}\n value={true}\n name=\"publishImmediatelyRadioGroup\"\n checked={publishImmediately === true}\n onChange={this.handleChangePublikujOdRazu}\n label=\"Publikuj od razu\"\n id=\"radio_publish_id\"\n />\n <Radio\n disabled={isAlreadyPublished || savingOn}\n value={false}\n name=\"publishImmediatelyRadioGroup\"\n checked={publishImmediately === false}\n onChange={this.handleChangePublikujOdRazu}\n label=\"Publikuj później\"\n />\n {isAlreadyPublished && <Text className=\"success-text\">To ogÅ‚oszenie zostaÅ‚o już wczeÅ›niej opublikowane, w zwiÄ…zku z tym nowa wersja zostanie opublikowana natychmiastowo.</Text>}\n </fieldset>\n )\n }\n\n renderPublicationDateField() {\n const error = this.state.formErrors.dataOpublikowania || '';\n const isInvalid = error.length > 0;\n const dataOpublikowaniaInputRef = React.createRef();\n return (\n <FieldWithLabel label=\"Data publikacji\" inputRef={dataOpublikowaniaInputRef} className={this.state.savingOn && 'disabled'}>\n <DateCalendar\n ariaDescribedby={isInvalid ? 'dataOpublikowania_error' : null}\n disabled={this.state.savingOn}\n fullwidth\n invalid={isInvalid}\n minDate={this.getTomorrow()}\n parentRef={dataOpublikowaniaInputRef}\n value={Date.parse(this.state.dataOpublikowania)}\n onChange={(date) => this.setState({dataOpublikowania: dateToString(date)})} />\n {isInvalid && <Text error id=\"dataOpublikowania_error\">{error}</Text>}\n </FieldWithLabel>\n )\n }\n}\n\n\nexport { FormPublikowanie };\n","import React, { useContext } from 'react';\n\nimport { UserContext } from '../../../context/user-context';\nimport { InfoTextWithIcon } from '../../common';\n\n\nconst AlreadyPublishedInfo = ({info}) => {\n const { user } = useContext(UserContext);\n\n return <InfoTextWithIcon message={info || (\n user.advertisementManagerType.isAdmin\n ? 'Edytujesz opublikowane ogÅ‚oszenie jako pracownik instytucji.'\n : 'To ogÅ‚oszenie zostaÅ‚o już opublikowane i nie ma możliwoÅ›ci ' +\n 'zmiany niektórych pól.'\n\n )} />\n}\n\nexport { AlreadyPublishedInfo };\n","import { Component } from 'react';\n\n\nclass BaseStepComponent extends Component {\n stepName = '';\n\n // basic functions\n\n componentDidMount() {\n if (!this.props.isPreview) {\n window.scrollTo(0, 0);\n }\n\n // clear step error in menu\n this.context.clearStepError(this.stepName);\n\n if (window.formOgloszenie) {\n window.formOgloszenie.computeProgress();\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (window.formOgloszenie) {\n window.formOgloszenie.computeProgress();\n }\n }\n}\n\n\nexport { BaseStepComponent }\n","import React, { Component } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\n\nimport { AdvertisementConsumer } from '../../../context/advertisementContext';\nimport { ButtonStyled, DialogCustom, GridCustom, FieldWithLabel, Text, TextFieldCustom } from '../../common';\n\n\nclass FormKryteriumOceny extends Component{\n\n constructor(props) {\n super(props);\n\n if (props.isNew) {\n this.state = Object.assign({}, props.kryteriumOceny, {\n czyKryteriumCenowe: false,\n opis: '',\n });\n } else {\n this.state = Object.assign({}, props.kryteriumOceny);\n }\n }\n\n // basic functions\n\n componentDidMount() {\n window.formOgloszenie.computeProgress();\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (window.formOgloszenie) {\n window.formOgloszenie.computeProgress();\n }\n }\n\n // handlers\n\n handleSave = () => {\n const {isNew, kryteriumOceny} = this.props;\n\n this.props.onSave({\n id: isNew ? null : kryteriumOceny.id,\n temporaryId: kryteriumOceny.temporaryId,\n zamowienieTemporaryId: this.props.zamowienieTemporaryId,\n czyKryteriumCenowe: this.state.czyKryteriumCenowe,\n opis: this.state.opis.trim(),\n }, isNew);\n }\n\n handleCloseDialog = () => {\n this.props.onCloseForm();\n }\n\n // rendering\n\n render() {\n return (\n <DialogCustom \n className=\"dialog\"\n dialogTitle=\"Dodaj kryterium oceny\"\n onClose={this.handleCloseDialog}\n >\n <>\n <Checkbox\n label=\"Czy kryterium cenowe?\"\n checked={this.state.czyKryteriumCenowe}\n onChange={(event) => this.setState({czyKryteriumCenowe: event.target.checked})}\n />\n <AdvertisementConsumer>\n {({formErrors}) => {\n const temporaryId = this.props.kryteriumOceny.temporaryId;\n const errors = formErrors.kryteriaOceny[temporaryId] || {};\n return (\n <FieldWithLabel label=\"Opis\" tag=\"label\" labelFor=\"kryteriumOceny_opis_id\">\n <TextFieldCustom\n aria-describedby={(errors.opis || '').length > 0 ? 'kryteriumOceny_opis_error' : null}\n clearFieldContext=\"opis\"\n textarea\n invalid={(errors.opis || '').length > 0}\n fullwidth\n maxLength={300}\n aria-valuemax={300}\n characterCount\n value={this.state.opis}\n onChange={(event) => this.setState({opis: event.target.value})}\n onClear={(ev) => this.setState({opis: ''})}\n id=\"kryteriumOceny_opis_id\"\n aria-label={`Opis, maksymalna liczba znaków: 300. Wpisano ${this.state.opis.length} znaków.`} />\n {(errors.opis || '').length > 0 && <Text error id=\"kryteriumOceny_opis_error\" role=\"alert\">{errors.opis}</Text>}\n </FieldWithLabel>\n )\n }}\n </AdvertisementConsumer>\n <GridCustom flexEnd>\n <ButtonStyled onClick={this.handleCloseDialog} cancel>Anuluj</ButtonStyled>\n <ButtonStyled onClick={this.handleSave} save>{this.props.isNew ? 'Dodaj' : 'Zapisz zmiany'}</ButtonStyled>\n </GridCustom>\n </>\n </DialogCustom>\n )\n }\n}\n\n\nexport { FormKryteriumOceny };\n","import React, { Component } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\nimport { Icon } from '@rmwc/icon';\nimport { Draggable, Droppable } from 'react-simple-drag-n-drop';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { listOrEmpty, roundStringTo } from '../../../helpers';\nimport {\n Box,\n ButtonStyled,\n Container,\n DialogCustom,\n Ellipsis,\n GridCustom,\n FieldWithLabel,\n Text,\n TextFieldCustom\n} from '../../common';\nimport { FormKryteriumOceny } from './FormKryteriumOceny';\n\n\nclass Zamowienie extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n newKryteriumOcenyOn: false,\n editingKryteriumOCenyId: null,\n isRemoving: false,\n szacunkowaWartosc: props.zamowienie.szacunkowaWartosc || '',\n };\n }\n\n // handlers\n\n handleMovePrzedmiotZamowieniaFromList(zamowienieTemporaryId, przedmiotZamowieniaTemporaryId) {\n this.props.saveDraggedTemporaryId(przedmiotZamowieniaTemporaryId).then(\n () => this.props.onMovePrzedmiotZamowienia(zamowienieTemporaryId));\n }\n\n handleCloseForm = () => {\n this.setState(\n {\n newKryteriumOcenyOn: false,\n editingKryteriumOCenyId: null,\n },\n () => {\n if (window.formOgloszenie) { window.formOgloszenie.computeProgress()}\n }\n );\n }\n\n handleSaveKryteriumOceny = (data, isNew) => {\n const z = this.props.zamowienie;\n if (isNew && !z.kryteriaOceny.length) {\n this.context.clearAttributeError('zamowienia', z.temporaryId, 'kryteriumOceny');\n }\n this.props.onSaveKryteriumOceny(data, isNew, this.handleCloseForm);\n }\n\n handleChangeSzacunkowaWartosc = (ev) => {\n let value = ev.target.value;\n this.setState(\n prevState => {\n if (value.indexOf(',') === -1 && value.length > 24) {\n value = prevState.szacunkowaWartosc;\n }\n return {szacunkowaWartosc: value}\n },\n () => this.props.onSetZamowienieAttribute(\n this.props.zamowienie.temporaryId, 'szacunkowaWartosc', value)\n );\n }\n\n handleBlurSzacunkowaWartosc = (ev) => {\n let value = roundStringTo(ev.target.value);\n this.setState(\n {szacunkowaWartosc: value},\n () => this.props.onSetZamowienieAttribute(\n this.props.zamowienie.temporaryId, 'szacunkowaWartosc', value)\n );\n }\n\n handleSzacunkowaWartoscKeyPress = (ev) => {\n const szacunkowaWartosc = this.state.szacunkowaWartosc;\n const szacunkowaWartoscLenth = szacunkowaWartosc.length;\n const key = ev.key;\n const keyIndex = ev.target.selectionStart;\n if (!/[\\d,]/.test(key)) {\n ev.preventDefault();\n return\n }\n if (key === ',') {\n if (szacunkowaWartosc.indexOf(',') > -1 || szacunkowaWartoscLenth === 0) {\n ev.preventDefault();\n return\n }\n if (keyIndex < szacunkowaWartoscLenth - 2) {\n ev.preventDefault();\n return\n }\n } else {\n // it's digit\n\n const comaIndex = szacunkowaWartosc.indexOf(',');\n\n if (comaIndex === -1 && szacunkowaWartoscLenth === 24) {\n ev.preventDefault();\n return\n }\n\n if (comaIndex === 24 && keyIndex <= 24) {\n ev.preventDefault();\n return\n }\n\n if (comaIndex > -1 && szacunkowaWartoscLenth === comaIndex + 3 && keyIndex > comaIndex) {\n ev.preventDefault();\n }\n }\n }\n\n handleSzacunkowaWartoscPaste = (ev) => {\n // stop data actually being pasted into input\n ev.preventDefault();\n // set pasted data via clipboard API\n const clipboardData = ev.clipboardData || window.clipboardData;\n const pastedData = clipboardData.getData('Text');\n if (/^\\d{1,24}(,\\d{2})?$/.test(pastedData)) {\n this.setState({szacunkowaWartosc: pastedData});\n }\n }\n\n handleCloseRemoveZamowienieDialog = () => {\n this.setState({isRemoving: false});\n }\n\n // rendering\n\n render() {\n // const from props\n const { isAlreadyPublished, formLocked, onSetZamowienieAttribute } = this.props;\n const { czyWariantowe, kryteriaOceny, przedmiotyZamowienia, temporaryId, tytul } = this.props.zamowienie;\n const kryteriaOceny_ = listOrEmpty(kryteriaOceny);\n const czyWariantowe_ = czyWariantowe || false;\n const tytul_ = tytul || '';\n\n // const from context\n const clearAttributeError = this.context.clearAttributeError;\n const errors = this.context.formErrors.zamowienia[temporaryId] || {};\n\n const isInvalidTytul = (errors.tytul || '').length > 0;\n const tytulId = `title_id_${temporaryId}`;\n\n const isSzacunkowaWartoscInvalid = (errors.szacunkowaWartosc || '').length > 0\n const szacunkowaWartoscId = `szacunkowaWartosc_id_${temporaryId}`;\n\n return (\n <Droppable onDropCallback={() => (isAlreadyPublished || formLocked) ? {} : this.props.onMovePrzedmiotZamowienia(temporaryId)}>\n <Container key={temporaryId}>\n <GridCustom fullwidth>\n <Text tag=\"h2\" accentHeader>Część {this.props.index}</Text>\n {this.renderRemoveZamowienie()}\n </GridCustom>\n <FieldWithLabel label=\"TytuÅ‚\" tag=\"label\" labelFor={tytulId}>\n <TextFieldCustom\n aria-describedby={isInvalidTytul ? 'tytul_error' : null}\n aria-label={`TytuÅ‚, maksymalna liczba znaków: 60. Wpisano ${tytul_.length} znaków.`}\n aria-required={true}\n aria-valuemax={60}\n clearFieldContext=\"tytuÅ‚\"\n characterCount\n disabled={isAlreadyPublished || formLocked}\n fullwidth\n id={tytulId}\n invalid={isInvalidTytul}\n maxLength={60}\n value={tytul_ || ''}\n onChange={ev => onSetZamowienieAttribute(\n temporaryId, 'tytul', ev.target.value\n )}\n onClear={ev => onSetZamowienieAttribute(\n temporaryId, 'tytul', ''\n )} />\n {isInvalidTytul && <Text error id=\"tytul_error\">{errors.tytul}</Text>}\n </FieldWithLabel>\n <Checkbox\n className=\"checkbox checkbox--inside\"\n disabled={isAlreadyPublished || formLocked}\n label=\"Czy dopuszczalne oferty wariantowe?\"\n checked={czyWariantowe_}\n onChange={ev => onSetZamowienieAttribute(\n temporaryId, 'czyWariantowe', ev.target.checked\n )}\n />\n\n <Text tag=\"h2\" sectionHeader>Przedmioty zamówienia</Text>\n <Text info>Liczba wyników: {przedmiotyZamowienia.length}</Text>\n <ul>\n {przedmiotyZamowienia.map((pz) => this.renderPrzedmiotZamowienia(pz))}\n </ul>\n {(errors.przedmiotyZamowienia || '').length > 0 && <Text error>{errors.przedmiotyZamowienia}</Text>}\n\n <FieldWithLabel label=\"Budżet\" tag=\"label\" labelFor={szacunkowaWartoscId}>\n <TextFieldCustom\n aria-describedby={`szacunkowaWartosc_descr${isSzacunkowaWartoscInvalid ? ' szacunkowaWartosc_error' : ''}`}\n aria-valuemax={27}\n clearFieldContext=\"budżet\"\n characterCount\n disabled={formLocked}\n fullwidth\n id={szacunkowaWartoscId}\n invalid={isSzacunkowaWartoscInvalid}\n maxLength={27}\n value={this.state.szacunkowaWartosc || ''}\n onBlur={this.handleBlurSzacunkowaWartosc}\n onFocus={(ev) => clearAttributeError('zamowienia', temporaryId, 'szacunkowaWartosc')}\n onChange={this.handleChangeSzacunkowaWartosc}\n onClear={(ev) => this.setState({szacunkowaWartosc: ''}, () => {\n onSetZamowienieAttribute(temporaryId, 'szacunkowaWartosc', '')\n })}\n onKeyPress={this.handleSzacunkowaWartoscKeyPress}\n onPaste={this.handleSzacunkowaWartoscPaste}\n />\n {isSzacunkowaWartoscInvalid && <Text error id=\"szacunkowaWartosc_error\">{errors.szacunkowaWartosc}</Text>}\n <Text info id=\"szacunkowaWartosc_descr\">Wpisz wartość zgodnie ze wzorem: 1000000,00</Text>\n </FieldWithLabel>\n\n <FieldWithLabel label=\"Kryteria oceny\">\n <Text info>Liczba kryteriów oceny: {kryteriaOceny_.length}</Text>\n <GridCustom tag=\"ul\">\n {kryteriaOceny_.map(ko => this.renderKryteriumOceny(ko))}\n </GridCustom>\n {(errors.kryteriaOceny || '').length > 0 && <Text error><span className=\"sr-only\">Kryteria oceny - </span> {errors.kryteriaOceny}</Text>}\n </FieldWithLabel>\n {this.renderKryteriumOcenyForm()}\n {this.renderNewKryteriumOcenyButton()}\n </Container>\n </Droppable>\n )\n }\n\n renderPrzedmiotZamowienia(pz) {\n const {isAlreadyPublished, formLocked} = this.props;\n let boxWithMenu;\n if (!isAlreadyPublished && this.props.zamowienieTemporaryIds.length > 1) {\n boxWithMenu = (\n <>\n <h3 className=\"sr-only\">Menu przenieÅ› do innej części</h3>\n <ul className=\"box__wide-corner-menu\">\n {this.props.zamowienieTemporaryIds.filter(\n ([temporaryId, indexOnList]) => parseInt(temporaryId) !== parseInt(this.props.zamowienie.temporaryId)).map(\n ([temporaryId, indexOnList]) => (\n <li key={temporaryId}>\n <ButtonStyled\n className=\"box__menu-item\"\n disabled={formLocked}\n onClick={() => this.handleMovePrzedmiotZamowieniaFromList(temporaryId, pz.temporaryId)}>\n PrzenieÅ› do części {indexOnList}\n </ButtonStyled>\n </li>\n ))}\n </ul>\n </>\n );\n }\n\n return (\n <Draggable\n isDragAndDropElement\n key={pz.temporaryId}\n onDragCallback={() => (isAlreadyPublished || formLocked) ? {} : this.props.saveDraggedTemporaryId(pz.temporaryId)}\n >\n <Box\n fullwidth\n tag=\"li\"\n titleWithSubtitle={this.context.przedmiotZamowieniaKategoriaDict[pz.kategoria] || '-'}\n subtitle={this.context.przedmiotZamowieniaPodkategoriaDict[pz.podkategoria] || '-'}\n boxWithMenu={boxWithMenu}\n ariaLabelMoreOptions=\"PrzenieÅ› do części\"\n >\n <FieldWithLabel label=\"Opis\">\n <Ellipsis>\n <Text className=\"long-text\">{pz.opis}</Text>\n </Ellipsis>\n </FieldWithLabel>\n </Box>\n </Draggable>\n )\n }\n\n renderRemoveZamowienie() {\n if (this.props.isAlreadyPublished) { return null }\n if (this.state.isRemoving) {\n if (this.props.zamowienie.przedmiotyZamowienia.length) {\n return (\n <>\n <Text error role=\"alert\">To zamówienie ma zdefiniowane przedmioty zamówienia i nie może zostać usuniÄ™te.</Text>\n <ButtonStyled onClick={() => this.setState({isRemoving: false})}primary>OK</ButtonStyled>\n </>\n )\n }\n return (\n <DialogCustom \n className=\"dialog\"\n dialogTitle=\"Czy na pewno chcesz usunąć tÄ™ część zamówienia wraz ze wszystkimi danymi okreÅ›lonymi dla niej?\"\n onClose={this.handleCloseRemoveZamowienieDialog}\n >\n <GridCustom centerVertical flexEnd>\n <ButtonStyled onClick={this.handleCloseRemoveZamowienieDialog} cancel>Anuluj</ButtonStyled>\n <ButtonStyled onClick={() => this.props.onRemoveZamowienie(this.props.zamowienie.temporaryId)} remove>UsuÅ„</ButtonStyled>\n </GridCustom>\n </DialogCustom>\n )\n }\n\n return (\n <>\n <ButtonStyled\n disabled={this.props.formLocked || this.props.zamowienie.przedmiotyZamowienia.length > 0}\n remove\n onClick={() => this.setState({isRemoving: true})}>\n UsuÅ„ część zamówienia\n </ButtonStyled>\n </>\n )\n }\n\n renderKryteriumOceny(kryteriumOceny) {\n const formLocked = this.props.formLocked;\n return (\n <Box key={kryteriumOceny.temporaryId} tag=\"li\" >\n {Object.keys(this.context.formErrors.kryteriaOceny[kryteriumOceny.temporaryId] || {}).length > 0 && <Text error><Icon aria-hidden=\"true\" icon={{ icon: 'warning', size: 'xsmall' }} style={{marginRight: 3}} /><span className=\"sr-only\"Kryterium cenowe zawiera ></span> BÅ‚Ä™dy!</Text>}\n <FieldWithLabel label=\"Czy kryterium cenowe\">\n <Text>{kryteriumOceny.czyKryteriumCenowe ? 'Tak' : 'Nie'}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Opis\">\n <Text className=\"long-text\">{kryteriumOceny.opis || '-'}</Text>\n </FieldWithLabel>\n {!this.props.isAlreadyPublished && (\n <GridCustom flexEnd additionalClassName=\" box__button-container\">\n <ButtonStyled\n disabled={formLocked}\n remove\n onClick={() => this.props.onRemoveKryteriumOceny(\n this.props.zamowienie.temporaryId, kryteriumOceny.temporaryId)\n }>\n UsuÅ„\n </ButtonStyled>\n <ButtonStyled\n disabled={formLocked}\n lite\n onClick={() => this.setState(\n {editingKryteriumOCenyId: kryteriumOceny.temporaryId})\n }>\n Edytuj{Object.keys(this.context.formErrors.kryteriaOceny[kryteriumOceny.temporaryId] || {}).length > 0 && <span className=\"sr-only\"> Uwaga! kryterium cenowe zawiera bÅ‚Ä™dy.</span>}\n </ButtonStyled>\n </GridCustom>\n )}\n </Box>\n )\n }\n\n renderKryteriumOcenyForm() {\n if (this.props.isAlreadyPublished || (!this.state.newKryteriumOcenyOn &&\n this.state.editingKryteriumOCenyId === null)) { return null }\n\n const {\n editingKryteriumOCenyId,\n newKryteriumOcenyOn\n } = this.state;\n\n const z = this.props.zamowienie;\n\n let ko;\n if (newKryteriumOcenyOn) {\n ko = {temporaryId: this.props.kryteriumOcenyLastTemporaryId + 1};\n } else {\n ko = z.kryteriaOceny.filter(k => k.temporaryId === editingKryteriumOCenyId)[0];\n }\n\n return <FormKryteriumOceny\n isNew={newKryteriumOcenyOn}\n kryteriumOceny={ko}\n zamowienieTemporaryId={z.temporaryId}\n onCloseForm={this.handleCloseForm}\n onSave={this.handleSaveKryteriumOceny} />\n }\n\n renderNewKryteriumOcenyButton() {\n if (this.props.isAlreadyPublished || this.state.newKryteriumOcenyOn) { return null }\n const { temporaryId } = this.props.zamowienie;\n const errors = this.context.formErrors.zamowienia[temporaryId] || {};\n return <ButtonStyled\n add\n disabled={this.props.formLocked}\n onClick={() => this.setState({newKryteriumOcenyOn: true, editingKryteriumOCenyId: null})}>\n Dodaj kryterium{(errors.kryteriaOceny || '').length > 0 && <span className=\"sr-only\"> {errors.kryteriaOceny}</span>}\n </ButtonStyled>\n }\n}\n\n\nZamowienie.contextType = AdvertisementContext;\n\n\nexport { Zamowienie };\n","import React from 'react';\nimport { Radio } from '@rmwc/radio';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { getLastTemporaryId, listOrEmpty } from '../../../helpers';\nimport {\n ButtonStyled,\n Container,\n GridCustom,\n Steps,\n Text,\n} from '../../common';\nimport { PomocEkranowa } from '../zarzadzanieTrescia';\nimport { AlreadyPublishedInfo } from './AlreadyPublishedInfo';\nimport { BaseStepComponent } from './BaseStepComponent';\nimport { Zamowienie } from './Zamowienie';\n\n\nclass StepCzesciKryteria extends BaseStepComponent {\n stepName = 'czesciKryteria';\n\n constructor(props) {\n super(props);\n this.state = {draggedTemporaryId : null};\n }\n\n // handlers\n\n handleSaveCzyDopuszczalnaOfertaCzesciowa = (ev) => {\n const czyDopuszczalnaOfertaCzesciowa = ev.currentTarget.value === 'true';\n this.context.setAttributeValue(\n 'czyDopuszczalnaOfertaCzesciowa', czyDopuszczalnaOfertaCzesciowa);\n }\n\n handleSaveDraggableTemporaryId = (temporaryId) => {\n return new Promise((resolve, reject) => {\n this.setState({draggedTemporaryId: temporaryId}, resolve());\n })\n }\n\n handleMovePrzedmiotZamowienia = (zamowienieTemporaryId) => {\n this.context.movePrzedmiotZamowienia(\n zamowienieTemporaryId,\n this.state.draggedTemporaryId,\n () => this.setState({draggedTemporaryId: null})\n );\n }\n\n // rendering\n\n render() {\n const { isAlreadyPublished, isPreview } = this.props;\n const formLocked = isPreview || this.context.validationOn || this.context.savingOn;\n const o = isPreview ? {} : this.context.ogloszenie;\n const czyDopuszczalnaOfertaCzesciowa = isPreview ? false : o.czyDopuszczalnaOfertaCzesciowa;\n const changeCzyDopuszczalnaOfertaCzesciowaForbidden = czyDopuszczalnaOfertaCzesciowa && o.zamowienia.length > 1;\n const radioDisabled = isAlreadyPublished || formLocked || changeCzyDopuszczalnaOfertaCzesciowaForbidden;\n\n return (\n <>\n <PomocEkranowa ekran=\"form_announcement_partscriteria\" content={this.props.pomocEkranowaContent} />\n {isAlreadyPublished && <AlreadyPublishedInfo />}\n <Container>\n <fieldset>\n <Text tag=\"legend\" className=\"label\">Czy dopuszczalna oferta częściowa?</Text>\n <Radio\n value={true}\n disabled={radioDisabled}\n name=\"czyDopuszczalnaOfertaCzesciowaRadioGroup\"\n checked={czyDopuszczalnaOfertaCzesciowa === true}\n onChange={this.handleSaveCzyDopuszczalnaOfertaCzesciowa}\n label=\"Tak\"\n aria-label=\"Czy dopuszczalna oferta częściowa? Tak\"\n id=\"radio_id\"\n />\n <Radio\n value={false}\n disabled={radioDisabled}\n name=\"czyDopuszczalnaOfertaCzesciowaRadioGroup\"\n checked={czyDopuszczalnaOfertaCzesciowa === false}\n onChange={this.handleSaveCzyDopuszczalnaOfertaCzesciowa}\n label=\"Nie\"\n aria-label=\"Czy dopuszczalna oferta częściowa? Nie\"\n />\n </fieldset>\n {!isAlreadyPublished && changeCzyDopuszczalnaOfertaCzesciowaForbidden &&\n <Text info>UsuÅ„ dodatkowe części zamówienia aby odblokować tÄ™ opcjÄ™.</Text>}\n </Container>\n\n {this.renderZamowienia(formLocked)}\n\n <Steps\n disabled={formLocked}\n elementToFocusRef={this.props.elementToFocusRef}\n hasNext\n hasPrev\n nextLabel=\"PozostaÅ‚e\"\n prevLabel=\"Warunki\"\n onNextClick={() => this.props.onChangeCurrentMenuLink('pozostale')}\n onPrevClick={() => this.props.onChangeCurrentMenuLink('warunki')}\n />\n </>\n )\n }\n\n renderZamowienia(formLocked) {\n if (!this.props.isPreview && this.context.ogloszenie.zamowienia.length) {\n const isAlreadyPublished = this.props.isAlreadyPublished;\n const {\n czyDopuszczalnaOfertaCzesciowa,\n zamowienia,\n } = this.context.ogloszenie;\n const zamowienieTemporaryIds = zamowienia.map((z, i) => [z.temporaryId, i + 1]);\n return (\n <>\n <Text info>Liczba części zamówienia: {zamowienia.length}</Text>\n <ul>\n {listOrEmpty(zamowienia).map((z, i) => (\n <Zamowienie\n isAlreadyPublished={isAlreadyPublished}\n formLocked={formLocked}\n key={z.temporaryId}\n index={i + 1}\n kryteriumOcenyLastTemporaryId={getLastTemporaryId(\n zamowienia, 'kryteriaOceny')}\n zamowienie={z}\n zamowienieTemporaryIds={zamowienieTemporaryIds}\n onSetZamowienieAttribute={this.context.setZamowienieAttributeValue}\n onSaveKryteriumOceny={this.context.saveKryteriumOceny}\n onRemoveKryteriumOceny={this.context.removeKryteriumOceny}\n onRemoveZamowienie={this.context.removeZamowienie}\n saveDraggedTemporaryId={this.handleSaveDraggableTemporaryId}\n onMovePrzedmiotZamowienia={this.handleMovePrzedmiotZamowienia} />\n ))}\n </ul>\n {!isAlreadyPublished && czyDopuszczalnaOfertaCzesciowa && (\n <GridCustom flexEnd>\n <ButtonStyled disabled={formLocked} onClick={this.context.addZamowienie} add>Dodaj część zamówienia</ButtonStyled>\n </GridCustom>\n )}\n </>\n )\n } else if ((this.context.formErrors.ogloszenie.zamowienia_kryteriaOceny || '').length) {\n return <Text error>Zdefiniuj przedmioty zamówienia, aby móc dodawać kryteria do części zamówienia.</Text>\n } else {return null}\n }\n}\n\n\nStepCzesciKryteria.contextType = AdvertisementContext;\n\n\nexport { StepCzesciKryteria }\n","import React, { useContext, useEffect } from 'react';\n\nimport {\n AdvertisementContext\n} from '../../../../context/advertisementContext';\n\n\nexport const withStepConfiguration = (StepComponent, stepName) => {\n\n return (props) => {\n const context = useContext(AdvertisementContext);\n\n useEffect(() => {\n if (!props.isPreview) {\n window.scrollTo(0, 0);\n }\n\n // clear step error in menu\n context.clearStepError(stepName);\n\n if (window.formOgloszenie) {\n window.formOgloszenie.computeProgress();\n }\n return () => {\n if (window.formOgloszenie) {\n window.formOgloszenie.computeProgress();\n }\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return <StepComponent {...props} />\n }\n}\n","import React, { useContext } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\nimport { Typography } from '@rmwc/typography';\n\nimport { SELECT_CLASSNAME, SELECT_INVALID_CLASSNAME } from '../../../const';\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { UserContext } from '../../../context/user-context';\nimport { listOrEmpty } from '../../../helpers';\n import { sortProjects } from '../../../sorters';\nimport { Container, FieldWithLabel, GridCustom, Select, Steps, Text,\n TextFieldCustom } from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { PomocEkranowa } from '../zarzadzanieTrescia';\nimport { AlreadyPublishedInfo } from './AlreadyPublishedInfo';\nimport { withStepConfiguration } from './hoc/withStepConfiguration';\n\n\nconst NO_PROJECT_TEXT =\n 'Nie masz zdefiniowanych projektów. OkreÅ›l je w menu Projekty i Nabory.';\nconst NO_PROJECT_ADMIN_TEXT =\n 'OgÅ‚oszeniodawca nie ma zdefiniowanych projektów.';\nconst NO_ENROLLMENT_TEXT =\n 'Nie masz zdefiniowanych naborów. OkreÅ›l je w menu Projekty i Nabory.';\nconst NO_ENROLLMENT_ADMIN_TEXT =\n 'OgÅ‚oszeniodawca nie ma zdefiniowanych naborów.';\nconst NO_OSOBY_TEXT =\n 'Nie masz zdefiniowanych osób do kontaktu. OkreÅ›l je w ustawieniach profilu.';\n\n\nconst StepPozostaleBase = (props) => {\n\n function sortProjectsEnrollments(objectList) {\n return sortProjects(objectList, 'calyNumer_asc')\n }\n\n const { isAlreadyPublished, isPreview, projectsSelected } = props;\n\n const { user } = useContext(UserContext);\n const { advertisementManagerType } = user;\n const context = useContext(AdvertisementContext);\n const {\n nabory,\n ogloszenie: o,\n osobyDoKontaktu,\n projekty,\n setAttributeValue\n } = context;\n\n const formLocked = isPreview || context.validationOn || context.savingOn;\n\n const errors = context.formErrors.ogloszenie;\n const osobyDoKontaktu_ = isPreview ? [] : listOrEmpty(o.osobyDoKontaktu);\n\n const isProjektyInvalid = (errors.projekty || '').length > 0;\n const isNumerNaboruInvalid = (errors.nabor || '').length > 0;\n const isTytulInvalid = (errors.tytul || '').length > 0;\n const isOsobyDoKontaktuInvalid = (errors.osobyDoKontaktu || '').length > 0;\n\n let tytul = '';\n let zamowieniaUzupelniajace = '';\n let warunkiZmianyUmowy = '';\n if (!isPreview) {\n tytul = o.tytul;\n warunkiZmianyUmowy = o.warunkiZmianyUmowy;\n zamowieniaUzupelniajace = o.zamowieniaUzupelniajace;\n }\n\n const { isAuthor } = advertisementManagerType;\n\n const projectsEnrollmentsDisabled = formLocked ||\n (isAlreadyPublished && isAuthor);\n const contactPersonsDisabled = formLocked ||\n (isAlreadyPublished && advertisementManagerType.isAdmin);\n\n return (\n <>\n <PomocEkranowa ekran=\"form_announcement_others\" content={props.pomocEkranowaContent} />\n {isAlreadyPublished && <AlreadyPublishedInfo />}\n <Container>\n <FieldWithLabel label=\"Numer ogÅ‚oszenia\">\n <Typography use=\"headline4\" tag=\"h2\">{isPreview ? '-' : o.ogloszenie.numer || '-'}</Typography>\n </FieldWithLabel>\n <Checkbox\n checked={projectsSelected}\n disabled={projectsEnrollmentsDisabled}\n label={`${isAuthor ? 'Mam' : 'OgÅ‚oszeniodawca ma'} projekt`}\n onChange={props.onChangeProjectsSelected}\n />\n <GridCustom oneRow fullwidth flexBottom>\n {projectsSelected && (\n <FieldWithLabel\n aria-label={isAlreadyPublished\n ? 'DoÅ‚Ä…czone projekty. Projekty nie mogÄ… być już zmienione.'\n : `Projekty ${!projekty.length \n ? (isAuthor ? NO_PROJECT_TEXT : NO_PROJECT_ADMIN_TEXT) \n : ''\n } ${isProjektyInvalid ? errors.projekty : ''}`\n }\n label=\"Projekty\"\n selectRef={React.createRef()}\n tag=\"label\"\n >\n <Select\n className={isProjektyInvalid ? SELECT_INVALID_CLASSNAME : SELECT_CLASSNAME}\n closeMenuOnSelect={false}\n defaultValue={isPreview ? [] : projekty.filter(\n p => o.projekty.includes(parseInt(p.id))\n ).map(p => ({value: p.id, label: p.calyNumer}))}\n isDisabled={projectsEnrollmentsDisabled}\n isClearable={false}\n isMulti\n isSearchable\n noOptionsMessage={() => 'Brak wybranej opcji'}\n options={\n sortProjectsEnrollments(projekty)\n .map(p => ({value: p.id, label: p.calyNumer}))\n }\n placeholder='Wybierz...'\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej. Możesz wybrać kilka opcji.' }}\n styles={customSelectStyles}\n onChange={selectedOptions => setAttributeValue(\n 'projekty', selectedOptions === null ? [] : [...selectedOptions].map(option => parseInt(option.value))\n )}\n />\n {!projekty.length &&\n <Text error id=\"no_projects_info\">\n {isAuthor ? NO_PROJECT_TEXT : NO_PROJECT_ADMIN_TEXT}\n </Text>\n }\n {isProjektyInvalid && <Text error>{errors.projekty}</Text>}\n </FieldWithLabel>\n )}\n {!projectsSelected && (\n <FieldWithLabel\n aria-label={isAlreadyPublished\n ? 'Nabór. Nabór nie może być już zmieniony.'\n : `Nabór ${!nabory.length \n ? (isAuthor ? NO_ENROLLMENT_TEXT : NO_ENROLLMENT_ADMIN_TEXT)\n : ''\n } ${isNumerNaboruInvalid ? errors.nabor : ''}`\n }\n label=\"Nabór\"\n selectRef={React.createRef()}\n tag=\"label\"\n >\n <Select\n className={isNumerNaboruInvalid ? SELECT_INVALID_CLASSNAME : SELECT_CLASSNAME}\n closeMenuOnSelect={false}\n defaultValue={(isPreview || o.nabor === null) ? null :\n nabory.filter(n => o.nabor.value === n.id)\n .map(p => ({value: p.id, label: p.calyNumer}))\n }\n isDisabled={projectsEnrollmentsDisabled}\n isClearable={false}\n isSearchable\n noOptionsMessage={() => 'Brak wybranej opcji'}\n options={\n sortProjectsEnrollments(nabory)\n .map(n => ({value: n.id, label: n.calyNumer}))\n }\n placeholder='Wybierz...'\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n styles={customSelectStyles}\n onChange={selectedOption => setAttributeValue('nabor', selectedOption)}\n />\n {!nabory.length &&\n <Text error>\n {isAuthor ? NO_ENROLLMENT_TEXT : NO_ENROLLMENT_ADMIN_TEXT }\n </Text>\n }\n {isNumerNaboruInvalid && <Text error>{errors.nabor}</Text>}\n </FieldWithLabel>\n )}\n </GridCustom>\n <FieldWithLabel label=\"TytuÅ‚\" tag=\"label\" labelFor=\"title_id\">\n <TextFieldCustom\n aria-describedby={isTytulInvalid ? 'tytul_error' : null}\n aria-label={`TytuÅ‚, maksymalna liczba znaków: 1000. Wpisano ${tytul.length} znaków.`}\n aria-valuemax={1000}\n characterCount\n clearFieldContext=\"tytuÅ‚\"\n disabled={formLocked}\n fullwidth\n id=\"title_id\"\n invalid={isTytulInvalid}\n maxLength={1000}\n textarea\n value={tytul}\n onChange={ev => setAttributeValue('tytul', ev.target.value)}\n onClear={ev => setAttributeValue('tytul', '')} />\n {isTytulInvalid && <Text error id=\"tytul_error\">{errors.tytul}</Text>}\n </FieldWithLabel>\n <FieldWithLabel\n label=\"Zamówienia uzupeÅ‚niajÄ…ce\"\n labelFor=\"zamowieniaUzupelniajace_id\"\n tag=\"label\"\n >\n <TextFieldCustom\n aria-label={isAlreadyPublished\n ? 'Zamówienia uzupeÅ‚niajÄ…ce. Pole nie może być już edytowane.'\n : `Zamówienia uzupeÅ‚niajÄ…ce, maksymalna liczba znaków: 6000. Wpisano ${zamowieniaUzupelniajace.length} znaków.`\n }\n aria-valuemax={6000}\n characterCount\n clearFieldContext=\"zamówienie uzupeÅ‚niajÄ…ce\"\n disabled={isAlreadyPublished || formLocked}\n fullwidth\n id=\"zamowieniaUzupelniajace_id\"\n maxLength={6000}\n textarea\n value={zamowieniaUzupelniajace}\n onChange={ev => setAttributeValue('zamowieniaUzupelniajace', ev.target.value)}\n onClear={ev => setAttributeValue('zamowieniaUzupelniajace', '')} />\n </FieldWithLabel>\n <FieldWithLabel\n label=\"Warunki zmiany umowy\"\n labelFor=\"warunkiZmianyUmowy_id\"\n tag=\"label\"\n >\n <TextFieldCustom\n aria-label={isAlreadyPublished\n ? 'Warunki zmiany umowy. Pole nie może być już edytowane.'\n : `Warunki zmiany umowy, maksymalna liczba znaków: 6000. Wpisano ${warunkiZmianyUmowy.length} znaków.`\n }\n aria-valuemax={6000}\n clearFieldContext=\"warunki zmiany umowy\"\n characterCount\n disabled={isAlreadyPublished || formLocked}\n id=\"warunkiZmianyUmowy_id\"\n fullwidth\n maxLength={6000}\n textarea\n value={warunkiZmianyUmowy}\n onChange={ev => setAttributeValue('warunkiZmianyUmowy', ev.target.value)}\n onClear={ev => setAttributeValue('warunkiZmianyUmowy', '')} />\n </FieldWithLabel>\n <FieldWithLabel label=\"Osoby do kontaktu\" tag=\"label\" selectRef={React.createRef()}>\n <Select\n aria-label={`Osoby do kontaktu ${!osobyDoKontaktu.length ? NO_OSOBY_TEXT : ''} ${isOsobyDoKontaktuInvalid ? errors.osobyDoKontaktu : ''}`}\n className={isOsobyDoKontaktuInvalid > 0 ? SELECT_INVALID_CLASSNAME : SELECT_CLASSNAME}\n closeMenuOnSelect={false}\n defaultValue={osobyDoKontaktu.filter(o => osobyDoKontaktu_.includes(o.id)).map(\n o => ({value: o.id, label: o.imie + ' ' + o.nazwisko}))}\n isClearable={false}\n isDisabled={contactPersonsDisabled}\n isMulti\n isSearchable\n noOptionsMessage={() => 'Brak wybranej opcji'}\n options={osobyDoKontaktu.map(o => ({value: o.id, label: o.imie + ' ' + o.nazwisko}))}\n placeholder='Wybierz...'\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej. Możesz wybrać kilka opcji.' }}\n styles={customSelectStyles}\n onChange={selectedOptions => setAttributeValue(\n 'osobyDoKontaktu', selectedOptions === null ? [] : [...selectedOptions].map(option => option.value))}\n />\n {!osobyDoKontaktu.length && <Text error>{NO_OSOBY_TEXT}</Text>}\n {isOsobyDoKontaktuInvalid && <Text error>{errors.osobyDoKontaktu}</Text>}\n </FieldWithLabel>\n </Container>\n <Steps\n disabled={formLocked}\n elementToFocusRef={props.elementToFocusRef}\n hasNext\n hasPrev\n nextLabel=\"ZaÅ‚Ä…czniki\"\n prevLabel=\"Części i kryteria\"\n onNextClick={() => props.onChangeCurrentMenuLink('zalaczniki')}\n onPrevClick={() => props.onChangeCurrentMenuLink('czesciKryteria')}\n />\n </>\n )\n}\n\nconst StepPozostale = withStepConfiguration(StepPozostaleBase, 'pozostale');\nexport { StepPozostale }\n","import React, { Component } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport { getSerializedObject } from '../../../serializers';\nimport { customSelectStyles } from '../../vars/vars';\nimport { ButtonStyled, FieldWithLabel, GridCustom, Select, Text } from '../../common';\n\n\nclass FormKodCPV extends Component{\n\n constructor(props) {\n super(props);\n const initial = props.initial ? this.setInitialOptions() : (props.isMulti ? [] : null);\n this.state = {\n selectedKod: initial,\n selectedKodError: '',\n selectMenuIsOpen: false,\n inputOptions: initial,\n moreOptionsAvailable: false,\n fetchError: '',\n };\n\n this.requestId = 0;\n\n this.xhrFetch = null;\n this.xhrTimeout = null;\n\n this.handleChangeInputKodCPV = this.handleChangeInputKodCPV.bind(this);\n this.handleFetchSuccess = this.handleFetchSuccess.bind(this);\n this.handleFetchError = this.handleFetchError.bind(this);\n this.handleFetchIncorrectStatus = this.handleFetchIncorrectStatus.bind(this);\n this.handleBlurKodCPV = this.handleBlurKodCPV.bind(this);\n this.handleChangeKodCPV = this.handleChangeKodCPV.bind(this);\n this.handleAddKodCPV = this.handleAddKodCPV.bind(this);\n }\n\n // basic functions\n\n componentWillUnmount() {\n // abort api request if exist\n if (this.xhrFetch !== null) {\n this.xhrFetch.abort();\n }\n\n // clear timeouts if exist\n if (this.xhrTimeout !== null) {\n clearTimeout(this.xhrTimeout);\n }\n }\n\n // handlers\n\n handleChangeInputKodCPV(inputValue) {\n if (this.xhrTimeout !== null) {\n clearTimeout(this.xhrTimeout);\n this.xhrTimeout = null;\n }\n\n if (inputValue.length < 5 && (inputValue.length < 3 || !/^[A-Za-z ąĄćĆęĘłÅńŃóÓśŚźŹżŹ]{3,4}$/.test(inputValue))) {\n this.setState({\n selectMenuIsOpen: false,\n inputOptions: [],\n moreOptionsAvailable: false,\n fetchError: ''\n });\n } else {\n this.requestId++;\n this.xhrTimeout = setTimeout(() => {\n this.setState(\n {inputOptions: [], moreOptionsAvailable: false, fetchError: ''},\n () => {\n // get data from server\n this.xhrFetch = fetchApi(\n '/api/dictionaries/cpv',\n 'GET',\n {},\n {search_key: inputValue, request_id: this.requestId},\n this.handleFetchSuccess,\n this.handleFetchError,\n this.handleFetchIncorrectStatus,\n );\n }\n );\n }, 500);\n }\n }\n\n handleFetchSuccess(data) {\n this.xhrFetch = null;\n\n if (parseInt(data.request_id) < this.requestId) {\n // do nothing, there is another fetch on the fly\n return\n }\n let inputOptions = getSerializedObject(data).kodyCPV || [];\n if (inputOptions.length && this.props.usedIds) {\n inputOptions = inputOptions.filter(\n option => !this.props.usedIds.includes(option.id));\n }\n this.setState({\n selectMenuIsOpen: true,\n inputOptions: inputOptions.map(\n option => ({\n value: option.id,\n data: {id: String(option.id), kod: option.kod, nazwa: option.nazwa},\n label: `${option.kod} ${option.nazwa}`\n })\n ),\n moreOptionsAvailable: data.meta.last_page > 1,\n });\n }\n\n handleFetchError(data) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n fetchError: `Nie udaÅ‚o siÄ™ pobrać kodów CPV. ${data.message}`,\n });\n }\n\n handleFetchIncorrectStatus(status) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n fetchError: `Nie udaÅ‚o siÄ™ pobrać kodów CPV. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`,\n });\n }\n\n handleBlurKodCPV(ev) {\n this.setState({selectMenuIsOpen: false});\n }\n\n handleChangeKodCPV(selectedOption) {\n let selectedKod;\n if (this.props.isMulti) {\n selectedKod = (selectedOption || []).map(o => o.data);\n } else {\n selectedKod = selectedOption.data;\n }\n this.setState(\n {\n selectMenuIsOpen: false,\n selectedKod,\n },\n () => {\n if (!this.props.withButtons) {\n this.props.addKodCPV(this.state.selectedKod);\n }\n }\n );\n }\n\n handleAddKodCPV(event) {\n if (!this.validate()) { return }\n this.props.addKodCPV(this.state.selectedKod);\n }\n\n // helpers\n\n setInitialOptions() {\n const initial = this.props.initial;\n if (this.props.isMulti) {\n return initial.map(i => {\n return {\n value: parseInt(i.id),\n data: i,\n label: `${i.kod} ${i.nazwa}`}\n })\n } else {\n return {\n value: parseInt(initial.id),\n data: initial,\n label: `${initial.kod} ${initial.nazwa}`\n }\n }\n }\n\n validate() {\n // clean errors\n this.setState({selectedKodError: ''});\n if (this.state.selectedKod === null) {\n this.setState({selectedKodError: 'To pole jest wymagane.'});\n return false\n }\n return true\n }\n\n // rendering\n\n render() {\n const {\n fetchError,\n inputOptions,\n moreOptionsAvailable,\n selectedKod,\n selectedKodError,\n selectMenuIsOpen,\n } = this.state;\n const isSelectInvalid = selectedKodError.length > 0;\n const moreOptionsAvailableText = 'Istnieje wiÄ™cej pasujÄ…cych wyników. JeÅ›li na liÅ›cie nie ma szukanego kodu, wpisz dodatkowe znaki.';\n return (\n <>\n <FieldWithLabel label=\"Kod CPV\" tag=\"label\" selectRef={React.createRef()}>\n {moreOptionsAvailable && <Text info>{moreOptionsAvailableText}</Text>}\n <Select\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n defaultValue={selectedKod}\n isMulti={this.props.isMulti || false}\n menuIsOpen={selectMenuIsOpen}\n options={inputOptions}\n placeholder='Wpisz co najmniej 5 cyfr lub 3 litery...'\n styles={customSelectStyles}\n className={isSelectInvalid ? 'select-custom select-custom--invalid' : 'select-custom'}\n onBlur={this.handleBlurKodCPV}\n onChange={this.handleChangeKodCPV}\n onInputChange={this.handleChangeInputKodCPV}\n components={{\n DropdownIndicator: () => null,\n IndicatorSeparator: () => null\n }}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n aria-label={`Kody CPV, wpisz co najmniej 5 cyfr lub 3 litery ${moreOptionsAvailable ? moreOptionsAvailableText : ''} ${isSelectInvalid ? selectedKodError : ''} ${fetchError.length > 0 ? fetchError : ''}`}\n />\n {isSelectInvalid && <Text error id=\"selected_error\">{selectedKodError}</Text>}\n {fetchError.length > 0 && <Text error id=\"selected_fetch_error\">{fetchError}</Text>}\n </FieldWithLabel>\n {this.props.withButtons && this.renderButtons()}\n </>\n )\n }\n\n renderButtons() {\n const addButtonDisabled = this.state.selectedKod === null;\n return (\n <GridCustom flexEnd>\n <ButtonStyled\n cancel\n onClick={this.props.onCancelKodCPV}\n >Anuluj<span className=\"sr-only\"> dodawanie kodu CPV</span></ButtonStyled>\n <ButtonStyled\n add={!addButtonDisabled}\n disabled={addButtonDisabled}\n id=\"potwierdz_dodaj_kodCPV_button_id\"\n onClick={this.handleAddKodCPV}\n >Dodaj<span className=\"sr-only\"> kod CPV. {addButtonDisabled && 'Guzik nieaktywny, musisz wybrać kod, aby go dodać.'}</span></ButtonStyled>\n </GridCustom>\n )\n }\n}\n\n\nexport { FormKodCPV };\n","import React, { Component } from 'react';\n\nimport { ButtonStyled, GridCustom, Text } from '../../common';\nimport { FormKodCPV } from './FormKodCPV';\n\n\nclass KodyCPV extends Component{\n\n constructor(props) {\n super(props);\n this.state = {\n newKodOn: false,\n selectedKod: null,\n };\n\n this.handleAddKodCPV = this.handleAddKodCPV.bind(this);\n this.handleRemoveKodCPV = this.handleRemoveKodCPV.bind(this);\n }\n\n // handlers\n\n handleAddKodCPV(selectedCode) {\n this.setState(\n {newKodOn: false},\n () => this.props.addKodCPV(selectedCode)\n );\n }\n\n handleRemoveKodCPV(id_) {\n this.props.removeKodCPV(id_);\n }\n\n handleCancelKodCPV = () => {\n this.setState({newKodOn: false, selectedKod: null})\n }\n\n // rendering\n\n render() {\n const kodyCPV = this.props.kodyCPV;\n return (\n <>\n <Text info>Liczba kodów CPV: {kodyCPV.length}</Text>\n <ul>\n {kodyCPV.map(kod_ => {\n return (\n <GridCustom key={kod_.id} centerVertical fullwidth className=\" separate-content\" tag=\"li\">\n <Text>{kod_.kod} {kod_.nazwa}</Text>\n <ButtonStyled onClick={(ev) => this.handleRemoveKodCPV(kod_.id)} remove className=\"btn--delete\">\n UsuÅ„<span className=\"sr-only\"> kod CPV</span>\n </ButtonStyled>\n </GridCustom>\n )\n })}\n </ul>\n {this.renderNewKodForm()}\n </>\n )\n }\n\n renderNewKodForm() {\n if (this.state.newKodOn) {\n return <FormKodCPV\n usedIds={this.props.kodyCPV.map(k => parseInt(k.id))}\n withButtons\n addKodCPV={this.handleAddKodCPV}\n onCancelKodCPV={this.handleCancelKodCPV} />\n }\n return (\n <GridCustom flexEnd>\n <ButtonStyled add id=\"dodaj_kodCPV_button_id\" onClick={() => this.setState({newKodOn: true})}>\n Dodaj kod CPV<span className=\"sr-only\"> {this.props.errorsKodyCPV}</span>\n </ButtonStyled>\n </GridCustom>\n )\n }\n}\n\n\nexport { KodyCPV };\n","import React, { Component } from 'react';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport {\n ButtonStyled,\n FieldWithLabel,\n GridCustom,\n Select,\n Text,\n TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { FormKraj, FormMiejscowosc } from '../common';\n\n\nconst POLAND = 'Polska';\nconst EMPTY_ADDRESS = {\n kraj: POLAND,\n wojewodztwo: null,\n powiat: null,\n gmina: null,\n miejscowosc: '',\n}\n\n\nclass FormMiejsceRealizacji extends Component {\n\n constructor(props) {\n super(props);\n this.state = Object.assign({\n typ: null,\n adresErrors: {},\n }, EMPTY_ADDRESS);\n\n this.handleChangeMiejscowosc = this.handleChangeMiejscowosc.bind(this);\n this.handleChangeTyp = this.handleChangeTyp.bind(this);\n this.handleSaveMiejsceRealizacji = this.handleSaveMiejsceRealizacji.bind(this);\n }\n\n // basic functions\n\n componentDidMount() {\n this.setState({typ: this.context.adresId});\n }\n\n // handlers\n\n handleChangeMiejscowosc(value) {\n this.setState(prevState =>\n ({\n adresErrors: Object.assign({}, prevState.adresErrors, {miejscowosc: ''}),\n kraj: POLAND,\n ...value\n })\n );\n }\n\n handleChangeZagranicaAttribute(value, field) {\n this.setState(prevState =>\n ({\n adresErrors: Object.assign({}, prevState.adresErrors, {[field]: ''}),\n [field]: value,\n })\n );\n }\n\n handleChangeTyp(selectedOptions) {\n const typ = parseInt(selectedOptions.value);\n if (typ === this.context.adresId) {\n this.setState({\n typ: typ,\n ...EMPTY_ADDRESS,\n adresErrors: {},\n });\n } else if (typ === this.context.zagranicaId) {\n this.setState({\n typ: typ,\n kraj: null,\n wojewodztwo: null,\n powiat: null,\n gmina: null,\n miejscowosc: '',\n adresErrors: {},\n });\n } else {\n this.setState({\n typ: typ,\n kraj: POLAND,\n wojewodztwo: null,\n powiat: null,\n gmina: null,\n miejscowosc: null,\n adresErrors: {},\n });\n }\n }\n\n handleSaveMiejsceRealizacji() {\n if (!this.validate()) { return }\n this.props.saveMiejsceRealizacji({\n id: null,\n temporaryId: this.props.temporaryId,\n typ: this.state.typ,\n kraj: this.state.kraj,\n wojewodztwo: this.state.wojewodztwo,\n powiat: this.state.powiat,\n gmina: this.state.gmina,\n miejscowosc: this.state.miejscowosc,\n });\n }\n\n // helpers\n\n isSaveButtonDisabled() {\n // can't save miejsce realizacji if it's adres and not wojewodztwo set\n // or it's zagranica and not kraj and miejscowosc set\n const {\n kraj,\n miejscowosc,\n typ,\n } = this.state;\n return (\n (typ === this.context.adresId && (miejscowosc || '').length === 0) ||\n (typ === this.context.zagranicaId && !((kraj || '').length && (miejscowosc || '').length))\n )\n }\n\n sortMiejscowosc(miejscowosc1, miejscowosc2) {\n return miejscowosc1.miejscowosc.localeCompare(miejscowosc2.miejscowosc, 'pl')\n }\n\n validate() {\n // clean errors\n this.setState({adresErrors: {}});\n const {\n kraj,\n miejscowosc,\n typ,\n } = this.state;\n if (typ === this.context.adresId && !miejscowosc.length) {\n this.setState({adresErrors: {miejscowosc: 'To pole jest wymagane.'}})\n return false\n }\n if (typ === this.context.zagranicaId && (!(kraj || '').length || !miejscowosc.length)) {\n let errors = {};\n for (let name of ['kraj', 'miejscowosc']) {\n if (!(this.state[name] || '').length) {\n errors[name] = 'To pole jest wymagane.'\n }\n }\n this.setState({adresErrors: errors});\n return false\n }\n return true\n }\n\n // rendering\n\n render() {\n const isSaveButtonDisabled = this.isSaveButtonDisabled();\n const {\n adresId,\n typMiejscaRealizacji,\n zagranicaId,\n } = this.context;\n const typ = this.state.typ;\n\n return (\n <FieldWithLabel label=\"Rodzaj adresu\" tag=\"label\" selectRef={React.createRef()}>\n <Select\n className=\"select-custom\"\n indicatorId=\"mr_rodzajAdresu_id\"\n isSearchable={false}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n options={Object.entries(typMiejscaRealizacji).map(([key, value]) => {\n return {value: key, label: value}\n })}\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n styles={customSelectStyles}\n value={{\n value: this.state.typ,\n label: typMiejscaRealizacji[this.state.typ]\n }}\n onChange={this.handleChangeTyp}\n />\n <GridCustom flexS noWrap fullwidth>\n {adresId === typ && this.renderAdresForm()}\n {zagranicaId === typ && this.renderZagranicaForm()}\n </GridCustom>\n <GridCustom flexEnd>\n <ButtonStyled onClick={this.props.cancelNewMiejsceRealizacji} cancel>Anuluj<span className=\"sr-only\"> dodawanie miejsca realizacji</span></ButtonStyled>\n <ButtonStyled onClick={this.handleSaveMiejsceRealizacji} add={!isSaveButtonDisabled} disabled={isSaveButtonDisabled}>Dodaj<span className=\"sr-only\"> miejsce realizacji.{isSaveButtonDisabled && 'Guzik nieaktywny, musisz wybrać miejsce realizacji, aby je dodać.'}</span></ButtonStyled>\n </GridCustom>\n </FieldWithLabel>\n )\n }\n\n renderAdresForm() {\n const adresErrors = this.state.adresErrors;\n const isSelectInvalid = adresErrors.miejscowosc && adresErrors.miejscowosc.length > 0;\n return (\n <FormMiejscowosc\n error={isSelectInvalid ? adresErrors.miejscowosc : ''}\n invalid={isSelectInvalid}\n changeMiejscowosc={this.handleChangeMiejscowosc} />\n )\n }\n\n renderZagranicaForm() {\n const {\n adresErrors,\n kraj,\n miejscowosc,\n } = this.state;\n const isSelectInvalid = adresErrors.kraj && adresErrors.kraj.length > 0;\n return (\n <>\n <FormKraj\n error={isSelectInvalid ? adresErrors.kraj : ''}\n invalid={isSelectInvalid}\n kraj={kraj}\n changeKraj={(selectedOption) => this.handleChangeZagranicaAttribute(selectedOption.value, 'kraj')} />\n\n <FieldWithLabel label=\"Miejscowość\" tag=\"label\" labelFor=\"miejscowosc_id\">\n <TextFieldCustom\n aria-describedby={adresErrors.miejscowosc && adresErrors.miejscowosc.length > 0 ? 'miejscowosc_error' : null}\n clearFieldContext=\"miejscowość\"\n value={miejscowosc || ''}\n onChange={(event) => this.handleChangeZagranicaAttribute(event.target.value, 'miejscowosc')}\n onClear={() => this.handleChangeZagranicaAttribute('', 'miejscowosc')}\n aria-required=\"true\"\n id=\"miejscowosc_id\" />\n {adresErrors.miejscowosc && adresErrors.miejscowosc.length > 0 && <Text error id=\"miejscowosc_error\">{adresErrors.miejscowosc}</Text>}\n </FieldWithLabel>\n </>\n )\n }\n}\n\nFormMiejsceRealizacji.contextType = AdvertisementContext;\n\nexport { FormMiejsceRealizacji };\n","import React, { useContext } from 'react';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { ButtonStyled, GridCustom, FieldWithLabel, Text } from '../../common';\n\n\nconst MiejsceRealizacji = (props) => {\n const ogloszeniaContext = useContext(AdvertisementContext)\n\n const {\n gmina,\n kraj,\n miejscowosc,\n powiat,\n temporaryId,\n typ,\n wojewodztwo,\n } = props.miejsceRealizacji;\n\n let address = null;\n if (typ === ogloszeniaContext.adresId) {\n address = (\n <GridCustom fullwidth>\n <FieldWithLabel label=\"Kraj\">\n <Text>{kraj}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Województwo\">\n <Text>{wojewodztwo}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Powiat\">\n <Text>{powiat || '-'}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Gmina\">\n <Text>{gmina || '-'}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Miejscowość\">\n <Text>{miejscowosc || '-'}</Text>\n </FieldWithLabel>\n </GridCustom>\n );\n } else if (typ === ogloszeniaContext.zagranicaId) {\n address = (\n <GridCustom fullwidth>\n <FieldWithLabel label=\"Kraj\">\n <Text>{kraj || '-'}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Miejscowość\">\n <Text>{miejscowosc || '-'}</Text>\n </FieldWithLabel>\n </GridCustom>\n );\n }\n\n return (\n <li className=\"separate-content\">\n <GridCustom centerVertical fullwidth>\n <Text>{ogloszeniaContext.typMiejscaRealizacji[typ]}</Text>\n <ButtonStyled onClick={() => props.removeMiejsceRealizacji(temporaryId)} remove className=\"btn--delete\">\n UsuÅ„<span className=\"sr-only\"> miejsce realizacji</span>\n </ButtonStyled>\n </GridCustom>\n {address}\n </li>\n )\n};\n\n\nexport { MiejsceRealizacji };\n","import React, { Component } from 'react';\n\nimport { getLastTemporaryIdFromList } from '../../../helpers';\nimport { ButtonStyled, GridCustom, Text } from '../../common';\nimport { FormMiejsceRealizacji } from './FormMiejsceRealizacji';\nimport { MiejsceRealizacji } from './MiejsceRealizacji';\n\n\nclass MiejscaRealizacji extends Component{\n\n constructor(props) {\n super(props);\n this.state = {\n newMiejsceRealizacjiOn: false,\n };\n\n this.handleSaveMiejsceRealizacji = this.handleSaveMiejsceRealizacji.bind(this);\n }\n\n render() {\n const miejscaRealizacji = this.props.miejscaRealizacji;\n return (\n <>\n <Text info className=\"mr-counter\">Liczba miejsc realizacji: {miejscaRealizacji.length}</Text>\n <ul>\n {miejscaRealizacji.map((mr) =>\n <MiejsceRealizacji\n key={mr.temporaryId}\n miejsceRealizacji={mr}\n removeMiejsceRealizacji={this.props.removeMiejsceRealizacji} />\n )}\n </ul>\n {this.renderNewMiejsceRealizacjiForm()}\n </>\n )\n }\n\n renderNewMiejsceRealizacjiForm() {\n if (this.state.newMiejsceRealizacjiOn) {\n // temporaryId is computed based on temporaryIds of all of miejscaRealizacji\n // in ogloszenie and all not saved yet miejscaRealizacji in the przedmiotZamowienia\n const temporaryId = Math.max(this.props.lastTemporaryId, getLastTemporaryIdFromList(this.props.miejscaRealizacji)) + 1;\n return <FormMiejsceRealizacji\n temporaryId={temporaryId}\n cancelNewMiejsceRealizacji={() => this.setState({newMiejsceRealizacjiOn: false})}\n saveMiejsceRealizacji={this.handleSaveMiejsceRealizacji}\n computeProgress={this.props.computeProgress} />\n } else {\n if (this.props.miejscaRealizacji.length === 10) {\n return null\n }\n return (\n <GridCustom flexEnd>\n <ButtonStyled add id=\"dodaj_miejsceRealizacji_button_id\" onClick={() => this.setState({newMiejsceRealizacjiOn: true})}>\n Dodaj miejsce realizacji<span className=\"sr-only\"> {this.props.errorsKodyMiejscaRealizacji}</span>\n </ButtonStyled>\n </GridCustom>\n )\n }\n }\n\n handleSaveMiejsceRealizacji(data) {\n this.props.saveMiejsceRealizacji(data).then(\n () => this.setState({newMiejsceRealizacjiOn: false}));\n }\n}\n\n\nexport { MiejscaRealizacji };\n","import React, { Component } from 'react';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { ButtonStyled, GridCustom, FieldWithLabel, Select, Text,\n TextFieldCustom } from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { KodyCPV } from './KodyCPV';\nimport { MiejscaRealizacji } from './MiejscaRealizacji';\n\n\nconst EMPTY_VALUE = {\n value: 0,\n label: 'Wybierz',\n}\n\n\nclass FormPrzedmiotZamowienia extends Component {\n\n constructor(props) {\n super(props);\n const pz = props.przedmiotZamowienia || {};\n this.state = {\n temporaryId: pz.temporaryId,\n id: pz.id || null,\n kategoria: pz.kategoria || null,\n podkategoria: pz.podkategoria || null,\n okresGwarancji: pz.okresGwarancji || '',\n opis: pz.opis || '',\n kodyCPV: pz.kodyCPV || [],\n miejscaRealizacji: pz.miejscaRealizacji || [],\n errors: {},\n };\n\n }\n\n // basic functions\n\n componentDidMount() {\n this.setState(\n {errors: this.context.formErrors.przedmiotyZamowienia[this.props.przedmiotZamowienia.temporaryId] || {}},\n () => window.formOgloszenie.computeProgress()\n );\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (window.formOgloszenie) {\n window.formOgloszenie.computeProgress();\n }\n }\n\n // handlers\n\n handleAddKodCPV = (kod) => {\n this.setState(\n prevState => ({\n kodyCPV: [...prevState.kodyCPV, kod]\n }),\n );\n }\n\n handleRemoveKodCPV = (id_) => {\n this.setState(prevState => ({\n kodyCPV: prevState.kodyCPV.filter(code => parseInt(code.id) !== parseInt(id_)),\n }));\n }\n\n handleRemoveMiejsceRealizacji = (temporaryId) => {\n this.setState(prevState => ({\n miejscaRealizacji: prevState.miejscaRealizacji.filter(mr => mr.temporaryId !== temporaryId),\n }));\n }\n\n handleSaveMiejsceRealizacji = (data, isNew) => {\n return new Promise((resolve, reject) => {\n this.setState(prevState => ({\n miejscaRealizacji: [...prevState.miejscaRealizacji, data]\n }), resolve());\n })\n }\n\n handleSave = () => {\n const data = this.getData();\n this.context.clearPrzedmiotZamowieniaErrors(\n this.props.przedmiotZamowienia.temporaryId,\n () => this.props.onSave(data)\n );\n }\n\n // helpers\n\n getData() {\n let data = Object.assign({}, this.state);\n delete data['errors'];\n return data\n }\n\n // rendering\n\n render() {\n const {\n errors,\n kategoria,\n kodyCPV,\n miejscaRealizacji,\n okresGwarancji,\n opis,\n podkategoria,\n } = this.state;\n const{\n przedmiotZamowieniaPodkategoriaDict,\n przedmiotZamowieniaKategoria,\n przedmiotZamowieniaKategoriaDict,\n } = this.context;\n\n const selectClassName = 'select-custom';\n const selectInvalidClassName = 'select-custom select-custom--invalid';\n const isAlreadyPublished = this.props.isAlreadyPublished;\n const kategoriaInvalid = (errors.kategoria || '').length > 0\n\n return (\n <>\n <GridCustom fullwidth flexBottom flexM>\n <FieldWithLabel\n label=\"Kategoria przedmiotu zamówienia\"\n tag=\"label\"\n selectRef={React.createRef()}\n className=\"select-custom--long\">\n <Select\n aria-label={`Kategoria przedmiotu zamówienia ${errors.kategoria || ''}`}\n className={((errors.kategoria || '').length > 0) ? selectInvalidClassName : selectClassName}\n indicatorId=\"pz_kategoria_id\"\n isDisabled={isAlreadyPublished}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n options={[EMPTY_VALUE, ].concat(...przedmiotZamowieniaKategoria.map(t => ({value: t.id, label: t.nazwa})))}\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n styles={customSelectStyles}\n value={{value: kategoria || EMPTY_VALUE.value, label: przedmiotZamowieniaKategoriaDict[kategoria] || EMPTY_VALUE.label}}\n onChange={(selectedOption) => {\n this.setState({kategoria: parseInt(selectedOption.value) || null, podkategoria: null});\n }}\n />\n {kategoriaInvalid && <Text error>{errors.kategoria}</Text>}\n </FieldWithLabel>\n <FieldWithLabel\n label=\"Podkategoria\"\n aria-label={kategoria !== null ? null : `Podkategoria, pole nieaktywne. Aby wybrać podkategoriÄ™, musisz wybrać kategoriÄ™ przedmiotu zamówienia. ${errors.podkategoria || ''}`}\n selectRef={React.createRef()}\n tag=\"label\"\n tabIndex={kategoria !== null ? null : '0'}\n >\n <Select\n className={((errors.podkategoria || '').length > 0) ? selectInvalidClassName : selectClassName}\n indicatorId=\"pz_podkategoria_id\"\n isDisabled={isAlreadyPublished || kategoria === null}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n options={kategoria === null ? [EMPTY_VALUE, ] : [EMPTY_VALUE, ].concat(\n ...przedmiotZamowieniaKategoria.filter(k => parseInt(k.id) === parseInt(kategoria))[0].podkategorie.map(p => ({value: p.id, label: p.nazwa})))}\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n styles={customSelectStyles}\n value={{value: podkategoria || EMPTY_VALUE.value, label: przedmiotZamowieniaPodkategoriaDict[podkategoria] || EMPTY_VALUE.label}}\n onChange={(selectedOption) => this.setState({podkategoria: parseInt(selectedOption.value) || null})}\n />\n {(errors.podkategoria || '').length > 0 && <Text error>{errors.podkategoria}</Text>}\n </FieldWithLabel>\n <FieldWithLabel label=\"Okres gwarancji\" tag=\"label\" labelFor=\"okresGwarancji_id\">\n <TextFieldCustom\n aria-valuemax={200}\n clearFieldContext=\"okres gwarancji\"\n fullwidth\n characterCount\n maxLength={200}\n value={okresGwarancji}\n onChange={(event) => this.setState({okresGwarancji: event.target.value})}\n onClear={(event) => this.setState({okresGwarancji: ''})}\n id=\"okresGwarancji_id\"\n aria-label={`Okres gwarancji, maksymalna liczba znaków: 200. Wpisano ${okresGwarancji.length} znaków.`} />\n </FieldWithLabel>\n </GridCustom>\n\n <FieldWithLabel label=\"Opis\" tag=\"label\" labelFor=\"pz_opis_id\">\n <TextFieldCustom\n aria-describedby={(errors.opis || '').length > 0 ? 'pz_opis_error' : null}\n textarea\n fullwidth\n maxLength={10000}\n aria-valuemax={10000}\n clearFieldContext=\"opis\"\n characterCount\n invalid={(errors.opis || '').length > 0}\n value={opis}\n onChange={(event) => this.setState({opis: event.target.value})}\n onClear={(ev) => this.setState({opis: ''})}\n id=\"pz_opis_id\"\n aria-label={`Opis, maksymalna liczba znaków: 10000. Wpisano ${opis.length} znaków.`} />\n {(errors.opis || '').length > 0 && <Text error id=\"pz_opis_error\">{errors.opis}</Text>}\n </FieldWithLabel>\n <FieldWithLabel label=\"Kody CPV\">\n {(errors.kodyCPV || '').length > 0 && <Text error>{errors.kodyCPV}</Text>}\n <KodyCPV\n errorsKodyCPV={errors.kodyCPV}\n kodyCPV={kodyCPV}\n addKodCPV={this.handleAddKodCPV}\n removeKodCPV={this.handleRemoveKodCPV} />\n </FieldWithLabel>\n <FieldWithLabel label=\"Miejsce realizacji\">\n {(errors.miejscaRealizacji || '').length > 0 && <Text error><span className=\"sr-only\">Miejsce realizacji - </span>{errors.miejscaRealizacji}</Text>}\n <MiejscaRealizacji\n errorsKodyMiejscaRealizacji={errors.miejscaRealizacji}\n miejscaRealizacji={miejscaRealizacji}\n lastTemporaryId={this.props.miejsceRealizacjiLastTemporaryId}\n removeMiejsceRealizacji={this.handleRemoveMiejsceRealizacji}\n saveMiejsceRealizacji={this.handleSaveMiejsceRealizacji} />\n </FieldWithLabel>\n <GridCustom flexEnd>\n <ButtonStyled cancel onClick={this.props.onCloseForm}>Anuluj</ButtonStyled>\n <ButtonStyled\n className=\"btn btn--save-main\"\n id=\"zapisz_przedmiotZamowienia_button_id\"\n save\n onClick={this.handleSave}>\n Zapisz przedmiot zamówienia\n </ButtonStyled>\n </GridCustom>\n </>\n )\n }\n}\n\nFormPrzedmiotZamowienia.contextType = AdvertisementContext;\n\n\nexport { FormPrzedmiotZamowienia };\n","import React, { Component } from 'react';\nimport '@material/dialog/dist/mdc.dialog.css';\n\nimport { AdvertisementConsumer } from '../../../context/advertisementContext';\nimport { isNotEmpty, listOrEmpty } from '../../../helpers';\nimport { Box, ButtonStyled, DialogCustom, Ellipsis, GridCustom, FieldWithLabel, Text } from '../../common';\n\n\nclass PrzedmiotZamowienia extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isRemovingOn: false,\n };\n }\n\n // rendering\n\n render() {\n const pz = this.props.przedmiotZamowienia;\n const formLocked = this.props.formLocked;\n\n let kodyCPVPrzedmiotuZamowienia;\n if (isNotEmpty(pz.kodyCPV)) {\n kodyCPVPrzedmiotuZamowienia = listOrEmpty(pz.kodyCPV).map(kod_ => {\n return <Text key={kod_.id}>{kod_.kod} {kod_.nazwa}</Text>\n });\n } else {\n kodyCPVPrzedmiotuZamowienia = '-';\n }\n return (\n <AdvertisementConsumer>\n {({\n formErrors,\n przedmiotZamowieniaPodkategoriaDict,\n przedmiotZamowieniaKategoriaDict\n }) => (\n <Box\n fullwidth\n invalid={Object.keys(formErrors.przedmiotyZamowienia[pz.temporaryId] || {}).length > 0}\n titleWithSubtitle={przedmiotZamowieniaKategoriaDict[pz.kategoria] || '-'}\n tag=\"li\"\n subtitle={przedmiotZamowieniaPodkategoriaDict[pz.podkategoria] || '-'}\n ariaLabelMoreOptions={`RozwiÅ„ opcje przedmiotu zamówienia: edytuj ${!this.props.isAlreadyPublished ? ', usuÅ„' : ''}`}\n boxWithMenu={(\n <>\n <h3 className=\"sr-only\">Menu wiÄ™cej opcji przedmiotu ogÅ‚oszenia</h3>\n <ul>\n <li>\n <ButtonStyled\n className=\"box__menu-item\"\n disabled={formLocked}\n lite\n onClick={() => this.props.onEditClick(pz.temporaryId)}>\n Edytuj\n </ButtonStyled>\n </li>\n {!this.props.isAlreadyPublished && (\n <li>\n <ButtonStyled\n className=\"box__menu-item\"\n disabled={formLocked}\n remove\n onClick={() => this.setState({isRemovingOn: true})}>\n UsuÅ„\n </ButtonStyled>\n </li>\n )}\n </ul>\n </>\n )} >\n <FieldWithLabel label=\"Opis\">\n <Ellipsis>\n <Text className=\"long-text\">{pz.opis || '-'}</Text>\n </Ellipsis>\n </FieldWithLabel>\n <FieldWithLabel label=\"Kod CPV\">\n {kodyCPVPrzedmiotuZamowienia}\n </FieldWithLabel>\n {this.renderRemovingPart()}\n </Box>\n )}\n </AdvertisementConsumer>\n )\n }\n\n handleCloseRemovingDialog = () => {\n this.setState({isRemovingOn: false});\n }\n\n renderRemovingPart() {\n if (this.state.isRemovingOn) {\n return (\n <DialogCustom \n className=\"dialog\"\n dialogTitle=\"Czy na pewno chcesz usunąć ten przedmiot zamówienia?\"\n onClose={this.handleCloseRemovingDialog}\n >\n <>\n <Text>JeÅ›li tak, zostanÄ… usuniÄ™te również nastÄ™pujÄ…ce obiekty powiÄ…zane, o ile zostaÅ‚y zdefiniowane:</Text>\n <Text>- Miejsca realizacji</Text>\n <Text>- Etapy</Text>\n <Text>- Wymagania</Text>\n <GridCustom centerVertical flexEnd>\n <ButtonStyled onClick={this.handleCloseRemovingDialog} cancel>Anuluj</ButtonStyled>\n <ButtonStyled onClick={() => this.props.onRemoveClick(this.props.przedmiotZamowienia.temporaryId)} remove>UsuÅ„</ButtonStyled>\n </GridCustom>\n </>\n </DialogCustom>\n )\n }\n }\n}\n\n\nexport { PrzedmiotZamowienia };\n","import React from 'react';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { getLastTemporaryId, getSortedOrderItemsFromOrder,\n isNotEmpty } from '../../../helpers';\nimport {\n ButtonStyled,\n DialogCustom,\n GridCustom,\n Steps,\n Text,\n} from '../../common';\nimport { PomocEkranowa } from '../zarzadzanieTrescia';\nimport { AlreadyPublishedInfo } from './AlreadyPublishedInfo';\nimport { BaseStepComponent } from './BaseStepComponent';\nimport { FormPrzedmiotZamowienia } from './FormPrzedmiotZamowienia';\nimport { PrzedmiotZamowienia } from './PrzedmiotZamowienia';\n\n\nclass StepPrzedmiotZamowienia extends BaseStepComponent {\n stepName = 'przedmiot';\n\n constructor(props) {\n super(props);\n this.state = {\n formPrzedmiotZamowieniaOn: false,\n addedPrzedmiotZamowieniaId: null,\n editedPrzedmiotZamowieniaId: null,\n };\n }\n\n // handlers\n\n handleCloseForm = () => {\n this.setState(\n {\n formPrzedmiotZamowieniaOn: false,\n addedPrzedmiotZamowieniaId: null,\n editedPrzedmiotZamowieniaId: null,\n },\n () => {\n if (window.formOgloszenie) { window.formOgloszenie.computeProgress()}\n }\n );\n }\n\n handleSave = (data) => {\n const isNew = this.state.editedPrzedmiotZamowieniaId === null;\n this.context.savePrzedmiotZamowienia(\n data,\n isNew,\n () => this.setState(\n {\n formPrzedmiotZamowieniaOn: false,\n addedPrzedmiotZamowieniaId: isNew ? data.temporaryId : null,\n editedPrzedmiotZamowieniaId: null,\n }\n )\n )\n }\n\n handleEditClick = (temporaryId) => {\n this.setState({\n formPrzedmiotZamowieniaOn: true,\n editedPrzedmiotZamowieniaId: temporaryId,\n });\n }\n\n handleRemovePrzedmiotZamowienia = (temporaryId) => {\n this.context.removePrzedmiotZamowienia(temporaryId);\n }\n\n // rendering\n\n render() {\n const { isAlreadyPublished, isPreview } = this.props;\n const przedmiotZamowieniaError = this.context.formErrors.ogloszenie.przedmiotyZamowienia;\n const o = this.context.ogloszenie;\n const przedmiotyZamowienia = isPreview ? [] : getSortedOrderItemsFromOrder(o.zamowienia);\n\n const formLocked = this.props.isPreview || this.context.validationOn || this.context.savingOn;\n return (\n <>\n <PomocEkranowa ekran=\"form_announcement_item\" content={this.props.pomocEkranowaContent} />\n {isAlreadyPublished && <AlreadyPublishedInfo />}\n {!isAlreadyPublished && (\n <GridCustom flexEnd>\n <ButtonStyled\n add\n className=\"btn btn--main\"\n disabled={formLocked}\n id=\"dodaj_przedmiotZamowienia_button_id\"\n onClick={(e) => {\n this.setState({formPrzedmiotZamowieniaOn: true});\n e.currentTarget.blur();\n }} >\n Dodaj nowy przedmiot zamówienia\n </ButtonStyled>\n </GridCustom>\n )}\n <Text tag=\"h2\" sectionHeader>Lista przedmiotów zamówienia</Text>\n <Text info>Liczba wyników: {przedmiotyZamowienia.length}</Text>\n <ul>\n {przedmiotyZamowienia.map(pz => {\n return <PrzedmiotZamowienia\n formLocked={formLocked}\n isAlreadyPublished={isAlreadyPublished}\n key={pz.temporaryId}\n przedmiotZamowienia={pz}\n onEditClick={this.handleEditClick}\n onRemoveClick={this.handleRemovePrzedmiotZamowienia} />\n })}\n </ul>\n {!isNotEmpty(przedmiotyZamowienia) && (przedmiotZamowieniaError || '').length > 0 && <Text error>{przedmiotZamowieniaError}</Text>}\n <Steps\n disabled={formLocked}\n elementToFocusRef={this.props.elementToFocusRef}\n hasNext\n nextLabel=\"Terminy\"\n onNextClick={() => this.props.onChangeCurrentMenuLink('terminy')}\n />\n {this.state.addedPrzedmiotZamowieniaId !== null && o.czyDopuszczalnaOfertaCzesciowa && o.zamowienia.length > 1 && (\n <DialogCustom \n className=\"dialog\"\n dialogTitleError='Przedmiot zamówienia zostaÅ‚ dodany do pierwszej części zamówienia. Można to zmienić w sekcji \"Części i kryteria\".'\n style={{ zIndex: 100 }}\n onClose={() => this.setState({ addedPrzedmiotZamowieniaId: null })}\n >\n <GridCustom centerVertical flexEnd>\n <ButtonStyled onClick={() => this.setState({ addedPrzedmiotZamowieniaId: null })} primary>OK</ButtonStyled>\n </GridCustom>\n </DialogCustom>\n )}\n {this.state.formPrzedmiotZamowieniaOn && this.renderPrzedmiotZamowieniaForm(przedmiotyZamowienia)}\n </>\n )\n }\n\n renderPrzedmiotZamowieniaForm(przedmiotyZamowienia) {\n let przedmiotZamowieniaData = {};\n const { editedPrzedmiotZamowieniaId } = this.state;\n const pzLength = przedmiotyZamowienia.length;\n const zamowienia = this.context.ogloszenie.zamowienia;\n\n if (editedPrzedmiotZamowieniaId === null) {\n przedmiotZamowieniaData['temporaryId'] = pzLength ? Math.max(...przedmiotyZamowienia.map(pz => pz.temporaryId)) + 1 : 1;\n przedmiotZamowieniaData['zamowienieTemporaryId'] = zamowienia.length ? Math.min(...zamowienia.map(z => z.temporaryId)) : 1;\n } else {\n for (let pz of przedmiotyZamowienia) {\n if (pz.temporaryId === editedPrzedmiotZamowieniaId) {\n przedmiotZamowieniaData = pz;\n break;\n }\n }\n }\n const isAlreadyPublished = this.props.isAlreadyPublished;\n return (\n <DialogCustom \n className=\"dialog-long-content\"\n dialogTitle={`${editedPrzedmiotZamowieniaId === null ? 'Dodaj' : 'Edytuj'} przedmiot zamówienia`}\n style={{ zIndex: 100 }}\n onClose={this.handleCloseForm}\n >\n <>\n {isAlreadyPublished && <AlreadyPublishedInfo />}\n <FormPrzedmiotZamowienia\n isAlreadyPublished={isAlreadyPublished}\n miejsceRealizacjiLastTemporaryId={getLastTemporaryId(\n przedmiotyZamowienia, 'miejsceRealizacji')}\n przedmiotZamowienia={przedmiotZamowieniaData}\n onCloseForm={this.handleCloseForm}\n onSave={this.handleSave}\n />\n </>\n </DialogCustom>\n )\n }\n}\n\n\nStepPrzedmiotZamowienia.contextType = AdvertisementContext;\n\n\nexport { StepPrzedmiotZamowienia }\n","import React, { Component } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\nimport '@material/checkbox/dist/mdc.checkbox.css';\nimport '@material/form-field/dist/mdc.form-field.css';\n\nimport { AdvertisementConsumer } from '../../../context/advertisementContext';\nimport { dateToString } from '../../../helpers';\nimport {\n ButtonStyled,\n DateCalendar,\n DialogCustom,\n GridCustom,\n FieldWithLabel,\n Text,\n TextFieldCustom\n} from '../../common';\n\n\nclass FormHarmonogram extends Component{\n\n constructor(props) {\n super(props);\n\n if (props.isNew) {\n this.state = Object.assign({}, props.harmonogram, {\n poczatekRealizacji: '',\n koniecRealizacji: '',\n opis: '',\n czyWystepujePlatnoscCzesciowa: false,\n isPickerOpen: false,\n });\n } else {\n this.state = Object.assign(\n {isPickerOpen: false}, props.harmonogram);\n }\n }\n\n // basic functions\n\n componentDidMount() {\n window.formOgloszenie.computeProgress();\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (window.formOgloszenie) {\n window.formOgloszenie.computeProgress();\n }\n }\n\n // helpers\n\n handleEscPress = (event) => {\n if (event.keyCode === 27) {\n if (this.state.isPickerOpen) {\n event.nativeEvent.stopImmediatePropagation();\n } else {\n this.props.onCloseForm();\n }\n }\n}\n\n // handlers\n\n handleSave = () => {\n const {isNew, harmonogram} = this.props;\n this.props.onSave({\n id: isNew ? null : harmonogram.id,\n temporaryId: harmonogram.temporaryId,\n przedmiotZamowieniaTemporaryId: this.props.przedmiotZamowieniaTemporaryId,\n poczatekRealizacji: this.state.poczatekRealizacji,\n koniecRealizacji: this.state.koniecRealizacji,\n opis: this.state.opis.trim(),\n czyWystepujePlatnoscCzesciowa: this.state.czyWystepujePlatnoscCzesciowa,\n }, isNew);\n }\n\n handleCloseDialog = () => {\n this.props.onCloseForm();\n }\n\n handleCalendarOpen = () => {\n this.setState({isPickerOpen: true})\n }\n\n handleCalendarClose = () => {\n this.setState({isPickerOpen: false})\n }\n\n // rendering\n\n render() {\n const poczatekInputRef = React.createRef();\n const koniecInputRef = React.createRef();\n return (\n <AdvertisementConsumer>\n {({formErrors, clearAttributeError}) => {\n const temporaryId = this.props.harmonogram.temporaryId;\n const errors = formErrors.harmonogramy[temporaryId] || {};\n const koniecRealizacjiErrorVisible = (errors.koniecRealizacji || '').length > 0;\n return (\n <DialogCustom \n className=\"dialog\"\n style={{ zIndex: 100 }}\n onClose={this.handleCloseDialog}\n onKeyDown={this.handleEscPress}\n >\n <>\n <Text className=\"dialog__title-custom\">Dodaj etap</Text>\n <FieldWithLabel label=\"Opis\" tag=\"label\" labelFor=\"harmonogram_opis_id\">\n <TextFieldCustom\n aria-label={`Opis, maksymalna liczba znaków: 4000. Wpisano ${this.state.opis.length} znaków.`}\n aria-valuemax={4000}\n clearFieldContext=\"opis\"\n characterCount\n fullwidth\n id=\"harmonogram_opis_id\"\n maxLength={4000}\n onChange={(event) => this.setState({opis: event.target.value})}\n onClear={(ev) => this.setState({opis: ''})}\n textarea\n value={this.state.opis}\n />\n </FieldWithLabel>\n <FieldWithLabel label=\"PoczÄ…tek\" tag=\"label\" inputRef={poczatekInputRef}>\n <DateCalendar\n dateName=\"PoczÄ…tek\"\n fullwidth\n parentRef={poczatekInputRef}\n value={Date.parse(this.state.poczatekRealizacji)}\n onCalendarOpen={this.handleCalendarOpen}\n onCalendarClose={this.handleCalendarClose}\n onChange={(date) => this.setState({poczatekRealizacji: dateToString(date)})} />\n </FieldWithLabel>\n <FieldWithLabel label=\"Koniec\" tag=\"label\" inputRef={koniecInputRef}>\n <DateCalendar\n ariaDescribedby={koniecRealizacjiErrorVisible ? 'koniecRealizacji_error' : null}\n dateName=\"Koniec\"\n fullwidth\n invalid={koniecRealizacjiErrorVisible}\n parentRef={koniecInputRef}\n value={Date.parse(this.state.koniecRealizacji)}\n onCalendarOpen={this.handleCalendarOpen}\n onCalendarClose={this.handleCalendarClose}\n onChange={(date) => this.setState(\n {koniecRealizacji: dateToString(date)},\n () => {\n if (koniecRealizacjiErrorVisible) {\n clearAttributeError('harmonogramy', temporaryId, 'koniecRealizacji') // it's possible to change value by clicking clear button\n }\n }\n )}\n onFocus={(ev) => {clearAttributeError('harmonogramy', temporaryId, 'koniecRealizacji')}} />\n {koniecRealizacjiErrorVisible && <Text error id=\"koniecRealizacji_error\">{errors.koniecRealizacji}</Text>}\n </FieldWithLabel>\n <Checkbox\n label=\"PÅ‚atność częściowa\"\n checked={this.state.czyWystepujePlatnoscCzesciowa}\n onChange={(event) => this.setState({czyWystepujePlatnoscCzesciowa: event.target.checked})} />\n <GridCustom flexEnd>\n <ButtonStyled onClick={this.handleCloseDialog} cancel>Anuluj</ButtonStyled>\n <ButtonStyled id=\"potwierdz_zapisz_harmonogram_button_id\" save onClick={this.handleSave}>{this.props.isNew ? 'Dodaj' : 'Zapisz zmiany'}</ButtonStyled>\n </GridCustom>\n {(errors.koniecRealizacji || '').length > 0 && <span role=\"alert\" className=\"sr-only\">Formularz zawiera bÅ‚Ä™dy.</span>}\n </>\n </DialogCustom>\n )\n }}\n </AdvertisementConsumer>\n )\n }\n}\n\n\nexport { FormHarmonogram };\n","import React, { Component } from 'react';\nimport { Icon } from '@rmwc/icon';\n\nimport { AdvertisementConsumer } from '../../../context/advertisementContext';\nimport { Box, ButtonStyled, Ellipsis, GridCustom, FieldWithLabel, Text } from '../../common';\nimport { FormHarmonogram } from './FormHarmonogram';\n\n\nclass Harmonogramy extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n newHarmonogramOn: false,\n editingHarmonogramId: null,\n };\n }\n\n // handlers\n\n handleCloseForm = () => {\n this.setState(\n {\n newHarmonogramOn: false,\n editingHarmonogramId: null,\n },\n () => {\n if (window.formOgloszenie) { window.formOgloszenie.computeProgress()}\n }\n );\n }\n\n handleSave = (data, isNew) => {\n this.props.onSaveHarmonogram(data, isNew, this.handleCloseForm);\n }\n\n // rendering\n\n render() {\n const {\n harmonogramy,\n okresGwarancji,\n opis,\n podkategoria,\n typ,\n } = this.props;\n return (\n <AdvertisementConsumer>\n {({formErrors, przedmiotZamowieniaPodkategoriaDict, przedmiotZamowieniaKategoriaDict}) => (\n <Box\n tag=\"li\"\n titleWithSubtitle={przedmiotZamowieniaKategoriaDict[typ] || '-'}\n subtitle={przedmiotZamowieniaPodkategoriaDict[podkategoria] || '-'}\n fullwidth >\n <FieldWithLabel label=\"Opis\">\n <Ellipsis>\n <Text className=\"long-text\">{opis}</Text>\n </Ellipsis>\n </FieldWithLabel>\n {okresGwarancji.length > 0 && (\n <FieldWithLabel label=\"Okres gwarancji\">\n <Text>{okresGwarancji}</Text>\n </FieldWithLabel>\n )}\n <Text tag=\"h3\" sectionHeader>Etapy</Text>\n <Text info>Liczba wyników: {harmonogramy.length}</Text>\n <GridCustom tag=\"ul\">\n {harmonogramy.map((h, i) => {\n return this.renderHarmonogram(h, i + 1, formErrors);\n })}\n </GridCustom>\n {this.renderHarmonogramForm()}\n {this.renderNewHarmonogramButton()}\n </Box>\n )}\n </AdvertisementConsumer>\n )\n }\n\n renderHarmonogram(harmonogram, index, formErrors) {\n const formLocked = this.props.formLocked;\n const etapErrors = Object.keys(formErrors.harmonogramy[harmonogram.temporaryId] || {}).length > 0\n return (\n <Box key={harmonogram.temporaryId} tag=\"li\">\n <section>\n {etapErrors && (\n <Text error role=\"alert\">\n <Icon aria-hidden=\"true\" icon={{ icon: 'warning', size: 'xsmall' }} style={{marginRight: 3}} /> Niepoprawne informacje o etapie\n </Text>\n )}\n <Text tag=\"h4\" accentHeader>Etap {index}</Text>\n <FieldWithLabel label=\"Opis\">\n <Ellipsis>\n <Text className=\"long-text\">{harmonogram.opis || '-'}</Text>\n </Ellipsis>\n </FieldWithLabel>\n <GridCustom fullwidth>\n <FieldWithLabel label=\"PoczÄ…tek\">\n <Text>{harmonogram.poczatekRealizacji || '-'}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Koniec\">\n <Text>{harmonogram.koniecRealizacji || '-'}</Text>\n </FieldWithLabel>\n </GridCustom>\n <FieldWithLabel label=\"PÅ‚atność częściowa\">\n <Text>{harmonogram.czyWystepujePlatnoscCzesciowa ? 'TAK' : 'NIE'}</Text>\n </FieldWithLabel>\n </section>\n <GridCustom flexEnd>\n <ButtonStyled\n disabled={formLocked}\n remove\n onClick={() => this.props.onRemoveHarmonogram(\n this.props.przedmiotZamowieniaTemporaryId, harmonogram.temporaryId)\n }>\n UsuÅ„<span className=\"sr-only\"> etap {index}</span>\n </ButtonStyled>\n <ButtonStyled\n disabled={formLocked}\n lite\n onClick={() => this.setState(\n {editingHarmonogramId: harmonogram.temporaryId})\n }>\n Edytuj<span className=\"sr-only\"> etap {index} {etapErrors ? 'Uwaga! Etap zawiera bÅ‚Ä™dy!' : ''}</span>\n </ButtonStyled>\n </GridCustom>\n </Box>\n )\n }\n\n renderHarmonogramForm() {\n const {\n editingHarmonogramId,\n newHarmonogramOn\n } = this.state;\n\n if (newHarmonogramOn || editingHarmonogramId !== null) {\n let h;\n if (newHarmonogramOn) {\n h = {temporaryId: this.props.lastTemporaryId + 1};\n } else {\n h = this.props.harmonogramy.filter(\n harm => harm.temporaryId === editingHarmonogramId)[0];\n }\n\n return <FormHarmonogram\n harmonogram={h}\n isNew={newHarmonogramOn}\n przedmiotZamowieniaTemporaryId={this.props.przedmiotZamowieniaTemporaryId}\n onCloseForm={this.handleCloseForm}\n onSave={this.handleSave} />\n }\n return null\n }\n\n renderNewHarmonogramButton() {\n if (this.state.newHarmonogramOn) { return null }\n return (\n <GridCustom flexEnd additionalClassName=\" box__button-container\">\n <ButtonStyled\n add\n disabled={this.props.formLocked}\n id={`pz${this.props.przedmiotZamowieniaTemporaryId}_dodaj_harmonogram_button_id`}\n onClick={() => this.setState({newHarmonogramOn: true})}>\n Dodaj etap\n </ButtonStyled>\n </GridCustom>\n )\n }\n}\n\n\nexport { Harmonogramy };\n","import React from 'react';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { dateToString, getLastTemporaryId, getSortedOrderItemsFromOrder,\n listOrEmpty } from '../../../helpers';\nimport {\n DateCalendar,\n FieldWithLabel,\n GridCustom,\n Steps,\n Text,\n} from '../../common';\nimport { PomocEkranowa } from '../zarzadzanieTrescia';\nimport { BaseStepComponent } from './BaseStepComponent';\nimport { Harmonogramy } from './Harmonogramy';\n\n\nclass StepTerminy extends BaseStepComponent {\n stepName = 'terminy';\n\n // rendering\n\n render() {\n const { isPreview } = this.props;\n const formLocked = isPreview || this.context.validationOn || this.context.savingOn;\n const o = this.context.ogloszenie;\n const przedmiotyZamowienia = isPreview ? [] : getSortedOrderItemsFromOrder(o.zamowienia);\n\n let przedmiotyZamowienia_;\n if (przedmiotyZamowienia.length) {\n przedmiotyZamowienia_ = <ul>{przedmiotyZamowienia.map(pz =>\n <Harmonogramy\n formLocked={formLocked}\n harmonogramy={listOrEmpty(pz.harmonogramy)}\n key={pz.temporaryId}\n lastTemporaryId={getLastTemporaryId(\n przedmiotyZamowienia, 'harmonogramy')}\n okresGwarancji={pz.okresGwarancji}\n opis={pz.opis}\n podkategoria={pz.podkategoria}\n przedmiotZamowieniaTemporaryId={pz.temporaryId}\n typ={pz.kategoria}\n onSaveHarmonogram={this.context.saveHarmonogram}\n onRemoveHarmonogram={this.context.removeHarmonogram} />\n )}</ul>\n } else if ((this.context.formErrors.ogloszenie.przedmiotyZamowienia_harmonogramy || '').length) {\n przedmiotyZamowienia_ = <Text error>Zdefiniuj przedmioty zamówienia, aby móc dodawać do nich terminy.</Text>;\n }\n\n const planowanyTerminPodpisaniaUmowyInputRef = React.createRef();\n return (\n <>\n <PomocEkranowa ekran=\"form_announcement_deadlines\" content={this.props.pomocEkranowaContent} />\n <GridCustom>\n <section>\n <FieldWithLabel label=\"Data opublikowania\">\n {isPreview ? '---' : o.ogloszenie.dataOpublikowania || '---'}\n </FieldWithLabel>\n <FieldWithLabel label=\"Planowany termin podpisania umowy\" tag=\"label\" inputRef={planowanyTerminPodpisaniaUmowyInputRef}>\n <DateCalendar\n dateCalendarRef={React.createRef()}\n dateFormat=\"rok myÅ›lnik miesiÄ…c\"\n dateFormatCustom=\"yyyy-MM\"\n dateName=\"Planowany termin podpisania umowy\"\n disabled={formLocked}\n parentRef={planowanyTerminPodpisaniaUmowyInputRef}\n showMonthYearPicker\n value={isPreview ? '' : Date.parse(o.planowanyTerminPodpisaniaUmowy || '')}\n onChange={date => this.context.setAttributeValue('planowanyTerminPodpisaniaUmowy', dateToString(date))} />\n </FieldWithLabel>\n </section>\n </GridCustom>\n {przedmiotyZamowienia_}\n <Steps\n disabled={formLocked}\n elementToFocusRef={this.props.elementToFocusRef}\n hasNext\n hasPrev\n nextLabel=\"Warunki\"\n prevLabel=\"Przedmiot\"\n onNextClick={() => this.props.onChangeCurrentMenuLink('warunki')}\n onPrevClick={() => this.props.onChangeCurrentMenuLink('przedmiot')}\n />\n </>\n )\n }\n}\n\n\nStepTerminy.contextType = AdvertisementContext;\n\n\nexport { StepTerminy }\n","import React, { Component } from 'react';\n\nimport { AdvertisementConsumer } from '../../../context/advertisementContext';\nimport { ButtonStyled, DialogCustom, GridCustom, FieldWithLabel, Select, Text, TextFieldCustom } from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\n\n\nconst EMPTY_VALUE = {\n value: 0,\n label: '--- Wybierz ---',\n}\n\n\nclass FormWarunekUdzialu extends Component{\n\n constructor(props) {\n super(props);\n\n let stateDict = {\n opisError: '',\n typError: '',\n isValidating: false,\n }\n if (props.isNew) {\n this.state = Object.assign(stateDict, props.warunekUdzialu, {\n typ: null,\n opis: '',\n });\n } else {\n this.state = Object.assign(stateDict, props.warunekUdzialu);\n }\n }\n\n // basic functions\n\n componentDidMount() {\n window.formOgloszenie.computeProgress();\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (window.formOgloszenie) {\n window.formOgloszenie.computeProgress();\n }\n }\n\n // handlers\n\n handleChangeTyp(value) {\n this.setState({typ: parseInt(value) || null});\n }\n\n handleSave = (clearFunct) => {\n if (!this.validate(clearFunct)) { return }\n const {isNew, warunekUdzialu} = this.props;\n\n this.props.onSave({\n id: isNew ? null : warunekUdzialu.id,\n temporaryId: warunekUdzialu.temporaryId,\n przedmiotZamowieniaTemporaryId: this.props.przedmiotZamowieniaTemporaryId,\n typ: this.state.typ,\n opis: this.state.opis.trim(),\n }, isNew);\n }\n\n handleCloseDialog = () => {\n this.props.onCloseForm();\n }\n\n // helpers\n\n mergeErrors(globalErrors) {\n // copy global errors\n let errors = Object.assign({}, globalErrors);\n\n // get state errors\n for (let name of ['typ', 'opis']) {\n const error = this.state[`${name}Error`];\n if (error.length) {\n errors[name] = error;\n }\n }\n\n return errors\n }\n\n validate(clearFunct) {\n // clean errors\n const temporaryId = this.props.warunekUdzialu.temporaryId;\n clearFunct('warunkiUdzialu', temporaryId, 'opis')\n clearFunct('warunkiUdzialu', temporaryId, 'typ')\n this.setState({isValidating: true, opisError: '', typError: ''});\n\n let isValid = true;\n if (this.state.typ === null) {\n this.setState({typError: 'To pole jest wymagane.'});\n isValid = false;\n }\n if (!this.state.opis.trim()) {\n this.setState({opisError: 'To pole jest wymagane.'});\n isValid = false;\n }\n this.setState({isValidating: false});\n return isValid\n }\n\n // rendering\n\n render() {\n const isValidating = this.state.isValidating;\n return (\n <AdvertisementConsumer>\n {({clearAttributeError, formErrors, typWarunku}) => {\n const temporaryId = this.props.warunekUdzialu.temporaryId;\n const errors = this.mergeErrors(formErrors.warunkiUdzialu[temporaryId]);\n const selectClassName = 'select-custom';\n const selectInvalidClassName = 'select-custom select-custom--invalid';\n const errorsOpisVisible = (errors.opis || '').length > 0;\n const errorsTypVisible = (errors.typ || '').length > 0;\n\n return (\n <DialogCustom \n className=\"dialog\"\n dialogTitle=\"Dodaj Warunek udziaÅ‚u\"\n onClose={this.handleCloseDialog}\n >\n <>\n <FieldWithLabel label=\"Typ wymagania\" tag=\"label\" selectRef={React.createRef()}>\n <Select\n aria-label={`Typ wymagania ${errors.typ || ''}`}\n aria-describedby={errorsTypVisible ? 'typ_error' : null}\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n className={errorsTypVisible ? selectInvalidClassName : selectClassName}\n isDisabled={isValidating}\n aria-required={true}\n options={[EMPTY_VALUE, ].concat(...Object.entries(typWarunku).filter(([id, _]) => !this.props.usedWarunkiUdzialuIds.includes(parseInt(id))).sort().map(([key, value]) => ({value: key, label: value})))}\n value={{value: this.state.typ || EMPTY_VALUE.value, label: typWarunku[this.state.typ] || EMPTY_VALUE.label}}\n onChange={(selectedOption) => this.handleChangeTyp(selectedOption.value)}\n styles={customSelectStyles}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n />\n {errorsTypVisible && <Text id=\"typ_error\" error>{errors.typ}</Text>}\n </FieldWithLabel>\n <FieldWithLabel label=\"Opis wymagania\" tag=\"label\" labelFor=\"warunekUdzialu_opis_id\">\n <TextFieldCustom\n aria-describedby={errorsOpisVisible ? 'opis_error' : null}\n clearFieldContext=\"opis wymagania\"\n disabled={isValidating}\n textarea\n fullwidth\n invalid={errorsOpisVisible}\n maxLength={6000}\n characterCount\n value={this.state.opis}\n onChange={(event) => this.setState({opis: event.target.value})}\n onClear={(ev) => this.setState({opis: ''})}\n aria-required={true}\n id=\"warunekUdzialu_opis_id\"\n aria-label={`Opis wymagania, maksymalna liczba znaków: 6000. Wpisano ${this.state.opis.length} znaków.`}\n />\n {errorsOpisVisible && <Text error id=\"opis_error\">{errors.opis}</Text>}\n </FieldWithLabel>\n <GridCustom flexEnd>\n <ButtonStyled\n cancel\n disabled={isValidating}\n onClick={this.handleCloseDialog} >Anuluj</ButtonStyled>\n <ButtonStyled\n aria-label={this.props.isNew ? 'Dodaj warunek udziaÅ‚u' : 'Zapisz zmiany w warunku udziaÅ‚u'}\n disabled={isValidating}\n save\n onClick={() => this.handleSave(clearAttributeError)} >\n {this.props.isNew ? 'Dodaj' : 'Zapisz zmiany'}\n </ButtonStyled>\n </GridCustom>\n {(errors.typ || errors.opis || '').length > 0 && <span role=\"alert\" className=\"sr-only\">Formularz zawiera bÅ‚Ä™dy.</span>}\n </>\n </DialogCustom>\n )\n }}\n </AdvertisementConsumer>\n )\n }\n}\n\n\nexport { FormWarunekUdzialu };\n","import React, { Component } from 'react';\nimport { Icon } from '@rmwc/icon';\n\nimport { AdvertisementConsumer } from '../../../context/advertisementContext';\nimport { Box, ButtonStyled, Ellipsis, FieldWithLabel, GridCustom, Text } from '../../common';\nimport { FormWarunekUdzialu } from './FormWarunekUdzialu';\n\n\nclass WarunkiUdzialu extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n newWarunekUdzialuOn: false,\n editingWarunekUdzialuTemporaryId: null,\n };\n }\n\n // handlers\n\n handleCloseForm = () => {\n this.setState(\n {\n newWarunekUdzialuOn: false,\n editingWarunekUdzialuTemporaryId: null,\n },\n () => {\n if (window.formOgloszenie) { window.formOgloszenie.computeProgress()}\n }\n );\n }\n\n handleSave = (data, isNew) => {\n this.props.onSaveWarunekUdzialu(data, isNew, this.handleCloseForm);\n }\n\n // rendering\n\n render() {\n const {\n opis,\n podkategoria,\n typ,\n warunkiUdzialu,\n } = this.props;\n return (\n <AdvertisementConsumer>\n {({\n formErrors,\n przedmiotZamowieniaPodkategoriaDict,\n przedmiotZamowieniaKategoriaDict,\n typWarunku\n }) => (\n <Box\n tag=\"li\"\n titleWithSubtitle={przedmiotZamowieniaKategoriaDict[typ] || '-'}\n subtitle={przedmiotZamowieniaPodkategoriaDict[podkategoria] || '-'}\n fullwidth >\n <FieldWithLabel label=\"Opis\">\n <Ellipsis>\n <Text className=\"long-text separate-part\">{opis}</Text>\n </Ellipsis>\n </FieldWithLabel>\n <Text tag=\"h3\" sectionHeader>Wymagania</Text>\n <Text info>Liczba wyników: {warunkiUdzialu.length}</Text>\n <GridCustom tag=\"ul\">\n {warunkiUdzialu.map((wu) => this.renderWarunekUdzialu(wu, formErrors, typWarunku))}\n </GridCustom>\n {this.renderWarunekUdzialuForm()}\n {this.renderNewWarunekUdzialuButton(typWarunku)}\n </Box>\n )}\n </AdvertisementConsumer>\n )\n }\n\n renderWarunekUdzialu(warunekUdzialu, formErrors, typWarunku) {\n const formLocked = this.props.formLocked;\n return (\n <Box key={warunekUdzialu.temporaryId} tag=\"li\">\n {Object.keys(formErrors.warunkiUdzialu[warunekUdzialu.temporaryId] || {}).length > 0 && <Text error role=\"alert\"><Icon aria-hidden=\"true\" icon={{ icon: 'warning', size: 'xsmall' }} style={{marginRight: 3}} /> BÅ‚Ä™dy!</Text>}\n <FieldWithLabel label=\"Typ wymagania\">\n <Text>{typWarunku[warunekUdzialu.typ] || '-'}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Opis wymagania\">\n <Ellipsis>\n <Text className=\"long-text\">{warunekUdzialu.opis || '-'}</Text>\n </Ellipsis>\n </FieldWithLabel>\n {!this.props.isAlreadyPublished && (\n <GridCustom flexEnd className=\"btn-container-bottom\">\n <ButtonStyled\n disabled={formLocked}\n remove\n onClick={() => this.props.onRemoveWarunekUdzialu(\n this.props.przedmiotZamowieniaTemporaryId, warunekUdzialu.temporaryId)\n }>\n UsuÅ„\n </ButtonStyled>\n <ButtonStyled\n disabled={formLocked}\n lite\n onClick={() => this.setState(\n {newWarunekUdzialuOn: null, editingWarunekUdzialuTemporaryId: warunekUdzialu.temporaryId})\n }>\n Edytuj\n </ButtonStyled>\n </GridCustom>\n )}\n </Box>\n )\n }\n\n renderWarunekUdzialuForm() {\n const {\n editingWarunekUdzialuTemporaryId,\n newWarunekUdzialuOn,\n } = this.state;\n if (newWarunekUdzialuOn || editingWarunekUdzialuTemporaryId !== null) {\n const {\n lastTemporaryId,\n przedmiotZamowieniaTemporaryId,\n warunkiUdzialu, // list of warunekUdzialu for this przedmiotZamowienia\n } = this.props;\n\n let wu, usedWarunkiUdzialuIds;\n if (newWarunekUdzialuOn) {\n wu = {temporaryId: lastTemporaryId + 1};\n usedWarunkiUdzialuIds = warunkiUdzialu.map(wu => parseInt(wu.typ));\n } else {\n wu = warunkiUdzialu.filter(\n w => w.temporaryId === editingWarunekUdzialuTemporaryId)[0];\n usedWarunkiUdzialuIds = warunkiUdzialu.map(\n wu => parseInt(wu.typ)).filter((id) => id !== parseInt(wu.typ));\n }\n\n return <FormWarunekUdzialu\n isNew={newWarunekUdzialuOn}\n przedmiotZamowieniaTemporaryId={przedmiotZamowieniaTemporaryId}\n usedWarunkiUdzialuIds={usedWarunkiUdzialuIds}\n warunekUdzialu={wu}\n onCloseForm={this.handleCloseForm}\n onSave={this.handleSave} />\n }\n return null\n }\n\n renderNewWarunekUdzialuButton(typWarunku) {\n if (this.props.isAlreadyPublished) { return null }\n\n if (!this.state.newWarunekUdzialuOn &&\n Object.keys(typWarunku).filter(id => !this.props.warunkiUdzialu.map(\n wu => parseInt(wu.typ)).includes(parseInt(id))).length) {\n return (\n <GridCustom flexEnd additionalClassName=\" box__button-container\">\n <ButtonStyled\n add\n disabled={this.props.formLocked}\n id={`pz${this.props.przedmiotZamowieniaTemporaryId}_dodaj_warunekUdzialu_button_id`}\n onClick={() => this.setState({newWarunekUdzialuOn: true, editingWarunekUdzialuTemporaryId: null})}>\n Dodaj wymaganie\n </ButtonStyled>\n </GridCustom>\n )\n }\n return null\n }\n}\n\n\nexport { WarunkiUdzialu };\n","import React from 'react';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { getLastTemporaryId, getSortedOrderItemsFromOrder,\n listOrEmpty } from '../../../helpers';\nimport { GridCustom, Steps, Text } from '../../common';\nimport { PomocEkranowa } from '../zarzadzanieTrescia';\nimport { AlreadyPublishedInfo } from './AlreadyPublishedInfo';\nimport { BaseStepComponent } from './BaseStepComponent';\nimport { WarunkiUdzialu } from './WarunkiUdzialu';\n\n\nclass StepWarunki extends BaseStepComponent {\n stepName = 'warunki';\n\n // rendering\n\n render() {\n const { isAlreadyPublished, isPreview } = this.props;\n const formLocked = isPreview || this.context.validationOn || this.context.savingOn;\n const o = this.context.ogloszenie;\n const przedmiotyZamowienia = isPreview ? [] : getSortedOrderItemsFromOrder(o.zamowienia);\n\n let przedmiotyZamowienia_;\n if (przedmiotyZamowienia.length) {\n przedmiotyZamowienia_ = przedmiotyZamowienia.map(pz =>\n <WarunkiUdzialu\n isAlreadyPublished={isAlreadyPublished}\n formLocked={formLocked}\n key={pz.temporaryId}\n lastTemporaryId={getLastTemporaryId(\n przedmiotyZamowienia, 'warunkiUdzialu')}\n opis={pz.opis}\n podkategoria={pz.podkategoria}\n przedmiotZamowieniaTemporaryId={pz.temporaryId}\n typ={pz.kategoria}\n warunkiUdzialu={listOrEmpty(pz.warunkiUdzialu)}\n onSaveWarunekUdzialu={this.context.saveWarunekUdzialu}\n onRemoveWarunekUdzialu={this.context.removeWarunekUdzialu} />\n )\n } else if ((this.context.formErrors.ogloszenie.przedmiotyZamowienia_warunkiUdzialu || '').length) {\n przedmiotyZamowienia_ = <Text error>Zdefiniuj przedmioty zamówienia, aby móc dodawać do nich warunki.</Text>\n }\n\n return (\n <>\n <PomocEkranowa ekran=\"form_announcement_conditions\" content={this.props.pomocEkranowaContent} />\n {isAlreadyPublished && <AlreadyPublishedInfo />}\n <GridCustom tag=\"ul\">{przedmiotyZamowienia_}</GridCustom>\n <Steps\n disabled={formLocked}\n elementToFocusRef={this.props.elementToFocusRef}\n hasNext\n hasPrev\n nextLabel=\"Części i kryteria\"\n prevLabel=\"Terminy\"\n onNextClick={() => this.props.onChangeCurrentMenuLink('czesciKryteria')}\n onPrevClick={() => this.props.onChangeCurrentMenuLink('terminy')}\n />\n </>\n )\n }\n}\n\n\nStepWarunki.contextType = AdvertisementContext;\n\n\nexport { StepWarunki }\n","import React from 'react';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { Steps, Text } from '../../common';\nimport { Zalaczniki } from '../common';\nimport { PomocEkranowa } from '../zarzadzanieTrescia';\nimport { AlreadyPublishedInfo } from './AlreadyPublishedInfo';\nimport { BaseStepComponent } from './BaseStepComponent';\n\n\nconst MAX_ATTACHMENTS_NUMBER = 20;\n\n\nclass StepZalaczniki extends BaseStepComponent {\n stepName = 'zalaczniki';\n\n // helpers\n distinguishAttachments() {\n let oldAttachments = [];\n let currentAttachments = [];\n const ogloszenie = this.context.ogloszenie;\n for (let attachment of ogloszenie.zalaczniki) {\n if (!attachment.origin) { continue }\n if ((ogloszenie.status.label === 'DRAFT' && attachment.origin.id === this.context.ogloszenie.id) || (ogloszenie.status.label !== 'DRAFT' && attachment.origin.id === null)) {\n currentAttachments.push(attachment);\n } else {\n oldAttachments.push(attachment);\n }\n }\n return [oldAttachments, currentAttachments]\n }\n\n // rendering\n\n render() {\n const { isAlreadyPublished, isPreview } = this.props;\n const formLocked = isPreview || this.context.validationOn || this.context.savingOn;\n const [oldAttachments, currentAttachments] = isPreview ? [[], []] : this.distinguishAttachments();\n const oldAttachmentsLength = oldAttachments.length;\n return (\n <>\n <PomocEkranowa ekran=\"form_announcement_attachments\" content={this.props.pomocEkranowaContent} />\n <Text tag=\"h2\" sectionHeader>ZaÅ‚Ä…czniki</Text>\n <Text info className=\"text--counter\">Liczba wyników: {oldAttachments.length + currentAttachments.length}</Text>\n <Text info>Możesz zaÅ‚Ä…czyć maksymalnie {MAX_ATTACHMENTS_NUMBER} plików.</Text>\n {this.renderCurrentAttachments(\n currentAttachments, oldAttachmentsLength, isAlreadyPublished, formLocked)}\n {this.renderOldAttachments(oldAttachments, oldAttachmentsLength, isAlreadyPublished)}\n <Steps\n disabled={formLocked}\n elementToFocusRef={this.props.elementToFocusRef}\n hasPrev\n prevLabel=\"PozostaÅ‚e\"\n onPrevClick={() => this.props.onChangeCurrentMenuLink('pozostale')}\n />\n </>\n )\n }\n\n renderCurrentAttachments(attachments, oldAttachmentsLength, isAlreadyPublished, formLocked) {\n return (\n <Zalaczniki\n isAlreadyPublished={false}\n contextForSaving='advertisement'\n errors={this.context.formErrors.zalaczniki}\n formLocked={formLocked}\n header={isAlreadyPublished ? 'ZaÅ‚Ä…czniki dodane w bieżącej wersji' : ''}\n maxLength={MAX_ATTACHMENTS_NUMBER}\n withoutHeader={!(isAlreadyPublished && oldAttachmentsLength)}\n zalaczniki={attachments}\n zalacznikiLength={attachments.length + oldAttachmentsLength}\n addZalacznik={this.context.addZalacznik}\n removeZalacznik={this.context.removeZalacznik}\n saveZalacznikAttributes={this.context.setZalacznikAttributes}>\n {oldAttachmentsLength > 0 && <Text info className=\"text--counter\">Liczba wyników: {attachments.length}</Text>}\n </Zalaczniki>\n )\n }\n\n renderOldAttachments(attachments, attachmentsLength, isAlreadyPublished) {\n if (!attachmentsLength) { return null }\n return (\n <Zalaczniki\n isAlreadyPublished={isAlreadyPublished}\n contextForSaving='advertisement'\n errors={this.context.formErrors.zalaczniki}\n header={'ZaÅ‚Ä…czniki dodane w poprzednich wersjach'}\n formLocked={true}\n maxLength={MAX_ATTACHMENTS_NUMBER}\n zalaczniki={attachments}\n addZalacznik={this.context.addZalacznik}\n removeZalacznik={this.context.removeZalacznik}\n saveZalacznikAttributes={this.context.setZalacznikAttributes}>\n <Text info className=\"text--counter\">Liczba wyników: {attachments.length}</Text>\n <AlreadyPublishedInfo info='To ogÅ‚oszenie zostaÅ‚o już opublikowane i nie ma możliwoÅ›ci edycji zaÅ‚Ä…czników dodanych w poprzednich wersjach.' />\n </Zalaczniki>\n )\n }\n}\n\n\nStepZalaczniki.contextType = AdvertisementContext;\n\n\nexport { StepZalaczniki }\n","import React from 'react';\nimport { Icon } from '@rmwc/icon';\nimport '@material/form-field/dist/mdc.form-field.css';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { fetchApi } from '../../../fetch';\nimport { computeProgress, dateToString, getOrderItemsLength, setFocusOnElement } from '../../../helpers';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { URLS } from '../../../urls/frontend';\nimport {\n ButtonStyled,\n DialogCustom,\n GridCellCustom,\n GridCustom,\n LinearProgressCustom,\n MenuBasic,\n Message,\n Text,\n} from '../../common';\nimport { BaseComponent } from '../common';\nimport { FormPublikowanie } from './FormPublikowanie';\nimport { StepCzesciKryteria } from './StepCzesciKryteria';\nimport { StepPozostale } from './StepPozostale';\nimport { StepPrzedmiotZamowienia } from './StepPrzedmiotZamowienia';\nimport { StepTerminy } from './StepTerminy';\nimport { StepWarunki } from './StepWarunki';\nimport { StepZalaczniki } from './StepZalaczniki';\n\n\nconst DEFAULT_OGLOSZENIE = {\n ogloszenie: {\n id: null,\n status: {},\n numer: null,\n dataOpublikowania : '',\n },\n id: null,\n projekty: [],\n tytul: '',\n zamowieniaUzupelniajace: '',\n nabor: null,\n warunkiZmianyUmowy: '',\n czyDopuszczalnaOfertaCzesciowa: false,\n dataOpublikowania: '',\n terminOfert: '',\n planowanyTerminPodpisaniaUmowy: '',\n zamowienia: [],\n osobyDoKontaktu: [],\n zalaczniki: [],\n};\n\n\nclass FormOgloszenie extends BaseComponent {\n componentDidMount() {\n // clear context state before first request to server\n this.context.clearState(\n () => {\n if (this.props.preview) { return }\n\n document.title = `Baza KonkurencyjnoÅ›ci - ${this.state.isNew ? 'dodaj ogÅ‚oszenie' : 'edycja ogÅ‚oszenia'}`;\n super.componentDidMount();\n }\n );\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.userId !== this.props.userId) {\n this.setState(prevState => {\n if (!this.state.isNew) {\n this.initializeData(); // TODO: check if dictionaries are valid for new user\n }\n });\n }\n }\n\n componentWillUnmount() {\n super.componentWillUnmount();\n\n if (this.xhrSaveFetch !== null) {\n this.xhrSaveFetch.abort();\n }\n\n if (this.clearMenuErrorTimeout !== null) {\n clearTimeout(this.clearMenuErrorTimeout);\n }\n\n // don't leave not default data and errors in state\n this.context.clearState();\n if (this.props.setAdvertisementManagerType) {\n this.props.setAdvertisementManagerType(\n {isAuthor: false, isAdmin: false});\n }\n }\n\n // handlers\n\n handleFetchSuccess(data) {\n this.xhrFetch = null;\n const { isNew } = this.state;\n if (!isNew) {\n // clean some data, it will be set from advertisement dictionaries data\n Object.assign(data, {\n projects: [],\n enrollment_numbers: [],\n contact_persons: [],\n })\n }\n\n this.context.setConstsFromServer(\n data,\n () => {\n // prepare advertisement data\n if (isNew) {\n this.props.setAdvertisementManagerType(\n {isAuthor: true, isAdmin: false},\n this.context.setOgloszenie(\n null,\n () => this.setState({initializingOn: false})\n )\n );\n } else {\n this.getAdvertisementDataFromServer(this.props.match.params.id);\n }\n }\n );\n }\n\n handleSetCurrentMenuLink(id) {\n this.setState({currentMenuLink: id});\n setFocusOnElement(this.formContentRef);\n }\n\n handleChangeCurrentMenuLink = (stepName) => {\n this.handleSetCurrentMenuLink(this.menuLinksMapNameId[stepName]);\n }\n\n handleChangeProjectsSelected = (ev) => {\n const checked = ev.target.checked;\n this.setState(\n {projectsSelected: checked},\n () => this.context.changeProjectsSelected(checked)\n );\n }\n\n handleReturnToList = () => {\n this.props.history.push(URLS[\n this.props.userData.advertisementManagerType.isAdmin\n ? 'managementAdvertisements'\n : 'advertisements'\n ].path);\n }\n\n handleFetchOgloszenieSuccess = (data, additionalSuccessFunction=null) => {\n this.xhrFetch = null; // clean xhr object\n\n let ogloszenie = Object.assign(\n {}, DEFAULT_OGLOSZENIE,\n getSerializedObject(data.advertisement, {\n dateAttributes: [\n 'planowanyTerminPodpisaniaUmowy', 'dataModyfikacji',\n 'poczatekRealizacji', 'koniecRealizacji', 'dataOpublikowania'],\n dateTimeAttributes: ['dataUtworzenia', ],\n addTemporaryId: true,\n })\n );\n\n const nabor = ogloszenie.ogloszenie.nabor || null;\n Object.assign(ogloszenie, {\n zamowienia: this.reformatPrzedmiotyZamowieniaData(ogloszenie.zamowienia),\n projekty: ogloszenie.ogloszenie.projekty.map(p => p.id),\n osobyDoKontaktu: ogloszenie.osobyDoKontaktu.map(o => o.id),\n nabor: nabor !== null ? {value: nabor.id, label: nabor.calyNumer} : null,\n });\n delete ogloszenie.ogloszenie['projekty'];\n delete ogloszenie.ogloszenie['nabor'];\n\n document.title = \"Baza KonkurencyjnoÅ›ci - edycja ogÅ‚oszenia \" + ogloszenie.tytul;\n this.isAlreadyPublished = !!this.props.preview ? false : parseInt(\n ogloszenie.ogloszenie.status.id) !== parseInt(this.context.roboczeStatus);\n\n this.context.setConstsFromAdvertisementData(\n data.dictionaries,\n () => {\n const {jestAutorem = false} = ogloszenie.ogloszenie;\n this.props.setAdvertisementManagerType(\n {isAuthor: jestAutorem, isAdmin: !jestAutorem},\n () => {\n this.context.setOgloszenie(\n ogloszenie,\n () => this.setState(\n {\n initializingOn: false,\n projectsSelected: ogloszenie.projekty.length > 0 || ogloszenie.nabor === null,\n },\n () => {\n // do some additional steps\n if (additionalSuccessFunction) {\n additionalSuccessFunction();\n }\n }\n )\n );\n }\n );\n }\n )\n }\n\n handleFetchError = (data) => {\n this.xhrFetch = null; // clean xhr object\n this.setState(\n {\n fetchError: translateErrorMessage(data.message),\n initializingOn: false,\n },\n () => {\n if (this.context.savingOn) {\n this.context.changeFormLockedState('savingOn', false);\n }\n }\n );\n }\n\n handleFetchIncorrectStatus = (status) => {\n this.xhrFetch = null; // clean xhr object\n\n if ([403, 404].includes(status)) {\n this.setState({pageNotFound: true, initializingOn: false});\n return\n }\n this.setState(\n {\n fetchError: `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`,\n initializingOn: false,\n },\n () => {\n if (this.context.savingOn) {\n this.context.changeFormLockedState('savingOn', false);\n }\n }\n );\n }\n\n handleValidate = () => {\n this.context.changeFormLockedState('validationOn', true);\n\n this.setState({\n instruction: true,\n validationAria: 'Sprawdź poprawność danych. Zwalidowano ogÅ‚oszenie. Wskaż element w menu, aby odczytać wynik walidacji.'\n });\n setTimeout((prevState) => {\n this.setState({ validationAria: prevState });\n }, 500);\n\n let projectsSelected = this.state.projectsSelected;\n if (\n this.isAlreadyPublished &&\n this.props.userData.advertisementManagerType.isAuthor\n ) {\n // set as null and don't validate it; owner can't edit projects/enrollment\n projectsSelected = null;\n }\n\n const isValid = this.context.validate(\n projectsSelected,\n this.isAlreadyPublished,\n this.props.userData.advertisementManagerType\n );\n\n // clear error/info for current step in menu after 10 seconds\n this.clearMenuErrorTimeout = setTimeout(() => {\n this.context.clearStepError(this.menuLinksMapIdName[this.state.currentMenuLink]);\n }, 10000);\n\n this.context.changeFormLockedState('validationOn', false);\n\n return isValid\n }\n\n handleSave = (\n ev=null,\n callbackSuccess=null,\n callbackError=null,\n callbackIncorrectStatus=null\n ) => {\n\n const cleanData = () => {\n this.xhrSaveFetch = null; // clean xhr object\n this.context.changeFormLockedState('savingOn', false);\n }\n\n let callbackError_ = null;\n if (callbackError) {\n callbackError_ = (data) => {\n callbackError(data);\n cleanData();\n }\n }\n\n let callbackIncorrectStatus_ = null;\n if (callbackIncorrectStatus) {\n callbackIncorrectStatus_ = (status) => {\n callbackIncorrectStatus(status);\n cleanData();\n }\n }\n\n this.context.changeFormLockedState(\n 'savingOn', true,\n () => {\n const isNew = this.state.isNew;\n const data = this.getDataForSaving();\n // save advertisement on server\n this.xhrSaveFetch = fetchApi(\n isNew ? '/api/announcements' : `/api/announcements/${data.ogloszenie.id}`,\n isNew ? 'POST' : 'PUT',\n {},\n getSerializedObject(data, {toServer: true}),\n callbackSuccess || this.handleFetchSaveSuccess,\n callbackError_ || this.handleFetchSaveError,\n callbackIncorrectStatus_ || this.handleFetchSaveIncorrectStatus,\n );\n }\n )\n }\n\n handleFetchSaveSuccess = (data, callback=null) => {\n this.xhrSaveFetch = null;\n // clear errors\n this.context.clearFormErrors();\n\n const ogloszenie = getSerializedObject(data.advertisement);\n this.context.saveOgloszenie(\n ogloszenie,\n () => this.getAdvertisementDataFromServer(\n this.context.ogloszenie.ogloszenie.id,\n () => {\n this.context.changeFormLockedState(\n 'savingOn', false,\n () => {\n this.setState(\n {\n isNew: false,\n fetchSaveError: '',\n saveBtnText: 'Zapisano',\n },\n () => {\n this.saveMsgTimeout = setTimeout(() => {\n this.setState({saveBtnText: 'Zapisz wersjÄ™ roboczÄ…'});\n }, 5000)\n if (callback) { callback() }\n }\n );\n }\n );\n }\n )\n );\n }\n\n handleFetchSaveError = (data) => {\n this.xhrSaveFetch = null; // clean xhr object\n this.setState(\n {fetchSaveError: translateErrorMessage(data.message)},\n () => this.context.changeFormLockedState('savingOn', false)\n );\n }\n\n handleFetchSaveIncorrectStatus = (status) => {\n this.xhrSaveFetch = null; // clean xhr object\n let msg;\n if (status === 403) {\n msg = 'Nie masz uprawnieÅ„ do edycji tego ogÅ‚oszenia.';\n } else {\n msg = `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`;\n }\n this.setState(\n {fetchSaveError: msg},\n () => this.context.changeFormLockedState('savingOn', false)\n );\n }\n\n setPublishingSuccessInfo(info) {\n this.setState({\n publishingOn: false,\n publishingSuccessInfo: info,\n });\n }\n\n handlePublishByAdmin = () => {\n if (this.handleValidate()) {\n this.handleSave(\n null,\n () => this.setPublishingSuccessInfo(\n 'OgÅ‚oszenie zostaÅ‚o pomyÅ›lnie opublikowane.')\n );\n } else {\n this.setState({\n notValidByAdminError:\n 'OgÅ‚oszenie zawiera bÅ‚Ä™dy. Po ich poprawieniu spróbuj ' +\n 'opublikować ogÅ‚oszenie jeszcze raz.',\n });\n }\n }\n\n handlePublish = () => {\n const { advertisementManagerType } = this.props.userData;\n if (advertisementManagerType.isAuthor) {\n this.setState({publishingOn: true});\n } else if (advertisementManagerType.isAdmin) {\n this.handlePublishByAdmin();\n }\n }\n\n handleClosePublishingSuccessDialog = () => {\n this.props.history.push(\n this.props.userData.advertisementManagerType.isAuthor\n ? URLS.advertisements.path\n : URLS.advertisementsDetails.getUrl(this.props.match.params.id)\n );\n }\n\n handleClosePublishingByAdminErrorDialog = () => {\n this.setState({notValidByAdminError: ''});\n }\n\n // helpers\n\n preState(props) {\n this.handleSetCurrentMenuLink = this.handleSetCurrentMenuLink.bind(this);\n this.menuLinks = [\n {name: 'przedmiot', id: 1, label: 'Przedmiot', onClick: this.handleSetCurrentMenuLink},\n {name: 'terminy', id: 2, label: 'Terminy', onClick: this.handleSetCurrentMenuLink},\n {name: 'warunki', id: 3, label: 'Warunki', onClick: this.handleSetCurrentMenuLink},\n {name: 'czesciKryteria', id: 4, label: 'Części i kryteria', onClick: this.handleSetCurrentMenuLink},\n {name: 'pozostale', id: 5, label: 'PozostaÅ‚e', onClick: this.handleSetCurrentMenuLink},\n {name: 'zalaczniki', id: 6, label: 'ZaÅ‚Ä…czniki', onClick: this.handleSetCurrentMenuLink},\n ];\n this.menuLinksMapNameId = {};\n this.menuLinksMapIdName = {};\n for (let link of this.menuLinks) {\n this.menuLinksMapNameId[link.name] = link.id;\n this.menuLinksMapIdName[link.id] = link.name;\n }\n\n this.isAlreadyPublished = false;\n }\n\n getAdditionalState(props) {\n return {\n initializingOn: props.preview ? false : true,\n progress: 0,\n currentMenuLink: props.preview && props.step ? this.menuLinksMapNameId[props.step] || 1 : 1,\n saveBtnText: 'Zapisz wersjÄ™ roboczÄ…',\n instruction: false,\n isNew: props.isNew,\n validationAria: null,\n publishingOn: false,\n projectsSelected: true,\n fetchSaveError: '',\n notValidByAdminError: '',\n publishingSuccessInfo: '',\n }\n }\n\n postState(props) {\n super.postState(props);\n this.clearMenuErrorTimeout = null;\n this.formContentRef = React.createRef();\n this.menuBasicRef = React.createRef();\n this.xhrSaveFetch = null;\n }\n\n getFetchUrl() {\n return '/api/dictionaries'\n }\n\n getFetchError(message) {\n message = super.getFetchError(message);\n return `Nie udaÅ‚o siÄ™ pobrać danych do formularza. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Podczas pobierania danych do formularza wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n getAdvertisementDataFromServer(id_, additionalSuccessFunction) {\n this.xhrFetch = fetchApi(\n `/api/announcements/${id_}`,\n 'GET',\n {},\n {\n dictionaries: ['projects', 'enrollment_numbers', 'contact_persons'],\n version_mode: 'draft_or_last_published'\n },\n (data) => this.handleFetchOgloszenieSuccess(data, additionalSuccessFunction),\n this.handleFetchError,\n this.handleFetchIncorrectStatus,\n );\n }\n\n computeProgress() {\n let progress;\n if (this.state.currentMenuLink === this.menuLinksMapNameId['przedmiot']) {\n progress = computeProgress(getOrderItemsLength(this.context.ogloszenie.zamowienia) > 0 ? 1 : 0, 1);\n } else {\n progress = computeProgress();\n }\n if (progress !== this.state.progress) {\n this.setState({progress});\n }\n }\n\n reformatPrzedmiotyZamowieniaData(zamowienia) {\n let temporaryId = 1;\n return zamowienia.map(z => {\n let przedmiotyZamowienia = [];\n for (let pz of z.przedmiotyZamowienia) {\n pz.temporaryId = temporaryId++;\n pz.kategoria = pz.kategoria ? pz.kategoria.id : null;\n pz.podkategoria = pz.podkategoria ? pz.podkategoria.id : null;\n for (let mr of pz.miejscaRealizacji) {\n mr.typ = mr.typ.id;\n }\n for (let wu of pz.warunkiUdzialu) {\n wu.typ = wu.typ.id;\n }\n przedmiotyZamowienia.push(pz);\n }\n z.przedmiotyZamowienia = przedmiotyZamowienia;\n return z\n })\n }\n\n getDataForSaving() {\n if (this.isAlreadyPublished) {\n return this.getPublishedDataForSaving()\n }\n\n const ogloszenie = this.context.ogloszenie;\n return {\n ogloszenie: {\n id: ogloszenie.ogloszenie.id,\n projekty: ogloszenie.projekty,\n nabor: ogloszenie.nabor === null ? null : ogloszenie.nabor.value,\n },\n id: ogloszenie.id,\n tytul: ogloszenie.tytul.trim(),\n zamowieniaUzupelniajace: ogloszenie.zamowieniaUzupelniajace.trim(),\n warunkiZmianyUmowy: ogloszenie.warunkiZmianyUmowy.trim(),\n czyDopuszczalnaOfertaCzesciowa: ogloszenie.czyDopuszczalnaOfertaCzesciowa,\n planowanyTerminPodpisaniaUmowy: ogloszenie.planowanyTerminPodpisaniaUmowy,\n zamowienia: ogloszenie.zamowienia.map(z => (\n {\n id: z.id,\n zamowienieNode: z.zamowienieNode ? z.zamowienieNode.id : null,\n tytul: z.tytul,\n czyWariantowe: z.czyWariantowe,\n przedmiotyZamowienia: z.przedmiotyZamowienia.map(pz => {\n return Object.assign({}, pz, {kodyCPV: pz.kodyCPV.map(kod_ => kod_.id)})\n }),\n szacunkowaWartosc: z.szacunkowaWartosc,\n kryteriaOceny: z.kryteriaOceny,\n }\n )),\n osobyDoKontaktu: ogloszenie.osobyDoKontaktu,\n zalaczniki: ogloszenie.zalaczniki.map(z => ({id: z.id, nazwa: z.nazwa, plik: z.plik.id})),\n }\n }\n\n getPublishedDataForSaving() {\n const { ogloszenie} = this.context;\n const { advertisementManagerType } = this.props.userData;\n return {\n ogloszenie: {\n id: ogloszenie.ogloszenie.id,\n // institution administrator can edit projects and enrollments\n ...(advertisementManagerType.isAdmin\n ? {\n projekty: ogloszenie.projekty,\n nabor: ogloszenie.nabor === null ? null : ogloszenie.nabor.value,\n }\n : {}\n )\n },\n id: ogloszenie.id,\n tytul: ogloszenie.tytul.trim(),\n planowanyTerminPodpisaniaUmowy: ogloszenie.planowanyTerminPodpisaniaUmowy,\n zamowienia: ogloszenie.zamowienia.map(z => (\n {\n id: z.id,\n zamowienieNode: z.zamowienieNode.id,\n przedmiotyZamowienia: z.przedmiotyZamowienia.map(pz => (\n {\n id: pz.id,\n okresGwarancji: pz.okresGwarancji,\n opis: pz.opis,\n kodyCPV: pz.kodyCPV.map(kod_ => kod_.id),\n miejscaRealizacji: pz.miejscaRealizacji,\n harmonogramy: pz.harmonogramy,\n groupUuid: pz.group_uuid,\n }\n )),\n szacunkowaWartosc: z.szacunkowaWartosc,\n }\n )),\n // advertisement owner can edit contact persons\n ...(advertisementManagerType.isAuthor\n ? {osobyDoKontaktu: ogloszenie.osobyDoKontaktu}\n : {}\n ),\n zalaczniki: ogloszenie.zalaczniki.map(\n z => ({id: z.id, nazwa: z.nazwa, plik: z.plik.id})),\n }\n }\n\n // rendering\n\n renderContent() {\n const currentMenuLink = this.state.currentMenuLink;\n\n let fetchSaveError = null;\n if (this.state.fetchSaveError.length) {\n fetchSaveError = (\n <GridCustom centerHorizontal>\n <Text error role=\"alert\">{this.state.fetchSaveError}</Text>\n <ButtonStyled onClick={() => this.setState({fetchSaveError: ''})} lite>OK</ButtonStyled>\n </GridCustom>\n );\n }\n\n return (\n <GridCustom flexL noWrap>\n <GridCellCustom>\n <MenuBasic\n addProgressIcon={true}\n children={this.menuLinks}\n currentMenuLink={currentMenuLink}\n disabled={!!this.props.preview || this.context.validationOn || this.context.savingOn}\n errors={this.context.stepErrors}\n ref={this.menuBasicRef}\n title={`${this.state.isNew ? 'Dodanie' : 'Edycja'} ogÅ‚oszenia`} />\n {this.state.instruction && this.renderInstruction()}\n </GridCellCustom>\n <GridCellCustom fill customRef={this.formContentRef} tabIndex=\"-1\">\n {this.renderFuturePublishingInfo()}\n <LinearProgressCustom progress={this.state.progress} />\n {currentMenuLink === this.menuLinksMapNameId['przedmiot'] && this.renderPrzedmiotZamowienia()}\n {currentMenuLink === this.menuLinksMapNameId['terminy'] && this.renderTerminy()}\n {currentMenuLink === this.menuLinksMapNameId['warunki'] && this.renderWarunki()}\n {currentMenuLink === this.menuLinksMapNameId['czesciKryteria'] && this.renderCzesciKryteria()}\n {currentMenuLink === this.menuLinksMapNameId['pozostale'] && this.renderPozostale()}\n {currentMenuLink === this.menuLinksMapNameId['zalaczniki'] && this.renderZalaczniki()}\n\n {this.renderButtons()}\n {fetchSaveError}\n </GridCellCustom>\n {this.state.notValidByAdminError.length > 0 &&\n this.renderPublishingByAdminError()\n }\n {this.state.publishingSuccessInfo.length > 0 &&\n this.renderPublishingSuccessInfo()\n }\n </GridCustom>\n )\n }\n\n renderInstruction() {\n return (\n <section className=\"instruction\">\n <Text info><Icon icon=\"done\" aria-hidden=\"true\" /> Poprawna walidacja</Text>\n <Text info><Icon icon=\"error_outline\" aria-hidden=\"true\" /> Wymaga uwagi</Text>\n </section>\n )\n }\n\n renderFuturePublishingInfo() {\n if (this.props.preview) { return }\n const dataOpublikowania = this.context.ogloszenie.dataOpublikowania;\n if (dataOpublikowania && dataOpublikowania > dateToString(new Date())) {\n return (\n <Text info>\n To ogÅ‚oszenie ma ustawiony przyszÅ‚y termin publikacji oraz przyszÅ‚y termin skÅ‚adania ofert. Po zapisie kopii roboczej pola te zostanÄ… wyczyszczone.\n </Text>\n )\n }\n return null\n }\n\n renderPrzedmiotZamowienia() {\n const isPreview = !!this.props.preview;\n return <StepPrzedmiotZamowienia\n elementToFocusRef={this.formContentRef}\n isAlreadyPublished={this.isAlreadyPublished}\n isPreview={isPreview}\n pomocEkranowaContent={isPreview ? this.props.content : null}\n onChangeCurrentMenuLink={this.handleChangeCurrentMenuLink}\n />\n }\n\n renderTerminy() {\n const isPreview = !!this.props.preview;\n return <StepTerminy\n elementToFocusRef={this.formContentRef}\n isPreview={isPreview}\n pomocEkranowaContent={isPreview ? this.props.content : null}\n onChangeCurrentMenuLink={this.handleChangeCurrentMenuLink}\n />\n }\n\n renderWarunki() {\n const isPreview = !!this.props.preview;\n return <StepWarunki\n elementToFocusRef={this.formContentRef}\n isAlreadyPublished={this.isAlreadyPublished}\n isPreview={isPreview}\n pomocEkranowaContent={isPreview ? this.props.content : null}\n onChangeCurrentMenuLink={this.handleChangeCurrentMenuLink}\n />\n }\n\n renderCzesciKryteria() {\n const isPreview = !!this.props.preview;\n return <StepCzesciKryteria\n elementToFocusRef={this.formContentRef}\n isAlreadyPublished={this.isAlreadyPublished}\n isPreview={isPreview}\n pomocEkranowaContent={isPreview ? this.props.content : null}\n onChangeCurrentMenuLink={this.handleChangeCurrentMenuLink}\n />\n }\n\n renderPozostale() {\n const isPreview = !!this.props.preview;\n return <StepPozostale\n elementToFocusRef={this.formContentRef}\n isAlreadyPublished={this.isAlreadyPublished}\n isPreview={isPreview}\n pomocEkranowaContent={isPreview ? this.props.content : null}\n projectsSelected={this.state.projectsSelected}\n onChangeCurrentMenuLink={this.handleChangeCurrentMenuLink}\n onChangeProjectsSelected={this.handleChangeProjectsSelected}\n />\n }\n\n renderZalaczniki() {\n const isPreview = !!this.props.preview;\n return <StepZalaczniki\n elementToFocusRef={this.formContentRef}\n isAlreadyPublished={this.isAlreadyPublished}\n isPreview={isPreview}\n pomocEkranowaContent={isPreview ? this.props.content : null}\n onChangeCurrentMenuLink={this.handleChangeCurrentMenuLink}\n />\n }\n\n renderButtons() {\n const isPreview = !!this.props.preview;\n const formLocked = isPreview || this.context.validationOn || this.context.savingOn;\n const { instruction, saveBtnText, validationAria } = this.state;\n return (\n <>\n <GridCustom flexEnd>\n <ButtonStyled\n disabled={formLocked}\n lite\n noMargin\n onClick={this.handleValidate}\n >Sprawdź poprawność danych</ButtonStyled>\n {validationAria && (\n <span className=\"sr-only\" role=\"alert\" aria-live=\"assertive\">{validationAria}</span>\n )}\n {instruction && (\n <button type=\"button\" onClick={() => setFocusOnElement(this.menuBasicRef)} className=\"sr-only\">Przejdź do menu</button>\n )}\n </GridCustom>\n <GridCustom fullwidth className=\"advertisement-form-save\">\n {(isPreview || this.props.userData.advertisementManagerType.isAuthor) && (\n <>\n <ButtonStyled disabled={formLocked} onClick={this.handleSave} save noMargin>{saveBtnText}</ButtonStyled>\n {saveBtnText === 'Zapisano' && <span role=\"alert\" className=\"sr-only\">Zapisano!</span>}\n </>\n )}\n <ButtonStyled\n className=\"btn btn--main btn--save-main\"\n disabled={formLocked}\n noMargin\n onClick={this.handlePublish}\n save\n >\n Publikuj ogÅ‚oszenie\n </ButtonStyled>\n </GridCustom>\n <GridCustom>\n <ButtonStyled disabled={formLocked} onClick={this.handleReturnToList} prev noMargin>Powrót do listy ogÅ‚oszeÅ„</ButtonStyled>\n </GridCustom>\n {this.state.publishingOn && (\n <FormPublikowanie {...this.props} formOgloszenie={this} roboczeStatus={this.context.roboczeStatus} />)}\n </>\n )\n }\n\n renderPublishingSuccessInfo() {\n return (\n <DialogCustom onClose={this.handleClosePublishingSuccessDialog}>\n <Message\n success\n messageIcon=\"check_circle_outline\"\n messageTitle={this.state.publishingSuccessInfo} />\n <GridCustom flexEnd>\n <ButtonStyled onClick={this.handleClosePublishingSuccessDialog} primary>OK</ButtonStyled>\n </GridCustom>\n </DialogCustom>\n )\n }\n\n renderPublishingByAdminError() {\n return (\n <DialogCustom onClose={this.handleClosePublishingByAdminErrorDialog}>\n <Message\n error\n messageIcon=\"clear\"\n messageTitle={this.state.notValidByAdminError} />\n <GridCustom flexEnd>\n <ButtonStyled\n primary\n onClick={this.handleClosePublishingByAdminErrorDialog}\n >\n OK\n </ButtonStyled>\n </GridCustom>\n </DialogCustom>\n )\n }\n}\n\n\nFormOgloszenie.contextType = AdvertisementContext;\n\nexport { FormOgloszenie };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Switch } from '@rmwc/switch';\n\nimport '@material/switch/dist/mdc.switch.css';\n\nimport { fetchApi } from '../../../fetch';\nimport { ADVERTISEMENTS_CLEANED_FILTERS, filterAdvertisements } from '../../../filters';\nimport {\n dateToString,\n getUserFullName,\n isAdvertisementLocked,\n triggerBodyClick\n} from '../../../helpers';\nimport { serializeObject, serializeObjectList } from '../../../serializers';\nimport { ADVERTISEMENTS_SORTING_VALUES, sortAdvertisements } from '../../../sorters';\nimport { URLS } from '../../../urls/frontend';\nimport {\n Box,\n ButtonStyled,\n Container,\n DateCalendar,\n DialogCustom,\n GridCustom,\n FieldWithLabel,\n Select,\n Text,\n TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { BaseComponent } from '../common';\nimport { PomocEkranowa } from '../zarzadzanieTrescia';\nimport { BadgeAnchor, Badge } from '@rmwc/badge';\nimport '@rmwc/badge/badge.css';\n\n\nconst EMPTY_VALUE = {\n value: 0,\n label: '--- Wybierz ---',\n}\nconst ANNOUNCEMENT_STATUS_DRAFT = 'announcement_status_draft';\nconst ANNOUNCEMENT_STATUS_PUBLISHED = 'announcement_status_published';\nconst ANNOUNCEMENT_STATUSES = 'announcement_statuses';\n\n\nclass Ogloszenia extends BaseComponent {\n\n // basic functions\n\n componentDidMount() {\n if (this.props.preview) { return }\n\n document.title = \"Baza KonkurencyjnoÅ›ci - ogÅ‚oszenia\";\n super.componentDidMount();\n }\n\n componentWillUnmount() {\n super.componentWillUnmount();\n // abort api requests if exist\n for (let xhr of [this.xhrRemoveAdvertisement, this.xhrCopyAdvertisement,\n this.xhrCancelAdvertisement]) {\n if (xhr !== null) {\n xhr.abort();\n }\n }\n }\n\n // handlers\n\n handleFetchSuccess = (data) => {\n super.handleFetchSuccess(data);\n\n const ogloszenia = serializeObjectList(data.advertisements);\n\n // update const values according to data from server\n this.obublikowaneStatusId = data.dictionaries[ANNOUNCEMENT_STATUS_PUBLISHED];\n this.roboczeStatusId = data.dictionaries[ANNOUNCEMENT_STATUS_DRAFT];\n this.statusyOgloszen = data.dictionaries[ANNOUNCEMENT_STATUSES];\n\n // update state after const defining\n this.setState({initializingOn: false, ogloszenia: ogloszenia});\n }\n\n handleRemoveOgloszenie = (removeFunct, dialogComponent) => {\n // remove advertisement on server\n this.xhrRemoveAdvertisement = fetchApi(\n `/api/announcements/${this.state.removedOgloszenieId}`,\n 'DELETE',\n {},\n {},\n this.handleFetchRemoveOgloszenieSuccess,\n this.handleFetchRemoveOgloszenieError,\n this.handleFetchRemoveOgloszenieIncorrectStatus,\n );\n }\n\n handleFetchRemoveOgloszenieSuccess = (data) => {\n this.xhrRemoveAdvertisement = null; // clean xhr object\n\n // remove advertisement from state\n this.setState(prevState => ({\n ogloszenia: prevState.ogloszenia.filter(o => o.ogloszenie.id !== prevState.removedOgloszenieId),\n }), this.handleCloseActionDialog);\n }\n\n handleFetchRemoveOgloszenieError = (data) => {\n this.xhrRemoveAdvertisement = null; // clean xhr object\n this.setState({fetchActionError: data.message});\n }\n\n handleFetchRemoveOgloszenieIncorrectStatus = (status) => {\n this.xhrRemoveAdvertisement = null; // clean xhr object\n this.setState({fetchActionError: `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`});\n }\n\n handleCopyOgloszenie = (baseOgloszenieId) => {\n this.setState(\n {copyingOgloszenieId: baseOgloszenieId},\n () => {\n this.xhrCopyAdvertisement = fetchApi(\n `/api/announcements/${baseOgloszenieId}/copy`,\n 'POST',\n {},\n {},\n this.handleFetchCopyOgloszenieSuccess,\n this.handleFetchCopyOgloszenieError,\n this.handleFetchCopyOgloszenieIncorrectStatus,\n );\n }\n );\n }\n\n handleFetchCopyOgloszenieSuccess = (data, baseOgloszenieId) => {\n this.xhrCopyAdvertisement = null; // clean xhr object\n\n // update advertisements list and other state values\n const ogloszenie = serializeObject(data.advertisement);\n this.setState(prevState => ({\n ogloszenia: [...prevState.ogloszenia, ogloszenie],\n copiedOgloszenieIds: [...prevState.copiedOgloszenieIds, ogloszenie.ogloszenie.id],\n }));\n }\n\n handleFetchCopyOgloszenieError = (data) => {\n this.xhrCopyAdvertisement = null; // clean xhr object\n this.setState({fetchActionError: `Podczas kopiowania ogÅ‚oszenia wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d: ${data.message}`});\n }\n\n handleFetchCopyOgloszenieIncorrectStatus = (status) => {\n this.xhrCopyAdvertisement = null; // clean xhr object\n this.setState({fetchActionError: `Podczas kopiowania ogÅ‚oszenia wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`});\n }\n\n handleToggleFilters = (checked) => {\n if (checked) {\n this.setFiltersData();\n this.setState({filtersAreOn: true});\n } else {\n this.setState({\n filtersAreOn: false,\n filters: ADVERTISEMENTS_CLEANED_FILTERS,\n });\n }\n }\n\n handleChangeFilter = (name, value) => {\n this.setState((prevState) => {\n return {filters: Object.assign({}, prevState.filters, {[name]: value})}\n });\n }\n\n handleCancelOgloszenie = () => {\n // cancel advertisement on server\n this.xhrRemoveAdvertisement = fetchApi(\n `/api/announcements/${this.state.cancelledOgloszenieId}/cancel`,\n 'POST',\n {},\n {},\n this.handleFetchCancelOgloszenieSuccess,\n this.handleFetchCancelOgloszenieError,\n this.handleFetchCancelOgloszenieIncorrectStatus,\n );\n }\n\n handleFetchCancelOgloszenieSuccess = (data) => {\n this.xhrCancelAdvertisement = null; // clean xhr object\n const ogloszenieData = serializeObject(data.advertisement);\n\n // update advertisement status in the state\n this.setState(\n prevState => {\n let ogloszenia = [];\n for (let o of prevState.ogloszenia) {\n if (o.ogloszenie.id === prevState.cancelledOgloszenieId) {\n o.ogloszenie.status = Object.assign({}, o.ogloszenie.status, ogloszenieData.status);\n }\n ogloszenia.push(o);\n }\n return {ogloszenia}\n },\n this.handleCloseActionDialog\n );\n }\n\n handleFetchCancelOgloszenieError = (data) => {\n this.xhrCancelAdvertisement = null; // clean xhr object\n this.setState({fetchActionError: data.message});\n }\n\n handleFetchCancelOgloszenieIncorrectStatus = (status) => {\n this.xhrCancelAdvertisement = null; // clean xhr object\n this.setState({fetchActionError: `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`});\n }\n\n handleCloseActionDialog = () => {\n this.setState({\n removedOgloszenieId: null,\n removedOgloszenieTitle: '',\n cancelledOgloszenieId: null,\n cancelledOgloszenieTitle: '',\n });\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n initializingOn: props.preview ? false : true,\n filtersAreOn: false,\n currentSortingValue: {\n value: ADVERTISEMENTS_SORTING_VALUES[0][0],\n label: ADVERTISEMENTS_SORTING_VALUES[0][1],\n },\n removedOgloszenieId: null,\n removedOgloszenieTitle: '',\n cancelledOgloszenieId: null,\n cancelledOgloszenieTitle: '',\n filters: Object.assign({}, ADVERTISEMENTS_CLEANED_FILTERS),\n copyingOgloszenieId: null, // for dialog after copying id of base ogloszenie\n copiedOgloszenieIds: [], // for distinguishing on the list\n ogloszenia: [],\n fetchActionError: '',\n }\n }\n\n postState(props) {\n this.obublikowaneStatusId = null;\n this.roboczeStatusId = null;\n this.statusyOgloszen = {};\n\n this.actionComponent = null;\n\n // keep xhr objects for componentWillUnmount\n this.xhrRemoveAdvertisement = null;\n this.xhrCopyAdvertisement = null;\n this.xhrCancelAdvertisement = null;\n\n if (this.props.preview) { return }\n\n this.createdByList = []; // needed for filtering\n this.modifiedByList = []; // needed for filtering\n }\n\n getFetchUrl() {\n return '/api/announcements'\n }\n\n getFetchData() {\n return {\n dictionaries: [\n ANNOUNCEMENT_STATUS_DRAFT, ANNOUNCEMENT_STATUS_PUBLISHED,\n ANNOUNCEMENT_STATUSES],\n mode: 'advertiser',\n }\n }\n\n getFetchError(message) {\n message = super.getFetchError(message);\n return `Nie udaÅ‚o siÄ™ pobrać ogÅ‚oszeÅ„. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Nie udaÅ‚o siÄ™ pobrać danych ogÅ‚oszeÅ„. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n // helpers\n\n setFiltersData() {\n\n // set data for UtworzyÅ‚ and ModyfikowaÅ‚ filters\n let creators = [];\n let createdByList = []\n let modifiers = [];\n let modifiedByList = [];\n\n for (let o of this.state.ogloszenia) {\n const { ktoUtworzyl, ktoModyfikowal } = o.ogloszenie;\n if (ktoUtworzyl) {\n const creator = getUserFullName(ktoUtworzyl);\n if (!creators.includes(creator)) {\n creators.push(creator);\n createdByList.push([creator, ktoUtworzyl.id]);\n }\n }\n\n if (ktoModyfikowal) {\n const modifier = getUserFullName(ktoModyfikowal);\n if (!modifiers.includes(modifier)) {\n modifiers.push(modifier);\n modifiedByList.push([modifier, ktoModyfikowal.id])\n }\n }\n }\n\n this.createdByList = createdByList.sort().map(([creator, id]) => [id, creator]);\n this.modifiedByList = modifiedByList.sort().map(([modifier, id]) => [id, modifier]);\n }\n\n // rendering\n\n renderContent() {\n const {\n cancelledOgloszenieId,\n copyingOgloszenieId,\n currentSortingValue,\n filters,\n filtersAreOn,\n ogloszenia,\n removedOgloszenieId,\n } = this.state;\n const { preview } = this.props;\n\n const advertisements = sortAdvertisements(\n filterAdvertisements(ogloszenia, filtersAreOn, filters),\n currentSortingValue.value\n );\n\n return (\n <>\n <PomocEkranowa ekran=\"announcements_list_advertiser\" content={this.props.isPreview ? this.props.content : null}/>\n <Text tag=\"h2\" mainHeader>Lista ogÅ‚oszeÅ„</Text>\n <Text info>Liczba ogÅ‚oszeÅ„: {advertisements.length}</Text>\n <Container className=\"filters-container\">\n <GridCustom>\n <FieldWithLabel tag=\"label\" label=\"Sortuj\" selectRef={React.createRef()}>\n <Select\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n className=\"select-custom\"\n isDisabled={preview}\n isSearchable={false}\n options={ADVERTISEMENTS_SORTING_VALUES.map(([value, label]) => ({value, label}))}\n value={currentSortingValue}\n onChange={(selectedOption) => this.setState({currentSortingValue: selectedOption})}\n styles={customSelectStyles}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n />\n </FieldWithLabel>\n <FieldWithLabel\n className=\"filters-container__filters\"\n label=\"Filtruj\"\n labelFor=\"ogloszenia_filters_id\"\n tag=\"label\"\n >\n <Switch\n aria-label={`Filtruj. Panel filtrów ${filtersAreOn ? 'otwarty, zawartość listy bÄ™dzie dopasowana po wpisaniu każdego nowego znaku w panelu filtrów.' : 'ukryty'}`}\n checked={filtersAreOn}\n disabled={preview}\n onChange={(ev) => this.handleToggleFilters(ev.target.checked)}\n id=\"ogloszenia_filters_id\"\n />\n </FieldWithLabel>\n </GridCustom>\n </Container>\n <GridCustom flexL noWrap flexTop>\n {filtersAreOn && this.renderFilters()}\n <GridCustom centerHorizontal className=\"advertisements-list\" tag=\"ul\">\n {this.renderAddOgloszenieButton()}\n {advertisements.map((o) => this.renderOgloszenie(o))}\n </GridCustom>\n {removedOgloszenieId !== null && this.renderRemovingOgloszenie()}\n {cancelledOgloszenieId !== null && this.renderCancellingOgloszenie()}\n </GridCustom>\n {copyingOgloszenieId !== null && this.renderCopiedMessage(\n advertisements.filter(o => parseInt(o.ogloszenie.id) === parseInt(copyingOgloszenieId))[0].tytul)}\n </>\n )\n }\n\n renderFilters() {\n const filters = this.state.filters;\n\n const ktoUtworzylList = this.createdByList;\n const ktoUtworzylDict = {};\n for (let [id, username] of ktoUtworzylList) {\n ktoUtworzylDict[id] = username;\n }\n\n const ktoModyfikowalList = this.modifiedByList;\n const ktoModyfikowalDict = {};\n for (let [id, username] of ktoModyfikowalList) {\n ktoModyfikowalDict[id] = username;\n }\n\n const dataUtworzeniaInputRef = React.createRef();\n const dataModyfikacjiInputRef = React.createRef();\n const terminOfertInputRef = React.createRef();\n\n return (\n <Container className=\"filters\" style={{zIndex: 5}}>\n <GridCustom>\n <FieldWithLabel label=\"TytuÅ‚\" tag=\"label\" labelFor=\"filters_title_id\">\n <TextFieldCustom\n autoFocus\n clearFieldContext=\"tytuÅ‚\"\n maxLength={1000}\n value={filters.tytul}\n onChange={(ev) => this.handleChangeFilter('tytul', ev.target.value)}\n className=\"filters__input\"\n onClear={(ev) => this.handleChangeFilter('tytul', '')}\n id=\"filters_title_id\" />\n </FieldWithLabel>\n <FieldWithLabel label=\"Numer ogÅ‚oszenia\" tag=\"label\" labelFor=\"filters_number_id\">\n <TextFieldCustom\n clearFieldContext=\"numer ogÅ‚oszenia\"\n maxLength={20}\n value={filters.ogloszenie_numer}\n onChange={(ev) => this.handleChangeFilter('ogloszenie_numer', ev.target.value)}\n className=\"filters__input\"\n onClear={(ev) => this.handleChangeFilter('ogloszenie_numer', '')}\n id=\"filters_number_id\" />\n </FieldWithLabel>\n <FieldWithLabel label=\"UtworzyÅ‚\" tag=\"label\" selectRef={React.createRef()}>\n <Select\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n className=\"select-custom filters__input\"\n options={[EMPTY_VALUE, ].concat(...ktoUtworzylList.map(([id, label]) => ({value: id, label: label})))}\n value={{value: filters.ktoUtworzyl || EMPTY_VALUE.value, label: ktoUtworzylDict[filters.ktoUtworzyl] || EMPTY_VALUE.label}}\n onChange={(selectedOption) =>this.handleChangeFilter(\n 'ktoUtworzyl', selectedOption === null ? 0 : parseInt(selectedOption.value))}\n styles={customSelectStyles}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n />\n </FieldWithLabel>\n <FieldWithLabel label=\"Data utworzenia\" tag=\"label\" inputRef={dataUtworzeniaInputRef}>\n <DateCalendar\n dateName=\"Data utworzenia\"\n parentRef={dataUtworzeniaInputRef}\n value={Date.parse(filters.dataUtworzenia)}\n onChange={(date) => this.handleChangeFilter('dataUtworzenia', dateToString(date))} />\n </FieldWithLabel>\n <FieldWithLabel label=\"Status\" tag=\"label\" selectRef={React.createRef()}>\n <Select\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n className=\"select-custom filters__input\"\n options={[EMPTY_VALUE, ].concat(...Object.entries(this.statusyOgloszen).map(([id, name]) => [name, id]).sort().map(([name, id]) => ({value: id, label: name})))}\n value={{value: filters.status || EMPTY_VALUE.value, label: this.statusyOgloszen[filters.status] || EMPTY_VALUE.label}}\n onChange={(selectedOption) =>this.handleChangeFilter(\n 'status', selectedOption === null ? 0 : parseInt(selectedOption.value))}\n styles={customSelectStyles}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n />\n </FieldWithLabel>\n <FieldWithLabel label=\"ModyfikowaÅ‚\" tag=\"label\" selectRef={React.createRef()}>\n <Select\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n className=\"select-custom filters__input\"\n options={[EMPTY_VALUE, ].concat(...ktoModyfikowalList.map(([id, label]) => ({value: id, label: label})))}\n value={{value: filters.ktoModyfikowal || EMPTY_VALUE.value, label: ktoModyfikowalDict[filters.ktoModyfikowal] || EMPTY_VALUE.label}}\n onChange={(selectedOption) =>this.handleChangeFilter(\n 'ktoModyfikowal', selectedOption === null ? 0 : parseInt(selectedOption.value))}\n styles={customSelectStyles}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n />\n </FieldWithLabel>\n <FieldWithLabel label=\"Data modyfikacji\" tag=\"label\" inputRef={dataModyfikacjiInputRef}>\n <DateCalendar\n dateName=\"Data modyfikacji\"\n parentRef={dataModyfikacjiInputRef}\n value={Date.parse(filters.dataModyfikacji)}\n onChange={(date) => this.handleChangeFilter('dataModyfikacji', dateToString(date))} />\n </FieldWithLabel>\n <FieldWithLabel label=\"Termin skÅ‚adania ofert\" tag=\"label\" inputRef={terminOfertInputRef}>\n <DateCalendar\n dateName=\"Termin skÅ‚adania ofert\"\n parentRef={terminOfertInputRef}\n value={Date.parse(filters.terminOfert)}\n onChange={(date) => this.handleChangeFilter('terminOfert', dateToString(date))} />\n </FieldWithLabel>\n </GridCustom>\n </Container>\n )\n }\n\n renderAddOgloszenieButton() {\n return (\n <Box flexiblewidth>\n <GridCustom center fullheight>\n <ButtonStyled\n add\n disabled={!!this.props.preview}\n onClick={() => this.props.history.push('/ogloszenia/nowe')}\n className=\"btn\" >\n Dodaj nowe ogÅ‚oszenie\n </ButtonStyled>\n </GridCustom>\n </Box>\n )\n }\n\n renderOgloszenie(o) {\n const status = parseInt(o.ogloszenie.status.id);\n const isDraft = status === parseInt(this.roboczeStatusId);\n const isPublished = status === parseInt(this.obublikowaneStatusId);\n const isLocked = isAdvertisementLocked(o.ogloszenie.status);\n const { dataOpublikowania } = o.ogloszenie;\n return (\n <Box\n className=\"box--advertisement\"\n flexiblewidth\n tag=\"li\"\n titleOneRow={o.tytul || '-'}\n key={o.id}\n ariaLabelMoreOptions={`RozwiÅ„ opcje ogÅ‚oszenia ${o.tytul}: edytuj, skopiuj, usuÅ„`}\n boxWithMenu={(\n <>\n <h3 className=\"sr-only\">Menu wiÄ™cej opcji ogÅ‚oszenia</h3>\n <ul>\n <li>\n <ButtonStyled\n disabled={!isDraft && !isPublished}\n onClick={() => this.props.history.push(\n URLS.advertisementsEdit.getUrl(o.ogloszenie.id)\n )}\n className=\"box__menu-item\" >\n Edytuj\n </ButtonStyled>\n </li>\n <li>\n <ButtonStyled\n className=\"box__menu-item\"\n disabled={isLocked}\n onClick={() => {\n this.handleCopyOgloszenie(o.ogloszenie.id);\n // hide box menu by triggering click\n triggerBodyClick();\n }}\n >\n Skopiuj\n </ButtonStyled>\n </li>\n <li>\n <ButtonStyled\n onClick={() => {\n this.setState(\n {removedOgloszenieId: o.ogloszenie.id, removedOgloszenieTitle: o.tytul},\n () => triggerBodyClick() // hide box menu by triggering click\n );\n }}\n disabled={!isDraft}\n className=\"box__menu-item\" >\n UsuÅ„\n </ButtonStyled>\n </li>\n <li>\n <ButtonStyled\n onClick={() => {\n this.setState(\n {cancelledOgloszenieId: o.ogloszenie.id, cancelledOgloszenieTitle: o.tytul},\n () => triggerBodyClick() // hide box menu by triggering click\n );\n }}\n disabled={!isPublished}\n className=\"box__menu-item\" >\n Anuluj\n </ButtonStyled>\n </li>\n </ul>\n </>\n )} >\n\n {this.state.copiedOgloszenieIds.includes(o.ogloszenie.id) && <Text info>OgÅ‚oszenie skopiowane</Text>}\n <GridCustom fullwidth>\n <FieldWithLabel label=\"Numer ogÅ‚oszenia\">\n <Text>{o.ogloszenie.numer || '-'}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Status\">\n <Text>{o.ogloszenie.status.nazwa}</Text>\n {status === this.obublikowaneStatusId && o.ogloszenie.czyMaKopieRobocza && <Text info>+ Posiada kopiÄ™ roboczÄ…</Text>}\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth>\n <FieldWithLabel label={`Data ${dataOpublikowania?.length > 0 && dataOpublikowania > dateToString(new Date()) ? 'odroczonej ' : ''}publikacji`}>\n <Text>{dataOpublikowania || '-'}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Termin skÅ‚adania ofert\">\n <Text>{o.terminOfert || '-'}</Text>\n </FieldWithLabel>\n </GridCustom>\n <FieldWithLabel label=\"Czy dopuszczalna oferta częściowa?\">\n <Text>\n {o.czyDopuszczalnaOfertaCzesciowa ? 'TAK' : 'NIE'}\n {o.czyDopuszczalnaOfertaCzesciowa && ` (Części: ${o.liczbaZamowien})`}\n </Text>\n </FieldWithLabel>\n\n <BadgeAnchor style={{width: '100%'}}>\n <ButtonStyled\n className='corner-button'\n disabled={isLocked}\n primary\n tag={Link}\n to={`/ogloszenia/${o.ogloszenie.id}${status === this.roboczeStatusId ? '/robocza' : ''}`}\n >\n Pokaż szczegóły<span className=\"sr-only\">{` ogÅ‚oszenia ${o.tytul}`}</span>\n </ButtonStyled>\n {o.badge_count > 0 && <Badge label={o.badge_count} />}\n </BadgeAnchor>\n\n\n </Box>\n )\n }\n\n renderRemovingOgloszenie() {\n return this.renderActionDialog('usunąć', 'UsuÅ„', 'removed', this.handleRemoveOgloszenie)\n }\n\n renderCopiedMessage(baseOgloszenieTytul) {\n let content;\n if (this.state.fetchActionError.length) {\n content = (\n <Text error role=\"alert\">Nie udaÅ‚o siÄ™ skopiować ogÅ‚oszenia. {this.state.fetchActionError}</Text>\n );\n } else {\n content = `OgÅ‚oszenie ${baseOgloszenieTytul.length > 0 ? '\"' + baseOgloszenieTytul + '\"' : 'bez tytuÅ‚u'} zostaÅ‚o skopiowane.`;\n }\n return (\n <DialogCustom\n className=\"dialog\"\n dialogTitle={content}\n onClose={() => this.setState({ copyingOgloszenieId: null, fetchActionError: '' })}\n >\n <GridCustom centerVertical flexEnd>\n <ButtonStyled onClick={() => this.setState({copyingOgloszenieId: null, fetchActionError: ''})} primary>OK</ButtonStyled>\n </GridCustom>\n </DialogCustom>\n )\n }\n\n renderCancellingOgloszenie() {\n return this.renderActionDialog('anulować', 'Anuluj', 'cancelled', this.handleCancelOgloszenie)\n }\n\n renderActionDialog(verbString, actionName, actionPrefix, fetchHandler) {\n let content, title = null;\n if (this.state.fetchActionError.length) {\n title = `Nie udaÅ‚o siÄ™ ${verbString} ogÅ‚oszenia.`;\n\n content = (\n <>\n <Text error role=\"alert\">{this.state.fetchActionError}</Text>\n <GridCustom centerVertical flexEnd>\n <ButtonStyled\n onClick={() => this.setState(\n {fetchActionError: '', [`${actionPrefix}OgloszenieId`]: null, [`${actionPrefix}OgloszenieTitle`]: ''}\n )}\n primary>\n OK\n </ButtonStyled>\n </GridCustom>\n </>\n );\n } else {\n title = `Czy na pewno chcesz ${verbString} ogÅ‚oszenie \"${this.state[`${actionPrefix}OgloszenieTitle`] || 'Bez tytuÅ‚u'}\"?`;\n\n content = (\n <GridCustom centerVertical flexEnd>\n <ButtonStyled onClick={this.handleCloseActionDialog} cancel>Nie. Wróć do listy</ButtonStyled>\n <ButtonStyled onClick={fetchHandler} remove>{actionName} ogÅ‚oszenie</ButtonStyled>\n </GridCustom>\n );\n }\n return (\n <DialogCustom \n className=\"dialog\"\n dialogTitle={title}\n dialogRef={(c) => { this.actionComponent = c }}\n onClose={() => { this.setState({ [`${actionPrefix}OgloszenieId`]: null, [`${actionPrefix}OgloszenieTitle`]: '' }) }}\n >\n {content}\n </DialogCustom>\n )\n }\n}\n\nexport { Ogloszenia };\n","import React from 'react';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { getSerializedObject } from '../../../serializers';\nimport { ButtonStyled, Text } from '../../common';\nimport { BaseComponent } from '../common';\nimport { DraftToComponents } from './DraftToComponents';\n\n\nclass PomocEkranowa extends BaseComponent {\n\n // basic functions\n\n componentDidMount() {\n // id content declared in props, render it\n if (this.props.content) {\n this.setState({initializingOn: false, pomoc: this.props.content});\n return\n }\n // get pomoc from server\n this.fetchInitialData();\n }\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n this.setState({\n initializingOn: false,\n pomoc: getSerializedObject(\n data, {nonRecursiveKeys: ['tresc', ]}).pomoc,\n });\n }\n\n handleFetchError(data) {\n // do nothing, don't render error\n this.xhrFetch = null; // clean xhr object\n this.setState({initializingOn: false});\n }\n\n handleFetchIncorrectStatus(status) {\n // do nothing, don't render error\n this.xhrFetch = null; // clean xhr object\n this.setState({initializingOn: false});\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n showText: true,\n pomoc: {},\n }\n }\n\n getFetchUrl() {\n return `/api/help/${this.props.ekran}`\n }\n\n getFetchData() {\n return {screen: this.props.ekran}\n }\n\n // rendering\n\n render() {\n if (this.state.initializingOn || !Object.keys(this.state.pomoc).length) { return null }\n const {\n pomoc,\n showText,\n } = this.state;\n return (\n <section className=\"help\">\n <Text tag=\"h2\" accentHeader>{pomoc.naglowek}</Text>\n <ButtonStyled lite onClick={() => this.setState(prevState => ({showText: !prevState.showText}))} className=\"help__show-more\">{showText ? 'ZwiÅ„ pomoc' : 'RozwiÅ„ pomoc'}</ButtonStyled>\n {showText && <DraftToComponents content={pomoc.tresc} />}\n </section>\n )\n }\n}\n\n\nPomocEkranowa.contextType = AdvertisementContext;\n\n\nexport { PomocEkranowa };\n","import React from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport {\n hasPerspectiveInstitutions,\n hasPerspectiveRegions,\n serializePerspectiveForSelect\n} from '../../../helpers';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { ButtonStyled, DialogCustom, FieldWithLabel, GridCustom, Text, TextFieldCustom } from '../../common';\nimport {\n FormBaseComponent,\n INSTITUTION_NUMBER_DEFAULT_DICT,\n ProjectNumberSelectsWithPerspectives\n} from '../common';\n\nconst SELECTS_CODES = {\n programOperacyjny: 'AAAA',\n osPriorytetowa: '00',\n dzialanie: '00',\n dzialanieIpoddzialanie: '00.00',\n region: '00',\n instytucja: 'AA.00',\n};\n\n\nclass Form extends FormBaseComponent {\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n if ((data.perspectives || []).length) {\n const perspectives =\n serializePerspectiveForSelect(data).perspectives;\n this.setState(\n {\n initializingOn: false,\n fetchError: '',\n perspektywa: perspectives[0],\n perspektywy: perspectives,\n },\n () => {\n this.setNumberParts();\n this.setState({fullNumber: this.getFullNumber()});\n }\n );\n return\n }\n this.handleFetchError({});\n }\n\n handleFetchIncorrectStatus(status) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n initializingOn: false,\n fetchError: this.getFetchIncorrectStatusError(status),\n });\n }\n\n handleChangePerspektywa = (data, callback) => {\n this.setState(\n {\n perspektywa: data.perspective,\n programOperacyjny: data.programme,\n osPriorytetowa: data.priority,\n dzialanie: data.activity,\n numerInstytucji: data.institutionNumber,\n region: data.region,\n instytucja: data.institution,\n },\n () => {\n this.setNumberParts();\n this.updateNumber();\n if (callback) {\n callback();\n }\n }\n );\n }\n\n handleChangeProgramOperacyjny = (data, callback) => {\n this.setState(\n {\n programOperacyjny: data.programme,\n osPriorytetowa: data.priority,\n dzialanie: data.activity,\n region: data.region,\n instytucja: data.institution,\n },\n () => {\n this.updateNumber();\n if (callback) {\n callback();\n }\n }\n );\n };\n\n handleChangeOsPriorytetowa = (data, callback) => {\n this.setState(\n {\n osPriorytetowa: data.priority,\n dzialanie: data.activity,\n region: data.region,\n instytucja: data.institution,\n },\n () => {\n this.updateNumber();\n if (callback) {\n callback();\n }\n }\n );\n };\n\n handleChangeDzialanie = (data, callback) => {\n this.setState(\n {\n dzialanie: data.activity,\n region: data.region,\n instytucja: data.institution,\n },\n () => {\n this.updateNumber();\n if (callback) { callback()}\n }\n );\n };\n\n handleChangeRegion = (data) => {\n this.setState(\n {region: data.region},\n this.updateNumber\n );\n };\n\n handleChangeInstytucja = (data) => {\n this.setState(\n {instytucja: data.institution},\n this.updateNumber\n );\n };\n\n changeInputNumber(value, attrName, defaultDict) {\n value = value.replace(/[^\\da-zA-Z-/.]/, '').toUpperCase();\n this.setState(\n prevState => ({\n [attrName]: {\n ...prevState[attrName],\n ...(!value ? defaultDict : {value, code: value, label: value}),\n }\n }),\n this.updateNumber\n );\n }\n\n handleChangeOthers = (value) => {\n this.changeInputNumber(\n value, 'suffix', {...this.getSuffixDefaultDict()});\n };\n\n handleChangeInstitutionNumber = (value) => {\n this.changeInputNumber(\n value, 'numerInstytucji', INSTITUTION_NUMBER_DEFAULT_DICT);\n }\n\n handleSave = () => {\n this.setState(\n {savingOn: true, errors: {}},\n () => {\n let data = {\n nazwa: this.state.nazwa.trim(),\n programOperacyjny: (this.state.programOperacyjny || {}).value || 0,\n osPriorytetowa: (this.state.osPriorytetowa || {}).value || 0,\n dzialanie: (this.state.dzialanie || {}).value || 0,\n numer: this.state.suffix.value || '',\n };\n\n const { perspektywa } = this.state;\n data['perspektywa'] = perspektywa.value;\n if (hasPerspectiveRegions(perspektywa)) {\n if (!this.props.isProjekt) {\n data['institutionNumber'] =\n this.state.numerInstytucji.value || '';\n }\n data['region'] = (this.state.region || {}).value || 0;\n }\n if (hasPerspectiveInstitutions(perspektywa)) {\n data['institution'] = (\n this.state.instytucja || {}).value || 0;\n }\n\n // save object on server\n this.xhrFetchSave = fetchApi(\n this.props.saveUrl,\n 'POST',\n {},\n getSerializedObject(data, {toServer: true}),\n this.handleFetchSaveSuccess,\n this.handleFetchSaveError,\n this.handleFetchSaveIncorrectStatus,\n this.handleShowSaveErrors,\n );\n }\n );\n }\n\n handleFetchSaveSuccess = (data) => {\n super.handleFetchSaveSuccess(data);\n this.props.onSave(getSerializedObject(data)[this.props.isProjekt ? 'projekt' : 'nabor']);\n }\n\n // helpers\n\n preState(props) {\n this.parts = [];\n }\n\n getSuffixDefaultDict() {\n return {\n value: '',\n code: this.props.suffixMask,\n label: this.props.suffixMask,\n }\n }\n\n getAdditionalState(props) {\n return {\n // fields\n nazwa: '',\n perspektywa: null,\n programOperacyjny: null,\n osPriorytetowa: null,\n dzialanie: null,\n // this one is form old perspective and enrollment\n numerInstytucji: {...INSTITUTION_NUMBER_DEFAULT_DICT},\n region: null,\n instytucja: null,\n suffix: {...this.getSuffixDefaultDict()},\n // helpers\n fullNumber: '',\n perspektywy: [],\n osiePriorytetowe: [],\n dzialania: [],\n regiony: [],\n instytucje: [],\n }\n }\n\n postState(props) {\n this.xhrFetchSave = null;\n this.state['fullNumber'] = this.getFullNumber();\n }\n\n getFetchUrl() {\n return API_URLS.perspectives.path\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać danych do formularza. ${translateErrorMessage(message)}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Nie udaÅ‚o siÄ™ pobrać danych do formularza. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n setNumberParts() {\n let parts = [\n ['', 'programOperacyjny'],\n ['.', 'osPriorytetowa'],\n ];\n const { perspektywa } = this.state;\n const hasRegions = hasPerspectiveRegions(perspektywa);\n const hasInstitutions = hasPerspectiveInstitutions(perspektywa);\n\n if (hasRegions) {\n parts.push(['.', 'dzialanie', 'dzialanieIpoddzialanie']);\n if (!this.props.isProjekt) {\n parts.push(['-', 'numerInstytucji']);\n }\n parts.push(['-', 'region']);\n }\n if (hasInstitutions) {\n parts.push(['.', 'dzialanie']);\n parts.push(['-', 'instytucja']);\n }\n\n parts.push(['-', 'suffix']);\n this.parts = parts;\n }\n\n getFullNumber() {\n let fullNumber = '';\n for (let [separator, attrName, alternativeAttrName] of this.parts) {\n const attrValue = this.state[attrName];\n fullNumber += `${separator}${attrValue === null \n ? (SELECTS_CODES[alternativeAttrName] || SELECTS_CODES[attrName])\n : attrValue.code\n }`;\n }\n return fullNumber\n }\n\n updateNumber() {\n const fullNumber = this.getFullNumber();\n this.setState(\n {fullNumber},\n () => {\n if (this.props.onNumberChange) {\n this.props.onNumberChange(fullNumber);\n }\n }\n );\n }\n\n // rendering\n\n render() {\n\n let content;\n if (this.state.initializingOn) {\n content = <Text info tabIndex=\"1\">Trwa inicjalizacja danych...</Text>;\n } else {\n const { title } = this.props;\n content = (\n <>\n <h2 id=\"addDialogLabel\" className=\"text--main-header\"> {title}</h2>\n {this.renderNumer()}\n {this.renderNazwa()}\n <GridCustom flexEnd className=\" box__button-container\">\n <ButtonStyled\n cancel\n disabled={this.state.savingOn}\n onClick={this.props.onClose}\n >Anuluj</ButtonStyled>\n <ButtonStyled\n disabled={this.state.savingOn}\n primary\n onClick={this.handleSave}\n >\n Zapisz<span className=\"sr-only\"> projekt</span>\n </ButtonStyled>\n </GridCustom>\n {this.renderError('fetchError')}\n {this.renderError('fetchSaveError')}\n </>\n );\n }\n\n return (\n <DialogCustom\n ariaLabelledby=\"addDialogLabel\"\n className=\"dialog-long-content\"\n onClose={this.props.onClose}\n >\n {content}\n </DialogCustom>\n\n )\n }\n\n renderNumer() {\n return (\n <>\n <GridCustom centerVertical>\n <Text className=\"text--project-info\">PowstaÅ‚y numer:</Text> <Text accentHeader>{this.state.fullNumber}</Text>\n </GridCustom>\n {this.renderSelects()}\n {this.renderOthers()}\n </>\n )\n }\n\n renderSelects() {\n const { errors } = this.state;\n return (\n <ProjectNumberSelectsWithPerspectives\n activity={this.state.dzialanie}\n activityErrors={errors.dzialanie || []}\n disabled={this.state.savingOn}\n institution={this.state.instytucja}\n institutionErrors={errors.instytucja || []}\n institutionNumber={this.state.numerInstytucji}\n institutionNumberErrors={errors.numerInstytucji || []}\n perspective={this.state.perspektywa}\n perspectiveErrors={errors.perspektywa}\n perspectives={this.state.perspektywy}\n priority={this.state.osPriorytetowa}\n priorityErrors={errors.osPriorytetowa || []}\n programme={this.state.programOperacyjny}\n programmeErrors={errors.programOperacyjny || []}\n region={this.state.region}\n regionErrors={errors.region || []}\n withInstitutionNumber={!this.props.isProjekt}\n onChangeActivity={this.handleChangeDzialanie}\n onChangeInstitution={this.handleChangeInstytucja}\n onChangeInstitutionNumber={this.handleChangeInstitutionNumber}\n onChangePerspective={this.handleChangePerspektywa}\n onChangePriority={this.handleChangeOsPriorytetowa}\n onChangeProgramme={this.handleChangeProgramOperacyjny}\n onChangeRegion={this.handleChangeRegion}\n />\n )\n }\n\n renderOthers() {\n const { errors, suffix } = this.state;\n const isSuffixInvalid = (errors.numer || []).length > 0;\n const maxSuffixLength = this.props.suffixMask.length\n return (\n <FieldWithLabel\n label=\"Dalsza część numeru\"\n labelFor=\"suffix_id\"\n tag=\"label\"\n selectRef={React.createRef()}\n >\n <TextFieldCustom\n aria-describedby={`suffix_mask_info${isSuffixInvalid ? ' numer_instytucji_error' : ''}`}\n aria-label={`Dalsza część numeru. Wpisano ${suffix.value.length} znaków.`}\n aria-required={true}\n aria-valuemax={maxSuffixLength}\n characterCount\n clearFieldContext=\"dalsza część numeru\"\n disabled={this.state.savingOn}\n fullwidth\n id=\"suffix_id\"\n invalid={isSuffixInvalid}\n maxLength={maxSuffixLength}\n value={suffix.value}\n onChange={event => this.handleChangeOthers(event.target.value)}\n onClear={event => this.handleChangeOthers('')} />\n {isSuffixInvalid && <ul id=\"numer_instytucji_error\">{errors.numer.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n <Text info id=\"suffix_mask_info\"><span className=\"sr-only\">Wpisz numer zgodnie ze wzorem: </span>{this.props.suffixMask}</Text>\n </FieldWithLabel>\n )\n }\n\n renderNazwa() {\n const { errors, nazwa, savingOn } = this.state;\n const isNazwaInvalid = (errors.nazwa || []).length > 0;\n return (\n <FieldWithLabel label=\"TytuÅ‚\" tag=\"label\" labelFor=\"title_id\">\n <TextFieldCustom\n aria-describedby={isNazwaInvalid ? 'title_error' : null}\n aria-label={`TytuÅ‚, maksymalna liczba znaków: 200. Wpisano ${nazwa.length} znaków.`}\n aria-required={true}\n aria-valuemax={200}\n characterCount\n clearFieldContext=\"tytuÅ‚\"\n disabled={savingOn}\n invalid={isNazwaInvalid}\n id=\"title_id\"\n maxLength={200}\n required\n fullwidth\n value={nazwa}\n onChange={(event) => this.setState({nazwa: event.target.value})}\n onClear={(event) => this.setState({nazwa: ''})} />\n {isNazwaInvalid && <ul id=\"title_error\">{errors.nazwa.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n </FieldWithLabel>\n )\n }\n\n renderError(errorName) {\n if (this.state[errorName].length) {\n return (\n <GridCustom centerHorizontal>\n <Text error>{this.state[errorName]}</Text>\n <ButtonStyled onClick={() => this.setState({[errorName]: ''})} lite>OK</ButtonStyled>\n </GridCustom>\n );\n }\n return null\n }\n}\n\n\nexport { Form };\n","import React, { useState } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { ButtonStyled, Ellipsis, FieldWithLabel, GridCustom, Text } from '../../common';\n\n\nconst Ogloszenie = (props) => {\n const [showDetails, setShowDetails] = useState(false);\n const ogloszenie = props.ogloszenie;\n const wersja = ogloszenie.wersja;\n\n return (\n <section className=\"separate-content\">\n <Ellipsis>\n <Text className=\"text--title\">{wersja.tytul || '-'}</Text>\n </Ellipsis>\n <GridCustom>\n <FieldWithLabel label=\"Numer\">\n <Text>{ogloszenie.numer || '-'}</Text>\n </FieldWithLabel>\n {showDetails && (\n <FieldWithLabel label=\"Status\">\n <Text>{ogloszenie.status.nazwa}</Text>\n </FieldWithLabel>\n )}\n </GridCustom>\n {showDetails && (\n <GridCustom>\n <FieldWithLabel label=\"Data publikacji\">\n <Text>{wersja.dataOpublikowania || '-'}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Termin skÅ‚adania ofert\">\n <Text>{wersja.terminOfert || '-'}</Text>\n </FieldWithLabel>\n </GridCustom>\n )}\n <ButtonStyled\n lite\n onClick={() => setShowDetails(prevShowDetails => !prevShowDetails)}\n aria-label={(showDetails ? 'ZwiÅ„' : 'RozwiÅ„') + ' szczegóły ogÅ‚oszenia ' + (wersja.tytul || 'numer' + ogloszenie.numer)}\n >\n {(showDetails ? 'ZwiÅ„ ' : 'RozwiÅ„ ') + ' szczegóły ogÅ‚oszenia'}\n </ButtonStyled>\n <ButtonStyled\n tag={Link}\n to={`/ogloszenia/${ogloszenie.id}${ogloszenie.status.label === 'DRAFT' ? '/robocza' : ''}`}\n primary\n aria-label={'Przejdź do ogÅ‚oszenia ' + (wersja.tytul || 'numer ' + ogloszenie.numer)} >\n Przejdź do ogÅ‚oszenia\n </ButtonStyled>\n </section>\n );\n}\n\nexport { Ogloszenie };\n","import React, { Component } from 'react';\n\nimport { getUserFullName } from '../../../helpers';\nimport { fetchApi } from '../../../fetch';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport {\n AuditData,\n Box,\n ButtonStyled,\n FieldWithLabel,\n Text\n} from '../../common';\nimport { Ogloszenie } from './Ogloszenie';\n\n\nclass Projekt extends Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n ogloszenia: [],\n detailsOn: false,\n initializingDetailsOn: false,\n removingOn: false,\n fetchError: '',\n }\n this.isProject = props.projekt.typ === 'project';\n\n this.xhrFetch = null;\n }\n\n // basic functions\n\n componentWillUnmount() {\n // abort api request if exists\n if (this.xhrFetch !== null) {\n this.xhrFetch.abort();\n }\n }\n\n // handlers\n\n handleShowOgloszenia = () => {\n this.setState(\n {\n detailsOn: true,\n initializingDetailsOn: true,\n fetchError: '',\n },\n this.getOgloszenia\n );\n }\n\n handleHideOgloszenia = () => {\n this.setState({\n detailsOn: false,\n initializingDetailsOn: false,\n fetchError: '',\n });\n }\n\n handleFetchOgloszeniaSuccess = (data) => {\n this.xhrFetch = null;\n this.setState({\n initializingDetailsOn: false,\n ogloszenia: getSerializedObject(data).ogloszenia,\n });\n }\n\n handleFetchOgloszeniaError = (data) => {\n this.xhrFetch = null;\n this.setState({\n initializingDetailsOn: false,\n fetchError: `Nie udaÅ‚o siÄ™ pobrać danych ogÅ‚oszeÅ„. ${translateErrorMessage(data.message)}`,\n });\n }\n\n handleFetchOgloszeniaIncorrectStatus = (status) => {\n this.xhrFetch = null;\n this.setState({\n initializingDetailsOn: false,\n fetchError: `Nie udaÅ‚o siÄ™ pobrać danych ogÅ‚oszeÅ„. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`,\n });\n }\n\n handleCloseRemovingOn = () => {\n this.setState({removingOn: false});\n }\n\n // helpers\n\n getOgloszenia() {\n // save ogloszenia from server\n this.xhrFetch = fetchApi(\n `/api/announcements/project_enrollment/${this.props.projekt.id}`,\n 'GET',\n {},\n {},\n this.handleFetchOgloszeniaSuccess,\n this.handleFetchOgloszeniaError,\n this.handleFetchOgloszeniaIncorrectStatus,\n );\n }\n\n // rendering\n\n render() {\n const { projekt } = this.props;\n const { detailsOn } = this.state;\n const isProject = projekt.typ === 'project';\n\n return (\n <Box titleOneRow={projekt.calyNumer} tag=\"li\" flexiblewidth>\n <FieldWithLabel label={isProject ? 'Projekt' : 'Nabór'}>\n <Text>{projekt.nazwa || '-'}</Text>\n </FieldWithLabel>\n <div>\n <ButtonStyled\n primary\n onClick={detailsOn ? this.handleHideOgloszenia : this.handleShowOgloszenia}\n >\n {detailsOn ? 'Ukryj ' : 'Pokaż '} szczegóły {isProject ? 'projektu ' : 'naboru '}\n <span className=\"sr-only\">{projekt.nazwa}</span>\n </ButtonStyled>\n {this.renderOgloszeniaDetails()}\n {this.renderRemovingPart()}\n </div>\n <AuditData\n className=\"box--half-width\"\n createdAt={projekt.dataUtworzenia}\n createdBy={getUserFullName(projekt.ktoUtworzyl || {})}\n flexiblewidth\n modifiedAt={projekt.dataModyfikacji}\n modifiedBy={getUserFullName(projekt.ktoModyfikowal || {})}\n />\n </Box>\n );\n }\n\n renderOgloszeniaDetails() {\n if (!this.state.detailsOn) { return null }\n if (this.state.initializingDetailsOn) {\n return <Text info>Trwa pobieranie danych ogÅ‚oszeÅ„...</Text>\n }\n if (this.state.fetchError.length) {\n return <Text error role=\"alert\">{this.state.fetchError}</Text>\n }\n\n const { ogloszenia } = this.state;\n const { projekt } = this.props;\n let ogloszenia_;\n if (ogloszenia.length) {\n ogloszenia_ = (\n <ul>\n {ogloszenia.map(o => <li key={o.id}><Ogloszenie ogloszenie={o} /></li>)}\n </ul>\n );\n } else {\n ogloszenia_ = <Text error>Ten {this.isProject ? 'projekt' : 'nabór'} nie ma przypisanych ogÅ‚oszeÅ„.</Text>;\n }\n return (\n <>\n <Text tag=\"h3\" accentHeader>\n Lista ogÅ‚oszeÅ„\n <span className=\"sr-only\">\n {` podpiÄ™tych do ${this.isProject ? 'projektu' : 'naboru'} ${projekt.nazwa}`}\n </span>:\n </Text>\n {ogloszenia_}\n </>\n )\n }\n\n renderRemovingPart() {\n if (!this.state.removingOn) {\n return (\n <ButtonStyled\n remove\n onClick={() => this.setState({removingOn: true})}\n >\n UsuÅ„{this.isProject ? ' projekt ' : ' nabór '}<span className=\"sr-only\"> {this.props.projekt.nazwa}</span>\n </ButtonStyled>\n )\n }\n\n if (this.props.projekt.maOpublikowaneOgloszenia) {\n return (\n <>\n <Text error role=\"alert\">Tego {this.isProject ? 'projektu' : 'naboru'} nie można usunąć, ponieważ ma przypisane ogÅ‚oszenia już opublikowane.</Text>\n <ButtonStyled onClick={this.handleCloseRemovingOn} primary>OK</ButtonStyled>\n </>\n )\n }\n const { projekt } = this.props;\n let msg;\n if (projekt.maRoboczeOgloszenia) {\n msg = (\n <Text error role=\"alert\">\n Ten {this.isProject ? 'projekt' : 'nabór'} ma przypisane ogÅ‚oszenia o statusie \"Robocze\" i po usuniÄ™ciu zostanÄ… one od niego odpiÄ™te.\n </Text>\n );\n } else {\n msg = <Text info role=\"alert\">Ten {this.isProject ? 'projekt' : 'nabór'} nie ma przypisanych ogÅ‚oszeÅ„ i może być bezpiecznie usuniÄ™ty.</Text>;\n }\n return (\n <>\n {msg}\n <ButtonStyled\n remove\n onClick={() => this.props.onRemove(projekt.id, this.isProject)}\n >\n UsuÅ„{this.isProject ? ' projekt ' : ' nabór '}<span className=\"sr-only\">{projekt.nazwa}</span>\n </ButtonStyled>\n <ButtonStyled onClick={this.handleCloseRemovingOn} cancel>Anuluj<span className=\"sr-only\"> usuwanie{this.isProject ? ' projektu ' : ' naboru '}{projekt.nazwa}</span></ButtonStyled>\n </>\n )\n }\n};\n\n\nexport { Projekt };\n","import React from 'react';\nimport { Switch } from '@rmwc/switch';\n\nimport { CZY_PROJEKT_CHOICES } from '../../../const';\nimport { fetchApi } from '../../../fetch';\nimport { filterProjects, PROJECTS_CLEANED_FILTERS } from '../../../filters';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { PROJECTS_SORTING_VALUES, sortProjects } from '../../../sorters';\nimport {\n Box,\n ButtonStyled,\n Container,\n DialogCustom,\n FieldWithLabel,\n GridCustom,\n Select,\n Text,\n TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { BaseComponent } from '../common';\nimport { PomocEkranowa } from '../zarzadzanieTrescia/PomocEkranowa';\nimport { Form } from './Form';\nimport { Projekt } from './Projekt';\n\n\nclass Projekty extends BaseComponent {\n\n // basic functions\n\n componentDidMount() {\n if (this.props.preview) {\n this.setState({initializingOn: false});\n return\n }\n\n document.title = \"Baza KonkurencyjnoÅ›ci - projekty\";\n super.componentDidMount();\n };\n\n // handlers\n\n handleFetchSuccess = (data) => {\n super.handleFetchSuccess(data);\n this.setState({\n projekty: getSerializedObject(data).projektyNabory,\n initializingOn: false,\n });\n }\n\n handleSave = (data) => {\n this.setState(prevState => {\n return {\n formOn: false,\n projekty: [...prevState.projekty, data],\n }\n });\n }\n\n handleToggleFilters(checked) {\n if (checked) {\n this.setState({filtersAreOn: true});\n } else {\n this.setState({\n filtersAreOn: false,\n filters: PROJECTS_CLEANED_FILTERS,\n });\n }\n }\n\n handleChangeFilter(name, value) {\n this.setState(prevState => {\n return {filters: Object.assign({}, prevState.filters, {[name]: value})}\n });\n }\n\n handleRemove = (id, isProject) => {\n // remove project on server\n this.xhrFetch = fetchApi(\n `/api/${isProject ? 'project' : 'enrollment'}/${id}`,\n 'DELETE',\n {},\n {},\n this.handleFetchRemoveSuccess,\n this.handleFetchRemoveError,\n this.handleFetchRemoveIncorrectStatus,\n );\n }\n\n handleFetchRemoveSuccess = (data) => {\n this.xhrFetch = null;\n const serializedData = getSerializedObject(data);\n this.setState(prevState => ({\n projekty: prevState.projekty.filter(\n p => parseInt(p.id) !== parseInt((serializedData.projekt || serializedData.nabor || {}).id),\n ),\n removingError: '',\n }));\n }\n\n handleFetchRemoveError = (data) => {\n this.xhrFetch = null; // clean xhr object\n this.setState({removingError: `Nie udaÅ‚o siÄ™ usunąć obiektu. ${translateErrorMessage(data.message)}`});\n }\n\n handleFetchRemoveIncorrectStatus = (status) => {\n this.xhrFetch = null; // clean xhr object\n this.setState({removingError: `Nie udaÅ‚o siÄ™ usunąć obiektu. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`});\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n currentSortingValue: {\n value: PROJECTS_SORTING_VALUES[0][0],\n label: PROJECTS_SORTING_VALUES[0][1],\n },\n czyNewProjekt: true,\n formOn: false,\n filtersAreOn: false,\n filters: Object.assign({}, PROJECTS_CLEANED_FILTERS),\n projekty: [],\n removingError: '',\n }\n }\n\n getFetchUrl() {\n return '/api/project_enrollment'\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać danych projektów i naborów. ${translateErrorMessage(message)}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Nie udaÅ‚o siÄ™ pobrać danych projektów i naborów. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n // rendering\n\n renderContent() {\n const {\n currentSortingValue,\n filters,\n filtersAreOn,\n formOn,\n projekty\n } = this.state;\n\n const projects = sortProjects(\n filterProjects(projekty, filtersAreOn, filters),\n currentSortingValue.value\n );\n\n const isPreview = !!this.props.preview;\n\n return (\n <>\n <PomocEkranowa ekran=\"projects_list_advertiser\" content={isPreview ? this.props.content : null}/>\n <Text tag=\"h2\" mainHeader>Lista projektów i naborów</Text>\n <Text info className=\"text--counter\">Liczba wyników: {projects.length}</Text>\n <Container className=\" filters-container\">\n <GridCustom>\n <FieldWithLabel label=\"Sortuj\" tag=\"label\" selectRef={React.createRef()}>\n <Select\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n value={currentSortingValue}\n isDisabled={isPreview}\n isSearchable={false}\n options={PROJECTS_SORTING_VALUES.map(([value, label]) => ({value, label}))}\n onChange={(selectedOption) => this.setState({currentSortingValue: selectedOption})}\n className=\"select-custom\"\n styles={customSelectStyles}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n />\n </FieldWithLabel>\n <FieldWithLabel\n className=\"filters-container__filters\"\n label=\"Filtruj\"\n tag=\"label\"\n labelFor=\"project_filters_id\"\n >\n <Switch\n aria-label={`Filtruj. Panel filtrów ${this.state.filtersAreOn ? 'otwarty, zawartość listy bÄ™dzie dopasowana po wpisaniu każdego nowego znaku w panelu filtrów.' : 'ukryty'}`}\n checked={filtersAreOn}\n disabled={isPreview}\n onChange={(ev) => this.handleToggleFilters(ev.target.checked)}\n id=\"project_filters_id\"\n />\n </FieldWithLabel>\n </GridCustom>\n </Container>\n <GridCustom flexL noWrap flexTop>\n {filtersAreOn && this.renderFilters()}\n <GridCustom tag=\"ul\">\n <Box flexiblewidth tag=\"li\">\n <div>\n <ButtonStyled\n add\n disabled={isPreview}\n onClick={(e) => {\n this.setState({formOn: true, czyNewProjekt: true});\n e.currentTarget.blur();\n }}>\n Dodaj projekt\n </ButtonStyled>\n <ButtonStyled\n add\n disabled={isPreview}\n onClick={(e) => {\n this.setState({formOn: true, czyNewProjekt: false});\n e.currentTarget.blur();\n }}>\n Dodaj nabór\n </ButtonStyled>\n </div>\n </Box>\n {projects.map(p => <Projekt key={p.id} projekt={p} onRemove={this.handleRemove} />)}\n </GridCustom>\n </GridCustom>\n {formOn && this.renderForm()}\n {this.state.removingError.length > 0 && this.renderRemovingErrorDialog()}\n </>\n )\n }\n\n renderFilters() {\n const filters = this.state.filters;\n return (\n <Container className=\"filters\">\n <GridCustom>\n <FieldWithLabel label=\"Numer projektu lub naboru\" tag=\"label\" labelFor=\"filters_project_number_id\">\n <TextFieldCustom\n autoFocus\n className=\"filters__input\"\n clearFieldContext=\"numer projektu lub naboru\"\n id=\"filters_project_number_id\"\n onChange={(ev) => this.handleChangeFilter('calyNumer', ev.target.value)}\n onClear={(ev) => this.handleChangeFilter('calyNumer', '')}\n value={filters.calyNumer}\n />\n </FieldWithLabel>\n <FieldWithLabel label=\"TytuÅ‚ projektu lub naboru\" tag=\"label\" labelFor=\"filters_project_title_id\">\n <TextFieldCustom\n clearFieldContext=\"tytuÅ‚ projektu\"\n value={filters.nazwa}\n onChange={(ev) => this.handleChangeFilter('nazwa', ev.target.value)}\n className=\"filters__input\"\n onClear={(ev) => this.handleChangeFilter('nazwa', '')}\n id=\"filters_project_title_id\" />\n </FieldWithLabel>\n <FieldWithLabel\n label=\"Typ obiektu\"\n tag=\"label\"\n selectRef={React.createRef()}\n >\n <Select\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n className=\"select-custom\"\n options={CZY_PROJEKT_CHOICES.map(s => ({value: s[0], label: s[1]}))}\n value={{value: filters.typ.value || CZY_PROJEKT_CHOICES[0][0], label: filters.typ.label || CZY_PROJEKT_CHOICES[0][1]}}\n onChange={(selectedOption) => this.handleChangeFilter('typ', selectedOption)}\n styles={customSelectStyles}\n />\n </FieldWithLabel>\n </GridCustom>\n </Container>\n )\n }\n\n renderForm() {\n let isProjekt, suffixMask, saveUrl, title;\n if (this.state.czyNewProjekt) {\n isProjekt = true;\n suffixMask = \"0000/00\";\n saveUrl = '/api/project';\n title = 'Dodaj projekt';\n } else {\n isProjekt = false;\n suffixMask = \"000/00\";\n saveUrl = '/api/enrollment';\n title = 'Dodaj nabór';\n }\n return <Form\n isProjekt={isProjekt}\n suffixMask={suffixMask}\n saveUrl={saveUrl}\n title={title}\n userProjectsNumbers={this.state.projekty.map(p => p.numer)}\n onClose={() => this.setState({formOn: false})}\n onSave={this.handleSave} />\n }\n\n renderRemovingErrorDialog() {\n return (\n <DialogCustom\n className=\"dialog\"\n dialogTitleError={this.state.removingError}\n onClose={() => this.setState({ removingError: '' })}\n >\n <GridCustom centerVertical flexEnd>\n <ButtonStyled onClick={() => this.setState({removingError: ''})} primary>OK</ButtonStyled>\n </GridCustom>\n </DialogCustom>\n )\n }\n}\n\n\nexport { Projekty };\n","import React, { useEffect, useState } from \"react\";\n\nimport {\n ButtonStyled,\n FieldWithLabel,\n GridCustom,\n Select,\n TextFieldCustom,\n Text,\n DialogCustom,\n} from \"../../common\";\nimport { customSelectStyles } from \"../../vars/vars\";\n\nimport { serializeObjectList } from \"../../../serializers\";\n\nimport { fetchApi } from \"../../../fetch\";\n\nimport {\n sortMiejsceRealizacjiFilter,\n sortProgrammeFilter,\n} from \"../../../sorters\";\n\nimport { FormKodCPV } from \"../ogloszenia/FormKodCPV\";\n\nconst EMPTY_VALUE = {\n value: 0,\n label: \"Wybierz\",\n};\n\nconst ORDER_ITEM_CATEGORIES = \"order_item_categories\";\n\nconst serializeProgrammeSelectStructure = (data) => {\n let data_ = {};\n for (let programme of Object.values(data)) {\n data_[programme.id] = `${programme.code.toUpperCase()} - ${programme.name}`;\n }\n return Object.entries(data_).sort(sortProgrammeFilter) || [];\n};\n\nconst removeEmptyArraysAndNulls = (obj) => {\n if (!obj) {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(obj).filter(\n ([_, value]) =>\n value !== null && (!Array.isArray(value) || value.length > 0)\n )\n );\n};\n\nexport const NewsletterSettingsFilter = (props) => {\n const [state, setState] = useState({\n isSelectOpen: false,\n dictionaries: {\n programOperacyjny: [],\n przedmiotZamowieniaKategoria: [],\n miejsceRealizacji: [],\n },\n currentDictionaries: {\n programOperacyjny: [],\n przedmiotZamowieniaKategoria: [],\n miejsceRealizacji: [],\n },\n errors: { errorNipOgloszeniodawcy: {} },\n filters: removeEmptyArraysAndNulls(props.filter) || {},\n isLoading: true,\n });\n\n useEffect(() => {\n fetchApi(\n \"/api/dictionaries/search-filters\",\n \"GET\",\n {},\n {},\n (data) => {\n const dictionaries = {\n przedmiotZamowieniaKategoria: serializeObjectList(\n data[ORDER_ITEM_CATEGORIES]\n ),\n programOperacyjny: serializeProgrammeSelectStructure(\n data.operation_programme\n ),\n miejsceRealizacji:\n Object.entries(data.location_id).sort(\n sortMiejsceRealizacjiFilter\n ) || [],\n };\n setState({ ...state, dictionaries: dictionaries, isLoading: false });\n },\n () => {},\n () => {}\n );\n }, []);\n\n /** Hook to filter out already selected dictionaries */\n useEffect(() => {\n const operationalProgramsIdsInFilter =\n state.filters.programme?.map((x) => `${x.value}`) ?? [];\n\n const fulfillmentPlacesIdsInFilter =\n state.filters.fulfillmentPlaces?.map((x) => x.value) ?? [];\n\n const currentDictionaries = {\n przedmiotZamowieniaKategoria:\n state.dictionaries.przedmiotZamowieniaKategoria,\n miejsceRealizacji: state.dictionaries.miejsceRealizacji.filter(\n (x) => !fulfillmentPlacesIdsInFilter.includes(x[0])\n ),\n programOperacyjny: state.dictionaries.programOperacyjny.filter(\n (x) => !operationalProgramsIdsInFilter.includes(x[0])\n ),\n };\n\n setState({ ...state, currentDictionaries });\n }, [state.filters, state.dictionaries]);\n\n const handleChangeFilter = (name, value) => {\n let dict = { [name]: value };\n if (name === \"advertiserIdentificationNumber\") {\n // allow to insert only letters and digits\n dict[\"advertiserIdentificationNumber\"] = value.replace(/[^a-zA-Z\\d]/, \"\");\n } else {\n dict[name] = value;\n }\n if (name === \"category\") {\n let updatedFilters = state.filters;\n updatedFilters.subcategory = undefined;\n setState({ ...state, filters: updatedFilters });\n delete dict[\"subcategory\"];\n }\n // clean error (just in case if exists)\n let errors = Object.assign({}, state.errors);\n delete errors[name];\n\n const newFilters = Object.assign({}, state.filters, dict);\n\n if (value?.length === 0 || !value) {\n delete newFilters[name];\n }\n\n setState({\n ...state,\n errors,\n filters: newFilters,\n });\n };\n\n const handleKeyDown = (event) => {\n if (event.key === \"Escape\") {\n if (state.isSelectOpen) {\n event.stopPropagation();\n } else {\n props.close();\n }\n }\n };\n\n return state.isLoading ? (\n <></>\n ) : (\n <DialogCustom\n onClose={props.close}\n className=\"dialog-long-content\"\n ariaLabelledby=\"addFilterLabel\"\n onKeyDown={handleKeyDown}\n >\n <h2 id=\"addFilterLabel\" className=\"text--main-header\">\n Filtr newslettera\n </h2>\n <section className=\"filters-dialog__filters-section\">\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"Program Operacyjny\"\n tag=\"label\"\n selectRef={React.createRef()}\n >\n <Select\n screenReaderStatus={() => {\n return \"Wybierz opcjÄ™ z listy rozwijanej\";\n }}\n className=\"select-custom\"\n isMulti\n options={state.currentDictionaries.programOperacyjny.map(\n ([value, label]) => ({ value, label })\n )}\n placeholder=\"Zacznij wpisywać...\"\n value={state.filters.programme}\n onChange={(selectedOption) =>\n handleChangeFilter(\"programme\", selectedOption || [])\n }\n onMenuOpen={() => setState({ ...state, isSelectOpen: true })}\n onMenuClose={() => setState({ ...state, isSelectOpen: false })}\n styles={customSelectStyles}\n noOptionsMessage={() => \"Brak wybranej opcji\"}\n />\n </FieldWithLabel>\n <FieldWithLabel\n label=\"Kategoria przedmiotu zamówienia\"\n tag=\"label\"\n selectRef={React.createRef()}\n >\n <Select\n screenReaderStatus={() => {\n return \"Wybierz opcjÄ™ z listy rozwijanej\";\n }}\n className=\"select-custom\"\n options={[EMPTY_VALUE].concat(\n ...state.currentDictionaries.przedmiotZamowieniaKategoria.map(\n (t) => ({\n value: t.id,\n label: t.nazwa,\n })\n )\n )}\n value={state.filters.category || EMPTY_VALUE}\n onChange={(selectedOption) => {\n handleChangeFilter(\n \"category\",\n selectedOption.value === 0 ? null : selectedOption\n );\n }}\n onMenuOpen={() => setState({ ...state, isSelectOpen: true })}\n onMenuClose={() => setState({ ...state, isSelectOpen: false })}\n styles={customSelectStyles}\n noOptionsMessage={() => \"Brak wybranej opcji\"}\n />\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"Podkategoria\"\n aria-label={\n state.filters.category !== null\n ? null\n : \"Podkategoria, pole nieaktywne. Aby wybrać podkategoriÄ™, musisz wybrać kategoriÄ™ przedmiotu zamówienia.\"\n }\n selectRef={React.createRef()}\n tag=\"label\"\n tabIndex={state.filters.category !== null ? null : \"0\"}\n >\n <Select\n screenReaderStatus={() => {\n return \"Wybierz opcjÄ™ z listy rozwijanej\";\n }}\n className=\"select-custom\"\n isDisabled={state.filters.category === null}\n options={\n state.filters.category === null\n ? [EMPTY_VALUE]\n : [EMPTY_VALUE].concat(\n ...(state.currentDictionaries.przedmiotZamowieniaKategoria\n .filter(\n (k) =>\n parseInt(k.id) ===\n parseInt(state.filters.category?.value)\n )[0]\n ?.podkategorie.map((p) => ({\n value: p.id,\n label: p.nazwa,\n })) ?? [])\n )\n }\n value={state.filters.subcategory || EMPTY_VALUE}\n onChange={(selectedOption) =>\n handleChangeFilter(\n \"subcategory\",\n selectedOption.value === 0 ? null : selectedOption\n )\n }\n onMenuOpen={() => setState({ ...state, isSelectOpen: true })}\n onMenuClose={() => setState({ ...state, isSelectOpen: false })}\n styles={customSelectStyles}\n aria-hidden={state.filters.category === null}\n aria-label={state.filters.category !== null && \"Podkategoria\"}\n noOptionsMessage={() => \"Brak wybranej opcji\"}\n />\n </FieldWithLabel>\n <FormKodCPV\n isMulti\n initial={state.filters.cpvItem}\n addKodCPV={(selectedOptions) =>\n handleChangeFilter(\"cpvItem\", selectedOptions || [])\n }\n />\n </GridCustom>\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"Miejsce realizacji\"\n tag=\"label\"\n selectRef={React.createRef()}\n >\n <Select\n screenReaderStatus={() => {\n return \"Wybierz opcjÄ™ z listy rozwijanej\";\n }}\n className=\"select-custom\"\n isMulti\n options={state.currentDictionaries.miejsceRealizacji.map((m) => ({\n value: m[0],\n label: m[1],\n }))}\n placeholder=\"Zacznij wpisywać...\"\n value={state.filters.fulfillmentPlaces}\n onChange={(selectedOption) =>\n handleChangeFilter(\"fulfillmentPlaces\", selectedOption || [])\n }\n onMenuOpen={() => setState({ ...state, isSelectOpen: true })}\n onMenuClose={() => setState({ ...state, isSelectOpen: false })}\n styles={{\n ...customSelectStyles,\n menuPortal: (provided, state) => ({\n ...provided,\n maxHeight: \"160px\",\n }),\n menuList: (provided, state) => ({\n ...provided,\n maxHeight: \"160px\",\n }),\n }}\n noOptionsMessage={() => \"Brak wybranej opcji\"}\n />\n </FieldWithLabel>\n <FieldWithLabel\n label=\"Numer identyfikacyjny ogÅ‚oszeniodawcy\"\n tag=\"label\"\n labelFor=\"filters_numer_identyfikacyjny_ogloszeniodawcy_id\"\n >\n <TextFieldCustom\n aria-describedby={\n (state.errors.errorNipOgloszeniodawcy || \"\").length > 0\n ? \"filters_numer_identyfikacyjny_ogloszeniodawcy_error\"\n : null\n }\n aria-label={`Numer identyfikacyjny ogÅ‚oszeniodawcy: 255. Wpisz tylko cyfry. Wpisano ${\n state.filters.advertiserIdentificationNumber?.length ?? 0\n } znaków.`}\n aria-valuemax={255}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"numer identyfikacyjny ogÅ‚oszeniodawcy\"\n id=\"filters_numer_identyfikacyjny_ogloszeniodawcy_id\"\n invalid={(state.errors.errorNipOgloszeniodawcy || \"\").length > 0}\n maxLength={255}\n onChange={(ev) =>\n handleChangeFilter(\n \"advertiserIdentificationNumber\",\n ev.target.value\n )\n }\n onClear={(ev) =>\n handleChangeFilter(\"advertiserIdentificationNumber\", \"\")\n }\n onKeyUp={(ev) =>\n handleChangeFilter(\n \"advertiserIdentificationNumber\",\n ev.target.value\n )\n }\n value={state.filters.advertiserIdentificationNumber ?? \"\"}\n />\n {(state.errors.errorNipOgloszeniodawcy || \"\").length > 0 && (\n <Text\n error\n id=\"filters_numer_identyfikacyjny_ogloszeniodawcy_error\"\n >\n {state.errors.errorNipOgloszeniodawcy}\n </Text>\n )}\n </FieldWithLabel>\n </GridCustom>\n </section>\n <GridCustom flexEnd>\n <ButtonStyled\n disabled={\n Object.keys(state.filters).filter((x) => x !== \"id\")?.length <= 0\n }\n onClick={() => {\n props.save(state.filters);\n }}\n primary\n >\n Zapisz\n </ButtonStyled>\n <ButtonStyled onClick={props.close} remove>\n Anuluj\n </ButtonStyled>\n </GridCustom>\n </DialogCustom>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { PomocEkranowa } from \"../zarzadzanieTrescia\";\nimport { Text } from \"../../common\";\nimport { Elevation, Switch } from \"rmwc\";\nimport {\n GridCustom,\n ButtonStyled,\n GridCellCustom,\n DialogCustom,\n} from \"../../common\";\nimport { Badge } from \"@rmwc/badge\";\nimport \"@rmwc/badge/badge.css\";\nimport { NewsletterSettingsFilter } from \"./NewsletterSettingsFilter\";\nimport { generateUUIDV4 } from \"../../../helpers\";\nimport { fetchApi } from \"../../../fetch\";\nimport { Link } from \"react-router-dom\";\nimport { dateToString } from \"../../../helpers\";\nimport { Pagination } from \"../../common\";\n\nexport const NewsletterSettings = ({ isPreview, content }) => {\n const [showDeleteFilterModal, setShowDeleteFilterModal] = useState(undefined);\n const [filterModalData, setFilterModalData] = useState({\n visible: false,\n filter: undefined,\n });\n const [filters, setFilters] = useState([]);\n const [advertisements, setAdvertisements] = useState([]);\n\n const yesterdayDate = dateToString(\n new Date(new Date().valueOf() - 1000 * 60 * 60 * 24)\n );\n\n const dayBeforeYesterdayDate = dateToString(\n new Date(new Date().valueOf() - 1000 * 60 * 60 * 24 * 2)\n );\n\n const [advertisementsFilters, setAdvertisementsFilters] = useState({\n page: 1,\n total: 1,\n day: yesterdayDate,\n status: \"new\",\n });\n\n const [updatedCount, setUpdatedCount] = useState(0);\n const [newCount, setNewCount] = useState(0);\n const [isBusy, setIsBusy] = useState(false);\n\n const PAGE_LIMIT = 5;\n\n const refreshUpdatedAnnouncementsCount = () => {\n return new Promise((resolve, reject) => {\n fetchApi(\n `/api/announcements?mode=newsletter&page=1&limit=1&day=${advertisementsFilters.day}&newsletter_status=updated`,\n \"GET\",\n {},\n {},\n (announcements) => {\n setUpdatedCount(announcements.meta.total);\n resolve();\n },\n () => {\n reject();\n },\n () => {\n reject();\n }\n );\n });\n };\n\n const refreshNewAnnouncementsCount = () => {\n return new Promise((resolve, reject) => {\n fetchApi(\n `/api/announcements?mode=newsletter&page=1&limit=1&day=${advertisementsFilters.day}&newsletter_status=new`,\n \"GET\",\n {},\n {},\n (announcements) => {\n setNewCount(announcements.meta.total);\n resolve();\n },\n () => {\n reject();\n },\n () => {\n reject();\n }\n );\n });\n };\n\n const refreshFilters = () => {\n fetchApi(\n \"/api/newsletter-filters\",\n \"GET\",\n {},\n {},\n (filters) => {\n const { newsletter_filters } = filters;\n\n const mappedFilters = newsletter_filters.map((filter) => {\n const modalFilter = filter.modal_settings;\n\n return {\n id: generateUUIDV4(),\n name: buildFilterName(modalFilter),\n filter: { ...modalFilter, id: filter.id },\n filterByPropertiesCount: countFilters(modalFilter),\n enabled: filter.enabled,\n };\n });\n\n setFilters(mappedFilters);\n },\n () => {},\n () => {}\n );\n };\n\n useEffect(() => {\n refreshFilters();\n }, []);\n\n useEffect(() => {\n setIsBusy(true);\n\n var promise1 = refreshAnnouncements();\n var promise2 = refreshUpdatedAnnouncementsCount();\n var promise3 = refreshNewAnnouncementsCount();\n\n Promise.all([promise1, promise2, promise3]).then(() => {\n setIsBusy(false);\n });\n }, [\n advertisementsFilters.page,\n advertisementsFilters.status,\n advertisementsFilters.day,\n ]);\n\n const countFilters = (filter) => {\n const modalFilterProperties = Object.keys(filter)\n .map((key) => {\n if (Array.isArray(filter[key]) && filter[key].length > 0) {\n return filter[key];\n } else if (!Array.isArray(filter[key]) && filter[key] && key !== \"id\") {\n return filter[key];\n }\n return null;\n })\n .filter((x) => x);\n\n return modalFilterProperties.length;\n };\n\n const refreshAnnouncements = () => {\n const filters = advertisementsFilters;\n\n return new Promise((resolve, reject) => {\n fetchApi(\n `/api/announcements?mode=newsletter&page=${filters.page}&limit=${PAGE_LIMIT}&day=${filters.day}&newsletter_status=${filters.status}`,\n \"GET\",\n {},\n {},\n (announcements) => {\n setAdvertisements(announcements.advertisements);\n setAdvertisementsFilters({\n ...advertisementsFilters,\n total: announcements.meta.total,\n });\n\n if (filters.status === \"new\") {\n setNewCount(announcements.meta.total);\n } else if (filters.status === \"updated\") {\n setUpdatedCount(announcements.meta.total);\n }\n resolve();\n },\n () => {\n reject();\n },\n () => {\n reject();\n }\n );\n });\n };\n\n const addFilter = (filter) => {\n if (Object.keys(filter)?.length > 0) {\n mapAndSaveFilter(null, filter, () => {\n refreshFilters();\n refreshAnnouncements();\n refreshUpdatedAnnouncementsCount();\n refreshNewAnnouncementsCount();\n });\n }\n };\n\n const editFilter = (id, filter) => {\n mapAndSaveFilter(filter.id, filter, () => {\n const updatedFilters = filters.map((existingFilter) => {\n if (existingFilter.id === id) {\n return {\n id: id,\n name: buildFilterName(filter),\n filter: filter,\n filterByPropertiesCount: countFilters(filter),\n };\n } else {\n return existingFilter;\n }\n });\n\n setFilters(updatedFilters);\n refreshAnnouncements();\n refreshUpdatedAnnouncementsCount();\n });\n };\n\n const mapAndSaveFilter = (id, filter, onSuccess) => {\n const filterToSave = {\n advertiser_identification_number: filter.advertiserIdentificationNumber,\n programme_ids: filter.programme?.map((x) => x.value) ?? [],\n category_id: filter.category?.value,\n subcategory_id: filter.subcategory?.value,\n cpv_item_ids: filter.cpvItem?.map((x) => x.id) ?? [],\n fulfillment_place_codes:\n filter.fulfillmentPlaces?.map((x) => x.value) ?? [],\n };\n\n const requestUrl = id\n ? `/api/newsletter-filters/${id}`\n : `/api/newsletter-filters`;\n\n const requestMethod = id ? \"PUT\" : \"POST\";\n\n fetchApi(\n requestUrl,\n requestMethod,\n {},\n filterToSave,\n () => onSuccess(),\n () => {},\n () => {}\n );\n };\n\n const enableDisableFilter = (checked, filter) => {\n fetchApi(\n `/api/newsletter-filters/${filter.filter.id}/enabled`,\n \"PUT\",\n {},\n { enabled: checked },\n () => {\n const updatedFilters = [\n ...filters.map((x) => {\n if (x.id === filter.id) {\n x.enabled = checked;\n }\n\n return x;\n }),\n ];\n setFilters(updatedFilters);\n refreshAnnouncements();\n refreshUpdatedAnnouncementsCount();\n refreshNewAnnouncementsCount();\n },\n () => {},\n () => {}\n );\n };\n\n const deleteFilter = (filter) => {\n fetchApi(\n `/api/newsletter-filters/${filter.filter.id}`,\n \"DELETE\",\n {},\n {},\n () => {\n const newFilters = filters.filter((x) => x.id !== filter.id);\n setFilters(newFilters);\n refreshAnnouncements();\n refreshUpdatedAnnouncementsCount();\n refreshNewAnnouncementsCount();\n setShowDeleteFilterModal(undefined);\n },\n () => {},\n () => {}\n );\n };\n\n const buildFilterName = (filter) => {\n const { id, ...rest } = filter;\n\n const propValues = Object.values(rest)\n .filter((x) => x)\n .map((value) => {\n if (Array.isArray(value)) {\n return value\n .map((item) => {\n if (item.hasOwnProperty(\"label\")) {\n return item.label;\n } else {\n return `${item.kod} ${item.nazwa}`;\n }\n })\n .join(\", \");\n } else if (typeof value === \"object\") {\n return value?.label;\n } else {\n return value;\n }\n });\n return propValues.filter((x) => x).join(\"; \");\n };\n\n const handleChangePage = (next = true) => {\n if (next) {\n setAdvertisementsFilters({\n ...advertisementsFilters,\n page: advertisementsFilters.page + 1,\n });\n } else {\n if (advertisementsFilters.page > 1) {\n setAdvertisementsFilters({\n ...advertisementsFilters,\n page: advertisementsFilters.page - 1,\n });\n }\n }\n };\n\n const handleAddToFavorites = (object) => {\n fetchApi(\n `/api/favorite-announcements/${object.advertisement.id}`,\n \"POST\",\n {},\n {},\n () => {\n const index = advertisements.findIndex((obj) => obj.id === object.id);\n const updatedObjects = [...advertisements];\n updatedObjects[index] = { ...updatedObjects[index], favorite: true };\n setAdvertisements(updatedObjects);\n }\n );\n };\n\n const handleRemoveFromFavorites = (object) => {\n fetchApi(\n `/api/favorite-announcements/${object.advertisement.id}`,\n \"DELETE\",\n {},\n {},\n () => {\n const index = advertisements.findIndex((obj) => obj.id === object.id);\n const updatedObjects = [...advertisements];\n updatedObjects[index] = { ...updatedObjects[index], favorite: false };\n setAdvertisements(updatedObjects);\n }\n );\n };\n\n return (\n <>\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n <PomocEkranowa\n ekran=\"newsletter_settings\"\n content={isPreview ? content : null}\n />\n <Text tag=\"h2\" mainHeader>\n Ustawienia newslettera\n </Text>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"15px\" }}>\n {filters.map((filter, index) => {\n return (\n <Elevation z={4} style={{ padding: 10 }} key={index}>\n <GridCustom\n centerVertical\n fullwidth\n className=\"newsletter-settings\"\n >\n <Switch\n aria-label={`WÅ‚Ä…cz filtry dla ${filter.name}`}\n id={`filters_${index}`}\n checked={filter.enabled}\n onChange={(ev) =>\n enableDisableFilter(ev.target.checked, filter)\n }\n >\n {filter.name}\n </Switch>\n <GridCustom\n noWrap\n className=\"newsletter-settings-filter-buttons\"\n >\n <ButtonStyled\n icon=\"list\"\n lite\n onClick={() => {\n setFilterModalData({\n visible: true,\n filter: filter.filter,\n id: filter.id,\n });\n }}\n >\n EDYTUJ\n <Badge\n className=\"bluebadge\"\n label={filter.filterByPropertiesCount}\n align=\"inline\"\n />\n </ButtonStyled>\n\n <ButtonStyled\n remove\n icon=\"delete\"\n onClick={() => {\n setShowDeleteFilterModal(filter);\n }}\n >\n USUŃ\n </ButtonStyled>\n </GridCustom>\n </GridCustom>\n </Elevation>\n );\n })}\n </div>\n <ButtonStyled\n icon=\"add\"\n lite\n style={{ marginLeft: \"auto\" }}\n onClick={() => {\n setFilterModalData({ visible: true, filter: undefined });\n }}\n >\n Dodaj\n </ButtonStyled>\n <Text tag=\"h2\" mainHeader>\n Wyniki\n </Text>\n\n <GridCustom centerVertical centerHorizontal>\n <p>Data opublikowania:</p>\n <ButtonStyled\n primary={advertisementsFilters.day === dayBeforeYesterdayDate}\n lite={advertisementsFilters.day !== dayBeforeYesterdayDate}\n disabled={isBusy}\n onClick={() => {\n setAdvertisementsFilters({\n ...advertisementsFilters,\n day: dayBeforeYesterdayDate,\n page: 1,\n });\n }}\n >\n {dayBeforeYesterdayDate}\n </ButtonStyled>\n <ButtonStyled\n primary={advertisementsFilters.day === yesterdayDate}\n lite={advertisementsFilters.day !== yesterdayDate}\n disabled={isBusy}\n onClick={() => {\n setAdvertisementsFilters({\n ...advertisementsFilters,\n day: yesterdayDate,\n page: 1,\n });\n }}\n >\n {yesterdayDate}\n </ButtonStyled>\n </GridCustom>\n\n <GridCustom centerVertical centerHorizontal>\n <ButtonStyled\n primary={advertisementsFilters.status === \"new\"}\n lite={advertisementsFilters.status !== \"new\"}\n disabled={isBusy}\n onClick={() => {\n setAdvertisementsFilters({\n ...advertisementsFilters,\n status: \"new\",\n page: 1,\n });\n }}\n >\n NOWE ({newCount} OGÅOSZEŃ)\n </ButtonStyled>\n <ButtonStyled\n primary={advertisementsFilters.status === \"updated\"}\n lite={advertisementsFilters.status !== \"updated\"}\n disabled={isBusy}\n onClick={() => {\n setAdvertisementsFilters({\n ...advertisementsFilters,\n status: \"updated\",\n page: 1,\n });\n }}\n >\n ZAKTUALIZOWANE ({updatedCount} OGÅOSZEŃ)\n </ButtonStyled>\n </GridCustom>\n\n <ul style={{ listStyleType: \"none\" }}>\n {advertisements.map((advertisement) => {\n return (\n <li\n key={advertisement.id}\n className=\"separate-content search__item\"\n >\n <GridCustom fullwidth key={advertisement.advertisement.id}>\n <GridCellCustom>\n <Link\n to={`/ogloszenia/${advertisement.advertisement.id}`}\n className=\"link-text\"\n >\n <span\n dangerouslySetInnerHTML={{\n __html: advertisement.title,\n }}\n ></span>\n </Link>\n {advertisement.is_mine && (\n <span className=\"author-label\">Moje ogÅ‚oszenie</span>\n )}\n </GridCellCustom>\n {!advertisement.is_mine && (\n <GridCellCustom style={{ minWidth: \"255px\" }}>\n {advertisement.favorite === false && (\n <ButtonStyled\n onClick={() => handleAddToFavorites(advertisement)}\n primary\n icon=\"favorite\"\n >\n DODAJ DO ULUBIONYCH\n <span className=\"sr-only\">\n ogÅ‚oszenie {advertisement.title}\n </span>\n </ButtonStyled>\n )}\n {advertisement.favorite === true && (\n <ButtonStyled\n onClick={() =>\n handleRemoveFromFavorites(advertisement)\n }\n remove\n icon=\"close\"\n >\n USUŃ Z ULUBIONYCH\n <span className=\"sr-only\">\n {\" \"}\n ogÅ‚oszenie {advertisement.title}\n </span>\n </ButtonStyled>\n )}\n </GridCellCustom>\n )}\n </GridCustom>\n\n <p\n dangerouslySetInnerHTML={{\n __html: advertisement.description,\n }}\n ></p>\n <GridCustom flexM fullwidth>\n <Text info className=\"search__results-meta\">\n Opublikowano: {advertisement.publication_date}\n </Text>\n <Text info className=\"search__results-meta\">\n Termin skÅ‚adania ofert: {advertisement.submission_deadline}\n </Text>\n <Text\n info\n className=\"search__results-meta search__results-meta--company-name\"\n >\n <span\n dangerouslySetInnerHTML={{\n __html: advertisement?.advertiser_address_details?.name,\n }}\n ></span>\n </Text>\n {(advertisement.fulfillment_place || \"\").length > 0 && (\n <Text info className=\"search__results-meta\">\n {advertisement.fulfillment_place}\n </Text>\n )}\n </GridCustom>\n </li>\n );\n })}\n </ul>\n <Pagination\n currentPage={advertisementsFilters.page}\n hasNext={\n advertisementsFilters.page * PAGE_LIMIT <\n advertisementsFilters.total\n }\n hasPrev={advertisementsFilters.page > 1}\n handleChangePage={handleChangePage}\n />\n </div>\n {filterModalData.visible && (\n <NewsletterSettingsFilter\n filter={filterModalData.filter}\n save={(filter) => {\n if (filterModalData.filter) {\n editFilter(filterModalData.id, filter);\n } else {\n addFilter(filter);\n }\n\n setFilterModalData({ visible: false, filter: undefined });\n }}\n close={() => {\n setFilterModalData({ visible: false, filter: undefined });\n }}\n />\n )}\n {showDeleteFilterModal && (\n <DialogCustom\n className=\"dialog\"\n dialogTitle=\"Czy na pewno chcesz usunąć filtr newslettera?\"\n onClose={() => {\n setShowDeleteFilterModal(undefined);\n }}\n >\n <GridCustom centerVertical flexEnd>\n <ButtonStyled\n onClick={() => {\n setShowDeleteFilterModal(undefined);\n }}\n cancel\n >\n Anuluj\n </ButtonStyled>\n <ButtonStyled\n onClick={() => {\n deleteFilter(showDeleteFilterModal);\n }}\n remove\n >\n UsuÅ„\n </ButtonStyled>\n </GridCustom>\n </DialogCustom>\n )}\n </>\n );\n};\n","import React, { Component } from \"react\";\n\nimport {\n ButtonStyled,\n FieldWithLabel,\n GridCustom,\n Select,\n TextFieldCustom,\n Text,\n} from \"../../common\";\nimport { customSelectStyles } from \"../../vars/vars\";\n\nimport { serializeObjectList } from \"../../../serializers\";\n\nimport { fetchApi } from \"../../../fetch\";\n\nimport {\n sortMiejsceRealizacjiFilter,\n sortProgrammeFilter,\n} from \"../../../sorters\";\n\nimport { FormKodCPV } from \"../ogloszenia/FormKodCPV\";\n\nconst EMPTY_VALUE = {\n value: 0,\n label: \"Wybierz\",\n};\n\nconst ORDER_ITEM_CATEGORIES = \"order_item_categories\";\n\nconst serializeProgrammeSelectStructure = (data) => {\n let data_ = {};\n for (let programme of Object.values(data)) {\n data_[programme.id] = `${programme.code.toUpperCase()} - ${programme.name}`;\n }\n return Object.entries(data_).sort(sortProgrammeFilter) || [];\n};\n\nclass FavoritesFilters extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n initializingOn: true,\n filters: props.filters,\n dictionaries: props.dictionaries,\n errors: {},\n };\n\n this.xhrFetch = null;\n\n this.handleFetchSuccess = this.handleFetchSuccess.bind(this);\n this.handleFetchError = this.handleFetchError.bind(this);\n this.handleFetchIncorrectStatus =\n this.handleFetchIncorrectStatus.bind(this);\n this.handleApplyFilters = this.handleApplyFilters.bind(this);\n }\n\n componentDidMount() {\n if (!Object.keys(this.state.dictionaries).length) {\n // get dictionaries from server\n this.xhrFetch = fetchApi(\n \"/api/dictionaries/search-filters\",\n \"GET\",\n {},\n {},\n this.handleFetchSuccess,\n this.handleFetchError,\n this.handleFetchIncorrectStatus\n );\n } else {\n this.setState({ initializingOn: false });\n }\n }\n\n componentWillUnmount() {\n // abort api request if exist\n if (this.xhrFetch !== null) {\n this.xhrFetch.abort();\n }\n }\n\n //handlers\n\n handleFetchSuccess(data) {\n this.xhrFetch = null;\n let dictionaries = {\n przedmiotZamowieniaKategoria: serializeObjectList(\n data[ORDER_ITEM_CATEGORIES]\n ),\n programOperacyjny: serializeProgrammeSelectStructure(\n data.operation_programme\n ),\n miejsceRealizacji:\n Object.entries(data.location_id).sort(sortMiejsceRealizacjiFilter) ||\n [],\n };\n\n this.setState(\n {\n initializingOn: false,\n dictionaries,\n },\n () => this.props.updateDictionaries(dictionaries)\n );\n }\n\n handleFetchError(data) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n initializingOn: false,\n fetchError: `Nie udaÅ‚o siÄ™ pobrać danych do filtrów. ${data.message}`,\n });\n }\n\n handleFetchIncorrectStatus(status) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n initializingOn: false,\n fetchError: `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`,\n });\n }\n\n handleApplyFilters() {\n this.props.updateFilters(this.state.filters);\n }\n\n handleChangeFilter(name, value) {\n this.setState((prevState) => {\n let dict = { [name]: value };\n if (name === \"advertiserIdentificationNumber\") {\n // allow to insert only letters and digits\n dict[\"advertiserIdentificationNumber\"] = value.replace(\n /[^a-zA-Z\\d]/,\n \"\"\n );\n } else {\n dict[name] = value;\n }\n if (name === \"category\") {\n dict[\"subcategory\"] = null;\n }\n // clean error (just in case if exists)\n let errors = Object.assign({}, prevState.errors);\n delete errors[name];\n return { errors, filters: Object.assign({}, prevState.filters, dict) };\n });\n }\n\n // rendering\n\n render() {\n const filters = this.state.filters;\n if (this.state.initializingOn) {\n return (\n <Text info tabIndex=\"1\">\n Trwa inicjalizacja danych...\n </Text>\n );\n } else {\n return (\n <>\n <section className=\"filters-dialog__filters-section\">\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"Program Operacyjny\"\n tag=\"label\"\n selectRef={React.createRef()}\n >\n <Select\n screenReaderStatus={() => {\n return \"Wybierz opcjÄ™ z listy rozwijanej\";\n }}\n className=\"select-custom\"\n isMulti\n options={this.state.dictionaries.programOperacyjny.map(\n ([value, label]) => ({ value, label })\n )}\n placeholder=\"Zacznij wpisywać...\"\n value={filters.programme}\n onChange={(selectedOption) =>\n this.handleChangeFilter(\"programme\", selectedOption || [])\n }\n styles={customSelectStyles}\n noOptionsMessage={() => \"Brak wybranej opcji\"}\n />\n </FieldWithLabel>\n <FieldWithLabel\n label=\"Kategoria przedmiotu zamówienia\"\n tag=\"label\"\n selectRef={React.createRef()}\n >\n <Select\n screenReaderStatus={() => {\n return \"Wybierz opcjÄ™ z listy rozwijanej\";\n }}\n className=\"select-custom\"\n options={[EMPTY_VALUE].concat(\n ...this.state.dictionaries.przedmiotZamowieniaKategoria.map(\n (t) => ({\n value: t.id,\n label: t.nazwa,\n })\n )\n )}\n value={filters.category || EMPTY_VALUE}\n onChange={(selectedOption) => {\n this.handleChangeFilter(\n \"category\",\n selectedOption.value === 0 ? null : selectedOption\n );\n }}\n styles={customSelectStyles}\n noOptionsMessage={() => \"Brak wybranej opcji\"}\n />\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"Podkategoria\"\n aria-label={\n filters.category !== null\n ? null\n : \"Podkategoria, pole nieaktywne. Aby wybrać podkategoriÄ™, musisz wybrać kategoriÄ™ przedmiotu zamówienia.\"\n }\n selectRef={React.createRef()}\n tag=\"label\"\n tabIndex={filters.category !== null ? null : \"0\"}\n >\n <Select\n screenReaderStatus={() => {\n return \"Wybierz opcjÄ™ z listy rozwijanej\";\n }}\n className=\"select-custom\"\n isDisabled={filters.category === null}\n options={\n filters.category === null\n ? [EMPTY_VALUE]\n : [EMPTY_VALUE].concat(\n ...this.state.dictionaries.przedmiotZamowieniaKategoria\n .filter(\n (k) =>\n parseInt(k.id) ===\n parseInt(filters.category?.value)\n )[0]\n .podkategorie.map((p) => ({\n value: p.id,\n label: p.nazwa,\n }))\n )\n }\n value={filters.subcategory || EMPTY_VALUE}\n onChange={(selectedOption) =>\n this.handleChangeFilter(\n \"subcategory\",\n selectedOption.value === 0 ? null : selectedOption\n )\n }\n styles={customSelectStyles}\n aria-hidden={filters.category === null}\n aria-label={filters.category !== null && \"Podkategoria\"}\n noOptionsMessage={() => \"Brak wybranej opcji\"}\n />\n </FieldWithLabel>\n <FormKodCPV\n isMulti\n initial={filters.cpvItem}\n addKodCPV={(selectedOptions) =>\n this.handleChangeFilter(\"cpvItem\", selectedOptions || [])\n }\n />\n </GridCustom>\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"Miejsce realizacji\"\n tag=\"label\"\n selectRef={React.createRef()}\n >\n <Select\n screenReaderStatus={() => {\n return \"Wybierz opcjÄ™ z listy rozwijanej\";\n }}\n className=\"select-custom\"\n isMulti\n options={this.state.dictionaries.miejsceRealizacji.map(\n (m) => ({\n value: m[0],\n label: m[1],\n })\n )}\n placeholder=\"Zacznij wpisywać...\"\n value={filters.fulfillmentPlaces}\n onChange={(selectedOption) =>\n this.handleChangeFilter(\n \"fulfillmentPlaces\",\n selectedOption || []\n )\n }\n styles={customSelectStyles}\n noOptionsMessage={() => \"Brak wybranej opcji\"}\n />\n </FieldWithLabel>\n <FieldWithLabel\n label=\"Numer identyfikacyjny ogÅ‚oszeniodawcy\"\n tag=\"label\"\n labelFor=\"filters_numer_identyfikacyjny_ogloszeniodawcy_id\"\n >\n <TextFieldCustom\n aria-describedby={\n (this.state.errors.errorNipOgloszeniodawcy || \"\").length > 0\n ? \"filters_numer_identyfikacyjny_ogloszeniodawcy_error\"\n : null\n }\n aria-label={`Numer identyfikacyjny ogÅ‚oszeniodawcy: 255. Wpisz tylko cyfry. Wpisano ${filters.advertiserIdentificationNumber.length} znaków.`}\n aria-valuemax={255}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"numer identyfikacyjny ogÅ‚oszeniodawcy\"\n id=\"filters_numer_identyfikacyjny_ogloszeniodawcy_id\"\n invalid={\n (this.state.errors.errorNipOgloszeniodawcy || \"\").length > 0\n }\n maxLength={255}\n onChange={(ev) =>\n this.handleChangeFilter(\n \"advertiserIdentificationNumber\",\n ev.target.value\n )\n }\n onClear={(ev) =>\n this.handleChangeFilter(\n \"advertiserIdentificationNumber\",\n \"\"\n )\n }\n onKeyUp={(ev) =>\n this.handleChangeFilter(\n \"advertiserIdentificationNumber\",\n ev.target.value\n )\n }\n value={filters.advertiserIdentificationNumber}\n />\n {(this.state.errors.errorNipOgloszeniodawcy || \"\").length >\n 0 && (\n <Text\n error\n id=\"filters_numer_identyfikacyjny_ogloszeniodawcy_error\"\n >\n {this.state.errors.errorNipOgloszeniodawcy}\n </Text>\n )}\n </FieldWithLabel>\n </GridCustom>\n </section>\n <GridCustom flexEnd>\n <ButtonStyled onClick={this.props.closeFilters} cancel>\n Anuluj\n </ButtonStyled>\n <ButtonStyled onClick={this.handleApplyFilters} primary>\n Zastosuj kryteria\n </ButtonStyled>\n </GridCustom>\n </>\n );\n }\n }\n}\n\nexport { FavoritesFilters };\n","import React from \"react\";\nimport { PomocEkranowa } from \"../zarzadzanieTrescia\";\nimport { PaginatedBaseComponent } from \"../common\";\n\nimport { Link } from \"react-router-dom\";\nimport {\n getFavoritesAdvertFiltersCount,\n FAVORITES_ADVERT_CLEANED_FILTERS,\n} from \"../../../filters\";\nimport { FavoritesFilters } from \"./FavoritesFilters\";\n\nimport {\n Box,\n FieldWithLabel,\n GridCustom,\n ButtonStyled,\n Text,\n} from \"../../common\";\nimport { dateToString } from \"../../../helpers\";\nimport { isAdvertisementLocked } from \"../../../helpers\";\nimport { fetchApi } from \"../../../fetch\";\nimport { BadgeAnchor, Badge } from \"@rmwc/badge\";\nimport \"@rmwc/badge/badge.css\";\n\nclass Favorites extends PaginatedBaseComponent {\n preState(props) {\n super.preState(props);\n this.objectsName = \"ogloszenia\";\n this.paginateBy = 20;\n this.sortingValues = [\n [\"publicationDate\", \"Po dacie publikacji ogÅ‚oszeÅ„\"],\n [\"submissionDeadline\", \"Po terminie skÅ‚adania ofert\"],\n [\"default\", \"DomyÅ›lnie\"],\n ];\n this.filteringLabel = \"Filtruj listÄ™\";\n this.filtersComponentClass = FavoritesFilters;\n\n this.getFiltersCount = getFavoritesAdvertFiltersCount;\n }\n\n postState(props) {\n super.postState(props);\n this.dictionaries = {};\n }\n\n handleReload = (link = null) => {\n this.setState({ initializingOn: true, fetchError: \"\", objects: [] }, () => {\n this.fetchInitialData();\n });\n };\n\n getAdditionalState(props) {\n const params = new URLSearchParams(props.location.search);\n return Object.assign({}, super.getAdditionalState(props), {\n selectedSort: {\n value: this.sortingValues[2][0],\n label: this.sortingValues[2][1],\n },\n query: params.get(\"q\") || \"\",\n filters: FAVORITES_ADVERT_CLEANED_FILTERS,\n });\n }\n\n renderHeader() {\n return (\n <>\n <PomocEkranowa\n ekran=\"favorites_list\"\n content={this.props.isPreview ? this.props.content : null}\n />\n <Text tag=\"h1\" mainHeader>\n Lista ulubionych ogÅ‚oszeÅ„\n </Text>\n </>\n );\n }\n\n renderEmptyObjects() {\n return (\n <Text error role=\"alert\">\n Nie znaleziono ogÅ‚oszeÅ„ speÅ‚niajÄ…cych kryteria wyszukiwania.\n </Text>\n );\n }\n\n getFetchUrl() {\n return \"/api/announcements\";\n }\n\n getFetchData() {\n let queryDict = super.getFetchData();\n\n if (this.state.query.length) {\n queryDict[\"query\"] = this.state.query;\n }\n for (let [name, value] of Object.entries(this.state.filters)) {\n if ([\"publicationDateRange\", \"submissionDeadlineRange\"].includes(name)) {\n for (let [subname, subvalue] of Object.entries(value)) {\n if (subname === \"type\") {\n continue;\n }\n if (!!subvalue) {\n queryDict[`${name}[${subname}]`] = subvalue;\n }\n }\n } else if (name === \"cpvItem\") {\n if (Object.keys(value).length) {\n queryDict[name] = value.map((kod) => kod.kod);\n }\n } else if (\"programme\" === name) {\n if (value.length) {\n queryDict[name] = value.map((mr) => mr.value.toUpperCase());\n }\n } else if (\"fulfillmentPlaces\" === name) {\n if (value.length) {\n queryDict[name] = value.map((mr) => mr.value);\n }\n } else if ([\"category\", \"subcategory\"].includes(name)) {\n if (value !== null) {\n queryDict[name] = value.label;\n }\n } else if (\n (name === \"status\" && Object.keys(value).length) ||\n value !== FAVORITES_ADVERT_CLEANED_FILTERS[name]\n ) {\n queryDict[name] = value;\n } else if (name === \"mode\") {\n queryDict[name] = value;\n }\n }\n return queryDict;\n }\n\n renderFiltersComponent() {\n return (\n <this.filtersComponentClass\n dictionaries={this.dictionaries}\n filters={this.state.filters}\n closeFilters={() => this.setState({ filtersAreOn: false })}\n updateDictionaries={(dictionaries) =>\n (this.dictionaries = dictionaries)\n }\n updateFilters={this.handleApplyFilters}\n />\n );\n }\n\n renderList() {\n const total = this.state.total;\n return (\n <>\n <Text accentHeader tag=\"h2\" role=\"alert\">\n Znaleziono {total < this.paginateBy ? \"\" : \"okoÅ‚o \"}\n {total} ogÅ‚oszeÅ„\n </Text>\n <GridCustom flexL noWrap flexTop>\n <GridCustom centerHorizontal className=\"advertisements-list\" tag=\"ul\">\n {this.state.objects.map((o) => this.renderOgloszenie(o))}\n </GridCustom>\n </GridCustom>\n </>\n );\n }\n\n handleAddToFavorites = (id) => {\n fetchApi(`/api/favorite-announcements/${id}`, \"POST\", {}, {}, () => {\n this.handleReload();\n });\n };\n\n handleRemoveFromFavorites = (id) => {\n fetchApi(`/api/favorite-announcements/${id}`, \"DELETE\", {}, {}, () => {\n this.handleReload();\n });\n };\n\n renderOgloszenie(o) {\n const status = parseInt(o.ogloszenie.status?.id);\n const isLocked = isAdvertisementLocked(o.ogloszenie.status);\n return (\n <Box\n className=\"box--advertisement\"\n flexiblewidth\n tag=\"li\"\n titleOneRow={o.tytul || \"-\"}\n key={o.id}\n >\n <GridCustom fullwidth>\n <FieldWithLabel label=\"Numer ogÅ‚oszenia\">\n <Text>{o.ogloszenie.numer || \"-\"}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Status\">\n <Text>{o.ogloszenie.status?.nazwa}</Text>\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth>\n <FieldWithLabel\n label={`Data ${\n o.dataOpublikowania?.length > 0 &&\n o.dataOpublikowania > dateToString(new Date())\n ? \"odroczonej \"\n : \"\"\n }publikacji`}\n >\n <Text>{o.dataOpublikowania || \"-\"}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Termin skÅ‚adania ofert\">\n <Text>{o.terminOfert || \"-\"}</Text>\n </FieldWithLabel>\n </GridCustom>\n <FieldWithLabel label=\"Czy dopuszczalna oferta częściowa?\">\n <Text>\n {o.czyDopuszczalnaOfertaCzesciowa ? \"TAK\" : \"NIE\"}\n {o.czyDopuszczalnaOfertaCzesciowa &&\n ` (Części: ${o.liczbaZamowien})`}\n </Text>\n </FieldWithLabel>\n\n <BadgeAnchor style={{ width: \"100%\" }}>\n <ButtonStyled\n className=\"corner-button\"\n disabled={isLocked}\n primary\n tag={Link}\n to={`/ogloszenia/${o.ogloszenie.id}${\n status === this.roboczeStatusId ? \"/robocza\" : \"\"\n }`}\n >\n Pokaż szczegóły\n <span className=\"sr-only\">{` ogÅ‚oszenia ${o.tytul}`}</span>\n </ButtonStyled>\n {o.badge_count > 0 && (\n <Badge label={o.badge_count} />\n )}\n </BadgeAnchor>\n\n {o.favorite === false && (\n <ButtonStyled\n onClick={() => this.handleAddToFavorites(o.ogloszenie.id)}\n primary\n icon=\"favorite\"\n >\n DODAJ DO ULUBIONYCH\n <span className=\"sr-only\"> ogÅ‚oszenie {o.tytul}</span>\n </ButtonStyled>\n )}\n {o.favorite === true && (\n <ButtonStyled\n onClick={() => this.handleRemoveFromFavorites(o.ogloszenie.id)}\n remove\n icon=\"close\"\n >\n USUŃ Z ULUBIONYCH\n <span className=\"sr-only\"> ogÅ‚oszenie {o.tytul}</span>\n </ButtonStyled>\n )}\n </Box>\n );\n }\n}\n\nexport { Favorites };\n","import React, { Component } from 'react';\n\nimport { ButtonStyled, DialogCustom } from '../../common';\nimport { LandingPage } from '../LandingPage';\nimport { FormOgloszenie } from '../ogloszenia/FormOgloszenie';\nimport { Ogloszenia } from '../ogloszenia/Ogloszenia';\nimport { Projekty } from '../projekty/Projekty';\nimport { NewsletterSettings } from '../newsletter/NewsletterSettings';\nimport { Favorites } from '../newsletter/Favorites';\n\n\nclass TrescPreview extends Component {\n\n // rendering\n\n render() {\n return (\n <DialogCustom\n className=\"dialog-long-content dialog-long-content--preview\"\n style={{zIndex: 100}}\n onClose={this.props.closePreview}\n >\n <>\n <ButtonStyled onClick={this.props.closePreview} primary className=\"dialog-long-content__close\">Zamknij podglÄ…d</ButtonStyled>\n <p className=\"top-app-bar-imitation\">Baza KonkurencyjnoÅ›ci</p>\n {this.renderPreview()}\n </>\n </DialogCustom>\n )\n }\n\n renderPreview() {\n let Component = null;\n let step = null;\n switch (this.props.screen) {\n case 'homePage':\n Component = LandingPage;\n break;\n case 'projekty_lista_ogloszeniodawca':\n Component = Projekty;\n break;\n case 'ogloszenia_lista_ogloszeniodawca':\n Component = Ogloszenia;\n break;\n case 'newsletter_ustawienia':\n Component = NewsletterSettings;\n break;\n case 'ulubione_lista':\n Component = Favorites;\n break;\n default:\n Component = FormOgloszenie;\n step = this.props.screen.split('_').pop();\n }\n if (!Component) { return null }\n return <Component preview content={this.props.content} step={step} {...{location: {search: {}}}}/>\n }\n}\n\n\nexport { TrescPreview };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport Select from 'react-select';\nimport { Radio } from '@rmwc/radio';\n\nimport { EKRANOWA, EKRANY_DICT, OGOLNA } from '../../../const';\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport {\n countWysiwygChars,\n extractYoutubeSrc,\n getAuthTokenCookieValue,\n refreshTimerAfterRequest\n} from '../../../helpers';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { validateWysiwygEditor } from '../../../validators';\nimport {\n Breadcrumps,\n ButtonStyled,\n Container,\n DialogCustom,\n FieldWithLabel,\n GridCustom,\n Text,\n TextFieldCustom,\n WysiwygEditor,\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { BaseComponent } from '../common';\nimport { TrescPreview } from './TrescPreview';\n\n\nconst EMPTY_VALUE = {\n value: 0,\n label: '--- Wybierz ---',\n}\nconst SAVE_BUTTON_DEFAULT_LABEL = 'Zapisz pomoc';\n\n\nclass FormPomoc extends BaseComponent {\n\n // base functions\n\n componentDidMount() {\n this.fetchInitialData();\n }\n\n componentWillUnmount() {\n super.componentWillUnmount();\n if (this.xhrSaveFile !== null) {\n this.xhrSaveFile.abort();\n }\n }\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n\n const serializedData = getSerializedObject(\n data, {nonRecursiveKeys: ['tresc', ]});\n if (this.state.isNew) {\n this.setState({\n initializingOn: false,\n availableParents: serializedData.pomoce.parents_candidates.data || [],\n availableRelatives: serializedData.pomoce.parents_candidates.data || [],\n availableScreens: serializedData.pomoce.screens_available || [],\n });\n return\n }\n const pomoc = serializedData.pomoc;\n const typOgolna = pomoc.typ === OGOLNA;\n const rozdzialNadrzedny = !pomoc.rozdzialNadrzedny ? null : {value: pomoc.rozdzialNadrzedny.id, label: pomoc.rozdzialNadrzedny.naglowek};\n this.setState(\n {\n initializingOn: false,\n ...Object.assign({}, pomoc, {\n ekran: typOgolna ? EMPTY_VALUE : (\n pomoc.ekran ? {value: pomoc.ekran, label: EKRANY_DICT[pomoc.ekran].label} : EMPTY_VALUE),\n tresc: !Object.keys(pomoc.tresc).length ? '' : pomoc.tresc,\n rozdzialNadrzedny,\n powiazane: pomoc.powiazane.map(p => ({value: p.id, label: p.naglowek})),\n }),\n isRoot: pomoc.root || false,\n hasChildren: pomoc.has_children || false,\n originalTypOgolna: typOgolna,\n originalRozdzialNadrzedny: rozdzialNadrzedny === null ? null : rozdzialNadrzedny.value,\n typOgolna,\n availableParents: serializedData.slowniki.parents_candidates.data || [],\n availableRelatives: serializedData.slowniki.relatives_candidates.data || [],\n availableScreens: serializedData.slowniki.screens_available || [],\n },\n () => {\n // update url if slugs are not equal\n const urlParams = this.props.match.params;\n if (pomoc.slug !== urlParams.slug) {\n this.props.history.push(`/zarzadzanie-trescia/pomoc/${urlParams.id}-${pomoc.slug}/edytuj`);\n }\n }\n );\n }\n\n handleSaveTypOgolna(ev) {\n this.setState({\n typOgolna: ev.currentTarget.value === 'true',\n ekran: EMPTY_VALUE,\n rozdzialNadrzedny: EMPTY_VALUE,\n powiazane: [],\n });\n }\n\n handleChangeAttribute(name, value) {\n this.setState(prevState => ({\n [name]: value,\n errors: Object.assign({}, prevState.errors, {[name]: ''}),\n }));\n }\n\n handleClearAttributeError(name) {\n this.setState(prevState => ({\n errors: Object.assign({}, prevState.errors, {[name]: ''}),\n }));\n }\n\n handleUploadFile(file) {\n return new Promise((resolve, reject) => {\n const formData = new FormData();\n formData.append('file', file);\n\n this.xhrSaveFile = new XMLHttpRequest();\n this.xhrSaveFile.open('POST', '/api/files?context=help');\n\n const authTokenCookieValue = getAuthTokenCookieValue();\n if (authTokenCookieValue) {\n this.xhrSaveFile.setRequestHeader(\n 'X-Auth-Token', authTokenCookieValue);\n }\n\n this.xhrSaveFile.onload = () => {\n refreshTimerAfterRequest(\n authTokenCookieValue, this.xhrSaveFile.status);\n let success = true;\n let error;\n let jsonData = {};\n try {\n jsonData = JSON.parse(this.xhrSaveFile.responseText);\n } catch(error) {\n success = false;\n }\n\n if (success) {\n if (jsonData.status === 'OK') {\n resolve({data: {link: jsonData.data.file.uri}});\n return\n } else if (jsonData.errors) {\n error = translateErrorMessage(jsonData.errors.file);\n } else {\n error = translateErrorMessage(jsonData.message);\n }\n } else if (this.xhrSaveFile.status === 413) {\n error = 'Wybrany plik jest zbyt duży. Maksymalny rozmiar pliku to 25 MB.';\n } else {\n error = `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${this.xhrSaveFile.status}. Nie udaÅ‚o siÄ™ dodać pliku.`;\n }\n this.setState({uploadImageError: error}, () => reject(error));\n this.xhrSaveFile = null;\n };\n\n this.xhrSaveFile.onerror = () => {\n this.xhrSaveFile = null;\n const error = 'WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d. Nie udaÅ‚o siÄ™ dodać pliku.';\n this.setState({uploadImageError: error}, () => reject(error));\n };\n\n this.xhrSaveFile.send(formData);\n })\n }\n\n handleLoadEmbed(url) {\n const embeddedUrl = extractYoutubeSrc(url);\n if (!embeddedUrl) {\n this.setState({loadEmbedError: 'Podano niepoprawny url wideo.'});\n return\n }\n return embeddedUrl\n }\n\n handleSave() {\n this.setState(\n {savingOn: true, fetchSaveError: '', saveBtnText: 'Trwa zapisywanie...'},\n () => {\n const [isValid, errors] = this.validate();\n if (isValid) {\n const { id, isNew } = this.state;\n for (let block of this.state.tresc.blocks) {\n\t\t\t\t\t\tif(block.type === 'unstyled' && block.entityRanges.length){\n\t\t\t\t\t\t\tfor (let entityRange of block.entityRanges){\n\t\t\t\t\t\t\t\tdelete this.state.tresc.entityMap[entityRange.key];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tblock.entityRanges.length = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n // save pomoc on server\n this.xhrFetch = fetchApi(\n isNew\n ? API_URLS.helpAdmin.path\n : API_URLS.helpAdminDetails.getUrl(id),\n isNew ? 'POST' : 'PUT',\n {},\n getSerializedObject(\n {\n id: id,\n typ: this.state.typOgolna ? OGOLNA : EKRANOWA,\n rozdzialNadrzedny: this.state.rozdzialNadrzedny ? this.state.rozdzialNadrzedny.value : null,\n ekran: this.state.ekran.value,\n naglowek: this.state.naglowek,\n tresc: this.state.tresc,\n powiazane: this.state.powiazane.map(p => p.value),\n root: this.state.isRoot,\n },\n {toServer: true, nonRecursiveKeys: ['tresc', ]}\n ),\n this.handleFetchSaveSuccess,\n this.handleFetchSaveError,\n this.handleFetchSaveIncorrectStatus,\n );\n } else {\n this.setState({savingOn: false, errors, saveBtnText: SAVE_BUTTON_DEFAULT_LABEL});\n }\n }\n );\n }\n\n handleFetchSaveSuccess(data) {\n this.xhrFetch = null;\n this.setState(\n prevState => ({\n isNew: false,\n savingOn: false,\n saveBtnText: 'Zapisano',\n id: getSerializedObject(data).pomoc.id,\n originalRozdzialNadrzedny: prevState.rozdzialNadrzedny === null ? null : prevState.rozdzialNadrzedny.value,\n }),\n () => {\n this.isNew = false;\n this.saveMsgTimeout = setTimeout(() => {\n this.setState({saveBtnText: SAVE_BUTTON_DEFAULT_LABEL})\n }, 5000)\n }\n );\n }\n\n handleFetchSaveError(data) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n savingOn: false,\n saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n fetchSaveError: `Nie udaÅ‚o siÄ™ zapisać pomocy. ${data.message}`,\n });\n }\n\n handleFetchSaveIncorrectStatus(status) {\n this.xhrFetch = null; // clean xhr object\n if (status === 404) {\n this.setState({savingOn: false, pageNotFound: true});\n } else {\n let message = '';\n if (status === 403) {\n message = `Nie masz uprawnieÅ„ do ${this.state.isNew\n ? 'dodawania' : 'edycji'} pomocy.`;\n // update permission value in context\n this.removePermission();\n }\n this.setState({\n savingOn: false,\n saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n fetchSaveError: message || `Podczas zapisu pomocy wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`,\n });\n }\n }\n\n handlePreview() {\n if (this.state.ekran.value === 0) { return }\n const [isValid, errors] = this.validate();\n if (isValid) {\n this.setState({previewOn: true});\n } else {\n this.setState({errors});\n }\n }\n\n // helpers\n\n preState(props) {\n this.trescMaxLength = 5000;\n }\n\n getAdditionalState(props) {\n return {\n isNew: !props.editing,\n isRoot: false,\n hasChildren: false,\n previewOn: false,\n originalTypOgolna: null,\n originalRozdzialNadrzedny: 0,\n id: null,\n typOgolna: null,\n rozdzialNadrzedny: EMPTY_VALUE,\n ekran: EMPTY_VALUE,\n naglowek: '',\n tresc: '',\n powiazane: [],\n savingOn: false,\n errors: {\n ekran: '',\n naglowek: '',\n },\n uploadImageError: '',\n loadEmbedError: '',\n fetchSaveError: '',\n saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n availableParents: [],\n availableRelatives: [],\n availableScreens: [],\n };\n }\n\n postState(props) {\n this.xhrSaveFile = null;\n }\n\n setAdditionalHandlers() {\n this.handleSaveTypOgolna = this.handleSaveTypOgolna.bind(this);\n this.handleUploadFile = this.handleUploadFile.bind(this);\n this.handleLoadEmbed = this.handleLoadEmbed.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.handleFetchSaveSuccess = this.handleFetchSaveSuccess.bind(this);\n this.handleFetchSaveError = this.handleFetchSaveError.bind(this);\n this.handleFetchSaveIncorrectStatus = this.handleFetchSaveIncorrectStatus.bind(this);\n this.handlePreview = this.handlePreview.bind(this);\n }\n\n getFetchUrl() {\n if (this.state.isNew) {\n return API_URLS.helpAdminDictionaries.path\n }\n return API_URLS.helpAdminDetails.getUrl(this.props.match.params.id)\n }\n\n getFetchData() {\n if (this.state.isNew) {\n return {}\n }\n return {dictionary: 'auto_determining'}\n }\n\n getFetchError(message) {\n if (this.state.isNew) {\n return `Nie udaÅ‚o siÄ™ pobrać danych do formularza pomocy. ${message}`\n }\n return `Nie udaÅ‚o siÄ™ pobrać pomocy. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n if (this.state.isNew) {\n return `Podczas pobierania danych do formularza pomocy wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}`\n }\n return `Podczas pobierania pomocy wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n callback403 = () => {\n this.removePermission();\n }\n\n removePermission() {\n this.context.removePermission('help');\n }\n\n validate() {\n let isValid = true;\n const {\n isRoot,\n naglowek,\n rozdzialNadrzedny,\n tresc,\n typOgolna,\n } = this.state;\n const requiredMsg = 'To pole jest wymagane.';\n let errors = {};\n\n // validateTyp\n if (![true, false].includes(typOgolna)) {\n errors['typOgolna'] = requiredMsg;\n isValid = false;\n }\n\n // validate rozdzialNadrzedny\n if (!isRoot && typOgolna === true && rozdzialNadrzedny.value === 0) {\n errors['rozdzialNadrzedny'] = requiredMsg;\n isValid = false;\n }\n\n // validate naglowek\n if (!naglowek.length) {\n errors['naglowek'] = requiredMsg;\n isValid = false;\n }\n\n // validate tresc\n if (!validateWysiwygEditor(tresc)) {\n errors['tresc'] = requiredMsg;\n isValid = false;\n } else if (countWysiwygChars(tresc) > this.trescMaxLength) {\n errors['tresc'] = `To pole może mieć maksymalnie ${this.trescMaxLength} znaków.`;\n isValid = false;\n }\n\n return [isValid, errors]\n }\n\n // rendering\n\n renderHeader() {\n return (\n <Breadcrumps>\n <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia/pomoc'>Pomoc</Link></li>\n <li className=\"breadcrumps__current\">{this.state.isNew ? 'Dodaj' : 'Edytuj'} pomoc</li>\n </Breadcrumps>\n )\n }\n\n renderContent() {\n const {\n ekran,\n isNew,\n loadEmbedError,\n naglowek,\n previewOn,\n savingOn,\n tresc,\n typOgolna,\n uploadImageError,\n } = this.state;\n const typeChosen = [true, false].includes(typOgolna);\n return (\n <>\n <Text tag=\"h2\" mainHeader>{this.state.isNew ? 'Dodaj' : 'Edytuj'} pomoc</Text>\n <Container className=\"container-with-wysiwyg\">\n <GridCustom fullwidth>\n <fieldset>\n <Text tag=\"legend\" className=\"label\">Typ pomocy</Text>\n {!isNew && <Text info>Podczas edycji pomocy nie jest możliwa zmiana jej typu.</Text>}\n <Radio\n checked={typOgolna === true}\n disabled={!isNew || savingOn}\n name=\"typRadioGroup\"\n value={true}\n onChange={this.handleSaveTypOgolna}\n label=\"Ogólna\"\n />\n <Radio\n checked={typOgolna === false}\n disabled={!isNew || savingOn}\n name=\"typRadioGroup\"\n value={false}\n onChange={this.handleSaveTypOgolna}\n label=\"Na ekranie aplikacji\"\n />\n </fieldset>\n </GridCustom>\n {typOgolna === true && this.renderTypOgolnaForm()}\n {typOgolna === false && this.renderTypNaEkranieForm()}\n {typeChosen && this.renderCommonFields()}\n {typOgolna === true && this.renderPowiazaneForm()}\n {typeChosen && this.renderButtons(typOgolna)}\n </Container>\n {uploadImageError.length > 0 && this.renderUploadImageErrorDialog()}\n {loadEmbedError.length > 0 && this.renderLoadEmbedErrorDialog()}\n {previewOn && (\n <TrescPreview\n content={{naglowek, tresc}}\n screen={EKRANY_DICT[ekran.value].id}\n closePreview={() => this.setState({previewOn: false})}\n />\n )}\n </>\n )\n }\n\n renderTypOgolnaForm() {\n const {\n errors,\n hasChildren,\n isRoot,\n originalRozdzialNadrzedny,\n originalTypOgolna,\n rozdzialNadrzedny,\n savingOn,\n typOgolna\n } = this.state;\n const isRozdzialNadrzednyInvalid = (errors.rozdzialNadrzedny || '').length > 0;\n return (\n <FieldWithLabel label=\"RozdziaÅ‚ nadrzÄ™dny\">\n {isRoot && (\n <Text info>To pierwsza pomoc dodana do serwisu, wiÄ™c nie da siÄ™ dla niej wybrać rozdziaÅ‚u nadrzÄ™dnego.</Text>\n )}\n {!isRoot && typOgolna && originalTypOgolna && rozdzialNadrzedny.value !== originalRozdzialNadrzedny && hasChildren && (\n <Text info>Uwaga! Dla edytowanej pomocy istniejÄ… pomoce podrzÄ™dne, zmiana rozdziaÅ‚u nadrzÄ™dnego spowoduje przepiÄ™cie pod wskazany rozdziaÅ‚ caÅ‚ej gaÅ‚Ä™zi.</Text>\n )}\n <Select\n aria-describedby={isRozdzialNadrzednyInvalid ? 'rozdzialNadrzedny_error' : null}\n className={isRozdzialNadrzednyInvalid ? 'select-custom select-custom--invalid' : 'select-custom'}\n isDisabled={isRoot || savingOn}\n options={[EMPTY_VALUE, ...this.state.availableParents.map(p => ({value: p.id, label: p.naglowek}))]}\n placeholder='Wybierz...'\n value={rozdzialNadrzedny}\n onChange={(selectedOption) => this.handleChangeAttribute('rozdzialNadrzedny', selectedOption)}\n styles={customSelectStyles}\n />\n {isRozdzialNadrzednyInvalid && <Text error id=\"rozdzialNadrzedny_error\">{errors.rozdzialNadrzedny}</Text>}\n </FieldWithLabel>\n )\n }\n\n renderTypNaEkranieForm() {\n const {\n availableScreens,\n ekran,\n errors,\n savingOn\n } = this.state;\n const isEkranInvalid = (errors.ekran || '').length > 0;\n return (\n <FieldWithLabel label=\"Ekran\">\n {!availableScreens.length && <Text info>Wszystkie ekrany sÄ… aktualnie wykorzystane w innych pomocach. Możesz odpiąć ekran od istniejÄ…cej pomocy, żeby ustawić go w nowej pomocy.</Text>}\n <Select\n aria-describedby={isEkranInvalid ? 'ekran_error' : null}\n className={isEkranInvalid ? 'select-custom select-custom--invalid' : 'select-custom'}\n isDisabled={savingOn}\n options={[EMPTY_VALUE, ].concat(...availableScreens.map(s => {\n return {value: s, label: EKRANY_DICT[s].label}\n }))}\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n value={ekran}\n onChange={(selectedOption) => this.handleChangeAttribute('ekran', selectedOption)}\n styles={customSelectStyles}\n />\n {isEkranInvalid && <Text error id=\"ekran_error\">{errors.ekran}</Text>}\n </FieldWithLabel>\n )\n }\n\n renderCommonFields() {\n const {\n errors,\n savingOn,\n naglowek,\n tresc,\n } = this.state;\n const isNaglowekInvalid = (errors.naglowek || '').length > 0;\n const isTrescInvalid = (errors.tresc || '').length > 0;\n return (\n <>\n <FieldWithLabel label=\"Nagłówek\">\n <TextFieldCustom\n aria-describedby={isNaglowekInvalid ? 'naglowek_error' : null}\n characterCount\n clearFieldContext=\"nagłówek\"\n disabled={savingOn}\n invalid={isNaglowekInvalid}\n fullwidth\n maxLength={300}\n value={naglowek}\n onClear={(ev) => this.handleChangeAttribute('naglowek', '')}\n onChange={(ev) => this.handleChangeAttribute('naglowek', ev.target.value)}\n onFocus={(ev) => this.handleClearAttributeError('naglowek')} />\n {isNaglowekInvalid && <Text error id=\"naglowek_error\">{errors.naglowek}</Text>}\n </FieldWithLabel>\n <FieldWithLabel label=\"Treść\" className=\"wysiwyg-container\">\n <WysiwygEditor\n invalid={isTrescInvalid}\n initialContentState={tresc}\n maxLength={this.trescMaxLength}\n toolbar={{\n options: ['inline', 'list', 'blockType', 'link', 'image', 'embedded'],\n inline: {\n inDropdown: false,\n options: ['bold', 'italic'],\n },\n list: {\n inDropdown: false,\n options: ['unordered', 'ordered'],\n },\n blockType: {\n inDropdown: false,\n options: ['Blockquote', ],\n },\n link: { inDropdown: false },\n image: {\n urlEnabled: false,\n uploadEnabled: true,\n alignmentEnabled: false,\n uploadCallback: this.handleUploadFile,\n previewImage: true,\n inputAccept: 'image/gif,image/jpeg,image/jpg,image/png,image/svg',\n alt: {present: true, mandatory: true},\n defaultSize: {\n height: 'auto',\n width: 500,\n },\n },\n embedded: {\n defaultSize: {\n height: 300,\n width: 500,\n },\n embedCallback: this.handleLoadEmbed\n },\n }}\n localization={{ locale: 'pl' }}\n onContentStateChange={(contentState) => this.handleChangeAttribute('tresc', contentState)}\n />\n {isTrescInvalid && <Text error>{errors.tresc}</Text>}\n </FieldWithLabel>\n </>\n )\n }\n\n renderPowiazaneForm() {\n const optionsForPowiazane = this.state.availableRelatives.map(r => ({value: r.id, label: r.naglowek}));\n const isRoot = this.state.isRoot;\n return (\n <GridCustom fullwidth>\n <FieldWithLabel label=\"PowiÄ…zane\">\n {(isRoot && <Text info>To pierwsza pomoc dodana do serwisu, wiÄ™c nie da siÄ™ dla niej wybrać powiÄ…zanych.</Text>) || (!optionsForPowiazane.length && <Text info>Nie ma jeszcze innych pomocy do ustawienia jako powiÄ…zane.</Text>)}\n <Select\n className={'select-custom'}\n closeMenuOnSelect={false}\n defaultValue={this.state.powiazane}\n isClearable={false}\n isDisabled={this.state.isRoot || !optionsForPowiazane.length || this.state.savingOn}\n isMulti\n isSearchable\n options={optionsForPowiazane}\n placeholder='Wybierz...'\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n onChange={selectedOptions => this.handleChangeAttribute(\n 'powiazane', selectedOptions === null ? [] : selectedOptions\n )}\n styles={customSelectStyles}\n />\n </FieldWithLabel>\n </GridCustom>\n )\n }\n\n renderUploadImageErrorDialog() {\n return this.renderErrorDialog('uploadImageError')\n }\n\n renderLoadEmbedErrorDialog() {\n return this.renderErrorDialog('loadEmbedError')\n }\n\n renderErrorDialog(errorName) {\n // TODO: after close wysiwyg toolbar component hides and it's impossible to show error in the component.\n // https://github.com/jpuri/react-draft-wysiwyg/blob/master/src/controls/Image/Component/index.js#L138\n return (\n <DialogCustom\n dialogTitleError={this.state[errorName]}\n style={{zIndex: 100}}\n onClose={() => this.setState({[errorName]: ''})}\n >\n <GridCustom centerVertical flexEnd>\n <ButtonStyled onClick={() => this.setState({ [errorName]: '' })} primary>OK</ButtonStyled>\n </GridCustom>\n </DialogCustom>\n )\n }\n\n renderButtons(typOgolna) {\n const {\n ekran,\n fetchSaveError,\n saveBtnText,\n savingOn\n } = this.state;\n return (\n <>\n <GridCustom fullwidth={typOgolna === false} flexEnd={typOgolna === true}>\n {typOgolna === false && <ButtonStyled disabled={ekran.value === 0 || savingOn} primary onClick={this.handlePreview}>PodglÄ…d na ekranie</ButtonStyled>}\n <ButtonStyled disabled={savingOn} save onClick={this.handleSave}>{saveBtnText}</ButtonStyled>\n </GridCustom>\n {fetchSaveError.length > 0 && <Text error>{fetchSaveError}</Text>}\n </>\n )\n }\n}\n\nFormPomoc.contextType = UserContext;\n\nexport { FormPomoc };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport { countWysiwygChars } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { validateWysiwygEditor } from '../../../validators';\nimport {\n Breadcrumps,\n ButtonStyled,\n Container,\n FieldWithLabel,\n GridCustom,\n Text,\n WysiwygEditor,\n} from '../../common';\nimport { BaseComponent } from '../common';\n\n\nconst SAVE_BUTTON_DEFAULT_LABEL = 'Zapisz regulamin';\n\n\nclass FormRegulamin extends BaseComponent {\n // basic functions\n\n componentDidMount() {\n if (!this.props.editing) {\n this.setState({initializingOn: false});\n } else {\n // get regulamin from server\n super.componentDidMount()\n }\n }\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n\n const regulamin = getSerializedObject(\n data,\n {\n nonRecursiveKeys: ['tresc'],\n dateAttributes: ['dataOpublikowania', ],\n dateTimeAttributes: ['dataOpublikowania', ],\n },\n ).regulaminy;\n if (!regulamin) {\n this.setState({initializingOn: false, pageNotFound: true});\n } else {\n this.setState({\n initializingOn: false,\n tresc: regulamin.tresc,\n dataOpublikowania: this.version === 'aktualna' ? '' : regulamin.dataOpublikowania,\n });\n }\n }\n\n handleChangeAttribute(name, value) {\n this.setState(prevState => ({\n [name]: value,\n errors: Object.assign({}, prevState.errors, {[name]: ''}),\n }));\n }\n\n handleSave() {\n this.setState(\n {savingOn: true, fetchSaveError: '', saveBtnText: 'Trwa zapisywanie...'},\n () => {\n const [isValid, errors] = this.validate();\n if (isValid) {\n // save regulamin on server\n this.xhrFetch = fetchApi(\n API_URLS.regulationsAdmin.path,\n this.firstSaving ? 'POST' : 'PUT',\n {},\n getSerializedObject(\n {tresc: this.state.tresc},\n {toServer: true, nonRecursiveKeys: ['tresc', ]}\n ),\n this.handleFetchSaveSuccess,\n this.handleFetchSaveError,\n this.handleFetchSaveIncorrectStatus,\n );\n } else {\n this.setState({savingOn: false, errors, saveBtnText: SAVE_BUTTON_DEFAULT_LABEL});\n }\n }\n );\n }\n\n handleFetchSaveSuccess(data) {\n this.xhrFetchSave = null;\n this.setState(\n {\n savingOn: false,\n saveBtnText: 'Zapisano',\n dataOpublikowania: getSerializedObject(\n data,\n {\n dateAttributes: ['dataOpublikowania', ],\n dateTimeAttributes: ['dataOpublikowania', ],\n },\n ).regulaminy.dataOpublikowania},\n () => {\n this.firstSaving = false;\n this.saveMsgTimeout = setTimeout(() => {\n this.setState({saveBtnText: SAVE_BUTTON_DEFAULT_LABEL})\n }, 5000)\n }\n );\n }\n\n handleFetchSaveError(data) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n savingOn: false,\n saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n fetchSaveError: `Nie udaÅ‚o siÄ™ zapisać regulaminu. ${data.message}`,\n });\n }\n\n handleFetchSaveIncorrectStatus(status) {\n this.xhrFetch = null; // clean xhr object\n if (status === 404) {\n this.setState({savingOn: false, pageNotFound: true});\n } else {\n let message = '';\n if (status === 403) {\n message = `Nie masz uprawnieÅ„ do ${this.firstSaving\n ? 'dodawania' : 'edycji'} regulaminu.`;\n // update permission value in context\n this.removePermission();\n }\n this.setState({\n savingOn: false,\n saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n fetchSaveError: message || `Podczas zapisu regulaminu wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`,\n });\n }\n }\n\n // helpers\n\n preState(props) {\n this.trescMaxLength = 50000;\n this.firstSaving = !props.editing;\n\n this.version = null;\n if (props.editing) {\n const params = new URLSearchParams(props.location.search);\n this.version = params.get('wersja') || this.version;\n }\n }\n\n getAdditionalState(props) {\n return {\n savingOn: false,\n tresc: '',\n dataOpublikowania: '',\n fetchSaveError: '',\n errors: {\n tresc: '',\n },\n saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n }\n }\n\n setAdditionalHandlers() {\n this.handleSave = this.handleSave.bind(this);\n this.handleFetchSaveSuccess = this.handleFetchSaveSuccess.bind(this);\n this.handleFetchSaveError = this.handleFetchSaveError.bind(this);\n this.handleFetchSaveIncorrectStatus = this.handleFetchSaveIncorrectStatus.bind(this);\n }\n\n getFetchUrl() {\n return API_URLS.regulationsAdmin.path\n }\n\n getFetchData() {\n let query = {};\n if (!(this.version === 'aktualna')) {\n query['version'] = 'for_publication';\n }\n return query\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać wersji regulaminu do edycji. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Podczas pobierania wersji regulaminu do edycji wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n callback403 = () => {\n this.removePermission();\n }\n\n removePermission() {\n this.context.removePermission('generalContentCookiesRegulation');\n }\n\n validate() {\n let isValid = true;\n let errors = {};\n\n const tresc = this.state.tresc;\n // validate tresc\n if (!validateWysiwygEditor(tresc)) {\n errors['tresc'] = 'To pole jest wymagane.';\n isValid = false;\n } else if (countWysiwygChars(tresc) > this.trescMaxLength) {\n errors['tresc'] = `To pole może mieć maksymalnie ${this.trescMaxLength} znaków.`;\n isValid = false;\n }\n\n return [isValid, errors]\n }\n\n // rendering\n\n renderHeader() {\n return (\n <Breadcrumps>\n <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia/regulaminy'>Regulamin</Link></li>\n <li className=\"breadcrumps__current\">{this.props.editing ? 'Edytuj' : 'Dodaj'} regulamin</li>\n </Breadcrumps>\n )\n }\n\n renderContent() {\n const {\n dataOpublikowania,\n errors,\n fetchSaveError,\n saveBtnText,\n savingOn,\n tresc,\n } = this.state;\n const isTrescInvalid = (errors.tresc || '').length > 0;\n return (\n <>\n <Text tag=\"h2\" mainHeader>{this.props.editing ? 'Edytuj' : 'Dodaj'} regulamin</Text>\n <Container>\n <GridCustom fullwidth>\n <FieldWithLabel label=\"Treść\" className=\"wysiwyg-wrapper\">\n <WysiwygEditor\n disabled={savingOn}\n invalid={isTrescInvalid}\n initialContentState={tresc}\n maxLength={this.trescMaxLength}\n toolbar={{\n options: ['list', 'link'],\n list: {\n inDropdown: false ,\n options: ['unordered', 'ordered'],\n },\n link: { inDropdown: false },\n }}\n localization={{ locale: 'pl' }}\n onContentStateChange={(contentState) => this.handleChangeAttribute('tresc', contentState)}\n />\n {isTrescInvalid && <Text error>{errors.tresc}</Text>}\n </FieldWithLabel>\n </GridCustom>\n <GridCustom flexEnd>\n {dataOpublikowania.length > 0 && (new Date(dataOpublikowania).getTime() > new Date().getTime()) && <Text info>Regulamin zostanie opublikowany {dataOpublikowania}.</Text>}\n </GridCustom>\n <GridCustom flexEnd>\n <ButtonStyled disabled={savingOn} save onClick={this.handleSave}>{saveBtnText}</ButtonStyled>\n </GridCustom>\n {fetchSaveError.length > 0 && <Text error role=\"alert\">{fetchSaveError}</Text>}\n </Container>\n </>\n )\n }\n}\n\nFormRegulamin.contextType = UserContext;\n\nexport { FormRegulamin };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport { countWysiwygChars } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n Breadcrumps,\n ButtonStyled,\n Container,\n GridCustom,\n Text,\n WysiwygEditor,\n} from '../../common';\nimport { BaseComponent } from '../common';\nimport { TrescPreview } from './TrescPreview';\n\n\nconst SAVE_BUTTON_DEFAULT_LABEL = 'Zapisz treść';\n\n\nclass FormTrescOgolna extends BaseComponent {\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n\n const trescOgolna = getSerializedObject(\n data, {nonRecursiveKeys: ['tresc', ]}).trescOgolna;\n this.setState({\n initializingOn: false,\n id: parseInt(this.props.match.params.id),\n naglowek: trescOgolna.naglowek,\n tresc: Object.keys(trescOgolna.tresc).length > 0 ? trescOgolna.tresc : '',\n });\n }\n\n handleChangeAttribute(name, value) {\n this.setState(prevState => ({\n [name]: value,\n errors: Object.assign({}, prevState.errors, {[name]: ''}),\n }));\n }\n\n handleSave() {\n this.setState(\n {savingOn: true, fetchSaveError: '', saveBtnText: 'Trwa zapisywanie...'},\n () => {\n const [isValid, errors] = this.validate();\n if (isValid) {\n const id_ = this.props.match.params.id;\n // save trescOgolna on server\n this.xhrFetch = fetchApi(\n API_URLS.generalContentAdminDetails.getUrl(id_),\n 'PUT',\n {},\n getSerializedObject(\n {id: id_, tresc: this.state.tresc},\n {toServer: true, nonRecursiveKeys: ['tresc', ]},\n ),\n this.handleFetchSaveSuccess,\n this.handleFetchSaveError,\n this.handleFetchSaveIncorrectStatus,\n );\n } else {\n this.setState({savingOn: false, errors, saveBtnText: SAVE_BUTTON_DEFAULT_LABEL});\n }\n }\n );\n }\n\n handleFetchSaveSuccess(data) {\n this.xhrFetchSave = null;\n this.setState(\n {\n savingOn: false,\n saveBtnText: 'Zapisano',\n },\n () => {\n this.saveMsgTimeout = setTimeout(() => {\n this.setState({saveBtnText: SAVE_BUTTON_DEFAULT_LABEL})\n }, 5000)\n }\n );\n }\n\n handleFetchSaveError(data) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n savingOn: false,\n saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n fetchSaveError: `Nie udaÅ‚o siÄ™ zapisać treÅ›ci ogólnej. ${data.message}`,\n });\n }\n\n handleFetchSaveIncorrectStatus(status) {\n this.xhrFetch = null; // clean xhr object\n if (status === 404) {\n this.setState({savingOn: false, pageNotFound: true});\n } else {\n let message = '';\n if (status === 403) {\n message = 'Nie masz uprawnieÅ„ do edycji treÅ›ci ogólnych.';\n // update permission value in context\n this.removePermission();\n }\n this.setState({\n savingOn: false,\n saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n fetchSaveError: message || `Podczas zapisu treÅ›ci ogólnej wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`,\n });\n }\n }\n\n // helpers\n\n preState(props) {\n this.trescMaxLength = 2000;\n }\n\n getAdditionalState(props) {\n return {\n previewOn: false,\n savingOn: false,\n id: '',\n naglowek: '',\n tresc: '',\n errors: {\n tresc: '',\n },\n saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n fetchSaveError: '',\n }\n }\n\n setAdditionalHandlers() {\n this.handleSave = this.handleSave.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.handleFetchSaveSuccess = this.handleFetchSaveSuccess.bind(this);\n this.handleFetchSaveError = this.handleFetchSaveError.bind(this);\n this.handleFetchSaveIncorrectStatus = this.handleFetchSaveIncorrectStatus.bind(this);\n }\n\n getFetchUrl() {\n return API_URLS.generalContentAdminDetails.getUrl(\n this.props.match.params.id)\n }\n\n validate() {\n let isValid = true;\n let errors = {};\n\n // validate tresc\n if (countWysiwygChars(this.state.tresc) > this.trescMaxLength) {\n errors['tresc'] = `To pole może mieć maksymalnie ${this.trescMaxLength} znaków.`;\n isValid = false;\n }\n\n return [isValid, errors]\n }\n\n callback403 = () => {\n this.removePermission();\n }\n\n removePermission() {\n this.context.removePermission('generalContentCookiesRegulation');\n }\n\n // rendering\n\n renderHeader() {\n return (\n <>\n <Breadcrumps>\n <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia/tresci-ogolne'>TreÅ›ci ogólne</Link></li>\n <li className=\"breadcrumps__current\">Edytuj {this.state.naglowek}</li>\n </Breadcrumps>\n <Text tag=\"h2\" mainHeader>Edycja: {this.state.naglowek}</Text>\n </>\n )\n }\n\n renderContent() {\n const {\n errors,\n fetchSaveError,\n id,\n naglowek,\n previewOn,\n saveBtnText,\n savingOn,\n tresc,\n } = this.state;\n const isTrescInvalid = (errors.tresc || '').length > 0;\n return (\n <>\n <Container className=\"wysiwyg-wrapper\">\n <WysiwygEditor\n disabled={savingOn}\n invalid={isTrescInvalid}\n initialContentState={tresc}\n localization={{ locale: 'pl' }}\n maxLength={this.trescMaxLength}\n wysiwygClassName=\"wysiwyg__wrapper-with-toolbar\"\n toolbar={{\n options: ['inline', 'list', 'blockType'],\n inline: {\n inDropdown: false,\n options: ['bold', 'italic'],\n },\n list: {\n inDropdown: false,\n options: ['unordered', 'ordered'],\n },\n blockType: {\n inDropdown: false,\n options: ['Blockquote', ],\n },\n }}\n onContentStateChange={(contentState) => this.handleChangeAttribute('tresc', contentState)}\n />\n {isTrescInvalid && <Text error>{errors.tresc}</Text>}\n <GridCustom fullwidth>\n <ButtonStyled disabled={savingOn} primary onClick={() => this.setState({previewOn: true})}>PodglÄ…d na ekranie</ButtonStyled>\n <ButtonStyled disabled={savingOn} save onClick={this.handleSave}>{saveBtnText}</ButtonStyled>\n </GridCustom>\n {fetchSaveError.length > 0 && <Text error role=\"alert\">{fetchSaveError}</Text>}\n </Container>\n {previewOn && (\n <TrescPreview\n content={{id, naglowek, tresc}}\n screen='homePage'\n closePreview={() => this.setState({previewOn: false})}\n />\n )}\n </>\n )\n }\n}\n\nFormTrescOgolna.contextType = UserContext;\n\nexport { FormTrescOgolna };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Icon } from '@rmwc/icon';\n\nimport { UserContext } from '../../../context/user-context';\nimport { serializeAuditData } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n AuditData,\n Breadcrumps,\n ButtonStyled,\n Container,\n FieldWithLabel,\n GridCustom,\n Text\n} from '../../common';\nimport { colors } from '../../vars/vars';\nimport { BaseComponent } from '../common';\nimport { DraftToComponents } from './DraftToComponents';\n\n\nclass Komunikat extends BaseComponent {\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n\n const komunikat = getSerializedObject(\n data,\n {\n nonRecursiveKeys: ['tresc'],\n dateAttributes: ['dataOpublikowania', 'dataWaznosci'],\n dateTimeAttributes: ['dataOpublikowania', 'dataWaznosci'],\n }\n ).komunikat;\n if (!komunikat) {\n this.setState({initializingOn: false, pageNotFound: true});\n } else {\n this.setState(\n {\n initializingOn: false,\n komunikat,\n auditData: serializeAuditData(komunikat),\n },\n () => this.setUrlWithCorrectSlug(komunikat)\n );\n }\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {komunikat: {}, auditData: {}}\n }\n\n getFetchUrl() {\n return API_URLS.statementsAdminDetails.getUrl(\n this.props.match.params.id)\n }\n\n getFetchData() {\n return {context: 'admin_panel'}\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać komunikatu. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Podczas pobierania komunikatu wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n setUrlWithCorrectSlug(komunikat) {\n // update url if slugs are not equal\n const urlParams = this.props.match.params;\n if (komunikat.slug !== urlParams.slug) {\n this.props.history.push(`/zarzadzanie-trescia/komunikaty/${urlParams.id}-${komunikat.slug}`);\n }\n }\n\n callback403 = () => {\n this.context.removePermission('statements');\n }\n\n // rendering\n\n renderHeader() {\n return (\n <>\n <Breadcrumps>\n <li className=\"breadcrumps__link\"><Link\n to='/zarzadzanie-trescia/komunikaty'>Komunikaty</Link>\n </li>\n <li className=\"breadcrumps__current\">Szczegóły komunikatu\n </li>\n </Breadcrumps>\n <Text tag=\"h2\" mainHeader>Szczegóły\n komunikatu: {this.state.komunikat.naglowek}</Text>\n </>\n )\n }\n\n renderContent() {\n const komunikat = this.state.komunikat;\n return (\n <>\n <Container className=\"details-preview separate-container\">\n <GridCustom flexEnd>\n <ButtonStyled primary noMargin\n onClick={() => this.props.history.push(`/zarzadzanie-trescia/komunikaty/${this.props.match.params.id}-${komunikat.slug}/edytuj`)}>Edytuj\n komunikat</ButtonStyled>\n </GridCustom>\n <GridCustom flexL fullwidth noWrap>\n <section\n className=\"details-preview__part details-preview__part--main\">\n <FieldWithLabel label=\"Nagłówek\">\n <Text>{komunikat.naglowek}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Treść\">\n <DraftToComponents content={komunikat.tresc}/>\n </FieldWithLabel>\n <FieldWithLabel label=\"Slug\">\n <Text>{komunikat.slug}</Text>\n </FieldWithLabel>\n </section>\n <aside\n className=\"details-preview__part details-preview__part--aside\">\n <GridCustom>\n <FieldWithLabel label=\"Aktywny\">\n {komunikat.czyAktywny ? (\n <Icon icon=\"check_circle\"\n style={{color: colors.secondary}}\n title=\"Tak\" aria-hidden=\"true\"/>\n ) : (\n <Icon icon=\"cancel\"\n style={{color: colors.textHintOnLight}}\n title=\"Nie\" aria-hidden=\"true\"/>\n )}\n </FieldWithLabel>\n <FieldWithLabel label=\"Żółty pasek\">\n {komunikat.czyZoltyPasek ? (\n <Icon icon=\"check_circle\"\n style={{color: colors.secondary}}\n title=\"Tak\" aria-hidden=\"true\"/>\n ) : (\n <Icon icon=\"cancel\"\n style={{color: colors.textHintOnLight}}\n title=\"Nie\" aria-hidden=\"true\"/>\n )}\n </FieldWithLabel>\n </GridCustom>\n <GridCustom>\n <FieldWithLabel label=\"Bezterminowy\">\n {komunikat.dataWaznosci.length === 0 ? (\n <Icon icon=\"check_circle\"\n style={{color: colors.secondary}}\n title=\"Tak\" aria-hidden=\"true\"/>\n ) : (\n <Icon icon=\"cancel\"\n style={{color: colors.textHintOnLight}}\n title=\"Nie\" aria-hidden=\"true\"/>\n )}\n </FieldWithLabel>\n <FieldWithLabel label=\"Data ważnoÅ›ci\">\n <Text>{komunikat.dataWaznosci || '-'}</Text>\n </FieldWithLabel>\n </GridCustom>\n <FieldWithLabel label=\"Data opublikowania\">\n <Text>{komunikat.dataOpublikowania}</Text>\n </FieldWithLabel>\n </aside>\n </GridCustom>\n </Container>\n <AuditData {...this.state.auditData} />\n </>\n )\n }\n}\n\nKomunikat.contextType = UserContext;\n\nexport { Komunikat };\n","import React from 'react';\nimport { Icon } from '@rmwc/icon';\nimport {\n DataTable,\n DataTableBody,\n DataTableCell,\n DataTableContent,\n DataTableRow,\n} from '@rmwc/data-table';\n\nimport { UserContext } from '../../../context/user-context';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n Breadcrumps,\n ButtonStyled,\n FieldWithLabel,\n GridCustom,\n Text\n} from '../../common';\nimport { colors } from '../../vars/vars';\nimport { BaseComponent } from '../common';\n\n\nclass Komunikaty extends BaseComponent {\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n\n this.setState({\n initializingOn: false,\n komunikaty: getSerializedObject(\n data,\n {\n nonRecursiveKeys: ['tresc', ],\n dateAttributes: ['dataOpublikowania', ],\n dateTimeAttributes: ['dataOpublikowania', ],\n }\n ).komunikaty,\n });\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {komunikaty: []}\n }\n\n getFetchUrl() {\n return API_URLS.statementsAdmin.path\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać komunikatów. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Podczas pobierania komunikatów wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n callback403 = () => {\n this.context.removePermission('statements');\n }\n\n // rendering\n\n renderHeader() {\n return (\n <>\n <Breadcrumps>\n <li className=\"breadcrumps__current\">Komunikaty</li>\n </Breadcrumps>\n <GridCustom fullwidth centerVertical>\n <Text tag=\"h2\" mainHeader>Komunikaty</Text>\n <ButtonStyled add onClick={() => this.props.history.push('/zarzadzanie-trescia/komunikaty/nowy')}>Dodaj komunikat</ButtonStyled>\n </GridCustom>\n </>\n )\n }\n\n renderContent() {\n if (!this.state.komunikaty.length) {\n return <Text error role=\"alert\">Nie dodano jeszcze żadnego komunikatu.</Text>\n }\n const sort = (k1, k2) => {\n return k1.id > k2.id ? -1 : 1\n };\n return (\n <DataTable className=\"table\">\n <DataTableContent>\n <DataTableBody>\n {this.state.komunikaty.sort(sort).map(k => (\n <DataTableRow key={k.id}>\n <DataTableCell>\n <Text>{k.naglowek}</Text>\n <GridCustom>\n <FieldWithLabel label=\"Aktywny\">\n {k.czyAktywny ? (\n <Icon aria-hidden=\"true\" icon=\"check_circle\" style={{ color: colors.secondary }} title=\"Tak\" />\n ) : (\n <Icon aria-hidden=\"true\" icon=\"cancel\" style={{ color: colors.textHintOnLight }} title=\"Nie\" />\n )}\n </FieldWithLabel>\n <FieldWithLabel label=\"Żółty pasek\">\n {k.czyZoltyPasek ? (\n <Icon aria-hidden=\"true\" icon=\"check_circle\" style={{ color: colors.secondary }} title=\"Tak\" />\n ) : (\n <Icon aria-hidden=\"true\" icon=\"cancel\" style={{ color: colors.textHintOnLight }} title=\"Nie\" />\n )}\n </FieldWithLabel>\n <FieldWithLabel label=\"Data opublikowania\">\n {k.dataOpublikowania || '-'}\n </FieldWithLabel>\n </GridCustom>\n </DataTableCell>\n <DataTableCell>\n <ButtonStyled lite onClick={() => this.props.history.push(`/zarzadzanie-trescia/komunikaty/${k.id}-${k.slug}/edytuj`)}>Edytuj</ButtonStyled>\n <ButtonStyled primary onClick={() => this.props.history.push(`/zarzadzanie-trescia/komunikaty/${k.id}-${k.slug}`)}>Szczegóły</ButtonStyled>\n </DataTableCell>\n </DataTableRow>\n ))}\n </DataTableBody>\n </DataTableContent>\n </DataTable>\n )\n }\n}\n\nKomunikaty.contextType = UserContext;\n\nexport { Komunikaty };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { isNotEmpty } from '../../../helpers';\nimport { Breadcrumps, Container, FieldWithLabel, GridCustom, Text } from '../../common';\nimport { Komunikat } from './Komunikat';\nimport { DraftToComponents } from './DraftToComponents';\n\n\nclass KomunikatFront extends Komunikat {\n\n // helpers\n\n getFetchUrl() {\n return `/api/statements/${this.props.match.params.id}`\n }\n\n getFetchData() {\n return {}\n }\n\n setUrlWithCorrectSlug(komunikat) {\n // update url if slugs are not equal\n const urlParams = this.props.match.params;\n if (komunikat.slug !== urlParams.slug) {\n this.props.history.push(`/komunikaty/${urlParams.id}-${komunikat.slug}`);\n }\n }\n\n callback403 = () => {}\n\n // rendering\n\n renderHeader() {\n return (\n <Breadcrumps isFront>\n <li className=\"breadcrumps__link\"><Link to='/komunikaty'>Komunikaty</Link></li>\n <li className=\"breadcrumps__current\">Szczegóły komunikatu</li>\n </Breadcrumps>\n )\n }\n\n renderContent() {\n document.title = \"Baza KonkurencyjnoÅ›ci - komunikat\";\n const komunikat = this.state.komunikat;\n return (\n <>\n <Text tag=\"h2\" mainHeader>Komunikat \"{this.state.komunikat.naglowek}\"</Text>\n <GridCustom fullwidth>\n <FieldWithLabel label=\"Data opublikowania\">\n <Text>{komunikat.dataOpublikowania}</Text>\n </FieldWithLabel>\n {isNotEmpty(komunikat.dataWaznosci) && (\n <FieldWithLabel label=\"Data ważnoÅ›ci\">\n <Text>{komunikat.dataWaznosci}</Text>\n </FieldWithLabel>\n )}\n </GridCustom>\n <Container>\n <FieldWithLabel label=\"Treść\">\n <DraftToComponents content={komunikat.tresc} />\n </FieldWithLabel>\n </Container>\n </>\n )\n }\n}\n\n\nexport { KomunikatFront };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport {\n DataTableCell,\n DataTableRow,\n} from '@rmwc/data-table';\n\nimport { dateToString } from '../../../helpers';\nimport { Breadcrumps, ButtonStyled, TableCustom, Text } from '../../common';\nimport { Komunikaty } from './Komunikaty';\n\n\nclass KomunikatyFront extends Komunikaty {\n\n // helpers\n\n getFetchUrl() {\n return '/api/statements'\n }\n\n // rendering\n\n renderHeader() {\n return (\n <>\n <Breadcrumps isFront>\n <li className=\"breadcrumps__current\">Komunikaty</li>\n </Breadcrumps>\n <Text tag=\"h2\" mainHeader>Lista komunikatów</Text>\n </>\n )\n }\n\n renderContent() {\n document.title = \"Baza KonkurencyjnoÅ›ci - komunikaty\";\n if (!this.state.komunikaty.length) {\n return <Text error role=\"alert\">Brak komunikatów.</Text>\n }\n const sort = (k1, k2) => {\n return k1.dataOpublikowania > k2.dataOpublikowania ? -1 : 1\n };\n return (\n <TableCustom tableHeaderList={['Data opublikowania', 'Treść komunikatu', <span className=\"sr-only\">Szczegóły</span>]}>\n {this.state.komunikaty.filter(\n k => k.czyAktywny === true && (!k.dataWaznosci.length || k.dataWaznosci >= dateToString(new Date()))\n ).sort(sort).map(k => (\n <DataTableRow key={k.id}>\n <DataTableCell>\n <Text>{k.dataOpublikowania}</Text>\n </DataTableCell>\n <DataTableCell>\n <Text>{k.naglowek}</Text>\n </DataTableCell>\n <DataTableCell>\n <ButtonStyled tag={Link} to={`/komunikaty/${k.id}-${k.slug}`} primary noMargin>\n Szczegóły<span className=\"sr-only\"> komunikatu</span>\n </ButtonStyled>\n </DataTableCell>\n </DataTableRow>\n ))}\n </TableCustom>\n \n )\n }\n}\n\n\nexport { KomunikatyFront };\n","export default __webpack_public_path__ + \"static/media/Roboto-Bold.4f39c579.ttf\";","export default __webpack_public_path__ + \"static/media/Roboto-Italic.2a1b89d7.ttf\";","export default __webpack_public_path__ + \"static/media/Roboto-Regular-with-special.9bb8205f.ttf\";","import { Font, StyleSheet } from '@react-pdf/renderer';\n\nimport robotoBold from '../../static/fonts/Roboto-Bold.ttf';\nimport robotoItalic from '../../static/fonts/Roboto-Italic.ttf';\nimport robotoRegular from '../../static/fonts/Roboto-Regular-with-special.ttf';\n\nFont.register({ family: 'Roboto', fonts: [\n { src: robotoRegular}, // font-style: normal, font-weight: normal\n { src: robotoItalic, fontStyle: 'italic' },\n { src: robotoBold, fontWeight: 700 },\n]});\n\nFont.registerHyphenationCallback(word => {\n // Breaks the lines with long strings of the same character, without white spaces.\n const wordPartSize = 40;\n let parts = [];\n\n if (word.length && word.length < wordPartSize) {\n parts = [word];\n } else {\n for (let i = 0; i < word.length; i += wordPartSize) {\n parts.push(word.slice(i, i + wordPartSize));\n }\n }\n\n return parts;\n});\n\n\nconst pdfStyles = StyleSheet.create({\n mainPdfContainerStyle: {\n padding: 40,\n fontSize: 11,\n lineHeight: 1.6,\n fontFamily: 'Roboto',\n },\n flexContainerStyle: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap'\n },\n gridSection: {\n width: 300\n },\n borderedSectionStyle: {\n paddingVertical: 0,\n paddingHorizontal: 10,\n marginVertical: 10,\n marginLeft: 10,\n borderLeftWidth: 1,\n borderLeftColor: '#666A6D'\n },\n borderedDashedSectionStyle: {\n padding: 10,\n marginBottom: 20,\n borderWidth: 1,\n borderStyle: 'dashed',\n borderColor: '#666A6D'\n },\n borderedSeparateSectionStyle: {\n paddingBottom: 5,\n marginBottom: 50,\n borderBottomWidth: 1,\n borderBottomColor: '#666A6D'\n },\n pzTitleSection: {\n padding: 5,\n marginBottom: 10,\n borderWidth: 1,\n borderLeftWidth: 5,\n borderColor: '#666A6D'\n },\n textHeaderStyle: {\n marginTop: 20,\n marginBottom: 5,\n fontSize: 16,\n fontWeight: 700\n },\n textWithLabelStyle: {\n minWidth: '45%',\n marginBottom: 10,\n },\n labelStyle: {\n marginTop: 5,\n marginBottom: 3,\n fontSize: 12,\n fontWeight: 700,\n color: '#666A6D'\n },\n labelHeaderStyle: {\n fontSize: 16,\n marginTop: 30,\n },\n dateTextStyle: {\n fontWeight: 700\n },\n textInfoStyle: {\n marginBottom: 5,\n fontSize: 10,\n fontStyle: 'italic',\n color: '#666A6D'\n },\n errorStyle: {\n color: '#ff0000'\n },\n titleStyle: {\n fontSize: 18,\n },\n sectionTitleStyle: {\n padding: 3,\n paddingLeft: 15,\n marginBottom: 10,\n fontSize: 16,\n fontWeight: 700,\n borderColor: '#666A6D',\n borderLeftWidth: 5,\n },\n});\n\n\nexport { pdfStyles };\n","import React from 'react';\nimport { Document, Page, View } from '@react-pdf/renderer';\n\nimport { PdfHeader } from '../../common';\nimport { pdfStyles } from '../../vars/pdfStyles';\nimport { DraftToPdf } from './DraftToPdf';\n\n\nconst PdfWithDraftContent = (props) => {\n return (\n <Document>\n <Page size=\"A4\" style={pdfStyles.mainPdfContainerStyle} wrap>\n <PdfHeader title={props.title} />\n {props.renderHeader && props.renderHeader()}\n <View style={pdfStyles.borderedSeparateSectionStyle}>\n <DraftToPdf content={props.content}/>\n </View>\n {props.renderFooter && props.renderFooter()}\n </Page>\n </Document>\n )\n}\n\n\nexport { PdfWithDraftContent };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Text as PdfText, StyleSheet } from '@react-pdf/renderer';\nimport { Icon } from '@rmwc/icon';\n\nimport { EKRANY_DICT, OGOLNA } from '../../../const';\nimport { UserContext } from '../../../context/user-context';\nimport { generatePdfDocument, serializeAuditData } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n AuditData,\n Breadcrumps,\n ButtonCreatePdf,\n ButtonStyled,\n Container,\n FieldWithLabel,\n GridCustom,\n Text\n} from '../../common';\nimport { BaseComponent } from '../common';\nimport { DraftToComponents } from './DraftToComponents';\nimport { PdfWithDraftContent } from './PdfWithDraftContent';\n\n\nclass Pomoc extends BaseComponent {\n\n // basic functions\n\n componentDidMount() {\n super.componentDidMount();\n\n window.onpopstate = () => {\n this.handleReload();\n }\n }\n\n componentWillUnmount() {\n window.onpopstate = () => {};\n }\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n\n const pomoc = getSerializedObject(\n data,\n {\n nonRecursiveKeys: ['tresc', ],\n dateAttributes: ['dataOpublikowania', ],\n dateTimeAttributes: ['dataOpublikowania', ],\n }\n ).pomoc;\n this.setState(\n {\n initializingOn: false,\n pomoc: Object.assign(pomoc, {typOgolna: pomoc.typ === OGOLNA}),\n auditData: serializeAuditData(pomoc),\n },\n () => this.setUrlWithCorrectSlug(pomoc)\n );\n }\n\n handleReload() {\n this.setState(\n {initializingOn: true},\n () => {this.fetchInitialData()}\n );\n }\n\n handleChangePomoc(newId, newSlug) {\n this.props.history.push(`/zarzadzanie-trescia/pomoc/${newId}-${newSlug}`);\n this.handleReload();\n }\n\n handleCreatePdf = () => {\n const pomoc = this.state.pomoc;\n this.setState(\n {pdfCreatingOn: true},\n () => {\n let pdfHeaderText;\n let ekranLabel = '---';\n if (pomoc.typOgolna) {\n pdfHeaderText = `RozdziaÅ‚ nadrzÄ™dny: ${!pomoc.rozdzialNadrzedny ? '---' : pomoc.rozdzialNadrzedny.naglowek}`;\n } else {\n if (pomoc.ekran) {\n ekranLabel = EKRANY_DICT[pomoc.ekran].label || ekranLabel;\n }\n pdfHeaderText = `Ekran: ${ekranLabel}`;\n }\n generatePdfDocument(\n <PdfWithDraftContent\n content={pomoc.tresc}\n renderHeader={() => (\n <>\n <PdfText style={[styles.pdfHeaderStyle, styles.pdfHeaderSecondaryStyle]}>\n {pdfHeaderText}\n </PdfText>\n <PdfText style={styles.pdfHeaderStyle}>TytuÅ‚: {pomoc.naglowek}</PdfText>\n </>\n )}\n />,\n 'pomoc.pdf',\n this.callbackPfdCreated\n );\n }\n );\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n pomoc: {},\n pdfCreatingOn: false,\n auditData: {},\n }\n }\n\n getFetchUrl() {\n return API_URLS.helpAdminDetails.getUrl(this.props.match.params.id)\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać pomocy. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Podczas pobierania pomocy wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n setUrlWithCorrectSlug(pomoc) {\n // update url if slugs are not equal\n const urlParams = this.props.match.params;\n if (pomoc.slug !== urlParams.slug) {\n this.props.history.push(`/zarzadzanie-trescia/pomoc/${urlParams.id}-${pomoc.slug}`);\n }\n }\n\n callbackPfdCreated = () => {\n this.setState({pdfCreatingOn: false});\n }\n\n callback403 = () => {\n this.context.removePermission('help');\n }\n\n // rendering\n\n renderHeader() {\n return (\n <Breadcrumps>\n <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia/pomoc'>Pomoc</Link></li>\n <li className=\"breadcrumps__current\">Szczegóły</li>\n </Breadcrumps>\n )\n }\n\n renderContent() {\n const pomoc = this.state.pomoc;\n const {\n id,\n naglowek,\n rozdzialNadrzedny,\n slug,\n typOgolna\n } = pomoc;\n\n let ekranLabel = '---';\n if (!pomoc.typOgolna && pomoc.ekran) {\n ekranLabel = EKRANY_DICT[pomoc.ekran].label || ekranLabel;\n }\n\n return (\n <>\n <GridCustom flexEnd>\n <ButtonCreatePdf\n pdfCreatingOn={this.state.pdfCreatingOn}\n onClick={this.handleCreatePdf} />\n </GridCustom>\n <Text tag=\"h2\" mainHeader>{naglowek}</Text>\n <Container className=\"details-preview separate-container\">\n <GridCustom flexEnd>\n <ButtonStyled primary noMargin onClick={() => this.props.history.push(`/zarzadzanie-trescia/pomoc/${id}-${slug}/edytuj`)}>Edytuj pomoc</ButtonStyled>\n </GridCustom>\n <GridCustom flexL fullwidth noWrap>\n <section className=\"details-preview__part details-preview__part--main\">\n <FieldWithLabel label=\"Typ pomocy\">\n <Text>{typOgolna ? 'ogólna' : 'ekranowa'}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Nagłówek\">\n <Text>{naglowek}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Treść\">\n <DraftToComponents content={pomoc.tresc} />\n </FieldWithLabel>\n </section>\n <aside className=\"details-preview__part details-preview__part--aside\">\n <FieldWithLabel label=\"Data opublikowania\">\n <Text>{pomoc.dataOpublikowania}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Slug\">\n <Text>{slug}</Text>\n </FieldWithLabel>\n {typOgolna && (\n <>\n <FieldWithLabel label=\"RozdziaÅ‚ nadrzÄ™dny\">\n {!rozdzialNadrzedny ? <Text>---</Text> : (\n <button key={rozdzialNadrzedny.id} onClick={() => this.handleChangePomoc(rozdzialNadrzedny.id, rozdzialNadrzedny.slug)} className=\"link-text\">\n <Icon icon=\"arrow_right\" aria-hidden=\"true\" className=\"help__help-item-icon\" />{rozdzialNadrzedny.naglowek}\n </button>\n )}\n </FieldWithLabel>\n <FieldWithLabel label=\"PowiÄ…zane\">\n {pomoc.powiazane.length > 0 ? pomoc.powiazane.map(p => (\n <button key={p.id} onClick={() => this.handleChangePomoc(p.id, p.slug)} className=\"link-text\">\n <Icon icon=\"arrow_right\" aria-hidden=\"true\" className=\"help__help-item-icon\" />{p.naglowek}\n </button>\n )) : <Text>---</Text>}\n </FieldWithLabel>\n </>\n )}\n {!typOgolna && (\n <FieldWithLabel label=\"Ekran\">\n <Text>{ekranLabel}</Text>\n </FieldWithLabel>\n )}\n <FieldWithLabel label=\"Id\">\n <Text>{id}</Text>\n </FieldWithLabel>\n </aside>\n </GridCustom>\n </Container>\n <AuditData {...this.state.auditData} />\n </>\n )\n }\n}\n\nconst styles = StyleSheet.create({\n pdfHeaderStyle: {\n lineHeight: 1.6,\n marginBottom: 5,\n fontSize: 16,\n fontWeight: 'bold'\n },\n pdfHeaderSecondaryStyle: {\n fontSize: 12,\n }\n})\n\nPomoc.contextType = UserContext;\n\nexport { Pomoc };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Icon } from '@rmwc/icon';\n\nimport { EKRANY_DICT } from '../../../const';\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { ButtonStyled, DialogCustom, GridCustom, Text } from '../../common';\nimport { BaseComponent } from '../common';\n\n\nclass PomocUsun extends BaseComponent {\n\n // basic functions\n\n componentDidMount() {\n if (this.props.typOgolna) {\n this.fetchInitialData();\n } else {\n this.setState({initializingOn: false});\n }\n }\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n this.setState({\n initializingOn: false,\n ...getSerializedObject(data).pomoc\n });\n }\n\n handleRemovePomoc() {\n this.setState({removingOn: true});\n this.xhrFetch = fetchApi(\n API_URLS.helpAdminDetails.getUrl(this.props.pomoc.id),\n 'DELETE',\n {},\n {},\n this.handleFetchRemoveSuccess,\n this.handleFetchRemoveError,\n this.handleFetchRemoveIncorrectStatus,\n );\n }\n\n handleFetchRemoveSuccess(data) {\n this.xhrFetchSave = null;\n this.props.removePomoc(this.props.pomoc.id);\n }\n\n handleFetchRemoveError(data) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n removingOn: false,\n fetchRemoveError: `Nie udaÅ‚o siÄ™ usunąć pomocy. ${data.message}`,\n });\n }\n\n handleFetchRemoveIncorrectStatus(status) {\n this.xhrFetch = null; // clean xhr object\n let message = '';\n if (status === 403) {\n message = 'Nie masz uprawnieÅ„ do usuwania pomocy.';\n // update permission value in context\n this.context.removePermission('help');\n }\n this.setState({\n removingOn: false,\n fetchRemoveError: message || `Podczas usuwania pomocy wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`,\n });\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n removingOn: false,\n fetchRemoveError: '',\n root: false,\n dzieci: [],\n powiazaneDlaObecnego: [],\n }\n }\n\n setAdditionalHandlers() {\n this.handleRemovePomoc = this.handleRemovePomoc.bind(this);\n this.handleFetchRemoveSuccess = this.handleFetchRemoveSuccess.bind(this);\n this.handleFetchRemoveError = this.handleFetchRemoveError.bind(this);\n this.handleFetchRemoveIncorrectStatus = this.handleFetchRemoveIncorrectStatus.bind(this);\n }\n\n getFetchUrl() {\n return `/api/help/${this.props.pomoc.id}/related`\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać danych pomocy. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Podczas pobierania danych pomocy wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n // rendering\n\n render() {\n let content = null,\n children = null;\n if (this.state.initializingOn) {\n content = <Text info tabIndex=\"1\">Trwa inicjalizacja danych...</Text>;\n } else {\n const pomoc = this.props.pomoc;\n if (this.props.typOgolna) {\n if (this.state.root) {\n children = <Text error role=\"status\">Nie można usunąć pomocy \"{pomoc.naglowek}\", ponieważ jest to pierwsza pomoc w systemie.</Text>;\n content = this.renderRemovingImpossible(children);\n } else if (this.state.dzieci.length || this.state.powiazaneDlaObecnego.length) {\n children = this.renderRelatives();\n content = this.renderRemovingImpossible(children);\n } else {\n content = this.renderConfirmation();\n }\n } else {\n if (!pomoc.ekran) {\n content = this.renderConfirmation();\n } else {\n children = <Text error role=\"status\">Pomocy \"{pomoc.naglowek}\" nie można usunąć, ponieważ jest przypisana do ekranu \"{!pomoc.ekran ? '---' : EKRANY_DICT[pomoc.ekran].label}\". Odepnij pomoc od ekranu, a nastÄ™pnie spróbuj ponownie.</Text>;\n content = this.renderRemovingImpossible(children);\n }\n }\n }\n\n return (\n <DialogCustom\n onClose={this.props.closePomocForRemoving}\n >\n {content}\n </DialogCustom>\n )\n }\n\n renderRemovingImpossible(children) {\n return (\n <>\n <h2 id=\"dialogLabel\">{children}</h2>\n <GridCustom centerVertical flexEnd>\n <ButtonStyled onClick={this.props.closePomocForRemoving} primary>OK</ButtonStyled>\n </GridCustom>\n </>\n )\n }\n\n renderRelatives() {\n return (\n <>\n <Text error role=\"status\">Nie można usunąć pomocy \"{this.props.pomoc.naglowek}\", ponieważ jest ona powiÄ…zana z innymi obiektami:</Text>\n {this.state.dzieci.length > 0 && this.renderList('Pomoce, dla których jest rodziaÅ‚em nadrzÄ™dnym:', this.state.dzieci)}\n {this.state.powiazaneDlaObecnego.length > 0 && this.renderList('Pomoce, z którymi jest powiÄ…zana:', this.state.powiazaneDlaObecnego)}\n </>\n )\n }\n\n renderList(header, objects) {\n return (\n <>\n <Text>{header}</Text>\n <ul>\n {objects.map(o => (\n <li key={o.id}><Link to={`/zarzadzanie-trescia/pomoc/${o.id}-${o.slug}`} className=\"link-text\"><Icon icon=\"arrow_right\" aria-hidden=\"true\" className=\"help__help-item-icon\" />{o.naglowek}</Link></li>\n ))}\n </ul>\n </>\n )\n }\n\n renderConfirmation() {\n const {\n fetchRemoveError,\n removingOn,\n } = this.state;\n return (\n <>\n <h2 id=\"dialogLabel\">Czy na pewno chcesz usunąć pomoc \"{this.props.pomoc.naglowek}\"?</h2>\n <GridCustom centerVertical flexEnd>\n <ButtonStyled disabled={removingOn} onClick={this.props.closePomocForRemoving} cancel>Nie, wróć do listy</ButtonStyled>\n <ButtonStyled disabled={removingOn} onClick={this.handleRemovePomoc} remove>UsuÅ„ pomoc</ButtonStyled>\n </GridCustom>\n {fetchRemoveError.length > 0 && <Text error role=\"alert\">{fetchRemoveError}</Text>}\n </>\n )\n }\n}\n\nPomocUsun.contextType = UserContext;\n\nexport { PomocUsun };\n","import React from 'react';\nimport { TabBar, Tab } from '@rmwc/tabs';\nimport {\n DataTable,\n DataTableBody,\n DataTableCell,\n DataTableContent,\n DataTableHead,\n DataTableHeadCell,\n DataTableRow,\n} from '@rmwc/data-table';\nimport '@material/tab-bar/dist/mdc.tab-bar.css';\nimport '@material/tab-scroller/dist/mdc.tab-scroller.css';\nimport '@material/tab/dist/mdc.tab.css';\nimport '@material/tab-indicator/dist/mdc.tab-indicator.css';\nimport '@rmwc/data-table/data-table.css';\n\nimport { EKRANY_DICT } from '../../../const';\nimport { UserContext } from '../../../context/user-context';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { Breadcrumps, ButtonStyled, GridCustom, Text } from '../../common';\nimport { BaseComponent } from '../common';\nimport { PomocUsun } from './PomocUsun';\nimport { TrescPreview } from './TrescPreview';\n\n\nclass Pomoce extends BaseComponent {\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n this.setState({\n initializingOn: false,\n fetchError: '',\n pomoce: getSerializedObject(\n data, {nonRecursiveKeys: ['tresc', ]}).pomoce,\n });\n }\n\n handleChangeTypPomocy(typOgolna) {\n this.setState(\n {\n initializingOn: true,\n typOgolna,\n pomoce: [],\n },\n () => {\n this.props.history.push(`/zarzadzanie-trescia/pomoc${typOgolna === false ? '?typ=ekranowa' : ''}`);\n this.fetchInitialData()\n }\n )\n }\n\n handleRemovePomoc(id_) {\n this.setState(prevState => {\n return {\n pomocForRemoving: null,\n pomoce: prevState.pomoce.filter(p => p.id !== id_),\n }\n })\n }\n\n // helpers\n\n getAdditionalState(props) {\n const params = new URLSearchParams(props.location.search);\n return {\n previewOn: false,\n pomoce: [],\n typOgolna: params.get('typ') !== 'ekranowa',\n pomocForPreview: null,\n pomocForRemoving: null,\n }\n }\n\n setAdditionalHandlers() {\n this.handleRemovePomoc = this.handleRemovePomoc.bind(this);\n }\n\n getFetchUrl() {\n return API_URLS.helpAdmin.path\n }\n\n getFetchData() {\n let query = {};\n if (!this.state.typOgolna) {\n query['type'] = 'screen_assigned';\n }\n return query\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać pomocy. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Podczas pobierania pomocy wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n callback403 = () => {\n this.context.removePermission('help');\n }\n\n // rendering\n renderHeader() {\n const typOgolna = this.state.typOgolna;\n return (\n <>\n <Breadcrumps>\n <li className=\"breadcrumps__current\">Pomoc</li>\n </Breadcrumps>\n <GridCustom fullwidth centerVertical>\n <Text tag=\"h2\" mainHeader>Pomoc</Text>\n <ButtonStyled add onClick={() => this.props.history.push(`/zarzadzanie-trescia/pomoc/nowa`)}>Dodaj pomoc</ButtonStyled>\n </GridCustom>\n <TabBar>\n <Tab disabled={typOgolna === true} onClick={() => this.handleChangeTypPomocy(true)}>Ogólna</Tab>\n <Tab disabled={typOgolna === false} onClick={() => this.handleChangeTypPomocy(false)}>Na ekranie aplikacji</Tab>\n </TabBar>\n </>\n )\n }\n\n renderContent() {\n return (\n <>\n {this.renderList()}\n {this.state.previewOn && this.renderPreview()}\n {this.state.pomocForRemoving !== null && (\n <PomocUsun\n pomoc={this.state.pomocForRemoving}\n typOgolna={this.state.typOgolna}\n closePomocForRemoving={() => this.setState({pomocForRemoving: null})}\n removePomoc={this.handleRemovePomoc}\n />\n )}\n </>\n )\n }\n\n renderList() {\n if (!this.state.pomoce.length) {\n return <Text error role=\"alert\">Nie dodano jeszcze żadnej pomocy {this.state.typOgolna ? 'ogólnej' : 'na ekranie aplikacji'}.</Text>\n }\n const typOgolna = this.state.typOgolna;\n\n const sort = (p1, p2) => {\n return p1.id > p2.id ? -1 : 1\n };\n\n return (\n <DataTable className=\"table\">\n <DataTableContent>\n <DataTableHead>\n <DataTableRow>\n <DataTableHeadCell>Nagłówek pomocy</DataTableHeadCell>\n {!typOgolna && <DataTableHeadCell>PrzypiÄ™ta do ekranu</DataTableHeadCell>}\n <DataTableHeadCell></DataTableHeadCell>\n </DataTableRow>\n </DataTableHead>\n <DataTableBody>\n {this.state.pomoce.sort(sort).map(p => (\n <DataTableRow key={p.id}>\n <DataTableCell>\n {typOgolna && !p.rozdzialNadrzedny && <Text info>Pierwsza!</Text>}\n <Text>{p.naglowek}</Text>\n </DataTableCell>\n {!typOgolna && (\n <DataTableCell className=\"table__width-needy-cell\">\n {!p.ekran ? <Text error>NieprzypiÄ™ta do ekranu</Text> : <Text >{EKRANY_DICT[p.ekran].label}</Text>}\n <ButtonStyled lite disabled={!p.ekran} onClick={() => this.setState({previewOn: true, pomocForPreview: p})} noMargin>\n PodglÄ…d na ekranie\n </ButtonStyled>\n </DataTableCell>\n )}\n <DataTableCell>\n <ButtonStyled remove onClick={() => this.setState({pomocForRemoving: p})}>UsuÅ„</ButtonStyled>\n <ButtonStyled lite onClick={() => this.props.history.push(`/zarzadzanie-trescia/pomoc/${p.id}-${p.slug}/edytuj`)}>Edytuj</ButtonStyled>\n <ButtonStyled primary onClick={() => this.props.history.push(`/zarzadzanie-trescia/pomoc/${p.id}-${p.slug}`)}>Szczegóły</ButtonStyled>\n </DataTableCell>\n </DataTableRow>\n ))}\n </DataTableBody>\n </DataTableContent>\n </DataTable>\n )\n }\n\n renderPreview() {\n const pomoc = this.state.pomocForPreview;\n if (!pomoc.ekran) { return null }\n return (\n <TrescPreview\n content={{naglowek: pomoc.naglowek, tresc: pomoc.tresc}}\n screen={EKRANY_DICT[pomoc.ekran].id}\n closePreview={() => this.setState({previewOn: false, pomocForPreview: null})}\n />\n )\n }\n}\n\nPomoce.contextType = UserContext;\n\nexport { Pomoce };\n","import React, { Component } from 'react';\nimport { Document, Page, StyleSheet, Text, View } from '@react-pdf/renderer';\n\nimport { PdfHeader } from '../../common';\nimport { pdfStyles } from '../../vars/pdfStyles';\nimport { DraftToPdf } from './DraftToPdf';\n\n\nclass PomoceFrontPdf extends Component {\n\n render() {\n return (\n <Document>\n <Page size=\"A4\" style={pdfStyles.mainPdfContainerStyle} wrap>\n <PdfHeader />\n <View>\n {this.renderPomoc(this.props.pomoce[0], this.props.pomoce, 1)}\n </View>\n </Page>\n </Document>\n )\n }\n\n renderPomoc(pomoc, pomoce, deepLevel) {\n return (\n <View key={pomoc.id}>\n <Text style={pdfStyles.textHeaderStyle}>{pomoc.naglowek}</Text>\n <View style={styles.sectionTextStyle}>\n <DraftToPdf content={pomoc.tresc}/>\n </View>\n {this.renderPomocePodrzedne(pomoc.id, pomoce, deepLevel)}\n </View>\n )\n }\n\n renderPomocePodrzedne(pomocId, pomoce, deepLevel) {\n const pomocePodrzedne = pomoce.filter(p => p.rozdzialNadrzedny.id === pomocId);\n if (!pomocePodrzedne.length) { return null }\n return (\n <View style={[styles.secondarySectionStyle, (deepLevel >= 5) && styles.noPadding]}>\n {pomocePodrzedne.map(p => this.renderPomoc(p, pomoce, deepLevel + 1))}\n </View>\n )\n }\n}\n\n\nconst styles = StyleSheet.create({\n sectionTextStyle: {\n marginBottom: 20\n },\n secondarySectionStyle: {\n paddingLeft: 16\n },\n noPadding: {\n paddingLeft: 0\n }\n});\n\n\nexport { PomoceFrontPdf };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Icon } from '@rmwc/icon';\n\nimport { generatePdfDocument } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { Breadcrumps, ButtonCreatePdf, Container, GridCustom, Text } from '../../common';\nimport { BaseComponent } from '../common';\nimport { PomoceFrontPdf } from './PomoceFrontPdf';\n\n\nclass PomoceFront extends BaseComponent {\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n this.setState({\n initializingOn: false,\n pomoce: getSerializedObject(\n data, {nonRecursiveKeys: ['tresc', ]}).pomoce,\n });\n }\n\n handleCreatePdf = () => {\n this.setState(\n {pdfCreatingOn: true},\n () => generatePdfDocument(\n <PomoceFrontPdf pomoce={this.state.pomoce.sort(this.sortPomoce)} />,\n 'pomoc.pdf',\n this.callbackPfdCreated\n )\n );\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n pomoce: [],\n pdfCreatingOn: false,\n }\n }\n\n getFetchUrl() {\n return '/api/help'\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać pomocy. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Podczas pobierania pomocy wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n callbackPfdCreated = () => {\n this.setState({pdfCreatingOn: false});\n }\n\n sortPomoce(p1, p2) {\n return p1.id > p2.id ? 1 : -1\n }\n\n // rendering\n\n renderHeader() {\n return (\n <Breadcrumps isFront>\n <li className=\"breadcrumps__current\">Pomoc</li>\n </Breadcrumps>\n )\n }\n\n renderContent() {\n document.title = \"Baza KonkurencyjnoÅ›ci - pomoc\";\n if (!this.state.pomoce.length) {\n return <Text error role=\"alert\">Brak dostÄ™pnych pomocy.</Text>\n }\n const pomoce = this.state.pomoce.sort(this.sortPomoce);\n return (\n <>\n <GridCustom fullwidth centerVertical>\n <Text tag=\"h2\" mainHeader>Pomoc</Text>\n <GridCustom flexEnd>\n <ButtonCreatePdf\n pdfCreatingOn={this.state.pdfCreatingOn}\n onClick={this.handleCreatePdf} />\n </GridCustom>\n </GridCustom>\n\n <Container className=\"help__list-of-content\">\n <ul>\n {this.renderPomoc(pomoce[0], pomoce, 1)}\n </ul>\n </Container>\n </>\n )\n }\n\n renderPomoc(pomoc, pomoce, deepLevel) {\n return (\n <li key={pomoc.id}>\n <Link to={`/pomoc/${pomoc.id}-${pomoc.slug}`} className=\"link-text\"><Icon icon=\"arrow_right\" aria-hidden=\"true\" className=\"help__help-item-icon\" />{pomoc.naglowek}</Link>\n {this.renderPomocePodrzedne(pomoc.id, pomoce, deepLevel)}\n </li>\n )\n }\n\n renderPomocePodrzedne(pomocId, pomoce, deepLevel) {\n const pomocePodrzedne = pomoce.filter(p => p.rozdzialNadrzedny.id === pomocId);\n if (!pomocePodrzedne.length) { return null }\n\n let pomocePodrzedneClassName = 'help__separate-list';\n if (deepLevel >= 5) { pomocePodrzedneClassName += ' help__separate-list--deep'}\n return (\n <ul className={pomocePodrzedneClassName}>\n {pomocePodrzedne.map(p => this.renderPomoc(p, pomoce, deepLevel + 1))}\n </ul>\n )\n }\n\n}\n\n\nexport { PomoceFront };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Icon } from '@rmwc/icon';\nimport { Typography } from '@rmwc/typography';\n\nimport { Breadcrumps, Container, FieldWithLabel, GridCustom, Text } from '../../common';\nimport { DraftToComponents } from './DraftToComponents';\nimport { Pomoc } from './Pomoc';\n\n\nclass PomocFront extends Pomoc {\n\n // handlers\n\n handleChangePomoc(newId, newSlug) {\n this.props.history.push(`/pomoc/${newId}-${newSlug}`);\n this.handleReload();\n }\n\n // helpers\n\n getFetchUrl() {\n return `/api/help/${this.props.match.params.id}`\n }\n\n setUrlWithCorrectSlug(pomoc) {\n // update url if slugs are not equal\n const urlParams = this.props.match.params;\n if (pomoc.slug !== urlParams.slug) {\n this.props.history.push(`/pomoc/${urlParams.id}-${pomoc.slug}`);\n }\n }\n\n // rendering\n\n renderHeader() {\n return (\n <Breadcrumps isFront>\n <li className=\"breadcrumps__link\"><Link to='/pomoc'>Pomoc</Link></li>\n <li className=\"breadcrumps__current\">Szczegóły pomocy</li>\n </Breadcrumps>\n )\n }\n\n renderContent() {\n document.title = \"Baza KonkurencyjnoÅ›ci - pomoc\";\n const pomoc = this.state.pomoc;\n return (\n <>\n <Container className=\"article\" tag=\"article\">\n <Typography use=\"headline4\" tag=\"h2\" className=\"article__header\">{this.state.pomoc.naglowek}</Typography>\n <DraftToComponents content={pomoc.tresc} className=\"article__text\"/>\n </Container>\n <GridCustom>\n {pomoc.powiazane.length > 0 && (\n <FieldWithLabel label=\"PowiÄ…zane\">\n {pomoc.powiazane.map(p => (\n <button key={p.id} onClick={() => this.handleChangePomoc(p.id, p.slug)} className=\"link-text\"><Icon icon=\"arrow_right\" aria-hidden=\"true\" className=\"help__help-item-icon\" />{p.naglowek}</button>\n ))}\n </FieldWithLabel>\n )}\n <FieldWithLabel label=\"Data opublikowania\">\n <Text>{pomoc.dataOpublikowania}</Text>\n </FieldWithLabel>\n </GridCustom>\n </>\n )\n }\n}\n\n\nexport { PomocFront };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Text as PdfText, StyleSheet } from '@react-pdf/renderer';\n\nimport { UserContext } from '../../../context/user-context';\nimport { generatePdfDocument, serializeAuditData } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n AuditData,\n Breadcrumps,\n ButtonCreatePdf,\n Container,\n FieldWithLabel,\n GridCustom,\n Text\n} from '../../common';\nimport { BaseComponent } from '../common';\nimport { DraftToComponents } from './DraftToComponents';\nimport { PdfWithDraftContent } from './PdfWithDraftContent';\n\n\nclass Regulamin extends BaseComponent {\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n\n const regulamin = getSerializedObject(\n data,\n {\n nonRecursiveKeys: ['tresc', ],\n dateAttributes: ['dataOpublikowania', ],\n }\n ).regulaminy;\n if (!regulamin) {\n this.setState({initializingOn: false, pageNotFound: true});\n } else {\n this.setState({\n initializingOn: false,\n tresc: regulamin.tresc,\n dataOpublikowania: regulamin.dataOpublikowania,\n auditData: serializeAuditData(regulamin),\n });\n }\n }\n\n handleCreatePdf = () => {\n this.setState(\n {pdfCreatingOn: true},\n () => {\n if (this.props.current) {\n generatePdfDocument(\n <PdfWithDraftContent\n renderHeader={() => <PdfText style={styles.pdfHeaderStyle}>Regulamin</PdfText>}\n content={this.state.tresc}\n renderFooter={() => <PdfText>Data ostatniej aktualizacji: {this.state.dataOpublikowania}.</PdfText>}\n />,\n 'regulamin.pdf',\n this.callbackPfdCreated\n );\n } else {\n generatePdfDocument(\n <PdfWithDraftContent content={this.state.tresc} title='Wersja \"Do opublikowania\" regulaminu' />,\n 'regulamin_do_opublikowania.pdf',\n this.callbackPfdCreated\n );\n }\n }\n );\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n tresc: '',\n dataOpublikowania: '',\n pdfCreatingOn: false,\n auditData: {},\n }\n }\n\n getFetchUrl() {\n return API_URLS[\n this.props.front ? 'regulations' : 'regulationsAdmin'\n ].path\n }\n\n getFetchData() {\n let query = {};\n if (!this.props.current) {\n query['version'] = 'for_publication';\n }\n return query\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać regulaminu. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Podczas pobierania regulaminu wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n callbackPfdCreated = () => {\n this.setState({pdfCreatingOn: false});\n }\n\n callback403 = () => {\n this.context.removePermission('generalContentCookiesRegulation');\n }\n\n // rendering\n\n renderHeader() {\n return (\n <Breadcrumps isFront={this.props.front}>\n { this.props.front ? (\n <li className=\"breadcrumps__current\">Regulamin</li>\n ) : (\n <>\n <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia/regulaminy'>Regulamin</Link></li>\n <li className=\"breadcrumps__current\">{this.props.current ? 'Szczegóły wersji aktualnej' : 'Szczegóły wersji \"Do opublikowania\"'}</li>\n </>\n )}\n </Breadcrumps>\n )\n }\n\n renderContent() {\n document.title = \"Baza KonkurencyjnoÅ›ci - regulamin\";\n const dataOpublikowania = this.state.dataOpublikowania;\n\n if (this.props.current) {\n return (\n <>\n <GridCustom fullwidth centerVertical flexS>\n <Text tag=\"h2\" mainHeader>Regulamin</Text>\n {this.renderPdfButton()}\n </GridCustom>\n <Container className=\"separate-container\">\n <DraftToComponents content={this.state.tresc} />\n </Container>\n <FieldWithLabel label=\"Data ostatniej aktualizacji\">\n <Text>{dataOpublikowania}</Text>\n </FieldWithLabel>\n <AuditData {...this.state.auditData} />\n </>\n )\n }\n return (\n <>\n <GridCustom fullwidth centerVertical flexS>\n <Text tag=\"h2\" mainHeader>Regulamin<Text info>wersja \"Do opublikowania\"</Text></Text>\n <GridCustom flexEnd>\n {this.renderPdfButton()}\n </GridCustom>\n </GridCustom>\n <Container className=\"separate-container\">\n <DraftToComponents content={this.state.tresc} />\n </Container>\n <FieldWithLabel label=\"Data opublikowania\">\n <Text>{dataOpublikowania}</Text>\n </FieldWithLabel>\n <AuditData {...this.state.auditData} />\n </>\n )\n }\n\n renderPdfButton() {\n let pdfCreatingButtonLabel;\n\n if (this.state.pdfCreatingOn) {\n if (this.props.current) {\n pdfCreatingButtonLabel = 'Tworzenie pliku pdf z regulaminem...'\n } else {\n pdfCreatingButtonLabel = 'Tworzenie pliku pdf z regulaminem w wersji \"Do opublikowania\"...'\n }\n } else {\n if (this.props.current) {\n pdfCreatingButtonLabel = 'Pobierz plik pdf z regulaminem'\n } else {\n pdfCreatingButtonLabel = 'Pobierz plik pdf z regulaminem w wersji \"Do opublikowania\"'\n }\n }\n\n return (\n <ButtonCreatePdf\n pdfCreatingOn={this.state.pdfCreatingOn}\n onClick={this.handleCreatePdf}>{pdfCreatingButtonLabel}</ButtonCreatePdf>\n )\n }\n}\n\nconst styles = StyleSheet.create({\n pdfHeaderStyle: {\n lineHeight: 1.6,\n marginBottom: 5,\n fontSize: 16,\n fontWeight: 'bold'\n },\n})\n\nRegulamin.contextType = UserContext;\n\nexport { Regulamin };\n","import React from 'react';\nimport {\n DataTable,\n DataTableBody,\n DataTableCell,\n DataTableContent,\n DataTableHead,\n DataTableHeadCell,\n DataTableRow,\n} from '@rmwc/data-table';\n\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { Breadcrumps, ButtonStyled, DialogCustom, GridCustom, Text } from '../../common';\nimport { BaseComponent } from '../common';\n\n\nclass Regulaminy extends BaseComponent {\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n\n const regulaminy = getSerializedObject(data).regulaminy;\n this.setState({\n initializingOn: false,\n currentExists: regulaminy.aktualnyIstnieje,\n forPublicationExists: regulaminy.doPublikacjiIstnieje,\n });\n }\n\n handleCloseCurrentVersionDialog() {\n this.setState({editCurrentVersionOn: false});\n }\n\n handleRemoveDoOpublikowania() {\n this.setState({removingDoOpublikowaniaOn: true});\n }\n\n handleCloseRemoveDoOpublikowaniaDialog() {\n this.setState({removingDoOpublikowaniaOn: false});\n }\n\n handleRemove() {\n // remove ruleForPublication from server\n this.xhrFetch = fetchApi(\n API_URLS.regulationsAdmin.path,\n 'DELETE',\n {},\n {},\n this.handleFetchRemoveSuccess,\n this.handleFetchRemoveError,\n this.handleFetchRemoveIncorrectStatus,\n );\n }\n\n handleFetchRemoveSuccess(data) {\n this.xhrFetchSave = null;\n this.setState({removingDoOpublikowaniaOn: false, forPublicationExists: false});\n }\n\n handleFetchRemoveError(data) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n fetchRemoveError: `Nie udaÅ‚o siÄ™ usunąć wersji regulaminu. ${data.message}`,\n });\n }\n\n handleFetchRemoveIncorrectStatus(status) {\n this.xhrFetch = null; // clean xhr object\n if (status === 404) {\n this.setState({savingOn: false, pageNotFound: true});\n } else {\n let message = '';\n if (status === 403) {\n message = 'Nie masz uprawnieÅ„ do usuwania regulaminu.';\n // update permission value in context\n this.removePermission();\n }\n this.setState({\n fetchRemoveError: message || `Podczas usuwania wersji regulaminu wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`,\n });\n }\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n editCurrentVersionOn: false,\n removingDoOpublikowaniaOn: false,\n currentExists: false,\n forPublicationExists: false,\n fetchRemoveError: '',\n }\n }\n\n setAdditionalHandlers() {\n this.handleCloseCurrentVersionDialog = this.handleCloseCurrentVersionDialog.bind(this);\n this.handleRemoveDoOpublikowania = this.handleRemoveDoOpublikowania.bind(this);\n this.handleCloseRemoveDoOpublikowaniaDialog = this.handleCloseRemoveDoOpublikowaniaDialog.bind(this);\n\n this.handleRemove = this.handleRemove.bind(this);\n this.handleFetchRemoveSuccess = this.handleFetchRemoveSuccess.bind(this);\n this.handleFetchRemoveError = this.handleFetchRemoveError.bind(this);\n this.handleFetchRemoveIncorrectStatus = this.handleFetchRemoveIncorrectStatus.bind(this);\n }\n\n getFetchUrl() {\n return API_URLS.regulationsAdminDetails.path\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać regulaminów. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Podczas pobierania regulaminów wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n callback403 = () => {\n this.removePermission();\n }\n\n removePermission() {\n this.context.removePermission('generalContentCookiesRegulation');\n }\n\n // rendering\n\n renderHeader() {\n return (\n <>\n <Breadcrumps>\n <li className=\"breadcrumps__current\">Regulamin</li>\n </Breadcrumps>\n <Text tag=\"h2\" mainHeader>Regulamin</Text>\n </>\n )\n }\n\n renderContent() {\n document.title = \"Baza KonkurencyjnoÅ›ci - regulaminy\";\n if (!this.state.currentExists) {\n return <ButtonStyled add onClick={() => this.props.history.push(`/zarzadzanie-trescia/regulaminy/nowy`)}>Dodaj regulamin</ButtonStyled>\n }\n\n const history = this.props.history;\n return (\n <>\n <DataTable className=\"table\">\n <DataTableContent>\n <DataTableHead>\n <DataTableRow>\n <DataTableHeadCell>Wersja regulaminu</DataTableHeadCell>\n <DataTableHeadCell></DataTableHeadCell>\n </DataTableRow>\n </DataTableHead>\n <DataTableBody>\n <DataTableRow>\n <DataTableCell>Wersja aktualna</DataTableCell>\n <DataTableCell>\n <ButtonStyled lite onClick={() => this.setState({editCurrentVersionOn: true})}>Edytuj</ButtonStyled>\n <ButtonStyled primary onClick={() => history.push('/zarzadzanie-trescia/regulaminy/aktualny')}>Szczegóły</ButtonStyled>\n </DataTableCell>\n </DataTableRow>\n {this.state.forPublicationExists && (\n <DataTableRow>\n <DataTableCell>Wersja \"Do opublikowania\"</DataTableCell>\n <DataTableCell>\n <ButtonStyled lite onClick={() => history.push('/zarzadzanie-trescia/regulaminy/edytuj')}>Edytuj</ButtonStyled>\n <ButtonStyled primary onClick={() => history.push('/zarzadzanie-trescia/regulaminy/do-opublikowania')}>Szczegóły</ButtonStyled>\n <ButtonStyled remove onClick={this.handleRemoveDoOpublikowania}>UsuÅ„</ButtonStyled>\n </DataTableCell>\n </DataTableRow>\n )}\n </DataTableBody>\n </DataTableContent>\n </DataTable>\n {this.state.editCurrentVersionOn && this.renderEditCurrentVersionDialog()}\n {this.state.removingDoOpublikowaniaOn && this.renderRemoveDoOpublikowaniaDialog()}\n </>\n )\n }\n\n renderEditCurrentVersionDialog() {\n const history = this.props.history;\n let content, title = null;\n if (this.state.forPublicationExists) {\n title = 'Istnieje wersja \"Do opublikowania\" regulaminu.';\n content = (\n <>\n <ButtonStyled primary onClick={() => history.push('/zarzadzanie-trescia/regulaminy/edytuj?wersja=aktualna')}>Nadpisz wersjÄ™ \"Do opublikowania\" aktualnÄ… wersjÄ…</ButtonStyled>\n <GridCustom>\n <ButtonStyled cancel onClick={this.handleCloseCurrentVersionDialog}>Anuluj</ButtonStyled>\n <ButtonStyled lite onClick={() => history.push('/zarzadzanie-trescia/regulaminy/edytuj')}>Edytuj wersjÄ™ \"Do opublikowania\"</ButtonStyled>\n </GridCustom>\n </>\n )\n } else {\n title ='Nie istnieje żadna wersja \"Do opublikowania\" regulaminu.';\n content = (\n <GridCustom>\n <ButtonStyled cancel onClick={this.handleCloseCurrentVersionDialog}>Anuluj</ButtonStyled>\n <ButtonStyled primary onClick={() => history.push('/zarzadzanie-trescia/regulaminy/edytuj?wersja=aktualna')}>Utwórz wersjÄ™ \"Do opublikowania\" na podstawie aktualnej wersji</ButtonStyled>\n </GridCustom>\n )\n }\n\n return (\n <DialogCustom\n dialogTitle={title}\n onClose={this.handleCloseCurrentVersionDialog}\n >\n {content}\n </DialogCustom>\n )\n }\n\n renderRemoveDoOpublikowaniaDialog() {\n return (\n <DialogCustom\n dialogTitle='Czy na pewno chcesz usunąć wersjÄ™ \"Do opublikowania\" regulaminu?'\n onClose={this.handleCloseRemoveDoOpublikowaniaDialog}\n >\n <>\n <GridCustom centerVertical flexEnd>\n <ButtonStyled onClick={this.handleCloseRemoveDoOpublikowaniaDialog} cancel>Anuluj</ButtonStyled>\n <ButtonStyled onClick={this.handleRemove} remove>UsuÅ„</ButtonStyled>\n </GridCustom>\n {this.state.fetchRemoveError.length > 0 && <Text error role=\"alert\">{this.state.fetchRemoveError}</Text>}\n </>\n </DialogCustom>\n )\n }\n}\n\nRegulaminy.contextType = UserContext;\n\nexport { Regulaminy };\n","import React from 'react';\nimport {\n DataTable,\n DataTableBody,\n DataTableCell,\n DataTableContent,\n DataTableHead,\n DataTableHeadCell,\n DataTableRow,\n} from '@rmwc/data-table';\n\nimport { UserContext } from '../../../context/user-context';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { Breadcrumps, ButtonStyled, Text } from '../../common';\nimport { BaseComponent } from '../common';\nimport { TrescPreview } from './TrescPreview';\n\n\nclass TresciOgolne extends BaseComponent {\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n this.setState({\n initializingOn: false,\n fetchError: '',\n tresciOgolne: getSerializedObject(\n data, {nonRecursiveKeys: ['tresc', ]}).tresciOgolne,\n });\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n previewOn: false,\n tresciOgolne: [],\n trescForPreview: null,\n }\n }\n\n getFetchUrl() {\n return API_URLS.generalContentAdmin.path\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać treÅ›ci ogólnych. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Podczas pobierania treÅ›ci ogólnych wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n callback403 = () => {\n this.context.removePermission('generalContentCookiesRegulation');\n }\n\n // rendering\n\n renderHeader() {\n return (\n <>\n <Breadcrumps>\n <li className=\"breadcrumps__current\">TreÅ›ci ogólne</li>\n </Breadcrumps>\n <Text tag=\"h2\" mainHeader>TreÅ›ci ogólne</Text>\n </>\n )\n }\n\n renderContent() {\n return (\n <>\n <DataTable className=\"table\">\n <DataTableContent>\n <DataTableHead>\n <DataTableRow>\n <DataTableHeadCell>Nazwa treÅ›ci</DataTableHeadCell>\n <DataTableHeadCell></DataTableHeadCell>\n </DataTableRow>\n </DataTableHead>\n <DataTableBody>\n {this.state.tresciOgolne.map(to => (\n <DataTableRow key={to.id}>\n <DataTableCell>\n <Text>{to.naglowek}</Text>\n </DataTableCell>\n <DataTableCell>\n <ButtonStyled lite onClick={() => this.setState({previewOn: true, trescForPreview: to})}>PodglÄ…d na ekranie</ButtonStyled>\n <ButtonStyled lite onClick={() => this.props.history.push(`/zarzadzanie-trescia/tresci-ogolne/${to.id}/edytuj`)}>Edytuj</ButtonStyled>\n <ButtonStyled primary onClick={() => this.props.history.push(`/zarzadzanie-trescia/tresci-ogolne/${to.id}`)}>Szczegóły</ButtonStyled>\n </DataTableCell>\n </DataTableRow>\n ))}\n </DataTableBody>\n </DataTableContent>\n </DataTable>\n {this.state.previewOn && this.renderPreview()}\n </>\n )\n }\n\n renderPreview() {\n return (\n <TrescPreview\n content={this.state.trescForPreview}\n screen='homePage'\n closePreview={() => this.setState({previewOn: false, trescForPreview: null})}\n />\n )\n }\n}\n\nTresciOgolne.contextType = UserContext;\n\nexport { TresciOgolne };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { UserContext } from '../../../context/user-context';\nimport { serializeAuditData } from '../../../helpers';\nimport { getSerializedObject, } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n AuditData,\n Breadcrumps,\n ButtonStyled,\n Container,\n FieldWithLabel,\n GridCustom,\n Text\n} from '../../common';\nimport { BaseComponent } from '../common';\nimport { DraftToComponents } from './DraftToComponents';\n\n\nclass TrescOgolna extends BaseComponent {\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess(data);\n const trescOgolna = getSerializedObject(\n data, {nonRecursiveKeys: ['tresc', ]}).trescOgolna;\n this.setState({\n initializingOn: false,\n fetchError: '',\n trescOgolna,\n auditData: serializeAuditData(trescOgolna),\n });\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {trescOgolna: null, auditData: {}}\n }\n\n getFetchUrl() {\n return API_URLS.generalContentAdminDetails.getUrl(\n this.props.match.params.id)\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać treÅ›ci ogólnej. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Podczas pobierania treÅ›ci ogólnej wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n callback403 = () => {\n this.context.removePermission('generalContentCookiesRegulation');\n }\n\n // rendering\n\n renderHeader() {\n return (\n <Breadcrumps>\n <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia/tresci-ogolne'>TreÅ›ci ogólne</Link></li>\n <li className=\"breadcrumps__current\">Szczegóły {this.state.trescOgolna ? this.state.trescOgolna.naglowek : ''}</li>\n </Breadcrumps>\n )\n }\n\n renderContent() {\n const to = this.state.trescOgolna;\n return (\n <>\n <Text tag=\"h2\" mainHeader>{to.naglowek}</Text>\n <Container>\n <GridCustom flexEnd>\n <ButtonStyled primary onClick={() => this.props.history.push(`/zarzadzanie-trescia/tresci-ogolne/${this.props.match.params.id}/edytuj`)}>Edytuj</ButtonStyled>\n </GridCustom>\n <FieldWithLabel label=\"Treść\">\n <DraftToComponents content={to.tresc} />\n </FieldWithLabel>\n </Container>\n <AuditData {...this.state.auditData} />\n </>\n )\n }\n}\n\nTrescOgolna.contextType = UserContext;\n\nexport { TrescOgolna };\n","import React, { useContext, useEffect, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { Icon } from '@rmwc/icon';\nimport { Card, CardPrimaryAction, CardMedia } from '@rmwc/card';\nimport { Typography } from '@rmwc/typography';\nimport '@material/card/dist/mdc.card.css';\n\nimport { UserContext } from '../../../context/user-context';\nimport { refreshTimerAfterSativaRequest } from '../../../helpers';\nimport { NotPermittedPage, Text } from '../../common';\n\n\nconst ZarzadzanieTrescia = (props) => {\n const [timerRefreshed, setTimerRefreshed] = useState(false);\n if (!timerRefreshed) {\n refreshTimerAfterSativaRequest();\n setTimerRefreshed(true);\n }\n\n useEffect(() => {\n document.title = 'Baza KonkurencyjnoÅ›ci - zarzÄ…dzanie treÅ›ciÄ…';\n }, [])\n\n const { permissions } = useContext(UserContext);\n\n if (!permissions.fullContent) { return <NotPermittedPage /> }\n\n return (\n <>\n <Text tag=\"h2\" mainHeader>Administracja treÅ›ciami</Text>\n <nav>\n <ul className=\"content-manage grid-custom grid-custom--center\">\n {permissions.help && (\n <li>\n <Card tag={Link} to='/zarzadzanie-trescia/pomoc' className=\"content-manage__item\">\n <CardPrimaryAction>\n <CardMedia className=\"content-manage__icon\">\n <Icon icon={{ icon: 'contact_support', size: 'xlarge' }} aria-hidden=\"true\"/>\n </CardMedia>\n <Typography use=\"headline6\" tag=\"h2\" className=\"content-manage__text\">Pomoc</Typography>\n </CardPrimaryAction>\n </Card>\n </li>\n )}\n {permissions.generalContentCookiesRegulation && (\n <>\n <li>\n <Card tag={Link} to='/zarzadzanie-trescia/regulaminy' className=\"content-manage__item\">\n <CardPrimaryAction>\n <CardMedia className=\"content-manage__icon\">\n <Icon icon={{ icon: 'menu_book', size: 'xlarge' }} aria-hidden=\"true\"/>\n </CardMedia>\n <Typography use=\"headline6\" tag=\"h2\" className=\"content-manage__text\">Regulamin</Typography>\n </CardPrimaryAction>\n </Card>\n </li>\n <li>\n <Card tag={Link} to='/zarzadzanie-trescia/ciasteczka' className=\"content-manage__item\">\n <CardPrimaryAction>\n <CardMedia className=\"content-manage__icon\">\n <Icon icon={{ icon: 'verified_user', size: 'xlarge' }} aria-hidden=\"true\"/>\n </CardMedia>\n <Typography use=\"headline6\" tag=\"h2\" className=\"content-manage__text\">Ciasteczka</Typography>\n </CardPrimaryAction>\n </Card>\n </li>\n <li>\n <Card tag={Link} to='/zarzadzanie-trescia/tresci-ogolne' className=\"content-manage__item\">\n <CardPrimaryAction>\n <CardMedia className=\"content-manage__icon\">\n <Icon icon={{ icon: 'view_quilt', size: 'xlarge' }} aria-hidden=\"true\"/>\n </CardMedia>\n <Typography use=\"headline6\" tag=\"h2\" className=\"content-manage__text\">TreÅ›ci ogólne</Typography>\n </CardPrimaryAction>\n </Card>\n </li>\n </>\n )}\n {permissions.statements && (\n <li>\n <Card tag={Link} to='/zarzadzanie-trescia/komunikaty' className=\"content-manage__item\">\n <CardPrimaryAction>\n <CardMedia className=\"content-manage__icon\">\n <Icon icon={{ icon: 'announcement', size: 'xlarge' }} aria-hidden=\"true\"/>\n </CardMedia>\n <Typography use=\"headline6\" tag=\"h2\" className=\"content-manage__text\">Komunikaty</Typography>\n </CardPrimaryAction>\n </Card>\n </li>\n )}\n </ul>\n </nav>\n </>\n )\n}\n\n\nexport { ZarzadzanieTrescia };\n","import React from 'react';\n\nimport { getSerializedObject } from '../../../serializers';\nimport { DraftToComponents } from './DraftToComponents';\nimport { KomunikatFront } from './KomunikatFront';\n\n\nclass ZoltyPasekFront extends KomunikatFront {\n\n // handlers\n\n handleFetchSuccess(data) {\n this.xhrFetch = null;\n const komunikat = getSerializedObject(\n data,\n {\n nonRecursiveKeys: ['tresc', ],\n dateAttributes: ['dataOpublikowania', 'dataWaznosci'],\n dateTimeAttributes: ['dataOpublikowania', 'dataWaznosci'],\n }\n ).komunikaty[0];\n if (!komunikat) {\n this.setState({initializingOn: false});\n } else {\n this.setState({initializingOn: false, komunikat});\n }\n }\n\n // helpers\n\n getFetchUrl() {\n return '/api/statements'\n }\n\n getFetchData() {\n return {yellow_stripe: true}\n }\n\n // rendering\n\n render() {\n if (this.state.initializingOn || !Object.keys(this.state.komunikat).length) { return null }\n return this.renderContent()\n }\n\n renderContent() {\n const { tresc } = this.state.komunikat;\n const trescKomunikatu = tresc.blocks.map(b => b.text).join(' ');\n\n return (\n <section className=\"yellow-comment\" aria-label={`Ważny komunikat: ${trescKomunikatu}`} role=\"status\" aria-live=\"polite\">\n <DraftToComponents content={tresc} />\n </section>\n )\n }\n}\n\n\nexport { ZoltyPasekFront };\n","import React, { useState } from 'react';\nimport { Icon } from '@rmwc/icon';\nimport { Typography } from '@rmwc/typography';\n\nimport { refreshTimerAfterSativaRequest } from '../../helpers';\nimport { Container } from '../common';\n\n\nconst DeklaracjaDostepnosci = (props) => {\n document.title = 'Deklaracja dostÄ™pnoÅ›ci serwisu Baza KonkurencyjnoÅ›ci';\n window.scrollTo(0, 0);\n\n const [timerRefreshed, setTimerRefreshed] = useState(false);\n if (!timerRefreshed) {\n refreshTimerAfterSativaRequest();\n setTimerRefreshed(true);\n }\n\n return (\n <Container className=\"article\">\n <Typography id=\"a11y-deklaracja\" use=\"headline4\" tag=\"h2\" className=\"article__header\">Deklaracja dostÄ™pnoÅ›ci serwisu Baza KonkurencyjnoÅ›ci</Typography>\n <Typography id=\"a11y-wstep\" use=\"body1\" tag=\"p\" className=\"article__text\"><span id=\"a11y-podmiot\">Ministerstwo Funduszy i Polityki Regionalnej</span> zobowiÄ…zuje siÄ™ zapewnić dostÄ™pność swojej strony internetowej zgodnie z przepisami ustawy z 4 kwietnia 2019 r. o dostÄ™pnoÅ›ci cyfrowej stron internetowych i aplikacji mobilnych podmiotów publicznych. Deklaracja dostÄ™pnoÅ›ci dotyczy strony serwisu <a id=\"a11y-url\" href=\"/\" className=\"link-text\">https://bazakonkurencyjnosci.funduszeeuropejskie.gov.pl/</a>.</Typography>\n <ul className=\"article__list\">\n <li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">Data publikacji strony internetowej: <span id=\"a11y-data-publikacja\">7 wrzeÅ›nia 2019 r.</span></Typography>\n </li>\n <li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">Data ostatniej aktualizacji: <span id=\"a11y-data-aktualizacja\">25 lipca 2024 r.</span></Typography>\n </li>\n </ul>\n\t\t\t\n\t\t\t<Typography use=\"headline5\" tag=\"h3\" className=\"article__section-title article__text\">Stan dostÄ™pnoÅ›ci cyfrowej</Typography>\n\t\t\t<Typography id=\"a11y-status\" use=\"body1\" tag=\"p\" className=\"article__text\">Strona internetowa jest zgodna z zaÅ‚Ä…cznikiem do ustawy z dnia 4 kwietnia 2019 r. o dostÄ™pnoÅ›ci cyfrowej stron internetowych i aplikacji mobilnych podmiotów publicznych.</Typography>\n\t\t\t\n\t\t\t<Typography id=\"a11y-przygotowanie\" use=\"headline5\" tag=\"h3\" className=\"article__section-title article__text\">Przygotowanie deklaracji dostÄ™pnoÅ›ci</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">DeklaracjÄ™ sporzÄ…dzono dnia <span id=\"a11y-data-sporzadzenie\">1 października 2021 r.</span></Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Data ostatniego przeglÄ…du deklaracji: <span id=\"a11y-data-przeglad\">14 marca 2025 r.</span></Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">DeklaracjÄ™ sporzÄ…dziliÅ›my na podstawie samooceny w oparciu o <a href=\"https://www.gov.pl/attachment/1a3e2bb5-6d60-4897-ac2f-07a8e91e70ed\" className=\"link-text\">ListÄ™ kontrolnÄ… do badania dostÄ™pnoÅ›ci cyfrowej strony internetowej v. 2.2</a> (docx, 0,12MB).</Typography>\n\t\t\t\n\t\t\t<Typography id=\"a11y-skroty\" use=\"headline5\" tag=\"h3\" className=\"article__section-title article__text\">Skróty klawiszowe</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Na stronie internetowej można korzystać ze standardowych skrótów klawiaturowych.</Typography>\n\n\t\t\t<Typography id=\"a11y-kontakt\" use=\"headline5\" tag=\"h3\" className=\"article__section-title article__text\">Informacje zwrotne i dane kontaktowe</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Problemy z dostÄ™pnoÅ›ciÄ… serwisu Baza KonkurencyjnoÅ›ci prosimy zgÅ‚aszać do Departamentu Koordynacji Wdrażania Funduszy Unii Europejskiej - mejlowo <a href=\"mailto:cst@mfipr.gov.pl\" id=\"a11y-email\">cst@mfipr.gov.pl</a> lub telefonicznie <a href=\"tel:+48 22 273 79 00\" id=\"a11y-telefon\">+48 22 273 79 00</a>.</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Każdy ma prawo wystÄ…pić z żądaniem zapewnienia dostÄ™pnoÅ›ci cyfrowej tej strony internetowej lub jej elementów.</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">ZgÅ‚aszajÄ…c takie żądanie podaj:</Typography>\n\t\t\t<ul className=\"article__list\">\n <li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">swoje imiÄ™ i nazwisko,</Typography>\n </li>\n <li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">swoje dane kontaktowe (np. numer telefonu, e-mail),</Typography>\n </li>\n\t\t\t\t<li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">dokÅ‚adny adres strony internetowej, na której jest niedostÄ™pny cyfrowo element lub treść,</Typography>\n </li>\n\t\t\t\t<li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">opis na czym polega problem i jaki sposób rozwiÄ…zania byÅ‚by dla Ciebie najwygodniejszy.</Typography>\n </li>\n </ul>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Na Twoje zgÅ‚oszenie odpowiemy najszybciej jak to możliwe, nie później niż w ciÄ…gu 7 dni od jego otrzymania.</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Jeżeli ten termin bÄ™dzie dla nas zbyt krótki poinformujemy CiÄ™ o tym. W tej informacji podamy nowy termin, do którego poprawimy zgÅ‚oszone przez Ciebie bÅ‚Ä™dy lub przygotujemy informacje w alternatywny sposób. Ten nowy termin nie bÄ™dzie dÅ‚uższy niż 2 miesiÄ…ce.</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Jeżeli nie bÄ™dziemy w stanie zapewnić dostÄ™pnoÅ›ci cyfrowej strony internetowej lub treÅ›ci, wskazanej w Twoim żądaniu, zaproponujemy Ci dostÄ™p do nich w alternatywny sposób.</Typography>\n\n\t\t\t<Typography id=\"a11y-procedura\" use=\"headline5\" tag=\"h3\" className=\"article__section-title article__text\">ObsÅ‚uga wniosków i skarg zwiÄ…zanych z dostÄ™pnoÅ›ciÄ…</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Jeżeli w odpowiedzi na Twój wniosek o zapewnienie dostÄ™pnoÅ›ci cyfrowej, odmówimy zapewnienia żądanej przez Ciebie dostÄ™pnoÅ›ci cyfrowej, a Ty nie zgadzasz siÄ™ z tÄ… odmowÄ…, masz prawo zÅ‚ożyć skargÄ™.</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">SkargÄ™ masz prawo zÅ‚ożyć także, jeÅ›li nie zgadzasz siÄ™ na skorzystanie z alternatywnego sposobu dostÄ™pu, który zaproponowaliÅ›my Ci w odpowiedzi na Twój wniosek o zapewnienie dostÄ™pnoÅ›ci cyfrowej. </Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">EwentualnÄ… skargÄ™ złóż do Departamentu Koordynacji Wdrażania Funduszy Unii Europejskiej, e-mail: <a href=\"mailto:cst@mfipr.gov.pl\">cst@mfipr.gov.pl</a>.</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Po wyczerpaniu wszystkich możliwoÅ›ci skargÄ™ można przesÅ‚ać także do <a href=\"https://bip.brpo.gov.pl/pl/content/zlozenie-wniosku-do-rzecznika-praw-obywatelskich\" className=\"link-text\" title=\"PrzejÅ›cie do serwisu zewnÄ™trznego Rzecznika Praw Obywatelskich\">Rzecznika Praw Obywatelskich</a>.</Typography>\n\n\t\t\t<Typography use=\"headline5\" tag=\"h3\" className=\"article__section-title article__text\">PozostaÅ‚e informacje</Typography>\n <Typography id=\"a11y-architektura\" use=\"headline6\" tag=\"h4\" className=\"article__section-title article__text\">DostÄ™pność architektoniczna</Typography>\n <Typography use=\"body1\" tag=\"p\" className=\"article__text\">Budynek Ministerstwa Funduszy i Polityki Regionalnej znajdujÄ…cy siÄ™ w Warszawie przy ul. Wspólnej 2/4 zostaÅ‚ przystosowany do użytkowania przez osoby z niepeÅ‚nosprawnoÅ›ciami poprzez:</Typography>\n\t\t\t<ul className=\"article__list\">\n <li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">stosowne oznakowanie,</Typography>\n </li>\n <li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">likwidacjÄ™ barier architektonicznych,</Typography>\n </li>\n\t\t\t\t<li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">likwidacjÄ™ barier komunikacyjnych,</Typography>\n </li>\n\t\t\t\t<li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">umożliwienie dostÄ™pu do pomieszczeÅ„ urzÄ™du dla osób z niepeÅ‚nosprawnoÅ›ciÄ…,</Typography>\n </li>\n\t\t\t\t<li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">zastosowanie ergonomicznych rozwiÄ…zaÅ„.</Typography>\n </li>\n </ul>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">W szczególnoÅ›ci zrealizowano nastÄ™pujÄ…ce dziaÅ‚ania:</Typography>\n\t\t\t<ol className=\"article__list article__text\" style={{ listStyle: 'decimal', marginLeft: '24px' }}>\n <li>\n <Typography use=\"body1\" tag=\"p\">Do obsÅ‚ugi osób z niepeÅ‚nosprawnoÅ›ciÄ… oznakowano drzwi wejÅ›ciowe do budynku Ministerstwa od ul. Wspólnej.</Typography>\n </li>\n <li>\n <Typography use=\"body1\" tag=\"p\">Przed budynkiem Ministerstwa oznakowano kolorem niebieskim 4 miejsca parkingowe dla osób z niepeÅ‚nosprawnoÅ›ciÄ….</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">W celu obsÅ‚ugi osób z niepeÅ‚nosprawnoÅ›ciÄ… wykonano nowÄ… ladÄ™ w oknie podawczym kancelarii z odcinkowym obniżeniem blatu.</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Zastosowano kontrastowe elementy architektury poprzez wyróżnienie recepcji oraz dziennika podawczego.</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Wykonano linie naprowadzajÄ…ce oraz pola uwagi w strefach ogólnodostÄ™pnych od wejÅ›cia od ul. Wspólnej do budynku.</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Wykonano wyróżnienie poczÄ…tku i koÅ„ca wszystkich biegów schodowych, a przed dojÅ›ciem do schodów na każdej kondygnacji zastosowano fakturÄ™ ostrzegawczÄ….</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Wykonano podjazd wraz z porÄ™czami w celu umożliwienia dostÄ™pu do budynku Ministerstwa osób z niepeÅ‚nosprawnoÅ›ciÄ… poruszajÄ…cych siÄ™ na wózkach.</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Przy wejÅ›ciu numer II od ul. Wspólnej zainstalowano drzwi otwierane automatycznie umożliwiajÄ…ce bezkolizyjne wejÅ›cie do budynku.</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Zakupiono schodoÅ‚az umożliwiajÄ…cy osobom z niepeÅ‚nosprawnoÅ›ciÄ… korzystanie z dużej sali konferencyjnej nr 5114B na V piÄ™trze.</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Zamontowano platformÄ™ dla osób z niepeÅ‚nosprawnoÅ›ciÄ… na V piÄ™trze budynku w sali konferencyjnej nr 5114 A .</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Dla osób z niepeÅ‚nosprawnoÅ›ciami zostaÅ‚a przystosowana winda D1 z siedziskiem.</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Wykonano w windzie D1 dodatkowÄ… sygnalizacjÄ™ dźwiÄ™kowÄ… z peÅ‚nymi komunikatami gÅ‚osowymi okreÅ›lajÄ…cymi kierunek jazdy windy, otwarcie/zamkniÄ™cie drzwi, kondygnacjÄ™, na której zatrzymaÅ‚a siÄ™ winda.</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Dla obsÅ‚ugi osób z niepeÅ‚nosprawnoÅ›ciÄ… zamontowano trzy platformy umożliwiajÄ…ce pokonanie schodów.</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Na sali konferencyjnej im. Grażyny GÄ™sickiej oraz w recepcji obsÅ‚ugujÄ…cej klientów zainstalowano w podÅ‚odze pÄ™tle indukcyjne umożliwiajÄ…ce wzmocnienie dźwiÄ™ku dla osób z aparatami sÅ‚uchowymi.</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Na sali konferencyjnej im. Grażyny GÄ™sickiej zakupiono rampÄ™ przenoÅ›nÄ… umożliwiajÄ…cÄ… prelegentowi z niepeÅ‚nosprawnoÅ›ciÄ… dostanie siÄ™ na podest z mównicÄ….</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Zakupiono dodatkowÄ…, mobilnÄ… pÄ™tlÄ™ indukcyjnÄ… wzmacniajÄ…cÄ… dźwiÄ™k na salach konferencyjnych (sala 1105, sala 5114 AiB) oraz dodatkowo dwie pÄ™tle przenoÅ›ne przeznaczone do rozmów miÄ™dzy dwoma lub kilkoma osobami przy biurku lub stole.</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">W ramach modernizacji budynku Ministerstwa dostosowano 8 Å‚azienek na potrzeby osób z niepeÅ‚nosprawnoÅ›ciÄ….</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Wykonano instalacje alarmowe we wszystkich toaletach dla osób z niepeÅ‚nosprawnoÅ›ciÄ….</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">W Å‚azience na IV piÄ™trze zainstalowano nasadkÄ™ toaletowÄ… z podÅ‚okietnikami umożliwiajÄ…cÄ… osobom z niepeÅ‚nosprawnoÅ›ciÄ… korzystanie z WC.</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Wykonano dodatkowe porÄ™cze na klatkach schodowych oraz trzy porÄ™cze na zewnÄ…trz budynku zgodnie z przepisami pożarowymi.</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Dokupiono fotele do ewakuacji osób z niepeÅ‚nosprawnoÅ›ciami oraz zemdlonych (w sumie mamy 25 foteli).</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Oznaczono windy posiadajÄ…ce udogodnienia dla osób z niepeÅ‚nosprawnoÅ›ciÄ….</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Wykonano plany tyflograficzne wybranych toalet (przy Sali im. G. GÄ™sickiej, sali 1105 na I piÄ™trze, sali 5114 A i B na V piÄ™trze oraz toalet ogólnodostÄ™pnych znajdujÄ…cych siÄ™ po wejÅ›ciu do budynku od strony ul. Å»urawiej).</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Zamontowano znaczniki dźwiÄ™kowe przed wybranymi salami konferencyjnymi (sala im. G.GÄ™sickiej, sala 1105 na I piÄ™trze oraz sala 5114 A i B na V piÄ™trze) informujÄ…cymi o rozkÅ‚adzie sal. Znaczniki współpracujÄ… z bezpÅ‚atnÄ… aplikacjÄ… INTONAVI. Za pomocÄ… tej aplikacji można wyznaczyć trasÄ™ do wybranego znacznika oraz zapoznać siÄ™ z opisem przestrzeni, w której znajduje siÄ™ znacznik.</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Zamontowano znaczniki dźwiÄ™kowe przy wejÅ›ciach do budynku od strony ulic Å»urawiej i Wspólnej. Znaczniki te informujÄ… o wejÅ›ciu do budynku. Znaczniki współpracujÄ… z bezpÅ‚atnÄ… aplikacjÄ… INTONAVI. Za pomocÄ… tej aplikacji można wyznaczyć trasÄ™ do wybranego znacznika oraz zapoznać siÄ™ z opisem przestrzeni, w której znajduje siÄ™ znacznik.</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Na parterze, przy wejÅ›ciu głównym do budynku od ulicy Wspólnej oraz przy wejÅ›ciu do budynku od ulicy Å»urawiej zainstalowano plany tyflograficzne obrazujÄ…ce rozkÅ‚ad pomieszczeÅ„ w strefie ogólnodostÄ™pnej w sposób wizualny i dotykowy (w alfabecie Braille’a). Plany majÄ… również znaczniki NFC umożliwiajÄ…ce pobranie rzutów rozkÅ‚adu pomieszczeÅ„ zaprezentowanych na planach tyflograficznych.</Typography>\n </li>\n\t\t\t\t<li>\n <Typography use=\"body1\" tag=\"p\">Poniżej umieszczono również do pobrania rzuty rozkÅ‚adu pomieszczeÅ„ ogólnodostÄ™pnych od ul. Wspólnej i od ul. Å»urawiej.</Typography>\n </li>\n </ol>\n\n\t\t\t<Typography id=\"a11y-komunikacja\" use=\"headline6\" tag=\"h4\" className=\"article__section-title article__text\">DostÄ™pność komunikacyjno - informacyjna</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Aby skutecznie komunikować siÄ™ z naszym urzÄ™dem, osoby niesÅ‚yszÄ…ce lub sÅ‚abo sÅ‚yszÄ…ce mogÄ…:</Typography>\n\t\t\t<ul className=\"article__list article__text\">\n <li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">skorzystać z usÅ‚ugi <a href=\"https://tlumacz.migam.org/ministerstwo_funduszy_i_polityki_regionalnej\" className=\"link-text\" title=\"PrzejÅ›cie do serwisu zewnÄ™trznego TÅ‚umacz Migam\">TÅ‚umacz Migam</a>, która umożliwia poÅ‚Ä…czenia wideo z tÅ‚umaczem jÄ™zyka migowego z poziomu przeglÄ…darki internetowej, aplikacji mobilnej oraz dowolnego urzÄ…dzenia z kamerÄ…. UsÅ‚uga ta jest dostÄ™pna w dni robocze w godzinach pracy urzÄ™du 8:15-16:15,</Typography>\n </li>\n <li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">napisać pismo/zÅ‚ożyć wniosek na adres: Ministerstwo Funduszy i Polityki Regionalnej, ul. Wspólna 2/4, 00-926 Warszawa,</Typography>\n </li>\n\t\t\t\t<li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">wysÅ‚ać e-maila na adres: <a href=\"mailto:kancelaria@mfipr.gov.pl\">kancelaria@mfipr.gov.pl</a>,</Typography>\n </li>\n\t\t\t\t<li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">skontaktować siÄ™ telefonicznie przy pomocy osoby trzeciej na numer telefonu: <a href=\"tel:+48 22 250 01 30\">22 250 01 30</a>,</Typography>\n </li>\n\t\t\t\t<li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">skontaktować siÄ™ osobiÅ›cie zgÅ‚aszajÄ…c siÄ™ w siedzibie urzÄ™du w godzinach urzÄ™dowania 8:15-16:15,</Typography>\n </li>\n\t\t\t\t<li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">wysÅ‚ać wiadomość SMS/MMS na numer telefonu: <a href=\"tel:+48 662 252 227\">662 252 227</a></Typography> \n </li>\n\t\t\t\t<li className=\"article__list-item\">\n <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n <Typography use=\"body1\" tag=\"span\">wysÅ‚ać faks na numer telefonu: 22 273 87 32. W treÅ›ci faksu prosimy o podanie nazwy komórki organizacyjnej (biura, departamentu), której sprawa dotyczy.</Typography>\n </li>\n </ul>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">W kontakcie z naszym urzÄ™dem osoba sÅ‚abo sÅ‚yszÄ…ca może także skorzystać z systemu pÄ™tli indukcyjnej na recepcji głównej i w sali konferencyjnej im. Grażyny GÄ™sickiej.</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">W Ministerstwie wyznaczono <a href=\"https://www.gov.pl/web/fundusze-regiony/koordynator-dostepnosci\" className=\"link-text\" title=\"PrzejÅ›cie do serwisu zewnÄ™trznego\">koordynatora ds. dostÄ™pnoÅ›ci</a>.</Typography>\n </Container>\n );\n}\n\nexport { DeklaracjaDostepnosci };\n","import React from 'react';\n\nimport { ADVERTISEMENT_STATUS_FILTERS_CHOICES } from '../../../const';\nimport { dateToString } from '../../../helpers';\nimport {\n DateCalendar,\n FieldWithLabel,\n GridCustom,\n Select,\n TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { ProjectNumberSelectsWithPerspectives } from '../common';\n\n\nexport const AdvertisementDataFilters = ({\n filters, perspectives, onChangeFilter, onChangeProjectNumberSelect\n}) => {\n const announcementPublicationDateFrom = !!filters.announcementPublicationDateFrom\n ? new Date(filters.announcementPublicationDateFrom)\n : '';\n const announcementPublicationDateTo = !!filters.announcementPublicationDateTo\n ? new Date(filters.announcementPublicationDateTo)\n : '';\n const submissionDeadlineFrom = !!filters.submissionDeadlineFrom\n ? new Date(filters.submissionDeadlineFrom)\n : '';\n const submissionDeadlineTo = !!filters.submissionDeadlineTo\n ? new Date(filters.submissionDeadlineTo)\n : '';\n const announcementPublicationDateFromInputRef = React.createRef();\n const announcementPublicationDateToInputRef = React.createRef();\n const submissionDeadlineFromInputRef = React.createRef();\n const submissionDeadlineToInputRef = React.createRef();\n\n return (\n <>\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"Status\"\n selectRef={React.createRef()}\n tag=\"label\">\n <Select\n aria-label=\"Status\"\n className=\"select-custom\"\n options={ADVERTISEMENT_STATUS_FILTERS_CHOICES}\n screenReaderStatus={() => {return ''}}\n styles={customSelectStyles}\n value={filters.announcementStatus}\n onChange={selectedOption => onChangeFilter(\n 'announcementStatus', selectedOption)}\n />\n </FieldWithLabel>\n <FieldWithLabel\n label=\"Numer\"\n labelFor=\"filters_announcementNumber_id\"\n tag=\"label\">\n <TextFieldCustom\n aria-label={`Numer, maksymalna liczba znaków: 50. Wpisano ${filters.announcementNumber.length} znaków.`}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"numer\"\n id=\"filters_announcementNumber_id\"\n maxLength={50}\n value={filters.announcementNumber}\n onChange={ev => onChangeFilter('announcementNumber', ev.target.value)}\n onClear={ev => onChangeFilter('announcementNumber', '')} />\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"TytuÅ‚\"\n labelFor=\"filters_title_id\"\n tag=\"label\">\n <TextFieldCustom\n characterCount\n aria-label={`TytuÅ‚, maksymalna liczba znaków: 500. Wpisano ${filters.title.length} znaków.`}\n className=\"filters__input\"\n clearFieldContext=\"tytuÅ‚\"\n id=\"filters_title_id\"\n maxLength={500}\n value={filters.title}\n onChange={ev => onChangeFilter('title', ev.target.value)}\n onClear={ev => onChangeFilter('title', '')} />\n </FieldWithLabel>\n </GridCustom>\n <ProjectNumberSelectsWithPerspectives\n activity={filters.announcementProjectEnrollmentActivity}\n activityErrors={[]}\n disabled={false}\n institution={filters.announcementProjectEnrollmentInstitution}\n institutionErrors={[]}\n isClearable={true}\n mode=\"advertisements\"\n perspective={filters.announcementProjectEnrollmentPerspective}\n perspectiveErrors={[]}\n perspectives={perspectives}\n perspectivesAsSelect={true}\n priority={filters.announcementProjectEnrollmentPriority}\n priorityErrors={[]}\n programme={filters.announcementProjectEnrollmentProgramme}\n programmeErrors={[]}\n region={filters.announcementProjectEnrollmentRegion}\n regionErrors={[]}\n withInstitutionNumber={false}\n onChangeActivity={onChangeProjectNumberSelect}\n onChangeInstitution={onChangeProjectNumberSelect}\n onChangePerspective={onChangeProjectNumberSelect}\n onChangePriority={onChangeProjectNumberSelect}\n onChangeProgramme={onChangeProjectNumberSelect}\n onChangeRegion={onChangeProjectNumberSelect}\n />\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"Numer projektu lub naboru\"\n labelFor=\"filters_announcementProjectEnrollmentFullNumber_id\"\n tag=\"label\">\n <TextFieldCustom\n aria-label={`Numer projektu lub naboru, maksymalna liczba znaków: 50. Wpisano ${filters.announcementProjectEnrollmentFullNumber.length} znaków.`}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"numer projektu lub naboru\"\n id=\"filters_announcementProjectEnrollmentFullNumber_id\"\n maxLength={50}\n value={filters.announcementProjectEnrollmentFullNumber}\n onChange={ev => onChangeFilter('announcementProjectEnrollmentFullNumber', ev.target.value)}\n onClear={ev => onChangeFilter('announcementProjectEnrollmentFullNumber', '')} />\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"Data publikacji\"\n tag=\"label\">\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n inputRef={announcementPublicationDateFromInputRef}\n label=\"od\"\n tag=\"label\">\n <DateCalendar\n dateName=\"Od\"\n maxDate={announcementPublicationDateTo || undefined}\n parentRef={announcementPublicationDateFromInputRef}\n value={announcementPublicationDateFrom}\n onChange={date => onChangeFilter('announcementPublicationDateFrom', dateToString(date))} />\n </FieldWithLabel>\n <FieldWithLabel\n inputRef={announcementPublicationDateToInputRef}\n label=\"do\"\n tag=\"label\">\n <DateCalendar\n dateName=\"Do\"\n minDate={announcementPublicationDateFrom || undefined}\n parentRef={announcementPublicationDateToInputRef}\n value={announcementPublicationDateTo}\n onChange={date => onChangeFilter('announcementPublicationDateTo', dateToString(date))} />\n </FieldWithLabel>\n </GridCustom>\n </FieldWithLabel>\n <FieldWithLabel\n label=\"Termin skÅ‚adania ofert\"\n tag=\"label\">\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n inputRef={submissionDeadlineFromInputRef}\n label=\"od\"\n tag=\"label\">\n <DateCalendar\n dateName=\"Od\"\n maxDate={submissionDeadlineTo || undefined}\n parentRef={submissionDeadlineFromInputRef}\n value={submissionDeadlineFrom}\n onChange={date => onChangeFilter('submissionDeadlineFrom', dateToString(date))} />\n </FieldWithLabel>\n <FieldWithLabel\n inputRef={submissionDeadlineToInputRef}\n label=\"do\"\n tag=\"label\">\n <DateCalendar\n dateName=\"Do\"\n minDate={submissionDeadlineFrom || undefined}\n parentRef={submissionDeadlineToInputRef}\n value={submissionDeadlineTo}\n onChange={date => onChangeFilter('submissionDeadlineTo', dateToString(date))} />\n </FieldWithLabel>\n </GridCustom>\n </FieldWithLabel>\n </GridCustom>\n </>\n )\n}\n","import React, { useContext } from 'react';\nimport { Link, useHistory } from 'react-router-dom';\nimport { DataTableCell, DataTableRow } from '@rmwc/data-table';\nimport { Icon } from '@rmwc/icon';\n\nimport { UserContext } from '../../../context/user-context';\nimport { URLS } from '../../../urls/frontend';\nimport { ButtonStyled, Ellipsis, MoreOptionsButton, Text } from '../../common';\n\n\nconst STATUS_ICONS = {\n DRAFT: 'radio_button_unchecked',\n PUBLISHED: 'calendar_today',\n CLOSED: 'event_busy',\n CANCELLED: 'arrow_circle_down',\n LOCKED: 'highlight_off',\n RESOLVED: 'event_available',\n};\n\n\nexport const AdvertisementListRow = ({\n advertisement, onFilterAdvertisementByUserEmail\n}) => {\n let history = useHistory();\n const {\n advertisement: advertisement_,\n publicationDate: versionPublicationDate,\n submissionDeadline,\n } = advertisement;\n const {\n createdBy: user,\n status,\n publicationDate: advertisementPublicationDate,\n } = advertisement_;\n\n const handleFilterProjectsByUserEmail = () => {\n history.push(\n `${URLS.managementProjects.path}?email=${user.email}&sort=type&strona=1`);\n };\n\n const handleGoToManageUserPage = () => {\n history.push(URLS.usersDetails.getUrl(user.id));\n };\n\n const handleFilterAdvertisementsByUserEmail = () => {\n onFilterAdvertisementByUserEmail(user.email);\n };\n\n const { permissions } = useContext(UserContext);\n\n return (\n <DataTableRow>\n <DataTableCell>\n <div className=\"table--administration__meta\">\n <Link to={`/ogloszenia/${advertisement_.id}${status.label === 'DRAFT' ? '/robocza' : ''}`} className=\"link-text\">\n {advertisement_.number}\n </Link>\n <Ellipsis lineHeight={19} lines={2}>\n <Text use=\"caption\" className=\"table--administration__user-info\">{advertisement.title}</Text>\n </Ellipsis>\n </div>\n </DataTableCell>\n <DataTableCell>\n <div className={`table--administration__type-col ${status.label === 'CANCELLED' ? 'type-cancelled' : ''}`}>\n <Icon aria-hidden=\"true\" icon={STATUS_ICONS[status.label]} />\n <Text>{status.name}</Text>\n </div>\n </DataTableCell>\n <DataTableCell>\n <div className=\"table--administration__action-col\">\n <div className=\"table--administration__meta\">\n <Text>{user.forename} {user.surname}</Text>\n <Text use=\"caption\" className=\"table--administration__user-info\">{user.email}</Text>\n </div>\n <MoreOptionsButton menuAriaLabel=\"Otwórz menu użytkownika: zarzÄ…dzaj użytkownikiem, filtruj projekty i nabory dla tego użytkownika, filtruj ogÅ‚oszenia dla tego użytkownika.\">\n <Text use=\"caption\" className=\"table--administration__user-id\">ID {user.identifier}</Text>\n <ul className=\"table--administration__user-menu-list\">\n {permissions.fullUsersAndPermissions &&\n <li>\n <ButtonStyled noMargin onClick={handleGoToManageUserPage}>\n ZarzÄ…dzaj użytkownikiem\n </ButtonStyled>\n </li>\n }\n {permissions.projectsEnrollments &&\n <li>\n <ButtonStyled noMargin onClick={handleFilterProjectsByUserEmail}>\n Filtruj projekty i nabory\n </ButtonStyled>\n </li>\n }\n <li><ButtonStyled noMargin onClick={handleFilterAdvertisementsByUserEmail}>Filtruj ogÅ‚oszenia</ButtonStyled></li>\n </ul>\n </MoreOptionsButton>\n </div>\n </DataTableCell>\n <DataTableCell>\n <div className=\"table--administration__meta\">\n {status.label === 'DRAFT' ? (\n <>\n <Text use=\"caption\" className=\"table--administration__user-info\">\n {advertisementPublicationDate\n ? `zaplanowana publikacja: ${advertisementPublicationDate}`\n : 'jeszcze nie opublikowane'\n }\n </Text>\n {submissionDeadline?.length > 0 && (\n <Text use=\"caption\" className=\"table--administration__user-info\">\n termin: {submissionDeadline}\n </Text>\n )}\n </>\n ) : (\n ['CANCELLED', 'LOCKED'].includes(status.label)\n ? (\n <Text use=\"caption\" className=\"table--administration__user-info\">\n publikacja: {advertisementPublicationDate}\n </Text>\n )\n : (\n <>\n <Text use=\"caption\" className=\"table--administration__user-info\">\n publikacja: {advertisementPublicationDate}\n </Text>\n {advertisementPublicationDate !== versionPublicationDate && (\n <Text use=\"caption\" className=\"table--administration__user-info last-change\">\n ost. zmiana: {versionPublicationDate}\n </Text>\n )}\n <Text use=\"caption\" className=\"table--administration__user-info\">\n termin: {submissionDeadline}\n </Text>\n </>\n )\n )}\n </div>\n </DataTableCell>\n </DataTableRow>\n )\n};\n","import React from 'react';\n\nimport {\n RODZAJ_ADRESU_FILTERS_CHOICES,\n TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES\n} from '../../../const';\nimport {\n FieldWithLabel,\n GridCustom,\n Select,\n Text,\n TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { FormKraj, FormMiejscowosc } from '../common';\n\n\nexport const AdvertiserDataFilters = ({\n filters, onChangeAdvertiserIdentificationNumber, onChangeFilter,\n onChangePolishLocality, ...props\n}) => {\n const { advertiserAddressType, advertiserIdentificationNumberType } = filters;\n const { value: advertiserAddressTypeValue } = advertiserAddressType;\n\n function handlePasteNumerIdentyfikacyjny(ev) {\n // stop data actually being pasted into input\n ev.stopPropagation();\n ev.preventDefault();\n\n // set pasted data via clipboard API\n const clipboardData = ev.clipboardData || window.clipboardData;\n const pastedData = clipboardData.getData('Text');\n onChangeAdvertiserIdentificationNumber(pastedData, true);\n }\n\n return (\n <>\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"Nazwa\"\n labelFor=\"filters_advertiserName_id\"\n tag=\"label\">\n <TextFieldCustom\n aria-label={`Nazwa, maksymalna liczba znaków: 100. Wpisano ${filters.advertiserName.length} znaków.`}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"nazwa\"\n id=\"filters_advertiserName_id\"\n maxLength={100}\n value={filters.advertiserName}\n onChange={ev => onChangeFilter('advertiserName', ev.target.value)}\n onClear={ev => onChangeFilter('advertiserName', '')} />\n </FieldWithLabel>\n </GridCustom>\n\n <GridCustom fullwidth flexM className=\"filters-dialog__advertisement-filters-base\">\n <FieldWithLabel\n className=\"filters-dialog__advertisement-adress-type\"\n label=\"Rodzaj adresu\"\n selectRef={React.createRef()}\n tag=\"label\">\n <Select\n aria-label=\"Rodzaj adresu. Dalsze opcje filtrowania zostanÄ… wyÅ›wietlone po wybraniu konkretnej opcji.\"\n className=\"select-custom\"\n options={RODZAJ_ADRESU_FILTERS_CHOICES}\n screenReaderStatus={() => {return ''}}\n styles={customSelectStyles}\n value={advertiserAddressType}\n onChange={selectedOption =>\n props.onChangeAdvertiserAddressType(selectedOption)\n }\n />\n </FieldWithLabel>\n {advertiserAddressTypeValue === 'poland' && (\n <div className=\"filters-dialog__advertisement-adress-fields\">\n <FieldWithLabel\n label=\"NIP/PESEL\"\n tag=\"label\"\n selectRef={React.createRef()}\n >\n <Select\n aria-label=\"PESEL/NIP\"\n className=\"select-custom\"\n options={TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES}\n screenReaderStatus={() => {return ''}}\n styles={customSelectStyles}\n value={advertiserIdentificationNumberType}\n onChange={selectedOption =>\n props.onChangeAdvertiserIdentificationNumberType(selectedOption)\n }\n />\n {advertiserIdentificationNumberType && advertiserIdentificationNumberType.value === 'all' && (\n <Text info>Pole do wprowadzenia numeru pojawi siÄ™ po wybraniu wartoÅ›ci NIP lub PESEL.</Text>\n )}\n </FieldWithLabel>\n {['nip', 'pesel'].includes(advertiserIdentificationNumberType.value) && (\n <FieldWithLabel\n label={advertiserIdentificationNumberType.label}\n labelFor=\"filters_advertiserIdentificationNumber_id\"\n tag=\"label\">\n <TextFieldCustom\n aria-describedby=\"advertiserIdentificationNumber_id\"\n aria-label={`${advertiserIdentificationNumberType.label}, maksymalna liczba znaków: ${advertiserIdentificationNumberType.value === 'nip' ? 10 : 11}. Wpisano ${filters.advertiserIdentificationNumber.length} znaków.`}\n characterCount\n className=\"filters__input\"\n clearFieldContext={advertiserIdentificationNumberType.label}\n id=\"filters_advertiserIdentificationNumber_poland\"\n maxLength={advertiserIdentificationNumberType.value === 'nip' ? 10 : 11}\n value={filters.advertiserIdentificationNumber}\n onChange={ev => onChangeAdvertiserIdentificationNumber(ev.target.value, true)}\n onClear={ev => onChangeAdvertiserIdentificationNumber('')}\n onKeyUp={ev => onChangeAdvertiserIdentificationNumber(ev.target.value, true)}\n onPaste={handlePasteNumerIdentyfikacyjny} />\n <Text info id=\"advertiserIdentificationNumber_poland\">(dla podmiotów z Polski)</Text>\n </FieldWithLabel>\n )}\n </div>\n )}\n {advertiserAddressTypeValue === 'abroad' && (\n <FieldWithLabel\n label=\"Numer identyfikacyjny\"\n labelFor=\"filters_advertiserIdentificationNumber_abroad\"\n tag=\"label\">\n <TextFieldCustom\n aria-label={`Numer identyfikacyjny, maksymalna liczba znaków: 100. Wpisano ${filters.advertiserIdentificationNumber.length} znaków.`}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"numer identyfikacyjny\"\n id=\"filters_advertiserIdentificationNumber_id\"\n maxLength={100}\n value={filters.advertiserIdentificationNumber}\n onChange={ev => onChangeAdvertiserIdentificationNumber(ev.target.value)}\n onClear={ev => onChangeAdvertiserIdentificationNumber('')} />\n <Text info id=\"advertiserIdentificationNumber_abroad\">(dla podmiotów zagranicznych)</Text>\n </FieldWithLabel>\n )}\n </GridCustom>\n {advertiserAddressTypeValue === 'poland' && (\n <FormMiejscowosc\n error=\"\"\n isClearable\n invalid={false}\n miejscowosc={filters.advertiserAddressLocality.length > 0\n ? {\n wojewodztwo: filters.advertiserAddressVoivodeship,\n powiat: filters.advertiserAddressPoviat,\n gmina: filters.advertiserAddressCommune,\n miejscowosc: filters.advertiserAddressLocality,\n }\n : null\n }\n changeMiejscowosc={onChangePolishLocality} />\n )}\n {advertiserAddressTypeValue === 'abroad' && (\n <>\n <FormKraj\n error={''}\n formLocked={false}\n isClearable\n invalid={false}\n krajName={filters.advertiserAddressCountry}\n changeKraj={selectedOption => onChangeFilter(\n 'advertiserAddressCountry',\n selectedOption === null ? '' : selectedOption.label\n )} />\n <FieldWithLabel \n label=\"Miejscowość\"\n tag=\"label\"\n labelFor=\"filters_advertiserAddressLocality_id\"\n >\n <TextFieldCustom\n aria-label={`Miejscowość, maksymalna liczba znaków: 50. Wpisano ${filters.advertiserAddressLocality.length} znaków.`}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"miejscowość\"\n id=\"filters_advertiserAddressLocality_id\"\n maxLength={50}\n value={filters.advertiserAddressLocality}\n onChange={ev => onChangeFilter('advertiserAddressLocality', ev.target.value)}\n onClear={ev => onChangeFilter('advertiserAddressLocality', '')} />\n </FieldWithLabel>\n </>\n )}\n </>\n )\n}\n","import React from 'react';\n\nimport { FieldWithLabel, GridCustom, TextFieldCustom } from '../../common';\n\n\nexport const UserDataFilters = ({userEmail, userForename, userSurname, onChangeFilter}) => {\n\n return (\n <>\n <GridCustom fullwidth flexM>\n <FieldWithLabel \n label=\"Adres e-mail\"\n tag=\"label\"\n labelFor=\"filters_userEmail_id\"\n >\n <TextFieldCustom\n aria-label={`Adres e-mail, maksymalna liczba znaków: 100. Wpisano ${userEmail.length} znaków.`}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"adres e-mail\"\n id=\"filters_userEmail_id\"\n maxLength={100}\n value={userEmail}\n onChange={ev => onChangeFilter('userEmail', ev.target.value)}\n onClear={ev => onChangeFilter('userEmail', '')} />\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"ImiÄ™\"\n tag=\"label\"\n labelFor=\"filters_userForename_id\"\n >\n <TextFieldCustom\n aria-label={`ImiÄ™, maksymalna liczba znaków: 50. Wpisano ${userForename.length} znaków.`}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"imiÄ™\"\n id=\"filters_userForename_id\"\n maxLength={50}\n value={userForename}\n onChange={ev => onChangeFilter('userForename', ev.target.value)}\n onClear={ev => onChangeFilter('userForename', '')} />\n </FieldWithLabel>\n <FieldWithLabel\n label=\"Nazwisko\"\n tag=\"label\"\n labelFor=\"filters_userSurname_id\"\n >\n <TextFieldCustom\n aria-label={`Nazwisko, maksymalna liczba znaków: 50. Wpisano ${userSurname.length} znaków.`}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"nazwisko\"\n id=\"filters_userSurname_id\"\n maxLength={50}\n value={userSurname}\n onChange={ev => onChangeFilter('userSurname', ev.target.value)}\n onClear={ev => onChangeFilter('userSurname', '')} />\n </FieldWithLabel>\n </GridCustom>\n </>\n )\n}\n","import React, { useState } from 'react';\n\nimport { TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES } from '../../../const';\nimport { serializePerspectiveForSelect } from '../../../helpers';\nimport { useOneTimeFetchApi } from '../../../hooks';\nimport { ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS } from '../../../filters';\nimport { API_URLS } from '../../../urls/api';\nimport {\n ButtonStyled,\n GridCustom,\n Loader,\n Text,\n} from '../../common';\nimport { AdvertisementDataFilters } from './AdvertisementDataFilters';\nimport { AdvertiserDataFilters } from './AdvertiserDataFilters';\nimport { UserDataFilters } from './UserDataFilters';\n\n\nexport const AdvertisementsFilters = (props) => {\n const [filters, setFilters] = useState(props.filters);\n const {data, loadingOn, fetchError} = useOneTimeFetchApi({\n url: API_URLS.perspectives.path,\n fetchData: {mode: 'advertisements'},\n serializeFetchDataFunction: serializePerspectiveForSelect,\n });\n\n function handleChangeFilter(name, value) {\n setFilters({...filters, [name]: value});\n }\n\n function handleApplyFilters() {\n props.onUpdateFilters(filters);\n }\n\n function handleChangeAdvertiserAddressType(value) {\n setFilters(prevFilters => {\n let dct = {\n advertiserAddressType: value,\n advertiserIdentificationNumber: '',\n advertiserAddressLocality: '',\n };\n dct['advertiserIdentificationNumberType'] =\n value.value !== 'poland'\n ? TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES.filter(\n choice => choice.value === 'all')[0]\n : ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS[\n 'advertiserIdentificationNumberType'];\n if (value.value !== 'poland') {\n dct = {...dct, ...{\n advertiserAddressVoivodeship: '',\n advertiserAddressPoviat: '',\n advertiserAddressCommune: '',\n advertiserAddressLocality: '',\n }};\n }\n if (value.value !== 'abroad') {\n dct['advertiserAddressCountry'] = '';\n }\n return {...prevFilters, ...dct}\n });\n }\n\n function handleChangeAdvertiserIdentificationNumberType(value) {\n setFilters(prevFilters => {\n let dct = {advertiserIdentificationNumberType: value};\n if (prevFilters.advertiserIdentificationNumberType.value !== value.value) {\n // clean advertiserIdentificationNumber\n dct['advertiserIdentificationNumber'] = '';\n }\n return {...filters, ...dct}}\n );\n }\n\n function handleChangeAdvertiserIdentificationNumber(value, onlyDigits=false) {\n if (onlyDigits) {\n value = value.replace(/[^\\d]/g, '');\n }\n handleChangeFilter('advertiserIdentificationNumber', value);\n }\n\n function setSerializedData(data, serializationDict) {\n let serializedData = {};\n for (let [name, value] of Object.entries(data)) {\n serializedData[serializationDict[name]] = value;\n }\n setFilters({...filters, ...serializedData});\n }\n\n function handleChangeProjectNumberSelect(data) {\n setSerializedData(data, {\n perspective: 'announcementProjectEnrollmentPerspective',\n programme: 'announcementProjectEnrollmentProgramme',\n priority: 'announcementProjectEnrollmentPriority',\n activity: 'announcementProjectEnrollmentActivity',\n institution: 'announcementProjectEnrollmentInstitution',\n region: 'announcementProjectEnrollmentRegion',\n });\n }\n\n function handleChangePolishLocality(data) {\n if (data === null) {\n // it's possible to get data as null from locality form\n data = {\n wojewodztwo: '',\n powiat: '',\n gmina: '',\n miejscowosc: '',\n };\n }\n setSerializedData(data, {\n wojewodztwo: 'advertiserAddressVoivodeship',\n powiat: 'advertiserAddressPoviat',\n gmina: 'advertiserAddressCommune',\n miejscowosc: 'advertiserAddressLocality',\n });\n }\n\n return loadingOn ? <Loader /> : (fetchError\n ? (\n <>\n <Text error>{fetchError}</Text>\n <ButtonStyled cancel onClick={props.onCloseFilters}>OK</ButtonStyled>\n </>\n )\n : (\n <>\n <section className=\"filters-dialog__filters-section\">\n <Text className=\"filters-dialog__filters-headers\">Informacje o użytkowniku</Text>\n <UserDataFilters\n userEmail={filters.userEmail}\n userForename={filters.userForename}\n userSurname={filters.userSurname}\n onChangeFilter={handleChangeFilter} />\n <Text className=\"filters-dialog__filters-headers\">Informacje o podmiocie</Text>\n <AdvertiserDataFilters\n filters={filters}\n onChangeAdvertiserAddressType={handleChangeAdvertiserAddressType}\n onChangeAdvertiserIdentificationNumber={handleChangeAdvertiserIdentificationNumber}\n onChangeAdvertiserIdentificationNumberType={handleChangeAdvertiserIdentificationNumberType}\n onChangeFilter={handleChangeFilter}\n onChangePolishLocality={handleChangePolishLocality} />\n <Text className=\"filters-dialog__filters-headers\">Informacje o ogÅ‚oszeniu</Text>\n <AdvertisementDataFilters\n filters={filters}\n perspectives={data.perspectives}\n onChangeFilter={handleChangeFilter}\n onChangeProjectNumberSelect={handleChangeProjectNumberSelect} />\n </section>\n <GridCustom flexEnd>\n <ButtonStyled cancel onClick={props.onCloseFilters}>Anuluj</ButtonStyled>\n <ButtonStyled primary onClick={handleApplyFilters}>Zastosuj kryteria</ButtonStyled>\n </GridCustom>\n </>\n )\n )\n};\n","import React, { useContext, useEffect, useState } from 'react';\n\nimport {\n ADVERTISEMENT_STATUS_FILTERS_CHOICES,\n RODZAJ_ADRESU_FILTERS_CHOICES,\n TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES\n} from '../../../const';\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport {\n ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS,\n getAdvertisementsManagementsFiltersCount\n} from '../../../filters';\nimport { usePaginatedFetchApi } from '../../../hooks';\nimport { setInitialSorterByUrlParam } from '../../../sorters';\nimport {\n Breadcrumps,\n Container,\n Loader,\n NotPermittedPage,\n PaginatedListHeader,\n Pagination,\n SortersFiltersRow,\n TableCustom,\n Text\n} from '../../common';\nimport { AdvertisementListRow } from './AdvertisementListRow';\nimport { AdvertisementsFilters } from './AdvertisementsFilters';\n\n\nconst SORTERS = {\n announcementStatus_asc:\n ['announcementStatus_asc', 'Po statusie rosnÄ…co', 0],\n announcementStatus_desc:\n ['announcementStatus_desc', 'Po statusie malejÄ…co', 1],\n announcementNumber_asc:\n ['announcementNumber_asc', 'Po numerze ogÅ‚oszenia rosnÄ…co', 2],\n announcementNumber_desc:\n ['announcementNumber_desc', 'Po numerze ogÅ‚oszenia malejÄ…co', 3],\n userEmail_asc: [\n 'userEmail_asc',\n 'Po e-mailu użytkownika, który dodaÅ‚ ogÅ‚oszenie rosnÄ…co', 4],\n userEmail_desc: [\n 'userEmail_desc',\n 'Po e-mailu użytkownika, który dodaÅ‚ ogÅ‚oszenie malejÄ…co', 5],\n announcementPublicationDate_asc: [\n 'announcementPublicationDate_asc',\n 'Po dacie opublikowania ogÅ‚oszenia rosnÄ…co', 6],\n announcementPublicationDate_desc: [\n 'announcementPublicationDate_desc',\n 'Po dacie opublikowania ogÅ‚oszenia malejÄ…co', 7],\n submissionDeadline_asc: [\n 'submissionDeadline_asc', 'Po terminie skÅ‚adania ofert rosnÄ…co', 8],\n submissionDeadline_desc: [\n 'submissionDeadline_desc', 'Po terminie skÅ‚adania ofert malejÄ…co', 9],\n title_asc: ['title_asc', 'Po tytule ogÅ‚oszenia rosnÄ…co', 10],\n title_desc: ['title_desc', 'Po tytule ogÅ‚oszenia malejÄ…co', 11],\n};\nconst SORTING_VALUES = Object.values(SORTERS).sort((s1, s2) => s1[2] - s2[2]);\nconst DEFAULT_SORTER = 'announcementNumber_desc';\nconst OBJECTS_ATTR_NAME = 'versions';\nconst PAGINATED_BY = 20;\nconst BASE_API_URL = '/api/admin/announcements';\nconst SERIALIZER_CONFIG = {\n dateAttributes: ['publicationDate', 'submissionDeadline'],\n dateTimeAttributes: ['submissionDeadline', ],\n dateTimeToLastMinuteAttributes: ['submissionDeadline', ],\n removeTemporaryId: true,\n};\nconst SERIALIZATION_URL_LIST = [\n ['userEmail', 'email'],\n ['userForename', 'imie'],\n ['userSurname', 'nazwisko'],\n ['advertiserName', 'nazwaPodmiotu'],\n ['advertiserAddressType', 'typAdresu'],\n ['advertiserIdentificationNumberType', 'typNumeruIdent'],\n ['advertiserIdentificationNumber', 'numerIdent'],\n ['advertiserAddressCountry', 'kraj'],\n ['advertiserAddressVoivodeship', 'woj'],\n ['advertiserAddressPoviat', 'pow'],\n ['advertiserAddressCommune', 'gm'],\n ['advertiserAddressLocality', 'miejscowosc'],\n ['announcementStatus', 'statusOgl'],\n ['announcementNumber', 'numerOgl'],\n ['title', 'tytul'],\n ['announcementProjectEnrollmentPerspective', 'perspektywa'],\n ['announcementProjectEnrollmentProgramme', 'programOperacyjny'],\n ['announcementProjectEnrollmentPriority', 'osPriorytetowa'],\n ['announcementProjectEnrollmentActivity', 'dzialanie'],\n ['announcementProjectEnrollmentInstitution', 'instytucja'],\n ['announcementProjectEnrollmentRegion', 'region'],\n ['announcementProjectEnrollmentFullNumber', 'numerProj'],\n ['announcementPublicationDateFrom', 'dataPublOd'],\n ['announcementPublicationDateTo', 'dataPublDo'],\n ['submissionDeadlineFrom', 'terminOfertOd'],\n ['submissionDeadlineTo', 'terminOfertDo'],\n ['page', 'strona'],\n];\nconst SERIALIZATION_URL_DICT_TO_POLISH = {};\nfor (let [eng, pol] of SERIALIZATION_URL_LIST) {\n SERIALIZATION_URL_DICT_TO_POLISH[eng] = pol;\n}\n\nconst IMPLEMENTATION_LEVEL_SELECTS_NAMES_LIST = [\n 'announcementProjectEnrollmentPerspective',\n 'announcementProjectEnrollmentProgramme',\n 'announcementProjectEnrollmentPriority',\n 'announcementProjectEnrollmentActivity',\n 'announcementProjectEnrollmentInstitution',\n 'announcementProjectEnrollmentRegion'\n];\n\n\nfunction setInitialPageNumber(urlParams) {\n let pageNumber = parseInt(urlParams.get('strona'));\n if (!(pageNumber > 0)) {\n pageNumber = 1;\n }\n return pageNumber\n}\n\nfunction setInitialFilters(urlParams) {\n // set some default values\n let filters = {\n advertiserAddressType:\n ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS.advertiserAddressType,\n advertiserIdentificationNumberType:\n ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS.advertiserIdentificationNumberType,\n advertiserIdentificationNumber:\n ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS.advertiserIdentificationNumber,\n advertiserAddressCountry:\n ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS.advertiserAddressCountry,\n advertiserAddressVoivodeship:\n ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS.advertiserAddressVoivodeship,\n advertiserAddressPoviat:\n ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS.advertiserAddressPoviat,\n advertiserAddressCommune:\n ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS.advertiserAddressCommune,\n advertiserAddressLocality:\n ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS.advertiserAddressLocality,\n };\n\n const setValue = (valueName) => {\n const value = urlParams.get(SERIALIZATION_URL_DICT_TO_POLISH[valueName]);\n if (value && value.length) {\n filters[valueName] = value;\n }\n };\n\n for (let [name, value] of Object.entries(\n ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS)) {\n if ([\n 'advertiserIdentificationNumberType',\n 'advertiserIdentificationNumber',\n 'advertiserAddressCountry',\n 'advertiserAddressVoivodeship',\n 'advertiserAddressPoviat',\n 'advertiserAddressCommune',\n 'advertiserAddressLocality'\n ].includes(name)) { continue }\n let searchParamValue = urlParams.get(\n SERIALIZATION_URL_DICT_TO_POLISH[name]);\n if (name === 'advertiserAddressType') {\n for (let choice of RODZAJ_ADRESU_FILTERS_CHOICES) {\n if (searchParamValue && choice.value === searchParamValue) {\n filters[name] = choice;\n if (searchParamValue === 'poland') {\n\n // set locality if 4 parameters chosen\n const advertiserAddressVoivodeship = urlParams.get(\n SERIALIZATION_URL_DICT_TO_POLISH['advertiserAddressVoivodeship']) || null;\n const advertiserAddressPoviat = urlParams.get(\n SERIALIZATION_URL_DICT_TO_POLISH['advertiserAddressPoviat']) || null;\n const advertiserAddressCommune = urlParams.get(\n SERIALIZATION_URL_DICT_TO_POLISH['advertiserAddressCommune']) || null;\n const advertiserAddressLocality = urlParams.get(\n SERIALIZATION_URL_DICT_TO_POLISH['advertiserAddressLocality']) || null;\n if (advertiserAddressVoivodeship\n && advertiserAddressPoviat\n && advertiserAddressCommune\n && advertiserAddressLocality\n ) {\n filters = {...filters, ...{\n advertiserAddressVoivodeship,\n advertiserAddressPoviat,\n advertiserAddressCommune,\n advertiserAddressLocality\n }};\n }\n\n const advertiserIdentificationNumberType = urlParams.get(\n SERIALIZATION_URL_DICT_TO_POLISH['advertiserIdentificationNumberType']) || '';\n if (!advertiserIdentificationNumberType.length) { break }\n\n // find correct advertiserIdentificationNumberType\n for (let type_ of TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES) {\n if (advertiserIdentificationNumberType === type_.value) {\n filters['advertiserIdentificationNumberType'] = type_;\n // find advertiserIdentificationNumber\n setValue('advertiserIdentificationNumber');\n break\n }\n }\n } else {\n filters['advertiserIdentificationNumberType'] =\n TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES.filter(\n choice => choice.value === 'all'\n )[0];\n if (searchParamValue === 'abroad') {\n // find advertiserIdentificationNumber\n setValue('advertiserIdentificationNumber');\n // find advertiserAddressCountry\n setValue('advertiserAddressCountry');\n // find advertiserAddressLocality\n setValue('advertiserAddressLocality');\n }\n }\n break\n }\n }\n } else if (name === 'announcementStatus') {\n // set from choices\n let filterSet = false;\n for (let choice of ADVERTISEMENT_STATUS_FILTERS_CHOICES) {\n if (searchParamValue && choice.value === searchParamValue) {\n filters[name] = choice;\n filterSet = true;\n break\n }\n }\n if (!filterSet) {\n // set default value\n filters[name] = value;\n }\n } else if (IMPLEMENTATION_LEVEL_SELECTS_NAMES_LIST.includes(name)) {\n searchParamValue = parseInt(searchParamValue);\n // if it's possible to parse, set them, else set default value\n filters[name] = searchParamValue > 0\n ? {value: searchParamValue} : value;\n } else if ([\n // date fields\n 'announcementPublicationDateFrom', 'announcementPublicationDateTo',\n 'submissionDeadlineFrom', 'submissionDeadlineTo'\n ].includes(name)) {\n filters[name] = /\\d{4}-\\d{2}-\\d{2}/.test(searchParamValue)\n ? searchParamValue : value;\n } else {\n filters[name] = searchParamValue || value;\n }\n }\n return filters\n}\n\nfunction getFiltersFetchData(filters) {\n const data = {};\n for (let [name, value] of Object.entries(filters)) {\n if ([\n 'advertiserAddressType',\n 'advertiserIdentificationNumberType',\n 'announcementStatus'\n ].includes(name)) {\n data[name] = value.value;\n } else if (value !== ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS[name]) {\n if (IMPLEMENTATION_LEVEL_SELECTS_NAMES_LIST.includes(name)\n ) {\n data[name] = value.value;\n } else {\n data[name] = value.trim();\n }\n }\n }\n return data\n}\n\n\nexport const Advertisements = (props) => {\n const params = new URLSearchParams(props.location.search);\n\n const [pageNumber, setPageNumber] = useState(setInitialPageNumber(params));\n\n const [selectedSort, setSelectedSort] = useState(null);\n const [filters, setFilters] = useState(null);\n const [filtersCounter, setFiltersCounter] = useState(0);\n const [filtersAreOn, setFiltersAreOn] = useState(false);\n\n function setInitialSorterAndFilters() {\n // configure sorter\n setSelectedSort(\n setInitialSorterByUrlParam(params, SORTERS, DEFAULT_SORTER));\n\n // configure filters\n const setCleanedLocalityFilters = (filtersData) => {\n filtersData = {...filtersData, ...{\n advertiserAddressVoivodeship: '',\n advertiserAddressPoviat: '',\n advertiserAddressCommune: '',\n advertiserAddressLocality: '',\n }};\n setFilters(filtersData);\n setFiltersCounter(getAdvertisementsManagementsFiltersCount(filtersData));\n }\n const filters_ = setInitialFilters(params);\n let xhrFetch = null;\n if (filters_.advertiserAddressType.value === 'poland' && filters_.advertiserAddressLocality.length) {\n xhrFetch = fetchApi(\n '/api/dictionaries/teryt',\n 'GET',\n {},\n {locality_search_key: filters_.advertiserAddressLocality},\n (data) => {\n for (let {voivodeship, poviat, commune, locality} of data.teryt_items || []) {\n // if fits, set it as correct filters\n if (voivodeship === filters_.advertiserAddressVoivodeship\n && poviat === filters_.advertiserAddressPoviat\n && commune === filters_.advertiserAddressCommune\n && locality === filters_.advertiserAddressLocality\n ) {\n setFilters(filters_);\n setFiltersCounter(getAdvertisementsManagementsFiltersCount(filters_));\n return\n }\n }\n setCleanedLocalityFilters(filters_);\n },\n () => setCleanedLocalityFilters(filters_),\n () => setCleanedLocalityFilters(filters_)\n );\n } else {\n setFilters(filters_);\n setFiltersCounter(getAdvertisementsManagementsFiltersCount(filters_));\n }\n return () => {\n if (xhrFetch !== null) {xhrFetch.abort()}\n }\n }\n useEffect(setInitialSorterAndFilters, []);\n\n const {\n data, loadingOn, fetchError, notPermitted, permissionsCheckingOn\n } = usePaginatedFetchApi(\n pageNumber, selectedSort, filters, getFiltersFetchData,\n PAGINATED_BY, OBJECTS_ATTR_NAME, BASE_API_URL,\n SERIALIZATION_URL_DICT_TO_POLISH, SERIALIZER_CONFIG);\n\n const { removePermission } = useContext(UserContext);\n useEffect(() => {\n if (notPermitted) {\n removePermission('advertisements');\n }\n }, [notPermitted]); // eslint-disable-line react-hooks/exhaustive-deps\n\n if (permissionsCheckingOn) {\n return <Loader />\n }\n\n if (notPermitted) {\n return <NotPermittedPage />\n }\n\n function handleChangePage(next=true) {\n setPageNumber(prev => next ? prev + 1 : Math.max(prev -1, 1));\n }\n\n function handleChangeSort(selectedSort) {\n setPageNumber(1);\n setSelectedSort(selectedSort);\n }\n\n function handleOpenFilters() {\n setFiltersAreOn(true);\n }\n\n function handleCloseFilters() {\n setFiltersAreOn(false);\n }\n\n function handleUpdateFilters(filters) {\n setPageNumber(1);\n setFilters(filters);\n handleCloseFilters();\n setFiltersCounter(getAdvertisementsManagementsFiltersCount(filters));\n }\n\n function handleFilterAdvertisementsByUserEmail(userEmail) {\n setPageNumber(1);\n const sorter = SORTERS[DEFAULT_SORTER];\n setSelectedSort({value: sorter[0], label: sorter[1]});\n setFilters({...ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS, userEmail});\n }\n\n return (\n <>\n <Breadcrumps notZarzadzanieTrescia>\n <li className=\"breadcrumps__current\">Administracja ogÅ‚oszeniami</li>\n </Breadcrumps>\n <PaginatedListHeader\n title=\"Lista ogÅ‚oszeÅ„\"\n total={data ? data.total : 0} />\n <SortersFiltersRow\n // sorters\n selectedSort={selectedSort}\n sortingValues={SORTING_VALUES}\n onChangeSort={handleChangeSort}\n // filters\n filters={filters}\n filtersCounter={filtersCounter}\n filtersAreOn={filtersAreOn}\n FiltersComponent={AdvertisementsFilters}\n onCloseFilters={handleCloseFilters}\n onOpenFilters={handleOpenFilters}\n onUpdateFilters={handleUpdateFilters} />\n {loadingOn\n ? <Loader />\n : (fetchError\n ? <Text error>{fetchError}</Text>\n : (\n data && data.objects.length > 0\n ? (\n <>\n <Container>\n <TableCustom\n tableHeaderList={['Oznaczenie', 'Status', 'Użytkownik', 'Daty']}\n >\n {data.objects.map(advertisement => (\n <AdvertisementListRow\n advertisement={advertisement}\n key={advertisement.id}\n onFilterAdvertisementByUserEmail={handleFilterAdvertisementsByUserEmail} />\n ))}\n </TableCustom>\n <Pagination\n currentPage={pageNumber}\n hasNext={data.hasNext}\n hasPrev={data.hasPrev}\n handleChangePage={handleChangePage} />\n </Container>\n </>\n )\n : <Text error>Nie znaleziono ogÅ‚oszeÅ„ speÅ‚niajÄ…cych kryteria wyszukiwania.</Text>\n )\n )\n }\n </>\n )\n};\n","import React, { useEffect,useState } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport { getSerializedErrorsFromServer } from '../../../serializers';\nimport {\n CancelSaveButtonsRow,\n DialogCustom,\n FetchErrorWithOkayButton,\n FieldWithLabel,\n InfoTextWithIcon,\n Text,\n TextFieldCustom\n} from '../../common';\n\n\nexport const EditProjectForm = ({project, onClose, onSave}) => {\n const isProject = project.type === 'project';\n\n const [name, setName] = useState(project.name);\n const [savingOn, setSavingOn] = useState(false);\n const [errors, setErrors] = useState({});\n const [fetchSaveError, setFetchSaveError] = useState(null);\n\n function save() {\n if (!savingOn) { return }\n\n let xhrFetch = null;\n\n function callbackSuccess(data) {\n xhrFetch = null;\n onSave(project.id, data[isProject ? 'project' : 'enrollment']);\n }\n\n function callbackError(data) {\n xhrFetch = null;\n setFetchSaveError(data.message);\n setSavingOn(false);\n }\n\n function callbackIncorrectStatus(status) {\n xhrFetch = null;\n setFetchSaveError(status === 403\n ? `Nie masz uprawnieÅ„ do edycji tego ${isProject ? 'projektu' : 'naboru'}.`\n : `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n );\n setSavingOn(false);\n }\n\n function callbackShowSaveErrors(errors) {\n xhrFetch = null;\n setErrors(getSerializedErrorsFromServer(errors, {mapToCamelCaseName: true}));\n setSavingOn(false);\n }\n\n xhrFetch = fetchApi(\n `/api/admin/${isProject ? 'project' : 'enrollment'}/${project.id}`,\n 'PUT', {}, {name}, callbackSuccess, callbackError,\n callbackIncorrectStatus, callbackShowSaveErrors\n );\n return () => {\n if (xhrFetch !== null) {xhrFetch.abort()}\n }\n }\n useEffect(save, [savingOn])\n\n function handleSave() {\n setErrors({});\n setSavingOn(true);\n }\n\n const isNameInvalid = (errors.name || []).length > 0;\n return (\n <DialogCustom\n ariaLabelledby=\"addDialogLabel\"\n className=\"dialog\"\n onClose={onClose}\n >\n <h2 id=\"addDialogLabel\" className=\"text--main-header\">Edytuj {isProject ? 'projekt' : 'nabór'}</h2>\n <Text className=\"text--project-info\">Numer</Text> <Text accentHeader>{project.fullNumber}</Text>\n <FieldWithLabel\n label=\"TytuÅ‚\"\n tag=\"label\"\n labelFor=\"name_id\"\n >\n <TextFieldCustom\n aria-describedby={isNameInvalid ? 'name_error' : null}\n aria-label={`TytuÅ‚, maksymalna liczba znaków: 200. Wpisano ${name.length} znaków.`}\n aria-required={true}\n aria-valuemax={200}\n characterCount\n clearFieldContext=\"tytuÅ‚\"\n disabled={savingOn}\n fullwidth\n id=\"name_id\"\n invalid={isNameInvalid}\n maxLength={200}\n required={isProject}\n value={name}\n onChange={ev => setName(ev.target.value)}\n onClear={ev => setName('')} />\n {isNameInvalid && <ul id=\"name_error\">{errors.name.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n </FieldWithLabel>\n {project.attachedAdvertisementsAmount > 0 && (\n <InfoTextWithIcon message={`TytuÅ‚ zostanie zaktualizowany we wszystkich ogÅ‚oszeniach, z którymi powiÄ…zany jest ten ${isProject ? 'projekt' : 'nabór'}.`} />\n )}\n <CancelSaveButtonsRow disabled={savingOn} onCancel={onClose} onSave={handleSave} />\n {fetchSaveError !== null && (\n <FetchErrorWithOkayButton\n message={fetchSaveError}\n onClickOkay={() => setFetchSaveError(null)} />\n )}\n </DialogCustom>\n )\n}\n","import React, { useContext } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { DataTableCell, DataTableRow } from '@rmwc/data-table';\nimport { Icon } from '@rmwc/icon';\n\nimport { UserContext } from '../../../context/user-context';\nimport { URLS } from '../../../urls/frontend';\nimport { ButtonStyled, MoreOptionsButton, Text } from '../../common';\n\n\nconst ADVERTISEMENTS_GET_COMMON_URL_PARAMS =\n '&sort=announcementNumber_desc&statusOgl=all&strona=1&typAdresu=all' +\n '&typNumeruIdent=all';\n\n\nexport const ProjectListRow = ({project, onFilterProjectsByUserEmail,\n onSelectProjectForEditing}) => {\n let history = useHistory();\n const isProject = project.type === 'project';\n const { createdBy: user } = project;\n\n const handleFilterProjectsByUserEmail = () => {\n onFilterProjectsByUserEmail(user.email);\n };\n\n const handleGoToManageUserPage = () => {\n history.push(URLS.usersDetails.getUrl(user.id));\n };\n\n const handleFilterAdvertisementsByUserEmail = () => {\n history.push(`${URLS.managementAdvertisements.path}?email=${user.email}${ADVERTISEMENTS_GET_COMMON_URL_PARAMS}`);\n };\n\n const handleFilterAdvertisementsByFullNumber = () => {\n history.push(`${URLS.managementAdvertisements.path}?numerProj=${project.fullNumber}${ADVERTISEMENTS_GET_COMMON_URL_PARAMS}`);\n };\n\n const attachedAdvertisementsAmount = project.attachedAdvertisementsAmount || 0;\n\n const { permissions } = useContext(UserContext);\n\n return (\n <DataTableRow>\n <DataTableCell>\n <div className=\"table--administration__type-col\">\n <Icon aria-hidden=\"true\" icon={isProject ? 'label' : 'label_outline'} />\n <Text>{isProject ? 'Projekt' : 'Nabór'}</Text>\n </div>\n </DataTableCell>\n <DataTableCell>\n <div className=\"table--administration__action-col\">\n <div className=\"table--administration__meta\">\n <Text>{user.forename} {user.surname}</Text>\n <Text use=\"caption\" className=\"table--administration__user-info\">{user.email}</Text>\n </div>\n <MoreOptionsButton menuAriaLabel=\"Otwórz menu użytkownika: zarzÄ…dzaj użytkownikiem, filtruj projekty i nabory dla tego użytkownika, filtruj ogÅ‚oszenia dla tego użytkownika.\">\n <Text use=\"caption\" className=\"table--administration__user-id\">ID {user.identifier}</Text>\n <ul className=\"table--administration__user-menu-list\">\n {permissions.fullUsersAndPermissions &&\n <li>\n <ButtonStyled noMargin onClick={handleGoToManageUserPage}>\n ZarzÄ…dzaj użytkownikiem\n </ButtonStyled>\n </li>\n }\n <li><ButtonStyled noMargin onClick={handleFilterProjectsByUserEmail}>Filtruj projekty i nabory</ButtonStyled></li>\n {permissions.advertisements &&\n <li>\n <ButtonStyled noMargin onClick={handleFilterAdvertisementsByUserEmail}>\n Filtruj ogÅ‚oszenia\n </ButtonStyled>\n </li>\n }\n </ul>\n </MoreOptionsButton>\n </div>\n </DataTableCell>\n <DataTableCell>\n <div className=\"table--administration__action-col\">\n <div className=\"table--administration__meta\">\n <Text>{project.fullNumber}</Text>\n <Text use=\"caption\" className=\"table--administration__user-info\">{project.name}</Text>\n </div>\n {(permissions.advertisements || project.canEdit) && (\n <MoreOptionsButton menuAriaLabel=\"Otwórz menu: powiÄ…zane ogÅ‚oszenia.\">\n <ul className=\"table--administration__user-menu-list\">\n {permissions.advertisements &&\n <li>\n <ButtonStyled\n disabled={!attachedAdvertisementsAmount}\n noMargin\n onClick={handleFilterAdvertisementsByFullNumber}\n >\n PowiÄ…zane ogÅ‚oszenia\n <span\n className=\"btn--counter btn--counter-primary\"\n title=\"PowiÄ…zane ogÅ‚oszenia\">{attachedAdvertisementsAmount}</span>\n </ButtonStyled>\n </li>\n }\n {project.canEdit && (\n <li>\n <ButtonStyled\n noMargin\n onClick={ev => onSelectProjectForEditing(project)}\n >\n Edytuj {isProject ? 'projekt' : 'nabór'}\n </ButtonStyled>\n </li>\n )}\n </ul>\n </MoreOptionsButton>\n )}\n </div>\n </DataTableCell>\n </DataTableRow>\n )\n};\n","import React, { useState } from 'react';\n\nimport { PROJECTS_MANAGEMENTS_CHOICES } from '../../../const';\nimport { serializePerspectiveForSelect } from '../../../helpers';\nimport { useOneTimeFetchApi } from '../../../hooks';\nimport { API_URLS } from '../../../urls/api';\nimport {\n ButtonStyled,\n FieldWithLabel,\n GridCustom,\n Loader,\n Select,\n Text,\n TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { ProjectNumberSelectsWithPerspectives } from '../common';\nimport { UserDataFilters } from './UserDataFilters';\n\n\nexport const ProjectsFilters = (props) => {\n const [filters, setFilters] = useState(props.filters);\n const {data, loadingOn, fetchError} = useOneTimeFetchApi({\n url: API_URLS.perspectives.path,\n fetchData: {mode: 'projects_enrollments'},\n serializeFetchDataFunction: serializePerspectiveForSelect,\n });\n\n function handleChangeFilter(name, value) {\n setFilters({...filters, [name]: value});\n }\n\n function handleApplyFilters() {\n props.onUpdateFilters(filters);\n }\n\n function handleChangeProjectNumberSelect(data) {\n setFilters({...filters, ...data});\n }\n\n return loadingOn ? <Loader /> : (fetchError\n ? (\n <>\n <Text error>{fetchError}</Text>\n <ButtonStyled cancel onClick={props.onCloseFilters}>OK</ButtonStyled>\n </>\n )\n : (\n <>\n <section className=\"filters-dialog__filters-section\">\n <Text>Informacje o użytkowniku</Text>\n <UserDataFilters\n userEmail={filters.userEmail}\n userForename={filters.userForename}\n userSurname={filters.userSurname}\n onChangeFilter={handleChangeFilter} />\n <Text>Informacje o projekcie lub naborze</Text>\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"Kontekst\"\n tag=\"label\"\n selectRef={React.createRef()} tabIndex=\"-1\">\n <Select\n aria-label=\"Kontekst\"\n className=\"select-custom\"\n screenReaderStatus={() => {return ''}}\n options={PROJECTS_MANAGEMENTS_CHOICES.map(s => ({value: s[0], label: s[1]}))}\n styles={customSelectStyles}\n value={{value: filters.type.value || PROJECTS_MANAGEMENTS_CHOICES[0][0], label: filters.type.label || PROJECTS_MANAGEMENTS_CHOICES[0][1]}}\n onChange={(selectedOption) => handleChangeFilter('type', selectedOption)} />\n </FieldWithLabel>\n <FieldWithLabel\n label=\"Numer\"\n tag=\"label\"\n labelFor=\"filters_fullNumber_id\"\n >\n <TextFieldCustom\n aria-label=\"Numer\"\n className=\"filters__input\"\n clearFieldContext=\"numer\"\n id=\"filters_fullNumber_id\"\n value={filters.fullNumber}\n onChange={ev => handleChangeFilter('fullNumber', ev.target.value)}\n onClear={ev => handleChangeFilter('fullNumber', '')} />\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"TytuÅ‚\"\n tag=\"label\"\n labelFor=\"filters_name_id\"\n >\n <TextFieldCustom\n aria-label=\"TytuÅ‚\"\n className=\"filters__input\"\n clearFieldContext=\"tytuÅ‚\"\n id=\"filters_name_id\"\n value={filters.name}\n onChange={ev => handleChangeFilter('name', ev.target.value)}\n onClear={ev => handleChangeFilter('name', '')} />\n </FieldWithLabel>\n </GridCustom>\n <ProjectNumberSelectsWithPerspectives\n activity={filters.activity}\n activityErrors={[]}\n disabled={false}\n institution={filters.institution}\n institutionErrors={[]}\n isClearable={true}\n mode=\"projects_enrollments\"\n perspective={filters.perspective}\n perspectiveErrors={[]}\n perspectives={data.perspectives}\n perspectivesAsSelect={true}\n priority={filters.priority}\n priorityErrors={[]}\n programme={filters.programme}\n programmeErrors={[]}\n region={filters.region}\n regionErrors={[]}\n withInstitutionNumber={false}\n onChangeActivity={handleChangeProjectNumberSelect}\n onChangeInstitution={handleChangeProjectNumberSelect}\n onChangePerspective={handleChangeProjectNumberSelect}\n onChangePriority={handleChangeProjectNumberSelect}\n onChangeProgramme={handleChangeProjectNumberSelect}\n onChangeRegion={handleChangeProjectNumberSelect} />\n </section>\n <GridCustom flexEnd>\n <ButtonStyled cancel onClick={props.onCloseFilters}>Anuluj</ButtonStyled>\n <ButtonStyled primary onClick={handleApplyFilters}>Zastosuj kryteria</ButtonStyled>\n </GridCustom>\n </>\n )\n )\n};\n","import React, { useContext, useEffect, useState } from 'react';\n\nimport { PROJECTS_MANAGEMENTS_CHOICES } from '../../../const';\nimport { UserContext } from '../../../context/user-context';\nimport { usePaginatedFetchApi } from '../../../hooks';\nimport {\n getProjectsManagementsFiltersCount,\n PROJECTS_MANAGEMENTS_CLEANED_FILTERS\n} from '../../../filters';\nimport { setInitialSorterByUrlParam } from '../../../sorters';\nimport {\n Breadcrumps,\n Container,\n Loader,\n NotPermittedPage,\n PaginatedListHeader,\n Pagination,\n SortersFiltersRow,\n TableCustom,\n Text\n} from '../../common';\nimport { EditProjectForm } from './EditProjectForm';\nimport { ProjectListRow } from './ProjectListRow';\nimport { ProjectsFilters } from './ProjectsFilters';\n\n\nconst SORTERS = {\n type: ['type', 'Po kontekÅ›cie', 0],\n userEmail: ['userEmail', 'Po adresie e-mail użytkownika', 1],\n fullNumber: ['fullNumber', 'Po numerze', 2],\n};\nconst SORTING_VALUES = Object.values(SORTERS).sort((s1, s2) => s1[2] - s2[2]);\nconst DEFAULT_SORTER = 'type';\nconst OBJECTS_ATTR_NAME = 'projectsEnrollments';\nconst PAGINATED_BY = 20;\nconst BASE_API_URL = '/api/admin/project_enrollment';\nconst SERIALIZATION_URL_LIST = [\n ['userEmail', 'email'],\n ['userForename', 'imie'],\n ['userSurname', 'nazwisko'],\n ['type', 'typ'],\n ['fullNumber', 'numer'],\n ['name', 'nazwa'],\n ['perspective', 'perspektywa'],\n ['programme', 'programOperacyjny'],\n ['priority', 'osPriorytetowa'],\n ['activity', 'dzialanie'],\n ['institution', 'instytucja'],\n ['region', 'region'],\n ['page', 'strona'],\n];\nconst SERIALIZATION_URL_DICT_TO_POLISH = {};\nfor (let [eng, pol] of SERIALIZATION_URL_LIST) {\n SERIALIZATION_URL_DICT_TO_POLISH[eng] = pol;\n}\n\n\nfunction setInitialPageNumber(urlParams) {\n let pageNumber = parseInt(urlParams.get('strona'));\n if (!(pageNumber > 0)) {\n pageNumber = 1;\n }\n return pageNumber\n}\n\nfunction setInitialFilters(urlParams) {\n let filters = {};\n for (let [name, value] of Object.entries(PROJECTS_MANAGEMENTS_CLEANED_FILTERS)) {\n let searchParamValue = urlParams.get(\n SERIALIZATION_URL_DICT_TO_POLISH[name]);\n if (name === 'type') {\n let filterSet = false;\n for (let type_ of PROJECTS_MANAGEMENTS_CHOICES) {\n if (searchParamValue && searchParamValue.toString() === type_[0]) {\n filters[name] = {value: type_[0], label: type_[1]};\n filterSet = true;\n break;\n }\n }\n if (!filterSet) {\n filters[name] = value;\n }\n } else if ([\n 'perspective', 'programme', 'priority', 'activity', 'institution',\n 'region'\n ].includes(name)) {\n searchParamValue = parseInt(searchParamValue);\n // if it's possible to parse, set it, else set default value\n filters[name] = searchParamValue > 0 ? {value: searchParamValue} : value;\n } else {\n filters[name] = searchParamValue || value;\n }\n }\n return filters\n}\n\nfunction getFiltersFetchData(filters) {\n const data = {};\n for (let [name, value] of Object.entries(filters)) {\n if (['type', ].includes(name)) {\n if (['project', 'enrollment'].includes(value.value)) {\n data[name] = value.value;\n }\n } else if (value !== PROJECTS_MANAGEMENTS_CLEANED_FILTERS[name]) {\n if ([\n 'perspective', 'programme', 'priority', 'activity',\n 'institution', 'region'\n ].includes(name)) {\n data[name] = value.value;\n } else {\n data[name] = value.trim();\n }\n }\n }\n return data\n}\n\n\nexport const Projects = (props) => {\n const params = new URLSearchParams(props.location.search);\n const [pageNumber, setPageNumber] = useState(setInitialPageNumber(params));\n\n const [selectedSort, setSelectedSort] = useState(null);\n const [filters, setFilters] = useState(null);\n const [filtersCounter, setFiltersCounter] = useState(0);\n const [filtersAreOn, setFiltersAreOn] = useState(false);\n\n function setInitialSorterAndFilters() {\n // configure sorter\n setSelectedSort(\n setInitialSorterByUrlParam(params, SORTERS, DEFAULT_SORTER));\n\n // configure filters\n const filters_ = setInitialFilters(params);\n setFilters(filters_);\n setFiltersCounter(getProjectsManagementsFiltersCount(filters_));\n }\n\n useEffect(setInitialSorterAndFilters, []);\n\n const {\n data, loadingOn, fetchError, notPermitted, permissionsCheckingOn,\n updateData\n } = usePaginatedFetchApi(\n pageNumber, selectedSort, filters, getFiltersFetchData,\n PAGINATED_BY, OBJECTS_ATTR_NAME, BASE_API_URL,\n SERIALIZATION_URL_DICT_TO_POLISH, {}, true);\n const [editedProject, setEditedProject] = useState(null);\n\n const { removePermission } = useContext(UserContext);\n useEffect(() => {\n if (notPermitted) {\n removePermission('projectsEnrollments');\n }\n }, [notPermitted]); // eslint-disable-line react-hooks/exhaustive-deps\n\n if (permissionsCheckingOn) {\n return <Loader />\n }\n\n if (notPermitted) {\n return <NotPermittedPage />\n }\n\n function handleChangeSort(selectedSort) {\n setPageNumber(1);\n setSelectedSort(selectedSort);\n }\n\n function handleOpenFilters() {\n setFiltersAreOn(true);\n }\n\n function handleCloseFilters() {\n setFiltersAreOn(false);\n }\n\n function handleUpdateFilters(filters) {\n setPageNumber(1);\n setFilters(filters);\n handleCloseFilters();\n setFiltersCounter(getProjectsManagementsFiltersCount(filters));\n }\n\n function handleFilterProjectsByUserEmail(userEmail) {\n setPageNumber(1);\n const sorter = SORTERS[DEFAULT_SORTER];\n setSelectedSort({value: sorter[0], label: sorter[1]});\n setFilters({...PROJECTS_MANAGEMENTS_CLEANED_FILTERS, userEmail});\n }\n\n function handleChangePage(next=true) {\n setPageNumber(prev => next ? prev + 1 : Math.max(prev -1, 1));\n }\n\n function handleSaveProject(projectId, data) {\n updateData(projectId, {name: data.name});\n setEditedProject(null);\n }\n\n return (\n <>\n <Breadcrumps notZarzadzanieTrescia>\n <li className=\"breadcrumps__current\">Administracja projektami i naborami</li>\n </Breadcrumps>\n <PaginatedListHeader\n title=\"Lista projektów i naborów\"\n total={data ? data.total : 0} />\n <SortersFiltersRow\n // sorters\n selectedSort={selectedSort}\n sortingValues={SORTING_VALUES}\n onChangeSort={handleChangeSort}\n // filters\n filters={filters}\n filtersCounter={filtersCounter}\n filtersAreOn={filtersAreOn}\n FiltersComponent={ProjectsFilters}\n onCloseFilters={handleCloseFilters}\n onOpenFilters={handleOpenFilters}\n onUpdateFilters={handleUpdateFilters} />\n {loadingOn\n ? <Loader />\n : (fetchError\n ? <Text error>{fetchError}</Text>\n : (\n data && data.objects.length > 0\n ? (\n <>\n <Container>\n <TableCustom\n tableHeaderList={['Kontekst', 'Użytkownik', 'Numer']}\n >\n {data.objects.map(project => (\n <ProjectListRow\n key={project.id}\n project={project}\n onFilterProjectsByUserEmail={handleFilterProjectsByUserEmail}\n onSelectProjectForEditing={project => setEditedProject(project)} />\n ))}\n </TableCustom>\n <Pagination\n currentPage={pageNumber}\n hasNext={data.hasNext}\n hasPrev={data.hasPrev}\n handleChangePage={handleChangePage} />\n </Container>\n {editedProject !== null && (\n <EditProjectForm\n project={editedProject}\n onClose={() => setEditedProject(null)}\n onSave={handleSaveProject} />\n )}\n </>\n )\n : <Text error>Nie znaleziono projektów ani naborów speÅ‚niajÄ…cych kryteria wyszukiwania.</Text>\n )\n )\n }\n </>\n )\n};\n","import React, { Component } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\n\nimport { fetchApi } from '../../../fetch';\nimport { serializeObjectList } from '../../../serializers';\nimport {\n sortMiejsceRealizacjiFilter,\n sortProgrammeFilter\n} from '../../../sorters';\nimport { validateSearchFilters } from '../../../validators';\nimport {\n ButtonStyled,\n DateSelect,\n FieldWithLabel,\n GridCustom,\n Select,\n Text,\n TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { FormKodCPV } from './FormKodCPV';\n\n\nconst EMPTY_VALUE = {\n value: 0,\n label: 'Wybierz',\n};\nconst ORDER_ITEM_CATEGORIES = 'order_item_categories';\nconst ANULOWANE_STATUS = 'CANCELLED';\nconst OPUBLIKOWANE_STATUS = 'PUBLISHED';\nconst ZAMKNIETE_STATUS = 'CLOSED';\nconst ROZSTRZYGNIETE_STATUS = 'RESOLVED';\n\n\nconst serializeProgrammeSelectStructure = (data) => {\n let data_ = {};\n for (let programme of Object.values(data)) {\n data_[programme.id] =\n `${programme.code.toUpperCase()} - ${programme.name}`;\n }\n return Object.entries(data_).sort(sortProgrammeFilter) || []\n}\n\n\nclass FiltryWyszukiwarki extends Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n initializingOn: true,\n filters: props.filters,\n errors: {},\n fetchError: '',\n dictionaries: props.dictionaries,\n };\n\n this.xhrFetch = null;\n\n this.handleFetchSuccess = this.handleFetchSuccess.bind(this);\n this.handleFetchError = this.handleFetchError.bind(this);\n this.handleFetchIncorrectStatus = this.handleFetchIncorrectStatus.bind(this);\n this.handleApplyFilters = this.handleApplyFilters.bind(this);\n }\n\n // basic functions\n\n componentDidMount() {\n if (!Object.keys(this.state.dictionaries).length) {\n // get dictionaries from server\n this.xhrFetch = fetchApi('/api/dictionaries/search-filters',\n 'GET',\n {},\n {},\n this.handleFetchSuccess,\n this.handleFetchError,\n this.handleFetchIncorrectStatus,\n );\n } else {\n this.setState({initializingOn: false});\n }\n }\n\n componentWillUnmount() {\n // abort api request if exist\n if (this.xhrFetch !== null) {\n this.xhrFetch.abort();\n }\n }\n\n //handlers\n\n handleFetchSuccess(data) {\n this.xhrFetch = null;\n let dictionaries = {\n przedmiotZamowieniaKategoria: serializeObjectList(data[ORDER_ITEM_CATEGORIES]),\n programOperacyjny: serializeProgrammeSelectStructure(\n data.operation_programme),\n miejsceRealizacji: Object.entries(data.location_id).sort(\n sortMiejsceRealizacjiFilter) || [],\n };\n\n this.setState(\n {\n initializingOn: false,\n dictionaries\n },\n () => this.props.updateDictionaries(dictionaries)\n );\n }\n\n handleFetchError(data) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n initializingOn: false,\n fetchError: `Nie udaÅ‚o siÄ™ pobrać danych do filtrów. ${data.message}`,\n });\n }\n\n handleFetchIncorrectStatus(status) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n initializingOn: false,\n fetchError: `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`,\n });\n }\n\n handleChangeFilter(name, value) {\n this.setState(prevState => {\n let dict = {[name]: value};\n if (name === 'advertiserIdentificationNumber') {\n // allow to insert only letters and digits\n dict['advertiserIdentificationNumber'] = value.replace(/[^a-zA-Z\\d]/, '');\n } else {\n dict[name] = value;\n }\n if (name === 'category') {\n dict['subcategory'] = null;\n }\n // clean error (just in case if exists)\n let errors = Object.assign({}, prevState.errors);\n delete errors[name];\n return {errors, filters: Object.assign({}, prevState.filters, dict)}\n });\n }\n\n handleChangeStatusFilter(value, checked) {\n this.setState(prevState => {\n if (checked) {\n if (!prevState.filters.status.includes(value)) {\n // clean error\n let errors = Object.assign({}, prevState.errors);\n delete errors['status'];\n return {\n errors,\n filters: Object.assign({}, prevState.filters, {status: [...prevState.filters.status, value]}),\n }\n }\n } else {\n if (prevState.filters.status.includes(value)) {\n // clean error\n let errors = Object.assign({}, prevState.errors);\n delete errors['status'];\n return {\n errors,\n filters: Object.assign({}, prevState.filters, {status: prevState.filters.status.filter(s => s !== value)}),\n }\n }\n }\n return {}\n });\n }\n\n handleChangeDateFilter(filterName, dataDict) {\n this.setState(prevState => {\n // clean error\n let errors = Object.assign({}, prevState.errors);\n delete errors[filterName];\n return {\n errors,\n filters: Object.assign({}, prevState.filters,\n {[filterName]: Object.assign({}, prevState.filters[filterName], dataDict)}),\n }\n });\n }\n\n handleApplyFilters() {\n const filters = this.state.filters;\n const [isValid, errors] = validateSearchFilters(filters);\n if (isValid) {\n this.props.updateFilters(filters);\n return\n }\n this.setState({errors});\n }\n\n // rendering\n\n render() {\n if (this.state.initializingOn) {\n return <Text info tabIndex=\"1\">Trwa inicjalizacja danych...</Text>;\n } else if (this.state.fetchError.length) {\n return (\n <>\n <Text error role=\"alert\">{this.state.fetchError}</Text>\n <GridCustom flexEnd>\n <ButtonStyled onClick={this.props.closeFilters} lite>OK</ButtonStyled>\n </GridCustom>\n </>\n );\n } else {\n return (\n <>\n {this.renderInformacjeOogloszeniu()}\n {this.renderPrzedmiotZamowienia()}\n {this.renderDaneOgloszeniodawcy()}\n <GridCustom flexEnd>\n <ButtonStyled onClick={this.props.closeFilters} cancel>Anuluj</ButtonStyled>\n <ButtonStyled id=\"zastosuj_kryteria_wyszukiwania_button_id\" onClick={this.handleApplyFilters} primary>Zastosuj kryteria</ButtonStyled>\n </GridCustom>\n </>\n );\n }\n }\n\n renderInformacjeOogloszeniu() {\n const {\n errors,\n filters,\n } = this.state;\n const statuses = filters.status;\n return (\n <section className=\"filters-dialog__filters-section\">\n <Text>Informacje o ogÅ‚oszeniu</Text>\n <GridCustom fullwidth flexM>\n <FieldWithLabel label=\"TytuÅ‚ ogÅ‚oszenia\" tag=\"label\" labelFor=\"filters_title_id\">\n <TextFieldCustom\n aria-label={`TytuÅ‚ ogÅ‚oszenia, maksymalna liczba znaków: 1000. Wpisano ${filters.title.length} znaków.`}\n aria-valuemax={1000}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"tytuÅ‚ ogÅ‚oszenia\"\n id=\"filters_title_id\"\n maxLength={1000}\n onChange={(ev) => this.handleChangeFilter('title', ev.target.value)}\n onClear={(ev) => this.handleChangeFilter('title', '')}\n value={filters.title} />\n </FieldWithLabel>\n <fieldset>\n <Text tag=\"legend\" className=\"label\">Status ogÅ‚oszenia</Text>\n <Checkbox\n label=\"Aktywne opublikowane\"\n checked={statuses.includes(OPUBLIKOWANE_STATUS)}\n onChange={(event) => this.handleChangeStatusFilter(OPUBLIKOWANE_STATUS, event.target.checked)}\n />\n <Checkbox\n label=\"ZamkniÄ™te\"\n checked={statuses.includes(ZAMKNIETE_STATUS)}\n onChange={(event) => this.handleChangeStatusFilter(ZAMKNIETE_STATUS, event.target.checked)}\n />\n <Checkbox\n label=\"Anulowane\"\n checked={statuses.includes(ANULOWANE_STATUS)}\n onChange={(event) => this.handleChangeStatusFilter(ANULOWANE_STATUS, event.target.checked)}\n />\n <Checkbox\n label=\"RozstrzygniÄ™te\"\n checked={statuses.includes(ROZSTRZYGNIETE_STATUS)}\n onChange={(event) => this.handleChangeStatusFilter(ROZSTRZYGNIETE_STATUS, event.target.checked)}\n />\n {errors.status && errors.status.length > 0 && <Text error role=\"alert\">{errors.status}</Text>}\n </fieldset>\n </GridCustom>\n <GridCustom fullwidth flexM>\n <FieldWithLabel label=\"Data publikacji\" tag=\"label\" inputRef={React.createRef()}>\n <DateSelect\n selectAriaLabel={`Data publikacji ${errors.publicationDateRange && errors.publicationDateRange.length > 0 ? errors.publicationDateRange : ''}`}\n value={filters.publicationDateRange}\n updateDate={(name, value) => this.handleChangeDateFilter('publicationDateRange', name, value)}\n />\n {errors.publicationDateRange && errors.publicationDateRange.length > 0 && <Text error>{errors.publicationDateRange}</Text>}\n </FieldWithLabel>\n <FieldWithLabel label=\"Termin skÅ‚adania ofert\" tag=\"label\">\n <DateSelect\n selectAriaLabel={`Termin skÅ‚adania ofert ${errors.submissionDeadlineRange && errors.submissionDeadlineRange.length > 0 ? errors.submissionDeadlineRange : ''}`}\n value={filters.submissionDeadlineRange}\n updateDate={(name, value) => this.handleChangeDateFilter('submissionDeadlineRange', name, value)}\n />\n {errors.submissionDeadlineRange && errors.submissionDeadlineRange.length > 0 && <Text error role=\"alert\">{errors.submissionDeadlineRange}</Text>}\n </FieldWithLabel>\n </GridCustom>\n <FieldWithLabel\n label=\"Program Operacyjny\"\n tag=\"label\"\n selectRef={React.createRef()}\n >\n <Select\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n className=\"select-custom\"\n isMulti\n options={this.state.dictionaries.programOperacyjny.map(\n ([value, label]) => ({value, label}))\n }\n placeholder='Zacznij wpisywać...'\n value={filters.programme}\n onChange={(selectedOption) => this.handleChangeFilter('programme', selectedOption || [])}\n styles={customSelectStyles}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n />\n </FieldWithLabel>\n </section>\n )\n }\n\n renderDaneOgloszeniodawcy() {\n const filters = this.state.filters;\n const errorNipOgloszeniodawcy = this.state.errors.advertiserIdentificationNumber;\n return (\n <section className=\"filters-dialog__filters-section\">\n <Text>Dane ogÅ‚oszeniodawcy</Text>\n <GridCustom fullwidth flexM>\n <FieldWithLabel label=\"Nazwa ogÅ‚oszeniodawcy\" tag=\"label\" labelFor=\"filters_nazwa_ogloszeniodawcy_id\">\n <TextFieldCustom\n aria-label={`Nazwa ogÅ‚oszeniodawcy, maksymalna liczba znaków: 250. Wpisano ${filters.advertiserName.length} znaków.`}\n aria-valuemax={250}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"nazwa ogÅ‚oszeniodawcy\"\n id=\"filters_nazwa_ogloszeniodawcy_id\"\n maxLength={250}\n onChange={(ev) => this.handleChangeFilter('advertiserName', ev.target.value)}\n onClear={(ev) => this.handleChangeFilter('advertiserName', '')}\n value={filters.advertiserName} />\n </FieldWithLabel>\n <FieldWithLabel label=\"Numer identyfikacyjny ogÅ‚oszeniodawcy\" tag=\"label\" labelFor=\"filters_numer_identyfikacyjny_ogloszeniodawcy_id\">\n <TextFieldCustom\n aria-describedby={(errorNipOgloszeniodawcy || '').length > 0 ? 'filters_numer_identyfikacyjny_ogloszeniodawcy_error' : null}\n aria-label={`Numer identyfikacyjny ogÅ‚oszeniodawcy: 255. Wpisz tylko cyfry. Wpisano ${filters.advertiserIdentificationNumber.length} znaków.`}\n aria-valuemax={255}\n characterCount\n className=\"filters__input\"\n clearFieldContext=\"numer identyfikacyjny ogÅ‚oszeniodawcy\"\n id=\"filters_numer_identyfikacyjny_ogloszeniodawcy_id\"\n invalid={(errorNipOgloszeniodawcy || '').length > 0}\n maxLength={255}\n onChange={(ev) => this.handleChangeFilter('advertiserIdentificationNumber', ev.target.value)}\n onClear={(ev) => this.handleChangeFilter('advertiserIdentificationNumber', '')}\n onKeyUp={(ev) => this.handleChangeFilter('advertiserIdentificationNumber', ev.target.value)}\n value={filters.advertiserIdentificationNumber} />\n {(errorNipOgloszeniodawcy || '').length > 0 && <Text error id=\"filters_numer_identyfikacyjny_ogloszeniodawcy_error\">{errorNipOgloszeniodawcy}</Text>}\n </FieldWithLabel>\n </GridCustom>\n </section>\n )\n }\n\n renderPrzedmiotZamowienia() {\n const {\n miejsceRealizacji,\n przedmiotZamowieniaKategoria,\n } = this.state.dictionaries;\n const {\n category,\n cpvItem,\n fulfillmentPlaces,\n subcategory,\n } = this.state.filters;\n return (\n <section className=\"filters-dialog__filters-section\">\n <Text>Przedmiot zamówienia w ogÅ‚oszeniu</Text>\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"Kategoria przedmiotu zamówienia\"\n tag=\"label\"\n selectRef={React.createRef()}\n >\n <Select\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n className=\"select-custom\"\n options={[EMPTY_VALUE, ].concat(...przedmiotZamowieniaKategoria.map(t => ({value: t.id, label: t.nazwa})))}\n value={category || EMPTY_VALUE}\n onChange={(selectedOption) => {\n this.handleChangeFilter('category', selectedOption.value === 0 ? null : selectedOption);\n }}\n styles={customSelectStyles}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n />\n </FieldWithLabel>\n <FieldWithLabel\n label=\"Podkategoria\"\n aria-label={category !== null ? null : 'Podkategoria, pole nieaktywne. Aby wybrać podkategoriÄ™, musisz wybrać kategoriÄ™ przedmiotu zamówienia.'}\n selectRef={React.createRef()}\n tag=\"label\"\n tabIndex={category !== null ? null : '0'}\n >\n <Select\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n className=\"select-custom\"\n isDisabled={category === null}\n options={category === null ? [EMPTY_VALUE, ] : [EMPTY_VALUE, ].concat(\n ...przedmiotZamowieniaKategoria.filter(k => parseInt(k.id) === parseInt(category.value))[0].podkategorie.map(p => ({value: p.id, label: p.nazwa})))}\n value={subcategory || EMPTY_VALUE}\n onChange={(selectedOption) => this.handleChangeFilter('subcategory', selectedOption.value === 0 ? null : selectedOption)}\n styles={customSelectStyles}\n aria-hidden={category === null}\n aria-label={category !== null && 'Podkategoria'}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n />\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth flexM>\n <FormKodCPV\n isMulti\n initial={cpvItem}\n addKodCPV={selectedOptions => this.handleChangeFilter('cpvItem', selectedOptions || [])} />\n <FieldWithLabel\n label=\"Miejsce realizacji\"\n tag=\"label\"\n selectRef={React.createRef()}\n >\n <Select\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n className=\"select-custom\"\n isMulti\n options={miejsceRealizacji.map(m => ({value: m[0], label: m[1]}))}\n placeholder='Zacznij wpisywać...'\n value={fulfillmentPlaces}\n onChange={(selectedOption) => this.handleChangeFilter('fulfillmentPlaces', selectedOption || [])}\n styles={customSelectStyles}\n noOptionsMessage={() => 'Brak wybranej opcji'}\n />\n </FieldWithLabel>\n </GridCustom>\n </section>\n )\n }\n}\n\nexport { FiltryWyszukiwarki };\n","import React from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\n\nimport { Box, ButtonStyled, FieldWithLabel, Text } from '../../common';\nimport { ZalacznikiSelect } from '../common';\n\n\nconst FormRozstrzygniecieWariant = (props) => {\n const { wariant } = props;\n const checkboxLabel = <>Wybierz ofertÄ™ <span className=\"sr-only\">od {wariant.nazwaOferenta}</span></>;\n \n let offerTitle = `${wariant.cena} PLN`;\n if (wariant.isSelected) {\n offerTitle = <><span className=\"sr-only\">Wybrana oferta: </span> {wariant.cena} PLN</>\n }\n\n return (\n <Box titleOneRow={offerTitle} tag=\"li\" >\n <Text>{wariant.nazwaOferenta}</Text>\n {wariant.opis.length > 0 && (\n <FieldWithLabel label=\"Opis\">\n <Text className=\"long-text\">{wariant.opis}</Text>\n </FieldWithLabel>\n )}\n <FieldWithLabel\n label=\"ZaÅ‚Ä…czniki\"\n tag=\"label\"\n selectRef={wariant.zalaczniki.length > 0 ? React.createRef() : null} >\n <ZalacznikiSelect zalaczniki={wariant.zalaczniki} />\n </FieldWithLabel>\n {wariant.isRefused && (\n <ButtonStyled\n primary\n onClick={ev => props.onOfferRestore(wariant.ofertaId)}\n >Przywróć ofertÄ™{props.hasOfertaManyWarianty && ' i wszystkie jej warianty'}</ButtonStyled>)}\n {!wariant.isRefused && (\n <>\n <ButtonStyled\n remove\n onClick={ev => props.onOfferRefuse(wariant.ofertaId)}\n >Odrzuć ofertÄ™<span className=\"sr-only\"> od {wariant.nazwaOferenta} </span>{props.hasOfertaManyWarianty && ' i wszystkie jej warianty'}</ButtonStyled>\n <Checkbox\n className=\"checkbox--btn checkbox--btn-primary \"\n label={checkboxLabel}\n checked={wariant.isSelected}\n onChange={ev => props.onWariantSelect(\n ev.target.checked, props.zamowienieNode, wariant.id)}\n />\n </>\n )}\n </Box>\n );\n}\n\nexport { FormRozstrzygniecieWariant };\n","import React, { Component } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\nimport { TabBar, Tab } from '@rmwc/tabs';\n\nimport { Box, ButtonStyled, DialogCustom, GridCustom, Text } from '../../common';\nimport { FormRozstrzygniecieWariant } from './FormRozstrzygniecieWariant';\n\n\nconst TAB_INDEXES = {\n notRefused: 0,\n refused: 1,\n};\n\n\nclass FormCzescRozstrzygniecia extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n selectedTab: TAB_INDEXES['notRefused'],\n refusingOfertaId: null,\n restoringOfertaId: null,\n };\n }\n\n // handlers\n\n handleRefuse = (ofertaId) => {\n this.setState({refusingOfertaId: ofertaId});\n }\n\n handleRestore = (ofertaId) => {\n this.setState({restoringOfertaId: ofertaId});\n }\n\n handleCloseDialog = (ofertaIdAttributeName) => {\n this.setState({[ofertaIdAttributeName]: null});\n }\n\n // helpers\n\n hasManyWarianty(ofertaId) {\n return this.props.warianty.filter(w => w.ofertaId === ofertaId).length > 1\n }\n\n sortWarianty = (w1, w2) => {\n return w1.nazwaOferenta.localeCompare(w2.nazwaOferenta, 'pl')\n }\n\n // rendering\n\n render() {\n if (this.props.warianty.length) {\n return (\n <>\n {this.renderHeader()}\n <TabBar\n activeTabIndex={this.state.selectedTab}\n className=\"tab-bar\"\n onActivate={ev => this.setState({selectedTab: ev.detail.index})}\n >\n <Tab>Oferty speÅ‚niajÄ…ce kryteria</Tab>\n <Tab>Oferty odrzucone</Tab>\n </TabBar>\n <Text tag=\"h2\" sectionHeader>Lista wariantów{this.props.hasMultiplyZamowienia && ` do części`}</Text>\n {this.props.hasMultiplyZamowienia && <Text label>{this.props.zamowienie.tytul}</Text>}\n {this.renderNotRefused()}\n {this.renderRefused()}\n </>\n )\n }\n return (\n <>\n {this.renderHeader()}\n <Text tag=\"h2\" sectionHeader>Lista ofert{this.props.hasMultiplyZamowienia && ` do części`}</Text>\n {this.props.hasMultiplyZamowienia && <Text label>{this.props.zamowienie.tytul}</Text>}\n {this.renderNotRefused()}\n </>\n )\n }\n\n renderHeader() {\n const zamowienie = this.props.zamowienie;\n\n return (\n <>\n <div className=\"offer-resolve__name\">\n <span className=\"sr-only\" role=\"alert\">Wybierz ofertÄ™ spoÅ›ród listy ofert speÅ‚niajÄ…cych kryteria. Możesz odrzucić oferty. Możesz nie wybrać żadnej oferty.</span>\n <Text tag=\"h2\" sectionHeader>RozstrzygniÄ™cie części:</Text>\n <Text label>{zamowienie.tytul}</Text>\n </div>\n\n <GridCustom tag=\"ul\">\n {zamowienie.kryteriaOceny.map(ko => (\n <Box key={ko.id} tag=\"li\" titleOneRow={ko.czyKryteriumCenowe ? 'Kryterium cenowe' : 'Kryterium pozacenowe'}>\n {ko.opis}\n </Box>\n ))}\n </GridCustom>\n\n </>\n )\n }\n\n renderNotRefused() {\n if (this.state.selectedTab !== TAB_INDEXES['notRefused']) {return null}\n const zamowienie = this.props.zamowienie;\n const warianty = this.props.warianty.filter(w => !w.isRefused);\n\n return (\n <>\n <Text info>Liczba wyników: {warianty.length}</Text>\n <GridCustom tag=\"ul\">\n {warianty.sort(this.sortWarianty).map(w => (\n <FormRozstrzygniecieWariant\n hasOfertaManyWarianty={this.hasManyWarianty(w.ofertaId)}\n key={w.id}\n wariant={w}\n zamowienieNode={zamowienie.zamowienieNode.id}\n onOfferRefuse={this.handleRefuse}\n onWariantSelect={this.props.onWariantSelect} />\n ))}\n {!warianty.length && <Text error>Nie zÅ‚ożono ofert{this.props.hasMultiplyZamowienia && ` do części: \"${this.props.zamowienie.tytul}\"`}</Text>}\n </GridCustom>\n <GridCustom centerHorizontal>\n <Checkbox\n className=\"checkbox--btn\"\n label=\"Nie wybieram żadnej oferty\"\n checked={this.props.zadnaOfertaWybrana}\n onChange={event => this.props.onNoOfferSelectedChange(event.target.checked, zamowienie.zamowienieNode.id)}\n />\n </GridCustom>\n {this.state.refusingOfertaId !== null && this.renderRefusingDialog()}\n </>\n )\n }\n\n renderRefused() {\n if (this.state.selectedTab !== TAB_INDEXES['refused']) {return null}\n const warianty = this.props.warianty.filter(w => w.isRefused);\n return (\n <>\n <Text info>Liczba wyników: {warianty.length}</Text>\n <GridCustom tag=\"ul\">\n {warianty.sort(this.sortWarianty).map(w => (\n <FormRozstrzygniecieWariant\n hasOfertaManyWarianty={this.hasManyWarianty(w.ofertaId)}\n key={w.id}\n refused\n wariant={w}\n zamowienieNode={this.props.zamowienie.zamowienieNode.id}\n onOfferRestore={this.handleRestore}\n />\n ))}\n </GridCustom>\n {this.state.restoringOfertaId !== null && this.renderRestoringDialog()}\n </>\n )\n }\n\n renderRefusingDialog() {\n return this.renderDialog(\n 'refusingOfertaId',\n 'odrzucić',\n this.props.onOfferRefuse,\n 'Oferta zostanie odrzucona z chwilÄ… zapisania rozstrzygniÄ™cia.'\n )\n }\n\n renderRestoringDialog() {\n return this.renderDialog(\n 'restoringOfertaId',\n 'przywrócić',\n this.props.onOfferRestore,\n 'Oferta zostanie przywrócona z chwilÄ… zapisania rozstrzygniÄ™cia.'\n )\n }\n\n renderDialog(ofertaIdAttributeName, titleAdverb, callback, additionalInfo) {\n let title = `Czy na pewno chcesz ${titleAdverb} tÄ™ ofertÄ™`;\n if (this.hasManyWarianty(this.state[ofertaIdAttributeName])) {\n title += ' wraz ze wszystkimi jej wariantami?';\n } else {\n title += '?';\n }\n return (\n <DialogCustom\n dialogTitle={title}\n onClose={() => this.handleCloseDialog(ofertaIdAttributeName)}\n >\n <>\n <Text>{additionalInfo}</Text>\n <GridCustom centerVertical flexEnd>\n <ButtonStyled cancel onClick={() => this.handleCloseDialog(ofertaIdAttributeName)}>Nie</ButtonStyled>\n <ButtonStyled\n save\n onClick={() => {\n const ofertaId = this.state[ofertaIdAttributeName];\n this.setState(\n {[ofertaIdAttributeName]: null},\n () => callback(this.props.zamowienie.zamowienieNode.id, ofertaId)\n );\n }}\n >Tak</ButtonStyled>\n </GridCustom>\n </>\n </DialogCustom>\n )\n }\n}\n\n\nexport { FormCzescRozstrzygniecia };\n","import React, { Component } from 'react';\n\nimport { dateToString } from '../../../helpers';\nimport {\n ButtonStyled,\n DateCalendar,\n FieldWithLabel,\n GridCustom,\n Select,\n TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\n\n\n// TODO: get from backend\nconst OGLOSZENIE_STATUS_CHOICES = [\n ['all', 'Wszystkie'],\n ['published', 'Opublikowane'],\n ['closed', 'ZamkniÄ™te'],\n ['cancelled', 'Anulowane'],\n ['resolved', 'RozstrzygniÄ™te'],\n];\nconst OFERTA_STATUS_CHOICES = [\n ['all', 'Wszystkie'],\n ['draft', 'Robocza'],\n ['submitted', 'ZÅ‚ożona'],\n];\n\n\nclass FiltryOfert extends Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n filters: props.filters,\n };\n }\n\n //handlers\n\n handleChangeFilter(name, value) {\n this.setState(prevState => {\n return {filters: Object.assign({}, prevState.filters, {[name]: value})}\n });\n }\n\n handleApplyFilters = () => {\n this.props.updateFilters(this.state.filters);\n }\n\n // rendering\n\n render() {\n const filters = this.state.filters;\n const submissionDeadlineInputRef = React.createRef();\n const announcementPublicationDateInputRef = React.createRef();\n return (\n <>\n <section className=\"filters-dialog__filters-section\">\n <GridCustom fullwidth flexM>\n <FieldWithLabel label=\"TytuÅ‚ ogÅ‚oszenia\" tag=\"label\" labelFor=\"filters_title_id\">\n <TextFieldCustom\n clearFieldContext=\"tytuÅ‚ ogÅ‚oszenia\"\n value={filters.title}\n onChange={(ev) => this.handleChangeFilter('title', ev.target.value)}\n className=\"filters__input\"\n onClear={(ev) => this.handleChangeFilter('title', '')}\n id=\"filters_title_id\" />\n </FieldWithLabel>\n <FieldWithLabel label=\"Numer ogÅ‚oszenia\" tag=\"label\" labelFor=\"filters_number_id\">\n <TextFieldCustom\n clearFieldContext=\"numer ogÅ‚oszenia\"\n value={filters.announcementNumber}\n onChange={(ev) => this.handleChangeFilter('announcementNumber', ev.target.value)}\n className=\"filters__input\"\n onClear={(ev) => this.handleChangeFilter('announcementNumber', '')}\n id=\"filters_number_id\" />\n </FieldWithLabel>\n </GridCustom>\n <GridCustom flexM>\n <FieldWithLabel label=\"Termin skÅ‚adania ofert\" tag=\"label\" inputRef={submissionDeadlineInputRef}>\n <DateCalendar\n dateName=\"Termin skÅ‚adania ofert\"\n parentRef={submissionDeadlineInputRef}\n value={Date.parse(filters.submissionDeadline)}\n onChange={date => this.handleChangeFilter('submissionDeadline', dateToString(date))} />\n </FieldWithLabel>\n <FieldWithLabel label=\"Data opublikowania ogÅ‚oszenia\" tag=\"label\" inputRef={announcementPublicationDateInputRef}>\n <DateCalendar\n dateName=\"Data opublikowania ogÅ‚oszenia\"\n parentRef={announcementPublicationDateInputRef}\n value={Date.parse(filters.announcementPublicationDate)}\n onChange={date => this.handleChangeFilter('announcementPublicationDate', dateToString(date))} />\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth flexM>\n <FieldWithLabel\n label=\"Status ogÅ‚oszenia\"\n tag=\"label\"\n selectRef={React.createRef()}>\n <Select\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n className=\"select-custom\"\n options={OGLOSZENIE_STATUS_CHOICES.map(s => ({value: s[0], label: s[1]}))}\n value={{value: filters.announcementStatus.value || OGLOSZENIE_STATUS_CHOICES[0][0], label: filters.announcementStatus.label || OGLOSZENIE_STATUS_CHOICES[0][1]}}\n onChange={selectedOption => this.handleChangeFilter('announcementStatus', selectedOption)}\n styles={customSelectStyles}\n />\n </FieldWithLabel>\n <FieldWithLabel\n label=\"Status oferty\"\n tag=\"label\"\n selectRef={React.createRef()}>\n <Select\n screenReaderStatus={() => { return 'Wybierz opcjÄ™ z listy rozwijanej' }}\n className=\"select-custom\"\n options={OFERTA_STATUS_CHOICES.map(s => ({value: s[0], label: s[1]}))}\n value={{value: filters.offerStatus.value || OFERTA_STATUS_CHOICES[0][0], label: filters.offerStatus.label || OFERTA_STATUS_CHOICES[0][1]}}\n onChange={selectedOption => this.handleChangeFilter('offerStatus', selectedOption)}\n styles={customSelectStyles}\n />\n </FieldWithLabel>\n </GridCustom>\n </section>\n <GridCustom flexEnd>\n <ButtonStyled onClick={this.props.closeFilters} cancel>Anuluj</ButtonStyled>\n <ButtonStyled onClick={this.handleApplyFilters} primary>Zastosuj kryteria</ButtonStyled>\n </GridCustom>\n </>\n )\n }\n}\n\n\nexport { FiltryOfert, OFERTA_STATUS_CHOICES, OGLOSZENIE_STATUS_CHOICES };\n","import React from 'react';\nimport '@material/form-field/dist/mdc.form-field.css';\n\nimport {\n Box, ButtonStyled, FieldWithLabel, GridCustom, NumberTextField, Text,\n TextFieldCustom\n} from '../../common';\n\n\nconst FormWariant = (props) => {\n const { errors, formLocked, onlyCena, priceAutofocus, wariant } = props;\n\n const renderCena = () => {\n return (\n <>\n <NumberTextField\n attrName=\"cena\"\n autoFocus={priceAutofocus}\n errors={errors.cena}\n formLocked={formLocked}\n fullwidth\n label=\"Cena\"\n parentTemporaryId={wariant.temporaryId}\n value={wariant.cena}\n onChange={value => props.onChangeWariantAttribute('cena', value)} />\n\n { errors.cena && <span role=\"alert\" className=\"sr-only\">Formularz zawiera bÅ‚Ä™dy!</span>}\n </>\n )\n }\n\n if (onlyCena) {\n return renderCena()\n }\n\n const wariantOpisId = `wariant_${wariant.temporaryId}_opis_id`;\n const isOpisInvalid = (errors.opis || []).length > 0;\n return (\n <Box flexiblewidth tag=\"li\">\n {renderCena()}\n <FieldWithLabel label=\"Opis\" tag=\"label\" labelFor={wariantOpisId}>\n <TextFieldCustom\n aria-describedby={isOpisInvalid ? 'wariant_error' : null}\n aria-label={`Opis, maksymalna liczba znaków: 120. Wpisano ${wariant.opis.length} znaków.`}\n aria-valuemax={120}\n characterCount\n clearFieldContext=\"opis\"\n disabled={formLocked}\n fullwidth\n id={wariantOpisId}\n invalid={isOpisInvalid}\n maxLength={120}\n value={wariant.opis}\n onChange={ev => props.onChangeWariantAttribute('opis', ev.target.value)}\n onClear={ev => props.onChangeWariantAttribute('opis', '')}\n textarea />\n {isOpisInvalid && (\n <>\n <ul id=\"wariant_error\">{errors.opis.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>\n <span role=\"alert\" className=\"sr-only\">Formularz zawiera bÅ‚Ä™dy!</span>\n </>\n )}\n </FieldWithLabel>\n <GridCustom flexEnd>\n <ButtonStyled\n disabled={formLocked}\n remove\n onClick={props.onRemoveWariant}>UsuÅ„<span className=\"sr-only\"> wariant</span></ButtonStyled>\n </GridCustom>\n </Box>\n )\n}\n\n\nexport { FormWariant };\n","import React, { Component } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\n\nimport {\n ButtonStyled,\n Container,\n GridCustom,\n Text,\n} from '../../common';\nimport { FormDanePodmiotuFields, Zalaczniki } from '../common';\nimport { FormWariant } from './FormWariant';\n\nconst MAX_ATTACHMENTS_NUMBER = 20;\nconst MAX_WARIANTY_NUMBER = 20;\n\n\nclass FormOfertaFields extends Component {\n\n // helpers\n\n getWariantLasttemporaryId() {\n let lastTemporaryId = 0;\n for (let o of Object.values(this.props.oferty)) {\n for (let w of o.warianty) {\n if (w.temporaryId > lastTemporaryId) {\n lastTemporaryId = w.temporaryId;\n }\n }\n }\n return lastTemporaryId\n }\n\n getEmptyOferta() {\n return {\n czyWariantowe: false,\n warianty: [this.getEmptyWariant(), ],\n }\n }\n\n getEmptyWariant() {\n return {\n id: null,\n temporaryId: this.getWariantLasttemporaryId(),\n cena: '',\n opis: '',\n }\n }\n\n // rendering\n\n render() {\n return (\n <>\n {this.renderDanePodmiotu()}\n {this.renderOferty()}\n {this.renderZalaczniki()}\n </>\n )\n }\n\n renderDanePodmiotu() {\n if (!this.props.withDanePodmiotuForm) { return null }\n return (\n <Container className=\"details-preview separate-container\">\n <GridCustom flexEnd fullwidth>\n <Text tag=\"h2\" mainHeader>Dane podmiotu</Text>\n </GridCustom>\n <FormDanePodmiotuFields\n data={this.props.danePodmiotu}\n errors={this.props.errors.danePodmiotu || {}}\n formLocked={this.props.formLocked}\n changeAttribute={this.props.changeAttribute}\n changeMiejscowosc={this.props.changeMiejscowosc}\n changeNumerIdentyfikacyjny={this.props.changeNumerIdentyfikacyjny}\n changeRodzajAdresu={this.props.changeRodzajAdresu}\n />\n </Container>\n )\n }\n\n renderOferty() {\n const zamowienia = this.props.zamowienia;\n const ofertyErrors = (this.props.errors.oferty || {}).errors || [];\n const isOfertyInvalid = ofertyErrors.length > 0;\n\n return (\n <Container className=\"separate-container\">\n <GridCustom flexEnd fullwidth>\n <Text tag=\"h2\" mainHeader>Dane oferty</Text>\n </GridCustom>\n {isOfertyInvalid && <ul>{ofertyErrors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n {zamowienia.length > 1 ? (\n zamowienia.map(z => this.renderMultiplyOferta(z))\n ) : this.renderSingleOferta(zamowienia[0])}\n </Container>\n )\n }\n\n renderMultiplyOferta(zamowienie) {\n const zamowienieNodeId = zamowienie.zamowienieNode.id;\n const oferta = this.props.oferty.filter(\n o => o.zamowienieNode === zamowienieNodeId)[0] || null;\n const isChecked = oferta !== null;\n const formLocked = this.props.formLocked;\n const czyWariantoweErrors = oferta === null ? {} : ((this.props.errors.oferty || {})[oferta.temporaryId] || {}).czyWariantowe || [];\n const isCzyWariantoweInvalid = oferta === null ? true : czyWariantoweErrors.length > 0;\n return (\n <Container key={zamowienieNodeId} className={!isChecked ? 'container--no-border' : null}>\n <GridCustom fullwidth flexM className=\"offer__btn-container\">\n <div className=\"offer__part-name\">\n <Checkbox\n aria-label={`Dodaj ofertÄ™ częściowÄ… do czeÅ›ci ${ zamowienie.tytul }`}\n checked={isChecked}\n className=\"checkbox--btn\"\n disabled={formLocked}\n label=\"Dodaj ofertÄ™ częściowÄ… do części\"\n onChange={event => this.props.changeAddOferta(zamowienieNodeId, event.target.checked)}\n />\n <Text label>{zamowienie.tytul}</Text>\n </div>\n {zamowienie.czyWariantowe && isChecked && oferta !== null && (\n <>\n <Checkbox\n aria-describedby={isCzyWariantoweInvalid ? 'czyWariantowe_error' : null}\n checked={oferta.czyWariantowe}\n className=\"checkbox--btn\"\n disabled={formLocked}\n label={'Oferta wariantowa'}\n onChange={event => this.props.changeCzyWariantowa(zamowienieNodeId, event.target.checked)}\n />\n {isCzyWariantoweInvalid && (\n <>\n <ul id=\"czyWariantowe_error\">{czyWariantoweErrors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>\n <span role=\"alert\" className=\"sr-only\">Formularz zawiera bÅ‚Ä™dy!</span>\n </>\n )}\n </>\n )}\n </GridCustom>\n {isChecked && this.renderWarianty(zamowienie, oferta)}\n </Container>\n )\n }\n\n renderSingleOferta(zamowienie) {\n if (!zamowienie) { return null }\n const oferta = this.props.oferty.filter(\n o => o.zamowienieNode === zamowienie.zamowienieNode.id)[0] || null;\n if (!oferta) { return null }\n return (\n <Container>\n <GridCustom fullwidth flexM className=\"offer__btn-container\">\n <div className=\"offer__pz\">\n <Text accentHeader>Dodaj ofertÄ™ do zamówienia</Text>\n <Text label>{zamowienie.tytul}</Text>\n </div>\n {zamowienie.czyWariantowe && (\n <Checkbox\n checked={oferta.czyWariantowe}\n className=\"checkbox--btn\"\n disabled={this.props.formLocked}\n label={'Oferta wariantowa'}\n onChange={event => this.props.changeCzyWariantowa(zamowienie.zamowienieNode.id, event.target.checked)}\n />\n )}\n </GridCustom>\n {this.renderWarianty(zamowienie, oferta)}\n </Container>\n )\n }\n\n renderWarianty(zamowienie, oferta) {\n if (zamowienie.czyWariantowe) {\n const zamowienieNodeId = zamowienie.zamowienieNode.id;\n const formLocked = this.props.formLocked;\n const wariantyErrors = ((this.props.errors.oferty || {})[oferta.temporaryId] || {}).warianty || {};\n const isWariantyInvalid = (wariantyErrors.errors || []).length > 0;\n return (\n <>\n {oferta.czyWariantowe && (\n <>\n <GridCustom fullwidth flexTop>\n <Text tag=\"h2\" sectionHeader>Lista wariantów</Text>\n {oferta.warianty.length < MAX_WARIANTY_NUMBER && (\n <ButtonStyled\n add\n disabled={formLocked}\n onClick={() => this.props.onAddWariant(zamowienieNodeId)} >\n Dodaj wariant oferty\n </ButtonStyled>\n )}\n </GridCustom>\n <Text info className=\"text--counter\">Liczba wyników: {oferta.warianty.length}</Text>\n <Text info>Możesz dodać maksymalnie {MAX_WARIANTY_NUMBER} wariantów.</Text>\n {isWariantyInvalid && (\n <>\n <ul>{wariantyErrors.errors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>\n <span role=\"alert\" className=\"sr-only\">Formularz zawiera bÅ‚Ä™dy!</span>\n </>\n )}\n <GridCustom tag=\"ul\">\n {oferta.warianty.map(w => {\n return (\n <FormWariant\n errors={wariantyErrors[w.temporaryId] || {}}\n formLocked={formLocked}\n key={w.temporaryId}\n priceAutofocus\n wariant={w}\n onChangeWariantAttribute={(attrName, value) => this.props.onChangeWariantAttribute(\n zamowienieNodeId, w.temporaryId, attrName, value\n )}\n onRemoveWariant={() => this.props.onRemoveWariant(zamowienieNodeId, w.temporaryId)}\n />\n )\n })}\n </GridCustom>\n </>\n )}\n {!oferta.czyWariantowe && this.renderSingleWariant(oferta, zamowienieNodeId)}\n </>\n )\n } else {\n return this.renderSingleWariant(oferta, zamowienie.zamowienieNode.id)\n }\n }\n\n renderSingleWariant(oferta, zamowienieId) {\n const wariant = oferta.warianty[0];\n const wariantyErrors = ((this.props.errors.oferty || {})[oferta.temporaryId] || {}).warianty || {};\n return (\n <>\n <FormWariant\n errors={wariantyErrors[wariant.temporaryId] || {}}\n formLocked={this.props.formLocked}\n key={wariant.temporaryId}\n onlyCena={true}\n wariant={wariant}\n onChangeWariantAttribute={(attrName, value) => this.props.onChangeWariantAttribute(\n zamowienieId, wariant.temporaryId, attrName, value\n )}\n onRemoveWariant={() => this.props.onRemoveWariant(zamowienieId, wariant.temporaryId)}\n />\n { wariantyErrors && <span role=\"alert\" className=\"sr-only\">Formularz zawiera bÅ‚Ä™dy!</span> }\n </>\n )\n }\n\n renderZalaczniki() {\n return (\n <Container className=\"details-preview separate-container\">\n <Zalaczniki\n contextForSaving='offer'\n errors={this.props.errors.zalaczniki || {}}\n formLocked={this.props.formLocked}\n isPreview={false}\n maxLength={MAX_ATTACHMENTS_NUMBER}\n zalaczniki={this.props.zalaczniki}\n addZalacznik={this.props.changeAddZalacznik}\n removeZalacznik={this.props.changeRemoveZalacznik}\n saveZalacznikAttributes={this.props.changeSaveZalacznikAttributes}\n >\n <Text info className=\"text--counter\">Liczba wyników: {this.props.zalaczniki.length}</Text>\n <Text info>Możesz zaÅ‚Ä…czyć maksymalnie {MAX_ATTACHMENTS_NUMBER} plików.</Text>\n </Zalaczniki>\n </Container>\n )\n }\n}\n\n\nexport { FormOfertaFields };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { OFERTA_STATUSES, TYP_NUMERU_IDENTYFIKACYJNEGO } from '../../../const';\nimport { fetchApi } from '../../../fetch';\nimport { getLastTemporaryIdFromList, reformatDanePodmiotu } from '../../../helpers';\nimport {\n getSerializedObjectErrorsFormServer,\n getSerializedObject,\n translateErrorMessage\n} from '../../../serializers';\nimport {\n ButtonStyled,\n Container,\n DialogCustom,\n GridCustom,\n Text,\n} from '../../common';\nimport { DanePodmiotu, FormBaseComponent } from '../common';\nimport { FormOfertaFields } from './FormOfertaFields';\n\nconst RODZAJ_ADRESU_CHOICES = [\n {\n value: 'poland',\n label: 'Polska',\n },\n {\n value: 'abroad',\n label: 'Zagranica',\n },\n];\nconst TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES = [\n {\n value: 'nip',\n label: 'NIP',\n },\n {\n value: 'pesel',\n label: 'PESEL',\n },\n];\nconst EMPTY_DANE_PODMIOTU_DATA = {\n nazwa: '',\n rodzajAdresu: RODZAJ_ADRESU_CHOICES[0],\n adres: {\n kraj: 'Polska',\n wojewodztwo: '',\n powiat: '',\n gmina: '',\n miejscowosc: '',\n kodPocztowy: '',\n ulica: '',\n numerDomu: '',\n },\n typNumeruIdentyfikacyjnego: TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES[0],\n numerIdentyfikacyjny: '',\n};\n\n\nclass FormOferta extends FormBaseComponent {\n\n // handlers\n\n handleFetchUserDataSuccess = (data) => {\n this.xhrFetch = null;\n this.setState(\n prevState => {\n let oferty = [];\n const zamowienia = this.props.zamowienia;\n if (zamowienia.length === 1) {\n oferty.push(this.getEmptyOferta(1, zamowienia[0].zamowienieNode.id));\n }\n return {\n initializingOn: false,\n danePodmiotu: reformatDanePodmiotu(\n getSerializedObject(data).uzytkownik.danePodmiotu),\n oferty: oferty,\n zalaczniki: [],\n id: null,\n status: OFERTA_STATUSES.draft,\n }\n }\n );\n }\n\n handleFetchOfferDataSuccess = (data) => {\n this.xhrFetch = null;\n data = getSerializedObject(\n data, {addTemporaryId: true}\n ).pakietOfert;\n this.setState({\n initializingOn: false,\n danePodmiotu: reformatDanePodmiotu(data.danePodmiotu),\n oferty: (data.oferty || []).map(o => {\n o.zamowienieNode = o.zamowienieNode.id;\n return o\n }),\n zalaczniki: data.zalaczniki || [],\n id: data.id,\n status: data.status,\n });\n }\n\n handleCloseCancellingDialog = () => {\n this.setState({cancellingOn: false});\n }\n\n handleCloseRemovingDialog = () => {\n this.setState({removingOn: false});\n }\n\n handleCloseSubmittingDialog = () => {\n this.setState({submittingDialogOn: false});\n }\n\n handleChangeAddOferta = (zamowienieNodeId, isChecked) => {\n this.setState(prevState => {\n if (isChecked) {\n return {oferty: [...prevState.oferty, this.getEmptyOferta(\n Math.max(...[...(prevState.oferty.map(o => o.temporaryId)), 0]) + 1,\n zamowienieNodeId\n )]}\n } else {\n return {oferty: prevState.oferty.filter(\n o => o.zamowienieNode !== zamowienieNodeId)}\n }\n });\n }\n\n handleChangeCzyWariantowa = (zamowienieNodeId, isChecked) => {\n this.setState(prevState => {\n let warianty = [];\n if (!isChecked) {\n warianty.push(this.getEmptyWariant());\n }\n return {oferty: prevState.oferty.map(o => {\n if (o.zamowienieNode === zamowienieNodeId) {\n o.czyWariantowe = isChecked;\n o.warianty = warianty;\n }\n return o\n })}\n });\n }\n\n handleAddWariant = (zamowienieNodeId) => {\n this.setState(prevState => {\n return {oferty: prevState.oferty.map(o => {\n if (o.zamowienieNode === zamowienieNodeId) {\n o.warianty = [...o.warianty, this.getEmptyWariant()];\n }\n return o\n })}\n })\n }\n\n handleChangeWariantAttribute = (zamowienieNodeId, temporaryId, attrName, value) => {\n this.setState(prevState => {\n return prevState.oferty.map(o => {\n if (o.zamowienieNode === zamowienieNodeId) {\n let warianty = [];\n for (let w of o.warianty) {\n if (w.temporaryId === temporaryId) {\n w[attrName] = value;\n }\n warianty.push(w);\n }\n\n o.warianty = warianty;\n }\n return o\n })\n });\n }\n\n handleRemoveWariant = (zamowienieNodeId, temporaryId) => {\n this.setState(prevState => {\n return {oferty: prevState.oferty.map(o => {\n if (o.zamowienieNode === zamowienieNodeId) {\n o.warianty = o.warianty.filter(w => w.temporaryId !== temporaryId);\n }\n return o\n })}\n });\n }\n\n handleAddZalacznik = (data) => {\n data = data || {};\n\n this.setState(prevState => {\n return {zalaczniki: [...prevState.zalaczniki, {\n id: null,\n temporaryId: getLastTemporaryIdFromList(prevState.zalaczniki) + 1,\n nazwa: '',\n plik: {\n id: null,\n uri: '',\n nazwa: '',\n dataUtworzenia: '',\n ktoUtworzyl: {imie: '', nazwisko: ''},\n },\n plikDoWgrania: data.plikDoWgrania || null,\n }]}\n })\n }\n\n handleSaveZalacznikAttributes = (temporaryId, data) => {\n this.setState((prevState) => {\n let zalaczniki = [];\n for (let z of prevState.zalaczniki) {\n if (z.temporaryId === temporaryId) {\n z = Object.assign(z, data);\n }\n zalaczniki.push(z);\n }\n return {zalaczniki}\n });\n }\n\n handleRemoveZalacznik = (temporaryId) => {\n this.setState(prevState => {\n return {zalaczniki: prevState.zalaczniki.filter((z) => z.temporaryId !== temporaryId)}\n });\n }\n\n handleFetchSaveSuccess = (data) => {\n super.handleFetchSaveSuccess(data);\n data = getSerializedObject(data, {addTemporaryId: true}).pakietOfert;\n this.setState(\n {\n savingOn: false,\n isNew: false,\n saveBtnText: 'Zapisano',\n id: data.id,\n status: data.status,\n zalaczniki: data.zalaczniki,\n },\n () => {\n this.saveMsgTimeout = setTimeout(() => {\n this.setState({saveBtnText: this.saveBtnDefaultText})\n }, 5000)\n }\n );\n }\n\n handleShowSaveErrors = (errors) => {\n this.xhrFetchSave = null;\n this.setState(\n prevState => ({\n savingOn: false,\n saveBtnText: this.saveBtnDefaultText,\n errors: getSerializedObjectErrorsFormServer(\n errors,\n {\n ogloszenie: this.props.ogloszenieId,\n oferty: prevState.oferty,\n zalaczniki: prevState.zalaczniki,\n },\n ['oferty', 'warianty', 'zalaczniki']\n ),\n })\n );\n }\n\n handleRemove = () => {\n this.xhrFetch = fetchApi(\n `/api/offerset/announcement/${this.props.ogloszenieId}`,\n 'DELETE',\n {},\n {},\n this.handleFetchRemoveSuccess,\n this.handleFetchRemoveError,\n this.handleFetchRemoveIncorrectStatus\n );\n }\n\n handleFetchRemoveSuccess = (data) => {\n this.xhrFetch = null;\n window.location.reload();\n }\n\n handleFetchRemoveError = (data) => {\n this.xhrFetch = null;\n this.setState({\n removingOn: false,\n fetchRemoveError: `Nie udaÅ‚o siÄ™ usunąć oferty. ${translateErrorMessage(data.message)}`,\n });\n }\n\n handleFetchRemoveIncorrectStatus = (status) => {\n this.xhrFetch = null;\n this.setState({\n removingOn: false,\n fetchRemoveError: `Nie udaÅ‚o siÄ™ usunąć oferty. WystÄ…piÅ‚ bÅ‚Ä…d o kodzie ${status}.`,\n });\n }\n\n handleSubmit = () => {\n this.setState(\n {savingOn: true, submittingDialogOn: false, fetchSaveError: ''},\n () => {\n this.xhrFetchSave = fetchApi(\n this.getSubmitUrl(),\n 'PUT',\n {},\n this.getSerializedDataForSubmitting(),\n this.handleFetchSubmitSuccess,\n this.handleFetchSaveError,\n this.handleFetchSaveIncorrectStatus,\n this.handleShowSaveErrors,\n );\n }\n );\n }\n\n handleFetchSubmitSuccess = (data) => {\n this.xhrFetchSave = null;\n this.props.onSubmitOferta((data.offerset || {}).id || null);\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n isNew: props.isNew,\n cancellingOn: false,\n removingOn: false,\n submittingDialogOn: false,\n danePodmiotu: {},\n oferty: [],\n zalaczniki: [],\n fetchRemoveError: '',\n };\n }\n\n fetchInitialData = () => {\n if (this.state.isNew) {\n this.xhrFetch = fetchApi(\n '/api/users/0',\n 'GET',\n {},\n {},\n this.handleFetchUserDataSuccess,\n this.handleFetchError,\n this.handleFetchIncorrectStatus,\n );\n } else {\n this.xhrFetch = fetchApi(\n `/api/offerset/announcement/${this.props.ogloszenieId}`,\n 'GET',\n {},\n {},\n this.handleFetchOfferDataSuccess,\n this.handleFetchError,\n this.handleFetchIncorrectStatus,\n );\n }\n }\n\n getFetchError(message) {\n message = translateErrorMessage(message);\n if (this.state.isNew) {\n return `Nie udaÅ‚o siÄ™ pobrać danych do formularza oferty. ${message}`\n }\n return `Nie udaÅ‚o siÄ™ pobrać danych oferty. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n if (this.state.isNew) {\n return `Podczas pobierania danych do formularza oferty wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}`\n }\n return `Podczas pobierania danych oferty wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n getWariantLastTemporaryId() {\n let lastTemporaryId = 0;\n for (let o of Object.values(this.state.oferty)) {\n for (let w of o.warianty) {\n if (w.temporaryId > lastTemporaryId) {\n lastTemporaryId = w.temporaryId;\n }\n }\n }\n return lastTemporaryId\n }\n\n getEmptyOferta(temporaryId, zamowienieNodeId) {\n return {\n id: null,\n temporaryId,\n zamowienieNode: zamowienieNodeId,\n czyWariantowe: false,\n warianty: [this.getEmptyWariant(), ],\n }\n }\n\n getEmptyWariant() {\n return {\n id: null,\n temporaryId: this.getWariantLastTemporaryId() + 1,\n cena: null,\n opis: '',\n }\n }\n\n formPreState(props) {\n this.saveBtnDefaultText = 'Zapisz wersjÄ™ roboczÄ… oferty';\n }\n\n getSaveUrl() {\n return this.state.isNew ? '/api/offerset' : `/api/offerset/announcement/${this.props.ogloszenieId}`\n }\n\n getSaveMethod() {\n return this.state.isNew ? 'POST' : 'PUT'\n }\n\n getDataForSaving() {\n const data = {\n oferty: this.state.oferty,\n zalaczniki: this.state.zalaczniki.map(z => {\n return {id: z.id, nazwa: z.nazwa, plik: z.plik.id}\n }),\n }\n if (this.state.isNew) {\n data['ogloszenie'] = this.props.ogloszenieId;\n }\n return getSerializedObject(data, {toServer: true});\n }\n\n getSubmitUrl() {\n return `/api/offerset/announcement/${this.props.ogloszenieId}/submit`\n }\n\n getDataForSubmitting() {\n return {\n ogloszenie: this.props.ogloszenieId,\n oferty: this.state.oferty,\n zalaczniki: this.state.zalaczniki.map(z => {\n return {id: z.id, nazwa: z.nazwa, plik: z.plik.id}\n }),\n }\n }\n\n getSerializedDataForSubmitting() {\n return getSerializedObject(\n this.getDataForSubmitting(), {toServer: true})\n }\n\n // rendering\n\n renderContent() {\n const statusOferty = this.state.status;\n const formLocked = this.state.savingOn;\n const { fetchSaveError, fetchRemoveError, isNew } = this.state;\n const ogloszenieErrors = (this.state.errors || {}).ogloszenie || [];\n const formOfertaErrors = fetchRemoveError.length > 0 || fetchSaveError.length > 0 || ogloszenieErrors.length > 0;\n\n return (\n <>\n <Text tag=\"h1\" mainHeader>{isNew ? 'Utwórz' : 'Edytuj'} ofertÄ™</Text>\n {this.renderDanePodmiotu()}\n <FormOfertaFields\n errors={this.state.errors}\n formLocked={formLocked}\n oferty={this.state.oferty}\n withDanePodmiotuForm={false}\n zalaczniki={this.state.zalaczniki}\n zamowienia={this.props.zamowienia}\n changeAddOferta={this.handleChangeAddOferta}\n changeCzyWariantowa={this.handleChangeCzyWariantowa}\n changeAddZalacznik={this.handleAddZalacznik}\n changeRemoveZalacznik={this.handleRemoveZalacznik}\n changeSaveZalacznikAttributes={this.handleSaveZalacznikAttributes}\n onAddWariant={this.handleAddWariant}\n onChangeWariantAttribute={this.handleChangeWariantAttribute}\n onRemoveWariant={this.handleRemoveWariant}\n />\n <GridCustom flexEnd fullwidth flexM flexTop>\n <GridCustom>\n <ButtonStyled\n cancel\n disabled={formLocked}\n onClick={(e) => {\n this.setState({cancellingOn: true})\n e.currentTarget.blur();\n }}>\n Anuluj {isNew ? 'tworzenie' : 'edycjÄ™'} oferty \n </ButtonStyled>\n {!isNew && (\n <ButtonStyled\n disabled={formLocked}\n remove\n onClick={() => this.setState({removingOn: true, fetchRemoveError: ''})}>\n UsuÅ„ ofertÄ™\n </ButtonStyled>\n )}\n {statusOferty !== null && ['DRAFT', 'WITHDRAWN'].includes(statusOferty.label) && (\n <>\n <ButtonStyled\n disabled={formLocked}\n lite\n onClick={this.handleSave}>\n {this.state.saveBtnText}\n </ButtonStyled>\n {this.state.saveBtnText === 'Zapisano' && <span role=\"alert\" className=\"sr-only\">Zapisano!</span>}\n </>\n )}\n </GridCustom>\n <ButtonStyled\n className=\"btn btn--main\"\n disabled={formLocked || !Object.keys(this.state.danePodmiotu).length}\n save\n onClick={() => this.setState(\n {submittingDialogOn: true, removingOn: false, cancellingOn: false})}>\n Złóż ofertÄ™\n </ButtonStyled>\n </GridCustom>\n {fetchRemoveError.length > 0 && <Text error>{fetchRemoveError}</Text>}\n {fetchSaveError.length > 0 && <Text error>{fetchSaveError}</Text>}\n {ogloszenieErrors.length > 0 && <ul>{ogloszenieErrors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n {formOfertaErrors && <span className=\"sr-only\" role=\"alert\">Formularz zawiera bÅ‚Ä™dy!</span>}\n\n {!formLocked && this.state.cancellingOn && this.renderCancelDialog()}\n {!formLocked && this.state.removingOn && this.renderRemoveDialog()}\n {!formLocked && this.state.submittingDialogOn && this.renderSubmitDialog()}\n </>\n )\n }\n\n renderDanePodmiotu() {\n let content;\n if (!Object.keys(this.state.danePodmiotu).length) {\n content = (\n <div role=\"status\" aria-live=\"polite\">\n <Text error>\n Nie zdefiniowano danych podmiotu dla użytkownika. Aby je ustawić, <Link to=\"/uzytkownicy/moj-profil\" className=\"link-text\">przejdź do swojego profilu</Link>.\n </Text>\n <Text error>\n Oferta nie bÄ™dzie mogÅ‚a zostać zÅ‚ożona. W dalszym ciÄ…gu bÄ™dzie można jÄ… zapisać.\n </Text>\n </div>\n );\n } else {\n content = (\n <>\n <DanePodmiotu danePodmiotu={this.state.danePodmiotu} />\n <Text info>\n Te dane podmiotu zostanÄ… doÅ‚Ä…czone do oferty. Aby je zmienić, <Link to=\"/uzytkownicy/moj-profil\" className=\"link-text\">przejdź do swojego profilu</Link> i edytuj dane podmiotu.\n </Text>\n </>\n );\n }\n return (\n <Container>\n <GridCustom flexEnd fullwidth>\n <Text tag=\"h2\" mainHeader>Dane podmiotu</Text>\n </GridCustom>\n {content}\n </Container>\n )\n }\n\n renderCancelDialog() {\n let confirmButton;\n if (this.state.isNew) {\n confirmButton = <ButtonStyled save tag={Link} onClick={() => window.location.reload()} to={`/ogloszenia/${this.props.ogloszenieId}`}>Tak</ButtonStyled>;\n } else {\n confirmButton = <ButtonStyled save onClick={() => window.location.reload()}>Tak</ButtonStyled>;\n }\n\n return (\n <DialogCustom\n dialogTitle={`Czy na pewno chcesz anulować ${this.state.isNew ? 'tworzenie' : 'edycjÄ™'} oferty? Wszystkie niezapisane dane zostanÄ… utracone.`}\n onClose={this.handleCloseCancellingDialog}\n >\n <GridCustom flexEnd>\n <ButtonStyled onClick={this.handleCloseCancellingDialog} cancel>Nie</ButtonStyled>\n {confirmButton}\n </GridCustom>\n </DialogCustom>\n )\n }\n\n renderBaseDialog(onClose, onConfirm, title) {\n return (\n <DialogCustom\n dialogTitle={title}\n onClose={onClose}\n >\n <GridCustom flexEnd>\n <ButtonStyled cancel onClick={onClose}>Nie</ButtonStyled>\n <ButtonStyled save onClick={onConfirm}>Tak</ButtonStyled>\n </GridCustom>\n </DialogCustom>\n )\n }\n\n renderRemoveDialog() {\n return this.renderBaseDialog(\n this.handleCloseRemovingDialog, this.handleRemove,\n 'Czy na pewno chcesz usunąć tÄ™ ofertÄ™?'\n )\n }\n\n renderSubmitDialog() {\n return this.renderBaseDialog(\n this.handleCloseSubmittingDialog, this.handleSubmit,\n 'Czy na pewno chcesz zÅ‚ożyć tÄ™ ofertÄ™?'\n )\n }\n}\n\n\nclass FormOfertaOgloszeniodawca extends FormOferta {\n\n // handlers\n\n handleChangeRodzajAdresu = (value) => {\n this.setState(prevState => {\n if (value.value === prevState.danePodmiotu.rodzajAdresu.value) {\n return {}\n }\n let dct = {\n numerIdentyfikacyjny: '',\n rodzajAdresu: value,\n };\n let adres = {\n kraj: null,\n wojewodztwo: '',\n powiat: '',\n gmina: '',\n miejscowosc: '',\n };\n if (value.value === 'poland') {\n adres.kraj = 'Polska';\n dct['typNumeruIdentyfikacyjnego'] = TYP_NUMERU_IDENTYFIKACYJNEGO[0];\n } else {\n // set abroad\n dct['typNumeruIdentyfikacyjnego'] = TYP_NUMERU_IDENTYFIKACYJNEGO[2];\n }\n return {danePodmiotu: Object.assign({}, prevState.danePodmiotu, {\n ...dct,\n adres: Object.assign({}, prevState.danePodmiotu.adres, adres),\n })}\n });\n }\n\n handleChangeAttribute = (name, value, isAdresPart) => {\n this.setState(prevState => {\n let dict = {[name]: value};\n if (name === 'typNumeruIdentyfikacyjnego' && prevState.danePodmiotu['typNumeruIdentyfikacyjnego'].value !== value.value) {\n dict['numerIdentyfikacyjny'] = '';\n }\n if (isAdresPart) {\n return {danePodmiotu: Object.assign({}, prevState.danePodmiotu, {\n adres: Object.assign({}, prevState.danePodmiotu.adres, dict),\n })}\n } else {\n return {danePodmiotu: Object.assign({}, prevState.danePodmiotu, dict)}\n }\n });\n }\n\n handleChangeMiejscowosc = (value) => {\n this.setState(prevState => {\n return {danePodmiotu: Object.assign({}, prevState.danePodmiotu, {\n adres: Object.assign({}, prevState.danePodmiotu.adres, value)\n })}\n });\n }\n\n handleChangeNumerIdentyfikacyjny = (value, onlyDigits=false) => {\n if (onlyDigits) {\n value = value.replace(/[^\\d]/, '');\n }\n this.setState(prevState => {\n return {danePodmiotu: Object.assign({}, prevState.danePodmiotu, {numerIdentyfikacyjny: value})}\n });\n }\n\n handleSave = () => {}\n\n handleShowSaveErrors = (errors) => {\n this.xhrFetchSave = null;\n this.setState(\n prevState => ({\n savingOn: false,\n saveBtnText: this.saveBtnDefaultText,\n errors: getSerializedObjectErrorsFormServer(\n errors,\n this.getDataForSubmitting(),\n ['oferty', 'warianty', 'zalaczniki']\n ),\n })\n );\n }\n\n handleFetchSubmitSuccess = (data) => {\n this.props.onSubmitForm(data, this.state.isNew);\n }\n\n // helpers\n\n fetchInitialData = () => {\n if (this.state.isNew) {\n let data = {initializingOn: false};\n if (this.props.zamowienia.length === 1) {\n data['oferty'] = [this.getEmptyOferta(\n 1, this.props.zamowienia[0].zamowienieNode.id), ];\n }\n this.setState(data);\n } else {\n this.xhrFetch = fetchApi(\n `/api/offerset/${this.props.ofertaId}`,\n 'GET',\n {},\n {},\n this.handleFetchOfferDataSuccess,\n this.handleFetchError,\n this.handleFetchIncorrectStatus,\n );\n }\n }\n\n getAdditionalState(props) {\n return Object.assign(\n super.getAdditionalState(props),\n {danePodmiotu: Object.assign({}, EMPTY_DANE_PODMIOTU_DATA)}\n );\n }\n\n formPreState(props) {\n this.saveBtnDefaultText = 'Zapisz ofertÄ™';\n }\n\n getSubmitUrl() {\n if (this.state.isNew) {\n return `/api/offerset/announcement/${this.props.ogloszenieId}/submit`\n }\n return `/api/offerset/${this.props.ofertaId}/submit`\n }\n\n getDataForSubmitting() {\n const danePodmiotu = this.state.danePodmiotu;\n const adres = danePodmiotu.adres;\n return {\n ogloszenie: this.props.ogloszenieId,\n danePodmiotu: {\n nazwa: danePodmiotu.nazwa,\n typNumeruIdentyfikacyjnego: danePodmiotu.typNumeruIdentyfikacyjnego.value,\n numerIdentyfikacyjny: danePodmiotu.numerIdentyfikacyjny,\n adres: {\n kraj: adres.kraj,\n wojewodztwo: adres.wojewodztwo,\n powiat: adres.powiat,\n gmina: adres.gmina,\n miejscowosc: adres.miejscowosc,\n kodPocztowy: adres.kodPocztowy,\n ulica: adres.ulica,\n numerDomu: adres.numerDomu,\n },\n },\n oferty: this.state.oferty,\n zalaczniki: this.state.zalaczniki.map(z => {\n return {id: z.id, temporaryId: z.temporaryId, nazwa: z.nazwa, plik: z.plik.id}\n }),\n }\n }\n\n // rendering\n\n renderHeader() {\n return null\n }\n\n renderContent() {\n const { fetchSaveError, isNew } = this.state;\n const ogloszenieErrors = (this.state.errors || {}).ogloszenie || [];\n const formLocked = this.state.savingOn;\n return (\n <>\n <Text tag=\"h1\" mainHeader>{isNew ? 'Dodaj' : 'Edytuj'} ofertÄ™</Text>\n <FormOfertaFields\n danePodmiotu={this.state.danePodmiotu}\n errors={this.state.errors}\n formLocked={formLocked}\n oferty={this.state.oferty}\n withDanePodmiotuForm={true}\n zalaczniki={this.state.zalaczniki}\n zamowienia={this.props.zamowienia}\n changeAttribute={this.handleChangeAttribute}\n changeMiejscowosc={this.handleChangeMiejscowosc}\n changeNumerIdentyfikacyjny={this.handleChangeNumerIdentyfikacyjny}\n changeRodzajAdresu={this.handleChangeRodzajAdresu}\n changeAddOferta={this.handleChangeAddOferta}\n changeCzyWariantowa={this.handleChangeCzyWariantowa}\n changeAddZalacznik={this.handleAddZalacznik}\n changeRemoveZalacznik={this.handleRemoveZalacznik}\n changeSaveZalacznikAttributes={this.handleSaveZalacznikAttributes}\n onAddWariant={this.handleAddWariant}\n onChangeWariantAttribute={this.handleChangeWariantAttribute}\n onRemoveWariant={this.handleRemoveWariant}\n />\n <GridCustom flexEnd>\n <ButtonStyled\n cancel\n disabled={formLocked}\n onClick={this.props.onCloseForm}>\n Anuluj {isNew ? 'tworzenie' : 'edycjÄ™'} oferty\n </ButtonStyled>\n <ButtonStyled\n disabled={formLocked}\n primary\n onClick={this.handleSubmit}\n >{this.state.saveBtnText}</ButtonStyled>\n </GridCustom>\n {fetchSaveError.length > 0 && <Text error role=\"alert\">{fetchSaveError}</Text>}\n {ogloszenieErrors.length > 0 && <ul role=\"alert\">{ogloszenieErrors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n {this.state.cancellingOn && this.renderCancelDialog()}\n </>\n )\n }\n}\n\n\nexport { FormOferta, FormOfertaOgloszeniodawca };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Icon } from '@rmwc/icon';\n\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport { reformatDanePodmiotu, serializeAuditData } from '../../../helpers';\nimport {\n getSerializedObject,\n serializeObject,\n translateErrorMessage\n} from '../../../serializers';\nimport {\n AuditData,\n Box,\n ButtonStyled,\n Container,\n DialogCustom,\n FieldWithLabel,\n GridCustom,\n Message,\n OfferStatus,\n Text\n} from '../../common';\nimport { BaseComponent, DanePodmiotu, ZalacznikiSelect } from '../common';\n\n\nclass Oferta extends BaseComponent {\n\n // handlers\n\n handleFetchSuccess(data) {\n this.xhrFetch = null;\n this.setState(\n {zamowienia: (serializeObject(data.advertisement).zamowienia || []).map(z => {\n return {\n id: z.id,\n zamowienieNode: z.zamowienieNode,\n tytul: z.tytul,\n czyWariantowe: z.czyWariantowe,\n }\n })},\n this.getOfferData\n );\n }\n\n handleFetchOfferDataSuccess = (data) => {\n this.xhrFetch = null;\n data = getSerializedObject(\n data, {addTemporaryId: true}).pakietOfert;\n if (!data) {\n this.setState({\n initializingOn: false,\n fetchError: 'Nie udaÅ‚o siÄ™ pobrać danych oferty.',\n });\n } else {\n this.setState({\n initializingOn: false,\n danePodmiotu: data.danePodmiotu ? reformatDanePodmiotu(data.danePodmiotu) : {},\n oferty: (data.oferty || []).map(o => {\n o.zamowienieNode = o.zamowienieNode.id;\n return o\n }),\n zalaczniki: data.zalaczniki || [],\n id: data.id,\n status: data.status,\n auditData: serializeAuditData(data),\n });\n }\n }\n\n handleCloseWithdrawingDialog = () => {\n this.setState({withdrawingOn: false});\n }\n\n handleWithdraw = () => {\n if (this.props.preview) { return }\n\n this.xhrFetch = fetchApi(\n `/api/offerset/announcement/${this.props.ogloszenieId}/withdraw`,\n 'PUT',\n {},\n {},\n this.handleFetchWithdrawSuccess,\n this.handleFetchWithdrawError,\n this.handleFetchWithdrawIncorrectStatus\n );\n }\n\n handleFetchWithdrawSuccess = (data) => {\n this.xhrFetch = null;\n this.props.onWithdrawOferta();\n }\n\n handleFetchWithdrawError = (data) => {\n this.xhrFetch = null;\n this.setState({\n withdrawingOn: false,\n fetchWithdrawError: `Nie udaÅ‚o siÄ™ wycofać oferty. ${translateErrorMessage(data.message)}`,\n });\n }\n\n handleFetchWithdrawIncorrectStatus = (status) => {\n this.xhrFetch = null;\n this.setState({\n withdrawingOn: false,\n fetchWithdrawError: `Nie udaÅ‚o siÄ™ wycofać oferty. WystÄ…piÅ‚ bÅ‚Ä…d o kodzie ${status}.`,\n });\n }\n\n // helpers\n\n getAdditionalState(props) {\n const commonState = {\n zamowienia: [],\n danePodmiotu: {},\n oferty: [],\n zalaczniki: [],\n auditData: {},\n };\n if (this.props.preview) {\n return commonState\n }\n return {\n ...commonState,\n withdrawingOn: false,\n fetchWithdrawError: '',\n }\n }\n\n getFetchUrl() {\n return `/api/announcements/${this.props.ogloszenieId}`\n }\n\n getFetchError(message) {\n message = super.getFetchError(message);\n return `Nie udaÅ‚o siÄ™ pobrać danych oferty. ${(message)}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Nie udaÅ‚o siÄ™ pobrać danych oferty. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n getOfferData = () => {\n let url;\n if (this.props.ofertaId) {\n url = `/api/offerset/${this.props.ofertaId}`;\n } else {\n url = `/api/offerset/announcement/${this.props.ogloszenieId}`;\n }\n this.xhrFetch = fetchApi(\n url,\n 'GET',\n {},\n {},\n this.handleFetchOfferDataSuccess,\n this.handleFetchError,\n this.handleFetchIncorrectStatus,\n );\n }\n\n // rendering\n\n renderFetchError() {\n if (this.props.preview) {\n return (\n <Message\n error\n id=\"sessionDialogLabel\"\n messageIcon=\"report_problem\"\n messageTitle={this.state.fetchError}>\n <ButtonStyled primary onClick={this.props.onClosePreview}>OK</ButtonStyled>\n </Message>\n )\n }\n return super.renderFetchError()\n }\n\n renderHeader() {\n if (this.state.initializingOn || this.state.fetchError.length) { return null }\n\n const {label, nazwa} = this.state.status;\n\n return (\n <>\n {this.props.preview && (\n <ButtonStyled\n className=\"dialog-long-content__close\"\n primary\n onClick={this.props.onClosePreview}>\n Zamknij podglÄ…d\n </ButtonStyled>\n )}\n <OfferStatus\n statusIcon={label === 'DRAFT' ? 'assignment' : (label === 'SUBMITTED' ? 'assignment_turned_in' : 'assignment_return')}\n statusName={nazwa} />\n <Text tag=\"h2\" mainHeader>PodglÄ…d oferty</Text>\n </>\n )\n }\n\n renderContent() {\n return (\n <>\n {this.renderDanePodmiotu()}\n {this.renderOferty()}\n {this.renderZalaczniki()}\n {!this.props.preview && (\n <>\n {this.renderActionsButtons()}\n {this.state.withdrawingOn && this.renderWithdrawDialog()}\n </>\n )}\n {this.state.danePodmiotu.ktoUtworzyl.id === this.context.user.id &&\n <AuditData {...this.state.auditData} />\n }\n </>\n )\n }\n\n renderDanePodmiotu() {\n let content;\n if (!Object.keys(this.state.danePodmiotu).length) {\n content = (\n <Text error>\n Nie zdefiniowano danych podmiotu dla użytkownika. Aby je ustawić, <Link to=\"/uzytkownicy/moj-profil\" className=\"link-text\">przejdź do swojego profilu</Link>.\n </Text>\n );\n } else {\n content = (\n <>\n <DanePodmiotu danePodmiotu={this.state.danePodmiotu} />\n <Text info>Te dane podmiotu zostanÄ… doÅ‚Ä…czone do oferty.</Text>\n </>\n );\n }\n return (\n <Container>\n <Text tag=\"h2\" mainHeader>Dane podmiotu</Text>\n {content}\n </Container>\n )\n }\n\n renderOferty() {\n const zamowienia = this.state.zamowienia;\n return (\n <Container className=\"details-preview separate-container\">\n <GridCustom flexEnd fullwidth>\n <Text tag=\"h2\" mainHeader>Dane oferty</Text>\n </GridCustom>\n {zamowienia.length > 1 ? (\n zamowienia.map(z => this.renderMultiplyOferta(z))\n ) : this.renderSingleOferta()}\n </Container>\n )\n }\n\n renderMultiplyOferta(zamowienie) {\n const oferta = this.state.oferty.filter(o => o.zamowienieNode === zamowienie.zamowienieNode.id)[0] || null;\n if (!oferta) {\n return (\n <div key={zamowienie.id} className=\"offer__part-name offer__part-name--offer-details offer__part-name--no-offer\">\n <Text className=\"text--btn\"><Icon aria-hidden=\"true\" icon=\"cancel\" /> Oferta częściowa do części</Text>\n <Text label>{zamowienie.tytul} <span>- brak</span></Text>\n </div>\n )\n }\n return (\n <Container key={oferta.id} fullwidth>\n <GridCustom flexEnd fullwidth>\n <div className=\"offer__part-name offer__part-name--offer-details\">\n <Text className=\"text--btn\"><Icon aria-hidden=\"true\" icon=\"check_box\" /> Oferta częściowa do części</Text>\n <Text label>{zamowienie.tytul}</Text>\n </div>\n {oferta.czyWariantowe && <Text className=\"text--btn\"><Icon aria-hidden=\"true\" icon=\"check_box\" /> Oferta wariantowa</Text>}\n </GridCustom>\n {oferta.czyWariantowe ? this.renderWariantowa(oferta) : this.renderNiewariantowa(oferta)}\n </Container>\n )\n }\n\n renderWariantowa(oferta) {\n return (\n <>\n <Text tag=\"h2\" sectionHeader>Lista wariantów</Text>\n <Text info>Liczba wyników: {oferta.warianty.length}</Text>\n <GridCustom tag=\"ul\">\n {oferta.warianty.map(w => (\n <Box key={w.id} tag=\"li\" titleOneRow={`${w.cena} PLN`} flexiblewidth>\n {w.opis.length > 0 && (\n <FieldWithLabel label=\"Opis\">\n <Text className=\"long-text\">{w.opis}</Text>\n </FieldWithLabel>\n )}\n </Box>\n ))}\n </GridCustom>\n </>\n )\n }\n\n renderNiewariantowa(oferta) {\n return (\n <FieldWithLabel label=\"Cena\">\n <Text>{oferta.warianty[0].cena} PLN</Text>\n </FieldWithLabel>\n )\n }\n\n renderSingleOferta() {\n const oferta = this.state.oferty[0];\n return (\n <Container key={oferta.id} fullwidth>\n <GridCustom flexEnd fullwidth>\n <Text className=\"text--btn\"><Icon aria-hidden=\"true\" icon=\"check_box\" /> Oferta do ogÅ‚oszenia</Text>\n {oferta.czyWariantowe && <Text className=\"text--btn\"><Icon aria-hidden=\"true\" icon=\"check_box\" /> Oferta wariantowa</Text>}\n </GridCustom>\n {oferta.czyWariantowe ? this.renderWariantowa(oferta) : this.renderNiewariantowa(oferta)}\n </Container>\n )\n }\n\n renderZalaczniki() {\n const { zalaczniki, id } = this.state;\n return (\n <Container className=\"details-preview separate-container\">\n <Text tag=\"h2\" sectionHeader>ZaÅ‚Ä…czniki</Text>\n <Text info className=\"text--counter\">Liczba wyników: {zalaczniki.length}</Text>\n <ZalacznikiSelect zalaczniki={zalaczniki} offersetId={id} />\n </Container>\n )\n }\n\n renderActionsButtons() {\n if (this.state.status.label !== 'SUBMITTED') { return null }\n const withdrawingError = this.state.fetchWithdrawError;\n return (\n <>\n <GridCustom flexEnd>\n <ButtonStyled\n lite\n onClick={() => this.setState({withdrawingOn: true, fetchWithdrawError: ''})}>\n Wycofaj ofertÄ™\n </ButtonStyled>\n </GridCustom>\n <GridCustom flexEnd>\n {withdrawingError.length > 0 && <Text error>{withdrawingError}</Text>}\n </GridCustom>\n </>\n )\n }\n\n renderWithdrawDialog() {\n return (\n <DialogCustom \n dialogTitle=\"Czy na pewno chcesz wycofać tÄ™ ofertÄ™?\"\n onClose={this.handleCloseWithdrawingDialog}\n >\n <GridCustom flexEnd>\n <ButtonStyled cancel onClick={this.handleCloseWithdrawingDialog}>Nie</ButtonStyled>\n <ButtonStyled primary onClick={this.handleWithdraw}>Tak</ButtonStyled>\n </GridCustom>\n </DialogCustom>\n )\n }\n}\n\n\nOferta.contextType = UserContext;\n\nexport { Oferta };\n","import React from 'react';\n\nimport { getPricesRange } from '../../../helpers';\nimport { Box, FieldWithLabel, Text } from '../../common';\nimport { ZalacznikiSelect } from '../common';\n\n\nconst OfertaBox = (props) => {\n const { className, oferta } = props;\n const { danePodmiotu, warianty } = oferta;\n\n let myOfferLabel = null;\n if (props.showMyOfferLabel) {\n myOfferLabel = <Text className=\"offer__my-offer-label\">Moja oferta</Text>;\n }\n\n let cena;\n let opis = null;\n if (props.showFullVariants) {\n if (warianty.length > 1) {\n cena = (\n <ul>\n {warianty.map((w, i) => (\n <li key={i} className=\"variant\">\n <Text className=\"variant__price\">{i + 1}. {w.cena} PLN</Text>\n <Text className=\"long-text variant__content\">{w.opis}</Text>\n </li>\n ))}\n </ul>\n );\n } else {\n cena = `${warianty[0].cena} PLN`;\n }\n if (props.isSelected && warianty[0].opis.length > 0) {\n opis = (\n <FieldWithLabel label=\"Opis\" tag=\"label\">\n <Text className=\"long-text\">{warianty[0].opis}</Text>\n </FieldWithLabel>\n )\n }\n } else {\n if (warianty.length > 1) {\n const prices = getPricesRange(warianty.map(w => w.cena))\n cena = `${prices.min} - ${prices.max} PLN (${warianty.length} warianty)`;\n } else {\n cena = `${warianty[0].cena} PLN`;\n }\n }\n\n let zalaczniki = null;\n if (props.showAttachments) {\n zalaczniki = (\n <FieldWithLabel\n label=\"ZaÅ‚Ä…czniki\"\n tag=\"label\"\n selectRef={oferta.zalaczniki.length > 0 ? React.createRef() : null}>\n <ZalacznikiSelect zalaczniki={oferta.zalaczniki} offersetId={oferta.pakietId}/>\n </FieldWithLabel>\n );\n }\n\n const adres = danePodmiotu.adres || {};\n return (\n <Box\n flexiblewidth\n className={className}\n tag=\"li\"\n titleOneRow={(\n <>\n Oferta {danePodmiotu.nazwa}\n {myOfferLabel}\n </>\n )}\n >\n {oferta.isRefused && <Text error><span className=\"sr-only\">Ta oferta jest </span>Odrzucona</Text>}\n <>\n <FieldWithLabel label=\"Nazwa podmiotu\" tag=\"label\">\n <Text>{danePodmiotu.nazwa}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Miejscowość\" tag=\"label\">\n <Text>{`${adres.miejscowosc || ''}${adres.kraj === 'Polska' ? '' : ', ' + (adres.kraj || '')}`}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Cena\" tag=\"label\">{cena}</FieldWithLabel>\n {opis}\n {zalaczniki}\n </>\n </Box>\n )\n};\n\n\nexport { OfertaBox }\n","import React from 'react';\nimport { Oferta } from './Oferta';\nimport { DialogCustom } from '../../common';\n\n\nconst OfertaPreview = (props) => {\n return (\n <DialogCustom\n className=\"dialog-long-content\"\n onClose={props.onClosePreview}\n >\n <Oferta\n ogloszenieId={props.ogloszenieId}\n ofertaId={props.ofertaId}\n preview={true}\n onClosePreview={props.onClosePreview} />\n </DialogCustom>\n )\n};\n\n\nexport { OfertaPreview }\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { getOffersFiltersCount } from '../../../filters';\nimport { isAdvertisementLocked } from '../../../helpers';\nimport { Box, Breadcrumps, ButtonStyled, FieldWithLabel, GridCustom, Text } from '../../common';\nimport { PaginatedBaseComponent } from '../common';\nimport { FiltryOfert, OFERTA_STATUS_CHOICES, OGLOSZENIE_STATUS_CHOICES } from './FiltryOfert';\nimport { OfertaPreview } from './OfertaPreview';\nimport { BadgeAnchor, Badge } from '@rmwc/badge';\nimport '@rmwc/badge/badge.css';\n\nclass Oferty extends PaginatedBaseComponent {\n\n // handlers\n\n handleClosePreview = () => {\n this.setState({\n previewOn: false,\n previewedOfferAnnouncementId: null,\n });\n }\n\n // helpers\n\n preState(props) {\n super.preState(props);\n this.objectsName = 'pakietyOfert';\n this.sortingValues = [\n ['announcementTitle_asc', 'Po tytule ogÅ‚oszenia rosnÄ…co'],\n ['announcementTitle_desc', 'Po tytule ogÅ‚oszenia malejÄ…co'],\n ['announcementNumber_asc', 'Po numerze ogÅ‚oszenia rosnÄ…co'],\n ['announcementNumber_desc', 'Po numerze ogÅ‚oszenia malejÄ…co'],\n ['submissionDeadline_asc', 'Po terminie skÅ‚adania ofert rosnÄ…co'],\n ['submissionDeadline_desc', 'Po terminie skÅ‚adania ofert malejÄ…co'],\n ['announcementStatus_asc', 'Po statusie ogÅ‚oszenia rosnÄ…co'],\n ['announcementStatus_desc', 'Po statusie ogÅ‚oszenia malejÄ…co'],\n ['offerStatus_asc', 'Po statusie oferty rosnÄ…co'],\n ['offerStatus_desc', 'Po statusie oferty malejÄ…co'],\n ['announcementPublicationDate_asc', 'Po dacie publikacji ogÅ‚oszenia rosnÄ…co'],\n ['announcementPublicationDate_desc', 'Po dacie publikacji ogÅ‚oszenia malejÄ…co'],\n ];\n this.sortingLabel = 'Sortuj oferty';\n this.filteringLabel = 'Filtruj listÄ™';\n this.filtersComponentClass = FiltryOfert;\n\n this.getFiltersCount = getOffersFiltersCount;\n }\n\n getAdditionalState(props) {\n let selectedSort;\n for (let s of this.sortingValues) {\n if (s[0] === 'submissionDeadline_desc') {\n selectedSort = s;\n break\n }\n }\n return {\n ...super.getAdditionalState(props),\n selectedSort: {value: selectedSort[0], label: selectedSort[1]},\n objects: {},\n filters: this.getEmptyFilters(),\n previewOn: false,\n previewedOfferAnnouncementId: null,\n }\n }\n\n getFetchUrl() {\n return '/api/offerset/my'\n }\n\n getFetchData() {\n let queryDict = super.getFetchData();\n\n // set filters values\n const emptyFilters = this.getEmptyFilters();\n for (let [name, value] of Object.entries(this.state.filters)) {\n if (['announcementStatus', 'offerStatus'].includes(name)) {\n if (value.value !== 'all') {\n queryDict[name] = value.value.toUpperCase();\n }\n } else if (value !== emptyFilters[name]) {\n queryDict[name] = value.trim();\n }\n }\n\n return queryDict\n }\n\n getFetchError(message) {\n message = super.getFetchError(message);\n return `Nie udaÅ‚o siÄ™ pobrać ofert. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Podczas pobierania ofert wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n getEmptyFilters() {\n return {\n title: '',\n submissionDeadline: '',\n announcementPublicationDate: '',\n announcementNumber: '',\n announcementStatus: {value: OGLOSZENIE_STATUS_CHOICES[0][0], label: OGLOSZENIE_STATUS_CHOICES[0][1]},\n offerStatus: {value: OFERTA_STATUS_CHOICES[0][0], label: OFERTA_STATUS_CHOICES[0][1]},\n }\n }\n\n // rendering\n\n renderHeader() {\n document.title = \"Baza KonkurencyjnoÅ›ci - oferty\";\n return (\n <Breadcrumps notZarzadzanieTrescia>\n <li className=\"breadcrumps__current\">Moje oferty</li>\n </Breadcrumps>\n )\n }\n\n renderFiltersCount() {\n return this.getFiltersCount(this.state.filters, this.getEmptyFilters())\n }\n\n renderEmptyObjects() {\n return <Text info>Brak ofert speÅ‚niajÄ…cych kryteria wyszukiwania.</Text>\n }\n\n renderList() {\n const total = this.state.total;\n let ofertaLabel = '';\n if (total === 1) {\n ofertaLabel = 'ofertÄ™';\n } else {\n const totalString = total.toString();\n if (['2', '3', '4'].includes(totalString.slice(totalString.length - 1))) {\n ofertaLabel = 'oferty';\n } else {\n ofertaLabel = 'ofert';\n }\n }\n return (\n <>\n <Text accentHeader tag=\"h2\" className=\"offer__count\">Znaleziono {total < this.paginateBy ? '' : 'okoÅ‚o '}{total} {ofertaLabel}</Text>\n <GridCustom tag=\"ul\">\n {this.state.objects.map(pakietOfert => this.renderPakietOfert(pakietOfert))}\n </GridCustom>\n </>\n )\n }\n\n renderPakietOfert(pakietOfert) {\n const { dataOpublikowania, numer, status } = pakietOfert.ogloszenie;\n // only published and closed statuses of announcement can show more content\n const zamowieniaNodes = (pakietOfert.oferty || []).map(o => o.zamowienieNode);\n const wersja = pakietOfert.ogloszenie.wersja || {};\n const ogloszenieId = pakietOfert.ogloszenie.id;\n const offerSubtitle = (\n <><span className=\"sr-only\">Oferta zÅ‚ożona do ogÅ‚oszenia: </span>{numer}</>\n )\n const isLocked = isAdvertisementLocked(status);\n\n return (\n <Box\n className=\"offer__box\"\n flexiblewidth\n headerTag=\"h3\"\n key={pakietOfert.id}\n subtitle={offerSubtitle}\n tag=\"li\"\n titleTwoRows={isLocked ? '' : `Data opublikowania: ${dataOpublikowania}`}\n >\n <GridCustom fullwidth>\n <FieldWithLabel label=\"Status ogÅ‚oszenia\">\n <Text>{status.nazwa}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Termin skÅ‚adania ofert\">\n {isLocked ? <Text className=\"offer__box-hidden-text\"></Text> : <Text>{wersja.terminOfert}</Text>}\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth>\n <FieldWithLabel label=\"TytuÅ‚ ogÅ‚oszenia\">\n {isLocked ? <Text className=\"offer__box-hidden-text\"></Text> : <Text className=\"long-text\">{wersja.tytul}</Text>}\n </FieldWithLabel>\n </GridCustom>\n <GridCustom fullwidth>\n <FieldWithLabel label=\"Status oferty\">\n <Text>{pakietOfert.status.nazwa}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Części, których dotyczy oferta\">\n {isLocked ? <Text className=\"offer__box-hidden-text\"></Text> :\n (wersja.zamowienia || []).length < 2 ? 'CaÅ‚e ogÅ‚oszenie' :\n zamowieniaNodes.map(z => (\n <Text key={z.id}>- {z.ostatniaWersja.tytul || ''}</Text>)\n )\n }\n </FieldWithLabel>\n </GridCustom>\n <div className=\"btn-container\">\n <ButtonStyled\n disabled={isLocked}\n primary\n onClick={(e) => {\n this.setState({previewOn: true, previewedOfferAnnouncementId: ogloszenieId});\n e.currentTarget.blur();\n }}>\n PodglÄ…d oferty\n </ButtonStyled>\n <BadgeAnchor style={{width: '100%'}}>\n <ButtonStyled\n disabled={isLocked}\n primary\n tag={Link}\n to={`/ogloszenia/${ogloszenieId}`}>\n Przejdź do szczegółów ogÅ‚oszenia\n </ButtonStyled>\n {pakietOfert.badge_count > 0 && <Badge label={pakietOfert.badge_count} />}\n </BadgeAnchor>\n </div>\n </Box>\n )\n }\n\n renderAdditionalAfterBaseContent() {\n return this.state.previewOn ? this.renderPreview() : null\n }\n\n renderPreview() {\n return <OfertaPreview\n ogloszenieId={this.state.previewedOfferAnnouncementId}\n onClosePreview={this.handleClosePreview} />\n }\n}\n\n\nexport { Oferty };\n","import React from 'react';\n\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { ButtonStyled, GridCustom, Text } from '../../common';\nimport { BaseComponent } from '../common';\nimport { FormRozstrzygniecie } from '../ogloszenia';\nimport { OfertaBox } from './OfertaBox';\nimport { OfertaPreview } from './OfertaPreview';\n\n\nclass OfertyOwnerClosedStatus extends BaseComponent {\n showAttachments = true;\n showFullVariants = true;\n\n // handlers\n\n handleFetchSuccess(data) {\n this.xhrFetch = null;\n const serializedData = getSerializedObject(data);\n\n if (this.props.setAdvertisementManagerType && data.extra && Object.keys(data.extra).length) {\n this.props.setAdvertisementManagerType({\n isAuthor: data.extra.is_advertiser, isAdmin: data.extra.is_admin\n });\n }\n\n this.setState({\n initializingOn: false,\n pakietyOfert: serializedData.pakietyOfert,\n });\n }\n\n handleMyOfferButtonClick = () => {\n if (this.props.isAdvertisementOwner && !this.props.onlyAdmin) { return }\n this.setState({previewOn: true});\n }\n\n handleClosePreview = () => {\n this.setState({previewOn: false});\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n formOn: false,\n previewOn: false,\n pakietyOfert: [],\n }\n }\n\n getFetchUrl() {\n return `/api/offerset/announcement/${this.props.ogloszenie.ogloszenie.id}/list`\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać danych ofert. ${translateErrorMessage(message)}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Nie udaÅ‚o siÄ™ pobrać danych ofert. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n sortOferty(oferta1, oferta2) {\n return oferta1.danePodmiotu.nazwa.localeCompare(oferta2.danePodmiotu.nazwa, 'pl')\n }\n\n sortWarianty(wariant1, wariant2) {\n return wariant1.cena - wariant2.cena\n }\n\n // rendering\n\n renderElements() {\n const isAdvertisementOwner = this.props.isAdvertisementOwner;\n if (isAdvertisementOwner && this.state.formOn) {\n return <FormRozstrzygniecie {...this.props} isNew={true} pakietyOfert={this.state.pakietyOfert} />\n }\n const onlyAdmin = this.props.onlyAdmin;\n return (\n <>\n {onlyAdmin && this.renderMyOfferButton()}\n {this.renderContent()}\n {isAdvertisementOwner && (\n <GridCustom flexEnd>\n <ButtonStyled primary onClick={() => this.setState({formOn: true})} className=\"btn btn--main\" icon=\"verified_user\">Dodaj rozstrzygniÄ™cie</ButtonStyled>\n </GridCustom>\n )}\n {onlyAdmin && this.state.previewOn && this.renderPreview()}\n </>\n )\n }\n\n renderMyOfferButton() {\n if (this.state.pakietyOfert.filter(\n po => po.ktoUtworzyl.id === this.props.user.id).length) {\n return (\n <GridCustom flexEnd>\n <ButtonStyled primary onClick={this.handleMyOfferButtonClick}>\n Szczegóły mojej oferty\n </ButtonStyled>\n </GridCustom>\n )\n }\n return null\n }\n\n renderContent() {\n const zamowienia = this.props.ogloszenie.zamowienia;\n if (zamowienia.length > 1) {\n return zamowienia.map(z => this.renderZamowienie(z, true))\n }\n return this.renderZamowienie(zamowienia[0], false)\n }\n\n renderZamowienie(zamowienie, isMultiply) {\n return (\n <div key={zamowienie.id} className=\"offer__list\">\n <div className=\"offer-resolve__name\">\n <Text tag=\"h2\" sectionHeader>Lista zÅ‚ożonych ofert{isMultiply && ` do części:`}</Text>\n {isMultiply && <Text label>{zamowienie.tytul}</Text>}\n </div>\n {this.renderOferty(zamowienie, isMultiply)}\n </div>\n )\n }\n\n renderOferty(zamowienie, isMultiply) {\n let oferty = [];\n for (let po of this.state.pakietyOfert) {\n for (let o of po.oferty) {\n if (o.zamowienieNode.id === zamowienie.zamowienieNode.id) {\n let oferta = Object.assign({}, o, {\n oferentId: po.ktoUtworzyl.id,\n danePodmiotu: po.danePodmiotu,\n zalaczniki: po.zalaczniki,\n pakietId: po.id\n });\n oferty.push(oferta);\n break\n }\n }\n }\n if (!oferty.length) {\n return (\n <div className=\"offer__list\">\n <Text info className=\"text--counter\">Liczba wyników: 0</Text>\n <Text error>Nie zÅ‚ożono żadnej oferty{isMultiply ? ` do części: ${zamowienie.tytul}` : ''}</Text>\n </div>\n )\n }\n return (\n <>\n <Text info>Liczba wyników: {oferty.length}</Text>\n <GridCustom tag=\"ul\">\n {oferty.sort(this.sortOferty).map(o => this.renderOferta(o))}\n </GridCustom>\n </>\n )\n }\n\n renderOferta(oferta) {\n const userId = this.props.user.id;\n const showMyOfferLabel = this.props.isAdvertisementOwner ? false : (\n !!userId ? oferta.oferentId === userId : false);\n return this.renderOfertaBox(oferta, showMyOfferLabel)\n }\n\n renderOfertaBox(oferta, showMyOfferLabel, isSelected=false) {\n return <OfertaBox\n className={isSelected ? 'box--selected' : ''}\n isSelected={isSelected}\n key={oferta.id}\n oferta={oferta}\n showAttachments={this.showAttachments}\n showFullVariants={this.showFullVariants}\n showMyOfferLabel={showMyOfferLabel} />\n }\n\n renderPreview() {\n return <OfertaPreview\n ogloszenieId={this.props.ogloszenie.ogloszenie.id}\n onClosePreview={this.handleClosePreview} />\n }\n}\n\n\nexport { OfertyOwnerClosedStatus };\n","import React from 'react';\n\nimport { OfertyOwnerClosedStatus } from './OfertyOwnerClosedStatus';\n\n\nclass OfertyOffererClosedStatus extends OfertyOwnerClosedStatus {\n showAttachments = false;\n showFullVariants = false;\n\n // rendering\n\n renderElements() {\n return (\n <>\n {this.renderMyOfferButton()}\n {this.renderContent()}\n {this.state.previewOn && this.renderPreview()}\n </>\n )\n }\n}\n\n\nexport { OfertyOffererClosedStatus };\n","import React from 'react';\n\nimport { OFERTA_STATUSES } from '../../../const';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { ButtonStyled, DialogCustom, GridCustom, Text } from '../../common';\nimport { BaseComponent } from '../common';\nimport { FormOferta } from './FormOferta';\nimport { Oferta } from './Oferta';\n\n\nclass OfertyOffererPublishedStatus extends BaseComponent {\n\n // handlers\n\n handleFetchSuccess(data) {\n this.xhrFetch = null;\n\n const serializedData = getSerializedObject(data, {addTemporaryId: true});\n const pakietOfert = serializedData.pakietOfert;\n if (!pakietOfert) {\n this.setState({initializingOn: false});\n return\n }\n\n this.setState({\n initializingOn: false,\n formOn: ['DRAFT', 'WITHDRAWN'].includes(pakietOfert.status.label),\n pakietOfert: pakietOfert,\n });\n }\n\n handleCloseForm = () => {\n this.setState(\n {formOn: false},\n () => this.handleReload()\n );\n }\n\n handleWithdrawOferta = () => {\n this.setState(prevState => ({\n formOn: true,\n withdrawingOfferConfirmationOn: true,\n submittingOfferConfirmationOn: false,\n pakietOfert: Object.assign(\n {}, prevState.pakietOfert, {status: OFERTA_STATUSES.withdrawn}),\n }));\n }\n\n handleCloseWithdrawingOfferConfirmationDialog = () => {\n window.location.reload();\n }\n\n handleSubmitOferta = (offerSetId) => {\n this.setState(prevState => ({\n formOn: false,\n withdrawingOfferConfirmationOn: false,\n submittingOfferConfirmationOn: true,\n pakietOfert: Object.assign(\n {}, prevState.pakietOfert, {status: OFERTA_STATUSES.submitted, id: offerSetId}),\n }));\n }\n\n handleCloseSubmittingOfferConfirmationDialog = () => {\n window.location.reload();\n }\n\n handleReload = () => {\n this.setState(\n {initializingOn: true, fetchError: '', pakietOfert: null},\n () => {this.fetchInitialData()}\n );\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n formOn: false,\n withdrawingOfferConfirmationOn: false,\n submittingOfferConfirmationOn: false,\n pakietOfert: null,\n }\n }\n\n getFetchUrl() {\n return `/api/offerset/announcement/${this.props.ogloszenie.ogloszenie.id}`\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać danych oferty. ${translateErrorMessage(message)}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Nie udaÅ‚o siÄ™ pobrać danych oferty. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n // rendering\n\n renderContent() {\n if (this.state.formOn) {\n return (\n <>\n <FormOferta\n isNew={this.state.pakietOfert === null}\n ogloszenieId={this.props.ogloszenie.ogloszenie.id}\n zamowienia={this.props.ogloszenie.zamowienia}\n onCloseForm={this.handleCloseForm}\n onSubmitOferta={this.handleSubmitOferta}\n />\n {this.state.withdrawingOfferConfirmationOn && this.renderWithdrawingOfferConfirmationDialog()}\n </>\n )\n }\n const { pakietOfert } = this.state;\n if (!pakietOfert || !pakietOfert.id) {\n return (\n <div className=\"login-info-container\">\n <ButtonStyled add onClick={() => this.setState({formOn: true})} className=\"btn btn--main\">Utwórz ofertÄ™</ButtonStyled>\n </div>\n )\n }\n return (\n <>\n <Oferta ogloszenieId={this.props.ogloszenie.ogloszenie.id} onWithdrawOferta={this.handleWithdrawOferta} />\n {this.state.submittingOfferConfirmationOn && this.renderSubmittingOfferConfirmationDialog()}\n </>\n )\n }\n\n renderBaseDialog(onClose, title, content) {\n return (\n <DialogCustom\n dialogTitle={title}\n onClose={onClose}\n >\n <>\n {content}\n <GridCustom centerVertical flexEnd>\n <ButtonStyled primary onClick={onClose}>OK</ButtonStyled>\n </GridCustom>\n </>\n </DialogCustom>\n )\n }\n\n renderWithdrawingOfferConfirmationDialog() {\n return this.renderBaseDialog(\n this.handleCloseWithdrawingOfferConfirmationDialog,\n 'WycofaÅ‚eÅ› ofertÄ™.',\n (\n <GridCustom>\n <Text>Możesz jÄ… teraz usunąć lub edytować i ponownie zÅ‚ożyć.</Text>\n <Text>Możesz również zrezygnować z edycji oferty i opuÅ›cić zakÅ‚adkÄ™.</Text>\n </GridCustom>\n )\n )\n }\n\n renderSubmittingOfferConfirmationDialog() {\n return this.renderBaseDialog(\n this.handleCloseSubmittingOfferConfirmationDialog,\n 'Oferta zostaÅ‚a zÅ‚ożona.', null\n )\n }\n}\n\n\nexport { OfertyOffererPublishedStatus };\n","import React, { Component } from 'react';\nimport { Document, Page, StyleSheet, Text, View } from '@react-pdf/renderer';\n\nimport { splitLineByChar } from '../../../helpers';\nimport { PdfHeader } from '../../common';\nimport { pdfStyles } from '../../vars/pdfStyles';\n\n\nclass OfertyResolvedStatusPdf extends Component {\n\n // helpers\n\n checkRefused(offerId) {\n let isRefused = false;\n for (let z of this.props.rozstrzygniecie.zamowieniaNodes) {\n for (let o of z.oferty) {\n if (o.id === offerId) {\n isRefused = o.isRefused;\n break\n }\n }\n }\n return isRefused\n }\n\n // rendering\n\n render() {\n return (\n <Document>\n <Page size=\"A4\" style={pdfStyles.mainPdfContainerStyle} wrap>\n <PdfHeader />\n <View>\n <Text style={pdfStyles.labelStyle}>RozstrzygniÄ™cie ogÅ‚oszenia</Text>\n <Text>{this.props.tytulOgloszenia}</Text>\n {this.renderContent()}\n {this.renderKomentarz()}\n </View>\n </Page>\n </Document>\n )\n }\n\n renderContent() {\n if (this.props.zamowienia.length > 1) {\n return this.props.zamowienia.map(z => this.renderZamowienie(z, true))\n }\n return this.renderZamowienie(this.props.zamowienia[0], false)\n }\n\n renderZamowienie(zamowienie, isMultiply) {\n return (\n <View key={zamowienie.id}>\n <Text style={pdfStyles.labelHeaderStyle}>\n RozstrzygniÄ™cie{isMultiply ? ` części: ${zamowienie.tytul}` : ''}\n </Text>\n {this.renderSelectedOferta(zamowienie, isMultiply)}\n {this.renderOferty(zamowienie, isMultiply)}\n </View>\n )\n }\n\n renderSelectedOferta(zamowienie, isMultiply) {\n const zamowienieFromRozstrzygniecie = (\n this.props.rozstrzygniecie.zamowieniaNodes || []).filter(\n z => z.id === zamowienie.zamowienieNode.id)[0];\n if (!zamowienieFromRozstrzygniecie || !zamowienieFromRozstrzygniecie.wybranyWariant) {\n return <Text>{isMultiply ? `Dla części: \"${zamowienie.tytul}\" nie` : 'Nie'} wybrano żadnej oferty.</Text>\n }\n\n const selectedWariantId = zamowienieFromRozstrzygniecie.wybranyWariant.id;\n let selectedPakietOfert = null;\n let selectedOferta = null;\n let selectedWariant = null;\n for (let po of this.props.pakietyOfert) {\n for (let o of po.oferty) {\n for (let w of o.warianty) {\n if (w.id === selectedWariantId) {\n selectedPakietOfert = po;\n selectedOferta = o;\n selectedWariant = w;\n break\n }\n }\n if (selectedWariant !== null) {\n break\n }\n }\n if (selectedWariant !== null) {\n break\n }\n }\n\n if (!selectedWariant) {\n return <Text error role=\"alert\">WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d.</Text>\n }\n\n let header;\n if (isMultiply) {\n header = `Dla części: \"${zamowienie.tytul}\" zostaÅ‚a wybrana oferta`;\n } else {\n header = 'ZostaÅ‚a wybrana oferta';\n }\n\n const oferta_ = {\n id: selectedOferta.id,\n danePodmiotu: selectedPakietOfert.danePodmiotu,\n warianty: [selectedWariant, ],\n }\n\n return (\n <>\n <Text style={pdfStyles.labelStyle}>{header}</Text>\n {this.renderOfertaBox(oferta_, [selectedWariant,], true)}\n </>\n )\n }\n\n renderCena(warianty) {\n let cena;\n if (warianty.length > 1) {\n cena = (\n <>\n {warianty.map((w, i) => (\n <View key={i}>\n <Text>{i + 1}. {w.cena} PLN</Text>\n {splitLineByChar(w.opis).map((line, i) => <Text key={i} style={styles.offerVariantDescrStyle}>{line}</Text>)}\n </View>\n ))}\n </>\n );\n } else {\n cena = <Text>{warianty[0].cena} PLN</Text>;\n }\n return (\n <>\n <Text style={pdfStyles.labelStyle}>Cena</Text>\n {cena}\n </>\n )\n }\n\n renderOferty(zamowienie, isMultiply) {\n let oferty = [];\n for (let po of this.props.pakietyOfert) {\n for (let o of po.oferty) {\n if (o.zamowienieNode.id === zamowienie.zamowienieNode.id) {\n let oferta = Object.assign({}, o, {\n oferentId: po.ktoUtworzyl.id,\n danePodmiotu: po.danePodmiotu,\n zalaczniki: po.zalaczniki,\n isRefused: this.checkRefused(o.id),\n });\n oferty.push(oferta);\n break\n }\n }\n }\n\n if (!oferty.length) {\n return <Text>Nie zÅ‚ożono żadnej oferty{isMultiply ? ` do części: ${zamowienie.tytul}` : ''}</Text>\n }\n\n // exclude selected offer\n\n const selectedWariantId = ((this.props.rozstrzygniecie.zamowieniaNodes || []).filter(\n z => z.id === zamowienie.zamowienieNode.id)[0] || {}).wybranyWariant.id;\n\n let filteredOferty = [];\n for (let o of oferty) {\n let oferta = Object.assign({}, o);\n oferta.warianty = o.warianty.filter(w => w.id !== selectedWariantId);\n filteredOferty.push(oferta)\n }\n filteredOferty = filteredOferty.filter(o => o.warianty.length > 0);\n\n if (!filteredOferty.length) {\n return <Text>Nie zÅ‚ożono innych ofert{isMultiply ? ` do części: ${zamowienie.tytul}` : ''}</Text>\n }\n\n return (\n <View style={styles.otherOffersContainerStyle}>\n <Text>PozostaÅ‚e oferty{isMultiply ? ` do części: \"${zamowienie.tytul}\"` : ''}</Text>\n <Text style={pdfStyles.textInfoStyle}>Liczba wyników: {filteredOferty.length}</Text>\n {filteredOferty.sort(this.sortOferty).map(o => this.renderOfertaBox(o, o.warianty))}\n </View>\n )\n }\n\n renderOfertaBox(oferta, warianty, selected=false) {\n const { borderedDashedSectionStyle, labelStyle } = pdfStyles;\n const danePodmiotu = oferta.danePodmiotu;\n const adres = danePodmiotu.adres;\n return (\n <View key={oferta.id} style={selected ? styles.selectedOfferStyle : borderedDashedSectionStyle}>\n {oferta.isRefused && <Text style={labelStyle}>Odrzucona</Text>}\n <Text style={labelStyle}>Nazwa podmiotu</Text>\n <Text>{danePodmiotu.nazwa}</Text>\n <Text style={labelStyle}>Miejscowość</Text>\n <Text>{`${adres.miejscowosc}${adres.kraj === 'Polska' ? '' : ', ' + adres.kraj}`}</Text>\n {this.renderCena(warianty)}\n </View>\n )\n }\n\n renderKomentarz() {\n if (!(this.props.rozstrzygniecie.komentarz || '').length) { return null }\n return (\n <View>\n <Text style={pdfStyles.labelStyle}>Komentarz</Text>\n {splitLineByChar(this.props.rozstrzygniecie.komentarz).map((line, i) => <Text key={i} style={styles.commentTextStyle}>{line}</Text>)}\n </View>\n )\n }\n}\n\nconst styles = StyleSheet.create({\n selectedOfferStyle: {\n padding: 10,\n marginBottom: 30,\n borderWidth: 2,\n borderColor: '#666A6D'\n },\n otherOffersContainerStyle: {\n marginTop: 20\n },\n offerVariantDescrStyle: {\n paddingLeft: 10,\n marginBottom: 8\n },\n commentTextStyle: {\n whiteSpace: 'pre-line',\n }\n});\n\n\nexport { OfertyResolvedStatusPdf };\n","import React from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport { generatePdfDocument } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { ButtonCreatePdf, ButtonStyled, Container, GridCustom, Text } from '../../common';\nimport { ZalacznikiSelect } from '../common';\nimport { FormRozstrzygniecie } from '../ogloszenia';\nimport { OfertyOwnerClosedStatus } from './OfertyOwnerClosedStatus';\nimport { OfertyResolvedStatusPdf } from './OfertyResolvedStatusPdf';\n\n\nclass OfertyOwnerResolvedStatus extends OfertyOwnerClosedStatus {\n\n // handlers\n\n handleFetchSuccess(data) {\n this.xhrFetch = null;\n const serializedData = getSerializedObject(data, {toFixAttributes: ['cena', ]});\n\n if (this.props.setAdvertisementManagerType && data.extra && Object.keys(data.extra).length) {\n this.props.setAdvertisementManagerType({\n isAuthor: data.extra.is_advertiser, isAdmin: data.extra.is_admin\n });\n }\n\n this.setState(\n {pakietyOfert: serializedData.pakietyOfert},\n () => {\n this.xhrFetch = fetchApi(\n `/api/announcements/${this.props.ogloszenie.ogloszenie.id}/settlement`,\n 'GET',\n {},\n {},\n this.handleFetchSettlementSuccess,\n this.handleFetchError,\n this.handleFetchIncorrectStatus,\n );\n }\n );\n }\n\n handleFetchIncorrectStatus(status) {\n this.xhrFetch = null;\n this.setState({\n initializingOn: false,\n fetchError: this.getFetchIncorrectStatusError(status),\n });\n }\n\n handleFetchSettlementSuccess = (data) => {\n this.setState({\n initializingOn: false,\n rozstrzygniecie: getSerializedObject(data).rozstrzygniecie,\n })\n }\n\n handleCreatePdf = () => {\n const { ogloszenie } = this.props;\n this.setState(\n {pdfCreatingOn: true},\n () => generatePdfDocument(\n <OfertyResolvedStatusPdf\n pakietyOfert={this.state.pakietyOfert}\n rozstrzygniecie={this.state.rozstrzygniecie}\n tytulOgloszenia={ogloszenie.tytul}\n zamowienia={this.props.ogloszenie.zamowienia} />,\n `rozstrzygniecie_ogloszenia_${ogloszenie.ogloszenie.id}.pdf`,\n this.callbackPfdCreated\n )\n );\n }\n\n // helpers\n\n getAdditionalState(props) {\n return Object.assign({}, super.getAdditionalState(props), {pdfCreatingOn: false})\n }\n\n getFetchError(message) {\n message = super.getFetchError(message);\n return `Nie udaÅ‚o siÄ™ pobrać danych rozstrzygniÄ™cia. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Nie udaÅ‚o siÄ™ pobrać danych rozstrzygniÄ™cia. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n callbackPfdCreated = () => {\n this.setState({pdfCreatingOn: false});\n }\n\n checkRefused(offerId) {\n let isRefused = false;\n for (let z of this.state.rozstrzygniecie.zamowieniaNodes) {\n for (let o of z.oferty) {\n if (o.id === offerId) {\n isRefused = o.isRefused;\n break\n }\n }\n }\n return isRefused\n }\n\n // rendering\n\n renderElements() {\n const isAdvertisementOwner = this.props.isAdvertisementOwner;\n if (isAdvertisementOwner && this.state.formOn) {\n return <FormRozstrzygniecie {...this.props} isNew={false} pakietyOfert={this.state.pakietyOfert} />\n }\n const onlyAdmin = this.props.onlyAdmin;\n return (\n <>\n {isAdvertisementOwner && this.renderPdfButton()}\n {onlyAdmin && this.renderMyOfferButton()}\n {this.renderContent()}\n {this.renderZalacznikiRozstrzygniecia()}\n {this.renderKomentarz()}\n {isAdvertisementOwner && (\n <GridCustom flexEnd>\n <ButtonStyled className=\"btn btn--main\" primary onClick={() => this.setState({formOn: true})}>\n ZmieÅ„ rozstrzygniÄ™cie\n </ButtonStyled>\n </GridCustom>\n )}\n {onlyAdmin && this.state.previewOn && this.renderPreview()}\n </>\n )\n }\n\n renderPdfButton() {\n return (\n <GridCustom flexEnd>\n <ButtonCreatePdf\n pdfCreatingOn={this.state.pdfCreatingOn}\n onClick={this.handleCreatePdf}\n >\n Wydruk listy ofert <span className=\"sr-only\">Pobierz plik PDF ofert z rozstrzygniÄ™ciem ogÅ‚oszenia {this.props.ogloszenie.tytul}</span>\n </ButtonCreatePdf>\n </GridCustom>\n )\n }\n\n renderZamowienie(zamowienie, isMultiply) {\n return (\n <div key={zamowienie.id} className=\"offer__list\">\n <div className=\"offer-resolve__name\">\n <Text tag=\"h2\" sectionHeader>RozstrzygniÄ™cie{isMultiply && ` części:`}</Text>\n {isMultiply && <Text label>{zamowienie.tytul}</Text>}\n </div>\n {this.renderSelectedOferta(zamowienie, isMultiply)}\n {this.renderOferty(zamowienie, isMultiply)}\n </div>\n )\n }\n\n renderSelectedOferta(zamowienie, isMultiply) {\n const zamowienieFromRozstrzygniecie = (\n this.state.rozstrzygniecie.zamowieniaNodes || []).filter(\n z => z.id === zamowienie.zamowienieNode.id)[0];\n if (!zamowienieFromRozstrzygniecie || !zamowienieFromRozstrzygniecie.wybranyWariant) {\n return <Text accentHeader>{isMultiply ? `Dla części: \"${zamowienie.tytul}\" nie` : 'Nie'} wybrano żadnej oferty.</Text>\n }\n\n const selectedWariantId = zamowienieFromRozstrzygniecie.wybranyWariant.id;\n let selectedPakietOfert = null;\n let selectedOferta = null;\n let selectedWariant = null;\n for (let po of this.state.pakietyOfert) {\n for (let o of po.oferty) {\n for (let w of o.warianty) {\n if (w.id === selectedWariantId) {\n selectedPakietOfert = po;\n selectedOferta = o;\n selectedWariant = w;\n break\n }\n }\n if (selectedWariant !== null) {\n break\n }\n }\n if (selectedWariant !== null) {\n break\n }\n }\n\n if (!selectedWariant) {\n return <Text error role=\"alert\">WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d.</Text>\n }\n\n let header;\n if (isMultiply) {\n header = `Dla części: \"${zamowienie.tytul}\" zostaÅ‚a wybrana oferta`;\n } else {\n header = 'ZostaÅ‚a wybrana oferta';\n }\n\n const oferta_ = {\n id: selectedOferta.id,\n danePodmiotu: selectedPakietOfert.danePodmiotu,\n warianty: [selectedWariant, ],\n zalaczniki: selectedPakietOfert.zalaczniki,\n pakietId: selectedPakietOfert.id\n }\n const userId = this.props.user.id;\n const showMyOfferLabel = this.props.isAdvertisementOwner ? false : (\n !!userId ? selectedPakietOfert.ktoUtworzyl.id === userId : false);\n\n return (\n <div key={selectedOferta.id}>\n <Text tag=\"h3\" accentHeader>{header}</Text>\n {this.renderOfertaBox(oferta_, showMyOfferLabel, true)}\n </div>\n )\n }\n\n renderOferty(zamowienie, isMultiply) {\n let oferty = [];\n for (let po of this.state.pakietyOfert) {\n for (let o of po.oferty) {\n if (o.zamowienieNode.id === zamowienie.zamowienieNode.id) {\n let oferta = Object.assign({}, o, {\n oferentId: po.ktoUtworzyl.id,\n danePodmiotu: po.danePodmiotu,\n zalaczniki: po.zalaczniki,\n isRefused: this.checkRefused(o.id),\n pakietId: po.id\n });\n oferty.push(oferta);\n break\n }\n }\n }\n\n if (!oferty.length) {\n return <Text info>Nie zÅ‚ożono żadnej oferty{isMultiply ? ` do części: ${zamowienie.tytul}` : ''}</Text>\n }\n\n // exclude selected offer\n\n const selectedWariantId = ((this.state.rozstrzygniecie.zamowieniaNodes || []).filter(\n z => z.id === zamowienie.zamowienieNode.id)[0] || {}).wybranyWariant.id;\n\n let filteredOferty = [];\n for (let o of oferty) {\n let oferta = Object.assign({}, o);\n oferta.warianty = o.warianty.filter(w => w.id !== selectedWariantId);\n filteredOferty.push(oferta)\n }\n filteredOferty = filteredOferty.filter(o => o.warianty.length > 0);\n\n if (!filteredOferty.length) {\n return <Text info>Nie zÅ‚ożono innych ofert{isMultiply ? ` do części: ${zamowienie.tytul}` : ''}</Text>\n }\n\n return (\n <>\n <Text tag=\"h3\" accentHeader>PozostaÅ‚e oferty{isMultiply ? ` do części: \"${zamowienie.tytul}\"` : ''}</Text>\n <Text info>Liczba wyników: {filteredOferty.length}</Text>\n <GridCustom>\n {filteredOferty.sort(this.sortOferty).map(o => this.renderOferta(o))}\n </GridCustom>\n </>\n )\n }\n\n renderZalacznikiRozstrzygniecia() {\n const zalaczniki = this.state.rozstrzygniecie.zalaczniki;\n return (\n <Container>\n <Text tag=\"h2\" sectionHeader>ZaÅ‚Ä…czniki</Text>\n {zalaczniki.length > 0 && <Text info>Liczba wyników: {zalaczniki.length}</Text>}\n <ZalacznikiSelect\n label={{attrName: 'jestProtokolem', description: 'Protokół'}}\n zalaczniki={zalaczniki} />\n </Container>\n )\n }\n\n renderKomentarz() {\n if (!(this.state.rozstrzygniecie.komentarz || '').length) { return null }\n return (\n <Container>\n <Text tag=\"h2\" mainHeader>Komentarz</Text>\n <Text className=\"long-text\">{this.state.rozstrzygniecie.komentarz}</Text>\n </Container>\n )\n }\n}\n\n\nexport { OfertyOwnerResolvedStatus };\n","import React from 'react';\n\nimport { OfertyOwnerResolvedStatus } from './OfertyOwnerResolvedStatus';\n\n\nclass OfertyOffererResolvedStatus extends OfertyOwnerResolvedStatus {\n showAttachments = false;\n showFullVariants = false;\n\n // rendering\n\n renderElements() {\n return (\n <>\n {this.renderMyOfferButton()}\n {this.renderContent()}\n {this.renderKomentarz()}\n {this.state.previewOn && this.renderPreview()}\n </>\n )\n }\n}\n\n\nexport { OfertyOffererResolvedStatus };\n","import React from \"react\";\n\nimport { translateErrorMessage } from \"../../../serializers\";\nimport { Box, GridCustom, Text, ButtonStyled } from \"../../common\";\nimport { BaseComponent } from \"../common\";\nimport { BadgeAnchor, Badge } from \"@rmwc/badge\";\nimport \"@rmwc/badge/badge.css\";\nimport { fetchApi } from \"../../../fetch\";\nimport { MenuContext } from \"../../../context/menuContext\";\n\nclass OfertyOwnerPublishedStatus extends BaseComponent {\n\n static contextType = MenuContext;\n\n // handlers\n\n handleFetchSuccess(data) {\n super.handleFetchSuccess();\n this.setState({\n initializingOn: false,\n offersCount: data.offersets.length,\n offers: data.offersets,\n });\n }\n\n handleRemoveBadge = (id) => {\n fetchApi(\n `/api/badge/offerset/${id}`,\n \"DELETE\",\n {},\n {},\n () => {\n this.fetchInitialData();\n this.props.refresh();\n this.context.refreshBadges();\n }\n );\n };\n\n // helpers\n\n getAdditionalState(props) {\n return { offersCount: 0 };\n }\n\n getFetchUrl() {\n return `/api/offerset/announcement/${this.props.ogloszenie.ogloszenie.id}/list`;\n }\n\n getFetchError(message) {\n return `Nie udaÅ‚o siÄ™ pobrać danych ofert. ${translateErrorMessage(\n message\n )}`;\n }\n\n getFetchIncorrectStatusError(status) {\n return `Nie udaÅ‚o siÄ™ pobrać danych ofert. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`;\n }\n\n // rendering\n\n renderContent() {\n return (\n <>\n <Text tag=\"h2\" sectionHeader>\n Lista zÅ‚ożonych ofert\n </Text>\n <Text info className=\"text--counter\">\n Liczba wyników: {this.state.offersCount}\n </Text>\n {this.renderList()}\n </>\n );\n }\n\n renderList() {\n if (!this.state.offersCount) {\n return null;\n }\n return (\n <>\n <Text accentHeader>\n PodglÄ…d ofert bÄ™dzie dostÄ™pny po zamkniÄ™ciu ogÅ‚oszenia.\n </Text>\n <GridCustom tag=\"ul\">\n {[...this.state.offers].map((offer, index) => (\n <Box\n key={index}\n tag=\"li\"\n titleOneRow=\"Oferta\"\n flexiblewidth\n aria-hidden=\"true\"\n >\n <Text className=\"offer__box-hidden-text\"></Text>\n <Text className=\"offer__box-hidden-text\"></Text>\n <Text className=\"offer__box-hidden-text\"></Text>\n <Text className=\"offer__box-hidden-text\"></Text>\n {offer.badge && (\n <BadgeAnchor>\n <ButtonStyled\n primary\n icon=\"check\"\n onClick={() => this.handleRemoveBadge(offer.id)}\n >\n USUŃ OZNACZENIE JAKO NOWE\n </ButtonStyled>\n <Badge label=\"N\" />\n </BadgeAnchor>\n )}\n </Box>\n ))}\n </GridCustom>\n </>\n );\n }\n}\n\nexport { OfertyOwnerPublishedStatus };\n","import React from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\n\nimport {\n getLastTemporaryIdFromList,\n reformatDanePodmiotu,\n} from '../../../helpers';\nimport {\n getSerializedObject,\n getSerializedObjectErrorsFormServer,\n translateErrorMessage\n} from '../../../serializers';\nimport {\n Box,\n ButtonStyled,\n Container,\n DialogCustom,\n FieldWithLabel,\n GridCustom,\n GridCellCustom,\n MenuBasic,\n Steps,\n Text,\n TextFieldCustom,\n} from '../../common';\nimport { FormBaseComponent, Zalaczniki } from '../common';\nimport { FormOfertaOgloszeniodawca, OfertaPreview } from '../oferty';\nimport { FormCzescRozstrzygniecia } from './FormCzescRozstrzygniecia';\n\n\nconst MAX_ATTACHMENTS_NUMBER = 20;\n\n\nclass FormRozstrzygniecie extends FormBaseComponent {\n\n componentDidMount() {\n window.scrollTo(0, 0);\n this.handleSetCurrentMenuLink(0);\n\n if (this.props.isNew) {\n this.setState({initializingOn: false});\n } else {\n this.fetchInitialData();\n }\n }\n\n // handlers\n handleFetchSuccess(data) {\n this.xhrFetch = null;\n data = getSerializedObject(data, {addTemporaryId: true}).rozstrzygniecie;\n for (let z of data.zamowieniaNodes) {\n z.wybranyWariant = z.wybranyWariant.id || null;\n }\n this.setState(Object.assign(\n data,\n {initializingOn: false})\n );\n }\n\n handleSetCurrentMenuLink(id) {\n this.setState(prevState =>\n {\n const menuLinks = prevState.menuLinks;\n let next = null, prev=null, name=null;\n for (let i=0; i < menuLinks.length; i++) {\n if (id === menuLinks[i].id) {\n name = menuLinks[i].name;\n if (i > 0) {\n prev = {\n label: menuLinks[i - 1].label,\n id: menuLinks[i - 1].id,\n };\n }\n if (i < menuLinks.length - 1) {\n next = {\n label: menuLinks[i + 1].label,\n id: menuLinks[i + 1].id,\n };\n }\n }\n }\n return {\n currentMenuLink: {id, name, next, prev}\n }\n }\n );\n }\n\n handleCloseForm = () => {\n this.setState({offerFormOn: false, editingOffersetId: null});\n }\n\n handleSubmitOfertaForm = (data, isNew) => {\n data = getSerializedObject(data).pakietOfert;\n data.danePodmiotu = reformatDanePodmiotu(data.danePodmiotu);\n // set dict of orderNode and offer ids\n let idsDict = {};\n for (let o of data.oferty) {\n idsDict[o.zamowienieNode.id] = o.id;\n }\n this.setState(\n prevState => {\n if (isNew) {\n return {\n offerFormOn: false,\n pakietyOfert: [...prevState.pakietyOfert, data],\n zamowieniaNodes: prevState.zamowieniaNodes.map(z => {\n if (idsDict[z.id]) {\n const ofertaId = idsDict[z.id];\n z.oferty = [...z.oferty, {id: ofertaId, temporaryId: ofertaId, isRefused: false}]\n }\n return z\n }),\n }\n } else {\n return {\n offerFormOn: false,\n editingOffersetId: null,\n pakietyOfert: prevState.pakietyOfert.map(po => {\n if (po.id === data.id) {\n return data\n }\n return po\n }),\n }\n }\n }\n );\n }\n\n handleCloseOfferPreview = () => {\n this.setState({offerPreviewOn: false, previewedOfferId: null});\n }\n\n handleAddZalacznik = (data) => {\n data = data || {};\n\n this.setState(prevState => ({\n zalaczniki: [...prevState.zalaczniki, {\n id: null,\n temporaryId: getLastTemporaryIdFromList(prevState.zalaczniki) + 1,\n jestProtokolem: false,\n nazwa: '',\n plik: {\n id: null,\n uri: '',\n nazwa: '',\n dataUtworzenia: '',\n ktoUtworzyl: {imie: '', nazwisko: ''},\n },\n plikDoWgrania: data.plikDoWgrania || null,\n }],\n }))\n }\n\n handleSaveZalacznikAttributes = (temporaryId, data) => {\n this.setState(prevState => {\n return {zalaczniki: prevState.zalaczniki.map(z => {\n if (z.temporaryId === temporaryId) {\n return Object.assign(z, data)\n } else {\n return z\n }\n })}\n });\n }\n\n handleRemoveZalacznik = (temporaryId) => {\n this.setState(prevState => {\n return {zalaczniki: prevState.zalaczniki.filter(z => z.temporaryId !== temporaryId)}\n });\n }\n\n handleChangeZalacznikIsProtocol = (checked, temporaryId) => {\n this.setState(prevState => {\n let zalaczniki = [];\n for (let z of prevState.zalaczniki) {\n if (z.temporaryId === temporaryId) {\n z.jestProtokolem = checked;\n } else {\n if (checked) {\n z.jestProtokolem = false;\n }\n }\n zalaczniki.push(z);\n }\n return {zalaczniki: zalaczniki}\n });\n }\n\n handleNoOfferSelectedChange = (checked, zamowienieId) => {\n this.setState(prevState => {\n return {zamowieniaNodes: prevState.zamowieniaNodes.map(z => {\n if (z.id === zamowienieId) {\n z.zadnaOfertaWybrana = checked;\n if (checked) {\n z.wybranyWariant = null;\n }\n }\n return z\n })}\n });\n }\n\n handleRefuseOffer = (zamowienieId, ofertaId) => {\n this.setOfferRefuseValue(zamowienieId, ofertaId, true);\n }\n\n handleRestoreOffer = (zamowienieId, ofertaId) => {\n this.setOfferRefuseValue(zamowienieId, ofertaId, false);\n }\n\n handleSelectWariant = (checked, zamowienieNode, wariantId) => {\n this.setState(prevState => ({\n zamowieniaNodes: prevState.zamowieniaNodes.map(z => {\n if (z.id === zamowienieNode) {\n if (checked) {\n z.wybranyWariant = wariantId;\n z.zadnaOfertaWybrana = false;\n } else {\n z.wybranyWariant = null;\n }\n }\n return z\n })\n }));\n }\n\n handleRemoveOfertaZewnetrzna = (pakietOfertId) => {\n this.setState(prevState => {\n // get variants ids for offerset\n let variantsIds = [];\n for (let po of prevState.pakietyOfert) {\n if (po.id === pakietOfertId) {\n for (let o of po.oferty) {\n variantsIds = [...variantsIds, ...o.warianty.map(w => w.id)];\n }\n break\n }\n }\n return {\n ofertyDoUsuniecia: [...prevState.ofertyDoUsuniecia, pakietOfertId],\n zamowieniaNodes: prevState.zamowieniaNodes.map(z => {\n if (variantsIds.includes(z.wybranyWariant)) {\n z.wybranyWariant = null;\n }\n return z\n }),\n }\n });\n }\n\n handleFetchSaveSuccess(data) {\n this.xhrFetchSave = null;\n window.location.reload();\n }\n\n handleShowSaveErrors = (errors) => {\n this.xhrFetchSave = null;\n const errors_ = getSerializedObjectErrorsFormServer(\n errors,\n this.getNotSerializedDataForSaving(),\n ['ofertyDoUsuniecia', 'zamowieniaNodes', 'oferty', 'zalaczniki']\n );\n this.setState(\n prevState => ({\n savingOn: false,\n saveBtnText: this.saveBtnDefaultText,\n errors: errors_,\n errorsDialogOn: Object.values(errors_.zamowieniaNodes).filter(\n z => (z.zadnaOfertaWybrana || []).length > 0).length > 0,\n })\n );\n }\n\n // helpers\n\n preState(props) {\n // it has to be here, because 'getMenuLinks' function needs it\n this.handleSetCurrentMenuLink = this.handleSetCurrentMenuLink.bind(this);\n }\n\n formPreState(props) {\n this.saveBtnDefaultText = 'Publikuj rozstrzygniÄ™cie';\n }\n\n getAdditionalState(props) {\n\n const getOfertyByZamowienieNodeId = (zamowienieNodeId) => {\n let oferty = [];\n for (let po of this.props.pakietyOfert) {\n for (let o of po.oferty) {\n if (zamowienieNodeId === o.zamowienieNode.id) {\n oferty.push({id: o.id, temporaryId: o.id, isRefused: false});\n }\n }\n }\n return oferty\n }\n\n const zamowienia = this.props.ogloszenie.zamowienia;\n return {\n isNew: props.isNew,\n offerFormOn: false,\n editingOffersetId: null,\n offerPreviewOn: false,\n previewedOfferId: null,\n errorsDialogOn: false,\n menuLinks: this.getMenuLinks(zamowienia),\n currentMenuLink: {\n id: null,\n name: null,\n next: null,\n prev: null,\n },\n pakietyOfert: [...this.props.pakietyOfert],\n nieMaWiecejOfert: false,\n ofertyDoUsuniecia: [],\n zalaczniki: [],\n komentarz: '',\n zamowieniaNodes: zamowienia.map(z => ({\n id: z.zamowienieNode.id,\n temporaryId: z.id,\n zadnaOfertaWybrana: false,\n wybranyWariant: null,\n oferty: getOfertyByZamowienieNodeId(z.zamowienieNode.id),\n })),\n };\n }\n\n getFetchUrl() {\n return `/api/announcements/${this.props.ogloszenie.ogloszenie.id}/settlement`\n }\n\n getFetchError(message) {\n message = translateErrorMessage(message);\n if (this.state.isNew) {\n return `Nie udaÅ‚o siÄ™ pobrać danych do rozstrzygnieca ogÅ‚oszenia. ${message}`\n }\n return `Nie udaÅ‚o siÄ™ pobrać danych do rozstrzygnieca ogÅ‚oszenia. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n if (this.state.isNew) {\n return `Podczas pobierania danych do rozstrzygnieca ogÅ‚oszenia wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}`\n }\n return `Podczas pobierania danych do rozstrzygnieca ogÅ‚oszenia wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n getMenuLinks(zamowienia) {\n let index = 0;\n let links = [\n {name: 'offers_completing', id: index++, label: 'Kompletowanie ofert', onClick: this.handleSetCurrentMenuLink},\n ];\n for (let z of zamowienia) {\n links.push({name: z.id, id: index, label: `Oferty${zamowienia.length > 1 ? ' do części ' + index : ''}`, onClick: this.handleSetCurrentMenuLink});\n index++;\n }\n links.push({name: 'summary', id: index, label: 'Podsumowanie', onClick: this.handleSetCurrentMenuLink});\n return links\n }\n\n setOfferRefuseValue(zamowienieId, ofertaId, isRefused) {\n this.setState(prevState => {\n let wariantIds = [];\n if (isRefused) {\n // get ids of variants for the offer to unselect if selected\n for (let po of prevState.pakietyOfert) {\n for (let o of po.oferty) {\n if (o.id === ofertaId) {\n wariantIds = o.warianty.map(w => w.id);\n }\n }\n }\n }\n\n // get previously selected wariant to check if it hasn't been already refused\n let prevWybranyWariant = null;\n for (let z of prevState.zamowieniaNodes) {\n if (z.id === zamowienieId) {\n prevWybranyWariant = z.wybranyWariant;\n }\n }\n\n return {\n zamowieniaNodes: prevState.zamowieniaNodes.map(z => {\n if (z.id === zamowienieId) {\n z.oferty = z.oferty.map(o => {\n if (o.id === ofertaId) {\n o.isRefused = isRefused;\n }\n return o\n });\n z.wybranyWariant = isRefused && wariantIds.includes(prevWybranyWariant) ? null : prevWybranyWariant;\n }\n return z\n }),\n }\n });\n }\n\n getSaveUrl() {\n return `/api/announcements/${this.props.ogloszenie.ogloszenie.id}/resolve`\n }\n\n getSaveMethod() {\n return this.props.isNew ? 'POST' : 'PUT'\n }\n\n getDataForSaving() {\n return getSerializedObject(\n this.getNotSerializedDataForSaving(),\n {toServer: true, removeTemporaryId: true}\n )\n }\n\n getNotSerializedDataForSaving() {\n return {\n ofertyDoUsuniecia: this.state.ofertyDoUsuniecia,\n zamowieniaNodes: this.state.zamowieniaNodes,\n komentarz: this.state.komentarz,\n zalaczniki: this.state.zalaczniki.map(z => ({\n id: z.id,\n temporaryId: z.temporaryId,\n nazwa: z.nazwa,\n plik: z.plik.id,\n jestProtokolem: z.jestProtokolem\n })),\n }\n }\n\n // rendering\n\n renderContent() {\n const currentMenuLinkName = this.state.currentMenuLink.name;\n return (\n <>\n <GridCustom flexL noWrap>\n <GridCellCustom>\n <MenuBasic\n addProgressIcon={true}\n children={this.state.menuLinks}\n currentMenuLink={this.state.currentMenuLink.id}\n disabled={this.state.savingOn}\n disabledFrom={this.state.nieMaWiecejOfert ? null : 1}\n errors={{}}\n title={`${this.state.isNew ? 'Dodawanie' : 'Edycja'} rozstrzygniÄ™cia`} />\n </GridCellCustom>\n <GridCellCustom className=\"offer-resolve__container\" id=\"offer-resolve_content\">\n {currentMenuLinkName === 'offers_completing' && this.renderOffersCompleting()}\n {this.props.ogloszenie.zamowienia.map(z => {\n if (currentMenuLinkName === z.id) {\n return this.renderOffers(z)\n }\n return null\n })}\n {currentMenuLinkName === 'summary' && this.renderSummary()}\n </GridCellCustom>\n </GridCustom>\n {this.state.offerFormOn && this.renderFormOferta()}\n {this.state.offerPreviewOn && this.renderOfertaPreview()}\n </>\n )\n }\n\n renderOffersCompleting() {\n const pakietyOfertZewnetrzne = this.state.pakietyOfert.filter(\n po => po.ktoUtworzyl.id === this.props.user.id);\n return (\n <>\n <Container>\n <span className=\"sr-only\" role=\"alert\">JeÅ›li masz oferty spoza Bazy KonkurencyjnoÅ›ci, dodaj je klikajÄ…c w guzik \"Dodaj ofertÄ™, która wpÅ‚ynęła innym kanaÅ‚em\". JeÅ›li nie masz innych ofert, lub wprowadziÅ‚eÅ› wszystkie, które wpÅ‚ynęły innym kanaÅ‚em, zaznacz checkbox \"Nie ma wiÄ™cej ofert\".</span>\n <GridCustom flexEnd>\n <ButtonStyled\n add\n disabled={this.state.nieMaWiecejOfert}\n onClick={() => this.setState({offerFormOn: true})}\n >\n Dodaj ofertÄ™, która wpÅ‚ynęła innym kanaÅ‚em\n </ButtonStyled>\n </GridCustom>\n <Text tag=\"h1\" sectionHeader>Lista ofert zÅ‚ożonych poza BazÄ… KonkurencyjnoÅ›ci</Text>\n <Text info>Liczba wyników: {pakietyOfertZewnetrzne.length}</Text>\n <GridCustom tag=\"ul\">\n {pakietyOfertZewnetrzne.map(oferta => this.renderOfertaZewnetrzna(oferta))}\n </GridCustom>\n <GridCustom centerHorizontal>\n <Checkbox\n checked={this.state.nieMaWiecejOfert}\n className=\"checkbox--btn\"\n label=\"Nie ma wiÄ™cej ofert\"\n onChange={event => this.setState({nieMaWiecejOfert: event.target.checked})}\n />\n </GridCustom>\n </Container>\n <Steps\n disabled={this.state.nieMaWiecejOfert ? null : 1}\n hasNext\n nextLabel={this.state.currentMenuLink.next.label}\n onNextClick={() => this.handleSetCurrentMenuLink(this.state.currentMenuLink.next.id)}\n />\n </>\n )\n }\n\n renderOfertaZewnetrzna(pakietOfert) {\n const { adres, nazwa } = pakietOfert.danePodmiotu;\n const zamowienia = this.props.ogloszenie.zamowienia;\n const isRemoved = this.state.ofertyDoUsuniecia.includes(pakietOfert.id);\n return (\n <Box\n boxWithMenu={isRemoved ? null : (\n <>\n <h3 className=\"sr-only\">Menu wiÄ™cej opcji ogÅ‚oszenia</h3>\n <ul>\n <li>\n <ButtonStyled\n className=\"box__menu-item\"\n onClick={() => this.setState({offerFormOn: true, editingOffersetId : pakietOfert.id})}>\n Edytuj\n </ButtonStyled>\n <ButtonStyled className=\"box__menu-item\" onClick={() => this.handleRemoveOfertaZewnetrzna(pakietOfert.id)}>UsuÅ„</ButtonStyled>\n </li>\n </ul>\n </>\n )}\n key={pakietOfert.id}\n titleOneRow={`Oferta ${nazwa}`}\n tag=\"li\"\n >\n <FieldWithLabel label=\"Nazwa podmiotu\">\n <Text className=\"long-text\">{nazwa}</Text>\n </FieldWithLabel>\n <FieldWithLabel label=\"Miejscowość\">\n <Text className=\"long-text\">{adres.miejscowosc}{adres.kraj !== 'Polska' ? ', ' + adres.kraj : ''}</Text>\n </FieldWithLabel>\n {zamowienia.length > 1 && (\n <FieldWithLabel label=\"ZÅ‚ożona do części\">\n {(pakietOfert.oferty || []).map(o => (\n <Text className=\"long-text\" key={o.id}>- {((o.zamowienieNode || {}).ostatniaWersja || {}).tytul}</Text>\n ))}\n </FieldWithLabel>\n )}\n {isRemoved ? (\n <Text error>Oferta zostanie usuniÄ™ta z chwilÄ… zapisania rozstrzygniÄ™cia.</Text>\n ) : (\n <ButtonStyled\n ariaLabel={`Pokaż szczegóły oferty ${nazwa}`}\n className='corner-button'\n primary\n onClick={() => this.setState({offerPreviewOn: true, previewedOfferId: pakietOfert.id})}\n >Pokaż szczegóły</ButtonStyled>\n )\n }\n </Box>\n )\n }\n\n renderOffers(zamowienie) {\n let offersStateDict = {};\n let wybranyWariant = null;\n for (let z of this.state.zamowieniaNodes) {\n if (z.id === zamowienie.zamowienieNode.id) {\n wybranyWariant = z.wybranyWariant;\n }\n for (let o of z.oferty) {\n offersStateDict[o.id] = o.isRefused;\n }\n }\n\n let warianty = [];\n const ofertyDoUsuniecia = this.state.ofertyDoUsuniecia;\n for (let po of this.state.pakietyOfert) {\n if (ofertyDoUsuniecia.includes(po.id)) {\n continue\n }\n for (let o of po.oferty) {\n if (o.zamowienieNode.id === zamowienie.zamowienieNode.id) {\n for (let w of o.warianty) {\n warianty.push(Object.assign({}, w, {\n nazwaOferenta: (po.danePodmiotu || {}).nazwa || '',\n isRefused: offersStateDict[o.id] || false,\n isSelected: wybranyWariant === w.id,\n ofertaId: o.id,\n zalaczniki: po.zalaczniki || [],\n }));\n }\n }\n }\n }\n\n let zadnaOfertaWybrana = false;\n for (let z of this.state.zamowieniaNodes) {\n if (z.id === zamowienie.zamowienieNode.id) {\n zadnaOfertaWybrana = z.zadnaOfertaWybrana;\n break\n }\n }\n\n return (\n <GridCellCustom key={zamowienie.id} className=\"offer-resolve__container\">\n <Container>\n <span className=\"sr-only\" role=\"alert\">Możesz odrzucić oferty, wybrać zwyciÄ™skÄ… ofertÄ™ lub zaznaczyć, że nie wybierasz żadnej oferty.</span>\n <FormCzescRozstrzygniecia\n hasMultiplyZamowienia={this.props.ogloszenie.zamowienia.length > 1}\n zadnaOfertaWybrana={zadnaOfertaWybrana}\n warianty={warianty}\n zamowienie={zamowienie}\n onNoOfferSelectedChange={this.handleNoOfferSelectedChange}\n onOfferRefuse={this.handleRefuseOffer}\n onOfferRestore={this.handleRestoreOffer}\n onWariantSelect={this.handleSelectWariant}\n />\n </Container>\n <Steps\n hasNext\n hasPrev\n nextLabel={this.state.currentMenuLink.next.label}\n prevLabel={this.state.currentMenuLink.prev.label}\n onNextClick={() => this.handleSetCurrentMenuLink(this.state.currentMenuLink.next.id)}\n onPrevClick={() => this.handleSetCurrentMenuLink(this.state.currentMenuLink.prev.id)}\n />\n </GridCellCustom>\n )\n }\n\n renderSummary() {\n const formLocked = this.state.savingOn;\n const fetchSaveError = this.state.fetchSaveError;\n return (\n <GridCellCustom className=\"offer-resolve__container\">\n <Container>\n <span className=\"sr-only\" role=\"alert\">Podsumowanie: możesz dodać zaÅ‚Ä…cznik, oznaczyć wybrany zaÅ‚Ä…cznik jako protokół, a nastÄ™pnie opublikować rozstrzygniÄ™cie.</span>\n <Text tag=\"h2\" mainHeader>Podsumowanie</Text>\n {this.renderSelectedOfertyList()}\n {this.renderZalaczniki()}\n {this.renderKomentarz()}\n </Container>\n <Steps\n disabled={formLocked}\n hasPrev\n prevLabel={this.state.currentMenuLink.prev.label}\n onPrevClick={() => this.handleSetCurrentMenuLink(this.state.currentMenuLink.prev.id)}\n />\n <GridCustom flexEnd>\n <ButtonStyled\n className=\"btn btn--main\"\n disabled={formLocked}\n save\n onClick={this.handleSave}\n >{this.state.saveBtnText}</ButtonStyled>\n </GridCustom>\n {fetchSaveError.length > 0 && <Text error role=\"alert\">{fetchSaveError}</Text>}\n {this.state.errorsDialogOn && this.renderErrorsDialog()}\n </GridCellCustom>\n )\n }\n\n renderFormOferta() {\n return (\n <DialogCustom\n className=\"dialog-long-content\"\n onClose={this.handleCloseForm}\n >\n <FormOfertaOgloszeniodawca\n isNew={this.state.editingOffersetId === null}\n ogloszenieId={this.props.ogloszenie.ogloszenie.id}\n ofertaId={this.state.editingOffersetId}\n zamowienia={this.props.ogloszenie.zamowienia.map(z => ({\n id: z.id,\n zamowienieNode: z.zamowienieNode,\n tytul: z.tytul,\n czyWariantowe: z.czyWariantowe,\n }))}\n onCloseForm={this.handleCloseForm}\n onSubmitForm={this.handleSubmitOfertaForm}\n />\n </DialogCustom>\n )\n }\n\n renderOfertaPreview() {\n if (!this.state.previewedOfferId) { return null }\n return <OfertaPreview\n ofertaId={this.state.previewedOfferId}\n ogloszenieId={this.props.ogloszenie.ogloszenie.id}\n onClosePreview={this.handleCloseOfferPreview} />\n }\n\n renderZalaczniki() {\n return (\n <Container>\n <Zalaczniki\n checkAttributeName=\"jestProtokolem\"\n checkLabel=\"Oznacz jako protokół\"\n contextForSaving='settlement'\n errors={this.state.errors.zalaczniki || {}}\n formLocked={this.state.savingOn}\n isPreview={false}\n maxLength={MAX_ATTACHMENTS_NUMBER}\n withCheck={true}\n zalaczniki={this.state.zalaczniki}\n addZalacznik={this.handleAddZalacznik}\n removeZalacznik={this.handleRemoveZalacznik}\n saveZalacznikAttributes={this.handleSaveZalacznikAttributes}\n onCheckChange={this.handleChangeZalacznikIsProtocol}\n >\n <Text info className=\"text--counter\">Liczba wyników: {this.state.zalaczniki.length}</Text>\n <Text info>Możesz zaÅ‚Ä…czyć maksymalnie {MAX_ATTACHMENTS_NUMBER} plików.</Text>\n </Zalaczniki>\n </Container>\n )\n }\n\n renderKomentarz() {\n const isKomentarzInvalid = (this.state.errors.komentarz || []).length > 0;\n return (\n <Container>\n <FieldWithLabel label=\"Komentarz\" tag=\"label\" labelFor=\"notes_id\">\n <TextFieldCustom\n aria-describedby={isKomentarzInvalid ? 'notes_error' : null}\n aria-label={`Komentarz, maksymalna liczba znaków: 1000. Wpisano ${this.state.komentarz.length} znaków.`}\n aria-valuemax={1000}\n characterCount\n clearFieldContext=\"komentarz\"\n disabled={this.state.savingOn}\n invalid={isKomentarzInvalid}\n fullwidth\n id=\"notes_id\"\n maxLength={1000}\n textarea\n value={this.state.komentarz}\n onChange={event => this.setState({komentarz: event.target.value})}\n onClear={(ev) => this.setState({komentarz: ''})} />\n {isKomentarzInvalid && <ul id=\"notes_error\">{this.state.errors.komentarz.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n </FieldWithLabel>\n </Container>\n )\n }\n\n renderSelectedOfertyList() {\n const zamowienia = this.props.ogloszenie.zamowienia;\n if (zamowienia.length === 1) {\n return this.renderZamowienieSummary(zamowienia[0], false)\n }\n return zamowienia.map(z => this.renderZamowienieSummary(z, true))\n }\n\n renderZamowienieSummary(zamowienie, isMultiply) {\n let zamowienieFromState = null;\n for (let z of this.state.zamowieniaNodes) {\n if (z.id === zamowienie.zamowienieNode.id) {\n zamowienieFromState = z;\n }\n }\n\n if (!zamowienieFromState) {\n return this.renderUnexpectedSummaryPartError(zamowienie, isMultiply)\n }\n\n if (zamowienieFromState.zadnaOfertaWybrana) {\n return this.renderNoOfferSelected(zamowienie, isMultiply)\n }\n\n if (zamowienieFromState.wybranyWariant === null) {\n return this.renderNoChoice(zamowienie, isMultiply)\n }\n\n // get selectedWariant data\n let wybranyWariant = null;\n for (let po of this.state.pakietyOfert) {\n for (let o of po.oferty) {\n for (let w of o.warianty) {\n if (w.id === zamowienieFromState.wybranyWariant) {\n wybranyWariant = Object.assign(\n {}, w, {nazwaOferenta: po.danePodmiotu.nazwa});\n break\n }\n }\n if (wybranyWariant !== null) {\n break\n }\n }\n if (wybranyWariant !== null) {\n break\n }\n }\n\n if (wybranyWariant === null) {\n return this.renderUnexpectedSummaryPartError(zamowienie, isMultiply);\n }\n\n let info;\n if (isMultiply) {\n info = <Text label>Dla części \"{zamowienie.tytul}\" zostaÅ‚a wybrana oferta</Text>;\n } else {\n info = <Text label>ZostaÅ‚a wybrana oferta</Text>;\n }\n\n return (\n <div key={zamowienie.id} className=\"offer-resolve__summary\">\n {info}\n <Box titleOneRow={`${wybranyWariant.cena} PLN`}>\n <Text className=\"long-text\">{wybranyWariant.nazwaOferenta}</Text>\n {wybranyWariant.opis.length > 0 && (\n <FieldWithLabel label=\"Opis\">\n <Text className=\"long-text\">{wybranyWariant.opis}</Text>\n </FieldWithLabel>\n )}\n </Box>\n </div>\n )\n }\n\n renderNoOfferSelected(zamowienie, isMultiply) {\n if (isMultiply) {\n return (\n <div className=\"offer-resolve__summary\" key={zamowienie.id}>\n <Text label>Dla części \"{zamowienie.tytul}\" nie wybrano żadnej oferty.</Text>\n </div>\n )\n }\n return (\n <div className=\"offer-resolve__summary\">\n <Text label>Nie wybrano żadnej oferty.</Text>\n </div>\n )\n }\n\n renderNoChoice(zamowienie, isMultiply) {\n if (isMultiply) {\n return (\n <div key={zamowienie.id} className=\"offer-resolve__summary\">\n <Text label>Dla części \"{zamowienie.tytul}\"</Text>\n <Text error>Nie dokonano wyboru</Text>\n </div>\n )\n }\n return (\n <div className=\"offer-resolve__summary\">\n <Text>Dla oferty</Text>\n <Text error>Nie dokonano wyboru</Text>\n </div>\n )\n }\n\n renderUnexpectedSummaryPartError(zamowienie, isMultiply) {\n if (isMultiply) {\n return (\n <Text error key={zamowienie.id} role=\"alert\">\n WystÄ…piÅ‚ nieoczekiwany problem z częściÄ… \"{zamowienie.tytul}\"\n </Text>\n )\n }\n return <Text error role=\"alert\">WystÄ…piÅ‚ nieoczekiwany problem.</Text>\n }\n\n renderErrorsDialog() {\n const errors = this.state.errors.zamowieniaNodes || {};\n const zamowienia = this.props.ogloszenie.zamowienia;\n const isMultiply = zamowienia.length > 1;\n return (\n <DialogCustom\n className=\"dialog\"\n dialogTitleError=\"Podczas próby rozstrzygniÄ™cia wystÄ…piÅ‚y bÅ‚Ä™dy dotyczÄ…ce wyboru ofert.\"\n onClose={() => this.setState({errorsDialogOn: false})}\n >\n <>\n {zamowienia.map(z => {\n const zamowienieErrors = (errors[z.zamowienieNode.id] || {}).zadnaOfertaWybrana || [];\n if (zamowienieErrors.length) {\n let info;\n if (isMultiply) {\n info = <Text error>Dla części \"{z.tytul}\" wystÄ…piÅ‚y nastÄ™pujÄ…ce bÅ‚Ä™dy:</Text>;\n } else {\n info = <Text error>Dla oferty wystÄ…piÅ‚y nastÄ™pujÄ…ce bÅ‚Ä™dy:</Text>;\n }\n return (\n <div key={z.id} role=\"status\" aria-live=\"polite\">\n {info}\n {zamowienieErrors.map((e, i) => <Text error key={i}>{e}</Text>)}\n </div>\n )\n }\n return null\n })}\n <GridCustom centerVertical flexEnd>\n <ButtonStyled onClick={() => this.setState({errorsDialogOn: false})} primary>OK</ButtonStyled>\n </GridCustom>\n </>\n </DialogCustom>\n )\n }\n}\n\n\nexport { FormRozstrzygniecie };\n","import React, { Component } from 'react';\nimport { Icon } from '@rmwc/icon';\n\nimport { fetchApi } from '../../../fetch';\nimport { serializeObjectList, translateErrorMessage } from '../../../serializers';\nimport { ButtonStyled, DialogCustom, FieldWithLabel, GridCustom, Text } from '../../common';\n\n\nclass ListaWersji extends Component{\n\n constructor(props) {\n super(props);\n\n this.state ={\n initializingOn: true,\n versions: [],\n error: '',\n };\n\n this.xhrFetch = null;\n }\n\n // basic functions\n\n componentDidMount() {\n // get version list from server\n this.xhrFetch = fetchApi(\n `/api/announcements/${this.props.ogloszenieId}/versions`,\n 'GET',\n {},\n {mode: 'advertiser'},\n this.handleFetchVersionListSuccess,\n this.handleFetchVersionListError,\n this.handleFetchVersionListIncorrectStatus,\n );\n }\n\n componentWillUnmount() {\n // abort api request if exist\n if (this.xhrFetch !== null) {\n this.xhrFetch.abort();\n }\n }\n\n // handlers\n\n handleFetchVersionListSuccess = (data) => {\n this.xhrFetch = null;\n this.setState({initializingOn: false, versions: serializeObjectList(data.versions)});\n }\n\n handleFetchVersionListError = (data) => {\n this.xhrFetch = null; // clean xhr object\n this.setState({initializingOn: false, error: `Podczas pobierania listy wersji wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d: ${translateErrorMessage(data.message)}`});\n }\n\n handleFetchVersionListIncorrectStatus = (status) => {\n this.xhrFetch = null; // clean xhr object\n this.setState({initializingOn: false, error: `Podczas pobierania listy wersji wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`});\n }\n\n handleCloseDialog = () => {\n this.props.closeVersionDialog();\n }\n\n // helpers\n\n sortVersions(versions) {\n let draft = null, published = [];\n for (let v of versions) {\n if (v.status.id === this.props.roboczeStatusId) {\n draft = v;\n } else {\n published.push(v);\n }\n }\n\n // sort published versions by id\n published.sort((v1, v2) => {\n return v1.id > v2.id ? -1 : 1\n })\n\n return [draft, published]\n }\n\n // rendering\n\n render() {\n let content = null;\n const { error } = this.state;\n\n if (this.state.initializingOn) {\n content = <Text info>Trwa pobieranie danych z serwera...</Text>;\n } else {\n content = error.length > 0 ? this.renderError() : this.renderVersionList();\n }\n return (\n <DialogCustom \n onClose={this.handleCloseDialog}\n dialogTitle={(error.length > 0) ? error : `Wszystkie wersje ogÅ‚oszenia`}\n >\n {content}\n </DialogCustom>\n )\n }\n\n renderError() {\n return (\n <GridCustom centerVertical flexEnd>\n <ButtonStyled onClick={this.handleCloseDialog} primary>OK</ButtonStyled>\n </GridCustom>\n )\n }\n\n renderVersionList() {\n let content = null;\n if (this.state.versions.length) {\n // sort versions\n let [draft, published] = this.sortVersions(this.state.versions);\n\n const ogloszenieId = this.props.ogloszenieId;\n let currentlyVisibleMarker = (\n <>\n <Icon icon=\"find_in_page\" aria-hidden=\"true\" style={{'marginRight': 3}}/>\n <Text>Aktualnie przeglÄ…dasz</Text>\n </>\n );\n\n content = (\n <>\n {this.renderDraftList(draft, currentlyVisibleMarker)}\n {published.length > 0 ? (\n <FieldWithLabel label=\"Wersje opublikowane:\">\n {published.map((v, index) => (\n <GridCustom centerVertical key={v.id} className=\"published-version__item\">\n <button onClick={() => this.props.reload(index === 0 ? `/ogloszenia/${ogloszenieId}` : `/ogloszenia/${ogloszenieId}/wersja${v.id}`)} className=\"link-text\">\n Wersja {published.length - index}, opublikowana {v.dataOpublikowania}{index === 0 ? ' - obowiÄ…zujÄ…ca' : ''}\n </button>\n {parseInt(this.props.id) === v.id && currentlyVisibleMarker}\n {!v.isCreatedByAdvertiser &&\n <Text className=\"published-version__author-info\">\n Utworzona przez pracownika instytucji\n </Text>\n }\n </GridCustom>\n ))}\n </FieldWithLabel>\n ) : <Text info>Brak wersji opublikowanych</Text>}\n </>\n );\n } else {\n content = <Text info>To ogÅ‚oszenie nie ma innych wersji.</Text>;\n }\n return (\n <>\n {content}\n <GridCustom centerVertical flexEnd>\n <ButtonStyled onClick={this.handleCloseDialog} primary>Zamknij</ButtonStyled>\n </GridCustom>\n </>\n )\n }\n\n renderDraftList(draft, currentlyVisibleMarker) {\n if (!this.props.isAuthor && !draft) { return null }\n return (\n <FieldWithLabel label=\"Wersje robocze:\">\n {draft !== null ? (\n <GridCustom centerVertical>\n <button onClick={() => this.props.reload(`/ogloszenia/${this.props.ogloszenieId}/robocza`)} className=\"link-text\">\n Wersja robocza, modyfikowana {draft.dataModyfikacji}\n </button>\n {parseInt(this.props.id) === draft.id && currentlyVisibleMarker}\n </GridCustom>\n ) : <Text info>Brak wersji roboczych</Text>}\n </FieldWithLabel>\n )\n }\n}\n\n\nexport { ListaWersji };\n","import React, { useContext, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\n\nimport { UserContext } from '../../../context/user-context';\nimport { isAdvertisementLocked, getUserFullName } from '../../../helpers';\nimport {useOneTimeFetchApi, usePutFetchApi} from '../../../hooks';\nimport { getSerializedObject } from '../../../serializers';\nimport { URLS } from '../../../urls/frontend';\nimport {\n ButtonStyled,\n CancelSaveButtonsRow,\n DialogCustom,\n FieldWithLabel,\n GridCustom,\n Text\n} from '../../common';\n\n\nexport const ManageAdvertisementButtons = ({\n advertisement, onChangeAdvertisementStatus\n}) => {\n\n let { data, loadingOn: initializationOn } = useOneTimeFetchApi({\n url: `/api/admin/permissions_ads_projects_enrollments/ad/${advertisement.ogloszenie.id}`,\n });\n\n const isLocked = isAdvertisementLocked(advertisement.ogloszenie.status);\n let history = useHistory();\n const [confirmDialogOn, setConfirmDialogOn] = useState(false);\n const [loadingOn, setLoadingOn] = useState(false);\n const [fetchError, setFetchError] = useState(null);\n\n function handleFetchSuccess(data) {\n setConfirmDialogOn(false);\n onChangeAdvertisementStatus(\n getSerializedObject(data).ogloszenie.status)\n }\n\n usePutFetchApi({\n url: `/api/admin/announcements/${advertisement.ogloszenie.id}/${isLocked ? 'un' : ''}lock`,\n callbackPutSuccess: handleFetchSuccess,\n loadingOn,\n setLoadingOn,\n setFetchError,\n message403error:\n `Nie masz uprawnieÅ„ do ${isLocked ? 'odblokowania' : 'blokowania'}\n tego ogÅ‚oszenia.`,\n });\n\n const { permissions: userBasicPermission } = useContext(UserContext);\n\n if (initializationOn || !data) { return null}\n\n function hasPermission(parentName, name) {\n return (data.permission[parentName] || {})[name] || false\n }\n\n // what's now? If there is no base permission, return null\n if (!hasPermission('advertisementAdministration', 'searchNPreviewData')) {\n return null\n }\n\n function handleOpenConfirmDialog() {\n setFetchError(null);\n setConfirmDialogOn(true);\n }\n\n function handleCloseConfirmDialog() {\n setConfirmDialogOn(false);\n }\n\n function handleLock() {\n setLoadingOn(true);\n }\n\n function handleGoToAdvertisementPage() {\n history.push(\n URLS.advertisementsEdit.getUrl(advertisement.ogloszenie.id));\n }\n\n const {ktoUtworzyl: advertiser = {}} = advertisement.ogloszenie;\n\n function handleGoToManageUserPage() {\n history.push(URLS.usersDetails.getUrl(advertiser.id));\n }\n\n function handleFilterProjectsByUserEmail() {\n history.push(\n `${URLS.managementProjects.path}?email=${advertiser.email}&sort=type&strona=1`);\n }\n\n function handleFilterAdvertisementsByUserEmail() {\n const ADVERTISEMENTS_GET_COMMON_URL_PARAMS =\n '&sort=announcementNumber_desc&statusOgl=all&strona=1&typAdresu=all' +\n '&typNumeruIdent=all';\n history.push(\n `${URLS.managementAdvertisements.path}?email=${advertiser.email}${ADVERTISEMENTS_GET_COMMON_URL_PARAMS}`);\n }\n\n const isDraft = advertisement.ogloszenie.status.label === 'DRAFT';\n return (\n <>\n <GridCustom fullwidth flexM className=\"manage-lock\">\n <FieldWithLabel label=\"OgÅ‚oszenie\">\n <Text>\n {isLocked || isDraft\n ? 'Widoczne tylko dla użytkowników posiadajÄ…cych uprawnienia do podglÄ…du.'\n : 'Widoczne dla wszystkich.'\n }\n </Text>\n {!isDraft && (\n <>\n {hasPermission('advertisementAdministration', 'editData') && (\n <ButtonStyled\n disabled={advertisement.ogloszenie.status.label !== 'PUBLISHED'}\n icon=\"edit\"\n lite\n onClick={handleGoToAdvertisementPage}\n >\n Edytuj\n </ButtonStyled>\n )}\n\n {hasPermission('advertisementAdministration', 'blocking') && (\n <ButtonStyled\n lite\n icon={isLocked ? 'check_circle' : 'cancel'}\n onClick={handleOpenConfirmDialog}\n primary\n >\n {isLocked ? 'Odblokuj' : 'Zablokuj'}\n </ButtonStyled>\n )}\n </>\n )}\n </FieldWithLabel>\n <GridCustom fullwidth flexL className=\"manage-lock__user\">\n <FieldWithLabel label=\"Użytkownik\">\n <Text>{getUserFullName(advertiser)}</Text>\n <Text className=\"manage-lock__user-data manage-lock__user-data--email\">{advertiser.email}</Text>\n <Text className=\"manage-lock__user-data\">ID {advertiser.identyfikator}</Text>\n </FieldWithLabel>\n <div className=\"manage-lock__buttons\">\n {userBasicPermission.usersAndPermissionsPreviewListUsers && (\n <ButtonStyled\n lite\n icon=\"person\"\n onClick={handleGoToManageUserPage}\n >\n ZarzÄ…dzaj użytkownikiem\n </ButtonStyled>\n )}\n {hasPermission('projectsEnrollmentsAdministration', 'searchNPreviewData') && (\n <ButtonStyled\n lite\n icon=\"line_weight\"\n onClick={handleFilterProjectsByUserEmail}\n >\n Lista projektów\n </ButtonStyled>\n )}\n <ButtonStyled\n lite\n icon=\"description\"\n onClick={handleFilterAdvertisementsByUserEmail}\n >\n Lista ogÅ‚oszeÅ„\n </ButtonStyled>\n </div>\n </GridCustom>\n </GridCustom>\n {confirmDialogOn && (\n <DialogCustom\n dialogTitle={`Czy na pewno chcesz ${isLocked ? 'odblokować' : 'zablokować'} to ogÅ‚oszenie?`}\n onClose={handleCloseConfirmDialog}\n >\n <CancelSaveButtonsRow\n disabled={loadingOn}\n cancelText=\"Nie\"\n saveText=\"Tak\"\n onCancel={handleCloseConfirmDialog}\n onSave={handleLock} />\n {fetchError !== null && <Text error>{fetchError}</Text>}\n </DialogCustom>\n )}\n </>\n )\n};\n","import React, { Component } from 'react';\nimport { Document, Page, StyleSheet, Text, View } from '@react-pdf/renderer';\n\nimport { splitLineByChar } from '../../../helpers';\nimport { PdfHeader } from '../../common';\nimport { pdfStyles } from '../../vars/pdfStyles';\n\n\nclass PytaniaForOgloszeniePdf extends Component {\n\n // rendering\n render() {\n const { numerOgloszenia, tytulOgloszenia } = this.props;\n const { labelStyle, mainPdfContainerStyle } = pdfStyles;\n\n return (\n <Document>\n <Page size=\"A4\" style={mainPdfContainerStyle} wrap>\n <PdfHeader />\n <View>\n <Text style={labelStyle}>OgÅ‚oszenie nr {numerOgloszenia}</Text>\n <Text>{tytulOgloszenia}</Text>\n {this.renderQuestionsList()}\n </View>\n </Page>\n </Document>\n )\n }\n\n renderQuestionsList() {\n const { pytania } = this.props;\n const { textHeaderStyle, textInfoStyle } = pdfStyles;\n\n if (pytania.length >= 1) {\n return (\n <>\n <Text style={textHeaderStyle}>Lista opublikowanych pytaÅ„ i odpowiedzi</Text>\n <Text>Liczba wyników: {pytania.length}</Text>\n {pytania.map(q => this.renderQuestion(q))}\n </>\n )\n }\n\n return <Text style={textInfoStyle}>Nie zadano żadnego pytania.</Text>\n }\n\n renderAnswer(question) {\n const { odpowiedz } = question;\n\n if (odpowiedz) {\n const { status } = question;\n\n let answerLabel = '';\n if (status.label === 'PUBLISHED') {\n answerLabel = 'Udzielono odpowiedzi';\n } else if (status.label === 'DRAFT') {\n answerLabel = 'Robocza wersja odpowiedzi';\n }\n\n return (\n <View style={styles.answerContainerStyle}>\n <Text style={pdfStyles.labelStyle}>{answerLabel}</Text>\n {splitLineByChar(odpowiedz.tresc).map((line, i) => <Text key={i}>{line}</Text>)}\n </View>\n )\n }\n\n return <Text style={pdfStyles.textInfoStyle}>Nie udzielono odpowiedzi</Text>;\n }\n\n renderQuestion(question) {\n const { dataOpublikowania, dataUtworzenia, id, jestAutorem, numer, tresc } = question;\n\n return (\n <View key={id} style={styles.questionContainerStyle}>\n {jestAutorem && <Text style={styles.myLabelStyle}>Moje pytanie</Text>}\n <Text style={pdfStyles.labelStyle}>Pytanie numer {numer}, data wysÅ‚ania {dataUtworzenia}{dataOpublikowania && `, data opublikowania ${dataOpublikowania}`}</Text>\n {splitLineByChar(tresc).map((line, i) => <Text key={i}>{line}</Text>)}\n {this.renderAnswer(question)}\n </View>\n )\n }\n\n}\n\nconst styles = StyleSheet.create({\n myLabelStyle: {\n width: 70,\n borderBottomWidth: 2,\n borderBottomColor: '#666A6D',\n color: '#666A6D',\n textTransform: 'uppercase',\n fontSize: 10,\n fontWeight: 700,\n },\n questionContainerStyle: {\n paddingVertical: 10,\n marginBottom: 10,\n borderBottomWidth: 1,\n borderBottomColor: '#666A6D'\n },\n answerContainerStyle: {\n paddingLeft: 20\n }\n});\n\n\nexport { PytaniaForOgloszeniePdf };\n","import React from 'react';\n\nimport { generatePdfDocument } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { ButtonCreatePdf, GridCustom } from '../../common';\nimport { BaseComponent } from '../common';\nimport { PytaniaForOgloszeniePdf } from './PytaniaForOgloszeniePdf';\n\n\nclass BasePytaniaForOgloszenieWidthPdf extends BaseComponent {\n\n // handlers\n\n handleFetchSuccess(data) {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n fetchError: '',\n initializingOn: false,\n pytania: getSerializedObject(data).pytania,\n });\n }\n\n handleCreatePdf = () => {\n const { ogloszenie, tytul } = this.props.ogloszenie;\n\n this.setState(\n {pdfCreatingOn: true},\n () => generatePdfDocument(\n <PytaniaForOgloszeniePdf\n pytania={this.state.pytania}\n tytulOgloszenia={tytul}\n numerOgloszenia={ogloszenie.numer} />,\n `pytania_do_ogloszenia_nr_${ogloszenie.numer}.pdf`,\n this.callbackPfdCreated\n )\n );\n }\n\n // helpers\n\n callbackPfdCreated = () => {\n this.setState({pdfCreatingOn: false});\n }\n\n getFetchUrl() {\n return `/api/question/announcement/${this.props.ogloszenie.ogloszenie.id}`\n }\n\n getFetchError(message) {\n message = super.getFetchError(message);\n return `Nie udaÅ‚o siÄ™ pobrać pytaÅ„ dla tego ogÅ‚oszenia. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Podczas pobierania pytaÅ„ dla tego ogÅ‚oszenia wystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n // rendering\n\n renderPrintButton() {\n return (\n <GridCustom flexEnd>\n <ButtonCreatePdf\n pdfCreatingOn={this.state.pdfCreatingOn}\n onClick={this.handleCreatePdf}>\n Wydruk listy pytaÅ„<span className=\"sr-only\"> do ogÅ‚oszenia {this.props.ogloszenie.tytul}</span>\n </ButtonCreatePdf>\n </GridCustom>\n )\n }\n}\n\nexport { BasePytaniaForOgloszenieWidthPdf };\n","import React, { Component } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport {\n getSerializedObject,\n getSerializedObjectErrorsFormServer,\n translateErrorMessage,\n} from '../../../serializers';\n\nimport {\n ButtonStyled,\n DialogCustom,\n FieldWithLabel,\n GridCustom,\n Text,\n TextFieldCustom,\n} from '../../common';\n\n\nclass FormOdpowiedz extends Component {\n constructor(props) {\n super(props);\n const { pytanie } = this.props;\n this.state = {\n id: pytanie.odpowiedz.id || '',\n tresc: pytanie.odpowiedz.tresc || '',\n pytanieTresc: pytanie.tresc,\n savingOn: false,\n fetchError: '',\n errors: {},\n isNew: !pytanie.odpowiedz.id\n };\n }\n\n handleSaveDraft = () => this.handleSave();\n\n handleSavePublished = () => this.handleSave(true);\n\n handleSave = (published=false) => {\n this.setState(\n {savingOn: true},\n () => {\n // Save edited question and add/edit answer\n this.xhrSave = fetchApi(\n `/api/question/${this.props.pytanie.id}${published ? '?mode=publish' : ''}`,\n 'PUT',\n {},\n getSerializedObject(this.getData(), { toServer: true }),\n this.handleFetchSaveSuccess,\n this.handleFetchSaveError,\n this.handleFetchSaveIncorrectStatus,\n this.handleShowSaveErrors,\n );\n }\n )\n }\n\n handleFetchSaveSuccess = (data) => {\n this.xhrSave = null;\n this.props.onUpdate(\n this.props.pytanie.id,\n getSerializedObject(data).pytanie\n );\n }\n\n handleFetchSaveError = (data) => {\n this.xhrSave = null;\n\n this.setState({\n fetchError: translateErrorMessage(data.message),\n savingOn: false,\n });\n }\n\n handleFetchSaveIncorrectStatus = (status) => {\n this.xhrSave = null;\n\n this.setState({\n fetchError: `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`,\n savingOn: false,\n });\n }\n\n handleShowSaveErrors = (errors) => {\n this.xhrSave = null;\n\n this.setState({\n errors: getSerializedObjectErrorsFormServer(errors, this.getData()),\n savingOn: false,\n });\n }\n\n getData(){\n return {\n tresc: this.state.pytanieTresc,\n odpowiedz: {tresc: this.state.tresc},\n }\n }\n\n render() {\n const { onCloseForm } = this.props;\n const {\n dataOpublikowania,\n dataUtworzenia,\n numer\n } = this.props.pytanie;\n\n const {\n errors,\n fetchError,\n pytanieTresc,\n savingOn,\n tresc\n } = this.state;\n\n const isTrescInvalid = ((errors.odpowiedz || {}).tresc || []).length > 0;\n const isPytanieTrescInvalid = (errors.tresc || []).length > 0;\n const isFormInvalid = isTrescInvalid || isPytanieTrescInvalid;\n\n let questionLabel = `Pytanie nr ${numer}, data wysÅ‚ania ${dataUtworzenia}`;\n\n if (dataOpublikowania) {\n questionLabel += `, data opublikowania ${dataOpublikowania}`\n }\n\n return (\n <DialogCustom\n dialogTitle=\"Odpowiedz na pytanie\"\n onClose={onCloseForm}\n >\n <>\n <Text className=\"question__label\">{questionLabel}</Text>\n <FieldWithLabel label=\"Treść pytania\" tag=\"label\" labelFor=\"trescPytania_id\">\n <TextFieldCustom\n aria-describedby={isPytanieTrescInvalid ? 'trescPytania_error' : null}\n aria-label={`Treść pytania, maksymalna liczba znaków: 2000. Wpisano ${pytanieTresc.length} znaków.`}\n aria-valuemax={2000}\n characterCount\n clearFieldContext=\"treść pytania\"\n disabled={savingOn}\n fullwidth\n id=\"trescPytania_id\"\n invalid={isPytanieTrescInvalid}\n maxLength={2000}\n onClear={(ev) => this.setState({pytanieTresc: ''})}\n onChange={(ev) => this.setState({pytanieTresc: ev.target.value})}\n textarea\n value={pytanieTresc} />\n {isPytanieTrescInvalid && <ul id=\"trescPytania_error\">{errors.tresc.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n </FieldWithLabel>\n <FieldWithLabel label=\"Odpowiedź\" tag=\"label\" labelFor=\"trescOdpowiedzi_id\">\n <TextFieldCustom\n aria-describedby={isTrescInvalid ? 'trescOdpowiedzi_error' : null}\n aria-label={`Odpowiedź, maksymalna liczba znaków: 5000. Wpisano ${tresc.length} znaków.`}\n aria-valuemax={5000}\n characterCount\n clearFieldContext=\"odpowiedź\"\n disabled={savingOn}\n fullwidth\n id=\"trescOdpowiedzi_id\"\n invalid={isTrescInvalid}\n maxLength={5000}\n onClear={(ev) => this.setState({tresc: ''})}\n onChange={(ev) => this.setState({tresc: ev.target.value})}\n textarea\n value={tresc} />\n {isTrescInvalid && <ul id=\"trescOdpowiedzi_error\">{errors.odpowiedz.tresc.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n </FieldWithLabel>\n {fetchError.length > 0 && <Text error role=\"alert\">{fetchError}</Text>}\n <GridCustom flexTop fullwidth>\n <GridCustom>\n <ButtonStyled\n cancel\n disabled={savingOn}\n onClick={onCloseForm}>\n Anuluj\n </ButtonStyled>\n {(this.props.pytanie.status.label !== 'PUBLISHED') && (\n <ButtonStyled\n disabled={savingOn}\n lite\n onClick={this.handleSaveDraft} >\n Zapisz wersjÄ™ roboczÄ…\n </ButtonStyled>\n ) }\n </GridCustom>\n <ButtonStyled\n className=\"btn btn--main\"\n disabled={savingOn}\n onClick={this.handleSavePublished}\n save >\n Opublikuj\n </ButtonStyled>\n </GridCustom>\n {isFormInvalid && <span role=\"alert\" className=\"sr-only\">Formularz zawiera bÅ‚Ä™dy.</span>}\n </>\n </DialogCustom>\n )\n }\n}\n\nexport { FormOdpowiedz };\n","import React, { Component } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport {\n getSerializedErrorsFromServer,\n getSerializedObject,\n translateErrorMessage,\n} from '../../../serializers';\n\nimport {\n ButtonStyled,\n DialogCustom,\n FieldWithLabel,\n GridCustom,\n Text,\n TextFieldCustom,\n} from '../../common';\n\n\nclass FormPytanie extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n tresc: '',\n savingOn: false,\n fetchError: '',\n errors: {},\n }\n }\n\n handleSave = () => {\n this.setState(\n {savingOn: true},\n () => {\n // save object on server\n this.xhrSave = fetchApi(\n '/api/question',\n 'POST',\n {},\n getSerializedObject(\n {\n tresc: this.state.tresc,\n ogloszenie: this.props.advertisementId,\n },\n {toServer: true}\n ),\n this.handleFetchSaveSuccess,\n this.handleFetchSaveError,\n this.handleFetchSaveIncorrectStatus,\n this.handleShowSaveErrors,\n );\n }\n )\n }\n\n handleFetchSaveSuccess = (data) => {\n this.xhrSave = null;\n this.props.onAddQuestion(getSerializedObject(data).pytanie);\n }\n\n handleFetchSaveError = (data) => {\n this.xhrSave = null;\n\n this.setState({\n fetchError: translateErrorMessage(data.message),\n savingOn: false,\n });\n }\n\n handleFetchSaveIncorrectStatus = (status) => {\n this.xhrSave = null;\n\n this.setState({\n fetchError: `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`,\n savingOn: false,\n });\n }\n\n handleShowSaveErrors = (errors) => {\n this.xhrSave = null;\n\n this.setState({\n errors: getSerializedErrorsFromServer(errors),\n savingOn: false,\n });\n }\n\n render() {\n const { onCloseForm } = this.props;\n const { errors, fetchError, savingOn, tresc } = this.state;\n const isTrescInvalid = (errors.tresc || []).length > 0;\n\n return (\n <DialogCustom\n dialogTitle=\"Zadaj pytanie\"\n onClose={onCloseForm}\n >\n <>\n <FieldWithLabel label=\"Treść pytania\" tag=\"label\" labelFor=\"tresc_id\">\n <TextFieldCustom\n aria-describedby={isTrescInvalid ? 'tresc_error' : null}\n aria-label={`Treść pytania, maksymalna liczba znaków: 2000. Wpisano ${tresc.length} znaków.`}\n aria-valuemax={2000}\n characterCount\n clearFieldContext=\"treść pytania\"\n disabled={savingOn}\n fullwidth\n id=\"tresc_id\"\n invalid={isTrescInvalid}\n onClear={(ev) => this.setState({tresc: ''})}\n onChange={(ev) => this.setState({tresc: ev.target.value})}\n maxLength={2000}\n value={tresc}\n textarea />\n {isTrescInvalid && <ul id=\"tresc_error\" role=\"alert\">{errors.tresc.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n </FieldWithLabel>\n {fetchError.length > 0 && <Text error role=\"alert\">{fetchError}</Text>}\n <GridCustom fullwidth flexTop>\n <ButtonStyled\n cancel\n disabled={savingOn}\n onClick={onCloseForm}>\n Anuluj\n </ButtonStyled>\n <ButtonStyled\n className=\"btn btn--main\"\n disabled={savingOn}\n icon={savingOn ? 'send' : 'done'}\n onClick={this.handleSave}\n primary >\n {savingOn ? 'WysyÅ‚am...' : 'Zadaj pytanie'}\n </ButtonStyled>\n </GridCustom>\n </>\n </DialogCustom>\n )\n }\n}\n\nexport { FormPytanie };\n","import React, { Component } from \"react\";\nimport { Icon } from \"@rmwc/icon\";\n\nimport {\n ButtonStyled,\n Container,\n FieldWithLabel,\n GridCustom,\n Text,\n} from \"../../common\";\nimport { BadgeAnchor, Badge } from \"@rmwc/badge\";\nimport \"@rmwc/badge/badge.css\";\nimport { fetchApi } from \"../../../fetch\";\nimport { MenuContext } from \"../../../context/menuContext\";\n\nclass Pytanie extends Component {\n static contextType = MenuContext;\n\n // handlers\n\n handleAnswer = (e) => {\n this.props.onClickAnswer(this.props.question.id);\n e.currentTarget.blur();\n };\n\n handleRemoveBadge = () => {\n fetchApi(\n `/api/badge/question/${this.props.question.id}`,\n \"DELETE\",\n {},\n {},\n () => {\n this.props.reloadAnnouncement();\n }\n );\n };\n\n // rendering\n render() {\n const { jestAutorem, tresc, trescOryginalna, badge } = this.props.question;\n const { refreshBadges } = this.context;\n\n return (\n <Container containerTag=\"li\" className=\"question\">\n {jestAutorem && !this.props.noAuthorLabel && (\n <Text className=\"author-label\">Moje pytanie</Text>\n )}\n <FieldWithLabel label={this.renderPytanieLabel()}>\n {trescOryginalna && trescOryginalna !== tresc && (\n <>\n <Text className=\"question__original-content--header\">\n Zmieniono treść pytania. Oryginalna treść:\n </Text>\n <Text className=\"question__original-content long-text\">\n {trescOryginalna}\n </Text>\n </>\n )}\n <Text className=\"long-text\">\n {trescOryginalna && trescOryginalna !== tresc && (\n <span className=\"sr-only\">WyÅ›wietlana treść: </span>\n )}\n {tresc || \"\"}\n </Text>\n </FieldWithLabel>\n {this.renderOdpowiedz()}\n {this.props.allowAnswer && (\n <GridCustom flexEnd>{this.renderPytanieButton()}</GridCustom>\n )}\n {badge && (\n <GridCustom flexEnd>\n <BadgeAnchor>\n <ButtonStyled\n onClick={() => {\n this.handleRemoveBadge();\n refreshBadges();\n }}\n primary\n icon=\"check\"\n >\n USUŃ OZNACZENIE JAKO NOWE\n <span className=\"sr-only\"> dla pytania {this.renderPytanieLabel()}</span>\n </ButtonStyled>\n <Badge label=\"N\" />\n </BadgeAnchor>\n </GridCustom>\n )}\n </Container>\n );\n }\n\n renderPytanieLabel() {\n const { dataOpublikowania, dataUtworzenia, numer, status } =\n this.props.question;\n\n let questionLabel = `Pytanie numer ${numer}, data wysÅ‚ania ${dataUtworzenia}`;\n\n if (status.label === \"PUBLISHED\") {\n questionLabel += `, data opublikowania ${dataOpublikowania}`;\n }\n\n return questionLabel;\n }\n\n renderOdpowiedzLabel() {\n if (this.props.question.status.label === \"PUBLISHED\") {\n return \"Udzielono odpowiedzi\";\n } else {\n return \"Robocza wersja odpowiedzi\";\n }\n }\n\n renderOdpowiedz() {\n if (this.props.question.odpowiedz) {\n return (\n <FieldWithLabel\n label={this.renderOdpowiedzLabel()}\n className=\"question__answer\"\n >\n <Icon\n aria-hidden=\"true\"\n icon=\"subdirectory_arrow_right\"\n className=\"question__answer-icon\"\n />\n <Text className=\"long-text\">\n {this.props.question.odpowiedz.tresc}\n </Text>\n </FieldWithLabel>\n );\n }\n\n return <Text info>Brak odpowiedzi</Text>;\n }\n\n renderPytanieButton() {\n const { status } = this.props.question;\n\n if (!this.props.annoucementOwner) {\n return null;\n }\n switch (status.label) {\n case \"DRAFT\":\n return (\n <ButtonStyled lite noMargin onClick={this.handleAnswer}>\n Edytuj / Publikuj\n <span className=\"sr-only\"> {this.renderPytanieLabel()}</span>\n </ButtonStyled>\n );\n case \"PUBLISHED\":\n return (\n <ButtonStyled lite noMargin onClick={this.handleAnswer}>\n Edytuj<span className=\"sr-only\"> {this.renderPytanieLabel()}</span>\n </ButtonStyled>\n );\n case \"NEW\":\n return (\n <ButtonStyled primary noMargin onClick={this.handleAnswer}>\n Udziel odpowiedzi\n <span className=\"sr-only\"> na {this.renderPytanieLabel()}</span>\n </ButtonStyled>\n );\n default:\n return null;\n }\n }\n}\n\nexport { Pytanie };\n","import React from 'react';\n\nimport { BasePytaniaForOgloszenieWidthPdf } from './BasePytaniaForOgloszenieWidthPdf';\nimport { FormOdpowiedz } from './FormOdpowiedz';\nimport { Pytanie } from './Pytanie';\nimport { Container, Text } from '../../common';\n\n\nclass PytaniaForOgloszenieAnnouncementOwner extends BasePytaniaForOgloszenieWidthPdf {\n\n handleUpdate = (id, data) => {\n const { odpowiedz, status, tresc } = data;\n this.setState(\n prevState => ({\n answeredQuestionId: null,\n pytania: prevState.pytania.map(q => {\n if (q.id === id) {\n q = Object.assign({}, q, {\n tresc: tresc,\n status: status,\n odpowiedz: {\n id: odpowiedz.id,\n tresc: odpowiedz.tresc\n }\n });\n }\n return q\n }),\n })\n );\n }\n\n handleShowAnswerForm = (id) => {\n this.setState({answerFormOn: true, answeredQuestionId: id});\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n pytania: [],\n answerFormOn: false,\n answeredQuestionId: null,\n pdfCreatingOn: false,\n }\n }\n\n // rendering\n\n renderContent() {\n const pytania = this.state.pytania;\n\n if (!pytania.length) {\n return <Text info>Nie zadano żadnego pytania.</Text>\n }\n\n return (\n <>\n <Container className=\"questions-container\">\n {this.renderPrintButton()}\n <Text tag=\"h3\" mainHeader>Zadane pytania</Text>\n <Text info>Liczba wyników: {pytania.length}</Text>\n {this.state.answerFormOn && this.renderAnswerForm()}\n <ul>\n {pytania.map((q) => {\n return (\n <Pytanie\n allowAnswer={this.props.ogloszenie.ogloszenie.status.label === 'PUBLISHED'}\n key={q.id}\n question={q}\n annoucementOwner\n onClickAnswer={this.handleShowAnswerForm}\n reloadAnnouncement={this.props.reloadAnnouncement} />\n )\n })}\n </ul>\n </Container>\n\n </>\n )\n }\n\n renderAnswerForm(pytanie) {\n if (this.state.answeredQuestionId === null) { return null };\n\n const answeredQuestion = this.state.pytania.filter(q => q.id === this.state.answeredQuestionId)[0]\n if ([null, undefined].includes(answeredQuestion)) { return null };\n return (\n <FormOdpowiedz\n pytanie={answeredQuestion}\n onCloseForm={() => this.setState({answerFormOn: false, answeredQuestionId: null})}\n onUpdate={this.handleUpdate} />\n )\n }\n}\n\nexport { PytaniaForOgloszenieAnnouncementOwner };\n","import React from 'react';\n\nimport { BasePytaniaForOgloszenieWidthPdf } from './BasePytaniaForOgloszenieWidthPdf';\nimport { Pytanie } from './Pytanie';\nimport { ButtonStyled, Container, Text } from '../../common';\nimport { redirectToLoginView } from '../../../helpers';\n\n\nclass PytaniaForOgloszenieAnonymous extends BasePytaniaForOgloszenieWidthPdf {\n\n // helpers\n\n getAdditionalState(props) {\n return {\n pytania: [],\n }\n }\n\n // rendering\n\n renderContent() {\n const pytania = this.state.pytania;\n const ogloszenieStatus = this.props.ogloszenie.ogloszenie.status.label;\n\n return (\n <>\n {ogloszenieStatus === 'PUBLISHED' && (\n <div className=\"login-info-container\">\n <ButtonStyled add onClick={redirectToLoginView} className=\"btn btn--main\">Dodaj pytanie</ButtonStyled>\n <Text info>Wymaga logowania</Text>\n </div>\n )}\n\n <Container className=\"questions-container\">\n {this.renderPrintButton()}\n {!pytania.length ? <Text info>Do tego ogÅ‚oszenia nie ma opublikowanych pytaÅ„.</Text> : (\n <div className=\"questions-list-container\">\n <Text mainHeader>Opublikowane pytania i odpowiedzi</Text>\n <Text info className=\"text--counter\">Liczba wyników: {pytania.length}</Text>\n <ul>\n {pytania.map((q) => <Pytanie key={q.id} question={q} reloadAnnouncement={this.props.reloadAnnouncement} />)}\n </ul>\n </div>\n )}\n </Container>\n </>\n )\n }\n}\n\n\nexport { PytaniaForOgloszenieAnonymous };\n","import React from 'react';\n\nimport { BasePytaniaForOgloszenieWidthPdf } from './BasePytaniaForOgloszenieWidthPdf';\nimport { FormPytanie } from './FormPytanie';\nimport { Pytanie } from './Pytanie';\nimport { ButtonStyled, Container, DialogCustom, GridCustom, Text } from '../../common';\n\n\nclass PytaniaForOgloszenieLoggedIn extends BasePytaniaForOgloszenieWidthPdf {\n\n handleAddQuestion = (data) => {\n this.setState(prevState => ({\n questionFormOn: false,\n pytania: [...prevState.pytania, data],\n confirmInfo: true,\n }));\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n pytania: [],\n questionFormOn: false,\n confirmInfo: false,\n }\n }\n\n // rendering\n\n renderContent() {\n const { confirmInfo, pytania, questionFormOn, } = this.state;\n const ogloszenieStatus = this.props.ogloszenie.ogloszenie.status.label;\n const myQuestionsList = pytania.filter(q => q.jestAutorem);\n const publishedQuestionsList = pytania.filter(q => q.status.label === 'PUBLISHED');\n myQuestionsList.sort((a,b) => (a.numer > b.numer) ? 1 : ((b.numer > a.numer) ? -1 : 0));\n\n return (\n <>\n {ogloszenieStatus === 'PUBLISHED' && (\n <div className=\"login-info-container\">\n <ButtonStyled\n add\n className=\"btn btn--main\"\n onClick={(e) => {\n this.setState({questionFormOn: true});\n e.currentTarget.blur();\n }} >\n Dodaj pytanie\n </ButtonStyled>\n </div>\n )}\n <Container className=\"questions-container\">\n {this.renderQuestionsList('Moje pytania', myQuestionsList, 'Nie zadaÅ‚eÅ› pytaÅ„ do tego ogÅ‚oszenia.', true)}\n </Container>\n <Container className=\"questions-container\">\n {this.renderPrintButton()}\n {this.renderQuestionsList('Lista wszystkich opublikowanych pytaÅ„ i odpowiedzi', publishedQuestionsList, 'Do tego ogÅ‚oszenia nie ma opublikowanych pytaÅ„.')}\n </Container>\n {questionFormOn && this.renderQuestionForm()}\n {confirmInfo && this.renderConfirmationDialog()}\n </>\n )\n }\n\n renderQuestionsList(questionsListName, questionsList, noQuestionsInfo, noAuthor=false) {\n if (questionsList.length) {\n return (\n <div className=\"questions-list-container\">\n <Text tag=\"h3\" mainHeader>{questionsListName}</Text>\n <Text info>Liczba wyników: {questionsList.length}</Text>\n <ul>\n {questionsList.map((q) => <Pytanie key={q.id} question={q} noAuthorLabel={noAuthor} reloadAnnouncement={this.props.reloadAnnouncement} />)}\n </ul>\n </div>\n )\n }\n\n return <Text info>{noQuestionsInfo}</Text>\n }\n\n renderQuestionForm() {\n return (\n <FormPytanie\n advertisementId={this.props.ogloszenie.ogloszenie.id}\n onCloseForm={() => this.setState({questionFormOn: false})}\n onAddQuestion={this.handleAddQuestion} />\n )\n }\n\n renderConfirmationDialog() {\n return (\n <DialogCustom\n dialogTitle=\"WysÅ‚ano pytanie.\"\n onClose={() => this.setState({confirmInfo: false})} >\n <GridCustom flexEnd>\n <ButtonStyled save onClick={() => this.setState({ confirmInfo: false })}>OK</ButtonStyled>\n </GridCustom>\n </DialogCustom>\n )\n }\n}\n\nexport { PytaniaForOgloszenieLoggedIn };\n","import React, { Component, Fragment } from 'react';\nimport { Icon } from '@rmwc/icon';\nimport { Typography } from '@rmwc/typography';\nimport '@rmwc/icon/icon.css';\n\nimport {\n dateStringToYearMonth,\n datetimeStringToISO,\n getUserFullName,\n isNotEmpty,\n listOrEmpty,\n\tsaveFileFromApi\n} from '../../../helpers';\nimport {\n Box,\n Container,\n GridCustom,\n FieldWithLabel,\n Text,\n AuditData,\n\tButtonStyled\n} from '../../common';\n\n\nconst TYP_NUMERU_IDENTYFIKACYJNEGO = {\n 'nip': 'NIP',\n 'pesel': 'PESEL',\n 'numer_zagraniczny': 'Numer identyfikacyjny',\n}\n\n\nclass OgloszenieDetails extends Component {\n\n // base functions\n\n componentDidMount() {\n document.title = \"Baza KonkurencyjnoÅ›ci - szczegóły ogÅ‚oszenia \" + this.props.ogloszenie.tytul;\n window.scrollTo(0, 0);\n }\n\n // helpers\n\n getPrzedmiotyZamowieniaList() {\n let przedmiotyZamowienia = [];\n for (let z of this.props.ogloszenie.zamowienia) {\n przedmiotyZamowienia = [...przedmiotyZamowienia, ...z.przedmiotyZamowienia];\n }\n return przedmiotyZamowienia\n }\n\n getHarmonogramList(przedmiotyZamowienia) {\n let harmonogramy = [];\n for (let pz of przedmiotyZamowienia) {\n if (!isNotEmpty(pz.harmonogramy, 'list')) {\n continue\n }\n let i = 1;\n for (let h of pz.harmonogramy) {\n harmonogramy.push({\n date: h.poczatekRealizacji,\n label: `Etap${i} (poczÄ…tek): ${pz.kategoria.nazwa || '-'} / ${pz.podkategoria.nazwa || '-'} / ${(pz.opis || '').substring(0, 100)}...`,\n key: `${pz.id}_${i}_1`,\n hasPointer: true,\n })\n harmonogramy.push({\n date: h.koniecRealizacji,\n label: `Etap${i} (koniec): ${pz.kategoria.nazwa || '-'} / ${pz.podkategoria.nazwa || '-'} / ${(pz.opis || '').substring(0, 100)}... ${h.czyWystepujePlatnoscCzesciowa ? ' / wystÄ™puje pÅ‚atność częściowa' : ''}`,\n key:`${pz.id}_${i}_2`,\n hasPointer: true,\n })\n i++;\n }\n }\n return harmonogramy\n }\n\n prepareChartData(harmonogramy) {\n const baseHeigth = 15;\n harmonogramy = listOrEmpty(harmonogramy);\n if (harmonogramy.length === 1) {\n harmonogramy[0]['height'] = 0;\n } else {\n const firstDate = harmonogramy[0].date;\n if (!firstDate.length) { // every date is empty\n for (let obj of harmonogramy) {\n obj['height'] = baseHeigth;\n }\n } else {\n let lastDate = '';\n for (let i = harmonogramy.length - 1; i >= 0; i--){\n if (isNotEmpty(harmonogramy[i].date)) {\n lastDate = harmonogramy[i].date;\n break\n }\n }\n\n const maxDistance = new Date(\n datetimeStringToISO(lastDate)).getTime() - new Date(\n datetimeStringToISO(firstDate)).getTime();\n const factor = (harmonogramy.length - 1) * 100;\n for (let i = 0; i < harmonogramy.length; i++) {\n const obj = harmonogramy[i];\n if (!obj.date.length) {\n obj['height'] = baseHeigth;\n } else {\n const nextObj = harmonogramy[i + 1];\n if (i < harmonogramy.length - 1 && nextObj.date !== null) {\n if (obj.date === nextObj.date) {\n obj['height'] = 0;\n nextObj['hasPointer'] = false;\n } else if (!nextObj.date.length) {\n obj['height'] = baseHeigth;\n } else {\n const height = (new Date(\n datetimeStringToISO(nextObj.date)).getTime() - new Date(\n datetimeStringToISO(obj.date)).getTime()) / maxDistance * factor;\n obj['height'] = height < 20 ? 20 : (height > 170 ? 170 : height);\n }\n } else {\n obj['height'] = baseHeigth;\n }\n }\n }\n }\n //we don't want to have line after last element\n harmonogramy[harmonogramy.length - 1]['height'] = 0;\n }\n return harmonogramy\n }\n\nhandleSaveFileFromApi = (url, fileName) => {\n this.setState(\n () => saveFileFromApi(\n url,\n\t\t\t\tfileName)\n );\n }\n\n // rendering\n\n render() {\n const o = this.props.ogloszenie;\n const { ogloszenie } = o;\n const { nabor } = ogloszenie;\n const showVersionModeInfo = this.props.versionMode && o.status.label !== 'DRAFT' && ogloszenie.ostatniaOpublikowanaWersjaId !== o.id;\n return (\n <>\n {showVersionModeInfo && <Text className=\"success-text\"><Icon icon=\"error\" aria-hidden=\"true\" style={{'marginRight': 3}} />To jest nieaktualna wersja ogÅ‚oszenia. Ta wersja zostaÅ‚a opublikowana dnia {o.dataOpublikowania}.</Text>}\n <Container className=\"details-preview\">\n <GridCustom flexL fullwidth noWrap>\n <section className=\"details-preview__part details-preview__part--main\">\n {isNotEmpty(ogloszenie.projekty, 'list') && (\n <FieldWithLabel label=\"Powstaje w kontekÅ›cie projektu\">\n {ogloszenie.projekty.map(p => <Text key={p.id}>{p.calyNumer} - {p.nazwa}</Text>)}\n </FieldWithLabel>\n )}\n {!!nabor && (\n <FieldWithLabel label=\"Powstaje w kontekÅ›cie naboru\">\n <Text>{nabor.calyNumer}{nabor.nazwa.length > 0 ? ` - ${nabor.nazwa}` : ''}</Text>\n </FieldWithLabel>\n )}\n {isNotEmpty(o.zamowieniaUzupelniajace) && (\n <FieldWithLabel label=\"Zamówienia uzupeÅ‚niajÄ…ce\">\n <Text className=\"long-text\">{o.zamowieniaUzupelniajace}</Text>\n </FieldWithLabel>\n )}\n {isNotEmpty(o.warunkiZmianyUmowy) && (\n <FieldWithLabel label=\"Warunki zmiany umowy\">\n <Text className=\"long-text\">{o.warunkiZmianyUmowy}</Text>\n </FieldWithLabel>\n )}\n {isNotEmpty(o.zalaczniki, 'list') && (\n <FieldWithLabel label=\"ZaÅ‚Ä…czniki\">\n {/* attachments are sorted by origin announcement version */}\n {o.zalaczniki.map(origin => this.renderOrigin(origin))}\n </FieldWithLabel>\n )}\n </section>\n <aside className=\"details-preview__part details-preview__part--aside\">\n <FieldWithLabel label=\"Czy dopuszczalna oferta częściowa?\">\n <Text>{o.czyDopuszczalnaOfertaCzesciowa === true ? 'TAK' : 'NIE'}</Text>\n </FieldWithLabel>\n\n {this.renderDaneAdresoweOgloszeniodawcy()}\n {isNotEmpty(o.osobyDoKontaktu, 'list') && this.renderOsobyDoKontaktu()}\n </aside>\n </GridCustom>\n </Container>\n {this.renderZamowienia()}\n {this.renderPodsumowanie()}\n {(ogloszenie.jestAutorem || ogloszenie.isAdmin) &&\n <AuditData {...this.props.auditData} />\n }\n </>\n )\n }\n\n renderOrigin(origin) {\n const ogloszenie = this.props.ogloszenie;\n let indexVersion = (ogloszenie.ogloszenie.all_available_version_ids || []).indexOf(origin.id);\n if (indexVersion > -1) {\n indexVersion++;\n } else {\n indexVersion = '';\n }\n let label = origin.id === ogloszenie.id ? (\n this.props.draftMode ? 'aktualnej wersji roboczej' : `obowiÄ…zujÄ…cej wersji z dn. ${origin.dataOpublikowania}`\n ) : `wersji ${indexVersion} z dn. ${origin.dataOpublikowania}`;\n return this.renderAttachmentsForOrigin(origin, label)\n }\n\n renderAttachmentsForOrigin(origin, label) {\n return (\n <Fragment key={origin.id}>\n <Typography tag=\"h2\" use=\"button\" className=\"attachements__header\">Dodane do ogÅ‚oszenia w {label}</Typography>\n <ol className=\"attachements__list\">\n {origin.zalaczniki.map((z, i) => {\n if (z.nazwa.length || Object.keys(z.plik).length) {\n return (\n <li key={z.id} className=\"grid-custom attachements__download-item\">\n <Text key={z.id}>\n {i + 1}. {z.nazwa || 'ZaÅ‚Ä…cznik bez nazwy'}\n {z.plik && z.plik.uri.length > 0 && <ButtonStyled className=\"btn--pdf-dowload\" onClick={(ev) => this.handleSaveFileFromApi(z.plik.uri, z.plik.nazwa)}>Pobierz</ButtonStyled>}\n </Text>\n </li>\n )\n } else {return null}\n })}\n </ol>\n </Fragment>\n )\n }\n\n renderDaneAdresoweOgloszeniodawcy() {\n if (!this.props.ogloszenie.daneAdresoweOgloszeniodawcy) {\n return null\n }\n const daneAdresowe = this.props.ogloszenie.daneAdresoweOgloszeniodawcy || {};\n const adres = daneAdresowe.adres || {};\n return (\n <FieldWithLabel label=\"Dane adresowe ogÅ‚oszeniodawcy\">\n <Text>{daneAdresowe.nazwa}</Text>\n <Text>{adres.ulica} {adres.numerDomu}</Text>\n <Text>{adres.kodPocztowy} {adres.miejscowosc}</Text>\n {adres.country === 'Polska' && (\n <>\n <Text>gmina/dzielnica: {adres.gmina}</Text>\n <Text>powiat: {adres.powiat}</Text>\n <Text>woj.: {adres.wojewodztwo}</Text>\n </>\n )}\n {adres.kraj !== 'Polska' && (\n <Text>{adres.kraj}</Text>\n )}\n <Text>{TYP_NUMERU_IDENTYFIKACYJNEGO[daneAdresowe.typNumeruIdentyfikacyjnego]}: {daneAdresowe.numerIdentyfikacyjny}</Text>\n </FieldWithLabel>\n )\n }\n\n renderOsobyDoKontaktu() {\n return (\n <FieldWithLabel label=\"Osoby do kontaktu\">\n {this.props.ogloszenie.osobyDoKontaktu.map(osoba => {\n return (\n <div key={osoba.id} className=\"separate-content\">\n <Text>{getUserFullName(osoba)}</Text>\n <Text>tel.: {osoba.numerTelefonu || '-'}</Text>\n <Text>e-mail: {osoba.email}</Text>\n </div>\n )\n })}\n </FieldWithLabel>\n )\n }\n\n renderZamowienia() {\n const o = this.props.ogloszenie;\n\n if (!isNotEmpty(o.zamowienia)) {\n return (\n <>\n <Text tag=\"h2\" mainHeader>Części zamówienia</Text>\n <Container>\n <Text error>Brak zdefiniowanych części zamówienia</Text>\n </Container>\n </>\n )\n }\n\n let tableOfContetns = null;\n\n if (o.zamowienia.length > 1) {\n tableOfContetns = (\n <Container>\n <Text className=\"label\">Spis treÅ›ci</Text>\n {o.zamowienia.map((z, i) => (\n <button key={z.id} onClick={() => window.scrollTo(0, refs[i].current.offsetTop)} className=\"link-text announcement__part-link\"><span className=\"sr-only\">Przejdź do części: </span>Część {i + 1}{isNotEmpty(z.tytul) && `: ${z.tytul}`}</button>\n ))}\n </Container>\n )\n }\n\n const refs = o.zamowienia.map(z => React.createRef());\n\n return (\n <>\n <Text tag=\"h2\" mainHeader>Części zamówienia</Text>\n {tableOfContetns}\n <ul>\n {o.zamowienia.map((z, i) => (\n <li key={z.id} ref={refs[i]} className=\"announcement__part\">\n <GridCustom fullwidth noWrap flexTop flexM>\n <section className=\"announcement__part-title\">\n <Text mainHeader tag=\"h2\">Część {i + 1}</Text>\n {isNotEmpty(z.tytul) && <Typography use=\"headline6\" tag=\"h2\">{z.tytul}</Typography>}\n </section>\n <section className=\"announcement__part-price\">\n {isNotEmpty(z.szacunkowaWartosc) && (\n <FieldWithLabel label=\"Budżet\">\n <Typography use=\"headline6\">{z.szacunkowaWartosc.replace('.', ',')} PLN</Typography>\n </FieldWithLabel>\n )}\n <FieldWithLabel label=\"Czy dopuszczalne oferty wariantowe\">\n <Text>{z.czyWariantowe === true ? 'TAK' : 'NIE'}</Text>\n </FieldWithLabel>\n </section>\n </GridCustom>\n {this.renderPrzedmiotyZamowienia(z.przedmiotyZamowienia)}\n {this.renderKryteriaOceny(z.kryteriaOceny)}\n </li>\n ))}\n </ul>\n </>\n )\n }\n\n renderPrzedmiotyZamowienia(przedmiotyZamowienia) {\n if (isNotEmpty(przedmiotyZamowienia, 'list')) {\n return (\n <>\n <Text tag=\"h3\" accentHeader>Przedmioty zamówienia</Text>\n <ul>\n {przedmiotyZamowienia.map((pz) => this.renderPrzedmiotZamowienia(pz))}\n </ul>\n </>\n )\n }\n return (\n <>\n <Text tag=\"h3\" accentHeader>Przedmioty zamówienia</Text>\n <Text error>Brak zdefiniowanych przedmiotów zamówienia</Text>\n </>\n )\n }\n\n renderPrzedmiotZamowienia(przedmiotZamowienia) {\n return <Box\n fullwidth\n key={przedmiotZamowienia.id}\n headerTag=\"h4\"\n tag=\"li\"\n titleWithSubtitle={przedmiotZamowienia.kategoria.nazwa || '-'}\n subtitle={przedmiotZamowienia.podkategoria.nazwa || '-'}\n >\n {isNotEmpty(przedmiotZamowienia.opis) && (\n <FieldWithLabel label=\"Opis\">\n <Text className=\"long-text\">{przedmiotZamowienia.opis}</Text>\n </FieldWithLabel>\n )}\n {isNotEmpty(przedmiotZamowienia.okresGwarancji) && (\n <FieldWithLabel label=\"Okres gwarancji\">\n <Text>{przedmiotZamowienia.okresGwarancji}</Text>\n </FieldWithLabel>\n )}\n {isNotEmpty(przedmiotZamowienia.kodyCPV, 'list') && this.renderKodyCPV(przedmiotZamowienia.kodyCPV)}\n {isNotEmpty(przedmiotZamowienia.miejscaRealizacji, 'list') && this.renderMiejscaRealizacji(przedmiotZamowienia.miejscaRealizacji)}\n {isNotEmpty(przedmiotZamowienia.harmonogramy, 'list') && this.renderHarmonogram(przedmiotZamowienia.harmonogramy)}\n {isNotEmpty(przedmiotZamowienia.warunkiUdzialu, 'list') && this.renderWarunkiUdziaÅ‚u(przedmiotZamowienia.warunkiUdzialu)}\n </Box>\n }\n\n renderKodyCPV(kodyCPV) {\n return (\n <FieldWithLabel label=\"Kody CPV\">\n {kodyCPV.map(kod_ => <Text key={kod_.id}>{kod_.kod} {kod_.nazwa}</Text>)}\n </FieldWithLabel>\n )\n }\n\n renderMiejscaRealizacji(miejscaRealizacji) {\n return (\n <FieldWithLabel label=\"Miejsca realizacji\">\n {miejscaRealizacji.map(mr => {\n let address = null;\n if (mr.kraj || mr.wojewodztwo || mr.powiat || mr.gmina || mr.miejscowosc) {\n address = (\n <GridCustom fullwidth className=\" separate-content\">\n {isNotEmpty(mr.kraj) && (\n <FieldWithLabel label=\"Kraj\">\n <Text>{mr.kraj}</Text>\n </FieldWithLabel>\n )}\n {isNotEmpty(mr.wojewodztwo) && (\n <FieldWithLabel label=\"Województwo\">\n <Text>{mr.wojewodztwo}</Text>\n </FieldWithLabel>\n )}\n {isNotEmpty(mr.powiat) && (\n <FieldWithLabel label=\"Powiat\">\n <Text>{mr.powiat || '-'}</Text>\n </FieldWithLabel>\n )}\n {isNotEmpty(mr.gmina) && (\n <FieldWithLabel label=\"Gmina\">\n <Text>{mr.gmina || '-'}</Text>\n </FieldWithLabel>\n )}\n {isNotEmpty(mr.miejscowosc) && (\n <FieldWithLabel label=\"Miejscowość\">\n <Text>{mr.miejscowosc || '-'}</Text>\n </FieldWithLabel>\n )}\n </GridCustom>\n );\n }\n return (\n <div key={mr.id}>\n <GridCustom centerVertical className=\" separate-content\">\n <Text>{mr.typ.nazwa}</Text>\n </GridCustom>\n {address}\n </div>\n )\n })}\n </FieldWithLabel>\n )\n }\n\n renderHarmonogram(harmonogramy) {\n let i = 0;\n return (\n <>\n <Text tag=\"h2\" accentHeader>Harmonogram</Text>\n <ul>\n {harmonogramy.map((h) => {\n i++;\n return (\n <li key={h.id} className=\"separate-content\">\n <Text info>Etap {i}</Text>\n <GridCustom>\n {isNotEmpty(h.poczatekRealizacji) && (\n <FieldWithLabel label=\"PoczÄ…tek realizacji\">\n <Text>{h.poczatekRealizacji}</Text>\n </FieldWithLabel>\n )}\n {isNotEmpty(h.koniecRealizacji) && (\n <FieldWithLabel label=\"Koniec realizacji\">\n <Text>{h.koniecRealizacji}</Text>\n </FieldWithLabel>\n )}\n <FieldWithLabel label=\"Czy wystÄ™puje pÅ‚atność częściowa\">\n <Text>{h.czyWystepujePlatnoscCzesciowa === true ? 'TAK' : 'NIE'}</Text>\n </FieldWithLabel>\n </GridCustom>\n {isNotEmpty(h.opis) && (\n <FieldWithLabel label=\"Opis\">\n <Text className=\"long-text\">{h.opis}</Text>\n </FieldWithLabel>\n )}\n </li>\n )\n })}\n </ul>\n </>\n )\n }\n\n renderWarunkiUdziaÅ‚u(warunkiUdzialu) {\n return (\n <>\n <Text tag=\"h3\" accentHeader>Warunki, jakie musi speÅ‚niać oferent</Text>\n {warunkiUdzialu.map((wu) =>\n <div key={wu.id} className=\"separate-content\">\n {wu.typ.id !== null && (\n <FieldWithLabel label=\"Typ\">\n <Text>{wu.typ.nazwa}</Text>\n </FieldWithLabel>\n )}\n {isNotEmpty(wu.opis) && (\n <FieldWithLabel label=\"Opis\">\n <Text className=\"long-text\">{wu.opis}</Text>\n </FieldWithLabel>\n )}\n </div>\n )}\n </>\n )\n }\n\n renderKryteriaOceny(kryteriaOceny) {\n if (!isNotEmpty(kryteriaOceny, 'list')) {\n return (\n <>\n <Text tag=\"h3\" accentHeader>Kryteria oceny</Text>\n <Text error>Brak zdefiniowanych kryteriów oceny</Text>\n </>\n )\n }\n return (\n <>\n <Text tag=\"h3\" accentHeader>Kryteria oceny</Text>\n <GridCustom tag=\"ul\">\n {kryteriaOceny.map((ko) => (\n <Box key={ko.id} tag=\"li\">\n <Text label>Czy kryterium cenowe</Text>\n <Text>{ko.czyKryteriumCenowe === true ? 'TAK' : 'NIE'}</Text>\n {isNotEmpty(ko.opis) && (\n <FieldWithLabel label=\"Opis\">\n <Text className=\"long-text\">{ko.opis}</Text>\n </FieldWithLabel>\n )}\n </Box>\n ))}\n </GridCustom>\n </>\n )\n }\n\n renderPodsumowanie() {\n return (\n <>\n <Text tag=\"h2\" mainHeader>Podsumowanie</Text>\n <Text tag=\"h3\" accentHeader>OÅ› czasu zwiÄ…zana z ogÅ‚oszeniem i ofertowaniem</Text>\n {this.renderOgloszeniePodsumowanie()}\n\n <Text tag=\"h3\" accentHeader>OÅ› czasu realizacji przedmiotów zamówienia</Text>\n {this.renderPrzedmiotyZamowieniaPodsumowanie()}\n </>\n )\n }\n\n renderOgloszeniePodsumowanie() {\n const o = this.props.ogloszenie;\n const harmonogram = [\n {\n date: o.dataOpublikowania || '',\n label: 'data opublikowania',\n key: `${o.id}_dataOpublikowania`,\n hasPointer: true,\n },\n {\n date: o.terminOfert || '',\n label: 'termin skÅ‚adania ofert',\n key: `${o.id}_terminOfert`,\n hasPointer: true,\n },\n {\n date: o.planowanyTerminPodpisaniaUmowy || '',\n dateForShowing: (dateStringToYearMonth(o.planowanyTerminPodpisaniaUmowy)),\n label: 'planowany termin podpisania umowy',\n key: `${o.id}_planowanyTerminPodpisaniaUmowy`,\n hasPointer: true,\n },\n ];\n return this.renderChartData(harmonogram)\n }\n\n renderPrzedmiotyZamowieniaPodsumowanie() {\n const przedmiotyZamowienia = this.getPrzedmiotyZamowieniaList();\n if (!przedmiotyZamowienia.length) {\n return this.renderTextError('Brak zdefiniowanych przedmiotów zamówienia.')\n }\n\n const harmonogramForRendering = this.getHarmonogramList(przedmiotyZamowienia);\n if (!harmonogramForRendering.length) {\n return this.renderTextError('Brak zdefiniowanych etapów dla przedmiotów zamówienia.')\n }\n\n harmonogramForRendering.sort((h1, h2) => {\n if (h1.date.length === 0) {return 1}\n if (h2.date.length === 0) {return -1}\n return h1.date < h2.date ? -1 : 1\n });\n\n return this.renderChartData(harmonogramForRendering);\n }\n\n renderChartData(harmonogramy) {\n this.prepareChartData(harmonogramy);\n return harmonogramy.map((h) => (\n <div key={h.key} className=\"time-line\">\n <GridCustom noWrap>\n <div className='time-line__icon'>\n <Icon aria-hidden=\"true\" icon={{ icon: h.hasPointer && 'date_range' }} />\n </div>\n <Text className=\"time-line__text\">{h.dateForShowing || h.date || '????-??-??'} - {h.label}</Text>\n </GridCustom>\n <div className=\"time-line__time-container\" style={{height: `${h.height}px`}}></div>\n </div>\n ))\n }\n\n renderTextError(text) {\n return <Text error>{text}</Text>\n }\n}\n\n\nexport { OgloszenieDetails, TYP_NUMERU_IDENTYFIKACYJNEGO };\n","import React from 'react';\nimport { Document, Page, Text, View } from '@react-pdf/renderer';\n\nimport { dateStringToYearMonth, isNotEmpty, splitLineByChar } from '../../../helpers';\nimport { PdfHeader } from '../../common';\nimport { pdfStyles } from '../../vars/pdfStyles';\nimport { OgloszenieDetails, TYP_NUMERU_IDENTYFIKACYJNEGO } from './OgloszenieDetails';\n\n\nclass OgloszeniePdf extends OgloszenieDetails {\n\n // base functions\n\n componentDidMount() {\n // it's redefined, because we don't want to scroll page and change its\n // title, like in base class\n }\n\n // rendering\n\n render() {\n const {\n flexContainerStyle,\n labelStyle,\n textWithLabelStyle,\n mainPdfContainerStyle,\n sectionTitleStyle,\n titleStyle\n } = pdfStyles;\n\n const o = this.props.ogloszenie;\n const nabor = o.ogloszenie.nabor;\n const title = `${parseInt(this.props.roboczeStatusId) === parseInt(o.status.id) ? 'Wersja robocza ogÅ‚oszenia: ' : ''}${o.tytul}`;\n const showVersionModeInfo = this.props.versionMode && o.status.label !== 'DRAFT' && o.ogloszenie.ostatniaOpublikowanaWersjaId !== o.id;\n return (\n <Document\n title={title}\n creator='Wygenerowano za poÅ›rednictwem serwisu Baza KonkurencyjnoÅ›ci.' >\n <Page size=\"A4\" style={mainPdfContainerStyle} wrap>\n <PdfHeader title={title} />\n\n {showVersionModeInfo && <Text style={labelStyle}>To jest nieaktualna wersja ogÅ‚oszenia. Ta wersja zostaÅ‚a opublikowana dnia {o.dataOpublikowania}.</Text>}\n <Text style={sectionTitleStyle}>OgÅ‚oszenie</Text>\n <View style={flexContainerStyle}>\n {isNotEmpty(o.ogloszenie.numer) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Numer</Text>\n <Text>{o.ogloszenie.numer}</Text>\n </View>\n )}\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Id</Text>\n <Text>{o.ogloszenie.id}</Text>\n </View>\n </View>\n {isNotEmpty(o.ogloszenie.projekty, 'list') && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Powstaje w kontekÅ›cie projektu</Text>\n {o.ogloszenie.projekty.map(p => <Text key={p.id}>{p.calyNumer} - {p.nazwa}</Text>)}\n </View>\n )}\n {!!nabor && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Powstaje w kontekÅ›cie naboru</Text>\n <Text>{nabor.calyNumer}{nabor.nazwa.length > 0 ? ` - ${nabor.nazwa}` : ''}</Text>\n </View>\n )}\n {isNotEmpty(o.tytul) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>TytuÅ‚</Text>\n {splitLineByChar(o.tytul).map((line, i) => <Text key={i} style={titleStyle}>{line}</Text>)}\n </View>\n )}\n {isNotEmpty(o.zamowieniaUzupelniajace) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Zamówienia uzupeÅ‚niajÄ…ce</Text>\n {splitLineByChar(o.zamowieniaUzupelniajace).map((line, i) => <Text key={i}>{line}</Text>)}\n </View>\n )}\n {isNotEmpty(o.warunkiZmianyUmowy) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Warunki zmiany umowy</Text>\n {splitLineByChar(o.warunkiZmianyUmowy).map((line, i) => <Text key={i}>{line}</Text>)}\n </View>\n )}\n {isNotEmpty(o.zalaczniki, 'list') && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>ZaÅ‚Ä…czniki</Text>\n {/* attachments are sorted by origin announcement version */}\n {o.zalaczniki.map(origin => this.renderOrigin(origin))}\n </View>\n )}\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Czy dopuszczalna oferta częściowa?</Text>\n <Text>{o.czyDopuszczalnaOfertaCzesciowa === true ? 'TAK' : 'NIE'}</Text>\n </View>\n <View style={flexContainerStyle}>\n {this.renderPublishedDates(o)}\n </View>\n <View style={flexContainerStyle}>\n {isNotEmpty(o.terminOfert) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Termin skÅ‚adania ofert</Text>\n <Text>{o.terminOfert}</Text>\n </View>\n )}\n {isNotEmpty(o.planowanyTerminPodpisaniaUmowy) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Planowany termin podpisania umowy</Text>\n <Text>{dateStringToYearMonth(o.planowanyTerminPodpisaniaUmowy)}</Text>\n </View>\n )}\n </View>\n {this.renderDaneAdresoweOgloszeniodawcy()}\n {isNotEmpty(o.osobyDoKontaktu, 'list') && this.renderOsobyDoKontaktu()}\n <Text style={sectionTitleStyle}>Części zamówienia</Text>\n {this.renderZamowienia()}\n <Text style={sectionTitleStyle}>Podsumowanie</Text>\n {this.renderPodsumowanie()}\n </Page>\n </Document>\n )\n }\n\n renderAttachmentsForOrigin(origin, label) {\n return (\n <View key={origin.id}>\n <Text>Dodane do ogÅ‚oszenia w {label}</Text>\n {origin.zalaczniki.map((z, i) => {\n if (z.nazwa.length || Object.keys(z.plik).length) {\n return <Text key={z.id}>{i + 1}. {z.nazwa || 'ZaÅ‚Ä…cznik bez nazwy'}</Text>\n } else {return null}\n })}\n </View>\n )\n }\n\n renderPublishedDates(ogloszenie) {\n if (this.props.draftMode) { return null }\n const {\n labelStyle,\n textWithLabelStyle,\n } = pdfStyles;\n if (this.props.versionMode && isNotEmpty(ogloszenie.dataOpublikowania)) {\n return (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Data opublikowania wersji</Text>\n <Text>{ogloszenie.dataOpublikowania}</Text>\n </View>\n )\n }\n return (\n <>\n {isNotEmpty(ogloszenie.ogloszenie.dataOpublikowania) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Data opublikowania ogÅ‚oszenia</Text>\n <Text>{ogloszenie.ogloszenie.dataOpublikowania}</Text>\n </View>\n )}\n {isNotEmpty(ogloszenie.dataOpublikowania) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Data ostatniej zmiany</Text>\n <Text>{ogloszenie.dataOpublikowania}</Text>\n </View>\n )}\n </>\n )\n }\n\n renderDaneAdresoweOgloszeniodawcy() {\n if (!this.props.ogloszenie.daneAdresoweOgloszeniodawcy) {\n return null\n }\n const {\n borderedSectionStyle,\n gridSection,\n labelStyle,\n textWithLabelStyle,\n } = pdfStyles;\n\n const daneAdresowe = this.props.ogloszenie.daneAdresoweOgloszeniodawcy || {};\n const adres = daneAdresowe.adres || {};\n return (\n <View style={textWithLabelStyle} wrap={false}>\n <Text style={labelStyle}>Dane adresowe ogÅ‚oszeniodawcy</Text>\n <View style={[borderedSectionStyle, gridSection]}>\n <Text>{daneAdresowe.nazwa}</Text>\n <Text>{adres.ulica} {adres.numerDomu}</Text>\n <Text>{adres.kodPocztowy} {adres.miejscowosc}</Text>\n {adres.country === 'Polska' && (\n <>\n <Text>gmina/dzielnica: {adres.gmina}</Text>\n <Text>powiat: {adres.powiat}</Text>\n <Text>woj.: {adres.wojewodztwo}</Text>\n </>\n )}\n\n {adres.kraj !== 'Polska' && (\n <Text>{adres.kraj}</Text>\n )}\n <Text>{TYP_NUMERU_IDENTYFIKACYJNEGO[daneAdresowe.typNumeruIdentyfikacyjnego]}: {daneAdresowe.numerIdentyfikacyjny}</Text>\n </View>\n </View>\n )\n }\n\n renderOsobyDoKontaktu() {\n const {\n borderedSectionStyle,\n flexContainerStyle,\n gridSection,\n labelStyle,\n textWithLabelStyle,\n } = pdfStyles;\n\n return (\n <View style={textWithLabelStyle} wrap={false}>\n <Text style={labelStyle}>Osoby do kontaktu</Text>\n <View style={[flexContainerStyle, {flexWrap: 'wrap'}]}>\n {this.props.ogloszenie.osobyDoKontaktu.map(osoba => {\n return (\n <View key={osoba.id} style={[borderedSectionStyle, gridSection]}>\n <Text>{osoba.imie} {osoba.nazwisko}</Text>\n <Text>tel.: {osoba.numerTelefonu || '-'}</Text>\n <Text>e-mail: {osoba.email}</Text>\n </View>\n )\n })}\n </View>\n </View>\n )\n }\n\n renderZamowienia() {\n const o = this.props.ogloszenie;\n if (!isNotEmpty(o.zamowienia)) {\n const {\n textInfoStyle,\n errorStyle,\n } = pdfStyles;\n return (\n <Text style={[textInfoStyle, errorStyle]}>Brak zdefiniowanych części zamówienia</Text>\n )\n }\n const {\n labelStyle,\n sectionTitleStyle,\n textWithLabelStyle,\n titleStyle\n } = pdfStyles;\n\n return (\n <View>\n {o.zamowienia.map((z, i) => (\n <View key={z.id}>\n <Text style={sectionTitleStyle}>Część: {i + 1}</Text>\n {isNotEmpty(z.tytul) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>TytuÅ‚ części {i + 1}</Text>\n <Text style={titleStyle}>{z.tytul}</Text>\n </View>\n )}\n {isNotEmpty(z.szacunkowaWartosc) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Budżet części {i + 1}</Text>\n <Text style={titleStyle}>{z.szacunkowaWartosc.replace('.', ',')} PLN</Text>\n </View>\n )}\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Czy dopuszczalne oferty wariantowe</Text>\n <Text>{z.czyWariantowe === true ? 'TAK' : 'NIE'}</Text>\n </View>\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Przedmioty zamówienia do części {i + 1}</Text>\n {this.renderPrzedmiotyZamowienia(z.przedmiotyZamowienia)}\n </View>\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Kryteria oceny do części {i + 1}</Text>\n {this.renderKryteriaOceny(z.kryteriaOceny)}\n </View>\n </View>\n ))}\n </View>\n )\n }\n\n renderPrzedmiotyZamowienia(przedmiotyZamowienia) {\n if (isNotEmpty(przedmiotyZamowienia, 'list')) {\n return przedmiotyZamowienia.map((pz) => this.renderPrzedmiotZamowienia(pz))\n }\n const {\n errorStyle,\n textInfoStyle,\n } = pdfStyles;\n return (\n <Text style={[textInfoStyle, errorStyle]}>Brak zdefiniowanych przedmiotów zamówienia</Text>\n )\n }\n\n renderPrzedmiotZamowienia(przedmiotZamowienia) {\n const {\n borderedSectionStyle,\n labelStyle,\n pzTitleSection,\n textWithLabelStyle,\n } = pdfStyles;\n\n return (\n <View key={przedmiotZamowienia.id} style={borderedSectionStyle}>\n <View style={pzTitleSection}>\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Typ</Text>\n <Text>{przedmiotZamowienia.kategoria.nazwa || '-'}</Text>\n </View>\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Podkategoria</Text>\n <Text>{przedmiotZamowienia.podkategoria.nazwa || '-'}</Text>\n </View>\n </View>\n <View style={textWithLabelStyle}>\n {isNotEmpty(przedmiotZamowienia.opis) && (\n <>\n <Text style={labelStyle}>Opis</Text>\n {splitLineByChar(przedmiotZamowienia.opis).map((line, i) => <Text key={i}>{line}</Text>)}\n </>\n )}\n </View>\n <View style={textWithLabelStyle}>\n {isNotEmpty(przedmiotZamowienia.okresGwarancji) && (\n <>\n <Text style={labelStyle}>Okres gwarancji</Text>\n <Text>{przedmiotZamowienia.okresGwarancji}</Text>\n </>\n )}\n </View>\n {isNotEmpty(przedmiotZamowienia.kodyCPV, 'list') && this.renderKodyCPV(przedmiotZamowienia.kodyCPV)}\n {isNotEmpty(przedmiotZamowienia.miejscaRealizacji, 'list') && this.renderMiejscaRealizacji(przedmiotZamowienia.miejscaRealizacji)}\n {isNotEmpty(przedmiotZamowienia.harmonogramy, 'list') && this.renderHarmonogram(przedmiotZamowienia.harmonogramy)}\n {isNotEmpty(przedmiotZamowienia.warunkiUdzialu, 'list') && this.renderWarunkiUdziaÅ‚u(przedmiotZamowienia.warunkiUdzialu)}\n </View>\n )\n }\n\n renderKodyCPV(kodyCPV) {\n const {\n labelStyle,\n textWithLabelStyle,\n } = pdfStyles;\n\n return (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Kody CPV</Text>\n {kodyCPV.map(kod_ => <Text key={kod_.id}>{kod_.kod} {kod_.nazwa}</Text>)}\n </View>\n )\n }\n\n renderMiejscaRealizacji(miejscaRealizacji) {\n const {\n flexContainerStyle,\n labelStyle,\n textWithLabelStyle,\n } = pdfStyles;\n\n return (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Miejsca realizacji</Text>\n {miejscaRealizacji.map(mr => {\n let address = null;\n if (mr.kraj || mr.wojewodztwo || mr.powiat || mr.gmina || mr.miejscowosc) {\n address = (\n <View style={flexContainerStyle}>\n {isNotEmpty(mr.kraj) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Kraj</Text>\n <Text>{mr.kraj}</Text>\n </View>\n )}\n {isNotEmpty(mr.wojewodztwo) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Województwo</Text>\n <Text>{mr.wojewodztwo}</Text>\n </View>\n )}\n {isNotEmpty(mr.powiat) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Powiat</Text>\n <Text>{mr.powiat || '-'}</Text>\n </View>\n )}\n {isNotEmpty(mr.gmina) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Gmina</Text>\n <Text>{mr.gmina || '-'}</Text>\n </View>\n )}\n {isNotEmpty(mr.miejscowosc) && (\n <View>\n <Text style={labelStyle}>Miejscowość</Text>\n <Text>{mr.miejscowosc || '-'}</Text>\n </View>\n )}\n </View>\n );\n }\n return (\n <View key={mr.id}>\n <Text style={labelStyle}>{mr.typ.nazwa}</Text>\n {address}\n </View>\n )\n })}\n </View>\n )\n }\n\n renderHarmonogram(harmonogramy) {\n const {\n borderedSeparateSectionStyle,\n flexContainerStyle,\n labelStyle,\n textWithLabelStyle,\n } = pdfStyles;\n\n let i = 0;\n return (\n <>\n <Text style={labelStyle}>Harmonogram</Text>\n {harmonogramy.map((h) => {\n i++;\n return (\n <View key={h.id} style={borderedSeparateSectionStyle}>\n <Text style={labelStyle}>Etap {i}</Text>\n <View style={flexContainerStyle}>\n {isNotEmpty(h.poczatekRealizacji) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>PoczÄ…tek realizacji</Text>\n <Text>{h.poczatekRealizacji}</Text>\n </View>\n )}\n {isNotEmpty(h.koniecRealizacji) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Koniec realizacji</Text>\n <Text>{h.koniecRealizacji}</Text>\n </View>\n )}\n </View>\n {isNotEmpty(h.opis) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Opis</Text>\n {splitLineByChar(h.opis).map((line, i) => <Text key={i}>{line}</Text>)}\n </View>\n )}\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Czy wystÄ™puje pÅ‚atność częściowa</Text>\n <Text>{h.czyWystepujePlatnoscCzesciowa === true ? 'TAK' : 'NIE'}</Text>\n </View>\n </View>\n )\n })}\n </>\n )\n }\n\n renderWarunkiUdziaÅ‚u(warunkiUdzialu) {\n const {\n labelStyle,\n textWithLabelStyle,\n } = pdfStyles;\n\n return (\n <View>\n <Text style={labelStyle}>Warunki, jakie musi speÅ‚niać oferent</Text>\n {warunkiUdzialu.map((wu) =>\n <View key={wu.id}>\n {wu.typ.id !== null && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Typ</Text>\n <Text>{wu.typ.nazwa}</Text>\n </View>\n )}\n {isNotEmpty(wu.opis) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Opis</Text>\n {splitLineByChar(wu.opis).map((line, i) => <Text key={i}>{line}</Text>)}\n </View>\n )}\n </View>\n )}\n </View>\n )\n }\n\n renderKryteriaOceny(kryteriaOceny) {\n if (!isNotEmpty(kryteriaOceny, 'list')) {\n const {\n errorStyle,\n textInfoStyle,\n } = pdfStyles;\n return (\n <Text style={[textInfoStyle, errorStyle]}>Brak zdefiniowanych kryteriów oceny</Text>\n )\n }\n const {\n borderedSeparateSectionStyle,\n labelStyle,\n textWithLabelStyle,\n } = pdfStyles;\n return (\n <>\n {kryteriaOceny.map((ko) => (\n <View key={ko.id} style={borderedSeparateSectionStyle}>\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Czy kryterium cenowe?</Text>\n <Text>{ko.czyKryteriumCenowe === true ? 'TAK' : 'NIE'}</Text>\n </View>\n {isNotEmpty(ko.opis) && (\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>Opis</Text>\n {splitLineByChar(ko.opis).map((line, i) => <Text key={i}>{line}</Text>)}\n </View>\n )}\n </View>\n ))}\n </>\n )\n }\n\n renderPodsumowanie() {\n const {\n labelStyle,\n textWithLabelStyle,\n } = pdfStyles;\n\n return (\n <>\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>OÅ› czasu zwiÄ…zana z ogÅ‚oszeniem i ofertowaniem</Text>\n {this.renderOgloszeniePodsumowanie()}\n </View>\n <View style={textWithLabelStyle}>\n <Text style={labelStyle}>OÅ› czasu realizacji przedmiotów zamówienia</Text>\n {this.renderPrzedmiotyZamowieniaPodsumowanie()}\n </View>\n </>\n )\n }\n\n renderChartData(harmonogramy) {\n this.prepareChartData(harmonogramy);\n return harmonogramy.map((h) => (\n <View key={h.key}>\n <Text style={!h.hasPointer && {paddingLeft: 12}}>\n <Text style={pdfStyles.dateTextStyle}>{h.hasPointer ? '-> ' : '' }{h.dateForShowing || h.date || '????-??-??'}</Text> - {h.label}\n </Text>\n <Text style={{height: `${h.height}px`, borderLeftWidth: 2, borderLeftStyle: 'dashed'}}></Text>\n </View>\n ))\n }\n\n renderTextError(text) {\n return <Text style={[pdfStyles.textInfoStyle, pdfStyles.errorStyle]}>{text}</Text>\n }\n}\n\nexport { OgloszeniePdf };\n","import React from 'react';\nimport { TabBar, Tab } from '@rmwc/tabs';\nimport { BadgeAnchor, Badge } from '@rmwc/badge';\nimport '@rmwc/badge/badge.css';\n\nimport {\n dateStringToYearMonth,\n generatePdfDocument,\n isNotEmpty,\n redirectToLoginView,\n serializeAuditData\n} from '../../../helpers';\nimport {\n translateErrorMessage,\n serializeObject,\n} from '../../../serializers';\nimport {\n ButtonCreatePdf,\n ButtonStyled,\n Container,\n FieldWithLabel,\n GridCustom,\n Text\n} from '../../common';\nimport { BaseComponent } from '../common';\nimport {\n OfertyOffererClosedStatus,\n OfertyOffererPublishedStatus,\n OfertyOffererResolvedStatus,\n OfertyOwnerClosedStatus,\n OfertyOwnerPublishedStatus,\n OfertyOwnerResolvedStatus\n} from '../oferty';\nimport {\n PytaniaForOgloszenieAnnouncementOwner,\n PytaniaForOgloszenieAnonymous,\n PytaniaForOgloszenieLoggedIn,\n} from '../pytania';\nimport { ListaWersji } from'./ListaWersji';\nimport { ManageAdvertisementButtons } from'./ManageAdvertisementButtons';\nimport { OgloszenieDetails } from'./OgloszenieDetails';\nimport { OgloszeniePdf } from'./OgloszeniePdf';\nimport { fetchApi } from \"../../../fetch\";\nimport { MenuContext } from \"../../../context/menuContext\";\n\n\nconst ANNOUNCEMENT_STATUS_DRAFT = 'announcement_status_draft';\nconst ANNOUNCEMENT_STATUS_PUBLISHED = 'announcement_status_published';\nconst TAB_INDEXES = {\n ogloszenie: 0,\n oferty: 1,\n pytania: 2,\n};\nconst REVERTED_TAB_INDEXES = {\n 0: 'ogloszenie',\n 1: 'oferty',\n 2: 'pytania',\n};\n\n\nclass Ogloszenie extends BaseComponent {\n\n static contextType = MenuContext;\n\n // basic functions\n\n componentDidMount() {\n super.componentDidMount();\n window.onpopstate = () => {\n this.handleReload();\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.user.identifier !== this.props.user.identifier) {\n this.handleReload();\n }\n }\n\n componentWillUnmount() {\n super.componentWillUnmount();\n this.props.setAdvertisementManagerType(\n {isAuthor: false, isAdmin: false});\n window.onpopstate = () => {};\n }\n\n // handlers\n\n handleFetchSuccess = (data) => {\n this.xhrFetch = null;\n\n const ogloszenie = serializeObject(data.advertisement);\n this.props.setAdvertisementManagerType(\n {\n isAuthor: ogloszenie.ogloszenie.jestAutorem || false,\n isAdmin: ogloszenie.ogloszenie.isAdmin || false,\n },\n () => {\n // set values from dictionaries\n this.obublikowaneStatusId = data.dictionaries[ANNOUNCEMENT_STATUS_PUBLISHED];\n this.roboczeStatusId = parseInt(data.dictionaries[ANNOUNCEMENT_STATUS_DRAFT]);\n\n // reformat attachments\n ogloszenie.zalaczniki = this.sortAttachmentsByOrigins(\n ogloszenie.zalaczniki || []);\n\n ogloszenie.czyUlubione = data.favorite;\n ogloszenie.badge = data.badge;\n ogloszenie.offer_set_badge_count = data.offer_set_badge_count;\n ogloszenie.question_badge_count = data.question_badge_count;\n\n const params = new URLSearchParams(this.props.location.search);\n let section = params.get('sekcja') || 'ogloszenie';\n const isCurrentVersion =\n !(this.props.draftMode || this.props.versionMode);\n if (!isCurrentVersion) {\n section = 'ogloszenie';\n }\n\n this.setState({\n initializingOn: false,\n ogloszenie: ogloszenie,\n selectedTab: TAB_INDEXES[section] || 0,\n auditData: serializeAuditData(isCurrentVersion\n ? data.advertisement.advertisement\n : data.advertisement\n ),\n });\n }\n )\n }\n\n handleFetchError = (data) => {\n this.xhrFetch = null; // clean xhr object\n this.setState({\n fetchError: translateErrorMessage(data.message),\n initializingOn: false,\n });\n }\n\n handleFetchIncorrectStatus = (status) => {\n this.xhrFetch = null; // clean xhr object\n\n if (status === 404) {\n this.setState({pageNotFound: true, initializingOn: false});\n return\n }\n this.setState({\n initializingOn: false,\n fetchError: status === 403\n ? 'Nie masz uprawnieÅ„ do przegladania tej strony.'\n : `WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n });\n }\n\n handleCloseVersionDialog = () => {\n this.setState({showOtherVersionOn: false});\n }\n\n handleReload = (link=null) => {\n if (link !== null) {\n this.props.history.push(link);\n }\n this.setState(\n {initializingOn: true, showOtherVersionOn: false},\n this.fetchInitialData\n );\n }\n\n handleCreatePdf = () => {\n this.setState(\n {pdfCreatingOn: true},\n () => generatePdfDocument(\n <OgloszeniePdf\n draftMode={this.props.draftMode}\n ogloszenie={this.state.ogloszenie}\n roboczeStatusId={this.roboczeStatusId}\n versionMode={this.props.versionMode} />,\n `ogloszenie_${this.props.match.params.id}.pdf`,\n this.callbackPfdCreated\n )\n );\n }\n\n handleChangeTab = (ev) => {\n const selectedTab = ev.detail.index;\n this.setState(\n {selectedTab: selectedTab},\n () => {\n //update url \"sekcja\" param\n this.props.history.push(\n `${window.location.pathname}?sekcja=${REVERTED_TAB_INDEXES[selectedTab] || REVERTED_TAB_INDEXES[0]}`);\n }\n );\n }\n\n handleChangeAdvertisementStatus = (status) => {\n this.setState(prevState => ({\n ogloszenie: {\n ...prevState.ogloszenie, ...{\n ogloszenie: {...prevState.ogloszenie.ogloszenie, status}\n }\n }\n }));\n }\n\n handleAddToFavorite = () => {\n fetchApi(\n `/api/favorite-announcements/${this.props.match.params.id}`,\n \"POST\",\n {},\n {},\n () => {\n this.handleReload();\n }\n );\n }\n\n handleRemoveBadge = () => {\n fetchApi(\n `/api/badge/announcements/${this.props.match.params.id}`,\n \"DELETE\",\n {},\n {},\n () => {\n this.handleReload();\n this.context.refreshBadges();\n }\n );\n }\n\n handleRemoveFromFavorite = () => {\n fetchApi(\n `/api/favorite-announcements/${this.props.match.params.id}`,\n \"DELETE\",\n {},\n {},\n () => {\n this.handleReload();\n }\n );\n }\n\n // helpers\n\n getAdditionalState(props) {\n return {\n showOtherVersionOn: false,\n pdfCreatingOn: false,\n ogloszenie: null,\n selectedTab: null,\n auditData: {},\n }\n }\n\n postState(props) {\n super.postState(props);\n this.obublikowaneStatusId = null;\n this.roboczeStatusId = null;\n }\n\n getFetchUrl() {\n let url = `/api/announcements/${this.props.match.params.id}`;\n if (this.props.versionMode) {\n url += `/versions/${this.props.match.params.versionId}`;\n }\n return url\n }\n\n getFetchData() {\n let body = {dictionaries: [ANNOUNCEMENT_STATUS_DRAFT, ANNOUNCEMENT_STATUS_PUBLISHED]};\n if (this.props.draftMode) {\n body['version_mode'] = 'draft';\n }\n return body\n }\n\n callbackPfdCreated = () => {\n this.setState({pdfCreatingOn: false});\n }\n\n sortAttachmentsByOrigins(attachments) {\n let origins = {};\n let originsIds = [];\n for (let attachment of attachments) {\n const originId = (attachment.origin || {}).id || null;\n if (!originId) { continue }\n if (!originsIds.includes(originId)) {\n origins[originId] = {\n dataOpublikowania: attachment.origin.dataOpublikowania || '',\n zalaczniki: [\n {\n id: attachment.id,\n nazwa: attachment.nazwa,\n plik: attachment.plik,\n },\n ],\n };\n originsIds.push(originId);\n } else {\n origins[originId]['zalaczniki'] = [...origins[originId]['zalaczniki'], {\n id: attachment.id,\n nazwa: attachment.nazwa,\n plik: attachment.plik,\n }];\n }\n }\n\n let originsList = Object.entries(origins).map(data => Object.assign(data[1], {id: parseInt(data[0])}));\n return originsList.sort((origin1, origin2) => {\n return origin1.id < origin2.id\n })\n }\n\n // rendering\n\n renderPublishedDates(ogloszenie) {\n if (this.props.draftMode) { return null }\n\n if (this.props.versionMode && isNotEmpty(ogloszenie.dataOpublikowania)) {\n return (\n <FieldWithLabel label=\"Data opublikowania wersji\" className=\"announcement--date\">\n <Text>{ogloszenie.dataOpublikowania}</Text>\n </FieldWithLabel>\n )\n }\n return (\n <>\n {isNotEmpty(ogloszenie.ogloszenie.dataOpublikowania) && (\n <FieldWithLabel label=\"Data opublikowania ogÅ‚oszenia\" className=\"announcement--date\">\n <Text>{ogloszenie.ogloszenie.dataOpublikowania}</Text>\n </FieldWithLabel>\n )}\n {isNotEmpty(ogloszenie.dataOpublikowania) && (\n <FieldWithLabel label=\"Data ostatniej zmiany\" className=\"announcement--date\">\n <Text>{ogloszenie.dataOpublikowania}</Text>\n </FieldWithLabel>\n )}\n </>\n )\n }\n\n renderHeader() {\n if (this.state.ogloszenie === null) { return null }\n const o = this.state.ogloszenie;\n let isMyAdvertisement = false;\n if (this.props.user.id === o.ogloszenie.ktoUtworzyl.id) {\n isMyAdvertisement = true;\n }\n\n return (\n <>\n {!this.props.userAnonymous\n && !o.ogloszenie.jestAutorem\n && <ManageAdvertisementButtons\n advertisement={o}\n onChangeAdvertisementStatus={this.handleChangeAdvertisementStatus} />\n }\n <GridCustom flexS fullwidth centerVertical>\n {isNotEmpty(o.ogloszenie.numer) && (\n <Text tag=\"h2\" mainHeader>OgÅ‚oszenie nr {o.ogloszenie.numer}</Text>\n )}\n <GridCustom>\n {(!isMyAdvertisement && o.czyUlubione === false) && <ButtonStyled onClick={this.handleAddToFavorite} primary\n icon=\"favorite\">DODAJ DO ULUBIONYCH<span className=\"sr-only\"> ogÅ‚oszenie {this.state.ogloszenie.tytul}</span></ButtonStyled>}\n {(!isMyAdvertisement && o.czyUlubione === true) && <ButtonStyled onClick={this.handleRemoveFromFavorite} remove\n icon=\"close\">USUŃ Z ULUBIONYCH<span className=\"sr-only\"> ogÅ‚oszenie {this.state.ogloszenie.tytul}</span></ButtonStyled>}\n <ButtonCreatePdf\n pdfCreatingOn={this.state.pdfCreatingOn}\n onClick={this.handleCreatePdf}\n >\n Pobierz plik PDF<span className=\"sr-only\"> ogÅ‚oszenia {this.state.ogloszenie.tytul}</span>\n </ButtonCreatePdf>\n </GridCustom>\n\n </GridCustom>\n\n <Container>\n {isNotEmpty(o.tytul) && (\n <Text tag=\"h1\" className=\"text--main-title long-text\">{o.tytul}</Text>\n )}\n <GridCustom fullwidth flexM centerVertical>\n <Text tag=\"h2\" accentHeader>Status ogÅ‚oszenia: {o.ogloszenie.status.nazwa}</Text>\n {o.badge && <BadgeAnchor>\n <ButtonStyled onClick={this.handleRemoveBadge} primary icon=\"check\">USUŃ OZNACZENIE JAKO NOWE<span className=\"sr-only\"> ogÅ‚oszenia {this.state.ogloszenie.tytul}</span></ButtonStyled>\n <Badge label=\"N\" />\n </BadgeAnchor>}\n \n {parseInt(o.status.id) === this.roboczeStatusId && <Text accentHeader>Status wersji: {o.status.nazwa}</Text>}\n <ButtonStyled\n className=\"announcement__btn-versions\"\n lite\n noMargin\n onClick={(e) => {\n this.setState({showOtherVersionOn: true});\n e.currentTarget.blur();\n }}>\n Podejrzyj inne wersje<span className=\"sr-only\"> ogÅ‚oszenia {o.tytul}</span>\n </ButtonStyled>\n {this.state.showOtherVersionOn && (\n <ListaWersji\n id={o.id}\n isAuthor={o.ogloszenie.ktoUtworzyl.id === this.props.user.id}\n isPublished={this.obublikowaneStatusId === o.ogloszenie.status.id}\n ogloszenieId={this.props.match.params.id}\n roboczeStatusId={this.roboczeStatusId}\n closeVersionDialog={this.handleCloseVersionDialog}\n reload={this.handleReload}\n />)}\n </GridCustom>\n <GridCustom fullwidth flexM>\n {isNotEmpty(o.terminOfert) && (\n <FieldWithLabel label=\"Termin skÅ‚adania ofert\" className=\"announcement--date\">\n <Text>{o.terminOfert}</Text>\n </FieldWithLabel>\n )}\n {this.renderPublishedDates(o)}\n {isNotEmpty(o.planowanyTerminPodpisaniaUmowy) && (\n <FieldWithLabel label=\"Planowany termin podpisania umowy\" className=\"announcement--date\">\n <Text>{dateStringToYearMonth(o.planowanyTerminPodpisaniaUmowy)}</Text>\n </FieldWithLabel>\n )}\n </GridCustom>\n </Container>\n <TabBar\n activeTabIndex={this.state.selectedTab}\n onActivate={this.handleChangeTab}\n >\n <Tab label=\"OgÅ‚oszenie\" aria-label=\"OgÅ‚oszenie, panel zakÅ‚adek, lista 1 z 3\"/>\n <Tab label=\"Oferty\" aria-label=\"Oferty, panel zakÅ‚adek, lista 2 z 3\" disabled={this.props.draftMode || this.props.versionMode}>\n {o.offer_set_badge_count > 0 && <Badge label={o.offer_set_badge_count} align='inline'/>}\n </Tab>\n <Tab label=\"Pytania\" aria-label=\"Pytania, panel zakÅ‚adek, lista 3 z 3\" disabled={this.props.draftMode || this.props.versionMode}>\n {o.question_badge_count > 0 && <Badge label={o.question_badge_count} align='inline'/>}\n </Tab>\n </TabBar>\n </>\n )\n }\n\n renderContent() {\n switch (this.state.selectedTab) {\n case TAB_INDEXES['oferty']:\n return this.renderOferty()\n case TAB_INDEXES['pytania']:\n return this.renderPytania()\n default:\n return this.renderOgloszenie()\n }\n }\n\n renderOferty() {\n if (this.props.draftMode || this.props.versionMode) { return null }\n switch (this.state.ogloszenie.ogloszenie.status.label) {\n case 'DRAFT':\n return null\n case 'PUBLISHED':\n return this.renderOfertyForPublishedStatus()\n case 'CANCELLED':\n return this.renderOfertyForCancelledStatus()\n case 'CLOSED':\n return this.renderOfertyForClosedStatus()\n case 'RESOLVED':\n return this.renderOfertyForResolvedStatus()\n default:\n return null\n }\n }\n\n renderOfertyForPublishedStatus() {\n if (this.props.userAnonymous) {\n return (\n <div className=\"login-info-container\">\n <ButtonStyled add onClick={redirectToLoginView} className=\"btn btn--main\">Utwórz ofertÄ™</ButtonStyled>\n <Text info>Wymaga logowania</Text>\n </div>\n )\n }\n // check if advertisement owner\n if (this.props.user.advertisementManagerType.isAuthor) {\n return <OfertyOwnerPublishedStatus ogloszenie={this.state.ogloszenie} refresh={() => this.handleReload()} />\n }\n return <OfertyOffererPublishedStatus ogloszenie={this.state.ogloszenie} />\n }\n\n renderOfertyForCancelledStatus() {\n return <Text info>OgÅ‚oszenie zostaÅ‚o anulowane dla wszystkich oferentów.</Text>\n }\n\n renderOfertyForClosedStatus() {\n return this.renderOfertyForAfterPublishedStatus(\n OfertyOwnerClosedStatus, OfertyOffererClosedStatus)\n }\n\n renderOfertyForResolvedStatus() {\n return this.renderOfertyForAfterPublishedStatus(\n OfertyOwnerResolvedStatus, OfertyOffererResolvedStatus)\n }\n\n renderOfertyForAfterPublishedStatus(OwnerComponent, OffererComponent) {\n const { advertisementManagerType } = this.props.user;\n const { isAuthor: isAdvertisementOwner } = advertisementManagerType;\n if (isAdvertisementOwner || advertisementManagerType.isAdmin) {\n return <OwnerComponent\n {...this.props}\n isAdvertisementOwner={isAdvertisementOwner}\n ogloszenie={this.state.ogloszenie}\n onlyAdmin={!isAdvertisementOwner} />\n }\n return <OffererComponent {...this.props} ogloszenie={this.state.ogloszenie} />\n }\n\n renderPytania() {\n\t\t\n if (this.props.userAnonymous) {\n return <PytaniaForOgloszenieAnonymous ogloszenie={this.state.ogloszenie} reloadAnnouncement={this.handleReload} />\n } else if (this.state.ogloszenie.ogloszenie.ktoUtworzyl.id === this.props.user.id) {\n return <PytaniaForOgloszenieAnnouncementOwner ogloszenie={this.state.ogloszenie} reloadAnnouncement={this.handleReload} />\n }\n\n return <PytaniaForOgloszenieLoggedIn ogloszenie={this.state.ogloszenie} reloadAnnouncement={this.handleReload} />\n }\n\n renderOgloszenie() {\n if (this.state.ogloszenie === null) { return null }\n const o = this.state.ogloszenie;\n return (\n <OgloszenieDetails\n auditData={this.state.auditData}\n ogloszenie={o}\n versionMode={this.props.versionMode}\n draftMode={this.props.draftMode} />\n )\n }\n}\n\n\nexport { Ogloszenie };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { fetchApi } from '../../../fetch';\nimport { MIEJSCE_REALIZACJI_OLD_BK_DICT } from '../../../const';\nimport { getSearchFiltersCount, SEARCH_CLEANED_FILTERS } from '../../../filters';\nimport { dateToStringOldBK } from '../../../helpers';\nimport { ButtonStyled, Container, GridCustom, GridCellCustom, Text, TextFieldCustom } from '../../common';\nimport { PaginatedBaseComponent } from '../common';\nimport { FiltryWyszukiwarki } from './FiltryWyszukiwarki';\n\n\nconst STATUS_MAP = {\n CANCELLED: 'canceled',\n PUBLISHED: 'active',\n CLOSED: 'archived',\n};\n\n\nclass Wyszukiwarka extends PaginatedBaseComponent {\n\n // basic functions\n\n componentDidMount() {\n document.title = \"Baza KonkurencyjnoÅ›ci - wyszukiwarka\";\n\n super.componentDidMount();\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.userIdentifier !== this.props.userIdentifier) {\n this.handleReload();\n }\n }\n\n // handlers\n\n handleReload = (link=null) => {\n this.setState(\n {initializingOn: true, fetchError: '', objects: []},\n () => {this.fetchInitialData()}\n );\n }\n\n handleSubmit = (ev) => {\n ev.preventDefault();\n this.handleReload();\n }\n\n handleChangeQuery = (value) => {\n this.setState(\n {query: value, pageNumber: 1},\n () => {\n // change url\n this.props.history.push(\n encodeURI(`${window.location.pathname}${value.length > 0 ? `?q=${value}` : ''}`));\n }\n );\n }\n\n handleAddToFavorites = (object) => {\n fetchApi(\n `/api/favorite-announcements/${object.id}`,\n \"POST\",\n {},\n {},\n () => {\n const index = this.state.objects.findIndex(obj => obj.id === object.id);\n const updatedObjects = [...this.state.objects];\n updatedObjects[index] = { ...updatedObjects[index], favorite: true};\n this.setState({ objects: updatedObjects });\n }\n );\n }\n\n handleRemoveFromFavorites = (object) => {\n fetchApi(\n `/api/favorite-announcements/${object.id}`,\n \"DELETE\",\n {},\n {},\n () => {\n const index = this.state.objects.findIndex(obj => obj.id === object.id);\n const updatedObjects = [...this.state.objects];\n updatedObjects[index] = { ...updatedObjects[index], favorite: false};\n this.setState({ objects: updatedObjects });\n }\n );\n }\n\n // helpers\n\n preState(props) {\n super.preState();\n\n // redefine from base class\n this.objectsName = 'ogloszenia';\n this.paginateBy = 20;\n this.sortingValues = [\n ['publicationDate', 'Po dacie publikacji ogÅ‚oszeÅ„'],\n ['submissionDeadline', 'Po terminie skÅ‚adania ofert'],\n ['default', 'DomyÅ›lnie'],\n ];\n this.sortingLabel = 'Sortuj wyniki wyszukiwania';\n this.filtersComponentClass = FiltryWyszukiwarki;\n\n this.getFiltersCount = getSearchFiltersCount;\n }\n\n getAdditionalState(props) {\n const params = new URLSearchParams(props.location.search);\n return Object.assign({}, super.getAdditionalState(props), {\n selectedSort: {value: this.sortingValues[2][0], label: this.sortingValues[2][1]},\n query: params.get('q') || '',\n filters: SEARCH_CLEANED_FILTERS,\n })\n }\n\n postState(props) {\n super.postState(props);\n this.dictionaries = {};\n }\n\n getFetchUrl() {\n return '/api/announcements/search'\n }\n\n getFetchData() {\n let queryDict = super.getFetchData();\n\n if (this.state.query.length) {\n queryDict['query'] = this.state.query;\n }\n for (let [name, value] of Object.entries(this.state.filters)) {\n if (['publicationDateRange', 'submissionDeadlineRange'].includes(name)) {\n for (let [subname, subvalue] of Object.entries(value)) {\n if (subname === 'type') { continue }\n if (!!subvalue) {\n queryDict[`${name}[${subname}]`] = subvalue;\n }\n }\n } else if (name === 'cpvItem') {\n if (Object.keys(value).length) {\n queryDict[name] = value.map(kod => kod.kod);\n }\n } else if ('programme' === name) {\n if (value.length) {\n queryDict[name] = value.map(mr => mr.value.toUpperCase());\n }\n } else if ('fulfillmentPlaces' === name) {\n if (value.length) {\n queryDict[name] = value.map(mr => mr.value);\n }\n } else if (['category', 'subcategory'].includes(name)) {\n if (value !== null) {\n queryDict[name] = value.label;\n }\n } else if ((name === 'status' && Object.keys(value).length) ||\n value !== SEARCH_CLEANED_FILTERS[name]\n ) {\n queryDict[name] = value;\n }\n }\n return queryDict\n }\n\n getFetchError(message) {\n message = super.getFetchError(message);\n return `Nie udaÅ‚o siÄ™ wyszukać ogÅ‚oszeÅ„. ${message}`\n }\n\n getFetchIncorrectStatusError(status) {\n return `Nie udaÅ‚o siÄ™ wyszukać ogÅ‚oszeÅ„. WystÄ…piÅ‚ nieoczekiwany bÅ‚Ä…d o kodzie ${status}.`\n }\n\n // rendering\n\n renderHeader() {\n return (\n <Container>\n <form onSubmit={this.handleSubmit}>\n <label htmlFor=\"search_input\" className=\"sr-only\">Wyszukaj ogÅ‚oszenie</label>\n <GridCustom flexS fullwidth>\n <TextFieldCustom\n clearFieldContext=\"szukaj\"\n fullwidth\n maxLength={250}\n value={this.state.query}\n onChange={ev => this.handleChangeQuery(ev.target.value)}\n onClear={ev => this.handleChangeQuery('')}\n id=\"search_input\" />\n <ButtonStyled className=\"search__btn\" icon=\"search\" id=\"szukaj_button_id\" primary onClick={this.handleReload}>Szukaj</ButtonStyled>\n </GridCustom>\n </form>\n </Container>\n )\n }\n\n renderEmptyObjects() {\n return <Text error role=\"alert\">Nie znaleziono ogÅ‚oszeÅ„ speÅ‚niajÄ…cych kryteria wyszukiwania.</Text>\n }\n\n renderList() {\n const total = this.state.total;\n return (\n <>\n <Text accentHeader tag=\"h2\" role=\"alert\">Znaleziono {total < this.paginateBy ? '' : 'okoÅ‚o '}{total} ogÅ‚oszeÅ„</Text>\n <ul>\n {this.state.objects.map(o => this.renderObject(o))}\n </ul>\n </>\n )\n }\n\n renderFiltersComponent() {\n return (\n <this.filtersComponentClass\n dictionaries={this.dictionaries}\n filters={this.state.filters}\n closeFilters={() => this.setState({filtersAreOn: false})}\n updateDictionaries={dictionaries => this.dictionaries = dictionaries}\n updateFilters={this.handleApplyFilters}\n />\n )\n }\n\n renderObject(object) {\n return (\n <li key={object.id} className=\"separate-content search__item\"> \n <GridCustom fullwidth>\n <GridCellCustom>\n <Link to={`/ogloszenia/${object.id}`} className=\"link-text\"><span dangerouslySetInnerHTML={{__html: object.tytul}}></span></Link>\n {object.moje && <span className=\"author-label\">Moje ogÅ‚oszenie</span>}\n </GridCellCustom>\n {!object.moje && (\n <GridCellCustom style={{minWidth: '255px'}}>\n {(object.favorite === false) && <ButtonStyled onClick={() => this.handleAddToFavorites(object)} primary\n icon=\"favorite\">DODAJ DO ULUBIONYCH<span className=\"sr-only\"> ogÅ‚oszenie {object.tytul}</span></ButtonStyled>}\n {(object.favorite === true) && <ButtonStyled onClick={() => this.handleRemoveFromFavorites(object)} remove\n icon=\"close\">USUŃ Z ULUBIONYCH<span className=\"sr-only\"> ogÅ‚oszenie {object.tytul}</span></ButtonStyled>}\n </GridCellCustom>\n )}\n </GridCustom>\n\n <p dangerouslySetInnerHTML={{__html: object.tresc}}></p>\n <GridCustom flexM fullwidth>\n <Text info className=\"search__results-meta\">Opublikowano: {object.dataOpublikowania}</Text>\n <Text info className=\"search__results-meta\">Termin skÅ‚adania ofert: {object.terminOfert}</Text>\n <Text info className=\"search__results-meta search__results-meta--company-name\"><span dangerouslySetInnerHTML={{__html: object.nazwaOgloszeniodawcy}}></span></Text>\n {(object.miejsceRealizacji || '').length > 0 && <Text info className=\"search__results-meta\">{object.miejsceRealizacji}</Text>}\n </GridCustom>\n </li>\n )\n }\n\n renderAdditionalAfterBaseContent() {\n return this.renderOldBkLink()\n }\n\n renderOldBkLink() {\n const filters = this.state.filters;\n const isPublicationDateRangeCustom = filters.publicationDateRange.type === 'custom'\n const isSubmissionDeadlineRangeCustom = filters.submissionDeadlineRange.type === 'custom'\n return (\n <form name=\"search\" method=\"post\" action=\"https://archiwum-bazakonkurencyjnosci.funduszeeuropejskie.gov.pl/publication/list/\" target=\"_blank\">\n {this.state.query.length > 0 && <input type=\"hidden\" id=\"filter_keyword\" name=\"filter[keyword]\" value={this.state.query} />}\n {filters.status.map((s, i) => <input type=\"hidden\" key={i} id={`search_status_${i}`} name=\"search[status][]\" value={`${STATUS_MAP[s]}`} />)}\n {isPublicationDateRangeCustom && filters.publicationDateRange.from && (\n <input type=\"hidden\" id=\"search_dateStart\" name=\"search[dateStart]\" value={`${dateToStringOldBK(new Date(filters.publicationDateRange.from))}`} />\n )}\n {isPublicationDateRangeCustom && filters.publicationDateRange.to && (\n <input type=\"hidden\" id=\"search_dateStop\" name=\"search[dateStop]\" value={`${dateToStringOldBK(new Date(filters.publicationDateRange.to))}`} />\n )}\n {isSubmissionDeadlineRangeCustom && filters.submissionDeadlineRange.from && (\n <input type=\"hidden\" id=\"search_datePublicationStart\" name=\"search[datePublicationStart]\" value={`${dateToStringOldBK(new Date(filters.submissionDeadlineRange.from))}`} />\n )}\n {isSubmissionDeadlineRangeCustom && filters.submissionDeadlineRange.to && (\n <input type=\"hidden\" id=\"search_datePublicationStop\" name=\"search[datePublicationStop]\" value={`${dateToStringOldBK(new Date(filters.submissionDeadlineRange.to))}`} />\n )}\n <input type=\"hidden\" id=\"search_adUsers\" name=\"search[adUsers]\" value=\"all\" />\n {filters.category && <input type=\"hidden\" id=\"search_category_0\" name=\"search[category][]\" value={filters.category} />}\n {filters.subcategory && <input type=\"hidden\" id=\"search_subcategory_0\" name=\"search[subcategory][]\" value={filters.subcategory} />}\n {filters.fulfillmentPlaces.map(m => {\n const value = MIEJSCE_REALIZACJI_OLD_BK_DICT[m.value];\n if (!!value) {\n return <input type=\"hidden\" key={value} id={`search_province_${value}`} name=\"search[province][]\" value={value} />\n } else {\n return null\n }\n })}\n <ButtonStyled lite onClick={() => { }} type=\"submit\">Przeszukaj starÄ… BazÄ™ KonkurencyjnoÅ›ci<span className=\"sr-only\"> Strona zostanie otwarta w nowym oknie</span></ButtonStyled>\n </form>\n )\n }\n}\n\nexport { Wyszukiwarka };\n","import React, { useEffect, useState } from \"react\";\nimport { fetchApi } from \"../../../fetch\";\nimport { GridCustom, FieldWithLabel } from \"../../common\";\nimport { Typography, Elevation, Switch } from \"rmwc\";\nimport { colors } from \"../../vars/vars\";\n\nconst translationMap = {\n MY_ADVERTISEMENT: \"Zmiany mojego ogÅ‚oszenia\",\n MY_OFFERS: \"Zmiany ogÅ‚oszenia z mojÄ… ofertÄ…\",\n MY_FAVORITE_ADVERTISEMENT: \"Zmiany ulubionych ogÅ‚oszeÅ„\",\n MY_ADVERTISEMENT_QUESTION_SUBMITTED:\n \"Gdy w moim ogÅ‚oszeniu pojawi siÄ™ nowe pytanie\",\n MY_ADVERTISEMENT_OFFER_SUBMITTED_OR_CHANGED:\n \"Gdy w moim ogÅ‚oszeniu pojawi siÄ™ nowa lub zmieniona oferta\",\n MY_ADVERTISEMENT_OFFER_WITHDRAWN:\n \"Gdy w moim ogÅ‚oszeniu zostanie wycofana oferta\",\n MY_ADVERTISEMENT_ENDS_IN_24_HOURS:\n \"Gdy moje ogÅ‚oszenie skoÅ„czy siÄ™ w ciÄ…gu 24 godzin\",\n MY_OFFERS_ADVERTISEMENT_SUBMITTED_CHANGES:\n \"Gdy w ogÅ‚oszeniu zostanÄ… opublikowane zmiany\",\n MY_OFFERS_ADVERTISEMENT_STATUS_CHANGED: \"Gdy w ogÅ‚oszeniu zmieni siÄ™ status\",\n MY_OFFERS_ADVERTISEMENT_ANSWER_SUBMITTED_OR_CHANGED:\n \"Gdy w ogÅ‚oszeniu zostanie dodana lub zmieniona odpowiedź\",\n MY_FAVORITE_ADVERTISEMENT_SUBMITTED_CHANGES:\n \"Gdy w ulubionym ogÅ‚oszeniu zostanÄ… opublikowane zmiany\",\n MY_FAVORITE_ADVERTISEMENT_STATUS_CHANGED:\n \"Gdy w ulubionym ogÅ‚oszeniu zmieni siÄ™ status\",\n MY_FAVORITE_ADVERTISEMENT_ANSWER_SUBMITTED_OR_CHANGED:\n \"Gdy w ulubionym ogÅ‚oszeniu zostanie dodana lub zmieniona odpowiedź\",\n MY_FAVORITE_ADVERTISEMENT_ENDS_IN_24_HOURS:\n \"Gdy ulubione ogÅ‚oszenie skoÅ„czy siÄ™ w ciÄ…gu 24 godzin\"\n};\n\nconst CircleWithLetter = () => {\n return (\n <div className=\"circle\">\n <span>N</span>\n </div>\n );\n};\n\nexport default CircleWithLetter;\n\nexport const Notifications = (props) => {\n const [notificationOptions, setNotificationOptions] = useState();\n\n useEffect(() => {\n fetchApi(\"/api/notification-type-enabled\", \"GET\", {}, {}, (data) => {\n setNotificationOptions(data);\n });\n }, []);\n\n const notificationsEnabled = notificationOptions?.notifications?.enabled;\n\n const handleToggleNotifications = (checked) => {\n fetchApi(\n \"/api/notification-type-enabled/NOTIFICATIONS\",\n \"PUT\",\n {},\n { enabled: checked },\n () => {\n setNotificationOptions({\n ...notificationOptions,\n notifications: {\n ...notificationOptions.notifications,\n enabled: checked,\n },\n });\n }\n );\n };\n\n const handleToggleNotification = (type, checked) => {\n const groups = [...notificationOptions.groups];\n\n for (let i = 0; i < groups.length; i++) {\n const group = groups[i];\n for (let j = 0; j < group.items.length; j++) {\n const item = group.items[j];\n if (item.type === type) {\n item.enabled = checked;\n break;\n }\n }\n }\n\n fetchApi(\n `/api/notification-type-enabled/${type}`,\n \"PUT\",\n {},\n { enabled: checked },\n () => {\n setNotificationOptions({\n ...notificationOptions,\n groups: [...groups],\n });\n }\n );\n };\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"10px\" }}>\n <Typography use=\"headline5\" tag=\"h5\">\n Ustawienia powiadomieÅ„\n </Typography>\n <Elevation z={4} style={{ background: colors.warn }}>\n <GridCustom>\n <p style={{ margin: 10 }}>\n Uwaga: JeÅ›li wyÅ‚Ä…czysz powiadomienia, oznaczenia <CircleWithLetter /> nie bÄ™dÄ… siÄ™ wyÅ›wietlać.\n </p>\n </GridCustom>\n\n </Elevation>\n <Elevation z={4}>\n <div\n style={{ background: colors.primary, color: \"white\", padding: 10 }}\n >\n <Typography use=\"headline6\" tag=\"h6\">\n Ustawienia powiadomieÅ„\n </Typography>\n </div>\n <GridCustom>\n <FieldWithLabel\n label=\"WysyÅ‚aj powiadomienia e-mail\"\n tag=\"label\"\n labelFor=\"notifications_enabled\"\n style={{ margin: 10 }}\n >\n <Switch\n aria-label={`${\n notificationsEnabled ? \"WyÅ‚Ä…cz\" : \"WÅ‚Ä…cz\"\n } powiadomienia`}\n checked={notificationsEnabled}\n onChange={(ev) => handleToggleNotifications(ev.target.checked)}\n id=\"notifications_enabled\"\n />\n </FieldWithLabel>\n </GridCustom>\n </Elevation>\n\n {notificationsEnabled && (\n <Elevation z={4}>\n <div\n style={{ background: colors.primary, color: \"white\", padding: 10 }}\n >\n <Typography use=\"headline6\" tag=\"h6\">\n Ustawienia typów powiadomieÅ„\n </Typography>\n </div>\n\n {notificationOptions.groups.map((group) => {\n return (\n <div style={{ marginLeft: 5 }}>\n <p style={{fontWeight: '600'}}>{translationMap[group.type]}</p>\n {group.items.map((item) => {\n return (\n <GridCustom>\n <FieldWithLabel\n label={translationMap[item.type]}\n tag=\"label\"\n labelFor={`notification_${item.type}`}\n className=\"switch-nonboldtext\"\n >\n <Switch\n aria-label={`${\n notificationsEnabled ? \"WyÅ‚Ä…cz\" : \"WÅ‚Ä…cz\"\n } powiadomienia ${translationMap[group.type]}`}\n checked={item.enabled}\n onChange={(ev) =>\n handleToggleNotification(\n item.type,\n ev.target.checked\n )\n }\n id={`notification_${item.type}`}\n />\n </FieldWithLabel>\n </GridCustom>\n );\n })}\n </div>\n );\n })}\n </Elevation>\n )}\n </div>\n );\n};\n","import React, { useEffect, useState, useContext } from \"react\";\nimport { TabBar, Tab } from \"@rmwc/tabs\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport { Notifications } from \"./Notifications\";\nimport { NewsletterSettings } from \"./NewsletterSettings\";\nimport { Favorites } from \"./Favorites\";\nimport { UserContext } from \"../../../context/user-context\";\n\nconst tabIndexMap = new Map([\n [\"newsletter\", 0],\n [\"powiadomienia\", 1],\n [\"ulubione\", 2],\n]);\n\nfunction getMapKeyByValue(value) {\n for (let [key, val] of tabIndexMap.entries()) {\n if (val === value) {\n return key;\n }\n }\n return undefined;\n}\n\nconst Newsletter = (props) => {\n const location = useLocation();\n const history = useHistory();\n\n useEffect(() => {\n sessionStorage.setItem(\n \"currentPathname\",\n window.location.pathname + window.location.search\n );\n }, []);\n\n useEffect(() => {\n const activeTab = location.search?.split(\"?sekcja=\")?.[1];\n if (activeTab) {\n setActiveTabIndex(tabIndexMap.get(activeTab));\n }\n }, [location.search]);\n\n const [activeTabIndex, setActiveTabIndex] = useState(0);\n\n const { user } = useContext(UserContext);\n\n return (\n <>\n {user.identifier === null ? (\n <p>Zaloguj siÄ™ aby wyÅ›wietlić zawartość tej strony.</p>\n ) : (\n <>\n <TabBar\n activeTabIndex={activeTabIndex}\n onActivate={(event) => {\n const tabName = getMapKeyByValue(event.detail.index);\n history.push(`${window.location.pathname}?sekcja=${tabName}`);\n }}\n >\n <Tab>Newsletter</Tab>\n <Tab>Powiadomienia</Tab>\n <Tab>Ulubione</Tab>\n </TabBar>\n {activeTabIndex === 0 && <NewsletterSettings />}\n {activeTabIndex === 1 && <Notifications />}\n {activeTabIndex === 2 && <Favorites {...props} />}\n </>\n )}\n </>\n );\n};\n\nexport { Newsletter };\n","import React from \"react\";\nimport { URLS } from \"../../../urls/frontend\";\nimport { useHistory } from \"react-router-dom\";\nimport { GridCustom, ButtonStyled, Container } from \"../../common\";\nimport { Typography } from \"@rmwc/typography\";\nimport { Icon } from \"@rmwc/icon\";\n\nexport const UnsubscribeSuccess = () => {\n const history = useHistory();\n \n const handleGoToMainPage = () => {\n history.push(URLS.home.path);\n };\n \n return (\n <Container>\n <GridCustom centerHorizontal>\n <Icon\n className=\"subscription-icon__success\"\n icon={{ icon: \"check_circle_outline\" }}\n aria-hidden=\"true\"\n />\n </GridCustom>\n <GridCustom fullheight centerHorizontal>\n <Typography\n use=\"headline3\"\n tag=\"h3\"\n style={{ textAlign: \"center\", margin: \"2rem 0\" }}\n >\n Newsletter i powiadomienia sÄ… wyÅ‚Ä…czone\n </Typography>\n </GridCustom>\n <GridCustom fullheight centerHorizontal>\n <Typography use=\"body1\">\n Aby ponownie wÅ‚Ä…czyć newsletter przejdź do{\" \"}\n <a href={URLS.newsletter.path}>edycji newslettera</a>.\n </Typography>\n </GridCustom>\n <GridCustom fullheight centerHorizontal>\n <Typography use=\"body1\">\n Aby ponownie wÅ‚Ä…czyć powiadomienia przejdź do{\" \"}\n <a href={`${URLS.newsletter.path}?sekcja=powiadomienia`}>\n edycji powiadomieÅ„\n </a>\n .\n </Typography>\n </GridCustom>\n <GridCustom fullheight centerHorizontal>\n <Typography use=\"body1\" style={{ marginTop: \"1rem\" }}>\n Aby wÅ‚Ä…czyć newsletter lub powiadomienia musisz być zalogowany.\n </Typography>\n </GridCustom>\n <GridCustom fullheight centerHorizontal>\n <ButtonStyled\n primary\n className=\"search__btn\"\n onClick={handleGoToMainPage}\n >\n OK\n </ButtonStyled>\n </GridCustom>\n </Container>\n );\n };","import React, { useEffect, useState } from \"react\";\nimport { useHistory, useLocation } from \"react-router-dom\";\nimport { GridCustom, ButtonStyled, Container } from \"../../common\";\nimport { Icon } from \"@rmwc/icon\";\nimport { Typography } from \"@rmwc/typography\";\nimport { URLS } from \"../../../urls/frontend\";\nimport { fetchApi } from \"../../../fetch\";\nimport { UnsubscribeSuccess } from \"./UnsubscribeSuccess\";\n\nconst UnsubscribeConfirmation = (props) => {\n const history = useHistory();\n const location = useLocation();\n\n const [token, setToken] = useState(undefined);\n\n useEffect(() => {\n const token = location.search?.split(\"?token=\")?.[1];\n if (token) {\n setToken(token);\n } else {\n handleGoToMainPage();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [location.search]);\n\n const handleGoToMainPage = () => {\n history.push(URLS.home.path);\n };\n\n const handleError = (error) => {\n throw new Error(error);\n };\n\n const handleConfirm = () => {\n fetchApi(\n `/api/notification-opt-out-link/${token}`,\n \"POST\",\n {},\n {},\n () => {\n props.setConfirmed(true);\n },\n handleError,\n handleError\n );\n };\n\n return (\n <Container>\n <GridCustom centerHorizontal>\n <Icon\n className=\"subscription-icon\"\n icon={{ icon: \"help_outline\" }}\n aria-hidden=\"true\"\n />\n </GridCustom>\n <GridCustom fullheight centerHorizontal>\n <Typography\n use=\"headline2\"\n tag=\"h2\"\n style={{ textAlign: \"center\", margin: \"3rem 0\" }}\n >\n Czy na pewno chcesz wyÅ‚Ä…czyć <br />\n newsletter i powiadomienia?\n </Typography>\n </GridCustom>\n <GridCustom fullheight centerHorizontal>\n <ButtonStyled primary className=\"search__btn\" onClick={handleConfirm}>\n TAK, CHCĘ WYÅÄ„CZYĆ NEWSLETTER I POWIADOMIENIA\n </ButtonStyled>\n <ButtonStyled lite className=\"search__btn\" onClick={handleGoToMainPage}>\n NIE, PRZEJDŹ DO STRONY GÅÓWNEJ\n </ButtonStyled>\n </GridCustom>\n </Container>\n );\n};\n\nexport const Subscriptions = () => {\n const [confirmed, setConfirmed] = useState(false);\n\n return confirmed ? (\n <UnsubscribeSuccess />\n ) : (\n <UnsubscribeConfirmation setConfirmed={setConfirmed} />\n );\n};\n","import React, { useContext, useEffect } from 'react';\nimport { Redirect, Route, Switch, useHistory } from 'react-router-dom';\n\nimport { AdvertisementProvider } from '../context/advertisementContext';\nimport { MenuContext } from '../context/menuContext';\nimport { UserContext } from '../context/user-context';\nimport { URLS } from '../urls/frontend';\nimport { NotFoundPage } from './common';\nimport { DeklaracjaDostepnosci } from './layoutElements/DeklaracjaDostepnosci';\nimport {\n Activities,\n Institutions,\n Perspectives,\n Priorities,\n Programmes,\n Regions,\n Subactivities\n} from './layoutElements/implementationLevelsManagement';\nimport { LandingPage } from './layoutElements/LandingPage';\nimport { Advertisements, Projects } from './layoutElements/management';\nimport { FormOgloszenie, Ogloszenia, Ogloszenie, Wyszukiwarka } from './layoutElements/ogloszenia';\nimport { Oferty } from './layoutElements/oferty';\nimport { Newsletter } from './layoutElements/newsletter/Newsletter';\nimport { Projekty } from './layoutElements/projekty';\nimport {\n BladLogowania, Logowanie, ProfilUzytkownika, User, Users\n} from './layoutElements/uzytkownicy';\nimport {\n Ciasteczka,\n FormCiasteczka, FormKomunikat, FormPomoc, FormRegulamin, FormTrescOgolna,\n Komunikat, Komunikaty, KomunikatFront, KomunikatyFront,\n Pomoc, Pomoce, PomoceFront, PomocFront,\n Regulamin, Regulaminy,\n TresciOgolne, TrescOgolna,\n ZarzadzanieTrescia\n} from './layoutElements/zarzadzanieTrescia';\nimport { Subscriptions } from './layoutElements/subscriptions/Subscriptions'\n\n\n// add url pattern here if you want to light the menu link on for that page\nconst URL_PATTERNS_BY_MENU_LINK_NAME = {\n projects: [URLS.projects.pattern],\n advertisements: [\n 'advertisements', 'advertisementsNew', 'advertisementsEdit'].map(\n name => URLS[name].pattern),\n offers: [URLS.offers.pattern],\n newsletter: [URLS.newsletter.pattern],\n accessibility: [URLS.accessibility.pattern],\n users: ['users', 'usersDetails', 'usersMyProfile'].map(\n name => URLS[name].pattern),\n projectsManagement: [URLS.managementProjects.pattern],\n advertisementsManagement: [URLS.managementAdvertisements.pattern],\n contentsManagement: [\n 'managementContents',\n 'managementContentsHelps',\n 'managementContentsHelpsNew',\n 'managementContentsHelpsEdit',\n 'managementContentsHelpsDetails',\n 'managementContentsRegulations',\n 'managementContentsRegulationsCurrent',\n 'managementContentsRegulationsForPublishing',\n 'managementContentsRegulationsNew',\n 'managementContentsRegulationsEdit',\n 'managementContentsCookies',\n 'managementContentsCookiesNew',\n 'managementContentsCookiesEdit',\n 'managementContentsGeneralContents',\n 'managementContentsGeneralContentsEdit',\n 'managementContentsGeneralContentsDetails',\n 'managementContentsStatements',\n 'managementContentsStatementsNew',\n 'managementContentsStatementsEdit',\n 'managementContentsStatementsDetails'\n ].map(name => URLS[name].pattern),\n implementationLevelsDictionaryManagement: [\n 'managementPerspectives',\n 'managementProgrammesForPerspective',\n 'managementPrioritiesForProgramme',\n 'managementSubactivitiesForPriority',\n 'managementActivitiesForPriority',\n 'managementRegionsForSubactivity',\n 'managementInstitutionsForActivity',\n ].map(name => URLS[name].pattern),\n};\n\n\nconst Routes = ({ onLoginClick, onSetMenuLinkByName }) => {\n\n const {\n permissions,\n user,\n setAdvertisementManagerType\n } = useContext(UserContext);\n const userAnonymous = user.identifier === null;\n\n const history = useHistory();\n\n function setMenuLink() {\n for (let [linkName, patternList] of Object.entries(\n URL_PATTERNS_BY_MENU_LINK_NAME)) {\n for (let pattern of patternList) {\n if (pattern.test(history.location.pathname)) {\n onSetMenuLinkByName(linkName);\n return\n }\n }\n }\n // if not found, clear menu link\n onSetMenuLinkByName(null);\n }\n useEffect(setMenuLink, [history.location.pathname, ]);\n\n const getComponent = (component, permissionName=null) => {\n if (userAnonymous) {\n return <Redirect to=\"/\" />\n }\n if (permissionName !== null && !permissions[permissionName]) {\n return <NotFoundPage />\n }\n return component\n }\n\n const { menuLinkKey } = useContext(MenuContext);\n\n return (\n <AdvertisementProvider>\n <Switch>\n <Route\n exact path={URLS.home.path}\n render={(props) => <LandingPage\n {...props}\n user={user}\n onLoginClick={onLoginClick} />\n } />\n <Route\n exact path={URLS.login.path}\n render={(props) => <Logowanie {...props} user={user} />}\n />\n <Route\n exact path={URLS.loginError.path}\n render={(props) => userAnonymous\n ? <BladLogowania {...props} />\n : <Redirect to=\"/\" />\n } />\n <Route\n exact path={URLS.projects.path}\n render={(props) => getComponent(\n <Projekty {...props} />\n )} />\n <Route\n exact path={URLS.advertisements.path}\n render={(props) => getComponent(\n <Ogloszenia {...props} />\n )} />\n <Route\n exact path={URLS.advertisementsSearch.path}\n render={(props) => <Wyszukiwarka\n {...props} userIdentifier={user.identifier} />\n } />\n <Route\n exact path={URLS.advertisementsNew.path}\n render={(props) => getComponent(\n <FormOgloszenie\n {...props}\n isNew={true}\n ref={(c) => {window.formOgloszenie = c}}\n setAdvertisementManagerType={setAdvertisementManagerType}\n userData={user}\n />\n )} />\n <Route\n exact path={URLS.advertisementsDetails.path}\n render={(props) => <Ogloszenie\n {...props}\n user={user}\n userAnonymous={userAnonymous}\n setAdvertisementManagerType={setAdvertisementManagerType} />\n } />\n <Route\n exact path={URLS.advertisementsDetailsDraft.path}\n render={(props) => getComponent(\n <Ogloszenie\n {...props}\n draftMode={true}\n user={user}\n setAdvertisementManagerType={setAdvertisementManagerType}\n />\n )} />\n <Route\n exact path={URLS.advertisementsDetailsVersion.path}\n render={(props) => <Ogloszenie\n {...props}\n user={user}\n userAnonymous={userAnonymous}\n versionMode={true}\n setAdvertisementManagerType={setAdvertisementManagerType} />\n } />\n <Route\n exact path={URLS.advertisementsEdit.path}\n render={(props) => getComponent(\n <FormOgloszenie\n {...props}\n isNew={false}\n ref={(c) => {window.formOgloszenie = c}}\n setAdvertisementManagerType={setAdvertisementManagerType}\n userData={user}\n />\n )} />\n <Route\n exact path={URLS.offers.path}\n render={(props) => getComponent(\n <Oferty {...props} />\n )} />\n <Route\n exact path={URLS.newsletter.path} \n render={(props) => <Newsletter key={menuLinkKey} {...props} />}/>\n <Route\n exact path={URLS.accessibility.path}\n component={DeklaracjaDostepnosci} />\n <Route\n exact path={URLS.users.path}\n render={(props) => getComponent(\n <Users key={menuLinkKey} {...props} />,\n 'fullUsersAndPermissions'\n )} />\n <Route\n exact path={URLS.usersDetails.path}\n render={(props) => getComponent(\n <User {...props} />,\n 'fullUsersAndPermissions'\n )} />\n <Route\n exact path={URLS.usersMyProfile.path}\n render={(props) => getComponent(\n <ProfilUzytkownika {...props} />\n )} />\n <Route\n exact path={URLS.managementProjects.path}\n render={(props) => getComponent(\n <Projects key={menuLinkKey} {...props} />,\n 'projectsEnrollments'\n )} />\n <Route\n exact path={URLS.managementAdvertisements.path}\n render={(props) => getComponent(\n <Advertisements key={menuLinkKey} {...props} />,\n 'advertisements'\n )} />\n <Route\n exact path={URLS.managementContents.path}\n render={(props) => getComponent(\n <ZarzadzanieTrescia {...props} />, 'fullContent'\n )} />\n <Route\n exact path={URLS.managementContentsHelps.path}\n render={(props) => getComponent(\n <Pomoce {...props} />, 'fullContent'\n )} />\n <Route\n exact path={URLS.managementContentsHelpsNew.path}\n render={(props) => getComponent(\n <FormPomoc {...props} />, 'fullContent'\n )} />\n <Route\n exact path={URLS.managementContentsHelpsEdit.path}\n render={(props) => getComponent(\n <FormPomoc {...props} editing={true} />, 'fullContent'\n )} />\n <Route\n exact path={URLS.managementContentsHelpsDetails.path}\n render={(props) => getComponent(\n <Pomoc {...props} />, 'fullContent'\n )} />\n <Route\n exact path={URLS.managementContentsRegulations.path}\n render={(props) => getComponent(\n <Regulaminy {...props} />, 'fullContent'\n )} />\n <Route\n exact path={URLS.managementContentsRegulationsCurrent.path}\n render={(props) => getComponent(\n <Regulamin {...props} front={false} current={true} />,\n 'fullContent'\n )} />\n <Route\n exact\n path={URLS.managementContentsRegulationsForPublishing.path}\n render={(props) => getComponent(\n <Regulamin {...props} front={false} current={false} />,\n 'fullContent'\n )} />\n <Route\n exact path={URLS.managementContentsRegulationsNew.path}\n render={(props) => getComponent(\n <FormRegulamin {...props} />\n )} />\n <Route\n exact path={URLS.managementContentsRegulationsEdit.path}\n render={(props) => getComponent(\n <FormRegulamin {...props} editing={true} />,\n 'fullContent'\n )} />\n <Route\n exact path={URLS.managementContentsCookies.path}\n render={(props) => getComponent(\n <Ciasteczka {...props} />, 'fullContent'\n )} />\n <Route\n exact path={URLS.managementContentsCookiesNew.path}\n render={(props) => getComponent(\n <FormCiasteczka {...props} />, 'fullContent'\n )} />\n <Route\n exact path={URLS.managementContentsCookiesEdit.path}\n render={(props) => getComponent(\n <FormCiasteczka {...props} editing={true} />,\n 'fullContent'\n )} />\n <Route\n exact path={URLS.managementContentsGeneralContents.path}\n render={(props) => getComponent(\n <TresciOgolne {...props} />, 'fullContent'\n )} />\n <Route\n exact\n path={URLS.managementContentsGeneralContentsEdit.path}\n render={(props) => getComponent(\n <FormTrescOgolna {...props} />, 'fullContent'\n )} />\n <Route\n exact\n path={URLS.managementContentsGeneralContentsDetails.path}\n render={(props) => getComponent(\n <TrescOgolna {...props} />, 'fullContent'\n )} />\n <Route\n exact path={URLS.managementContentsStatements.path}\n render={(props) => getComponent(\n <Komunikaty {...props} />, 'fullContent'\n )} />\n <Route\n exact path={URLS.managementContentsStatementsNew.path}\n render={(props) => getComponent(\n <FormKomunikat {...props} editing={false} />,\n 'fullContent'\n )} />\n <Route\n exact path={URLS.managementContentsStatementsEdit.path}\n render={(props) => getComponent(\n <FormKomunikat {...props} editing={true} />,\n 'fullContent'\n )} />\n <Route\n exact path={URLS.managementContentsStatementsDetails.path}\n render={(props) => getComponent(\n <Komunikat {...props} />, 'fullContent'\n )} />\n <Route exact path={URLS.managementPerspectives.path}>\n {getComponent(<Perspectives />, 'previewDictionaries')}\n </Route>\n <Route exact path={URLS.managementProgrammesForPerspective.path}>\n {getComponent(<Programmes />, 'previewDictionaries')}\n </Route>\n <Route exact path={URLS.managementPrioritiesForProgramme.path}>\n {getComponent(<Priorities />, 'previewDictionaries')}\n </Route>\n <Route exact path={URLS.managementSubactivitiesForPriority.path}>\n {getComponent(<Subactivities />, 'previewDictionaries')}\n </Route>\n <Route exact path={URLS.managementActivitiesForPriority.path}>\n {getComponent(<Activities />, 'previewDictionaries')}\n </Route>\n <Route exact path={URLS.managementRegionsForSubactivity.path}>\n {getComponent(<Regions />, 'previewDictionaries')}\n </Route>\n <Route exact path={URLS.managementInstitutionsForActivity.path}>\n {getComponent(<Institutions />, 'previewDictionaries')}\n </Route>\n <Route\n exact path={URLS.helps.path}\n component={PomoceFront} />\n <Route\n exact path={URLS.helpsDetails.path}\n component={PomocFront} />\n <Route\n exact path={URLS.regulations.path}\n render={(props) =>\n <Regulamin {...props} front={true} current={true} />\n } />\n <Route\n exact path={URLS.subscriptions.path}\n component={Subscriptions} />\n <Route\n exact path={URLS.statements.path}\n component={KomunikatyFront} />\n <Route\n exact path={URLS.statementsDetails.path}\n component={KomunikatFront} />\n <Route path=\"*\" component={NotFoundPage} />\n </Switch>\n </AdvertisementProvider>\n )\n}\n\n\nexport { Routes };\n","import React, { Component } from 'react';\nimport { BrowserRouter as Router, Link, useLocation } from 'react-router-dom';\nimport { Button } from '@rmwc/button';\nimport { DrawerAppContent } from '@rmwc/drawer';\nimport { Icon } from '@rmwc/icon';\nimport { TopAppBar, TopAppBarFixedAdjust, TopAppBarActionItem, TopAppBarRow, TopAppBarSection, TopAppBarTitle } from '@rmwc/top-app-bar';\nimport '@material/elevation/dist/mdc.elevation.css';\nimport '@material/top-app-bar/dist/mdc.top-app-bar.css';\nimport '@material/textfield/dist/mdc.textfield.css';\nimport '@material/floating-label/dist/mdc.floating-label.css';\nimport '@material/notched-outline/dist/mdc.notched-outline.css';\nimport '@material/line-ripple/dist/mdc.line-ripple.css';\n\nimport { TOKEN_COOKIE_NAME } from '../const';\nimport { MenuProvider } from '../context/menuContext';\nimport { UserContext } from '../context/user-context';\nimport { fetchApi, fetchSativaApi } from '../fetch';\nimport { deleteCookie, getCookieValue, redirectToLoginView, setFocusOnElement } from '../helpers';\nimport { URLS } from '../urls/frontend';\nimport { MenuDrawer, SkipLinks, Text } from './common';\nimport { Sesja, SessionDialog } from './layoutElements/uzytkownicy';\nimport { CiasteczkaFront, ZoltyPasekFront } from './layoutElements/zarzadzanieTrescia';\nimport { Routes } from './Routes';\n\nimport ueFooter from '../static/img/FE_footer.png'\n\n\nconst SKIP_LINKS_PRIVATE = [\n {\n id: 1,\n label: 'Przejdź do projektów',\n linkTo: URLS.projects.path,\n },\n {\n id: 2,\n label: 'Przejdź do ogÅ‚oszeÅ„',\n linkTo: URLS.advertisements.path,\n },\n {\n id: 3,\n label: 'Przejdź do ofert',\n linkTo: URLS.offers.path,\n },\n];\n\nconst SKIP_LINKS = [\n {\n id: 4,\n label: 'Przejdź do deklaracji dostÄ™pnoÅ›ci',\n linkTo: URLS.accessibility.path,\n },\n {\n id: 5,\n label: 'Przejdź do treÅ›ci',\n linkTo: '#',\n },\n];\n\nconst MENU_LINKS = [\n {\n icon: 'question_answer',\n id: 1,\n label: 'Moje projekty i nabory',\n linkTo: URLS.projects.path,\n name: 'projects',\n onlyAuthenticated: true,\n },\n {\n icon: 'send',\n id: 2,\n label: 'Moje ogÅ‚oszenia',\n linkTo: URLS.advertisements.path,\n name: 'advertisements',\n onlyAuthenticated: true,\n },\n {\n icon: 'list',\n id: 3,\n label: 'Moje oferty',\n linkTo: URLS.offers.path,\n name: 'offers',\n onlyAuthenticated: true,\n },\n {\n icon: 'mail',\n id: 4,\n label: 'Newsletter, powiadomienia, ulubione',\n linkTo: `${URLS.newsletter.path}?sekcja=newsletter`,\n name: 'newsletter',\n onlyAuthenticated: true,\n },\n {\n icon: 'accessibility',\n id: 5,\n label: 'Deklaracja dostÄ™pnoÅ›ci',\n linkTo: URLS.accessibility.path,\n name: 'accessibility',\n },\n {\n icon: 'people',\n id: 6,\n label: 'Administracja użytkownikami i uprawnieniami',\n linkTo: `${URLS.users.path}?sekcja=lista`,\n name: 'users',\n onlyAuthenticated: true,\n permissionName: 'fullUsersAndPermissions',\n },\n {\n icon: 'account_tree_icon',\n id: 7,\n label: 'Administracja sÅ‚ownikiem poziomów wdrażania',\n linkTo: URLS.managementPerspectives.path,\n name: 'implementationLevelsDictionaryManagement',\n onlyAuthenticated: true,\n permissionName: 'previewDictionaries',\n },\n {\n icon: 'vertical_split',\n id: 8,\n label: 'Administracja treÅ›ciami',\n linkTo: URLS.managementContents.path,\n name: 'contentsManagement',\n onlyAuthenticated: true,\n permissionName: 'fullContent',\n },\n {\n icon: 'line_weight',\n id: 9,\n label: 'Administracja projektami i\\u00a0naborami',\n linkTo: URLS.managementProjects.path,\n name: 'projectsManagement',\n onlyAuthenticated: true,\n permissionName: 'projectsEnrollments',\n },\n {\n icon: 'description',\n id: 10,\n label: 'Administracja ogÅ‚oszeniami',\n linkTo: URLS.managementAdvertisements.path,\n name: 'advertisementsManagement',\n onlyAuthenticated: true,\n permissionName: 'advertisements',\n },\n];\n\n\nconst UePadding = (props) => {\n const location = useLocation();\n\n if (location.pathname != '/') {\n return <></>\n }\n\n return <div style={{paddingBottom: \"14rem\"}}></div>\n}\n\n\nconst UeFooter = (props) => {\n const location = useLocation();\n\n if (location.pathname != '/') {\n return <></>\n }\n\n return (\n <>\n <div style={{textAlign: \"center\"}}>\n <img style={{maxWidth: \"800px\", width: \"90%\", height: \"auto\"}} alt=\"Zestawienie znaków: Fundusze Europejskie, Barwy Rzeczypospolitej Polskiej, Unia Europejska\" src={ueFooter}/>\n </div>\n <div style={{textAlign: \"center\", marginBottom: \"4rem\"}}>\n Projekt współfinansowany z Funduszu SpójnoÅ›ci i budżetu paÅ„stwa\n </div>\n </>\n )\n}\n\n\nclass App extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n initializingOn: window.location.pathname !== URLS.login.path,\n currentMenuLink: null,\n openMenu: false,\n mobile: true,\n currentHref: '/',\n logoutError: '',\n logoutDoneOn: false,\n }\n\n this.appContentRef = React.createRef();\n\n this.xhrFetch = null;\n this.xhrLogoutFetch = null;\n\n this.updateMenuDisplay = this.updateMenuDisplay.bind(this);\n }\n\n // basic functions\n\n componentDidMount() {\n this.updateMenuDisplay();\n window.addEventListener('resize', this.updateMenuDisplay);\n\n if (this.state.initializingOn) {\n // if token cookie exists, check it on server\n if (getCookieValue(TOKEN_COOKIE_NAME)) {\n this.xhrFetch = fetchApi(\n '/api/authentication/identity',\n 'GET',\n {},\n {},\n this.handleFetchSuccess,\n this.handleFetchError,\n this.handleFetchIncorrectStatus,\n );\n } else {\n this.setState({initializingOn: false});\n }\n }\n }\n\n componentWillUnmount() {\n // abort api requests if exist\n for (let fetch of [this.xhrFetch, this.xhrLogoutFetch]) {\n if (fetch !== null) {\n fetch.abort();\n }\n }\n }\n\n // handlers\n\n handleFetchSuccess = (data) => {\n this.xhrFetch = null;\n this.context.set(\n data,\n () => this.setState({initializingOn: false})\n )\n }\n\n handleFetchError = (data) => {\n this.xhrFetch = null;\n this.clearAuthCookie();\n this.setState({initializingOn: false});\n }\n\n handleFetchIncorrectStatus = (status) => {\n this.xhrFetch = null;\n this.clearAuthCookie();\n this.setState({initializingOn: false});\n }\n\n handleLogin = () => {\n redirectToLoginView();\n }\n\n handleLogout = () => {\n this.xhrLogoutFetch = fetchSativaApi(\n '/api/token/revoke',\n this.handleFetchLogoutSuccess,\n this.handleFetchLogoutError,\n this.handleFetchLogoutIncorrectStatus,\n );\n }\n\n handleFetchLogoutSuccess = (data) => {\n this.xhrLogoutFetch = null;\n this.clearAuthCookie(\n () => this.context.logout(() => this.setState({logoutDoneOn: true}))\n );\n }\n\n handleFetchLogoutError = (data) => {\n this.xhrLogoutFetch = null;\n this.setState({logoutError: `Nie udaÅ‚o siÄ™ wylogować użytkownika. ${data.message}`});\n }\n\n handleFetchLogoutIncorrectStatus = (status) => {\n this.xhrLogoutFetch = null;\n this.setState({logoutError: `Nie udaÅ‚o siÄ™ wylogować użytkownika. WystÄ…piÅ‚ bÅ‚Ä…d o kodzie ${status}.`});\n }\n\n handleSetMenuLinkByName = (linkName) => {\n if (linkName === null) {\n this.setState({currentMenuLink: null});\n return\n }\n for (let link of MENU_LINKS) {\n if (link.name === linkName) {\n this.setState({currentMenuLink: link.id});\n return\n }\n }\n this.setState({currentMenuLink: null});\n }\n\n // helpers\n\n setCurrentMenuLink(id) {\n this.setState({currentMenuLink: id});\n setFocusOnElement(this.appContentRef);\n }\n\n updateMenuDisplay() {\n this.setState({mobile: window.innerWidth >= 1340 ? false : true});\n }\n\n clearAuthCookie = (callback=null) => {\n deleteCookie(TOKEN_COOKIE_NAME, callback);\n }\n\n // rendering\n\n render() {\n if (this.state.initializingOn) {\n return <Text info>Trwa inicjalizacja danych...</Text>\n }\n\n let skipLinks = [...SKIP_LINKS];\n if (this.context.user.identifier) {\n skipLinks = [...SKIP_LINKS_PRIVATE, ...SKIP_LINKS];\n }\n\n // Router should be on the top of components, because MenuDrawer needs routing\n return (\n <>\n <Router>\n <MenuProvider style={{display: \"flex\"}}>\n <SkipLinks children={skipLinks} />\n <CiasteczkaFront />\n {this.renderHeader()}\n <TopAppBarFixedAdjust />\n {this.renderMenu()}\n {this.renderContent()}\n {this.renderFooter()}\n </MenuProvider>\n </Router>\n {this.state.logoutError.length > 0 && this.renderLogoutError()}\n {this.state.logoutDoneOn && this.renderLogoutDialog()}\n </>\n )\n }\n\n renderHeader() {\n const { mobile } = this.state;\n return (\n <TopAppBar fixed={!mobile} className={!mobile && 'top-app-bar--desktop'}>\n <TopAppBarRow>\n <TopAppBarSection alignStart>\n {mobile && (\n <Button\n className=\"btn--icon-only btn--primary\"\n onClick={() => {this.setState(prevState => ({openMenu: !prevState.openMenu}))}}\n title=\"RozwiÅ„ menu\"\n unelevated >\n <span className=\"sr-only\">RozwiÅ„ menu</span>\n <Icon aria-hidden=\"true\" icon=\"menu\" />\n </Button>\n )}\n <TopAppBarTitle tag=\"h1\">\n <Link to={URLS.home.path} className=\"main-page-title\">\n Baza KonkurencyjnoÅ›ci\n </Link>\n </TopAppBarTitle>\n </TopAppBarSection>\n <TopAppBarSection alignEnd>\n <Sesja ref={c => {window.sessionComponent = c}} />\n {this.renderUserWidget()}\n </TopAppBarSection>\n </TopAppBarRow>\n </TopAppBar>\n )\n }\n\n renderUserWidget() {\n if (this.context.user.identifier === null) {\n return (\n <Button\n className=\"btn--icon-only btn--primary\"\n onClick={this.handleLogin}\n title=\"Zaloguj\"\n unelevated>\n <span className=\"sr-only\">Zaloguj siÄ™</span>\n <Icon aria-hidden=\"true\" icon=\"power_settings_new\" />\n </Button>\n )\n }\n const { forename, surname } = this.context.user;\n return (\n <>\n <Link to={URLS.usersMyProfile.path} className=\"link-text\">\n <TopAppBarActionItem\n aria-hidden=\"false\"\n aria-label=\"Mój profil\"\n title=\"Mój profil\"\n icon=\"account_circle\" />\n </Link>\n <Text className=\"header-user-name\">{forename} {surname}</Text>\n <Button\n className=\"btn--icon-only btn--primary\"\n onClick={this.handleLogout}\n title=\"Wyloguj\"\n unelevated >\n <span className=\"sr-only\">Wyloguj siÄ™</span>\n <Icon aria-hidden=\"true\" icon=\"power_settings_new\" />\n </Button>\n </>\n )\n }\n\n renderMenu() {\n const {\n currentMenuLink,\n mobile,\n openMenu,\n } = this.state;\n\n let menuLinks = [...MENU_LINKS];\n if (!this.context.user.identifier) {\n menuLinks = menuLinks.filter(link => link.onlyAuthenticated !== true);\n } else {\n const permissions = this.context.permissions;\n menuLinks = menuLinks.filter(\n link => !link.permissionName ||\n permissions[link.permissionName] || false\n );\n }\n\n return (\n <MenuDrawer\n children={menuLinks}\n currentMenuLink={currentMenuLink}\n openMenu={openMenu}\n onMenuClose={() => {this.setState(prevState => ({openMenu: !prevState.openMenu}))}}\n mobile={mobile} />\n )\n }\n\n renderContent() {\n return (\n <DrawerAppContent>\n <div ref={this.appContentRef} tabIndex=\"-1\">\n <ZoltyPasekFront />\n <main className=\"main\">\n <Routes\n onLoginClick={this.handleLogin}\n onSetMenuLinkByName={this.handleSetMenuLinkByName} />\n </main>\n </div>\n <UePadding/>\n </DrawerAppContent>\n )\n }\n\n renderFooter() {\n return (\n <>\n <div style={{flexGrow: 1}}></div>\n <footer className=\"footer\">\n <nav aria-label=\"Nawigacja w stopce\">\n <UeFooter/>\n <ul className=\"footer__list\">\n <li><Link to={URLS.helps.path} className=\"link-text footer__list-item\">Pomoc</Link></li>\n <li><Link to={URLS.regulations.path} className=\"link-text footer__list-item\">Regulamin</Link></li>\n <li><Link to={URLS.statements.path} className=\"link-text footer__list-item\">Komunikaty</Link></li>\n </ul>\n </nav>\n </footer>\n </>\n )\n }\n\n renderLogoutError() {\n return <SessionDialog\n callback={() => this.setState({logoutError: ''})}\n error\n messageTitle={this.state.logoutError}\n messageIcon=\"error_outline\"\n withButton />\n }\n\n renderLogoutDialog() {\n return <SessionDialog\n callback={() => window.location.reload()}\n messageContent=\"Aby uzyskać dostÄ™p do widoków dla zarejestrowanych użytkowników, zaloguj siÄ™ ponownie.\"\n messageTitle=\"Użytkownik zostaÅ‚ wylogowany.\"\n withButton />\n }\n}\n\n\nApp.contextType = UserContext;\n\nexport default App;\n","export default \"data:image/png;base64,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\"","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './components/App';\nimport { colors } from './components/vars/vars';\nimport * as serviceWorker from './serviceWorker';\nimport { ThemeProvider } from '@rmwc/theme';\nimport './static/styles/base.sass';\n\nimport { UserProvider } from './context/user-context';\n\n\nReactDOM.render(\n <ThemeProvider options={colors} >\n <UserProvider>\n <App />\n </UserProvider>\n </ThemeProvider>,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}