{"version":3,"sources":["files/LoginBanner.svg","files/ToirLogo.svg","utils.js","appsettings.js","authPrivider/apolloAuthClient.js","authPrivider/tokenRefresh.js","authPrivider/getAccessToken.js","authPrivider/login.js","dataProvider/Core/apolloCoreClient.js","dataProvider/Core/loginCoreUser.js","abilityProvider/index.js","abilityProvider/apolloCaslClient.js","abilityProvider/getAbilityRules.js","authPrivider/index.js","dataProvider/ra-dataProviderFactory/buildDataProviderFactory.js","dataProvider/ra-dataProviderFactory/index.js","dataProvider/Objects/constructionObjectgraphqlProvider/buildGraphQLProvider.js","dataProvider/Objects/constructionObjectgraphqlProvider/index.js","dataProvider/ra-axi-graphql/buildIntrospectionSchema.js","dataProvider/Objects/apolloClient.js","dataProvider/ra-axi-graphql/buildVariables.js","dataProvider/ra-axi-graphql/getResponseParser.js","dataProvider/Objects/Region/typeDefs.js","dataProvider/Objects/Region/index.js","dataProvider/Objects/Defect/typeDefs.js","dataProvider/Objects/Defect/index.js","dataProvider/Objects/EquipmentCatalog/typeDefs.js","dataProvider/Objects/EquipmentCatalog/index.js","dataProvider/Objects/typeDefs.js","dataProvider/Objects/TelemetrySystem/typeDefs.js","dataProvider/Objects/TelemetrySystem/index.js","dataProvider/Objects/EquipmentTemplate/typeDefs.js","dataProvider/Objects/EquipmentTemplate/index.js","dataProvider/Objects/Test/typeDefs.js","dataProvider/Objects/Counterparty/typeDefs.js","dataProvider/Objects/Counterparty/index.js","components/MaintainableItem/createAct.js","dataProvider/Objects/other/apolloObjectsClient.js","dataProvider/Objects/Region/getRegion.js","dataProvider/Blob/apolloBlobClient.js","dataProvider/Blob/multipleUpload.js","dataProvider/Blob/multipleRemove.js","authPrivider/createClient.js","authPrivider/updateClient.js","dataProvider/Objects/ConstructionObject/typeDefs.js","dataProvider/Objects/customQueries/getObject.js","dataProvider/Core/decorate.js","dataProvider/Objects/ConstructionObject/buildVariables.js","dataProvider/Objects/ConstructionObject/index.js","dataProvider/Objects/File/typeDefs.js","dataProvider/Objects/buildQuery.js","dataProvider/Objects/File/index.js","dataProvider/Objects/Test/index.js","dataProvider/Objects/index.js","dataProvider/Objects/dataProvider.js","dataProvider/Core/typeDefs.js","dataProvider/Core/builtQuery.js","dataProvider/Core/graphqlProvider.js","dataProvider/index.js","i18n/ru.js","i18n/i18nProvider.js","defaultTheme.js","components/Layout/Remove.js","components/Layout/Edit.js","components/Layout/sanitizeRestProps.js","components/Layout/BlankLayout.js","components/Fields/sanitizeRestProps.js","components/Fields/EnumChip.js","components/Fields/OnlineChip.js","components/User/UserBanner.js","redux/user/actions.js","dataProvider/Objects/customQueries/getCounterparty.js","components/Buttons/SaveProfileButton.js","components/Inputs/sanitizeRestProps.js","components/Inputs/PhoneInput.js","dataProvider/Core/useEnum.js","components/Inputs/EnumArrayInput.js","components/Inputs/EnumInput.js","components/Inputs/TriggerInput.js","components/Inputs/AutocompleteSuggestionList.js","components/Inputs/AutocompleteSuggestionItem.js","components/Inputs/AutoompleteInput.js","components/Profile/ProfileEdit.js","components/Icons/DocumentBox.js","components/Icons/ExcelBox.js","components/Layout/Dropzone.js","dataProvider/ExcelImport/apolloExcelImportClient.js","dataProvider/ExcelImport/validate.js","dataProvider/ExcelImport/parse.js","components/ImportExport/ImportScheduledMaintenanceOrders.js","components/ImportExport/ImportMaintenanceOrders.js","components/ImportExport/ExportShowView.js","components/ImportExport/ExportScheduledMaintenanceOrdersTemplate.js","customRoutes.js","redux/onlineUsers/actions.js","dataProvider/Core/getOnlineUsers.js","dataProvider/Core/getProfile.js","dataProvider/Core/onlineUsersSubscription.js","components/Fields/AvatarField.js","components/Layout/UserMenu.js","components/Icons/Configuration.js","components/Icons/Thermostat.js","components/Layout/Portals.js","components/Layout/AppBar.js","components/Layout/MenuGroup.js","components/Layout/Menu.js","components/Layout/index.js","components/Auth/Login.js","redux/user/reducer.js","redux/onlineUsers/reducer.js","redux/taskData/reducer.js","redux/taskData/actions.js","components/Dashboard/index.js","exporter/dateFormatter.js","exporter/enumFormatter.js","exporter/jsonToXLSX.js","exporter/index.js","components/Icons/FileDownload.js","dataProvider/Blob/archiveGetUrl.js","components/Buttons/TaskBulkDownloadFilesButton.js","dataProvider/Core/removeToTrash.js","components/Buttons/BulkRemoveButton.js","dataProvider/Core/removeManyToTrash.js","components/Fields/DeadlineField.js","components/Fields/EnumField.js","components/Fields/FileAttachedField.js","components/Layout/FilterButtonMenuItem.js","components/Layout/UserFilterButtonMenuItem.js","components/Layout/FilterButton.js","components/Layout/Filter.js","components/Fields/LabelsField.js","components/Location/LocationLevelIcon.js","components/Location/LocationSuggestion.js","components/Task/MaintainableItemField.js","components/Icons/Controller.js","components/Icons/GasMeterUnit.js","components/MaintainableItem/MaintainableItemTypeIcon.js","components/MaintainableItem/MaintainableItemSuggestion.js","components/Fields/NestedField.js","components/Task/TaskResultField.js","components/Inputs/SearchInput.js","components/Task/TaskStatusField.js","components/Buttons/MoreActionsButton.js","components/Buttons/TaskDownloadAllFilesButtonAsMenuItem.js","components/Buttons/ExportButtonAsMenuItem.js","components/Icons/AddFilter.js","dataProvider/Core/createUsersFilter.js","components/Buttons/FilterSaveButtonAsMenuItem.js","components/Layout/SelectDataGridColumnButton.js","components/Task/TaskListActions.js","components/Task/TaskNameLinkedField.js","components/Icons/AccountQuestion.js","components/Icons/Robot.js","components/Icons/Alien.js","components/Icons/AccountTie.js","components/User/UserRoleIcon.js","components/Fields/PhoneField.js","components/User/UserSuggestion.js","hooks/localStorage/useStorage.js","components/Task/TaskLastCommentField.js","components/Buttons/LinkWrapper.js","components/Task/TaskListMaintainableItemField.js","components/Layout/filter/ManualSubmitFilterForm.js","components/Layout/filter/ManualSubmitFilterButton.js","components/Layout/filter/ManualSubmitFilter.js","components/Task/TaskList.js","hooks/localStorage/useListStorageColumns.js","hooks/list/useListColumns.js","components/Task/MaintainableItemInput.js","components/Inputs/FileInput.js","components/Icons/WordBox.js","components/Icons/PdfBox.js","components/Icons/ZipBox.js","components/Fields/FileChip.js","components/Task/TaskCommentInput.js","components/Task/TaskNumberInput.js","dataProvider/Objects/useEnum.js","components/Task/VerificationTab.js","components/Task/TaskCreate.js","components/Layout/TitleForRecord.js","components/Buttons/RemoveButton.js","dataProvider/Core/restoreFromTrash.js","components/Buttons/RestoreButton.js","components/Task/TaskShowMainBlock.js","components/Task/TaskCompleteInput.js","components/Task/TaskEdit.js","components/Layout/Show.js","components/Layout/BannerDeleted.js","components/Task/TaskResultChip.js","components/Task/TaskSptaInstalledChip.js","components/Task/TaskShowResultBlock.js","components/Task/TaskCommentsInput.js","dataProvider/Core/updateCommentsToTask.js","components/Task/TaskComment.js","components/Task/TaskCommentForm.js","components/Task/TaskShowCommentsBlock.js","components/Layout/ShowLayout.js","components/Task/TaskTitleForRecord.js","components/Fields/NestedArrayField.js","components/Layout/MoreContent.js","components/Layout/Separator.js","components/Layout/List.js","components/History/HistoryList.js","components/Fields/GridField.js","components/Fields/FileCard.js","components/Buttons/TaskDownloadFilesButton.js","components/Fields/PictureGallery.js","components/Task/TaskVerificationBlock/TestCheckBoxes.js","components/Task/TaskVerificationBlock/ResultField.js","dataProvider/Core/updateVerificationTests.js","dataProvider/Core/dismissVerificationTests.js","components/Task/TaskVerificationBlock/TaskVerificationBlock.js","components/Task/TaskShow.js","components/Task/index.js","components/Fields/OnlineBadge.js","components/User/UserList.js","components/Layout/Create.js","components/User/RegionInput.js","components/User/UserCreate.js","components/Buttons/BanButton.js","components/User/UserEdit.js","components/Fields/ArrayEnumFiled.js","components/Buttons/DownloadFilesButton.js","components/User/UserShow.js","components/User/index.js","components/Icons/TaskFile.js","components/Icons/ObjectFile.js","components/File/FileList.js","components/File/FileShow.js","components/File/FileCreate.js","components/File/FileEdit.js","components/File/index.js","components/ImportExport/ImportExportListView.js","components/ImportExport/ImportCard.js","components/ImportExport/ExportCard.js","dataProvider/Objects/customQueries/getReportData.js","dataProvider/Objects/other/getReportDataWithFilter.js","components/ImportExport/createObjectImportTemplate.js","components/Layout/CustomGrid.js","components/ImportExport/createTaskImportTemplate.js","components/ImportExport/DownloadTaskImportTemplate.js","components/ImportExport/Reports/CreateReportSnackBar.js","dataProvider/Core/getReportData.js","components/ImportExport/Reports/ReportMaintenanceCard.js","components/Reports/Loading.js","components/Reports/Error.js","components/Reports/ReportAudit.js","components/ImportExport/Reports/ReportAuditCard.js","dataProvider/Objects/useReportRegistryData.js","components/ImportExport/Reports/ReportRegistryCard.js","components/ImportExport/Reports/ReportSummaryMaintenanceCard.js","components/ImportExport/Reports/ReportDefectCard.js","components/ImportExport/DownloadObjectImportTemplate.js","dataProvider/Core/getUncomplitedTaskByPeriods.js","dataProvider/Core/getComplitedTasksByPeriods.js","components/ImportExport/Reports/ReportUncomplitedTasksCard.js","components/ImportExport/Reports/ReportVerificationCard.js","components/ImportExport/ImportExportList.js","components/ImportExport/ImportExportShow.js","components/Fields/JsonField.js","components/History/LinkField.js","components/History/HistoryShow.js","components/History/index.js","components/Buttons/BulkRestoreButton.js","dataProvider/Core/restoreManyFromTrash.js","dataProvider/Core/deleteFromTrash.js","components/Buttons/BulkDeleteButton.js","dataProvider/Core/deleteManyFromTrash.js","components/Buttons/DeleteButton.js","components/TrashItem/TrashItemList.js","components/TrashItem/index.js","components/Buttons/BulkDownloadFilesButton.js","components/Buttons/DownloadAllFilesButtonAsMenuItem.js","components/MaintainableItem/MaintainableItemListActions.js","components/MaintainableItem/MaintainableItemList.js","components/TelemetrySystem/StmInput.js","dataProvider/Objects/other/getEquipmentTemplates.js","components/Buttons/ChooseTemplateButton.js","components/Buttons/SaveTemplateButton.js","components/Buttons/QuickCreateArrayElementButton.js","components/EquipmentCatalog/EquipmentCatalogCreate.js","components/Buttons/TemplateActionButtonsField.js","components/Inputs/EquipmentInput.js","components/MaintainableItem/MaintainableItemCommentInput.js","components/MaintainableItem/MaintainableItemCreate.js","components/MaintainableItem/SaveWithOutActButton.js","components/MaintainableItem/MaintainableItemEdit.js","components/MaintainableItem/createTaskFromObjectButton.js","components/Fields/ReferenceManyToolbar.js","components/Fields/ReferenceManyField.js","components/Fields/ReferenceManyFilterForm.js","components/Fields/ReferenceManyFilter.js","components/Buttons/ReferenceListLinkButton.js","components/Fields/ReferenceManyActions.js","components/MaintainableItem/IsArchivedField.js","components/MaintainableItem/MaintainableItemShowMainBlock.js","components/MaintainableItem/MaintainableItemCommentsInput.js","components/MaintainableItem/MaintainableItemComment.js","components/MaintainableItem/MaintainableItemCommentsList.js","components/MaintainableItem/MaintainableItemCommentForm.js","components/MaintainableItem/MaintainableItemShow.js","components/MaintainableItem/index.js","components/Location/LocationList.js","components/Location/LocationShow.js","components/Location/LocationEdit.js","components/Location/index.js","components/Defect/DefectList.js","components/Defect/DefectEdit.js","components/Defect/DefectCreate.js","components/Defect/DefectShow.js","components/EquipmentTemplate/EquipmentTemplateList.js","components/EquipmentTemplate/EquipmentTemplateEdit.js","components/EquipmentTemplate/EquipmentTemplateShow.js","components/EquipmentTemplate/EquipmentTemplateCreate.js","components/TelemetrySystem/TelemetrySystemList.js","components/TelemetrySystem/TelemetrySystemEdit.js","components/TelemetrySystem/TelemetrySystemShow.js","components/TelemetrySystem/TelemetrySystemCreate.js","components/Defect/index.js","components/Icons/Template.js","components/EquipmentTemplate/index.js","components/EquipmentCatalog/EquipmentCatalogShow.js","components/EquipmentCatalog/EquipmentCatalogEdit.js","components/EquipmentCatalog/EquipmentCatalogList.js","components/EquipmentCatalog/index.js","components/Icons/STMIcon.js","components/TelemetrySystem/index.js","components/Counterparty/CounterpartyShow.js","components/Counterparty/CounterpartyCreate.js","components/Counterparty/CounterpartyEdit.js","components/Counterparty/CounterpartyList.js","components/Counterparty/index.js","components/Test/TestShow.js","components/Test/TestCreate.js","components/Test/TestEdit.js","components/Test/TestList.js","components/Test/index.js","App.js","serviceWorker.js","index.js"],"names":["module","exports","dateTimeOptions","year","month","day","hour","minute","getCookie","name","matches","document","cookie","match","RegExp","replace","decodeURIComponent","undefined","setCookie","value","options","path","expires","toUTCString","updatedCookie","encodeURIComponent","optionKey","optionValue","deleteCookie","compressImages","files","maxSizeMB","oldFiles","filter","file","rawFile","newFiles","images","search","other","blob","Blob","type","length","Promise","all","map","image","imageCompression","maxIteration","then","compressed","url","window","URL","createObjectURL","File","preview","result","error","console","log","prepareFileName","fileName","ext","transformName","cyrillicToTranslit","transform","substring","translateJsonKeys","records","resource","convertTable","Object","keys","forEach","key","newKey","get","Array","hasOwnProperty","require","config","global_env","ENV","NAME_APP","REACT_APP_NAME_APP","AUTH_TOKEN_COOKIE","REFRESH_TOKEN_COOKIE","LOCAL_STORAGE","URI_CORE","REACT_APP_URI_CORE","WS_CORE","REACT_APP_WS_CORE","URI_OBJECTS","REACT_APP_URI_OBJECTS","URI_CASL","REACT_APP_URI_CADENCE","REACT_APP_URI_CASL","URI_BLOB","REACT_APP_URI_BLOB","URI_BLOB_REST","REACT_APP_URI_BLOB_REST","URI_AUTH","REACT_APP_URI_AUTH","URI_EXCEL_IMPORT","REACT_APP_URI_EXCEL_IMPORT","httpLink","createHttpLink","uri","authLink","setContext","_","a","headers","getAccessToken","token","authorization","apolloAuthClient","ApolloClient","link","cache","InMemoryCache","apolloAuthClientWithAuth","concat","REFRESH_TOKEN_MUTATION","gql","refreshToken","mutate","mutation","variables","onError","alert","authTokenCookie","refreshTokenCookie","tokenExpired","tokenRefresh","data","refresh","Error","message","arg","decodedToken","decodeJwt","current_time","Date","now","exp","LOGIN_MUTATION","wsLink","WebSocketLink","lazy","reconnect","reconnectionAttempts","connectionParams","split","query","getMainDefinition","kind","operation","LOGIN_USER_MUTATION","args","apolloCoreClient","AbilityContext","createContext","ability","Ability","rulesToFields","action","subject","abilityRulesToFields","defineAbilityFor","rules","r","conditions","createContextualCan","Consumer","appName","defaultOptions","watchQuery","fetchPolicy","errorPolicy","GET_ABILITY_RULES","apolloCaslClient","authProvider","login","username","password","user","loginCoreUser","getAbilityRules","update","resolve","logout","params","checkError","status","reject","checkAuth","getPermissions","role","findDataProvider","dataProviders","find","dataProvider","knownResources","includes","buildDataProviderFactory","getList","getOne","getMany","getManyReference","create","updateMany","delete","deleteMany","remove","restore","buildGraphQLProvider","client","buildQuery","defaultIntrospection","introspection","reduce","acc","introspect","mutations","parseResponse","otherQueryParams","pirCreate","createVariables","createPirVariables","item","input","id","response","queries","sortService","getListVariables","getIdsVariables","getPirListVariables","getPirIdsVariables","getIds","getPirList","getPirIds","ids","values","Boolean","func","pirUpdate","updateVariables","updatePirVariables","buildIntrospectionSchema","schema","typesObject","keyBy","types","reduceInputFields","previousData","inputFields","field","getTypeKind","ofType","isArray","v","omit","nestedFieldType","nested","buildUpdateVariablesOnIntrospection","buildVariables","__typename","where","pagination","page","perPage","sort","order","set","toLowerCase","target","sanitizeResource","dataKey","d","singleParser","loading","networkStatus","listParser","items","pageInfo","total","totalItems","getResponseParser","REGION_FRAGMENT","GET_ONE_REGION","GET_LIST_REGIONS","GET_MANY_REGIONS","GET_MANY_REFERENCE_REGIONS","regionBuildQuery","buildDefaultVariables","DEFECT_FRAGMENT","GET_ONE_DEFECT","GET_LIST_DEFECTS","GET_MANY_DEFECTS","GET_MANY_REFERENCE_DEFECTS","CREATE_DEFECT","UPDATE_DEFECT","REMOVE_DEFECT","RESTORE_DEFECT","DELETE_DEFECT","defectBuildQuery","EQUIPMENT_CATALOG_FRAGMENT","GET_ONE_EQUIPMENT_CATALOG","GET_LIST_EQUIPMENT_CATALOGS","GET_MANY_EQUIPMENT_CATALOGS","GET_MANY_REFERENCE_EQUIPMENT_CATALOGS","CREATE_EQUIPMENT_CATALOG","UPDATE_EQUIPMENT_CATALOG","REMOVE_EQUIPMENT_CATALOG","RESTORE_EQUIPMENT_CATALOG","DELETE_EQUIPMENT_CATALOG","equipmentCatalogBuildQuery","EMBEDDED_EQUIPMENT_FRAGMENT","EMBEDDED_REGION_FRAGMENT","EMBEDDED_DEFECT_FRAGMENT","EMBEDDED_COUNTERPARTY_FRAGMENT","EMBEDDED_STM_FRAGMENT","EMBEDDED_FILE_FRAGMENT","EMBEDDED_COMMENT_FRAGMENT","TELEMETRY_SYSTEM_FRAGMENT","GET_ONE_TELEMETRY_SYSTEM","GET_LIST_TELEMETRY_SYSTEMS","GET_MANY_TELEMETRY_SYSTEMS","GET_MANY_REFERENCE_TELEMETRY_SYSTEMS","CREATE_TELEMETRY_SYSTEM","UPDATE_TELEMETRY_SYSTEM","REMOVE_TELEMETRY_SYSTEM","RESTORE_TELEMETRY_SYSTEM","DELETE_TELEMETRY_SYSTEM","telemetrySystemBuildQuery","EQUIPMENT_TEMPLATE_FRAGMENT","GET_ONE_EQUIPMENT_TEMPLATE","GET_LIST_EQUIPMENT_TEMPLATES","GET_MANY_EQUIPMENT_TEMPLATES","GET_MANY_REFERENCE_EQUIPMENT_TEMPLATES","CREATE_EQUIPMENT_TEMPLATE","UPDATE_EQUIPMENT_TEMPLATE","REMOVE_EQUIPMENT_TEMPLATE","RESTORE_EQUIPMENT_TEMPLATE","DELETE_EQUIPMENT_TEMPLATE","equipmentTemplateBuildQuery","TEST_FRAGMENT","GET_ONE_TEST","GET_LIST_TESTS","GET_MANY_TESTS","GET_MANY_REFERENCE_TESTS","CREATE_TEST","UPDATE_TEST","REMOVE_TEST","RESTORE_TEST","DELETE_TEST","COUNTERPARTY_FRAGMENT","GET_ONE_COUNTERPARTY","GET_LIST_COUNTERPARTYS","GET_MANY_COUNTERPARTYS","GET_MANY_REFERENCE_COUNTERPARTYS","CREATE_COUNTERPARTY","UPDATE_COUNTERPARTY","REMOVE_COUNTERPARTY","RESTORE_COUNTERPARTY","DELETE_COUNTERPARTY","counterpartyBuildQuery","getUrlWithToken","indexOf","getSizeParamsForDocx","width","height","k","Math","max","createAct","acts","fontSize","doc","Document","translatedData","addSection","properties","margins","left","right","children","Paragraph","TextRun","text","bold","size","alignment","AlignmentType","RIGHT","CENTER","LEFT","border","bottom","color","space","manualAddr","location","distributor","pictures","picture","urlThumbnail","fetch","body","method","mode","credentials","reader","FileReader","img","Image","onloadend","src","onload","base","naturalWidth","naturalHeight","onerror","readAsDataURL","spacing","after","Table","columnWidths","rows","TableRow","rule","HeightRule","ATLEAST","TableCell","WidthType","DXA","verticalAlign","equipment","index","imageParams","Media","addImage","defects","defect","Packer","toBlob","act","moment","locale","format","apolloObjectsClient","createUploadLink","blobLink","MILTIPLE_UPLOAD","apolloBlobClient","MILTIPLE_REMOVE","CREATE_CLIENT","UPDATE_CLIENT","CONSTRUCTION_OBJECT_FRAGMENT","GET_ONE_CONSTRUCTION_OBJECT","GET_LIST_CONSTRUCTION_OBJECTS","GET_LIST_CONSTRUCTION_OBJECTS_IDS","GET_LIST_PIR_CONSTRUCTION_OBJECTS","GET_LIST_PIR_CONSTRUCTION_OBJECTS_IDS","GET_MANY_CONSTRUCTION_OBJECTS","GET_MANY_REFERENCE_CONSTRUCTION_OBJECTS","CREATE_CONSTRUCTION_OBJECT","CREATE_PIR_INFO_TO_CONSTRUCTION_OBJECT","UPDATE_CONSTRUCTION_OBJECT","UPDATE_PIR_INFO_TO_CONSTRUCTION_OBJECT","REMOVE_CONSTRUCTION_OBJECT","RESTORE_CONSTRUCTION_OBJECT","DELETE_CONSTRUCTION_OBJECT","createCoreFiles","catalog","newFilesToBlob","multipleUpload","appname","namecatalog","filesBlob","filename","createdBy","userId","idBlob","virtualpath","pop","sizeInBytes","updateCoreFiles","previous","formerFiles","removeFiles","removeFilesToBlob","newFilesToCore","removeFilesToCore","multipleRemove","CREATE","UPDATE","comments","responsibledBy","processedBy","executedBy","leadedBy","distributedBy","relatedTasksIds","relatedTasks","maintainableItem","getObject","maintainableItemName","region","getRegion","unrestrictedName","regionName","createClient","email","phone","auth","authId","authUser","banned","updateClient","filters","val","UUG","STM","CONTROLLER","METERCOMPLEX","METER","CORRECTOR","PRESSUREMETER","FILTER","THERMOMETER","IBP","MODULE","MODEM","EXTERNALANTENNA","BATTARY","BIZ","CONVERTER","AUTOSWITCH","OTHER","description","inventoryNumber","equipmentName","equipments","eutpId","updateReason","stm","count","factoryNumber","some","assemblyFiles","assemblyFile","assemblyActs","assemblyAct","projectDocs","projectDoc","createInput","createPirInput","telemetrySystem","constructionObjectFilter","sortFields","f","pirSortFields","updateInput","updatePirInput","constructionObjectBuildQuery","buildConstructionObjectVariables","CONSTRUCTION_OBJECT_FILE_FRAGMENT","GET_ONE_CONSTRUCTION_OBJECT_FILE","GET_LIST_CONSTRUCTION_OBJECT_FILES","GET_MANY_CONSTRUCTION_OBJECT_FILES","GET_MANY_REFERENCE_CONSTRUCTION_OBJECT_FILES","CREATE_CONSTRUCTION_OBJECT_FILE","UPDATE_CONSTRUCTION_OBJECT_FILE","REMOVE_CONSTRUCTION_OBJECT_FILE","RESTORE_CONSTRUCTION_OBJECT_FILE","DELETE_CONSTRUCTION_OBJECT_FILE","buildQueryByResource","Region","Defect","EquipmentCatalog","EquipmentTemplate","TelemetrySystem","Counterparty","ConstructionObject","ConstructionObjectFile","Test","EMBEDDED_USER_TYPE","EMBEDDED_FILE_TYPE","COMMENT_TEMPLATE","TASK_TEMPLATE","GET_LIST_TASK","GET_MANY_TASKS","GET_ONE_TASK","UPDATE_TASK","DELETE_TASK","USERS_FILTER_TEMPLATE","GET_LIST_USERSFILTER","GET_MANY_USERSFILTER","GET_ONE_USERSFILTER","DELETE_USERSFILTER","USER_TEMPLATE","GET_LIST_USER","GET_MANY_USERS","GET_ONE_USER","UPDATE_USER","DELETE_USER","HISTORY_TEMPLATE","GET_LIST_HISTORY","GET_MANY_HISTORIES","GET_ONE_HISTORY","TRASHITEM_TEMPLATE","GET_LIST_TRASHITEM","GET_MANY_TRASHITEMS","GET_ONE_TRASHITEM","customBuildQuery","fetchType","builtQuery","GET_ONE","GET_LIST","GET_MANY_REFERENCE","GET_MANY","DELETE","provider","decorate","paramsD","coreProvider","dataProviderFactory","dataProviderObject","resources","Task","menu","title","layout","main","object","users","verification","fields","number","gmiId","createdAt","createdAt_gte","createdAt_lte","updatedAt","updatedAt_gte","updatedAt_lte","alias","maintainableItemType","addrManual","statusDotWithLabel","statusDotWithTooltip","status_not","status_in","maintainableItemType_in","type_not","type_in","faultDescription","sptaInstalled","sptaNotInstalled","oneOfUser","deadlineAt","deadlineAt_gte","deadlineAt_lte","planAt","planAt_gte","planAt_lte","completedAt","completedAt_gte","completedAt_lte","comment","filesAttached","showComments","counterparty_in","verificationRequiredOnly","verificationTests","verificationCheck","mark","enums","DRAFT","PROCESSED","WORK","COMPLETED","VERCFICATION","REPAIR","DEPARTUREPLANNED","NOTACCESED","AWAITRESPONSE","RESUMED","REMOTECONTROLLER","maintainableItemTypeShort","SCHEDULEDMAINTENANCE","UNSCHEDULEDMAINTENANCE","EMERGENCYREPAIR","VERIFICATION","REMOTECONTROL","SUCCESS","FAIL","NEEDREPAIR","NEEDVERIFICATION","deadline","come","notcome","empty","invite","UsersFilter","standard","custom","User","regions","notificationType","notificationService","maintainableItemTypes","taskTypes","access","notification","VERIFICATIONINSTALL","VERIFICATIONUNINSTALL","CREATED","UPDATED","DELETED","REMOVED","RESTORED","NAME","DESCRIPTION","CREATEDAT","CREATEDBY","UPDATEDAT","ALIAS","MAINTAINABLEITEM","MAINTAINABLEITEMTYPE","REGION","ADDRMANUAL","COMMENT","STATUS","TYPE","RESULT","FAULTDESCRIPTION","SPTAINSTALLED","PROCESSEDBY","RESPONSIBLEDBY","EXECUTEDBY","RELATEDTASK","FILES","ACTS","DEADLINEAT","PLANAT","COMPLETEDAT","triggers","EMAIL","SMS","GUEST","SUPERADMIN","ADMIN","DISPATCHER","MANAGER","EMPLOYEE","SERVICE","DISTRIBUTOR","MACROLEADER","tabs","staff","system","counterparty","tasks","isArchived","REMOVE","RESTORE","maintainableItems","defaultDispatcherId","defaultManagerId","defaultMacroleaderId","tests","required","constructionObjectsTypes","level","typeShort","Trigger","TrashItem","deletedBy","deletedAt","History","Comment","ObjectHistory","ImportExport","import","export","apps","groups","default","directories","utils","ra","russianMessages","unselect","show_history","show_related_tasks","download_files","download_all_assemblyFiles","download","download_all_files","download_acts","download_all_assemblyActs","download_all_projectDocs","download_all_acts","download_all","create_and_continue","create_and_process","save_and_continue","process","work","complete","more","save_filter","chooseFilter","chooseTemplate","create_equipment_catalog","create_task","select_column","trash_open","export_max_5000","save_with_act","ban","unban","apply_filter","bulk_actions","boolean","no_data","removed","toggle_visible","toggle_hidden","delete_title_forever","delete_content_forever","deleted","navigation","permissions_error","profile_saved","moved_to_trash","restored_from_trash","deleted_from_trash","download_files_empty","download_acts_empty","download_object_files_empty","download_object_acts_empty","user_filter_saved","user_banned","user_unbanned","validation","ip_invalid","phone_invalid","responsibledBy_required","files_required","acts_required","result_required","comment_required","max_number","messages","en","englishMessages","ru","i18nProvider","polyglotI18nProvider","theme","createMuiTheme","palette","primary","light","dark","contrastText","secondary","background","sidebar","closedWidth","overrides","MuiPaper","elevation1","boxShadow","MuiFilledInput","root","backgroundColor","MuiTableCell","sizeSmall","padding","paddingLeft","paddingRight","MuiListItemIcon","minWidth","marginRight","MuiFormControl","fullWidth","MuiChip","margin","borderRadius","useStyles","makeStyles","container","display","flexDirection","justifyContent","breakpoints","up","down","marginTop","icon","textAlign","fontFamily","opacity","toolbar","ml3","marginLeft","sanitizeRestProps","staticContext","history","Remove","props","className","basePath","classes","record","defaultTitle","rest","translate","useTranslate","useAuthenticated","classnames","Title","Button","variant","component","Link","to","EditView","actions","aside","Content","hasList","hasShow","redirect","save","setOnSuccess","setOnFailure","setTransform","saving","undoable","version","sideEffectContextValue","useMemo","finalActions","Provider","cloneElement","noActions","card","React","Children","isValidElement","defaultProps","flex","hasCreate","hasEdit","loaded","onFailure","onSuccess","permissions","successMessage","Edit","EditContextProvider","useEditController","addLabel","allowEmpty","cellClassName","emptyText","formClassName","headerClassName","label","linkType","sortable","sortBy","sortByOrder","source","translateChoice","marginBottom","BlankLayout","Component","Card","classesOverride","Typography","gutterBottom","noWrap","only","useChipStyles","overflow","textOverflow","whiteSpace","EnumChip","enumValue","Chip","online","OnlineChip","onlineUsers","useSelector","state","shallowEqual","isOnline","largeAvatar","chipBanned","getContrastText","UserBanner","CardContent","Grid","xs","chip","setUser","payload","SaveProfileButton","useUpdate","notify","useNotify","formState","useFormState","dispatch","useDispatch","SaveButton","onMouseDown","getDistributor","disabled","validatePhone","regex","phoneParse","PhoneMaskInput","inputRef","ref","inputElement","mask","keepCharPositions","placeholderChar","guide","PhoneInput","helperText","onBlur","onFocus","onChange","parse","validate","inputProps","useInput","isRequired","meta","touched","TextField","InputHelperText","FieldTitle","InputProps","inputComponent","GET_ENUMS","enumName","useState","updateEnums","useEffect","enumData","__type","enumValues","fetchData","EnumArrayInput","Enum","useEnum","selected","choice","choices","SelectArrayInput","optionText","EnumInput","SelectInput","suggestionsContainer","zIndex","suggestionsPaper","maxHeight","overflowY","AutocompleteSuggestionList","isOpen","menuProps","inputEl","suggestionsContainerProps","Popper","open","anchorEl","modifiers","Paper","style","clientWidth","fontWeight","suggestion","typography","suggestionText","highlightedSuggestionText","AutocompleteSuggestionItem","parts","highlightedIndex","isSelected","filterValue","getSuggestionText","isHighlighted","MenuItem","part","highlight","flexGrow","position","AutocompleteInput","emptyValue","idOverride","inputOverride","isRequiredOverride","limitChoicesToValue","matchSuggestion","metaOverride","labelProps","inputText","setFilter","shouldRenderSuggestionsOverride","shouldRenderSuggestions","suggestionLimit","suggestionItem","warning","useRef","setFilterValue","getSuggestionFromValue","useCallback","selectedItem","useSuggestions","getChoiceText","getChoiceValue","getSuggestions","handleFilterChange","eventOrValue","event","handleChange","storeInputRef","current","inputPosition","getBoundingClientRect","anchorPosition","x","y","updateAnchorEl","handleBlur","handleFocus","openMenu","inputValue","itemToString","getInputProps","getItemProps","getLabelProps","getMenuProps","isMenuOpen","suggestions","InputLabelProps","htmlFor","suppressRefError","validateName","minLength","validateEmail","stylesForForm","referenceArrayInput","tab","CardContentInner","paddingTop","paddingBottom","My","AutocompleteArrayInput","ProfileToolbar","Toolbar","can","ProfileEdit","controllerProps","isDeleted","TabbedForm","TabbedFormTabs","centered","FormTab","TextInput","multiline","ReferenceInput","reference","ReferenceArrayInput","autoComplete","PasswordInput","ProfileHOC","useRefresh","Icon","SvgIcon","dropZone","isDragAccept","isDragReject","cursor","transition","getIcon","Dropzone","accept","setFiles","useDropzone","multiple","onDrop","acceptedFiles","unicueAcceptedFiles","getRootProps","fn","onDelete","chipToDelete","importLink","apolloExcelImportClient","dropzone","blockItem","runButton","runStatus","validateStatus","statusFileCard","li","ShowView","statusProgress","setStatusProgress","statusValidate","setStatusValidate","statusParse","setStatusParse","isProgress","st","validatedfiles","setValidatedFiles","mes","parserName","isOK","e","sv","alerts","Alert","severity","errors","onClick","isPending","isError","CircularProgress","thickness","sp","statistic","processedObjects","createdTasks","hasCreatedTasks","createdObjects","updatedObjects","unchangedObjects","useVersion","useButtonStyles","excelButton","ExportExcelButton","tableRef","handleExport","ExportActions","TopToolbar","setPage","useQuery","ExportShowView","ListContextProvider","currentSort","selectedIds","Datagrid","Pagination","render","routeProps","WithPermissions","ImportScheduledMaintenanceOrders","ImportMaintenanceOrders","ExportScheduledMaintenanceOrdersTemplate","setOnlineUsers","ONLINE_USERS","SUBSCRIBE_ONLINE_USERS","small","large","AvatarField","fullname","avatar","Avatar","alt","initials","first","shift","second","charAt","toUpperCase","getInitials","userPreview","alignItems","headerAvatar","ConfigurationMenu","MenuItemLink","primaryText","leftIcon","MyUserMenu","useSubscription","onSubscriptionData","subscriptionData","node","previousValues","filterArray","getOnlineUsers","_onlineUsers","onlineUsersIds","getProfile","profile","getCounterparty","UserMenu","menuItem","soon","useAvatarStyles","ConfigurationPortalAvatar","Configuration","ASKUGAvatar","AdministrationPortalAvatar","Apps","setAnchorEl","handleClose","Tooltip","IconButton","aria-controls","currentTarget","keepMounted","onClose","ListItemAvatar","ListItemText","appbar","spacer","MyAppBar","AppBar","userMenu","Portals","menuGroup","menuGroupTitle","MenuGroup","shape","active","Menu","hasDashboard","dense","onMenuClick","admin","ui","sidebarOpen","getResources","groupResources","groupBy","router","pathname","DashboardMenuItem","sidebarIsOpen","group","smart_count","MyLayout","Layout","appBar","minHeight","banner","logo","top","Login","backgroundImage","muiTheme","useCheckAuth","useHistory","push","ThemeProvider","backgroundBanner","backgroundLogo","Notification","defaultTheme","LoginForm","previousState","taskData","dateFormatter","model","enumFormatter","__resource","jsonToXLSX","rename","workbook","ExcelJS","Workbook","created","modified","lastPrinted","worksheet","addWorksheet","views","xSplit","ySplit","columns","header","widths","keyHeader","valHeader","fieldIndex","getColumn","addRows","xlsx","writeBuffer","navigator","msSaveOrOpenBlob","createElement","appendChild","href","click","revokeObjectURL","removeChild","parseHeaders","externalKey","parseHeadesTitles","externalObject","parseRecord","valueRecord","exporter","fetchRelatedRecords","filesInfo","JSON","stringify","ok","json","BulkDownloadFilesButton","sources","filterValues","useDataProvider","unselectAll","useUnselectAll","setLoading","fetchStart","folders","task","idsBlob","s","humanId","folder","getUrlArchive","fetchEnd","handleSubmit","handleSubmitWithRedirect","invalid","pristine","submitOnEnter","FileDownload","removeButton","fade","BulkRemoveButton","removeToTrash","results","removeManyToTrash","getStatus","completedDeadlineAt","deadlineStatus","endOf","isSameOrBefore","isAfter","subtract","getTitle","fromNow","info","grey","danger","alarm","DeadlineChip","taskStatus","useIconStyles","DeadlineIcon","placement","EnumField","FileAttachedField","FilterButtonMenuItem","forwardRef","onShow","handleShow","defaultValue","data-key","data-default-value","setFilters","setOpen","handleClickButton","preventDefault","data-filter-values","FilterButton","displayedFilters","showFilter","userFilters","hiddenFilters","filterElement","alwaysOn","lodashGet","handleRequestClose","ListSubheader","outline","userFilter","UserFilterButtonMenuItem","button","form","LabelsField","withStyles","LevelIcon","mr1","LocationSuggestion","ListItemIcon","MaintainableItemField","ReferenceField","lineHeight","letterSpacing","fillRule","clipRule","TypeIcon","Controller","GasMeterUnit","MaintainableItemSuggestion","stopPropagation","NestedField","referenceRecord","rootPath","resourceLinkPath","TaskResultField","SearchInput","resettable","endAdornment","InputAdornment","getColor","red","amber","purple","deepPurple","blue","pink","indigo","green","orange","A400","useTaskStatusChipStyles","emphasize","TaskStatusChip","useTaskStatusDotWithLabelStyles","dot","TaskStatusDotWithLabel","TaskStatusDotWithTooltip","enterDelay","MoreButton","TaskDownloadAllFilesButton","regionFilter","distributorFilter","ExportButton","defaultFilter","maxResults","defaultIcon","customExporter","exporterFromContext","useContext","ExporterContext","handleClick","SAVE_FILTER","FilterSaveButton","formValues","setFormValues","aria-expanded","aria-label","aria-haspopup","AddFilter","Dialog","aria-labelledby","DialogTitle","DialogContent","DialogContentText","autoFocus","DialogActions","createFilter","checkbox","SelectDataGridColumnButton","listStorageColumns","setListStorageColumns","ListColumns","selectedColumns","setSelectedColumns","handleToggle","column","currentIndex","newChecked","splice","compact","labelId","Checkbox","checked","tabIndex","disableRipple","ListActions","permanentFilter","onUnselectItems","sanitizeListRestProps","context","CreateButton","MoreActionsButton","TaskNameLinkedField","RoleIcon","regexp","PhoneField","maskedPhone","useStorage","initialValue","_storage","localStorage","getItem","storedValue","setStoredValue","setValue","valueToStore","Function","setItem","TaskLastCommentField","showDate","time1","unix","time2","DateField","showTime","textDecoration","LinkWrapper","TaskListMaintainableItemField","flexWrap","pointerEvents","clearFix","clear","ManualSubmitFilterForm","hideFilter","initialValues","formRef","handleHide","dataset","dirty","dirtyFields","dirtyFieldsSinceLastSubmit","dirtySinceLastSubmit","hasSubmitErrors","hasValidationErrors","modifiedSinceLastSubmit","submitError","submitErrors","submitFailed","submitSucceeded","submitting","valid","validating","visited","onSubmit","FilterFormInput","EnhancedFilterForm","setState","mergedInitialValuesWithDefaultValues","lodashSet","mergeInitialValuesWithDefaultValues","useDeepCompareEffect","mutators","arrayMutators","formProps","ManualSubmitFilterButton","handleFilter","requestSubmit","dispatchEvent","Event","cancelable","disableElevation","Filter","useListContext","toArray","renderButton","renderForm","row","clampedText","cellAlignCenter","filterStyles","arrayEnum","TaskBulkActionButtons","BulkExportButton","TaskFilter","ManualSubmitFilter","UserSuggestion","DateTimeInput","role_in","NullableBooleanInput","nullLabel","ReferenceDatagrid","rowClick","TaskList","modelExport","objectsIds","regionsIds","distributorIds","objects","distributors","o","taskExporter","manualSubmitForm","taskListColumns","BooleanField","useListStorageColumns","useListController","filterDefaultValues","region_in","listColumns","storagedColumns","setListColumns","col","sanitizedColumnProps","useListColumns","TaskListActions","bulkActionButtons","regionList","setRegionList","list","maintainableItemList","setMaintainableItemList","validateMaintainableItem","enum","dis","AutocompleteInputWithState","AutoompleteInput","MaintainableItemInput","useForm","counterparties","setCounterparty","distibutor","change","reg","t","selectedObject","selectItem","test","transitions","FileInput","labelMultiple","labelSingle","maxSize","minSize","inputPropsOptions","placeholder","disabledAdd","transformFile","transformedFile","transformFiles","onRemove","filteredFiles","stateFile","childrenElement","assign","updatedFiles","Labeled","data-testid","hidden","FormHelperText","maxWidth","FileChip","canOpen","openProps","clickable","TOKEN","TaskCommentInput","author","connect","minValue","maxValue","TaskNumberInput","getState","NumberInput","Input","idC","verificationTestsIds","constructionObjectsType","VerificationTab","mlAuto","TaskToolbar","TaskCreate","useCreateController","taskDefaultValue","CreateContextProvider","CreateView","SimpleForm","FormDataConsumer","formData","region_some","BooleanInput","TitleForRecord","resourceText","sourceText","RemoveButton","redirectTo","useRedirect","restoreButton","RestoreButton","restoreFromTrash","inlineLayout","inlineField","TaskShowMainBlockView","toString","Box","SimpleShowLayout","TaskShowMainBlock","textInput","TaskCompleteInput","enumField","validateTaskEdit","TaskEdit","Show","ShowContextProvider","useShowController","BannerDeleted","CardActions","TaskResultChip","TaskSptaInstalledChip","TaskShowResultBlockView","TaskShowResultBlock","adornment","TaskCommentsInput","reset","setTimeout","edge","onKeyDown","keyCode","shiftKey","iconButton","divider","menuRoot","disablePortal","flip","enabled","preventOverflow","boundariesElement","anchorOrigin","vertical","horizontal","transformOrigin","TaskComment","deleteComment","removeComment","setSelected","last","edited","auhorLinkPath","isPrivate","ListItem","onMouseEnter","onMouseLeave","primaryTypographyProps","secondaryTypographyProps","Divider","TaskCommentForm","setComments","selectedComment","setSelectedComment","tempComment","toISOString","c","cuid","handleDeleteComment","coms","handleRemoveComment","TaskShowCommentsBlock","ShowLayout","typeText","lowerFirst","numberText","NestedArrayField","linkToRecord","cardActions","expandButton","expandIcon","duration","shortest","expandOpen","MoreContent","showMoreButton","setMore","Portal","Collapse","in","timeout","unmountOnExit","content","subheader","Separator","align","List","HistoryFilter","DefaultDatagrid","HistoryList","parseGridValue","parseGridSize","join","generateGrid","breakpoint","gridTemplateColumns","gridGap","GridField","classNameOverride","lg","md","sm","xl","media","FileCard","resourse","openHandler","CardMedia","DownloadFilesButton","paper","PictureGallery","setToken","handleDownload","handlePrint","IFrame","getElementsByTagName","focus","contentWindow","print","useKeyboardArrows","check","CheckField","TestCheckBoxes","borderTop","ResultField","verificationMark","UPDATE_TASK_VERIFICATION","DISMISS_TASK_VERIFICATION","TaskVerificationBlock","verificationComment","handleDismiss","TaskActions","EditButton","TaskShowGrid","hasRsult","TaskShow","showHistoryButton","ChipField","TaskIcon","badge","OnlineBadge","Badge","invisible","UserBulkActionButtons","filterRoles","UserFilter","classesOvverride","UserTabs","setTab","Tabs","Tab","UserList","Create","RegionInput","listRegions","validateRole","validatePassword","UserCreate","autocomplete","banButton","borderColor","unbanButton","BanButton","handleBan","banLoading","handleUnban","unbanLoading","UserToolbar","UserEdit","ArrayEnumField","UserShow","TabbedShowLayout","TabbedShowLayoutTabs","ReferenceArrayField","SingleFieldList","UserIcon","ObjectIcon","FileFilter","FileList","FileShow","TaskFileIcon","ObjectFileIcon","ListView","noResults","onSelect","onToggleItem","setPerPage","setSort","cardContent","cardActionArea","ImportCard","innerRef","dashboardModuleProps","CardActionArea","CardHeader","colorDefault","titleTypographyProps","LinkRef","GET_REPORT_METADATA","GET_REPORT_DATA","objectFilter","listConstructionObjects","listDefects","listCounterparties","listTests","objectsCount","locationsCount","defectsCount","counterpartiesCount","testsCount","getReportData","allObjects","autoFilter","from","getRow","font","eachCell","cell","fill","pattern","bgColor","argb","fgColor","CustomGrid","child","DownloadImportTemplateCard","createImportTemplate","Snackbar","autoHideDuration","reason","_allTasksMeta","tasksCount","boxSizing","taskTypesArray","renderDataRows","tasksGroupedByPeriod","allDistributors","ROWS","startPeriod","b","isBefore","prev","period","periodIndex","tasksGroupedByDistributor","periodRows","utcOffset","tasksDistributorGroupedByType","colors","completed","percent","Number","toFixed","prevAll","prevCompleted","newRow","addRow","colNumber","floor","numFmt","mergeCells","totalRow","totalColors","sum","getCell","tempRows","ReportMaintenanceCard","setDisabled","openDialog","setOpenDialog","start","startOf","end","date","setDate","onAnimationEnd","alignContent","wrap","justify","getObjectReportData","getTaskReportData","sortField","sortOrder","allTasksS","allTasks","allTasksO","allTasksWithPeriod","groupedTasksByType","groupedSTMByPeriod","groupedUUGByPeriod","groupedRMCByPeriod","groupedOTHERByPeriod","groupedObjectsByType","worksheetSTM","worksheetUUG","worksheetRMC","worksheetOTHER","CreateReportSnackBar","Loading","loadingPrimary","loadingSecondary","errorPrimary","tdeme","borderCollapse","caption","allLocations","TOTAL","accessedObjects","objectsWithAudit","allObjectsWithAudit","ReportAuditCard","groupedByTypeObjects","gerReportRegistryData","typeObject","isActs","isFiles","isDefects","wrapText","groupedByRegion","regionObjects","STM_SOLVES","UUG_SOLVES","objectMap","eq","solve","ReportSummaryMaintenanceCard","groupedByTypeTasks","secondRow","cellsToMerge","_address","eachColumnKey","objectsWithoutDefects","objectsWithDefects","objectsWithDefect","allObjectsWithoutDefects","allObjectsWithDefects","previousCell","currentCell","allDefects","locations","loc","DownloadObjectImportTemplateCard","periods","allRegions","objectType","dispatcher","lastComment","ReportUncomplitedTasksCard","completedPeriods","m","add","getUncomplitedTaskByPeriods","getComplitedTasksByPeriods","uncomplitedTasks","worksheetAll","worksheetPerObject","columnsAll","tasksPerPeriod","curRow","allTests","executor","verificatedAt","verififcationComment","origin","te","hyperlink","ReportVerificationTasksCard","verificatedAt_lte","verificatedAt_gte","worksheetRemote","worksheetOther","ImportExportList","imports","gridOptions","ImportExportListView","DownloadObjectImportTemplate","ReportDefectCard","ReportRegistryCard","github","JsonField","referenceId","HistoryShow","LinkField","HistoryIcon","BulkRestoreButton","trashItems","restoreManyFromTrash","deleteButton","BulkDeleteButton","deleteFromTrash","deleteManyFromTrash","DeleteButton","TrashItemBulkActionButtons","TrashItemFilter","EmbededRestoreButton","EmbededDeleteButton","TrashItemList","TrashItemIcon","DownloadAllFilesButton","ObjectBulkActionButtons","MaintainableItemFilter","MaintainableItemReferenceDatagrid","MaintainableItemList","MaintainableItemListActions","StmInput","el","ChooseTemplateButton","anchorRef","setData","templates","contains","direction","prevOpen","TransitionProps","Grow","ClickAwayListener","onClickAway","MenuList","template","handleMenuItemClick","SaveTemplateButton","drawerForm","drawerToolbar","QuickCreateArrayElementButton","valuesForForm","setValuesForForm","referenceName","inflection","humanize","singularize","handleCloseClick","onSave","crudGetMatching","handleSave","callback","showNotification","Drawer","anchor","EquipmentCatalogQuickCreate","EquipmentCatalogCreate","EnumCover","Inputs","EquipmentInput","ArrayInput","SimpleFormIterator","MaintainableItemCommentInput","authorId","MaintainableItemToolbar","MaintainableItemCreate","CheckboxGroupInput","TemplateActionButtonsField","withEquipment","SaveWithOutActButton","MaintainableItemEdit","CreateRelatedCommentButton","memo","ReferenceManyField","useReferenceManyFieldController","ReferenceManyFieldView","handleFinalFormSubmit","FormSpySubscription","ReferenceManyFilterForm","subscription","anyTouched","asyncValidate","asyncValidating","autofill","blur","clearAsyncError","clearFields","clearSubmit","clearSubmitErrors","destroy","initialize","initialized","pure","resetSection","submit","submitAsSideEffect","touch","triggerSubmit","untouch","__versions","ReferenceManyFilter","ReferenceListLinkButton","ReferenceManyActions","IsArchivedField","MaintainableItemShowMainBlockView","MaintainableItemShowMainBlock","MaintainableItemCommentsInput","MaintainableItemComment","MaintainableItemCommentsList","setUsers","MaintainableItemCommentForm","MaintainableItemActions","ReferenceManyFilters","ReferenceManyActionButtons","MaintainableItemShowGrid","ArrayField","MaintainableItemShow","MaintainableItemIcon","LocationFilter","LocationList","LocationShow","LocationIcon","DefectFilter","DefectList","LocationToolbar","DefectEdit","DefectCreate","DefectShow","EquipmentTemplateFilter","EquipmentTemplateList","EquipmentTemplateEdit","EquipmentTemplateShow","EquipmentTemplateCreate","TelemetrySystemList","TelemetrySystemEdit","TelemetrySystemShow","TelemetrySystemCreate","DefectIcon","BugReportIcon","EquipmentTemplateIcon","EquipmentCatalogShow","EquipmentCatalogEdit","EquipmentCatalogFilter","EquipmentCatalogList","EquipmentIcon","DevicesOtherIcon","STMIcon","Wrap","CounterpartyShow","showUsersButton","showObjectsButton","CounterpartyCreate","regions_in","CounterpartyEdit","CounterpartyList","CounterpartyIcon","TestShow","NumberField","TestCreate","min","TestEdit","TestFilter","TestList","TestIcon","DoneAllIcon","rowsPerPageOptions","App","Admin","loginPage","MyLoginPage","dashboard","Dashboard","customReducers","customRoutes","Resource","show","edit","ImportExportShow","ImportExportIcon","hostname","ReactDOM","getElementById","serviceWorker","ready","registration","unregister"],"mappings":"4zkHAAAA,EAAOC,QAAU,IAA0B,yC,oBCA3CD,EAAOC,QAAU,IAA0B,sC,oSCO9BC,EAAkB,CAC7BC,KAAM,UACNC,MAAO,UACPC,IAAK,UACLC,KAAM,UACNC,OAAQ,WAGGC,EAAY,SAACC,GACxB,IAAIC,EAAUC,SAASC,OAAOC,MAC5B,IAAIC,OAAO,WAAaL,EAAKM,QAAQ,+BAAgC,QAAU,aAEjF,OAAOL,EAAUM,mBAAmBN,EAAQ,SAAMO,GAGvCC,EAAY,SAACT,EAAMU,GAAyB,IAAlBC,EAAiB,uDAAP,IAC/CA,EAAO,aACLC,KAAM,KAEHD,IAGOE,SAAWF,EAAQE,QAAQC,cACrCH,EAAQE,QAAUF,EAAQE,QAAQC,eAGpC,IAAIC,EAAgBC,mBAAmBhB,GAAQ,IAAMgB,mBAAmBN,GAExE,IAAK,IAAIO,KAAaN,EAAS,CAC7BI,GAAiB,KAAOE,EACxB,IAAIC,EAAcP,EAAQM,IACN,IAAhBC,IACFH,GAAiB,IAAMG,GAI3BhB,SAASC,OAASY,GAGPI,EAAe,SAACnB,GAC3BS,EAAUT,EAAM,GAAI,CAClB,WAAY,KAIHoB,EAAiB,SAACC,GAA0B,IAAnBC,EAAkB,uDAAN,EAC1CC,EAAWF,EAAMG,QAAO,SAACC,GAAD,OAAWA,EAAKC,WACxCC,EAAWN,EAAMG,QAAO,SAACC,GAAD,OAAUA,EAAKC,WACvCE,EAASD,EAASH,QAAO,SAACC,GAAD,OAA8D,IAApDA,EAAKzB,KAAK6B,OAAO,iCACpDC,EAAQH,EAASH,QAAO,SAACC,GAAD,OAA8D,IAApDA,EAAKzB,KAAK6B,OAAO,iCACnDE,EAAOV,EAAMG,QAAO,SAACC,GACzB,OAAOA,aAAgBO,OAA6C,IAArCP,EAAKQ,KAAKJ,OAAO,kBAGlD,OAAIE,EAAKG,OACAC,QAAQC,IACbL,EAAKM,KAAI,SAACC,GACR,OAAOC,YAAiBD,EAAO,CAC7BhB,YACAkB,aAAc,KACbC,MAAK,SAACC,GACP,OAAO,IAAIV,KAAK,CAACU,GAAa,CAAET,KAAMK,EAAML,cAM7CE,QAAQC,IACbR,EAAOS,KAAI,SAACC,GACV,OAAOC,YAAiBD,EAAMZ,QAAS,CACrCJ,YACAkB,aAAc,KACbC,MAAK,SAACC,GACP,IAAMC,EAAMC,OAAOC,IAAIC,gBAAgBJ,GACjC1C,EAAOsC,EAAMtC,KACb0B,EAAU,IAAIqB,KAAK,CAACL,GAAa1C,EAAM,CAC3CiC,KAAMK,EAAML,OAId,OAFAP,EAAQsB,QAAUL,EAClBjB,EAAQd,KAAOZ,EACR,2BACFsC,GADL,IAEEZ,UACAiB,eAKLF,MAAK,SAACQ,GACL,MAAM,GAAN,mBAAW1B,GAAX,YAAwBO,GAAxB,YAAkCmB,OAtB/B,OAwBE,SAACC,GAEN,OADAC,QAAQC,IAAIF,GACL7B,MAIAgC,EAAkB,SAACC,GAC9B,IAEMlD,EAAQkD,EAASlD,MAFA,2BAGvB,IAAKA,EAAO,OAAOA,EAJwB,kBAKfA,EALe,GAK5BJ,GAL4B,WAKtBuD,EALsB,KAMrCC,EAAgBC,MAAqBC,UAAU1D,GAAMM,QAJvC,eAI4D,IAAIqD,UAAU,EAAG,KACjG,MAAM,GAAN,OAAUH,EAAV,YAA2BD,IAGhBK,EAAoB,SAApBA,EAAqBC,EAASC,EAAUC,GACnD,IAAId,EAAS,GACb,OAAKY,GAGLG,OAAOC,KAAKJ,GAASK,SAAQ,SAACC,GAC5B,IAAIC,EAASD,EAAI7D,QAAQ,MAAO,IAClB+D,cAAIN,EAAcD,EAAW,IAAMK,KAI7CN,EAAQM,aAAgBG,OAC1BF,EAASA,EAAO9D,QAAQ,MAAO,IAC1B2C,EAAOsB,eAAeF,cAAIN,EAAcD,EAAW,IAAMM,MAC5DnB,EAAOoB,cAAIN,EAAcD,EAAW,IAAMM,IAAWP,EAAQM,GAAK9B,KAAI,SAAC3B,GACrE,MAAqB,kBAAVA,EACFkD,EAAkBlD,EAAOoD,EAAUC,GAC9BrD,OAGe,kBAAjBmD,EAAQM,GACxBlB,EAAOoB,cAAIN,EAAcD,EAAW,IAAMM,IAAWR,EAAkBC,EAAQM,GAAML,EAAUC,GAC9D,kBAAjBF,EAAQM,GACxBlB,EAAOoB,cAAIN,EAAcD,EAAW,IAAMM,IACxCC,cAAIN,EAAcD,EAAW,IAAMM,EAAS,KAAOP,EAAQM,KAASN,EAAQM,GAC7C,mBAAjBN,EAAQM,GACxBlB,EAAOoB,cAAIN,EAAcD,EAAW,IAAMM,IAAWP,EAAQM,GAAO,eAAO,qBAE3ElB,EAAOoB,cAAIN,EAAcD,EAAW,IAAMM,IAAWP,EAAQM,OAG1DlB,GA5BE,MCpHXuB,EAAQ,KAAUC,SAElB,IAAMC,EAAoE9B,OAAO+B,IAKpEC,EAAWF,EAAWG,oBAAsB,cAC5CC,EAAiB,UAAMF,EAAN,eACjBG,EAAoB,UAAMH,EAAN,kBACpBI,EAAa,UAAMJ,EAAN,YAGbK,EAAWP,EAAWQ,oBAAsB,wBAC5CC,EAAUT,EAAWU,mBAAqB,sBAC1CC,EAAcX,EAAWY,uBAAyB,wBAElDC,GADcb,EAAWc,sBACdd,EAAWe,oBAAsB,yBAC5CC,EAAWhB,EAAWiB,oBAAsB,wBAC5CC,EAAgBlB,EAAWmB,yBAA2B,wBACtDC,EAAWpB,EAAWqB,oBAAsB,wBAC5CC,EAAmBtB,EAAWuB,4BAA8B,wB,yCCjBnEC,EAAWC,yBAAe,CAC9BC,IAAKN,IAGDO,EAAWC,YAAU,uCAAC,WAAOC,EAAP,oBAAAC,EAAA,6DAAYC,EAAZ,EAAYA,QAAZ,SACNC,KADM,cACpBC,EADoB,yBAGnB,CACLF,QAAQ,2BACHA,GADE,IAELG,cAAeD,EAAK,iBAAaA,GAAU,OANrB,2CAAD,yDAWdE,EAAmB,IAAIC,eAAa,CAC/CC,KAAMb,EACNc,MAAO,IAAIC,kBAGAC,EAA2B,IAAIJ,eAAa,CACvDC,KAAMV,EAASc,OAAOjB,GACtBc,MAAO,IAAIC,kB,8MCxBb,IAAMG,EAAyBC,IAAH,KASb,WAACC,GACd,OAAOT,EAAiBU,OAAO,CAC7BC,SAAUJ,EACVK,UAAW,CAAEH,gBACbI,QAAS,SAACxE,GACRyE,MAAMzE,OCZCwD,GAAc,uCAAG,sCAAAF,EAAA,yDACxBoB,EAAkB7H,EAAU+E,GAC5B+C,EAAqB9H,EAAUgF,IAE/B+C,GAAaF,IAAqBE,GAAaD,EAAoB,WAJ3C,0CAUdE,EAAaF,GAVC,oBAOtBG,KACEC,QAAWtB,EARS,EAQTA,MAAOW,EARE,EAQFA,aAItB7G,EAAUqE,EAAmB6B,GAC7BlG,EAAUsE,EAAsBuC,GAEhCM,EAAkBjB,EAfM,wDAiBxBxF,EAAa2D,GACb3D,EAAa4D,GACP,IAAImD,MAAJ,UAAa,KAAMC,QAAQ7H,QAAQ,UAAW,IAAIA,QAAQ,kBAAmB,MAnB3D,iCAuBrBsH,GAvBqB,0DAAH,qDA0BdE,GAAe,SAACnB,EAAOyB,GAClC,GAAIzB,EAAO,CACT,IAAM0B,EAAeC,IAAU3B,GACzB4B,EAAeC,KAAKC,MAAQ,IAElC,OADeJ,EAAaK,IAAM,GAAKH,EAGvC,OAAO,G,6TCnCX,IAAMI,GAAiBtB,IAAH,M,mBCIdnB,GAAWC,yBAAe,CAC9BC,IAAKnB,IAGDoB,GAAWC,YAAU,uCAAC,WAAOC,EAAP,oBAAAC,EAAA,6DAAYC,EAAZ,EAAYA,QAAZ,SACNC,KADM,cACpBC,EADoB,yBAGnB,CACLF,QAAQ,2BACHA,GADE,IAELG,cAAeD,EAAK,iBAAaA,GAAU,OANrB,2CAAD,yDAWrBiC,GAAS,IAAIC,KAAc,CAC/BzC,IAAKjB,EACLxE,QAAS,CACPmI,MAAM,EACNC,WAAW,EACXC,qBAAsB,EACtBC,iBAAiB,WAAD,4BAAE,4BAAAzC,EAAA,sEACIE,KADJ,cACVC,EADU,yBAGT,CACLC,cAAeD,EAAK,iBAAaA,GAAU,KAJ7B,2CAAF,kDAAC,MAUfI,GAAOmC,iBACX,YAAgB,IAAbC,EAAY,EAAZA,MAAY,EACeC,aAAkBD,GAAtCE,EADK,EACLA,KAAMC,EADD,EACCA,UACd,MAAgB,wBAATD,GAAgD,iBAAdC,IAE3CV,GACAvC,GAASc,OAAOjB,KAGH,OAAIY,eAAa,CAC9BC,QACAC,MAAO,IAAIC,kB,obC9Cb,IAAMsC,GAAsBlC,IAAH,MAqBV,YAACmC,GACd,OAAOC,GAAiBlC,OAAO,CAC7BC,SAAU+B,GACV9B,UAAU,eAAM+B,GAChB9B,QAAS,SAACxE,GACRyE,MAAMzE,O,8BCxBCwG,GAAiBC,0BAEjBC,GAAU,IAAIC,KAAQ,IAEtBC,GAAgB,SAACC,EAAQC,GAAT,OAAqBC,aAAqBL,GAASG,EAAQC,IAE3EE,GAAmB,SAAUC,GAWxC,OAVAA,EACG3I,QAAO,SAAC4I,GAAD,OAAOA,EAAEC,cAChBnG,SAAQ,SAACkG,GACR,IAAK,IAAIjG,KAAOiG,EAAEC,WACU,cAAtBD,EAAEC,WAAWlG,KACfiG,EAAEC,WAAWlG,QAAO3D,MAKrB2J,GCjBHjE,IDsBaoE,aAAoBZ,GAAea,UCtBrCpE,yBAAe,CAC9BC,IAAKb,KAGDc,GAAWC,YAAU,uCAAC,WAAOC,EAAP,oBAAAC,EAAA,6DAAYC,EAAZ,EAAYA,QAAZ,SACNC,KADM,cACpBC,EADoB,yBAGnB,CACLF,QAAQ,2BACHA,GADE,IAELG,cAAeD,EAAK,iBAAaA,GAAU,GAC3C6D,QRT2B,WQEL,2CAAD,yDAuBZ,OAAI1D,eAAa,CAC9BC,KAAMV,GAASc,OAAOjB,IACtBc,MAAO,IAAIC,gBACXwD,eAdqB,CACrBC,WAAY,CACVC,YAAa,eACbC,YAAa,UAEfzB,MAAO,CACLwB,YAAa,eACbC,YAAa,U,gOCzBjB,IAAMC,GAAoBxD,IAAH,MAaR,cACb,OAAOyD,GAAiB3B,MAAM,CAC5BA,MAAO0B,GACPF,YAAa,eACbjD,QAAS,SAACxE,GACRyE,MAAMzE,OCZC6H,GAAe,CAC1BC,MAAM,WAAD,4BAAE,6CAAAxE,EAAA,6DAASyE,EAAT,EAASA,SAAUC,EAAnB,EAAmBA,SAAnB,kBNSO1B,EMHM,CAAEwB,MAAOC,EAAUC,SAAUA,GNI1CrE,EAAiBU,OAAO,CAC7BC,SAAUmB,GACVlB,UAAU,eAAM+B,GAChB9B,QAAS,SAACxE,GACRyE,MAAMzE,MMdH,2BAGD8E,KACEgD,MAASrE,EAJV,EAIUA,MAAOW,EAJjB,EAIiBA,aAAc6D,EAJ/B,EAI+BA,KAGlC1K,EAAUqE,EAAmB6B,GAC7BlG,EAAUsE,EAAsBuC,GAR7B,UAUG8D,GAAcD,GAVjB,yBAcOE,KAdP,qBAaOlB,EAbP,EAaDnC,KAAQmC,QAEKA,EAAMjI,OAflB,uBAgBK,IAAIgG,MAAM,qBAhBf,eAkBH0B,GAAQ0B,OAAO,IACf1B,GAAQ0B,OAAOpB,GAAiBC,IAnB7B,kBAqBIhI,QAAQoJ,WArBZ,wCAuBHpK,EAAa2D,GACb3D,EAAa4D,GAEP,IAAImD,MAAJ,kBAAqB,KAAMC,QAAQ7H,QAAQ,UAAW,IAAIA,QAAQ,kBAAmB,MA1BxF,kCNSM,IAACkJ,IMTP,qBAAF,mDAAC,GA6BNgC,OAAQ,SAACC,GAGP,OAFAtK,EAAa2D,GACb3D,EAAa4D,GACN5C,QAAQoJ,WAEjBG,WAAY,SAACD,GACX,IAAME,EAASF,EAAOE,OACtB,OAAe,MAAXA,GAA6B,MAAXA,GACpBxK,EAAa2D,GACb3D,EAAa4D,GACN5C,QAAQyJ,UAEVzJ,QAAQoJ,WAEjBM,UAAW,SAACJ,GACV,OAAO1L,EAAU+E,KAAuBgD,GAAa/H,EAAUgF,IAC3D5C,QAAQoJ,UACRpJ,QAAQyJ,UAEdE,eAAe,WAAD,4BAAE,WAAOL,GAAP,uBAAAjF,EAAA,6DACRG,EAAQ5G,EAAU+E,GAClBuD,EAAeC,IAAU3B,GACzBoF,EAAO1D,EAAa0D,KAHZ,kBAQFV,KARE,wBAOFlB,EAPE,EAOVnC,KAAQmC,QAGKA,EAAMjI,QAAQC,QAAQyJ,OAAO,qBAE5ChC,GAAQ0B,OAAO,IACf1B,GAAQ0B,OAAOpB,GAAiBC,IAbpB,kBAeLhI,QAAQoJ,QAAQ,CAAE3B,WAASmC,UAftB,2DAiBL5J,QAAQyJ,OAAR,OAjBK,0DAAF,mDAAC,IC1DXI,GAAmB,SAACC,EAAenI,GACvC,IAAMkI,EAAmBC,EAAcC,MAAK,SAACC,GAAD,OAAkBA,EAAaC,eAAeC,SAASvI,MACnG,IAAKkI,EAAkB,MAAM,IAAI9D,MAAM,0BACvC,OAAO8D,GCDMM,GDIkB,WAAyB,IAAxBL,EAAuB,uDAAP,GAChD,MAAO,CACLM,QAAS,SAACzI,EAAU2H,GAAX,OAAsBO,GAAiBC,EAAenI,GAAUyI,QAAQzI,EAAU2H,IAC3Fe,OAAQ,SAAC1I,EAAU2H,GAAX,OAAsBO,GAAiBC,EAAenI,GAAU0I,OAAO1I,EAAU2H,IACzFgB,QAAS,SAAC3I,EAAU2H,GAAX,OAAsBO,GAAiBC,EAAenI,GAAU2I,QAAQ3I,EAAU2H,IAC3FiB,iBAAkB,SAAC5I,EAAU2H,GAAX,OAChBO,GAAiBC,EAAenI,GAAU4I,iBAAiB5I,EAAU2H,IACvEkB,OAAQ,SAAC7I,EAAU2H,GAAX,OAAsBO,GAAiBC,EAAenI,GAAU6I,OAAO7I,EAAU2H,IACzFH,OAAQ,SAACxH,EAAU2H,GAAX,OAAsBO,GAAiBC,EAAenI,GAAUwH,OAAOxH,EAAU2H,IACzFmB,WAAY,SAAC9I,EAAU2H,GAAX,OAAsBO,GAAiBC,EAAenI,GAAU8I,WAAW9I,EAAU2H,IACjGoB,OAAQ,SAAC/I,EAAU2H,GAAX,OAAsBO,GAAiBC,EAAenI,GAAhC,OAAiDA,EAAU2H,IACzFqB,WAAY,SAAChJ,EAAU2H,GAAX,OAAsBO,GAAiBC,EAAenI,GAAUgJ,WAAWhJ,EAAU2H,IACjGsB,OAAQ,SAACjJ,EAAU2H,GAAX,OAAsBO,GAAiBC,EAAenI,GAAUiJ,OAAOjJ,EAAU2H,IACzFuB,QAAS,SAAClJ,EAAU2H,GAAX,OAAsBO,GAAiBC,EAAenI,GAAUkJ,QAAQlJ,EAAU2H,M,QEmQhFwB,GAtRc,SAACtM,GAAa,IACjCuM,EAA4DvM,EAA5DuM,OAAQC,EAAoDxM,EAApDwM,WAA2BC,EAAyBzM,EAAxC0M,cAEtBA,EAAgBrJ,OAAOC,KAAKkJ,GAAYG,QAAO,SAACC,EAAKzJ,GACzD,IAAM0J,EAAaL,EAAWrJ,GAAU0J,WAExC,MAA0B,oBAAfA,EACFA,EAAWD,GAGbA,IACNH,GAEH,MAAO,CACLT,OAAO,WAAD,4BAAE,WAAO7I,EAAU2H,GAAjB,6CAAAjF,EAAA,2DACE1C,EADF,OAEC,uBAFD,uCAGyEqJ,EAAWrJ,GAAX,OACzE2H,EACA4B,GALA,uBAGMI,EAHN,EAGMA,UAAWhG,EAHjB,EAGiBA,UAAWiG,EAH5B,EAG4BA,cAAkBC,EAH9C,0DAOMhB,EAAsBc,EAAtBd,OAAQiB,EAAcH,EAAdG,UACRC,EAAwCpG,EAAxCoG,gBAAiBC,EAAuBrG,EAAvBqG,mBARvB,UAaQZ,EAAO3F,OAAP,aACRC,SAAUmF,EACVlF,UAAWoG,GACRF,IAhBH,wBAWUI,EAXV,EAUA/F,KACEA,KAAQ+F,KAOZD,EAAmBE,MAAMC,GAAKF,EAAKE,GAlBjC,kBAmBKf,EACJ3F,OADI,aAEHC,SAAUoG,EACVnG,UAAU,eAAMqG,IACbH,IAEJlL,MAAK,SAACyL,GAAD,OAAcR,EAAcQ,EAASlG,UAzB3C,iBA6BkEmF,EAAWrJ,GAAX,OAClE2H,EACA4B,GAFM7F,EA7BN,EA6BMA,SAAUC,EA7BhB,EA6BgBA,UAAWiG,EA7B3B,EA6B2BA,cAAkBC,EA7B7C,2EAiCKT,EACJ3F,OADI,aAEHC,WACAC,aACGkG,IAEJlL,MAAK,SAACyL,GAAD,OAAcR,EAAcQ,EAASlG,UAvC3C,4CAAF,qDAAC,GA0CP6E,OAAQ,SAAC/I,EAAU2H,GAAY,IAAD,EACwC0B,EAAWrJ,GAAX,OAClE2H,EACA4B,GAFM7F,EADoB,EACpBA,SAAUC,EADU,EACVA,UAAWiG,EADD,EACCA,cAAkBC,EADnB,yDAK5B,OAAOT,EACJ3F,OADI,aAEHC,WACAC,aACGkG,IAEJlL,MAAK,SAACyL,GAAD,OAAcR,EAAcQ,EAASlG,UAE/C8E,WAAY,kBAAM3K,QAAQoJ,QAAQ,CAAEvD,KAAM,MAC1CuE,QAAS,SAACzI,EAAU2H,GAClB,OAAQ3H,GACN,IAAK,qBAAuB,IAAD,EAC0CqJ,EAAWrJ,GAAX,QACjE2H,EACA4B,GAFMc,EADiB,EACjBA,QAAS1G,EADQ,EACRA,UAAWiG,EADH,EACGA,cAAkBC,EADrB,wDAKjBS,EAA4F3G,EAA5F2G,YAAaC,EAA+E5G,EAA/E4G,iBAAkBC,EAA6D7G,EAA7D6G,gBAAiBC,EAA4C9G,EAA5C8G,oBAAqBC,EAAuB/G,EAAvB+G,mBACrEjC,EAA2C4B,EAA3C5B,QAASkC,EAAkCN,EAAlCM,OAAQC,EAA0BP,EAA1BO,WAAYC,EAAcR,EAAdQ,UAkErC,OAjEU,uCAAG,8BAAAnI,EAAA,2DACH4H,EADG,OAEJ,uBAFI,OAgCJ,0BAhCI,2BAGHQ,EAAM,IACN5K,OAAO6K,OAAOL,EAAmBhN,QAAQA,OAAOsN,SAAS5M,OAJtD,gCAMGgL,EACH/D,MADG,aAEFA,MAAOwF,EACPlH,UAAW+G,EACX7D,YAAa,gBACVgD,IAEJlL,MAAK,SAACyL,GAAD,OAAcA,KAbnB,OAKLU,EALK,OAcH5G,KAAK4G,IAdF,cAgBPA,EAAG,sBAAOA,GAAP,YAAgBP,EAAiB7M,OAAOoN,KAAO,KAhB3C,kBAiBA1B,EACJ/D,MADI,aAEHA,MAAOoD,EACP9E,UAAU,2BACL4G,GADI,IAEP7M,OAAO,2BACF6M,EAAiB7M,QADhB,IAEJoN,IAAKA,EAAI1M,OAAS0M,OAAMpO,MAG5BmK,YAAa,gBACVgD,IAEJlL,MAAK,SAACyL,GAAD,OAAcR,EAAcQ,EAASlG,UA9BtC,WAiCH4G,EAAM,IACN5K,OAAO6K,OAAOP,EAAgB9M,QAAQA,OAAOsN,SAAS5M,OAlCnD,kCAoCGgL,EACH/D,MADG,aAEFA,MAAOsF,EACPhH,UAAW6G,EACX3D,YAAa,gBACVgD,IAEJlL,MAAK,SAACyL,GAAD,OAAcA,KA3CnB,QAmCLU,EAnCK,OA4CH5G,KAAK4G,IA5CF,eA8CPA,EAAG,sBAAOA,GAAP,YAAgBP,EAAiB7M,OAAOoN,KAAO,KA9C3C,kBAgDA1B,EACJ/D,MADI,aAEHA,MAAOuF,EACPjH,UAAU,2BACL8G,GADI,IAEP/M,OAAO,2BACF+M,EAAoB/M,QADnB,IAEJoN,IAAKA,EAAI1M,OAAS0M,OAAMpO,MAG5BmK,YAAa,gBACVgD,IAEJlL,MAAK,SAACyL,GAAD,OAAcR,EAAcQ,EAASlG,UA7DtC,4CAAH,oDAiEH+G,GAET,QAAU,IAAD,EAC0D5B,EAAWrJ,GAAX,QAC/D2H,EACA4B,GAFMlE,EADD,EACCA,MAAO1B,EADR,EACQA,UAAWiG,EADnB,EACmBA,cAAkBC,EADrC,sDAMP,OAAOT,EACJ/D,MADI,aAEHA,QACA1B,YACAkD,YAAa,gBACVgD,IAEJlL,MAAK,SAACyL,GAAD,OAAcR,EAAcQ,EAASlG,WAInDyE,QAAS,SAAC3I,EAAU2H,GAEN,IAAD,EAC0D0B,EAAWrJ,GAAX,QAC/D2H,EACA4B,GAFMlE,EADD,EACCA,MAAO1B,EADR,EACQA,UAAWiG,EADnB,EACmBA,cAAkBC,EADrC,sDAKP,OAAOT,EACJ/D,MADI,aAEHA,QACA1B,YACAkD,YAAa,gBACVgD,IAEJlL,MAAK,SAACyL,GAAD,OAAcR,EAAcQ,EAASlG,UAInD0E,iBAAkB,SAAC5I,EAAU2H,GAAY,IAAD,EAC2B0B,EAAWrJ,GAAX,iBAC/D2H,EACA4B,GAFMlE,EAD8B,EAC9BA,MAAO1B,EADuB,EACvBA,UAAWiG,EADY,EACZA,cAAkBC,EADN,sDAKtC,OAAOT,EACJ/D,MADI,aAEHA,QACA1B,YACAkD,YAAa,gBACVgD,IAEJlL,MAAK,SAACyL,GAAD,OAAcR,EAAcQ,EAASlG,UAE/CwE,OAAQ,SAAC1I,EAAU2H,GAAY,IAAD,EACqC0B,EAAWrJ,GAAX,OAC/D2H,EACA4B,GAFMlE,EADoB,EACpBA,MAAO1B,EADa,EACbA,UAAWiG,EADE,EACFA,cAAkBC,EADhB,sDAK5B,OAAOT,EACJ/D,MADI,aAEHA,QACA1B,YACAkD,YAAa,gBACVgD,IAEJlL,MAAK,SAACyL,GAAD,OAAcR,EAAcQ,EAASlG,UAE/C+E,OAAQ,SAACjJ,EAAU2H,GAAY,IAAD,EACwC0B,EAAWrJ,GAAX,OAClE2H,EACA4B,GAFM7F,EADoB,EACpBA,SAAUC,EADU,EACVA,UAAWiG,EADD,EACCA,cAAkBC,EADnB,yDAK5B,OAAOT,EACJ3F,OADI,aAEHC,WACAC,aACGkG,IAEJlL,MAAK,SAACyL,GAAD,OAAcR,EAAcQ,EAASlG,UAE/CgF,QAAS,SAAClJ,EAAU2H,GAAY,IAAD,EACuC0B,EAAWrJ,GAAX,QAClE2H,EACA4B,GAFM7F,EADqB,EACrBA,SAAUC,EADW,EACXA,UAAWiG,EADA,EACAA,cAAkBC,EADlB,yDAK7B,OAAOT,EACJ3F,OADI,aAEHC,WACAC,aACGkG,IAEJlL,MAAK,SAACyL,GAAD,OAAcR,EAAcQ,EAASlG,UAE/CsD,OAAO,WAAD,4BAAE,WAAOxH,EAAU2H,GAAjB,yCAAAjF,EAAA,2DACE1C,EADF,OAEC,uBAFD,uCAGyEqJ,EAAWrJ,GAAX,OACzE2H,EACA4B,GALA,uBAGMI,EAHN,EAGMA,UAAWhG,EAHjB,EAGiBA,UAAWiG,EAH5B,EAG4BA,cAAkBC,EAH9C,0DAOMrC,EAAsBmC,EAAtBnC,OAAQ0D,EAAcvB,EAAduB,UACRC,EAAwCxH,EAAxCwH,gBAAiBC,EAAuBzH,EAAvByH,mBARvB,UASIhC,EAAO3F,OAAP,aACJC,SAAU8D,EACV7D,UAAWwH,GACRtB,IAZH,iCAeKT,EACJ3F,OADI,aAEHC,SAAUwH,EACVvH,UAAWyH,GACRvB,IAEJlL,MAAK,SAACyL,GAAD,OAAcR,EAAcQ,EAASlG,UArB3C,iBAyBkEmF,EAAWrJ,GAAX,OAClE2H,EACA4B,GAFM7F,EAzBN,EAyBMA,SAAUC,EAzBhB,EAyBgBA,UAAWiG,EAzB3B,EAyB2BA,cAAkBC,EAzB7C,2EA6BKT,EACJ3F,OADI,aAEHC,WACAC,aACGkG,IAEJlL,MAAK,SAACyL,GAAD,OAAcR,EAAcQ,EAASlG,UAnC3C,4CAAF,qDAAC,GAsCP4E,WAAY,kBAAMzK,QAAQoJ,QAAQ,CAAEvD,KAAM,MAC1CoE,eAAgBpI,OAAOC,KAAKkJ,K,2FC5QjBF,MCsBAkC,GAjByB,SAACC,GACvC,OAAO,2BACFA,GADL,IAEEC,YAAaC,KAAMF,EAAOG,MAAO,WCT/BrJ,GAAWC,yBAAe,CAC9BC,IAAKf,IAGDgB,GAAWC,YAAU,uCAAC,WAAOC,EAAP,oBAAAC,EAAA,6DAAYC,EAAZ,EAAYA,QAAZ,SACNC,KADM,cACpBC,EADoB,yBAGnB,CACLF,QAAQ,2BACHA,GADE,IAELG,cAAeD,EAAK,iBAAaA,GAAU,OANrB,2CAAD,yDAWZ,OAAIG,eAAa,CAC9BC,KAAMV,GAASc,OAAOjB,IACtBc,MAAO,IAAIC,kBCOPuI,GAAoB,SAACxH,EAAMyH,EAAcC,EAAarC,GAyD1D,OAxDkBqC,EAAYpC,QAAO,SAACC,EAAKoC,GACzC,IAAK3H,EAAM,OAAOuF,EAElB,IAAMnF,EAAMuH,EAAM3P,KACZqJ,EAjBU,SAAduG,EAAe3N,GACnB,IAAKA,EAAM,MAAM,IAAIiG,MAAM,kBAE3B,IAAMmB,EAAOpH,EAAKoH,KAClB,OAAKA,GFbiB,aEaTpH,EAAKoH,KAKXA,EAHEuG,EADQ3N,EAAK4N,QAYPD,CAAYD,EAAM1N,MACzB6B,EAAWO,KAAI2D,EAAM,cAC3B,GFhCgB,SEgCZqB,EAAe,CACjB,IAAMuF,EAAMvK,KAAI2D,EAAM,CAAC,GAAD,OAAII,EAAJ,SAChByG,EAASxK,KAAI2D,EAAMI,GAEzB,OAAQtE,GACN,IAAK,oBAIL,IAAK,kBACH,MAAY,eAARsE,EACKyG,GAAUvK,MAAMwL,QAAQjB,GAAxB,2BAAuCtB,GAAvC,mBAA6CnF,EAAMyG,EAAOxM,KAAI,SAAC0N,GAAD,OAAOC,KAAKD,EAAG,mBAAmBxC,OACrF/M,IAARoO,EAAoBrB,EAApB,2BAA+BA,GAA/B,mBAAqCnF,EAAMwG,EAAIvM,KAAI,SAAC4L,GAAD,MAAS,CAAEA,WAC5E,IAAK,OACH,MAAY,6BAAR7F,GAA8C,kBAARA,EAAgC,2BAAKmF,GAAZ,mBAAkBnF,EAAMJ,EAAKI,IAAQ,UACpF5H,IAARoO,EAAoBrB,EAApB,2BAA+BA,GAA/B,mBAAqCnF,EAAMwG,EAAIvM,KAAI,SAAC4L,GAAD,MAAS,CAAEA,WAC5E,QACE,YAAezN,IAARoO,EAAoBrB,EAApB,2BAA+BA,GAA/B,mBAAqCnF,EAAMwG,EAAIvM,KAAI,SAAC4L,GAAD,MAAS,CAAEA,YAI3E,GFpDuB,gBEoDnB5E,EAAsB,CACxB,IAAM4G,EAAkB5L,KAAIsL,EAAO,CAAC,OAAQ,SAAU,SAAU,SAChE,OAAO,2BACFpC,GADL,mBAEGnF,EAAMJ,EAAKI,GACT5G,QAAO,SAAC0O,GAAD,OAAYA,KACnB7N,KAAI,SAAC6N,GAAD,OAAYC,GAAoCD,EAAQT,EAAcQ,EAAiB5C,QAIlG,GF5DwB,iBE4DpBhE,EAAuB,CACzB,IAAM3I,EAAQ2D,KAAI2D,EAAMI,GAClB6F,EAAK5J,KAAI2D,EAAM,CAACI,EAAK,OACrBnE,EAAOvD,EAAQsD,OAAOC,KAAKvD,GAAS,GAC1C,OAAOuN,EAAE,2BAAQV,GAAR,mBAAcnF,EAAM,CAAE6F,QAAShK,EAAK/B,OAAL,2BAAmBqL,GAAnB,mBAAyBnF,EAAM1H,IAAU6M,EAGnF,GFpEkB,WEoEdlE,EAAiB,CACnB,IAAM3I,EAAQ2D,KAAI2D,EAAM,CAACI,IACzB,YAAiB5H,IAAVE,EAAsB6M,EAAtB,2BAAiCA,GAAjC,mBAAuCnF,EAAM1H,IAGtD,GFtEgB,SEsEZ2I,EAAe,CACjB,IAAM3I,EAAQ2D,KAAI2D,EAAM,CAACI,IACzB,YAAiB5H,IAAVE,EAAsB6M,EAAtB,2BAAiCA,GAAjC,mBAAuCnF,EAAM1H,IAGtD,OAAO6M,IACN,KAIC4C,GAAsC,SAACnI,EAAMyH,EAAcxN,EAAMoL,GACrE,IAAMqC,EAAcrL,KAAIgJ,EAAe,CAAC,SAAU,cAAepL,EAAM,gBAEvE,IAAKyN,EAAa,MAAM,IAAIxH,MAAJ,sBAAyBjG,EAAzB,eAIxB,OAFkBuN,GAAkBxH,EAAMyH,EAAcC,EAAarC,IAgGxD+C,GA3FQ,CACrBzD,OAAQ,SAAClB,EAAQ4B,GAAmB,IAC1BrF,EAASyD,EAATzD,KAER,MAAO,CACLgG,MAFYmC,GAAoCnI,OAAMxH,EAAP,UAAqBwH,EAAKqI,WAA1B,eAAmDhD,KAKtGR,OAAQ,SAACpB,EAAQ4B,GAAmB,IAC1BY,EAAqBxC,EAArBwC,GAAqBxC,EAAjBgE,aAEZ,MAAO,CACLa,MAAO,CAAErC,QAGbnB,WAAY,kBAAM3K,QAAQoJ,QAAQ,CAAEvD,KAAM,MAC1CuE,QAAS,SAACd,EAAQ4B,GAAmB,IAEjC7L,EAGEiK,EAHFjK,OAFgC,EAK9BiK,EAFF8E,WAAcC,EAHkB,EAGlBA,KAAMC,EAHY,EAGZA,QAHY,EAK9BhF,EADFiF,KAAQf,EAJwB,EAIxBA,MAJwB,IAIjBgB,aAJiB,MAIT,MAJS,EAMlC,MAAO,CACLnP,SACAkP,KAAM,CAACE,KAAI,GAAIjB,EAAOgB,EAAME,gBAC5BL,OACAC,YAGJhE,QAAS,SAAChB,EAAQ4B,GAAmB,IAC3BuB,EAAQnD,EAARmD,IACR,MAAO,CACLpN,OAAQ,CACNoN,IAAKA,EAAIvM,KAAI,SAAC4L,GAAD,MAAuB,kBAAPA,EAAkBA,EAAGA,GAAKA,MAEzDwC,QAAS7B,EAAI1M,SAGjBwK,iBAAkB,SAACjB,EAAQ4B,GAAmB,IAE1C7L,EAKEiK,EALFjK,OAFyC,EAOvCiK,EAJF8E,WAAcC,EAH2B,EAG3BA,KAAMC,EAHqB,EAGrBA,QAHqB,EAOvChF,EAHFiF,KAAQf,EAJiC,EAIjCA,MAAOgB,EAJ0B,EAI1BA,MACfG,EAEErF,EAFFqF,OACA7C,EACExC,EADFwC,GAGF,OADA2C,KAAIpP,EAAQsP,EAAQ7C,GACb,CACLzM,SACAkP,KAAM,CAAC,gBAAGf,EAAQgB,IAClBH,OACAC,YAGJjE,OAAQ,SAACf,EAAQ4B,GAEf,MAAO,CACLiD,MAAO,CAAErC,GAFIxC,EAAPwC,MAKVlB,OAAQ,SAACtB,EAAQ4B,GAAmB,IAC1BY,EAAqBxC,EAArBwC,GAAqBxC,EAAjBgE,aAEZ,MAAO,CACLa,MAAO,CAAErC,QAGbjB,QAAS,SAACvB,EAAQ4B,GAAmB,IAC3BY,EAAqBxC,EAArBwC,GAAqBxC,EAAjBgE,aAEZ,MAAO,CACLa,MAAO,CAAErC,QAGb3C,OAAQ,SAACG,EAAQ4B,GAAmB,IAC1BY,EAA2BxC,EAA3BwC,GAAIjG,EAAuByD,EAAvBzD,KAAMyH,EAAiBhE,EAAjBgE,aAQlB,MAAO,CACLa,MAAO,CAAErC,MACTD,MARYmC,GACZnI,EACAyH,EAF+C,UAG5CzH,EAAKqI,WAHuC,eAI/ChD,KAOJT,WAAY,kBAAMzK,QAAQoJ,QAAQ,CAAEvD,KAAM,OCpItC+I,GAAmB,SAAnBA,EAAoB/I,EAAMqF,GAC9B,MAAoB,kBAATrF,EAA0BA,EAC9BhE,OAAOC,KAAK+D,GAAMsF,QAAO,SAACC,EAAKpJ,GACpC,IAM4B,EANtB6M,EAAUhJ,EAAK7D,GAErB,OAAgB,OAAZ6M,QAAgCxQ,IAAZwQ,EACfzD,EAGLjJ,MAAMwL,QAAQkB,GACT,2BACFzD,GADL,wBAEGpJ,EAAM6M,EAAQ3O,IAAI0O,IAFrB,yBAGM5M,EAHN,OAGiB6M,EAAQ3O,KAAI,SAAC4O,GAAD,OAAOA,EAAEhD,OAHtC,IAOqB,kBAAZ+C,EACF,uCACFzD,GACCyD,GACFA,EAAQ/C,IADN,0BAEI9J,EAFJ,OAEe6M,EAAQ/C,KAJ7B,mBAMG9J,EAAM4M,EAAiBC,KAIrB,2BAAKzD,GAAZ,mBAAkBpJ,EAAM6M,MACvB,KAGCE,GACJ,SAAC7D,GAAD,OACA,YAAuC,IAApCrF,EAAmC,EAAnCA,KACO+F,GAD4B,EAA7BoD,QAA6B,EAApBC,cACWpJ,EAAnB+F,MAASjM,EADmB,aACTkG,EADS,UAEpC,OAAO,aACLA,KAAM+I,GAAiBhD,IACpBjM,KAIHuP,GACJ,SAAChE,GAAD,OACA,YAAuC,IAApCrF,EAAmC,EAAnCA,KACOsJ,GAD4B,EAA7BH,QAA6B,EAApBC,cACsBpJ,EAA9BsJ,OAAOC,EAAuBvJ,EAAvBuJ,SAAazP,EADQ,aACEkG,EADF,sBAEpC,OAAO,aACLA,KAAMsJ,EAAMjP,IAAI0O,GAAkB1D,GAClCmE,MAAOD,EAASE,YACb3P,KA4BM4P,GAdW,CACxB/E,OAAQuE,GACRrE,OAAQqE,GACRpE,WAAY,kBAAM3K,QAAQoJ,QAAQ,CAAEvD,KAAM,MAC1CuE,QAAS8E,GACT5E,QAdA,SAACY,GAAD,OACA,YAAuC,IAApCrF,EAAmC,EAAnCA,KACOsJ,GAD4B,EAA7BH,QAA6B,EAApBC,cACsBpJ,EAA9BsJ,OAAoBxP,GAAUkG,EAAvBuJ,SADqB,aACEvJ,EADF,uBAEpC,OAAO,aACLA,KAAMsJ,EAAMjP,IAAI0O,GAAkB1D,IAC/BvL,KAUP4K,iBAAkB2E,GAClB7E,OAAQ0E,GACRnE,OAAQmE,GACRlE,QAASkE,GACT5F,OAAQ4F,GACRtE,WAAY,kBAAMzK,QAAQoJ,QAAQ,CAAEvD,KAAM,O,u9CC/HrC,IAAM2J,GAAkBtK,cAAH,MAWfuK,GAAiBvK,cAAH,KAQvBsK,IAGSE,GAAmBxK,cAAH,KAWzBsK,IAGSG,GAAmBzK,cAAH,KAQzBsK,IAGSI,GAA6B1K,cAAH,KAWnCsK,ICNWK,GAlDU,CAYvBzF,QAAS,SAACd,EAAQ4B,GAAT,MAA4B,CACnClE,MAAO0I,GACPpK,UAAWwK,GAAsB1F,QAAQd,EAAQ4B,GACjDK,cAAegE,GAAkBnF,QAAQc,KAE3CZ,QAAS,SAAChB,EAAQ4B,GAAT,MAA4B,CACnClE,MAAO2I,GACPrK,UAAWwK,GAAsBxF,QAAQhB,EAAQ4B,GACjDK,cAAegE,GAAkBjF,QAAQY,KAE3CX,iBAAkB,SAACjB,EAAQ4B,GAAT,MAA4B,CAC5ClE,MAAO4I,GACPtK,UAAWwK,GAAsBvF,iBAAiBjB,EAAQ4B,GAC1DK,cAAegE,GAAkBhF,iBAAiBW,KAEpDb,OAAQ,SAACf,EAAQ4B,GAAT,MAA4B,CAClClE,MAAOyI,GACPnK,UAAWwK,GAAsBzF,OAAOf,EAAQ4B,GAChDK,cAAegE,GAAkBlF,OAAOa,M,mpFChCrC,IAAM6E,GAAkB7K,cAAH,MAQf8K,GAAiB9K,cAAH,KAQvB6K,IAGSE,GAAmB/K,cAAH,KAWzB6K,IAGSG,GAAmBhL,cAAH,KAQzB6K,IAGSI,GAA6BjL,cAAH,KAWnC6K,IAGSK,GAAgBlL,cAAH,KAQtB6K,IAGSM,GAAgBnL,cAAH,KAQtB6K,IAGSO,GAAgBpL,cAAH,KAQtB6K,IAGSQ,GAAiBrL,cAAH,KAQvB6K,IAGSS,GAAgBtL,cAAH,KAQtB6K,IChDWU,GAlDU,CACvBjG,OAAQ,SAAClB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAU+K,GACV9K,UAAWwK,GAAsBtF,OAAOlB,EAAQ4B,GAChDK,cAAegE,GAAkB/E,OAAOU,KAE1CR,OAAQ,SAACpB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAUmL,GACVlL,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1CP,WAAY,kBAAM3K,QAAQoJ,QAAQ,CAAEvD,KAAM,MAC1CuE,QAAS,SAACd,EAAQ4B,GAAT,MAA4B,CACnClE,MAAOiJ,GACP3K,UAAWwK,GAAsB1F,QAAQd,EAAQ4B,GACjDK,cAAegE,GAAkBnF,QAAQc,KAE3CZ,QAAS,SAAChB,EAAQ4B,GAAT,MAA4B,CACnClE,MAAOkJ,GACP5K,UAAWwK,GAAsBxF,QAAQhB,EAAQ4B,GACjDK,cAAegE,GAAkBjF,QAAQY,KAE3CX,iBAAkB,SAACjB,EAAQ4B,GAAT,MAA4B,CAC5ClE,MAAOmJ,GACP7K,UAAWwK,GAAsBvF,iBAAiBjB,EAAQ4B,GAC1DK,cAAegE,GAAkBhF,iBAAiBW,KAEpDb,OAAQ,SAACf,EAAQ4B,GAAT,MAA4B,CAClClE,MAAOgJ,GACP1K,UAAWwK,GAAsBzF,OAAOf,EAAQ4B,GAChDK,cAAegE,GAAkBlF,OAAOa,KAE1CN,OAAQ,SAACtB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAUiL,GACVhL,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1CL,QAAS,SAACvB,EAAQ4B,GAAT,MAA4B,CACnC7F,SAAUkL,GACVjL,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1C/B,OAAQ,SAACG,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAUgL,GACV/K,UAAWwK,GAAsB3G,OAAOG,EAAQ4B,GAChDK,cAAegE,GAAkBpG,OAAO+B,KAE1CT,WAAY,kBAAMzK,QAAQoJ,QAAQ,CAAEvD,KAAM,O,moGC3DrC,IAAM6K,GAA6BxL,cAAH,MAS1ByL,GAA4BzL,cAAH,KAQlCwL,IAGSE,GAA8B1L,cAAH,KAgBpCwL,IAGSG,GAA8B3L,cAAH,KAapCwL,IAGSI,GAAwC5L,cAAH,KAgB9CwL,IAGSK,GAA2B7L,cAAH,KAQjCwL,IAGSM,GAA2B9L,cAAH,KAQjCwL,IAGSO,GAA2B/L,cAAH,KAQjCwL,IAGSQ,GAA4BhM,cAAH,KAQlCwL,IAGSS,GAA2BjM,cAAH,KAQjCwL,IChEWU,GAlDoB,CACjC5G,OAAQ,SAAClB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAU0L,GACVzL,UAAWwK,GAAsBtF,OAAOlB,EAAQ4B,GAChDK,cAAegE,GAAkB/E,OAAOU,KAE1CR,OAAQ,SAACpB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAU8L,GACV7L,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1CP,WAAY,kBAAM3K,QAAQoJ,QAAQ,CAAEvD,KAAM,MAC1CuE,QAAS,SAACd,EAAQ4B,GAAT,MAA4B,CACnClE,MAAO4J,GACPtL,UAAWwK,GAAsB1F,QAAQd,EAAQ4B,GACjDK,cAAegE,GAAkBnF,QAAQc,KAE3CZ,QAAS,SAAChB,EAAQ4B,GAAT,MAA4B,CACnClE,MAAO6J,GACPvL,UAAWwK,GAAsBxF,QAAQhB,EAAQ4B,GACjDK,cAAegE,GAAkBjF,QAAQY,KAE3CX,iBAAkB,SAACjB,EAAQ4B,GAAT,MAA4B,CAC5ClE,MAAO8J,GACPxL,UAAWwK,GAAsBvF,iBAAiBjB,EAAQ4B,GAC1DK,cAAegE,GAAkBhF,iBAAiBW,KAEpDb,OAAQ,SAACf,EAAQ4B,GAAT,MAA4B,CAClClE,MAAO2J,GACPrL,UAAWwK,GAAsBzF,OAAOf,EAAQ4B,GAChDK,cAAegE,GAAkBlF,OAAOa,KAE1CN,OAAQ,SAACtB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAU4L,GACV3L,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1CL,QAAS,SAACvB,EAAQ4B,GAAT,MAA4B,CACnC7F,SAAU6L,GACV5L,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1C/B,OAAQ,SAACG,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAU2L,GACV1L,UAAWwK,GAAsB3G,OAAOG,EAAQ4B,GAChDK,cAAegE,GAAkBpG,OAAO+B,KAE1CT,WAAY,kBAAMzK,QAAQoJ,QAAQ,CAAEvD,KAAM,O,86CC3DrC,IAAMwL,GAA8BnM,cAAH,MAW3BoM,GAA2BpM,cAAH,MAQxBqM,GAA2BrM,cAAH,MAOxBsM,GAAiCtM,cAAH,MAU9BuM,GAAwBvM,cAAH,MAOrBwM,GAAyBxM,cAAH,MAiBtByM,GAA4BzM,cAAH,M,ilGC3D/B,IAAM0M,GAA4B1M,cAAH,KASlCmM,IAGSQ,GAA2B3M,cAAH,KAQjC0M,IAGSE,GAA6B5M,cAAH,KAWnC0M,IAGSG,GAA6B7M,cAAH,KAQnC0M,IAGSI,GAAuC9M,cAAH,KAW7C0M,IAGSK,GAA0B/M,cAAH,KAQhC0M,IAGSM,GAA0BhN,cAAH,KAQhC0M,IAGSO,GAA0BjN,cAAH,KAQhC0M,IAGSQ,GAA2BlN,cAAH,KAQjC0M,IAGSS,GAA0BnN,cAAH,KAQhC0M,ICrDWU,GAlDmB,CAChC9H,OAAQ,SAAClB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAU4M,GACV3M,UAAWwK,GAAsBtF,OAAOlB,EAAQ4B,GAChDK,cAAegE,GAAkB/E,OAAOU,KAE1CR,OAAQ,SAACpB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAUgN,GACV/M,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1CP,WAAY,kBAAM3K,QAAQoJ,QAAQ,CAAEvD,KAAM,MAC1CuE,QAAS,SAACd,EAAQ4B,GAAT,MAA4B,CACnClE,MAAO8K,GACPxM,UAAWwK,GAAsB1F,QAAQd,EAAQ4B,GACjDK,cAAegE,GAAkBnF,QAAQc,KAE3CZ,QAAS,SAAChB,EAAQ4B,GAAT,MAA4B,CACnClE,MAAO+K,GACPzM,UAAWwK,GAAsBxF,QAAQhB,EAAQ4B,GACjDK,cAAegE,GAAkBjF,QAAQY,KAE3CX,iBAAkB,SAACjB,EAAQ4B,GAAT,MAA4B,CAC5ClE,MAAOgL,GACP1M,UAAWwK,GAAsBvF,iBAAiBjB,EAAQ4B,GAC1DK,cAAegE,GAAkBhF,iBAAiBW,KAEpDb,OAAQ,SAACf,EAAQ4B,GAAT,MAA4B,CAClClE,MAAO6K,GACPvM,UAAWwK,GAAsBzF,OAAOf,EAAQ4B,GAChDK,cAAegE,GAAkBlF,OAAOa,KAE1CN,OAAQ,SAACtB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAU8M,GACV7M,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1CL,QAAS,SAACvB,EAAQ4B,GAAT,MAA4B,CACnC7F,SAAU+M,GACV9M,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1C/B,OAAQ,SAACG,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAU6M,GACV5M,UAAWwK,GAAsB3G,OAAOG,EAAQ4B,GAChDK,cAAegE,GAAkBpG,OAAO+B,KAE1CT,WAAY,kBAAMzK,QAAQoJ,QAAQ,CAAEvD,KAAM,O,oyGC1DrC,IAAM0M,GAA8BrN,cAAH,KAYpCmM,GACAC,IAGSkB,GAA6BtN,cAAH,KAQnCqN,IAGSE,GAA+BvN,cAAH,KAgBrCqN,IAGSG,GAA+BxN,cAAH,KAarCqN,IAGSI,GAAyCzN,cAAH,KAgB/CqN,IAGSK,GAA4B1N,cAAH,KAQlCqN,IAGSM,GAA4B3N,cAAH,KAQlCqN,IAGSO,GAA4B5N,cAAH,KAQlCqN,IAGSQ,GAA6B7N,cAAH,KAQnCqN,IAGSS,GAA4B9N,cAAH,KAQlCqN,ICxEWU,GAlDqB,CAClCzI,OAAQ,SAAClB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAUuN,GACVtN,UAAWwK,GAAsBtF,OAAOlB,EAAQ4B,GAChDK,cAAegE,GAAkB/E,OAAOU,KAE1CR,OAAQ,SAACpB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAU2N,GACV1N,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1CP,WAAY,kBAAM3K,QAAQoJ,QAAQ,CAAEvD,KAAM,MAC1CuE,QAAS,SAACd,EAAQ4B,GAAT,MAA4B,CACnClE,MAAOyL,GACPnN,UAAWwK,GAAsB1F,QAAQd,EAAQ4B,GACjDK,cAAegE,GAAkBnF,QAAQc,KAE3CZ,QAAS,SAAChB,EAAQ4B,GAAT,MAA4B,CACnClE,MAAO0L,GACPpN,UAAWwK,GAAsBxF,QAAQhB,EAAQ4B,GACjDK,cAAegE,GAAkBjF,QAAQY,KAE3CX,iBAAkB,SAACjB,EAAQ4B,GAAT,MAA4B,CAC5ClE,MAAO2L,GACPrN,UAAWwK,GAAsBvF,iBAAiBjB,EAAQ4B,GAC1DK,cAAegE,GAAkBhF,iBAAiBW,KAEpDb,OAAQ,SAACf,EAAQ4B,GAAT,MAA4B,CAClClE,MAAOwL,GACPlN,UAAWwK,GAAsBzF,OAAOf,EAAQ4B,GAChDK,cAAegE,GAAkBlF,OAAOa,KAE1CN,OAAQ,SAACtB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAUyN,GACVxN,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1CL,QAAS,SAACvB,EAAQ4B,GAAT,MAA4B,CACnC7F,SAAU0N,GACVzN,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1C/B,OAAQ,SAACG,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAUwN,GACVvN,UAAWwK,GAAsB3G,OAAOG,EAAQ4B,GAChDK,cAAegE,GAAkBpG,OAAO+B,KAE1CT,WAAY,kBAAMzK,QAAQoJ,QAAQ,CAAEvD,KAAM,O,wqFC3DrC,IAAMqN,GAAgBhO,cAAH,MAebiO,GAAejO,cAAH,KAQrBgO,IAGSE,GAAiBlO,cAAH,KAWvBgO,IAGSG,GAAiBnO,cAAH,KAQvBgO,IAGSI,GAA2BpO,cAAH,KAWjCgO,IAGSK,GAAcrO,cAAH,KAQpBgO,IAGSM,GAActO,cAAH,KAQpBgO,IAGSO,GAAcvO,cAAH,KAQpBgO,IAGSQ,GAAexO,cAAH,KAQrBgO,IAGSS,GAAczO,cAAH,KAQpBgO,I,qkGCnHG,IAAMU,GAAwB1O,cAAH,KAe9BoM,GACA4B,IAGSW,GAAuB3O,cAAH,KAQ7B0O,IAGSE,GAAyB5O,cAAH,KAW/B0O,IAGSG,GAAyB7O,cAAH,KAQ/B0O,IAGSI,GAAmC9O,cAAH,KAWzC0O,IAGSK,GAAsB/O,cAAH,KAQ5B0O,IAGSM,GAAsBhP,cAAH,KAQ5B0O,IAGSO,GAAsBjP,cAAH,KAQ5B0O,IAGSQ,GAAuBlP,cAAH,KAQ7B0O,IAGSS,GAAsBnP,cAAH,KAQ5B0O,IC7DWU,GAlDgB,CAC7B9J,OAAQ,SAAClB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAU4O,GACV3O,UAAWwK,GAAsBtF,OAAOlB,EAAQ4B,GAChDK,cAAegE,GAAkB/E,OAAOU,KAE1CR,OAAQ,SAACpB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAUgP,GACV/O,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1CP,WAAY,kBAAM3K,QAAQoJ,QAAQ,CAAEvD,KAAM,MAC1CuE,QAAS,SAACd,EAAQ4B,GAAT,MAA4B,CACnClE,MAAO8M,GACPxO,UAAWwK,GAAsB1F,QAAQd,EAAQ4B,GACjDK,cAAegE,GAAkBnF,QAAQc,KAE3CZ,QAAS,SAAChB,EAAQ4B,GAAT,MAA4B,CACnClE,MAAO+M,GACPzO,UAAWwK,GAAsBxF,QAAQhB,EAAQ4B,GACjDK,cAAegE,GAAkBjF,QAAQY,KAE3CX,iBAAkB,SAACjB,EAAQ4B,GAAT,MAA4B,CAC5ClE,MAAOgN,GACP1O,UAAWwK,GAAsBvF,iBAAiBjB,EAAQ4B,GAC1DK,cAAegE,GAAkBhF,iBAAiBW,KAEpDb,OAAQ,SAACf,EAAQ4B,GAAT,MAA4B,CAClClE,MAAO6M,GACPvO,UAAWwK,GAAsBzF,OAAOf,EAAQ4B,GAChDK,cAAegE,GAAkBlF,OAAOa,KAE1CN,OAAQ,SAACtB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAU8O,GACV7O,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1CL,QAAS,SAACvB,EAAQ4B,GAAT,MAA4B,CACnC7F,SAAU+O,GACV9O,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1C/B,OAAQ,SAACG,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAU6O,GACV5O,UAAWwK,GAAsB3G,OAAOG,EAAQ4B,GAChDK,cAAegE,GAAkBpG,OAAO+B,KAE1CT,WAAY,kBAAMzK,QAAQoJ,QAAQ,CAAEvD,KAAM,O,4BC5CtC0O,GAAkB,SAAC/T,EAAKgE,GAC5B,OAAOhE,EAAIgU,QAAQ,SAAW,EAAvB,UAA8BhU,EAA9B,YAAqCgE,GAAUhE,GAGlDiU,GAAuB,SAACC,EAAOC,GACnC,IAAMC,EAAIC,KAAKC,IAAIJ,EAAQ,IAAKC,EAAS,KACzC,OAAIC,GAAK,EAAU,CAAEF,QAAOC,UACrB,CACLD,MAAOA,EAAQE,EACfD,OAAQA,EAASC,IAIRG,GAAS,uCAAG,aAAiCpT,EAAUC,GAA3C,2BAAAyC,EAAA,6DAASnF,EAAT,EAASA,MAAT,EAAgB8V,KAASnP,EAAzB,iCACjBoP,EAAW,GACXC,EAAM,IAAIC,YAAS,IACnBC,EAAiB3T,EAAkBoE,EAAMlE,EAAUC,GACzDsT,EAAIG,WAAW,CACbC,WAAY,GACZC,QAAS,CACPC,KAAM,IACNC,MAAO,KAETC,SAAS,CACP,IAAIC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,yDACNC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcC,QAE3B,IAAIP,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,4FACLC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcC,QAE3B,IAAIP,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,+CACLC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcC,QAE3B,IAAIP,aAAU,CACZD,SAAU,GACVM,UAAWC,iBAAcC,QAE3B,IAAIP,aAAU,CACZD,SAAU,GACVM,UAAWC,iBAAcC,QAE3B,IAAIP,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,6EACLC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcE,SAE3B,IAAIR,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,IACNE,KAAMd,KAGVe,UAAWC,iBAAcC,QAE3B,IAAIP,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,qRACLC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcG,KACzBC,OAAQ,CACNC,OAAQ,CACNC,MAAO,OACPC,MAAO,EACPjY,MAAO,SACPwX,KAAM,MAIZ,IAAIJ,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,wCACLE,KAAM,MAGVC,UAAWC,iBAAcC,QAE3B,IAAIP,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,0FAAD,OAAsBT,EAAe,sBAArC,aAAgDvP,EAAKhI,KAArD,aAA8DgI,EAAK4Q,YAAc,GAAjF,KACJV,KAAMd,KAGVe,UAAWC,iBAAcG,OAE3B,IAAIT,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,yCAAD,OAAapV,OAAOiW,SAApB,MACJX,KAAMd,KAGVe,UAAWC,iBAAcG,OAE3B,IAAIT,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,wHAAD,OAA2BhQ,EAAK8Q,YAAc9Q,EAAK8Q,YAAY9Y,KAAO,IAC1EkY,KAAMd,KAMVoB,OAAQ,CACNC,OAAQ,CACNC,MAAO,OACPC,MAAO,EACPjY,MAAO,SACPwX,KAAM,IAGVC,UAAWC,iBAAcG,OAE3B,IAAIT,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,mFACLE,KAAM,MAGVC,UAAWC,iBAAcC,QAE3B,IAAIP,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,4EACLE,KAAMd,KAMVoB,OAAQ,CACNC,OAAQ,CACNC,MAAO,OACPC,MAAO,EACPjY,MAAO,SACPwX,KAAM,IAGVC,UAAWC,iBAAcG,OAE3B,IAAIT,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,mRACLE,KAAM,MAGVC,UAAWC,iBAAcE,SAE3B,IAAIR,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,kLACLE,KAAMd,KAGVe,UAAWC,iBAAcG,OAE3B,IAAIT,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,2tBACLE,KAAMd,KAGVe,UAAWC,iBAAcG,OAE3B,IAAIT,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,60BACLE,KAAMd,KAGVe,UAAWC,iBAAcG,OAE3B,IAAIT,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,iXACLE,KAAMd,KAGVe,UAAWC,iBAAcG,OAE3B,IAAIT,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,0VACLE,KAAMd,KAGVe,UAAWC,iBAAcG,QA5MrB,mBA8MH,CAAC,GAAI,IAAIlW,KACV,kBACE,IAAIyV,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,IACNE,KAAMd,KAGVe,UAAWC,iBAAcC,YAvNzB,CA0NN,IAAIP,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,mFACLE,KAAMd,EACNa,MAAM,KAGVO,OAAQ,CACNC,OAAQ,CACNC,MAAO,OACPC,MAAO,EACPjY,MAAO,SACPwX,KAAM,IAGVC,UAAWC,iBAAcG,OAE3B,IAAIT,aAAU,CACZE,KAAM,sGAENG,UAAWC,iBAAcG,OAE3B,IAAIT,aAAU,CACZE,KAAM,sGAENG,UAAWC,iBAAcG,OAE3B,IAAIT,aAAU,CACZE,KAAM,GACNG,UAAWC,iBAAcC,QAE3B,IAAIP,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,kRACNC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcG,OAE3B,IAAIT,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,8bACNC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcG,QA5QrB,YA8QH,CAAC,GAAI,GAAI,GAAI,GAAI,IAAIlW,KACtB,kBACE,IAAIyV,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,IACNE,KAAMd,KAGVe,UAAWC,iBAAcC,YAvRzB,CA0RN,IAAIP,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,iKACNC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcG,OAE3B,IAAIT,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,IACNE,KAAMd,KAGVe,UAAWC,iBAAcC,QAE3B,IAAIP,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,wMACNC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcG,WAIzBQ,EAAW1X,EAAMG,QAAO,SAACC,GAAD,OAA4E,IAAlEA,EAAKzB,KAAK6Q,cAAchP,OAAO,iCAnUhD,KAoUFT,EApUE,SAqUfe,QAAQC,IACZ2W,EAAS1W,IAAT,uCAAa,WAAO2W,GAAP,eAAAxS,EAAA,sEACOkQ,GAChBsC,EAAQC,aACJrT,EAAgBoT,EAAQC,aACxBD,EAAQrW,IAAI0J,SAAS,SACrB2M,EAAQrW,IACRiD,EAAgBoT,EAAQrW,IAC5B5C,EAAU+E,IAPD,cACLnC,EADK,yBAUJ,IAAIR,QAAJ,uCAAY,WAAOoJ,EAASK,GAAhB,qBAAApF,EAAA,sEACG0S,MAAMvW,EAAK,CAC7BwW,KAAM,KACNC,OAAQ,MACRC,KAAM,OACNC,YAAa,SAEZ7W,MAAK,SAACuF,GAAD,OAAUA,EAAKjG,UACpBU,MAAK,SAACV,GAAD,OAAUA,KARD,cACXO,EADW,OASXiX,EAAS,IAAIC,WACbC,EAAM,IAAIC,MAEhBH,EAAOI,UAAY,WACjBF,EAAIG,IAAM/W,IAAIC,gBAAgBR,GAC9BmX,EAAII,OAAS,WACXtO,EAAQ,CACNuO,KAAMP,EAAOtW,OACb4T,MAAO4C,EAAIM,aACXjD,OAAQ2C,EAAIO,iBAGhBP,EAAIQ,QAAU,SAAC/W,GACb0I,EAAO1I,KAtBM,SAyBK9B,EAAe,CAACkB,GAAQ,KAzB7B,OAyBXW,EAzBW,OAyBoC,GACrDsW,EAAOW,cAAcjX,GA1BJ,4CAAZ,0DAVI,2CAAb,wDADI,OAwCE,SAACC,GAEP,OADAC,QAAQC,IAAIF,GACL,MA/WY,kDAiXrB,KAjXqB,eAoUjBtB,EApUiB,OAmXvByV,EAAIG,WAAW,CACbE,QAAS,CACPC,KAAM,IACNC,MAAO,KAETC,SAAS,CACP,IAAIC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,mHACLC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcC,MACzB8B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,mDACLC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcC,MACzB8B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,IACLC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcE,OACzB6B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,uJACLC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAMhQ,EAAKhI,MAAQ,GACnBkY,KAAMd,KAGVe,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAMhQ,EAAK4Q,YAAc,GACzBV,KAAMd,KAGVe,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,kEAAD,OAAkBT,EAAe,uBACrCU,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,iNACLC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcE,OACzB6B,QAAS,CACPC,MAAO,OAGX,IAAIC,SAAM,CACRC,aAAc,CAAC,IAAK,IAAM,IAAM,IAAM,MACtCC,KAAK,CACH,IAAIC,YAAS,CACX1D,OAAQ,CACNA,OAAQ,IACR2D,KAAMC,cAAWC,SAEnB9C,SAAU,CACR,IAAI+C,aAAU,CACZ/D,MAAO,CACLqB,KAAM,IACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,uBACLE,KAAMd,UAMhB,IAAIwD,aAAU,CACZ/D,MAAO,CACLqB,KAAM,KACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,2EACLE,KAAMd,UAMhB,IAAIwD,aAAU,CACZ/D,MAAO,CACLqB,KAAM,KACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,qBACLE,KAAMd,UAMhB,IAAIwD,aAAU,CACZ/D,MAAO,CACLqB,KAAM,IACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,kDACLE,KAAMd,UAMhB,IAAIwD,aAAU,CACZ/D,MAAO,CACLqB,KAAM,KACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,wFACLE,KAAMd,UAMhB,IAAIwD,aAAU,CACZ/D,MAAO,CACLqB,KAAM,KACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,+DACLE,KAAMd,cA7GlB,mBAqHCG,EAAe,iHAAuBlV,KAAI,SAAC2Y,EAAWC,GACvD,OAAO,IAAIT,YAAS,CAClB1D,OAAQ,CACNA,OAAQ,IACR2D,KAAMC,cAAWC,SAEnB9C,SAAU,CACR,IAAI+C,aAAU,CACZ/D,MAAO,CACLqB,KAAM,IACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,GAAD,OAAKiD,EAAQ,GACjB/C,KAAMd,UAMhB,IAAIwD,aAAU,CACZ/D,MAAO,CACLqB,KAAM,KACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAMgD,EAAU,4EAChB9C,KAAMd,UAMhB,IAAIwD,aAAU,CACZ/D,MAAO,CACLqB,KAAM,KACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAMgD,EAAU,sBAChB9C,KAAMd,UAMhB,IAAIwD,aAAU,CACZ/D,MAAO,CACLqB,KAAM,IACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAMgD,EAAU,4EAChB9C,KAAMd,UAMhB,IAAIwD,aAAU,CACZ/D,MAAO,CACLqB,KAAM,KACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAMgD,EAAU,yFAChB9C,KAAMd,UAMhB,IAAIwD,aAAU,CACZ/D,MAAO,CACLqB,KAAM,KACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,GACLE,KAAMd,qBA3UpB,mBAsVH,CAAC,IAAI/U,KACN,kBACE,IAAIyV,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,IACNE,KAAMd,KAGVe,UAAWC,iBAAcC,YA/VzB,CAkWN,IAAIP,aAAU,CACZD,SAAUjW,EAAOS,KAAI,SAACC,GACpB,IAAM4Y,EAActE,GAAqBtU,EAAMuU,MAAOvU,EAAMwU,QAE5D,OADYqE,SAAMC,SAAS/D,EAAK/U,EAAMwX,KAAMoB,EAAYrE,MAAOqE,EAAYpE,cArWzE,YAyWH,CAAC,IAAIzU,KACN,kBACE,IAAIyV,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,IACNE,KAAMd,KAGVe,UAAWC,iBAAcC,MACzB8B,QAAS,CACPC,MAAO,WApXT,CAwXN,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,oPACNE,KAAMd,KAGVe,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,QAjYL,YAoYH,CAAC,IAAI/X,KACN,kBACE,IAAIyV,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,IACNE,KAAMd,KAGVe,UAAWC,iBAAcC,MACzB8B,QAAS,CACPC,MAAO,WA/YT,CAmZN,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,gEACNE,KAAMd,KAGVe,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KACE,uVAIFE,KAAMd,KAGVe,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,QA5aL,YA+aH,CAAC,IAAI/X,KACN,kBACE,IAAIyV,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,IACNE,KAAMd,KAGVe,UAAWC,iBAAcC,MACzB8B,QAAS,CACPC,MAAO,WA1bT,CA8bN,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,iKACNE,KAAMd,EACNa,MAAM,KAGVE,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,+LACNE,KAAMd,EACNa,MAAM,KAGVE,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,WAMf/C,EAAIG,WAAW,CACbE,QAAS,CACPC,KAAM,IACNC,MAAO,KAETC,SAAS,CACP,IAAIC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,mHACLC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcC,MACzB8B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,mDACLC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcC,MACzB8B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,IACLC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcE,OACzB6B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,uJACLC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAMhQ,EAAKhI,MAAQ,GACnBkY,KAAMd,KAGVe,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAMhQ,EAAK4Q,YAAc,GACzBV,KAAMd,KAGVe,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,8XACLC,MAAM,EACNC,KAAMd,KAGVe,UAAWC,iBAAcE,OACzB6B,QAAS,CACPC,MAAO,OAGX,IAAIC,SAAM,CACRC,aAAc,CAAC,IAAK,IAAM,IAAM,IAAM,MACtCC,KAAK,CACH,IAAIC,YAAS,CACX1D,OAAQ,CACNA,OAAQ,IACR2D,KAAMC,cAAWC,SAEnB9C,SAAU,CACR,IAAI+C,aAAU,CACZ/D,MAAO,CACLqB,KAAM,KACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,mDACLE,KAAMd,UAMhB,IAAIwD,aAAU,CACZ/D,MAAO,CACLqB,KAAM,KACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,sHACLE,KAAMd,UAMhB,IAAIwD,aAAU,CACZ/D,MAAO,CACLqB,KAAM,KACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAK,yIACLE,KAAMd,cAvDlB,mBA+DCpP,EAAKqT,QAAQhZ,KAAI,SAACiZ,EAAQL,GAC3B,OAAO,IAAIT,YAAS,CAClB1D,OAAQ,CACNA,OAAQ,IACR2D,KAAMC,cAAWC,SAEnB9C,SAAU,CACR,IAAI+C,aAAU,CACZ/D,MAAO,CACLqB,KAAM,KACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAMsD,EAAOtb,MAAQ,GACrBkY,KAAMd,UAMhB,IAAIwD,aAAU,CACZ/D,MAAO,CACLqB,KAAM,KACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,GACNE,KAAMd,UAMhB,IAAIwD,aAAU,CACZ/D,MAAO,CACLqB,KAAM,IACNjW,KAAM4Y,aAAUC,KAElBC,cAAe,SACflD,SAAU,CACR,IAAIC,aAAU,CACZK,UAAWC,iBAAcE,OACzBT,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,IACNE,KAAMd,qBAlNpB,mBA6NH,CAAC,IAAI/U,KACN,kBACE,IAAIyV,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,IACNE,KAAMd,KAGVe,UAAWC,iBAAcC,YAtOzB,CAyON,IAAIP,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,iKACNE,KAAMd,EACNa,MAAM,KAGVE,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,+LACNE,KAAMd,EACNa,MAAM,KAGVE,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,QAhQL,YAoQH,CAAC,GAAI,IAAI/X,KACV,kBACE,IAAIyV,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,IACNE,KAAMd,KAGVe,UAAWC,iBAAcC,MACzB8B,QAAS,CACPC,MAAO,WA/QT,YAmRH,CAAC,IAAI/X,KACN,kBACE,IAAIyV,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,IACNE,KAAMd,KAGVe,UAAWC,iBAAcC,MACzB8B,QAAS,CACPC,MAAO,KAET5B,OAAQ,CACNC,OAAQ,CACNC,MAAO,OACPC,MAAO,EACPjY,MAAO,SACPwX,KAAM,WArSV,YA0SH,CAAC,GAAI,IAAI7V,KACV,kBACE,IAAIyV,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,IACNE,KAAMd,KAGVe,UAAWC,iBAAcC,MACzB8B,QAAS,CACPC,MAAO,WArTT,CAyTN,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,+KACNE,KAAMd,KAGVe,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KACE,uVAIFE,KAAMd,KAGVe,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,oIACNE,KAAMd,KAGVe,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,sCACNE,KAAMd,EACNa,MAAM,KAGVE,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,QA3WL,YA8WH,CAAC,IAAI/X,KACN,kBACE,IAAIyV,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,IACNE,KAAMd,KAGVe,UAAWC,iBAAcC,MACzB8B,QAAS,CACPC,MAAO,WAzXT,CA6XN,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,iKACNE,KAAMd,EACNa,MAAM,KAGVE,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,OAGX,IAAItC,aAAU,CACZD,SAAU,CACR,IAAIE,WAAQ,CACVC,KAAM,+LACNE,KAAMd,EACNa,MAAM,KAGVE,UAAWC,iBAAcG,KACzB4B,QAAS,CACPC,MAAO,WA5uCQ,kBAivChBmB,UAAOC,OAAOnE,GAAK5U,MAAK,SAACgZ,GAC9B,IAAM9Y,EAAMC,OAAOC,IAAIC,gBAAgB2Y,GACvCC,KAAOC,OAAO,MACd,IAAM3b,EAAOqD,EAAgB,sBAAD,OACnB2E,EAAKhI,KAAK2D,UAAU,EAAG,IAAIrD,QAAQ,IAAK,IADrB,yBAC+Bob,OAASE,OAAO,oBAD/C,UAM5B,MAAO,CACL5b,KAAMA,EACN0B,QALW,IAAIqB,KAAK,CAAC0Y,GAAMzb,EAAM,CACjCiC,KAAM,eAKNU,IAAKA,OA7vCc,4CAAH,0DCzBhBuD,GAAWC,yBAAe,CAC9BC,IAAKf,IAGDgB,GAAWC,YAAU,uCAAC,WAAOC,EAAP,oBAAAC,EAAA,6DAAYC,EAAZ,EAAYA,QAAZ,SACNC,KADM,cACpBC,EADoB,yBAGnB,CACLF,QAAQ,2BACHA,GADE,IAELG,cAAeD,EAAK,iBAAaA,GAAU,OANrB,2CAAD,yDAWZ,OAAIG,eAAa,CAC9BC,KAAMV,GAASc,OAAOjB,IACtBc,MAAO,IAAIC,kBClBE,YAACuC,GACd,OAAOqS,GAAoB1S,MAAM,CAC/BA,MAAOyI,GACPnK,UAAU,eAAM+B,GAChBmB,YAAa,eACbjD,QAAS,SAACxE,GACRyE,MAAMzE,O,mBCJNgD,GAAW4V,aAAiB,CAChC1V,IAAKV,IAGDqW,GAAWzV,YAAU,uCAAC,WAAOC,EAAP,oBAAAC,EAAA,6DAAYC,EAAZ,EAAYA,QAAZ,SACNC,KADM,cACpBC,EADoB,yBAGnB,CACLF,QAAQ,2BACHA,GADE,IAELG,cAAeD,EAAK,iBAAaA,GAAU,OANrB,2CAAD,yDAWZ,OAAIG,eAAa,CAC9BC,KAAMgV,GAAS5U,OAAOjB,IACtBc,MAAO,IAAIC,kB,0ZCpBN,IAAM+U,GAAkB3U,IAAH,MAiBb,YAACmC,GACd,OAAOyS,GAAiB1U,OAAO,CAC7BC,SAAUwU,GACVvU,UAAU,eAAM+B,GAChB9B,QAAS,SAACxE,GACRyE,MAAMzE,O,oMCtBL,IAAMgZ,GAAkB7U,IAAH,MAUb,YAACmC,GACd,OAAOyS,GAAiB1U,OAAO,CAC7BC,SAAU0U,GACVzU,UAAU,eAAM+B,GAChB9B,QAAS,SAACxE,GACRyE,MAAMzE,O,4WCfZ,IAAMiZ,GAAgB9U,IAAH,MAYJ,YAACmC,GACd,OAAOtC,EAAyBK,OAAO,CACrCC,SAAU2U,GACV1U,UAAU,eAAM+B,GAChB9B,QAAS,SAACxE,GACRyE,MAAMzE,O,ggBCjBZ,IAAMkZ,GAAgB/U,IAAH,MA6BJ,YAACmC,GACd,OAAOtC,EAAyBK,OAAO,CACrCC,SAAU4U,GACV3U,UAAU,eAAM+B,GAChB9B,QAAS,SAACxE,GACRyE,MAAMzE,O,2tLC1BL,IAAMmZ,GAA+BhV,cAAH,KAwDrCmM,GACAE,GACAD,GACAE,GACAC,GACAC,GACAC,IAGSwI,GAA8BjV,cAAH,KAQpCgV,IAGSE,GAAgClV,cAAH,KAgBtCgV,IAGSG,GAAoCnV,cAAH,MAMjCoV,GAAoCpV,cAAH,KAgB1CgV,IAGSK,GAAwCrV,cAAH,MAMrCsV,GAAgCtV,cAAH,KAatCgV,IAGSO,GAA0CvV,cAAH,KAgBhDgV,IAGSQ,GAA6BxV,cAAH,KAQnCgV,IAGSS,GAAyCzV,cAAH,KAQ/CgV,IAGSU,GAA6B1V,cAAH,KAWnCgV,IAGSW,GAAyC3V,cAAH,KAW/CgV,IAGSY,GAA6B5V,cAAH,KAQnCgV,IAGSa,GAA8B7V,cAAH,KAQpCgV,IAGSc,GAA6B9V,cAAH,KAQnCgV,ICzPW,YAAC7S,GACd,OAAOqS,GAAoB1S,MAAM,CAC/BA,MAAOmT,GACP7U,UAAU,eAAM+B,GAChBmB,YAAa,eACbjD,QAAS,SAACxE,GACRyE,MAAMzE,OCEL,SAAeka,GAAtB,mC,8CAAO,WAA+BC,GAA/B,mCAAA7W,EAAA,yDAAwCnF,EAAxC,+BAAgD,IAC/CM,EAAWN,EAAMG,QAAO,SAACC,GAAD,OAAUA,EAAKC,mBAAmBqB,SAElDb,OAHT,yCAII,IAJJ,cAOCob,EAAiB3b,EAASU,KAAI,SAACZ,GAAD,OAAUA,EAAKC,WAP9C,SAUK6b,GAAe,CAAEC,QAAS5Y,EAAU6Y,YAAaJ,EAAShc,MAAOic,IAVtE,uBASqBI,EATrB,EASH1V,KAAQuV,eATL,kBAYEG,EAAUrb,KAAI,SAACZ,GAAD,MAAW,CAC9BzB,KAAMyB,EAAKkc,SACXC,UAAWnc,EAAKoc,OAChBC,OAAQrc,EAAKwM,GACbtL,IAAI,OAAD,OAASlB,EAAKsc,aACjB9E,aAAcxX,EAAKwX,aAAL,oBAAiCxX,EAAKsc,aAAgB,KACpEV,QAAS5b,EAAK4b,QACd9Z,IAAK9B,EAAK8B,IAAM9B,EAAK8B,IAAI2F,MAAM,KAAK8U,MAAMnN,cAAgB,KAC1DqH,KAAMzW,EAAKwc,YACXtS,OAAQ,WArBL,6C,sBAyBA,SAAeuS,GAAtB,mC,8CAAO,WAA+Bb,GAA/B,+CAAA7W,EAAA,yDAAwCnF,EAAxC,+BAAgD,GAAI8c,EAApD,+BAA+D,GAC9Dxc,EAAWN,EAAMG,QAAO,SAACC,GAAD,OAAUA,EAAKC,mBAAmBqB,QAC1Dqb,EAAc/c,EAAMG,QAAO,SAACC,GAAD,OAAUA,EAAKqc,UAC1CO,EAAcF,EAAS3c,QAAO,SAACC,GAAD,OAAW2c,EAAY/b,KAAI,SAACZ,GAAD,OAAUA,EAAKqc,UAAQzR,SAAS5K,EAAKqc,WAE9FR,EAAiB3b,EAASU,KAAI,SAACZ,GAAD,OAAUA,EAAKC,WAC7C4c,EAAoBD,EAAYhc,KAAI,SAACZ,GAAD,OAAUA,EAAKqc,UAErDS,EAAiB,GACjBC,EAAoB,IAEpBlB,EAAepb,OAXd,kCAcOqb,GAAe,CAAEC,QAAS5Y,EAAU6Y,YAAaJ,EAAShc,MAAOic,IAdxE,iBAauBI,EAbvB,EAaD1V,KAAQuV,eAGVgB,EAAiBb,EAAUrb,KAAI,SAACZ,GAC9B,MAAO,CACLzB,KAAMyB,EAAKkc,SACXC,UAAWnc,EAAKoc,OAChBC,OAAQrc,EAAKwM,GACbtL,IAAI,OAAD,OAASlB,EAAKsc,aACjB9E,aAAcxX,EAAKwX,aAAL,oBAAiCxX,EAAKsc,aAAgB,KACpEV,QAAS5b,EAAK4b,QACd9Z,IAAK9B,EAAK8B,IAAM9B,EAAK8B,IAAI2F,MAAM,KAAK8U,MAAMnN,cAAgB,KAC1DqH,KAAMzW,EAAKwc,YACXtS,OAAQ,UA1BT,YA+BD0S,EAAYnc,OA/BX,kCAgCGuc,GAAe,CAAE7P,IAAK0P,IAhCzB,QAkCHE,EAAoBH,EAAYhc,KAAI,SAACZ,GAAD,mBAAC,eAChCA,GAD+B,IAElCkK,OAAQ,cApCP,uDAwCM4S,GAxCN,YAwCyBC,KAxCzB,6C,sBA2CP,8CAAe,WAAOvc,EAAM6B,EAAU2H,GAAvB,iEAAAjF,EAAA,yDACLwB,EAAuByD,EAAvBzD,KAAMyH,EAAiBhE,EAAjBgE,aAEG,SAAb3L,EAHS,sBAIH7B,EAJG,cAKJyc,KALI,SAoEJC,KApEI,sBAMH3W,EAAK4W,WACP5W,EAAK4W,SAAW,CACdjS,OAAQ3E,EAAK4W,SAASjS,SAGtB3E,EAAK6W,iBACP7W,EAAK6W,eAAiB7W,EAAK6W,eAAe5Q,GAAK,CAAEA,GAAIjG,EAAK6W,eAAe5Q,IAAO,MAE9EjG,EAAK8W,cACP9W,EAAK8W,YAAc9W,EAAK8W,YAAY7Q,GAAK,CAAEA,GAAIjG,EAAK8W,YAAY7Q,IAAO,MAErEjG,EAAK+W,aACP/W,EAAK+W,WAAa/W,EAAK+W,WAAW9Q,GAAK,CAAEA,GAAIjG,EAAK+W,WAAW9Q,IAAO,MAElEjG,EAAKgX,WACPhX,EAAKgX,SAAWhX,EAAKgX,SAAS/Q,GAAK,CAAEA,GAAIjG,EAAKgX,SAAS/Q,IAAO,MAE5DjG,EAAKiX,gBACPjX,EAAKiX,cAAgBjX,EAAKiX,cAAchR,GAAK,CAAEA,GAAIjG,EAAKiX,cAAchR,IAAO,MAE3EjG,EAAKkX,kBACPlX,EAAKmX,aAAenX,EAAKkX,gBAAgB7c,KAAI,SAAC4L,GAAD,MAAS,CAAEA,WAEtDjG,EAAK3G,MA7BF,wBA8BL2G,EAAK3G,MAAQ2G,EAAK3G,MAAMgB,KAAI,SAACZ,GAE3B,OADAA,EAAKzB,KAAOqD,EAAgB5B,EAAKzB,MAC1ByB,KAhCJ,UAkCcL,EAAe4G,EAAK3G,OAlClC,eAkCL2G,EAAK3G,MAlCA,iBAmCc+b,GAAgBtZ,EAAUkE,EAAK3G,OAnC7C,QAmCL2G,EAAK3G,MAnCA,mBAqCH2G,EAAKoX,iBArCF,kCA4CKC,GAAU,CAAE/O,MAAO,CAAErC,GAAIjG,EAAKoX,oBA5CnC,iBAyCSpf,EAzCT,EAuCHgI,KACEA,KACE+F,KAAQ/N,KAIdgI,EAAKsX,qBAAuBtf,EA7CvB,YA+CHgI,EAAKuX,OA/CF,kCAsDKC,GAAU,CAAElP,MAAO,CAAErC,GAAIjG,EAAKuX,UAtDnC,iBAmDSE,EAnDT,EAiDHzX,KACEA,KACE+F,KAAQ0R,iBAIdzX,EAAK0X,WAAaD,EAvDb,YAyDHzX,EAAKmP,KAzDF,wBA0DLnP,EAAKmP,KAAOnP,EAAKmP,KAAK9U,KAAI,SAACZ,GAEzB,OADAA,EAAKzB,KAAOqD,EAAgB5B,EAAKzB,MAC1ByB,KA5DJ,UA8DaL,EAAe4G,EAAKmP,MA9DjC,eA8DLnP,EAAKmP,KA9DA,iBA+DaiG,GAAgB,YAAapV,EAAKmP,MA/D/C,QA+DLnP,EAAKmP,KA/DA,sDAqEHnP,EAAK4W,WACP5W,EAAK4W,SAAW,CACdjS,OAAQ3E,EAAK4W,SAASjS,OACtBrB,OAAQtD,EAAK4W,SAAStT,OACtBuB,OAAQ7E,EAAK4W,SAAL,OACR7R,OAAQ/E,EAAK4W,SAAS7R,SAGtB/E,EAAK6W,iBACP7W,EAAK6W,eACH7W,EAAK6W,gBAAkBpP,EAAaoP,eAAiB,CAAE5Q,GAAIjG,EAAK6W,eAAe5Q,IAAO,MAEtFjG,EAAK8W,cACP9W,EAAK8W,YAAc9W,EAAK8W,YAAY7Q,GAAK,CAAEA,GAAIjG,EAAK8W,YAAY7Q,IAAO,MAErEjG,EAAKiX,gBACPjX,EAAKiX,cAAgBjX,EAAKiX,cAAchR,GAAK,CAAEA,GAAIjG,EAAKiX,cAAchR,IAAO,MAE3EjG,EAAKgX,WACPhX,EAAKgX,SAAWhX,EAAKgX,SAAS/Q,GAAK,CAAEA,GAAIjG,EAAKgX,SAAS/Q,IAAO,MAE5DjG,EAAK+W,aACP/W,EAAK+W,WAAa/W,EAAK+W,YAActP,EAAasP,WAAa,CAAE9Q,GAAIjG,EAAK+W,WAAW9Q,IAAO,OAE1FjG,EAAKoX,iBA7FF,kCAoGKC,GAAU,CAAE/O,MAAO,CAAErC,GAAIjG,EAAKoX,oBApGnC,iBAiGSpf,EAjGT,EA+FHgI,KACEA,KACE+F,KAAQ/N,KAIdgI,EAAKsX,qBAAuBtf,EArGvB,YAuGHgI,EAAKuX,OAvGF,kCA8GKC,GAAU,CAAElP,MAAO,CAAErC,GAAIjG,EAAKuX,UA9GnC,iBA2GSE,EA3GT,EAyGHzX,KACEA,KACE+F,KAAQ0R,iBAIdzX,EAAK0X,WAAaD,EA/Gb,WAiHHzX,EAAKkX,kBACPlX,EAAKmX,aAAenX,EAAKkX,gBAAgB7c,KAAI,SAAC4L,GAAD,MAAS,CAAEA,WAEtDjG,EAAK3G,MApHF,wBAqHL2G,EAAK3G,MAAQ2G,EAAK3G,MAAMgB,KAAI,SAACZ,GAE3B,OADAA,EAAKzB,KAAOqD,EAAgB5B,EAAKzB,MAC1ByB,KAvHJ,UAyHcL,EAAe4G,EAAK3G,OAzHlC,eAyHL2G,EAAK3G,MAzHA,iBA0Hc6c,GAAgBpa,EAAUkE,EAAK3G,MAAOoO,EAAapO,OA1HjE,QA0HL2G,EAAK3G,MA1HA,mBA4HH2G,EAAKmP,KA5HF,wBA6HLnP,EAAKmP,KAAOnP,EAAKmP,KAAK9U,KAAI,SAACZ,GAEzB,OADAA,EAAKzB,KAAOqD,EAAgB5B,EAAKzB,MAC1ByB,KA/HJ,UAiIaL,EAAe4G,EAAKmP,MAjIjC,eAiILnP,EAAKmP,KAjIA,iBAkIa+G,GAAgB,YAAalW,EAAKmP,KAAM1H,EAAa0H,MAlIlE,QAkILnP,EAAKmP,KAlIA,8DA4II,SAAbrT,EA5IS,uBA6IH7B,EA7IG,cA8IJyc,KA9II,UAiKJC,KAjKI,wBA+IF3W,EAAKkD,SA/IH,uEAqJGyU,GAAa,CACrBC,MAAO5X,EAAK4X,MACZ1U,SAAUlD,EAAKkD,SACflL,KAAMgI,EAAKhI,KACX6f,MAAO7X,EAAK6X,MACZ9T,KAAM/D,EAAK+D,OA1JN,wBAoJiB+T,EApJjB,EAoJL9X,KAAQ2X,aASV3X,EAAK8X,KAAOA,EAAK7R,GA7JV,iCAkKD8R,EAAS/X,EAAK8X,KACd5U,EAAWlD,EAAKkD,SAClB8U,EAAW,GAGVD,GAAW7U,EAvKT,yDA2KF6U,IAAU7U,EA3KR,mCA8KKyU,GAAa,CACrB1R,GAAIjG,EAAK+X,OACTH,MAAO5X,EAAK4X,MACZ1U,SAAUlD,EAAKkD,SACflL,KAAMgI,EAAKhI,KACX6f,MAAO7X,EAAK6X,MACZ9T,KAAM/D,EAAK+D,KACXkU,OAAQjY,EAAKiY,SArLV,iBA6KmBH,EA7KnB,EA6KH9X,KAAQ2X,aAWVK,EAAWF,EAxLN,aA2LHC,EA3LG,oCA8LKG,GAAa,CACrBjS,GAAIjG,EAAK8X,KACTF,MAAO5X,EAAK4X,MACZ1U,SAAUlD,EAAKkD,SACflL,KAAMgI,EAAKhI,KACX6f,MAAO7X,EAAK6X,MACZ9T,KAAM/D,EAAK+D,KACXkU,OAAQjY,EAAKiY,SArMV,kBA6LmBH,EA7LnB,EA6LH9X,KAAQkY,aAWVF,EAAWF,EAxMN,gBA0MP9X,EAAK8X,KAAOE,EAAS/R,GA1Md,wEAmNI,YAAbnK,EAnNS,uBAoNH7B,EApNG,cAqNJ0c,KArNI,0BAsNDoB,EAAS/X,EAAK8X,KACd5U,EAAWlD,EAAKkD,SAClB8U,EAAW,GAGVD,GAAW7U,EA3NT,2DA+NF6U,IAAU7U,EA/NR,oCAkOKyU,GAAa,CACrB1R,GAAIjG,EAAK+X,OACTH,MAAO5X,EAAK4X,MACZ1U,SAAUlD,EAAKkD,SACflL,KAAMgI,EAAKhI,KACX6f,MAAO7X,EAAK6X,MACZ9T,KAAM/D,EAAK+D,OAxOR,kBAiOmB+T,EAjOnB,EAiOH9X,KAAQ2X,aAUVK,EAAWF,EA3ON,aA8OHC,EA9OG,oCAiPKG,GAAa,CACrBjS,GAAIjG,EAAK8X,KACTF,MAAO5X,EAAK4X,MACZ1U,SAAUlD,EAAKkD,SACflL,KAAMgI,EAAKhI,KACX6f,MAAO7X,EAAK6X,QAtPT,kBAgPmBC,EAhPnB,EAgPH9X,KAAQkY,aASVF,EAAWF,EAzPN,gBA2PP9X,EAAKmY,QAAUnY,EAAKmY,QAChBnY,EAAKmY,QAAQ9d,KAAI,SAAC+d,GAAD,MAAyB,kBAARA,EAAmB,CAAEnS,GAAImS,EAAInS,IAAO,CAAEA,GAAImS,MAC5E,GACJpY,EAAK8X,KAAOE,EAAS/R,GA9Pd,8FAuQN,CAAEhM,OAAM6B,WAAU2H,WAvQZ,6CAAf,0DC7CM+D,GAAoB,SAACxH,EAAMyH,EAAcC,EAAarC,GA0G1D,OAzGkBqC,EAAYpC,QAAO,SAACC,EAAKoC,GACzC,IAAK3H,EAAM,OAAOuF,EAElB,IAAMnF,EAAMuH,EAAM3P,KACZqJ,EAjBU,SAAduG,EAAe3N,GACnB,IAAKA,EAAM,MAAM,IAAIiG,MAAM,kBAE3B,IAAMmB,EAAOpH,EAAKoH,KAClB,OAAKA,G7BlBiB,a6BkBTpH,EAAKoH,KAKXA,EAHEuG,EADQ3N,EAAK4N,QAYPD,CAAYD,EAAM1N,MACdoC,KAAI2D,EAAM,cAE3B,G7BtCgB,S6BsCZqB,EAAe,CACjB,IAAMuF,EAAMvK,KAAI2D,EAAM,CAAC,GAAD,OAAII,EAAJ,SAChByG,EAASxK,KAAI2D,EAAMI,GACzB,OAAQA,GACN,IAAK,aACH,OAAOyG,GAAUvK,MAAMwL,QAAQjB,GAAxB,2BAAuCtB,GAAvC,mBAA6CnF,EAAMyG,EAAOxM,KAAI,SAAC0N,GAAD,OAAOC,KAAKD,EAAG,mBAAmBxC,EAEzG,IAAK,QAQL,IAAK,OAQL,IAAK,gBAQL,IAAK,eAQL,IAAK,cACH,OAAOsB,GAAUvK,MAAMwL,QAAQjB,GAAxB,2BAEEtB,GAFF,mBAGAnF,EAAMyG,EAAOxM,KAAI,SAAC0N,GAAD,OAAOC,KAAKD,EAAG,aAAc,YAAa,YAAa,UAAW,kBAEtFxC,EAEN,QACE,YAAe/M,IAARoO,EAAoBrB,EAApB,2BAA+BA,GAA/B,mBAAqCnF,EAAMwG,EAAIvM,KAAI,SAAC4L,GAAD,MAAS,CAAEA,YAK3E,G7B1FuB,gB6B0FnB5E,EAAsB,CACxB,IAAM4G,EAAkB5L,KAAIsL,EAAO,CAAC,OAAQ,SAAU,SAAU,SAChE,OAAO,2BACFpC,GADL,mBAEGnF,EAAMJ,EAAKI,GACT5G,QAAO,SAAC0O,GAAD,OAAYA,KACnB7N,KAAI,SAAC6N,GAAD,OAAYC,GAAoCD,EAAQT,EAAcQ,EAAiB5C,QAIlG,G7BlGwB,iB6BkGpBhE,EAAuB,CACzB,IAAM3I,EAAQ2D,KAAI2D,EAAMI,GAClB6F,EAAK5J,KAAI2D,EAAM,CAACI,EAAK,OACrBnE,EAAOvD,EAAQsD,OAAOC,KAAKvD,GAAS,GAE1C,OAAQ0H,GACN,IAAK,WACH,OAAO,2BACFmF,GADL,mBAEGnF,EAAM,CACLuE,OAAQjM,EAAMiM,OACdrB,OAAQ5K,EAAM4K,OACduB,OAAQnM,EAAK,OACbqM,OAAQrM,EAAMqM,UAKpB,QACE,OAAOkB,EAAE,2BAAQV,GAAR,mBAAcnF,EAAM,CAAE6F,QAAShK,EAAK/B,OAAL,2BAAmBqL,GAAnB,mBAAyBnF,EAAM1H,IAAU6M,GAIvF,G7B1HkB,W6B0HdlE,EAAiB,CACnB,IAAM3I,EAAQ2D,KAAI2D,EAAM,CAACI,IACzB,YAAiB5H,IAAVE,EAAsB6M,EAAtB,2BAAiCA,GAAjC,mBAAuCnF,EAAM1H,IAGtD,G7B5HgB,S6B4HZ2I,EAAe,CACjB,IAAM3I,EAAQ2D,KAAI2D,EAAM,CAACI,IACzB,YAAiB5H,IAAVE,EAAsB6M,EAAtB,2BAAiCA,GAAjC,mBAAuCnF,EAAM1H,IAGtD,OAAO6M,IACN,KAICxJ,GAAe,CACnBC,OAAQ,CACN/B,KAAM,qBACNsN,MAAO,CACL8Q,IAAK,mFACLC,IAAK,0GACLC,WAAY,+DACZC,aAAc,kIACdC,MAAO,6CACPC,UAAW,yDACXC,cAAe,yFACfC,OAAQ,uCACRC,YAAa,yDACbC,IAAK,qBACLC,OAAQ,uCACRC,MAAO,iCACPC,gBAAiB,wFACjBC,QAAS,qEACTC,IAAK,qBACLC,UAAW,6FACXC,WAAY,0JACZC,MAAO,2DAETthB,KAAM,2EACN4Y,WAAY,iCACZ2I,YAAa,mDACbC,gBAAiB,oGACjBjC,OAAQ,uCACRkC,cAAe,oJACfC,WAAY,gHACZ5I,YAAa,mDACb6I,OAAQ,2BACRC,aAAc,kIACdvG,QAAS,iFACTwG,IAAK,6HACLC,MAAO,2EACPC,cAAe,0FAIb5R,GAAsC,SAACnI,EAAMyH,EAAcxN,EAAMoL,GACrE,IAAMqC,EAAcrL,KAAIgJ,EAAe,CAAC,SAAU,cAAepL,EAAM,gBACvE,IAAKyN,EAAa,MAAM,IAAIxH,MAAJ,sBAAyBjG,EAAzB,eAIxB,OAFkBuN,GAAkBxH,EAAMyH,EAAcC,EAAarC,IA2RxD+C,GApRQ,CACrBzD,OAAO,WAAD,4BAAE,WAAOlB,EAAQ4B,GAAf,uBAAA7G,EAAA,2DACEwB,EAASyD,EAATzD,MAECuX,OAHH,gCAIaC,GAAU,CAAElP,MAAO,CAAErC,GAAIjG,EAAKuX,OAAOtR,MAJlD,OAIJ4K,EAJI,kBAMF7Q,EAAK3G,MANH,wBAOJ2G,EAAK3G,MAAQ2G,EAAK3G,MAAMgB,KAAI,SAACZ,GAE3B,OADAA,EAAKzB,KAAOqD,EAAgB5B,EAAKzB,MAC1ByB,KATL,SAWeL,EAAe4G,EAAK3G,OAXnC,OAWJ2G,EAAK3G,MAXD,mBAaF2G,EAAKmP,KAbH,qBAcAnP,EAAKmP,KAAK6K,MAAK,SAACvG,GAAD,MAAoB,SAAXA,EAAIxN,MAd5B,iBAeFjG,EAAKmP,KAAOnP,EAAKmP,KAAK3V,QAAO,SAACia,GAAD,MAAoB,SAAXA,EAAIxN,MAfxC,yCAiBgBiJ,GAAU,2BAErBlP,GAFoB,IAGvBuX,OAAQ1G,EAAWA,EAAS7Q,KAAKA,KAAOA,EAAKuX,SAE/C,SACAxb,IAvBA,QAiBI0X,EAjBJ,OAyBFzT,EAAKmP,KAAL,sBAAgBnP,EAAKmP,MAArB,CAA2BsE,IAzBzB,YA4BFzT,EAAKia,cA5BH,wBA6BJja,EAAKia,cAAgBja,EAAKia,cAAc5f,KAAI,SAAC6f,GAE3C,OADAA,EAAaliB,KAAOqD,EAAgB6e,EAAaliB,MAC1CkiB,KA/BL,UAiCuB9gB,EAAe4G,EAAKia,eAjC3C,QAiCJja,EAAKia,cAjCD,mBAmCFja,EAAKma,aAnCH,wBAoCJna,EAAKma,aAAena,EAAKma,aAAa9f,KAAI,SAAC+f,GAEzC,OADAA,EAAYpiB,KAAOqD,EAAgB+e,EAAYpiB,MACxCoiB,KAtCL,UAwCsBhhB,EAAe4G,EAAKma,cAxC1C,QAwCJna,EAAKma,aAxCD,mBA0CFna,EAAKqa,YA1CH,wBA2CJra,EAAKqa,YAAcra,EAAKqa,YAAYhgB,KAAI,SAACigB,GAEvC,OADAA,EAAWtiB,KAAOqD,EAAgBif,EAAWtiB,MACtCsiB,KA7CL,UA+CqBlhB,EAAe4G,EAAKqa,aA/CzC,QA+CJra,EAAKqa,YA/CD,mBAkDFra,EAAKmP,KAlDH,kCAmDciG,GAAgB,qBAAsBpV,EAAKmP,MAnDzD,QAmDJnP,EAAKmP,KAnDD,mBAqDFnP,EAAK3G,MArDH,kCAsDe+b,GAAgB,qBAAsBpV,EAAK3G,OAtD1D,QAsDJ2G,EAAK3G,MAtDD,mBAwDF2G,EAAKma,aAxDH,kCAyDsB/E,GAAgB,qBAAsBpV,EAAKma,cAzDjE,QAyDJna,EAAKma,aAzDD,mBA2DFna,EAAKia,cA3DH,kCA4DuB7E,GAAgB,qBAAsBpV,EAAKia,eA5DlE,QA4DJja,EAAKia,cA5DD,mBA8DFja,EAAKqa,YA9DH,kCA+DqBjF,GAAgB,qBAAsBpV,EAAKqa,aA/DhE,QA+DJra,EAAKqa,YA/DD,sBAiEAE,EAAcpS,GAAoCnI,EAAM,GAAP,gCAA4CqF,GAC7FmV,EAAiBrS,GACrBnI,EACA,GAFwD,yCAIxDqF,GAtEI,kBAyEC,CACLQ,gBAAiB,CACfG,MAAOuU,GAETzU,mBAAoB,CAClBE,MAAOwU,KA9EL,4CAAF,qDAAC,GAkFP3V,OAAQ,SAACpB,EAAQ4B,GAAmB,IAC1BY,EAAqBxC,EAArBwC,GAAqBxC,EAAjBgE,aAEZ,MAAO,CACLa,MAAO,CAAErC,QAGbnB,WAAY,kBAAM3K,QAAQoJ,QAAQ,CAAEvD,KAAM,MAC1CuE,QAAS,SAACd,EAAQ4B,GAAmB,IAEjC7L,EAGEiK,EAHFjK,OAFgC,EAK9BiK,EAFF8E,WAAcC,EAHkB,EAGlBA,KAAMC,EAHY,EAGZA,QAHY,EAK9BhF,EADFiF,KAJgC,IAIxBf,aAJwB,MAIhB,YAJgB,MAIHgB,aAJG,MAIK,MAJL,EAM1B8R,EAAqEjhB,EAArEihB,gBAAiBzH,EAAoDxZ,EAApDwZ,UAAWK,EAAyC7Z,EAAzC6Z,QAAYqH,EANd,aAM2ClhB,EAN3C,2CAO5BmhB,EAAate,KAAIgJ,EAAe,CAAC,SAAU,cAAe,yBAA0B,gBAAgBhL,KACxG,SAACugB,GAAD,OAAOA,EAAE5iB,QAEL6iB,EAAgBxe,KAAIgJ,EAAe,CAAC,SAAU,cAAe,4BAA6B,gBAAgBhL,KAC9G,SAACugB,GAAD,OAAOA,EAAE5iB,QAEX,OAAI2iB,EAAWtW,SAASsD,EAAMzG,MAAM,KAAK,IAChC,CACLkF,YAAa,qBACbC,iBAAkB,CAChB7M,OAAQkhB,EACRhS,KAAM,CAACE,KAAI,GAAIjB,EAAOgB,EAAME,gBAC5BL,OACAC,WAEFjC,mBAAoB,CAClBhN,OAAQ,CACNihB,kBACAzH,YACAK,QAAS/W,MAAMwL,QAAQuL,GAAWA,EAAQhZ,KAAI,SAAC4L,GAAD,MAAS,CAAEA,cAASzN,KAKtEqiB,EAAcxW,SAASsD,EAAMzG,MAAM,KAAK,IACnC,CACLkF,YAAa,wBACbE,gBAAiB,CACf9M,OAAQkhB,GAEVnU,oBAAqB,CACnB/M,OAAQ,CACNihB,kBACAzH,YACAK,QAAS/W,MAAMwL,QAAQuL,GAAWA,EAAQhZ,KAAI,SAAC4L,GAAD,MAAS,CAAEA,cAASzN,GAEpEkQ,KAAM,CAACE,KAAI,GAAIjB,EAAOgB,EAAME,gBAC5BL,OACAC,iBAdN,GAmBFhE,QAAS,SAAChB,EAAQ4B,GAAmB,IAC3BuB,EAAQnD,EAARmD,IACR,MAAO,CACLpN,OAAQ,CACNoN,OAEF6B,QAAS7B,EAAI1M,SAGjBwK,iBAAkB,SAACjB,EAAQ4B,GAAmB,IAE1C7L,EAGEiK,EAHFjK,OAFyC,EAKvCiK,EAFF8E,WAAcC,EAH2B,EAG3BA,KAAMC,EAHqB,EAGrBA,QAHqB,EAKvChF,EADFiF,KAAQf,EAJiC,EAIjCA,MAAOgB,EAJ0B,EAI1BA,MAGjB,MAAO,CACLnP,SACAkP,KAAM,CAAC,gBAAGf,EAAQgB,IAClBH,OACAC,YAGJjE,OAAQ,SAACf,EAAQ4B,GAEf,MAAO,CACLiD,MAAO,CAAErC,GAFIxC,EAAPwC,MAKVlB,OAAQ,SAACtB,EAAQ4B,GAAmB,IAC1BY,EAAqBxC,EAArBwC,GAAqBxC,EAAjBgE,aAEZ,MAAO,CACLa,MAAO,CAAErC,QAGbjB,QAAS,SAACvB,EAAQ4B,GAAmB,IAC3BY,EAAqBxC,EAArBwC,GAAqBxC,EAAjBgE,aAEZ,MAAO,CACLa,MAAO,CAAErC,QAGb3C,OAAO,WAAD,4BAAE,WAAOG,EAAQ4B,GAAf,2BAAA7G,EAAA,yDACEyH,EAA2BxC,EAA3BwC,GAAIjG,EAAuByD,EAAvBzD,KAAMyH,EAAiBhE,EAAjBgE,cAEdzH,EAAKuX,OAHH,gCAIaC,GAAU,CAAElP,MAAO,CAAErC,GAAIjG,EAAKuX,OAAOtR,MAJlD,OAIJ4K,EAJI,kBAMF7Q,EAAK3G,MANH,wBAOJ2G,EAAK3G,MAAQ2G,EAAK3G,MAAMgB,KAAI,SAACZ,GAE3B,OADAA,EAAKzB,KAAOqD,EAAgB5B,EAAKzB,MAC1ByB,KATL,SAWeL,EAAe4G,EAAK3G,OAXnC,OAWJ2G,EAAK3G,MAXD,mBAaF2G,EAAKmP,KAbH,qBAcAnP,EAAKmP,KAAK6K,MAAK,SAACvG,GAAD,MAAoB,SAAXA,EAAIxN,MAd5B,iBAeFjG,EAAKmP,KAAOnP,EAAKmP,KAAK3V,QAAO,SAACia,GAAD,MAAoB,SAAXA,EAAIxN,MAfxC,yCAiBgBiJ,GAAU,2BAErBlP,GAFoB,IAGvBuX,OAAQ1G,EAAWA,EAAS7Q,KAAKA,KAAOA,EAAKuX,SAE/C,SACAxb,IAvBA,QAiBI0X,EAjBJ,OAyBFzT,EAAKmP,KAAL,sBAAgBnP,EAAKmP,MAArB,CAA2BsE,IAzBzB,YA4BFzT,EAAKia,cA5BH,wBA6BJja,EAAKia,cAAgBja,EAAKia,cAAc5f,KAAI,SAAC6f,GAE3C,OADAA,EAAaliB,KAAOqD,EAAgB6e,EAAaliB,MAC1CkiB,KA/BL,UAiCuB9gB,EAAe4G,EAAKia,eAjC3C,QAiCJja,EAAKia,cAjCD,mBAmCFja,EAAKma,aAnCH,wBAoCJna,EAAKma,aAAena,EAAKma,aAAa9f,KAAI,SAAC+f,GAEzC,OADAA,EAAYpiB,KAAOqD,EAAgB+e,EAAYpiB,MACxCoiB,KAtCL,UAwCsBhhB,EAAe4G,EAAKma,cAxC1C,QAwCJna,EAAKma,aAxCD,mBA0CFna,EAAKqa,YA1CH,wBA2CJra,EAAKqa,YAAcra,EAAKqa,YAAYhgB,KAAI,SAACigB,GAEvC,OADAA,EAAWtiB,KAAOqD,EAAgBif,EAAWtiB,MACtCsiB,KA7CL,UA+CqBlhB,EAAe4G,EAAKqa,aA/CzC,QA+CJra,EAAKqa,YA/CD,mBAkDFra,EAAKmP,KAlDH,kCAmDc+G,GAAgB,qBAAsBlW,EAAKmP,KAAM1H,EAAa0H,MAnD5E,QAmDJnP,EAAKmP,KAnDD,mBAqDFnP,EAAK3G,MArDH,kCAsDe6c,GAAgB,qBAAsBlW,EAAK3G,MAAOoO,EAAapO,OAtD9E,QAsDJ2G,EAAK3G,MAtDD,mBAwDF2G,EAAKma,aAxDH,kCAyDsBjE,GAAgB,qBAAsBlW,EAAKma,aAAc1S,EAAa0S,cAzD5F,QAyDJna,EAAKma,aAzDD,mBA2DFna,EAAKia,cA3DH,kCA4DuB/D,GAAgB,qBAAsBlW,EAAKia,cAAexS,EAAawS,eA5D9F,QA4DJja,EAAKia,cA5DD,mBA8DFja,EAAKqa,YA9DH,kCA+DqBnE,GAAgB,qBAAsBlW,EAAKqa,YAAa5S,EAAa4S,aA/D1F,QA+DJra,EAAKqa,YA/DD,sBAiEAS,EAAc3S,GAClBnI,EACAyH,EAFqD,gCAIrDpC,GAEI0V,EAAiB5S,GACrBnI,EACAyH,EAFwD,yCAIxDpC,GA3EI,kBA8EC,CACL4B,gBAAiB,CACfqB,MAAO,CAAErC,MACTD,MAAO8U,GAET5T,mBAAoB,CAClBoB,MAAO,CAAErC,MACTD,MAAO+U,KArFL,4CAAF,qDAAC,GAyFPnW,WAAY,kBAAMzK,QAAQoJ,QAAQ,CAAEvD,KAAM,OCpY7Bgb,GA3DsB,CACnCrW,OAAO,WAAD,4BAAE,WAAOlB,EAAQ4B,GAAf,SAAA7G,EAAA,kEACK,CAAEmG,OAAQkQ,GAA4BjP,UAAWkP,IADtD,SAEWmG,GAAiCtW,OAAOlB,EAAQ4B,GAF3D,+BAGSqE,GAAkBpG,OAAO+B,GAHlC,mBACNI,UADM,KAENhG,UAFM,KAGNiG,cAHM,kDAAF,qDAAC,GAKPpC,OAAO,WAAD,4BAAE,WAAOG,EAAQ4B,GAAf,SAAA7G,EAAA,kEAEK,CAAE8E,OAAQyR,GAA4B/N,UAAWgO,IAFtD,SAGWiG,GAAiC3X,OAAOG,EAAQ4B,GAH3D,+BAISqE,GAAkBpG,OAAO+B,GAJlC,mBAENI,UAFM,KAGNhG,UAHM,KAINiG,cAJM,kDAAF,qDAAC,GAMPb,OAAQ,SAACpB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAU2V,GACV1V,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1CP,WAAY,kBAAM3K,QAAQoJ,QAAQ,CAAEvD,KAAM,MAC1CuE,QAAS,SAACd,EAAQ4B,GAAT,MAA4B,CACnCc,QAAS,CACPQ,UAAW+N,GACXhO,WAAY+N,GACZlQ,QAASgQ,GACT9N,OAAQ+N,IAEV/U,UAAWwb,GAAiC1W,QAAQd,EAAQ4B,GAC5DK,cAAegE,GAAkBnF,QAAQc,KAE3CZ,QAAS,SAAChB,EAAQ4B,GAAT,MAA4B,CACnClE,MAAOwT,GACPlV,UAAWwK,GAAsBxF,QAAQhB,EAAQ4B,GACjDK,cAAegE,GAAkBjF,QAAQY,KAE3CX,iBAAkB,SAACjB,EAAQ4B,GACzB,MAAO,CACLlE,MAAOyT,GACPnV,UAAWwK,GAAsBvF,iBAAiBjB,EAAQ4B,GAC1DK,cAAegE,GAAkBhF,iBAAiBW,KAGtDb,OAAQ,SAACf,EAAQ4B,GAAT,MAA4B,CAClClE,MAAOmT,GACP7U,UAAWwK,GAAsBzF,OAAOf,EAAQ4B,GAChDK,cAAegE,GAAkBlF,OAAOa,KAE1CN,OAAQ,SAACtB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAUyV,GACVxV,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1CL,QAAS,SAACvB,EAAQ4B,GAAT,MAA4B,CACnC7F,SAAU0V,GACVzV,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAG1CT,WAAY,kBAAMzK,QAAQoJ,QAAQ,CAAEvD,KAAM,O,q/GC1ErC,IAAMkb,GAAoC7b,cAAH,MAiBjC8b,GAAmC9b,cAAH,KAQzC6b,IAGSE,GAAqC/b,cAAH,KAgB3C6b,IAGSG,GAAqChc,cAAH,KAa3C6b,IAGSI,GAA+Cjc,cAAH,KAgBrD6b,IAGSK,GAAkClc,cAAH,KAQxC6b,IAGSM,GAAkCnc,cAAH,KAWxC6b,IAGSO,GAAkCpc,cAAH,KAQxC6b,IAGSQ,GAAmCrc,cAAH,KAQzC6b,IAGSS,GAAkCtc,cAAH,KAQxC6b,ICrHWU,GAZc,CAC3BC,UACAC,UACAC,oBACAC,qBACAC,mBACAC,gBACAC,sBACAC,uBCJuC,CACvCzX,OAAQ,SAAClB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAU+b,GACV9b,UAAWwK,GAAsBtF,OAAOlB,EAAQ4B,GAChDK,cAAegE,GAAkB/E,OAAOU,KAE1CR,OAAQ,SAACpB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAUmc,GACVlc,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1CP,WAAY,kBAAM3K,QAAQoJ,QAAQ,CAAEvD,KAAM,MAC1CuE,QAAS,SAACd,EAAQ4B,GAAT,MAA4B,CACnClE,MAAOia,GACP3b,UAAWwK,GAAsB1F,QAAQd,EAAQ4B,GACjDK,cAAegE,GAAkBnF,QAAQc,KAE3CZ,QAAS,SAAChB,EAAQ4B,GAAT,MAA4B,CACnClE,MAAOka,GACP5b,UAAWwK,GAAsBxF,QAAQhB,EAAQ4B,GACjDK,cAAegE,GAAkBjF,QAAQY,KAE3CX,iBAAkB,SAACjB,EAAQ4B,GAAT,MAA4B,CAC5ClE,MAAOma,GACP7b,UAAWwK,GAAsBvF,iBAAiBjB,EAAQ4B,GAC1DK,cAAegE,GAAkBhF,iBAAiBW,KAEpDb,OAAQ,SAACf,EAAQ4B,GAAT,MAA4B,CAClClE,MAAOga,GACP1b,UAAWwK,GAAsBzF,OAAOf,EAAQ4B,GAChDK,cAAegE,GAAkBlF,OAAOa,KAE1CN,OAAQ,SAACtB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAUic,GACVhc,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1CL,QAAS,SAACvB,EAAQ4B,GAAT,MAA4B,CACnC7F,SAAUkc,GACVjc,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1C/B,OAAQ,SAACG,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAUgc,GACV/b,UAAWwK,GAAsB3G,OAAOG,EAAQ4B,GAChDK,cAAegE,GAAkBpG,OAAO+B,KAE1CT,WAAY,kBAAMzK,QAAQoJ,QAAQ,CAAEvD,KAAM,OD1C1Cqc,KELqB,CACrB1X,OAAQ,SAAClB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAUkO,GACVjO,UAAWwK,GAAsBtF,OAAOlB,EAAQ4B,GAChDK,cAAegE,GAAkB/E,OAAOU,KAE1CR,OAAQ,SAACpB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAUsO,GACVrO,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1CP,WAAY,kBAAM3K,QAAQoJ,QAAQ,CAAEvD,KAAM,MAC1CuE,QAAS,SAACd,EAAQ4B,GAAT,MAA4B,CACnClE,MAAOoM,GACP9N,UAAWwK,GAAsB1F,QAAQd,EAAQ4B,GACjDK,cAAegE,GAAkBnF,QAAQc,KAE3CZ,QAAS,SAAChB,EAAQ4B,GAAT,MAA4B,CACnClE,MAAOqM,GACP/N,UAAWwK,GAAsBxF,QAAQhB,EAAQ4B,GACjDK,cAAegE,GAAkBjF,QAAQY,KAE3CX,iBAAkB,SAACjB,EAAQ4B,GAAT,MAA4B,CAC5ClE,MAAOsM,GACPhO,UAAWwK,GAAsBvF,iBAAiBjB,EAAQ4B,GAC1DK,cAAegE,GAAkBhF,iBAAiBW,KAEpDb,OAAQ,SAACf,EAAQ4B,GAAT,MAA4B,CAClClE,MAAOmM,GACP7N,UAAWwK,GAAsBzF,OAAOf,EAAQ4B,GAChDK,cAAegE,GAAkBlF,OAAOa,KAE1CN,OAAQ,SAACtB,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAUoO,GACVnO,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1CL,QAAS,SAACvB,EAAQ4B,GAAT,MAA4B,CACnC7F,SAAUqO,GACVpO,UAAWwK,GAAqB,OAAQxG,EAAQ4B,GAChDK,cAAegE,GAAiB,OAAQrE,KAE1C/B,OAAQ,SAACG,EAAQ4B,GAAT,MAA4B,CAClC7F,SAAUmO,GACVlO,UAAWwK,GAAsB3G,OAAOG,EAAQ4B,GAChDK,cAAegE,GAAkBpG,OAAO+B,KAE1CT,WAAY,kBAAMzK,QAAQoJ,QAAQ,CAAEvD,KAAM,Q,UC3D7BmE,GCIMc,GAAqB,CACxCC,UACAC,cACAE,cAAe,CACb+B,OAAQD,GAAyBC,S,i1NCRrC,IAMMkV,GAAkB,oCAMlBC,GAAkB,yEASlBC,GAAgB,0CAGTF,GAHS,6EAqBTG,GAAa,mEAIVH,GAJU,sPAmBRA,GAnBQ,gCAoBLA,GApBK,4BAqBTA,GArBS,0BAsBXA,GAtBW,4DAwBdC,GAxBc,sBAyBfA,GAzBe,uEA6BXC,GA7BW,+BA8BNF,GA9BM,oDAVP,sFAUO,iGAuCbI,GAAgBrd,IAAH,KAE2Fod,IAKxGE,GAAiBtd,IAAH,KAEYod,IAK1BG,GAAevd,IAAH,KAEaod,IAIzBI,GAAcxd,IAAH,KAE4sBod,IAIvtBK,GAAczd,IAAH,MAQlB0d,GAAqB,mDAOdC,GAAuB3d,IAAH,KAE+F0d,IAKnHE,GAAuB5d,IAAH,KAEiB0d,IAKrCG,GAAsB7d,IAAH,KAEa0d,IAIhCI,GAAqB9d,IAAH,MAQzB+d,GAAa,6EAKHd,GALG,2LAiBLS,GAjBK,qCAsBNM,GAAgBhe,IAAH,KAE2F+d,IAKxGE,GAAiBje,IAAH,KAEY+d,IAK1BG,GAAele,IAAH,KAEa+d,IAIzBI,GAAcne,IAAH,KAEmS+d,IAI9SK,GAAcpe,IAAH,MAQlBqe,GAAgB,oIAUNpB,GAVM,OAaTqB,GAAmBte,IAAH,KAE4Fqe,IAK5GE,GAAqBve,IAAH,KAEYqe,IAK9BG,GAAkBxe,IAAH,KAEOqe,IAI7BI,GAAkB,+GAQRxB,GARQ,OAWXyB,GAAqB1e,IAAH,KAE2Fye,IAK7GE,GAAsB3e,IAAH,KAEYye,IAK/BG,GAAoB5e,IAAH,KAEOye,ICtCtBI,GA9NU,SAAC7Y,GAAD,OAAmB,SAAC8Y,EAAWriB,EAAU2H,GAChE,IAAM2a,EAAajZ,aAAWE,EAAXF,CAA0BgZ,EAAWriB,EAAU2H,GAC1DwC,EAA2BxC,EAA3BwC,GAAIjG,EAAuByD,EAAvBzD,KAAuByD,EAAjBgE,aAElB,GAAiB,SAAb3L,EACF,OAAQqiB,GACN,KAAKE,KACH,OAAO,2BACFD,GADL,IAEEjd,MAAOyb,GACPnd,UAAW,CAAE6I,MAAO,CAAErC,SAG1B,KAAKqY,KACL,KAAKC,KACH,OAAO,2BACFH,GADL,IAEEjd,MAAOub,KAGX,KAAK8B,KACH,OAAO,2BACFJ,GADL,IAEEjd,MAAOwb,GACPld,UAAW,CACTjG,OAAQ,CACNoN,IAAKnD,EAAOmD,IAAIvM,KAAI,SAAC0L,GACnB,MAAoB,kBAATA,EAA0BA,EAC9BA,EAAKE,UAMtB,KAAK0Q,KACH,OAAO,2BACFyH,GADL,IAEEjd,MAAO0b,GACPpd,UAAU,aAAG6I,MAAO,CAAErC,OAASjG,KAGnC,KAAKye,KACH,OAAO,2BACFL,GADL,IAEEjd,MAAO2b,GACPrd,UAAW,CAAE6I,MAAO,CAAErC,SAQ9B,GAAiB,gBAAbnK,EACF,OAAQqiB,GACN,KAAKE,KACH,OAAO,2BACFD,GADL,IAEEjd,MAAO+b,GACPzd,UAAW,CAAE6I,MAAO,CAAErC,SAG1B,KAAKqY,KACL,KAAKC,KACH,OAAO,2BACFH,GADL,IAEEjd,MAAO6b,KAGX,KAAKwB,KACH,OAAO,2BACFJ,GADL,IAEEjd,MAAO8b,GACPxd,UAAW,CACTjG,OAAQ,CACNoN,IAAKnD,EAAOmD,IAAIvM,KAAI,SAAC0L,GACnB,MAAoB,kBAATA,EAA0BA,EAC9BA,EAAKE,UAMtB,KAAK0Q,KACH,OAAO,2BACFyH,GADL,IAEEjd,MAAOqc,GACP/d,UAAU,aAAG6I,MAAO,CAAErC,OAASjG,KAGnC,KAAKye,KACH,OAAO,2BACFL,GADL,IAEEjd,MAAOgc,GACP1d,UAAW,CAAE6I,MAAO,CAAErC,SAQ9B,GAAiB,SAAbnK,EACF,OAAQqiB,GACN,KAAKE,KACH,OAAO,2BACFD,GADL,IAEEjd,MAAOoc,GACP9d,UAAW,CAAE6I,MAAO,CAAErC,SAG1B,KAAKqY,KACL,KAAKC,KACH,OAAO,2BACFH,GADL,IAEEjd,MAAOkc,KAGX,KAAKmB,KACH,OAAO,2BACFJ,GADL,IAEEjd,MAAOmc,GACP7d,UAAW,CACTjG,OAAQ,CACNoN,IAAKnD,EAAOmD,IAAIvM,KAAI,SAAC0L,GACnB,MAAoB,kBAATA,EAA0BA,EAC9BA,EAAKE,UAMtB,KAAK0Q,KACH,OAAO,2BACFyH,GADL,IAEEjd,MAAOqc,GACP/d,UAAU,aAAG6I,MAAO,CAAErC,OAASjG,KAGnC,KAAKye,KACH,OAAO,2BACFL,GADL,IAEEjd,MAAOsc,GACPhe,UAAW,CAAE6I,MAAO,CAAErC,SAQ9B,GAAiB,YAAbnK,EACF,OAAQqiB,GACN,KAAKE,KACH,OAAO,2BACFD,GADL,IAEEjd,MAAO0c,KAGX,KAAKS,KACL,KAAKC,KACH,OAAO,2BACFH,GADL,IAEEjd,MAAOwc,KAGX,KAAKa,KACH,OAAO,2BACFJ,GADL,IAEEjd,MAAOyc,GACPne,UAAW,CACTjG,OAAQ,CACNoN,IAAKnD,EAAOmD,IAAIvM,KAAI,SAAC0L,GACnB,MAAoB,kBAATA,EAA0BA,EAC9BA,EAAKE,UAW1B,GAAiB,cAAbnK,EACF,OAAQqiB,GACN,KAAKE,KACH,OAAO,2BACFD,GADL,IAEEjd,MAAO8c,KAGX,KAAKK,KACL,KAAKC,KACH,OAAO,2BACFH,GADL,IAEEjd,MAAO4c,KAGX,KAAKS,KACH,OAAO,2BACFJ,GADL,IAEEjd,MAAO6c,GACPve,UAAW,CACTjG,OAAQ,CACNoN,IAAKnD,EAAOmD,IAAIvM,KAAI,SAAC0L,GACnB,MAAoB,kBAATA,EAA0BA,EAC9BA,EAAKE,UAW1B,OAAOmY,ICxNIha,GAAiB,CAAC,OAAQ,OAAQ,OAAQ,UAAW,UAAW,YAAa,eAE7ED,GAAe,SAAClK,EAAM6B,EAAU2H,GAC3C,OARAwB,aAAqB,CACnBC,OAAQzD,GACR0D,WAAYA,KAMa1K,KAApB,uCAAyB,WAAOikB,GAAP,iBAAAlgB,EAAA,sEACImgB,GAAS1kB,EAAM6B,EAAU2H,GAD7B,uBACdmb,EADc,EACtBnb,OADsB,kBAGvBib,EAASzkB,EAAM6B,EAAU8iB,IAHF,2CAAzB,wDAOIC,GAAe,CAC1Bla,OAAQ,SAAC7I,EAAU2H,GAAX,OAAsBU,GAAauS,KAAQ5a,EAAU2H,IAC7DoB,OAAQ,SAAC/I,EAAU2H,GAAX,OAAsBU,GAAasa,KAAQ3iB,EAAU2H,IAC7DqB,WAAY,kBAAM3K,QAAQoJ,QAAQ,CAAEvD,KAAM,MAC1CuE,QAAS,SAACzI,EAAU2H,GAAX,OAAsBU,GAAama,KAAUxiB,EAAU2H,IAChEgB,QAAS,SAAC3I,EAAU2H,GAAX,OAAsBU,GAAaqa,KAAU1iB,EAAU2H,IAChEiB,iBAAkB,SAAC5I,EAAU2H,GAAX,OAAsBU,GAAaoa,KAAoBziB,EAAU2H,IACnFe,OAAQ,SAAC1I,EAAU2H,GAAX,OAAsBU,GAAaka,KAASviB,EAAU2H,IAC9DsB,OAAQ,SAACjJ,EAAU2H,GAAX,OAAsBU,GAAa,SAAUrI,EAAU2H,IAC/DuB,QAAS,SAAClJ,EAAU2H,GAAX,OAAsBU,GAAa,UAAWrI,EAAU2H,IACjEH,OAAQ,SAACxH,EAAU2H,GAAX,OAAsBU,GAAawS,KAAQ7a,EAAU2H,IAC7DmB,WAAY,kBAAMzK,QAAQoJ,QAAQ,CAAEvD,KAAM,MAC1CoE,mBC3Ba0a,GAFaxa,GAAyB,CAACya,GAAoBF,K,yCCF3D,IACbG,UAAW,CACTC,KAAM,CACJjnB,KAAM,iFACNknB,KAAM,iFACNC,MAAO,uEACPC,OAAQ,CACNC,KAAM,mDACNzI,SAAU,qEACV3b,OAAQ,yDACRqkB,OAAQ,uCACRC,MAAO,2EACPpQ,KAAM,2BACN9V,MAAO,iCACPmmB,aAAc,oDAEhBC,OAAQ,CACNxZ,GAAI,KACJjO,KAAM,mDACNuhB,YAAa,mDACbmG,OAAQ,iCACRC,MAAO,wBACPC,UAAW,6CACXC,cAAe,oDACfC,cAAe,0DACflK,UAAW,uCACXmK,UAAW,yDACXC,cAAe,2DACfC,cAAe,sEACfC,MAAO,yDACP9I,iBAAkB,uCAClB+I,qBAAsB,gEACtB5I,OAAQ,uCACR6I,WAAY,iCACZzc,OAAQ,uCACR0c,mBAAoB,oFACpBC,qBAAsB,gGACtBC,WAAY,sDACZC,UAAW,4DACXC,wBAAyB,qFACzBxmB,KAAM,qBACNymB,SAAU,oCACVC,QAAS,0CACT1lB,OAAQ,yDACR2lB,iBAAkB,sHAClBC,cAAe,kFACfC,iBAAkB,+FAClBhK,YAAa,yDACbG,cAAe,mDACfJ,eAAgB,iFAChBE,WAAY,qEACZC,SAAU,yGACV+J,UAAW,2EACX5J,aAAc,8FACd9d,MAAO,iCACP8V,KAAM,2BACN6R,WAAY,2BACZC,eAAgB,kCAChBC,eAAgB,wCAChBC,OAAQ,iFACRC,WAAY,wFACZC,WAAY,8FACZC,YAAa,yDACbC,gBAAiB,gEACjBC,gBAAiB,sEACjBC,QAAS,+DACT7K,SAAU,+DACV8K,cAAe,0FACfC,aAAc,0GACd7Q,YAAa,+DACb8Q,gBAAiB,oFACjBC,yBAA0B,qJAC1BC,kBAAmB,mDACnBC,kBAAmB,0GACnBC,KAAM,wCAERC,MAAO,CACLte,OAAQ,CACNue,MAAO,iCACPC,UAAW,+DACXC,KAAM,8CACNC,UAAW,yDACXC,aAAc,oDACdC,OAAQ,oDACRC,iBAAkB,0GAClBC,WAAY,gEACZC,cAAe,yIACfC,QAAS,4EAEXxC,qBAAsB,CACpB9H,IAAK,mFACLC,IAAK,0GACLsK,iBAAkB,8FAClBtJ,MAAO,wCAETuJ,0BAA2B,CACzBxK,IAAK,qBACLC,IAAK,qBACLsK,iBAAkB,eAClBtJ,MAAO,wCAETrf,KAAM,CACJ6oB,qBAAsB,gEACtBC,uBAAwB,kFACxBC,gBAAiB,uCACjBC,aAAc,6CACdC,cAAe,6HACf5J,MAAO,wCAETre,OAAQ,CACNkoB,QAAS,0DACTC,KAAM,gHACNC,WAAY,8FACZC,iBAAkB,qGAEpBC,SAAU,CACRC,KAAM,2EACNC,QAAS,yCAGbC,MAAO,0GACPC,OAAQ,iGAEVC,YAAa,CACXnE,OAAQ,CACNoE,SAAU,qEACVC,OAAQ,qGAGZC,KAAM,CACJ/rB,KAAM,yJACNknB,KAAM,yJACNO,OAAQ,CACNxZ,GAAI,KACJjO,KAAM,qBACNuhB,YAAa,mDACbqG,UAAW,uCACXhK,UAAW,uCACXmK,UAAW,mDACXnI,MAAO,QACPC,MAAO,6CACP9T,KAAM,2BACNwT,OAAQ,uCACRyM,QAAS,6CACT9gB,SAAU,uCACV+gB,iBAAkB,wFAClBC,oBAAqB,0GACrBC,sBAAuB,4EACvBC,UAAW,gEACX/E,KAAM,mDACNvO,YAAa,+DACbuT,OAAQ,uCACRC,aAAc,qEACdnM,QAAS,+IAEX8J,MAAO,CACLkC,sBAAuB,CACrB9L,IAAK,mFACLC,IAAK,0GACLsK,iBAAkB,8FAClBtJ,MAAO,wCAET8K,UAAW,CACTtB,qBAAsB,gEACtBC,uBAAwB,kFACxBC,gBAAiB,uCACjBuB,oBAAqB,kFACrBC,sBAAuB,8FACvBvB,aAAc,6CACdC,cAAe,6HACf5J,MAAO,wCAET2K,iBAAkB,CAChBQ,QAAS,6CACTC,QAAS,yDACTC,QAAS,8FACTC,QAAS,6CACTC,SAAU,kFAEZ5qB,KAAM,CACJwqB,QAAS,6CACTC,QAAS,yDACTC,QAAS,8FACTC,QAAS,6CACTC,SAAU,kFAEZld,MAAO,CACLmd,KAAM,mDACNC,YAAa,mDACbC,UAAW,8EACXC,UAAW,wHACXC,UAAW,0FACXC,MAAO,QACPC,iBAAkB,uCAClBC,qBAAsB,gEACtBC,OAAQ,uCACRC,WAAY,iCACZC,QAAS,+DACTC,OAAQ,uCACRC,KAAM,qBACNC,OAAQ,yDACRC,iBAAkB,sHAClBC,cAAe,kFACfC,YAAa,4DACbC,eAAgB,iFAChBC,WAAY,qEACZC,YAAa,8FACbC,MAAO,iCACPC,KAAM,2BACNC,WAAY,2BACZC,OAAQ,iFACRC,YAAa,0DAEf5tB,MAAO,CACLwpB,MAAO,iCACPC,UAAW,+DACXC,KAAM,8CACNC,UAAW,yDACXhK,IAAK,qBACLC,IAAK,qBACLsK,iBAAkB,8FAClBE,qBAAsB,gEACtBC,uBAAwB,kFACxBC,gBAAiB,uCACjBuB,oBAAqB,kFACrBC,sBAAuB,8FACvBvB,aAAc,6CACdC,cAAe,6HACf5J,MAAO,uCACP6J,QAAS,0DACTC,KAAM,gHACNC,WAAY,8FACZC,iBAAkB,oGAClBE,KAAM,2EACNC,QAAS,wCAEX8C,SAAU,CACRtsB,KAAM,CACJwqB,QAAS,6CACTC,QAAS,yDACTC,QAAS,8FACTC,QAAS,6CACTC,SAAU,kFAEZld,MAAO,CACLmd,KAAM,mDACNC,YAAa,mDACbC,UAAW,8EACXC,UAAW,wHACXC,UAAW,0FACXC,MAAO,QACPC,iBAAkB,uCAClBC,qBAAsB,gEACtBC,OAAQ,uCACRC,WAAY,iCACZC,QAAS,+DACTC,OAAQ,uCACRC,KAAM,qBACNC,OAAQ,yDACRC,iBAAkB,sHAClBC,cAAe,kFACfC,YAAa,4DACbC,eAAgB,iFAChBC,WAAY,qEACZC,YAAa,8FACbC,MAAO,iCACPC,KAAM,2BACNC,WAAY,2BACZC,OAAQ,iFACRC,YAAa,0DAEf5tB,MAAO,CACLwpB,MAAO,iCACPC,UAAW,+DACXC,KAAM,8CACNC,UAAW,yDACXhK,IAAK,qBACLC,IAAK,qBACLsK,iBAAkB,8FAClBE,qBAAsB,gEACtBC,uBAAwB,kFACxBC,gBAAiB,uCACjBuB,oBAAqB,kFACrBC,sBAAuB,8FACvBtB,cAAe,6HACfD,aAAc,6CACd3J,MAAO,uCACP6J,QAAS,0DACTC,KAAM,gHACNC,WAAY,8FACZC,iBAAkB,oGAClBE,KAAM,2EACNC,QAAS,yCAGbS,oBAAqB,CACnBsC,MAAO,iCACPC,IAAK,OAEP1iB,KAAM,CACJ2iB,MAAO,iCACPC,WAAY,+DACZC,MAAO,iFACPC,WAAY,yDACZC,QAAS,mDACTC,SAAU,oGACVC,QAAS,uCACTC,YAAa,mDACbC,YAAa,0GAEfC,KAAM,CACJC,MAAO,+DACPC,OAAQ,2DAGZ3D,MAAO,8IACPC,OAAQ,iGAEVxH,mBAAoB,CAClBnkB,KAAM,qPACNknB,KAAM,uFACNE,OAAQ,CACNC,KAAM,mDACNxO,SAAU,2EACV1B,KAAM,2BACN9V,MAAO,iCACP8gB,aAAc,sEACdF,cAAe,4EACfP,WAAY,gHACZrG,QAAS,iFACToG,cAAe,oJACf7C,SAAU,+DACVyD,YAAa,mIAEfoF,OAAQ,CACNxZ,GAAI,KACJhM,KAAM,qBACNjC,KAAM,mDACN2nB,MAAO,wBACPpG,YAAa,mDACbqG,UAAW,uCACXhK,UAAW,uCACXmK,UAAW,mDACXvG,gBAAiB,oGACjBjC,OAAQ,uCACR3G,WAAY,iCACZ6I,cAAe,oJACfC,WAAY,gHACZI,MAAO,8EACPwN,aAAc,+DACd3N,OAAQ,2BACRc,gBAAiB,6HACjB8M,MAAO,uCACPluB,MAAO,iCACP8V,KAAM,2BACNkL,YAAa,kIACbF,aAAc,sEACdF,cAAe,4EACfL,aAAc,kIACdvG,QAAS,iFACT0G,cAAe,wFACfyN,WAAY,mDACZ9H,OAAQ,iCACRQ,MAAO,yDACP9I,iBAAkB,uCAClB+I,qBAAsB,gEACtBC,WAAY,iCACZzc,OAAQ,uCACR1I,OAAQ,yDACR2lB,iBAAkB,sHAClBC,cAAe,kFACfC,iBAAkB,+FAClBhK,YAAa,yDACbD,eAAgB,iFAChBE,WAAY,qEACZgK,UAAW,2EACX5J,aAAc,8FACd6J,WAAY,2BACZG,OAAQ,iFACRG,YAAa,yDACbG,QAAS,+DACT7K,SAAU,+DACV7U,OAAQ,oDAEVkgB,MAAO,CACLhoB,KAAM,CACJqe,IAAK,0GACLD,IAAK,mFACLuK,iBAAkB,8FAClBrK,WAAY,+DACZC,aAAc,kIACdC,MAAO,6CACPC,UAAW,yDACXC,cAAe,yFACfC,OAAQ,uCACRC,YAAa,yDACbC,IAAK,qBACLC,OAAQ,uCACRC,MAAO,iCACPC,gBAAiB,wFACjBC,QAAS,qEACTC,IAAK,qBACLC,UAAW,6FACXC,WAAY,0JACZC,MAAO,0DACPwJ,qBAAsB,gEACtBC,uBAAwB,kFACxBC,gBAAiB,uCACjBC,aAAc,6CACdC,cAAe,8HAEjBnhB,OAAQ,CACN2U,OAAQ,uCACRC,OAAQ,mDACR8H,OAAQ,wFACRgJ,OAAQ,uCACRC,QAAS,4EAEXzsB,OAAQ,CACNkoB,QAAS,0DACTC,KAAM,gHACNC,WAAY,8FACZC,iBAAkB,qGAEpB5J,WAAY,CACVzf,KAAM,CACJse,WAAY,+DACZC,aAAc,kIACdC,MAAO,6CACPC,UAAW,yDACXC,cAAe,yFACfC,OAAQ,uCACRC,YAAa,yDACbC,IAAK,qBACLC,OAAQ,uCACRC,MAAO,iCACPC,gBAAiB,wFACjBC,QAAS,qEACTC,IAAK,qBACLC,UAAW,6FACXC,WAAY,0JACZC,MAAO,6DAIboK,MAAO,+LACPC,OAAQ,iGAEVzH,aAAc,CACZlkB,KAAM,uIACNknB,KAAM,uIACNO,OAAQ,CACNxZ,GAAI,KACJjO,KAAM,mDACN6Y,SAAU,uCACV8O,MAAO,wBACPJ,MAAO,+DACPoI,kBAAmB,6CACnBpO,YAAa,mDACbqG,UAAW,uCACXhK,UAAW,uCACXmK,UAAW,mDACXnI,MAAO,QACPC,MAAO,6CACP2B,gBAAiB,oGACjB5I,WAAY,iCACZ7M,KAAM,2BACNwT,OAAQ,uCACRyM,QAAS,6CACT/pB,KAAM,qBACN2tB,oBAAqB,0GACrBC,iBAAkB,oGAClBC,qBAAsB,yGACtBC,MAAO,kCAET9F,MAAO,CACLhoB,KAAM,CACJoe,IAAK,mFACLC,IAAK,0GACLsK,iBAAkB,8FAClBtJ,MAAO,wCAETvV,KAAM,CACJ2iB,MAAO,iCACPC,WAAY,+DACZC,MAAO,iFACPC,WAAY,yDACZC,QAAS,mDACTC,SAAU,oGACVC,QAAS,uCACTC,YAAa,mDACbC,YAAa,4GAInBpL,OAAQ,CACN9jB,KAAM,qKACNknB,KAAM,qKACNO,OAAQ,CACNxZ,GAAI,KACJhM,KAAM,qBACNjC,KAAM,mDACNuhB,YAAa,oDAEfmK,MAAO,oJACPC,OAAQ,iGAEVtH,KAAM,CACJrkB,KAAM,+DACNknB,KAAM,+DACNO,OAAQ,CACNxZ,GAAI,KACJjO,KAAM,mDACNuhB,YAAa,mDACbyO,SAAU,2EACVhG,KAAM,uCACNiG,yBAA0B,6EAE5BhG,MAAO,CACLgG,yBAA0B,CACxB5P,IAAK,qBACLC,IAAK,qBACLsK,iBAAkB,8FAClBtJ,MAAO,0CAIb2C,gBAAiB,CACfjkB,KAAM,uNACNknB,KAAM,6CACNO,OAAQ,CACNxZ,GAAI,KACJjO,KAAM,mDACNuhB,YAAa,mDACbtf,KAAM,qBACN6f,MAAO,+DACPJ,WAAY,oLACZK,cAAe,yFAEjBkI,MAAO,CACLvI,WAAY,CACVzf,KAAM,CACJse,WAAY,+DACZC,aAAc,kIACdC,MAAO,6CACPC,UAAW,yDACXC,cAAe,yFACfC,OAAQ,uCACRC,YAAa,yDACbC,IAAK,qBACLC,OAAQ,uCACRC,MAAO,iCACPC,gBAAiB,wFACjBC,QAAS,qEACTC,IAAK,qBACLC,UAAW,6FACXC,WAAY,0JACZC,MAAO,4DAGXrf,KAAM,CACJse,WAAY,+DACZC,aAAc,kIACdC,MAAO,6CACPC,UAAW,yDACXC,cAAe,yFACfC,OAAQ,uCACRC,YAAa,yDACbC,IAAK,qBACLC,OAAQ,uCACRC,MAAO,iCACPC,gBAAiB,wFACjBC,QAAS,qEACTC,IAAK,qBACLC,UAAW,6FACXC,WAAY,0JACZC,MAAO,4DAGXoK,MAAO,6KACPC,OAAQ,iGAEV3H,kBAAmB,CACjBhkB,KAAM,yOACNknB,KAAM,uFACNO,OAAQ,CACNxZ,GAAI,KACJjO,KAAM,mDACNuhB,YAAa,mDACbtf,KAAM,qBACN6f,MAAO,+DACPvC,OAAQ,uCACRmC,WAAY,oLACZK,cAAe,yFAEjBkI,MAAO,CACLvI,WAAY,CACVzf,KAAM,CACJse,WAAY,+DACZC,aAAc,kIACdC,MAAO,6CACPC,UAAW,yDACXC,cAAe,yFACfC,OAAQ,uCACRC,YAAa,yDACbS,MAAO,0DACPR,IAAK,qBACLC,OAAQ,uCACRC,MAAO,iCACPC,gBAAiB,wFACjBC,QAAS,qEACTC,IAAK,qBACLC,UAAW,6FACXC,WAAY,4JAGhBpf,KAAM,CACJse,WAAY,+DACZC,aAAc,kIACdC,MAAO,6CACPC,UAAW,yDACXC,cAAe,yFACfC,OAAQ,uCACRC,YAAa,yDACbS,MAAO,0DACPR,IAAK,qBACLC,OAAQ,uCACRC,MAAO,iCACPC,gBAAiB,wFACjBC,QAAS,qEACTC,IAAK,qBACLC,UAAW,6FACXC,WAAY,4JAGhBqK,MAAO,yLACPC,OAAQ,iGAEV5H,iBAAkB,CAChB/jB,KAAM,yJACNknB,KAAM,yJACNO,OAAQ,CACNxZ,GAAI,KACJjO,KAAM,mDACNuhB,YAAa,mDACbtf,KAAM,qBACN8f,cAAe,wFACfD,MAAO,+EAETmI,MAAO,CACLhoB,KAAM,CACJse,WAAY,+DACZC,aAAc,kIACdC,MAAO,6CACPC,UAAW,yDACXC,cAAe,yFACfC,OAAQ,uCACRC,YAAa,yDACbS,MAAO,0DACPR,IAAK,qBACLC,OAAQ,uCACRC,MAAO,iCACPC,gBAAiB,wFACjBC,QAAS,qEACTC,IAAK,qBACLC,UAAW,6FACXC,WAAY,4JAGhBqK,MAAO,8IACPC,OAAQ,iGAEV9H,OAAQ,CACN7jB,KAAM,uFACNknB,KAAM,uFACNO,OAAQ,CACNxZ,GAAI,KACJjO,KAAM,mDACNuhB,YAAa,mDACbqG,UAAW,uCACXhK,UAAW,uCACXmK,UAAW,mDACXmI,MAAO,6CACPzQ,iBAAkB,gHAClB0Q,UAAW,sBAEbzE,MAAO,gHACPC,OAAQ,iGAEV5oB,KAAM,CACJ/C,KAAM,yIACNknB,KAAM,yIACNO,OAAQ,CACNxZ,GAAI,KACJjO,KAAM,mDACNuhB,YAAa,mDACbqG,UAAW,uCACXhK,UAAW,uCACXmK,UAAW,mDACXplB,IAAK,uCACLsW,aAAc,2GACdoE,QAAS,6CACT9Z,IAAK,+DACL2U,KAAM,yCAGVkM,uBAAwB,CACtBpkB,KAAM,2JACNknB,KAAM,2JACNO,OAAQ,CACNxZ,GAAI,KACJjO,KAAM,mDACNuhB,YAAa,mDACbqG,UAAW,uCACXhK,UAAW,uCACXmK,UAAW,mDACXplB,IAAK,uCACLsW,aAAc,2GACdoE,QAAS,6CACT9Z,IAAK,+DACL2U,KAAM,yCAGVkY,QAAS,CACP3I,OAAQ,CACNxZ,GAAI,KACJhM,KAAM,wFACN0N,MAAO,gEACPjP,MAAO,oDAETupB,MAAO,CACLhoB,KAAM,CACJwqB,QAAS,6CACTC,QAAS,yDACTC,QAAS,8FACTC,QAAS,6CACTC,SAAU,kFAEZld,MAAO,CACLmd,KAAM,mDACNC,YAAa,mDACbC,UAAW,8EACXC,UAAW,wHACXC,UAAW,0FACXC,MAAO,QACPC,iBAAkB,uCAClBC,qBAAsB,gEACtBC,OAAQ,uCACRC,WAAY,iCACZC,QAAS,+DACTC,OAAQ,uCACRC,KAAM,qBACNC,OAAQ,yDACRC,iBAAkB,sHAClBC,cAAe,kFACfC,YAAa,4DACbC,eAAgB,iFAChBC,WAAY,qEACZC,YAAa,8FACbC,MAAO,iCACPC,KAAM,2BACNC,WAAY,2BACZC,OAAQ,iFACRC,YAAa,0DAEf5tB,MAAO,CACLwpB,MAAO,iCACPC,UAAW,+DACXC,KAAM,8CACNC,UAAW,yDACXhK,IAAK,qBACLC,IAAK,qBACLsK,iBAAkB,8FAClBE,qBAAsB,gEACtBC,uBAAwB,kFACxBC,gBAAiB,uCACjBuB,oBAAqB,kFACrBC,sBAAuB,8FACvBvB,aAAc,6CACd3J,MAAO,uCACP6J,QAAS,0DACTC,KAAM,gHACNC,WAAY,8FACZC,iBAAkB,oGAClBE,KAAM,2EACNC,QAAS,0CAIf4E,UAAW,CACTrwB,KAAM,6CACNknB,KAAM,6CACNO,OAAQ,CACNxZ,GAAI,KACJhM,KAAM,qBACNjC,KAAM,mDACNuhB,YAAa,mDACb+O,UAAW,uCACXC,UAAW,wCAEbtG,MAAO,CACLhoB,KAAM,CACJglB,KAAM,uCACN8E,KAAM,8EAIZyE,QAAS,CACPxwB,KAAM,6CACNknB,KAAM,6CACNO,OAAQ,CACNxZ,GAAI,KACJhM,KAAM,qBACNjC,KAAM,mDACN+J,OAAQ,mDACRwX,YAAa,mDACbkI,QAAS,+DACT,YAAa,oGACb,gBAAiB,sHACjB7B,UAAW,2BACXhK,UAAW,4EAEbqM,MAAO,CACLlgB,OAAQ,CACN0iB,QAAS,6CACTC,QAAS,yDACTC,QAAS,8FACTC,QAAS,6CACTC,SAAU,kFAEZ5qB,KAAM,CACJglB,KAAM,uCACN8E,KAAM,8EAIZ0E,QAAS,CACPzwB,KAAM,6IACNynB,OAAQ,CACNtO,KAAM,qEACNyO,UAAW,uCACXG,UAAW,qDAGf2I,cAAe,CACb1wB,KAAM,6CACNknB,KAAM,6CACNO,OAAQ,CACNxZ,GAAI,KACJhM,KAAM,qBACNjC,KAAM,mDACN+J,OAAQ,mDACRwX,YAAa,mDACbkI,QAAS,+DACT,YAAa,oGACb,gBAAiB,sHACjB7B,UAAW,2BACXhK,UAAW,4EAEbqM,MAAO,CACLlgB,OAAQ,CACN2U,OAAQ,6CACRC,OAAQ,yDACR8H,OAAQ,8FACRgJ,OAAQ,6CACRC,QAAS,kFAEXztB,KAAM,CACJglB,KAAM,uCACN8E,KAAM,8EAIZ4E,aAAc,CACZ3wB,KAAM,oFACNknB,KAAM,oFACNO,OAAQ,CACNxZ,GAAI,KACJhM,KAAM,qBACNjC,KAAM,mDACNuhB,YAAa,oDAEf6F,OAAQ,CACNwJ,OAAQ,uCACRC,OAAQ,8CAEVnF,MAAO,uJACPC,OAAQ,kGAGZmF,KAAM,CACJ3J,MAAO,uEAETD,KAAM,CACJ6J,OAAQ,CACNC,QAAS,GACThK,UAAW,6CACXqF,OAAQ,uCACR4E,YAAa,qEACbC,MAAO,+CAGXC,GAAI,CACFpnB,OAAO,2BACFqnB,KAAgBD,GAAGpnB,QADlB,IAEJsnB,SAAU,wFACVC,aAAc,8FACdC,mBAAoB,wFACpB1kB,OAAQ,8FACR2kB,eAAgB,4EAChBC,2BAA4B,uHAC5BC,SAAU,6CACVC,mBAAoB,+FACpBC,cAAe,sEACfC,0BAA2B,iHAC3BC,yBAA0B,6KAC1BC,kBAAmB,yFACnBC,aAAc,gEACdhlB,QAAS,2EACTilB,oBAAqB,uGACrBC,mBAAoB,uGACpBC,kBAAmB,6HACnBC,QAAS,+DACTC,KAAM,iDACNC,SAAU,yDACVC,KAAM,iFACNC,YAAa,8FACbC,aAAc,kFACdC,eAAgB,kFAChB,mBAAoB,qGACpBC,yBAA0B,2JAC1BC,YAAa,kFACbC,cAAe,wFACfC,WAAY,6CACZC,gBAAiB,yFACjBC,cAAe,8HACfC,IAAK,iFACLC,MAAO,uFACPC,aAAc,iCACdC,aAAc,sLAEhBC,QAAA,eACKjC,KAAgBD,GAAhB,SAEL3gB,KAAK,2BACA4gB,KAAgBD,GAAG3gB,MADpB,IAEF8iB,QAAS,0DACT5H,MAAO,yFACPC,OAAQ,gGACR4H,QAAS,+CAEXvlB,MAAM,2BACDojB,KAAgBD,GAAGnjB,OADnB,IAEH9C,SAAU,CACRsoB,eAAgB,mDAChBC,cAAe,0CAGnBtrB,QAAQ,2BACHipB,KAAgBD,GAAGhpB,SADjB,IAELurB,qBAAsB,6CACtBC,uBAAwB,oOACxBvxB,IAAK,qBACLwxB,QAAS,uGACTL,QAAS,kJAEXM,WAAW,eACNzC,KAAgBD,GAAG0C,YAExB/T,KAAK,2BACAsR,KAAgBD,GAAGrR,MADpB,IAEFgU,kBAAmB,gEACnB,+BAAgC,8SAChC,iBAAkB,8SAClB,uCAAwC,sOACxC,oDAAqD,wRACrD,4BAAwB,6GAE1BxH,aAAa,2BACR8E,KAAgBD,GAAG7E,cADZ,IAEVyH,cAAe,8FACfC,eACE,sgBACFC,oBACE,8kBACFC,mBACE,wfACFC,qBACE,keACFC,oBACE,gdACFC,4BACE,ofACFC,2BACE,keACFC,kBAAmB,gGACnBC,YAAa,oJACbC,cAAe,4JAEjBC,WAAW,2BACNtD,KAAgBD,GAAGuD,YADd,IAERC,WAAY,kIACZC,cAAe,oIACfC,wBAAyB,oOACzBC,eAAgB,oLAChBC,cAAe,8KACfC,gBAAiB,sMACjB,WAAY,2JACZC,iBAAkB,gTAClBC,WAAY,4KC/+BZC,GAAW,CACfC,GAAIC,KACJC,GAAIlE,IAGOmE,GAAeC,cAAqB,SAAC7Z,GAAD,OAAYwZ,GAASxZ,KAAS,M,UCPlE8Z,GAAQC,aAAe,CAClCC,QAAS,CAEPC,QAAS,CACPC,MAAO,UACPxO,KAAM,UACNyO,KAAM,UACNC,aAAc,QAEhBC,UAAW,CACTH,MAAO,UACPxO,KAAM,UACNyO,KAAM,UACNC,aAAc,QAEhBE,WAAY,CACVjF,QAAS,WAEXjqB,KAAM,CACJsgB,KAAM,YAGV6O,QAAS,CACPrf,MAAO,IACPsf,YAAa,IAEfC,UAAW,CACTC,SAAU,CACRC,WAAY,CACVC,UACE,uHAGNC,eAAgB,CACdC,KAAM,CACJC,gBAAiB,sBACjB,aAAc,CACZA,gBAAiB,yBAIvBC,aAAc,CACZC,UAAW,CACTC,QAAS,UACT,gBAAiB,CACfC,YAAa,IAEf,eAAgB,CACdC,aAAc,MAIpBC,gBAAiB,CACfP,KAAM,CACJQ,SAAU,QACVC,YAAa,KAGjBC,eAAgB,CACdC,WAAW,EACXX,KAAM,CACJ5f,MAAO,SAGXwgB,QAAS,CACPZ,KAAM,CACJa,OAAQ,EACRC,aAAc,O,+RC3DhBC,GAAYC,cAChB,SAAChC,GAAD,YAAY,CACViC,WAAS,GACPC,QAAS,OACTC,cAAe,SACfC,eAAgB,UAHT,eAINpC,EAAMqC,YAAYC,GAAG,MAAQ,CAC5BjhB,OAAQ,SALH,eAON2e,EAAMqC,YAAYE,KAAK,MAAQ,CAC9BlhB,OAAQ,QACRmhB,UAAW,SATN,GAYTC,KAAM,CACJrhB,MAAO,MACPC,OAAQ,OAEV3O,QAAS,CACPgwB,UAAW,SACXC,WAAY,qBACZC,QAAS,GACTf,OAAQ,SAEVgB,QAAS,CACPH,UAAW,SACXF,UAAW,OAEbM,IAAK,CACHC,WAAY,OAGhB,CAAEx4B,KAAM,iBAoCJy4B,GAAoB,SAAC,GAAD,EAAGC,cAAH,EAAkBC,QAAlB,EAA2B9f,SAA3B,EAAqCzY,MAArC,uEASXw4B,GAlCA,SAACC,GAAW,IACjBC,EAAkGD,EAAlGC,UAA+CC,GAAmDF,EAAvFG,QAAuFH,EAA7D/0B,SAA6D+0B,EAAnDE,UAAUE,EAAyCJ,EAAzCI,OAAQ9R,EAAiC0R,EAAjC1R,MAAO+R,EAA0BL,EAA1BK,aAAiBC,EADzE,aACkFN,EADlF,+EAElBG,EAAUxB,GAAUqB,GACpBO,EAAYC,eAElB,OADAC,eAEE,uCAAKR,UAAWS,KAAWP,EAAQtB,UAAWoB,IAAgBL,GAAkBU,IAC9E,kBAACK,GAAA,EAAD,CAAOrS,MAAOA,EAAO+R,aAAcA,EAAcD,OAAQA,IACzD,yBAAKH,UAAWE,EAAQ7wB,SACtB,kBAAC,KAAD,CAAY2wB,UAAWE,EAAQd,OAC/B,4BAAKkB,EAAU,oBACf,6BAAMA,EAAU,sBAAhB,MAEF,yBAAKN,UAAWE,EAAQV,SACtB,kBAACmB,GAAA,EAAD,CAAQC,QAAQ,YAAYC,UAAWC,KAAMC,GAAId,EAAUD,UAAWE,EAAQT,KAC3Ea,EAAU,mBAEb,kBAACK,GAAA,EAAD,CAAQC,QAAQ,YAAYC,UAAWC,KAAMC,GAAE,aAAgBf,UAAWE,EAAQT,KAC/Ea,EAAU,4BC9BRU,GAAW,SAACjB,GAAW,IAEhCkB,EAsBElB,EAtBFkB,QACAC,EAqBEnB,EArBFmB,MACAjB,EAoBEF,EApBFE,SACAlhB,EAmBEghB,EAnBFhhB,SAEAihB,GAiBED,EAlBFG,QAkBEH,EAjBFC,WACWmB,EAgBTpB,EAhBFc,UACAT,EAeEL,EAfFK,aACAgB,EAcErB,EAdFqB,QACAC,EAaEtB,EAbFsB,QACAlB,EAYEJ,EAZFI,OAEAn1B,GAUE+0B,EAXFuB,SAWEvB,EAVF/0B,UACAu2B,EASExB,EATFwB,KACAC,EAQEzB,EARFyB,aACAC,EAOE1B,EAPF0B,aACAC,EAME3B,EANF2B,aACAC,EAKE5B,EALF4B,OACAtT,EAIE0R,EAJF1R,MACAuT,EAGE7B,EAHF6B,SACAC,EAEE9B,EAFF8B,QACGxB,EAvB4B,aAwB7BN,EAxB6B,yOAyB3BG,EAAUxB,GAAUqB,GAEpB+B,EAAyBC,mBAC7B,iBAAO,CAAEP,eAAcC,eAAcC,kBACrC,CAACD,EAAcD,EAAcE,IAG/B,GAAIvB,GAAUA,EAAOrF,QACnB,OAAO,kBAAC,GAAD,CAAQ9vB,SAAUA,EAAUi1B,SAAUA,EAAUE,OAAQA,EAAQ9R,MAAOA,EAAO+R,aAAcA,IAGrG,IAAM4B,EAAkC,qBAAZf,GAA2BI,EAAU,kBAAC,KAAD,MAAqBJ,EAEtF,OAAKliB,EAIH,kBAAC,KAAkBkjB,SAAnB,CAA4Br6B,MAAOk6B,GACjC,uCAAK9B,UAAWS,KAAW,YAAaP,EAAQvC,KAAMqC,IAAgBL,GAAkBU,IACtF,kBAAC,KAAD,CAAgBhS,MAAOA,EAAO8R,OAAQA,EAAQC,aAAcA,IAC3D4B,GACCE,uBAAaF,EAAD,aACV/B,WACA/wB,KAAMixB,EACNkB,UACAD,UACAp2B,YAEGg3B,EAAajC,QAEpB,yBACEC,UAAWS,KAAWP,EAAQ3R,KAAT,gBAClB2R,EAAQiC,WAAaH,KAGxB,kBAACb,EAAD,CAASnB,UAAWE,EAAQkC,MACzBjC,GACCkC,IAAMC,SAAS/4B,IAAIwV,GAAU,SAAClI,EAAOsL,GAAR,OAC3BkgB,IAAME,eAAe1rB,GACjBwrB,IAAMH,aAAarrB,EAAO,CACxBxL,IAAK8W,EACL8d,WACAE,SAMAn1B,WACAu2B,OACAI,SACAC,WACAC,YAEF,SAGTX,GACCmB,IAAMH,aAAahB,EAAO,CACxBjB,WACAE,SACAn1B,WACA62B,UACAN,OACAI,cAlDH,MAkFXX,GAASwB,aAAe,CACtBtC,QAAS,GACTW,UAAW,OAGb,IAAMnC,GAAYC,aAChB,CACEhB,KAAM,GACNpP,KAAM,CACJsQ,QAAS,QAEXsD,UAAW,CACThD,UAAW,OAEbiD,KAAM,CACJK,KAAM,aAGV,CAAEv7B,KAAM,WAGJy4B,GAAoB,SAAC,GAAD,EACxB+C,UADwB,EAExBC,QAFwB,EAGxB9C,QAHwB,EAIxB1qB,GAJwB,EAKxBytB,OALwB,EAMxBvqB,QANwB,EAOxB0H,SAPwB,EAQxBzY,MARwB,EASxBu7B,UATwB,EAUxBC,UAVwB,EAWxBj7B,QAXwB,EAYxBk7B,YAZwB,EAaxBC,eAbwB,EAcxBp4B,UAdwB,kLAkBXq4B,GA1LF,SAAClD,GAAD,OACX,kBAACmD,GAAA,EAAD,CAAqBt7B,MAAK,eAAOm4B,IAC/B,kBAAC,GAAD,iBAAcA,EAAWoD,aAAkBpD,O,mBCQhCJ,GAzBW,SAAC,GAAD,EACxByD,SADwB,EAExBC,WAFwB,EAGxBpD,SAHwB,EAIxBqD,cAJwB,EAKxBtD,UALwB,EAMxBuD,UANwB,EAOxBC,cAPwB,EAQxBlF,UARwB,EASxBmF,gBATwB,EAUxBC,MAVwB,EAWxBC,SAXwB,EAYxB11B,KAZwB,EAaxB4U,OAbwB,EAcxBsd,OAdwB,EAexBn1B,SAfwB,EAgBxB44B,SAhBwB,EAiBxBC,OAjBwB,EAkBxBC,YAlBwB,EAmBxBC,OAnBwB,EAoBxB1E,UApBwB,EAqBxB2E,gBArBwB,mRCOpBtF,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,CACJwB,UAAWxC,EAAMtb,QAAQ,GACzB4iB,aAActH,EAAMtb,UACpB,gBAAiB,CACf8d,UAAW,GAEb,eAAgB,CACd8E,aAAc,IAGlB1V,KAAM,OAsCO2V,GAnCK,SAAC,GAWd,IAVLnlB,EAUI,EAVJA,SAUI,IATJ8hB,UAAWsD,OASP,MATmBC,KASnB,EARKC,EAQL,EARJnE,QACAF,EAOI,EAPJA,UACAh1B,EAMI,EANJA,SACAi1B,EAKI,EALJA,SACAE,EAII,EAJJA,OACA0B,EAGI,EAHJA,QACA6B,EAEI,EAFJA,MACG3D,EACC,gHACEG,EAAUxB,GAAU,CAAEwB,QAASmE,IAC/B/D,EAAYC,eAClB,OAAKJ,EAEH,yBAAKH,UAAS,UAAKE,EAAQvC,KAAb,YAAqBqC,IAChC0D,GACC,kBAACY,GAAA,EAAD,CAAY1D,QAAQ,YAAYhhB,MAAM,gBAAgB2kB,cAAY,EAACC,QAAM,GACtElE,EAAU,aAAD,OAAct1B,EAAd,mBAAiC04B,KAG/C,kBAACS,EAAD,CAAWnE,UAAWE,EAAQ3R,MAC3B2T,uBAAaI,WAASmC,KAAK1lB,GAAf,aACX/T,WACAi1B,WACAE,SACA0B,WACGlC,GAAkBI,OAdT,M,8BCVPJ,GAzBW,SAAC,GAAD,EACxByD,SADwB,EAExBC,WAFwB,EAGxBpD,SAHwB,EAIxBqD,cAJwB,EAKxBtD,UALwB,EAMxBuD,UANwB,EAOxBC,cAPwB,EAQxBlF,UARwB,EASxBmF,gBATwB,EAUxBC,MAVwB,EAWxBC,SAXwB,EAYxB11B,KAZwB,EAaxB4U,OAbwB,EAcxBsd,OAdwB,EAexBn1B,SAfwB,EAgBxB44B,SAhBwB,EAiBxBC,OAjBwB,EAkBxBC,YAlBwB,EAmBxBC,OAnBwB,EAoBxB1E,UApBwB,EAqBxB2E,gBArBwB,mRCOpBU,GAAgB/F,cAAW,SAAChC,GAAD,MAAY,CAC3CgB,KAAM,GACN+F,MAAO,CACL7E,QAAS,QACT8F,SAAU,SACVC,aAAc,WACdC,WAAY,cAIVC,GAAW,SAAC,GAAiF,IAA/E9E,EAA8E,EAA9EA,UAAoBqE,EAA0D,EAAnEnE,QAA0BC,EAAyC,EAAzCA,OAAQ4D,EAAiC,EAAjCA,OAAQ/4B,EAAyB,EAAzBA,SAAa+0B,EAAY,qEAC1FG,EAAUwE,GAAc,CAAExE,QAASmE,IACnC/D,EAAYC,eAEZwE,EAAYx5B,KAAI40B,EAAQ4D,GAC9B,IAAKgB,EACH,OAAO,KAGT,IAAMrB,EAAQpD,EAAU,aAAD,OAAct1B,EAAd,kBAAgC+4B,EAAhC,YAA0CgB,GAAa,CAAEt3B,EAAGs3B,IAEnF,OACE,kBAACC,GAAA,EAAD,eACE9E,QAAS,CAAEvC,KAAMuC,EAAQvC,KAAM+F,MAAOxD,EAAQwD,OAC9C1D,UAAS,UAAKA,GACd0D,MAAOA,GACH/D,GAAkBI,MAK5B+E,GAAStC,aAAe,CACtBY,UAAU,GAGG0B,UCrCTpG,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,CACJa,OAAQ,WAEVyG,OAAQ,CACNrH,gBAAiB,UACjBhe,MAAO,YAILslB,GAAa,SAAC,GAA0B,IAAxB/E,EAAuB,EAAvBA,OACdD,GADqC,2BAC3BxB,MACVyG,EAAcC,cAAY,SAACC,GAAD,OAAWA,EAAMF,cAAaG,MAC9D,IAAKnF,EAAQ,OAAO,KACpB,IAAMoF,EAAWJ,EAAY5xB,SAAS4sB,EAAOhrB,IACvCuuB,EAAQ6B,EAAW,uCAAW,6CAEpC,OAAO,kBAACP,GAAA,EAAD,CAAM9E,QAAS,CAAEvC,KAAMuC,EAAQvC,MAAQqC,UAAWuF,EAAWrF,EAAQ+E,OAAS,GAAIvB,MAAOA,KAGlGwB,GAAW1C,aAAe,CACxBY,UAAU,GAGG8B,UCnBTxG,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,CACJwB,UAAWxC,EAAMtb,QAAQ,GACzB4iB,aAActH,EAAMtb,UACpB,gBAAiB,CACf8d,UAAW,IAGfqG,YAAa,CACXznB,MAAO4e,EAAMtb,QAAQ,IACrBrD,OAAQ2e,EAAMtb,QAAQ,IACtB/C,SAAU,QAEZmnB,WAAY,CACV7lB,MAAO+c,EAAME,QAAQ6I,gBAAgB/I,EAAME,QAAQzyB,MAAMmkB,MACzDqP,gBAAiBjB,EAAME,QAAQzyB,MAAMmkB,UA2C1BoX,GAvCI,SAAC,GAAuD,IAA5CtB,EAA2C,EAApDnE,QAA0BF,EAA0B,EAA1BA,UAAcD,EAAY,wCAClEG,EAAUxB,GAAU,CAAEwB,QAASmE,IAC7BlE,EAAqBJ,EAArBI,OAAqBJ,EAAb/0B,SAChB,IAAKm1B,EACH,OAAO,KAET,IAAMj5B,EAAOi5B,EAAOj5B,KACduhB,EAAc0X,EAAO1X,YACrBtT,EAAKgrB,EAAOhrB,GACZgS,EAASgZ,EAAOhZ,OAEtB,OACE,kBAACid,GAAA,EAAD,CAAMpE,UAAS,UAAKE,EAAQvC,KAAb,YAAqBqC,IAClC,kBAAC4F,GAAA,EAAD,KACE,kBAACC,GAAA,EAAD,CAAMjH,WAAS,EAACvd,QAAS,GACvB,kBAACwkB,GAAA,EAAD,CAAM5wB,MAAI,EAAC6wB,IAAE,GACX,kBAACxB,GAAA,EAAD,CAAY1D,QAAQ,KAAK2D,cAAY,GAClCr9B,GAEH,kBAACo9B,GAAA,EAAD,CAAY1D,QAAQ,aAAanY,IAEnC,kBAACod,GAAA,EAAD,CAAM5wB,MAAI,EAAC6wB,GAAG,QACZ,kBAACxB,GAAA,EAAD,CAAY1D,QAAQ,QAAQhhB,MAAM,iBAC/BzK,KAIP,kBAAC0wB,GAAA,EAAD,CAAMjH,WAAS,EAACvd,QAAS,GACvB,kBAACwkB,GAAA,EAAD,CAAM5wB,MAAI,EAAC6wB,IAAE,GACX,kBAAC,GAAD,iBAAc/F,EAAd,CAAqBgE,OAAO,UAC5B,kBAAC,GAAD,CAAY5D,OAAQA,IACnBhZ,GAAU,kBAAC6d,GAAA,EAAD,CAAMhF,UAAS,UAAKE,EAAQ6F,KAAb,YAAqB7F,EAAQuF,YAAc/B,MAAM,2EAAetkB,KAAK,gB,uCC1D9F4mB,GAAU,SAAC3zB,GAAD,MAAW,CAChClJ,KAHsB,WAItB88B,QAAS,CAAE5zB,UCDE,YAAC3B,GACd,OAAOqS,GAAoB1S,MAAM,CAC/BA,MAAO6M,GACPvO,UAAU,eAAM+B,GAChBmB,YAAa,eACbjD,QAAS,SAACxE,GACRyE,MAAMzE,OCqDG87B,GAnCW,SAAC,GAA4C,EAA1CvE,OAA2C,IAAnCxB,EAAkC,EAAlCA,OAAkC,KAA1BH,UAA0B,gDACvCmG,aAAU,YAD6B,mBAC9D3zB,EAD8D,KACpD6F,EADoD,KACpDA,QACX+tB,EAASC,eACTC,EAAYC,eACZC,EAAWC,eA4BjB,OAAO,kBAACC,GAAA,EAAD,CAAYC,YA1BC,kBAClBn0B,EACE,CACErJ,KAAM,SACN6B,SAAU,UACVi7B,QAAS,CACP9wB,GAAIgrB,EAAOhrB,GACXjG,KAAK,eAAMo3B,EAAUvwB,QACrBY,aAAa,eAAMwpB,KAGvB,CACE2C,UAAU,WAAD,4BAAE,iCAAAp1B,EAAA,yDAASwB,EAAT,EAASA,KAClBk3B,EAAO,iCACFl3B,EAAKgkB,UAAahkB,EAAKgkB,QAAQ9pB,SAAU8F,EAAK8Q,aAF1C,iCAKG4mB,GAAe,CAAEzxB,GAAIjG,EAAK8Q,cAL7B,gBAISA,EAJT,EAIL9Q,KAAQA,KAEVs3B,EAASR,GAAQ,2BAAK92B,GAAN,IAAYgkB,QAASlT,EAAYkT,QAAQ3pB,KAAI,SAAC+H,GAAD,OAAOA,EAAE6D,UAN/D,wBAQPqxB,EAASR,GAAQ92B,IARV,4CAAF,mDAAC,MAc6B23B,SAAUxuB,K,4DC3D1C,iBACb+qB,SADa,EAEbC,WAFa,EAGbpD,SAHa,EAIbqD,cAJa,EAKbtD,UALa,EAMbwD,cANa,EAObC,gBAPa,EAQbC,MARa,EASbC,SATa,EAUb11B,KAVa,EAWb4U,OAXa,EAYbsd,OAZa,EAabn1B,SAba,EAcb44B,SAda,EAebC,OAfa,EAgBbE,OAhBa,EAiBb1E,UAjBa,EAkBb2E,gBAlBa,6OCOT8C,GAAgB,CAACC,aADR,qEACsB,gCAC/BC,GAAa,SAACp/B,GAAD,OAAWA,EAAMJ,QAAQ,YAAa,KAEnDy/B,GAAiB,SAAC,GAAkB,IAAblH,EAAY,oBAC/BmH,EAAuBnH,EAAvBmH,SAAal+B,EADkB,aACR+2B,EADQ,cAGvC,OACE,kBAAC,KAAD,iBACM/2B,EADN,CAEEm+B,IAAK,SAACA,GACJD,EAASC,EAAMA,EAAIC,aAAe,OAEpCC,KAAM,CAAC,IAAK,IAAK,IAAK,IAAK,QAAS,KAAM,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,MACnGC,mBAAmB,EACnBC,gBAAiB,SACjBC,OAAO,MAgEEC,GA3DI,SAAC,GAiBb,IAhBL3kB,EAgBI,EAhBJA,OACA4kB,EAeI,EAfJA,WACAhE,EAcI,EAdJA,MAcI,IAbJlF,cAaI,MAbK,QAaL,EAZJmJ,EAYI,EAZJA,OACAC,EAWI,EAXJA,QACAC,EAUI,EAVJA,SACAhgC,EASI,EATJA,QASI,IARJigC,aAQI,MARId,GAQJ,MAPJe,gBAOI,MAPOjB,GAOP,EANJ97B,EAMI,EANJA,SACA+4B,EAKI,EALJA,OAKI,IAJJnD,eAII,MAJM,SAIN,EAHJoH,EAGI,EAHJA,WACAhI,EAEI,EAFJA,UACGK,EACC,6KAMA4H,aAAS,aACXnlB,SACA6kB,SACAE,WACAD,UACAE,QACA98B,WACA+4B,SACAgE,YACG1H,IAbHlrB,EAFE,EAEFA,GACAD,EAHE,EAGFA,MACAgzB,EAJE,EAIFA,WAJE,IAKFC,KAAQ/9B,EALN,EAKMA,MAAOg+B,EALb,EAKaA,QAajB,OACE,kBAACC,GAAA,EAAD,eACElzB,GAAIA,GACAD,EAFN,CAGE8qB,UAAWA,EACXY,QAASA,EACTx2B,SAAUg+B,IAAWh+B,GACrBs9B,WACGU,GAAWh+B,GAAUs9B,EACpB,kBAACY,GAAA,EAAD,CAAiBF,QAASA,EAASh+B,MAAOA,EAAOs9B,WAAYA,IAC3D,KAENhE,MAAO,kBAAC6E,GAAA,EAAD,CAAY7E,MAAOA,EAAOK,OAAQA,EAAQ/4B,SAAUA,EAAUk9B,WAAYA,IACjF1J,OAAQA,EACRgK,WAAU,2BACLR,GADK,IAERS,eAAgBxB,MAEdp/B,EACA83B,GAAkBU,M,0OC7E5B,IAAMqI,GAAYn6B,IAAH,MAYA,YAAUo6B,GAAW,IAAD,EACJC,mBAAS,IADL,mBAC1BzX,EAD0B,KACnB0X,EADmB,KAqBjC,OAlBAC,qBAAU,WAAM,4CACd,4BAAAp7B,EAAA,+EAE2BiD,GAAiBN,MAAM,CAC5CA,MAAOq4B,GACP/5B,UAAW,CAAEzH,KAAMyhC,GACnB/5B,QAAS,SAACxE,GACRyE,MAAMzE,MANd,OAEU2+B,EAFV,OAUIF,EAAYE,EAAS75B,KAAK85B,OAAOC,YAVrC,gDAYI5+B,QAAQC,IAAI,UAAZ,MAZJ,0DADc,uBAAC,WAAD,wBAgBd4+B,KACC,CAACP,IACGxX,GC/BHgY,GAAiB,SAAC,GAAuF,IAArFC,EAAoF,EAApFA,KAAM1gC,EAA8E,EAA9EA,OAAQy3B,EAAsE,EAAtEA,OAAQn1B,EAA8D,EAA9DA,SAAU+4B,EAAoD,EAApDA,OAAmBsF,GAAiC,EAA5C/I,UAA4C,EAAjC+I,SAASxhC,EAAwB,EAAxBA,QAAYk4B,EAAY,+FACtG5O,EAAQkY,EAAQD,GAEhBE,EAAWnY,EAAMzoB,QAAO,SAAC6gC,GAAD,OAAYA,EAAOriC,OAASqE,cAAI40B,EAAQ4D,MAEhEyF,EAAU9gC,EAAM,sBAAO4gC,GAAP,YAAoBnY,EAAMzoB,OAAOA,KAAWyoB,EAClE,OACE,kBAACsY,GAAA,EAAD,iBACM1J,EADN,CAEEgE,OAAQA,EACR/4B,SAAUA,EACVw+B,QAASA,EACTphC,YAAY,OACZshC,WAAY,SAACH,GACX,OAAIA,EACK1hC,EAAUA,EAAU0hC,EAAOriC,KAApB,oBAAwC8D,EAAxC,kBAA0D+4B,EAA1D,YAAoEwF,EAAOriC,MAEpF,QAMfiiC,GAAe3G,aAAe,CAC5B6G,YAQaF,U,gCChCTQ,GAAY,SAAC,GAAuF,IAArFP,EAAoF,EAApFA,KAAM1gC,EAA8E,EAA9EA,OAAQy3B,EAAsE,EAAtEA,OAAQn1B,EAA8D,EAA9DA,SAAU+4B,EAAoD,EAApDA,OAAmBsF,GAAiC,EAA5C/I,UAA4C,EAAjC+I,SAASxhC,EAAwB,EAAxBA,QAAYk4B,EAAY,+FACjG5O,EAAQkY,EAAQD,GAIhBI,GAFWrY,EAAMzoB,QAAO,SAAC6gC,GAAD,OAAYA,EAAOriC,OAASqE,cAAI40B,EAAQ4D,MAEtDr7B,EAAM,YAAOyoB,EAAMzoB,OAAOA,IAAWyoB,GAErD,OACE,kBAACyY,GAAA,EAAD,iBACM7J,EADN,CAEEgE,OAAQA,EACR/4B,SAAUA,EACVw+B,QAASA,EACTphC,YAAY,OACZshC,WAAY,SAACH,GAAD,OACV1hC,EACIA,EAAU0hC,EAAOriC,KACjB,oBAAa8D,EAAb,kBAA+B+4B,EAA/B,YAAyCwF,EAAOriC,MAAOM,QAAQ,aAAc,SAMzFmiC,GAAUnH,aAAe,CACvB6G,YAQaM,U,IC/BGhL,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,CACJ5f,MAAO,QAET0X,SAAU,CACRoJ,QAAS,OACTC,cAAe,MACfX,SAAU,IACVpgB,MAAO,Y,gDCZL2gB,GAAYC,aAChB,CACEkL,qBAAsB,CACpBC,OAAQ,GAEVC,iBAAkB,CAChBC,UAAW,OACXC,UAAW,SAGf,CAAE/iC,KAAM,iCAoCKgjC,GAjCoB,SAAC,GAO7B,IANLnrB,EAMI,EANJA,SACAorB,EAKI,EALJA,OACAC,EAII,EAJJA,UACAC,EAGI,EAHJA,QAGI,IAFJnK,QAASmE,OAEL,WAFuB38B,EAEvB,EADJ4iC,EACI,EADJA,0BAEMpK,EAAUxB,GAAU,CAAEwB,QAASmE,IAErC,OACE,kBAACkG,GAAA,EAAD,eACEC,KAAML,EACNM,SAAUJ,EACVrK,UAAWE,EAAQ2J,qBACnBa,UAAW,IACPJ,GAEJ,wBAAUH,EAASC,EAAY,GAC7B,kBAACO,GAAA,EAAD,CACEC,MAAO,CACLzL,UAAW,EACXhB,SAAUkM,EAAUA,EAAQQ,YAAc,MAE5C7K,UAAWE,EAAQ6J,kBAElBhrB,M,oDCpCL2f,GAAYC,cAChB,SAAChC,GAAD,MAAY,CACVgB,KAAM,CACJmN,WAAY,KAEdxB,SAAU,CACRwB,WAAY,KAEdC,WAAY,CACVlM,QAAS,QACTS,WAAY3C,EAAMqO,WAAW1L,YAE/B2L,eAAgB,CAAEH,WAAY,KAC9BI,0BAA2B,CAAEJ,WAAY,QAE3C,CAAE5jC,KAAM,iCAsDKikC,GAnDoB,SAAC,GAS7B,IAIDhkC,EACAikC,EAbJL,EAQI,EARJA,WACA5oB,EAOI,EAPJA,MACAkpB,EAMI,EANJA,iBACAC,EAKI,EALJA,WACAC,EAII,EAJJA,YACSlH,EAGL,EAHJnE,QACAsL,EAEI,EAFJA,kBACGnL,EACC,mHACEH,EAAUxB,GAAU,CAAEwB,QAASmE,IAC/BoH,EAAgBJ,IAAqBlpB,EACrC8oB,EAAiBO,EAAkBT,GASzC,OALKxI,yBAAe0I,KAClB9jC,EAAUG,KAAM2jC,EAAgBM,GAChCH,EAAQtD,KAAMmD,EAAgB9jC,IAI9B,kBAACukC,GAAA,EAAD,eACErgC,IAAK4/B,EACL3B,SAAUmC,EACVzL,UAAWS,KAAWP,EAAQvC,KAAT,gBAClBuC,EAAQoJ,SAAWgC,KAElBjL,GAEHkC,yBAAe0I,GACd/I,uBAAa+I,EAAgB,CAAEM,gBAE/B,yBAAKvL,UAAWE,EAAQ6K,YACrBK,EAAM7hC,KAAI,SAACoiC,EAAMxpB,GAChB,OAAOwpB,EAAKC,UACV,0BAAMvgC,IAAK8W,EAAO6d,UAAWE,EAAQgL,2BAClCS,EAAKzsB,MAGR,4BAAQ7T,IAAK8W,EAAO6d,UAAWE,EAAQ+K,gBACpCU,EAAKzsB,YC0PhBwf,GAAYC,aAChB,CACEC,UAAW,CACTiN,SAAU,EACVC,SAAU,aAGd,CAAE5kC,KAAM,wBAGK6kC,GA5TW,SAAChM,GAAW,IAElCsD,EAuCEtD,EAvCFsD,WACArD,EAsCED,EAtCFC,UAHiC,GAyC/BD,EArCFG,QAqCEH,EApCFyJ,gBALiC,MAKvB,GALuB,EAMjCjG,EAmCExD,EAnCFwD,UACAyI,EAkCEjM,EAlCFiM,WACAlpB,EAiCEid,EAjCFjd,OACAwb,EAgCEyB,EAhCFzB,UACAoJ,EA+BE3H,EA/BF2H,WACIuE,EA8BFlM,EA9BF5qB,GACO+2B,EA6BLnM,EA7BF7qB,MACYi3B,EA4BVpM,EA5BFmI,WACAxE,EA2BE3D,EA3BF2D,MACA0I,EA0BErM,EA1BFqM,oBAfiC,EAyC/BrM,EAzBFvB,cAhBiC,MAgBxB,QAhBwB,EAiBjC6N,EAwBEtM,EAxBFsM,gBACMC,EAuBJvM,EAvBFoI,KACAR,EAsBE5H,EAtBF4H,OACAE,EAqBE9H,EArBF8H,SACAD,EAoBE7H,EApBF6H,QArBiC,EAyC/B7H,EAnBFl4B,QAAWyiC,GAtBsB,aAsB4C,CAC3EA,+BAA2B5iC,EAC3B6kC,gBAAY7kC,EACZ8gC,gBAAY9gC,GAzBmB,GAsBtB4iC,0BAA2BiC,EAtBL,EAsBKA,WAAY/D,EAtBjB,EAsBiBA,WAAe3gC,EAtBhC,0EAyC/Bk4B,EAdF2J,kBA3BiC,MA2BpB,OA3BoB,EA4BjC8C,EAaEzM,EAbFyM,UA5BiC,EAyC/BzM,EAZF33B,mBA7BiC,MA6BnB,KA7BmB,EA8BjC0/B,EAWE/H,EAXF+H,MACA98B,EAUE+0B,EAVF/0B,SACAyhC,EASE1M,EATF0M,UACyBC,EAQvB3M,EARF4M,wBACA5I,EAOEhE,EAPFgE,OACA6I,EAME7M,EANF6M,gBAnCiC,EAyC/B7M,EALFiE,uBApCiC,SAqCjC+D,EAIEhI,EAJFgI,SArCiC,EAyC/BhI,EAHFa,eAtCiC,MAsCvB,SAtCuB,IAyC/Bb,EAFF8M,sBAvCiC,MAuChB,kBAAC,GAAD,MAvCgB,EAwC9BxM,EAxC8B,aAyC/BN,EAzC+B,gaA2CnC,GAAIwC,yBAAemH,KAAgB8C,EACjC,MAAM,IAAIp9B,MAAJ,kLAMR09B,aACEvK,yBAAemH,KAAgB2C,EAD1B,yLASP,IAAMnM,EAAUxB,GAAUqB,GAEtBsK,EAAU0C,mBACVtC,EAAWsC,mBA9DoB,EAqE/B9E,aAAS,aACXnlB,SACA3N,GAAI82B,EACJ/2B,MAAOg3B,EACP/D,KAAMmE,EACN3E,SACAE,WACAD,UACAE,QACA98B,WACA+4B,SACAgE,YACG1H,IAhBHlrB,GAjEiC,EAiEjCA,GACAD,GAlEiC,EAkEjCA,MACAgzB,GAnEiC,EAmEjCA,WAnEiC,KAoEjCC,KAAQC,GApEyB,GAoEzBA,QAASh+B,GApEgB,GAoEhBA,MApEgB,GAoFGw+B,mBAAS,IApFZ,qBAoF5B2C,GApF4B,MAoFfyB,GApFe,MAsF7BC,GAAyBC,uBAC7B,SAACtlC,GAAD,OAAW4hC,EAAQp2B,MAAK,SAACm2B,GAAD,OAAYh+B,KAAIg+B,EAAQnhC,KAAiBR,OACjE,CAAC4hC,EAASphC,IAGN+kC,GAAepL,mBACnB,kBAAMkL,GAAuB/3B,GAAMtN,QAAU,OAC7C,CAACsN,GAAMtN,MAAOqlC,KA7FmB,GAgGuBG,aAAe,CACvE/J,aACAmG,UACAjG,YACAyI,aACAI,sBACAC,kBACA3C,aACAthC,cACA+kC,gBACAP,kBACA5I,oBAXMqJ,GAhG2B,GAgG3BA,cAAeC,GAhGY,GAgGZA,eAAgBC,GAhGJ,GAgGIA,eAcjCC,GAAqBN,uBACzB,SAACO,GACC,IAAMC,EAAQD,EACR7lC,EAAQ8lC,EAAM11B,OAAS01B,EAAM11B,OAAOpQ,MAAQ6lC,EAE9ChB,GACFA,EAAU7kC,KAGd,CAAC6kC,IAOH3D,qBAAU,WACR0E,GAAmB,IAInBR,GACyB,qBAAhB93B,GAAMtN,OAAyC,OAAhBsN,GAAMtN,OAAmC,OAAjBulC,GAC1D,GACAX,EACAA,EAAUa,GAAcF,IAAcpN,MAAMI,QAC5CkN,GAAcF,OAEnB,CAACj4B,GAAMtN,MAAO4lC,GAAoBL,GAAcE,GAAeb,IAElE,IAAMmB,GAAeT,uBACnB,SAACj4B,GACCC,GAAM2yB,SAASyF,GAAer4B,MAEhC,CAACq4B,GAAgBp4B,KA4Bb04B,GAAgB,SAAC14B,GACrBm1B,EAAQwD,QAAU34B,EAxBG,WACrB,GAAKm1B,EAAQwD,QAAb,CAIA,IAAMC,EAAgBzD,EAAQwD,QAAQE,wBAKtC,GAAKtD,EAASoD,QAEP,CACL,IAAMG,EAAiBvD,EAASoD,QAAQE,wBAEpCC,EAAeC,IAAMH,EAAcG,GAAKD,EAAeE,IAAMJ,EAAcI,IAC7EzD,EAASoD,QAAU,CACjBE,sBAAuB,kBAAMD,UANjCrD,EAASoD,QAAU,CAAEE,sBAAuB,kBAAMD,KAcpDK,IAGIC,GAAalB,uBACjB,SAACQ,GACCF,GAAmB,IAInBR,GACE93B,GAAMtN,MACF4kC,EACEA,EAAUa,GAAcF,IAAcpN,MAAMI,QAC5CkN,GAAcF,IAChB,IAENj4B,GAAMyyB,OAAO+F,KAEf,CAACL,GAAeG,GAAoBt4B,GAAOs3B,EAAWW,KAGlDkB,GAAcnB,uBAClB,SAACoB,GAAD,OAAc,SAACZ,GACbY,EAASZ,GACTx4B,GAAM0yB,QAAQ8F,MAEhB,CAACx4B,KAWH,OACE,kBAAC,KAAD,eACEq5B,WAAYhD,GACZ1D,SAAU8F,GACVR,aAAcA,GACdqB,aAAc,SAACv5B,GAAD,OAAUq4B,GAAer4B,KACnCorB,IAEH,YAAuG,IAhB3E/Y,EAgBzBmnB,EAAmG,EAAnGA,cAAeC,EAAoF,EAApFA,aAAcC,EAAsE,EAAtEA,cAAeC,EAAuD,EAAvDA,aAAczE,EAAyC,EAAzCA,OAAQkB,EAAiC,EAAjCA,iBAAkBiD,EAAe,EAAfA,SAChFO,EAAa1E,IAjBQ7iB,EAiB0BikB,QAhBjB7jC,IAApCglC,GAA4F,oBAApCA,GACnDA,EAAgCplB,IAcgE,EAYjGmnB,EAAc,aAChB9G,OAAQyG,GACRxG,QAASyG,GAAYC,IAClB9F,IAVHb,GALmG,EAGnGxyB,GAHmG,EAInGvN,MAJmG,EAKnG+/B,QAEAC,GAPmG,EAMnGC,SANmG,EAOnGD,SAEAxoB,GATmG,EAQnG+nB,IARmG,EASnG/nB,MACAQ,EAVmG,EAUnGA,MACGooB,EAXgG,kFAiB/F8G,EAAcvB,GAAehC,IAEnC,OACE,yBAAKvL,UAAWE,EAAQtB,WACtB,kBAACyJ,GAAA,EAAD,eACElzB,GAAIA,GACJjO,KAAMgO,GAAMhO,KACZshC,WAAY,CACVtB,SAAU0G,GACVjG,SACAE,SAAU,SAAC6F,GACTF,GAAmBE,GACnBV,GAAeU,EAAM11B,OAAOpQ,QAE9BggC,WAEFx9B,SAAUg+B,KAAWh+B,IACrBs5B,MACE,kBAAC6E,GAAA,EAAD,eACE7E,MAAOA,GACH6I,EAFN,CAGExI,OAAQA,EACR/4B,SAAUA,EACVk9B,WAA0C,qBAAvBiE,EAAqCA,EAAqBjE,MAGjF6G,gBAAiBJ,EAAc,CAC7BK,QAAS75B,KAEXuyB,WAAY,kBAACY,GAAA,EAAD,CAAiBF,QAASA,GAASh+B,MAAOA,GAAOs9B,WAAYA,IACzE9G,QAASA,EACTpC,OAAQA,EACRF,UAAWA,EACX12B,MAAO2jC,GACPvL,UAAWA,EACX5gB,KAAMA,EACNQ,MAAOA,GACHooB,EACAngC,IAEN,kBAAC,GAAD,CACEsiC,OAAQ0E,EACRzE,UAAWwE,EACT,GAEA,CAAEK,kBAAkB,IAEtB5E,QAASA,EAAQwD,QACjBvD,0BAA2BA,GAE1BwE,EAAYvlC,KAAI,SAACwhC,EAAY5oB,GAAb,OACfkgB,IAAMH,aAAa2K,EAAnB,aACExhC,IAAKiiC,GAAevC,GACpBA,aACA5oB,QACAkpB,mBACAC,WAAYp2B,GAAMtN,QAAU0lC,GAAevC,GAC3CQ,eACAC,kBAAmB6B,IAChBqB,EAAa,CAAEz5B,KAAM81B,eC/QpCmE,GAAe,CAAChY,eAAYiY,aAAU,IACtCC,GAAgB,CAACtoB,gBACjBggB,GAAgB,CAAC5P,gBAmBjBmY,IAjBY1Q,cAAW,SAAChC,GAAD,MAAY,CACvC2S,oBAAqB,CACnBnQ,UAAW,EACX8E,aAAc,GAEhBsL,IAAK,CACHvR,YAAa,GACbC,aAAc,IAEhBuR,iBAAkB,CAChBzR,QAAS,EACT,gBAAiB,CACf0R,WAAY,SAKI9Q,cAAW,SAAChC,GAAD,MAAY,CAC3CgB,KAAM,CACJ8R,WAAY,EACZC,cAAe,EACf3R,QAAS,EACT,gBAAiB,CACf0R,WAAY,IAGhBha,SAAU,CACRoJ,QAAS,OACTC,cAAe,YAIb6Q,GAAK,SAAC5P,GASV,OARA11B,QAAQC,IAAIy1B,GACZA,EAAM7qB,MAAMtN,MAAQm4B,EAAM7qB,MAAMtN,MAAM2B,KAAI,SAAC+d,GACzC,MAAmB,kBAARA,EACFA,EAAInS,GAEJmS,KAGJ,kBAACsoB,GAAA,EAA2B7P,IAG/B8P,GAAiB,SAAC9P,GACtB,OAAO,kBAAC+P,GAAA,EAAY/P,EAAQjvB,GAAQi/B,IAAI,SAAU,YAAc,kBAAC,GAAD,QAG5DC,GAAc,SAAC,GAAwC,EAAtCpQ,cAAuC,IAAxBO,EAAuB,EAAvBA,OAAWJ,EAAY,2CACrDkQ,EAAkB9M,aAAkBpD,GACpCmQ,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAC7DoF,EAAUmP,KACV/O,EAAYC,eAElB,OACE,kBAAC,GAAD,iBAAUR,EAAWkQ,EAArB,CAAsC9P,OAAM,2BAAOA,GAAP,IAAen1B,SAAU,SAAUqjB,MAAM,6CAAUrjB,SAAS,SACtG,kBAAC,GAAD,MACA,kBAAC,GAAD,KACE,kBAACmlC,GAAA,EAAD,CAAYjQ,QAASA,EAAS7J,KAAM,kBAAC+Z,GAAA,EAAD,CAAgBC,UAAQ,IAAK7Q,QAAS,kBAAC,GAAD,OACxE,kBAAC8Q,GAAA,EAAD,CAAS5M,MAAOpD,EAAU,+BACvBxvB,GAAQi/B,IAAI,SAAU,UAAW,SAChC,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,OAAOgE,SAAUmH,GAAcrI,SAAUqJ,EAAW5R,WAAS,IAEhFxtB,GAAQi/B,IAAI,SAAU,UAAW,gBAChC,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAC3J,SAAUqJ,EAAW5R,WAAS,IAEzExtB,GAAQi/B,IAAI,SAAU,UAAW,gBAChC,kBAACU,GAAA,EAAD,CACE1M,OAAO,cACPnsB,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B64B,UAAU,eACVhN,MAAM,oCACNH,UAAU,iBAEV,kBAAC,GAAD,CAAmBmG,WAAW,UAGlC,kBAACiH,GAAA,EAAD,CAAqB5M,OAAO,UAAUL,MAAM,gCAAgCgN,UAAU,eACpF,kBAAC,GAAD,CAAIhH,WAAW,UAEhB54B,GAAQi/B,IAAI,SAAU,UAAW,UAChC,kBAAC,GAAD,CACEhM,OAAO,QACPgE,SAAUjB,GACVkB,WAAY,CAAE4I,aAAc,gBAC5B/J,SAAUqJ,IAGbp/B,GAAQi/B,IAAI,SAAU,UAAW,UAChC,kBAACQ,GAAA,EAAD,CACExM,OAAO,QACP56B,KAAK,QACL4+B,SAAUqH,GACVpH,WAAY,CAAE4I,aAAc,gBAC5B/J,SAAUqJ,IAGbp/B,GAAQi/B,IAAI,SAAU,UAAW,aAChC,kBAACc,GAAA,EAAD,CAAe9M,OAAO,WAAWiE,WAAY,CAAE4I,aAAc,mBAGjE,kBAACN,GAAA,EAAD,CAAS5M,MAAOpD,EAAU,gCAAiCx4B,KAAK,UAC7DgJ,GAAQi/B,IAAI,SAAU,UAAW,YAChC,kBAACY,GAAA,EAAD,CACE5M,OAAO,UACPpsB,QAAS,IACT+4B,UAAU,SACVpS,WAAS,EACT4B,QAAS,CAAEtB,UAAWsB,EAAQoP,sBAE9B,kBAACM,GAAA,EAAD,CAAwBlG,WAAW,sBAGtC54B,GAAQi/B,IAAI,SAAU,UAAW,0BAChC,kBAAC,GAAD,CAAgBhM,OAAO,wBAAwBqF,KAAK,uBAAuB9K,WAAS,IAErFxtB,GAAQi/B,IAAI,SAAU,UAAW,cAChC,kBAAC,GAAD,CAAgBhM,OAAO,YAAYqF,KAAK,WAAW9K,WAAS,KAGhE,kBAACgS,GAAA,EAAD,CAAS5M,MAAOpD,EAAU,sCAAuCx4B,KAAK,gBACnEgJ,GAAQi/B,IAAI,SAAU,UAAW,wBAChC,kBAAC,GAAD,CAAgBhM,OAAO,sBAAsBqF,KAAK,sBAAsB9K,WAAS,SAS/F0R,GAAYxN,aAAe,CACzBx3B,SAAU,UACVi1B,SAAU,WACVqB,UAAU,GAGZ,IASewP,GATI,SAAC/Q,GAClB,IAAM1tB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC/BmB,eAGjB,OAFgBsK,cAChB5hC,GACKkD,EACE,kBAAC,GAAD,eAAa8C,GAAI9C,EAAK8C,GAAIgrB,OAAQ9tB,GAAU0tB,IADjC,M,6BCxKLiR,OARf,SAAcjR,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BAAM5nB,EAAE,oICKC64B,OARf,SAAcjR,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BAAM5nB,EAAE,sKCIRumB,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCuU,SAAU,gBAAGC,EAAH,EAAGA,aAAcC,EAAjB,EAAiBA,aAAjB,MAAqC,CAC7CxT,gBAAiBuT,EAAe,UAAYC,EAAe,UAAYzU,EAAME,QAAQM,WAAd,QACvEsB,aAAc9B,EAAMtb,QAAQ,GAC5BgwB,OAAQ,UACRtT,QAASpB,EAAMtb,QAAQ,GACvBge,UAAW,SACXzf,MAAO+c,EAAME,QAAQ3d,KAAK4d,QAC1BwU,WAAY,oCACZnS,UAAWxC,EAAMtb,QAAQ,GACzB4iB,aAActH,EAAMtb,QAAQ,SAI1BkwB,GAAU,SAAC9mC,GACf,OAAQA,GACN,IAAK,MACL,IAAK,OACL,IAAK,OACL,IAAK,OACH,OAAO,kBAAC,GAAD,CAAWmgC,MAAO,CAAEtsB,SAAU,MAEvC,QACE,OAAO,kBAAC,GAAD,CAAUssB,MAAO,CAAEtsB,SAAU,QAuD3BkzB,GAlDE,SAAC,GAAoC,IAAlC3J,EAAiC,EAAjCA,SAAU4J,EAAuB,EAAvBA,OAAQ5K,EAAe,EAAfA,SAC9BvG,EAAYC,eADiC,EAGzBqI,mBAAS,IAHgB,mBAG5CrgC,EAH4C,KAGrCmpC,EAHqC,OAOiBC,aAAY,CAC9EF,OACEA,GAAU,oGACZ5K,WACA+K,UAAU,EACVC,OAAQ,SAACC,GACP,IAAMC,EAAmB,sBACpBxpC,GADoB,YAEpBupC,EAAcppC,QAAO,SAACC,GAAD,OAAWJ,EAAM2gB,MAAK,SAACY,GAAD,OAAOA,EAAE5iB,MAAQyB,EAAKzB,aAEtEwqC,EAASK,GACTlK,EAASkK,MAXLC,EAP2C,EAO3CA,aAAcvD,EAP6B,EAO7BA,cAAe0C,EAPc,EAOdA,aAAcC,EAPA,EAOAA,aAe7ClR,EAAUxB,GAAU,CAAEyS,eAAcC,iBAQ1C,OACE,oCACE,uCAAKpR,UAAWE,EAAQgR,UAAcc,KACpC,0BAAWvD,KACX,2BAAInO,EAAU,iCAEhB,6BACG/3B,EAAMgB,KAAI,SAAC0oC,GAAD,OACT,kBAACjN,GAAA,EAAD,CACE5F,KAAMmS,GAAQU,EAAG/qC,KAAKkJ,MAAM,KAAK,IACjCszB,MAAOuO,EAAG/qC,KACVgrC,UAjBYC,EAiBWF,EAAG/qC,KAjBG,WACrC,IAAM6qC,EAAsBxpC,EAAMG,QAAO,SAACohB,GAAD,OAAOA,EAAE5iB,MAAQirC,KAC1DT,EAASK,GACTlK,EAASkK,KAeDnyB,MAAM,cAlBK,IAACuyB,Q,qBCxDlB/kC,GAAW4V,aAAiB,CAChC1V,IAAKJ,IAGDklC,GAAa5kC,YAAU,uCAAC,WAAOC,EAAP,oBAAAC,EAAA,6DAAYC,EAAZ,EAAYA,QAAZ,SACRC,KADQ,cACtBC,EADsB,yBAGrB,CACLF,QAAQ,2BACHA,GADE,IAELG,cAAeD,EAAK,iBAAaA,GAAU,OANnB,2CAAD,yDAWd,OAAIG,eAAa,CAC9BC,KAAMmkC,GAAW/jC,OAAOjB,IACxBc,MAAO,IAAIC,kB,qQCpBN,IAAM+U,GAAkB3U,IAAH,MAUb,YAACmC,GACd,OAAO2hC,GAAwB5jC,OAAO,CACpCC,SAAUwU,GACVvU,UAAU,eAAM+B,GAChB9B,QAAS,SAACxE,GACRyE,MAAMzE,O,mRCfL,IAAM8Y,GAAkB3U,IAAH,MAYb,YAACmC,GACd,OAAO2hC,GAAwB5jC,OAAO,CACpCC,SAAUwU,GACVvU,UAAU,eAAM+B,GAChB9B,QAAS,SAACxE,GACRyE,MAAMzE,OCLNs0B,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,CACJwB,UAAW,IAEb9Q,MAAO,CACL/P,SAAU,IAEZg0B,SAAU,CACR9T,OAAQ,IAEV+T,UAAW,CACTpT,UAAWxC,EAAMtb,QAAQ,GACzB4iB,aAActH,EAAMtb,QAAQ,GAC5BwqB,SAAU,EACVhN,QAAS,QAEX2T,UAAW,CACTx0B,OAAQ,GACRigB,aAActB,EAAMtb,QAAQ,GAC5B+c,YAAazB,EAAMtb,QAAQ,IAE7BoxB,UAAW,CACT/S,WAAY/C,EAAMtb,QAAQ,GAC1BwqB,SAAU,GAEZ6G,eAAgB,CACdzO,aAAc,GAEhB0O,eAAgB,CACdnU,OAAQ,IAEVoU,GAAI,CACFzT,UAAW,QAIF0T,GAAW,SAAC9S,GACvB,IAAMG,EAAUxB,KADiB,EAGW2D,IAAMuG,SAAS,MAH1B,mBAG1BkK,EAH0B,KAGVC,EAHU,OAIW1Q,IAAMuG,SAAS,MAJ1B,mBAI1BoK,EAJ0B,KAIVC,EAJU,OAKK5Q,IAAMuG,SAAS,MALpB,mBAK1BsK,EAL0B,KAKbC,EALa,KAM7BC,EAA+B,MAAlBN,GAA+C,QAArBA,EAAeO,GANzB,EAQWzK,mBAAS,IARpB,mBAQ1B0K,EAR0B,KAQVC,EARU,KAqFjC,OACE,kBAACnP,GAAA,EAAD,CAAMpE,UAAWE,EAAQvC,MACvB,kBAAC+C,GAAA,EAAD,CAAOrS,MAAM,kJACb,kBAACuX,GAAA,EAAD,KACE,kBAACtB,GAAA,EAAD,CAAYtE,UAAWE,EAAQ7R,MAAOzO,MAAM,gBAAgB2kB,cAAY,GAAxE,6QAGA,kBAAC,GAAD,CACEsD,SA5Ba,SAACt/B,GACpB4qC,EAAe,MACX5qC,EAAMa,OAAS,GACjB2pC,EAAkB,CAAES,IAAK,6NAA+CH,GAAI,SAC5EtL,GAAS,CAAEx/B,QAAOkrC,WAAY,mCAC3B9pC,MAAK,YAA6B,IAAlBo+B,EAAiB,EAAzB74B,KAAQ64B,SACfgL,EAAkB,MAClBE,EAAkBlL,GAClBwL,EAAmBxL,EAAS7e,MAAK,SAAC+kB,GAAD,OAAQA,EAAEyF,QAAgB,GAARnrC,MAJvD,OAMS,SAACorC,GACNZ,EAAkB,CAAES,IAAK,qGAAsBH,GAAI,eAGvDE,EAAkB,IAClBN,EAAkB,MAClBF,EAAkB,QAadlM,SAAUuM,EACV3B,OAAO,gGAERuB,GACCA,EAAezpC,KAAI,SAACqqC,GAClB,OACE,yBAAK5T,UAAWE,EAAQyS,gBACtB,kBAACrO,GAAA,EAAD,CAAY1D,QAAQ,SAAS/B,QAAQ,QAAQ0F,cAAY,GACtDqP,EAAG/uB,UAAY,IAEjB+uB,EAAGF,MAA4B,GAApBE,EAAGC,OAAOzqC,OACpB,kBAAC0qC,GAAA,EAAD,CAAOC,SAAS,UAAU/T,UAAWE,EAAQwS,gBAA7C,sJAGE,KACHkB,EAAGI,QAAUJ,EAAGI,OAAO5qC,OAAS,EAC/B,kBAAC0qC,GAAA,EAAD,CAAOC,SAAS,QAAQ/T,UAAWE,EAAQwS,gBACzC,sEACA,4BACGkB,EAAGI,OAAOzqC,KAAI,SAAC0kC,GAAD,OACb,wBAAIjO,UAAWE,EAAQ0S,IAAK3E,QAIhC,KACH2F,EAAGC,QAAUD,EAAGC,OAAOzqC,OAAS,EAC/B,kBAAC0qC,GAAA,EAAD,CAAOC,SAAS,UAAU/T,UAAWE,EAAQwS,gBAC3C,sHACA,4BACGkB,EAAGC,OAAOtqC,KAAI,SAAC0kC,GAAD,OACb,wBAAIjO,UAAWE,EAAQ0S,IAAK3E,QAIhC,SAIZ,yBAAKjO,UAAWE,EAAQqS,WACtB,kBAAC,KAAD,CACE0B,QA/Fe,WACvBd,EAAe,MACfJ,EAAkB,CAAES,IAAK,4HAA8BH,GAAI,SAC3DvL,GAAM,CAAEv/B,MAAO+qC,EAAgBG,WAAY,mCACxC9pC,MAAK,YAA0B,IAAfm+B,EAAc,EAAtB54B,KAAQ44B,MACf,GAAIA,EAAM5e,MAAK,SAAC+kB,GAAD,OAAOA,EAAEiG,aACtBnB,EAAkB,CAChBS,IAAK,ocACLH,GAAI,gBAGD,CACL,IAAMc,EAAUrM,EAAM5e,MAAK,SAAC+kB,GAAD,OAAQA,EAAEyF,QACrCX,EACEoB,EACI,CAAEX,IAAK,gJAA8BH,GAAI,SACzC,CAAEG,IAAK,mIAA2BH,GAAI,YAE5CF,EAAerL,OAfrB,OAkBS,SAAC6L,GACNZ,EAAkB,CAAES,IAAK,qGAAsBH,GAAI,cA0E/CxM,SAAUuM,GAAuC,GAAzBE,EAAelqC,OACvCw3B,QAAQ,YACRhhB,MAAM,UACNogB,UAAWE,EAAQsS,UACnB9O,MAAM,2DAEP0P,EAAa,kBAACgB,GAAA,EAAD,CAAkBxT,QAAQ,gBAAgByT,UAAW,EAAGj1B,KAAM,KAAS,KACpF0zB,EACC,kBAACgB,GAAA,EAAD,CAAOlT,QAAQ,SAASZ,UAAWE,EAAQuS,UAAWsB,SAAUjB,EAAeO,IAC5EP,EAAeU,KAEhB,MAELN,GACCA,EAAY3pC,KAAI,SAAC+qC,GACf,OACE,yBAAKtU,UAAWE,EAAQyS,gBACtB,kBAACrO,GAAA,EAAD,CAAY1D,QAAQ,SAAS/B,QAAQ,QAAQ0F,cAAY,GACtD+P,EAAGzvB,UAAY,IAEjByvB,EAAGN,OAAO5qC,OAAS,EAClB,kBAAC0qC,GAAA,EAAD,CAAOC,SAAS,QAAQ/T,UAAWE,EAAQwS,gBACzC,sEACA,4BACG4B,EAAGN,OAAOzqC,KAAI,SAAC0kC,GAAD,OACb,4BAAKA,QAIT,KACHqG,EAAGZ,MAAQY,EAAGC,UACb,kBAACT,GAAA,EAAD,CAAOC,SAAS,OAAO/T,UAAWE,EAAQwS,gBACxC,4BACE,8IAA0B4B,EAAGC,UAAUC,kBAAoB,GAC3D,+IAA2BF,EAAGC,UAAUE,cAAgB,GACxD,+IAA2BH,EAAGC,UAAUG,iBAAmB,KAG7D,YAoBpB7B,GAASrQ,aAAe,CACtBtC,QAAS,IAeI2S,UCrPTnU,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,CACJwB,UAAW,IAEb9Q,MAAO,CACL/P,SAAU,IAEZg0B,SAAU,CACR9T,OAAQ,IAEV+T,UAAW,CACTpT,UAAWxC,EAAMtb,QAAQ,GACzB4iB,aAActH,EAAMtb,QAAQ,GAC5BwqB,SAAU,EACVhN,QAAS,QAEX2T,UAAW,CACTx0B,OAAQ,GACRigB,aAActB,EAAMtb,QAAQ,GAC5B+c,YAAazB,EAAMtb,QAAQ,IAE7BoxB,UAAW,CACT/S,WAAY/C,EAAMtb,QAAQ,GAC1BwqB,SAAU,GAEZ6G,eAAgB,CACdzO,aAAc,GAEhB0O,eAAgB,CACdnU,OAAQ,IAEVoU,GAAI,CACFzT,UAAW,QAIF0T,GAAW,SAAC9S,GACvB,IAAMG,EAAUxB,KADiB,EAGW2D,IAAMuG,SAAS,MAH1B,mBAG1BkK,EAH0B,KAGVC,EAHU,OAIW1Q,IAAMuG,SAAS,MAJ1B,mBAI1BoK,EAJ0B,KAIVC,EAJU,OAKK5Q,IAAMuG,SAAS,MALpB,mBAK1BsK,EAL0B,KAKbC,EALa,KAM7BC,EAA+B,MAAlBN,GAA+C,QAArBA,EAAeO,GANzB,EAQWzK,mBAAS,IARpB,mBAQ1B0K,EAR0B,KAQVC,EARU,KAuDjC,OACE,kBAACnP,GAAA,EAAD,CAAMpE,UAAWE,EAAQvC,MACvB,kBAAC+C,GAAA,EAAD,CAAOrS,MAAM,0FACb,kBAACuX,GAAA,EAAD,KACE,kBAACtB,GAAA,EAAD,CAAYtE,UAAWE,EAAQ7R,MAAOzO,MAAM,gBAAgB2kB,cAAY,GAAxE,+MAGA,kBAACD,GAAA,EAAD,CAAYtE,UAAWE,EAAQ7R,MAAOzO,MAAM,gBAAgB2kB,cAAY,GAAxE,6jBAIA,kBAAC,GAAD,CACEsD,SAhCa,SAACt/B,GACpB4qC,EAAe,MACX5qC,EAAMa,OAAS,GACjB2pC,EAAkB,CAAES,IAAK,6NAA+CH,GAAI,SAC5EtL,GAAS,CAAEx/B,QAAOkrC,WAAY,0BAC3B9pC,MAAK,YAA6B,IAAlBo+B,EAAiB,EAAzB74B,KAAQ64B,SACfgL,EAAkB,MAClBE,EAAkBlL,GAClBwL,EAAmBxL,EAAS7e,MAAK,SAAC+kB,GAAD,OAAQA,EAAEyF,QAAgB,GAARnrC,MAJvD,OAMS,SAACorC,GACNZ,EAAkB,CAAES,IAAK,qGAAsBH,GAAI,eAGvDE,EAAkB,IAClBN,EAAkB,MAClBF,EAAkB,QAiBdlM,SAAUuM,EACV3B,OAAO,gGAERuB,GACCA,EAAezpC,KAAI,SAACqqC,GAClB,OACE,yBAAK5T,UAAWE,EAAQyS,gBACtB,kBAACrO,GAAA,EAAD,CAAY1D,QAAQ,SAAS/B,QAAQ,QAAQ0F,cAAY,GACtDqP,EAAG/uB,UAAY,IAEjB+uB,EAAGF,MAA4B,GAApBE,EAAGC,OAAOzqC,OACpB,kBAAC0qC,GAAA,EAAD,CAAOC,SAAS,UAAU/T,UAAWE,EAAQwS,gBAA7C,sJAGE,KACHkB,EAAGI,QAAUJ,EAAGI,OAAO5qC,OAAS,EAC/B,kBAAC0qC,GAAA,EAAD,CAAOC,SAAS,QAAQ/T,UAAWE,EAAQwS,gBACzC,sEACA,4BACGkB,EAAGI,OAAOzqC,KAAI,SAAC0kC,GAAD,OACb,wBAAIjO,UAAWE,EAAQ0S,IAAK3E,QAIhC,KACH2F,EAAGC,QAAUD,EAAGC,OAAOzqC,OAAS,EAC/B,kBAAC0qC,GAAA,EAAD,CAAOC,SAAS,UAAU/T,UAAWE,EAAQwS,gBAC3C,sHACA,4BACGkB,EAAGC,OAAOtqC,KAAI,SAAC0kC,GAAD,OACb,wBAAIjO,UAAWE,EAAQ0S,IAAK3E,QAIhC,SAIZ,yBAAKjO,UAAWE,EAAQqS,WACtB,kBAAC,KAAD,CACE0B,QAlGe,WACvBd,EAAe,MACfJ,EAAkB,CAAES,IAAK,4HAA8BH,GAAI,SAC3DvL,GAAM,CAAEv/B,MAAO+qC,EAAgBG,WAAY,0BACxC9pC,MAAK,YAA0B,IAAfm+B,EAAc,EAAtB54B,KAAQ44B,MACf,GAAIA,EAAM5e,MAAK,SAAC+kB,GAAD,OAAOA,EAAEiG,aACtBnB,EAAkB,CAChBS,IAAK,sYACLH,GAAI,gBAED,CACL,IAAMc,EAAUrM,EAAM5e,MAAK,SAAC+kB,GAAD,OAAQA,EAAEyF,QACrCX,EACEoB,EACI,CAAEX,IAAK,gJAA8BH,GAAI,SACzC,CAAEG,IAAK,mIAA2BH,GAAI,YAE5CF,EAAerL,OAdrB,OAiBS,SAAC6L,GACNZ,EAAkB,CAAES,IAAK,qGAAsBH,GAAI,cA8E/CxM,SAAUuM,GAAuC,GAAzBE,EAAelqC,OACvCw3B,QAAQ,YACRhhB,MAAM,UACNogB,UAAWE,EAAQsS,UACnB9O,MAAM,2DAEP0P,EAAa,kBAACgB,GAAA,EAAD,CAAkBxT,QAAQ,gBAAgByT,UAAW,EAAGj1B,KAAM,KAAS,KACpF0zB,EACC,kBAACgB,GAAA,EAAD,CAAOlT,QAAQ,SAASZ,UAAWE,EAAQuS,UAAWsB,SAAUjB,EAAeO,IAC5EP,EAAeU,KAEhB,MAELN,GACCA,EAAY3pC,KAAI,SAAC+qC,GACf,OACE,yBAAKtU,UAAWE,EAAQyS,gBACtB,kBAACrO,GAAA,EAAD,CAAY1D,QAAQ,SAAS/B,QAAQ,QAAQ0F,cAAY,GACtD+P,EAAGzvB,UAAY,IAEjByvB,EAAGN,OAAO5qC,OAAS,EAClB,kBAAC0qC,GAAA,EAAD,CAAOC,SAAS,QAAQ/T,UAAWE,EAAQwS,gBACzC,sEACA,4BACG4B,EAAGN,OAAOzqC,KAAI,SAAC0kC,GAAD,OACb,4BAAKA,QAIT,KACHqG,EAAGZ,MAAQY,EAAGC,UACb,kBAACT,GAAA,EAAD,CAAOC,SAAS,OAAO/T,UAAWE,EAAQwS,gBACxC,4BACE,2JAA6B4B,EAAGC,UAAUI,gBAAkB,GAC5D,wIAAyBL,EAAGC,UAAUK,gBAAkB,GACxD,2JAA6BN,EAAGC,UAAUM,kBAAoB,KAGhE,YAoBpBhC,GAASrQ,aAAe,CACtBtC,QAAS,IAeI2S,U,UCpOTA,GAAW,SAAC9S,GAAW,IAEzBkB,EAWElB,EAXFkB,QACAhB,EAUEF,EAVFE,SACAlhB,EASEghB,EATFhhB,SAEAihB,GAOED,EARFG,QAQEH,EAPFC,WACWmB,EAMTpB,EANFc,UACA8B,EAKE5C,EALF4C,QACAvB,EAIErB,EAJFqB,QACAp2B,EAGE+0B,EAHF/0B,SACAqjB,EAEE0R,EAFF1R,MACGgS,EAZqB,aAatBN,EAbsB,4GAcpBG,EAAUxB,GAAUqB,GACpB8B,EAAUiT,eAChB,OAAK/1B,EAGH,uCAAKihB,UAAWS,KAAW,YAAaP,EAAQvC,KAAMqC,IAAgBL,GAAkBU,IACtF,kBAACK,GAAA,EAAD,CAAOrS,MAAOA,IACb4S,GACCiB,uBAAajB,EAAD,aACVhB,WACAmB,UACAuB,UACA33B,YACGi2B,EAAQlB,QAEf,yBACEC,UAAWS,KAAWP,EAAQ3R,KAAT,gBAClB2R,EAAQiC,WAAalB,KAGxB,kBAACE,EAAD,CAASnB,UAAWE,EAAQkC,KAAM/2B,IAAKw2B,GACpC9iB,KAnBa,MAsCxB8zB,GAASrQ,aAAe,CACtBtC,QAAS,GACTW,UAAW,OAGb,IAAMnC,GAAYC,aAChB,CACEhB,KAAM,GACNpP,KAAM,CACJsQ,QAAS,QAEXsD,UAAW,CACThD,UAAW,OAEbiD,KAAM,CACJK,KAAM,aAGV,CAAEv7B,KAAM,WAGJy4B,GAAoB,SAAC,GAAD,EACxB+C,UADwB,EAExBC,QAFwB,EAGxBtB,QAHwB,EAIxBxB,QAJwB,EAKxB1qB,GALwB,EAMxBytB,OANwB,EAOxBvqB,QAPwB,EAQxB0H,SARwB,EASxBzY,MATwB,EAUxBO,QAVwB,EAWxBk7B,YAXwB,uIAeX8P,M,qDCjFTkC,GAAkBpW,cAAW,SAAChC,GAAD,MAAY,CAC7CqY,YAAa,CACXp1B,MAAO+c,EAAME,QAAQ6I,gBAAgB,WACrC9H,gBAAiB,UACjB,UAAW,CACTA,gBAAiB,gBAKjBqX,GAAoB,SAAC,GAA2B,EAAzBC,SAA0B,IAAbnV,EAAY,6BAG9CoV,GAFUJ,KAEK7H,uBAAY,cAW9B,KAEH,OACE,kBAAC,KAAD,eAAQ+G,QAASkB,EAAczR,MAAM,mBAAmBr4B,IAAI,UAAa00B,GACvE,kBAAC,GAAD,QAKAqV,GAAgB,SAAC,GAAD,IAAGnV,EAAH,EAAGA,SAAU/wB,EAAb,EAAaA,KAAb,2CACpB,kBAACmmC,GAAA,EAAD,KACE,kBAAC,GAAD,CAAmBpV,SAAUA,EAAUE,OAAQjxB,MAItC2jC,GAAW,SAAC9S,GACvB,IAAMG,EAAUxB,GAAUqB,GADO,EAET6I,mBAAS,GAFA,mBAE1BlxB,EAF0B,KAEpB49B,EAFoB,OAIOC,aAAS,CAC/CpsC,KAAM,WACN6B,SAAU,SACVi7B,QAAS,CACPxuB,WAAY,CAAEC,OAAMC,QALR,IAMZC,KAAM,CAAEf,MAAO,KAAMgB,MAAO,OAC5BnP,OAAQ,CACN+d,OAAQ,uCACRtd,KAAM,UARJ+F,EAJyB,EAIzBA,KAAMwJ,EAJmB,EAInBA,MAAOL,EAJY,EAIZA,QAJY,EAIHjO,MAoB9B,OACE,kBAACorC,GAAD,iBAAoBzV,EAApB,CAA2BkB,QAAS,kBAAC,GAAD,MAAmB5S,MAAM,wQAC3D,yBAAK2R,UAAWE,EAAQ3R,OACpBlW,GACA,kBAACo9B,GAAA,EAAD,CACE7tC,MAAO,CACLoD,SAAU,QACVi1B,SAAU,QACV/wB,KAAMsH,KAAMtH,EAAM,MAClB4G,IAAK5G,EAAK3F,KAAI,qBAAG4L,MACjBugC,YAAa,CAAE7+B,MAAO,KAAMgB,MAAO,OACnC89B,YAAa,KAGf,kBAACC,GAAA,EAAD,KACE,kBAAC,KAAD,CAAW7R,OAAO,OAClB,kBAAC,KAAD,CAAWA,OAAO,UAEpB,kBAAC8R,EAAA,EAAD,CAAYn+B,KAAMA,EAAMC,QAvClB,GAuCoC29B,QAASA,EAAS58B,MAAOA,QAmB/Em6B,GAASrQ,aAAe,CACtBtC,QAAS,IAGX,IAAMxB,GAAYC,aAChB,CACEhB,KAAM,GACNpP,KAAM,CACJsQ,QAAS,SAGb,CAAE33B,KAAM,qCAkBK2rC,MCxIA,IACb,kBAAC,KAAD,CAAO/qC,KAAK,WAAW+4B,UAAW,SAACd,GAAD,OAAW,kBAAC,GAAgBA,MAC9D,kBAAC,KAAD,CACEj4B,KAAK,iDACLguC,OAAQ,SAACC,GAAD,OACN,kBAACC,GAAA,EAAD,eACEnV,UAAWoV,GACXhW,SAAS,gBACTj1B,SAAS,eACTmK,GAAI1N,mBAAmBsuC,EAAWzuC,MAAMqL,OAAOwC,KAC3C4gC,OAIV,kBAAC,KAAD,CACEjuC,KAAK,wCACLguC,OAAQ,SAACC,GAAD,OACN,kBAACC,GAAA,EAAD,eACEnV,UAAWqV,GACXjW,SAAS,gBACTj1B,SAAS,eACTmK,GAAI1N,mBAAmBsuC,EAAWzuC,MAAMqL,OAAOwC,KAC3C4gC,OAIV,kBAAC,KAAD,CACEjuC,KAAK,yDACLguC,OAAQ,SAACC,GAAD,OACN,kBAACC,GAAA,EAAD,eACEnV,UAAWsV,GACXlW,SAAS,gBACTj1B,SAAS,eACTmK,GAAI1N,mBAAmBsuC,EAAWzuC,MAAMqL,OAAOwC,KAC3C4gC,Q,qBCxCCK,GAAiB,SAACjR,GAAD,MAAkB,CAC9Ch8B,KAH0B,eAI1B88B,QAAS,CAAEd,iB,uMCDb,IAAMkR,GAAe9nC,IAAH,MAUH,cACb,OAAOoC,GAAiBN,MAAM,CAC5BA,MAAOgmC,GACPznC,QAAS,SAACxE,GACRyE,MAAMzE,O,4KCdZ,IA0BaqiB,GAAele,IAAH,KA1BN,mXAgCJ,YAACmC,GACd,OAAOC,GAAiBN,MAAM,CAC5BA,MAAOoc,GACP9d,UAAU,eAAM+B,GAChBmB,YAAa,eACbjD,QAAS,SAACxE,GACRyE,MAAMzE,O,8PCvCL,IAAMksC,GAAyB/nC,IAAH,M,+BCW7BmwB,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvC4Z,MAAO,CACLx4B,MAAO4e,EAAMtb,QAAQ,GACrBrD,OAAQ2e,EAAMtb,QAAQ,GACtB/C,SAAU,QAEZk4B,MAAO,CACLz4B,MAAO4e,EAAMtb,QAAQ,GACrBrD,OAAQ2e,EAAMtb,QAAQ,QAiBXo1B,GAbK,SAAC,GAA2C,IAAzCzW,EAAwC,EAAxCA,UAAWG,EAA6B,EAA7BA,OAAQ/gB,EAAqB,EAArBA,KAAS2gB,EAAY,8CACvDG,EAAUxB,KAChB,IAAKyB,EAAQ,OAAO,KAFyC,IAGrDj5B,EAA2Bi5B,EAA3Bj5B,KAAMwvC,EAAqBvW,EAArBuW,SAAUC,EAAWxW,EAAXwW,OAClBz3B,EAAOw3B,GAAYxvC,EAEzB,OACE,kBAAC0vC,GAAA,EAAD,eAAQC,IAAK33B,EAAM4B,IAAK61B,EAAQ3W,UAAS,UAAKA,EAAL,YAAkBE,EAAQ9gB,KAAaugB,GAAkBI,IA3BlF,SAAC74B,GACnB,IAAI4vC,EAAW5vC,EAAKkJ,MAAM,MAAQ,GAC9B2mC,EAAQD,EAASE,QACjBC,EAASH,EAAS5xB,MAEtB,OADA4xB,GAAYC,EAAMG,OAAO,IAAMD,EAASA,EAAOC,OAAO,GAAKH,EAAMG,OAAO,KAAKC,cAwBxEC,CAAYl4B,K,qBCdbwf,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvC0a,YAAa,CACXxY,QAAS,OACTC,cAAe,SACfwY,WAAY,SACZjY,UAAW,SACXtB,QAASpB,EAAMtb,QAAQ,GACvB8c,SAAU,KAEZoZ,aAAc,CACZ/Y,QAAS7B,EAAMtb,QAAQ,IACvBzB,MAAO+c,EAAME,QAAQK,UAAUD,aAC/BW,gBAAiBjB,EAAME,QAAQK,UAAUH,WAIvCya,GAAoB,SAACzX,GACzB,IAAMO,EAAYC,eAClB,OACE,kBAACkX,GAAA,EAAD,CACE1W,GAAG,WACH2W,YAAapX,EAAU,qBACvBqX,SAAU,kBAAC,KAAD,MACV1D,QAASlU,EAAMkU,WAsGN2D,GAjGI,SAAC,GAAkB,IAAb7X,EAAY,oBAC7B1tB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CH,EAAcC,cAAY,SAACC,GAAD,OAAWA,EAAMF,cAAaG,MACxDkB,EAAWC,eACXvG,EAAUxB,KACV4B,EAAYC,eA0ElB,OApDAsX,2BAAgBvB,GAAwB,CACtCliC,OAAQzD,GACRmnC,mBAvByB,SAAC,GAOtB,EANJ1jC,OAMK,IAAD,IALJ2jC,iBACE7oC,KACEi2B,YAAe6S,EAGf,EAHeA,KAAMC,EAGrB,EAHqBA,eAIzB,GAAID,GAAQA,EAAK/S,OACVE,EAAY5xB,SAASykC,EAAK7iC,KAC7BqxB,EAAS4P,GAAe,GAAD,mBAAKjR,GAAL,CAAkB6S,EAAK7iC,WAE3C,CACL,IAAM+iC,EAAc/S,EAAYz8B,QAAO,SAACyM,GAEtC,OAAOA,KADQ6iC,EAAOA,EAAK7iC,GAAK8iC,EAAe9iC,OAGjDqxB,EAAS4P,GAAe8B,QAS5BpP,qBAAU,WAAM,4CACd,gCAAAp7B,EAAA,+EAIcyqC,KAJd,gBAG2BC,EAH3B,EAGMlpC,KAAQi2B,YAEJkT,EAAiBD,EAAa7uC,KAAI,SAAC8I,GAAD,OAAUA,EAAK8C,MACvDqxB,EAAS4P,GAAeiC,IAN5B,gDAQIhuC,QAAQC,IAAI,UAAZ,MARJ,0DADc,sBAcd,OAde,WAAD,wBAYd4+B,GAEO,WACL1C,EAAS4P,GAAe,QAEzB,CAAC5P,IAEJsC,qBAAU,WAAM,4CACd,sCAAAp7B,EAAA,wEAEuB8B,IAAUvI,EAAU+E,IAA/B+Y,EAFZ,EAEYA,OAFZ,SAKcuzB,GAAW,CAAE9gC,MAAO,CAAEwP,KAAMjC,KAL1C,oBAIoBwzB,EAJpB,EAIMrpC,KAAQA,MAEGgkB,UAAaqlB,EAAQrlB,QAAQ9pB,SAAUmvC,EAAQv4B,aANhE,iCAWgBw4B,GAAgB,CAAEhhC,MAAO,CAAErC,GAAIojC,EAAQv4B,eAXvD,gBASwBA,EATxB,EAQQ9Q,KACEA,KAAQ+F,KAGZuxB,EAASR,GAAQ,2BAAKuS,GAAN,IAAerlB,QAASlT,EAAYkT,QAAQ3pB,KAAI,SAAC+H,GAAD,OAAOA,EAAE6D,UAZ/E,wBAcMqxB,EAASR,GAAQuS,IAdvB,0DAiBIluC,QAAQC,IAAI,UAAZ,MAjBJ,2DADc,sBAuBd,OAvBe,WAAD,wBAqBd4+B,GAEO,WACL1C,EAASR,GAAQ,UAElB,CAACQ,IAGF,kBAACiS,GAAA,EAAD,eAAUrZ,KAAM,kBAAC,GAAD,CAAae,OAAQ9tB,EAAM+M,KAAK,QAAQ4gB,UAAWE,EAAQqX,gBAAsBxX,GAC9F1tB,GACC,yBAAK2tB,UAAWE,EAAQmX,aACtB,kBAAC,GAAD,CAAalX,OAAQ9tB,EAAM+M,KAAK,UAChC,kBAACklB,GAAA,EAAD,CAAY1D,QAAQ,QAAQgK,MAAO,CAAEzL,UAAW,IAC7C9sB,EAAKnL,MAER,kBAACo9B,GAAA,EAAD,CAAY1D,QAAQ,QAAQhhB,MAAM,gBAAgB2kB,cAAY,GAC3DjE,EAAU,6BAAD,OAA8BjuB,EAAKY,MAAQ,CAAExF,EAAG4E,EAAKY,SAIpEZ,GAAQ,kBAAC,GAAD,CAAmB8tB,OAAQ9tB,M,yEChI3B2+B,OARf,SAAcjR,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BAAM5nB,EAAE,6LCKC64B,OARf,SAAcjR,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BAAM5nB,EAAE,2H,qBCURumB,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvC+b,SAAU,CACRva,SAAU,KAEZwa,KAAM,CACJjZ,WAAY,OAIVkZ,GAAkBja,cAAW,SAAChC,GAAD,MAAY,CAC7CgB,KAAM,CACJc,aAAc,QAIZoa,GAA4B,SAAC9Y,GACjC,IAAMG,EAAU0Y,KAChB,OACE,kBAAChC,GAAA,EAAD,CAAQhW,QAAQ,UAAUV,QAAS,CAAEvC,KAAMuC,EAAQvC,MAAQiN,MAAO,CAAEhN,gBAAiB,YACnF,kBAACkb,GAAD,QAKAC,GAAc,SAAChZ,GACnB,IAAMG,EAAU0Y,KAChB,OACE,kBAAChC,GAAA,EAAD,CAAQhW,QAAQ,UAAUV,QAAS,CAAEvC,KAAMuC,EAAQvC,MAAQiN,MAAO,CAAEhN,gBAAiB,UAAWhe,MAAO,YACrG,kBAAC,GAAD,QAKAo5B,GAA6B,SAACjZ,GAClC,IAAMG,EAAU0Y,KAChB,OACE,kBAAChC,GAAA,EAAD,CAAQhW,QAAQ,UAAUV,QAAS,CAAEvC,KAAMuC,EAAQvC,MAAQiN,MAAO,CAAEhN,gBAAiB,YACnF,kBAAC,KAAD,QAoDSqb,GA/CF,SAAClZ,GACZ,IAAMO,EAAYC,eACZL,EAAUxB,KAFM,EAGUkK,mBAAS,MAHnB,mBAGf6B,EAHe,KAGLyO,EAHK,KAShBC,EAAc,WAClBD,EAAY,OAGd,OACE,oCACE,kBAACE,GAAA,EAAD,CAAS/qB,MAAOiS,EAAU,aAAc,CAAE7yB,EAAG,UAC3C,kBAAC4rC,GAAA,EAAD,CAAYC,gBAAc,YAAY15B,MAAM,UAAUq0B,QAXxC,SAACvG,GACnBwL,EAAYxL,EAAM6L,iBAWZ,kBAAC,KAAD,QAGJ,kBAAC,KAAD,CAAMpkC,GAAG,YAAYs1B,SAAUA,EAAU+O,aAAW,EAAChP,KAAMx0B,QAAQy0B,GAAWgP,QAASN,GACrF,kBAACzN,GAAA,EAAD,CAAUuI,QAASkF,EAAajZ,QAAS,CAAEvC,KAAMuC,EAAQwY,UAAY7R,UAAQ,GAC3E,kBAAC6S,GAAA,EAAD,KACE,kBAAC,GAAD,OAEF,kBAACC,GAAA,EAAD,CAAc7c,QAAQ,wEACtB,kBAACkI,GAAA,EAAD,CAAM5lB,KAAK,QAAQskB,MAAM,iCAAQ1D,UAAWE,EAAQyY,QAEtD,kBAACjN,GAAA,EAAD,CAAUuI,QAASkF,EAAajZ,QAAS,CAAEvC,KAAMuC,EAAQwY,UAAY7R,UAAQ,GAC3E,kBAAC6S,GAAA,EAAD,KACE,kBAAC,GAAD,OAEF,kBAACC,GAAA,EAAD,CAAc7c,QAAQ,0IACtB,kBAACkI,GAAA,EAAD,CAAM5lB,KAAK,QAAQskB,MAAM,iCAAQ1D,UAAWE,EAAQyY,QAEtD,kBAACjN,GAAA,EAAD,CAAUuI,QAASkF,EAAajZ,QAAS,CAAEvC,KAAMuC,EAAQwY,UAAY7R,UAAQ,GAC3E,kBAAC6S,GAAA,EAAD,KACE,kBAAC,GAAD,OAEF,kBAACC,GAAA,EAAD,CAAc7c,QAAQ,gJACtB,kBAACkI,GAAA,EAAD,CAAM5lB,KAAK,QAAQskB,MAAM,iCAAQ1D,UAAWE,EAAQyY,WC3FxDja,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCid,OAAQ,CACNnc,UACE,sHAEJpP,MAAO,CACLoU,KAAM,EACNmC,aAAc,WACdC,WAAY,SACZF,SAAU,UAEZkV,OAAQ,CACNpX,KAAM,OAeKqX,GAXE,SAAC,GAAkB,IAAb/Z,EAAY,oBAC3BG,EAAUxB,KAEhB,OACE,kBAACqb,GAAA,EAAD,iBAAYha,EAAZ,CAAmBia,SAAU,kBAAC,GAAD,MAAcha,UAAWE,EAAQ0Z,SAC5D,kBAACtV,GAAA,EAAD,CAAY1D,QAAQ,KAAKhhB,MAAM,UAAUogB,UAAWE,EAAQ7R,MAAOlZ,GAAG,sBACtE,kBAAC8kC,GAAD,Q,yCCzBAvb,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCud,UAAW,GACXC,eAAgB,CACd1K,WAAY9S,EAAMtb,QAAQ,GAC1B2c,YAAarB,EAAMtb,QAAQ,QAoBhB+4B,GAhBG,SAAC,GAAmC,IAAjC/rB,EAAgC,EAAhCA,MAAOtP,EAAyB,EAAzBA,SACpBmhB,GAD6C,qCACnCxB,MAChB,OAAwB,IAApB3f,EAAS3V,OAAqB,KAGhC,yBAAK42B,UAAWE,EAAQga,aACnB7rB,GACD,kBAACiW,GAAA,EAAD,CAAY1D,QAAQ,YAAYhhB,MAAM,gBAAgB2kB,cAAY,EAACC,QAAM,EAACxE,UAAWE,EAAQia,gBAC1F9rB,GAGJtP,ICbD2f,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,CACJc,aAAc9B,EAAM0d,MAAM5b,aAC1BiB,WAAY/C,EAAMtb,UAClB+c,YAAazB,EAAMtb,UACnB4iB,aAAc,EACd,eAAgB,CACdA,aAAc,IAGlBqW,OAAQ,CACN1c,gBAAiBjB,EAAME,QAAQ5rB,OAAOq4B,UAExClK,KAAM,CAAExf,MAAO,WACf2O,KAAM,CACJsQ,QAAS,OACTC,cAAe,SACfC,eAAgB,aAChBI,UAAW,aAITob,GAAO,SAAC,GAAiG,IAAtFlW,EAAqF,EAA9FnE,QAA0BF,EAAoE,EAApEA,UAAkBwa,GAAkD,EAAzDC,MAAyD,EAAlDD,cAAcE,EAAoC,EAApCA,YAAwB3a,GAAY,EAAvBrtB,OAAuB,uFACtG4tB,EAAYC,eACZL,EAAUxB,GAAU,CAAEwB,QAASmE,IAC/BmG,EAAOpF,cAAY,SAACC,GAAD,OAAWA,EAAMsV,MAAMC,GAAGC,eAC7C3sB,EAAYkX,aAAY0V,KAAcxV,MACtCyV,EAAiBC,kBAAQ9sB,GAAW,SAACljB,GAAD,OAAcA,EAASnD,QAAQqyC,WAAa,aAItF,OAFA9U,cAAY,SAACC,GAAD,OAAWA,EAAM4V,OAAOl7B,SAASm7B,YAG3C,uCAAKlb,UAAS,UAAKE,EAAQ3R,KAAb,YAAqByR,IAAiBD,GACjDya,GACC,kBAACW,GAAA,EAAD,CACElH,QAASyG,EACTU,cAAe5Q,EACftK,QAAS,CAAEvC,KAAMuC,EAAQvC,KAAM2c,OAAQpa,EAAQoa,OAAQlb,KAAMc,EAAQd,MACrEqb,OAAO,IAGVvvC,OAAOC,KAAK4vC,GAAgBxxC,KAAI,SAAC8xC,GAAD,OAC/B,kBAAC,GAAD,CAAWhwC,IAAKgwC,EAAOhtB,MAAOiS,EAAU,eAAD,OAAgB+a,KACpDN,EAAeM,GACb3yC,QAAO,SAAC4I,GAAD,OAAOA,EAAE8vB,WAChB73B,KAAI,SAACyB,GAAD,OACH,kBAACysC,GAAA,EAAD,CACEpsC,IAAKL,EAAS9D,KACd65B,GAAE,WAAM/1B,EAAS9D,MACjBg5B,QAAS,CAAEvC,KAAMuC,EAAQvC,KAAM2c,OAAQpa,EAAQoa,OAAQlb,KAAMc,EAAQd,MACrEsY,YAAapX,EAAU,aAAD,OAAct1B,EAAS9D,KAAvB,SAAoC,CAAEuG,EAAGzC,EAAS9D,KAAMo0C,YAAa,IAC3F3D,SAAU3sC,EAASo0B,KAAO,kBAACp0B,EAASo0B,KAAV,MAAoB,kBAAC,KAAD,MAC9C6U,QAASyG,EACTU,cAAe5Q,aAkB/B+P,GAAK/X,aAAe,CAClBkY,YAAa,kBAAM,OAGNH,UChFFgB,GAAW,SAACxb,GACvB,OAAO,kBAACyb,GAAA,EAAD,iBAAYzb,EAAZ,CAAmB0b,OAAQ1B,GAAQ3rB,KAAMmsB,O,wGCU5C7b,GAAYC,cAChB,SAAChC,GAAD,MAAY,CACVpO,KAAM,CACJsQ,QAAS,OACTC,cAAe,SACf4c,UAAW,QACX19B,OAAQ,MACRs5B,WAAY,SACZvY,eAAgB,aAChB5B,WACE,6GAEJwe,OAAQ,CACN7P,SAAU,WACVnsB,OAAQ,KACRb,MAAO,MAET88B,KAAM,CACJ9P,SAAU,WACV+P,IAAK,OACLh9B,KAAM,QAERujB,KAAM,CACJjE,SAAU,IACVgB,UAAW,MACX2K,OAAQ,GAEV6M,OAAQ,CACNnY,OAAQ,MACRK,QAAS,OACTE,eAAgB,UAElBK,KAAM,CACJxB,gBAAiBjB,EAAME,QAAQK,UAAU,SAG7C,CAAEh2B,KAAM,YAGJ40C,GAAQ,SAAC,GAAuG,IAArGnf,EAAoG,EAApGA,MAAgB0H,EAAoF,EAA7FnE,QAA0BF,EAAmE,EAAnEA,UAAWjhB,EAAwD,EAAxDA,SAA6CshB,GAAW,EAA9CT,cAA8C,EAA/Bmc,gBAA+B,8FAC7G7b,EAAUxB,GAAU,CAAEwB,QAASmE,IAC/B2X,EAAWja,mBAAQ,kBAAMnF,aAAeD,KAAQ,CAACA,IACjD5pB,EAAYkpC,eACZpc,EAAUqc,eAYhB,OAXApT,qBAAU,WACR/1B,EAAU,IAAI,GACXpJ,MAAK,WAEJk2B,EAAQsc,KAAK,QAHjB,OAKS,iBAGR,CAACppC,EAAW8sB,IAGb,kBAACuc,GAAA,EAAD,CAAezf,MAAOqf,GACpB,uCAAKhc,UAAWS,KAAWP,EAAQ3R,KAAMyR,IAAgBK,GACvD,yBAAKvf,IAAKu7B,KAAkBxF,IAAI,QAAQ7W,UAAWE,EAAQyb,SAC3D,yBAAK76B,IAAKw7B,KAAgBzF,IAAI,QAAQ7W,UAAWE,EAAQ0b,OACzD,kBAACxX,GAAA,EAAD,CAAMpE,UAAWE,EAAQkC,MACvB,yBAAKpC,UAAWE,EAAQyW,QACtB,kBAACC,GAAA,EAAD,CAAQ5W,UAAWE,EAAQd,MACzB,kBAAC,KAAD,QAGHrgB,GAEH,kBAACw9B,GAAA,EAAD,SAeRT,GAAMtZ,aAAe,CACnB7F,MAAO6f,GACPz9B,SAAU,kBAAC09B,GAAA,EAAD,OAGGX,UCtGA,cAA8C,IAA7CY,EAA4C,uDAA5B,KAA4B,yCAApBvzC,EAAoB,EAApBA,KAAM88B,EAAc,EAAdA,QAC5C,MtCHsB,asCGlB98B,EACK88B,EAAQ5zB,KAEVqqC,GCJM,cAA4C,IAA3CA,EAA0C,uDAA1B,GAA0B,yCAApBvzC,EAAoB,EAApBA,KAAM88B,EAAc,EAAdA,QAC1C,MfH0B,iBeGtB98B,EACK88B,EAAQd,YAEVuX,GCJM,cAA8C,IAA7CA,EAA4C,uDAA5B,KAA4B,yCAApBvzC,EAAoB,EAApBA,KAAM88B,EAAc,EAAdA,QAC5C,MCHuB,cDGnB98B,EACK88B,EAAQ0W,SAEVD,GEGHhe,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCiC,UAAW,CACT6Q,WAAY,QAID,cACb,IAAMvP,EAAUxB,KAChB,OACE,yBAAKsB,UAAWE,EAAQtB,WACtB,kBAAC8B,GAAA,EAAD,CAAOrS,MAAM,6OACb,kBAACwX,GAAA,EAAD,CAAMjH,WAAS,EAACvd,QAAS,GACvB,kBAACwkB,GAAA,EAAD,CAAM5wB,MAAI,EAAC6wB,IAAE,GACX,kBAAC1B,GAAA,EAAD,KACE,kBAACwB,GAAA,EAAD,KACE,kBAACtB,GAAA,EAAD,CAAY1D,QAAQ,MAApB,iL,0GClBCgc,GAJO,SAACvxC,EAAKzD,EAAOi1C,EAAO1c,EAAQG,GAChD,OAAO1d,KAAOhb,GAAOkb,OAAO,wBCEfg6B,GALO,SAACzxC,EAAKzD,EAAOi1C,EAAO1c,EAAQG,GAAe,IACvDyc,EAAeF,EAAfE,WACR,OAAOzc,EAAU,aAAD,OAAcyc,EAAd,kBAAkC1xC,EAAlC,YAAyCzD,GAAS,CAAE6F,EAAG7F,K,oBCoE1Do1C,GAnEI,SAAC,GAAsC,IAApC3uB,EAAmC,EAAnCA,MAAOnf,EAA4B,EAA5BA,KAAMvB,EAAsB,EAAtBA,QAASsvC,EAAa,EAAbA,OACpCC,EAAW,IAAIC,KAAQC,SAC7BF,EAASG,QAAU,IAAI3tC,KACvBwtC,EAASI,SAAW,IAAI5tC,KACxBwtC,EAASK,YAAc,IAAI7tC,KAE3B,IAAM8tC,EAAYN,EAASO,aAAapvB,GACxCmvB,EAAUE,MAAQ,CAAC,CAAErY,MAAO,SAAUsY,OAAQ,EAAGC,OAAQ,IAEzDJ,EAAUK,QAAUlwC,EAAQpE,KAAI,SAACu0C,EAAQ37B,GAAT,MAAoB,CAClD27B,OAAQb,EAAO96B,GACf9W,IAAKyyC,EACL//B,MAAOk/B,EAAO96B,GAAO/Y,OAAS,MAEhC,IAAM20C,EAASd,EAAO1zC,KAAI,SAAC+H,GAAD,OAAOA,EAAElI,OAAS,KAoC5C,OAnCA8F,EAAK3F,KAAI,SAAC42B,GACR,IAAM1e,EAAO,CAAC,IACd9T,EAAQvC,SAAQ,SAAC0yC,EAAQ37B,GAAW,IAAD,EACF27B,EAAO1tC,MAAM,KADX,mBAC1B4tC,EAD0B,KACfC,EADe,KAG3BpnC,EAAQtL,cAAI40B,EAAQ6d,GAE1B,GAAIxyC,MAAMwL,QAAQH,GAAQ,CACxB,KAAO4K,EAAKrY,OAASyN,EAAMzN,QACzBqY,EAAK06B,KAAKxuC,EAAQpE,KAAI,iBAAM,OAE9BsN,EAAMzL,SAAQ,SAACkc,EAAK42B,GAClB,IAAMt2C,EAAQ2D,cAAI+b,EAAK22B,GACvBx8B,EAAKy8B,GAAY/7B,GAASva,EACtBA,GAASA,EAAMwB,OAAS,EAAI20C,EAAO57B,KACrC47B,EAAO57B,GAASva,EAAMwB,OAAS,EAC/Bo0C,EAAUW,UAAUL,GAAQ//B,MAAQggC,EAAO57B,OAG1B,IAAjBtL,EAAMzN,QACRqY,EAAK,GAAG06B,KAAK,QAEV,CACL,IAAMv0C,EAAQ2D,cAAI40B,EAAQ2d,GAEtBl2C,GAASA,EAAMwB,OAAS,EAAI20C,EAAO57B,KACrC47B,EAAO57B,GAASva,EAAMwB,OAAS,EAC/Bo0C,EAAUW,UAAUL,GAAQ//B,MAAQggC,EAAO57B,IAE7CV,EAAK,GAAG06B,KAAKv0C,OAGjB41C,EAAUY,QAAQ38B,MAGby7B,EAASmB,KAAKC,cAAc30C,MAAK,SAAUuF,GAChD,IAAMjG,EAAO,IAAIC,KAAK,CAACgG,GAAO,CAAE/F,KAAM,sEACtC,GAAIW,OAAOy0C,WAAaz0C,OAAOy0C,UAAUC,iBACvC10C,OAAOy0C,UAAUC,iBAAiBv1C,EAAMolB,EAAQ,aAC3C,CACL,IAAMxkB,EAAMC,OAAOC,IAAIC,gBAAgBf,GACjCyE,EAAItG,SAASq3C,cAAc,KACjCr3C,SAASiZ,KAAKq+B,YAAYhxC,GAC1BA,EAAEixC,KAAO90C,EACT6D,EAAEkrB,SAAWvK,EAAQ,QACrB3gB,EAAEkxC,QACF90C,OAAOC,IAAI80C,gBAAgBh1C,GAC3BzC,SAASiZ,KAAKy+B,YAAYpxC,QCzD1BqxC,GAAe,SAAfA,EAAgBlC,EAAOmC,GACOnC,EAA1BE,WADoC,IACrBvuB,EADoB,aACTquB,EADS,gBAkB3C,OAfc3xC,OAAOC,KAAKqjB,GAAQha,QAAO,SAACrK,EAAQkB,GAChD,IAAMzD,EAAQ4mB,EAAOnjB,GACrB,GAAqB,kBAAVzD,EAAoB,CAC7B,IAAMwP,EAAS2nC,EAAan3C,EAAOyD,GACnClB,EAAOgyC,KAAP,MAAAhyC,EAAM,YAASiN,SAEf,GAAIpB,QAAQpO,GAAQ,CAClB,IAAMqN,EAAO+pC,EAAW,UAAMA,EAAN,YAAqB3zC,GAAQA,EACrDlB,EAAOgyC,KAAKlnC,GAIhB,OAAO9K,IACN,KAKC80C,GAAoB,SAApBA,EAAqBpC,EAAOvc,EAAW4e,EAAgBF,GAAiB,IACpEjC,EAA0BF,EAA1BE,WAAevuB,EADoD,aACzCquB,EADyC,gBAsB3E,OAnBc3xC,OAAOC,KAAKqjB,GAAQha,QAAO,SAACrK,EAAQkB,GAChD,IAAMzD,EAAQ4mB,EAAOnjB,GACrB,GAAqB,kBAAVzD,EAAoB,CAC7B,IAAMwP,EAAS6nC,EAAkBr3C,EAAO04B,EAAWuc,EAAOxxC,GAC1DlB,EAAOgyC,KAAP,MAAAhyC,EAAM,YAASiN,SAEf,GAAIpB,QAAQpO,GAAQ,CAClB,IAAMqN,EAAOiqC,EAAc,UACpB5e,EAAU,aAAD,OAAc4e,EAAenC,WAA7B,mBAAkDiC,IADvC,YACyD1e,EAAU,aAAD,OAC1Eyc,EAD0E,mBACrD1xC,KAEpCi1B,EAAU,aAAD,OAAcyc,EAAd,mBAAmC1xC,IAChDlB,EAAOgyC,KAAKlnC,GAIhB,OAAO9K,IACN,KAKCg1C,GAAc,SAAdA,EAAetC,EAAO1c,EAAQG,GACAuc,EAA1BE,WADyC,IAC1BvuB,EADyB,aACdquB,EADc,gBAE1C3tC,EAAO,GAkBb,OAjBAhE,OAAOC,KAAKqjB,GAAQpjB,SAAQ,SAACC,GAC3B,IAAMzD,EAAQ4mB,EAAOnjB,GACf+zC,EAAcjf,EAAO90B,GACN,kBAAVzD,EACLw3C,aAAuB5zC,MACzB0D,EAAK7D,GAAO+zC,EAAY71C,KAAI,SAAC0L,GAAD,OAAUkqC,EAAYv3C,EAAOqN,EAAMqrB,MAC/B,kBAAhB8e,IAChBlwC,EAAK7D,GAAO8zC,EAAYv3C,EAAOw3C,EAAa9e,IAG1CtqB,QAAQpO,IACNw3C,IACFlwC,EAAK7D,GAAwB,oBAAVzD,EAAuBA,EAAMyD,EAAK+zC,EAAavC,EAAO1c,EAAQG,GAAa8e,MAK/FlwC,GA8GMmwC,GA1Gb,SAAChxB,EAAOwuB,EAAR,OAAiBvc,EAAjB,EAAiBA,UAAjB,qCACA,SAACv1B,EAASu0C,EAAqBjsC,EAAcrI,GAC3C,IAAM2C,EAAUoxC,GAAalC,GACvBI,EAASgC,GAAkBpC,EAAOvc,GAClCpxB,EAAOnE,EAAQxB,KAAI,SAAC42B,GAAD,OAAYgf,GAAYtC,EAAO1c,EAAQG,MAEhE0c,GAAW,CAAE3uB,QAAOnf,OAAMvB,UAASsvC,WAAnC,OAAmD,SAACtJ,GAAD,OAAOtpC,QAAQC,IAAIqpC,Q,6BCzE3D3C,OARf,SAAcjR,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BAAM5nB,EAAE,kJCHd,0CAAe,WAAOonC,GAAP,qBAAA7xC,EAAA,sEACOE,KADP,cACPC,EADO,OAGPF,EAAU,CACd,eAAgB,mBAChBG,cAAeD,EAAQ,UAAYA,OAAQnG,GALhC,SAQU0Y,MAAM,GAAD,OAAItT,EAAJ,kBAAmC,CAC7DwT,OAAQ,OACRD,KAAMm/B,KAAKC,UAAU,CAAEF,cACvB5xC,YAXW,YAQPyH,EARO,QAaAsqC,GAbA,kCAcQtqC,EAASuqC,OAdjB,eAcLzwC,EAdK,SAeCA,EAAKrF,MACfqF,EAAKrF,IAAL,UAAciD,GAAd,OAA8BoC,EAAKrF,IAAnC,kBAAgDgE,IAhBvC,kBAkBJqB,GAlBI,iCAoBJ,MApBI,4CAAf,sD,mBCqMe0wC,GAzKiB,SAAC,GAS3B,EARJ3f,SAQK,IAPLj1B,EAOI,EAPJA,SACA+4B,EAMI,EANJA,OACA8b,EAKI,EALJA,QACA7f,EAII,EAJJA,UAEA2V,GAEI,EAHJmK,aAGI,EAFJnK,aACGtV,EACC,oGAoFEhtB,EAAe0sC,eACfvZ,EAAWC,eACXL,EAASC,eACT2Z,EAAcC,eAvFhB,EAwF0BrX,oBAAS,GAxFnC,mBAwFGvwB,EAxFH,KAwFY6nC,EAxFZ,KAyFExc,EAAQmc,EAAO,0DAAwD9b,GAsD7E,OACE,oCACE,kBAAC,KAAD,eACEkQ,QAvDc,WAClBiM,GAAW,GACX1Z,EAAS2Z,gBAET9sC,EAAaM,QAAQ3I,EAAU,CAAE8K,IAAK6/B,IAAehsC,MAAK,YAAe,IACnEy2C,EADkE,EAAXlxC,KACxC3F,KAAI,SAAC82C,GACtB,IAAMC,EAAU,GAShB,OARIT,GAAWA,EAAQz2C,OACrBy2C,EAAQz0C,SAAQ,SAACm1C,GACXF,EAAKE,IAAID,EAAQnE,KAAR,MAAAmE,EAAO,YAASD,EAAKE,GAAGh3C,KAAI,SAACZ,GAAD,OAAUA,EAAKqc,eAG1Ds7B,EAAQnE,KAAR,MAAAmE,EAAO,YAASD,EAAKtc,GAAQx6B,KAAI,SAACZ,GAAD,OAAUA,EAAKqc,YAG3C,CAKLw7B,QAASH,EAAKlrC,GACdma,WAAY,WACT+wB,EAAK75B,qBAAuB65B,EAAK75B,qBAAuB,IAAM,IAAI3b,UAAU,EAAG,MAC/Ew1C,EAAKjxB,MAAQixB,EAAKjxB,MAAQ,IAAM,KAChCixB,EAAKn5C,KAAOm5C,EAAKn5C,KAAO,IAAM,KAC9B2D,UAAU,EAAG,KAChBy1C,cAGJF,EAAUA,EAAQ13C,QAAO,SAAC+3C,GAAD,OAAYA,EAAOH,QAAQl3C,OAAS,KAC7D,IAAM4f,EAAQ2sB,EAAYvsC,OAASg3C,EAAQh3C,OAEvC4f,EAAQ,GAAGod,EAAO,4BAAD,OAA6BrC,EAA7B,UAA6C,OAAQ,CAAEuX,YAAatyB,EAAOA,MAAOA,IACnGo3B,EAAQh3C,OACVs3C,GAAcN,GAASz2C,MAAK,SAACuF,GAC3B,IAAMxB,EAAItG,SAASq3C,cAAc,KACjC/wC,EAAEk9B,MAAM/L,QAAU,OAClBz3B,SAASiZ,KAAKq+B,YAAYhxC,GAC1BA,EAAEixC,KAAOzvC,EAAKrF,IACd6D,EAAEkxC,QACFsB,GAAW,GACX1Z,EAASma,oBAGXT,GAAW,GACX1Z,EAASma,iBAEXX,EAAYh1C,GACZo7B,EAAO,oQAQLS,SAAUxuB,EACVqrB,MAAOA,EACP1D,UAAWA,EACX30B,IAAI,UAjLqB,SAAC,GAAD,EAC/B40B,SAD+B,EAE/BC,QAF+B,EAG/B4f,aAH+B,EAI/Bc,aAJ+B,EAK/BC,yBAL+B,EAM/BC,QAN+B,EAO/Bpd,MAP+B,EAQ/Bqd,SAR+B,EAS/B/1C,SAT+B,EAU/B22B,OAV+B,EAW/BgU,YAX+B,EAY/B/T,SAZ+B,EAa/BN,SAb+B,EAc/B0f,cAd+B,4MAkLrBrhB,CAAkBU,IAEtB,kBAAC4gB,GAAD,S,8NC9LO,mBAA0B,IAAvBj2C,EAAsB,EAAtBA,SAAUwM,EAAY,EAAZA,MAC1B,OAAO7G,GAAiBlC,OAAO,CAC7BC,SAAUH,IAAF,KAAuBvD,EAAoBA,EAC7BA,GAItB2D,UAAW,CAAE6I,SACb5I,QAAS,SAACxE,GACRyE,MAAMzE,OCcNs0B,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCukB,aAAc,CACZthC,MAAO+c,EAAME,QAAQzyB,MAAMmkB,KAC3B,UAAW,CACTqP,gBAAiBujB,gBAAKxkB,EAAME,QAAQzyB,MAAMmkB,KAAM,KAChD,uBAAwB,CACtBqP,gBAAiB,qBA0DVwjB,GApDU,SAAC,GAQpB,EAPJnhB,SAOK,IANLj1B,EAMI,EANJA,SACSq5B,EAKL,EALJnE,QACAF,EAII,EAJJA,UAEA2V,GAEI,EAHJmK,aAGI,EAFJnK,aACGtV,EACC,2FACEmG,EAAWC,eACXt3B,EAAU4hC,eACV3K,EAASC,eACT2Z,EAAcC,eACd/f,EAAUxB,GAAU,CAAEwB,QAASmE,IALjC,EAM0BuE,oBAAS,GANnC,mBAMGvwB,EANH,KAMY6nC,EANZ,KA8BJ,OACE,kBAAC,KAAD,eACEjM,QAxBgB,WAClBiM,GAAW,GACX1Z,EAAS2Z,gBCtDE,YAAwB,IAArBrqC,EAAoB,EAApBA,IAAK9K,EAAe,EAAfA,SACrB,OAAO3B,QAAQC,IAAIwM,EAAIvM,KAAI,SAAC4L,GAAD,OAAQksC,GAAc,CAAEr2C,WAAUwM,MAAO,CAAErC,YAAUxL,MAAK,SAAC23C,GAEpF,MAAO,CAAEpyC,KADIoyC,EAAQ9sC,QAAO,SAACC,EAAD,OAAQvF,EAAR,EAAQA,KAAR,4BAAuBuF,GAAvB,CAA4BvF,EAAKiG,OAAK,QDsDlEosC,CAAkB,CAChBv2C,WACA8K,IAAK6/B,IAEJhsC,MAAK,WACJwF,IACAi3B,EAAO,iCAAkC,OAAQ,CAAEkV,YAAa3F,EAAYvsC,SAC5E42C,EAAYh1C,MAPhB,OASS,SAACZ,GACNg8B,EAAwB,kBAAVh8B,EAAqBA,EAAQA,EAAMiF,SAAW,6BAA8B,cAV9F,SAYW,WACP6wC,GAAW,GACX1Z,EAASma,oBAOX9Z,SAAUxuB,EACVqrB,MAAM,mBACN1D,UAAS,2BAAsBE,EAAQghB,aAA9B,YAA8ClhB,GACvD30B,IAAI,UA1EuB,SAAC,GAAD,EAC/B40B,SAD+B,EAE/BC,QAF+B,EAG/B4f,aAH+B,EAI/Bc,aAJ+B,EAK/BC,yBAL+B,EAM/BC,QAN+B,EAO/Bpd,MAP+B,EAQ/Bqd,SAR+B,EAS/B/1C,SAT+B,EAU/B22B,OAV+B,EAW/BgU,YAX+B,EAY/B/T,SAZ+B,EAa/BN,SAb+B,EAc/B0f,cAd+B,4MA2EvBrhB,CAAkBU,IAEtB,kBAAC,KAAD,Q,0CE1EAmhB,I,OAAY,SAAChxB,EAAaixB,EAAqBC,EAAgB7uC,GACnE,GAAe,cAAXA,EAAwB,CAC1B,GAAI+P,KAAO4N,GAAamxB,MAAM,OAAOC,eAAeh/B,KAAO6+B,GAAqBE,MAAM,QAAS,MAAO,OACtG,GAAI/+B,KAAO4N,GAAamxB,MAAM,OAAOE,QAAQj/B,KAAO6+B,GAAqBE,MAAM,QAAS,MAAO,QAC/F,GAAI/+B,KAAO4N,GAAamxB,MAAM,OAAOE,QAAQj/B,KAAO6+B,GAAqBK,SAAS,EAAG,QAAQH,MAAM,QACjG,MAAO,SACT,GAAI/+B,KAAO4N,GAAamxB,MAAM,OAAOE,QAAQj/B,KAAO6+B,GAAqBK,SAAS,GAAI,QAAQH,MAAM,QAClG,MAAO,cACJ,CAKL,GAAuB,iBAAnBD,EAAmC,MAAO,OAC9C,GAAuB,iBAAnBA,EAAmC,MAAO,OAC9C,GAAuB,gBAAnBA,EAAkC,MAAO,UAC7C,GAAuB,aAAnBA,EAA+B,MAAO,SAG5C,MAAO,SAGHnQ,GAAU,SAAC1+B,GACf,OAAQA,GACN,IAAK,OACH,OAAO,kBAAC,KAAD,MAET,QACE,OAAO,kBAAC,KAAD,QAKPkvC,GAAW,SAAClvC,EAAQqd,EAAYoQ,GACpC,OAAQztB,GACN,IAAK,QACH,OAAOytB,EAAU,qCAAsC,CAAE7N,SAAU7P,KAAOsN,GAAYyxB,MAAM,OAAOK,YAErG,IAAK,SACL,IAAK,UACH,OAAO1hB,EAAU,wCAAyC,CACxD7N,SAAU7P,KAAOsN,GAAYyxB,MAAM,OAAOK,YAG9C,QACE,OAAO1hB,EAAU,wCAAyC,CAAE7N,SAAU7P,KAAOsN,GAAYpN,OAAO,SAIhG4hB,GAAgB/F,cAAW,SAAChC,GAAD,MAAY,CAC3CgB,KAAM,GACN+F,MAAO,CACL7E,QAAS,QACT8F,SAAU,SACVC,aAAc,WACdC,WAAY,UAEdzF,KAAM,CACJxf,MAAO,WAETqiC,KAAM,CACJrkB,gBAAiBjB,EAAME,QAAQqlB,KAAK,KACpCtiC,MAAO+c,EAAME,QAAQ6I,gBAAgB/I,EAAME,QAAQqlB,KAAK,OAE1DpV,QAAS,CACPlP,gBAAiBjB,EAAME,QAAQiQ,QAAQve,KACvC3O,MAAO+c,EAAME,QAAQiQ,QAAQ7P,cAE/BklB,OAAQ,CACNvkB,gBAAiBjB,EAAME,QAAQzyB,MAAMmkB,KACrC3O,MAAO+c,EAAME,QAAQzyB,MAAM6yB,cAE7BmlB,MAAO,CACLxkB,gBAAiBjB,EAAME,QAAQqlB,KAAK,KACpCtiC,MAAO+c,EAAME,QAAQ6I,gBAAgB/I,EAAME,QAAQqlB,KAAK,WAI/CG,GAAe,SAAC,GAA+D,IAA7DriB,EAA4D,EAA5DA,UAAoBqE,EAAwC,EAAjDnE,QAA0BC,EAAuB,EAAvBA,OAAWJ,EAAY,iDACnFG,EAAUwE,GAAc,CAAExE,QAASmE,IACnC/D,EAAYC,eAElB,IAAKJ,EAAQ,OAAO,KAEpB,IAAM3P,EAAc2P,EAAO3P,YACrBN,EAAaiQ,EAAOjQ,WACpBwxB,EAAiBvhB,EAAOuhB,eACxBY,EAAaniB,EAAOttB,OAE1B,IAAKqd,EAAY,OAAO,KAExB,IAAMrd,EAAS2uC,GAAUhxB,EAAaN,EAAYwxB,EAAgBY,GAC5D5e,EAAQqe,GAASlvC,EAAQqd,EAAYoQ,GACrClB,EAAOmS,GAAQ1+B,GAErB,OACE,kBAACmyB,GAAA,EAAD,eACE9E,QAAS,CAAEvC,KAAMuC,EAAQvC,KAAM+F,MAAOxD,EAAQwD,MAAOtE,KAAMc,EAAQd,MACnEY,UAAS,UAAKA,EAAL,YAAkBE,EAAQrtB,IACnCusB,KAAMA,EACNsE,MAAOA,GACH/D,GAAkBI,MAK5BsiB,GAAa7f,aAAe,CAC1BY,UAAU,GAGZ,IAAMmf,GAAgB5jB,cAAW,SAAChC,GAAD,MAAY,CAC3CslB,KAAM,CAAEriC,MAAO+c,EAAME,QAAQqlB,KAAK,MAClCpV,QAAS,CAAEltB,MAAO+c,EAAME,QAAQiQ,QAAQve,MACxC4zB,OAAQ,CAAEviC,MAAO+c,EAAME,QAAQzyB,MAAMmkB,MACrC6zB,MAAO,CAAExiC,MAAO+c,EAAME,QAAQ3d,KAAK4d,aAGxB0lB,GAAe,SAAC,GAA8D,EAA5DxiB,UAA6D,IAAzCqE,EAAwC,EAAjDnE,QAA0BC,EAAuB,EAAvBA,OAC5DD,GADmF,iDACzEqiB,GAAc,CAAEriB,QAASmE,KACnC/D,EAAYC,eAElB,IAAKJ,EAAQ,OAAO,KAEpB,IAAM3P,EAAc2P,EAAO3P,YACrBN,EAAaiQ,EAAOjQ,WACpBwxB,EAAiBvhB,EAAOuhB,eACxBY,EAAaniB,EAAOttB,OAEpBA,EAAS2uC,GAAUhxB,EAAaN,EAAYwxB,EAAgBY,GAC5D5e,EAAQqe,GAASlvC,EAAQqd,EAAYoQ,GACrClB,EAAOmS,GAAQ1+B,GAErB,OACE,kBAACumC,GAAA,EAAD,CAAS/qB,MAAOqV,EAAO+e,UAAU,OAC9BpgB,IAAMH,aAAa9C,EAAM,CAAEY,UAAWE,EAAQrtB,OAKrD2vC,GAAahgB,aAAe,CAC1BY,UAAU,GChJZ,IAAMsf,GAAY,SAAC,GAAkE,IAAhE1iB,EAA+D,EAA/DA,UAAWh1B,EAAoD,EAApDA,SAAU+4B,EAA0C,EAA1CA,OAAQ5D,EAAkC,EAAlCA,OAAQoD,EAA0B,EAA1BA,UAAcxD,EAAY,uEAC5EO,EAAYC,eACZwE,EAAYx5B,KAAI40B,EAAQ4D,GAC9B,IAAKgB,IAAcxB,EACjB,OAAO,KAGT,IAAM37B,EAAQm9B,EACVzE,EAAU,aAAD,OAAct1B,EAAd,kBAAgC+4B,EAAhC,YAA0CgB,GAAa,CAAEt3B,EAAGs3B,IACrEzE,EAAUiD,GAEd,OACE,kBAACe,GAAA,EAAD,eAAY1D,QAAQ,QAAQZ,UAAWA,GAAeL,GAAkBI,IACrEn4B,IAWP86C,GAAUlgB,aAAe,CACvBY,UAAU,GAGGsf,U,qBC9BTC,GAAoB,SAAC,GAA0B,IAAxBxiB,EAAuB,EAAvBA,OACrBG,GAD4C,2BAChCC,gBAClB,IAAMJ,KAAYA,EAAO53B,OAAS43B,EAAO53B,MAAMa,QAAY+2B,EAAO9hB,MAAQ8hB,EAAO9hB,KAAKjV,QAAW,OAAO,KACxG,IAAMb,EAAQ43B,EAAO53B,MAAMa,OACrBiV,EAAO8hB,EAAO9hB,KAAKjV,OAEzB,OACE,kBAACgwC,GAAA,EAAD,CAAS/qB,MAAOiS,EAAU,sCAAuC,CAAE/3B,QAAO8V,SAASokC,UAAU,QAC3F,kBAAC,KAAD,CAAmB7iC,MAAM,aAK/B+iC,GAAkBngB,aAAe,CAC/BtC,QAAS,GACTC,OAAQ,GACRiD,UAAU,GAGGuf,U,0CCOAC,GAzBcC,sBAAW,WAA+B1b,GAAS,IAArCz+B,EAAoC,EAApCA,OAAQo6C,EAA4B,EAA5BA,OAAQ93C,EAAoB,EAApBA,SACnD+3C,EAAa7V,uBAAY,WAC7B4V,EAAO,CAAE/e,OAAQr7B,EAAOq7B,OAAQif,aAAct6C,EAAOs6C,iBACpD,CAACt6C,EAAOs6C,aAAct6C,EAAOq7B,OAAQ+e,IAExC,OACE,gBAACpX,GAAA,EAAD,CACE1L,UAAU,kBACVijB,WAAUv6C,EAAOq7B,OACjBmf,qBAAoBx6C,EAAOs6C,aAC3B33C,IAAK3C,EAAOq7B,OACZkQ,QAAS8O,EACT5b,IAAKA,GAEL,gBAACoB,GAAA,EAAD,CAAY7E,MAAOh7B,EAAOg7B,MAAOK,OAAQr7B,EAAOq7B,OAAQ/4B,SAAUA,QCQzD43C,GAzBcC,sBAAW,WAAkC1b,GAAS,IAAxChH,EAAuC,EAAvCA,OAAQgjB,EAA+B,EAA/BA,WAAYC,EAAmB,EAAnBA,QACvDC,EAAoBnW,uBACxB,SAACQ,GAEC,IAAMoS,EAAe3f,EAAOz3B,QAAU,GACtCglC,EAAM4V,iBACNH,EAAWrD,GACXsD,GAAQ,KAEV,CAACjjB,EAAOz3B,OAAQy6C,EAAYC,IAG9B,OACE,kBAAC1X,GAAA,EAAD,CACE1L,UAAU,kBACV30B,IAAK80B,EAAOhrB,GACZouC,qBAAoBpjB,EAAOz3B,OAASy3B,EAAOz3B,OAAOo3C,aAAe,GACjE7L,QAASoP,EACTlc,IAAKA,GAEJhH,EAAOj5B,SCTRw3B,GAAYC,aAChB,CACEhB,KAAM,CAAEkB,QAAS,iBAEnB,CAAE33B,KAAM,mBA2FKs8C,GAxFM,SAACzjB,GAAW,IAE7B1Y,EASE0Y,EATF1Y,QAF4B,EAW1B0Y,EARF0jB,wBAH4B,MAGT,GAHS,EAI5B3D,EAOE/f,EAPF+f,aACAqD,EAMEpjB,EANFojB,WACAO,EAKE3jB,EALF2jB,WAEA1jB,GAGED,EAJFG,QAIEH,EAHFC,WACAh1B,EAEE+0B,EAFF/0B,SACGq1B,EAVyB,aAW1BN,EAX0B,4GAYN6I,oBAAS,GAZH,mBAYvB4B,EAZuB,KAYjB4Y,EAZiB,KAaxB3Y,EAAWsC,mBACX7M,EAAUxB,GAAUqB,GACpBO,EAAYC,eACZluB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1Cqe,EACJtxC,GAAQA,EAAKgV,QAAUhV,EAAKgV,QAAQ3e,QAAO,SAACA,GAAD,OAAYA,EAAOsC,WAAaA,EAASmsC,iBAAiB,GAEjGyM,EAAgBv8B,EAAQ3e,QAC5B,SAACm7C,GAAD,OACGA,EAAc9jB,MAAM+jB,WACpBL,EAAiBI,EAAc9jB,MAAMgE,SACyB,qBAAxDggB,KAAUjE,EAAc+D,EAAc9jB,MAAMgE,WAGjDsf,EAAoBnW,uBACxB,SAACQ,GAECA,EAAM4V,iBACNF,GAAQ,GACR3Y,EAASoD,QAAUH,EAAM6L,gBAE3B,CAAC9O,EAAU2Y,IAGPY,EAAqB9W,uBAAY,WACrCkW,GAAQ,KACP,CAACA,IAEEL,EAAa7V,uBACjB,YAA+B,IAA5BnJ,EAA2B,EAA3BA,OAAQif,EAAmB,EAAnBA,aACTU,EAAW3f,EAAQif,GACnBI,GAAQ,KAEV,CAACM,EAAYN,IAGf,OAA6B,IAAzBQ,EAAcx6C,OAAqB,KAErC,uCAAK42B,UAAWS,KAAWP,EAAQvC,KAAMqC,IAAgBK,GACvD,kBAAC,KAAD,CAAQL,UAAU,aAAa0D,MAAM,uBAAuBuQ,QAASoP,GACnE,kBAAC,KAAD,OAEF,kBAAC,KAAD,CAAM7Y,KAAMA,EAAMC,SAAUA,EAASoD,QAAS4L,QAASuK,GACpDJ,EAAcx6C,OAAS,GACtB,kBAAC66C,GAAA,EAAD,CAAerZ,MAAO,CAAEkB,SAAU,UAAWoY,QAAS,SACnD5jB,EAAU,0CAGdsjB,EAAcr6C,KAAI,SAACs6C,GAAD,OACjB,kBAAC,GAAD,CACEx4C,IAAKw4C,EAAc9jB,MAAMgE,OACzBr7B,OAAQm7C,EAAc9jB,MACtB/0B,SAAUA,EACV83C,OAAQC,OAGXY,EAAYv6C,OAAS,GAAK,kBAAC66C,GAAA,EAAD,KAAgB3jB,EAAU,wCACpDqjB,EAAYp6C,KAAI,SAAC46C,GAAD,OACf,kBAACC,GAAD,CAA0B/4C,IAAK84C,EAAWhvC,GAAIgrB,OAAQgkB,EAAYhB,WAAYA,EAAYC,QAASA,U,ICrF3FzkB,aAChB,CACE0lB,OAAQ,GACRC,KAAM,IAER,CAAEp9C,KAAM,a,OCIJq9C,GAAcC,cAZL,SAAC7nB,GAAD,MAAY,CACzBgB,KAAM,CACJkB,QAAS,OACT,QAAS,CACPT,YAAa,UAEf,mBAAoB,CAClBA,YAAa,OAKComB,EAAmB,YAAiD,IAA9CtkB,EAA6C,EAA7CA,QAAoBnhB,GAAyB,EAApCihB,UAAoC,EAAzBjhB,UAAaghB,EAAY,mDACrF,OACE,yBAAKC,UAAWE,EAAQvC,MACrB2E,WAAS/4B,IAAIwV,GAAU,SAAClI,GAAD,OACtBA,GAAS0rB,yBAAe1rB,GAASwrB,IAAMH,aAAarrB,EAAnB,eAA+BkpB,IAAW,YAmBnFwkB,GAAY/hB,aAAe,CACzBY,UAAU,GAGGmhB,U,wICJAE,GANG,SAAC,GAA0B,IAAxBtkB,EAAuB,EAAvBA,OAAuB,2BAG1C,OA5Bc,SAAC/I,GACf,OAAQA,GACN,KAAK,EACL,KAAK,EACH,OAAO,kBAAC,KAAD,MAET,KAAK,EACH,OAAO,kBAAC,KAAD,MAET,KAAK,EACH,OAAO,kBAAC,KAAD,MAET,KAAK,EACL,KAAK,EACH,OAAO,kBAAC,KAAD,MAET,KAAK,EACH,OAAO,kBAAC,KAAD,MAET,QACE,OAAO,kBAAC,KAAD,OAMEma,CAAQpR,EAAO/I,QC3BxBsH,GAAYC,cAChB,SAAChC,GAAD,MAAY,CACVgB,KAAM,GACNyB,KAAM,CACJhB,YAAa,IAEfkL,SAAU,CAAEwB,WAAY,KACxBc,UAAW,CACTd,WAAY,IACZlrB,MAAO,QAETyO,MAAO,GACPq2B,IAAK,CAAEtmB,YAAa,MAEtB,CAAEl3B,KAAM,iCAgDKy9C,GA7CY,SAAC,GASrB,IARL5Z,EAQI,EARJA,WACA5oB,EAOI,EAPJA,MACAkpB,EAMI,EANJA,iBACAC,EAKI,EALJA,WACAC,EAII,EAJJA,YACSlH,EAGL,EAHJnE,QACAsL,EAEI,EAFJA,kBACGnL,EACC,mHACEH,EAAUxB,GAAU,CAAEwB,QAASmE,IAC/B4G,EAAiBO,EAAkBT,GACzC,IAAKA,EAAW51B,GACd,OACE,kBAACu2B,GAAA,EAAD,eAAUrgC,IAAK0/B,EAAW51B,IAAQkrB,GAC/B4K,GAGP,IAAMQ,EAAgBJ,IAAqBlpB,EACrChb,EAAUG,KAAM2jC,EAAgBM,GAChCH,EAAQtD,KAAMmD,EAAgB9jC,GAEpC,OACE,kBAACukC,GAAA,EAAD,eACErgC,IAAK0/B,EAAW51B,GAChBm0B,SAAUmC,EACVzL,UAAWS,KAAWP,EAAQvC,KAAT,gBAClBuC,EAAQoJ,SAAWgC,KAElBjL,GAEJ,kBAACukB,GAAA,EAAD,KACE,kBAAC,GAAD,CAAWzkB,OAAQ4K,KAErB,kBAAC4O,GAAA,EAAD,CACE7c,QAASsO,EAAM7hC,KAAI,SAACoiC,EAAMxpB,GAAP,OACjB,0BAAM9W,IAAK8W,EAAO6d,UAAW2L,EAAKC,UAAY1L,EAAQ0L,UAAY,IAC/DD,EAAKzsB,aC5CZ2lC,IAVYlmB,cAAW,SAAChC,GAAD,MAAY,CACvCiC,UAAW,CACTb,QAAS,IAEXtX,OAAQ,CACNolB,SAAU,EACVzN,YAAa,QAIa,SAAC,GAAuD,IAArD4B,EAAoD,EAApDA,UAA6BG,GAAuB,EAAzCn1B,SAAyC,EAA/B+4B,OAA+B,EAAvB5D,QAAWJ,EAAY,2DAC7EO,EAAYC,eAClB,IAAKJ,EAAQ,OAAO,KACpB,IAAMh3B,EAAOg3B,EAAO9Q,sBAAwB8Q,EAAOh3B,KAE7C+V,EAAI,WAAOohB,EAAU,kDAAD,OAAmDn3B,GAAQ,CAAEsE,EAAGtE,IAAhF,KAEV,OACE,oCACE,kBAACm7B,GAAA,EAAD,CAAYtE,UAAWA,EAAWY,QAAQ,SACvC1hB,EACD,kBAAC4lC,GAAA,EAAD,iBACM/kB,EADN,CAEEI,OAAQA,EACRyK,MAAO,CAAElL,WAAY,GACrBqE,OAAO,mBACP2M,UAAU,qBACVziC,KAAK,SAEL,kBAAC,KAAD,CAAW81B,OAAO,WAGtB,0BACE6G,MAAO,CACLhrB,MAAO,sBACPme,QAAS,EACTzf,SAAU,OACVghB,WAAY,6CACZwL,WAAY,IACZia,WAAY,EACZC,cAAe,YACf7lB,UAAW,EACX8E,aAAc,IAVlB,+DAcE,8BAEF,kBAAC6gB,GAAA,EAAD,iBACM/kB,EADN,CAEEI,OAAQA,EACR4D,OAAO,cACPnsB,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B64B,UAAU,eACVziC,KAAK,SAEL,kBAAC,KAAD,CAAW81B,OAAO,aAM1B8gB,GAAsBriB,aAAe,CACnCY,UAAU,GAGGyhB,UC9DA7T,OARf,SAAcjR,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BAAM5nB,EAAE,0TCSC64B,OAZf,SAAcjR,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BACEklB,SAAS,UACTC,SAAS,UACT/sC,EAAE,8GC0BKgtC,GAbE,SAAC,GAA0B,IAAxBhlB,EAAuB,EAAvBA,OACZG,GADmC,2BACvBC,gBAClB,IAAKJ,EAAQ,OAAO,KACpB,IAAM9R,EAAQiS,EAAU,6BAAD,OAA8BH,EAAOh3B,MAAQ,CAAEsE,EAAG0yB,EAAOh3B,OAC1Ei2B,EApBQ,SAACj2B,GACf,IAAIi2B,EACJ,OAAQj2B,GACN,IAAK,MACHi2B,EAAO,kBAACgmB,GAAD,MACP,MACF,IAAK,MACHhmB,EAAO,kBAACimB,GAAD,MACP,MACF,QACEjmB,EAAO,kBAACgmB,GAAD,MAGX,OAAOhmB,EAOMmS,CAAQpR,EAAOh3B,MAE5B,OACE,kBAACiwC,GAAA,EAAD,CAAS/qB,MAAOA,EAAOo0B,UAAU,OAC/B,8BAAOrjB,KCtBPV,GAAYC,cAChB,SAAChC,GAAD,MAAY,CACVgB,KAAM,GACNyB,KAAM,CACJhB,YAAa,IAEfkL,SAAU,CAAEwB,WAAY,KACxBc,UAAW,CACTd,WAAY,IACZlrB,MAAO,QAETyO,MAAO,GACPq2B,IAAK,CAAEtmB,YAAa,MAEtB,CAAEl3B,KAAM,iCAmDKo+C,GAhDoB,SAAC,GAS7B,IARLva,EAQI,EARJA,WACA5oB,EAOI,EAPJA,MACAkpB,EAMI,EANJA,iBACAC,EAKI,EALJA,WACAC,EAII,EAJJA,YACSlH,EAGL,EAHJnE,QACAsL,EAEI,EAFJA,kBACGnL,EACC,mHACEH,EAAUxB,GAAU,CAAEwB,QAASmE,IAC/B4G,EAAiBO,EAAkBT,GACzC,IAAKA,EAAW51B,GACd,OACE,kBAACu2B,GAAA,EAAD,eAAUrgC,IAAK0/B,EAAW51B,IAAQkrB,GAC/B4K,GAGP,IAAMQ,EAAgBJ,IAAqBlpB,EACrChb,EAAUG,KAAM2jC,EAAgBM,GAChCH,EAAQtD,KAAMmD,EAAgB9jC,GAC9BuhB,EAAkBqiB,EAAWriB,iBAAmB,GAChD5I,EAAairB,EAAWjrB,YAAc,GAE5C,OACE,kBAAC4rB,GAAA,EAAD,eACErgC,IAAK0/B,EAAW51B,GAChBm0B,SAAUmC,EACVzL,UAAWS,KAAWP,EAAQvC,KAAT,gBAClBuC,EAAQoJ,SAAWgC,KAElBjL,GAEJ,kBAACukB,GAAA,EAAD,KACE,kBAAC,GAAD,CAAUzkB,OAAQ4K,KAEpB,kBAAC4O,GAAA,EAAD,CACE7c,QAASsO,EAAM7hC,KAAI,SAACoiC,EAAMxpB,GAAP,OACjB,0BAAM9W,IAAK8W,EAAO6d,UAAW2L,EAAKC,UAAY1L,EAAQ0L,UAAY,IAC/DD,EAAKzsB,SAGVge,UAAS,UAAKxU,EAAL,YAAwB5I,O,UC5DnC4e,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvC1uB,KAAM,CACJ2R,MAAO+c,EAAME,QAAQC,QAAQvO,UAI3Bg3B,GAAkB,SAAC5R,GAAD,OAAOA,EAAE4R,mBAE3BC,GAAc,SAAC,GAWd,IAVLzmC,EAUI,EAVJA,SACAihB,EASI,EATJA,UACSqE,EAQL,EARJnE,QACAD,EAOI,EAPJA,SACAE,EAMI,EANJA,OACAuQ,EAKI,EALJA,UACA1lC,EAII,EAJJA,SACA+4B,EAGI,EAHJA,OACA91B,EAEI,EAFJA,KACG8xB,EACC,8GACEG,EAAUxB,GAAU,CAAEwB,QAASmE,IAC/BohB,EAAkBl6C,KAAI40B,EAAQ4D,GACpC,IAAK0hB,EAAiB,OAAO,KAC7B,IAAMC,EAAWzlB,EAASz4B,QAAQwD,EAAU0lC,GACtCiV,IAAoB13C,IAEN,oBAATA,EACPA,EAAKkyB,EAAQuQ,GADb,UAEGgV,EAFH,YAEex9C,mBAAmBu9C,EAAgBtwC,IAFlD,YAEyDlH,IAE7D,OAAI03C,EAEA,kBAAC7kB,GAAA,EAAD,CAAMC,GAAI4kB,EAAkB3lB,UAAWA,EAAWiU,QAASsR,IACxDljB,IAAMH,aAAanjB,EAAnB,aACCihB,UAAU,GAAD,OAAKjhB,EAASghB,MAAMC,UAApB,YAAiCE,EAAQjyB,MAClDkyB,OAAQslB,EACRz6C,SAAU0lC,EACVzQ,YACGN,GAAkBI,MAMtBsC,IAAMH,aAAanjB,EAAnB,aACLihB,UAAU,GAAD,OAAKA,EAAL,YAAkBjhB,EAASghB,MAAMC,WAC1CG,OAAQslB,EACRz6C,SAAU0lC,EACVzQ,YACGN,GAAkBI,MAqBzBylB,GAAYhjB,aAAe,CACzBtC,QAAS,GACTjyB,KAAM,OACNkyB,OAAQ,GACRiD,UAAU,GAGGoiB,UC/ETI,GAAkB,SAAC,GAAuD,IAArD5lB,EAAoD,EAApDA,UAAWh1B,EAAyC,EAAzCA,SAAU+4B,EAA+B,EAA/BA,OAAQ5D,EAAuB,EAAvBA,OAChDG,GADuE,2DAC3DC,gBAClB,IAAKJ,EAAQ,OAAO,KACpB,IAAMh2B,EAASoB,KAAI40B,EAAQ4D,GAC3B,IAAK55B,EAAQ,OAAO,KACpB,IAAM2lB,EAAmBvkB,KAAI40B,EAAQ,oBAC/BjhB,EAAI,UAAMohB,EAAU,aAAD,OAAct1B,EAAd,kBAAgC+4B,EAAhC,YAA0C55B,GAAU,CAAEsD,EAAGtD,KAAxE,OACR2lB,EAAgB,YAAQA,GAAqB,IAG/C,OACE,kBAACwU,GAAA,EAAD,CAAYtE,UAAWA,EAAWY,QAAQ,SACvC1hB,IAKP0mC,GAAgBpjB,aAAe,CAC7BY,UAAU,GAGGwiB,U,+BClBTlnB,GAAYC,aAChB,CACEzpB,MAAO,CACLiqB,UAAW,KAGf,CAAEj4B,KAAM,kBAgCK2+C,GA7BK,SAAC9lB,GAC2BA,EAAtCG,QADsB,IACOG,EADR,aACiBN,EADjB,aAEvBO,EAAYC,eACZL,EAAUxB,GAAUqB,GAC1B,GAAIA,EAAM2D,MACR,MAAM,IAAIt0B,MAAM,mGAGlB,OACE,kBAACmhC,GAAA,EAAD,eACE7M,MAAOpD,EAAU,oBACjBwlB,YAAU,EACVtd,WAAY,CACVud,aACE,kBAACC,GAAA,EAAD,CAAgBla,SAAS,OACvB,kBAAC,KAAD,CAAYlsB,MAAM,eAIxBogB,UAAWE,EAAQhrB,OACfmrB,K,4HCxBJ4lB,GAAW,SAACpzC,GAChB,OAAQA,GACN,IAAK,QACH,OAAOqzC,KAAI,KACb,IAAK,OACH,OAAOC,KAAM,KACf,IAAK,eACH,OAAOC,KAAO,KAChB,IAAK,SACH,OAAOC,KAAW,KACpB,IAAK,mBACH,OAAOC,KAAK,KACd,IAAK,aACH,OAAOC,KAAK,KACd,IAAK,gBACH,OAAOC,KAAO,KAChB,IAAK,YACH,OAAOC,KAAM,KACf,IAAK,UACH,OAAOC,KAAOC,KAChB,QACE,OAAOzE,KAAK,OAIZ0E,GAA0BjoB,cAAW,SAAChC,GAAD,MAAY,CACrDgB,KAAM,GACNoI,KAAM,YAAiB,IAAdlzB,EAAa,EAAbA,OACD+qB,EAAkBqoB,GAASpzC,GACjC,MAAO,CACL+M,MAAO+c,EAAME,QAAQ6I,gBAAgB9H,GACrCA,gBAAiBA,EACjB,mBAAoB,CAClBA,gBAAiBipB,qBAAUjpB,EAAiB,YAMvCkpB,GAAiB,SAAC,GASxB,IARL9mB,EAQI,EARJA,UACSqE,EAOL,EAPJnE,QAEAC,GAKI,EANJF,SAMI,EALJE,QACA4D,EAII,EAJJA,OACA/4B,EAGI,EAHJA,SAEG+0B,GACC,EAFJqD,SAEI,4FACEvwB,EAAStH,KAAI40B,EAAQ4D,GACrB7D,EAAU0mB,GAAwB,CAAE/zC,SAAQqtB,QAASmE,IACrD/D,EAAYC,eAClB,IAAKJ,EAAQ,OAAO,KAEpB,IAAMuD,EAAQpD,EAAU,aAAD,OAAct1B,EAAd,kBAAgC+4B,EAAhC,YAA0ClxB,GAAU,CAAEpF,EAAGoF,IAEhF,OACE,kBAACmyB,GAAA,EAAD,eAAM9E,QAAS,CAAEvC,KAAMuC,EAAQ6F,MAAQ/F,UAAS,UAAKA,GAAa0D,MAAOA,GAAW/D,GAAkBI,MAI1G+mB,GAAetkB,aAAe,CAC5BY,UAAU,GAGZ,IAAM2jB,GAAkCpoB,cAAW,SAAChC,GAAD,MAAY,CAC7DgB,KAAM,CACJkB,QAAS,QAEXmoB,IAAK,YAAiB,IAAdn0C,EAAa,EAAbA,OAEN,MAAO,CACL+M,MAFYqmC,GAASpzC,SAOdo0C,GAAyB,SAAC,GAShC,IARLjnB,EAQI,EARJA,UACSqE,EAOL,EAPJnE,QAEAC,GAKI,EANJF,SAMI,EALJE,QACA4D,EAII,EAJJA,OACA/4B,EAGI,EAHJA,SAIMk1B,GADF,EAFJkD,SAEI,2FACY2jB,GAAgC,CAAEl0C,OAAQstB,EAAOttB,OAAQqtB,QAASmE,KAC5E/D,EAAYC,eAClB,IAAKJ,EAAQ,OAAO,KACpB,IAAMttB,EAAStH,KAAI40B,EAAQ4D,GAErBL,EAAQpD,EAAU,aAAD,OAAct1B,EAAd,kBAAgC+4B,EAAhC,YAA0ClxB,GAAU,CAAEpF,EAAGoF,IAEhF,OACE,kBAACyxB,GAAA,EAAD,CAAYtE,UAAWS,KAAWT,EAAWE,EAAQvC,MAAOiD,QAAQ,QAAQ4D,QAAM,GAChF,kBAAC,KAAD,CAAUxE,UAAWE,EAAQ8mB,IAAK1oC,SAAS,QAAQssB,MAAO,CAAExM,YAAa,KACxEsF,IAKPujB,GAAuBzkB,aAAe,CACpCY,UAAU,GAGL,IAAM8jB,GAA2B,SAAC,GASnC,EARJlnB,UAQK,IAPIqE,EAOL,EAPJnE,QAEAC,GAKI,EANJF,SAMI,EALJE,QACA4D,EAII,EAJJA,OACA/4B,EAGI,EAHJA,SAIMk1B,GADF,EAFJkD,SAEI,2FACY2jB,GAAgC,CAAEl0C,OAAQstB,EAASA,EAAOttB,OAAS,KAAMqtB,QAASmE,KAC5F/D,EAAYC,eAClB,IAAKJ,EAAQ,OAAO,KACpB,IAAMttB,EAAStH,KAAI40B,EAAQ4D,GAErBL,EAAQpD,EAAU,aAAD,OAAct1B,EAAd,kBAAgC+4B,EAAhC,YAA0ClxB,GAAU,CAAEpF,EAAGoF,IAEhF,OACE,kBAACumC,GAAA,EAAD,CAAS/qB,MAAOqV,EAAOyjB,WAAY,KACjC,kBAAC,KAAD,CAAUnnB,UAAWE,EAAQ8mB,IAAK1oC,SAAS,YAKjD4oC,GAAyB1kB,aAAe,CACtCY,UAAU,GAGG0jB,U,gCCjHAM,GA7BI,SAAC,GAAuE,IAAD,IAApE1jB,aAAoE,MAA5D,iBAA4D,EAA1C3kB,EAA0C,EAA1CA,SAAUihB,EAAgC,EAAhCA,UAAWZ,EAAqB,EAArBA,KAASW,EAAY,wDAClFO,EAAYC,eADsE,EAExD8B,IAAMuG,SAAS,MAFyC,mBAEjF6B,EAFiF,KAEvEyO,EAFuE,KAGlF1O,EAAOx0B,QAAQy0B,GAYrB,OACE,6BACE,kBAAC,KAAD,eAAQwJ,QAZQ,SAACvG,GACnBA,EAAM6X,kBACNrM,EAAYxL,EAAM6L,gBAUc7V,MAAOpD,EAAUoD,GAAQ1D,UAAWA,EAAW30B,IAAI,UAAa00B,GAC3FX,GAAQ,kBAAC,KAAD,OAEX,kBAAC,KAAD,CAAMjqB,GAAG,YAAYs1B,SAAUA,EAAU+O,aAAW,EAAChP,KAAMA,EAAMiP,QAVjD,SAAC/L,GACnBA,EAAM6X,kBACNrM,EAAY,QASP5W,WAAS/4B,IAAIwV,GAAU,SAAClI,GAAD,OACtBA,GAAS0rB,yBAAe1rB,GAASwrB,IAAMH,aAAarrB,EAAnB,eAA+BkpB,IAAW,WCQ/ErB,GAAYC,cAAW,SAAChC,GAC5B,MAAO,CACLvO,KAAM,CACJxO,MAAO,eA2MEynC,GAtMoBhlB,IAAMwgB,YACvC,WAAgF1b,GAAS,IAAtFn8B,EAAqF,EAArFA,SAAqB+4B,GAAgE,EAA3E/D,UAA2E,EAAhE+D,QAAQ8b,EAAwD,EAAxDA,QAASC,EAA+C,EAA/CA,aAActsB,EAAiC,EAAjCA,aAAiB6M,EAAgB,0FAChFhtB,EAAe0sC,eACfzf,EAAYC,eACZiG,EAAWC,eACXL,EAASC,eAGT2Z,GAFUthB,KACH0G,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC5B2a,gBAPkE,EAQxDrX,oBAAS,GAR+C,mBAQ/EvwB,EAR+E,KAQtE6nC,EARsE,OAS9DtX,oBAAS,GATqD,gCAUxDA,sBAVwD,mBAWhFlF,GAXgF,UAWxEpD,EAAUuf,EAAO,0DAAwD9b,KACjFujB,EAAexH,GAAgBA,EAAar5B,OAC5C8gC,EAAoBzH,GAAgBA,EAAa9/B,YAsKvD,OACE,kBAAC0rB,GAAA,EAAD,eACErgC,IAAI,SACJ87B,IAAKA,EACL8M,QA9DgB,SAACN,GACnBA,EAAE4R,kBACFrF,GAAW,GACX1Z,EAAS2Z,gBAET9sC,EAAaI,QAAQzI,EAAU,CAAEtC,OAAO,eAAMo3C,KAAkBn2C,MAAK,gBAAG+O,EAAH,EAAGA,MAAH,OACnErF,EACGI,QAAQzI,EAAU,CAAEtC,OAAO,eAAMo3C,GAAgBroC,WAAY,CAAEE,QAASe,KACxE/O,KAFH,uCAEQ,mCAAA+D,EAAA,sDAASwB,EAAT,EAASA,KAAMwJ,EAAf,EAAeA,MAuBnB0nC,GAtBIA,EAAUlxC,EAAK3F,KAAI,SAAC82C,GACtB,IAAMC,EAAU,GAShB,OAPIT,GAAWA,EAAQz2C,OACrBy2C,EAAQz0C,SAAQ,SAACm1C,GACXF,EAAKE,IAAID,EAAQnE,KAAR,MAAAmE,EAAO,YAASD,EAAKE,GAAGh3C,KAAI,SAACZ,GAAD,OAAUA,EAAKqc,eAG1Ds7B,EAAQnE,KAAR,MAAAmE,EAAO,YAASD,EAAKtc,GAAQx6B,KAAI,SAACZ,GAAD,OAAUA,EAAKqc,YAE3C,CACLw7B,QAASH,EAAKlrC,GACdma,WAAY,WACT+wB,EAAK75B,qBAAuB65B,EAAK75B,qBAAuB,IAAM,IAAI3b,UAAU,EAAG,MAC/Ew1C,EAAKjxB,MAAQixB,EAAKjxB,MAAQ,IAAM,KAChCixB,EAAKn5C,KAAOm5C,EAAKn5C,KAAO,IAAM,KAE9BM,QAAQ,KAAM,KACdqD,UAAU,EAAG,KAChBy1C,eAGc53C,QAAO,SAAC+3C,GAAD,OAAYA,EAAOH,QAAQl3C,OAAS,MACvD4f,EAAQtQ,EAAQ0nC,EAAQh3C,QAElB,GACVg9B,EAAO5S,GAAY,mCAAgCuQ,EAAhC,UAAgD,OAAQ,CACzEuX,YAAatyB,EACbA,MAAOA,IAEPo3B,EAAQh3C,OACVs3C,GAAcN,GAASz2C,MAAK,SAACuF,GAC3B,IAAMxB,EAAItG,SAASq3C,cAAc,KACjC/wC,EAAEk9B,MAAM/L,QAAU,OAClBz3B,SAASiZ,KAAKq+B,YAAYhxC,GAC1BA,EAAEixC,KAAOzvC,EAAKrF,IACd6D,EAAEkxC,QACFsB,GAAW,GACX1Z,EAASma,oBAGXT,GAAW,GACX1Z,EAASma,iBAEXX,EAAYh1C,GA7CR,2CAFR,2DAyDA67B,SAAUxuB,KAAaivC,GAAgBC,IACnClnB,GAEJ,kBAACukB,GAAA,EAAD,KACE,kBAAC3D,GAAD,OAEF,kBAAC3c,GAAA,EAAD,CAAY1D,QAAQ,WAAW8C,O,0CClOjC8jB,GAAenlB,IAAMwgB,YACzB,WAYE1b,GACI,IAXFvvB,EAWC,EAXDA,KAWC,IAVDlP,cAUC,MAVQ++C,GAUR,MATDC,kBASC,MATY,IASZ,EARD18C,EAQC,EARDA,SACAipC,EAOC,EAPDA,QAOC,IANDvQ,aAMC,MANO,mBAMP,MALDtE,YAKC,MALMuoB,GAKN,EAJSC,EAIT,EAJDvI,SACGhf,EAGF,8FACGC,EAAYC,eACZsnB,EAAsBC,qBAAWC,MACjC1I,EAAWuI,GAAkBC,EAC7Bx0C,EAAe0sC,eACf3Z,EAASC,eACT2hB,EAAc9a,uBAClB,SAACQ,GACCr6B,EACGI,QAAQzI,EAAU,CACjB4M,OACAlP,SACA+O,WAAY,CAAEC,KAAM,EAAGC,QAAS+vC,KAEjC/9C,MAAK,gBAAGuF,EAAH,EAAGA,KAAH,OAAcmwC,GAAYA,EAASnwC,EAAMowC,aAAoBjsC,GAAeA,EAAcrI,MANlG,OAOS,SAACZ,GACNC,QAAQD,MAAMA,GACdg8B,EAAO,6BAA8B,cAElB,oBAAZ6N,GACTA,EAAQvG,KAGZ,CAACr6B,EAAcgsC,EAAU32C,EAAQg/C,EAAYthB,EAAQ6N,EAASjpC,EAAU4M,IAG1E,OACE,kBAAC8zB,GAAA,EAAD,eAAUrgC,IAAI,SAAS87B,IAAKA,EAAK8M,QAAS+T,GAAiBroB,GAAkBU,IAC3E,kBAACukB,GAAA,EAAD,KAAexlB,GACf,kBAACkF,GAAA,EAAD,CAAY1D,QAAQ,WAAWN,EAAUoD,QAM3CikB,GAAc,kBAAC,KAAD,MACdF,GAAgB,GAEhB9nB,GAAoB,SAAC,GAAD,EAAGM,SAAH,qCAgBXunB,M,kDCjEAxW,OARf,SAAcjR,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BAAM5nB,EAAE,uI,oQCHd,IAOa8vC,GAAc15C,IAAH,KAPH,wECcfmwB,GAAYC,aAAW,CAC3BvQ,KAAM,CACJxO,MAAO,aA2GIsoC,GAvGU7lB,IAAMwgB,YAAW,WAAiC1b,GAAS,IAAvCn8B,EAAsC,EAAtCA,SAAUtC,EAA4B,EAA5BA,OAAWq3B,EAAiB,sCAC3EyG,EAAWC,eACXt3B,EAAU4hC,eACV3K,EAASC,eACT/F,EAAYC,eAJ+D,GAKjE7B,KACckK,oBAAS,IAN0C,mBAMjEsX,GANiE,aAOzDtX,oBAAS,GAPgD,mBAO1E4B,EAP0E,KAOpE4Y,EAPoE,OAQ7Cxa,qBAR6C,mBAQ1Euf,EAR0E,KAQ9DC,EAR8D,KAc3EjP,EAAc,WAClBiK,GAAQ,IA4CV,OACE,oCACE,kBAAC1X,GAAA,EAAD,eACE4N,gBAAe9O,EAAO,yBAAsB9iC,EAC5C2gD,gBAAe7d,EAAO,YAAS9iC,EAC/B4gD,aAAW,wBACXC,gBAAc,OACdl9C,IAAI,SACJuU,MAAM,UACNunB,IAAKA,EACL8M,QA3DkB,WACtBmP,GAAQ,KA2DArjB,GAEJ,kBAAC6kB,GAAA,EAAD,KACE,kBAAC4D,GAAD,OAEF,kBAAClkB,GAAA,EAAD,CAAY1D,QAAQ,WAAWN,EAAU,2BAG3C,kBAACmoB,GAAA,EAAD,CAAQje,KAAMA,EAAMiP,QAASN,EAAauP,kBAAgB,qBACxD,kBAACC,GAAA,EAAD,CAAaxzC,GAAG,qBAAhB,yIACA,kBAACyzC,GAAA,EAAD,KACE,kBAACC,GAAA,EAAD,iZAGA,kBAACxgB,GAAA,EAAD,CACEygB,WAAS,EACTtqB,OAAO,QACPrpB,GAAG,OACHuuB,MAAM,mDACNv6B,KAAK,OACLm1B,WAAS,EACTuJ,SAzEW,SAAC6F,GACpB0a,EAAc,CACZlhD,KAAMwmC,EAAM11B,OAAOpQ,YA0EjB,kBAACmhD,GAAA,EAAD,KACE,kBAAC,KAAD,CAAQ9U,QAASkF,EAAav5B,MAAM,UAAU8jB,MAAM,yCACpD,kBAAC,KAAD,CAAQuQ,QAxEG,WACjBiM,GAAW,GACX1Z,EAAS2Z,gBDlCE,SAACz3C,GACd,OAAOiI,GAAiBlC,OAAO,CAC7BC,SAAUu5C,GACVt5C,UAAU,eAAMjG,GAChBkG,QAAS,SAACxE,GACRyE,MAAMzE,MC+BR4+C,CAAa,CACX9hD,KAAMihD,EAAWjhD,KACjB8D,SAAUA,EAASmsC,cACnBzuC,WAECiB,MAAK,WAAM,4CAEV,kCAAA+D,EAAA,wEAEuB8B,IAAUvI,EAAU+E,IAA/B+Y,EAFZ,EAEYA,OAFZ,SAKcuzB,GAAW,CAAE9gC,MAAO,CAAEwP,KAAMjC,KAL1C,gBAIoBwzB,EAJpB,EAIMrpC,KAAQA,KAEVs3B,EAASR,GAAQuS,IANrB,gDAQIluC,QAAQC,IAAI,UAAZ,MARJ,0DAFU,sBACV87B,EAAO,oCAAqC,OAAQ,CAAEl/B,KAAMihD,EAAWjhD,OAYvEk8C,GAAQ,GAbE,mCAcVla,GACA/5B,OApBJ,OAsBS,SAAC/E,GACNg8B,EAAwB,kBAAVh8B,EAAqBA,EAAQA,EAAMiF,SAAW,6BAA8B,cAvB9F,SAyBW,WACP6wC,GAAW,GACX1Z,EAASma,oBAyCsB/gC,MAAM,UAAU8jB,MAAM,iE,qDC7GvDhF,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCssB,SAAU,CACRlrB,QAAS,OAkFEmrB,GA9EoB,SAAC,GAAqC,IAAnCl+C,EAAkC,EAAlCA,SAAU6yC,EAAwB,EAAxBA,QAAY9d,EAAY,uCAChEG,EAAUxB,KACV4B,EAAYC,eACV4oB,EAA2DtL,EAA3DsL,mBAAoBC,EAAuCvL,EAAvCuL,sBAAuBC,EAAgBxL,EAAhBwL,YAHmB,EAItCzgB,mBAAS,MAJ6B,mBAI/D6B,EAJ+D,KAIrDyO,EAJqD,OAKxBtQ,mBAASugB,GALe,mBAK/DG,EAL+D,KAK9CC,EAL8C,KAMhE/e,EAAOx0B,QAAQy0B,GAYf+e,EAAe,SAACC,GAAD,OAAY,WAE/B,IADiBA,EAAO1pB,MAAM+jB,SAC9B,CACA,IAAM/f,EAAS0lB,EAAO1pB,MAAM0pB,QAAUA,EAAO1pB,MAAMgE,OAC7C2lB,EAAeJ,EAAgBzrC,QAAQkmB,GACvC4lB,EAAU,YAAOL,IAED,IAAlBI,EACFC,EAAWxN,KAAKpY,GAEhB4lB,EAAWC,OAAOF,EAAc,GAGlCH,EAAmBI,GACnBP,EAAsBO,MAGxB,OACE,6BACE,kBAAC,KAAD,eACE1V,QA9Bc,SAACvG,GACnBA,EAAM6X,kBACNrM,EAAYxL,EAAM6L,gBA6Bd7V,MAAOpD,EAAU,0BAA2B,CAAE7yB,EAAG,kBACjDpC,IAAI,UACA00B,GAEJ,kBAAC,KAAD,OAEF,kBAAC,KAAD,CAAM5qB,GAAG,qBAAqBs1B,SAAUA,EAAUD,KAAMA,EAAMiP,QAhC9C,SAAC/L,GACnBA,EAAM6X,kBACNrM,EAAY,QA+BP2Q,KAAQR,GAAa9/C,KAAI,SAACkgD,EAAQtnC,GACjC,IAAM4hB,EAAS0lB,EAAO1pB,MAAM0pB,QAAUA,EAAO1pB,MAAMgE,OAC7C+f,EAAW2F,EAAO1pB,MAAM+jB,SACxBgG,EAAO,uBAAmB/lB,GAEhC,OACE,kBAAC2H,GAAA,EAAD,CAAUrgC,IAAK04B,EAAQ9wB,UAAMvL,EAAW28C,QAAM,EAACpQ,QAASuV,EAAaC,IACnE,kBAAC7E,GAAA,EAAD,KACE,kBAACmF,GAAA,EAAD,CACEljB,SAAUid,EACVkG,QAASlG,IAAiD,IAArCwF,EAAgBzrC,QAAQkmB,GAC7CkmB,UAAW,EACXC,eAAa,EACbliB,WAAY,CAAE,kBAAmB8hB,GACjC9pB,UAAWE,EAAQ+oB,YAGvB,0BAAM9zC,GAAI20C,GAAUxpB,EAAU,aAAD,OAAct1B,EAAd,mBAAiC+4B,GAAU,CAAEt2B,EAAGs2B,YCpErFomB,GAAc,SAAC,GAAD,IAClBtM,EADkB,EAClBA,QACAnI,EAFkB,EAElBA,YACA1V,EAHkB,EAGlBA,UACAh1B,EAJkB,EAIlBA,SACAqc,EALkB,EAKlBA,QACAo8B,EANkB,EAMlBA,iBACAN,EAPkB,EAOlBA,WACA9D,EARkB,EAQlBA,SACAS,EATkB,EASlBA,aACAsK,EAVkB,EAUlBA,gBACA1nB,EAXkB,EAWlBA,UACAzC,EAZkB,EAYlBA,SAGAyjB,GAfkB,EAalB/N,YAbkB,EAclB0U,gBAdkB,EAelB3G,YACAhrC,EAhBkB,EAgBlBA,MACG2nB,EAjBe,0OAmBlB,kBAACgV,GAAA,EAAD,eAAYrV,UAAWA,GAAesqB,aAAsBjqB,IACzDhZ,GACC6a,uBAAa7a,EAAS,CACpBrc,WACA04C,aACAD,mBACAN,aACArD,eACAyK,QAAS,WAEZ7nB,GAAa,kBAAC8nB,GAAA,EAAD,CAAcvqB,SAAUA,IACtC,kBAAC,GAAD,CAA4Bj1B,SAAUA,EAAU6yC,QAASA,IACzD,kBAAC4M,GAAD,KACE,kBAAC,GAAD,CACE5jB,SAAoB,IAAVnuB,EACV1N,SAAUA,EACV4M,KAAM89B,EACNhtC,OAAM,2BAAOo3C,GAAiBsK,GAC9B/K,SAAUA,EACVqI,WAAY,IACZhkB,MAAM,8BAER,kBAAC,GAAD,CAAwBoc,aAAcA,EAAc90C,SAAUA,EAAU+4B,OAAO,SAC/E,kBAAC,GAAD,CAAwB+b,aAAcA,EAAc90C,SAAUA,EAAU+4B,OAAO,UAC/E,kBAAC,GAAD,CACE+b,aAAcA,EACd90C,SAAUA,EACV+4B,OAAO,QACP8b,QAAS,CAAC,QAAS,UAErB,kBAAC,GAAD,CACEhZ,SAA+C,IAArC37B,OAAOC,KAAK20C,GAAc12C,OACpC4B,SAAUA,EACVtC,OAAM,eAAOo3C,QAMrBqK,GAAY3nB,aAAe,CACzBmT,YAAa,GACb0U,gBAAiB,kBAAM,OAGVF,UCrET5E,GAAkB,SAAC5R,GAAD,OAAOA,EAAE4R,mBAE3BmF,GAAsB,SAAC,GAAiE,IAA/D1qB,EAA8D,EAA9DA,UAAWC,EAAmD,EAAnDA,SAAoB8D,GAA+B,EAAzC/4B,SAAyC,EAA/B+4B,QAAQ5D,EAAuB,EAAvBA,OAAuB,sEAC3F,IAAKA,EAAQ,OAAO,KACpB,IAAMj5B,EAAOqE,KAAI40B,EAAQ4D,GACnBj8B,EAAI,UAAMm4B,EAAN,YAAkBE,EAAOhrB,GAAzB,SACV,OACE,kBAAC2rB,GAAA,EAAD,CAAMC,GAAIj5B,EAAMmsC,QAASsR,IACvB,kBAACjhB,GAAA,EAAD,CAAY1D,QAAQ,QAAQZ,UAAWA,GACpC94B,KAMTwjD,GAAoBloB,aAAe,CACjCY,UAAU,GCVG4N,OARf,SAAcjR,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BAAM5nB,EAAE,iUCKC64B,OARf,SAAcjR,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BAAM5nB,EAAE,6XCKC64B,OARf,SAAcjR,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BAAM5nB,EAAE,0XCKC64B,OARf,SAAcjR,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BAAM5nB,EAAE,yM,+DCiDCwyC,GAbE,SAAC,GAA0B,IAAxBxqB,EAAuB,EAAvBA,OACZG,GADmC,2BACvBC,gBAClB,IAAKJ,EAAQ,OAAO,KACpB,IAAM9R,EAAQiS,EAAU,6BAAD,OAA8BH,EAAOltB,MAAQ,CAAExF,EAAG0yB,EAAOltB,OAC1EmsB,EAnCQ,SAACnsB,GACf,IAAImsB,EACJ,OAAQnsB,GACN,IAAK,QACHmsB,EAAO,kBAAC,GAAD,MACP,MACF,IAAK,UACHA,EAAO,kBAAC,GAAD,MACP,MACF,IAAK,aACHA,EAAO,kBAAC,GAAD,MACP,MACF,IAAK,QACHA,EAAO,kBAAC,GAAD,MACP,MACF,IAAK,aACHA,EAAO,kBAAC,KAAD,MACP,MACF,IAAK,UACHA,EAAO,kBAAC,KAAD,MACP,MACF,IAAK,WACHA,EAAO,kBAAC,KAAD,MACP,MACF,QACEA,EAAO,kBAAC,GAAD,MAGX,OAAOA,EAOMmS,CAAQpR,EAAOltB,MAE5B,OACE,kBAACmmC,GAAA,EAAD,CAAS/qB,MAAOA,EAAOo0B,UAAU,OAC/B,8BAAOrjB,KC7CPwrB,GAAS,qEAETC,GAAa,SAAC,GAA4D,IAA1D7qB,EAAyD,EAAzDA,UAAqB+D,GAAoC,EAA9C/4B,SAA8C,EAApC+4B,QAAoC,IAA5B5D,cAA4B,MAAnB,GAAmB,EAAZJ,EAAY,2DACvEhZ,EAAQxb,KAAI40B,EAAQ4D,GAC1B,IAAKhd,EAAO,OAAO,KACnB,IAAM+jC,EAAc/jC,EAAMvf,QAAQojD,GAAQ,iBAE1C,OACE,kBAACtmB,GAAA,EAAD,eAAYzD,UAAU,OAAOD,QAAQ,QAAQZ,UAAWA,GAAeL,GAAkBI,IACtF+qB,IAKPD,GAAWroB,aAAe,CACxBY,UAAU,GAGGynB,UCfTnsB,GAAYC,cAChB,SAAChC,GAAD,MAAY,CACVgB,KAAM,GACNyB,KAAM,CACJhB,YAAa,IAEfkL,SAAU,CAAEwB,WAAY,KACxBc,UAAW,CACTd,WAAY,IACZlrB,MAAO,QAETyO,MAAO,GACPq2B,IAAK,CAAEtmB,YAAa,MAEtB,CAAEl3B,KAAM,iCAiDKo+C,GA9CoB,SAAC,GAS7B,IARLva,EAQI,EARJA,WACA5oB,EAOI,EAPJA,MACAkpB,EAMI,EANJA,iBACAC,EAKI,EALJA,WACAC,EAII,EAJJA,YACSlH,EAGL,EAHJnE,QACAsL,EAEI,EAFJA,kBACGnL,EACC,mHACEH,EAAUxB,GAAU,CAAEwB,QAASmE,IAC/B4G,EAAiBO,EAAkBT,GACzC,IAAKA,EAAW51B,GACd,OACE,kBAACu2B,GAAA,EAAD,eAAUrgC,IAAK0/B,EAAW51B,IAAQkrB,GAC/B4K,GAGP,IAAMQ,EAAgBJ,IAAqBlpB,EACrChb,EAAUG,KAAM2jC,EAAgBM,GAChCH,EAAQtD,KAAMmD,EAAgB9jC,GAEpC,OACE,kBAACukC,GAAA,EAAD,eACErgC,IAAK0/B,EAAW51B,GAChBm0B,SAAUmC,EACVzL,UAAWS,KAAWP,EAAQvC,KAAT,gBAClBuC,EAAQoJ,SAAWgC,KAElBjL,GAEJ,kBAACukB,GAAA,EAAD,KACE,kBAAC,GAAD,CAAUzkB,OAAQ4K,KAEpB,kBAAC4O,GAAA,EAAD,CACE7c,QAASsO,EAAM7hC,KAAI,SAACoiC,EAAMxpB,GAAP,OACjB,0BAAM9W,IAAK8W,EAAO6d,UAAW2L,EAAKC,UAAY1L,EAAQ0L,UAAY,IAC/DD,EAAKzsB,SAGVge,UAAW,kBAAC,GAAD,CAAYiD,OAAQ4K,EAAYhH,OAAO,cC1C3CgnB,GAlBI,SAAC1/C,GAA4B,IAAvB2/C,EAAsB,uDAAP,GAChCC,EAAWzL,KAAK1X,MAAMh+B,OAAOohD,aAAaC,QAAQj/C,KAAmB,GAD9B,EAGP08B,oBAAS,WAE7C,OADgBv9B,EAAME,KAAI0/C,EAAU5/C,EAAK2/C,GAAgBC,KAJd,mBAGtCG,EAHsC,KAGzBC,EAHyB,KAQvCC,EAAW,SAAC1jD,GAChB,IAAM2jD,EAAe3jD,aAAiB4jD,SAAW5jD,EAAMwjD,GAAexjD,EACtEyjD,EAAeE,GACfzzC,KAAImzC,EAAU5/C,EAAKkgD,GACnBzhD,OAAOohD,aAAaO,QAAQv/C,EAAeszC,KAAKC,UAAUwL,KAG5D,MAAO,CAACG,EAAaE,ICQRI,GAxBc,SAAC,GAA4C,IAA1CvrB,EAAyC,EAAzCA,OAAQ4D,EAAiC,EAAjCA,OAAQ4nB,EAAyB,EAAzBA,SAAa5rB,EAAY,+CACvE,IAAKI,EAAQ,OAAO,KACpB,IAAMra,EACJqa,EAAO4D,GAAQnsB,MACfuoB,EAAO4D,GAAQnsB,MAAK,SAACm/B,EAAOE,GAC1B,IAAM2U,EAAQhpC,KAAOm0B,EAAMjoB,WAAW+8B,OAChCC,EAAQlpC,KAAOq0B,EAAOnoB,WAAW+8B,OACvC,OAAID,EAAQE,EAAc,EACtBA,EAAQF,GAAe,EACpB,KAGX,IAAK9lC,EAAU,OAAO,KAEtB,IAAM6K,EAAU7K,EAASA,EAAS1c,OAAS,GAE3C,OACE,oCACE,kBAAC,KAAD,iBAAe22B,EAAf,CAAsBI,OAAQxP,EAASoT,OAAO,UAC7C4nB,GAAY,kBAACI,GAAA,EAAD,iBAAehsB,EAAf,CAAsBisB,UAAQ,EAAC7rB,OAAQxP,EAASoT,OAAO,iBCnBpErF,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvC1uB,KAAM,CACJg+C,eAAgB,OAChB5a,OAAQ,eAINkU,GAAkB,SAAC5R,GAAD,OAAOA,EAAE4R,mBAalB2G,GAXK,SAAC,GAAsD,IAApDlhD,EAAmD,EAAnDA,SAAU+4B,EAAyC,EAAzCA,OAAQ5D,EAAiC,EAAjCA,OAAQphB,EAAyB,EAAzBA,SAAaghB,EAAY,0DAClEG,EAAUxB,KACV52B,EAAI,WAAOkD,EAAP,YAAmBm1B,EAAOhrB,GAA1B,SAEV,OACE,kBAAC2rB,GAAA,EAAD,CAAMd,UAAWE,EAAQjyB,KAAM8yB,GAAIj5B,EAAMmsC,QAASsR,IAC/CljB,IAAMH,aAAanjB,EAAnB,2BAAkCghB,GAAlC,IAAyC/0B,WAAU+4B,SAAQ5D,c,WCH5DgsB,IAVYxtB,cAAW,SAAChC,GAAD,MAAY,CACvCiC,UAAW,CACTb,QAAS,IAEXtX,OAAQ,CACNolB,SAAU,EACVzN,YAAa,QAIqB,SAAC,GAAuD,IAArD4B,EAAoD,EAApDA,UAA6BG,GAAuB,EAAzCn1B,SAAyC,EAA/B+4B,OAA+B,EAAvB5D,QAC9DG,GADqF,2DACzEC,gBAClB,IAAKJ,EAAQ,OAAO,KACpB,IAAMh3B,EAAOg3B,EAAO9Q,sBAAwB8Q,EAAOh3B,KAC7CjC,EAAOi5B,EAAOj5B,KAGdgY,GAFaihB,EAAO7Q,WAEhB,WAAOgR,EAAU,kDAAD,OAAmDn3B,GAAQ,CAAEsE,EAAGtE,IAAhF,aAA4FjC,IAEtG,OACE,kBAACo9B,GAAA,EAAD,CAAYtE,UAAWA,EAAWY,QAAQ,SACvC1hB,KAKPitC,GAA8B3pB,aAAe,CAC3CY,UAAU,GAGG+oB,U,8BCzBTztB,GAAYC,cAChB,SAAChC,GAAD,MAAY,CACV2nB,KAAM,CACJnlB,WAAYxC,EAAMtb,QAAQ,GAC1BouB,WAAY,EACZ5Q,QAAS,OACTyY,WAAY,WACZ8U,SAAU,OACV1Q,UAAW/e,EAAMtb,QAAQ,IACzBgrC,cAAe,QAEjBC,SAAU,CAAEC,MAAO,YAErB,CAAErlD,KAAM,2BAkCGslD,GAAyB,SAAC,GAahC,IAAD,IAZJtsB,eAYI,MAZM,GAYN,EAXJF,EAWI,EAXJA,UACAh1B,EAUI,EAVJA,SACAwzB,EASI,EATJA,OACAoC,EAQI,EARJA,QACAvZ,EAOI,EAPJA,QAOI,IANJo8B,wBAMI,MANe,GAMf,EALJgJ,EAKI,EALJA,WACAC,EAII,EAJJA,cACA9L,EAGI,EAHJA,aACA+L,EAEI,EAFJA,QACGtsB,EACC,yJACJyI,qBAAU,WACRzhB,EAAQjc,SAAQ,SAAC1C,GACf,GAAIA,EAAOq3B,MAAM+jB,UAAYp7C,EAAOq3B,MAAMijB,aACxC,MAAM,IAAI5zC,MACR,wIAIL,CAACiY,IAEJ,IAQMulC,EAAa1f,uBAAY,SAACQ,GAAD,OAAW+e,EAAW/e,EAAM6L,cAAcsT,QAAQxhD,OAAM,CAACohD,IACxF,OACE,wCACEzsB,UAAWS,KAAWT,EAAWE,EAAQokB,OAlErB,SAAC,GAAD,EACxBhK,OADwB,EAExBwS,MAFwB,EAGxBC,YAHwB,EAIxBC,2BAJwB,EAKxBC,qBALwB,EAMxB7iD,MANwB,EAOxB4pC,OAPwB,EAQxB8L,aARwB,EASxBwE,KATwB,EAUxB1D,aAVwB,EAWxBsM,gBAXwB,EAYxBC,oBAZwB,EAaxBrM,QAbwB,EAcxBxD,SAdwB,EAexB8P,wBAfwB,EAgBxBrM,SAhBwB,EAiBxBoC,WAjBwB,EAkBxBkK,YAlBwB,EAmBxBC,aAnBwB,EAoBxBC,aApBwB,EAqBxBC,gBArBwB,EAsBxBC,WAtBwB,EAuBxBrlB,QAvBwB,EAwBxBslB,MAxBwB,EAyBxBC,WAzBwB,EA0BxB53C,OA1BwB,EA2BxB63C,QA3BwB,8YAmEhBjuB,CAAkBU,GAFxB,CAGEwtB,SAAUjN,EACVzZ,IAAKwlB,IAbPtlC,EAAQ3e,QACN,SAACm7C,GAAD,OACEA,EAAc9jB,MAAM+jB,UACpBL,EAAiBI,EAAc9jB,MAAMgE,SAC2B,qBAAzDggB,KAAU2I,EAAe7I,EAAc9jB,MAAMgE,WAWnCx6B,KAAI,SAACs6C,GAAD,OACrB,kBAACiK,GAAA,EAAD,CACEziD,IAAKw4C,EAAc9jB,MAAMgE,OACzB8f,cAAeA,EACf+I,WAAYA,EACZ5hD,SAAUA,EACVwzB,OAAQA,EACRoC,QAASA,OAGb,yBAAKZ,UAAWE,EAAQosB,WACxB,4BAAQnjD,KAAK,SAASyhC,MAAO,CAAE/L,QAAS,SAAxC,YAmDSkvB,GAxBY,SAAChuB,GAC+CA,EAAjEG,QAAiEH,EAAvC2sB,cADG,IACYvJ,EAAwBpjB,EAAxBojB,WAAe9iB,EAD5B,aACqCN,EADrC,0CAE9BG,EAAUxB,GAAUqB,GAFU,EAGV6I,mBAAS,IAHC,mBAG7BvD,EAH6B,KAGtB2oB,EAHsB,KAI9BC,EAd2C,SAAC,GAAD,IAAGvB,EAAH,EAAGA,cAAerlC,EAAlB,EAAkBA,QAAlB,mBAAC,eAC/CA,EACA3e,QAAO,SAACm7C,GAAD,OAAmBA,EAAc9jB,MAAM+jB,UAAYD,EAAc9jB,MAAMijB,gBAC9ExuC,QACC,SAACC,EAAKovC,GAAN,OAAwBqK,KAAU,eAAKz5C,GAAOovC,EAAc9jB,MAAMgE,OAAQ8f,EAAc9jB,MAAMijB,gBAC9F,KAED0J,GAO0CyB,CAAoCpuB,GAEjFquB,cAAqB,WACnBJ,EAASC,KACR,CAACA,IAMJ,OACE,kBAAC,KAAD,CACEJ,SANiB,SAAC93C,GACpBotC,EAAWptC,IAMT22C,cAAernB,EACfgpB,SAAQ,eAAOC,MACfxY,OAAQ,SAACyY,GAAD,OAAe,kBAAC,GAAD,eAAwBruB,QAASA,GAAaquB,EAAeluB,QCpJpF3B,GAAYC,aAChB,CACEhB,KAAM,CAAEkB,QAAS,iBAEnB,CAAE33B,KAAM,6BAgCKsnD,GA7BkB,SAAC,GAA0E,IAAxE7B,EAAuE,EAAvEA,QAAmC3sB,GAAoC,EAA9DE,QAA8D,EAApCF,WAAwBD,GAAY,EAAzB/0B,SAAyB,8DACnGk1B,EAAUxB,GAAUqB,GAEpB0uB,EAAevhB,uBACnB,SAACQ,GACCA,EAAM4V,iBACmC,oBAAlCqJ,EAAQ9e,QAAQ6gB,cACnB/B,EAAQ9e,QAAQ6gB,gBAChB/B,EAAQ9e,QAAQ8gB,cAAc,IAAIC,MAAM,SAAU,CAAEC,YAAY,OAEtE,CAAClC,IAGH,OACE,uCAAK3sB,UAAWS,KAAWP,EAAQvC,KAAMqC,IAAgBD,GACvD,kBAAC,KAAD,CACEC,UAAU,eACV0D,MAAM,yBACNorB,kBAAgB,EAChBluB,QAAQ,YACRz3B,KAAK,SACL8qC,QAASwa,GAET,kBAAC,KAAD,SC7BF/vB,GAAYC,aAChB,CACE0lB,OAAQ,GACRC,KAAM,IAER,CAAEp9C,KAAM,uBA2DK6nD,GAxDA,SAAChvB,GACd,IAAMG,EAAUxB,GAAUqB,GADF,EAEiEivB,aAAejvB,GAAhG/0B,EAFgB,EAEhBA,SAAU04C,EAFM,EAENA,WAAY+I,EAFN,EAEMA,WAAYtJ,EAFlB,EAEkBA,WAAYM,EAF9B,EAE8BA,iBAAkB3D,EAFhD,EAEgDA,aA6CxE,MAAyB,WAAlB/f,EAAMwqB,QA3CQ,WACgExqB,EAA3EG,QAA2EH,EAAjDwqB,QADR,IACiBxrC,EAAwCghB,EAAxChhB,SAAmB4tC,GAAqB5sB,EAA9Ba,QAA8Bb,EAArB4sB,SAAYtsB,EADjD,aAC0DN,EAD1D,sDAGzB,OACE,oCACE,kBAAC,GAAD,eACEC,UAAWE,EAAQmkB,OACnBr5C,SAAUA,EACV2hD,QAASA,GACLrC,aAAsBjqB,KAE5B,kBAAC,GAAD,eACEL,UAAWE,EAAQmkB,OACnBr5C,SAAUA,EACVqc,QAASgb,IAAMC,SAAS2sB,QAAQlwC,GAChC2kC,WAAYA,EACZP,WAAYA,EACZM,iBAAkBA,EAClB3D,aAAcA,GACVwK,aAAsBjqB,MAwBE6uB,GAlBjB,WACyDnvB,EAAlEG,QAAkEH,EAAxCwqB,QADV,IACmBxrC,EAA+BghB,EAA/BhhB,SAAU4tC,EAAqB5sB,EAArB4sB,QAAYtsB,EAD1C,aACmDN,EADnD,4CAGvB,OACE,kBAAC,GAAD,eACEC,UAAWE,EAAQokB,KACnBt5C,SAAUA,EACVqc,QAASgb,IAAMC,SAAS2sB,QAAQlwC,GAChC0tC,WAAYA,EACZhJ,iBAAkBA,EAClBiJ,cAAe5M,EACfqD,WAAYA,EACZwJ,QAASA,GACLrC,aAAsBjqB,KAKqB8uB,ICLjDzwB,I,OAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyyB,IAAK,CACHpxC,OAAQ,IAEVqxC,YAAa,CACX7wB,OAAQ,EACR,qBAAsB,EACtBK,QAAS,eACT,qBAAsB,WACtB8F,SAAU,UAEZ2qB,gBAAiB,CAAEjwB,UAAW,eAG1BkwB,GAAe5wB,cAAW,SAAChC,GAAD,MAAY,CAC1C6yB,UAAW,CACTrxB,SAAU,SAIRsxB,GAAwB,SAAC1vB,GAC7B,OACE,oCACE,kBAAC,GAAD,iBAA6BA,EAA7B,CAAoCgE,OAAO,UAC3C,kBAAC,GAAD,iBAA6BhE,EAA7B,CAAoCgE,OAAO,WAC3C,kBAAC,GAAD,iBAA6BhE,EAA7B,CAAoCgE,OAAO,QAAQ8b,QAAS,CAAC,QAAS,WACtE,kBAAC6P,GAAA,EAAqB3vB,GACrBjvB,GAAQi/B,IAAI,SAAU,SAAW,kBAAC,GAAqBhQ,KAKxD4vB,GAAa,SAAC5vB,GAClB,IAAM1tB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpS,EAAW7gB,GAAQA,EAAK6gB,SAAY,GACpCgN,EAAUqvB,KAChB,OACE,kBAACK,GAAuB7vB,EACtB,kBAAC,GAAD,CAAagE,OAAO,IAAI+f,UAAQ,IAChC,kBAAC,GAAD,CAAW/f,OAAO,SAASqF,KAAK,aAAa7F,UAAU,gBAAgBugB,UAAQ,IAC/E,kBAAC,GAAD,CAAW/f,OAAO,OAAOqF,KAAK,WAAW7F,UAAU,gBAAgBugB,UAAQ,IAC3E,kBAACvT,GAAA,EAAD,CAAWxM,OAAO,UAClB,kBAAC,GAAD,CACEqF,KAAK,uBACLrF,OAAO,uBACPV,YAAU,EACVE,UAAU,gBACVugB,UAAQ,IAEThzC,GAAQi/B,IAAI,UAAW,aACtB,kBAACU,GAAA,EAAD,CACE1M,OAAO,SACP2M,UAAU,SACV/4B,QAAS,GACTjP,OAAQ,CAAEoN,IAAKod,GACfqQ,UAAU,iBAEV,kBAAC,GAAD,CAAmBmG,WAAW,mBAAmBmD,eAAgB,kBAAC,GAAD,SAGpE/7B,GAAQi/B,IAAI,UAAW,SACtB,kBAACU,GAAA,EAAD,CACE1M,OAAO,iBACP2M,UAAU,OACVhoC,OAAQ,CAAEuK,KAAM,cAChB2E,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B6rB,MAAM,oCACNH,UAAU,iBAEV,kBAAC,GAAD,CAAmBmG,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,SAGzD,kBAACC,GAAA,EAAD,CAAe/rB,OAAO,oBACtB,kBAAC+rB,GAAA,EAAD,CAAe/rB,OAAO,oBACtB,kBAAC+rB,GAAA,EAAD,CAAe/rB,OAAO,eACtB,kBAAC+rB,GAAA,EAAD,CAAe/rB,OAAO,eACrBjzB,GAAQi/B,IAAI,UAAW,SACtB,kBAACU,GAAA,EAAD,CACE1M,OAAO,gBACP2M,UAAU,OACVhoC,OAAQ,CAAEqnD,QAAS,CAAC,UAAW,aAC/Bn4C,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B6rB,MAAM,mCACNH,UAAU,iBAEV,kBAAC,GAAD,CAAmBmG,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,SAGzD,kBAACpf,GAAA,EAAD,CACE1M,OAAO,cACPnsB,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B64B,UAAU,eACVhoC,OAAQ,CAAEwqB,QAASA,EAAQ3pB,KAAI,SAAC+H,GAAD,MAAQ,CAAE6D,GAAI7D,OAC7CoyB,MAAM,oCACNH,UAAU,gBACV5rB,QAAS,GACTmsC,UAAQ,GAER,kBAAC,GAAD,CAAmBpa,WAAW,UAEhC,kBAACiH,GAAA,EAAD,CACE5M,OAAO,kBACP2M,UAAU,eACVhN,MAAM,wCACN9rB,KAAM,CAAEf,MAAO,OAAQgB,MAAO,QAE9B,kBAAC+3B,GAAA,EAAD,CAAwBlG,WAAW,UAErC,kBAACsmB,GAAA,EAAD,CAAsBjsB,OAAQ,oBAAqB6G,MAAO,CAAEzM,SAAU,SAAW8xB,UAAU,mBAC1Fn/C,GAAQi/B,IAAI,UAAW,WACtB,kBAACU,GAAA,EAAD,CACE1M,OAAO,mBACP2M,UAAU,qBACV/4B,QAAS,GACTjP,OAAQ,CAAEwqB,QAASA,EAAQ3pB,KAAI,SAAC+H,GAAD,MAAQ,CAAE6D,GAAI7D,OAC7CiyB,UAAU,iBAEV,kBAAC,GAAD,CAAmBmG,WAAW,OAAOmD,eAAgB,kBAAC,GAAD,SAGzD,kBAAC0D,GAAA,EAAD,CAAWxM,OAAO,uBAAuBL,MAAM,sCAC9C5yB,GAAQi/B,IAAI,UAAW,SACtB,kBAACU,GAAA,EAAD,CACE1M,OAAO,oBACP2M,UAAU,OACVhoC,OAAQ,CAAEuK,KAAM,WAChB2E,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B6rB,MAAM,uCACNH,UAAU,iBAEV,kBAAC,GAAD,CAAmBmG,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,SAGxD/+C,GAAQi/B,IAAI,UAAW,SACtB,kBAACU,GAAA,EAAD,CACE1M,OAAO,eACP2M,UAAU,OACV94B,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B6rB,MAAM,kCACNH,UAAU,iBAEV,kBAAC,GAAD,CAAmBmG,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,SAGzD,kBAACtf,GAAA,EAAD,CAAWxM,OAAO,iBAAiBL,MAAM,gCACxC5yB,GAAQi/B,IAAI,UAAW,SACtB,kBAACU,GAAA,EAAD,CACE1M,OAAO,eACP2M,UAAU,OACV94B,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B6rB,MAAM,kCACNH,UAAU,iBAEV,kBAAC,GAAD,CAAmBmG,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,SAIzD,kBAACC,GAAA,EAAD,CAAe/rB,OAAO,kBACtB,kBAAC+rB,GAAA,EAAD,CAAe/rB,OAAO,kBACtB,kBAAC+rB,GAAA,EAAD,CAAe/rB,OAAO,mBACtB,kBAAC+rB,GAAA,EAAD,CAAe/rB,OAAO,mBACtB,kBAAC,GAAD,CACEA,OAAO,aACPqF,KAAK,aACLvhC,QAAQ,+BACR07B,UAAU,kBAEZ,kBAAC,GAAD,CACE6F,KAAK,aACLpJ,UAAWE,EAAQsvB,UACnBzrB,OAAO,YACPl8B,QAAQ,iCAEV,kBAAC,GAAD,CACEuhC,KAAK,uBACLpJ,UAAWE,EAAQsvB,UACnBzrB,OAAO,0BACPl8B,QAAQ,+CAEV,kBAAC,GAAD,CAAWk8B,OAAO,WAAWqF,KAAK,WAAWvhC,QAAQ,6BAA6B07B,UAAU,kBAC5F,kBAAC,GAAD,CACE6F,KAAK,WACLpJ,UAAWE,EAAQsvB,UACnBzrB,OAAO,UACPl8B,QAAQ,iCAMHqoD,GAAoB,SAACnwB,GAChC,IAAMG,EAAUxB,KAEhB,OACE,kBAACkX,GAAA,EAAD,CAAUua,SAAS,OAAOjwB,QAAS,CAAEkvB,IAAKlvB,EAAQkvB,MAChD,kBAAC,GAAD,CAA0BrrB,OAAO,SAAS/4B,SAAS,SACnD,kBAAC,KAAD,CAAW+4B,OAAO,UAElB,kBAAC,GAAD,CAAWA,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,cAAc/D,UAAWE,EAAQmvB,cAClDv+C,GAAQi/B,IAAI,SAAU,OAAQ,gBAC7B,kBAAC,GAAD,CAAahM,OAAO,cAAc2M,UAAU,QAC1C,kBAAC,KAAD,CAAW3M,OAAO,UAGrBjzB,GAAQi/B,IAAI,SAAU,OAAQ,mBAC7B,kBAAC,GAAD,CAAahM,OAAO,iBAAiB2M,UAAU,QAC7C,kBAAC,KAAD,CAAW3M,OAAO,UAGrBjzB,GAAQi/B,IAAI,SAAU,OAAQ,eAC7B,kBAAC,GAAD,CAAahM,OAAO,aAAa2M,UAAU,QACzC,kBAAC,KAAD,CAAW3M,OAAO,UAIrBjzB,GAAQi/B,IAAI,SAAU,OAAQ,WAAa,kBAAC,GAAD,CAAahM,OAAO,SAAS/D,UAAWE,EAAQmvB,cAC3Fv+C,GAAQi/B,IAAI,SAAU,OAAQ,cAC7B,kBAACgc,GAAA,EAAD,CACEhoB,OAAO,YACP1E,UAAU,QACVx3B,QAASlB,EACT+8B,MAAM,oCAIT5yB,GAAQi/B,IAAI,SAAU,OAAQ,WAC7B,kBAACgc,GAAA,EAAD,CAAWhoB,OAAO,SAAS1E,UAAU,QAAQx3B,QAASlB,IAEvDmK,GAAQi/B,IAAI,SAAU,OAAQ,eAC7B,kBAACgc,GAAA,EAAD,CAAWhoB,OAAO,aAAa1E,UAAU,QAAQx3B,QAASlB,IAE3DmK,GAAQi/B,IAAI,SAAU,OAAQ,gBAC7B,kBAACgc,GAAA,EAAD,CAAWhoB,OAAO,cAAc1E,UAAU,QAAQx3B,QAASlB,IAE7D,kBAAC,GAAD,KACE,kBAAC,GAAD,MACA,kBAAC,GAAD,SAMFypD,GAAW,SAAC,GAA+B,IAA7BC,EAA4B,EAA5BA,YAAgBtwB,EAAY,gCACxCG,EAAUxB,KACV4B,EAAYC,eACZ8e,EjD/MN,SAAChxB,EAAOwuB,EAAR,OAAiBvc,EAAjB,EAAiBA,UAAjB,4EACA,WAAOv1B,EAASu0C,EAAqBjsC,EAAcrI,GAAnD,mCAAA0C,EAAA,6DACQC,EAAUoxC,GAAalC,GACvBI,EAASgC,GAAkBpC,EAAOvc,GAClCgwB,EAAavlD,EAAQxB,KAAI,SAAC42B,GAAD,OAAYA,EAAO7Z,oBAC5CiqC,EAAaxlD,EAAQxB,KAAI,SAAC42B,GAAD,OAAYA,EAAO1Z,UAC5C+pC,EAAiBzlD,EAAQxB,KAAI,SAAC42B,GAAD,OAAYA,EAAOngB,eAAatX,QAAO,SAACuO,GAAD,OAAOA,KALnF,SA0B+E5N,QAAQC,IAAI,CACvF+J,EAAaI,QAAQ,qBAAsB,CACzC/K,OAAQ,CACNoN,IAAKw6C,GAEP74C,WAAY,CAAEC,KAAM,EAAGC,QAAS24C,EAAWlnD,QAC3CwO,KAAM,CAAEf,MAAO,YAAagB,MAAO,SAErCxE,EAAaI,QAAQ,SAAU,CAC7B/K,OAAQ,CACNoN,IAAKy6C,GAEP94C,WAAY,CAAEC,KAAM,EAAGC,QAAS,KAChCC,KAAM,CAAEf,MAAO,OAAQgB,MAAO,SAEhCxE,EAAaI,QAAQ,eAAgB,CACnC/K,OAAQ,CACNoN,IAAK06C,GAEP/4C,WAAY,CAAEC,KAAM,EAAGC,QAAS64C,EAAepnD,QAC/CwO,KAAM,CAAEf,MAAO,OAAQgB,MAAO,WA9CpC,mCA0BiB44C,EA1BjB,KA0BWvhD,KAAyBgkB,EA1BpC,KA0B8BhkB,KAAyBwhD,EA1BvD,KA0BiDxhD,KAwBzCA,EAAOnE,EAAQxB,KAAI,SAAC42B,GAoBxB,OAnBAA,EAAO7Z,iBAAmBmqC,EAAQr9C,MAAK,SAACu9C,GAAD,OAAOxwB,EAAO7Z,mBAAqBqqC,EAAEx7C,OAAO,CACjFjO,KAAMi5B,EAAO3Z,sBAEf2Z,EAAO1Z,OAASyM,EAAQ9f,MAAK,SAAC9B,GAAD,OAAO6uB,EAAO1Z,SAAWnV,EAAE6D,MACxDgrB,EAAOngB,YAAc0wC,EAAat9C,MAAK,SAAC+E,GAAD,OAAOgoB,EAAOngB,cAAgB7H,EAAEhD,MACnEgrB,EAAOra,WACLqa,EAAOra,SAAS1c,OAClB+2B,EAAOra,SAAWqa,EAAOra,SAASlO,MAAK,SAACm/B,EAAOE,GAC7C,IAAM2U,EAAQhpC,KAAOm0B,EAAMjoB,WAAW+8B,OAChCC,EAAQlpC,KAAOq0B,EAAOnoB,WAAW+8B,OACvC,OAAID,EAAQE,EAAc,EACtBA,EAAQF,GAAe,EACpB,KACNzrB,EAAOra,SAAS1c,OAAS,GAE5B+2B,EAAOra,SAAW,IAGtBzb,QAAQC,IAAI61B,GACLgf,GAAYtC,EAAO1c,EAAQG,MAKpC0c,GAAW,CAAE3uB,QAAOnf,OAAMvB,UAASsvC,WAAnC,OAAmD,SAACtJ,GAAD,OAAOtpC,QAAQC,IAAIqpC,MA3ExE,4CADA,4DiD+MiBid,CAAatwB,EAAU,aAAD,OAAcP,EAAM/0B,SAApB,SAAqC,CAAEswC,YAAa,IAAM+U,EAAa,CAC5G/vB,cAEIjuB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpS,EAAW7gB,GAAQA,EAAK6gB,SAAY,GACpC29B,EAAmBxuB,IAAM0K,OAAO,MAChC+jB,EAAkB,CACtB,kBAAC,GAAD,CAAa/sB,OAAO,SAClB,kBAAC,KAAD,OAEF,kBAAC,GAAD,CAAgBA,OAAO,SAAS3kB,KAAK,QAAQqqC,OAAO,WACpD,kBAAC,GAAD,CAAwB1lB,OAAO,SAAS0lB,OAAO,uBAC/C,kBAAC,GAAD,CAA0B1lB,OAAO,SAAS0lB,OAAO,uBAAuBnmB,cAAepD,EAAQovB,kBAC/F,kBAAC,GAAD,CAAavrB,OAAO,SAClB,kBAAC,KAAD,OAEF,kBAAC,GAAD,CAAWA,OAAO,OAAO+f,UAAQ,IACjC,kBAAC,KAAD,CAAW/f,OAAO,cAAc/D,UAAWE,EAAQmvB,cACnD,kBAACvK,GAAA,EAAD,CAAgB/gB,OAAO,SAAS2M,UAAU,SAASziC,MAAM,GACvD,kBAAC,KAAD,CAAW81B,OAAO,sBAEpB,kBAAC+gB,GAAA,EAAD,CACE/gB,OAAO,cACPnsB,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B64B,UAAU,eACVziC,KAAK,OACL21B,UAAU,GAEV,kBAAC,KAAD,CAAWG,OAAO,UAGpB,kBAAC+gB,GAAA,EAAD,CAAgB/gB,OAAO,mBAAmB2M,UAAU,qBAAqBziC,KAAK,OAAO21B,UAAU,GAC7F,kBAAC,GAAD,CAA+BG,OAAO,UAExCjzB,GAAQi/B,IAAI,SAAU,OAAQ,gBAC5B,kBAAC,GAAD,CAAahM,OAAO,cAAc2M,UAAU,OAAO9M,UAAU,GAC3D,kBAAC,KAAD,CAAWG,OAAO,UAGtBjzB,GAAQi/B,IAAI,SAAU,OAAQ,mBAC5B,kBAAC,GAAD,CAAahM,OAAO,iBAAiB2M,UAAU,OAAO9M,UAAU,GAC9D,kBAAC,KAAD,CAAWG,OAAO,UAGtBjzB,GAAQi/B,IAAI,SAAU,OAAQ,eAC5B,kBAAC,GAAD,CAAahM,OAAO,aAAa2M,UAAU,OAAO9M,UAAU,GAC1D,kBAAC,KAAD,CAAWG,OAAO,UAGtBjzB,GAAQi/B,IAAI,SAAU,OAAQ,aAC5B,kBAAC,GAAD,CAAahM,OAAO,WAAW2M,UAAU,OAAO9M,UAAU,GACxD,kBAAC,KAAD,CAAWG,OAAO,UAGtBjzB,GAAQi/B,IAAI,SAAU,OAAQ,YAC5B,kBAAC,GAAD,CAAsBhM,OAAO,WAAW/D,UAAWE,EAAQmvB,YAAazrB,UAAU,IAEpF9yB,GAAQi/B,IAAI,SAAU,OAAQ,WAAa,kBAAC,GAAD,CAAahM,OAAO,SAAS/D,UAAWE,EAAQmvB,cAC3Fv+C,GAAQi/B,IAAI,SAAU,OAAQ,cAC5B,kBAACgc,GAAA,EAAD,CAAWhoB,OAAO,YAAY1E,UAAU,QAAQx3B,QAASlB,IAE3DmK,GAAQi/B,IAAI,SAAU,OAAQ,cAC5B,kBAACgc,GAAA,EAAD,CAAWhoB,OAAO,YAAY1E,UAAU,QAAQx3B,QAASlB,IAE3DmK,GAAQi/B,IAAI,SAAU,OAAQ,WAC5B,kBAACgc,GAAA,EAAD,CAAWhoB,OAAO,SAAS1E,UAAU,QAAQx3B,QAASlB,IAExDmK,GAAQi/B,IAAI,SAAU,OAAQ,eAC5B,kBAACgc,GAAA,EAAD,CAAWhoB,OAAO,aAAa1E,UAAU,QAAQx3B,QAASlB,IAE5DmK,GAAQi/B,IAAI,SAAU,OAAQ,gBAC5B,kBAACgc,GAAA,EAAD,CAAWhoB,OAAO,cAAc1E,UAAU,QAAQx3B,QAASlB,IAE7DmK,GAAQi/B,IAAI,SAAU,OAAQ,sBAAwB,kBAACghB,GAAA,EAAD,CAAchtB,OAAO,oBAAoB1E,UAAU,WA5E7D,EC3SjC,SAACr0B,GAAiC,IAAvBggD,EAAsB,uDAAP,GACvC,OAAOD,GAAW,GAAD,OAAI//C,EAAJ,iBAA6BggD,GDyXMgG,CAClDjxB,EAAM/0B,SACN8lD,EAAgBvnD,KAAI,SAACkgD,GAAD,OAAYA,EAAO1pB,MAAM0pB,QAAUA,EAAO1pB,MAAMgE,WAjFxB,mBA+EvColB,EA/EuC,KA+EnBC,EA/EmB,KAoFxCnZ,EAAkBghB,aAAkB,2BAAKlxB,GAAN,IAAamxB,oBAAqB,CAAEC,UAAWj+B,MAClFk+B,EE/XO,SAAUC,EAAiBxT,GAAU,IAAD,EACXjV,mBAAS,IADE,mBAC1CwoB,EAD0C,KAC7BE,EAD6B,KA0BjD,OAvBAlD,cAAqB,WACnB,IAAMjkD,EAAS0zC,EACZn1C,QAAO,SAAC6oD,GACP,IAAM9H,EAAS8H,EAAIxxB,MAAM0pB,QAAU8H,EAAIxxB,MAAMgE,OAE7C,OAAOstB,EAAgB99C,SAASk2C,MAEjClgD,KAAI,SAACgoD,EAAKpvC,GAAW,IAAD,EACmCovC,EAAIxxB,MAA7ByxB,GADV,EACX/H,OADW,EACH3F,SADG,uCAEnB,OAAO,2BACFyN,GADL,IAEExxB,MAAOyxB,EACPnmD,IAAK8W,OAMX,OAFAmvC,EAAennD,GAER,WACLmnD,EAAe,OAEhB,CAACD,IAEGD,EFqWaK,CAAetI,EAAoB2H,GAEvD,OACE,kBAACrb,GAAA,EAAD,CAAqB7tC,MAAK,2BAAOqoC,GAAP,IAAwBoP,cAChD,kBAAC,KAAD,iBACMtf,EACAkQ,EAFN,CAGEhP,QACE,kBAACywB,GAAD,CAAiB7T,QAAS,CAAEsL,qBAAoBC,wBAAuBC,YAAayH,KAEtFa,kBAAmB,kBAAC,GAAD,MACnBtS,SAAUA,EACVh4B,QAAS,kBAAC,GAAD,CAAYslC,QAASkE,MAE9B,kBAACjb,GAAA,EAAD,CAAUua,SAAS,OAAOjwB,QAAS,CAAEkvB,IAAKlvB,EAAQkvB,MAC/CgC,EACD,kBAAC,GAAD,KACE,kBAAC,GAAD,MACA,kBAAC,GAAD,WAwDZhB,GAAS5tB,aAAe,CACtB7qB,QAAS,IACTC,KAAM,CAAEf,MAAO,YAAagB,MAAO,QACnCw4C,YAAa,CACXl7C,IAAI,EACJyZ,QAAQ,EACRE,UAAW8tB,GACXzzC,KAAM2zC,GACNr0B,aAAa,EACb4G,qBAAsBytB,GACtBx2B,iBAAkB,CAChBpf,MAAM,EACN61C,WAAY,sBAEdlqC,OAAQiqC,GACR/2B,eAAgB,CACd7e,MAAM,EACN61C,WAAY,QAEd92B,WAAY,CACV/e,MAAM,EACN61C,WAAY,QAEd/2B,YAAa,CACX9e,MAAM,EACN61C,WAAY,QAEd52B,cAAe,CACbjf,MAAM,EACN61C,WAAY,QAEd72B,SAAU,CACRhf,MAAM,EACN61C,WAAY,QAEdj3B,SAAU,CACRzF,MAAM,EACNyO,UAAW8tB,GACX3tB,UAAW2tB,GACXG,WAAY,WAEd9tB,UAAW2tB,GACXpsB,YAAaosB,GACbzyC,OAAQ2yC,GACR1tB,OAAO,EACPpP,YAAa,CACX9Y,MAAM,EACN61C,WAAY,gBAEdt2B,OAAQ,CACNE,kBAAkB,EAClBo2B,WAAY,UAEdA,WAAY,SAIDqT,U,kEGzfXwB,GAAa,GACbC,GAAgB,SAACC,GACnBF,GAAU,YAAOE,IAEfC,GAAuB,GACvBC,GAA0B,SAACF,GAC7BC,GAAoB,YAAOD,IAGvBG,GAA2B,CAAC/6B,gBAE5BmV,GAAkB,kBAAM,GAExB3N,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCiC,UAAW,CACTC,QAAS,OACTE,eAAgB,iBAElB0qB,OAAQ,CACN5qB,QAAS,OACTC,cAAe,UAEjBozB,KAAM,CACJn0C,MAAO,KAET0I,OAAQ,CACNolB,SAAU,EACVnM,WAAY,IAEdyyB,IAAK,CACHtmB,SAAU,EACVzN,YAAa,QAqMXg0B,GAA6B,SAAC,GAAgC,IAA9Bt6C,EAA6B,EAA7BA,IAAK0xB,EAAwB,EAAxBA,QAAYzJ,EAAY,kCAEjE,OADAjoB,EAAI0xB,GACG,kBAAC6oB,GAAD,iBAA4BtyB,EAA5B,CAAmCyJ,QAASA,MAGtC8oB,GAtMe,SAAC,GAAsD,EAApDpyB,QAAqD,IAA3BF,EAA0B,EAA1BA,UAAcD,EAAY,wCAC7EukB,EAAOiO,eACPjsB,EAAYC,eACZrG,EAAUxB,KACVrsB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CktB,EAAiBptB,cAAY,SAACC,GAAD,OAAWA,EAAMsV,MAAMzsB,UAAU9C,aAAalc,OAAMo2B,MALJ,EAM3CsD,mBAAStC,EAAUvwB,OAAOiK,aANiB,mBAM5EwW,EAN4E,KAM9Di8B,EAN8D,KA2BnF,GApBApoD,QAAQC,IAAIg8B,EAAUvwB,QACtB+yB,qBAAU,WACH0pB,EAAeh8B,KACf8P,EAAUvwB,OAAO28C,YACpBpO,EAAKqO,OAAO,cAAen8B,IAExB8P,EAAUvwB,OAAOiQ,aAAewsC,EAAeh8B,GAAcM,sBAChEwtB,EAAKqO,OAAO,iBAAkBH,EAAeh8B,GAAcM,qBAC3DwtB,EAAKqO,OAAO,cAAe,CAAEx9C,GAAIq9C,EAAeh8B,GAAcM,wBAE3DwP,EAAUvwB,OAAOgQ,gBAAkBysC,EAAeh8B,GAAcO,mBACnEutB,EAAKqO,OAAO,oBAAqBH,EAAeh8B,GAAcO,kBAC9DutB,EAAKqO,OAAO,iBAAkB,CAAEx9C,GAAIq9C,EAAeh8B,GAAcO,qBAE9DuP,EAAUvwB,OAAOmQ,UAAYssC,EAAeh8B,GAAcQ,uBAC7DstB,EAAKqO,OAAO,cAAeH,EAAeh8B,GAAcQ,sBACxDstB,EAAKqO,OAAO,WAAY,CAAEx9C,GAAIq9C,EAAeh8B,GAAcQ,2BAE5D,CAACR,KAECnkB,EAAM,OAAO,KAElB,IAAI6gB,EAAU7gB,EAAK6gB,SAAW,GAC1BsD,GAAgBg8B,EAAeh8B,KACjCtD,EAAU7gB,EAAK6gB,QAAQxqB,QAAO,SAACkqD,GAAD,OAASJ,EAAeh8B,GAActD,QAAQhK,MAAK,SAAC5X,GAAD,OAAOA,EAAE6D,KAAOy9C,SAEnG,IAAMrL,EAAoB,CAAEr0B,QAAS7gB,EAAK6gB,QAAQ3pB,KAAI,SAAC+H,GAAD,MAAQ,CAAE6D,GAAI7D,OAClD,gBAAde,EAAKY,OACPs0C,EAAkBzxC,IAAM,CAACzD,EAAK2N,cAEhC,IAAMyG,EAAS6f,EAAUvwB,OAAO0Q,aAAU/e,EACpCyB,EAAOm9B,EAAUvwB,OAAOsZ,qBACxBgE,EAAwBhhB,EAAOA,EAAKghB,sBAAwB,GAgFlE,OACE,yBAAK2M,UAAWE,EAAQupB,QACtB,kBAAC,GAAD,iBACM1pB,EADN,CAEEqJ,KAAK,uBACLpJ,UAAWE,EAAO,KAClBx3B,OApFmC,SAACS,GACxC,OAAOkqB,EAAsBnK,MAAK,SAAC2pC,GAAD,OAAOA,IAAM1pD,EAAKjC,SAoFhD2gC,SAjBmC,SAACjgC,GACnC0+B,EAAUvwB,OAAOiK,cACpBskC,EAAKqO,OAAO,cAAe,MAC3BrO,EAAKqO,OAAO,iBAAkB,MAC9BrO,EAAKqO,OAAO,aAAc,OAE5BrO,EAAKqO,OAAO,aAAc,MAC1BrO,EAAKqO,OAAO,mBAAoB,OAW5BjvB,MAAM,6CACNK,OAAO,uBACPl8B,QAAQ,gDAEV,kBAAC4oC,GAAA,EAAD,iBACM1Q,EADN,CAEEgE,OAAO,cACPnsB,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B64B,UAAU,eACV/4B,QAAS,GACTjP,OAAQ6+C,EACR1f,SA7F0B,SAACjgC,GAC/B,IAAMkrD,EAAiBf,GAAqB3+C,MAAK,SAAC6B,GAAD,OAAUA,EAAKE,KAAOmxB,EAAUvwB,OAAOuQ,oBACxFg+B,EAAKqO,OAAO,aAAc,MAErBG,GAAmBA,EAAet8B,cAAgBs8B,EAAet8B,aAAarhB,KAAOvN,IACxF08C,EAAKqO,OAAO,mBAAoB,MAChCrO,EAAKqO,OAAO,SAAU,QAEnBrsB,EAAUvwB,OAAOiQ,aAAewsC,EAAe5qD,GAAOkvB,qBACzDwtB,EAAKqO,OAAO,iBAAkBH,EAAe5qD,GAAOkvB,sBAEjDwP,EAAUvwB,OAAOgQ,gBAAkBysC,EAAe5qD,GAAOmvB,kBAC5DutB,EAAKqO,OAAO,oBAAqBH,EAAe5qD,GAAOmvB,mBAEpDuP,EAAUvwB,OAAOmQ,UAAYssC,EAAe5qD,GAAOovB,sBACtDstB,EAAKqO,OAAO,cAAeH,EAAe5qD,GAAOovB,sBAG9CsP,EAAUvwB,OAAOkQ,YAAYq+B,EAAKqO,OAAO,aAAc,MAE5DF,EAAgB7qD,IA0EZo4B,UAAWA,EACXE,QAAS,CAAEtB,UAAWsB,EAAQiyB,KAC9BpqB,SAAU7Q,iBAEV,kBAAC,GAAD,CAAmBwS,WAAW,OAAO2C,gBAAiBA,MAExD,yBAAKrM,UAAWE,EAAQtB,WACtB,kBAAC6R,GAAA,EAAD,iBACM1Q,EADN,CAEE10B,IAAKob,EACLmkB,MAAO,CAAExM,YAAa,IACtB2F,OAAO,mBACP2M,UAAU,qBACV/4B,QAAS,GACTjP,OAAQ,CACNwqB,QAASA,EAAQ3pB,KAAI,SAAC+H,GAAD,MAAQ,CAAE6D,GAAI7D,MACnCmV,OAAQA,EAAS,CAAEtR,GAAIsR,QAAW/e,EAClCyB,OACAqtB,aAAcA,EAAe,CAAErhB,GAAIqhB,QAAiB9uB,GAEtDqgC,SAAUkqB,GACVpqB,SA/E6B,SAACjgC,GACpC,IAAMmrD,EAAahB,GAAqB3+C,MAAK,SAAC6B,GAAD,OAAUA,EAAKE,KAAOvN,KACnE08C,EAAKqO,OAAO,aAAcI,EAAWjzC,YAAc,MACnDwkC,EAAKqO,OAAO,uBAAwBI,EAAW5pD,OAC3C4pD,EAAWv8B,cAAkBA,GAAgBu8B,EAAWv8B,aAAarhB,KAAOqhB,GAC9Ei8B,EAAgBM,EAAWv8B,aAAarhB,IAEtC49C,EAAWtsC,QAAUA,IAAWssC,EAAWtsC,OAAOtR,KACpDmvC,EAAKqO,OAAO,SAAUI,EAAWtsC,OAAOtR,IAIxCmvC,EAAKqO,OAAO,aAAc,OAIA,yBAA1BrsB,EAAUvwB,OAAO5M,MACfm9B,EAAUvwB,OAAOib,mBAAsBsV,EAAUvwB,OAAOib,kBAAkB5nB,QAE5Ek7C,EAAKqO,OACH,qBACCH,EAAeO,EAAWv8B,aAAarhB,IAAI8hB,OAAS,IAClDvuB,QAAO,SAACsqD,GAAD,OAAUA,EAAK77B,yBAAyB5jB,SAASw/C,EAAW5pD,SACnEI,KAAI,kBAA4C,CAAErC,KAA9C,EAAGA,KAAiDuhB,YAApD,EAASA,YAAwDyI,KAAjE,EAAsBA,KAAiDgG,SAAvE,EAA4BA,eAyDjCoH,WAAS,IAET,kBAAC,GAAD,CACEoL,WAAW,OACXmD,eAAgB,kBAAC,GAAD,MAChBR,gBAAiBA,GACjBv0B,IAAKk6C,GACLnqD,QAAS,CAAE6/B,WAAW,uPAG1B,kBAAC+I,GAAA,EAAD,iBACM1Q,EADN,CAEEgE,OAAO,SACP2M,UAAU,SACV/4B,QAAS,GACTjP,OAAQ,CAAEoN,IAAKod,GACf2U,SA7GmB,SAACjgC,GAC1B08C,EAAKqO,OAAO,mBAAoB,MAChCrO,EAAKqO,OAAO,aAAc,MAC1B,IAAMI,EAAanB,GAAWx+C,MAAK,SAACqT,GAAD,OAAYA,EAAOtR,KAAOvN,KACzD6e,IAAWssC,EAAW59C,KACnBqhB,IACH8tB,EAAKqO,OAAO,cAAe,MAC3BrO,EAAKqO,OAAO,iBAAkB,OAEhCrO,EAAKqO,OAAO,aAAc,QAqGtB3yB,UAAWA,EACXE,QAAS,CAAEtB,UAAWsB,EAAQzZ,UAE9B,kBAAC,GAAD,CACEijB,WAAW,mBACXmD,eAAgB,kBAAC,GAAD,MAChBR,gBAAiBA,GACjBv0B,IAAK+5C,S,oBC/NXnzB,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCuU,SAAU,CACR/T,WAAY,sBACZmU,WAAY3U,EAAMs2B,YAAYp/C,OAAO,CAAC,qBACtCw9B,OAAQ,UACRtT,QAASpB,EAAMtb,QAAQ,GACvBge,UAAW,SACXzf,MAAO+c,EAAME,QAAQ6I,gBAAgB/I,EAAME,QAAQM,WAAd,SACrCsB,aAAc9B,EAAM0d,MAAM5b,aAC1BwF,aAActH,EAAMtb,QAAQ,IAC5B,mBAAoB,CAClBuc,gBAAiBjB,EAAME,QAAQ5rB,OAAOq4B,WAG1Cp/B,QAAS,GACTg3C,aAAc,GACdvjB,KAAM,CAAE5f,MAAO,YAuLFm1C,GApLG,SAAC,GAqBZ,IApBLzhB,EAoBI,EApBJA,OACA1yB,EAmBI,EAnBJA,SACAihB,EAkBI,EAlBJA,UACSqE,EAiBL,EAjBJnE,QACApd,EAgBI,EAhBJA,OACA4kB,EAeI,EAfJA,WACAhE,EAcI,EAdJA,MAcI,IAbJyvB,qBAaI,MAbY,+BAaZ,MAZJC,mBAYI,MAZU,8BAYV,EAXJC,EAWI,EAXJA,QACAC,EAUI,EAVJA,QAUI,IATJ1hB,gBASI,aARJ/pC,QAAuB0rD,GAQnB,aARqD,GAQrD,GAROvrB,WAAkCngC,EAQzC,+BAPJigC,EAOI,EAPJA,MACA0rB,EAMI,EANJA,YACAxoD,EAKI,EALJA,SACA+4B,EAII,EAJJA,OACAgE,EAGI,EAHJA,SACA0rB,EAEI,EAFJA,YACGpzB,EACC,oOACEC,EAAYC,eACZL,EAAUxB,GAAU,CAAEwB,QAASmE,IAG/BqvB,EAAgB,SAAC/qD,GACrB,KAAMA,aAAgBsB,MACpB,OAAOtB,EAFqB,MAKJ25B,WAASmC,KAAK1lB,GAAUghB,MAA1CgE,EALsB,EAKtBA,OAAQ1V,EALc,EAKdA,MAEVnkB,EAAUH,IAAIC,gBAAgBrB,GAC9BgrD,EAAe,cACnB/qD,QAASD,GACRo7B,EAAS75B,GAOZ,OAJImkB,IACFslC,EAAgBtlC,GAAS1lB,EAAKzB,MAGzBysD,GAGHC,EAAiB,SAACrrD,GACtB,OAAKA,EAIDiD,MAAMwL,QAAQzO,GACTA,EAAMgB,IAAImqD,GAGZA,EAAcnrD,GAPZqpC,EAAW,GAAK,MA3BvB,EA0CA3J,aAAS,aACXnlB,OAAQA,GAAU8wC,EAClB9rB,MAAOA,GAAS8rB,EAChB7vB,SACA56B,KAAM,OACN4+B,YACG1H,IAVHlrB,EAtCE,EAsCFA,GAtCE,IAuCFD,MAAS2yB,EAvCP,EAuCOA,SAAUjgC,EAvCjB,EAuCiBA,MAAUogC,EAvC3B,qCAwCFG,EAxCE,EAwCFA,KACAD,EAzCE,EAyCFA,WASME,EAAmBD,EAAnBC,QAASh+B,EAAU+9B,EAAV/9B,MACX7B,EAAQX,EAAS4D,MAAMwL,QAAQpP,GAASA,EAAQ,CAACA,GAAU,GAkB3DisD,EAAW,SAAClrD,GAAD,OAAU,WACzB,GAAIipC,EAAU,CACZ,IAAMkiB,EAAgBvrD,EAAMG,QAAO,SAACqrD,GAAD,OAAgBzuB,aAAayuB,EAAWprD,MAC3Ek/B,EAASisB,QAETjsB,EAAS,QAIPmsB,EAAkBzxB,yBAAeD,WAASmC,KAAK1lB,IAAaujB,WAASmC,KAAK1lB,QAAYrX,EA9ExF,EAgFoCiqC,aAAY,2BAC/C9pC,GAD8C,IAEjD4pC,SACA4hB,UACAC,UACA1hB,WACAC,OAjCa,SAAChpC,GACdA,EAASU,KAAI,SAACZ,GAAD,OACXuC,OAAO+oD,OAAOtrD,EAAM,CAClBuB,QAASH,IAAIC,gBAAgBrB,QAIjC,IAAMurD,EAAetiB,EAAQ,sBAAOrpC,GAAP,YAAiBM,IAAjB,YAAiCA,GAG5Dg/B,EADE+J,EACOsiB,EAEAA,EAAa,QAelBliB,EAhFJ,EAgFIA,aAAcvD,EAhFlB,EAgFkBA,cAQtB,OACE,kBAAC0lB,GAAA,EAAD,eACEh/C,GAAIA,EACJuuB,MAAOA,EACP1D,UAAS,UAAKE,EAAQvC,KAAb,YAAqBqC,GAC9B+D,OAAQA,EACR/4B,SAAUA,EACVk9B,WAAYA,EACZC,KAAMA,GACFxI,GAAkBU,IAEtB,oCACE,uCACE+zB,cAAY,WACZp0B,UAAWE,EAAQgR,SACnBtG,MAAO,CAAE/L,QAAS40B,EAAc,OAAS,SACrCzhB,KAEJ,yCACE78B,GAAIA,EACJ0xB,SAAU4sB,GACNhlB,EAAc,2BACbzG,GACAurB,MAGNC,IAA4B5hB,EAAW,2BAAItR,EAAU6yB,IAAsB,2BAAI7yB,EAAU8yB,MAE3Fr0C,GACC,yBAAKihB,UAAU,YACZz3B,EACEG,QAAO,SAACC,GAAD,OAAWA,EAAK0rD,UACvB9qD,KAAI,SAACZ,EAAMwZ,GAAP,OACH+f,uBAAa8xB,EAAiB,CAC5B3oD,IAAK8W,EACL+vB,SAAU2hB,EAASlrD,GACnBw3B,OAAQx3B,EACRq3B,UAAWE,EAAQh2B,cAK3Bk+B,GAAWh+B,GAAUs9B,EACrB,kBAAC4sB,GAAA,EAAD,KACE,kBAAChsB,GAAA,EAAD,CAAiBF,QAASA,EAASh+B,MAAOA,EAAOs9B,WAAYA,KAE7D,QC5KGsJ,OARf,SAAcjR,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BAAM5nB,EAAE,+KCKC64B,OARf,SAAcjR,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BAAM5nB,EAAE,qtB,qBCKC64B,OARf,SAAcjR,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BAAM5nB,EAAE,qKCORumB,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,CACJ42B,SAAU53B,EAAMtb,QAAQ,IACxBmd,OAAQ,UACRrB,WAAY,uBAEduG,MAAO,CACL7E,QAAS,QACT8F,SAAU,SACVC,aAAc,WACdC,WAAY,cAIV0M,GAAU,SAAC9mC,GACf,OAAQA,GACN,IAAK,MACL,IAAK,OACL,IAAK,OACH,OAAO,kBAAC,GAAD,CAAUmgC,MAAO,CAAEhrB,MAAO,aAGnC,IAAK,MACH,OAAO,kBAAC,GAAD,CAASgrB,MAAO,CAAEhrB,MAAO,aAGlC,IAAK,OACL,IAAK,MACH,OAAO,kBAAC,GAAD,CAAUgrB,MAAO,CAAEhrB,MAAO,aAGnC,IAAK,MACL,IAAK,OACL,IAAK,OACL,IAAK,OACH,OAAO,kBAAC,GAAD,CAAWgrB,MAAO,CAAEhrB,MAAO,aAGpC,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,OACH,OAAO,kBAAC,GAAD,CAASgrB,MAAO,CAAEhrB,MAAO,aAGlC,IAAK,MACL,IAAK,MACL,IAAK,MACH,OAAO,kBAAC,KAAD,CAAWgrB,MAAO,CAAEhrB,MAAO,aAGpC,QACE,OAAO,kBAAC,GAAD,QAKP40C,GAAW,SAAC,GAAiG,IAA/Fx0B,EAA8F,EAA9FA,UAAoBqE,EAA0E,EAAnFnE,QAA0BC,EAAyD,EAAzDA,OAAQ4D,EAAiD,EAAjDA,OAAQ1V,EAAyC,EAAzCA,MAAOomC,EAAkC,EAAlCA,QAASviB,EAAyB,EAAzBA,SACjFhS,GAD0G,uFAChGxB,GAAU,CAAEwB,QAASmE,KACrC,IAAKlE,EAAQ,OAAO,KACpB,IAAMuD,EAAQn4B,KAAI40B,EAAQ9R,IAAUA,EAC9BxkB,EAAM0B,KAAI40B,EAAQ4D,IAAWA,EAC7Bt5B,EAAM01B,EAAO11B,KAAQ01B,EAAOv3B,SAAWu3B,EAAOv3B,QAAQ1B,KAAKkJ,MAAM,KAAK8U,MAQtEwvC,EAAYD,EAAU,CAAEE,WAAW,EAAM1gB,QAN9B,uCAAG,WAAOvG,GAAP,eAAAhgC,EAAA,6DAClBggC,EAAM6X,kBADY,SAEE33C,KAFF,OAEZgnD,EAFY,OAGlB9qD,OAAO0gC,KAAK3gC,EAAIgU,QAAQ,SAAW,EAAvB,UAA8BhU,EAA9B,YAAqC+qD,GAAU/qD,GAHzC,2CAAH,uDAMuD,GAExE,OACE,kBAACuvC,GAAA,EAAD,CAAS/qB,MAAOqV,EAAO+e,UAAU,MAAM0E,WAAY,KACjD,kBAACniB,GAAA,EAAD,eACE9E,QAAS,CAAEvC,KAAMuC,EAAQvC,KAAM+F,MAAOxD,EAAQwD,OAC9C1D,UAAWA,EACXZ,KAAMmS,GAAQ9mC,GACdi5B,MAAOA,EACPwO,SAAUA,GACNwiB,MAMZF,GAAShyB,aAAe,CACtBiyB,SAAS,EACTrxB,UAAU,GAGGoxB,UCjGT91B,GAAYC,cAAW,SAAChC,GAC5B,MAAO,MAGHk4B,GAAmB,SAAC90B,GACRrB,KAAhB,IACM4lB,EAAOiO,eACPlgD,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1ChF,EAAYC,eAElBuI,qBAAU,WACRwb,EAAKqO,OAAO,UAAW,MACvBrO,EAAKqO,OAAO,WAAY,QACvB,IA0BH,OACE,6BACE,kBAACpiB,GAAA,EAAD,iBACMxQ,EADN,CAEE8H,SAnBe,SAAC,GAAkC,IAAfjgC,EAAc,EAA/B2xC,cAAiB3xC,MACvC08C,EAAKqO,OAAO,WAAY,CACtB9+C,OAAQ,CACN,CACEwM,KAAMzY,EACNktD,OAAQ,CACNC,QAAS,CACP5/C,GAAI9C,EAAK8C,UAafuuB,MAAOpD,EAAU,iCACjByH,SAAU,CAAC7Q,qBAanB29B,GAAiBryB,aAAe,GAEjBqyB,U,WC7DTn2B,GAAYC,cAAW,SAAChC,GAC5B,MAAO,MAGHoL,GAAW,CAACitB,aAAS,EAAG,0BAA2BC,aAAS,OAAQ,6BAEpEC,GAAkB,SAACn1B,GACPrB,KAAhB,IACM4lB,EAAOiO,eACKhsB,eAClB,MAAoC,yBAAhC+d,EAAK6Q,WAAWp/C,OAAO5M,KAAwC,KAE5D,kBAACisD,GAAA,EAAD,iBAAiBr1B,EAAjB,CAAwBgI,SAAUA,OAU3CmtB,GAAgB1yB,aAAe,G,gOCxB/B,IAAMkG,GAAYn6B,IAAH,MAqCA86B,GAzBC,SAACV,GAAc,IAAD,EACCC,mBAAS,IADV,mBACrBzX,EADqB,KACd0X,EADc,KAsB5B,OAnBAC,qBAAU,WAAM,4CACd,4BAAAp7B,EAAA,+EAE2B0G,GAAO/D,MAAM,CAClCA,MAAOq4B,GACP/5B,UAAW,CAAEzH,KAAMyhC,GACnB/5B,QAAS,SAACxE,GACRyE,MAAMzE,MANd,OAEU2+B,EAFV,OAUIF,EAAYE,EAAS75B,KAAK85B,OAAOC,YAVrC,gDAYI5+B,QAAQC,IAAI,UAAZ,MAZJ,0DADc,uBAAC,WAAD,wBAgBd4+B,KACC,CAACP,IAEGxX,GCbHkkC,IATYn+B,eASJ,SAAC,GAA0B,IAAxBiJ,EAAuB,EAAvBA,OAAWJ,EAAY,2BAChCuG,EAAYC,eAClBpG,EAAOnP,kBAAoBmP,EAAOnP,kBAC9BmP,EAAOnP,kBAAkBznB,KAAI,SAACypD,GAAD,mBAAC,eAAeA,GAAhB,IAAsB79C,GAAI69C,EAAKsC,SAC5D,GACJn1B,EAAOo1B,qBAAuBp1B,EAAOo1B,qBAAuBp1B,EAAOnP,kBAAkBznB,KAAI,SAACypD,GAAD,OAAUA,EAAKsC,OAAO,GAE/G,IAAM5sD,EAASq5B,mBACb,iBAAO,CACLywB,eAAgB,CAAC,CAAEr9C,GAAImxB,EAAUvwB,OAAOiK,cACxCw1C,wBAAyBlvB,EAAUvwB,OAAOsZ,wBAE5C,CAACiX,EAAUvwB,OAAOiK,cAGpB,OACE,kBAAC2wB,GAAA,EAAD,iBACM5Q,EADN,CAEEI,OAAQA,EACR4D,OAAO,uBACPr7B,OAAQA,EACRg7B,MAAM,0CACNgN,UAAU,SAEV,kBAACd,GAAA,EAAD,CAAwBlG,WAAW,YAK5B+rB,GAAkB,SAAC11B,GAG9B,MAC4B,yBAHVwG,eAGNxwB,OAAO5M,MACf,kBAACmnC,GAAA,EAAD,iBAAavQ,EAAb,CAAoB2D,MAAM,qDACxB,kBAAC,GAAD,QCtBFhF,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvC6C,QAAS,CACPX,QAAS,OACT,yBAA0B,CACxBT,YAAazB,EAAMtb,QAAQ,KAG/Bq0C,OAAQ,CACNh2B,WAAY,QAEd4P,oBAAqB,CACnBnQ,UAAW,EACX8E,aAAc,OAIZ0xB,GAAc,SAAC,GAA8B,EAA5B5yB,YAA6B,IAAbhD,EAAY,gCAC3CG,EAAUxB,KAEhB,OACE,kBAACoR,GAAA,EAAD,iBAAa/P,EAAb,CAAoBG,QAAS,CAAEV,QAASU,EAAQV,WAE7C1uB,GAAQi/B,IAAI,SAAU,SAAW,kBAACrJ,GAAA,EAAD,MACjC51B,GAAQi/B,IAAI,SAAU,SACrB,kBAACrJ,GAAA,EAAD,CAAYpF,SAAU,OAAQoC,MAAM,8BAA8Bsd,eAAe,EAAOpgB,QAAQ,eAuMzFg1B,IAjMW1+B,eAYP,SAAC,GAAkB,IAAb6I,EAAY,oBAC7BG,EAAUxB,KACVuR,EAAkB4lB,aAAoB91B,GACtC1tB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpS,EAAW7gB,GAAQA,EAAK6gB,SAAY,GACpCI,EAAYjhB,EAAOA,EAAKihB,UAAY,GAUpCwiC,EAAmBzjD,EACrB,CAAElJ,KAAMkJ,EAAKihB,UAAU/f,SAAS,0BAA4B,yBAA2B,MACvF,KAGJ,OAFIlB,GAAsB,gBAAdA,EAAKY,OAAwB6iD,EAAiB3vC,cAAgB,CAAEhR,GAAI9C,EAAK8C,KAGnF,kBAAC4gD,GAAA,EAAD,CAAuBnuD,MAAK,eAAOqoC,IACjC,kBAAC+lB,GAAA,EAAD,iBAAgBj2B,EAAWkQ,GACzB,kBAACgmB,GAAA,EAAD,CAAYz2B,QAAS,kBAAC,GAAD,MAAiB8B,SAAS,OAAOorB,cAAeoJ,GAClEhlD,GAAQi/B,IAAI,SAAU,OAAQ,SAC7B,kBAAC,GAAD,CAAWhM,OAAO,OAAOqF,KAAK,WAAW1gC,OAlBtB,SAACS,GAC5B,OAAOmqB,EAAUpK,MAAK,SAAC2pC,GAAD,OAAOA,IAAM1pD,EAAKjC,SAiBuC6gC,SAAU7Q,iBAElFpmB,GAAQi/B,IAAI,SAAU,OAAQ,UAAY,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,UAC5DjzB,GAAQi/B,IAAI,SAAU,OAAQ,qBAAuB,kBAAC,GAAD,CAAuBhM,OAAO,qBACnFjzB,GAAQi/B,IAAI,SAAU,OAAQ,eAAiB,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,aAAazF,WAAS,EAACuI,UAAQ,IAChG/1B,GAAQi/B,IAAI,SAAU,OAAQ,gBAC7B,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAClS,WAAS,EAACyJ,SAAU,CAAC7Q,kBAwBjE,kBAACg/B,GAAA,EAAD,MACG,gBAAGC,EAAH,EAAGA,SAAa91B,EAAhB,oCACC,oCACGvvB,GAAQi/B,IAAI,SAAU,OAAQ,gBAC7B,kBAACU,GAAA,EAAD,eACE1M,OAAO,iBACP2M,UAAU,OACVhN,MAAM,oCACNh7B,OAAQ,CAAE0tD,YAAaD,EAAS1vC,OAAQxT,KAAM,cAC9CowB,YAAU,EACVE,UAAU,gBACVwE,SAAU,CAAC7Q,iBACPmJ,GAEJ,kBAAC,GAAD,CAAmBqJ,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,aAM/D,kBAACqG,GAAA,EAAD,MACG,gBAAGC,EAAH,EAAGA,SAAa91B,EAAhB,oCACC,oCACGvvB,GAAQi/B,IAAI,SAAU,OAAQ,mBAC7B,kBAACU,GAAA,EAAD,eACE1M,OAAO,oBACP2M,UAAU,OACVhN,MAAM,uCACNh7B,OAAQ,CAAE0tD,YAAaD,EAAS1vC,QAAU,KAAMxT,KAAM,WACtDowB,YAAU,EACVE,UAAU,iBACNlD,GAEJ,kBAAC,GAAD,CAAmBqJ,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,aAM/D,kBAACqG,GAAA,EAAD,MACG,gBAAGC,EAAH,EAAGA,SAAa91B,EAAhB,oCACC,oCACGvvB,GAAQi/B,IAAI,SAAU,OAAQ,kBAC7B,kBAACU,GAAA,EAAD,eACE1M,OAAO,mBACP2M,UAAU,OACVhN,MAAM,sCACNh7B,OAAQ,CACN0tD,YAAaD,EAAS1vC,QAAU,KAChCxT,KAAM,cACN+M,YAAam2C,EAASn2C,aAExBqjB,YAAU,EACVE,UAAU,iBACNlD,GAEJ,kBAAC,GAAD,CAAmBqJ,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,aAM/D,kBAACqG,GAAA,EAAD,MACG,gBAAGC,EAAH,EAAGA,SAAa91B,EAAhB,oCACC,oCACGvvB,GAAQi/B,IAAI,SAAU,OAAQ,aAC7B,kBAACU,GAAA,EAAD,eACE1M,OAAO,cACP2M,UAAU,OACVhN,MAAM,iCACNh7B,OAAQ,CACN0tD,YAAaD,EAAS1vC,QAAU,KAChCspC,QAAS,CAAC,gBAEZ1sB,YAAU,EACVE,UAAU,iBACNlD,GAEJ,kBAAC,GAAD,CAAmBqJ,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,aAQ9D/+C,GAAQi/B,IAAI,SAAU,OAAQ,eAAiB,kBAAC+f,GAAA,EAAD,CAAe/rB,OAAO,eACrEjzB,GAAQi/B,IAAI,SAAU,OAAQ,iBAC7B,kBAACY,GAAA,EAAD,CACE5M,OAAO,kBACP2M,UAAU,OACVhN,MAAM,qCACNh7B,OAAQ,CAAEyoD,UAAWj+B,GACrBgN,QAAS,CAAEtB,UAAWsB,EAAQoP,qBAC9BhR,WAAS,GAET,kBAACsR,GAAA,EAAD,OAGH9+B,GAAQi/B,IAAI,SAAU,OAAQ,SAC7B,kBAAC,GAAD,CAAiBhM,OAAO,OAAOyvB,YAAa,mQAAoD5hB,UAAQ,GACtG,kBAAC,GAAD,CAAU7N,OAAO,MAAM1V,MAAM,OAAOomC,SAAO,KAG9C3jD,GAAQi/B,IAAI,SAAU,OAAQ,UAC7B,kBAAC,GAAD,CAAiBhM,OAAO,QAAQ6N,UAAQ,GACtC,kBAAC,GAAD,CAAU7N,OAAO,MAAM1V,MAAM,OAAOomC,SAAO,KAG/C,kBAACyB,GAAA,EAAD,MACG,kBACmB,yBADnB,EAAGC,SACOhtD,MACT2H,GAAQi/B,IAAI,SAAU,OAAQ,6BAC5B,kBAACsmB,GAAA,EAAD,CACEtyB,OAAO,2BACPL,MAAO,2D,+BC7OV4yB,GAVQ,SAAC,GAA4C,IAA1CtrD,EAAyC,EAAzCA,SAAU+4B,EAA+B,EAA/BA,OAAQ5D,EAAuB,EAAvBA,OACpCG,GAD2D,+CAC/CC,gBAElB,IAAKJ,EAAQ,OAAO,KACpB,IAAMo2B,EAAej2B,EAAU,aAAD,OAAct1B,EAAd,SAA+B,CAAEswC,YAAa,IACtEkb,EAAajrD,cAAI40B,EAAQ4D,GAE/B,MAAM,GAAN,OAAUwyB,GAAV,OAAyBC,EAAU,WAAOA,GAAP,YAA2Br2B,EAAOhrB,M,UCgBjEupB,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCukB,aAAc,CACZthC,MAAO+c,EAAME,QAAQzyB,MAAMmkB,KAC3B,UAAW,CACTqP,gBAAiBujB,gBAAKxkB,EAAME,QAAQzyB,MAAMmkB,KAAM,KAChD,uBAAwB,CACtBqP,gBAAiB,qBA0DV64B,GApDM,SAAC,GAQf,IAPLx2B,EAOI,EAPJA,SACSoE,EAML,EANJnE,QACAF,EAKI,EALJA,UACAG,EAII,EAJJA,OACAn1B,EAGI,EAHJA,SACU0rD,EAEN,EAFJp1B,SACGjB,EACC,kFACEmG,EAAWC,eACXnF,EAAWq1B,eACXxnD,EAAU4hC,eACV3K,EAASC,eACTnG,EAAUxB,GAAU,CAAEwB,QAASmE,IALjC,EAM0BuE,oBAAS,GANnC,mBAMGvwB,EANH,KAMY6nC,EANZ,KA8BJ,OACE,kBAAC,KAAD,eACEjM,QAxBgB,WAClBiM,GAAW,GACX1Z,EAAS2Z,gBAETkB,GAAc,CACZr2C,WACAwM,MAAO,CAAErC,GAAIgrB,EAAOhrB,MAEnBxL,MAAK,WACJy8B,EAAO,iCAAkC,OAAQ,CAAEkV,YAAa,IAChEha,EAASo1B,EAAYz2B,EAAUE,EAAOhrB,IACtChG,OAPJ,OASS,SAAC/E,GACNg8B,EAAwB,kBAAVh8B,EAAqBA,EAAQA,EAAMiF,SAAW,6BAA8B,cAV9F,SAYW,WACP6wC,GAAW,GACX1Z,EAASma,oBAOX9Z,SAAUxuB,EACVqrB,MAAM,mBACN1D,UAAS,2BAAsBE,EAAQghB,aAA9B,YAA8ClhB,GACvD30B,IAAI,UA1EuB,SAAC,GAAD,EAC/B40B,SAD+B,EAE/BC,QAF+B,EAG/B4f,aAH+B,EAI/Bc,aAJ+B,EAK/BC,yBAL+B,EAM/BC,QAN+B,EAO/Bpd,MAP+B,EAQ/Bqd,SAR+B,EAS/B/1C,SAT+B,EAU/B22B,OAV+B,EAW/BgU,YAX+B,EAY/B/T,SAZ+B,EAa/BN,SAb+B,EAc/B0f,cAd+B,4MA2EvBrhB,CAAkBU,IAEtB,kBAAC,KAAD,Q,4OClFS,mBAA0B,IAAvBr1B,EAAsB,EAAtBA,SAAUwM,EAAY,EAAZA,MAC1B,OAAO7G,GAAiBlC,OAAO,CAC7BC,SAAUH,IAAF,KAAwBvD,EAAoBA,EAC7BA,GAIvB2D,UAAW,CAAE6I,SACb5I,QAAS,SAACxE,GACRyE,MAAMzE,OCeNs0B,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCi6B,cAAe,OAGXC,GAAgB,SAAC,GAShB,IARIxyB,EAQL,EARJnE,QACAF,EAOI,EAPJA,UAEAh1B,GAKI,EANJipC,QAMI,EALJjpC,UACAm1B,EAII,EAJJA,OACAF,EAGI,EAHJA,SACUy2B,EAEN,EAFJp1B,SACGjB,EACC,4FACEH,EAAUxB,GAAU,CAAEwB,QAASmE,IAC/BmC,EAAWC,eACXnF,EAAWq1B,eACXxnD,EAAU4hC,eACV3K,EAASC,eALX,EAM0BuC,oBAAS,GANnC,mBAMGvwB,EANH,KAMY6nC,EANZ,KA8BJ,OACE,kBAAC,KAAD,eACEjM,QAxBkB,WACpBiM,GAAW,GACX1Z,EAAS2Z,gBAET2W,GAAiB,CACf9rD,WACAwM,MAAO,CAAErC,GAAIgrB,EAAOhrB,MAEnBxL,MAAK,WACJy8B,EAAO,sCAAuC,OAAQ,CAAEkV,YAAa,IACrEha,EAASo1B,EAAYz2B,GACrB9wB,OAPJ,OASS,SAAC/E,GACNg8B,EAAwB,kBAAVh8B,EAAqBA,EAAQA,EAAMiF,SAAW,6BAA8B,cAV9F,SAYW,WACP6wC,GAAW,GACX1Z,EAASma,oBAOX9Z,SAAUxuB,EACVuoB,QAAQ,YACRxhB,KAAK,SACLskB,MAAM,oBACN1D,UAAS,4BAAuBE,EAAQ02B,cAA/B,YAAgD52B,GACzD30B,IAAI,UArEuB,SAAC,GAAD,EAC/B40B,SAD+B,EAE/BC,QAF+B,EAG/B4f,aAH+B,EAI/Bc,aAJ+B,EAK/BC,yBAL+B,EAM/BC,QAN+B,EAO/Bpd,MAP+B,EAQ/Bqd,SAR+B,EAS/B/1C,SAT+B,EAU/B22B,OAV+B,EAW/BgU,YAX+B,EAY/B/T,SAZ+B,EAa/BN,SAb+B,EAc/B0f,cAd+B,4MAsEvBrhB,CAAkBU,IAEtB,kBAAC,KAAD,QAcNw2B,GAAcr0B,aAAe,CAC3BlB,UAAU,GAGGu1B,U,sBCtFTn4B,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCtO,MAAO,CACL+P,YAAazB,EAAMtb,UACnBypB,WAAY,IACZe,SAAU,GAEZkrB,aAAc,CACZl4B,QAAS,OACTutB,SAAU,QAEZ4K,YAAa,CACX54B,YAAazB,EAAMtb,QAAQ,GAC3B,eAAgB,CACd+c,YAAa,QAKbz3B,GAAkB,CACtBC,KAAM,UACNC,MAAO,UACPC,IAAK,UACLC,KAAM,UACNC,OAAQ,WAWJiwD,GAAwB,SAAC,GAA+B,EAA7Bt1B,OAA6B,EAArBJ,KAAsB,IAAbxB,EAAY,kCACtDG,EAAUxB,KACRyB,EAAWJ,EAAXI,OACR,IAAKA,EAAQ,OAAO,KACpB,IAAMvR,EAASuR,EAAOvR,OAChBnG,EAAc0X,EAAO1X,YACrB2G,EAAQ+Q,EAAO/Q,MACjBsU,EAAQvD,EAAOvR,QAAUuR,EAAOvR,OAAOsoC,WAK3C,OAJIxzB,IACFA,EAAQ,SAAS74B,UAAU,EAAG,EAAI64B,EAAMt6B,QAAUs6B,GAIlD,oCACE,kBAACkC,GAAA,EAAD,KACE,kBAACuxB,GAAA,EAAD,CAAKt4B,QAAQ,OAAOoF,aAAc,GAChC,kBAACK,GAAA,EAAD,CAAY1D,QAAQ,KAAKC,UAAU,KAAKb,UAAWE,EAAQ7R,OACxDqV,GAAStU,GAEXR,GAAU,kBAACoW,GAAA,EAAD,CAAMtB,MAAOtU,KAG1B,kBAACkV,GAAA,EAAD,CAAY1D,QAAQ,QAAQhhB,MAAM,gBAAgBihB,UAAU,KACzDpY,IAGL,kBAAC2uC,GAAA,EAAD,eAAkBp3B,UAAWE,EAAQ62B,cAAkBh3B,GACrD,kBAAC,KAAD,CAAWgE,OAAO,UAClB,kBAACgoB,GAAA,EAAD,CAAWhoB,OAAO,YAAYl8B,QAASlB,GAAiBq5B,UAAWE,EAAQ82B,cAC3E,kBAACjL,GAAA,EAAD,CAAWhoB,OAAO,YAAYl8B,QAASlB,GAAiBq5B,UAAWE,EAAQ82B,cAC3E,kBAACjL,GAAA,EAAD,CAAWhoB,OAAO,SAASl8B,QAASlB,GAAiBq5B,UAAWE,EAAQ82B,cACxE,kBAACjL,GAAA,EAAD,CAAWhoB,OAAO,aAAal8B,QAASlB,GAAiBq5B,UAAWE,EAAQ82B,cAC5E,kBAACjL,GAAA,EAAD,CAAWhoB,OAAO,cAAcl8B,QAASlB,GAAiBq5B,UAAWE,EAAQ82B,eAE/E,kBAACpxB,GAAA,EAAD,KACE,kBAAC,GAAD,iBAAgB7F,EAAhB,CAAuBgE,OAAO,YAC9B,kBAAC,GAAD,iBAAchE,EAAd,CAAqBgE,OAAO,UAC5B,kBAAC,GAAiBhE,MAMXs3B,GAnDW,SAACt3B,GACzB,OACE,kBAAC,GAAgBA,EACf,kBAAC,GAAD,QClCArB,GAAYC,cAAW,SAAChC,GAC5B,MAAO,CACLiC,UAAW,CACTC,QAAS,OACTC,cAAe,SACf/gB,MAAO,OACPu5B,WAAY,cAEdggB,UAAW,CACTv5C,MAAO,uBAKPw5C,GAAoB,SAACx3B,GACzB,IAAMG,EAAUxB,KAGhB,MAA2B,cAFd6H,eAEJxwB,OAAOlD,OAA+B,KAG7C,yBAAKmtB,UAAWE,EAAQtB,WACrB9tB,GAAQi/B,IAAI,SAAU,OAAQ,WAC7B,kBAAC,GAAD,iBAAehQ,EAAf,CAAsBgE,OAAO,SAASqF,KAAK,aAAarB,SAAU,CAAC7Q,mBAEpEpmB,GAAQi/B,IAAI,SAAU,OAAQ,kBAAoB,kBAACsmB,GAAA,EAAD,iBAAkBt2B,EAAlB,CAAyBgE,OAAO,qBAYzFwzB,GAAkB/0B,aAAe,CAC/BY,UAAU,GAGGm0B,UCJT74B,IAHgBxH,eACIA,eAERyH,cAAW,SAAChC,GAAD,MAAY,CACvC6C,QAAS,CACPX,QAAS,OACT,yBAA0B,CACxBT,YAAazB,EAAMtb,QAAQ,KAG/Bm2C,UAAW,CACT93B,WAAY,GAEdgE,MAAO,CACLplB,SAAU,GACVohB,WAAY,GAEdg2B,OAAQ,CACNh2B,WAAY,QAEd4P,oBAAqB,CACnBnQ,UAAW,EACX8E,aAAc,QAIZ0xB,GAAc,SAAC51B,GACnB,IAAMG,EAAUxB,KACRyB,EAAWJ,EAAXI,OACF+P,EAAY/P,EAAOrF,QACVqF,EAAOttB,OAEtB,OACE,kBAACi9B,GAAA,EAAD,iBAAa/P,EAAb,CAAoBG,QAAS,CAAEV,QAASU,EAAQV,WAC7C0Q,GAAap/B,GAAQi/B,IAAI,UAAW,SAAW,kBAAC,GAAD,OAC9CG,GAAap/B,GAAQi/B,IAAI,SAAU,SAAW,kBAACrJ,GAAA,EAAD,OAC9CwJ,GAAap/B,GAAQi/B,IAAI,SAAU,SACnC,kBAACrJ,GAAA,EAAD,CAAYpF,SAAU,OAAQoC,MAAM,8BAA8Bsd,eAAe,EAAOpgB,QAAQ,cAEhGsP,GAAap/B,GAAQi/B,IAAI,SAAU,SAAW,kBAAC,GAAD,CAAc/P,UAAWE,EAAQw1B,OAAQp0B,SAAS,SACjG4O,GAAap/B,GAAQi/B,IAAI,SAAU,SAClC,kBAAC,KAAD,CAAcnO,UAAQ,EAAC5B,UAAWE,EAAQw1B,OAAQt2B,KAAM,kBAAC,KAAD,UAM1Dq4B,GAAmB,SAAC1hD,GACxB,IAAMi+B,EAAS,GAcf,MARsB,cAAlBj+B,EAAOlD,SACW,yBAAhBkD,EAAO5M,OACJ4M,EAAOxN,OAAUwN,EAAOxN,MAAMa,SAAQ4qC,EAAOzrC,MAAQ,CAAC,iCACtDwN,EAAOsI,MAAStI,EAAOsI,KAAKjV,SAAQ4qC,EAAO31B,KAAO,CAAC,iCAErDtI,EAAO5L,SAAQ6pC,EAAO7pC,OAAS,CAAC,mCAGhC6pC,GAiJM0jB,GA9IE,SAAC33B,GAChB,IAAMkQ,EAAkB9M,aAAkBpD,GACpCG,EAAUxB,KACVrsB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpS,EAAW7gB,GAAQA,EAAK6gB,SAAY,GAEpCI,EAAYjhB,EAAOA,EAAKihB,UAAY,GAM1C,OACE,kBAAC,GAAD,iBAAcyM,EAAWkQ,EAAzB,CAA0C5hB,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,MACjF,kBAAC,GAAD,MACA,kBAAC,GAAD,KACE,kBAACoQ,GAAA,EAAD,CAAY3Q,QAAS,kBAAC,GAAD,MAAiBuI,SAAU0vB,IAC9C,kBAACnnB,GAAA,EAAD,CAAS5M,MAAM,oDACZ5yB,GAAQi/B,IAAI,SAAU,OAAQ,SAC7B,kBAAC,GAAD,CAAWhM,OAAO,OAAOqF,KAAK,WAAW1gC,OAXxB,SAACS,GAC5B,OAAOmqB,EAAUpK,MAAK,SAAC2pC,GAAD,OAAOA,IAAM1pD,EAAKjC,WAahC,kBAACqpC,GAAA,EAAD,CAAWxM,OAAO,UACjBjzB,GAAQi/B,IAAI,SAAU,OAAQ,oBAC7B,kBAAC,GAAD,CAAuBhM,OAAO,qBAE9B,kBAAC,GAAD,CAAuBA,OAAO,qBAE/BjzB,GAAQi/B,IAAI,SAAU,OAAQ,eAAiB,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,aAAazF,WAAS,EAACuI,UAAQ,IAChG/1B,GAAQi/B,IAAI,SAAU,OAAQ,gBAC7B,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAClS,WAAS,EAACyJ,SAAU,CAAC7Q,kBAGjE,kBAACg/B,GAAA,EAAD,MACG,gBAAGC,EAAH,EAAGA,SAAa91B,EAAhB,oCACC,oCACGvvB,GAAQi/B,IAAI,SAAU,OAAQ,gBAC7B,kBAACU,GAAA,EAAD,eACE1M,OAAO,iBACP2M,UAAU,OACVhN,MAAM,oCACNh7B,OAAQ,CAAE0tD,YAAaD,EAAS1vC,OAAQxT,KAAM,cAC9C80B,SAAU,CAAC7Q,gBACXmM,YAAU,EACVE,UAAU,iBACNlD,GAEJ,kBAAC,GAAD,CAAmBqJ,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,SAGxD/+C,GAAQi/B,IAAI,SAAU,OAAQ,mBAC7B,kBAACU,GAAA,EAAD,eACE1M,OAAO,oBACP2M,UAAU,OACVhN,MAAM,uCACNh7B,OAAQ,CAAE0tD,YAAaD,EAAS1vC,OAAQxT,KAAM,WAC9CowB,YAAU,EACVE,UAAU,iBACNlD,GAEJ,kBAAC,GAAD,CAAmBqJ,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,SAGxD/+C,GAAQi/B,IAAI,SAAU,OAAQ,eAC7B,kBAACU,GAAA,EAAD,eACE1M,OAAO,gBACP2M,UAAU,OACVhN,MAAM,mCACNh7B,OAAQ,CAAE0tD,YAAaD,EAAS1vC,OAAQspC,QAAS,CAAC,UAAW,aAC7D1sB,YAAU,EACVE,UAAU,iBACNlD,GAEJ,kBAAC,GAAD,CAAmBqJ,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,SAGxD/+C,GAAQi/B,IAAI,SAAU,OAAQ,kBAC7B,kBAACU,GAAA,EAAD,eACE1M,OAAO,mBACP2M,UAAU,OACVhN,MAAM,sCACNh7B,OAAQ,CAAE0tD,YAAaD,EAAS1vC,OAAQxT,KAAM,cAAe+M,YAAam2C,EAASn2C,aACnFqjB,YAAU,EACVE,UAAU,iBACNlD,GAEJ,kBAAC,GAAD,CAAmBqJ,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,SAGxD/+C,GAAQi/B,IAAI,SAAU,OAAQ,aAC7B,kBAACU,GAAA,EAAD,eACE1M,OAAO,cACP2M,UAAU,OACVhN,MAAM,iCACNh7B,OAAQ,CAAE0tD,YAAaD,EAAS1vC,QAAU,KAAMspC,QAAS,CAAC,gBAC1D1sB,YAAU,EACVE,UAAU,iBACNlD,GAEJ,kBAAC,GAAD,CAAmBqJ,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,aAM/D,kBAAC,GAAD,CAAW9rB,OAAO,SAASqF,KAAK,eAC/Bt4B,GAAQi/B,IAAI,SAAU,OAAQ,WAAa,kBAAC+f,GAAA,EAAD,CAAe/rB,OAAO,WACjEjzB,GAAQi/B,IAAI,SAAU,OAAQ,eAAiB,kBAAC+f,GAAA,EAAD,CAAe/rB,OAAO,eACtE,kBAAC,GAAD,CAAkBA,OAAO,UAAUyM,WAAS,EAAClS,WAAS,IACrDxtB,GAAQi/B,IAAI,SAAU,OAAQ,oBAC7B,kBAACY,GAAA,EAAD,CACE5M,OAAO,kBACP2M,UAAU,OACVhN,MAAM,qCACNh7B,OAAQ,CAAEyoD,UAAWj+B,GACrBgN,QAAS,CAAEtB,UAAWsB,EAAQoP,qBAC9BhR,WAAS,GAET,kBAACsR,GAAA,EAAD,CAAwBlG,WAAW,WAGtC54B,GAAQi/B,IAAI,SAAU,OAAQ,UAC7B,kBAAC,GAAD,CAAiBhM,OAAO,OAAOyvB,YAAa,mQAAoD5hB,UAAQ,GACtG,kBAAC,GAAD,CAAU7N,OAAO,MAAM1V,MAAM,OAAOomC,SAAO,KAG9C3jD,GAAQi/B,IAAI,SAAU,OAAQ,UAC7B,kBAAC,GAAD,CAAiBhM,OAAO,QAAQ6N,UAAQ,GACtC,kBAAC,GAAD,CAAU7N,OAAO,MAAM1V,MAAM,OAAOomC,SAAO,KAG/C,kBAAC,GAAD,OAID3jD,GAAQi/B,IAAI,SAAU,OAAQ,iBAAmB,kBAAC,GAAD,U,qDCrN/C8C,GAAW,SAAC9S,GAAW,IAEhCkB,EAeElB,EAfFkB,QACAC,EAcEnB,EAdFmB,MACAjB,EAaEF,EAbFE,SACAlhB,EAYEghB,EAZFhhB,SAEAihB,GAUED,EAXFG,QAWEH,EAVFC,WACWmB,EASTpB,EATFc,UACAT,EAQEL,EARFK,aACAuC,EAOE5C,EAPF4C,QACAvB,EAMErB,EANFqB,QACAjB,EAKEJ,EALFI,OACAn1B,EAIE+0B,EAJF/0B,SACAqjB,EAGE0R,EAHF1R,MACAwT,EAEE9B,EAFF8B,QACGxB,EAhB4B,aAiB7BN,EAjB6B,sJAkB3BG,EAAUxB,GAAUqB,GAE1B,GAAII,GAAUA,EAAOrF,QACnB,OACE,kBAAC,GAAD,CACE9vB,SAAUA,EACVi1B,SAAUA,EACVE,OAAQA,EACR9R,MAAOA,EACP+R,aAAcA,EACdgB,QAASA,EACTuB,QAASA,IAKf,IAAMX,EAAkC,qBAAZf,GAA2B0B,EAAU,kBAAC,KAAD,MAAqB1B,EAEtF,OAAKliB,EAKH,uCAAKihB,UAAWS,KAAW,YAAaP,EAAQvC,KAAMqC,IAAgBL,GAAkBU,IACtF,kBAAC,KAAD,CAAgBhS,MAAOA,EAAO8R,OAAQA,EAAQC,aAAcA,IAC3D4B,GACCE,uBAAaF,EAAD,aACV/B,WACA/wB,KAAMixB,EACNiB,UACAuB,UACA33B,YAEGg3B,EAAajC,QAEpB,yBACEC,UAAWS,KAAWP,EAAQ3R,KAAT,gBAClB2R,EAAQiC,WAAaH,KAGxB,kBAACb,EAAD,CAASnB,UAAWE,EAAQkC,MACzBjC,GACCkC,IAAMC,SAAS/4B,IAAIwV,GAAU,SAAClI,EAAOsL,GAAR,OAC3BkgB,IAAME,eAAe1rB,GACjBwrB,IAAMH,aAAarrB,EAAO,CACxBxL,IAAK8W,EACLnX,WACAi1B,WACAE,SACA0B,YAEF,SAGTX,GACCgB,uBAAahB,EAAO,CAClBl2B,WACAi1B,WACAE,SACA0B,cAxCD,MAiEXgR,GAASrQ,aAAe,CACtBtC,QAAS,GACTW,UAAW,OAGb,IAAMnC,GAAYC,aAChB,CACEhB,KAAM,GACNpP,KAAM,CACJsQ,QAAS,QAEXsD,UAAW,CACThD,UAAW,OAEbiD,KAAM,CACJK,KAAM,aAGV,CAAEv7B,KAAM,WAGJy4B,GAAoB,SAAC,GAAD,EACxB+C,UADwB,EAExBC,QAFwB,EAGxBtB,QAHwB,EAIxBxB,QAJwB,EAKxB1qB,GALwB,EAMxBytB,OANwB,EAOxBvqB,QAPwB,EAQxB0H,SARwB,EASxBzY,MATwB,EAUxBO,QAVwB,EAWxBk7B,YAXwB,uIAeX40B,GA/JF,SAAC53B,GAAD,OACX,kBAAC63B,GAAA,EAAD,CAAqBhwD,MAAK,eAAOm4B,IAC/B,kBAAC,GAAD,iBAAcA,EAAW83B,aAAkB93B,O,WCEzCrB,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,CACJwB,UAAWxC,EAAMtb,QAAQ,GACzB4iB,aAActH,EAAMtb,UACpB,gBAAiB,CACf8d,UAAW,GAEbE,UAAW,cAgCAy4B,GA5BO,SAAC,GAAuD,IAA5CzzB,EAA2C,EAApDnE,QAA0BF,EAA0B,EAA1BA,UAAcD,EAAY,wCACrEG,EAAUxB,GAAU,CAAEwB,QAASmE,IACrC,OACE,kBAACD,GAAA,EAAD,CAAMpE,UAAS,UAAKE,EAAQvC,KAAb,YAAqBqC,IAClC,kBAAC4F,GAAA,EAAD,KACE,kBAACtB,GAAA,EAAD,CAAYzD,UAAU,QACpB,kBAAC,KAAD,CAAYjhB,MAAM,SAAStB,SAAS,WAEtC,kBAACgmB,GAAA,EAAD,CAAY1D,QAAQ,QAAQhhB,MAAM,cAAc2kB,cAAY,GAA5D,wJAIF,kBAACwzB,GAAA,EAAD,CAAantB,MAAO,CAAE7L,eAAgB,WACnCjuB,GAAQi/B,IAAI,UAAWhQ,EAAM/0B,WAAa,kBAAC,GAAD,iBAAmB+0B,EAAnB,CAA0Ba,QAAQ,OAAOxhB,KAAK,WACxFtO,GAAQi/B,IAAI,SAAUhQ,EAAM/0B,WAC3B,kBAAC,KAAD,iBACM+0B,EADN,CAEE6B,UAAU,EACV5B,UAAWE,EAAQw1B,OACnBt2B,KAAM,kBAAC,KAAD,MACNwB,QAAQ,aClCdlC,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,GACNoI,KAAM,YAAiB,IAAd57B,EAAa,EAAbA,OACHyzB,EAAyC,UAAvBjB,EAAME,QAAQ1zB,KAAmBwzB,EAAME,QAAQqlB,KAAK,KAAOvlB,EAAME,QAAQqlB,KAAK,KACpG,OAAQ/3C,GACN,IAAK,OACHyzB,EAAkBsoB,KAAI,KACtB,MACF,IAAK,UACHtoB,EAAkB6oB,KAAM,KAM5B,MAAO,CACL7mC,MAAO+c,EAAME,QAAQ6I,gBAAgB9H,GACrCA,gBAAiBA,EACjB,mBAAoB,CAClBA,gBAAiBipB,qBAAUjpB,EAAiB,QAIlD8F,MAAO,CACL7E,QAAS,QACT8F,SAAU,SACVC,aAAc,WACdC,WAAY,cAIVmzB,GAAiB,SAAC,GAAiF,IAA/Eh4B,EAA8E,EAA9EA,UAAoBqE,EAA0D,EAAnEnE,QAA0BC,EAAyC,EAAzCA,OAAQ4D,EAAiC,EAAjCA,OAAQ/4B,EAAyB,EAAzBA,SAAa+0B,EAAY,qEAChG51B,EAASoB,KAAI40B,EAAQ4D,GACrB7D,EAAUxB,GAAU,CAAEv0B,SAAQ+1B,QAASmE,IACvC/D,EAAYC,eAClB,IAAKJ,EAAQ,OAAO,KAEpB,IAAMuD,EAAQpD,EAAU,aAAD,OAAct1B,EAAd,kBAAgC+4B,EAAhC,YAA0C55B,GAAU,CAAEsD,EAAGtD,IAEhF,OACE,kBAAC66B,GAAA,EAAD,eACE9E,QAAS,CAAEvC,KAAMuC,EAAQ6F,KAAMrC,MAAOxD,EAAQwD,OAC9C1D,UAAS,UAAKA,GACd0D,MAAOA,GACH/D,GAAkBI,MAK5Bi4B,GAAex1B,aAAe,CAC5BY,UAAU,GAGG40B,UCvDTt5B,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,GACN+F,MAAO,CACL7E,QAAS,QACT8F,SAAU,SACVC,aAAc,WACdC,WAAY,cAIVozB,GAAwB,SAAC,GAAiF,IAA/Ej4B,EAA8E,EAA9EA,UAAqCG,GAAyC,EAAnED,QAAmE,EAAzCC,QAAQ4D,EAAiC,EAAjCA,OAAQ/4B,EAAyB,EAAzBA,SAAa+0B,EAAY,qEACvGG,EAAUxB,KACV4B,EAAYC,eAClB,IAAKJ,EAAQ,OAAO,KACpB,IAAMpQ,EAAgBxkB,KAAI40B,EAAQ4D,GAE5BL,EACFpD,EAAU,aAAD,OAAct1B,EADb+kB,EACD,wBACA,6BAEb,OACE,kBAACiV,GAAA,EAAD,eAAM9E,QAAS,CAAEwD,MAAOxD,EAAQwD,OAAS1D,UAAS,UAAKA,GAAa0D,MAAOA,GAAW/D,GAAkBI,MAI5Gk4B,GAAsBz1B,aAAe,CACnCY,UAAU,GAGG60B,UC1BTv5B,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCtO,MAAO,CACL+P,YAAazB,EAAMtb,UACnBypB,WAAY,IACZe,SAAU,OAYRqsB,GAA0B,SAACn4B,GAC/B,IAAMG,EAAUxB,KACRyB,EAAWJ,EAAXI,OACR,IAAKA,EAAQ,OAAO,KACKA,EAAOrQ,iBAEhC,OACE,oCACE,kBAAC8V,GAAA,EAAD,KACE,kBAAC,GAAD,eAAW7B,OAAO,SAASnD,QAAQ,KAAKC,UAAU,KAAK0D,cAAY,EAACvE,UAAWE,EAAQ7R,OAAW0R,KAEpG,kBAAC6F,GAAA,EAAD,CAAagF,MAAO,CAAE6E,WAAY,IAChC,kBAAC,GAAD,iBAAgB1P,EAAhB,CAAuBgE,OAAO,YAC9B,kBAAC,GAAD,iBAAuBhE,EAAvB,CAA8BgE,OAAO,sBAM9Bo0B,GA3Ba,SAACp4B,GAC3B,OACE,kBAAC,GAAgBA,EACf,kBAAC,GAAD,Q,qBCZArB,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCznB,MAAO,CACLu6B,WAAY,GACZzxB,OAAQ,QAEVo6C,UAAW,GAIX55B,OAAQ,CACNA,OAAQ7B,EAAMtb,QAAQ,IAExB+d,KAAM,CACJxf,MAAO+c,EAAME,QAAQC,QAAQC,WAkDlBs7B,GA9CW,SAAC,GAAmC,IAAjCxK,EAAgC,EAAhCA,SAAU34C,EAAsB,EAAtBA,MAC/BgrB,GADqD,qCAC3CxB,MACVmD,EAAUiT,eACVwP,EAAOiO,eAEbzpB,qBAAU,WACRwb,EAAKgU,UACJ,CAAChU,EAAMziB,IAQV,OACE,kBAACwG,GAAA,EAAD,iBACMnzB,EADN,CAEEopB,WAAS,EACTkS,WAAS,EACT5P,QAAQ,WAER4H,WAAY,CACVud,aACE,kBAACC,GAAA,EAAD,CAAgBhmB,UAAWE,EAAQk4B,UAAWtsB,SAAS,OACrD,kBAACuN,GAAA,EAAD,CACEiP,aAAW,6BACXtoB,UAAWE,EAAQd,KACnB6U,QAAS,SAACvG,GACRmgB,EAASngB,GACT6qB,WAAWjU,EAAKgU,QAElBE,KAAK,OAEL,kBAAC,KAAD,QAINC,UA7BgB,SAAC/qB,GACC,KAAlBA,EAAMgrB,UAAqC,IAAnBhrB,EAAMirB,UAChC9K,EAASngB,IA6BP8lB,YAAa,kH,ovCCvBkBjlD,IAAH,KAtCd,4oBAAtB,I,8FCsBMmwB,GAAYC,cAAW,SAAChC,GAC5B,MAAO,CACLi8B,WAAY,GACZx5B,KAAM,CACJphB,OAAQ,GACRD,MAAO,IAET86C,QAAS,CACP,eAAgB,CACdh6B,QAAS,SAGb8X,OAAQ,CACNxZ,WAAYR,EAAME,QAAQK,UAAU3O,KACpC3O,MAAO+c,EAAME,QAAQK,UAAUD,cAEjC67B,SAAU,CACR96C,OAAQ,QACR2B,OAAQ,SAEVtH,QAAS,CACP2F,OAAQ,EACRD,MAAO,OAKPqpC,GAAa,SAAC,GAAgE,EAA9D1jB,MAA+D,IAArC3kB,EAAoC,EAApCA,SAAUihB,EAA0B,EAA1BA,UAAcD,EAAY,iDAC5EO,EAAYC,eADgE,EAElD8B,IAAMuG,SAAS,MAFmC,mBAE3E6B,EAF2E,KAEjEyO,EAFiE,KAI5E1O,GADU9L,KACH1oB,QAAQy0B,IAYrB,OACE,oCACE,kBAAC2O,GAAA,EAAD,CAAS/qB,MAAOiS,EAAU,kBAAmBmiB,UAAU,QACrD,kBAACpJ,GAAA,EAAD,eAAYpF,QAbE,SAACvG,GACnBA,EAAM6X,kBACNrM,EAAYxL,EAAM6L,gBAWoBvZ,UAAWA,EAAW5gB,KAAK,QAAQ/T,IAAI,UAAa00B,GACpF,kBAAC,KAAD,QAGJ,kBAAC,KAAD,CACE5qB,GAAG,YACHs1B,SAAUA,EACV+O,aAAW,EACXuf,eAAe,EACfruB,UAAW,CACTsuB,KAAM,CACJC,SAAS,GAEXC,gBAAiB,CACfD,SAAS,EACTE,kBAAmB,WAGvBC,aAAc,CACZC,SAAU,MACVC,WAAY,SAEdC,gBAAiB,CACfF,SAAU,MACVC,WAAY,SAEd9uB,KAAMA,EACNiP,QAnCc,SAAC/L,GACnBA,EAAM6X,kBACNrM,EAAY,QAmCP5W,WAAS/4B,IAAIwV,GAAU,SAAClI,GAAD,OACtBA,GAAS0rB,yBAAe1rB,GAASwrB,IAAMH,aAAarrB,EAAnB,eAA+BkpB,IAAW,WAO/EwlB,GAAkB,SAAC5R,GAAD,OAAOA,EAAE4R,mBA6HlBiU,GA3HK,SAAC,GAAqF,IAAnFr5B,EAAkF,EAAlFA,OAAQs5B,EAA0E,EAA1EA,cAAeC,EAA2D,EAA3DA,cAAepwB,EAA4C,EAA5CA,SAAUqwB,EAAkC,EAAlCA,YAAaC,EAAqB,EAArBA,KAC5EtV,GADiG,2FAC1FiO,gBACPlgD,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpF,EAAUxB,KAHuF,EAI/EkK,oBAAS,GAJsE,mBAI1Fwa,GAJ0F,WAMjG9iB,EAAYC,eACVloB,GAAY8nB,GAAU,IAAtB9nB,QACAwhD,GAAW15B,GAAU,IAArB05B,OACAzvD,GAAU+1B,GAAU,IAApB/1B,MAER,IAAK+1B,EAAQ,OAAO,KACpB,IAAM20B,EAAS30B,EAAO20B,OAChBz0C,EAAO8f,EAAO9f,KACdya,EAAUqF,EAAOrF,QACjBhM,EAAYqR,EAAOrR,WAAalM,KAAOud,EAAOrR,WAAWhM,OAAO,QAChE2U,EAAY0I,EAAO1I,WAAa7U,KAAOud,EAAO1I,WAAW3U,OAAO,QAChEg3C,EAAa,gBAAY5xD,mBAAmB4sD,EAAO3/C,IAAtC,SACb4kD,EAAY55B,EAAO45B,UAkBzB,OACE,oCACE,kBAACC,GAAA,EAAD,CACE1iB,WAAW,aACXhO,SAAUA,IAAanJ,EAAOhrB,GAC9B8kD,aAba,SAACvsB,GAClB0V,GAAQ,IAaJ8W,aAVc,WAClB9W,GAAQ,KAWJ,kBAAC1J,GAAA,EAAD,KACE,kBAAC,GAAD,CAAa1Z,UAAWE,EAAQyW,OAAQxW,OAAQ20B,KAElD,kBAACnb,GAAA,EAAD,CACE7c,QACE,oCACE,kBAACgE,GAAA,EAAD,CAAMC,GAAI+4B,EAAe7lB,QAASsR,IAC/BuP,EAAO5tD,MAFZ,OAKE,0CALF,OAOI4zB,EAAsBrD,EAAZ3I,EACXzW,GACC,2CACQ,0CADR,OAEE,kBAAC+7B,GAAA,EAAD,CAAkBxJ,MAAO,CAAE5sB,OAAQ,GAAID,MAAO,QAGhD1F,IAAYjO,GACZ,2CACQ,0CADR,OAEE,kBAAC,KAAD,CAAUkU,SAAS,aAGtBlU,GACC,2CACQ,0CADR,OAEE,kBAAC,KAAD,CAAWwV,MAAM,QAAQtB,SAAS,aAGrCu7C,GACC,2CACQ,0CADR,4BAMNM,uBAAwB,CAAEv5B,QAAS,QAAShhB,MAAO,iBACnDsd,UAAYpC,EAAiBwF,EAAU,sBAAjBjgB,EACtB+5C,yBAA0B,CAAEx5B,QAAS,QAAShhB,MAAOkb,EAAU,gBAAkB,kBAEhFA,EAEChqB,GAAQi/B,IAAI,SAAU,WADtBj/B,GAAQi/B,IAAI,SAAU,YAAcj/B,GAAQi/B,IAAI,SAAU,YAAc5P,EAAO20B,OAAO3/C,KAAO9C,EAAK8C,MAEnG/K,GACC,kBAAC,GAAD,MACI0wB,IAAYhqB,GAAQi/B,IAAI,SAAU,YAAc5P,EAAO20B,OAAO3/C,KAAO9C,EAAK8C,KAC1E,kBAACu2B,GAAA,EAAD,CAAUuI,QAxEE,WACxB0lB,EAAYx5B,EAAOhrB,IACnBmvC,EAAKqO,OAAO,YAAaoH,GACzBzV,EAAKqO,OAAO,OAAQtyC,GACpBikC,EAAKqO,OAAO,KAAMxyB,EAAOhrB,IACzBmvC,EAAKqO,OAAO,SAAUtgD,KAoER,kBAACuyC,GAAA,EAAD,KACE,kBAAC,KAAD,OAEF,kBAACtgB,GAAA,EAAD,CAAY1D,QAAQ,WAAWN,EAAU,qBAG3CxF,IAAYhqB,GAAQi/B,IAAI,SAAU,YAAc5P,EAAO20B,OAAO3/C,KAAO9C,EAAK8C,KAC1E,kBAACu2B,GAAA,EAAD,CAAUuI,QAAS,kBAAMylB,EAAcv5B,EAAOhrB,MAC5C,kBAACyvC,GAAA,EAAD,KACE,kBAAC,KAAD,OAEF,kBAACtgB,GAAA,EAAD,CAAY1D,QAAQ,WAAWN,EAAU,sBAG5CxF,IAAYhqB,GAAQi/B,IAAI,SAAU,YAAc5P,EAAO20B,OAAO3/C,KAAO9C,EAAK8C,KACzE,kBAACu2B,GAAA,EAAD,CAAUuI,QAAS,kBAAMwlB,EAAct5B,EAAOhrB,MAC5C,kBAACyvC,GAAA,EAAD,KACE,kBAAC,KAAD,OAEF,kBAACtgB,GAAA,EAAD,CAAY1D,QAAQ,WAAWN,EAAU,yBAMnDs5B,GAAQ,kBAACS,GAAA,EAAD,CAASz5B,QAAQ,QAAQC,UAAU,KAAKb,UAAWE,EAAQ24B,Y,+BCnNrEn6B,GAAYC,cAAW,SAAChC,GAC5B,MAAO,CACLga,OAAQ,CACNxZ,WAAYR,EAAME,QAAQK,UAAU3O,KACpC3O,MAAO+c,EAAME,QAAQK,UAAUD,kBAuNtBq9B,GAlNS,SAAC,GAA0B,IAAxBn6B,EAAuB,EAAvBA,OACnBD,GAD0C,2BAChCxB,MACVrsB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CjyB,EAAe0sC,eAH2B,EAIhBnX,mBAASzI,EAAOra,UAJA,mBAIzCA,EAJyC,KAI/By0C,EAJ+B,OAKF3xB,mBAAS,MALP,mBAKzC4xB,EALyC,KAKxBC,EALwB,KAMjB,kBAApBt6B,EAAOra,WAAuBqa,EAAOra,SAAW,MAC3D,IAAM+b,EAAUiT,eAEhBsZ,cAAqB,WACnBmM,EAAYp6B,EAAOra,UACnB20C,EAAmB,QAClB,CAAC54B,EAAS1B,EAAOra,UAAY,KAEhC,IAAM86B,EAAY,uCAAG,WAAO7qC,GAAP,mBAAArI,EAAA,yDACdyyB,GAAWA,EAAOhrB,IAAOY,EAAOsK,KADlB,iDAEftK,EAAOZ,IACHulD,EAAc,CAClBr6C,KAAMtK,EAAOsK,KACbw5C,QAAQ,EACR5qC,UAAWrM,OAAS+3C,cACpBtiD,SAAS,GAEXkiD,EAAYz0C,EAASvc,KAAI,SAACqxD,GAAD,OAAQA,EAAEzlD,KAAOY,EAAOZ,GAAhB,2BAA0BylD,GAAMF,GAAgBE,MACjFvnD,EACGb,OAAO,OAAQ,CACd2C,GAAIgrB,EAAOhrB,GACXjG,KAAK,2BACAgI,eAAKipB,EAAQ,CAAC,KAAM,OAAQ,WAD7B,IAEFra,SAAU,CACRtT,OAAQ,CACN,CACEgF,MAAO,CAAErC,GAAIY,EAAOZ,IACpBjG,KAAM,CACJmR,KAAMtK,EAAOsK,KACby0C,OAAQ,CAAEC,QAAS,CAAE5/C,GAAIY,EAAO++C,OAAO3/C,KACvC0kD,QAAQ,UAOnBlwD,MAAK,SAACQ,GAAY,IAEP2b,EACN3b,EADF+E,KAAQ4W,SAGV,OADAy0C,EAAYz0C,GACL3b,KAxBX,OA0BS,SAACwpC,GACNtpC,QAAQC,IAAIqpC,GACZ+mB,EAAYtwD,MAAQupC,EACpB+mB,EAAYriD,SAAU,EACtBkiD,EAAYz0C,EAASvc,KAAI,SAACqxD,GAAD,OAAQA,EAAEzlD,KAAOY,EAAOZ,GAAhB,2BAA0BylD,GAAMF,GAAgBE,SA9BrF,SAgCW,WACPH,EAAmB,WAGjBtlD,EAAK0lD,OACLH,EAFD,2BAEoB3kD,GAFpB,IAE4B++C,OAAQziD,EAAM8C,KAAIkD,SAAS,EAAMyW,UAAWlM,OAAS+3C,gBACtFJ,EAAY,GAAD,mBAAKz0C,GAAL,CAAe40C,KAC1BrnD,EACGb,OAAO,OAAQ,CACd2C,GAAIgrB,EAAOhrB,GACXjG,KAAK,2BACAgI,eAAKipB,EAAQ,CAAC,KAAM,OAAQ,WAD7B,IAEFra,SAAU,CACRjS,OAAQ,CAAC,2BAEFkC,GAFC,IAGJ++C,OAAQ,CAAEC,QAAS,CAAE5/C,GAAIY,EAAO++C,OAAO3/C,aAMhDxL,MAAK,SAACQ,GAAY,IAEP2b,EACN3b,EADF+E,KAAQ4W,SAGV,OADAy0C,EAAYz0C,GACL3b,KApBX,OAsBS,SAACwpC,GACNtpC,QAAQC,IAAIqpC,GACZ+mB,EAAYtwD,MAAQupC,EACpB+mB,EAAYriD,SAAU,EACtBkiD,EAAY,GAAD,mBAAKz0C,GAAL,CAAe40C,SA3Eb,2CAAH,sDA0FlB,OACE,kBAAC,KAAD,CACE7M,SAAUjN,EACV8L,cAAe,CACbrsC,KAAM,KACNy0C,OAAQziD,GAEVyjC,OAAQ,YAA6B,IAA1B8K,EAAyB,EAAzBA,aAAc0D,EAAW,EAAXA,KACjBwW,EAAmB,uCAAG,WAAO3lD,GAAP,iBAAAzH,EAAA,6DAC1B+sD,EAAmB,MACnBF,EAAYz0C,EAASpd,QAAO,SAACioB,GAAD,OAAaA,EAAQxb,KAAOA,MAF9B,SAKhB9B,EAAab,OAAO,OAAQ,CACpC2C,GAAIgrB,EAAOhrB,GACXjG,KAAK,2BACAgI,eAAKipB,EAAQ,CAAC,KAAM,OAAQ,WAD7B,IAEFra,SAAU,CACR/R,OAAQ,CAAC,CAAEoB,YAVS,gBAIN4lD,EAJM,EAIxB7rD,KAAQ4W,SAUVw+B,EAAKgU,QACLiC,EAAYQ,GAfc,2CAAH,sDAkBnBC,EAAmB,uCAAG,WAAO7lD,GAAP,iBAAAzH,EAAA,6DAC1B+sD,EAAmB,MACnBF,EACEz0C,EAASvc,KAAI,SAAConB,GAAD,OACXA,EAAQxb,KAAOA,EACXwb,EADJ,2BAESA,GAFT,IAEkBmK,SAAS,EAAMrD,UAAW7U,OAAS+3C,cAAetiD,SAAS,QANvD,SAWhBhF,EAAab,OAAO,OAAQ,CACpC2C,GAAIgrB,EAAOhrB,GACXjG,KAAK,2BACAgI,eAAKipB,EAAQ,CAAC,KAAM,OAAQ,WAD7B,IAEFra,SAAU,CACRtT,OAAQ,CACN,CACEgF,MAAO,CAAErC,MACTjG,KAAM,CAAE4rB,SAAS,EAAMrD,UAAW7U,OAAS+3C,sBAnB3B,gBAUNI,EAVM,EAUxB7rD,KAAQ4W,SAeVw+B,EAAKgU,QACLiC,EAAYQ,GA1Bc,2CAAH,sDA6BzB,OACE,0BACElN,SAAU,SAACngB,GACTkT,EAAalT,GACb4W,EAAKgU,UAGP,kBAAC,KAAD,CAAM7d,OAAK,GACR30B,GACCA,EAASlO,MACTkO,EACGlO,MAAK,SAACm/B,EAAOE,GACZ,IAAM2U,EAAQhpC,KAAOm0B,EAAMjoB,WAAW+8B,OAChCC,EAAQlpC,KAAOq0B,EAAOnoB,WAAW+8B,OACvC,OAAID,EAAQE,EAAc,EACtBA,EAAQF,GAAe,EACpB,KAERriD,KAAI,SAAConB,GAAD,OACH,kBAAC,GAAD,CACEwP,OAAQxP,EACR2Y,SAAUkxB,EACVb,YAAac,EACbhB,cAAeqB,EACfpB,cAAesB,EACf3vD,IAAKslB,EAAQxb,QAGrB,kBAAC6kD,GAAA,EAAD,CAAU1iB,WAAW,cACnB,kBAACoC,GAAA,EAAD,KACE,kBAAC,GAAD,CAAa1Z,UAAWE,EAAQyW,OAAQxW,OAAQ9tB,KAElD,kBAACsnC,GAAA,EAAD,KACE,kBAAC,KAAD,CACEzyC,KAAK,OACL2mD,SAAQ,uCAAE,WAAOngB,GAAP,SAAAhgC,EAAA,sEACFkzC,EAAalT,GADX,OAER4W,EAAKgU,QAFG,2CAAF,sDAIRz3B,UAAWw3B,aCrMhB4C,IAtBGt8B,cAAW,SAAChC,GAAD,MAAY,MAEX,SAACoD,GAC7B,OACE,kBAAC,GAAgBA,EACf,kBAAC,GAAD,SCNArB,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,CACJwB,UAAWxC,EAAMtb,QAAQ,GACzB4iB,aAActH,EAAMtb,UACpB,gBAAiB,CACf8d,UAAW,GAEb,eAAgB,CACd8E,aAAc,IAGlB1V,KAAM,OA2BO2sC,GAxBI,SAAC,GAOb,IANLn8C,EAMI,EANJA,SACSslB,EAKL,EALJnE,QAKI,IAJJW,UAAWsD,OAIP,MAJmBC,KAInB,EAHJpE,EAGI,EAHJA,UACA0D,EAEI,EAFJA,MACG3D,EACC,uEACEG,EAAUxB,GAAU,CAAEwB,QAASmE,IAC/B/D,EAAYC,eAClB,OACE,yBAAKP,UAAS,UAAKE,EAAQvC,KAAb,YAAqBqC,IAChC0D,GACC,kBAACY,GAAA,EAAD,CAAY1D,QAAQ,YAAYhhB,MAAM,gBAAgB2kB,cAAY,EAACC,QAAM,GACtElE,EAAU,aAAD,OAAcP,EAAM/0B,SAApB,mBAAuC04B,KAGrD,kBAACS,EAAD,CAAWnE,UAAWE,EAAQ3R,MAC5B,kBAAC6oC,GAAA,EAAqBr3B,EAAQhhB,M,qBC1BvBu3C,GATQ,SAAC,GAA4C,IAA1CtrD,EAAyC,EAAzCA,SAAkBm1B,GAAuB,EAA/B4D,OAA+B,EAAvB5D,QACpCG,GAD2D,+CAC/CC,gBAClB,IAAKJ,EAAQ,OAAO,KACpB,IAAMg7B,EAAWC,KAAW96B,EAAU,aAAD,OAAct1B,EAAd,uBAAqCm1B,EAAOh3B,QAC3EkyD,EAAal7B,EAAO/Q,MAE1B,OADkBkR,EAAU,aAAD,OAAct1B,EAAd,UAAgC,CAAE7B,KAAMgyD,EAAUvsC,OAAQysC,K,UCCjF38B,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,CACJkB,QAAS,OACTutB,SAAU,OACVjtB,WAAYxC,EAAMtb,QAAQ,GAC1B4iB,cAAetH,EAAMtb,QAAQ,QAK3BkkC,GAAkB,SAAC5R,GAAD,OAAOA,EAAE4R,mBAE3ByC,GAAc,aAEpB,SAASsT,GAAT,GAYG,EAXDl4B,SAWE,IAVOiB,EAUR,EAVDnE,QACAF,EASC,EATDA,UACAG,EAQC,EARDA,OACA4D,EAOC,EAPDA,OACA/4B,EAMC,EANDA,SACA0lC,EAKC,EALDA,UACAzQ,EAIC,EAJDA,SACAlhB,EAGC,EAHDA,SACA4kB,EAEC,EAFDA,SACGtD,EACF,6HACKH,EAAUxB,GAAU,CAAEwB,QAASmE,IAC/Bn1B,EAAO3D,KAAI40B,EAAQ4D,GACzB,OAAK70B,EAKH,uCAAK8wB,UAAWS,KAAWP,EAAQvC,KAAMqC,IAAgBL,GAAkBU,IACxEnxB,EAAK3F,KAAI,SAAC0L,GACT,IAAMywC,EAAWzlB,EAASz4B,QAAQwD,EAAU0lC,GACtCiV,IAAoBhiB,GAAmB43B,aAAa7V,EAAUzwC,EAAKE,GAAIwuB,GAE7E,OAAIgiB,EAEA,kBAAC7kB,GAAA,EAAD,CAAMd,UAAWE,EAAQjyB,KAAM5C,IAAK4J,EAAKE,GAAI4rB,GAAI4kB,EAAkB1R,QAASsR,IACzErjB,uBAAaI,WAASmC,KAAK1lB,GAAW,CACrCohB,OAAQlrB,EACRjK,WACAi1B,WAEAgU,QAAS+T,MAMV9lB,uBAAaI,WAASmC,KAAK1lB,GAAW,CAC3C1T,IAAK4J,EAAKE,GACVgrB,OAAQlrB,EACRjK,WACAi1B,iBA3BC,KA2CXq7B,GAAiB94B,aAAe,CAC9BtC,QAAS,GACTyD,SAAU,OACVP,UAAU,GAGGk4B,U,0CC/ET58B,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvC6+B,YAAa,CACXz8B,eAAgB,UAElBslB,OAAQ,CACNzkC,MAAO+c,EAAME,QAAQ3d,KAAKge,WAE5Bu+B,aAAc,GACdC,WAAY,CACVh8B,WAAY,EACZphB,SAAU,GACV1T,UAAW,eACX0mC,WAAY3U,EAAMs2B,YAAYp/C,OAAO,YAAa,CAChD8nD,SAAUh/B,EAAMs2B,YAAY0I,SAASC,YAGzCC,WAAY,CACVjxD,UAAW,sBAITkxD,GAAc,SAAC,GAUd,IATL/8C,EASI,EATJA,SACSslB,EAQL,EARJnE,QACAl1B,EAOI,EAPJA,SACAi1B,EAMI,EANJA,SACAE,EAKI,EALJA,OACA0B,EAII,EAJJA,QACA6B,EAGI,EAHJA,MACAq4B,EAEI,EAFJA,eAGMz7B,GADF,yGACcC,gBACZL,EAAUxB,GAAU,CAAEwB,QAASmE,IAFjC,EAGoBuE,oBAAS,GAH7B,mBAGGnP,EAHH,KAGSuiC,EAHT,KASJ,OACE,oCACE,kBAACC,GAAA,EAAD,CAAQr9B,UAAWm9B,EAAeluB,SAChC,kBAAClN,GAAA,EAAD,CACEvhB,KAAK,QACL60B,QATgB,WACtB+nB,GAASviC,IASH4uB,gBAAe5uB,EACf6uB,aAAW,YACXtoB,UAAS,UAAKE,EAAQmkB,OAAb,YAAuBnkB,EAAQu7B,eAExC,8BAAOn7B,EAAUoD,IACjB,kBAAC,KAAD,CAAgB1D,UAAS,UAAKE,EAAQw7B,WAAb,YAA2BjiC,EAAOyG,EAAQ27B,WAAa,QAGpF,kBAACK,GAAA,EAAD,CAAUC,GAAI1iC,EAAM2iC,QAAQ,OAAOC,eAAa,GAC7Ch6B,IAAMC,SAAS/4B,IAAIwV,GAAU,SAAClI,GAAD,OAC5BwrB,IAAMH,aAAarrB,EAAO,CACxBspB,SACAF,WACAj1B,WACA62B,kBAYZi6B,GAAYt5B,aAAe,CACzBtC,QAAS,GACTwD,MAAO,kBAGMo4B,UCjFTp9B,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,CACJkB,QAAS,OACTE,eAAgB,SAChBI,UAAWxC,EAAMtb,QAAQ,GACzB4iB,aAActH,EAAMtb,WAEtBi7C,QAAS,CACP/H,SAAU53B,EAAMtb,QAAQ,IACxBwd,QAAS,OACTC,cAAe,SACfwY,WAAY,UAEdlY,KAAM,GACNnuB,OAAQ,CAAEkuB,UAAWxC,EAAMtb,WAC3BgN,MAAO,GACPkuC,UAAW,OAsCEC,GAnCG,SAAC,GAAmF,IAAjFvrD,EAAgF,EAAhFA,OAAQmuB,EAAwE,EAAxEA,KAAeiF,EAAyD,EAAlEnE,QAA0Bq8B,EAAwC,EAAxCA,UAAWluC,EAA6B,EAA7BA,MAAOzO,EAAsB,EAAtBA,MACvEsgB,GAD6F,wEACnFxB,GAAU,CAAEwB,QAASmE,KACrC,OACE,yBAAKrE,UAAS,UAAKE,EAAQvC,OACzB,yBAAKqC,UAAS,UAAKE,EAAQo8B,UACxBl9B,GACC,kBAACkF,GAAA,EAAD,CAAYzD,UAAU,OAAOb,UAAWE,EAAQd,KAAMxf,MAAOA,GAAS,WACnEwf,GAGJ/Q,GACC,kBAACiW,GAAA,EAAD,CAAY1D,QAAQ,QAAQ2D,cAAY,EAACk4B,MAAM,SAAS78C,MAAOA,GAAS,UAAWogB,UAAWE,EAAQ7R,OACnGA,GAGJkuC,GACC,kBAACj4B,GAAA,EAAD,CAAY1D,QAAQ,UAAU2D,cAAY,EAACk4B,MAAM,SAASz8B,UAAWE,EAAQq8B,WAC1EA,GAGJtrD,GAAU,yBAAK+uB,UAAWE,EAAQjvB,QAASA,M,WCxC9CyrD,GAAO,SAAC38B,GACZ,IAAMkQ,EAAkBghB,aAAkBlxB,GAE1C,OACE,kBAAC0V,GAAA,EAAD,CAAqB7tC,MAAOqoC,GAC1B,kBAAC,KAAD,iBAAclQ,EAAWkQ,MAgC/BysB,GAAKl6B,aAAe,CAClB95B,OAAQ,GACRiP,QAAS,KAGI+kD,UCrCTh+B,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyyB,IAAK,CACHpxC,OAAQ,QAIN2+C,GAAgB,SAAC58B,GAAD,OACpB,kBAAC6vB,GAAuB7vB,EACtB,kBAAC,KAAD,CAAagE,OAAO,IAAI+f,UAAQ,IAChC,kBAACrT,GAAA,EAAD,CAAgBC,UAAU,OAAO3M,OAAO,eAAeL,MAAM,qCAAqCogB,UAAQ,GACxG,kBAAC,GAAD,CAAmBpa,WAAW,YAKvBkzB,GAAkB,SAAC78B,GAC9B,IAAMG,EAAUxB,KAChB,OACE,kBAACkX,GAAA,EAAD,iBAAc7V,EAAd,CAAqBowB,SAAS,OAAOjwB,QAAS,CAAEkvB,IAAKlvB,EAAQkvB,OAC3D,kBAAC,GAAD,CAAWrrB,OAAO,SAASS,QAAM,IACjC,kBAAC,GAAD,CAAWT,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,gBAClB,kBAAC,KAAD,CAAWA,OAAO,iBAAiBL,MAAM,qCAAqCE,UAAU,IACxF,kBAACmoB,GAAA,EAAD,CAAWhoB,OAAO,YAAY1E,UAAU,YAKjC6wB,GAAoB,SAACnwB,GAChC,IAAMG,EAAUxB,KAChB,OACE,kBAACkX,GAAA,EAAD,iBAAc7V,EAAd,CAAqBowB,SAAS,OAAOjwB,QAAS,CAAEkvB,IAAKlvB,EAAQkvB,OAC3D,kBAAC,GAAD,CAAWrrB,OAAO,SAASS,QAAM,IACjC,kBAAC,GAAD,CAAWT,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,iBAAiBL,MAAM,qCAAqCE,UAAU,IACxF,kBAACmoB,GAAA,EAAD,CAAWhoB,OAAO,YAAY1E,UAAU,YAKxCw9B,GAAc,SAAC,GAA+B,IAA7BxM,EAA4B,EAA5BA,YAAgBtwB,EAAY,gCAE3CO,GADU5B,KACE6B,gBACZ8e,EAAWuI,GAAetnB,EAAU,aAAD,OAAcP,EAAM/0B,SAApB,SAAqC,CAAEswC,YAAa,IAAM+U,EAAa,CAC9G/vB,cAEIuwB,EAAmBxuB,IAAM0K,OAAO,MACtC,OACE,kBAAC,GAAD,iBAAUhN,EAAV,CAAiB1Y,QAAS,kBAAC,GAAD,CAAeslC,QAASkE,IAAsBxR,SAAUA,IAChF,kBAAC,GAAD,QAKNwd,GAAYr6B,aAAe,CACzB7qB,QAAS,IACTC,KAAM,CAAEf,MAAO,YAAagB,MAAO,QACnC85C,mBAAmB,EACnBtB,YAAa,CACXp/C,OAAQ6rC,GACR3zC,KAAM2zC,GACN51C,MAAM,EACNuhB,aAAa,EACb3D,UAAW,CACT5d,MAAM,EACN61C,WAAY,QAEdjuB,UAAW8tB,GACXG,WAAY,YAID8f,UC9ETC,GAAiB,SAACngC,EAAO/0B,GAC7B,MAAwB,kBAAVA,EAAqBA,EAAQ+0B,EAAMtb,QAAQzZ,GAAS,MAG9Dm1D,GAAgB,SAACpgC,EAAOvd,GAC5B,OAAO5T,MAAMwL,QAAQoI,GAAd,iBACOA,EAAK7V,KAAI,SAAC3B,GAAD,OAAWk1D,GAAengC,EAAO/0B,MAAQo1D,KAAK,MAD9D,KAEHF,GAAengC,EAAOvd,IAGtB69C,GAAe,SAACtgC,EAAOugC,EAAYn9B,GACvC,IAAMn4B,EAAQm4B,EAAMm9B,GACpB,GAAKt1D,EAAL,CAFiD,IAGzCohB,EAAgBphB,EAAhBohB,MAAO5J,EAASxX,EAATwX,KACf,OAAO,gBACJud,EAAMqC,YAAYC,GAAG,MAAQ,CAC5Bk+B,oBAAoB,UAAD,OAAYn0C,EAAZ,aAAsB+zC,GAAcpgC,EAAOvd,GAA3C,SAKnBsf,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,gBAAGtc,EAAH,EAAGA,QAAH,MAAkB,CACtBwd,QAAS,OACTs+B,oBAAqB,wCACrBC,QAASzgC,EAAMtb,QAAQA,KAEzB,UAAW,SAAC0e,GAAD,OAAWk9B,GAAatgC,EAAO,KAAMoD,IAChD,UAAW,SAACA,GAAD,OAAWk9B,GAAatgC,EAAO,KAAMoD,IAChD,UAAW,SAACA,GAAD,OAAWk9B,GAAatgC,EAAO,KAAMoD,IAChD,UAAW,SAACA,GAAD,OAAWk9B,GAAatgC,EAAO,KAAMoD,IAChD,UAAW,SAACA,GAAD,OAAWk9B,GAAatgC,EAAO,KAAMoD,QAkDnCs9B,GA/CG,SAAC,GAgBZ,IAAD,EAfJt+C,EAeI,EAfJA,SACSslB,EAcL,EAdJnE,QACWo9B,EAaP,EAbJt9B,UACAh1B,EAYI,EAZJA,SACAi1B,EAWI,EAXJA,SACAE,EAUI,EAVJA,OACA0B,EASI,EATJA,QACAkC,EAQI,EARJA,OAQI,IAPJw5B,UAOI,aANJC,UAMI,aALJC,UAKI,aAJJC,UAII,aAHJ53B,UAGI,aAFJzkB,eAEI,MAFM,EAEN,EACE6e,GADF,wIACYxB,GAAU,CAAEwB,QAASmE,EAAiBk5B,KAAIC,KAAIC,KAAIC,KAAI53B,KAAIzkB,aACpEmoB,EAAUj+B,KAAI40B,EAAQ4D,GAC5B,IAAK5D,IAAWqJ,IAAYA,EAAQpgC,OAAQ,OAAO,KACnD,IAAM42B,EAAYS,KAChBP,EAAQvC,MADkB,oBAGvBuC,EAAQ,YAAoB,IAAP4F,GAHE,eAIvB5F,EAAQ,YAAoB,IAAPu9B,GAJE,eAKvBv9B,EAAQ,YAAoB,IAAPs9B,GALE,eAMvBt9B,EAAQ,YAAoB,IAAPq9B,GANE,eAOvBr9B,EAAQ,YAAoB,IAAPw9B,GAPE,GAS1BJ,GAGF,OACE,yBAAKt9B,UAAWA,GACbwJ,EAAQjgC,KAAI,SAACggC,GAAD,OACXrH,uBAAaI,WAASmC,KAAK1lB,GAAW,CACpC1T,IAAKk+B,EAAOp0B,GACZnK,WACAi1B,WACAE,OAAQoJ,EACR1H,iB,gCCrDJnD,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,CACJ42B,SAAU53B,EAAMtb,QAAQ,IACxBmd,OAAQ,UACRrB,WAAY,uBAGdiF,KAAM,GAGNu7B,MAAO,CACL3/C,OAAQ,IACR6gB,QAAS,OACTyY,WAAY,SACZvY,eAAgB,SAChBzgB,SAAU,GACV+yB,OAAQ,WAEVhjB,MAAO,CACL+P,YAAa,QAEfntB,OAAQ,CACNkuB,WAAY,EACZ8E,cAAe,OAIbshB,GAAkB,SAAC5R,GAAD,OAAOA,EAAE4R,mBAE3B3nC,GAAkB,SAAC/T,EAAKgE,GAC5B,OAAOhE,EAAIgU,QAAQ,SAAW,EAAvB,UAA8BhU,EAA9B,YAAqCgE,GAAUhE,GAG3C0nC,GAAU,SAAC9mC,GACtB,OAAQA,GACN,IAAK,MACL,IAAK,OACL,IAAK,OACH,OAAO,kBAAC,GAAD,CAAUmgC,MAAO,CAAEhrB,MAAO,aAEnC,IAAK,MACH,OAAO,kBAAC,GAAD,CAASgrB,MAAO,CAAEhrB,MAAO,aAElC,IAAK,OACL,IAAK,MACH,OAAO,kBAAC,GAAD,CAAUgrB,MAAO,CAAEhrB,MAAO,aAEnC,IAAK,MACL,IAAK,OACL,IAAK,OACL,IAAK,OACH,OAAO,kBAAC,GAAD,CAAWgrB,MAAO,CAAEhrB,MAAO,aAEpC,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,OACH,OAAO,kBAAC,GAAD,CAASgrB,MAAO,CAAEhrB,MAAO,aAElC,IAAK,MACL,IAAK,MACL,IAAK,MACH,OAAO,kBAAC,KAAD,CAAWgrB,MAAO,CAAEhrB,MAAO,aAEpC,QACE,OAAO,kBAAC,GAAD,QAKPg+C,GAAW,SAAC,GAUZ,EATJ59B,UASK,IARIqE,EAQL,EARJnE,QACAC,EAOI,EAPJA,OACA09B,EAMI,EANJA,SACA95B,EAKI,EALJA,OACA1V,EAII,EAJJA,MACAsV,EAGI,EAHJA,SACAsQ,EAEI,EAFJA,QAGM/T,GADF,kGACYxB,GAAU,CAAEwB,QAASmE,KACrC,IAAKlE,EAAQ,OAAO,KAEpB,IAAMuD,EAAQn4B,KAAI40B,EAAQ9R,IAAUA,EAC9BxkB,EAAM0B,KAAI40B,EAAQ4D,GAAUj3B,EAAgBvB,KAAI40B,EAAQ4D,GAAUA,EAClE5jB,EAAeggB,EAAOhgB,aAAerT,EAAgBqzB,EAAOhgB,aAAeggB,EAAOt2B,IAClFY,EAAM01B,EAAO11B,KAAQ01B,EAAOv3B,SAAWu3B,EAAOv3B,QAAQ1B,KAAKkJ,MAAM,KAAK8U,MACtEka,EAAOmS,GAAQ9mC,GAEfqzD,EAAW,uCAAG,WAAOnqB,GAAP,SAAAjmC,EAAA,yDAClBimC,EAAE4R,mBACF,CAAC,MAAO,MAAO,OAAQ,OAAOhyC,SAAS9I,KAAQwpC,EAF7B,gBAGdA,IAHc,mCAIdnqC,OAJc,KAIF8T,GAJE,KAIc/T,EAJd,UAIyB+D,KAJzB,kDAIP48B,KAJO,eAI4C,UAJ5C,4CAAH,sDAOjB,OACE,kBAACpG,GAAA,EAAD,CAAMpE,UAAWE,EAAQkC,MACtB,CAAC,MAAO,MAAO,QAAQ7uB,SAAS9I,GAC/B,kBAACszD,GAAA,EAAD,CACE9pB,QAAS6pB,EACT99B,UAAWE,EAAQy9B,MACnBn0D,MAAOoU,GAAgBuC,EAAclZ,EAAU+E,IAC/CqiB,MAAOqV,IAGT,kBAACq6B,GAAA,EAAD,CAAW9pB,QAAS6pB,EAAa99B,UAAWE,EAAQy9B,MAAOtvC,MAAOqV,GAC/DrB,IAAMH,aAAa9C,EAAM,CAAE9gB,SAAU,aAG1C,kBAACy5C,GAAA,EAAD,KACG34B,EACD,kBAACkF,GAAA,EAAD,CAAY1D,QAAQ,UAAU4D,QAAM,EAACxE,UAAWE,EAAQ7R,OACrDqV,GAEH,kBAAC2V,GAAA,EAAD,CACEiP,aAAW,OACXlpC,KAAK,QACL4gB,UAAWE,EAAQjvB,OACnBgjC,QAASsR,GACT1kB,UAAWC,KACXC,GAAE,WAAM88B,EAAN,YAAkB19B,EAAOhrB,GAAzB,YAA+BwuB,IAEjC,kBAAC,KAAD,UAOVi6B,GAASp7B,aAAe,CACtBq7B,SAAU,OACVl6B,SAAU,QAGGi6B,UCRAI,GA1Ha,SAAC,GAAsD,IAApD79B,EAAmD,EAAnDA,OAAQ4D,EAA2C,EAA3CA,OAAQ/D,EAAmC,EAAnCA,UAAW6f,EAAwB,EAAxBA,QAAY9f,EAAY,0DA4D1EqG,EAASC,eA5DiE,EA6DlDuC,oBAAS,GA7DyC,mBA6DzEvwB,EA7DyE,KA6DhE6nC,EA7DgE,KA8D1Exc,EAAQmc,EAAO,0DAAwD9b,GAEvEx7B,EAAQ,GAad,GAZIs3C,GAAWA,EAAQz2C,OACrBy2C,EAAQz0C,SAAQ,SAACm1C,GACXh1C,KAAI40B,EAAQogB,IACdh4C,EAAM4zC,KAAN,MAAA5zC,EAAK,YAASgD,KAAI40B,EAAQogB,QAI1Bh1C,KAAI40B,EAAQ4D,IACdx7B,EAAM4zC,KAAN,MAAA5zC,EAAK,YAASgD,KAAI40B,EAAQ4D,MAIzBx7B,IAAUA,EAAMa,OAAQ,OAAO,KA2BpC,OACE,oCACE,kBAAC,KAAD,eACE6qC,QA5Bc,WAClBiM,GAAW,GACXQ,GAAc,CACZ,CACEF,QAASrgB,EAAOhrB,GAChBma,WAAY,WACT6Q,EAAO3Z,qBAAuB2Z,EAAO3Z,qBAAuB,IAAM,IAAI3b,UAAU,EAAG,MACnFs1B,EAAO/Q,MAAQ+Q,EAAO/Q,MAAQ,IAAM,KACpC+Q,EAAOj5B,KAAOi5B,EAAOj5B,KAAO,IAAM,KAElCM,QAAQ,KAAM,KACdqD,UAAU,EAAG,KAChBy1C,QAAS/3C,EAAMgB,KAAI,SAACZ,GAAD,OAAUA,EAAKqc,aAEnCrb,MAAK,SAACuF,GACP,IAAMxB,EAAItG,SAASq3C,cAAc,KACjC/wC,EAAEk9B,MAAM/L,QAAU,OAClBz3B,SAASiZ,KAAKq+B,YAAYhxC,GAC1BA,EAAEixC,KAAOzvC,EAAKrF,IACd6D,EAAEkxC,QACFsB,GAAW,GACX9Z,EAAO,oQAQLS,SAAUxuB,EACVqrB,MAAOA,EACP1D,UAAWA,EACX30B,IAAI,UAjIqB,SAAC,GAAD,EAC/B40B,SAD+B,EAE/BC,QAF+B,EAG/B4f,aAH+B,EAI/Bc,aAJ+B,EAK/BC,yBAL+B,EAM/BC,QAN+B,EAO/Bpd,MAP+B,EAQ/Bqd,SAR+B,EAS/B/1C,SAT+B,EAU/B22B,OAV+B,EAW/BgU,YAX+B,EAY/B/T,SAZ+B,EAa/BN,SAb+B,EAc/B0f,cAd+B,4MAkIrBrhB,CAAkBI,IAEtB,kBAACkhB,GAAD,S,mBCtIFviB,GAAYC,cAAW,WAC3B,MAAO,CACLs/B,MAAO,CACL9/B,SAAU,YAmHD+/B,GA9GQ,SAAC,GAAkD,IAAhD/9B,EAA+C,EAA/CA,OAAQ0f,EAAuC,EAAvCA,QAASrV,EAA8B,EAA9BA,KAAM4Y,EAAwB,EAAxBA,QACzCljB,GADiE,sDACvDxB,MADuD,EAE7CkK,qBAF6C,mBAEhE/6B,EAFgE,KAEzDswD,EAFyD,OAGvCv1B,mBAAS,GAH8B,mBAGhEU,EAHgE,KAGtDqwB,EAHsD,KAIvE7wB,qBAAU,WACRl7B,KAAiBjE,MAAK,SAACkpD,GAAD,OAAOsL,EAAStL,QACrC,CAAChlD,IAEJ,IAAMoS,EAAW8hB,mBACf,kBACE8d,EACGrrC,QAAO,SAACC,EAAKsvB,GAAN,4BAAqBtvB,GAArB,YAA6BlJ,KAAI40B,EAAQ4D,OAAU,IAC1Dr7B,OAAOsN,SACPtN,QAAO,gBAAG+B,EAAH,EAAGA,IAAH,MAAa,CAAC,MAAO,MAAO,OAAQ,OAAO8I,SAAS9I,QAChE,CAACo1C,IAGGue,EAAiBlxB,uBAAY,WACjC9sB,MAAMtT,EAAgBmT,EAASqpB,GAAUz/B,IAAnC,WAA6CgE,IAChDlE,MAAK,SAACyL,GAAD,OAAcA,EAASnM,UAC5BU,MAAK,SAACV,GACL,IAAMY,EAAME,IAAIC,gBAAgBf,GAC1BgF,EAAO7G,SAASq3C,cAAc,KACpCxwC,EAAK0wC,KAAO90C,EACZoE,EAAK2qB,SAAW3Y,EAASqpB,GAAUpiC,KACnCE,SAASiZ,KAAKq+B,YAAYzwC,GAC1BA,EAAK2wC,QACLx3C,SAASiZ,KAAKy+B,YAAY7wC,QAE7B,CAACq7B,EAAUrpB,IAERo+C,EAAcnxB,uBAAY,WAC9B9sB,MAAMtT,EAAgBmT,EAASqpB,GAAUz/B,IAAnC,WAA6CgE,IAChDlE,MAAK,SAACyL,GAAD,OAAcA,EAASnM,UAC5BU,MAAK,SAACV,GACL,IAAMY,EAAME,IAAIC,gBAAgBf,GAC1Bq1D,EAASl3D,SAASq3C,cAAc,UACtC6f,EAAOx9C,IAAMjX,EACby0D,EAAOjK,QAAS,EAChBjtD,SAASm3D,qBAAqB,QAAQ,GAAG7f,YAAY4f,GACrDA,EAAOE,QACPF,EAAOv9C,OAAS,WACdu9C,EAAOG,cAAcC,cAG1B,CAACp1B,EAAUrpB,IAEd,OAAKpS,EAGH,kBAAC46C,GAAA,EAAD,CAAQvoB,QAASA,EAASsK,KAAMA,EAAMiP,QAAS,kBAAM2J,GAAQ,KAC3D,kBAACuF,GAAA,EAAD,KACE,kBAAC,KAAD,CAAQjlB,MAAM,6CAAUuQ,QAASmqB,IACjC,kBAAC,KAAD,CAAQ16B,MAAM,qEAAcuQ,QAASoqB,KAEvC,kBAAC,YAAD,CACEM,mBAAmB,EACnB92B,SAAU,SAACjgC,GAAD,OAAW+xD,EAAY/xD,KA8BhCqY,EAAS1W,KAAI,WAAe4Y,GAAW,IAAvBtY,EAAsB,EAAtBA,IAAKY,EAAiB,EAAjBA,IACpB,OACE,yBAAKmgC,MAAO,CAAEZ,UAAW,UACtB,CAAC,MAAO,MAAO,QAAQz2B,SAAS9I,GAC/B,yBACEY,IAAK,WAAa8W,EAClBrB,IAAKhU,EAAgBjD,EAAhB,WAA0BgE,GAC/B+8B,MAAO,CAAE7sB,MAAO,QAASw2C,SAAU,OAAQvqB,UAAW,OAGxD3H,IAAMH,aAAaqP,GAAQ9mC,GAAM,CAC/BY,IAAK,WAAa8W,EAClByoB,MAAO,CAAE7sB,MAAO,MAAOC,OAAQ,eApD5B,MC5Df0gB,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCiC,UAAW,CACTC,QAAS,OACTC,cAAe,UAGjB8/B,MAAO,CACL//B,QAAS,OACTC,cAAe,MACfwY,WAAY,cAIVunB,GAAa,SAAC,GAAwB,IAAtB7L,EAAqB,EAArBA,KACd9yB,GADmC,yBACzBxB,MAMhB,OACE,kBAAC,KAAD,CAAOx3B,KAAM8rD,EAAK79C,GAAIhM,KAAK,aACxB,gBAAG+L,EAAH,EAAGA,MAAH,OACC,yBAAK8qB,UAAWE,EAAQ0+B,OACtB,kBAAC7U,GAAA,EAAD,iBAAc70C,EAAd,CAAqB2xB,UAAW/1B,GAAQi/B,IAAI,SAAU,OAAQ,mBAC9D,kBAACzL,GAAA,EAAD,KAAa0uB,EAAK9rD,WAOf43D,GAAiB,SAAC/+B,GAAW,IAChCI,EAAWJ,EAAXI,OACFD,EAAUxB,KAEhB,OAAKyB,EAEH,yBAAKH,UAAWE,EAAQtB,WACrBuB,EAAOnP,kBAAkBznB,KAAI,SAACypD,GAC7B,OAAO,kBAAC,GAAD,CAAYA,KAAMA,QAJX,MCvChBt0B,GAAYC,aAAW,CAC3BC,UAAW,CACT7gB,MAAO,OACPghD,UAAW,iBACX5/B,UAAW,MACXN,QAAS,OACTC,cAAe,MACfC,eAAgB,gBAIPigC,GAAc,SAACj/B,GAAW,IAC7BI,EAAWJ,EAAXI,OACFD,EAAUxB,KAEhB,OACE,yBAAKsB,UAAWE,EAAQtB,WACtB,yBAAKgM,MAAO,CAAExM,YAAa,KACzB,kBAACkG,GAAA,EAAD,gHACA,kBAACA,GAAA,EAAD,MAAcnE,EAAO8+B,kBAAoB,GAAK,Q,ibCnB/C,IAAMC,GAA2B3wD,IAAH,KAE2Iod,I,yRCFzK,IAAMwzC,GAA4B5wD,IAAH,KAE6Dod,ICY7F+S,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCiC,UAAW,GAMXylB,OAAQ,CACNjmB,YAAa,OA8GFghC,GAzGe,SAACr/B,GAC7B,IAAMG,EAAUxB,KACRyB,EAAWJ,EAAXI,OACFqG,EAAWC,eACXt3B,EAAU4hC,eAEV8c,EAAW3gB,uBACf,YAA2D,IF7B/Cx8B,EE6BTugB,EAAuD,EAAvDA,kBAAmBouC,EAAoC,EAApCA,oBAAwBpoC,EAAY,4DACxDuP,EAAS2Z,iBF9BCzvC,EEgCc,CACtB8G,MAAO,CAAErC,GAAIgrB,EAAOhrB,IACpB8b,kBAAmBA,EACnBouC,sBACAruC,kBAAmB9lB,OAAOC,KAAK8rB,GAAO1tB,KAAI,SAAC0U,GAAD,MAAQ,CAAE9I,GAAI8I,EAAGrW,MAAOqvB,EAAMhZ,QFnCvEtN,GAAiBlC,OAAO,CAC7BC,SAAUwwD,GACVvwD,UAAW+B,EACX9B,QAAS,SAACxE,GACRyE,MAAMzE,OEiCHT,MAAK,SAACQ,GACLq8B,EAASma,mBAPb,OASS,SAAChN,GACNtpC,QAAQC,IAAIqpC,GACZnN,EAASma,mBAXb,SAaW,kBAAMxxC,SAEnB,CAACq3B,EAAUrG,EAAOhrB,GAAIhG,IAGlBmwD,EAAgBpyB,uBAAY,WDlDrB,IAACx8B,ECmDZ81B,EAAS2Z,iBDnDGzvC,ECqDa,CAAE8G,MAAO,CAAErC,GAAIgrB,EAAOhrB,KDpD1CxE,GAAiBlC,OAAO,CAC7BC,SAAUywD,GACVxwD,UAAW+B,EACX9B,QAAS,SAACxE,GACRyE,MAAMzE,OCiDLT,MAAK,SAACQ,GACLq8B,EAASma,mBAFb,OAIS,SAAChN,GACNtpC,QAAQC,IAAIqpC,GACZnN,EAASma,mBANb,SAQW,kBAAMxxC,SAChB,CAACq3B,EAAUr3B,EAASgxB,EAAOhrB,KAE9B,IAAKgrB,IAAWA,EAAOnP,oBAAsBmP,EAAOnP,kBAAkB5nB,OAAQ,OAAO,KACrF,IAAMsjD,EAAgB,CACpBz7B,kBAAmBkP,EAAOlP,kBAC1BouC,oBAAqBl/B,EAAOk/B,qBAI9B,OAFAl/B,EAAOnP,kBAAkB5lB,SAAQ,SAAC4nD,GAAD,OAAWtG,EAAcsG,EAAK79C,IAAM69C,EAAK4L,SAGxE,kBAAC,GAAgB7+B,EACf,kBAAC,KAAD,CACE8tB,SAAUA,EACVnB,cAAeA,EACf5W,OAAQ,YAAoE,IAAjE8K,EAAgE,EAAhEA,aAAcG,EAAkD,EAAlDA,SAAiB0M,GAAiC,EAAxCC,MAAwC,EAAjCD,YAAiC,EAArBnJ,KAAqB,wEACzE,OACE,0BAAMtkB,UAAWE,EAAQtB,UAAWivB,SAAUjN,GAC5C,kBAACxc,GAAA,EAAD,KACE,kBAACwB,GAAA,EAAD,KACE,kBAAC,GAAD,CAAgBzF,OAAQA,IACxB,kBAAC,KAAD,CAAOj5B,KAAK,wBACT,YAAsB,IAAnBgO,EAAkB,EAAlBA,MAAOizB,EAAW,EAAXA,KACT,OACE,kBAACE,GAAA,EAAD,iBACMnzB,EADN,CAEE9K,MAAO+9B,EAAK/9B,OAAS+9B,EAAKC,QAC1BV,WAAYS,EAAKC,QAAUD,EAAK/9B,MAAQ,GACxCw2B,QAAS,WACTgK,MAAO,CAAE3G,aAAc,GACvBuM,WAAW,EACX9M,MAAO,yDACPmD,UAAW/1B,GAAQi/B,IAAI,SAAU,OAAQ,sBAKjD,kBAAC,GAAD,CAAa5P,OAAQA,KAEtBrvB,GAAQi/B,IAAI,SAAU,OAAQ,iBAC7B,kBAACgoB,GAAA,EAAD,KACE,yBAAKntB,MAAO,CAAE/L,QAAS,OAAQC,cAAe,QAC5C,kBAAC6B,GAAA,EAAD,CACEkG,SAAUka,GAAY0M,EACtBztB,UAAWE,EAAQmkB,OACnBl7C,KAAM,SACNy3B,QAAQ,YACRhhB,MAAM,WALR,sEASA,kBAAC+gB,GAAA,EAAD,CAAQX,UAAWE,EAAQmkB,OAAQpQ,QAASqrB,EAAe1+B,QAAQ,YAAYhhB,MAAM,WAArF,6DCtFhB8e,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvC1uB,KAAM,CACJ2R,MAAO+c,EAAME,QAAQ5uB,KAAKsgB,UAIxBgxC,GAAc,SAAC,GAA2C,IAAzCt/B,EAAwC,EAAxCA,SAAU/wB,EAA8B,EAA9BA,KAAMyzB,EAAwB,EAAxBA,QAAwB,8CAC7D,OACE,kBAAC0S,GAAA,EAAD,KACE,kBAAC,GAAD,CAAqBpV,SAAUA,EAAUE,OAAQjxB,EAAM60B,OAAO,SAC9D,kBAAC,GAAD,CAAqB9D,SAAUA,EAAUE,OAAQjxB,EAAM60B,OAAO,UAC9D,kBAAC,GAAD,CAAqB9D,SAAUA,EAAUE,OAAQjxB,EAAM2wC,QAAS,CAAC,OAAQ,WACxEld,GAAW,kBAAC68B,GAAA,EAAD,CAAYv/B,SAAUA,EAAUE,OAAQjxB,MAKpDuwD,GAAe,SAAC1/B,GACJrB,KAAhB,IACMghC,EAAW3/B,EAAMI,SAAmC,cAAxBJ,EAAMI,OAAOttB,QAA0BktB,EAAMI,OAAOh2B,QAFxD,EAGNy+B,oBAAS,GAHH,mBAGvB4B,EAHuB,KAGjB4Y,EAHiB,KAK9B,OACE,kBAACvd,GAAA,EAAD,CAAMjH,WAAS,EAACvd,QAAS,GACvB,kBAACwkB,GAAA,EAAD,CAAM5wB,MAAI,EAAC6wB,GAAI,GAAIy3B,GAAI,GACrB,kBAAC,GAAD,CAAgBp9B,OAAQJ,EAAMI,OAAQ0f,QAAS,CAAC,QAAS,QAASrV,KAAMA,EAAM4Y,QAASA,IACvF,kBAAC,GAAD,eAAW1f,MAAM,QAAW3D,IAC5B,kBAAC,GAAD,eAAe2D,MAAM,YAAe3D,IACnCjvB,GAAQi/B,IAAI,SAAU,OAAQ,sBAC7B,kBAAC,GAAD,eAAuBrM,MAAM,gBAAmB3D,IAEjD2/B,GAAY,kBAAC,GAAD,eAAah8B,MAAM,UAAa3D,KAE/C,kBAAC8F,GAAA,EAAD,CAAM5wB,MAAI,EAAC6wB,GAAI,GAAIy3B,GAAI,GACrB,kBAAC,GAAD,eAAY75B,MAAM,UAAa3D,GAC5BjvB,GAAQi/B,IAAI,SAAU,SAAU,SAC/B,kBAAC+U,GAAA,EAAD,CAAgB/gB,OAAO,mBAAmB2M,UAAU,qBAAqBziC,KAAK,QAC5E,kBAAC,KAAD,CAAW81B,OAAO,UAGrBjzB,GAAQi/B,IAAI,SAAU,cAAe,SACpC,kBAAC+U,GAAA,EAAD,CACE/gB,OAAO,cACPnsB,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B64B,UAAU,eACVziC,KAAK,QAEL,kBAAC,KAAD,CAAW81B,OAAO,UAGrBjzB,GAAQi/B,IAAI,SAAU,SAAU,WAC/B,kBAAC+U,GAAA,EAAD,CAAgB/gB,OAAO,SAAS2M,UAAU,SAASziC,KAAK,QACtD,kBAAC,KAAD,CAAW81B,OAAO,sBAGrBjzB,GAAQi/B,IAAI,SAAU,SAAU,eAAiB,kBAAC,KAAD,CAAWhM,OAAO,eACnEjzB,GAAQi/B,IAAI,SAAU,SAAU,SAAW,kBAAC,GAAD,CAAWhM,OAAO,0BAEhE,kBAAC,GAAD,eAAYL,MAAM,SAAY3D,GAC3BjvB,GAAQi/B,IAAI,SAAU,OAAQ,cAC7B,kBAAC,GAAD,CAAahM,OAAO,YAAY2M,UAAU,QACxC,kBAAC,KAAD,CAAW3M,OAAO,UAGrBjzB,GAAQi/B,IAAI,SAAU,OAAQ,gBAC7B,kBAAC,GAAD,CAAahM,OAAO,cAAc2M,UAAU,QAC1C,kBAAC,KAAD,CAAW3M,OAAO,UAGrBjzB,GAAQi/B,IAAI,SAAU,OAAQ,mBAC7B,kBAAC,GAAD,CAAahM,OAAO,iBAAiB2M,UAAU,QAC7C,kBAAC,KAAD,CAAW3M,OAAO,UAGrBjzB,GAAQi/B,IAAI,SAAU,OAAQ,eAC7B,kBAAC,GAAD,CAAahM,OAAO,aAAa2M,UAAU,QACzC,kBAAC,KAAD,CAAW3M,OAAO,UAGrBjzB,GAAQi/B,IAAI,SAAU,OAAQ,kBAC7B,kBAAC,GAAD,CAAahM,OAAO,gBAAgB2M,UAAU,QAC5C,kBAAC,KAAD,CAAW3M,OAAO,UAGrBjzB,GAAQi/B,IAAI,SAAU,OAAQ,aAC7B,kBAAC,GAAD,CAAahM,OAAO,WAAW2M,UAAU,QACvC,kBAAC,KAAD,CAAW3M,OAAO,WAIvBjzB,GAAQi/B,IAAI,SAAU,OAAQ,SAC7B,kBAAC,GAAD,eAAarM,MAAM,OAAO7C,UAAW,OAAWd,GAC9C,kBAAC,GAAD,CAAWgE,OAAO,OAAO+B,GAAI,CAAE9c,MAAO,YAAa5J,KAAM,CAAC,GAAI,SAC5D,kBAAC,GAAD,CAAU2kB,OAAO,MAAM1V,MAAM,OAAOomC,SAAO,EAACxgB,QAAS,kBAAMmP,GAAQ,QAIxEtyC,GAAQi/B,IAAI,SAAU,OAAQ,UAC7B,kBAAC,GAAD,eAAarM,MAAM,QAAQ7C,UAAW,OAAWd,GAC/C,kBAAC,GAAD,CAAWgE,OAAO,QAAQ+B,GAAI,CAAE9c,MAAO,YAAa5J,KAAM,CAAC,GAAI,SAC7D,kBAAC,GAAD,CAAU2kB,OAAO,MAAM1V,MAAM,OAAOomC,SAAO,EAACxgB,QAAS,kBAAMmP,GAAQ,WA0ElEuc,GAjEE,SAAC5/B,GAChB,IAAMkQ,EAAkB4nB,aAAkB93B,GAEpCg8B,GADUr9B,KACO2D,IAAM0K,OAAO,OAC9B6yB,EAAoBv9B,IAAM0K,OAAO,MACjCmD,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAC7DzoB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1C3C,EAAU3sB,QACd+pB,EAAM4C,UACHuN,KACA,CAAC,OAAQ,eAAgB,UAAU38B,SAAS08B,EAAgB9P,QAAU8P,EAAgB9P,OAAOttB,SAC1F,CAAC,WAAY,QAAS,cAAcU,SAASlB,EAAKY,OAChDg9B,EAAgB9P,QAChBnqB,QAAQi6B,EAAgB9P,OAAOla,aAC/BgqB,EAAgB9P,OAAOla,WAAW9Q,OACjC9C,GAAQ,IAAI8C,KAIvB,OACE,kBAAC,GAAD,iBACM4qB,EACAkQ,EAFN,CAGE5hB,MAAO,kBAAC,GAAmB0R,GAC3BkB,QAAS,kBAAC,GAAD,MACT0B,QAASA,IAERuN,GAAa,kBAAC,GAAD,MAEd,kBAAC,GAAD,MAEA,kBAAC,GAAD,CAAWj/B,OAAQ,yBAAKk2B,IAAK40B,MAE7B,kBAAC,GAAD,CAAaA,eAAgBA,GAC3B,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWh4B,OAAO,OACjBjzB,GAAQi/B,IAAI,SAAU,OAAQ,iBAC7B,kBAAC,GAAD,CAAkBhM,OAAO,eAAe2M,UAAU,OAAO/M,SAAS,QAChE,kBAACk8B,GAAA,EAAD,CAAW97B,OAAO,YAMzBjzB,GAAQi/B,IAAI,SAAU,OAAQ,YAAc,kBAAC,GAAD,CAAW9+B,OAAQ,yBAAKk2B,IAAKy4B,MAEzE9uD,GAAQi/B,IAAI,SAAU,OAAQ,YAC7B,kBAAC,GAAD,CAAagsB,eAAgB6D,EAAmBl8B,MAAM,0BACpD,kBAAC,GAAD,KACE,kBAAC,KAAD,CACEgN,UAAU,UACV14B,OAAO,OACPJ,KAAM,CAAEf,MAAO,YAAagB,MAAO,QACnCF,QAAS,GACTF,WAAY,kBAACo+B,EAAA,EAAD,OAEZ,kBAAC,GAAD,WClMRiqB,GAAW9uB,K,oDCDXtS,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCojC,MAAO,CACLniC,gBAAiB,UACjBH,UAAU,aAAD,OAAed,EAAME,QAAQM,WAAW8gC,QAEnDjX,IAAK,CACHhpC,OAAQ,EACR+f,QAAS,EACTI,SAAU,OAIR6hC,GAAc,SAAC,GAAoC,IAAlCjhD,EAAiC,EAAjCA,SAAUohB,EAAuB,EAAvBA,OAAWJ,EAAY,sCAChDG,EAAUxB,KACVyG,EAAcC,cAAY,SAACC,GAAD,OAAWA,EAAMF,cAAaG,MAC9D,IAAKnF,EAAQ,OAAO,KACpB,IAAMoF,EAAWJ,EAAY5xB,SAAS4sB,EAAOhrB,IAE7C,OACE,kBAAC8qD,GAAA,EAAD,CACE7G,aAAc,CAAEC,SAAU,SAAUC,WAAY,SAChDp5B,QAAS,CAAE6/B,MAAO7/B,EAAQ6/B,MAAO/Y,IAAK9mB,EAAQ8mB,KAC9CkZ,WAAY36B,EACZ3E,QAAQ,OAEPyB,IAAMH,aAAanjB,EAAnB,aACCohB,UACGJ,MAMXigC,GAAYx9B,aAAe,CACzBY,UAAU,GAGG48B,UCfTthC,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyyB,IAAK,CACHpxC,OAAQ,QAINuxC,GAAe5wB,cAAW,SAAChC,GAAD,MAAY,CAC1CiC,UAAW,CACTqF,aAAc,WAIZk8B,GAAwB,SAACpgC,GAAD,OAC5B,oCACGjvB,GAAQi/B,IAAI,SAAU,SAAW,kBAAC,GAAqBhQ,GACxD,kBAAC2vB,GAAA,EAAqB3vB,KAIpBqgC,GAAc,SAACx4D,GAAW,IAAD,EACHoJ,GAAc,UAAW,QAA3C++C,EADqB,EACrBA,QADqB,EACZ98C,KACjB,OAAO88C,GAAUA,EAAQx8C,SAAS3L,EAAMV,OAGpCm5D,GAAa,SAACtgC,GAClB,IAAMG,EAAUqvB,KAChB,OACE,kBAACK,GAAuB7vB,EACtB,kBAAC,KAAD,CAAagE,OAAO,IAAI+f,UAAQ,IAChC,kBAAC,GAAD,CAAW/f,OAAO,OAAOqF,KAAK,WAAW1gC,OAAQ03D,GAAa78B,UAAU,gBAAgBugB,UAAQ,IAChG,kBAACrT,GAAA,EAAD,CACE1M,OAAO,cACP2M,UAAU,SACVhN,MAAM,+BACN/rB,QAAS,GACT4rB,UAAU,iBAEV,kBAAC,GAAD,CACEmG,WAAW,mBACX42B,iBAAkBpgC,EAClB2M,eAAgB,kBAAC,GAAD,WAOb+vB,GAAkB,SAAC78B,GAC9B,IAAMG,EAAUxB,KAEhB,OACE,kBAACkX,GAAA,EAAD,iBAAc7V,EAAd,CAAqBowB,SAAS,OAAOjwB,QAAS,CAAEkvB,IAAKlvB,EAAQkvB,OAC3D,kBAAC,GAAD,KACE,kBAAC,GAAD,CAAahwC,KAAK,WAEpB,kBAAC,KAAD,CAAW2kB,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,gBAClB,kBAAC,GAAD,CAAYA,OAAO,UACnB,kBAAC,KAAD,CAAWA,OAAO,UAClB,kBAAC,GAAD,CAAWA,OAAO,SAClB,kBAACgoB,GAAA,EAAD,CAAWhoB,OAAO,YAAY1E,UAAU,YAKxCkhC,GAAW,SAAC,GAA4C,IAA1CzgB,EAAyC,EAAzCA,aAAcqD,EAA2B,EAA3BA,WAAepjB,EAAY,8CACrDO,EAAYC,eADyC,EAErCqI,mBAAS,SAF4B,mBAEpD2G,EAFoD,KAE/CixB,EAF+C,KAW3D,OACE,oCACE,kBAACC,GAAA,EAAD,CAAM74D,MAAO2nC,EAAK1H,SATD,SAAC6F,EAAO9lC,GACb,UAAVA,GACFu7C,EAAW,2BAAKrD,GAAN,IAAoBiQ,QAAS,CAAC,aAAc,UAAW,WAAY,cAAe,kBAChF,WAAVnoD,GAAoBu7C,EAAW,2BAAKrD,GAAN,IAAoBiQ,QAAS,CAAC,aAAc,QAAS,cACvFyQ,EAAO54D,IAKqCyoC,UAAQ,GAChD,kBAACqwB,GAAA,EAAD,CAAKh9B,MAAOpD,EAAU,mCAAoC14B,MAAM,UAChE,kBAAC84D,GAAA,EAAD,CAAKh9B,MAAOpD,EAAU,oCAAqC14B,MAAM,YAEnE,kBAACyyD,GAAA,EAAD,MACS,UAAR9qB,GAAmB,kBAAC,GAAoBxP,GAChC,WAARwP,GAAoB,kBAAC,GAAoBxP,KAK1C4gC,GAAW,SAAC,GAA+B,IAA7BtQ,EAA4B,EAA5BA,YAAgBtwB,EAAY,gCACxCO,EAAYC,eAEZ8e,GADU3gB,KACCkpB,GAAetnB,EAAU,aAAD,OAAcP,EAAM/0B,SAApB,SAAqC,CAAEswC,YAAa,IAAM+U,EAAa,CAC9G/vB,eAEIuwB,EAAmBxuB,IAAM0K,OAAO,MAEtC,OACE,kBAAC,GAAD,iBACMhN,EADN,CAEE1Y,QAAS,kBAAC,GAAD,CAAYslC,QAASkE,IAC9Bc,kBAAmB,kBAAC,GAAD,MACnBtS,SAAUA,IAEV,kBAAC,GAAD,QAKNshB,GAASn+B,aAAe,CACtB0uB,oBAAqB,CAAEnB,QAAS,CAAC,aAAc,UAAW,WAAY,cAAe,gBACrFp4C,QAAS,IACTC,KAAM,CAAEf,MAAO,YAAagB,MAAO,QACnCw4C,YAAa,CACXl7C,IAAI,EACJjO,MAAM,EACNuhB,aAAa,EACbqG,UAAW8tB,GACX93B,UAAW,CACT5d,MAAM,EACN61C,WAAY,QAEd9tB,UAAW2tB,KACX91B,OAAO,EACPC,OAAO,EACP9T,KAAM6pC,GACNr2B,QAAQ,EACRs2B,WAAY,SAID4jB,UCjIAC,GAzBA,SAAC7gC,GAAD,OACb,kBAACg2B,GAAA,EAAD,CAAuBnuD,MAAK,eAAOm4B,IACjC,kBAACi2B,GAAA,EAAD,iBAAgBj2B,EAAW81B,aAAoB91B,OC4BpC8gC,GA7BK,SAAC,GAAoC,IAAlCn4D,EAAiC,EAAjCA,OAAQqW,EAAyB,EAAzBA,SAAaghB,EAAY,sCAChDukB,EAAOiO,eACP3kC,EAAWmyB,eAoBjB,OAlBAqO,cAAqB,WACnB,IAAMl7B,EAAUoxB,EAAK6Q,WAAWp/C,OAAOmd,QACnCA,GACFtF,EACGna,QAAQ,SAAU,CACjBmE,KAAM,CAAEC,MAAO,MAAOhB,MAAO,QAC7BY,WAAY,CAAEC,KAAM,EAAGC,QAAS,KAChCjP,WAEDiB,MAAK,SAACm3D,GACLxc,EAAKqO,OACH,UACAz/B,EAAQxqB,QAAO,SAACd,GAAD,OAAWk5D,EAAY5xD,KAAKga,MAAK,SAACzC,GAAD,OAAYA,EAAOtR,KAAOvN,cAIjF,CAACc,IAGF,kBAACioC,GAAA,EAAD,iBAAyB5Q,EAAzB,CAAgCr3B,OAAQA,IACrCqW,ICDD2f,GAAYC,aAAW,CAC3B2Q,oBAAqB,CACnBnQ,UAAW,EACX8E,aAAc,KAIZm8B,GAAc,SAACx4D,GAAW,IACtBmoD,EAAY/+C,GAAc,SAAU,QAApC++C,QACR,OAAOA,GAAUA,EAAQx8C,SAAS3L,EAAMV,OAGpCgoC,GAAe,CAAChY,eAAYiY,aAAU,IACtCC,GAAgB,CAAClY,eAAYpQ,gBAC7Bi6C,GAAe,CAAC7pC,gBAChB4P,GAAgB,CAAC5P,gBACjB8pC,GAAmB,CAAC9pC,gBAoEX+pC,GAlEI,SAAClhC,GAClB,IAAMkQ,EAAkB4lB,aAAoB91B,GACtCG,EAAUxB,KACV4B,EAAYC,eACZluB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpS,EAAW7gB,GAAQA,EAAK6gB,SAAY,GAE1C,OACE,kBAAC,GAAD,iBAAY6M,EAAWkQ,GACrB,kBAACE,GAAA,EAAD,CAAY7O,SAAS,OAAOjL,KAAM,kBAAC+Z,GAAA,EAAD,CAAgBC,UAAQ,KACxD,kBAACC,GAAA,EAAD,CAAS5M,MAAOpD,EAAU,+BACxB,kBAACiQ,GAAA,EAAD,CAAWxM,OAAO,OAAOgE,SAAUmH,GAAc5Q,WAAS,IAC1D,kBAACiS,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAClS,WAAS,IACnD,kBAACmS,GAAA,EAAD,CACE1M,OAAO,cACPnsB,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B64B,UAAU,eACVhoC,OAAQ,CAAEwqB,QAASA,EAAQ3pB,KAAI,SAAC+H,GAAD,MAAQ,CAAE6D,GAAI7D,OAC7CoyB,MAAM,oCACNH,UAAU,gBACVwE,SAAU,CAAC7Q,iBAEX,kBAAC,GAAD,CAAmBwS,WAAW,UAEhC,kBAAC,GAAD,CAAW3F,OAAO,OAAOqF,KAAK,WAAW1gC,OAAQ03D,GAAar4B,SAAUg5B,KACxE,kBAAC,GAAD,CAAYh9B,OAAO,QAAQgE,SAAUjB,GAAekB,WAAY,CAAE4I,aAAc,kBAChF,kBAACL,GAAA,EAAD,CACExM,OAAO,QACP56B,KAAK,QACL4+B,SAAUqH,GACVpH,WAAY,CAAE4I,aAAc,kBAE9B,kBAACC,GAAA,EAAD,CAAe9M,OAAO,WAAWgE,SAAUi5B,GAAkBh5B,WAAY,CAAEk5B,aAAc,mBAE3F,kBAAC5wB,GAAA,EAAD,CAAS5M,MAAOpD,EAAU,iCACxB,kBAAC41B,GAAA,EAAD,MACG,YAA4B,IAAzBC,EAAwB,EAAxBA,SACIztD,GADoB,6BACXytD,EAASn2C,YAAc,CAAEwyC,eAAgB,CAAC,CAAEr9C,GAAIghD,EAASn2C,eAAmB,IAE3F,OACE,kBAAC,GAAD,CACE+jB,OAAO,UACP2M,UAAU,SACVhN,MAAM,gCACNpF,WAAS,EACT51B,OAAQA,EACRw3B,QAAS,CAAEtB,UAAWsB,EAAQoP,sBAE9B,kBAACM,GAAA,EAAD,CAAwBlG,WAAW,yBAK3C,kBAAC,GAAD,CAAgB3F,OAAO,wBAAwBqF,KAAK,uBAAuB9K,WAAS,IACpF,kBAAC,GAAD,CAAgByF,OAAO,YAAYqF,KAAK,WAAW9K,WAAS,KAE9D,kBAACgS,GAAA,EAAD,CAAS5M,MAAOpD,EAAU,uCAExB,kBAAC,GAAD,CAAgByD,OAAO,sBAAsBqF,KAAK,sBAAsB9K,WAAS,Q,0CChGrFI,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCwkC,UAAW,CACTvhD,MAAO+c,EAAME,QAAQzyB,MAAMmkB,KAC3B6yC,YAAajgB,gBAAKxkB,EAAME,QAAQzyB,MAAMmkB,KAAM,IAC5C,UAAW,CACTqP,gBAAiBujB,gBAAKxkB,EAAME,QAAQzyB,MAAMmkB,KAAM,KAChD6yC,YAAazkC,EAAME,QAAQzyB,MAAMmkB,KACjC,uBAAwB,CACtBqP,gBAAiB,iBAIvByjC,YAAa,CACXzhD,MAAO+c,EAAME,QAAQC,QAAQvO,KAC7B6yC,YAAazkC,EAAME,QAAQC,QAAQC,MACnC,UAAW,CACTa,gBAAiBujB,gBAAKxkB,EAAME,QAAQC,QAAQvO,KAAM,KAClD6yC,YAAazkC,EAAME,QAAQC,QAAQvO,KACnC,uBAAwB,CACtBqP,gBAAiB,qBAmDV0jC,GA7CG,SAAC,GAA0D,EAAxDrhC,SAAyD,IAA/CE,EAA8C,EAA9CA,OAA8BH,GAAgB,EAAtCsB,SAAsC,EAAhBtB,WACrDE,EAAUxB,KACV0H,EAASC,eAF4D,EAK9BF,aAAU,OAAQhG,EAAOhrB,GAAhB,YAAC,eAAwBgrB,GAAzB,IAAiChZ,QAAQ,IAAQgZ,EAAQ,CAC7GyB,UAAU,EACVkB,UAAW,YAAc,EAAX5zB,KAEZkY,GAAa,CAAEjS,GAAIgrB,EAAOnZ,KAAMG,QAAQ,IACxCif,EAAO,8BAA+B,OAAQ,IAAI,IAEpDvD,UAAW,SAACz4B,GAAD,OAAWg8B,EAAO,UAAD,OAAWh8B,EAAMiF,SAAW,cAZiB,mBAKpEkyD,EALoE,KAK9CC,EAL8C,KAKvDnpD,QALuD,EAc1B8tB,aAAU,OAAQhG,EAAOhrB,GAAhB,YAAC,eAAwBgrB,GAAzB,IAAiChZ,QAAQ,IAASgZ,EAAQ,CAClHyB,UAAU,EACVkB,UAAW,YAAc,EAAX5zB,KAEZkY,GAAa,CAAEjS,GAAIgrB,EAAOnZ,KAAMG,QAAQ,IACxCif,EAAO,gCAAiC,OAAQ,IAAI,IAEtDvD,UAAW,SAACz4B,GAAD,OAAWg8B,EAAO,UAAD,OAAWh8B,EAAMiF,SAAW,cArBiB,mBAcpEoyD,EAdoE,KAc5CC,EAd4C,KAcrDrpD,QAUtB,OAAO8nB,EAAOhZ,OACZ,kBAAC,KAAD,CACEuc,MAAM,kBACNuQ,QAASwtB,EACT56B,SAAU66B,EACV1hC,UAAS,UAAKE,EAAQmhC,YAAb,YAA4BrhC,IAErC,kBAAC,KAAD,OAGF,kBAAC,KAAD,CACE0D,MAAM,gBACNuQ,QAASstB,EACT16B,SAAU26B,EACVxhC,UAAS,UAAKE,EAAQihC,UAAb,YAA0BnhC,IAEnC,kBAAC,KAAD,QCpCAogC,GAAc,SAACx4D,GAAW,IAAD,EACHoJ,GAAc,SAAU,QAA1C++C,EADqB,EACrBA,QADqB,EACZ98C,KACjB,OAAO88C,GAAUA,EAAQx8C,SAAS3L,EAAMV,OAGpCgoC,GAAe,CAAChY,eAAYiY,aAAU,IACtCC,GAAgB,CAACtoB,gBACjBi6C,GAAe,CAAC7pC,gBAChB4P,GAAgB,CAAC5P,gBAEjBwH,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvC6C,QAAS,CACPX,QAAS,OACT,yBAA0B,CACxBT,YAAazB,EAAMtb,QAAQ,KAG/Bq0C,OAAQ,CACNh2B,WAAY,OACZ,eAAgB,CACdA,WAAY,IAGhB4P,oBAAqB,CACnBnQ,UAAW,EACX8E,aAAc,GAEhBxO,SAAU,CACRoJ,QAAS,OACTC,cAAe,WAIb6iC,GAAc,SAAC5hC,GACnB,IAAMmQ,EAAYnQ,EAAMI,OAAOrF,QACzBoF,EAAUxB,KAChB,OACE,kBAACoR,GAAA,EAAD,iBAAa/P,EAAb,CAAoBG,QAAS,CAAEV,QAASU,EAAQV,WAC7C0Q,GAAap/B,GAAQi/B,IAAI,UAAW,SAAW,kBAAC,GAAD,OAC9CG,GAAap/B,GAAQi/B,IAAI,SAAU,SAAW,kBAACrJ,GAAA,EAAD,OAC9CwJ,GAAap/B,GAAQi/B,IAAI,SAAU,SACnC,kBAACrJ,GAAA,EAAD,CAAYpF,UAAU,EAAOoC,MAAM,8BAA8Bsd,eAAe,EAAOpgB,QAAQ,aAEhG9vB,GAAQi/B,IAAI,MAAO,SAAW,kBAAC,GAAD,CAAWzO,SAAS,OAAOtB,UAAWE,EAAQw1B,UAC3ExlB,GAAap/B,GAAQi/B,IAAI,SAAU,SAAW,kBAAC,GAAD,CAAc/P,UAAWE,EAAQw1B,OAAQp0B,SAAS,SACjG4O,GAAap/B,GAAQi/B,IAAI,SAAU,SAClC,kBAAC,KAAD,CAAcnO,UAAQ,EAAC5B,UAAWE,EAAQw1B,OAAQt2B,KAAM,kBAAC,KAAD,UAqGjDwiC,GA/FE,SAAC7hC,GAChB,IAAMkQ,EAAkB9M,aAAkBpD,GACpCmQ,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAC7DoF,EAAUxB,KACV4B,EAAYC,eACZluB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpS,EAAW7gB,GAAQA,EAAK6gB,SAAY,GAE1C,OACE,kBAAC,GAAD,eAAM7E,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GACvE,kBAAC,GAAD,MACA,kBAAC,GAAD,KACE,kBAACE,GAAA,EAAD,CAAY3Q,QAAS,kBAAC,GAAD,MAAiB8B,SAAS,OAAOjL,KAAM,kBAAC+Z,GAAA,EAAD,CAAgBC,UAAQ,KAClF,kBAACC,GAAA,EAAD,CAAS5M,MAAOpD,EAAU,+BACvBxvB,GAAQi/B,IAAI,SAAU,OAAQ,SAC7B,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,OAAOgE,SAAUmH,GAAcrI,SAAUqJ,EAAW5R,WAAS,IAEhFxtB,GAAQi/B,IAAI,SAAU,OAAQ,gBAC7B,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAC3J,SAAUqJ,EAAW5R,WAAS,IAE1E,kBAACmS,GAAA,EAAD,CACE1M,OAAO,cACPnsB,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B64B,UAAU,eACVhN,MAAM,oCACNh7B,OAAQ,CAAEwqB,QAASA,EAAQ3pB,KAAI,SAAC+H,GAAD,MAAQ,CAAE6D,GAAI7D,OAC7CiyB,UAAU,gBACVwE,SAAU,CAAC7Q,iBAEX,kBAAC,GAAD,CAAmBwS,WAAW,UAE/B54B,GAAQi/B,IAAI,SAAU,OAAQ,SAC7B,kBAAC,GAAD,CACEhM,OAAO,OACPqF,KAAK,WACL1gC,OAAQ03D,GACRr4B,SAAUg5B,GACVl6B,SAAUqJ,IAGbp/B,GAAQi/B,IAAI,SAAU,OAAQ,UAC7B,kBAAC,GAAD,CACEhM,OAAO,QACPgE,SAAUjB,GACVkB,WAAY,CAAE4I,aAAc,gBAC5B/J,SAAUqJ,IAGbp/B,GAAQi/B,IAAI,SAAU,OAAQ,UAC7B,kBAACQ,GAAA,EAAD,CACExM,OAAO,QACP56B,KAAK,QACL4+B,SAAUqH,GACVpH,WAAY,CAAE4I,aAAc,gBAC5B/J,SAAUqJ,IAGbp/B,GAAQi/B,IAAI,SAAU,OAAQ,aAC7B,kBAACc,GAAA,EAAD,CAAe9M,OAAO,WAAWiE,WAAY,CAAEk5B,aAAc,mBAGjE,kBAAC5wB,GAAA,EAAD,CAAS5M,MAAOpD,EAAU,iCACvBxvB,GAAQi/B,IAAI,SAAU,OAAQ,YAC7B,kBAACmmB,GAAA,EAAD,MACG,YAA4B,IAAzBC,EAAwB,EAAxBA,SACIztD,GADoB,6BACXytD,EAASn2C,YAAc,CAAEwyC,eAAgB,CAAC,CAAEr9C,GAAIghD,EAASn2C,eAAmB,IAC3F,OACE,kBAAC,GAAD,CACE+jB,OAAO,UACP2M,UAAU,SACVhN,MAAM,gCACNpF,WAAS,EACT51B,OAAQA,EACRw3B,QAAS,CAAEtB,UAAWsB,EAAQoP,sBAE9B,kBAACM,GAAA,EAAD,CAAwBlG,WAAW,yBAM7C,kBAAC,GAAD,CAAgB3F,OAAO,wBAAwBqF,KAAK,uBAAuB9K,WAAS,IACpF,kBAAC,GAAD,CAAgByF,OAAO,YAAYqF,KAAK,WAAW9K,WAAS,KAE9D,kBAACgS,GAAA,EAAD,CAAS5M,MAAOpD,EAAU,uCAExB,kBAAC,GAAD,CAAgByD,OAAO,sBAAsBqF,KAAK,sBAAsB9K,WAAS,S,sDCvKvFI,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,CAGJkB,QAAS,QAEXkH,KAAM,CACJvH,OAAQ,WAINqjC,GAAiB,SAAC,GAAkD,IAAhD1hC,EAA+C,EAA/CA,OAAQn1B,EAAuC,EAAvCA,SAAU+4B,EAA6B,EAA7BA,OACpCzD,GADiE,EAArB8I,KAAqB,sDACrD7I,gBACZL,EAAUxB,KACVxvB,EAAO3D,cAAI40B,EAAQ4D,GACzB,OAAK70B,EAEH,yBAAK8wB,UAAWE,EAAQvC,MACrBzuB,EAAK3F,KAAI,SAAC3B,GACT,OACE,kBAACo9B,GAAA,EAAD,CACEhF,UAAWE,EAAQ6F,KACnB16B,IAAKzD,EACL87B,MAAOpD,EAAU,aAAD,OAAct1B,EAAd,kBAAgC+4B,EAAhC,YAA0Cn8B,UARlD,MAuBpBi6D,GAAer/B,aAAe,CAC5BY,UAAU,GAGGy+B,UCmGA7D,GA1Ha,SAAC,GAAsD,IAApD79B,EAAmD,EAAnDA,OAAQ4D,EAA2C,EAA3CA,OAAQ/D,EAAmC,EAAnCA,UAAW6f,EAAwB,EAAxBA,QAAY9f,EAAY,0DA4D1EqG,EAASC,eA5DiE,EA6DlDuC,oBAAS,GA7DyC,mBA6DzEvwB,EA7DyE,KA6DhE6nC,EA7DgE,KA8D1Exc,EAAQmc,EAAO,0DAAwD9b,GACvEzD,EAAYC,eAEZh4B,EAAQ,GAad,GAZIs3C,GAAWA,EAAQz2C,OACrBy2C,EAAQz0C,SAAQ,SAACm1C,GACXh1C,KAAI40B,EAAQogB,IACdh4C,EAAM4zC,KAAN,MAAA5zC,EAAK,YAASgD,KAAI40B,EAAQogB,QAI1Bh1C,KAAI40B,EAAQ4D,IACdx7B,EAAM4zC,KAAN,MAAA5zC,EAAK,YAASgD,KAAI40B,EAAQ4D,MAIzBx7B,IAAUA,EAAMa,OAAQ,OAAO,KAuBpC,OACE,oCACE,kBAACsiC,GAAA,EAAD,eACEuI,QAxBc,WAClBiM,GAAW,GACXQ,GAAc,CACZ,CACEF,QAASrgB,EAAOhrB,GAChBma,WAAY,WAAI6Q,EAAO/Q,MAAQ+Q,EAAO/Q,MAAQ,IAAM,KAAO+Q,EAAOj5B,KAAOi5B,EAAOj5B,KAAO,IAAM,KAC1FM,QAAQ,KAAM,KACdqD,UAAU,EAAG,KAChBy1C,QAAS/3C,EAAMgB,KAAI,SAACZ,GAAD,OAAUA,EAAKqc,aAEnCrb,MAAK,SAACuF,GACP,IAAMxB,EAAItG,SAASq3C,cAAc,KACjC/wC,EAAEk9B,MAAM/L,QAAU,OAClBz3B,SAASiZ,KAAKq+B,YAAYhxC,GAC1BA,EAAEixC,KAAOzvC,EAAKrF,IACd6D,EAAEkxC,QACFsB,GAAW,GACX9Z,EAAO,oQAQLS,SAAUxuB,EACVqrB,MAAOA,EACP1D,UAAWA,EACX30B,IAAI,UA9HqB,SAAC,GAAD,EAC/B40B,SAD+B,EAE/BC,QAF+B,EAG/B4f,aAH+B,EAI/Bc,aAJ+B,EAK/BC,yBAL+B,EAM/BC,QAN+B,EAO/Bpd,MAP+B,EAQ/Bqd,SAR+B,EAS/B/1C,SAT+B,EAU/B22B,OAV+B,EAW/BgU,YAX+B,EAY/B/T,SAZ+B,EAa/BN,SAb+B,EAc/B0f,cAd+B,4MA+HrBrhB,CAAkBI,IAEtB,kBAAC6kB,GAAA,EAAD,KACE,kBAAC3D,GAAD,OAEF,kBAAC3c,GAAA,EAAD,CAAY1D,QAAQ,WAAWN,EAAUoD,OCrClCo+B,GAxEE,SAAC/hC,GAChB,IAAMkQ,EAAkB4nB,aAAkB93B,GACpCg8B,EAAiB15B,IAAM0K,OAAO,MAC9BmD,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAHzC,EAIA9pB,GAAc,SAAU,QAA1C++C,EAJkB,EAIlBA,QAEFptB,GANoB,EAIT1vB,OAGfg9B,EAAgB9P,QAAU8P,EAAgBtN,SAAWotB,IAAUA,EAAQx8C,SAAS08B,EAAgB9P,OAAOltB,OAEzG,OACE,kBAAC,GAAD,iBACM8sB,EACAkQ,EAFN,CAGEtN,SAASuN,IAAoBnQ,EAAM4C,SAAWA,GAC9CtU,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,MAExCmQ,GAAa,kBAAC,GAAD,MACd,kBAAC,GAAD,MACA,kBAAC,GAAD,KACE,kBAAC6xB,GAAA,EAAD,CAAkB1rC,KAAM,kBAAC2rC,GAAA,EAAD,CAAsB3xB,UAAQ,KACpD,kBAAC,KAAD,CAAK3M,MAAM,8BACT,kBAAC,KAAD,CAAWK,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,gBAClB,kBAAC+gB,GAAA,EAAD,CACE/gB,OAAO,cACPnsB,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B64B,UAAU,eACVziC,MAAM,GAEN,kBAAC,KAAD,CAAW81B,OAAO,UAEpB,kBAAC,GAAD,CAAYA,OAAO,UACnB,kBAAC,KAAD,CAAWA,OAAO,UAClB,kBAAC,GAAD,CAAWA,OAAO,UAGpB,kBAAC,KAAD,CAAKL,MAAM,gCACT,kBAACu+B,GAAA,EAAD,CAAqBl+B,OAAO,UAAU2M,UAAU,SAAShN,MAAM,iCAC7D,kBAACw+B,GAAA,EAAD,CAAiBv+B,SAAS,QACxB,kBAACk8B,GAAA,EAAD,CAAW97B,OAAO,uBAGtB,kBAAC,GAAD,CAAgBA,OAAO,0BACvB,kBAAC,GAAD,CAAgBA,OAAO,eAGzB,kBAAC,KAAD,CAAKL,MAAM,sCACT,kBAAC,GAAD,CAAgBK,OAAO,2BAW7B,kBAAC,GAAD,CAAW9yB,OAAQ,yBAAKk2B,IAAK40B,MAE7B,kBAAC,GAAD,CAAaA,eAAgBA,GAC3B,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWh4B,OAAO,OAClB,kBAACgoB,GAAA,EAAD,CAAWhoB,OAAO,cAClB,kBAAC,KAAD,CAAWA,OAAO,iBAAiBL,MAAM,oCACzC,kBAACqoB,GAAA,EAAD,CAAWhoB,OAAO,kBC3FtBo+B,GAAWnxB,KCSFA,OAZf,SAAcjR,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BACEklB,SAAS,UACTC,SAAS,UACT/sC,EAAE,kLCMKiqD,OAZf,SAAoBriC,GAClB,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BACEklB,SAAS,UACTC,SAAS,UACT/sC,EAAE,2TCDJumB,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyyB,IAAK,CACHpxC,OAAQ,QAINqkD,GAAa,SAACtiC,GAAD,OACjB,kBAAC6vB,GAAuB7vB,EACtB,kBAAC,KAAD,CAAagE,OAAO,IAAI+f,UAAQ,IAChC,kBAACvT,GAAA,EAAD,CAAWxM,OAAO,qBAIhBu+B,GAAW,SAAC,GAA+B,IAA7BjS,EAA4B,EAA5BA,YAAgBtwB,EAAY,gCACxCG,EAAUxB,KACV4B,EAAYC,eACZ8e,EAAWuI,GAAetnB,EAAU,aAAD,OAAcP,EAAM/0B,SAApB,SAAqC,CAAEswC,YAAa,IAAM+U,EAAa,CAC9G/vB,cAEIuwB,EAAmBxuB,IAAM0K,OAAO,MAEtC,OACE,kBAAC,GAAD,iBAAUhN,EAAV,CAAiB1Y,QAAS,kBAAC,GAAD,CAAYslC,QAASkE,IAAsBxR,SAAUA,IAC7E,kBAACzJ,GAAA,EAAD,CAAUua,SAAS,OAAOjwB,QAAS,CAAEkvB,IAAKlvB,EAAQkvB,MAGhD,kBAAC,KAAD,CAAWrrB,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,mBAS1Bu+B,GAAS9/B,aAAe,CACtB7qB,QAAS,IACTC,KAAM,CAAEf,MAAO,YAAagB,MAAO,QACnC85C,mBAAmB,EACnBtB,YAAa,CACXl7C,IAAI,EACJjO,MAAM,EACNuhB,aAAa,EACbqG,UAAW8tB,GACX93B,UAAW,CACT5d,MAAM,EACN61C,WAAY,QAEd9tB,UAAW2tB,GACX/yC,KAAK,EACLsW,cAAc,EACdoE,SAAS,EACT9Z,KAAK,EACL2U,MAAM,EACN29B,WAAY,SAIDulB,UC9BAC,I,QCvBOrrC,e,QCCAA,eAEJyH,aAAW,CAC3Ba,QAAS,CACPX,QAAS,OACTE,eAAgB,mBFZH,SAACgB,GAChB,IAAMkQ,EAAkB4nB,aAAkB93B,GACpCg8B,EAAiB15B,IAAM0K,OAAO,MAEpC,OACE,kBAAC,GAAD,eAAU1e,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GAC3E,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWlM,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,gBAClB,kBAAC,KAAD,CAAWA,OAAO,QAClB,kBAAC,KAAD,CAAWA,OAAO,iBAClB,kBAAC,KAAD,CAAWA,OAAO,YAClB,kBAAC,KAAD,CAAWA,OAAO,UAGpB,kBAAC,GAAD,CAAW9yB,OAAQ,yBAAKk2B,IAAK40B,MAE7B,kBAAC,GAAD,CAAaA,eAAgBA,GAC3B,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWh4B,OAAO,OAClB,kBAACgoB,GAAA,EAAD,CAAWhoB,OAAO,cAClB,kBAAC,KAAD,CAAWA,OAAO,iBAAiBL,MAAM,oCACzC,kBAACqoB,GAAA,EAAD,CAAWhoB,OAAO,mBGvBtBy+B,GAAexxB,GACfyxB,GAAiBL,G,qBCDVM,GAAW,SAAC3iC,GAAW,IAEhChhB,EAQEghB,EARFhhB,SACAihB,EAOED,EAPFC,UAEWmB,GAKTpB,EANFG,QAMEH,EALFc,WAL+B,EAU7Bd,EAJF1R,aAN+B,MAMvB,8BANuB,EAO/B4R,EAGEF,EAHFE,SACAj1B,EAEE+0B,EAFF/0B,SACGq1B,EAT4B,aAU7BN,EAV6B,8EAY3BG,EAAUxB,GAAUqB,GAEpB8B,EAAUiT,eAEhB,OACE,uCAAK9U,UAAWS,KAAW,YAAaP,EAAQvC,KAAMqC,IAAgBL,GAAkBU,IACtF,kBAACK,GAAA,EAAD,CAAOrS,MAAOA,IACd,yBAAK2R,UAAWE,EAAQ3R,MACtB,kBAAC4S,EAAD,CAASnB,UAAWE,EAAQo8B,QAASjxD,IAAKw2B,GACvCS,WAAS/4B,IAAIwV,GAAU,SAAClI,EAAOsL,GAAR,OACtBogB,yBAAe1rB,GACXqrB,uBAAarrB,EAAO,CAClBxL,IAAK8W,EACLnX,WACAi1B,WACA4B,YAEF,YAmBhB6gC,GAASlgC,aAAe,CACtBtC,QAAS,GACTW,UAAWuD,MAGb,IAAM1F,GAAYC,cAChB,SAAChC,GAAD,YAAY,CACVgB,KAAM,GACNpP,KAAM,CACJsQ,QAAS,QAEXy9B,SAAO,GACLn9B,UAAWxC,EAAMtb,QAAQ,GACzBiwB,WAAY3U,EAAMs2B,YAAYp/C,OAAO,cACrCi4B,SAAU,WACVrJ,KAAM,YAJD,eAKJ9F,EAAMqC,YAAYE,KAAK,MAAQ,CAC9BzB,UAAW,SANR,0BAQK,WARL,GAWPklC,UAAW,CAAE5kC,QAAS,OAExB,CAAE72B,KAAM,WAGJy4B,GAAoB,SAAC,GAAD,EACxBM,SADwB,EAExByV,YAFwB,EAGxBxmC,KAHwB,EAIxBkxB,aAJwB,EAKxBqjB,iBALwB,EAMxByN,oBANwB,EAOxBpR,aAPwB,EAQxBpd,UARwB,EASxBC,QATwB,EAUxBvB,QAVwB,EAWxBC,QAXwB,EAYxBorB,WAZwB,EAaxB5sB,QAbwB,EAcxB/pB,IAdwB,EAexBuC,QAfwB,EAgBxBuqB,OAhBwB,EAiBxB7iB,SAjBwB,EAkBxBzY,MAlBwB,EAmBxBs7D,SAnBwB,EAoBxBC,aApBwB,EAqBxBxY,gBArBwB,EAsBxBxiD,QAtBwB,EAuBxB6P,KAvBwB,EAwBxBqrB,YAxBwB,EAyBxBprB,QAzBwB,EA0BxB3M,SA1BwB,EA2BxB2qC,YA3BwB,EA4BxBwN,WA5BwB,EA6BxB7N,QA7BwB,EA8BxBwtB,WA9BwB,EA+BxBC,QA/BwB,EAgCxBrf,WAhCwB,EAiCxB9rC,KAjCwB,EAkCxBc,MAlCwB,saAsCXgqD,M,sBC5GThkC,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyF,KAAM,CACJpkB,OAAQ,QAEVglD,YAAa,CACXvzB,WAAY,GAEdwzB,eAAgB,CACdjlD,OAAQ,QAEV8/B,OAAQ,GACRzvB,MAAO,CACLyc,WAAY,IACZia,WAAY,MAEdpO,OAAQ,CACN/2B,MAAO+c,EAAME,QAAQK,UAAU3O,KAC/BqP,gBAAiBujB,gBAAKxkB,EAAME,QAAQK,UAAU3O,KAAM,UA8DzC20C,IA1DC7gC,IAAMwgB,YAAW,SAAC9iB,EAAOoH,GAAR,OAAgB,kBAAC,KAAD,eAAMg8B,SAAUh8B,GAASpH,OAEvD8iB,sBACjB,WAcE1b,GACG,EAbDnH,UAaE,IAZOqE,EAYR,EAZDnE,QACAC,EAWC,EAXDA,OACAF,EAUC,EAVDA,SAUC,KATDj1B,SASC,EARD+4B,OAQC,EAPDlD,kBAOC,MAPWC,KAOX,EACGZ,GADH,EANDulB,gBAMC,EALD5jB,QAKC,EAJDuhC,qBAIC,+IACa1kC,GAAU,CAAEwB,QAASmE,KAErC,IAAKlE,EAAQ,OAAO,KACpB,IAAMj5B,EAAOi5B,EAAOj5B,KACduhB,EAAc0X,EAAO1X,YACrBwrB,EAAU9T,EAAO8T,QAEvB,OACE,kBAAC7P,GAAA,EAAD,CAAMpE,UAAWE,EAAQkC,MACvB,kBAACihC,GAAA,EAAD,CACEnjC,QAAS,CAAEvC,KAAMuC,EAAQ+iC,gBACzBpiC,UAAWA,EACXsG,IAAKA,EACLpG,GAAE,UAAKd,EAAL,YAAiBE,EAAOhrB,IAC1B8+B,QAASA,GAET,kBAACqvB,GAAA,EAAD,CACE3sB,OACE,kBAACC,GAAA,EAAD,CAAQ0R,aAAW,YAAY1nB,QAAQ,UAAUV,QAAS,CAAEqjC,aAAcrjC,EAAQyW,SAChF,kBAAC,KAAD,OAGJtoB,MAAOnnB,EACPs8D,qBAAsB,CAAE5iC,QAAS,aACjCV,QAAS,CAAEvC,KAAMuC,EAAQ4d,OAAQzvB,MAAO6R,EAAQ7R,SAEjD5F,GACC,kBAACmd,GAAA,EAAD,CAAa1F,QAAS,CAAEvC,KAAMuC,EAAQ8iC,cACpC,kBAAC1+B,GAAA,EAAD,CAAY1D,QAAQ,QAAQhhB,MAAM,iBAC/B6I,U,qBCrEXiW,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyF,KAAM,GACN4gC,YAAa,CACXvzB,WAAY,GAEdwzB,eAAgB,CACdjlD,OAAQ,QAEV8/B,OAAQ,GACRzvB,MAAO,CACLyc,WAAY,IACZia,WAAY,MAEdpO,OAAQ,CACN/2B,MAAO+c,EAAME,QAAQK,UAAU3O,KAC/BqP,gBAAiBujB,gBAAKxkB,EAAME,QAAQK,UAAU3O,KAAM,UAIlDk1C,GAAUphC,IAAMwgB,YAAW,SAAC9iB,EAAOoH,GAAR,OAAgB,kBAAC,KAAD,eAAMg8B,SAAUh8B,GAASpH,OAEvD8iB,sBACjB,WAaE1b,GACG,EAZDnH,UAYE,IAXOqE,EAWR,EAXDnE,QACAC,EAUC,EAVDA,OACAF,EASC,EATDA,SAUIC,GADH,EARDl1B,SAQC,EAPD+4B,OAOC,EAND0hB,gBAMC,EALD5jB,QAKC,EAJDuhC,qBAIC,mIACa1kC,GAAU,CAAEwB,QAASmE,KAErC,IAAKlE,EAAQ,OAAO,KACpB,IAAMj5B,EAAOi5B,EAAOj5B,KACduhB,EAAc0X,EAAO1X,YAE3B,OACE,kBAAC2b,GAAA,EAAD,CAAMpE,UAAWE,EAAQkC,MACvB,kBAACihC,GAAA,EAAD,CACEnjC,QAAS,CAAEvC,KAAMuC,EAAQ+iC,gBACzBpiC,UAAW4iC,GACXt8B,IAAKA,EACLpG,GAAE,UAAKd,EAAL,YAAiBE,EAAOhrB,KAE1B,kBAACmuD,GAAA,EAAD,CACE3sB,OACE,kBAACC,GAAA,EAAD,CAAQ0R,aAAW,YAAY1nB,QAAQ,UAAUV,QAAS,CAAEqjC,aAAcrjC,EAAQyW,SAChF,kBAAC,KAAD,OAGJtoB,MAAOnnB,EACPs8D,qBAAsB,CAAE5iC,QAAS,aACjCV,QAAS,CAAEvC,KAAMuC,EAAQ4d,OAAQzvB,MAAO6R,EAAQ7R,SAEjD5F,GACC,kBAACmd,GAAA,EAAD,CAAa1F,QAAS,CAAEvC,KAAMuC,EAAQ8iC,cACpC,kBAAC1+B,GAAA,EAAD,CAAY1D,QAAQ,QAAQhhB,MAAM,iBAC/B6I,S,2zECzEV,IAAMi7C,GAAsBn1D,IAAH,MA8BnBo1D,GAAkBp1D,IAAH,MAgFb,eAAuB,IAApBq1D,EAAmB,EAAnBA,aAChB,OAAO7gD,GACJ1S,MAAM,CACLA,MAAOqzD,GACP/0D,UAAW,CAAEi1D,gBACb/xD,YAAa,eACbjD,QAAS,SAACxE,GACRyE,MAAMzE,MAGTT,MAAK,YAAqG,IAAD,IAAjGuF,KAAQ20D,EAAyF,EAAzFA,wBAAyB/C,EAAgE,EAAhEA,YAAagD,EAAmD,EAAnDA,YAAaC,EAAsC,EAAtCA,mBAAoBC,EAAkB,EAAlBA,UACtF,OAAOjhD,GAAoB1S,MAAM,CAC/BA,MAAOszD,GACPh1D,UAAW,CACTs1D,aAAcJ,EAAwBprD,SAASE,WAC/CirD,eACAM,eAAgBpD,EAAYroD,SAASE,WACrCwrD,aAAcL,EAAYrrD,SAASE,WACnCyrD,oBAAqBL,EAAmBtrD,SAASE,WACjD0rD,WAAYL,EAAUvrD,SAASE,YAEjC9G,YAAa,eACbjD,QAAS,SAACxE,GACRyE,MAAMzE,UAMiBmE,IAAH,M,44CC3IKA,IAAH,MAcDA,IAAH,MAyEKA,IAAH,MAvFvB,ICEP,yBAAe,wCAAAb,EAAA,sEAMH42D,GAAc,CACtBV,aAAc,CACZltC,WAAY,QARH,2BAEXxnB,KACoCq1D,EAHzB,EAGTV,wBAA2BrrD,MAHlB,EAITsoD,YAAetoD,OAQb0kC,EAAW,IAAIC,KAAQC,UAEpB30B,YAAc,+DACvBy0B,EAASG,QAAU,IAAI3tC,KACvBwtC,EAASI,SAAW,IAAI5tC,KACxBwtC,EAASK,YAAc,IAAI7tC,MAErB8tC,EAAYN,EAASO,aAAa,+BAC9BC,MAAQ,CAAC,CAAErY,MAAO,SAAUsY,OAAQ,EAAGC,OAAQ,IAEzDJ,EAAUgnB,WAAa,CACrBC,KAAM,KACN1jC,GAAI,MAGNyc,EAAUK,QAAU,CAClB,CAAEC,OAAQ,iBAAQzyC,IAAK,QAAS0S,MAAO,GACvC,CAAE+/B,OAAQ,iFAAiBzyC,IAAK,KAAM0S,MAAO,IAC7C,CAAE+/B,OAAQ,oGAAqBzyC,IAAK,kBAAmB0S,MAAO,IAC9D,CAAE+/B,OAAQ,8BAAWzyC,IAAK,SAAU0S,MAAO,IAC3C,CAAE+/B,OAAQ,qBAAOzyC,IAAK,OAAQ0S,MAAO,IACrC,CAAE+/B,OAAQ,mDAAYzyC,IAAK,cAAe0S,MAAO,IACjD,CAAE+/B,OAAQ,uCAAUzyC,IAAK,SAAU0S,MAAO,IAC1C,CAAE+/B,OAAQ,mDAAYzyC,IAAK,OAAQ0S,MAAO,IAC1C,CAAE+/B,OAAQ,iCAASzyC,IAAK,UAAW0S,MAAO,IAC1C,CAAE+/B,OAAQ,iCAASzyC,IAAK,aAAc0S,MAAO,MAGzC+/B,EAASN,EAAUknB,OAAO,IACzBC,KAAO,CAAExlD,MAAM,GACtB2+B,EAAO8mB,UAAS,SAACC,GACfA,EAAKj6B,MAAQ,CACXk6B,KAAM,CACJ37D,KAAM,UACN47D,QAAS,QACTC,QAAS,CAAEC,KAAM,YACjBC,QAAS,CAAED,KAAM,aAEnBvlD,OAAQ,CACNm8B,IAAK,CACHjR,MAAO,OACPhrB,MAAO,YAETd,MAAO,CACL8rB,MAAO,OACPhrB,MAAO,YAETf,KAAM,CACJ+rB,MAAO,OACPhrB,MAAO,YAETD,OAAQ,CACNirB,MAAO,OACPhrB,MAAO,iBAMT6B,EAvEO,CAwEX,CAAC,IAAK,KAAM,kBAAmB,SAAU,OAAQ,eAAgB,SAAU,OAAQ,UAAW,eAxEnF,mBAyER8iD,EAAWh7D,KAAI,SAACilB,EAAQrM,GACzB,MAAO,CACLA,EAAQ,EACRqM,EAAOrZ,GACPqZ,EAAO9F,gBACP8F,EAAO3F,OACP2F,EAAOrlB,KACPqlB,EAAOgI,cAAgBhI,EAAOgI,aAAatvB,KAC3CsnB,EAAO/H,QAAU+H,EAAO/H,OAAOE,iBAC/B6H,EAAOtnB,KACPsnB,EAAO1O,WACP0O,EAAOkI,WAAa,OAAS,cAKnC8mB,EAAUY,QAAQ38B,EAAM,KACxB+7B,EAAUknB,OAAO,GAAGE,UAAS,SAACC,GAC5BA,EAAKj6B,MAAQ,CACXk6B,KAAM,CACJ37D,KAAM,UACN47D,QAAS,QACTC,QAAS,CAAEC,KAAM,YACjBC,QAAS,CAAED,KAAM,aAEnBvlD,OAAQ,CACNm8B,IAAK,CACHjR,MAAO,OACPhrB,MAAO,YAETd,MAAO,CACL8rB,MAAO,OACPhrB,MAAO,YAETf,KAAM,CACJ+rB,MAAO,OACPhrB,MAAO,YAETD,OAAQ,CACNirB,MAAO,OACPhrB,MAAO,iBAjHF,kBAuHNs9B,EAASmB,KAAKC,cAAc30C,MAAK,SAAUuF,GAChD,IAAMjG,EAAO,IAAIC,KAAK,CAACgG,GAAO,CAAE/F,KAAM,sEACtC,GAAIW,OAAOy0C,WAAaz0C,OAAOy0C,UAAUC,iBACvC10C,OAAOy0C,UAAUC,iBAAiBv1C,EAAM,iNACnC,CACL,IAAMY,EAAMC,OAAOC,IAAIC,gBAAgBf,GACjCyE,EAAItG,SAASq3C,cAAc,KACjCr3C,SAASiZ,KAAKq+B,YAAYhxC,GAC1BA,EAAEixC,KAAO90C,EACT6D,EAAEkrB,SAAW,4MACblrB,EAAEkxC,QACF90C,OAAOC,IAAI80C,gBAAgBh1C,GAC3BzC,SAASiZ,KAAKy+B,YAAYpxC,QAnIjB,4CCATovD,GAAiB,SAACngC,EAAO/0B,GAC7B,MAAwB,kBAAVA,EAAqBA,EAAQ+0B,EAAMtb,QAAQzZ,GAAS,MAG9Dm1D,GAAgB,SAACpgC,EAAOvd,GAC5B,OAAO5T,MAAMwL,QAAQoI,GAAd,iBACOA,EAAK7V,KAAI,SAAC3B,GAAD,OAAWk1D,GAAengC,EAAO/0B,MAAQo1D,KAAK,MAD9D,KAEHF,GAAengC,EAAOvd,IAGtB69C,GAAe,SAACtgC,EAAOugC,EAAYn9B,GACvC,IAAMn4B,EAAQm4B,EAAMm9B,GACpB,GAAKt1D,EAAL,CAFiD,IAGzCohB,EAAgBphB,EAAhBohB,MAAO5J,EAASxX,EAATwX,KACf,OAAO,gBACJud,EAAMqC,YAAYC,GAAG,MAAQ,CAC5Bk+B,oBAAoB,UAAD,OAAYn0C,EAAZ,aAAsB+zC,GAAcpgC,EAAOvd,GAA3C,SAKnBsf,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,gBAAGtc,EAAH,EAAGA,QAAH,MAAkB,CACtBwd,QAAS,OACTs+B,oBAAqB,wCACrBC,QAASzgC,EAAMtb,QAAQA,KAEzB,UAAW,SAAC0e,GAAD,OAAWk9B,GAAatgC,EAAO,KAAMoD,IAChD,UAAW,SAACA,GAAD,OAAWk9B,GAAatgC,EAAO,KAAMoD,IAChD,UAAW,SAACA,GAAD,OAAWk9B,GAAatgC,EAAO,KAAMoD,IAChD,UAAW,SAACA,GAAD,OAAWk9B,GAAatgC,EAAO,KAAMoD,IAChD,UAAW,SAACA,GAAD,OAAWk9B,GAAatgC,EAAO,KAAMoD,QA2DnColC,GAxDI,SAAC,GAeb,IAAD,EAdJpmD,EAcI,EAdJA,SACSslB,EAaL,EAbJnE,QACWo9B,EAYP,EAZJt9B,UACAh1B,EAWI,EAXJA,SACAi1B,EAUI,EAVJA,SACA4B,EASI,EATJA,QASI,KARJkC,OAQI,EAPJw5B,WAOI,aANJC,UAMI,aALJC,UAKI,aAJJC,UAII,aAHJ53B,UAGI,aAFJzkB,eAEI,MAFM,EAEN,EADD0e,EACC,+HACEG,EAAUxB,GAAU,CAAEwB,QAASmE,EAAiBk5B,KAAIC,KAAIC,KAAIC,KAAI53B,KAAIzkB,YACpE2e,EAAYS,KAChBP,EAAQvC,MADkB,oBAGvBuC,EAAQ,YAAoB,IAAP4F,GAHE,eAIvB5F,EAAQ,YAAoB,IAAPu9B,GAJE,eAKvBv9B,EAAQ,YAAoB,IAAPs9B,GALE,eAMvBt9B,EAAQ,YAAoB,IAAPq9B,GANE,eAOvBr9B,EAAQ,YAAoB,IAAPw9B,GAPE,GAS1BJ,GAGF,OAAKv+C,EAEH,yBAAKihB,UAAWA,GACbjhB,GAAYvT,MAAMwL,QAAQ+H,GACvBA,EAASxV,KAAI,SAAC67D,EAAOjjD,GACnB,OACEkgB,IAAME,eAAe6iC,IACrBljC,uBAAaI,WAASmC,KAAK2gC,GAAf,aACV/5D,IAAK8W,EAAQnX,EACbA,WACAi1B,WACA4B,WACG9B,OAITuC,WAASmC,KAAK1lB,IACdmjB,uBAAanjB,EAAD,aACV/T,WACAi1B,WACA4B,WACG9B,KArBS,MChExB,yBAAe,sCAAAryB,EAAA,sEAKH42D,GAAc,IALX,uBAGyBC,EAHzB,EAEXr1D,KACE20D,wBAA2BrrD,OAIzB0kC,EAAW,IAAIC,KAAQC,UAEpB30B,YAAc,+DACvBy0B,EAASG,QAAU,IAAI3tC,KACvBwtC,EAASI,SAAW,IAAI5tC,KACxBwtC,EAASK,YAAc,IAAI7tC,MAErB8tC,EAAYN,EAASO,aAAa,+BAC9BC,MAAQ,CAAC,CAAErY,MAAO,SAAUsY,OAAQ,EAAGC,OAAQ,IAEzDJ,EAAUgnB,WAAa,CACrBC,KAAM,KACN1jC,GAAI,MAGNyc,EAAUK,QAAU,CAClB,CAAEC,OAAQ,iBAAQzyC,IAAK,QAAS0S,MAAO,GACvC,CAAE+/B,OAAQ,iFAAiBzyC,IAAK,KAAM0S,MAAO,IAC7C,CAAE+/B,OAAQ,oGAAqBzyC,IAAK,kBAAmB0S,MAAO,IAC9D,CAAE+/B,OAAQ,8BAAWzyC,IAAK,SAAU0S,MAAO,IAC3C,CAAE+/B,OAAQ,qBAAOzyC,IAAK,OAAQ0S,MAAO,IACrC,CAAE+/B,OAAQ,mDAAYzyC,IAAK,cAAe0S,MAAO,IACjD,CAAE+/B,OAAQ,uCAAUzyC,IAAK,SAAU0S,MAAO,IAC1C,CAAE+/B,OAAQ,mDAAYzyC,IAAK,OAAQ0S,MAAO,IAC1C,CAAE+/B,OAAQ,iCAASzyC,IAAK,UAAW0S,MAAO,IAC1C,CAAE+/B,OAAQ,qBAAOzyC,IAAK,OAAQ0S,MAAO,GACrC,CAAE+/B,OAAQ,uCAAUzyC,IAAK,UAAW0S,MAAO,IAC3C,CAAE+/B,OAAQ,6CAAWzyC,IAAK,WAAY0S,MAAO,IAC7C,CAAE+/B,OAAQ,2BAAQzyC,IAAK,QAAS0S,MAAO,IACvC,CAAE+/B,OAAQ,uCAAUzyC,IAAK,QAAS0S,MAAO,IACzC,CAAE+/B,OAAQ,qBAAOzyC,IAAK,MAAO0S,MAAO,IACpC,CAAE+/B,OAAQ,2BAAQzyC,IAAK,OAAQ0S,MAAO,IACtC,CAAE+/B,OAAQ,2BAAQzyC,IAAK,OAAQ0S,MAAO,IACtC,CAAE+/B,OAAQ,uCAAUzyC,IAAK,SAAU0S,MAAO,IAC1C,CAAE+/B,OAAQ,mDAAYzyC,IAAK,YAAa0S,MAAO,IAC/C,CAAE+/B,OAAQ,6CAAWzyC,IAAK,UAAW0S,MAAO,IAC5C,CAAE+/B,OAAQ,uCAAUzyC,IAAK,WAAY0S,MAAO,IAC5C,CAAE+/B,OAAQ,6CAAWzyC,IAAK,WAAY0S,MAAO,MAGzC+/B,EAASN,EAAUknB,OAAO,IACzBC,KAAO,CAAExlD,MAAM,GACtB2+B,EAAO8mB,UAAS,SAACC,GACfA,EAAKj6B,MAAQ,CACXk6B,KAAM,CACJ37D,KAAM,UACN47D,QAAS,QACTC,QAAS,CAAEC,KAAM,YACjBC,QAAS,CAAED,KAAM,aAEnBvlD,OAAQ,CACNm8B,IAAK,CACHjR,MAAO,OACPhrB,MAAO,YAETd,MAAO,CACL8rB,MAAO,OACPhrB,MAAO,YAETf,KAAM,CACJ+rB,MAAO,OACPhrB,MAAO,YAETD,OAAQ,CACNirB,MAAO,OACPhrB,MAAO,iBAMT6B,EA9EO,CA+EX,CACE,IACA,KACA,kBACA,SACA,OACA,eACA,SACA,OACA,UACA,OACA,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,aArGS,mBAuGR8iD,EAAWh7D,KAAI,SAACilB,EAAQrM,GACzB,MAAO,CACLA,EAAQ,EACRqM,EAAOrZ,GACPqZ,EAAO9F,gBACP8F,EAAO3F,OACP2F,EAAOrlB,KACPqlB,EAAOgI,cAAgBhI,EAAOgI,aAAatvB,KAC3CsnB,EAAO/H,QAAU+H,EAAO/H,OAAOE,iBAC/B6H,EAAOtnB,KACPsnB,EAAO1O,WACP8C,OAASE,OAAO,cAKtB06B,EAAUY,QAAQ38B,EAAM,KACxB+7B,EAAUknB,OAAO,GAAGE,UAAS,SAACC,GAC5BA,EAAKj6B,MAAQ,CACXk6B,KAAM,CACJ37D,KAAM,UACN47D,QAAS,QACTC,QAAS,CAAEC,KAAM,YACjBC,QAAS,CAAED,KAAM,aAEnBvlD,OAAQ,CACNm8B,IAAK,CACHjR,MAAO,OACPhrB,MAAO,YAETd,MAAO,CACL8rB,MAAO,OACPhrB,MAAO,YAETf,KAAM,CACJ+rB,MAAO,OACPhrB,MAAO,YAETD,OAAQ,CACNirB,MAAO,OACPhrB,MAAO,iBA/IF,kBAqJNs9B,EAASmB,KAAKC,cAAc30C,MAAK,SAAUuF,GAChD,IAAMjG,EAAO,IAAIC,KAAK,CAACgG,GAAO,CAAE/F,KAAM,sEACtC,GAAIW,OAAOy0C,WAAaz0C,OAAOy0C,UAAUC,iBACvC10C,OAAOy0C,UAAUC,iBAAiBv1C,EAAM,qMACnC,CACL,IAAMY,EAAMC,OAAOC,IAAIC,gBAAgBf,GACjCyE,EAAItG,SAASq3C,cAAc,KACjCr3C,SAASiZ,KAAKq+B,YAAYhxC,GAC1BA,EAAEixC,KAAO90C,EACT6D,EAAEkrB,SAAW,gMACblrB,EAAEkxC,QACF90C,OAAOC,IAAI80C,gBAAgBh1C,GAC3BzC,SAASiZ,KAAKy+B,YAAYpxC,QAjKjB,4CCYTgxB,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyF,KAAM,CACJpkB,OAAQ,QAEVglD,YAAa,CACXvzB,WAAY,GAEdwzB,eAAgB,CACdjlD,OAAQ,QAEV8/B,OAAQ,GACRzvB,MAAO,CACLyc,WAAY,IACZia,WAAY,MAEdpO,OAAQ,CACN/2B,MAAO+c,EAAME,QAAQK,UAAU3O,KAC/BqP,gBAAiBujB,gBAAKxkB,EAAME,QAAQK,UAAU3O,KAAM,UAkFzC82C,IA9EChjC,IAAMwgB,YAAW,SAAC9iB,EAAOoH,GAAR,OAAgB,kBAAC,KAAD,eAAMg8B,SAAUh8B,GAASpH,OAEvC8iB,sBACjC,WAaE1b,GACG,EAZDnH,UAYE,IAXOqE,EAWR,EAXDnE,QACAD,EAUC,EAVDA,SAUC,KATDj1B,SASC,EARD+4B,OAQC,EAPDlD,kBAOC,MAPWC,KAOX,OAND2kB,gBAMC,EALD5jB,QAKC,EAJDuhC,qBAIC,sIACqBx6B,oBAAS,IAD9B,mBACI4B,EADJ,KACU4Y,EADV,KAGGljB,EAAUxB,GAAU,CAAEwB,QAASmE,IAE/BlE,EACA,2CAKAj5B,EAJE,oPAKFuhB,EAJS,0ZAKTu/B,EAAW,uCAAG,WAAOta,GAAP,SAAAhgC,EAAA,sDAClBggC,EAAM4V,iBACNF,GAAQ,GACRkiB,KAAuB37D,MAAK,kBAAMy5C,GAAQ,MAHxB,2CAAH,sDAOjB,OACE,oCACE,kBAAChf,GAAA,EAAD,CAAMpE,UAAWE,EAAQkC,MACvB,kBAACihC,GAAA,EAAD,CACEnjC,QAAS,CAAEvC,KAAMuC,EAAQ+iC,gBACzBpiC,UAAWA,EACXsG,IAAKA,EACLpG,GAAE,UAAKd,EAAL,YAAiBE,GACnB8T,QAAS+T,GAET,kBAACsb,GAAA,EAAD,CACE3sB,OACE,kBAACC,GAAA,EAAD,CAAQ0R,aAAW,YAAY1nB,QAAQ,UAAUV,QAAS,CAAEqjC,aAAcrjC,EAAQyW,SAChF,kBAAC,KAAD,OAGJtoB,MAAOnnB,EACPs8D,qBAAsB,CAAE5iC,QAAS,aACjCV,QAAS,CAAEvC,KAAMuC,EAAQ4d,OAAQzvB,MAAO6R,EAAQ7R,SAEjD5F,GACC,kBAACmd,GAAA,EAAD,CAAa1F,QAAS,CAAEvC,KAAMuC,EAAQ8iC,cACpC,kBAAC1+B,GAAA,EAAD,CAAY1D,QAAQ,QAAQhhB,MAAM,iBAC/B6I,MAMX,kBAAC88C,GAAA,EAAD,CACE/6B,KAAMA,EACNg7B,iBAAkB,KAClB/rB,QAAS,kBAAM,MACfpqC,QAAQ,qSACR4B,OAAQ,kBAACmjC,GAAA,EAAD,CAAkBxJ,MAAO,CAAE5sB,OAAQ,GAAID,MAAO,GAAI6B,MAAO,kB,oBCvG5D,eAAwB,IAArB4qB,EAAoB,EAApBA,KAAMn7B,EAAc,EAAdA,QAGtB,OACE,kBAACk2D,GAAA,EAAD,CACE/6B,KAAMA,EACNg7B,iBAAkB,KAClB/rB,QANgB,SAAC/L,EAAO+3B,GAAR,OAAmB,MAOnCp2D,QAASA,GAAW,wFACpB4B,OAAQ,kBAACmjC,GAAA,EAAD,CAAkBxJ,MAAO,CAAE5sB,OAAQ,GAAID,MAAO,GAAI6B,MAAO,WACjEgrB,MAAO,CAAE3G,aAAc,O,skCCZtB,IAAMy/B,GAAsBn1D,IAAH,MAQnBo1D,GAAkBp1D,IAAH,MA4Cb,YAACmC,GACd,OAAOC,GACJN,MAAM,CACLA,MAAOqzD,GACP/0D,UAAW,CAAEjG,OAAQgI,EAAKhI,QAC1BmJ,YAAa,eACbjD,QAAS,SAACxE,GACRyE,MAAMzE,MAGTT,MAAK,YAAkC,IAAvB+7D,EAAsB,EAA9Bx2D,KAAQw2D,cACf,OAAO/0D,GAAiBN,MAAM,CAC5BA,MAAOszD,GACPh1D,UAAU,aAAGg3D,WAAYD,EAAc18C,OAAUtY,GACjDmB,YAAa,eACbjD,QAAS,SAACxE,GACRyE,MAAMzE,UC3CVs0B,I,OAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyF,KAAM,GACN4gC,YAAa,CACXvzB,WAAY,EACZzxB,OAAQ,OAEVilD,eAAgB,CACdjlD,OAAQ,OACR6gB,QAAS,OACTC,cAAe,SACfC,eAAgB,iBAElB+e,OAAQ,CACN9/B,OAAQ,MACR6gB,QAAS,OACTE,eAAgB,aAChBhhB,MAAO,OACP6nD,UAAW,cAEbv3C,MAAO,CACLyc,WAAY,IACZia,WAAY,MAEdpO,OAAQ,CACN/2B,MAAO+c,EAAME,QAAQK,UAAU3O,KAC/BqP,gBAAiBujB,gBAAKxkB,EAAME,QAAQK,UAAU3O,KAAM,WAIlDs3C,GAAiB,CAAC,uBAAwB,yBAA0B,eAAgB,mBAEpFC,GAAiB,SAACtoB,EAAWuoB,EAAsBC,EAAiBzB,GAA4C,IAAhCjxC,EAA+B,uDAAnBuyC,GAC1FI,EAAO,GAEPC,EAAch7D,OAAOC,KAAK46D,GAAsBnuD,MAAK,SAAClK,EAAGy4D,GAAJ,OAAWvjD,KAAOlV,GAAG04D,SAASD,IAAM,EAAI,KAAI,GAEvGj7D,OAAOC,KAAK46D,GACTnuD,MAAK,SAAClK,EAAGy4D,GAAJ,OAAWvjD,KAAOlV,GAAG04D,SAASD,IAAM,EAAI,KAC7C3xD,QACC,SAAC6xD,EAAMC,EAAQC,GACb,IAAMC,EAA4BxrB,KAAQ+qB,EAAqBO,GAAS,eAClEG,EAAa,GACb5/D,EAAQ+b,KAAO0jD,GAAQI,UAAU,SAAS5jD,OAAO,aACvDkjD,EAAgB56D,SAAQ,SAAC4U,EAAamC,GACpC,IAAMwkD,EAAgC3rB,KAAQwrB,EAA0BxmD,EAAY7K,IAAK,QACnFg9C,EAAMnyC,EAAY9Y,KAClBkoD,EAAM,CAACvoD,EAAOsrD,GAEpB,GAAIjnD,OAAO6K,OAAO4wD,GAA+Bv9D,OAAQ,CACvD,IAAMw9D,EAAS,GACftzC,EAAUloB,SAAQ,SAACjC,GAIjB,IAAMG,EAAMq9D,EAA8Bx9D,GAAQw9D,EAA8Bx9D,GAAMC,OAAS,EACzFy9D,EAAYF,EAA8Bx9D,GAC5Cw9D,EAA8Bx9D,GAAMT,QAAO,SAAC23C,GAAD,MAA0B,cAAhBA,EAAKxtC,UAAwBzJ,OAClF,EACE09D,EAAUC,OAAOJ,EAA8Bx9D,IAAS09D,EAAYv9D,GAAK09D,QAAQ,GAAK,GAC5FJ,EAAOzqB,KACL2qB,EAAU,GACNA,EAAU,IACRA,EAAU,GACRH,EAA8Bx9D,GAC5B,WACA,WACF,WACF,WACF,YAGN,IAAM89D,EAAU17D,KAAI86D,EAAD,UAAUl9D,EAAV,YAAkB6W,EAAY7K,GAA9B,QAAwC,GACrD+xD,EAAgB37D,KAAI86D,EAAD,UAAUl9D,EAAV,YAAkB6W,EAAY7K,GAA9B,cAA8C,GACvE2C,KAAIuuD,EAAD,UAAUl9D,EAAV,YAAkB6W,EAAY7K,GAA9B,QAAwC8xD,EAAU39D,GACrDwO,KAAIuuD,EAAD,UAAUl9D,EAAV,YAAkB6W,EAAY7K,GAA9B,cAA8C+xD,EAAgBL,GACjEzX,EAAIjT,KAAK7yC,EAAKu9D,EAAWC,MAE3B,IAAMK,EAAS3pB,EAAU4pB,OAAOhY,GAChC+X,EAAOvC,UAAS,SAACC,EAAMwC,GACH,IAAdA,IACFxC,EAAKj6B,MAAQ,CACXvrB,UAAW,CAAEg6C,SAAU,SAAUC,WAAY,UAC7C55C,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,WAI/B,IAAdy8B,IACFxC,EAAKj6B,MAAQ,CACXlrB,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,WAI7Cy8B,EAAY,IAEZxC,EAAKj6B,OADFy8B,EAAY,GAAK,EACP,CACXvC,KAAM,CACJ37D,KAAM,UACN47D,QAAS,QACTC,QAAS,CAAEC,KAAM2B,EAAO1oD,KAAKopD,OAAOD,EAAY,GAAK,KACrDnC,QAAS,CAAED,KAAM2B,EAAO1oD,KAAKopD,OAAOD,EAAY,GAAK,MAEvD3nD,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,UAIlC,CACXk6B,KAAM,CACJ37D,KAAM,UACN47D,QAAS,QACTC,QAAS,CAAEC,KAAM2B,EAAO1oD,KAAKopD,OAAOD,EAAY,GAAK,KACrDnC,QAAS,CAAED,KAAM2B,EAAO1oD,KAAKopD,OAAOD,EAAY,GAAK,MAEvDE,OAAQ,KACR7nD,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,cAMrD67B,EAAWtqB,KAAKgrB,OAUpB,IACE3pB,EAAUgqB,WAAV,WAAyBnB,EAAK5kD,KAAO,EAArC,aAA2C4kD,EAAK5kD,KAAOglD,EAAWr9D,SAClE,MAAOuqC,GACPtpC,QAAQC,IAAIqpC,GAGd,IAAM8zB,EAAW,CAAC,kCAAD,OAAU5gE,GAAV,yCAA4BA,IACvC6gE,EAAc,GACpBp0C,EAAUloB,SAAQ,SAACjC,EAAMgZ,GACvB,IAAM7Y,EAAMm9D,EAAWjyD,QAAO,SAACmzD,EAAKvY,GAAN,OAAcuY,EAAMvY,EAAIwY,QAAgB,EAARzlD,EAAY,GAAGva,QAAO,GAC9Ei/D,EAAYJ,EAAWjyD,QAAO,SAACmzD,EAAKvY,GAAN,OAAcuY,EAAMvY,EAAIwY,QAAgB,EAARzlD,EAAY,GAAGva,QAAO,GACpFk/D,EAAUx9D,EAAMy9D,QAAQF,EAAYv9D,GAAK09D,QAAQ,IAAM,EAC7DU,EAAYvrB,KACV2qB,EAAU,GACNA,EAAU,IACRA,EAAU,GACRx9D,EACE,WACA,WACF,WACF,WACF,YAGNm+D,EAAStrB,KAAK7yC,EAAKu9D,EAAWC,MAEhCtpB,EAAU4pB,OAAOK,GAAU7C,UAAS,SAACC,EAAMwC,GAGrCxC,EAAKj6B,MAFLy8B,EAAY,GACTA,EAAY,GAAK,EACP,CACXvC,KAAM,CACJ37D,KAAM,UACN47D,QAAS,QACTC,QAAS,CAAEC,KAAMyC,EAAYxpD,KAAKopD,OAAOD,EAAY,GAAK,KAC1DnC,QAAS,CAAED,KAAMyC,EAAYxpD,KAAKopD,OAAOD,EAAY,GAAK,MAE5D1C,KAAM,CAAExlD,MAAM,GACdO,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,UAIlC,CACXk6B,KAAM,CACJ37D,KAAM,UACN47D,QAAS,QACTC,QAAS,CAAEC,KAAMyC,EAAYxpD,KAAKopD,OAAOD,EAAY,GAAK,KAC1DnC,QAAS,CAAED,KAAMyC,EAAYxpD,KAAKopD,OAAOD,EAAY,GAAK,MAE5D1C,KAAM,CAAExlD,MAAM,GACdooD,OAAQ,KACR7nD,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,UAKpC,CACX+5B,KAAM,CAAExlD,MAAM,GACdO,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,aAKnD4S,EAAUgqB,WAAV,WAAyBnB,EAAK5kD,KAAOglD,EAAWr9D,OAAS,EAAzD,aAA+Di9D,EAAK5kD,KAAOglD,EAAWr9D,OAAS,IAE/F,IAAMy+D,EAAW,GACjB,GAAItB,EAAa,CACfP,EAAgB56D,SAAQ,SAAC4U,EAAamC,GACpC,IAAMwkD,EAAgC3rB,KAAQwrB,EAA0BxmD,EAAY7K,IAAK,QACnFg9C,EAAMnyC,EAAY9Y,KAClBkoD,EAAM,CAAC,gKAAD,OACyBxsC,KAAOsjD,GAAapjD,OAAO,QADpD,YAC+DF,KAAO0jD,GAAQxjD,OAAO,SAC/FqvC,GAGF,GAAIjnD,OAAO6K,OAAO4wD,GAA+Bv9D,OAAQ,CACvD,IAAMw9D,EAAS,GACftzC,EAAUloB,SAAQ,SAACjC,GAIjB,IAAMG,EAAMiC,KAAI86D,EAAD,UAAUl9D,EAAV,YAAkB6W,EAAY7K,GAA9B,QAAwC,GACjD0xD,EAAYt7D,KAAI86D,EAAD,UAAUl9D,EAAV,YAAkB6W,EAAY7K,GAA9B,cAA8C,GAC7D2xD,EAAUC,OAAOz9D,GAAOu9D,EAAYv9D,GAAK09D,QAAQ,GAAK,GAC5DJ,EAAOzqB,KACL2qB,EAAU,GACNA,EAAU,IACRA,EAAU,GACRx9D,EACE,WACA,WACF,WACF,WACF,YAEN8lD,EAAIjT,KAAK7yC,EAAKu9D,EAAWC,MAE3B,IAAMK,EAAS3pB,EAAU4pB,OAAOhY,GAChC+X,EAAOvC,UAAS,SAACC,EAAMwC,GACH,IAAdA,IACFxC,EAAKj6B,MAAQ,CACX+5B,KAAM,CAAExlD,MAAM,GACdE,UAAW,CAAEi6C,WAAY,SAAUD,SAAU,UAC7C35C,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,WAI/B,IAAdy8B,IACFxC,EAAKj6B,MAAQ,CACX+5B,KAAM,CAAExlD,MAAM,GACdO,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,WAI7Cy8B,EAAY,IAEZxC,EAAKj6B,OADFy8B,EAAY,GAAK,EACP,CACXvC,KAAM,CACJ37D,KAAM,UACN47D,QAAS,QACTC,QAAS,CAAEC,KAAM2B,EAAO1oD,KAAKopD,OAAOD,EAAY,GAAK,KACrDnC,QAAS,CAAED,KAAM2B,EAAO1oD,KAAKopD,OAAOD,EAAY,GAAK,MAEvD1C,KAAM,CAAExlD,MAAM,GACdO,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,UAIlC,CACXk6B,KAAM,CACJ37D,KAAM,UACN47D,QAAS,QACTC,QAAS,CAAEC,KAAM2B,EAAO1oD,KAAKopD,OAAOD,EAAY,GAAK,KACrDnC,QAAS,CAAED,KAAM2B,EAAO1oD,KAAKopD,OAAOD,EAAY,GAAK,MAEvD1C,KAAM,CAAExlD,MAAM,GACdooD,OAAQ,KACR7nD,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,cAMrDi9B,EAAS1rB,KAAKgrB,OAGlB,IACE3pB,EAAUgqB,WAAV,WACMnB,EAAK5kD,KAAOglD,EAAWr9D,OAAS,EADtC,aAC4Ci9D,EAAK5kD,KAAOglD,EAAWr9D,OAAS,EAAIy+D,EAASz+D,SAEzF,MAAOuqC,KAEX,OAAO,2BAAK0yB,GAAZ,IAAkB5kD,KAAM4kD,EAAK5kD,KAAOglD,EAAWr9D,OAAS,EAAIy+D,EAASz+D,WAEvE,CAAEqY,KAAM,IAEZ+7B,EAAUY,QAAQ6nB,IA8dL6B,GAxaejlB,sBAC5B,WAcE1b,GACG,EAbDnH,UAaE,IAZOqE,EAYR,EAZDnE,QAOA2G,GAKC,EAXD5G,SAWC,EAVDj1B,SAUC,EATD+4B,OASC,EARD0hB,gBAQC,EAPD5jB,QAOC,EANDuhC,qBAMC,EALDv8B,UACAkhC,EAIC,EAJDA,YAKI7nC,GADH,mJACaxB,GAAU,CAAEwB,QAASmE,KADlC,EAGqBuE,oBAAS,GAH9B,mBAGI4B,EAHJ,KAGU4Y,EAHV,OAIiC/gB,IAAMuG,UAAS,GAJhD,mBAIIo/B,EAJJ,KAIgBC,EAJhB,OAKqBr/B,mBAAS,CAC/Bs/B,MAAOtlD,OAASulD,QAAQ,QAAQrlD,OAAO,cACvCslD,IAAKxlD,OAAS++B,MAAM,SAAS7+B,OAAO,gBAPnC,mBAKIulD,EALJ,KAKUC,EALV,KAcGnvB,EAAc,WAClB8uB,GAAc,IAGVx/C,EAAc,2NAuTpB,OACE,oCACE,kBAAC2b,GAAA,EAAD,CAAMpE,UAAWE,EAAQkC,MACvB,kBAACihC,GAAA,EAAD,CACEnjC,QAAS,CAAEvC,KAAMuC,EAAQ+iC,gBACzBsF,eApUgB,WACtBN,GAAc,IAoURphC,SAAUA,GAKV,kBAACy8B,GAAA,EAAD,CACE3sB,OACE,kBAACC,GAAA,EAAD,CAAQ0R,aAAW,YAAY1nB,QAAQ,UAAUV,QAAS,CAAEqjC,aAAcrjC,EAAQyW,SAChF,kBAAC,KAAD,OAGJtoB,MAzUG,4EA0UHm1C,qBAAsB,CAAE5iC,QAAS,aACjCV,QAAS,CAAEvC,KAAMuC,EAAQ4d,OAAQzvB,MAAO6R,EAAQ7R,SAGhD,kBAACuX,GAAA,EAAD,CAAa1F,QAAS,CAAEvC,KAAMuC,EAAQ8iC,cACpC,kBAAC1+B,GAAA,EAAD,CAAY1D,QAAQ,QAAQhhB,MAAM,iBAC/B6I,MAMX,kBAACggC,GAAA,EAAD,CAAQje,KAAMw9B,EAAYvuB,QAASN,EAAauP,kBAAgB,oBAAoB6L,SAAS,MAC3F,kBAAC5L,GAAA,EAAD,CAAaxzC,GAAG,qBAAhB,4GACA,kBAACyzC,GAAA,EAAD,KACE,kBAACC,GAAA,EAAD,wTACA,kBAAChjB,GAAA,EAAD,CACEjH,WAAS,EACT4pC,aAAa,SACbC,KAAK,SACLC,QAAQ,gBACRrnD,QAAS,EACTupB,MAAO,CAAE3G,aAAc,GAAI9E,UAAW,KAEtC,kBAAC0G,GAAA,EAAD,CAAM5wB,MAAI,GACR,kBAACozB,GAAA,EAAD,CACE3E,MAAM,kCACNv6B,KAAK,OACLy3B,QAAS,SACTh5B,MAAOygE,EAAKH,MACZrgC,SAAU,SAAC6F,GACT46B,EAAQ,2BAAKD,GAAN,IAAYH,MAAOx6B,EAAM11B,OAAOpQ,aAI7C,kBAACi+B,GAAA,EAAD,CAAM5wB,MAAI,GACR,kBAACozB,GAAA,EAAD,CACE3E,MAAM,wCACNv6B,KAAK,OACLy3B,QAAS,SACTh5B,MAAOygE,EAAKD,IACZvgC,SAAU,SAAC6F,GAAD,OAAW46B,EAAQ,2BAAKD,GAAN,IAAYD,IAAK16B,EAAM11B,OAAOpQ,eAKlE,kBAACmhD,GAAA,EAAD,KACE,kBAACpoB,GAAA,EAAD,CAAQsT,QAASkF,EAAav5B,MAAM,WAApC,8CAGA,kBAAC+gB,GAAA,EAAD,CAAQsT,QAzXI,WAClB8zB,GAAY,GACZ3kB,GAAQ,GACR6kB,GAAc,GAEd,IAAI5+D,QAAJ,uCAAY,WAAOoJ,EAASK,GAAhB,uDAAApF,EAAA,sEAMAi7D,GAAoB,IANpB,2BAERz5D,KACoCq1D,EAH5B,EAGNV,wBAA2BrrD,MACEwtD,EAJvB,EAINjC,mBAAsBvrD,MAJhB,SASAowD,GAAkB,CAC1BlgE,OAAQ,CACNS,KAAM,uBACNgnB,eAAgBvN,KAAOylD,EAAKH,OAAOC,QAAQ,OAAOzB,UAAU,SAC5Dt2C,eAAgBxN,KAAOylD,EAAKD,KAAKzmB,MAAM,OAAO+kB,UAAU,SAAS/kB,MAAM,UAEzEknB,UAAW,aACXC,UAAW,QAhBH,uBAQUC,EARV,EAQR75D,KAAQ85D,SARA,UAoBAJ,GAAkB,CAC1BlgE,OAAQ,CACNknB,SAAU,uBACVb,cAAenM,KAAOylD,EAAKH,OAAOxB,UAAU,SAASyB,QAAQ,OAC7Dn5C,cAAepM,KAAOylD,EAAKD,KAAK1B,UAAU,SAAS/kB,MAAM,QAE3DknB,UAAW,aACXC,UAAW,QA3BH,wBAmBUG,EAnBV,EAmBR/5D,KAAQ85D,SAWJA,EA9BI,sBA8BWC,GA9BX,YA8ByBF,IAC7BG,EAAqBF,EAASz/D,KAAI,SAAC82C,GAAD,mBAAC,eACpCA,GADmC,IAEtCimB,OACgB,yBAAdjmB,EAAKl3C,KACDyZ,KAAOy9B,EAAKnwB,YAAYw2C,UAAU,SAASyB,QAAQ,SACnDvlD,KAAOy9B,EAAKvxB,WAAW43C,UAAU,SAASyB,QAAQ,cAEpDgB,EAAqBnuB,KAAQkuB,EAAoB,wBACjDE,EAAqBpuB,KAAQmuB,EAAmB3hD,IAAK,UACrD6hD,EAAqBruB,KAAQmuB,EAAmB5hD,IAAK,UACrD+hD,EAAqBtuB,KAAQmuB,EAAmBr3C,iBAAkB,UAClEy3C,EAAuBvuB,KAAQmuB,EAAmB3gD,MAAO,UACzDghD,EAAuBxuB,KAAQupB,EAAY,SAE3CrnB,EAAW,IAAIC,KAAQC,UACpB30B,YAAc,2DACvBy0B,EAASG,QAAU,IAAI3tC,KACvBwtC,EAASI,SAAW,IAAI5tC,KACxBwtC,EAASK,YAAc,IAAI7tC,MAErB+5D,EAAevsB,EAASO,aAAa,uBAC9BC,MAAQ,CAAC,CAAErY,MAAO,SAAUsY,OAAQ,EAAGC,OAAQ,IAE5D6rB,EAAa5rB,QAAU,CACrB,CAAEC,OAAQ,uCAAUzyC,IAAK,SAAU0S,MAAO,IAC1C,CAAE+/B,OAAQ,+DAAczyC,IAAK,SAAU0S,MAAO,IAC9C,CAAE+/B,OAAQ,gEAAezyC,IAAK,WAAY0S,MAAO,IACjD,CAAE+/B,OAAQ,gEAAezyC,IAAK,WAAY0S,MAAO,IACjD,CAAE+/B,OAAQ,gEAAezyC,IAAK,YAAa0S,MAAO,IAClD,CAAE+/B,OAAQ,kFAAkBzyC,IAAK,YAAa0S,MAAO,IACrD,CAAE+/B,OAAQ,kFAAkBzyC,IAAK,YAAa0S,MAAO,IACrD,CAAE+/B,OAAQ,kFAAkBzyC,IAAK,aAAc0S,MAAO,IACtD,CAAE+/B,OAAQ,6CAAWzyC,IAAK,WAAY0S,MAAO,IAC7C,CAAE+/B,OAAQ,6CAAWzyC,IAAK,WAAY0S,MAAO,IAC7C,CAAE+/B,OAAQ,6CAAWzyC,IAAK,YAAa0S,MAAO,IAC9C,CAAE+/B,OAAQ,uCAAUzyC,IAAK,WAAY0S,MAAO,IAC5C,CAAE+/B,OAAQ,uCAAUzyC,IAAK,WAAY0S,MAAO,IAC5C,CAAE+/B,OAAQ,uCAAUzyC,IAAK,YAAa0S,MAAO,KAG/C0rD,EAAarC,OAAO,CAClB,uCACA,+DACA,2BACA,2BACA,uCACA,2BACA,2BACA,uCACA,2BACA,2BACA,uCACA,2BACA,2BACA,yCAGFqC,EAAajC,WAAW,SACxBiC,EAAajC,WAAW,SACxBiC,EAAajC,WAAW,SACxBiC,EAAajC,WAAW,SACxBiC,EAAajC,WAAW,SACxBiC,EAAajC,WAAW,SAExBiC,EAAa/E,OAAO,GAAGE,UACrB,SAACC,GAAD,OACGA,EAAKj6B,MAAQ,CACZvrB,UAAW,CAAEi6C,WAAY,SAAUD,SAAU,UAC7CsL,KAAM,CAAExlD,MAAM,OAGpBsqD,EAAa/E,OAAO,GAAGE,UACrB,SAACC,GAAD,OACGA,EAAKj6B,MAAQ,CACZvrB,UAAW,CAAEi6C,WAAY,SAAUD,SAAU,UAC7CsL,KAAM,CAAExlD,MAAM,OAIpB2mD,GAAe2D,EAAcL,EAAoBpD,EAAiBwD,EAAqBhiD,MAEjFkiD,EAAexsB,EAASO,aAAa,uBAC9BC,MAAQ,CAAC,CAAErY,MAAO,SAAUsY,OAAQ,EAAGC,OAAQ,IAE5D8rB,EAAa7rB,QAAU,CACrB,CAAEC,OAAQ,uCAAUzyC,IAAK,SAAU0S,MAAO,IAC1C,CAAE+/B,OAAQ,+DAAczyC,IAAK,SAAU0S,MAAO,IAC9C,CAAE+/B,OAAQ,gEAAezyC,IAAK,WAAY0S,MAAO,IACjD,CAAE+/B,OAAQ,gEAAezyC,IAAK,WAAY0S,MAAO,IACjD,CAAE+/B,OAAQ,gEAAezyC,IAAK,YAAa0S,MAAO,IAClD,CAAE+/B,OAAQ,kFAAkBzyC,IAAK,YAAa0S,MAAO,IACrD,CAAE+/B,OAAQ,kFAAkBzyC,IAAK,YAAa0S,MAAO,IACrD,CAAE+/B,OAAQ,kFAAkBzyC,IAAK,aAAc0S,MAAO,IACtD,CAAE+/B,OAAQ,6CAAWzyC,IAAK,WAAY0S,MAAO,IAC7C,CAAE+/B,OAAQ,6CAAWzyC,IAAK,WAAY0S,MAAO,IAC7C,CAAE+/B,OAAQ,6CAAWzyC,IAAK,YAAa0S,MAAO,IAC9C,CAAE+/B,OAAQ,uCAAUzyC,IAAK,WAAY0S,MAAO,IAC5C,CAAE+/B,OAAQ,uCAAUzyC,IAAK,WAAY0S,MAAO,IAC5C,CAAE+/B,OAAQ,uCAAUzyC,IAAK,YAAa0S,MAAO,KAG/C2rD,EAAatC,OAAO,CAClB,uCACA,+DACA,2BACA,2BACA,uCACA,2BACA,2BACA,uCACA,2BACA,2BACA,uCACA,2BACA,2BACA,yCAGFsC,EAAalC,WAAW,SACxBkC,EAAalC,WAAW,SACxBkC,EAAalC,WAAW,SACxBkC,EAAalC,WAAW,SACxBkC,EAAalC,WAAW,SACxBkC,EAAalC,WAAW,SAExBkC,EAAahF,OAAO,GAAGE,UACrB,SAACC,GAAD,OACGA,EAAKj6B,MAAQ,CACZvrB,UAAW,CAAEi6C,WAAY,SAAUD,SAAU,UAC7CsL,KAAM,CAAExlD,MAAM,OAGpBuqD,EAAahF,OAAO,GAAGE,UACrB,SAACC,GAAD,OACGA,EAAKj6B,MAAQ,CACZvrB,UAAW,CAAEi6C,WAAY,SAAUD,SAAU,UAC7CsL,KAAM,CAAExlD,MAAM,OAIpB2mD,GAAe4D,EAAcL,EAAoBrD,EAAiBwD,EAAqBjiD,MAEjFoiD,EAAezsB,EAASO,aAAa,mHAC9BC,MAAQ,CAAC,CAAErY,MAAO,SAAUsY,OAAQ,EAAGC,OAAQ,IAE5D+rB,EAAa9rB,QAAU,CACrB,CAAEC,OAAQ,uCAAUzyC,IAAK,SAAU0S,MAAO,IAC1C,CAAE+/B,OAAQ,+DAAczyC,IAAK,SAAU0S,MAAO,IAC9C,CAAE+/B,OAAQ,kFAAkBzyC,IAAK,YAAa0S,MAAO,IACrD,CAAE+/B,OAAQ,kFAAkBzyC,IAAK,YAAa0S,MAAO,IACrD,CAAE+/B,OAAQ,kFAAkBzyC,IAAK,aAAc0S,MAAO,KAGxD4rD,EAAavC,OAAO,CAAC,uCAAU,+DAAc,2BAAQ,2BAAQ,yCAE7DuC,EAAanC,WAAW,SACxBmC,EAAanC,WAAW,SACxBmC,EAAanC,WAAW,SAExBmC,EAAajF,OAAO,GAAGE,UACrB,SAACC,GAAD,OACGA,EAAKj6B,MAAQ,CACZvrB,UAAW,CAAEi6C,WAAY,SAAUD,SAAU,UAC7CsL,KAAM,CAAExlD,MAAM,OAGpBwqD,EAAajF,OAAO,GAAGE,UACrB,SAACC,GAAD,OACGA,EAAKj6B,MAAQ,CACZvrB,UAAW,CAAEi6C,WAAY,SAAUD,SAAU,UAC7CsL,KAAM,CAAExlD,MAAM,OAIpB2mD,GAAe6D,EAAcL,EAAoBtD,EAAiBwD,EAAqB13C,iBAAkB,CACvG,4BAGI83C,EAAiB1sB,EAASO,aAAa,yCAC9BC,MAAQ,CAAC,CAAErY,MAAO,SAAUsY,OAAQ,EAAGC,OAAQ,IAE9DgsB,EAAe/rB,QAAU,CACvB,CAAEC,OAAQ,uCAAUzyC,IAAK,SAAU0S,MAAO,IAC1C,CAAE+/B,OAAQ,+DAAczyC,IAAK,SAAU0S,MAAO,IAC9C,CAAE+/B,OAAQ,kFAAkBzyC,IAAK,YAAa0S,MAAO,IACrD,CAAE+/B,OAAQ,kFAAkBzyC,IAAK,YAAa0S,MAAO,IACrD,CAAE+/B,OAAQ,kFAAkBzyC,IAAK,aAAc0S,MAAO,IACtD,CAAE+/B,OAAQ,6CAAWzyC,IAAK,WAAY0S,MAAO,IAC7C,CAAE+/B,OAAQ,6CAAWzyC,IAAK,WAAY0S,MAAO,IAC7C,CAAE+/B,OAAQ,6CAAWzyC,IAAK,YAAa0S,MAAO,IAC9C,CAAE+/B,OAAQ,uCAAUzyC,IAAK,WAAY0S,MAAO,IAC5C,CAAE+/B,OAAQ,uCAAUzyC,IAAK,WAAY0S,MAAO,IAC5C,CAAE+/B,OAAQ,uCAAUzyC,IAAK,YAAa0S,MAAO,KAG/C6rD,EAAexC,OAAO,CACpB,uCACA,+DACA,2BACA,2BACA,uCACA,2BACA,2BACA,uCACA,2BACA,2BACA,yCAGFwC,EAAepC,WAAW,SAC1BoC,EAAepC,WAAW,SAC1BoC,EAAepC,WAAW,SAC1BoC,EAAepC,WAAW,SAC1BoC,EAAepC,WAAW,SAE1BoC,EAAelF,OAAO,GAAGE,UACvB,SAACC,GAAD,OACGA,EAAKj6B,MAAQ,CACZvrB,UAAW,CAAEi6C,WAAY,SAAUD,SAAU,UAC7CsL,KAAM,CAAExlD,MAAM,OAGpByqD,EAAelF,OAAO,GAAGE,UACvB,SAACC,GAAD,OACGA,EAAKj6B,MAAQ,CACZvrB,UAAW,CAAEi6C,WAAY,SAAUD,SAAU,UAC7CsL,KAAM,CAAExlD,MAAM,OAIpB2mD,GAAe8D,EAAgBL,EAAsBvD,EAAiBwD,EAAqBhhD,MAAO,CAChG,yBACA,eACA,oBAxQQ,kBA2QH00B,EAASmB,KACbC,cACA30C,MAAK,SAACuF,GACL,IAAMjG,EAAO,IAAIC,KAAK,CAACgG,GAAO,CAC5B/F,KAAM,sEAER,GAAIW,OAAOy0C,WAAaz0C,OAAOy0C,UAAUC,iBACvC10C,OAAOy0C,UAAUC,iBAAiBv1C,EAAM,qHACnC,CACL,IAAMY,EAAMC,OAAOC,IAAIC,gBAAgBf,GACjCyE,EAAItG,SAASq3C,cAAc,KACjCr3C,SAASiZ,KAAKq+B,YAAYhxC,GAC1BA,EAAEixC,KAAO90C,EACT6D,EAAEkrB,SAAW,gHACblrB,EAAEkxC,QACF90C,OAAOC,IAAI80C,gBAAgBh1C,GAC3BzC,SAASiZ,KAAKy+B,YAAYpxC,OAG7B/D,MAAK,WACJ8I,OApBG,OAsBE,SAACkhC,GACN7gC,EAAO6gC,OAlSD,4CAAZ,yDAqSGhqC,MAAK,WACJo+D,GAAY,GACZ3kB,GAAQ,MAvSZ,OAySS,SAACzP,GACNtpC,QAAQC,IAAIqpC,GACZo0B,GAAY,GACZ3kB,GAAQ,OAwEwBxjC,MAAM,WAApC,+EAKJ,kBAACiqD,GAAD,CAAsBx6D,QAAQ,kKAAgCm7B,KAAMA,QCtzBtE9L,GAAYC,cAChB,SAAChC,GAAD,MAAY,CACViC,UAAW,CACTC,QAAS,OACTC,cAAe,SACfC,eAAgB,SAChBI,UAAW,IAEbC,KAAM,CACJrhB,MAAO,MACPC,OAAQ,OAEV3O,QAAS,CACPgwB,UAAW,SACXC,WAAY,qBACZC,QAAS,GACTf,OAAQ,YAGZ,CAAEt3B,KAAM,kBAGJ4iE,GAAU,SAAC,GAA+E,IAApEzlC,EAAmE,EAA5EnE,QAA0BF,EAAkD,EAAlDA,UAAW+pC,EAAuC,EAAvCA,eAAgBC,EAAuB,EAAvBA,iBAChE9pC,EAAUxB,GAAU,CAAEwB,QAASmE,IAC/B/D,EAAYC,eAClB,OACE,yBAAKP,UAAS,UAAKE,EAAQtB,UAAb,YAA0BoB,IACtC,yBAAKA,UAAWE,EAAQ7wB,SACtB,kBAAC+kC,GAAA,EAAD,CAAkBpU,UAAWE,EAAQd,KAAMxf,MAAM,YAChDmqD,GAAkB,4BAAKzpC,EAAUypC,IACjCC,GAAoB,6BAAM1pC,EAAU0pC,OAa7CF,GAAQtnC,aAAe,CACrBunC,eAAgB,kBAChBC,iBAAkB,sBAGLF,I,qBChDTprC,GAAYC,cAChB,SAAChC,GAAD,MAAY,CACViC,UAAW,CACTC,QAAS,OACTC,cAAe,SACfC,eAAgB,SAChBI,UAAW,IAEbC,KAAM,CACJrhB,MAAO,GACPC,OAAQ,IAEV3O,QAAS,CACPgwB,UAAW,SACXC,WAAY,qBACZC,QAAS,GACTf,OAAQ,YAGZ,CAAEt3B,KAAM,kBAGJkI,GAAQ,SAAC,GAAkE,IAAvDi1B,EAAsD,EAA/DnE,QAA0BF,EAAqC,EAArCA,UAAWiqC,EAA0B,EAA1BA,aAAc7/D,EAAY,EAAZA,MAC5D81B,EAAUxB,GAAU,CAAEwB,QAASmE,IAC/B/D,EAAYC,eAClB,OACE,yBAAKP,UAAS,UAAKE,EAAQtB,UAAb,YAA0BoB,IACtC,yBAAKA,UAAWE,EAAQ7wB,SACtB,kBAAC,KAAD,CAAa2wB,UAAWE,EAAQd,OAC/B6qC,GAAgB,4BAAK3pC,EAAU2pC,IAC/B7/D,EAAMiF,SAAW,6BAAMjF,EAAMiF,YAYtCD,GAAMozB,aAAe,CACnBynC,aAAc,iBCtCEtrC,cAAW,SAACurC,GAAD,MAAY,CACvCvsC,KAAM,CACJ,UAAW,CACT5f,MAAO,OACPkmB,aAAc,OAEhB,qBAAsB,CACpBA,aAAc,GAEhB,kBAAmB,CACjBvkB,OAAQ,oBACRyqD,eAAgB,YAElB,aAAc,CACZpsC,QAAS,EACTsB,UAAW,SACXyL,WAAY,MAGhBs/B,QAAS,CACP/qC,UAAW,QACX4E,aAAc,ODoBH70B,IEpCTsvB,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyF,KAAM,GACN4gC,YAAa,CACXvzB,WAAY,EACZzxB,OAAQ,OAEVilD,eAAgB,CACdjlD,OAAQ,OACR6gB,QAAS,OACTC,cAAe,SACfC,eAAgB,iBAElB+e,OAAQ,CACN9/B,OAAQ,MACR6gB,QAAS,OACTE,eAAgB,aAChBhhB,MAAO,OACP6nD,UAAW,cAEbv3C,MAAO,CACLyc,WAAY,IACZia,WAAY,MAEdpO,OAAQ,CACN/2B,MAAO+c,EAAME,QAAQK,UAAU3O,KAC/BqP,gBAAiBujB,gBAAKxkB,EAAME,QAAQK,UAAU3O,KAAM,UAIlDu3C,GAAiB,SAACtoB,EAAW6sB,EAAc9F,GAC/C/mB,EAAUE,MAAQ,CAAC,CAAErY,MAAO,SAAUsY,OAAQ,EAAGC,OAAQ,IAEzDJ,EAAUK,QAAU,CAClB,CAAEC,OAAQ,SAAKzyC,IAAK,SAAU0S,MAAO,GACrC,CAAE+/B,OAAQ,uCAAUzyC,IAAK,SAAU0S,MAAO,IAC1C,CAAE+/B,OAAQ,gHAAuBzyC,IAAK,cAAe0S,MAAO,IAC5D,CAAE+/B,OAAQ,kFAAkBzyC,IAAK,QAAS0S,MAAO,IACjD,CAAE+/B,OAAQ,kFAAkBzyC,IAAK,QAAS0S,MAAO,KAGnDy/B,EAAU4pB,OAAO,CAAC,SAAK,uCAAU,gHAAuB,+DAAc,yCAEtE5pB,EAAUgqB,WAAW,SACrBhqB,EAAUgqB,WAAW,SACrBhqB,EAAUgqB,WAAW,SACrBhqB,EAAUgqB,WAAW,SAErBhqB,EAAUknB,OAAO,GAAGE,UAClB,SAACC,GAAD,OACGA,EAAKj6B,MAAQ,CACZvrB,UAAW,CAAEi6C,WAAY,SAAUD,SAAU,UAC7CsL,KAAM,CAAExlD,MAAM,OAGpBq+B,EAAUknB,OAAO,GAAGE,UAClB,SAACC,GAAD,OACGA,EAAKj6B,MAAQ,CACZvrB,UAAW,CAAEi6C,WAAY,SAAUD,SAAU,UAC7CsL,KAAM,CAAExlD,MAAM,OAIpB,IAAM8mD,EAAO,GACPqE,EAAQ,GACRC,EAAkB,GAExBF,EAAaj/D,SAAQ,SAAC2U,EAAUoC,GAC9B,IAAMsuC,EAAU8T,EAAaA,EAAW77D,QAAO,SAAC8lB,GAAD,OAAYzO,EAAS5K,KAAOqZ,EAAO/H,OAAOtR,MAAM,GAC/Fo1D,EAAgBpuB,KAAhB,MAAAouB,EAAe,YAAS9Z,IACxB,IAAM+Z,EAAmB/Z,EAAQ/nD,QAAO,SAAC8lB,GAAD,OAAYA,EAAOnQ,MAAQmQ,EAAOnQ,KAAKjV,UACzE09D,EAAUrW,EAAQrnD,QACqC,KAAvDohE,EAAiBphE,OAASqnD,EAAQrnD,QAAQ49D,QAAQ,IAAUA,QAAQ,GAAG9P,WAAa,IACtF,KACJ+O,EAAK9pB,KAAK,CAACh6B,EAAQ,EAAGpC,EAAS4G,iBAAkB8pC,EAAQrnD,OAAQohE,EAAiBphE,OAAQ09D,OAE5FtpB,EAAUY,QAAQ6nB,GAElB,IAAMwE,EAAsBF,EACxBA,EAAgB7hE,QAAO,SAAC8lB,GAAD,OAAYA,EAAOnQ,MAAQmQ,EAAOnQ,KAAKjV,UAC9D,GAEJkhE,EAAMnuB,KAAK,CACT,kCACA,GACAouB,EAAgBnhE,OAChBqhE,EAAoBrhE,QAC6E,KAA/FmhE,EAAgBnhE,OAASqhE,EAAoBrhE,OAASmhE,EAAgBnhE,OAAS,GAAG49D,QAAQ,IACzFA,QAAQ,GACR9P,WAAa,MAGlB1Z,EAAUY,QAAQksB,GAClB9sB,EAAUgqB,WAAV,WAAyBvB,EAAK78D,OAAS,EAAvC,aAA6C68D,EAAK78D,OAAS,IAC3Do0C,EAAUoqB,QAAV,WAAsB3B,EAAK78D,OAAS,IAAKwhC,MAAQ,CAAE+5B,KAAM,CAAExlD,MAAM,KAsIpDurD,GAnIS7nB,sBACtB,WAcE1b,GACG,EAbDnH,UAaE,IAZOqE,EAYR,EAZDnE,QAOA2G,GAKC,EAXD5G,SAWC,EAVDj1B,SAUC,EATD+4B,OASC,EARD0hB,gBAQC,EAPD5jB,QAOC,EANDuhC,qBAMC,EALDv8B,UACAkhC,EAIC,EAJDA,YAKI7nC,GADH,mJACaxB,GAAU,CAAEwB,QAASmE,KADlC,EAGqBuE,oBAAS,GAH9B,mBAGI4B,EAHJ,KAGU4Y,EAHV,KAIG/wC,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAE1C7c,EAAc,oSAyEpB,OACE,oCACE,kBAAC2b,GAAA,EAAD,CAAMpE,UAAWE,EAAQkC,MACvB,kBAACihC,GAAA,EAAD,CACEnjC,QAAS,CAAEvC,KAAMuC,EAAQ+iC,gBACzBsF,eA5EY,WAClBR,GAAY,GACZ3kB,GAAQ,GAER,IAAI/5C,QAAJ,uCAAY,WAAOoJ,EAASK,GAAhB,6BAAApF,EAAA,sEAMAi7D,GAAoB,IANpB,2BAERz5D,KACoCq1D,EAH5B,EAGNV,wBAA2BrrD,MACL6xD,EAJhB,EAINvJ,YAAetoD,MAIbmyD,EAAuB3vB,KAAQupB,EAAY,SAE3CrnB,EAAW,IAAIC,KAAQC,UACpB30B,YAAc,2DACvBy0B,EAASG,QAAU,IAAI3tC,KACvBwtC,EAASI,SAAW,IAAI5tC,KACxBwtC,EAASK,YAAc,IAAI7tC,KAErB+5D,EAAevsB,EAASO,aAAa,sBACrCisB,EAAexsB,EAASO,aAAa,sBAE3CqoB,GACE2D,EACAY,EAAa3hE,QAAO,SAAC+d,GAAD,OAAYpU,EAAK6gB,QAAQ3f,SAASkT,EAAOtR,OAC7Dw1D,EAAqBnjD,KAEvBs+C,GACE4D,EACAW,EAAa3hE,QAAO,SAAC+d,GAAD,OAAYpU,EAAK6gB,QAAQ3f,SAASkT,EAAOtR,OAC7Dw1D,EAAqBpjD,KA3Bb,kBA8BH21B,EAASmB,KACbC,cACA30C,MAAK,SAACuF,GACL,IAAMjG,EAAO,IAAIC,KAAK,CAACgG,GAAO,CAC5B/F,KAAM,sEAER,GAAIW,OAAOy0C,WAAaz0C,OAAOy0C,UAAUC,iBACvC10C,OAAOy0C,UAAUC,iBAAiBv1C,EAAM,4HACnC,CACL,IAAMY,EAAMC,OAAOC,IAAIC,gBAAgBf,GACjCyE,EAAItG,SAASq3C,cAAc,KACjCr3C,SAASiZ,KAAKq+B,YAAYhxC,GAC1BA,EAAEixC,KAAO90C,EACT6D,EAAEkrB,SAAW,uHACblrB,EAAEkxC,QACF90C,OAAOC,IAAI80C,gBAAgBh1C,GAC3BzC,SAASiZ,KAAKy+B,YAAYpxC,OAG7B/D,MAAK,WACJ8I,OApBG,OAsBE,SAACkhC,GACN7gC,EAAO6gC,OArDD,4CAAZ,yDAwDGhqC,MAAK,WACJo+D,GAAY,GACZ3kB,GAAQ,MA1DZ,OA4DS,SAACzP,GACNtpC,QAAQC,IAAIqpC,GACZo0B,GAAY,GACZ3kB,GAAQ,OAUNvc,SAAUA,GAKV,kBAACy8B,GAAA,EAAD,CACE3sB,OACE,kBAACC,GAAA,EAAD,CAAQ0R,aAAW,YAAY1nB,QAAQ,UAAUV,QAAS,CAAEqjC,aAAcrjC,EAAQyW,SAChF,kBAAC,KAAD,OAGJtoB,MA3FG,gEA4FHm1C,qBAAsB,CAAE5iC,QAAS,aACjCV,QAAS,CAAEvC,KAAMuC,EAAQ4d,OAAQzvB,MAAO6R,EAAQ7R,SAGhD,kBAACuX,GAAA,EAAD,CAAa1F,QAAS,CAAEvC,KAAMuC,EAAQ8iC,cACpC,kBAAC1+B,GAAA,EAAD,CAAY1D,QAAQ,QAAQhhB,MAAM,iBAC/B6I,MAMX,kBAACohD,GAAD,CAAsBx6D,QAAQ,sJAA8Bm7B,KAAMA,Q,ooCCzOnE,IAAMk5B,GAAsBn1D,IAAH,MAUnBo1D,GAAkBp1D,IAAH,MA6Cfq8D,GAAwB,SAAC13C,GACpC,OAAOnQ,GACJ1S,MAAM,CACLA,MAAOqzD,GACP/0D,UAAW,CAAEukB,WACbrhB,YAAa,eACbjD,QAAS,SAACxE,GACRyE,MAAMzE,MAGTT,MAAK,YAA4C,IAAjCk6D,EAAgC,EAAxC30D,KAAQ20D,wBACf,OAAO9gD,GAAoB1S,MAAM,CAC/BA,MAAOszD,GACPh1D,UAAW,CAAEukB,UAAS+wC,aAAcJ,EAAwBprD,SAASE,YACrE9G,YAAa,eACbjD,QAAS,SAACxE,GACRyE,MAAMzE,SAfP,OAmBE,SAACA,GAEN,OADAC,QAAQC,IAAIF,GACLA,MChEPs0B,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyF,KAAM,GACN4gC,YAAa,CACXvzB,WAAY,EACZzxB,OAAQ,OAEVilD,eAAgB,CACdjlD,OAAQ,OACR6gB,QAAS,OACTC,cAAe,SACfC,eAAgB,iBAElB+e,OAAQ,CACN9/B,OAAQ,MACR6gB,QAAS,OACTE,eAAgB,aAChBhhB,MAAO,OACP6nD,UAAW,cAEbv3C,MAAO,CACLyc,WAAY,IACZia,WAAY,MAEdpO,OAAQ,CACN/2B,MAAO+c,EAAME,QAAQK,UAAU3O,KAC/BqP,gBAAiBujB,gBAAKxkB,EAAME,QAAQK,UAAU3O,KAAM,UAIlDu3C,GAAiB,SAACtoB,EAAW+mB,EAAYjkC,GAC7C,GAAKikC,EAAL,CAEA/mB,EAAUE,MAAQ,CAAC,CAAErY,MAAO,SAAUsY,OAAQ,EAAGC,OAAQ,IAEzD,IAAMitB,EAAa,CACjBrjD,IAAK,qBACLD,IAAK,mCAGPi2B,EAAUK,QAAU,CAClB,CAAEC,OAAQ,sDAAezyC,IAAK,OAAQ0S,MAAO,IAC7C,CAAE+/B,OAAQ,mDAAYzyC,IAAK,cAAe0S,MAAO,IACjD,CAAE+/B,OAAQ,sJAA+BzyC,IAAK,YAAa0S,MAAO,IAClE,CAAE+/B,OAAQ,oGAAqBzyC,IAAK,kBAAmB0S,MAAO,IAC9D,CAAE+/B,OAAQ,8BAAWzyC,IAAK,OAAQ0S,MAAO,IACzC,CAAE+/B,OAAQ,8BAAWzyC,IAAK,OAAQ0S,MAAO,IACzC,CAAE+/B,OAAQ,qCAAazyC,IAAK,QAAS0S,MAAO,IAC5C,CAAE+/B,OAAQ,4IAA+BzyC,IAAK,MAAO0S,MAAO,IAC5D,CAAE+/B,OAAQ,kOAA+CzyC,IAAK,SAAU0S,MAAO,IAC/E,CAAE+/B,OAAQ,6DAAiBzyC,IAAK,QAAS0S,MAAO,IAChD,CAAE+/B,OAAQ,oKAAmCzyC,IAAK,MAAO0S,MAAO,IAChE,CAAE+/B,OAAQ,4LAAuCzyC,IAAK,WAAY0S,MAAO,IACzE,CAAE+/B,OAAQ,oLAAoCzyC,IAAK,UAAW0S,MAAO,IACrE,CAAE+/B,OAAQ,0LAAqCzyC,IAAK,eAAgB0S,MAAO,IAC3E,CAAE+/B,OAAQ,4HAAyBzyC,IAAK,YAAa0S,MAAO,KAG9Dy/B,EAAUknB,OAAO,GAAGE,UAAS,SAACC,EAAMwC,GAClCxC,EAAKj6B,MAAQ,CACXvrB,UAAW,CAAEi6C,WAAY,OAAQD,SAAU,OAC3CsL,KAAM,CAAExlD,MAAM,OAGlBq+B,EAAUknB,OAAO,GAAG1mD,OAAS,GAE7BumD,EAAWn5D,SAAQ,SAACojB,EAAQrM,GAC1B,IAAMhZ,EAAO0hE,EAAWr8C,EAAOrlB,MACzB6W,EAAcwO,EAAOgI,cAAgBhI,EAAOgI,aAAatvB,KACzDA,EAAI,UAAMsnB,EAAOtnB,MAAb,OAAoBsnB,EAAO1O,WAAP,YAAyB0O,EAAO1O,YAAe,IACvE4I,EAAkB8F,EAAO9F,gBACzBG,EAAS2F,EAAO3F,OAGhBiiD,EAASt8C,EAAOnQ,MAAQmQ,EAAOnQ,KAAKjV,OAAS,EAAI,eAAO,qBAExD2hE,EAAUv8C,EAAOjmB,OAASimB,EAAOjmB,MAAMa,OAAS,EAAI,eAAO,qBAE3D4hE,EAAYx8C,EAAOjM,SAAWiM,EAAOjM,QAAQnZ,OAAS,EAAI,eAAO,qBACjEmZ,EACJiM,EAAOjM,SAAWiM,EAAOjM,QAAQnZ,OAAS,EACtColB,EAAOjM,QAAQ/N,QAAO,SAACrK,EAAQqY,EAAQL,GACrC,OAAOhY,EAAM,UAAgB,IAAVgY,EAAc,KAAO,IAA3B,OAAgCK,EAAOtb,QACnD,IACH,GAEA0hB,EACJ4F,EAAO5F,YAAc4F,EAAO5F,WAAWxf,OAAS,EAC5ColB,EAAO5F,WAAWpU,QAAO,SAACrK,EAAQ+X,EAAWC,GAC3C,OACEhY,EAAM,UACO,IAAVgY,EAAc,KAAO,IADlB,OACuBme,EAAU,2CAAD,OAA4Cpe,EAAU/Y,OADtF,YAEJ+Y,EAAUhb,KAAOgb,EAAUhb,KAAO,GAF9B,YAGFgb,EAAU+G,cAAgB/G,EAAU+G,cAAgB,MAEzD,IACH,GAEAmmC,EAAM5R,EAAU4pB,OAAO,CAC3Bj+D,EACA6W,EACA9Y,EACAwhB,EACAG,EA/Ba,GACC,GAiCdiiD,EA/ByB,GAiCzBC,EA/B6B,GAiC7BC,EACAzoD,EA1BkB,GA4BlBqG,IAEFwmC,EAAIpxC,OACuG,GAAzGE,KAAKC,IAAIqQ,EAAOjM,QAAUiM,EAAOjM,QAAQnZ,OAAS,EAAGolB,EAAO5F,WAAa4F,EAAO5F,WAAWxf,OAAS,IAAW,GACjHgmD,EAAIwV,UAAS,SAACC,EAAMwC,GACd,CAAC,EAAG,EAAG,GAAI,IAAI9zD,SAAS8zD,GAC1BxC,EAAKj6B,MAAQ,CACXvrB,UAAW,CACTg6C,SAAU,MACV4R,UAAU,IAIdpG,EAAKj6B,MAAQ,CACXvrB,UAAW,CACTg6C,SAAU,gBAmIPqR,GA3HS7nB,sBACtB,WAcE1b,GACG,EAbDnH,UAaE,IAZOqE,EAYR,EAZDnE,QAOA2G,GAKC,EAXD5G,SAWC,EAVDj1B,SAUC,EATD+4B,OASC,EARD0hB,gBAQC,EAPD5jB,QAOC,EANDuhC,qBAMC,EALDv8B,UACAkhC,EAIC,EAJDA,YAKI7nC,GADH,mJACaxB,GAAU,CAAEwB,QAASmE,KAC/B/D,EAAYC,eAFf,EAGqBqI,oBAAS,GAH9B,mBAGI4B,EAHJ,KAGU4Y,EAHV,KAIG/wC,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpS,EAAU7gB,EAAOA,EAAK6gB,QAAU,GAGhCzK,EAAc,uOA+DpB,OACE,oCACE,kBAAC2b,GAAA,EAAD,CAAMpE,UAAWE,EAAQkC,MACvB,kBAACihC,GAAA,EAAD,CACEnjC,QAAS,CAAEvC,KAAMuC,EAAQ+iC,gBACzBsF,eAlEY,WAClBR,GAAY,GACZ3kB,GAAQ,GAER,IAAI/5C,QAAJ,uCAAY,WAAOoJ,EAASK,GAAhB,qBAAApF,EAAA,sEAKAk9D,GAAsB13C,EAAQ3pB,KAAI,SAAC4L,GAAD,MAAS,CAAEA,UAL7C,uBAG4Bs7C,EAH5B,EAERvhD,KACE20D,wBAA2BrrD,MAIzB0yD,EAAkBlwB,KAAQyV,EAAS,4BAEnCvT,EAAW,IAAIC,KAAQC,UACpBC,QAAU,IAAI3tC,KACvBwtC,EAASI,SAAW,IAAI5tC,KACxBwtC,EAASK,YAAc,IAAI7tC,KAE3BxE,OAAOC,KAAK+/D,GAAiB9/D,SAAQ,SAACwb,EAAYzE,GAChD,IAAMgpD,EAAgBD,EAAgBtkD,GAChC42B,EAAYN,EAASO,aAAa72B,GACxCk/C,GAAetoB,EAAW2tB,EAAe7qC,MAjBjC,kBAoBH4c,EAASmB,KACbC,cACA30C,MAAK,SAACuF,GACL,IAAMjG,EAAO,IAAIC,KAAK,CAACgG,GAAO,CAC5B/F,KAAM,sEAER,GAAIW,OAAOy0C,WAAaz0C,OAAOy0C,UAAUC,iBACvC10C,OAAOy0C,UAAUC,iBAAiBv1C,EAAM,6IACnC,CACL,IAAMY,EAAMC,OAAOC,IAAIC,gBAAgBf,GACjCyE,EAAItG,SAASq3C,cAAc,KACjCr3C,SAASiZ,KAAKq+B,YAAYhxC,GAC1BA,EAAEixC,KAAO90C,EACT6D,EAAEkrB,SAAW,wIACblrB,EAAEkxC,QACF90C,OAAOC,IAAI80C,gBAAgBh1C,GAC3BzC,SAASiZ,KAAKy+B,YAAYpxC,OAG7B/D,MAAK,WACJ8I,OApBG,OAsBE,SAACkhC,GACN7gC,EAAO6gC,OA3CD,4CAAZ,yDA8CGhqC,MAAK,WACJo+D,GAAY,GACZ3kB,GAAQ,MAhDZ,OAkDS,SAACzP,GACNtpC,QAAQC,IAAIqpC,GACZo0B,GAAY,GACZ3kB,GAAQ,OAUNvc,SAAUA,GAKV,kBAACy8B,GAAA,EAAD,CACE3sB,OACE,kBAACC,GAAA,EAAD,CAAQ0R,aAAW,YAAY1nB,QAAQ,UAAUV,QAAS,CAAEqjC,aAAcrjC,EAAQyW,SAChF,kBAAC,KAAD,OAGJtoB,MAjFG,mIAkFHm1C,qBAAsB,CAAE5iC,QAAS,aACjCV,QAAS,CAAEvC,KAAMuC,EAAQ4d,OAAQzvB,MAAO6R,EAAQ7R,SAGhD,kBAACuX,GAAA,EAAD,CAAa1F,QAAS,CAAEvC,KAAMuC,EAAQ8iC,cACpC,kBAAC1+B,GAAA,EAAD,CAAY1D,QAAQ,QAAQhhB,MAAM,iBAC/B6I,MAMX,kBAACohD,GAAD,CAAsBx6D,QAAQ,0LAAoCm7B,KAAMA,QClP1E9L,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyF,KAAM,GACN4gC,YAAa,CACXvzB,WAAY,EACZzxB,OAAQ,OAEVilD,eAAgB,CACdjlD,OAAQ,OACR6gB,QAAS,OACTC,cAAe,SACfC,eAAgB,iBAElB+e,OAAQ,CACN9/B,OAAQ,MACR6gB,QAAS,OACTE,eAAgB,aAChBhhB,MAAO,OACP6nD,UAAW,cAEbv3C,MAAO,CACLyc,WAAY,IACZia,WAAY,MAEdpO,OAAQ,CACN/2B,MAAO+c,EAAME,QAAQK,UAAU3O,KAC/BqP,gBAAiBujB,gBAAKxkB,EAAME,QAAQK,UAAU3O,KAAM,UAIlD68C,GAAa,CACjB,kMACA,+PACA,miBACA,mWACA,sOACA,uZACA,8ZACA,yNACA,mNACA,0LACA,oQACA,uPACA,sMACA,uPACA,yQACA,oNAGIC,GAAa,CACjB,kMACA,+PACA,miBACA,mWACA,sOACA,uZACA,8ZACA,yNACA,mNACA,0LACA,oQACA,+QACA,2OACA,yPACA,gJACA,6JACA,mNACA,mSACA,sMACA,qOACA,mNACA,kMACA,uPACA,0dACA,yQACA,oNAGIvF,GAAiB,SAACtoB,EAAW+mB,EAAYyE,EAAU1oC,GACvDkd,EAAUE,MAAQ,CAAC,CAAErY,MAAO,SAAUsY,OAAQ,EAAGC,OAAQ,IAEzDJ,EAAUK,QAAU,CAClB,CAAEC,OAAQ,IAAKzyC,IAAK,IAAK0S,MAAO,IAChC,CAAE+/B,OAAQ,IAAKzyC,IAAK,IAAK0S,MAAO,IAChC,CAAE+/B,OAAQ,IAAKzyC,IAAK,IAAK0S,MAAO,IAChC,CAAE+/B,OAAQ,IAAKzyC,IAAK,IAAK0S,MAAO,IAChC,CAAE+/B,OAAQ,IAAKzyC,IAAK,IAAK0S,MAAO,IAChC,CAAE+/B,OAAQ,IAAKzyC,IAAK,IAAK0S,MAAO,IAChC,CAAE+/B,OAAQ,IAAKzyC,IAAK,IAAK0S,MAAO,IAChC,CAAE+/B,OAAQ,IAAKzyC,IAAK,IAAK0S,MAAO,IAChC,CAAE+/B,OAAQ,IAAKzyC,IAAK,IAAK0S,MAAO,IAChC,CAAE+/B,OAAQ,KAAMzyC,IAAK,IAAK0S,MAAO,IACjC,CAAE+/B,OAAQ,KAAMzyC,IAAK,IAAK0S,MAAO,IACjC,CAAE+/B,OAAQ,KAAMzyC,IAAK,IAAK0S,MAAO,IACjC,CAAE+/B,OAAQ,KAAMzyC,IAAK,IAAK0S,MAAO,IACjC,CAAE+/B,OAAQ,KAAMzyC,IAAK,IAAK0S,MAAO,IACjC,CAAE+/B,OAAQ,KAAMzyC,IAAK,IAAK0S,MAAO,KAGnCy/B,EAAU4pB,OAAO,CACf,uBACA,gOACA,sHACA,qDACA,8EACA,oFACA,gHACA,yLACA,oSACA,qTACA,wKACA,0TACA,qWACA,4GACA,iEACCppD,OAAS,GAEZw/B,EAAUknB,OAAO,GAAGE,UAClB,SAACC,GAAD,OACGA,EAAKj6B,MAAQ,CACZvrB,UAAW,CAAEi6C,WAAY,SAAUD,SAAU,UAC7CsL,KAAM,CAAExlD,MAAM,OAGpBq+B,EAAUknB,OAAO,GAAGE,UAClB,SAACC,GAAD,OACGA,EAAKj6B,MAAQ,CACZvrB,UAAW,CAAEi6C,WAAY,SAAUD,SAAU,UAC7CsL,KAAM,CAAExlD,MAAM,OAIpB,IAEMmsD,EAAY,GAClB/G,EAAWn5D,SAAQ,SAACojB,GAAD,OAAa88C,EAAU98C,EAAOrZ,IAAMqZ,KAEvDw6C,EAAS59D,SAAQ,SAACi1C,EAAMl+B,GACtB,IAAMqM,EAAS6xB,EAAK/5B,kBAAoBglD,EAAUjrB,EAAK/5B,kBACjDpE,EACJsM,GACAA,EAAO5F,YACP4F,EAAO5F,WAAWxV,MAAK,SAACm4D,GAAD,OAAQA,EAAGpiE,QAA0B,QAAhBqlB,EAAOrlB,KAAiB,aAAe,YAC/EqnB,EAAc6vB,EAAK7vB,YAAc5N,KAAOy9B,EAAK7vB,aAAa1N,OAAO,cAAgB,GACjFP,EACJiM,GAAUA,EAAOjM,SAAWiM,EAAOjM,QAAQnZ,OAAS,EAChDolB,EAAOjM,QAAQ/N,QAAO,SAACrK,EAAQqY,EAAQL,GACrC,OAAOhY,EAAM,UAAgB,IAAVgY,EAAc,OAAS,IAA7B,OAAkCK,EAAOtb,QACrD,IACH,GACAskE,EAAsC,QAA9BnrB,EAAKhxB,qBAAiC+7C,GAAWpO,KAAK,MAAQqO,GAAWrO,KAAK,MAEtF5N,EAAM5R,EAAU4pB,OAAO,CAC3BjlD,EAAQ,EACRqM,GAAUA,EAAOxO,YAAcwO,EAAOxO,YAAY9Y,KAAa,GAC/DsnB,EAASA,EAAOtnB,KAAO,GACvBgb,EAAYA,EAAUhb,KAAO,GAC7Bm5C,EAAKl3C,KAAOm3B,EAAU,6BAA+B+f,EAAKl3C,MAAQ,GAClE,iCACAoZ,EACAiO,EACA,GACAg7C,EACAh7C,EACQ,GACR,GACA,KAA2Fw2C,QAAQ,GAAK,IACxG1mC,EAAU,+BAAiC+f,EAAKxtC,QAAU,MAAQwtC,EAAK1vB,SAAW,MAEpFy+B,EAAIpxC,OAAuC,QAA9BqiC,EAAKhxB,qBAAiC,IAAM,IAEzD+/B,EAAIwV,UAAS,SAACC,EAAMwC,GAClB,OAAQA,GACN,KAAK,EACHxC,EAAKj6B,MAAQ,CACXvrB,UAAW,CACTg6C,SAAU,SACV4R,UAAU,IAGd,MACF,KAAK,GACHpG,EAAKj6B,MAAQ,CACXvrB,UAAW,CACTg6C,SAAU,MACV4R,UAAU,IAGd,MAEF,QACEpG,EAAKj6B,MAAQ,CACXvrB,UAAW,CACTg6C,SAAU,SACVC,WAAY,SACZ2R,UAAU,YAkMTQ,GA1LsB5oB,sBACnC,WAcE1b,GACG,EAbDnH,UAaE,IAZOqE,EAYR,EAZDnE,QAOA2G,GAKC,EAXD5G,SAWC,EAVDj1B,SAUC,EATD+4B,OASC,EARD0hB,gBAQC,EAPD5jB,QAOC,EANDuhC,qBAMC,EALDv8B,UACAkhC,EAIC,EAJDA,YAKI7nC,GADH,mJACaxB,GAAU,CAAEwB,QAASmE,KAC/B/D,EAAYC,eAFf,EAGiC8B,IAAMuG,UAAS,GAHhD,mBAGIo/B,EAHJ,KAGgBC,EAHhB,OAIqBr/B,mBAAS,CAC/Bs/B,MAAOtlD,OAASulD,QAAQ,SAASrlD,OAAO,cACxCslD,IAAKxlD,OAAS++B,MAAM,SAAS7+B,OAAO,gBANnC,mBAIIulD,EAJJ,KAIUC,EAJV,KAaGnvB,EAAc,WAClB8uB,GAAc,IAdb,EAgBqBr/B,oBAAS,GAhB9B,mBAgBI4B,EAhBJ,KAgBU4Y,EAhBV,KAmBG36B,GAFO2c,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAE5B,ibA2EpB,OACE,oCACE,kBAAClB,GAAA,EAAD,CAAMpE,UAAWE,EAAQkC,MACvB,kBAACihC,GAAA,EAAD,CACEnjC,QAAS,CAAEvC,KAAMuC,EAAQ+iC,gBACzBsF,eA1FgB,WACtBN,GAAc,IA0FRphC,SAAUA,GAKV,kBAACy8B,GAAA,EAAD,CACE3sB,OACE,kBAACC,GAAA,EAAD,CAAQ0R,aAAW,YAAY1nB,QAAQ,UAAUV,QAAS,CAAEqjC,aAAcrjC,EAAQyW,SAChF,kBAAC,KAAD,OAGJtoB,MA7FG,2GA8FHm1C,qBAAsB,CAAE5iC,QAAS,aACjCV,QAAS,CAAEvC,KAAMuC,EAAQ4d,OAAQzvB,MAAO6R,EAAQ7R,SAGhD,kBAACuX,GAAA,EAAD,CAAa1F,QAAS,CAAEvC,KAAMuC,EAAQ8iC,cACpC,kBAAC1+B,GAAA,EAAD,CAAY1D,QAAQ,QAAQhhB,MAAM,iBAC/B6I,MAMX,kBAACggC,GAAA,EAAD,CAAQje,KAAMw9B,EAAYvuB,QAASN,EAAauP,kBAAgB,qBAC9D,kBAACC,GAAA,EAAD,CAAaxzC,GAAG,qBAAhB,4GACA,kBAACyzC,GAAA,EAAD,KACE,kBAACC,GAAA,EAAD,wTACA,kBAAChjB,GAAA,EAAD,CACEjH,WAAS,EACT4pC,aAAa,SACbE,QAAQ,gBACRrnD,QAAS,EACTupB,MAAO,CAAE3G,aAAc,GAAI9E,UAAW,KAEtC,kBAAC0G,GAAA,EAAD,CAAM5wB,MAAI,GACR,kBAACozB,GAAA,EAAD,CACE3E,MAAM,kCACNv6B,KAAK,OACLy3B,QAAS,SACTh5B,MAAOygE,EAAKH,MACZrgC,SAAU,SAAC6F,GAAD,OAAW46B,EAAQ,2BAAKD,GAAN,IAAYH,MAAOx6B,EAAM11B,OAAOpQ,aAGhE,kBAACi+B,GAAA,EAAD,CAAM5wB,MAAI,GACR,kBAACozB,GAAA,EAAD,CACE3E,MAAM,wCACNv6B,KAAK,OACLy3B,QAAS,SACTh5B,MAAOygE,EAAKD,IACZvgC,SAAU,SAAC6F,GAAD,OAAW46B,EAAQ,2BAAKD,GAAN,IAAYD,IAAK16B,EAAM11B,OAAOpQ,eAKlE,kBAACmhD,GAAA,EAAD,KACE,kBAACpoB,GAAA,EAAD,CAAQsT,QAASkF,EAAav5B,MAAM,WAApC,8CAGA,kBAAC+gB,GAAA,EAAD,CAAQsT,QA1II,WAClB8zB,GAAY,GACZ3kB,GAAQ,GACR6kB,GAAc,GAEd,IAAI5+D,QAAJ,uCAAY,WAAOoJ,EAASK,GAAhB,+BAAApF,EAAA,sEAKAi7D,GAAoB,IALpB,uBAG4BpE,EAH5B,EAERr1D,KACE20D,wBAA2BrrD,MAHrB,SAQAowD,GAAkB,CAC1BlgE,OAAQ,CACNmnB,QAAS,CAAC,uBAAwB,0BAClCY,gBAAiB43C,EAAKH,MACtBx3C,gBAAiB9N,KAAOylD,EAAKD,KAAKzmB,MAAM,OAAOgZ,iBAZzC,uBAOAqO,EAPA,EAOR95D,KAAQ85D,SASJ2B,EAAuB3vB,KAAQupB,EAAY,QAC3CmH,EAAqB1wB,KAAQguB,EAAU,yBAEvC9rB,EAAW,IAAIC,KAAQC,UACpB30B,YAAc,2DACvBy0B,EAASG,QAAU,IAAI3tC,KACvBwtC,EAASI,SAAW,IAAI5tC,KACxBwtC,EAASK,YAAc,IAAI7tC,KAErB+5D,EAAevsB,EAASO,aAAa,sBACrCisB,EAAexsB,EAASO,aAAa,sBAE3CqoB,GAAe2D,EAAckB,EAAqBnjD,IAAKkkD,EAAmBlkD,KAAO,GAAI8Y,GACrFwlC,GAAe4D,EAAciB,EAAqBpjD,IAAKmkD,EAAmBnkD,KAAO,GAAI+Y,GA7B3E,kBA+BH4c,EAASmB,KACbC,cACA30C,MAAK,SAACuF,GACL,IAAMjG,EAAO,IAAIC,KAAK,CAACgG,GAAO,CAC5B/F,KAAM,sEAER,GAAIW,OAAOy0C,WAAaz0C,OAAOy0C,UAAUC,iBACvC10C,OAAOy0C,UAAUC,iBAAiBv1C,EAAM,uKACnC,CACL,IAAMY,EAAMC,OAAOC,IAAIC,gBAAgBf,GACjCyE,EAAItG,SAASq3C,cAAc,KACjCr3C,SAASiZ,KAAKq+B,YAAYhxC,GAC1BA,EAAEixC,KAAO90C,EACT6D,EAAEkrB,SAAW,kKACblrB,EAAEkxC,QACF90C,OAAOC,IAAI80C,gBAAgBh1C,GAC3BzC,SAASiZ,KAAKy+B,YAAYpxC,OAG7B/D,MAAK,WACJ8I,OApBG,OAsBE,SAACkhC,GACN7gC,EAAO6gC,OAtDD,4CAAZ,yDAyDGhqC,MAAK,WACJo+D,GAAY,GACZ3kB,GAAQ,MA3DZ,OA6DS,SAACzP,GACNtpC,QAAQC,IAAIqpC,GACZo0B,GAAY,GACZ3kB,GAAQ,OAqEwBxjC,MAAM,WAApC,+EAKJ,kBAACiqD,GAAD,CAAsBx6D,QAAQ,iMAAsCm7B,KAAMA,QCzY5E9L,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyF,KAAM,GACN4gC,YAAa,CACXvzB,WAAY,EACZzxB,OAAQ,OAEVilD,eAAgB,CACdjlD,OAAQ,OACR6gB,QAAS,OACTC,cAAe,SACfC,eAAgB,iBAElB+e,OAAQ,CACN9/B,OAAQ,MACR6gB,QAAS,OACTE,eAAgB,aAChBhhB,MAAO,OACP6nD,UAAW,cAEbv3C,MAAO,CACLyc,WAAY,IACZia,WAAY,MAEdpO,OAAQ,CACN/2B,MAAO+c,EAAME,QAAQK,UAAU3O,KAC/BqP,gBAAiBujB,gBAAKxkB,EAAME,QAAQK,UAAU3O,KAAM,UAIlDu3C,GAAiB,SAACtoB,EAAW6sB,EAAc9F,EAAYhiD,GAC3Di7B,EAAUE,MAAQ,CAAC,CAAErY,MAAO,SAAUsY,OAAQ,EAAGC,OAAQ,IAEzD,IAAMC,EAAU,CACd,CAAEC,OAAQ,SAAKzyC,IAAK,SAAU0S,MAAO,IACrC,CAAE+/B,OAAQ,uCAAUzyC,IAAK,SAAU0S,MAAO,IAC1C,CAAE+/B,OAAQ,kKAAiCzyC,IAAK,cAAe0S,MAAO,IACtE,CAAE+/B,OAAQ,qJAA8BzyC,IAAK,qBAAsB0S,MAAO,IAC1E,CAAE+/B,OAAQ,qJAA8BzyC,IAAK,qBAAsB0S,MAAO,IAC1E,CAAE+/B,OAAQ,+IAA6BzyC,IAAK,kBAAmB0S,MAAO,IACtE,CAAE+/B,OAAQ,+IAA6BzyC,IAAK,kBAAmB0S,MAAO,KAGlE4tD,EAAY,CAAC,SAAK,uCAAU,kKAAiC,+DAAc,uCAAU,+DAAc,wCACzGppD,EAAQnX,SAAQ,SAACoX,GACfq7B,EAAQ1B,KACN,CAAE2B,OAAO,2IAAD,OAA+Bt7B,EAAOtb,MAAQmE,IAAI,OAAD,OAASmX,EAAOtb,KAAhB,SAA6B6W,MAAO,IAC7F,CAAE+/B,OAAO,2IAAD,OAA+Bt7B,EAAOtb,MAAQmE,IAAI,OAAD,OAASmX,EAAOtb,KAAhB,SAA6B6W,MAAO,KAE/F4tD,EAAUxvB,KAAK,+DAAc,2CAG/BqB,EAAUK,QAAUA,EAEpBL,EAAU4pB,OAAOuE,GAEjBnuB,EAAUgqB,WAAW,SACrBhqB,EAAUgqB,WAAW,SACrBhqB,EAAUgqB,WAAW,SACrB,IAAMoE,EAAe,GACrBpuB,EAAUknB,OAAO,GAAGE,UAAS,SAACC,EAAMwC,GAC9BA,EAAY,GACduE,EAAazvB,KAAK0oB,EAAKgH,aAI3BruB,EAAUsuB,eAAc,SAACva,EAAKpvC,GACd,WAAVA,GAAgC,WAAVA,IAAoBovC,EAAI3mB,MAAQ,CAAEvrB,UAAW,CAAEi6C,WAAY,cAGvF9b,EAAUknB,OAAO,GAAGE,UAClB,SAACC,GAAD,OACGA,EAAKj6B,MAAQ,CACZvrB,UAAW,CAAEi6C,WAAY,SAAUD,SAAU,UAC7CsL,KAAM,CAAExlD,MAAM,OAGpBq+B,EAAUknB,OAAO,GAAGE,UAClB,SAACC,GAAD,OACGA,EAAKj6B,MAAQ,CACZvrB,UAAW,CAAEi6C,WAAY,SAAUD,SAAU,UAC7CsL,KAAM,CAAExlD,MAAM,OAIpB,IAAM8mD,EAAO,GAEPsE,EAAkB,GACxBF,EAAaj/D,SAAQ,SAAC2U,EAAUoC,GAC9B,IAAMsuC,EAAU8T,EAAaA,EAAW77D,QAAO,SAAC8lB,GAAD,OAAYzO,EAAS5K,KAAOqZ,EAAO/H,OAAOtR,MAAM,GAC/Fo1D,EAAgBpuB,KAAhB,MAAAouB,EAAe,YAAS9Z,IACxB,IAAMsb,EAAwBtb,EAAQ/nD,QAAO,SAAC8lB,GAAD,OAAaA,EAAOjM,UAAYiM,EAAOjM,QAAQnZ,UACtF4iE,EAAqBvb,EAAQ/nD,QAAO,SAAC8lB,GAAD,OAAYA,EAAOjM,SAAWiM,EAAOjM,QAAQnZ,UACjFgmD,EAAM,CACVjtC,EAAQ,EACRpC,EAAS4G,iBACT8pC,EAAQrnD,OACR2iE,EAAsB3iE,OACtBqnD,EAAQrnD,QAAU2iE,EAAsB3iE,OAASqnD,EAAQrnD,QAAQ49D,QAAQ,GAAK,EAC9EgF,EAAmB5iE,OACnBqnD,EAAQrnD,QAAU4iE,EAAmB5iE,OAASqnD,EAAQrnD,QAAQ49D,QAAQ,GAAK,GAG7EzkD,EAAQnX,SAAQ,SAACoX,GACf,IAAMypD,EAAoBD,EAAmBtjE,QAAO,SAAC8lB,GAAD,OAAYA,EAAOjM,QAAQ2G,MAAK,SAAC/Q,GAAD,OAAOA,EAAEhD,KAAOqN,EAAOrN,SAC7Fs7C,EAAQrnD,SAAU6iE,EAAkB7iE,OAASqnD,EAAQrnD,QAAQ49D,QAAQ,GAGnF5X,EAAIjT,KAAK8vB,EAAkB7iE,OAAQqnD,EAAQrnD,QAAU6iE,EAAkB7iE,OAASqnD,EAAQrnD,QAAQ49D,QAAQ,GAAK,MAElGxpB,EAAU4pB,OAAOhY,GACzBwV,UAAS,SAACC,EAAMwC,GACnB,GAAIA,EAAY,GACVA,EAAY,IAAM,EAAG,CAAC,IAChBz/D,EAAUi9D,EAAVj9D,MACFk9D,EAAOl9D,GAAS,IAAO,WAAaA,GAAS,GAAM,WAAaA,GAAS,IAAO,WAAa,WACnGi9D,EAAKj9D,OAAiB,IAARA,GAAao/D,QAAQ,GAAK,IAEtCnC,EAAKj6B,MADHy8B,EAAY,EACD,CACXvC,KAAM,CACJ37D,KAAM,UACN47D,QAAS,QACTC,QAAS,CAAEC,KAAMH,GACjBI,QAAS,CAAED,KAAMH,IAEnBplD,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,SAE7CvrB,UAAW,CAAEi6C,WAAY,UAGd,CACXj6C,UAAW,CAAEi6C,WAAY,cAMnC2M,EAAK9pB,KAAKiT,MAEZ,IAAM8c,EAA2B3B,EAC7BA,EAAgB7hE,QAAO,SAAC8lB,GAAD,OAAaA,EAAOjM,UAAYiM,EAAOjM,QAAQnZ,UACtE,GACE+iE,EAAwB5B,EAC1BA,EAAgB7hE,QAAO,SAAC8lB,GAAD,OAAYA,EAAOjM,SAAWiM,EAAOjM,QAAQnZ,UACpE,GACEq+D,EAAW,CACf,kCACA,GACA8C,EAAgBnhE,OAChB8iE,EAAyB9iE,QACxBmhE,GAAmBA,EAAgBnhE,OAAS8iE,EAAyB9iE,OAASmhE,EAAgBnhE,OAAS,GAAG49D,QACzG,GAEFmF,EAAsB/iE,QACrBmhE,GAAmBA,EAAgBnhE,OAAS+iE,EAAsB/iE,OAASmhE,EAAgBnhE,OAAS,GAAG49D,QAAQ,IAGlHzkD,EAAQnX,SAAQ,SAACoX,GACf,IAAMypD,EAAoBE,EAAsBzjE,QAAO,SAAC8lB,GAAD,OAAYA,EAAOjM,QAAQ2G,MAAK,SAAC/Q,GAAD,OAAOA,EAAEhD,KAAOqN,EAAOrN,SAChGo1D,EAAgBnhE,SAAU6iE,EAAkB7iE,OAASmhE,EAAgBnhE,QAAQ49D,QAAQ,GAGnGS,EAAStrB,KACP8vB,EAAkB7iE,OAClBmhE,EAAgBnhE,QAAU6iE,EAAkB7iE,OAASmhE,EAAgBnhE,QAAQ49D,QAAQ,GAAK,MAG9ExpB,EAAU4pB,OAAOK,GAEzB7C,UAAS,SAACC,EAAMwC,GACtB,GAAIA,EAAY,GACd,GAAIA,EAAY,IAAM,EAAG,CAAC,IAChBz/D,EAAUi9D,EAAVj9D,MACFk9D,EAAOl9D,GAAS,IAAO,WAAaA,GAAS,GAAM,WAAaA,GAAS,IAAO,WAAa,WACnGi9D,EAAKj9D,OAAiB,IAARA,GAAao/D,QAAQ,GAAK,IAEtCnC,EAAKj6B,MADHy8B,EAAY,EACD,CACXvC,KAAM,CACJ37D,KAAM,UACN47D,QAAS,QACTC,QAAS,CAAEC,KAAMH,GACjBI,QAAS,CAAED,KAAMH,IAEnBplD,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,SAE7CvrB,UAAW,CAAEi6C,WAAY,UAGd,CACXj6C,UAAW,CAAEi6C,WAAY,gBAKb,IAAd+N,GACFuE,EAAazvB,KAAK0oB,EAAKgH,aAK7BD,EAAap3D,QAAO,SAAC43D,EAAcC,GACjC,IAAID,EAEG,OAAOC,EADZ7uB,EAAUgqB,WAAV,UAAwB4E,EAAxB,YAAwCC,QAyI/B3B,GAjIS7nB,sBACtB,WAcE1b,GACG,EAbDnH,UAaE,IAZOqE,EAYR,EAZDnE,QAOA2G,GAKC,EAXD5G,SAWC,EAVDj1B,SAUC,EATD+4B,OASC,EARD0hB,gBAQC,EAPD5jB,QAOC,EANDuhC,qBAMC,EALDv8B,UACAkhC,EAIC,EAJDA,YAKI7nC,GADH,mJACaxB,GAAU,CAAEwB,QAASmE,KADlC,EAGqBuE,oBAAS,GAH9B,mBAGI4B,EAHJ,KAGU4Y,EAHV,KAIG/wC,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAE1C7c,EAAc,oVAuEpB,OACE,oCACE,kBAAC2b,GAAA,EAAD,CAAMpE,UAAWE,EAAQkC,MACvB,kBAACihC,GAAA,EAAD,CACEnjC,QAAS,CAAEvC,KAAMuC,EAAQ+iC,gBACzBsF,eA1EY,WAClBR,GAAY,GACZ3kB,GAAQ,GAER,IAAI/5C,QAAJ,uCAAY,WAAOoJ,EAASK,GAAhB,mCAAApF,EAAA,sEAOAi7D,GAAoB,IAPpB,2BAERz5D,KACoCq1D,EAH5B,EAGNV,wBAA2BrrD,MACL6xD,EAJhB,EAINvJ,YAAetoD,MACO8zD,EALhB,EAKNxI,YAAetrD,OAIb0kC,EAAW,IAAIC,KAAQC,UACpB30B,YAAc,2DACvBy0B,EAASG,QAAU,IAAI3tC,KACvBwtC,EAASI,SAAW,IAAI5tC,KACxBwtC,EAASK,YAAc,IAAI7tC,KAErB+5D,EAAevsB,EAASO,aAAa,sBACrCisB,EAAexsB,EAASO,aAAa,sBACrC8uB,EAAYlC,EAAa3hE,QAAO,SAAC+d,GAAD,OAAYpU,EAAK6gB,QAAQ3f,SAASkT,EAAOtR,OACzEoN,EAAU+pD,EAAW5jE,QAAO,SAAC8Z,GAAD,OAChC+hD,EACG77D,QAAO,SAAC8lB,GAAD,OAAY+9C,EAAUrjD,MAAK,SAACsjD,GAAD,OAASA,EAAIr3D,KAAOqZ,EAAO/H,OAAOtR,SACpE+T,MAAK,SAACsF,GAAD,QAAaA,EAAOjM,SAAUiM,EAAOjM,QAAQ2G,MAAK,SAAC/Q,GAAD,OAAOA,EAAEhD,KAAOqN,EAAOrN,YAE7Ew1D,EAAuB3vB,KAAQupB,EAAY,QAEjDuB,GAAe2D,EAAc8C,EAAW5B,EAAqBnjD,IAAKjF,GAClEujD,GAAe4D,EAAc6C,EAAW5B,EAAqBpjD,IAAKhF,GA1BxD,kBA4BH26B,EAASmB,KACbC,cACA30C,MAAK,SAACuF,GACL,IAAMjG,EAAO,IAAIC,KAAK,CAACgG,GAAO,CAC5B/F,KAAM,sEAER,GAAIW,OAAOy0C,WAAaz0C,OAAOy0C,UAAUC,iBACvC10C,OAAOy0C,UAAUC,iBAAiBv1C,EAAM,6IACnC,CACL,IAAMY,EAAMC,OAAOC,IAAIC,gBAAgBf,GACjCyE,EAAItG,SAASq3C,cAAc,KACjCr3C,SAASiZ,KAAKq+B,YAAYhxC,GAC1BA,EAAEixC,KAAO90C,EACT6D,EAAEkrB,SAAW,wIACblrB,EAAEkxC,QACF90C,OAAOC,IAAI80C,gBAAgBh1C,GAC3BzC,SAASiZ,KAAKy+B,YAAYpxC,OAG7B/D,MAAK,WACJ8I,OApBG,OAsBE,SAACkhC,GACN7gC,EAAO6gC,OAnDD,4CAAZ,yDAsDGhqC,MAAK,WACJo+D,GAAY,GACZ3kB,GAAQ,MAxDZ,OA0DS,SAACzP,GACNtpC,QAAQC,IAAIqpC,GACZo0B,GAAY,GACZ3kB,GAAQ,OAUNvc,SAAUA,GAKV,kBAACy8B,GAAA,EAAD,CACE3sB,OACE,kBAACC,GAAA,EAAD,CAAQ0R,aAAW,YAAY1nB,QAAQ,UAAUV,QAAS,CAAEqjC,aAAcrjC,EAAQyW,SAChF,kBAAC,KAAD,OAGJtoB,MAzFG,+IA0FHm1C,qBAAsB,CAAE5iC,QAAS,aACjCV,QAAS,CAAEvC,KAAMuC,EAAQ4d,OAAQzvB,MAAO6R,EAAQ7R,SAGhD,kBAACuX,GAAA,EAAD,CAAa1F,QAAS,CAAEvC,KAAMuC,EAAQ8iC,cACpC,kBAAC1+B,GAAA,EAAD,CAAY1D,QAAQ,QAAQhhB,MAAM,iBAC/B6I,MAMX,kBAACohD,GAAD,CAAsBx6D,QAAQ,qOAA4Cm7B,KAAMA,QCpVlF9L,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyF,KAAM,CACJpkB,OAAQ,QAEVglD,YAAa,CACXvzB,WAAY,GAEdwzB,eAAgB,CACdjlD,OAAQ,QAEV8/B,OAAQ,GACRzvB,MAAO,CACLyc,WAAY,IACZia,WAAY,MAEdpO,OAAQ,CACN/2B,MAAO+c,EAAME,QAAQK,UAAU3O,KAC/BqP,gBAAiBujB,gBAAKxkB,EAAME,QAAQK,UAAU3O,KAAM,UAgFzCk+C,GA5E0B5pB,sBACvC,WAaE1b,GACG,EAZDnH,UAYE,IAXOqE,EAWR,EAXDnE,QACAD,EAUC,EAVDA,SAUC,KATDj1B,SASC,EARD+4B,OAQC,EAPDlD,kBAOC,MAPWC,KAOX,OAND2kB,gBAMC,EALD5jB,QAKC,EAJDuhC,qBAIC,sIACqBx6B,oBAAS,IAD9B,mBACI4B,EADJ,KACU4Y,EADV,KAGGljB,EAAUxB,GAAU,CAAEwB,QAASmE,IAE/BlE,EACA,2CAKAj5B,EAJE,kKAKFuhB,EAJS,6RAKTu/B,EAAW,uCAAG,WAAOta,GAAP,SAAAhgC,EAAA,sDAClBggC,EAAM4V,iBACNF,GAAQ,GACRkiB,KAAuB37D,MAAK,kBAAMy5C,GAAQ,MAHxB,2CAAH,sDAOjB,OACE,oCACE,kBAAChf,GAAA,EAAD,CAAMpE,UAAWE,EAAQkC,MACvB,kBAACihC,GAAA,EAAD,CACEnjC,QAAS,CAAEvC,KAAMuC,EAAQ+iC,gBACzBpiC,UAAWA,EACXsG,IAAKA,EACLpG,GAAE,UAAKd,EAAL,YAAiBE,GACnB8T,QAAS+T,GAET,kBAACsb,GAAA,EAAD,CACE3sB,OACE,kBAACC,GAAA,EAAD,CAAQ0R,aAAW,YAAY1nB,QAAQ,UAAUV,QAAS,CAAEqjC,aAAcrjC,EAAQyW,SAChF,kBAAC,KAAD,OAGJtoB,MAAOnnB,EACPs8D,qBAAsB,CAAE5iC,QAAS,aACjCV,QAAS,CAAEvC,KAAMuC,EAAQ4d,OAAQzvB,MAAO6R,EAAQ7R,SAEjD5F,GACC,kBAACmd,GAAA,EAAD,CAAa1F,QAAS,CAAEvC,KAAMuC,EAAQ8iC,cACpC,kBAAC1+B,GAAA,EAAD,CAAY1D,QAAQ,QAAQhhB,MAAM,iBAC/B6I,MAMX,kBAAC88C,GAAA,EAAD,CACE/6B,KAAMA,EACNg7B,iBAAkB,KAClB/rB,QAAS,kBAAM,MACfpqC,QAAQ,mNACR4B,OAAQ,kBAACmjC,GAAA,EAAD,CAAkBxJ,MAAO,CAAE5sB,OAAQ,GAAID,MAAO,GAAI6B,MAAO,iB,2yBCvGpE,IAAM8jD,GAAsBn1D,IAAH,MAwBjB,IAhBgBA,IAAH,MAgBb,SAACm+D,GACd,IAAMr8D,EAAQ9B,IAAH,KAECm+D,EACCnjE,KAAI,SAAC+8D,EAAQnkD,GACZ,MAAM,0BAAN,OACOA,EADP,8IAE0BmkD,EAAO4B,MAFjC,+DAGkC5B,EAAO8B,IAHzC,giBAmBDpL,KAAK,OAGlB,OAAOrsD,GACJN,MAAM,CACLA,MAAOqzD,GACP/0D,UAAW,CAAEjG,OAAQ,CAAEmnB,QAAS,CAAC,yBAA0B,kBAAmB,kBAC9Ehe,YAAa,eACbjD,QAAS,SAACxE,GACRyE,MAAMzE,MAGTT,MAAK,YAAkC,IAAvB+7D,EAAsB,EAA9Bx2D,KAAQw2D,cACf,OAAO/0D,GAAiBN,MAAM,CAC5BA,MAAOA,EACP1B,UAAW,CAAEg3D,WAAYD,EAAc18C,OACvCnX,YAAa,eACbjD,QAAS,SAACxE,GACRyE,MAAMzE,W,2yBClET,IAAMs5D,GAAsBn1D,IAAH,MAwBjB,IAhBgBA,IAAH,MAgBb,SAACm+D,GACd,IAAMr8D,EAAQ9B,IAAH,KAECm+D,EACCnjE,KAAI,SAAC+8D,EAAQnkD,GACZ,MAAM,0BAAN,OACOA,EADP,gJAE4BmkD,EAAO8B,IAFnC,yDAG4B9B,EAAO4B,MAHnC,gjBAoBDlL,KAAK,OAGlB,OAAOrsD,GACJN,MAAM,CACLA,MAAOqzD,GACP/0D,UAAW,CAAEjG,OAAQ,CAAEmnB,QAAS,CAAC,yBAA0B,kBAAmB,kBAC9Ehe,YAAa,eACbjD,QAAS,SAACxE,GACRyE,MAAMzE,MAGTT,MAAK,YAAkC,IAAvB+7D,EAAsB,EAA9Bx2D,KAAQw2D,cACf,OAAO/0D,GAAiBN,MAAM,CAC5BA,MAAOA,EACP1B,UAAW,CAAEg3D,WAAYD,EAAc18C,OACvCnX,YAAa,eACbjD,QAAS,SAACxE,GACRyE,MAAMzE,WCzCVs0B,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyF,KAAM,GACN4gC,YAAa,CACXvzB,WAAY,EACZzxB,OAAQ,OAEVilD,eAAgB,CACdjlD,OAAQ,OACR6gB,QAAS,OACTC,cAAe,SACfC,eAAgB,iBAElB+e,OAAQ,CACN9/B,OAAQ,MACR6gB,QAAS,OACTE,eAAgB,aAChBhhB,MAAO,OACP6nD,UAAW,cAEbv3C,MAAO,CACLyc,WAAY,IACZia,WAAY,MAEdpO,OAAQ,CACN/2B,MAAO+c,EAAME,QAAQK,UAAU3O,KAC/BqP,gBAAiBujB,gBAAKxkB,EAAME,QAAQK,UAAU3O,KAAM,UAIlDu3C,GAAiB,SAACtoB,EAAWwrB,EAAUzE,EAAYoI,EAAYrsC,GACnEkd,EAAUE,MAAQ,CAAC,CAAErY,MAAO,SAAUsY,OAAQ,EAAGC,OAAQ,IACzDJ,EAAUgnB,WAAa,CACrBC,KAAM,KACN1jC,GAAI,MAGNyc,EAAUK,QAAU,CAClB,CAAEC,OAAQ,iCAASzyC,IAAK,UACxB,CAAEyyC,OAAQ,6CAAWzyC,IAAK,YAAa0S,MAAO,IAC9C,CAAE+/B,OAAQ,mDAAYzyC,IAAK,cAAe0S,MAAO,IACjD,CAAE+/B,OAAQ,wFAAmBzyC,IAAK,cAAe0S,MAAO,IACxD,CAAE+/B,OAAQ,uCAAUzyC,IAAK,SAAU0S,MAAO,IAC1C,CAAE+/B,OAAQ,gEAAezyC,IAAK,uBAAwB0S,MAAO,IAC7D,CAAE+/B,OAAQ,0DAAczyC,IAAK,OAAQ0S,MAAO,IAC5C,CAAE+/B,OAAQ,4HAAyBzyC,IAAK,cAAe0S,MAAO,IAC9D,CAAE+/B,OAAQ,yDAAazyC,IAAK,aAAc0S,MAAO,IACjD,CAAE+/B,OAAQ,4EAAiBzyC,IAAK,SAAU0S,MAAO,IACjD,CAAE+/B,OAAQ,yDAAazyC,IAAK,YAAa0S,MAAO,KAGlDy/B,EAAUknB,OAAO,GAAGE,UAClB,SAACC,GAAD,OACGA,EAAKj6B,MAAQ,CACZvrB,UAAW,CAAEi6C,WAAY,SAAUD,SAAU,UAC7CsL,KAAM,CAAExlD,MAAM,EAAMS,MAAO,CAAEqlD,KAAM,aACnCvlD,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,SAE7Ck6B,KAAM,CACJ37D,KAAM,UACN47D,QAAS,QACTC,QAAS,CACPC,KAAM,YAERC,QAAS,CACPD,KAAM,iBAKhBznB,EAAUknB,OAAO,GAAG1mD,OAAS,GAE7BgrD,EAAS59D,SAAQ,SAACi1C,GAChB,IAAM7xB,EAAS+1C,EAAWlkB,EAAK/5B,kBAAkB,GAC3CtG,EAAcwO,EAAOgI,aAAehI,EAAOgI,aAAatvB,KAAO,GAC/D0lE,EAAatsC,EAAU,6CAA+C+f,EAAKhxB,sBAC3ElmB,EAAOm3B,EAAU,6BAA+B+f,EAAKl3C,MACrD0jE,EAAaxsB,EAAKr6B,YAAcq6B,EAAKr6B,YAAY9e,KAAO,GACxD2L,EAASytB,EAAU,+BAAiC+f,EAAKxtC,QACzDic,EAAYlM,KAAOy9B,EAAKvxB,WAAWhM,OAAO,oBAC1CmM,EAAYrM,KAAOy9B,EAAKpxB,WAAWnM,OAAO,oBAC1CgD,EAAWu6B,EAAKv6B,SAAL,YAAoBu6B,EAAKv6B,UAAY,GAChDgnD,EACJhnD,GACAA,EAAS1c,QACT0c,EAASlO,MACTkO,EAASlO,MAAK,SAACm/B,EAAOE,GACpB,IAAM2U,EAAQhpC,KAAOm0B,EAAMjoB,WAAW+8B,OAChCC,EAAQlpC,KAAOq0B,EAAOnoB,WAAW+8B,OACvC,OAAID,EAAQE,GAAe,EACvBA,EAAQF,EAAc,EACnB,KAGCpO,EAAU4pB,OAAO,CAC3B/mB,EAAKzxB,OACLE,EACA9O,EACAqgC,EAAK53B,YACL+F,EAAOtnB,KACP0lE,EACAzjE,EACA2jE,EAAY1jE,OAAS0jE,EAAY,GAAGzsD,KAAO,GAC3CwsD,EACAh6D,EACAoc,IAEE21C,UAAS,SAACC,EAAMwC,GAClBxC,EAAKj6B,MAAQ,CACXvrB,UAAW,CACTg6C,SAAU,SACVC,WAAY,SACZ2R,UAAU,WA8hBL8B,GAzdoBlqB,sBACjC,WAcE1b,GACG,EAbDnH,UAaE,IAZOqE,EAYR,EAZDnE,QAOA2G,GAKC,EAXD5G,SAWC,EAVDj1B,SAUC,EATD+4B,OASC,EARD0hB,gBAQC,EAPD5jB,QAOC,EANDuhC,qBAMC,EALDv8B,UACAkhC,EAIC,EAJDA,YAKI7nC,GADH,mJACaxB,GAAU,CAAEwB,QAASmE,KAC/B/D,EAAYC,eAFf,EAGiC8B,IAAMuG,UAAS,GAHhD,mBAGIo/B,EAHJ,KAGgBC,EAHhB,OAIqBr/B,mBAAS,CAC/Bs/B,MAAOtlD,OAASulD,QAAQ,SAASrlD,OAAO,oBACxCslD,IAAKxlD,OAAS++B,MAAM,SAAS7+B,OAAO,sBANnC,mBAIIulD,EAJJ,KAIUC,EAJV,KAaGnvB,EAAc,WAClB8uB,GAAc,IAdb,EAgBqBr/B,oBAAS,GAhB9B,mBAgBI4B,EAhBJ,KAgBU4Y,EAhBV,KAmBG36B,GAFO2c,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAE5B,wXAuWpB,OACE,oCACE,kBAAClB,GAAA,EAAD,CAAMpE,UAAWE,EAAQkC,MACvB,kBAACihC,GAAA,EAAD,CACEnjC,QAAS,CAAEvC,KAAMuC,EAAQ+iC,gBACzBsF,eAtXgB,WACtBN,GAAc,IAsXRphC,SAAUA,GAKV,kBAACy8B,GAAA,EAAD,CACE3sB,OACE,kBAACC,GAAA,EAAD,CAAQ0R,aAAW,YAAY1nB,QAAQ,UAAUV,QAAS,CAAEqjC,aAAcrjC,EAAQyW,SAChF,kBAAC,KAAD,OAGJtoB,MAzXG,sHA0XHm1C,qBAAsB,CAAE5iC,QAAS,aACjCV,QAAS,CAAEvC,KAAMuC,EAAQ4d,OAAQzvB,MAAO6R,EAAQ7R,SAGhD,kBAACuX,GAAA,EAAD,CAAa1F,QAAS,CAAEvC,KAAMuC,EAAQ8iC,cACpC,kBAAC1+B,GAAA,EAAD,CAAY1D,QAAQ,QAAQhhB,MAAM,iBAC/B6I,MAMX,kBAACggC,GAAA,EAAD,CAAQje,KAAMw9B,EAAYvuB,QAASN,EAAauP,kBAAgB,oBAAoB6L,SAAS,MAC3F,kBAAC5L,GAAA,EAAD,CAAaxzC,GAAG,qBAAhB,4GACA,kBAACyzC,GAAA,EAAD,KACE,kBAACC,GAAA,EAAD,wTACA,kBAAChjB,GAAA,EAAD,CACEjH,WAAS,EACT4pC,aAAa,SACbC,KAAK,SACLC,QAAQ,gBACRrnD,QAAS,EACTupB,MAAO,CAAE3G,aAAc,GAAI9E,UAAW,KAEtC,kBAAC0G,GAAA,EAAD,CAAM5wB,MAAI,GACR,kBAACozB,GAAA,EAAD,CACE3E,MAAM,kCACNv6B,KAAK,iBACLy3B,QAAS,SACTh5B,MAAOygE,EAAKH,MACZrgC,SAAU,SAAC6F,GACT46B,EAAQ,2BAAKD,GAAN,IAAYH,MAAOx6B,EAAM11B,OAAOpQ,aAI7C,kBAACi+B,GAAA,EAAD,CAAM5wB,MAAI,GACR,kBAACozB,GAAA,EAAD,CACE3E,MAAM,wCACNv6B,KAAK,iBACLy3B,QAAS,SACTh5B,MAAOygE,EAAKD,IACZvgC,SAAU,SAAC6F,GAAD,OAAW46B,EAAQ,2BAAKD,GAAN,IAAYD,IAAK16B,EAAM11B,OAAOpQ,eAKlE,kBAACmhD,GAAA,EAAD,KACE,kBAACpoB,GAAA,EAAD,CAAQsT,QAASkF,EAAav5B,MAAM,WAApC,8CAGA,kBAAC+gB,GAAA,EAAD,CAAQsT,QAzaI,WAClB8zB,GAAY,GACZ3kB,GAAQ,GACR6kB,GAAc,GAKd,IAHA,IAAMyE,EAAU,GACVM,EAAmB,GAEdC,EAAIrqD,KAAOylD,EAAKH,OAAOvmB,MAAM,OAAQsrB,EAAE7G,SAASiC,EAAKD,MAAQ,CAC1D6E,EAAEtS,cACd+R,EAAQvwB,KAAK,CAAE+rB,MAAOtlD,KAAOqqD,GAAGC,KAAK,GAAI,OAAOvS,cAAeyN,IAAK6E,EAAEtS,gBACtEqS,EAAiB7wB,KAAK,CAAE+rB,MAAOtlD,KAAOqqD,GAAGC,KAAK,EAAG,OAAOvS,cAAeyN,IAAK6E,EAAEtS,gBAC9EsS,EAAEC,IAAI,EAAG,OACJD,EAAE7G,SAASiC,EAAKD,OACnBsE,EAAQvwB,KAAK,CAAE+rB,MAAOtlD,KAAOylD,EAAKD,KAAK8E,KAAK,GAAI,OAAOvS,cAAeyN,IAAKxlD,KAAOylD,EAAKD,KAAKzN,gBAC5FqS,EAAiB7wB,KAAK,CACpB+rB,MAAOtlD,KAAOylD,EAAKD,KAAK8E,KAAK,EAAG,OAAOvS,cACvCyN,IAAKxlD,KAAOylD,EAAKD,KAAKzN,iBAKvB/3C,KAAOylD,EAAKH,OAAOvmB,MAAM,OAAOykB,SAASiC,EAAKD,OACjDsE,EAAQvwB,KAAK,CAAE+rB,MAAOtlD,KAAOylD,EAAKD,KAAK8E,KAAK,GAAI,OAAOvS,cAAeyN,IAAKxlD,KAAOylD,EAAKD,KAAKzN,gBAC5FqS,EAAiB7wB,KAAK,CACpB+rB,MAAOtlD,KAAOylD,EAAKD,KAAK8E,KAAK,EAAG,OAAOvS,cACvCyN,IAAKxlD,KAAOylD,EAAKD,KAAKzN,iBAI1B,IAAItxD,QAAJ,uCAAY,WAAOoJ,EAASK,GAAhB,2CAAApF,EAAA,sEAkBArE,QAAQC,IAAI,CACpBq/D,GAAoB,CAAE/E,aAAc,CAAEltC,WAAY,QAClDy2C,GAA4BT,GAC5BU,GAA2BJ,GAC3BpE,GAAkB,CAChBlgE,OAAQ,CACNsmB,cAAepM,KAAOylD,EAAKD,KAAK8E,KAAK,GAAI,OAAOvS,cAChD9qC,QAAS,CAAC,yBAA0B,kBAAmB,gBACvDJ,WAAY,iBA1BR,iDAQNvgB,KACoCq1D,EAT9B,EASJV,wBAA2BrrD,MACL6xD,EAVlB,EAUJvJ,YAAetoD,MAGX60D,EAbA,KAaNn+D,KACM23D,EAdA,KAcN33D,KAEQ85D,EAhBF,KAgBN95D,KAAQ85D,UAyBN9rB,EAAW,IAAIC,KAAQC,UACpB30B,YAAc,2DACvBy0B,EAASG,QAAU,IAAI3tC,KACvBwtC,EAASI,SAAW,IAAI5tC,KACxBwtC,EAASK,YAAc,IAAI7tC,KAErB49D,EAAepwB,EAASO,aAAa,mFACrC8vB,EAAqBrwB,EAASO,aAAa,gEAEjD6vB,EAAa5vB,MAAQ,CAAC,CAAErY,MAAO,SAAUsY,OAAQ,EAAGC,OAAQ,IAEtD4vB,EApDI,CAqDR,CAAE1vB,OAAQ,GAAIzyC,IAAK,QAAS0S,MAAO,KArD3B,mBAsDL7S,OAAO6K,OAAOs3D,GAAkB9jE,KAAI,SAACktB,EAAOtU,GAAR,MAAmB,CACxD27B,OAAO,iLAAD,OAAuCl7B,KAAO8pD,EAAQvqD,GAAOimD,KAAKtlD,OAAO,eAC/EzX,IAAKqhE,EAAQvqD,GAAOimD,IACpBrqD,MAAO,QAzDD,CA2DR,CACE+/B,OAAO,mTAAD,OAAgEl7B,KAAOylD,EAAKH,OAAOplD,OACvF,oBADI,yBAEEF,KAAOylD,EAAKD,KAAKtlD,OAAO,oBAF1B,KAGNzX,IAAK,QACL0S,MAAO,MAIXuvD,EAAazvB,QAAU2vB,EAEvBF,EAAa9I,WAAa,CACxBC,KAAM,KACN1jC,GAAI,CACFquB,IAAK,EACL3F,OAAQ6jB,EAAazvB,QAAQz0C,SAIjCkkE,EAAa5I,OAAO,GAAG1mD,OAAS,GAChCsvD,EAAa5I,OAAO,GAAGE,UAAS,SAACC,GAC/BA,EAAKj6B,MAAQ,CACXvrB,UAAW,CACT4rD,UAAU,EACV5R,SAAU,SACVC,WAAY,cAIdmU,EAAiBviE,OAAO6K,OAAOs3D,GAAkB9jE,KACnD,SAACktB,GAAD,OAAWA,EAAM/tB,QAAO,SAACmqD,GAAD,MAAkB,2BAAXA,EAAE1pD,QAAmCC,WAElEskE,EAASJ,EAAalG,OAAb,CACX,oNADW,mBAERqG,GAFQ,CAGX,EAAIA,EAAeA,EAAerkE,OAAS,GAAKqkE,EAAe,IAAM,MAEhEzvD,OAAS,GAChB0vD,EAAO9I,UAAS,SAACC,GACfA,EAAKj6B,MAAQ,CACXvrB,UAAW,CACT4rD,UAAU,EACV5R,SAAU,SACVC,WAAY,cAIlBoU,EAAO9F,QAAQ,SAASh9B,MAAQ,CAC9BvrB,UAAW,CACT4rD,UAAU,EACV5R,SAAU,SACVC,WAAY,UAEdwL,KAAM,CACJI,QAAS,CAAED,KAAM,YACjBD,QAAS,CAAEC,KAAM,YACjBF,QAAS,QACT57D,KAAM,WAERuW,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,SAE7C28B,OAAQ,MAEVkG,EAAiBviE,OAAO6K,OAAOs3D,GAAkB9jE,KAC/C,SAACktB,GAAD,OAAWA,EAAM/tB,QAAO,SAACmqD,GAAD,MAAkB,iBAAXA,EAAE1pD,QAAyBC,WAE5DskE,EAASJ,EAAalG,OAAb,CACP,+KADO,mBAEJqG,GAFI,CAGP,EAAIA,EAAeA,EAAerkE,OAAS,GAAKqkE,EAAe,IAAM,MAEhEzvD,OAAS,GAChB0vD,EAAO9I,UAAS,SAACC,GACfA,EAAKj6B,MAAQ,CACXvrB,UAAW,CACT4rD,UAAU,EACV5R,SAAU,SACVC,WAAY,cAIlBoU,EAAO9F,QAAQ,SAASh9B,MAAQ,CAC9BvrB,UAAW,CACT4rD,UAAU,EACV5R,SAAU,SACVC,WAAY,UAEdwL,KAAM,CACJI,QAAS,CAAED,KAAM,YACjBD,QAAS,CAAEC,KAAM,YACjBF,QAAS,QACT57D,KAAM,WAERuW,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,SAE7C28B,OAAQ,MAEVkG,EAAiBviE,OAAO6K,OAAOs3D,GAAkB9jE,KAC/C,SAACktB,GAAD,OAAWA,EAAM/tB,QAAO,SAACmqD,GAAD,MAAkB,oBAAXA,EAAE1pD,QAA4BC,WAE/DskE,EAASJ,EAAalG,OAAb,CACP,yKADO,mBAEJqG,GAFI,CAGP,EAAIA,EAAeA,EAAerkE,OAAS,GAAKqkE,EAAe,IAAM,MAEhEzvD,OAAS,GAChB0vD,EAAO9I,UAAS,SAACC,GACfA,EAAKj6B,MAAQ,CACXvrB,UAAW,CACT4rD,UAAU,EACV5R,SAAU,SACVC,WAAY,cAIlBoU,EAAO9F,QAAQ,SAASh9B,MAAQ,CAC9BvrB,UAAW,CACT4rD,UAAU,EACV5R,SAAU,SACVC,WAAY,UAEdwL,KAAM,CACJI,QAAS,CAAED,KAAM,YACjBD,QAAS,CAAEC,KAAM,YACjBF,QAAS,QACT57D,KAAM,WAERuW,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,SAE7C28B,OAAQ,MAEVkG,EAAiBviE,OAAO6K,OAAOs3D,GAAkB9jE,KAAI,SAACktB,GAAD,OAAWA,EAAMrtB,WACtEskE,EAASJ,EAAalG,OAAb,CACP,4WADO,mBAEJqG,GAFI,CAGP,EAAIA,EAAeA,EAAerkE,OAAS,GAAKqkE,EAAe,IAAM,MAEhEzvD,OAAS,GAChB0vD,EAAO9I,UAAS,SAACC,GACfA,EAAKj6B,MAAQ,CACXvrB,UAAW,CACT4rD,UAAU,EACV5R,SAAU,SACVC,WAAY,cAIlBoU,EAAO9F,QAAQ,SAASh9B,MAAQ,CAC9BvrB,UAAW,CACT4rD,UAAU,EACV5R,SAAU,SACVC,WAAY,UAEdwL,KAAM,CACJI,QAAS,CAAED,KAAM,YACjBD,QAAS,CAAEC,KAAM,YACjBF,QAAS,QACT57D,KAAM,WAERuW,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,SAE7C28B,OAAQ,MAEVkG,EAAiBviE,OAAO6K,OAAO8wD,GAAWt9D,KAAI,SAACktB,GAAD,OAAWA,EAAMrtB,WAC/DskE,EAASJ,EAAalG,OAAb,CACP,kRADO,mBAEJqG,GAFI,GAGL,EAAIA,EAAeA,EAAerkE,OAAS,GAAKqkE,EAAe,IAAM,OAElEzvD,OAAS,GAChB0vD,EAAO9I,UAAS,SAACC,GACfA,EAAKj6B,MAAQ,CACXvrB,UAAW,CACT4rD,UAAU,EACV5R,SAAU,SACVC,WAAY,UAEdwL,KAAM,CACJI,QAAS,CAAED,KAAM,YACjBD,QAAS,CAAEC,KAAM,YACjBF,QAAS,QACT57D,KAAM,WAERuW,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,aAIjD8iC,EAAO9F,QAAQ,SAASh9B,MAAQ,CAC9BvrB,UAAW,CACT4rD,UAAU,EACV5R,SAAU,SACVC,WAAY,UAEdwL,KAAM,CACJI,QAAS,CAAED,KAAM,YACjBD,QAAS,CAAEC,KAAM,YACjBF,QAAS,QACT57D,KAAM,WAERuW,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,SAE7C28B,OAAQ,MAEJ9W,EAAUzV,KAAQupB,EAAY,MACpBvpB,KAAQqvB,EAAc,MACtCvE,GAAeyH,EAAoBvE,EAAUvY,EAASv9B,EAASoN,GAhSrD,kBAkSH4c,EAASmB,KACbC,cACA30C,MAAK,SAACuF,GACL,IAAMjG,EAAO,IAAIC,KAAK,CAACgG,GAAO,CAC5B/F,KAAM,sEAER,GAAIW,OAAOy0C,WAAaz0C,OAAOy0C,UAAUC,iBACvC10C,OAAOy0C,UAAUC,iBAAiBv1C,EAAM,kLACnC,CACL,IAAMY,EAAMC,OAAOC,IAAIC,gBAAgBf,GACjCyE,EAAItG,SAASq3C,cAAc,KACjCr3C,SAASiZ,KAAKq+B,YAAYhxC,GAC1BA,EAAEixC,KAAO90C,EACT6D,EAAEkrB,SAAW,6KACblrB,EAAEkxC,QACF90C,OAAOC,IAAI80C,gBAAgBh1C,GAC3BzC,SAASiZ,KAAKy+B,YAAYpxC,OAG7B/D,MAAK,WACJ8I,OApBG,OAsBE,SAACkhC,GACN7gC,EAAO6gC,OAzTD,4CAAZ,yDA4TGhqC,MAAK,WACJo+D,GAAY,GACZ3kB,GAAQ,MA9TZ,OAgUS,SAACzP,GACNtpC,QAAQC,IAAIqpC,GACZo0B,GAAY,GACZ3kB,GAAQ,OAwEwBxjC,MAAM,WAApC,+EAKJ,kBAACiqD,GAAD,CAAsBx6D,QAAQ,4MAAuCm7B,KAAMA,QC3oB7E9L,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyF,KAAM,GACN4gC,YAAa,CACXvzB,WAAY,EACZzxB,OAAQ,OAEVilD,eAAgB,CACdjlD,OAAQ,OACR6gB,QAAS,OACTC,cAAe,SACfC,eAAgB,iBAElB+e,OAAQ,CACN9/B,OAAQ,MACR6gB,QAAS,OACTE,eAAgB,aAChBhhB,MAAO,OACP6nD,UAAW,cAEbv3C,MAAO,CACLyc,WAAY,IACZia,WAAY,MAEdpO,OAAQ,CACN/2B,MAAO+c,EAAME,QAAQK,UAAU3O,KAC/BqP,gBAAiBujB,gBAAKxkB,EAAME,QAAQK,UAAU3O,KAAM,UAIlDu3C,GAAiB,SAACtoB,EAAW+mB,EAAYyE,EAAU1oC,EAAWqtC,GAClEnwB,EAAUE,MAAQ,CAAC,CAAErY,MAAO,SAAUsY,OAAQ,EAAGC,OAAQ,IACzDJ,EAAUgnB,WAAa,CACrBC,KAAM,KACN1jC,GAAI,MAENyc,EAAUK,QAAV,CACE,CAAEC,OAAQ,yFAAoBzyC,IAAK,OAAQ0S,MAAO,IAClD,CAAE+/B,OAAQ,+DAAczyC,IAAK,cAAe0S,MAAO,IACnD,CAAE+/B,OAAQ,gEAAezyC,IAAK,aAAc0S,MAAO,IACnD,CAAE+/B,OAAQ,gEAAezyC,IAAK,aAAc0S,MAAO,IACnD,CAAE+/B,OAAQ,wFAAmBzyC,IAAK,cAAe0S,MAAO,IACxD,CAAE+/B,OAAQ,qEAAezyC,IAAK,aAAc0S,MAAO,IACnD,CAAE+/B,OAAQ,4EAAiBzyC,IAAK,gBAAiB0S,MAAO,KAP1D,mBAQK4vD,EAASpkE,KAAI,SAACypD,GAAD,MAAW,CAAElV,OAAQkV,EAAK9rD,KAAMmE,IAAK2nD,EAAK79C,GAAI4I,MAAO,QARvE,CASE,CAAE+/B,OAAQ,2BAAQzyC,IAAK,mBAAoB0S,MAAO,IAClD,CAAE+/B,OAAQ,yDAAazyC,IAAK,sBAAuB0S,MAAO,MAG5Dy/B,EAAUknB,OAAO,GAAGE,UAClB,SAACC,GAAD,OACGA,EAAKj6B,MAAQ,CACZvrB,UAAW,CAAEi6C,WAAY,SAAUD,SAAU,UAC7CsL,KAAM,CAAExlD,MAAM,EAAMS,MAAO,CAAEqlD,KAAM,aACnCvlD,OAAQ,CACNC,OAAQ,CAAEC,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC9C/rB,KAAM,CAAEe,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC5C9rB,MAAO,CAAEc,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,QAC7CiR,IAAK,CAAEj8B,MAAO,CAAEqlD,KAAM,YAAcr6B,MAAO,SAE7Ck6B,KAAM,CACJ37D,KAAM,UACN47D,QAAS,QACTC,QAAS,CACPC,KAAM,YAERC,QAAS,CACPD,KAAM,iBAKhBznB,EAAUknB,OAAO,GAAG1mD,OAAS,GAE7B3T,QAAQC,IAAI0+D,GAEPA,GAELA,EAAS59D,SAAQ,SAACi1C,GAChB,IAAM7xB,EAAS+1C,EAAWlkB,EAAK/5B,kBAAkB,GAC3CtG,EAAcwO,EAAOgI,aAAehI,EAAOgI,aAAatvB,KAAO,GAC/D0mE,EAAWvtB,EAAKp6B,WAAao6B,EAAKp6B,WAAW/e,KAAO,GACpDgpB,EAAamwB,EAAKnwB,WAAatN,KAAOy9B,EAAKnwB,YAAYpN,OAAO,oBAAsB,GACpF0N,EAAc6vB,EAAK7vB,YAAc5N,KAAOy9B,EAAK7vB,aAAa1N,OAAO,oBAAsB,GACvF+qD,EAAgBxtB,EAAKwtB,cAAgBjrD,KAAOy9B,EAAKwtB,eAAe/qD,OAAO,oBAAsB,GAC7Fm8C,EAAmB5e,EAAK4e,iBACxB6O,EAAuBztB,EAAKgf,oBAC5BruC,EAAoBqvB,EAAKrvB,kBAEzBo+B,EAAM5R,EAAU4pB,OAAV,WACPt9D,OAAOiW,SAASguD,OADT,mBAC0B1tB,EAAKlrC,GAD/B,SAEV6K,EACAwO,EAAOtnB,KACPgpB,EACAM,EACAo9C,EACAC,GAPU,mBAQPF,EAASpkE,KAAI,SAACypD,GACf,IAAMH,EAAI7hC,EAAkB5d,MAAK,SAAC46D,GAAD,OAAQA,EAAG1Y,MAAQtC,EAAK79C,MACzD,OAAI09C,EACKA,EAAE+L,MAAF,wBAAiB/L,EAAE3hC,KAAnB,kEAA2C2hC,EAAE3hC,KAA7C,oCAEA,yEAbD,CAgBV+tC,EACA6O,KAEF1e,EAAIwY,QAAQ,GAAGhgE,MAAQ,CACrBsX,KAAK,GAAD,OAAKpV,OAAOiW,SAASguD,OAArB,mBAAsC1tB,EAAKlrC,GAA3C,SACJ84D,UAAU,GAAD,OAAKnkE,OAAOiW,SAASguD,OAArB,mBAAsC1tB,EAAKlrC,GAA3C,UAGXi6C,EAAIwV,UAAS,SAACC,EAAMwC,GAClBxC,EAAKj6B,MAAQ,CACXvrB,UAAW,CACTg6C,SAAU,SACVC,WAAY,SACZ2R,UAAU,WAgQLiD,GAzPqBrrB,sBAClC,WAcE1b,GACG,EAbDnH,UAaE,IAZOqE,EAYR,EAZDnE,QAOA2G,GAKC,EAXD5G,SAWC,EAVDj1B,SAUC,EATD+4B,OASC,EARD0hB,gBAQC,EAPD5jB,QAOC,EANDuhC,qBAMC,EALDv8B,UACAkhC,EAIC,EAJDA,YAKI7nC,GADH,mJACaxB,GAAU,CAAEwB,QAASmE,KADlC,GAEe9D,eACkB8B,IAAMuG,UAAS,IAHhD,mBAGIo/B,EAHJ,KAGgBC,EAHhB,OAIqBr/B,mBAAS,CAC/Bs/B,MAAOtlD,OAASulD,QAAQ,SAASrlD,OAAO,oBACxCslD,IAAKxlD,OAAS++B,MAAM,SAAS7+B,OAAO,sBANnC,mBAIIulD,EAJJ,KAIUC,EAJV,KAaGnvB,EAAc,WAClB8uB,GAAc,IAdb,EAgBqBr/B,oBAAS,GAhB9B,mBAgBI4B,EAhBJ,KAgBU4Y,EAhBV,KAmBG36B,GAFO2c,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAE5B,8TAuIpB,OACE,oCACE,kBAAClB,GAAA,EAAD,CAAMpE,UAAWE,EAAQkC,MACvB,kBAACihC,GAAA,EAAD,CACEnjC,QAAS,CAAEvC,KAAMuC,EAAQ+iC,gBACzBsF,eAtJgB,WACtBN,GAAc,IAsJRphC,SAAUA,GAKV,kBAACy8B,GAAA,EAAD,CACE3sB,OACE,kBAACC,GAAA,EAAD,CAAQ0R,aAAW,YAAY1nB,QAAQ,UAAUV,QAAS,CAAEqjC,aAAcrjC,EAAQyW,SAChF,kBAAC,KAAD,OAGJtoB,MAzJG,mHA0JHm1C,qBAAsB,CAAE5iC,QAAS,aACjCV,QAAS,CAAEvC,KAAMuC,EAAQ4d,OAAQzvB,MAAO6R,EAAQ7R,SAGhD,kBAACuX,GAAA,EAAD,CAAa1F,QAAS,CAAEvC,KAAMuC,EAAQ8iC,cACpC,kBAAC1+B,GAAA,EAAD,CAAY1D,QAAQ,QAAQhhB,MAAM,iBAC/B6I,MAMX,kBAACggC,GAAA,EAAD,CAAQje,KAAMw9B,EAAYvuB,QAASN,EAAauP,kBAAgB,oBAAoB6L,SAAS,MAC3F,kBAAC5L,GAAA,EAAD,CAAaxzC,GAAG,qBAAhB,iEACA,kBAACyzC,GAAA,EAAD,KACE,kBAACC,GAAA,EAAD,wTACA,kBAAChjB,GAAA,EAAD,CACEjH,WAAS,EACT4pC,aAAa,SACbC,KAAK,SACLC,QAAQ,gBACRrnD,QAAS,EACTupB,MAAO,CAAE3G,aAAc,GAAI9E,UAAW,KAEtC,kBAAC0G,GAAA,EAAD,CAAM5wB,MAAI,GACR,kBAACozB,GAAA,EAAD,CACE3E,MAAM,iHACNv6B,KAAK,iBACLy3B,QAAS,SACTh5B,MAAOygE,EAAKH,MACZrgC,SAAU,SAAC6F,GACT46B,EAAQ,2BAAKD,GAAN,IAAYH,MAAOx6B,EAAM11B,OAAOpQ,aAI7C,kBAACi+B,GAAA,EAAD,CAAM5wB,MAAI,GACR,kBAACozB,GAAA,EAAD,CACE3E,MAAM,uHACNv6B,KAAK,iBACLy3B,QAAS,SACTh5B,MAAOygE,EAAKD,IACZvgC,SAAU,SAAC6F,GAAD,OAAW46B,EAAQ,2BAAKD,GAAN,IAAYD,IAAK16B,EAAM11B,OAAOpQ,eAKlE,kBAACmhD,GAAA,EAAD,KACE,kBAACpoB,GAAA,EAAD,CAAQsT,QAASkF,EAAav5B,MAAM,WAApC,8CAGA,kBAAC+gB,GAAA,EAAD,CAAQsT,QAzMI,WAClB8zB,GAAY,GACZ3kB,GAAQ,GACR6kB,GAAc,GAEd,IAAI5+D,QAAJ,uCAAY,WAAOoJ,EAASK,GAAhB,uCAAApF,EAAA,sEAiBArE,QAAQC,IAAI,CACpBq/D,GAAoB,CAAE/E,aAAc,CAAEltC,WAAY,QAClDkyC,GAAkB,CAChBlgE,OAAQ,CACNylE,kBAAmBvrD,KAAOylD,EAAKD,KAAKzN,cACpCyT,kBAAmBxrD,KAAOylD,EAAKH,OAAOvN,cACtC9qC,QAAS,CAAC,6BAvBN,iDAQN3gB,KACoCq1D,EAT9B,EASJV,wBAA2BrrD,MAEPm1D,EAXhB,EAWJ3J,UAAaxrD,MAIPwwD,EAfF,KAeN95D,KAAQ85D,UAuBN9rB,EAAW,IAAIC,KAAQC,UACpB30B,YAAc,2DACvBy0B,EAASG,QAAU,IAAI3tC,KACvBwtC,EAASI,SAAW,IAAI5tC,KACxBwtC,EAASK,YAAc,IAAI7tC,KAErBi7D,EAAuB3vB,KAAQupB,EAAY,SAC3CmH,EAAqB1wB,KAAQguB,EAAU,yBAEtBxhD,MACfiiD,EAAevsB,EAASO,aAAa,sBAC3CqoB,GACE2D,EACAzuB,KAAQ2vB,EAAqBnjD,IAAK,MAClCkkD,EAAmBlkD,KAAO,GAC1B8Y,EACAqtC,EAASjlE,QAAO,SAACsqD,GAAD,OAAUA,EAAK77B,yBAAyB5jB,SAAS,YAIjEm4D,EAAmBnkD,MACfmiD,EAAexsB,EAASO,aAAa,sBAC3CqoB,GACE4D,EACA1uB,KAAQ2vB,EAAqBpjD,IAAK,MAClCmkD,EAAmBnkD,KAAO,GAC1B+Y,EACAqtC,EAASjlE,QAAO,SAACsqD,GAAD,OAAUA,EAAK77B,yBAAyB5jB,SAAS,YAIjEm4D,EAAmB55C,mBACfu8C,EAAkBnxB,EAASO,aAAa,+FAC9CqoB,GACEuI,EACArzB,KAAQ2vB,EAAqB74C,iBAAkB,MAC/C45C,EAAmB55C,kBAAoB,GACvCwO,EACAqtC,EAASjlE,QAAO,SAACsqD,GAAD,OAAUA,EAAK77B,yBAAyB5jB,SAAS,yBAIjEm4D,EAAmBljD,QACf8lD,EAAiBpxB,EAASO,aAAa,wCAC7CqoB,GACEwI,EACAtzB,KAAQ2vB,EAAqBniD,MAAO,MACpCkjD,EAAmBljD,OAAS,GAC5B8X,EACAqtC,EAASjlE,QAAO,SAACsqD,GAAD,OAAUA,EAAK77B,yBAAyB5jB,SAAS,cAvF3D,kBA2FH2pC,EAASmB,KACbC,cACA30C,MAAK,SAACuF,GACL,IAAMjG,EAAO,IAAIC,KAAK,CAACgG,GAAO,CAC5B/F,KAAM,sEAER,GAAIW,OAAOy0C,WAAaz0C,OAAOy0C,UAAUC,iBACvC10C,OAAOy0C,UAAUC,iBAAiBv1C,EAAM,sHACnC,CACL,IAAMY,EAAMC,OAAOC,IAAIC,gBAAgBf,GACjCyE,EAAItG,SAASq3C,cAAc,KACjCr3C,SAASiZ,KAAKq+B,YAAYhxC,GAC1BA,EAAEixC,KAAO90C,EACT6D,EAAEkrB,SAAW,iHACblrB,EAAEkxC,QACF90C,OAAOC,IAAI80C,gBAAgBh1C,GAC3BzC,SAASiZ,KAAKy+B,YAAYpxC,OAG7B/D,MAAK,WACJ8I,OApBG,OAsBE,SAACkhC,GACN7gC,EAAO6gC,OAlHD,4CAAZ,yDAqHGhqC,MAAK,WACJo+D,GAAY,GACZ3kB,GAAQ,MAvHZ,OAyHS,SAACzP,GACNtpC,QAAQC,IAAIqpC,GACZo0B,GAAY,GACZ3kB,GAAQ,OAwEwBxjC,MAAM,WAApC,+EAKJ,kBAACiqD,GAAD,CAAsBx6D,QAAQ,mNAAyCm7B,KAAMA,QCzTtE+jC,GA5DiB,SAACxuC,GAAW,IAAD,EACT6I,oBAAS,GADA,mBAClC/B,EADkC,KACxBkhC,EADwB,KAEnCznC,EAAYC,eACZJ,EAAS,CACbquC,QAAS,CACP,CACEr5D,GAAI,mCACJjO,KAAM,gLACNuhB,YAAa,qaACbwX,SAAU,QAEZ,CACE9qB,GAAI,0BACJjO,KAAM,6CACNuhB,YAAa,sWACbwX,SAAU,QAEZ,CACE9qB,GAAI,2CACJjO,KAAM,oPACNuhB,YAAa,0ZACbwrB,QAAS,SAACvG,GAER,OADAA,EAAM4V,iBACCgiB,SAMTmJ,EAAc,CAClB3oC,GAAI,CAAE9c,MAAO,YAAa5J,KAAM,CAAC,GAAI,SAGvC,OACE,kBAACsvD,GAAD,iBAA0B3uC,EAA1B,CAAiCc,UAAU,QACzC,kBAACyD,GAAA,EAAD,CAAY1D,QAAQ,YAAYhhB,MAAM,gBAAgB2kB,cAAY,EAACC,QAAM,GACtElE,EAAU,yCAEb,kBAAC,GAAD,CAAYwF,GAAI2oC,EAAY3oC,IACzBh1B,GAAQi/B,IAAI,SAAU,eAAgB,WAAa,kBAAC,GAAD,CAAY5P,OAAQA,EAAOquC,QAAQ,KACtF19D,GAAQi/B,IAAI,SAAU,eAAgB,WAAa,kBAAC,GAAD,CAAY5P,OAAQA,EAAOquC,QAAQ,MAEzF,kBAAClqC,GAAA,EAAD,CAAY1D,QAAQ,YAAYhhB,MAAM,gBAAgBgrB,MAAO,CAAEzL,UAAW,IAAMoF,cAAY,EAACC,QAAM,GAChGlE,EAAU,yCAEb,kBAAC,GAAD,CAAYwF,GAAI2oC,EAAY3oC,GAAIe,SAAUA,EAAUkhC,YAAaA,GAC9Dj3D,GAAQi/B,IAAI,SAAU,eAAgB,mBAAqB,kBAAC,GAAD,MAC3Dj/B,GAAQi/B,IAAI,SAAU,eAAgB,mBAAqB,kBAAC4+B,GAAD,MAC3D79D,GAAQi/B,IAAI,SAAU,eAAgB,gBAAkB,kBAAC,GAAD,MACxDj/B,GAAQi/B,IAAI,SAAU,eAAgB,UAAY,kBAAC,GAAD,MAClDj/B,GAAQi/B,IAAI,SAAU,eAAgB,WAAa,kBAAC6+B,GAAD,MACnD99D,GAAQi/B,IAAI,SAAU,eAAgB,aAAe,kBAAC8+B,GAAD,MACrD/9D,GAAQi/B,IAAI,SAAU,eAAgB,uBAAyB,kBAAC,GAAD,MAC/Dj/B,GAAQi/B,IAAI,SAAU,eAAgB,qBAAuB,kBAAC,GAAD,MAC7Dj/B,GAAQi/B,IAAI,SAAU,eAAgB,iBAAmB,kBAAC,GAAD,SCxCnDwyB,GA7BE,SAACxiC,GAChB,IAAMkQ,EAAkB4nB,aAAkB93B,GACpCg8B,EAAiB15B,IAAM0K,OAAO,MAEpC,OACE,kBAAC,GAAD,eAAU1e,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GAC3E,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWlM,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,gBAClB,kBAAC,KAAD,CAAWA,OAAO,QAClB,kBAAC,KAAD,CAAWA,OAAO,iBAClB,kBAAC,KAAD,CAAWA,OAAO,YAClB,kBAAC,KAAD,CAAWA,OAAO,UAGpB,kBAAC,GAAD,CAAW9yB,OAAQ,yBAAKk2B,IAAK40B,MAE7B,kBAAC,GAAD,CAAaA,eAAgBA,GAC3B,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWh4B,OAAO,OAClB,kBAACgoB,GAAA,EAAD,CAAWhoB,OAAO,cAClB,kBAAC,KAAD,CAAWA,OAAO,iBAAiBL,MAAM,oCACzC,kBAACqoB,GAAA,EAAD,CAAWhoB,OAAO,kB,oDCvBtBrF,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,CACJC,gBAAiBkxC,UAAO3xC,WACxBY,QAAS,gBACTU,aAAc9B,EAAM0d,MAAM5b,kBAIxBswC,GAAY,SAAC,GAAkC,IAAhC5uC,EAA+B,EAA/BA,OAAQ4D,EAAuB,EAAvBA,OACrB7D,GAD4C,oCAClCxB,MACVxvB,EAAO3D,cAAI40B,EAAQ4D,GACzB,IAAK70B,EAAM,OAAO,KAClB,IAAMywC,EAAuB,kBAATzwC,EAAoBA,EAAOswC,KAAK1X,MAAM54B,GAE1D,OACE,yBAAK8wB,UAAWE,EAAQvC,MACtB,kBAAC,KAAD,CAAYgiB,KAAMA,EAAMhjB,MAAOmyC,UAAQ/wC,QAAS,MAYtDgxC,GAAUvsC,aAAe,CACvBY,UAAU,GAGG2rC,UC/BTrwC,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvC1uB,KAAM,CACJ2R,MAAO+c,EAAME,QAAQ5uB,KAAKsgB,UAIxBg3B,GAAkB,SAAC5R,GAAD,OAAOA,EAAE4R,mBAE3BC,GAAc,SAAC,GAAiG,IAA/FxlB,EAA8F,EAA9FA,UAAoBqE,EAA0E,EAAnFnE,QAA0BD,EAAyD,EAAzDA,SAAUE,EAA+C,EAA/CA,OAAQn1B,EAAuC,EAAvCA,SAAU+4B,EAA6B,EAA7BA,OAAQ91B,EAAqB,EAArBA,KAAS8xB,EAAY,uFAC7GG,EAAUxB,GAAU,CAAEwB,QAASmE,IAE/BqM,EAAYnlC,KAAI40B,EAAQ,QACxB6uC,EAAczjE,KAAI40B,EAAQ,QAC1B9R,EAAQ9iB,KAAI40B,EAAQ4D,GACpB2hB,EAAWzlB,EAASz4B,QAAQwD,EAAU0lC,GACtCiV,EAAgB,UAAMD,EAAN,YAAkBx9C,mBAAmB8mE,GAArC,YAAqD/gE,GAE3E,OACE,kBAAC6yB,GAAA,EAAD,CAAMC,GAAI4kB,EAAkB1R,QAASsR,IACnC,kBAACjhB,GAAA,EAAD,eACEzD,UAAU,OACVD,QAAQ,QACRZ,UAAS,UAAKA,EAAL,YAAkBE,EAAQjyB,OAC/B0xB,GAAkBI,IAErB1R,KAMTm3B,GAAYhjB,aAAe,CACzBtC,QAAS,GACTjyB,KAAM,OACNm1B,UAAU,GAGGoiB,UChCT9mB,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvC1uB,KAAM,CACJ2R,MAAO+c,EAAME,QAAQ5uB,KAAKsgB,UAiCf0gD,GA7BK,SAAClvC,GACnB,IAAMkQ,EAAkB4nB,aAAkB93B,GAEpCg8B,GADUr9B,KACO2D,IAAM0K,OAAO,OAEpC,OACE,kBAAC,GAAD,eAAU1e,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GAC3E,kBAAC,GAAD,KACE,kBAAC,GAAD,CAAWlM,OAAO,SAASS,QAAM,IACjC,kBAAC,GAAD,CAAWT,OAAO,SAClB,kBAACmrC,GAAD,CAAWnrC,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,gBACjBjzB,GAAQi/B,IAAI,SAAU,UAAW,SAAW,kBAAC,GAAD,CAAWhM,OAAO,cAC9DjzB,GAAQi/B,IAAI,SAAU,UAAW,aAAe,kBAAC,GAAD,CAAWhM,OAAO,mBAGrE,kBAAC,GAAD,CAAW9yB,OAAQ,yBAAKk2B,IAAK40B,MAE7B,kBAAC,GAAD,CAAaA,eAAgBA,GAC3B,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWh4B,OAAO,OAClB,kBAACgoB,GAAA,EAAD,CAAWhoB,OAAO,cAClB,kBAAC,KAAD,CAAWA,OAAO,iBAAiBL,MAAM,2CCrC7CyrC,GAAcn+B,KCsBdtS,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCi6B,cAAe,OAyDFwY,GAtDW,SAAC,GAQrB,EAPJnvC,SAOK,IANLj1B,EAMI,EANJA,SACSq5B,EAKL,EALJnE,QACAF,EAII,EAJJA,UAEA2V,GAEI,EAHJmK,aAGI,EAFJnK,aACGtV,EACC,2FACEgvC,EAAajqC,cAAY,SAACC,GAAD,OAAWA,EAAMsV,MAAMzsB,UAAUqJ,UAAUroB,OAAMo2B,MAC1EkB,EAAWC,eACXt3B,EAAU4hC,eACV3K,EAASC,eACT2Z,EAAcC,eACd/f,EAAUxB,GAAU,CAAEwB,QAASmE,IANjC,EAO0BuE,oBAAS,GAPnC,mBAOGvwB,EAPH,KAOY6nC,EAPZ,KAgCJ,OACE,kBAAC,KAAD,eACEjM,QAzBgB,WAClBiM,GAAW,GACX1Z,EAAS2Z,gBC/CE,YAA+B,IAA5Bn1C,EAA2B,EAA3BA,SAAUwN,EAAiB,EAAjBA,MAAO1C,EAAU,EAAVA,IACjC,OAAOzM,QAAQC,IACbwM,EAAIvM,KAAI,SAAC4L,GAAD,OACN2hD,GACEt+C,EAAQ,CAAExN,SAAUwN,EAAMrD,GAAIhM,KAAMqO,MAAO,CAAErC,GAAIqD,EAAMrD,GAAIF,OAAW,CAAEjK,WAAUwM,MAAO,CAAErC,YAG/FxL,MAAK,SAAC23C,GAEN,MAAO,CAAEpyC,KADIoyC,EAAQ9sC,QAAO,SAACC,EAAD,OAAQvF,EAAR,EAAQA,KAAR,4BAAuBuF,GAAvB,CAA4BvF,EAAKiG,OAAK,QDyClEm6D,CAAqB,CACnBtkE,WACAwN,MAAO62D,EACPv5D,IAAK6/B,IAEJhsC,MAAK,WACJwF,IACAi3B,EAAO,sCAAuC,OAAQ,CAAEkV,YAAa3F,EAAYvsC,SACjF42C,EAAYh1C,MARhB,OAUS,SAACZ,GACNg8B,EAAwB,kBAAVh8B,EAAqBA,EAAQA,EAAMiF,SAAW,6BAA8B,cAX9F,SAaW,WACP6wC,GAAW,GACX1Z,EAASma,oBAOX9Z,SAAUxuB,EACVqrB,MAAM,oBACN1D,UAAS,4BAAuBE,EAAQ02B,cAA/B,YAAgD52B,GACzD30B,IAAI,UApEuB,SAAC,GAAD,EAC/B40B,SAD+B,EAE/BC,QAF+B,EAG/B4f,aAH+B,EAI/Bc,aAJ+B,EAK/BC,yBAL+B,EAM/BC,QAN+B,EAO/Bpd,MAP+B,EAQ/Bqd,SAR+B,EAS/B/1C,SAT+B,EAU/B22B,OAV+B,EAW/BgU,YAX+B,EAY/B/T,SAZ+B,EAa/BN,SAb+B,EAc/B0f,cAd+B,4MAqEvBrhB,CAAkBU,IAEtB,kBAAC,KAAD,Q,6ME5ES,mBAA0B,IAAvBr1B,EAAsB,EAAtBA,SAAUwM,EAAY,EAAZA,MAC1B,OAAO7G,GAAiBlC,OAAO,CAC7BC,SAAUH,IAAF,KAAuBvD,EAAoBA,EAC7BA,GAItB2D,UAAW,CAAE6I,SACb5I,QAAS,SAACxE,GACRyE,MAAMzE,OCaNs0B,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvC4yC,aAAc,OA0DDC,GAvDU,SAAC,GAQpB,EAPJvvC,SAOK,IANLj1B,EAMI,EANJA,SACSq5B,EAKL,EALJnE,QACAF,EAII,EAJJA,UAEA2V,GAEI,EAHJmK,aAGI,EAFJnK,aACGtV,EACC,2FACEgvC,EAAajqC,cAAY,SAACC,GAAD,OAAWA,EAAMsV,MAAMzsB,UAAUqJ,UAAUroB,OAAMo2B,MAC1EkB,EAAWC,eACXt3B,EAAU4hC,eACV3K,EAASC,eACT2Z,EAAcC,eACd/f,EAAUxB,GAAU,CAAEwB,QAASmE,IANjC,EAO0BuE,oBAAS,GAPnC,mBAOGvwB,EAPH,KAOY6nC,EAPZ,KAgCJ,OACE,kBAAC,KAAD,eACEjM,QAzBgB,WAClBiM,GAAW,GACX1Z,EAAS2Z,gBC9CE,YAA+B,IAA5Bn1C,EAA2B,EAA3BA,SAAUwN,EAAiB,EAAjBA,MAAO1C,EAAU,EAAVA,IACjC,OAAOzM,QAAQC,IACbwM,EAAIvM,KAAI,SAAC4L,GAAD,OACNs6D,GACEj3D,EAAQ,CAAExN,SAAUwN,EAAMrD,GAAIhM,KAAMqO,MAAO,CAAErC,GAAIqD,EAAMrD,GAAIF,OAAW,CAAEjK,WAAUwM,MAAO,CAAErC,YAG/FxL,MAAK,SAAC23C,GAEN,MAAO,CAAEpyC,KADIoyC,EAAQ9sC,QAAO,SAACC,EAAD,OAAQvF,EAAR,EAAQA,KAAR,4BAAuBuF,GAAvB,CAA4BvF,EAAKiG,OAAK,QDwClEu6D,CAAoB,CAClB1kE,WACAwN,MAAO62D,EACPv5D,IAAK6/B,IAEJhsC,MAAK,WACJwF,IACAi3B,EAAO,qCAAsC,OAAQ,CAAEkV,YAAa3F,EAAYvsC,SAChF42C,EAAYh1C,MARhB,OAUS,SAACZ,GACNg8B,EAAwB,kBAAVh8B,EAAqBA,EAAQA,EAAMiF,SAAW,6BAA8B,cAX9F,SAaW,WACP6wC,GAAW,GACX1Z,EAASma,oBAOX9Z,SAAUxuB,EACVqrB,MAAM,mBACN9jB,MAAM,YACNogB,UAAS,2BAAsBE,EAAQqvC,aAA9B,YAA8CvvC,GACvD30B,IAAI,UArEuB,SAAC,GAAD,EAC/B40B,SAD+B,EAE/BC,QAF+B,EAG/B4f,aAH+B,EAI/Bc,aAJ+B,EAK/BC,yBAL+B,EAM/BC,QAN+B,EAO/Bpd,MAP+B,EAQ/Bqd,SAR+B,EAS/B/1C,SAT+B,EAU/B22B,OAV+B,EAW/BgU,YAX+B,EAY/B/T,SAZ+B,EAa/BN,SAb+B,EAc/B0f,cAd+B,4MAsEvBrhB,CAAkBU,IAEtB,kBAAC,KAAD,QEpDA3B,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvC4yC,aAAc,CACZ3vD,MAAO,wBAIL+vD,GAAe,SAAC,GASf,IARItrC,EAQL,EARJnE,QACAF,EAOI,EAPJA,UAEAh1B,GAKI,EANJipC,QAMI,EALJjpC,UACAm1B,EAII,EAJJA,OAGGE,GACC,EAHJJ,SAGI,EAFJqB,SAEI,6FACEpB,EAAUxB,GAAU,CAAEwB,QAASmE,IAC/BmC,EAAWC,eACXt3B,EAAU4hC,eACV3K,EAASC,eAJX,EAK0BuC,oBAAS,GALnC,mBAKGvwB,EALH,KAKY6nC,EALZ,KA4BJ,OACE,kBAAC,KAAD,eACEjM,QAvBiB,SAACvG,GACpBwS,GAAW,GACX1Z,EAAS2Z,gBAETsvB,GAAgB,CACdzkE,WACAwM,MAAO,CAAErC,GAAIgrB,EAAOhrB,MAEnBxL,MAAK,WACJy8B,EAAO,qCAAsC,OAAQ,CAAEkV,YAAa,IACpEnsC,OANJ,OAQS,SAAC/E,GACNg8B,EAAwB,kBAAVh8B,EAAqBA,EAAQA,EAAMiF,SAAW,6BAA8B,cAT9F,SAWW,WACP6wC,GAAW,GACX1Z,EAASma,oBAOX9Z,SAAUxuB,EACVuoB,QAAQ,YACRxhB,KAAK,SACLskB,MAAM,mBACN1D,UAAS,2BAAsBE,EAAQqvC,aAA9B,YAA8CvvC,IApE5B,SAAC,GAAD,EAC/BC,SAD+B,EAE/BC,QAF+B,EAG/B4f,aAH+B,EAI/Bc,aAJ+B,EAK/BC,yBAL+B,EAM/BC,QAN+B,EAO/Bpd,MAP+B,EAQ/Bqd,SAR+B,EAS/B/1C,SAT+B,EAU/B22B,OAV+B,EAW/BgU,YAX+B,EAY/B/T,SAZ+B,EAa/BN,SAb+B,EAc/B0f,cAd+B,4MAqEvBrhB,CAAkBU,IAEtB,kBAAC,KAAD,QAcNsvC,GAAantC,aAAe,CAC1BlB,UAAU,GAGGquC,UC1ETjxC,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyyB,IAAK,CACHpxC,OAAQ,QAIN4xD,GAA6B,SAAC7vC,GAAD,OACjC,oCACGjvB,GAAQi/B,IAAI,UAAW,SAAW,kBAAC,GAAsBhQ,GACzDjvB,GAAQi/B,IAAI,SAAU,SACrB,kBAAC,GAAD,iBAAsBhQ,EAAtB,CAA6B6K,MAAO,CAAEhrB,MAAO,oBAAsBwf,KAAM,kBAAC,KAAD,SAE3E,kBAACswB,GAAA,EAAqB3vB,KAIpB8vC,GAAkB,SAAC9vC,GAAD,OACtB,kBAAC6vB,GAAuB7vB,EACtB,kBAAC,KAAD,CAAagE,OAAO,IAAI+f,UAAQ,IAChC,kBAACrT,GAAA,EAAD,CAAgBC,UAAU,OAAO3M,OAAO,eAAeL,MAAM,uCAAuCogB,UAAQ,GAC1G,kBAAC,GAAD,CAAmBpa,WAAW,YAU9BomC,GAAuB,SAAC/vC,GAAD,OAC3B,kBAAC,GAAD,iBAAmBA,EAAnB,CAA0B/0B,SAAU+0B,EAAMI,OAAOh3B,KAAMg3B,OAAQ,CAAEhrB,GAAI4qB,EAAMI,OAAOlrB,MAAQ2rB,QAAQ,WAE9FmvC,GAAsB,SAAChwC,GAAD,OAC1B,kBAAC,GAAD,iBACMA,EADN,CAEE/0B,SAAU+0B,EAAMI,OAAOh3B,KACvBg3B,OAAQ,CAAEhrB,GAAI4qB,EAAMI,OAAOlrB,KAAM9L,KAAM42B,EAAMI,OAAOh3B,MACpDi2B,KAAM,kBAAC,KAAD,MACNwB,QAAQ,WAINovC,GAAgB,SAAC,GAA+B,IAA7B3f,EAA4B,EAA5BA,YAAgBtwB,EAAY,gCAC7CG,EAAUxB,KACV4B,EAAYC,eACZ8e,EAAWuI,GAAetnB,EAAU,aAAD,OAAcP,EAAM/0B,SAApB,SAAqC,CAAEswC,YAAa,IAAM+U,EAAa,CAC9G/vB,cAEIuwB,EAAmBxuB,IAAM0K,OAAO,MAEtC,OACE,kBAAC,GAAD,iBACMhN,EADN,CAEE1Y,QAAS,kBAAC,GAAD,CAAiBslC,QAASkE,IACnCc,kBAAmB,kBAAC,GAAD,MACnBtS,SAAUA,IAEV,kBAACzJ,GAAA,EAAD,CAAU1V,QAAS,CAAEkvB,IAAKlvB,EAAQkvB,MAChC,kBAAC,GAAD,CAAWrrB,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,gBAClB,kBAAC,KAAD,CAAWA,OAAO,iBAAiBL,MAAM,uCAAuCE,UAAU,IAC1F,kBAACmoB,GAAA,EAAD,CAAWhoB,OAAO,cAClB,kBAAC,GAAD,MACA,kBAAC,GAAD,SAMRisC,GAAcxtC,aAAe,CAC3B7qB,QAAS,IACTC,KAAM,CAAEf,MAAO,YAAagB,MAAO,QACnCw4C,YAAa,CACXlnD,KAAM2zC,GACN51C,MAAM,EACNuhB,aAAa,EACb+O,UAAW,CACTtwB,MAAM,EACN61C,WAAY,QAEdtlB,UAAWmlB,GACXG,WAAY,cAIDizB,UC3GTC,I,QAAgBj/B,MCgMP4O,GArKiB,SAAC,GAS3B,EARJ3f,SAQK,IAPLj1B,EAOI,EAPJA,SACA+4B,EAMI,EANJA,OACA8b,EAKI,EALJA,QACA7f,EAII,EAJJA,UAEA2V,GAEI,EAHJmK,aAGI,EAFJnK,aACGtV,EACC,oGAoFEhtB,EAAe0sC,eACfvZ,EAAWC,eACXL,EAASC,eACT2Z,EAAcC,eAvFhB,EAwF0BrX,oBAAS,GAxFnC,mBAwFGvwB,EAxFH,KAwFY6nC,EAxFZ,KAyFExc,EAAQmc,EAAO,0DAAwD9b,GAkD7E,OACE,oCACE,kBAAC,KAAD,eACEkQ,QAnDc,WAClBiM,GAAW,GACX1Z,EAAS2Z,gBAET9sC,EAAaM,QAAQ3I,EAAU,CAAE8K,IAAK6/B,IAAehsC,MAAK,YAAe,IACnEy2C,EADkE,EAAXlxC,KACxC3F,KAAI,SAAC82C,GACtB,IAAMC,EAAU,GAShB,OARIT,GAAWA,EAAQz2C,OACrBy2C,EAAQz0C,SAAQ,SAACm1C,GACXF,EAAKE,IAAID,EAAQnE,KAAR,MAAAmE,EAAO,YAASD,EAAKE,GAAGh3C,KAAI,SAACZ,GAAD,OAAUA,EAAKqc,eAG1Ds7B,EAAQnE,KAAR,MAAAmE,EAAO,YAASD,EAAKtc,GAAQx6B,KAAI,SAACZ,GAAD,OAAUA,EAAKqc,YAG3C,CAKLw7B,QAASH,EAAKlrC,GACdma,WAAY,UAAG+wB,EAAK/wB,YAAc+wB,EAAKjxB,OAAQvkB,UAAU,EAAG,KAC5Dy1C,cAGJF,EAAUA,EAAQ13C,QAAO,SAAC+3C,GAAD,OAAYA,EAAOH,QAAQl3C,OAAS,KAC7D,IAAM4f,EAAQ2sB,EAAYvsC,OAASg3C,EAAQh3C,OAEvC4f,EAAQ,GAAGod,EAAO,4BAAD,OAA6BrC,EAA7B,UAA6C,OAAQ,CAAEuX,YAAatyB,EAAOA,MAAOA,IACnGo3B,EAAQh3C,OACVs3C,GAAcN,GAASz2C,MAAK,SAACuF,GAC3B,IAAMxB,EAAItG,SAASq3C,cAAc,KACjC/wC,EAAEk9B,MAAM/L,QAAU,OAClBz3B,SAASiZ,KAAKq+B,YAAYhxC,GAC1BA,EAAEixC,KAAOzvC,EAAKrF,IACd6D,EAAEkxC,QACFsB,GAAW,GACX1Z,EAASma,oBAGXT,GAAW,GACX1Z,EAASma,iBAEXX,EAAYh1C,GACZo7B,EAAO,oQAQLS,SAAUxuB,EACVqrB,MAAOA,EACP1D,UAAWA,EACX30B,IAAI,UA7KqB,SAAC,GAAD,EAC/B40B,SAD+B,EAE/BC,QAF+B,EAG/B4f,aAH+B,EAI/Bc,aAJ+B,EAK/BC,yBAL+B,EAM/BC,QAN+B,EAO/Bpd,MAP+B,EAQ/Bqd,SAR+B,EAS/B/1C,SAT+B,EAU/B22B,OAV+B,EAW/BgU,YAX+B,EAY/B/T,SAZ+B,EAa/BN,SAb+B,EAc/B0f,cAd+B,4MA8KrBrhB,CAAkBU,IAEtB,kBAAC4gB,GAAD,SCzJFviB,GAAYC,cAAW,SAAChC,GAC5B,MAAO,CACLvO,KAAM,CACJxO,MAAO,eAkGEswD,GA7FgB7tC,IAAMwgB,YACnC,WAAgF1b,GAAS,IAAtFn8B,EAAqF,EAArFA,SAAqB+4B,GAAgE,EAA3E/D,UAA2E,EAAhE+D,QAAQ8b,EAAwD,EAAxDA,QAASC,EAA+C,EAA/CA,aAActsB,EAAiC,EAAjCA,aAAiB6M,EAAgB,0FAChFhtB,EAAe0sC,eACfzf,EAAYC,eACZiG,EAAWC,eACXL,EAASC,eAGT2Z,GAFUthB,KACH0G,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC5B2a,gBAPkE,EAQxDrX,oBAAS,GAR+C,mBAQ/EvwB,EAR+E,KAQtE6nC,EARsE,OASxDtX,mBAAS,IAT+C,gCAU9DA,oBAAS,IAVqD,gCAWxDA,sBAXwD,mBAYhFlF,GAZgF,UAYxEpD,EAAUuf,EAAO,0DAAwD9b,KACjFujB,EAAexH,IAAiBA,EAAar5B,QAAUq5B,EAAatpB,cAmE1E,OACE,kBAACkV,GAAA,EAAD,eAAUrgC,IAAI,SAAS87B,IAAKA,EAAK8M,QAlEf,SAACN,GACnBA,EAAE4R,kBACFrF,GAAW,GACX1Z,EAAS2Z,gBAET9sC,EACGI,QAAQzI,EAAU,CAAEtC,OAAO,eAAMo3C,GAAgBroC,WAAY,CAAEC,KAAM,GAAKE,KAAM,KAChFjO,MAAK,gBAAG+O,EAAH,EAAGA,MAAH,OACJrF,EACGI,QAAQzI,EAAU,CAAEtC,OAAO,eAAMo3C,GAAgBroC,WAAY,CAAEE,QAASe,EAAOhB,KAAM,GAAKE,KAAM,KAChGjO,MAAK,YAAsB,IAAnBuF,EAAkB,EAAlBA,KAAMwJ,EAAY,EAAZA,MACT0nC,EAAUlxC,EAAK3F,KAAI,SAAC82C,GACtB,IAAMC,EAAU,GAQhB,OAPIT,GAAWA,EAAQz2C,OACrBy2C,EAAQz0C,SAAQ,SAACm1C,GACXF,EAAKE,IAAID,EAAQnE,KAAR,MAAAmE,EAAO,YAASD,EAAKE,GAAGh3C,KAAI,SAACZ,GAAD,OAAUA,EAAKqc,eAG1Ds7B,EAAQnE,KAAR,MAAAmE,EAAO,YAASD,EAAKtc,GAAQx6B,KAAI,SAACZ,GAAD,OAAUA,EAAKqc,YAE3C,CACLw7B,QAASH,EAAKlrC,GACdma,WAAY,WAAI+wB,EAAKjxB,MAAQixB,EAAKjxB,MAAQ,IAAM,KAAOixB,EAAKn5C,KAAOm5C,EAAKn5C,KAAO,IAAM,KAClFM,QAAQ,KAAM,KACdqD,UAAU,EAAG,IAChBy1C,cAKEt3B,EAAQtQ,GADd0nC,EAAUA,EAAQ13C,QAAO,SAAC+3C,GAAD,OAAYA,EAAOH,QAAQl3C,OAAS,MAC/BA,OAE1B4f,EAAQ,GACVod,EAAO5S,GAAY,mCAAgCuQ,EAAhC,UAAgD,OAAQ,CACzEuX,YAAatyB,EACbA,MAAOA,IAGPo3B,EAAQh3C,OACVs3C,GAAcN,GAASz2C,MAAK,SAACuF,GAC3B,IAAMxB,EAAItG,SAASq3C,cAAc,KACjC/wC,EAAEk9B,MAAM/L,QAAU,OAClBz3B,SAASiZ,KAAKq+B,YAAYhxC,GAC1BA,EAAEixC,KAAOzvC,EAAKrF,IACd6D,EAAEkxC,QACFsB,GAAW,GACX1Z,EAASma,oBAGXT,GAAW,GACX1Z,EAASma,iBAGXX,EAAYh1C,MA7ChB,OA+CS,SAACZ,GACNg8B,EAAwB,kBAAVh8B,EAAqBA,EAAQA,EAAMiF,SAAW,6BAA8B,cAhD9F,SAkDW,WACP6wC,GAAW,GACX1Z,EAASma,uBAMsC9Z,SAAUxuB,IAAYivC,GAAkBjnB,GAC7F,kBAACukB,GAAA,EAAD,KACE,kBAAC3D,GAAD,OAEF,kBAAC3c,GAAA,EAAD,CAAY1D,QAAQ,WAAW8C,OCzHjCymB,GAAc,SAAC,GAAD,IAClBzU,EADkB,EAClBA,YACA1V,EAFkB,EAElBA,UACAh1B,EAHkB,EAGlBA,SACAqc,EAJkB,EAIlBA,QACAo8B,EALkB,EAKlBA,iBACAN,EANkB,EAMlBA,WACA9D,EAPkB,EAOlBA,SACAS,EARkB,EAQlBA,aACAsK,EATkB,EASlBA,gBACA1nB,EAVkB,EAUlBA,UACAzC,EAXkB,EAWlBA,SAGAyjB,GAdkB,EAYlB/N,YAZkB,EAalB0U,gBAbkB,EAclB3G,YACAgE,EAfkB,EAelBA,WACAhvC,EAhBkB,EAgBlBA,MACG2nB,EAjBe,6OAmBlB,kBAACgV,GAAA,EAAD,eAAYrV,UAAWA,GAAesqB,aAAsBjqB,IACzDhZ,GACC6a,uBAAa7a,EAAS,CACpBrc,WACA04C,aACAD,mBACAN,aACArD,eACAyK,QAAS,WAEZ7nB,GAAa,kBAAC8nB,GAAA,EAAD,CAAcvqB,SAAUA,IACtC,kBAACwqB,GAAD,KACE,kBAAC,GAAD,CACE5jB,SAAoB,IAAVnuB,EACV1N,SAAUA,EACV4M,KAAM89B,EACNhtC,OAAM,2BAAOo3C,GAAiBsK,GAC9B/K,SAAUA,EACVqI,WAAYA,IAEd,kBAAC,GAAD,CACE5H,aAAcA,EACd90C,SAAUA,EACV+4B,OAAO,OACPvQ,aAAa,+CAEf,kBAAC,GAAD,CACEssB,aAAcA,EACd90C,SAAUA,EACV+4B,OAAO,QACPvQ,aAAa,gDAEf,kBAAC,GAAD,CACEssB,aAAcA,EACd90C,SAAUA,EACV+4B,OAAO,gBACPvQ,aAAa,gDAEf,kBAAC,GAAD,CACEssB,aAAcA,EACd90C,SAAUA,EACV+4B,OAAO,eACPvQ,aAAa,gDAEf,kBAAC,GAAD,CACEssB,aAAcA,EACd90C,SAAUA,EACV+4B,OAAO,cACPvQ,aAAa,gDAEf,kBAAC,GAAD,CACEqT,SAA+C,IAArC37B,OAAOC,KAAK20C,GAAc12C,OACpC4B,SAAUA,EACVtC,OAAM,eAAOo3C,QAMrBqK,GAAY3nB,aAAe,CACzBmT,YAAa,GACb0U,gBAAiB,kBAAM,OAGVF,UC1DTzrB,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyyB,IAAK,CACHpxC,OAAQ,QAUNmyD,IANexxC,cAAW,SAAChC,GAAD,MAAY,CAC1CiC,UAAW,CACTqF,aAAc,WAIc,SAAClE,GAC/B,OACE,oCACE,kBAAC,GAAD,iBAA6BA,EAA7B,CAAoCgE,OAAO,WAC3C,kBAAC,GAAD,iBAA6BhE,EAA7B,CAAoCgE,OAAO,UAC3C,kBAAC,GAAD,iBAA6BhE,EAA7B,CAAoCgE,OAAO,mBAC3C,kBAAC,GAAD,iBAA6BhE,EAA7B,CAAoCgE,OAAO,kBAC3C,kBAAC,GAAD,iBAA6BhE,EAA7B,CAAoCgE,OAAO,iBAC3C,kBAAC2rB,GAAA,EAAqB3vB,MAMtBqwC,GAAyB,SAACrwC,GAC9B,IAAM1tB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpS,EAAW7gB,GAAQA,EAAK6gB,SAAY,GAFF,EAGd0V,mBAAqC,QAA5B7I,EAAM+f,aAAa32C,MAHd,mBAGjCk8B,EAHiC,KAG1B2oB,EAH0B,KAexC,OAVAllB,qBAAU,WACwB,QAA5B/I,EAAM+f,aAAa32C,KACrB6kD,GAAS,GAETA,GAAS,KAIV,CAACjuB,EAAM+f,aAAa32C,OAGrB,kBAACymD,GAAuB7vB,EACtB,kBAAC,KAAD,CAAagE,OAAO,IAAI+f,UAAQ,IAChC,kBAACrT,GAAA,EAAD,CACE1M,OAAO,kBACPnsB,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B64B,UAAU,eACVhoC,OAAQ,CAAEwqB,QAASA,EAAQ3pB,KAAI,SAAC+H,GAAD,MAAQ,CAAE6D,GAAI7D,OAC7CoyB,MAAM,mDACNH,UAAU,gBACVugB,UAAQ,GAER,kBAAC,GAAD,CAAmBpa,WAAW,UAEhC,kBAAC+G,GAAA,EAAD,CACE1M,OAAO,YACP2M,UAAU,SACV/4B,QAAS,GACTjP,OAAQ,CAAEoN,IAAKod,GACftb,KAAM,CAAEf,MAAO,oBACf6sB,MAAM,6CACNH,UAAU,iBAEV,kBAAC,GAAD,CAAmBmG,WAAW,mBAAmBmD,eAAgB,kBAAC,GAAD,SAEnE,kBAACmjB,GAAA,EAAD,CAAsBjsB,OAAO,aAAaksB,UAAU,iBAAiBnM,UAAQ,IAC7E,kBAAC,GAAD,CAAW/f,OAAO,OAAOqF,KAAK,yBAAyBC,QAASA,GAAS9F,UAAU,gBAAgBugB,UAAQ,IAC3G,kBAACvT,GAAA,EAAD,CAAWxM,OAAO,UAClB,kBAAC4M,GAAA,EAAD,CACE5M,OAAO,UACP2M,UAAU,SACVhN,MAAM,8CACN/rB,QAAS,GACT4rB,UAAU,iBAEV,kBAACqM,GAAA,EAAD,CAAwBlG,WAAW,UAEpCrE,GACC,kBAACoL,GAAA,EAAD,CACE1M,OAAO,qBACP2M,UAAU,kBACV/4B,QAAS,GACT4rB,UAAU,gBACVG,MAAM,uDAEN,kBAAC,GAAD,CAAmBgG,WAAW,YAO3B2mC,GAAoC,SAACtwC,GAChD,IAAMG,EAAUxB,KAEhB,OACE,kBAACkX,GAAA,EAAD,CAAUua,SAAS,OAAOjwB,QAAS,CAAEkvB,IAAKlvB,EAAQkvB,MAChD,kBAAC,GAAD,CAAWrrB,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,oBAClB,kBAAC,KAAD,CAAWA,OAAO,SAClB,kBAAC+gB,GAAA,EAAD,CACE/gB,OAAO,YACPL,MAAM,6CACNgN,UAAU,SACVziC,MAAM,GAEN,kBAAC,KAAD,CAAW81B,OAAO,sBAEpB,kBAAC,KAAD,CAAWA,OAAO,eAClB,kBAAC,GAAD,KACE,kBAAC,GAAD,SAMFusC,GAAuB,SAAC,GAA+B,IAA7BjgB,EAA4B,EAA5BA,YAAgBtwB,EAAY,gCACpDO,EAAYC,eACZluB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpS,EAAW7gB,GAAQA,EAAK6gB,SAAY,GACpC+c,EAAkBghB,aAAkB,aAAEvoD,OAAQ,CAAEwqB,QAASA,EAAQ3pB,KAAI,SAAC+H,GAAD,MAAQ,CAAE6D,GAAI7D,QAAYyuB,IAC/FG,EAAUxB,KACV2gB,EAAWuI,GAAetnB,EAAU,aAAD,OAAcP,EAAM/0B,SAApB,SAAqC,CAAEswC,YAAa,IAAM+U,EAAa,CAC9G/vB,cAEIuwB,EAAmBxuB,IAAM0K,OAAO,MAEtC,OACE,kBAAC,GAAD,eACEmkB,oBAAqB,CAAEh+B,QAASA,EAAQ3pB,KAAI,SAAC+H,GAAD,MAAQ,CAAE6D,GAAI7D,OAC1D+V,QAAS,kBAAC,GAAD,CAAwBslC,QAASkE,EAAkB1N,WAAYlT,EAAgBkT,aACxFwO,kBAAmB,kBAAC,GAAD,MACnB1wB,QAAS,kBAACsvC,GAAD,CAA6B7oB,WAAY,OAC9C3nB,EACAkQ,EANN,CAOEt4B,QAAS,IACT0nC,SAAUA,IAEV,kBAACzJ,GAAA,EAAD,CAAUua,SAAS,OAAOjwB,QAAS,CAAEkvB,IAAKlvB,EAAQkvB,MAChD,kBAAC,GAAD,CAAWrrB,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,oBAClB,kBAAC,GAAD,CAAaA,OAAO,QAClB,kBAAC,KAAD,OAEF,kBAAC,GAAD,CAAaA,OAAO,eAAe2M,UAAU,eAAeziC,MAAM,EAAO41B,OAAO,qBAC9E,kBAAC,KAAD,CAAWE,OAAO,UAEpB,kBAAC,KAAD,CAAWA,OAAO,eAClB,kBAAC,GAAD,KACE,kBAAC,GAAD,UAOVusC,GAAqB9tC,aAAe,CAClC7qB,QAAS,IACTC,KAAM,CAAEf,MAAO,YAAagB,MAAO,QAEnCw4C,YAAa,CACXl7C,IAAI,EACJhM,KAAM2zC,GACN51C,MAAM,EACNuhB,aAAa,EACbqG,UAAW8tB,GACX93B,UAAW,CACT5d,MAAM,EACN61C,WAAY,QAEd9tB,UAAW2tB,GACXl0B,iBAAiB,EACjBjC,OAAQ,CACNvf,MAAM,EACN61C,WAAY,UAEdj9B,YAAY,EACZ8I,WAAY,CACV1hB,MAAM,EACN8hB,OAAO,EACPC,eAAe,EACf9f,KAAM2zC,GACNC,WAAY,oBAEdx6B,QAAS,CACPrb,MAAM,EACN61C,WAAY,UAEdvmB,aAAc,CACZtvB,MAAM,EACN61C,WAAY,gBAEdl0B,QAAQ,EACRk0B,WAAY,uBAIDuzB,U,WC7MAE,GAtBE,SAAC,GAAkC,IAAhCzsC,EAA+B,EAA/BA,OAAQ5D,EAAuB,EAAvBA,OAAWJ,EAAY,oCAC3CukB,EAAOiO,eAcb,MAA8B,QAbZhsB,eAaJxwB,OAAO5M,KAAuB,KAG1C,kBAAC,GAAD,iBAAuB42B,EAAvB,CAA8B7qB,MAAK,2BAAO6qB,EAAM7qB,OAAb,IAAoB2yB,SAdxC,SAACjgC,GAChB,IAAM2hC,EAASxJ,EAAMyJ,QAAQp2B,MAAK,SAACq9D,GAAD,OAAQA,EAAGt7D,KAAOvN,KAChD2hC,GACF+a,EAAKqO,OACH,aACAppB,EAAO3gB,WAAWrf,KAAI,SAAC2Y,GAAD,mBAAC,eAAoBA,GAArB,IAAgC/M,QAAIzN,QAG9Dq4B,EAAM7qB,MAAM2yB,SAASjgC,MAMwDm8B,OAAQA,EAAQ5D,OAAQA,M,oZCjBzE5xB,cAAH,MAAtB,IC8GQmiE,GAtGc,SAAC,GAA2D,EAAzD1wC,UAAyD,EAA9Ch1B,SAA8C,EAApC+4B,OAAoC,EAA5B5D,OAA4B,2DAAC,IAClFG,EAAYC,eADqE,EAE/D8B,IAAMuG,UAAS,GAFgD,mBAEhF4B,EAFgF,KAE1E4Y,EAF0E,KAGjFutB,EAAYtuC,IAAM0K,OAAO,MACzBuX,EAAOiO,eACPlgD,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CzD,EAAUiT,eACVlnB,EAAWmyB,eAPsE,EAQ/DnX,qBAR+D,mBAQhF15B,EARgF,KAQ1E0hE,EAR0E,KASjF19C,GAAW7gB,GAAOA,EAAK6gB,SAAgB,IAAI3pB,KAAI,SAAC+H,GAAD,MAAQ,CAAE6D,GAAI7D,MAEnEw3B,qBAAU,WACRlb,EACGna,QAAQ,oBAAqB,CAC5B/K,OAAQ,CAAEwqB,WACVzb,WAAY,CAAEC,KAAM,EAAGC,QAAS,KAChCC,KAAM,CAAEf,MAAO,KAAMgB,MAAO,SAE7BlO,MAAK,YAAgB,IAAb+O,EAAY,EAAZA,MACPkV,EACGna,QAAQ,oBAAqB,CAC5B/K,OAAQ,CAAEwqB,WACVzb,WAAY,CAAEC,KAAM,EAAGC,QAASe,GAChCd,KAAM,CAAEf,MAAO,KAAMgB,MAAO,SAE7BlO,MAAK,gBAASknE,EAAT,EAAG3hE,KAAH,OAAyB0hE,EAAQC,WAE5C,CAAChvC,IAEJ,IAoBMsX,EAAc,SAACzL,GACfijC,EAAU9iC,SAAW8iC,EAAU9iC,QAAQijC,SAASpjC,EAAM11B,SAI1DorC,GAAQ,IAGV,OACE,kBAACvd,GAAA,EAAD,CAAMjH,WAAS,EAACmyC,UAAU,SAASz5B,WAAW,cAC5C,kBAACzR,GAAA,EAAD,CAAM5wB,MAAI,EAAC6wB,GAAI,IACb,yBAAKqB,IAAKwpC,GACR,kBAAC,KAAD,CAAQ18B,QAhBK,WACnBmP,GAAQ,SAAC4tB,GAAD,OAAeA,MAecttC,MAAOpD,EAAU,4BAA6BM,QAAQ,eAEtF1xB,GACC,kBAACq7B,GAAA,EAAD,CACEC,KAAMA,EACNC,SAAUkmC,EAAU9iC,QACpBjD,MAAO,CAAEd,OAAQ,KACjB72B,UAAMvL,EACN4pC,YAAU,EACVynB,eAAa,IAEZ,gBAAGkY,EAAH,EAAGA,gBAAiBxuB,EAApB,EAAoBA,UAApB,OACC,kBAACyuB,GAAA,EAAD,iBACMD,EADN,CAEErmC,MAAO,CACL2uB,gBAA+B,WAAd9W,EAAyB,WAAa,iBAGzD,kBAAC9X,GAAA,EAAD,KACE,kBAACwmC,GAAA,EAAD,CAAmBC,YAAaj4B,GAC9B,kBAACk4B,GAAA,EAAD,CAAUl8D,GAAG,qBACVjG,GACCA,EAAK3F,KAAI,SAAC+nE,EAAUnvD,GAClB,OACE,kBAACupB,GAAA,EAAD,CAAUrgC,IAAKimE,EAASn8D,GAAI8+B,QAAS,SAACvG,GAAD,OAxDnC,SAACA,EAAOvrB,GAClCmiC,EAAKqO,OACH,aACAzjD,EAAKiT,GAAOyG,WAAWrf,KAAI,SAAC2Y,GAC1B,MAAO,CACLhb,KAAMgb,EAAUhb,KAChBiC,KAAM+Y,EAAU/Y,KAChB6f,MAAO9G,EAAU8G,MACjBC,cAAe/G,EAAU+G,cACzBR,YAAavG,EAAUuG,iBAI7B26B,GAAQ,GA2CgEmuB,CAAoB7jC,EAAOvrB,KACzE,0BAAMyoB,MAAO,CAAEzM,SAAU,UAAYmzC,EAASpqE,oBCT7DsqE,GA/EY,SAAC,GAA2D,EAAzDxxC,UAAyD,EAA9Ch1B,SAA8C,EAApC+4B,OAAoC,EAA5B5D,OAA4B,2DACnEI,eADoE,IAEhFiG,EAAWC,eAFoE,EAG7DpE,IAAMuG,UAAS,GAH8C,mBAG9E4B,EAH8E,KAGxE4Y,EAHwE,KAI/Ej0C,EAAU4hC,eACVnjB,EAAWmyB,eACb74C,EAAO,WACPuhB,EAAc,GACZ6d,EAAYC,eAcZ4S,EAAc,WAClBiK,GAAQ,IAqBV,OACE,6BACE,kBAAC,KAAD,CAAQxiB,QAAQ,WAAWhhB,MAAM,UAAUq0B,QA5BvB,WACtBmP,GAAQ,IA2B+D1f,MAAM,gGAC3E,kBAAC+kB,GAAA,EAAD,CAAQje,KAAMA,EAAMiP,QAASN,EAAauP,kBAAgB,qBACxD,kBAACC,GAAA,EAAD,CAAaxzC,GAAG,qBAAhB,+FACA,kBAACyzC,GAAA,EAAD,KACE,kBAACC,GAAA,EAAD,4QACA,kBAACxgB,GAAA,EAAD,CACEygB,WAAS,EACTtqB,OAAO,QACPrpB,GAAG,aACHuuB,MAAM,mDACNv6B,KAAK,OACL0+B,SA/Ce,SAAC6F,GACxBxmC,EAAOwmC,EAAM11B,OAAOpQ,OA+CZ02B,WAAS,IAEX,kBAAC+J,GAAA,EAAD,CACEygB,WAAS,EACTtqB,OAAO,QACPrpB,GAAG,aACHuuB,MAAM,mDACNv6B,KAAK,OACL0+B,SApDe,SAAC6F,GACxBjlB,EAAcilB,EAAM11B,OAAOpQ,OAoDnB02B,WAAS,KAGb,kBAACyqB,GAAA,EAAD,KACE,kBAAC,KAAD,CAAQ9U,QAASkF,EAAav5B,MAAM,UAAU8jB,MAAM,yCACpD,kBAAC,KAAD,CAAQuQ,QA9CG,WACjBzN,EAAS2Z,gBACTiD,GAAQ,GACRx1B,EACG/Z,OAAO,oBAAqB,CAC3B3E,KAAM,CACJqI,WAAY,oBACZrQ,KAAMA,EACNuhB,YAAaA,EACbG,WAAY0d,EAAUvwB,OAAO6S,cANnC,SASW,WACPzZ,IACAq3B,EAASma,oBAgCsB/gC,MAAM,UAAU8jB,MAAM,+D,uECrEvDhF,GAAYC,aAAW,CAC3B0lB,OAAQ,CACNpiC,cAAe,SACf6pB,SAAU,WACV3M,UAAW,EACX8E,aAAc,GAEhBg6B,MAAO,CACL9/B,SAAU,SAEZu3B,OAAQ,CAAEh2B,WAAY,QACtB+xC,WAAY,CACV5yC,QAAS,OACTC,cAAe,SACf+M,SAAU,GAEZ6lC,cAAe,CACbvyC,UAAW,UA6GAwyC,GAzGuB,SAAC,GAAmE,IAAjE3mE,EAAgE,EAAhEA,SAAU+4B,EAAsD,EAAtDA,OAAQ2M,EAA8C,EAA9CA,UAAWzQ,EAAmC,EAAnCA,SAAUlhB,EAAyB,EAAzBA,SACxEuhB,GADiG,wEACrFC,gBACZL,EAAUxB,KACV8H,EAAWC,eACX6d,EAAOiO,eACLx8C,EAAWwwB,eAAXxwB,OAL+F,EAM7D6yB,mBAAS7yB,EAAOguB,IAAW,IANkC,mBAMhG6tC,EANgG,KAMjFC,EANiF,OAO/EjpC,oBAAS,GAPsE,mBAOhG4B,EAPgG,KAO1F4Y,EAP0F,KAQjG0uB,EAAgBxxC,EAAU,aAAD,OAAcoQ,EAAd,SAAgC,CAC7D4K,YAAa,EACb7tC,EAAGskE,KAAWC,SAASD,KAAWE,YAAYjnE,MAE1Co1B,EAAeE,EAAU,iBAAkB,CAC/Cp5B,KAAK,GAAD,OAAK4qE,KAQLI,EAAmB,SAACxkC,GACxBA,EAAM4V,iBACNF,GAAQ,IAGVgL,cAAqB,WACnB,IAAMxmD,EAAQ2D,cAAIwK,EAAQguB,EAAQ,IAAIx6B,KAAI,SAAC+d,GAAD,OAASA,GAAO,CAAE0B,MAAO,MACnE6oD,EAAiBjqE,KAChB,CAACmO,EAAOguB,IAAW,KAEtBqqB,cAAqB,WACnB9J,EAAKqO,OAAO5uB,EAAQ6tC,KACnB,CAACA,IAEJ,IAAMO,EAAS,SAACjjE,GACA3D,cAAIwK,EAAQguB,EAAQ,IAClCyC,EACE4rC,aAAgB1hC,EAAD,UAAe1lC,EAAf,YAA2B+4B,GAAU,CAAErsB,KAAM,EAAGC,QAAS,IAAM,CAAEd,MAAO,KAAMgB,MAAO,QAAU,KAGhH,IAAM44D,EAAK,CACTvpE,KAAMgI,EAAKhI,KACXiC,KAAM+F,EAAK/F,KACX6f,MAAO,GAGT6oD,EAAiB,GAAD,mBAAKD,GAAL,CAAoBnB,KACpCrtB,GAAQ,IAGJivB,EAAanlC,uBACjB,SAACn3B,GACCywB,EAAS,CACPr9B,KAAM,eACN88B,QAAS,CAAE/2B,KAAM6G,GACjBoyB,KAAM,CACJ/nB,MAAOwF,KACP5a,SAAU0lC,EACV5N,UAAW,CACTwvC,SAAU,gBAAcpjE,EAAd,EAAG+2B,QAAW/2B,KAAd,OAA2BijE,EAAOjjE,KAE9C2zB,UAAW,CACTyvC,SAAU,YAAgB,IAAbloE,EAAY,EAAZA,MACXo8B,EAAS+rC,aAAiBnoE,EAAMiF,QAAS,iBAMnD,CAACm3B,EAAU2rC,EAAQzhC,IAGrB,OACE,oCACE,kBAAC0I,GAAA,EAAD,CAAS/qB,MAAOiS,EAAU,oBAAqB6mB,WAAY,KACzD,kBAAC,KAAD,CACElT,QA7DY,SAACvG,GACnBA,EAAM4V,iBACNF,GAAQ,IA4DFkF,aAAW,oBACX5kB,MAAM,qCACN9C,QAAQ,eAGZ,kBAAC4xC,GAAA,EAAD,CAAQC,OAAO,QAAQjoC,KAAMA,EAAMiP,QAASy4B,EAAkBhyC,QAAS,CAAE+9B,MAAO/9B,EAAQ+9B,QACtF,kBAACqF,GAAA,EAAD,CACEj1C,MAAO+R,EACPnvB,OACE,kBAACooC,GAAA,EAAD,CAAYpF,QAASi+B,EAAkB5pB,aAAW,QAAQlpC,KAAK,SAC7D,kBAAC,KAAD,CAAWd,SAAS,eAIzB4jB,uBAAanjB,EAAU,CACtBkhB,SAAUA,EAASz4B,QAAQwD,EAAU0lC,GACrC1lC,SAAU0lC,EACVnP,KAAM8wC,EACN/wC,UAAU,EACVtB,UAAWE,EAAQuxC,WACnBjyC,QAAS,kBAACsQ,GAAA,EAAD,CAAS9P,UAAWE,EAAQwxC,qBC9HzC3pC,GAAW,CAAC7Q,gBAELw7C,GAA8B,SAAC3yC,GAC1C,OACE,kBAACk2B,GAAA,EAAD,iBAAgBl2B,EAAhB,CAAuB2sB,cAAe,CAAEn1C,WAAY,sBAClD,kBAAC,GAAD,CAAWqzB,MAAO,CAAE7sB,MAAO,QAAUqrB,KAAK,gBAAgBC,QAASA,GAAStF,OAAO,OAAOgE,SAAUA,KACpG,kBAACwI,GAAA,EAAD,CAAWxM,OAAO,OAAOgE,SAAUA,GAAUzJ,WAAS,IACtD,kBAACiS,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAClS,WAAS,MAuB1Cq0C,GAlBgB,SAAC5yC,GAC9B,IAAMkQ,EAAkB4lB,aAAoB91B,GAE5C,OACE,kBAAC,GAAD,iBAAYA,EAAWkQ,GACrB,kBAACgmB,GAAA,EAAD,CAAY30B,SAAS,OAAOorB,cAAe,CAAEn1C,WAAY,qBACtDzG,GAAQi/B,IAAI,SAAU,mBAAoB,SACzC,kBAAC,GAAD,CAAW3G,KAAK,gBAAgBC,QAASA,GAAStF,OAAO,OAAOgE,SAAUA,KAE3Ej3B,GAAQi/B,IAAI,SAAU,mBAAoB,SAAW,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,OAAOgE,SAAUA,GAAUzJ,WAAS,IAC3GxtB,GAAQi/B,IAAI,SAAU,mBAAoB,gBACzC,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAClS,WAAS,OCvB9C,YAACyB,GACd,OACE,kBAAC8F,GAAA,EAAD,CAAMjH,WAAS,EAACmyC,UAAU,MAAM1vD,QAAS,EAAGi2B,WAAW,cACpDxmC,GAAQi/B,IAAI,SAAU,qBACrB,kBAAClK,GAAA,EAAD,CAAM5wB,MAAI,EAAC6wB,GAAI,QACb,kBAAC,GAAD,iBAAmC/F,EAAnC,CAA0C2Q,UAAU,mBAAmB3M,OAAO,eAC5E,kBAAC,GAAD,QAILjzB,GAAQi/B,IAAI,UAAW,sBACtB,kBAAClK,GAAA,EAAD,CAAM5wB,MAAI,EAAC6wB,GAAI,QACb,kBAAC,GAAyB/F,IAG7BjvB,GAAQi/B,IAAI,SAAU,sBACrB,kBAAClK,GAAA,EAAD,CAAM5wB,MAAI,EAAC6wB,GAAI,QACb,kBAAC,GAAuB/F,MCd5B6yC,GAAY,SAAC,GAA4B,IAA1B/qC,EAAyB,EAAzBA,SAAa9H,EAAY,6BACtCukB,EAAOiO,eAKb,OAAO,kBAAC,GAAD,iBAAexyB,EAAf,CAAsB8H,SAJR,SAAC6F,GACpB4W,EAAKqO,OAAO5yB,EAAMgE,OAAOv8B,QAAQ,OAAQ,QAAS,MAClDqgC,EAAS6F,QAKP3F,GAAW,CAAC7Q,gBAEZ27C,GAAS,SAAC,GAAkB,IAAb9yC,EAAY,oBACzB9U,EAAmBma,cAAY,SAACC,GACpC,OAAOn6B,OAAO6K,OAAOsvB,EAAMsV,MAAMzsB,UAAUjD,iBAAiB/b,SAF/B,EAIH05B,mBAAS,CACnCz/B,KAAM42B,EAAMI,OAAOh3B,OALU,mBAIxBT,EAJwB,KAIhB+jC,EAJgB,KA8B/B,OACE,yBACE7B,MAAO,CACL/L,QAAS,OACTC,cAAe,SACf/gB,MAAO,OACPu5B,WAAY,eAGd,kBAAC,GAAD,iBACMvX,EADN,CAEEqJ,KAAK,gBACLC,QAASA,GACTtF,OAAM,UAAKhE,EAAMgE,OAAX,SACNL,MAAM,yCACNmE,SArCW,SAAC6F,GAChBjB,EAAU,CACRtjC,KAAMukC,EAAM11B,OAAOpQ,SAoCjBmgC,SAAUA,MAEZ,kBAAC0I,GAAA,EAAD,iBACM1Q,EADN,CAEEgE,OAAM,UAAKhE,EAAMgE,OAAX,SACN+D,MA7BQ,SAAC3yB,GACb,OAAKA,EACU8V,EAAiB7X,MAAK,SAACm4D,GACpC,OAAOA,EAAGp2D,KAAOA,KAELjO,KAJE,MA6BZ4b,OAtCS,SAAC5b,GACd,IAAK+jB,EAAiB7hB,OAAQ,OAAOlC,EACrC,IAAMiD,EAAS8gB,EAAiB7X,MAAK,SAACm4D,GACpC,OAAOA,EAAGrkE,OAASA,KAErB,OAAOiD,EAASA,EAAOgL,GAAKjO,GAkCxBwpC,UAAU,mBACVhN,MAAM,yCACNh7B,OAAQA,EACR26B,YAAU,EACVE,UAAU,kBAEV,kBAAC,GAAD,CAAmBmG,WAAW,OAAOthC,YAAY,QAEnD,kBAACmoC,GAAA,EAAD,iBACMxQ,EADN,CAEEgE,OAAM,UAAKhE,EAAMgE,OAAX,kBACNL,MAAM,qDAER,kBAAC0xB,GAAA,EAAD,iBACMr1B,EADN,CAEEgE,OAAM,UAAKhE,EAAMgE,OAAX,UACNinB,aAAc,EACdtnB,MAAM,0CACNqE,SAAUA,QAwBH+qC,GAlBQ,SAAC,GAA4C,IAA1C3yC,EAAyC,EAAzCA,OAAQn1B,EAAiC,EAAjCA,SAAiC,EAAvB+4B,OAAuB,+CACjE,OACE,kBAACgvC,GAAA,EAAD,CAAY/nE,SAAUA,EAAUm1B,OAAQA,EAAQ4D,OAAO,cACrD,kBAACivC,GAAA,EAAD,KACE,kBAAC,GAAD,SChGFt0C,GAAYC,cAAW,SAAChC,GAC5B,MAAO,MAGHs2C,GAA+B,SAAClzC,GACpBrB,KAAhB,IACM4lB,EAAOiO,eACPlgD,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1ChF,EAAYC,eAElBuI,qBAAU,WACRwb,EAAKqO,OAAO,UAAW,MACvBrO,EAAKqO,OAAO,WAAY,QACvB,IAsBH,OACE,6BACE,kBAACpiB,GAAA,EAAD,iBACMxQ,EADN,CAEE8H,SAfe,SAAC,GAAkC,IAAfjgC,EAAc,EAA/B2xC,cAAiB3xC,MACvC08C,EAAKqO,OAAO,WAAY,CACtB9+C,OAAQ,CACN,CACEwM,KAAMzY,EACNsrE,SAAU7gE,EAAK8C,QAWjBuuB,MAAOpD,EAAU,+CACjByH,SAAU,CAAC7Q,qBAanB+7C,GAA6BzwC,aAAe,GAE7BywC,UC9BTv0C,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvC6C,QAAS,CACPX,QAAS,OACT,yBAA0B,CACxBT,YAAazB,EAAMtb,QAAQ,KAG/Bq0C,OAAQ,CACNh2B,WAAY,QAEd4P,oBAAqB,CACnBnQ,UAAW,EACX8E,aAAc,OAIZkvC,GAA0B,SAACpzC,GAC/B,IAAMG,EAAUxB,KAEhB,OACE,kBAACoR,GAAA,EAAD,iBAAa/P,EAAb,CAAoBG,QAAS,CAAEV,QAASU,EAAQV,WAC7C1uB,GAAQi/B,IAAI,SAAU,WAAa,kBAACrJ,GAAA,EAAD,MACnC51B,GAAQi/B,IAAI,SAAU,WACrB,kBAACrJ,GAAA,EAAD,CAAYpF,SAAU,OAAQoC,MAAM,8BAA8Bsd,eAAe,EAAOpgB,QAAQ,eA2HzFwyC,GArHgB,SAACrzC,GAC9B,IAAMkQ,EAAkB4lB,aAAoB91B,GACtC1tB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpS,EAAW7gB,GAAQA,EAAK6gB,SAAY,GAE1C,OACE,kBAAC,GAAD,iBAAY6M,EAAWkQ,GACrB,kBAAC,GAAD,KACE,kBAACgmB,GAAA,EAAD,CAAYz2B,QAAS,kBAAC,GAAD,OAClB1uB,GAAQi/B,IAAI,SAAU,SAAU,oBAAsB,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,kBAAkBzF,WAAS,IACnGxtB,GAAQi/B,IAAI,SAAU,SAAU,SAC/B,kBAAC,GAAD,CAAWhM,OAAO,OAAOqF,KAAK,yBAAyBC,QAASA,GAAStB,SAAU,CAAC7Q,kBAErFpmB,GAAQi/B,IAAI,SAAU,SAAU,QAC/B,kBAACU,GAAA,EAAD,CACE1M,OAAO,qBACPL,MAAM,sDACNgN,UAAU,kBACVrN,YAAU,EACVE,UAAU,iBAEV,kBAAC,GAAD,OAGHzyB,GAAQi/B,IAAI,SAAU,SAAU,WAAa,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,SAASzF,WAAS,IACjFxtB,GAAQi/B,IAAI,SAAU,SAAU,UAAY,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,QAAQzF,WAAS,IAC/ExtB,GAAQi/B,IAAI,SAAU,SAAU,SAAW,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,OAAOzF,WAAS,EAACyJ,SAAU,CAAC7Q,kBACzFpmB,GAAQi/B,IAAI,SAAU,SAAU,gBAAkB,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAClS,WAAS,IACrGxtB,GAAQi/B,IAAI,SAAU,SAAU,gBAC/B,kBAACU,GAAA,EAAD,CACE/M,MAAM,mDACNqE,SAAU,CAAC7Q,gBACXxuB,OAAQ,CAAEwqB,QAASA,EAAQ3pB,KAAI,SAAC+H,GAAD,MAAQ,CAAE6D,GAAI7D,OAC7CqG,QAAS,IACTosB,OAAO,kBACPnsB,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B64B,UAAU,gBAEV,kBAAC,GAAD,CAAmBhH,WAAW,UAGjC54B,GAAQi/B,IAAI,SAAU,SAAU,WAC/B,kBAACU,GAAA,EAAD,CACE1M,OAAO,YACPgE,SAAU,CAAC7Q,gBACXwM,MAAM,6CACNgN,UAAU,SACV/4B,QAAS,IACTC,KAAM,CAAEf,MAAO,qBAEf,kBAAC,GAAD,CAAmB6yB,WAAW,sBAGjC54B,GAAQi/B,IAAI,SAAU,SAAU,eAAiB,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,aAAazF,WAAS,IACzFxtB,GAAQi/B,IAAI,SAAU,SAAU,YAC/B,kBAACY,GAAA,EAAD,CACE5M,OAAO,aACP6G,MAAO,CAAE7sB,MAAO,QAChB2lB,MAAM,8CACNgN,UAAU,SACVpS,WAAS,GAET,kBAAC+0C,GAAA,EAAD,CAAoBjkB,KAAK,EAAO9wB,WAAS,KAG7C,kBAACg1C,GAAD,MACCxiE,GAAQi/B,IAAI,SAAU,SAAU,eAAiB,kBAAC,GAAD,CAAgBhM,OAAO,eACxEjzB,GAAQi/B,IAAI,SAAU,SAAU,SAC/B,kBAAC,GAAD,CACEhM,OAAO,OACP0vB,aAAa,EACbD,YAAa,mQACb5hB,UAAQ,GAER,kBAAC,GAAD,CAAU7N,OAAO,MAAM1V,MAAM,OAAOomC,SAAO,KAG9C3jD,GAAQi/B,IAAI,SAAU,SAAU,UAC/B,kBAAC,GAAD,CAAiBhM,OAAO,QAAQyvB,YAAa,yQAAqD5hB,UAAQ,GACxG,kBAAC,GAAD,CAAU7N,OAAO,MAAM1V,MAAM,OAAOomC,SAAO,KAG9C3jD,GAAQi/B,IAAI,SAAU,SAAU,kBAC/B,kBAAC,GAAD,CACEhM,OAAO,gBACPyvB,YAAa,yQACb5hB,UAAQ,GAER,kBAAC,GAAD,CAAU7N,OAAO,MAAM1V,MAAM,OAAOomC,SAAO,KAG9C3jD,GAAQi/B,IAAI,SAAU,SAAU,iBAC/B,kBAAC,GAAD,CACEhM,OAAO,eACPyvB,YAAa,yQACb5hB,UAAQ,GAER,kBAAC,GAAD,CAAU7N,OAAO,MAAM1V,MAAM,OAAOomC,SAAO,KAG9C3jD,GAAQi/B,IAAI,SAAU,SAAU,gBAC/B,kBAAC,GAAD,CACEhM,OAAO,cACPyvB,YAAa,yQACb5hB,UAAQ,GAER,kBAAC,GAAD,CAAU7N,OAAO,MAAM1V,MAAM,OAAOomC,SAAO,KAG/C,kBAAC,GAAD,CAA8B1wB,OAAO,UAAUzF,WAAS,IACxD,kBAAC+3B,GAAA,EAAD,CAActyB,OAAO,mBCxKhB,YAAChE,GACd,IAAMukB,EAAOiO,eACPjsB,EAAYC,eACZgtC,EAAgBjtC,EAAUvwB,OAAO6S,YAAc0d,EAAUvwB,OAAO6S,WAAWxf,OAKjF,OACE,kBAACs9B,GAAA,EAAD,iBACM3G,EADN,CAEE2D,MAAM,6BACNiD,YAPgB,WAClB2d,EAAKqO,OAAO,OAAZ,sBAAwBrO,EAAK6Q,WAAWp/C,OAAOsI,MAA/C,CAAqD,CAAElJ,GAAI,OAAQk/C,QAAQ,OAOzEzpB,MAAO,CAAElL,WAAY,GACrBkB,QAAS2yC,EAAgB,WAAa,gBCetC70C,GAAYC,aAAW,CAC3Ba,QAAS,CACPX,QAAS,OACTE,eAAgB,mBAIdo0C,GAA0B,SAACpzC,GACbA,EAAMI,OAAOrF,QAA/B,IACMwL,EAAYC,eACZgtC,EAAgBjtC,EAAUvwB,OAAO6S,YAAc0d,EAAUvwB,OAAO6S,WAAWxf,OAEjF,OACE,kBAAC0mC,GAAA,EAAD,iBAAa/P,EAAb,CAAoBG,QAASxB,KAAakM,MAAO,CAAE7L,eAAgB,gBAChEw0C,GAAiB,kBAAC7sC,GAAA,EAAD,CAAYr7B,IAAI,gBAAgBi2B,SAAS,OAAOoC,MAAO,4BACzE,kBAAC8vC,GAAD,CAAsBnoE,IAAI,mBAAmBi2B,SAAS,WAuI7CmyC,GAlIc,SAAC1zC,GAC5B,IAAMkQ,EAAkB9M,aAAkBpD,GACpCmQ,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAC7DzoB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpS,EAAW7gB,GAAQA,EAAK6gB,SAAY,GAE1C,OACE,kBAAC,GAAD,eAAM7E,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GACvE,kBAAC,GAAD,KACE,kBAACgmB,GAAA,EAAD,CAAYz2B,QAAS,kBAAC,GAAD,OACnB,kBAAC+Q,GAAA,EAAD,CAAWxM,OAAO,KAAK8C,UAAQ,IAC9B/1B,GAAQi/B,IAAI,SAAU,SAAU,oBAC/B,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,kBAAkB8C,SAAUqJ,EAAW5R,WAAS,IAEnExtB,GAAQi/B,IAAI,SAAU,SAAU,SAC/B,kBAAC,GAAD,CAAWhM,OAAO,OAAOqF,KAAK,yBAAyBC,QAASA,KAEjEv4B,GAAQi/B,IAAI,SAAU,SAAU,QAC/B,kBAACU,GAAA,EAAD,CACE1M,OAAO,qBACPL,MAAM,sDACNgN,UAAU,kBACVrN,YAAU,EACVE,UAAU,iBAEV,kBAAC,GAAD,OAGHzyB,GAAQi/B,IAAI,SAAU,SAAU,WAAa,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,SAAS8C,SAAUqJ,EAAW5R,WAAS,IACtGxtB,GAAQi/B,IAAI,SAAU,SAAU,UAAY,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,QAAQ8C,SAAUqJ,EAAW5R,WAAS,IACpGxtB,GAAQi/B,IAAI,SAAU,SAAU,SAAW,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,OAAO8C,SAAUqJ,EAAW5R,WAAS,IAClGxtB,GAAQi/B,IAAI,SAAU,SAAU,gBAC/B,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAC3J,SAAUqJ,EAAW5R,WAAS,IAEzExtB,GAAQi/B,IAAI,SAAU,SAAU,gBAC/B,kBAACU,GAAA,EAAD,CACE/M,MAAM,mDACNqE,SAAU,CAAC7Q,gBACXxuB,OAAQ,CAAEwqB,QAASA,EAAQ3pB,KAAI,SAAC+H,GAAD,MAAQ,CAAE6D,GAAI7D,OAC7CqG,QAAS,IACTosB,OAAO,kBACPnsB,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B64B,UAAU,gBAEV,kBAAC9G,GAAA,EAAD,CAAaF,WAAW,UAG3B54B,GAAQi/B,IAAI,SAAU,SAAU,WAC/B,kBAACU,GAAA,EAAD,CACE1M,OAAO,YACPgE,SAAU,CAAC7Q,gBACXwM,MAAM,6CACNgN,UAAU,SACV/4B,QAAS,IACTC,KAAM,CAAEf,MAAO,qBAEf,kBAAC+yB,GAAA,EAAD,CAAaF,WAAW,sBAG3B54B,GAAQi/B,IAAI,SAAU,SAAU,eAC/B,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,aAAa8C,SAAUqJ,EAAW5R,WAAS,IAE9DxtB,GAAQi/B,IAAI,SAAU,SAAU,kBAC/B,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,gBAAgB8C,SAAUqJ,EAAW5R,WAAS,IAGjExtB,GAAQi/B,IAAI,SAAU,SAAU,YAC/B,kBAACY,GAAA,EAAD,CACE5M,OAAO,aACP6G,MAAO,CAAE7sB,MAAO,QAChB2lB,MAAM,8CACNgN,UAAU,SACVpS,WAAS,GAET,kBAAC+0C,GAAA,EAAD,CAAoBjkB,KAAK,EAAO9wB,WAAS,KAG7C,kBAACg1C,GAAD,MACCxiE,GAAQi/B,IAAI,SAAU,SAAU,eAAiB,kBAAC,GAAD,CAAgBhM,OAAO,eACxEjzB,GAAQi/B,IAAI,SAAU,SAAU,SAC/B,kBAAC,GAAD,CACEhM,OAAO,OACP0vB,aAAa,EACbD,YAAa,mQACb5hB,UAAQ,GAER,kBAAC,GAAD,CAAU7N,OAAO,MAAM1V,MAAM,OAAOomC,SAAO,KAG9C3jD,GAAQi/B,IAAI,SAAU,SAAU,UAC/B,kBAAC,GAAD,CAAiBhM,OAAO,QAAQyvB,YAAa,yQAAqD5hB,UAAQ,GACxG,kBAAC,GAAD,CAAU7N,OAAO,MAAM1V,MAAM,OAAOomC,SAAO,KAG9C3jD,GAAQi/B,IAAI,SAAU,SAAU,kBAC/B,kBAAC,GAAD,CACEhM,OAAO,gBACPyvB,YAAa,yQACb5hB,UAAQ,GAER,kBAAC,GAAD,CAAU7N,OAAO,MAAM1V,MAAM,OAAOomC,SAAO,KAG9C3jD,GAAQi/B,IAAI,SAAU,SAAU,iBAC/B,kBAAC,GAAD,CACEhM,OAAO,eACPyvB,YAAa,yQACb5hB,UAAQ,GAER,kBAAC,GAAD,CAAU7N,OAAO,MAAM1V,MAAM,OAAOomC,SAAO,KAG9C3jD,GAAQi/B,IAAI,SAAU,SAAU,gBAC/B,kBAAC,GAAD,CACEhM,OAAO,cACPyvB,YAAa,yQACb5hB,UAAQ,GAER,kBAAC,GAAD,CAAU7N,OAAO,MAAM1V,MAAM,OAAOomC,SAAO,KAG/C,kBAAC,GAAD,CAA8B1wB,OAAO,UAAUzF,WAAS,IAExD,kBAAC+3B,GAAA,EAAD,CAActyB,OAAO,mB,WCrIhB2vC,GArCoB,SAAC,GAAgB,IAAdvzC,EAAa,EAAbA,OAC9B9tB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAChD,IAAKjzB,EAAM,OAAO,KAClB,IAAK8tB,EAAQ,OAAO,KACpB,GAAkB,gBAAd9tB,EAAKY,KAAwB,CAC/B,IAAKktB,EAAO3J,aAAc,OAAO,KACjC,GAAInkB,EAAK2N,cAAgBmgB,EAAO3J,aAAarhB,GAAI,OAAO,KAE1D,OACE,kBAAC,KAAD,CACE0rB,UAAWC,KACXC,GAAI,CACFma,SAAU,eACV7V,MAAO,CACLlF,OAAQ,CACN7Z,iBAAkB6Z,EAAOhrB,GACzBka,qBAAsB8Q,EAAOh3B,KAC7Bsd,OAAQ0Z,EAAO1Z,OAAOtR,GACtBma,WAAY6Q,EAAOrgB,WACnB5Y,KAAMi5B,EAAOj5B,KACb8Y,YAAamgB,EAAO3J,aAAe2J,EAAO3J,aAAarhB,GAAK,KAI5D6Q,YAAama,EAAOngB,YAAc,CAAE7K,GAAIgrB,EAAO3J,aAAaM,qBAAwB,KACpF/Q,eAAgBoa,EAAOngB,YAAc,CAAE7K,GAAIgrB,EAAO3J,aAAaO,kBAAqB,KACpF7Q,SAAUia,EAAOngB,YAAc,CAAE7K,GAAIgrB,EAAO3J,aAAaQ,sBAAyB,QAIxF0M,MAAM,yBAEN,kBAACo8B,GAAD,Q,UClCAphC,GAAYC,cAChB,SAAChC,GAAD,MAAY,CACV6C,QAAS,CACPsM,SAAU,WACVjN,QAAS,OACTE,eAAgB,gBAChBuY,WAAY,WACZnY,UAAWxC,EAAMtb,UACjB4iB,aAActH,EAAMtb,WAEtBgG,QAAS,GACT4Z,QAAS,MAEX,CAAE/5B,KAAM,uBA2BKm7B,OAAMsxC,MAxBQ,SAAC,GAAwE,EAAtEzzC,QAAuE,IAA7C7Y,EAA4C,EAA5CA,QAAS4Z,EAAmC,EAAnCA,QAASwL,EAA0B,EAA1BA,UAAc1M,EAAY,4DAC9FG,EAAUxB,GAAUqB,GAC1B,OACE,yBAAKC,UAAWE,EAAQV,SACrBnY,GACCgb,IAAMH,aAAa7a,EAAnB,2BACK0Y,GADL,IAEE0M,eAEJ,+BACCxL,GACCoB,IAAMH,aAAajB,EAAnB,eACKlB,QCrBA6zC,GAAqB,SAAC7zC,GAAW,IACpCE,EAAqGF,EAArGE,SAAUlhB,EAA2FghB,EAA3FhhB,SAAUrW,EAAiFq3B,EAAjFr3B,OADe,EACkEq3B,EAAzEroB,YADO,MACA,EADA,EACGC,EAA+DooB,EAA/DpoB,QAASwoB,EAAsDJ,EAAtDI,OAAQuQ,EAA8C3Q,EAA9C2Q,UAAW1lC,EAAmC+0B,EAAnC/0B,SAAU4M,EAAyBmoB,EAAzBnoB,KAAMmsB,EAAmBhE,EAAnBgE,OAAQ/rB,EAAW+nB,EAAX/nB,OAElG,GAAiC,IAA7BsqB,WAAStZ,MAAMjK,GACjB,MAAM,IAAI3P,MAAM,sEAKlB,IAAM6gC,EAAkB4jC,aAAgC,CACtD5zC,WACAv3B,SACAgP,OACAC,UACAwoB,SACAuQ,YACA1lC,WACA4M,OACAmsB,SACA/rB,WAMF,OACE,kBAACy9B,GAAA,EAAD,CAAqB7tC,MAAOqoC,GAC1B,kBAAC,GAAD,iBAA4BlQ,EAAWkQ,MA0B7C2jC,GAAmBpxC,aAAe,CAChC95B,OAAQ,GACRiP,QAAS,IACTC,KAAM,CAAEf,MAAO,KAAMgB,MAAO,QAC5BksB,OAAQ,KACRX,UAAU,GAGZ,IAAM1E,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,CACJwB,UAAWxC,EAAMtb,QAAQ,GACzB4iB,aAActH,EAAMtb,UACpB,gBAAiB,CACf8d,UAAW,QAKJ20C,GAAyB,SAAC/zC,GAAW,IACxCE,EAAqGF,EAArGE,SAAUlhB,EAA2FghB,EAA3FhhB,SAAUtH,EAAiFsoB,EAAjFtoB,WAAYi5B,EAAqE3Q,EAArE2Q,UAAW1Q,EAA0DD,EAA1DC,UAAW0D,EAA+C3D,EAA/C2D,MAAOrc,EAAwC0Y,EAAxC1Y,QAAS4Z,EAA+BlB,EAA/BkB,QAAsBZ,GAASN,EAAtBqD,SADxC,aAC8DrD,EAD9D,sGAEzCG,EAAUxB,KACV4B,EAAYC,eAElB,OACE,yBAAKP,UAAS,UAAKE,EAAQvC,KAAb,YAAqBqC,IAChC0D,GACC,kBAACY,GAAA,EAAD,CAAY1D,QAAQ,YAAYhhB,MAAM,gBAAgB2kB,cAAY,EAACC,QAAM,GACtElE,EAAUoD,KAGbrc,GAAW4Z,IACX,kBAAC,GAAD,iBACMlB,EADN,CAEE1Y,QAASA,EACT4Z,QAASA,EACThB,SAAUA,EACVyQ,UAAWA,KAGf,kBAAC/F,GAAA,EAAD,KACGzI,uBAAaI,WAASmC,KAAK1lB,GAAf,YAAC,eACT4gB,GAAkBU,IADV,IAEXJ,WACAj1B,SAAU0lC,KAEXj5B,QAA8B/P,IAAhBq4B,EAAMrnB,OAAuBwpB,uBAAazqB,EAAY4oB,MAsB9DuzC,MCjEThzB,GAAe,SAAClT,GAEpB,OADAA,EAAM4V,kBACC,GAGHywB,GAAwB,aAExBC,GAAsB,CAAEj+D,QAAQ,EAAMgrC,UAAU,GAEhDriB,GAAYC,cAChB,SAAChC,GAAD,MAAY,CACV2nB,KAAM,CACJnlB,WAAYxC,EAAMtb,QAAQ,GAC1BouB,WAAY,EACZ5Q,QAAS,OACTyY,WAAY,WACZ8U,SAAU,OACV1Q,UAAW/e,EAAMtb,QAAQ,IACzBgrC,cAAe,QAEjBC,SAAU,CAAEC,MAAO,YAErB,CAAErlD,KAAM,8BAiCK+sE,GA9BiB,SAACl0C,GAAW,IAClCC,EAA6FD,EAA7FC,UAAqC3Y,GAAwD0Y,EAAlFG,QAAkFH,EAAxD1Y,SAASrc,EAA+C+0B,EAA/C/0B,SAAoB0hD,GAA2B3sB,EAArCqD,SAAqCrD,EAA3B2sB,eAAkBrsB,EADnD,aAC4DN,EAD5D,yEAEnCG,EAAUxB,GAAUqB,GAE1B,OACE,kBAAC,KAAD,CACE8tB,SAAUkmB,GACVrnB,cAAeA,EACf2B,SAAQ,eAAOC,MACfxY,OAAQ,SAACyY,GAAD,OACN,oCACE,kBAAC,KAAD,CACE2lB,aAAcF,GACdnsC,SAAU,YAA2B,IAAxBkZ,EAAuB,EAAvBA,SAAUhrC,EAAa,EAAbA,OACjBgrC,GACJ1gB,GAAQA,EAAK8iB,WAAWptC,MAG5B,wCAAMiqB,UAAWS,KAAWT,EAAWE,EAAQokB,OAtG/B,SAAC,GAAD,EACxB6vB,WADwB,EAExBC,cAFwB,EAGxBC,gBAHwB,EAIxBC,SAJwB,EAKxBC,KALwB,EAMxB5hB,OANwB,EAOxB6hB,gBAPwB,EAQxBC,YARwB,EASxBC,YATwB,EAUxBC,kBAVwB,EAWxBC,QAXwB,EAYxB9nB,MAZwB,EAaxBC,YAbwB,EAcxBC,2BAdwB,EAexBC,qBAfwB,EAgBxBzmB,SAhBwB,EAiBxBid,iBAjBwB,EAkBxBzP,OAlBwB,EAmBxB3sB,QAnBwB,EAoBxBy4B,aApBwB,EAqBxBwE,KArBwB,EAsBxB1D,aAtBwB,EAuBxBsM,gBAvBwB,EAwBxBC,oBAxBwB,EAyBxBV,WAzBwB,EA0BxBooB,WA1BwB,EA2BxBC,YA3BwB,EA4BxBpoB,cA5BwB,EA6BxB5L,QA7BwB,EA8BxBxD,SA9BwB,EA+BxB8P,wBA/BwB,EAgCxBrM,SAhCwB,EAiCxBg0B,KAjCwB,EAkCxBzc,MAlCwB,EAmCxB0c,aAnCwB,EAoCxBzzC,KApCwB,EAqCxBkL,UArCwB,EAsCxB0W,WAtCwB,EAuCxB8xB,OAvCwB,EAwCxBC,mBAxCwB,EAyCxB7nB,YAzCwB,EA0CxBC,aA1CwB,EA2CxBC,aA3CwB,EA4CxBC,gBA5CwB,EA6CxBC,WA7CwB,EA8CxB0nB,MA9CwB,EA+CxB/sC,QA/CwB,EAgDxBgtC,cAhDwB,EAiDxBC,QAjDwB,EAkDxB3nB,MAlDwB,EAmDxB3lB,SAnDwB,EAoDxB4lB,WApDwB,EAqDxB53C,OArDwB,EAsDxB63C,QAtDwB,EAuDxB0nB,WAvDwB,4vBAsG0C31C,CAAkBU,GAA5E,CAAmFwtB,SAAUjN,KAC1Fv5B,EAAQ9d,KAAI,SAACs6C,GAAD,OACX,kBAACiK,GAAA,EAAD,CAAiBziD,IAAKw4C,EAAc9jB,MAAMgE,OAAQ8f,cAAeA,EAAe74C,SAAUA,OAE5F,yBAAKg1B,UAAWE,EAAQosB,iBC9FrBipB,GAfa,SAACx1C,GAC6BA,EAAhDG,QAD8B,IACJnhB,EAAsBghB,EAAtBhhB,SAAashB,EADV,aACmBN,EADnB,0BAEUivB,aAAejvB,GAAtD/0B,EAF6B,EAE7BA,SAAUm4C,EAFmB,EAEnBA,WAAYrD,EAFO,EAEPA,aAE9B,OACE,kBAAC,GAAD,eACE90C,SAAUA,EACVqc,QAASgb,IAAMC,SAAS2sB,QAAQlwC,GAChC2tC,cAAe5M,EACfqD,WAAYA,GACRmH,aAAsBjqB,M,UCR1B3B,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvC0nB,OAAQ,CACNzkC,MAAO+c,EAAME,QAAQ3d,KAAKge,eA4Bfs4C,GAxBwB,SAAC,GAA+E,EAA7Ex1C,UAA8E,IAAnEC,EAAkE,EAAlEA,SAAUjoB,EAAwD,EAAxDA,OAAmBmoB,GAAqC,EAAhDuQ,UAAgD,EAArCvQ,QAAQ2f,EAA6B,EAA7BA,aAClF5f,GAD+G,sFACrGxB,MAEhB,OACE,kBAACiC,GAAA,EAAD,CACEE,UAAWC,KACXC,GAAI,CACFma,SAAUjb,EACVl3B,OAAQ02C,qBAAU,CAChB/2C,OAAQ82C,KAAKC,UAAL,4BACLznC,EAASmoB,EAAOhrB,IACd2qC,OAIT1gC,KAAK,QACL0vC,kBAAgB,EAChB9uB,UAAWE,EAAQmkB,QAbrB,oFCZE3lB,GAAYC,cAChB,SAAChC,GAAD,MAAY,CACVgB,KAAM,CACJkB,QAAS,OACTE,eAAgB,WAChBuY,WAAY,iBAGhB,CAAEpwC,KAAM,2BASKuuE,GANc,SAAC11C,GAAW,IAC/BC,EAAiCD,EAAjCC,UAAWjhB,EAAsBghB,EAAtBhhB,SACbmhB,GAFgC,aACGH,EADH,0BAEtBrB,GAAUqB,IAC1B,OAAO,yBAAKC,UAAWS,KAAWP,EAAQvC,KAAMqC,IAAajhB,ICdzD2f,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCgB,KAAM,OAUO+3C,GAPS,SAAC,GAA0B,IAAxBv1C,EAAuB,EAAvBA,OAAuB,2BAChCzB,KAChB,OAAKyB,GAAWA,EAAOzJ,WAEhB,kBAACsO,GAAA,EAAD,CAAMtB,MAAM,qDAFuB,MCEtChF,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCtO,MAAO,CACL+P,YAAazB,EAAMtb,UACnBypB,WAAY,IACZe,SAAU,GAEZkrB,aAAc,CACZl4B,QAAS,OACTutB,SAAU,QAEZ4K,YAAa,CACX54B,YAAazB,EAAMtb,QAAQ,GAC3B,eAAgB,CACd+c,YAAa,QAqBbu3C,GAAoC,SAAC,GAA+B,EAA7Bh0C,OAA6B,EAArBJ,KAAsB,IAAbxB,EAAY,kCAClEG,EAAUxB,KACRyB,EAAWJ,EAAXI,OACR,IAAKA,EAAQ,OAAO,KACpB,IAAM1X,EAAc0X,EAAO1X,YACrBib,EAAQvD,EAAOj5B,KAErB,OACE,oCACE,kBAAC0+B,GAAA,EAAD,KACE,kBAACuxB,GAAA,EAAD,CAAKt4B,QAAQ,OAAOoF,aAAc,GAChC,kBAACK,GAAA,EAAD,CAAY1D,QAAQ,KAAKC,UAAU,KAAKb,UAAWE,EAAQ7R,OACxDqV,IAGL,kBAACY,GAAA,EAAD,CAAY1D,QAAQ,QAAQhhB,MAAM,gBAAgBihB,UAAU,KACzDpY,IAGL,kBAAC2uC,GAAA,EAAD,eAAkBp3B,UAAWE,EAAQ62B,cAAkBh3B,GACrD,kBAAC,KAAD,CAAWgE,OAAO,kBAAkB/D,UAAWE,EAAQ82B,cACvD,kBAAC,GAAD,CAAWjzB,OAAO,OAAO/D,UAAWE,EAAQ82B,cAC5C,kBAAClS,GAAA,EAAD,CACE/gB,OAAO,qBACPL,MAAM,sDACNgN,UAAU,kBACVziC,KAAK,OACL+xB,UAAWE,EAAQ82B,aAEnB,kBAAC,KAAD,CAAWjzB,OAAO,UAEpB,kBAAC,KAAD,CAAWA,OAAO,SAAS/D,UAAWE,EAAQ82B,cAC9C,kBAAC,KAAD,CAAWjzB,OAAO,iBAClB,kBAAC,KAAD,CAAWA,OAAO,UAClB,kBAAC,KAAD,CAAWA,OAAO,aAAaL,MAAM,gDAEvC,kBAACkC,GAAA,EAAD,KACE,kBAAC,GAAD,CAAiB5F,UAAWE,EAAQ82B,YAAa72B,OAAQA,OASlDy1C,GAtDuB,SAAC71C,GACrC,OACE,kBAAC,GAAgBA,EACf,kBAAC,GAAD,QChCArB,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCznB,MAAO,CACLu6B,WAAY,GACZzxB,OAAQ,QAEVo6C,UAAW,GAIX55B,OAAQ,CACNA,OAAQ7B,EAAMtb,QAAQ,IAExB+d,KAAM,CACJxf,MAAO+c,EAAME,QAAQC,QAAQC,WAkDlB84C,GA9CuB,SAAC,GAAmC,IAAjChoB,EAAgC,EAAhCA,SAAU34C,EAAsB,EAAtBA,MAC3CgrB,GADiE,qCACvDxB,MACVmD,EAAUiT,eACVwP,EAAOiO,eAEbzpB,qBAAU,WACRwb,EAAKgU,UACJ,CAAChU,EAAMziB,IAQV,OACE,kBAACwG,GAAA,EAAD,iBACMnzB,EADN,CAEEopB,WAAS,EACTkS,WAAS,EACT5P,QAAQ,WAER4H,WAAY,CACVud,aACE,kBAACC,GAAA,EAAD,CAAgBhmB,UAAWE,EAAQk4B,UAAWtsB,SAAS,OACrD,kBAACuN,GAAA,EAAD,CACEiP,aAAW,6BACXtoB,UAAWE,EAAQd,KACnB6U,QAAS,SAACvG,GACRmgB,EAASngB,GACT6qB,WAAWjU,EAAKgU,QAElBE,KAAK,OAEL,kBAAC,KAAD,QAINC,UA7BgB,SAAC/qB,GACC,KAAlBA,EAAMgrB,UAAqC,IAAnBhrB,EAAMirB,UAChC9K,EAASngB,IA6BP8lB,YAAa,kHCvCf90B,GAAYC,cAAW,SAAChC,GAC5B,MAAO,CACLi8B,WAAY,GACZx5B,KAAM,CACJphB,OAAQ,GACRD,MAAO,IAET86C,QAAS,CACP,eAAgB,CACdh6B,QAAS,SAGb8X,OAAQ,CACNxZ,WAAYR,EAAME,QAAQK,UAAU3O,KACpC3O,MAAO+c,EAAME,QAAQK,UAAUD,cAEjC67B,SAAU,CACR96C,OAAQ,QACR2B,OAAQ,SAEVtH,QAAS,CACP2F,OAAQ,EACRD,MAAO,OAKPqpC,GAAa,SAAC,GAAgE,EAA9D1jB,MAA+D,IAArC3kB,EAAoC,EAApCA,SAAUihB,EAA0B,EAA1BA,UAAcD,EAAY,iDAC5EO,EAAYC,eADgE,EAElD8B,IAAMuG,SAAS,MAFmC,mBAE3E6B,EAF2E,KAEjEyO,EAFiE,KAI5E1O,GADU9L,KACH1oB,QAAQy0B,IAYrB,OACE,oCACE,kBAAC2O,GAAA,EAAD,CAAS/qB,MAAOiS,EAAU,kBAAmBmiB,UAAU,QACrD,kBAACpJ,GAAA,EAAD,eAAYpF,QAbE,SAACvG,GACnBA,EAAM6X,kBACNrM,EAAYxL,EAAM6L,gBAWoBvZ,UAAWA,EAAW5gB,KAAK,QAAQ/T,IAAI,UAAa00B,GACpF,kBAAC,KAAD,QAGJ,kBAAC,KAAD,CACE5qB,GAAG,YACHs1B,SAAUA,EACV+O,aAAW,EACXuf,eAAe,EACfruB,UAAW,CACTsuB,KAAM,CACJC,SAAS,GAEXC,gBAAiB,CACfD,SAAS,EACTE,kBAAmB,WAGvBC,aAAc,CACZC,SAAU,MACVC,WAAY,SAEdC,gBAAiB,CACfF,SAAU,MACVC,WAAY,SAEd9uB,KAAMA,EACNiP,QAnCc,SAAC/L,GACnBA,EAAM6X,kBACNrM,EAAY,QAmCP5W,WAAS/4B,IAAIwV,GAAU,SAAClI,GAAD,OACtBA,GAAS0rB,yBAAe1rB,GAASwrB,IAAMH,aAAarrB,EAAnB,eAA+BkpB,IAAW,WAO/EwlB,GAAkB,SAAC5R,GAAD,OAAOA,EAAE4R,mBAmIlBuwB,GAjIiB,SAAC,GAAqF,IAAnF31C,EAAkF,EAAlFA,OAAQs5B,EAA0E,EAA1EA,cAAeC,EAA2D,EAA3DA,cAAepwB,EAA4C,EAA5CA,SAAUqwB,EAAkC,EAAlCA,YAAaC,EAAqB,EAArBA,KACxFtV,GAD6G,2FACtGiO,gBACPlgD,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpF,EAAUxB,KAHmG,EAI3FkK,oBAAS,GAJkF,mBAItGwa,GAJsG,WAM7G9iB,EAAYC,eACVloB,GAAY8nB,GAAU,IAAtB9nB,QACAwhD,GAAW15B,GAAU,IAArB05B,OACAzvD,GAAU+1B,GAAU,IAApB/1B,MAER,IAAK+1B,EAAQ,OAAO,KACpB,IAAM20B,EAAS30B,EAAO20B,OAChBz0C,EAAO8f,EAAO9f,KACdya,EAAUqF,EAAOrF,QACjBhM,EAAYqR,EAAOrR,WAAalM,KAAOud,EAAOrR,WAAWhM,OAAO,QAChE2U,EAAY0I,EAAO1I,WAAa7U,KAAOud,EAAO1I,WAAW3U,OAAO,QAChEg3C,EAAa,gBAAY5xD,mBAAmBi4B,EAAO+yC,UAAtC,SACbnZ,EAAY55B,EAAO45B,UAkBzB,OACE,oCACE,kBAACC,GAAA,EAAD,CACE1iB,WAAW,aACXhO,SAAUA,IAAanJ,EAAOhrB,GAC9B8kD,aAba,SAACvsB,GAClB0V,GAAQ,IAaJ8W,aAVc,WAClB9W,GAAQ,KAWJ,kBAAC1J,GAAA,EAAD,KACGob,GACC,kBAAC,GAAD,CAAa90B,UAAWE,EAAQyW,OAAQxW,OAAQ20B,KAGpD,kBAACnb,GAAA,EAAD,CACE7c,QACE,oCACGg4B,EACC,kBAACh0B,GAAA,EAAD,CAAMC,GAAI+4B,EAAe7lB,QAASsR,IAC/BuP,EAAO5tD,MAGV,sEANJ,OASE,0CATF,OAWI4zB,EAAsBrD,EAAZ3I,EACXzW,GACC,2CACQ,0CADR,OAEE,kBAAC+7B,GAAA,EAAD,CAAkBxJ,MAAO,CAAE5sB,OAAQ,GAAID,MAAO,QAGhD1F,IAAYjO,GACZ,2CACQ,0CADR,OAEE,kBAAC,KAAD,CAAUkU,SAAS,aAGtBlU,GACC,2CACQ,0CADR,OAEE,kBAAC,KAAD,CAAWwV,MAAM,QAAQtB,SAAS,aAGrCu7C,GACC,2CACQ,0CADR,4BAMNM,uBAAwB,CAAEv5B,QAAS,QAAShhB,MAAO,iBACnDsd,UAAYpC,EAAiBwF,EAAU,sBAAjBjgB,EACtB+5C,yBAA0B,CAAEx5B,QAAS,QAAShhB,MAAOkb,EAAU,gBAAkB,kBAEhFA,EAEChqB,GAAQi/B,IAAI,SAAU,WADtBj/B,GAAQi/B,IAAI,SAAU,YAAcj/B,GAAQi/B,IAAI,SAAU,YAAc5P,EAAO+yC,WAAa7gE,EAAK8C,MAElG/K,GACC,kBAAC,GAAD,MACI0wB,IAAYhqB,GAAQi/B,IAAI,SAAU,YAAc5P,EAAO+yC,WAAa7gE,EAAK8C,KACzE,kBAACu2B,GAAA,EAAD,CAAUuI,QA9EE,WACxB0lB,EAAYx5B,EAAOhrB,IACnBmvC,EAAKqO,OAAO,YAAaoH,GACzBzV,EAAKqO,OAAO,OAAQtyC,GACpBikC,EAAKqO,OAAO,KAAMxyB,EAAOhrB,IACzBmvC,EAAKqO,OAAO,SAAUtgD,KA0ER,kBAACuyC,GAAA,EAAD,KACE,kBAAC,KAAD,OAEF,kBAACtgB,GAAA,EAAD,CAAY1D,QAAQ,WAAWN,EAAU,qBAG3CxF,IAAYhqB,GAAQi/B,IAAI,SAAU,YAAc5P,EAAO+yC,WAAa7gE,EAAK8C,KACzE,kBAACu2B,GAAA,EAAD,CAAUuI,QAAS,kBAAMylB,EAAcv5B,EAAOhrB,MAC5C,kBAACyvC,GAAA,EAAD,KACE,kBAAC,KAAD,OAEF,kBAACtgB,GAAA,EAAD,CAAY1D,QAAQ,WAAWN,EAAU,sBAG5CxF,IAAYhqB,GAAQi/B,IAAI,SAAU,YAAc5P,EAAO+yC,WAAa7gE,EAAK8C,KACxE,kBAACu2B,GAAA,EAAD,CAAUuI,QAAS,kBAAMwlB,EAAct5B,EAAOhrB,MAC5C,kBAACyvC,GAAA,EAAD,KACE,kBAAC,KAAD,OAEF,kBAACtgB,GAAA,EAAD,CAAY1D,QAAQ,WAAWN,EAAU,yBAMnDs5B,GAAQ,kBAACS,GAAA,EAAD,CAASz5B,QAAQ,QAAQC,UAAU,KAAKb,UAAWE,EAAQ24B,YCnL5Dkd,GAnDsB,SAAC,GAO/B,IANLjwD,EAMI,EANJA,SACA00C,EAKI,EALJA,gBACAC,EAII,EAJJA,mBACAK,EAGI,EAHJA,oBACAE,EAEI,EAFJA,oBAGM3nD,GADF,gHACiB0sC,gBADjB,EAEsBnX,mBAAS,IAF/B,mBAEGna,EAFH,KAEUunD,EAFV,KAeJ,OAXA5nB,cAAqB,WACnB,GAAKtoC,GAAaA,EAAS1c,OAA3B,CACA,IAAM0M,EAAMgQ,EAASvc,KAAI,SAACqxD,GAAD,OAAOA,EAAEsY,YAClC7/D,EACGM,QAAQ,OAAQ,CACfmC,QAEDnM,MAAK,gBAAGuF,EAAH,EAAGA,KAAH,OAAc8mE,EAAS9mE,SAC9B,CAAC4W,IAIF,oCACGA,GACCA,EAASlO,MACTkO,EACGlO,MAAK,SAACm/B,EAAOE,GACZ,IAAM2U,EAAQhpC,KAAOm0B,EAAMjoB,WAAW+8B,OAChCC,EAAQlpC,KAAOq0B,EAAOnoB,WAAW+8B,OACvC,OAAID,EAAQE,EAAc,EACtBA,EAAQF,GAAe,EACpB,KAERriD,KAAI,SAAConB,GACJ,IAAMmkC,EAASrmC,EAAMrb,MAAK,SAACf,GAAD,OAAUA,EAAK8C,KAAOwb,EAAQuiD,YACxD,OACE,kBAAC,GAAD,CACE/yC,OAAM,2BAAOxP,GAAP,IAAgBmkC,WACtBxrB,SAAUkxB,EACVb,YAAac,EACbhB,cAAeqB,EACfpB,cAAesB,EACf3vD,IAAKslB,EAAQxb,UC7BvBupB,GAAYC,cAAW,SAAChC,GAC5B,MAAO,CACLga,OAAQ,CACNxZ,WAAYR,EAAME,QAAQK,UAAU3O,KACpC3O,MAAO+c,EAAME,QAAQK,UAAUD,kBA+MtBg5C,GA1MqB,SAAC,GAA0B,IAAxB91C,EAAuB,EAAvBA,OAC/BD,GADsD,2BAC5CxB,MACVrsB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CjyB,EAAe0sC,eAHuC,EAI5BnX,mBAASzI,EAAOra,UAJY,mBAIrDA,EAJqD,KAI3Cy0C,EAJ2C,OAKd3xB,mBAAS,MALK,mBAKrD4xB,EALqD,KAKpCC,EALoC,KAM7B,kBAApBt6B,EAAOra,WAAuBqa,EAAOra,SAAW,MAC3D,IAAM+b,EAAUiT,eAEhBsZ,cAAqB,WACnBmM,EAAYp6B,EAAOra,UACnB20C,EAAmB,QAClB,CAAC54B,EAAS1B,EAAOra,UAAY,KAEhC,IAAM86B,EAAY,uCAAG,WAAO7qC,GAAP,mBAAArI,EAAA,yDACdyyB,GAAWA,EAAOhrB,IAAOY,EAAOsK,KADlB,iDAEftK,EAAOZ,IACHulD,EAAc,CAClBr6C,KAAMtK,EAAOsK,KACbw5C,QAAQ,EACR5qC,UAAWrM,OAAS+3C,cACpBtiD,SAAS,GAEXkiD,EAAYz0C,EAASvc,KAAI,SAACqxD,GAAD,OAAQA,EAAEzlD,KAAOY,EAAOZ,GAAhB,2BAA0BylD,GAAMF,GAAgBE,MACjFvnD,EACGb,OAAO,qBAAsB,CAC5B2C,GAAIgrB,EAAOhrB,GACXjG,KAAK,2BACAgI,eAAKipB,EAAQ,CAAC,KAAM,OAAQ,QAAS,gBAAiB,eAAgB,iBADvE,IAEFra,SAAU,CACRtT,OAAQ,CACN,CACEgF,MAAO,CAAErC,GAAIY,EAAOZ,IACpBjG,KAAM,CACJmR,KAAMtK,EAAOsK,KACb6yD,SAAUn9D,EAAO++C,OAAO3/C,GACxB0kD,QAAQ,UAOnBlwD,MAAK,SAACQ,GAAY,IAEP2b,EACN3b,EADF+E,KAAQ4W,SAGV,OADAy0C,EAAYz0C,GACL3b,KAxBX,OA0BS,SAACwpC,GACNtpC,QAAQC,IAAIqpC,GACZ+mB,EAAYtwD,MAAQupC,EACpB+mB,EAAYriD,SAAU,EACtBkiD,EAAYz0C,EAASvc,KAAI,SAACqxD,GAAD,OAAQA,EAAEzlD,KAAOY,EAAOZ,GAAhB,2BAA0BylD,GAAMF,GAAgBE,SA9BrF,SAgCW,WACPH,EAAmB,WAGjBtlD,EAAK0lD,OACLH,EAFD,2BAEoB3kD,GAFpB,IAE4Bm9D,SAAU7gE,EAAK8C,GAAIA,KAAIkD,SAAS,EAAMyW,UAAWlM,OAAS+3C,gBAC3FJ,EAAY,GAAD,mBAAKz0C,GAAL,CAAe40C,KAC1BrnD,EACGb,OAAO,qBAAsB,CAC5B2C,GAAIgrB,EAAOhrB,GACXjG,KAAK,2BACAgI,eAAKipB,EAAQ,CAAC,KAAM,OAAQ,QAAS,gBAAiB,eAAgB,iBADvE,IAEFra,SAAU,CACRjS,OAAQ,CACN,CACEwM,KAAMtK,EAAOsK,KACb6yD,SAAUn9D,EAAO++C,OAAO3/C,UAMjCxL,MAAK,SAACQ,GAAY,IAEP2b,EACN3b,EADF+E,KAAQ4W,SAGV,OADAy0C,EAAYz0C,GACL3b,KApBX,OAsBS,SAACwpC,GACNtpC,QAAQC,IAAIqpC,GACZ+mB,EAAYtwD,MAAQupC,EACpB+mB,EAAYriD,SAAU,EACtBkiD,EAAY,GAAD,mBAAKz0C,GAAL,CAAe40C,SA3Eb,2CAAH,sDA0FlB,OACE,kBAAC,KAAD,CACE7M,SAAUjN,EACV8L,cAAe,CACbrsC,KAAM,KACNy0C,OAAQziD,GAEVyjC,OAAQ,YAA6B,IAA1B8K,EAAyB,EAAzBA,aAAc0D,EAAW,EAAXA,KACjBwW,EAAmB,uCAAG,WAAO3lD,GAAP,iBAAAzH,EAAA,6DAC1B+sD,EAAmB,MACnBF,EAAYz0C,EAASpd,QAAO,SAACioB,GAAD,OAAaA,EAAQxb,KAAOA,MAF9B,SAKhB9B,EAAab,OAAO,qBAAsB,CAClD2C,GAAIgrB,EAAOhrB,GACXjG,KAAK,2BACAgI,eAAKipB,EAAQ,CAAC,KAAM,OAAQ,QAAS,gBAAiB,eAAgB,iBADvE,IAEFra,SAAU,CACR/R,OAAQ,CAAC,CAAEoB,YAVS,gBAIN4lD,EAJM,EAIxB7rD,KAAQ4W,SAUVw+B,EAAKgU,QACLiC,EAAYQ,GAfc,2CAAH,sDAkBnBC,EAAmB,uCAAG,WAAO7lD,GAAP,iBAAAzH,EAAA,6DAC1B+sD,EAAmB,MACnBF,EACEz0C,EAASvc,KAAI,SAAConB,GAAD,OACXA,EAAQxb,KAAOA,EACXwb,EADJ,2BAGSA,GAHT,IAIMmK,SAAS,EACTrD,UAAW7U,OAAS+3C,cACpBtiD,SAAS,QAVO,SAgBhBhF,EAAab,OAAO,qBAAsB,CAClD2C,GAAIgrB,EAAOhrB,GACXjG,KAAK,2BACAgI,eAAKipB,EAAQ,CAAC,KAAM,OAAQ,QAAS,gBAAiB,eAAgB,iBADvE,IAEFra,SAAU,CACRtT,OAAQ,CACN,CACEgF,MAAO,CAAErC,MACTjG,KAAM,CAAE4rB,SAAS,EAAMrD,UAAW7U,OAAS+3C,sBAxB3B,gBAeNI,EAfM,EAexB7rD,KAAQ4W,SAeVw+B,EAAKgU,QACLiC,EAAYQ,GA/Bc,2CAAH,sDAkCzB,OACE,0BACElN,SAAU,SAACngB,GACTkT,EAAalT,GACb4W,EAAKgU,UAGP,kBAAC,KAAD,CAAM7d,OAAK,GACT,kBAAC,GAAD,CACE30B,SAAUA,EACVg1C,oBAAqBA,EACrBE,oBAAqBA,EACrBR,gBAAiBA,EACjBC,mBAAoBA,IAEtB,kBAACT,GAAA,EAAD,CAAU1iB,WAAW,cACnB,kBAACoC,GAAA,EAAD,KACE,kBAAC,GAAD,CAAa1Z,UAAWE,EAAQyW,OAAQxW,OAAQ9tB,KAElD,kBAACsnC,GAAA,EAAD,KACE,kBAAC,KAAD,CACEzyC,KAAK,OACL2mD,SAAQ,uCAAE,WAAOngB,GAAP,SAAAhgC,EAAA,sEACFkzC,EAAalT,GADX,OAER4W,EAAKgU,QAFG,2CAAF,sDAIRz3B,UAAWg1C,aC/KzBn3C,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvC1uB,KAAM,CACJ2R,MAAO+c,EAAME,QAAQ5uB,KAAKsgB,UAIxB2nD,GAA0B,SAAC,GAAD,IAAGj2C,EAAH,EAAGA,SAAU/wB,EAAb,EAAaA,KAAb,2CAC9B,kBAACmmC,GAAA,EAAD,KACE,kBAACoV,GAAD,CAAmB/mB,MAAM,qBAAqBtE,KAAM,kBAAC6hB,GAAD,OAClD,kBAAC,GAAD,CAAqBhhB,SAAUA,EAAUE,OAAQjxB,EAAM60B,OAAO,SAC9D,kBAAC,GAAD,CAAqB9D,SAAUA,EAAUE,OAAQjxB,EAAM60B,OAAO,UAC9D,kBAAC,GAAD,CAAqB9D,SAAUA,EAAUE,OAAQjxB,EAAM60B,OAAO,kBAC9D,kBAAC,GAAD,CAAqB9D,SAAUA,EAAUE,OAAQjxB,EAAM60B,OAAO,iBAC9D,kBAAC,GAAD,CAAqB9D,SAAUA,EAAUE,OAAQjxB,EAAM60B,OAAO,iBAE/DjzB,GAAQi/B,IAAI,SAAU,SAAW,kBAAC,GAAD,CAA4B9P,SAAUA,EAAUE,OAAQjxB,IAC1F,kBAACswD,GAAA,EAAD,CAAYv/B,SAAUA,EAAUE,OAAQjxB,MAItCinE,GAAuB,SAACp2C,GAC5B,OACE,kBAAC,GAAwBA,EACvB,kBAAC,GAAD,CAAagE,OAAO,IAAI5uB,GAAE,UAAK4qB,EAAM2Q,UAAX,MAA0BoT,UAAQ,IAC5D,kBAAC,GAAD,CAAW/f,OAAO,OAAOqF,KAAK,WAAW7F,UAAU,gBAAgBugB,UAAQ,MAK3EsyB,GAA6B,SAACr2C,GAClC,OACE,kBAAC,GAAD,KACE,kBAAC,GAA4BA,KAK7Bs2C,GAA2B,SAACt2C,GAChBrB,KAAhB,IACQyB,EAAWJ,EAAXI,OAFkC,EAGlByI,oBAAS,GAHS,mBAGnC4B,EAHmC,KAG7B4Y,EAH6B,KAK1C,OACE,kBAACvd,GAAA,EAAD,CAAMjH,WAAS,EAACvd,QAAS,GACvB,kBAACwkB,GAAA,EAAD,CAAM5wB,MAAI,EAAC6wB,GAAI,GAAIy3B,GAAI,GACrB,kBAAC,GAAD,CACEp9B,OAAQA,EACR0f,QAAS,CAAC,QAAS,OAAQ,gBAAiB,gBAC5CrV,KAAMA,EACN4Y,QAASA,IAEX,kBAAC,GAAD,eAA+B1f,MAAM,QAAW3D,IAC/CI,GAAUA,EAAO5d,WAAa4d,EAAO5d,QAAQnZ,QAC5C,kBAAC,GAAD,eAAYs6B,MAAM,WAAc3D,GAC9B,kBAACkiC,GAAA,EAAD,CACEl+B,OAAO,aACPL,MAAM,8CACNN,UAAU,EACVsN,UAAU,UAEV,kBAACwxB,GAAA,EAAD,CAAiBv+B,SAAS,QACxB,kBAACk8B,GAAA,EAAD,CAAW97B,OAAO,YAQ1B,kBAAC,GAAD,eACEL,MAAM,cACF3D,EAFN,CAGEI,OAAM,2BAAOA,GAAP,IAAevX,WAAYuX,EAAOvX,WAAP,sBAAwBuX,EAAOvX,YAA/B,CAA2C,KAAM,CAAC,QAEnF,kBAAC0tD,GAAA,EAAD,CAAYvyC,OAAO,aAAaX,UAAU,GACxC,kBAACwS,GAAA,EAAD,KAEE,kBAAC,KAAD,CAAW7R,OAAO,SAElB,kBAAC,GAAD,CAAWA,OAAO,OAAOH,UAAU,IACnC,kBAAC,KAAD,CAAWG,OAAO,QAAQH,UAAU,IACpC,kBAAC,KAAD,CAAWG,OAAO,gBAAgBH,UAAU,OAIlD,kBAAC,GAAD,eAAaF,MAAM,YAAe3D,GAChC,kBAAC,GAAD,QAGJ,kBAAC8F,GAAA,EAAD,CAAM5wB,MAAI,EAAC6wB,GAAI,GAAIy3B,GAAI,GACrB,kBAAC,GAAD,eAAY75B,MAAM,YAAe3D,GAC/B,kBAAC,GAAD,CACE2Q,UAAU,eACVziC,OAAM6C,GAAQi/B,IAAI,SAAU,gBAAiB,OAC7CrM,MAAM,mDACNK,OAAO,gBAEP,kBAAC,KAAD,CAAWA,OAAO,UAEpB,kBAAC+gB,GAAA,EAAD,CACE/gB,OAAO,YACPL,MAAM,6CACNgN,UAAU,SACVziC,MAAM,GAEN,kBAAC,KAAD,CAAW81B,OAAO,sBAEpB,kBAAC,KAAD,CAAWA,OAAO,gBAEpB,kBAAC,GAAD,eAAaL,MAAM,OAAO7C,UAAW,OAAWd,GAC9C,kBAAC,GAAD,CAAWgE,OAAO,OAAO+B,GAAI,CAAE9c,MAAO,YAAa5J,KAAM,CAAC,GAAI,SAC5D,kBAAC,GAAD,CACEy+C,SAAS,yBACT5pB,QAAS,kBAAMmP,GAAQ,IACvBrf,OAAO,MACP1V,MAAM,OACNomC,SAAO,MAIb,kBAAC,GAAD,eAAa/wB,MAAM,QAAQ7C,UAAW,OAAWd,GAC/C,kBAAC,GAAD,CAAWgE,OAAO,QAAQ+B,GAAI,CAAE9c,MAAO,YAAa5J,KAAM,CAAC,GAAI,SAC7D,kBAAC,GAAD,CACEy+C,SAAS,yBACT95B,OAAO,MACP1V,MAAM,OACNomC,SAAO,EACPxgB,QAAS,kBAAMmP,GAAQ,QAI7B,kBAAC,GAAD,eAAa1f,MAAM,gBAAgB7C,UAAW,OAAWd,GACvD,kBAAC,GAAD,CAAWgE,OAAO,gBAAgB+B,GAAI,CAAE9c,MAAO,YAAa5J,KAAM,CAAC,GAAI,SACrE,kBAAC,GAAD,CACEy+C,SAAS,yBACT5pB,QAAS,kBAAMmP,GAAQ,IACvBrf,OAAO,MACP1V,MAAM,OACNomC,SAAO,MAIb,kBAAC,GAAD,eAAa/wB,MAAM,eAAe7C,UAAW,OAAWd,GACtD,kBAAC,GAAD,CAAWgE,OAAO,eAAe+B,GAAI,CAAE9c,MAAO,YAAa5J,KAAM,CAAC,GAAI,SACpE,kBAAC,GAAD,CACEy+C,SAAS,yBACT95B,OAAO,MACP1V,MAAM,OACNomC,SAAO,EACPxgB,QAAS,kBAAMmP,GAAQ,QAI7B,kBAAC,GAAD,eAAa1f,MAAM,cAAc7C,UAAW,OAAWd,GACrD,kBAAC,GAAD,CAAWgE,OAAO,cAAc+B,GAAI,CAAE9c,MAAO,YAAa5J,KAAM,CAAC,GAAI,SACnE,kBAAC,GAAD,CACEy+C,SAAS,yBACT95B,OAAO,MACP1V,MAAM,OACNomC,SAAO,EACPxgB,QAAS,kBAAMmP,GAAQ,WAqHtBmzB,GA5Gc,SAACx2C,GAC5B,IAAMkQ,EAAkB4nB,aAAkB93B,GACpCg8B,EAAiB15B,IAAM0K,OAAO,MAE9BmD,GADoB7N,IAAM0K,OAAO,MACrBkD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,SAEnE,OACE,kBAAC,GAAD,eACEzM,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,IACzCkB,QAAS,kBAAC,GAAD,OACLlB,EACAkQ,GAEHC,GAAa,kBAAC,GAAD,MAEd,kBAAC,GAAD,MAgDA,kBAAC,GAAD,CACE7kC,IAAI,iBACJqlC,UAAU,OACV14B,OAAO,mBACP0rB,MAAM,4CACNrc,QAAS,kBAAC,GAAD,MACT4Z,QAAS,kBAAC,GAAD,MACTrpB,KAAM,CAAEf,MAAO,YAAagB,MAAO,OACnCJ,WAAY,kBAACo+B,EAAA,EAAD,MACZ7qC,SAAS,QAET,kBAAC,GAAD,OAGF,kBAAC,GAAD,CAAWiG,OAAQ,yBAAKk2B,IAAK40B,MAE7B,kBAAC,GAAD,CAAaA,eAAgBA,GAC3B,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWh4B,OAAO,OAClB,kBAACgoB,GAAA,EAAD,CAAWhoB,OAAO,cAClB,kBAAC,KAAD,CAAWA,OAAO,iBAAiBL,MAAM,kDACzC,kBAACqoB,GAAA,EAAD,CAAWhoB,OAAO,cAClB,kBAACgoB,GAAA,EAAD,CAAWhoB,OAAO,eALpB,QC/RFyyC,GAAuBxlC,K,qBCEvBtS,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyyB,IAAK,CACHpxC,OAAQ,QAINy4D,GAAiB,SAAC12C,GAAD,OACrB,kBAAC6vB,GAAuB7vB,EACtB,kBAAC,KAAD,CAAagE,OAAO,IAAI+f,UAAQ,MAkB9B4yB,GAAe,SAAC,GAA+B,IAA7BrmB,EAA4B,EAA5BA,YAAgBtwB,EAAY,gCAC5CG,EAAUxB,KACV4B,EAAYC,eACZluB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAG1C+Z,GADOhtC,GAAQA,EAAK6gB,QACT00B,GAAetnB,EAAU,aAAD,OAAcP,EAAM/0B,SAApB,SAAqC,CAAEswC,YAAa,IAAM+U,EAAa,CAC9G/vB,eAEIuwB,EAAmBxuB,IAAM0K,OAAO,MACtC,OACE,kBAAC,GAAD,iBACMhN,EADN,CAGE1Y,QAAS,kBAAC,GAAD,CAAgBslC,QAASkE,IAClCxR,SAAUA,IAEV,kBAACzJ,GAAA,EAAD,CAAUua,SAAS,OAAOjwB,QAAS,CAAEkvB,IAAKlvB,EAAQkvB,MAChD,kBAAC,KAAD,CAAWrrB,OAAO,wBAM1B2yC,GAAal0C,aAAe,CAC1B7qB,QAAS,IACTC,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B85C,mBAAmB,EACnBtB,YAAa,CACXl7C,IAAI,EACJjO,MAAM,EACNuhB,aAAa,EACbqG,UAAW8tB,GACX93B,UAAW,CACT5d,MAAM,EACN61C,WAAY,QAEd9tB,UAAW2tB,KACXxlB,OAAO,EACPzQ,kBAAkB,EAClB0Q,WAAW,EACX0lB,WAAY,WAID25B,UC3CAC,IC7BGh4C,aAAW,CAC3Ba,QAAS,CACPX,QAAS,OACTE,eAAgB,mBDDC,SAACgB,GACpB,IAAMkQ,EAAkB4nB,aAAkB93B,GACpCg8B,EAAiB15B,IAAM0K,OAAO,MAC9BmD,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAEnE,OACE,kBAAC,GAAD,eAAMzM,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GACtEC,GAAa,kBAAC,GAAD,MACd,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWnM,OAAO,qBAClB,kBAAC,KAAD,CAAWA,OAAO,WAGpB,kBAAC,GAAD,CAAW9yB,OAAQ,yBAAKk2B,IAAK40B,MAE7B,kBAAC,GAAD,CAAaA,eAAgBA,GAC3B,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWh4B,OAAO,OAClB,kBAACgoB,GAAA,EAAD,CAAWhoB,OAAO,cAElB,kBAACgoB,GAAA,EAAD,CAAWhoB,OAAO,mBEvBtB6yC,GAAe5lC,K,WCCftS,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyyB,IAAK,CACHpxC,OAAQ,QAIN64D,GAAe,SAAC92C,GAAD,OACnB,kBAAC6vB,GAAuB7vB,EACtB,kBAAC,KAAD,CAAagE,OAAO,IAAI+f,UAAQ,MAI9BgzB,GAAa,SAAC,GAA+B,IAA7BzmB,EAA4B,EAA5BA,YAAgBtwB,EAAY,gCAC1CG,EAAUxB,KACV4B,EAAYC,eACZ8e,EAAWuI,GAAetnB,EAAU,aAAD,OAAcP,EAAM/0B,SAApB,SAAqC,CAAEswC,YAAa,IAAM+U,EAAa,CAC9G/vB,cAEIuwB,EAAmBxuB,IAAM0K,OAAO,MAEtC,OACE,kBAAC,KAAD,eAAM1lB,QAAS,kBAAC,GAAD,CAAcslC,QAASkE,IAAsBxR,SAAUA,GAActf,GAClF,kBAAC6V,GAAA,EAAD,CAAUua,SAAS,OAAOjwB,QAAS,CAAEkvB,IAAKlvB,EAAQkvB,MAC/Ct+C,GAAQi/B,IAAI,UAAW,SAAU,SAAW,kBAAC,KAAD,CAAWhM,OAAO,SAC9DjzB,GAAQi/B,IAAI,UAAW,SAAU,gBAAkB,kBAAC,KAAD,CAAWhM,OAAO,mBAM9E+yC,GAAWt0C,aAAe,CACxB7qB,QAAS,IACTC,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B85C,mBAAmB,EACnBtB,YAAa,CACXl7C,IAAI,EACJjO,MAAM,EACNuhB,aAAa,EACbs0B,WAAY,WAID+5B,UC7BT/uC,GAAW,CAAC7Q,gBAEZwH,GAAYC,aAAW,CAC3Ba,QAAS,CACPX,QAAS,OACTE,eAAgB,mBAIdg4C,GAAkB,SAACh3C,GACvB,IAAMmQ,EAAYnQ,EAAMI,OAAOrF,QAC/B,OACE,kBAACgV,GAAA,EAAD,iBAAa/P,EAAb,CAAoBG,QAASxB,OAC1BwR,EAAY,kBAAC,GAAD,MAAoB,kBAACxJ,GAAA,EAAD,CAAYpF,SAAS,UACpD4O,GAAa,kBAAC,KAAD,CAActO,UAAQ,EAACxC,KAAM,kBAAC,KAAD,UA0BnC43C,GArBI,SAACj3C,GAClB,IAAMkQ,EAAkB9M,aAAkBpD,GACpCmQ,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAEnE,OACE,kBAAC,GAAD,eAAMzM,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GACvE,kBAAC,GAAD,KACE,kBAACgmB,GAAA,EAAD,CAAY30B,SAAS,OAAO9B,QAAS,kBAAC,GAAD,MAAqBktB,cAAe,CAAEn1C,WAAY,WACrF,kBAACg5B,GAAA,EAAD,CAAWxM,OAAO,KAAK8C,UAAQ,IAC9B/1B,GAAQi/B,IAAI,SAAU,SAAU,SAC/B,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,OAAOgE,SAAUA,GAAUlB,SAAUqJ,EAAW5R,WAAS,IAE5ExtB,GAAQi/B,IAAI,SAAU,SAAU,gBAC/B,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAC3J,SAAUqJ,EAAW5R,WAAS,QC9C9EyJ,GAAW,CAAC7Q,gBAeH+/C,GAbM,SAACl3C,GACpB,IAAMkQ,EAAkB4lB,aAAoB91B,GAE5C,OACE,kBAAC,GAAD,iBAAYA,EAAWkQ,GACrB,kBAACgmB,GAAA,EAAD,CAAY30B,SAAS,OAAOorB,cAAe,CAAEn1C,WAAY,WACtDzG,GAAQi/B,IAAI,SAAU,SAAU,SAAW,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,OAAOgE,SAAUA,GAAUzJ,WAAS,IACjGxtB,GAAQi/B,IAAI,SAAU,SAAU,gBAAkB,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAClS,WAAS,OCsB/F44C,GA3BI,SAACn3C,GAClB,IAAMkQ,EAAkB4nB,aAAkB93B,GACpCg8B,EAAiB15B,IAAM0K,OAAO,MAC9BmD,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAEnE,OACE,kBAAC,GAAD,eAAMzM,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GACtEC,GAAa,kBAAC,GAAD,MACd,kBAAC,GAAD,KACGp/B,GAAQi/B,IAAI,SAAU,SAAU,SAAW,kBAAC,KAAD,CAAWhM,OAAO,SAC7DjzB,GAAQi/B,IAAI,SAAU,SAAU,gBAAkB,kBAAC,KAAD,CAAWhM,OAAO,iBAGvE,kBAAC,GAAD,CAAW9yB,OAAQ,yBAAKk2B,IAAK40B,MAE7B,kBAAC,GAAD,CAAaA,eAAgBA,GAC3B,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWh4B,OAAO,WCVtBrF,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyyB,IAAK,CACHpxC,OAAQ,QAINm5D,GAA0B,SAACp3C,GAC/B,IAAM1tB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpS,EAAU7gB,GAAOA,EAAK6gB,SAAgB,GAE5C,OACE,kBAAC08B,GAAuB7vB,EACtB,kBAAC,KAAD,CAAagE,OAAO,IAAI+f,UAAQ,IAChC,kBAACrT,GAAA,EAAD,CACE1M,OAAO,SACP2M,UAAU,SACVhoC,OAAQ,CAAEoN,IAAKod,GACfvb,QAAS,IACT4rB,UAAU,gBACV3rB,KAAM,CAAEf,MAAO,qBAEf,kBAAC+yB,GAAA,EAAD,CAAaF,WAAW,wBAM1B0tC,GAAwB,SAAC,GAA+B,IAA7B/mB,EAA4B,EAA5BA,YAAgBtwB,EAAY,gCACrDG,EAAUxB,KACVrsB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpS,EAAW7gB,GAAQA,EAAK6gB,SAAY,GACpC+c,EAAkBghB,aAAkB,aAAEvoD,OAAQ,CAAEwqB,QAAQ,YAAKA,EAAQ3pB,KAAI,SAAC+H,GAAD,MAAQ,CAAE6D,GAAI7D,SAAayuB,IACpGO,EAAYC,eACZ8e,EAAWuI,GAAetnB,EAAU,aAAD,OAAcP,EAAM/0B,SAApB,SAAqC,CAAEswC,YAAa,IAAM+U,EAAa,CAC9G/vB,cAEIuwB,EAAmBxuB,IAAM0K,OAAO,MAEtC,OACE,kBAAC,GAAD,iBACMhN,EACAkQ,EAFN,CAGE5oB,QAAS,kBAAC,GAAD,CAAyBslC,QAASkE,IAC3CxR,SAAUA,IAEV,kBAACzJ,GAAA,EAAD,CAAUua,SAAS,OAAOjwB,QAAS,CAAEkvB,IAAKlvB,EAAQkvB,MAChD,kBAAC,KAAD,CAAWrrB,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,mBAM1BqzC,GAAsB50C,aAAe,CACnC7qB,QAAS,IACTC,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B85C,mBAAmB,EACnBtB,YAAa,CACXl7C,IAAI,EACJjO,MAAM,EACNuhB,aAAa,EACbhC,QAAQ,EACRmC,WAAY,CACV1hB,MAAM,EACNiC,KAAM2zC,GACN9zB,OAAO,EACP+zB,WAAY,oBAEdA,WAAY,sBAIDq6B,UC9DTrvC,GAAW,CAAC7Q,gBAEZwH,GAAYC,aAAW,CAC3Ba,QAAS,CACPX,QAAS,OACTE,eAAgB,mBAIdg4C,GAAkB,SAACh3C,GACvB,IAAMmQ,EAAYnQ,EAAMI,OAAOrF,QAC/B,OACE,kBAACgV,GAAA,EAAD,iBAAa/P,EAAb,CAAoBG,QAASxB,OAC1BwR,EAAY,kBAAC,GAAD,MAAoB,kBAACxJ,GAAA,EAAD,CAAYpF,SAAS,UACpD4O,GAAa,kBAAC,KAAD,CAAc9Q,KAAM,kBAAC,KAAD,UA+C1Bi4C,GA1Ce,SAACt3C,GAC7B,IAAMkQ,EAAkB9M,aAAkBpD,GACpCmQ,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAC7DzoB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpS,EAAU7gB,GAAOA,EAAK6gB,SAAgB,GAC5C,OACE,kBAAC,GAAD,eAAM7E,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GACvE,kBAAC,GAAD,KACE,kBAACgmB,GAAA,EAAD,CAAY30B,SAAS,OAAO9B,QAAS,kBAAC,GAAD,MAAqBktB,cAAe,CAAEn1C,WAAY,sBACrF,kBAACg5B,GAAA,EAAD,CAAWxM,OAAO,KAAK8C,UAAQ,IAC/B,kBAAC0J,GAAA,EAAD,CAAWxM,OAAO,OAAO8C,SAAUqJ,EAAWnI,SAAUA,GAAUzJ,WAAS,IAC3E,kBAACiS,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAC3J,SAAUqJ,EAAW5R,WAAS,IACxE,kBAACmS,GAAA,EAAD,CACE1M,OAAO,YACPL,MAAM,4CACNgN,UAAU,SACVhoC,OAAQ,CAAEoN,IAAKod,GACfvb,QAAS,IACTC,KAAM,CAAEf,MAAO,qBAEf,kBAAC+yB,GAAA,EAAD,CAAaF,WAAW,sBAEzB54B,GAAQi/B,IAAI,SAAU,qBACrB,kBAAC,GAAD,CAA+BW,UAAU,mBAAmB3M,OAAO,cACjE,kBAAC,GAAD,OAGJ,kBAAC,GAAD,CAAgBA,OAAO,mBCpBlBuzC,GA3Ce,SAACv3C,GAC7B,IAAMkQ,EAAkB4nB,aAAkB93B,GACpCg8B,EAAiB15B,IAAM0K,OAAO,MAC9BmD,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAEnE,OACE,kBAAC,GAAD,eAAMzM,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GACtEC,GAAa,kBAAC,GAAD,MACd,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWnM,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,gBAClB,kBAAC+gB,GAAA,EAAD,CACE3vC,GAAG,+BACH4uB,OAAO,YACP2M,UAAU,SACVhN,MAAM,4CACNz1B,MAAM,GAEN,kBAAC,KAAD,CAAW81B,OAAO,sBAEpB,kBAACuyC,GAAA,EAAD,CAAYvyC,OAAO,cACjB,kBAAC6R,GAAA,EAAD,KAEE,kBAAC,KAAD,CAAW7R,OAAO,SAElB,kBAAC,GAAD,CAAWA,OAAO,OAAO/4B,SAAS,mBAAmB44B,UAAU,IAC/D,kBAAC,KAAD,CAAWG,OAAO,QAAQH,UAAU,IACpC,kBAAC,KAAD,CAAWG,OAAO,gBAAgBH,UAAU,OAKlD,kBAAC,GAAD,CAAW3yB,OAAQ,yBAAKk2B,IAAK40B,MAE7B,kBAAC,GAAD,CAAaA,eAAgBA,GAC3B,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWh4B,OAAO,WC3BtBgE,GAAW,CAAC7Q,gBAwCHqgD,GAtCiB,SAACx3C,GAC/B,IAAMkQ,EAAkB4lB,aAAoB91B,GACtC1tB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpS,EAAU7gB,GAAOA,EAAK6gB,SAAgB,GAC5C,OACE,kBAAC,GAAD,iBAAY6M,EAAWkQ,GACrB,kBAACgmB,GAAA,EAAD,CAAY30B,SAAS,OAAOorB,cAAe,CAAEn1C,WAAY,sBACvD,kBAACg5B,GAAA,EAAD,CAAWxM,OAAO,OAAOgE,SAAUA,GAAUzJ,WAAS,IACtD,kBAACiS,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAClS,WAAS,IACnD,kBAACmS,GAAA,EAAD,CACE1M,OAAO,YACPL,MAAM,4CACNgN,UAAU,SACVhoC,OAAQ,CAAEoN,IAAKod,GACfvb,QAAS,IACTC,KAAM,CAAEf,MAAO,qBAEf,kBAAC+yB,GAAA,EAAD,CAAaF,WAAW,sBAEzB54B,GAAQi/B,IAAI,SAAU,qBACrB,kBAAC,GAAD,CAA+BW,UAAU,mBAAmB3M,OAAO,cACjE,kBAAC,GAAD,OAGJ,kBAAC,GAAD,CAAgBA,OAAO,kBCtCzBrF,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyyB,IAAK,CACHpxC,OAAQ,QAIN64D,GAAe,SAAC92C,GAAD,OACnB,kBAAC6vB,GAAuB7vB,EACtB,kBAAC,KAAD,CAAagE,OAAO,IAAI+f,UAAQ,MAI9B0zB,GAAsB,SAAC,GAA+B,IAA7BnnB,EAA4B,EAA5BA,YAAgBtwB,EAAY,gCACnDG,EAAUxB,KACV4B,EAAYC,eACZ8e,EAAWuI,GAAetnB,EAAU,aAAD,OAAcP,EAAM/0B,SAApB,SAAqC,CAAEswC,YAAa,IAAM+U,EAAa,CAC9G/vB,cAEIuwB,EAAmBxuB,IAAM0K,OAAO,MACtC,OACE,kBAAC,GAAD,iBAAUhN,EAAV,CAAiB1Y,QAAS,kBAAC,GAAD,CAAcslC,QAASkE,IAAsBxR,SAAUA,IAC/E,kBAACzJ,GAAA,EAAD,CAAUua,SAAS,OAAOjwB,QAAS,CAAEkvB,IAAKlvB,EAAQkvB,MAChD,kBAAC,KAAD,CAAWrrB,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,mBAM1ByzC,GAAoBh1C,aAAe,CACjC7qB,QAAS,IACTC,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B85C,mBAAmB,EACnBtB,YAAa,CACXl7C,IAAI,EACJjO,MAAM,EACNuhB,aAAa,EACbG,WAAY,CACV1hB,MAAM,EACNiC,KAAM2zC,GACN9zB,OAAO,EACP+zB,WAAY,oBAEdA,WAAY,oBAIDy6B,UChCTzvC,GAAW,CAAC7Q,gBAEZwH,GAAYC,aAAW,CAC3Ba,QAAS,CACPX,QAAS,OACTE,eAAgB,mBAIdg4C,GAAkB,SAACh3C,GACvB,IAAMmQ,EAAYnQ,EAAMI,OAAOrF,QAC/B,OACE,kBAACgV,GAAA,EAAD,iBAAa/P,EAAb,CAAoBG,QAASxB,OAC1BwR,EAAY,kBAAC,GAAD,MAAoB,kBAACxJ,GAAA,EAAD,CAAYpF,SAAS,SACtD,kBAAC,KAAD,CAAcM,UAAQ,EAACxC,KAAM,kBAAC,KAAD,UAgCpBq4C,GA3Ba,SAAC13C,GAC3B,IAAMkQ,EAAkB9M,aAAkBpD,GACpCmQ,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAEnE,OACE,kBAAC,GAAD,eAAMzM,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GACvE,kBAAC,GAAD,KACE,kBAACgmB,GAAA,EAAD,CAAYz2B,QAAS,kBAAC,GAAD,MAAqBktB,cAAe,CAAEn1C,WAAY,oBACrE,kBAACg5B,GAAA,EAAD,CAAWxM,OAAO,KAAK8C,UAAQ,IAC/B,kBAAC0J,GAAA,EAAD,CAAWxM,OAAO,OAAOgE,SAAUA,GAAUlB,SAAUqJ,EAAW5R,WAAS,IAC3E,kBAACiS,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAC3J,SAAUqJ,EAAW5R,WAAS,IACxE,kBAACg1C,GAAD,MACA,kBAAC,GAAD,CAAgBvvC,OAAO,mBCRlB2zC,GAnCa,SAAC33C,GAC3B,IAAMkQ,EAAkB4nB,aAAkB93B,GACpCg8B,EAAiB15B,IAAM0K,OAAO,MAC9BmD,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAEnE,OACE,kBAAC,GAAD,eAAMzM,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GACtEC,GAAa,kBAAC,GAAD,MACd,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWnM,OAAO,SAClB,kBAAC,KAAD,CAAWA,OAAO,gBAElB,kBAACuyC,GAAA,EAAD,CAAYvyC,OAAO,cACjB,kBAAC6R,GAAA,EAAD,KAEE,kBAAC,KAAD,CAAW7R,OAAO,SAElB,kBAAC,GAAD,CAAWA,OAAO,OAAOH,UAAU,IACnC,kBAAC,KAAD,CAAWG,OAAO,QAAQH,UAAU,IACpC,kBAAC,KAAD,CAAWG,OAAO,gBAAgBH,UAAU,OAKlD,kBAAC,GAAD,CAAW3yB,OAAQ,yBAAKk2B,IAAK40B,MAE7B,kBAAC,GAAD,CAAaA,eAAgBA,GAC3B,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWh4B,OAAO,WC9BtBgE,GAAW,CAAC7Q,gBAyBHygD,GAvBe,SAAC53C,GAC7B,IAAMkQ,EAAkB4lB,aAAoB91B,GAE5C,OACE,kBAAC,GAAD,iBAAYA,EAAWkQ,GACrB,kBAACgmB,GAAA,EAAD,CAAY30B,SAAS,OAAOorB,cAAe,CAAEn1C,WAAY,oBACvD,kBAACg5B,GAAA,EAAD,CAAWxM,OAAO,OAAOgE,SAAUA,GAAUzJ,WAAS,IACtD,kBAACiS,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAClS,WAAS,IACnD,kBAACg1C,GAAD,MACA,kBAAC,GAAD,CAAgBvvC,OAAO,kB,UCbzB6zC,G,QAAaC,ECKJ7mC,ICLT8mC,GDHN,SAAc/3C,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BAAM5nB,EAAE,6I,qBEiCC4/D,GA5Bc,SAACh4C,GAC5B,IAAMkQ,EAAkB4nB,aAAkB93B,GACpCg8B,EAAiB15B,IAAM0K,OAAO,MAC9BmD,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAEnE,OACE,kBAAC,GAAD,eAAMzM,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GACtEC,GAAa,kBAAC,GAAD,MACd,kBAAC,GAAD,KACGp/B,GAAQi/B,IAAI,SAAU,mBAAoB,SAAW,kBAAC,GAAD,CAAWhM,OAAO,SACvEjzB,GAAQi/B,IAAI,SAAU,mBAAoB,SAAW,kBAAC,KAAD,CAAWhM,OAAO,SACvEjzB,GAAQi/B,IAAI,SAAU,mBAAoB,gBAAkB,kBAAC,KAAD,CAAWhM,OAAO,iBAGjF,kBAAC,GAAD,CAAW9yB,OAAQ,yBAAKk2B,IAAK40B,MAE7B,kBAAC,GAAD,CAAaA,eAAgBA,GAC3B,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWh4B,OAAO,WCPtBgE,GAAW,CAAC7Q,gBAEZwH,GAAYC,aAAW,CAC3Ba,QAAS,CACPX,QAAS,OACTE,eAAgB,mBAIdg4C,GAAkB,SAACh3C,GACvB,IAAMmQ,EAAYnQ,EAAMI,OAAOrF,QAC/B,OACE,kBAACgV,GAAA,EAAD,iBAAa/P,EAAb,CAAoBG,QAASxB,OAC1BwR,EAAY,kBAAC,GAAD,MAAoB,kBAACxJ,GAAA,EAAD,CAAYpF,SAAS,UACpD4O,GAAa,kBAAC,KAAD,CAActO,UAAQ,EAACxC,KAAM,kBAAC,KAAD,UA6BnC44C,GAxBc,SAACj4C,GAC5B,IAAMkQ,EAAkB9M,aAAkBpD,GACpCmQ,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAEnE,OACE,kBAAC,GAAD,eAAMzM,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GACvE,kBAAC,GAAD,KACE,kBAACgmB,GAAA,EAAD,CAAY30B,SAAS,OAAO9B,QAAS,kBAAC,GAAD,MAAqBktB,cAAe,CAAEn1C,WAAY,qBACrF,kBAACg5B,GAAA,EAAD,CAAWxM,OAAO,KAAK8C,UAAQ,IAC9B/1B,GAAQi/B,IAAI,SAAU,mBAAoB,SACzC,kBAAC,GAAD,CAAW3G,KAAK,gBAAgBC,QAASA,GAAStB,SAAUA,GAAUhE,OAAO,SAE9EjzB,GAAQi/B,IAAI,SAAU,mBAAoB,SACzC,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,OAAO8C,SAAUqJ,EAAWnI,SAAUA,GAAUzJ,WAAS,IAE5ExtB,GAAQi/B,IAAI,SAAU,mBAAoB,SACzC,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAC3J,SAAUqJ,EAAW5R,WAAS,QC9C9EI,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyyB,IAAK,CACHpxC,OAAQ,QAINi6D,GAAyB,SAACl4C,GAAD,OAC7B,kBAAC6vB,GAAuB7vB,EACtB,kBAAC,KAAD,CAAagE,OAAO,IAAI+f,UAAQ,IAChC,kBAAC,GAAD,CAAWza,QAASA,GAASD,KAAK,gBAAgBrF,OAAO,OAAOR,UAAU,gBAAgBugB,UAAQ,MAIhGo0B,GAAuB,SAAC,GAA+B,IAA7B7nB,EAA4B,EAA5BA,YAAgBtwB,EAAY,gCACpDG,EAAUxB,KACV4B,EAAYC,eACZ8e,EAAWuI,GAAetnB,EAAU,aAAD,OAAcP,EAAM/0B,SAApB,SAAqC,CAAEswC,YAAa,IAAM+U,EAAa,CAC9G/vB,cAEIuwB,EAAmBxuB,IAAM0K,OAAO,MACtC,OACE,kBAAC,GAAD,iBAAUhN,EAAV,CAAiB1Y,QAAS,kBAAC,GAAD,CAAwBslC,QAASkE,IAAsBxR,SAAUA,IACzF,kBAACzJ,GAAA,EAAD,CAAUua,SAAS,OAAOjwB,QAAS,CAAEkvB,IAAKlvB,EAAQkvB,MAC/Ct+C,GAAQi/B,IAAI,UAAW,mBAAoB,SAAW,kBAAC,GAAD,CAAWhM,OAAO,SACxEjzB,GAAQi/B,IAAI,UAAW,mBAAoB,SAAW,kBAAC,KAAD,CAAWhM,OAAO,SACxEjzB,GAAQi/B,IAAI,UAAW,mBAAoB,gBAAkB,kBAAC,KAAD,CAAWhM,OAAO,mBAMxFm0C,GAAqB11C,aAAe,CAClC7qB,QAAS,IACTC,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B85C,mBAAmB,EACnBtB,YAAa,CACXl7C,IAAI,EACJjO,MAAM,EACNuhB,aAAa,EACbtf,MAAM,EACN6f,OAAO,EACP+zB,WAAY,qBAIDm7B,UClDTC,GAAgBC,KCKPpnC,ICLTqnC,GDHN,SAAct4C,GACZ,OACE,kBAACkR,GAAA,EAAYlR,EACX,0BAAM5nB,EAAE,iY,qBEoBRg+D,GAAuB,SAACp2C,GAC5B,OACE,kBAAC,GAAwBA,EACvB,kBAAC,GAAD,CAAagE,OAAO,IAAI5uB,GAAE,UAAK4qB,EAAM2Q,UAAX,MAA0BoT,UAAQ,MAM5DsyB,GAA6B,SAACr2C,GAClC,OACE,kBAAC,GAAD,KACE,kBAAC,GAA4BA,KAKtBu4C,GAAO,SAAC,GAA4B,IAA1Bv5D,EAAyB,EAAzBA,SAAaghB,EAAY,6BAC9C,OAAO,oCAAGsC,IAAMH,aAAanjB,EAAnB,eAAkCghB,MAkG/Bw4C,GA/FU,SAACx4C,GACxB,IAAMkQ,EAAkB4nB,aAAkB93B,GACpCg8B,EAAiB15B,IAAM0K,OAAO,MAC9ByrC,EAAkBn2C,IAAM0K,OAAO,MAC/B0rC,EAAoBp2C,IAAM0K,OAAO,MACjCmD,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAEnE,OACE,kBAAC,GAAD,eAAMzM,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GACtEC,GAAa,kBAAC,GAAD,MACd,kBAAC,GAAD,KACGp/B,GAAQi/B,IAAI,SAAU,cAAe,SAAW,kBAAC,KAAD,CAAWhM,OAAO,SAKnE,kBAACk+B,GAAA,EAAD,CAAqBl+B,OAAO,aAAaL,MAAM,wCAAwCgN,UAAU,UAC/F,kBAACwxB,GAAA,EAAD,KACE,kBAAC,GAAD,KACE,kBAACrC,GAAA,EAAD,CAAW97B,OAAO,wBAKxB,kBAAC,KAAD,CAAWA,OAAO,UAElB,kBAAC+gB,GAAA,EAAD,CAAgB/gB,OAAO,sBAAsB2M,UAAU,OAAOziC,KAAK,QACjE,kBAAC,KAAD,CAAW81B,OAAO,UAGpB,kBAAC+gB,GAAA,EAAD,CAAgB/gB,OAAO,mBAAmB2M,UAAU,OAAOziC,KAAK,QAC9D,kBAAC,KAAD,CAAW81B,OAAO,UAGpB,kBAAC+gB,GAAA,EAAD,CAAgB/gB,OAAO,uBAAuB2M,UAAU,OAAOziC,KAAK,QAClE,kBAAC,KAAD,CAAW81B,OAAO,UAGpB,kBAACk+B,GAAA,EAAD,CAAqBl+B,OAAO,WAAWL,MAAM,sCAAsCgN,UAAU,QAC3F,kBAACwxB,GAAA,EAAD,KACE,kBAAC,GAAD,KACE,kBAACrC,GAAA,EAAD,CAAW97B,OAAO,aAM1B,kBAAC,GAAD,CAAW9yB,OAAQ,yBAAKk2B,IAAKqxC,MAE7B,kBAAC,GAAD,CAAazc,eAAgByc,EAAiB90C,MAAM,uCAClD,kBAAC,GAAD,CACEgN,UAAU,OACV14B,OAAO,cACP0rB,MAAM,sCACNrc,QAAS,kBAAC,GAAD,MACT4Z,QAAS,kBAAC,GAAD,MACTrpB,KAAM,CAAEf,MAAO,YAAagB,MAAO,OACnCJ,WAAY,kBAACo+B,EAAA,EAAD,MACZ7qC,SAAS,QAET,kBAAC,GAAD,QAIJ,kBAAC,GAAD,CAAWiG,OAAQ,yBAAKk2B,IAAKsxC,MAE7B,kBAAC,GAAD,CAAa1c,eAAgB0c,EAAmB/0C,MAAM,mDACpD,kBAAC,GAAD,CACEgN,UAAU,qBACV14B,OAAO,kBACP0rB,MAAM,kDACNrc,QAAS,kBAAC,GAAD,MACT4Z,QAAS,kBAAC,GAAD,MACTrpB,KAAM,CAAEf,MAAO,YAAagB,MAAO,OACnCJ,WAAY,kBAACo+B,EAAA,EAAD,MACZ7qC,SAAS,sBAET,kBAAC,GAAD,QAIJ,kBAAC,GAAD,CAAWiG,OAAQ,yBAAKk2B,IAAK40B,MAE7B,kBAAC,GAAD,CAAaA,eAAgBA,GAC3B,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWh4B,OAAO,WCjHtBrF,GAAYC,aAAW,CAC3Ba,QAAS,CACPX,QAAS,OACTE,eAAgB,iBAElBuQ,oBAAqB,CACnBnQ,UAAW,EACX8E,aAAc,KAIZ8D,GAAW,CAAC7Q,gBAgFHwhD,GA9EY,SAAC34C,GAC1B,IAAMkQ,EAAkB4lB,aAAoB91B,GACtCG,EAAUxB,KAEhB,OACE,kBAAC,GAAD,iBAAYqB,EAAWkQ,GACrB,kBAACgmB,GAAA,EAAD,CAAY30B,SAAS,OAAOorB,cAAe,CAAEn1C,WAAY,iBACtDzG,GAAQi/B,IAAI,SAAU,cAAe,SAAW,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,OAAOgE,SAAUA,GAAUzJ,WAAS,IACtGxtB,GAAQi/B,IAAI,SAAU,cAAe,YACpC,kBAACY,GAAA,EAAD,CACE5M,OAAO,aACP2M,UAAU,SACVhN,MAAM,wCACNxD,QAAS,CAAEtB,UAAWsB,EAAQoP,qBAC9BhR,WAAS,GAET,kBAACsR,GAAA,EAAD,CAAwBlG,WAAW,sBAGtC54B,GAAQi/B,IAAI,SAAU,cAAe,UAAY,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,UACpE,kBAACmyB,GAAA,EAAD,MACG,YAA4B,IAAzBC,EAAwB,EAAxBA,SAEIztD,GAFoB,6BAEX,CACbiwE,WAFqBxiB,EAAf5F,iBAEoB7oD,IAE5B,OACE,oCACGoJ,GAAQi/B,IAAI,SAAU,cAAe,mBACpC,kBAACU,GAAA,EAAD,CACE1M,OAAO,sBACP2M,UAAU,OACVhN,MAAM,oDACNh7B,OAAM,aAAIuK,KAAM,cAAiBvK,GACjC26B,YAAU,EACVE,UAAU,iBAEV,kBAAC,GAAD,CAAmBmG,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,SAGxD/+C,GAAQi/B,IAAI,SAAU,cAAe,gBACpC,kBAACU,GAAA,EAAD,CACE1M,OAAO,mBACP2M,UAAU,OACVhN,MAAM,iDACNh7B,OAAM,aAAIuK,KAAM,WAAcvK,GAC9B26B,YAAU,EACVE,UAAU,iBAEV,kBAAC,GAAD,CAAmBmG,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,SAGxD/+C,GAAQi/B,IAAI,SAAU,cAAe,gBACpC,kBAACU,GAAA,EAAD,CACE1M,OAAO,uBACP2M,UAAU,OACVhN,MAAM,qDACNh7B,OAAM,aAAIuK,KAAM,eAAkBvK,GAClC26B,YAAU,EACVE,UAAU,iBAEV,kBAAC,GAAD,CAAmBmG,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,aAOhE/+C,GAAQi/B,IAAI,SAAU,cAAe,UACpC,kBAACY,GAAA,EAAD,CAAqB5M,OAAO,WAAW2M,UAAU,QAC/C,kBAACd,GAAA,EAAD,CAAwBlG,WAAW,aC7EzC3B,GAAW,CAAC7Q,gBAEZwH,GAAYC,aAAW,CAC3Ba,QAAS,CACPX,QAAS,OACTE,eAAgB,iBAElBuQ,oBAAqB,CACnBnQ,UAAW,EACX8E,aAAc,KAIZ8yC,GAAkB,SAACh3C,GACvB,IAAMmQ,EAAYnQ,EAAMI,OAAOrF,QAC/B,OACE,kBAACgV,GAAA,EAAD,iBAAa/P,EAAb,CAAoBG,QAASxB,OAC1BwR,EAAY,kBAAC,GAAD,MAAoB,kBAACxJ,GAAA,EAAD,CAAYpF,SAAS,UACpD4O,GAAa,kBAAC,KAAD,CAActO,UAAQ,EAACxC,KAAM,kBAAC,KAAD,UAyEnCw5C,GApEU,SAAC74C,GACxB,IAAMkQ,EAAkB9M,aAAkBpD,GACpCmQ,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAC7DoF,EAAUxB,KAChB,OACE,kBAAC,GAAD,eAAMrQ,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GACvE,kBAAC,GAAD,KACE,kBAACgmB,GAAA,EAAD,CAAY30B,SAAS,OAAO9B,QAAS,kBAAC,GAAD,MAAqBktB,cAAe,CAAEn1C,WAAY,iBACrF,kBAACg5B,GAAA,EAAD,CAAWxM,OAAO,KAAK8C,UAAQ,IAC9B/1B,GAAQi/B,IAAI,SAAU,cAAe,SACpC,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,OAAOgE,SAAUA,GAAUlB,SAAUqJ,EAAW5R,WAAS,IAE5ExtB,GAAQi/B,IAAI,SAAU,cAAe,YACpC,kBAACY,GAAA,EAAD,CACE5M,OAAO,aACP2M,UAAU,SACVhN,MAAM,wCACNxD,QAAS,CAAEtB,UAAWsB,EAAQoP,qBAC9BhR,WAAS,GAET,kBAACsR,GAAA,EAAD,CAAwBlG,WAAW,sBAGtC54B,GAAQi/B,IAAI,SAAU,cAAe,UAAY,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,UACnEjzB,GAAQi/B,IAAI,SAAU,cAAe,mBACpC,kBAACU,GAAA,EAAD,CACE1M,OAAO,sBACP2M,UAAU,OACVhoC,OAAQ,CAAEuK,KAAM,cAChBowB,YAAU,EACVE,UAAU,iBAEV,kBAAC,GAAD,CAAmBmG,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,SAGxD/+C,GAAQi/B,IAAI,SAAU,cAAe,gBACpC,kBAACU,GAAA,EAAD,CACE1M,OAAO,mBACP2M,UAAU,OACVhoC,OAAQ,CAAEuK,KAAM,WAChBowB,YAAU,EACVE,UAAU,iBAEV,kBAAC,GAAD,CAAmBmG,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,SAGxD/+C,GAAQi/B,IAAI,SAAU,cAAe,gBACpC,kBAACU,GAAA,EAAD,CACE1M,OAAO,uBACP2M,UAAU,OACVhoC,OAAQ,CAAEuK,KAAM,eAChBowB,YAAU,EACVE,UAAU,iBAEV,kBAAC,GAAD,CAAmBmG,WAAW,OAAOmD,eAAgB,kBAACgjB,GAAD,SAGxD/+C,GAAQi/B,IAAI,SAAU,cAAe,UACpC,kBAACY,GAAA,EAAD,CAAqB5M,OAAO,WAAW2M,UAAU,QAC/C,kBAACd,GAAA,EAAD,CAAwBlG,WAAW,cCnG3ChL,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyyB,IAAK,CACHpxC,OAAQ,QAIN64D,GAAe,SAAC92C,GAAD,OACnB,kBAAC6vB,GAAuB7vB,EACtB,kBAAC,KAAD,CAAagE,OAAO,IAAI+f,UAAQ,MAI9B+0B,GAAmB,SAAC,GAA+B,IAA7BxoB,EAA4B,EAA5BA,YAAgBtwB,EAAY,gCAChDG,EAAUxB,KACV4B,EAAYC,eACZluB,EAAO+yB,cAAY,SAACC,GAAD,OAAWA,EAAMhzB,OAAMizB,MAC1CpS,GAAY7gB,GAAQA,EAAK6gB,SAAY,IAAI3pB,KAAI,SAAC+H,GAAD,MAAQ,CAAE6D,GAAI7D,MAC3D+tC,EAAWuI,GAAetnB,EAAU,aAAD,OAAcP,EAAM/0B,SAApB,SAAqC,CAAEswC,YAAa,IAAM+U,EAAa,CAC9G/vB,cAEIuwB,EAAmBxuB,IAAM0K,OAAO,MAEtC,OACE,kBAAC,KAAD,eACEmkB,oBAAqB,CAAEh+B,WACvB7L,QAAS,kBAAC,GAAD,CAAcslC,QAASkE,IAChCxR,SAAUA,GACNtf,GAEJ,kBAAC6V,GAAA,EAAD,CAAUua,SAAS,OAAOjwB,QAAS,CAAEkvB,IAAKlvB,EAAQkvB,MAC/Ct+C,GAAQi/B,IAAI,UAAW,cAAe,SAAW,kBAAC,KAAD,CAAWhM,OAAO,YAS5E80C,GAAiBr2C,aAAe,CAC9B7qB,QAAS,IACTC,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B85C,mBAAmB,EACnBtB,YAAa,CACXl7C,IAAI,EACJjO,MAAM,EACNuhB,aAAa,EACbs0B,WAAY,WAID87B,UCrDTC,GAAmB9nC,K,gCCqDV+nC,GAvCE,SAACh5C,GAChB,IAAMkQ,EAAkB4nB,aAAkB93B,GACpCg8B,EAAiB15B,IAAM0K,OAAO,MAC9BmD,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAEnE,OACE,kBAAC,GAAD,eAAMzM,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GACtEC,GAAa,kBAAC,GAAD,MACd,kBAAC,GAAD,KACGp/B,GAAQi/B,IAAI,SAAU,OAAQ,SAAW,kBAAC,KAAD,CAAWhM,OAAO,SAC3DjzB,GAAQi/B,IAAI,SAAU,OAAQ,gBAAkB,kBAAC,KAAD,CAAWhM,OAAO,gBAClEjzB,GAAQi/B,IAAI,SAAU,OAAQ,SAAW,kBAACipC,GAAA,EAAD,CAAaj1C,OAAO,SAC7DjzB,GAAQi/B,IAAI,SAAU,OAAQ,aAAe,kBAACghB,GAAA,EAAD,CAAchtB,OAAO,aAClEjzB,GAAQi/B,IAAI,SAAU,OAAQ,6BAC7B,kBAAC,GAAD,CAAgB3G,KAAK,yBAAyBrF,OAAO,6BAEtDjzB,GAAQi/B,IAAI,SAAU,OAAQ,mBAC7B,kBAACkyB,GAAA,EAAD,CAAqBl+B,OAAO,oBAAoB2M,UAAU,gBACxD,kBAACwxB,GAAA,EAAD,KACE,kBAACrC,GAAA,EAAD,CAAW97B,OAAO,YAM1B,kBAAC,GAAD,CAAW9yB,OAAQ,yBAAKk2B,IAAK40B,MAE7B,kBAAC,GAAD,CAAaA,eAAgBA,GAC3B,kBAAC,GAAD,KACE,kBAAC,KAAD,CAAWh4B,OAAO,WC/BtBgE,GAAW,CAAC7Q,gBAsCH+hD,GApCI,SAACl5C,GAClB,IAAMkQ,EAAkB4lB,aAAoB91B,GAE5C,OACE,kBAAC,GAAD,iBAAYA,EAAWkQ,GACrB,kBAACgmB,GAAA,EAAD,CAAY30B,SAAS,OAAOorB,cAAe,CAAEn1C,WAAY,SACtDzG,GAAQi/B,IAAI,SAAU,OAAQ,SAAW,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,OAAOgE,SAAUA,GAAUzJ,WAAS,IAC/FxtB,GAAQi/B,IAAI,SAAU,OAAQ,gBAAkB,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAClS,WAAS,IACnGxtB,GAAQi/B,IAAI,SAAU,OAAQ,SAC7B,kBAACqlB,GAAA,EAAD,CAAarxB,OAAO,OAAOif,aAAc,EAAGk2B,IAAK,EAAGnxC,SAAUA,KAE/Dj3B,GAAQi/B,IAAI,SAAU,OAAQ,aAAe,kBAACsmB,GAAA,EAAD,CAActyB,OAAO,aAClEjzB,GAAQi/B,IAAI,SAAU,OAAQ,6BAC7B,kBAAC,GAAD,CACE1G,QAASA,GACTD,KAAK,yBACLrF,OAAO,2BACPgE,SAAUA,GACVzJ,WAAS,IAGZxtB,GAAQi/B,IAAI,SAAU,OAAQ,mBAC7B,kBAACY,GAAA,EAAD,CACEjN,MAAM,mDACNK,OAAO,oBACP2M,UAAU,eACVpS,WAAS,GAET,kBAACsR,GAAA,EAAD,CAAwBlG,WAAW,aCtBzC3B,GAAW,CAAC7Q,gBAEZwH,GAAYC,aAAW,CAC3Ba,QAAS,CACPX,QAAS,OACTE,eAAgB,mBAIdg4C,GAAkB,SAACh3C,GACvB,IAAMmQ,EAAYnQ,EAAMI,OAAOrF,QAC/B,OACE,kBAACgV,GAAA,EAAD,iBAAa/P,EAAb,CAAoBG,QAASxB,OAC1BwR,EAAY,kBAAC,GAAD,MAAoB,kBAACxJ,GAAA,EAAD,CAAYpF,SAAS,UACpD4O,GAAa,kBAAC,KAAD,CAActO,UAAQ,EAACxC,KAAM,kBAAC,KAAD,UAgDnC+5C,GA3CE,SAACp5C,GAChB,IAAMkQ,EAAkB9M,aAAkBpD,GACpCmQ,EAAYD,EAAgB9P,QAAU8P,EAAgB9P,OAAOrF,QAEnE,OACE,kBAAC,GAAD,eAAMzM,MAAO,kBAAC,GAAD,eAAgB0V,OAAO,QAAWhE,KAAeA,EAAWkQ,GACvE,kBAAC,GAAD,KACE,kBAACgmB,GAAA,EAAD,CAAY30B,SAAS,OAAO9B,QAAS,kBAAC,GAAD,MAAqBktB,cAAe,CAAEn1C,WAAY,SACrF,kBAACg5B,GAAA,EAAD,CAAWxM,OAAO,KAAK8C,UAAQ,IAC9B/1B,GAAQi/B,IAAI,SAAU,OAAQ,SAC7B,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,OAAOgE,SAAUA,GAAUlB,SAAUqJ,EAAW5R,WAAS,IAE5ExtB,GAAQi/B,IAAI,SAAU,OAAQ,gBAC7B,kBAACQ,GAAA,EAAD,CAAWxM,OAAO,cAAcyM,WAAS,EAAC3J,SAAUqJ,EAAW5R,WAAS,IAEzExtB,GAAQi/B,IAAI,SAAU,OAAQ,SAAW,kBAACqlB,GAAA,EAAD,CAAarxB,OAAO,OAAOif,aAAc,EAAGk2B,IAAK,IAC1FpoE,GAAQi/B,IAAI,SAAU,OAAQ,aAAe,kBAACsmB,GAAA,EAAD,CAActyB,OAAO,aAClEjzB,GAAQi/B,IAAI,SAAU,OAAQ,6BAC7B,kBAAC,GAAD,CACE1G,QAASA,GACTD,KAAK,yBACLrF,OAAO,2BACPgE,SAAUA,GACVzJ,WAAS,IAGZxtB,GAAQi/B,IAAI,SAAU,OAAQ,mBAC7B,kBAACY,GAAA,EAAD,CACEjN,MAAM,mDACNK,OAAO,oBACP2M,UAAU,eACVpS,WAAS,EACT1mB,KAAM,CAAEf,MAAO,OAAQgB,MAAO,QAE9B,kBAAC+3B,GAAA,EAAD,CAAwBlG,WAAW,cCvE3ChL,GAAYC,cAAW,SAAChC,GAAD,MAAY,CACvCyyB,IAAK,CACHpxC,OAAQ,QAINo7D,GAAa,SAACr5C,GAAD,OACjB,kBAAC6vB,GAAuB7vB,EACtB,kBAAC,KAAD,CAAagE,OAAO,IAAI+f,UAAQ,MAI9Bu1B,GAAW,SAAC,GAA+B,IAA7BhpB,EAA4B,EAA5BA,YAAgBtwB,EAAY,gCACxCG,EAAUxB,KACV4B,EAAYC,eACZ8e,EAAWuI,GAAetnB,EAAU,aAAD,OAAcP,EAAM/0B,SAApB,SAAqC,CAAEswC,YAAa,IAAM+U,EAAa,CAC9G/vB,cAEIuwB,EAAmBxuB,IAAM0K,OAAO,MAEtC,OACE,kBAAC,KAAD,eAAM1lB,QAAS,kBAAC,GAAD,CAAYslC,QAASkE,IAAsBxR,SAAUA,GAActf,GAChF,kBAAC6V,GAAA,EAAD,CAAUua,SAAS,OAAOjwB,QAAS,CAAEkvB,IAAKlvB,EAAQkvB,MAC/Ct+C,GAAQi/B,IAAI,UAAW,OAAQ,SAAW,kBAAC,KAAD,CAAWhM,OAAO,SAC5DjzB,GAAQi/B,IAAI,UAAW,OAAQ,gBAAkB,kBAAC,KAAD,CAAWhM,OAAO,gBACnEjzB,GAAQi/B,IAAI,SAAU,OAAQ,aAAe,kBAACghB,GAAA,EAAD,CAAchtB,OAAO,aAClEjzB,GAAQi/B,IAAI,SAAU,OAAQ,SAAW,kBAACipC,GAAA,EAAD,CAAaj1C,OAAO,YAMtEs1C,GAAS72C,aAAe,CACtB7qB,QAAS,IACTC,KAAM,CAAEf,MAAO,OAAQgB,MAAO,OAC9B85C,mBAAmB,EACnBtB,YAAa,CACXl7C,IAAI,EACJjO,MAAM,EACNuhB,aAAa,EACbs0B,WAAY,SAIDs8B,UC9CTC,GAAWC,KCwDjB1jC,IAAWrT,aAAe,CACxBg3C,mBAAoB,CAAC,GAAI,GAAI,GAAI,MAGnC,IA8KeC,GA9KH,WA2BV,OACE,kBAACC,EAAA,EAAD,CACE/8C,MAAOA,GACPrO,OAAQitB,GACRo+B,UAAWC,GACX3nE,aAAcA,GACdoB,aAAcA,GACdopB,aAAcA,GACdo9C,UAAWC,GACXC,eAAgB,CAAE1nE,QAAM8yB,eAAawX,aACrCq9B,aAAcA,KAEb,SAACj3C,GAAD,MAAiB,CAEhB,kBAACk3C,EAAA,EAAD,CACE/yE,KAAK,OACLk4B,KAAM0gC,GACNhO,KAAM/uB,EAAYjyB,QAAQi/B,IAAI,UAAW,QAAUqgB,GAAW,KAC9D8pB,KAAMn3C,EAAYjyB,QAAQi/B,IAAI,SAAU,QAAU4vB,GAAW,KAC7D9rD,OAAQkvB,EAAYjyB,QAAQi/B,IAAI,SAAU,QAAU6lB,GAAa,KACjEukB,KAAMp3C,EAAYjyB,QAAQi/B,IAAI,SAAU,QAAU2nB,GAAW,KAC7D7vD,QAAS,CAAEqyC,UAAW,eAExB,kBAAC+/B,EAAA,EAAD,CACE/yE,KAAK,qBACLk4B,KAAMo3C,GACN1kB,KAAM/uB,EAAYjyB,QAAQi/B,IAAI,UAAW,UAAYugC,GAAuB,KAC5E4J,KAAMn3C,EAAYjyB,QAAQi/B,IAAI,SAAU,UAAYwmC,GAAuB,KAC3E4D,KAAMp3C,EAAYjyB,QAAQi/B,IAAI,SAAU,UAAY0jC,GAAuB,KAC3E5/D,OAAQkvB,EAAYjyB,QAAQi/B,IAAI,SAAU,UAAYqjC,GAAyB,KAC/EvrE,QAAS,CAAEqyC,UAAW,eAExB,kBAAC+/B,EAAA,EAAD,CACE/yE,KAAK,OACLk4B,KAAM+iC,GACNrQ,KAAM/uB,EAAYjyB,QAAQi/B,IAAI,UAAW,QAAU4wB,GAAW,KAC9DuZ,KAAMn3C,EAAYjyB,QAAQi/B,IAAI,SAAU,QAAU+xB,GAAW,KAC7DjuD,OAAQkvB,EAAYjyB,QAAQi/B,IAAI,SAAU,QAAUkxB,GAAa,KACjEkZ,KAAMp3C,EAAYjyB,QAAQi/B,IAAI,SAAU,QAAU6xB,GAAW,KAC7D/5D,QAAS,CAAEqyC,UAAW,YAExB,kBAAC+/B,EAAA,EAAD,CACE/yE,KAAK,eACLk4B,KAAM05C,GACNhnB,KAAM/uB,EAAYjyB,QAAQi/B,IAAI,UAAW,eAAiB8oC,GAAmB,KAC7EqB,KAAMn3C,EAAYjyB,QAAQi/B,IAAI,SAAU,eAAiBwoC,GAAmB,KAC5E1kE,OAAQkvB,EAAYjyB,QAAQi/B,IAAI,SAAU,eAAiB2oC,GAAqB,KAChFyB,KAAMp3C,EAAYjyB,QAAQi/B,IAAI,SAAU,eAAiB6oC,GAAmB,KAC5E/wE,QAAS,CAAEqyC,UAAW,YAExB,kBAAC+/B,EAAA,EAAD,CACE/yE,KAAK,SACLk4B,KAAMw3C,GACN9kB,KAAM/uB,EAAYjyB,QAAQi/B,IAAI,UAAW,YAAc2mC,GAAe,KACtEwD,KAAMn3C,EAAYjyB,QAAQi/B,IAAI,SAAU,YAAc4mC,GAAe,KACrE9uE,QAAS,CAAEqyC,UAAW,YAExB,kBAAC+/B,EAAA,EAAD,CACE/yE,KAAK,OACLk4B,KAAMojC,GACN1Q,KAAM/uB,EAAYjyB,QAAQi/B,IAAI,UAAW,QAAUuyB,GAAW,KAC9D4X,KAAMn3C,EAAYjyB,QAAQi/B,IAAI,SAAU,QAAUwyB,GAAW,KAC7D16D,QAAS,CAAEqyC,UAAW,iBAExB,kBAAC+/B,EAAA,EAAD,CACE/yE,KAAK,yBACLk4B,KAAMqjC,GACN3Q,KAAM/uB,EAAYjyB,QAAQi/B,IAAI,UAAW,QAAUuyB,GAAW,KAC9D4X,KAAMn3C,EAAYjyB,QAAQi/B,IAAI,SAAU,QAAUwyB,GAAW,KAC7D16D,QAAS,CAAEqyC,UAAW,iBAExB,kBAAC+/B,EAAA,EAAD,CACE/yE,KAAK,SACL4qD,KAAM/uB,EAAYjyB,QAAQi/B,IAAI,UAAW,WAAa+mC,GACtDqD,KAAMp3C,EAAYjyB,QAAQi/B,IAAI,SAAU,WAAainC,GACrDkD,KAAMn3C,EAAYjyB,QAAQi/B,IAAI,SAAU,WAAamnC,GACrDrjE,OAAQkvB,EAAYjyB,QAAQi/B,IAAI,SAAU,WAAaknC,GACvD73C,KAAMw4C,GACN/vE,QAAS,CAAEqyC,UAAW,iBAExB,kBAAC+/B,EAAA,EAAD,CACE/yE,KAAK,mBACL4qD,KAAM/uB,EAAYjyB,QAAQi/B,IAAI,UAAW,qBAAuBmoC,GAChEiC,KAAMp3C,EAAYjyB,QAAQi/B,IAAI,SAAU,qBAAuBioC,GAC/DkC,KAAMn3C,EAAYjyB,QAAQi/B,IAAI,SAAU,qBAAuBgoC,GAC/DlkE,OAAQkvB,EAAYjyB,QAAQi/B,IAAI,SAAU,qBAAuB4iC,GACjEvzC,KAAM+4C,GACNtwE,QAAS,CAAEqyC,UAAW,iBAExB,kBAAC+/B,EAAA,EAAD,CACE/yE,KAAK,kBACL4qD,KAAM/uB,EAAYjyB,QAAQi/B,IAAI,UAAW,oBAAsBynC,GAC/D2C,KAAMp3C,EAAYjyB,QAAQi/B,IAAI,SAAU,oBAAsB0nC,GAC9DyC,KAAMn3C,EAAYjyB,QAAQi/B,IAAI,SAAU,oBAAsB2nC,GAC9D7jE,OAAQkvB,EAAYjyB,QAAQi/B,IAAI,SAAU,oBAAsB4nC,GAChEv4C,KAAMi5C,GACNxwE,QAAS,CAAEqyC,UAAW,iBAExB,kBAAC+/B,EAAA,EAAD,CACE/yE,KAAK,OACL4qD,KAAM/uB,EAAYjyB,QAAQi/B,IAAI,UAAW,SAAWspC,GACpDc,KAAMp3C,EAAYjyB,QAAQi/B,IAAI,SAAU,SAAWopC,GACnDe,KAAMn3C,EAAYjyB,QAAQi/B,IAAI,SAAU,SAAWgpC,GACnDllE,OAAQkvB,EAAYjyB,QAAQi/B,IAAI,SAAU,SAAWkpC,GACrD75C,KAAMk6C,GACNzxE,QAAS,CAAEqyC,UAAW,iBAExB,kBAAC+/B,EAAA,EAAD,CACE/yE,KAAK,oBACLk4B,KAAM04C,GACNhmB,KAAM/uB,EAAYjyB,QAAQi/B,IAAI,UAAW,sBAAwBqnC,GACjE+C,KAAMp3C,EAAYjyB,QAAQi/B,IAAI,SAAU,sBAAwBsnC,GAChE6C,KAAMn3C,EAAYjyB,QAAQi/B,IAAI,SAAU,sBAAwBunC,GAChEzjE,OAAQkvB,EAAYjyB,QAAQi/B,IAAI,SAAU,sBAAwBwnC,GAClE1vE,QAAS,CAAEqyC,UAAW,WAExB,kBAAC+/B,EAAA,EAAD,CACE/yE,KAAK,eAGL4qD,KAAM/uB,EAAYjyB,QAAQi/B,IAAI,UAAW,iBAAmBw+B,GAC5D2L,KAAME,GACNh7C,KAAMi7C,KACNxyE,QAAS,CAAEqyC,UAAW,WAExB,kBAAC+/B,EAAA,EAAD,CACE/yE,KAAK,UACLk4B,KAAM+vC,GACNrd,KAAM/uB,EAAYjyB,QAAQi/B,IAAI,UAAW,WAAa8sB,GAAc,KACpEqd,KAAMn3C,EAAYjyB,QAAQi/B,IAAI,SAAU,WAAak/B,GAAc,KACnEpnE,QAAS,CAAEqyC,UAAW,WAExB,kBAAC+/B,EAAA,EAAD,CACE/yE,KAAK,YACLk4B,KAAM6wC,GACNne,KAAM/uB,EAAYjyB,QAAQi/B,IAAI,UAAW,aAAeigC,GAAgB,KACxEnoE,QAAS,CAAEqyC,UAAW,WAGxB,kBAAC+/B,EAAA,EAAD,CAAU/yE,KAAK,YACf,kBAAC+yE,EAAA,EAAD,CAAU/yE,KAAK,gBACf,kBAAC+yE,EAAA,EAAD,CAAU/yE,KAAK,uBC9NH8O,QACW,cAA7BlM,OAAOiW,SAASu6D,UAEe,UAA7BxwE,OAAOiW,SAASu6D,UAEhBxwE,OAAOiW,SAASu6D,SAAShzE,MAAM,2DCXnCizE,IAASzkC,OAAO,kBAAC,GAAD,MAAS1uC,SAASozE,eAAe,SDoH3C,kBAAmBj8B,WACrBA,UAAUk8B,cAAcC,MAAM/wE,MAAK,SAACgxE,GAClCA,EAAaC,kB","file":"static/js/main.36f800ef.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/LoginBanner.e484e88d.svg\";","module.exports = __webpack_public_path__ + \"static/media/ToirLogo.5cb2b7a5.svg\";","import jsonExport from 'jsonexport/dist';\nimport { downloadCSV } from 'react-admin';\nimport { get } from 'lodash';\nimport imageCompression from 'browser-image-compression';\n\nimport cyrillicToTranslit from '../node_modules/cyrillic-to-translit-js/CyrillicToTranslit.js';\n\nexport const dateTimeOptions = {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n};\n\nexport const getCookie = (name) => {\n let matches = document.cookie.match(\n new RegExp('(?:^|; )' + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + '=([^;]*)'),\n );\n return matches ? decodeURIComponent(matches[1]) : undefined;\n};\n\nexport const setCookie = (name, value, options = {}) => {\n options = {\n path: '/',\n // при необходимости добавьте другие значения по умолчанию\n ...options,\n };\n\n if (options.expires && options.expires.toUTCString) {\n options.expires = options.expires.toUTCString();\n }\n\n let updatedCookie = encodeURIComponent(name) + '=' + encodeURIComponent(value);\n\n for (let optionKey in options) {\n updatedCookie += '; ' + optionKey;\n let optionValue = options[optionKey];\n if (optionValue !== true) {\n updatedCookie += '=' + optionValue;\n }\n }\n\n document.cookie = updatedCookie;\n};\n\nexport const deleteCookie = (name) => {\n setCookie(name, '', {\n 'max-age': -1,\n });\n};\n\nexport const compressImages = (files, maxSizeMB = 1) => {\n const oldFiles = files.filter((file) => !file.rawFile);\n const newFiles = files.filter((file) => file.rawFile);\n const images = newFiles.filter((file) => file.name.search(/\\w*.(jpg|png|jpeg|gif|bmp)/) !== -1);\n const other = newFiles.filter((file) => file.name.search(/\\w*.(jpg|png|jpeg|gif|bmp)/) === -1);\n const blob = files.filter((file) => {\n return file instanceof Blob && file.type.search(/\\w*image\\w*/) !== -1;\n });\n\n if (blob.length) {\n return Promise.all(\n blob.map((image) => {\n return imageCompression(image, {\n maxSizeMB,\n maxIteration: 40,\n }).then((compressed) => {\n return new Blob([compressed], { type: image.type });\n });\n }),\n );\n }\n\n return Promise.all(\n images.map((image) => {\n return imageCompression(image.rawFile, {\n maxSizeMB,\n maxIteration: 40,\n }).then((compressed) => {\n const url = window.URL.createObjectURL(compressed);\n const name = image.name;\n const rawFile = new File([compressed], name, {\n type: image.type,\n });\n rawFile.preview = url;\n rawFile.path = name;\n return {\n ...image,\n rawFile,\n url,\n };\n });\n }),\n )\n .then((result) => {\n return [...oldFiles, ...other, ...result];\n })\n .catch((error) => {\n console.log(error);\n return files;\n });\n};\n\nexport const prepareFileName = (fileName) => {\n const filenameRegexp = /^([\\s\\S]+?).([\\w\\d]+?)$/;\n const clearRegexp = /[^+\\w\\d\\-]/gi;\n const match = fileName.match(filenameRegexp);\n if (!match) return match;\n const [result, name, ext] = match;\n const transformName = cyrillicToTranslit().transform(name).replace(clearRegexp, '').substring(0, 170);\n return `${transformName}.${ext}`;\n};\n\nexport const translateJsonKeys = (records, resource, convertTable) => {\n let result = {};\n if (!records) {\n return null;\n }\n Object.keys(records).forEach((key) => {\n let newKey = key.replace('.id', '');\n const value = get(convertTable, resource + '.' + key);\n if (!value) {\n return;\n }\n if (records[key] instanceof Array) {\n newKey = newKey.replace('Ids', '');\n if (!result.hasOwnProperty(get(convertTable, resource + '.' + newKey))) {\n result[get(convertTable, resource + '.' + newKey)] = records[key].map((value) => {\n if (typeof value === 'object') {\n return translateJsonKeys(value, resource, convertTable);\n } else return value;\n });\n }\n } else if (typeof records[key] === 'object') {\n result[get(convertTable, resource + '.' + newKey)] = translateJsonKeys(records[key], resource, convertTable);\n } else if (typeof records[key] === 'string') {\n result[get(convertTable, resource + '.' + newKey)] =\n get(convertTable, resource + '.' + newKey + 's.' + records[key]) || records[key];\n } else if (typeof records[key] === 'boolean') {\n result[get(convertTable, resource + '.' + newKey)] = records[key] ? 'Да' : 'Нет';\n } else {\n result[get(convertTable, resource + '.' + newKey)] = records[key];\n }\n });\n return result;\n};\n\nexport const converter = (convertTable) => (records, fetchRelatedRecords, resource) =>\n records.map((record) => translateJsonKeys(record, resource, convertTable));\n\nexport const exporter =\n (title, converter, options = {}) =>\n (records, fetchRelatedRecords, proxy, resource, ...props) => {\n const BOM = '\\uFEFF';\n let data;\n if (typeof converter === 'function') {\n data = converter(records, fetchRelatedRecords, resource, ...props);\n } else {\n data = records;\n }\n jsonExport(\n data,\n {\n rowDelimiter: ';',\n // headers: headers,\n ...options,\n },\n (err, csv) => {\n downloadCSV(BOM + csv, title);\n },\n );\n };\n","// load .env\nrequire('dotenv').config();\n\nconst global_env = process.env.NODE_ENV === 'development' ? process.env : window.ENV;\n\n// App names\nexport const VERSION_APP = '0.4.0';\nexport const NAME_APP_FOR_CASL = 'TOIR';\nexport const NAME_APP = global_env.REACT_APP_NAME_APP || 'TOIR-PORTAL';\nexport const AUTH_TOKEN_COOKIE = `${NAME_APP}-AUTH-TOKEN`;\nexport const REFRESH_TOKEN_COOKIE = `${NAME_APP}-REFRESH-TOKEN`;\nexport const LOCAL_STORAGE = `${NAME_APP}-STORAGE`;\n\n// SERVICE URI's\nexport const URI_CORE = global_env.REACT_APP_URI_CORE || 'http://localhost:7550';\nexport const WS_CORE = global_env.REACT_APP_WS_CORE || 'ws://localhost:7550';\nexport const URI_OBJECTS = global_env.REACT_APP_URI_OBJECTS || 'http://localhost:7500';\nexport const URI_CADENCE = global_env.REACT_APP_URI_CADENCE || 'http://10.174.2.133:4000/';\nexport const URI_CASL = global_env.REACT_APP_URI_CASL || 'http://localhost:4555';\nexport const URI_BLOB = global_env.REACT_APP_URI_BLOB || 'http://localhost:4999';\nexport const URI_BLOB_REST = global_env.REACT_APP_URI_BLOB_REST || 'http://localhost:8128';\nexport const URI_AUTH = global_env.REACT_APP_URI_AUTH || 'http://localhost:5000';\nexport const URI_EXCEL_IMPORT = global_env.REACT_APP_URI_EXCEL_IMPORT || 'http://localhost:6109';\n","import { ApolloClient, InMemoryCache, createHttpLink } from '@apollo/client';\nimport { setContext } from '@apollo/client/link/context';\nimport { getAccessToken } from './getAccessToken';\nimport { URI_AUTH } from '../appsettings';\n\nconst httpLink = createHttpLink({\n uri: URI_AUTH,\n});\n\nconst authLink = setContext(async (_, { headers }) => {\n const token = await getAccessToken();\n\n return {\n headers: {\n ...headers,\n authorization: token ? `Bearer ${token}` : '',\n },\n };\n});\n\nexport const apolloAuthClient = new ApolloClient({\n link: httpLink,\n cache: new InMemoryCache(),\n});\n\nexport const apolloAuthClientWithAuth = new ApolloClient({\n link: authLink.concat(httpLink),\n cache: new InMemoryCache(),\n});\n","import gql from 'graphql-tag';\nimport { apolloAuthClient } from './apolloAuthClient';\n\nconst REFRESH_TOKEN_MUTATION = gql`\n mutation refresh($refreshToken: String!) {\n refresh(refreshToken: $refreshToken) {\n token\n refreshToken\n }\n }\n`;\n\nexport default (refreshToken) => {\n return apolloAuthClient.mutate({\n mutation: REFRESH_TOKEN_MUTATION,\n variables: { refreshToken },\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import decodeJwt from 'jwt-decode';\nimport { AUTH_TOKEN_COOKIE, REFRESH_TOKEN_COOKIE } from '../appsettings';\nimport { getCookie, setCookie, deleteCookie } from '../utils';\nimport tokenRefresh from './tokenRefresh';\n\nexport const getAccessToken = async () => {\n let authTokenCookie = getCookie(AUTH_TOKEN_COOKIE);\n let refreshTokenCookie = getCookie(REFRESH_TOKEN_COOKIE);\n\n if (tokenExpired(authTokenCookie) && !tokenExpired(refreshTokenCookie, 'refresh')) {\n try {\n const {\n data: {\n refresh: { token, refreshToken },\n },\n } = await tokenRefresh(refreshTokenCookie);\n\n setCookie(AUTH_TOKEN_COOKIE, token);\n setCookie(REFRESH_TOKEN_COOKIE, refreshToken);\n\n authTokenCookie = token;\n } catch (error) {\n deleteCookie(AUTH_TOKEN_COOKIE);\n deleteCookie(REFRESH_TOKEN_COOKIE);\n throw new Error(`${error.message.replace('Error: ', '').replace('GraphQL error: ', '')}`);\n }\n }\n\n return authTokenCookie;\n};\n\nexport const tokenExpired = (token, arg) => {\n if (token) {\n const decodedToken = decodeJwt(token);\n const current_time = Date.now() / 1000;\n const result = decodedToken.exp - 20 < current_time;\n return result;\n } else {\n return true;\n }\n};\n","import gql from 'graphql-tag';\nimport { apolloAuthClient } from './apolloAuthClient';\n\nconst LOGIN_MUTATION = gql`\n mutation login($login: String!, $password: String!) {\n login(login: $login, password: $password) {\n token\n refreshToken\n user {\n id\n email\n phone\n name\n role\n }\n }\n }\n`;\n\nexport default (args) => {\n return apolloAuthClient.mutate({\n mutation: LOGIN_MUTATION,\n variables: { ...args },\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import { ApolloClient, InMemoryCache, createHttpLink, split } from '@apollo/client';\nimport { WebSocketLink } from '@apollo/client/link/ws';\nimport { setContext } from '@apollo/client/link/context';\nimport { getMainDefinition } from '@apollo/client/utilities';\nimport { getAccessToken } from '../../authPrivider/getAccessToken';\nimport { URI_CORE, WS_CORE } from '../../appsettings';\n\nconst httpLink = createHttpLink({\n uri: URI_CORE,\n});\n\nconst authLink = setContext(async (_, { headers }) => {\n const token = await getAccessToken();\n\n return {\n headers: {\n ...headers,\n authorization: token ? `Bearer ${token}` : '',\n },\n };\n});\n\nconst wsLink = new WebSocketLink({\n uri: WS_CORE,\n options: {\n lazy: true,\n reconnect: true,\n reconnectionAttempts: 3,\n connectionParams: async () => {\n const token = await getAccessToken();\n\n return {\n authorization: token ? `Bearer ${token}` : '',\n };\n },\n },\n});\n\nconst link = split(\n ({ query }) => {\n const { kind, operation } = getMainDefinition(query);\n return kind === 'OperationDefinition' && operation === 'subscription';\n },\n wsLink,\n authLink.concat(httpLink),\n);\n\nexport default new ApolloClient({\n link,\n cache: new InMemoryCache(),\n});\n","import gql from 'graphql-tag';\nimport apolloCoreClient from './apolloCoreClient';\n\nconst LOGIN_USER_MUTATION = gql`\n mutation loginUser(\n $id: ID!\n $name: String!\n $description: String\n $email: String\n $phone: String!\n $role: UserRole!\n ) {\n loginUser(auth: $id, name: $name, description: $description, email: $email, phone: $phone, role: $role) {\n id\n auth\n name\n email\n phone\n role\n regions\n }\n }\n`;\n\nexport default (args) => {\n return apolloCoreClient.mutate({\n mutation: LOGIN_USER_MUTATION,\n variables: { ...args },\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import { Ability } from '@casl/ability';\nimport { rulesToFields as abilityRulesToFields } from '@casl/ability/extra';\nimport { createContext } from 'react';\nimport { createContextualCan } from '@casl/react';\n\nexport const AbilityContext = createContext();\n\nexport const ability = new Ability([]);\n\nexport const rulesToFields = (action, subject) => abilityRulesToFields(ability, action, subject);\n\nexport const defineAbilityFor = function (rules) {\n rules\n .filter((r) => r.conditions)\n .forEach((r) => {\n for (let key in r.conditions) {\n if (r.conditions[key] === 'undefined') {\n r.conditions[key] = undefined;\n }\n }\n });\n\n return rules;\n};\n\nexport const abilitySubjectConditions = (resource, conditions) => ({ constructor: { name: resource }, ...conditions });\n\nexport const Can = createContextualCan(AbilityContext.Consumer);\n","import { ApolloClient, InMemoryCache, createHttpLink } from '@apollo/client';\nimport { setContext } from '@apollo/client/link/context';\nimport { getAccessToken } from '../authPrivider/getAccessToken';\nimport { NAME_APP_FOR_CASL, URI_CASL } from '../appsettings';\n\nconst httpLink = createHttpLink({\n uri: URI_CASL,\n});\n\nconst authLink = setContext(async (_, { headers }) => {\n const token = await getAccessToken();\n\n return {\n headers: {\n ...headers,\n authorization: token ? `Bearer ${token}` : '',\n appName: NAME_APP_FOR_CASL,\n },\n };\n});\n\nconst defaultOptions = {\n watchQuery: {\n fetchPolicy: 'network-only',\n errorPolicy: 'ignore',\n },\n query: {\n fetchPolicy: 'network-only',\n errorPolicy: 'all',\n },\n};\n\nexport default new ApolloClient({\n link: authLink.concat(httpLink),\n cache: new InMemoryCache(),\n defaultOptions: defaultOptions,\n});\n","import gql from 'graphql-tag';\nimport apolloCaslClient from './apolloCaslClient';\n\nconst GET_ABILITY_RULES = gql`\n query getAbility {\n rules: getAbility {\n actions\n subject\n conditions\n fields\n inverted\n reason\n }\n }\n`;\n\nexport default () => {\n return apolloCaslClient.query({\n query: GET_ABILITY_RULES,\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import decodeJwt from 'jwt-decode';\nimport { getCookie, setCookie, deleteCookie } from '../utils';\nimport { AUTH_TOKEN_COOKIE, REFRESH_TOKEN_COOKIE } from '../appsettings';\nimport { tokenExpired } from './getAccessToken';\nimport login from './login';\nimport loginCoreUser from '../dataProvider/Core/loginCoreUser';\nimport { ability, defineAbilityFor } from '../abilityProvider';\nimport getAbilityRules from '../abilityProvider/getAbilityRules';\n\nexport const authProvider = {\n login: async ({ username, password }) => {\n try {\n const {\n data: {\n login: { token, refreshToken, user },\n },\n } = await login({ login: username, password: password });\n setCookie(AUTH_TOKEN_COOKIE, token);\n setCookie(REFRESH_TOKEN_COOKIE, refreshToken);\n\n await loginCoreUser(user);\n\n const {\n data: { rules },\n } = await getAbilityRules();\n if (!rules || !rules.length) {\n throw new Error('permissions_error');\n }\n ability.update([]);\n ability.update(defineAbilityFor(rules));\n\n return Promise.resolve();\n } catch (error) {\n deleteCookie(AUTH_TOKEN_COOKIE);\n deleteCookie(REFRESH_TOKEN_COOKIE);\n //return Promise.reject('Unknown method')\n throw new Error(`ra.auth.${error.message.replace('Error: ', '').replace('GraphQL error: ', '')}`);\n }\n },\n logout: (params) => {\n deleteCookie(AUTH_TOKEN_COOKIE);\n deleteCookie(REFRESH_TOKEN_COOKIE);\n return Promise.resolve();\n },\n checkError: (params) => {\n const status = params.status;\n if (status === 401 || status === 403) {\n deleteCookie(AUTH_TOKEN_COOKIE);\n deleteCookie(REFRESH_TOKEN_COOKIE);\n return Promise.reject();\n }\n return Promise.resolve();\n },\n checkAuth: (params) => {\n return getCookie(AUTH_TOKEN_COOKIE) && !tokenExpired(getCookie(REFRESH_TOKEN_COOKIE))\n ? Promise.resolve()\n : Promise.reject();\n },\n getPermissions: async (params) => {\n const token = getCookie(AUTH_TOKEN_COOKIE);\n const decodedToken = decodeJwt(token);\n const role = decodedToken.role;\n\n try {\n const {\n data: { rules },\n } = await getAbilityRules();\n\n if (!rules || !rules.length) Promise.reject('Permissions error');\n\n ability.update([]);\n ability.update(defineAbilityFor(rules));\n\n return Promise.resolve({ ability, role });\n } catch (error) {\n return Promise.reject(error);\n }\n },\n};\n","const findDataProvider = (dataProviders, resource) => {\n const findDataProvider = dataProviders.find((dataProvider) => dataProvider.knownResources.includes(resource));\n if (!findDataProvider) throw new Error('Provider is not loaded');\n return findDataProvider;\n};\n\nconst buildDataProviderFactory = (dataProviders = []) => {\n return {\n getList: (resource, params) => findDataProvider(dataProviders, resource).getList(resource, params),\n getOne: (resource, params) => findDataProvider(dataProviders, resource).getOne(resource, params),\n getMany: (resource, params) => findDataProvider(dataProviders, resource).getMany(resource, params),\n getManyReference: (resource, params) =>\n findDataProvider(dataProviders, resource).getManyReference(resource, params),\n create: (resource, params) => findDataProvider(dataProviders, resource).create(resource, params),\n update: (resource, params) => findDataProvider(dataProviders, resource).update(resource, params),\n updateMany: (resource, params) => findDataProvider(dataProviders, resource).updateMany(resource, params),\n delete: (resource, params) => findDataProvider(dataProviders, resource).delete(resource, params),\n deleteMany: (resource, params) => findDataProvider(dataProviders, resource).deleteMany(resource, params),\n remove: (resource, params) => findDataProvider(dataProviders, resource).remove(resource, params),\n restore: (resource, params) => findDataProvider(dataProviders, resource).restore(resource, params),\n };\n};\n\nexport default buildDataProviderFactory;\n","import buildDataProviderFactory from './buildDataProviderFactory';\n\nexport default buildDataProviderFactory;\n","const buildGraphQLProvider = (options) => {\n const { client, buildQuery, introspection: defaultIntrospection } = options;\n\n const introspection = Object.keys(buildQuery).reduce((acc, resource) => {\n const introspect = buildQuery[resource].introspect;\n\n if (typeof introspect === 'function') {\n return introspect(acc);\n }\n\n return acc;\n }, defaultIntrospection);\n\n return {\n create: async (resource, params) => {\n switch (resource) {\n case 'ConstructionObject': {\n const { mutations, variables, parseResponse, ...otherQueryParams } = await buildQuery[resource]['create'](\n params,\n introspection,\n );\n const { create, pirCreate } = mutations;\n const { createVariables, createPirVariables } = variables;\n const {\n data: {\n data: { item },\n },\n } = await client.mutate({\n mutation: create,\n variables: createVariables,\n ...otherQueryParams,\n });\n createPirVariables.input.id = item.id;\n return client\n .mutate({\n mutation: pirCreate,\n variables: { ...createPirVariables },\n ...otherQueryParams,\n })\n .then((response) => parseResponse(response.data));\n }\n\n default:\n const { mutation, variables, parseResponse, ...otherQueryParams } = buildQuery[resource]['create'](\n params,\n introspection,\n );\n return client\n .mutate({\n mutation,\n variables,\n ...otherQueryParams,\n })\n .then((response) => parseResponse(response.data));\n }\n },\n delete: (resource, params) => {\n const { mutation, variables, parseResponse, ...otherQueryParams } = buildQuery[resource]['delete'](\n params,\n introspection,\n );\n return client\n .mutate({\n mutation,\n variables,\n ...otherQueryParams,\n })\n .then((response) => parseResponse(response.data));\n },\n deleteMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n getList: (resource, params) => {\n switch (resource) {\n case 'ConstructionObject': {\n const { queries, variables, parseResponse, ...otherQueryParams } = buildQuery[resource]['getList'](\n params,\n introspection,\n );\n const { sortService, getListVariables, getIdsVariables, getPirListVariables, getPirIdsVariables } = variables;\n const { getList, getIds, getPirList, getPirIds } = queries;\n const func = async () => {\n switch (sortService) {\n case 'constructionObject': {\n let ids = [];\n if (Object.values(getPirIdsVariables.filter).filter(Boolean).length) {\n ids = (\n await client\n .query({\n query: getPirIds,\n variables: getPirIdsVariables,\n fetchPolicy: 'network-only',\n ...otherQueryParams,\n })\n .then((response) => response)\n ).data.ids;\n }\n ids = [...ids, ...(getListVariables.filter.ids || [])];\n return client\n .query({\n query: getList,\n variables: {\n ...getListVariables,\n filter: {\n ...getListVariables.filter,\n ids: ids.length ? ids : undefined,\n },\n },\n fetchPolicy: 'network-only',\n ...otherQueryParams,\n })\n .then((response) => parseResponse(response.data));\n }\n case 'pirConstructionObject': {\n let ids = [];\n if (Object.values(getIdsVariables.filter).filter(Boolean).length) {\n ids = (\n await client\n .query({\n query: getIds,\n variables: getIdsVariables,\n fetchPolicy: 'network-only',\n ...otherQueryParams,\n })\n .then((response) => response)\n ).data.ids;\n }\n ids = [...ids, ...(getListVariables.filter.ids || [])];\n\n return client\n .query({\n query: getPirList,\n variables: {\n ...getPirListVariables,\n filter: {\n ...getPirListVariables.filter,\n ids: ids.length ? ids : undefined,\n },\n },\n fetchPolicy: 'network-only',\n ...otherQueryParams,\n })\n .then((response) => parseResponse(response.data));\n }\n }\n };\n return func();\n }\n default: {\n const { query, variables, parseResponse, ...otherQueryParams } = buildQuery[resource]['getList'](\n params,\n introspection,\n );\n\n return client\n .query({\n query,\n variables,\n fetchPolicy: 'network-only',\n ...otherQueryParams,\n })\n .then((response) => parseResponse(response.data));\n }\n }\n },\n getMany: (resource, params) => {\n switch (resource) {\n default: {\n const { query, variables, parseResponse, ...otherQueryParams } = buildQuery[resource]['getMany'](\n params,\n introspection,\n );\n return client\n .query({\n query,\n variables,\n fetchPolicy: 'network-only',\n ...otherQueryParams,\n })\n .then((response) => parseResponse(response.data));\n }\n }\n },\n getManyReference: (resource, params) => {\n const { query, variables, parseResponse, ...otherQueryParams } = buildQuery[resource]['getManyReference'](\n params,\n introspection,\n );\n return client\n .query({\n query,\n variables,\n fetchPolicy: 'network-only',\n ...otherQueryParams,\n })\n .then((response) => parseResponse(response.data));\n },\n getOne: (resource, params) => {\n const { query, variables, parseResponse, ...otherQueryParams } = buildQuery[resource]['getOne'](\n params,\n introspection,\n );\n return client\n .query({\n query,\n variables,\n fetchPolicy: 'network-only',\n ...otherQueryParams,\n })\n .then((response) => parseResponse(response.data));\n },\n remove: (resource, params) => {\n const { mutation, variables, parseResponse, ...otherQueryParams } = buildQuery[resource]['remove'](\n params,\n introspection,\n );\n return client\n .mutate({\n mutation,\n variables,\n ...otherQueryParams,\n })\n .then((response) => parseResponse(response.data));\n },\n restore: (resource, params) => {\n const { mutation, variables, parseResponse, ...otherQueryParams } = buildQuery[resource]['restore'](\n params,\n introspection,\n );\n return client\n .mutate({\n mutation,\n variables,\n ...otherQueryParams,\n })\n .then((response) => parseResponse(response.data));\n },\n update: async (resource, params) => {\n switch (resource) {\n case 'ConstructionObject': {\n const { mutations, variables, parseResponse, ...otherQueryParams } = await buildQuery[resource]['update'](\n params,\n introspection,\n );\n const { update, pirUpdate } = mutations;\n const { updateVariables, updatePirVariables } = variables;\n await client.mutate({\n mutation: update,\n variables: updateVariables,\n ...otherQueryParams,\n });\n\n return client\n .mutate({\n mutation: pirUpdate,\n variables: updatePirVariables,\n ...otherQueryParams,\n })\n .then((response) => parseResponse(response.data));\n }\n\n default:\n const { mutation, variables, parseResponse, ...otherQueryParams } = buildQuery[resource]['update'](\n params,\n introspection,\n );\n return client\n .mutate({\n mutation,\n variables,\n ...otherQueryParams,\n })\n .then((response) => parseResponse(response.data));\n }\n },\n updateMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n knownResources: Object.keys(buildQuery),\n };\n};\n\nexport default buildGraphQLProvider;\n","import buildGraphQLProvider from './buildGraphQLProvider';\nimport buildVariables from './buildVariables';\nimport getResponseParser from './getResponseParser';\n\nexport { buildVariables, getResponseParser };\n\nexport default buildGraphQLProvider;\n","import keyBy from 'lodash/keyBy';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\nexport const LIST = 'LIST';\nexport const NESTED_LIST = 'NESTED_LIST';\nexport const SCALAR = 'SCALAR';\nexport const INPUT_OBJECT = 'INPUT_OBJECT';\nexport const NON_NULL = 'NON_NULL';\nexport const ENUM = 'ENUM';\n\nexport const buildIntrospectionSchema = (schema) => {\n return {\n ...schema,\n typesObject: keyBy(schema.types, 'name'),\n };\n};\n\nexport const setTypeInputFieldKind = (introspection, type, inputField, kind) => {\n const inputFields = get(introspection, ['schema', 'typesObject', type, 'inputFields']);\n if (!inputFields) throw new Error(`InputFields on ${type} type not found.`);\n const field = inputFields.find((f) => f.name === inputField);\n if (!field) throw new Error(`InputField ${inputField} on ${type} type not found.`);\n set(field, ['type', 'kind'], kind);\n\n return introspection;\n};\n\nexport default buildIntrospectionSchema;\n","import { ApolloClient, InMemoryCache, createHttpLink } from '@apollo/client';\nimport { setContext } from '@apollo/client/link/context';\nimport { getAccessToken } from '../../authPrivider/getAccessToken';\nimport { URI_OBJECTS } from '../../appsettings';\n\nconst httpLink = createHttpLink({\n uri: URI_OBJECTS,\n});\n\nconst authLink = setContext(async (_, { headers }) => {\n const token = await getAccessToken();\n\n return {\n headers: {\n ...headers,\n authorization: token ? `Bearer ${token}` : '',\n },\n };\n});\n\nexport default new ApolloClient({\n link: authLink.concat(httpLink),\n cache: new InMemoryCache(),\n});\n","import get from 'lodash/get';\nimport set from 'lodash/set';\nimport omit from 'lodash/omit';\nimport { LIST, NESTED_LIST, SCALAR, INPUT_OBJECT, NON_NULL, ENUM } from './buildIntrospectionSchema';\n\n// const buildNestedListVariable = (data, previousData, inputField, introspection) => {\n\n// const arg = get(inputField, ['name'])\n// const kind = get(inputField, ['type', 'kind'])\n// const ofTypeName = get(inputField, ['type', 'ofType', 'ofType', 'name'])\n// const inputFields = get(introspection, ['schema', 'typesObject', ofTypeName, 'inputFields'])\n// if (!inputFields) throw new Error(`InputFields ${ofTypeName}UpdateInput not found`);\n// const variables = getInputFieldsVariables(data, previousData, inputFields)\n\n// return variables;\n// }\n\nconst getTypeKind = (type) => {\n if (!type) throw new Error('Type not found');\n\n const kind = type.kind;\n if (!kind || type.kind === NON_NULL) {\n const ofType = type.ofType;\n return getTypeKind(ofType);\n }\n\n return kind;\n};\n\nconst reduceInputFields = (data, previousData, inputFields, introspection) => {\n const variables = inputFields.reduce((acc, field) => {\n if (!data) return acc;\n\n const arg = field.name;\n const kind = getTypeKind(field.type);\n const resource = get(data, '__typename');\n if (kind === LIST) {\n const ids = get(data, [`${arg}Ids`]);\n const values = get(data, arg);\n\n switch (resource) {\n case 'EquipmentTemplate':\n if (arg === 'equipments')\n return values && Array.isArray(values) ? { ...acc, [arg]: values.map((v) => omit(v, '__typename')) } : acc;\n else return ids === undefined ? acc : { ...acc, [arg]: ids.map((id) => ({ id })) };\n case 'TelemetrySystem':\n if (arg === 'equipments')\n return values && Array.isArray(values) ? { ...acc, [arg]: values.map((v) => omit(v, '__typename')) } : acc;\n else return ids === undefined ? acc : { ...acc, [arg]: ids.map((id) => ({ id })) };\n case 'Test':\n if (arg === 'constructionObjectsTypes' || arg === 'repeatability') return { ...acc, [arg]: data[arg] || [] };\n else return ids === undefined ? acc : { ...acc, [arg]: ids.map((id) => ({ id })) };\n default:\n return ids === undefined ? acc : { ...acc, [arg]: ids.map((id) => ({ id })) };\n }\n }\n\n if (kind === NESTED_LIST) {\n const nestedFieldType = get(field, ['type', 'ofType', 'ofType', 'name']);\n return {\n ...acc,\n [arg]: data[arg]\n .filter((nested) => nested)\n .map((nested) => buildUpdateVariablesOnIntrospection(nested, previousData, nestedFieldType, introspection)),\n };\n }\n\n if (kind === INPUT_OBJECT) {\n const value = get(data, arg);\n const id = get(data, [arg, 'id']);\n const keys = value ? Object.keys(value) : [];\n return id ? { ...acc, [arg]: { id } } : keys.length ? { ...acc, [arg]: value } : acc;\n }\n\n if (kind === SCALAR) {\n const value = get(data, [arg]);\n return value === undefined ? acc : { ...acc, [arg]: value };\n }\n\n if (kind === ENUM) {\n const value = get(data, [arg]);\n return value === undefined ? acc : { ...acc, [arg]: value };\n }\n\n return acc;\n }, {});\n return variables;\n};\n\nconst buildUpdateVariablesOnIntrospection = (data, previousData, type, introspection) => {\n const inputFields = get(introspection, ['schema', 'typesObject', type, 'inputFields']);\n\n if (!inputFields) throw new Error(`InputFields ${type} not found`);\n\n const variables = reduceInputFields(data, previousData, inputFields, introspection);\n\n return variables;\n};\n\nconst buildVariables = {\n create: (params, introspection) => {\n const { data } = params;\n const input = buildUpdateVariablesOnIntrospection(data, undefined, `${data.__typename}CreateInput`, introspection);\n return {\n input,\n };\n },\n delete: (params, introspection) => {\n const { id, previousData } = params;\n\n return {\n where: { id },\n };\n },\n deleteMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n getList: (params, introspection) => {\n const {\n filter,\n pagination: { page, perPage },\n sort: { field, order = 'asc' },\n } = params;\n return {\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n };\n },\n getMany: (params, introspection) => {\n const { ids } = params;\n return {\n filter: {\n ids: ids.map((id) => (typeof id === 'object' ? id.id : id)),\n },\n perPage: ids.length,\n };\n },\n getManyReference: (params, introspection) => {\n const {\n filter,\n pagination: { page, perPage },\n sort: { field, order },\n target,\n id,\n } = params;\n set(filter, target, id);\n return {\n filter,\n sort: [{ [field]: order }],\n page,\n perPage,\n };\n },\n getOne: (params, introspection) => {\n const { id } = params;\n return {\n where: { id },\n };\n },\n remove: (params, introspection) => {\n const { id, previousData } = params;\n\n return {\n where: { id },\n };\n },\n restore: (params, introspection) => {\n const { id, previousData } = params;\n\n return {\n where: { id },\n };\n },\n update: (params, introspection) => {\n const { id, data, previousData } = params;\n\n const input = buildUpdateVariablesOnIntrospection(\n data,\n previousData,\n `${data.__typename}UpdateInput`,\n introspection,\n );\n return {\n where: { id },\n input,\n };\n },\n updateMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n};\n\nexport default buildVariables;\n","// const getTypeKind = (type) => {\n\n// if (!type) throw new Error('Type not found')\n\n// const kind = type.kind\n// if (!kind || type.kind === NON_NULL) {\n// const ofType = type.ofType\n// return getTypeKind(ofType)\n// }\n\n// return kind\n// }\n\n// const reduceInputFields = (data, previousData, inputFields, introspection) => {\n// const variables = inputFields.reduce((acc, field) => {\n\n// const arg = field.name\n// const kind = getTypeKind(field.type)\n\n// if (kind === LIST) {\n// return {\n// ...acc,\n// [arg]: data[`${arg}Ids`].map(id => ({ id })),\n// };\n// }\n\n// if (kind === NESTED_LIST) {\n// const nestedFieldType = get(field, ['type', 'ofType', 'ofType', 'name'])\n// return {\n// ...acc,\n// [arg]: data[arg].map(nested => buildUpdateVariablesOnIntrospection(nested, previousData, nestedFieldType, introspection)),\n// };\n// }\n\n// if (kind === INPUT_OBJECT) {\n// return {\n// ...acc,\n// [arg]: { id: data[`${arg}Id`] }\n// };\n// }\n\n// if (kind === SCALAR) {\n// return {\n// ...acc,\n// [arg]: data[arg]\n// };\n// }\n\n// return acc;\n// }, {});\n\n// return variables;\n\n// }\n\nconst sanitizeResource = (data, introspection) => {\n if (typeof data === 'string') return data;\n return Object.keys(data).reduce((acc, key) => {\n const dataKey = data[key];\n\n if (dataKey === null || dataKey === undefined) {\n return acc;\n }\n\n if (Array.isArray(dataKey)) {\n return {\n ...acc,\n [key]: dataKey.map(sanitizeResource),\n [`${key}Ids`]: dataKey.map((d) => d.id),\n };\n }\n\n if (typeof dataKey === 'object') {\n return {\n ...acc,\n ...(dataKey &&\n dataKey.id && {\n [`${key}.id`]: dataKey.id,\n }),\n [key]: sanitizeResource(dataKey),\n };\n }\n\n return { ...acc, [key]: dataKey };\n }, {});\n};\n\nconst singleParser =\n (introspection) =>\n ({ data, loading, networkStatus }) => {\n const { item, ...other } = data;\n return {\n data: sanitizeResource(item, introspection),\n ...other,\n };\n };\n\nconst listParser =\n (introspection) =>\n ({ data, loading, networkStatus }) => {\n const { items, pageInfo, ...other } = data;\n return {\n data: items.map(sanitizeResource, introspection),\n total: pageInfo.totalItems,\n ...other,\n };\n };\n\nconst manyParser =\n (introspection) =>\n ({ data, loading, networkStatus }) => {\n const { items, pageInfo, ...other } = data;\n return {\n data: items.map(sanitizeResource, introspection),\n ...other,\n };\n };\n\nconst getResponseParser = {\n create: singleParser,\n delete: singleParser,\n deleteMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n getList: listParser,\n getMany: manyParser, // avoids adding a context in tests\n getManyReference: listParser, // avoids adding a context in tests\n getOne: singleParser,\n remove: singleParser,\n restore: singleParser,\n update: singleParser,\n updateMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n};\n\nexport default getResponseParser;\n","import { gql } from '@apollo/client';\n\nexport const REGION_FRAGMENT = gql`\n fragment RegionFragment on Region {\n id\n idFias\n name\n unrestrictedName\n typeShort\n level\n }\n`;\n\nexport const GET_ONE_REGION = gql`\n query getOneRegion($where: RegionWhereUniqueInput!) {\n data: Region(where: $where) {\n item {\n ...RegionFragment\n }\n }\n }\n ${REGION_FRAGMENT}\n`;\n\nexport const GET_LIST_REGIONS = gql`\n query allRegions($filter: RegionFilter, $sort: [RegionSort!], $page: Int, $perPage: Int) {\n data: listRegions(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...RegionFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${REGION_FRAGMENT}\n`;\n\nexport const GET_MANY_REGIONS = gql`\n query allRegions($filter: RegionFilter, $sort: [RegionSort!], $page: Int, $perPage: Int) {\n data: listRegions(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...RegionFragment\n }\n }\n }\n ${REGION_FRAGMENT}\n`;\n\nexport const GET_MANY_REFERENCE_REGIONS = gql`\n query allRegions($filter: RegionFilter, $sort: [RegionSort!], $page: Int, $perPage: Int) {\n data: listRegions(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...RegionFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${REGION_FRAGMENT}\n`;\n\n// export const CREATE_REGION = gql`\n// mutation createRegion($input: RegionCreateInput!) {\n// data: createRegion(input: $input) {\n// item {\n// ...RegionFragment\n// }\n// }\n// }\n// ${REGION_FRAGMENT}\n// `;\n//\n// export const UPDATE_REGION = gql`\n// mutation updateRegion($where: RegionWhereUniqueInput!, $input: RegionUpdateInput!) {\n// data: updateRegion(where: $where, input: $input) {\n// item {\n// ...RegionFragment\n// }\n// }\n// }\n// ${REGION_FRAGMENT}\n// `;\n//\n// export const REMOVE_REGION = gql`\n// mutation removeRegion($where: RegionWhereUniqueInput!) {\n// data: removeRegion(where: $where) {\n// item {\n// ...RegionFragment\n// }\n// }\n// }\n// ${REGION_FRAGMENT}\n// `;\n//\n// export const RESTORE_REGION = gql`\n// mutation restoreRegion($where: RegionWhereUniqueInput!) {\n// data: restoreRegion(where: $where) {\n// item {\n// ...RegionFragment\n// }\n// }\n// }\n// ${REGION_FRAGMENT}\n// `;\n//\n// export const DELETE_REGION = gql`\n// mutation deleteRegion($where: RegionWhereUniqueInput!) {\n// data: deleteRegion(where: $where) {\n// item {\n// ...RegionFragment\n// }\n// }\n// }\n// ${REGION_FRAGMENT}\n// `;\n","import buildDefaultVariables from '../../ra-axi-graphql/buildVariables';\nimport getResponseParser from '../../ra-axi-graphql/getResponseParser';\nimport { GET_ONE_REGION, GET_LIST_REGIONS, GET_MANY_REGIONS, GET_MANY_REFERENCE_REGIONS } from './typeDefs';\n\nconst regionBuildQuery = {\n // create: (params, introspection) => ({\n // mutation: CREATE_REGION,\n // variables: buildDefaultVariables.create(params, introspection),\n // parseResponse: getResponseParser.create(introspection)\n // }),\n // delete: (params, introspection) => ({\n // mutation: DELETE_REGION,\n // variables: buildDefaultVariables.delete(params, introspection),\n // parseResponse: getResponseParser.delete(introspection)\n // }),\n // deleteMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n getList: (params, introspection) => ({\n query: GET_LIST_REGIONS,\n variables: buildDefaultVariables.getList(params, introspection),\n parseResponse: getResponseParser.getList(introspection),\n }),\n getMany: (params, introspection) => ({\n query: GET_MANY_REGIONS,\n variables: buildDefaultVariables.getMany(params, introspection),\n parseResponse: getResponseParser.getMany(introspection),\n }),\n getManyReference: (params, introspection) => ({\n query: GET_MANY_REFERENCE_REGIONS,\n variables: buildDefaultVariables.getManyReference(params, introspection),\n parseResponse: getResponseParser.getManyReference(introspection),\n }),\n getOne: (params, introspection) => ({\n query: GET_ONE_REGION,\n variables: buildDefaultVariables.getOne(params, introspection),\n parseResponse: getResponseParser.getOne(introspection),\n }),\n // remove: (params, introspection) => ({\n // mutation: REMOVE_REGION,\n // variables: buildDefaultVariables.delete(params, introspection),\n // parseResponse: getResponseParser.delete(introspection)\n // }),\n // restore: (params, introspection) => ({\n // mutation: RESTORE_REGION,\n // variables: buildDefaultVariables.delete(params, introspection),\n // parseResponse: getResponseParser.delete(introspection)\n // }),\n // update: (params, introspection) => ({\n // mutation: UPDATE_REGION,\n // variables: buildDefaultVariables.update(params, introspection),\n // parseResponse: getResponseParser.update(introspection)\n // }),\n // updateMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n};\n\nexport default regionBuildQuery;\n","import { gql } from '@apollo/client';\n\nexport const DEFECT_FRAGMENT = gql`\n fragment DefectFragment on Defect {\n id\n name\n description\n }\n`;\n\nexport const GET_ONE_DEFECT = gql`\n query getOneDefect($where: DefectWhereUniqueInput!) {\n data: Defect(where: $where) {\n item {\n ...DefectFragment\n }\n }\n }\n ${DEFECT_FRAGMENT}\n`;\n\nexport const GET_LIST_DEFECTS = gql`\n query allDefects($filter: DefectFilter, $sort: [DefectSort!], $page: Int, $perPage: Int) {\n data: listDefects(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...DefectFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${DEFECT_FRAGMENT}\n`;\n\nexport const GET_MANY_DEFECTS = gql`\n query allDefects($filter: DefectFilter, $sort: [DefectSort!], $page: Int, $perPage: Int) {\n data: listDefects(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...DefectFragment\n }\n }\n }\n ${DEFECT_FRAGMENT}\n`;\n\nexport const GET_MANY_REFERENCE_DEFECTS = gql`\n query allDefects($filter: DefectFilter, $sort: [DefectSort!], $page: Int, $perPage: Int) {\n data: listDefects(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...DefectFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${DEFECT_FRAGMENT}\n`;\n\nexport const CREATE_DEFECT = gql`\n mutation createDefect($input: DefectCreateInput!) {\n data: createDefect(input: $input) {\n item {\n ...DefectFragment\n }\n }\n }\n ${DEFECT_FRAGMENT}\n`;\n\nexport const UPDATE_DEFECT = gql`\n mutation updateDefect($where: DefectWhereUniqueInput!, $input: DefectUpdateInput!) {\n data: updateDefect(where: $where, input: $input) {\n item {\n ...DefectFragment\n }\n }\n }\n ${DEFECT_FRAGMENT}\n`;\n\nexport const REMOVE_DEFECT = gql`\n mutation removeDefect($where: DefectWhereUniqueInput!) {\n data: removeDefect(where: $where) {\n item {\n ...DefectFragment\n }\n }\n }\n ${DEFECT_FRAGMENT}\n`;\n\nexport const RESTORE_DEFECT = gql`\n mutation restoreDefect($where: DefectWhereUniqueInput!) {\n data: restoreDefect(where: $where) {\n item {\n ...DefectFragment\n }\n }\n }\n ${DEFECT_FRAGMENT}\n`;\n\nexport const DELETE_DEFECT = gql`\n mutation deleteDefect($where: DefectWhereUniqueInput!) {\n data: deleteDefect(where: $where) {\n item {\n ...DefectFragment\n }\n }\n }\n ${DEFECT_FRAGMENT}\n`;\n","import buildDefaultVariables from '../../ra-axi-graphql/buildVariables';\nimport getResponseParser from '../../ra-axi-graphql/getResponseParser';\nimport {\n GET_ONE_DEFECT,\n GET_LIST_DEFECTS,\n GET_MANY_DEFECTS,\n GET_MANY_REFERENCE_DEFECTS,\n CREATE_DEFECT,\n UPDATE_DEFECT,\n DELETE_DEFECT,\n REMOVE_DEFECT,\n RESTORE_DEFECT,\n} from './typeDefs';\n\nconst defectBuildQuery = {\n create: (params, introspection) => ({\n mutation: CREATE_DEFECT,\n variables: buildDefaultVariables.create(params, introspection),\n parseResponse: getResponseParser.create(introspection),\n }),\n delete: (params, introspection) => ({\n mutation: DELETE_DEFECT,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n deleteMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n getList: (params, introspection) => ({\n query: GET_LIST_DEFECTS,\n variables: buildDefaultVariables.getList(params, introspection),\n parseResponse: getResponseParser.getList(introspection),\n }),\n getMany: (params, introspection) => ({\n query: GET_MANY_DEFECTS,\n variables: buildDefaultVariables.getMany(params, introspection),\n parseResponse: getResponseParser.getMany(introspection),\n }),\n getManyReference: (params, introspection) => ({\n query: GET_MANY_REFERENCE_DEFECTS,\n variables: buildDefaultVariables.getManyReference(params, introspection),\n parseResponse: getResponseParser.getManyReference(introspection),\n }),\n getOne: (params, introspection) => ({\n query: GET_ONE_DEFECT,\n variables: buildDefaultVariables.getOne(params, introspection),\n parseResponse: getResponseParser.getOne(introspection),\n }),\n remove: (params, introspection) => ({\n mutation: REMOVE_DEFECT,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n restore: (params, introspection) => ({\n mutation: RESTORE_DEFECT,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n update: (params, introspection) => ({\n mutation: UPDATE_DEFECT,\n variables: buildDefaultVariables.update(params, introspection),\n parseResponse: getResponseParser.update(introspection),\n }),\n updateMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n};\n\nexport default defectBuildQuery;\n","import { gql } from '@apollo/client';\n\nexport const EQUIPMENT_CATALOG_FRAGMENT = gql`\n fragment EquipmentCatalogFragment on EquipmentCatalog {\n id\n type\n name\n description\n }\n`;\n\nexport const GET_ONE_EQUIPMENT_CATALOG = gql`\n query getOneEquipmentCatalog($where: EquipmentCatalogWhereUniqueInput!) {\n data: EquipmentCatalog(where: $where) {\n item {\n ...EquipmentCatalogFragment\n }\n }\n }\n ${EQUIPMENT_CATALOG_FRAGMENT}\n`;\n\nexport const GET_LIST_EQUIPMENT_CATALOGS = gql`\n query allEquipmentCatalogs(\n $filter: EquipmentCatalogFilter\n $sort: [EquipmentCatalogSort!]\n $page: Int\n $perPage: Int\n ) {\n data: listEquipmentCatalogs(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...EquipmentCatalogFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${EQUIPMENT_CATALOG_FRAGMENT}\n`;\n\nexport const GET_MANY_EQUIPMENT_CATALOGS = gql`\n query allEquipmentCatalogs(\n $filter: EquipmentCatalogFilter\n $sort: [EquipmentCatalogSort!]\n $page: Int\n $perPage: Int\n ) {\n data: listEquipmentCatalogs(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...EquipmentCatalogFragment\n }\n }\n }\n ${EQUIPMENT_CATALOG_FRAGMENT}\n`;\n\nexport const GET_MANY_REFERENCE_EQUIPMENT_CATALOGS = gql`\n query allEquipmentCatalogs(\n $filter: EquipmentCatalogFilter\n $sort: [EquipmentCatalogSort!]\n $page: Int\n $perPage: Int\n ) {\n data: listEquipmentCatalogs(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...EquipmentCatalogFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${EQUIPMENT_CATALOG_FRAGMENT}\n`;\n\nexport const CREATE_EQUIPMENT_CATALOG = gql`\n mutation createEquipmentCatalog($input: EquipmentCatalogCreateInput!) {\n data: createEquipmentCatalog(input: $input) {\n item {\n ...EquipmentCatalogFragment\n }\n }\n }\n ${EQUIPMENT_CATALOG_FRAGMENT}\n`;\n\nexport const UPDATE_EQUIPMENT_CATALOG = gql`\n mutation updateEquipmentCatalog($where: EquipmentCatalogWhereUniqueInput!, $input: EquipmentCatalogUpdateInput!) {\n data: updateEquipmentCatalog(where: $where, input: $input) {\n item {\n ...EquipmentCatalogFragment\n }\n }\n }\n ${EQUIPMENT_CATALOG_FRAGMENT}\n`;\n\nexport const REMOVE_EQUIPMENT_CATALOG = gql`\n mutation removeEquipmentCatalog($where: EquipmentCatalogWhereUniqueInput!) {\n data: removeEquipmentCatalog(where: $where) {\n item {\n ...EquipmentCatalogFragment\n }\n }\n }\n ${EQUIPMENT_CATALOG_FRAGMENT}\n`;\n\nexport const RESTORE_EQUIPMENT_CATALOG = gql`\n mutation restoreEquipmentCatalog($where: EquipmentCatalogWhereUniqueInput!) {\n data: restoreEquipmentCatalog(where: $where) {\n item {\n ...EquipmentCatalogFragment\n }\n }\n }\n ${EQUIPMENT_CATALOG_FRAGMENT}\n`;\n\nexport const DELETE_EQUIPMENT_CATALOG = gql`\n mutation deleteEquipmentCatalog($where: EquipmentCatalogWhereUniqueInput!) {\n data: deleteEquipmentCatalog(where: $where) {\n item {\n ...EquipmentCatalogFragment\n }\n }\n }\n ${EQUIPMENT_CATALOG_FRAGMENT}\n`;\n","import buildDefaultVariables from '../../ra-axi-graphql/buildVariables';\nimport getResponseParser from '../../ra-axi-graphql/getResponseParser';\nimport {\n GET_ONE_EQUIPMENT_CATALOG,\n GET_LIST_EQUIPMENT_CATALOGS,\n GET_MANY_EQUIPMENT_CATALOGS,\n GET_MANY_REFERENCE_EQUIPMENT_CATALOGS,\n CREATE_EQUIPMENT_CATALOG,\n UPDATE_EQUIPMENT_CATALOG,\n DELETE_EQUIPMENT_CATALOG,\n REMOVE_EQUIPMENT_CATALOG,\n RESTORE_EQUIPMENT_CATALOG,\n} from './typeDefs';\n\nconst equipmentCatalogBuildQuery = {\n create: (params, introspection) => ({\n mutation: CREATE_EQUIPMENT_CATALOG,\n variables: buildDefaultVariables.create(params, introspection),\n parseResponse: getResponseParser.create(introspection),\n }),\n delete: (params, introspection) => ({\n mutation: DELETE_EQUIPMENT_CATALOG,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n deleteMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n getList: (params, introspection) => ({\n query: GET_LIST_EQUIPMENT_CATALOGS,\n variables: buildDefaultVariables.getList(params, introspection),\n parseResponse: getResponseParser.getList(introspection),\n }),\n getMany: (params, introspection) => ({\n query: GET_MANY_EQUIPMENT_CATALOGS,\n variables: buildDefaultVariables.getMany(params, introspection),\n parseResponse: getResponseParser.getMany(introspection),\n }),\n getManyReference: (params, introspection) => ({\n query: GET_MANY_REFERENCE_EQUIPMENT_CATALOGS,\n variables: buildDefaultVariables.getManyReference(params, introspection),\n parseResponse: getResponseParser.getManyReference(introspection),\n }),\n getOne: (params, introspection) => ({\n query: GET_ONE_EQUIPMENT_CATALOG,\n variables: buildDefaultVariables.getOne(params, introspection),\n parseResponse: getResponseParser.getOne(introspection),\n }),\n remove: (params, introspection) => ({\n mutation: REMOVE_EQUIPMENT_CATALOG,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n restore: (params, introspection) => ({\n mutation: RESTORE_EQUIPMENT_CATALOG,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n update: (params, introspection) => ({\n mutation: UPDATE_EQUIPMENT_CATALOG,\n variables: buildDefaultVariables.update(params, introspection),\n parseResponse: getResponseParser.update(introspection),\n }),\n updateMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n};\n\nexport default equipmentCatalogBuildQuery;\n","import { gql } from '@apollo/client';\n\nexport const EMBEDDED_EQUIPMENT_FRAGMENT = gql`\n fragment EmbeddedEquipmentFragment on Equipment {\n id\n name\n description\n count\n factoryNumber\n type\n }\n`;\n\nexport const EMBEDDED_REGION_FRAGMENT = gql`\n fragment EmbeddedRegionFragment on Region {\n id\n name\n unrestrictedName\n }\n`;\n\nexport const EMBEDDED_DEFECT_FRAGMENT = gql`\n fragment EmbeddedDefectFragment on Defect {\n id\n name\n description\n }\n`;\nexport const EMBEDDED_COUNTERPARTY_FRAGMENT = gql`\n fragment EmbeddedCounterpartyFragment on Counterparty {\n id\n name\n defaultDispatcherId\n defaultManagerId\n defaultMacroleaderId\n }\n`;\n\nexport const EMBEDDED_STM_FRAGMENT = gql`\n fragment EmbeddedTelemetrySystemFragment on TelemetrySystem {\n id\n name\n }\n`;\n\nexport const EMBEDDED_FILE_FRAGMENT = gql`\n fragment EmbeddedConstrctionObjectFileFragment on ConstructionObjectFile {\n id\n name\n description\n createdAt\n updatedAt\n deleted\n idBlob\n url\n urlThumbnail\n catalog\n ext\n size\n }\n`;\n\nexport const EMBEDDED_COMMENT_FRAGMENT = gql`\n fragment EmbeddedCommentFragment on Comment {\n id\n body\n authorId\n createdAt\n updatedAt\n edited\n deleted\n deletedAt\n }\n`;\n","import { gql } from '@apollo/client';\nimport { EMBEDDED_EQUIPMENT_FRAGMENT } from '../typeDefs';\n\nexport const TELEMETRY_SYSTEM_FRAGMENT = gql`\n fragment TelemetrySystemFragment on TelemetrySystem {\n id\n name\n description\n equipments {\n ...EmbeddedEquipmentFragment\n }\n }\n ${EMBEDDED_EQUIPMENT_FRAGMENT}\n`;\n\nexport const GET_ONE_TELEMETRY_SYSTEM = gql`\n query getOneTelemetrySystem($where: TelemetrySystemWhereUniqueInput!) {\n data: TelemetrySystem(where: $where) {\n item {\n ...TelemetrySystemFragment\n }\n }\n }\n ${TELEMETRY_SYSTEM_FRAGMENT}\n`;\n\nexport const GET_LIST_TELEMETRY_SYSTEMS = gql`\n query allTelemetrySystems($filter: TelemetrySystemFilter, $sort: [TelemetrySystemSort!], $page: Int, $perPage: Int) {\n data: listTelemetrySystems(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...TelemetrySystemFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${TELEMETRY_SYSTEM_FRAGMENT}\n`;\n\nexport const GET_MANY_TELEMETRY_SYSTEMS = gql`\n query allTelemetrySystems($filter: TelemetrySystemFilter, $sort: [TelemetrySystemSort!], $page: Int, $perPage: Int) {\n data: listTelemetrySystems(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...TelemetrySystemFragment\n }\n }\n }\n ${TELEMETRY_SYSTEM_FRAGMENT}\n`;\n\nexport const GET_MANY_REFERENCE_TELEMETRY_SYSTEMS = gql`\n query allTelemetrySystems($filter: TelemetrySystemFilter, $sort: [TelemetrySystemSort!], $page: Int, $perPage: Int) {\n data: listTelemetrySystems(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...TelemetrySystemFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${TELEMETRY_SYSTEM_FRAGMENT}\n`;\n\nexport const CREATE_TELEMETRY_SYSTEM = gql`\n mutation createTelemetrySystem($input: TelemetrySystemCreateInput!) {\n data: createTelemetrySystem(input: $input) {\n item {\n ...TelemetrySystemFragment\n }\n }\n }\n ${TELEMETRY_SYSTEM_FRAGMENT}\n`;\n\nexport const UPDATE_TELEMETRY_SYSTEM = gql`\n mutation updateTelemetrySystem($where: TelemetrySystemWhereUniqueInput!, $input: TelemetrySystemUpdateInput!) {\n data: updateTelemetrySystem(where: $where, input: $input) {\n item {\n ...TelemetrySystemFragment\n }\n }\n }\n ${TELEMETRY_SYSTEM_FRAGMENT}\n`;\n\nexport const REMOVE_TELEMETRY_SYSTEM = gql`\n mutation removeTelemetrySystem($where: TelemetrySystemWhereUniqueInput!) {\n data: removeTelemetrySystem(where: $where) {\n item {\n ...TelemetrySystemFragment\n }\n }\n }\n ${TELEMETRY_SYSTEM_FRAGMENT}\n`;\n\nexport const RESTORE_TELEMETRY_SYSTEM = gql`\n mutation restoreTelemetrySystem($where: TelemetrySystemWhereUniqueInput!) {\n data: restoreTelemetrySystem(where: $where) {\n item {\n ...TelemetrySystemFragment\n }\n }\n }\n ${TELEMETRY_SYSTEM_FRAGMENT}\n`;\n\nexport const DELETE_TELEMETRY_SYSTEM = gql`\n mutation deleteTelemetrySystem($where: TelemetrySystemWhereUniqueInput!) {\n data: deleteTelemetrySystem(where: $where) {\n item {\n ...TelemetrySystemFragment\n }\n }\n }\n ${TELEMETRY_SYSTEM_FRAGMENT}\n`;\n","import buildDefaultVariables from '../../ra-axi-graphql/buildVariables';\nimport getResponseParser from '../../ra-axi-graphql/getResponseParser';\nimport {\n GET_ONE_TELEMETRY_SYSTEM,\n GET_LIST_TELEMETRY_SYSTEMS,\n GET_MANY_TELEMETRY_SYSTEMS,\n GET_MANY_REFERENCE_TELEMETRY_SYSTEMS,\n CREATE_TELEMETRY_SYSTEM,\n UPDATE_TELEMETRY_SYSTEM,\n DELETE_TELEMETRY_SYSTEM,\n REMOVE_TELEMETRY_SYSTEM,\n RESTORE_TELEMETRY_SYSTEM,\n} from './typeDefs';\n\nconst telemetrySystemBuildQuery = {\n create: (params, introspection) => ({\n mutation: CREATE_TELEMETRY_SYSTEM,\n variables: buildDefaultVariables.create(params, introspection),\n parseResponse: getResponseParser.create(introspection),\n }),\n delete: (params, introspection) => ({\n mutation: DELETE_TELEMETRY_SYSTEM,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n deleteMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n getList: (params, introspection) => ({\n query: GET_LIST_TELEMETRY_SYSTEMS,\n variables: buildDefaultVariables.getList(params, introspection),\n parseResponse: getResponseParser.getList(introspection),\n }),\n getMany: (params, introspection) => ({\n query: GET_MANY_TELEMETRY_SYSTEMS,\n variables: buildDefaultVariables.getMany(params, introspection),\n parseResponse: getResponseParser.getMany(introspection),\n }),\n getManyReference: (params, introspection) => ({\n query: GET_MANY_REFERENCE_TELEMETRY_SYSTEMS,\n variables: buildDefaultVariables.getManyReference(params, introspection),\n parseResponse: getResponseParser.getManyReference(introspection),\n }),\n getOne: (params, introspection) => ({\n query: GET_ONE_TELEMETRY_SYSTEM,\n variables: buildDefaultVariables.getOne(params, introspection),\n parseResponse: getResponseParser.getOne(introspection),\n }),\n remove: (params, introspection) => ({\n mutation: REMOVE_TELEMETRY_SYSTEM,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n restore: (params, introspection) => ({\n mutation: RESTORE_TELEMETRY_SYSTEM,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n update: (params, introspection) => ({\n mutation: UPDATE_TELEMETRY_SYSTEM,\n variables: buildDefaultVariables.update(params, introspection),\n parseResponse: getResponseParser.update(introspection),\n }),\n updateMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n};\n\nexport default telemetrySystemBuildQuery;\n","import { gql } from '@apollo/client';\nimport { EMBEDDED_EQUIPMENT_FRAGMENT, EMBEDDED_REGION_FRAGMENT } from '../typeDefs';\n\nexport const EQUIPMENT_TEMPLATE_FRAGMENT = gql`\n fragment EquipmentTemplateFragment on EquipmentTemplate {\n id\n name\n description\n equipments {\n ...EmbeddedEquipmentFragment\n }\n region {\n ...EmbeddedRegionFragment\n }\n }\n ${EMBEDDED_EQUIPMENT_FRAGMENT}\n ${EMBEDDED_REGION_FRAGMENT}\n`;\n\nexport const GET_ONE_EQUIPMENT_TEMPLATE = gql`\n query getOneEquipmentTemplate($where: EquipmentTemplateWhereUniqueInput!) {\n data: EquipmentTemplate(where: $where) {\n item {\n ...EquipmentTemplateFragment\n }\n }\n }\n ${EQUIPMENT_TEMPLATE_FRAGMENT}\n`;\n\nexport const GET_LIST_EQUIPMENT_TEMPLATES = gql`\n query allEquipmentTemplates(\n $filter: EquipmentTemplateFilter\n $sort: [EquipmentTemplateSort!]\n $page: Int\n $perPage: Int\n ) {\n data: listEquipmentTemplates(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...EquipmentTemplateFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${EQUIPMENT_TEMPLATE_FRAGMENT}\n`;\n\nexport const GET_MANY_EQUIPMENT_TEMPLATES = gql`\n query allEquipmentTemplates(\n $filter: EquipmentTemplateFilter\n $sort: [EquipmentTemplateSort!]\n $page: Int\n $perPage: Int\n ) {\n data: listEquipmentTemplates(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...EquipmentTemplateFragment\n }\n }\n }\n ${EQUIPMENT_TEMPLATE_FRAGMENT}\n`;\n\nexport const GET_MANY_REFERENCE_EQUIPMENT_TEMPLATES = gql`\n query allEquipmentTemplates(\n $filter: EquipmentTemplateFilter\n $sort: [EquipmentTemplateSort!]\n $page: Int\n $perPage: Int\n ) {\n data: listEquipmentTemplates(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...EquipmentTemplateFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${EQUIPMENT_TEMPLATE_FRAGMENT}\n`;\n\nexport const CREATE_EQUIPMENT_TEMPLATE = gql`\n mutation createEquipmentTemplate($input: EquipmentTemplateCreateInput!) {\n data: createEquipmentTemplate(input: $input) {\n item {\n ...EquipmentTemplateFragment\n }\n }\n }\n ${EQUIPMENT_TEMPLATE_FRAGMENT}\n`;\n\nexport const UPDATE_EQUIPMENT_TEMPLATE = gql`\n mutation updateEquipmentTemplate($where: EquipmentTemplateWhereUniqueInput!, $input: EquipmentTemplateUpdateInput!) {\n data: updateEquipmentTemplate(where: $where, input: $input) {\n item {\n ...EquipmentTemplateFragment\n }\n }\n }\n ${EQUIPMENT_TEMPLATE_FRAGMENT}\n`;\n\nexport const REMOVE_EQUIPMENT_TEMPLATE = gql`\n mutation removeEquipmentTemplate($where: EquipmentTemplateWhereUniqueInput!) {\n data: removeEquipmentTemplate(where: $where) {\n item {\n ...EquipmentTemplateFragment\n }\n }\n }\n ${EQUIPMENT_TEMPLATE_FRAGMENT}\n`;\n\nexport const RESTORE_EQUIPMENT_TEMPLATE = gql`\n mutation restoreEquipmentTemplate($where: EquipmentTemplateWhereUniqueInput!) {\n data: restoreEquipmentTemplate(where: $where) {\n item {\n ...EquipmentTemplateFragment\n }\n }\n }\n ${EQUIPMENT_TEMPLATE_FRAGMENT}\n`;\n\nexport const DELETE_EQUIPMENT_TEMPLATE = gql`\n mutation deleteEquipmentTemplate($where: EquipmentTemplateWhereUniqueInput!) {\n data: deleteEquipmentTemplate(where: $where) {\n item {\n ...EquipmentTemplateFragment\n }\n }\n }\n ${EQUIPMENT_TEMPLATE_FRAGMENT}\n`;\n","import buildDefaultVariables from '../../ra-axi-graphql/buildVariables';\nimport getResponseParser from '../../ra-axi-graphql/getResponseParser';\nimport {\n GET_ONE_EQUIPMENT_TEMPLATE,\n GET_LIST_EQUIPMENT_TEMPLATES,\n GET_MANY_EQUIPMENT_TEMPLATES,\n GET_MANY_REFERENCE_EQUIPMENT_TEMPLATES,\n CREATE_EQUIPMENT_TEMPLATE,\n UPDATE_EQUIPMENT_TEMPLATE,\n DELETE_EQUIPMENT_TEMPLATE,\n REMOVE_EQUIPMENT_TEMPLATE,\n RESTORE_EQUIPMENT_TEMPLATE,\n} from './typeDefs';\n\nconst equipmentTemplateBuildQuery = {\n create: (params, introspection) => ({\n mutation: CREATE_EQUIPMENT_TEMPLATE,\n variables: buildDefaultVariables.create(params, introspection),\n parseResponse: getResponseParser.create(introspection),\n }),\n delete: (params, introspection) => ({\n mutation: DELETE_EQUIPMENT_TEMPLATE,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n deleteMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n getList: (params, introspection) => ({\n query: GET_LIST_EQUIPMENT_TEMPLATES,\n variables: buildDefaultVariables.getList(params, introspection),\n parseResponse: getResponseParser.getList(introspection),\n }),\n getMany: (params, introspection) => ({\n query: GET_MANY_EQUIPMENT_TEMPLATES,\n variables: buildDefaultVariables.getMany(params, introspection),\n parseResponse: getResponseParser.getMany(introspection),\n }),\n getManyReference: (params, introspection) => ({\n query: GET_MANY_REFERENCE_EQUIPMENT_TEMPLATES,\n variables: buildDefaultVariables.getManyReference(params, introspection),\n parseResponse: getResponseParser.getManyReference(introspection),\n }),\n getOne: (params, introspection) => ({\n query: GET_ONE_EQUIPMENT_TEMPLATE,\n variables: buildDefaultVariables.getOne(params, introspection),\n parseResponse: getResponseParser.getOne(introspection),\n }),\n remove: (params, introspection) => ({\n mutation: REMOVE_EQUIPMENT_TEMPLATE,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n restore: (params, introspection) => ({\n mutation: RESTORE_EQUIPMENT_TEMPLATE,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n update: (params, introspection) => ({\n mutation: UPDATE_EQUIPMENT_TEMPLATE,\n variables: buildDefaultVariables.update(params, introspection),\n parseResponse: getResponseParser.update(introspection),\n }),\n updateMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n};\n\nexport default equipmentTemplateBuildQuery;\n","import { gql } from '@apollo/client';\n\nexport const TEST_FRAGMENT = gql`\n fragment TestFragment on Test {\n id\n name\n description\n mark\n required\n constructionObjectsTypes\n counterparties {\n id\n name\n }\n }\n`;\n\nexport const GET_ONE_TEST = gql`\n query getOneTest($where: TestWhereUniqueInput!) {\n data: Test(where: $where) {\n item {\n ...TestFragment\n }\n }\n }\n ${TEST_FRAGMENT}\n`;\n\nexport const GET_LIST_TESTS = gql`\n query allTests($filter: TestFilter, $sort: [TestSort!], $page: Int, $perPage: Int) {\n data: listTests(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...TestFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${TEST_FRAGMENT}\n`;\n\nexport const GET_MANY_TESTS = gql`\n query allTests($filter: TestFilter, $sort: [TestSort!], $page: Int, $perPage: Int) {\n data: listTests(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...TestFragment\n }\n }\n }\n ${TEST_FRAGMENT}\n`;\n\nexport const GET_MANY_REFERENCE_TESTS = gql`\n query allTests($filter: TestFilter, $sort: [TestSort!], $page: Int, $perPage: Int) {\n data: listTests(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...TestFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${TEST_FRAGMENT}\n`;\n\nexport const CREATE_TEST = gql`\n mutation createTest($input: TestCreateInput!) {\n data: createTest(input: $input) {\n item {\n ...TestFragment\n }\n }\n }\n ${TEST_FRAGMENT}\n`;\n\nexport const UPDATE_TEST = gql`\n mutation updateTest($where: TestWhereUniqueInput!, $input: TestUpdateInput!) {\n data: updateTest(where: $where, input: $input) {\n item {\n ...TestFragment\n }\n }\n }\n ${TEST_FRAGMENT}\n`;\n\nexport const REMOVE_TEST = gql`\n mutation removeTest($where: TestWhereUniqueInput!) {\n data: removeTest(where: $where) {\n item {\n ...TestFragment\n }\n }\n }\n ${TEST_FRAGMENT}\n`;\n\nexport const RESTORE_TEST = gql`\n mutation restoreTest($where: TestWhereUniqueInput!) {\n data: restoreTest(where: $where) {\n item {\n ...TestFragment\n }\n }\n }\n ${TEST_FRAGMENT}\n`;\n\nexport const DELETE_TEST = gql`\n mutation deleteTest($where: TestWhereUniqueInput!) {\n data: deleteTest(where: $where) {\n item {\n ...TestFragment\n }\n }\n }\n ${TEST_FRAGMENT}\n`;\n","import { gql } from '@apollo/client';\nimport { EMBEDDED_REGION_FRAGMENT } from '../typeDefs';\nimport { TEST_FRAGMENT } from '../Test/typeDefs';\n\nexport const COUNTERPARTY_FRAGMENT = gql`\n fragment CounterpartyFragment on Counterparty {\n id\n name\n regions {\n ...EmbeddedRegionFragment\n }\n defaultDispatcherId\n defaultManagerId\n defaultMacroleaderId\n gmiId\n tests {\n ...TestFragment\n }\n }\n ${EMBEDDED_REGION_FRAGMENT}\n ${TEST_FRAGMENT}\n`;\n\nexport const GET_ONE_COUNTERPARTY = gql`\n query getOneCounterparty($where: CounterpartyWhereUniqueInput!) {\n data: Counterparty(where: $where) {\n item {\n ...CounterpartyFragment\n }\n }\n }\n ${COUNTERPARTY_FRAGMENT}\n`;\n\nexport const GET_LIST_COUNTERPARTYS = gql`\n query allCounterpartys($filter: CounterpartyFilter, $sort: [CounterpartySort!], $page: Int, $perPage: Int) {\n data: listCounterparties(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...CounterpartyFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${COUNTERPARTY_FRAGMENT}\n`;\n\nexport const GET_MANY_COUNTERPARTYS = gql`\n query allCounterpartys($filter: CounterpartyFilter, $sort: [CounterpartySort!], $page: Int, $perPage: Int) {\n data: listCounterparties(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...CounterpartyFragment\n }\n }\n }\n ${COUNTERPARTY_FRAGMENT}\n`;\n\nexport const GET_MANY_REFERENCE_COUNTERPARTYS = gql`\n query allCounterpartys($filter: CounterpartyFilter, $sort: [CounterpartySort!], $page: Int, $perPage: Int) {\n data: listCounterparties(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...CounterpartyFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${COUNTERPARTY_FRAGMENT}\n`;\n\nexport const CREATE_COUNTERPARTY = gql`\n mutation createCounterparty($input: CounterpartyCreateInput!) {\n data: createCounterparty(input: $input) {\n item {\n ...CounterpartyFragment\n }\n }\n }\n ${COUNTERPARTY_FRAGMENT}\n`;\n\nexport const UPDATE_COUNTERPARTY = gql`\n mutation updateCounterparty($where: CounterpartyWhereUniqueInput!, $input: CounterpartyUpdateInput!) {\n data: updateCounterparty(where: $where, input: $input) {\n item {\n ...CounterpartyFragment\n }\n }\n }\n ${COUNTERPARTY_FRAGMENT}\n`;\n\nexport const REMOVE_COUNTERPARTY = gql`\n mutation removeCounterparty($where: CounterpartyWhereUniqueInput!) {\n data: removeCounterparty(where: $where) {\n item {\n ...CounterpartyFragment\n }\n }\n }\n ${COUNTERPARTY_FRAGMENT}\n`;\n\nexport const RESTORE_COUNTERPARTY = gql`\n mutation restoreCounterparty($where: CounterpartyWhereUniqueInput!) {\n data: restoreCounterparty(where: $where) {\n item {\n ...CounterpartyFragment\n }\n }\n }\n ${COUNTERPARTY_FRAGMENT}\n`;\n\nexport const DELETE_COUNTERPARTY = gql`\n mutation deleteCounterparty($where: CounterpartyWhereUniqueInput!) {\n data: deleteCounterparty(where: $where) {\n item {\n ...CounterpartyFragment\n }\n }\n }\n ${COUNTERPARTY_FRAGMENT}\n`;\n","import buildDefaultVariables from '../../ra-axi-graphql/buildVariables';\nimport getResponseParser from '../../ra-axi-graphql/getResponseParser';\nimport {\n GET_ONE_COUNTERPARTY,\n GET_LIST_COUNTERPARTYS,\n GET_MANY_COUNTERPARTYS,\n GET_MANY_REFERENCE_COUNTERPARTYS,\n CREATE_COUNTERPARTY,\n UPDATE_COUNTERPARTY,\n DELETE_COUNTERPARTY,\n REMOVE_COUNTERPARTY,\n RESTORE_COUNTERPARTY,\n} from './typeDefs';\n\nconst counterpartyBuildQuery = {\n create: (params, introspection) => ({\n mutation: CREATE_COUNTERPARTY,\n variables: buildDefaultVariables.create(params, introspection),\n parseResponse: getResponseParser.create(introspection),\n }),\n delete: (params, introspection) => ({\n mutation: DELETE_COUNTERPARTY,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n deleteMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n getList: (params, introspection) => ({\n query: GET_LIST_COUNTERPARTYS,\n variables: buildDefaultVariables.getList(params, introspection),\n parseResponse: getResponseParser.getList(introspection),\n }),\n getMany: (params, introspection) => ({\n query: GET_MANY_COUNTERPARTYS,\n variables: buildDefaultVariables.getMany(params, introspection),\n parseResponse: getResponseParser.getMany(introspection),\n }),\n getManyReference: (params, introspection) => ({\n query: GET_MANY_REFERENCE_COUNTERPARTYS,\n variables: buildDefaultVariables.getManyReference(params, introspection),\n parseResponse: getResponseParser.getManyReference(introspection),\n }),\n getOne: (params, introspection) => ({\n query: GET_ONE_COUNTERPARTY,\n variables: buildDefaultVariables.getOne(params, introspection),\n parseResponse: getResponseParser.getOne(introspection),\n }),\n remove: (params, introspection) => ({\n mutation: REMOVE_COUNTERPARTY,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n restore: (params, introspection) => ({\n mutation: RESTORE_COUNTERPARTY,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n update: (params, introspection) => ({\n mutation: UPDATE_COUNTERPARTY,\n variables: buildDefaultVariables.update(params, introspection),\n parseResponse: getResponseParser.update(introspection),\n }),\n updateMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n};\n\nexport default counterpartyBuildQuery;\n","import {\n AlignmentType,\n Document,\n HeightRule,\n Media,\n Packer,\n Paragraph,\n Table,\n TableCell,\n TableRow,\n TextRun,\n WidthType,\n} from 'docx';\nimport { AUTH_TOKEN_COOKIE, URI_BLOB_REST } from '../../appsettings';\nimport moment from 'moment';\nimport { compressImages, getCookie, prepareFileName, translateJsonKeys } from '../../utils';\n\nconst getUrlWithToken = (url, token) => {\n return url.indexOf('blob:') < 0 ? `${url}?${token}` : url;\n};\n\nconst getSizeParamsForDocx = (width, height) => {\n const k = Math.max(width / 320, height / 320);\n if (k <= 1) return { width, height };\n return {\n width: width / k,\n height: height / k,\n };\n};\n\nexport const createAct = async ({ files, acts, ...data }, resource, convertTable) => {\n const fontSize = 22;\n const doc = new Document({});\n const translatedData = translateJsonKeys(data, resource, convertTable);\n doc.addSection({\n properties: {},\n margins: {\n left: 1000,\n right: 1000,\n },\n children: [\n new Paragraph({\n children: [\n new TextRun({\n text: 'УТВЕРЖДАЮ',\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `Должность, ФИО_______________`,\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `\"____\"________________20__год`,\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n }),\n new Paragraph({\n children: [],\n alignment: AlignmentType.RIGHT,\n }),\n new Paragraph({\n children: [],\n alignment: AlignmentType.RIGHT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `Акт от \"__\"___________________________20__г.`,\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.CENTER,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: ' ',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `Передача оборудования на техническое обслуживание`,\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n border: {\n bottom: {\n color: 'auto',\n space: 1,\n value: 'single',\n size: 6,\n },\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `(вид ТО)\\t\\t`,\n size: 16,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `Оборудование ТМ: ${translatedData['Тип']}, ${data.name}, ${data.manualAddr || ''}.`,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `Ссылка: ${window.location} .`,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `Мы нижеподписавшиеся, ${data.distributor ? data.distributor.name : ''}`,\n size: fontSize,\n // underline: {\n // color: 'black',\n // },\n }),\n ],\n border: {\n bottom: {\n color: 'auto',\n space: 1,\n value: 'single',\n size: 6,\n },\n },\n alignment: AlignmentType.LEFT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `(должность, ФИО)\\t\\t`,\n size: 16,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `И исполнитель`,\n size: fontSize,\n // underline: {\n // color: 'black',\n // },\n }),\n ],\n border: {\n bottom: {\n color: 'auto',\n space: 1,\n value: 'single',\n size: 6,\n },\n },\n alignment: AlignmentType.LEFT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `(должность, ФИО, наименование подрядной организации)`,\n size: 16,\n }),\n ],\n alignment: AlignmentType.CENTER,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `Составили настоящий акт о том, что:`,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `1. Подготовительные мероприятия для выполнения технического обслуживания на данном технологическом объекте произведены в полном объеме;`,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `2. Исполнителем должно быть произведено техническое обслуживание оборудования в полном объеме согласно руководящих документов и исполнительной документации:`,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: ` - список обслуживаемого оборудования приведен в прилагаемом перечне;`,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: ` - дата и время начала работ __________плановая продолжительность работ _____________.`,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n }),\n ...['', ''].map(\n () =>\n new Paragraph({\n children: [\n new TextRun({\n text: ' ',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n }),\n ),\n new Paragraph({\n children: [\n new TextRun({\n text: `Особые условия:`,\n size: fontSize,\n bold: true,\n }),\n ],\n border: {\n bottom: {\n color: 'auto',\n space: 1,\n value: 'single',\n size: 6,\n },\n },\n alignment: AlignmentType.LEFT,\n }),\n new Paragraph({\n text: '___________________________________________________________________________________________________',\n\n alignment: AlignmentType.LEFT,\n }),\n new Paragraph({\n text: '___________________________________________________________________________________________________',\n\n alignment: AlignmentType.LEFT,\n }),\n new Paragraph({\n text: '',\n alignment: AlignmentType.RIGHT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: 'Приложение 1. Перечень обслуживаемого оборудования.',\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: 'Приложение 2. Перечень выявленных замечаний и необходимые мероприятия по устранению',\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n }),\n ...['', '', '', '', ''].map(\n () =>\n new Paragraph({\n children: [\n new TextRun({\n text: ' ',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n }),\n ),\n new Paragraph({\n children: [\n new TextRun({\n text: 'От заказчика\\t\\t\\t\\t\\t\\tОт Исполнителя',\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: ' ',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: '___________________________Должность,ФИО\\t______________________Должность,ФИО',\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n }),\n ],\n });\n const pictures = files.filter((file) => file.name.toLowerCase().search(/\\w*.(jpg|png|jpeg|gif|bmp)/) !== -1);\n const images = await compressImages(\n await Promise.all(\n pictures.map(async (picture) => {\n const url = await getUrlWithToken(\n picture.urlThumbnail\n ? URI_BLOB_REST + picture.urlThumbnail\n : picture.url.includes('blob:')\n ? picture.url\n : URI_BLOB_REST + picture.url,\n getCookie(AUTH_TOKEN_COOKIE),\n );\n\n return new Promise(async (resolve, reject) => {\n const image = await fetch(url, {\n body: null,\n method: 'GET',\n mode: 'cors',\n credentials: 'omit',\n })\n .then((data) => data.blob())\n .then((blob) => blob);\n const reader = new FileReader();\n const img = new Image();\n\n reader.onloadend = () => {\n img.src = URL.createObjectURL(image);\n img.onload = () => {\n resolve({\n base: reader.result,\n width: img.naturalWidth,\n height: img.naturalHeight,\n });\n };\n img.onerror = (error) => {\n reject(error);\n };\n };\n const result = (await compressImages([image], 0.05))[0];\n reader.readAsDataURL(result);\n });\n }),\n ).catch((error) => {\n console.log(error);\n return [];\n }),\n 0.05,\n );\n doc.addSection({\n margins: {\n left: 1000,\n right: 1000,\n },\n children: [\n new Paragraph({\n children: [\n new TextRun({\n text: `Приложение № 1 к Акту №____`,\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `от «__» ___________ 20__ г.`,\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: ` `,\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.CENTER,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `Наименование объекта, адрес:`,\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: data.name || '',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: data.manualAddr || '',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `Тип объекта: ${translatedData['Тип']}`,\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `Перечень обслуживаемого оборудования`,\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.CENTER,\n spacing: {\n after: 200,\n },\n }),\n new Table({\n columnWidths: [510, 5000, 1000, 1000, 2500],\n rows: [\n new TableRow({\n height: {\n height: 510,\n rule: HeightRule.ATLEAST,\n },\n children: [\n new TableCell({\n width: {\n size: 510,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: `№ п/п`,\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n new TableCell({\n width: {\n size: 2400,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: `Наименование`,\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n new TableCell({\n width: {\n size: 1340,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: `Тип`,\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n new TableCell({\n width: {\n size: 1000,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: `Кол-во (шт.)`,\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n new TableCell({\n width: {\n size: 1800,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: `Заводской номер`,\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n new TableCell({\n width: {\n size: 2640,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: `Примечание`,\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n ...translatedData['Состав оборудования'].map((equipment, index) => {\n return new TableRow({\n height: {\n height: 510,\n rule: HeightRule.ATLEAST,\n },\n children: [\n new TableCell({\n width: {\n size: 510,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: `${index + 1}`,\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n new TableCell({\n width: {\n size: 2400,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: equipment[`Наименование`],\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n new TableCell({\n width: {\n size: 1340,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: equipment[`Тип`],\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n new TableCell({\n width: {\n size: 1000,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: equipment[`Колличевство`],\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n new TableCell({\n width: {\n size: 1800,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: equipment['Заводской номер'],\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n new TableCell({\n width: {\n size: 2640,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: ``,\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n ],\n });\n }),\n ],\n }),\n ...[''].map(\n () =>\n new Paragraph({\n children: [\n new TextRun({\n text: ' ',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n }),\n ),\n new Paragraph({\n children: images.map((image) => {\n const imageParams = getSizeParamsForDocx(image.width, image.height);\n const img = Media.addImage(doc, image.base, imageParams.width, imageParams.height);\n return img;\n }),\n }),\n ...[''].map(\n () =>\n new Paragraph({\n children: [\n new TextRun({\n text: ' ',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n spacing: {\n after: 200,\n },\n }),\n ),\n new Paragraph({\n children: [\n new TextRun({\n text: 'ID объекта ЕИТП __________ ID объекта ИМУС _________ ID объекта ПУ _________',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n ...[''].map(\n () =>\n new Paragraph({\n children: [\n new TextRun({\n text: ' ',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n spacing: {\n after: 200,\n },\n }),\n ),\n new Paragraph({\n children: [\n new TextRun({\n text: 'Дополнения:',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text:\n '______________________________________________________________________________________________________' +\n '__________________________________________________________________________________________________________' +\n '____________________________________________________________________________________________________________' +\n '________________________',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n ...[''].map(\n () =>\n new Paragraph({\n children: [\n new TextRun({\n text: ' ',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n spacing: {\n after: 200,\n },\n }),\n ),\n new Paragraph({\n children: [\n new TextRun({\n text: 'От Заказчика\\t\\t\\t\\t\\t\\tОт Исполнителя',\n size: fontSize,\n bold: true,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: '________________ должность, ФИО\\t\\t\\t________________ должность, ФИО',\n size: fontSize,\n bold: true,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n ],\n });\n\n doc.addSection({\n margins: {\n left: 1000,\n right: 1000,\n },\n children: [\n new Paragraph({\n children: [\n new TextRun({\n text: `Приложение № 2 к Акту №____`,\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `от «__» ___________ 20__ г.`,\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: ` `,\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.CENTER,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `Наименование объекта, адрес:`,\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: data.name || '',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: data.manualAddr || '',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: `Перечень выявленных замечаний и необходимые мероприятия по устранению`,\n bold: true,\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.CENTER,\n spacing: {\n after: 200,\n },\n }),\n new Table({\n columnWidths: [510, 5000, 1000, 1000, 2500],\n rows: [\n new TableRow({\n height: {\n height: 510,\n rule: HeightRule.ATLEAST,\n },\n children: [\n new TableCell({\n width: {\n size: 3540,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: `Описание`,\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n new TableCell({\n width: {\n size: 3540,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: `Зона ответственности`,\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n new TableCell({\n width: {\n size: 3540,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: `Планируемые мероприятия `,\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n ],\n }),\n ...data.defects.map((defect, index) => {\n return new TableRow({\n height: {\n height: 510,\n rule: HeightRule.ATLEAST,\n },\n children: [\n new TableCell({\n width: {\n size: 3540,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: defect.name || '',\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n new TableCell({\n width: {\n size: 3540,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: '',\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n new TableCell({\n width: {\n size: 1000,\n type: WidthType.DXA,\n },\n verticalAlign: 'center',\n children: [\n new Paragraph({\n alignment: AlignmentType.CENTER,\n children: [\n new TextRun({\n text: ' ',\n size: fontSize,\n }),\n ],\n }),\n ],\n }),\n ],\n });\n }),\n ],\n }),\n ...[''].map(\n () =>\n new Paragraph({\n children: [\n new TextRun({\n text: ' ',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n }),\n ),\n new Paragraph({\n children: [\n new TextRun({\n text: 'От Заказчика\\t\\t\\t\\t\\t\\tОт Исполнителя',\n size: fontSize,\n bold: true,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: '________________ должность, ФИО\\t\\t\\t________________ должность, ФИО',\n size: fontSize,\n bold: true,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n\n ...['', ''].map(\n () =>\n new Paragraph({\n children: [\n new TextRun({\n text: ' ',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n spacing: {\n after: 200,\n },\n }),\n ),\n ...[''].map(\n () =>\n new Paragraph({\n children: [\n new TextRun({\n text: ' ',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n spacing: {\n after: 200,\n },\n border: {\n bottom: {\n color: 'auto',\n space: 1,\n value: 'single',\n size: 12,\n },\n },\n }),\n ),\n ...['', ''].map(\n () =>\n new Paragraph({\n children: [\n new TextRun({\n text: ' ',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n spacing: {\n after: 200,\n },\n }),\n ),\n new Paragraph({\n children: [\n new TextRun({\n text: 'Отметки об устранении замечаний:',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text:\n '______________________________________________________________________________________________________' +\n '__________________________________________________________________________________________________________' +\n '____________________________________________________________________________________________________________' +\n '________________________',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: 'Дата повторного осмотра:',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: '«__» ___________ 20__ г.',\n size: fontSize,\n bold: true,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n ...[''].map(\n () =>\n new Paragraph({\n children: [\n new TextRun({\n text: ' ',\n size: fontSize,\n }),\n ],\n alignment: AlignmentType.RIGHT,\n spacing: {\n after: 200,\n },\n }),\n ),\n new Paragraph({\n children: [\n new TextRun({\n text: 'От Заказчика\\t\\t\\t\\t\\t\\tОт Исполнителя',\n size: fontSize,\n bold: true,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n new Paragraph({\n children: [\n new TextRun({\n text: '________________ должность, ФИО\\t\\t\\t________________ должность, ФИО',\n size: fontSize,\n bold: true,\n }),\n ],\n alignment: AlignmentType.LEFT,\n spacing: {\n after: 200,\n },\n }),\n ],\n });\n return Packer.toBlob(doc).then((act) => {\n const url = window.URL.createObjectURL(act);\n moment.locale('ru');\n const name = prepareFileName(\n `Акт_${data.name.substring(0, 90).replace('/', '')}_от_${moment().format('DD-MM-YYYY-HH:mm')}.docx`,\n );\n const file = new File([act], name, {\n type: 'text/plain',\n });\n return {\n name: name,\n rawFile: file,\n url: url,\n };\n });\n};\n","import { ApolloClient, InMemoryCache, createHttpLink } from '@apollo/client';\nimport { setContext } from '@apollo/client/link/context';\nimport { getAccessToken } from '../../../authPrivider/getAccessToken';\nimport { URI_OBJECTS } from '../../../appsettings';\n\nconst httpLink = createHttpLink({\n uri: URI_OBJECTS,\n});\n\nconst authLink = setContext(async (_, { headers }) => {\n const token = await getAccessToken();\n\n return {\n headers: {\n ...headers,\n authorization: token ? `Bearer ${token}` : '',\n },\n };\n});\n\nexport default new ApolloClient({\n link: authLink.concat(httpLink),\n cache: new InMemoryCache(),\n});\n","import gql from 'graphql-tag';\nimport apolloObjectsClient from '../other/apolloObjectsClient';\nimport { GET_ONE_REGION } from './typeDefs';\n\nexport default (args) => {\n return apolloObjectsClient.query({\n query: GET_ONE_REGION,\n variables: { ...args },\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import { ApolloClient, InMemoryCache } from '@apollo/client';\nimport { createUploadLink } from 'apollo-upload-client';\nimport { setContext } from '@apollo/client/link/context';\nimport { getAccessToken } from '../../authPrivider/getAccessToken';\nimport { URI_BLOB } from '../../appsettings';\n\nconst httpLink = createUploadLink({\n uri: URI_BLOB,\n});\n\nconst blobLink = setContext(async (_, { headers }) => {\n const token = await getAccessToken();\n\n return {\n headers: {\n ...headers,\n authorization: token ? `Bearer ${token}` : '',\n },\n };\n});\n\nexport default new ApolloClient({\n link: blobLink.concat(httpLink),\n cache: new InMemoryCache(),\n});\n","import gql from 'graphql-tag';\nimport apolloBlobClient from './apolloBlobClient';\n\nexport const MILTIPLE_UPLOAD = gql`\n mutation multipleUpload($appname: String!, $namecatalog: String!, $files: [Upload!]!) {\n multipleUpload(appname: $appname, namecatalog: $namecatalog, files: $files) {\n id\n userId\n catalog\n url\n urlThumbnail\n virtualpath\n ext\n sizeInBytes\n filename\n mimetype\n }\n }\n`;\n\nexport default (args) => {\n return apolloBlobClient.mutate({\n mutation: MILTIPLE_UPLOAD,\n variables: { ...args },\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import gql from 'graphql-tag';\nimport apolloBlobClient from './apolloBlobClient';\n\nexport const MILTIPLE_REMOVE = gql`\n mutation multipleRemove($ids: [ID]) {\n multipleRemove(ids: $ids) {\n id\n url\n filename\n }\n }\n`;\n\nexport default (args) => {\n return apolloBlobClient.mutate({\n mutation: MILTIPLE_REMOVE,\n variables: { ...args },\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import gql from 'graphql-tag';\nimport { apolloAuthClientWithAuth } from './apolloAuthClient';\n\nconst CREATE_CLIENT = gql`\n mutation createUser($email: String!, $phone: String!, $password: String!, $name: String!, $role: String) {\n createClient: createUser(email: $email, password: $password, name: $name, phone: $phone, role: $role) {\n id\n name\n email\n phone\n role\n }\n }\n`;\n\nexport default (args) => {\n return apolloAuthClientWithAuth.mutate({\n mutation: CREATE_CLIENT,\n variables: { ...args },\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import gql from 'graphql-tag';\nimport { apolloAuthClientWithAuth } from './apolloAuthClient';\n\nconst UPDATE_CLIENT = gql`\n mutation updateUser(\n $id: ID!\n $email: String\n $password: String\n $name: String\n $phone: String\n $role: String\n $banned: Boolean\n ) {\n updateClient: updateUser(\n id: $id\n email: $email\n password: $password\n name: $name\n phone: $phone\n role: $role\n banned: $banned\n ) {\n id\n email\n name\n phone\n role\n banned\n }\n }\n`;\n\nexport default (args) => {\n return apolloAuthClientWithAuth.mutate({\n mutation: UPDATE_CLIENT,\n variables: { ...args },\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import { gql } from '@apollo/client';\nimport {\n EMBEDDED_REGION_FRAGMENT,\n EMBEDDED_EQUIPMENT_FRAGMENT,\n EMBEDDED_DEFECT_FRAGMENT,\n EMBEDDED_COUNTERPARTY_FRAGMENT,\n EMBEDDED_STM_FRAGMENT,\n EMBEDDED_FILE_FRAGMENT,\n EMBEDDED_COMMENT_FRAGMENT,\n} from '../typeDefs';\n\nexport const CONSTRUCTION_OBJECT_FRAGMENT = gql`\n fragment ConstructionObjectFragment on ConstructionObject {\n id\n type\n eutpId\n gmiId\n name\n alias\n number\n description\n inventoryNumber\n region {\n ...EmbeddedRegionFragment\n }\n counterparty {\n ...EmbeddedCounterpartyFragment\n }\n manualAddr\n createdAt\n createdById\n updatedAt\n updateReason\n deleted\n isArchived\n archivedAt\n\n comments {\n ...EmbeddedCommentFragment\n }\n\n equipments {\n ...EmbeddedEquipmentFragment\n }\n telemetrySystem {\n ...EmbeddedTelemetrySystemFragment\n }\n defects {\n ...EmbeddedDefectFragment\n }\n files {\n ...EmbeddedConstrctionObjectFileFragment\n }\n acts {\n ...EmbeddedConstrctionObjectFileFragment\n }\n assemblyActs {\n ...EmbeddedConstrctionObjectFileFragment\n }\n assemblyFiles {\n ...EmbeddedConstrctionObjectFileFragment\n }\n projectDocs {\n ...EmbeddedConstrctionObjectFileFragment\n }\n }\n\n ${EMBEDDED_EQUIPMENT_FRAGMENT}\n ${EMBEDDED_DEFECT_FRAGMENT}\n ${EMBEDDED_REGION_FRAGMENT}\n ${EMBEDDED_COUNTERPARTY_FRAGMENT}\n ${EMBEDDED_STM_FRAGMENT}\n ${EMBEDDED_FILE_FRAGMENT}\n ${EMBEDDED_COMMENT_FRAGMENT}\n`;\n\nexport const GET_ONE_CONSTRUCTION_OBJECT = gql`\n query getOneConstructionObject($where: ConstructionObjectWhereUniqueInput!) {\n data: ConstructionObject(where: $where) {\n item {\n ...ConstructionObjectFragment\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FRAGMENT}\n`;\n\nexport const GET_LIST_CONSTRUCTION_OBJECTS = gql`\n query allConstructionObjects(\n $filter: ConstructionObjectFilter\n $sort: [ConstructionObjectSort!]\n $page: Int\n $perPage: Int\n ) {\n data: listConstructionObjects(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...ConstructionObjectFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FRAGMENT}\n`;\n\nexport const GET_LIST_CONSTRUCTION_OBJECTS_IDS = gql`\n query allConstructionObjectsIds($filter: ConstructionObjectFilter) {\n ids: constructionObjectsIds(filter: $filter)\n }\n`;\n\nexport const GET_LIST_PIR_CONSTRUCTION_OBJECTS = gql`\n query allPirConstructionObjects(\n $filter: pirConstructionObjectFilter\n $sort: [PirConstructionObjectSort!]\n $page: Int\n $perPage: Int\n ) {\n data: listPirConstructionObjects(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...ConstructionObjectFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FRAGMENT}\n`;\n\nexport const GET_LIST_PIR_CONSTRUCTION_OBJECTS_IDS = gql`\n query allPirConstructionObjectsIds($filter: pirConstructionObjectFilter) {\n ids: pirConstructionObjectsIds(filter: $filter)\n }\n`;\n\nexport const GET_MANY_CONSTRUCTION_OBJECTS = gql`\n query allConstructionObjects(\n $filter: ConstructionObjectFilter\n $sort: [ConstructionObjectSort!]\n $page: Int\n $perPage: Int\n ) {\n data: listConstructionObjects(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...ConstructionObjectFragment\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FRAGMENT}\n`;\n\nexport const GET_MANY_REFERENCE_CONSTRUCTION_OBJECTS = gql`\n query allConstructionObjects(\n $filter: ConstructionObjectFilter\n $sort: [ConstructionObjectSort!]\n $page: Int\n $perPage: Int\n ) {\n data: listConstructionObjects(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...ConstructionObjectFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FRAGMENT}\n`;\n\nexport const CREATE_CONSTRUCTION_OBJECT = gql`\n mutation createConstructionObject($input: ConstructionObjectCreateInput!) {\n data: createConstructionObject(input: $input) {\n item {\n ...ConstructionObjectFragment\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FRAGMENT}\n`;\n\nexport const CREATE_PIR_INFO_TO_CONSTRUCTION_OBJECT = gql`\n mutation createPirInfoToConstructionObject($input: PirInfoToConstructionObjectCreateInput!) {\n data: createPirInfoToConstructionObject(input: $input) {\n item {\n ...ConstructionObjectFragment\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FRAGMENT}\n`;\n\nexport const UPDATE_CONSTRUCTION_OBJECT = gql`\n mutation updateConstructionObject(\n $where: ConstructionObjectWhereUniqueInput!\n $input: ConstructionObjectUpdateInput!\n ) {\n data: updateConstructionObject(where: $where, input: $input) {\n item {\n ...ConstructionObjectFragment\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FRAGMENT}\n`;\n\nexport const UPDATE_PIR_INFO_TO_CONSTRUCTION_OBJECT = gql`\n mutation updatePirInfoToConstructionObject(\n $where: PirConstructionObjectWhereUniqueInput!\n $input: PirInfoToConstructionObjectUpdateInput!\n ) {\n data: updatePirInfoToConstructionObject(where: $where, input: $input) {\n item {\n ...ConstructionObjectFragment\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FRAGMENT}\n`;\n\nexport const REMOVE_CONSTRUCTION_OBJECT = gql`\n mutation removeConstructionObject($where: ConstructionObjectWhereUniqueInput!) {\n data: removeConstructionObject(where: $where) {\n item {\n ...ConstructionObjectFragment\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FRAGMENT}\n`;\n\nexport const RESTORE_CONSTRUCTION_OBJECT = gql`\n mutation restoreConstructionObject($where: ConstructionObjectWhereUniqueInput!) {\n data: restoreConstructionObject(where: $where) {\n item {\n ...ConstructionObjectFragment\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FRAGMENT}\n`;\n\nexport const DELETE_CONSTRUCTION_OBJECT = gql`\n mutation deleteConstructionObject($where: ConstructionObjectWhereUniqueInput!) {\n data: deleteConstructionObject(where: $where) {\n item {\n ...ConstructionObjectFragment\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FRAGMENT}\n`;\n","import apolloObjectsClient from '../apolloClient';\nimport { GET_ONE_CONSTRUCTION_OBJECT } from '../ConstructionObject/typeDefs';\n\nexport default (args) => {\n return apolloObjectsClient.query({\n query: GET_ONE_CONSTRUCTION_OBJECT,\n variables: { ...args },\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import { compressImages, prepareFileName } from '../../utils';\nimport { CREATE, UPDATE } from 'ra-core';\nimport { NAME_APP } from '../../appsettings';\nimport multipleUpload from '../Blob/multipleUpload';\nimport multipleRemove from '../Blob/multipleRemove';\nimport createClient from '../../authPrivider/createClient';\nimport updateClient from '../../authPrivider/updateClient';\nimport { omit } from 'lodash';\nimport getObject from '../Objects/customQueries/getObject';\nimport getRegion from '../Objects/Region/getRegion';\n\nexport async function createCoreFiles(catalog, files = []) {\n const newFiles = files.filter((file) => file.rawFile instanceof File);\n\n if (!newFiles.length) {\n return [];\n }\n\n const newFilesToBlob = newFiles.map((file) => file.rawFile);\n const {\n data: { multipleUpload: filesBlob },\n } = await multipleUpload({ appname: NAME_APP, namecatalog: catalog, files: newFilesToBlob });\n\n return filesBlob.map((file) => ({\n name: file.filename,\n createdBy: file.userId,\n idBlob: file.id,\n url: `/get${file.virtualpath}`,\n urlThumbnail: file.urlThumbnail ? `/thumbnail${file.virtualpath}` : null,\n catalog: file.catalog,\n ext: file.ext ? file.ext.split('.').pop().toLowerCase() : null,\n size: file.sizeInBytes,\n status: 'NEW',\n }));\n}\n\nexport async function updateCoreFiles(catalog, files = [], previous = []) {\n const newFiles = files.filter((file) => file.rawFile instanceof File);\n const formerFiles = files.filter((file) => file.idBlob);\n const removeFiles = previous.filter((file) => !formerFiles.map((file) => file.idBlob).includes(file.idBlob));\n\n const newFilesToBlob = newFiles.map((file) => file.rawFile);\n const removeFilesToBlob = removeFiles.map((file) => file.idBlob);\n\n let newFilesToCore = [];\n let removeFilesToCore = [];\n\n if (newFilesToBlob.length) {\n const {\n data: { multipleUpload: filesBlob },\n } = await multipleUpload({ appname: NAME_APP, namecatalog: catalog, files: newFilesToBlob });\n\n newFilesToCore = filesBlob.map((file) => {\n return {\n name: file.filename,\n createdBy: file.userId,\n idBlob: file.id,\n url: `/get${file.virtualpath}`,\n urlThumbnail: file.urlThumbnail ? `/thumbnail${file.virtualpath}` : null,\n catalog: file.catalog,\n ext: file.ext ? file.ext.split('.').pop().toLowerCase() : null,\n size: file.sizeInBytes,\n status: 'NEW',\n };\n });\n }\n\n if (removeFiles.length) {\n await multipleRemove({ ids: removeFilesToBlob });\n\n removeFilesToCore = removeFiles.map((file) => ({\n ...file,\n status: 'REMOVE',\n }));\n }\n\n return [...newFilesToCore, ...removeFilesToCore];\n}\n\nexport default async (type, resource, params) => {\n const { data, previousData } = params;\n\n if (resource === 'Task') {\n switch (type) {\n case CREATE: {\n if (data.comments) {\n data.comments = {\n create: data.comments.create,\n };\n }\n if (data.responsibledBy) {\n data.responsibledBy = data.responsibledBy.id ? { id: data.responsibledBy.id } : null;\n }\n if (data.processedBy) {\n data.processedBy = data.processedBy.id ? { id: data.processedBy.id } : null;\n }\n if (data.executedBy) {\n data.executedBy = data.executedBy.id ? { id: data.executedBy.id } : null;\n }\n if (data.leadedBy) {\n data.leadedBy = data.leadedBy.id ? { id: data.leadedBy.id } : null;\n }\n if (data.distributedBy) {\n data.distributedBy = data.distributedBy.id ? { id: data.distributedBy.id } : null;\n }\n if (data.relatedTasksIds) {\n data.relatedTasks = data.relatedTasksIds.map((id) => ({ id }));\n }\n if (data.files) {\n data.files = data.files.map((file) => {\n file.name = prepareFileName(file.name);\n return file;\n });\n data.files = await compressImages(data.files);\n data.files = await createCoreFiles(resource, data.files);\n }\n if (data.maintainableItem) {\n const {\n data: {\n data: {\n item: { name },\n },\n },\n } = await getObject({ where: { id: data.maintainableItem } });\n data.maintainableItemName = name;\n }\n if (data.region) {\n const {\n data: {\n data: {\n item: { unrestrictedName },\n },\n },\n } = await getRegion({ where: { id: data.region } });\n data.regionName = unrestrictedName;\n }\n if (data.acts) {\n data.acts = data.acts.map((file) => {\n file.name = prepareFileName(file.name);\n return file;\n });\n data.acts = await compressImages(data.acts);\n data.acts = await createCoreFiles('ActOfTask', data.acts);\n }\n\n break;\n }\n case UPDATE: {\n if (data.comments) {\n data.comments = {\n create: data.comments.create,\n update: data.comments.update,\n delete: data.comments.delete,\n remove: data.comments.remove,\n };\n }\n if (data.responsibledBy) {\n data.responsibledBy =\n data.responsibledBy || previousData.responsibledBy ? { id: data.responsibledBy.id } : null;\n }\n if (data.processedBy) {\n data.processedBy = data.processedBy.id ? { id: data.processedBy.id } : null;\n }\n if (data.distributedBy) {\n data.distributedBy = data.distributedBy.id ? { id: data.distributedBy.id } : null;\n }\n if (data.leadedBy) {\n data.leadedBy = data.leadedBy.id ? { id: data.leadedBy.id } : null;\n }\n if (data.executedBy) {\n data.executedBy = data.executedBy || previousData.executedBy ? { id: data.executedBy.id } : null;\n }\n if (data.maintainableItem) {\n const {\n data: {\n data: {\n item: { name },\n },\n },\n } = await getObject({ where: { id: data.maintainableItem } });\n data.maintainableItemName = name;\n }\n if (data.region) {\n const {\n data: {\n data: {\n item: { unrestrictedName },\n },\n },\n } = await getRegion({ where: { id: data.region } });\n data.regionName = unrestrictedName;\n }\n if (data.relatedTasksIds) {\n data.relatedTasks = data.relatedTasksIds.map((id) => ({ id }));\n }\n if (data.files) {\n data.files = data.files.map((file) => {\n file.name = prepareFileName(file.name);\n return file;\n });\n data.files = await compressImages(data.files);\n data.files = await updateCoreFiles(resource, data.files, previousData.files);\n }\n if (data.acts) {\n data.acts = data.acts.map((file) => {\n file.name = prepareFileName(file.name);\n return file;\n });\n data.acts = await compressImages(data.acts);\n data.acts = await updateCoreFiles('ActOfTask', data.acts, previousData.acts);\n }\n\n break;\n }\n default:\n break;\n }\n }\n\n if (resource === 'User') {\n switch (type) {\n case CREATE: {\n if (!data.password) {\n break;\n } //если нет password, то создаем пользователя только в core\n\n const {\n data: { createClient: auth },\n } = await createClient({\n email: data.email,\n password: data.password,\n name: data.name,\n phone: data.phone,\n role: data.role,\n });\n\n data.auth = auth.id;\n\n break;\n }\n case UPDATE: {\n const authId = data.auth;\n const password = data.password;\n let authUser = {};\n\n //если нет authId и пароля, то обновляем пользователя только в core\n if (!authId && !password) {\n break;\n }\n\n if (!authId && password) {\n const {\n data: { createClient: auth },\n } = await createClient({\n id: data.authId,\n email: data.email,\n password: data.password,\n name: data.name,\n phone: data.phone,\n role: data.role,\n banned: data.banned,\n });\n\n authUser = auth;\n }\n\n if (authId) {\n const {\n data: { updateClient: auth },\n } = await updateClient({\n id: data.auth,\n email: data.email,\n password: data.password,\n name: data.name,\n phone: data.phone,\n role: data.role,\n banned: data.banned,\n });\n\n authUser = auth;\n }\n data.auth = authUser.id;\n\n break;\n }\n default:\n break;\n }\n }\n\n if (resource === 'Profile') {\n switch (type) {\n case UPDATE: {\n const authId = data.auth;\n const password = data.password;\n let authUser = {};\n\n //если нет authId и пароля, то обновляем пользователя только в core\n if (!authId && !password) {\n break;\n }\n\n if (!authId && password) {\n const {\n data: { createClient: auth },\n } = await createClient({\n id: data.authId,\n email: data.email,\n password: data.password,\n name: data.name,\n phone: data.phone,\n role: data.role,\n });\n\n authUser = auth;\n }\n\n if (authId) {\n const {\n data: { updateClient: auth },\n } = await updateClient({\n id: data.auth,\n email: data.email,\n password: data.password,\n name: data.name,\n phone: data.phone,\n });\n\n authUser = auth;\n }\n data.filters = data.filters\n ? data.filters.map((val) => (typeof val === 'object' ? { id: val.id } : { id: val }))\n : [];\n data.auth = authUser.id;\n\n break;\n }\n default:\n break;\n }\n }\n\n return { type, resource, params };\n};\n","import get from 'lodash/get';\nimport set from 'lodash/set';\nimport omit from 'lodash/omit';\nimport { LIST, NESTED_LIST, SCALAR, INPUT_OBJECT, NON_NULL, ENUM } from '../../ra-axi-graphql/buildIntrospectionSchema';\nimport { compressImages, prepareFileName } from '../../../utils';\nimport { createAct } from '../../../components/MaintainableItem/createAct';\nimport getLocation from '../Region/getRegion';\nimport getRegion from '../Region/getRegion';\nimport { createCoreFiles, updateCoreFiles } from '../../Core/decorate';\n\n// const buildNestedListVariable = (data, previousData, inputField, introspection) => {\n\n// const arg = get(inputField, ['name'])\n// const kind = get(inputField, ['type', 'kind'])\n// const ofTypeName = get(inputField, ['type', 'ofType', 'ofType', 'name'])\n// const inputFields = get(introspection, ['schema', 'typesObject', ofTypeName, 'inputFields'])\n// if (!inputFields) throw new Error(`InputFields ${ofTypeName}UpdateInput not found`);\n// const variables = getInputFieldsVariables(data, previousData, inputFields)\n\n// return variables;\n// }\n\nconst getTypeKind = (type) => {\n if (!type) throw new Error('Type not found');\n\n const kind = type.kind;\n if (!kind || type.kind === NON_NULL) {\n const ofType = type.ofType;\n return getTypeKind(ofType);\n }\n\n return kind;\n};\n\nconst reduceInputFields = (data, previousData, inputFields, introspection) => {\n const variables = inputFields.reduce((acc, field) => {\n if (!data) return acc;\n\n const arg = field.name;\n const kind = getTypeKind(field.type);\n const resource = get(data, '__typename');\n\n if (kind === LIST) {\n const ids = get(data, [`${arg}Ids`]);\n const values = get(data, arg);\n switch (arg) {\n case 'equipments': {\n return values && Array.isArray(values) ? { ...acc, [arg]: values.map((v) => omit(v, '__typename')) } : acc;\n }\n case 'files': {\n return values && Array.isArray(values)\n ? {\n ...acc,\n [arg]: values.map((v) => omit(v, '__typename', 'createdAt', 'updatedAt', 'deleted', 'createdBy')),\n }\n : acc;\n }\n case 'acts': {\n return values && Array.isArray(values)\n ? {\n ...acc,\n [arg]: values.map((v) => omit(v, '__typename', 'createdAt', 'updatedAt', 'deleted', 'createdBy')),\n }\n : acc;\n }\n case 'assemblyFiles': {\n return values && Array.isArray(values)\n ? {\n ...acc,\n [arg]: values.map((v) => omit(v, '__typename', 'createdAt', 'updatedAt', 'deleted', 'createdBy')),\n }\n : acc;\n }\n case 'assemblyActs': {\n return values && Array.isArray(values)\n ? {\n ...acc,\n [arg]: values.map((v) => omit(v, '__typename', 'createdAt', 'updatedAt', 'deleted', 'createdBy')),\n }\n : acc;\n }\n case 'projectDocs': {\n return values && Array.isArray(values)\n ? {\n ...acc,\n [arg]: values.map((v) => omit(v, '__typename', 'createdAt', 'updatedAt', 'deleted', 'createdBy')),\n }\n : acc;\n }\n default: {\n return ids === undefined ? acc : { ...acc, [arg]: ids.map((id) => ({ id })) };\n }\n }\n }\n\n if (kind === NESTED_LIST) {\n const nestedFieldType = get(field, ['type', 'ofType', 'ofType', 'name']);\n return {\n ...acc,\n [arg]: data[arg]\n .filter((nested) => nested)\n .map((nested) => buildUpdateVariablesOnIntrospection(nested, previousData, nestedFieldType, introspection)),\n };\n }\n\n if (kind === INPUT_OBJECT) {\n const value = get(data, arg);\n const id = get(data, [arg, 'id']);\n const keys = value ? Object.keys(value) : [];\n\n switch (arg) {\n case 'comments': {\n return {\n ...acc,\n [arg]: {\n create: value.create,\n update: value.update,\n delete: value.delete,\n remove: value.remove,\n },\n };\n }\n\n default:\n return id ? { ...acc, [arg]: { id } } : keys.length ? { ...acc, [arg]: value } : acc;\n }\n }\n\n if (kind === SCALAR) {\n const value = get(data, [arg]);\n return value === undefined ? acc : { ...acc, [arg]: value };\n }\n\n if (kind === ENUM) {\n const value = get(data, [arg]);\n return value === undefined ? acc : { ...acc, [arg]: value };\n }\n\n return acc;\n }, {});\n return variables;\n};\n\nconst convertTable = {\n Object: {\n type: 'Тип',\n types: {\n UUG: 'Узел учета газа',\n STM: 'Система телеметрии',\n CONTROLLER: 'Контроллер',\n METERCOMPLEX: 'Измерительный комплекс',\n METER: 'Счетчик',\n CORRECTOR: 'Корректор',\n PRESSUREMETER: 'Датчик давления ',\n FILTER: 'Фильтр',\n THERMOMETER: 'Термометр',\n IBP: 'ИБП',\n MODULE: 'Модуль',\n MODEM: 'Модем',\n EXTERNALANTENNA: 'Внешняя антенна',\n BATTARY: 'Аккумулятор',\n BIZ: 'БИЗ',\n CONVERTER: 'Преобразователь',\n AUTOSWITCH: 'Выключатель автоматический',\n OTHER: 'Другой тип',\n },\n name: 'Наименование',\n manualAddr: 'Адрес',\n description: 'Описание',\n inventoryNumber: 'Инвентарный номер',\n region: 'Регион',\n equipmentName: 'Наименование оборудования',\n equipments: 'Состав оборудования',\n distributor: 'Заказчик',\n eutpId: 'ЕИТП',\n updateReason: 'Причина редактирования',\n defects: 'Неисправности',\n stm: 'Тип системы телеметрии',\n count: 'Колличевство',\n factoryNumber: 'Заводской номер',\n },\n};\n\nconst buildUpdateVariablesOnIntrospection = (data, previousData, type, introspection) => {\n const inputFields = get(introspection, ['schema', 'typesObject', type, 'inputFields']);\n if (!inputFields) throw new Error(`InputFields ${type} not found`);\n\n const variables = reduceInputFields(data, previousData, inputFields, introspection);\n\n return variables;\n};\n\n// const\n\nconst buildVariables = {\n create: async (params, introspection) => {\n const { data } = params;\n let location;\n if (data.region) {\n location = await getRegion({ where: { id: data.region.id } });\n }\n if (data.files) {\n data.files = data.files.map((file) => {\n file.name = prepareFileName(file.name);\n return file;\n });\n data.files = await compressImages(data.files);\n }\n if (data.acts) {\n if (data.acts.some((act) => act.id === 'none')) {\n data.acts = data.acts.filter((act) => act.id !== 'none');\n } else {\n const act = await createAct(\n {\n ...data,\n region: location ? location.data.data : data.region,\n },\n 'Object',\n convertTable,\n );\n data.acts = [...data.acts, act];\n }\n }\n if (data.assemblyFiles) {\n data.assemblyFiles = data.assemblyFiles.map((assemblyFile) => {\n assemblyFile.name = prepareFileName(assemblyFile.name);\n return assemblyFile;\n });\n data.assemblyFiles = await compressImages(data.assemblyFiles);\n }\n if (data.assemblyActs) {\n data.assemblyActs = data.assemblyActs.map((assemblyAct) => {\n assemblyAct.name = prepareFileName(assemblyAct.name);\n return assemblyAct;\n });\n data.assemblyActs = await compressImages(data.assemblyActs);\n }\n if (data.projectDocs) {\n data.projectDocs = data.projectDocs.map((projectDoc) => {\n projectDoc.name = prepareFileName(projectDoc.name);\n return projectDoc;\n });\n data.projectDocs = await compressImages(data.projectDocs);\n }\n\n if (data.acts) {\n data.acts = await createCoreFiles('ConstructionObject', data.acts);\n }\n if (data.files) {\n data.files = await createCoreFiles('ConstructionObject', data.files);\n }\n if (data.assemblyActs) {\n data.assemblyActs = await createCoreFiles('ConstructionObject', data.assemblyActs);\n }\n if (data.assemblyFiles) {\n data.assemblyFiles = await createCoreFiles('ConstructionObject', data.assemblyFiles);\n }\n if (data.projectDocs) {\n data.projectDocs = await createCoreFiles('ConstructionObject', data.projectDocs);\n }\n const createInput = buildUpdateVariablesOnIntrospection(data, {}, `ConstructionObjectCreateInput`, introspection);\n const createPirInput = buildUpdateVariablesOnIntrospection(\n data,\n {},\n `PirInfoToConstructionObjectCreateInput`,\n introspection,\n );\n\n return {\n createVariables: {\n input: createInput,\n },\n createPirVariables: {\n input: createPirInput,\n },\n };\n },\n delete: (params, introspection) => {\n const { id, previousData } = params;\n\n return {\n where: { id },\n };\n },\n deleteMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n getList: (params, introspection) => {\n const {\n filter,\n pagination: { page, perPage },\n sort: { field = 'createdAt', order = 'asc' },\n } = params;\n const { telemetrySystem, equipment, defects, ...constructionObjectFilter } = filter;\n const sortFields = get(introspection, ['schema', 'typesObject', 'ConstructionObjectSort', 'inputFields']).map(\n (f) => f.name,\n );\n const pirSortFields = get(introspection, ['schema', 'typesObject', 'PirConstructionObjectSort', 'inputFields']).map(\n (f) => f.name,\n );\n if (sortFields.includes(field.split('.')[0])) {\n return {\n sortService: 'constructionObject',\n getListVariables: {\n filter: constructionObjectFilter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n },\n getPirIdsVariables: {\n filter: {\n telemetrySystem,\n equipment,\n defects: Array.isArray(defects) ? defects.map((id) => ({ id })) : undefined,\n },\n },\n };\n }\n if (pirSortFields.includes(field.split('.')[0])) {\n return {\n sortService: 'pirConstructionObject',\n getIdsVariables: {\n filter: constructionObjectFilter,\n },\n getPirListVariables: {\n filter: {\n telemetrySystem,\n equipment,\n defects: Array.isArray(defects) ? defects.map((id) => ({ id })) : undefined,\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n },\n };\n }\n },\n getMany: (params, introspection) => {\n const { ids } = params;\n return {\n filter: {\n ids,\n },\n perPage: ids.length,\n };\n },\n getManyReference: (params, introspection) => {\n const {\n filter,\n pagination: { page, perPage },\n sort: { field, order },\n } = params;\n\n return {\n filter,\n sort: [{ [field]: order }],\n page,\n perPage,\n };\n },\n getOne: (params, introspection) => {\n const { id } = params;\n return {\n where: { id },\n };\n },\n remove: (params, introspection) => {\n const { id, previousData } = params;\n\n return {\n where: { id },\n };\n },\n restore: (params, introspection) => {\n const { id, previousData } = params;\n\n return {\n where: { id },\n };\n },\n update: async (params, introspection) => {\n const { id, data, previousData } = params;\n let location;\n if (data.region) {\n location = await getRegion({ where: { id: data.region.id } });\n }\n if (data.files) {\n data.files = data.files.map((file) => {\n file.name = prepareFileName(file.name);\n return file;\n });\n data.files = await compressImages(data.files);\n }\n if (data.acts) {\n if (data.acts.some((act) => act.id === 'none')) {\n data.acts = data.acts.filter((act) => act.id !== 'none');\n } else {\n const act = await createAct(\n {\n ...data,\n region: location ? location.data.data : data.region,\n },\n 'Object',\n convertTable,\n );\n data.acts = [...data.acts, act];\n }\n }\n if (data.assemblyFiles) {\n data.assemblyFiles = data.assemblyFiles.map((assemblyFile) => {\n assemblyFile.name = prepareFileName(assemblyFile.name);\n return assemblyFile;\n });\n data.assemblyFiles = await compressImages(data.assemblyFiles);\n }\n if (data.assemblyActs) {\n data.assemblyActs = data.assemblyActs.map((assemblyAct) => {\n assemblyAct.name = prepareFileName(assemblyAct.name);\n return assemblyAct;\n });\n data.assemblyActs = await compressImages(data.assemblyActs);\n }\n if (data.projectDocs) {\n data.projectDocs = data.projectDocs.map((projectDoc) => {\n projectDoc.name = prepareFileName(projectDoc.name);\n return projectDoc;\n });\n data.projectDocs = await compressImages(data.projectDocs);\n }\n\n if (data.acts) {\n data.acts = await updateCoreFiles('ConstructionObject', data.acts, previousData.acts);\n }\n if (data.files) {\n data.files = await updateCoreFiles('ConstructionObject', data.files, previousData.files);\n }\n if (data.assemblyActs) {\n data.assemblyActs = await updateCoreFiles('ConstructionObject', data.assemblyActs, previousData.assemblyActs);\n }\n if (data.assemblyFiles) {\n data.assemblyFiles = await updateCoreFiles('ConstructionObject', data.assemblyFiles, previousData.assemblyFiles);\n }\n if (data.projectDocs) {\n data.projectDocs = await updateCoreFiles('ConstructionObject', data.projectDocs, previousData.projectDocs);\n }\n const updateInput = buildUpdateVariablesOnIntrospection(\n data,\n previousData,\n `ConstructionObjectUpdateInput`,\n introspection,\n );\n const updatePirInput = buildUpdateVariablesOnIntrospection(\n data,\n previousData,\n `PirInfoToConstructionObjectUpdateInput`,\n introspection,\n );\n\n return {\n updateVariables: {\n where: { id },\n input: updateInput,\n },\n updatePirVariables: {\n where: { id },\n input: updatePirInput,\n },\n };\n },\n updateMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n};\n\nexport default buildVariables;\n","import buildDefaultVariables from '../../ra-axi-graphql/buildVariables';\nimport buildConstructionObjectVariables from './buildVariables';\nimport getResponseParser from '../../ra-axi-graphql/getResponseParser';\nimport {\n GET_ONE_CONSTRUCTION_OBJECT,\n GET_LIST_PIR_CONSTRUCTION_OBJECTS,\n CREATE_PIR_INFO_TO_CONSTRUCTION_OBJECT,\n GET_LIST_CONSTRUCTION_OBJECTS_IDS,\n GET_LIST_PIR_CONSTRUCTION_OBJECTS_IDS,\n GET_LIST_CONSTRUCTION_OBJECTS,\n GET_MANY_CONSTRUCTION_OBJECTS,\n GET_MANY_REFERENCE_CONSTRUCTION_OBJECTS,\n CREATE_CONSTRUCTION_OBJECT,\n UPDATE_CONSTRUCTION_OBJECT,\n DELETE_CONSTRUCTION_OBJECT,\n REMOVE_CONSTRUCTION_OBJECT,\n RESTORE_CONSTRUCTION_OBJECT,\n UPDATE_PIR_INFO_TO_CONSTRUCTION_OBJECT,\n} from './typeDefs';\n\nconst constructionObjectBuildQuery = {\n create: async (params, introspection) => ({\n mutations: { create: CREATE_CONSTRUCTION_OBJECT, pirCreate: CREATE_PIR_INFO_TO_CONSTRUCTION_OBJECT },\n variables: await buildConstructionObjectVariables.create(params, introspection),\n parseResponse: getResponseParser.update(introspection),\n }),\n update: async (params, introspection) => ({\n // mutation: UPDATE_CONSTRUCTION_OBJECT,\n mutations: { update: UPDATE_CONSTRUCTION_OBJECT, pirUpdate: UPDATE_PIR_INFO_TO_CONSTRUCTION_OBJECT },\n variables: await buildConstructionObjectVariables.update(params, introspection),\n parseResponse: getResponseParser.update(introspection),\n }),\n delete: (params, introspection) => ({\n mutation: DELETE_CONSTRUCTION_OBJECT,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n deleteMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n getList: (params, introspection) => ({\n queries: {\n getPirIds: GET_LIST_PIR_CONSTRUCTION_OBJECTS_IDS,\n getPirList: GET_LIST_PIR_CONSTRUCTION_OBJECTS,\n getList: GET_LIST_CONSTRUCTION_OBJECTS,\n getIds: GET_LIST_CONSTRUCTION_OBJECTS_IDS,\n },\n variables: buildConstructionObjectVariables.getList(params, introspection),\n parseResponse: getResponseParser.getList(introspection),\n }),\n getMany: (params, introspection) => ({\n query: GET_MANY_CONSTRUCTION_OBJECTS,\n variables: buildDefaultVariables.getMany(params, introspection),\n parseResponse: getResponseParser.getMany(introspection),\n }),\n getManyReference: (params, introspection) => {\n return {\n query: GET_MANY_REFERENCE_CONSTRUCTION_OBJECTS,\n variables: buildDefaultVariables.getManyReference(params, introspection),\n parseResponse: getResponseParser.getManyReference(introspection),\n };\n },\n getOne: (params, introspection) => ({\n query: GET_ONE_CONSTRUCTION_OBJECT,\n variables: buildDefaultVariables.getOne(params, introspection),\n parseResponse: getResponseParser.getOne(introspection),\n }),\n remove: (params, introspection) => ({\n mutation: REMOVE_CONSTRUCTION_OBJECT,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n restore: (params, introspection) => ({\n mutation: RESTORE_CONSTRUCTION_OBJECT,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n\n updateMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n};\n\nexport default constructionObjectBuildQuery;\n","import { gql } from '@apollo/client';\n\nexport const CONSTRUCTION_OBJECT_FILE_FRAGMENT = gql`\n fragment ConstructionObjectFileFragment on ConstructionObjectFile {\n id\n name\n description\n createdAt\n updatedAt\n deleted\n idBlob\n url\n urlThumbnail\n catalog\n ext\n size\n }\n`;\n\nexport const GET_ONE_CONSTRUCTION_OBJECT_FILE = gql`\n query getOneConstructionObjectFile($where: ConstructionObjectFileWhereUniqueInput!) {\n data: ConstructionObjectFile(where: $where) {\n item {\n ...ConstructionObjectFileFragment\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FILE_FRAGMENT}\n`;\n\nexport const GET_LIST_CONSTRUCTION_OBJECT_FILES = gql`\n query allConstructionObjectFiles(\n $filter: ConstructionObjectFileFilter\n $sort: [ConstructionObjectFileSort!]\n $page: Int\n $perPage: Int\n ) {\n data: listConstructionObjectFiles(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...ConstructionObjectFileFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FILE_FRAGMENT}\n`;\n\nexport const GET_MANY_CONSTRUCTION_OBJECT_FILES = gql`\n query allConstructionObjectFiles(\n $filter: ConstructionObjectFileFilter\n $sort: [ConstructionObjectFileSort!]\n $page: Int\n $perPage: Int\n ) {\n data: listConstructionObjectFiles(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...ConstructionObjectFileFragment\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FILE_FRAGMENT}\n`;\n\nexport const GET_MANY_REFERENCE_CONSTRUCTION_OBJECT_FILES = gql`\n query allConstructionObjectFiles(\n $filter: ConstructionObjectFileFilter\n $sort: [ConstructionObjectFileSort!]\n $page: Int\n $perPage: Int\n ) {\n data: listConstructionObjectFiles(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...ConstructionObjectFileFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FILE_FRAGMENT}\n`;\n\nexport const CREATE_CONSTRUCTION_OBJECT_FILE = gql`\n mutation createConstructionObjectFile($input: ConstructionObjectFileCreateInput!) {\n data: createConstructionObjectFile(input: $input) {\n item {\n ...ConstructionObjectFileFragment\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FILE_FRAGMENT}\n`;\n\nexport const UPDATE_CONSTRUCTION_OBJECT_FILE = gql`\n mutation updateConstructionObjectFile(\n $where: ConstructionObjectFileWhereUniqueInput!\n $input: ConstructionObjectFileUpdateInput!\n ) {\n data: updateConstructionObjectFile(where: $where, input: $input) {\n item {\n ...ConstructionObjectFileFragment\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FILE_FRAGMENT}\n`;\n\nexport const REMOVE_CONSTRUCTION_OBJECT_FILE = gql`\n mutation removeConstructionObjectFile($where: ConstructionObjectFileWhereUniqueInput!) {\n data: removeConstructionObjectFile(where: $where) {\n item {\n ...ConstructionObjectFileFragment\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FILE_FRAGMENT}\n`;\n\nexport const RESTORE_CONSTRUCTION_OBJECT_FILE = gql`\n mutation restoreConstructionObjectFile($where: ConstructionObjectFileWhereUniqueInput!) {\n data: restoreConstructionObjectFile(where: $where) {\n item {\n ...ConstructionObjectFileFragment\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FILE_FRAGMENT}\n`;\n\nexport const DELETE_CONSTRUCTION_OBJECT_FILE = gql`\n mutation deleteConstructionObjectFile($where: ConstructionObjectFileWhereUniqueInput!) {\n data: deleteConstructionObjectFile(where: $where) {\n item {\n ...ConstructionObjectFileFragment\n }\n }\n }\n ${CONSTRUCTION_OBJECT_FILE_FRAGMENT}\n`;\n","import Region from './Region';\nimport Defect from './Defect';\nimport EquipmentCatalog from './EquipmentCatalog';\nimport TelemetrySystem from './TelemetrySystem';\nimport EquipmentTemplate from './EquipmentTemplate';\nimport Counterparty from './Counterparty';\nimport ConstructionObject from './ConstructionObject';\nimport ConstructionObjectFile from './File';\nimport Test from './Test';\n\nconst buildQueryByResource = {\n Region,\n Defect,\n EquipmentCatalog,\n EquipmentTemplate,\n TelemetrySystem,\n Counterparty,\n ConstructionObject,\n ConstructionObjectFile,\n Test,\n};\n\nexport default buildQueryByResource;\n","import buildDefaultVariables from '../../ra-axi-graphql/buildVariables';\nimport getResponseParser from '../../ra-axi-graphql/getResponseParser';\nimport {\n GET_ONE_CONSTRUCTION_OBJECT_FILE,\n GET_LIST_CONSTRUCTION_OBJECT_FILES,\n GET_MANY_CONSTRUCTION_OBJECT_FILES,\n GET_MANY_REFERENCE_CONSTRUCTION_OBJECT_FILES,\n CREATE_CONSTRUCTION_OBJECT_FILE,\n UPDATE_CONSTRUCTION_OBJECT_FILE,\n DELETE_CONSTRUCTION_OBJECT_FILE,\n REMOVE_CONSTRUCTION_OBJECT_FILE,\n RESTORE_CONSTRUCTION_OBJECT_FILE,\n} from './typeDefs';\n\nconst constructionObjectFileBuildQuery = {\n create: (params, introspection) => ({\n mutation: CREATE_CONSTRUCTION_OBJECT_FILE,\n variables: buildDefaultVariables.create(params, introspection),\n parseResponse: getResponseParser.create(introspection),\n }),\n delete: (params, introspection) => ({\n mutation: DELETE_CONSTRUCTION_OBJECT_FILE,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n deleteMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n getList: (params, introspection) => ({\n query: GET_LIST_CONSTRUCTION_OBJECT_FILES,\n variables: buildDefaultVariables.getList(params, introspection),\n parseResponse: getResponseParser.getList(introspection),\n }),\n getMany: (params, introspection) => ({\n query: GET_MANY_CONSTRUCTION_OBJECT_FILES,\n variables: buildDefaultVariables.getMany(params, introspection),\n parseResponse: getResponseParser.getMany(introspection),\n }),\n getManyReference: (params, introspection) => ({\n query: GET_MANY_REFERENCE_CONSTRUCTION_OBJECT_FILES,\n variables: buildDefaultVariables.getManyReference(params, introspection),\n parseResponse: getResponseParser.getManyReference(introspection),\n }),\n getOne: (params, introspection) => ({\n query: GET_ONE_CONSTRUCTION_OBJECT_FILE,\n variables: buildDefaultVariables.getOne(params, introspection),\n parseResponse: getResponseParser.getOne(introspection),\n }),\n remove: (params, introspection) => ({\n mutation: REMOVE_CONSTRUCTION_OBJECT_FILE,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n restore: (params, introspection) => ({\n mutation: RESTORE_CONSTRUCTION_OBJECT_FILE,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n update: (params, introspection) => ({\n mutation: UPDATE_CONSTRUCTION_OBJECT_FILE,\n variables: buildDefaultVariables.update(params, introspection),\n parseResponse: getResponseParser.update(introspection),\n }),\n updateMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n};\n\nexport default constructionObjectFileBuildQuery;\n","import buildDefaultVariables from '../../ra-axi-graphql/buildVariables';\nimport getResponseParser from '../../ra-axi-graphql/getResponseParser';\nimport {\n GET_ONE_TEST,\n GET_LIST_TESTS,\n GET_MANY_TESTS,\n GET_MANY_REFERENCE_TESTS,\n CREATE_TEST,\n UPDATE_TEST,\n DELETE_TEST,\n REMOVE_TEST,\n RESTORE_TEST,\n} from './typeDefs';\n\nconst testBuildQuery = {\n create: (params, introspection) => ({\n mutation: CREATE_TEST,\n variables: buildDefaultVariables.create(params, introspection),\n parseResponse: getResponseParser.create(introspection),\n }),\n delete: (params, introspection) => ({\n mutation: DELETE_TEST,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n deleteMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n getList: (params, introspection) => ({\n query: GET_LIST_TESTS,\n variables: buildDefaultVariables.getList(params, introspection),\n parseResponse: getResponseParser.getList(introspection),\n }),\n getMany: (params, introspection) => ({\n query: GET_MANY_TESTS,\n variables: buildDefaultVariables.getMany(params, introspection),\n parseResponse: getResponseParser.getMany(introspection),\n }),\n getManyReference: (params, introspection) => ({\n query: GET_MANY_REFERENCE_TESTS,\n variables: buildDefaultVariables.getManyReference(params, introspection),\n parseResponse: getResponseParser.getManyReference(introspection),\n }),\n getOne: (params, introspection) => ({\n query: GET_ONE_TEST,\n variables: buildDefaultVariables.getOne(params, introspection),\n parseResponse: getResponseParser.getOne(introspection),\n }),\n remove: (params, introspection) => ({\n mutation: REMOVE_TEST,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n restore: (params, introspection) => ({\n mutation: RESTORE_TEST,\n variables: buildDefaultVariables.delete(params, introspection),\n parseResponse: getResponseParser.delete(introspection),\n }),\n update: (params, introspection) => ({\n mutation: UPDATE_TEST,\n variables: buildDefaultVariables.update(params, introspection),\n parseResponse: getResponseParser.update(introspection),\n }),\n updateMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n};\n\nexport default testBuildQuery;\n","import dataProvider from './dataProvider';\n\nexport default dataProvider;\n","import buildGraphQLProvider from './constructionObjectgraphqlProvider';\nimport buildIntrospectionSchema from '../ra-axi-graphql/buildIntrospectionSchema';\nimport client from './apolloClient';\nimport buildQuery from './buildQuery';\nimport { __schema as schema } from './schema';\n\nconst dataProvider = buildGraphQLProvider({\n client,\n buildQuery,\n introspection: {\n schema: buildIntrospectionSchema(schema),\n },\n});\n\nexport default dataProvider;\n","import gql from 'graphql-tag';\n\nconst EMBEDDED_SIMPLE_TYPE = `{\n id\n name\n description\n}`;\n\nconst EMBEDDED_USER_TYPE = `{\n id\n name\n phone\n}`;\n\nconst EMBEDDED_FILE_TYPE = `{\n id\n idBlob\n name\n url\n urlThumbnail\n ext\n}`;\n\nconst COMMENT_TEMPLATE = `{\n id\n body\n author ${EMBEDDED_USER_TYPE}\n createdAt\n updatedAt\n edited\n deleted\n deletedAt\n}`;\n\nconst TEST_TEMPLATE = `{\n id\n name\n description\n mark\n required\n check\n idC\n}`;\n\nexport const TASK_TEMPLATE = `{\n id\n description\n createdAt\n createdBy ${EMBEDDED_USER_TYPE}\n updatedAt\n deleted\n alias\n number\n maintainableItem\n region\n addrManual\n status\n type\n result\n gmiId\n maintainableItemType\n maintainableItemName\n sptaInstalled\n processedBy ${EMBEDDED_USER_TYPE}\n responsibledBy ${EMBEDDED_USER_TYPE}\n executedBy ${EMBEDDED_USER_TYPE}\n leadedBy ${EMBEDDED_USER_TYPE}\n relatedTasks { id description }\n files ${EMBEDDED_FILE_TYPE}\n acts ${EMBEDDED_FILE_TYPE}\n deadlineAt\n planAt\n completedAt\n comments ${COMMENT_TEMPLATE}\n distributedBy ${EMBEDDED_USER_TYPE}\n distributor\n verificationTests ${TEST_TEMPLATE}\n verificationCheck\n verificationMark\n verificationComment\n deadlineStatus\n}`;\n\nexport const GET_LIST_TASK = gql`\n query allTasks($page: Int, $perPage: Int, $sortField: String, $sortOrder: String, $filter: TaskFilter) {\n items: allTasks(page: $page, perPage: $perPage, sortField: $sortField, sortOrder: $sortOrder, filter: $filter) ${TASK_TEMPLATE}\n total: _allTasksMeta(page: $page, perPage: $perPage, filter: $filter) { count }\n }\n`;\n\nexport const GET_MANY_TASKS = gql`\n query allTasks($filter: TaskFilter) {\n items: allTasks(filter: $filter) ${TASK_TEMPLATE}\n total: _allTasksMeta(filter: $filter) { count }\n }\n`;\n\nexport const GET_ONE_TASK = gql`\n query Task( $where: TaskWhereUniqueInput! ) {\n data: Task( where: $where ) ${TASK_TEMPLATE}\n }\n`;\n\nexport const UPDATE_TASK = gql`\n mutation updateTask( $where: TaskWhereUniqueInput!, $description: String, $maintainableItem: ID, $gmiId: String $region: String, $addrManual: String, $maintainableItemType: MaintainableItemType, $status: TaskStatus, $type: TaskType, $responsibledBy: UserWhereUniqueInput, $processedBy: UserWhereUniqueInput, $leadedBy: UserWhereUniqueInput, $executedBy: UserWhereUniqueInput, $relatedTasks: [TaskWhereUniqueInput], $result: TaskResult, $sptaInstalled: Boolean, $files: FilesInput, $acts: FilesInput, $deadlineAt: DateTime, $planAt: DateTime, $number: Int, $comments: CommentUpdateManyWithoutTaskInput, $maintainableItemName: String, $regionName: String, $distributedBy: UserWhereUniqueInput, $distributor: ID, $verificationTests: [TestCreateWithoutTaskInput!], $verificationTestsIds: [String!] ) {\n data: updateTask( where: $where, description: $description, maintainableItem: $maintainableItem, gmiId: $gmiId region: $region, addrManual: $addrManual, status: $status, maintainableItemType: $maintainableItemType, type: $type, responsibledBy: $responsibledBy, processedBy: $processedBy executedBy: $executedBy, leadedBy: $leadedBy, relatedTasks: $relatedTasks, result: $result, sptaInstalled: $sptaInstalled, files: $files, acts: $acts, deadlineAt: $deadlineAt, planAt: $planAt, number: $number, comments: $comments, maintainableItemName: $maintainableItemName, regionName: $regionName, distributedBy: $distributedBy, distributor: $distributor, verificationTests: $verificationTests, verificationTestsIds: $verificationTestsIds) ${TASK_TEMPLATE}\n }\n`;\n\nexport const DELETE_TASK = gql`\n mutation deleteTask($where: TaskWhereUniqueInput!) {\n data: deleteTask(where: $where) {\n id\n }\n }\n`;\n\nconst USERS_FILTER_TEMPLATE = `{\n id\n name\n resource\n filter\n}`;\n\nexport const GET_LIST_USERSFILTER = gql`\n query allUsersFilters($page: Int, $perPage: Int, $sortField: String, $sortOrder: String, $filter: UsersFilterFilter) {\n items: allUsersFilters(page: $page, perPage: $perPage, sortField: $sortField, sortOrder: $sortOrder, filter: $filter) ${USERS_FILTER_TEMPLATE}\n total: _allUsersFiltersMeta(page: $page, perPage: $perPage, filter: $filter) { count }\n }\n`;\n\nexport const GET_MANY_USERSFILTER = gql`\n query allUsersFilters($filter: UsersFilterFilter) {\n items: allUsersFilters(filter: $filter) ${USERS_FILTER_TEMPLATE}\n total: _allUsersFiltersMeta(filter: $filter) { count }\n }\n`;\n\nexport const GET_ONE_USERSFILTER = gql`\n query UsersFilter( $where: UsersFilterWhereUniqueInput! ) {\n data: UsersFilter( where: $where ) ${USERS_FILTER_TEMPLATE}\n }\n`;\n\nexport const DELETE_USERSFILTER = gql`\n mutation deleteUsersFilter($where: UsersFilterWhereUniqueInput!) {\n data: deleteUsersFilter(where: $where) {\n id\n }\n }\n`;\n\nconst USER_TEMPLATE = `{\n id\n name\n description\n createdAt\n createdBy ${EMBEDDED_USER_TYPE}\n updatedAt\n deleted\n auth\n banned\n email\n phone\n role\n notificationService\n maintainableItemTypes\n taskTypes\n regions\n filters ${USERS_FILTER_TEMPLATE} \n online\n distributor\n}`;\n\nexport const GET_LIST_USER = gql`\n query allUsers($page: Int, $perPage: Int, $sortField: String, $sortOrder: String, $filter: UserFilter) {\n items: allUsers(page: $page, perPage: $perPage, sortField: $sortField, sortOrder: $sortOrder, filter: $filter) ${USER_TEMPLATE}\n total: _allUsersMeta(page: $page, perPage: $perPage, filter: $filter) { count }\n }\n`;\n\nexport const GET_MANY_USERS = gql`\n query allUsers($filter: UserFilter) {\n items: allUsers(filter: $filter) ${USER_TEMPLATE}\n total: _allUsersMeta(filter: $filter) { count }\n }\n`;\n\nexport const GET_ONE_USER = gql`\n query User( $where: UserWhereUniqueInput! ) {\n data: User( where: $where ) ${USER_TEMPLATE}\n }\n`;\n\nexport const UPDATE_USER = gql`\n mutation updateUser( $where: UserWhereUniqueInput!, $name: String, $description: String, $auth: ID, $banned: Boolean, $email: String, $phone: String, $role: UserRole, $regions: [String], $notificationService: [NotificationService!], $maintainableItemTypes: [MaintainableItemType!], $taskTypes: [TaskType!], $distributor: ID ) {\n data: updateUser( where: $where, name: $name, description: $description, auth: $auth, banned: $banned, email: $email, phone: $phone, role: $role, regions: $regions, notificationService: $notificationService, maintainableItemTypes: $maintainableItemTypes, taskTypes: $taskTypes, distributor: $distributor) ${USER_TEMPLATE}\n }\n`;\n\nexport const DELETE_USER = gql`\n mutation deleteUser($where: UserWhereUniqueInput!) {\n data: deleteUser(where: $where) {\n id\n }\n }\n`;\n\nconst HISTORY_TEMPLATE = `{\n id\n type\n item\n name\n description\n comment\n action\n data\n createdAt\n createdBy ${EMBEDDED_USER_TYPE}\n}`;\n\nexport const GET_LIST_HISTORY = gql`\n query allHistories($page: Int, $perPage: Int, $sortField: String, $sortOrder: String, $filter: HistoryFilter) {\n items: allHistories(page: $page, perPage: $perPage, sortField: $sortField, sortOrder: $sortOrder, filter: $filter) ${HISTORY_TEMPLATE}\n total: _allHistoriesMeta(page: $page, perPage: $perPage, filter: $filter) { count }\n }\n`;\n\nexport const GET_MANY_HISTORIES = gql`\n query allHistories($filter: HistoryFilter) {\n items: allHistories(filter: $filter) ${HISTORY_TEMPLATE}\n total: _allHistoriesMeta(filter: $filter) { count }\n }\n`;\n\nexport const GET_ONE_HISTORY = gql`\n query History( $id: ID! ) {\n data: History( id: $id ) ${HISTORY_TEMPLATE}\n }\n`;\n\nconst TRASHITEM_TEMPLATE = `{\n id\n type\n item\n name\n resource\n description\n deletedAt\n deletedBy ${EMBEDDED_USER_TYPE}\n}`;\n\nexport const GET_LIST_TRASHITEM = gql`\n query allTrashItems($page: Int, $perPage: Int, $sortField: String, $sortOrder: String, $filter: TrashItemFilter) {\n items: allTrashItems(page: $page, perPage: $perPage, sortField: $sortField, sortOrder: $sortOrder, filter: $filter) ${TRASHITEM_TEMPLATE}\n total: _allTrashItemsMeta(page: $page, perPage: $perPage, filter: $filter) { count }\n }\n`;\n\nexport const GET_MANY_TRASHITEMS = gql`\n query allTrashItems($filter: TrashItemFilter) {\n items: allTrashItems(filter: $filter) ${TRASHITEM_TEMPLATE}\n total: _allTrashItemsMeta(filter: $filter) { count }\n }\n`;\n\nexport const GET_ONE_TRASHITEM = gql`\n query TrashItem( $id: ID! ) {\n data: TrashItem( id: $id ) ${TRASHITEM_TEMPLATE}\n }\n`;\n","import { buildQuery } from 'ra-data-graphql-simple';\nimport { GET_ONE, GET_LIST, GET_MANY, GET_MANY_REFERENCE, DELETE, UPDATE } from 'ra-core';\nimport { GET_LIST_TASK, GET_MANY_TASKS, GET_ONE_TASK, UPDATE_TASK, DELETE_TASK, DELETE_USERSFILTER } from './typeDefs';\nimport { GET_LIST_USER, GET_MANY_USERS, GET_ONE_USER, UPDATE_USER, DELETE_USER } from './typeDefs';\nimport { GET_LIST_HISTORY, GET_MANY_HISTORIES, GET_ONE_HISTORY } from './typeDefs';\nimport { GET_LIST_TRASHITEM, GET_MANY_TRASHITEMS, GET_ONE_TRASHITEM } from './typeDefs';\nimport { GET_LIST_USERSFILTER, GET_MANY_USERSFILTER, GET_ONE_USERSFILTER } from './typeDefs';\n\nconst customBuildQuery = (introspection) => (fetchType, resource, params) => {\n const builtQuery = buildQuery(introspection)(fetchType, resource, params);\n const { id, data, previousData } = params;\n\n if (resource === 'Task') {\n switch (fetchType) {\n case GET_ONE:\n return {\n ...builtQuery,\n query: GET_ONE_TASK,\n variables: { where: { id } },\n };\n break;\n case GET_LIST:\n case GET_MANY_REFERENCE:\n return {\n ...builtQuery,\n query: GET_LIST_TASK,\n };\n break;\n case GET_MANY:\n return {\n ...builtQuery,\n query: GET_MANY_TASKS,\n variables: {\n filter: {\n ids: params.ids.map((item) => {\n if (typeof item === 'string') return item;\n return item.id;\n }),\n },\n },\n };\n break;\n case UPDATE:\n return {\n ...builtQuery,\n query: UPDATE_TASK,\n variables: { where: { id }, ...data },\n };\n break;\n case DELETE:\n return {\n ...builtQuery,\n query: DELETE_TASK,\n variables: { where: { id } },\n };\n break;\n default:\n break;\n }\n }\n\n if (resource === 'UsersFilter') {\n switch (fetchType) {\n case GET_ONE:\n return {\n ...builtQuery,\n query: GET_ONE_USERSFILTER,\n variables: { where: { id } },\n };\n break;\n case GET_LIST:\n case GET_MANY_REFERENCE:\n return {\n ...builtQuery,\n query: GET_LIST_USERSFILTER,\n };\n break;\n case GET_MANY:\n return {\n ...builtQuery,\n query: GET_MANY_USERSFILTER,\n variables: {\n filter: {\n ids: params.ids.map((item) => {\n if (typeof item === 'string') return item;\n return item.id;\n }),\n },\n },\n };\n break;\n case UPDATE:\n return {\n ...builtQuery,\n query: UPDATE_USER,\n variables: { where: { id }, ...data },\n };\n break;\n case DELETE:\n return {\n ...builtQuery,\n query: DELETE_USERSFILTER,\n variables: { where: { id } },\n };\n break;\n default:\n break;\n }\n }\n\n if (resource === 'User') {\n switch (fetchType) {\n case GET_ONE:\n return {\n ...builtQuery,\n query: GET_ONE_USER,\n variables: { where: { id } },\n };\n break;\n case GET_LIST:\n case GET_MANY_REFERENCE:\n return {\n ...builtQuery,\n query: GET_LIST_USER,\n };\n break;\n case GET_MANY:\n return {\n ...builtQuery,\n query: GET_MANY_USERS,\n variables: {\n filter: {\n ids: params.ids.map((item) => {\n if (typeof item === 'string') return item;\n return item.id;\n }),\n },\n },\n };\n break;\n case UPDATE:\n return {\n ...builtQuery,\n query: UPDATE_USER,\n variables: { where: { id }, ...data },\n };\n break;\n case DELETE:\n return {\n ...builtQuery,\n query: DELETE_USER,\n variables: { where: { id } },\n };\n break;\n default:\n break;\n }\n }\n\n if (resource === 'History') {\n switch (fetchType) {\n case GET_ONE:\n return {\n ...builtQuery,\n query: GET_ONE_HISTORY,\n };\n break;\n case GET_LIST:\n case GET_MANY_REFERENCE:\n return {\n ...builtQuery,\n query: GET_LIST_HISTORY,\n };\n break;\n case GET_MANY:\n return {\n ...builtQuery,\n query: GET_MANY_HISTORIES,\n variables: {\n filter: {\n ids: params.ids.map((item) => {\n if (typeof item === 'string') return item;\n return item.id;\n }),\n },\n },\n };\n break;\n default:\n break;\n }\n }\n\n if (resource === 'TrashItem') {\n switch (fetchType) {\n case GET_ONE:\n return {\n ...builtQuery,\n query: GET_ONE_TRASHITEM,\n };\n break;\n case GET_LIST:\n case GET_MANY_REFERENCE:\n return {\n ...builtQuery,\n query: GET_LIST_TRASHITEM,\n };\n break;\n case GET_MANY:\n return {\n ...builtQuery,\n query: GET_MANY_TRASHITEMS,\n variables: {\n filter: {\n ids: params.ids.map((item) => {\n if (typeof item === 'string') return item;\n return item.id;\n }),\n },\n },\n };\n break;\n default:\n break;\n }\n }\n\n return builtQuery;\n};\n\nexport default customBuildQuery;\n","import buildGraphQLProvider from 'ra-data-graphql-simple';\nimport apolloCoreClient from './apolloCoreClient';\nimport decorate from './decorate';\nimport buildQuery from './builtQuery';\nimport { GET_LIST, GET_MANY, GET_MANY_REFERENCE, GET_ONE, UPDATE, UPDATE_MANY, CREATE, DELETE } from 'react-admin';\nconst buildCoreProvider = () =>\n buildGraphQLProvider({\n client: apolloCoreClient,\n buildQuery: buildQuery,\n });\n\nexport const knownResources = ['Task', 'File', 'User', 'Profile', 'History', 'TrashItem', 'UsersFilter'];\n\nexport const dataProvider = (type, resource, params) => {\n return buildCoreProvider().then(async (provider) => {\n const { params: paramsD } = await decorate(type, resource, params);\n\n return provider(type, resource, paramsD);\n });\n};\n\nexport const coreProvider = {\n create: (resource, params) => dataProvider(CREATE, resource, params),\n delete: (resource, params) => dataProvider(DELETE, resource, params),\n deleteMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n getList: (resource, params) => dataProvider(GET_LIST, resource, params),\n getMany: (resource, params) => dataProvider(GET_MANY, resource, params),\n getManyReference: (resource, params) => dataProvider(GET_MANY_REFERENCE, resource, params),\n getOne: (resource, params) => dataProvider(GET_ONE, resource, params),\n remove: (resource, params) => dataProvider('REMOVE', resource, params),\n restore: (resource, params) => dataProvider('RESTORE', resource, params),\n update: (resource, params) => dataProvider(UPDATE, resource, params),\n updateMany: () => Promise.resolve({ data: [] }), // avoids adding a context in tests\n knownResources,\n};\n\nexport default {\n dataProvider,\n knownResources,\n};\n","import buildDataProviderFactory from './ra-dataProviderFactory';\nimport dataProviderObject from './Objects';\nimport { coreProvider } from './Core/graphqlProvider';\n\nconst dataProviderFactory = buildDataProviderFactory([dataProviderObject, coreProvider]);\n\nexport default dataProviderFactory;\n","import russianMessages from 'ra-language-russian';\n\nexport default {\n resources: {\n Task: {\n name: 'Заявка |||| Заявки',\n menu: 'Заявка |||| Заявки',\n title: 'Заявка на %{type} #%{number}',\n layout: {\n main: 'Основное',\n comments: 'Комментарии',\n result: 'Результат',\n object: 'Объект',\n users: 'Пользователи',\n acts: 'Акты',\n files: 'Файлы',\n verification: 'Проверка',\n },\n fields: {\n id: 'ID',\n name: 'Название',\n description: 'Описание',\n number: 'Номер',\n gmiId: 'ID ГМИ',\n createdAt: 'Создана',\n createdAt_gte: 'Создана с',\n createdAt_lte: 'Создана по',\n createdBy: 'Создал',\n updatedAt: 'Обновлена',\n updatedAt_gte: 'Обновлена c',\n updatedAt_lte: 'Обновлена по',\n alias: 'Псевдоним',\n maintainableItem: 'Объект',\n maintainableItemType: 'Тип объекта',\n region: 'Регион',\n addrManual: 'Адрес',\n status: 'Статус',\n statusDotWithLabel: 'Статус (Подпись)',\n statusDotWithTooltip: 'Статус (Подсказка)',\n status_not: 'Статус (НЕ)',\n status_in: 'Статус (ИЛИ)',\n maintainableItemType_in: 'Тип объекта (ИЛИ)',\n type: 'Тип',\n type_not: 'Тип (НЕ)',\n type_in: 'Тип (ИЛИ)',\n result: 'Результат',\n faultDescription: 'Результат выполнения',\n sptaInstalled: 'ЗИП установлен',\n sptaNotInstalled: 'ЗИП не установлен',\n processedBy: 'Диспетчер',\n distributedBy: 'Заказчик',\n responsibledBy: 'Ответственный',\n executedBy: 'Исполнитель',\n leadedBy: 'Макроруководитель',\n oneOfUser: 'Пользователь',\n relatedTasks: 'Связанные задачи',\n files: 'Файлы',\n acts: 'Акты',\n deadlineAt: 'Срок',\n deadlineAt_gte: 'Срок с',\n deadlineAt_lte: 'Срок по',\n planAt: 'Запланирована',\n planAt_gte: 'Запланирована с',\n planAt_lte: 'Запланирована по',\n completedAt: 'Завершена',\n completedAt_gte: 'Завершена с',\n completedAt_lte: 'Завершена по',\n comment: 'Коментарий',\n comments: 'Коментарии',\n filesAttached: 'Актов: %{acts}. Файлов: %{files}',\n showComments: 'Показть коментарии',\n distributor: 'Контрагент',\n counterparty_in: 'Контрагент (ИЛИ)',\n verificationRequiredOnly: 'Необходима полная проверка',\n verificationTests: 'Проверки',\n verificationCheck: 'Проверка проведена',\n mark: 'Оценка',\n },\n enums: {\n status: {\n DRAFT: 'Новая',\n PROCESSED: 'Обработана',\n WORK: 'В работе',\n COMPLETED: 'Выполнена',\n VERCFICATION: 'В поверке',\n REPAIR: 'В ремонте',\n DEPARTUREPLANNED: 'Запланирован выезд',\n NOTACCESED: 'Нет доступа',\n AWAITRESPONSE: 'Ожидает ответа заказчика',\n RESUMED: 'Возобновлена',\n },\n maintainableItemType: {\n UUG: 'Узел учета газа',\n STM: 'Система телеметрии',\n REMOTECONTROLLER: 'Пульт управления',\n OTHER: 'Другой',\n },\n maintainableItemTypeShort: {\n UUG: 'УУГ',\n STM: 'СТМ',\n REMOTECONTROLLER: 'ПУ',\n OTHER: 'Другой',\n },\n type: {\n SCHEDULEDMAINTENANCE: 'Плановое ТО',\n UNSCHEDULEDMAINTENANCE: 'Внеплановое ТО',\n EMERGENCYREPAIR: 'Ремонт',\n VERIFICATION: 'Поверка',\n REMOTECONTROL: 'Управление пультом СТМ',\n OTHER: 'Другое',\n },\n result: {\n SUCCESS: 'Выполнена ',\n FAIL: 'Завершена неуспешно',\n NEEDREPAIR: 'Требуется ремонт',\n NEEDVERIFICATION: 'Требуется поверка',\n },\n deadline: {\n come: 'Просрочена %{deadline}',\n notcome: 'Срок %{deadline}',\n },\n },\n empty: 'Заявки отсутствуют',\n invite: 'Вы хотите создать?',\n },\n UsersFilter: {\n fields: {\n standard: 'Стандартные',\n custom: 'Пользовательские',\n },\n },\n User: {\n name: 'Пользователь |||| Пользователи',\n menu: 'Пользователь |||| Пользователи',\n fields: {\n id: 'ID',\n name: 'ФИО',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n email: 'Email',\n phone: 'Телефон',\n role: 'Роль',\n region: 'Регион',\n regions: 'Регионы',\n password: 'Пароль',\n notificationType: 'Тип уведомлений',\n notificationService: 'Сервис уведомлений',\n maintainableItemTypes: 'Типы объектов',\n taskTypes: 'Типы заявок',\n main: 'Основное',\n distributor: 'Контрагент',\n access: 'Доступ',\n notification: 'Уведомления',\n filters: 'Пользовательские фильтры',\n },\n enums: {\n maintainableItemTypes: {\n UUG: 'Узел учета газа',\n STM: 'Система телеметрии',\n REMOTECONTROLLER: 'Пульт управления',\n OTHER: 'Другой',\n },\n taskTypes: {\n SCHEDULEDMAINTENANCE: 'Плановое ТО',\n UNSCHEDULEDMAINTENANCE: 'Внеплановое ТО',\n EMERGENCYREPAIR: 'Ремонт',\n VERIFICATIONINSTALL: 'Поверка монтаж',\n VERIFICATIONUNINSTALL: 'Поверка демонтаж',\n VERIFICATION: 'Поверка',\n REMOTECONTROL: 'Управление пультом СТМ',\n OTHER: 'Другое',\n },\n notificationType: {\n CREATED: 'Создана',\n UPDATED: 'Обновлена',\n DELETED: 'Удалена навсегда',\n REMOVED: 'Удалена',\n RESTORED: 'Восстановлена',\n },\n type: {\n CREATED: 'Создана',\n UPDATED: 'Обновлена',\n DELETED: 'Удалена навсегда',\n REMOVED: 'Удалена',\n RESTORED: 'Восстановлена',\n },\n field: {\n NAME: 'Название',\n DESCRIPTION: 'Описание',\n CREATEDAT: 'Создана (время)',\n CREATEDBY: 'Создана (Пользователь)',\n UPDATEDAT: 'Обновлена (время)',\n ALIAS: 'alias',\n MAINTAINABLEITEM: 'Объект',\n MAINTAINABLEITEMTYPE: 'Тип объекта',\n REGION: 'Регион',\n ADDRMANUAL: 'Адрес',\n COMMENT: 'Коментарий',\n STATUS: 'Статус',\n TYPE: 'Тип',\n RESULT: 'Результат',\n FAULTDESCRIPTION: 'Результат выполнения',\n SPTAINSTALLED: 'ЗИП установлен',\n PROCESSEDBY: 'Назначена ()',\n RESPONSIBLEDBY: 'Ответственный',\n EXECUTEDBY: 'Исполнитель',\n RELATEDTASK: 'Связанные задачи',\n FILES: 'Файлы',\n ACTS: 'Акты',\n DEADLINEAT: 'Срок',\n PLANAT: 'Запланирована',\n COMPLETEDAT: 'Выполнена',\n },\n value: {\n DRAFT: 'Новая',\n PROCESSED: 'Обработана',\n WORK: 'В работе',\n COMPLETED: 'Выполнена',\n UUG: 'УУГ',\n STM: 'СТМ',\n REMOTECONTROLLER: 'Пульт управления',\n SCHEDULEDMAINTENANCE: 'Плановое ТО',\n UNSCHEDULEDMAINTENANCE: 'Внеплановое ТО',\n EMERGENCYREPAIR: 'Ремонт',\n VERIFICATIONINSTALL: 'Поверка монтаж',\n VERIFICATIONUNINSTALL: 'Поверка демонтаж',\n VERIFICATION: 'Поверка',\n REMOTECONTROL: 'Управление пультом СТМ',\n OTHER: 'Другое',\n SUCCESS: 'Выполнена ',\n FAIL: 'Завершена неуспешно',\n NEEDREPAIR: 'Требуется ремонт',\n NEEDVERIFICATION: 'Требуется поверка',\n come: 'Просрочена %{deadline}',\n notcome: 'Срок %{deadline}',\n },\n triggers: {\n type: {\n CREATED: 'Создана',\n UPDATED: 'Обновлена',\n DELETED: 'Удалена навсегда',\n REMOVED: 'Удалена',\n RESTORED: 'Восстановлена',\n },\n field: {\n NAME: 'Название',\n DESCRIPTION: 'Описание',\n CREATEDAT: 'Создана (время)',\n CREATEDBY: 'Создана (Пользователь)',\n UPDATEDAT: 'Обновлена (время)',\n ALIAS: 'alias',\n MAINTAINABLEITEM: 'Объект',\n MAINTAINABLEITEMTYPE: 'Тип объекта',\n REGION: 'Регион',\n ADDRMANUAL: 'Адрес',\n COMMENT: 'Коментарий',\n STATUS: 'Статус',\n TYPE: 'Тип',\n RESULT: 'Результат',\n FAULTDESCRIPTION: 'Результат выполнения',\n SPTAINSTALLED: 'ЗИП установлен',\n PROCESSEDBY: 'Назначена ()',\n RESPONSIBLEDBY: 'Ответственный',\n EXECUTEDBY: 'Исполнитель',\n RELATEDTASK: 'Связанные задачи',\n FILES: 'Файлы',\n ACTS: 'Акты',\n DEADLINEAT: 'Срок',\n PLANAT: 'Запланирована',\n COMPLETEDAT: 'Выполнена',\n },\n value: {\n DRAFT: 'Новая',\n PROCESSED: 'Обработана',\n WORK: 'В работе',\n COMPLETED: 'Выполнена',\n UUG: 'УУГ',\n STM: 'СТМ',\n REMOTECONTROLLER: 'Пульт управления',\n SCHEDULEDMAINTENANCE: 'Плановое ТО',\n UNSCHEDULEDMAINTENANCE: 'Внеплановое ТО',\n EMERGENCYREPAIR: 'Ремонт',\n VERIFICATIONINSTALL: 'Поверка монтаж',\n VERIFICATIONUNINSTALL: 'Поверка демонтаж',\n REMOTECONTROL: 'Управление пультом СТМ',\n VERIFICATION: 'Поверка',\n OTHER: 'Другое',\n SUCCESS: 'Выполнена ',\n FAIL: 'Завершена неуспешно',\n NEEDREPAIR: 'Требуется ремонт',\n NEEDVERIFICATION: 'Требуется поверка',\n come: 'Просрочена %{deadline}',\n notcome: 'Срок %{deadline}',\n },\n },\n notificationService: {\n EMAIL: 'Почта',\n SMS: 'sms',\n },\n role: {\n GUEST: 'Гость',\n SUPERADMIN: 'Суперадмин',\n ADMIN: 'Администратор',\n DISPATCHER: 'Диспетчер',\n MANAGER: 'Менеджер',\n EMPLOYEE: 'Сервисный инженер',\n SERVICE: 'Сервис',\n DISTRIBUTOR: 'Заказчик',\n MACROLEADER: 'Макроруководитель',\n },\n tabs: {\n staff: 'Сотрудники',\n system: 'Системные',\n },\n },\n empty: 'Пользователи отсутствуют',\n invite: 'Вы хотите создать?',\n },\n ConstructionObject: {\n name: 'Обслуживаемый объект |||| Обслуживаемые объекты',\n menu: 'Объект |||| Объекты',\n layout: {\n main: 'Основное',\n location: 'Расположение',\n acts: 'Акты',\n files: 'Файлы',\n assemblyActs: 'Акты монтажа',\n assemblyFiles: 'Файлы монтажа',\n equipments: 'Состав оборудования',\n defects: 'Неисправности',\n equipmentName: 'Наименование оборудования',\n comments: 'Коментарии',\n projectDocs: 'Проектная документация',\n },\n fields: {\n id: 'ID',\n type: 'Тип',\n name: 'Название',\n gmiId: 'ID ГМИ',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n inventoryNumber: 'Инвентарный номер',\n region: 'Регион',\n manualAddr: 'Адрес',\n equipmentName: 'Наименование оборудования',\n equipments: 'Состав оборудования',\n count: 'Количество, шт.',\n counterparty: 'Контрагент',\n eutpId: 'ЕИТП',\n telemetrySystem: 'Тип системы телеметрии',\n tasks: 'Заявки',\n files: 'Файлы',\n acts: 'Акты',\n projectDocs: 'Проектная документация',\n assemblyActs: 'Акты монтажа',\n assemblyFiles: 'Файлы монтажа',\n updateReason: 'Причина редактирования',\n defects: 'Неисправности',\n factoryNumber: 'Заводской номер',\n isArchived: 'Архивный',\n number: 'Номер',\n alias: 'Псевдоним',\n maintainableItem: 'Объект',\n maintainableItemType: 'Тип объекта',\n addrManual: 'Адрес',\n status: 'Статус',\n result: 'Результат',\n faultDescription: 'Результат выполнения',\n sptaInstalled: 'ЗИП установлен',\n sptaNotInstalled: 'ЗИП не установлен',\n processedBy: 'Диспетчер',\n responsibledBy: 'Ответственный',\n executedBy: 'Исполнитель',\n oneOfUser: 'Пользователь',\n relatedTasks: 'Связанные задачи',\n deadlineAt: 'Срок',\n planAt: 'Запланирована',\n completedAt: 'Завершена',\n comment: 'Коментарий',\n comments: 'Коментарии',\n action: 'Действие',\n },\n enums: {\n type: {\n STM: 'Система телеметрии',\n UUG: 'Узел учета газа',\n REMOTECONTROLLER: 'Пульт управления',\n CONTROLLER: 'Контроллер',\n METERCOMPLEX: 'Измерительный комплекс',\n METER: 'Счетчик',\n CORRECTOR: 'Корректор',\n PRESSUREMETER: 'Датчик давления ',\n FILTER: 'Фильтр',\n THERMOMETER: 'Термометр',\n IBP: 'ИБП',\n MODULE: 'Модуль',\n MODEM: 'Модем',\n EXTERNALANTENNA: 'Внешняя антенна',\n BATTARY: 'Аккумулятор',\n BIZ: 'БИЗ',\n CONVERTER: 'Преобразователь',\n AUTOSWITCH: 'Выключатель автоматический',\n OTHER: 'Другой тип',\n SCHEDULEDMAINTENANCE: 'Плановое ТО',\n UNSCHEDULEDMAINTENANCE: 'Внеплановое ТО',\n EMERGENCYREPAIR: 'Ремонт',\n VERIFICATION: 'Поверка',\n REMOTECONTROL: 'Управление пультом СТМ',\n },\n action: {\n CREATE: 'Создан',\n UPDATE: 'Обновлен',\n DELETE: 'Удален навсегда',\n REMOVE: 'Удален',\n RESTORE: 'Восстановлен',\n },\n result: {\n SUCCESS: 'Выполнена ',\n FAIL: 'Завершена неуспешно',\n NEEDREPAIR: 'Требуется ремонт',\n NEEDVERIFICATION: 'Требуется поверка',\n },\n equipments: {\n type: {\n CONTROLLER: 'Контроллер',\n METERCOMPLEX: 'Измерительный комплекс',\n METER: 'Счетчик',\n CORRECTOR: 'Корректор',\n PRESSUREMETER: 'Датчик давления ',\n FILTER: 'Фильтр',\n THERMOMETER: 'Термометр',\n IBP: 'ИБП',\n MODULE: 'Модуль',\n MODEM: 'Модем',\n EXTERNALANTENNA: 'Внешняя антенна',\n BATTARY: 'Аккумулятор',\n BIZ: 'БИЗ',\n CONVERTER: 'Преобразователь',\n AUTOSWITCH: 'Выключатель автоматический',\n OTHER: 'Другой тип',\n },\n },\n },\n empty: 'Обслуживаемые объекты отсутствуют',\n invite: 'Вы хотите создать?',\n },\n Counterparty: {\n name: 'Контрагент |||| Контрагенты',\n menu: 'Контрагент |||| Контрагенты',\n fields: {\n id: 'ID',\n name: 'Название',\n location: 'Регион',\n gmiId: 'ID ГМИ',\n users: 'Сотрудники',\n maintainableItems: 'Объекты',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n email: 'Email',\n phone: 'Телефон',\n inventoryNumber: 'Инвентарный номер',\n manualAddr: 'Адрес',\n role: 'Роль',\n region: 'Регион',\n regions: 'Регионы',\n type: 'Тип',\n defaultDispatcherId: 'Дежурный диспетчер',\n defaultManagerId: 'Дежурный менеджер',\n defaultMacroleaderId: 'Макроруководитель',\n tests: 'Тесты',\n },\n enums: {\n type: {\n UUG: 'Узел учета газа',\n STM: 'Система телеметрии',\n REMOTECONTROLLER: 'Пульт управления',\n OTHER: 'Другой',\n },\n role: {\n GUEST: 'Гость',\n SUPERADMIN: 'Суперадмин',\n ADMIN: 'Администратор',\n DISPATCHER: 'Диспетчер',\n MANAGER: 'Менеджер',\n EMPLOYEE: 'Сервисный инженер',\n SERVICE: 'Сервис',\n DISTRIBUTOR: 'Заказчик',\n MACROLEADER: 'Макроруководитель',\n },\n },\n },\n Defect: {\n name: 'Неисправность |||| Неисправности',\n menu: 'Неисправность |||| Неисправности',\n fields: {\n id: 'ID',\n type: 'Тип',\n name: 'Название',\n description: 'Описание',\n },\n empty: 'Неисправности отсутствуют',\n invite: 'Вы хотите создать?',\n },\n Test: {\n name: 'Тест |||| Тесты',\n menu: 'Тест |||| Тесты',\n fields: {\n id: 'ID',\n name: 'Название',\n description: 'Описание',\n required: 'Обязательный',\n mark: 'Оценка',\n constructionObjectsTypes: 'Типы объектов',\n },\n enums: {\n constructionObjectsTypes: {\n UUG: 'УУГ',\n STM: 'СТМ',\n REMOTECONTROLLER: 'Пульт управления',\n OTHER: 'Другой',\n },\n },\n },\n TelemetrySystem: {\n name: 'Система телеметрии |||| Системы телеметрии',\n menu: 'СТМ |||| СТМ',\n fields: {\n id: 'ID',\n name: 'Название',\n description: 'Описание',\n type: 'Тип',\n count: 'Количество',\n equipments: 'Состав оборудования по умолчанию',\n factoryNumber: 'Заводской номер',\n },\n enums: {\n equipments: {\n type: {\n CONTROLLER: 'Контроллер',\n METERCOMPLEX: 'Измерительный комплекс',\n METER: 'Счетчик',\n CORRECTOR: 'Корректор',\n PRESSUREMETER: 'Датчик давления ',\n FILTER: 'Фильтр',\n THERMOMETER: 'Термометр',\n IBP: 'ИБП',\n MODULE: 'Модуль',\n MODEM: 'Модем',\n EXTERNALANTENNA: 'Внешняя антенна',\n BATTARY: 'Аккумулятор',\n BIZ: 'БИЗ',\n CONVERTER: 'Преобразователь',\n AUTOSWITCH: 'Выключатель автоматический',\n OTHER: 'Другой тип',\n },\n },\n type: {\n CONTROLLER: 'Контроллер',\n METERCOMPLEX: 'Измерительный комплекс',\n METER: 'Счетчик',\n CORRECTOR: 'Корректор',\n PRESSUREMETER: 'Датчик давления ',\n FILTER: 'Фильтр',\n THERMOMETER: 'Термометр',\n IBP: 'ИБП',\n MODULE: 'Модуль',\n MODEM: 'Модем',\n EXTERNALANTENNA: 'Внешняя антенна',\n BATTARY: 'Аккумулятор',\n BIZ: 'БИЗ',\n CONVERTER: 'Преобразователь',\n AUTOSWITCH: 'Выключатель автоматический',\n OTHER: 'Другой тип',\n },\n },\n empty: 'Системы телеметрии отсутствуют',\n invite: 'Вы хотите создать?',\n },\n EquipmentTemplate: {\n name: 'Шаблон оборудования |||| Шаблоны оборудования',\n menu: 'Шаблон |||| Шаблоны',\n fields: {\n id: 'ID',\n name: 'Название',\n description: 'Описание',\n type: 'Тип',\n count: 'Количество',\n region: 'Регион',\n equipments: 'Состав оборудования по умолчанию',\n factoryNumber: 'Заводской номер',\n },\n enums: {\n equipments: {\n type: {\n CONTROLLER: 'Контроллер',\n METERCOMPLEX: 'Измерительный комплекс',\n METER: 'Счетчик',\n CORRECTOR: 'Корректор',\n PRESSUREMETER: 'Датчик давления ',\n FILTER: 'Фильтр',\n THERMOMETER: 'Термометр',\n OTHER: 'Другой тип',\n IBP: 'ИБП',\n MODULE: 'Модуль',\n MODEM: 'Модем',\n EXTERNALANTENNA: 'Внешняя антенна',\n BATTARY: 'Аккумулятор',\n BIZ: 'БИЗ',\n CONVERTER: 'Преобразователь',\n AUTOSWITCH: 'Выключатель автоматический',\n },\n },\n type: {\n CONTROLLER: 'Контроллер',\n METERCOMPLEX: 'Измерительный комплекс',\n METER: 'Счетчик',\n CORRECTOR: 'Корректор',\n PRESSUREMETER: 'Датчик давления ',\n FILTER: 'Фильтр',\n THERMOMETER: 'Термометр',\n OTHER: 'Другой тип',\n IBP: 'ИБП',\n MODULE: 'Модуль',\n MODEM: 'Модем',\n EXTERNALANTENNA: 'Внешняя антенна',\n BATTARY: 'Аккумулятор',\n BIZ: 'БИЗ',\n CONVERTER: 'Преобразователь',\n AUTOSWITCH: 'Выключатель автоматический',\n },\n },\n empty: 'Шаблоны оборудования отсутствуют',\n invite: 'Вы хотите создать?',\n },\n EquipmentCatalog: {\n name: 'Оборудование |||| Оборудование',\n menu: 'Оборудование |||| Оборудование',\n fields: {\n id: 'ID',\n name: 'Название',\n description: 'Описание',\n type: 'Тип',\n factoryNumber: 'Заводской номер',\n count: 'Количество, шт.',\n },\n enums: {\n type: {\n CONTROLLER: 'Контроллер',\n METERCOMPLEX: 'Измерительный комплекс',\n METER: 'Счетчик',\n CORRECTOR: 'Корректор',\n PRESSUREMETER: 'Датчик давления ',\n FILTER: 'Фильтр',\n THERMOMETER: 'Термометр',\n OTHER: 'Другой тип',\n IBP: 'ИБП',\n MODULE: 'Модуль',\n MODEM: 'Модем',\n EXTERNALANTENNA: 'Внешняя антенна',\n BATTARY: 'Аккумулятор',\n BIZ: 'БИЗ',\n CONVERTER: 'Преобразователь',\n AUTOSWITCH: 'Выключатель автоматический',\n },\n },\n empty: 'Оборудование отсутствует',\n invite: 'Вы хотите создать?',\n },\n Region: {\n name: 'Регион |||| Регионы',\n menu: 'Регион |||| Регионы',\n fields: {\n id: 'ID',\n name: 'Название',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n level: 'Уровень',\n unrestrictedName: 'Полное наименование',\n typeShort: 'Тип',\n },\n empty: 'Регионы отсутствуют',\n invite: 'Вы хотите создать?',\n },\n File: {\n name: 'Файл заявки |||| Файлы заявок',\n menu: 'Файл заявки |||| Файлы заявок',\n fields: {\n id: 'ID',\n name: 'Название',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n url: 'Ссылка',\n urlThumbnail: 'Ссылка на миниатюру',\n catalog: 'Каталог',\n ext: 'Расширение',\n size: 'Размер',\n },\n },\n ConstructionObjectFile: {\n name: 'Файл объекта |||| Файлы объектов',\n menu: 'Файл объекта |||| Файлы объектов',\n fields: {\n id: 'ID',\n name: 'Название',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n url: 'Ссылка',\n urlThumbnail: 'Ссылка на миниатюру',\n catalog: 'Каталог',\n ext: 'Расширение',\n size: 'Размер',\n },\n },\n Trigger: {\n fields: {\n id: 'ID',\n type: 'Тип уведомления',\n field: 'Поле заявки',\n value: 'Значение',\n },\n enums: {\n type: {\n CREATED: 'Создана',\n UPDATED: 'Обновлена',\n DELETED: 'Удалена навсегда',\n REMOVED: 'Удалена',\n RESTORED: 'Восстановлена',\n },\n field: {\n NAME: 'Название',\n DESCRIPTION: 'Описание',\n CREATEDAT: 'Создана (время)',\n CREATEDBY: 'Создана (Пользователь)',\n UPDATEDAT: 'Обновлена (время)',\n ALIAS: 'alias',\n MAINTAINABLEITEM: 'Объект',\n MAINTAINABLEITEMTYPE: 'Тип объекта',\n REGION: 'Регион',\n ADDRMANUAL: 'Адрес',\n COMMENT: 'Коментарий',\n STATUS: 'Статус',\n TYPE: 'Тип',\n RESULT: 'Результат',\n FAULTDESCRIPTION: 'Результат выполнения',\n SPTAINSTALLED: 'ЗИП установлен',\n PROCESSEDBY: 'Назначена ()',\n RESPONSIBLEDBY: 'Ответственный',\n EXECUTEDBY: 'Исполнитель',\n RELATEDTASK: 'Связанные задачи',\n FILES: 'Файлы',\n ACTS: 'Акты',\n DEADLINEAT: 'Срок',\n PLANAT: 'Запланирована',\n COMPLETEDAT: 'Выполнена',\n },\n value: {\n DRAFT: 'Новая',\n PROCESSED: 'Обработана',\n WORK: 'В работе',\n COMPLETED: 'Выполнена',\n UUG: 'УУГ',\n STM: 'СТМ',\n REMOTECONTROLLER: 'Пульт управления',\n SCHEDULEDMAINTENANCE: 'Плановое ТО',\n UNSCHEDULEDMAINTENANCE: 'Внеплановое ТО',\n EMERGENCYREPAIR: 'Ремонт',\n VERIFICATIONINSTALL: 'Поверка монтаж',\n VERIFICATIONUNINSTALL: 'Поверка демонтаж',\n VERIFICATION: 'Поверка',\n OTHER: 'Другое',\n SUCCESS: 'Выполнена ',\n FAIL: 'Завершена неуспешно',\n NEEDREPAIR: 'Требуется ремонт',\n NEEDVERIFICATION: 'Требуется поверка',\n come: 'Просрочена %{deadline}',\n notcome: 'Срок %{deadline}',\n },\n },\n },\n TrashItem: {\n name: 'Корзина',\n menu: 'Корзина',\n fields: {\n id: 'ID',\n type: 'Тип',\n name: 'Название',\n description: 'Описание',\n deletedBy: 'Удалил',\n deletedAt: 'Удален',\n },\n enums: {\n type: {\n Task: 'Заявка',\n User: 'Пользователь',\n },\n },\n },\n History: {\n name: 'История',\n menu: 'История',\n fields: {\n id: 'ID',\n type: 'Тип',\n name: 'Название',\n action: 'Действие',\n description: 'Описание',\n comment: 'Коментарии',\n 'data.data': 'Текущее состояние',\n 'data.previous': 'Предыдущее состояние',\n createdAt: 'Дата',\n createdBy: 'Пользователь',\n },\n enums: {\n action: {\n CREATED: 'Создана',\n UPDATED: 'Обновлена',\n DELETED: 'Удалена навсегда',\n REMOVED: 'Удалена',\n RESTORED: 'Восстановлена',\n },\n type: {\n Task: 'Заявка',\n User: 'Пользователь',\n },\n },\n },\n Comment: {\n name: 'Комментарий |||| Комментарии',\n fields: {\n body: 'Комментарий',\n createdAt: 'Создан',\n updatedAt: 'Обновлен',\n },\n },\n ObjectHistory: {\n name: 'История',\n menu: 'История',\n fields: {\n id: 'ID',\n type: 'Тип',\n name: 'Название',\n action: 'Действие',\n description: 'Описание',\n comment: 'Коментарии',\n 'data.data': 'Текущее состояние',\n 'data.previous': 'Предыдущее состояние',\n createdAt: 'Дата',\n createdBy: 'Пользователь',\n },\n enums: {\n action: {\n CREATE: 'Создана',\n UPDATE: 'Обновлена',\n DELETE: 'Удалена навсегда',\n REMOVE: 'Удалена',\n RESTORE: 'Восстановлена',\n },\n type: {\n Task: 'Заявка',\n User: 'Пользователь',\n },\n },\n },\n ImportExport: {\n name: 'Импорт / Экспорт',\n menu: 'Импорт / Экспорт',\n fields: {\n id: 'ID',\n type: 'Тип',\n name: 'Название',\n description: 'Описание',\n },\n layout: {\n import: 'Импорт',\n export: 'Экспорт',\n },\n empty: 'Импорт / Экспорт отсутствуют',\n invite: 'Вы хотите создать?',\n },\n },\n apps: {\n title: 'Приложения WEBTLM',\n },\n menu: {\n groups: {\n default: '',\n resources: 'Ресурсы',\n access: 'Доступ',\n directories: 'Справочники',\n utils: 'Утилиты',\n },\n },\n ra: {\n action: {\n ...russianMessages.ra.action,\n unselect: 'снять выделение',\n show_history: 'Показать историю',\n show_related_tasks: 'Показать заявки',\n delete: 'Удалить навсегда',\n download_files: 'Скачать файлы',\n download_all_assemblyFiles: 'Скачать файлы монтажа',\n download: 'Скачать',\n download_all_files: 'Скачать все файлы',\n download_acts: 'Скачать акты',\n download_all_assemblyActs: 'Скачать акты монтажа',\n download_all_projectDocs: 'Скачать проектную документацию',\n download_all_acts: 'Скачать все акты',\n download_all: 'Скачать всё',\n restore: 'Восстановить',\n create_and_continue: 'Coздать и продолжить',\n create_and_process: 'Coздать и обработать',\n save_and_continue: 'Сохранить и продолжить',\n process: 'Обработать',\n work: 'Вработу',\n complete: 'Завершить',\n more: 'Дополнительно',\n save_filter: 'Сохранить фильтр',\n chooseFilter: 'Выбрать фильтр',\n chooseTemplate: 'Выбрать шаблон',\n 'save-without-act': 'Сохранить без акта',\n create_equipment_catalog: 'Добавить новое оборудование',\n create_task: 'Создать заявку',\n select_column: 'Выбрать колонки',\n trash_open: 'Корзина',\n export_max_5000: 'Экспорт (первые 5000)',\n save_with_act: 'Сохранить и создать акт',\n ban: 'Заблокировать',\n unban: 'Разблокировать',\n apply_filter: 'Найти',\n bulk_actions: '%{smart_count} выбран |||| %{smart_count} выбрано |||| %{smart_count} выбрано',\n },\n boolean: {\n ...russianMessages.ra.boolean,\n },\n page: {\n ...russianMessages.ra.page,\n no_data: 'Нет данных',\n empty: 'Здесь ничего нет',\n invite: 'Вы хотите создать?',\n removed: 'Удалено',\n },\n input: {\n ...russianMessages.ra.input,\n password: {\n toggle_visible: 'Показать',\n toggle_hidden: 'Скрыть',\n },\n },\n message: {\n ...russianMessages.ra.message,\n delete_title_forever: 'Удалить',\n delete_content_forever: 'Вы уверены, что хотите удалить %{resource} %{name} навсегда?',\n all: 'Все',\n deleted: 'Сообщение удалено...',\n removed: 'Ресурс перемещен в Корзину',\n },\n navigation: {\n ...russianMessages.ra.navigation,\n },\n auth: {\n ...russianMessages.ra.auth,\n permissions_error: 'Нет доступа',\n 'User with such login banned.': 'Пользователь заблокирован. Обратитесь к администратору',\n 'User is banned': 'Пользователь заблокирован. Обратитесь к администратору',\n 'User with such login does not exist.': 'Пользователь с таким логином не существует',\n 'User with such login and password does not exist.': 'Пользователь с таким логином и паролем не существует',\n 'Аuthorization error!': 'Ошибка авторизации!',\n },\n notification: {\n ...russianMessages.ra.notification,\n profile_saved: 'Профиль сохранен',\n moved_to_trash:\n '1 элемент перемещен в корзину |||| %{smart_count} элемента перемещено в корзину |||| %{smart_count} элементов перемещено в корзину',\n restored_from_trash:\n '1 элемент восстановлен из корзины |||| %{smart_count} элемента восстановлено из корзины |||| %{smart_count} элементов восстановлено из корзины',\n deleted_from_trash:\n '1 элемент удален из корзины |||| %{smart_count} элементов(а) удалено из корзины |||| %{smart_count} элементов(а) удалено из корзины',\n download_files_empty:\n 'В 1 заявке отсутствуют файлы |||| В %{smart_count} заявках отсутствуют файлы |||| В %{smart_count} заявках отсутствуют файлы',\n download_acts_empty:\n 'В 1 заявке отсутствуют акты |||| В %{smart_count} заявках отсутствуют акты |||| В %{smart_count} заявках отсутствуют акты',\n download_object_files_empty:\n 'В 1 объекте отсутствуют файлы |||| В %{smart_count} объектах отсутствуют файлы |||| В %{smart_count} объектах отсутствуют файлы',\n download_object_acts_empty:\n 'В 1 объекте отсутствуют акты |||| В %{smart_count} объектах отсутствуют акты |||| В %{smart_count} объектах отсутствуют акты',\n user_filter_saved: 'Фильтр %{name} сохранен',\n user_banned: 'Пользователь заблокирован',\n user_unbanned: 'Пользователь разблокирован',\n },\n validation: {\n ...russianMessages.ra.validation,\n ip_invalid: 'Должен быть в формате 255.255.255.255',\n phone_invalid: 'Должен быть в формате +7 (999) 999-9999',\n responsibledBy_required: 'Ответственный обязателен если обработана',\n files_required: 'Файлы обязательны если завершена',\n acts_required: 'Акты обязательны если завершена',\n result_required: 'Результат обязателен если завершена',\n 'min-zero': 'Введите положительное число',\n comment_required: 'При изменении статуса заявки, обязательно для заполнения',\n max_number: 'Максимальный возможный номер 999999',\n },\n },\n};\n","import polyglotI18nProvider from 'ra-i18n-polyglot';\nimport englishMessages from 'ra-language-english';\nimport russianMessages from './ru';\n\nconst messages = {\n en: englishMessages,\n ru: russianMessages,\n};\n\nexport const i18nProvider = polyglotI18nProvider((locale) => messages[locale], 'ru');\n","import { createMuiTheme } from '@material-ui/core/styles';\n\nexport const theme = createMuiTheme({\n palette: {\n //type: \"dark\",\n primary: {\n light: '#5a8bcf',\n main: '#316FC4',\n dark: '#224d89',\n contrastText: '#fff',\n },\n secondary: {\n light: '#ffcd38',\n main: '#F0A92E',\n dark: '#b28704',\n contrastText: '#fff',\n },\n background: {\n default: '#eceff1',\n },\n link: {\n main: '#673ab7',\n },\n },\n sidebar: {\n width: 240,\n closedWidth: 72,\n },\n overrides: {\n MuiPaper: {\n elevation1: {\n boxShadow:\n '0px 3px 5px -1px rgba(0, 0, 0, 0.06), 0px 6px 10px 0px rgba(0, 0, 0, 0.042), 0px 1px 18px 0px rgba(0, 0, 0, 0.036)',\n },\n },\n MuiFilledInput: {\n root: {\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n '&$disabled': {\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n },\n },\n },\n MuiTableCell: {\n sizeSmall: {\n padding: '6px 8px',\n '&:first-child': {\n paddingLeft: 16,\n },\n '&:last-child': {\n paddingRight: 16,\n },\n },\n },\n MuiListItemIcon: {\n root: {\n minWidth: 'unset',\n marginRight: 12,\n },\n },\n MuiFormControl: {\n fullWidth: true,\n root: {\n width: '100%',\n },\n },\n MuiChip: {\n root: {\n margin: 2,\n borderRadius: 8,\n },\n },\n },\n});\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport Button from '@material-ui/core/Button';\nimport { makeStyles } from '@material-ui/core/styles';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport classnames from 'classnames';\n\nimport { useAuthenticated, useTranslate, Title } from 'react-admin';\n\nconst useStyles = makeStyles(\n (theme) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n [theme.breakpoints.up('md')]: {\n height: '100%',\n },\n [theme.breakpoints.down('sm')]: {\n height: '100vh',\n marginTop: '-3em',\n },\n },\n icon: {\n width: '9em',\n height: '9em',\n },\n message: {\n textAlign: 'center',\n fontFamily: 'Roboto, sans-serif',\n opacity: 0.5,\n margin: '0 1em',\n },\n toolbar: {\n textAlign: 'center',\n marginTop: '2em',\n },\n ml3: {\n marginLeft: 16,\n },\n }),\n { name: 'RemoveLayout' },\n);\n\nconst goBack = () => {\n window.history.go(-1);\n};\n\nconst stopPropagation = (e) => {\n e.stopPropagation();\n};\n\nconst Remove = (props) => {\n const { className, classes: classesOverride, resource, basePath, record, title, defaultTitle, ...rest } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n useAuthenticated();\n return (\n
\n \n <div className={classes.message}>\n <DeleteIcon className={classes.icon} />\n <h1>{translate('ra.page.removed')}</h1>\n <div>{translate('ra.message.removed')}.</div>\n </div>\n <div className={classes.toolbar}>\n <Button variant=\"contained\" component={Link} to={basePath} className={classes.ml3}>\n {translate('ra.action.back')}\n </Button>\n <Button variant=\"contained\" component={Link} to={`/TrashItem`} className={classes.ml3}>\n {translate('ra.action.trash_open')}\n </Button>\n </div>\n </div>\n );\n};\n\nconst sanitizeRestProps = ({ staticContext, history, location, match, ...rest }) => rest;\n\nRemove.propTypes = {\n className: PropTypes.string,\n classes: PropTypes.object,\n\n location: PropTypes.object,\n};\n\nexport default Remove;\n","import React, { cloneElement, useMemo } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport {\n useEditController,\n EditActions as DefaultActions,\n ComponentPropType,\n SideEffectContext,\n TitleForRecord,\n EditContextProvider,\n} from 'react-admin';\nimport Remove from './Remove';\n\nconst Edit = (props) => (\n <EditContextProvider value={{ ...props }}>\n <EditView {...props} {...useEditController(props)} />\n </EditContextProvider>\n);\n\nEdit.propTypes = {\n actions: PropTypes.element,\n aside: PropTypes.element,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n hasCreate: PropTypes.bool,\n hasEdit: PropTypes.bool,\n hasShow: PropTypes.bool,\n hasList: PropTypes.bool,\n id: PropTypes.any.isRequired,\n resource: PropTypes.string.isRequired,\n title: PropTypes.node,\n successMessage: PropTypes.string,\n onSuccess: PropTypes.func,\n onFailure: PropTypes.func,\n transform: PropTypes.func,\n undoable: PropTypes.bool,\n};\n\nexport const EditView = (props) => {\n const {\n actions,\n aside,\n basePath,\n children,\n classes: classesOverride,\n className,\n component: Content,\n defaultTitle,\n hasList,\n hasShow,\n record,\n redirect,\n resource,\n save,\n setOnSuccess,\n setOnFailure,\n setTransform,\n saving,\n title,\n undoable,\n version,\n ...rest\n } = props;\n const classes = useStyles(props);\n\n const sideEffectContextValue = useMemo(\n () => ({ setOnSuccess, setOnFailure, setTransform }),\n [setOnFailure, setOnSuccess, setTransform],\n );\n\n if (record && record.deleted) {\n return <Remove resource={resource} basePath={basePath} record={record} title={title} defaultTitle={defaultTitle} />;\n }\n\n const finalActions = typeof actions === 'undefined' && hasShow ? <DefaultActions /> : actions;\n\n if (!children) {\n return null;\n }\n return (\n <SideEffectContext.Provider value={sideEffectContextValue}>\n <div className={classnames('edit-page', classes.root, className)} {...sanitizeRestProps(rest)}>\n <TitleForRecord title={title} record={record} defaultTitle={defaultTitle} />\n {finalActions &&\n cloneElement(finalActions, {\n basePath,\n data: record,\n hasShow,\n hasList,\n resource,\n // Ensure we don't override any user provided props\n ...finalActions.props,\n })}\n <div\n className={classnames(classes.main, {\n [classes.noActions]: !finalActions,\n })}\n >\n <Content className={classes.card}>\n {record &&\n React.Children.map(children, (field, index) =>\n React.isValidElement(field)\n ? React.cloneElement(field, {\n key: index,\n basePath,\n record,\n // redirect:\n // typeof children.props.redirect ===\n // 'undefined'\n // ? redirect\n // : children.props.redirect,\n resource,\n save,\n saving,\n undoable,\n version,\n })\n : null,\n )}\n </Content>\n {aside &&\n React.cloneElement(aside, {\n basePath,\n record,\n resource,\n version,\n save,\n saving,\n })}\n </div>\n </div>\n </SideEffectContext.Provider>\n );\n};\n\nEditView.propTypes = {\n actions: PropTypes.element,\n aside: PropTypes.element,\n basePath: PropTypes.string,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n component: ComponentPropType,\n defaultTitle: PropTypes.any,\n hasList: PropTypes.bool,\n hasShow: PropTypes.bool,\n record: PropTypes.object,\n redirect: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n resource: PropTypes.string,\n save: PropTypes.func,\n title: PropTypes.node,\n version: PropTypes.number,\n onSuccess: PropTypes.func,\n onFailure: PropTypes.func,\n setOnSuccess: PropTypes.func,\n setOnFailure: PropTypes.func,\n setTransform: PropTypes.func,\n};\n\nEditView.defaultProps = {\n classes: {},\n component: 'div',\n};\n\nconst useStyles = makeStyles(\n {\n root: {},\n main: {\n display: 'flex',\n },\n noActions: {\n marginTop: '1em',\n },\n card: {\n flex: '1 1 auto',\n },\n },\n { name: 'RaEdit' },\n);\n\nconst sanitizeRestProps = ({\n hasCreate = null,\n hasEdit = null,\n history = null,\n id = null,\n loaded = null,\n loading = null,\n location = null,\n match = null,\n onFailure = null,\n onSuccess = null,\n options = null,\n permissions = null,\n successMessage = null,\n transform = null,\n ...rest\n}) => rest;\n\nexport default Edit;\n","const sanitizeRestProps = ({\n addLabel,\n allowEmpty,\n basePath,\n cellClassName,\n className,\n emptyText,\n formClassName,\n fullWidth,\n headerClassName,\n label,\n linkType,\n link,\n locale,\n record,\n resource,\n sortable,\n sortBy,\n sortByOrder,\n source,\n textAlign,\n translateChoice,\n ...props\n}) => props;\n\nexport default sanitizeRestProps;\n","import React, { cloneElement, Children } from 'react';\nimport Card from '@material-ui/core/Card';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate } from 'react-admin';\nimport sanitizeRestProps from './sanitizeRestProps';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(),\n '&:first-child': {\n marginTop: 0,\n },\n '&:last-child': {\n marginBottom: 0,\n },\n },\n main: {},\n}));\n\nconst BlankLayout = ({\n children,\n component: Component = Card,\n classes: classesOverride,\n className,\n resource,\n basePath,\n record,\n version,\n label,\n ...props\n}) => {\n const classes = useStyles({ classes: classesOverride });\n const translate = useTranslate();\n if (!record) return null;\n return (\n <div className={`${classes.root} ${className}`}>\n {label && (\n <Typography variant=\"subtitle2\" color=\"textSecondary\" gutterBottom noWrap>\n {translate(`resources.${resource}.layout.${label}`)}\n </Typography>\n )}\n <Component className={classes.main}>\n {cloneElement(Children.only(children), {\n resource,\n basePath,\n record,\n version,\n ...sanitizeRestProps(props),\n })}\n </Component>\n </div>\n );\n};\n\nexport default BlankLayout;\n","const sanitizeRestProps = ({\n addLabel,\n allowEmpty,\n basePath,\n cellClassName,\n className,\n emptyText,\n formClassName,\n fullWidth,\n headerClassName,\n label,\n linkType,\n link,\n locale,\n record,\n resource,\n sortable,\n sortBy,\n sortByOrder,\n source,\n textAlign,\n translateChoice,\n ...props\n}) => props;\n\nexport default sanitizeRestProps;\n","import React from 'react';\nimport Chip from '@material-ui/core/Chip';\nimport { makeStyles } from '@material-ui/core/styles';\nimport get from 'lodash/get';\nimport { useTranslate } from 'react-admin';\nimport sanitizeRestProps from './sanitizeRestProps';\n\nconst useChipStyles = makeStyles((theme) => ({\n root: {},\n label: {\n display: 'block',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n}));\n\nconst EnumChip = ({ className, classes: classesOverride, record, source, resource, ...props }) => {\n const classes = useChipStyles({ classes: classesOverride });\n const translate = useTranslate();\n\n const enumValue = get(record, source);\n if (!enumValue) {\n return null;\n }\n\n const label = translate(`resources.${resource}.enums.${source}.${enumValue}`, { _: enumValue });\n\n return (\n <Chip\n classes={{ root: classes.root, label: classes.label }}\n className={`${className}`}\n label={label}\n {...sanitizeRestProps(props)}\n />\n );\n};\n\nEnumChip.defaultProps = {\n addLabel: true,\n};\n\nexport default EnumChip;\n","import React from 'react';\nimport Chip from '@material-ui/core/Chip';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useSelector, shallowEqual } from 'react-redux';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n margin: '.125rem',\n },\n online: {\n backgroundColor: '#44b700',\n color: '#fff',\n },\n}));\n\nconst OnlineChip = ({ record, ...props }) => {\n const classes = useStyles();\n const onlineUsers = useSelector((state) => state.onlineUsers, shallowEqual);\n if (!record) return null;\n const isOnline = onlineUsers.includes(record.id);\n const label = isOnline ? 'Онлайн' : 'Оффлайн';\n\n return <Chip classes={{ root: classes.root }} className={isOnline ? classes.online : ''} label={label} />;\n};\n\nOnlineChip.defaultProps = {\n addLabel: false,\n};\n\nexport default OnlineChip;\n","import React from 'react';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport Grid from '@material-ui/core/Grid';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport EnumChip from '../Fields/EnumChip';\nimport OnlineChip from '../Fields/OnlineChip';\nimport Chip from '@material-ui/core/Chip';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(),\n '&:first-child': {\n marginTop: 0,\n },\n },\n largeAvatar: {\n width: theme.spacing(10),\n height: theme.spacing(10),\n fontSize: '2rem',\n },\n chipBanned: {\n color: theme.palette.getContrastText(theme.palette.error.main),\n backgroundColor: theme.palette.error.main,\n },\n}));\n\nconst UserBanner = ({ classes: classesOverride, className, ...props }) => {\n const classes = useStyles({ classes: classesOverride });\n const { record, resource } = props;\n if (!record) {\n return null;\n }\n const name = record.name;\n const description = record.description;\n const id = record.id;\n const banned = record.banned;\n\n return (\n <Card className={`${classes.root} ${className}`}>\n <CardContent>\n <Grid container spacing={4}>\n <Grid item xs>\n <Typography variant=\"h6\" gutterBottom>\n {name}\n </Typography>\n <Typography variant=\"subtitle1\">{description}</Typography>\n </Grid>\n <Grid item xs=\"auto\">\n <Typography variant=\"body2\" color=\"textSecondary\">\n {id}\n </Typography>\n </Grid>\n </Grid>\n <Grid container spacing={4}>\n <Grid item xs>\n <EnumChip {...props} source=\"role\" />\n <OnlineChip record={record} />\n {banned && <Chip className={`${classes.chip} ${classes.chipBanned}`} label=\"Заблокирован\" size=\"medium\" />}\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n );\n};\n\nexport default UserBanner;\n","export const SET_USER = 'SET_USER';\n\nexport const setUser = (user) => ({\n type: SET_USER,\n payload: { user },\n});\n","import apolloObjectsClient from '../apolloClient';\nimport { GET_ONE_COUNTERPARTY } from '../Counterparty/typeDefs';\n\nexport default (args) => {\n return apolloObjectsClient.query({\n query: GET_ONE_COUNTERPARTY,\n variables: { ...args },\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import React from 'react';\n\nimport { useFormState } from 'react-final-form';\nimport { SaveButton } from 'react-admin';\nimport { useUpdate, useNotify } from 'react-admin';\nimport { useDispatch } from 'react-redux';\nimport { setUser } from '../../redux/user/actions';\nimport getDistributor from '../../dataProvider/Objects/customQueries/getCounterparty';\n\nexport const sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n undoable,\n redirect,\n submitOnEnter,\n ...rest\n}) => rest;\n\nconst SaveProfileButton = ({ saving, record, className, ...props }) => {\n const [update, { loading }] = useUpdate('Profile');\n const notify = useNotify();\n const formState = useFormState();\n const dispatch = useDispatch();\n\n const handleClick = () =>\n update(\n {\n type: 'update',\n resource: 'Profile',\n payload: {\n id: record.id,\n data: { ...formState.values },\n previousData: { ...record },\n },\n },\n {\n onSuccess: async ({ data }) => {\n notify('ra.notification.profile_saved');\n if (!data.regions || (!data.regions.length && data.distributor)) {\n const {\n data: { data: distributor },\n } = await getDistributor({ id: data.distributor });\n dispatch(setUser({ ...data, regions: distributor.regions.map((r) => r.id) }));\n } else {\n dispatch(setUser(data));\n }\n },\n },\n );\n\n return <SaveButton onMouseDown={handleClick} disabled={loading} />;\n};\n\nexport default SaveProfileButton;\n","export default ({\n addLabel,\n allowEmpty,\n basePath,\n cellClassName,\n className,\n formClassName,\n headerClassName,\n label,\n linkType,\n link,\n locale,\n record,\n resource,\n sortable,\n sortBy,\n source,\n textAlign,\n translateChoice,\n ...rest\n}) => rest;\n","import React from 'react';\nimport TextField from '@material-ui/core/TextField';\nimport MaskedInput from 'react-text-mask';\nimport { useInput, FieldTitle, InputHelperText, regex } from 'react-admin';\nimport sanitizeRestProps from './sanitizeRestProps';\n\nconst regexp = /^(\\+7|7|8)?[\\s-]?([489][0-9]{2})?[\\s-]?([0-9]{3})[\\s-]?([0-9]{4})$/;\nconst validatePhone = [regex(regexp, 'ra.validation.phone_invalid')];\nconst phoneParse = (value) => value.replace(/[^+\\w\\d]/g, '');\n\nconst PhoneMaskInput = ({ ...props }) => {\n const { inputRef, ...other } = props;\n\n return (\n <MaskedInput\n {...other}\n ref={(ref) => {\n inputRef(ref ? ref.inputElement : null);\n }}\n mask={['+', '7', ' ', '(', /[489]/, /\\d/, /\\d/, ')', ' ', /\\d/, /\\d/, /\\d/, '-', /\\d/, /\\d/, /\\d/, /\\d/]}\n keepCharPositions={true}\n placeholderChar={'\\u2000'}\n guide={false}\n />\n );\n};\n\nconst PhoneInput = ({\n format,\n helperText,\n label,\n margin = 'dense',\n onBlur,\n onFocus,\n onChange,\n options,\n parse = phoneParse,\n validate = validatePhone,\n resource,\n source,\n variant = 'filled',\n inputProps,\n className,\n ...rest\n}) => {\n const {\n id,\n input,\n isRequired,\n meta: { error, touched },\n } = useInput({\n format,\n onBlur,\n onChange,\n onFocus,\n parse,\n resource,\n source,\n validate,\n ...rest,\n });\n\n return (\n <TextField\n id={id}\n {...input}\n className={className}\n variant={variant}\n error={!!(touched && error)}\n helperText={\n (touched && error) || helperText ? (\n <InputHelperText touched={touched} error={error} helperText={helperText} />\n ) : null\n }\n label={<FieldTitle label={label} source={source} resource={resource} isRequired={isRequired} />}\n margin={margin}\n InputProps={{\n ...inputProps,\n inputComponent: PhoneMaskInput,\n }}\n {...options}\n {...sanitizeRestProps(rest)}\n />\n );\n};\n\nexport default PhoneInput;\n","import { useEffect, useState } from 'react';\nimport gql from 'graphql-tag';\nimport apolloCoreClient from './apolloCoreClient';\n\nconst GET_ENUMS = gql`\n query getEnums($name: String!) {\n __type(name: $name) {\n name\n enumValues {\n name\n description\n }\n }\n }\n`;\n\nexport default function (enumName) {\n const [enums, updateEnums] = useState([]);\n\n useEffect(() => {\n async function fetchData() {\n try {\n const enumData = await apolloCoreClient.query({\n query: GET_ENUMS,\n variables: { name: enumName },\n onError: (error) => {\n alert(error);\n },\n });\n\n updateEnums(enumData.data.__type.enumValues);\n } catch (error) {\n console.log('error: ', error);\n }\n }\n fetchData();\n }, [enumName]);\n return enums;\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { get } from 'lodash';\nimport { SelectArrayInput } from 'react-admin';\nimport useEnum from '../../dataProvider/Core/useEnum';\n\nconst EnumArrayInput = ({ Enum, filter, record, resource, source, translate, useEnum, options, ...props }) => {\n const enums = useEnum(Enum);\n\n const selected = enums.filter((choice) => choice.name === get(record, source));\n\n const choices = filter ? [...selected, ...enums.filter(filter)] : enums;\n return (\n <SelectArrayInput\n {...props}\n source={source}\n resource={resource}\n choices={choices}\n optionValue=\"name\"\n optionText={(choice) => {\n if (choice) {\n return options ? options + choice.name : `resources.${resource}.enums.${source}.${choice.name}`;\n }\n return '';\n }}\n />\n );\n};\n\nEnumArrayInput.defaultProps = {\n useEnum,\n};\n\nEnumArrayInput.propTypes = {\n source: PropTypes.string,\n Enum: PropTypes.string.isRequired,\n};\n\nexport default EnumArrayInput;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { get } from 'lodash';\nimport { SelectInput } from 'react-admin';\nimport useEnum from '../../dataProvider/Core/useEnum';\n\nconst EnumInput = ({ Enum, filter, record, resource, source, translate, useEnum, options, ...props }) => {\n const enums = useEnum(Enum);\n\n const selected = enums.filter((choice) => choice.name === get(record, source));\n\n const choices = filter ? [...enums.filter(filter)] : enums;\n\n return (\n <SelectInput\n {...props}\n source={source}\n resource={resource}\n choices={choices}\n optionValue=\"name\"\n optionText={(choice) =>\n options\n ? options + choice.name\n : `resources.${resource}.enums.${source}.${choice.name}`.replace(/\\[[0-9]*\\]/, '')\n }\n />\n );\n};\n\nEnumInput.defaultProps = {\n useEnum,\n};\n\nEnumInput.propTypes = {\n source: PropTypes.string,\n Enum: PropTypes.string.isRequired,\n};\n\nexport default EnumInput;\n","import React, { useState } from 'react';\nimport { ArrayInput, SimpleFormIterator } from 'react-admin';\nimport EnumInput from './EnumInput';\nimport { useForm, useFormState } from 'react-final-form';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { get } from 'lodash';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: '100%',\n },\n triggers: {\n display: 'flex',\n flexDirection: 'row',\n minWidth: 900,\n width: '100%',\n },\n}));\n\nconst fieldToEnum = {\n TYPE: 'TaskType',\n STATUS: 'TaskStatus',\n MAINTAINABLEITEMTYPE: 'MaintainableItemType',\n RESULT: 'TaskResult',\n};\n\nconst TriggerRow = ({ source, resource, ...props }) => {\n const classes = useStyles();\n const formState = useFormState();\n const form = useForm();\n const [state, setState] = useState({\n field: get(formState.values, source + '.type') !== 'UPDATED',\n value: !get(formState.values, source + '.field'),\n valueEnum: fieldToEnum[get(formState.values, source + '.field')] || 'string',\n });\n\n const handleChangeType = (event) => {\n if (event.target.value === 'UPDATED') {\n setState({\n field: false,\n value: true,\n valueEnum: null,\n });\n } else {\n setState({\n field: true,\n value: true,\n valueEnum: null,\n });\n form.change(source + '.field', null);\n form.change(source + '.value', null);\n }\n };\n\n const handleChangeField = (event) => {\n setState({\n ...state,\n value: false,\n valueEnum: fieldToEnum[event.target.value] || 'string',\n });\n form.change(source + '.value', null);\n };\n\n return (\n <div className={classes.triggers}>\n <EnumInput\n Enum=\"NotificationType\"\n source={`${source}.type`}\n onChange={handleChangeType}\n resource={resource}\n label=\"resources.Trigger.fields.type\"\n />\n <EnumInput\n Enum=\"TaskField\"\n source={`${source}.field`}\n onChange={handleChangeField}\n resource={resource}\n style={{ marginLeft: 8, marginRight: 8 }}\n label=\"resources.Trigger.fields.field\"\n allowEmpty\n emptyText=\"Все\"\n disabled={state.field}\n />\n {/*{ state.valueEnum === 'string' ?*/}\n {/* <TextInput key={state.valueEnum} source={`${source}.value`} resource={resource} label=\"resources.Trigger.fields.value\" disabled={state.value}/> :*/}\n {/* <EnumInput Enum={state.valueEnum} key={state.valueEnum} source={`${source}.value`} resource={resource} label=\"resources.Trigger.fields.value\" disabled={state.value}/>}*/}\n </div>\n );\n};\n\nconst TriggerInput = ({ ...props }) => {\n const classes = useStyles();\n\n return (\n <ArrayInput {...props}>\n <SimpleFormIterator classes={{ form: classes.triggers }} fullWidth>\n <TriggerRow fullWidth />\n </SimpleFormIterator>\n </ArrayInput>\n );\n};\n\nexport default TriggerInput;\n","import React from 'react';\nimport { makeStyles, Paper, Popper } from '@material-ui/core';\n\nconst useStyles = makeStyles(\n {\n suggestionsContainer: {\n zIndex: 2,\n },\n suggestionsPaper: {\n maxHeight: '50vh',\n overflowY: 'auto',\n },\n },\n { name: 'RaAutocompleteSuggestionList' },\n);\n\nconst AutocompleteSuggestionList = ({\n children,\n isOpen,\n menuProps,\n inputEl,\n classes: classesOverride = undefined,\n suggestionsContainerProps,\n}) => {\n const classes = useStyles({ classes: classesOverride });\n\n return (\n <Popper\n open={isOpen}\n anchorEl={inputEl}\n className={classes.suggestionsContainer}\n modifiers={{}}\n {...suggestionsContainerProps}\n >\n <div {...(isOpen ? menuProps : {})}>\n <Paper\n style={{\n marginTop: 8,\n minWidth: inputEl ? inputEl.clientWidth : null,\n }}\n className={classes.suggestionsPaper}\n >\n {children}\n </Paper>\n </div>\n </Popper>\n );\n};\n\nexport default AutocompleteSuggestionList;\n","import React, { isValidElement, cloneElement } from 'react';\nimport parse from 'autosuggest-highlight/parse';\nimport match from 'autosuggest-highlight/match';\nimport { makeStyles, MenuItem } from '@material-ui/core';\nimport classnames from 'classnames';\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {\n fontWeight: 400,\n },\n selected: {\n fontWeight: 500,\n },\n suggestion: {\n display: 'block',\n fontFamily: theme.typography.fontFamily,\n },\n suggestionText: { fontWeight: 300 },\n highlightedSuggestionText: { fontWeight: 500 },\n }),\n { name: 'RaAutocompleteSuggestionItem' },\n);\n\nconst AutocompleteSuggestionItem = ({\n suggestion,\n index,\n highlightedIndex,\n isSelected,\n filterValue,\n classes: classesOverride,\n getSuggestionText,\n ...rest\n}) => {\n const classes = useStyles({ classes: classesOverride });\n const isHighlighted = highlightedIndex === index;\n const suggestionText = getSuggestionText(suggestion);\n let matches;\n let parts;\n\n if (!isValidElement(suggestionText)) {\n matches = match(suggestionText, filterValue);\n parts = parse(suggestionText, matches);\n }\n\n return (\n <MenuItem\n key={suggestionText}\n selected={isHighlighted}\n className={classnames(classes.root, {\n [classes.selected]: isSelected,\n })}\n {...rest}\n >\n {isValidElement(suggestionText) ? (\n cloneElement(suggestionText, { filterValue })\n ) : (\n <div className={classes.suggestion}>\n {parts.map((part, index) => {\n return part.highlight ? (\n <span key={index} className={classes.highlightedSuggestionText}>\n {part.text}\n </span>\n ) : (\n <strong key={index} className={classes.suggestionText}>\n {part.text}\n </strong>\n );\n })}\n </div>\n )}\n </MenuItem>\n );\n};\n\nexport default AutocompleteSuggestionItem;\n","import React, { useCallback, useEffect, useRef, useState, useMemo, isValidElement } from 'react';\nimport Downshift from 'downshift';\nimport get from 'lodash/get';\nimport { makeStyles, TextField } from '@material-ui/core';\nimport { useInput, FieldTitle, useSuggestions, warning } from 'ra-core';\nimport { InputHelperText } from 'react-admin';\nimport AutocompleteSuggestionList from './AutocompleteSuggestionList';\nimport AutocompleteSuggestionItem from './AutocompleteSuggestionItem';\n\nconst AutocompleteInput = (props) => {\n const {\n allowEmpty,\n className,\n classes: classesOverride,\n choices = [],\n emptyText,\n emptyValue,\n format,\n fullWidth,\n helperText,\n id: idOverride,\n input: inputOverride,\n isRequired: isRequiredOverride,\n label,\n limitChoicesToValue,\n margin = 'dense',\n matchSuggestion,\n meta: metaOverride,\n onBlur,\n onChange,\n onFocus,\n options: { suggestionsContainerProps, labelProps, InputProps, ...options } = {\n suggestionsContainerProps: undefined,\n labelProps: undefined,\n InputProps: undefined,\n },\n optionText = 'name',\n inputText,\n optionValue = 'id',\n parse,\n resource,\n setFilter,\n shouldRenderSuggestions: shouldRenderSuggestionsOverride,\n source,\n suggestionLimit,\n translateChoice = true,\n validate,\n variant = 'filled',\n suggestionItem = <AutocompleteSuggestionItem />,\n ...rest\n } = props;\n\n if (isValidElement(optionText) && !inputText) {\n throw new Error(`If the optionText prop is a React element, you must also specify the inputText prop:\n <AutocompleteInput\n inputText={(record) => record.title}\n />`);\n }\n\n warning(\n isValidElement(optionText) && !matchSuggestion,\n `If the optionText prop is a React element, you must also specify the matchSuggestion prop:\n<AutocompleteInput\n matchSuggestion={(filterValue, suggestion) => true}\n/>\n `,\n );\n\n const classes = useStyles(props);\n\n let inputEl = useRef();\n let anchorEl = useRef();\n\n const {\n id,\n input,\n isRequired,\n meta: { touched, error },\n } = useInput({\n format,\n id: idOverride,\n input: inputOverride,\n meta: metaOverride,\n onBlur,\n onChange,\n onFocus,\n parse,\n resource,\n source,\n validate,\n ...rest,\n });\n\n const [filterValue, setFilterValue] = useState('');\n\n const getSuggestionFromValue = useCallback(\n (value) => choices.find((choice) => get(choice, optionValue) === value),\n [choices, optionValue],\n );\n\n const selectedItem = useMemo(\n () => getSuggestionFromValue(input.value) || null,\n [input.value, getSuggestionFromValue],\n );\n\n const { getChoiceText, getChoiceValue, getSuggestions } = useSuggestions({\n allowEmpty,\n choices,\n emptyText,\n emptyValue,\n limitChoicesToValue,\n matchSuggestion,\n optionText,\n optionValue,\n selectedItem,\n suggestionLimit,\n translateChoice,\n });\n\n const handleFilterChange = useCallback(\n (eventOrValue) => {\n const event = eventOrValue;\n const value = event.target ? event.target.value : eventOrValue;\n\n if (setFilter) {\n setFilter(value);\n }\n },\n [setFilter],\n );\n\n // We must reset the filter every time the value changes to ensure we\n // display at least some choices even if the input has a value.\n // Otherwise, it would only display the currently selected one and the user\n // would have to first clear the input before seeing any other choices\n useEffect(() => {\n handleFilterChange('');\n\n // If we have a value, set the filter to its text so that\n // Downshift displays it correctly\n setFilterValue(\n typeof input.value === 'undefined' || input.value === null || selectedItem === null\n ? ''\n : inputText\n ? inputText(getChoiceText(selectedItem).props.record)\n : getChoiceText(selectedItem),\n );\n }, [input.value, handleFilterChange, selectedItem, getChoiceText, inputText]);\n\n const handleChange = useCallback(\n (item) => {\n input.onChange(getChoiceValue(item));\n },\n [getChoiceValue, input],\n );\n\n // This function ensures that the suggestion list stay aligned to the\n // input element even if it moves (because user scrolled for example)\n const updateAnchorEl = () => {\n if (!inputEl.current) {\n return;\n }\n\n const inputPosition = inputEl.current.getBoundingClientRect();\n\n // It works by implementing a mock element providing the only method used\n // by the PopOver component, getBoundingClientRect, which will return a\n // position based on the input position\n if (!anchorEl.current) {\n anchorEl.current = { getBoundingClientRect: () => inputPosition };\n } else {\n const anchorPosition = anchorEl.current.getBoundingClientRect();\n\n if (anchorPosition.x !== inputPosition.x || anchorPosition.y !== inputPosition.y) {\n anchorEl.current = {\n getBoundingClientRect: () => inputPosition,\n };\n }\n }\n };\n\n const storeInputRef = (input) => {\n inputEl.current = input;\n updateAnchorEl();\n };\n\n const handleBlur = useCallback(\n (event) => {\n handleFilterChange('');\n\n // If we had a value before, set the filter back to its text so that\n // Downshift displays it correctly\n setFilterValue(\n input.value\n ? inputText\n ? inputText(getChoiceText(selectedItem).props.record)\n : getChoiceText(selectedItem)\n : '',\n );\n input.onBlur(event);\n },\n [getChoiceText, handleFilterChange, input, inputText, selectedItem],\n );\n\n const handleFocus = useCallback(\n (openMenu) => (event) => {\n openMenu(event);\n input.onFocus(event);\n },\n [input],\n );\n\n const shouldRenderSuggestions = (val) => {\n if (shouldRenderSuggestionsOverride !== undefined && typeof shouldRenderSuggestionsOverride === 'function') {\n return shouldRenderSuggestionsOverride(val);\n }\n\n return true;\n };\n\n return (\n <Downshift\n inputValue={filterValue}\n onChange={handleChange}\n selectedItem={selectedItem}\n itemToString={(item) => getChoiceValue(item)}\n {...rest}\n >\n {({ getInputProps, getItemProps, getLabelProps, getMenuProps, isOpen, highlightedIndex, openMenu }) => {\n const isMenuOpen = isOpen && shouldRenderSuggestions(filterValue);\n const {\n id: downshiftId, // We want to ignore this to correctly link our label and the input\n value,\n onBlur,\n onChange,\n onFocus,\n ref,\n size,\n color,\n ...inputProps\n } = getInputProps({\n onBlur: handleBlur,\n onFocus: handleFocus(openMenu),\n ...InputProps,\n });\n const suggestions = getSuggestions(filterValue);\n\n return (\n <div className={classes.container}>\n <TextField\n id={id}\n name={input.name}\n InputProps={{\n inputRef: storeInputRef,\n onBlur,\n onChange: (event) => {\n handleFilterChange(event);\n setFilterValue(event.target.value);\n },\n onFocus,\n }}\n error={!!(touched && error)}\n label={\n <FieldTitle\n label={label}\n {...labelProps}\n source={source}\n resource={resource}\n isRequired={typeof isRequiredOverride !== 'undefined' ? isRequiredOverride : isRequired}\n />\n }\n InputLabelProps={getLabelProps({\n htmlFor: id,\n })}\n helperText={<InputHelperText touched={touched} error={error} helperText={helperText} />}\n variant={variant}\n margin={margin}\n fullWidth={fullWidth}\n value={filterValue}\n className={className}\n size={size}\n color={color}\n {...inputProps}\n {...options}\n />\n <AutocompleteSuggestionList\n isOpen={isMenuOpen}\n menuProps={getMenuProps(\n {},\n // https://github.com/downshift-js/downshift/issues/235\n { suppressRefError: true },\n )}\n inputEl={inputEl.current}\n suggestionsContainerProps={suggestionsContainerProps}\n >\n {suggestions.map((suggestion, index) =>\n React.cloneElement(suggestionItem, {\n key: getChoiceValue(suggestion),\n suggestion,\n index,\n highlightedIndex,\n isSelected: input.value === getChoiceValue(suggestion),\n filterValue,\n getSuggestionText: getChoiceText,\n ...getItemProps({ item: suggestion }),\n }),\n )}\n </AutocompleteSuggestionList>\n </div>\n );\n }}\n </Downshift>\n );\n};\n\nconst useStyles = makeStyles(\n {\n container: {\n flexGrow: 1,\n position: 'relative',\n },\n },\n { name: 'RaAutocompleteInput' },\n);\n\nexport default AutocompleteInput;\n","import React, { useState } from 'react';\nimport { useSelector, shallowEqual, useDispatch } from 'react-redux';\nimport { ability } from '../../abilityProvider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Tabs, Tab, Divider } from '@material-ui/core';\nimport {\n useEditController,\n TextInput,\n PasswordInput,\n Toolbar,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n required,\n email,\n minLength,\n useTranslate,\n useRefresh,\n TabbedForm,\n FormTab,\n TabbedFormTabs,\n ReferenceInput,\n} from 'react-admin';\n\nimport Edit, { EditView } from '../Layout/Edit';\nimport BlankLayout from '../Layout/BlankLayout';\nimport UserBanner from '../User/UserBanner';\nimport SaveProfileButton from '../Buttons/SaveProfileButton';\nimport PhoneInput from '../Inputs/PhoneInput';\nimport EnumArrayInput from '../Inputs/EnumArrayInput';\n\nimport TriggerInput from '../Inputs/TriggerInput';\nimport AutocompleteInput from '../Inputs/AutoompleteInput';\n\nconst validateName = [required(), minLength(2)];\nconst validateEmail = [email()];\nconst validatePhone = [required()];\n\nconst useStyles = makeStyles((theme) => ({\n referenceArrayInput: {\n marginTop: 8,\n marginBottom: 4,\n },\n tab: {\n paddingLeft: 16,\n paddingRight: 16,\n },\n CardContentInner: {\n padding: 0,\n '&:first-child': {\n paddingTop: 16,\n },\n },\n}));\n\nconst stylesForForm = makeStyles((theme) => ({\n root: {\n paddingTop: 0,\n paddingBottom: 0,\n padding: 0,\n '&:first-child': {\n paddingTop: 0,\n },\n },\n triggers: {\n display: 'flex',\n flexDirection: 'row',\n },\n}));\n\nconst My = (props) => {\n console.log(props);\n props.input.value = props.input.value.map((val) => {\n if (typeof val === 'object') {\n return val.id;\n } else {\n return val;\n }\n });\n return <AutocompleteArrayInput {...props} />;\n};\n\nconst ProfileToolbar = (props) => {\n return <Toolbar {...props}>{ability.can('update', 'Profile') && <SaveProfileButton />}</Toolbar>;\n};\n\nconst ProfileEdit = ({ staticContext, record, ...props }) => {\n const controllerProps = useEditController(props);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n const classes = stylesForForm();\n const translate = useTranslate();\n\n return (\n <Edit {...props} {...controllerProps} record={{ ...record, resource: 'User' }} title=\"Профиль\" resource=\"User\">\n <UserBanner />\n <BlankLayout>\n <TabbedForm classes={classes} tabs={<TabbedFormTabs centered />} toolbar={<ProfileToolbar />}>\n <FormTab label={translate('resources.User.fields.main')}>\n {ability.can('update', 'Profile', 'name') && (\n <TextInput source=\"name\" validate={validateName} disabled={isDeleted} fullWidth />\n )}\n {ability.can('update', 'Profile', 'description') && (\n <TextInput source=\"description\" multiline disabled={isDeleted} fullWidth />\n )}\n {ability.can('update', 'Profile', 'distributor') && (\n <ReferenceInput\n source=\"distributor\"\n sort={{ field: 'name', order: 'ASC' }}\n reference=\"Counterparty\"\n label=\"resources.User.fields.distributor\"\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n )}\n <ReferenceArrayInput source=\"filters\" label=\"resources.User.fields.filters\" reference=\"UsersFilter\">\n <My optionText=\"name\" />\n </ReferenceArrayInput>\n {ability.can('update', 'Profile', 'phone') && (\n <PhoneInput\n source=\"phone\"\n validate={validatePhone}\n inputProps={{ autoComplete: 'new-password' }}\n disabled={isDeleted}\n />\n )}\n {ability.can('update', 'Profile', 'email') && (\n <TextInput\n source=\"email\"\n type=\"email\"\n validate={validateEmail}\n inputProps={{ autoComplete: 'new-password' }}\n disabled={isDeleted}\n />\n )}\n {ability.can('update', 'Profile', 'password') && (\n <PasswordInput source=\"password\" inputProps={{ autoComplete: 'new-password' }} />\n )}\n </FormTab>\n <FormTab label={translate('resources.User.fields.access')} path=\"access\">\n {ability.can('update', 'Profile', 'regions') && (\n <ReferenceArrayInput\n source=\"regions\"\n perPage={200}\n reference=\"Region\"\n fullWidth\n classes={{ container: classes.referenceArrayInput }}\n >\n <AutocompleteArrayInput optionText=\"unrestrictedName\" />\n </ReferenceArrayInput>\n )}\n {ability.can('update', 'Profile', 'maintainableItemTypes') && (\n <EnumArrayInput source=\"maintainableItemTypes\" Enum=\"MaintainableItemType\" fullWidth />\n )}\n {ability.can('update', 'Profile', 'taskTypes') && (\n <EnumArrayInput source=\"taskTypes\" Enum=\"TaskType\" fullWidth />\n )}\n </FormTab>\n <FormTab label={translate('resources.User.fields.notification')} path=\"notification\">\n {ability.can('update', 'Profile', 'notificationService') && (\n <EnumArrayInput source=\"notificationService\" Enum=\"NotificationService\" fullWidth />\n )}\n </FormTab>\n </TabbedForm>\n </BlankLayout>\n </Edit>\n );\n};\n\nProfileEdit.defaultProps = {\n resource: 'Profile',\n basePath: '/Profile',\n redirect: false,\n};\n\nconst ProfileHOC = (props) => {\n const user = useSelector((state) => state.user, shallowEqual);\n const dispatch = useDispatch();\n const refresh = useRefresh();\n refresh();\n if (!user) return null;\n return <ProfileEdit id={user.id} record={user} {...props} />;\n};\n\nexport default ProfileHOC;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M14,17H7V15H14M17,13H7V11H17M17,9H7V7H17M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M16.2,17H14.2L12,13.2L9.8,17H7.8L11,12L7.8,7H9.8L12,10.8L14.2,7H16.2L13,12M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import React, { useState } from 'react';\nimport { useDropzone } from 'react-dropzone';\nimport { useTranslate } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\nimport TextIcon from '../Icons/DocumentBox';\nimport ExcelIcon from '../Icons/ExcelBox';\nimport Button from '@material-ui/core/Button';\nimport CloseIcon from '@material-ui/icons/Close';\nimport Chip from '@material-ui/core/Chip';\n\nconst useStyles = makeStyles((theme) => ({\n dropZone: ({ isDragAccept, isDragReject }) => ({\n backgroundColor: isDragAccept ? '#c8e6c9' : isDragReject ? '#ffcdd2' : theme.palette.background.default,\n borderRadius: theme.spacing(1),\n cursor: 'pointer',\n padding: theme.spacing(1),\n textAlign: 'center',\n color: theme.palette.text.primary,\n transition: 'background-color .24s ease-in-out',\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n }),\n}));\n\nconst getIcon = (ext) => {\n switch (ext) {\n case 'xls':\n case 'xlsb':\n case 'xlsm':\n case 'xlsx': {\n return <ExcelIcon style={{ fontSize: 20 }} />;\n }\n default: {\n return <TextIcon style={{ fontSize: 20 }} />;\n }\n }\n};\n\nconst Dropzone = ({ onChange, accept, disabled }) => {\n const translate = useTranslate();\n //const [filesNames, setFilesNames] = useState([]);\n const [files, setFiles] = useState([]);\n\n //application/vnd.ms-excel\n\n const { getRootProps, getInputProps, isDragAccept, isDragReject } = useDropzone({\n accept:\n accept || '.csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel',\n disabled,\n multiple: true,\n onDrop: (acceptedFiles) => {\n const unicueAcceptedFiles = [\n ...files,\n ...acceptedFiles.filter((file) => !files.some((f) => f.name == file.name)),\n ];\n setFiles(unicueAcceptedFiles);\n onChange(unicueAcceptedFiles);\n },\n });\n\n const classes = useStyles({ isDragAccept, isDragReject });\n\n const handleDelete = (chipToDelete) => () => {\n const unicueAcceptedFiles = files.filter((f) => f.name != chipToDelete);\n setFiles(unicueAcceptedFiles);\n onChange(unicueAcceptedFiles);\n };\n\n return (\n <>\n <div className={classes.dropZone} {...getRootProps()}>\n <input {...getInputProps()} />\n <p>{translate('ra.input.file.upload_single')}</p>\n </div>\n <div>\n {files.map((fn) => (\n <Chip\n icon={getIcon(fn.name.split('.')[1])}\n label={fn.name}\n onDelete={handleDelete(fn.name)}\n color=\"secondary\"\n />\n ))}\n </div>\n </>\n );\n};\n\nexport default Dropzone;\n","import { ApolloClient, InMemoryCache } from '@apollo/client';\nimport { createUploadLink } from 'apollo-upload-client';\nimport { setContext } from '@apollo/client/link/context';\nimport { getAccessToken } from '../../authPrivider/getAccessToken';\nimport { URI_EXCEL_IMPORT } from '../../appsettings';\n\nconst httpLink = createUploadLink({\n uri: URI_EXCEL_IMPORT,\n});\n\nconst importLink = setContext(async (_, { headers }) => {\n const token = await getAccessToken();\n\n return {\n headers: {\n ...headers,\n authorization: token ? `Bearer ${token}` : '',\n },\n };\n});\n\nexport default new ApolloClient({\n link: importLink.concat(httpLink),\n cache: new InMemoryCache(),\n});\n","import gql from 'graphql-tag';\nimport apolloExcelImportClient from './apolloExcelImportClient';\n\nexport const MILTIPLE_UPLOAD = gql`\n mutation validate($files: [Upload!]!, $parserName: String) {\n validate(files: $files, parserName: $parserName) {\n filename\n errors\n alerts\n isOK\n }\n }\n`;\nexport default (args) => {\n return apolloExcelImportClient.mutate({\n mutation: MILTIPLE_UPLOAD,\n variables: { ...args },\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import gql from 'graphql-tag';\nimport apolloExcelImportClient from './apolloExcelImportClient';\n\nexport const MILTIPLE_UPLOAD = gql`\n mutation parse($files: [Upload!]!, $parserName: String) {\n parse(files: $files, parserName: $parserName) {\n filename\n errors\n statistic\n isOK\n isPending\n }\n }\n`;\n\nexport default (args) => {\n return apolloExcelImportClient.mutate({\n mutation: MILTIPLE_UPLOAD,\n variables: { ...args },\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import React, { useState, useCallback, cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Button, Title } from 'react-admin';\nimport Dropzone from '../Layout/Dropzone';\n\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport Typography from '@material-ui/core/Typography';\nimport Alert from '@material-ui/lab/Alert';\nimport CircularProgress from '@material-ui/core/CircularProgress';\n\nimport validate from '../../dataProvider/ExcelImport/validate';\nimport parse from '../../dataProvider/ExcelImport/parse';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: 20,\n },\n title: {\n fontSize: 14,\n },\n dropzone: {\n margin: 20,\n },\n blockItem: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n flexGrow: 1,\n display: 'flex',\n },\n runButton: {\n height: 47,\n paddingRight: theme.spacing(2),\n marginRight: theme.spacing(2),\n },\n runStatus: {\n marginLeft: theme.spacing(2),\n flexGrow: 1,\n },\n validateStatus: {\n marginBottom: 7,\n },\n statusFileCard: {\n margin: 20,\n },\n li: {\n marginTop: 10,\n },\n}));\n\nexport const ShowView = (props) => {\n const classes = useStyles();\n\n const [statusProgress, setStatusProgress] = React.useState(null);\n const [statusValidate, setStatusValidate] = React.useState(null);\n const [statusParse, setStatusParse] = React.useState(null);\n let isProgress = statusProgress != null && statusProgress.st == 'info';\n\n const [validatedfiles, setValidatedFiles] = useState([]);\n\n /*\n const getStatusUpload = (data) => { \n setTimeout(async() => { \n const token = await getAccessToken(); \n const params = new URLSearchParams(data).toString();\n fetch(`${URI_IMPORTEXPORT}/import/objects/status?`+params, { headers: { 'authorization': 'Bearer '+token, 'Content-Type': 'application/json' }})\n .then(response => { \n if(response.ok) {\n response.json().then(json_res => { \n json_res.events.forEach(ev => {\n console.log(ev.event);\n });\n if(json_res.id) { \n delete json_res.events; \n getStatusUpload(json_res);\n } else {\n setStatusProgress({ mes: 'Файл синхронизирован', st:'success'});\n } \n }); \n } else {\n \n response.json().then(json_res => {\n setStatusProgress({ mes: json_res.error, st:'error'}); \n });\n } \n }); \n }, 2000);\n }*/\n\n const handleRunProcess = () => {\n setStatusParse(null);\n setStatusProgress({ mes: 'Загрузка данных в базу ...', st: 'info' });\n parse({ files: validatedfiles, parserName: 'toirScheduledMaintenanceOrders' })\n .then(({ data: { parse } }) => {\n if (parse.some((x) => x.isPending)) {\n setStatusProgress({\n mes: 'В текущий момент утилита импортирует заявки планового ТО. Попробуйте запустить позже',\n st: 'warning',\n });\n //warning\n } else {\n const isError = parse.some((x) => !x.isOK);\n setStatusProgress(\n isError\n ? { mes: 'Файлы загружены с ошибками', st: 'error' }\n : { mes: 'Файлы успешно загружены', st: 'success' },\n );\n setStatusParse(parse);\n }\n })\n .catch((e) => {\n setStatusProgress({ mes: 'Сервис не доступен', st: 'error' });\n });\n };\n\n const handleChange = (files) => {\n setStatusParse(null);\n if (files.length > 0) {\n setStatusProgress({ mes: 'Проверка файлов на соответствие шаблону ...', st: 'info' });\n validate({ files, parserName: 'toirScheduledMaintenanceOrders' })\n .then(({ data: { validate } }) => {\n setStatusProgress(null);\n setStatusValidate(validate);\n setValidatedFiles(!validate.some((x) => !x.isOK) ? files : []);\n })\n .catch((e) => {\n setStatusProgress({ mes: 'Сервис не доступен', st: 'error' });\n });\n } else {\n setValidatedFiles([]);\n setStatusValidate(null);\n setStatusProgress(null);\n }\n };\n\n return (\n <Card className={classes.root}>\n <Title title=\"Импорт заявок планового ТО\" />\n <CardContent>\n <Typography className={classes.title} color=\"textSecondary\" gutterBottom>\n Утилита импортирует из Excel файла заявки планового ТО.\n </Typography>\n <Dropzone\n onChange={handleChange}\n disabled={isProgress}\n accept=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\n />\n {statusValidate &&\n statusValidate.map((sv) => {\n return (\n <div className={classes.statusFileCard}>\n <Typography variant=\"button\" display=\"block\" gutterBottom>\n {sv.filename || ''}\n </Typography>\n {sv.isOK && sv.alerts.length == 0 ? (\n <Alert severity=\"success\" className={classes.validateStatus}>\n Файл соответствует шаблону\n </Alert>\n ) : null}\n {sv.errors && sv.errors.length > 0 ? (\n <Alert severity=\"error\" className={classes.validateStatus}>\n <div>Ошибки:</div>\n <ul>\n {sv.errors.map((x) => (\n <li className={classes.li}>{x}</li>\n ))}\n </ul>\n </Alert>\n ) : null}\n {sv.alerts && sv.alerts.length > 0 ? (\n <Alert severity=\"warning\" className={classes.validateStatus}>\n <div>Предупреждения:</div>\n <ul>\n {sv.alerts.map((x) => (\n <li className={classes.li}>{x}</li>\n ))}\n </ul>\n </Alert>\n ) : null}\n </div>\n );\n })}\n <div className={classes.blockItem}>\n <Button\n onClick={handleRunProcess}\n disabled={isProgress || validatedfiles.length == 0}\n variant=\"contained\"\n color=\"primary\"\n className={classes.runButton}\n label=\"Загрузить\"\n ></Button>\n {isProgress ? <CircularProgress variant=\"indeterminate\" thickness={7} size={47} /> : null}\n {statusProgress ? (\n <Alert variant=\"filled\" className={classes.runStatus} severity={statusProgress.st}>\n {statusProgress.mes}\n </Alert>\n ) : null}\n </div>\n {statusParse &&\n statusParse.map((sp) => {\n return (\n <div className={classes.statusFileCard}>\n <Typography variant=\"button\" display=\"block\" gutterBottom>\n {sp.filename || ''}\n </Typography>\n {sp.errors.length > 0 ? (\n <Alert severity=\"error\" className={classes.validateStatus}>\n <div>Ошибки:</div>\n <ul>\n {sp.errors.map((x) => (\n <li>{x}</li>\n ))}\n </ul>\n </Alert>\n ) : null}\n {sp.isOK && sp.statistic ? (\n <Alert severity=\"info\" className={classes.validateStatus}>\n <ul>\n <li>Обработано объектов: {sp.statistic.processedObjects || 0}</li>\n <li>Создано новых заявок: {sp.statistic.createdTasks || 0}</li>\n <li>Уже созданные заявки: {sp.statistic.hasCreatedTasks || 0}</li>\n </ul>\n </Alert>\n ) : null}\n </div>\n );\n })}\n </CardContent>\n </Card>\n );\n};\n\nShowView.propTypes = {\n basePath: PropTypes.string,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n record: PropTypes.object,\n resource: PropTypes.string,\n title: PropTypes.any,\n version: PropTypes.node,\n};\n\nShowView.defaultProps = {\n classes: {},\n};\n\n/*\nconst useStyles = makeStyles(\n {\n root: {},\n main: {\n display: 'flex',\n },\n },\n { name: 'ImportScheduledMaintenanceOrders' }\n);\n*/\n\nexport default ShowView;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Button, Title } from 'react-admin';\nimport Dropzone from '../Layout/Dropzone';\n\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport Typography from '@material-ui/core/Typography';\nimport Alert from '@material-ui/lab/Alert';\nimport CircularProgress from '@material-ui/core/CircularProgress';\n\nimport validate from '../../dataProvider/ExcelImport/validate';\nimport parse from '../../dataProvider/ExcelImport/parse';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: 20,\n },\n title: {\n fontSize: 14,\n },\n dropzone: {\n margin: 20,\n },\n blockItem: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n flexGrow: 1,\n display: 'flex',\n },\n runButton: {\n height: 47,\n paddingRight: theme.spacing(2),\n marginRight: theme.spacing(2),\n },\n runStatus: {\n marginLeft: theme.spacing(2),\n flexGrow: 1,\n },\n validateStatus: {\n marginBottom: 7,\n },\n statusFileCard: {\n margin: 20,\n },\n li: {\n marginTop: 10,\n },\n}));\n\nexport const ShowView = (props) => {\n const classes = useStyles();\n\n const [statusProgress, setStatusProgress] = React.useState(null);\n const [statusValidate, setStatusValidate] = React.useState(null);\n const [statusParse, setStatusParse] = React.useState(null);\n let isProgress = statusProgress != null && statusProgress.st == 'info';\n\n const [validatedfiles, setValidatedFiles] = useState([]);\n\n const handleRunProcess = () => {\n setStatusParse(null);\n setStatusProgress({ mes: 'Загрузка данных в базу ...', st: 'info' });\n parse({ files: validatedfiles, parserName: 'toirMaintenanceOrders' })\n .then(({ data: { parse } }) => {\n if (parse.some((x) => x.isPending)) {\n setStatusProgress({\n mes: 'В текущий момент утилита импортирует объекты. Попробуйте запустить позже',\n st: 'warning',\n });\n } else {\n const isError = parse.some((x) => !x.isOK);\n setStatusProgress(\n isError\n ? { mes: 'Файлы загружены с ошибками', st: 'error' }\n : { mes: 'Файлы успешно загружены', st: 'success' },\n );\n setStatusParse(parse);\n }\n })\n .catch((e) => {\n setStatusProgress({ mes: 'Сервис не доступен', st: 'error' });\n });\n };\n\n const handleChange = (files) => {\n setStatusParse(null);\n if (files.length > 0) {\n setStatusProgress({ mes: 'Проверка файлов на соответствие шаблону ...', st: 'info' });\n validate({ files, parserName: 'toirMaintenanceOrders' })\n .then(({ data: { validate } }) => {\n setStatusProgress(null);\n setStatusValidate(validate);\n setValidatedFiles(!validate.some((x) => !x.isOK) ? files : []);\n })\n .catch((e) => {\n setStatusProgress({ mes: 'Сервис не доступен', st: 'error' });\n });\n } else {\n setValidatedFiles([]);\n setStatusValidate(null);\n setStatusProgress(null);\n }\n };\n\n return (\n <Card className={classes.root}>\n <Title title=\"Импорт объектов\" />\n <CardContent>\n <Typography className={classes.title} color=\"textSecondary\" gutterBottom>\n Утилита импортирует из Excel файла объекты.\n </Typography>\n <Typography className={classes.title} color=\"textSecondary\" gutterBottom>\n Если у объекта не задан ID и он не найден в базе по полю \"Инвентарный номер\" или \"Название\", то создается\n новый объект.\n </Typography>\n <Dropzone\n onChange={handleChange}\n disabled={isProgress}\n accept=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\n />\n {statusValidate &&\n statusValidate.map((sv) => {\n return (\n <div className={classes.statusFileCard}>\n <Typography variant=\"button\" display=\"block\" gutterBottom>\n {sv.filename || ''}\n </Typography>\n {sv.isOK && sv.alerts.length == 0 ? (\n <Alert severity=\"success\" className={classes.validateStatus}>\n Файл соответствует шаблону\n </Alert>\n ) : null}\n {sv.errors && sv.errors.length > 0 ? (\n <Alert severity=\"error\" className={classes.validateStatus}>\n <div>Ошибки:</div>\n <ul>\n {sv.errors.map((x) => (\n <li className={classes.li}>{x}</li>\n ))}\n </ul>\n </Alert>\n ) : null}\n {sv.alerts && sv.alerts.length > 0 ? (\n <Alert severity=\"warning\" className={classes.validateStatus}>\n <div>Предупреждения:</div>\n <ul>\n {sv.alerts.map((x) => (\n <li className={classes.li}>{x}</li>\n ))}\n </ul>\n </Alert>\n ) : null}\n </div>\n );\n })}\n <div className={classes.blockItem}>\n <Button\n onClick={handleRunProcess}\n disabled={isProgress || validatedfiles.length == 0}\n variant=\"contained\"\n color=\"primary\"\n className={classes.runButton}\n label=\"Загрузить\"\n ></Button>\n {isProgress ? <CircularProgress variant=\"indeterminate\" thickness={7} size={47} /> : null}\n {statusProgress ? (\n <Alert variant=\"filled\" className={classes.runStatus} severity={statusProgress.st}>\n {statusProgress.mes}\n </Alert>\n ) : null}\n </div>\n {statusParse &&\n statusParse.map((sp) => {\n return (\n <div className={classes.statusFileCard}>\n <Typography variant=\"button\" display=\"block\" gutterBottom>\n {sp.filename || ''}\n </Typography>\n {sp.errors.length > 0 ? (\n <Alert severity=\"error\" className={classes.validateStatus}>\n <div>Ошибки:</div>\n <ul>\n {sp.errors.map((x) => (\n <li>{x}</li>\n ))}\n </ul>\n </Alert>\n ) : null}\n {sp.isOK && sp.statistic ? (\n <Alert severity=\"info\" className={classes.validateStatus}>\n <ul>\n <li>Создано новых объектов: {sp.statistic.createdObjects || 0}</li>\n <li>Обновлено объектов: {sp.statistic.updatedObjects || 0}</li>\n <li>Объектов без изменений: {sp.statistic.unchangedObjects || 0}</li>\n </ul>\n </Alert>\n ) : null}\n </div>\n );\n })}\n </CardContent>\n </Card>\n );\n};\n\nShowView.propTypes = {\n basePath: PropTypes.string,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n record: PropTypes.object,\n resource: PropTypes.string,\n title: PropTypes.any,\n version: PropTypes.node,\n};\n\nShowView.defaultProps = {\n classes: {},\n};\n\n/*\nconst useStyles = makeStyles(\n {\n root: {},\n main: {\n display: 'flex',\n },\n },\n { name: 'ImportScheduledMaintenanceOrders' }\n);\n*/\n\nexport default ShowView;\n","import React, { cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { Title, useVersion } from 'react-admin';\n\nconst ShowView = (props) => {\n const {\n actions,\n basePath,\n children,\n classes: classesOverride,\n className,\n component: Content,\n hasEdit,\n hasList,\n resource,\n title,\n ...rest\n } = props;\n const classes = useStyles(props);\n const version = useVersion();\n if (!children) return null;\n\n return (\n <div className={classnames('show-page', classes.root, className)} {...sanitizeRestProps(rest)}>\n <Title title={title} />\n {actions &&\n cloneElement(actions, {\n basePath,\n hasList,\n hasEdit,\n resource,\n ...actions.props,\n })}\n <div\n className={classnames(classes.main, {\n [classes.noActions]: !actions,\n })}\n >\n <Content className={classes.card} key={version}>\n {children}\n </Content>\n </div>\n </div>\n );\n};\n\nShowView.propTypes = {\n actions: PropTypes.element,\n basePath: PropTypes.string,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n hasEdit: PropTypes.bool,\n hasList: PropTypes.bool,\n resource: PropTypes.string,\n title: PropTypes.any,\n};\n\nShowView.defaultProps = {\n classes: {},\n component: 'div',\n};\n\nconst useStyles = makeStyles(\n {\n root: {},\n main: {\n display: 'flex',\n },\n noActions: {\n marginTop: '1em',\n },\n card: {\n flex: '1 1 auto',\n },\n },\n { name: 'RaShow' },\n);\n\nconst sanitizeRestProps = ({\n hasCreate = null,\n hasEdit = null,\n hasShow = null,\n history = null,\n id = null,\n loaded = null,\n loading = null,\n location = null,\n match = null,\n options = null,\n permissions = null,\n ...rest\n}) => rest;\n\nexport default ShowView;\n","import React, { useCallback, useState } from 'react';\nimport { cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport ExportShowView from './ExportShowView';\n\nimport { useQuery, Datagrid, TextField, Pagination, Loading, ListContextProvider, TopToolbar } from 'react-admin';\nimport keyBy from 'lodash/keyBy';\n\nimport { Button } from 'react-admin';\nimport ExcelIcon from '../Icons/ExcelBox';\n\n// import XLSX from 'xlsx';\n\nconst useButtonStyles = makeStyles((theme) => ({\n excelButton: {\n color: theme.palette.getContrastText('#1D7E44'),\n backgroundColor: '#1D7E44',\n '&:hover': {\n backgroundColor: '#14582f',\n },\n },\n}));\n\nconst ExportExcelButton = ({ tableRef, ...props }) => {\n const classes = useButtonStyles();\n\n const handleExport = useCallback(() => {\n const fileName = 'test.xlsx';\n\n // const workSheet = XLSX.utils.json_to_sheet([\n // { S: 1, h: 2, e: 3, e_1: 4, t: 5, J: 6, S_1: 7 },\n // { S: 2, h: 3, e: 4, e_1: 5, t: 6, J: 7, S_1: 8 }\n // ], { header: [\"S\", \"h\", \"e\", \"e_1\", \"t\", \"J\", \"S_1\"] });\n // const workBook = XLSX.utils.book_new();\n // XLSX.utils.book_append_sheet(workBook, workSheet, 'test');\n\n // XLSX.writeFile(workBook, fileName);\n }, []);\n\n return (\n <Button onClick={handleExport} label=\"ra.action.export\" key=\"button\" {...props}>\n <ExcelIcon />\n </Button>\n );\n};\n\nconst ExportActions = ({ basePath, data, ...props }) => (\n <TopToolbar>\n <ExportExcelButton basePath={basePath} record={data} />\n </TopToolbar>\n);\n\nexport const ShowView = (props) => {\n const classes = useStyles(props);\n const [page, setPage] = useState(1);\n const perPage = 50;\n const { data, total, loading, error } = useQuery({\n type: 'GET_LIST',\n resource: 'Object',\n payload: {\n pagination: { page, perPage },\n sort: { field: 'id', order: 'ASC' },\n filter: {\n region: 'ee594d5e-30a9-40dc-b9f2-0add1be44ba1',\n type: 'STM',\n },\n },\n });\n\n // if (loading) {\n // return <Loading />\n // }\n // if (error) {\n // return <p>ERROR: {error}</p>\n // }\n\n return (\n <ExportShowView {...props} actions={<ExportActions />} title=\"Экспорт Шаблон заявкок на плановое ТО по объектам\">\n <div className={classes.main}>\n {!loading && (\n <ListContextProvider\n value={{\n resource: 'posts',\n basePath: 'posts',\n data: keyBy(data, 'id'),\n ids: data.map(({ id }) => id),\n currentSort: { field: 'id', order: 'ASC' },\n selectedIds: [],\n }}\n >\n <Datagrid>\n <TextField source=\"id\" />\n <TextField source=\"name\" />\n </Datagrid>\n <Pagination page={page} perPage={perPage} setPage={setPage} total={total} />\n </ListContextProvider>\n )}\n </div>\n </ExportShowView>\n );\n};\n\nShowView.propTypes = {\n basePath: PropTypes.string,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n record: PropTypes.object,\n resource: PropTypes.string,\n title: PropTypes.any,\n version: PropTypes.node,\n};\n\nShowView.defaultProps = {\n classes: {},\n};\n\nconst useStyles = makeStyles(\n {\n root: {},\n main: {\n display: 'flex',\n },\n },\n { name: 'ImportScheduledMaintenanceOrders' },\n);\n\nconst sanitizeRestProps = ({\n hasCreate = null,\n hasEdit = null,\n hasShow = null,\n history = null,\n id = null,\n loaded = null,\n loading = null,\n location = null,\n match = null,\n options = null,\n permissions = null,\n ...rest\n}) => rest;\n\nexport default ShowView;\n","import React from 'react';\nimport { Route } from 'react-router-dom';\nimport { WithPermissions } from 'ra-core';\nimport ProfileEdit from './components/Profile/ProfileEdit';\nimport ImportScheduledMaintenanceOrders from './components/ImportExport/ImportScheduledMaintenanceOrders';\nimport ImportMaintenanceOrders from './components/ImportExport/ImportMaintenanceOrders';\nimport ExportScheduledMaintenanceOrdersTemplate from './components/ImportExport/ExportScheduledMaintenanceOrdersTemplate';\n\nexport default [\n <Route path=\"/Profile\" component={(props) => <ProfileEdit {...props} />} />,\n <Route\n path=\"/ImportExport/importScheduledMaintenanceOrders\"\n render={(routeProps) => (\n <WithPermissions\n component={ImportScheduledMaintenanceOrders}\n basePath=\"/ImportExport\"\n resource=\"ImportExport\"\n id={decodeURIComponent(routeProps.match.params.id)}\n {...routeProps}\n />\n )}\n />,\n <Route\n path=\"/ImportExport/importMaintenanceOrders\"\n render={(routeProps) => (\n <WithPermissions\n component={ImportMaintenanceOrders}\n basePath=\"/ImportExport\"\n resource=\"ImportExport\"\n id={decodeURIComponent(routeProps.match.params.id)}\n {...routeProps}\n />\n )}\n />,\n <Route\n path=\"/ImportExport/exportScheduledMaintenanceOrdersTemplate\"\n render={(routeProps) => (\n <WithPermissions\n component={ExportScheduledMaintenanceOrdersTemplate}\n basePath=\"/ImportExport\"\n resource=\"ImportExport\"\n id={decodeURIComponent(routeProps.match.params.id)}\n {...routeProps}\n />\n )}\n />,\n];\n","export const ONLINE_USERS = 'ONLINE_USERS';\n\nexport const setOnlineUsers = (onlineUsers) => ({\n type: ONLINE_USERS,\n payload: { onlineUsers },\n});\n","import gql from 'graphql-tag';\nimport apolloCoreClient from './apolloCoreClient';\n\nconst ONLINE_USERS = gql`\n query OnlineUsers {\n onlineUsers: allUsers(filter: { online: true }) {\n id\n auth\n online\n }\n }\n`;\n\nexport default () => {\n return apolloCoreClient.query({\n query: ONLINE_USERS,\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import gql from 'graphql-tag';\nimport apolloCoreClient from './apolloCoreClient';\n\nconst USER_TEMPLATE = `{\n id\n name\n description\n createdAt\n updatedAt\n deleted\n auth\n banned\n email\n phone\n role\n regions\n notificationService\n maintainableItemTypes\n taskTypes\n online\n distributor\n filters {\n id\n name\n filter\n resource\n }\n}`;\n\nexport const GET_ONE_USER = gql`\n query User( $where: UserWhereUniqueInput! ) {\n data: User( where: $where ) ${USER_TEMPLATE}\n }\n`;\n\nexport default (args) => {\n return apolloCoreClient.query({\n query: GET_ONE_USER,\n variables: { ...args },\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import gql from 'graphql-tag';\n\nexport const SUBSCRIBE_ONLINE_USERS = gql`\n subscription onlineUsers {\n onlineUsers {\n node {\n id\n auth\n online\n }\n previousValues {\n id\n }\n }\n }\n`;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Avatar from '@material-ui/core/Avatar';\nimport sanitizeRestProps from './sanitizeRestProps';\n\nconst getInitials = (name) => {\n var initials = name.split(' ') || [];\n var first = initials.shift();\n var second = initials.pop();\n initials = (first.charAt(0) + (second ? second.charAt(0) : first.charAt(1))).toUpperCase();\n return initials;\n};\n\nconst useStyles = makeStyles((theme) => ({\n small: {\n width: theme.spacing(4),\n height: theme.spacing(4),\n fontSize: '1rem',\n },\n large: {\n width: theme.spacing(7),\n height: theme.spacing(7),\n },\n}));\n\nconst AvatarField = ({ className, record, size, ...props }) => {\n const classes = useStyles();\n if (!record) return null;\n const { name, fullname, avatar } = record;\n const text = fullname || name;\n\n return (\n <Avatar alt={text} src={avatar} className={`${className} ${classes[size]}`} {...sanitizeRestProps(props)}>\n {getInitials(text)}\n </Avatar>\n );\n};\n\nexport default AvatarField;\n","import React, { useEffect } from 'react';\nimport decodeJwt from 'jwt-decode';\nimport { useSelector, useDispatch, shallowEqual } from 'react-redux';\nimport { setUser } from '../../redux/user/actions';\nimport { setOnlineUsers } from '../../redux/onlineUsers/actions';\nimport apolloCoreClient from '../../dataProvider/Core/apolloCoreClient';\nimport getOnlineUsers from '../../dataProvider/Core/getOnlineUsers';\nimport getProfile from '../../dataProvider/Core/getProfile';\nimport { useSubscription } from '@apollo/react-hooks';\nimport { SUBSCRIBE_ONLINE_USERS } from '../../dataProvider/Core/onlineUsersSubscription';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport { MenuItemLink, UserMenu, useTranslate } from 'react-admin';\nimport AvatarField from '../Fields/AvatarField';\nimport { AUTH_TOKEN_COOKIE } from '../../appsettings';\nimport { getCookie } from '../../utils';\nimport SettingsIcon from '@material-ui/icons/Settings';\nimport getCounterparty from '../../dataProvider/Objects/customQueries/getCounterparty';\n\nconst useStyles = makeStyles((theme) => ({\n userPreview: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n textAlign: 'center',\n padding: theme.spacing(2),\n minWidth: 256,\n },\n headerAvatar: {\n margin: -theme.spacing(0.5),\n color: theme.palette.secondary.contrastText,\n backgroundColor: theme.palette.secondary.light,\n },\n}));\n\nconst ConfigurationMenu = (props) => {\n const translate = useTranslate();\n return (\n <MenuItemLink\n to=\"/Profile\"\n primaryText={translate('ra.auth.user_menu')}\n leftIcon={<SettingsIcon />}\n onClick={props.onClick}\n />\n );\n};\n\nconst MyUserMenu = ({ ...props }) => {\n const user = useSelector((state) => state.user, shallowEqual);\n const onlineUsers = useSelector((state) => state.onlineUsers, shallowEqual);\n const dispatch = useDispatch();\n const classes = useStyles();\n const translate = useTranslate();\n const onSubscriptionData = ({\n client,\n subscriptionData: {\n data: {\n onlineUsers: { node, previousValues },\n },\n },\n }) => {\n if (node && node.online) {\n if (!onlineUsers.includes(node.id)) {\n dispatch(setOnlineUsers([...onlineUsers, node.id]));\n }\n } else {\n const filterArray = onlineUsers.filter((id) => {\n const userId = node ? node.id : previousValues.id;\n return id !== userId;\n });\n dispatch(setOnlineUsers(filterArray));\n }\n };\n\n useSubscription(SUBSCRIBE_ONLINE_USERS, {\n client: apolloCoreClient,\n onSubscriptionData,\n });\n\n useEffect(() => {\n async function fetchData() {\n try {\n const {\n data: { onlineUsers: _onlineUsers },\n } = await getOnlineUsers();\n const onlineUsersIds = _onlineUsers.map((user) => user.id);\n dispatch(setOnlineUsers(onlineUsersIds));\n } catch (error) {\n console.log('error: ', error);\n }\n }\n fetchData();\n\n return () => {\n dispatch(setOnlineUsers([]));\n };\n }, [dispatch]);\n\n useEffect(() => {\n async function fetchData() {\n try {\n const { userId } = decodeJwt(getCookie(AUTH_TOKEN_COOKIE));\n const {\n data: { data: profile },\n } = await getProfile({ where: { auth: userId } });\n if (!profile.regions || (!profile.regions.length && profile.distributor)) {\n const {\n data: {\n data: { item: distributor },\n },\n } = await getCounterparty({ where: { id: profile.distributor } });\n dispatch(setUser({ ...profile, regions: distributor.regions.map((r) => r.id) }));\n } else {\n dispatch(setUser(profile));\n }\n } catch (error) {\n console.log('error: ', error);\n }\n }\n fetchData();\n\n return () => {\n dispatch(setUser(null));\n };\n }, [dispatch]);\n\n return (\n <UserMenu icon={<AvatarField record={user} size=\"small\" className={classes.headerAvatar} />} {...props}>\n {user && (\n <div className={classes.userPreview}>\n <AvatarField record={user} size=\"large\" />\n <Typography variant=\"body1\" style={{ marginTop: 8 }}>\n {user.name}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" gutterBottom>\n {translate(`resources.User.enums.role.${user.role}`, { _: user.role })}\n </Typography>\n </div>\n )}\n {user && <ConfigurationMenu record={user} />}\n </UserMenu>\n );\n};\n\nexport default MyUserMenu;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M22 20l-2 2a1 1 0 01-1 0L7 10a4 4 0 01-3 0 4 4 0 01-2-5l3 2 2-2-2-3a4 4 0 015 4v1l12 12a1 1 0 010 1zM2 19a1 1 0 000 1l2 2a1 1 0 001 0l6-6-3-3-6 6zM20 2l-4 2v2l-2 2 2 2 2-2h2l2-4-2-2z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M17 17l-2-2 1-3-1-2 3-2 1 4-2 5zM12 5l4 1-2 3-2-1a4 4 0 00-3 7l-2 2a7 7 0 015-12zm0-3a10 10 0 100 20 10 10 0 000-20z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import React, { useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport IconButton from '@material-ui/core/IconButton';\nimport AppsIcon from '@material-ui/icons/Apps';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\nimport Avatar from '@material-ui/core/Avatar';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Chip from '@material-ui/core/Chip';\nimport { useTranslate } from 'react-admin';\nimport ConfigurationPortalIcon from '../Icons/Configuration';\nimport ASKUGIcon from '../Icons/Thermostat';\nimport AdministrationIcon from '@material-ui/icons/SupervisorAccount';\n\nconst useStyles = makeStyles((theme) => ({\n menuItem: {\n minWidth: 256,\n },\n soon: {\n marginLeft: 8,\n },\n}));\n\nconst useAvatarStyles = makeStyles((theme) => ({\n root: {\n borderRadius: 12,\n },\n}));\n\nconst ConfigurationPortalAvatar = (props) => {\n const classes = useAvatarStyles();\n return (\n <Avatar variant=\"rounded\" classes={{ root: classes.root }} style={{ backgroundColor: '#316FC4' }}>\n <ConfigurationPortalIcon />\n </Avatar>\n );\n};\n\nconst ASKUGAvatar = (props) => {\n const classes = useAvatarStyles();\n return (\n <Avatar variant=\"rounded\" classes={{ root: classes.root }} style={{ backgroundColor: '#ffc107', color: '#212121' }}>\n <ASKUGIcon />\n </Avatar>\n );\n};\n\nconst AdministrationPortalAvatar = (props) => {\n const classes = useAvatarStyles();\n return (\n <Avatar variant=\"rounded\" classes={{ root: classes.root }} style={{ backgroundColor: '#3f51b5' }}>\n <AdministrationIcon />\n </Avatar>\n );\n};\n\nconst Apps = (props) => {\n const translate = useTranslate();\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n return (\n <>\n <Tooltip title={translate('apps.title', { _: 'Apps' })}>\n <IconButton aria-controls=\"apps-menu\" color=\"inherit\" onClick={handleClick}>\n <AppsIcon />\n </IconButton>\n </Tooltip>\n <Menu id=\"apps-menu\" anchorEl={anchorEl} keepMounted open={Boolean(anchorEl)} onClose={handleClose}>\n <MenuItem onClick={handleClose} classes={{ root: classes.menuItem }} disabled>\n <ListItemAvatar>\n <ASKUGAvatar />\n </ListItemAvatar>\n <ListItemText primary=\"Портал АСКУГ\" />\n <Chip size=\"small\" label=\"Скоро\" className={classes.soon} />\n </MenuItem>\n <MenuItem onClick={handleClose} classes={{ root: classes.menuItem }} disabled>\n <ListItemAvatar>\n <ConfigurationPortalAvatar />\n </ListItemAvatar>\n <ListItemText primary=\"Портал конфигурирования\" />\n <Chip size=\"small\" label=\"Скоро\" className={classes.soon} />\n </MenuItem>\n <MenuItem onClick={handleClose} classes={{ root: classes.menuItem }} disabled>\n <ListItemAvatar>\n <AdministrationPortalAvatar />\n </ListItemAvatar>\n <ListItemText primary=\"Портал администрирования\" />\n <Chip size=\"small\" label=\"Скоро\" className={classes.soon} />\n </MenuItem>\n </Menu>\n </>\n );\n};\n\nexport default Apps;\n","import React from 'react';\nimport { AppBar } from 'react-admin';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core';\nimport UserMenu from './UserMenu';\nimport Portals from './Portals';\n\nconst useStyles = makeStyles((theme) => ({\n appbar: {\n boxShadow:\n '0px 3px 5px -1px rgba(0, 0, 0, 0.06), 0px 6px 10px 0px rgba(0, 0, 0, 0.042), 0px 1px 18px 0px rgba(0, 0, 0, 0.036)',\n },\n title: {\n flex: 1,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n },\n spacer: {\n flex: 1,\n },\n}));\n\nconst MyAppBar = ({ ...props }) => {\n const classes = useStyles();\n\n return (\n <AppBar {...props} userMenu={<UserMenu />} className={classes.appbar}>\n <Typography variant=\"h6\" color=\"inherit\" className={classes.title} id=\"react-admin-title\" />\n <Portals />\n </AppBar>\n );\n};\n\nexport default MyAppBar;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport Typography from '@material-ui/core/Typography';\n\nconst useStyles = makeStyles((theme) => ({\n menuGroup: {},\n menuGroupTitle: {\n paddingTop: theme.spacing(2),\n paddingLeft: theme.spacing(3),\n },\n}));\n\nconst MenuGroup = ({ title, children, ...props }) => {\n const classes = useStyles();\n if (children.length === 0) return null;\n\n return (\n <div className={classes.menuGroup}>\n {!!title && (\n <Typography variant=\"subtitle2\" color=\"textSecondary\" gutterBottom noWrap className={classes.menuGroupTitle}>\n {title}\n </Typography>\n )}\n {children}\n </div>\n );\n};\n\nexport default MenuGroup;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { groupBy } from 'lodash';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { makeStyles } from '@material-ui/core';\n\nimport DefaultIcon from '@material-ui/icons/ViewList';\nimport { MenuItemLink, getResources, useTranslate, DashboardMenuItem } from 'react-admin';\nimport MenuGroup from './MenuGroup';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n borderRadius: theme.shape.borderRadius,\n marginLeft: theme.spacing(),\n marginRight: theme.spacing(),\n marginBottom: 4,\n '&:last-child': {\n marginBottom: 0,\n },\n },\n active: {\n backgroundColor: theme.palette.action.selected,\n },\n icon: { color: 'inherit' },\n main: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-start',\n marginTop: '1.5em',\n },\n}));\n\nconst Menu = ({ classes: classesOverride, className, dense, hasDashboard, onMenuClick, logout, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles({ classes: classesOverride });\n const open = useSelector((state) => state.admin.ui.sidebarOpen);\n const resources = useSelector(getResources, shallowEqual);\n const groupResources = groupBy(resources, (resource) => resource.options.menuGroup || 'default');\n\n useSelector((state) => state.router.location.pathname); // used to force redraw on navigation\n\n return (\n <div className={`${classes.main} ${className}`} {...props}>\n {hasDashboard && (\n <DashboardMenuItem\n onClick={onMenuClick}\n sidebarIsOpen={open}\n classes={{ root: classes.root, active: classes.active, icon: classes.icon }}\n dense={false}\n />\n )}\n {Object.keys(groupResources).map((group) => (\n <MenuGroup key={group} title={translate(`menu.groups.${group}`)}>\n {groupResources[group]\n .filter((r) => r.hasList)\n .map((resource) => (\n <MenuItemLink\n key={resource.name}\n to={`/${resource.name}`}\n classes={{ root: classes.root, active: classes.active, icon: classes.icon }}\n primaryText={translate(`resources.${resource.name}.menu`, { _: resource.name, smart_count: 2 })}\n leftIcon={resource.icon ? <resource.icon /> : <DefaultIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n />\n ))}\n </MenuGroup>\n ))}\n </div>\n );\n};\n\nMenu.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n dense: PropTypes.bool,\n hasDashboard: PropTypes.bool,\n logout: PropTypes.element,\n onMenuClick: PropTypes.func,\n};\n\nMenu.defaultProps = {\n onMenuClick: () => null,\n};\n\nexport default Menu;\n","import React from 'react';\nimport { Layout } from 'react-admin';\nimport AppBar from './AppBar';\nimport Menu from './Menu';\n\nexport const MyLayout = (props) => {\n return <Layout {...props} appBar={AppBar} menu={Menu} />;\n};\n","import React, { useEffect, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { Card, Avatar, createMuiTheme, makeStyles } from '@material-ui/core';\nimport { ThemeProvider } from '@material-ui/styles';\nimport LockIcon from '@material-ui/icons/Lock';\nimport { useHistory } from 'react-router-dom';\nimport { useCheckAuth } from 'ra-core';\n\nimport { theme as defaultTheme } from '../../defaultTheme';\n\nimport { Notification, LoginForm } from 'react-admin';\n\nimport backgroundBanner from '../../files/LoginBanner.svg';\nimport backgroundLogo from '../../files/ToirLogo.svg';\n\nconst useStyles = makeStyles(\n (theme) => ({\n main: {\n display: 'flex',\n flexDirection: 'column',\n minHeight: '100vh',\n height: '1px',\n alignItems: 'center',\n justifyContent: 'flex-start',\n background:\n 'linear-gradient(0deg, rgb(255,255,255) 0%, rgb(255,255,255) 36%, rgb(255,179,0) 36%, rgb(255,179,0) 100%)',\n },\n banner: {\n position: 'absolute',\n bottom: '8%',\n right: '4%',\n },\n logo: {\n position: 'absolute',\n top: '40px',\n left: '40px',\n },\n card: {\n minWidth: 300,\n marginTop: '6em',\n zIndex: 1,\n },\n avatar: {\n margin: '1em',\n display: 'flex',\n justifyContent: 'center',\n },\n icon: {\n backgroundColor: theme.palette.secondary[500],\n },\n }),\n { name: 'RaLogin' },\n);\n\nconst Login = ({ theme, classes: classesOverride, className, children, staticContext, backgroundImage, ...rest }) => {\n const classes = useStyles({ classes: classesOverride });\n const muiTheme = useMemo(() => createMuiTheme(theme), [theme]);\n const checkAuth = useCheckAuth();\n const history = useHistory();\n useEffect(() => {\n checkAuth({}, false)\n .then(() => {\n // already authenticated, redirect to the home page\n history.push('/');\n })\n .catch(() => {\n // not authenticated, stay on the login page\n });\n }, [checkAuth, history]);\n\n return (\n <ThemeProvider theme={muiTheme}>\n <div className={classnames(classes.main, className)} {...rest}>\n <img src={backgroundBanner} alt=\"lorem\" className={classes.banner} />\n <img src={backgroundLogo} alt=\"lorem\" className={classes.logo} />\n <Card className={classes.card}>\n <div className={classes.avatar}>\n <Avatar className={classes.icon}>\n <LockIcon />\n </Avatar>\n </div>\n {children}\n </Card>\n <Notification />\n </div>\n </ThemeProvider>\n );\n};\n\nLogin.propTypes = {\n backgroundImage: PropTypes.string,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n theme: PropTypes.object,\n staticContext: PropTypes.object,\n};\n\nLogin.defaultProps = {\n theme: defaultTheme,\n children: <LoginForm />,\n};\n\nexport default Login;\n","import { SET_USER } from './actions';\n\nexport default (previousState = null, { type, payload }) => {\n if (type === SET_USER) {\n return payload.user;\n }\n return previousState;\n};\n","import { ONLINE_USERS } from './actions';\n\nexport default (previousState = [], { type, payload }) => {\n if (type === ONLINE_USERS) {\n return payload.onlineUsers;\n }\n return previousState;\n};\n","import { TASK_DATA } from './actions';\n\nexport default (previousState = null, { type, payload }) => {\n if (type === TASK_DATA) {\n return payload.taskData;\n }\n return previousState;\n};\n","export const TASK_DATA = 'TASK_DATA';\n\nexport const setTaskData = (taskData) => ({\n type: TASK_DATA,\n payload: { taskData },\n});\n","import React from 'react';\nimport { ability } from '../../abilityProvider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport Typography from '@material-ui/core/Typography';\nimport { Title } from 'react-admin';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n paddingTop: 16,\n },\n}));\n\nexport default () => {\n const classes = useStyles();\n return (\n <div className={classes.container}>\n <Title title=\"Портал технического обслуживания и ремонта\" />\n <Grid container spacing={3}>\n <Grid item xs>\n <Card>\n <CardContent>\n <Typography variant=\"h6\">Добро пожаловать на портал ТОИР!</Typography>\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n\n {/*<Grid container spacing={3}>*/}\n {/* <Grid item xs={12} sm={6} md={4} lg={3}>*/}\n {/* {ability.can(\"getOne\", \"Dashboard\", \"ReportSchedulesMaintenance\") && <ReportCard title=\"Отчет выполнения планового ТО\">*/}\n {/* <ReportSchedulesMaintenance />*/}\n {/* </ReportCard>}*/}\n {/* </Grid>*/}\n {/* <Grid item xs={12} sm={6} md={4} lg={3}>*/}\n {/* {ability.can(\"getOne\", \"Dashboard\", \"ReportAudit\") && <ReportCard title=\"Отчет по актам аудита\">*/}\n {/* <ReportAudit />*/}\n {/* </ReportCard>}*/}\n {/* </Grid>*/}\n {/* <Grid item xs={12} sm={6} md={4} lg={3}>*/}\n {/* {ability.can(\"getOne\", \"Dashboard\", \"ReportDefect\") && <ReportCard title=\"Отчет по неисправностям\">*/}\n {/* <ReportDefect />*/}\n {/* </ReportCard>}*/}\n {/* </Grid>*/}\n {/* <Grid item xs={12} sm={6} md={4} lg={3}>*/}\n {/* {ability.can(\"getOne\", \"Dashboard\", \"ReportRegistry\") && <ReportCard title=\"Реестр объектов АКСИТЕХ\">*/}\n {/* <ReportRegistry />*/}\n {/* </ReportCard>}*/}\n {/* </Grid>*/}\n {/* <Grid item xs={12} sm={6} md={4} lg={3}>*/}\n {/* {ability.can(\"getOne\", \"Dashboard\", \"ReportSummaryMaintenance\") && <ReportCardWithPeriod title=\"Сводный отчет о результатах технического обслуживания АСКУГ\">*/}\n {/* <ReportSummaryMaintenance />*/}\n {/* </ReportCardWithPeriod>}*/}\n {/* </Grid>*/}\n {/*</Grid>*/}\n </div>\n );\n};\n","import moment from 'moment';\n\nconst dateFormatter = (key, value, model, record, translate) => {\n return moment(value).format('DD.MM.YYYY HH:mm:ss');\n};\n\nexport default dateFormatter;\n","const enumFormatter = (key, value, model, record, translate) => {\n const { __resource } = model;\n return translate(`resources.${__resource}.enums.${key}.${value}`, { _: value });\n};\n\nexport default enumFormatter;\n","import ExcelJS from 'exceljs';\nimport { get } from 'lodash';\n\nconst jsonToXLSX = ({ title, data, headers, rename }) => {\n const workbook = new ExcelJS.Workbook();\n workbook.created = new Date();\n workbook.modified = new Date();\n workbook.lastPrinted = new Date();\n\n const worksheet = workbook.addWorksheet(title);\n worksheet.views = [{ state: 'frozen', xSplit: 0, ySplit: 1 }];\n\n worksheet.columns = headers.map((header, index) => ({\n header: rename[index],\n key: header,\n width: rename[index].length + 3,\n }));\n const widths = rename.map((r) => r.length + 3);\n data.map((record) => {\n const rows = [[]];\n headers.forEach((header, index) => {\n const [keyHeader, valHeader] = header.split('.');\n\n const field = get(record, keyHeader);\n\n if (Array.isArray(field)) {\n while (rows.length < field.length) {\n rows.push(headers.map(() => ''));\n }\n field.forEach((val, fieldIndex) => {\n const value = get(val, valHeader);\n rows[fieldIndex][index] = value;\n if (value && value.length + 3 > widths[index]) {\n widths[index] = value.length + 3;\n worksheet.getColumn(header).width = widths[index];\n }\n });\n if (field.length === 0) {\n rows[0].push('');\n }\n } else {\n const value = get(record, header);\n\n if (value && value.length + 3 > widths[index]) {\n widths[index] = value.length + 3;\n worksheet.getColumn(header).width = widths[index];\n }\n rows[0].push(value);\n }\n });\n worksheet.addRows(rows);\n });\n\n return workbook.xlsx.writeBuffer().then(function (data) {\n const blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveOrOpenBlob(blob, title + '.xlsx');\n } else {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.href = url;\n a.download = title + '.xlsx';\n a.click();\n window.URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }\n });\n};\n\nexport default jsonToXLSX;\n","import jsonExport from 'jsonexport/dist';\nimport { downloadCSV } from 'react-admin';\nimport booleanFormatter from './booleanFormatter';\nimport dateFormatter from './dateFormatter';\nimport enumFormatter from './enumFormatter';\nimport moment from 'moment';\nimport jsonToXLSX from './jsonToXLSX';\n\nconst parseHeaders = (model, externalKey) => {\n const { __resource, ...object } = model;\n\n const array = Object.keys(object).reduce((result, key) => {\n const value = object[key];\n if (typeof value === 'object') {\n const nested = parseHeaders(value, key);\n result.push(...nested);\n } else {\n if (Boolean(value)) {\n const item = externalKey ? `${externalKey}.${key}` : key;\n result.push(item);\n }\n }\n\n return result;\n }, []);\n\n return array;\n};\n\nconst parseHeadesTitles = (model, translate, externalObject, externalKey) => {\n const { __resource, ...object } = model;\n\n const array = Object.keys(object).reduce((result, key) => {\n const value = object[key];\n if (typeof value === 'object') {\n const nested = parseHeadesTitles(value, translate, model, key);\n result.push(...nested);\n } else {\n if (Boolean(value)) {\n const item = externalObject\n ? `${translate(`resources.${externalObject.__resource}.fields.${externalKey}`)}.${translate(\n `resources.${__resource}.fields.${key}`,\n )}`\n : translate(`resources.${__resource}.fields.${key}`);\n result.push(item);\n }\n }\n\n return result;\n }, []);\n\n return array;\n};\n\nconst parseRecord = (model, record, translate) => {\n const { __resource, ...object } = model;\n const data = {};\n Object.keys(object).forEach((key) => {\n const value = object[key];\n const valueRecord = record[key];\n if (typeof value === 'object') {\n if (valueRecord instanceof Array) {\n data[key] = valueRecord.map((item) => parseRecord(value, item, translate));\n } else if (typeof valueRecord === 'object') {\n data[key] = parseRecord(value, valueRecord, translate);\n }\n } else {\n if (Boolean(value)) {\n if (valueRecord)\n data[key] = typeof value === 'function' ? value(key, valueRecord, model, record, translate) : valueRecord;\n }\n }\n });\n\n return data;\n};\n\nconst exporter =\n (title, model, { translate, ...options }) =>\n (records, fetchRelatedRecords, dataProvider, resource) => {\n const headers = parseHeaders(model);\n const rename = parseHeadesTitles(model, translate);\n const data = records.map((record) => parseRecord(model, record, translate));\n\n jsonToXLSX({ title, data, headers, rename }).catch((e) => console.log(e));\n\n // jsonExport(data, {\n // rowDelimiter: \";\",\n // headers,\n // rename,\n // ...options,\n // }, (err, csv) => {\n // downloadCSV(BOM + csv, title);\n // });\n };\n\nexport const taskExporter =\n (title, model, { translate, ...options }) =>\n async (records, fetchRelatedRecords, dataProvider, resource) => {\n const headers = parseHeaders(model);\n const rename = parseHeadesTitles(model, translate);\n const objectsIds = records.map((record) => record.maintainableItem);\n const regionsIds = records.map((record) => record.region);\n const distributorIds = records.map((record) => record.distributor).filter((v) => v);\n\n // const { data: objects } = await dataProvider.getList('Object', {\n // filter: {\n // ids: objectsIds\n // },\n // pagination: {page: 1, perPage: objectsIds.length}\n // });\n // const { data: regions } = await dataProvider.getList('Location', {\n // filter: {\n // ids: regionsIds\n // },\n // pagination: {page: 1, perPage: 100,}\n // })\n // const { data: distributors } = await dataProvider.getList('Distributor', {\n // filter: {\n // ids: distributorIds\n // },\n // pagination: {page: 1, perPage: distributorIds.length}\n // })\n\n const [{ data: objects }, { data: regions }, { data: distributors }] = await Promise.all([\n dataProvider.getList('ConstructionObject', {\n filter: {\n ids: objectsIds,\n },\n pagination: { page: 1, perPage: objectsIds.length },\n sort: { field: 'createdAt', order: 'asc' },\n }),\n dataProvider.getList('Region', {\n filter: {\n ids: regionsIds,\n },\n pagination: { page: 1, perPage: 100 },\n sort: { field: 'name', order: 'asc' },\n }),\n dataProvider.getList('Counterparty', {\n filter: {\n ids: distributorIds,\n },\n pagination: { page: 1, perPage: distributorIds.length },\n sort: { field: 'name', order: 'asc' },\n }),\n ]);\n\n const data = records.map((record) => {\n record.maintainableItem = objects.find((o) => record.maintainableItem === o.id) || {\n name: record.maintainableItemName,\n };\n record.region = regions.find((r) => record.region === r.id);\n record.distributor = distributors.find((d) => record.distributor === d.id);\n if (record.comments) {\n if (record.comments.length) {\n record.comments = record.comments.sort((first, second) => {\n const time1 = moment(first.createdAt).unix();\n const time2 = moment(second.createdAt).unix();\n if (time1 > time2) return 1;\n if (time2 > time1) return -1;\n return 0;\n })[record.comments.length - 1];\n } else {\n record.comments = {};\n }\n }\n console.log(record);\n return parseRecord(model, record, translate);\n });\n\n // const BOM = \"\\uFEFF\";\n\n jsonToXLSX({ title, data, headers, rename }).catch((e) => console.log(e));\n // jsonExport(data, {\n // rowDelimiter: \";\",\n // headers,\n // rename,\n // ...options,\n // }, (err, csv) => {\n // downloadCSV(BOM + csv, title);\n // });\n };\n\nexport default exporter;\nexport { booleanFormatter, dateFormatter, enumFormatter };\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M14,2H6C4.89,2 4,2.89 4,4V20C4,21.11 4.89,22 6,22H18C19.11,22 20,21.11 20,20V8L14,2M12,19L8,15H10.5V12H13.5V15H16L12,19M13,9V3.5L18.5,9H13Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import { URI_BLOB_REST } from '../../appsettings';\nimport { getAccessToken } from '../../authPrivider/getAccessToken';\n\nexport default async (filesInfo) => {\n const token = await getAccessToken();\n\n const headers = {\n 'Content-Type': 'application/json',\n authorization: token ? 'Bearer ' + token : undefined,\n };\n\n const response = await fetch(`${URI_BLOB_REST}/stream/geturl`, {\n method: 'POST',\n body: JSON.stringify({ filesInfo }),\n headers,\n });\n if (response.ok) {\n const data = await response.json();\n if (data && data.url) {\n data.url = `${URI_BLOB_REST}${data.url}?token=${token}`;\n }\n return data;\n } else {\n return null;\n }\n};\n","import React, { useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useNotify, useUnselectAll, useDataProvider, fetchStart, fetchEnd, Button } from 'react-admin';\nimport FileDownloadIcon from '../Icons/FileDownload';\n//import getUrlArchive from '../../dataProvider/Blob/archiveFiles';\nimport getUrlArchive from '../../dataProvider/Blob/archiveGetUrl';\nimport { getAccessToken } from '../../authPrivider/getAccessToken';\n\nimport useDeepCompareEffect from 'use-deep-compare-effect';\nimport DownloadFilesSnackBar from '../Layout/DownloadFilesSnackBar';\nimport { URI_BLOB_REST } from '../../appsettings';\nimport login from '../../authPrivider/login';\n\nexport const sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n undoable,\n redirect,\n submitOnEnter,\n ...rest\n}) => rest;\n\nconst BulkDownloadFilesButton = ({\n basePath,\n resource,\n source,\n sources,\n className,\n filterValues,\n selectedIds,\n ...rest\n}) => {\n /* \n const dataProvider = useDataProvider();\n const dispatch = useDispatch();\n const notify = useNotify();\n const unselectAll = useUnselectAll();\n const [loading, setLoading] = useState(false);\n const [folders, setFolders] = useState([]);\n const [open, setOpen] = useState(false);\n const label = sources ? `ra.action.download_all` : `ra.action.download_all_${source}`;\n\n useDeepCompareEffect(()=>{\n if (folders.length) {\n getUrlArchive(folders).then( async (data) => {\n const token = await getAccessToken();\n setOpen(false);\n setFolders([]);\n window.open(`${URI_BLOB_REST}${data.data.getUrlArchiveFiles.virtualpath}?${token}`, '_blank');\n }).catch((error) => {\n notify( typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning' );\n setOpen(false);\n })\n .finally(() => {\n setLoading(false);\n dispatch(fetchEnd());\n })\n\n }\n }, [folders])\n\n const handleClick = () => {\n\n setLoading(true);\n dispatch(fetchStart());\n\n dataProvider.getMany(resource, { ids: selectedIds })\n .then(({ data, total }) => {\n let _folders = data.map(task => {\n const idsBlob = [];\n if (sources && sources.length) {\n sources.forEach(s => {\n if (task[s])\n idsBlob.push(...task[s].map(file => (file.idBlob)))\n })\n } else {\n idsBlob.push(...task[source].map(file => (file.idBlob)))\n }\n return ({\n // humanId: order.humanId,\n // addrManual: order.addrManual,\n // idsBlob: order.files.map(file => (file.idBlob))\n\n humanId: task.id,\n addrManual: (`_${(task.alias ? task.alias + ' ' : '') + (task.name ? task.name + ' ' : '')}`.replace(/ /g, '_')).substring(0, 66),\n idsBlob,\n })\n });\n \n \n _folders = _folders.filter(folder => folder.idsBlob.length > 0);\n\n const count = total - _folders.length\n\n if (count > 0) notify(`ra.notification.download_${source}_empty`, 'info', { smart_count: count, count: count });\n\n if (_folders.length) {\n setFolders(_folders);\n setOpen(true);\n };\n\n \n \n unselectAll(resource);\n })\n .catch((error) => {\n notify( typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning' );\n })\n .finally(() => {\n setLoading(false);\n dispatch(fetchEnd());\n });\n };\n */\n\n const dataProvider = useDataProvider();\n const dispatch = useDispatch();\n const notify = useNotify();\n const unselectAll = useUnselectAll();\n const [loading, setLoading] = useState(false);\n const label = sources ? `ra.action.download_all` : `ra.action.download_all_${source}`;\n\n const handleClick = () => {\n setLoading(true);\n dispatch(fetchStart());\n\n dataProvider.getMany(resource, { ids: selectedIds }).then(({ data }) => {\n let folders = data.map((task) => {\n const idsBlob = [];\n if (sources && sources.length) {\n sources.forEach((s) => {\n if (task[s]) idsBlob.push(...task[s].map((file) => file.idBlob));\n });\n } else {\n idsBlob.push(...task[source].map((file) => file.idBlob));\n }\n\n return {\n // humanId: order.humanId,\n // addrManual: order.addrManual,\n // idsBlob: order.files.map(file => (file.idBlob))\n\n humanId: task.id,\n addrManual: `${\n (task.maintainableItemName ? task.maintainableItemName + ' ' : '').substring(0, 100) +\n (task.alias ? task.alias + ' ' : '') +\n (task.name ? task.name + ' ' : '')\n }`.substring(0, 200),\n idsBlob,\n };\n });\n folders = folders.filter((folder) => folder.idsBlob.length > 0);\n const count = selectedIds.length - folders.length;\n\n if (count > 0) notify(`ra.notification.download_${source}_empty`, 'info', { smart_count: count, count: count });\n if (folders.length) {\n getUrlArchive(folders).then((data) => {\n const a = document.createElement('a');\n a.style.display = 'none';\n document.body.appendChild(a);\n a.href = data.url;\n a.click();\n setLoading(false);\n dispatch(fetchEnd());\n });\n } else {\n setLoading(false);\n dispatch(fetchEnd());\n }\n unselectAll(resource);\n notify('Загрузка архива началась. Дождитесь завершения.');\n });\n };\n\n return (\n <>\n <Button\n onClick={handleClick}\n disabled={loading}\n label={label}\n className={className}\n key=\"button\"\n {...sanitizeRestProps(rest)}\n >\n <FileDownloadIcon />\n </Button>\n {/* <DownloadFilesSnackBar folders={folders} open={open} setFolders={setFolders} setOpen={setOpen}/> */}\n </>\n );\n};\n\nexport default BulkDownloadFilesButton;\n","import gql from 'graphql-tag';\nimport apolloCoreClient from './apolloCoreClient';\n\nexport default ({ resource, where }) => {\n return apolloCoreClient.mutate({\n mutation: gql`mutation remove${resource}($where: ${resource}WhereUniqueInput!) {\n data: remove${resource}(where: $where) {\n id\n }\n }`,\n variables: { where },\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import React, { useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useNotify, useUnselectAll, useRefresh, fetchStart, fetchEnd, Button } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\nimport RemoveIcon from '@material-ui/icons/Delete';\nimport removeManyToTrash from '../../dataProvider/Core/removeManyToTrash';\n\nexport const sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n undoable,\n redirect,\n submitOnEnter,\n ...rest\n}) => rest;\n\nconst useStyles = makeStyles((theme) => ({\n removeButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: fade(theme.palette.error.main, 0.12),\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n}));\n\nconst BulkRemoveButton = ({\n basePath,\n resource,\n classes: classesOverride,\n className,\n filterValues,\n selectedIds,\n ...rest\n}) => {\n const dispatch = useDispatch();\n const refresh = useRefresh();\n const notify = useNotify();\n const unselectAll = useUnselectAll();\n const classes = useStyles({ classes: classesOverride });\n const [loading, setLoading] = useState(false);\n\n const handleClick = () => {\n setLoading(true);\n dispatch(fetchStart());\n\n removeManyToTrash({\n resource,\n ids: selectedIds,\n })\n .then(() => {\n refresh();\n notify('ra.notification.moved_to_trash', 'info', { smart_count: selectedIds.length });\n unselectAll(resource);\n })\n .catch((error) => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning');\n })\n .finally(() => {\n setLoading(false);\n dispatch(fetchEnd()); // stop the global loading indicator\n });\n };\n\n return (\n <Button\n onClick={handleClick}\n disabled={loading}\n label=\"ra.action.remove\"\n className={`ra-remove-button ${classes.removeButton} ${className}`}\n key=\"button\"\n {...sanitizeRestProps(rest)}\n >\n <RemoveIcon />\n </Button>\n );\n};\n\nexport default BulkRemoveButton;\n","import removeToTrash from './removeToTrash';\n\nexport default ({ ids, resource }) => {\n return Promise.all(ids.map((id) => removeToTrash({ resource, where: { id } }))).then((results) => {\n const data = results.reduce((acc, { data }) => [...acc, data.id], []);\n return { data };\n });\n};\n","import React from 'react';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Chip from '@material-ui/core/Chip';\nimport DeadlineOnIcon from '@material-ui/icons/Timer';\nimport DeadlineOffIcon from '@material-ui/icons/TimerOff';\nimport { makeStyles } from '@material-ui/core/styles';\nimport moment from 'moment';\nimport 'moment/locale/ru';\nimport { useTranslate } from 'react-admin';\nimport sanitizeRestProps from './sanitizeRestProps';\n\nconst getStatus = (completedAt, completedDeadlineAt, deadlineStatus, status) => {\n if (status === 'COMPLETED') {\n if (moment(completedAt).endOf('day').isSameOrBefore(moment(completedDeadlineAt).endOf('day'))) return 'info';\n if (moment(completedAt).endOf('day').isAfter(moment(completedDeadlineAt).endOf('day'))) return 'alarm';\n if (moment(completedAt).endOf('day').isAfter(moment(completedDeadlineAt).subtract(7, 'days').endOf('day')))\n return 'danger';\n if (moment(completedAt).endOf('day').isAfter(moment(completedDeadlineAt).subtract(14, 'days').endOf('day')))\n return 'warning';\n } else {\n // MORETWOWEEKS\n // LESSTWOWEEKS\n // LESSONEWEEK\n // EXPIRIED\n if (deadlineStatus === 'MORETWOWEEKS') return 'info';\n if (deadlineStatus === 'LESSTWOWEEKS') return 'info';\n if (deadlineStatus === 'LESSONEWEEK') return 'warning';\n if (deadlineStatus === 'EXPIRIED') return 'danger';\n }\n\n return 'info';\n};\n\nconst getIcon = (status) => {\n switch (status) {\n case 'info':\n return <DeadlineOffIcon />;\n break;\n default:\n return <DeadlineOnIcon />;\n break;\n }\n};\n\nconst getTitle = (status, deadlineAt, translate) => {\n switch (status) {\n case 'alarm':\n return translate('resources.Task.enums.deadline.come', { deadline: moment(deadlineAt).endOf('day').fromNow() });\n break;\n case 'danger':\n case 'warning':\n return translate('resources.Task.enums.deadline.notcome', {\n deadline: moment(deadlineAt).endOf('day').fromNow(),\n });\n break;\n default:\n return translate('resources.Task.enums.deadline.notcome', { deadline: moment(deadlineAt).format('L') });\n }\n};\n\nconst useChipStyles = makeStyles((theme) => ({\n root: {},\n label: {\n display: 'block',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n icon: {\n color: 'inherit',\n },\n info: {\n backgroundColor: theme.palette.grey['300'],\n color: theme.palette.getContrastText(theme.palette.grey['300']),\n },\n warning: {\n backgroundColor: theme.palette.warning.main,\n color: theme.palette.warning.contrastText,\n },\n danger: {\n backgroundColor: theme.palette.error.main,\n color: theme.palette.error.contrastText,\n },\n alarm: {\n backgroundColor: theme.palette.grey['900'],\n color: theme.palette.getContrastText(theme.palette.grey['900']),\n },\n}));\n\nexport const DeadlineChip = ({ className, classes: classesOverride, record, ...props }) => {\n const classes = useChipStyles({ classes: classesOverride });\n const translate = useTranslate();\n\n if (!record) return null;\n\n const completedAt = record.completedAt;\n const deadlineAt = record.deadlineAt;\n const deadlineStatus = record.deadlineStatus;\n const taskStatus = record.status;\n\n if (!deadlineAt) return null;\n\n const status = getStatus(completedAt, deadlineAt, deadlineStatus, taskStatus);\n const label = getTitle(status, deadlineAt, translate);\n const icon = getIcon(status);\n\n return (\n <Chip\n classes={{ root: classes.root, label: classes.label, icon: classes.icon }}\n className={`${className} ${classes[status]}`}\n icon={icon}\n label={label}\n {...sanitizeRestProps(props)}\n />\n );\n};\n\nDeadlineChip.defaultProps = {\n addLabel: true,\n};\n\nconst useIconStyles = makeStyles((theme) => ({\n info: { color: theme.palette.grey['300'] },\n warning: { color: theme.palette.warning.main },\n danger: { color: theme.palette.error.main },\n alarm: { color: theme.palette.text.primary },\n}));\n\nexport const DeadlineIcon = ({ className, classes: classesOverride, record, ...props }) => {\n const classes = useIconStyles({ classes: classesOverride });\n const translate = useTranslate();\n\n if (!record) return null;\n\n const completedAt = record.completedAt;\n const deadlineAt = record.deadlineAt;\n const deadlineStatus = record.deadlineStatus;\n const taskStatus = record.status;\n\n const status = getStatus(completedAt, deadlineAt, deadlineStatus, taskStatus);\n const label = getTitle(status, deadlineAt, translate);\n const icon = getIcon(status);\n\n return (\n <Tooltip title={label} placement=\"top\">\n {React.cloneElement(icon, { className: classes[status] })}\n </Tooltip>\n );\n};\n\nDeadlineIcon.defaultProps = {\n addLabel: false,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\nimport Typography from '@material-ui/core/Typography';\nimport sanitizeRestProps from './sanitizeRestProps';\nimport { useTranslate } from 'react-admin';\n\nconst EnumField = ({ className, resource, source, record, emptyText, ...props }) => {\n const translate = useTranslate();\n const enumValue = get(record, source);\n if (!enumValue && !emptyText) {\n return null;\n }\n\n const value = enumValue\n ? translate(`resources.${resource}.enums.${source}.${enumValue}`, { _: enumValue })\n : translate(emptyText);\n\n return (\n <Typography variant=\"body2\" className={className} {...sanitizeRestProps(props)}>\n {value}\n </Typography>\n );\n};\n\nEnumField.propTypes = {\n label: PropTypes.string,\n record: PropTypes.object,\n source: PropTypes.string.isRequired,\n};\n\nEnumField.defaultProps = {\n addLabel: true,\n};\n\nexport default EnumField;\n","import React from 'react';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport OrderAttachedIcon from '@material-ui/icons/AttachFile';\nimport { useTranslate } from 'react-admin';\n\nconst FileAttachedField = ({ record, ...props }) => {\n const translate = useTranslate();\n if (!(record && ((record.files && record.files.length) || (record.acts && record.acts.length)))) return null;\n const files = record.files.length;\n const acts = record.acts.length;\n\n return (\n <Tooltip title={translate('resources.Task.fields.filesAttached', { files, acts })} placement=\"left\">\n <OrderAttachedIcon color=\"action\" />\n </Tooltip>\n );\n};\n\nFileAttachedField.defaultProps = {\n classes: {},\n record: {},\n addLabel: true,\n};\n\nexport default FileAttachedField;\n","import * as React from 'react';\nimport { forwardRef, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { FieldTitle } from 'ra-core';\n\nconst FilterButtonMenuItem = forwardRef(({ filter, onShow, resource }, ref) => {\n const handleShow = useCallback(() => {\n onShow({ source: filter.source, defaultValue: filter.defaultValue });\n }, [filter.defaultValue, filter.source, onShow]);\n\n return (\n <MenuItem\n className=\"new-filter-item\"\n data-key={filter.source}\n data-default-value={filter.defaultValue}\n key={filter.source}\n onClick={handleShow}\n ref={ref}\n >\n <FieldTitle label={filter.label} source={filter.source} resource={resource} />\n </MenuItem>\n );\n});\n\nFilterButtonMenuItem.propTypes = {\n filter: PropTypes.object.isRequired,\n onShow: PropTypes.func.isRequired,\n resource: PropTypes.string.isRequired,\n};\n\nexport default FilterButtonMenuItem;\n","import React, { forwardRef, useCallback } from 'react';\nimport MenuItem from '@material-ui/core/MenuItem';\n\nconst FilterButtonMenuItem = forwardRef(({ record, setFilters, setOpen }, ref) => {\n const handleClickButton = useCallback(\n (event) => {\n // This prevents ghost click.\n const filterValues = record.filter || {};\n event.preventDefault();\n setFilters(filterValues);\n setOpen(false);\n },\n [record.filter, setFilters, setOpen],\n );\n\n return (\n <MenuItem\n className=\"new-filter-item\"\n key={record.id}\n data-filter-values={record.filter ? record.filter.filterValues : {}}\n onClick={handleClickButton}\n ref={ref}\n >\n {record.name}\n </MenuItem>\n );\n});\n\nexport default FilterButtonMenuItem;\n","import React, { useState, useCallback, useRef } from 'react';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport Menu from '@material-ui/core/Menu';\nimport ListSubheader from '@material-ui/core/ListSubheader';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ContentFilter from '@material-ui/icons/FilterList';\nimport classnames from 'classnames';\nimport lodashGet from 'lodash/get';\n\nimport FilterButtonMenuItem from './FilterButtonMenuItem';\nimport UserFilterButtonMenuItem from './UserFilterButtonMenuItem';\nimport { useTranslate, Button } from 'react-admin';\n\nconst useStyles = makeStyles(\n {\n root: { display: 'inline-block' },\n },\n { name: 'RaFilterButton' },\n);\n\nconst FilterButton = (props) => {\n const {\n filters,\n displayedFilters = {},\n filterValues,\n setFilters,\n showFilter,\n classes: classesOverride,\n className,\n resource,\n ...rest\n } = props;\n const [open, setOpen] = useState(false);\n const anchorEl = useRef();\n const classes = useStyles(props);\n const translate = useTranslate();\n const user = useSelector((state) => state.user, shallowEqual);\n const userFilters =\n user && user.filters ? user.filters.filter((filter) => filter.resource === resource.toUpperCase()) : [];\n\n const hiddenFilters = filters.filter(\n (filterElement) =>\n !filterElement.props.alwaysOn &&\n !displayedFilters[filterElement.props.source] &&\n typeof lodashGet(filterValues, filterElement.props.source) === 'undefined',\n );\n\n const handleClickButton = useCallback(\n (event) => {\n // This prevents ghost click.\n event.preventDefault();\n setOpen(true);\n anchorEl.current = event.currentTarget;\n },\n [anchorEl, setOpen],\n );\n\n const handleRequestClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleShow = useCallback(\n ({ source, defaultValue }) => {\n showFilter(source, defaultValue);\n setOpen(false);\n },\n [showFilter, setOpen],\n );\n\n if (hiddenFilters.length === 0) return null;\n return (\n <div className={classnames(classes.root, className)} {...rest}>\n <Button className=\"add-filter\" label=\"ra.action.add_filter\" onClick={handleClickButton}>\n <ContentFilter />\n </Button>\n <Menu open={open} anchorEl={anchorEl.current} onClose={handleRequestClose}>\n {hiddenFilters.length > 0 && (\n <ListSubheader style={{ position: 'inherit', outline: 'none' }}>\n {translate('resources.UsersFilter.fields.standard')}\n </ListSubheader>\n )}\n {hiddenFilters.map((filterElement) => (\n <FilterButtonMenuItem\n key={filterElement.props.source}\n filter={filterElement.props}\n resource={resource}\n onShow={handleShow}\n />\n ))}\n {userFilters.length > 0 && <ListSubheader>{translate('resources.UsersFilter.fields.custom')}</ListSubheader>}\n {userFilters.map((userFilter) => (\n <UserFilterButtonMenuItem key={userFilter.id} record={userFilter} setFilters={setFilters} setOpen={setOpen} />\n ))}\n </Menu>\n </div>\n );\n};\n\nFilterButton.propTypes = {\n resource: PropTypes.string.isRequired,\n filters: PropTypes.arrayOf(PropTypes.node).isRequired,\n displayedFilters: PropTypes.object,\n filterValues: PropTypes.object.isRequired,\n showFilter: PropTypes.func.isRequired,\n classes: PropTypes.object,\n className: PropTypes.string,\n};\n\nexport default FilterButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { sanitizeListRestProps } from 'ra-core';\nimport { FilterForm } from 'react-admin';\nimport FilterButton from './FilterButton';\n\nconst useStyles = makeStyles(\n {\n button: {},\n form: {},\n },\n { name: 'RaFilter' },\n);\n\nconst Filter = (props) => {\n const classes = useStyles(props);\n const renderButton = () => {\n const {\n classes: classesOverride,\n context,\n resource,\n children,\n showFilter,\n hideFilter,\n displayedFilters,\n filterValues,\n setFilters,\n variant,\n ...rest\n } = props;\n\n return (\n <FilterButton\n className={classes.button}\n resource={resource}\n filters={React.Children.toArray(children)}\n showFilter={showFilter}\n displayedFilters={displayedFilters}\n filterValues={filterValues}\n setFilters={setFilters}\n {...sanitizeListRestProps(rest)}\n />\n );\n };\n\n const renderForm = () => {\n const {\n classes: classesOverride,\n context,\n resource,\n children,\n hideFilter,\n displayedFilters,\n showFilter,\n filterValues,\n setFilters,\n ...rest\n } = props;\n\n return (\n <FilterForm\n className={classes.form}\n resource={resource}\n filters={React.Children.toArray(children)}\n hideFilter={hideFilter}\n displayedFilters={displayedFilters}\n initialValues={filterValues}\n setFilters={setFilters}\n {...sanitizeListRestProps(rest)}\n />\n );\n };\n\n return props.context === 'button' ? renderButton() : renderForm();\n};\n\nFilter.propTypes = {\n children: PropTypes.node,\n classes: PropTypes.object,\n context: PropTypes.oneOf(['form', 'button']),\n displayedFilters: PropTypes.object,\n filterValues: PropTypes.object,\n hideFilter: PropTypes.func,\n setFilters: PropTypes.func,\n showFilter: PropTypes.func,\n resource: PropTypes.string.isRequired,\n};\n\nexport default Filter;\n","import React, { Children, isValidElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst styles = (theme) => ({\n root: {\n display: 'flex',\n '& > *': {\n marginRight: '0.5rem',\n },\n '& > *:last-child': {\n marginRight: 0,\n },\n },\n});\n\nconst LabelsField = withStyles(styles)(({ classes, className, children, ...props }) => {\n return (\n <div className={classes.root}>\n {Children.map(children, (field) =>\n field && isValidElement(field) ? React.cloneElement(field, { ...props }) : null,\n )}\n </div>\n );\n});\n\nLabelsField.propTypes = {\n addLabel: PropTypes.bool,\n classes: PropTypes.object,\n className: PropTypes.string,\n cellClassName: PropTypes.string,\n children: PropTypes.node.isRequired,\n headerClassName: PropTypes.string,\n label: PropTypes.string,\n record: PropTypes.object,\n resource: PropTypes.string,\n source: PropTypes.string,\n};\n\nLabelsField.defaultProps = {\n addLabel: true,\n};\n\nexport default LabelsField;\n","import React from 'react';\nimport RegionIcon from '@material-ui/icons/Layers';\nimport DistrictIcon from '@material-ui/icons/Texture';\nimport CityIcon from '@material-ui/icons/LocationCity';\nimport TownIcon from '@material-ui/icons/Home';\nimport StreetIcon from '@material-ui/icons/Place';\nimport LocationIcon from '@material-ui/icons/Directions';\n\nconst getIcon = (level) => {\n switch (level) {\n case 1:\n case 2:\n return <RegionIcon />;\n break;\n case 3:\n return <DistrictIcon />;\n break;\n case 4:\n return <CityIcon />;\n break;\n case 5:\n case 6:\n return <TownIcon />;\n break;\n case 7:\n return <StreetIcon />;\n break;\n default:\n return <LocationIcon />;\n break;\n }\n};\n\nconst LevelIcon = ({ record, ...props }) => {\n const icon = getIcon(record.level);\n\n return icon;\n};\n\nexport default LevelIcon;\n","import React from 'react';\nimport parse from 'autosuggest-highlight/parse';\nimport match from 'autosuggest-highlight/match';\nimport { makeStyles, MenuItem, ListItemIcon, ListItemText } from '@material-ui/core';\nimport classnames from 'classnames';\nimport LevelIcon from './LocationLevelIcon';\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {},\n icon: {\n marginRight: 16,\n },\n selected: { fontWeight: 500 },\n highlight: {\n fontWeight: 500,\n color: '#000',\n },\n title: {},\n mr1: { marginRight: 8 },\n }),\n { name: 'RaAutocompleteSuggestionItem' },\n);\n\nconst LocationSuggestion = ({\n suggestion,\n index,\n highlightedIndex,\n isSelected,\n filterValue,\n classes: classesOverride,\n getSuggestionText,\n ...rest\n}) => {\n const classes = useStyles({ classes: classesOverride });\n const suggestionText = getSuggestionText(suggestion);\n if (!suggestion.id)\n return (\n <MenuItem key={suggestion.id} {...rest}>\n {suggestionText}\n </MenuItem>\n );\n const isHighlighted = highlightedIndex === index;\n const matches = match(suggestionText, filterValue);\n const parts = parse(suggestionText, matches);\n\n return (\n <MenuItem\n key={suggestion.id}\n selected={isHighlighted}\n className={classnames(classes.root, {\n [classes.selected]: isSelected,\n })}\n {...rest}\n >\n <ListItemIcon>\n <LevelIcon record={suggestion} />\n </ListItemIcon>\n <ListItemText\n primary={parts.map((part, index) => (\n <span key={index} className={part.highlight ? classes.highlight : ''}>\n {part.text}\n </span>\n ))}\n />\n </MenuItem>\n );\n};\n\nexport default LocationSuggestion;\n","import React from 'react';\n\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ReferenceField, TextField, /*AutocompleteInput,*/ useTranslate } from 'react-admin';\nimport { ability } from '../../abilityProvider';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n padding: 12,\n },\n region: {\n flexGrow: 0,\n marginRight: 16,\n },\n}));\n\nconst MaintainableItemField = ({ className, resource, source, record, ...props }) => {\n const translate = useTranslate();\n if (!record) return null;\n const type = record.maintainableItemType || record.type;\n\n const text = `[${translate(`resources.Task.enums.maintainableItemTypeShort.${type}`, { _: type })}]`;\n\n return (\n <>\n <Typography className={className} variant=\"body2\">\n {text}\n <ReferenceField\n {...props}\n record={record}\n style={{ marginLeft: 8 }}\n source=\"maintainableItem\"\n reference=\"ConstructionObject\"\n link=\"show\"\n >\n <TextField source=\"name\" />\n </ReferenceField>\n </Typography>\n <span\n style={{\n color: 'rgba(0, 0, 0, 0.54)',\n padding: 0,\n fontSize: '1rem',\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\n fontWeight: 400,\n lineHeight: 1,\n letterSpacing: '0.00938em',\n marginTop: 4,\n marginBottom: 4,\n }}\n >\n Контрагент\n <br />\n </span>\n <ReferenceField\n {...props}\n record={record}\n source=\"distributor\"\n sort={{ field: 'name', order: 'ASC' }}\n reference=\"Counterparty\"\n link=\"show\"\n >\n <TextField source=\"name\" />\n </ReferenceField>\n </>\n );\n};\n\nMaintainableItemField.defaultProps = {\n addLabel: true,\n};\n\nexport default MaintainableItemField;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M12.2 5.9l.8-.8A7.05 7.05 0 008 3c-1.8 0-3.6.7-5 2.1l.8.8C5 4.8 6.5 4.2 8 4.2s3 .6 4.2 1.7zm-.9.8A4.7 4.7 0 008 5.3c-1.2 0-2.4.5-3.3 1.4l.8.8c.7-.7 1.6-1 2.5-1 .9 0 1.8.3 2.5 1l.8-.8zM19 13H9V9H7v4H5a2 2 0 00-2 2v4a2 2 0 002 2h14a2 2 0 002-2v-4a2 2 0 00-2-2zM8 18H6v-2h2v2zm3.5 0h-2v-2h2v2zm3.5 0h-2v-2h2v2z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M10 5a2 2 0 014 0h4v3h-4v1l2 2c3 0 6 3 6 6v3h-4v-3l-2-2-2 2h-4l-2-2-2 2v3H2v-3c0-3 3-6 6-6l2-2V8H6V5h4z\"\n />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import React from 'react';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport { useTranslate } from 'react-admin';\nimport Controller from '../Icons/Controller';\nimport GasMeterUnit from '../Icons/GasMeterUnit';\n\nconst getIcon = (type) => {\n let icon;\n switch (type) {\n case 'STM':\n icon = <Controller />;\n break;\n case 'UUG':\n icon = <GasMeterUnit />;\n break;\n default:\n icon = <Controller />;\n break;\n }\n return icon;\n};\n\nconst TypeIcon = ({ record, ...props }) => {\n const translate = useTranslate();\n if (!record) return null;\n const title = translate(`resources.Task.enums.type.${record.type}`, { _: record.type });\n const icon = getIcon(record.type);\n\n return (\n <Tooltip title={title} placement=\"top\">\n <span>{icon}</span>\n </Tooltip>\n );\n};\n\nexport default TypeIcon;\n","import React from 'react';\nimport parse from 'autosuggest-highlight/parse';\nimport match from 'autosuggest-highlight/match';\nimport { makeStyles, MenuItem, ListItemIcon, ListItemText } from '@material-ui/core';\n\nimport classnames from 'classnames';\nimport TypeIcon from './MaintainableItemTypeIcon';\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {},\n icon: {\n marginRight: 16,\n },\n selected: { fontWeight: 500 },\n highlight: {\n fontWeight: 500,\n color: '#000',\n },\n title: {},\n mr1: { marginRight: 8 },\n }),\n { name: 'RaAutocompleteSuggestionItem' },\n);\n\nconst MaintainableItemSuggestion = ({\n suggestion,\n index,\n highlightedIndex,\n isSelected,\n filterValue,\n classes: classesOverride,\n getSuggestionText,\n ...rest\n}) => {\n const classes = useStyles({ classes: classesOverride });\n const suggestionText = getSuggestionText(suggestion);\n if (!suggestion.id)\n return (\n <MenuItem key={suggestion.id} {...rest}>\n {suggestionText}\n </MenuItem>\n );\n const isHighlighted = highlightedIndex === index;\n const matches = match(suggestionText, filterValue);\n const parts = parse(suggestionText, matches);\n const inventoryNumber = suggestion.inventoryNumber || '';\n const manualAddr = suggestion.manualAddr || '';\n\n return (\n <MenuItem\n key={suggestion.id}\n selected={isHighlighted}\n className={classnames(classes.root, {\n [classes.selected]: isSelected,\n })}\n {...rest}\n >\n <ListItemIcon>\n <TypeIcon record={suggestion} />\n </ListItemIcon>\n <ListItemText\n primary={parts.map((part, index) => (\n <span key={index} className={part.highlight ? classes.highlight : ''}>\n {part.text}\n </span>\n ))}\n secondary={`${inventoryNumber} ${manualAddr}`}\n />\n </MenuItem>\n );\n};\n\nexport default MaintainableItemSuggestion;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Link } from 'react-admin';\nimport get from 'lodash/get';\nimport sanitizeRestProps from './sanitizeRestProps';\n\nconst useStyles = makeStyles((theme) => ({\n link: {\n color: theme.palette.primary.main,\n },\n}));\n\nconst stopPropagation = (e) => e.stopPropagation();\n\nconst NestedField = ({\n children,\n className,\n classes: classesOverride,\n basePath,\n record,\n reference,\n resource,\n source,\n link,\n ...props\n}) => {\n const classes = useStyles({ classes: classesOverride });\n const referenceRecord = get(record, source);\n if (!referenceRecord) return null;\n const rootPath = basePath.replace(resource, reference);\n const resourceLinkPath = !link\n ? false\n : typeof link === 'function'\n ? link(record, reference)\n : `${rootPath}/${encodeURIComponent(referenceRecord.id)}/${link}`;\n\n if (resourceLinkPath) {\n return (\n <Link to={resourceLinkPath} className={className} onClick={stopPropagation}>\n {React.cloneElement(children, {\n className: `${children.props.className} ${classes.link}`,\n record: referenceRecord,\n resource: reference,\n basePath,\n ...sanitizeRestProps(props),\n })}\n </Link>\n );\n }\n\n return React.cloneElement(children, {\n className: `${className} ${children.props.className}`,\n record: referenceRecord,\n resource: reference,\n basePath,\n ...sanitizeRestProps(props),\n });\n};\n\nNestedField.propTypes = {\n addLabel: PropTypes.bool,\n basePath: PropTypes.string,\n children: PropTypes.element.isRequired,\n classes: PropTypes.object,\n className: PropTypes.string,\n cellClassName: PropTypes.string,\n headerClassName: PropTypes.string,\n label: PropTypes.string,\n record: PropTypes.object,\n reference: PropTypes.string.isRequired,\n resource: PropTypes.string,\n sortBy: PropTypes.string,\n source: PropTypes.string.isRequired,\n link: PropTypes.oneOfType([PropTypes.string, PropTypes.bool, PropTypes.func]).isRequired,\n};\n\nNestedField.defaultProps = {\n classes: {},\n link: 'show',\n record: {},\n addLabel: true,\n};\n\nexport default NestedField;\n","import React from 'react';\nimport get from 'lodash/get';\nimport Typography from '@material-ui/core/Typography';\nimport { useTranslate } from 'react-admin';\n\nconst TaskResultField = ({ className, resource, source, record, ...props }) => {\n const translate = useTranslate();\n if (!record) return null;\n const result = get(record, source);\n if (!result) return null;\n const faultDescription = get(record, 'faultDescription');\n const text = `${translate(`resources.${resource}.enums.${source}.${result}`, { _: result })}${\n faultDescription ? `. ${faultDescription}` : ''\n }`;\n\n return (\n <Typography className={className} variant=\"body2\">\n {text}\n </Typography>\n );\n};\n\nTaskResultField.defaultProps = {\n addLabel: true,\n};\n\nexport default TaskResultField;\n","import { TextInput, useTranslate } from 'react-admin';\n\nimport { InputAdornment } from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport SearchIcon from '@material-ui/icons/Search';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles(\n {\n input: {\n marginTop: 32,\n },\n },\n { name: 'RaSearchInput' },\n);\n\nconst SearchInput = (props) => {\n const { classes: classesOverride, ...rest } = props;\n const translate = useTranslate();\n const classes = useStyles(props);\n if (props.label) {\n throw new Error(\"<SearchInput> isn't designed to be used with a label prop. Use <TextInput> if you need a label.\");\n }\n\n return (\n <TextInput\n label={translate('ra.action.search')}\n resettable\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <SearchIcon color=\"disabled\" />\n </InputAdornment>\n ),\n }}\n className={classes.input}\n {...rest}\n />\n );\n};\n\nSearchInput.propTypes = {\n classes: PropTypes.object,\n};\n\nexport default SearchInput;\n","import React from 'react';\nimport Chip from '@material-ui/core/Chip';\nimport LensIcon from '@material-ui/icons/Lens';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Typography from '@material-ui/core/Typography';\nimport { red, purple, deepPurple, indigo, blue, grey, green, orange, pink, amber } from '@material-ui/core/colors';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { emphasize } from '@material-ui/core/styles/colorManipulator';\nimport get from 'lodash/get';\nimport { useTranslate } from 'react-admin';\nimport sanitizeRestProps from '../Fields/sanitizeRestProps';\nimport classnames from 'classnames';\n\nconst getColor = (status) => {\n switch (status) {\n case 'DRAFT':\n return red[400];\n case 'WORK':\n return amber[400];\n case 'VERCFICATION':\n return purple[400];\n case 'REPAIR':\n return deepPurple[400];\n case 'DEPARTUREPLANNED':\n return blue[400];\n case 'NOTACCESED':\n return pink[400];\n case 'AWAITRESPONSE':\n return indigo[400];\n case 'COMPLETED':\n return green[400];\n case 'RESUMED':\n return orange.A400;\n default:\n return grey[300];\n }\n};\n\nconst useTaskStatusChipStyles = makeStyles((theme) => ({\n root: {},\n chip: ({ status }) => {\n const backgroundColor = getColor(status);\n return {\n color: theme.palette.getContrastText(backgroundColor),\n backgroundColor: backgroundColor,\n '&:hover, &:focus': {\n backgroundColor: emphasize(backgroundColor, 0.08),\n },\n };\n },\n}));\n\nexport const TaskStatusChip = ({\n className,\n classes: classesOverride,\n basePath,\n record,\n source,\n resource,\n addLabel,\n ...props\n}) => {\n const status = get(record, source);\n const classes = useTaskStatusChipStyles({ status, classes: classesOverride });\n const translate = useTranslate();\n if (!record) return null;\n\n const label = translate(`resources.${resource}.enums.${source}.${status}`, { _: status });\n\n return (\n <Chip classes={{ root: classes.chip }} className={`${className}`} label={label} {...sanitizeRestProps(props)} />\n );\n};\n\nTaskStatusChip.defaultProps = {\n addLabel: true,\n};\n\nconst useTaskStatusDotWithLabelStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n },\n dot: ({ status }) => {\n const color = getColor(status);\n return {\n color: color,\n };\n },\n}));\n\nexport const TaskStatusDotWithLabel = ({\n className,\n classes: classesOverride,\n basePath,\n record,\n source,\n resource,\n addLabel,\n ...props\n}) => {\n const classes = useTaskStatusDotWithLabelStyles({ status: record.status, classes: classesOverride });\n const translate = useTranslate();\n if (!record) return null;\n const status = get(record, source);\n\n const label = translate(`resources.${resource}.enums.${source}.${status}`, { _: status });\n\n return (\n <Typography className={classnames(className, classes.root)} variant=\"body2\" noWrap>\n <LensIcon className={classes.dot} fontSize=\"small\" style={{ marginRight: 4 }} />\n {label}\n </Typography>\n );\n};\n\nTaskStatusDotWithLabel.defaultProps = {\n addLabel: true,\n};\n\nexport const TaskStatusDotWithTooltip = ({\n className,\n classes: classesOverride,\n basePath,\n record,\n source,\n resource,\n addLabel,\n ...props\n}) => {\n const classes = useTaskStatusDotWithLabelStyles({ status: record ? record.status : null, classes: classesOverride });\n const translate = useTranslate();\n if (!record) return null;\n const status = get(record, source);\n\n const label = translate(`resources.${resource}.enums.${source}.${status}`, { _: status });\n\n return (\n <Tooltip title={label} enterDelay={700}>\n <LensIcon className={classes.dot} fontSize=\"small\" />\n </Tooltip>\n );\n};\n\nTaskStatusDotWithTooltip.defaultProps = {\n addLabel: true,\n};\n\nexport default TaskStatusChip;\n","import React, { Children, isValidElement } from 'react';\nimport { Menu } from '@material-ui/core';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport { useTranslate, Button } from 'react-admin';\n\nconst MoreButton = ({ label = 'ra.action.more', children, className, icon, ...props }) => {\n const translate = useTranslate();\n const [anchorEl, setAnchorEl] = React.useState(null);\n const open = Boolean(anchorEl);\n\n const handleClick = (event) => {\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = (event) => {\n event.stopPropagation();\n setAnchorEl(null);\n };\n\n return (\n <div>\n <Button onClick={handleClick} label={translate(label)} className={className} key=\"button\" {...props}>\n {icon || <MoreVertIcon />}\n </Button>\n <Menu id=\"more-menu\" anchorEl={anchorEl} keepMounted open={open} onClose={handleClose}>\n {Children.map(children, (field) =>\n field && isValidElement(field) ? React.cloneElement(field, { ...props }) : null,\n )}\n </Menu>\n </div>\n );\n};\n\nexport default MoreButton;\n","import React, { useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useNotify, useUnselectAll, useDataProvider, fetchStart, fetchEnd, useTranslate } from 'react-admin';\nimport FileDownloadIcon from '../Icons/FileDownload';\n// import getUrlArchive from '../../dataProvider/Blob/archiveFiles';\nimport getUrlArchive from '../../dataProvider/Blob/archiveGetUrl';\nimport { getAccessToken } from '../../authPrivider/getAccessToken';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Typography from '@material-ui/core/Typography';\n\nimport DownloadFilesSnackBar from '../Layout/DownloadFilesSnackBar';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\nimport { URI_BLOB_REST } from '../../appsettings';\n\nexport const sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n undoable,\n redirect,\n submitOnEnter,\n ...rest\n}) => rest;\n\nconst useStyles = makeStyles((theme) => {\n return {\n menu: {\n color: '#316FC4',\n },\n };\n});\n\nconst TaskDownloadAllFilesButton = React.forwardRef(\n ({ resource, className, source, sources, filterValues, notification, ...rest }, ref) => {\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const dispatch = useDispatch();\n const notify = useNotify();\n const classes = useStyles();\n const user = useSelector((state) => state.user, shallowEqual);\n const unselectAll = useUnselectAll();\n const [loading, setLoading] = useState(false);\n const [open, setOpen] = useState(false);\n const [message, setMessage] = useState();\n const label = translate(sources ? `ra.action.download_all` : `ra.action.download_all_${source}`);\n const regionFilter = filterValues && filterValues.region;\n const distributorFilter = filterValues && filterValues.distributor;\n\n // useDeepCompareEffect(()=>{\n //\n //\n // const getArchives = async () => {\n //\n // try {\n //\n // for (let i = 0; i < folders.length; i+=100) {\n // const n = Math.floor(folders.length / 100) + ((folders.length / 100 - Math.floor(folders.length / 100)) > 0 ? 1 : 0)\n // setMessage(`Создание архива ${i / 100 + 1}/${n}`)\n // await (getUrlArchive(folders.slice(i, i+100)).then( async (data) => {\n // const token = await getAccessToken();\n // window.open(`${URI_BLOB_REST}${data.data.getUrlArchiveFiles.virtualpath}?${token}`, '_blank');\n // }))\n // }\n //\n // }\n // catch(e) {\n // console.log(e)\n // }\n // }\n // if (folders.length) {\n // getArchives().catch((error) => {\n // notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning');\n // })\n // .finally(() => {\n // setLoading(false);\n // dispatch(fetchEnd());\n // setOpen(false);\n // setFolders([]);\n // setMessage(null);\n // })\n // }\n // // if (folders.length) {\n // // getUrlArchive(folders).then( async (data) => {\n // // const token = await getAccessToken();\n // // setOpen(false);\n // // setFolders([]);\n // // window.open(`${URI_BLOB_REST}${data.data.getUrlArchiveFiles.virtualpath}?${token}`, '_blank');\n // // }).catch((error) => {\n // // notify( typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning' );\n // // setOpen(false);\n // // })\n // // .finally(() => {\n // // setLoading(false);\n // // dispatch(fetchEnd());\n // // })\n // //\n // // }\n // }, [folders])\n //\n // const handleClick = (e) => {\n // e.stopPropagation();\n // setLoading(true);\n // dispatch(fetchStart());\n //\n // dataProvider.getList(resource, {filter: {...filterValues}}).then(({total}) =>\n // dataProvider.getList(resource, {filter: {...filterValues}, pagination: {perPage: total}})\n // .then( async ({ data, total }) => {\n //\n // const {data: objectsArray} = await dataProvider.getList('Object', { filter: {ids: data.map(task => task.maintainableItem)}, pagination: { perPage: data.length }})\n // const objects = {};\n // objectsArray.forEach(o => {\n // objects[o.id] = o;\n // })\n //\n // let _folders = data.map(task => {\n // const idsBlob = [];\n //\n // if (sources && sources.length) {\n // sources.forEach(s => {\n // if (task[s])\n // idsBlob.push(...task[s].map(file => (file.idBlob)))\n // })\n // } else {\n // idsBlob.push(...task[source].map(file => (file.idBlob)))\n // }\n // return {\n // humanId: task.id,\n // addrManual: (`${ (objects[task.maintainableItem] ? objects[task.maintainableItem].name + ' ' : '') + (task.alias ? task.alias + ' ' : '') + (task.name ? task.name + ' ' : '')}`.replace(/ /g, '_')).substring(0, 66),\n // idsBlob\n // }\n // });\n //\n //\n // _folders = _folders.filter(folder => folder.idsBlob.length > 0);\n // const count = total - _folders.length\n //\n // if (count > 0) notify(notification || `ra.notification.download_${source}_empty`, 'info', { smart_count: count, count: count });\n //\n // if (_folders.length) {\n // setFolders(_folders);\n // setOpen(true);\n // };\n //\n // unselectAll(resource);\n // })\n // .catch((error) => {\n // notify( typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning' );\n // })\n // .finally(() => {\n // setLoading(false);\n // dispatch(fetchEnd());\n // }));\n // };\n\n const handleClick = (e) => {\n e.stopPropagation();\n setLoading(true);\n dispatch(fetchStart());\n\n dataProvider.getList(resource, { filter: { ...filterValues } }).then(({ total }) =>\n dataProvider\n .getList(resource, { filter: { ...filterValues }, pagination: { perPage: total } })\n .then(async ({ data, total }) => {\n let folders = data.map((task) => {\n const idsBlob = [];\n\n if (sources && sources.length) {\n sources.forEach((s) => {\n if (task[s]) idsBlob.push(...task[s].map((file) => file.idBlob));\n });\n } else {\n idsBlob.push(...task[source].map((file) => file.idBlob));\n }\n return {\n humanId: task.id,\n addrManual: `${\n (task.maintainableItemName ? task.maintainableItemName + ' ' : '').substring(0, 100) +\n (task.alias ? task.alias + ' ' : '') +\n (task.name ? task.name + ' ' : '')\n }`\n .replace(/ /g, '_')\n .substring(0, 200),\n idsBlob,\n };\n });\n folders = folders.filter((folder) => folder.idsBlob.length > 0);\n const count = total - folders.length;\n\n if (count > 0)\n notify(notification || `ra.notification.download_${source}_empty`, 'info', {\n smart_count: count,\n count: count,\n });\n if (folders.length) {\n getUrlArchive(folders).then((data) => {\n const a = document.createElement('a');\n a.style.display = 'none';\n document.body.appendChild(a);\n a.href = data.url;\n a.click();\n setLoading(false);\n dispatch(fetchEnd());\n });\n } else {\n setLoading(false);\n dispatch(fetchEnd());\n }\n unselectAll(resource);\n }),\n );\n };\n\n return (\n <MenuItem\n key=\"button\"\n ref={ref}\n onClick={handleClick}\n disabled={loading || !(regionFilter || distributorFilter)}\n {...rest}\n >\n <ListItemIcon>\n <FileDownloadIcon />\n </ListItemIcon>\n <Typography variant=\"inherit\">{label}</Typography>\n {/*<DownloadFilesSnackBar folders={folders} open={open} message={message} setFolders={setFolders} setOpen={setOpen}/>*/}\n </MenuItem>\n );\n },\n);\n\nexport default TaskDownloadAllFilesButton;\n","import React, { useCallback, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport DownloadIcon from '@material-ui/icons/GetApp';\nimport { fetchRelatedRecords, useDataProvider, useNotify, useTranslate, ExporterContext } from 'react-admin';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Typography from '@material-ui/core/Typography';\n\nconst ExportButton = React.forwardRef(\n (\n {\n sort,\n filter = defaultFilter,\n maxResults = 1000,\n resource,\n onClick,\n label = 'ra.action.export',\n icon = defaultIcon,\n exporter: customExporter,\n ...rest\n },\n ref,\n ) => {\n const translate = useTranslate();\n const exporterFromContext = useContext(ExporterContext);\n const exporter = customExporter || exporterFromContext;\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const handleClick = useCallback(\n (event) => {\n dataProvider\n .getList(resource, {\n sort,\n filter,\n pagination: { page: 1, perPage: maxResults },\n })\n .then(({ data }) => exporter && exporter(data, fetchRelatedRecords(dataProvider), dataProvider, resource))\n .catch((error) => {\n console.error(error);\n notify('ra.notification.http_error', 'warning');\n });\n if (typeof onClick === 'function') {\n onClick(event);\n }\n },\n [dataProvider, exporter, filter, maxResults, notify, onClick, resource, sort],\n );\n\n return (\n <MenuItem key=\"button\" ref={ref} onClick={handleClick} {...sanitizeRestProps(rest)}>\n <ListItemIcon>{icon}</ListItemIcon>\n <Typography variant=\"inherit\">{translate(label)}</Typography>\n </MenuItem>\n );\n },\n);\n\nconst defaultIcon = <DownloadIcon />;\nconst defaultFilter = {};\n\nconst sanitizeRestProps = ({ basePath, ...rest }) => rest;\n\nExportButton.propTypes = {\n basePath: PropTypes.string,\n exporter: PropTypes.func,\n filter: PropTypes.object,\n label: PropTypes.string,\n maxResults: PropTypes.number,\n resource: PropTypes.string.isRequired,\n sort: PropTypes.exact({\n field: PropTypes.string,\n order: PropTypes.string,\n }),\n icon: PropTypes.element,\n};\n\nexport default ExportButton;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M21 8H3V6H21V8M13.81 16H10V18H13.09C13.21 17.28 13.46 16.61 13.81 16M18 11H6V13H18V11M18 15V18H15V20H18V23H20V20H23V18H20V15H18Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import gql from 'graphql-tag';\nimport apolloCoreClient from './apolloCoreClient';\n\nconst FILTER_TEMPLATE = `{\n id\n name\n filter\n resource\n }`;\n\nexport const SAVE_FILTER = gql`\n mutation createUsersFilter($name: String!, $resource: ResourceType!, $filter: Json!) {\n data: createUsersFilter( name: $name, resource: $resource, filter: $filter ) ${FILTER_TEMPLATE}\n }`;\n\nexport default (filter) => {\n return apolloCoreClient.mutate({\n mutation: SAVE_FILTER,\n variables: { ...filter },\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import React, { useState } from 'react';\nimport { TextField, Dialog, DialogTitle, DialogActions, DialogContent, DialogContentText } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate, Button } from 'react-admin';\nimport AddFilter from '../Icons/AddFilter';\nimport { useDispatch } from 'react-redux';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Typography from '@material-ui/core/Typography';\nimport decodeJwt from 'jwt-decode';\nimport { getCookie } from '../../utils';\nimport { AUTH_TOKEN_COOKIE } from '../../appsettings';\nimport getProfile from '../../dataProvider/Core/getProfile';\nimport { setUser } from '../../redux/user/actions';\nimport createFilter from '../../dataProvider/Core/createUsersFilter';\nimport { useNotify, useRefresh, fetchStart, fetchEnd } from 'react-admin';\n\nconst useStyles = makeStyles({\n menu: {\n color: '#316FC4',\n },\n});\n\nconst FilterSaveButton = React.forwardRef(({ resource, filter, ...props }, ref) => {\n const dispatch = useDispatch();\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate();\n const classes = useStyles();\n const [loading, setLoading] = useState(false);\n const [open, setOpen] = useState(false);\n const [formValues, setFormValues] = useState();\n\n const handleClickOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n const handleChange = (event) => {\n setFormValues({\n name: event.target.value,\n });\n };\n\n const handleSave = () => {\n setLoading(true);\n dispatch(fetchStart());\n\n createFilter({\n name: formValues.name,\n resource: resource.toUpperCase(),\n filter,\n })\n .then(() => {\n notify('ra.notification.user_filter_saved', 'info', { name: formValues.name });\n async function fetchData() {\n try {\n const { userId } = decodeJwt(getCookie(AUTH_TOKEN_COOKIE));\n const {\n data: { data: profile },\n } = await getProfile({ where: { auth: userId } });\n dispatch(setUser(profile));\n } catch (error) {\n console.log('error: ', error);\n }\n }\n setOpen(false);\n fetchData();\n refresh();\n })\n .catch((error) => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning');\n })\n .finally(() => {\n setLoading(false);\n dispatch(fetchEnd()); // stop the global loading indicator\n });\n };\n\n return (\n <>\n <MenuItem\n aria-controls={open ? 'split-button-menu' : undefined}\n aria-expanded={open ? 'true' : undefined}\n aria-label=\"select merge strategy\"\n aria-haspopup=\"menu\"\n key=\"button\"\n color=\"primary\"\n ref={ref}\n onClick={handleClickOpen}\n {...props}\n >\n <ListItemIcon>\n <AddFilter />\n </ListItemIcon>\n <Typography variant=\"inherit\">{translate('ra.action.save_filter')}</Typography>\n </MenuItem>\n\n <Dialog open={open} onClose={handleClose} aria-labelledby=\"form-dialog-title\">\n <DialogTitle id=\"form-dialog-title\">Пользовательский фильтр</DialogTitle>\n <DialogContent>\n <DialogContentText>\n Хотите сохранить пользовательский фильтр чтобы воспользоваться им позже?\n </DialogContentText>\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"name\"\n label=\"Название\"\n type=\"text\"\n fullWidth\n onChange={handleChange}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} color=\"default\" label=\"Отмена\" />\n <Button onClick={handleSave} color=\"primary\" label=\"Сохранить\" />\n </DialogActions>\n </Dialog>\n </>\n );\n});\n\nexport default FilterSaveButton;\n","import React, { useState } from 'react';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport ViewColumnIcon from '@material-ui/icons/ViewColumn';\nimport { useTranslate, Button } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\nimport compact from 'lodash/compact';\n\nconst useStyles = makeStyles((theme) => ({\n checkbox: {\n padding: 0,\n },\n}));\n\nconst SelectDataGridColumnButton = ({ resource, columns, ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const { listStorageColumns, setListStorageColumns, ListColumns } = columns;\n const [anchorEl, setAnchorEl] = useState(null);\n const [selectedColumns, setSelectedColumns] = useState(listStorageColumns);\n const open = Boolean(anchorEl);\n\n const handleClick = (event) => {\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = (event) => {\n event.stopPropagation();\n setAnchorEl(null);\n };\n\n const handleToggle = (column) => () => {\n const alwaysOn = column.props.alwaysOn;\n if (alwaysOn) return;\n const source = column.props.column || column.props.source;\n const currentIndex = selectedColumns.indexOf(source);\n const newChecked = [...selectedColumns];\n\n if (currentIndex === -1) {\n newChecked.push(source);\n } else {\n newChecked.splice(currentIndex, 1);\n }\n\n setSelectedColumns(newChecked);\n setListStorageColumns(newChecked);\n };\n\n return (\n <div>\n <Button\n onClick={handleClick}\n label={translate('ra.action.select_column', { _: 'select column' })}\n key=\"button\"\n {...props}\n >\n <ViewColumnIcon />\n </Button>\n <Menu id=\"select-column-menu\" anchorEl={anchorEl} open={open} onClose={handleClose}>\n {compact(ListColumns).map((column, index) => {\n const source = column.props.column || column.props.source;\n const alwaysOn = column.props.alwaysOn;\n const labelId = `column-label-${source}`;\n\n return (\n <MenuItem key={source} role={undefined} button onClick={handleToggle(column)}>\n <ListItemIcon>\n <Checkbox\n disabled={alwaysOn}\n checked={alwaysOn || selectedColumns.indexOf(source) !== -1}\n tabIndex={-1}\n disableRipple\n inputProps={{ 'aria-labelledby': labelId }}\n className={classes.checkbox}\n />\n </ListItemIcon>\n <span id={labelId}>{translate(`resources.${resource}.fields.${source}`, { _: source })}</span>\n\n {/* <ListItemSecondaryAction>\n <IconButton edge=\"end\" aria-label=\"comments\">\n <CommentIcon />\n </IconButton>\n </ListItemSecondaryAction> */}\n </MenuItem>\n );\n })}\n </Menu>\n </div>\n );\n};\n\nexport default SelectDataGridColumnButton;\n","import React, { cloneElement } from 'react';\n\nimport { TopToolbar, CreateButton, sanitizeListRestProps } from 'react-admin';\n\nimport MoreActionsButton from '../Buttons/MoreActionsButton';\nimport DownloadAllFilesButton from '../Buttons/TaskDownloadAllFilesButtonAsMenuItem';\nimport ExportButton from '../Buttons/ExportButtonAsMenuItem';\nimport FilterSaveButton from '../Buttons/FilterSaveButtonAsMenuItem';\n\nimport SelectDataGridColumnButton from '../Layout/SelectDataGridColumnButton';\n\nconst ListActions = ({\n columns,\n currentSort,\n className,\n resource,\n filters,\n displayedFilters,\n setFilters,\n exporter, // you can hide ExportButton if exporter = (null || false)\n filterValues,\n permanentFilter,\n hasCreate, // you can hide CreateButton if hasCreate = false\n basePath,\n selectedIds,\n onUnselectItems,\n showFilter,\n total,\n ...rest\n}) => (\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n setFilters,\n filterValues,\n context: 'button',\n })}\n {hasCreate && <CreateButton basePath={basePath} />}\n <SelectDataGridColumnButton resource={resource} columns={columns} />\n <MoreActionsButton>\n <ExportButton\n disabled={total === 0}\n resource={resource}\n sort={currentSort}\n filter={{ ...filterValues, ...permanentFilter }}\n exporter={exporter}\n maxResults={5000}\n label=\"ra.action.export_max_5000\"\n />\n <DownloadAllFilesButton filterValues={filterValues} resource={resource} source=\"acts\" />\n <DownloadAllFilesButton filterValues={filterValues} resource={resource} source=\"files\" />\n <DownloadAllFilesButton\n filterValues={filterValues}\n resource={resource}\n source=\"files\"\n sources={['files', 'acts']}\n />\n <FilterSaveButton\n disabled={Object.keys(filterValues).length === 0}\n resource={resource}\n filter={{ ...filterValues }}\n />\n </MoreActionsButton>\n </TopToolbar>\n);\n\nListActions.defaultProps = {\n selectedIds: [],\n onUnselectItems: () => null,\n};\n\nexport default ListActions;\n","import { Link } from 'react-admin';\nimport React from 'react';\nimport Typography from '@material-ui/core/Typography';\nimport get from 'lodash/get';\n\nconst stopPropagation = (e) => e.stopPropagation();\n\nconst TaskNameLinkedField = ({ className, basePath, resource, source, record, ...props }) => {\n if (!record) return null;\n const name = get(record, source);\n const path = `${basePath}/${record.id}/show`;\n return (\n <Link to={path} onClick={stopPropagation}>\n <Typography variant=\"body2\" className={className}>\n {name}\n </Typography>\n </Link>\n );\n};\n\nTaskNameLinkedField.defaultProps = {\n addLabel: true,\n};\n\nexport default TaskNameLinkedField;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M13 8a4 4 0 01-4 4 4 4 0 01-4-4 4 4 0 014-4 4 4 0 014 4m4 10v2H1v-2c0-2.21 3.58-4 8-4s8 1.79 8 4m3.5-3.5V16H19v-1.5h1.5m-2-5H17V9a3 3 0 013-3 3 3 0 013 3c0 .97-.5 1.88-1.29 2.41l-.3.19c-.57.4-.91 1.01-.91 1.7v.2H19v-.2c0-1.19.6-2.3 1.59-2.95l.29-.19c.39-.26.62-.69.62-1.16A1.5 1.5 0 0020 7.5 1.5 1.5 0 0018.5 9v.5z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M12 2a2 2 0 012 2c0 .74-.4 1.39-1 1.73V7h1a7 7 0 017 7h1a1 1 0 011 1v3a1 1 0 01-1 1h-1v1a2 2 0 01-2 2H5a2 2 0 01-2-2v-1H2a1 1 0 01-1-1v-3a1 1 0 011-1h1a7 7 0 017-7h1V5.73c-.6-.34-1-.99-1-1.73a2 2 0 012-2M7.5 13A2.5 2.5 0 005 15.5 2.5 2.5 0 007.5 18a2.5 2.5 0 002.5-2.5A2.5 2.5 0 007.5 13m9 0a2.5 2.5 0 00-2.5 2.5 2.5 2.5 0 002.5 2.5 2.5 2.5 0 002.5-2.5 2.5 2.5 0 00-2.5-2.5z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M12 3c4.97 0 9 3.58 9 8s-6 10-9 10-9-5.58-9-10 4.03-8 9-8m-1.69 7.93C9.29 9.29 7.47 8.58 6.25 9.34c-1.22.76-1.38 2.71-.36 4.35 1.03 1.64 2.85 2.35 4.07 1.59 1.22-.78 1.37-2.71.35-4.35m3.38 0c-1.02 1.64-.87 3.57.35 4.35 1.22.76 3.04.05 4.07-1.59 1.02-1.64.86-3.59-.36-4.35-1.22-.76-3.04-.05-4.06 1.59M12 17.75c-2 0-2.5-.75-2.5-.75 0 .03.5 2 2.5 2s2.5-2 2.5-2-.5.75-2.5.75z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M12 3a4 4 0 110 8 4 4 0 010-8zm4 10.54c0 1.06-.28 3.53-2.19 6.29L13 15l.94-1.88a17.27 17.27 0 00-3.88 0L11 15l-.81 4.83A11.4 11.4 0 018 13.54c-2.39.7-4 1.96-4 3.46v4h16v-4c0-1.5-1.6-2.76-4-3.46z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import React from 'react';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport { useTranslate } from 'react-admin';\nimport GuestIcon from '../Icons/AccountQuestion';\nimport ServiceIcon from '../Icons/Robot';\nimport SuperadminIcon from '../Icons/Alien';\nimport AdminIcon from '../Icons/AccountTie';\nimport ManagerIcon from '@material-ui/icons/Person';\nimport DispatcherIcon from '@material-ui/icons/HeadsetMic';\nimport EmployeeIcon from '@material-ui/icons/Build';\n\nconst getIcon = (role) => {\n let icon;\n switch (role) {\n case 'GUEST':\n icon = <GuestIcon />;\n break;\n case 'SERVICE':\n icon = <ServiceIcon />;\n break;\n case 'SUPERADMIN':\n icon = <SuperadminIcon />;\n break;\n case 'ADMIN':\n icon = <AdminIcon />;\n break;\n case 'DISPATCHER':\n icon = <DispatcherIcon />;\n break;\n case 'MANAGER':\n icon = <ManagerIcon />;\n break;\n case 'EMPLOYEE':\n icon = <EmployeeIcon />;\n break;\n default:\n icon = <GuestIcon />;\n break;\n }\n return icon;\n};\n\nconst RoleIcon = ({ record, ...props }) => {\n const translate = useTranslate();\n if (!record) return null;\n const title = translate(`resources.User.enums.role.${record.role}`, { _: record.role });\n const icon = getIcon(record.role);\n\n return (\n <Tooltip title={title} placement=\"top\">\n <span>{icon}</span>\n </Tooltip>\n );\n};\n\nexport default RoleIcon;\n","import React from 'react';\nimport get from 'lodash/get';\nimport Typography from '@material-ui/core/Typography';\nimport sanitizeRestProps from './sanitizeRestProps';\n\nconst regexp = /^(\\+7|7|8)?[\\s-]?([489][0-9]{2})?[\\s-]?([0-9]{3})[\\s-]?([0-9]{4})$/;\n\nconst PhoneField = ({ className, resource, source, record = {}, ...props }) => {\n const phone = get(record, source);\n if (!phone) return null;\n const maskedPhone = phone.replace(regexp, '$1 ($2) $3-$4');\n\n return (\n <Typography component=\"span\" variant=\"body2\" className={className} {...sanitizeRestProps(props)}>\n {maskedPhone}\n </Typography>\n );\n};\n\nPhoneField.defaultProps = {\n addLabel: true,\n};\n\nexport default PhoneField;\n","import React from 'react';\nimport parse from 'autosuggest-highlight/parse';\nimport match from 'autosuggest-highlight/match';\nimport { makeStyles, MenuItem, ListItemIcon, ListItemText } from '@material-ui/core';\nimport classnames from 'classnames';\nimport RoleIcon from './UserRoleIcon';\nimport PhoneField from '../Fields/PhoneField';\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {},\n icon: {\n marginRight: 16,\n },\n selected: { fontWeight: 500 },\n highlight: {\n fontWeight: 500,\n color: '#000',\n },\n title: {},\n mr1: { marginRight: 8 },\n }),\n { name: 'RaAutocompleteSuggestionItem' },\n);\n\nconst MaintainableItemSuggestion = ({\n suggestion,\n index,\n highlightedIndex,\n isSelected,\n filterValue,\n classes: classesOverride,\n getSuggestionText,\n ...rest\n}) => {\n const classes = useStyles({ classes: classesOverride });\n const suggestionText = getSuggestionText(suggestion);\n if (!suggestion.id)\n return (\n <MenuItem key={suggestion.id} {...rest}>\n {suggestionText}\n </MenuItem>\n );\n const isHighlighted = highlightedIndex === index;\n const matches = match(suggestionText, filterValue);\n const parts = parse(suggestionText, matches);\n\n return (\n <MenuItem\n key={suggestion.id}\n selected={isHighlighted}\n className={classnames(classes.root, {\n [classes.selected]: isSelected,\n })}\n {...rest}\n >\n <ListItemIcon>\n <RoleIcon record={suggestion} />\n </ListItemIcon>\n <ListItemText\n primary={parts.map((part, index) => (\n <span key={index} className={part.highlight ? classes.highlight : ''}>\n {part.text}\n </span>\n ))}\n secondary={<PhoneField record={suggestion} source=\"phone\" />}\n />\n </MenuItem>\n );\n};\n\nexport default MaintainableItemSuggestion;\n","import { useState } from 'react';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\nimport { LOCAL_STORAGE } from '../../appsettings';\n\nconst useStorage = (key, initialValue = {}) => {\n const _storage = JSON.parse(window.localStorage.getItem(LOCAL_STORAGE)) || {};\n\n const [storedValue, setStoredValue] = useState(() => {\n const storage = key ? get(_storage, key, initialValue) : _storage;\n return storage;\n });\n\n const setValue = (value) => {\n const valueToStore = value instanceof Function ? value(storedValue) : value;\n setStoredValue(valueToStore);\n set(_storage, key, valueToStore);\n window.localStorage.setItem(LOCAL_STORAGE, JSON.stringify(_storage));\n };\n\n return [storedValue, setValue];\n};\n\nexport default useStorage;\n","import React from 'react';\nimport { TextField, DateField } from 'react-admin';\nimport moment from 'moment';\n\nconst TaskLastCommentField = ({ record, source, showDate, ...props }) => {\n if (!record) return null;\n const comments =\n record[source].sort &&\n record[source].sort((first, second) => {\n const time1 = moment(first.createdAt).unix();\n const time2 = moment(second.createdAt).unix();\n if (time1 > time2) return 1;\n if (time2 > time1) return -1;\n return 0;\n });\n\n if (!comments) return null;\n\n const comment = comments[comments.length - 1];\n\n return (\n <>\n <TextField {...props} record={comment} source=\"body\" />\n {showDate && <DateField {...props} showTime record={comment} source=\"createdAt\" />}\n </>\n );\n};\n\nexport default TaskLastCommentField;\n","import React from 'react';\nimport { Link } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n link: {\n textDecoration: 'none',\n cursor: 'pointer',\n },\n}));\n\nconst stopPropagation = (e) => e.stopPropagation();\n\nconst LinkWrapper = ({ resource, source, record, children, ...props }) => {\n const classes = useStyles();\n const path = `/${resource}/${record.id}/show`;\n\n return (\n <Link className={classes.link} to={path} onClick={stopPropagation}>\n {React.cloneElement(children, { ...props, resource, source, record })}\n </Link>\n );\n};\n\nexport default LinkWrapper;\n","import React from 'react';\n\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { /*AutocompleteInput,*/ useTranslate } from 'react-admin';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n padding: 12,\n },\n region: {\n flexGrow: 0,\n marginRight: 16,\n },\n}));\n\nconst TaskListMaintainableItemField = ({ className, resource, source, record, ...props }) => {\n const translate = useTranslate();\n if (!record) return null;\n const type = record.maintainableItemType || record.type;\n const name = record.name;\n const addrManual = record.addrManual;\n\n const text = `[${translate(`resources.Task.enums.maintainableItemTypeShort.${type}`, { _: type })}] ${name}`;\n\n return (\n <Typography className={className} variant=\"body2\">\n {text}\n </Typography>\n );\n};\n\nTaskListMaintainableItemField.defaultProps = {\n addLabel: true,\n};\n\nexport default TaskListMaintainableItemField;\n","import { Form } from 'react-final-form';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { FilterFormInput } from 'react-admin';\nimport PropTypes from 'prop-types';\nimport arrayMutators from 'final-form-arrays';\nimport classnames from 'classnames';\nimport lodashGet from 'lodash/get';\nimport lodashSet from 'lodash/set';\nimport { makeStyles } from '@material-ui/core/styles';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\n\nconst useStyles = makeStyles(\n (theme) => ({\n form: {\n marginTop: -theme.spacing(2),\n paddingTop: 0,\n display: 'flex',\n alignItems: 'flex-end',\n flexWrap: 'wrap',\n minHeight: theme.spacing(10),\n pointerEvents: 'none',\n },\n clearFix: { clear: 'right' },\n }),\n { name: 'ManualSubmitFilterForm' },\n);\n\nconst sanitizeRestProps = ({\n active,\n dirty,\n dirtyFields,\n dirtyFieldsSinceLastSubmit,\n dirtySinceLastSubmit,\n error,\n errors,\n filterValues,\n form,\n handleSubmit,\n hasSubmitErrors,\n hasValidationErrors,\n invalid,\n modified,\n modifiedSinceLastSubmit,\n pristine,\n setFilters,\n submitError,\n submitErrors,\n submitFailed,\n submitSucceeded,\n submitting,\n touched,\n valid,\n validating,\n values,\n visited,\n ...props\n}) => props;\n\nexport const ManualSubmitFilterForm = ({\n classes = {},\n className,\n resource,\n margin,\n variant,\n filters,\n displayedFilters = {},\n hideFilter,\n initialValues,\n handleSubmit,\n formRef,\n ...rest\n}) => {\n useEffect(() => {\n filters.forEach((filter) => {\n if (filter.props.alwaysOn && filter.props.defaultValue) {\n throw new Error(\n 'Cannot use alwaysOn and defaultValue on a filter input. Please set the filterDefaultValues props on the <List> element instead.',\n );\n }\n });\n }, [filters]);\n\n const getShownFilters = () =>\n filters.filter(\n (filterElement) =>\n filterElement.props.alwaysOn ||\n displayedFilters[filterElement.props.source] ||\n typeof lodashGet(initialValues, filterElement.props.source) !== 'undefined',\n );\n\n const handleHide = useCallback((event) => hideFilter(event.currentTarget.dataset.key), [hideFilter]);\n return (\n <form\n className={classnames(className, classes.form)}\n {...sanitizeRestProps(rest)}\n onSubmit={handleSubmit}\n ref={formRef}\n >\n {getShownFilters().map((filterElement) => (\n <FilterFormInput\n key={filterElement.props.source}\n filterElement={filterElement}\n handleHide={handleHide}\n resource={resource}\n margin={margin}\n variant={variant}\n />\n ))}\n <div className={classes.clearFix} />\n <button type=\"submit\" style={{ display: 'none' }}>\n Submit\n </button>\n </form>\n );\n};\n\nManualSubmitFilterForm.propTypes = {\n resource: PropTypes.string.isRequired,\n filters: PropTypes.arrayOf(PropTypes.node).isRequired,\n displayedFilters: PropTypes.object,\n hideFilter: PropTypes.func.isRequired,\n initialValues: PropTypes.object,\n classes: PropTypes.object,\n className: PropTypes.string,\n};\n\nexport const mergeInitialValuesWithDefaultValues = ({ initialValues, filters }) => ({\n ...filters\n .filter((filterElement) => filterElement.props.alwaysOn && filterElement.props.defaultValue)\n .reduce(\n (acc, filterElement) => lodashSet({ ...acc }, filterElement.props.source, filterElement.props.defaultValue),\n {},\n ),\n ...initialValues,\n});\n\nconst EnhancedFilterForm = (props) => {\n const { classes: classesOverride, initialValues, setFilters, ...rest } = props;\n const classes = useStyles(props);\n const [state, setState] = useState({});\n const mergedInitialValuesWithDefaultValues = mergeInitialValuesWithDefaultValues(props);\n\n useDeepCompareEffect(() => {\n setState(mergedInitialValuesWithDefaultValues);\n }, [mergedInitialValuesWithDefaultValues]);\n\n const handleSubmit = (values) => {\n setFilters(values);\n };\n\n return (\n <Form\n onSubmit={handleSubmit}\n initialValues={state}\n mutators={{ ...arrayMutators }}\n render={(formProps) => <ManualSubmitFilterForm classes={classes} {...formProps} {...rest} />}\n />\n );\n};\n\nexport default EnhancedFilterForm;\n","import React, { useCallback } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ContentFilter from '@material-ui/icons/FilterList';\nimport classnames from 'classnames';\nimport { Button } from 'react-admin';\nimport login from '../../../authPrivider/login';\n\nconst useStyles = makeStyles(\n {\n root: { display: 'inline-block' },\n },\n { name: 'ManualSubmitFilterButton' },\n);\n\nconst ManualSubmitFilterButton = ({ formRef, classes: classesOverride, className, resource, ...props }) => {\n const classes = useStyles(props);\n\n const handleFilter = useCallback(\n (event) => {\n event.preventDefault();\n typeof formRef.current.requestSubmit === 'function'\n ? formRef.current.requestSubmit()\n : formRef.current.dispatchEvent(new Event('submit', { cancelable: true }));\n },\n [formRef],\n );\n\n return (\n <div className={classnames(classes.root, className)} {...props}>\n <Button\n className=\"apply-filter\"\n label=\"ra.action.apply_filter\"\n disableElevation\n variant=\"contained\"\n type=\"submit\"\n onClick={handleFilter}\n >\n <ContentFilter />\n </Button>\n </div>\n );\n};\n\nexport default ManualSubmitFilterButton;\n","import React from 'react';\nimport { sanitizeListRestProps, useListContext } from 'react-admin';\nimport ManualSubmitFilterForm from './ManualSubmitFilterForm';\nimport ManualSubmitFilterButton from './ManualSubmitFilterButton';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport FilterButton from '../FilterButton';\n\nconst useStyles = makeStyles(\n {\n button: {},\n form: {},\n },\n { name: 'ManualSubmitFilter' },\n);\n\nconst Filter = (props) => {\n const classes = useStyles(props);\n const { resource, showFilter, hideFilter, setFilters, displayedFilters, filterValues } = useListContext(props);\n\n const renderButton = () => {\n const { classes: classesOverride, context, children, variant, formRef, ...rest } = props;\n\n return (\n <>\n <ManualSubmitFilterButton\n className={classes.button}\n resource={resource}\n formRef={formRef}\n {...sanitizeListRestProps(rest)}\n />\n <FilterButton\n className={classes.button}\n resource={resource}\n filters={React.Children.toArray(children)}\n showFilter={showFilter}\n setFilters={setFilters}\n displayedFilters={displayedFilters}\n filterValues={filterValues}\n {...sanitizeListRestProps(rest)}\n />\n </>\n );\n };\n\n const renderForm = () => {\n const { classes: classesOverride, context, children, formRef, ...rest } = props;\n\n return (\n <ManualSubmitFilterForm\n className={classes.form}\n resource={resource}\n filters={React.Children.toArray(children)}\n hideFilter={hideFilter}\n displayedFilters={displayedFilters}\n initialValues={filterValues}\n setFilters={setFilters}\n formRef={formRef}\n {...sanitizeListRestProps(rest)}\n />\n );\n };\n\n return props.context === 'button' ? renderButton() : renderForm();\n};\n\nFilter.propTypes = {\n children: PropTypes.node,\n classes: PropTypes.object,\n context: PropTypes.oneOf(['form', 'button']),\n};\n\nexport default Filter;\n","import React from 'react';\nimport {\n BulkExportButton,\n Datagrid,\n DateField,\n NumberInput,\n ReferenceManyField,\n DateTimeInput,\n NumberField,\n ReferenceField,\n ReferenceInput,\n TextField,\n TextInput,\n useTranslate,\n BooleanField,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n BooleanInput,\n NullableBooleanInput,\n} from 'react-admin';\nimport { useListController, ListContextProvider, ListView } from 'react-admin';\nimport EmojiObjectsIcon from '@material-ui/icons/EmojiObjects';\nimport { dateFormatter, enumFormatter, taskExporter } from '../../exporter';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport AutocompleteInput from '../Inputs/AutoompleteInput';\nimport BulkDownloadFilesButton from '../Buttons/TaskBulkDownloadFilesButton';\nimport BulkRemoveButton from '../Buttons/BulkRemoveButton';\nimport { DeadlineIcon } from '../Fields/DeadlineField';\nimport EnumArrayInput from '../Inputs/EnumArrayInput';\nimport EnumField from '../Fields/EnumField';\nimport EnumInput from '../Inputs/EnumInput';\nimport FileAttachedField from '../Fields/FileAttachedField';\nimport Filter from '../Layout/Filter';\nimport LabelsField from '../Fields/LabelsField';\nimport LocationSuggestion from '../Location/LocationSuggestion';\nimport MaintainableItemField from './MaintainableItemField';\nimport MaintainableItemSuggestion from '../MaintainableItem/MaintainableItemSuggestion';\nimport NestedField from '../Fields/NestedField';\nimport ResultField from './TaskResultField';\nimport SearchInput from '../Inputs/SearchInput';\nimport { TaskStatusChip, TaskStatusDotWithLabel, TaskStatusDotWithTooltip } from './TaskStatusField';\n\nimport TaskListActions from './TaskListActions';\nimport TaskNameLinkedField from './TaskNameLinkedField';\nimport UserSuggestion from '../User/UserSuggestion';\nimport { ability } from '../../abilityProvider';\nimport { dateTimeOptions } from '../../utils';\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport useListColumns from '../../hooks/list/useListColumns';\nimport useListStorageColumns from '../../hooks/localStorage/useListStorageColumns';\nimport TaskLastCommentField from './TaskLastCommentField';\nimport LinkWrapper from '../Buttons/LinkWrapper';\nimport TaskListDistributorField from './TaskListDistributorField';\nimport TaskListMaintainableItemField from './TaskListMaintainableItemField';\nimport ManualSubmitFilter from '../Layout/filter/ManualSubmitFilter';\nimport { BooleanLampField } from './BooleanLampField';\n\nconst useStyles = makeStyles((theme) => ({\n row: {\n height: 40,\n },\n clampedText: {\n margin: 0,\n '-webkit-line-clamp': 5,\n display: ' -webkit-box',\n '-webkit-box-orient': 'vertical',\n overflow: 'hidden',\n },\n cellAlignCenter: { textAlign: 'center' },\n}));\n\nconst filterStyles = makeStyles((theme) => ({\n arrayEnum: {\n minWidth: 150,\n },\n}));\n\nconst TaskBulkActionButtons = (props) => {\n return (\n <>\n <BulkDownloadFilesButton {...props} source=\"acts\" />\n <BulkDownloadFilesButton {...props} source=\"files\" />\n <BulkDownloadFilesButton {...props} source=\"files\" sources={['files', 'acts']} />\n <BulkExportButton {...props} />\n {ability.can('remove', 'Task') && <BulkRemoveButton {...props} />}\n </>\n );\n};\n\nconst TaskFilter = (props) => {\n const user = useSelector((state) => state.user, shallowEqual);\n const regions = (user && user.regions) || [];\n const classes = filterStyles();\n return (\n <ManualSubmitFilter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <EnumInput source=\"status\" Enum=\"TaskStatus\" emptyText=\"ra.message.no\" alwaysOn />\n <EnumInput source=\"type\" Enum=\"TaskType\" emptyText=\"ra.message.no\" alwaysOn />\n <TextInput source=\"gmiId\" />\n <EnumInput\n Enum=\"MaintainableItemType\"\n source=\"maintainableItemType\"\n allowEmpty\n emptyText=\"ra.message.no\"\n alwaysOn\n />\n {ability.can('getList', 'Location') && (\n <ReferenceInput\n source=\"region\"\n reference=\"Region\"\n perPage={50}\n filter={{ ids: regions }}\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput optionText=\"unrestrictedName\" suggestionItem={<LocationSuggestion />} />\n </ReferenceInput>\n )}\n {ability.can('getList', 'User') && (\n <ReferenceInput\n source=\"processedBy.id\"\n reference=\"User\"\n filter={{ role: 'DISPATCHER' }}\n sort={{ field: 'name', order: 'ASC' }}\n label=\"resources.Task.fields.processedBy\"\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n <DateTimeInput source=\"completedAt_gte\" />\n <DateTimeInput source=\"completedAt_lte\" />\n <DateTimeInput source=\"planAt_gte\" />\n <DateTimeInput source=\"planAt_lte\" />\n {ability.can('getList', 'User') && (\n <ReferenceInput\n source=\"executedBy.id\"\n reference=\"User\"\n filter={{ role_in: ['MANAGER', 'EMPLOYEE'] }}\n sort={{ field: 'name', order: 'ASC' }}\n label=\"resources.Task.fields.executedBy\"\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n <ReferenceInput\n source=\"distributor\"\n sort={{ field: 'name', order: 'ASC' }}\n reference=\"Counterparty\"\n filter={{ regions: regions.map((r) => ({ id: r })) }}\n label=\"resources.Task.fields.distributor\"\n emptyText=\"ra.message.no\"\n perPage={50}\n alwaysOn\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n <ReferenceArrayInput\n source=\"counterparty_in\"\n reference=\"Counterparty\"\n label=\"resources.Task.fields.counterparty_in\"\n sort={{ field: 'name', order: 'ASC' }}\n >\n <AutocompleteArrayInput optionText=\"name\" />\n </ReferenceArrayInput>\n <NullableBooleanInput source={'verificationCheck'} style={{ minWidth: '200px' }} nullLabel=\"ra.message.all\" />\n {ability.can('getList', 'Object') && (\n <ReferenceInput\n source=\"maintainableItem\"\n reference=\"ConstructionObject\"\n perPage={50}\n filter={{ regions: regions.map((r) => ({ id: r })) }}\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<MaintainableItemSuggestion />} />\n </ReferenceInput>\n )}\n <TextInput source=\"description_contains\" label=\"resources.Task.fields.description\" />\n {ability.can('getList', 'User') && (\n <ReferenceInput\n source=\"responsibledBy.id\"\n reference=\"User\"\n filter={{ role: 'MANAGER' }}\n sort={{ field: 'name', order: 'ASC' }}\n label=\"resources.Task.fields.responsibledBy\"\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n {ability.can('getList', 'User') && (\n <ReferenceInput\n source=\"oneOfUser.id\"\n reference=\"User\"\n sort={{ field: 'name', order: 'ASC' }}\n label=\"resources.Task.fields.oneOfUser\"\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n <TextInput source=\"alias_contains\" label=\"resources.Task.fields.alias\" />\n {ability.can('getList', 'User') && (\n <ReferenceInput\n source=\"createdBy.id\"\n reference=\"User\"\n sort={{ field: 'name', order: 'ASC' }}\n label=\"resources.Task.fields.createdBy\"\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n\n <DateTimeInput source=\"createdAt_gte\" />\n <DateTimeInput source=\"createdAt_lte\" />\n <DateTimeInput source=\"deadlineAt_gte\" />\n <DateTimeInput source=\"deadlineAt_lte\" />\n <EnumInput\n source=\"status_not\"\n Enum=\"TaskStatus\"\n options=\"resources.Task.enums.status.\"\n emptyText=\"ra.message.no\"\n />\n <EnumArrayInput\n Enum=\"TaskStatus\"\n className={classes.arrayEnum}\n source=\"status_in\"\n options=\"resources.Task.enums.status.\"\n />\n <EnumArrayInput\n Enum=\"MaintainableItemType\"\n className={classes.arrayEnum}\n source=\"maintainableItemType_in\"\n options=\"resources.Task.enums.maintainableItemType.\"\n />\n <EnumInput source=\"type_not\" Enum=\"TaskType\" options=\"resources.Task.enums.type.\" emptyText=\"ra.message.no\" />\n <EnumArrayInput\n Enum=\"TaskType\"\n className={classes.arrayEnum}\n source=\"type_in\"\n options=\"resources.Task.enums.type.\"\n />\n </ManualSubmitFilter>\n );\n};\n\nexport const ReferenceDatagrid = (props) => {\n const classes = useStyles();\n\n return (\n <Datagrid rowClick=\"show\" classes={{ row: classes.row }}>\n <TaskStatusDotWithTooltip source=\"status\" resource=\"Task\" />\n <TextField source=\"alias\" />\n {/*<NumberField source=\"number\" options={{ useGrouping: false, minimumIntegerDigits: 6 }} />*/}\n <EnumField source=\"type\" />\n <TextField source=\"description\" className={classes.clampedText} />\n {ability.can('getOne', 'Task', 'processedBy') && (\n <NestedField source=\"processedBy\" reference=\"User\">\n <TextField source=\"name\" />\n </NestedField>\n )}\n {ability.can('getOne', 'Task', 'responsibledBy') && (\n <NestedField source=\"responsibledBy\" reference=\"User\">\n <TextField source=\"name\" />\n </NestedField>\n )}\n {ability.can('getOne', 'Task', 'executedBy') && (\n <NestedField source=\"executedBy\" reference=\"User\">\n <TextField source=\"name\" />\n </NestedField>\n )}\n {/*{ability.can(\"getOne\", \"Task\", \"comment\") && <TaskLastCommentField source=\"comments\" className={classes.clampedText} />}*/}\n {ability.can('getOne', 'Task', 'result') && <ResultField source=\"result\" className={classes.clampedText} />}\n {ability.can('getOne', 'Task', 'createdAt') && (\n <DateField\n source=\"createdAt\"\n textAlign=\"right\"\n options={dateTimeOptions}\n label=\"resources.Task.fields.createdAt\"\n />\n )}\n {/*{ability.can(\"getOne\", \"Task\", \"updatedAt\") && <DateField source=\"updatedAt\" textAlign=\"right\" options={dateTimeOptions} />}*/}\n {ability.can('getOne', 'Task', 'planAt') && (\n <DateField source=\"planAt\" textAlign=\"right\" options={dateTimeOptions} />\n )}\n {ability.can('getOne', 'Task', 'deadlineAt') && (\n <DateField source=\"deadlineAt\" textAlign=\"right\" options={dateTimeOptions} />\n )}\n {ability.can('getOne', 'Task', 'completedAt') && (\n <DateField source=\"completedAt\" textAlign=\"right\" options={dateTimeOptions} />\n )}\n <LabelsField>\n <DeadlineIcon />\n <FileAttachedField />\n </LabelsField>\n </Datagrid>\n );\n};\n\nconst TaskList = ({ modelExport, ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const exporter = taskExporter(translate(`resources.${props.resource}.name`, { smart_count: 2 }), modelExport, {\n translate,\n });\n const user = useSelector((state) => state.user, shallowEqual);\n const regions = (user && user.regions) || [];\n const manualSubmitForm = React.useRef(null);\n const taskListColumns = [\n <LinkWrapper source=\"gmiId\">\n <TextField />\n </LinkWrapper>,\n <TaskStatusChip source=\"status\" size=\"small\" column=\"status\" />,\n <TaskStatusDotWithLabel source=\"status\" column=\"statusDotWithLabel\" />,\n <TaskStatusDotWithTooltip source=\"status\" column=\"statusDotWithTooltip\" cellClassName={classes.cellAlignCenter} />,\n <LinkWrapper source=\"alias\">\n <TextField />\n </LinkWrapper>,\n <EnumField source=\"type\" alwaysOn />,\n <TextField source=\"description\" className={classes.clampedText} />,\n <ReferenceField source=\"region\" reference=\"Region\" link={false}>\n <TextField source=\"unrestrictedName\" />\n </ReferenceField>,\n <ReferenceField\n source=\"distributor\"\n sort={{ field: 'name', order: 'ASC' }}\n reference=\"Counterparty\"\n link=\"show\"\n sortable={false}\n >\n <TextField source=\"name\" />\n </ReferenceField>,\n // <TaskListDistributorField source=\"distributor\" sort={{ field: 'name', order: 'ASC' }} sortable={false}/>,\n <ReferenceField source=\"maintainableItem\" reference=\"ConstructionObject\" link=\"show\" sortable={false}>\n <TaskListMaintainableItemField source=\"name\" />\n </ReferenceField>,\n ability.can('getOne', 'Task', 'processedBy') && (\n <NestedField source=\"processedBy\" reference=\"User\" sortable={false}>\n <TextField source=\"name\" />\n </NestedField>\n ),\n ability.can('getOne', 'Task', 'responsibledBy') && (\n <NestedField source=\"responsibledBy\" reference=\"User\" sortable={false}>\n <TextField source=\"name\" />\n </NestedField>\n ),\n ability.can('getOne', 'Task', 'executedBy') && (\n <NestedField source=\"executedBy\" reference=\"User\" sortable={false}>\n <TextField source=\"name\" />\n </NestedField>\n ),\n ability.can('getOne', 'Task', 'leadedBy') && (\n <NestedField source=\"leadedBy\" reference=\"User\" sortable={false}>\n <TextField source=\"name\" />\n </NestedField>\n ),\n ability.can('getOne', 'Task', 'comment') && (\n <TaskLastCommentField source=\"comments\" className={classes.clampedText} sortable={false} />\n ),\n ability.can('getOne', 'Task', 'result') && <ResultField source=\"result\" className={classes.clampedText} />,\n ability.can('getOne', 'Task', 'createdAt') && (\n <DateField source=\"createdAt\" textAlign=\"right\" options={dateTimeOptions} />\n ),\n ability.can('getOne', 'Task', 'updatedAt') && (\n <DateField source=\"updatedAt\" textAlign=\"right\" options={dateTimeOptions} />\n ),\n ability.can('getOne', 'Task', 'planAt') && (\n <DateField source=\"planAt\" textAlign=\"right\" options={dateTimeOptions} />\n ),\n ability.can('getOne', 'Task', 'deadlineAt') && (\n <DateField source=\"deadlineAt\" textAlign=\"right\" options={dateTimeOptions} />\n ),\n ability.can('getOne', 'Task', 'completedAt') && (\n <DateField source=\"completedAt\" textAlign=\"right\" options={dateTimeOptions} />\n ),\n ability.can('getOne', 'Task', 'verificationCheck') && <BooleanField source=\"verificationCheck\" textAlign=\"right\" />,\n ];\n\n const [listStorageColumns, setListStorageColumns] = useListStorageColumns(\n props.resource,\n taskListColumns.map((column) => column.props.column || column.props.source),\n );\n\n const controllerProps = useListController({ ...props, filterDefaultValues: { region_in: regions } });\n const listColumns = useListColumns(listStorageColumns, taskListColumns);\n\n return (\n <ListContextProvider value={{ ...controllerProps, exporter }}>\n <ListView\n {...props}\n {...controllerProps}\n actions={\n <TaskListActions columns={{ listStorageColumns, setListStorageColumns, ListColumns: taskListColumns }} />\n }\n bulkActionButtons={<TaskBulkActionButtons />}\n exporter={exporter}\n filters={<TaskFilter formRef={manualSubmitForm} />}\n >\n <Datagrid rowClick=\"show\" classes={{ row: classes.row }}>\n {listColumns}\n <LabelsField>\n <DeadlineIcon />\n <FileAttachedField />\n </LabelsField>\n </Datagrid>\n </ListView>\n </ListContextProvider>\n );\n\n // return (\n // <List\n // {...props}\n // actions={<TaskListActions maxResults={100000} columns={taskListColumns} />}\n // bulkActionButtons={<TaskBulkActionButtons />}\n // exporter={exporter}\n // filters={<TaskFilter />}\n // >\n // <Datagrid rowClick=\"show\" classes={{ row: classes.row }}>\n // {listColumns}\n\n // {/* <TaskStatusDotField source=\"status\" />\n // <StatusChip source=\"status\" size=\"small\" />\n // <TextField source=\"alias\" />\n // <NumberField source=\"number\" options={{ useGrouping: false, minimumIntegerDigits: 6 }} />\n // <EnumField source='type' />\n // <TaskNameLinkedField source=\"name\" className={classes.clampedText} />\n // <TextField source=\"description\" className={classes.clampedText} />\n // <ReferenceField source=\"region\" reference=\"Region\" link={false}>\n // <TextField source=\"unrestrictedName\" />\n // </ReferenceField>\n // <ReferenceField source=\"maintainableItem\" reference=\"Object\" link=\"show\" >\n // <MaintainableItemField source=\"name\" />\n // </ReferenceField>\n // {ability.can(\"getOne\", \"Task\", \"processedBy\") && <NestedField source=\"processedBy\" reference=\"User\" >\n // <TextField source=\"name\" />\n // </NestedField>}\n // {ability.can(\"getOne\", \"Task\", \"responsibledBy\") && <NestedField source=\"responsibledBy\" reference=\"User\" >\n // <TextField source=\"name\" />\n // </NestedField>}\n // {ability.can(\"getOne\", \"Task\", \"executedBy\") && <NestedField source=\"executedBy\" reference=\"User\" >\n // <TextField source=\"name\" />\n // </NestedField>}\n // {ability.can(\"getOne\", \"Task\", \"comment\") && <TextField source=\"comment\" className={classes.clampedText} />}\n // {ability.can(\"getOne\", \"Task\", \"result\") && <ResultField source=\"result\" className={classes.clampedText} />}\n // {ability.can(\"getOne\", \"Task\", \"createdAt\") && <DateField source=\"createdAt\" textAlign=\"right\" options={dateTimeOptions} />}\n // {ability.can(\"getOne\", \"Task\", \"updatedAt\") && <DateField source=\"updatedAt\" textAlign=\"right\" options={dateTimeOptions} />}\n // {ability.can(\"getOne\", \"Task\", \"planAt\") && <DateField source=\"planAt\" textAlign=\"right\" options={dateTimeOptions} />}\n // {ability.can(\"getOne\", \"Task\", \"deadlineAt\") && <DateField source=\"deadlineAt\" textAlign=\"right\" options={dateTimeOptions} />}\n // {ability.can(\"getOne\", \"Task\", \"completedAt\") && <DateField source=\"completedAt\" textAlign=\"right\" options={dateTimeOptions} />} */}\n // <LabelsField>\n // <DeadlineIcon />\n // <FileAttachedField />\n // </LabelsField>\n // </Datagrid>\n // </List>\n // )\n};\n\nTaskList.defaultProps = {\n perPage: 100,\n sort: { field: 'updatedAt', order: 'DESC' },\n modelExport: {\n id: true,\n number: true,\n createdAt: dateFormatter,\n type: enumFormatter,\n description: true,\n maintainableItemType: enumFormatter,\n maintainableItem: {\n name: true,\n __resource: 'ConstructionObject',\n },\n status: enumFormatter,\n responsibledBy: {\n name: true,\n __resource: 'User',\n },\n executedBy: {\n name: true,\n __resource: 'User',\n },\n processedBy: {\n name: true,\n __resource: 'User',\n },\n distributedBy: {\n name: true,\n __resource: 'User',\n },\n leadedBy: {\n name: true,\n __resource: 'User',\n },\n comments: {\n body: true,\n createdAt: dateFormatter,\n updatedAt: dateFormatter,\n __resource: 'Comment',\n },\n updatedAt: dateFormatter,\n completedAt: dateFormatter,\n result: enumFormatter,\n alias: true,\n distributor: {\n name: true,\n __resource: 'Counterparty',\n },\n region: {\n unrestrictedName: true,\n __resource: 'Region',\n },\n __resource: 'Task',\n },\n};\n\nexport default TaskList;\n","import useStorage from './useStorage';\n\nexport default (resource, initialValue = []) => {\n return useStorage(`${resource}.list.columns`, initialValue);\n};\n","import { useState } from 'react';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\n\nexport default function (storagedColumns, columns) {\n const [listColumns, setListColumns] = useState([]);\n\n useDeepCompareEffect(() => {\n const result = columns\n .filter((col) => {\n const column = col.props.column || col.props.source;\n\n return storagedColumns.includes(column);\n })\n .map((col, index) => {\n const { column, alwaysOn, ...sanitizedColumnProps } = col.props;\n return {\n ...col,\n props: sanitizedColumnProps,\n key: index,\n };\n });\n\n setListColumns(result);\n\n return () => {\n setListColumns([]);\n };\n }, [storagedColumns]);\n\n return listColumns;\n}\n","import React, { useEffect, useState } from 'react';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ReferenceInput, /*AutocompleteInput,*/ required } from 'react-admin';\nimport { useForm, useFormState } from 'react-final-form';\nimport AutoompleteInputCustom from '../Inputs/AutoompleteInput';\nimport MaintainableItemSuggestion from '../MaintainableItem/MaintainableItemSuggestion';\nimport LocationSuggestion from '../Location/LocationSuggestion';\nimport EnumInput from '../Inputs/EnumInput';\nimport AutocompleteInput from '../Inputs/AutoompleteInput';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\n\nlet regionList = [];\nlet setRegionList = (list) => {\n regionList = [...list];\n};\nlet maintainableItemList = [];\nlet setMaintainableItemList = (list) => {\n maintainableItemList = [...list];\n};\n\nconst validateMaintainableItem = [required()];\n\nconst matchSuggestion = () => true;\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n column: {\n display: 'flex',\n flexDirection: 'column',\n },\n enum: {\n width: 256,\n },\n region: {\n flexGrow: 0,\n marginLeft: 16,\n },\n dis: {\n flexGrow: 0,\n marginRight: 16,\n },\n}));\n\nconst MaintainableItemInput = ({ classes: classesOverride, className, ...props }) => {\n const form = useForm();\n const formState = useFormState();\n const classes = useStyles();\n const user = useSelector((state) => state.user, shallowEqual);\n const counterparties = useSelector((state) => state.admin.resources.Counterparty.data, shallowEqual);\n const [counterparty, setCounterparty] = useState(formState.values.distributor);\n console.log(formState.values);\n useEffect(() => {\n if (!counterparties[counterparty]) return;\n if (!formState.values.distibutor) {\n form.change('distributor', counterparty);\n }\n if (!formState.values.processedBy && counterparties[counterparty].defaultDispatcherId) {\n form.change('processedBy.id', counterparties[counterparty].defaultDispatcherId);\n form.change('processedBy', { id: counterparties[counterparty].defaultDispatcherId });\n }\n if (!formState.values.responsibledBy && counterparties[counterparty].defaultManagerId) {\n form.change('responsibledBy.id', counterparties[counterparty].defaultManagerId);\n form.change('responsibledBy', { id: counterparties[counterparty].defaultManagerId });\n }\n if (!formState.values.leadedBy && counterparties[counterparty].defaultMacroleaderId) {\n form.change('leadedBy.id', counterparties[counterparty].defaultMacroleaderId);\n form.change('leadedBy', { id: counterparties[counterparty].defaultMacroleaderId });\n }\n }, [counterparty]);\n\n if (!user) return null;\n\n let regions = user.regions || [];\n if (counterparty && counterparties[counterparty]) {\n regions = user.regions.filter((reg) => counterparties[counterparty].regions.some((r) => r.id === reg));\n }\n const distributorFilter = { regions: user.regions.map((r) => ({ id: r })) };\n if (user.role === 'DISTRIBUTOR') {\n distributorFilter.ids = [user.distributor];\n }\n const region = formState.values.region || undefined;\n const type = formState.values.maintainableItemType;\n const maintainableItemTypes = user ? user.maintainableItemTypes : [];\n\n const MaintainableItemTypeAccessFilter = (type) => {\n return maintainableItemTypes.some((t) => t === type.name);\n };\n\n const handleChangeDistributor = (value) => {\n const selectedObject = maintainableItemList.find((item) => item.id === formState.values.maintainableItem);\n form.change('addrManual', null);\n\n if (!selectedObject || !selectedObject.counterparty || selectedObject.counterparty.id !== value) {\n form.change('maintainableItem', null);\n form.change('region', null);\n }\n if (!formState.values.processedBy && counterparties[value].defaultDispatcherId) {\n form.change('processedBy.id', counterparties[value].defaultDispatcherId);\n }\n if (!formState.values.responsibledBy && counterparties[value].defaultManagerId) {\n form.change('responsibledBy.id', counterparties[value].defaultManagerId);\n }\n if (!formState.values.leadedBy && counterparties[value].defaultMacroleaderId) {\n form.change('leadedBy.id', counterparties[value].defaultMacroleaderId);\n }\n\n if (!formState.values.executedBy) form.change('executedBy', null);\n\n setCounterparty(value);\n };\n\n const handleChangeRegion = (value) => {\n form.change('maintainableItem', null);\n form.change('addrManual', null);\n const selectItem = regionList.find((region) => region.id === value);\n if (region !== selectItem.id) {\n if (!counterparty) {\n form.change('processedBy', null);\n form.change('responsibledBy', null);\n }\n form.change('executedBy', null);\n }\n };\n\n const handleChangeMaintainableItem = (value) => {\n const selectItem = maintainableItemList.find((item) => item.id === value);\n form.change('addrManual', selectItem.manualAddr || null);\n form.change('maintainableItemType', selectItem.type);\n if (selectItem.counterparty && (!counterparty || selectItem.counterparty.id !== counterparty))\n setCounterparty(selectItem.counterparty.id);\n\n if (selectItem.region && region !== selectItem.region.id) {\n form.change('region', selectItem.region.id);\n\n // form.change('processedBy', null);\n // form.change('responsibledBy', null);\n form.change('executedBy', null);\n }\n\n if (\n formState.values.type === 'SCHEDULEDMAINTENANCE' &&\n (!formState.values.verificationTests || !formState.values.verificationTests.length)\n ) {\n form.change(\n 'verificationTests',\n (counterparties[selectItem.counterparty.id].tests || [])\n .filter((test) => test.constructionObjectsTypes.includes(selectItem.type))\n .map(({ name, description, mark, required }) => ({ name, description, mark, required })),\n );\n }\n };\n\n const handleChangeMaintainableItemType = (value) => {\n if (!formState.values.distributor) {\n form.change('processedBy', null);\n form.change('responsibledBy', null);\n form.change('executedBy', null);\n }\n form.change('addrManual', null);\n form.change('maintainableItem', null);\n };\n\n return (\n <div className={classes.column}>\n <EnumInput\n {...props}\n Enum=\"MaintainableItemType\"\n className={classes.enum}\n filter={MaintainableItemTypeAccessFilter}\n onChange={handleChangeMaintainableItemType}\n label=\"resources.Task.fields.maintainableItemType\"\n source=\"maintainableItemType\"\n options=\"resources.Task.enums.maintainableItemType.\"\n />\n <ReferenceInput\n {...props}\n source=\"distributor\"\n sort={{ field: 'name', order: 'ASC' }}\n reference=\"Counterparty\"\n perPage={50}\n filter={distributorFilter}\n onChange={handleChangeDistributor}\n className={className}\n classes={{ container: classes.dis }}\n validate={required()}\n >\n <AutocompleteInput optionText=\"name\" matchSuggestion={matchSuggestion} />\n </ReferenceInput>\n <div className={classes.container}>\n <ReferenceInput\n {...props}\n key={region}\n style={{ marginRight: 16 }}\n source=\"maintainableItem\"\n reference=\"ConstructionObject\"\n perPage={50}\n filter={{\n regions: regions.map((r) => ({ id: r })),\n region: region ? { id: region } : undefined,\n type,\n counterparty: counterparty ? { id: counterparty } : undefined,\n }}\n validate={validateMaintainableItem}\n onChange={handleChangeMaintainableItem}\n fullWidth\n >\n <AutocompleteInputWithState\n optionText=\"name\"\n suggestionItem={<MaintainableItemSuggestion />}\n matchSuggestion={matchSuggestion}\n set={setMaintainableItemList}\n options={{ helperText: `Введите инвентарный номер, название или адрес` }}\n />\n </ReferenceInput>\n <ReferenceInput\n {...props}\n source=\"region\"\n reference=\"Region\"\n perPage={50}\n filter={{ ids: regions }}\n onChange={handleChangeRegion}\n className={className}\n classes={{ container: classes.region }}\n >\n <AutocompleteInputWithState\n optionText=\"unrestrictedName\"\n suggestionItem={<LocationSuggestion />}\n matchSuggestion={matchSuggestion}\n set={setRegionList}\n />\n </ReferenceInput>\n </div>\n </div>\n );\n};\n\nconst AutocompleteInputWithState = ({ set, choices, ...props }) => {\n set(choices);\n return <AutoompleteInputCustom {...props} choices={choices} />;\n};\n\nexport default MaintainableItemInput;\n","import React, { Children, cloneElement, isValidElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { shallowEqual } from 'react-redux';\nimport { useDropzone } from 'react-dropzone';\nimport { makeStyles } from '@material-ui/core/styles';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport { Labeled, InputHelperText, useInput, useTranslate } from 'react-admin';\nimport sanitizeRestProps from './sanitizeRestProps';\n\nconst useStyles = makeStyles((theme) => ({\n dropZone: {\n background: 'rgba(0, 0, 0, 0.04)',\n transition: theme.transitions.create(['background-color']),\n cursor: 'pointer',\n padding: theme.spacing(1),\n textAlign: 'center',\n color: theme.palette.getContrastText(theme.palette.background.default),\n borderRadius: theme.shape.borderRadius,\n marginBottom: theme.spacing(0.5),\n '&:hover, &:focus': {\n backgroundColor: theme.palette.action.selected,\n },\n },\n preview: {},\n removeButton: {},\n root: { width: '100%' },\n}));\n\nconst FileInput = ({\n accept,\n children,\n className,\n classes: classesOverride,\n format,\n helperText,\n label,\n labelMultiple = 'ra.input.file.upload_several',\n labelSingle = 'ra.input.file.upload_single',\n maxSize,\n minSize,\n multiple = false,\n options: { inputProps: inputPropsOptions, ...options } = {},\n parse,\n placeholder,\n resource,\n source,\n validate,\n disabledAdd,\n ...rest\n}) => {\n const translate = useTranslate();\n const classes = useStyles({ classes: classesOverride });\n\n // turn a browser dropped file structure into expected structure\n const transformFile = (file) => {\n if (!(file instanceof File)) {\n return file;\n }\n\n const { source, title } = Children.only(children).props;\n\n const preview = URL.createObjectURL(file);\n const transformedFile = {\n rawFile: file,\n [source]: preview,\n };\n\n if (title) {\n transformedFile[title] = file.name;\n }\n\n return transformedFile;\n };\n\n const transformFiles = (files) => {\n if (!files) {\n return multiple ? [] : null;\n }\n\n if (Array.isArray(files)) {\n return files.map(transformFile);\n }\n\n return transformFile(files);\n };\n\n const {\n id,\n input: { onChange, value, ...inputProps },\n meta,\n isRequired,\n } = useInput({\n format: format || transformFiles,\n parse: parse || transformFiles,\n source,\n type: 'file',\n validate,\n ...rest,\n });\n const { touched, error } = meta;\n const files = value ? (Array.isArray(value) ? value : [value]) : [];\n\n const onDrop = (newFiles) => {\n newFiles.map((file) =>\n Object.assign(file, {\n preview: URL.createObjectURL(file),\n }),\n );\n\n const updatedFiles = multiple ? [...files, ...newFiles] : [...newFiles];\n\n if (multiple) {\n onChange(updatedFiles);\n } else {\n onChange(updatedFiles[0]);\n }\n };\n\n const onRemove = (file) => () => {\n if (multiple) {\n const filteredFiles = files.filter((stateFile) => !shallowEqual(stateFile, file));\n onChange(filteredFiles);\n } else {\n onChange(null);\n }\n };\n\n const childrenElement = isValidElement(Children.only(children)) ? Children.only(children) : undefined;\n\n const { getRootProps, getInputProps } = useDropzone({\n ...options,\n accept,\n maxSize,\n minSize,\n multiple,\n onDrop,\n });\n return (\n <Labeled\n id={id}\n label={label}\n className={`${classes.root} ${className}`}\n source={source}\n resource={resource}\n isRequired={isRequired}\n meta={meta}\n {...sanitizeRestProps(rest)}\n >\n <>\n <div\n data-testid=\"dropzone\"\n className={classes.dropZone}\n style={{ display: disabledAdd ? 'none' : 'auto' }}\n {...getRootProps()}\n >\n <input\n id={id}\n disabled={disabledAdd}\n {...getInputProps({\n ...inputProps,\n ...inputPropsOptions,\n })}\n />\n {placeholder ? placeholder : multiple ? <p>{translate(labelMultiple)}</p> : <p>{translate(labelSingle)}</p>}\n </div>\n {children && (\n <div className=\"previews\">\n {files\n .filter((file) => !file.hidden)\n .map((file, index) =>\n cloneElement(childrenElement, {\n key: index,\n onDelete: onRemove(file),\n record: file,\n className: classes.preview,\n }),\n )}\n </div>\n )}\n {(touched && error) || helperText ? (\n <FormHelperText>\n <InputHelperText touched={touched} error={error} helperText={helperText} />\n </FormHelperText>\n ) : null}\n </>\n </Labeled>\n );\n};\n\nFileInput.propTypes = {\n accept: PropTypes.string,\n children: PropTypes.element,\n classes: PropTypes.object,\n className: PropTypes.string,\n id: PropTypes.string,\n isRequired: PropTypes.bool,\n label: PropTypes.string,\n labelMultiple: PropTypes.string,\n labelSingle: PropTypes.string,\n maxSize: PropTypes.number,\n minSize: PropTypes.number,\n multiple: PropTypes.bool,\n options: PropTypes.object,\n resource: PropTypes.string,\n source: PropTypes.string,\n placeholder: PropTypes.node,\n};\n\nexport default FileInput;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M15.5,17H14L12,9.5L10,17H8.5L6.1,7H7.8L9.34,14.5L11.3,7H12.7L14.67,14.5L16.2,7H17.9M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H19M10.59,10.08C10.57,10.13 10.3,11.84 8.5,14.77C8.5,14.77 5,16.58 5.83,17.94C6.5,19 8.15,17.9 9.56,15.27C9.56,15.27 11.38,14.63 13.79,14.45C13.79,14.45 17.65,16.19 18.17,14.34C18.69,12.5 15.12,12.9 14.5,13.09C14.5,13.09 12.46,11.75 12,9.89C12,9.89 13.13,5.95 11.38,6C9.63,6.05 10.29,9.12 10.59,10.08M11.4,11.13C11.43,11.13 11.87,12.33 13.29,13.58C13.29,13.58 10.96,14.04 9.9,14.5C9.9,14.5 10.9,12.75 11.4,11.13M15.32,13.84C15.9,13.69 17.64,14 17.58,14.32C17.5,14.65 15.32,13.84 15.32,13.84M8.26,15.7C7.73,16.91 6.83,17.68 6.6,17.67C6.37,17.66 7.3,16.07 8.26,15.7M11.4,8.76C11.39,8.71 11.03,6.57 11.4,6.61C11.94,6.67 11.4,8.71 11.4,8.76Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M14,17H12V15H10V13H12V15H14M14,9H12V11H14V13H12V11H10V9H12V7H10V5H12V7H14M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import React from 'react';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Chip from '@material-ui/core/Chip';\nimport { makeStyles } from '@material-ui/core/styles';\nimport TextIcon from '../Icons/DocumentBox';\nimport WordIcon from '../Icons/WordBox';\nimport ExcelIcon from '../Icons/ExcelBox';\nimport PdfIcon from '../Icons/PdfBox';\nimport ImageIcon from '@material-ui/icons/Image';\nimport ZipIcon from '../Icons/ZipBox';\nimport get from 'lodash/get';\nimport { getAccessToken } from '../../authPrivider/getAccessToken';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n maxWidth: theme.spacing(32),\n margin: '.125rem',\n background: 'rgba(0, 0, 0, 0.04)',\n },\n label: {\n display: 'block',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n}));\n\nconst getIcon = (ext) => {\n switch (ext) {\n case 'doc':\n case 'docm':\n case 'docx':\n return <WordIcon style={{ color: '#366DBC' }} />;\n break;\n\n case 'pdf':\n return <PdfIcon style={{ color: '#E21E00' }} />;\n break;\n\n case 'text':\n case 'txt':\n return <TextIcon style={{ color: '#576D7E' }} />;\n break;\n\n case 'xls':\n case 'xlsb':\n case 'xlsm':\n case 'xlsx':\n return <ExcelIcon style={{ color: '#1D7E44' }} />;\n break;\n\n case '7z':\n case 'rar':\n case 'zip':\n case 'zipx':\n return <ZipIcon style={{ color: '#FDCC77' }} />;\n break;\n\n case 'jpg':\n case 'svg':\n case 'png':\n return <ImageIcon style={{ color: '#EB5757' }} />;\n break;\n\n default:\n return <TextIcon />;\n break;\n }\n};\n\nconst FileChip = ({ className, classes: classesOverride, record, source, title, canOpen, onDelete, ...props }) => {\n const classes = useStyles({ classes: classesOverride });\n if (!record) return null;\n const label = get(record, title) || title;\n const url = get(record, source) || source;\n const ext = record.ext || (record.rawFile && record.rawFile.name.split('.').pop());\n\n const handleClick = async (event) => {\n event.stopPropagation();\n const TOKEN = await getAccessToken();\n window.open(url.indexOf('blob:') < 0 ? `${url}?${TOKEN}` : url);\n };\n\n const openProps = canOpen ? { clickable: true, onClick: handleClick } : {};\n\n return (\n <Tooltip title={label} placement=\"top\" enterDelay={800}>\n <Chip\n classes={{ root: classes.root, label: classes.label }}\n className={className}\n icon={getIcon(ext)}\n label={label}\n onDelete={onDelete}\n {...openProps}\n />\n </Tooltip>\n );\n};\n\nFileChip.defaultProps = {\n canOpen: false,\n addLabel: true,\n};\n\nexport default FileChip;\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate, TextInput, required } from 'react-admin';\nimport { useForm } from 'react-final-form';\nimport { useSelector, shallowEqual } from 'react-redux';\n\nconst useStyles = makeStyles((theme) => {\n return {};\n});\n\nconst TaskCommentInput = (props) => {\n const classes = useStyles();\n const form = useForm();\n const user = useSelector((state) => state.user, shallowEqual);\n const translate = useTranslate();\n\n useEffect(() => {\n form.change('comment', null);\n form.change('comments', null);\n }, []);\n // const required = (form.getState().values.status !== props.record.status);\n\n // const validateComment = (value) => {\n // if (!props.record.status) return null\n // const status = form.getState().values.status;\n // const required = (status !== props.record.status) && (status !== 'COMPLETED') && !value;\n //\n // return required ? 'ra.validation.comment_required' : null\n // }\n\n const handleChange = ({ currentTarget: { value } }) => {\n form.change('comments', {\n create: [\n {\n body: value,\n author: {\n connect: {\n id: user.id,\n },\n },\n },\n ],\n });\n };\n\n return (\n <div>\n <TextInput\n {...props}\n onChange={handleChange}\n label={translate('resources.Task.fields.comment')}\n validate={[required()]}\n />\n </div>\n );\n};\n\nTaskCommentInput.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n record: PropTypes.object,\n source: PropTypes.string.isRequired,\n};\n\nTaskCommentInput.defaultProps = {};\n\nexport default TaskCommentInput;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { NumberInput, minValue, maxValue, required } from 'react-admin';\nimport { useForm, useFormState } from 'react-final-form';\n\nconst useStyles = makeStyles((theme) => {\n return {};\n});\n\nconst validate = [minValue(0, 'ra.validation.min-zero'), maxValue(999999, 'ra.validation.max_number') /*required()*/];\n\nconst TaskNumberInput = (props) => {\n const classes = useStyles();\n const form = useForm();\n const formState = useFormState();\n if (form.getState().values.type === 'SCHEDULEDMAINTENANCE') return null;\n\n return <NumberInput {...props} validate={validate} />;\n};\n\nTaskNumberInput.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n record: PropTypes.object,\n source: PropTypes.string.isRequired,\n};\n\nTaskNumberInput.defaultProps = {};\n\nexport default TaskNumberInput;\n","import { useEffect, useState } from 'react';\nimport gql from 'graphql-tag';\nimport client from './apolloClient';\n\nconst GET_ENUMS = gql`\n query getEnums($name: String!) {\n __type(name: $name) {\n name\n enumValues {\n name\n description\n }\n }\n }\n`;\n\nconst useEnum = (enumName) => {\n const [enums, updateEnums] = useState([]);\n\n useEffect(() => {\n async function fetchData() {\n try {\n const enumData = await client.query({\n query: GET_ENUMS,\n variables: { name: enumName },\n onError: (error) => {\n alert(error);\n },\n });\n\n updateEnums(enumData.data.__type.enumValues);\n } catch (error) {\n console.log('error: ', error);\n }\n }\n fetchData();\n }, [enumName]);\n\n return enums;\n};\n\nexport default useEnum;\n","import React, { useMemo, useState } from 'react';\nimport {\n ArrayInput,\n AutocompleteArrayInput,\n BooleanInput,\n ChipField,\n FormTab,\n NumberInput,\n ReferenceArrayInput,\n required,\n SimpleFormIterator,\n SingleFieldList,\n TextInput,\n} from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\nconst validate = [required()];\n\nconst Wrap = ({ children, record, setRec, ...props }) => {\n console.log(record);\n console.log(props);\n useDeepCompareEffect(() => {}, [record]);\n\n return <AutocompleteArrayInput {...props} optionText=\"name\" />;\n};\nconst Input = ({ record, ...props }) => {\n const formState = useFormState();\n record.verificationTests = record.verificationTests\n ? record.verificationTests.map((test) => ({ ...test, id: test.idC }))\n : [];\n record.verificationTestsIds = record.verificationTestsIds ? record.verificationTests.map((test) => test.idC) : [];\n\n const filter = useMemo(\n () => ({\n counterparties: [{ id: formState.values.distributor }],\n constructionObjectsType: formState.values.maintainableItemType,\n }),\n [formState.values.distributor],\n );\n\n return (\n <ReferenceArrayInput\n {...props}\n record={record}\n source=\"verificationTestsIds\"\n filter={filter}\n label=\"resources.Task.fields.verificationTests\"\n reference=\"Test\"\n >\n <AutocompleteArrayInput optionText=\"name\" />\n </ReferenceArrayInput>\n );\n};\n\nexport const VerificationTab = (props) => {\n const formState = useFormState();\n\n return (\n formState.values.type === 'SCHEDULEDMAINTENANCE' && (\n <FormTab {...props} label=\"Проверка\">\n <Input />\n </FormTab>\n )\n );\n};\n","import React, { useCallback } from 'react';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport { ability } from '../../abilityProvider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n useCreateController,\n CreateContextProvider,\n CreateView,\n ArrayInput,\n SimpleFormIterator,\n SaveButton,\n DateTimeInput,\n FormTab,\n TabbedForm,\n Toolbar,\n TextInput,\n ReferenceInput,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n required,\n FormDataConsumer,\n NumberInput,\n BooleanInput,\n SimpleForm,\n} from 'react-admin';\nimport AutocompleteInput from '../Inputs/AutoompleteInput';\nimport MaintainableItemInput from './MaintainableItemInput';\nimport EnumInput from '../Inputs/EnumInput';\nimport FileInputCustom from '../Inputs/FileInput';\nimport FileChip from '../Fields/FileChip';\nimport UserSuggestion from '../User/UserSuggestion';\nimport TaskCommentInput from './TaskCommentInput';\nimport TaskNumberInput from './TaskNumberInput';\nimport useEnum from '../../dataProvider/Objects/useEnum';\nimport EnumArrayInput from '../Inputs/EnumArrayInput';\nimport { VerificationTab } from './VerificationTab';\nimport { TaskUserInput } from './TaskUserInput';\n\nconst useStyles = makeStyles((theme) => ({\n toolbar: {\n display: 'flex',\n '& > *:not(:last-child)': {\n marginRight: theme.spacing(1),\n },\n },\n mlAuto: {\n marginLeft: 'auto',\n },\n referenceArrayInput: {\n marginTop: 8,\n marginBottom: 4,\n },\n}));\n\nconst TaskToolbar = ({ permissions, ...props }) => {\n const classes = useStyles();\n\n return (\n <Toolbar {...props} classes={{ toolbar: classes.toolbar }}>\n {/*{ability.can(\"process\", \"Task\") && <SaveWithProcessButton />}*/}\n {ability.can('update', 'Task') && <SaveButton />}\n {ability.can('update', 'Task') && (\n <SaveButton redirect={'show'} label=\"ra.action.save_and_continue\" submitOnEnter={false} variant=\"outlined\" />\n )}\n </Toolbar>\n );\n};\n\nconst validateDeadline = [required()];\n\n// const validateTaskCreate = (values) => {\n// const errors = {};\n//\n// if (values.status === \"PROCESSED\") {\n// if (!values.responsibledBy || !values.responsibledBy.id) errors.responsibledBy = { id: ['ra.validation.responsibledBy_required'] };\n// }\n//\n// return errors\n// };\n\nconst TaskCreate = ({ ...props }) => {\n const classes = useStyles();\n const controllerProps = useCreateController(props);\n const user = useSelector((state) => state.user, shallowEqual);\n const regions = (user && user.regions) || [];\n const taskTypes = user ? user.taskTypes : [];\n\n const TaskTypeAccessFilter = (type) => {\n return taskTypes.some((t) => t === type.name);\n };\n\n const MaintainableItemTypeAccessFilter = (type) => {\n return taskTypes.some((t) => t === type.name);\n };\n\n const taskDefaultValue = user\n ? { type: user.taskTypes.includes('UNSCHEDULEDMAINTENANCE') ? 'UNSCHEDULEDMAINTENANCE' : null }\n : null;\n if (user && user.role === 'DISTRIBUTOR') taskDefaultValue.distributedBy = { id: user.id };\n\n return (\n <CreateContextProvider value={{ ...controllerProps }}>\n <CreateView {...props} {...controllerProps}>\n <SimpleForm toolbar={<TaskToolbar />} redirect=\"show\" initialValues={taskDefaultValue}>\n {ability.can('create', 'Task', 'type') && (\n <EnumInput source=\"type\" Enum=\"TaskType\" filter={TaskTypeAccessFilter} validate={required()} />\n )}\n {ability.can('create', 'Task', 'gmiId') && <TextInput source=\"gmiId\" />}\n {ability.can('create', 'Task', 'maintainableItem') && <MaintainableItemInput source=\"maintainableItem\" />}\n {ability.can('create', 'Task', 'addrManual') && <TextInput source=\"addrManual\" fullWidth disabled />}\n {ability.can('create', 'Task', 'description') && (\n <TextInput source=\"description\" multiline fullWidth validate={[required()]} />\n )}\n {/*{ability.can('create', 'Task', 'processedBy') && (*/}\n {/* <TaskUserInput*/}\n {/* source=\"processedBy.id\"*/}\n {/* reference=\"User\"*/}\n {/* label=\"resources.Task.fields.processedBy\"*/}\n {/* role={'DISPATCHER'}*/}\n {/* allowEmpty*/}\n {/* emptyText=\"ra.message.no\"*/}\n {/* validate={[required()]}*/}\n {/* />*/}\n {/*)}*/}\n {/*{ability.can('create', 'Task', 'responsibledBy') && (*/}\n {/* <TaskUserInput*/}\n {/* source=\"responsibledBy.id\"*/}\n {/* reference=\"User\"*/}\n {/* label=\"resources.Task.fields.responsibledBy\"*/}\n {/* role={'MANAGER'}*/}\n {/* allowEmpty*/}\n {/* emptyText=\"ra.message.no\"*/}\n {/* regionNull={true}*/}\n {/* />*/}\n {/*)}*/}\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <>\n {ability.can('create', 'Task', 'processedBy') && (\n <ReferenceInput\n source=\"processedBy.id\"\n reference=\"User\"\n label=\"resources.Task.fields.processedBy\"\n filter={{ region_some: formData.region, role: 'DISPATCHER' }}\n allowEmpty\n emptyText=\"ra.message.no\"\n validate={[required()]}\n {...rest}\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n </>\n )}\n </FormDataConsumer>\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <>\n {ability.can('create', 'Task', 'responsibledBy') && (\n <ReferenceInput\n source=\"responsibledBy.id\"\n reference=\"User\"\n label=\"resources.Task.fields.responsibledBy\"\n filter={{ region_some: formData.region || null, role: 'MANAGER' }}\n allowEmpty\n emptyText=\"ra.message.no\"\n {...rest}\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n </>\n )}\n </FormDataConsumer>\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <>\n {ability.can('create', 'Task', 'distributedBy') && (\n <ReferenceInput\n source=\"distributedBy.id\"\n reference=\"User\"\n label=\"resources.Task.fields.distributedBy\"\n filter={{\n region_some: formData.region || null,\n role: 'DISTRIBUTOR',\n distributor: formData.distributor,\n }}\n allowEmpty\n emptyText=\"ra.message.no\"\n {...rest}\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n </>\n )}\n </FormDataConsumer>\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <>\n {ability.can('create', 'Task', 'leadedBy') && (\n <ReferenceInput\n source=\"leadedBy.id\"\n reference=\"User\"\n label=\"resources.Task.fields.leadedBy\"\n filter={{\n region_some: formData.region || null,\n role_in: ['MACROLEADER'],\n }}\n allowEmpty\n emptyText=\"ra.message.no\"\n {...rest}\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n </>\n )}\n </FormDataConsumer>\n {/*<TaskCommentInput source=\"comment\" multiline fullWidth />*/}\n {/*<DateTimeInput source=\"planAt\" />*/}\n {ability.can('create', 'Task', 'deadlineAt') && <DateTimeInput source=\"deadlineAt\" />}\n {ability.can('create', 'Task', 'relatedTasks') && (\n <ReferenceArrayInput\n source=\"relatedTasksIds\"\n reference=\"Task\"\n label=\"resources.Task.fields.relatedTasks\"\n filter={{ region_in: regions }}\n classes={{ container: classes.referenceArrayInput }}\n fullWidth\n >\n <AutocompleteArrayInput />\n </ReferenceArrayInput>\n )}\n {ability.can('create', 'Task', 'acts') && (\n <FileInputCustom source=\"acts\" placeholder={<p>Перетащите акты сюда или нажмите для выбора</p>} multiple>\n <FileChip source=\"url\" title=\"name\" canOpen />\n </FileInputCustom>\n )}\n {ability.can('create', 'Task', 'files') && (\n <FileInputCustom source=\"files\" multiple>\n <FileChip source=\"url\" title=\"name\" canOpen />\n </FileInputCustom>\n )}\n <FormDataConsumer>\n {({ formData }) =>\n formData.type === 'SCHEDULEDMAINTENANCE' &&\n ability.can('create', 'Task', 'verificationRequiredOnly') && (\n <BooleanInput\n source=\"verificationRequiredOnly\"\n label={'resources.Task.fields.verificationRequiredOnly'}\n />\n )\n }\n </FormDataConsumer>\n </SimpleForm>\n </CreateView>\n </CreateContextProvider>\n );\n};\n\nexport default TaskCreate;\n","import { useTranslate } from 'react-admin';\nimport { get } from 'lodash';\n\nconst TitleForRecord = ({ resource, source, record, ...props }) => {\n const translate = useTranslate();\n\n if (!record) return null;\n const resourceText = translate(`resources.${resource}.name`, { smart_count: 1 });\n const sourceText = get(record, source);\n\n return `${resourceText}${sourceText ? ` ${sourceText}` : ` #${record.id}`}`;\n};\n\nexport default TitleForRecord;\n","import React, { useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useNotify, useRedirect, useRefresh, fetchStart, fetchEnd, Button } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\nimport RemoveIcon from '@material-ui/icons/Delete';\nimport removeToTrash from '../../dataProvider/Core/removeToTrash';\n\nexport const sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n undoable,\n redirect,\n submitOnEnter,\n ...rest\n}) => rest;\n\nconst useStyles = makeStyles((theme) => ({\n removeButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: fade(theme.palette.error.main, 0.12),\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n}));\n\nconst RemoveButton = ({\n basePath,\n classes: classesOverride,\n className,\n record,\n resource,\n redirect: redirectTo,\n ...rest\n}) => {\n const dispatch = useDispatch();\n const redirect = useRedirect();\n const refresh = useRefresh();\n const notify = useNotify();\n const classes = useStyles({ classes: classesOverride });\n const [loading, setLoading] = useState(false);\n\n const handleClick = () => {\n setLoading(true);\n dispatch(fetchStart());\n\n removeToTrash({\n resource,\n where: { id: record.id },\n })\n .then(() => {\n notify('ra.notification.moved_to_trash', 'info', { smart_count: 1 });\n redirect(redirectTo, basePath, record.id);\n refresh();\n })\n .catch((error) => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning');\n })\n .finally(() => {\n setLoading(false);\n dispatch(fetchEnd()); // stop the global loading indicator\n });\n };\n\n return (\n <Button\n onClick={handleClick}\n disabled={loading}\n label=\"ra.action.remove\"\n className={`ra-remove-button ${classes.removeButton} ${className}`}\n key=\"button\"\n {...sanitizeRestProps(rest)}\n >\n <RemoveIcon />\n </Button>\n );\n};\n\nexport default RemoveButton;\n","import gql from 'graphql-tag';\nimport apolloCoreClient from './apolloCoreClient';\n\nexport default ({ resource, where }) => {\n return apolloCoreClient.mutate({\n mutation: gql`mutation restore${resource}($where: ${resource}WhereUniqueInput!) {\n data: restore${resource}(where: $where) {\n id\n }\n }`,\n variables: { where },\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useDispatch } from 'react-redux';\n\nimport RestoreIcon from '@material-ui/icons/RestoreFromTrash';\nimport { useRefresh, useNotify, useRedirect, fetchStart, fetchEnd, Button } from 'react-admin';\nimport restoreFromTrash from '../../dataProvider/Core/restoreFromTrash';\n\nexport const sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n undoable,\n redirect,\n submitOnEnter,\n ...rest\n}) => rest;\n\nconst useStyles = makeStyles((theme) => ({\n restoreButton: {},\n}));\n\nconst RestoreButton = ({\n classes: classesOverride,\n className,\n onClick,\n resource,\n record,\n basePath,\n redirect: redirectTo,\n ...rest\n}) => {\n const classes = useStyles({ classes: classesOverride });\n const dispatch = useDispatch();\n const redirect = useRedirect();\n const refresh = useRefresh();\n const notify = useNotify();\n const [loading, setLoading] = useState(false);\n\n const handleRestore = () => {\n setLoading(true);\n dispatch(fetchStart()); // start the global loading indicator\n\n restoreFromTrash({\n resource,\n where: { id: record.id },\n })\n .then(() => {\n notify('ra.notification.restored_from_trash', 'info', { smart_count: 1 });\n redirect(redirectTo, basePath);\n refresh();\n })\n .catch((error) => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning');\n })\n .finally(() => {\n setLoading(false);\n dispatch(fetchEnd()); // stop the global loading indicator\n });\n };\n\n return (\n <Button\n onClick={handleRestore}\n disabled={loading}\n variant=\"contained\"\n size=\"medium\"\n label=\"ra.action.restore\"\n className={`ra-restore-button ${classes.restoreButton} ${className}`}\n key=\"button\"\n {...sanitizeRestProps(rest)}\n >\n <RestoreIcon />\n </Button>\n );\n};\n\nRestoreButton.propTypes = {\n basePath: PropTypes.string,\n classes: PropTypes.object,\n className: PropTypes.string,\n record: PropTypes.object,\n redirect: PropTypes.oneOfType([PropTypes.string, PropTypes.bool, PropTypes.func]),\n resource: PropTypes.string,\n};\n\nRestoreButton.defaultProps = {\n redirect: false,\n};\n\nexport default RestoreButton;\n","import React from 'react';\n\nimport CardContent from '@material-ui/core/CardContent';\nimport Box from '@material-ui/core/Box';\nimport Chip from '@material-ui/core/Chip';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport { SimpleShowLayout, DateField, TextField } from 'react-admin';\nimport BlankLayout from '../Layout/BlankLayout';\nimport EnumChip from '../Fields/EnumChip';\nimport StatusChip from './TaskStatusField';\nimport { DeadlineChip } from '../Fields/DeadlineField';\n\nconst useStyles = makeStyles((theme) => ({\n title: {\n marginRight: theme.spacing(),\n fontWeight: 500,\n flexGrow: 1,\n },\n inlineLayout: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n inlineField: {\n marginRight: theme.spacing(3),\n '&:last-child': {\n marginRight: 0,\n },\n },\n}));\n\nconst dateTimeOptions = {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n};\n\nconst TaskShowMainBlock = (props) => {\n return (\n <BlankLayout {...props}>\n <TaskShowMainBlockView />\n </BlankLayout>\n );\n};\n\nconst TaskShowMainBlockView = ({ saving, save, ...props }) => {\n const classes = useStyles();\n const { record } = props;\n if (!record) return null;\n const number = record.number;\n const description = record.description;\n const alias = record.alias;\n let label = record.number && record.number.toString();\n if (label) {\n label = '000000'.substring(0, 6 - label.length) + label;\n }\n\n return (\n <>\n <CardContent>\n <Box display=\"flex\" marginBottom={2}>\n <Typography variant=\"h5\" component=\"h2\" className={classes.title}>\n {label || alias}\n </Typography>\n {number && <Chip label={alias} />}\n </Box>\n\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"p\">\n {description}\n </Typography>\n </CardContent>\n <SimpleShowLayout className={classes.inlineLayout} {...props}>\n <TextField source=\"gmiId\" />\n <DateField source=\"createdAt\" options={dateTimeOptions} className={classes.inlineField} />\n <DateField source=\"updatedAt\" options={dateTimeOptions} className={classes.inlineField} />\n <DateField source=\"planAt\" options={dateTimeOptions} className={classes.inlineField} />\n <DateField source=\"deadlineAt\" options={dateTimeOptions} className={classes.inlineField} />\n <DateField source=\"completedAt\" options={dateTimeOptions} className={classes.inlineField} />\n </SimpleShowLayout>\n <CardContent>\n <StatusChip {...props} source=\"status\" />\n <EnumChip {...props} source=\"type\" />\n <DeadlineChip {...props} />\n </CardContent>\n </>\n );\n};\n\nexport default TaskShowMainBlock;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { required, TextInput, BooleanInput } from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport { ability } from '../../abilityProvider';\nimport EnumInput from '../Inputs/EnumInput';\n\nconst useStyles = makeStyles((theme) => {\n return {\n container: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n alignItems: 'flex-start',\n },\n textInput: {\n width: '100% !important',\n },\n };\n});\n\nconst TaskCompleteInput = (props) => {\n const classes = useStyles();\n const form = useFormState();\n\n if (form.values.status !== 'COMPLETED') return null;\n\n return (\n <div className={classes.container}>\n {ability.can('update', 'Task', 'result') && (\n <EnumInput {...props} source=\"result\" Enum=\"TaskResult\" validate={[required()]} />\n )}\n {ability.can('update', 'Task', 'sptaInstalled') && <BooleanInput {...props} source=\"sptaInstalled\" />}\n </div>\n );\n};\n\nTaskCompleteInput.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n record: PropTypes.object,\n source: PropTypes.string,\n};\n\nTaskCompleteInput.defaultProps = {\n addLabel: false,\n};\n\nexport default TaskCompleteInput;\n","import React from 'react';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport { ability } from '../../abilityProvider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport DeleteForeverIcon from '@material-ui/icons/DeleteForever';\nimport {\n useEditController,\n SimpleForm,\n TextInput,\n DateTimeInput,\n Toolbar,\n SaveButton,\n DeleteButton,\n ReferenceInput,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n required,\n FormDataConsumer,\n TabbedForm,\n FormTab,\n} from 'react-admin';\nimport EditView from '../Layout/Edit';\nimport BlankLayout from '../Layout/BlankLayout';\nimport TitleForRecord from '../Layout/TitleForRecord';\n\nimport RemoveButton from '../Buttons/RemoveButton';\nimport RestoreButton from '../Buttons/RestoreButton';\nimport AutocompleteInput from '../Inputs/AutoompleteInput';\nimport UserSuggestion from '../User/UserSuggestion';\nimport MaintainableItemInput from './MaintainableItemInput';\nimport EnumInput from '../Inputs/EnumInput';\nimport FileInputCustom from '../Inputs/FileInput';\nimport FileChip from '../Fields/FileChip';\nimport MainBlock from './TaskShowMainBlock';\nimport TaskCommentInput from './TaskCommentInput';\n\nimport MaintainableItemField from './MaintainableItemField';\n\nimport TaskNumberInput from './TaskNumberInput';\nimport TaskCompleteInput from './TaskCompleteInput';\nimport { VerificationTab } from './VerificationTab';\n\nconst validateType = [required()];\nconst validateDeadline = [required()];\n\nconst useStyles = makeStyles((theme) => ({\n toolbar: {\n display: 'flex',\n '& > *:not(:last-child)': {\n marginRight: theme.spacing(1),\n },\n },\n enumField: {\n marginLeft: 6,\n },\n label: {\n fontSize: 19,\n marginLeft: 6,\n },\n mlAuto: {\n marginLeft: 'auto',\n },\n referenceArrayInput: {\n marginTop: 8,\n marginBottom: 4,\n },\n}));\n\nconst TaskToolbar = (props) => {\n const classes = useStyles();\n const { record } = props;\n const isDeleted = record.deleted;\n const status = record.status;\n\n return (\n <Toolbar {...props} classes={{ toolbar: classes.toolbar }}>\n {isDeleted && ability.can('restore', 'Task') && <RestoreButton />}\n {!isDeleted && ability.can('update', 'Task') && <SaveButton />}\n {!isDeleted && ability.can('update', 'Task') && (\n <SaveButton redirect={'show'} label=\"ra.action.save_and_continue\" submitOnEnter={false} variant=\"outlined\" />\n )}\n {!isDeleted && ability.can('remove', 'Task') && <RemoveButton className={classes.mlAuto} redirect=\"show\" />}\n {isDeleted && ability.can('delete', 'Task') && (\n <DeleteButton undoable className={classes.mlAuto} icon={<DeleteForeverIcon />} />\n )}\n </Toolbar>\n );\n};\n\nconst validateTaskEdit = (values) => {\n const errors = {};\n\n // if (values.status === \"PROCESSED\") {\n // if (!values.responsibledBy || !values.responsibledBy.id) errors.responsibledBy = { id: ['ra.validation.responsibledBy_required'] };\n // }\n\n if (values.status === 'COMPLETED') {\n if (values.type === 'SCHEDULEDMAINTENANCE') {\n if (!values.files || !values.files.length) errors.files = ['ra.validation.files_required'];\n if (!values.acts || !values.acts.length) errors.acts = ['ra.validation.acts_required'];\n }\n if (!values.result) errors.result = ['ra.validation.result_required'];\n }\n\n return errors;\n};\n\nconst TaskEdit = (props) => {\n const controllerProps = useEditController(props);\n const classes = useStyles();\n const user = useSelector((state) => state.user, shallowEqual);\n const regions = (user && user.regions) || [];\n\n const taskTypes = user ? user.taskTypes : [];\n\n const TaskTypeAccessFilter = (type) => {\n return taskTypes.some((t) => t === type.name);\n };\n\n return (\n <EditView {...props} {...controllerProps} title={<TitleForRecord source=\"name\" {...props} />}>\n <MainBlock />\n <BlankLayout>\n <TabbedForm toolbar={<TaskToolbar />} validate={validateTaskEdit}>\n <FormTab label=\"Основное\">\n {ability.can('update', 'Task', 'type') && (\n <EnumInput source=\"type\" Enum=\"TaskType\" filter={TaskTypeAccessFilter} />\n )}\n {/*<TaskNumberInput source=\"number\" />*/}\n <TextInput source=\"gmiId\" />\n {ability.can('update', 'Task', 'maintainableItem') ? (\n <MaintainableItemInput source=\"maintainableItem\" />\n ) : (\n <MaintainableItemField source=\"maintainableItem\" />\n )}\n {ability.can('update', 'Task', 'addrManual') && <TextInput source=\"addrManual\" fullWidth disabled />}\n {ability.can('update', 'Task', 'description') && (\n <TextInput source=\"description\" multiline fullWidth validate={[required()]} />\n )}\n\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <>\n {ability.can('update', 'Task', 'processedBy') && (\n <ReferenceInput\n source=\"processedBy.id\"\n reference=\"User\"\n label=\"resources.Task.fields.processedBy\"\n filter={{ region_some: formData.region, role: 'DISPATCHER' }}\n validate={[required()]}\n allowEmpty\n emptyText=\"ra.message.no\"\n {...rest}\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n {ability.can('update', 'Task', 'responsibledBy') && (\n <ReferenceInput\n source=\"responsibledBy.id\"\n reference=\"User\"\n label=\"resources.Task.fields.responsibledBy\"\n filter={{ region_some: formData.region, role: 'MANAGER' }}\n allowEmpty\n emptyText=\"ra.message.no\"\n {...rest}\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n {ability.can('update', 'Task', 'executedBy') && (\n <ReferenceInput\n source=\"executedBy.id\"\n reference=\"User\"\n label=\"resources.Task.fields.executedBy\"\n filter={{ region_some: formData.region, role_in: ['MANAGER', 'EMPLOYEE'] }}\n allowEmpty\n emptyText=\"ra.message.no\"\n {...rest}\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n {ability.can('update', 'Task', 'distributedBy') && (\n <ReferenceInput\n source=\"distributedBy.id\"\n reference=\"User\"\n label=\"resources.Task.fields.distributedBy\"\n filter={{ region_some: formData.region, role: 'DISTRIBUTOR', distributor: formData.distributor }}\n allowEmpty\n emptyText=\"ra.message.no\"\n {...rest}\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n {ability.can('update', 'Task', 'leadedBy') && (\n <ReferenceInput\n source=\"leadedBy.id\"\n reference=\"User\"\n label=\"resources.Task.fields.leadedBy\"\n filter={{ region_some: formData.region || null, role_in: ['MACROLEADER'] }}\n allowEmpty\n emptyText=\"ra.message.no\"\n {...rest}\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n </>\n )}\n </FormDataConsumer>\n <EnumInput source=\"status\" Enum=\"TaskStatus\" />\n {ability.can('update', 'Task', 'planAt') && <DateTimeInput source=\"planAt\" />}\n {ability.can('update', 'Task', 'deadlineAt') && <DateTimeInput source=\"deadlineAt\" />}\n <TaskCommentInput source=\"comment\" multiline fullWidth />\n {ability.can('update', 'Task', 'relatedTasksIds') && (\n <ReferenceArrayInput\n source=\"relatedTasksIds\"\n reference=\"Task\"\n label=\"resources.Task.fields.relatedTasks\"\n filter={{ region_in: regions }}\n classes={{ container: classes.referenceArrayInput }}\n fullWidth\n >\n <AutocompleteArrayInput optionText=\"alias\" />\n </ReferenceArrayInput>\n )}\n {ability.can('update', 'Task', 'files') && (\n <FileInputCustom source=\"acts\" placeholder={<p>Перетащите акты сюда или нажмите для выбора</p>} multiple>\n <FileChip source=\"url\" title=\"name\" canOpen />\n </FileInputCustom>\n )}\n {ability.can('update', 'Task', 'files') && (\n <FileInputCustom source=\"files\" multiple>\n <FileChip source=\"url\" title=\"name\" canOpen />\n </FileInputCustom>\n )}\n <TaskCompleteInput />\n {/*{ (status === \"WORK\" ) && ability.can(\"update\", \"Task\", \"result\") && <EnumInput source=\"result\" Enum=\"TaskResult\" />}*/}\n {/*{ (status === \"WORK\" ) && ability.can(\"update\", \"Task\", \"sptaInstalled\") && <BooleanInput source=\"sptaInstalled\" />}*/}\n </FormTab>\n {ability.can('update', 'Task', 'verification') && <VerificationTab />}\n </TabbedForm>\n </BlankLayout>\n </EditView>\n );\n};\n\nexport default TaskEdit;\n","import React from 'react';\nimport { cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { useShowController, ShowActions as DefaultActions, TitleForRecord, ShowContextProvider } from 'react-admin';\nimport Remove from './Remove';\n\nconst Show = (props) => (\n <ShowContextProvider value={{ ...props }}>\n <ShowView {...props} {...useShowController(props)} />\n </ShowContextProvider>\n);\n\nShow.propTypes = {\n actions: PropTypes.element,\n aside: PropTypes.element,\n // children: PropTypes.element,\n classes: PropTypes.object,\n className: PropTypes.string,\n hasCreate: PropTypes.bool,\n hasEdit: PropTypes.bool,\n hasList: PropTypes.bool,\n hasShow: PropTypes.bool,\n id: PropTypes.any.isRequired,\n resource: PropTypes.string.isRequired,\n title: PropTypes.node,\n};\n\nexport const ShowView = (props) => {\n const {\n actions,\n aside,\n basePath,\n children,\n classes: classesOverride,\n className,\n component: Content,\n defaultTitle,\n hasEdit,\n hasList,\n record,\n resource,\n title,\n version,\n ...rest\n } = props;\n const classes = useStyles(props);\n\n if (record && record.deleted) {\n return (\n <Remove\n resource={resource}\n basePath={basePath}\n record={record}\n title={title}\n defaultTitle={defaultTitle}\n hasList={hasList}\n hasEdit={hasEdit}\n />\n );\n }\n\n const finalActions = typeof actions === 'undefined' && hasEdit ? <DefaultActions /> : actions;\n\n if (!children) {\n return null;\n }\n\n return (\n <div className={classnames('show-page', classes.root, className)} {...sanitizeRestProps(rest)}>\n <TitleForRecord title={title} record={record} defaultTitle={defaultTitle} />\n {finalActions &&\n cloneElement(finalActions, {\n basePath,\n data: record,\n hasList,\n hasEdit,\n resource,\n // Ensure we don't override any user provided props\n ...finalActions.props,\n })}\n <div\n className={classnames(classes.main, {\n [classes.noActions]: !finalActions,\n })}\n >\n <Content className={classes.card}>\n {record &&\n React.Children.map(children, (field, index) =>\n React.isValidElement(field)\n ? React.cloneElement(field, {\n key: index,\n resource,\n basePath,\n record,\n version,\n })\n : null,\n )}\n </Content>\n {aside &&\n cloneElement(aside, {\n resource,\n basePath,\n record,\n version,\n })}\n </div>\n </div>\n );\n};\n\nShowView.propTypes = {\n actions: PropTypes.element,\n aside: PropTypes.element,\n basePath: PropTypes.string,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n defaultTitle: PropTypes.any,\n hasEdit: PropTypes.bool,\n hasList: PropTypes.bool,\n loading: PropTypes.bool,\n loaded: PropTypes.bool,\n record: PropTypes.object,\n resource: PropTypes.string,\n title: PropTypes.any,\n version: PropTypes.node,\n};\n\nShowView.defaultProps = {\n classes: {},\n component: 'div',\n};\n\nconst useStyles = makeStyles(\n {\n root: {},\n main: {\n display: 'flex',\n },\n noActions: {\n marginTop: '1em',\n },\n card: {\n flex: '1 1 auto',\n },\n },\n { name: 'RaShow' },\n);\n\nconst sanitizeRestProps = ({\n hasCreate = null,\n hasEdit = null,\n hasShow = null,\n history = null,\n id = null,\n loaded = null,\n loading = null,\n location = null,\n match = null,\n options = null,\n permissions = null,\n ...rest\n}) => rest;\n\nexport default Show;\n","import React from 'react';\nimport { ability } from '../../abilityProvider';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardActions from '@material-ui/core/CardActions';\nimport DeleteForeverIcon from '@material-ui/icons/DeleteForever';\nimport { makeStyles } from '@material-ui/core/styles';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport Typography from '@material-ui/core/Typography';\nimport { DeleteButton } from 'react-admin';\nimport RestoreButton from '../Buttons/RestoreButton';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(),\n '&:first-child': {\n marginTop: 0,\n },\n textAlign: 'center',\n },\n}));\n\nconst BannerDeleted = ({ classes: classesOverride, className, ...props }) => {\n const classes = useStyles({ classes: classesOverride });\n return (\n <Card className={`${classes.root} ${className}`}>\n <CardContent>\n <Typography component=\"span\">\n <DeleteIcon color=\"action\" fontSize=\"large\" />\n </Typography>\n <Typography variant=\"body2\" color=\"textPrimary\" gutterBottom>\n Элемент перемещен в корзину\n </Typography>\n </CardContent>\n <CardActions style={{ justifyContent: 'center' }}>\n {ability.can('restore', props.resource) && <RestoreButton {...props} variant=\"text\" size=\"small\" />}\n {ability.can('delete', props.resource) && (\n <DeleteButton\n {...props}\n undoable={false}\n className={classes.mlAuto}\n icon={<DeleteForeverIcon />}\n variant=\"text\"\n />\n )}\n </CardActions>\n </Card>\n );\n};\n\nexport default BannerDeleted;\n","import React from 'react';\nimport Chip from '@material-ui/core/Chip';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { emphasize } from '@material-ui/core/styles/colorManipulator';\nimport { red, green } from '@material-ui/core/colors';\nimport get from 'lodash/get';\nimport { useTranslate } from 'react-admin';\nimport sanitizeRestProps from '../Fields/sanitizeRestProps';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n chip: ({ result }) => {\n let backgroundColor = theme.palette.type === 'light' ? theme.palette.grey[300] : theme.palette.grey[700];\n switch (result) {\n case 'FAIL':\n backgroundColor = red[400];\n break;\n case 'SUCCESS':\n backgroundColor = green[400];\n break;\n default:\n break;\n }\n\n return {\n color: theme.palette.getContrastText(backgroundColor),\n backgroundColor: backgroundColor,\n '&:hover, &:focus': {\n backgroundColor: emphasize(backgroundColor, 0.08),\n },\n };\n },\n label: {\n display: 'block',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n}));\n\nconst TaskResultChip = ({ className, classes: classesOverride, record, source, resource, ...props }) => {\n const result = get(record, source);\n const classes = useStyles({ result, classes: classesOverride });\n const translate = useTranslate();\n if (!record) return null;\n\n const label = translate(`resources.${resource}.enums.${source}.${result}`, { _: result });\n\n return (\n <Chip\n classes={{ root: classes.chip, label: classes.label }}\n className={`${className}`}\n label={label}\n {...sanitizeRestProps(props)}\n />\n );\n};\n\nTaskResultChip.defaultProps = {\n addLabel: true,\n};\n\nexport default TaskResultChip;\n","import React from 'react';\nimport Chip from '@material-ui/core/Chip';\nimport { makeStyles } from '@material-ui/core/styles';\nimport get from 'lodash/get';\nimport { useTranslate } from 'react-admin';\nimport sanitizeRestProps from '../Fields/sanitizeRestProps';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n label: {\n display: 'block',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n}));\n\nconst TaskSptaInstalledChip = ({ className, classes: classesOverride, record, source, resource, ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n if (!record) return null;\n const sptaInstalled = get(record, source);\n\n const label = sptaInstalled\n ? translate(`resources.${resource}.fields.sptaInstalled`)\n : translate(`resources.${resource}.fields.sptaNotInstalled`);\n\n return (\n <Chip classes={{ label: classes.label }} className={`${className}`} label={label} {...sanitizeRestProps(props)} />\n );\n};\n\nTaskSptaInstalledChip.defaultProps = {\n addLabel: true,\n};\n\nexport default TaskSptaInstalledChip;\n","import React from 'react';\n\nimport CardContent from '@material-ui/core/CardContent';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport EnumField from '../Fields/EnumField';\nimport ResultChip from './TaskResultChip';\nimport SptaInstalledChip from './TaskSptaInstalledChip';\nimport BlankLayout from '../Layout/BlankLayout';\n\nconst useStyles = makeStyles((theme) => ({\n title: {\n marginRight: theme.spacing(),\n fontWeight: 500,\n flexGrow: 1,\n },\n}));\n\nconst TaskShowResultBlock = (props) => {\n return (\n <BlankLayout {...props}>\n <TaskShowResultBlockView />\n </BlankLayout>\n );\n};\n\nconst TaskShowResultBlockView = (props) => {\n const classes = useStyles();\n const { record } = props;\n if (!record) return null;\n const faultDescription = record.faultDescription;\n\n return (\n <>\n <CardContent>\n <EnumField source=\"result\" variant=\"h5\" component=\"h2\" gutterBottom className={classes.title} {...props} />\n </CardContent>\n <CardContent style={{ paddingTop: 0 }}>\n <ResultChip {...props} source=\"result\" />\n <SptaInstalledChip {...props} source=\"sptaInstalled\" />\n </CardContent>\n </>\n );\n};\n\nexport default TaskShowResultBlock;\n","import React, { useEffect } from 'react';\nimport SendIcon from '@material-ui/icons/Send';\nimport { makeStyles } from '@material-ui/core/styles';\nimport IconButton from '@material-ui/core/IconButton';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport TextField from '@material-ui/core/TextField';\nimport { useVersion } from 'react-admin';\nimport { useForm } from 'react-final-form';\n\nconst useStyles = makeStyles((theme) => ({\n input: {\n paddingTop: 20,\n height: '100%',\n },\n adornment: {\n // minHeight: 30,\n // marginTop: 8\n },\n margin: {\n margin: theme.spacing(1),\n },\n icon: {\n color: theme.palette.primary.light,\n },\n}));\n\nconst TaskCommentsInput = ({ onSubmit, input, ...props }) => {\n const classes = useStyles();\n const version = useVersion();\n const form = useForm();\n\n useEffect(() => {\n form.reset();\n }, [form, version]);\n\n const handleKeyDown = (event) => {\n if (event.keyCode === 13 && event.shiftKey === false) {\n onSubmit(event); // <--- all the form values are in a prop\n }\n };\n\n return (\n <TextField\n {...input}\n fullWidth\n multiline\n variant=\"outlined\"\n // classes={classes}\n InputProps={{\n endAdornment: (\n <InputAdornment className={classes.adornment} position=\"end\">\n <IconButton\n aria-label=\"toggle password visibility\"\n className={classes.icon}\n onClick={(event) => {\n onSubmit(event);\n setTimeout(form.reset);\n }}\n edge=\"end\"\n >\n <SendIcon />\n </IconButton>\n </InputAdornment>\n ),\n onKeyDown: handleKeyDown,\n // classes: {input: classes.input},\n placeholder: 'Напишите сообщение...',\n }}\n />\n );\n};\n\nexport default TaskCommentsInput;\n","import gql from 'graphql-tag';\nimport apolloCoreClient from './apolloCoreClient';\nimport getObject from '../Objects/customQueries/getObject';\nimport getLocation from '../Objects/Region/getRegion';\n\nconst COMMENT_TEMPLATE = `{\n id\n description\n createdAt\n createdBy { id }\n updatedAt\n deleted\n alias\n number\n maintainableItem\n region\n addrManual\n status\n type\n result\n maintainableItemType\n sptaInstalled\n processedBy { id }\n responsibledBy { id }\n executedBy { id }\n relatedTasks { id description }\n files { id }\n acts { id }\n deadlineAt\n planAt\n completedAt\n comments {\n id\n body\n author { id name }\n createdAt\n updatedAt\n edited\n deleted\n deletedAt\n }\n }`;\n\nexport const UPDATE_COMMENTS_TO_TASK = gql`\n mutation updateTask( $where: TaskWhereUniqueInput!, $description: String, $maintainableItem: ID, $region: String, $addrManual: String, $maintainableItemType: MaintainableItemType, $status: TaskStatus, $type: TaskType, $responsibledBy: UserWhereUniqueInput, $processedBy: UserWhereUniqueInput, $executedBy: UserWhereUniqueInput, $relatedTasks: [TaskWhereUniqueInput], $result: TaskResult, $sptaInstalled: Boolean, $files: FilesInput, $acts: FilesInput, $deadlineAt: DateTime, $planAt: DateTime, $number: Int, $comments: CommentUpdateManyWithoutTaskInput, $maintainableItemName: String, $regionName: String ) {\n data: updateTask( where: $where, description: $description, maintainableItem: $maintainableItem, region: $region, addrManual: $addrManual, status: $status, maintainableItemType: $maintainableItemType, type: $type, responsibledBy: $responsibledBy, processedBy: $processedBy executedBy: $executedBy, relatedTasks: $relatedTasks, result: $result, sptaInstalled: $sptaInstalled, files: $files, acts: $acts, deadlineAt: $deadlineAt, planAt: $planAt, number: $number, comments: $comments, maintainableItemName: $maintainableItemName, regionName: $regionName) ${COMMENT_TEMPLATE}\n }`;\n\nexport default async ({ ...data }) => {\n if (data.responsibledBy) {\n data.responsibledBy = data.responsibledBy ? { id: data.responsibledBy.id } : null;\n }\n if (data.processedBy) {\n data.processedBy = data.processedBy.id ? { id: data.processedBy.id } : null;\n }\n if (data.executedBy) {\n data.executedBy = data.executedBy ? { id: data.executedBy.id } : null;\n }\n if (data.maintainableItem) {\n const {\n data: {\n data: { name },\n },\n } = await getObject({ id: data.maintainableItem });\n data.maintainableItemName = name;\n }\n if (data.region) {\n const {\n data: {\n data: { unrestrictedName },\n },\n } = await getLocation({ id: data.region });\n data.regionName = unrestrictedName;\n }\n if (data.relatedTasksIds) {\n data.relatedTasks = data.relatedTasksIds.map((id) => ({ id }));\n }\n return apolloCoreClient.mutate({\n mutation: UPDATE_COMMENTS_TO_TASK,\n variables: { ...data },\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import React, { Children, isValidElement, useState } from 'react';\nimport moment from 'moment';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\nimport AvatarField from '../Fields/AvatarField';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport { Link } from 'react-admin';\n\nimport IconButton from '@material-ui/core/IconButton';\nimport Divider from '@material-ui/core/Divider';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport EditIcon from '@material-ui/icons/Edit';\nimport ClearIcon from '@material-ui/icons/Clear';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useForm } from 'react-final-form';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { Menu } from '@material-ui/core';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport { useTranslate } from 'react-admin';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Typography from '@material-ui/core/Typography';\nimport { ability } from '../../abilityProvider';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport DoneIcon from '@material-ui/icons/Done';\nimport ErrorIcon from '@material-ui/icons/Error';\n\nconst useStyles = makeStyles((theme) => {\n return {\n iconButton: {},\n icon: {\n height: 16,\n width: 16,\n },\n divider: {\n '&:last-child': {\n display: 'none',\n },\n },\n avatar: {\n background: theme.palette.secondary.main,\n color: theme.palette.secondary.contrastText,\n },\n menuRoot: {\n height: '200vh',\n bottom: '-10px',\n },\n loading: {\n height: 5,\n width: 5,\n },\n };\n});\n\nconst MoreButton = ({ label = 'ra.action.more', children, className, ...props }) => {\n const translate = useTranslate();\n const [anchorEl, setAnchorEl] = React.useState(null);\n const classes = useStyles();\n const open = Boolean(anchorEl);\n\n const handleClick = (event) => {\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = (event) => {\n event.stopPropagation();\n setAnchorEl(null);\n };\n\n return (\n <>\n <Tooltip title={translate('ra.action.more')} placement=\"left\">\n <IconButton onClick={handleClick} className={className} size=\"small\" key=\"button\" {...props}>\n <MoreVertIcon />\n </IconButton>\n </Tooltip>\n <Menu\n id=\"more-menu\"\n anchorEl={anchorEl}\n keepMounted\n disablePortal={true}\n modifiers={{\n flip: {\n enabled: true,\n },\n preventOverflow: {\n enabled: true,\n boundariesElement: 'window',\n },\n }}\n anchorOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n open={open}\n onClose={handleClose}\n >\n {Children.map(children, (field) =>\n field && isValidElement(field) ? React.cloneElement(field, { ...props }) : null,\n )}\n </Menu>\n </>\n );\n};\n\nconst stopPropagation = (e) => e.stopPropagation();\n\nconst TaskComment = ({ record, deleteComment, removeComment, selected, setSelected, last, ...props }) => {\n const form = useForm();\n const user = useSelector((state) => state.user, shallowEqual);\n const classes = useStyles();\n const [open, setOpen] = useState(false);\n\n const translate = useTranslate();\n const { loading } = record || {};\n const { edited } = record || {};\n const { error } = record || {};\n\n if (!record) return null;\n const author = record.author;\n const body = record.body;\n const deleted = record.deleted;\n const createdAt = record.createdAt && moment(record.createdAt).format('L LT');\n const deletedAt = record.deletedAt && moment(record.deletedAt).format('L LT');\n const auhorLinkPath = `/User/${encodeURIComponent(author.id)}/show`;\n const isPrivate = record.isPrivate;\n\n const handleEditComment = () => {\n setSelected(record.id);\n form.change('isPrivate', isPrivate);\n form.change('body', body);\n form.change('id', record.id);\n form.change('author', user);\n };\n\n const handleOpen = (event) => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n return (\n <>\n <ListItem\n alignItems=\"flex-start\"\n selected={selected === record.id}\n onMouseEnter={handleOpen}\n onMouseLeave={handleClose}\n >\n <ListItemAvatar>\n <AvatarField className={classes.avatar} record={author} />\n </ListItemAvatar>\n <ListItemText\n primary={\n <>\n <Link to={auhorLinkPath} onClick={stopPropagation}>\n {author.name}\n </Link>\n  \n <strong>•</strong>\n  \n {!deleted ? createdAt : deletedAt}\n {loading && (\n <>\n  <strong>•</strong> \n <CircularProgress style={{ height: 14, width: 14 }} />\n </>\n )}\n {!loading && !error && (\n <>\n  <strong>•</strong> \n <DoneIcon fontSize=\"inherit\" />\n </>\n )}\n {error && (\n <>\n  <strong>•</strong> \n <ErrorIcon color=\"error\" fontSize=\"inherit\" />\n </>\n )}\n {edited && (\n <>\n  <strong>•</strong> ред.\n </>\n )}\n </>\n }\n primaryTypographyProps={{ variant: 'body2', color: 'textSecondary' }}\n secondary={!deleted ? body : translate('ra.message.deleted')}\n secondaryTypographyProps={{ variant: 'body2', color: deleted ? 'textSecondary' : 'textPrimary' }}\n />\n {(!deleted\n ? ability.can('update', 'Comment') || ability.can('remove', 'Comment') || record.author.id === user.id\n : ability.can('delete', 'Comment')) &&\n !error && (\n <MoreButton>\n {!deleted && (ability.can('update', 'Comment') || record.author.id === user.id) && (\n <MenuItem onClick={handleEditComment}>\n <ListItemIcon>\n <EditIcon />\n </ListItemIcon>\n <Typography variant=\"inherit\">{translate('ra.action.edit')}</Typography>\n </MenuItem>\n )}\n {!deleted && (ability.can('remove', 'Comment') || record.author.id === user.id) && (\n <MenuItem onClick={() => removeComment(record.id)}>\n <ListItemIcon>\n <ClearIcon />\n </ListItemIcon>\n <Typography variant=\"inherit\">{translate('ra.action.remove')}</Typography>\n </MenuItem>\n )}\n {deleted && (ability.can('delete', 'Comment') || record.author.id === user.id) && (\n <MenuItem onClick={() => deleteComment(record.id)}>\n <ListItemIcon>\n <ClearIcon />\n </ListItemIcon>\n <Typography variant=\"inherit\">{translate('ra.action.delete')}</Typography>\n </MenuItem>\n )}\n </MoreButton>\n )}\n </ListItem>\n {!last && <Divider variant=\"inset\" component=\"li\" className={classes.divider} />}\n </>\n );\n};\n\nexport default TaskComment;\n","import React, { useEffect, useState } from 'react';\nimport { Form, Field } from 'react-final-form';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport TaskCommentsInput from './TaskCommentsInput';\nimport ListItem from '@material-ui/core/ListItem';\nimport AvatarField from '../Fields/AvatarField';\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport { useVersion } from 'react-admin';\nimport updateCommentsToTask from '../../dataProvider/Core/updateCommentsToTask';\nimport TaskComment from './TaskComment';\nimport List from '@material-ui/core/List';\nimport { makeStyles } from '@material-ui/core/styles';\nimport cuid from 'cuid';\nimport moment from 'moment';\nimport { omit } from 'lodash';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\nimport { useDataProvider } from 'react-admin';\n\nconst useStyles = makeStyles((theme) => {\n return {\n avatar: {\n background: theme.palette.secondary.main,\n color: theme.palette.secondary.contrastText,\n },\n };\n});\n\nconst TaskCommentForm = ({ record, ...props }) => {\n const classes = useStyles();\n const user = useSelector((state) => state.user, shallowEqual);\n const dataProvider = useDataProvider();\n const [comments, setComments] = useState(record.comments);\n const [selectedComment, setSelectedComment] = useState(null);\n if (typeof record.comments === 'string') record.comments = null;\n const version = useVersion();\n\n useDeepCompareEffect(() => {\n setComments(record.comments);\n setSelectedComment(null);\n }, [version, record.comments || []]);\n\n const handleSubmit = async (values) => {\n if (!record || !record.id || !values.body) return;\n if (values.id) {\n const tempComment = {\n body: values.body,\n edited: true,\n updatedAt: moment().toISOString(),\n loading: true,\n };\n setComments(comments.map((c) => (c.id === values.id ? { ...c, ...tempComment } : c)));\n dataProvider\n .update('Task', {\n id: record.id,\n data: {\n ...omit(record, ['id', 'acts', 'files']),\n comments: {\n update: [\n {\n where: { id: values.id },\n data: {\n body: values.body,\n author: { connect: { id: values.author.id } },\n edited: true,\n },\n },\n ],\n },\n },\n })\n .then((result) => {\n const {\n data: { comments },\n } = result;\n setComments(comments);\n return result;\n })\n .catch((e) => {\n console.log(e);\n tempComment.error = e;\n tempComment.loading = false;\n setComments(comments.map((c) => (c.id === values.id ? { ...c, ...tempComment } : c)));\n })\n .finally(() => {\n setSelectedComment(null);\n });\n } else {\n const id = cuid();\n const tempComment = { ...values, author: user, id, loading: true, createdAt: moment().toISOString() };\n setComments([...comments, tempComment]);\n dataProvider\n .update('Task', {\n id: record.id,\n data: {\n ...omit(record, ['id', 'acts', 'files']),\n comments: {\n create: [\n {\n ...values,\n author: { connect: { id: values.author.id } },\n },\n ],\n },\n },\n })\n .then((result) => {\n const {\n data: { comments },\n } = result;\n setComments(comments);\n return result;\n })\n .catch((e) => {\n console.log(e);\n tempComment.error = e;\n tempComment.loading = false;\n setComments([...comments, tempComment]);\n });\n }\n };\n\n // const handleDeleteComment = async (id) => {\n // await updateCommentsToTask({\n // where: {id: record.id},\n // comments: {\n // delete: [{id}]\n // }\n // })\n // refresh();\n // }\n\n return (\n <Form\n onSubmit={handleSubmit}\n initialValues={{\n body: null,\n author: user,\n }}\n render={({ handleSubmit, form }) => {\n const handleDeleteComment = async (id) => {\n setSelectedComment(null);\n setComments(comments.filter((comment) => comment.id !== id));\n const {\n data: { comments: coms },\n } = await dataProvider.update('Task', {\n id: record.id,\n data: {\n ...omit(record, ['id', 'acts', 'files']),\n comments: {\n delete: [{ id }],\n },\n },\n });\n form.reset();\n setComments(coms);\n };\n\n const handleRemoveComment = async (id) => {\n setSelectedComment(null);\n setComments(\n comments.map((comment) =>\n comment.id !== id\n ? comment\n : { ...comment, deleted: true, deletedAt: moment().toISOString(), loading: true },\n ),\n );\n const {\n data: { comments: coms },\n } = await dataProvider.update('Task', {\n id: record.id,\n data: {\n ...omit(record, ['id', 'acts', 'files']),\n comments: {\n update: [\n {\n where: { id },\n data: { deleted: true, deletedAt: moment().toISOString() },\n },\n ],\n },\n },\n });\n form.reset();\n setComments(coms);\n };\n\n return (\n <form\n onSubmit={(event) => {\n handleSubmit(event);\n form.reset();\n }}\n >\n <List dense>\n {comments &&\n comments.sort &&\n comments\n .sort((first, second) => {\n const time1 = moment(first.createdAt).unix();\n const time2 = moment(second.createdAt).unix();\n if (time1 > time2) return 1;\n if (time2 > time1) return -1;\n return 0;\n })\n .map((comment) => (\n <TaskComment\n record={comment}\n selected={selectedComment}\n setSelected={setSelectedComment}\n deleteComment={handleDeleteComment}\n removeComment={handleRemoveComment}\n key={comment.id}\n />\n ))}\n <ListItem alignItems=\"flex-start\">\n <ListItemAvatar>\n <AvatarField className={classes.avatar} record={user} />\n </ListItemAvatar>\n <ListItemText>\n <Field\n name=\"body\"\n onSubmit={async (event) => {\n await handleSubmit(event);\n form.reset();\n }}\n component={TaskCommentsInput}\n />\n </ListItemText>\n </ListItem>\n </List>\n </form>\n );\n }}\n />\n );\n};\n\nexport default TaskCommentForm;\n","import React from 'react';\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport BlankLayout from '../Layout/BlankLayout';\n\nimport TaskCommentForm from './TaskCommentForm';\n\nconst useStyles = makeStyles((theme) => ({}));\n\nconst TaskShowCommentsBlock = (props) => {\n return (\n <BlankLayout {...props}>\n <TaskCommentForm />\n </BlankLayout>\n );\n};\n\n// const TaskShowCommentsBlockView = (props) => {\n// const classes = useStyles();\n// const { record } = props;\n// if (!record) return null;\n\n// return (\n// <CardContent>\n// <TaskCommentsField {...props} />\n// </CardContent>\n// );\n// };\n\nexport default TaskShowCommentsBlock;\n","import React from 'react';\nimport Card from '@material-ui/core/Card';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate, SimpleShowLayout } from 'react-admin';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(),\n '&:first-child': {\n marginTop: 0,\n },\n '&:last-child': {\n marginBottom: 0,\n },\n },\n main: {},\n}));\n\nconst ShowLayout = ({\n children,\n classes: classesOverride,\n component: Component = Card,\n className,\n label,\n ...props\n}) => {\n const classes = useStyles({ classes: classesOverride });\n const translate = useTranslate();\n return (\n <div className={`${classes.root} ${className}`}>\n {label && (\n <Typography variant=\"subtitle2\" color=\"textSecondary\" gutterBottom noWrap>\n {translate(`resources.${props.resource}.layout.${label}`)}\n </Typography>\n )}\n <Component className={classes.main}>\n <SimpleShowLayout {...props}>{children}</SimpleShowLayout>\n </Component>\n </div>\n );\n};\n\nexport default ShowLayout;\n","import { useTranslate } from 'react-admin';\nimport lowerFirst from 'lodash/lowerFirst';\n\nconst TitleForRecord = ({ resource, source, record, ...props }) => {\n const translate = useTranslate();\n if (!record) return null;\n const typeText = lowerFirst(translate(`resources.${resource}.enums.type.${record.type}`));\n const numberText = record.alias;\n const titleText = translate(`resources.${resource}.title`, { type: typeText, number: numberText });\n return titleText;\n};\n\nexport default TitleForRecord;\n","import React, { cloneElement, Children } from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { linkToRecord } from 'ra-core';\nimport { Link } from 'react-admin';\nimport sanitizeRestProps from './sanitizeRestProps';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexWrap: 'wrap',\n marginTop: -theme.spacing(1),\n marginBottom: -theme.spacing(1),\n },\n}));\n\n// useful to prevent click bubbling in a datagrid with rowClick\nconst stopPropagation = (e) => e.stopPropagation();\n\nconst handleClick = () => {};\n\nfunction NestedArrayField({\n addLabel,\n classes: classesOverride,\n className,\n record,\n source,\n resource,\n reference,\n basePath,\n children,\n linkType,\n ...rest\n}) {\n const classes = useStyles({ classes: classesOverride });\n const data = get(record, source);\n if (!data) {\n return null;\n }\n\n return (\n <div className={classnames(classes.root, className)} {...sanitizeRestProps(rest)}>\n {data.map((item) => {\n const rootPath = basePath.replace(resource, reference);\n const resourceLinkPath = !linkType ? false : linkToRecord(rootPath, item.id, linkType);\n\n if (resourceLinkPath) {\n return (\n <Link className={classes.link} key={item.id} to={resourceLinkPath} onClick={stopPropagation}>\n {cloneElement(Children.only(children), {\n record: item,\n resource,\n basePath,\n // Workaround to force ChipField to be clickable\n onClick: handleClick,\n })}\n </Link>\n );\n }\n\n return cloneElement(Children.only(children), {\n key: item.id,\n record: item,\n resource,\n basePath,\n });\n })}\n </div>\n );\n}\n\nNestedArrayField.propTypes = {\n basePath: PropTypes.string,\n children: PropTypes.element.isRequired,\n classes: PropTypes.object,\n className: PropTypes.string,\n linkType: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]).isRequired,\n resource: PropTypes.string,\n};\n\nNestedArrayField.defaultProps = {\n classes: {},\n linkType: 'edit',\n addLabel: true,\n};\n\nexport default NestedArrayField;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@material-ui/core/Button';\nimport Collapse from '@material-ui/core/Collapse';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate } from 'react-admin';\nimport Portal from '@material-ui/core/Portal';\n\nconst useStyles = makeStyles((theme) => ({\n cardActions: {\n justifyContent: 'center',\n },\n button: {\n color: theme.palette.text.secondary,\n },\n expandButton: {},\n expandIcon: {\n marginLeft: 4,\n fontSize: 20,\n transform: 'rotate(0deg)',\n transition: theme.transitions.create('transform', {\n duration: theme.transitions.duration.shortest,\n }),\n },\n expandOpen: {\n transform: 'rotate(180deg)',\n },\n}));\n\nconst MoreContent = ({\n children,\n classes: classesOverride,\n resource,\n basePath,\n record,\n version,\n label,\n showMoreButton,\n ...props\n}) => {\n const translate = useTranslate();\n const classes = useStyles({ classes: classesOverride });\n const [more, setMore] = useState(false);\n\n const handleMoreClick = () => {\n setMore(!more);\n };\n\n return (\n <>\n <Portal container={showMoreButton.current}>\n <Button\n size=\"small\"\n onClick={handleMoreClick}\n aria-expanded={more}\n aria-label=\"Show more\"\n className={`${classes.button} ${classes.expandButton}`}\n >\n <span>{translate(label)}</span>\n <ExpandMoreIcon className={`${classes.expandIcon} ${more ? classes.expandOpen : ''}`} />\n </Button>\n </Portal>\n <Collapse in={more} timeout=\"auto\" unmountOnExit>\n {React.Children.map(children, (field) =>\n React.cloneElement(field, {\n record,\n basePath,\n resource,\n version,\n }),\n )}\n </Collapse>\n </>\n );\n};\n\nMoreContent.propTypes = {\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\n};\n\nMoreContent.defaultProps = {\n classes: {},\n label: 'ra.action.more',\n};\n\nexport default MoreContent;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n justifyContent: 'center',\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(),\n },\n content: {\n maxWidth: theme.spacing(96),\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n icon: {},\n action: { marginTop: theme.spacing() },\n title: {},\n subheader: {},\n}));\n\nconst Separator = ({ action, icon, classes: classesOverride, subheader, title, color, ...props }) => {\n const classes = useStyles({ classes: classesOverride });\n return (\n <div className={`${classes.root}`}>\n <div className={`${classes.content}`}>\n {icon && (\n <Typography component=\"span\" className={classes.icon} color={color || 'default'}>\n {icon}\n </Typography>\n )}\n {title && (\n <Typography variant=\"body2\" gutterBottom align=\"center\" color={color || 'default'} className={classes.title}>\n {title}\n </Typography>\n )}\n {subheader && (\n <Typography variant=\"caption\" gutterBottom align=\"center\" className={classes.subheader}>\n {subheader}\n </Typography>\n )}\n {action && <div className={classes.action}>{action}</div>}\n </div>\n </div>\n );\n};\n\nSeparator.propTypes = {\n action: PropTypes.node,\n icon: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n subheader: PropTypes.node,\n title: PropTypes.node,\n};\n\nexport default Separator;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useListController, ListContextProvider, ListView } from 'react-admin';\n\nconst List = (props) => {\n const controllerProps = useListController(props);\n\n return (\n <ListContextProvider value={controllerProps}>\n <ListView {...props} {...controllerProps} />\n </ListContextProvider>\n );\n};\n\nList.propTypes = {\n actions: PropTypes.oneOfType([PropTypes.bool, PropTypes.element]),\n aside: PropTypes.element,\n bulkActionButtons: PropTypes.oneOfType([PropTypes.element, PropTypes.bool]),\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n filter: PropTypes.object,\n filterDefaultValues: PropTypes.object,\n filters: PropTypes.element,\n pagination: PropTypes.oneOfType([PropTypes.element, PropTypes.bool]),\n perPage: PropTypes.number.isRequired,\n sort: PropTypes.shape({\n field: PropTypes.string,\n order: PropTypes.string,\n }),\n authProvider: PropTypes.func,\n hasCreate: PropTypes.bool.isRequired,\n hasEdit: PropTypes.bool.isRequired,\n hasList: PropTypes.bool.isRequired,\n hasShow: PropTypes.bool.isRequired,\n location: PropTypes.any,\n match: PropTypes.any,\n path: PropTypes.string,\n resource: PropTypes.string.isRequired,\n};\n\nList.defaultProps = {\n filter: {},\n perPage: 100,\n};\n\nexport default List;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { DateField, Datagrid, TextField, Filter, SearchInput, ReferenceInput, useTranslate } from 'react-admin';\nimport EnumField from '../Fields/EnumField';\nimport AutocompleteInput from '../Inputs/AutoompleteInput';\nimport List from '../Layout/List';\nimport customExporter, { dateFormatter, enumFormatter } from '../../exporter';\nimport ManualSubmitFilter from '../Layout/filter/ManualSubmitFilter';\n\nconst useStyles = makeStyles((theme) => ({\n row: {\n height: 40,\n },\n}));\n\nconst HistoryFilter = (props) => (\n <ManualSubmitFilter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <ReferenceInput reference=\"User\" source=\"createdBy.id\" label=\"resources.History.fields.createdBy\" alwaysOn>\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </ManualSubmitFilter>\n);\n\nexport const DefaultDatagrid = (props) => {\n const classes = useStyles();\n return (\n <Datagrid {...props} rowClick=\"show\" classes={{ row: classes.row }}>\n <EnumField source=\"action\" noWrap />\n <EnumField source=\"type\" />\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <TextField source=\"createdBy.name\" label=\"resources.History.fields.createdBy\" sortable={false} />\n <DateField source=\"createdAt\" textAlign=\"right\" />\n </Datagrid>\n );\n};\n\nexport const ReferenceDatagrid = (props) => {\n const classes = useStyles();\n return (\n <Datagrid {...props} rowClick=\"show\" classes={{ row: classes.row }}>\n <EnumField source=\"action\" noWrap />\n <EnumField source=\"type\" />\n <TextField source=\"name\" />\n <TextField source=\"createdBy.name\" label=\"resources.History.fields.createdBy\" sortable={false} />\n <DateField source=\"createdAt\" textAlign=\"right\" />\n </Datagrid>\n );\n};\n\nconst HistoryList = ({ modelExport, ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const exporter = customExporter(translate(`resources.${props.resource}.name`, { smart_count: 2 }), modelExport, {\n translate,\n });\n const manualSubmitForm = React.useRef(null);\n return (\n <List {...props} filters={<HistoryFilter formRef={manualSubmitForm} />} exporter={exporter}>\n <DefaultDatagrid />\n </List>\n );\n};\n\nHistoryList.defaultProps = {\n perPage: 100,\n sort: { field: 'createdAt', order: 'DESC' },\n bulkActionButtons: false,\n modelExport: {\n action: enumFormatter,\n type: enumFormatter,\n name: true,\n description: true,\n createdBy: {\n name: true,\n __resource: 'User',\n },\n createdAt: dateFormatter,\n __resource: 'History',\n },\n};\n\nexport default HistoryList;\n","import React, { cloneElement, Children } from 'react';\nimport get from 'lodash/get';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\n\nconst parseGridValue = (theme, value) => {\n return typeof value === 'string' ? value : theme.spacing(value) + 'px';\n};\n\nconst parseGridSize = (theme, size) => {\n return Array.isArray(size)\n ? `minmax(${size.map((value) => parseGridValue(theme, value)).join(', ')})`\n : parseGridValue(theme, size);\n};\n\nconst generateGrid = (theme, breakpoint, props) => {\n const value = props[breakpoint];\n if (!value) return;\n const { count, size } = value;\n return {\n [theme.breakpoints.up('xs')]: {\n gridTemplateColumns: `repeat(${count}, ${parseGridSize(theme, size)})`,\n },\n };\n};\n\nconst useStyles = makeStyles((theme) => ({\n root: ({ spacing }) => ({\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(160px, 1fr))',\n gridGap: theme.spacing(spacing),\n }),\n 'grid-xs': (props) => generateGrid(theme, 'xs', props),\n 'grid-sm': (props) => generateGrid(theme, 'sm', props),\n 'grid-md': (props) => generateGrid(theme, 'md', props),\n 'grid-lg': (props) => generateGrid(theme, 'lg', props),\n 'grid-xl': (props) => generateGrid(theme, 'xl', props),\n}));\n\nconst GridField = ({\n children,\n classes: classesOverride,\n className: classNameOverride,\n resource,\n basePath,\n record,\n version,\n source,\n lg = false,\n md = false,\n sm = false,\n xl = false,\n xs = false,\n spacing = 2,\n ...props\n}) => {\n const classes = useStyles({ classes: classesOverride, lg, md, sm, xl, xs, spacing });\n const choices = get(record, source);\n if (!record || !choices || !choices.length) return null;\n const className = classnames(\n classes.root,\n {\n [classes[`grid-xs`]]: xs !== false,\n [classes[`grid-sm`]]: sm !== false,\n [classes[`grid-md`]]: md !== false,\n [classes[`grid-lg`]]: lg !== false,\n [classes[`grid-xl`]]: xl !== false,\n },\n classNameOverride,\n );\n\n return (\n <div className={className}>\n {choices.map((choice) =>\n cloneElement(Children.only(children), {\n key: choice.id,\n resource,\n basePath,\n record: choice,\n version,\n }),\n )}\n </div>\n );\n};\n\nexport default GridField;\n","import React from 'react';\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport TextIcon from '../Icons/DocumentBox';\nimport WordIcon from '../Icons/WordBox';\nimport ExcelIcon from '../Icons/ExcelBox';\nimport PdfIcon from '../Icons/PdfBox';\nimport ImageIcon from '@material-ui/icons/Image';\nimport ZipIcon from '../Icons/ZipBox';\nimport get from 'lodash/get';\nimport { getAccessToken } from '../../authPrivider/getAccessToken';\nimport { Link } from 'react-router-dom';\n\nimport { AUTH_TOKEN_COOKIE, URI_BLOB_REST } from '../../appsettings';\nimport { getCookie } from '../../utils';\n\nimport Card from '@material-ui/core/Card';\n\nimport CardMedia from '@material-ui/core/CardMedia';\nimport CardActions from '@material-ui/core/CardActions';\n\nimport IconButton from '@material-ui/core/IconButton';\n\nimport ShowIcon from '@material-ui/icons/Visibility';\nimport Typography from '@material-ui/core/Typography';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n maxWidth: theme.spacing(32),\n margin: '.125rem',\n background: 'rgba(0, 0, 0, 0.04)',\n },\n\n card: {\n // maxWidth: 345,\n },\n media: {\n height: 140,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 56,\n cursor: 'pointer',\n },\n title: {\n marginRight: 'auto',\n },\n action: {\n marginTop: -3,\n marginBottom: -3,\n },\n}));\n\nconst stopPropagation = (e) => e.stopPropagation();\n\nconst getUrlWithToken = (url, token) => {\n return url.indexOf('blob:') < 0 ? `${url}?${token}` : url;\n};\n\nexport const getIcon = (ext) => {\n switch (ext) {\n case 'doc':\n case 'docm':\n case 'docx':\n return <WordIcon style={{ color: '#366DBC' }} />;\n break;\n case 'pdf':\n return <PdfIcon style={{ color: '#E21E00' }} />;\n break;\n case 'text':\n case 'txt':\n return <TextIcon style={{ color: '#576D7E' }} />;\n break;\n case 'xls':\n case 'xlsb':\n case 'xlsm':\n case 'xlsx':\n return <ExcelIcon style={{ color: '#1D7E44' }} />;\n break;\n case '7z':\n case 'rar':\n case 'zip':\n case 'zipx':\n return <ZipIcon style={{ color: '#FDCC77' }} />;\n break;\n case 'jpg':\n case 'svg':\n case 'png':\n return <ImageIcon style={{ color: '#EB5757' }} />;\n break;\n default:\n return <TextIcon />;\n break;\n }\n};\n\nconst FileCard = ({\n className,\n classes: classesOverride,\n record,\n resourse,\n source,\n title,\n linkType,\n onClick,\n ...props\n}) => {\n const classes = useStyles({ classes: classesOverride });\n if (!record) return null;\n\n const label = get(record, title) || title;\n const url = get(record, source) ? URI_BLOB_REST + get(record, source) : source;\n const urlThumbnail = record.urlThumbnail ? URI_BLOB_REST + record.urlThumbnail : record.url;\n const ext = record.ext || (record.rawFile && record.rawFile.name.split('.').pop());\n const icon = getIcon(ext);\n\n const openHandler = async (e) => {\n e.stopPropagation();\n ['png', 'jpg', 'jpeg', 'gif'].includes(ext) && onClick\n ? onClick()\n : window.open(getUrlWithToken(url, await getAccessToken()), '_blank');\n };\n\n return (\n <Card className={classes.card}>\n {['png', 'jpg', 'jpeg'].includes(ext) ? (\n <CardMedia\n onClick={openHandler}\n className={classes.media}\n image={getUrlWithToken(urlThumbnail, getCookie(AUTH_TOKEN_COOKIE))}\n title={label}\n />\n ) : (\n <CardMedia onClick={openHandler} className={classes.media} title={label}>\n {React.cloneElement(icon, { fontSize: 'inherit' })}\n </CardMedia>\n )}\n <CardActions>\n {icon}\n <Typography variant=\"caption\" noWrap className={classes.title}>\n {label}\n </Typography>\n <IconButton\n aria-label=\"show\"\n size=\"small\"\n className={classes.action}\n onClick={stopPropagation}\n component={Link}\n to={`/${resourse}/${record.id}/${linkType}`}\n >\n <ShowIcon />\n </IconButton>\n </CardActions>\n </Card>\n );\n};\n\nFileCard.defaultProps = {\n resourse: 'File',\n linkType: 'show',\n};\n\nexport default FileCard;\n","import React, { useState } from 'react';\nimport get from 'lodash/get';\nimport { useDispatch } from 'react-redux';\nimport { useNotify, fetchStart, fetchEnd, Button } from 'react-admin';\nimport FileDownloadIcon from '../Icons/FileDownload';\n//import getUrlArchive from '../../dataProvider/Blob/archiveFiles';\nimport getUrlArchive from '../../dataProvider/Blob/archiveGetUrl';\n\nimport { getAccessToken } from '../../authPrivider/getAccessToken';\n\nimport useDeepCompareEffect from 'use-deep-compare-effect';\nimport DownloadFilesSnackBar from '../Layout/DownloadFilesSnackBar';\nimport { URI_BLOB_REST } from '../../appsettings';\n\nexport const sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n undoable,\n redirect,\n submitOnEnter,\n ...rest\n}) => rest;\n\nconst DownloadFilesButton = ({ record, source, className, sources, ...props }) => {\n /*\n const dispatch = useDispatch();\n const notify = useNotify();\n const [loading, setLoading] = useState(false);\n const [folders, setFolders] = useState([]);\n const [open, setOpen] = useState(false);\n const label = sources ? `ra.action.download_all` : `ra.action.download_all_${source}`;\n const files = [];\n if (sources && sources.length) {\n sources.forEach(s => {\n if (get(record, s))\n files.push(...get(record, s))\n })\n } else {\n if (get(record, source))\n files.push(...get(record, source))\n }\n\n\n useDeepCompareEffect(()=>{\n if (folders.length) {\n getUrlArchive(folders).then( async (data) => {\n const token = await getAccessToken();\n setOpen(false);\n setFolders([]);\n window.open(`${URI_BLOB_REST}${data.data.getUrlArchiveFiles.virtualpath}?${token}`, '_blank');\n }).catch((error) => {\n notify( typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning' );\n setOpen(false);\n })\n .finally(() => {\n setLoading(false);\n dispatch(fetchEnd());\n });\n\n }\n }, [folders])\n\n if (!files || !files.length) return null;\n \n const handleClick = () => {\n \n const folder = {\n // prefix: record.alias,\n // name: record.name,\n // idsBlob: record[resource].map(file => (file.idBlob)),\n humanId: record.id,\n addrManual: (`${(record.alias ? record.alias + ' ' : '') + (record.name ? record.name + ' ': '')}`.replace(/ /g, '_')).substring(0, 66),\n idsBlob: files.map(file => (file.idBlob)),\n }\n\n setLoading(true);\n dispatch(fetchStart());\n setFolders([folder]);\n setOpen(true);\n\n };\n */\n\n const notify = useNotify();\n const [loading, setLoading] = useState(false);\n const label = sources ? `ra.action.download_all` : `ra.action.download_all_${source}`;\n\n const files = [];\n if (sources && sources.length) {\n sources.forEach((s) => {\n if (get(record, s)) {\n files.push(...get(record, s));\n }\n });\n } else {\n if (get(record, source)) {\n files.push(...get(record, source));\n }\n }\n\n if (!files || !files.length) return null;\n\n const handleClick = () => {\n setLoading(true);\n getUrlArchive([\n {\n humanId: record.id,\n addrManual: `${\n (record.maintainableItemName ? record.maintainableItemName + ' ' : '').substring(0, 100) +\n (record.alias ? record.alias + ' ' : '') +\n (record.name ? record.name + ' ' : '')\n }`\n .replace(/ /g, '_')\n .substring(0, 200),\n idsBlob: files.map((file) => file.idBlob),\n },\n ]).then((data) => {\n const a = document.createElement('a');\n a.style.display = 'none';\n document.body.appendChild(a);\n a.href = data.url;\n a.click();\n setLoading(false);\n notify('Загрузка архива началась. Дождитесь завершения.');\n });\n };\n\n return (\n <>\n <Button\n onClick={handleClick}\n disabled={loading}\n label={label}\n className={className}\n key=\"button\"\n {...sanitizeRestProps(props)}\n >\n <FileDownloadIcon />\n </Button>\n\n {/* <DownloadFilesSnackBar folders={folders} open={open} setFolders={setFolders} setOpen={setOpen}/> */}\n </>\n );\n};\n\nexport default DownloadFilesButton;\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport 'react-responsive-carousel/lib/styles/carousel.min.css'; // requires a loader\nimport { Carousel } from 'react-responsive-carousel';\nimport get from 'lodash/get';\nimport { URI_BLOB_REST } from '../../appsettings';\nimport { getAccessToken } from '../../authPrivider/getAccessToken';\nimport { getIcon } from './FileCard';\nimport Dialog from '@material-ui/core/Dialog';\nimport { makeStyles } from '@material-ui/core/styles';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport { Button } from 'react-admin';\n\nconst useStyles = makeStyles(() => {\n return {\n paper: {\n minWidth: '65vw',\n },\n };\n});\n\nconst PictureGallery = ({ record, sources, open, setOpen, ...props }) => {\n const classes = useStyles();\n const [token, setToken] = useState();\n const [selected, setSelected] = useState(0);\n useEffect(() => {\n getAccessToken().then((t) => setToken(t));\n }, [token]);\n\n const pictures = useMemo(\n () =>\n sources\n .reduce((acc, source) => [...acc, ...get(record, source)], [])\n .filter(Boolean)\n .filter(({ ext }) => ['png', 'jpg', 'jpeg', 'gif'].includes(ext)),\n [sources],\n );\n\n const handleDownload = useCallback(() => {\n fetch(URI_BLOB_REST + pictures[selected].url + `?${token}`)\n .then((response) => response.blob())\n .then((blob) => {\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = pictures[selected].name;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n });\n }, [selected, pictures]);\n\n const handlePrint = useCallback(() => {\n fetch(URI_BLOB_REST + pictures[selected].url + `?${token}`)\n .then((response) => response.blob())\n .then((blob) => {\n const url = URL.createObjectURL(blob);\n const IFrame = document.createElement('iframe');\n IFrame.src = url;\n IFrame.hidden = true;\n document.getElementsByTagName('body')[0].appendChild(IFrame);\n IFrame.focus();\n IFrame.onload = () => {\n IFrame.contentWindow.print();\n };\n });\n }, [selected, pictures]);\n\n if (!token) return null;\n\n return (\n <Dialog classes={classes} open={open} onClose={() => setOpen(false)}>\n <DialogTitle>\n <Button label=\"Скачать\" onClick={handleDownload} />\n <Button label=\"Распечатать\" onClick={handlePrint} />\n </DialogTitle>\n <Carousel\n useKeyboardArrows={true}\n onChange={(value) => setSelected(value)}\n // renderArrowNext={(onClickHandler, hasNext, label) =>\n // hasNext && (\n // <button type=\"button\" onClick={onClickHandler} title={label} style={{\n // position: 'absolute',\n // zIndex: 2,\n // top: 'calc(50% - 15px)',\n // width: 30,\n // height: 30,\n // cursor: 'pointer',\n // right: 15\n // }}>\n // <ChevronRightIcon/>\n // </button>\n // )\n // }\n // renderArrowPrev={(onClickHandler, hasNext, label) =>\n // hasNext && (\n // <button type=\"button\" onClick={onClickHandler} title={label} style={{\n // position: 'absolute',\n // zIndex: 2,\n // top: 'calc(50% - 15px)',\n // width: 30,\n // height: 30,\n // cursor: 'pointer',\n // left: 15}}>\n // <ChevronLeftIcon/>\n // </button>\n // )}\n >\n {pictures.map(({ url, ext }, index) => {\n return (\n <div style={{ maxHeight: '600px' }}>\n {['png', 'jpg', 'jpeg'].includes(ext) ? (\n <img\n key={'gallery_' + index}\n src={URI_BLOB_REST + url + `?${token}`}\n style={{ width: 'unset', maxWidth: '100%', maxHeight: 600 }}\n />\n ) : (\n React.cloneElement(getIcon(ext), {\n key: 'gallery_' + index,\n style: { width: '50%', height: '50%' },\n })\n )}\n </div>\n );\n })}\n </Carousel>\n </Dialog>\n );\n};\n\nexport default PictureGallery;\n","import React from 'react';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Field } from 'react-final-form';\nimport { ability } from '../../../abilityProvider';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n // padding: '10px'\n },\n check: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n },\n}));\n\nconst CheckField = ({ test, ...props }) => {\n const classes = useStyles();\n\n const handleChange = (event) => {\n console.log(event);\n };\n\n return (\n <Field name={test.id} type=\"checkbox\">\n {({ input }) => (\n <div className={classes.check}>\n <Checkbox {...input} disabled={!ability.can('update', 'Task', 'verification')} />\n <Typography>{test.name}</Typography>\n </div>\n )}\n </Field>\n );\n};\n\nexport const TestCheckBoxes = (props) => {\n const { record } = props;\n const classes = useStyles();\n\n if (!record) return null;\n return (\n <div className={classes.container}>\n {record.verificationTests.map((test) => {\n return <CheckField test={test} />;\n })}\n </div>\n );\n};\n","import React from 'react';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles({\n container: {\n width: '100%',\n borderTop: '1px solid grey',\n marginTop: '8px',\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'flex-start',\n },\n});\n\nexport const ResultField = (props) => {\n const { record } = props;\n const classes = useStyles();\n\n return (\n <div className={classes.container}>\n <div style={{ marginRight: 20 }}>\n <Typography>Результат проверки</Typography>\n <Typography>{(record.verificationMark || 0) + '%'}</Typography>\n </div>\n </div>\n );\n};\n","import gql from 'graphql-tag';\nimport apolloCoreClient from './apolloCoreClient';\nimport { TASK_TEMPLATE } from './typeDefs';\n\nexport const UPDATE_TASK_VERIFICATION = gql`\n mutation updateTaskVerification($where: TaskWhereUniqueInput!, $verificationCheck: Boolean!, $verificationTests: [VerificationTestInput!], $verificationComment: String) {\n data: updateTaskVerification( where: $where, verificationCheck: $verificationCheck, verificationTests: $verificationTests, verificationComment: $verificationComment) ${TASK_TEMPLATE}\n }`;\n\nexport default (args) => {\n return apolloCoreClient.mutate({\n mutation: UPDATE_TASK_VERIFICATION,\n variables: args,\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import gql from 'graphql-tag';\nimport apolloCoreClient from './apolloCoreClient';\nimport { TASK_TEMPLATE } from './typeDefs';\n\nexport const DISMISS_TASK_VERIFICATION = gql`\n mutation dismissTaskVerification($where: TaskWhereUniqueInput!, $verificationComment: String) {\n data: dismissTaskVerification( where: $where, verificationComment: $verificationComment) ${TASK_TEMPLATE}\n }`;\n\nexport default (args) => {\n return apolloCoreClient.mutate({\n mutation: DISMISS_TASK_VERIFICATION,\n variables: args,\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import React, { useCallback } from 'react';\n\nimport Button from '@material-ui/core/Button';\nimport { makeStyles } from '@material-ui/core/styles';\nimport BlankLayout from '../../Layout/BlankLayout';\nimport { CheckboxGroupInput, fetchEnd, fetchStart, SimpleForm, useRefresh } from 'react-admin';\nimport { TestCheckBoxes } from './TestCheckBoxes';\nimport { Form, Field } from 'react-final-form';\nimport { ResultField } from './ResultField';\nimport { useDispatch } from 'react-redux';\nimport updateVerificationTests from '../../../dataProvider/Core/updateVerificationTests';\nimport dismissVerificationTests from '../../../dataProvider/Core/dismissVerificationTests';\nimport TextField from '@material-ui/core/TextField';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardActions from '@material-ui/core/CardActions';\nimport { ability } from '../../../abilityProvider';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n // display: 'flex',\n // flexDirection: 'column',\n // padding: '10px',\n // alignItems: 'flex-start',\n },\n button: {\n marginRight: 5,\n // alignSelf: 'center',\n },\n}));\n\nconst TaskVerificationBlock = (props) => {\n const classes = useStyles();\n const { record } = props;\n const dispatch = useDispatch();\n const refresh = useRefresh();\n\n const onSubmit = useCallback(\n ({ verificationCheck, verificationComment, ...tests }) => {\n dispatch(fetchStart());\n\n updateVerificationTests({\n where: { id: record.id },\n verificationCheck: verificationCheck,\n verificationComment,\n verificationTests: Object.keys(tests).map((k) => ({ id: k, value: tests[k] })),\n })\n .then((result) => {\n dispatch(fetchEnd());\n })\n .catch((e) => {\n console.log(e);\n dispatch(fetchEnd());\n })\n .finally(() => refresh());\n },\n [dispatch, record.id, refresh],\n );\n\n const handleDismiss = useCallback(() => {\n dispatch(fetchStart());\n\n dismissVerificationTests({ where: { id: record.id } })\n .then((result) => {\n dispatch(fetchEnd());\n })\n .catch((e) => {\n console.log(e);\n dispatch(fetchEnd());\n })\n .finally(() => refresh());\n }, [dispatch, refresh, record.id]);\n\n if (!record || !record.verificationTests || !record.verificationTests.length) return null;\n const initialValues = {\n verificationCheck: record.verificationCheck,\n verificationComment: record.verificationComment,\n };\n record.verificationTests.forEach((test) => (initialValues[test.id] = test.check));\n\n return (\n <BlankLayout {...props}>\n <Form\n onSubmit={onSubmit}\n initialValues={initialValues}\n render={({ handleSubmit, pristine, valid, submitting, form, ...props }) => {\n return (\n <form className={classes.container} onSubmit={handleSubmit}>\n <Card>\n <CardContent>\n <TestCheckBoxes record={record} />\n <Field name=\"verificationComment\">\n {({ input, meta }) => {\n return (\n <TextField\n {...input}\n error={meta.error && meta.touched}\n helperText={meta.touched ? meta.error : ''}\n variant={'outlined'}\n style={{ marginBottom: 5 }}\n multiline={true}\n label={'Замечание'}\n disabled={!ability.can('update', 'Task', 'verification')}\n />\n );\n }}\n </Field>\n <ResultField record={record} />\n </CardContent>\n {ability.can('update', 'Task', 'verification') && (\n <CardActions>\n <div style={{ display: 'flex', flexDirection: 'row' }}>\n <Button\n disabled={pristine || submitting}\n className={classes.button}\n type={'submit'}\n variant=\"contained\"\n color=\"primary\"\n >\n Подтвердить\n </Button>\n <Button className={classes.button} onClick={handleDismiss} variant=\"contained\" color=\"primary\">\n Сбросить\n </Button>\n </div>\n </CardActions>\n )}\n </Card>\n </form>\n );\n }}\n />\n </BlankLayout>\n );\n};\n\nexport default TaskVerificationBlock;\n","import React, { useState } from 'react';\nimport { ability } from '../../abilityProvider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Grid from '@material-ui/core/Grid';\nimport {\n useShowController,\n ChipField,\n ReferenceField,\n ReferenceManyField,\n Pagination,\n TextField,\n TopToolbar,\n EditButton,\n} from 'react-admin';\nimport { ShowView } from '../Layout/Show';\nimport BannerDeleted from '../Layout/BannerDeleted';\nimport EnumField from '../Fields/EnumField';\nimport MainBlock from './TaskShowMainBlock';\nimport NestedField from '../Fields/NestedField';\nimport ResultBlock from './TaskShowResultBlock';\nimport CommentsBlock from './TaskShowCommentsBlock';\nimport ShowLayout from '../Layout/ShowLayout';\nimport BlankLayout from '../Layout/BlankLayout';\nimport TitleForRecord from './TaskTitleForRecord';\nimport NestedArrayField from '../Fields/NestedArrayField';\nimport MoreContent from '../Layout/MoreContent';\nimport Separator from '../Layout/Separator';\nimport { ReferenceDatagrid as ReferenceHistoryDatagrid } from '../History/HistoryList';\nimport GridField from '../Fields/GridField';\nimport FileCard from '../Fields/FileCard';\nimport DownloadFilesButton from '../Buttons/TaskDownloadFilesButton';\nimport PictureGallery from '../Fields/PictureGallery';\nimport TaskVerificationBlock from './TaskVerificationBlock/TaskVerificationBlock';\nimport { useSelector, shallowEqual } from 'react-redux';\n\nconst useStyles = makeStyles((theme) => ({\n link: {\n color: theme.palette.link.main,\n },\n}));\n\nconst TaskActions = ({ basePath, data, hasEdit, ...props }) => {\n return (\n <TopToolbar>\n <DownloadFilesButton basePath={basePath} record={data} source=\"acts\" />\n <DownloadFilesButton basePath={basePath} record={data} source=\"files\" />\n <DownloadFilesButton basePath={basePath} record={data} sources={['acts', 'files']} />\n {hasEdit && <EditButton basePath={basePath} record={data} />}\n </TopToolbar>\n );\n};\n\nconst TaskShowGrid = (props) => {\n const classes = useStyles();\n const hasRsult = props.record && (props.record.status === 'COMPLETED' || props.record.result);\n const [open, setOpen] = useState(false);\n\n return (\n <Grid container spacing={3}>\n <Grid item xs={12} lg={6}>\n <PictureGallery record={props.record} sources={['files', 'acts']} open={open} setOpen={setOpen} />\n <MainBlock label=\"main\" {...props} />\n <CommentsBlock label=\"comments\" {...props} />\n {ability.can('update', 'Task', 'verificationTests') && (\n <TaskVerificationBlock label=\"verification\" {...props} />\n )}\n {hasRsult && <ResultBlock label=\"result\" {...props} />}\n </Grid>\n <Grid item xs={12} lg={6}>\n <ShowLayout label=\"object\" {...props}>\n {ability.can('getOne', 'Object', 'name') && (\n <ReferenceField source=\"maintainableItem\" reference=\"ConstructionObject\" link=\"show\">\n <TextField source=\"name\" />\n </ReferenceField>\n )}\n {ability.can('getOne', 'Distributor', 'name') && (\n <ReferenceField\n source=\"distributor\"\n sort={{ field: 'name', order: 'ASC' }}\n reference=\"Counterparty\"\n link=\"show\"\n >\n <TextField source=\"name\" />\n </ReferenceField>\n )}\n {ability.can('getOne', 'Object', 'region') && (\n <ReferenceField source=\"region\" reference=\"Region\" link=\"show\">\n <TextField source=\"unrestrictedName\" />\n </ReferenceField>\n )}\n {ability.can('getOne', 'Object', 'addrManual') && <TextField source=\"addrManual\" />}\n {ability.can('getOne', 'Object', 'type') && <EnumField source=\"maintainableItemType\" />}\n </ShowLayout>\n <ShowLayout label=\"users\" {...props}>\n {ability.can('getOne', 'Task', 'createdBy') && (\n <NestedField source=\"createdBy\" reference=\"User\">\n <TextField source=\"name\" />\n </NestedField>\n )}\n {ability.can('getOne', 'Task', 'processedBy') && (\n <NestedField source=\"processedBy\" reference=\"User\">\n <TextField source=\"name\" />\n </NestedField>\n )}\n {ability.can('getOne', 'Task', 'responsibledBy') && (\n <NestedField source=\"responsibledBy\" reference=\"User\">\n <TextField source=\"name\" />\n </NestedField>\n )}\n {ability.can('getOne', 'Task', 'executedBy') && (\n <NestedField source=\"executedBy\" reference=\"User\">\n <TextField source=\"name\" />\n </NestedField>\n )}\n {ability.can('getOne', 'Task', 'distributedBy') && (\n <NestedField source=\"distributedBy\" reference=\"User\">\n <TextField source=\"name\" />\n </NestedField>\n )}\n {ability.can('getOne', 'Task', 'leadedBy') && (\n <NestedField source=\"leadedBy\" reference=\"User\">\n <TextField source=\"name\" />\n </NestedField>\n )}\n </ShowLayout>\n {ability.can('getOne', 'Task', 'acts') && (\n <BlankLayout label=\"acts\" component={'div'} {...props}>\n <GridField source=\"acts\" xs={{ count: 'auto-fill', size: [20, '1fr'] }}>\n <FileCard source=\"url\" title=\"name\" canOpen onClick={() => setOpen(true)} />\n </GridField>\n </BlankLayout>\n )}\n {ability.can('getOne', 'Task', 'files') && (\n <BlankLayout label=\"files\" component={'div'} {...props}>\n <GridField source=\"files\" xs={{ count: 'auto-fill', size: [20, '1fr'] }}>\n <FileCard source=\"url\" title=\"name\" canOpen onClick={() => setOpen(true)} />\n </GridField>\n </BlankLayout>\n )}\n </Grid>\n </Grid>\n );\n};\n\nconst TaskShow = (props) => {\n const controllerProps = useShowController(props);\n const classes = useStyles();\n const showMoreButton = React.useRef(null);\n const showHistoryButton = React.useRef(null);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n const user = useSelector((state) => state.user, shallowEqual);\n const hasEdit = Boolean(\n props.hasEdit &&\n !isDeleted &&\n (['WORK', 'VERCFICATION', 'REPAIR'].includes(controllerProps.record && controllerProps.record.status)\n ? ['EMPLOYEE', 'ADMIN', 'SUPERADMIN'].includes(user.role) |\n ((controllerProps.record &&\n Boolean(controllerProps.record.executedBy) &&\n controllerProps.record.executedBy.id) ===\n (user || {}).id)\n : true),\n );\n\n return (\n <ShowView\n {...props}\n {...controllerProps}\n title={<TitleForRecord {...props} />}\n actions={<TaskActions />}\n hasEdit={hasEdit}\n >\n {isDeleted && <BannerDeleted />}\n\n <TaskShowGrid />\n\n <Separator action={<div ref={showMoreButton}></div>} />\n\n <MoreContent showMoreButton={showMoreButton}>\n <ShowLayout>\n <TextField source=\"id\" />\n {ability.can('getOne', 'Task', 'relatedTasks') && (\n <NestedArrayField source=\"relatedTasks\" reference=\"Task\" linkType=\"show\">\n <ChipField source=\"name\" />\n </NestedArrayField>\n )}\n </ShowLayout>\n </MoreContent>\n\n {ability.can('getOne', 'Task', 'history') && <Separator action={<div ref={showHistoryButton}></div>} />}\n\n {ability.can('getOne', 'Task', 'history') && (\n <MoreContent showMoreButton={showHistoryButton} label=\"ra.action.show_history\">\n <BlankLayout>\n <ReferenceManyField\n reference=\"History\"\n target=\"item\"\n sort={{ field: 'createdAt', order: 'DESC' }}\n perPage={10}\n pagination={<Pagination />}\n >\n <ReferenceHistoryDatagrid />\n </ReferenceManyField>\n </BlankLayout>\n </MoreContent>\n )}\n </ShowView>\n );\n};\n\nexport default TaskShow;\n","import Icon from '@material-ui/icons/Assignment';\nimport TaskList from './TaskList';\nimport TaskCreate from './TaskCreate';\nimport TaskEdit from './TaskEdit';\nimport TaskShow from './TaskShow';\n\nconst TaskIcon = Icon;\n\nexport { TaskIcon, TaskList, TaskShow, TaskCreate, TaskEdit };\n","import React from 'react';\nimport Badge from '@material-ui/core/Badge';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useSelector, shallowEqual } from 'react-redux';\n\nconst useStyles = makeStyles((theme) => ({\n badge: {\n backgroundColor: '#44b700',\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`,\n },\n dot: {\n height: 8,\n padding: 0,\n minWidth: 8,\n },\n}));\n\nconst OnlineBadge = ({ children, record, ...props }) => {\n const classes = useStyles();\n const onlineUsers = useSelector((state) => state.onlineUsers, shallowEqual);\n if (!record) return null;\n const isOnline = onlineUsers.includes(record.id);\n\n return (\n <Badge\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n classes={{ badge: classes.badge, dot: classes.dot }}\n invisible={!isOnline}\n variant=\"dot\"\n >\n {React.cloneElement(children, {\n record,\n ...props,\n })}\n </Badge>\n );\n};\n\nOnlineBadge.defaultProps = {\n addLabel: false,\n};\n\nexport default OnlineBadge;\n","import React, { useState } from 'react';\nimport { ability, rulesToFields } from '../../abilityProvider';\nimport { Tabs, Tab, Divider } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n DateField,\n Datagrid,\n TextField,\n Filter,\n SearchInput,\n BulkExportButton,\n useTranslate,\n ReferenceInput,\n} from 'react-admin';\nimport AutocompleteInput from '../Inputs/AutoompleteInput';\nimport EnumField from '../Fields/EnumField';\nimport PhoneField from '../Fields/PhoneField';\nimport OnlineBadge from '../Fields/OnlineBadge';\nimport AvatarField from '../Fields/AvatarField';\nimport BulkRemoveButton from '../Buttons/BulkRemoveButton';\nimport EnumInput from '../Inputs/EnumInput';\nimport LocationSuggestion from '../Location/LocationSuggestion';\n\nimport List from '../Layout/List';\nimport customExporter, { dateFormatter, enumFormatter } from '../../exporter';\nimport ManualSubmitFilter from '../Layout/filter/ManualSubmitFilter';\n\nconst useStyles = makeStyles((theme) => ({\n row: {\n height: 40,\n },\n}));\n\nconst filterStyles = makeStyles((theme) => ({\n container: {\n marginBottom: '4px',\n },\n}));\n\nconst UserBulkActionButtons = (props) => (\n <>\n {ability.can('remove', 'Task') && <BulkRemoveButton {...props} />}\n <BulkExportButton {...props} />\n </>\n);\n\nconst filterRoles = (value) => {\n const { role_in, role } = rulesToFields('getList', 'User');\n return role_in ? role_in.includes(value.name) : true;\n};\n\nconst UserFilter = (props) => {\n const classes = filterStyles();\n return (\n <ManualSubmitFilter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <EnumInput source=\"role\" Enum=\"UserRole\" filter={filterRoles} emptyText=\"ra.message.no\" alwaysOn />\n <ReferenceInput\n source=\"region_some\"\n reference=\"Region\"\n label=\"resources.User.fields.region\"\n perPage={50}\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput\n optionText=\"unrestrictedName\"\n classesOvverride={classes}\n suggestionItem={<LocationSuggestion />}\n />\n </ReferenceInput>\n </ManualSubmitFilter>\n );\n};\n\nexport const DefaultDatagrid = (props) => {\n const classes = useStyles();\n\n return (\n <Datagrid {...props} rowClick=\"show\" classes={{ row: classes.row }}>\n <OnlineBadge>\n <AvatarField size=\"small\" />\n </OnlineBadge>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <PhoneField source=\"phone\" />\n <TextField source=\"email\" />\n <EnumField source=\"role\" />\n <DateField source=\"createdAt\" textAlign=\"right\" />\n </Datagrid>\n );\n};\n\nconst UserTabs = ({ filterValues, setFilters, ...props }) => {\n const translate = useTranslate();\n const [tab, setTab] = useState('staff');\n\n const handleChange = (event, value) => {\n if (value === 'staff')\n setFilters({ ...filterValues, role_in: ['DISPATCHER', 'MANAGER', 'EMPLOYEE', 'DISTRIBUTOR', 'MACROLEADER'] });\n if (value === 'system') setFilters({ ...filterValues, role_in: ['SUPERADMIN', 'ADMIN', 'SERVICE'] });\n setTab(value);\n };\n\n return (\n <>\n <Tabs value={tab} onChange={handleChange} centered>\n <Tab label={translate('resources.User.enums.tabs.staff')} value=\"staff\" />\n <Tab label={translate('resources.User.enums.tabs.system')} value=\"system\" />\n </Tabs>\n <Divider />\n {tab === 'staff' && <DefaultDatagrid {...props} />}\n {tab === 'system' && <DefaultDatagrid {...props} />}\n </>\n );\n};\n\nconst UserList = ({ modelExport, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const exporter = customExporter(translate(`resources.${props.resource}.name`, { smart_count: 2 }), modelExport, {\n translate,\n });\n const manualSubmitForm = React.useRef(null);\n\n return (\n <List\n {...props}\n filters={<UserFilter formRef={manualSubmitForm} />}\n bulkActionButtons={<UserBulkActionButtons />}\n exporter={exporter}\n >\n <UserTabs />\n </List>\n );\n};\n\nUserList.defaultProps = {\n filterDefaultValues: { role_in: ['DISPATCHER', 'MANAGER', 'EMPLOYEE', 'DISTRIBUTOR', 'MACROLEADER'] },\n perPage: 100,\n sort: { field: 'createdAt', order: 'DESC' },\n modelExport: {\n id: true,\n name: true,\n description: true,\n createdAt: dateFormatter,\n createdBy: {\n name: true,\n __resource: 'User',\n },\n updatedAt: dateFormatter(),\n email: true,\n phone: true,\n role: enumFormatter,\n region: true,\n __resource: 'User',\n },\n};\n\nexport default UserList;\n","import React, { cloneElement, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { useCreateController, CreateContextProvider, CreateView } from 'react-admin';\n\nconst Create = (props) => (\n <CreateContextProvider value={{ ...props }}>\n <CreateView {...props} {...useCreateController(props)} />\n </CreateContextProvider>\n);\n\nCreate.propTypes = {\n actions: PropTypes.element,\n aside: PropTypes.element,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n hasCreate: PropTypes.bool,\n hasEdit: PropTypes.bool,\n hasShow: PropTypes.bool,\n hasList: PropTypes.bool,\n resource: PropTypes.string.isRequired,\n title: PropTypes.node,\n successMessage: PropTypes.string,\n onSuccess: PropTypes.func,\n onFailure: PropTypes.func,\n transform: PropTypes.func,\n undoable: PropTypes.bool,\n};\n\nexport default Create;\n","import React, { useEffect } from 'react';\nimport { ReferenceArrayInput, useDataProvider } from 'react-admin';\nimport { useForm } from 'react-final-form';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\n\nconst RegionInput = ({ filter, children, ...props }) => {\n const form = useForm();\n const provider = useDataProvider();\n\n useDeepCompareEffect(() => {\n const regions = form.getState().values.regions;\n if (regions) {\n provider\n .getList('Region', {\n sort: { order: 'asc', field: 'name' },\n pagination: { page: 1, perPage: 1000 },\n filter,\n })\n .then((listRegions) => {\n form.change(\n 'regions',\n regions.filter((value) => listRegions.data.some((region) => region.id === value)),\n );\n });\n }\n }, [filter]);\n\n return (\n <ReferenceArrayInput {...props} filter={filter}>\n {children}\n </ReferenceArrayInput>\n );\n};\n\nexport default RegionInput;\n","import React from 'react';\nimport { rulesToFields } from '../../abilityProvider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n useCreateController,\n CreateView,\n ReferenceInput,\n TextInput,\n PasswordInput,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n required,\n minLength,\n email,\n TabbedFormTabs,\n FormTab,\n TabbedForm,\n useTranslate,\n FormDataConsumer,\n} from 'react-admin';\nimport PhoneInput from '../Inputs/PhoneInput';\nimport EnumInput from '../Inputs/EnumInput';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport EnumArrayInput from '../Inputs/EnumArrayInput';\nimport AutocompleteInput from '../Inputs/AutoompleteInput';\nimport Create from '../Layout/Create';\nimport RegionInput from './RegionInput';\n\nconst useStyles = makeStyles({\n referenceArrayInput: {\n marginTop: 8,\n marginBottom: 4,\n },\n});\n\nconst filterRoles = (value) => {\n const { role_in } = rulesToFields('create', 'User');\n return role_in ? role_in.includes(value.name) : true;\n};\n\nconst validateName = [required(), minLength(2)];\nconst validateEmail = [required(), email()];\nconst validateRole = [required()];\nconst validatePhone = [required()];\nconst validatePassword = [required()];\n\nconst UserCreate = (props) => {\n const controllerProps = useCreateController(props);\n const classes = useStyles();\n const translate = useTranslate();\n const user = useSelector((state) => state.user, shallowEqual);\n const regions = (user && user.regions) || [];\n\n return (\n <Create {...props} {...controllerProps}>\n <TabbedForm redirect=\"list\" tabs={<TabbedFormTabs centered />}>\n <FormTab label={translate('resources.User.fields.main')}>\n <TextInput source=\"name\" validate={validateName} fullWidth />\n <TextInput source=\"description\" multiline fullWidth />\n <ReferenceInput\n source=\"distributor\"\n sort={{ field: 'name', order: 'ASC' }}\n reference=\"Counterparty\"\n filter={{ regions: regions.map((r) => ({ id: r })) }}\n label=\"resources.User.fields.distributor\"\n emptyText=\"ra.message.no\"\n validate={[required()]}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n <EnumInput source=\"role\" Enum=\"UserRole\" filter={filterRoles} validate={validateRole} />\n <PhoneInput source=\"phone\" validate={validatePhone} inputProps={{ autoComplete: 'new-password' }} />\n <TextInput\n source=\"email\"\n type=\"email\"\n validate={validateEmail}\n inputProps={{ autoComplete: 'new-password' }}\n />\n <PasswordInput source=\"password\" validate={validatePassword} inputProps={{ autocomplete: 'new-password' }} />\n </FormTab>\n <FormTab label={translate('resources.User.fields.access')}>\n <FormDataConsumer>\n {({ formData, ...rest }) => {\n const filter = formData.distributor ? { counterparties: [{ id: formData.distributor }] } : {};\n\n return (\n <RegionInput\n source=\"regions\"\n reference=\"Region\"\n label=\"resources.User.fields.regions\"\n fullWidth\n filter={filter}\n classes={{ container: classes.referenceArrayInput }}\n >\n <AutocompleteArrayInput optionText=\"unrestrictedName\" />\n </RegionInput>\n );\n }}\n </FormDataConsumer>\n <EnumArrayInput source=\"maintainableItemTypes\" Enum=\"MaintainableItemType\" fullWidth />\n <EnumArrayInput source=\"taskTypes\" Enum=\"TaskType\" fullWidth />\n </FormTab>\n <FormTab label={translate('resources.User.fields.notification')}>\n {/*<EnumArrayInput source=\"notificationType\" Enum=\"NotificationType\" fullWidth/>*/}\n <EnumArrayInput source=\"notificationService\" Enum=\"NotificationService\" fullWidth />\n {/*<TriggerInput source=\"triggers\" />*/}\n </FormTab>\n </TabbedForm>\n </Create>\n );\n};\n\nexport default UserCreate;\n","import React from 'react';\nimport BanIcon from '@material-ui/icons/Report';\nimport UnbanIcon from '@material-ui/icons/ReportOff';\nimport { useNotify, useRedirect, useUpdate, Button } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\nimport updateClient from '../../authPrivider/updateClient';\n\nconst useStyles = makeStyles((theme) => ({\n banButton: {\n color: theme.palette.error.main,\n borderColor: fade(theme.palette.error.main, 0.5),\n '&:hover': {\n backgroundColor: fade(theme.palette.error.main, 0.12),\n borderColor: theme.palette.error.main,\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n unbanButton: {\n color: theme.palette.primary.main,\n borderColor: theme.palette.primary.light,\n '&:hover': {\n backgroundColor: fade(theme.palette.primary.main, 0.12),\n borderColor: theme.palette.primary.main,\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n}));\n\nconst BanButton = ({ basePath, record, redirect: redirectTo, className }) => {\n const classes = useStyles();\n const notify = useNotify();\n // const redirect = useRedirect();\n\n const [handleBan, { loading: banLoading }] = useUpdate('User', record.id, { ...record, banned: true }, record, {\n undoable: true,\n onSuccess: ({ data }) => {\n // redirect(`${basePath}/${record.id}/show`);\n updateClient({ id: record.auth, banned: true });\n notify('ra.notification.user_banned', 'info', {}, true);\n },\n onFailure: (error) => notify(`Error: ${error.message}`, 'warning'),\n });\n const [handleUnban, { loading: unbanLoading }] = useUpdate('User', record.id, { ...record, banned: false }, record, {\n undoable: true,\n onSuccess: ({ data }) => {\n // redirect(`${basePath}/${record.id}/show`);\n updateClient({ id: record.auth, banned: false });\n notify('ra.notification.user_unbanned', 'info', {}, true);\n },\n onFailure: (error) => notify(`Error: ${error.message}`, 'warning'),\n });\n\n return record.banned ? (\n <Button\n label=\"ra.action.unban\"\n onClick={handleUnban}\n disabled={unbanLoading}\n className={`${classes.unbanButton} ${className}`}\n >\n <UnbanIcon />\n </Button>\n ) : (\n <Button\n label=\"ra.action.ban\"\n onClick={handleBan}\n disabled={banLoading}\n className={`${classes.banButton} ${className}`}\n >\n <BanIcon />\n </Button>\n );\n};\n\nexport default BanButton;\n","import React from 'react';\nimport { ability, rulesToFields } from '../../abilityProvider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport DeleteForeverIcon from '@material-ui/icons/DeleteForever';\nimport BanButton from '../Buttons/BanButton';\nimport {\n useEditController,\n TextInput,\n PasswordInput,\n Toolbar,\n SaveButton,\n DeleteButton,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n required,\n email,\n minLength,\n TabbedForm,\n FormTab,\n TabbedFormTabs,\n useTranslate,\n ReferenceInput,\n FormDataConsumer,\n} from 'react-admin';\nimport Edit, { EditView } from '../Layout/Edit';\nimport BlankLayout from '../Layout/BlankLayout';\nimport UserBanner from '../User/UserBanner';\nimport TitleForRecord from '../Layout/TitleForRecord';\nimport RemoveButton from '../Buttons/RemoveButton';\nimport RestoreButton from '../Buttons/RestoreButton';\nimport PhoneInput from '../Inputs/PhoneInput';\nimport EnumInput from '../Inputs/EnumInput';\nimport EnumArrayInput from '../Inputs/EnumArrayInput';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport AutocompleteInput from '../Inputs/AutoompleteInput';\nimport RegionInput from './RegionInput';\n\nconst filterRoles = (value) => {\n const { role_in, role } = rulesToFields('create', 'User');\n return role_in ? role_in.includes(value.name) : true;\n};\n\nconst validateName = [required(), minLength(2)];\nconst validateEmail = [email()];\nconst validateRole = [required()];\nconst validatePhone = [required()];\n\nconst useStyles = makeStyles((theme) => ({\n toolbar: {\n display: 'flex',\n '& > *:not(:last-child)': {\n marginRight: theme.spacing(1),\n },\n },\n mlAuto: {\n marginLeft: 'auto',\n '&:last-child': {\n marginLeft: 0,\n },\n },\n referenceArrayInput: {\n marginTop: 8,\n marginBottom: 4,\n },\n triggers: {\n display: 'flex',\n flexDirection: 'row',\n },\n}));\n\nconst UserToolbar = (props) => {\n const isDeleted = props.record.deleted;\n const classes = useStyles();\n return (\n <Toolbar {...props} classes={{ toolbar: classes.toolbar }}>\n {isDeleted && ability.can('restore', 'User') && <RestoreButton />}\n {!isDeleted && ability.can('update', 'User') && <SaveButton />}\n {!isDeleted && ability.can('update', 'User') && (\n <SaveButton redirect={false} label=\"ra.action.save_and_continue\" submitOnEnter={false} variant=\"outlined\" />\n )}\n {ability.can('ban', 'User') && <BanButton redirect=\"show\" className={classes.mlAuto} />}\n {!isDeleted && ability.can('remove', 'User') && <RemoveButton className={classes.mlAuto} redirect=\"show\" />}\n {isDeleted && ability.can('delete', 'User') && (\n <DeleteButton undoable className={classes.mlAuto} icon={<DeleteForeverIcon />} />\n )}\n </Toolbar>\n );\n};\n\nconst UserEdit = (props) => {\n const controllerProps = useEditController(props);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n const classes = useStyles();\n const translate = useTranslate();\n const user = useSelector((state) => state.user, shallowEqual);\n const regions = (user && user.regions) || [];\n\n return (\n <Edit title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n <UserBanner />\n <BlankLayout>\n <TabbedForm toolbar={<UserToolbar />} redirect=\"show\" tabs={<TabbedFormTabs centered />}>\n <FormTab label={translate('resources.User.fields.main')}>\n {ability.can('update', 'User', 'name') && (\n <TextInput source=\"name\" validate={validateName} disabled={isDeleted} fullWidth />\n )}\n {ability.can('update', 'User', 'description') && (\n <TextInput source=\"description\" multiline disabled={isDeleted} fullWidth />\n )}\n <ReferenceInput\n source=\"distributor\"\n sort={{ field: 'name', order: 'ASC' }}\n reference=\"Counterparty\"\n label=\"resources.User.fields.distributor\"\n filter={{ regions: regions.map((r) => ({ id: r })) }}\n emptyText=\"ra.message.no\"\n validate={[required()]}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n {ability.can('update', 'User', 'role') && (\n <EnumInput\n source=\"role\"\n Enum=\"UserRole\"\n filter={filterRoles}\n validate={validateRole}\n disabled={isDeleted}\n />\n )}\n {ability.can('update', 'User', 'phone') && (\n <PhoneInput\n source=\"phone\"\n validate={validatePhone}\n inputProps={{ autoComplete: 'new-password' }}\n disabled={isDeleted}\n />\n )}\n {ability.can('update', 'User', 'email') && (\n <TextInput\n source=\"email\"\n type=\"email\"\n validate={validateEmail}\n inputProps={{ autoComplete: 'new-password' }}\n disabled={isDeleted}\n />\n )}\n {ability.can('update', 'User', 'password') && (\n <PasswordInput source=\"password\" inputProps={{ autocomplete: 'new-password' }} />\n )}\n </FormTab>\n <FormTab label={translate('resources.User.fields.access')}>\n {ability.can('update', 'User', 'regions') && (\n <FormDataConsumer>\n {({ formData, ...rest }) => {\n const filter = formData.distributor ? { counterparties: [{ id: formData.distributor }] } : {};\n return (\n <RegionInput\n source=\"regions\"\n reference=\"Region\"\n label=\"resources.User.fields.regions\"\n fullWidth\n filter={filter}\n classes={{ container: classes.referenceArrayInput }}\n >\n <AutocompleteArrayInput optionText=\"unrestrictedName\" />\n </RegionInput>\n );\n }}\n </FormDataConsumer>\n )}\n <EnumArrayInput source=\"maintainableItemTypes\" Enum=\"MaintainableItemType\" fullWidth />\n <EnumArrayInput source=\"taskTypes\" Enum=\"TaskType\" fullWidth />\n </FormTab>\n <FormTab label={translate('resources.User.fields.notification')}>\n {/*<EnumArrayInput source=\"notificationType\" Enum=\"NotificationType\" fullWidth/>*/}\n <EnumArrayInput source=\"notificationService\" Enum=\"NotificationService\" fullWidth />\n {/*<TriggerInput source=\"triggers\" />*/}\n </FormTab>\n </TabbedForm>\n </BlankLayout>\n </Edit>\n );\n};\n\nexport default UserEdit;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport { useTranslate } from 'react-admin';\nimport Chip from '@material-ui/core/Chip';\nimport { get } from 'lodash';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n // padding:\"0.125em 1.5em\",\n // borderRadius: theme.shape.borderRadius\n display: 'flex',\n },\n chip: {\n margin: '8px',\n },\n}));\n\nconst ArrayEnumField = ({ record, resource, source, Enum, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const data = get(record, source);\n if (!data) return null;\n return (\n <div className={classes.root}>\n {data.map((value) => {\n return (\n <Chip\n className={classes.chip}\n key={value}\n label={translate(`resources.${resource}.enums.${source}.${value}`)}\n />\n );\n })}\n </div>\n );\n};\n\nArrayEnumField.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n record: PropTypes.object,\n source: PropTypes.string.isRequired,\n};\n\nArrayEnumField.defaultProps = {\n addLabel: true,\n};\n\nexport default ArrayEnumField;\n","import React, { useState } from 'react';\nimport get from 'lodash/get';\nimport { useNotify, fetchStart, fetchEnd, Button, useTranslate } from 'react-admin';\nimport FileDownloadIcon from '../Icons/FileDownload';\nimport getUrlArchive from '../../dataProvider/Blob/archiveGetUrl';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Typography from '@material-ui/core/Typography';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\n\nexport const sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n undoable,\n redirect,\n submitOnEnter,\n ...rest\n}) => rest;\n\nconst DownloadFilesButton = ({ record, source, className, sources, ...props }) => {\n /*\n const dispatch = useDispatch();\n const notify = useNotify();\n const [loading, setLoading] = useState(false);\n const [folders, setFolders] = useState([]);\n const [open, setOpen] = useState(false);\n const label = sources ? `ra.action.download_all` : `ra.action.download_all_${source}`;\n const files = [];\n if (sources && sources.length) {\n sources.forEach(s => {\n if (get(record, s))\n files.push(...get(record, s))\n })\n } else {\n if (get(record, source))\n files.push(...get(record, source))\n }\n\n\n useDeepCompareEffect(()=>{\n if (folders.length) {\n getUrlArchive(folders).then( async (data) => {\n const token = await getAccessToken();\n setOpen(false);\n setFolders([]);\n window.open(`${URI_BLOB_REST}${data.data.getUrlArchiveFiles.virtualpath}?${token}`, '_blank');\n }).catch((error) => {\n notify( typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning' );\n setOpen(false);\n })\n .finally(() => {\n setLoading(false);\n dispatch(fetchEnd());\n });\n\n }\n }, [folders])\n\n if (!files || !files.length) return null;\n \n const handleClick = () => {\n \n const folder = {\n // prefix: record.alias,\n // name: record.name,\n // idsBlob: record[resource].map(file => (file.idBlob)),\n humanId: record.id,\n addrManual: (`${(record.alias ? record.alias + ' ' : '') + (record.name ? record.name + ' ': '')}`.replace(/ /g, '_')).substring(0, 66),\n idsBlob: files.map(file => (file.idBlob)),\n }\n\n setLoading(true);\n dispatch(fetchStart());\n setFolders([folder]);\n setOpen(true);\n\n };\n */\n\n const notify = useNotify();\n const [loading, setLoading] = useState(false);\n const label = sources ? `ra.action.download_all` : `ra.action.download_all_${source}`;\n const translate = useTranslate();\n\n const files = [];\n if (sources && sources.length) {\n sources.forEach((s) => {\n if (get(record, s)) {\n files.push(...get(record, s));\n }\n });\n } else {\n if (get(record, source)) {\n files.push(...get(record, source));\n }\n }\n\n if (!files || !files.length) return null;\n\n const handleClick = () => {\n setLoading(true);\n getUrlArchive([\n {\n humanId: record.id,\n addrManual: `${(record.alias ? record.alias + ' ' : '') + (record.name ? record.name + ' ' : '')}`\n .replace(/ /g, '_')\n .substring(0, 200),\n idsBlob: files.map((file) => file.idBlob),\n },\n ]).then((data) => {\n const a = document.createElement('a');\n a.style.display = 'none';\n document.body.appendChild(a);\n a.href = data.url;\n a.click();\n setLoading(false);\n notify('Загрузка архива началась. Дождитесь завершения.');\n });\n };\n\n return (\n <>\n <MenuItem\n onClick={handleClick}\n disabled={loading}\n label={label}\n className={className}\n key=\"button\"\n {...sanitizeRestProps(props)}\n >\n <ListItemIcon>\n <FileDownloadIcon />\n </ListItemIcon>\n <Typography variant=\"inherit\">{translate(label)}</Typography>\n </MenuItem>\n\n {/* <DownloadFilesSnackBar folders={folders} open={open} setFolders={setFolders} setOpen={setOpen}/> */}\n </>\n );\n};\n\nexport default DownloadFilesButton;\n","import React from 'react';\nimport {\n useShowController,\n TextField,\n DateField,\n ReferenceArrayField,\n SingleFieldList,\n ChipField,\n TabbedShowLayout,\n Tab,\n TabbedShowLayoutTabs,\n ReferenceField,\n TopToolbar,\n EditButton,\n} from 'react-admin';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport Show, { ShowView } from '../Layout/Show';\nimport ShowLayout from '../Layout/ShowLayout';\nimport TitleForRecord from '../Layout/TitleForRecord';\n\nimport EnumField from '../Fields/EnumField';\nimport PhoneField from '../Fields/PhoneField';\nimport BannerDeleted from '../Layout/BannerDeleted';\nimport MoreContent from '../Layout/MoreContent';\nimport Separator from '../Layout/Separator';\nimport UserBanner from './UserBanner';\n\nimport ArrayEnumField from '../Fields/ArrayEnumFiled';\nimport BlankLayout from '../Layout/BlankLayout';\nimport DownloadFilesButton from '../Buttons/DownloadFilesButton';\nimport { rulesToFields } from '../../abilityProvider';\n\nconst UserShow = (props) => {\n const controllerProps = useShowController(props);\n const showMoreButton = React.useRef(null);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n const { role_in, role } = rulesToFields('create', 'User');\n\n const hasEdit =\n controllerProps.record && controllerProps.hasEdit && role_in ? role_in.includes(controllerProps.record.role) : true;\n\n return (\n <Show\n {...props}\n {...controllerProps}\n hasEdit={isDeleted ? false : props.hasEdit && hasEdit}\n title={<TitleForRecord source=\"name\" {...props} />}\n >\n {isDeleted && <BannerDeleted />}\n <UserBanner />\n <BlankLayout>\n <TabbedShowLayout tabs={<TabbedShowLayoutTabs centered />}>\n <Tab label=\"resources.User.fields.main\">\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <ReferenceField\n source=\"distributor\"\n sort={{ field: 'name', order: 'ASC' }}\n reference=\"Counterparty\"\n link={false}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n <PhoneField source=\"phone\" />\n <TextField source=\"email\" />\n <EnumField source=\"role\" />\n </Tab>\n\n <Tab label=\"resources.User.fields.access\">\n <ReferenceArrayField source=\"regions\" reference=\"Region\" label=\"resources.User.fields.regions\">\n <SingleFieldList linkType=\"show\">\n <ChipField source=\"unrestrictedName\" />\n </SingleFieldList>\n </ReferenceArrayField>\n <ArrayEnumField source=\"maintainableItemTypes\" />\n <ArrayEnumField source=\"taskTypes\" />\n </Tab>\n\n <Tab label=\"resources.User.fields.notification\">\n <ArrayEnumField source=\"notificationService\" />\n {/*<ArrayField source=\"triggers\">*/}\n {/* <Datagrid>*/}\n {/* <EnumField source=\"type\" resource=\"Trigger\" Enum=\"NotificationType\" label=\"resources.Trigger.fields.type\" />*/}\n {/* <EnumField source=\"field\" Enum=\"TaskField\" emptyText=\"Все\" label=\"resources.Trigger.fields.field\" />*/}\n {/* </Datagrid>*/}\n {/*</ArrayField>*/}\n </Tab>\n </TabbedShowLayout>\n </BlankLayout>\n\n <Separator action={<div ref={showMoreButton}></div>} />\n\n <MoreContent showMoreButton={showMoreButton}>\n <ShowLayout>\n <TextField source=\"id\" />\n <DateField source=\"createdAt\" />\n <TextField source=\"createdBy.name\" label=\"resources.User.fields.createdBy\" />\n <DateField source=\"updatedAt\" />\n </ShowLayout>\n </MoreContent>\n </Show>\n );\n};\n\nexport default UserShow;\n","import Icon from '@material-ui/icons/People';\nimport UserList from './UserList';\nimport UserCreate from './UserCreate';\nimport UserEdit from './UserEdit';\nimport UserShow from './UserShow';\n\nconst UserIcon = Icon;\n\nexport { UserIcon, UserList, UserShow, UserCreate, UserEdit };\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4 4h6l2 2h8a2 2 0 012 2v10a2 2 0 01-2 2H4a2 2 0 01-2-2V6c0-1.11.89-2 2-2zm11.5 5a1 1 0 011 1H18a1 1 0 011 1v5a1 1 0 01-1 1h-5a1 1 0 01-1-1v-5a1 1 0 011-1h1.5a1 1 0 011-1z\"\n />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction ObjectIcon(props) {\n return (\n <SvgIcon {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4 4h6l2 2h8a2 2 0 012 2v10a2 2 0 01-2 2H4a2 2 0 01-2-2V6c0-1.11.89-2 2-2zm11.591 8.215l3.304 3.324c.146.11.146.365-.036.511l-.835.84a.35.35 0 01-.509 0l-3.304-3.324a2.32 2.32 0 01-2.505-.548c-.726-.73-.908-1.826-.472-2.703l1.598 1.57 1.089-1.095-1.561-1.57a2.39 2.39 0 012.686.474c.69.694.872 1.68.545 2.52z\"\n />\n </SvgIcon>\n );\n}\n\nexport default ObjectIcon;\n","import React from 'react';\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Datagrid, TextField, Filter, SearchInput, TextInput, useTranslate } from 'react-admin';\nimport List from '../Layout/List';\nimport customExporter, { dateFormatter } from '../../exporter';\nimport ManualSubmitFilter from '../Layout/filter/ManualSubmitFilter';\n\nconst useStyles = makeStyles((theme) => ({\n row: {\n height: 40,\n },\n}));\n\nconst FileFilter = (props) => (\n <ManualSubmitFilter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <TextInput source=\"alias_contains\" />\n </ManualSubmitFilter>\n);\n\nconst FileList = ({ modelExport, ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const exporter = customExporter(translate(`resources.${props.resource}.name`, { smart_count: 2 }), modelExport, {\n translate,\n });\n const manualSubmitForm = React.useRef(null);\n\n return (\n <List {...props} filters={<FileFilter formRef={manualSubmitForm} />} exporter={exporter}>\n <Datagrid rowClick=\"show\" classes={{ row: classes.row }}>\n {/* <EnumField source=\"status\" />\n <TextField source=\"alias\" noWrap/> */}\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n {/* <TextField source=\"type.name\" label=\"resources.File.fields.type\" sortable={false}/>\n <TextField source=\"configuration.name\" label=\"resources.File.fields.configuration\" sortable={false}/>\n <DateField source=\"createdAt\" textAlign=\"right\"/> */}\n </Datagrid>\n </List>\n );\n};\n\nFileList.defaultProps = {\n perPage: 100,\n sort: { field: 'createdAt', order: 'DESC' },\n bulkActionButtons: false,\n modelExport: {\n id: true,\n name: true,\n description: true,\n createdAt: dateFormatter,\n createdBy: {\n name: true,\n __resource: 'User',\n },\n updatedAt: dateFormatter,\n url: true,\n urlThumbnail: true,\n catalog: true,\n ext: true,\n size: true,\n __resource: 'File',\n },\n};\n\nexport default FileList;\n","import React from 'react';\nimport { useShowController, TextField, DateField } from 'react-admin';\nimport { ShowView } from '../Layout/Show';\nimport ShowLayout from '../Layout/ShowLayout';\nimport TitleForRecord from '../Layout/TitleForRecord';\nimport MoreContent from '../Layout/MoreContent';\nimport Separator from '../Layout/Separator';\n\nconst FileShow = (props) => {\n const controllerProps = useShowController(props);\n const showMoreButton = React.useRef(null);\n\n return (\n <ShowView title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n <ShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <TextField source=\"url\" />\n <TextField source=\"urlThumbnail\" />\n <TextField source=\"catalog\" />\n <TextField source=\"size\" />\n </ShowLayout>\n\n <Separator action={<div ref={showMoreButton}></div>} />\n\n <MoreContent showMoreButton={showMoreButton}>\n <ShowLayout>\n <TextField source=\"id\" />\n <DateField source=\"createdAt\" />\n <TextField source=\"createdBy.name\" label=\"resources.File.fields.createdBy\" />\n <DateField source=\"updatedAt\" />\n </ShowLayout>\n </MoreContent>\n </ShowView>\n );\n};\n\nexport default FileShow;\n","import React from 'react';\n\nimport {\n useCreateController,\n CreateView,\n SimpleForm,\n TextInput,\n ReferenceInput,\n AutocompleteInput,\n required,\n} from 'react-admin';\n\nimport { useForm, useFormState } from 'react-final-form';\n\nconst validateType = [required()];\n\nconst ConfigurationInput = (props) => {\n const form = useForm();\n const { values } = useFormState();\n\n const handleChangeType = (value) => {\n form.change('configuration.id', null);\n };\n\n return (\n <>\n <ReferenceInput\n source=\"type.id\"\n reference=\"TaskType\"\n label=\"resources.Task.fields.type\"\n allowEmpty\n emptyText=\"ra.message.no\"\n validate={validateType}\n onChange={handleChangeType}\n {...props}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n\n <ReferenceInput\n source=\"configuration.id\"\n reference=\"TaskConfiguration\"\n label=\"resources.Task.fields.configuration\"\n allowEmpty\n emptyText=\"ra.message.no\"\n filter={{ type: values.type ? { id: values.type.id } : null }}\n options={{ disabled: !values.type }}\n {...props}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </>\n );\n};\n\nconst TaskCreate = (props) => {\n const controllerProps = useCreateController(props);\n //\n\n return (\n <CreateView {...props} {...controllerProps}>\n <SimpleForm redirect=\"show\">\n {/* <TextInput source=\"id\" />\n <TextInput source=\"alias\" /> */}\n <TextInput source=\"name\" validate={validateType} fullWidth />\n <TextInput source=\"description\" multiline fullWidth />\n <TextInput source=\"serialNumber\" />\n <ConfigurationInput />\n\n <ReferenceInput\n source=\"controller.id\"\n reference=\"Controller\"\n label=\"resources.Task.fields.controller\"\n allowEmpty\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </SimpleForm>\n </CreateView>\n );\n};\n\nexport default TaskCreate;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n useEditController,\n EditView,\n SimpleForm,\n TextInput,\n Toolbar,\n ReferenceInput,\n AutocompleteInput,\n required,\n} from 'react-admin';\nimport TitleForRecord from '../Layout/TitleForRecord';\n\nimport { useForm, useFormState } from 'react-final-form';\nconst validateType = [required()];\n\nconst useStyles = makeStyles({\n toolbar: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n});\n\nconst FileToolbar = (props) => {\n const isDeleted = props.record.deleted;\n return (\n <Toolbar {...props} classes={useStyles()}>\n {/* {isDeleted && ability.can(\"restore\", asc(\"Task\", {status})) && <RestoreButton />}\n {!isDeleted && ability.can(\"update\", asc(\"Task\", {status})) && <SaveTaskButton variant=\"outlined\" />}\n {!isDeleted && ability.can(\"update\", asc(\"Task\", {status})) && <SaveTaskButton redirect={false} label=\"ra.action.save_and_continue\" submitOnEnter={false} variant=\"outlined\" />}\n {!isDeleted && ability.can(\"delete\", asc(\"Task\", {status})) && <RemoveButton className={classes.mlAuto}/>}\n {isDeleted && ability.can(\"delete\", asc(\"Task\", {status})) && <DeleteButton undoable className={classes.mlAuto} icon={<DeleteForeverIcon />} />} */}\n </Toolbar>\n );\n};\n\nconst ConfigurationInput = ({ isDeleted, ...props }) => {\n const form = useForm();\n const { values } = useFormState();\n\n const handleChangeType = (value) => {\n form.change('configuration.id', null);\n };\n\n return (\n <>\n <ReferenceInput\n source=\"type.id\"\n reference=\"TaskType\"\n label=\"resources.Task.fields.type\"\n allowEmpty\n emptyText=\"ra.message.no\"\n validate={validateType}\n onChange={handleChangeType}\n options={{ disabled: isDeleted }}\n {...props}\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n\n <ReferenceInput\n source=\"configuration.id\"\n reference=\"TaskConfiguration\"\n label=\"resources.Task.fields.configuration\"\n allowEmpty\n emptyText=\"ra.message.no\"\n filter={{ type: values.type ? { id: values.type.id } : null /*, status_in: [\"TEST\", \"RELEASE\"]*/ }}\n options={{ disabled: !values.type || isDeleted }}\n {...props}\n >\n <AutocompleteInput /*optionText={<Option />} matchSuggestion={optionMatch}*/ />\n </ReferenceInput>\n </>\n );\n};\n\nconst optionRenderer = (choice) => `${choice.name} (${choice.status})`;\n\nconst optionMatch = (filter, choice) => {\n return true;\n};\n\nconst Option = (props) => {\n return <div>assssa</div>;\n};\n\nconst TaskEdit = (props) => {\n const controllerProps = useEditController(props);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n\n return (\n <EditView title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n <SimpleForm toolbar={<FileToolbar />}>\n <TextInput source=\"id\" disabled />\n <TextInput source=\"alias\" disabled />\n <TextInput source=\"name\" disabled={isDeleted} fullWidth />\n <TextInput source=\"description\" multiline disabled={isDeleted} fullWidth />\n <TextInput source=\"serialNumber\" disabled={isDeleted} />\n <ConfigurationInput isDeleted={isDeleted} />\n <ReferenceInput\n source=\"controller.id\"\n reference=\"Controller\"\n label=\"resources.Task.fields.controller\"\n allowEmpty\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput /*optionText={optionRenderer} matchSuggestion={optionMatch}*/ fullWidth />\n </ReferenceInput>\n </SimpleForm>\n </EditView>\n );\n};\n\nexport default TaskEdit;\n","import Icon from '../Icons/TaskFile';\nimport ObjectIcon from '../Icons/ObjectFile';\nimport FileList from './FileList';\nimport FileCreate from './FileCreate';\nimport FileEdit from './FileEdit';\nimport FileShow from './FileShow';\n\nconst TaskFileIcon = Icon;\nconst ObjectFileIcon = ObjectIcon;\n\nexport { TaskFileIcon, ObjectFileIcon, FileList, FileShow, FileCreate, FileEdit };\n","import React, { Children, cloneElement, isValidElement } from 'react';\nimport PropTypes from 'prop-types';\nimport Card from '@material-ui/core/Card';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ComponentPropType, useVersion, Title } from 'react-admin';\n\nexport const ListView = (props) => {\n const {\n children,\n className,\n classes: classesOverride,\n component: Content,\n title = 'resources.ImportExport.name',\n basePath,\n resource,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n\n const version = useVersion();\n\n return (\n <div className={classnames('list-page', classes.root, className)} {...sanitizeRestProps(rest)}>\n <Title title={title} />\n <div className={classes.main}>\n <Content className={classes.content} key={version}>\n {Children.map(children, (field, index) =>\n isValidElement(field)\n ? cloneElement(field, {\n key: index,\n resource,\n basePath,\n version,\n })\n : null,\n )}\n </Content>\n </div>\n </div>\n );\n};\n\nListView.propTypes = {\n basePath: PropTypes.string,\n children: PropTypes.node,\n className: PropTypes.string,\n classes: PropTypes.object,\n component: ComponentPropType,\n hasCreate: PropTypes.bool,\n resource: PropTypes.string,\n version: PropTypes.number,\n};\n\nListView.defaultProps = {\n classes: {},\n component: Card,\n};\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {},\n main: {\n display: 'flex',\n },\n content: {\n marginTop: theme.spacing(2),\n transition: theme.transitions.create('margin-top'),\n position: 'relative',\n flex: '1 1 auto',\n [theme.breakpoints.down('xs')]: {\n boxShadow: 'none',\n },\n overflow: 'inherit',\n },\n\n noResults: { padding: 20 },\n }),\n { name: 'RaList' },\n);\n\nconst sanitizeRestProps = ({\n basePath,\n currentSort,\n data,\n defaultTitle,\n displayedFilters,\n filterDefaultValues,\n filterValues,\n hasCreate,\n hasEdit,\n hasList,\n hasShow,\n hideFilter,\n history,\n ids,\n loading,\n loaded,\n location,\n match,\n onSelect,\n onToggleItem,\n onUnselectItems,\n options,\n page,\n permissions,\n perPage,\n resource,\n selectedIds,\n setFilters,\n setPage,\n setPerPage,\n setSort,\n showFilter,\n sort,\n total,\n ...rest\n}) => rest;\n\nexport default ListView;\n","import React, { forwardRef } from 'react';\nimport { Link } from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\nimport Avatar from '@material-ui/core/Avatar';\nimport Typography from '@material-ui/core/Typography';\nimport ImportIcon from '@material-ui/icons/GetApp';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\n\nconst useStyles = makeStyles((theme) => ({\n card: {\n height: '100%',\n },\n cardContent: {\n paddingTop: 0,\n },\n cardActionArea: {\n height: '100%',\n },\n header: {},\n title: {\n fontWeight: 500,\n lineHeight: 1.33,\n },\n avatar: {\n color: theme.palette.secondary.main,\n backgroundColor: fade(theme.palette.secondary.main, 0.12),\n },\n}));\n\nconst LinkRef = React.forwardRef((props, ref) => <Link innerRef={ref} {...props} />);\n\nconst ImportCard = forwardRef(\n (\n {\n className,\n classes: classesOverride,\n record,\n basePath,\n resource,\n source,\n component = Link,\n referenceRecord,\n version,\n dashboardModuleProps,\n ...props\n },\n ref,\n ) => {\n const classes = useStyles({ classes: classesOverride });\n\n if (!record) return null;\n const name = record.name;\n const description = record.description;\n const onClick = record.onClick;\n\n return (\n <Card className={classes.card}>\n <CardActionArea\n classes={{ root: classes.cardActionArea }}\n component={component}\n ref={ref}\n to={`${basePath}/${record.id}`}\n onClick={onClick}\n >\n <CardHeader\n avatar={\n <Avatar aria-label=\"dashboard\" variant=\"rounded\" classes={{ colorDefault: classes.avatar }}>\n <ImportIcon />\n </Avatar>\n }\n title={name}\n titleTypographyProps={{ variant: 'subtitle1' }}\n classes={{ root: classes.header, title: classes.title }}\n />\n {description && (\n <CardContent classes={{ root: classes.cardContent }}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {description}\n </Typography>\n </CardContent>\n )}\n </CardActionArea>\n </Card>\n );\n },\n);\n\nexport default ImportCard;\n","import React, { forwardRef } from 'react';\nimport { Link } from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\nimport Avatar from '@material-ui/core/Avatar';\nimport Typography from '@material-ui/core/Typography';\nimport ExportIcon from '@material-ui/icons/Publish';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\n\nconst useStyles = makeStyles((theme) => ({\n card: {},\n cardContent: {\n paddingTop: 0,\n },\n cardActionArea: {\n height: '100%',\n },\n header: {},\n title: {\n fontWeight: 500,\n lineHeight: 1.33,\n },\n avatar: {\n color: theme.palette.secondary.main,\n backgroundColor: fade(theme.palette.secondary.main, 0.12),\n },\n}));\n\nconst LinkRef = React.forwardRef((props, ref) => <Link innerRef={ref} {...props} />);\n\nconst ImportCard = forwardRef(\n (\n {\n className,\n classes: classesOverride,\n record,\n basePath,\n resource,\n source,\n referenceRecord,\n version,\n dashboardModuleProps,\n ...props\n },\n ref,\n ) => {\n const classes = useStyles({ classes: classesOverride });\n\n if (!record) return null;\n const name = record.name;\n const description = record.description;\n\n return (\n <Card className={classes.card}>\n <CardActionArea\n classes={{ root: classes.cardActionArea }}\n component={LinkRef}\n ref={ref}\n to={`${basePath}/${record.id}`}\n >\n <CardHeader\n avatar={\n <Avatar aria-label=\"dashboard\" variant=\"rounded\" classes={{ colorDefault: classes.avatar }}>\n <ExportIcon />\n </Avatar>\n }\n title={name}\n titleTypographyProps={{ variant: 'subtitle1' }}\n classes={{ root: classes.header, title: classes.title }}\n />\n {description && (\n <CardContent classes={{ root: classes.cardContent }}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {description}\n </Typography>\n </CardContent>\n )}\n </CardActionArea>\n </Card>\n );\n },\n);\n\nexport default ImportCard;\n","import gql from 'graphql-tag';\nimport apolloObjectsClient from '../apolloClient';\n\nexport const GET_REPORT_METADATA = gql`\n query reportMetaData($objectFilter: ConstructionObjectFilter) {\n listConstructionObjects(filter: $objectFilter) {\n pageInfo {\n totalItems\n }\n }\n listRegions {\n pageInfo {\n totalItems\n }\n }\n listDefects {\n pageInfo {\n totalItems\n }\n }\n listCounterparties {\n pageInfo {\n totalItems\n }\n }\n listTests {\n pageInfo {\n totalItems\n }\n }\n }\n`;\n\nexport const GET_REPORT_DATA = gql`\n query reportData(\n $objectsCount: Int!\n $locationsCount: Int!\n $defectsCount: Int!\n $counterpartiesCount: Int!\n $testsCount: Int!\n $objectFilter: ConstructionObjectFilter\n ) {\n listConstructionObjects(perPage: $objectsCount, filter: $objectFilter) {\n items {\n id\n region {\n id\n name\n unrestrictedName\n }\n type\n acts {\n id\n name\n }\n defects {\n id\n name\n }\n counterparty {\n id\n name\n regions {\n id\n name\n unrestrictedName\n }\n defaultMacroleaderId\n }\n eutpId\n name\n manualAddr\n inventoryNumber\n equipments {\n id\n name\n factoryNumber\n type\n }\n isArchived\n }\n }\n listRegions(perPage: $locationsCount, sort: { name: asc }) {\n items {\n id\n unrestrictedName\n }\n }\n listDefects(perPage: $defectsCount, sort: { name: asc }) {\n items {\n id\n name\n }\n }\n listCounterparties(perPage: $counterpartiesCount, sort: { name: asc }) {\n items {\n id\n name\n }\n }\n listTests(perPage: $testsCount, sort: { name: asc }) {\n items {\n id\n name\n description\n mark\n required\n constructionObjectsTypes\n }\n }\n }\n`;\n\nexport default ({ objectFilter }) => {\n return apolloObjectsClient\n .query({\n query: GET_REPORT_METADATA,\n variables: { objectFilter },\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n })\n .then(({ data: { listConstructionObjects, listRegions, listDefects, listCounterparties, listTests } }) => {\n return apolloObjectsClient.query({\n query: GET_REPORT_DATA,\n variables: {\n objectsCount: listConstructionObjects.pageInfo.totalItems,\n objectFilter,\n locationsCount: listRegions.pageInfo.totalItems,\n defectsCount: listDefects.pageInfo.totalItems,\n counterpartiesCount: listCounterparties.pageInfo.totalItems,\n testsCount: listTests.pageInfo.totalItems,\n },\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n });\n });\n};\n\nexport const GET_ALL_LOCATIONS = gql`\n query allRegions {\n listRegions(perPage: 100) {\n items {\n id\n unrestrictedName\n }\n }\n }\n`;\n\nexport const getAllLocations = () => {\n return apolloObjectsClient.query({\n query: GET_ALL_LOCATIONS,\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import gql from 'graphql-tag';\nimport apolloObjectsClient from './apolloObjectsClient';\n\nexport const GET_REPORT_METADATA = gql`\n query reportMetaData($objectFilter: ObjectFilter) {\n _allObjectsMeta(filter: $objectFilter) {\n count\n }\n _allLocationsMeta {\n count\n }\n _allDefectsMeta {\n count\n }\n }\n`;\n\nexport const GET_REPORT_DATA = gql`\n query reportData($objectsCount: Int!, $locationsCount: Int!, $defectsCount: Int!, $objectFilter: ObjectFilter) {\n allObjects(perPage: $objectsCount, filter: $objectFilter) {\n id\n region\n type\n acts {\n id\n name\n }\n defects {\n id\n name\n }\n distributor {\n id\n name\n regions {\n id\n name\n unrestrictedName\n }\n }\n eutpId\n name\n manualAddr\n inventoryNumber\n equipments {\n id\n name\n factoryNumber\n type\n }\n isArchived\n }\n allLocations(perPage: $locationsCount, sortField: \"name\", sortOrder: \"ASC\") {\n id\n unrestrictedName\n }\n allDefects(perPage: $defectsCount, sortField: \"name\", sortOrder: \"ASC\") {\n id\n name\n }\n }\n`;\n\nexport default ({ objectFilter }) => {\n return apolloObjectsClient\n .query({\n query: GET_REPORT_METADATA,\n fetchPolicy: 'network-only',\n variables: { objectFilter },\n onError: (error) => {\n alert(error);\n },\n })\n .then(({ data: { _allObjectsMeta, _allLocationsMeta, _allDefectsMeta } }) => {\n return apolloObjectsClient.query({\n query: GET_REPORT_DATA,\n variables: {\n objectsCount: _allObjectsMeta.count,\n objectFilter,\n locationsCount: _allLocationsMeta.count,\n defectsCount: _allDefectsMeta.count,\n },\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n });\n });\n};\n\nexport const GET_ALL_LOCATIONS = gql`\n query allLocations {\n allLocations(perPage: 100) {\n id\n unrestrictedName\n }\n }\n`;\n\nexport const getAllLocations = () => {\n return apolloObjectsClient.query({\n query: GET_ALL_LOCATIONS,\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import ExcelJS from 'exceljs';\nimport getReportData from '../../dataProvider/Objects/customQueries/getReportData';\nimport moment from 'moment';\nimport getReportDataWithFilter from '../../dataProvider/Objects/other/getReportDataWithFilter';\n\nexport default async () => {\n const {\n data: {\n listConstructionObjects: { items: allObjects },\n listRegions: { items: allRegions },\n },\n } = await getReportData({\n objectFilter: {\n isArchived: null,\n },\n });\n\n const workbook = new ExcelJS.Workbook();\n //workbook.description = '{parcer: \"ScheduledMaintenanceOrders\", version: \"0.0.1\"}';\n workbook.description = '{parser: \"toirScheduledMaintenanceOrders\", version: \"0.0.1\"}';\n workbook.created = new Date();\n workbook.modified = new Date();\n workbook.lastPrinted = new Date();\n\n const worksheet = workbook.addWorksheet('Лист 1');\n worksheet.views = [{ state: 'frozen', xSplit: 0, ySplit: 1 }];\n\n worksheet.autoFilter = {\n from: 'A1',\n to: 'M1',\n };\n\n worksheet.columns = [\n { header: 'п\\\\п', key: 'Index', width: 7 },\n { header: 'Идентификатор', key: 'id', width: 30 },\n { header: 'Инвентарный номер', key: 'inventoryNumber', width: 30 },\n { header: 'ЕИТП ID', key: 'eutpId', width: 10 },\n { header: 'Тип', key: 'type', width: 30 },\n { header: 'Заказчик', key: 'distributor', width: 40 },\n { header: 'Регион', key: 'region', width: 40 },\n { header: 'Название', key: 'name', width: 30 },\n { header: 'Адрес', key: 'address', width: 30 },\n { header: 'Архив', key: 'isArchived', width: 12 },\n ];\n\n const header = worksheet.getRow(1);\n header.font = { bold: true };\n header.eachCell((cell) => {\n cell.style = {\n fill: {\n type: 'pattern',\n pattern: 'solid',\n bgColor: { argb: 'FFE7E6E6' },\n fgColor: { argb: 'FFE7E6E6' },\n },\n border: {\n top: {\n style: 'thin',\n color: 'FFB2B2B2',\n },\n right: {\n style: 'thin',\n color: 'FFB2B2B2',\n },\n left: {\n style: 'thin',\n color: 'FFB2B2B2',\n },\n bottom: {\n style: 'thin',\n color: 'FFB2B2B2',\n },\n },\n };\n });\n\n const rows = [\n ['#', 'id', 'inventoryNumber', 'eutpId', 'type', 'counterparty', 'region', 'name', 'address', 'isArchived'],\n ...allObjects.map((object, index) => {\n return [\n index + 1,\n object.id,\n object.inventoryNumber,\n object.eutpId,\n object.type,\n object.counterparty && object.counterparty.name,\n object.region && object.region.unrestrictedName,\n object.name,\n object.manualAddr,\n object.isArchived ? 'true' : 'false',\n ];\n }),\n ];\n\n worksheet.addRows(rows, 'n');\n worksheet.getRow(2).eachCell((cell) => {\n cell.style = {\n fill: {\n type: 'pattern',\n pattern: 'solid',\n bgColor: { argb: 'FFE7E6E6' },\n fgColor: { argb: 'FFE7E6E6' },\n },\n border: {\n top: {\n style: 'thin',\n color: 'FFB2B2B2',\n },\n right: {\n style: 'thin',\n color: 'FFB2B2B2',\n },\n left: {\n style: 'thin',\n color: 'FFB2B2B2',\n },\n bottom: {\n style: 'thin',\n color: 'FFB2B2B2',\n },\n },\n };\n });\n\n return workbook.xlsx.writeBuffer().then(function (data) {\n const blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveOrOpenBlob(blob, 'Шаблон импорта объектов планового ТО.xlsx');\n } else {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.href = url;\n a.download = 'Шаблон импорта объектов планового ТО.xlsx';\n a.click();\n window.URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }\n });\n};\n","import React, { cloneElement, Children } from 'react';\nimport get from 'lodash/get';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\n\nconst parseGridValue = (theme, value) => {\n return typeof value === 'string' ? value : theme.spacing(value) + 'px';\n};\n\nconst parseGridSize = (theme, size) => {\n return Array.isArray(size)\n ? `minmax(${size.map((value) => parseGridValue(theme, value)).join(', ')})`\n : parseGridValue(theme, size);\n};\n\nconst generateGrid = (theme, breakpoint, props) => {\n const value = props[breakpoint];\n if (!value) return;\n const { count, size } = value;\n return {\n [theme.breakpoints.up('xs')]: {\n gridTemplateColumns: `repeat(${count}, ${parseGridSize(theme, size)})`,\n },\n };\n};\n\nconst useStyles = makeStyles((theme) => ({\n root: ({ spacing }) => ({\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(160px, 1fr))',\n gridGap: theme.spacing(spacing),\n }),\n 'grid-xs': (props) => generateGrid(theme, 'xs', props),\n 'grid-sm': (props) => generateGrid(theme, 'sm', props),\n 'grid-md': (props) => generateGrid(theme, 'md', props),\n 'grid-lg': (props) => generateGrid(theme, 'lg', props),\n 'grid-xl': (props) => generateGrid(theme, 'xl', props),\n}));\n\nconst CustomGrid = ({\n children,\n classes: classesOverride,\n className: classNameOverride,\n resource,\n basePath,\n version,\n source,\n lg = false,\n md = false,\n sm = false,\n xl = false,\n xs = false,\n spacing = 2,\n ...props\n}) => {\n const classes = useStyles({ classes: classesOverride, lg, md, sm, xl, xs, spacing });\n const className = classnames(\n classes.root,\n {\n [classes[`grid-xs`]]: xs !== false,\n [classes[`grid-sm`]]: sm !== false,\n [classes[`grid-md`]]: md !== false,\n [classes[`grid-lg`]]: lg !== false,\n [classes[`grid-xl`]]: xl !== false,\n },\n classNameOverride,\n );\n\n if (!children) return null;\n return (\n <div className={className}>\n {children && Array.isArray(children)\n ? children.map((child, index) => {\n return (\n React.isValidElement(child) &&\n cloneElement(Children.only(child), {\n key: index + resource,\n resource,\n basePath,\n version,\n ...props,\n })\n );\n })\n : Children.only(children) &&\n cloneElement(children, {\n resource,\n basePath,\n version,\n ...props,\n })}\n </div>\n );\n};\n\nexport default CustomGrid;\n","import ExcelJS from 'exceljs';\nimport getReportData from '../../dataProvider/Objects/customQueries/getReportData';\nimport moment from 'moment';\n\nexport default async () => {\n const {\n data: {\n listConstructionObjects: { items: allObjects },\n },\n } = await getReportData({});\n\n const workbook = new ExcelJS.Workbook();\n //workbook.description = '{parcer: \"ScheduledMaintenanceOrders\", version: \"0.0.1\"}';\n workbook.description = '{parser: \"toirScheduledMaintenanceOrders\", version: \"0.0.1\"}';\n workbook.created = new Date();\n workbook.modified = new Date();\n workbook.lastPrinted = new Date();\n\n const worksheet = workbook.addWorksheet('Лист 1');\n worksheet.views = [{ state: 'frozen', xSplit: 0, ySplit: 1 }];\n\n worksheet.autoFilter = {\n from: 'A1',\n to: 'M1',\n };\n\n worksheet.columns = [\n { header: 'п\\\\п', key: 'Index', width: 7 },\n { header: 'Идентификатор', key: 'id', width: 30 },\n { header: 'Инвентарный номер', key: 'inventoryNumber', width: 30 },\n { header: 'ЕИТП ID', key: 'eutpId', width: 10 },\n { header: 'Тип', key: 'type', width: 30 },\n { header: 'Заказчик', key: 'distributor', width: 40 },\n { header: 'Регион', key: 'region', width: 40 },\n { header: 'Название', key: 'name', width: 30 },\n { header: 'Адрес', key: 'address', width: 30 },\n { header: 'Год', key: 'year', width: 8 },\n { header: 'январь', key: 'january', width: 12 },\n { header: 'февраль', key: 'february', width: 12 },\n { header: 'март', key: 'march', width: 12 },\n { header: 'апрель', key: 'april', width: 12 },\n { header: 'май', key: 'may', width: 12 },\n { header: 'июнь', key: 'june', width: 12 },\n { header: 'июль', key: 'july', width: 12 },\n { header: 'август', key: 'august', width: 12 },\n { header: 'сентябрь', key: 'september', width: 12 },\n { header: 'октябрь', key: 'october', width: 12 },\n { header: 'ноябрь', key: 'november', width: 12 },\n { header: 'декабрь', key: 'december', width: 12 },\n ];\n\n const header = worksheet.getRow(1);\n header.font = { bold: true };\n header.eachCell((cell) => {\n cell.style = {\n fill: {\n type: 'pattern',\n pattern: 'solid',\n bgColor: { argb: 'FFE7E6E6' },\n fgColor: { argb: 'FFE7E6E6' },\n },\n border: {\n top: {\n style: 'thin',\n color: 'FFB2B2B2',\n },\n right: {\n style: 'thin',\n color: 'FFB2B2B2',\n },\n left: {\n style: 'thin',\n color: 'FFB2B2B2',\n },\n bottom: {\n style: 'thin',\n color: 'FFB2B2B2',\n },\n },\n };\n });\n\n const rows = [\n [\n '#',\n 'id',\n 'inventoryNumber',\n 'eutpId',\n 'type',\n 'counterparty',\n 'region',\n 'name',\n 'address',\n 'year',\n 'january',\n 'february',\n 'march',\n 'april',\n 'may',\n 'june',\n 'july',\n 'august',\n 'september',\n 'october',\n 'november',\n 'december',\n ],\n ...allObjects.map((object, index) => {\n return [\n index + 1,\n object.id,\n object.inventoryNumber,\n object.eutpId,\n object.type,\n object.counterparty && object.counterparty.name,\n object.region && object.region.unrestrictedName,\n object.name,\n object.manualAddr,\n moment().format('YYYY'),\n ];\n }),\n ];\n\n worksheet.addRows(rows, 'n');\n worksheet.getRow(2).eachCell((cell) => {\n cell.style = {\n fill: {\n type: 'pattern',\n pattern: 'solid',\n bgColor: { argb: 'FFE7E6E6' },\n fgColor: { argb: 'FFE7E6E6' },\n },\n border: {\n top: {\n style: 'thin',\n color: 'FFB2B2B2',\n },\n right: {\n style: 'thin',\n color: 'FFB2B2B2',\n },\n left: {\n style: 'thin',\n color: 'FFB2B2B2',\n },\n bottom: {\n style: 'thin',\n color: 'FFB2B2B2',\n },\n },\n };\n });\n\n return workbook.xlsx.writeBuffer().then(function (data) {\n const blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveOrOpenBlob(blob, 'Шаблон импорта заявок планового ТО.xlsx');\n } else {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.href = url;\n a.download = 'Шаблон импорта заявок планового ТО.xlsx';\n a.click();\n window.URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }\n });\n};\n","import React, { forwardRef, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\nimport Avatar from '@material-ui/core/Avatar';\nimport Typography from '@material-ui/core/Typography';\nimport ImportIcon from '@material-ui/icons/GetApp';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\nimport createImportTemplate from './createTaskImportTemplate';\nimport Snackbar from '@material-ui/core/Snackbar';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { useNotify } from 'react-admin';\n\nconst useStyles = makeStyles((theme) => ({\n card: {\n height: '100%',\n },\n cardContent: {\n paddingTop: 0,\n },\n cardActionArea: {\n height: '100%',\n },\n header: {},\n title: {\n fontWeight: 500,\n lineHeight: 1.33,\n },\n avatar: {\n color: theme.palette.secondary.main,\n backgroundColor: fade(theme.palette.secondary.main, 0.12),\n },\n}));\n\nconst LinkRef = React.forwardRef((props, ref) => <Link innerRef={ref} {...props} />);\n\nconst DownloadImportTemplateCard = forwardRef(\n (\n {\n className,\n classes: classesOverride,\n basePath,\n resource,\n source,\n component = Link,\n referenceRecord,\n version,\n dashboardModuleProps,\n ...props\n },\n ref,\n ) => {\n const [open, setOpen] = useState(false);\n // const notify = useNotify();\n const classes = useStyles({ classes: classesOverride });\n\n const record = {\n id: 'exportScheduledMaintenanceOrdersTemplate',\n name: 'Шаблон файла заявок на плановое ТО по объектам',\n description: 'Скачать шаблон файла Excel для быстрого создания заявок на плановое ТО по объектам',\n };\n\n const name = record.name;\n const description = record.description;\n const handleClick = async (event) => {\n event.preventDefault();\n setOpen(true);\n createImportTemplate().then(() => setOpen(false));\n // .catch(e => notify(e));\n };\n\n return (\n <>\n <Card className={classes.card}>\n <CardActionArea\n classes={{ root: classes.cardActionArea }}\n component={component}\n ref={ref}\n to={`${basePath}/${record.id}`}\n onClick={handleClick}\n >\n <CardHeader\n avatar={\n <Avatar aria-label=\"dashboard\" variant=\"rounded\" classes={{ colorDefault: classes.avatar }}>\n <ImportIcon />\n </Avatar>\n }\n title={name}\n titleTypographyProps={{ variant: 'subtitle1' }}\n classes={{ root: classes.header, title: classes.title }}\n />\n {description && (\n <CardContent classes={{ root: classes.cardContent }}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {description}\n </Typography>\n </CardContent>\n )}\n </CardActionArea>\n </Card>\n <Snackbar\n open={open}\n autoHideDuration={null}\n onClose={() => null}\n message=\"Создание Шаблон файла заявок на плановое ТО по объектам\"\n action={<CircularProgress style={{ height: 20, width: 20, color: 'white' }} />}\n />\n </>\n );\n },\n);\n\nexport default DownloadImportTemplateCard;\n","import React from 'react';\nimport Snackbar from '@material-ui/core/Snackbar';\n\nimport CircularProgress from '@material-ui/core/CircularProgress';\n\nexport default ({ open, message }) => {\n const handleClose = (event, reason) => null;\n\n return (\n <Snackbar\n open={open}\n autoHideDuration={null}\n onClose={handleClose}\n message={message || 'Создание отчета'}\n action={<CircularProgress style={{ height: 20, width: 20, color: 'white' }} />}\n style={{ marginBottom: 56 }}\n />\n );\n};\n","import gql from 'graphql-tag';\nimport apolloCoreClient from './apolloCoreClient';\n\nexport const GET_REPORT_METADATA = gql`\n query _allTasksMeta($filter: TaskFilter) {\n _allTasksMeta(filter: $filter) {\n count\n }\n }\n`;\n\nexport const GET_REPORT_DATA = gql`\n query allTasks($tasksCount: Int!, $sortField: String, $sortOrder: String, $filter: TaskFilter) {\n allTasks(perPage: $tasksCount, sortField: $sortField, sortOrder: $sortOrder, filter: $filter) {\n id\n region\n status\n type\n maintainableItem\n maintainableItemType\n deadlineAt\n planAt\n completedAt\n processedBy {\n name\n }\n executedBy {\n name\n }\n comments {\n createdAt\n body\n }\n number\n createdAt\n distributor\n description\n updatedAt\n verificationTests {\n id\n idC\n name\n description\n mark\n check\n required\n }\n verificationMark\n verificationCheck\n verificationComment\n verificatedAt\n }\n }\n`;\n\nexport default (args) => {\n return apolloCoreClient\n .query({\n query: GET_REPORT_METADATA,\n variables: { filter: args.filter },\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n })\n .then(({ data: { _allTasksMeta } }) => {\n return apolloCoreClient.query({\n query: GET_REPORT_DATA,\n variables: { tasksCount: _allTasksMeta.count, ...args },\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n });\n });\n};\n","import React, { forwardRef, useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\nimport Avatar from '@material-ui/core/Avatar';\nimport Typography from '@material-ui/core/Typography';\nimport AssignmentIcon from '@material-ui/icons/Assignment';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\nimport ExcelJS from 'exceljs';\nimport groupBy from 'lodash/groupBy';\nimport CreateReportSnackBar from './CreateReportSnackBar';\nimport getObjectReportData from '../../../dataProvider/Objects/customQueries/getReportData';\nimport getTaskReportData from '../../../dataProvider/Core/getReportData';\nimport moment from 'moment';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\nimport sum from 'lodash/sum';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport Grid from '@material-ui/core/Grid';\nimport TextField from '@material-ui/core/TextField';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\n\nconst useStyles = makeStyles((theme) => ({\n card: {},\n cardContent: {\n paddingTop: 0,\n height: '50%',\n },\n cardActionArea: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n },\n header: {\n height: '50%',\n display: 'flex',\n justifyContent: 'flex-start',\n width: '100%',\n boxSizing: 'border-box',\n },\n title: {\n fontWeight: 500,\n lineHeight: 1.33,\n },\n avatar: {\n color: theme.palette.secondary.main,\n backgroundColor: fade(theme.palette.secondary.main, 0.12),\n },\n}));\n\nconst taskTypesArray = ['SCHEDULEDMAINTENANCE', 'UNSCHEDULEDMAINTENANCE', 'VERIFICATION', 'EMERGENCYREPAIR'];\n\nconst renderDataRows = (worksheet, tasksGroupedByPeriod, allDistributors, allObjects, taskTypes = taskTypesArray) => {\n const ROWS = [];\n\n const startPeriod = Object.keys(tasksGroupedByPeriod).sort((a, b) => (moment(a).isBefore(b) ? -1 : 1))[0];\n\n Object.keys(tasksGroupedByPeriod)\n .sort((a, b) => (moment(a).isBefore(b) ? -1 : 1))\n .reduce(\n (prev, period, periodIndex) => {\n const tasksGroupedByDistributor = groupBy(tasksGroupedByPeriod[period], 'distributor');\n const periodRows = [];\n const month = moment(period).utcOffset('+0300').format('MMMM YYYY');\n allDistributors.forEach((distributor, index) => {\n const tasksDistributorGroupedByType = groupBy(tasksGroupedByDistributor[distributor.id], 'type');\n const dis = distributor.name;\n const row = [month, dis];\n\n if (Object.values(tasksDistributorGroupedByType).length) {\n const colors = [];\n taskTypes.forEach((type) => {\n // const number = index + 1;\n\n // const count = allObjects.filter(obj => obj.region === distributor.id).length\n const all = tasksDistributorGroupedByType[type] ? tasksDistributorGroupedByType[type].length : 0;\n const completed = tasksDistributorGroupedByType[type]\n ? tasksDistributorGroupedByType[type].filter((task) => task.status === 'COMPLETED').length\n : 0;\n const percent = Number(tasksDistributorGroupedByType[type] ? (completed / all).toFixed(2) : 0);\n colors.push(\n percent < 0.8\n ? percent < 0.65\n ? percent < 0.5\n ? tasksDistributorGroupedByType[type]\n ? 'FFFF0000'\n : 'FFFFFFFF'\n : 'FFE46C0A'\n : 'FFFFFF00'\n : 'FFFFFFFF',\n );\n\n const prevAll = get(prev, `${type}.${distributor.id}.all`, 0);\n const prevCompleted = get(prev, `${type}.${distributor.id}.completed`, 0);\n set(prev, `${type}.${distributor.id}.all`, prevAll + all);\n set(prev, `${type}.${distributor.id}.completed`, prevCompleted + completed);\n row.push(all, completed, percent);\n });\n const newRow = worksheet.addRow(row);\n newRow.eachCell((cell, colNumber) => {\n if (colNumber === 1) {\n cell.style = {\n alignment: { vertical: 'middle', horizontal: 'center' },\n border: {\n bottom: { color: { argb: '00000000' }, style: 'thin' },\n left: { color: { argb: '00000000' }, style: 'thin' },\n right: { color: { argb: '00000000' }, style: 'thin' },\n top: { color: { argb: '00000000' }, style: 'thin' },\n },\n };\n }\n if (colNumber === 2) {\n cell.style = {\n border: {\n bottom: { color: { argb: '00000000' }, style: 'thin' },\n left: { color: { argb: '00000000' }, style: 'thin' },\n right: { color: { argb: '00000000' }, style: 'thin' },\n top: { color: { argb: '00000000' }, style: 'thin' },\n },\n };\n }\n if (colNumber > 2) {\n if ((colNumber - 2) % 3) {\n cell.style = {\n fill: {\n type: 'pattern',\n pattern: 'solid',\n bgColor: { argb: colors[Math.floor((colNumber - 3) / 3)] },\n fgColor: { argb: colors[Math.floor((colNumber - 3) / 3)] },\n },\n border: {\n bottom: { color: { argb: '00000000' }, style: 'thin' },\n left: { color: { argb: '00000000' }, style: 'thin' },\n right: { color: { argb: '00000000' }, style: 'thin' },\n top: { color: { argb: '00000000' }, style: 'thin' },\n },\n };\n } else {\n cell.style = {\n fill: {\n type: 'pattern',\n pattern: 'solid',\n bgColor: { argb: colors[Math.floor((colNumber - 3) / 3)] },\n fgColor: { argb: colors[Math.floor((colNumber - 3) / 3)] },\n },\n numFmt: '0%',\n border: {\n bottom: { color: { argb: '00000000' }, style: 'thin' },\n left: { color: { argb: '00000000' }, style: 'thin' },\n right: { color: { argb: '00000000' }, style: 'thin' },\n top: { color: { argb: '00000000' }, style: 'thin' },\n },\n };\n }\n }\n });\n periodRows.push(newRow);\n\n // ROWS.push([period,\n // dis,\n // all,\n // completed,\n // persent,\n // ])\n }\n });\n try {\n worksheet.mergeCells(`A${prev.rows + 1}:A${prev.rows + periodRows.length}`);\n } catch (e) {\n console.log(e);\n }\n\n const totalRow = [`Итого ${month}`, `Итого ${month}`];\n const totalColors = [];\n taskTypes.forEach((type, index) => {\n const all = periodRows.reduce((sum, row) => sum + row.getCell(index * 3 + 3).value, 0);\n const completed = periodRows.reduce((sum, row) => sum + row.getCell(index * 3 + 4).value, 0);\n const percent = all ? Number((completed / all).toFixed(2)) : 0;\n totalColors.push(\n percent < 0.8\n ? percent < 0.65\n ? percent < 0.5\n ? all\n ? 'FFFF0000'\n : 'FFFFFFFF'\n : 'FFE46C0A'\n : 'FFFFFF00'\n : 'FFFFFFFF',\n );\n\n totalRow.push(all, completed, percent);\n });\n worksheet.addRow(totalRow).eachCell((cell, colNumber) => {\n if (colNumber > 2) {\n if ((colNumber - 2) % 3) {\n cell.style = {\n fill: {\n type: 'pattern',\n pattern: 'solid',\n bgColor: { argb: totalColors[Math.floor((colNumber - 3) / 3)] },\n fgColor: { argb: totalColors[Math.floor((colNumber - 3) / 3)] },\n },\n font: { bold: true },\n border: {\n bottom: { color: { argb: '00000000' }, style: 'thin' },\n left: { color: { argb: '00000000' }, style: 'thin' },\n right: { color: { argb: '00000000' }, style: 'thin' },\n top: { color: { argb: '00000000' }, style: 'thin' },\n },\n };\n } else {\n cell.style = {\n fill: {\n type: 'pattern',\n pattern: 'solid',\n bgColor: { argb: totalColors[Math.floor((colNumber - 3) / 3)] },\n fgColor: { argb: totalColors[Math.floor((colNumber - 3) / 3)] },\n },\n font: { bold: true },\n numFmt: '0%',\n border: {\n bottom: { color: { argb: '00000000' }, style: 'thin' },\n left: { color: { argb: '00000000' }, style: 'thin' },\n right: { color: { argb: '00000000' }, style: 'thin' },\n top: { color: { argb: '00000000' }, style: 'thin' },\n },\n };\n }\n } else {\n cell.style = {\n font: { bold: true },\n border: {\n bottom: { color: { argb: '00000000' }, style: 'thin' },\n left: { color: { argb: '00000000' }, style: 'thin' },\n right: { color: { argb: '00000000' }, style: 'thin' },\n top: { color: { argb: '00000000' }, style: 'thin' },\n },\n };\n }\n });\n worksheet.mergeCells(`A${prev.rows + periodRows.length + 1}:B${prev.rows + periodRows.length + 1}`);\n\n const tempRows = [];\n if (periodIndex) {\n allDistributors.forEach((distributor, index) => {\n const tasksDistributorGroupedByType = groupBy(tasksGroupedByDistributor[distributor.id], 'type');\n const dis = distributor.name;\n const row = [\n `Всего на дату создания отчета\\n ${moment(startPeriod).format('MMMM')}-${moment(period).format('MMMM')}`,\n dis,\n ];\n\n if (Object.values(tasksDistributorGroupedByType).length) {\n const colors = [];\n taskTypes.forEach((type) => {\n // const number = index + 1;\n\n // const count = allObjects.filter(obj => obj.region === distributor.id).length\n const all = get(prev, `${type}.${distributor.id}.all`, 0);\n const completed = get(prev, `${type}.${distributor.id}.completed`, 0);\n const percent = Number(all ? (completed / all).toFixed(2) : 0);\n colors.push(\n percent < 0.8\n ? percent < 0.65\n ? percent < 0.5\n ? all\n ? 'FFFF0000'\n : 'FFFFFFFF'\n : 'FFE46C0A'\n : 'FFFFFF00'\n : 'FFFFFFFF',\n );\n row.push(all, completed, percent);\n });\n const newRow = worksheet.addRow(row);\n newRow.eachCell((cell, colNumber) => {\n if (colNumber === 1) {\n cell.style = {\n font: { bold: true },\n alignment: { horizontal: 'center', vertical: 'middle' },\n border: {\n bottom: { color: { argb: '00000000' }, style: 'thin' },\n left: { color: { argb: '00000000' }, style: 'thin' },\n right: { color: { argb: '00000000' }, style: 'thin' },\n top: { color: { argb: '00000000' }, style: 'thin' },\n },\n };\n }\n if (colNumber === 2) {\n cell.style = {\n font: { bold: true },\n border: {\n bottom: { color: { argb: '00000000' }, style: 'thin' },\n left: { color: { argb: '00000000' }, style: 'thin' },\n right: { color: { argb: '00000000' }, style: 'thin' },\n top: { color: { argb: '00000000' }, style: 'thin' },\n },\n };\n }\n if (colNumber > 2) {\n if ((colNumber - 2) % 3) {\n cell.style = {\n fill: {\n type: 'pattern',\n pattern: 'solid',\n bgColor: { argb: colors[Math.floor((colNumber - 3) / 3)] },\n fgColor: { argb: colors[Math.floor((colNumber - 3) / 3)] },\n },\n font: { bold: true },\n border: {\n bottom: { color: { argb: '00000000' }, style: 'thin' },\n left: { color: { argb: '00000000' }, style: 'thin' },\n right: { color: { argb: '00000000' }, style: 'thin' },\n top: { color: { argb: '00000000' }, style: 'thin' },\n },\n };\n } else {\n cell.style = {\n fill: {\n type: 'pattern',\n pattern: 'solid',\n bgColor: { argb: colors[Math.floor((colNumber - 3) / 3)] },\n fgColor: { argb: colors[Math.floor((colNumber - 3) / 3)] },\n },\n font: { bold: true },\n numFmt: '0%',\n border: {\n bottom: { color: { argb: '00000000' }, style: 'thin' },\n left: { color: { argb: '00000000' }, style: 'thin' },\n right: { color: { argb: '00000000' }, style: 'thin' },\n top: { color: { argb: '00000000' }, style: 'thin' },\n },\n };\n }\n }\n });\n tempRows.push(newRow);\n }\n });\n try {\n worksheet.mergeCells(\n `A${prev.rows + periodRows.length + 2}:A${prev.rows + periodRows.length + 1 + tempRows.length}`,\n );\n } catch (e) {}\n }\n return { ...prev, rows: prev.rows + periodRows.length + 1 + tempRows.length };\n },\n { rows: 2 },\n );\n worksheet.addRows(ROWS);\n // allDistributors.forEach((location, index) => {\n // const tasksRegion = result[location.id]\n // if (tasksRegion) {\n //\n // const number = tasksRegion.number;\n // const region = tasksRegion.region;\n // const count = tasksRegion.count;\n // const all = sum(tasksRegion.all);\n // const completed = sum(tasksRegion.completed);\n // const persent = (((completed / all).toFixed(2)) * 100).toFixed(0).toString() + '%';\n //\n // ALL.push([\n // 'Всего',\n // '',\n // number,\n // region,\n // count,\n // all,\n // completed,\n // persent,\n // ])\n //\n //\n // }\n // });\n // worksheet.addRows(ALL);\n // ALL.forEach((row, index) => {\n // worksheet.mergeCells(`A${ROWS.length + index + 3}:B${ROWS.length + index + 3}`)\n // })\n //\n // Object.keys(result).forEach((key) => {\n // const value = result[key]\n // totalAll = totalAll + sum(value.all);\n // totalCompleted = totalCompleted + sum(value.completed);\n // });\n //\n // let totalIndex = (((totalCompleted / totalAll).toFixed(2)) * 100).toFixed(0).toString() + '%';\n //\n // TOTAL.push([\n // 'Итого',\n // '',\n // '',\n // '',\n // '',\n // totalAll,\n // totalCompleted,\n // totalIndex\n // ])\n // worksheet.addRows(TOTAL)\n // worksheet.mergeCells(`A${ALL.length + ROWS.length + 3}:E${ALL.length + ROWS.length + 3}`)\n // worksheet.getCell(`A${ALL.length + ROWS.length + 3}`).style = {font: {bold: true}}\n};\n\nconst ReportMaintenanceCard = forwardRef(\n (\n {\n className,\n classes: classesOverride,\n basePath,\n resource,\n source,\n referenceRecord,\n version,\n dashboardModuleProps,\n disabled,\n setDisabled,\n ...props\n },\n ref,\n ) => {\n const classes = useStyles({ classes: classesOverride });\n\n const [open, setOpen] = useState(false);\n const [openDialog, setOpenDialog] = React.useState(false);\n const [date, setDate] = useState({\n start: moment().startOf('year').format('YYYY-MM-DD'),\n end: moment().endOf('month').format('YYYY-MM-DD'),\n });\n\n const handleClickOpen = () => {\n setOpenDialog(true);\n };\n\n const handleClose = () => {\n setOpenDialog(false);\n };\n const name = 'Выполнение ТО';\n const description = 'Получите отчет о выполнении ТО в формате Excel';\n\n const handleClick = () => {\n setDisabled(true);\n setOpen(true);\n setOpenDialog(false);\n\n new Promise(async (resolve, reject) => {\n const {\n data: {\n listConstructionObjects: { items: allObjects },\n listCounterparties: { items: allDistributors },\n },\n } = await getObjectReportData({});\n const {\n data: { allTasks: allTasksS },\n } = await getTaskReportData({\n filter: {\n type: 'SCHEDULEDMAINTENANCE',\n deadlineAt_gte: moment(date.start).startOf('day').utcOffset('+0300'),\n deadlineAt_lte: moment(date.end).endOf('day').utcOffset('+0300').endOf('month'),\n },\n sortField: 'deadlineAt',\n sortOrder: 'ASC',\n });\n const {\n data: { allTasks: allTasksO },\n } = await getTaskReportData({\n filter: {\n type_not: 'SCHEDULEDMAINTENANCE',\n createdAt_gte: moment(date.start).utcOffset('+0300').startOf('day'),\n createdAt_lte: moment(date.end).utcOffset('+0300').endOf('day'),\n },\n sortField: 'deadlineAt',\n sortOrder: 'ASC',\n });\n\n const allTasks = [...allTasksO, ...allTasksS];\n const allTasksWithPeriod = allTasks.map((task) => ({\n ...task,\n period:\n task.type === 'SCHEDULEDMAINTENANCE'\n ? moment(task.deadlineAt).utcOffset('+0300').startOf('month')\n : moment(task.createdAt).utcOffset('+0300').startOf('month'),\n }));\n const groupedTasksByType = groupBy(allTasksWithPeriod, 'maintainableItemType');\n const groupedSTMByPeriod = groupBy(groupedTasksByType.STM, 'period');\n const groupedUUGByPeriod = groupBy(groupedTasksByType.UUG, 'period');\n const groupedRMCByPeriod = groupBy(groupedTasksByType.REMOTECONTROLLER, 'period');\n const groupedOTHERByPeriod = groupBy(groupedTasksByType.OTHER, 'period');\n const groupedObjectsByType = groupBy(allObjects, 'type');\n\n const workbook = new ExcelJS.Workbook();\n workbook.description = '{parcer: \"ScheduledMaintenanceOrders\", version: \"0.0.1\"}';\n workbook.created = new Date();\n workbook.modified = new Date();\n workbook.lastPrinted = new Date();\n\n const worksheetSTM = workbook.addWorksheet('СТМ');\n worksheetSTM.views = [{ state: 'frozen', xSplit: 0, ySplit: 2 }];\n\n worksheetSTM.columns = [\n { header: 'Период', key: 'period', width: 36 },\n { header: 'Контрагент', key: 'region', width: 50 },\n { header: 'Плановое то', key: 'sdm-plan', width: 10 },\n { header: 'Плановое то', key: 'sdm-fact', width: 10 },\n { header: 'Плановое то', key: 'sdm-index', width: 10 },\n { header: 'Внеплановое то', key: 'usdm-plan', width: 10 },\n { header: 'Внеплановое то', key: 'usdm-fact', width: 10 },\n { header: 'Внеплановое то', key: 'usdm-index', width: 10 },\n { header: 'Поверка', key: 'ver-plan', width: 10 },\n { header: 'Поверка', key: 'ver-fact', width: 10 },\n { header: 'Поверка', key: 'ver-index', width: 10 },\n { header: 'Ремонт', key: 'sdm-plan', width: 10 },\n { header: 'Ремонт', key: 'sdm-fact', width: 10 },\n { header: 'Ремонт', key: 'sdm-index', width: 10 },\n ];\n\n worksheetSTM.addRow([\n 'Период',\n 'Контрагент',\n 'План',\n 'Факт',\n 'Индекс',\n 'План',\n 'Факт',\n 'Индекс',\n 'План',\n 'Факт',\n 'Индекс',\n 'План',\n 'Факт',\n 'Индекс',\n ]);\n\n worksheetSTM.mergeCells('A1:A2');\n worksheetSTM.mergeCells('B1:B2');\n worksheetSTM.mergeCells('C1:E1');\n worksheetSTM.mergeCells('F1:H1');\n worksheetSTM.mergeCells('I1:K1');\n worksheetSTM.mergeCells('L1:N1');\n\n worksheetSTM.getRow(1).eachCell(\n (cell) =>\n (cell.style = {\n alignment: { horizontal: 'center', vertical: 'middle' },\n font: { bold: true },\n }),\n );\n worksheetSTM.getRow(2).eachCell(\n (cell) =>\n (cell.style = {\n alignment: { horizontal: 'center', vertical: 'middle' },\n font: { bold: true },\n }),\n );\n\n renderDataRows(worksheetSTM, groupedSTMByPeriod, allDistributors, groupedObjectsByType.STM);\n\n const worksheetUUG = workbook.addWorksheet('УУГ');\n worksheetUUG.views = [{ state: 'frozen', xSplit: 0, ySplit: 2 }];\n\n worksheetUUG.columns = [\n { header: 'Период', key: 'period', width: 36 },\n { header: 'Контрагент', key: 'region', width: 50 },\n { header: 'Плановое то', key: 'sdm-plan', width: 10 },\n { header: 'Плановое то', key: 'sdm-fact', width: 10 },\n { header: 'Плановое то', key: 'sdm-index', width: 10 },\n { header: 'Внеплановое то', key: 'usdm-plan', width: 10 },\n { header: 'Внеплановое то', key: 'usdm-fact', width: 10 },\n { header: 'Внеплановое то', key: 'usdm-index', width: 10 },\n { header: 'Поверка', key: 'ver-plan', width: 10 },\n { header: 'Поверка', key: 'ver-fact', width: 10 },\n { header: 'Поверка', key: 'ver-index', width: 10 },\n { header: 'Ремонт', key: 'sdm-plan', width: 10 },\n { header: 'Ремонт', key: 'sdm-fact', width: 10 },\n { header: 'Ремонт', key: 'sdm-index', width: 10 },\n ];\n\n worksheetUUG.addRow([\n 'Период',\n 'Контрагент',\n 'План',\n 'Факт',\n 'Индекс',\n 'План',\n 'Факт',\n 'Индекс',\n 'План',\n 'Факт',\n 'Индекс',\n 'План',\n 'Факт',\n 'Индекс',\n ]);\n\n worksheetUUG.mergeCells('A1:A2');\n worksheetUUG.mergeCells('B1:B2');\n worksheetUUG.mergeCells('C1:E1');\n worksheetUUG.mergeCells('F1:H1');\n worksheetUUG.mergeCells('I1:K1');\n worksheetUUG.mergeCells('L1:N1');\n\n worksheetUUG.getRow(1).eachCell(\n (cell) =>\n (cell.style = {\n alignment: { horizontal: 'center', vertical: 'middle' },\n font: { bold: true },\n }),\n );\n worksheetUUG.getRow(2).eachCell(\n (cell) =>\n (cell.style = {\n alignment: { horizontal: 'center', vertical: 'middle' },\n font: { bold: true },\n }),\n );\n\n renderDataRows(worksheetUUG, groupedUUGByPeriod, allDistributors, groupedObjectsByType.UUG);\n\n const worksheetRMC = workbook.addWorksheet('Пульт управления СТМ');\n worksheetRMC.views = [{ state: 'frozen', xSplit: 0, ySplit: 2 }];\n\n worksheetRMC.columns = [\n { header: 'Период', key: 'period', width: 36 },\n { header: 'Контрагент', key: 'region', width: 50 },\n { header: 'Внеплановое то', key: 'usdm-plan', width: 10 },\n { header: 'Внеплановое то', key: 'usdm-fact', width: 10 },\n { header: 'Внеплановое то', key: 'usdm-index', width: 10 },\n ];\n\n worksheetRMC.addRow(['Период', 'Контрагент', 'План', 'Факт', 'Индекс']);\n\n worksheetRMC.mergeCells('A1:A2');\n worksheetRMC.mergeCells('B1:B2');\n worksheetRMC.mergeCells('C1:E1');\n\n worksheetRMC.getRow(1).eachCell(\n (cell) =>\n (cell.style = {\n alignment: { horizontal: 'center', vertical: 'middle' },\n font: { bold: true },\n }),\n );\n worksheetRMC.getRow(2).eachCell(\n (cell) =>\n (cell.style = {\n alignment: { horizontal: 'center', vertical: 'middle' },\n font: { bold: true },\n }),\n );\n\n renderDataRows(worksheetRMC, groupedRMCByPeriod, allDistributors, groupedObjectsByType.REMOTECONTROLLER, [\n 'UNSCHEDULEDMAINTENANCE',\n ]);\n\n const worksheetOTHER = workbook.addWorksheet('Другой');\n worksheetOTHER.views = [{ state: 'frozen', xSplit: 0, ySplit: 2 }];\n\n worksheetOTHER.columns = [\n { header: 'Период', key: 'period', width: 36 },\n { header: 'Контрагент', key: 'region', width: 50 },\n { header: 'Внеплановое то', key: 'usdm-plan', width: 10 },\n { header: 'Внеплановое то', key: 'usdm-fact', width: 10 },\n { header: 'Внеплановое то', key: 'usdm-index', width: 10 },\n { header: 'Поверка', key: 'ver-plan', width: 10 },\n { header: 'Поверка', key: 'ver-fact', width: 10 },\n { header: 'Поверка', key: 'ver-index', width: 10 },\n { header: 'Ремонт', key: 'sdm-plan', width: 10 },\n { header: 'Ремонт', key: 'sdm-fact', width: 10 },\n { header: 'Ремонт', key: 'sdm-index', width: 10 },\n ];\n\n worksheetOTHER.addRow([\n 'Период',\n 'Контрагент',\n 'План',\n 'Факт',\n 'Индекс',\n 'План',\n 'Факт',\n 'Индекс',\n 'План',\n 'Факт',\n 'Индекс',\n ]);\n\n worksheetOTHER.mergeCells('A1:A2');\n worksheetOTHER.mergeCells('B1:B2');\n worksheetOTHER.mergeCells('C1:E1');\n worksheetOTHER.mergeCells('F1:H1');\n worksheetOTHER.mergeCells('I1:K1');\n\n worksheetOTHER.getRow(1).eachCell(\n (cell) =>\n (cell.style = {\n alignment: { horizontal: 'center', vertical: 'middle' },\n font: { bold: true },\n }),\n );\n worksheetOTHER.getRow(2).eachCell(\n (cell) =>\n (cell.style = {\n alignment: { horizontal: 'center', vertical: 'middle' },\n font: { bold: true },\n }),\n );\n\n renderDataRows(worksheetOTHER, groupedOTHERByPeriod, allDistributors, groupedObjectsByType.OTHER, [\n 'UNSCHEDULEDMAINTENANCE',\n 'VERIFICATION',\n 'EMERGENCYREPAIR',\n ]);\n\n return workbook.xlsx\n .writeBuffer()\n .then((data) => {\n const blob = new Blob([data], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n });\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveOrOpenBlob(blob, 'Отчет выполнения ТО.xlsx');\n } else {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.href = url;\n a.download = 'Отчет выполнения ТО.xlsx';\n a.click();\n window.URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }\n })\n .then(() => {\n resolve();\n })\n .catch((e) => {\n reject(e);\n });\n })\n .then(() => {\n setDisabled(false);\n setOpen(false);\n })\n .catch((e) => {\n console.log(e);\n setDisabled(false);\n setOpen(false);\n });\n };\n\n return (\n <>\n <Card className={classes.card}>\n <CardActionArea\n classes={{ root: classes.cardActionArea }}\n onAnimationEnd={handleClickOpen}\n disabled={disabled}\n // component={Button}\n // ref={ref}\n // to={`${basePath}/${record.id}`}\n >\n <CardHeader\n avatar={\n <Avatar aria-label=\"dashboard\" variant=\"rounded\" classes={{ colorDefault: classes.avatar }}>\n <AssignmentIcon />\n </Avatar>\n }\n title={name}\n titleTypographyProps={{ variant: 'subtitle1' }}\n classes={{ root: classes.header, title: classes.title }}\n />\n {description && (\n <CardContent classes={{ root: classes.cardContent }}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {description}\n </Typography>\n </CardContent>\n )}\n </CardActionArea>\n </Card>\n <Dialog open={openDialog} onClose={handleClose} aria-labelledby=\"form-dialog-title\" maxWidth=\"lg\">\n <DialogTitle id=\"form-dialog-title\">Результаты ТО АСКУГ</DialogTitle>\n <DialogContent>\n <DialogContentText>Выберите период времени, по которому будет построен отчёт.</DialogContentText>\n <Grid\n container\n alignContent=\"center\"\n wrap=\"nowrap\"\n justify=\"space-between\"\n spacing={4}\n style={{ marginBottom: 16, marginTop: 16 }}\n >\n <Grid item>\n <TextField\n label=\"Дата с\"\n type=\"date\"\n variant={'filled'}\n value={date.start}\n onChange={(event) => {\n setDate({ ...date, start: event.target.value });\n }}\n />\n </Grid>\n <Grid item>\n <TextField\n label=\"Дата по\"\n type=\"date\"\n variant={'filled'}\n value={date.end}\n onChange={(event) => setDate({ ...date, end: event.target.value })}\n />\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} color=\"primary\">\n Закрыть\n </Button>\n <Button onClick={handleClick} color=\"primary\">\n Создать отчет\n </Button>\n </DialogActions>\n </Dialog>\n <CreateReportSnackBar message=\"Создание отчета Выполнение ТО\" open={open} />\n </>\n );\n },\n);\n\nexport default ReportMaintenanceCard;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { useTranslate } from 'ra-core';\n\nconst useStyles = makeStyles(\n (theme) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n marginTop: 60,\n },\n icon: {\n width: '9em',\n height: '9em',\n },\n message: {\n textAlign: 'center',\n fontFamily: 'Roboto, sans-serif',\n opacity: 0.5,\n margin: '0 1em',\n },\n }),\n { name: 'ReportLoading' },\n);\n\nconst Loading = ({ classes: classesOverride, className, loadingPrimary, loadingSecondary }) => {\n const classes = useStyles({ classes: classesOverride });\n const translate = useTranslate();\n return (\n <div className={`${classes.container} ${className}`}>\n <div className={classes.message}>\n <CircularProgress className={classes.icon} color=\"primary\" />\n {loadingPrimary && <h3>{translate(loadingPrimary)}</h3>}\n {loadingSecondary && <div>{translate(loadingSecondary)}</div>}\n </div>\n </div>\n );\n};\n\nLoading.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n loadingPrimary: PropTypes.string,\n loadingSecondary: PropTypes.string,\n};\n\nLoading.defaultProps = {\n loadingPrimary: 'ra.page.loading',\n loadingSecondary: 'ra.message.loading',\n};\n\nexport default Loading;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport { useTranslate } from 'ra-core';\n\nconst useStyles = makeStyles(\n (theme) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n marginTop: 60,\n },\n icon: {\n width: 40,\n height: 40,\n },\n message: {\n textAlign: 'center',\n fontFamily: 'Roboto, sans-serif',\n opacity: 0.5,\n margin: '0 1em',\n },\n }),\n { name: 'ReportLoading' },\n);\n\nconst Error = ({ classes: classesOverride, className, errorPrimary, error }) => {\n const classes = useStyles({ classes: classesOverride });\n const translate = useTranslate();\n return (\n <div className={`${classes.container} ${className}`}>\n <div className={classes.message}>\n <WarningIcon className={classes.icon} />\n {errorPrimary && <h3>{translate(errorPrimary)}</h3>}\n {error.message && <div>{error.message}</div>}\n </div>\n </div>\n );\n};\n\nError.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n errorPrimary: PropTypes.string,\n};\n\nError.defaultProps = {\n errorPrimary: 'ra.page.error',\n};\n\nexport default Error;\n","import React, { useState, useEffect } from 'react';\nimport groupBy from 'lodash/groupBy';\nimport 'moment/locale/ru';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Loading from './Loading';\nimport Error from './Error';\nimport getObjectReportData from '../../dataProvider/Objects/customQueries/getReportData';\nimport { useSelector, shallowEqual } from 'react-redux';\n\n// https://github.com/linways/table-to-excel\n\nconst useStyles = makeStyles((tdeme) => ({\n root: {\n '& table': {\n width: '100%',\n marginBottom: '3em',\n },\n '& table:last-child': {\n marginBottom: 0,\n },\n '& table, th, td': {\n border: '1px solid #bdbdbd',\n borderCollapse: 'collapse',\n },\n '& thead td': {\n padding: 2,\n textAlign: 'center',\n fontWeight: 500,\n },\n },\n caption: {\n textAlign: 'start',\n marginBottom: 8,\n },\n}));\n\nconst renderDataRows = (allLocations, allObjects) => {\n const ROWS = [];\n const ALL = [];\n const TOTAL = [];\n\n const accessedObjects = [];\n allLocations.forEach((location, index) => {\n const objects = allObjects ? allObjects.filter((object) => location.id === object.region) : [];\n accessedObjects.push(...objects);\n const objectsWithAudit = objects.filter((object) => object.acts && object.acts.length);\n ROWS.push(\n <tr key={`${location} ${index}`}>\n <td data-t=\"n\">{index + 1}</td>\n <td>{location.unrestrictedName}</td>\n <td data-t=\"n\">{objects.length}</td>\n <td data-t=\"n\">{objectsWithAudit.length}</td>\n <td data-t=\"n\" data-num-fmt=\"0%\">\n {objects.length ? (objectsWithAudit.length / objects.length).toFixed(2) : 0}\n </td>\n </tr>,\n );\n });\n const allObjectsWithAudit = accessedObjects\n ? accessedObjects.filter((object) => object.acts && object.acts.length)\n : [];\n TOTAL.push(\n <tr>\n <td colSpan=\"2\" data-f-bold=\"true\">\n Итого:\n </td>\n <td data-t=\"n\" data-f-bold=\"true\">\n {accessedObjects.length}\n </td>\n <td data-t=\"n\" data-f-bold=\"true\">\n {allObjectsWithAudit.length}\n </td>\n <td data-t=\"n\" data-num-fmt=\"0%\" data-f-bold=\"true\">\n {(accessedObjects && accessedObjects.length ? allObjectsWithAudit.length / accessedObjects.length : 0).toFixed(\n 2,\n )}\n </td>\n </tr>,\n );\n\n return [...ROWS, ...ALL, ...TOTAL];\n};\n\nconst ReportAudit = ({ tableRef, loading, setLoading, ...props }) => {\n const classes = useStyles();\n const [error, setError] = useState();\n const [data, setData] = useState();\n const user = useSelector((state) => state.user, shallowEqual);\n\n useEffect(() => {\n const fetchData = async () => {\n setLoading(true);\n\n Promise.all([getObjectReportData()])\n .then((responses) => {\n setLoading(false);\n setData({\n allObjects: responses[0].data.allObjects,\n allLocations: responses[0].data.allLocations,\n });\n })\n .catch((error) => {\n setError(error);\n });\n };\n\n fetchData();\n\n return () => {\n setData(undefined);\n setError(undefined);\n };\n }, [setLoading]);\n\n if (error) return <Error error={error} />;\n if (loading) return <Loading />;\n if (!data) return null;\n\n const { allObjects, allLocations } = data;\n const groupedByTypeObjects = groupBy(allObjects, 'type');\n const STMRows = renderDataRows(\n allLocations.filter((region) => user.regions.includes(region.id)),\n groupedByTypeObjects.STM,\n );\n const UUGRows = renderDataRows(\n allLocations.filter((region) => user.regions.includes(region.id)),\n groupedByTypeObjects.UUG,\n );\n\n return (\n <div className={classes.root} ref={tableRef} data-bookname=\"Отчет актам аудита.xlsx\">\n <table data-sheetname=\"СТМ\" data-cols-width=\"12,37,30,10,10\">\n <caption className={classes.caption} data-exclude=\"true\">\n Cистемы телеметрии\n </caption>\n <thead>\n <tr>\n <td rowSpan=\"2\" data-a-h=\"center\" data-a-v=\"middle\">\n №\n </td>\n <td rowSpan=\"2\" data-a-h=\"center\" data-a-v=\"middle\">\n Регион\n </td>\n <td rowSpan=\"2\" data-a-h=\"center\" data-a-v=\"middle\">\n Количество объектов\n </td>\n <td colSpan=\"2\" data-a-h=\"center\" data-a-v=\"middle\">\n Аудит выполнен\n </td>\n </tr>\n <tr>\n <td data-a-h=\"center\" data-a-v=\"middle\">\n Количество\n </td>\n <td data-a-h=\"center\" data-a-v=\"middle\">\n Индекс\n </td>\n </tr>\n </thead>\n <tbody>{STMRows}</tbody>\n </table>\n\n <table data-sheetname=\"УУГ\" data-cols-width=\"12,37,30,10,10\">\n <caption className={classes.caption} data-exclude=\"true\">\n Узлы учета газа\n </caption>\n <thead>\n <tr>\n <td rowSpan=\"2\" data-a-h=\"center\" data-a-v=\"middle\">\n №\n </td>\n <td rowSpan=\"2\" data-a-h=\"center\" data-a-v=\"middle\">\n Регион\n </td>\n <td rowSpan=\"2\" data-a-h=\"center\" data-a-v=\"middle\">\n Количество объектов\n </td>\n <td colSpan=\"2\" data-a-h=\"center\" data-a-v=\"middle\">\n Аудит выполнен\n </td>\n </tr>\n <tr>\n <td data-a-h=\"center\" data-a-v=\"middle\">\n Количество\n </td>\n <td data-a-h=\"center\" data-a-v=\"middle\">\n Индекс\n </td>\n </tr>\n </thead>\n <tbody>{UUGRows}</tbody>\n </table>\n </div>\n );\n};\n\nexport default ReportAudit;\n","import React, { forwardRef, useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\nimport Avatar from '@material-ui/core/Avatar';\nimport Typography from '@material-ui/core/Typography';\nimport AssignmentIcon from '@material-ui/icons/Assignment';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\nimport ExcelJS from 'exceljs';\nimport groupBy from 'lodash/groupBy';\nimport CreateReportSnackBar from './CreateReportSnackBar';\nimport getObjectReportData from '../../../dataProvider/Objects/customQueries/getReportData';\nimport { useSelector, shallowEqual } from 'react-redux';\n\nconst useStyles = makeStyles((theme) => ({\n card: {},\n cardContent: {\n paddingTop: 0,\n height: '50%',\n },\n cardActionArea: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n },\n header: {\n height: '50%',\n display: 'flex',\n justifyContent: 'flex-start',\n width: '100%',\n boxSizing: 'border-box',\n },\n title: {\n fontWeight: 500,\n lineHeight: 1.33,\n },\n avatar: {\n color: theme.palette.secondary.main,\n backgroundColor: fade(theme.palette.secondary.main, 0.12),\n },\n}));\n\nconst renderDataRows = (worksheet, allLocations, allObjects) => {\n worksheet.views = [{ state: 'frozen', xSplit: 0, ySplit: 2 }];\n\n worksheet.columns = [\n { header: '№', key: 'number', width: 8 },\n { header: 'Регион', key: 'region', width: 50 },\n { header: 'Количество объектов', key: 'objectCount', width: 25 },\n { header: 'Аудит выполнен', key: 'count', width: 18 },\n { header: 'Аудит выполнен', key: 'index', width: 18 },\n ];\n\n worksheet.addRow(['№', 'Регион', 'Количество объектов', 'Количество', 'Индекс']);\n\n worksheet.mergeCells('D1:E1');\n worksheet.mergeCells('A1:A2');\n worksheet.mergeCells('B1:B2');\n worksheet.mergeCells('C1:C2');\n\n worksheet.getRow(1).eachCell(\n (cell) =>\n (cell.style = {\n alignment: { horizontal: 'center', vertical: 'middle' },\n font: { bold: true },\n }),\n );\n worksheet.getRow(2).eachCell(\n (cell) =>\n (cell.style = {\n alignment: { horizontal: 'center', vertical: 'middle' },\n font: { bold: true },\n }),\n );\n\n const ROWS = [];\n const TOTAL = [];\n const accessedObjects = [];\n\n allLocations.forEach((location, index) => {\n const objects = allObjects ? allObjects.filter((object) => location.id === object.region.id) : [];\n accessedObjects.push(...objects);\n const objectsWithAudit = objects.filter((object) => object.acts && object.acts.length);\n const percent = objects.length\n ? ((objectsWithAudit.length / objects.length).toFixed(2) * 100).toFixed(0).toString() + '%'\n : '0%';\n ROWS.push([index + 1, location.unrestrictedName, objects.length, objectsWithAudit.length, percent]);\n });\n worksheet.addRows(ROWS);\n\n const allObjectsWithAudit = accessedObjects\n ? accessedObjects.filter((object) => object.acts && object.acts.length)\n : [];\n\n TOTAL.push([\n 'Итого:',\n '',\n accessedObjects.length,\n allObjectsWithAudit.length,\n ((accessedObjects.length ? allObjectsWithAudit.length / accessedObjects.length : 0).toFixed(2) * 100)\n .toFixed(0)\n .toString() + '%',\n ]);\n\n worksheet.addRows(TOTAL);\n worksheet.mergeCells(`A${ROWS.length + 3}:B${ROWS.length + 3}`);\n worksheet.getCell(`A${ROWS.length + 3}`).style = { font: { bold: true } };\n};\n\nconst ReportAuditCard = forwardRef(\n (\n {\n className,\n classes: classesOverride,\n basePath,\n resource,\n source,\n referenceRecord,\n version,\n dashboardModuleProps,\n disabled,\n setDisabled,\n ...props\n },\n ref,\n ) => {\n const classes = useStyles({ classes: classesOverride });\n\n const [open, setOpen] = useState(false);\n const user = useSelector((state) => state.user, shallowEqual);\n const name = 'Акты аудита';\n const description = 'Получите отчет о проведении аудита объектов в формате Excel';\n\n const handleClick = () => {\n setDisabled(true);\n setOpen(true);\n\n new Promise(async (resolve, reject) => {\n const {\n data: {\n listConstructionObjects: { items: allObjects },\n listRegions: { items: allLocations },\n },\n } = await getObjectReportData({});\n\n const groupedByTypeObjects = groupBy(allObjects, 'type');\n\n const workbook = new ExcelJS.Workbook();\n workbook.description = '{parcer: \"ScheduledMaintenanceOrders\", version: \"0.0.1\"}';\n workbook.created = new Date();\n workbook.modified = new Date();\n workbook.lastPrinted = new Date();\n\n const worksheetSTM = workbook.addWorksheet('СТМ');\n const worksheetUUG = workbook.addWorksheet('УУГ');\n\n renderDataRows(\n worksheetSTM,\n allLocations.filter((region) => user.regions.includes(region.id)),\n groupedByTypeObjects.STM,\n );\n renderDataRows(\n worksheetUUG,\n allLocations.filter((region) => user.regions.includes(region.id)),\n groupedByTypeObjects.UUG,\n );\n\n return workbook.xlsx\n .writeBuffer()\n .then((data) => {\n const blob = new Blob([data], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n });\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveOrOpenBlob(blob, 'Отчет по актам аудита.xlsx');\n } else {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.href = url;\n a.download = 'Отчет по актам аудита.xlsx';\n a.click();\n window.URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }\n })\n .then(() => {\n resolve();\n })\n .catch((e) => {\n reject(e);\n });\n })\n .then(() => {\n setDisabled(false);\n setOpen(false);\n })\n .catch((e) => {\n console.log(e);\n setDisabled(false);\n setOpen(false);\n });\n };\n\n return (\n <>\n <Card className={classes.card}>\n <CardActionArea\n classes={{ root: classes.cardActionArea }}\n onAnimationEnd={handleClick}\n disabled={disabled}\n // component={Button}\n // ref={ref}\n // to={`${basePath}/${record.id}`}\n >\n <CardHeader\n avatar={\n <Avatar aria-label=\"dashboard\" variant=\"rounded\" classes={{ colorDefault: classes.avatar }}>\n <AssignmentIcon />\n </Avatar>\n }\n title={name}\n titleTypographyProps={{ variant: 'subtitle1' }}\n classes={{ root: classes.header, title: classes.title }}\n />\n {description && (\n <CardContent classes={{ root: classes.cardContent }}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {description}\n </Typography>\n </CardContent>\n )}\n </CardActionArea>\n </Card>\n <CreateReportSnackBar message=\"Создание отчета Акты аудита\" open={open} />\n </>\n );\n },\n);\n\nexport default ReportAuditCard;\n","import { useEffect, useState } from 'react';\nimport gql from 'graphql-tag';\nimport apolloObjectsClient from './other/apolloObjectsClient';\n\nexport const GET_REPORT_METADATA = gql`\n query reportMetaData($regions: [RegionWhereUniqueInput!]) {\n listConstructionObjects(filter: { regions: $regions }) {\n pageInfo {\n totalItems\n }\n }\n }\n`;\n\nexport const GET_REPORT_DATA = gql`\n query reportData($regions: [RegionWhereUniqueInput!], $objectsCount: Int!) {\n listConstructionObjects(perPage: $objectsCount, filter: { regions: $regions }) {\n items {\n id\n region {\n id\n name\n unrestrictedName\n }\n type\n acts {\n id\n name\n }\n defects {\n id\n name\n }\n counterparty {\n id\n name\n regions {\n id\n name\n unrestrictedName\n }\n defaultMacroleaderId\n }\n eutpId\n name\n manualAddr\n inventoryNumber\n equipments {\n id\n name\n factoryNumber\n type\n }\n isArchived\n }\n }\n }\n`;\n\nexport const gerReportRegistryData = (regions) => {\n return apolloObjectsClient\n .query({\n query: GET_REPORT_METADATA,\n variables: { regions },\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n })\n .then(({ data: { listConstructionObjects } }) => {\n return apolloObjectsClient.query({\n query: GET_REPORT_DATA,\n variables: { regions, objectsCount: listConstructionObjects.pageInfo.totalItems },\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n });\n })\n .catch((error) => {\n console.log(error);\n return error;\n });\n};\n","import React, { forwardRef, useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\nimport Avatar from '@material-ui/core/Avatar';\nimport Typography from '@material-ui/core/Typography';\nimport AssignmentIcon from '@material-ui/icons/Assignment';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\nimport ExcelJS from 'exceljs';\nimport groupBy from 'lodash/groupBy';\nimport CreateReportSnackBar from './CreateReportSnackBar';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport { gerReportRegistryData } from '../../../dataProvider/Objects/useReportRegistryData';\nimport { useTranslate } from 'react-admin';\n\nconst useStyles = makeStyles((theme) => ({\n card: {},\n cardContent: {\n paddingTop: 0,\n height: '50%',\n },\n cardActionArea: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n },\n header: {\n height: '50%',\n display: 'flex',\n justifyContent: 'flex-start',\n width: '100%',\n boxSizing: 'border-box',\n },\n title: {\n fontWeight: 500,\n lineHeight: 1.33,\n },\n avatar: {\n color: theme.palette.secondary.main,\n backgroundColor: fade(theme.palette.secondary.main, 0.12),\n },\n}));\n\nconst renderDataRows = (worksheet, allObjects, translate) => {\n if (!allObjects) return;\n\n worksheet.views = [{ state: 'frozen', xSplit: 0, ySplit: 1 }];\n\n const typeObject = {\n STM: 'СТМ',\n UUG: 'ИК УУГ',\n };\n\n worksheet.columns = [\n { header: 'СТМ/ ИК УУГ', key: 'type', width: 16 },\n { header: 'Компания', key: 'distributor', width: 64 },\n { header: 'Наименование объекта, адрес', key: 'name/addr', width: 64 },\n { header: 'Инвентарный номер', key: 'inventoryNumber', width: 16 },\n { header: 'ID ЕИТП', key: 'eitp', width: 16 },\n { header: 'ID ИМУС', key: 'imus', width: 16 },\n { header: 'ID ПУ СТМ', key: 'pustm', width: 16 },\n { header: 'Акт инвентаризации (да/нет)', key: 'act', width: 16 },\n { header: 'Технологическая схема (да/нет/не требуется)', key: 'scheme', width: 16 },\n { header: 'Фото (да/нет)', key: 'photo', width: 16 },\n { header: 'Проектная документация (да/нет)', key: 'doc', width: 16 },\n { header: 'Неисправности оборудования (да/нет)', key: 'isDefect', width: 16 },\n { header: 'Замечания при первичной проверке', key: 'defects', width: 64 },\n { header: 'Перечень оборудования по договору', key: 'equipmentDoc', width: 64 },\n { header: 'Перечень оборудования', key: 'equipment', width: 64 },\n ];\n\n worksheet.getRow(1).eachCell((cell, colNumber) => {\n cell.style = {\n alignment: { horizontal: 'left', vertical: 'top' },\n font: { bold: true },\n };\n });\n worksheet.getRow(1).height = 42;\n\n allObjects.forEach((object, index) => {\n const type = typeObject[object.type];\n const distributor = object.counterparty && object.counterparty.name;\n const name = `${object.name}${object.manualAddr ? `\\n${object.manualAddr}` : ''}`;\n const inventoryNumber = object.inventoryNumber;\n const eutpId = object.eutpId;\n const imusId = '';\n const scadaId = '';\n const isActs = object.acts && object.acts.length > 0 ? 'Да' : 'Нет';\n const isTechnologySchema = '';\n const isFiles = object.files && object.files.length > 0 ? 'Да' : 'Нет';\n const isProjectDocumentation = '';\n const isDefects = object.defects && object.defects.length > 0 ? 'Да' : 'Нет';\n const defects =\n object.defects && object.defects.length > 0\n ? object.defects.reduce((result, defect, index) => {\n return result + `${index !== 0 ? '\\n' : ''}${defect.name}`;\n }, '')\n : '';\n const equipmentsD = '';\n const equipments =\n object.equipments && object.equipments.length > 0\n ? object.equipments.reduce((result, equipment, index) => {\n return (\n result +\n `${index !== 0 ? '\\n' : ''}${translate(`resources.ConstructionObject.enums.type.${equipment.type}`)} ${\n equipment.name ? equipment.name : ''\n } ${equipment.factoryNumber ? equipment.factoryNumber : ''}`\n );\n }, '')\n : '';\n\n const row = worksheet.addRow([\n type,\n distributor,\n name,\n inventoryNumber,\n eutpId,\n imusId,\n scadaId,\n isActs,\n isTechnologySchema,\n isFiles,\n isProjectDocumentation,\n isDefects,\n defects,\n equipmentsD,\n equipments,\n ]);\n row.height =\n Math.max(object.defects ? object.defects.length : 0, object.equipments ? object.equipments.length : 0) * 18 || 18;\n row.eachCell((cell, colNumber) => {\n if ([2, 3, 14, 16].includes(colNumber)) {\n cell.style = {\n alignment: {\n vertical: 'top',\n wrapText: true,\n },\n };\n } else {\n cell.style = {\n alignment: {\n vertical: 'top',\n },\n };\n }\n });\n });\n};\n\nconst ReportAuditCard = forwardRef(\n (\n {\n className,\n classes: classesOverride,\n basePath,\n resource,\n source,\n referenceRecord,\n version,\n dashboardModuleProps,\n disabled,\n setDisabled,\n ...props\n },\n ref,\n ) => {\n const classes = useStyles({ classes: classesOverride });\n const translate = useTranslate();\n const [open, setOpen] = useState(false);\n const user = useSelector((state) => state.user, shallowEqual);\n const regions = user ? user.regions : [];\n\n const name = 'Реестр объектов АКСИТЕХ';\n const description = 'Получите pеестр объектов АКСИТЕХ в формате Excel';\n\n const handleClick = () => {\n setDisabled(true);\n setOpen(true);\n\n new Promise(async (resolve, reject) => {\n const {\n data: {\n listConstructionObjects: { items: objects },\n },\n } = await gerReportRegistryData(regions.map((id) => ({ id })));\n\n const groupedByRegion = groupBy(objects, 'region.unrestrictedName');\n\n const workbook = new ExcelJS.Workbook();\n workbook.created = new Date();\n workbook.modified = new Date();\n workbook.lastPrinted = new Date();\n\n Object.keys(groupedByRegion).forEach((regionName, index) => {\n const regionObjects = groupedByRegion[regionName];\n const worksheet = workbook.addWorksheet(regionName);\n renderDataRows(worksheet, regionObjects, translate);\n });\n\n return workbook.xlsx\n .writeBuffer()\n .then((data) => {\n const blob = new Blob([data], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n });\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveOrOpenBlob(blob, 'Реестр объектов АКСИТЕХ.xlsx');\n } else {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.href = url;\n a.download = 'Реестр объектов АКСИТЕХ.xlsx';\n a.click();\n window.URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }\n })\n .then(() => {\n resolve();\n })\n .catch((e) => {\n reject(e);\n });\n })\n .then(() => {\n setDisabled(false);\n setOpen(false);\n })\n .catch((e) => {\n console.log(e);\n setDisabled(false);\n setOpen(false);\n });\n };\n\n return (\n <>\n <Card className={classes.card}>\n <CardActionArea\n classes={{ root: classes.cardActionArea }}\n onAnimationEnd={handleClick}\n disabled={disabled}\n // component={Button}\n // ref={ref}\n // to={`${basePath}/${record.id}`}\n >\n <CardHeader\n avatar={\n <Avatar aria-label=\"dashboard\" variant=\"rounded\" classes={{ colorDefault: classes.avatar }}>\n <AssignmentIcon />\n </Avatar>\n }\n title={name}\n titleTypographyProps={{ variant: 'subtitle1' }}\n classes={{ root: classes.header, title: classes.title }}\n />\n {description && (\n <CardContent classes={{ root: classes.cardContent }}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {description}\n </Typography>\n </CardContent>\n )}\n </CardActionArea>\n </Card>\n <CreateReportSnackBar message=\"Создание реестра объектов АКСИТЕХ\" open={open} />\n </>\n );\n },\n);\n\nexport default ReportAuditCard;\n","import React, { forwardRef, useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\nimport Avatar from '@material-ui/core/Avatar';\nimport Typography from '@material-ui/core/Typography';\nimport AssignmentIcon from '@material-ui/icons/Assignment';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\nimport ExcelJS from 'exceljs';\nimport groupBy from 'lodash/groupBy';\nimport CreateReportSnackBar from './CreateReportSnackBar';\nimport getObjectReportData from '../../../dataProvider/Objects/customQueries/getReportData';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport moment from 'moment';\nimport Grid from '@material-ui/core/Grid';\nimport getTaskReportData from '../../../dataProvider/Core/getReportData';\nimport { useTranslate } from 'react-admin';\n\nconst useStyles = makeStyles((theme) => ({\n card: {},\n cardContent: {\n paddingTop: 0,\n height: '50%',\n },\n cardActionArea: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n },\n header: {\n height: '50%',\n display: 'flex',\n justifyContent: 'flex-start',\n width: '100%',\n boxSizing: 'border-box',\n },\n title: {\n fontWeight: 500,\n lineHeight: 1.33,\n },\n avatar: {\n color: theme.palette.secondary.main,\n backgroundColor: fade(theme.palette.secondary.main, 0.12),\n },\n}));\n\nconst STM_SOLVES = [\n 'проверена сохранность пломб и клейм;',\n 'проверено наличие и прочность крепления блоков;',\n 'проверено отсутствие вмятин и видимых механических повреждений, а также пыли и грязи на корпусах блоков;',\n 'произведен внешний осмотр изоляции проводов, гофры, кабель-каналов;',\n 'проверено состояние и качество заземления;',\n 'проверена прочность крепления прибора и заземляющего болтового соединения;',\n 'проверена надежность и целостность крепления интерфейсных и силовых кабелей;',\n 'проверено состояние аналоговых шлейфов;',\n 'проверено состояние дискретных входов;',\n 'проверены соединительные разъемы;',\n 'проверена бесперебойность работы блока питания;',\n 'произведена проверка аккумуляторных батарей;',\n 'проверена герметичность уплотнений;',\n 'проверены условия эксплуатации оборудования;',\n 'проверка СТМ путем опроса с мобильного ЦСД или с ДП;',\n 'Проверка надежности крепления антенны.',\n];\n\nconst UUG_SOLVES = [\n 'проверена сохранность пломб и клейм;',\n 'проверено наличие и прочность крепления блоков;',\n 'проверено отсутствие вмятин и видимых механических повреждений, а также пыли и грязи на корпусах блоков;',\n 'произведен внешний осмотр изоляции проводов, гофры, кабель-каналов;',\n 'проверено состояние и качество заземления;',\n 'проверена прочность крепления прибора и заземляющего болтового соединения;',\n 'проверена надежность и целостность крепления интерфейсных и силовых кабелей;',\n 'проверено состояние аналоговых шлейфов;',\n 'проверено состояние дискретных входов;',\n 'проверены соединительные разъемы;',\n 'проверена бесперебойность работы блока питания;',\n 'произведено обслуживание аккумуляторных батарей;',\n 'проверена индикация измеряемых параметров;',\n 'проверено соответствие текущей даты и времени;',\n 'проверено ведение архивов;',\n 'проверено время наработки ИК;',\n 'проверено наличие внештатных ситуаций;',\n 'проверена целостность и степень загрязнения датчиков;',\n 'проверена герметичность уплотнений;',\n 'проверено напряжение питания вычислителя;',\n 'проверены контролируемые параметры ВР;',\n 'проверено наличие смазки в счетчике;',\n 'проверены условия эксплуатации оборудования;',\n 'произведена проверка герметичности запорной арматуры путем обмыливания(течеискателем);',\n 'проверка СТМ путем опроса с мобильного ЦСД или с ДП;',\n 'Проверка надежности крепления антенны.',\n];\n\nconst renderDataRows = (worksheet, allObjects, allTasks, translate) => {\n worksheet.views = [{ state: 'frozen', xSplit: 0, ySplit: 2 }];\n\n worksheet.columns = [\n { header: '1', key: '1', width: 12 },\n { header: '2', key: '1', width: 25 },\n { header: '3', key: '1', width: 25 },\n { header: '4', key: '1', width: 25 },\n { header: '5', key: '1', width: 25 },\n { header: '6', key: '1', width: 25 },\n { header: '7', key: '1', width: 25 },\n { header: '8', key: '1', width: 25 },\n { header: '9', key: '1', width: 25 },\n { header: '10', key: '1', width: 50 },\n { header: '11', key: '1', width: 25 },\n { header: '12', key: '1', width: 25 },\n { header: '13', key: '1', width: 25 },\n { header: '14', key: '1', width: 25 },\n { header: '15', key: '1', width: 25 },\n ];\n\n worksheet.addRow([\n '№ п/п',\n 'Региональная компания\\nпо реализации газа',\n 'Наименование объекта',\n 'Тип КП СТМ',\n 'Вид услуг по ТО',\n 'Вид заявки на ТО',\n 'Статус оборудования',\n 'Дата заявки на ТО/\\nДата планового ТО',\n 'Фактическая дата поступления\\nпереходящей заявки на ТО',\n 'Меры принятые для устранения\\nнеисправности оборудования',\n 'Дата устранения\\nнеисправности',\n 'Срок выполнения работ по ТО \\nв отчетном месяце\\n(стб.12 = стб. 11 - стб. 8)',\n 'Срок выполнения работ по ТО \\nс учетом прошлых периодов\\n(стб.13 = стб. 11 - стб. 9)',\n 'Работоспособность, %',\n 'Примечание',\n ]).height = 80;\n\n worksheet.getRow(1).eachCell(\n (cell) =>\n (cell.style = {\n alignment: { horizontal: 'center', vertical: 'middle' },\n font: { bold: true },\n }),\n );\n worksheet.getRow(2).eachCell(\n (cell) =>\n (cell.style = {\n alignment: { horizontal: 'center', vertical: 'middle' },\n font: { bold: true },\n }),\n );\n\n const ROWS = [];\n const TOTAL = [];\n const objectMap = {};\n allObjects.forEach((object) => (objectMap[object.id] = object));\n\n allTasks.forEach((task, index) => {\n const object = task.maintainableItem && objectMap[task.maintainableItem];\n const equipment =\n object &&\n object.equipments &&\n object.equipments.find((eq) => eq.type === (object.type === 'STM' ? 'CONTROLLER' : 'METER'));\n const completedAt = task.completedAt ? moment(task.completedAt).format('DD.MM.YYYY') : '';\n const defects =\n object && object.defects && object.defects.length > 0\n ? object.defects.reduce((result, defect, index) => {\n return result + `${index !== 0 ? '<br>' : ''}${defect.name}`;\n }, '')\n : '';\n const solve = task.maintainableItemType === 'STM' ? STM_SOLVES.join('\\n') : UUG_SOLVES.join('\\n');\n const diff = 0;\n const row = worksheet.addRow([\n index + 1,\n object ? (object.distributor ? object.distributor.name : '') : '',\n object ? object.name : '',\n equipment ? equipment.name : '',\n task.type ? translate('resources.Task.enums.type.' + task.type) : '',\n 'Новая',\n defects,\n completedAt,\n '',\n solve,\n completedAt,\n diff || '',\n '',\n ((diff ? ((moment().daysInMonth() - diff) / moment().daysInMonth()).toFixed(2) : 1) * 100).toFixed(0) + '%',\n translate('resources.Task.enums.status.' + task.status) + '; ' + (task.comment || ''),\n ]);\n row.height = task.maintainableItemType === 'STM' ? 340 : 530;\n\n row.eachCell((cell, colNumber) => {\n switch (colNumber) {\n case 7:\n cell.style = {\n alignment: {\n vertical: 'middle',\n wrapText: true,\n },\n };\n break;\n case 10:\n cell.style = {\n alignment: {\n vertical: 'top',\n wrapText: true,\n },\n };\n break;\n\n default:\n cell.style = {\n alignment: {\n vertical: 'middle',\n horizontal: 'center',\n wrapText: true,\n },\n };\n }\n });\n });\n};\n\nconst ReportSummaryMaintenanceCard = forwardRef(\n (\n {\n className,\n classes: classesOverride,\n basePath,\n resource,\n source,\n referenceRecord,\n version,\n dashboardModuleProps,\n disabled,\n setDisabled,\n ...props\n },\n ref,\n ) => {\n const classes = useStyles({ classes: classesOverride });\n const translate = useTranslate();\n const [openDialog, setOpenDialog] = React.useState(false);\n const [date, setDate] = useState({\n start: moment().startOf('month').format('YYYY-MM-DD'),\n end: moment().endOf('month').format('YYYY-MM-DD'),\n });\n\n const handleClickOpen = () => {\n setOpenDialog(true);\n };\n\n const handleClose = () => {\n setOpenDialog(false);\n };\n const [open, setOpen] = useState(false);\n const user = useSelector((state) => state.user, shallowEqual);\n const name = 'Результаты ТО АСКУГ';\n const description = 'Получите сводный отчет о результатах технического обслуживания АСКУГ в формате Excel';\n\n const handleClick = () => {\n setDisabled(true);\n setOpen(true);\n setOpenDialog(false);\n\n new Promise(async (resolve, reject) => {\n const {\n data: {\n listConstructionObjects: { items: allObjects },\n },\n } = await getObjectReportData({});\n const {\n data: { allTasks },\n } = await getTaskReportData({\n filter: {\n type_in: ['SCHEDULEDMAINTENANCE', 'UNSCHEDULEDMAINTENANCE'],\n completedAt_gte: date.start,\n completedAt_lte: moment(date.end).endOf('day').toISOString(),\n },\n });\n\n const groupedByTypeObjects = groupBy(allObjects, 'type');\n const groupedByTypeTasks = groupBy(allTasks, 'maintainableItemType');\n\n const workbook = new ExcelJS.Workbook();\n workbook.description = '{parcer: \"ScheduledMaintenanceOrders\", version: \"0.0.1\"}';\n workbook.created = new Date();\n workbook.modified = new Date();\n workbook.lastPrinted = new Date();\n\n const worksheetSTM = workbook.addWorksheet('СТМ');\n const worksheetUUG = workbook.addWorksheet('УУГ');\n\n renderDataRows(worksheetSTM, groupedByTypeObjects.STM, groupedByTypeTasks.STM || [], translate);\n renderDataRows(worksheetUUG, groupedByTypeObjects.UUG, groupedByTypeTasks.UUG || [], translate);\n\n return workbook.xlsx\n .writeBuffer()\n .then((data) => {\n const blob = new Blob([data], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n });\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveOrOpenBlob(blob, 'Отчет по результатам ТО АСКУГ.xlsx');\n } else {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.href = url;\n a.download = 'Отчет по результатам ТО АСКУГ.xlsx';\n a.click();\n window.URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }\n })\n .then(() => {\n resolve();\n })\n .catch((e) => {\n reject(e);\n });\n })\n .then(() => {\n setDisabled(false);\n setOpen(false);\n })\n .catch((e) => {\n console.log(e);\n setDisabled(false);\n setOpen(false);\n });\n };\n\n return (\n <>\n <Card className={classes.card}>\n <CardActionArea\n classes={{ root: classes.cardActionArea }}\n onAnimationEnd={handleClickOpen}\n disabled={disabled}\n // component={Button}\n // ref={ref}\n // to={`${basePath}/${record.id}`}\n >\n <CardHeader\n avatar={\n <Avatar aria-label=\"dashboard\" variant=\"rounded\" classes={{ colorDefault: classes.avatar }}>\n <AssignmentIcon />\n </Avatar>\n }\n title={name}\n titleTypographyProps={{ variant: 'subtitle1' }}\n classes={{ root: classes.header, title: classes.title }}\n />\n {description && (\n <CardContent classes={{ root: classes.cardContent }}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {description}\n </Typography>\n </CardContent>\n )}\n </CardActionArea>\n </Card>\n <Dialog open={openDialog} onClose={handleClose} aria-labelledby=\"form-dialog-title\">\n <DialogTitle id=\"form-dialog-title\">Результаты ТО АСКУГ</DialogTitle>\n <DialogContent>\n <DialogContentText>Выберите период времени, по которому будет построен отчёт.</DialogContentText>\n <Grid\n container\n alignContent=\"center\"\n justify=\"space-between\"\n spacing={4}\n style={{ marginBottom: 16, marginTop: 16 }}\n >\n <Grid item>\n <TextField\n label=\"Дата с\"\n type=\"date\"\n variant={'filled'}\n value={date.start}\n onChange={(event) => setDate({ ...date, start: event.target.value })}\n />\n </Grid>\n <Grid item>\n <TextField\n label=\"Дата по\"\n type=\"date\"\n variant={'filled'}\n value={date.end}\n onChange={(event) => setDate({ ...date, end: event.target.value })}\n />\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} color=\"primary\">\n Закрыть\n </Button>\n <Button onClick={handleClick} color=\"primary\">\n Создать отчет\n </Button>\n </DialogActions>\n </Dialog>\n <CreateReportSnackBar message=\"Создание отчета Результаты ТО АСКУГ\" open={open} />\n </>\n );\n },\n);\n\nexport default ReportSummaryMaintenanceCard;\n","import React, { forwardRef, useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\nimport Avatar from '@material-ui/core/Avatar';\nimport Typography from '@material-ui/core/Typography';\nimport AssignmentIcon from '@material-ui/icons/Assignment';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\nimport ExcelJS from 'exceljs';\nimport groupBy from 'lodash/groupBy';\nimport CreateReportSnackBar from './CreateReportSnackBar';\nimport getObjectReportData from '../../../dataProvider/Objects/customQueries/getReportData';\nimport { useSelector, shallowEqual } from 'react-redux';\n\nconst useStyles = makeStyles((theme) => ({\n card: {},\n cardContent: {\n paddingTop: 0,\n height: '50%',\n },\n cardActionArea: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n },\n header: {\n height: '50%',\n display: 'flex',\n justifyContent: 'flex-start',\n width: '100%',\n boxSizing: 'border-box',\n },\n title: {\n fontWeight: 500,\n lineHeight: 1.33,\n },\n avatar: {\n color: theme.palette.secondary.main,\n backgroundColor: fade(theme.palette.secondary.main, 0.12),\n },\n}));\n\nconst renderDataRows = (worksheet, allLocations, allObjects, defects) => {\n worksheet.views = [{ state: 'frozen', xSplit: 0, ySplit: 2 }];\n\n const columns = [\n { header: '№', key: 'number', width: 12 },\n { header: 'Регион', key: 'region', width: 35 },\n { header: 'Объекты с проведенным аудитом', key: 'objectCount', width: 35 },\n { header: 'Объекты без неисправностей', key: 'withoutDefectCount', width: 18 },\n { header: 'Объекты без неисправностей', key: 'withoutDefectIndex', width: 18 },\n { header: 'Объекты с неисправностями', key: 'withDefectCount', width: 18 },\n { header: 'Объекты с неисправностями', key: 'withDefectIndex', width: 18 },\n ];\n\n const secondRow = ['№', 'Регион', 'Объекты с проведенным аудитом', 'Количество', 'Индекс', 'Количество', 'Индекс'];\n defects.forEach((defect) => {\n columns.push(\n { header: `Объекты с неисправностью: ${defect.name}`, key: `with${defect.name}Count`, width: 18 },\n { header: `Объекты с неисправностью: ${defect.name}`, key: `with${defect.name}Index`, width: 18 },\n );\n secondRow.push('Количество', 'Индекс');\n });\n\n worksheet.columns = columns;\n\n worksheet.addRow(secondRow);\n\n worksheet.mergeCells('A1:A2');\n worksheet.mergeCells('B1:B2');\n worksheet.mergeCells('C1:C2');\n const cellsToMerge = [];\n worksheet.getRow(1).eachCell((cell, colNumber) => {\n if (colNumber > 3) {\n cellsToMerge.push(cell._address);\n }\n });\n\n worksheet.eachColumnKey((col, index) => {\n if (index !== 'number' && index !== 'region') col.style = { alignment: { horizontal: 'right' } };\n });\n\n worksheet.getRow(1).eachCell(\n (cell) =>\n (cell.style = {\n alignment: { horizontal: 'center', vertical: 'middle' },\n font: { bold: true },\n }),\n );\n worksheet.getRow(2).eachCell(\n (cell) =>\n (cell.style = {\n alignment: { horizontal: 'center', vertical: 'middle' },\n font: { bold: true },\n }),\n );\n\n const ROWS = [];\n const TOTAL = [];\n const accessedObjects = [];\n allLocations.forEach((location, index) => {\n const objects = allObjects ? allObjects.filter((object) => location.id === object.region.id) : [];\n accessedObjects.push(...objects);\n const objectsWithoutDefects = objects.filter((object) => !object.defects || !object.defects.length);\n const objectsWithDefects = objects.filter((object) => object.defects && object.defects.length);\n const row = [\n index + 1,\n location.unrestrictedName,\n objects.length,\n objectsWithoutDefects.length,\n objects.length ? (objectsWithoutDefects.length / objects.length).toFixed(2) : 0,\n objectsWithDefects.length,\n objects.length ? (objectsWithDefects.length / objects.length).toFixed(2) : 0,\n ];\n\n defects.forEach((defect) => {\n const objectsWithDefect = objectsWithDefects.filter((object) => object.defects.some((d) => d.id === defect.id));\n const index = objects.length ? (objectsWithDefect.length / objects.length).toFixed(2) : 0;\n const bg = index <= 0.05 ? '#ffffff' : index <= 0.1 ? '#f3d96d' : index <= 0.15 ? '#fda566' : '#e35b5b';\n const fill = index <= 0.05 ? 'FFFFFFFF' : index <= 0.1 ? 'FFF3D96D' : index <= 0.15 ? 'FFFDA566' : 'FFE35B5B';\n row.push(objectsWithDefect.length, objects.length ? (objectsWithDefect.length / objects.length).toFixed(2) : 0.0);\n });\n const wRow = worksheet.addRow(row);\n wRow.eachCell((cell, colNumber) => {\n if (colNumber > 3) {\n if (colNumber % 2 === 1) {\n const { value } = cell;\n const fill = value <= 0.05 ? 'FFFFFFFF' : value <= 0.1 ? 'FFF3D96D' : value <= 0.15 ? 'FFFDA566' : 'FFE35B5B';\n cell.value = (value * 100).toFixed(0) + '%';\n if (colNumber > 7) {\n cell.style = {\n fill: {\n type: 'pattern',\n pattern: 'solid',\n bgColor: { argb: fill },\n fgColor: { argb: fill },\n },\n border: {\n bottom: { color: { argb: 'FFB2B2B2' }, style: 'thin' },\n left: { color: { argb: 'FFB2B2B2' }, style: 'thin' },\n right: { color: { argb: 'FFB2B2B2' }, style: 'thin' },\n top: { color: { argb: 'FFB2B2B2' }, style: 'thin' },\n },\n alignment: { horizontal: 'right' },\n };\n } else {\n cell.style = {\n alignment: { horizontal: 'right' },\n };\n }\n }\n }\n });\n ROWS.push(row);\n });\n const allObjectsWithoutDefects = accessedObjects\n ? accessedObjects.filter((object) => !object.defects || !object.defects.length)\n : [];\n const allObjectsWithDefects = accessedObjects\n ? accessedObjects.filter((object) => object.defects && object.defects.length)\n : [];\n const totalRow = [\n 'Итого:',\n '',\n accessedObjects.length,\n allObjectsWithoutDefects.length,\n (accessedObjects && accessedObjects.length ? allObjectsWithoutDefects.length / accessedObjects.length : 0).toFixed(\n 2,\n ),\n allObjectsWithDefects.length,\n (accessedObjects && accessedObjects.length ? allObjectsWithDefects.length / accessedObjects.length : 0).toFixed(2),\n ];\n\n defects.forEach((defect) => {\n const objectsWithDefect = allObjectsWithDefects.filter((object) => object.defects.some((d) => d.id === defect.id));\n const index = accessedObjects.length ? (objectsWithDefect.length / accessedObjects.length).toFixed(2) : 0;\n const bg = index <= 0.05 ? '#ffffff' : index <= 0.1 ? '#f3d96d' : index <= 0.15 ? '#fda566' : '#e35b5b';\n const fill = index <= 0.05 ? 'FFFFFFFF' : index <= 0.1 ? 'FFF3D96D' : index <= 0.15 ? 'FFFDA566' : 'FFE35B5B';\n totalRow.push(\n objectsWithDefect.length,\n accessedObjects.length ? (objectsWithDefect.length / accessedObjects.length).toFixed(2) : 0,\n );\n });\n const lastRow = worksheet.addRow(totalRow);\n\n lastRow.eachCell((cell, colNumber) => {\n if (colNumber > 3) {\n if (colNumber % 2 === 1) {\n const { value } = cell;\n const fill = value <= 0.05 ? 'FFFFFFFF' : value <= 0.1 ? 'FFF3D96D' : value <= 0.15 ? 'FFFDA566' : 'FFE35B5B';\n cell.value = (value * 100).toFixed(0) + '%';\n if (colNumber > 7) {\n cell.style = {\n fill: {\n type: 'pattern',\n pattern: 'solid',\n bgColor: { argb: fill },\n fgColor: { argb: fill },\n },\n border: {\n bottom: { color: { argb: 'FFB2B2B2' }, style: 'thin' },\n left: { color: { argb: 'FFB2B2B2' }, style: 'thin' },\n right: { color: { argb: 'FFB2B2B2' }, style: 'thin' },\n top: { color: { argb: 'FFB2B2B2' }, style: 'thin' },\n },\n alignment: { horizontal: 'right' },\n };\n } else {\n cell.style = {\n alignment: { horizontal: 'right' },\n };\n }\n }\n } else {\n if (colNumber !== 3) {\n cellsToMerge.push(cell._address);\n }\n }\n });\n\n cellsToMerge.reduce((previousCell, currentCell) => {\n if (previousCell) {\n worksheet.mergeCells(`${previousCell}:${currentCell}`);\n } else return currentCell;\n });\n // worksheet.addRows(TOTAL)\n // worksheet.mergeCells(`A${ROWS.length + 3}:B${ROWS.length + 3}`)\n // worksheet.getCell(`A${ROWS.length + 3}`).style = {font: {bold: true}}\n};\n\nconst ReportAuditCard = forwardRef(\n (\n {\n className,\n classes: classesOverride,\n basePath,\n resource,\n source,\n referenceRecord,\n version,\n dashboardModuleProps,\n disabled,\n setDisabled,\n ...props\n },\n ref,\n ) => {\n const classes = useStyles({ classes: classesOverride });\n\n const [open, setOpen] = useState(false);\n const user = useSelector((state) => state.user, shallowEqual);\n const name = 'Неисправности на объектах';\n const description = 'Получите отчет о выявленных неисправностях объектов в формате Excel';\n\n const handleClick = () => {\n setDisabled(true);\n setOpen(true);\n\n new Promise(async (resolve, reject) => {\n const {\n data: {\n listConstructionObjects: { items: allObjects },\n listRegions: { items: allLocations },\n listDefects: { items: allDefects },\n },\n } = await getObjectReportData({});\n\n const workbook = new ExcelJS.Workbook();\n workbook.description = '{parcer: \"ScheduledMaintenanceOrders\", version: \"0.0.1\"}';\n workbook.created = new Date();\n workbook.modified = new Date();\n workbook.lastPrinted = new Date();\n\n const worksheetSTM = workbook.addWorksheet('СТМ');\n const worksheetUUG = workbook.addWorksheet('УУГ');\n const locations = allLocations.filter((region) => user.regions.includes(region.id));\n const defects = allDefects.filter((defect) =>\n allObjects\n .filter((object) => locations.some((loc) => loc.id === object.region.id))\n .some((object) => (object.defects ? object.defects.some((d) => d.id === defect.id) : false)),\n );\n const groupedByTypeObjects = groupBy(allObjects, 'type');\n\n renderDataRows(worksheetSTM, locations, groupedByTypeObjects.STM, defects);\n renderDataRows(worksheetUUG, locations, groupedByTypeObjects.UUG, defects);\n\n return workbook.xlsx\n .writeBuffer()\n .then((data) => {\n const blob = new Blob([data], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n });\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveOrOpenBlob(blob, 'Отчет по неисправностям.xlsx');\n } else {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.href = url;\n a.download = 'Отчет по неисправностям.xlsx';\n a.click();\n window.URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }\n })\n .then(() => {\n resolve();\n })\n .catch((e) => {\n reject(e);\n });\n })\n .then(() => {\n setDisabled(false);\n setOpen(false);\n })\n .catch((e) => {\n console.log(e);\n setDisabled(false);\n setOpen(false);\n });\n };\n\n return (\n <>\n <Card className={classes.card}>\n <CardActionArea\n classes={{ root: classes.cardActionArea }}\n onAnimationEnd={handleClick}\n disabled={disabled}\n // component={Button}\n // ref={ref}\n // to={`${basePath}/${record.id}`}\n >\n <CardHeader\n avatar={\n <Avatar aria-label=\"dashboard\" variant=\"rounded\" classes={{ colorDefault: classes.avatar }}>\n <AssignmentIcon />\n </Avatar>\n }\n title={name}\n titleTypographyProps={{ variant: 'subtitle1' }}\n classes={{ root: classes.header, title: classes.title }}\n />\n {description && (\n <CardContent classes={{ root: classes.cardContent }}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {description}\n </Typography>\n </CardContent>\n )}\n </CardActionArea>\n </Card>\n <CreateReportSnackBar message=\"Создание отчета Неисправности на объектах\" open={open} />\n </>\n );\n },\n);\n\nexport default ReportAuditCard;\n","import React, { forwardRef, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\nimport Avatar from '@material-ui/core/Avatar';\nimport Typography from '@material-ui/core/Typography';\nimport ImportIcon from '@material-ui/icons/GetApp';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\nimport createImportTemplate from './createObjectImportTemplate';\nimport Snackbar from '@material-ui/core/Snackbar';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { useNotify } from 'react-admin';\n\nconst useStyles = makeStyles((theme) => ({\n card: {\n height: '100%',\n },\n cardContent: {\n paddingTop: 0,\n },\n cardActionArea: {\n height: '100%',\n },\n header: {},\n title: {\n fontWeight: 500,\n lineHeight: 1.33,\n },\n avatar: {\n color: theme.palette.secondary.main,\n backgroundColor: fade(theme.palette.secondary.main, 0.12),\n },\n}));\n\nconst DownloadObjectImportTemplateCard = forwardRef(\n (\n {\n className,\n classes: classesOverride,\n basePath,\n resource,\n source,\n component = Link,\n referenceRecord,\n version,\n dashboardModuleProps,\n ...props\n },\n ref,\n ) => {\n const [open, setOpen] = useState(false);\n // const notify = useNotify();\n const classes = useStyles({ classes: classesOverride });\n\n const record = {\n id: 'exportScheduledMaintenanceOrdersTemplate',\n name: 'Шаблон файла импорта объектов',\n description: 'Скачать шаблон файла Excel для быстрого создания объектов',\n };\n\n const name = record.name;\n const description = record.description;\n const handleClick = async (event) => {\n event.preventDefault();\n setOpen(true);\n createImportTemplate().then(() => setOpen(false));\n // .catch(e => notify(e));\n };\n\n return (\n <>\n <Card className={classes.card}>\n <CardActionArea\n classes={{ root: classes.cardActionArea }}\n component={component}\n ref={ref}\n to={`${basePath}/${record.id}`}\n onClick={handleClick}\n >\n <CardHeader\n avatar={\n <Avatar aria-label=\"dashboard\" variant=\"rounded\" classes={{ colorDefault: classes.avatar }}>\n <ImportIcon />\n </Avatar>\n }\n title={name}\n titleTypographyProps={{ variant: 'subtitle1' }}\n classes={{ root: classes.header, title: classes.title }}\n />\n {description && (\n <CardContent classes={{ root: classes.cardContent }}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {description}\n </Typography>\n </CardContent>\n )}\n </CardActionArea>\n </Card>\n <Snackbar\n open={open}\n autoHideDuration={null}\n onClose={() => null}\n message=\"Создание Шаблон файла импорта объектов\"\n action={<CircularProgress style={{ height: 20, width: 20, color: 'white' }} />}\n />\n </>\n );\n },\n);\n\nexport default DownloadObjectImportTemplateCard;\n","import gql from 'graphql-tag';\nimport apolloCoreClient from './apolloCoreClient';\n\nexport const GET_REPORT_METADATA = gql`\n query _allTasksMeta($filter: TaskFilter) {\n _allTasksMeta(filter: $filter) {\n count\n }\n }\n`;\n\nexport const GET_REPORT_DATA = gql`\n query allTasks($tasksCount: Int!, $sortField: String, $sortOrder: String, $filter: TaskFilter) {\n allTasks(perPage: $tasksCount, sortField: $sortField, sortOrder: $sortOrder, filter: $filter) {\n id\n region\n status\n type\n maintainableItem\n maintainableItemType\n deadlineAt\n planAt\n completedAt\n }\n }\n`;\n\nexport default (periods) => {\n const query = gql`\n query allTasks($tasksCount: Int!, $sortField: String, $sortOrder: String) {\n ${periods\n .map((period, index) => {\n return `\n _${index}: allTasks( perPage: $tasksCount, sortField: $sortField, sortOrder: $sortOrder, filter: {\n createdAt_lte: \"${period.start}\",\n OR: [{completedAt_gte: \"${period.end}\"}, {status_not: COMPLETED}],\n type_in: [UNSCHEDULEDMAINTENANCE, EMERGENCYREPAIR, VERIFICATION],\n }){\n id\n region\n status\n type\n maintainableItem\n maintainableItemType\n deadlineAt\n planAt\n createdAt\n completedAt\n },\n `;\n })\n .join('\\n')}\n }\n `;\n return apolloCoreClient\n .query({\n query: GET_REPORT_METADATA,\n variables: { filter: { type_in: ['UNSCHEDULEDMAINTENANCE', 'EMERGENCYREPAIR', 'VERIFICATION'] } },\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n })\n .then(({ data: { _allTasksMeta } }) => {\n return apolloCoreClient.query({\n query: query,\n variables: { tasksCount: _allTasksMeta.count },\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n });\n });\n};\n","import gql from 'graphql-tag';\nimport apolloCoreClient from './apolloCoreClient';\n\nexport const GET_REPORT_METADATA = gql`\n query _allTasksMeta($filter: TaskFilter) {\n _allTasksMeta(filter: $filter) {\n count\n }\n }\n`;\n\nexport const GET_REPORT_DATA = gql`\n query allTasks($tasksCount: Int!, $sortField: String, $sortOrder: String, $filter: TaskFilter) {\n allTasks(perPage: $tasksCount, sortField: $sortField, sortOrder: $sortOrder, filter: $filter) {\n id\n region\n status\n type\n maintainableItem\n maintainableItemType\n deadlineAt\n planAt\n completedAt\n }\n }\n`;\n\nexport default (periods) => {\n const query = gql`\n query allTasks($tasksCount: Int!, $sortField: String, $sortOrder: String) {\n ${periods\n .map((period, index) => {\n return `\n _${index}: allTasks( perPage: $tasksCount, sortField: $sortField, sortOrder: $sortOrder, filter: {\n completedAt_lte: \"${period.end}\",\n completedAt_gte: \"${period.start}\",\n type_in: [UNSCHEDULEDMAINTENANCE, EMERGENCYREPAIR, VERIFICATION],\n status: COMPLETED\n }){\n id\n region\n status\n type\n maintainableItem\n maintainableItemType\n deadlineAt\n planAt\n createdAt\n completedAt\n },\n `;\n })\n .join('\\n')}\n }\n `;\n return apolloCoreClient\n .query({\n query: GET_REPORT_METADATA,\n variables: { filter: { type_in: ['UNSCHEDULEDMAINTENANCE', 'EMERGENCYREPAIR', 'VERIFICATION'] } },\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n })\n .then(({ data: { _allTasksMeta } }) => {\n return apolloCoreClient.query({\n query: query,\n variables: { tasksCount: _allTasksMeta.count },\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n });\n });\n};\n","import React, { forwardRef, useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\nimport Avatar from '@material-ui/core/Avatar';\nimport Typography from '@material-ui/core/Typography';\nimport AssignmentIcon from '@material-ui/icons/Assignment';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\nimport ExcelJS from 'exceljs';\nimport groupBy from 'lodash/groupBy';\nimport CreateReportSnackBar from './CreateReportSnackBar';\nimport getObjectReportData from '../../../dataProvider/Objects/customQueries/getReportData';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport moment from 'moment';\nimport Grid from '@material-ui/core/Grid';\nimport getTaskReportData from '../../../dataProvider/Core/getReportData';\nimport { useTranslate } from 'react-admin';\nimport getUncomplitedTaskByPeriods from '../../../dataProvider/Core/getUncomplitedTaskByPeriods';\nimport getComplitedTasksByPeriods from '../../../dataProvider/Core/getComplitedTasksByPeriods';\n\nconst useStyles = makeStyles((theme) => ({\n card: {},\n cardContent: {\n paddingTop: 0,\n height: '50%',\n },\n cardActionArea: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n },\n header: {\n height: '50%',\n display: 'flex',\n justifyContent: 'flex-start',\n width: '100%',\n boxSizing: 'border-box',\n },\n title: {\n fontWeight: 500,\n lineHeight: 1.33,\n },\n avatar: {\n color: theme.palette.secondary.main,\n backgroundColor: fade(theme.palette.secondary.main, 0.12),\n },\n}));\n\nconst renderDataRows = (worksheet, allTasks, allObjects, allRegions, translate) => {\n worksheet.views = [{ state: 'frozen', xSplit: 0, ySplit: 1 }];\n worksheet.autoFilter = {\n from: 'A1',\n to: 'K1',\n };\n\n worksheet.columns = [\n { header: 'Номер', key: 'number' },\n { header: 'Создана', key: 'createdAt', width: 12 },\n { header: 'Заказчик', key: 'distributor', width: 20 },\n { header: 'Описание заявки', key: 'description', width: 25 },\n { header: 'Объект', key: 'Object', width: 25 },\n { header: 'Тип объекта', key: 'maintainableItemType', width: 20 },\n { header: 'Тип заявки', key: 'type', width: 20 },\n { header: 'Последний комментарий', key: 'lastComment', width: 25 },\n { header: 'Диспетчер', key: 'dispatcher', width: 20 },\n { header: 'Статус заявки', key: 'status', width: 20 },\n { header: 'Обновлена', key: 'updatedAt', width: 20 },\n ];\n\n worksheet.getRow(1).eachCell(\n (cell) =>\n (cell.style = {\n alignment: { horizontal: 'center', vertical: 'middle' },\n font: { bold: true, color: { argb: 'FFFFFFFF' } },\n border: {\n bottom: { color: { argb: 'FF010101' }, style: 'thin' },\n left: { color: { argb: 'FF010101' }, style: 'thin' },\n right: { color: { argb: 'FF010101' }, style: 'thin' },\n top: { color: { argb: 'FF010101' }, style: 'thin' },\n },\n fill: {\n type: 'pattern',\n pattern: 'solid',\n bgColor: {\n argb: 'FF5B9BD5',\n },\n fgColor: {\n argb: 'FF5B9BD5',\n },\n },\n }),\n );\n worksheet.getRow(1).height = 30;\n\n allTasks.forEach((task) => {\n const object = allObjects[task.maintainableItem][0];\n const distributor = object.counterparty ? object.counterparty.name : '';\n const objectType = translate('resources.Task.enums.maintainableItemType.' + task.maintainableItemType);\n const type = translate('resources.Task.enums.type.' + task.type);\n const dispatcher = task.processedBy ? task.processedBy.name : '';\n const status = translate('resources.Task.enums.status.' + task.status);\n const createdAt = moment(task.createdAt).format('DD.MM.YYYY HH:mm');\n const updatedAt = moment(task.updatedAt).format('DD.MM.YYYY HH:mm');\n const comments = task.comments ? [...task.comments] : [];\n const lastComment =\n comments &&\n comments.length &&\n comments.sort &&\n comments.sort((first, second) => {\n const time1 = moment(first.createdAt).unix();\n const time2 = moment(second.createdAt).unix();\n if (time1 > time2) return -1;\n if (time2 > time1) return 1;\n return 0;\n });\n\n const row = worksheet.addRow([\n task.number,\n createdAt,\n distributor,\n task.description,\n object.name,\n objectType,\n type,\n lastComment.length ? lastComment[0].body : '',\n dispatcher,\n status,\n updatedAt,\n ]);\n row.eachCell((cell, colNumber) => {\n cell.style = {\n alignment: {\n vertical: 'middle',\n horizontal: 'center',\n wrapText: true,\n },\n };\n });\n });\n\n // allObjects.forEach(object => objectMap[object.id] = object)\n\n // allTasks.forEach((task, index) => {\n // const object = task.maintainableItem && objectMap[task.maintainableItem];\n // const equipment = object && object.equipments && object.equipments.find(eq => eq.type === (object.type === 'STM' ? 'CONTROLLER' : 'METER'));\n // const completedAt = task.completedAt ? moment(task.completedAt).format('DD.MM.YYYY') : ''\n // const defects = (object && object.defects && object.defects.length > 0) ? object.defects.reduce((result, defect, index) => {\n // return result + `${(index !== 0) ? '<br>': ''}${defect.name}`\n // }, \"\") : '';\n // const solve = task.maintainableItemType === \"STM\" ? STM_SOLVES.join('\\n') : UUG_SOLVES.join('\\n');\n // const diff = 0;\n // const row = worksheet.addRow([\n // index + 1,\n // object ? (object.distributor ? object.distributor.name : '') : '',\n // object ? object.name : '',\n // equipment ? equipment.name : '',\n // task.type ?translate('resources.Task.enums.type.' + task.type) : '',\n // 'Новая',\n // defects,\n // completedAt,\n // '',\n // solve,\n // completedAt,\n // diff || '',\n // '',\n // ((diff ? ((moment().daysInMonth() - diff) / moment().daysInMonth()).toFixed(2) : 1) * 100).toFixed(0) + '%',\n // translate('resources.Task.enums.status.' + task.status) + '; ' + (task.comment || '') ,\n // ])\n // row.height = task.maintainableItemType === 'STM' ? 340 : 530;\n //\n // row.eachCell((cell, colNumber) => {\n // switch (colNumber){\n // case 7:\n // cell.style = {\n // alignment: {\n // vertical: \"middle\",\n // wrapText: true\n // }\n // }\n // break;\n // case 10:\n // cell.style = {\n // alignment: {\n // vertical: \"top\",\n // wrapText: true\n // }\n // }\n // break;\n //\n // default:\n // cell.style = {\n // alignment: {\n // vertical: \"middle\",\n // horizontal: \"center\",\n // wrapText: true\n // }\n // }\n // }\n // })\n //\n // })\n};\n\nconst ReportUncomplitedTasksCard = forwardRef(\n (\n {\n className,\n classes: classesOverride,\n basePath,\n resource,\n source,\n referenceRecord,\n version,\n dashboardModuleProps,\n disabled,\n setDisabled,\n ...props\n },\n ref,\n ) => {\n const classes = useStyles({ classes: classesOverride });\n const translate = useTranslate();\n const [openDialog, setOpenDialog] = React.useState(false);\n const [date, setDate] = useState({\n start: moment().startOf('month').format('YYYY-MM-DDTHH:mm'),\n end: moment().endOf('month').format('YYYY-MM-DDTHH:mm'),\n });\n\n const handleClickOpen = () => {\n setOpenDialog(true);\n };\n\n const handleClose = () => {\n setOpenDialog(false);\n };\n const [open, setOpen] = useState(false);\n const user = useSelector((state) => state.user, shallowEqual);\n const name = 'Невыполненные заявки';\n const description = 'Получите сводный отчет по невыполненным более 10 дней заявкам в формате Excel';\n\n const handleClick = () => {\n setDisabled(true);\n setOpen(true);\n setOpenDialog(false);\n\n const periods = [];\n const completedPeriods = [];\n\n for (const m = moment(date.start).endOf('day'); m.isBefore(date.end); ) {\n const cur = m.toISOString();\n periods.push({ start: moment(m).add(-10, 'day').toISOString(), end: m.toISOString() });\n completedPeriods.push({ start: moment(m).add(-7, 'day').toISOString(), end: m.toISOString() });\n m.add(1, 'day');\n if (!m.isBefore(date.end)) {\n periods.push({ start: moment(date.end).add(-10, 'day').toISOString(), end: moment(date.end).toISOString() });\n completedPeriods.push({\n start: moment(date.end).add(-7, 'day').toISOString(),\n end: moment(date.end).toISOString(),\n });\n }\n }\n\n if (!moment(date.start).endOf('day').isBefore(date.end)) {\n periods.push({ start: moment(date.end).add(-10, 'day').toISOString(), end: moment(date.end).toISOString() });\n completedPeriods.push({\n start: moment(date.end).add(-7, 'day').toISOString(),\n end: moment(date.end).toISOString(),\n });\n }\n\n new Promise(async (resolve, reject) => {\n // const [data, { data: completed }, { data: {allObjects} }] = await Promise.all([\n // () => getUncomplitedTaskByPeriods(periods),\n // () => getComplitedTasksByPeriods(completedPeriods),\n // () => getObjectReportData()\n // ]);\n const [\n {\n data: {\n listConstructionObjects: { items: allObjects },\n listRegions: { items: allLocations },\n },\n },\n { data: uncomplitedTasks },\n { data: completed },\n {\n data: { allTasks },\n },\n ] = await Promise.all([\n getObjectReportData({ objectFilter: { isArchived: null } }),\n getUncomplitedTaskByPeriods(periods),\n getComplitedTasksByPeriods(completedPeriods),\n getTaskReportData({\n filter: {\n createdAt_lte: moment(date.end).add(-10, 'day').toISOString(),\n type_in: ['UNSCHEDULEDMAINTENANCE', 'EMERGENCYREPAIR', 'VERIFICATION'],\n status_not: 'COMPLETED',\n },\n }),\n ]);\n\n // const { data: { allObjects, allLocations } } = await getObjectReportData();\n // const {data: uncomplitedTasks} = await getUncomplitedTaskByPeriods(periods);\n // const { data: { allTasks } } = await getTaskReportData({\n // filter: {\n // createdAt_lte: moment(date.end).add(-10, 'day').toISOString(),\n // type_in: ['UNSCHEDULEDMAINTENANCE', 'EMERGENCYREPAIR', 'VERIFICATION'],\n // status_not: 'COMPLETED'\n // }\n // })\n // const { data: completed } = await getComplitedTasksByPeriods(completedPeriods);\n const workbook = new ExcelJS.Workbook();\n workbook.description = '{parcer: \"ScheduledMaintenanceOrders\", version: \"0.0.1\"}';\n workbook.created = new Date();\n workbook.modified = new Date();\n workbook.lastPrinted = new Date();\n\n const worksheetAll = workbook.addWorksheet('Сводные данные');\n const worksheetPerObject = workbook.addWorksheet('Пообъектно');\n\n worksheetAll.views = [{ state: 'frozen', xSplit: 1, ySplit: 1 }];\n\n const columnsAll = [\n { header: '', key: 'blank', width: 25 },\n ...Object.values(uncomplitedTasks).map((tasks, index) => ({\n header: `Сводная информация по заявкам на ${moment(periods[index].end).format('DD.MM.YYYY')}`,\n key: periods[index].end,\n width: 30,\n })),\n {\n header: `Динамика (в части сокращения количества заявок за период с ${moment(date.start).format(\n 'DD.MM.YYYY HH:mm',\n )} по ${moment(date.end).format('DD.MM.YYYY HH:mm')})`,\n key: 'index',\n width: 25,\n },\n ];\n\n worksheetAll.columns = columnsAll;\n\n worksheetAll.autoFilter = {\n from: 'A1',\n to: {\n row: 1,\n column: worksheetAll.columns.length,\n },\n };\n\n worksheetAll.getRow(1).height = 60;\n worksheetAll.getRow(1).eachCell((cell) => {\n cell.style = {\n alignment: {\n wrapText: true,\n vertical: 'middle',\n horizontal: 'center',\n },\n };\n });\n let tasksPerPeriod = Object.values(uncomplitedTasks).map(\n (tasks) => tasks.filter((t) => t.type === 'UNSCHEDULEDMAINTENANCE').length,\n );\n let curRow = worksheetAll.addRow([\n 'Внеплановое ТО (не выполнено более 10 дней)',\n ...tasksPerPeriod,\n 1 - tasksPerPeriod[tasksPerPeriod.length - 1] / tasksPerPeriod[0] || 0,\n ]);\n curRow.height = 30;\n curRow.eachCell((cell) => {\n cell.style = {\n alignment: {\n wrapText: true,\n vertical: 'middle',\n horizontal: 'center',\n },\n };\n });\n curRow.getCell('index').style = {\n alignment: {\n wrapText: true,\n vertical: 'middle',\n horizontal: 'center',\n },\n fill: {\n fgColor: { argb: 'FFB2B2B2' },\n bgColor: { argb: 'FFB2B2B2' },\n pattern: 'solid',\n type: 'pattern',\n },\n border: {\n bottom: { color: { argb: 'FF010101' }, style: 'thin' },\n left: { color: { argb: 'FF010101' }, style: 'thin' },\n right: { color: { argb: 'FF010101' }, style: 'thin' },\n top: { color: { argb: 'FF010101' }, style: 'thin' },\n },\n numFmt: '0%',\n };\n tasksPerPeriod = Object.values(uncomplitedTasks).map(\n (tasks) => tasks.filter((t) => t.type === 'VERIFICATION').length,\n );\n curRow = worksheetAll.addRow([\n 'Поверка (не выполнено более 10 дней)',\n ...tasksPerPeriod,\n 1 - tasksPerPeriod[tasksPerPeriod.length - 1] / tasksPerPeriod[0] || 0,\n ]);\n curRow.height = 30;\n curRow.eachCell((cell) => {\n cell.style = {\n alignment: {\n wrapText: true,\n vertical: 'middle',\n horizontal: 'center',\n },\n };\n });\n curRow.getCell('index').style = {\n alignment: {\n wrapText: true,\n vertical: 'middle',\n horizontal: 'center',\n },\n fill: {\n fgColor: { argb: 'FFB2B2B2' },\n bgColor: { argb: 'FFB2B2B2' },\n pattern: 'solid',\n type: 'pattern',\n },\n border: {\n bottom: { color: { argb: 'FF010101' }, style: 'thin' },\n left: { color: { argb: 'FF010101' }, style: 'thin' },\n right: { color: { argb: 'FF010101' }, style: 'thin' },\n top: { color: { argb: 'FF010101' }, style: 'thin' },\n },\n numFmt: '0%',\n };\n tasksPerPeriod = Object.values(uncomplitedTasks).map(\n (tasks) => tasks.filter((t) => t.type === 'EMERGENCYREPAIR').length,\n );\n curRow = worksheetAll.addRow([\n 'Ремонт (не выполнено более 10 дней)',\n ...tasksPerPeriod,\n 1 - tasksPerPeriod[tasksPerPeriod.length - 1] / tasksPerPeriod[0] || 0,\n ]);\n curRow.height = 30;\n curRow.eachCell((cell) => {\n cell.style = {\n alignment: {\n wrapText: true,\n vertical: 'middle',\n horizontal: 'center',\n },\n };\n });\n curRow.getCell('index').style = {\n alignment: {\n wrapText: true,\n vertical: 'middle',\n horizontal: 'center',\n },\n fill: {\n fgColor: { argb: 'FFB2B2B2' },\n bgColor: { argb: 'FFB2B2B2' },\n pattern: 'solid',\n type: 'pattern',\n },\n border: {\n bottom: { color: { argb: 'FF010101' }, style: 'thin' },\n left: { color: { argb: 'FF010101' }, style: 'thin' },\n right: { color: { argb: 'FF010101' }, style: 'thin' },\n top: { color: { argb: 'FF010101' }, style: 'thin' },\n },\n numFmt: '0%',\n };\n tasksPerPeriod = Object.values(uncomplitedTasks).map((tasks) => tasks.length);\n curRow = worksheetAll.addRow([\n 'Всего заявок не выполнено более 10 дней (внеплановое ТО + Поверка + Ремонт)',\n ...tasksPerPeriod,\n 1 - tasksPerPeriod[tasksPerPeriod.length - 1] / tasksPerPeriod[0] || 0,\n ]);\n curRow.height = 30;\n curRow.eachCell((cell) => {\n cell.style = {\n alignment: {\n wrapText: true,\n vertical: 'middle',\n horizontal: 'center',\n },\n };\n });\n curRow.getCell('index').style = {\n alignment: {\n wrapText: true,\n vertical: 'middle',\n horizontal: 'center',\n },\n fill: {\n fgColor: { argb: 'FFB2B2B2' },\n bgColor: { argb: 'FFB2B2B2' },\n pattern: 'solid',\n type: 'pattern',\n },\n border: {\n bottom: { color: { argb: 'FF010101' }, style: 'thin' },\n left: { color: { argb: 'FF010101' }, style: 'thin' },\n right: { color: { argb: 'FF010101' }, style: 'thin' },\n top: { color: { argb: 'FF010101' }, style: 'thin' },\n },\n numFmt: '0%',\n };\n tasksPerPeriod = Object.values(completed).map((tasks) => tasks.length);\n curRow = worksheetAll.addRow([\n 'Выполнено за неделю (внеплановое ТО + Поверка + Ремонт)',\n ...tasksPerPeriod,\n -(1 - tasksPerPeriod[tasksPerPeriod.length - 1] / tasksPerPeriod[0] || 0),\n ]);\n curRow.height = 60;\n curRow.eachCell((cell) => {\n cell.style = {\n alignment: {\n wrapText: true,\n vertical: 'middle',\n horizontal: 'center',\n },\n fill: {\n fgColor: { argb: 'FFB2B2B2' },\n bgColor: { argb: 'FFB2B2B2' },\n pattern: 'solid',\n type: 'pattern',\n },\n border: {\n bottom: { color: { argb: 'FF010101' }, style: 'thin' },\n left: { color: { argb: 'FF010101' }, style: 'thin' },\n right: { color: { argb: 'FF010101' }, style: 'thin' },\n top: { color: { argb: 'FF010101' }, style: 'thin' },\n },\n };\n });\n curRow.getCell('index').style = {\n alignment: {\n wrapText: true,\n vertical: 'middle',\n horizontal: 'center',\n },\n fill: {\n fgColor: { argb: 'FFB2B2B2' },\n bgColor: { argb: 'FFB2B2B2' },\n pattern: 'solid',\n type: 'pattern',\n },\n border: {\n bottom: { color: { argb: 'FF010101' }, style: 'thin' },\n left: { color: { argb: 'FF010101' }, style: 'thin' },\n right: { color: { argb: 'FF010101' }, style: 'thin' },\n top: { color: { argb: 'FF010101' }, style: 'thin' },\n },\n numFmt: '0%',\n };\n const objects = groupBy(allObjects, 'id');\n const regions = groupBy(allLocations, 'id');\n renderDataRows(worksheetPerObject, allTasks, objects, regions, translate);\n\n return workbook.xlsx\n .writeBuffer()\n .then((data) => {\n const blob = new Blob([data], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n });\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveOrOpenBlob(blob, 'Отчет по невыполненным заявкам.xlsx');\n } else {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.href = url;\n a.download = 'Отчет по невыполненным заявкам.xlsx';\n a.click();\n window.URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }\n })\n .then(() => {\n resolve();\n })\n .catch((e) => {\n reject(e);\n });\n })\n .then(() => {\n setDisabled(false);\n setOpen(false);\n })\n .catch((e) => {\n console.log(e);\n setDisabled(false);\n setOpen(false);\n });\n };\n\n return (\n <>\n <Card className={classes.card}>\n <CardActionArea\n classes={{ root: classes.cardActionArea }}\n onAnimationEnd={handleClickOpen}\n disabled={disabled}\n // component={Button}\n // ref={ref}\n // to={`${basePath}/${record.id}`}\n >\n <CardHeader\n avatar={\n <Avatar aria-label=\"dashboard\" variant=\"rounded\" classes={{ colorDefault: classes.avatar }}>\n <AssignmentIcon />\n </Avatar>\n }\n title={name}\n titleTypographyProps={{ variant: 'subtitle1' }}\n classes={{ root: classes.header, title: classes.title }}\n />\n {description && (\n <CardContent classes={{ root: classes.cardContent }}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {description}\n </Typography>\n </CardContent>\n )}\n </CardActionArea>\n </Card>\n <Dialog open={openDialog} onClose={handleClose} aria-labelledby=\"form-dialog-title\" maxWidth=\"lg\">\n <DialogTitle id=\"form-dialog-title\">Результаты ТО АСКУГ</DialogTitle>\n <DialogContent>\n <DialogContentText>Выберите период времени, по которому будет построен отчёт.</DialogContentText>\n <Grid\n container\n alignContent=\"center\"\n wrap=\"nowrap\"\n justify=\"space-between\"\n spacing={4}\n style={{ marginBottom: 16, marginTop: 16 }}\n >\n <Grid item>\n <TextField\n label=\"Дата с\"\n type=\"datetime-local\"\n variant={'filled'}\n value={date.start}\n onChange={(event) => {\n setDate({ ...date, start: event.target.value });\n }}\n />\n </Grid>\n <Grid item>\n <TextField\n label=\"Дата по\"\n type=\"datetime-local\"\n variant={'filled'}\n value={date.end}\n onChange={(event) => setDate({ ...date, end: event.target.value })}\n />\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} color=\"primary\">\n Закрыть\n </Button>\n <Button onClick={handleClick} color=\"primary\">\n Создать отчет\n </Button>\n </DialogActions>\n </Dialog>\n <CreateReportSnackBar message=\"Создание отчета Невыполненные заявки\" open={open} />\n </>\n );\n },\n);\n\nexport default ReportUncomplitedTasksCard;\n","import React, { forwardRef, useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\nimport Avatar from '@material-ui/core/Avatar';\nimport Typography from '@material-ui/core/Typography';\nimport AssignmentIcon from '@material-ui/icons/Assignment';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\nimport ExcelJS from 'exceljs';\nimport groupBy from 'lodash/groupBy';\nimport CreateReportSnackBar from './CreateReportSnackBar';\nimport getObjectReportData from '../../../dataProvider/Objects/customQueries/getReportData';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport moment from 'moment';\nimport Grid from '@material-ui/core/Grid';\nimport getTaskReportData from '../../../dataProvider/Core/getReportData';\nimport { useTranslate } from 'react-admin';\nimport getUncomplitedTaskByPeriods from '../../../dataProvider/Core/getUncomplitedTaskByPeriods';\nimport getComplitedTasksByPeriods from '../../../dataProvider/Core/getComplitedTasksByPeriods';\n\nconst useStyles = makeStyles((theme) => ({\n card: {},\n cardContent: {\n paddingTop: 0,\n height: '50%',\n },\n cardActionArea: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n },\n header: {\n height: '50%',\n display: 'flex',\n justifyContent: 'flex-start',\n width: '100%',\n boxSizing: 'border-box',\n },\n title: {\n fontWeight: 500,\n lineHeight: 1.33,\n },\n avatar: {\n color: theme.palette.secondary.main,\n backgroundColor: fade(theme.palette.secondary.main, 0.12),\n },\n}));\n\nconst renderDataRows = (worksheet, allObjects, allTasks, translate, allTests) => {\n worksheet.views = [{ state: 'frozen', xSplit: 0, ySplit: 1 }];\n worksheet.autoFilter = {\n from: 'A1',\n to: 'K1',\n };\n worksheet.columns = [\n { header: 'Ссылка на заявку', key: 'href', width: 60 },\n { header: 'Контрагент', key: 'distributor', width: 50 },\n { header: 'Имя объекта', key: 'objectName', width: 25 },\n { header: 'Срок заявки', key: 'deadlineAt', width: 24 },\n { header: 'Дата выполнения', key: 'completedAt', width: 25 },\n { header: 'Исполнитель', key: 'executedBy', width: 20 },\n { header: 'Дата проверки', key: 'verificatedAt', width: 20 },\n ...allTests.map((test) => ({ header: test.name, key: test.id, width: 20 })),\n { header: 'Балл', key: 'verificationMark', width: 25 },\n { header: 'Замечания', key: 'verificationComment', width: 20 },\n ];\n\n worksheet.getRow(1).eachCell(\n (cell) =>\n (cell.style = {\n alignment: { horizontal: 'center', vertical: 'middle' },\n font: { bold: true, color: { argb: 'FFFFFFFF' } },\n border: {\n bottom: { color: { argb: 'FF010101' }, style: 'thin' },\n left: { color: { argb: 'FF010101' }, style: 'thin' },\n right: { color: { argb: 'FF010101' }, style: 'thin' },\n top: { color: { argb: 'FF010101' }, style: 'thin' },\n },\n fill: {\n type: 'pattern',\n pattern: 'solid',\n bgColor: {\n argb: 'FF5B9BD5',\n },\n fgColor: {\n argb: 'FF5B9BD5',\n },\n },\n }),\n );\n worksheet.getRow(1).height = 30;\n\n console.log(allTasks);\n\n if (!allTasks) return;\n\n allTasks.forEach((task) => {\n const object = allObjects[task.maintainableItem][0];\n const distributor = object.counterparty ? object.counterparty.name : '';\n const executor = task.executedBy ? task.executedBy.name : '';\n const deadlineAt = task.deadlineAt ? moment(task.deadlineAt).format('DD.MM.YYYY HH:mm') : '';\n const completedAt = task.completedAt ? moment(task.completedAt).format('DD.MM.YYYY HH:mm') : '';\n const verificatedAt = task.verificatedAt ? moment(task.verificatedAt).format('DD.MM.YYYY HH:mm') : '';\n const verificationMark = task.verificationMark;\n const verififcationComment = task.verificationComment;\n const verificationTests = task.verificationTests;\n\n const row = worksheet.addRow([\n `${window.location.origin}/#/Task/${task.id}/show`,\n distributor,\n object.name,\n deadlineAt,\n completedAt,\n executor,\n verificatedAt,\n ...allTests.map((test) => {\n const t = verificationTests.find((te) => te.idC === test.id);\n if (t) {\n return t.check ? `Да (${t.mark} балла)` : `Нет (${t.mark} балла)`;\n } else {\n return 'Отсутствует';\n }\n }),\n verificationMark,\n verififcationComment,\n ]);\n row.getCell(1).value = {\n text: `${window.location.origin}/#/Task/${task.id}/show`,\n hyperlink: `${window.location.origin}/#/Task/${task.id}/show`,\n // tooltip: `${window.location.origin}/#/Task/${task.id}/show`,\n };\n row.eachCell((cell, colNumber) => {\n cell.style = {\n alignment: {\n vertical: 'middle',\n horizontal: 'center',\n wrapText: true,\n },\n };\n });\n });\n};\n\nconst ReportVerificationTasksCard = forwardRef(\n (\n {\n className,\n classes: classesOverride,\n basePath,\n resource,\n source,\n referenceRecord,\n version,\n dashboardModuleProps,\n disabled,\n setDisabled,\n ...props\n },\n ref,\n ) => {\n const classes = useStyles({ classes: classesOverride });\n const translate = useTranslate();\n const [openDialog, setOpenDialog] = React.useState(false);\n const [date, setDate] = useState({\n start: moment().startOf('month').format('YYYY-MM-DDTHH:mm'),\n end: moment().endOf('month').format('YYYY-MM-DDTHH:mm'),\n });\n\n const handleClickOpen = () => {\n setOpenDialog(true);\n };\n\n const handleClose = () => {\n setOpenDialog(false);\n };\n const [open, setOpen] = useState(false);\n const user = useSelector((state) => state.user, shallowEqual);\n const name = 'Проверка выполнения TO';\n const description = 'Получите сводный отчет по проверке выполнения ТО в формате Excel';\n\n const handleClick = () => {\n setDisabled(true);\n setOpen(true);\n setOpenDialog(false);\n\n new Promise(async (resolve, reject) => {\n // const [data, { data: completed }, { data: {allObjects} }] = await Promise.all([\n // () => getUncomplitedTaskByPeriods(periods),\n // () => getComplitedTasksByPeriods(completedPeriods),\n // () => getObjectReportData()\n // ]);\n const [\n {\n data: {\n listConstructionObjects: { items: allObjects },\n // listRegions: { items: allLocations },\n listTests: { items: allTests },\n },\n },\n {\n data: { allTasks },\n },\n ] = await Promise.all([\n getObjectReportData({ objectFilter: { isArchived: null } }),\n getTaskReportData({\n filter: {\n verificatedAt_lte: moment(date.end).toISOString(),\n verificatedAt_gte: moment(date.start).toISOString(),\n type_in: ['SCHEDULEDMAINTENANCE'],\n },\n }),\n ]);\n\n // const { data: { allObjects, allLocations } } = await getObjectReportData();\n // const {data: uncomplitedTasks} = await getUncomplitedTaskByPeriods(periods);\n // const { data: { allTasks } } = await getTaskReportData({\n // filter: {\n // createdAt_lte: moment(date.end).add(-10, 'day').toISOString(),\n // type_in: ['UNSCHEDULEDMAINTENANCE', 'EMERGENCYREPAIR', 'VERIFICATION'],\n // status_not: 'COMPLETED'\n // }\n // })\n // const { data: completed } = await getComplitedTasksByPeriods(completedPeriods);\n const workbook = new ExcelJS.Workbook();\n workbook.description = '{parser: \"ScheduledMaintenanceOrders\", version: \"0.0.1\"}';\n workbook.created = new Date();\n workbook.modified = new Date();\n workbook.lastPrinted = new Date();\n\n const groupedByTypeObjects = groupBy(allObjects, 'type');\n const groupedByTypeTasks = groupBy(allTasks, 'maintainableItemType');\n\n if (groupedByTypeTasks.STM) {\n const worksheetSTM = workbook.addWorksheet('СТМ');\n renderDataRows(\n worksheetSTM,\n groupBy(groupedByTypeObjects.STM, 'id'),\n groupedByTypeTasks.STM || [],\n translate,\n allTests.filter((test) => test.constructionObjectsTypes.includes('STM')),\n );\n }\n\n if (groupedByTypeTasks.UUG) {\n const worksheetUUG = workbook.addWorksheet('УУГ');\n renderDataRows(\n worksheetUUG,\n groupBy(groupedByTypeObjects.UUG, 'id'),\n groupedByTypeTasks.UUG || [],\n translate,\n allTests.filter((test) => test.constructionObjectsTypes.includes('UUG')),\n );\n }\n\n if (groupedByTypeTasks.REMOTECONTROLLER) {\n const worksheetRemote = workbook.addWorksheet('Пульт управления');\n renderDataRows(\n worksheetRemote,\n groupBy(groupedByTypeObjects.REMOTECONTROLLER, 'id'),\n groupedByTypeTasks.REMOTECONTROLLER || [],\n translate,\n allTests.filter((test) => test.constructionObjectsTypes.includes('REMOTECONTROLLER')),\n );\n }\n\n if (groupedByTypeTasks.OTHER) {\n const worksheetOther = workbook.addWorksheet('Другой');\n renderDataRows(\n worksheetOther,\n groupBy(groupedByTypeObjects.OTHER, 'id'),\n groupedByTypeTasks.OTHER || [],\n translate,\n allTests.filter((test) => test.constructionObjectsTypes.includes('OTHER')),\n );\n }\n\n return workbook.xlsx\n .writeBuffer()\n .then((data) => {\n const blob = new Blob([data], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n });\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveOrOpenBlob(blob, 'Отчет по проверке ТО.xlsx');\n } else {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.href = url;\n a.download = 'Отчет по проверке ТО.xlsx';\n a.click();\n window.URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }\n })\n .then(() => {\n resolve();\n })\n .catch((e) => {\n reject(e);\n });\n })\n .then(() => {\n setDisabled(false);\n setOpen(false);\n })\n .catch((e) => {\n console.log(e);\n setDisabled(false);\n setOpen(false);\n });\n };\n\n return (\n <>\n <Card className={classes.card}>\n <CardActionArea\n classes={{ root: classes.cardActionArea }}\n onAnimationEnd={handleClickOpen}\n disabled={disabled}\n // component={Button}\n // ref={ref}\n // to={`${basePath}/${record.id}`}\n >\n <CardHeader\n avatar={\n <Avatar aria-label=\"dashboard\" variant=\"rounded\" classes={{ colorDefault: classes.avatar }}>\n <AssignmentIcon />\n </Avatar>\n }\n title={name}\n titleTypographyProps={{ variant: 'subtitle1' }}\n classes={{ root: classes.header, title: classes.title }}\n />\n {description && (\n <CardContent classes={{ root: classes.cardContent }}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {description}\n </Typography>\n </CardContent>\n )}\n </CardActionArea>\n </Card>\n <Dialog open={openDialog} onClose={handleClose} aria-labelledby=\"form-dialog-title\" maxWidth=\"lg\">\n <DialogTitle id=\"form-dialog-title\">Проверка ТО</DialogTitle>\n <DialogContent>\n <DialogContentText>Выберите период времени, по которому будет построен отчёт.</DialogContentText>\n <Grid\n container\n alignContent=\"center\"\n wrap=\"nowrap\"\n justify=\"space-between\"\n spacing={4}\n style={{ marginBottom: 16, marginTop: 16 }}\n >\n <Grid item>\n <TextField\n label=\"Проверка проведена с\"\n type=\"datetime-local\"\n variant={'filled'}\n value={date.start}\n onChange={(event) => {\n setDate({ ...date, start: event.target.value });\n }}\n />\n </Grid>\n <Grid item>\n <TextField\n label=\"Проверка проведена по\"\n type=\"datetime-local\"\n variant={'filled'}\n value={date.end}\n onChange={(event) => setDate({ ...date, end: event.target.value })}\n />\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} color=\"primary\">\n Закрыть\n </Button>\n <Button onClick={handleClick} color=\"primary\">\n Создать отчет\n </Button>\n </DialogActions>\n </Dialog>\n <CreateReportSnackBar message=\"Создание отчета Проверка выполнения ТО\" open={open} />\n </>\n );\n },\n);\n\nexport default ReportVerificationTasksCard;\n","import React, { useState } from 'react';\nimport BlankLayout from '../Layout/BlankLayout';\nimport GridField from '../Fields/GridField';\nimport ImportExportListView from './ImportExportListView';\nimport ImportCard from './ImportCard';\nimport ExportCard from './ExportCard';\nimport Typography from '@material-ui/core/Typography';\nimport { useTranslate } from 'react-admin';\nimport createImportTemplate from './createObjectImportTemplate';\nimport Grid from '@material-ui/core/Grid';\nimport CustomGrid from '../Layout/CustomGrid';\nimport DownloadImportTemplateCard from './DownloadTaskImportTemplate';\nimport { ability } from '../../abilityProvider';\nimport ReportMaintenanceCard from './Reports/ReportMaintenanceCard';\nimport ReportAudit from '../Reports/ReportAudit';\nimport ReportAuditCard from './Reports/ReportAuditCard';\nimport ReportRegistryCard from './Reports/ReportRegistryCard';\nimport ReportSummaryMaintenanceCard from './Reports/ReportSummaryMaintenanceCard';\nimport ReportDefectCard from './Reports/ReportDefectCard';\nimport DownloadObjectImportTemplateCard from './DownloadObjectImportTemplate';\nimport ReportUncomplitedTasksCard from './Reports/ReportUncomplitedTasksCard';\nimport ReportVerificationTasksCard from './Reports/ReportVerificationCard';\n\nexport const ImportExportList = (props) => {\n const [disabled, setDisabled] = useState(false);\n const translate = useTranslate();\n const record = {\n imports: [\n {\n id: 'importScheduledMaintenanceOrders',\n name: 'Заявки на плановое ТО по объектам',\n description: 'Воспользуйтесь файлом Excel для быстрого создания заявок на плановое ТО по объектам',\n basePath: 'Task',\n },\n {\n id: 'importMaintenanceOrders',\n name: 'Объекты',\n description: 'Воспользуйтесь файлом Excel для быстрого создания, обновления объектов',\n basePath: 'Task',\n },\n {\n id: 'exportScheduledMaintenanceOrdersTemplate',\n name: 'Шаблон файла заявок на плановое ТО по объектам',\n description: 'Скачать шаблон файла Excel для быстрого создания заявок на плановое ТО по объектам',\n onClick: (event) => {\n event.preventDefault();\n return createImportTemplate();\n },\n },\n ],\n };\n\n const gridOptions = {\n xs: { count: 'auto-fill', size: [32, '1fr'] },\n };\n\n return (\n <ImportExportListView {...props} component=\"div\">\n <Typography variant=\"subtitle2\" color=\"textSecondary\" gutterBottom noWrap>\n {translate(`resources.ImportExport.layout.import`)}\n </Typography>\n <CustomGrid xs={gridOptions.xs}>\n {ability.can('update', 'ImportExport', 'import') && <ImportCard record={record.imports[0]} />}\n {ability.can('update', 'ImportExport', 'import') && <ImportCard record={record.imports[1]} />}\n </CustomGrid>\n <Typography variant=\"subtitle2\" color=\"textSecondary\" style={{ marginTop: 16 }} gutterBottom noWrap>\n {translate(`resources.ImportExport.layout.export`)}\n </Typography>\n <CustomGrid xs={gridOptions.xs} disabled={disabled} setDisabled={setDisabled}>\n {ability.can('getOne', 'ImportExport', 'importTemplate') && <DownloadImportTemplateCard />}\n {ability.can('getOne', 'ImportExport', 'importTemplate') && <DownloadObjectImportTemplateCard />}\n {ability.can('getOne', 'ImportExport', 'Maintenance') && <ReportMaintenanceCard />}\n {ability.can('getOne', 'ImportExport', 'Audit') && <ReportAuditCard />}\n {ability.can('getOne', 'ImportExport', 'Defect') && <ReportDefectCard />}\n {ability.can('getOne', 'ImportExport', 'Registry') && <ReportRegistryCard />}\n {ability.can('getOne', 'ImportExport', 'SummaryMaintenance') && <ReportSummaryMaintenanceCard />}\n {ability.can('getOne', 'ImportExport', 'UncomplitedTasks') && <ReportUncomplitedTasksCard />}\n {ability.can('getOne', 'ImportExport', 'Verification') && <ReportVerificationTasksCard />}\n </CustomGrid>\n </ImportExportListView>\n );\n};\n\nexport default ImportExportList;\n","import React from 'react';\nimport { useShowController, TextField, DateField } from 'react-admin';\nimport { ShowView } from '../Layout/Show';\nimport ShowLayout from '../Layout/ShowLayout';\nimport TitleForRecord from '../Layout/TitleForRecord';\nimport MoreContent from '../Layout/MoreContent';\nimport Separator from '../Layout/Separator';\n\nconst FileShow = (props) => {\n const controllerProps = useShowController(props);\n const showMoreButton = React.useRef(null);\n\n return (\n <ShowView title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n <ShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <TextField source=\"url\" />\n <TextField source=\"urlThumbnail\" />\n <TextField source=\"catalog\" />\n <TextField source=\"size\" />\n </ShowLayout>\n\n <Separator action={<div ref={showMoreButton}></div>} />\n\n <MoreContent showMoreButton={showMoreButton}>\n <ShowLayout>\n <TextField source=\"id\" />\n <DateField source=\"createdAt\" />\n <TextField source=\"createdBy.name\" label=\"resources.File.fields.createdBy\" />\n <DateField source=\"updatedAt\" />\n </ShowLayout>\n </MoreContent>\n </ShowView>\n );\n};\n\nexport default FileShow;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { get } from 'lodash';\nimport JSONPretty from 'react-json-prettify';\nimport { github } from 'react-json-prettify/dist/themes';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: github.background,\n padding: '0.125em 1.5em',\n borderRadius: theme.shape.borderRadius,\n },\n}));\n\nconst JsonField = ({ record, source, ...props }) => {\n const classes = useStyles();\n const data = get(record, source);\n if (!data) return null;\n const json = typeof data === 'object' ? data : JSON.parse(data);\n\n return (\n <div className={classes.root}>\n <JSONPretty json={json} theme={github} padding={4} />\n </div>\n );\n};\n\nJsonField.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n record: PropTypes.object,\n source: PropTypes.string.isRequired,\n};\n\nJsonField.defaultProps = {\n addLabel: true,\n};\n\nexport default JsonField;\n","import React from 'react';\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport { Link } from 'react-admin';\nimport get from 'lodash/get';\nimport sanitizeRestProps from '../Fields/sanitizeRestProps';\n\nconst useStyles = makeStyles((theme) => ({\n link: {\n color: theme.palette.link.main,\n },\n}));\n\nconst stopPropagation = (e) => e.stopPropagation();\n\nconst NestedField = ({ className, classes: classesOverride, basePath, record, resource, source, link, ...props }) => {\n const classes = useStyles({ classes: classesOverride });\n\n const reference = get(record, 'type');\n const referenceId = get(record, 'item');\n const title = get(record, source);\n const rootPath = basePath.replace(resource, reference);\n const resourceLinkPath = `${rootPath}/${encodeURIComponent(referenceId)}/${link}`;\n\n return (\n <Link to={resourceLinkPath} onClick={stopPropagation}>\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={`${className} ${classes.link}`}\n {...sanitizeRestProps(props)}\n >\n {title}\n </Typography>\n </Link>\n );\n};\n\nNestedField.defaultProps = {\n classes: {},\n link: 'show',\n addLabel: true,\n};\n\nexport default NestedField;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useShowController, TextField, DateField } from 'react-admin';\nimport { ShowView } from '../Layout/Show';\nimport ShowLayout from '../Layout/ShowLayout';\nimport TitleForRecord from '../Layout/TitleForRecord';\nimport MoreContent from '../Layout/MoreContent';\nimport Separator from '../Layout/Separator';\nimport EnumField from '../Fields/EnumField';\nimport JsonField from '../Fields/JsonField';\nimport LinkField from './LinkField';\nimport { ability } from '../../abilityProvider';\n\nconst useStyles = makeStyles((theme) => ({\n link: {\n color: theme.palette.link.main,\n },\n}));\n\nconst HistoryShow = (props) => {\n const controllerProps = useShowController(props);\n const classes = useStyles();\n const showMoreButton = React.useRef(null);\n\n return (\n <ShowView title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n <ShowLayout>\n <EnumField source=\"action\" noWrap />\n <EnumField source=\"type\" />\n <LinkField source=\"name\" />\n <TextField source=\"description\" />\n {ability.can('getOne', 'History', 'data') && <JsonField source=\"data.data\" />}\n {ability.can('getOne', 'History', 'previous') && <JsonField source=\"data.previous\" />}\n </ShowLayout>\n\n <Separator action={<div ref={showMoreButton}></div>} />\n\n <MoreContent showMoreButton={showMoreButton}>\n <ShowLayout>\n <TextField source=\"id\" />\n <DateField source=\"createdAt\" />\n <TextField source=\"createdBy.name\" label=\"resources.History.fields.createdBy\" />\n </ShowLayout>\n </MoreContent>\n </ShowView>\n );\n};\n\nexport default HistoryShow;\n","import Icon from '@material-ui/icons/History';\nimport HistoryList from './HistoryList';\nimport HistoryShow from './HistoryShow';\n\nconst HistoryIcon = Icon;\n\nexport { HistoryIcon, HistoryList, HistoryShow };\n","import React, { useState } from 'react';\nimport { useSelector, useDispatch, shallowEqual } from 'react-redux';\nimport { useNotify, useUnselectAll, useRefresh, fetchStart, fetchEnd, Button } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport RestoreIcon from '@material-ui/icons/RestoreFromTrash';\nimport restoreManyFromTrash from '../../dataProvider/Core/restoreManyFromTrash';\n\nexport const sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n undoable,\n redirect,\n submitOnEnter,\n ...rest\n}) => rest;\n\nconst useStyles = makeStyles((theme) => ({\n restoreButton: {},\n}));\n\nconst BulkRestoreButton = ({\n basePath,\n resource,\n classes: classesOverride,\n className,\n filterValues,\n selectedIds,\n ...rest\n}) => {\n const trashItems = useSelector((state) => state.admin.resources.TrashItem.data, shallowEqual);\n const dispatch = useDispatch();\n const refresh = useRefresh();\n const notify = useNotify();\n const unselectAll = useUnselectAll();\n const classes = useStyles({ classes: classesOverride });\n const [loading, setLoading] = useState(false);\n\n const handleClick = () => {\n setLoading(true);\n dispatch(fetchStart());\n\n restoreManyFromTrash({\n resource,\n items: trashItems,\n ids: selectedIds,\n })\n .then(() => {\n refresh();\n notify('ra.notification.restored_from_trash', 'info', { smart_count: selectedIds.length });\n unselectAll(resource);\n })\n .catch((error) => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning');\n })\n .finally(() => {\n setLoading(false);\n dispatch(fetchEnd()); // stop the global loading indicator\n });\n };\n\n return (\n <Button\n onClick={handleClick}\n disabled={loading}\n label=\"ra.action.restore\"\n className={`ra-restore-button ${classes.restoreButton} ${className}`}\n key=\"button\"\n {...sanitizeRestProps(rest)}\n >\n <RestoreIcon />\n </Button>\n );\n};\n\nexport default BulkRestoreButton;\n","import restoreFromTrash from './restoreFromTrash';\n\nexport default ({ resource, items, ids }) => {\n return Promise.all(\n ids.map((id) =>\n restoreFromTrash(\n items ? { resource: items[id].type, where: { id: items[id].item } } : { resource, where: { id } },\n ),\n ),\n ).then((results) => {\n const data = results.reduce((acc, { data }) => [...acc, data.id], []);\n return { data };\n });\n};\n","import gql from 'graphql-tag';\nimport apolloCoreClient from './apolloCoreClient';\n\nexport default ({ resource, where }) => {\n return apolloCoreClient.mutate({\n mutation: gql`mutation delete${resource}($where: ${resource}WhereUniqueInput!) {\n data: delete${resource}(where: $where) {\n id\n }\n }`,\n variables: { where },\n onError: (error) => {\n alert(error);\n },\n });\n};\n","import React, { useState } from 'react';\nimport { useSelector, useDispatch, shallowEqual } from 'react-redux';\nimport { useNotify, useUnselectAll, useRefresh, fetchStart, fetchEnd, Button } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\nimport DeleteForeverIcon from '@material-ui/icons/DeleteForever';\nimport deleteManyFromTrash from '../../dataProvider/Core/deleteManyFromTrash';\n\nexport const sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n undoable,\n redirect,\n submitOnEnter,\n ...rest\n}) => rest;\n\nconst useStyles = makeStyles((theme) => ({\n deleteButton: {},\n}));\n\nconst BulkDeleteButton = ({\n basePath,\n resource,\n classes: classesOverride,\n className,\n filterValues,\n selectedIds,\n ...rest\n}) => {\n const trashItems = useSelector((state) => state.admin.resources.TrashItem.data, shallowEqual);\n const dispatch = useDispatch();\n const refresh = useRefresh();\n const notify = useNotify();\n const unselectAll = useUnselectAll();\n const classes = useStyles({ classes: classesOverride });\n const [loading, setLoading] = useState(false);\n\n const handleClick = () => {\n setLoading(true);\n dispatch(fetchStart());\n\n deleteManyFromTrash({\n resource,\n items: trashItems,\n ids: selectedIds,\n })\n .then(() => {\n refresh();\n notify('ra.notification.deleted_from_trash', 'info', { smart_count: selectedIds.length });\n unselectAll(resource);\n })\n .catch((error) => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning');\n })\n .finally(() => {\n setLoading(false);\n dispatch(fetchEnd()); // stop the global loading indicator\n });\n };\n\n return (\n <Button\n onClick={handleClick}\n disabled={loading}\n label=\"ra.action.delete\"\n color=\"secondary\"\n className={`ra-delete-button ${classes.deleteButton} ${className}`}\n key=\"button\"\n {...sanitizeRestProps(rest)}\n >\n <DeleteForeverIcon />\n </Button>\n );\n};\n\nexport default BulkDeleteButton;\n","import deleteFromTrash from './deleteFromTrash';\n\nexport default ({ resource, items, ids }) => {\n return Promise.all(\n ids.map((id) =>\n deleteFromTrash(\n items ? { resource: items[id].type, where: { id: items[id].item } } : { resource, where: { id } },\n ),\n ),\n ).then((results) => {\n const data = results.reduce((acc, { data }) => [...acc, data.id], []);\n return { data };\n });\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useDispatch } from 'react-redux';\n\nimport DeleteForeverIcon from '@material-ui/icons/DeleteForever';\nimport { useRefresh, useNotify, useRedirect, fetchStart, fetchEnd, Button } from 'react-admin';\nimport deleteFromTrash from '../../dataProvider/Core/deleteFromTrash';\n\nexport const sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n undoable,\n redirect,\n submitOnEnter,\n ...rest\n}) => rest;\n\nconst useStyles = makeStyles((theme) => ({\n deleteButton: {\n color: 'rgb(239, 83, 80)',\n },\n}));\n\nconst DeleteButton = ({\n classes: classesOverride,\n className,\n onClick,\n resource,\n record,\n basePath,\n redirect: redirectTo,\n ...rest\n}) => {\n const classes = useStyles({ classes: classesOverride });\n const dispatch = useDispatch();\n const refresh = useRefresh();\n const notify = useNotify();\n const [loading, setLoading] = useState(false);\n\n const handleDelete = (event) => {\n setLoading(true);\n dispatch(fetchStart()); // start the global loading indicator\n\n deleteFromTrash({\n resource,\n where: { id: record.id },\n })\n .then(() => {\n notify('ra.notification.deleted_from_trash', 'info', { smart_count: 1 });\n refresh();\n })\n .catch((error) => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning');\n })\n .finally(() => {\n setLoading(false);\n dispatch(fetchEnd()); // stop the global loading indicator\n });\n };\n\n return (\n <Button\n onClick={handleDelete}\n disabled={loading}\n variant=\"contained\"\n size=\"medium\"\n label=\"ra.action.delete\"\n className={`ra-delete-button ${classes.deleteButton} ${className}`}\n {...sanitizeRestProps(rest)}\n >\n <DeleteForeverIcon />\n </Button>\n );\n};\n\nDeleteButton.propTypes = {\n basePath: PropTypes.string,\n classes: PropTypes.object,\n className: PropTypes.string,\n record: PropTypes.object,\n redirect: PropTypes.oneOfType([PropTypes.string, PropTypes.bool, PropTypes.func]),\n resource: PropTypes.string,\n};\n\nDeleteButton.defaultProps = {\n redirect: false,\n};\n\nexport default DeleteButton;\n","import React from 'react';\nimport { ability } from '../../abilityProvider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport DeleteForeverIcon from '@material-ui/icons/DeleteForever';\nimport {\n DateField,\n Datagrid,\n TextField,\n Filter,\n SearchInput,\n BulkExportButton,\n ReferenceInput,\n useTranslate,\n} from 'react-admin';\nimport RestoreButton from '../Buttons/RestoreButton';\nimport EnumField from '../Fields/EnumField';\nimport BulkRestoreButton from '../Buttons/BulkRestoreButton';\nimport BulkDeleteButton from '../Buttons/BulkDeleteButton';\nimport AutocompleteInput from '../Inputs/AutoompleteInput';\nimport List from '../Layout/List';\nimport customExporter, { dateFormatter, enumFormatter } from '../../exporter';\nimport DeleteButton from '../Buttons/DeleteButton';\nimport ManualSubmitFilter from '../Layout/filter/ManualSubmitFilter';\n\nconst useStyles = makeStyles((theme) => ({\n row: {\n height: 40,\n },\n}));\n\nconst TrashItemBulkActionButtons = (props) => (\n <>\n {ability.can('restore', 'Task') && <BulkRestoreButton {...props} />}\n {ability.can('delete', 'Task') && (\n <BulkDeleteButton {...props} style={{ color: 'rgb(239, 83, 80)' }} icon={<DeleteForeverIcon />} />\n )}\n <BulkExportButton {...props} />\n </>\n);\n\nconst TrashItemFilter = (props) => (\n <ManualSubmitFilter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <ReferenceInput reference=\"User\" source=\"deletedBy.id\" label=\"resources.TrashItem.fields.deletedBy\" alwaysOn>\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n </ManualSubmitFilter>\n);\n\n// const redirectToItem = (id, basePath, record) => {\n//\n// return `/${record.type}/${record.item}/show`\n// };\n\nconst EmbededRestoreButton = (props) => (\n <RestoreButton {...props} resource={props.record.type} record={{ id: props.record.item }} variant=\"text\" />\n);\nconst EmbededDeleteButton = (props) => (\n <DeleteButton\n {...props}\n resource={props.record.type}\n record={{ id: props.record.item, type: props.record.type }}\n icon={<DeleteForeverIcon />}\n variant=\"text\"\n />\n);\n\nconst TrashItemList = ({ modelExport, ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const exporter = customExporter(translate(`resources.${props.resource}.name`, { smart_count: 2 }), modelExport, {\n translate,\n });\n const manualSubmitForm = React.useRef(null);\n\n return (\n <List\n {...props}\n filters={<TrashItemFilter formRef={manualSubmitForm} />}\n bulkActionButtons={<TrashItemBulkActionButtons />}\n exporter={exporter}\n >\n <Datagrid classes={{ row: classes.row }}>\n <EnumField source=\"type\" />\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <TextField source=\"deletedBy.name\" label=\"resources.TrashItem.fields.deletedBy\" sortable={false} />\n <DateField source=\"deletedAt\" />\n <EmbededRestoreButton />\n <EmbededDeleteButton />\n </Datagrid>\n </List>\n );\n};\n\nTrashItemList.defaultProps = {\n perPage: 100,\n sort: { field: 'deletedAt', order: 'DESC' },\n modelExport: {\n type: enumFormatter,\n name: true,\n description: true,\n deletedBy: {\n name: true,\n __resource: 'User',\n },\n deletedAt: dateFormatter,\n __resource: 'TrashItem',\n },\n};\n\nexport default TrashItemList;\n","import Icon from '@material-ui/icons/Delete';\nimport TrashItemList from './TrashItemList';\nimport TrashItemShow from './TrashItemShow';\n\nconst TrashItemIcon = Icon;\n\nexport { TrashItemIcon, TrashItemList, TrashItemShow };\n","import React, { useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useNotify, useUnselectAll, useDataProvider, fetchStart, fetchEnd, Button } from 'react-admin';\nimport FileDownloadIcon from '../Icons/FileDownload';\n//import getUrlArchive from '../../dataProvider/Blob/archiveFiles';\nimport getUrlArchive from '../../dataProvider/Blob/archiveGetUrl';\nimport { getAccessToken } from '../../authPrivider/getAccessToken';\n\nimport useDeepCompareEffect from 'use-deep-compare-effect';\nimport DownloadFilesSnackBar from '../Layout/DownloadFilesSnackBar';\nimport { URI_BLOB_REST } from '../../appsettings';\nimport login from '../../authPrivider/login';\n\nexport const sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n undoable,\n redirect,\n submitOnEnter,\n ...rest\n}) => rest;\n\nconst BulkDownloadFilesButton = ({\n basePath,\n resource,\n source,\n sources,\n className,\n filterValues,\n selectedIds,\n ...rest\n}) => {\n /* \n const dataProvider = useDataProvider();\n const dispatch = useDispatch();\n const notify = useNotify();\n const unselectAll = useUnselectAll();\n const [loading, setLoading] = useState(false);\n const [folders, setFolders] = useState([]);\n const [open, setOpen] = useState(false);\n const label = sources ? `ra.action.download_all` : `ra.action.download_all_${source}`;\n\n useDeepCompareEffect(()=>{\n if (folders.length) {\n getUrlArchive(folders).then( async (data) => {\n const token = await getAccessToken();\n setOpen(false);\n setFolders([]);\n window.open(`${URI_BLOB_REST}${data.data.getUrlArchiveFiles.virtualpath}?${token}`, '_blank');\n }).catch((error) => {\n notify( typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning' );\n setOpen(false);\n })\n .finally(() => {\n setLoading(false);\n dispatch(fetchEnd());\n })\n\n }\n }, [folders])\n\n const handleClick = () => {\n\n setLoading(true);\n dispatch(fetchStart());\n\n dataProvider.getMany(resource, { ids: selectedIds })\n .then(({ data, total }) => {\n let _folders = data.map(task => {\n const idsBlob = [];\n if (sources && sources.length) {\n sources.forEach(s => {\n if (task[s])\n idsBlob.push(...task[s].map(file => (file.idBlob)))\n })\n } else {\n idsBlob.push(...task[source].map(file => (file.idBlob)))\n }\n return ({\n // humanId: order.humanId,\n // addrManual: order.addrManual,\n // idsBlob: order.files.map(file => (file.idBlob))\n\n humanId: task.id,\n addrManual: (`_${(task.alias ? task.alias + ' ' : '') + (task.name ? task.name + ' ' : '')}`.replace(/ /g, '_')).substring(0, 66),\n idsBlob,\n })\n });\n \n \n _folders = _folders.filter(folder => folder.idsBlob.length > 0);\n\n const count = total - _folders.length\n\n if (count > 0) notify(`ra.notification.download_${source}_empty`, 'info', { smart_count: count, count: count });\n\n if (_folders.length) {\n setFolders(_folders);\n setOpen(true);\n };\n\n \n \n unselectAll(resource);\n })\n .catch((error) => {\n notify( typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning' );\n })\n .finally(() => {\n setLoading(false);\n dispatch(fetchEnd());\n });\n };\n */\n\n const dataProvider = useDataProvider();\n const dispatch = useDispatch();\n const notify = useNotify();\n const unselectAll = useUnselectAll();\n const [loading, setLoading] = useState(false);\n const label = sources ? `ra.action.download_all` : `ra.action.download_all_${source}`;\n\n const handleClick = () => {\n setLoading(true);\n dispatch(fetchStart());\n\n dataProvider.getMany(resource, { ids: selectedIds }).then(({ data }) => {\n let folders = data.map((task) => {\n const idsBlob = [];\n if (sources && sources.length) {\n sources.forEach((s) => {\n if (task[s]) idsBlob.push(...task[s].map((file) => file.idBlob));\n });\n } else {\n idsBlob.push(...task[source].map((file) => file.idBlob));\n }\n\n return {\n // humanId: order.humanId,\n // addrManual: order.addrManual,\n // idsBlob: order.files.map(file => (file.idBlob))\n\n humanId: task.id,\n addrManual: `${task.addrManual || task.alias}`.substring(0, 200),\n idsBlob,\n };\n });\n folders = folders.filter((folder) => folder.idsBlob.length > 0);\n const count = selectedIds.length - folders.length;\n\n if (count > 0) notify(`ra.notification.download_${source}_empty`, 'info', { smart_count: count, count: count });\n if (folders.length) {\n getUrlArchive(folders).then((data) => {\n const a = document.createElement('a');\n a.style.display = 'none';\n document.body.appendChild(a);\n a.href = data.url;\n a.click();\n setLoading(false);\n dispatch(fetchEnd());\n });\n } else {\n setLoading(false);\n dispatch(fetchEnd());\n }\n unselectAll(resource);\n notify('Загрузка архива началась. Дождитесь завершения.');\n });\n };\n\n return (\n <>\n <Button\n onClick={handleClick}\n disabled={loading}\n label={label}\n className={className}\n key=\"button\"\n {...sanitizeRestProps(rest)}\n >\n <FileDownloadIcon />\n </Button>\n {/* <DownloadFilesSnackBar folders={folders} open={open} setFolders={setFolders} setOpen={setOpen}/> */}\n </>\n );\n};\n\nexport default BulkDownloadFilesButton;\n","import React, { useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useNotify, useUnselectAll, useDataProvider, fetchStart, fetchEnd, useTranslate } from 'react-admin';\nimport FileDownloadIcon from '../Icons/FileDownload';\n// import getUrlArchive from '../../dataProvider/Blob/archiveFiles';\nimport getUrlArchive from '../../dataProvider/Blob/archiveGetUrl';\nimport { getAccessToken } from '../../authPrivider/getAccessToken';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Typography from '@material-ui/core/Typography';\n\nimport DownloadFilesSnackBar from '../Layout/DownloadFilesSnackBar';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\nimport { URI_BLOB_REST } from '../../appsettings';\nimport login from '../../authPrivider/login';\n\nexport const sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n undoable,\n redirect,\n submitOnEnter,\n ...rest\n}) => rest;\n\nconst useStyles = makeStyles((theme) => {\n return {\n menu: {\n color: '#316FC4',\n },\n };\n});\n\nconst DownloadAllFilesButton = React.forwardRef(\n ({ resource, className, source, sources, filterValues, notification, ...rest }, ref) => {\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const dispatch = useDispatch();\n const notify = useNotify();\n const classes = useStyles();\n const user = useSelector((state) => state.user, shallowEqual);\n const unselectAll = useUnselectAll();\n const [loading, setLoading] = useState(false);\n const [folders, setFolders] = useState([]);\n const [open, setOpen] = useState(false);\n const [message, setMessage] = useState();\n const label = translate(sources ? `ra.action.download_all` : `ra.action.download_all_${source}`);\n const regionFilter = filterValues && (filterValues.region || filterValues.counterparty);\n\n const handleClick = (e) => {\n e.stopPropagation();\n setLoading(true);\n dispatch(fetchStart());\n\n dataProvider\n .getList(resource, { filter: { ...filterValues }, pagination: { page: 1 }, sort: {} })\n .then(({ total }) =>\n dataProvider\n .getList(resource, { filter: { ...filterValues }, pagination: { perPage: total, page: 1 }, sort: {} })\n .then(({ data, total }) => {\n let folders = data.map((task) => {\n const idsBlob = [];\n if (sources && sources.length) {\n sources.forEach((s) => {\n if (task[s]) idsBlob.push(...task[s].map((file) => file.idBlob));\n });\n } else {\n idsBlob.push(...task[source].map((file) => file.idBlob));\n }\n return {\n humanId: task.id,\n addrManual: `${(task.alias ? task.alias + ' ' : '') + (task.name ? task.name + ' ' : '')}`\n .replace(/ /g, '_')\n .substring(0, 66),\n idsBlob,\n };\n });\n\n folders = folders.filter((folder) => folder.idsBlob.length > 0);\n const count = total - folders.length;\n\n if (count > 0)\n notify(notification || `ra.notification.download_${source}_empty`, 'info', {\n smart_count: count,\n count: count,\n });\n\n if (folders.length) {\n getUrlArchive(folders).then((data) => {\n const a = document.createElement('a');\n a.style.display = 'none';\n document.body.appendChild(a);\n a.href = data.url;\n a.click();\n setLoading(false);\n dispatch(fetchEnd());\n });\n } else {\n setLoading(false);\n dispatch(fetchEnd());\n }\n\n unselectAll(resource);\n })\n .catch((error) => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning');\n })\n .finally(() => {\n setLoading(false);\n dispatch(fetchEnd());\n }),\n );\n };\n\n return (\n <MenuItem key=\"button\" ref={ref} onClick={handleClick} disabled={loading || !regionFilter} {...rest}>\n <ListItemIcon>\n <FileDownloadIcon />\n </ListItemIcon>\n <Typography variant=\"inherit\">{label}</Typography>\n {/*<DownloadFilesSnackBar folders={folders} open={open} message={message} setFolders={setFolders} setOpen={setOpen}/>*/}\n </MenuItem>\n );\n },\n);\n\nexport default DownloadAllFilesButton;\n","import React, { cloneElement } from 'react';\n\nimport { TopToolbar, sanitizeListRestProps, CreateButton } from 'react-admin';\n\nimport MoreActionsButton from '../Buttons/MoreActionsButton';\nimport DownloadAllFilesButton from '../Buttons/DownloadAllFilesButtonAsMenuItem';\nimport ExportButton from '../Buttons/ExportButtonAsMenuItem';\nimport FilterSaveButton from '../Buttons/FilterSaveButtonAsMenuItem';\n\nconst ListActions = ({\n currentSort,\n className,\n resource,\n filters,\n displayedFilters,\n setFilters,\n exporter, // you can hide ExportButton if exporter = (null || false)\n filterValues,\n permanentFilter,\n hasCreate, // you can hide CreateButton if hasCreate = false\n basePath,\n selectedIds,\n onUnselectItems,\n showFilter,\n maxResults,\n total,\n ...rest\n}) => (\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n setFilters,\n filterValues,\n context: 'button',\n })}\n {hasCreate && <CreateButton basePath={basePath} />}\n <MoreActionsButton>\n <ExportButton\n disabled={total === 0}\n resource={resource}\n sort={currentSort}\n filter={{ ...filterValues, ...permanentFilter }}\n exporter={exporter}\n maxResults={maxResults}\n />\n <DownloadAllFilesButton\n filterValues={filterValues}\n resource={resource}\n source=\"acts\"\n notification=\"ra.notification.download_object_acts_empty\"\n />\n <DownloadAllFilesButton\n filterValues={filterValues}\n resource={resource}\n source=\"files\"\n notification=\"ra.notification.download_object_files_empty\"\n />\n <DownloadAllFilesButton\n filterValues={filterValues}\n resource={resource}\n source=\"assemblyFiles\"\n notification=\"ra.notification.download_object_files_empty\"\n />\n <DownloadAllFilesButton\n filterValues={filterValues}\n resource={resource}\n source=\"assemblyActs\"\n notification=\"ra.notification.download_object_files_empty\"\n />\n <DownloadAllFilesButton\n filterValues={filterValues}\n resource={resource}\n source=\"projectDocs\"\n notification=\"ra.notification.download_object_files_empty\"\n />\n <FilterSaveButton\n disabled={Object.keys(filterValues).length === 0}\n resource={resource}\n filter={{ ...filterValues }}\n />\n </MoreActionsButton>\n </TopToolbar>\n);\n\nListActions.defaultProps = {\n selectedIds: [],\n onUnselectItems: () => null,\n};\n\nexport default ListActions;\n","import React, { useEffect, useState } from 'react';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n useListController,\n useTranslate,\n Datagrid,\n TextField,\n SearchInput,\n ReferenceField,\n ReferenceInput,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n BulkExportButton,\n NullableBooleanInput,\n TextInput,\n} from 'react-admin';\nimport Filter from '../Layout/Filter';\nimport AutocompleteInput from '../Inputs/AutoompleteInput';\nimport LocationSuggestion from '../Location/LocationSuggestion';\nimport EnumField from '../Fields/EnumField';\nimport EnumInput from '../Inputs/EnumInput';\nimport useEnum from '../../dataProvider/Objects/useEnum';\nimport BulkDownloadFilesButton from '../Buttons/BulkDownloadFilesButton';\nimport FileAttachedField from '../Fields/FileAttachedField';\nimport LabelsField from '../Fields/LabelsField';\nimport MaintainableItemListActions from './MaintainableItemListActions';\nimport List from '../Layout/List';\nimport customExporter, { dateFormatter, enumFormatter } from '../../exporter';\nimport ManualSubmitFilter from '../Layout/filter/ManualSubmitFilter';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\nimport LinkWrapper from '../Buttons/LinkWrapper';\nimport NestedField from '../Fields/NestedField';\n\nconst useStyles = makeStyles((theme) => ({\n row: {\n height: 40,\n },\n}));\n\nconst filterStyles = makeStyles((theme) => ({\n container: {\n marginBottom: '4px',\n },\n}));\n\nconst ObjectBulkActionButtons = (props) => {\n return (\n <>\n <BulkDownloadFilesButton {...props} source=\"files\" />\n <BulkDownloadFilesButton {...props} source=\"acts\" />\n <BulkDownloadFilesButton {...props} source=\"assemblyFiles\" />\n <BulkDownloadFilesButton {...props} source=\"assemblyActs\" />\n <BulkDownloadFilesButton {...props} source=\"projectDocs\" />\n <BulkExportButton {...props} />\n {/*{ability.can(\"remove\", \"Object\") && <BulkRemoveButton {...props} />}*/}\n </>\n );\n};\n\nconst MaintainableItemFilter = (props) => {\n const user = useSelector((state) => state.user, shallowEqual);\n const regions = (user && user.regions) || [];\n const [state, setState] = useState(props.filterValues.type === 'STM');\n\n useEffect(() => {\n if (props.filterValues.type === 'STM') {\n setState(true);\n } else {\n setState(false);\n }\n\n // return () => setState(false)\n }, [props.filterValues.type]);\n\n return (\n <ManualSubmitFilter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <ReferenceInput\n source=\"counterparty.id\"\n sort={{ field: 'name', order: 'ASC' }}\n reference=\"Counterparty\"\n filter={{ regions: regions.map((r) => ({ id: r })) }}\n label=\"resources.ConstructionObject.fields.counterparty\"\n emptyText=\"ra.message.no\"\n alwaysOn\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n <ReferenceInput\n source=\"region.id\"\n reference=\"Region\"\n perPage={50}\n filter={{ ids: regions }}\n sort={{ field: 'unrestrictedName' }}\n label=\"resources.ConstructionObject.fields.region\"\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput optionText=\"unrestrictedName\" suggestionItem={<LocationSuggestion />} />\n </ReferenceInput>\n <NullableBooleanInput source=\"isArchived\" nullLabel=\"ra.message.all\" alwaysOn />\n <EnumInput source=\"type\" Enum=\"TypeConstructionObject\" useEnum={useEnum} emptyText=\"ra.message.no\" alwaysOn />\n <TextInput source=\"gmiId\" />\n <ReferenceArrayInput\n source=\"defects\"\n reference=\"Defect\"\n label=\"resources.ConstructionObject.fields.defects\"\n perPage={50}\n emptyText=\"ra.message.no\"\n >\n <AutocompleteArrayInput optionText=\"name\" />\n </ReferenceArrayInput>\n {state && (\n <ReferenceInput\n source=\"telemetrySystem.id\"\n reference=\"TelemetrySystem\"\n perPage={50}\n emptyText=\"ra.message.no\"\n label=\"resources.ConstructionObject.fields.telemetrySystem\"\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n )}\n </ManualSubmitFilter>\n );\n};\n\nexport const MaintainableItemReferenceDatagrid = (props) => {\n const classes = useStyles();\n\n return (\n <Datagrid rowClick=\"show\" classes={{ row: classes.row }}>\n <EnumField source=\"type\" />\n <TextField source=\"inventoryNumber\" />\n <TextField source=\"name\" />\n <ReferenceField\n source=\"region.id\"\n label=\"resources.ConstructionObject.fields.region\"\n reference=\"Region\"\n link={false}\n >\n <TextField source=\"unrestrictedName\" />\n </ReferenceField>\n <TextField source=\"manualAddr\" />\n <LabelsField>\n <FileAttachedField />\n </LabelsField>\n </Datagrid>\n );\n};\n\nconst MaintainableItemList = ({ modelExport, ...props }) => {\n const translate = useTranslate();\n const user = useSelector((state) => state.user, shallowEqual);\n const regions = (user && user.regions) || [];\n const controllerProps = useListController({ filter: { regions: regions.map((r) => ({ id: r })) }, ...props });\n const classes = useStyles();\n const exporter = customExporter(translate(`resources.${props.resource}.name`, { smart_count: 2 }), modelExport, {\n translate,\n });\n const manualSubmitForm = React.useRef(null);\n\n return (\n <List\n filterDefaultValues={{ regions: regions.map((r) => ({ id: r })) }}\n filters={<MaintainableItemFilter formRef={manualSubmitForm} setFilters={controllerProps.setFilters} />}\n bulkActionButtons={<ObjectBulkActionButtons />}\n actions={<MaintainableItemListActions maxResults={100000} />}\n {...props}\n {...controllerProps}\n perPage={100}\n exporter={exporter}\n >\n <Datagrid rowClick=\"show\" classes={{ row: classes.row }}>\n <EnumField source=\"type\" />\n <TextField source=\"inventoryNumber\" />\n <LinkWrapper source=\"name\">\n <TextField />\n </LinkWrapper>\n <NestedField source=\"counterparty\" reference=\"Counterparty\" link={false} sortBy=\"counterparty.name\">\n <TextField source=\"name\" />\n </NestedField>\n <TextField source=\"manualAddr\" />\n <LabelsField>\n <FileAttachedField />\n </LabelsField>\n </Datagrid>\n </List>\n );\n};\n\nMaintainableItemList.defaultProps = {\n perPage: 100,\n sort: { field: 'createdAt', order: 'DESC' },\n // filterDefaultValues: { isArchived: false },\n modelExport: {\n id: true,\n type: enumFormatter,\n name: true,\n description: true,\n createdAt: dateFormatter,\n createdBy: {\n name: true,\n __resource: 'User',\n },\n updatedAt: dateFormatter,\n inventoryNumber: true,\n region: {\n name: true,\n __resource: 'Region',\n },\n manualAddr: true,\n equipments: {\n name: true,\n count: true,\n factoryNumber: true,\n type: enumFormatter,\n __resource: 'EquipmentCatalog',\n },\n defects: {\n name: true,\n __resource: 'Defect',\n },\n counterparty: {\n name: true,\n __resource: 'Counterparty',\n },\n eutpId: true,\n __resource: 'ConstructionObject',\n },\n};\n\nexport default MaintainableItemList;\n","import React from 'react';\nimport { useForm, useFormState } from 'react-final-form';\n\nimport AutocompleteInput from '../Inputs/AutoompleteInput';\n\nconst StmInput = ({ source, record, ...props }) => {\n const form = useForm();\n const formState = useFormState();\n\n const onChange = (value) => {\n const choice = props.choices.find((el) => el.id === value);\n if (choice) {\n form.change(\n 'equipments',\n choice.equipments.map((equipment) => ({ ...equipment, id: undefined })),\n );\n }\n props.input.onChange(value);\n };\n\n if (formState.values.type !== 'STM') return null;\n\n return (\n <AutocompleteInput {...props} input={{ ...props.input, onChange: onChange }} source={source} record={record} />\n );\n};\n\nexport default StmInput;\n","import { gql } from '@apollo/client';\nimport apolloObjectsClient from '../apolloClient';\nimport { useState } from 'react';\nimport { useVersion } from 'react-admin';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\n\nexport const GET_ALL_TEMPLATE = gql`\n query allEquipmentTemplates($filter: EquipmentTemplateFilter) {\n data: allEquipmentTemplates(filter: $filter) {\n id\n name\n description\n equipments {\n id\n name\n description\n type\n count\n factoryNumber\n }\n }\n }\n`;\n\nexport default (args) => {\n const [state, setState] = useState({\n data: undefined,\n loading: true,\n error: undefined,\n });\n\n const version = useVersion();\n\n useDeepCompareEffect(() => {\n apolloObjectsClient\n .query({\n query: GET_ALL_TEMPLATE,\n variables: { ...args },\n fetchPolicy: 'network-only',\n onError: (error) => {\n alert(error);\n },\n })\n .then(({ data: { data } }) => {\n setState({\n data,\n loading: false,\n error: false,\n loaded: true,\n });\n })\n .catch((error) => {\n setState({\n loading: false,\n loaded: false,\n error: error,\n });\n });\n }, [version, args]);\n\n return state;\n};\n","import React, { useEffect, useState } from 'react';\nimport { Button, useTranslate, useVersion, useDataProvider } from 'react-admin';\nimport { useForm } from 'react-final-form';\nimport Grid from '@material-ui/core/Grid';\nimport ClickAwayListener from '@material-ui/core/ClickAwayListener';\nimport Grow from '@material-ui/core/Grow';\nimport Paper from '@material-ui/core/Paper';\nimport Popper from '@material-ui/core/Popper';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MenuList from '@material-ui/core/MenuList';\nimport getEquipmentTemplates from '../../dataProvider/Objects/other/getEquipmentTemplates';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { useSelector, shallowEqual } from 'react-redux';\n\nconst ChooseTemplateButton = ({ className, resource, source, record = {}, ...props }) => {\n const translate = useTranslate();\n const [open, setOpen] = React.useState(false);\n const anchorRef = React.useRef(null);\n const form = useForm();\n const user = useSelector((state) => state.user, shallowEqual);\n const version = useVersion();\n const provider = useDataProvider();\n const [data, setData] = useState();\n const regions = (user ? user.regions || [] : []).map((r) => ({ id: r }));\n\n useEffect(() => {\n provider\n .getList('EquipmentTemplate', {\n filter: { regions },\n pagination: { page: 1, perPage: 100 },\n sort: { field: 'id', order: 'asc' },\n })\n .then(({ total }) => {\n provider\n .getList('EquipmentTemplate', {\n filter: { regions },\n pagination: { page: 1, perPage: total },\n sort: { field: 'id', order: 'asc' },\n })\n .then(({ data: templates }) => setData(templates));\n });\n }, [version]);\n\n const handleMenuItemClick = (event, index) => {\n form.change(\n 'equipments',\n data[index].equipments.map((equipment) => {\n return {\n name: equipment.name,\n type: equipment.type,\n count: equipment.count,\n factoryNumber: equipment.factoryNumber,\n description: equipment.description,\n };\n }),\n );\n setOpen(false);\n };\n\n const handleToggle = () => {\n setOpen((prevOpen) => !prevOpen);\n };\n\n const handleClose = (event) => {\n if (anchorRef.current && anchorRef.current.contains(event.target)) {\n return;\n }\n\n setOpen(false);\n };\n\n return (\n <Grid container direction=\"column\" alignItems=\"flex-start\">\n <Grid item xs={12}>\n <div ref={anchorRef}>\n <Button onClick={handleToggle} label={translate('ra.action.chooseTemplate')} variant=\"contained\"></Button>\n </div>\n {data && (\n <Popper\n open={open}\n anchorEl={anchorRef.current}\n style={{ zIndex: 100000 }}\n role={undefined}\n transition\n disablePortal\n >\n {({ TransitionProps, placement }) => (\n <Grow\n {...TransitionProps}\n style={{\n transformOrigin: placement === 'bottom' ? 'left top' : 'left bottom',\n }}\n >\n <Paper>\n <ClickAwayListener onClickAway={handleClose}>\n <MenuList id=\"split-button-menu\">\n {data &&\n data.map((template, index) => {\n return (\n <MenuItem key={template.id} onClick={(event) => handleMenuItemClick(event, index)}>\n <span style={{ minWidth: '120px' }}>{template.name}</span>\n </MenuItem>\n );\n })}\n </MenuList>\n </ClickAwayListener>\n </Paper>\n </Grow>\n )}\n </Popper>\n )}\n </Grid>\n </Grid>\n );\n};\n\nexport default ChooseTemplateButton;\n","import React from 'react';\nimport { Button, useTranslate, fetchStart, fetchEnd, useDataProvider } from 'react-admin';\nimport { useDispatch } from 'react-redux';\nimport { useFormState } from 'react-final-form';\nimport TextField from '@material-ui/core/TextField';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport { useRefresh } from 'ra-core';\n\nconst SaveTemplateButton = ({ className, resource, source, record = {}, ...props }) => {\n const translate = useTranslate();\n const dispatch = useDispatch();\n const [open, setOpen] = React.useState(false);\n const refresh = useRefresh();\n const provider = useDataProvider();\n let name = 'new name';\n let description = '';\n const formState = useFormState();\n\n const handleChangeName = (event) => {\n name = event.target.value;\n };\n\n const handleChangeDesc = (event) => {\n description = event.target.value;\n };\n\n const handleClickOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n const handleSave = () => {\n dispatch(fetchStart());\n setOpen(false);\n provider\n .create('EquipmentTemplate', {\n data: {\n __typename: 'EquipmentTemplate',\n name: name,\n description: description,\n equipments: formState.values.equipments,\n },\n })\n .finally(() => {\n refresh();\n dispatch(fetchEnd());\n });\n };\n\n return (\n <div>\n <Button variant=\"outlined\" color=\"primary\" onClick={handleClickOpen} label=\"Сохранить шаблон\" />\n <Dialog open={open} onClose={handleClose} aria-labelledby=\"form-dialog-title\">\n <DialogTitle id=\"form-dialog-title\">Сохранить шаблон</DialogTitle>\n <DialogContent>\n <DialogContentText>Сохраните шаблон, чтобы использовать его позднее.</DialogContentText>\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"nameTemple\"\n label=\"Название\"\n type=\"text\"\n onChange={handleChangeName}\n fullWidth\n />\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"descTemple\"\n label=\"Описание\"\n type=\"text\"\n onChange={handleChangeDesc}\n fullWidth\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} color=\"primary\" label=\"Отмена\" />\n <Button onClick={handleSave} color=\"primary\" label=\"Сохранить\" />\n </DialogActions>\n </Dialog>\n </div>\n );\n};\n\nexport default SaveTemplateButton;\n","import React, { useState, useCallback, cloneElement } from 'react';\nimport inflection from 'inflection';\nimport { get } from 'lodash';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Drawer from '@material-ui/core/Drawer';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport IconButton from '@material-ui/core/IconButton';\n\nimport CloseIcon from '@material-ui/icons/Close';\nimport { CREATE, crudGetMatching, useTranslate, showNotification, Toolbar, Button } from 'react-admin';\nimport { useForm, useFormState } from 'react-final-form';\nimport { useDispatch } from 'react-redux';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\n\nconst useStyles = makeStyles({\n button: {\n verticalAlign: 'bottom',\n position: 'relative',\n marginTop: 8,\n marginBottom: 4,\n },\n paper: {\n minWidth: '16rem',\n },\n mlAuto: { marginLeft: 'auto' },\n drawerForm: {\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n },\n drawerToolbar: {\n marginTop: 'auto',\n },\n});\n\nconst QuickCreateArrayElementButton = ({ resource, source, reference, basePath, children, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const dispatch = useDispatch();\n const form = useForm();\n const { values } = useFormState();\n const [valuesForForm, setValuesForForm] = useState(values[source] || []);\n const [open, setOpen] = useState(false);\n const referenceName = translate(`resources.${reference}.name`, {\n smart_count: 1,\n _: inflection.humanize(inflection.singularize(resource)),\n });\n const defaultTitle = translate('ra.page.create', {\n name: `${referenceName}`,\n });\n\n const handleClick = (event) => {\n event.preventDefault();\n setOpen(true);\n };\n\n const handleCloseClick = (event) => {\n event.preventDefault();\n setOpen(false);\n };\n\n useDeepCompareEffect(() => {\n const value = get(values, source, []).map((val) => val || { count: 1 });\n setValuesForForm(value);\n }, [values[source] || []]);\n\n useDeepCompareEffect(() => {\n form.change(source, valuesForForm);\n }, [valuesForForm]);\n\n const onSave = (data) => {\n const value = get(values, source, []);\n dispatch(\n crudGetMatching(reference, `${resource}@${source}`, { page: 1, perPage: 25 }, { field: 'id', order: 'DESC' }, {}),\n );\n\n const el = {\n name: data.name,\n type: data.type,\n count: 1,\n };\n\n setValuesForForm([...valuesForForm, el]);\n setOpen(false);\n };\n\n const handleSave = useCallback(\n (values) => {\n dispatch({\n type: 'QUICK_CREATE',\n payload: { data: values },\n meta: {\n fetch: CREATE,\n resource: reference,\n onSuccess: {\n callback: ({ payload: { data } }) => onSave(data),\n },\n onFailure: {\n callback: ({ error }) => {\n dispatch(showNotification(error.message, 'error'));\n },\n },\n },\n });\n },\n [dispatch, onSave, reference],\n );\n\n return (\n <>\n <Tooltip title={translate('ra.action.create')} enterDelay={700}>\n <Button\n onClick={handleClick}\n aria-label=\"QuickCreateButton\"\n label=\"ra.action.create_equipment_catalog\"\n variant=\"contained\"\n />\n </Tooltip>\n <Drawer anchor=\"right\" open={open} onClose={handleCloseClick} classes={{ paper: classes.paper }}>\n <CardHeader\n title={defaultTitle}\n action={\n <IconButton onClick={handleCloseClick} aria-label=\"Close\" size=\"small\">\n <CloseIcon fontSize=\"inherit\" />\n </IconButton>\n }\n />\n {cloneElement(children, {\n basePath: basePath.replace(resource, reference),\n resource: reference,\n save: handleSave,\n redirect: false,\n className: classes.drawerForm,\n toolbar: <Toolbar className={classes.drawerToolbar} />,\n })}\n </Drawer>\n </>\n );\n};\n\nexport default QuickCreateArrayElementButton;\n","import React from 'react';\n\nimport { useCreateController, CreateView, SimpleForm, TextInput, required } from 'react-admin';\nimport useEnum from '../../dataProvider/Objects/useEnum';\nimport EnumInput from '../Inputs/EnumInput';\nimport { ability } from '../../abilityProvider';\nimport Create from '../Layout/Create';\n\nconst validate = [required()];\n\nexport const EquipmentCatalogQuickCreate = (props) => {\n return (\n <SimpleForm {...props} initialValues={{ __typename: 'EquipmentCatalog' }}>\n <EnumInput style={{ width: '100%' }} Enum=\"EquipmentType\" useEnum={useEnum} source=\"type\" validate={validate} />\n <TextInput source=\"name\" validate={validate} fullWidth />\n <TextInput source=\"description\" multiline fullWidth />\n </SimpleForm>\n );\n};\n\nconst EquipmentCatalogCreate = (props) => {\n const controllerProps = useCreateController(props);\n\n return (\n <Create {...props} {...controllerProps}>\n <SimpleForm redirect=\"show\" initialValues={{ __typename: 'EquipmentCatalog' }}>\n {ability.can('create', 'EquipmentCatalog', 'type') && (\n <EnumInput Enum=\"EquipmentType\" useEnum={useEnum} source=\"type\" validate={validate} />\n )}\n {ability.can('create', 'EquipmentCatalog', 'name') && <TextInput source=\"name\" validate={validate} fullWidth />}\n {ability.can('create', 'EquipmentCatalog', 'description') && (\n <TextInput source=\"description\" multiline fullWidth />\n )}\n </SimpleForm>\n </Create>\n );\n};\n\nexport default EquipmentCatalogCreate;\n","import React from 'react';\nimport ChooseTemplateButton from './ChooseTemplateButton';\nimport SaveTemplateButton from './SaveTemplateButton';\nimport Grid from '@material-ui/core/Grid';\nimport { ability } from '../../abilityProvider';\nimport QuickCreateArrayElementButton from './QuickCreateArrayElementButton';\nimport { EquipmentCatalogQuickCreate } from '../EquipmentCatalog/EquipmentCatalogCreate';\n\nexport default (props) => {\n return (\n <Grid container direction=\"row\" spacing={1} alignItems=\"flex-start\">\n {ability.can('create', 'EquipmentCatalog') && (\n <Grid item xs={'auto'}>\n <QuickCreateArrayElementButton {...props} reference=\"EquipmentCatalog\" source=\"equipments\">\n <EquipmentCatalogQuickCreate />\n </QuickCreateArrayElementButton>\n </Grid>\n )}\n {ability.can('getList', 'EquipmentTemplate') && (\n <Grid item xs={'auto'}>\n <ChooseTemplateButton {...props} />\n </Grid>\n )}\n {ability.can('create', 'EquipmentTemplate') && (\n <Grid item xs={'auto'}>\n <SaveTemplateButton {...props} />\n </Grid>\n )}\n </Grid>\n );\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\n\nimport { ArrayInput, NumberInput, ReferenceInput, SimpleFormIterator, TextInput, required } from 'react-admin';\nimport AutocompleteInput from './AutoompleteInput';\n\nimport { useForm, useFormState } from 'react-final-form';\nimport EnumInput from './EnumInput';\nimport useEnum from '../../dataProvider/Objects/useEnum';\n\nconst EnumCover = ({ onChange, ...props }) => {\n const form = useForm();\n const handleChange = (event) => {\n form.change(props.source.replace('type', 'name'), null);\n onChange(event);\n };\n return <EnumInput {...props} onChange={handleChange} />;\n};\n\nconst validate = [required()];\n\nconst Inputs = ({ ...props }) => {\n const EquipmentCatalog = useSelector((state) => {\n return Object.values(state.admin.resources.EquipmentCatalog.data);\n });\n const [filter, setFilter] = useState({\n type: props.record.type,\n });\n\n const onChange = (event) => {\n setFilter({\n type: event.target.value,\n });\n };\n\n const format = (name) => {\n if (!EquipmentCatalog.length) return name;\n const result = EquipmentCatalog.find((eq) => {\n return eq.name === name;\n });\n return result ? result.id : name;\n };\n\n const parse = (id) => {\n if (!id) return null;\n const result = EquipmentCatalog.find((eq) => {\n return eq.id === id;\n });\n return result.name;\n };\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n alignItems: 'flex-start',\n }}\n >\n <EnumCover\n {...props}\n Enum=\"EquipmentType\"\n useEnum={useEnum}\n source={`${props.source}.type`}\n label=\"resources.EquipmentCatalog.fields.type\"\n onChange={onChange}\n validate={validate}\n />\n <ReferenceInput\n {...props}\n source={`${props.source}.name`}\n parse={parse}\n format={format}\n reference=\"EquipmentCatalog\"\n label=\"resources.EquipmentCatalog.fields.name\"\n filter={filter}\n allowEmpty\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput optionText=\"name\" optionValue=\"id\" />\n </ReferenceInput>\n <TextInput\n {...props}\n source={`${props.source}.factoryNumber`}\n label=\"resources.EquipmentCatalog.fields.factoryNumber\"\n />\n <NumberInput\n {...props}\n source={`${props.source}.count`}\n initialValue={1}\n label=\"resources.EquipmentCatalog.fields.count\"\n validate={validate}\n />\n </div>\n );\n};\n\nconst EquipmentInput = ({ record, resource, source, ...props }) => {\n return (\n <ArrayInput resource={resource} record={record} source=\"equipments\">\n <SimpleFormIterator>\n <Inputs />\n {/*<EnumCover Enum=\"EquipmentType\" useEnum={useEnum} source=\"type\" resource=\"EquipmentCatalog\" onChange={onChange} allowEmpty emptyText=\"ra.message.no\"/>*/}\n {/*<EnumInput Enum=\"EquipmentType\" useEnum={useEnum} source=\"type\" resource=\"EquipmentCatalog\" onChange={onChange} allowEmpty emptyText=\"ra.message.no\"/>*/}\n {/*<AutocompleteInput source='name' optionText=\"name\" optionValue=\"name\" choices={dataChoices}/>*/}\n {/*<NumberInput source=\"count\"/>*/}\n </SimpleFormIterator>\n </ArrayInput>\n );\n};\n\nEquipmentInput.propTypes = {\n source: PropTypes.string,\n};\n\nexport default EquipmentInput;\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate, TextInput, required } from 'react-admin';\nimport { useForm } from 'react-final-form';\nimport { useSelector, shallowEqual } from 'react-redux';\n\nconst useStyles = makeStyles((theme) => {\n return {};\n});\n\nconst MaintainableItemCommentInput = (props) => {\n const classes = useStyles();\n const form = useForm();\n const user = useSelector((state) => state.user, shallowEqual);\n const translate = useTranslate();\n\n useEffect(() => {\n form.change('comment', null);\n form.change('comments', null);\n }, []);\n // const required = (form.getState().values.status !== props.record.status);\n\n // const validateComment = (value) => {\n // if (!props.record.status) return null\n // const status = form.getState().values.status;\n // const required = (status !== props.record.status) && (status !== 'COMPLETED') && !value;\n //\n // return required ? 'ra.validation.comment_required' : null\n // }\n\n const handleChange = ({ currentTarget: { value } }) => {\n form.change('comments', {\n create: [\n {\n body: value,\n authorId: user.id,\n },\n ],\n });\n };\n\n return (\n <div>\n <TextInput\n {...props}\n onChange={handleChange}\n label={translate('resources.ConstructionObject.fields.comment')}\n validate={[required()]}\n />\n </div>\n );\n};\n\nMaintainableItemCommentInput.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n record: PropTypes.object,\n source: PropTypes.string.isRequired,\n};\n\nMaintainableItemCommentInput.defaultProps = {};\n\nexport default MaintainableItemCommentInput;\n","import React from 'react';\n\nimport {\n useCreateController,\n CreateView,\n SimpleForm,\n TextInput,\n ReferenceInput,\n required,\n SelectInput,\n ReferenceArrayInput,\n CheckboxGroupInput,\n BooleanInput,\n Toolbar,\n SaveButton,\n useEditController,\n CreateButton,\n} from 'react-admin';\nimport { ability } from '../../abilityProvider';\nimport EnumInput from '../Inputs/EnumInput';\nimport useEnum from '../../dataProvider/Objects/useEnum';\nimport StmInput from '../TelemetrySystem/StmInput';\nimport TemplateActionButtonsField from '../Buttons/TemplateActionButtonsField';\nimport EquipmentInput from '../Inputs/EquipmentInput';\nimport FileInputCustom from '../Inputs/FileInput';\nimport FileChip from '../Fields/FileChip';\nimport MaintainableItemCommentInput from './MaintainableItemCommentInput';\nimport BlankLayout from '../Layout/BlankLayout';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport Create from '../Layout/Create';\nimport AutocompleteInput from '../Inputs/AutoompleteInput';\n\nconst useStyles = makeStyles((theme) => ({\n toolbar: {\n display: 'flex',\n '& > *:not(:last-child)': {\n marginRight: theme.spacing(1),\n },\n },\n mlAuto: {\n marginLeft: 'auto',\n },\n referenceArrayInput: {\n marginTop: 8,\n marginBottom: 4,\n },\n}));\n\nconst MaintainableItemToolbar = (props) => {\n const classes = useStyles();\n\n return (\n <Toolbar {...props} classes={{ toolbar: classes.toolbar }}>\n {ability.can('create', 'Object') && <SaveButton />}\n {ability.can('create', 'Object') && (\n <SaveButton redirect={'show'} label=\"ra.action.save_and_continue\" submitOnEnter={false} variant=\"outlined\" />\n )}\n </Toolbar>\n );\n};\n\nconst MaintainableItemCreate = (props) => {\n const controllerProps = useCreateController(props);\n const user = useSelector((state) => state.user, shallowEqual);\n const regions = (user && user.regions) || [];\n\n return (\n <Create {...props} {...controllerProps}>\n <BlankLayout>\n <SimpleForm toolbar={<MaintainableItemToolbar />}>\n {ability.can('create', 'Object', 'inventoryNumber') && <TextInput source=\"inventoryNumber\" fullWidth />}\n {ability.can('create', 'Object', 'type') && (\n <EnumInput source=\"type\" Enum=\"TypeConstructionObject\" useEnum={useEnum} validate={[required()]} />\n )}\n {ability.can('create', 'Object', 'stm') && (\n <ReferenceInput\n source=\"telemetrySystem.id\"\n label=\"resources.ConstructionObject.fields.telemetrySystem\"\n reference=\"TelemetrySystem\"\n allowEmpty\n emptyText=\"ra.message.no\"\n >\n <StmInput />\n </ReferenceInput>\n )}\n {ability.can('create', 'Object', 'eutpId') && <TextInput source=\"eutpId\" fullWidth />}\n {ability.can('create', 'Object', 'gmiId') && <TextInput source=\"gmiId\" fullWidth />}\n {ability.can('create', 'Object', 'name') && <TextInput source=\"name\" fullWidth validate={[required()]} />}\n {ability.can('create', 'Object', 'description') && <TextInput source=\"description\" multiline fullWidth />}\n {ability.can('create', 'Object', 'distributor') && (\n <ReferenceInput\n label=\"resources.ConstructionObject.fields.counterparty\"\n validate={[required()]}\n filter={{ regions: regions.map((r) => ({ id: r })) }}\n perPage={100}\n source=\"counterparty.id\"\n sort={{ field: 'name', order: 'ASC' }}\n reference=\"Counterparty\"\n >\n <AutocompleteInput optionText=\"name\" />\n </ReferenceInput>\n )}\n {ability.can('create', 'Object', 'region') && (\n <ReferenceInput\n source=\"region.id\"\n validate={[required()]}\n label=\"resources.ConstructionObject.fields.region\"\n reference=\"Region\"\n perPage={100}\n sort={{ field: 'unrestrictedName' }}\n >\n <AutocompleteInput optionText=\"unrestrictedName\" />\n </ReferenceInput>\n )}\n {ability.can('create', 'Object', 'manualAddr') && <TextInput source=\"manualAddr\" fullWidth />}\n {ability.can('create', 'Object', 'defects') && (\n <ReferenceArrayInput\n source=\"defectsIds\"\n style={{ width: '100%' }}\n label=\"resources.ConstructionObject.fields.defects\"\n reference=\"Defect\"\n fullWidth\n >\n <CheckboxGroupInput row={false} fullWidth />\n </ReferenceArrayInput>\n )}\n <TemplateActionButtonsField />\n {ability.can('create', 'Object', 'equipments') && <EquipmentInput source=\"equipments\" />}\n {ability.can('create', 'Object', 'acts') && (\n <FileInputCustom\n source=\"acts\"\n disabledAdd={true}\n placeholder={<p>Перетащите акты сюда или нажмите для выбора</p>}\n multiple\n >\n <FileChip source=\"url\" title=\"name\" canOpen />\n </FileInputCustom>\n )}\n {ability.can('create', 'Object', 'files') && (\n <FileInputCustom source=\"files\" placeholder={<p>Перетащите файлы сюда или нажмите для выбора</p>} multiple>\n <FileChip source=\"url\" title=\"name\" canOpen />\n </FileInputCustom>\n )}\n {ability.can('create', 'Object', 'assemblyFiles') && (\n <FileInputCustom\n source=\"assemblyFiles\"\n placeholder={<p>Перетащите файлы сюда или нажмите для выбора</p>}\n multiple\n >\n <FileChip source=\"url\" title=\"name\" canOpen />\n </FileInputCustom>\n )}\n {ability.can('create', 'Object', 'assemblyActs') && (\n <FileInputCustom\n source=\"assemblyActs\"\n placeholder={<p>Перетащите файлы сюда или нажмите для выбора</p>}\n multiple\n >\n <FileChip source=\"url\" title=\"name\" canOpen />\n </FileInputCustom>\n )}\n {ability.can('create', 'Object', 'projectDocs') && (\n <FileInputCustom\n source=\"projectDocs\"\n placeholder={<p>Перетащите файлы сюда или нажмите для выбора</p>}\n multiple\n >\n <FileChip source=\"url\" title=\"name\" canOpen />\n </FileInputCustom>\n )}\n <MaintainableItemCommentInput source=\"comment\" fullWidth />\n <BooleanInput source=\"isArchived\" />\n </SimpleForm>\n </BlankLayout>\n </Create>\n );\n};\n\nexport default MaintainableItemCreate;\n","import React from 'react';\nimport { SaveButton } from 'react-admin';\nimport { useForm, useFormState } from 'react-final-form';\n\nexport default (props) => {\n const form = useForm();\n const formState = useFormState();\n const withEquipment = formState.values.equipments && formState.values.equipments.length;\n\n const handleClick = () => {\n form.change('acts', [...form.getState().values.acts, { id: 'none', hidden: true }]);\n };\n return (\n <SaveButton\n {...props}\n label=\"ra.action.save-without-act\"\n onMouseDown={handleClick}\n style={{ marginLeft: 8 }}\n variant={withEquipment ? 'outlined' : 'contained'}\n />\n );\n};\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport EnumInput from '../Inputs/EnumInput';\nimport {\n useEditController,\n EditView,\n SimpleForm,\n TextInput,\n BooleanInput,\n ReferenceInput,\n CheckboxGroupInput,\n ReferenceArrayInput,\n SelectInput,\n Toolbar,\n SaveButton,\n required,\n} from 'react-admin';\nimport TitleForRecord from '../Layout/TitleForRecord';\nimport { useFormState } from 'react-final-form';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport useEnum from '../../dataProvider/Objects/useEnum';\nimport FileChip from '../Fields/FileChip';\nimport FileInputCustom from '../Inputs/FileInput';\nimport StmInput from '../TelemetrySystem/StmInput';\nimport UpdateReasonInput from './UpdateReasonInput';\nimport EquipmentInput from '../Inputs/EquipmentInput';\nimport TemplateActionButtonsField from '../Buttons/TemplateActionButtonsField';\nimport SaveWithOutActButton from './SaveWithOutActButton';\nimport { ability } from '../../abilityProvider';\nimport Edit from '../Layout/Edit';\nimport BlankLayout from '../Layout/BlankLayout';\nimport MaintainableItemCommentInput from './MaintainableItemCommentInput';\n\nconst useStyles = makeStyles({\n toolbar: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n});\n\nconst MaintainableItemToolbar = (props) => {\n const isDeleted = props.record.deleted;\n const formState = useFormState();\n const withEquipment = formState.values.equipments && formState.values.equipments.length;\n\n return (\n <Toolbar {...props} classes={useStyles()} style={{ justifyContent: 'flex-start' }}>\n {withEquipment && <SaveButton key=\"save_with_act\" redirect=\"show\" label={'ra.action.save_with_act'} />}\n <SaveWithOutActButton key=\"save_without_act\" redirect=\"show\" />\n </Toolbar>\n );\n};\n\nconst MaintainableItemEdit = (props) => {\n const controllerProps = useEditController(props);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n const user = useSelector((state) => state.user, shallowEqual);\n const regions = (user && user.regions) || [];\n\n return (\n <Edit title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n <BlankLayout>\n <SimpleForm toolbar={<MaintainableItemToolbar />}>\n <TextInput source=\"id\" disabled />\n {ability.can('update', 'Object', 'inventoryNumber') && (\n <TextInput source=\"inventoryNumber\" disabled={isDeleted} fullWidth />\n )}\n {ability.can('update', 'Object', 'type') && (\n <EnumInput source=\"type\" Enum=\"TypeConstructionObject\" useEnum={useEnum} />\n )}\n {ability.can('update', 'Object', 'stm') && (\n <ReferenceInput\n source=\"telemetrySystem.id\"\n label=\"resources.ConstructionObject.fields.telemetrySystem\"\n reference=\"TelemetrySystem\"\n allowEmpty\n emptyText=\"ra.message.no\"\n >\n <StmInput />\n </ReferenceInput>\n )}\n {ability.can('update', 'Object', 'eutpId') && <TextInput source=\"eutpId\" disabled={isDeleted} fullWidth />}\n {ability.can('update', 'Object', 'gmiId') && <TextInput source=\"gmiId\" disabled={isDeleted} fullWidth />}\n {ability.can('update', 'Object', 'name') && <TextInput source=\"name\" disabled={isDeleted} fullWidth />}\n {ability.can('update', 'Object', 'description') && (\n <TextInput source=\"description\" multiline disabled={isDeleted} fullWidth />\n )}\n {ability.can('update', 'Object', 'distributor') && (\n <ReferenceInput\n label=\"resources.ConstructionObject.fields.counterparty\"\n validate={[required()]}\n filter={{ regions: regions.map((r) => ({ id: r })) }}\n perPage={100}\n source=\"counterparty.id\"\n sort={{ field: 'name', order: 'ASC' }}\n reference=\"Counterparty\"\n >\n <SelectInput optionText=\"name\" />\n </ReferenceInput>\n )}\n {ability.can('update', 'Object', 'region') && (\n <ReferenceInput\n source=\"region.id\"\n validate={[required()]}\n label=\"resources.ConstructionObject.fields.region\"\n reference=\"Region\"\n perPage={100}\n sort={{ field: 'unrestrictedName' }}\n >\n <SelectInput optionText=\"unrestrictedName\" />\n </ReferenceInput>\n )}\n {ability.can('update', 'Object', 'manualAddr') && (\n <TextInput source=\"manualAddr\" disabled={isDeleted} fullWidth />\n )}\n {ability.can('update', 'Object', 'equipmentName') && (\n <TextInput source=\"equipmentName\" disabled={isDeleted} fullWidth />\n )}\n\n {ability.can('update', 'Object', 'defects') && (\n <ReferenceArrayInput\n source=\"defectsIds\"\n style={{ width: '100%' }}\n label=\"resources.ConstructionObject.fields.defects\"\n reference=\"Defect\"\n fullWidth\n >\n <CheckboxGroupInput row={false} fullWidth />\n </ReferenceArrayInput>\n )}\n <TemplateActionButtonsField />\n {ability.can('update', 'Object', 'equipments') && <EquipmentInput source=\"equipments\" />}\n {ability.can('update', 'Object', 'acts') && (\n <FileInputCustom\n source=\"acts\"\n disabledAdd={true}\n placeholder={<p>Перетащите акты сюда или нажмите для выбора</p>}\n multiple\n >\n <FileChip source=\"url\" title=\"name\" canOpen />\n </FileInputCustom>\n )}\n {ability.can('update', 'Object', 'files') && (\n <FileInputCustom source=\"files\" placeholder={<p>Перетащите файлы сюда или нажмите для выбора</p>} multiple>\n <FileChip source=\"url\" title=\"name\" canOpen />\n </FileInputCustom>\n )}\n {ability.can('update', 'Object', 'assemblyFiles') && (\n <FileInputCustom\n source=\"assemblyFiles\"\n placeholder={<p>Перетащите файлы сюда или нажмите для выбора</p>}\n multiple\n >\n <FileChip source=\"url\" title=\"name\" canOpen />\n </FileInputCustom>\n )}\n {ability.can('update', 'Object', 'assemblyActs') && (\n <FileInputCustom\n source=\"assemblyActs\"\n placeholder={<p>Перетащите файлы сюда или нажмите для выбора</p>}\n multiple\n >\n <FileChip source=\"url\" title=\"name\" canOpen />\n </FileInputCustom>\n )}\n {ability.can('update', 'Object', 'projectDocs') && (\n <FileInputCustom\n source=\"projectDocs\"\n placeholder={<p>Перетащите файлы сюда или нажмите для выбора</p>}\n multiple\n >\n <FileChip source=\"url\" title=\"name\" canOpen />\n </FileInputCustom>\n )}\n <MaintainableItemCommentInput source=\"comment\" fullWidth />\n {/*<UpdateReasonInput source=\"updateReason\" validate={[required()]} disabled={isDeleted} fullWidth />*/}\n <BooleanInput source=\"isArchived\" />\n </SimpleForm>\n </BlankLayout>\n </Edit>\n );\n};\n\nexport default MaintainableItemEdit;\n","import React from 'react';\nimport { Button } from 'react-admin';\nimport { Link } from 'react-router-dom';\nimport { TaskIcon } from '../Task';\nimport { useSelector, shallowEqual } from 'react-redux';\n\nconst CreateRelatedCommentButton = ({ record }) => {\n const user = useSelector((state) => state.user, shallowEqual);\n if (!user) return null;\n if (!record) return null;\n if (user.role === 'DISTRIBUTOR') {\n if (!record.counterparty) return null;\n if (user.distributor !== record.counterparty.id) return null;\n }\n return (\n <Button\n component={Link}\n to={{\n pathname: '/Task/create',\n state: {\n record: {\n maintainableItem: record.id,\n maintainableItemType: record.type,\n region: record.region.id,\n addrManual: record.manualAddr,\n name: record.name,\n distributor: record.counterparty ? record.counterparty.id : null,\n // 'processedBy.id': record.counterparty ? record.counterparty.defaultDispatcherId : null,\n // 'responsibledBy.id': record.distributor ? record.counterparty.defaultManagerId : null,\n // 'leadedBy.id': record.distributor ? record.counterparty.defaultMacroleaderId : null,\n processedBy: record.distributor ? { id: record.counterparty.defaultDispatcherId } : null,\n responsibledBy: record.distributor ? { id: record.counterparty.defaultManagerId } : null,\n leadedBy: record.distributor ? { id: record.counterparty.defaultMacroleaderId } : null,\n },\n },\n }}\n label=\"ra.action.create_task\"\n >\n <TaskIcon />\n </Button>\n );\n};\n\nexport default CreateRelatedCommentButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles(\n (theme) => ({\n toolbar: {\n position: 'relative',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-end',\n marginTop: theme.spacing(),\n marginBottom: theme.spacing(),\n },\n filters: {},\n actions: {},\n }),\n { name: 'RaReferenceToolbar' },\n);\n\nconst ReferenceManyToolbar = ({ classes: classesOverride, filters, actions, setFilter, ...props }) => {\n const classes = useStyles(props);\n return (\n <div className={classes.toolbar}>\n {filters &&\n React.cloneElement(filters, {\n ...props,\n setFilter,\n })}\n <span />\n {actions &&\n React.cloneElement(actions, {\n ...props,\n })}\n </div>\n );\n};\n\nReferenceManyToolbar.propTypes = {\n classes: PropTypes.object,\n filters: PropTypes.element,\n actions: PropTypes.element,\n};\n\nexport default React.memo(ReferenceManyToolbar);\n","import React, { cloneElement, Children } from 'react';\nimport PropTypes from 'prop-types';\nimport { useReferenceManyFieldController, useTranslate, ListContextProvider } from 'ra-core';\nimport sanitizeRestProps from './sanitizeRestProps';\nimport Paper from '@material-ui/core/Paper';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ReferenceManyToolbar from './ReferenceManyToolbar';\n// import useStateShowStorageProps from \"../../controller/useStateShowStorageProps\";\n// import useEffectShowStorageProps from \"../../controller/useEffectShowStorageProps\";\n\nexport const ReferenceManyField = (props) => {\n const { basePath, children, filter, page = 1, perPage, record, reference, resource, sort, source, target } = props;\n\n if (Children.count(children) !== 1) {\n throw new Error('<ReferenceManyField> only accepts a single child (like <Datagrid>)');\n }\n\n // const storageProps = useStateShowStorageProps(props)\n\n const controllerProps = useReferenceManyFieldController({\n basePath,\n filter,\n page,\n perPage,\n record,\n reference,\n resource,\n sort,\n source,\n target,\n // ...storageProps,\n });\n\n // useEffectShowStorageProps(props, controllerProps)\n\n return (\n <ListContextProvider value={controllerProps}>\n <ReferenceManyFieldView {...props} {...controllerProps} />\n </ListContextProvider>\n );\n};\n\nReferenceManyField.propTypes = {\n addLabel: PropTypes.bool,\n basePath: PropTypes.string,\n children: PropTypes.element.isRequired,\n className: PropTypes.string,\n filter: PropTypes.object,\n label: PropTypes.string,\n perPage: PropTypes.number,\n record: PropTypes.any,\n reference: PropTypes.string.isRequired,\n resource: PropTypes.string,\n sortBy: PropTypes.string,\n sortByOrder: PropTypes.oneOf(['ASC', 'DESC']),\n source: PropTypes.string.isRequired,\n sort: PropTypes.exact({\n field: PropTypes.string,\n order: PropTypes.string,\n }),\n target: PropTypes.string.isRequired,\n};\n\nReferenceManyField.defaultProps = {\n filter: {},\n perPage: 100,\n sort: { field: 'id', order: 'DESC' },\n source: 'id',\n addLabel: true,\n};\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(),\n '&:first-child': {\n marginTop: 0,\n },\n },\n}));\n\nexport const ReferenceManyFieldView = (props) => {\n const { basePath, children, pagination, reference, className, label, filters, actions, addLabel, ...rest } = props;\n const classes = useStyles();\n const translate = useTranslate();\n\n return (\n <div className={`${classes.root} ${className}`}>\n {label && (\n <Typography variant=\"subtitle2\" color=\"textSecondary\" gutterBottom noWrap>\n {translate(label)}\n </Typography>\n )}\n {(filters || actions) && (\n <ReferenceManyToolbar\n {...props}\n filters={filters}\n actions={actions}\n basePath={basePath}\n reference={reference}\n />\n )}\n <Paper>\n {cloneElement(Children.only(children), {\n ...sanitizeRestProps(rest),\n basePath,\n resource: reference,\n })}\n {pagination && props.total !== undefined && cloneElement(pagination, rest)}\n </Paper>\n </div>\n );\n};\n\nReferenceManyFieldView.propTypes = {\n basePath: PropTypes.string,\n children: PropTypes.element,\n className: PropTypes.string,\n currentSort: PropTypes.exact({\n field: PropTypes.string,\n order: PropTypes.string,\n }),\n data: PropTypes.any,\n ids: PropTypes.array,\n loaded: PropTypes.bool,\n pagination: PropTypes.element,\n reference: PropTypes.string,\n setSort: PropTypes.func,\n};\n\nexport default ReferenceManyField;\n","import React from 'react';\nimport { Form, FormSpy } from 'react-final-form';\nimport arrayMutators from 'final-form-arrays';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { FilterFormInput } from 'react-admin';\n\nconst sanitizeRestProps = ({\n anyTouched,\n asyncValidate,\n asyncValidating,\n autofill,\n blur,\n change,\n clearAsyncError,\n clearFields,\n clearSubmit,\n clearSubmitErrors,\n destroy,\n dirty,\n dirtyFields,\n dirtyFieldsSinceLastSubmit,\n dirtySinceLastSubmit,\n dispatch,\n displayedFilters,\n errors,\n filters,\n filterValues,\n form,\n handleSubmit,\n hasSubmitErrors,\n hasValidationErrors,\n hideFilter,\n initialize,\n initialized,\n initialValues,\n invalid,\n modified,\n modifiedSinceLastSubmit,\n pristine,\n pure,\n reset,\n resetSection,\n save,\n setFilter,\n setFilters,\n submit,\n submitAsSideEffect,\n submitError,\n submitErrors,\n submitFailed,\n submitSucceeded,\n submitting,\n touch,\n touched,\n triggerSubmit,\n untouch,\n valid,\n validate,\n validating,\n values,\n visited,\n __versions,\n ...props\n}) => props;\n\nconst handleSubmit = (event) => {\n event.preventDefault();\n return false;\n};\n\nconst handleFinalFormSubmit = () => {};\n\nconst FormSpySubscription = { values: true, pristine: true };\n\nconst useStyles = makeStyles(\n (theme) => ({\n form: {\n marginTop: -theme.spacing(4),\n paddingTop: 0,\n display: 'flex',\n alignItems: 'flex-end',\n flexWrap: 'wrap',\n minHeight: theme.spacing(10),\n pointerEvents: 'none',\n },\n clearFix: { clear: 'right' },\n }),\n { name: 'RaReferenceManyFilterForm' },\n);\n\nconst ReferenceManyFilterForm = (props) => {\n const { className, classes: classesOverride, filters, resource, addLabel, initialValues, ...rest } = props;\n const classes = useStyles(props);\n\n return (\n <Form\n onSubmit={handleFinalFormSubmit}\n initialValues={initialValues}\n mutators={{ ...arrayMutators }}\n render={(formProps) => (\n <>\n <FormSpy\n subscription={FormSpySubscription}\n onChange={({ pristine, values }) => {\n if (pristine) return;\n rest && rest.setFilters(values);\n }}\n />\n <form className={classnames(className, classes.form)} {...sanitizeRestProps(rest)} onSubmit={handleSubmit}>\n {filters.map((filterElement) => (\n <FilterFormInput key={filterElement.props.source} filterElement={filterElement} resource={resource} />\n ))}\n <div className={classes.clearFix} />\n </form>\n </>\n )}\n />\n );\n};\n\nexport default ReferenceManyFilterForm;\n","import React from 'react';\nimport ReferenceManyFilterForm from './ReferenceManyFilterForm';\nimport { sanitizeListRestProps, useListContext } from 'ra-core';\n\nconst ReferenceManyFilter = (props) => {\n const { classes: classesOverride, children, ...rest } = props;\n const { resource, setFilters, filterValues } = useListContext(props);\n\n return (\n <ReferenceManyFilterForm\n resource={resource}\n filters={React.Children.toArray(children)}\n initialValues={filterValues}\n setFilters={setFilters}\n {...sanitizeListRestProps(rest)}\n />\n );\n};\n\nexport default ReferenceManyFilter;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { stringify } from 'query-string';\nimport Button from '@material-ui/core/Button';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n button: {\n color: theme.palette.text.secondary,\n },\n}));\n\nexport const ReferenceListLinkButton = ({ className, basePath, target, reference, record, filterValues, ...props }) => {\n const classes = useStyles();\n\n return (\n <Button\n component={Link}\n to={{\n pathname: basePath,\n search: stringify({\n filter: JSON.stringify({\n [target]: record.id,\n ...filterValues,\n }),\n }),\n }}\n size=\"small\"\n disableElevation\n className={classes.button}\n >\n Открыть список\n </Button>\n );\n};\n\nexport default ReferenceListLinkButton;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport classnames from 'classnames';\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'flex-start',\n },\n }),\n { name: 'RaReferenceManyActions' },\n);\n\nconst ReferenceManyActions = (props) => {\n const { className, children, ...rest } = props;\n const classes = useStyles(props);\n return <div className={classnames(classes.root, className)}>{children}</div>;\n};\n\nexport default ReferenceManyActions;\n","import React from 'react';\nimport Chip from '@material-ui/core/Chip';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n}));\n\nconst IsArchivedField = ({ record, ...props }) => {\n const classes = useStyles();\n if (!record || !record.isArchived) return null;\n\n return <Chip label=\"Архивный\" />;\n};\n\nexport default IsArchivedField;\n","import React from 'react';\n\nimport CardContent from '@material-ui/core/CardContent';\nimport Box from '@material-ui/core/Box';\nimport Chip from '@material-ui/core/Chip';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport { SimpleShowLayout, DateField, TextField, ReferenceField } from 'react-admin';\nimport BlankLayout from '../Layout/BlankLayout';\nimport IsArchivedField from './IsArchivedField';\nimport EnumField from '../Fields/EnumField';\n\nconst useStyles = makeStyles((theme) => ({\n title: {\n marginRight: theme.spacing(),\n fontWeight: 500,\n flexGrow: 1,\n },\n inlineLayout: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n inlineField: {\n marginRight: theme.spacing(3),\n '&:last-child': {\n marginRight: 0,\n },\n },\n}));\n\nconst dateTimeOptions = {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n};\n\nconst MaintainableItemShowMainBlock = (props) => {\n return (\n <BlankLayout {...props}>\n <MaintainableItemShowMainBlockView />\n </BlankLayout>\n );\n};\n\nconst MaintainableItemShowMainBlockView = ({ saving, save, ...props }) => {\n const classes = useStyles();\n const { record } = props;\n if (!record) return null;\n const description = record.description;\n const label = record.name;\n\n return (\n <>\n <CardContent>\n <Box display=\"flex\" marginBottom={2}>\n <Typography variant=\"h5\" component=\"h2\" className={classes.title}>\n {label}\n </Typography>\n </Box>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"p\">\n {description}\n </Typography>\n </CardContent>\n <SimpleShowLayout className={classes.inlineLayout} {...props}>\n <TextField source=\"inventoryNumber\" className={classes.inlineField} />\n <EnumField source=\"type\" className={classes.inlineField} />\n <ReferenceField\n source=\"telemetrySystem.id\"\n label=\"resources.ConstructionObject.fields.telemetrySystem\"\n reference=\"TelemetrySystem\"\n link=\"show\"\n className={classes.inlineField}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n <TextField source=\"eutpId\" className={classes.inlineField} />\n <TextField source=\"updateReason\" />\n <TextField source=\"gmiId\" />\n <TextField source=\"hashNumber\" label=\"resources.ConstructionObject.fields.number\" />\n </SimpleShowLayout>\n <CardContent>\n <IsArchivedField className={classes.inlineField} record={record} />\n {/*<StatusChip {...props} source=\"status\" />*/}\n {/*<EnumChip {...props} source=\"type\" />*/}\n {/*<DeadlineChip {...props} />*/}\n </CardContent>\n </>\n );\n};\n\nexport default MaintainableItemShowMainBlock;\n","import React, { useEffect } from 'react';\nimport SendIcon from '@material-ui/icons/Send';\nimport { makeStyles } from '@material-ui/core/styles';\nimport IconButton from '@material-ui/core/IconButton';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport TextField from '@material-ui/core/TextField';\nimport { useVersion } from 'react-admin';\nimport { useForm } from 'react-final-form';\n\nconst useStyles = makeStyles((theme) => ({\n input: {\n paddingTop: 20,\n height: '100%',\n },\n adornment: {\n // minHeight: 30,\n // marginTop: 8\n },\n margin: {\n margin: theme.spacing(1),\n },\n icon: {\n color: theme.palette.primary.light,\n },\n}));\n\nconst MaintainableItemCommentsInput = ({ onSubmit, input, ...props }) => {\n const classes = useStyles();\n const version = useVersion();\n const form = useForm();\n\n useEffect(() => {\n form.reset();\n }, [form, version]);\n\n const handleKeyDown = (event) => {\n if (event.keyCode === 13 && event.shiftKey === false) {\n onSubmit(event); // <--- all the form values are in a prop\n }\n };\n\n return (\n <TextField\n {...input}\n fullWidth\n multiline\n variant=\"outlined\"\n // classes={classes}\n InputProps={{\n endAdornment: (\n <InputAdornment className={classes.adornment} position=\"end\">\n <IconButton\n aria-label=\"toggle password visibility\"\n className={classes.icon}\n onClick={(event) => {\n onSubmit(event);\n setTimeout(form.reset);\n }}\n edge=\"end\"\n >\n <SendIcon />\n </IconButton>\n </InputAdornment>\n ),\n onKeyDown: handleKeyDown,\n // classes: {input: classes.input},\n placeholder: 'Напишите сообщение...',\n }}\n />\n );\n};\n\nexport default MaintainableItemCommentsInput;\n","import React, { Children, isValidElement, useState } from 'react';\nimport moment from 'moment';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\nimport AvatarField from '../Fields/AvatarField';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport { Link } from 'react-admin';\n\nimport IconButton from '@material-ui/core/IconButton';\nimport Divider from '@material-ui/core/Divider';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport EditIcon from '@material-ui/icons/Edit';\nimport ClearIcon from '@material-ui/icons/Clear';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useForm } from 'react-final-form';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { Menu } from '@material-ui/core';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport { useTranslate } from 'react-admin';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Typography from '@material-ui/core/Typography';\nimport { ability } from '../../abilityProvider';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport DoneIcon from '@material-ui/icons/Done';\nimport ErrorIcon from '@material-ui/icons/Error';\n\nconst useStyles = makeStyles((theme) => {\n return {\n iconButton: {},\n icon: {\n height: 16,\n width: 16,\n },\n divider: {\n '&:last-child': {\n display: 'none',\n },\n },\n avatar: {\n background: theme.palette.secondary.main,\n color: theme.palette.secondary.contrastText,\n },\n menuRoot: {\n height: '200vh',\n bottom: '-10px',\n },\n loading: {\n height: 5,\n width: 5,\n },\n };\n});\n\nconst MoreButton = ({ label = 'ra.action.more', children, className, ...props }) => {\n const translate = useTranslate();\n const [anchorEl, setAnchorEl] = React.useState(null);\n const classes = useStyles();\n const open = Boolean(anchorEl);\n\n const handleClick = (event) => {\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = (event) => {\n event.stopPropagation();\n setAnchorEl(null);\n };\n\n return (\n <>\n <Tooltip title={translate('ra.action.more')} placement=\"left\">\n <IconButton onClick={handleClick} className={className} size=\"small\" key=\"button\" {...props}>\n <MoreVertIcon />\n </IconButton>\n </Tooltip>\n <Menu\n id=\"more-menu\"\n anchorEl={anchorEl}\n keepMounted\n disablePortal={true}\n modifiers={{\n flip: {\n enabled: true,\n },\n preventOverflow: {\n enabled: true,\n boundariesElement: 'window',\n },\n }}\n anchorOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n open={open}\n onClose={handleClose}\n >\n {Children.map(children, (field) =>\n field && isValidElement(field) ? React.cloneElement(field, { ...props }) : null,\n )}\n </Menu>\n </>\n );\n};\n\nconst stopPropagation = (e) => e.stopPropagation();\n\nconst MaintainableItemComment = ({ record, deleteComment, removeComment, selected, setSelected, last, ...props }) => {\n const form = useForm();\n const user = useSelector((state) => state.user, shallowEqual);\n const classes = useStyles();\n const [open, setOpen] = useState(false);\n\n const translate = useTranslate();\n const { loading } = record || {};\n const { edited } = record || {};\n const { error } = record || {};\n\n if (!record) return null;\n const author = record.author;\n const body = record.body;\n const deleted = record.deleted;\n const createdAt = record.createdAt && moment(record.createdAt).format('L LT');\n const deletedAt = record.deletedAt && moment(record.deletedAt).format('L LT');\n const auhorLinkPath = `/User/${encodeURIComponent(record.authorId)}/show`;\n const isPrivate = record.isPrivate;\n\n const handleEditComment = () => {\n setSelected(record.id);\n form.change('isPrivate', isPrivate);\n form.change('body', body);\n form.change('id', record.id);\n form.change('author', user);\n };\n\n const handleOpen = (event) => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n return (\n <>\n <ListItem\n alignItems=\"flex-start\"\n selected={selected === record.id}\n onMouseEnter={handleOpen}\n onMouseLeave={handleClose}\n >\n <ListItemAvatar>\n {author && (\n <AvatarField className={classes.avatar} record={author} />\n )}\n </ListItemAvatar>\n <ListItemText\n primary={\n <>\n {author ? (\n <Link to={auhorLinkPath} onClick={stopPropagation}>\n {author.name}\n </Link>\n ) : (\n \"Автор удален\"\n )}\n  \n <strong>•</strong>\n  \n {!deleted ? createdAt : deletedAt}\n {loading && (\n <>\n  <strong>•</strong> \n <CircularProgress style={{ height: 14, width: 14 }} />\n </>\n )}\n {!loading && !error && (\n <>\n  <strong>•</strong> \n <DoneIcon fontSize=\"inherit\" />\n </>\n )}\n {error && (\n <>\n  <strong>•</strong> \n <ErrorIcon color=\"error\" fontSize=\"inherit\" />\n </>\n )}\n {edited && (\n <>\n  <strong>•</strong> ред.\n </>\n )}\n </>\n }\n primaryTypographyProps={{ variant: 'body2', color: 'textSecondary' }}\n secondary={!deleted ? body : translate('ra.message.deleted')}\n secondaryTypographyProps={{ variant: 'body2', color: deleted ? 'textSecondary' : 'textPrimary' }}\n />\n {(!deleted\n ? ability.can('update', 'Comment') || ability.can('remove', 'Comment') || record.authorId === user.id\n : ability.can('delete', 'Comment')) &&\n !error && (\n <MoreButton>\n {!deleted && (ability.can('update', 'Comment') || record.authorId === user.id) && (\n <MenuItem onClick={handleEditComment}>\n <ListItemIcon>\n <EditIcon />\n </ListItemIcon>\n <Typography variant=\"inherit\">{translate('ra.action.edit')}</Typography>\n </MenuItem>\n )}\n {!deleted && (ability.can('remove', 'Comment') || record.authorId === user.id) && (\n <MenuItem onClick={() => removeComment(record.id)}>\n <ListItemIcon>\n <ClearIcon />\n </ListItemIcon>\n <Typography variant=\"inherit\">{translate('ra.action.remove')}</Typography>\n </MenuItem>\n )}\n {deleted && (ability.can('delete', 'Comment') || record.authorId === user.id) && (\n <MenuItem onClick={() => deleteComment(record.id)}>\n <ListItemIcon>\n <ClearIcon />\n </ListItemIcon>\n <Typography variant=\"inherit\">{translate('ra.action.delete')}</Typography>\n </MenuItem>\n )}\n </MoreButton>\n )}\n </ListItem>\n {!last && <Divider variant=\"inset\" component=\"li\" className={classes.divider} />}\n </>\n );\n};\n\nexport default MaintainableItemComment;\n","import React, { useEffect, useState } from 'react';\nimport { useDataProvider } from 'react-admin';\nimport moment from 'moment';\nimport MaintainableItemComment from './MaintainableItemComment';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\n\nconst MaintainableItemCommentsList = ({\n comments,\n selectedComment,\n setSelectedComment,\n handleDeleteComment,\n handleRemoveComment,\n ...props\n}) => {\n const dataProvider = useDataProvider();\n const [users, setUsers] = useState([]);\n\n useDeepCompareEffect(() => {\n if (!comments || !comments.length) return;\n const ids = comments.map((c) => c.authorId);\n dataProvider\n .getMany('User', {\n ids,\n })\n .then(({ data }) => setUsers(data));\n }, [comments]);\n\n\n return (\n <>\n {comments &&\n comments.sort &&\n comments\n .sort((first, second) => {\n const time1 = moment(first.createdAt).unix();\n const time2 = moment(second.createdAt).unix();\n if (time1 > time2) return 1;\n if (time2 > time1) return -1;\n return 0;\n })\n .map((comment) => {\n const author = users.find((user) => user.id === comment.authorId);\n return (\n <MaintainableItemComment\n record={{ ...comment, author }}\n selected={selectedComment}\n setSelected={setSelectedComment}\n deleteComment={handleDeleteComment}\n removeComment={handleRemoveComment}\n key={comment.id}\n />\n );\n })}\n </>\n );\n};\n\nexport default MaintainableItemCommentsList;\n","import React, { useEffect, useState } from 'react';\nimport { Form, Field } from 'react-final-form';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport MaintainableItemCommentsInput from './MaintainableItemCommentsInput';\nimport ListItem from '@material-ui/core/ListItem';\nimport AvatarField from '../Fields/AvatarField';\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport { useVersion } from 'react-admin';\nimport updateCommentsToTask from '../../dataProvider/Core/updateCommentsToTask';\nimport MaintainableItemComment from './MaintainableItemComment';\nimport List from '@material-ui/core/List';\nimport { makeStyles } from '@material-ui/core/styles';\nimport cuid from 'cuid';\nimport moment from 'moment';\nimport { omit } from 'lodash';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\nimport { useDataProvider } from 'react-admin';\nimport MaintainableItemCommentsList from './MaintainableItemCommentsList';\n\nconst useStyles = makeStyles((theme) => {\n return {\n avatar: {\n background: theme.palette.secondary.main,\n color: theme.palette.secondary.contrastText,\n },\n };\n});\n\nconst MaintainableItemCommentForm = ({ record, ...props }) => {\n const classes = useStyles();\n const user = useSelector((state) => state.user, shallowEqual);\n const dataProvider = useDataProvider();\n const [comments, setComments] = useState(record.comments);\n const [selectedComment, setSelectedComment] = useState(null);\n if (typeof record.comments === 'string') record.comments = null;\n const version = useVersion();\n\n useDeepCompareEffect(() => {\n setComments(record.comments);\n setSelectedComment(null);\n }, [version, record.comments || []]);\n\n const handleSubmit = async (values) => {\n if (!record || !record.id || !values.body) return;\n if (values.id) {\n const tempComment = {\n body: values.body,\n edited: true,\n updatedAt: moment().toISOString(),\n loading: true,\n };\n setComments(comments.map((c) => (c.id === values.id ? { ...c, ...tempComment } : c)));\n dataProvider\n .update('ConstructionObject', {\n id: record.id,\n data: {\n ...omit(record, ['id', 'acts', 'files', 'assemblyFiles', 'assemblyActs', 'projectDocs']),\n comments: {\n update: [\n {\n where: { id: values.id },\n data: {\n body: values.body,\n authorId: values.author.id,\n edited: true,\n },\n },\n ],\n },\n },\n })\n .then((result) => {\n const {\n data: { comments },\n } = result;\n setComments(comments);\n return result;\n })\n .catch((e) => {\n console.log(e);\n tempComment.error = e;\n tempComment.loading = false;\n setComments(comments.map((c) => (c.id === values.id ? { ...c, ...tempComment } : c)));\n })\n .finally(() => {\n setSelectedComment(null);\n });\n } else {\n const id = cuid();\n const tempComment = { ...values, authorId: user.id, id, loading: true, createdAt: moment().toISOString() };\n setComments([...comments, tempComment]);\n dataProvider\n .update('ConstructionObject', {\n id: record.id,\n data: {\n ...omit(record, ['id', 'acts', 'files', 'assemblyFiles', 'assemblyActs', 'projectDocs']),\n comments: {\n create: [\n {\n body: values.body,\n authorId: values.author.id,\n },\n ],\n },\n },\n })\n .then((result) => {\n const {\n data: { comments },\n } = result;\n setComments(comments);\n return result;\n })\n .catch((e) => {\n console.log(e);\n tempComment.error = e;\n tempComment.loading = false;\n setComments([...comments, tempComment]);\n });\n }\n };\n\n // const handleDeleteComment = async (id) => {\n // await updateCommentsToConstructionObject({\n // where: {id: record.id},\n // comments: {\n // delete: [{id}]\n // }\n // })\n // refresh();\n // }\n\n return (\n <Form\n onSubmit={handleSubmit}\n initialValues={{\n body: null,\n author: user,\n }}\n render={({ handleSubmit, form }) => {\n const handleDeleteComment = async (id) => {\n setSelectedComment(null);\n setComments(comments.filter((comment) => comment.id !== id));\n const {\n data: { comments: coms },\n } = await dataProvider.update('ConstructionObject', {\n id: record.id,\n data: {\n ...omit(record, ['id', 'acts', 'files', 'assemblyFiles', 'assemblyActs', 'projectDocs']),\n comments: {\n delete: [{ id }],\n },\n },\n });\n form.reset();\n setComments(coms);\n };\n\n const handleRemoveComment = async (id) => {\n setSelectedComment(null);\n setComments(\n comments.map((comment) =>\n comment.id !== id\n ? comment\n : {\n ...comment,\n deleted: true,\n deletedAt: moment().toISOString(),\n loading: true,\n },\n ),\n );\n const {\n data: { comments: coms },\n } = await dataProvider.update('ConstructionObject', {\n id: record.id,\n data: {\n ...omit(record, ['id', 'acts', 'files', 'assemblyFiles', 'assemblyActs', 'projectDocs']),\n comments: {\n update: [\n {\n where: { id },\n data: { deleted: true, deletedAt: moment().toISOString() },\n },\n ],\n },\n },\n });\n form.reset();\n setComments(coms);\n };\n\n return (\n <form\n onSubmit={(event) => {\n handleSubmit(event);\n form.reset();\n }}\n >\n <List dense>\n <MaintainableItemCommentsList\n comments={comments}\n handleDeleteComment={handleDeleteComment}\n handleRemoveComment={handleRemoveComment}\n selectedComment={selectedComment}\n setSelectedComment={setSelectedComment}\n />\n <ListItem alignItems=\"flex-start\">\n <ListItemAvatar>\n <AvatarField className={classes.avatar} record={user} />\n </ListItemAvatar>\n <ListItemText>\n <Field\n name=\"body\"\n onSubmit={async (event) => {\n await handleSubmit(event);\n form.reset();\n }}\n component={MaintainableItemCommentsInput}\n />\n </ListItemText>\n </ListItem>\n </List>\n </form>\n );\n }}\n />\n );\n};\n\nexport default MaintainableItemCommentForm;\n","import React, { useState } from 'react';\nimport {\n useShowController,\n TextField,\n DateField,\n ReferenceField,\n ArrayField,\n Datagrid,\n Pagination,\n ReferenceArrayField,\n SingleFieldList,\n ChipField,\n TopToolbar,\n EditButton,\n} from 'react-admin';\nimport EnumField from '../Fields/EnumField';\nimport { ShowView } from '../Layout/Show';\nimport ShowLayout from '../Layout/ShowLayout';\nimport BlankLayout from '../Layout/BlankLayout';\nimport TitleForRecord from '../Layout/TitleForRecord';\nimport BannerDeleted from '../Layout/BannerDeleted';\nimport MoreContent from '../Layout/MoreContent';\nimport Separator from '../Layout/Separator';\nimport { ReferenceDatagrid as ReferenceTaskDatagrid } from '../Task/TaskList';\nimport FileCard from '../Fields/FileCard';\nimport GridField from '../Fields/GridField';\nimport DownloadFilesButton from '../Buttons/DownloadFilesButton';\nimport CreateTaskFromObjectButton from './createTaskFromObjectButton';\nimport ReferenceManyField from '../Fields/ReferenceManyField';\nimport ReferenceManyFilter from '../Fields/ReferenceManyFilter';\nimport ReferenceListLinkButton from '../Buttons/ReferenceListLinkButton';\nimport ReferenceManyActions from '../Fields/ReferenceManyActions';\nimport SearchInput from '../Inputs/SearchInput';\nimport EnumInput from '../Inputs/EnumInput';\nimport { ability } from '../../abilityProvider';\nimport NestedField from '../Fields/NestedField';\nimport Grid from '@material-ui/core/Grid';\nimport { makeStyles } from '@material-ui/core/styles';\nimport MaintainableItemShowMainBlock from './MaintainableItemShowMainBlock';\nimport MaintainableItemCommentForm from './MaintainableItemCommentForm';\nimport PictureGallery from '../Fields/PictureGallery';\nimport MoreActionsButton from '../Buttons/MoreActionsButton';\nimport FileDownloadIcon from '../Icons/FileDownload';\n\nconst useStyles = makeStyles((theme) => ({\n link: {\n color: theme.palette.link.main,\n },\n}));\n\nconst MaintainableItemActions = ({ basePath, data, ...props }) => (\n <TopToolbar>\n <MoreActionsButton label=\"ra.action.download\" icon={<FileDownloadIcon />}>\n <DownloadFilesButton basePath={basePath} record={data} source=\"acts\" />\n <DownloadFilesButton basePath={basePath} record={data} source=\"files\" />\n <DownloadFilesButton basePath={basePath} record={data} source=\"assemblyFiles\" />\n <DownloadFilesButton basePath={basePath} record={data} source=\"assemblyActs\" />\n <DownloadFilesButton basePath={basePath} record={data} source=\"projectDocs\" />\n </MoreActionsButton>\n {ability.can('create', 'Task') && <CreateTaskFromObjectButton basePath={basePath} record={data} />}\n <EditButton basePath={basePath} record={data} />\n </TopToolbar>\n);\n\nconst ReferenceManyFilters = (props) => {\n return (\n <ReferenceManyFilter {...props}>\n <SearchInput source=\"q\" id={`${props.reference}.q`} alwaysOn />\n <EnumInput source=\"type\" Enum=\"TaskType\" emptyText=\"ra.message.no\" alwaysOn />\n </ReferenceManyFilter>\n );\n};\n\nconst ReferenceManyActionButtons = (props) => {\n return (\n <ReferenceManyActions>\n <ReferenceListLinkButton {...props} />\n </ReferenceManyActions>\n );\n};\n\nconst MaintainableItemShowGrid = (props) => {\n const classes = useStyles();\n const { record } = props;\n const [open, setOpen] = useState(false);\n\n return (\n <Grid container spacing={3}>\n <Grid item xs={12} lg={6}>\n <PictureGallery\n record={record}\n sources={['files', 'acts', 'assemblyFiles', 'assemblyActs']}\n open={open}\n setOpen={setOpen}\n />\n <MaintainableItemShowMainBlock label=\"main\" {...props} />\n {record && record.defects && !!record.defects.length && (\n <ShowLayout label=\"defects\" {...props}>\n <ReferenceArrayField\n source=\"defectsIds\"\n label=\"resources.ConstructionObject.fields.defects\"\n addLabel={false}\n reference=\"Defect\"\n >\n <SingleFieldList linkType=\"show\">\n <ChipField source=\"name\" />\n </SingleFieldList>\n </ReferenceArrayField>\n </ShowLayout>\n )}\n {/*{ record && record.equipmentName && <ShowLayout label=\"equipmentName\" {...props}>*/}\n {/* <TextField source=\"equipmentName\" addLabel={false}/>*/}\n {/*</ShowLayout>}*/}\n <BlankLayout\n label=\"equipments\"\n {...props}\n record={{ ...record, equipments: record.equipments ? [...record.equipments, {}] : [{}] }}\n >\n <ArrayField source=\"equipments\" addLabel={false}>\n <Datagrid>\n {/*<ReferenceField source=\"name\" label='resources.EquipmentCatalog.fields.name' reference=\"EquipmentCatalog\" sortable={false} >*/}\n <TextField source=\"name\" />\n {/*</ReferenceField>*/}\n <EnumField source=\"type\" sortable={false} />\n <TextField source=\"count\" sortable={false} />\n <TextField source=\"factoryNumber\" sortable={false} />\n </Datagrid>\n </ArrayField>\n </BlankLayout>\n <BlankLayout label=\"comments\" {...props}>\n <MaintainableItemCommentForm />\n </BlankLayout>\n </Grid>\n <Grid item xs={12} lg={6}>\n <ShowLayout label=\"location\" {...props}>\n <NestedField\n reference=\"Counterparty\"\n link={ability.can('getOne', 'Distributor') ? 'show' : false}\n label=\"resources.ConstructionObject.fields.counterparty\"\n source=\"counterparty\"\n >\n <TextField source=\"name\" />\n </NestedField>\n <ReferenceField\n source=\"region.id\"\n label=\"resources.ConstructionObject.fields.region\"\n reference=\"Region\"\n link={false}\n >\n <TextField source=\"unrestrictedName\" />\n </ReferenceField>\n <TextField source=\"manualAddr\" />\n </ShowLayout>\n <BlankLayout label=\"acts\" component={'div'} {...props}>\n <GridField source=\"acts\" xs={{ count: 'auto-fill', size: [20, '1fr'] }}>\n <FileCard\n resourse=\"ConstructionObjectFile\"\n onClick={() => setOpen(true)}\n source=\"url\"\n title=\"name\"\n canOpen\n />\n </GridField>\n </BlankLayout>\n <BlankLayout label=\"files\" component={'div'} {...props}>\n <GridField source=\"files\" xs={{ count: 'auto-fill', size: [20, '1fr'] }}>\n <FileCard\n resourse=\"ConstructionObjectFile\"\n source=\"url\"\n title=\"name\"\n canOpen\n onClick={() => setOpen(true)}\n />\n </GridField>\n </BlankLayout>\n <BlankLayout label=\"assemblyFiles\" component={'div'} {...props}>\n <GridField source=\"assemblyFiles\" xs={{ count: 'auto-fill', size: [20, '1fr'] }}>\n <FileCard\n resourse=\"ConstructionObjectFile\"\n onClick={() => setOpen(true)}\n source=\"url\"\n title=\"name\"\n canOpen\n />\n </GridField>\n </BlankLayout>\n <BlankLayout label=\"assemblyActs\" component={'div'} {...props}>\n <GridField source=\"assemblyActs\" xs={{ count: 'auto-fill', size: [20, '1fr'] }}>\n <FileCard\n resourse=\"ConstructionObjectFile\"\n source=\"url\"\n title=\"name\"\n canOpen\n onClick={() => setOpen(true)}\n />\n </GridField>\n </BlankLayout>\n <BlankLayout label=\"projectDocs\" component={'div'} {...props}>\n <GridField source=\"projectDocs\" xs={{ count: 'auto-fill', size: [20, '1fr'] }}>\n <FileCard\n resourse=\"ConstructionObjectFile\"\n source=\"url\"\n title=\"name\"\n canOpen\n onClick={() => setOpen(true)}\n />\n </GridField>\n </BlankLayout>\n </Grid>\n </Grid>\n );\n};\n\nconst MaintainableItemShow = (props) => {\n const controllerProps = useShowController(props);\n const showMoreButton = React.useRef(null);\n const showHistoryButton = React.useRef(null);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n\n return (\n <ShowView\n title={<TitleForRecord source=\"name\" {...props} />}\n actions={<MaintainableItemActions />}\n {...props}\n {...controllerProps}\n >\n {isDeleted && <BannerDeleted />}\n\n <MaintainableItemShowGrid />\n\n {/*<ShowLayout>*/}\n {/* <IsArchivedField/>*/}\n {/* <TextField source=\"inventoryNumber\" />*/}\n {/* <EnumField source=\"type\" />*/}\n {/* <ReferenceField source=\"stm.id\" label=\"resources.ConstructionObject.fields.stm\" reference=\"TelemetrySystem\" link=\"show\" >*/}\n {/* <TextField source=\"name\" />*/}\n {/* </ReferenceField>*/}\n {/* <TextField source=\"eutpId\" />*/}\n {/* <TextField source=\"name\" />*/}\n {/* <TextField source=\"description\" />*/}\n {/* <NestedField reference=\"Counterparty\" link={ability.can('getOne', 'Distributor') ? 'show' : false} label=\"resources.ConstructionObject.fields.distributor\" source=\"distributor\" sort={{ field: 'name', order: 'ASC' }} >*/}\n {/* <TextField source=\"name\"/>*/}\n {/* </NestedField>*/}\n {/* <ReferenceField source=\"region\" reference=\"Region\" link={false}>*/}\n {/* <TextField source=\"unrestrictedName\" />*/}\n {/* </ReferenceField>*/}\n {/* <TextField source=\"manualAddr\" />*/}\n {/* <TextField source=\"updateReason\" />*/}\n {/* <ReferenceArrayField source=\"defectsIds\" label=\"resources.ConstructionObject.fields.defects\" reference=\"Defect\">*/}\n {/* <SingleFieldList linkType=\"show\" >*/}\n {/* <ChipField source=\"name\" />*/}\n {/* </SingleFieldList>*/}\n {/* </ReferenceArrayField>*/}\n {/* <TextField source=\"equipmentName\" />*/}\n {/* <ArrayField source=\"equipments\">*/}\n {/* <Datagrid>*/}\n {/* /!*<ReferenceField source=\"name\" label='resources.EquipmentCatalog.fields.name' reference=\"EquipmentCatalog\" sortable={false} >*!/*/}\n {/* <TextField source=\"name\" />*/}\n {/* /!*</ReferenceField>*!/*/}\n {/* <EnumField source=\"type\" sortable={false} />*/}\n {/* <TextField source=\"count\" sortable={false} />*/}\n {/* <TextField source=\"factoryNumber\" sortable={false} />*/}\n {/* </Datagrid>*/}\n {/* </ArrayField>*/}\n {/*</ShowLayout>*/}\n {/*<BlankLayout label=\"acts\" component={\"div\"} {...props}>*/}\n {/* <GridField source=\"acts\" xs={{ count: \"auto-fill\", size: [20, \"1fr\"] }} >*/}\n {/* <FileCard resourse=\"ConstructionObjectFile\" source=\"url\" title=\"name\" canOpen />*/}\n {/* </GridField>*/}\n {/*</BlankLayout>*/}\n {/*<BlankLayout label=\"files\" component={\"div\"} {...props}>*/}\n {/* <GridField source=\"files\" xs={{ count: \"auto-fill\", size: [20, \"1fr\"] }} >*/}\n {/* <FileCard resourse=\"ConstructionObjectFile\" source=\"url\" title=\"name\" canOpen />*/}\n {/* </GridField>*/}\n {/*</BlankLayout>*/}\n\n <ReferenceManyField\n key=\"ReferenceTasks\"\n reference=\"Task\"\n target=\"maintainableItem\"\n label=\"resources.ConstructionObject.fields.tasks\"\n filters={<ReferenceManyFilters />}\n actions={<ReferenceManyActionButtons />}\n sort={{ field: 'createdAt', order: 'ASC' }}\n pagination={<Pagination />}\n resource=\"Task\"\n >\n <ReferenceTaskDatagrid />\n </ReferenceManyField>\n\n <Separator action={<div ref={showMoreButton}></div>} />\n\n <MoreContent showMoreButton={showMoreButton}>\n <ShowLayout>\n <TextField source=\"id\" />\n <DateField source=\"createdAt\" />\n <TextField source=\"createdBy.name\" label=\"resources.ConstructionObject.fields.createdBy\" />\n <DateField source=\"updatedAt\" />\n <DateField source=\"archivedAt\" />}\n </ShowLayout>\n </MoreContent>\n\n {/*<Separator action={(<div ref={showHistoryButton} ></div>)} />*/}\n\n {/*<MoreContent showMoreButton={showHistoryButton} label=\"ra.action.show_history\">*/}\n {/* <BlankLayout>*/}\n {/* <ReferenceManyField reference=\"ObjectHistory\" target=\"itemId\" sort={{ field: 'createdAt', order: 'DESC' }} perPage={10} pagination={<Pagination />} >*/}\n {/* <Datagrid {...props} >*/}\n {/* <EnumField source=\"action\"/>*/}\n {/* <ReferenceField source=\"createdBy\" reference=\"User\" resource=\"ConstructionObject\" >*/}\n {/* <TextField source=\"name\"/>*/}\n {/* </ReferenceField>*/}\n {/* <DateField source=\"createdAt\" textAlign=\"right\" resource=\"ConstructionObject\"/>*/}\n {/* </Datagrid>*/}\n {/* </ReferenceManyField>*/}\n {/* </BlankLayout>*/}\n {/*</MoreContent>*/}\n </ShowView>\n );\n};\n\nexport default MaintainableItemShow;\n","import Icon from '@material-ui/icons/Build';\nimport MaintainableItemList from './MaintainableItemList';\nimport MaintainableItemCreate from './MaintainableItemCreate';\nimport MaintainableItemEdit from './MaintainableItemEdit';\nimport MaintainableItemShow from './MaintainableItemShow';\n\nconst MaintainableItemIcon = Icon;\n\nexport {\n MaintainableItemIcon,\n MaintainableItemList,\n MaintainableItemShow,\n MaintainableItemCreate,\n MaintainableItemEdit,\n};\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Datagrid, TextField, Filter, SearchInput, useTranslate } from 'react-admin';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport List from '../Layout/List';\nimport customExporter, { dateFormatter } from '../../exporter';\nimport ManualSubmitFilter from '../Layout/filter/ManualSubmitFilter';\n\nconst useStyles = makeStyles((theme) => ({\n row: {\n height: 40,\n },\n}));\n\nconst LocationFilter = (props) => (\n <ManualSubmitFilter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n </ManualSubmitFilter>\n);\n\nconst convertTable = {\n Location: {\n id: 'ID',\n name: 'Название',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n level: 'Уровень',\n unrestrictedName: 'Полное наименование',\n typeShort: 'Тип',\n },\n};\n\nconst LocationList = ({ modelExport, ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const user = useSelector((state) => state.user, shallowEqual);\n\n const ids = (user && user.regions) || [];\n const exporter = customExporter(translate(`resources.${props.resource}.name`, { smart_count: 2 }), modelExport, {\n translate,\n });\n const manualSubmitForm = React.useRef(null);\n return (\n <List\n {...props}\n // filterDefaultValues={{ids}}\n filters={<LocationFilter formRef={manualSubmitForm} />}\n exporter={exporter}\n >\n <Datagrid rowClick=\"show\" classes={{ row: classes.row }}>\n <TextField source=\"unrestrictedName\" />\n </Datagrid>\n </List>\n );\n};\n\nLocationList.defaultProps = {\n perPage: 100,\n sort: { field: 'name', order: 'ASC' },\n bulkActionButtons: false,\n modelExport: {\n id: true,\n name: true,\n description: true,\n createdAt: dateFormatter,\n createdBy: {\n name: true,\n __resource: 'User',\n },\n updatedAt: dateFormatter(),\n level: true,\n unrestrictedName: true,\n typeShort: true,\n __resource: 'Region',\n },\n};\n\nexport default LocationList;\n","import React from 'react';\nimport { useShowController, TextField, DateField } from 'react-admin';\nimport Show, { ShowView } from '../Layout/Show';\nimport ShowLayout from '../Layout/ShowLayout';\nimport TitleForRecord from '../Layout/TitleForRecord';\nimport BannerDeleted from '../Layout/BannerDeleted';\nimport MoreContent from '../Layout/MoreContent';\nimport Separator from '../Layout/Separator';\n\nconst LocationShow = (props) => {\n const controllerProps = useShowController(props);\n const showMoreButton = React.useRef(null);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n\n return (\n <Show title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n {isDeleted && <BannerDeleted />}\n <ShowLayout>\n <TextField source=\"unrestrictedName\" />\n <TextField source=\"level\" />\n </ShowLayout>\n\n <Separator action={<div ref={showMoreButton}></div>} />\n\n <MoreContent showMoreButton={showMoreButton}>\n <ShowLayout>\n <TextField source=\"id\" />\n <DateField source=\"createdAt\" />\n {/*<TextField source=\"createdBy.name\" label=\"resources.Location.fields.createdBy\" />*/}\n <DateField source=\"updatedAt\" />\n </ShowLayout>\n </MoreContent>\n </Show>\n );\n};\n\nexport default LocationShow;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useEditController, EditView, SimpleForm, TextInput, Toolbar, SaveButton } from 'react-admin';\nimport TitleForRecord from '../Layout/TitleForRecord';\n\nimport RestoreButton from '../Buttons/RestoreButton';\n\nconst useStyles = makeStyles({\n toolbar: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n});\n\nconst LocationToolbar = (props) => {\n const isDeleted = props.record.deleted;\n return (\n <Toolbar {...props} classes={useStyles()}>\n {isDeleted ? <RestoreButton /> : <SaveButton />}\n </Toolbar>\n );\n};\n\nconst LocationEdit = (props) => {\n const controllerProps = useEditController(props);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n\n return (\n <EditView title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n <SimpleForm toolbar={<LocationToolbar />}>\n <TextInput source=\"id\" disabled />\n <TextInput source=\"name\" disabled={isDeleted} fullWidth />\n <TextInput source=\"description\" multiline disabled={isDeleted} fullWidth />\n </SimpleForm>\n </EditView>\n );\n};\n\nexport default LocationEdit;\n","import Icon from '@material-ui/icons/Room';\nimport LocationList from './LocationList';\nimport LocationCreate from './LocationCreate';\nimport LocationEdit from './LocationEdit';\nimport LocationShow from './LocationShow';\n\nconst LocationIcon = Icon;\n\nexport { LocationIcon, LocationList, LocationShow, LocationCreate, LocationEdit };\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate, List, Datagrid, TextField, Filter, SearchInput } from 'react-admin';\nimport { ability } from '../../abilityProvider';\nimport customExporter from '../../exporter';\nimport ManualSubmitFilter from '../Layout/filter/ManualSubmitFilter';\n\nconst useStyles = makeStyles((theme) => ({\n row: {\n height: 40,\n },\n}));\n\nconst DefectFilter = (props) => (\n <ManualSubmitFilter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n </ManualSubmitFilter>\n);\n\nconst DefectList = ({ modelExport, ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const exporter = customExporter(translate(`resources.${props.resource}.name`, { smart_count: 2 }), modelExport, {\n translate,\n });\n const manualSubmitForm = React.useRef(null);\n\n return (\n <List filters={<DefectFilter formRef={manualSubmitForm} />} exporter={exporter} {...props}>\n <Datagrid rowClick=\"show\" classes={{ row: classes.row }}>\n {ability.can('getList', 'Defect', 'name') && <TextField source=\"name\" />}\n {ability.can('getList', 'Defect', 'description') && <TextField source=\"description\" />}\n </Datagrid>\n </List>\n );\n};\n\nDefectList.defaultProps = {\n perPage: 100,\n sort: { field: 'name', order: 'ASC' },\n bulkActionButtons: false,\n modelExport: {\n id: true,\n name: true,\n description: true,\n __resource: 'Defect',\n },\n};\n\nexport default DefectList;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n useEditController,\n EditView,\n SimpleForm,\n TextInput,\n Toolbar,\n SaveButton,\n DeleteButton,\n required,\n} from 'react-admin';\nimport TitleForRecord from '../Layout/TitleForRecord';\n\nimport RestoreButton from '../Buttons/RestoreButton';\nimport DeleteForeverIcon from '@material-ui/icons/DeleteForever';\nimport { ability } from '../../abilityProvider';\nimport Edit from '../Layout/Edit';\nimport BlankLayout from '../Layout/BlankLayout';\n\nconst validate = [required()];\n\nconst useStyles = makeStyles({\n toolbar: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n});\n\nconst LocationToolbar = (props) => {\n const isDeleted = props.record.deleted;\n return (\n <Toolbar {...props} classes={useStyles()}>\n {isDeleted ? <RestoreButton /> : <SaveButton redirect=\"show\" />}\n {!isDeleted && <DeleteButton undoable icon={<DeleteForeverIcon />} />}\n </Toolbar>\n );\n};\n\nconst DefectEdit = (props) => {\n const controllerProps = useEditController(props);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n\n return (\n <Edit title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n <BlankLayout>\n <SimpleForm redirect=\"show\" toolbar={<LocationToolbar />} initialValues={{ __typename: 'Defect' }}>\n <TextInput source=\"id\" disabled />\n {ability.can('update', 'Defect', 'name') && (\n <TextInput source=\"name\" validate={validate} disabled={isDeleted} fullWidth />\n )}\n {ability.can('update', 'Defect', 'description') && (\n <TextInput source=\"description\" multiline disabled={isDeleted} fullWidth />\n )}\n </SimpleForm>\n </BlankLayout>\n </Edit>\n );\n};\n\nexport default DefectEdit;\n","import React from 'react';\n\nimport { useCreateController, CreateView, SimpleForm, TextInput, required } from 'react-admin';\nimport { ability } from '../../abilityProvider';\nimport Create from '../Layout/Create';\n\nconst validate = [required()];\n\nconst DefectCreate = (props) => {\n const controllerProps = useCreateController(props);\n\n return (\n <Create {...props} {...controllerProps}>\n <SimpleForm redirect=\"show\" initialValues={{ __typename: 'Defect' }}>\n {ability.can('create', 'Defect', 'name') && <TextInput source=\"name\" validate={validate} fullWidth />}\n {ability.can('create', 'Defect', 'description') && <TextInput source=\"description\" multiline fullWidth />}\n </SimpleForm>\n </Create>\n );\n};\n\nexport default DefectCreate;\n","import React from 'react';\nimport { useShowController, TextField } from 'react-admin';\nimport Show, { ShowView } from '../Layout/Show';\nimport ShowLayout from '../Layout/ShowLayout';\nimport TitleForRecord from '../Layout/TitleForRecord';\nimport BannerDeleted from '../Layout/BannerDeleted';\nimport MoreContent from '../Layout/MoreContent';\nimport Separator from '../Layout/Separator';\nimport { ability } from '../../abilityProvider';\n\nconst DefectShow = (props) => {\n const controllerProps = useShowController(props);\n const showMoreButton = React.useRef(null);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n\n return (\n <Show title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n {isDeleted && <BannerDeleted />}\n <ShowLayout>\n {ability.can('getOne', 'Defect', 'name') && <TextField source=\"name\" />}\n {ability.can('getOne', 'Defect', 'description') && <TextField source=\"description\" />}\n </ShowLayout>\n\n <Separator action={<div ref={showMoreButton}></div>} />\n\n <MoreContent showMoreButton={showMoreButton}>\n <ShowLayout>\n <TextField source=\"id\" />\n {/*<DateField source=\"createdAt\" />*/}\n {/*<TextField source=\"createdBy.name\" label=\"resources.Location.fields.createdBy\" />*/}\n {/*<DateField source=\"updatedAt\" />*/}\n </ShowLayout>\n </MoreContent>\n </Show>\n );\n};\n\nexport default DefectShow;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n useListController,\n Datagrid,\n TextField,\n Filter,\n SearchInput,\n SelectInput,\n ReferenceInput,\n useTranslate,\n} from 'react-admin';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport List from '../Layout/List';\nimport customExporter, { enumFormatter } from '../../exporter';\nimport ManualSubmitFilter from '../Layout/filter/ManualSubmitFilter';\n\nconst useStyles = makeStyles((theme) => ({\n row: {\n height: 40,\n },\n}));\n\nconst EquipmentTemplateFilter = (props) => {\n const user = useSelector((state) => state.user, shallowEqual);\n const regions = user ? user.regions || [] : [];\n\n return (\n <ManualSubmitFilter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <ReferenceInput\n source=\"region\"\n reference=\"Region\"\n filter={{ ids: regions }}\n perPage={100}\n emptyText=\"ra.message.no\"\n sort={{ field: 'unrestrictedName' }}\n >\n <SelectInput optionText=\"unrestrictedName\" />\n </ReferenceInput>\n </ManualSubmitFilter>\n );\n};\n\nconst EquipmentTemplateList = ({ modelExport, ...props }) => {\n const classes = useStyles();\n const user = useSelector((state) => state.user, shallowEqual);\n const regions = (user && user.regions) || [];\n const controllerProps = useListController({ filter: { regions: [...regions.map((r) => ({ id: r }))] }, ...props });\n const translate = useTranslate();\n const exporter = customExporter(translate(`resources.${props.resource}.name`, { smart_count: 2 }), modelExport, {\n translate,\n });\n const manualSubmitForm = React.useRef(null);\n\n return (\n <List\n {...props}\n {...controllerProps}\n filters={<EquipmentTemplateFilter formRef={manualSubmitForm} />}\n exporter={exporter}\n >\n <Datagrid rowClick=\"show\" classes={{ row: classes.row }}>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n </Datagrid>\n </List>\n );\n};\n\nEquipmentTemplateList.defaultProps = {\n perPage: 100,\n sort: { field: 'name', order: 'ASC' },\n bulkActionButtons: false,\n modelExport: {\n id: true,\n name: true,\n description: true,\n region: true,\n equipments: {\n name: true,\n type: enumFormatter,\n count: true,\n __resource: 'EquipmentCatalog',\n },\n __resource: 'EquipmentTemplate',\n },\n};\n\nexport default EquipmentTemplateList;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n useEditController,\n EditView,\n SimpleForm,\n TextInput,\n Toolbar,\n SaveButton,\n DeleteButton,\n SelectInput,\n ReferenceInput,\n required,\n} from 'react-admin';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport TitleForRecord from '../Layout/TitleForRecord';\n\nimport RestoreButton from '../Buttons/RestoreButton';\n\nimport EquipmentInput from '../Inputs/EquipmentInput';\nimport DeleteForeverIcon from '@material-ui/icons/DeleteForever';\nimport { EquipmentCatalogQuickCreate } from '../EquipmentCatalog/EquipmentCatalogCreate';\nimport QuickCreateArrayElementButton from '../Buttons/QuickCreateArrayElementButton';\nimport { ability } from '../../abilityProvider';\nimport Edit from '../Layout/Edit';\nimport BlankLayout from '../Layout/BlankLayout';\n\nconst validate = [required()];\n\nconst useStyles = makeStyles({\n toolbar: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n});\n\nconst LocationToolbar = (props) => {\n const isDeleted = props.record.deleted;\n return (\n <Toolbar {...props} classes={useStyles()}>\n {isDeleted ? <RestoreButton /> : <SaveButton redirect=\"show\" />}\n {!isDeleted && <DeleteButton icon={<DeleteForeverIcon />} />}\n </Toolbar>\n );\n};\n\nconst EquipmentTemplateEdit = (props) => {\n const controllerProps = useEditController(props);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n const user = useSelector((state) => state.user, shallowEqual);\n const regions = user ? user.regions || [] : [];\n return (\n <Edit title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n <BlankLayout>\n <SimpleForm redirect=\"show\" toolbar={<LocationToolbar />} initialValues={{ __typename: 'EquipmentTemplate' }}>\n <TextInput source=\"id\" disabled />\n <TextInput source=\"name\" disabled={isDeleted} validate={validate} fullWidth />\n <TextInput source=\"description\" multiline disabled={isDeleted} fullWidth />\n <ReferenceInput\n source=\"region.id\"\n label=\"resources.EquipmentTemplate.fields.region\"\n reference=\"Region\"\n filter={{ ids: regions }}\n perPage={100}\n sort={{ field: 'unrestrictedName' }}\n >\n <SelectInput optionText=\"unrestrictedName\" />\n </ReferenceInput>\n {ability.can('create', 'EquipmentCatalog') && (\n <QuickCreateArrayElementButton reference=\"EquipmentCatalog\" source=\"equipments\">\n <EquipmentCatalogQuickCreate />\n </QuickCreateArrayElementButton>\n )}\n <EquipmentInput source=\"equipments\" />\n {/*<ArrayInput source=\"equipments\">*/}\n {/* <SimpleFormIterator>*/}\n {/* <AutocompleteInput source=\"type\"/>*/}\n {/* <TextInput source='name'/>*/}\n {/* <TextInput source=\"description\"/>*/}\n {/* <NumberInput source=\"count\"/>*/}\n {/* </SimpleFormIterator>*/}\n {/*</ArrayInput>*/}\n </SimpleForm>\n </BlankLayout>\n </Edit>\n );\n};\n\nexport default EquipmentTemplateEdit;\n","import React from 'react';\nimport { useShowController, TextField, ArrayField, Datagrid, ReferenceField } from 'react-admin';\nimport Show, { ShowView } from '../Layout/Show';\nimport ShowLayout from '../Layout/ShowLayout';\nimport TitleForRecord from '../Layout/TitleForRecord';\nimport BannerDeleted from '../Layout/BannerDeleted';\nimport MoreContent from '../Layout/MoreContent';\nimport Separator from '../Layout/Separator';\nimport EnumField from '../Fields/EnumField';\n\nconst EquipmentTemplateShow = (props) => {\n const controllerProps = useShowController(props);\n const showMoreButton = React.useRef(null);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n\n return (\n <Show title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n {isDeleted && <BannerDeleted />}\n <ShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <ReferenceField\n id=\"equipment_template_region_id\"\n source=\"region.id\"\n reference=\"Region\"\n label=\"resources.EquipmentTemplate.fields.region\"\n link={false}\n >\n <TextField source=\"unrestrictedName\" />\n </ReferenceField>\n <ArrayField source=\"equipments\">\n <Datagrid>\n {/*<ReferenceField source=\"name\" label='resources.EquipmentCatalog.fields.name' reference=\"EquipmentCatalog\" sortable={false} >*/}\n <TextField source=\"name\" />\n {/*</ReferenceFieidld>*/}\n <EnumField source=\"type\" resource=\"EquipmentCatalog\" sortable={false} />\n <TextField source=\"count\" sortable={false} />\n <TextField source=\"factoryNumber\" sortable={false} />\n </Datagrid>\n </ArrayField>\n </ShowLayout>\n\n <Separator action={<div ref={showMoreButton}></div>} />\n\n <MoreContent showMoreButton={showMoreButton}>\n <ShowLayout>\n <TextField source=\"id\" />\n </ShowLayout>\n </MoreContent>\n </Show>\n );\n};\n\nexport default EquipmentTemplateShow;\n","import React from 'react';\n\nimport {\n useCreateController,\n CreateView,\n SimpleForm,\n TextInput,\n SelectInput,\n ReferenceInput,\n required,\n} from 'react-admin';\nimport EquipmentInput from '../Inputs/EquipmentInput';\nimport { useSelector, shallowEqual } from 'react-redux';\n\nimport { EquipmentCatalogQuickCreate } from '../EquipmentCatalog/EquipmentCatalogCreate';\nimport QuickCreateArrayElementButton from '../Buttons/QuickCreateArrayElementButton';\nimport { ability } from '../../abilityProvider';\nimport Create from '../Layout/Create';\n\nconst validate = [required()];\n\nconst EquipmentTemplateCreate = (props) => {\n const controllerProps = useCreateController(props);\n const user = useSelector((state) => state.user, shallowEqual);\n const regions = user ? user.regions || [] : [];\n return (\n <Create {...props} {...controllerProps}>\n <SimpleForm redirect=\"show\" initialValues={{ __typename: 'EquipmentTemplate' }}>\n <TextInput source=\"name\" validate={validate} fullWidth />\n <TextInput source=\"description\" multiline fullWidth />\n <ReferenceInput\n source=\"region.id\"\n label=\"resources.EquipmentTemplate.fields.region\"\n reference=\"Region\"\n filter={{ ids: regions }}\n perPage={100}\n sort={{ field: 'unrestrictedName' }}\n >\n <SelectInput optionText=\"unrestrictedName\" />\n </ReferenceInput>\n {ability.can('create', 'EquipmentCatalog') && (\n <QuickCreateArrayElementButton reference=\"EquipmentCatalog\" source=\"equipments\">\n <EquipmentCatalogQuickCreate />\n </QuickCreateArrayElementButton>\n )}\n <EquipmentInput source=\"equipments\" />\n {/*<ArrayInput source=\"equipments\">*/}\n {/* <SimpleFormIterator>*/}\n {/* <TextInput source='name'/>*/}\n {/* <TextInput source=\"description\"/>*/}\n {/* <TextInput source=\"type\"/>*/}\n {/* <NumberInput source=\"count\"/>*/}\n {/* </SimpleFormIterator>*/}\n {/*</ArrayInput>*/}\n </SimpleForm>\n </Create>\n );\n};\n\nexport default EquipmentTemplateCreate;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Datagrid, TextField, Filter, SearchInput, useTranslate } from 'react-admin';\nimport List from '../Layout/List';\nimport customExporter, { enumFormatter } from '../../exporter';\nimport ManualSubmitFilter from '../Layout/filter/ManualSubmitFilter';\n\nconst useStyles = makeStyles((theme) => ({\n row: {\n height: 40,\n },\n}));\n\nconst DefectFilter = (props) => (\n <ManualSubmitFilter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n </ManualSubmitFilter>\n);\n\nconst TelemetrySystemList = ({ modelExport, ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const exporter = customExporter(translate(`resources.${props.resource}.name`, { smart_count: 2 }), modelExport, {\n translate,\n });\n const manualSubmitForm = React.useRef(null);\n return (\n <List {...props} filters={<DefectFilter formRef={manualSubmitForm} />} exporter={exporter}>\n <Datagrid rowClick=\"show\" classes={{ row: classes.row }}>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n </Datagrid>\n </List>\n );\n};\n\nTelemetrySystemList.defaultProps = {\n perPage: 100,\n sort: { field: 'name', order: 'ASC' },\n bulkActionButtons: false,\n modelExport: {\n id: true,\n name: true,\n description: true,\n equipments: {\n name: true,\n type: enumFormatter,\n count: true,\n __resource: 'EquipmentCatalog',\n },\n __resource: 'TelemetrySystem',\n },\n};\n\nexport default TelemetrySystemList;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n useEditController,\n EditView,\n SimpleForm,\n TextInput,\n Toolbar,\n SaveButton,\n DeleteButton,\n required,\n} from 'react-admin';\nimport TitleForRecord from '../Layout/TitleForRecord';\n\nimport RestoreButton from '../Buttons/RestoreButton';\nimport DeleteForeverIcon from '@material-ui/icons/DeleteForever';\n\nimport EquipmentInput from '../Inputs/EquipmentInput';\nimport TemplateActionButtonsField from '../Buttons/TemplateActionButtonsField';\nimport Edit from '../Layout/Edit';\nimport BlankLayout from '../Layout/BlankLayout';\n\nconst validate = [required()];\n\nconst useStyles = makeStyles({\n toolbar: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n});\n\nconst LocationToolbar = (props) => {\n const isDeleted = props.record.deleted;\n return (\n <Toolbar {...props} classes={useStyles()}>\n {isDeleted ? <RestoreButton /> : <SaveButton redirect=\"show\" />}\n <DeleteButton undoable icon={<DeleteForeverIcon />} />\n </Toolbar>\n );\n};\n\nconst TelemetrySystemEdit = (props) => {\n const controllerProps = useEditController(props);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n\n return (\n <Edit title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n <BlankLayout>\n <SimpleForm toolbar={<LocationToolbar />} initialValues={{ __typename: 'TelemetrySystem' }}>\n <TextInput source=\"id\" disabled />\n <TextInput source=\"name\" validate={validate} disabled={isDeleted} fullWidth />\n <TextInput source=\"description\" multiline disabled={isDeleted} fullWidth />\n <TemplateActionButtonsField />\n <EquipmentInput source=\"equipments\" />\n {/*<ArrayInput source=\"equipments\">*/}\n {/* <SimpleFormIterator>*/}\n {/* <TextInput source='name'/>*/}\n {/* <TextInput source=\"description\"/>*/}\n {/* <TextInput source=\"type\"/>*/}\n {/* <NumberInput source=\"count\"/>*/}\n {/* </SimpleFormIterator>*/}\n {/*</ArrayInput>*/}\n </SimpleForm>\n </BlankLayout>\n </Edit>\n );\n};\n\nexport default TelemetrySystemEdit;\n","import React from 'react';\nimport { useShowController, TextField, ArrayField, Datagrid } from 'react-admin';\nimport Show, { ShowView } from '../Layout/Show';\nimport ShowLayout from '../Layout/ShowLayout';\nimport TitleForRecord from '../Layout/TitleForRecord';\nimport BannerDeleted from '../Layout/BannerDeleted';\nimport MoreContent from '../Layout/MoreContent';\nimport Separator from '../Layout/Separator';\nimport EnumField from '../Fields/EnumField';\n\nconst TelemetrySystemShow = (props) => {\n const controllerProps = useShowController(props);\n const showMoreButton = React.useRef(null);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n\n return (\n <Show title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n {isDeleted && <BannerDeleted />}\n <ShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n\n <ArrayField source=\"equipments\">\n <Datagrid>\n {/*<ReferenceField source=\"name\" label='resources.EquipmentCatalog.fields.name' reference=\"EquipmentCatalog\" sortable={false} >*/}\n <TextField source=\"name\" />\n {/*</ReferenceField>*/}\n <EnumField source=\"type\" sortable={false} />\n <TextField source=\"count\" sortable={false} />\n <TextField source=\"factoryNumber\" sortable={false} />\n </Datagrid>\n </ArrayField>\n </ShowLayout>\n\n <Separator action={<div ref={showMoreButton}></div>} />\n\n <MoreContent showMoreButton={showMoreButton}>\n <ShowLayout>\n <TextField source=\"id\" />\n </ShowLayout>\n </MoreContent>\n </Show>\n );\n};\n\nexport default TelemetrySystemShow;\n","import React from 'react';\n\nimport { useCreateController, CreateView, SimpleForm, TextInput, required } from 'react-admin';\n\nimport TemplateActionButtonsField from '../Buttons/TemplateActionButtonsField';\nimport EquipmentInput from '../Inputs/EquipmentInput';\nimport Create from '../Layout/Create';\n\nconst validate = [required()];\n\nconst TelemetrySystemCreate = (props) => {\n const controllerProps = useCreateController(props);\n\n return (\n <Create {...props} {...controllerProps}>\n <SimpleForm redirect=\"show\" initialValues={{ __typename: 'TelemetrySystem' }}>\n <TextInput source=\"name\" validate={validate} fullWidth />\n <TextInput source=\"description\" multiline fullWidth />\n <TemplateActionButtonsField />\n <EquipmentInput source=\"equipments\" />\n {/*<ArrayInput source=\"equipments\">*/}\n {/* <SimpleFormIterator>*/}\n {/* <TextInput source='name'/>*/}\n {/* <TextInput source=\"description\"/>*/}\n {/* <TextInput source=\"type\"/>*/}\n {/* <NumberInput source=\"count\"/>*/}\n {/* </SimpleFormIterator>*/}\n {/*</ArrayInput>*/}\n </SimpleForm>\n </Create>\n );\n};\n\nexport default TelemetrySystemCreate;\n","import BugReportIcon from '@material-ui/icons/BugReport';\nimport DefectShow from './DefectShow';\nimport DefectCreate from './DefectCreate';\nimport DefectEdit from './DefectEdit';\nimport DefectList from './DefectList';\n\nconst DefectIcon = BugReportIcon;\n\nexport { DefectIcon, DefectShow, DefectCreate, DefectEdit, DefectList };\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M11,13.5V21.5H3V13.5H11M12,2L17.5,11H6.5L12,2M17.5,13C20,13 22,15 22,17.5C22,20 20,22 17.5,22C15,22 13,20 13,17.5C13,15 15,13 17.5,13Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import Icon from '../Icons/Template';\nimport EquipmentTemplateCreate from './EquipmentTemplateCreate';\nimport EquipmentTemplateShow from './EquipmentTemplateShow';\nimport EquipmentTemplateEdit from './EquipmentTemplateEdit';\nimport EquipmentTemplateList from './EquipmentTemplateList';\n\nconst EquipmentTemplateIcon = Icon;\n\nexport {\n EquipmentTemplateIcon,\n EquipmentTemplateList,\n EquipmentTemplateEdit,\n EquipmentTemplateShow,\n EquipmentTemplateCreate,\n};\n","import React from 'react';\nimport { useShowController, TextField } from 'react-admin';\nimport Show, { ShowView } from '../Layout/Show';\nimport ShowLayout from '../Layout/ShowLayout';\nimport TitleForRecord from '../Layout/TitleForRecord';\nimport BannerDeleted from '../Layout/BannerDeleted';\nimport MoreContent from '../Layout/MoreContent';\nimport Separator from '../Layout/Separator';\nimport EnumField from '../Fields/EnumField';\nimport { ability } from '../../abilityProvider';\n\nconst EquipmentCatalogShow = (props) => {\n const controllerProps = useShowController(props);\n const showMoreButton = React.useRef(null);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n\n return (\n <Show title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n {isDeleted && <BannerDeleted />}\n <ShowLayout>\n {ability.can('getOne', 'EquipmentCatalog', 'type') && <EnumField source=\"type\" />}\n {ability.can('getOne', 'EquipmentCatalog', 'name') && <TextField source=\"name\" />}\n {ability.can('getOne', 'EquipmentCatalog', 'description') && <TextField source=\"description\" />}\n </ShowLayout>\n\n <Separator action={<div ref={showMoreButton}></div>} />\n\n <MoreContent showMoreButton={showMoreButton}>\n <ShowLayout>\n <TextField source=\"id\" />\n {/*<DateField source=\"createdAt\" />*/}\n {/*<TextField source=\"createdBy.name\" label=\"resources.Location.fields.createdBy\" />*/}\n {/*<DateField source=\"updatedAt\" />*/}\n </ShowLayout>\n </MoreContent>\n </Show>\n );\n};\n\nexport default EquipmentCatalogShow;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n useEditController,\n EditView,\n SimpleForm,\n TextInput,\n Toolbar,\n SaveButton,\n DeleteButton,\n required,\n} from 'react-admin';\nimport TitleForRecord from '../Layout/TitleForRecord';\n\nimport RestoreButton from '../Buttons/RestoreButton';\nimport useEnum from '../../dataProvider/Objects/useEnum';\nimport EnumInput from '../Inputs/EnumInput';\nimport { ability } from '../../abilityProvider';\nimport DeleteForeverIcon from '@material-ui/icons/DeleteForever';\nimport Edit from '../Layout/Edit';\nimport BlankLayout from '../Layout/BlankLayout';\n\nconst validate = [required()];\n\nconst useStyles = makeStyles({\n toolbar: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n});\n\nconst LocationToolbar = (props) => {\n const isDeleted = props.record.deleted;\n return (\n <Toolbar {...props} classes={useStyles()}>\n {isDeleted ? <RestoreButton /> : <SaveButton redirect=\"show\" />}\n {!isDeleted && <DeleteButton undoable icon={<DeleteForeverIcon />} />}\n </Toolbar>\n );\n};\n\nconst EquipmentCatalogEdit = (props) => {\n const controllerProps = useEditController(props);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n\n return (\n <Edit title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n <BlankLayout>\n <SimpleForm redirect=\"show\" toolbar={<LocationToolbar />} initialValues={{ __typename: 'EquipmentCatalog' }}>\n <TextInput source=\"id\" disabled />\n {ability.can('update', 'EquipmentCatalog', 'type') && (\n <EnumInput Enum=\"EquipmentType\" useEnum={useEnum} validate={validate} source=\"type\" />\n )}\n {ability.can('update', 'EquipmentCatalog', 'type') && (\n <TextInput source=\"name\" disabled={isDeleted} validate={validate} fullWidth />\n )}\n {ability.can('update', 'EquipmentCatalog', 'type') && (\n <TextInput source=\"description\" multiline disabled={isDeleted} fullWidth />\n )}\n </SimpleForm>\n </BlankLayout>\n </Edit>\n );\n};\n\nexport default EquipmentCatalogEdit;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Datagrid, TextField, Filter, SearchInput, useTranslate } from 'react-admin';\nimport EnumField from '../Fields/EnumField';\nimport { ability } from '../../abilityProvider';\nimport EnumInput from '../Inputs/EnumInput';\nimport useEnum from '../../dataProvider/Objects/useEnum';\nimport List from '../Layout/List';\nimport customExporter from '../../exporter';\nimport ManualSubmitFilter from '../Layout/filter/ManualSubmitFilter';\n\nconst useStyles = makeStyles((theme) => ({\n row: {\n height: 40,\n },\n}));\n\nconst EquipmentCatalogFilter = (props) => (\n <ManualSubmitFilter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <EnumInput useEnum={useEnum} Enum=\"EquipmentType\" source=\"type\" emptyText=\"ra.message.no\" alwaysOn />\n </ManualSubmitFilter>\n);\n\nconst EquipmentCatalogList = ({ modelExport, ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const exporter = customExporter(translate(`resources.${props.resource}.name`, { smart_count: 2 }), modelExport, {\n translate,\n });\n const manualSubmitForm = React.useRef(null);\n return (\n <List {...props} filters={<EquipmentCatalogFilter formRef={manualSubmitForm} />} exporter={exporter}>\n <Datagrid rowClick=\"show\" classes={{ row: classes.row }}>\n {ability.can('getList', 'EquipmentCatalog', 'type') && <EnumField source=\"type\" />}\n {ability.can('getList', 'EquipmentCatalog', 'name') && <TextField source=\"name\" />}\n {ability.can('getList', 'EquipmentCatalog', 'description') && <TextField source=\"description\" />}\n </Datagrid>\n </List>\n );\n};\n\nEquipmentCatalogList.defaultProps = {\n perPage: 100,\n sort: { field: 'name', order: 'ASC' },\n bulkActionButtons: false,\n modelExport: {\n id: true,\n name: true,\n description: true,\n type: true,\n count: true,\n __resource: 'EquipmentCatalog',\n },\n};\n\nexport default EquipmentCatalogList;\n","import DevicesOtherIcon from '@material-ui/icons/DevicesOther';\nimport EquipmentCatalogShow from './EquipmentCatalogShow';\nimport EquipmentCatalogCreate from './EquipmentCatalogCreate';\nimport EquipmentCatalogEdit from './EquipmentCatalogEdit';\nimport EquipmentCatalogList from './EquipmentCatalogList';\n\nconst EquipmentIcon = DevicesOtherIcon;\n\nexport { EquipmentIcon, EquipmentCatalogShow, EquipmentCatalogCreate, EquipmentCatalogEdit, EquipmentCatalogList };\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M16.95,16.95L14.83,14.83C15.55,14.1 16,13.1 16,12C16,11.26 15.79,10.57 15.43,10L17.6,7.81C18.5,9 19,10.43 19,12C19,13.93 18.22,15.68 16.95,16.95M12,5C13.57,5 15,5.5 16.19,6.4L14,8.56C13.43,8.21 12.74,8 12,8A4,4 0 0,0 8,12C8,13.1 8.45,14.1 9.17,14.83L7.05,16.95C5.78,15.68 5,13.93 5,12A7,7 0 0,1 12,5M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import TelemetrySystemCreate from './TelemetrySystemCreate';\nimport TelemetrySystemShow from './TelemetrySystemShow';\nimport TelemetrySystemEdit from './TelemetrySystemEdit';\nimport TelemetrySystemList from './TelemetrySystemList';\nimport Icon from '../Icons/STMIcon';\n\nconst STMIcon = Icon;\n\nexport { TelemetrySystemList, TelemetrySystemEdit, TelemetrySystemShow, TelemetrySystemCreate, STMIcon };\n","import React from 'react';\nimport {\n useShowController,\n TextField,\n ReferenceField,\n Pagination,\n ReferenceArrayField,\n SingleFieldList,\n ChipField,\n} from 'react-admin';\nimport Show, { ShowView } from '../Layout/Show';\nimport ShowLayout from '../Layout/ShowLayout';\nimport TitleForRecord from '../Layout/TitleForRecord';\nimport BannerDeleted from '../Layout/BannerDeleted';\nimport MoreContent from '../Layout/MoreContent';\nimport Separator from '../Layout/Separator';\nimport { ability } from '../../abilityProvider';\nimport ReferenceManyField from '../Fields/ReferenceManyField';\nimport ReferenceManyFilter from '../Fields/ReferenceManyFilter';\nimport SearchInput from '../Inputs/SearchInput';\nimport EnumInput from '../Inputs/EnumInput';\nimport ReferenceManyActions from '../Fields/ReferenceManyActions';\nimport ReferenceListLinkButton from '../Buttons/ReferenceListLinkButton';\nimport { MaintainableItemReferenceDatagrid } from '../MaintainableItem/MaintainableItemList';\nimport { DefaultDatagrid as UserReferenceDatagrid } from '../User/UserList';\n\nconst ReferenceManyFilters = (props) => {\n return (\n <ReferenceManyFilter {...props}>\n <SearchInput source=\"q\" id={`${props.reference}.q`} alwaysOn />\n {/*<EnumInput source=\"type\" Enum=\"TaskType\" emptyText=\"ra.message.no\" alwaysOn />*/}\n </ReferenceManyFilter>\n );\n};\n\nconst ReferenceManyActionButtons = (props) => {\n return (\n <ReferenceManyActions>\n <ReferenceListLinkButton {...props} />\n </ReferenceManyActions>\n );\n};\n\nexport const Wrap = ({ children, ...props }) => {\n return <>{React.cloneElement(children, { ...props })}</>;\n};\n\nconst CounterpartyShow = (props) => {\n const controllerProps = useShowController(props);\n const showMoreButton = React.useRef(null);\n const showUsersButton = React.useRef(null);\n const showObjectsButton = React.useRef(null);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n\n return (\n <Show title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n {isDeleted && <BannerDeleted />}\n <ShowLayout>\n {ability.can('getOne', 'Distributor', 'name') && <TextField source=\"name\" />}\n {/*<ReferenceField source=\"location.id\" label=\"resources.Distributor.fields.location\" reference=\"Region\" link={false}>*/}\n {/* <TextField source=\"unrestrictedName\" />*/}\n {/*</ReferenceField>*/}\n\n <ReferenceArrayField source=\"regionsIds\" label=\"resources.Counterparty.fields.regions\" reference=\"Region\">\n <SingleFieldList>\n <Wrap>\n <ChipField source=\"unrestrictedName\" />\n </Wrap>\n </SingleFieldList>\n </ReferenceArrayField>\n\n <TextField source=\"gmiId\" />\n\n <ReferenceField source=\"defaultDispatcherId\" reference=\"User\" link=\"show\">\n <TextField source=\"name\" />\n </ReferenceField>\n\n <ReferenceField source=\"defaultManagerId\" reference=\"User\" link=\"show\">\n <TextField source=\"name\" />\n </ReferenceField>\n\n <ReferenceField source=\"defaultMacroleaderId\" reference=\"User\" link=\"show\">\n <TextField source=\"name\" />\n </ReferenceField>\n\n <ReferenceArrayField source=\"testsIds\" label=\"resources.Counterparty.fields.tests\" reference=\"Test\">\n <SingleFieldList>\n <Wrap>\n <ChipField source=\"name\" />\n </Wrap>\n </SingleFieldList>\n </ReferenceArrayField>\n </ShowLayout>\n\n <Separator action={<div ref={showUsersButton} />} />\n\n <MoreContent showMoreButton={showUsersButton} label=\"resources.Counterparty.fields.users\">\n <ReferenceManyField\n reference=\"User\"\n target=\"distributor\"\n label=\"resources.Counterparty.fields.users\"\n filters={<ReferenceManyFilters />}\n actions={<ReferenceManyActionButtons />}\n sort={{ field: 'createdAt', order: 'ASC' }}\n pagination={<Pagination />}\n resource=\"User\"\n >\n <UserReferenceDatagrid />\n </ReferenceManyField>\n </MoreContent>\n\n <Separator action={<div ref={showObjectsButton} />} />\n\n <MoreContent showMoreButton={showObjectsButton} label=\"resources.Counterparty.fields.maintainableItems\">\n <ReferenceManyField\n reference=\"ConstructionObject\"\n target=\"counterparty.id\"\n label=\"resources.Counterparty.fields.maintainableItems\"\n filters={<ReferenceManyFilters />}\n actions={<ReferenceManyActionButtons />}\n sort={{ field: 'createdAt', order: 'asc' }}\n pagination={<Pagination />}\n resource=\"ConstructionObject\"\n >\n <MaintainableItemReferenceDatagrid />\n </ReferenceManyField>\n </MoreContent>\n\n <Separator action={<div ref={showMoreButton} />} />\n\n <MoreContent showMoreButton={showMoreButton}>\n <ShowLayout>\n <TextField source=\"id\" />\n {/*<DateField source=\"createdAt\" />*/}\n {/*<TextField source=\"createdBy.name\" label=\"resources.Location.fields.createdBy\" />*/}\n {/*<DateField source=\"updatedAt\" />*/}\n </ShowLayout>\n </MoreContent>\n </Show>\n );\n};\n\nexport default CounterpartyShow;\n","import React from 'react';\n\nimport {\n useCreateController,\n CreateView,\n SimpleForm,\n TextInput,\n required,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n ReferenceInput,\n FormDataConsumer,\n} from 'react-admin';\nimport { ability } from '../../abilityProvider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport AutocompleteInput from '../Inputs/AutoompleteInput';\nimport UserSuggestion from '../User/UserSuggestion';\nimport Create from '../Layout/Create';\n\nconst useStyles = makeStyles({\n toolbar: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n referenceArrayInput: {\n marginTop: 8,\n marginBottom: 4,\n },\n});\n\nconst validate = [required()];\n\nconst CounterpartyCreate = (props) => {\n const controllerProps = useCreateController(props);\n const classes = useStyles();\n\n return (\n <Create {...props} {...controllerProps}>\n <SimpleForm redirect=\"show\" initialValues={{ __typename: 'Counterparty' }}>\n {ability.can('create', 'Distributor', 'name') && <TextInput source=\"name\" validate={validate} fullWidth />}\n {ability.can('create', 'Distributor', 'regions') && (\n <ReferenceArrayInput\n source=\"regionsIds\"\n reference=\"Region\"\n label=\"resources.Counterparty.fields.regions\"\n classes={{ container: classes.referenceArrayInput }}\n fullWidth\n >\n <AutocompleteArrayInput optionText=\"unrestrictedName\" />\n </ReferenceArrayInput>\n )}\n {ability.can('create', 'Distributor', 'gmiId') && <TextInput source=\"gmiId\" />}\n <FormDataConsumer>\n {({ formData, ...rest }) => {\n const { regionsIds } = formData;\n const filter = {\n regions_in: regionsIds || undefined,\n };\n return (\n <>\n {ability.can('create', 'Distributor', 'dutyDispatcher') && (\n <ReferenceInput\n source=\"defaultDispatcherId\"\n reference=\"User\"\n label=\"resources.Counterparty.fields.defaultDispatcherId\"\n filter={{ role: 'DISPATCHER', ...filter }}\n allowEmpty\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n {ability.can('create', 'Distributor', 'dutyManager') && (\n <ReferenceInput\n source=\"defaultManagerId\"\n reference=\"User\"\n label=\"resources.Counterparty.fields.defaultManagerId\"\n filter={{ role: 'MANAGER', ...filter }}\n allowEmpty\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n {ability.can('create', 'Distributor', 'macroleader') && (\n <ReferenceInput\n source=\"defaultMacroleaderId\"\n reference=\"User\"\n label=\"resources.Counterparty.fields.defaultMacroleaderId\"\n filter={{ role: 'MACROLEADER', ...filter }}\n allowEmpty\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n </>\n );\n }}\n </FormDataConsumer>\n {ability.can('create', 'Distributor', 'tests') && (\n <ReferenceArrayInput source=\"testsIds\" reference=\"Test\">\n <AutocompleteArrayInput optionText=\"name\" />\n </ReferenceArrayInput>\n )}\n </SimpleForm>\n </Create>\n );\n};\n\nexport default CounterpartyCreate;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n useEditController,\n EditView,\n SimpleForm,\n TextInput,\n ReferenceArrayInput,\n Toolbar,\n SaveButton,\n DeleteButton,\n required,\n AutocompleteArrayInput,\n ReferenceInput,\n} from 'react-admin';\nimport TitleForRecord from '../Layout/TitleForRecord';\n\nimport RestoreButton from '../Buttons/RestoreButton';\nimport DeleteForeverIcon from '@material-ui/icons/DeleteForever';\nimport { ability } from '../../abilityProvider';\nimport AutocompleteInput from '../Inputs/AutoompleteInput';\nimport UserSuggestion from '../User/UserSuggestion';\nimport Edit from '../Layout/Edit';\nimport BlankLayout from '../Layout/BlankLayout';\n\nconst validate = [required()];\n\nconst useStyles = makeStyles({\n toolbar: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n referenceArrayInput: {\n marginTop: 8,\n marginBottom: 4,\n },\n});\n\nconst LocationToolbar = (props) => {\n const isDeleted = props.record.deleted;\n return (\n <Toolbar {...props} classes={useStyles()}>\n {isDeleted ? <RestoreButton /> : <SaveButton redirect=\"show\" />}\n {!isDeleted && <DeleteButton undoable icon={<DeleteForeverIcon />} />}\n </Toolbar>\n );\n};\n\nconst CounterpartyEdit = (props) => {\n const controllerProps = useEditController(props);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n const classes = useStyles();\n return (\n <Edit title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n <BlankLayout>\n <SimpleForm redirect=\"show\" toolbar={<LocationToolbar />} initialValues={{ __typename: 'Counterparty' }}>\n <TextInput source=\"id\" disabled />\n {ability.can('update', 'Distributor', 'name') && (\n <TextInput source=\"name\" validate={validate} disabled={isDeleted} fullWidth />\n )}\n {ability.can('update', 'Distributor', 'regions') && (\n <ReferenceArrayInput\n source=\"regionsIds\"\n reference=\"Region\"\n label=\"resources.Counterparty.fields.regions\"\n classes={{ container: classes.referenceArrayInput }}\n fullWidth\n >\n <AutocompleteArrayInput optionText=\"unrestrictedName\" />\n </ReferenceArrayInput>\n )}\n {ability.can('update', 'Distributor', 'gmiId') && <TextInput source=\"gmiId\" />}\n {ability.can('update', 'Distributor', 'dutyDispatcher') && (\n <ReferenceInput\n source=\"defaultDispatcherId\"\n reference=\"User\"\n filter={{ role: 'DISPATCHER' }}\n allowEmpty\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n {ability.can('update', 'Distributor', 'dutyManager') && (\n <ReferenceInput\n source=\"defaultManagerId\"\n reference=\"User\"\n filter={{ role: 'MANAGER' }}\n allowEmpty\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n {ability.can('update', 'Distributor', 'macroleader') && (\n <ReferenceInput\n source=\"defaultMacroleaderId\"\n reference=\"User\"\n filter={{ role: 'MACROLEADER' }}\n allowEmpty\n emptyText=\"ra.message.no\"\n >\n <AutocompleteInput optionText=\"name\" suggestionItem={<UserSuggestion />} />\n </ReferenceInput>\n )}\n {ability.can('update', 'Distributor', 'tests') && (\n <ReferenceArrayInput source=\"testsIds\" reference=\"Test\">\n <AutocompleteArrayInput optionText=\"name\" />\n </ReferenceArrayInput>\n )}\n </SimpleForm>\n </BlankLayout>\n </Edit>\n );\n};\n\nexport default CounterpartyEdit;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate, List, Datagrid, TextField, Filter, SearchInput, ReferenceField } from 'react-admin';\nimport { ability } from '../../abilityProvider';\nimport customExporter from '../../exporter';\nimport ManualSubmitFilter from '../Layout/filter/ManualSubmitFilter';\nimport { useSelector, shallowEqual } from 'react-redux';\n\nconst useStyles = makeStyles((theme) => ({\n row: {\n height: 40,\n },\n}));\n\nconst DefectFilter = (props) => (\n <ManualSubmitFilter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n </ManualSubmitFilter>\n);\n\nconst CounterpartyList = ({ modelExport, ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const user = useSelector((state) => state.user, shallowEqual);\n const regions = ((user && user.regions) || []).map((r) => ({ id: r }));\n const exporter = customExporter(translate(`resources.${props.resource}.name`, { smart_count: 2 }), modelExport, {\n translate,\n });\n const manualSubmitForm = React.useRef(null);\n\n return (\n <List\n filterDefaultValues={{ regions }}\n filters={<DefectFilter formRef={manualSubmitForm} />}\n exporter={exporter}\n {...props}\n >\n <Datagrid rowClick=\"show\" classes={{ row: classes.row }}>\n {ability.can('getList', 'Distributor', 'name') && <TextField source=\"name\" />}\n {/*<ReferenceField source=\"location.id\" label=\"resources.Distributor.fields.location\" reference=\"Region\" link={false}>*/}\n {/* <TextField source=\"unrestrictedName\" />*/}\n {/*</ReferenceField>*/}\n </Datagrid>\n </List>\n );\n};\n\nCounterpartyList.defaultProps = {\n perPage: 100,\n sort: { field: 'name', order: 'ASC' },\n bulkActionButtons: false,\n modelExport: {\n id: true,\n name: true,\n description: true,\n __resource: 'Defect',\n },\n};\n\nexport default CounterpartyList;\n","import Icon from '@material-ui/icons/Work';\nimport CounterpartyShow from './CounterpartyShow';\nimport CounterpartyCreate from './CounterpartyCreate';\nimport CounterpartyEdit from './CounterpartyEdit';\nimport CounterpartyList from './CounterpartyList';\n\nconst CounterpartyIcon = Icon;\n\nexport { CounterpartyIcon, CounterpartyShow, CounterpartyCreate, CounterpartyEdit, CounterpartyList };\n","import React from 'react';\nimport {\n useShowController,\n TextField,\n BooleanField,\n NumberField,\n ReferenceArrayField,\n SingleFieldList,\n ChipField,\n} from 'react-admin';\nimport Show, { ShowView } from '../Layout/Show';\nimport ShowLayout from '../Layout/ShowLayout';\nimport TitleForRecord from '../Layout/TitleForRecord';\nimport BannerDeleted from '../Layout/BannerDeleted';\nimport MoreContent from '../Layout/MoreContent';\nimport Separator from '../Layout/Separator';\nimport { ability } from '../../abilityProvider';\nimport ArrayEnumField from '../Fields/ArrayEnumFiled';\nimport { Wrap } from '../Counterparty/CounterpartyShow';\n\nconst TestShow = (props) => {\n const controllerProps = useShowController(props);\n const showMoreButton = React.useRef(null);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n\n return (\n <Show title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n {isDeleted && <BannerDeleted />}\n <ShowLayout>\n {ability.can('getOne', 'Test', 'name') && <TextField source=\"name\" />}\n {ability.can('getOne', 'Test', 'description') && <TextField source=\"description\" />}\n {ability.can('getOne', 'Test', 'mark') && <NumberField source=\"mark\" />}\n {ability.can('getOne', 'Test', 'required') && <BooleanField source=\"required\" />}\n {ability.can('getOne', 'Test', 'constructionObjectsTypes') && (\n <ArrayEnumField Enum=\"TypeConstructionObject\" source=\"constructionObjectsTypes\" />\n )}\n {ability.can('getOne', 'Test', 'counterparties') && (\n <ReferenceArrayField source=\"counterpartiesIds\" reference=\"Counterparty\">\n <SingleFieldList>\n <ChipField source=\"name\" />\n </SingleFieldList>\n </ReferenceArrayField>\n )}\n </ShowLayout>\n\n <Separator action={<div ref={showMoreButton}></div>} />\n\n <MoreContent showMoreButton={showMoreButton}>\n <ShowLayout>\n <TextField source=\"id\" />\n {/*<DateField source=\"createdAt\" />*/}\n {/*<TextField source=\"createdBy.name\" label=\"resources.Location.fields.createdBy\" />*/}\n {/*<DateField source=\"updatedAt\" />*/}\n </ShowLayout>\n </MoreContent>\n </Show>\n );\n};\n\nexport default TestShow;\n","import React from 'react';\n\nimport {\n useCreateController,\n NumberInput,\n SimpleForm,\n TextInput,\n required,\n BooleanInput,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n} from 'react-admin';\nimport { ability } from '../../abilityProvider';\nimport Create from '../Layout/Create';\nimport EnumInput from '../Inputs/EnumInput';\nimport useEnum from '../../dataProvider/Objects/useEnum';\nimport EnumArrayInput from '../Inputs/EnumArrayInput';\n\nconst validate = [required()];\n\nconst TestCreate = (props) => {\n const controllerProps = useCreateController(props);\n\n return (\n <Create {...props} {...controllerProps}>\n <SimpleForm redirect=\"show\" initialValues={{ __typename: 'Test' }}>\n {ability.can('create', 'Test', 'name') && <TextInput source=\"name\" validate={validate} fullWidth />}\n {ability.can('create', 'Test', 'description') && <TextInput source=\"description\" multiline fullWidth />}\n {ability.can('create', 'Test', 'mark') && (\n <NumberInput source=\"mark\" defaultValue={1} min={1} validate={validate} />\n )}\n {ability.can('create', 'Test', 'required') && <BooleanInput source=\"required\" />}\n {ability.can('create', 'Test', 'constructionObjectsTypes') && (\n <EnumArrayInput\n useEnum={useEnum}\n Enum=\"TypeConstructionObject\"\n source=\"constructionObjectsTypes\"\n validate={validate}\n fullWidth\n />\n )}\n {ability.can('create', 'Test', 'counterparties') && (\n <ReferenceArrayInput\n label=\"resources.ConstructionObject.fields.counterparty\"\n source=\"counterpartiesIds\"\n reference=\"Counterparty\"\n fullWidth\n >\n <AutocompleteArrayInput optionText=\"name\" />\n </ReferenceArrayInput>\n )}\n </SimpleForm>\n </Create>\n );\n};\n\nexport default TestCreate;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n useEditController,\n EditView,\n SimpleForm,\n TextInput,\n Toolbar,\n SaveButton,\n DeleteButton,\n required,\n NumberInput,\n BooleanInput,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n} from 'react-admin';\nimport TitleForRecord from '../Layout/TitleForRecord';\n\nimport RestoreButton from '../Buttons/RestoreButton';\nimport DeleteForeverIcon from '@material-ui/icons/DeleteForever';\nimport { ability } from '../../abilityProvider';\nimport Edit from '../Layout/Edit';\nimport BlankLayout from '../Layout/BlankLayout';\nimport EnumArrayInput from '../Inputs/EnumArrayInput';\nimport useEnum from '../../dataProvider/Objects/useEnum';\n\nconst validate = [required()];\n\nconst useStyles = makeStyles({\n toolbar: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n});\n\nconst LocationToolbar = (props) => {\n const isDeleted = props.record.deleted;\n return (\n <Toolbar {...props} classes={useStyles()}>\n {isDeleted ? <RestoreButton /> : <SaveButton redirect=\"show\" />}\n {!isDeleted && <DeleteButton undoable icon={<DeleteForeverIcon />} />}\n </Toolbar>\n );\n};\n\nconst TestEdit = (props) => {\n const controllerProps = useEditController(props);\n const isDeleted = controllerProps.record && controllerProps.record.deleted;\n\n return (\n <Edit title={<TitleForRecord source=\"name\" {...props} />} {...props} {...controllerProps}>\n <BlankLayout>\n <SimpleForm redirect=\"show\" toolbar={<LocationToolbar />} initialValues={{ __typename: 'Test' }}>\n <TextInput source=\"id\" disabled />\n {ability.can('update', 'Test', 'name') && (\n <TextInput source=\"name\" validate={validate} disabled={isDeleted} fullWidth />\n )}\n {ability.can('update', 'Test', 'description') && (\n <TextInput source=\"description\" multiline disabled={isDeleted} fullWidth />\n )}\n {ability.can('update', 'Test', 'mark') && <NumberInput source=\"mark\" defaultValue={1} min={1} />}\n {ability.can('update', 'Test', 'required') && <BooleanInput source=\"required\" />}\n {ability.can('update', 'Test', 'constructionObjectsTypes') && (\n <EnumArrayInput\n useEnum={useEnum}\n Enum=\"TypeConstructionObject\"\n source=\"constructionObjectsTypes\"\n validate={validate}\n fullWidth\n />\n )}\n {ability.can('update', 'Test', 'counterparties') && (\n <ReferenceArrayInput\n label=\"resources.ConstructionObject.fields.counterparty\"\n source=\"counterpartiesIds\"\n reference=\"Counterparty\"\n fullWidth\n sort={{ field: 'name', order: 'ASC' }}\n >\n <AutocompleteArrayInput optionText=\"name\" />\n </ReferenceArrayInput>\n )}\n </SimpleForm>\n </BlankLayout>\n </Edit>\n );\n};\n\nexport default TestEdit;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate, List, Datagrid, TextField, Filter, SearchInput, NumberField, BooleanField } from 'react-admin';\nimport { ability } from '../../abilityProvider';\nimport customExporter from '../../exporter';\nimport ManualSubmitFilter from '../Layout/filter/ManualSubmitFilter';\nimport ShowLayout from '../Layout/ShowLayout';\n\nconst useStyles = makeStyles((theme) => ({\n row: {\n height: 40,\n },\n}));\n\nconst TestFilter = (props) => (\n <ManualSubmitFilter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n </ManualSubmitFilter>\n);\n\nconst TestList = ({ modelExport, ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const exporter = customExporter(translate(`resources.${props.resource}.name`, { smart_count: 2 }), modelExport, {\n translate,\n });\n const manualSubmitForm = React.useRef(null);\n\n return (\n <List filters={<TestFilter formRef={manualSubmitForm} />} exporter={exporter} {...props}>\n <Datagrid rowClick=\"show\" classes={{ row: classes.row }}>\n {ability.can('getList', 'Test', 'name') && <TextField source=\"name\" />}\n {ability.can('getList', 'Test', 'description') && <TextField source=\"description\" />}\n {ability.can('getOne', 'Test', 'required') && <BooleanField source=\"required\" />}\n {ability.can('getOne', 'Test', 'mark') && <NumberField source=\"mark\" />}\n </Datagrid>\n </List>\n );\n};\n\nTestList.defaultProps = {\n perPage: 100,\n sort: { field: 'name', order: 'ASC' },\n bulkActionButtons: false,\n modelExport: {\n id: true,\n name: true,\n description: true,\n __resource: 'Test',\n },\n};\n\nexport default TestList;\n","import DoneAllIcon from '@material-ui/icons/DoneAll';\nimport TestShow from './TestShow';\nimport TestCreate from './TestCreate';\nimport TestEdit from './TestEdit';\nimport TestList from './TestList';\n\nconst TestIcon = DoneAllIcon;\n\nexport { TestIcon, TestShow, TestCreate, TestEdit, TestList };\n","import React, { useState, useEffect } from 'react';\n//import { ability, AbilityContext } from './abilityProvider'\nimport { Admin, Resource, Pagination } from 'react-admin';\nimport { authProvider } from './authPrivider';\n// import { dataProviderFactory } from './dataProvider/dataProviderFactory';\nimport dataProvider from './dataProvider';\n// import coreProvider from './dataProvider/dataProviderFactory'\nimport { i18nProvider } from './i18n/i18nProvider';\nimport { theme } from './defaultTheme';\nimport customRoutes from './customRoutes';\nimport { MyLayout } from './components/Layout';\nimport MyLoginPage from './components/Auth/Login';\nimport user from './redux/user/reducer';\nimport onlineUsers from './redux/onlineUsers/reducer';\nimport taskData from './redux/taskData/reducer';\nimport Dashboard from './components/Dashboard';\nimport { TaskList, TaskCreate, TaskEdit, TaskShow, TaskIcon } from './components/Task';\nimport { UserList, UserCreate, UserEdit, UserShow, UserIcon } from './components/User';\nimport { FileList, FileShow, TaskFileIcon, ObjectFileIcon } from './components/File';\nimport { ImportExportList, ImportExportShow, ImportExportIcon } from './components/ImportExport';\nimport { HistoryList, HistoryShow, HistoryIcon } from './components/History';\nimport { TrashItemList, TrashItemIcon } from './components/TrashItem';\n\nimport {\n MaintainableItemList,\n MaintainableItemEdit,\n MaintainableItemShow,\n MaintainableItemIcon,\n MaintainableItemCreate,\n} from './components/MaintainableItem';\nimport { LocationList, LocationShow, LocationIcon } from './components/Location';\nimport DefectList from './components/Defect/DefectList';\nimport DefectEdit from './components/Defect/DefectEdit';\nimport DefectCreate from './components/Defect/DefectCreate';\nimport DefectShow from './components/Defect/DefectShow';\nimport EquipmentTemplateList from './components/EquipmentTemplate/EquipmentTemplateList';\nimport EquipmentTemplateEdit from './components/EquipmentTemplate/EquipmentTemplateEdit';\nimport EquipmentTemplateShow from './components/EquipmentTemplate/EquipmentTemplateShow';\nimport EquipmentTemplateCreate from './components/EquipmentTemplate/EquipmentTemplateCreate';\nimport TelemetrySystemList from './components/TelemetrySystem/TelemetrySystemList';\nimport TelemetrySystemEdit from './components/TelemetrySystem/TelemetrySystemEdit';\nimport TelemetrySystemShow from './components/TelemetrySystem/TelemetrySystemShow';\nimport TelemetrySystemCreate from './components/TelemetrySystem/TelemetrySystemCreate';\nimport { DefectIcon } from './components/Defect';\nimport { EquipmentTemplateIcon } from './components/EquipmentTemplate';\nimport {\n EquipmentCatalogCreate,\n EquipmentCatalogEdit,\n EquipmentCatalogList,\n EquipmentCatalogShow,\n EquipmentIcon,\n} from './components/EquipmentCatalog';\nimport { STMIcon } from './components/TelemetrySystem';\nimport {\n CounterpartyShow,\n CounterpartyList,\n CounterpartyIcon,\n CounterpartyCreate,\n CounterpartyEdit,\n} from './components/Counterparty';\nimport { TestCreate, TestEdit, TestIcon, TestList, TestShow } from './components/Test';\n\nPagination.defaultProps = {\n rowsPerPageOptions: [10, 25, 50, 100],\n};\n\nconst App = () => {\n // const [dataProvider, setDataProvider] = useState(null);\n // const [loading, setLoading] = useState(true);\n\n // useEffect(() => {\n //\n // const onMount = () => {\n // dataProviderFactory().then(dataProvider => {\n // setDataProvider(() => dataProvider);\n // setLoading(false);\n // });\n // }\n //\n // onMount();\n //\n // return () => {\n // setDataProvider(null);\n // };\n //\n // }, []);\n //\n // if (loading) {\n // return (\n // <div>Loading...</div>\n // );\n // }\n\n return (\n <Admin\n theme={theme}\n layout={MyLayout}\n loginPage={MyLoginPage}\n authProvider={authProvider}\n dataProvider={dataProvider}\n i18nProvider={i18nProvider}\n dashboard={Dashboard}\n customReducers={{ user, onlineUsers, taskData }}\n customRoutes={customRoutes}\n >\n {(permissions) => [\n // actions: [\"getOne\", \"getMany\", \"create\", \"update\", \"delete\" ],\n <Resource\n name=\"Task\"\n icon={TaskIcon}\n list={permissions.ability.can('getList', 'Task') ? TaskList : null}\n show={permissions.ability.can('getOne', 'Task') ? TaskShow : null}\n create={permissions.ability.can('create', 'Task') ? TaskCreate : null}\n edit={permissions.ability.can('update', 'Task') ? TaskEdit : null}\n options={{ menuGroup: 'resources' }}\n />,\n <Resource\n name=\"ConstructionObject\"\n icon={MaintainableItemIcon}\n list={permissions.ability.can('getList', 'Object') ? MaintainableItemList : null}\n show={permissions.ability.can('getOne', 'Object') ? MaintainableItemShow : null}\n edit={permissions.ability.can('update', 'Object') ? MaintainableItemEdit : null}\n create={permissions.ability.can('create', 'Object') ? MaintainableItemCreate : null}\n options={{ menuGroup: 'resources' }}\n />,\n <Resource\n name=\"User\"\n icon={UserIcon}\n list={permissions.ability.can('getList', 'User') ? UserList : null}\n show={permissions.ability.can('getOne', 'User') ? UserShow : null}\n create={permissions.ability.can('create', 'User') ? UserCreate : null}\n edit={permissions.ability.can('update', 'User') ? UserEdit : null}\n options={{ menuGroup: 'access' }}\n />,\n <Resource\n name=\"Counterparty\"\n icon={CounterpartyIcon}\n list={permissions.ability.can('getList', 'Distributor') ? CounterpartyList : null}\n show={permissions.ability.can('getOne', 'Distributor') ? CounterpartyShow : null}\n create={permissions.ability.can('create', 'Distributor') ? CounterpartyCreate : null}\n edit={permissions.ability.can('update', 'Distributor') ? CounterpartyEdit : null}\n options={{ menuGroup: 'access' }}\n />,\n <Resource\n name=\"Region\"\n icon={LocationIcon}\n list={permissions.ability.can('getList', 'Location') ? LocationList : null}\n show={permissions.ability.can('getOne', 'Location') ? LocationShow : null}\n options={{ menuGroup: 'access' }}\n />,\n <Resource\n name=\"File\"\n icon={TaskFileIcon}\n list={permissions.ability.can('getList', 'File') ? FileList : null}\n show={permissions.ability.can('getOne', 'File') ? FileShow : null}\n options={{ menuGroup: 'directories' }}\n />,\n <Resource\n name=\"ConstructionObjectFile\"\n icon={ObjectFileIcon}\n list={permissions.ability.can('getList', 'File') ? FileList : null}\n show={permissions.ability.can('getOne', 'File') ? FileShow : null}\n options={{ menuGroup: 'directories' }}\n />,\n <Resource\n name=\"Defect\"\n list={permissions.ability.can('getList', 'Defect') && DefectList}\n edit={permissions.ability.can('update', 'Defect') && DefectEdit}\n show={permissions.ability.can('getOne', 'Defect') && DefectShow}\n create={permissions.ability.can('create', 'Defect') && DefectCreate}\n icon={DefectIcon}\n options={{ menuGroup: 'directories' }}\n />,\n <Resource\n name=\"EquipmentCatalog\"\n list={permissions.ability.can('getList', 'EquipmentCatalog') && EquipmentCatalogList}\n edit={permissions.ability.can('update', 'EquipmentCatalog') && EquipmentCatalogEdit}\n show={permissions.ability.can('getOne', 'EquipmentCatalog') && EquipmentCatalogShow}\n create={permissions.ability.can('create', 'EquipmentCatalog') && EquipmentCatalogCreate}\n icon={EquipmentIcon}\n options={{ menuGroup: 'directories' }}\n />,\n <Resource\n name=\"TelemetrySystem\"\n list={permissions.ability.can('getList', 'TelemetrySystem') && TelemetrySystemList}\n edit={permissions.ability.can('update', 'TelemetrySystem') && TelemetrySystemEdit}\n show={permissions.ability.can('getOne', 'TelemetrySystem') && TelemetrySystemShow}\n create={permissions.ability.can('create', 'TelemetrySystem') && TelemetrySystemCreate}\n icon={STMIcon}\n options={{ menuGroup: 'directories' }}\n />,\n <Resource\n name=\"Test\"\n list={permissions.ability.can('getList', 'Test') && TestList}\n edit={permissions.ability.can('update', 'Test') && TestEdit}\n show={permissions.ability.can('getOne', 'Test') && TestShow}\n create={permissions.ability.can('create', 'Test') && TestCreate}\n icon={TestIcon}\n options={{ menuGroup: 'directories' }}\n />,\n <Resource\n name=\"EquipmentTemplate\"\n icon={EquipmentTemplateIcon}\n list={permissions.ability.can('getList', 'EquipmentTemplate') && EquipmentTemplateList}\n edit={permissions.ability.can('update', 'EquipmentTemplate') && EquipmentTemplateEdit}\n show={permissions.ability.can('getOne', 'EquipmentTemplate') && EquipmentTemplateShow}\n create={permissions.ability.can('create', 'EquipmentTemplate') && EquipmentTemplateCreate}\n options={{ menuGroup: 'utils' }}\n />,\n <Resource\n name=\"ImportExport\"\n // list={ permissions.ability.can(\"getList\", \"ImportExport\") && ImportExportList }\n // show={permissions.ability.can(\"getOne\", \"ImportExport\") && ImportExportShow}\n list={permissions.ability.can('getList', 'ImportExport') && ImportExportList}\n show={ImportExportShow}\n icon={ImportExportIcon}\n options={{ menuGroup: 'utils' }}\n />,\n <Resource\n name=\"History\"\n icon={HistoryIcon}\n list={permissions.ability.can('getList', 'History') ? HistoryList : null}\n show={permissions.ability.can('getOne', 'History') ? HistoryShow : null}\n options={{ menuGroup: 'utils' }}\n />,\n <Resource\n name=\"TrashItem\"\n icon={TrashItemIcon}\n list={permissions.ability.can('getList', 'TrashItem') ? TrashItemList : null}\n options={{ menuGroup: 'utils' }}\n />,\n\n <Resource name=\"Profile\" />,\n <Resource name=\"UsersFilter\" />,\n <Resource name=\"ObjectHistory\" />,\n ]}\n </Admin>\n );\n};\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/),\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 (response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1)) {\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('No internet connection found. App is running in offline mode.');\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 './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(<App />, document.getElementById('root'));\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":""}