From ec3a0e07f4fa05abe0e26b2fc2aa890fd09bee3f Mon Sep 17 00:00:00 2001 From: Martin Weise <martin.weise@tuwien.ac.at> Date: Thu, 3 Apr 2025 14:16:44 +0000 Subject: [PATCH] Need assets path --- .docker/docker-compose.yml | 173 +- .docs/.openapi/api-analyse.yaml | 40 +- .docs/.openapi/api-dashboard.yaml | 1 + .docs/.openapi/api-data.yaml | 772 ++-- .docs/.openapi/api-metadata.yaml | 1858 ++++---- .docs/.openapi/api-search.yaml | 21 +- .docs/.openapi/api.base.yaml | 4 +- .docs/.openapi/api.yaml | 1223 +++--- .docs/.openapi/openapi-generate.sh | 7 +- .docs/api/broker-service.md | 3 - .docs/api/dashboard-service.md | 51 - .docs/api/data-service.md | 13 + .docs/api/ui.md | 5 - .docs/changelog.md | 19 + .docs/concepts/dashboards.md | 27 + .docs/concepts/data-versioning.md | 37 +- .docs/concepts/data-visibility.md | 20 +- .docs/concepts/ui.md | 21 - .docs/images/architecture-data-db.svg | 3 - .docs/images/architecture-docker-compose.svg | 2 +- .docs/images/architecture.drawio | 268 +- .docs/images/data-versioning.png | Bin 0 -> 45988 bytes .../images/screenshots/dashboard-managed.png | Bin 0 -> 115429 bytes .docs/index.md | 14 +- .docs/kubernetes.md | 2 +- .gitignore | 2 + .gitlab-ci.yml | 175 +- .gitlab/check-supported-images.sh | 30 + .gitlab/remove-unsupported-images.sh | 44 +- .scripts/check-service.sh | 1 + Makefile | 4 +- dbrepo-analyse-service/.gitignore | 1 + dbrepo-analyse-service/Dockerfile | 11 +- dbrepo-analyse-service/Pipfile | 2 +- dbrepo-analyse-service/Pipfile.lock | 1178 ++--- dbrepo-analyse-service/app.py | 65 +- .../clients/keycloak_client.py | 37 - dbrepo-analyse-service/determine_dt.py | 28 +- dbrepo-analyse-service/determine_pk.py | 18 +- .../lib/dbrepo-1.7.2.tar.gz | Bin 49700 -> 0 bytes .../lib/dbrepo-1.7.3-py3-none-any.whl | Bin 32568 -> 0 bytes .../lib/dbrepo-1.7.3.tar.gz | Bin 49697 -> 0 bytes .../lib/dbrepo-1.8.0-py3-none-any.whl | Bin 0 -> 88139 bytes .../lib/dbrepo-1.8.0.tar.gz | Bin 0 -> 97612 bytes dbrepo-analyse-service/tests/conftest.py | 2 +- dbrepo-analyse-service/tests/s3_config.json | 20 - .../tests/test_determine_dt.py | 47 +- .../tests/test_determine_pk.py | 52 +- dbrepo-auth-service/init/.coveragerc | 2 - dbrepo-auth-service/init/app.py | 30 +- .../init/tests/test_unit_app.py | 18 +- .../target/create-event-listener.jar | Bin 10141 -> 10143 bytes dbrepo-dashboard-service/.coveragerc | 7 + dbrepo-dashboard-service/.gitignore | 135 + dbrepo-dashboard-service/Dockerfile | 29 +- dbrepo-dashboard-service/Pipfile | 28 + dbrepo-dashboard-service/Pipfile.lock | 2224 ++++++++++ dbrepo-dashboard-service/README.md | 14 + dbrepo-dashboard-service/access.py | 30 - dbrepo-dashboard-service/app.py | 237 + .../clients/grafana_client.py | 27 - .../clients/keycloak_client.py | 35 - dbrepo-dashboard-service/dashboard.py | 344 -- .../ds-yml/create_dashboard.yml | 55 + .../ds-yml/update_dashboard.yml | 43 + dbrepo-dashboard-service/init/.coveragerc | 7 + dbrepo-dashboard-service/init/Dockerfile | 25 + dbrepo-dashboard-service/init/Pipfile | 28 + dbrepo-dashboard-service/init/Pipfile.lock | 2434 +++++++++++ dbrepo-dashboard-service/init/app.py | 67 + .../init/lib/dbrepo-1.8.0-py3-none-any.whl | Bin 0 -> 88139 bytes .../init/lib/dbrepo-1.8.0.tar.gz | Bin 0 -> 97612 bytes .../init/tests/rsa/rs256.key | 0 .../init/tests/rsa/rsa256.pkey | 0 .../init/tests/test_app.py | 100 + .../lib/dbrepo-1.8.0-py3-none-any.whl | Bin 0 -> 88139 bytes .../lib/dbrepo-1.8.0.tar.gz | Bin 0 -> 97612 bytes dbrepo-dashboard-service/panel.py | 252 -- dbrepo-dashboard-service/test.sh | 7 + dbrepo-dashboard-service/tests/conftest.py | 48 + .../tests/grafana/__init__.py | 28 + dbrepo-dashboard-service/tests/rsa/rs256.key | 3 + .../tests/rsa/rsa256.pkey | 3 + .../tests/test_integration_app.py | 208 + dbrepo-dashboard-ui/Dockerfile | 9 + .../dashboards/System/dbrepo.json | 122 +- .../dashboards/System}/rabbitmq.json | 6 +- .../grafana.ini | 1 - .../ldap.toml | 8 +- .../provisioning/dashboards/provider.yaml | 20 + .../provisioning/datasources/infinity.yaml | 17 + .../provisioning/datasources/prometheus.yaml | 7 + dbrepo-data-service/Dockerfile | 6 +- dbrepo-data-service/pom.xml | 93 +- dbrepo-data-service/querystore/pom.xml | 4 +- dbrepo-data-service/report/pom.xml | 4 +- dbrepo-data-service/rest-service/pom.xml | 6 +- ...ation.java => DataServiceApplication.java} | 6 +- .../at/tuwien/endpoints/AccessEndpoint.java | 10 +- .../at/tuwien/endpoints/DatabaseEndpoint.java | 15 +- .../at/tuwien/endpoints/RestEndpoint.java | 2 +- .../at/tuwien/endpoints/SubsetEndpoint.java | 28 +- .../at/tuwien/endpoints/TableEndpoint.java | 31 +- .../at/tuwien/endpoints/UploadEndpoint.java | 8 +- .../at/tuwien/endpoints/ViewEndpoint.java | 67 +- .../tuwien/handlers/ApiExceptionHandler.java | 18 +- .../tuwien/validation/EndpointValidator.java | 14 +- .../src/main/resources/application.yml | 13 +- .../java/at/tuwien/config/MariaDbConfig.java | 6 +- .../tuwien/config/MariaDbContainerConfig.java | 10 +- .../endpoint/AccessEndpointUnitTest.java | 18 +- .../endpoint/DatabaseEndpointUnitTest.java | 26 +- .../endpoint/SubsetEndpointUnitTest.java | 22 +- .../endpoint/TableEndpointUnitTest.java | 54 +- .../tuwien/endpoint/ViewEndpointUnitTest.java | 18 +- .../tuwien/gateway/InterceptorUnitTest.java | 13 +- .../MetadataServiceGatewayUnitTest.java | 30 +- .../handlers/ApiExceptionHandlerTest.java | 12 +- .../DefaultListenerIntegrationTest.java | 31 +- .../listener/DefaultListenerUnitTest.java | 85 +- .../tuwien/mapper/MariaDbMapperUnitTest.java | 6 +- .../tuwien/mvc/ActuatorEndpointMvcTest.java | 4 +- .../at/tuwien/mvc/OpenApiEndpointMvcTest.java | 11 +- .../tuwien/mvc/PrometheusEndpointMvcTest.java | 14 +- .../at/tuwien/mvc/SubsetEndpointMvcTest.java | 4 +- .../service/AccessServiceIntegrationTest.java | 11 +- .../ContainerServiceIntegrationTest.java | 21 +- .../service/CredentialServiceUnitTest.java | 19 +- .../DatabaseServiceIntegrationTest.java | 63 +- .../service/QueueServiceIntegrationTest.java | 15 +- .../StorageServiceIntegrationTest.java | 45 +- .../service/SubsetServiceIntegrationTest.java | 20 +- .../service/TableServiceIntegrationTest.java | 49 +- .../service/ViewServiceIntegrationTest.java | 9 +- .../java/at/tuwien/utils/MariaDbUtilTest.java | 2 +- .../validation/EndpointValidatorUnitTest.java | 6 +- .../src/test/resources/application.properties | 1 + dbrepo-data-service/services/pom.xml | 6 +- .../java/at/tuwien/auth/AuthTokenFilter.java | 4 +- .../auth/BasicAuthenticationProvider.java | 3 +- .../auth/InternalRequestInterceptor.java | 2 +- .../java/at/tuwien/config/CacheConfig.java | 20 +- .../main/java/at/tuwien/config/S3Config.java | 3 + .../at/tuwien/gateway/KeycloakGateway.java | 10 +- .../gateway/MetadataServiceGateway.java | 18 +- .../gateway/impl/KeycloakGatewayImpl.java | 2 +- .../impl/MetadataServiceGatewayImpl.java | 20 +- .../at/tuwien/listener/DefaultListener.java | 12 +- .../java/at/tuwien/mapper/DataMapper.java | 41 +- .../java/at/tuwien/mapper/MariaDbMapper.java | 80 +- .../java/at/tuwien/mapper/MetadataMapper.java | 37 +- .../java/at/tuwien/service/AccessService.java | 8 +- .../java/at/tuwien/service/CacheService.java | 31 +- .../at/tuwien/service/ContainerService.java | 10 +- .../at/tuwien/service/CredentialService.java | 2 +- .../at/tuwien/service/DatabaseService.java | 12 +- .../java/at/tuwien/service/QueueService.java | 4 +- .../at/tuwien/service/StorageService.java | 15 +- .../java/at/tuwien/service/SubsetService.java | 10 +- .../java/at/tuwien/service/TableService.java | 18 +- .../java/at/tuwien/service/ViewService.java | 8 +- .../impl/AccessServiceMariaDbImpl.java | 12 +- .../tuwien/service/impl/CacheServiceImpl.java | 42 +- .../impl/ContainerServiceMariaDbImpl.java | 12 +- .../service/impl/CredentialServiceImpl.java | 16 +- .../at/tuwien/service/impl/DataConnector.java | 4 +- .../impl/DatabaseServiceMariaDbImpl.java | 16 +- .../impl/QueueServiceRabbitMqImpl.java | 6 +- .../service/impl/StorageServiceS3Impl.java | 41 +- .../impl/SubsetServiceMariaDbImpl.java | 27 +- .../service/impl/TableServiceMariaDbImpl.java | 67 +- .../service/impl/ViewServiceMariaDbImpl.java | 8 +- .../at/tuwien/timer/StaleObjectTimer.java | 25 + .../java/at/tuwien/utils/MariaDbUtil.java | 2 +- dbrepo-gateway-service/dbrepo.conf | 93 +- dbrepo-grafana-service/.dockerignore | 1 + dbrepo-grafana-service/.gitignore | 43 + .../.mvn/wrapper/MavenWrapperDownloader.java | 118 + .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 50710 bytes .../.mvn/wrapper/maven-wrapper.properties | 2 + dbrepo-grafana-service/Dockerfile | 31 + dbrepo-grafana-service/README.md | 38 + dbrepo-grafana-service/mvnw | 310 ++ dbrepo-grafana-service/mvnw.cmd | 182 + dbrepo-grafana-service/pom.xml | 299 ++ dbrepo-grafana-service/rest-service/pom.xml | 35 + .../DbrepoGrafanaServiceApplication.java | 13 + .../java/at/tuwien/auth/AuthTokenFilter.java | 96 + .../auth/BasicAuthenticationProvider.java | 60 + .../java/at/tuwien/config/CacheConfig.java | 40 + .../java/at/tuwien/config/GatewayConfig.java | 104 + .../java/at/tuwien/config/KeycloakConfig.java | 50 + .../at/tuwien/config/WebSecurityConfig.java | 107 + .../at/tuwien/dto/DashboardConfigDto.java | 46 + .../at/tuwien/dto/HistogramConfigDto.java | 14 + .../java/at/tuwien/dto/PieChartConfigDto.java | 14 + .../java/at/tuwien/dto/TableConfigDto.java | 12 + .../src/main/java/at/tuwien/dto/TimeDto.java | 17 + .../java/at/tuwien/dto/TimeSeriesDto.java | 14 + .../tuwien/endpoints/DashboardEndpoint.java | 92 + .../at/tuwien/endpoints/DataEndpoint.java | 157 + .../exception/ContainerNotFoundException.java | 21 + .../exception/DatabaseMalformedException.java | 21 + .../exception/DatabaseNotFoundException.java | 21 + .../DatabaseUnavailableException.java | 21 + .../FormatNotAvailableException.java | 23 + .../exception/JsonProcessingException.java | 17 + .../tuwien/exception/NotAllowedException.java | 21 + .../tuwien/exception/PaginationException.java | 22 + .../exception/QueryMalformedException.java | 21 + .../exception/QueryNotFoundException.java | 21 + .../exception/QueryStoreCreateException.java | 21 + .../exception/QueryStoreGCException.java | 21 + .../exception/QueryStoreInsertException.java | 21 + .../exception/QueryStorePersistException.java | 21 + .../exception/RemoteUnavailableException.java | 21 + .../RestTemplateExchangeException.java | 17 + .../exception/ServiceConnectionException.java | 21 + .../at/tuwien/exception/ServiceException.java | 21 + .../exception/SidecarExportException.java | 21 + .../exception/SidecarImportException.java | 21 + .../exception/StorageNotFoundException.java | 21 + .../StorageUnavailableException.java | 21 + .../SyncDatabaseNotFoundException.java | 17 + .../exception/TableExistsException.java | 21 + .../exception/TableMalformedException.java | 21 + .../exception/TableNotFoundException.java | 21 + .../exception/UserNotFoundException.java | 21 + .../at/tuwien/gateway/KeycloakGateway.java | 11 + .../gateway/impl/KeycloakGatewayImpl.java | 81 + .../DashboardApiExceptionHandler.java | 52 + .../interceptor/KeycloakInterceptor.java | 55 + .../java/at/tuwien/panels/AbstractPanel.java | 47 + .../java/at/tuwien/panels/CntAllPanel.java | 69 + .../main/java/at/tuwien/panels/Dashboard.java | 29 + .../java/at/tuwien/panels/HistogramPanel.java | 110 + .../tuwien/panels/MultiTimeSeriesPanel.java | 90 + .../java/at/tuwien/panels/PieChartPanel.java | 110 + .../main/java/at/tuwien/panels/RowPanel.java | 52 + .../java/at/tuwien/panels/StatsPanel.java | 183 + .../java/at/tuwien/panels/TablePanel.java | 73 + .../at/tuwien/panels/TimeSeriesPanel.java | 93 + .../at/tuwien/service/DashboardService.java | 9 + .../java/at/tuwien/service/DataService.java | 14 + .../at/tuwien/service/DataSourceService.java | 7 + .../java/at/tuwien/service/TableService.java | 16 + .../tuwien/service/ViewGeneratorService.java | 15 + .../service/impl/DashboardServiceImpl.java | 408 ++ .../tuwien/service/impl/DataServiceImpl.java | 405 ++ .../service/impl/DataSourceServiceImpl.java | 99 + .../tuwien/service/impl/TableServiceImpl.java | 121 + .../impl/ViewGeneratorServiceImpl.java | 225 + .../src/main/resources/application-local.yml | 89 + .../src/main/resources/application.yml | 107 + .../src/test/resources/application.properties | 0 dbrepo-metadata-db/1_setup-schema.sql | 34 +- dbrepo-metadata-db/2_setup-data.sql | 4 +- dbrepo-metadata-db/migration/16/schema.sql | 2 + dbrepo-metadata-db/migration/16/update_id.sql | 11 + dbrepo-metadata-service/Dockerfile | 33 +- dbrepo-metadata-service/api/pom.xml | 45 - .../database/query/ExecuteStatementDto.java | 22 - .../AffiliationDto.java} | 11 +- .../java/at/tuwien/api/doi/AuthorDto.java | 35 + .../main/java/at/tuwien/api/doi/DoiDto.java | 82 + .../java/at/tuwien/api/doi/LicenseDto.java | 32 + .../main/java/at/tuwien/api/doi/LinkDto.java | 35 + .../java/at/tuwien/api/doi/ReferenceDto.java | 55 + .../java/at/tuwien/api/doi/ResourceDto.java | 20 + .../api/doi/ResourceRepresentationDto.java | 20 + .../tuwien/api/doi/TimeRepresentationDto.java | 33 + .../OrcidDisambiguatedSourceTypeDto.java | 6 - dbrepo-metadata-service/entities/pom.xml | 38 - .../tuwien/entities/identifier/NameType.java | 9 - dbrepo-metadata-service/oai/pom.xml | 4 +- .../ifs/dbrepo}/oaipmh/OaiErrorType.java | 6 +- .../oaipmh/OaiListIdentifiersParameters.java | 2 +- .../oaipmh/OaiListRecordsParameters.java | 2 +- .../dbrepo}/oaipmh/OaiRecordParameters.java | 2 +- .../ifs/dbrepo}/oaipmh/RequestParameters.java | 2 +- dbrepo-metadata-service/pom.xml | 85 +- dbrepo-metadata-service/report/pom.xml | 4 +- dbrepo-metadata-service/repositories/pom.xml | 40 +- .../ifs/dbrepo}/mapper/SparqlMapper.java | 4 +- .../repository/BannerMessageRepository.java | 4 +- .../dbrepo}/repository/ConceptRepository.java | 4 +- .../repository/ContainerRepository.java | 4 +- .../repository/DatabaseRepository.java | 4 +- .../repository/IdentifierRepository.java | 4 +- .../dbrepo}/repository/ImageRepository.java | 4 +- .../dbrepo}/repository/LicenseRepository.java | 4 +- .../repository/OntologyRepository.java | 4 +- .../dbrepo}/repository/TableRepository.java | 4 +- .../dbrepo}/repository/UnitRepository.java | 4 +- .../dbrepo}/repository/UserRepository.java | 4 +- .../dbrepo}/repository/ViewRepository.java | 4 +- .../dbrepo}/utils/EnumToStringConverter.java | 2 +- dbrepo-metadata-service/rest-service/pom.xml | 18 +- .../dbrepo/MetadataServiceApplication.java} | 10 +- .../tuwien/ifs/dbrepo}/config/MvcConfig.java | 6 +- .../ifs/dbrepo}/config/SwaggerConfig.java | 2 +- .../IdentifierStatusTypeDtoConverter.java | 4 +- .../IdentifierTypeDtoConverter.java | 4 +- .../dbrepo/endpoints/AbstractEndpoint.java | 136 + .../ifs/dbrepo}/endpoints/AccessEndpoint.java | 62 +- .../dbrepo}/endpoints/ConceptEndpoint.java | 8 +- .../dbrepo}/endpoints/ContainerEndpoint.java | 22 +- .../dbrepo}/endpoints/DatabaseEndpoint.java | 155 +- .../dbrepo}/endpoints/IdentifierEndpoint.java | 38 +- .../ifs/dbrepo}/endpoints/ImageEndpoint.java | 28 +- .../dbrepo}/endpoints/LicenseEndpoint.java | 8 +- .../dbrepo}/endpoints/MessageEndpoint.java | 20 +- .../dbrepo}/endpoints/MetadataEndpoint.java | 12 +- .../dbrepo}/endpoints/OntologyEndpoint.java | 26 +- .../ifs/dbrepo}/endpoints/TableEndpoint.java | 155 +- .../ifs/dbrepo}/endpoints/UnitEndpoint.java | 8 +- .../ifs/dbrepo}/endpoints/UserEndpoint.java | 30 +- .../ifs/dbrepo}/endpoints/ViewEndpoint.java | 88 +- .../dbrepo}/handlers/ApiExceptionHandler.java | 20 +- .../dbrepo}/validation/EndpointValidator.java | 30 +- .../at/tuwien/endpoints/AbstractEndpoint.java | 53 - .../src/main/resources/application.yml | 17 +- .../src/main/resources/datatypes.json | 15 - .../dbrepo}/ApplicationIntegrationTest.java | 4 +- .../dbrepo}/config/ObjectMapperConfig.java | 2 +- .../ifs/dbrepo}/config/RabbitConfig.java | 6 +- ...ntifierStatusTypeDtoConverterUnitTest.java | 16 +- .../IdentifierTypeDtoConverterUnitTest.java | 16 +- .../endpoints/AbstractEndpointUnitTest.java | 36 +- .../endpoints/AccessEndpointUnitTest.java | 63 +- .../endpoints/ActuatorComponentTest.java | 14 +- .../endpoints/ConceptEndpointUnitTest.java | 23 +- .../endpoints/ContainerEndpointUnitTest.java | 42 +- .../endpoints/DatabaseEndpointUnitTest.java | 96 +- .../endpoints/IdentifierEndpointUnitTest.java | 213 +- .../endpoints/ImageEndpointUnitTest.java | 82 +- .../endpoints/LicenseEndpointUnitTest.java | 16 +- .../endpoints/MessageEndpointUnitTest.java | 34 +- .../endpoints/MetadataEndpointUnitTest.java | 20 +- .../endpoints/OntologyEndpointUnitTest.java | 38 +- .../endpoints/TableEndpointUnitTest.java | 314 +- .../endpoints/UnitEndpointUnitTest.java | 21 +- .../endpoints/UserEndpointUnitTest.java | 42 +- .../endpoints/ViewEndpointUnitTest.java | 167 +- .../ifs/dbrepo/entity}/EntitiesUnitTest.java | 6 +- .../gateway/BrokerServiceGatewayUnitTest.java | 15 +- .../gateway/CrossRefGatewayUnitTest.java} | 22 +- .../DashboardServiceGatewayUnitTest.java | 286 ++ .../gateway/DataServiceGatewayUnitTest.java | 36 +- .../KeycloakGatewayIntegrationTest.java | 19 +- .../dbrepo}/gateway/OrcidGatewayUnitTest.java | 17 +- .../dbrepo}/gateway/RorGatewayUnitTest.java | 15 +- .../gateway/SearchServiceGatewayUnitTest.java | 12 +- .../handlers/ApiExceptionHandlerTest.java | 42 +- .../mapper/MetadataMapperUnitTest.java | 29 +- .../dbrepo}/mvc/ActuatorEndpointMvcTest.java | 6 +- ...nticationPrivilegedIntegrationMvcTest.java | 35 +- .../mvc/IdentifierEndpointMvcTest.java | 11 +- .../dbrepo}/mvc/MetadataEndpointMvcTest.java | 16 +- .../dbrepo}/mvc/OpenApiEndpointMvcTest.java | 15 +- .../mvc/PrometheusEndpointMvcTest.java | 33 +- .../service/AccessServiceUnitTest.java | 28 +- .../AuthenticationServiceIntegrationTest.java | 22 +- .../service/BrokerServiceIntegrationTest.java | 36 +- .../service/ConceptServiceUnitTest.java | 18 +- .../service/ContainerServiceUnitTest.java | 38 +- ...aCiteIdentifierServicePersistenceTest.java | 46 +- .../DatabaseServicePersistenceTest.java | 34 +- .../service/DatabaseServiceUnitTest.java | 64 +- .../service/EntityServiceUnitTest.java | 27 +- .../IdentifierServicePersistenceTest.java | 47 +- .../service/ImageServicePersistenceTest.java | 47 +- .../dbrepo}/service/ImageServiceUnitTest.java | 52 +- .../service/LicenseServiceUnitTest.java | 18 +- .../service/MessageServiceUnitTest.java | 25 +- .../service/MetadataServiceUnitTest.java | 48 +- .../StorageServiceIntegrationTest.java | 14 +- .../service/TableServicePersistenceTest.java | 49 +- .../dbrepo}/service/TableServiceUnitTest.java | 73 +- .../dbrepo}/service/UnitServiceUnitTest.java | 18 +- .../service/UserServiceIntegrationTest.java | 28 +- .../service/UserServicePersistenceTest.java | 21 +- .../dbrepo}/service/UserServiceUnitTest.java | 26 +- .../service/ViewServicePersistenceTest.java | 28 +- .../dbrepo}/service/ViewServiceUnitTest.java | 42 +- .../tuwien/ifs/dbrepo}/utils/AmqpUtils.java | 6 +- .../tuwien/ifs/dbrepo}/utils/H2Utils.java | 2 +- .../ifs/dbrepo}/utils/KeycloakUtils.java | 10 +- .../tuwien/ifs/dbrepo}/utils/XmlUtils.java | 2 +- .../validator/EndpointValidatorUnitTest.java | 46 +- .../src/test/resources/application.properties | 8 +- .../src/test/resources/doi/database.json | 70 + .../src/test/resources/doi/dataset.json | 25 + .../test/resources/doi/journal-article.json | 403 ++ .../resources/doi/proceedings-article.json | 320 ++ dbrepo-metadata-service/services/pom.xml | 13 +- .../ifs/dbrepo}/auth/AuthTokenFilter.java | 8 +- .../auth/BasicAuthenticationProvider.java | 8 +- .../auth/InternalRequestInterceptor.java | 8 +- .../ifs/dbrepo}/config/CacheConfig.java | 4 +- .../ifs/dbrepo}/config/DataCiteConfig.java | 2 +- .../ifs/dbrepo}/config/EndpointConfig.java | 2 +- .../ifs/dbrepo}/config/GatewayConfig.java | 35 +- .../ifs/dbrepo}/config/JacksonConfig.java | 6 +- .../tuwien/ifs/dbrepo}/config/JenaConfig.java | 2 +- .../ifs/dbrepo}/config/KeycloakConfig.java | 2 +- .../ifs/dbrepo}/config/MetadataConfig.java | 2 +- .../ifs/dbrepo}/config/MetricsConfig.java | 12 +- .../ifs/dbrepo}/config/RabbitConfig.java | 2 +- .../tuwien/ifs/dbrepo}/config/S3Config.java | 2 +- .../ifs/dbrepo}/config/SecurityConfig.java | 2 +- .../ifs/dbrepo}/config/TemplateConfig.java | 2 +- .../ifs/dbrepo}/config/WebSecurityConfig.java | 8 +- .../dbrepo}/gateway/BrokerServiceGateway.java | 8 +- .../ifs/dbrepo/gateway/CrossRefGateway.java} | 10 +- .../gateway/DashboardServiceGateway.java | 51 + .../dbrepo}/gateway/DataServiceGateway.java | 30 +- .../ifs/dbrepo}/gateway/KeycloakGateway.java | 10 +- .../ifs/dbrepo}/gateway/OrcidGateway.java | 6 +- .../ifs/dbrepo}/gateway/RorGateway.java | 6 +- .../dbrepo}/gateway/SearchServiceGateway.java | 8 +- .../impl/BrokerServiceGatewayImpl.java | 13 +- .../gateway/impl/CrossRefGatewayImpl.java} | 24 +- .../impl/DashboardServiceGatewayImpl.java | 142 + .../gateway/impl/DataServiceGatewayImpl.java | 31 +- .../gateway/impl/KeycloakGatewayImpl.java | 16 +- .../gateway/impl/OrcidGatewayImpl.java | 10 +- .../dbrepo}/gateway/impl/RorGatewayImpl.java | 12 +- .../impl/SearchServiceGatewayImpl.java | 21 +- .../ifs/dbrepo/service/AccessService.java | 81 + .../dbrepo/service/AuthenticationService.java | 18 + .../dbrepo}/service/BannerMessageService.java | 10 +- .../ifs/dbrepo/service/BrokerService.java | 25 + .../ifs/dbrepo}/service/ConceptService.java | 6 +- .../ifs/dbrepo}/service/ContainerService.java | 15 +- .../dbrepo}/service/CredentialService.java | 4 +- .../ifs/dbrepo/service/DashboardService.java | 44 + .../ifs/dbrepo/service/DatabaseService.java | 193 + .../ifs/dbrepo}/service/EntityService.java | 34 +- .../dbrepo}/service/IdentifierService.java | 86 +- .../ifs/dbrepo}/service/ImageService.java | 15 +- .../ifs/dbrepo}/service/LicenseService.java | 6 +- .../ifs/dbrepo}/service/MetadataService.java | 20 +- .../ifs/dbrepo}/service/OntologyService.java | 17 +- .../ifs/dbrepo}/service/StorageService.java | 12 +- .../ifs/dbrepo/service/TableService.java | 140 + .../ifs/dbrepo}/service/UnitService.java | 12 +- .../ifs/dbrepo}/service/UserService.java | 23 +- .../ifs/dbrepo/service/ViewService.java | 69 + .../service/impl/AccessServiceImpl.java | 24 +- .../impl/AuthenticationServiceImpl.java | 12 +- .../impl/BannerMessageServiceImpl.java | 16 +- .../impl/BrokerServiceRabbitMqImpl.java | 18 +- .../service/impl/ConceptServiceImpl.java | 10 +- .../service/impl/ContainerServiceImpl.java | 22 +- .../service/impl/CredentialServiceImpl.java | 8 +- .../service/impl/DashboardServiceImpl.java | 51 + .../impl/DataCiteIdentifierServiceImpl.java | 50 +- .../service/impl/DatabaseServiceImpl.java | 81 +- .../service/impl/EntityServiceImpl.java | 22 +- .../service/impl/IdentifierServiceImpl.java | 53 +- .../service/impl/ImageServiceImpl.java | 20 +- .../service/impl/LicenseServiceImpl.java | 10 +- .../service/impl/MetadataServiceImpl.java | 51 +- .../service/impl/OntologyServiceImpl.java | 21 +- .../service/impl/StorageServiceS3Impl.java | 14 +- .../service/impl/TableServiceImpl.java | 54 +- .../dbrepo}/service/impl/UnitServiceImpl.java | 10 +- .../dbrepo}/service/impl/UserServiceImpl.java | 29 +- .../dbrepo}/service/impl/ViewServiceImpl.java | 71 +- .../java/at/tuwien/service/AccessService.java | 70 - .../tuwien/service/AuthenticationService.java | 22 - .../java/at/tuwien/service/BrokerService.java | 21 - .../at/tuwien/service/DatabaseService.java | 124 - .../java/at/tuwien/service/TableService.java | 64 - .../java/at/tuwien/service/ViewService.java | 72 - .../java/at/tuwien/test/AbstractUnitTest.java | 160 - dbrepo-metric-db/prometheus.yml | 2 +- dbrepo-search-db/Dockerfile | 30 - dbrepo-search-db/README.md | 16 - dbrepo-search-db/config.yml | 41 - dbrepo-search-db/generate-pki.sh | 20 - dbrepo-search-db/limits.conf | 3 - dbrepo-search-db/opensearch.yml | 21 - dbrepo-search-db/opensearch_dashboards.yml | 5 - dbrepo-search-db/pem/admin-key.pem | 51 - dbrepo-search-db/pem/admin.csr | 27 - dbrepo-search-db/pem/admin.pem | 30 - dbrepo-search-db/pem/node1-key.pem | 51 - dbrepo-search-db/pem/node1.csr | 27 - dbrepo-search-db/pem/node1.pem | 30 - dbrepo-search-db/pem/root-ca-key.pem | 51 - dbrepo-search-db/pem/root-ca.pem | 32 - dbrepo-search-db/pem/root-ca.srl | 1 - dbrepo-search-service/.gitignore | 6 - dbrepo-search-service/.testpickle | Bin 100 -> 0 bytes dbrepo-search-service/Dockerfile | 6 +- dbrepo-search-service/Pipfile | 3 +- dbrepo-search-service/Pipfile.lock | 1638 ++++--- dbrepo-search-service/app.py | 128 +- .../database/fields_response_payload.json | 65 - .../database/search_request_payload.json | 10 - .../unit/fields_response_payload.json | 29 - .../examples/unit/search_request_payload.json | 7 - .../friendly_names_overrides.json | 18 + dbrepo-search-service/init/Dockerfile | 13 +- dbrepo-search-service/init/Pipfile | 3 +- dbrepo-search-service/init/Pipfile.lock | 1297 ++++-- dbrepo-search-service/init/app.py | 98 +- .../init/clients/keycloak_client.py | 56 - .../init/lib/dbrepo-1.7.2.tar.gz | Bin 49700 -> 0 bytes .../init/lib/dbrepo-1.7.3-py3-none-any.whl | Bin 32568 -> 0 bytes .../init/lib/dbrepo-1.7.3.tar.gz | Bin 49697 -> 0 bytes .../init/lib/dbrepo-1.8.0-py3-none-any.whl | Bin 0 -> 88139 bytes .../init/lib/dbrepo-1.8.0.tar.gz | Bin 0 -> 97612 bytes dbrepo-search-service/init/tests/test_app.py | 21 - .../init/tests/test_unit_app.py | 50 + dbrepo-search-service/lib/dbrepo-1.7.2.tar.gz | Bin 49700 -> 0 bytes .../lib/dbrepo-1.7.3-py3-none-any.whl | Bin 32568 -> 0 bytes dbrepo-search-service/lib/dbrepo-1.7.3.tar.gz | Bin 49697 -> 0 bytes .../lib/dbrepo-1.8.0-py3-none-any.whl | Bin 0 -> 88139 bytes dbrepo-search-service/lib/dbrepo-1.8.0.tar.gz | Bin 0 -> 97612 bytes ...{update_database.yml => save_database.yml} | 19 +- dbrepo-search-service/tests/.testpickle | Bin 700 -> 0 bytes dbrepo-search-service/tests/__init__.py | 3 - dbrepo-search-service/tests/test_app.py | 57 +- dbrepo-search-service/tests/test_jwt.py | 98 - .../components/database/DatabaseToolbar.vue | 9 +- dbrepo-ui/components/identifier/Citation.vue | 1 - dbrepo-ui/components/subset/Builder.vue | 74 +- dbrepo-ui/composables/axios-instance.ts | 25 +- dbrepo-ui/composables/database-service.ts | 8 +- dbrepo-ui/dto/index.ts | 4 +- dbrepo-ui/locales/en-US.json | 28 +- dbrepo-ui/nuxt.config.ts | 3 + .../pages/database/[database_id]/info.vue | 35 +- .../pages/database/[database_id]/settings.vue | 46 +- .../database/[database_id]/subset/index.vue | 2 +- .../[database_id]/table/[table_id]/info.vue | 11 + .../[database_id]/view/[view_id]/info.vue | 2 +- .../[database_id]/view/[view_id]/settings.vue | 1 + docker-compose.yml | 188 +- grafana/grafana.ini | 5 + helm/dbrepo/Chart.lock | 4 +- helm/dbrepo/Chart.yaml | 8 +- helm/dbrepo/README.md | 81 +- helm/dbrepo/charts/seaweedfs-4.2.1.tgz | Bin 249367 -> 249643 bytes helm/dbrepo/files/01-setup-schema.sql | 34 +- helm/dbrepo/files/create-event-listener.jar | Bin 10141 -> 10143 bytes helm/dbrepo/templates/auth-secret.yaml | 94 - .../dbrepo/templates/dashboard-configmap.yaml | 11 - .../templates/dashboard-deployment.yaml | 77 + helm/dbrepo/templates/dashboard-secret.yaml | 57 +- .../dashboard-ui-prov-datasources-secret.yaml | 33 + .../dbrepo/templates/dashboard-ui-secret.yaml | 58 + helm/dbrepo/templates/gateway-configmap.yaml | 69 +- helm/dbrepo/templates/identity-secret.yaml | 12 +- helm/dbrepo/templates/metadata-configmap.yaml | 7 +- helm/dbrepo/templates/metadata-secret.yaml | 1 + helm/dbrepo/values.schema.json | 369 +- helm/dbrepo/values.yaml | 235 +- helm/seaweedfs/Chart.lock | 8 +- helm/seaweedfs/charts/mariadb-20.4.1.tgz | Bin 72936 -> 0 bytes helm/seaweedfs/charts/mariadb-20.4.2.tgz | Bin 0 -> 72935 bytes helm/seaweedfs/charts/postgresql-16.4.16.tgz | Bin 81305 -> 0 bytes helm/seaweedfs/charts/postgresql-16.6.0.tgz | Bin 0 -> 81557 bytes install.sh | 2 +- lib/java/dbrepo-core/.gitignore | 35 + lib/java/dbrepo-core/Dockerfile | 12 + lib/java/dbrepo-core/pom.xml | 167 + .../ac/tuwien/ifs/dbrepo/core/Serialize.java | 32 + .../ifs/dbrepo/core}/api/CacheableDto.java | 2 +- .../dbrepo/core/api}/ExportResourceDto.java | 2 +- .../core}/api/amqp/ChannelDetailsDto.java | 2 +- .../dbrepo/core}/api/amqp/ConsumerDto.java | 2 +- .../core}/api/amqp/CreateExchangeDto.java | 2 +- .../dbrepo/core}/api/amqp/CreateUserDto.java | 2 +- .../core}/api/amqp/CreateVirtualHostDto.java | 2 +- .../dbrepo/core}/api/amqp/ExchangeDto.java | 2 +- .../api/amqp/GrantExchangePermissionsDto.java | 2 +- .../amqp/GrantVirtualHostPermissionsDto.java | 2 +- .../dbrepo/core}/api/amqp/QueueBriefDto.java | 2 +- .../ifs/dbrepo/core}/api/amqp/QueueDto.java | 2 +- .../core}/api/amqp/TopicPermissionDto.java | 2 +- .../dbrepo/core}/api/amqp/UserDetailsDto.java | 2 +- .../api/amqp/VirtualHostPermissionDto.java | 2 +- .../dbrepo/core}/api/auth/CreateUserDto.java | 2 +- .../dbrepo/core}/api/auth/RealmAccessDto.java | 2 +- .../api/container/ContainerActionTypeDto.java | 4 +- .../api/container/ContainerBriefDto.java | 6 +- .../core}/api/container/ContainerDto.java | 6 +- .../api/container/CreateContainerDto.java | 2 +- .../api/container/image/DataTypeDto.java | 2 +- .../api/container/image/ImageBriefDto.java | 2 +- .../api/container/image/ImageChangeDto.java | 2 +- .../api/container/image/ImageCreateDto.java | 2 +- .../core}/api/container/image/ImageDto.java | 2 +- .../api/container/image/OperatorDto.java | 2 +- .../dbrepo/core/api/crossref/CrossRefDto.java | 8 +- .../crossref/form/CrossRefLiteralFormDto.java | 4 +- .../api/crossref/label/CrossRefLabelDto.java | 8 +- .../crossref/label/CrossRefPrefLabelDto.java | 6 +- .../core}/api/database/AccessTypeDto.java | 4 +- .../core}/api/database/CreateAccessDto.java | 2 +- .../core}/api/database/CreateDatabaseDto.java | 2 +- .../core}/api/database/CreateViewDto.java | 4 +- .../core}/api/database/DatabaseAccessDto.java | 4 +- .../core}/api/database/DatabaseBriefDto.java | 6 +- .../core}/api/database/DatabaseDto.java | 30 +- .../database/DatabaseModifyDashboardDto.java | 20 + .../api/database/DatabaseModifyImageDto.java | 2 +- .../database/DatabaseModifyVisibilityDto.java | 7 +- .../api/database/DatabaseTransferDto.java | 2 +- .../core}/api/database/LanguageTypeDto.java | 4 +- .../dbrepo/core}/api/database/LicenseDto.java | 2 +- .../core}/api/database/LoadFileDto.java | 2 +- .../core}/api/database/ViewBriefDto.java | 2 +- .../core}/api/database/ViewColumnDto.java | 13 +- .../dbrepo/core}/api/database/ViewDto.java | 14 +- .../core}/api/database/ViewUpdateDto.java | 2 +- .../database/internal/CreateDatabaseDto.java | 12 +- .../api/database/query/DatasourceType.java | 25 + .../core}/api/database/query/FilterDto.java | 2 +- .../api/database/query/FilterTypeDto.java | 4 +- .../core}/api/database/query/ImportDto.java | 2 +- .../core}/api/database/query/OrderDto.java | 2 +- .../api/database/query/OrderTypeDto.java | 4 +- .../api/database/query/QueryBriefDto.java | 6 +- .../core}/api/database/query/QueryDto.java | 7 +- .../api/database/query/QueryPersistDto.java | 2 +- .../api/database/query/QueryTypeDto.java | 4 +- .../api/database/query/SaveStatementDto.java | 2 +- .../core}/api/database/query/SubsetDto.java | 10 +- .../api/database/table/CreateTableDto.java | 6 +- .../database/table/HistoryEventTypeDto.java | 4 +- .../core/api/database/table}/SortType.java | 4 +- .../core/api/database/table}/SortTypeDto.java | 4 +- .../api/database/table/TableBriefDto.java | 2 +- .../database/table/TableCreateRawQuery.java | 2 +- .../core}/api/database/table/TableDto.java | 24 +- .../api/database/table/TableHistoryDto.java | 2 +- .../database/table/TableInsertRawQuery.java | 2 +- .../api/database/table/TableStatisticDto.java | 17 +- .../api/database/table/TableUpdateDto.java | 2 +- .../api/database/table/TupleDeleteDto.java | 2 +- .../core}/api/database/table/TupleDto.java | 2 +- .../api/database/table/TupleUpdateDto.java | 2 +- .../table/columns/ColumnBriefDto.java | 2 +- .../api/database/table/columns/ColumnDto.java | 11 +- .../table/columns/ColumnStatisticDto.java | 6 +- .../database/table/columns/ColumnTypeDto.java | 4 +- .../table/columns/CreateTableColumnDto.java | 2 +- .../api/database/table/columns/EnumDto.java | 2 +- .../api/database/table/columns/SetDto.java | 2 +- .../api/database/table/columns/SiUnitDto.java | 4 +- .../concepts/ColumnSemanticsUpdateDto.java | 2 +- .../columns/concepts/ConceptBriefDto.java | 2 +- .../table/columns/concepts/ConceptDto.java | 4 +- .../columns/concepts/ConceptSaveDto.java | 2 +- .../table/columns/concepts/UnitBriefDto.java | 2 +- .../table/columns/concepts/UnitDto.java | 4 +- .../table/columns/concepts/UnitSaveDto.java | 2 +- .../table/constraints/ConstraintsDto.java | 8 +- .../CreateTableConstraintsDto.java | 4 +- .../foreign/CreateForeignKeyDto.java | 2 +- .../foreign/ForeignKeyBriefDto.java | 2 +- .../constraints/foreign/ForeignKeyDto.java | 6 +- .../foreign/ForeignKeyReferenceDto.java | 4 +- .../constraints/foreign/ReferenceTypeDto.java | 2 +- .../constraints/primary/PrimaryKeyDto.java | 6 +- .../table/constraints/unique/UniqueDto.java | 6 +- .../table/internal/TableCreateDto.java | 6 +- .../core}/api/datacite/DataCiteBody.java | 2 +- .../core}/api/datacite/DataCiteData.java | 2 +- .../core}/api/datacite/DataCiteError.java | 2 +- .../api/datacite/doi/DataCiteCreateDoi.java | 2 +- .../core}/api/datacite/doi/DataCiteDoi.java | 2 +- .../api/datacite/doi/DataCiteDoiCreator.java | 2 +- .../doi/DataCiteDoiCreatorAffiliation.java | 2 +- .../doi/DataCiteDoiCreatorNameIdentifier.java | 2 +- .../api/datacite/doi/DataCiteDoiEvent.java | 2 +- .../doi/DataCiteDoiFundingReference.java | 2 +- ...DataCiteDoiFundingReferenceIdentifier.java | 2 +- .../doi/DataCiteDoiRelatedIdentifier.java | 2 +- .../api/datacite/doi/DataCiteDoiRights.java | 2 +- .../api/datacite/doi/DataCiteDoiTitle.java | 2 +- .../api/datacite/doi/DataCiteDoiTypes.java | 2 +- .../api/datacite/doi/DataCiteNameType.java | 4 +- .../dbrepo/core}/api/error/ApiErrorDto.java | 2 +- .../core}/api/file/UploadResponseDto.java | 2 +- .../core/api/grafana/AccessTypeDto.java | 24 + .../core/api/grafana/CreateDashboardDto.java | 39 + .../grafana/CreateDashboardResponseDto.java | 25 + .../core/api/grafana/DatasourceDto.java | 80 + .../core/api/grafana/DatasourceTypeDto.java | 24 + .../core/api/grafana/PermissionTypeDto.java | 33 + .../api/grafana/UpdateDashboardAccessDto.java | 21 + .../AffiliationIdentifierSchemeTypeDto.java | 2 +- .../api/identifier/BibliographyTypeDto.java | 4 +- .../api/identifier/CreateIdentifierDto.java | 6 +- .../core}/api/identifier/CreatorBriefDto.java | 2 +- .../core}/api/identifier/CreatorDto.java | 3 +- .../api/identifier/DescriptionTypeDto.java | 4 +- .../api/identifier/IdentifierBriefDto.java | 2 +- .../identifier/IdentifierDescriptionDto.java | 5 +- .../core}/api/identifier/IdentifierDto.java | 8 +- .../api/identifier/IdentifierFunderDto.java | 3 +- .../identifier/IdentifierFunderTypeDto.java | 4 +- .../api/identifier/IdentifierSaveDto.java | 6 +- .../identifier/IdentifierStatusTypeDto.java | 4 +- .../api/identifier/IdentifierTitleDto.java | 5 +- .../api/identifier/IdentifierTypeDto.java | 4 +- .../dbrepo/core}/api/identifier/LinksDto.java | 6 +- .../NameIdentifierSchemeTypeDto.java | 2 +- .../core}/api/identifier/NameTypeDto.java | 4 +- .../api/identifier/RelatedIdentifierDto.java | 8 +- .../core}/api/identifier/RelatedTypeDto.java | 4 +- .../core}/api/identifier/RelationTypeDto.java | 4 +- .../identifier/SaveIdentifierCreatorDto.java | 2 +- .../SaveIdentifierDescriptionDto.java | 4 +- .../identifier/SaveIdentifierFunderDto.java | 2 +- .../identifier/SaveIdentifierTitleDto.java | 4 +- .../identifier/SaveRelatedIdentifierDto.java | 2 +- .../core}/api/identifier/TitleTypeDto.java | 4 +- .../core}/api/identifier/ld/LdCreatorDto.java | 2 +- .../core}/api/identifier/ld/LdDatasetDto.java | 2 +- .../core}/api/keycloak/CredentialDto.java | 2 +- .../core}/api/keycloak/CredentialTypeDto.java | 4 +- .../core}/api/keycloak/ModifyUserDto.java | 2 +- .../api/keycloak/RoleRepresentationDto.java | 2 +- .../dbrepo/core}/api/keycloak/TokenDto.java | 4 +- .../api/keycloak/UpdateCredentialsDto.java | 2 +- .../core}/api/keycloak/UserAttributesDto.java | 4 +- .../api/keycloak/UserCreateAttributesDto.java | 2 +- .../core}/api/keycloak/UserCreateDto.java | 2 +- .../api/keycloak/UserIdAttributesDto.java | 2 +- .../ifs/dbrepo/core}/api/ldap/UserDto.java | 2 +- .../maintenance/BannerMessageBriefDto.java | 2 +- .../maintenance/BannerMessageCreateDto.java | 2 +- .../api/maintenance/BannerMessageDto.java | 2 +- .../api/maintenance/BannerMessageTypeDto.java | 4 +- .../maintenance/BannerMessageUpdateDto.java | 2 +- .../ifs/dbrepo/core}/api/orcid/OrcidDto.java | 6 +- .../activities/OrcidActivitiesSummaryDto.java | 4 +- .../employments/OrcidEmploymentsDto.java | 4 +- .../affiliation/OrcidAffiliationGroupDto.java | 4 +- .../group/OrcidEmploymentSummaryDto.java | 4 +- .../group/summary/OrcidSummaryDto.java | 4 +- .../organization/OrcidOrganizationDto.java | 4 +- .../disambiguated/OrcidDisambiguatedDto.java | 2 +- .../OrcidDisambiguatedSourceTypeDto.java | 6 + .../api/orcid/person/OrcidPersonDto.java | 4 +- .../api/orcid/person/name/OrcidNameDto.java | 2 +- .../api/orcid/person/name/OrcidValueDto.java | 2 +- .../ifs/dbrepo/core}/api/ror/RorDto.java | 2 +- .../dbrepo/core}/api/semantics/EntityDto.java | 2 +- .../core}/api/semantics/OntologyBriefDto.java | 2 +- .../api/semantics/OntologyCreateDto.java | 2 +- .../core}/api/semantics/OntologyDto.java | 5 +- .../api/semantics/OntologyModifyDto.java | 2 +- .../api/semantics/TableColumnEntityDto.java | 2 +- .../user/ExchangeUpdatePermissionsDto.java | 2 +- .../core}/api/user/GrantedAuthorityDto.java | 2 +- .../dbrepo/core}/api/user/RoleTypeDto.java | 4 +- .../core}/api/user/UserAttributesDto.java | 2 +- .../dbrepo/core}/api/user/UserBriefDto.java | 2 +- .../dbrepo/core}/api/user/UserDetailsDto.java | 2 +- .../ifs/dbrepo/core}/api/user/UserDto.java | 4 +- .../dbrepo/core}/api/user/UserEmailDto.java | 2 +- .../dbrepo/core}/api/user/UserForgotDto.java | 2 +- .../core}/api/user/UserModifyPasswordDto.java | 2 +- .../core}/api/user/UserPasswordDto.java | 2 +- .../dbrepo/core}/api/user/UserResetDto.java | 2 +- .../dbrepo/core}/api/user/UserRolesDto.java | 2 +- .../core}/api/user/UserThemeSetDto.java | 2 +- .../dbrepo/core}/api/user/UserUpdateDto.java | 2 +- .../api/user/UserUpdatePermissionsDto.java | 2 +- .../user/external/ExternalMetadataDto.java | 4 +- .../api/user/external/ExternalResultType.java | 4 +- .../affiliation/ExternalAffiliationDto.java | 2 +- .../user/internal/UpdateUserPasswordDto.java | 2 +- .../core/entity}/container/Container.java | 12 +- .../container/image/ContainerImage.java | 4 +- .../entity}/container/image/DataType.java | 2 +- .../entity}/container/image/Operator.java | 2 +- .../core/entity}/database/AccessType.java | 4 +- .../core/entity}/database/Database.java | 33 +- .../core/entity}/database/DatabaseAccess.java | 7 +- .../entity}/database/DatabaseAccessKey.java | 2 +- .../core/entity}/database/LanguageType.java | 4 +- .../dbrepo/core/entity}/database/License.java | 2 +- .../dbrepo/core/entity}/database/View.java | 6 +- .../core/entity}/database/ViewColumn.java | 6 +- .../core/entity}/database/table/Table.java | 14 +- .../database/table/columns/ColumnEnum.java | 4 +- .../database/table/columns/ColumnSet.java | 4 +- .../database/table/columns/TableColumn.java | 6 +- .../table/columns/TableColumnConcept.java | 4 +- .../table/columns/TableColumnType.java | 4 +- .../table/columns/TableColumnUnit.java | 4 +- .../table/constraints/Constraints.java | 8 +- .../constraints/foreignKey/ForeignKey.java | 4 +- .../foreignKey/ForeignKeyReference.java | 6 +- .../constraints/foreignKey/ReferenceType.java | 2 +- .../constraints/primaryKey/PrimaryKey.java | 6 +- .../table/constraints/unique/Unique.java | 6 +- .../AffiliationIdentifierSchemeType.java | 2 +- .../core/entity}/identifier/Creator.java | 4 +- .../entity}/identifier/DescriptionType.java | 4 +- .../core/entity}/identifier/Identifier.java | 12 +- .../identifier/IdentifierDescription.java | 6 +- .../entity}/identifier/IdentifierFunder.java | 4 +- .../identifier/IdentifierFunderType.java | 2 +- .../identifier/IdentifierStatusType.java | 4 +- .../entity}/identifier/IdentifierTitle.java | 6 +- .../entity}/identifier/IdentifierType.java | 4 +- .../identifier/NameIdentifierSchemeType.java | 2 +- .../core/entity/identifier/NameType.java | 9 + .../entity}/identifier/RelatedIdentifier.java | 2 +- .../core/entity}/identifier/RelatedType.java | 4 +- .../core/entity}/identifier/RelationType.java | 4 +- .../core/entity}/identifier/TitleType.java | 4 +- .../entity}/maintenance/BannerMessage.java | 4 +- .../maintenance/BannerMessageType.java | 4 +- .../core/entity}/semantics/Ontology.java | 4 +- .../ifs/dbrepo/core/entity}/user/User.java | 4 +- .../exception/AccessNotFoundException.java | 2 +- .../exception/AccountNotSetupException.java | 2 +- .../exception/AnalyseServiceException.java | 2 +- .../AuthServiceConnectionException.java | 2 +- .../core}/exception/AuthServiceException.java | 2 +- .../BrokerServiceConnectionException.java | 2 +- .../exception/BrokerServiceException.java | 2 +- .../exception/ConceptNotFoundException.java | 2 +- .../ContainerAlreadyExistsException.java | 2 +- .../exception/ContainerNotFoundException.java | 2 +- .../exception/ContainerQuotaException.java | 2 +- .../CredentialsInvalidException.java | 2 +- .../DashboardServiceConnectionException.java | 21 + .../exception/DashboardServiceException.java | 21 + .../DataServiceConnectionException.java | 2 +- .../core}/exception/DataServiceException.java | 2 +- .../exception/DatabaseMalformedException.java | 2 +- .../exception/DatabaseNotFoundException.java | 2 +- .../DatabaseUnavailableException.java | 2 +- .../core}/exception/DoiNotFoundException.java | 2 +- .../core}/exception/EmailExistsException.java | 2 +- .../exception/ExchangeNotFoundException.java | 2 +- .../exception/ExternalServiceException.java | 2 +- .../exception/FilterBadRequestException.java | 2 +- .../FormatNotAvailableException.java | 4 +- .../IdentifierNotFoundException.java | 2 +- .../IdentifierNotSupportedException.java | 2 +- .../ImageAlreadyExistsException.java | 2 +- .../exception/ImageInvalidException.java | 2 +- .../exception/ImageNotFoundException.java | 2 +- .../exception/LicenseNotFoundException.java | 2 +- .../core}/exception/MalformedException.java | 2 +- .../exception/MessageNotFoundException.java | 2 +- .../MetadataServiceConnectionException.java | 2 +- .../exception/MetadataServiceException.java | 2 +- .../core}/exception/NotAllowedException.java | 2 +- .../exception/OntologyNotFoundException.java | 2 +- .../exception/OrcidNotFoundException.java | 2 +- .../core}/exception/PaginationException.java | 2 +- .../exception/QueryMalformedException.java | 2 +- .../exception/QueryNotFoundException.java | 2 +- .../exception/QueryNotSupportedException.java | 2 +- .../exception/QueryStoreCreateException.java | 2 +- .../exception/QueryStoreGCException.java | 2 +- .../exception/QueryStoreInsertException.java | 2 +- .../exception/QueryStorePersistException.java | 2 +- .../exception/QueueNotFoundException.java | 2 +- .../exception/RemoteUnavailableException.java | 2 +- .../core}/exception/RorNotFoundException.java | 2 +- .../SearchServiceConnectionException.java | 2 +- .../exception/SearchServiceException.java | 2 +- .../SemanticEntityNotFoundException.java | 2 +- .../dbrepo/core}/exception/SortException.java | 2 +- .../exception/StorageNotFoundException.java | 2 +- .../StorageUnavailableException.java | 2 +- .../core}/exception/TableExistsException.java | 2 +- .../exception/TableMalformedException.java | 2 +- .../exception/TableNotFoundException.java | 2 +- .../core}/exception/TableSchemaException.java | 2 +- .../exception/UnitNotFoundException.java | 2 +- .../exception/UriMalformedException.java | 2 +- .../core}/exception/UserExistsException.java | 2 +- .../exception/UserNotFoundException.java | 2 +- .../core}/exception/ViewExistsException.java | 2 +- .../exception/ViewMalformedException.java | 2 +- .../exception/ViewNotFoundException.java | 2 +- .../core}/exception/ViewSchemaException.java | 2 +- .../dbrepo/core}/mapper/MetadataMapper.java | 228 +- .../ifs/dbrepo/core}/test/BaseTest.java | 3869 +++++++++-------- .../ifs/dbrepo/core}/test/dto/LocaleDto.java | 2 +- .../ac/tuwien/ifs/dbrepo/core}/test/pom.xml | 4 +- .../dbrepo/core}/test/utils/ArrayUtils.java | 2 +- .../core}/test/utils/EndpointUtils.java | 4 +- lib/python/Makefile | 23 - lib/python/Pipfile | 5 + lib/python/Pipfile.lock | 1913 +++++--- lib/python/coverage.xml | 264 +- lib/python/dbrepo/RestClient.py | 41 +- lib/python/dbrepo/api/dto.py | 22 +- .../python/dbrepo/core}/__init__.py | 0 .../python/dbrepo/core/api}/__init__.py | 0 .../python/dbrepo/core}/api/dto.py | 8 +- lib/python/dbrepo/core/api/exceptions.py | 5 + lib/python/dbrepo/core/client/__init__.py | 0 lib/python/dbrepo/core/client/auth.py | 75 + lib/python/dbrepo/core/client/dashboard.py | 451 ++ .../python/dbrepo/core/client/search.py | 63 +- .../python/dbrepo/core/client/storage.py | 16 +- lib/python/dbrepo/core/omlib/__init__.py | 0 .../python/dbrepo/core}/omlib/constants.py | 6 +- .../python/dbrepo/core}/omlib/dimension.py | 2 +- .../dbrepo/core/omlib/exceptions/__init__.py | 0 .../omlib/exceptions/dimensionexception.py | 0 .../exceptions/unitconversionexception.py | 0 .../omlib/exceptions/unitidentityexception.py | 0 .../python/dbrepo/core}/omlib/measure.py | 10 +- .../python/dbrepo/core}/omlib/omconstants.py | 6 +- lib/python/dbrepo/core/omlib/rdf/__init__.py | 0 .../python/dbrepo/core}/omlib/rdf/om-2.0.rdf | 0 .../python/dbrepo/core}/omlib/scale.py | 12 +- .../python/dbrepo/core}/omlib/thing.py | 0 .../python/dbrepo/core}/omlib/unit.py | 10 +- lib/python/docs/index.rst | 2 +- lib/python/package.sh | 3 - lib/python/pyproject.toml | 8 +- lib/python/release.sh | 3 - lib/python/setup.py | 12 +- lib/python/test.sh | 3 - .../init => lib/python}/tests/conftest.py | 7 +- lib/python/tests/keycloak/rs256.key | 3 + lib/python/tests/keycloak/rsa256.pkey | 3 + lib/python/tests/opensearch/database.json | 1418 ++++++ .../test_integration_core_storage_client.py | 2 +- .../tests/test_unit_core_auth_client.py | 2 +- .../tests/test_unit_core_search_client.py | 3 +- lib/python/tests/test_unit_database.py | 4 + lib/python/tests/test_unit_query.py | 1 + lib/python/tests/test_unit_table.py | 5 +- lib/python/tests/test_unit_view.py | 1 + make/build.mk | 15 +- make/rel.mk | 10 +- mkdocs.yml | 12 +- sonar-project.properties | 2 +- versions.json | 5 + 950 files changed, 29651 insertions(+), 13788 deletions(-) create mode 100644 .docs/.openapi/api-dashboard.yaml delete mode 100644 .docs/api/dashboard-service.md create mode 100644 .docs/concepts/dashboards.md delete mode 100644 .docs/concepts/ui.md delete mode 100644 .docs/images/architecture-data-db.svg create mode 100644 .docs/images/data-versioning.png create mode 100644 .docs/images/screenshots/dashboard-managed.png create mode 100755 .gitlab/check-supported-images.sh delete mode 100644 dbrepo-analyse-service/clients/keycloak_client.py delete mode 100644 dbrepo-analyse-service/lib/dbrepo-1.7.2.tar.gz delete mode 100644 dbrepo-analyse-service/lib/dbrepo-1.7.3-py3-none-any.whl delete mode 100644 dbrepo-analyse-service/lib/dbrepo-1.7.3.tar.gz create mode 100644 dbrepo-analyse-service/lib/dbrepo-1.8.0-py3-none-any.whl create mode 100644 dbrepo-analyse-service/lib/dbrepo-1.8.0.tar.gz delete mode 100644 dbrepo-analyse-service/tests/s3_config.json create mode 100644 dbrepo-dashboard-service/.coveragerc create mode 100644 dbrepo-dashboard-service/.gitignore create mode 100644 dbrepo-dashboard-service/Pipfile create mode 100644 dbrepo-dashboard-service/Pipfile.lock create mode 100644 dbrepo-dashboard-service/README.md delete mode 100644 dbrepo-dashboard-service/access.py create mode 100644 dbrepo-dashboard-service/app.py delete mode 100644 dbrepo-dashboard-service/clients/grafana_client.py delete mode 100644 dbrepo-dashboard-service/clients/keycloak_client.py delete mode 100644 dbrepo-dashboard-service/dashboard.py create mode 100644 dbrepo-dashboard-service/ds-yml/create_dashboard.yml create mode 100644 dbrepo-dashboard-service/ds-yml/update_dashboard.yml create mode 100644 dbrepo-dashboard-service/init/.coveragerc create mode 100644 dbrepo-dashboard-service/init/Dockerfile create mode 100644 dbrepo-dashboard-service/init/Pipfile create mode 100644 dbrepo-dashboard-service/init/Pipfile.lock create mode 100644 dbrepo-dashboard-service/init/app.py create mode 100644 dbrepo-dashboard-service/init/lib/dbrepo-1.8.0-py3-none-any.whl create mode 100644 dbrepo-dashboard-service/init/lib/dbrepo-1.8.0.tar.gz rename {dbrepo-search-service => dbrepo-dashboard-service}/init/tests/rsa/rs256.key (100%) rename {dbrepo-search-service => dbrepo-dashboard-service}/init/tests/rsa/rsa256.pkey (100%) create mode 100644 dbrepo-dashboard-service/init/tests/test_app.py create mode 100644 dbrepo-dashboard-service/lib/dbrepo-1.8.0-py3-none-any.whl create mode 100644 dbrepo-dashboard-service/lib/dbrepo-1.8.0.tar.gz delete mode 100644 dbrepo-dashboard-service/panel.py create mode 100644 dbrepo-dashboard-service/test.sh create mode 100644 dbrepo-dashboard-service/tests/conftest.py create mode 100644 dbrepo-dashboard-service/tests/grafana/__init__.py create mode 100644 dbrepo-dashboard-service/tests/rsa/rs256.key create mode 100644 dbrepo-dashboard-service/tests/rsa/rsa256.pkey create mode 100644 dbrepo-dashboard-service/tests/test_integration_app.py create mode 100644 dbrepo-dashboard-ui/Dockerfile rename dbrepo-dashboard-service/dashboards/system.json => dbrepo-dashboard-ui/dashboards/System/dbrepo.json (96%) rename {dbrepo-dashboard-service/dashboards => dbrepo-dashboard-ui/dashboards/System}/rabbitmq.json (99%) rename {dbrepo-dashboard-service => dbrepo-dashboard-ui}/grafana.ini (89%) rename {dbrepo-dashboard-service => dbrepo-dashboard-ui}/ldap.toml (92%) create mode 100644 dbrepo-dashboard-ui/provisioning/dashboards/provider.yaml create mode 100644 dbrepo-dashboard-ui/provisioning/datasources/infinity.yaml create mode 100644 dbrepo-dashboard-ui/provisioning/datasources/prometheus.yaml rename dbrepo-data-service/rest-service/src/main/java/at/tuwien/{DbrepoDataServiceApplication.java => DataServiceApplication.java} (57%) create mode 100644 dbrepo-data-service/services/src/main/java/at/tuwien/timer/StaleObjectTimer.java create mode 100644 dbrepo-grafana-service/.dockerignore create mode 100644 dbrepo-grafana-service/.gitignore create mode 100644 dbrepo-grafana-service/.mvn/wrapper/MavenWrapperDownloader.java create mode 100644 dbrepo-grafana-service/.mvn/wrapper/maven-wrapper.jar create mode 100644 dbrepo-grafana-service/.mvn/wrapper/maven-wrapper.properties create mode 100644 dbrepo-grafana-service/Dockerfile create mode 100644 dbrepo-grafana-service/README.md create mode 100755 dbrepo-grafana-service/mvnw create mode 100644 dbrepo-grafana-service/mvnw.cmd create mode 100644 dbrepo-grafana-service/pom.xml create mode 100644 dbrepo-grafana-service/rest-service/pom.xml create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/DbrepoGrafanaServiceApplication.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/auth/AuthTokenFilter.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/auth/BasicAuthenticationProvider.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/config/CacheConfig.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/config/GatewayConfig.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/config/KeycloakConfig.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/config/WebSecurityConfig.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/DashboardConfigDto.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/HistogramConfigDto.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/PieChartConfigDto.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/TableConfigDto.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/TimeDto.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/TimeSeriesDto.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/endpoints/DashboardEndpoint.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/endpoints/DataEndpoint.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/ContainerNotFoundException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/DatabaseMalformedException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/DatabaseUnavailableException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/FormatNotAvailableException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/JsonProcessingException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/NotAllowedException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/PaginationException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryMalformedException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryNotFoundException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryStoreCreateException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryStoreGCException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryStoreInsertException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryStorePersistException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/RemoteUnavailableException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/RestTemplateExchangeException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/ServiceConnectionException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/ServiceException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/SidecarExportException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/SidecarImportException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/StorageNotFoundException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/StorageUnavailableException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/SyncDatabaseNotFoundException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/TableExistsException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/TableMalformedException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/TableNotFoundException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/UserNotFoundException.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/gateway/KeycloakGateway.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/gateway/impl/KeycloakGatewayImpl.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/handlers/DashboardApiExceptionHandler.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/interceptor/KeycloakInterceptor.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/AbstractPanel.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/CntAllPanel.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/Dashboard.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/HistogramPanel.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/MultiTimeSeriesPanel.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/PieChartPanel.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/RowPanel.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/StatsPanel.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/TablePanel.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/TimeSeriesPanel.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/DashboardService.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/DataService.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/DataSourceService.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/TableService.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/ViewGeneratorService.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/DashboardServiceImpl.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/DataServiceImpl.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/DataSourceServiceImpl.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/TableServiceImpl.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/ViewGeneratorServiceImpl.java create mode 100644 dbrepo-grafana-service/rest-service/src/main/resources/application-local.yml create mode 100644 dbrepo-grafana-service/rest-service/src/main/resources/application.yml rename dbrepo-search-service/init/omlib/__init__.py => dbrepo-grafana-service/rest-service/src/test/resources/application.properties (100%) create mode 100644 dbrepo-metadata-db/migration/16/update_id.sql delete mode 100644 dbrepo-metadata-service/api/pom.xml delete mode 100644 dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ExecuteStatementDto.java rename dbrepo-metadata-service/api/src/main/java/at/tuwien/api/{database/query/ExportDto.java => doi/AffiliationDto.java} (53%) create mode 100644 dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/AuthorDto.java create mode 100644 dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/DoiDto.java create mode 100644 dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/LicenseDto.java create mode 100644 dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/LinkDto.java create mode 100644 dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/ReferenceDto.java create mode 100644 dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/ResourceDto.java create mode 100644 dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/ResourceRepresentationDto.java create mode 100644 dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/TimeRepresentationDto.java delete mode 100644 dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedSourceTypeDto.java delete mode 100644 dbrepo-metadata-service/entities/pom.xml delete mode 100644 dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/NameType.java rename dbrepo-metadata-service/oai/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/oaipmh/OaiErrorType.java (91%) rename dbrepo-metadata-service/oai/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/oaipmh/OaiListIdentifiersParameters.java (97%) rename dbrepo-metadata-service/oai/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/oaipmh/OaiListRecordsParameters.java (97%) rename dbrepo-metadata-service/oai/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/oaipmh/OaiRecordParameters.java (93%) rename dbrepo-metadata-service/oai/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/oaipmh/RequestParameters.java (90%) rename dbrepo-metadata-service/repositories/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/mapper/SparqlMapper.java (97%) rename dbrepo-metadata-service/repositories/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/repository/BannerMessageRepository.java (72%) rename dbrepo-metadata-service/repositories/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/repository/ConceptRepository.java (71%) rename dbrepo-metadata-service/repositories/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/repository/ContainerRepository.java (81%) rename dbrepo-metadata-service/repositories/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/repository/DatabaseRepository.java (87%) rename dbrepo-metadata-service/repositories/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/repository/IdentifierRepository.java (91%) rename dbrepo-metadata-service/repositories/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/repository/ImageRepository.java (77%) rename dbrepo-metadata-service/repositories/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/repository/LicenseRepository.java (73%) rename dbrepo-metadata-service/repositories/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/repository/OntologyRepository.java (78%) rename dbrepo-metadata-service/repositories/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/repository/TableRepository.java (69%) rename dbrepo-metadata-service/repositories/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/repository/UnitRepository.java (71%) rename dbrepo-metadata-service/repositories/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/repository/UserRepository.java (80%) rename dbrepo-metadata-service/repositories/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/repository/ViewRepository.java (71%) rename dbrepo-metadata-service/repositories/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/utils/EnumToStringConverter.java (92%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien/DbrepoMetadataServiceApplication.java => ac/tuwien/ifs/dbrepo/MetadataServiceApplication.java} (64%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/MvcConfig.java (71%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/SwaggerConfig.java (98%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/converters/IdentifierStatusTypeDtoConverter.java (75%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/converters/IdentifierTypeDtoConverter.java (75%) create mode 100644 dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/AbstractEndpoint.java rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/AccessEndpoint.java (86%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/ConceptEndpoint.java (90%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/ContainerEndpoint.java (92%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/DatabaseEndpoint.java (86%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/IdentifierEndpoint.java (96%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/ImageEndpoint.java (89%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/LicenseEndpoint.java (91%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/MessageEndpoint.java (92%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/MetadataEndpoint.java (94%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/OntologyEndpoint.java (93%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/TableEndpoint.java (86%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/UnitEndpoint.java (90%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/UserEndpoint.java (91%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/ViewEndpoint.java (83%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/handlers/ApiExceptionHandler.java (96%) rename dbrepo-metadata-service/rest-service/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/validation/EndpointValidator.java (94%) delete mode 100644 dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AbstractEndpoint.java delete mode 100644 dbrepo-metadata-service/rest-service/src/main/resources/datatypes.json rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/ApplicationIntegrationTest.java (86%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/ObjectMapperConfig.java (95%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/RabbitConfig.java (91%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/converters/IdentifierStatusTypeDtoConverterUnitTest.java (75%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/converters/IdentifierTypeDtoConverterUnitTest.java (75%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/AbstractEndpointUnitTest.java (56%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/AccessEndpointUnitTest.java (86%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/ActuatorComponentTest.java (85%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/ConceptEndpointUnitTest.java (77%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/ContainerEndpointUnitTest.java (85%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/DatabaseEndpointUnitTest.java (88%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/IdentifierEndpointUnitTest.java (92%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/ImageEndpointUnitTest.java (76%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/LicenseEndpointUnitTest.java (82%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/MessageEndpointUnitTest.java (87%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/MetadataEndpointUnitTest.java (92%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/OntologyEndpointUnitTest.java (91%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/TableEndpointUnitTest.java (78%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/UnitEndpointUnitTest.java (77%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/UserEndpointUnitTest.java (88%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/endpoints/ViewEndpointUnitTest.java (77%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien/entities => ac/tuwien/ifs/dbrepo/entity}/EntitiesUnitTest.java (64%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/BrokerServiceGatewayUnitTest.java (94%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien/gateway/CrossrefGatewayUnitTest.java => ac/tuwien/ifs/dbrepo/gateway/CrossRefGatewayUnitTest.java} (70%) create mode 100644 dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/DashboardServiceGatewayUnitTest.java rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/DataServiceGatewayUnitTest.java (97%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/KeycloakGatewayIntegrationTest.java (87%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/OrcidGatewayUnitTest.java (82%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/RorGatewayUnitTest.java (77%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/SearchServiceGatewayUnitTest.java (93%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/handlers/ApiExceptionHandlerTest.java (95%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/mapper/MetadataMapperUnitTest.java (91%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/mvc/ActuatorEndpointMvcTest.java (90%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/mvc/AuthenticationPrivilegedIntegrationMvcTest.java (87%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/mvc/IdentifierEndpointMvcTest.java (86%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/mvc/MetadataEndpointMvcTest.java (93%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/mvc/OpenApiEndpointMvcTest.java (91%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/mvc/PrometheusEndpointMvcTest.java (94%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/AccessServiceUnitTest.java (94%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/AuthenticationServiceIntegrationTest.java (80%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/BrokerServiceIntegrationTest.java (88%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/ConceptServiceUnitTest.java (80%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/ContainerServiceUnitTest.java (84%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/DataCiteIdentifierServicePersistenceTest.java (89%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/DatabaseServicePersistenceTest.java (66%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/DatabaseServiceUnitTest.java (88%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/EntityServiceUnitTest.java (86%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/IdentifierServicePersistenceTest.java (92%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/ImageServicePersistenceTest.java (65%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/ImageServiceUnitTest.java (76%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/LicenseServiceUnitTest.java (79%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/MessageServiceUnitTest.java (85%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/MetadataServiceUnitTest.java (86%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/StorageServiceIntegrationTest.java (89%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/TableServicePersistenceTest.java (84%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/TableServiceUnitTest.java (89%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/UnitServiceUnitTest.java (80%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/UserServiceIntegrationTest.java (75%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/UserServicePersistenceTest.java (84%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/UserServiceUnitTest.java (82%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/ViewServicePersistenceTest.java (78%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/ViewServiceUnitTest.java (86%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/utils/AmqpUtils.java (98%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/utils/H2Utils.java (96%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/utils/KeycloakUtils.java (90%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/utils/XmlUtils.java (96%) rename dbrepo-metadata-service/rest-service/src/test/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/validator/EndpointValidatorUnitTest.java (94%) create mode 100644 dbrepo-metadata-service/rest-service/src/test/resources/doi/database.json create mode 100644 dbrepo-metadata-service/rest-service/src/test/resources/doi/dataset.json create mode 100644 dbrepo-metadata-service/rest-service/src/test/resources/doi/journal-article.json create mode 100644 dbrepo-metadata-service/rest-service/src/test/resources/doi/proceedings-article.json rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/auth/AuthTokenFilter.java (95%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/auth/BasicAuthenticationProvider.java (84%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/auth/InternalRequestInterceptor.java (87%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/CacheConfig.java (89%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/DataCiteConfig.java (97%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/EndpointConfig.java (86%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/GatewayConfig.java (69%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/JacksonConfig.java (84%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/JenaConfig.java (92%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/KeycloakConfig.java (96%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/MetadataConfig.java (93%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/MetricsConfig.java (90%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/RabbitConfig.java (93%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/S3Config.java (97%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/SecurityConfig.java (91%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/TemplateConfig.java (96%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/config/WebSecurityConfig.java (95%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/BrokerServiceGateway.java (85%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien/gateway/CrossrefGateway.java => ac/tuwien/ifs/dbrepo/gateway/CrossRefGateway.java} (53%) create mode 100644 dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/DashboardServiceGateway.java rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/DataServiceGateway.java (90%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/KeycloakGateway.java (65%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/OrcidGateway.java (69%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/RorGateway.java (69%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/SearchServiceGateway.java (60%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/impl/BrokerServiceGatewayImpl.java (94%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien/gateway/impl/CrossrefGatewayImpl.java => ac/tuwien/ifs/dbrepo/gateway/impl/CrossRefGatewayImpl.java} (64%) create mode 100644 dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/DashboardServiceGatewayImpl.java rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/impl/DataServiceGatewayImpl.java (96%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/impl/KeycloakGatewayImpl.java (90%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/impl/OrcidGatewayImpl.java (82%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/impl/RorGatewayImpl.java (83%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/gateway/impl/SearchServiceGatewayImpl.java (87%) create mode 100644 dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/AccessService.java create mode 100644 dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/AuthenticationService.java rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/BannerMessageService.java (81%) create mode 100644 dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/BrokerService.java rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/ConceptService.java (75%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/ContainerService.java (75%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/CredentialService.java (80%) create mode 100644 dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/DashboardService.java create mode 100644 dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/DatabaseService.java rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/EntityService.java (54%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/IdentifierService.java (54%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/ImageService.java (73%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/LicenseService.java (74%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/MetadataService.java (62%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/OntologyService.java (72%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/StorageService.java (73%) create mode 100644 dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/TableService.java rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/UnitService.java (63%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/UserService.java (68%) create mode 100644 dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/ViewService.java rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/AccessServiceImpl.java (87%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/AuthenticationServiceImpl.java (62%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/BannerMessageServiceImpl.java (82%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/BrokerServiceRabbitMqImpl.java (88%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/ConceptServiceImpl.java (80%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/ContainerServiceImpl.java (84%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/CredentialServiceImpl.java (85%) create mode 100644 dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DashboardServiceImpl.java rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/DataCiteIdentifierServiceImpl.java (83%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/DatabaseServiceImpl.java (85%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/EntityServiceImpl.java (91%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/IdentifierServiceImpl.java (90%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/ImageServiceImpl.java (85%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/LicenseServiceImpl.java (76%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/MetadataServiceImpl.java (84%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/OntologyServiceImpl.java (84%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/StorageServiceS3Impl.java (82%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/TableServiceImpl.java (89%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/UnitServiceImpl.java (80%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/UserServiceImpl.java (79%) rename dbrepo-metadata-service/services/src/main/java/at/{tuwien => ac/tuwien/ifs/dbrepo}/service/impl/ViewServiceImpl.java (67%) delete mode 100644 dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AccessService.java delete mode 100644 dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AuthenticationService.java delete mode 100644 dbrepo-metadata-service/services/src/main/java/at/tuwien/service/BrokerService.java delete mode 100644 dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java delete mode 100644 dbrepo-metadata-service/services/src/main/java/at/tuwien/service/TableService.java delete mode 100644 dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ViewService.java delete mode 100644 dbrepo-metadata-service/test/src/main/java/at/tuwien/test/AbstractUnitTest.java delete mode 100644 dbrepo-search-db/Dockerfile delete mode 100644 dbrepo-search-db/README.md delete mode 100644 dbrepo-search-db/config.yml delete mode 100644 dbrepo-search-db/generate-pki.sh delete mode 100644 dbrepo-search-db/limits.conf delete mode 100644 dbrepo-search-db/opensearch.yml delete mode 100644 dbrepo-search-db/opensearch_dashboards.yml delete mode 100644 dbrepo-search-db/pem/admin-key.pem delete mode 100644 dbrepo-search-db/pem/admin.csr delete mode 100644 dbrepo-search-db/pem/admin.pem delete mode 100644 dbrepo-search-db/pem/node1-key.pem delete mode 100644 dbrepo-search-db/pem/node1.csr delete mode 100644 dbrepo-search-db/pem/node1.pem delete mode 100644 dbrepo-search-db/pem/root-ca-key.pem delete mode 100644 dbrepo-search-db/pem/root-ca.pem delete mode 100644 dbrepo-search-db/pem/root-ca.srl delete mode 100644 dbrepo-search-service/.testpickle delete mode 100644 dbrepo-search-service/examples/database/fields_response_payload.json delete mode 100644 dbrepo-search-service/examples/database/search_request_payload.json delete mode 100644 dbrepo-search-service/examples/unit/fields_response_payload.json delete mode 100644 dbrepo-search-service/examples/unit/search_request_payload.json create mode 100644 dbrepo-search-service/friendly_names_overrides.json delete mode 100644 dbrepo-search-service/init/clients/keycloak_client.py delete mode 100644 dbrepo-search-service/init/lib/dbrepo-1.7.2.tar.gz delete mode 100644 dbrepo-search-service/init/lib/dbrepo-1.7.3-py3-none-any.whl delete mode 100644 dbrepo-search-service/init/lib/dbrepo-1.7.3.tar.gz create mode 100644 dbrepo-search-service/init/lib/dbrepo-1.8.0-py3-none-any.whl create mode 100644 dbrepo-search-service/init/lib/dbrepo-1.8.0.tar.gz delete mode 100644 dbrepo-search-service/init/tests/test_app.py create mode 100644 dbrepo-search-service/init/tests/test_unit_app.py delete mode 100644 dbrepo-search-service/lib/dbrepo-1.7.2.tar.gz delete mode 100644 dbrepo-search-service/lib/dbrepo-1.7.3-py3-none-any.whl delete mode 100644 dbrepo-search-service/lib/dbrepo-1.7.3.tar.gz create mode 100644 dbrepo-search-service/lib/dbrepo-1.8.0-py3-none-any.whl create mode 100644 dbrepo-search-service/lib/dbrepo-1.8.0.tar.gz rename dbrepo-search-service/os-yml/{update_database.yml => save_database.yml} (75%) delete mode 100644 dbrepo-search-service/tests/.testpickle delete mode 100644 dbrepo-search-service/tests/test_jwt.py create mode 100644 grafana/grafana.ini delete mode 100644 helm/dbrepo/templates/auth-secret.yaml delete mode 100644 helm/dbrepo/templates/dashboard-configmap.yaml create mode 100644 helm/dbrepo/templates/dashboard-deployment.yaml create mode 100644 helm/dbrepo/templates/dashboard-ui-prov-datasources-secret.yaml create mode 100644 helm/dbrepo/templates/dashboard-ui-secret.yaml delete mode 100644 helm/seaweedfs/charts/mariadb-20.4.1.tgz create mode 100644 helm/seaweedfs/charts/mariadb-20.4.2.tgz delete mode 100644 helm/seaweedfs/charts/postgresql-16.4.16.tgz create mode 100644 helm/seaweedfs/charts/postgresql-16.6.0.tgz create mode 100644 lib/java/dbrepo-core/.gitignore create mode 100644 lib/java/dbrepo-core/Dockerfile create mode 100644 lib/java/dbrepo-core/pom.xml create mode 100644 lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/Serialize.java rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/CacheableDto.java (91%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api}/ExportResourceDto.java (86%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/amqp/ChannelDetailsDto.java (93%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/amqp/ConsumerDto.java (94%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/amqp/CreateExchangeDto.java (92%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/amqp/CreateUserDto.java (89%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/amqp/CreateVirtualHostDto.java (90%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/amqp/ExchangeDto.java (93%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/amqp/GrantExchangePermissionsDto.java (91%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/amqp/GrantVirtualHostPermissionsDto.java (91%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/amqp/QueueBriefDto.java (90%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/amqp/QueueDto.java (93%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/amqp/TopicPermissionDto.java (93%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/amqp/UserDetailsDto.java (94%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/amqp/VirtualHostPermissionDto.java (93%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/auth/CreateUserDto.java (95%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/auth/RealmAccessDto.java (90%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/container/ContainerActionTypeDto.java (81%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/container/ContainerBriefDto.java (86%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/container/ContainerDto.java (89%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/container/CreateContainerDto.java (96%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/container/image/DataTypeDto.java (97%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/container/image/ImageBriefDto.java (93%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/container/image/ImageChangeDto.java (94%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/container/image/ImageCreateDto.java (96%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/container/image/ImageDto.java (94%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/container/image/OperatorDto.java (93%) rename dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/CrossrefDto.java => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/crossref/CrossRefDto.java (60%) rename dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/form/CrossrefLiteralFormDto.java => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/crossref/form/CrossRefLiteralFormDto.java (79%) rename dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/label/CrossrefLabelDto.java => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/crossref/label/CrossRefLabelDto.java (60%) rename dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/label/CrossrefPrefLabelDto.java => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/crossref/label/CrossRefPrefLabelDto.java (66%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/AccessTypeDto.java (85%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/CreateAccessDto.java (88%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/CreateDatabaseDto.java (94%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/CreateViewDto.java (87%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/DatabaseAccessDto.java (84%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/DatabaseBriefDto.java (88%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/DatabaseDto.java (70%) create mode 100644 lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseModifyDashboardDto.java rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/DatabaseModifyImageDto.java (82%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/DatabaseModifyVisibilityDto.java (76%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/DatabaseTransferDto.java (85%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/LanguageTypeDto.java (98%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/LicenseDto.java (94%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/LoadFileDto.java (88%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/ViewBriefDto.java (96%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/ViewColumnDto.java (76%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/ViewDto.java (80%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/ViewUpdateDto.java (91%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/internal/CreateDatabaseDto.java (79%) create mode 100644 lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/DatasourceType.java rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/query/FilterDto.java (93%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/query/FilterTypeDto.java (82%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/query/ImportDto.java (93%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/query/OrderDto.java (90%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/query/OrderTypeDto.java (80%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/query/QueryBriefDto.java (90%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/query/QueryDto.java (91%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/query/QueryPersistDto.java (86%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/query/QueryTypeDto.java (81%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/query/SaveStatementDto.java (87%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/query/SubsetDto.java (75%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/CreateTableDto.java (81%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/HistoryEventTypeDto.java (83%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table}/SortType.java (76%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table}/SortTypeDto.java (73%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/TableBriefDto.java (96%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/TableCreateRawQuery.java (88%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/TableDto.java (80%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/TableHistoryDto.java (92%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/TableInsertRawQuery.java (85%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/TableStatisticDto.java (67%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/TableUpdateDto.java (92%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/TupleDeleteDto.java (87%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/TupleDto.java (87%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/TupleUpdateDto.java (89%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/columns/ColumnBriefDto.java (95%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/columns/ColumnDto.java (87%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/columns/ColumnStatisticDto.java (80%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/columns/ColumnTypeDto.java (95%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/columns/CreateTableColumnDto.java (95%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/columns/EnumDto.java (88%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/columns/SetDto.java (88%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/columns/SiUnitDto.java (86%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/columns/concepts/ColumnSemanticsUpdateDto.java (83%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/columns/concepts/ConceptBriefDto.java (91%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/columns/concepts/ConceptDto.java (80%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/columns/concepts/ConceptSaveDto.java (83%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/columns/concepts/UnitBriefDto.java (90%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/columns/concepts/UnitDto.java (80%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/columns/concepts/UnitSaveDto.java (83%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/constraints/ConstraintsDto.java (64%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/constraints/CreateTableConstraintsDto.java (79%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/constraints/foreign/CreateForeignKeyDto.java (92%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/constraints/foreign/ForeignKeyBriefDto.java (81%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/constraints/foreign/ForeignKeyDto.java (81%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/constraints/foreign/ForeignKeyReferenceDto.java (81%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/constraints/foreign/ReferenceTypeDto.java (93%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/constraints/primary/PrimaryKeyDto.java (68%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/constraints/unique/UniqueDto.java (72%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/database/table/internal/TableCreateDto.java (80%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/datacite/DataCiteBody.java (84%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/datacite/DataCiteData.java (89%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/datacite/DataCiteError.java (84%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/datacite/doi/DataCiteCreateDoi.java (94%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/datacite/doi/DataCiteDoi.java (86%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/datacite/doi/DataCiteDoiCreator.java (92%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/datacite/doi/DataCiteDoiCreatorAffiliation.java (87%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/datacite/doi/DataCiteDoiCreatorNameIdentifier.java (86%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/datacite/doi/DataCiteDoiEvent.java (90%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/datacite/doi/DataCiteDoiFundingReference.java (88%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/datacite/doi/DataCiteDoiFundingReferenceIdentifier.java (85%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/datacite/doi/DataCiteDoiRelatedIdentifier.java (88%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/datacite/doi/DataCiteDoiRights.java (85%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/datacite/doi/DataCiteDoiTitle.java (94%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/datacite/doi/DataCiteDoiTypes.java (91%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/datacite/doi/DataCiteNameType.java (82%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/error/ApiErrorDto.java (92%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/file/UploadResponseDto.java (86%) create mode 100644 lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/AccessTypeDto.java create mode 100644 lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/CreateDashboardDto.java create mode 100644 lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/CreateDashboardResponseDto.java create mode 100644 lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/DatasourceDto.java create mode 100644 lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/DatasourceTypeDto.java create mode 100644 lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/PermissionTypeDto.java create mode 100644 lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/UpdateDashboardAccessDto.java rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/AffiliationIdentifierSchemeTypeDto.java (67%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/BibliographyTypeDto.java (83%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/CreateIdentifierDto.java (91%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/CreatorBriefDto.java (96%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/CreatorDto.java (95%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/DescriptionTypeDto.java (88%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/IdentifierBriefDto.java (96%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/IdentifierDescriptionDto.java (85%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/IdentifierDto.java (92%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/IdentifierFunderDto.java (93%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/IdentifierFunderTypeDto.java (86%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/IdentifierSaveDto.java (91%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/IdentifierStatusTypeDto.java (82%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/IdentifierTitleDto.java (84%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/IdentifierTypeDto.java (84%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/LinksDto.java (77%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/NameIdentifierSchemeTypeDto.java (68%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/NameTypeDto.java (82%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/RelatedIdentifierDto.java (69%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/RelatedTypeDto.java (92%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/RelationTypeDto.java (96%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/SaveIdentifierCreatorDto.java (96%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/SaveIdentifierDescriptionDto.java (87%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/SaveIdentifierFunderDto.java (95%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/SaveIdentifierTitleDto.java (86%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/SaveRelatedIdentifierDto.java (92%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/TitleTypeDto.java (86%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/ld/LdCreatorDto.java (89%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/identifier/ld/LdDatasetDto.java (94%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/keycloak/CredentialDto.java (89%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/keycloak/CredentialTypeDto.java (79%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/keycloak/ModifyUserDto.java (90%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/keycloak/RoleRepresentationDto.java (91%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/keycloak/TokenDto.java (92%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/keycloak/UpdateCredentialsDto.java (86%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/keycloak/UserAttributesDto.java (92%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/keycloak/UserCreateAttributesDto.java (85%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/keycloak/UserCreateDto.java (93%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/keycloak/UserIdAttributesDto.java (90%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/ldap/UserDto.java (89%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/maintenance/BannerMessageBriefDto.java (92%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/maintenance/BannerMessageCreateDto.java (95%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/maintenance/BannerMessageDto.java (96%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/maintenance/BannerMessageTypeDto.java (83%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/maintenance/BannerMessageUpdateDto.java (95%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/orcid/OrcidDto.java (66%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/orcid/activities/OrcidActivitiesSummaryDto.java (65%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/orcid/activities/employments/OrcidEmploymentsDto.java (66%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/orcid/activities/employments/affiliation/OrcidAffiliationGroupDto.java (57%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/orcid/activities/employments/affiliation/group/OrcidEmploymentSummaryDto.java (63%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/orcid/activities/employments/affiliation/group/summary/OrcidSummaryDto.java (69%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/orcid/activities/employments/affiliation/group/summary/organization/OrcidOrganizationDto.java (60%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedDto.java (78%) create mode 100644 lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedSourceTypeDto.java rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/orcid/person/OrcidPersonDto.java (64%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/orcid/person/name/OrcidNameDto.java (87%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/orcid/person/name/OrcidValueDto.java (79%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/ror/RorDto.java (85%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/semantics/EntityDto.java (91%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/semantics/OntologyBriefDto.java (94%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/semantics/OntologyCreateDto.java (92%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/semantics/OntologyDto.java (88%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/semantics/OntologyModifyDto.java (93%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/semantics/TableColumnEntityDto.java (95%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/ExchangeUpdatePermissionsDto.java (91%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/GrantedAuthorityDto.java (87%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/RoleTypeDto.java (85%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/UserAttributesDto.java (94%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/UserBriefDto.java (95%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/UserDetailsDto.java (95%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/UserDto.java (92%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/UserEmailDto.java (90%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/UserForgotDto.java (90%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/UserModifyPasswordDto.java (90%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/UserPasswordDto.java (86%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/UserResetDto.java (87%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/UserRolesDto.java (87%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/UserThemeSetDto.java (88%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/UserUpdateDto.java (93%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/UserUpdatePermissionsDto.java (89%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/external/ExternalMetadataDto.java (78%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/external/ExternalResultType.java (82%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/external/affiliation/ExternalAffiliationDto.java (91%) rename {dbrepo-metadata-service/api/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/api/user/internal/UpdateUserPasswordDto.java (85%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/container/Container.java (88%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/container/image/ContainerImage.java (95%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/container/image/DataType.java (97%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/container/image/Operator.java (94%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/AccessType.java (63%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/Database.java (86%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/DatabaseAccess.java (89%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/DatabaseAccessKey.java (80%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/LanguageType.java (97%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/License.java (91%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/View.java (96%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/ViewColumn.java (92%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/table/Table.java (91%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/table/columns/ColumnEnum.java (89%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/table/columns/ColumnSet.java (89%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/table/columns/TableColumn.java (96%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/table/columns/TableColumnConcept.java (95%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/table/columns/TableColumnType.java (85%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/table/columns/TableColumnUnit.java (95%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/table/constraints/Constraints.java (71%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/table/constraints/foreignKey/ForeignKey.java (92%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/table/constraints/foreignKey/ForeignKeyReference.java (89%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/table/constraints/foreignKey/ReferenceType.java (67%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/table/constraints/primaryKey/PrimaryKey.java (85%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/database/table/constraints/unique/Unique.java (87%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/identifier/AffiliationIdentifierSchemeType.java (66%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/identifier/Creator.java (96%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/identifier/DescriptionType.java (82%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/identifier/Identifier.java (95%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/identifier/IdentifierDescription.java (93%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/identifier/IdentifierFunder.java (93%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/identifier/IdentifierFunderType.java (64%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/identifier/IdentifierStatusType.java (53%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/identifier/IdentifierTitle.java (93%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/identifier/IdentifierType.java (60%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/identifier/NameIdentifierSchemeType.java (66%) create mode 100644 lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/NameType.java rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/identifier/RelatedIdentifier.java (97%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/identifier/RelatedType.java (85%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/identifier/RelationType.java (94%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/identifier/TitleType.java (79%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/maintenance/BannerMessage.java (93%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/maintenance/BannerMessageType.java (65%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/semantics/Ontology.java (94%) rename {dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity}/user/User.java (93%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/AccessNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/AccountNotSetupException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/AnalyseServiceException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/AuthServiceConnectionException.java (92%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/AuthServiceException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/BrokerServiceConnectionException.java (92%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/BrokerServiceException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/ConceptNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/ContainerAlreadyExistsException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/ContainerNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/ContainerQuotaException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/CredentialsInvalidException.java (91%) create mode 100644 lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DashboardServiceConnectionException.java create mode 100644 lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DashboardServiceException.java rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/DataServiceConnectionException.java (92%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/DataServiceException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/DatabaseMalformedException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/DatabaseNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/DatabaseUnavailableException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/DoiNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/EmailExistsException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/ExchangeNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/ExternalServiceException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/FilterBadRequestException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/FormatNotAvailableException.java (90%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/IdentifierNotFoundException.java (92%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/IdentifierNotSupportedException.java (92%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/ImageAlreadyExistsException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/ImageInvalidException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/ImageNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/LicenseNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/MalformedException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/MessageNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/MetadataServiceConnectionException.java (92%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/MetadataServiceException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/NotAllowedException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/OntologyNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/OrcidNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/PaginationException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/QueryMalformedException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/QueryNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/QueryNotSupportedException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/QueryStoreCreateException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/QueryStoreGCException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/QueryStoreInsertException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/QueryStorePersistException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/QueueNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/RemoteUnavailableException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/RorNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/SearchServiceConnectionException.java (92%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/SearchServiceException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/SemanticEntityNotFoundException.java (92%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/SortException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/StorageNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/StorageUnavailableException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/TableExistsException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/TableMalformedException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/TableNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/TableSchemaException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/UnitNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/UriMalformedException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/UserExistsException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/UserNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/ViewExistsException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/ViewMalformedException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/ViewNotFoundException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/exception/ViewSchemaException.java (91%) rename {dbrepo-metadata-service/repositories/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/mapper/MetadataMapper.java (79%) rename {dbrepo-metadata-service/test/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/test/BaseTest.java (69%) rename {dbrepo-metadata-service/test/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/test/dto/LocaleDto.java (86%) rename {dbrepo-metadata-service => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/test/pom.xml (94%) rename {dbrepo-metadata-service/test/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/test/utils/ArrayUtils.java (87%) rename {dbrepo-metadata-service/test/src/main/java/at/tuwien => lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core}/test/utils/EndpointUtils.java (94%) delete mode 100644 lib/python/Makefile rename {dbrepo-search-service/init/omlib/exceptions => lib/python/dbrepo/core}/__init__.py (100%) rename {dbrepo-search-service/init/omlib/rdf => lib/python/dbrepo/core/api}/__init__.py (100%) rename {dbrepo-dashboard-service => lib/python/dbrepo/core}/api/dto.py (91%) create mode 100644 lib/python/dbrepo/core/api/exceptions.py create mode 100644 lib/python/dbrepo/core/client/__init__.py create mode 100644 lib/python/dbrepo/core/client/auth.py create mode 100644 lib/python/dbrepo/core/client/dashboard.py rename dbrepo-search-service/init/clients/opensearch_client.py => lib/python/dbrepo/core/client/search.py (88%) rename dbrepo-analyse-service/clients/s3_client.py => lib/python/dbrepo/core/client/storage.py (86%) create mode 100644 lib/python/dbrepo/core/omlib/__init__.py rename {dbrepo-search-service/init => lib/python/dbrepo/core}/omlib/constants.py (96%) rename {dbrepo-search-service/init => lib/python/dbrepo/core}/omlib/dimension.py (96%) create mode 100644 lib/python/dbrepo/core/omlib/exceptions/__init__.py rename {dbrepo-search-service/init => lib/python/dbrepo/core}/omlib/exceptions/dimensionexception.py (100%) rename {dbrepo-search-service/init => lib/python/dbrepo/core}/omlib/exceptions/unitconversionexception.py (100%) rename {dbrepo-search-service/init => lib/python/dbrepo/core}/omlib/exceptions/unitidentityexception.py (100%) rename {dbrepo-search-service/init => lib/python/dbrepo/core}/omlib/measure.py (98%) rename {dbrepo-search-service/init => lib/python/dbrepo/core}/omlib/omconstants.py (99%) create mode 100644 lib/python/dbrepo/core/omlib/rdf/__init__.py rename {dbrepo-search-service/init => lib/python/dbrepo/core}/omlib/rdf/om-2.0.rdf (100%) rename {dbrepo-search-service/init => lib/python/dbrepo/core}/omlib/scale.py (95%) rename {dbrepo-search-service/init => lib/python/dbrepo/core}/omlib/thing.py (100%) rename {dbrepo-search-service/init => lib/python/dbrepo/core}/omlib/unit.py (99%) delete mode 100755 lib/python/package.sh delete mode 100755 lib/python/release.sh delete mode 100644 lib/python/test.sh rename {dbrepo-search-service/init => lib/python}/tests/conftest.py (90%) create mode 100644 lib/python/tests/keycloak/rs256.key create mode 100644 lib/python/tests/keycloak/rsa256.pkey create mode 100644 lib/python/tests/opensearch/database.json rename dbrepo-analyse-service/tests/test_s3_client.py => lib/python/tests/test_integration_core_storage_client.py (98%) rename dbrepo-search-service/init/tests/test_keycloak_client.py => lib/python/tests/test_unit_core_auth_client.py (97%) rename dbrepo-search-service/init/tests/test_opensearch_client.py => lib/python/tests/test_unit_core_search_client.py (99%) diff --git a/.docker/docker-compose.yml b/.docker/docker-compose.yml index 8e4457e06c..50aab5cf44 100644 --- a/.docker/docker-compose.yml +++ b/.docker/docker-compose.yml @@ -6,7 +6,7 @@ volumes: search-db-data: identity-service-data: metric-db-data: - dashboard-service-data: + dashboard-ui-data: services: dbrepo-metadata-db: @@ -42,8 +42,10 @@ services: ports: - "3307:3306" environment: - MARIADB_ROOT_PASSWORD: "${DATA_DB_PASSWORD:-dbrepo}" MARIADB_GALERA_MARIABACKUP_PASSWORD: "${DATA_DB_BACKUP_PASSWORD:-dbrepobackup}" + MARIADB_PASSWORD: "${READONLY_PASSWORD:-user}" + MARIADB_ROOT_PASSWORD: "${DATA_DB_PASSWORD:-dbrepo}" + MARIADB_USER: "${READONLY_USERNAME:-user}" healthcheck: test: mysqladmin ping --user=root --password="${DATA_DB_PASSWORD:-dbrepo}" --silent interval: 10s @@ -115,7 +117,7 @@ services: init: true restart: "no" container_name: dbrepo-auth-service-init - image: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.7.3 + image: registry.datalab.tuwien.ac.at/dbrepo/auth-service-init:1.8.0 environment: AUTH_SERVICE_ADMIN: ${AUTH_SERVICE_ADMIN:-admin} AUTH_SERVICE_ADMIN_PASSWORD: ${AUTH_SERVICE_ADMIN_PASSWORD:-admin} @@ -123,10 +125,13 @@ services: METADATA_DB: "${METADATA_DB:-dbrepo}" METADATA_DB_PASSWORD: "${METADATA_DB_PASSWORD:-dbrepo}" METADATA_USERNAME: "root" + READONLY_USERNAME: "${READONLY_USERNAME:-user}" SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" depends_on: dbrepo-auth-service: condition: service_healthy + dbrepo-gateway-service: + condition: service_healthy dbrepo-metadata-db: condition: service_healthy logging: @@ -136,7 +141,7 @@ services: restart: "no" container_name: dbrepo-metadata-service hostname: metadata-service - image: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.7.3 + image: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.8.0 environment: ADMIN_EMAIL: "${ADMIN_EMAIL:-noreply@localhost}" ANALYSE_SERVICE_ENDPOINT: "${ANALYSE_SERVICE_ENDPOINT:-http://analyse-service:8080}" @@ -149,12 +154,13 @@ services: BROKER_EXCHANGE_NAME: ${BROKER_EXCHANGE_NAME:-dbrepo} BROKER_QUEUE_NAME: ${BROKER_QUEUE_NAME:-dbrepo} BROKER_HOST: "${BROKER_ENDPOINT:-broker-service}" - BROKER_PASSWORD: ${BROKER_PASSWORD:-admin} + BROKER_PASSWORD: ${SYSTEM_PASSWORD:-admin} BROKER_PORT: ${BROKER_PORT:-5672} BROKER_SERVICE_ENDPOINT: ${BROKER_SERVICE_ENDPOINT:-http://broker-service:15672} - BROKER_USERNAME: ${BROKER_USERNAME:-admin} + BROKER_USERNAME: ${SYSTEM_USERNAME:-admin} BROKER_VIRTUALHOST: "${BROKER_VIRTUALHOST:-dbrepo}" CROSSREF_ENDPOINT: "${CROSSREF_ENDPOINT:-http://data.crossref.org}" + DASHBOARD_SERVICE_ENDPOINT: "${DASHBOARD_SERVICE_ENDPOINT:-http://dashboard-service:8080}" DATA_SERVICE_ENDPOINT: ${DATA_SERVICE_ENDPOINT:-http://data-service:8080} DELETED_RECORD: "${DELETED_RECORD:-persistent}" GRANULARITY: "${GRANULARITY:-YYYY-MM-DDThh:mm:ssZ}" @@ -188,6 +194,10 @@ services: condition: service_healthy dbrepo-data-service: condition: service_healthy + dbrepo-dashboard-service: + condition: service_healthy + dbrepo-search-service: + condition: service_healthy dbrepo-metadata-db: condition: service_healthy logging: @@ -197,7 +207,7 @@ services: restart: "no" container_name: dbrepo-analyse-service hostname: analyse-service - image: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.7.3 + image: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.8.0 environment: AUTH_SERVICE_CLIENT: ${AUTH_SERVICE_CLIENT:-dbrepo-client} AUTH_SERVICE_CLIENT_SECRET: ${AUTH_SERVICE_CLIENT:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG} @@ -250,23 +260,16 @@ services: restart: "no" container_name: dbrepo-search-db hostname: search-db - image: registry.datalab.tuwien.ac.at/dbrepo/search-db:1.7.3 + image: docker.io/bitnami/opensearch:2.10.0 + ports: + - "9200:9200" healthcheck: - test: curl -sSL localhost:9200/_plugins/_security/health | jq .status | grep UP + test: curl -sSL 127.0.0.1:9200 interval: 10s timeout: 5s retries: 12 - environment: - ES_JAVA_OPTS: "-Xms4g -Xmx4g" - logger.level: "WARN" - deploy: - resources: - limits: - memory: 4G - ports: - - "9200:9200" volumes: - - search-db-data:/usr/share/elasticsearch/data + - search-db-data:/bitnami/opensearch/data logging: driver: json-file @@ -274,7 +277,7 @@ services: restart: "no" container_name: dbrepo-search-service hostname: search-service - image: registry.datalab.tuwien.ac.at/dbrepo/search-service:1.7.3 + image: registry.datalab.tuwien.ac.at/dbrepo/search-service:1.8.0 environment: AUTH_SERVICE_CLIENT: ${AUTH_SERVICE_CLIENT:-dbrepo-client} AUTH_SERVICE_CLIENT_SECRET: ${AUTH_SERVICE_CLIENT_SECRET:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG} @@ -284,8 +287,6 @@ services: METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080} OPENSEARCH_HOST: ${OPENSEARCH_HOST:-search-db} OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200} - OPENSEARCH_USERNAME: ${SEARCH_DB_USERNAME:-admin} - OPENSEARCH_PASSWORD: ${SEARCH_DB_PASSWORD:-admin} SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}" healthcheck: @@ -293,12 +294,14 @@ services: interval: 10s timeout: 5s retries: 12 + logging: + driver: json-file dbrepo-ui: restart: "no" container_name: dbrepo-ui hostname: ui - image: registry.datalab.tuwien.ac.at/dbrepo/ui:1.7.3 + image: registry.datalab.tuwien.ac.at/dbrepo/ui:1.8.0 environment: NUXT_PUBLIC_API_CLIENT: "${BASE_URL:-http://localhost}" NUXT_PUBLIC_API_SERVER: "${BASE_URL:-http://gateway-service}" @@ -315,7 +318,7 @@ services: dbrepo-search-service: condition: service_healthy healthcheck: - test: curl -fsSL http://127.0.0.1:3000 && curl -fsSL http://127.0.0.1:3000/health + test: curl -fsSL 127.0.0.1:3000 && curl -fsSL 127.0.0.1:3000/health interval: 10s timeout: 5s retries: 12 @@ -333,6 +336,11 @@ services: - "80:8080" volumes: - ./config/dbrepo.conf:/etc/nginx/conf.d/default.conf + healthcheck: + test: lsof -i TCP:80 || exit 1 + interval: 10s + timeout: 5s + retries: 12 depends_on: dbrepo-analyse-service: condition: service_healthy @@ -357,8 +365,8 @@ services: environment: LDAP_ADMIN_USERNAME: "${IDENTITY_SERVICE_ADMIN_USERNAME:-admin}" LDAP_ADMIN_PASSWORD: "${IDENTITY_SERVICE_ADMIN_PASSWORD:-admin}" - LDAP_USERS: "${SYSTEM_USERNAME:-admin}" - LDAP_PASSWORDS: "${SYSTEM_PASSWORD:-admin}" + LDAP_USERS: "${SYSTEM_USERNAME:-admin},${READONLY_USERNAME:-user}" + LDAP_PASSWORDS: "${SYSTEM_PASSWORD:-admin},${READONLY_PASSWORD:-user}" LDAP_GROUP: "${ADMIN_GROUP:-system}" LDAP_ROOT: "${IDENTITY_SERVICE_ROOT:-dc=dbrepo,dc=at}" LDAP_ADMIN_DN: "${IDENTITY_SERVICE_ADMIN_DN:-cn=admin,dc=dbrepo,dc=at}" @@ -375,14 +383,12 @@ services: init: true container_name: dbrepo-search-service-init hostname: search-service-init - image: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:1.7.3 + image: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:1.8.0 environment: LOG_LEVEL: ${LOG_LEVEL:-info} METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080} OPENSEARCH_HOST: ${OPENSEARCH_HOST:-search-db} OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200} - OPENSEARCH_USERNAME: ${SEARCH_DB_USERNAME:-admin} - OPENSEARCH_PASSWORD: ${SEARCH_DB_PASSWORD:-admin} SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}" depends_on: @@ -393,6 +399,26 @@ services: logging: driver: json-file + dbrepo-dashboard-service-init: + restart: "no" + init: true + container_name: dbrepo-dashboard-service-init + hostname: search-dashboard-init + image: registry.datalab.tuwien.ac.at/dbrepo/dashboard-service-init:1.8.0 + environment: + LOG_LEVEL: ${LOG_LEVEL:-info} + DASHBOARD_UI_ENDPOINT: "${DASHBOARD_UI_ENDPOINT:-http://dashboard-ui:3000}" + METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080} + SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" + SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}" + depends_on: + dbrepo-dashboard-ui: + condition: service_healthy + dbrepo-metadata-service: + condition: service_healthy + logging: + driver: json-file + dbrepo-storage-service: restart: "no" container_name: dbrepo-storage-service @@ -428,38 +454,12 @@ services: logging: driver: json-file - dbrepo-dashboard-service: - restart: "no" - container_name: dbrepo-dashboard-service - hostname: dashboard-service - image: registry.datalab.tuwien.ac.at/dbrepo/dashboard-service:1.7.3 - ports: - - "3000:3000" - volumes: - - dashboard-service-data:/opt/bitnami/grafana/data - environment: - GF_SERVER_DOMAIN: "dashboard-service" - GF_SECURITY_DISABLE_INITIAL_ADMIN_CREATION: "true" - LDAP_ADMIN_USERNAME: "${IDENTITY_SERVICE_ADMIN_USERNAME:-admin}" - LDAP_ADMIN_PASSWORD: "${IDENTITY_SERVICE_ADMIN_PASSWORD:-admin}" - LDAP_ROOT: "${IDENTITY_SERVICE_ROOT:-dc=dbrepo,dc=at}" - healthcheck: - test: curl -fsSL --head http://127.0.0.1:3000 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-metric-db: - condition: service_started - logging: - driver: json-file - dbrepo-storage-service-init: restart: "no" init: true container_name: dbrepo-storage-service-init hostname: storage-service-init - image: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.7.3 + image: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.8.0 environment: S3_ACCESS_KEY_ID: ${S3_ACCESS_KEY_ID:-seaweedfsadmin} S3_BUCKET: "${S3_BUCKET:-dbrepo}" @@ -475,7 +475,7 @@ services: restart: "no" container_name: dbrepo-data-service hostname: data-service - image: registry.datalab.tuwien.ac.at/dbrepo/data-service:1.7.3 + image: registry.datalab.tuwien.ac.at/dbrepo/data-service:1.8.0 environment: AUTH_SERVICE_ADMIN: "${AUTH_SERVICE_ADMIN:-admin}" AUTH_SERVICE_ADMIN_PASSWORD: "${AUTH_SERVICE_ADMIN_PASSWORD:-admin}" @@ -499,15 +499,12 @@ services: GRANT_DEFAULT_WRITE: "${GRANT_DEFAULT_WRITE:-SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE}" JWT_PUBKEY: "${JWT_PUBKEY:-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB}" LOG_LEVEL: ${LOG_LEVEL:-info} - MIN_CONCURRENT_CONSUMERS: ${MIN_CONCURRENT_CONSUMERS:-1} - MAX_CONCURRENT_CONSUMERS: ${MAX_CONCURRENT_CONSUMERS:-5} QUEUE_NAME: ${QUEUE_NAME:-dbrepo} REQUEUE_REJECTED: ${REQUEUE_REJECTED:-false} ROUTING_KEY: "${ROUTING_KEY:-dbrepo.#}" S3_ACCESS_KEY_ID: "${S3_ACCESS_KEY_ID:-seaweedfsadmin}" S3_BUCKET: "${S3_BUCKET:-dbrepo}" S3_ENDPOINT: "${S3_ENDPOINT:-http://storage-service:9000}" - S3_IMPORT_BUCKET: "${S3_IMPORT_BUCKET:-dbrepo-upload}" S3_SECRET_ACCESS_KEY: "${S3_SECRET_ACCESS_KEY:-seaweedfsadmin}" SPARK_USER: "${COMPUTE_SERVICE_USERNAME:-spark}" SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" @@ -522,3 +519,59 @@ services: condition: service_healthy logging: driver: json-file + + dbrepo-dashboard-ui: + restart: "no" + container_name: dbrepo-dashboard-ui + hostname: dashboard-ui + image: registry.datalab.tuwien.ac.at/dbrepo/dashboard-ui:1.8.0 + ports: + - "3000:3000" + volumes: + - dashboard-ui-data:/opt/bitnami/grafana/data + environment: + BASE_URL: "${BASE_URL:-http://localhost}" + GF_INSTALL_PLUGINS: "yesoreyeram-infinity-datasource" + GF_SERVER_DOMAIN: "dashboard-service" + GF_SECURITY_DISABLE_INITIAL_ADMIN_CREATION: "true" + LDAP_ADMIN_USERNAME: "${IDENTITY_SERVICE_ADMIN_USERNAME:-admin}" + LDAP_ADMIN_PASSWORD: "${IDENTITY_SERVICE_ADMIN_PASSWORD:-admin}" + LDAP_ROOT: "${IDENTITY_SERVICE_ROOT:-dc=dbrepo,dc=at}" + healthcheck: + test: curl -fsSL --head 127.0.0.1:3000 + interval: 10s + timeout: 5s + retries: 12 + depends_on: + dbrepo-metric-db: + condition: service_started + extra_hosts: + - "localhost:host-gateway" + logging: + driver: json-file + + dbrepo-dashboard-service: + restart: "no" + container_name: dbrepo-dashboard-service + hostname: dashboard-service + image: registry.datalab.tuwien.ac.at/dbrepo/dashboard-service:1.8.0 + ports: + - "4070:8080" + environment: + AUTH_SERVICE_ADMIN: ${AUTH_SERVICE_ADMIN:-admin} + AUTH_SERVICE_ADMIN_PASSWORD: ${AUTH_SERVICE_ADMIN_PASSWORD:-admin} + AUTH_SERVICE_ENDPOINT: ${AUTH_SERVICE_ENDPOINT:-http://auth-service:8080} + BASE_URL: "${BASE_URL:-http://localhost}" + DASHBOARD_UI_ENDPOINT: "${DASHBOARD_UI_ENDPOINT:-http://dashboard-ui:3000}" + SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" + SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}" + healthcheck: + test: curl -fsSL --head 127.0.0.1:8080/health + interval: 10s + timeout: 5s + retries: 12 + depends_on: + dbrepo-metric-db: + condition: service_started + logging: + driver: json-file diff --git a/.docs/.openapi/api-analyse.yaml b/.docs/.openapi/api-analyse.yaml index 25e15521d5..b347692d48 100644 --- a/.docs/.openapi/api-analyse.yaml +++ b/.docs/.openapi/api-analyse.yaml @@ -24,16 +24,29 @@ }, "type": "object" }, + "ApiError": { + "properties": { + "code": { + "example": "error.dashboard.create", + "type": "string" + }, + "message": { + "example": "Message", + "type": "string" + }, + "status": { + "example": "BAD_REQUEST", + "type": "string" + } + }, + "type": "object" + }, "ColumnAnalysisDto": { "properties": { "d": { "example": 4, "type": "integer" }, - "dfid": { - "example": null, - "type": "integer" - }, "enums": { "example": null, "properties": { @@ -62,19 +75,6 @@ }, "type": "object" }, - "ErrorDto": { - "properties": { - "message": { - "example": "Message", - "type": "string" - }, - "success": { - "example": false, - "type": "boolean" - } - }, - "type": "object" - }, "KeysDto": { "properties": { "keys": { @@ -111,7 +111,7 @@ }, "externalDocs": { "description": "Sourcecode Documentation", - "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.5/" + "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8/" }, "info": { "contact": { @@ -124,7 +124,7 @@ "url": "https://www.apache.org/licenses/LICENSE-2.0" }, "title": "Database Repository Analyse Service API", - "version": "1.5" + "version": "1.8.0" }, "openapi": "3.0.0", "paths": { @@ -322,7 +322,7 @@ "servers": [ { "description": "Generated server url", - "url": "http://localhost:5000" + "url": "http://localhost" }, { "description": "Sandbox", diff --git a/.docs/.openapi/api-dashboard.yaml b/.docs/.openapi/api-dashboard.yaml new file mode 100644 index 0000000000..54a27444f6 --- /dev/null +++ b/.docs/.openapi/api-dashboard.yaml @@ -0,0 +1 @@ +"<!doctype html> <html lang=en> <title>500 Internal Server Error</title> <h1>Internal Server Error</h1> <p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p>" diff --git a/.docs/.openapi/api-data.yaml b/.docs/.openapi/api-data.yaml index 8a21c8aff9..b653ecb413 100644 --- a/.docs/.openapi/api-data.yaml +++ b/.docs/.openapi/api-data.yaml @@ -1,4 +1,4 @@ -openapi: 3.0.1 +openapi: 3.1.0 info: title: Database Repository Data Service API description: Service that manages the data @@ -8,10 +8,10 @@ info: license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0 - version: 1.7.3 + version: 1.8.0 externalDocs: description: Sourcecode Documentation - url: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.7.3/system-services-metadata/ + url: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8.0/system-services-metadata/ servers: - url: http://localhost description: Development instance @@ -63,20 +63,35 @@ paths: schema: type: string responses: - "406": - description: Failed to format data + "200": + description: Retrieved view data + headers: + Access-Control-Expose-Headers: + description: Expose `X-Count` custom header + required: true + style: simple + schema: + type: string + X-Count: + description: Number of rows + required: true + style: simple + schema: + type: integer + format: int64 content: application/json: schema: - $ref: "#/components/schemas/ApiErrorDto" + type: string + text/csv: {} "400": description: Request pagination is malformed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "409": - description: View schema could not be mapped + "403": + description: Not allowed to retrieve view data content: application/json: schema: @@ -87,30 +102,20 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to establish connection with the metadata service + "406": + description: Failed to format data content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "200": - description: Retrieved view data - headers: - Access-Control-Expose-Headers: - description: Expose `X-Count` custom header - required: true - style: simple - X-Count: - description: Number of rows - required: true - style: simple + "409": + description: View schema could not be mapped content: application/json: schema: - type: string - text/csv: {} - "403": - description: Not allowed to retrieve view data + $ref: "#/components/schemas/ApiErrorDto" + "503": + description: Failed to establish connection with the metadata service content: application/json: schema: @@ -162,20 +167,35 @@ paths: schema: type: string responses: - "406": - description: Failed to format data + "200": + description: Retrieved view data + headers: + Access-Control-Expose-Headers: + description: Expose `X-Count` custom header + required: true + style: simple + schema: + type: string + X-Count: + description: Number of rows + required: true + style: simple + schema: + type: integer + format: int64 content: application/json: schema: - $ref: "#/components/schemas/ApiErrorDto" + type: string + text/csv: {} "400": description: Request pagination is malformed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "409": - description: View schema could not be mapped + "403": + description: Not allowed to retrieve view data content: application/json: schema: @@ -186,30 +206,20 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to establish connection with the metadata service + "406": + description: Failed to format data content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "200": - description: Retrieved view data - headers: - Access-Control-Expose-Headers: - description: Expose `X-Count` custom header - required: true - style: simple - X-Count: - description: Number of rows - required: true - style: simple + "409": + description: View schema could not be mapped content: application/json: schema: - type: string - text/csv: {} - "403": - description: Not allowed to retrieve view data + $ref: "#/components/schemas/ApiErrorDto" + "503": + description: Failed to establish connection with the metadata service content: application/json: schema: @@ -264,18 +274,6 @@ paths: schema: type: string responses: - "406": - description: Failed to format data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find table in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "200": description: Get table data headers: @@ -283,23 +281,40 @@ paths: description: Expose `X-Count` custom header required: true style: simple + schema: + type: string X-Count: description: Number of rows required: true style: simple + schema: + type: integer + format: int64 content: application/json: schema: type: string text/csv: {} + "400": + description: Request pagination or table data select query is malformed + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" "403": description: Not allowed to get table data content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "400": - description: Request pagination or table data select query is malformed + "404": + description: Failed to find table in metadata database + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" + "406": + description: Failed to format data content: application/json: schema: @@ -346,22 +361,22 @@ paths: $ref: "#/components/schemas/TupleUpdateDto" required: true responses: - "403": - description: Update table data not allowed + "202": + description: Updated table data + "400": + description: Request pagination or table data select query is malformed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find table in metadata database + "403": + description: Update table data not allowed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "202": - description: Updated table data - "400": - description: Request pagination or table data select query is malformed + "404": + description: Failed to find table in metadata database content: application/json: schema: @@ -408,15 +423,16 @@ paths: $ref: "#/components/schemas/TupleDto" required: true responses: - "403": - description: Create table data not allowed + "201": + description: Created table data + "400": + description: Request pagination or table data select query is malformed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to establish connection with the metadata service or - storage service + "403": + description: Create table data not allowed content: application/json: schema: @@ -428,10 +444,9 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "201": - description: Created table data - "400": - description: Request pagination or table data select query is malformed + "503": + description: Failed to establish connection with the metadata service or + storage service content: application/json: schema: @@ -472,12 +487,6 @@ paths: $ref: "#/components/schemas/TupleDeleteDto" required: true responses: - "404": - description: Failed to find table in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "202": description: Deleted table data "400": @@ -486,14 +495,20 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to establish connection with the metadata service + "403": + description: Delete table data not allowed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Delete table data not allowed + "404": + description: Failed to find table in metadata database + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" + "503": + description: Failed to establish connection with the metadata service content: application/json: schema: @@ -547,18 +562,6 @@ paths: schema: type: string responses: - "406": - description: Failed to format data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find table in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "200": description: Get table data headers: @@ -566,23 +569,40 @@ paths: description: Expose `X-Count` custom header required: true style: simple + schema: + type: string X-Count: description: Number of rows required: true style: simple + schema: + type: integer + format: int64 content: application/json: schema: type: string text/csv: {} + "400": + description: Request pagination or table data select query is malformed + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" "403": description: Not allowed to get table data content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "400": - description: Request pagination or table data select query is malformed + "404": + description: Failed to find table in metadata database + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" + "406": + description: Failed to format data content: application/json: schema: @@ -643,18 +663,6 @@ paths: type: integer format: int64 responses: - "403": - description: Not allowed to retrieve subset data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "406": - description: Failed to format data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "200": description: Retrieved subset data headers: @@ -662,29 +670,39 @@ paths: description: Reverse proxy exposing of custom headers required: true style: simple + schema: + type: string X-Count: description: Number of rows style: simple + schema: + type: string + format: uuid X-Id: description: The subset id required: true style: simple + schema: + type: string + format: uuid X-Headers: description: The list of headers separated by comma style: simple + schema: + type: string content: application/json: schema: type: string text/csv: {} - "503": - description: Failed to communicate with database + "400": + description: Invalid pagination content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "400": - description: Invalid pagination + "403": + description: Not allowed to retrieve subset data content: application/json: schema: @@ -696,6 +714,18 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" + "406": + description: Failed to format data + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" + "503": + description: Failed to communicate with database + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" security: - bearerAuth: [] - basicAuth: [] @@ -745,18 +775,6 @@ paths: type: integer format: int64 responses: - "403": - description: Not allowed to retrieve subset data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "406": - description: Failed to format data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "200": description: Retrieved subset data headers: @@ -764,29 +782,39 @@ paths: description: Reverse proxy exposing of custom headers required: true style: simple + schema: + type: string X-Count: description: Number of rows style: simple + schema: + type: string + format: uuid X-Id: description: The subset id required: true style: simple + schema: + type: string + format: uuid X-Headers: description: The list of headers separated by comma style: simple + schema: + type: string content: application/json: schema: type: string text/csv: {} - "503": - description: Failed to communicate with database + "400": + description: Invalid pagination content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "400": - description: Invalid pagination + "403": + description: Not allowed to retrieve subset data content: application/json: schema: @@ -798,6 +826,18 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" + "406": + description: Failed to format data + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" + "503": + description: Failed to communicate with database + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" security: - bearerAuth: [] - basicAuth: [] @@ -828,39 +868,39 @@ paths: $ref: "#/components/schemas/QueryPersistDto" required: true responses: - "400": - description: Malformed select query + "202": + description: Persisted subset content: application/json: schema: - $ref: "#/components/schemas/ApiErrorDto" - "417": - description: Failed to persist subset + $ref: "#/components/schemas/QueryDto" + "400": + description: Malformed select query content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to communicate with database + "403": + description: Not allowed to persist subset content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not allowed to persist subset + "404": + description: Failed to find database in metadata database or query in query + store of the data database content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "202": - description: Persisted subset + "417": + description: Failed to persist subset content: application/json: schema: - $ref: "#/components/schemas/QueryDto" - "404": - description: Failed to find database in metadata database or query in query - store of the data database + $ref: "#/components/schemas/ApiErrorDto" + "503": + description: Failed to communicate with database content: application/json: schema: @@ -880,13 +920,13 @@ paths: content: application/json: schema: - required: - - file type: object properties: file: type: string format: binary + required: + - file required: true responses: "201": @@ -939,22 +979,22 @@ paths: $ref: "#/components/schemas/ImportDto" required: true responses: + "202": + description: Imported dataset successfully "400": description: Dataset and/or query are malformed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "202": - description: Imported dataset successfully - "404": - description: Failed to find table in metadata database + "403": + description: Import table dataset not allowed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Import table dataset not allowed + "404": + description: Failed to find table in metadata database content: application/json: schema: @@ -1000,12 +1040,6 @@ paths: type: array items: $ref: "#/components/schemas/QueryDto" - "503": - description: Failed to communicate with database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "403": description: Not allowed to find subsets content: @@ -1019,6 +1053,12 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" + "503": + description: Failed to communicate with database + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" security: - basicAuth: [] - bearerAuth: [] @@ -1063,32 +1103,39 @@ paths: $ref: "#/components/schemas/SubsetDto" required: true responses: + "201": + description: Created subset + content: + application/json: + schema: + type: string "400": description: Malformed select query content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "406": - description: Failed to format data + "403": + description: Not allowed to find subset content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "417": - description: Failed to insert query into query store of data database + "404": + description: Failed to find database in metadata database or query in query + store of the data database content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not allowed to find subset + "406": + description: Failed to format data content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to communicate with database + "417": + description: Failed to insert query into query store of data database content: application/json: schema: @@ -1099,15 +1146,8 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "201": - description: Created subset - content: - application/json: - schema: - type: string - "404": - description: Failed to find database in metadata database or query in query - store of the data database + "503": + description: Failed to communicate with database content: application/json: schema: @@ -1144,12 +1184,6 @@ paths: type: integer format: int64 responses: - "404": - description: Failed to find table history in data database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "200": description: Found table history content: @@ -1158,14 +1192,20 @@ paths: type: array items: $ref: "#/components/schemas/TableHistoryDto" + "400": + description: "Invalid pagination size request, must be > 0" + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" "403": description: Find table history not allowed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "400": - description: "Invalid pagination size request, must be > 0" + "404": + description: Failed to find table history in data database content: application/json: schema: @@ -1210,6 +1250,13 @@ paths: type: string format: date-time responses: + "200": + description: Found subset + content: + application/json: + schema: + $ref: "#/components/schemas/QueryDto" + text/csv: {} "400": description: Malformed select query content: @@ -1222,28 +1269,21 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "406": - description: Failed to find acceptable representation + "404": + description: Failed to find database in metadata database or query in query + store of the data database content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to communicate with database + "406": + description: Failed to find acceptable representation content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "200": - description: Found subset - content: - application/json: - schema: - $ref: "#/components/schemas/QueryDto" - text/csv: {} - "404": - description: Failed to find database in metadata database or query in query - store of the data database + "503": + description: Failed to communicate with database content: application/json: schema: @@ -1254,15 +1294,10 @@ paths: components: schemas: ApiErrorDto: - required: - - code - - message - - status type: object properties: status: type: string - example: NOT_FOUND enum: - 100 CONTINUE - 101 SWITCHING_PROTOCOLS @@ -1333,46 +1368,44 @@ components: - 509 BANDWIDTH_LIMIT_EXCEEDED - 510 NOT_EXTENDED - 511 NETWORK_AUTHENTICATION_REQUIRED + example: NOT_FOUND message: type: string example: Error message code: type: string example: error.service.code - TupleUpdateDto: required: - - data - - keys + - code + - message + - status + TupleUpdateDto: type: object properties: data: type: object additionalProperties: type: object - example: - key: value example: key: value keys: type: object additionalProperties: type: object - example: - id: 1 example: id: 1 - QueryPersistDto: required: - - persist + - data + - keys + QueryPersistDto: type: object properties: persist: type: boolean example: true - CreatorBriefDto: required: - - creator_name - - id + - persist + CreatorBriefDto: type: object properties: id: @@ -1387,43 +1420,35 @@ components: example: "Carberry, Josiah" name_type: type: string - example: Personal enum: - Personal - Organizational + example: Personal name_identifier: type: string example: 0000-0002-1825-0097 name_identifier_scheme: type: string - example: ORCID enum: - ORCID - ROR - ISNI - GRID + example: ORCID affiliation_identifier: type: string example: https://ror.org/05gq02987 affiliation_identifier_scheme: type: string - example: ROR enum: - ROR - GRID - ISNI - IdentifierBriefDto: + example: ROR required: - - creators - - database_id - - descriptions + - creator_name - id - - owned_by - - publication_year - - publisher - - status - - titles - - type + IdentifierBriefDto: type: object properties: id: @@ -1432,12 +1457,12 @@ components: example: b97cd56b-66ca-4354-9e6c-f47210cfaaec type: type: string - example: database enum: - database - subset - table - view + example: database creators: type: array items: @@ -1458,10 +1483,10 @@ components: example: TU Wien status: type: string - example: draft enum: - draft - published + example: draft database_id: type: string format: uuid @@ -1469,12 +1494,15 @@ components: query_id: type: string format: uuid + example: 1 table_id: type: string format: uuid + example: 1 view_id: type: string format: uuid + example: 1 publication_year: type: integer format: int32 @@ -1483,9 +1511,18 @@ components: type: string format: uuid example: 2f45ef7a-7f9b-4667-9156-152c87fe1ca5 - IdentifierDescriptionDto: required: + - creators + - database_id + - descriptions - id + - owned_by + - publication_year + - publisher + - status + - titles + - type + IdentifierDescriptionDto: type: object properties: id: @@ -1497,7 +1534,6 @@ components: example: "Air quality reports at Stephansplatz, Vienna" language: type: string - example: en enum: - ab - aa @@ -1683,9 +1719,9 @@ components: - yo - za - zu + example: en type: type: string - example: Abstract enum: - Abstract - Methods @@ -1693,9 +1729,10 @@ components: - TableOfContents - TechnicalInfo - Other - IdentifierTitleDto: + example: Abstract required: - id + IdentifierTitleDto: type: object properties: id: @@ -1707,7 +1744,6 @@ components: example: Airquality Demonstrator language: type: string - example: en enum: - ab - aa @@ -1893,6 +1929,7 @@ components: - yo - za - zu + example: en type: type: string enum: @@ -1900,17 +1937,9 @@ components: - Subtitle - TranslatedTitle - Other - QueryDto: required: - - database_id - - execution - id - - identifiers - - is_persisted - - owner - - query - - query_hash - - query_normalized + QueryDto: type: object properties: id: @@ -1928,10 +1957,10 @@ components: example: SELECT `id` FROM `air_quality` type: type: string - example: query enum: - query - view + example: query identifiers: type: array items: @@ -1956,10 +1985,17 @@ components: type: integer format: int64 example: 1 - UserBriefDto: required: + - database_id + - execution - id - - username + - identifiers + - is_persisted + - owner + - query + - query_hash + - query_normalized + UserBriefDto: type: object properties: id: @@ -1985,10 +2021,10 @@ components: family_name: type: string example: Carberry - CreatorDto: required: - - creator_name - id + - username + CreatorDto: type: object properties: id: @@ -2009,21 +2045,21 @@ components: example: "Carberry, Josiah" name_type: type: string - example: Personal enum: - Personal - Organizational + example: Personal name_identifier: type: string example: 0000-0002-1825-0097 name_identifier_scheme: type: string - example: ORCID enum: - ORCID - ROR - ISNI - GRID + example: ORCID name_identifier_scheme_uri: type: string example: https://orcid.org/ @@ -2032,33 +2068,31 @@ components: example: https://ror.org/05gq02987 affiliation_identifier_scheme: type: string - example: ROR enum: - ROR - GRID - ISNI + example: ROR affiliation_identifier_scheme_uri: type: string example: https://ror.org/ - IdentifierDto: required: - - creators - - database_id - - descriptions - - funders + - creator_name - id - - language - - licenses - - links - - owner - - publication_year - - publisher - - query - - query_hash - - query_normalized - - status - - titles - - type + EnumDto: + type: object + properties: + id: + type: string + format: uuid + example: 5343bb3d-14d3-4eb7-a86f-b8fc553cb315 + value: + type: string + example: 3 + required: + - id + - value + IdentifierDto: type: object properties: id: @@ -2069,12 +2103,12 @@ components: $ref: "#/components/schemas/LinksDto" type: type: string - example: database enum: - database - subset - table - view + example: database titles: type: array items: @@ -2300,22 +2334,26 @@ components: $ref: "#/components/schemas/CreatorDto" status: type: string - example: draft enum: - draft - published + example: draft database_id: type: string format: uuid + example: null query_id: type: string format: uuid + example: null table_id: type: string format: uuid + example: null view_id: type: string format: uuid + example: null query_normalized: type: string example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ @@ -2346,10 +2384,25 @@ components: type: integer format: int32 example: 2022 - IdentifierFunderDto: required: - - funder_name + - creators + - database_id + - descriptions + - funders - id + - language + - licenses + - links + - owner + - publication_year + - publisher + - query + - query_hash + - query_normalized + - status + - titles + - type + IdentifierFunderDto: type: object properties: id: @@ -2364,26 +2417,26 @@ components: example: http://doi.org/10.13039/501100000780 funder_identifier_type: type: string - example: Crossref Funder ID enum: - Crossref Funder ID - ROR - GND - ISNI - Other + example: Crossref Funder ID scheme_uri: type: string example: http://doi.org/ award_number: type: string - example: "824087" + example: 824087 award_title: type: string example: EOSC-Life - LicenseDto: required: - - identifier - - uri + - funder_name + - id + LicenseDto: type: object properties: identifier: @@ -2398,10 +2451,10 @@ components: \ preservation of copyright and license notices. Licensed works, modifications,\ \ and larger works may be distributed under different terms and without\ \ source code." - LinksDto: required: - - self - - self_html + - identifier + - uri + LinksDto: type: object properties: self: @@ -2413,12 +2466,13 @@ components: self_html: type: string example: http://example.com - RelatedIdentifierDto: + dashboard_html: + type: string + example: http://example.com/d/defi2baxqawaod required: - - id - - relation - - type - - value + - self + - self_html + RelatedIdentifierDto: type: object properties: id: @@ -2430,7 +2484,6 @@ components: example: 10.70124/dc4zh-9ce78 type: type: string - example: DOI enum: - DOI - URL @@ -2450,9 +2503,9 @@ components: - PURL - UPC - w3id + example: DOI relation: type: string - example: Cites enum: - IsCitedBy - Cites @@ -2488,15 +2541,26 @@ components: - Requires - IsObsoletedBy - Obsoletes - ViewColumnDto: + example: Cites required: - - database_id - id - - internal_name - - is_null_allowed - - name - - ord + - relation - type + - value + SetDto: + type: object + properties: + id: + type: string + format: uuid + example: 7eb4eded-bacc-4a91-84db-a9ae6ddafda7 + value: + type: string + example: 3 + required: + - id + - value + ViewColumnDto: type: object properties: id: @@ -2504,10 +2568,10 @@ components: format: uuid example: 6aec3a91-2e0b-4e92-a16a-9c3c5e892da1 name: - maxLength: 64 - minLength: 0 type: string example: Given Name + maxLength: 64 + minLength: 0 size: type: integer format: int64 @@ -2517,10 +2581,20 @@ components: format: int64 example: 0 description: - maxLength: 2048 - minLength: 0 type: string example: Column comment + maxLength: 2048 + minLength: 0 + enums: + type: array + description: "enum values, only considered when type = ENUM" + items: + $ref: "#/components/schemas/EnumDto" + sets: + type: array + description: "enum values, only considered when type = ENUM" + items: + $ref: "#/components/schemas/SetDto" database_id: type: string format: uuid @@ -2530,10 +2604,10 @@ components: format: int32 example: 0 internal_name: - maxLength: 64 - minLength: 0 type: string example: given_name + maxLength: 64 + minLength: 0 index_length: type: integer format: int64 @@ -2544,7 +2618,6 @@ components: example: 255 type: type: string - example: varchar enum: - char - varchar @@ -2576,20 +2649,19 @@ components: - timestamp - time - year + example: varchar is_null_allowed: type: boolean example: false - ViewDto: required: - - columns - database_id - id - - identifiers - internal_name + - is_null_allowed - name - - owner - - query - - query_hash + - ord + - type + ViewDto: type: object properties: id: @@ -2612,9 +2684,14 @@ components: type: array items: $ref: "#/components/schemas/ViewColumnDto" + created: + type: string + format: date-time + example: 2022-01-01 08:00:00.000 last_retrieved: type: string format: date-time + example: 2025-01-23T12:09:01 database_id: type: string format: uuid @@ -2635,24 +2712,29 @@ components: query_hash: type: string example: 7de03e818900b6ea6d58ad0306d4a741d658c6df3d1964e89ed2395d8c7e7916 - TupleDto: required: - - data + - columns + - created + - database_id + - id + - identifiers + - internal_name + - name + - owner + - query + - query_hash + TupleDto: type: object properties: data: type: object additionalProperties: type: object - example: - key: value example: key: value - ImportDto: required: - - header - - location - - separator + - data + ImportDto: type: object properties: location: @@ -2672,24 +2754,23 @@ components: line_termination: type: string example: \r\n - FilterDto: required: - - column_id - - operator_id - - type - - value + - header + - location + - separator + FilterDto: type: object properties: type: type: string - example: where enum: - where - or - and + example: where value: type: string - example: "1" + example: 1 column_id: type: string format: uuid @@ -2698,25 +2779,27 @@ components: type: string format: uuid example: 67c5b54d-2eb0-4f42-8dc1-a504562e9f32 - OrderDto: required: - column_id + - operator_id + - type + - value + OrderDto: type: object properties: direction: type: string - example: asc enum: - asc - desc + example: asc column_id: type: string format: uuid example: e891ba86-0258-41a6-a8d9-ff58bc10b618 - SubsetDto: required: - - columns - - table_id + - column_id + SubsetDto: type: object properties: columns: @@ -2734,15 +2817,20 @@ components: type: array items: $ref: "#/components/schemas/OrderDto" - table_id: + datasource_id: type: string format: uuid example: f7df2a7d-4ade-4c78-97b0-7c744d0893c7 - TableHistoryDto: + datasource_type: + type: string + enum: + - table + - view required: - - event - - timestamp - - total + - columns + - datasource_id + - datasource_type + TableHistoryDto: type: object properties: timestamp: @@ -2751,27 +2839,29 @@ components: example: 2021-03-12T15:26:21Z event: type: string - example: INSERT enum: - insert - delete + example: INSERT total: type: integer format: int64 example: 1 - TupleDeleteDto: required: - - keys + - event + - timestamp + - total + TupleDeleteDto: type: object properties: keys: type: object additionalProperties: type: object - example: - id: 1 example: id: 1 + required: + - keys securitySchemes: basicAuth: type: http diff --git a/.docs/.openapi/api-metadata.yaml b/.docs/.openapi/api-metadata.yaml index 4c73fa8836..345b4c0efa 100644 --- a/.docs/.openapi/api-metadata.yaml +++ b/.docs/.openapi/api-metadata.yaml @@ -1,4 +1,4 @@ -openapi: 3.0.1 +openapi: 3.1.0 info: title: Database Repository Metadata Service API description: Service that manages the metadata @@ -8,10 +8,10 @@ info: license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0 - version: 1.7.3 + version: 1.8.0 externalDocs: description: Sourcecode Documentation - url: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.7.3/system-services-metadata/ + url: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8.0/system-services-metadata/ servers: - url: http://localhost description: Development instance @@ -36,6 +36,12 @@ paths: type: string format: uuid responses: + "200": + description: Found user + content: + application/json: + schema: + $ref: "#/components/schemas/UserDto" "403": description: Find user is not permitted content: @@ -48,12 +54,6 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "200": - description: Found user - content: - application/json: - schema: - $ref: "#/components/schemas/UserDto" security: - bearerAuth: [] - basicAuth: [] @@ -77,18 +77,12 @@ paths: $ref: "#/components/schemas/UserUpdateDto" required: true responses: - "404": - description: Failed to find database/user in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to modify user at auth service + "202": + description: Modified user information content: application/json: schema: - $ref: "#/components/schemas/ApiErrorDto" + $ref: "#/components/schemas/UserDto" "400": description: Modify user query is malformed content: @@ -101,12 +95,18 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "202": - description: Modified user information + "404": + description: Failed to find database/user in metadata database content: application/json: schema: - $ref: "#/components/schemas/UserDto" + $ref: "#/components/schemas/ApiErrorDto" + "503": + description: Failed to modify user at auth service + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" security: - bearerAuth: [] - basicAuth: [] @@ -127,6 +127,12 @@ paths: type: string format: uuid responses: + "200": + description: Found user + content: + application/json: + schema: + $ref: "#/components/schemas/UserDto" "403": description: Find user is not permitted content: @@ -139,12 +145,6 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "200": - description: Found user - content: - application/json: - schema: - $ref: "#/components/schemas/UserDto" security: - bearerAuth: [] - basicAuth: [] @@ -171,10 +171,15 @@ paths: description: Expose `X-Count` custom header required: true style: simple + schema: + type: string X-Count: description: Number of databases required: true style: simple + schema: + type: integer + format: int64 content: application/json: schema: @@ -186,7 +191,7 @@ paths: - database-endpoint summary: Create database description: Creates a database in the container with id. Requires roles `create-database`. - operationId: create_4 + operationId: create requestBody: content: application/json: @@ -194,33 +199,33 @@ paths: $ref: "#/components/schemas/CreateDatabaseDto" required: true responses: - "404": - description: Failed to fin container/user/database in metadata database + "201": + description: Created a new database content: application/json: schema: - $ref: "#/components/schemas/ApiErrorDto" - "409": - description: Query store could not be created + $ref: "#/components/schemas/DatabaseBriefDto" + "400": + description: Database create query is malformed or image is not supported content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed + "403": + description: Database create permission is missing or grant permissions + at broker service failed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Database create permission is missing or grant permissions - at broker service failed + "404": + description: Failed to fin container/user/database in metadata database content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service + "409": + description: Query store could not be created content: application/json: schema: @@ -231,18 +236,18 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "400": - description: Database create query is malformed or image is not supported + "502": + description: Connection to search service failed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "201": - description: Created a new database + "503": + description: Failed to save in search service content: application/json: schema: - $ref: "#/components/schemas/DatabaseBriefDto" + $ref: "#/components/schemas/ApiErrorDto" security: - bearerAuth: [] - basicAuth: [] @@ -268,10 +273,15 @@ paths: description: Expose `X-Count` custom header required: true style: simple + schema: + type: string X-Count: description: Number of databases required: true style: simple + schema: + type: integer + format: int64 content: application/json: schema: @@ -303,6 +313,12 @@ paths: type: string format: uuid responses: + "200": + description: Found database access + content: + application/json: + schema: + $ref: "#/components/schemas/DatabaseAccessDto" "403": description: No access to this database content: @@ -315,12 +331,6 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "200": - description: Found database access - content: - application/json: - schema: - $ref: "#/components/schemas/DatabaseAccessDto" security: - bearerAuth: [] - basicAuth: [] @@ -330,7 +340,7 @@ paths: summary: Modify access description: Modifies access of a user with given id to database with given id. Requires role `update-database-access`. - operationId: update_5 + operationId: update parameters: - name: databaseId in: path @@ -351,13 +361,8 @@ paths: $ref: "#/components/schemas/CreateAccessDto" required: true responses: - "502": - description: Access could not be updated due to connection error in the - data service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" + "202": + description: Modified access "400": description: Modify access query or database connection is malformed content: @@ -371,16 +376,21 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "202": - description: Modified access - "503": - description: Access could not be updated in the data service + "404": + description: Database or user not found content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Database or user not found + "502": + description: Access could not be updated due to connection error in the + data service + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" + "503": + description: Access could not be updated in the data service content: application/json: schema: @@ -394,7 +404,7 @@ paths: summary: Give access description: Give a user with given id access to some database with given id. Requires role `create-database-access`. - operationId: create_7 + operationId: create_1 parameters: - name: databaseId in: path @@ -415,38 +425,38 @@ paths: $ref: "#/components/schemas/CreateAccessDto" required: true responses: - "403": - description: Failed giving access + "202": + description: Granting access succeeded content: application/json: schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Database or user not found + $ref: "#/components/schemas/DatabaseAccessDto" + "400": + description: Granting access query or database connection is malformed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Access could not be created in the data service + "403": + description: Failed giving access content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "202": - description: Granting access succeeded + "404": + description: Database or user not found content: application/json: schema: - $ref: "#/components/schemas/DatabaseAccessDto" - "400": - description: Granting access query or database connection is malformed + $ref: "#/components/schemas/ApiErrorDto" + "502": + description: Access could not be created due to connection error content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Access could not be created due to connection error + "503": + description: Access could not be created in the data service content: application/json: schema: @@ -475,28 +485,22 @@ paths: type: string format: uuid responses: - "404": - description: "User, database with access was not found" - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" + "202": + description: Deleted access "400": description: Modify access query or database connection is malformed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "202": - description: Deleted access - "503": - description: Access could not be revoked in the data service + "403": + description: Revoke of access not permitted as no access was found content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Revoke of access not permitted as no access was found + "404": + description: "User, database with access was not found" content: application/json: schema: @@ -507,6 +511,12 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" + "503": + description: Access could not be revoked in the data service + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" security: - bearerAuth: [] - basicAuth: [] @@ -534,6 +544,12 @@ paths: type: string format: uuid responses: + "200": + description: Found database access + content: + application/json: + schema: + $ref: "#/components/schemas/DatabaseAccessDto" "403": description: No access to this database content: @@ -546,12 +562,6 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "200": - description: Found database access - content: - application/json: - schema: - $ref: "#/components/schemas/DatabaseAccessDto" security: - bearerAuth: [] - basicAuth: [] @@ -570,24 +580,24 @@ paths: type: string format: uuid responses: - "404": - description: Could not find ontology - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "200": description: Find one ontology content: application/json: schema: $ref: "#/components/schemas/OntologyDto" + "404": + description: Could not find ontology + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" put: tags: - ontology-endpoint summary: Update ontology description: Updates an ontology with id. Requires role `update-ontology`. - operationId: update + operationId: update_1 parameters: - name: ontologyId in: path @@ -602,18 +612,18 @@ paths: $ref: "#/components/schemas/OntologyModifyDto" required: true responses: - "404": - description: Could not find ontology - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "202": description: Updated ontology successfully content: application/json: schema: $ref: "#/components/schemas/OntologyDto" + "404": + description: Could not find ontology + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" security: - bearerAuth: [] - basicAuth: [] @@ -631,16 +641,16 @@ paths: type: string format: uuid responses: + "202": + description: Deleted ontology successfully + content: + application/json: {} "404": description: Could not find ontology content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "202": - description: Deleted ontology successfully - content: - application/json: {} security: - bearerAuth: [] - basicAuth: [] @@ -650,7 +660,7 @@ paths: - message-endpoint summary: Update message description: Updates a message with id. Requires role `update-maintenance-message`. - operationId: update_1 + operationId: update_2 parameters: - name: messageId in: path @@ -665,18 +675,18 @@ paths: $ref: "#/components/schemas/BannerMessageUpdateDto" required: true responses: - "404": - description: Could not find message - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "202": description: Updated message content: application/json: schema: $ref: "#/components/schemas/BannerMessageBriefDto" + "404": + description: Could not find message + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" security: - bearerAuth: [] - basicAuth: [] @@ -740,7 +750,7 @@ paths: summary: Update image description: Updates container image in the metadata database. Requires role `modify-image`. - operationId: update_2 + operationId: update_3 parameters: - name: imageId in: path @@ -803,7 +813,7 @@ paths: summary: Find identifier description: Finds an identifier with id. The response format depends on the HTTP `Accept` header set on the request. - operationId: find_7 + operationId: find_5 parameters: - name: identifierId in: path @@ -831,20 +841,21 @@ paths: text/bibliography; style=apa: {} text/bibliography; style=ieee: {} text/bibliography; style=bibtex: {} - "410": - description: Failed to retrieve from S3 endpoint + "400": + description: "Identifier could not be exported, the requested style is not\ + \ known" content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to find in data service + "403": + description: Not allowed to view identifier content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not allowed to view identifier + "404": + description: Identifier could not be found content: application/json: schema: @@ -861,21 +872,20 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "400": - description: "Identifier could not be exported, the requested style is not\ - \ known" + "410": + description: Failed to retrieve from S3 endpoint content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Identifier could not be found + "502": + description: Connection to data service failed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to data service failed + "503": + description: Failed to find in data service content: application/json: schema: @@ -903,12 +913,6 @@ paths: $ref: "#/components/schemas/IdentifierSaveDto" required: true responses: - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "202": description: Saved identifier content: @@ -921,8 +925,8 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service + "403": + description: Insufficient access rights or authorities content: application/json: schema: @@ -933,8 +937,14 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Insufficient access rights or authorities + "502": + description: Connection to search service failed + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" + "503": + description: Failed to save in search service content: application/json: schema: @@ -956,22 +966,22 @@ paths: type: string format: uuid responses: - "404": - description: Identifier or database could not be found + "202": + description: Deleted identifier + "403": + description: Deleting identifier not permitted content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed + "404": + description: Identifier or database could not be found content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "202": - description: Deleted identifier - "403": - description: Deleting identifier not permitted + "502": + description: Connection to search service failed content: application/json: schema: @@ -1001,20 +1011,20 @@ paths: type: string format: uuid responses: - "502": - description: Connection to search service failed + "202": + description: Published identifier content: application/json: schema: - $ref: "#/components/schemas/ApiErrorDto" + $ref: "#/components/schemas/IdentifierDto" "400": description: Identifier form contains invalid request data content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service + "403": + description: Insufficient access rights or authorities content: application/json: schema: @@ -1025,14 +1035,14 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "202": - description: Published identifier + "502": + description: Connection to search service failed content: application/json: schema: - $ref: "#/components/schemas/IdentifierDto" - "403": - description: Insufficient access rights or authorities + $ref: "#/components/schemas/ApiErrorDto" + "503": + description: Failed to save in search service content: application/json: schema: @@ -1080,14 +1090,14 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed + "404": + description: Failed to find database in metadata database content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find database in metadata database + "502": + description: Connection to search service failed content: application/json: schema: @@ -1107,7 +1117,7 @@ paths: - view-endpoint summary: Get view description: Gets a view with id in the metadata database. - operationId: find_8 + operationId: find_6 parameters: - name: databaseId in: path @@ -1149,7 +1159,7 @@ paths: summary: Update view description: Updates a view with id. This can only be performed by the view owner or database owner. Requires role `create-database-view`. - operationId: update_3 + operationId: update_4 parameters: - name: databaseId in: path @@ -1170,32 +1180,32 @@ paths: $ref: "#/components/schemas/ViewUpdateDto" required: true responses: + "202": + description: Update view successfully + content: + '*/*': + schema: + $ref: "#/components/schemas/ViewBriefDto" "400": description: Update view query is malformed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Database or View could not be found + "403": + description: Update not allowed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed + "404": + description: Database or View could not be found content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "202": - description: Update view successfully - content: - '*/*': - schema: - $ref: "#/components/schemas/ViewBriefDto" - "403": - description: Update not allowed + "502": + description: Connection to search service failed content: application/json: schema: @@ -1229,12 +1239,6 @@ paths: type: string format: uuid responses: - "403": - description: Deletion not allowed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "202": description: Delete view successfully "400": @@ -1243,8 +1247,14 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed + "403": + description: Deletion not allowed + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" + "404": + description: "Database, view or user could not be found" content: application/json: schema: @@ -1255,14 +1265,14 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service + "502": + description: Connection to search service failed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "404": - description: "Database, view or user could not be found" + "503": + description: Failed to save in search service content: application/json: schema: @@ -1279,7 +1289,7 @@ paths: \ is `false`), then the user needs to have at least read access and the role\ \ `find-table`. When the `system` role is present, the endpoint responds with\ \ additional connection metadata in the header." - operationId: findById_2 + operationId: findById_1 parameters: - name: databaseId in: path @@ -1320,7 +1330,7 @@ paths: - table-endpoint summary: Update table description: Updates a table in the database with id. Requires role `update-table`. - operationId: update_4 + operationId: update_5 parameters: - name: databaseId in: path @@ -1341,18 +1351,24 @@ paths: $ref: "#/components/schemas/TableUpdateDto" required: true responses: + "202": + description: Updated the table + content: + application/json: + schema: + $ref: "#/components/schemas/TableBriefDto" "400": description: Update table visibility payload is malformed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "202": - description: Updated the table + "403": + description: Update table visibility not permitted content: application/json: schema: - $ref: "#/components/schemas/TableBriefDto" + $ref: "#/components/schemas/ApiErrorDto" "404": description: Table could not be found content: @@ -1365,12 +1381,6 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Update table visibility not permitted - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "503": description: Failed to save in search service content: @@ -1404,14 +1414,14 @@ paths: responses: "202": description: Delete table successfully - "403": - description: Access to the database is forbidden + "400": + description: Delete table query resulted in an invalid query statement content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed + "403": + description: Access to the database is forbidden content: application/json: schema: @@ -1422,14 +1432,14 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service + "502": + description: Connection to search service failed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "400": - description: Delete table query resulted in an invalid query statement + "503": + description: Failed to save in search service content: application/json: schema: @@ -1460,14 +1470,10 @@ paths: type: string format: uuid responses: - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service + "202": + description: Updated table statistics successfully + "400": + description: Failed to map column statistic to known columns content: application/json: schema: @@ -1484,10 +1490,14 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "202": - description: Updated table statistics successfully - "400": - description: Failed to map column statistic to known columns + "502": + description: Connection to search service failed + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" + "503": + description: Failed to save in search service content: application/json: schema: @@ -1544,14 +1554,14 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find user/table/database/ontology in metadata database + "403": + description: Access to the database is forbidden content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Access to the database is forbidden + "404": + description: Failed to find user/table/database/ontology in metadata database content: application/json: schema: @@ -1593,26 +1603,26 @@ paths: $ref: "#/components/schemas/DatabaseTransferDto" required: true responses: - "404": - description: Database or user could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "202": description: Transfer of ownership was successful content: application/json: schema: $ref: "#/components/schemas/DatabaseBriefDto" - "403": - description: Transfer of ownership is not permitted + "400": + description: Owner payload is malformed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "400": - description: Owner payload is malformed + "404": + description: Database or user could not be found + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" + "403": + description: Transfer of ownership is not permitted content: application/json: schema: @@ -1649,12 +1659,12 @@ paths: type: string format: uuid responses: - "502": - description: Connection to search service failed + "200": + description: Refreshed database views metadata content: application/json: schema: - $ref: "#/components/schemas/ApiErrorDto" + $ref: "#/components/schemas/DatabaseBriefDto" "403": description: Refresh view metadata is not permitted content: @@ -1667,18 +1677,18 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service + "502": + description: Connection to search service failed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "200": - description: Refreshed database views metadata + "503": + description: Failed to save in search service content: application/json: schema: - $ref: "#/components/schemas/DatabaseBriefDto" + $ref: "#/components/schemas/ApiErrorDto" security: - bearerAuth: [] - basicAuth: [] @@ -1699,14 +1709,14 @@ paths: type: string format: uuid responses: - "502": - description: Connection to search service failed + "200": + description: Refreshed database tables metadata content: application/json: schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find database in metadata database + $ref: "#/components/schemas/DatabaseBriefDto" + "400": + description: Failed to parse payload at search service content: application/json: schema: @@ -1717,24 +1727,24 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service + "404": + description: Failed to find database in metadata database content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "400": - description: Failed to parse payload at search service + "502": + description: Connection to search service failed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "200": - description: Refreshed database tables metadata + "503": + description: Failed to save in search service content: application/json: schema: - $ref: "#/components/schemas/DatabaseBriefDto" + $ref: "#/components/schemas/ApiErrorDto" security: - bearerAuth: [] - basicAuth: [] @@ -1753,21 +1763,19 @@ paths: type: string format: uuid responses: + "200": + description: View of image was successful + content: + '*/*': + schema: + type: string + format: byte "404": description: Database or user could not be found content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "200": - description: View of image was successful - content: - '*/*': - schema: - type: array - items: - type: string - format: byte security: - bearerAuth: [] - basicAuth: [] @@ -1792,12 +1800,24 @@ paths: $ref: "#/components/schemas/DatabaseModifyImageDto" required: true responses: + "202": + description: Modify of image was successful + content: + application/json: + schema: + $ref: "#/components/schemas/DatabaseBriefDto" "403": description: Modify of image is not permitted content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" + "404": + description: Database could not be found + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" "410": description: File was not found in the Storage Service content: @@ -1810,24 +1830,67 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" + "503": + description: Failed to save in search service + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" + security: + - bearerAuth: [] + - basicAuth: [] + /api/database/{databaseId}/dashboard: + put: + tags: + - database-endpoint + summary: Update database dashboard uid + description: Updates the dashboard uid for a database with given id. Only the + database owner can perform this operation. Requires role `system`. + operationId: modifyDashboard + parameters: + - name: databaseId + in: path + required: true + schema: + type: string + format: uuid + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/DatabaseModifyDashboardDto" + required: true + responses: + "202": + description: Modify of dashboard uid was successful + content: + application/json: + schema: + $ref: "#/components/schemas/DatabaseBriefDto" + "400": + description: Malformed payload + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" "404": description: Database could not be found content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service + "502": + description: Connection to search service failed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "202": - description: Modify of image was successful + "503": + description: Failed to save in search service content: application/json: schema: - $ref: "#/components/schemas/DatabaseBriefDto" + $ref: "#/components/schemas/ApiErrorDto" security: - bearerAuth: [] - basicAuth: [] @@ -1837,7 +1900,7 @@ paths: - ontology-endpoint summary: List ontologies description: Lists all ontologies known to the metadata database. - operationId: findAll_2 + operationId: findAll responses: "200": description: List ontologies @@ -1852,7 +1915,7 @@ paths: - ontology-endpoint summary: Create ontology description: Creates an ontology in the metadata database. Requires role `create-ontology`. - operationId: create + operationId: create_2 requestBody: content: application/json: @@ -1900,7 +1963,7 @@ paths: - message-endpoint summary: Create message description: Creates a message in the metadata database. Requires role `create-maintenance-message`. - operationId: create_1 + operationId: create_3 requestBody: content: application/json: @@ -1923,7 +1986,7 @@ paths: - image-endpoint summary: List images description: Lists all container images known to the metadata database. - operationId: findAll_3 + operationId: findAll_1 responses: "200": description: List images @@ -1939,7 +2002,7 @@ paths: summary: Create image description: Creates a container image in the metadata database. Requires role `create-image`. - operationId: create_2 + operationId: create_4 requestBody: content: application/json: @@ -1974,7 +2037,7 @@ paths: - identifier-endpoint summary: List identifiers description: Lists all identifiers known to the metadata database - operationId: findAll_4 + operationId: findAll_2 parameters: - name: type in: query @@ -2031,7 +2094,9 @@ paths: schema: type: array items: - type: string + type: array + items: + $ref: "#/components/schemas/IdentifierBriefDto" application/ld+json: schema: type: array @@ -2045,7 +2110,7 @@ paths: can only be created for objects the user has at least *READ* access in the associated database (requires role `create-identifier`) or for any object in any database (requires role `create-foreign-identifier`). - operationId: create_3 + operationId: create_5 requestBody: content: application/json: @@ -2059,20 +2124,14 @@ paths: application/json: schema: $ref: "#/components/schemas/IdentifierDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "400": description: Identifier form contains invalid request data content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service + "403": + description: Insufficient access rights or authorities content: application/json: schema: @@ -2083,8 +2142,14 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Insufficient access rights or authorities + "502": + description: Connection to search service failed + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" + "503": + description: Failed to save in search service content: application/json: schema: @@ -2098,7 +2163,7 @@ paths: - view-endpoint summary: List views description: Lists views known to the metadata database. - operationId: findAll_5 + operationId: findAll_3 parameters: - name: databaseId in: path @@ -2107,12 +2172,6 @@ paths: type: string format: uuid responses: - "404": - description: Database or user could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "200": description: Find views successfully content: @@ -2121,6 +2180,12 @@ paths: type: array items: $ref: "#/components/schemas/ViewBriefDto" + "404": + description: Database or user could not be found + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" security: - bearerAuth: [] - basicAuth: [] @@ -2130,7 +2195,7 @@ paths: summary: Create view description: Creates a view. This can only be performed by the database owner. Requires role `create-database-view`. - operationId: create_5 + operationId: create_6 parameters: - name: databaseId in: path @@ -2145,14 +2210,14 @@ paths: $ref: "#/components/schemas/CreateViewDto" required: true responses: - "404": - description: Failed to find database/user in metadata database. + "201": + description: Create view successfully content: application/json: schema: - $ref: "#/components/schemas/ApiErrorDto" - "409": - description: View exists with name + $ref: "#/components/schemas/ViewBriefDto" + "400": + description: Create view query is malformed content: application/json: schema: @@ -2163,26 +2228,26 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "201": - description: Create view successfully + "404": + description: Failed to find database/user in metadata database. content: application/json: schema: - $ref: "#/components/schemas/ViewBriefDto" - "423": - description: Create view resulted in an invalid query statement + $ref: "#/components/schemas/ApiErrorDto" + "409": + description: View exists with name content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed + "423": + description: Create view resulted in an invalid query statement content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "400": - description: Create view query is malformed + "502": + description: Connection to search service failed content: application/json: schema: @@ -2204,7 +2269,7 @@ paths: description: "Lists all tables known to the metadata database. When a database\ \ has a hidden schema (i.e. when `is_schema_public` is `false`), then the\ \ user needs to have at least read access and the role `list-tables`." - operationId: list_4 + operationId: list_3 parameters: - name: databaseId in: path @@ -2213,26 +2278,26 @@ paths: type: string format: uuid responses: - "404": - description: Database could not be found + "200": + description: List tables content: application/json: schema: - $ref: "#/components/schemas/ApiErrorDto" + type: array + items: + $ref: "#/components/schemas/TableBriefDto" "403": description: List tables not permitted content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "200": - description: List tables + "404": + description: Database could not be found content: application/json: schema: - type: array - items: - $ref: "#/components/schemas/TableBriefDto" + $ref: "#/components/schemas/ApiErrorDto" security: - bearerAuth: [] - basicAuth: [] @@ -2241,7 +2306,7 @@ paths: - table-endpoint summary: Create table description: Creates a table in the database with id. Requires role `create-table`. - operationId: create_6 + operationId: create_7 parameters: - name: databaseId in: path @@ -2256,18 +2321,18 @@ paths: $ref: "#/components/schemas/CreateTableDto" required: true responses: - "409": - description: Create table conflicts with existing table name - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "201": description: Created a new table content: application/json: schema: $ref: "#/components/schemas/TableBriefDto" + "400": + description: Create table query is malformed + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" "403": description: Create table not permitted content: @@ -2280,20 +2345,20 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed + "409": + description: Create table conflicts with existing table name content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service + "502": + description: Connection to search service failed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "400": - description: Create table query is malformed + "503": + description: Failed to save in search service content: application/json: schema: @@ -2307,7 +2372,7 @@ paths: - container-endpoint summary: List containers description: List all containers in the metadata database. - operationId: findAll_6 + operationId: findAll_4 parameters: - name: limit in: query @@ -2343,26 +2408,26 @@ paths: application/json: schema: $ref: "#/components/schemas/ContainerDto" - "404": - description: Container image or user could not be found + "400": + description: Container payload malformed content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "409": - description: Container name already exists + "403": + description: "Create container not permitted, need authority `create-container`" content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "400": - description: Container payload malformed + "404": + description: Container image or user could not be found content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "403": - description: "Create container not permitted, need authority `create-container`" + "409": + description: Container name already exists content: application/json: schema: @@ -2378,7 +2443,7 @@ paths: description: "Lists users known to the metadata database. Internal users are\ \ omitted from the result list. If the optional query parameter `username`\ \ is present, the result list can be filtered by matching this exact username." - operationId: findAll + operationId: findAll_5 parameters: - name: username in: query @@ -2400,7 +2465,7 @@ paths: - unit-endpoint summary: List units description: Lists units known to the metadata database. - operationId: findAll_1 + operationId: findAll_6 responses: "200": description: Find all semantic units @@ -2417,7 +2482,7 @@ paths: summary: Find entities description: Finds semantic entities by label or uri in an ontology with id. Requires role `execute-semantic-query`. - operationId: find_5 + operationId: find_7 parameters: - name: ontologyId in: path @@ -2436,8 +2501,16 @@ paths: schema: type: string responses: - "422": - description: Ontology does not have rdf or sparql endpoint + "200": + description: Found entities + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/EntityDto" + "400": + description: Filter params are invalid content: application/json: schema: @@ -2454,20 +2527,12 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "400": - description: Filter params are invalid + "422": + description: Ontology does not have rdf or sparql endpoint content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "200": - description: Found entities - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/EntityDto" security: - bearerAuth: [] - basicAuth: [] @@ -2476,7 +2541,7 @@ paths: tags: - metadata-endpoint summary: Get record - operationId: identify_1_1_1_1 + operationId: identify parameters: - name: verb in: query @@ -2489,14 +2554,16 @@ paths: "200": description: List containers content: - text/xml: {} + text/xml: + schema: + type: string /api/message/message/{messageId}: get: tags: - message-endpoint summary: Find message description: Finds a message with id in the metadata database. - operationId: find_6 + operationId: find_8 parameters: - name: messageId in: path @@ -2505,25 +2572,25 @@ paths: type: string format: uuid responses: - "404": - description: Could not find message - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "200": description: Get messages content: application/json: schema: $ref: "#/components/schemas/BannerMessageDto" - /api/license: + "404": + description: Could not find message + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" + /api/license: get: tags: - license-endpoint summary: List licenses description: Lists licenses known to the metadata database. - operationId: list_3 + operationId: list_4 responses: "200": description: List of licenses @@ -2566,7 +2633,7 @@ paths: - database-endpoint summary: Find database description: Finds a database with id. - operationId: findById_1 + operationId: findById_2 parameters: - name: databaseId in: path @@ -2581,24 +2648,30 @@ paths: X-Username: description: The authentication username style: simple + schema: + type: string Access-Control-Expose-Headers: description: Expose custom headers style: simple + schema: + type: string X-Password: description: The authentication password style: simple + schema: + type: string content: application/json: schema: $ref: "#/components/schemas/DatabaseBriefDto" - "404": - description: Database could not be found + "403": + description: Not allowed to view database content: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not allowed to view database + "404": + description: Database could not be found content: application/json: schema: @@ -2628,12 +2701,6 @@ paths: type: string format: uuid responses: - "422": - description: Ontology does not have rdf or sparql endpoint - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "200": description: Suggested table semantics successfully content: @@ -2648,8 +2715,8 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "417": - description: Generated query is malformed + "403": + description: Not the table owner. content: application/json: schema: @@ -2660,8 +2727,14 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not the table owner. + "417": + description: Generated query is malformed + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" + "422": + description: Ontology does not have rdf or sparql endpoint content: application/json: schema: @@ -2696,12 +2769,14 @@ paths: type: string format: uuid responses: - "422": - description: Ontology does not have rdf or sparql endpoint + "200": + description: Suggested table column semantics successfully content: application/json: schema: - $ref: "#/components/schemas/ApiErrorDto" + type: array + items: + $ref: "#/components/schemas/TableColumnEntityDto" "400": description: Generated query is malformed content: @@ -2714,14 +2789,12 @@ paths: application/json: schema: $ref: "#/components/schemas/ApiErrorDto" - "200": - description: Suggested table column semantics successfully + "422": + description: Ontology does not have rdf or sparql endpoint content: application/json: schema: - type: array - items: - $ref: "#/components/schemas/TableColumnEntityDto" + $ref: "#/components/schemas/ApiErrorDto" security: - bearerAuth: [] - basicAuth: [] @@ -2740,18 +2813,18 @@ paths: type: string format: uuid responses: - "404": - description: Container image could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" "200": description: Found container content: application/json: schema: $ref: "#/components/schemas/ContainerDto" + "404": + description: Container image could not be found + content: + application/json: + schema: + $ref: "#/components/schemas/ApiErrorDto" delete: tags: - container-endpoint @@ -2801,16 +2874,65 @@ paths: $ref: "#/components/schemas/ConceptDto" components: schemas: - ApiErrorDto: + UserAttributesDto: + type: object + properties: + theme: + type: string + example: light + orcid: + type: string + example: https://orcid.org/0000-0002-1825-0097 + affiliation: + type: string + example: Brown University + language: + type: string + example: en required: - - code - - message - - status + - language + - theme + UserDto: + type: object + properties: + id: + type: string + format: uuid + example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 + name: + type: string + example: Josiah Carberry + username: + type: string + example: username + password: + type: string + example: p4ssw0rd + attributes: + $ref: "#/components/schemas/UserAttributesDto" + last_retrieved: + type: string + format: date-time + example: 2025-01-23T12:09:01 + qualified_name: + type: string + example: Josiah Carberry — @jcarberry + given_name: + type: string + example: Josiah + family_name: + type: string + example: Carberry + required: + - attributes + - id + - password + - username + ApiErrorDto: type: object properties: status: type: string - example: NOT_FOUND enum: - 100 CONTINUE - 101 SWITCHING_PROTOCOLS @@ -2881,69 +3003,18 @@ components: - 509 BANDWIDTH_LIMIT_EXCEEDED - 510 NOT_EXTENDED - 511 NETWORK_AUTHENTICATION_REQUIRED + example: NOT_FOUND message: type: string example: Error message code: type: string example: error.service.code - UserAttributesDto: - required: - - language - - theme - type: object - properties: - theme: - type: string - example: light - orcid: - type: string - example: https://orcid.org/0000-0002-1825-0097 - affiliation: - type: string - example: Brown University - language: - type: string - example: en - UserDto: required: - - attributes - - id - - password - - username - type: object - properties: - id: - type: string - format: uuid - example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 - name: - type: string - example: Josiah Carberry - username: - type: string - example: username - password: - type: string - example: p4ssw0rd - attributes: - $ref: "#/components/schemas/UserAttributesDto" - last_retrieved: - type: string - format: date-time - qualified_name: - type: string - example: Josiah Carberry — @jcarberry - given_name: - type: string - example: Josiah - family_name: - type: string - example: Carberry + - code + - message + - status CreatorBriefDto: - required: - - creator_name - - id type: object properties: id: @@ -2958,41 +3029,35 @@ components: example: "Carberry, Josiah" name_type: type: string - example: Personal enum: - Personal - Organizational + example: Personal name_identifier: type: string example: 0000-0002-1825-0097 name_identifier_scheme: type: string - example: ORCID enum: - ORCID - ROR - ISNI - GRID + example: ORCID affiliation_identifier: type: string example: https://ror.org/05gq02987 affiliation_identifier_scheme: type: string - example: ROR enum: - ROR - GRID - ISNI - DatabaseBriefDto: + example: ROR required: - - contact + - creator_name - id - - identifiers - - internal_name - - is_public - - is_schema_public - - name - - owner_id + DatabaseBriefDto: type: object properties: id: @@ -3026,18 +3091,16 @@ components: example: 2f45ef7a-7f9b-4667-9156-152c87fe1ca5 preview_image: type: string - IdentifierBriefDto: required: - - creators - - database_id - - descriptions + - contact - id - - owned_by - - publication_year - - publisher - - status - - titles - - type + - identifiers + - internal_name + - is_public + - is_schema_public + - name + - owner_id + IdentifierBriefDto: type: object properties: id: @@ -3046,12 +3109,12 @@ components: example: b97cd56b-66ca-4354-9e6c-f47210cfaaec type: type: string - example: database enum: - database - subset - table - view + example: database creators: type: array items: @@ -3072,10 +3135,10 @@ components: example: TU Wien status: type: string - example: draft enum: - draft - published + example: draft database_id: type: string format: uuid @@ -3083,12 +3146,15 @@ components: query_id: type: string format: uuid + example: 1 table_id: type: string format: uuid + example: 1 view_id: type: string format: uuid + example: 1 publication_year: type: integer format: int32 @@ -3097,9 +3163,18 @@ components: type: string format: uuid example: 2f45ef7a-7f9b-4667-9156-152c87fe1ca5 - IdentifierDescriptionDto: required: + - creators + - database_id + - descriptions - id + - owned_by + - publication_year + - publisher + - status + - titles + - type + IdentifierDescriptionDto: type: object properties: id: @@ -3111,7 +3186,6 @@ components: example: "Air quality reports at Stephansplatz, Vienna" language: type: string - example: en enum: - ab - aa @@ -3297,9 +3371,9 @@ components: - yo - za - zu + example: en type: type: string - example: Abstract enum: - Abstract - Methods @@ -3307,9 +3381,10 @@ components: - TableOfContents - TechnicalInfo - Other - IdentifierTitleDto: + example: Abstract required: - id + IdentifierTitleDto: type: object properties: id: @@ -3321,7 +3396,6 @@ components: example: Airquality Demonstrator language: type: string - example: en enum: - ab - aa @@ -3507,6 +3581,7 @@ components: - yo - za - zu + example: en type: type: string enum: @@ -3514,10 +3589,9 @@ components: - Subtitle - TranslatedTitle - Other - UserBriefDto: required: - id - - username + UserBriefDto: type: object properties: id: @@ -3543,25 +3617,25 @@ components: family_name: type: string example: Carberry - DatabaseAccessDto: required: - - type - - user + - id + - username + DatabaseAccessDto: type: object properties: user: $ref: "#/components/schemas/UserBriefDto" type: type: string - example: read enum: - read - write_own - write_all - UserUpdateDto: + example: read required: - - language - - theme + - type + - user + UserUpdateDto: type: object properties: firstname: @@ -3582,10 +3656,10 @@ components: language: type: string example: en - OntologyModifyDto: required: - - prefix - - uri + - language + - theme + OntologyModifyDto: type: object properties: uri: @@ -3600,13 +3674,10 @@ components: rdf_path: type: string example: rdf/om-2.0.rdf - OntologyDto: required: - - id - prefix - - rdf - - sparql - uri + OntologyDto: type: object properties: id: @@ -3634,10 +3705,13 @@ components: rdf_path: type: string example: rdf/om-2.0.rdf - BannerMessageUpdateDto: required: - - message - - type + - id + - prefix + - rdf + - sparql + - uri + BannerMessageUpdateDto: type: object properties: type: @@ -3663,10 +3737,10 @@ components: type: string format: date-time example: 2021-03-12T15:26:21Z - BannerMessageBriefDto: required: - message - type + BannerMessageBriefDto: type: object properties: type: @@ -3684,23 +3758,21 @@ components: link_text: type: string example: More - ImageChangeDto: required: - - dialect - - driver_class - - jdbc_method - - registry + - message + - type + ImageChangeDto: type: object properties: registry: type: string example: docker.io/library defaultPort: - maximum: 65535 - minimum: 1024 type: integer format: int32 example: 5432 + maximum: 65535 + minimum: 1024 dialect: type: string example: Postgres @@ -3710,14 +3782,12 @@ components: jdbc_method: type: string example: postgresql - DataTypeDto: required: - - display_name - - documentation - - id - - is_buildable - - is_quoted - - value + - dialect + - driver_class + - jdbc_method + - registry + DataTypeDto: type: object properties: id: @@ -3773,14 +3843,14 @@ components: type: boolean description: frontend can build this data type example: true - ImageDto: required: - - data_types - - default + - display_name + - documentation - id - - name - - operators - - version + - is_buildable + - is_quoted + - value + ImageDto: type: object properties: id: @@ -3792,7 +3862,7 @@ components: example: mariadb version: type: string - example: "10.5" + example: 10.5 operators: type: array items: @@ -3804,12 +3874,14 @@ components: type: array items: $ref: "#/components/schemas/DataTypeDto" - OperatorDto: required: - - display_name - - documentation + - data_types + - default - id - - value + - name + - operators + - version + OperatorDto: type: object properties: id: @@ -3825,15 +3897,12 @@ components: display_name: type: string example: XOR - IdentifierSaveDto: required: - - creators - - database_id + - display_name + - documentation - id - - publication_year - - publisher - - titles - - type + - value + IdentifierSaveDto: type: object properties: id: @@ -3842,12 +3911,12 @@ components: example: 68e11675-1e0f-4d24-a6d9-887ad1c4445d type: type: string - example: database enum: - database - subset - table - view + example: database doi: type: string example: 10.1111/11111111 @@ -4064,15 +4133,19 @@ components: database_id: type: string format: uuid + example: null query_id: type: string format: uuid + example: null view_id: type: string format: uuid + example: null table_id: type: string format: uuid + example: null publication_day: type: integer format: int32 @@ -4089,10 +4162,15 @@ components: type: array items: $ref: "#/components/schemas/SaveRelatedIdentifierDto" - LicenseDto: required: - - identifier - - uri + - creators + - database_id + - id + - publication_year + - publisher + - titles + - type + LicenseDto: type: object properties: identifier: @@ -4107,10 +4185,10 @@ components: \ preservation of copyright and license notices. Licensed works, modifications,\ \ and larger works may be distributed under different terms and without\ \ source code." - SaveIdentifierCreatorDto: required: - - creator_name - - id + - identifier + - uri + SaveIdentifierCreatorDto: type: object properties: id: @@ -4131,35 +4209,35 @@ components: example: "Carberry, Josiah" name_type: type: string - example: Personal enum: - Personal - Organizational + example: Personal name_identifier: type: string example: 0000-0002-1825-0097 name_identifier_scheme: type: string - example: ORCID enum: - ORCID - ROR - ISNI - GRID + example: ORCID affiliation_identifier: type: string example: https://ror.org/04d836q62 affiliation_identifier_scheme: type: string - example: ROR enum: - ROR - GRID - ISNI - SaveIdentifierDescriptionDto: + example: ROR required: - - description + - creator_name - id + SaveIdentifierDescriptionDto: type: object properties: id: @@ -4171,7 +4249,6 @@ components: example: "Air quality reports at Stephansplatz, Vienna" language: type: string - example: en enum: - ab - aa @@ -4357,9 +4434,9 @@ components: - yo - za - zu + example: en type: type: string - example: Abstract enum: - Abstract - Methods @@ -4367,10 +4444,11 @@ components: - TableOfContents - TechnicalInfo - Other - SaveIdentifierFunderDto: + example: Abstract required: - - funder_name + - description - id + SaveIdentifierFunderDto: type: object properties: id: @@ -4385,26 +4463,26 @@ components: example: http://doi.org/10.13039/501100000780 funder_identifier_type: type: string - example: Crossref Funder ID enum: - Crossref Funder ID - ROR - GND - ISNI - Other + example: Crossref Funder ID scheme_uri: type: string example: http://doi.org/ award_number: type: string - example: "824087" + example: 824087 award_title: type: string example: EOSC-Life - SaveIdentifierTitleDto: required: + - funder_name - id - - title + SaveIdentifierTitleDto: type: object properties: id: @@ -4416,7 +4494,6 @@ components: example: Airquality Demonstrator language: type: string - example: en enum: - ab - aa @@ -4602,20 +4679,19 @@ components: - yo - za - zu + example: en type: type: string - example: Subtitle enum: - AlternativeTitle - Subtitle - TranslatedTitle - Other - SaveRelatedIdentifierDto: + example: Subtitle required: - id - - relation - - type - - value + - title + SaveRelatedIdentifierDto: type: object properties: id: @@ -4627,7 +4703,6 @@ components: example: 10.70124/dc4zh-9ce78 type: type: string - example: DOI enum: - DOI - URL @@ -4647,9 +4722,9 @@ components: - PURL - UPC - w3id + example: DOI relation: type: string - example: Cites enum: - IsCitedBy - Cites @@ -4685,10 +4760,13 @@ components: - Requires - IsObsoletedBy - Obsoletes - CreatorDto: + example: Cites required: - - creator_name - id + - relation + - type + - value + CreatorDto: type: object properties: id: @@ -4709,21 +4787,21 @@ components: example: "Carberry, Josiah" name_type: type: string - example: Personal enum: - Personal - Organizational + example: Personal name_identifier: type: string example: 0000-0002-1825-0097 name_identifier_scheme: type: string - example: ORCID enum: - ORCID - ROR - ISNI - GRID + example: ORCID name_identifier_scheme_uri: type: string example: https://orcid.org/ @@ -4732,33 +4810,18 @@ components: example: https://ror.org/05gq02987 affiliation_identifier_scheme: type: string - example: ROR enum: - ROR - GRID - ISNI + example: ROR affiliation_identifier_scheme_uri: type: string example: https://ror.org/ - IdentifierDto: required: - - creators - - database_id - - descriptions - - funders + - creator_name - id - - language - - licenses - - links - - owner - - publication_year - - publisher - - query - - query_hash - - query_normalized - - status - - titles - - type + IdentifierDto: type: object properties: id: @@ -4769,12 +4832,12 @@ components: $ref: "#/components/schemas/LinksDto" type: type: string - example: database enum: - database - subset - table - view + example: database titles: type: array items: @@ -5000,22 +5063,26 @@ components: $ref: "#/components/schemas/CreatorDto" status: type: string - example: draft enum: - draft - published + example: draft database_id: type: string format: uuid + example: null query_id: type: string format: uuid + example: null table_id: type: string format: uuid + example: null view_id: type: string format: uuid + example: null query_normalized: type: string example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ @@ -5046,10 +5113,25 @@ components: type: integer format: int32 example: 2022 - IdentifierFunderDto: required: - - funder_name + - creators + - database_id + - descriptions + - funders - id + - language + - licenses + - links + - owner + - publication_year + - publisher + - query + - query_hash + - query_normalized + - status + - titles + - type + IdentifierFunderDto: type: object properties: id: @@ -5064,26 +5146,26 @@ components: example: http://doi.org/10.13039/501100000780 funder_identifier_type: type: string - example: Crossref Funder ID enum: - Crossref Funder ID - ROR - GND - ISNI - Other + example: Crossref Funder ID scheme_uri: type: string example: http://doi.org/ award_number: type: string - example: "824087" + example: 824087 award_title: type: string example: EOSC-Life - LinksDto: required: - - self - - self_html + - funder_name + - id + LinksDto: type: object properties: self: @@ -5095,12 +5177,13 @@ components: self_html: type: string example: http://example.com - RelatedIdentifierDto: + dashboard_html: + type: string + example: http://example.com/d/defi2baxqawaod required: - - id - - relation - - type - - value + - self + - self_html + RelatedIdentifierDto: type: object properties: id: @@ -5112,7 +5195,6 @@ components: example: 10.70124/dc4zh-9ce78 type: type: string - example: DOI enum: - DOI - URL @@ -5132,9 +5214,9 @@ components: - PURL - UPC - w3id + example: DOI relation: type: string - example: Cites enum: - IsCitedBy - Cites @@ -5170,10 +5252,13 @@ components: - Requires - IsObsoletedBy - Obsoletes - DatabaseModifyVisibilityDto: + example: Cites required: - - is_public - - is_schema_public + - id + - relation + - type + - value + DatabaseModifyVisibilityDto: type: object properties: is_public: @@ -5182,10 +5267,14 @@ components: is_schema_public: type: boolean example: true - ViewUpdateDto: + is_dashboard_enabled: + type: boolean + example: true required: + - is_dashboard_enabled - is_public - is_schema_public + ViewUpdateDto: type: object properties: is_public: @@ -5194,14 +5283,10 @@ components: is_schema_public: type: boolean example: true - ViewBriefDto: required: - - database_id - - id - - internal_name - - name - - query - - query_hash + - is_public + - is_schema_public + ViewBriefDto: type: object properties: id: @@ -5238,33 +5323,31 @@ components: type: string format: uuid example: ac750fcf-ea02-4fce-85ac-d73857e18b35 - TableUpdateDto: required: - - is_public - - is_schema_public + - database_id + - id + - internal_name + - name + - query + - query_hash + TableUpdateDto: type: object properties: description: - maxLength: 180 - minLength: 0 type: string example: Air Quality in Austria + maxLength: 180 + minLength: 0 is_public: type: boolean example: true is_schema_public: type: boolean example: true - TableBriefDto: required: - - database_id - - id - - internal_name - is_public - is_schema_public - - is_versioned - - name - - owned_by + TableBriefDto: type: object properties: id: @@ -5297,6 +5380,15 @@ components: type: string format: uuid example: 78337b80-5699-45db-8111-cec86439ab6b + required: + - database_id + - id + - internal_name + - is_public + - is_schema_public + - is_versioned + - name + - owned_by ColumnSemanticsUpdateDto: type: object properties: @@ -5305,15 +5397,6 @@ components: unit_uri: type: string ColumnDto: - required: - - database_id - - id - - internal_name - - is_null_allowed - - name - - ord - - table_id - - type type: object properties: id: @@ -5321,10 +5404,10 @@ components: format: uuid example: a453e444-e00d-41ca-902c-11e9c54b39f1 name: - maxLength: 64 - minLength: 0 type: string example: Given Name + maxLength: 64 + minLength: 0 alias: type: string example: firstname @@ -5347,16 +5430,18 @@ components: unit: $ref: "#/components/schemas/UnitBriefDto" description: - maxLength: 2048 - minLength: 0 type: string example: Column comment + maxLength: 2048 + minLength: 0 enums: type: array + description: "enum values, only considered when type = ENUM" items: $ref: "#/components/schemas/EnumDto" sets: type: array + description: "enum values, only considered when type = ENUM" items: $ref: "#/components/schemas/SetDto" database_id: @@ -5372,10 +5457,10 @@ components: format: int32 example: 0 internal_name: - maxLength: 64 - minLength: 0 type: string example: given_name + maxLength: 64 + minLength: 0 index_length: type: integer format: int64 @@ -5386,7 +5471,6 @@ components: example: 255 type: type: string - example: varchar enum: - char - varchar @@ -5418,6 +5502,7 @@ components: - timestamp - time - year + example: varchar data_length: type: integer format: int64 @@ -5442,10 +5527,16 @@ components: is_null_allowed: type: boolean example: false - ConceptBriefDto: required: + - database_id - id - - uri + - internal_name + - is_null_allowed + - name + - ord + - table_id + - type + ConceptBriefDto: type: object properties: id: @@ -5462,10 +5553,10 @@ components: type: string example: "name typically used to differentiate people from the same family,\ \ clan, or other social group who have a common last name" - EnumDto: required: - id - - value + - uri + EnumDto: type: object properties: id: @@ -5474,11 +5565,11 @@ components: example: 5343bb3d-14d3-4eb7-a86f-b8fc553cb315 value: type: string - example: "3" - SetDto: + example: 3 required: - id - value + SetDto: type: object properties: id: @@ -5487,11 +5578,11 @@ components: example: 7eb4eded-bacc-4a91-84db-a9ae6ddafda7 value: type: string - example: "3" - UnitBriefDto: + example: 3 required: - id - - uri + - value + UnitBriefDto: type: object properties: id: @@ -5507,35 +5598,42 @@ components: description: type: string example: "subjective magnitude of value, meaning, or purpose" - DatabaseTransferDto: required: - id + - uri + DatabaseTransferDto: type: object properties: id: type: string format: uuid + required: + - id DatabaseModifyImageDto: type: object properties: key: type: string - CreateAccessDto: + DatabaseModifyDashboardDto: + type: object + properties: + uid: + type: string required: - - type + - uid + CreateAccessDto: type: object properties: type: type: string - example: read enum: - read - write_own - write_all - OntologyCreateDto: + example: read required: - - prefix - - uri + - type + OntologyCreateDto: type: object properties: uri: @@ -5547,10 +5645,10 @@ components: sparql_endpoint: type: string example: Ontology SPARQL endpoint - BannerMessageCreateDto: required: - - message - - type + - prefix + - uri + BannerMessageCreateDto: type: object properties: type: @@ -5576,16 +5674,10 @@ components: type: string format: date-time example: 2021-03-12T15:26:21Z - ImageCreateDto: required: - - default_port - - dialect - - driver_class - - is_default - - jdbc_method - - name - - registry - - version + - message + - type + ImageCreateDto: type: object properties: registry: @@ -5606,28 +5698,30 @@ components: jdbc_method: type: string default_port: - maximum: 65535 - minimum: 1024 type: integer format: int32 - CreateIdentifierDto: + maximum: 65535 + minimum: 1024 required: - - creators - - database_id - - publication_year - - publisher - - titles - - type + - default_port + - dialect + - driver_class + - is_default + - jdbc_method + - name + - registry + - version + CreateIdentifierDto: type: object properties: type: type: string - example: database enum: - database - subset - table - view + example: database doi: type: string example: 10.1111/11111111 @@ -5848,12 +5942,15 @@ components: query_id: type: string format: uuid + example: null view_id: type: string format: uuid + example: null table_id: type: string format: uuid + example: null publication_day: type: integer format: int32 @@ -5870,12 +5967,14 @@ components: type: array items: $ref: "#/components/schemas/SaveRelatedIdentifierDto" - CreateDatabaseDto: required: - - container_id - - is_public - - is_schema_public - - name + - creators + - database_id + - publication_year + - publisher + - titles + - type + CreateDatabaseDto: type: object properties: name: @@ -5891,19 +5990,19 @@ components: is_schema_public: type: boolean example: true - CreateViewDto: required: + - container_id - is_public - is_schema_public - name - - query + CreateViewDto: type: object properties: name: - maxLength: 63 - minLength: 1 type: string example: Air Quality + maxLength: 63 + minLength: 1 query: $ref: "#/components/schemas/SubsetDto" is_public: @@ -5912,24 +6011,24 @@ components: is_schema_public: type: boolean example: true - FilterDto: required: - - column_id - - operator_id - - type - - value + - is_public + - is_schema_public + - name + - query + FilterDto: type: object properties: type: type: string - example: where enum: - where - or - and + example: where value: type: string - example: "1" + example: 1 column_id: type: string format: uuid @@ -5938,25 +6037,27 @@ components: type: string format: uuid example: 67c5b54d-2eb0-4f42-8dc1-a504562e9f32 - OrderDto: required: - column_id + - operator_id + - type + - value + OrderDto: type: object properties: direction: type: string - example: asc enum: - asc - desc + example: asc column_id: type: string format: uuid example: e891ba86-0258-41a6-a8d9-ff58bc10b618 - SubsetDto: required: - - columns - - table_id + - column_id + SubsetDto: type: object properties: columns: @@ -5974,15 +6075,20 @@ components: type: array items: $ref: "#/components/schemas/OrderDto" - table_id: + datasource_id: type: string format: uuid example: f7df2a7d-4ade-4c78-97b0-7c744d0893c7 - CreateForeignKeyDto: + datasource_type: + type: string + enum: + - table + - view required: - columns - - referenced_columns - - referenced_table + - datasource_id + - datasource_type + CreateForeignKeyDto: type: object properties: columns: @@ -5991,7 +6097,6 @@ components: - id items: type: string - example: "[\"id\"]" referenced_table: type: string example: sensor @@ -6001,30 +6106,29 @@ components: - other_id items: type: string - example: "[\"other_id\"]" on_update: type: string - example: cascade enum: - restrict - cascade - set_null - no_action - set_default + example: cascade on_delete: type: string - example: cascade enum: - restrict - cascade - set_null - no_action - set_default - CreateTableColumnDto: + example: cascade required: - - name - - null_allowed - - type + - columns + - referenced_columns + - referenced_table + CreateTableColumnDto: type: object properties: name: @@ -6032,7 +6136,6 @@ components: example: Date type: type: string - example: varchar enum: - char - varchar @@ -6064,6 +6167,7 @@ components: - timestamp - time - year + example: varchar size: type: integer format: int64 @@ -6073,22 +6177,20 @@ components: format: int64 example: 0 description: - maxLength: 2048 - minLength: 0 type: string example: Formatted as YYYY-MM-dd + maxLength: 2048 + minLength: 0 enums: type: array description: "enum values, only considered when type = ENUM" items: type: string - description: "enum values, only considered when type = ENUM" sets: type: array description: "set values, only considered when type = SET" items: type: string - description: "set values, only considered when type = SET" index_length: type: integer format: int64 @@ -6099,12 +6201,11 @@ components: type: string unit_uri: type: string - CreateTableConstraintsDto: required: - - checks - - foreign_keys - - primary_key - - uniques + - name + - null_allowed + - type + CreateTableConstraintsDto: type: object properties: uniques: @@ -6114,38 +6215,37 @@ components: items: type: string checks: - uniqueItems: true type: array items: type: string + uniqueItems: true foreign_keys: type: array items: $ref: "#/components/schemas/CreateForeignKeyDto" primary_key: - uniqueItems: true type: array items: type: string - CreateTableDto: + uniqueItems: true required: - - columns - - constraints - - is_public - - is_schema_public - - name + - checks + - foreign_keys + - primary_key + - uniques + CreateTableDto: type: object properties: name: - maxLength: 64 - minLength: 1 type: string example: Air Quality + maxLength: 64 + minLength: 1 description: - maxLength: 180 - minLength: 0 type: string example: Air Quality in Austria + maxLength: 180 + minLength: 0 columns: type: array items: @@ -6158,14 +6258,13 @@ components: is_schema_public: type: boolean example: true - CreateContainerDto: required: - - host - - image_id + - columns + - constraints + - is_public + - is_schema_public - name - - privileged_password - - privileged_username - - quota + CreateContainerDto: type: object properties: name: @@ -6177,8 +6276,8 @@ components: example: data-db2 port: type: integer - description: Port of container format: int32 + description: Port of container example: 3306 quota: type: integer @@ -6186,8 +6285,8 @@ components: example: 50 image_id: type: string - description: Image ID format: uuid + description: Image ID example: 2360f3c4-85e0-4fac-a7c6-73b296b9dde2 ui_host: type: string @@ -6204,13 +6303,14 @@ components: type: string description: Password of privileged user example: dbrepo - ContainerDto: required: - - count - - id - - image - - internal_name + - host + - image_id - name + - privileged_password + - privileged_username + - quota + ContainerDto: type: object properties: id: @@ -6239,17 +6339,17 @@ components: last_retrieved: type: string format: date-time + example: 2025-01-23T12:09:01 internal_name: type: string example: air_quality - ColumnBriefDto: required: - - database_id + - count - id + - image - internal_name - name - - table_id - - type + ColumnBriefDto: type: object properties: id: @@ -6257,10 +6357,10 @@ components: format: uuid example: a453e444-e00d-41ca-902c-11e9c54b39f1 name: - maxLength: 64 - minLength: 0 type: string example: Given Name + maxLength: 64 + minLength: 0 alias: type: string example: firstname @@ -6273,13 +6373,12 @@ components: format: uuid example: bfffa915-a547-4466-9c65-ddc0d38fdb08 internal_name: - maxLength: 64 - minLength: 0 type: string example: given_name + maxLength: 64 + minLength: 0 type: type: string - example: varchar enum: - char - varchar @@ -6311,11 +6410,15 @@ components: - timestamp - time - year - UnitDto: + example: varchar required: - - columns + - database_id - id - - uri + - internal_name + - name + - table_id + - type + UnitDto: type: object properties: id: @@ -6332,13 +6435,11 @@ components: type: array items: $ref: "#/components/schemas/ColumnBriefDto" - OntologyBriefDto: required: + - columns - id - - prefix - - rdf - - sparql - uri + OntologyBriefDto: type: object properties: id: @@ -6360,10 +6461,13 @@ components: uri_pattern: type: string example: http://www.wikidata.org/entity/.* - EntityDto: required: - - label + - id + - prefix + - rdf + - sparql - uri + EntityDto: type: object properties: uri: @@ -6375,6 +6479,9 @@ components: description: type: string example: open source semantic web framework for Java + required: + - label + - uri OaiListIdentifiersParameters: type: object properties: @@ -6388,19 +6495,15 @@ components: type: string resumptionToken: type: string + parametersString: + type: string fromDate: type: string format: date-time untilDate: type: string format: date-time - parametersString: - type: string BannerMessageDto: - required: - - id - - message - - type type: object properties: id: @@ -6409,11 +6512,11 @@ components: example: ae3f795b-a3da-4ebe-bdc4-21a8ce631e6f type: type: string - example: WARNING enum: - error - warning - info + example: WARNING message: type: string example: Maintenance starts on 8am on Monday @@ -6431,12 +6534,11 @@ components: type: string format: date-time example: 2021-03-12T15:26:21Z - ImageBriefDto: required: - - default - id - - name - - version + - message + - type + ImageBriefDto: type: object properties: id: @@ -6448,14 +6550,16 @@ components: example: mariadb version: type: string - example: "10.5" + example: 10.5 default: type: boolean example: false - LdCreatorDto: required: - - '@type' + - default + - id - name + - version + LdCreatorDto: type: object properties: name: @@ -6468,19 +6572,10 @@ components: type: string '@type': type: string - LdDatasetDto: required: - - '@context' - '@type' - - citation - - creator - - description - - hasPart - - identifier - name - - temporalCoverage - - url - - version + LdDatasetDto: type: object properties: name: @@ -6514,15 +6609,19 @@ components: type: string '@type': type: string - ViewColumnDto: required: - - database_id - - id - - internal_name - - is_null_allowed + - '@context' + - '@type' + - citation + - creator + - description + - hasPart + - identifier - name - - ord - - type + - temporalCoverage + - url + - version + ViewColumnDto: type: object properties: id: @@ -6530,10 +6629,10 @@ components: format: uuid example: 6aec3a91-2e0b-4e92-a16a-9c3c5e892da1 name: - maxLength: 64 - minLength: 0 type: string example: Given Name + maxLength: 64 + minLength: 0 size: type: integer format: int64 @@ -6543,10 +6642,20 @@ components: format: int64 example: 0 description: - maxLength: 2048 - minLength: 0 type: string example: Column comment + maxLength: 2048 + minLength: 0 + enums: + type: array + description: "enum values, only considered when type = ENUM" + items: + $ref: "#/components/schemas/EnumDto" + sets: + type: array + description: "enum values, only considered when type = ENUM" + items: + $ref: "#/components/schemas/SetDto" database_id: type: string format: uuid @@ -6556,10 +6665,10 @@ components: format: int32 example: 0 internal_name: - maxLength: 64 - minLength: 0 type: string example: given_name + maxLength: 64 + minLength: 0 index_length: type: integer format: int64 @@ -6570,7 +6679,6 @@ components: example: 255 type: type: string - example: varchar enum: - char - varchar @@ -6602,20 +6710,19 @@ components: - timestamp - time - year + example: varchar is_null_allowed: type: boolean example: false - ViewDto: required: - - columns - database_id - id - - identifiers - internal_name + - is_null_allowed - name - - owner - - query - - query_hash + - ord + - type + ViewDto: type: object properties: id: @@ -6638,9 +6745,14 @@ components: type: array items: $ref: "#/components/schemas/ViewColumnDto" + created: + type: string + format: date-time + example: 2022-01-01 08:00:00.000 last_retrieved: type: string format: date-time + example: 2025-01-23T12:09:01 database_id: type: string format: uuid @@ -6661,6 +6773,17 @@ components: query_hash: type: string example: 7de03e818900b6ea6d58ad0306d4a741d658c6df3d1964e89ed2395d8c7e7916 + required: + - columns + - created + - database_id + - id + - identifiers + - internal_name + - name + - owner + - query + - query_hash ConstraintsDto: type: object properties: @@ -6669,22 +6792,21 @@ components: items: $ref: "#/components/schemas/UniqueDto" checks: - uniqueItems: true type: array example: - value > 1 items: type: string - example: "[\"value > 1\"]" + uniqueItems: true foreign_keys: type: array items: $ref: "#/components/schemas/ForeignKeyDto" primary_key: - uniqueItems: true type: array items: $ref: "#/components/schemas/PrimaryKeyDto" + uniqueItems: true ForeignKeyBriefDto: type: object properties: @@ -6693,11 +6815,6 @@ components: format: uuid example: f2b740ec-0b13-4d07-88a9-529d354bba6a ForeignKeyDto: - required: - - name - - referenced_table - - references - - table type: object properties: id: @@ -6717,27 +6834,28 @@ components: $ref: "#/components/schemas/TableBriefDto" on_update: type: string - example: restrict enum: - restrict - cascade - set_null - no_action - set_default + example: restrict on_delete: type: string - example: restrict enum: - restrict - cascade - set_null - no_action - set_default - ForeignKeyReferenceDto: + example: restrict required: - - column - - foreign_key - - referenced_column + - name + - referenced_table + - references + - table + ForeignKeyReferenceDto: type: object properties: id: @@ -6750,10 +6868,11 @@ components: $ref: "#/components/schemas/ForeignKeyBriefDto" referenced_column: $ref: "#/components/schemas/ColumnBriefDto" - PrimaryKeyDto: required: - column - - table + - foreign_key + - referenced_column + PrimaryKeyDto: type: object properties: id: @@ -6764,20 +6883,10 @@ components: $ref: "#/components/schemas/TableBriefDto" column: $ref: "#/components/schemas/ColumnBriefDto" - TableDto: required: - - columns - - constraints - - database_id - - id - - internal_name - - is_public - - is_schema_public - - is_versioned - - name - - owner - - queue_name - - routing_key + - column + - table + TableDto: type: object properties: id: @@ -6797,19 +6906,24 @@ components: owner: $ref: "#/components/schemas/UserBriefDto" description: - maxLength: 2048 - minLength: 0 type: string example: Air Quality in Austria + maxLength: 2048 + minLength: 0 columns: type: array items: $ref: "#/components/schemas/ColumnDto" constraints: $ref: "#/components/schemas/ConstraintsDto" + created: + type: string + format: date-time + example: 2022-01-01 08:00:00.000 last_retrieved: type: string format: date-time + example: 2025-01-23T12:09:01 database_id: type: string format: uuid @@ -6841,25 +6955,34 @@ components: example: 5 data_length: type: integer - description: in bytes format: int64 + description: in bytes example: 16384 max_data_length: type: integer - description: in bytes format: int64 + description: in bytes example: 0 avg_row_length: type: integer - description: in bytes format: int64 + description: in bytes example: 3276 - UniqueDto: required: - columns + - constraints + - created + - database_id - id + - internal_name + - is_public + - is_schema_public + - is_versioned - name - - table + - owner + - queue_name + - routing_key + UniqueDto: type: object properties: id: @@ -6875,12 +6998,12 @@ components: type: array items: $ref: "#/components/schemas/ColumnBriefDto" - TableColumnEntityDto: required: - - column_id - - database_id - - table_id - - uri + - columns + - id + - name + - table + TableColumnEntityDto: type: object properties: uri: @@ -6904,15 +7027,12 @@ components: type: string format: uuid example: 297860e3-3b29-451c-ae8a-a85ed5941018 - ContainerBriefDto: required: - - count - - hash - - id - - image - - internal_name - - name - - quota + - column_id + - database_id + - table_id + - uri + ContainerBriefDto: type: object properties: id: @@ -6938,11 +7058,15 @@ components: internal_name: type: string example: air-quality - ConceptDto: required: - - columns + - count + - hash - id - - uri + - image + - internal_name + - name + - quota + ConceptDto: type: object properties: id: @@ -6959,6 +7083,10 @@ components: type: array items: $ref: "#/components/schemas/ColumnBriefDto" + required: + - columns + - id + - uri securitySchemes: basicAuth: type: http diff --git a/.docs/.openapi/api-search.yaml b/.docs/.openapi/api-search.yaml index c47cbfb649..1a49f21387 100644 --- a/.docs/.openapi/api-search.yaml +++ b/.docs/.openapi/api-search.yaml @@ -1,6 +1,23 @@ { "components": { "schemas": { + "ApiError": { + "properties": { + "code": { + "example": "error.dashboard.create", + "type": "string" + }, + "message": { + "example": "Message", + "type": "string" + }, + "status": { + "example": "BAD_REQUEST", + "type": "string" + } + }, + "type": "object" + }, "IndexDto": { "properties": { "results": { @@ -98,7 +115,7 @@ }, "externalDocs": { "description": "Sourcecode Documentation", - "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.5/" + "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.7/" }, "info": { "contact": { @@ -111,7 +128,7 @@ "url": "https://www.apache.org/licenses/LICENSE-2.0" }, "title": "Database Repository Search Service API", - "version": "1.5" + "version": "1.8.0" }, "openapi": "3.0.0", "paths": { diff --git a/.docs/.openapi/api.base.yaml b/.docs/.openapi/api.base.yaml index 479c27da3a..0000a844fa 100644 --- a/.docs/.openapi/api.base.yaml +++ b/.docs/.openapi/api.base.yaml @@ -11,7 +11,7 @@ components: type: http externalDocs: description: Project Website - url: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.7/ + url: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8/ info: contact: email: andreas.rauber@tuwien.ac.at @@ -24,7 +24,7 @@ info: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0 title: DBRepo REST API - version: 1.7.3 + version: 1.8.0 openapi: 3.1.0 servers: - description: Test Instance diff --git a/.docs/.openapi/api.yaml b/.docs/.openapi/api.yaml index a61ecbcb81..bdbfe6909e 100644 --- a/.docs/.openapi/api.yaml +++ b/.docs/.openapi/api.yaml @@ -16,7 +16,7 @@ info: name: Apache 2.0 url: 'https://www.apache.org/licenses/LICENSE-2.0' title: DBRepo REST API - version: 1.7.3 + version: 1.8.0 servers: - description: Test Instance url: 'https://test.dbrepo.tuwien.ac.at' @@ -24,7 +24,7 @@ servers: url: 'http://localhost' externalDocs: description: Project Website - url: 'https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.7/' + url: 'https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8/' paths: /api/analyse/datatypes: get: @@ -199,10 +199,15 @@ paths: description: Expose `X-Count` custom header required: true style: simple + schema: + type: string X-Count: description: Number of rows required: true style: simple + schema: + type: integer + format: int64 content: application/json: schema: @@ -299,10 +304,15 @@ paths: description: Expose `X-Count` custom header required: true style: simple + schema: + type: string X-Count: description: Number of rows required: true style: simple + schema: + type: integer + format: int64 content: application/json: schema: @@ -402,10 +412,15 @@ paths: description: Expose `X-Count` custom header required: true style: simple + schema: + type: string X-Count: description: Number of rows required: true style: simple + schema: + type: integer + format: int64 content: application/json: schema: @@ -689,10 +704,15 @@ paths: description: Expose `X-Count` custom header required: true style: simple + schema: + type: string X-Count: description: Number of rows required: true style: simple + schema: + type: integer + format: int64 content: application/json: schema: @@ -787,16 +807,26 @@ paths: description: Reverse proxy exposing of custom headers required: true style: simple + schema: + type: string X-Count: description: Number of rows style: simple + schema: + type: string + format: uuid X-Id: description: The subset id required: true style: simple + schema: + type: string + format: uuid X-Headers: description: The list of headers separated by comma style: simple + schema: + type: string content: application/json: schema: @@ -892,16 +922,26 @@ paths: description: Reverse proxy exposing of custom headers required: true style: simple + schema: + type: string X-Count: description: Number of rows style: simple + schema: + type: string + format: uuid X-Id: description: The subset id required: true style: simple + schema: + type: string + format: uuid X-Headers: description: The list of headers separated by comma style: simple + schema: + type: string content: application/json: schema: @@ -1023,13 +1063,13 @@ paths: content: application/json: schema: - required: - - file type: object properties: file: type: string format: binary + required: + - file required: true responses: '201': @@ -1558,10 +1598,15 @@ paths: description: Expose `X-Count` custom header required: true style: simple + schema: + type: string X-Count: description: Number of databases required: true style: simple + schema: + type: integer + format: int64 content: application/json: schema: @@ -1575,7 +1620,7 @@ paths: description: >- Creates a database in the container with id. Requires roles `create-database`. - operationId: create_4 + operationId: create1 requestBody: content: application/json: @@ -1659,10 +1704,15 @@ paths: description: Expose `X-Count` custom header required: true style: simple + schema: + type: string X-Count: description: Number of databases required: true style: simple + schema: + type: integer + format: int64 content: application/json: schema: @@ -1723,7 +1773,7 @@ paths: description: >- Modifies access of a user with given id to database with given id. Requires role `update-database-access`. - operationId: update_5 + operationId: update parameters: - name: databaseId in: path @@ -1790,7 +1840,7 @@ paths: description: >- Give a user with given id access to some database with given id. Requires role `create-database-access`. - operationId: create_7 + operationId: create_11 parameters: - name: databaseId in: path @@ -1985,7 +2035,7 @@ paths: - ontology-endpoint summary: Update ontology description: Updates an ontology with id. Requires role `update-ontology`. - operationId: update + operationId: update_1 parameters: - name: ontologyId in: path @@ -2048,7 +2098,7 @@ paths: - message-endpoint summary: Update message description: Updates a message with id. Requires role `update-maintenance-message`. - operationId: update_1 + operationId: update_2 parameters: - name: messageId in: path @@ -2139,7 +2189,7 @@ paths: description: >- Updates container image in the metadata database. Requires role `modify-image`. - operationId: update_2 + operationId: update_3 parameters: - name: imageId in: path @@ -2204,7 +2254,7 @@ paths: description: >- Finds an identifier with id. The response format depends on the HTTP `Accept` header set on the request. - operationId: find_7 + operationId: find_5 parameters: - name: identifierId in: path @@ -2510,7 +2560,7 @@ paths: - view-endpoint summary: Get view description: Gets a view with id in the metadata database. - operationId: find_8 + operationId: find_6 parameters: - name: databaseId in: path @@ -2553,7 +2603,7 @@ paths: description: >- Updates a view with id. This can only be performed by the view owner or database owner. Requires role `create-database-view`. - operationId: update_3 + operationId: update_4 parameters: - name: databaseId in: path @@ -2684,7 +2734,7 @@ paths: `false`), then the user needs to have at least read access and the role `find-table`. When the `system` role is present, the endpoint responds with additional connection metadata in the header. - operationId: findById_2 + operationId: findById_1 parameters: - name: databaseId in: path @@ -2725,7 +2775,7 @@ paths: - table-endpoint summary: Update table description: Updates a table in the database with id. Requires role `update-table`. - operationId: update_4 + operationId: update_5 parameters: - name: databaseId in: path @@ -3170,10 +3220,8 @@ paths: content: '*/*': schema: - type: array - items: - type: string - format: byte + type: string + format: byte '404': description: Database or user could not be found content: @@ -3244,13 +3292,69 @@ paths: security: - bearerAuth: [] - basicAuth: [] + '/api/database/{databaseId}/dashboard': + put: + tags: + - database-endpoint + summary: Update database dashboard uid + description: >- + Updates the dashboard uid for a database with given id. Only the + database owner can perform this operation. Requires role `system`. + operationId: modifyDashboard + parameters: + - name: databaseId + in: path + required: true + schema: + type: string + format: uuid + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseModifyDashboardDto' + required: true + responses: + '202': + description: Modify of dashboard uid was successful + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseBriefDto' + '400': + description: Malformed payload + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + '404': + description: Database could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + '502': + description: Connection to search service failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + '503': + description: Failed to save in search service + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + - basicAuth: [] /api/ontology: get: tags: - ontology-endpoint summary: List ontologies description: Lists all ontologies known to the metadata database. - operationId: findAll_2 + operationId: findAll responses: '200': description: List ontologies @@ -3267,7 +3371,7 @@ paths: description: >- Creates an ontology in the metadata database. Requires role `create-ontology`. - operationId: create1 + operationId: create_2 requestBody: content: application/json: @@ -3318,7 +3422,7 @@ paths: description: >- Creates a message in the metadata database. Requires role `create-maintenance-message`. - operationId: create_11 + operationId: create_3 requestBody: content: application/json: @@ -3341,7 +3445,7 @@ paths: - image-endpoint summary: List images description: Lists all container images known to the metadata database. - operationId: findAll_3 + operationId: findAll_1 responses: '200': description: List images @@ -3358,7 +3462,7 @@ paths: description: >- Creates a container image in the metadata database. Requires role `create-image`. - operationId: create_2 + operationId: create_4 requestBody: content: application/json: @@ -3393,7 +3497,7 @@ paths: - identifier-endpoint summary: List identifiers description: Lists all identifiers known to the metadata database - operationId: findAll_4 + operationId: findAll_2 parameters: - name: type in: query @@ -3450,7 +3554,9 @@ paths: schema: type: array items: - type: string + type: array + items: + $ref: '#/components/schemas/IdentifierBriefDto' application/ld+json: schema: type: array @@ -3465,7 +3571,7 @@ paths: can only be created for objects the user has at least *READ* access in the associated database (requires role `create-identifier`) or for any object in any database (requires role `create-foreign-identifier`). - operationId: create_3 + operationId: create_5 requestBody: content: application/json: @@ -3518,7 +3624,7 @@ paths: - view-endpoint summary: List views description: Lists views known to the metadata database. - operationId: findAll_5 + operationId: findAll_3 parameters: - name: databaseId in: path @@ -3551,7 +3657,7 @@ paths: description: >- Creates a view. This can only be performed by the database owner. Requires role `create-database-view`. - operationId: create_5 + operationId: create_6 parameters: - name: databaseId in: path @@ -3626,7 +3732,7 @@ paths: Lists all tables known to the metadata database. When a database has a hidden schema (i.e. when `is_schema_public` is `false`), then the user needs to have at least read access and the role `list-tables`. - operationId: list_4 + operationId: list_3 parameters: - name: databaseId in: path @@ -3663,7 +3769,7 @@ paths: - table-endpoint summary: Create table description: Creates a table in the database with id. Requires role `create-table`. - operationId: create_6 + operationId: create_7 parameters: - name: databaseId in: path @@ -3729,7 +3835,7 @@ paths: - container-endpoint summary: List containers description: List all containers in the metadata database. - operationId: findAll_6 + operationId: findAll_4 parameters: - name: limit in: query @@ -3804,7 +3910,7 @@ paths: from the result list. If the optional query parameter `username` is present, the result list can be filtered by matching this exact username. - operationId: findAll + operationId: findAll_5 parameters: - name: username in: query @@ -3826,7 +3932,7 @@ paths: - unit-endpoint summary: List units description: Lists units known to the metadata database. - operationId: findAll_1 + operationId: findAll_6 responses: '200': description: Find all semantic units @@ -3844,7 +3950,7 @@ paths: description: >- Finds semantic entities by label or uri in an ontology with id. Requires role `execute-semantic-query`. - operationId: find_5 + operationId: find_7 parameters: - name: ontologyId in: path @@ -3903,7 +4009,7 @@ paths: tags: - metadata-endpoint summary: Get record - operationId: identify_1_1_1_1 + operationId: identify parameters: - name: verb in: query @@ -3916,14 +4022,16 @@ paths: '200': description: List containers content: - text/xml: {} + text/xml: + schema: + type: string '/api/message/message/{messageId}': get: tags: - message-endpoint summary: Find message description: Finds a message with id in the metadata database. - operationId: find_6 + operationId: find_8 parameters: - name: messageId in: path @@ -3950,7 +4058,7 @@ paths: - license-endpoint summary: List licenses description: Lists licenses known to the metadata database. - operationId: list_3 + operationId: list_4 responses: '200': description: List of licenses @@ -3994,7 +4102,7 @@ paths: - database-endpoint summary: Find database description: Finds a database with id. - operationId: findById_1 + operationId: findById_2 parameters: - name: databaseId in: path @@ -4009,12 +4117,18 @@ paths: X-Username: description: The authentication username style: simple + schema: + type: string Access-Control-Expose-Headers: description: Expose custom headers style: simple + schema: + type: string X-Password: description: The authentication password style: simple + schema: + type: string content: application/json: schema: @@ -4432,14 +4546,23 @@ components: example: ',' type: string type: object + ApiError: + properties: + code: + example: error.dashboard.create + type: string + message: + example: Message + type: string + status: + example: BAD_REQUEST + type: string + type: object ColumnAnalysisDto: properties: d: example: 4 type: integer - dfid: - example: null - type: integer enums: example: null properties: @@ -4459,15 +4582,6 @@ components: example: decimal type: string type: object - ErrorDto: - properties: - message: - example: Message - type: string - success: - example: false - type: boolean - type: object KeysDto: properties: keys: @@ -4481,15 +4595,10 @@ components: - keys type: object ApiErrorDto: - required: - - code - - message - - status type: object properties: status: type: string - example: NOT_FOUND enum: - 100 CONTINUE - 101 SWITCHING_PROTOCOLS @@ -4560,46 +4669,44 @@ components: - 509 BANDWIDTH_LIMIT_EXCEEDED - 510 NOT_EXTENDED - 511 NETWORK_AUTHENTICATION_REQUIRED + example: NOT_FOUND message: type: string example: Error message code: type: string example: error.service.code - TupleUpdateDto: required: - - data - - keys + - code + - message + - status + TupleUpdateDto: type: object properties: data: type: object additionalProperties: type: object - example: - key: value example: key: value keys: type: object additionalProperties: type: object - example: - id: 1 example: id: 1 - QueryPersistDto: required: - - persist + - data + - keys + QueryPersistDto: type: object properties: persist: type: boolean example: true - CreatorBriefDto: required: - - creator_name - - id + - persist + CreatorBriefDto: type: object properties: id: @@ -4614,43 +4721,35 @@ components: example: 'Carberry, Josiah' name_type: type: string - example: Personal enum: - Personal - Organizational + example: Personal name_identifier: type: string example: 0000-0002-1825-0097 name_identifier_scheme: type: string - example: ORCID enum: - ORCID - ROR - ISNI - GRID + example: ORCID affiliation_identifier: type: string example: 'https://ror.org/05gq02987' affiliation_identifier_scheme: type: string - example: ROR enum: - ROR - GRID - ISNI - IdentifierBriefDto: + example: ROR required: - - creators - - database_id - - descriptions + - creator_name - id - - owned_by - - publication_year - - publisher - - status - - titles - - type + IdentifierBriefDto: type: object properties: id: @@ -4659,12 +4758,12 @@ components: example: b97cd56b-66ca-4354-9e6c-f47210cfaaec type: type: string - example: database enum: - database - subset - table - view + example: database creators: type: array items: @@ -4685,10 +4784,10 @@ components: example: TU Wien status: type: string - example: draft enum: - draft - published + example: draft database_id: type: string format: uuid @@ -4696,12 +4795,15 @@ components: query_id: type: string format: uuid + example: 1 table_id: type: string format: uuid + example: 1 view_id: type: string format: uuid + example: 1 publication_year: type: integer format: int32 @@ -4710,9 +4812,18 @@ components: type: string format: uuid example: 2f45ef7a-7f9b-4667-9156-152c87fe1ca5 - IdentifierDescriptionDto: required: + - creators + - database_id + - descriptions - id + - owned_by + - publication_year + - publisher + - status + - titles + - type + IdentifierDescriptionDto: type: object properties: id: @@ -4724,7 +4835,6 @@ components: example: 'Air quality reports at Stephansplatz, Vienna' language: type: string - example: en enum: - ab - aa @@ -4910,9 +5020,9 @@ components: - yo - za - zu + example: en type: type: string - example: Abstract enum: - Abstract - Methods @@ -4920,9 +5030,10 @@ components: - TableOfContents - TechnicalInfo - Other - IdentifierTitleDto: + example: Abstract required: - id + IdentifierTitleDto: type: object properties: id: @@ -4934,7 +5045,6 @@ components: example: Airquality Demonstrator language: type: string - example: en enum: - ab - aa @@ -5120,6 +5230,7 @@ components: - yo - za - zu + example: en type: type: string enum: @@ -5127,17 +5238,9 @@ components: - Subtitle - TranslatedTitle - Other - QueryDto: required: - - database_id - - execution - id - - identifiers - - is_persisted - - owner - - query - - query_hash - - query_normalized + QueryDto: type: object properties: id: @@ -5155,10 +5258,10 @@ components: example: SELECT `id` FROM `air_quality` type: type: string - example: query enum: - query - view + example: query identifiers: type: array items: @@ -5183,10 +5286,17 @@ components: type: integer format: int64 example: 1 - UserBriefDto: required: + - database_id + - execution - id - - username + - identifiers + - is_persisted + - owner + - query + - query_hash + - query_normalized + UserBriefDto: type: object properties: id: @@ -5212,10 +5322,10 @@ components: family_name: type: string example: Carberry - CreatorDto: required: - - creator_name - id + - username + CreatorDto: type: object properties: id: @@ -5236,21 +5346,21 @@ components: example: 'Carberry, Josiah' name_type: type: string - example: Personal enum: - Personal - Organizational + example: Personal name_identifier: type: string example: 0000-0002-1825-0097 name_identifier_scheme: type: string - example: ORCID enum: - ORCID - ROR - ISNI - GRID + example: ORCID name_identifier_scheme_uri: type: string example: 'https://orcid.org/' @@ -5259,33 +5369,31 @@ components: example: 'https://ror.org/05gq02987' affiliation_identifier_scheme: type: string - example: ROR enum: - ROR - GRID - ISNI + example: ROR affiliation_identifier_scheme_uri: type: string example: 'https://ror.org/' - IdentifierDto: required: - - creators - - database_id - - descriptions - - funders + - creator_name - id - - language - - licenses - - links - - owner - - publication_year - - publisher - - query - - query_hash - - query_normalized - - status - - titles - - type + EnumDto: + type: object + properties: + id: + type: string + format: uuid + example: 5343bb3d-14d3-4eb7-a86f-b8fc553cb315 + value: + type: string + example: 3 + required: + - id + - value + IdentifierDto: type: object properties: id: @@ -5296,12 +5404,12 @@ components: $ref: '#/components/schemas/LinksDto' type: type: string - example: database enum: - database - subset - table - view + example: database titles: type: array items: @@ -5528,22 +5636,26 @@ components: $ref: '#/components/schemas/CreatorDto' status: type: string - example: draft enum: - draft - published + example: draft database_id: type: string format: uuid + example: null query_id: type: string format: uuid + example: null table_id: type: string format: uuid + example: null view_id: type: string format: uuid + example: null query_normalized: type: string example: >- @@ -5575,10 +5687,25 @@ components: type: integer format: int32 example: 2022 - IdentifierFunderDto: required: - - funder_name + - creators + - database_id + - descriptions + - funders - id + - language + - licenses + - links + - owner + - publication_year + - publisher + - query + - query_hash + - query_normalized + - status + - titles + - type + IdentifierFunderDto: type: object properties: id: @@ -5593,26 +5720,26 @@ components: example: 'http://doi.org/10.13039/501100000780' funder_identifier_type: type: string - example: Crossref Funder ID enum: - Crossref Funder ID - ROR - GND - ISNI - Other + example: Crossref Funder ID scheme_uri: type: string example: 'http://doi.org/' award_number: type: string - example: '824087' + example: 824087 award_title: type: string example: EOSC-Life - LicenseDto: required: - - identifier - - uri + - funder_name + - id + LicenseDto: type: object properties: identifier: @@ -5628,10 +5755,10 @@ components: preservation of copyright and license notices. Licensed works, modifications, and larger works may be distributed under different terms and without source code. - LinksDto: required: - - self - - self_html + - identifier + - uri + LinksDto: type: object properties: self: @@ -5643,12 +5770,13 @@ components: self_html: type: string example: 'http://example.com' - RelatedIdentifierDto: + dashboard_html: + type: string + example: 'http://example.com/d/defi2baxqawaod' required: - - id - - relation - - type - - value + - self + - self_html + RelatedIdentifierDto: type: object properties: id: @@ -5660,7 +5788,6 @@ components: example: 10.70124/dc4zh-9ce78 type: type: string - example: DOI enum: - DOI - URL @@ -5680,9 +5807,9 @@ components: - PURL - UPC - w3id + example: DOI relation: type: string - example: Cites enum: - IsCitedBy - Cites @@ -5718,15 +5845,26 @@ components: - Requires - IsObsoletedBy - Obsoletes - ViewColumnDto: + example: Cites required: - - database_id - id - - internal_name - - is_null_allowed - - name - - ord + - relation - type + - value + SetDto: + type: object + properties: + id: + type: string + format: uuid + example: 7eb4eded-bacc-4a91-84db-a9ae6ddafda7 + value: + type: string + example: 3 + required: + - id + - value + ViewColumnDto: type: object properties: id: @@ -5734,10 +5872,10 @@ components: format: uuid example: 6aec3a91-2e0b-4e92-a16a-9c3c5e892da1 name: - maxLength: 64 - minLength: 0 type: string example: Given Name + maxLength: 64 + minLength: 0 size: type: integer format: int64 @@ -5747,10 +5885,20 @@ components: format: int64 example: 0 description: - maxLength: 2048 - minLength: 0 type: string example: Column comment + maxLength: 2048 + minLength: 0 + enums: + type: array + description: 'enum values, only considered when type = ENUM' + items: + $ref: '#/components/schemas/EnumDto' + sets: + type: array + description: 'enum values, only considered when type = ENUM' + items: + $ref: '#/components/schemas/SetDto' database_id: type: string format: uuid @@ -5760,10 +5908,10 @@ components: format: int32 example: 0 internal_name: - maxLength: 64 - minLength: 0 type: string example: given_name + maxLength: 64 + minLength: 0 index_length: type: integer format: int64 @@ -5774,7 +5922,6 @@ components: example: 255 type: type: string - example: varchar enum: - char - varchar @@ -5806,20 +5953,19 @@ components: - timestamp - time - year + example: varchar is_null_allowed: type: boolean example: false - ViewDto: required: - - columns - database_id - id - - identifiers - internal_name + - is_null_allowed - name - - owner - - query - - query_hash + - ord + - type + ViewDto: type: object properties: id: @@ -5842,9 +5988,14 @@ components: type: array items: $ref: '#/components/schemas/ViewColumnDto' + created: + type: string + format: date-time + example: '2022-01-01T08:00:00.000Z' last_retrieved: type: string format: date-time + example: '2025-01-23T12:09:01.000Z' database_id: type: string format: uuid @@ -5865,24 +6016,29 @@ components: query_hash: type: string example: 7de03e818900b6ea6d58ad0306d4a741d658c6df3d1964e89ed2395d8c7e7916 - TupleDto: required: - - data + - columns + - created + - database_id + - id + - identifiers + - internal_name + - name + - owner + - query + - query_hash + TupleDto: type: object properties: data: type: object additionalProperties: type: object - example: - key: value example: key: value - ImportDto: required: - - header - - location - - separator + - data + ImportDto: type: object properties: location: @@ -5903,24 +6059,23 @@ components: line_termination: type: string example: \r\n - FilterDto: required: - - column_id - - operator_id - - type - - value + - header + - location + - separator + FilterDto: type: object properties: type: type: string - example: where enum: - where - or - and + example: where value: type: string - example: '1' + example: 1 column_id: type: string format: uuid @@ -5929,25 +6084,27 @@ components: type: string format: uuid example: 67c5b54d-2eb0-4f42-8dc1-a504562e9f32 - OrderDto: required: - column_id + - operator_id + - type + - value + OrderDto: type: object properties: direction: type: string - example: asc enum: - asc - desc + example: asc column_id: type: string format: uuid example: e891ba86-0258-41a6-a8d9-ff58bc10b618 - SubsetDto: required: - - columns - - table_id + - column_id + SubsetDto: type: object properties: columns: @@ -5965,15 +6122,20 @@ components: type: array items: $ref: '#/components/schemas/OrderDto' - table_id: + datasource_id: type: string format: uuid example: f7df2a7d-4ade-4c78-97b0-7c744d0893c7 - TableHistoryDto: + datasource_type: + type: string + enum: + - table + - view required: - - event - - timestamp - - total + - columns + - datasource_id + - datasource_type + TableHistoryDto: type: object properties: timestamp: @@ -5982,31 +6144,30 @@ components: example: '2021-03-12T15:26:21.000Z' event: type: string - example: INSERT enum: - insert - delete + example: INSERT total: type: integer format: int64 example: 1 - TupleDeleteDto: required: - - keys + - event + - timestamp + - total + TupleDeleteDto: type: object properties: keys: type: object additionalProperties: type: object - example: - id: 1 example: id: 1 - UserAttributesDto: required: - - language - - theme + - keys + UserAttributesDto: type: object properties: theme: @@ -6021,12 +6182,10 @@ components: language: type: string example: en - UserDto: required: - - attributes - - id - - password - - username + - language + - theme + UserDto: type: object properties: id: @@ -6047,6 +6206,7 @@ components: last_retrieved: type: string format: date-time + example: '2025-01-23T12:09:01.000Z' qualified_name: type: string example: Josiah Carberry — @jcarberry @@ -6056,16 +6216,12 @@ components: family_name: type: string example: Carberry - DatabaseBriefDto: required: - - contact + - attributes - id - - identifiers - - internal_name - - is_public - - is_schema_public - - name - - owner_id + - password + - username + DatabaseBriefDto: type: object properties: id: @@ -6099,25 +6255,31 @@ components: example: 2f45ef7a-7f9b-4667-9156-152c87fe1ca5 preview_image: type: string - DatabaseAccessDto: required: - - type - - user + - contact + - id + - identifiers + - internal_name + - is_public + - is_schema_public + - name + - owner_id + DatabaseAccessDto: type: object properties: user: $ref: '#/components/schemas/UserBriefDto' type: type: string - example: read enum: - read - write_own - write_all - UserUpdateDto: + example: read required: - - language - - theme + - type + - user + UserUpdateDto: type: object properties: firstname: @@ -6138,10 +6300,10 @@ components: language: type: string example: en - OntologyModifyDto: required: - - prefix - - uri + - language + - theme + OntologyModifyDto: type: object properties: uri: @@ -6156,13 +6318,10 @@ components: rdf_path: type: string example: rdf/om-2.0.rdf - OntologyDto: required: - - id - prefix - - rdf - - sparql - uri + OntologyDto: type: object properties: id: @@ -6190,10 +6349,13 @@ components: rdf_path: type: string example: rdf/om-2.0.rdf - BannerMessageUpdateDto: required: - - message - - type + - id + - prefix + - rdf + - sparql + - uri + BannerMessageUpdateDto: type: object properties: type: @@ -6219,10 +6381,10 @@ components: type: string format: date-time example: '2021-03-12T15:26:21.000Z' - BannerMessageBriefDto: required: - message - type + BannerMessageBriefDto: type: object properties: type: @@ -6240,23 +6402,21 @@ components: link_text: type: string example: More - ImageChangeDto: required: - - dialect - - driver_class - - jdbc_method - - registry + - message + - type + ImageChangeDto: type: object properties: registry: type: string example: docker.io/library defaultPort: - maximum: 65535 - minimum: 1024 type: integer format: int32 example: 5432 + maximum: 65535 + minimum: 1024 dialect: type: string example: Postgres @@ -6266,14 +6426,12 @@ components: jdbc_method: type: string example: postgresql - DataTypeDto: required: - - display_name - - documentation - - id - - is_buildable - - is_quoted - - value + - dialect + - driver_class + - jdbc_method + - registry + DataTypeDto: type: object properties: id: @@ -6329,14 +6487,14 @@ components: type: boolean description: frontend can build this data type example: true - ImageDto: required: - - data_types - - default + - display_name + - documentation - id - - name - - operators - - version + - is_buildable + - is_quoted + - value + ImageDto: type: object properties: id: @@ -6348,7 +6506,7 @@ components: example: mariadb version: type: string - example: '10.5' + example: 10.5 operators: type: array items: @@ -6360,12 +6518,14 @@ components: type: array items: $ref: '#/components/schemas/DataTypeDto' - OperatorDto: required: - - display_name - - documentation + - data_types + - default - id - - value + - name + - operators + - version + OperatorDto: type: object properties: id: @@ -6381,15 +6541,12 @@ components: display_name: type: string example: XOR - IdentifierSaveDto: required: - - creators - - database_id + - display_name + - documentation - id - - publication_year - - publisher - - titles - - type + - value + IdentifierSaveDto: type: object properties: id: @@ -6398,12 +6555,12 @@ components: example: 68e11675-1e0f-4d24-a6d9-887ad1c4445d type: type: string - example: database enum: - database - subset - table - view + example: database doi: type: string example: 10.1111/11111111 @@ -6620,15 +6777,19 @@ components: database_id: type: string format: uuid + example: null query_id: type: string format: uuid + example: null view_id: type: string format: uuid + example: null table_id: type: string format: uuid + example: null publication_day: type: integer format: int32 @@ -6645,10 +6806,15 @@ components: type: array items: $ref: '#/components/schemas/SaveRelatedIdentifierDto' - SaveIdentifierCreatorDto: required: - - creator_name + - creators + - database_id - id + - publication_year + - publisher + - titles + - type + SaveIdentifierCreatorDto: type: object properties: id: @@ -6669,35 +6835,35 @@ components: example: 'Carberry, Josiah' name_type: type: string - example: Personal enum: - Personal - Organizational + example: Personal name_identifier: type: string example: 0000-0002-1825-0097 name_identifier_scheme: type: string - example: ORCID enum: - ORCID - ROR - ISNI - GRID + example: ORCID affiliation_identifier: type: string example: 'https://ror.org/04d836q62' affiliation_identifier_scheme: type: string - example: ROR enum: - ROR - GRID - ISNI - SaveIdentifierDescriptionDto: + example: ROR required: - - description + - creator_name - id + SaveIdentifierDescriptionDto: type: object properties: id: @@ -6709,7 +6875,6 @@ components: example: 'Air quality reports at Stephansplatz, Vienna' language: type: string - example: en enum: - ab - aa @@ -6895,9 +7060,9 @@ components: - yo - za - zu + example: en type: type: string - example: Abstract enum: - Abstract - Methods @@ -6905,10 +7070,11 @@ components: - TableOfContents - TechnicalInfo - Other - SaveIdentifierFunderDto: + example: Abstract required: - - funder_name + - description - id + SaveIdentifierFunderDto: type: object properties: id: @@ -6923,26 +7089,26 @@ components: example: 'http://doi.org/10.13039/501100000780' funder_identifier_type: type: string - example: Crossref Funder ID enum: - Crossref Funder ID - ROR - GND - ISNI - Other + example: Crossref Funder ID scheme_uri: type: string example: 'http://doi.org/' award_number: type: string - example: '824087' + example: 824087 award_title: type: string example: EOSC-Life - SaveIdentifierTitleDto: required: + - funder_name - id - - title + SaveIdentifierTitleDto: type: object properties: id: @@ -6954,7 +7120,6 @@ components: example: Airquality Demonstrator language: type: string - example: en enum: - ab - aa @@ -7140,20 +7305,19 @@ components: - yo - za - zu + example: en type: type: string - example: Subtitle enum: - AlternativeTitle - Subtitle - TranslatedTitle - Other - SaveRelatedIdentifierDto: + example: Subtitle required: - id - - relation - - type - - value + - title + SaveRelatedIdentifierDto: type: object properties: id: @@ -7165,7 +7329,6 @@ components: example: 10.70124/dc4zh-9ce78 type: type: string - example: DOI enum: - DOI - URL @@ -7185,9 +7348,9 @@ components: - PURL - UPC - w3id + example: DOI relation: type: string - example: Cites enum: - IsCitedBy - Cites @@ -7223,10 +7386,13 @@ components: - Requires - IsObsoletedBy - Obsoletes - DatabaseModifyVisibilityDto: + example: Cites required: - - is_public - - is_schema_public + - id + - relation + - type + - value + DatabaseModifyVisibilityDto: type: object properties: is_public: @@ -7235,10 +7401,14 @@ components: is_schema_public: type: boolean example: true - ViewUpdateDto: + is_dashboard_enabled: + type: boolean + example: true required: + - is_dashboard_enabled - is_public - is_schema_public + ViewUpdateDto: type: object properties: is_public: @@ -7247,14 +7417,10 @@ components: is_schema_public: type: boolean example: true - ViewBriefDto: required: - - database_id - - id - - internal_name - - name - - query - - query_hash + - is_public + - is_schema_public + ViewBriefDto: type: object properties: id: @@ -7291,33 +7457,31 @@ components: type: string format: uuid example: ac750fcf-ea02-4fce-85ac-d73857e18b35 - TableUpdateDto: required: - - is_public - - is_schema_public + - database_id + - id + - internal_name + - name + - query + - query_hash + TableUpdateDto: type: object properties: description: - maxLength: 180 - minLength: 0 type: string example: Air Quality in Austria + maxLength: 180 + minLength: 0 is_public: type: boolean example: true is_schema_public: type: boolean example: true - TableBriefDto: required: - - database_id - - id - - internal_name - is_public - is_schema_public - - is_versioned - - name - - owned_by + TableBriefDto: type: object properties: id: @@ -7350,6 +7514,15 @@ components: type: string format: uuid example: 78337b80-5699-45db-8111-cec86439ab6b + required: + - database_id + - id + - internal_name + - is_public + - is_schema_public + - is_versioned + - name + - owned_by ColumnSemanticsUpdateDto: type: object properties: @@ -7358,15 +7531,6 @@ components: unit_uri: type: string ColumnDto: - required: - - database_id - - id - - internal_name - - is_null_allowed - - name - - ord - - table_id - - type type: object properties: id: @@ -7374,10 +7538,10 @@ components: format: uuid example: a453e444-e00d-41ca-902c-11e9c54b39f1 name: - maxLength: 64 - minLength: 0 type: string example: Given Name + maxLength: 64 + minLength: 0 alias: type: string example: firstname @@ -7400,16 +7564,18 @@ components: unit: $ref: '#/components/schemas/UnitBriefDto' description: - maxLength: 2048 - minLength: 0 type: string example: Column comment + maxLength: 2048 + minLength: 0 enums: type: array + description: 'enum values, only considered when type = ENUM' items: $ref: '#/components/schemas/EnumDto' sets: type: array + description: 'enum values, only considered when type = ENUM' items: $ref: '#/components/schemas/SetDto' database_id: @@ -7425,10 +7591,10 @@ components: format: int32 example: 0 internal_name: - maxLength: 64 - minLength: 0 type: string example: given_name + maxLength: 64 + minLength: 0 index_length: type: integer format: int64 @@ -7439,7 +7605,6 @@ components: example: 255 type: type: string - example: varchar enum: - char - varchar @@ -7471,6 +7636,7 @@ components: - timestamp - time - year + example: varchar data_length: type: integer format: int64 @@ -7495,10 +7661,16 @@ components: is_null_allowed: type: boolean example: false - ConceptBriefDto: required: + - database_id - id - - uri + - internal_name + - is_null_allowed + - name + - ord + - table_id + - type + ConceptBriefDto: type: object properties: id: @@ -7516,43 +7688,17 @@ components: example: >- name typically used to differentiate people from the same family, clan, or other social group who have a common last name - EnumDto: required: - id - - value + - uri + UnitBriefDto: type: object properties: id: type: string format: uuid - example: 5343bb3d-14d3-4eb7-a86f-b8fc553cb315 - value: - type: string - example: '3' - SetDto: - required: - - id - - value - type: object - properties: - id: - type: string - format: uuid - example: 7eb4eded-bacc-4a91-84db-a9ae6ddafda7 - value: - type: string - example: '3' - UnitBriefDto: - required: - - id - - uri - type: object - properties: - id: - type: string - format: uuid - example: ba1935e8-6817-488f-af0a-f54389af9000 - uri: + example: ba1935e8-6817-488f-af0a-f54389af9000 + uri: type: string example: 'http://www.wikidata.org/entity/Q1422583' name: @@ -7561,35 +7707,42 @@ components: description: type: string example: 'subjective magnitude of value, meaning, or purpose' - DatabaseTransferDto: required: - id + - uri + DatabaseTransferDto: type: object properties: id: type: string format: uuid + required: + - id DatabaseModifyImageDto: type: object properties: key: type: string - CreateAccessDto: + DatabaseModifyDashboardDto: + type: object + properties: + uid: + type: string required: - - type + - uid + CreateAccessDto: type: object properties: type: type: string - example: read enum: - read - write_own - write_all - OntologyCreateDto: + example: read required: - - prefix - - uri + - type + OntologyCreateDto: type: object properties: uri: @@ -7601,10 +7754,10 @@ components: sparql_endpoint: type: string example: Ontology SPARQL endpoint - BannerMessageCreateDto: required: - - message - - type + - prefix + - uri + BannerMessageCreateDto: type: object properties: type: @@ -7630,16 +7783,10 @@ components: type: string format: date-time example: '2021-03-12T15:26:21.000Z' - ImageCreateDto: required: - - default_port - - dialect - - driver_class - - is_default - - jdbc_method - - name - - registry - - version + - message + - type + ImageCreateDto: type: object properties: registry: @@ -7660,28 +7807,30 @@ components: jdbc_method: type: string default_port: - maximum: 65535 - minimum: 1024 type: integer format: int32 - CreateIdentifierDto: + maximum: 65535 + minimum: 1024 required: - - creators - - database_id - - publication_year - - publisher - - titles - - type + - default_port + - dialect + - driver_class + - is_default + - jdbc_method + - name + - registry + - version + CreateIdentifierDto: type: object properties: type: type: string - example: database enum: - database - subset - table - view + example: database doi: type: string example: 10.1111/11111111 @@ -7902,12 +8051,15 @@ components: query_id: type: string format: uuid + example: null view_id: type: string format: uuid + example: null table_id: type: string format: uuid + example: null publication_day: type: integer format: int32 @@ -7924,12 +8076,14 @@ components: type: array items: $ref: '#/components/schemas/SaveRelatedIdentifierDto' - CreateDatabaseDto: required: - - container_id - - is_public - - is_schema_public - - name + - creators + - database_id + - publication_year + - publisher + - titles + - type + CreateDatabaseDto: type: object properties: name: @@ -7945,19 +8099,19 @@ components: is_schema_public: type: boolean example: true - CreateViewDto: required: + - container_id - is_public - is_schema_public - name - - query + CreateViewDto: type: object properties: name: - maxLength: 63 - minLength: 1 type: string example: Air Quality + maxLength: 63 + minLength: 1 query: $ref: '#/components/schemas/SubsetDto' is_public: @@ -7966,11 +8120,12 @@ components: is_schema_public: type: boolean example: true - CreateForeignKeyDto: required: - - columns - - referenced_columns - - referenced_table + - is_public + - is_schema_public + - name + - query + CreateForeignKeyDto: type: object properties: columns: @@ -7979,7 +8134,6 @@ components: - id items: type: string - example: '["id"]' referenced_table: type: string example: sensor @@ -7989,30 +8143,29 @@ components: - other_id items: type: string - example: '["other_id"]' on_update: type: string - example: cascade enum: - restrict - cascade - set_null - no_action - set_default + example: cascade on_delete: type: string - example: cascade enum: - restrict - cascade - set_null - no_action - set_default - CreateTableColumnDto: + example: cascade required: - - name - - null_allowed - - type + - columns + - referenced_columns + - referenced_table + CreateTableColumnDto: type: object properties: name: @@ -8020,7 +8173,6 @@ components: example: Date type: type: string - example: varchar enum: - char - varchar @@ -8052,6 +8204,7 @@ components: - timestamp - time - year + example: varchar size: type: integer format: int64 @@ -8061,22 +8214,20 @@ components: format: int64 example: 0 description: - maxLength: 2048 - minLength: 0 type: string example: Formatted as YYYY-MM-dd + maxLength: 2048 + minLength: 0 enums: type: array description: 'enum values, only considered when type = ENUM' items: type: string - description: 'enum values, only considered when type = ENUM' sets: type: array description: 'set values, only considered when type = SET' items: type: string - description: 'set values, only considered when type = SET' index_length: type: integer format: int64 @@ -8087,12 +8238,11 @@ components: type: string unit_uri: type: string - CreateTableConstraintsDto: required: - - checks - - foreign_keys - - primary_key - - uniques + - name + - null_allowed + - type + CreateTableConstraintsDto: type: object properties: uniques: @@ -8102,38 +8252,37 @@ components: items: type: string checks: - uniqueItems: true type: array items: type: string + uniqueItems: true foreign_keys: type: array items: $ref: '#/components/schemas/CreateForeignKeyDto' primary_key: - uniqueItems: true type: array items: type: string - CreateTableDto: + uniqueItems: true required: - - columns - - constraints - - is_public - - is_schema_public - - name + - checks + - foreign_keys + - primary_key + - uniques + CreateTableDto: type: object properties: name: - maxLength: 64 - minLength: 1 type: string example: Air Quality + maxLength: 64 + minLength: 1 description: - maxLength: 180 - minLength: 0 type: string example: Air Quality in Austria + maxLength: 180 + minLength: 0 columns: type: array items: @@ -8146,14 +8295,13 @@ components: is_schema_public: type: boolean example: true - CreateContainerDto: required: - - host - - image_id + - columns + - constraints + - is_public + - is_schema_public - name - - privileged_password - - privileged_username - - quota + CreateContainerDto: type: object properties: name: @@ -8165,8 +8313,8 @@ components: example: data-db2 port: type: integer - description: Port of container format: int32 + description: Port of container example: 3306 quota: type: integer @@ -8174,8 +8322,8 @@ components: example: 50 image_id: type: string - description: Image ID format: uuid + description: Image ID example: 2360f3c4-85e0-4fac-a7c6-73b296b9dde2 ui_host: type: string @@ -8192,13 +8340,14 @@ components: type: string description: Password of privileged user example: dbrepo - ContainerDto: required: - - count - - id - - image - - internal_name + - host + - image_id - name + - privileged_password + - privileged_username + - quota + ContainerDto: type: object properties: id: @@ -8227,17 +8376,17 @@ components: last_retrieved: type: string format: date-time + example: '2025-01-23T12:09:01.000Z' internal_name: type: string example: air_quality - ColumnBriefDto: required: - - database_id + - count - id + - image - internal_name - name - - table_id - - type + ColumnBriefDto: type: object properties: id: @@ -8245,10 +8394,10 @@ components: format: uuid example: a453e444-e00d-41ca-902c-11e9c54b39f1 name: - maxLength: 64 - minLength: 0 type: string example: Given Name + maxLength: 64 + minLength: 0 alias: type: string example: firstname @@ -8261,13 +8410,12 @@ components: format: uuid example: bfffa915-a547-4466-9c65-ddc0d38fdb08 internal_name: - maxLength: 64 - minLength: 0 type: string example: given_name + maxLength: 64 + minLength: 0 type: type: string - example: varchar enum: - char - varchar @@ -8299,11 +8447,15 @@ components: - timestamp - time - year - UnitDto: + example: varchar required: - - columns + - database_id - id - - uri + - internal_name + - name + - table_id + - type + UnitDto: type: object properties: id: @@ -8320,13 +8472,11 @@ components: type: array items: $ref: '#/components/schemas/ColumnBriefDto' - OntologyBriefDto: required: + - columns - id - - prefix - - rdf - - sparql - uri + OntologyBriefDto: type: object properties: id: @@ -8348,10 +8498,13 @@ components: uri_pattern: type: string example: 'http://www.wikidata.org/entity/.*' - EntityDto: required: - - label + - id + - prefix + - rdf + - sparql - uri + EntityDto: type: object properties: uri: @@ -8363,6 +8516,9 @@ components: description: type: string example: open source semantic web framework for Java + required: + - label + - uri OaiListIdentifiersParameters: type: object properties: @@ -8376,19 +8532,15 @@ components: type: string resumptionToken: type: string + parametersString: + type: string fromDate: type: string format: date-time untilDate: type: string format: date-time - parametersString: - type: string BannerMessageDto: - required: - - id - - message - - type type: object properties: id: @@ -8397,11 +8549,11 @@ components: example: ae3f795b-a3da-4ebe-bdc4-21a8ce631e6f type: type: string - example: WARNING enum: - error - warning - info + example: WARNING message: type: string example: Maintenance starts on 8am on Monday @@ -8419,12 +8571,11 @@ components: type: string format: date-time example: '2021-03-12T15:26:21.000Z' - ImageBriefDto: required: - - default - id - - name - - version + - message + - type + ImageBriefDto: type: object properties: id: @@ -8436,14 +8587,16 @@ components: example: mariadb version: type: string - example: '10.5' + example: 10.5 default: type: boolean example: false - LdCreatorDto: required: - - '@type' + - default + - id - name + - version + LdCreatorDto: type: object properties: name: @@ -8456,19 +8609,10 @@ components: type: string '@type': type: string - LdDatasetDto: required: - - '@context' - '@type' - - citation - - creator - - description - - hasPart - - identifier - name - - temporalCoverage - - url - - version + LdDatasetDto: type: object properties: name: @@ -8502,6 +8646,18 @@ components: type: string '@type': type: string + required: + - '@context' + - '@type' + - citation + - creator + - description + - hasPart + - identifier + - name + - temporalCoverage + - url + - version ConstraintsDto: type: object properties: @@ -8510,22 +8666,21 @@ components: items: $ref: '#/components/schemas/UniqueDto' checks: - uniqueItems: true type: array example: - value > 1 items: type: string - example: '["value > 1"]' + uniqueItems: true foreign_keys: type: array items: $ref: '#/components/schemas/ForeignKeyDto' primary_key: - uniqueItems: true type: array items: $ref: '#/components/schemas/PrimaryKeyDto' + uniqueItems: true ForeignKeyBriefDto: type: object properties: @@ -8534,11 +8689,6 @@ components: format: uuid example: f2b740ec-0b13-4d07-88a9-529d354bba6a ForeignKeyDto: - required: - - name - - referenced_table - - references - - table type: object properties: id: @@ -8558,27 +8708,28 @@ components: $ref: '#/components/schemas/TableBriefDto' on_update: type: string - example: restrict enum: - restrict - cascade - set_null - no_action - set_default + example: restrict on_delete: type: string - example: restrict enum: - restrict - cascade - set_null - no_action - set_default - ForeignKeyReferenceDto: + example: restrict required: - - column - - foreign_key - - referenced_column + - name + - referenced_table + - references + - table + ForeignKeyReferenceDto: type: object properties: id: @@ -8591,10 +8742,11 @@ components: $ref: '#/components/schemas/ForeignKeyBriefDto' referenced_column: $ref: '#/components/schemas/ColumnBriefDto' - PrimaryKeyDto: required: - column - - table + - foreign_key + - referenced_column + PrimaryKeyDto: type: object properties: id: @@ -8605,20 +8757,10 @@ components: $ref: '#/components/schemas/TableBriefDto' column: $ref: '#/components/schemas/ColumnBriefDto' - TableDto: required: - - columns - - constraints - - database_id - - id - - internal_name - - is_public - - is_schema_public - - is_versioned - - name - - owner - - queue_name - - routing_key + - column + - table + TableDto: type: object properties: id: @@ -8638,19 +8780,24 @@ components: owner: $ref: '#/components/schemas/UserBriefDto' description: - maxLength: 2048 - minLength: 0 type: string example: Air Quality in Austria + maxLength: 2048 + minLength: 0 columns: type: array items: $ref: '#/components/schemas/ColumnDto' constraints: $ref: '#/components/schemas/ConstraintsDto' + created: + type: string + format: date-time + example: '2022-01-01T08:00:00.000Z' last_retrieved: type: string format: date-time + example: '2025-01-23T12:09:01.000Z' database_id: type: string format: uuid @@ -8682,25 +8829,34 @@ components: example: 5 data_length: type: integer - description: in bytes format: int64 + description: in bytes example: 16384 max_data_length: type: integer - description: in bytes format: int64 + description: in bytes example: 0 avg_row_length: type: integer - description: in bytes format: int64 + description: in bytes example: 3276 - UniqueDto: required: - columns + - constraints + - created + - database_id - id + - internal_name + - is_public + - is_schema_public + - is_versioned - name - - table + - owner + - queue_name + - routing_key + UniqueDto: type: object properties: id: @@ -8716,12 +8872,12 @@ components: type: array items: $ref: '#/components/schemas/ColumnBriefDto' - TableColumnEntityDto: required: - - column_id - - database_id - - table_id - - uri + - columns + - id + - name + - table + TableColumnEntityDto: type: object properties: uri: @@ -8745,15 +8901,12 @@ components: type: string format: uuid example: 297860e3-3b29-451c-ae8a-a85ed5941018 - ContainerBriefDto: required: - - count - - hash - - id - - image - - internal_name - - name - - quota + - column_id + - database_id + - table_id + - uri + ContainerBriefDto: type: object properties: id: @@ -8779,11 +8932,15 @@ components: internal_name: type: string example: air-quality - ConceptDto: required: - - columns + - count + - hash - id - - uri + - image + - internal_name + - name + - quota + ConceptDto: type: object properties: id: @@ -8800,6 +8957,10 @@ components: type: array items: $ref: '#/components/schemas/ColumnBriefDto' + required: + - columns + - id + - uri IndexDto: properties: results: diff --git a/.docs/.openapi/openapi-generate.sh b/.docs/.openapi/openapi-generate.sh index edd927d202..aeab907799 100644 --- a/.docs/.openapi/openapi-generate.sh +++ b/.docs/.openapi/openapi-generate.sh @@ -1,14 +1,15 @@ #!/bin/bash declare -A services -services[4000]=search -services[5000]=analyse +services[4050]=analyse +services[4060]=search +services[4070]=dashboard services[9093]=data services[9099]=metadata # requires https://github.com/mikefarah/yq/ -> v4.44.3 function retrieve () { - if [[ "$2" == analyse ]] || [[ "$2" == search ]]; then + if [[ "$2" == analyse ]] || [[ "$2" == search ]] || [[ "$2" == dashboard ]]; then echo "... retrieve json api from localhost:$1" curl -sSL "http://localhost:$1/api-$2.json" | yq -o=json - > "./.docs/.openapi/api-$2.yaml" else diff --git a/.docs/api/broker-service.md b/.docs/api/broker-service.md index 373eb35b95..18bf4fe8b4 100644 --- a/.docs/api/broker-service.md +++ b/.docs/api/broker-service.md @@ -61,9 +61,6 @@ The consumer takes care of writing it to the correct table in the [Data Service] ## Limitations -* No support for MQTT in the [Metadata Service](../system-services-metadata) - and [Data Service](../system-services-data) because of MQTT's missing permission system. - !!! question "Do you miss functionality? Do these limitations affect you?" We strongly encourage you to help us implement it as we are welcoming contributors to open-source software and get diff --git a/.docs/api/dashboard-service.md b/.docs/api/dashboard-service.md deleted file mode 100644 index ea3f565046..0000000000 --- a/.docs/api/dashboard-service.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -author: Martin Weise ---- - -## tl;dr - -!!! debug "Debug Information" - - Image: [`docker.io/bitnami/grafana:10.4.9-debian-12-r0`](https://hub.docker.com/r/bitnami/grafana) - - * Ports: 3000/tcp - * UI: `http://<hostname>/dashboard` - * Management UI: `http://<hostname>:3000` (see [Management](#management)) - * Prometheus: `http://<hostname>/dashboard/metrics` - - To directly access in Kubernetes (for e.g. debugging), forward the svc port to your local machine: - - ```shell - kubectl [-n namespace] port-forward svc/dashboard-service 3000:3000 - ``` - -## Overview - -The Dashboard Service is visualizing the status of DBRepo with charts. The default dashboard provisioner located in -`/etc/grafana/provisioning/dashboards/provider.yaml` checks for new `JSON` dashboard files in `/app/dashboards` every 10 -seconds and makes the available in the Dashboard Service. - -## Management - -The Dashboard Service can be accessed with admin users (see [Identity Service](../../api/identity-service)). In this -case, access the UI via the port `3000` directly to avoid UI Redirects. - -!!! bug "UI Redirects" - - It is a known bug [#460](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/issues/460) - that when being logged-in, the UI randomly redirects when being accessed from the Gateway Service, we therefore - recommend to access port `3000` directly: `http://<hostname>:3000`. Anonmyous users are not affected. - -## Limitations - -* Unintended redirects when being logged-in (see above). - -!!! question "Do you miss functionality? Do these limitations affect you?" - - We strongly encourage you to help us implement it as we are welcoming contributors to open-source software and get - in [contact](../../contact) with us, we happily answer requests for collaboration with attached CV and your programming - experience! - -## Security - -(none) diff --git a/.docs/api/data-service.md b/.docs/api/data-service.md index bc43a5d363..66089a1cd6 100644 --- a/.docs/api/data-service.md +++ b/.docs/api/data-service.md @@ -45,6 +45,19 @@ cache the connection details from the [Metadata Service](../metadata-service) su everytime e.g. a sensor measurement is inserted. By default, this information is stored for 60 minutes. System administrators can disable this behavior by setting `CREDENTIAL_CACHE_TIMEOUT=0` (cache is deleted after 0 seconds). + +## Storage + +The Data Service also is capable to upload files to the S3 backend. The default limit +of [`Tomcat`](https://spring.io/guides/gs/uploading-files#_tuning_file_upload_limits) in Spring Boot is configured to be +`2GB`. You can provide your own limit with setting `MAX_UPLOAD_SIZE`. + +By default, the Data Service removes datasets older than 24 hours on a regular basis every 60 minutes. You can set the +`MAX_AGE` (in seconds) and `S3_STALE_CRON` to fit your use-case. You can disable this feature by setting `S3_STALE_CRON` +to `-`, this may lead to storage issues as no space will be available inevitably. Note +that [Spring Boot uses its own flavor](https://spring.io/blog/2020/11/10/new-in-spring-5-3-improved-cron-expressions#usage) +of cron syntax. + ## Limitations * Views in DBRepo can only have 63-character length (it is assumed only internal views have the maximum length of 64 diff --git a/.docs/api/ui.md b/.docs/api/ui.md index b82058c19b..5393c9ff79 100644 --- a/.docs/api/ui.md +++ b/.docs/api/ui.md @@ -95,13 +95,8 @@ User Interface on development. * Frontend: [Vuetify 3+](https://vuetifyjs.com/en/) * State: [Pinia](https://pinia.vuejs.org/) -### Example - -See the [API Overview](..) page for detailed examples. - ## Limitations -* Changing the OIDC provider URL requires to build the UI from scratch. * When developing locally, the `axios` module does not parse custom headers (such as `X-Count`, `X-Headers`) and/or blocks CORS requests wrongfully. diff --git a/.docs/changelog.md b/.docs/changelog.md index f2cb6b83a1..5f530b9f6e 100644 --- a/.docs/changelog.md +++ b/.docs/changelog.md @@ -2,6 +2,25 @@ author: Martin Weise --- +## v1.8.0 (2025-??-??) + +#### Features + +* Refactored internal Java-based testing data that improves test consistency + in [#510](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/issues/510). +* Added automated dashboard generation for all public databases where each view has an overview of its data and + schema in [#460](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/issues/460). + +#### Changes + +* Removed OpenSearch security plugin from the Docker test deployment and changed to the `bitnami/opensearch` image + of the same version in [#515](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/issues/515). + +#### Fixes + +* Fixed a bug where validation of missing `Principal` object in Java services caused a 400 error instead of a 401 error + in [#512](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/issues/512). + ## v1.7.3 (2025-03-17) [:simple-gitlab: GitLab Release](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/tags/v1.7.3) diff --git a/.docs/concepts/dashboards.md b/.docs/concepts/dashboards.md new file mode 100644 index 0000000000..e6dd2bf22f --- /dev/null +++ b/.docs/concepts/dashboards.md @@ -0,0 +1,27 @@ +--- +author: Martin Weise +--- + +We use [Grafana](https://grafana.com) to display and automatically generate dashboards that describe a dataset. + +## Provisioned Dashboards + +Every provisioned dashboard consists of two areas: + +1. **Unmanaged**: this area can be modified by the database owner and is not affected by provisioning. It is the area + above the "Generated Statistics" row. +2. **Managed**: this area is affected by provisioning, any changes to this area will be overridden and deleted without + notice. Note that the dashboard links are also affected by provisioning. + +Everytime the views of the database change (e.g. a new view is added, a view is deleted) then the dashboard for this +database is provisioned. + +<figure id="fig1" markdown> + +<figcaption>Figure 1: Generated dashboard containing unmanaged (yellow) and managed (green) content.</figcaption> +</figure> + +!!! question "How do I disable managed dashboards?" + + If you prefer not to have automatically-generated dashboards, you can disable managed dashboards for a database + in the UI. Go to **your database** > **Settings** > **Visibility** > **Managed Dashboard** > **Disabled**. \ No newline at end of file diff --git a/.docs/concepts/data-versioning.md b/.docs/concepts/data-versioning.md index 8a9abc667b..45a7cb6e73 100644 --- a/.docs/concepts/data-versioning.md +++ b/.docs/concepts/data-versioning.md @@ -6,34 +6,23 @@ Data is getting bigger and so are expectations of data provisioning in regards t after quality check and not in snapshot intervals), cost-effectiveness (i.e. no duplication of data), transparent, precise citation and many more. -[System-versioned](https://mariadb.com/kb/en/system-versioned-tables/) tables in MariaDB are improved data structures -that keep track of historical data. For each entry in a system-versioned table, a time period is maintained that denotes -the validity time span of this tuple from its start to end. Tuples in system-versioned tables are not *actually* -modified, they are marked as (in-)valid in time periods. - -<figure markdown> - -| ID | Sensor | Temp | Start | End | -|----|--------|------|-------|-----| -| 1 | A | 23.1 | t1 | | -| 2 | B | 25.8 | t2 | | - +System-versioned tables in MariaDB are improved data structures that keep track of historical data. For each entry in a +system-versioned table, a time period is maintained that denotes the validity time span of this tuple from its start to +end. Tuples in system-versioned tables are not *actually* modified, they are marked as (in-)valid in time periods +(c.f. [Fig. 1](#fig1)). + +<figure id="fig1" markdown> + +<figcaption>Fig. 1: Data versioning in MariaDB system-versioned tables.</figcaption> </figure> Assuming that Sensor A was calibrated wrong and an updated measurement is passed to the system-versioned table, the table contents show that the old row with Temp 23.1 is not deleted, but marked as valid in time span (t1, t3). The updated row with Temp 22.1 is marked as valid from time span t3 onwards. -<figure markdown> - -| ID | Sensor | Temp | Start | End | -|----|--------|------|-------|-----| -| 1 | A | 23.1 | t1 | t3 | -| 2 | B | 25.8 | t2 | | -| 1 | A | 22.1 | t3 | | - -</figure> +## Further Reading -System-versioned tables are part of the SQL:2011 standard and have been adopted by many database management system -vendors: MariaDB (10.5 and higher), Google BigQuery, IBM DB2 (12 and higher), SQL Server (2016 and higher), Azure SQL, -PostgreSQL with [temporal tables extension](https://github.com/nearform/temporal_tables), etc. \ No newline at end of file +System-versioned tables are part of the current ISO/IEC 9075-2:2023 ("SQL") standard and have been adopted by many +database management system vendors, e.g. MariaDB (10.5 and higher), Google BigQuery, IBM DB2 (12 and higher), +Cockroach DB, SAP HANA, SQL Server (2016 and higher), Azure SQL, PostgreSQL +with [temporal tables extension](https://github.com/nearform/temporal_tables), etc. \ No newline at end of file diff --git a/.docs/concepts/data-visibility.md b/.docs/concepts/data-visibility.md index 31c6ca3682..e08e717fa1 100644 --- a/.docs/concepts/data-visibility.md +++ b/.docs/concepts/data-visibility.md @@ -2,10 +2,23 @@ author: Martin Weise --- +## Overview + There are several ways to set the visibility of (meta-)data in DBRepo. It is possible to set the data visibility to visible/hidden and the schema to be visible/hidden for each database and separately for each table, each view and each subset of a database. +<figure markdown> + +| Name | `is_public` | `is_schema_public` | UI? | Search? | Dashboard? | +|-----------------------------|-------------|--------------------|--------------------|--------------------|--------------------| +| [Visible](#visibility) | `True` | `True` | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| [Data-only](#data-only) | `True` | `False` | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| [Schema-only](#schema-only) | `False` | `True` | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| [Hidden](#hidden) | `False` | `False` | :x: | :x: | :x: | + +</figure> + ## Visibility In total there are four possible visibility settings that can be applied on database level and then at the subsequent @@ -22,6 +35,8 @@ levels (table, view, subset). We give two examples for better understanding: owner wants the data to be visible to the public (anonymously), so he changes the settings to data=visible, schema=hidden. Now everybody can see the data but not the table(s) that contain the data. +In any case, a Grafana dashboard will be created. + #### Visible !!! info "Possible use-case: data publication supplement to an open-access publication" @@ -40,8 +55,9 @@ Where the resource's schema visibility is hidden but the data is visible. Where the resource's data visibility is hidden but the schema is visible. -#### Draft +#### Hidden !!! info "Possible use-case: project data storage before publication" -Where the resource's data and schema visibility is hidden. It will not be findable even in the search. \ No newline at end of file +Where the resource's data and schema visibility is hidden. It will not be findable even in the search. The automatically +generated Dashboard cannot be viewed anonymously (only users with read-access can view). \ No newline at end of file diff --git a/.docs/concepts/ui.md b/.docs/concepts/ui.md deleted file mode 100644 index ab6848b7ba..0000000000 --- a/.docs/concepts/ui.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -author: Martin Weise ---- - -It provides a graphical interface for a researcher to interact with the API (c.f. Figure 1). - -<figure markdown> -{ .img-border } -<figcaption>Figure 1: User Interface</figcaption> -</figure> - -For examples on how to use the User Interface, visit the [API](../api/) page to find out how to create -users, databases and how to import your data. - -## Server / Client - -TBD - -## Cache - -TBD \ No newline at end of file diff --git a/.docs/images/architecture-data-db.svg b/.docs/images/architecture-data-db.svg deleted file mode 100644 index 788750a77e..0000000000 --- a/.docs/images/architecture-data-db.svg +++ /dev/null @@ -1,3 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="426px" height="214px" viewBox="-0.5 -0.5 426 214"><defs/><g><rect x="0" y="37" width="248" height="130" rx="3.9" ry="3.9" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 246px; height: 1px; padding-top: 164px; margin-left: 1px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-style: italic; white-space: normal; overflow-wrap: normal;">shared filesystem<br />/tmp</div></div></div></foreignObject><text x="124" y="164" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle" font-style="italic">shared filesystem...</text></switch></g><path d="M 47.5 47.63 L 47.5 31 L 47.71 7" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 47.5 52.88 L 44 45.88 L 47.5 47.63 L 51 45.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 22px; margin-left: 48px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">jdbc</div></div></div></foreignObject><text x="48" y="25" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">jdbc</text></switch></g><path d="M 22.5 62.6 C 22.5 57.85 33.69 54 47.5 54 C 54.13 54 60.49 54.91 65.18 56.52 C 69.87 58.13 72.5 60.32 72.5 62.6 L 72.5 109.4 C 72.5 114.15 61.31 118 47.5 118 C 33.69 118 22.5 114.15 22.5 109.4 Z" fill="#dae8fc" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 72.5 62.6 C 72.5 67.35 61.31 71.2 47.5 71.2 C 33.69 71.2 22.5 67.35 22.5 62.6" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="6.5" y="116" width="85" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 89px; height: 1px; padding-top: 126px; margin-left: 5px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">data-db</div></div></div></foreignObject><text x="49" y="130" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">data-db</text></switch></g><path d="M 160 59.63 L 160 37 L 160.1 7" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 160 64.88 L 156.5 57.88 L 160 59.63 L 163.5 57.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 23px; margin-left: 160px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">http</div></div></div></foreignObject><text x="160" y="26" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">http</text></switch></g><path d="M 231.37 86 L 288.63 86" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 226.12 86 L 233.12 82.5 L 231.37 86 L 233.12 89.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 293.88 86 L 286.88 89.5 L 288.63 86 L 286.88 82.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 86px; margin-left: 260px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">S3</div></div></div></foreignObject><text x="260" y="89" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">S3</text></switch></g><rect x="95" y="66" width="130" height="40" rx="6" ry="6" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 86px; margin-left: 96px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Data DB Sidecar</div></div></div></foreignObject><text x="160" y="90" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Data DB Sidecar</text></switch></g><rect x="295" y="66" width="130" height="40" rx="6" ry="6" fill="#e6e6e6" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 86px; margin-left: 296px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Storage Service<br style="border-color: var(--border-color);" />(SeaweedFS)</div></div></div></foreignObject><text x="360" y="90" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Storage Service...</text></switch></g><rect x="242.5" y="177" width="30" height="16" fill="#e6e6e6" stroke="rgb(0, 0, 0)" pointer-events="all"/><rect x="280" y="177" width="140" height="16" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 138px; height: 1px; padding-top: 185px; margin-left: 282px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">External images</div></div></div></foreignObject><text x="282" y="189" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">External images</text></switch></g><rect x="242.5" y="197" width="30" height="16" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><rect x="280" y="197" width="140" height="16" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 138px; height: 1px; padding-top: 205px; margin-left: 282px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Maintained images</div></div></div></foreignObject><text x="282" y="209" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">Maintained images</text></switch></g><rect x="257.5" y="177" width="15" height="16" fill="#dae8fc" stroke="#000000" pointer-events="all"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file diff --git a/.docs/images/architecture-docker-compose.svg b/.docs/images/architecture-docker-compose.svg index 090ac2def7..96d6fc1256 100644 --- a/.docs/images/architecture-docker-compose.svg +++ b/.docs/images/architecture-docker-compose.svg @@ -1,3 +1,3 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="532px" height="614px" viewBox="-0.5 -0.5 532 614" style="background-color: rgb(255, 255, 255);"><defs/><rect fill="#ffffff" width="100%" height="100%" x="0" y="0"/><g><g data-cell-id="0"><g data-cell-id="1"><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-76"><g><rect x="0" y="91" width="530" height="397" rx="7.94" ry="7.94" fill="none" stroke="rgb(0, 0, 0)" stroke-dasharray="3 3" pointer-events="all"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-77"><g><path d="M 336.37 137 L 348 137 L 348 331 L 455 331 L 455 346.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 331.12 137 L 338.12 133.5 L 336.37 137 L 338.12 140.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 455 351.88 L 451.5 344.88 L 455 346.63 L 458.5 344.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-78"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 296px; margin-left: 411px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">HTTP</div></div></div></foreignObject><image x="396.5" y="290" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-79"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 238px; margin-left: 347px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">HTTP</div></div></div></foreignObject><image x="332.5" y="232" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-80"><g><rect x="220" y="488" width="310" height="123" rx="7.38" ry="7.38" fill="none" stroke="rgb(0, 0, 0)" stroke-dasharray="3 3" pointer-events="all"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-81"><g><path d="M 265 399.37 L 265 428.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 265 394.12 L 268.5 401.12 L 265 399.37 L 261.5 401.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 265 433.88 L 261.5 426.88 L 265 428.63 L 268.5 426.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 409px; margin-left: 265px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">LDAP</div></div></div></foreignObject><image x="250.5" y="403" width="29" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-82"><g><rect x="32.5" y="589" width="85" height="20" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 89px; height: 1px; padding-top: 599px; margin-left: 31px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">data-db</div></div></div></foreignObject><image x="31" y="592.5" width="89" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-83"><g><path d="M 42.5 428.63 L 42.5 393" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 42.5 433.88 L 39 426.88 L 42.5 428.63 L 46 426.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-84"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 412px; margin-left: 43px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">AMQP</div></div></div></foreignObject><image x="27" y="406" width="32" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAA/CAYAAAAoosBrAAAAAXNSR0IArs4c6QAADUhJREFUeF7tnHeQFEUUxh+ISDKAKEEBQTIUKskIAorIkXMSYwkKJhRFECQYMICgIjkntQo9wJKoYI6FoIgKCIogJgwlBlDgrF9X9VRvb5ievbkT7ub9dbfb3dP9+usXvtezBbKysrIkknyrgQIRAPLt3quFRwDI3/sfASCf738EgAgAURCYrzEQxQD5evujIDCfb38EgAgAQXmAJk2ayFtvvRWjuOXLl0u7du3SUuaXX34p1apVi+s7ceJEuf3229Ma0+y0detWqVmzZtw4L730krRt2zat8T/++GNZuXKlfPDBB7J9+3b59ttv5c8//xTCqRNPPFFKly6tnnnuuedK69atpXHjxlKwYMHAz0qmm1QDFShQQE466SQpWbKkVK1aVc4//3y1zgsuuCBht0AxwOeffy61a9eOG4jNBwTpSLJForyNGzemM2RMn2HDhsnYsWOzDYDDhw/LvHnz5IknnpAtW7YEmlfFihUVmPv37y/Fixd37psOAJINXr9+fXnyySflkksuiWkSCACDBg0STqYtxx13nHzzzTdSvnx558XphqkWuWnTJjnnnHMCj6k7cCLPOussNTdbgliAzZs3y1VXXSWffPJJ2nOhY6VKlWTatGnSqlUrp3HCBAAPxAqNGTNG7rvvPu/5zgA4ePCgnHHGGfLzzz+rzmz23r17vYEefPDBmIGdVigi9iKZ5JEjR1T3O+64QyZMmOA6VFy7devWyWWXXaY+N8flf1cALFu2THr16iV///133PiY+ubNmyuQnXbaaXL88cfLjz/+qPTy+uuvy9dffx3XBxP92GOPyeDBg33XZeuG8RcvXpyy3z///CO//fabYK1Z/2effRbX/qmnnpJbb71Vfe4MgEWLFqlToGX69OmCed23b5/6qEqVKmozWWAQsRfZqFEj+fDDD9UQKBX/ysLTkWuvvVaZbaRevXoxJ9gFAOvXr5eWLVsK5t8UNn306NFy8cUXp/TtKJ+D8dxzz6n4wBRAcPfdd6dclq2bE044QQ4cOBBIFWvXrpUbb7xRdu3a5fUrUqSIEBvhmpwBcOmll8obb7yhBilUqJB8//33cu+998rMmTO9gV955RXvxLnO0l4koHr44Ye97kuXLpUOHTq4Due1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"/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-85"><g><rect x="10" y="435" width="130" height="40" rx="6" ry="6" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 455px; margin-left: 11px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;">Data Service</div></div></div></foreignObject><image x="11" y="448.5" width="128" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-86"><g><path d="M 75 481.37 L 75 500 L 74.63 518.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 75 476.12 L 78.5 483.12 L 75 481.37 L 71.5 483.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 74.52 523.88 L 71.16 516.81 L 74.63 518.63 L 78.16 516.95 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-87"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 498px; margin-left: 75px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">JDBC</div></div></div></foreignObject><image x="60.5" y="492" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAACm1JREFUeF7tnAWoFG0Xx881Xrsbu7sTuwsVxU5QTLDF7m4xMRC7CyxssTsudjcGJrZer/fjN3yz3+zszM7uvbvDu/ebAyLuPvOcec7/OX3WsKioqChxKNZIIMwBNNZgqRzEATR24ekAGsvwdAB1AI1tEohl53F8qANoLJNALDuOo6H/b4DeuHFDihYtannsWrVqyeHDhw3XLV++XLp162a5R1hYmCRPnlxSp04tqVKlkmzZsknFihWlUqVKUqZMGfnnn38s9zBa0KFDB1m/fr1Pz8aJE0eSJEkiyZIlU/gXKlRIKleuLI0bN5a0adP6tIcvi65cuSL79u2TCxcuyP379+Xly5fy7ds3iRs3rsI7Xbp0Cu+SJUsqvIsVK+bLttZRrp2AentjAO7Ro4f07dtXMmXK5NPh1EX+AGq2cbx48aRLly4yYcIEyZAhg1/81cV///6V1atXy6xZs+TWrVt+7VG4cGEZPny4tG3bVrh0ZmRpcv8tgKoHQEsHDRqkCBYh+0KBAFTlkyVLFtm/f78gYH/ozp070r59e0EzY0JYi7Vr10qOHDkMt7EE9OPHj7J9+3aPhy9evCjLli1zfe6PyS1RooSMHDnSY09u8KdPn+TDhw/y4sULOX36tFy/fl0iIyM91nKwjRs3CgK2Ij2gCLZp06aGj/EOmL7nz5/LpUuXFDfy48cPt7W5c+eWa9euSeLEia1YK9+zR7NmzeTr168e69OkSSPILnv27JI+fXqJHz++IHM0+OTJk/L69WuPZzD9R44cMTTDloCavfGmTZsU9VfJH0Dr1aun3HJfiMNxcebNmyevXr1yewQfx6H52xvpAZ06daoMGzbMF/by7t07GTBggKxbt85t/ezZs2XgwIGWe1y+fFmJAX79+uW2tkKFCjJ58mSpXr26qQnlcnEZxo8fL2fOnHF7HlCvXr3qcaH/9YCqp0BLevXqpfggLaHt586dkwQJEpgKNyaAqpvWqVPHLegjWMOCeCOsTalSpeTx48euZfi/uXPnSp8+fSwvg7qAhhiXUG/VuAxHjx4VgkmVQgZQ9YWnT5/uoV0EC1OmTAkqoDt37nQz05hKtNcbderUSfF3LmGHhSluonXr1j6DqV1IMDV48GC3Z3fs2KGY85AFlBfv2LGjmwlEOx8+fCiZM2c2FFQgNPTevXuSP39+N00z8u3qArQyb968bv6fCB3XEROqW7euHDp0SNmC9A6Ate4j5DSUg3z58kUJIvCvKmGOJk2aFDRAb9++reSFKpFGEbyZUe/evWXRokWur7lsDx48kIQJE8YET8EnE1M0b95catas6RHphySgSGTMmDEyceJEl3By5cqlaKkRBUJDMW0IUaUaNWoo/suI8HlErFqTzGUziuxjhK7BwyEL6JMnTyRnzpxuR6LikidPHo9jBgLQhg0bKpUdldASs+rXzZs3pUiRIm7vQSXI34JIdMAOWUA5LOkK+aJKlPfatWsXUEDRNooY48aNc+0LWJg+s1LkkiVLlIhcJXwpPtgOCmlAW7VqJVu3bnXJCaGPHTs2RoCS+1EAwAKQllCH1lZ3smbNKseOHRNMvBn179/fLfghiFuzZo0deFrXcs3ewq7CgjcpkMstXLjQtaR79+6ydOlSS0CjI1nKjFSYKCiQsngjfbpilVZF533MnglpDUUbMYcqYW6NuioxreWijYDSpk0bSZo0qaX8GzVqJHv37nWtI3ceMmSI5XOBWBDSgE6bNk0RtEoInMRdTzEFVN0vUaJE0rJlSyW69lZupIJz/Phx12ssWLBASGPsoJAGdNSoUUo9VCWiTm3DQP1cDyjrjIIndX1ERISS61IcIPjZs2eP8m+V6Jdu2LBBmjRpYohRgwYN3GrVdqUsvExIAwowBC0qUTWZMWOGpYb6U5xnM7ovlBZ5Tv2hAT6VjkfVqlU9+FHa27Jli+tzivj4XjsopAFFmHRbVCIgIjCyMrn+AqruR1GdzotK5MGkI/q+7NChQ90uFj519+7dduAZuhpKO4pa5vfv312CAlz6pMECFO0kB9VOG6CJ+FUtrVy5UpluUIn3pGqk7YoEC92Q1VD6qfgqrV97//69YRstEJUilQ9BGMGYSkap0t27d6VAgQJumDE7VLZs2WDh6No32oASTWoDC29Na/2QmD8NbjMJUFelvqoSAQotLiMKJKD6KhDdjwMHDniwZUTk6dOnrs8DWVw4ePCgUACpX7++B9+wiIiIKPwA9Uf+YFbokFsR/qpnz56uZQQCFBuMKNCAhoeHS+nSpZVDqbRr1y5lOi7YgM6fP1/69evnYmNWpNdH4JQJMdWMr8SEcDFoPyXPcuXKKZUx6swqhYWHh0fR9VeJxBnTZTUySaI8c+ZM13Peen2BBPT3799SpUoVZfxRJWqlDGGZTcMFUkMBE1BVMst9ETjgkQKpxNjJqVOnlFHN6FLnzp1l1apVrscZ8yS1Uv1zWGRkZBTzKdre4ubNm4U6qTdCQ7Q1TrPCOHsEClA0kmBDP4ZCVUZ7S/XvHShA//z5I/ny5XMbKSEPHjFihKGomE6cM2eO23f43MWLF3sdxTSTu9G0Bi08rIRLQ/nBL/Ou2oSczjxgmU21MbjEjI1KhO3Pnj0zbQ8FAlAuXNeuXd38JvwBSzvmEUyTSy6q72niprSNby3/z58/KzNF+j4t7gmZ+FJGZD8uElMJ+lzWyCoqQRGjkphdrU8icEFTU6RI4SYj/BfO+M2bN67PrYQaE0BJ6jExaIJ+6o9p+hMnTgglOW8UUw3lHSj3UbTQ/g8GBGbbtm3zyhvAGSgDXC1lzJhRiVWYnGRS3ogAkirV6NGjhfloLVWrVk0IjvSu0RXl6jsXPIwpJpLlBpL3MUrIjC6MVGIUg3FCRkLMSA+o2Vwuz3OpKLPhg7ASVGO0uabKg6ICgZD+wvmiod7mcnke0GihcYE4GymSfqaWNtrZs2dN55i074GPI8V6+/atx+sBCOAULFhQmXLAKjItyEXgsho9U7t2bSWiN7KgLkABDD9kNlZhJCg0g9TBKHzWrvf1ty1er/p/vySgoMTH7bYK3NT9AlWcV/cjCANkbz1R/Vm4oLgMtCq6xNmJntFYs8DKLQ/9+fOnULaix6g1v0YvQOhMcELobEWBAJQDEKjhw/z9GUKgAE2ZMqXSNeEdojvshWZRejx//ryV2FzfE6NQjSJF0U4eGm1gWFh49OiRrFixQmkBkaMSkHAATEL58uWVLkOLFi18Dr/9BZSxTH6Fhlnjl2+YJHhaNZbNJBQdQAlYMOe8A6kBJp6fT0QXSP27IVfqu6RfmFd+8qB2dODLlGDx4sWVFA2+vp492pUin6+Xs9BWCTiA2iru4DNzAA2+jG3l4ABqq7iDz8wBNPgytpWDA6it4g4+MwfQ4MvYVg4OoLaKO/jMHECDL2NbOTiA2iru4DNzAA2+jG3l4ABqq7iDz+x//31G8Hk5HGyQgAOoDUK2k4UDqJ3StoGXA6gNQraThQOondK2gZcDqA1CtpOFA6id0raBlwOoDUK2k4UDqJ3StoGXA6gNQraThQOondK2gdd/AGTpUcp01/CWAAAAAElFTkSuQmCC"/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-88"><g><path d="M 146.37 373 L 193.63 373" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 141.12 373 L 148.12 369.5 L 146.37 373 L 148.12 376.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 198.88 373 L 191.88 376.5 L 193.63 373 L 191.88 369.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-89"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 374px; margin-left: 171px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">LDAP</div></div></div></foreignObject><image x="156.5" y="368" width="29" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-90"><g><path d="M 75 346.63 L 75 331 L 180 331 L 180 137 L 193.63 137" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 75 351.88 L 71.5 344.88 L 75 346.63 L 78.5 344.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 198.88 137 L 191.88 140.5 L 193.63 137 L 191.88 133.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-91"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 242px; margin-left: 181px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">HTTP,<div>AMQP</div></div></div></div></foreignObject><image x="165" y="229.5" width="32" height="28.75" xlink:href="data:image/png;base64,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G9VXoOnyyy8X1OuYMWPUf1GsCYZ9b62yB7n88ssnWawIlfWVgVdDu+yyi0qKhKisYX7BLgDghC01DFH/JjHpJ554oqyyyiq5azvC58O45ZZbuhV5crnX35YNN4X99ddfXqJ46KGH1Mngzz77LHmub9++gm3E0uQMgIEDB6pqVRDFCr/99luVcMj5QU0UYtRfnCuX9iABFVW0NN11112yySabuHaXtOM+4llnnVUdjID23ntvGT58ePJ7EQD4ilk3v/vuu+QZJuCaa65RGsGHMJo33XTTioKZaDqqo+UtByEAAJ9MPoYo2kkT8hg2bJgbAGxLGssW5keNGlUxgK233lqh3YfsQaKeKIDA+g8huI6ODp8uVdsbbrhBdtxxR/VvEM/k77rrrs4AWGeddYSvRxOTP3LkSOFDqIaQ4eqrr64+HE0sHWiJySefPLXLUACg84suuqjieBh3FHzxxRduADj00EMF61cTwt1+++2VaqQjPSiEhMqeccYZnWVkD5J7c/l6qYgJof75GllvfcicwA022ECVU+OiBE15GuCFF17o5jaFcEu547etra1iOchbCkICAE02++yzV7wbzVC4BGBUYPzptX6qqaZSanGKKaZQssSYOeeccxLBAhS8BVeyB4n65xzb4osvnnThK3xAyPqmjb6rrrpK2SbcsO0CgM0220xYejThS3ONi699kyYD0y7hdzwDrrzHk7IpJADoG5tKzyN/E8coBADHizhmpIkaNea6jwrjFKom4gQ+frI9yBNOOEGGDBmiAimoTcg3JnDGGWco+wTicAQaiqqae+65ZyEAqNBJwQXT8GNZY3kLQWml3h5//PHUpSU0AOaff375+OOPk2Fw3XwhALB4YVAT15VzV61JRJlQm5oobzpgwAAnedmD1JcZ4K8CBE0+MQG0hwYh5VO4LgX/e/DgwYUAwLZhydBERA2NV60nkiYEZPP8888nPx155JFy+umn97gGYGn+8ccfK2SaCwDCnNxIrevU8u933323G6O4hES5NGFsmZWs8pBgA0DfZ8P6NO+88ybvdo0JvPzyyxVFE/TR6EsvvVR5ApqybAAmw7x6nTX7vvvucwKzayP7HRiW5kem+wmpAVgWsdc0sZxRXiYXANxDj1GmCdV6xBFHdBsnahMDQ5eCIdz5zTffqLh4EWUBgOdaW1uT265cYwKEXPEkIPMZ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"/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-92"><g><rect x="10" y="353" width="130" height="40" rx="6" ry="6" fill="#e6e6e6" stroke="#000000" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 373px; margin-left: 11px;"><div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Broker Service</b><div><i>rabbitmq</i></div></div></div></div></foreignObject><image x="11" y="359" width="128" height="32" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAACACAYAAAB9V9ELAAAAAXNSR0IArs4c6QAAIABJREFUeF7tnQXUdU9Vxrd0gwLSKColKCldAoogqSChIIq0dIqESkiogAFIS4igoKS0IiggIN3doTQCkt4f6wxru90zZ86955z3fu/77LW+9Yf3zpl4Zs6ZZ3bND5hECAgBISAEhIAQOHII/MCRG7EGLASEgBAQAkJACJgIgBaBEBACQkAICIEjiIAIwBGcdA1ZCAgBISAEhIAIgNaAEBACQkAICIEjiIAIwBGcdA1ZCAgBISAEhIAIgNaAEBACQkAICIEjiIAIwBGcdA1ZCAgBISAEhIAIgNaAEBACQkAICIEjiIAIwBGc9GN8yL9lZo+pjOECZvamY3x86r4QyBD42Gbdnyn54dmbNX9NQSYEtkFABGAb1PTMQSIgArA++icws3OY2bnM7AfN7ORmdhIz+x8z+28z+5KZfcDM3mdmn1m/e0eiRRGAIzHN6w5SBGAdvH/BzP5xh6b40H7FzL48fGjfZWb/bmbPN7P/2qHeY/FREYB1Zo3T5vXM7Jc36+xnzOx4nc1+cFjrTzKz13Y+o2LjCIgAjGOkEhMREAGYCNiWxXclALVmvz18bO9tZm/csm/H2mMiAMvO2CnM7J5mdhszO9GOTb3EzJivj+xYjx43EwHQKpgdARGA2SFNK1yKAJTGvmtmvz/8W2dEB9eKCMBy2J/VzF5gZueZsQk0VFcxs9fNWOdRrAr8zpAM/IUDyTqKmGjMOyIgArAjgJ2PL00ASjceuLHL/k5nn47VYiIAy8zcyczszWb2YwtU/3Ezu7CZfWqBulWlEBACWyIgArAlcBMfW4sAfMfMLmlmr5nYv2OpuAjAMrP152Z260bVXzezf9n4BLx1cPTDLwVHwB81s0uY2XlHuvV4M7vJMl1XrUJACGyDgAjANqhNf6ZFAAjjweZaE+bopGZ2lmFzv6GZ/VCjPM5Xvz69i8fMEyIA808V6wvvfTb0TB5hZvcys881mr64mbHJEymQybfM7MflDzD/5KlGIbAtAiIA2yI37bkWAfgrM7vxhOoIw8L7nw9uJnzITzehvmOtqAjA/DP2S2b2zEq1TzOzG3Q2eerB1n+2Svnbbcjrn3bWpWJCQAgsjIAIwMIAD9XPSQCoEnUrqtia4L2NijaTPzGzOyQ//NNGxXt593e0CDczs580s1MNfycc7PUjkB3HzC5tZj9rZpcZkpecZogdJ178s2aGTfhVmzKvGP5xOuyVXQjAxcyMcWbe7W8Z+k0fW8Ip9spmdgUzO6eZMTbw+eJwin7HQNCeO4y1Z1xXNzM0QVGI8ji+meHkiWDeuauZMQ7aBeu7mNkf9TTSKEMdD678fsUNLi+bUP91NmvmGaE8/f/ERgPw5Ik+Kozz58zschvtAg6KjBktBY6FEF1CYZ+3MUG8uLHeY9d3Xf+3N7NfreBxDTN7zgSsHr7Rqty2Up41wRoqMlcUwIk37x5zCq7g+8NmdtphLX3ezD48hG+CK/Ne1t6EYX2/6BLvyjb90DMVBEQA1lkacxMAeo06Fm1AJvz9C5Xffm/zUt8n+Y0wwgsOf3/0ZpO+aVKmRQCOO5wUf3fYGHuRJW78QYP6+JsdD21LANhA2DAy7QgfVz6GEJOanH3zA9gRG8/GOybkbbi/mT20Y3Nig4OYZHLKIdEOpp8nJm3PQQDY/KknkwuZ2X+MDdb9TtIgxs1GQnIg/jHHNUKaVQ0RvV9DyxWf+dAmT8adG1oMX37X9c+GiQYuk8dN9MgHI9ZlFEgyHv/+fdiVADAvvNOYG0/fOZ/vHXCdQmqoesl3pbPrKtaDgAhAD0q7l1mCAHACgrlH+drgM1Bj7rXTHlnceHF/Y9iMs1HXCACqX059XoMwFbV/G5LOjHmKb0MA8HD/VzP76aRTnNzRWLQ0KqRafcqA6zbjQmPQ0iyAK+QkkzNvTvj0Hw0FH/EocxCA2qZIW2waj5066C3L8z2672bjg0RuIzgycqJunVp3Xf+kmv7koI2Iffz0sHH3nJpbc47PRXTI3IUAoDlBw4Sz5jbyhEEb2KOpW/pd2ab/eqaCgAjAOktjbgLAqYHTQyao7VDx1YQEL5kdlo8Xjoac2Nh0MskIAGVR5c8RPoaaGN+GVuKYqQSA0/o/mNnVkgFxwmJuXt7A69fMDD+NnlN/rRo2d8whtVPwTw0bfPb8uTd/ZIO+bqXyOQgAPih85DP56ECQauttzjeopnma0gZrG1+DJdf/IzchjbeoNMD67YnCeUDDHMJG/epQ/7YEAI0F5PcnpoCYlH2WmV17hFyt8a7sOAw97hEQAVhnPcxJAFC1/+0mZvtala6zUUQbrC96840K8FHJs+R0Z3PF6asmkQBwIiU07KKNZ9hAsPdjt8U0wWn7Rxrl2Swp841KmakEAPv4nSp13WiwS9e6w+aLz0PmHU9YHDiS4pmx8aHFbkv/sNtHQS1ei/bAl4D0zpkwz3+3ORkz75nMQQBw2oP41YTxkWgKksA6WUKYC4hWJpy4sZejJfrqEE1A+V+slMe+/dLKb3Osf8gcpDeTP9ys3Xt0APTOSsTE+yub9TYEgO875go0UJmgqYAcvG0zv5TlMq2LNPqOmeWPK7+v9a50QKsivQiIAPQitVu5XQkAGxAnbU4Xvz0kVcl6hDMUbbVUkDj2/WXyMDkE/tmp8fno8xHF1IAdmvAunkUVXaR1isEH4Zab5/4maev6Qx+4VCYTQs6wAWcyhQAQd15TX6Nmpv8tgdxARqJgNsDckdnGLzU4peFs5QVtAxn2sKtG4aKdd1c6QjpdNjQEDQJzgk0dR0a0LhC2OVT0tNPSHNE+my/aEv6BDYmDetTCIzB/z4kSrU+2HlC543CZhSBC7DIHSDZRSBVOlFHmWP98N9GIoDGLwmaKRqclbJY4i2byBxUfnW0IQGv9Ux/3PETT02UHjVlx/PV9xLwIef/PpONrvStja0m/T0BABGACWDsUXSMREB9l7G9cGNSS1gZansOWCttvOW6Ri4CPIPbpKGwKfEg4sdWEDZTNLFuDfGD40PDBidJLAGifTS07jXOdMBtBS8hcV0tfi/o3I1Glvpqd+SGDF39sF/VsRgx8OU6chONhJllC2LTQdmR+BrX2mB+eQV3NSfKVG/U7nuRTpYYXpJR+1TZL2uGES6rhKGgHSGs8Zf2Usj3rn7nkHckEYgZJqwkaAjRCmUAGs7UwlQDwXoFblpcBYoTW7g2VPvyKmT298huaIExSXtZ8V6auLZVvICACsM7yWJIAoDpGLYcHco/z0RgB+OtGmJNHq/URy5yYMqSf2ogxxxkRr/cpH3BUmJwY2VC5iS5LmMSmgKo+Ox36tiAJYBUFgoW6HxNATSBFaFBOGAqgyubUGNseIwBoBzC/jJG7XVcz+QDQKEwhAb5NNmy0IoSQsYHUzBqxn2x4mY0agli0H7Wx8TuaryiYydjIpqwfyvaufyJmahsooYKYLGoCsWTTjMJpvGZOm0oAarjQJnNDNEtLanOCBvB84cE135Vd17iedwiIAKyzHJYgAHxscW7jg8VJdyx+vYy0RQA48WMPZqMaE057qLszwdu+5VVfnml9pIgZx84bZUwDQEgYTliogKPwwUYz0GPHfs8QFRHrQNOCSnpMaipRNo54c+MYAWBj/vuxBmf6nf6R0S9+5Lepno2ZE2NLE0S4W02rwS2XRAW0BFMIaz9qejDT4HMSSfFc658+QXCyddZaIxDAmpMrEQx/VhnsVALQCu3sWU/kOsiSjfHdwfTiQxTXfFe2WYd6poKACMA6S2MJAuB7jsMcGwTx/TVbcinf+gBycsu85SNK2Lex8WcnRWLpa1EEsR6eZzPO7ppnI88yyrX6zykZJ6zMlk19fNDGwgzpI2FTmZ2T3/BpwLdhTP6iot3ALssG66VFAFCpo3GYw9Y+1ufyO98FPL7xN8EHYpfvBBswyXe4pCrL80A7nNYzoX20RGOCL0IWT08imujcOMf6L/3hfYvqcH5jrgjRzXJx1KJweOZMg89NNt6pBACTTC3sj76hoZpD1n5X5uiz6hgQ2OXFFoj9CCxNAEpPIALED7ecwlofwF6PclTtteQwnPqu1A9N9RRFFVlGw1b/OXXjoZ0Jcfwk0+kRkgLFMKye53rKcMKL2d9aBAAb91V7Kl6oDGSO9YvWA+1JdiVtT9Ns5ISJRbn7QNp66phaBic3wte8zLH+S30t500cXTMHWLQDZMmMgmmqFtVA2akEAK1I5lQJKaklEJuKL+XXfle26aOeqSAgArDO0mgRAD5QdxvpBjHoXNjCKYfMbIT68fGpCR/a2smp9QGM6Udr9XPCxuyQydRb32qqcuo+Y2KOGPNhqPWZkyinWU5GY0LYVOZANvZcz++E9JEu10uLAHB6roUx9rQ3dxkc3NCkoG3hhAkZzDQ4Wbs4XmIv9kIWSNIbLyFoENDEeJlj/fv6cILknYyS3aGATwr5NjK8cPBsheBOIQDUX8uqiW2/9e2YOg9rvytT+6fyDQREANZZHruGAcZeEhPOpvDAinqWNLSozzM1X+sDiE2/Z4OEgGSnG/o5logljqXmxU057jx4+4QP+NhsoirmYz3mAMjpDd+KJSTTkLQIALkDah7jS/Rvap0QUzQDnLaxG0fHR18ftn6uD/abE9EUYxEZU/tUyuOoikmolwD0rn9fXy0UkZM2qnZvuuF+jcyxlfeVFNWEWdZkCgGgXcJ3M+EdOP+2gCbPrf2uzNh1VSUCsM4amJsAlF6jTuaUk0ktlr5FADIHtazuVpjQVAJAIh3wyYSLiEiY0vsB75nNMQ9t6miNr6eNVhmiE1CbemkRgDsO9wns2u4az6OxYUNvmSxQf5NvoggRIz0+Fdv0H+0CJobe9dO7/n192O1x6ssyRWI28VkmcdrlwqAoPVd4TyEALcdKnHOzlNjb4HsQ78q2/dRzCQIiAOssi6UIQCuDHNn3siQ2Y170hNGNyZwmgFY0AaeieJLpMQGQUpYwq3K5kR8PtlFio1uRDj+/UXO/qALCVIIzhiW/twgANzc+rKeSPSnDRvjCRvhe9OxvJZPq8VafOuw51n9sE0KDFiQK81Zu3iy3GMYEUTzDequZ1EqdUwgAvjNZDg3qqmUanIpjKb/2u7JtP/WcCMCBrYGlCAAEDse/zKaIt3vmsDXHBxAVYgxlK+BOdQIkYQpq4SjY7IkSiN7vrf5zixq/c9JCnQu5yGQs1rt1UQvpcH9z5pW0jwQAVf6UG/w8JK3bDbHJe61V6ypiVOacjueUOdZ/7E8tvbC3t5OkKwvlrOWGiG1MIQA8CwHIrr0m6iZL3rUtxmu/K9v2U8+JABzYGliKAOALAAHI1I/YE7HPRpnjA8iHBRtnZu/FzotatEf4EHEizzRR2P7xAZjS/2jDJeFJlgyGOslE2LqCl/C7rF9k5GODm1MOkgDg5Y+phfS0/Cv/m9juS245yFasOxEq/qppHE+5qS6TLOvcll36/mNzrP/YB5z7INxZ1skSiohzLMmtovQ6eU4lANj6a6p+5rx19fUUjEkTvua7MqVvKjuCgEwA6yyRpQgALzgveiak6c1O1nN9AFve+6RvJSf6mOANX7u4KJ4US11T+k86YZK1ZCch0qSiyah5S9cuayHBDE5WtefGxpz9flAEAM0RXulZxkT6ia8CPgtTBeKACSoTEvtgBihCjgP6kAn+IVma36n98eWnrJ8p7ZBDIwvju9VwaRQnfUxaUXr9DqYSgJZvBc6aY06upLsmJXImnPq9BnDNd2XKnKjsCAIiAOsskaUIQOtaUtTfWUz8XB9AQheJQsgki3XPypHqtZZVjw8/G0CUqf1nw6ndwscYyJiWScs7vSdckit2UcOSUAg/Bv4RlUEmtSgHRQDoBzfwZRkX+Y0PO5v51Pz+kLoY6ljGnKn1SV6Vhaah3cKxENNOTbi0hrS2BePy3ywJD3VMXT+9Xwg2VXJNREG7wRokXDAKJJQLonpkKgFoJVjqSfhFv1nnUdDYQYD9bZ1rvis9WKlMJwIiAJ1A7VhsbgLAvOHNzh0AtTnE+xkv6ChzfQBbN7jxcSBGvJYrnT61rn/FU5lUtNndBlP7jxmEDSYzS2APxSGQj2uU1gUnaF24NrV2ZXHtBMzmz6k6XjJ0kARgLJELdmxU9rXrbz1urAnWXC2sD63J6ZOb/bhUh8t1MoHkcoquCbc6ZjdHQgTQgEVnuKnrp/fVZ53RZrw6mg0TNX+WMTALU6y1N5UAYI4g+yUEKgrvFWYstHiZsPbR/GSmRQgj5NbLmu9K73yoXAcCIgAdIM1QpEUAYNq1E6pvmg8L6lISr2DXzuzjpTzOW0QIYAaIMucHkA8vH+BM+BiyyUdvevwWyITHRpHZTKmL0yMJczLZpv9kAKw5k2WJeUq7rXSqOBryIcQk4AU7Oo6QWTrkmlbmIAkAfX/m5ppnPO5bwiUwePdj2kGdjY8JTprYgEkOBJFAa9NyMMuS49Ammek+WvFZ4XdMBuRCiNoTcg+gys5SUteu1d1m/fR+AsiNQY6MKGgwTh3+yCZMro7sHc3am0oAqIMES9khgN94P8EvmmpI8sQ7kREH8mdAzGNuDupb613pnQuV60BABKADpBmKrJUKuHS1lTxmzg8gH15OhjGu3UPGxsEtZyQ7ISoBlT/5w2sSncRiuW36zzontW/tpjVSF2c3yuHLQN8zHwL6xYcdIvC+YeOjPHZgSE4UtAXYe7OP50ETAIglJ77MZ2SG5f+9KjB/oO6uJahBy0D4Zk3A+LmDsx39JcQVLUwmaC3YqHa5TnqbcbccGmN9nL6z0MFau9sQAAg2pLO27svGjUaLzZ312XL8xFxWy1q61ruyzbzomQoCIgDrLI01CQCe76QCrl0es80G2kKJky4fs+zinqno4pVPatFW+Nm2/YekcCtdtubZMPiAZe2izsbGuYtw2iN0MMsCR70HTQDoA5szJ/zei5ym4AFR4pKpsfsVOM2TWW4XwfaPervmHLvt+unpE4SYaICeXPtZWuRWG9sQAOrjvWTdY3rZRdBu4OeQ+bCUetd4V3YZg54NCIgArLMk1iAAbPgPHTKftV7SJT6AqDdRG+4SHofXMn4NY971u/QfJy0+YpnUMidSlmcI48pUzWMr6OtDprva5r8vBIB+4NyFjRcSNpegWcDxb+yWStrD5kzyHG7M20YwI6DWjj4Wvq5d1k9Pn9BgceNjSyCabMg1R8Xs2W0JAHVxhwgpt1tmw1Z/yX3B5t5zI+XS70rPHKhMJwIiAJ1A7VhsSQKAapmXGztpT+jdUh9A1N7Y/PEJIPa5V8iihr22FpMf69ml/zgCEt8eHbVoA3UxMfA4TmWChgCfh8wzujZWohiww47Nyz5oAPwYUE1zfS/mmt6LfvzzEFBOnWRNrF3121ofaAvwnEeN3yO8A2y8vAOtiAHq2mX99PSF/BIvGynIBWAQlSmyCwGgHZwUIdjcXdCjoeAZohRI2tT7bpbxLPmuTMFMZUcQEAFYZ4nMQQCw0X15cDrjpIOKk9Ci5yRe1a1RLf0BZMMg/JB0wdhpcSZCQ8CmSzgZH2jsuWz8pD/F43+K7Np/NgkSzGSCjXlsg4ck4OzGhx6igz8DjnA4xX1u+Giy+aERIQdBj+wbASh9xqsf/whs7URLnH0YK45+Jd0svh14upPREf8GfD4gPrXY/h48KMO3iXVEqln+C3kDa1Lp0iaqdtYOufbZUGu+BbG9XdfPWP/RYrBZt65N3ibF8a4EoPT7FMPdG7yfxPOj9eH9hMDzfpIq+DWDvwXvaBaJM4ZB+X2Jd6W3bZXrQEAEoAMkFRECQkAICAEhcNgQEAE4bDOq8QgBISAEhIAQ6EBABKADJBURAkJACAgBIXDYEBABOGwzqvEIASEgBISAEOhAQASgAyQVEQJCQAgIASFw2BAQAThsM6rxCAEhIASEgBDoQEAEoAMkFRECQkAICAEhcNgQEAE4bDOq8QgBISAEhIAQ6EBABKADJBURAkJACAgBIXDYEBABOGwzqvEIASEgBISAEOhAQASgAyQVEQJCQAgIASFw2BAQAThsM6rxCAEhIASEgBDoQEAEoAMkFRECQkAICAEhcNgQEAE4bDOq8QgBISAEhIAQ6EBABKADJBURAkJACAgBIXDYEBABOGwzqvEIASEgBISAEOhAQASgAyQVEQJCQAgIASFw2BAQAThsM6rxCAEhIASEgBDoQEAEoAMkFRECQkAICAEhcNgQEAE4bDOq8QgBISAEhIAQ6EBABKADJBURAkJACAgBIXDYEBABOGwzqvEcNAI/Z2Yvdp34kpmdysy+u0DH7m9m93D1PtfMrr5AO1T5FjP7KVf3zc3s0Qu1pWqFgBBYAQERgBVAVhNHCoG7mdkD3YhfYWaXWwiBfzSzX3B1//7mf//eAm2dyMy+bGbHc3X/jJm9foG2VKUQEAIrISACsBLQaubIIPA3ZnZdN9qHmtkdFxr9p8zsdK7ua5jZcxZo6yJm9lpX7zfN7ORm9j8LtKUqhYAQWAkBEYCVgFYzRwaB95jZ2d1ob2hmT1lg9Gc0s4+Hes9iZh9boK1bbIjGI129bzaz8zfa+VEzu/Hw+xvN7NkL9ElVCgEhsCMCIgA7AqjHhYBD4GSb0z42f/9e/eRGI/DOBVD6RTN7nqv3M0EbMGeTmAD4VwQNwH83GoAsQBqQ3wkmkTn7pbqEgBDYAQERgB3A06NCICBwaTP7F/c3NslTmNl3FkDqXmb2B67eF27U9FdeoJ2pVZ7azD5qZiceHsQp8qVTK1F5ISAElkdABGB5jNXC0UHgtmb2cDfcfzOzSy40/GeZ2bVc3Q8ws99dqK0p1UZi8kNm9vkpFaisEBAC6yAgArAOzmrlaCDwRDP7dTfUPzez2yw09A+Z2Y+4uq+9CdN75kJt9VZ7QjP7sDNFfMDMfrz3YZUTAkJgXQREANbFW60dbgRwjvtpN8TfMDNIwdzyg2b2uVDp2TaOd5CCg5SbmNljXQeeESIiDrJvalsICIGAgAiAlsQ+I8D6xI5e7MnY0k8yhJ8d18xuaWa/aWbnHpzUesLTzmVmV9sk67mEmZ1zOK3ivEeini+YGV78rx489986ARxOv8TKH989c74hgQ5/urCZ/ZqZ4SfwY2ZGm18ZvPb/2cwe48qONXuFYFdHxY6qHTnOJj7/qmaGRoBY/TMP2FDmvUOSokdtsPv0WCPD70/dYHIDVzZqNaIpYqxaMAfjIjGXAX1//vAjGo5bm9nPD5oEMIb4vMnM/noTbUHfvl1pkNwLrA1MMERMsHY+YWavMrNHmNnrxjqa/I4/x6+aGfhf0MxOM6zNL5rZu8wMPwzm0WNLwiTwLvLy4fktmtcjQmBeBEQA5sVTtc2LABuAP9XyvznpsnmS9S4m2CHkjA9zJpCEPwmJc8Z6y+bGBkS8/ZiwwftN5WuDA+Aphw2ADbklEBA2ptub2bdGyt7ZzB7iyuBkh7MdhAONQytEj8e+ama/vTEhPGFsUGb2djMjkqEIp/zHu/8fTRGtKiFI4OGzIr4vmAnOY2bvGHD/YzNj068JRI1oCO9jgHaE/l1zZGxTfCYgm2B+z2HttaqG1N1qM6YnD4X+zsx+2T2Aj8T9OnBXESGwOAIiAItDrAZ2QOBKw6mqVPGSzemcv5HshpNiFE5fN0v+zmbAaRHtwVTBjn3Zjvh62v1LVzkZADmBsjlDWnqFky2nzJZQ5vquABkAIR+o3KeMkT6DWU3QvLBpswEWgWBBtBC0Dp/tHdgQIQGWRdjc0fCU+jmln3TYbO/bWe/LNqf6Kw5lOZFzwvYpi1vV9KQzBs9/GAhWZ5e+VwxtD2uOiAi0MEXQHtBHiRA4cAREAA58CtSBBgJ32py4/sj9zgn5bcNJmT//1/AxZRPiI0sWPjZHLxfbaApQsceTJBsH6mfU0WxyhK+hmmfTxkzghed/dmSmfOw7RVH7XmVzGj3r8Bwn6b8fnOSI2ac90vheJ+QNoDibO2OpCXkFfB9J/8udACcYTtdsMBAPEgWRlwBNCtkJMXt4+fpgPqn5DmQZANG+fGOohNTAbLrIL5nZX7jKcQYEey9oRVCXF8FfAr+JIjxzl4HI8DdMMMwn6nVU/WzsmH38hko5SOE/DWvhUoMGheRDzO8nB00M88fc+nTGaHZIWlTLaIg55QVD/X4c7x/uQSDKg7mEJKB9IflR0UqBO+YePz4IDvdCsN4kQuDAERABOPApUAcaCPyVmd3I/U7cO6F22GI5If7hSDpaPvacVs/r6kD9zWb1okq7fPQ5UaPu9cLJ1cf4x8dJlcuGWYR22BjYhNkYarHwaDI4YfpTNhfvsKFkwgmZzYV+xrbYkMCLDSoT7ijgrgIvf7pRod+uUj5qNVoZAB+0MS3c1dUD2QHnlpAl8UmuABv96Qc1+x0GQhEvUfrhIbFS8XngcS4lAhPU9O/eEIbrDX4CsW0iNKJTJhs22ppM7j6ssYgXxLRmpvGhoG/YmKou5B7GtIGJQyIE9gIBEYC9mAZ1ooIAm7e3Z/Nxx4ms17ueOHns+F68k1kNeDZXTtnncAXYPMlqlwmbN6e64qxYynDq5+T5nyMzzAZ201CGkykn4iic4v81+TvqZohGy3+AfqJB8dqD4leRdTFqNdg8wT4TbkDED6HIvQeS1ho6Phls9F44JeMvAYGoCUQQW3oRTuFoInByvMxwKq89CzlC01OEDfvPksI4DuKf4OcUu74npLU2Im6lXO/zLcz0mxCYDQERgNmgVEUzI8DpHYeqqLqfcrkOtmGux2XDgziw2XkbdKvL2PO9P0HLNo+GIUYMcCLFMZBNaUxQW78yFMI0gANZFJz34oYFUYIYoNIfEzQb0b7OqTojKTjZeTU+mgI0BpmwCZ/W/UCkhU9VnD2D2j46cuIg5zf37DnMGdFEwtjRwIxFbuA86v1H7hMyKpb2MGfgzFcEMxN3PPQkNTqJhjNgAAAOqUlEQVTTxtzwkaCloR7IzsPGJki/C4G1EBABWAtptTMVgWgf5nk2cDzSsSUvLfF02iIAUZVN31BH48XeI6j1ITteiD7A5yHK4wZbtv/7lKt58UsoYXaljuJ57+tEC4JWwzsVcrqORIVnsMnj7OaFv8XLiuJYCOnDa78ImyZal7FbBjEtxKRH+IrgPzAmMWyRZ7yfCc8zH/gOcONhkRpRqLWHGSc6I46Zkcb6rt+FwKwIiADMCqcqmxGBzF7b47U9VxdQQftQMk7dqIszQStB+F4RTos43rUuzIn14DPg1c3ZxsQz0SyCLwPOhL0SHft4LiMQaE38JUbY4nFgQ7MRhdO+v4a452IiTBwfDBXV1PGxPTQR/iRN/gdO3WOmFuqJvhqsM++HQBnU/PifFMEsAaGBFPQKTohon4q08OutU+WEwKwIiADMCqcqmxEBPvDeOY2N53Sdau45uhHj00npSxKcTIgS8KaFKWaKUh+e9T6JEKp+71VPObz8OZXz3yLXCJvv2NhJjEMyHC+YMPBX8EIkgo+owHb+E5XKY/7/HlIS/TPwXcDu3rOJRxs7an2/2bYwIAoBJ9IimGlw1vMSY/fxucBMM0Wevsln8CvuAdaTvyZ6Sl0qKwQWQUAEYBFYVekMCMRNlVOaz7M/pQlO1sRf45HNyZb89Kh3CWlDxe098Eu9JKzxcvkh1Cy2yzuEXdiXr5Wt9ZlnyULoBYc+fwrlN2Lw/WaF3ZtwQrQHvQJhIOrAS+ZwGL362RTxS8gkqtVbDpPleSItcBQs8u+bsL2Ldg4i+iZkZCmrKiaW4mTPGvAmJdYC4aVoO4psk7yHnBUlPwH1/G0gBJ1DVTEhsBwCIgDLYauad0OADdFvqqhlS3a13ppx/CNGntPhlAQ5Wf21W+0gE5zuiqCpYFMey+bn24h18Ft2jW7MtU+MOpnwpkisA9X0iVxsf6krevVz0yDZ8zJBlQ+JKIKTHkmJWoLJANNBkVY4oq8H3wQwxk5fxCcnarUZyQ8mDp/lkGcJvyTVsBdSEbOhT5FoqiFPA2GrEiGwNwiIAOzNVKgjDgHCtGIsO+rnWnx7Bh6nS05uPvHLtiCzwfnQMV8Pp2K/2eHZjgZgirDZs+F6wRkuRhBEz/SpjmnUf/8haVBpi/z42M+jkM+e6IAiOA+SWCcKJ+XoGZ/1PT4XM+T1EjxSOhNPXwSHQbQ5+AGMSdQ6EDpJxj4vJAvC0bIIBAlC1+P9X56BpODU6X06rhyyWo71Vb8LgcUREAFYHGI1sAUC5E73IXD+spue6rL4cp4jXS7hYziCsalTL2r0mGzmKSEdb0v9zanY5wfAdyHGto/1mdMhG3MRVNJsavGiGxL9XNyVw0kRZ7MpEk/2nGw54XqBEHws/A37fOYER54Dn9o2y/cf+8eGiprdCx7z5CgYE9IkMz9FMIlgx++RGAKYRWrEtQMJ8/kgetqJDpQ8g/8KzpESIbA3CIgA7M1UqCMOAeLUfSa+KTeoYXeN6lo2LvwHetW4pAf2Dlst9S03wJGKtsg2kQox4uA1YaOn7kz1HW/W61lEMfQus9djVvAx/GgDyNCXyR1DuCNhgoQLtiTOUY3wZHUQWkmbRbh+OCZRqrVNWCJEpkiWl5/wQp/BMCNIYzjHCJaalmWsHv0uBBZFQARgUXhV+ZYIsPl42zYffU5rPRJPyZzwcf7zauNWPcSlE8bn3w3C7Gqpg6OqHO1FzD441m9O214Nn403qr6pk5M0G3qvQGr8Vbw8lyXswd7vb6yD5KDCzgS/DK9G77HlE+L4YFcZGpl4b0BtTJBBfy8DyXqIChgTzBnxCuTMryM6GD4tXIc81g6/4/Dnb38k70J2eVVPXSojBBZDQARgMWhV8Q4IxJMaat94yU9WPZsotmW/rqeQB+qM5gf+VsuUl6nKp0YAoPomaYwXTshcVuQlqr75DY91PNl7hVBGn8kP+zkkIuYriGFwOK+hBckEtb3Pb9+TpjneZsjFSVzy0yOYbbyHPiYRNCZjAonzPgy1FMhxPK38D1mbhGhi3vBJhHqyG471X78LgdkREAGYHVJVuCMCpJONtlI8tX1SmloTWZY74rez3Pm1OjjxcZlMEQhFudEvPsOpDruyl5a2IGsTZ0Wc04qwwaFuLzfulb+TrY5LaLzgvT+WNc+Xj6fnWhRBzIFQ8+qnfZzdfBgldzf4G/CyMaONQaNRZOxa4lIuOofiI0FMf08YZPSzqF1WFMeOT0DEvbXEfyu5YnkbrdCOr5EeFwLjCIgAjGOkEusigEOaV7fzcec01XPS5fT5+NBdTunYYHuEkywhYD5ygJh5ktZkEjdvynCS5UTbI2ycHwgEA09/4tqjxM2b39lEuUGvR3Bko6x/57P7BthQCcH05Wpe/WQQJH6/CJ74hOe1PPIJxySMz5OG3lTGqNVRrxeZcrte1GrULiuKGoAp+ScYExdWEdbp5WxDGuueeVIZIbAaAiIAq0GthjoR4LpaHNOKYJON99jXqiJ5zhPCj70EgCx8qN25w91LK9QuOu/xXIswxH7jMOjJAtEIxKFnF9pE5z3qIv3wwztxjZoNzCycqKOmgfH7a49bXv3R2Q2C4U/2Wdew9TOnRSALELweTUYMYczC+GpwxFsAa7dCRqLFXHAvRY9E51WegUz5+w566lEZIbAKAiIAq8CsRiYgQJgeKucitRNxVmUMSaMMp/eY+S4+y3tAaBnpb9kQ/Q2EnDrjxTPleezIZJfzgloap8MxNTiJc14/2ODL8zWHsyxvPs/QPj4E8SKhOD4c/QgX9O97LVrB32dPPaQNjqSo1B81ID1k7RbBaQ+c/JXPraWCDd/fe9B74RIJpTCt+PHXiGHMgEh/IGXRTyP2EzU/2on4Td0mL8SE10VFhcD2CIgAbI+dnlwGAVSoPu6azHVRrV9rmY2bXPLeAYs4cTQI8aRb6uCSF7QGON7hmY7939v8azZ97p/3eesxVeC7wGaNWp/QQJ8h0PeZOHEy4flQQ06KbDTciBclJhvipE0IIO8vmyI552skgCyInJRJeVsEr3t8I7JshWCNKaUI9x/gPJjJQ0J0BnhAiFq3NcZrlp8Y2mutqk8N8fSlTK/DZSSGrcuKcCokksQL+SNYH9lFSCT7IWoCHwPmg3Xgs05O9SFY5q1SrUIgQUAEQMtinxDAfsxHlpj3Ir1pXkt5PK75IHvhFMbJtiSawVObC3AwGaDGxu5NghxCD3H68zHvkAOc1NgseV9K0iDC4nCiK8LpF+92vMYRNgJi1NmgqRMTAyp3VM949PsLffBvQNOASSGTeCrFKx+SxKkTQZ3P1cHE4OOBzmaPZgBNSkzygymBxDnxJr7Sbkxh2yJg0bGOOnC45CIccCJ7I6TK+2DgM4DNv0jvDYDE78frhWvpmSOGMVfB2GVFr0hyGZBLgvlEE8B8oUHANAA5KymrmXvWkM8ayVXRPnFRZYr1ZyGwPgIiAOtjrhbrCHBS9x77nNo5zddO71lNeKaz4Wdx5ZxQ2cjZ4P3ax+5LnnhO0Wyi8eY37OCEyrHJYudFovobWzze4hCJKamA6Q/pZ1v3HES7NGYNNlJMCGeYsKAYP2mHa+YJSAoYeHLSImBc3tMKwYMEQOqKRgAnObD0KXJ7ozRixEUtjC+DI2Z2bIU18jxaHDRHEIxeefSQvCpGsOBY2puDorctlRMCsyAgAjALjKpkJgRuHa7c5TTKBjRVOJHhvT12RSwOaOQJwNGvkAxOzfghZOJv6CO5C2GHRW6wUctjw4ewoNb22eRq/SfigCx2bOQ1QRuCecCbNUpaXrQA+CegzRgTyoFvTIbjn8MWD+ZFwAdtQouAxZh+X18MoWQz9Ol+OUkzV2M+DNQZCRfJlooGZGzsMewQk4mPJsiex0yDRob/tgRCg+MqyYiiVmhKhsOxMeh3ITA7AiIAs0OqCndAABUrKuciXMpCXPW2QqpX7NmXHGzHnEBRgZNT4KUDSYg572mLEznhfOQf4DSMAxm+CfyNDYz3BlW7PyHGK3WxO3PBDTblswz1sJGzKXJqJizN59CvjTHeThdPvoQs4ryICeECwzg5eTNO8tjjxId2oSdcMEZR9Djo0f5dB3MKGLDpcQoGJ0wkj3EDI2Og13SA6dgGWx6PERe9V/RmYYf4XtT8M/w8MDbMNWhccOzE7wMyhDmAqAJIFf++ODxE+uqiIeJPUzIcbrvG9ZwQ2BoBEYCtodODQkAICIH/g0C8R2BKhkNBKQRWR0AEYHXI1aAQEAKHFIGYa6A3w+EhhUPD2ncERAD2fYbUPyEgBI4FBLIMir0ZDo+F8amPhxABEYBDOKkakhAQAqsjEDMoEt2B4ya3UUqEwF4iIAKwl9OiTgkBIXCMIRBvWpySQvgYG6q6e1gQEAE4LDOpcQgBIXCQCBCxQvRIkSmXCB1kv9X2EUZABOAIT76GLgSEwGwIkDjI56yYclHTbJ1QRUJgCgIiAFPQUlkhIASEwP9HgHwBJDPyl0hdNtyqKNyEwN4hIAKwd1OiDgkBIXCMIcC9C/62QBIxnapyedAxNjR19zAjIAJwmGdXYxMCQmANBGKGQ/IBcBGSRAjsNQIiAHs9PeqcEBACQkAICIFlEBABWAZX1SoEhIAQEAJCYK8REAHY6+lR54SAEBACQkAILIOACMAyuKpWISAEhIAQEAJ7jYAIwF5PjzonBISAEBACQmAZBEQAlsFVtQoBISAEhIAQ2GsERAD2enrUOSEgBISAEBACyyAgArAMrqpVCAgBISAEhMBeIyACsNfTo84JASEgBISAEFgGARGAZXBVrUJACAgBISAE9hoBEYC9nh51TggIASEgBITAMgiIACyDq2oVAkJACAgBIbDXCIgA7PX0qHNCQAgIASEgBJZBQARgGVxVqxAQAkJACAiBvUZABGCvp0edEwJCQAgIASGwDAIiAMvgqlqFgBAQAkJACOw1AiIAez096pwQEAJCQAgIgWUQEAFYBlfVKgSEgBAQAkJgrxH4X1RG5/mv+sEgAAAAAElFTkSuQmCC"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-93"><g><path d="M 336.37 373 L 383.63 373" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 331.12 373 L 338.12 369.5 L 336.37 373 L 338.12 376.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 388.88 373 L 381.88 376.5 L 383.63 373 L 381.88 369.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 373px; margin-left: 360px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">LDAP</div></div></div></foreignObject><image x="345.5" y="367" width="29" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-94"><g><path d="M 265 346.63 L 265 153.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 265 351.88 L 261.5 344.88 L 265 346.63 L 268.5 344.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 265 148.12 L 268.5 155.12 L 265 153.37 L 261.5 155.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-95"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 238px; margin-left: 266px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">HTTP</div></div></div></foreignObject><image x="251.5" y="232" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-96"><g><rect x="200" y="353" width="130" height="40" rx="6" ry="6" fill="#e6e6e6" stroke="#000000" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 373px; margin-left: 201px;"><div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Identity Service *</b><div><i>openldap</i></div></div></div></div></foreignObject><image x="201" y="359" width="128" height="32" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-97"><g><path d="M 455 428.63 L 455 411 L 342 411 L 342 376 C 345.9 376 345.9 370 342 370 L 342 370 L 342 341 L 297.5 341 L 297.5 153.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 455 433.88 L 451.5 426.88 L 455 428.63 L 458.5 426.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 297.5 148.12 L 301 155.12 L 297.5 153.37 L 294 155.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-98"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 216px; margin-left: 298px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">HTTP</div></div></div></foreignObject><image x="283.5" y="210" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-99"><g><path d="M 422.5 435 L 422.5 421 L 268 421 C 268 417.1 262 417.1 262 421 L 262 421 L 107.5 421 L 107.5 428.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 107.5 433.88 L 104 426.88 L 107.5 428.63 L 111 426.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-100"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 422px; margin-left: 206px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">HTTP</div></div></div></foreignObject><image x="191.5" y="416" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-101"><g><rect x="390" y="435" width="130" height="40" rx="6" ry="6" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 455px; margin-left: 391px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;">Metadata Service</div></div></div></foreignObject><image x="391" y="448.5" width="128" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAABECAYAAAD3Lo2pAAAAAXNSR0IArs4c6QAAHOxJREFUeF7t3QOwNE2WBuAza9u2bXtnjVlzlrO2jVlz1py1bdu2bdtGPxFdERUZJ0tdfb/bt8+JuPHF/3dVVuabevMo7xMlhUAhUAgUAoVAIXB1CNzn6lpcDS4ECoFCoBAoBAqBKAJQg6AQKAQKgUKgELhCBIoAXGGnV5MLgUKgECgECoEiADUGCoFCoBAoBAqBK0SgCMAVdno1uRAoBAqBQqAQKAJQY6AQKAQKgUKgELhCBIoAXGGnV5MLgUKgECgECoEiADUGCoFCoBAoBAqBK0SgCMAVdvqVN/kNIuKLOhg8f0T8+JXjU82/bgTePCI+uwPBs0fEz183PHer9UUA7lZ/VmvmESgCMI/RvXzikSPiGQ4k7Skj4lEiwn8/bET86/HvbyLit49//3QvK3pHv10E4I52bNasaycATnvPO9PfXxARb7xxTHxmRLzFzLs/ERHPt7H8em09AkUA1mN27jeeLSJeOyLuFxFPu/Bj/xcRPxsR3xoRD46IP1z4Xj02jUARgCsaIUUA5gnA30bE40bEf68cF7D9k4h4/AsjAO8fEQ8c1fkXIsICfVfkkgjA90TES4yA/8SIeKe70hHHU/5HR8Srndim/zqqrd81Iv79xLKu/fUiAFc0AooAzBMAw+GlI+K7V44L9uQfXfDObdMA/HJEPGMRgAU9d95HkE4E8iHvKAFAbL42Ih51Rxh/LiJeKiKQ9pJtCLxuRHxM59X7RsSvbiu23rqNCBQBWEYAPj0i3mZlB37UwWb5HgveuU0E4Jki4peaOpcGYEEnnuGRt4+IT2rKvSsaABol4/5hzoDbdx0cOV82Iv73DGVXkYXAnUKgCMAyAvBnBxXjE0YEu+NS+fWF9szbRAA+LCLepwjA0i4+63M/EhEvcAcJwENEhJP6s0yg99cR8f0R8RsHk8ffH81vHAKfOiJecoFZ7f4TkR5n7bQqvBC4JASKAOQEwEbfYvOCC1X6+v/pV6jKbhMB4F3N+3ospQG4+Rn9xBHxB8kYvAsagBePiO/tQMp+z44vDI1dPxME4vUj4lOOUQLZM4jD0918t9UXC4HLQqAIQE4Afu24iY978+Mi4t0Wdu97H9SbH948+5sR8TTJ+7eFADxXRPxUUr8iAAs7fcfHjLPMDnsXCACzBvNGJm8ZEZ+1EEeRMz8wYUZ41oNz4S8uLKseKwSuEoEiADkBcAJ5QDMifjc5HfcGjU39eZofP+9wqnuTHQiAE/rLHVWhQqYeKyIeLSL+4eCn8JdHzcO3RMQ3HRZaMdNT8ufHCIe1g39JaORTHL27hVnyLXjsY0z3/0TE30XEHx+T7nxbRHzHSvPKuL6PdPwOT3Lx46IuHuqIhaQlHM2+7GDa+M/jS06PX9xp8JpEQHu2z2kV6dwixtTnz7xoLL5KREjkQjtlvMDt34598VsR8WMH58+vuoFN09h8+aS+omzU6T9WgPCpiW8OzYGQwPeMiK9ZWBZfBM6D/phdHu84r2gbzKk/PZokzCk4LRVhijBv5QNHkTYPf6zrax768cki4hEi4l+Oc4UWiDaoFXPocVY6OyLymdkFXubMsFbsGQWgjvwxOFH7trXKnz62BjCTCsX+yoj4laWgdp5DCH3nxSLiSY7fgSVzkj78yYj45kP/fufKMXZitW7360UAcgLAhviFSdctyYT1BMfNrcUWocgybC3VALB/ftBh0rzOYfGwMM3JP0cEm/6DJgb8OQiATZgD5CvOVXD0uw3obSOCA9ca8Y1P6yyS43IspHI5sCvzcv7SzkeWEIBztO9cBMBGqy8QsKUi9NBJ/HeWvrDyOQvxcyfvSOrDzr9G9IWwTuR8+PujiLBBLhERFgiU0FebxhL5wcPm9Y4LM+IZby+aFGpOvsuR8NBiPEfzDAKADAmRfPdOpd5wgsi2rzg0MO9l8o1Hcjj8tgcBsMnTgnKcfrgloB7NQu+wgQiIJvnQwyHC3F0iv3/U5C4lh0vKvNhnigDkBICd0okdIx/Lhxy8iz9gprff+rgpjR+zAVlUvz15dwkBeNXjZH/EDSNNKCKNwT8m7+5NAJxiaAecatYKvwsOiB+58EWEaqm6WJFOOq9+rNtXdL4xRwDO1b69CYB5bePvbR5zECOPxhwysLf0NkXfQXJ7G9Xe9UA2jAMn1LVCW2ED/vKZF3vaDomLjF9zxWGjlYEAOHDQImRCW/NaCytuHCATmShDWYOcSgCQGSftufwnWV3MUSTgMxa0yxi3Hr/vgmezR/iQ+NYax+6Nn7q9rxUByAmAk+UrRITNfCzUVHOnKSomqqixOPlTdVNHtzJHAJxwLBRLTv29kebU9SKJJmBPAoCJa/s4bn3LyF9ysrFoW1zXYoIEUb86gWUyRQDO2b69CYA20hadIrCiVt1qmuh9m7nijTo/Gj9MFedO5kM1jBjzE9gqtAy0cV89UYBTZpbkCPGQbEvOjWwNHgiAouGfOTTqH2a1wbQ11Q5tzU7IypBvYoz3KQTghY/r3JaDyrj+kl3xd5kS5L81067tS/4otDlXK0UAcgLwGscT4zckI4PdnUNfJpKa/NVB9f7QzY9OnlRhX5K8NEUA2Gt/+mgXbF81aTFlxIKdi73tlQ/mBxO4/b53mQPerynERKNqJIhGloYVSWBrHQt7InvoIHK1UxkLlczkh4+nDIlt5HZHrmCcCXsdlaVTaCZwRMTY4HvCC5ynuQXuSY/f813yFxN+Dz0CcO72PWZDNqmksxh59mepb8dChTt2dmNrFWaXkSObls2HGts4Za5CuFp/laF8Yyuz109AP/sTlfvnTjxlU6QJQvDOFcvv+5k/jmr9zGF8yPsxbM7w5LSYEX8Jh8xRYzYTvidIQivaxgeGVjCTMQGgcfzgznMvcyTdU6A7iZt32VoPhzdrXt5KAIxh60JvDbBeMfFRwZuLyEIbcTRUhYbF772LuWhNHIoyEbKNPCA97o/wDc9bczLZkuRtdpBfygNFAHIC8HoHu5yF1QRvF2K2rZ6a2nvtJk+txSZmc85uoZsiABZqE6EVDn9OpJl68IWOi0KrhlcPGf7Y2zOhtssmyZIogKlFQ5szNadFHinJ5K0OKkT3KGSSJcgZnrPB8SVo30XMLHZzKWd7BOAm26ctyE92iloSBcDBkaNjJtrxOc0PNDb6vqcKd/pEqPYShJOdniPilNhUOYd+38E5D4Hsjdu19TJveqYN2gkbYks8EGrq/mz8eKdHJvia8DlpxZxHHAafBwcKG5Z+d6pnehzuB2EW6R04qLF7ERXDNzOT5PAbLOA7lq0EwDx3iMjEOuauB4eJQew9b5ckuxp+d/DJfEWMG06eA6Eff4/TrzwRWSZI4aUfm1TOwcXBZ6nfyNrxdqufLwKQE4BBDS39rwE1FqFyvRMTb1Z24rE4iSqjl4O+RwB6YXnKntog/d6z+Qkt62UnPIUA9N5VFwsdb99WECsLwqMnv33dxGbdcyJTjJMzh6BMLOIcrqachXoE4Cbbp+5bCYDNnDd3ll4X1j27rIUWrplQkbYZCU9d1FyQ1SN4vbK1iwbEnyRJTodrIgaGcnt2eSdTY7VnfrDhICFU5mNRB7jyam9liox5lvqeFmAuisOaYz1ohW9R66fUPpOZJD1DA0E71pKdLQRApAInTNE3WR2ZWhxaMuHE25pah+f4YvEZGUtvbdOOZ57Jv9LrewefVrN26hi/iPeLAEwTAJ664v/HwmmEx7AJNBZqYmrVlpkOC+haAsBvwGRshbc0df+UndQpi1lAncZCPWayZmz3FAKgbYMpYfw93+ndLe653uLkxJOZIyx2v9eZWdqrX4S29USIl82jJz0CcFPtG+q1lQA4UdJCZeLUbQHMhLmA2jnz2GZr7amqJ6Cc/QkZXZpXIyvM+HeypKlDvM29OXmi4+kxW/eYx3oaqaHcLFOm32idbGStzBEARGhqfgzlZevQ8Ju0yrR0mTgt06RkJkFOgUIlW9lCAHq4KNvmPuXUx2TQrqVDnTIbPRL2VEm9HdZa36v2Mb9bc1pZ41A5N8Yu6vciANME4MmPzLbtVN6jn9z8T7bSbIG1KVl81xIAmyD1XyuDRmFuoPXMB7x02YhbOYUAzNWl93tvgaTCY1NshXbFYp/JlCp2/HwPV8/MRQGsbefa9g3lbyUAa+s3ft4inNlvOa7yYTmHUI9/wpHQnlK+k7T+l3zLqbgnmYlueJaT7A/NVKJnPmhD6YZipgiATZuX/xIvdL4a1pDMr4OPAG/4TKZuvuTb0N77oYwtBKCnlXMqd1iZy0fCYZWZtBVkf3wAo2mRkyGTKRyG5xFcfkEtIaKdoIlc0henjNNb924RgGkCoMOyZB7UUtRTY8m8Uk0MiXDIGgJgMvRONGyRPZXZuD4c97LTIBtn5oR1LwhAzyOcWjU7jVLv98J+eu1qJ92UynFvArC2fUNd7wUBoAKnEm6FHX5LqNzSxY6vAw0Ds1ZGeJeW4zlaDOX0Ej2xmTutZ+IkPUUevEN7lmUXtDlneQSmCADtR6tdnGorW70kN630bOWe60UhaEMvAmItAeBrZAPNtAxLoqbW9C/H4XHI4vhd/gSZk3VbPuKV9RVnQWaMq5IiAPMEwIbT2pWptmULo3YmmDlPW/9vLFRsQ/ztGgLAAWhNxrE1g5bmggajlb0IgJM7hx93J1hknADYpNfc/NYjACZ4T8Ut4Qqtx5xYKFrtzfDOEgJwzvYN9diLANhQ9QWfFQ6gTjnMBGtCNc9NAMb95VTKs91J2/jJHL3m+tfvPdW6PBzKP4cg7e1Jd4oA8LuweS+Vnt+EUyvNDfPeWGzMDhGZMyk/oN6Vv2sJAI2iyIlMvv5gnrjf0gYueO69DmbNj1jw3JZHaLmyMO0tZV3MO0UA5glAL0Z7fOLs2ZbHiU3WEACJe87llCJuuXVUNGBPJQAWGkRJ9q81m302WXoEQOhhL8PgUm/1qVPEFAG4ifbtRQD4StAA7RHCd5MEYDwWkBROXcgwAmOOZX4h2fgRRoZ8tnfXZym691qshQm26WynCAAixp9nqTzG0Wk2O2lndyiIOsrCmKnlnYAdWDJZSwCkT+5l8OTfgLjsJUuvWN/yPQeDNtx5SzkX9U4RgHkCoEMtJDyExzK2jQoLbB1qWjXbGgIwla721AHGCSY7BZ1CAIQuMYtIzbqH9AgAL3622kwGX4u571Nni2/PpEcAbqp9Q51O0QDYMPXx1tNzi8u9IgBZ//DAv+9RCzRnlsgcu4QzZhdyzY2ZJb8jKK3WrkcAEJRsI5/7To8A8z1qibFMptJftzLnQ7SWAEz55SwJW51r8/h3kSN7Eopx2cKSz6VdWNPGG322CMAyAsDJpk2iw5kEK2cOyC7aGF/4oVPXEADpOXvpak8dIL2ww60EwBgSp93eXT+uJ9sa710bm8VvEP4RWRhTjwD0HBuVxz7b8yYe18VCOU5iNP4tIwA32b5TCYANUua4LLRS2caqBDdwYi8fOz29Uifh1G0iAOO+EhbHJNTb0EWDMNeMo0IyIn/qfBrep7VrU333CIC1IwvVnKtLz4lRRIS2SnxDaE8kvMocad/0mOa89621BGDqsNIzN861s/f7lP/O1jKH92gXmBiuSooALCMAHIQyz3mqSYtp5pnaqgTXEACnHAtvJudKX7mVALAx93Kiw8YCgSBkstZJrhfHq+ypDI3jb8vMJkNbJhkBuMn2DXXaqgGQwY4TXCbIk/wWkqhkcq+cAE9ZcG1wNnV+Jpm0nv29lLjeReazWP5T6tcjAJzm5hIhZd9lhhLWJ5VxK+5uGFT+HJSd9FtBFJDE7F6Q4dm1BGDKXCnpVBbKvBVTUR4SsWUiSZP8ISUrECgCsIwAgFTGqDb9LMZoQrZe9VSNbf7uNQRgKjEL1R4Wv7dsJQBCoJweM8kyjY2fM2EtXK30NAC91KreXxLG5Tmmml4mx4wA3GT7Bhy2EACnPk5f2el/SIn89xODxuaXbUrn1gBYgySQkalyiwgho23LhHp6nKt/ikCKgOiRoy318s7eBECZvTkwtrcLrcxy3AuhRWinZC0BoMXrpezlx9RLwbsF06lLjdwvkd3guuU7V/NOEYDlBCBLXGJxxObbW7nYktiUxrKGAFAPWpCz/mEHz8KBTh20WwmATSVTZyJGbda0to5Sd2bhSD0CkPlaDGUuDQOcSlmaEYCbbN8pBKCnpVLmXKITG3/v9LsXAUBQJHDhS+OPv4h/EWW24q23utFq9BZ+c24cGvbxh/n6zp2JkmWdO3VOnYMAINtIaSvjUEQmNzlMWuEY2DN/Dc+uJQA0J6KhsrXKzY6nhnaO29BzbPSM+xJOvQDr1P6+uPeLACwnAFloHjuqJCTtqYt9sg2NWUMADKTeLWAIB6e0rSem3iDdQgDE6vcy79ncJTrpCdu/hSobgz0CIMd9L8bbJtC7ZW6og3BNKXHhl0lLAG66facQgClVrBNhb+PzTbj10tHuRQCmwsXYq9nyp1TTvXGUhekOz0rBPVaFT5lzxiG7ey3k5yAAnAfhlWl6kCrzqY1G0B4hihLpzK0bawmAsqd8K4Qo9pL3DDjTamSRSdY64ZWDrwpTj7Znco6Lq/YaB7e2nCIAywkArKgIpROdkl5+7rUEYMrjdQmT5wFsc6YWdhr3h6n3bljrEQB2fA52mWD/vSxfsMoSywzlcBASepOJRSoLJZy6NtcJViRA7xZB35nyWPZ7SwBuun1zBMCG4sSbCRuoxC+ZTJEjJ3Px6DQImQjx4pOyh/T8DJTNj4ST25psbNJPc8Dt3QzZqvVtRsZlllEPYc/y7Y/bza+H34+5NJ5XDgKZnIMA+E4vTTiSpz+zS2840PWSII3rvoUATCVYmkt4hNAgCFkmQE6ViO1YepEcDmIyJk5lHaTp4gM0rIfDv1OmsT3G/a0towjAcgKgEzngzd2+Rc3o5qlW1hKAqcuALHoWot5d4JKoZI53Nn+aDJeLtNKzdfMcx7yzG7YspDbrbEH1Lad8qslWhCGyD2bvDc8KY8s2855mxHvyELgQKBNmCot87wpS77QE4F60Tz2chHu3nfW0KsxC7c1uAw4WTafDjPxNZVf0/pKNcekCN5fIxSnO/OJvMyfMCa6E7UWf9Oo9dbETDUEv1bT6IEPi3ltRZuYHcy4C0HPygx9/iiwnfhammGG8hQBIMiW6JBMaNwmeeplNkRZrZiZuWWw1UwhFL4kRJ1h5SHrS0xYhAtaqqXtE5sbjRf5eBGAdAZBtrr2dqu14my9v41bWEgDvu7imt8DJsuWU396yxa4qDjzTVMh13oujn8qyJ0GGhTk7nVE39uL/LYwY93BCcjmROF4nlOGEr8xsHFpos2tbp+5Ht8FZUGgXxnWlwRBWOXUTILwzH4Cbbp96SNLiNJNJb5Ni1ujdS68cjnLCWQdcPG/zH+Kqe/1gUUQApzQrSxc/2encxTClRUM4zTF/bpF0ohtMQk6JTAXIjk1wikBmyXHUs3chjN+MU/i2d3o4VfNA792k2ZoaBjzORQC0G7Fux4gwQHOpvQococou0NmLACgHoW9P60P5UqLLtDcO01VPzswuCspuEdQ+dW4POUwffssyHPqe9cHlRC3Z9X3XM2eaxQdOOJIuHdsX+VwRgHUEwMSTcrMXduQ3asZso9xCAGRCM3myvPgGnMUREeBsQx3qeV63WapXE4kdNrMPKivLdTAe1C4OcapSF+0frkmWz9xtZT1xApB7wHu+P7a/O1GZqFliIqYUp3maBxN+yMFOjae9WYzzUAcLng3EpuXET4U9THwnFarcTF440ZzcdPvUC1F7oU4djS1t00ZY+nfQOOkfGPfEhqofOWeKNBlvFPJcOCG1m4ey2NGpeYlkN+N73dcufDB2c9up2SKnvstRFkHomROmyK5yEW8Yy9SHrDjd98xZyjK3MzkXAfCtKYfGti5rNrgtGgDfg49Q6V4OCusPfxLj1ebtMNXL4aDfYN67vfIBB/Lj7pWeWB84Oxqn1ipjrneFu/wkHJGv7vQPvCIA6wgAzLJLf4aBOGVn20IAlLvl7vR2YphQ2PbUveNTKuS2PI44w70HJr5T3doFnT/Ccx5OuyZzm2Sp/V7r4bsVE0SCCrGXZCkLW7wX7ZsKbWux0RZaFjKV42Bqw7ThDWrlHvEY3t/DW17UDL+E9rrqtWQie94mJAXyFEmRhhcpbUN1136fo6t507vr/pwEYCpUuG2HjdZGt0S2EgBl800Sdrkly+G4btT41PlT4jQvx8gpwvav/3rXKZ9S9kW8WwRgPQFwWm0zfg2d3VMF+n0rAfAu73e5BtZust6V/MPtgVOb/1D/pbnSxwTAu5LPzE3Y8YQw8aRy9T0mC1qJqbGYhfj0Yp17E49dnVmBujEz0XjPxpGlCb7p9vHWdlq3Uc3JmAB4dipXQlYWzQq1OPPBknbuQQDUg6ZCXfdKzYvkOo3bPJbk2OfgSXvmdLhFaGmolXu2bWWekwAo36Y+p9of30i6pJ2nEADlI9GcUbckOrJWIehLcvLTxloD5nyyem12GNB/mT/UEpzuxDNFANYTAOzWYtkOcOp4qlU2zExOIQDKo95ns8Wyl4rNjN2y56DTlsMRhlp+blFpCYByxOGzvWcq5PF3bL58F8Ynkqn4fu9mBMDYZe+Hydw3ndTuf1R/i0umscjEybR33ehNtw9BUhemnSlpCYDx+aDjRjg1v22YSKGEMcOG6V3q/iktwF4EQJuQMeRWP/aup50b61S37M9yb/RupeuVgVAjx7LLzeWsGMqgufItuQt6c3149twEgGq/5/Q61MHNn73bLzNcTiUAyuRzw+dEeGlm38++S92vrmuv5GUqYL5cOn6YIh589BWYihiYG3d34vciAOsJgI7nfWxDGYsTuk2iJ6cSgKFcDndOqpg2+zbHKB7uHIDYy8Xk2mSp4pwi1wrvc6co13g6nUs7SsUpzI4Tj6xf7KNZqmL2Nup5J0rvIkkmHLbtPSc+DoqZWCy8i+gM3+S97luwZdfLROif0LjBTgsPJwnhXti90whnxMEezP7Yc2iby5N+0+1DyGyOfBiYIvh26Ad/CJR+tvlld9Tzc2BeYWv17hBVAUfRAjb/zB8E9kijkEnhdUOGQb4DyKHFs6fyXjvWxs+rIycyCznVvLarMwJkE+Ggp9+0HYEzzm34xuGQA3/r97UZ4aIhktlOP/Mx0XaaI2MJiYS1v6X24nMTAHOsvfFwjIF7N/gkTTmHtpjtQQCGMhEBaxVcrVvmJs2LetGcWJ9oUqxVonu2in2Mc7N54l9t9i0HA2OGOcj4RW5d4rYGj611uoj3rp0AXEQnVSULgUKgECgECoG9ESgCsDeiVV4hUAgUAoVAIXABCBQBuIBOqioWAoVAIVAIFAJ7I1AEYG9Eq7xCoBAoBAqBQuACECgCcAGdVFUsBAqBQqAQKAT2RqAIwN6IVnmFQCFQCBQChcAFIFAE4AI6qapYCBQChUAhUAjsjUARgL0RrfIKgUKgECgECoELQKAIwAV0UlWxECgECoFCoBDYG4EiAHsjWuUVAoVAIVAIFAIXgEARgAvopKpiIVAIFAKFQCGwNwJFAPZGtMorBAqBQqAQKAQuAIEiABfQSVXFQqAQKAQKgUJgbwSKAOyNaJVXCBQChUAhUAhcAAJFAC6gk6qKhUAhUAgUAoXA3ggUAdgb0SqvECgECoFCoBC4AASKAFxAJ1UVC4FCoBAoBAqBvREoArA3olVeIVAIFAKFQCFwAQgUAbiATqoqFgKFQCFQCBQCeyNQBGBvRKu8QqAQKAQKgULgAhAoAnABnVRVLAQKgUKgECgE9kagCMDeiFZ5hUAhUAgUAoXABSBQBOACOqmqWAgUAoVAIVAI7I1AEYC9Ea3yCoFCoBAoBAqBC0Dg/wGnnVmfYLYuGgAAAABJRU5ErkJggg=="/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-102"><g><path d="M 336.37 465 L 383.63 465" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 331.12 465 L 338.12 461.5 L 336.37 465 L 338.12 468.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 388.88 465 L 381.88 468.5 L 383.63 465 L 381.88 461.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-103"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 466px; margin-left: 361px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">HTTP</div></div></div></foreignObject><image x="346.5" y="460" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-104"><g><rect x="200" y="435" width="130" height="40" rx="6" ry="6" fill="#e6e6e6" stroke="#000000" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 455px; margin-left: 201px;"><div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Auth Service</b><br /><i>keycloak</i></div></div></div></foreignObject><image x="201" y="441" width="128" height="32" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-105"><g><rect x="390" y="107" width="130" height="40" rx="6" ry="6" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 127px; margin-left: 391px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;">Search Service</div></div></div></foreignObject><image x="391" y="120.5" width="128" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-106"><g><path d="M 430 195.6 C 430 190.85 441.19 187 455 187 C 461.63 187 467.99 187.91 472.68 189.52 C 477.37 191.13 480 193.32 480 195.6 L 480 242.4 C 480 247.15 468.81 251 455 251 C 441.19 251 430 247.15 430 242.4 Z" fill="#e6e6e6" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 480 195.6 C 480 200.35 468.81 204.2 455 204.2 C 441.19 204.2 430 200.35 430 195.6" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-107"><g><rect x="412.5" y="251.5" width="85" height="17" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 89px; height: 1px; padding-top: 260px; margin-left: 411px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">search-db</div></div></div></foreignObject><image x="411" y="253.5" width="89" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-108"><g><rect x="390" y="353" width="130" height="40" rx="6" ry="6" fill="#e6e6e6" stroke="#000000" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 373px; margin-left: 391px;"><div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Dashboard Service</b><div><i>grafana</i></div></div></div></div></foreignObject><image x="391" y="359" width="128" height="32" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-109"><g><path d="M 75 147 L 75 168 L 74.65 182.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 74.53 187.88 L 71.19 180.8 L 74.65 182.63 L 78.19 180.97 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-110"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 166px; margin-left: 75px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">S3</div></div></div></foreignObject><image x="68.5" y="160" width="13" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-111"><g><path d="M 240 523.6 C 240 518.85 251.19 515 265 515 C 271.63 515 277.99 515.91 282.68 517.52 C 287.37 519.13 290 521.32 290 523.6 L 290 570.4 C 290 575.15 278.81 579 265 579 C 251.19 579 240 575.15 240 570.4 Z" fill="#e6e6e6" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 290 523.6 C 290 528.35 278.81 532.2 265 532.2 C 251.19 532.2 240 528.35 240 523.6" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-112"><g><rect x="222.5" y="579" width="85" height="20" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 89px; height: 1px; padding-top: 589px; margin-left: 221px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">auth-db</div></div></div></foreignObject><image x="221" y="582.5" width="89" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-113"><g><path d="M 430 523.6 C 430 518.85 441.19 515 455 515 C 461.63 515 467.99 515.91 472.68 517.52 C 477.37 519.13 480 521.32 480 523.6 L 480 570.4 C 480 575.15 468.81 579 455 579 C 441.19 579 430 575.15 430 570.4 Z" fill="#e6e6e6" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 480 523.6 C 480 528.35 468.81 532.2 455 532.2 C 441.19 532.2 430 528.35 430 523.6" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-114"><g><rect x="412.5" y="580" width="85" height="17" fill="rgb(255, 255, 255)" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 89px; height: 1px; padding-top: 589px; margin-left: 411px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">metadata-db</div></div></div></foreignObject><image x="411" y="582.5" width="89" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-115"><g><path d="M 336.37 117 L 383.63 117" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 331.12 117 L 338.12 113.5 L 336.37 117 L 338.12 120.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 388.88 117 L 381.88 120.5 L 383.63 117 L 381.88 113.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 117px; margin-left: 360px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">HTTP</div></div></div></foreignObject><image x="345.5" y="111" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-116"><g><path d="M 200 117 L 170 117 L 146.37 117" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 141.12 117 L 148.12 113.5 L 146.37 117 L 148.12 120.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 117px; margin-left: 170px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">HTTP</div></div></div></foreignObject><image x="155.5" y="111" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-117"><g><path d="M 193.63 127 L 160 127 L 160 291 L 146.37 291" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 198.88 127 L 191.88 130.5 L 193.63 127 L 191.88 123.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 141.12 291 L 148.12 287.5 L 146.37 291 L 148.12 294.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-118"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 198px; margin-left: 161px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">HTTP</div></div></div></foreignObject><image x="146.5" y="192" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-119"><g><rect x="200" y="107" width="130" height="40" rx="6" ry="6" fill="#e6e6e6" stroke="#000000" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 127px; margin-left: 201px;"><div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Gateway Service</b><div><i>nginx</i></div></div></div></div></foreignObject><image x="201" y="113" width="128" height="32" xlink:href="data:image/png;base64,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AtuOgAjAto+w+jc3BDAZENaGetsLWdyi3+eGkforBITAgJOSABICQmDzECC+vxT2iXMoGfUkQkAICIGql7LgEQJCYO8igPYuT0iEBzj51EvnP+BIR0a91siKvdtztUwICIGVICATwEpgVCVCYHIE2Onj9U3YJJEDRFbU3mc8tMnOJhECQkAI/AsBEQBNBCGwmQgMHSKU94qYf+LfJUJACAiBfyMgAqDJIAQ2E4FWAkDsNUdbE/8vEQJCQAiIAGgOCIENR6CFAJBxkhS2pM6VCAEhIAR2ICANgCaEENhMBMjsSJZGnP/IoMdR0KRWJasih9+QMZBDgSRCQAgIgRABEQBNDCEgBISAEBACM0RABGCGg64uCwEhIASEgBAQAdAcEAJCQAgIASEwQwREAGY46OqyEBACQkAICAERAM0BISAEhIAQEAIzREAEYIaDri4LASEgBISAEBAB0BwQAkJACAgBITBDBEQAZjjo6rIQEAJCQAgIAREAzQEhIASEgBAQAjNEQARghoOuLgsBISAEhIAQEAHQHBACQkAICAEhMEMERABmOOjqshAoIPAEM9svu/YSM7uu0BICQmA7ERAB2M5xVa+EwCIIvN/MzpfdeDcze9QiFekeISAE9j4CIgB7f4zUQiEwBQIH704X/HW34B8he9jFzOydUzxczxACQmB6BEQApsdcTxQCexGB05jZl1zDjmpmv9qLjVWbhIAQWB4BEYDlMVQNQmAbEDik2/3/s9cIbEPf1AchIAQCBEQANC2EgBAQAkJACMwQARGAGQ66uiwEhIAQEAJCQARAc0AICAEhIASEwAwREAGY4aCry0JACAgBISAERAA0B4TAOATeZGaXzm65vJm9of//IczsSmZ2NTM7u5kd38wO03vSf9nM3mJmTzOzn4175L9Kn9zMrmdmFzGzU5vZ0fo6fmJmnzSzl5rZy8zs71nd/P/q2f9va2ZPDp59czN7evb7583sDIU2rrv/fJM+a2anz57/JDO73QjM6DN9z+WeZvbwEXWoqBDYegREALZ+iNXBFSPw9X4xTtWezsy+aGZnNbPnuYUrevQvzew6PRloaRoL/WPM7AZmRqx+TT5nZtfu20M5iMYxshvObGafCSpggb1N9vsLzOyGhQdN0X/6QBbCJH8wsxOa2S8aADujmX3QzA6flYV03arhXhURArNCQARgVsOt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aBsH3mDPj4SdP1oCnP2S/KOPGIhy+u9+L9UCISAE9hQCIgB7ajjUmBkjQErf67r+E/L37P7oW9LiclDOifskPhx8c2hXfmyWwhnDra4LASEgAqA5IAT2BgIkwnmvmZ15geaQH+A+HUF42AL36hYhIARmioAIwEwHXt3ekwgc3swe0x1wc1MzIw1vi5D7nlS++ZHFLfepjBAQAjNHQARg5hNA3d+TCJy0PxaYdLb7mtkxei9/8v6Txhevfxb813bHAHNcrkQICAEhMBoBEYDRkOkGISAEhIAQEAKbj4AIwOaPoXogBISAEBACQmA0AiIAoyHTDUJACAgBISAENh8BEYDNH0P1QAgIASEgBITAaAREAEZDphuEgBAQAkJACGw+AiIAmz+G6oEQEAJCQAgIgdEIiACMhkw3CAEhIASEgBDYfAREADZ/DNUDISAEhIAQEAKjERABGA2ZbhACQkAICAEhsPkIiABs/hiqB0JACAgBISAERiMgAjAaMt0gBISAEBACQmDzERAB2PwxVA+EgBAQAkJACIxGQARgNGS6QQgIASEgBITA5iMgArD5Y6geCAEhIASEgBAYjYAIwGjIdIMQEAJCQAgIgc1HQARg88dQPRACQkAICAEhMBoBEYDRkOkGISAEhIAQEAKbj4AIwOaPoXogBISAEBACQmA0Av8LQdNQ+dOiFboAAAAASUVORK5CYII="/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-120"><g><rect x="9.5" y="189" width="130" height="40" rx="6" ry="6" fill="#e6e6e6" stroke="#000000" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 209px; margin-left: 11px;"><div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Storage Service</b><div><i>seaweedfs</i></div></div></div></div></foreignObject><image x="11" y="195" width="128" height="32" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAACACAYAAAB9V9ELAAAAAXNSR0IArs4c6QAAIABJREFUeF7t3QW4dU1VB/Bld3cnNhZ2K9iBXdjdKKIYYCuKYic2dmEHKjYWWGCLYisqFnafn+zxGeeb2XHuuefe9+61nud94Ltn8j+zZ1bP40RSIpAIJAKJQCKQCOwOgcfZ3YxzwolAIpAIJAKJQCIQyQDkJkgEEoFEIBFIBHaIQDIAO1z0nHIikAgkAolAIpAMQO6BRCARSAQSgURghwgkA7DDRc8pJwKJQCKQCCQCyQDkHkgEEoFEIBFIBHaIQDIAO1z0nHIikAgkAolAIpAMQO6BRCARSAQSgURghwgkA7DDRc8pJwKJwI1H4I8j4tk6s/zOiHjTGz/7nOAqBJIBWAXT5kJPGBEvEBEvFBFPExFPERFPGhH/GhH/GBF/HxG/FxGPiIi/2Nx6VkgErjcCuf+vfn2SAbj6Nbj2I0gG4HRLhNt+24h4i4h42Yh4/JVNPzIivj8i7h8RP7eyThZLBK4bArn/r9eKJANwvdbjWo4mGYCLL8tTRsQ9I+IDI+KJL9jcD0XEe0TEH25o514R8QlV+V+JiJfcUD+LJgIXQeCq9/9Fxn6T6yYDcJNX90RzSwbgYkA+Z0R8X0S86MWa+X+1/yoi3iAiHrKyzV9t+k8GYCVwWezCCFyH/X/hSdzQBpwfz9KZ2w9MQsYNnXZOawsCyQBsQev/l33yiHDZPu/xTQxr/klEvExE/PlC2y92MDk8vCmTDMAlLEg2eRsErsP+z2VJBBKBCyCQDMDx4H1+RLz/TPV/iYifmC5ojn4cADkCPndEvFJEuLzn6Csi4t0XynxyRHxUMgDHL2LWPBqB67D/jx58VkwEEoHI1wCP3ARPNnnvu9B79IURwTb/1zPtv2JEuORFCvToPyLi+Rb8AUQRKFNTagCOXNSsthqB67L/Vw84CyYCicBtEUgNwHG74s0j4tsGVb8hIt5+ZbNPN9n6n2dQ/q4R8bmD35gIen4CyQCsBD+LHY3Addj/Rw8+KyYCicBjEUgG4Lid8GEHdf59BlXvFBEP2tDsW0XENzfl/zsi/vQg3X/NwXTwkdVvfAKeaUPbpehXR8S7rKjHrnvHg+nitQ6hiS8fEc8YEU8fEU80aTNoNGgdmDZ+JCJ+aUWbdZFfjIiX6tT52CqS4Uki4h4RARfmEloWuROMbY74YriYjJt55Rmm/Av/GRF/c3B84hX9s1PI5QMjAsbHkJwO+vHvhSdHqyc4mIP+8vC3hx3mJ9GKdfvnqnF5H9Rr6W06az83pleIiNeOiNc4aI844Fkb+HAcZWb6+YPvyPccTEw/OJmcjpnfmjpXtf+XxkYb9vrTHn7BCZ+njoi/m/D59UOI7vdGxHcfonYevdTY9PtnHup/SKfsj07fSfnpnQ/f7Hsd1vNFIkKfSDjwB0fEXQZ93TkivmvlOBT7nMN3+EGD8m8yzav8fKooAN+jM82+s/+cCb6tx52+qz+YwpftO+fesd+VcV/G+m2Ad39FkwE4bs1d/g7BHt0hIlx0a0nSFLZ8H5LkQP7JDcBnoKXLYgCEcjlYHHRPu3bgh4Php6ax8yxeQz8WEa/eKfhZh+RId5su+R8/HIov3ZSZYwAcuJ8WEW+0ZgBTmd+Z/DeEXW4hl/7nRcSzLlTCvLkQfnia02NWHtqjZjFknxQRzEZr6Pcj4u4zWqo1bcyVuar9PxrT7Q4/fNyUh8PFtET/MO1b+673ndX1tYtBbQnzW/bp/SLiPTtlMAAuTExHj758o0e+MwLj1xJmhsf/v1c/XJQBcC6ZkxDnZ14CdPrdd2XfbWFqVL3M9Vs59H0WSwbguHUfHQpa89F82XHNLta6DAbgJSap9bkWex8XcADKg/BvC204CIU4tgQvuNFUvFPn9xEDQEugDillK5FUOFB+6sqKGCQS2FpyGEsKxSTj4O7RkrbI9/mJh4P9o9d22pTjqGfcF5HKel1f1f7vjUVa26+NCH4JW+mnJ40BDc2IRtoOmjAX17tOvjy9+hiAX46IP5u0EW2ZR00X95r10RYNT4/4HLUOyRdhAGiWaLI4Kx9DXzlpQ/gxLdFlr99S/7v+PRmA45afOt0m79EfHVRhrzpz6B/X42NrnZoBcAH50EfOjFvGSiX6uo0U0tbnN0GKbumbJhOAnAa9PdljAEjFVN2Pt2WQnbLvOF0gc81Q1X77ESYzqmfZIWV67BFtCHPKiEaS5ZYp8yHhS3JKuqr9387hHSYGcI3UP5q/S/XVZjQBGNueH47L+zkmjd2zDxp3aT/0YLb7osO3+z6DMrQ6TFNL9CmNObAu76L+maaBYxkAGosHH76J518a0MLvD4iIt1xgPs+xfhecxs2ungzAcevLaY+qfkRssh8/MQkur1MRe2Kxhft42DlbwiR8QfNHUii7Z03s67+woPKn5mTXpsKm9nbpFvtmb06fPbCXlrIcJF2ILdEMOLDeewBUywDwSfjdwWMnmmCa+JaDVkE+Bbb3N5wOo17zbOdsj9TCPaJd+M2B6rWU1wbzBl8DuMKJXwDC1IxCPl9lOmx7/dKE0G70iERJG0GC/adp/MqbZ4/Yb5kjTkVXtf/r8fO/cLn2mFchuF88MV6+RZcaG7ksm2Vd6raY4Ki6e2RPaqsle1J79vSICgOAwWDa6tG9O6G8vXK/MYgY8h30LutjGAD3gW+RH0WPaCowB4VR58/zcjPzZw647+D3c63fqfb8jWwnGYDjl5X9mAQ9Rw5nznL+kfRcxGvUYmtGxemmd+CvjQLwIY9UfL82OQ06YGty8X7MwoFF++EC7tHXR8TbdX7wBoIDgS8C+u3pcnMpczhyqXJAKuTg/dJBHxzwemYE6n4HfY9IZ18y+A3TxVY8Iip6qZjrdZUX38UAizkaSX+YLOmge46DVMocNXshph96YBA/o9OhSwKzyCHyVHTV+9/31MOX1gUD1vPDwXDRGrUmI+Ya2TzZsFvi2NfbG/81MX36QhgNTBZm8Kmmy1pdDLRzlhmIxqAll+ntFxbFt8GBsUf2Xs9H4RgGQN6RkflSe0xarRmCFus7BoIBR1imRQ6yLZ1r/U61329kO8kAHL+sPloXJGeZteSDUIe6zgX8k5PUuLZ+Xe4iDMDrHBzKeML3yEGFq597pZB2AyPQIxLEyCGPrXbkEa0tPgQkrq9aAGQ0d9UcliT2lqwT7YjXGVui3u+ZJpSjJWmdEkt9NnYq4h65vB2WozwP6owYgJHd2aVj340uA22O/Cwwi9JWn4qucv+PQmDNbY6Z8/sI208/aFM+vAPOHLNZ7wPS7pxDofaV6ZEIFo6/I5pjXr062mNctjIA7gL7qrdfMY6ia3wLPXrrw3fHjNcjZwWfkZrOuX6n2u83sp1kAC62rC4Nkt4WJqDu0YFOUnGh+YB6F9dohBdhAEhB1MKjj5n6fI7M97cmybwtR01IJdkzkSwxACSmkWRf98P80QsLdFDN1R/Nm8ahZ06ZU3XTTvDIpvYf0RsveESPGAAHek+tS8IcrVsZg9/NsyVr6qA+JV3V/rfGLuaWmKqo+5kARmTfkNZps2piViGht1qSJQaAVmuOqS19YCJHFygt05yDqXwfLs2WMJgu5h5tZQBG+0bbzqae6a7ud7RnaUA4Gtd0zvU75X6/cW0lA3DxJfVhy+jXbvJjWnZw45jZdpfoWAaA+vNvB0wLVZ1wojWq4l4a4jJmqkSYtDTHADBdsCmu8Yhewmb0+6h/6nRJmVqak2zkbhDHP0e+L06hTAI96jEA8BdG2CNaFyaHOfIiJa/21tZNNU77cWp8r2L/Y9h44LfE1MY8skQj9bO5tLkt5hgAEj8mEfOwhjD4PUZzbtyYktHroCI8hKX2aCsDMBfaidGjJZsjTFAvTJWQwzRVhyiec/3WrMtuyyQDcJqlhyOP1w+Y7JIXwdUBLfmIBED1R9OO9FgGwAE5cgj7ukOiH9L1GnrNybehV5YKX3hUS3MMwJzD0JrxrCljXOLzW3KQ955yFns/CsF734FzWNu2WO93GwyuxwDYRyMNjP1ljZYIM9WLF+fsOOe8utTu6Pdz7n8haj2bsrF9Y0RYlyXiJNvL1tljXOcYAN8gLc9aYqtv1eHq8h/h64Ixb2kUhaAOxnJkqtvKAMz5BBkbrckp6Nzrd4ox39g2LnJR3VhQLjgxIUGvN0kiHGR6T3Ku6WLpMj6WAZDsB4PRI7ZGXslrSHKQkeQjrKknDcwxAMVjek3fdRmSO0n8lSctDBUwJ6wtZpkRAzA3XowUyW2J5vDuMQAfsWENlvpuf+fEJTzrMumy9z9n0Dbk7VTzIU23mfbmGAD+BD2ny9F42OuZznrEORYD05I9htluiT/HKOpD2a0MwChbJaak5zdzLObnXr9jx7mLeskAXP4yc/Bx0LvgeN1Tcz/+ym7nbOLHMgBzUi3veV70a0js9chUMLKpz12oIgBGGfN645H4xVzeb+Nl32trxAAInRw5NI6cDdv2e6meS5keAyCrYc8Zbc2aLJWhQWhDRJfqXPT3U+9/IWqndGas5/etUwrq+m9zDECbfncNVpyAZQttqfeGiKyc8g30zgsajLkQxC0MgPZH2ka2fYzLqejc63eqcd/IdpIBOP+yurhoBkhj7GatM1I9IrZgIXC9j/NYBmAuKckaW189PrHQvThs6kJqw5ZGDAB1Zi8+e7Q62hZ3Lw3wKWjEAIxSF+uTip19f4nmDrweAyDkDON3GbRFw3MZ/WvzovufpMzx7jKID45kVjXNMQBzeRxG4xuFapK07es6nJS5qhcRwwHVmyDCjEe0hQHQ78iUsDaseO16nHv91o5rl+WSAbjaZZdcx4E/l8ee+s9F1NKxDIC0oSM76VYGQFhjz3buMOk9WjRiAKgfqe3XkD0rz8BcmlJ2bpKLg7I+UHlMY6haGjEAI2cx9TlnOWSXyNq2SZhKnR4DMLc+S30t/U67wMRwXeiY/T/nmHnReclHUeeb0N4cA9BzGlwaA7s9p75e9sLWrCS+XhbKlu4/8GWpy21hAOYcTx9+MBu9+NKkNvx+7vXbMLT9FU0G4OrX3EHgMZ1ReNfI8/tYBuBUJgApeEdJjWQt60nnIwaAh/pchsF6ldj7e7ZSZRx6JIxRIqKtToCjmHp98eZm6liiufH2GIC5lK9bGbSlsV2H37fu/7kcFpeR9niOAWDOk5hpK400S3UmzfLKY++dCxgsPWS1hQHAxNevV9bzGWUa3DrnUv7c63fsOHdRLxmA0y0zVf7Sy2Kj3jzvKpd+j9hs2W5bOpYBmMtst0VFLMOXV+d65ALuZWk7BQPgpbGR57WsbCMcjVMok8dHWhppADAao1A/6V0lcloi9nySd496DMDcU7tUwqS/60jn2v9zj+J4n2MUcXEsZpfBAIzSC9f2dvu0F3o3ylfQzm8LA6DuSJu35inuLdiee/22jG13ZZMB2L7kvJxJt5zA/Cv/nzTIE/0Ymov1LS/lte0eywDMhe+tTWpiLDyQjaFHI6blFAwAW2nPXDAyO9TjI6318jWMGIC57G1rX30cvXBoXD0GgGOZB5p61Muqdsx+u0idq97/1l7ypd7ZJd8+ZvqUdBkMAOc+WSl7fi8lVFMejV4orQgefgRLtJUBYOsfqfqtuXc1TkHnXr9TjPnGtpEMwLal5S3LK9cH3CP2Q3bErYRxGKmtJX7ppd09lgGg7nOJ9pwPxVcL75O8Y4lc8jzwe8TznUd1SxdlAOZUlS53KtkRsf3zDejt+REDMPcgj7l4SXCO9EVi6/lDqNdjAIQx2mM98qpg7znlpbU61e/XZf+PHsZhSuLQNpc/YysWl8EAGMPo+/VNeXxotG/W+h1sZQDmfE84Ky85XkrBLDV2j0j9dYKlc67f1vXeVflkALYv95xEZ2O7zOfSw/Z6lFXOpdmjkdp3dID48HuPjtRtu0jkKujRmlhxXDzbYC97njSsHJ16j9VclAHAeD16MG6OVcwSIxLj3TOlKO/C6OUN8IofJ6geYaL0N/eWPJu9J5BHNEoFLFa8F3rlrQSOcyMM9MOXQtpWGpH6Xy/JzPbd/9gXCnuPLWnrXPt/LlJiTWie54ypvDG8BSORKz3G97IYAJeq76El2h9Mf/sQl3Jy9Xu0aA1tZQDmElCtSXhk3LBvyfeBKbN3C51z/dZgtdsyyQBsX/qlRBbseNTDo+c/6x4d1uzDo7AvFxOJvHeZjmzhYvNJkb06pe+5bICPmB4DmmNi5rLbzT2Qc1EGgMMYTHoe1A5vUn4vNE9ol9jxuXfjPd7TexJ4lOMclnPqWEySQ3zuXfURAyArIvNDj4RxjjQvystcyNGzJRcdfEbOXmu/hOuw/+cek6HK9phVfeHUcxtp2+wfc5N3v6bLYgCEQ1qTNozWhWlf9TIGbvHR2coAMEfw6cFgtiQ7KdOKqJgeWQ+az973hWHEcNV0zvVbu693WS4ZgOOWnVQ3ej2utOgRDN79nvukzhOzS8p0MUiO4rChzu09alPa6CUHKb/JFNhLZ+p36nkpROfyvjM5jHwWHIIklPaVMRnBHE7tB13GZI78Ika5yy/KAOjHU8Wj+H+SCumX4xJi5sBcydZWJHyY9Pa9p50f1NkOnlu918w2cVDz3K/VzvLDU5m2IWVtMyMGAM4YGZdEj5iEvMXQSqy0N/rtaTNGz8Ye8wVch/0/l7pW+Jw9yiRQk70p1p9NuyUOnRw7W7osBkA/IydTGp5Wu2bf2lde61xDWxkAbc45rGJW7K/WVGkPM/f1GAfCCJ8b32xL51q/NVjttkwyAMctPQkbx9uLKT+uxdvWopKk7hsl6KAmvOdMZ1TXXh9jNzfe9pEUY/f7yJ/Bx0uLQa3r8MG08LLvxf2XYXhHYC5X/SkYgPse1O53m5k35yprY5zspXVCIqFTLs022YvmHKwuepoTly8GDjmIMUJz6VCpkl0gpDeHtAQxwiSRB2BGTwKPGAD1aJHuNzNPmhr5BczX+oq6IPn2yPgdxBeV/kvb12H/e47Ya3ij/egSxQjACZOtPMfVsi41TrQF9krvorpMBmDO4bNdR9K3BGJr6RgGgBbAPh69MKhvFzcti/MBZnOOzx4YusdgwOdav7V47bJcMgDHL7vLmYTfkyaOb/WxNR1eQt3mcp7PhQ62/XMqY0poidTLdtfL5rd1DqTg0cM5pa1TMADs7iIutuT61z+GSgpWF+sc46Rs621P5X5MCl3MG6mql81NP3MMgN9J8/IaXITY/u0Vh/Yp6ar3v7nQ7rAnX4Qwt0IHR2t0mQyAPYyBW5Nrf+1T2QWLYxgAdTGwXiPtnRdbcKbdoEWccyg+x/ptGfPuyiYDcLElJ12ycUn3eioivXL8Gz0aUvej7Ejqq8uNGABleM5jApYcB0fz40Evs6AY7CU6BQOgDx7HbOFrySXI6RFe1MAkvbm93wu3k2SGWWUtMUPYFw73UVjfEgPApio5zJZ+6/HRZFDbtnbttXNYKnfV+9/4XDJC5rYyhOpyWLV3R5e/MpfJAGhfmK9XCOfIN+ZC3uLIeSwDYBzSXEuCxQn2GHIWuNxHicLqNi97/Y4Z/27qJANwmqWmmvN8LzX72od+6p5xybhul8zoKdjeSKnxqbXnHM3Um2MA/M4Z0at1d92QktfHTd3PFt36CoxQPRUDoH2HJs/+Xqa0un+4sgfXY/zUGdWkuj0GwLfC9MD0stQnvw+e8kKfRgld9LM2bJQ2SL+9HAY9rKm0XSx8BeYiBk6z+x+rmr6K/V/GT53M8bHnhT6ao0gY2hlrNUeXzQAwq/V8T+oxecERI7eFLsIA6If/iaRhcg6s0VCoI0pBpM1cMq7eHC5z/bZgtruyyQCcdsldpOzLpHJ239tNFyobZIlh52nOVvzISRJla3YYjWK/l0bIe52K+s0m6ZY6n/MTL36HgKd5pR594FJDBwc/L/JJSYyRMQe2XjZwkqiLxD/j9YFrb2tykFMyAKZjfCQNYybZw9/lR/I1b06UnL56RMuirsOnYEbrAisSJdtxj2hK+Dq4lDFgpGASmj5J2hzk2OaL6nPuNUB9L11AZQy+VU5qUqn6X6GW3lbHjNhTVMn8Pjwf68IY+Y6s2AZHF7mK/V8PlnMox1qXqoQ68OF0yzmVb4cLCkPIaY1vxhq6bAbAt+U7nXs2/JgU0BdlAAo2zgTaM+ZC8fz2uzOBL4UzRjiwb82e9+3MOR4v4X0Z67fU565/TwZg18ufkz8DAnN2Toe+izspEUgEEoGzI5AMwNkhzw53hsAoakHYIDXrKbPW7QzanG4ikAhcBIFkAC6CXtbdEwJUtVL6MgH45/9zRFxSeVLL95ypRg8m7QnTnGsikAhcIQLJAFwh+Nn1LYEA5zZqfDb39vEWceUyDI6I7ZR/R48kEOJsmJQIJAKJwJUgkAzAlcCend5CCHgOWExzjzjacUAsSYPqMnIOYA44KrYkIY/ESmn/v4U2Qg41EbhpCCQDcNNWNOdzagSEdfIeF9HRIxnRxPnLSicjoMyKsvK90czbA8IQaRaSEoFEIBG4MgSSAbgy6LPjWwgB6U7FaveeUN46DWGJTAdrkqRsbTvLJwKJQCKwGoFkAFZDlQV3joD4comPxLofS559Flf+mGMbyHqJQCKQCJwKgWQAToVktrMHBKRIlZFP+tLeozIjDCT7ufeU238POOUcE4FE4BZAIBmAW2CRcojXDgEhgHeeMvJ5FEeEgIyM/AVKFkaZBGVIYzpon1C9dhPKASUCicD+EEgGYH9rnjNOBBKBRCARSARmX0RLeBKBRCARSAQSgUTghiKQGoAburA5rUQgEUgEEoFEYA6BZAByfyQCiUAikAgkAjtEIBmAHS56TjkRSAQSgUQgEUgGIPdAIpAIJAKJQCKwQwSSAdjhoueUE4FEIBFIBBKBZAByDyQCiUAikAgkAjtEIBmAHS56TjkRSAQSgUQgEUgGIPdAIpAIJAKJQCKwQwSSAdjhoueUE4FEIBFIBBKBZAByDyQCiUAisIzA/SLiPatiXxkR77ZQzdsQ7xARbxoRLxkRTx8RTxgR/xARv3h4I+JOy91miUTg8hBIBuDysM2WE4FE4OYg8NCIuEM1nQ+KiM+bmd5zR8R3RcTtB2V+IiJe/ebAkzO5FRFIBuBWXLUccyKQCJwTgSeIiMccnnR+oqrTV4mIBw8G8VQR8QsR8Xwzg/yciPjgc04i+0oEWgSSAcg9kQgkAonAPALU979UFfmviHDJU+X36JMi4qObH37mYAb4joj4s4mR+JWIeEgCnwhcJQLJAFwl+tl3IpAI3AoIsPV/eTXQ34qIFxoM/HEj4o8j4lmq378xIt7uVphojnFfCCQDsK/1ztkmAonAdgQ+PyLef+WF/jIdyf4FIuJ3tnebNRKBy0UgGYDLxTdbTwQSgVsfgZ+OiFespvHhEfHpg2ndNSI+u/rtNyLiRW59CHIGNxGBZABu4qrmnBKBROBUCFDp//3hwn+yqsHXjogfHnTwNVPoX/n5SyPivU41mGwnETglAskAnBLNbCsRSARuGgKk919rJiWe/9GDif56RLxw9dt7NP4DNw2fnM8tjEAyALfw4l3joYuXvvOU/MRh+LQR8eQR8d+T5/QfRsSvRsQPTLHSI2/qpSk+b0S8/UEaE5L1ooe47KeLCHv6byZHrJ87qG4fGBHfFxE8t4+lJ4mI153+vVhE6PcpI8Lfjf0vpsQu338Yx7dExD8tdPSwJj78bQ5q4m9eMTjhaI+MiGeryrItszGvIY5oX18V/KmIeNWZiufC1xBe4XDRvtWkahc+9zQR8S/TWj7igD0v+m+fwuvWzLVXRmKeN4mIN4qIl4+IZ57W0XrBVWz+l0WE9Sl0l4j42uq/7d3nqv67TRC0Zmzm93tNwaeexvWa015+zoh4immPGd9fHxwJOR/a0w84JBf65TUdZZlEYA6BZAByf5wSAZfkpx0O6pfY0ChJ6mMj4gs21HGAssHKsLZmDztsP2RiNjZ0E9S/6t3jML5nWFnxrw6XFjtwfdG2VamP71j9UYY5F88SySpHxVwT5uOZlipOv/98RLxsVdZF+L2duufCV9evdbjo7jsxi2um4ZJ+34ggaW+hNz5k4uPM52KdI4zi50bEh0XEf0TEfab/X+oI5XuzqoE2QdDSmP52Ym5KOYzOPScnwzrPwFI7GNv3jog/WCqYvycCIwTWHJ6JXiKwBoFPiIh7rSk4KPOFjaf1qCkhWZiFJz6iL0wDB6419KQTw1Bf1GvqlTLiwD9lUOEbIuJtq9/udogr/6wVjUsf+1JNuX9dicUrH1LPkvgLPfwgSb54p89z4UubYc61d/0KCP63yD9HxDsetCjftrJCLy5/qSqGDGNGe/T6VWHMqr2OegmCltr9kYr5o7nR/lzCoLn2MJuvFhEcDZMSgc0IJAOwGbKs0EHg3TsS7G9HxFdNqltqU2pM0g616+tMB3itytYsFbWY6RF9/EGV/zHNjySq+x8OQgerfv5tisGWZpXz1TM25T/0oPb9zBWrSNJjxqjpUZOqXgKXP59MGtTBrzTNx4VQE3Xuj3X6ImF+YPX3jztoMsxtjkjKD5oKwBKDUggzhBGYI5flm1cFqLZbLcW58CXpfvchkx5nupqYM75uyrAHXyr755ku4HdqMvGZL0x46M8RRgwDUNPfHcwonPN+KCL+6HCh0/S4hN/iEK4Hl8ebCr/etK+fvapMk/A903+rV+8v68qMUcj+/8imb8yL/q0fhu4Fq9///eA/8E2TVoaGg3ZMH74Z5Zi7aNn8rZByGLn/XMAhf04EboNAMgC5KS6KgEP6TzoHIal27lDiVe2yp4YuNBcy9QGd3OuSs+iHl3aPZGtjk68vGnbl55/GPJo7m3zLiMjrjkEZ2fddID96cPh6jqpR/+2SaommpEiRfqMCv/vCQrh03nAqQzrlXFaICYApYEQuUZdrudjYu2/XrM858f3W6bIt48W0UbnT7Iz2DF9+nF++AAAQ5ElEQVQSPha1/V02PRoRviU9ovX48Wreyvjvt4wI0nOP+ERgTuwd2f9ajQtmwH7vEbt8bf56nwMz+iWDst4SkA64EIbHPuUbM0cYAMxprQFb60Oy0HT+vDcEkgHY24qffr6kXNJ3od+dnNLWON05ZJXnvFeo5yDlUGW/9pJaIZqAT1wxHc56DtX6Yl4yBbQHOQc0GgUS2hy1DmMuM3P8x6YS2+0XV39bChWTdY6k53vVJjs+6bGQy5yj3IjEpfNLKETtzuRS6Jz4st/Xfbv8MTajsLp6Ti89JdmpJWB1qdFbgpV8/PUFjsF8uZkUvqWNHgPotzl/i/LKX60F4tjIaa9HGBHq+0LvPGmyZpbx/35qtRr8QmhIkhKBTQgkA7AJrizcQaBNk0q6q9WgS6BRS/N2ZjLg5czbuaWfnby2y995zDuk1xLpuk7cIqyLN3+PqGZJo1Su/rHTcjYs6ve5PqV//dOmQC8LnDnX9mtq39onoO2j9jQnnXIGpEYuJPucy65HGCCpaWGMXGKkaJqQQufClyMlh0wRIYXe7+DE+EVrF3JSvxdNiGq0BrQXLdmDbWQFJo4T4RI5FzELtXpeHY53zAI9wmjUTBkGGOYjjRFzVc2U2o9tuOFonBjmd5m+F98MjQ6HxaREYBMCyQBsgisLdxBwEHkbvRDpuVWbXgQ4dngqz0LC7mgJ5lTebX/tYy5+F8JXX4IXGWOp67KtL2Z/7zEA1Mz1RUSCrS+1eiwuTZdFUflSAZMe67FzVKy1MHV9JhImhkIfdbCl37v673Piy+mvfgGPdCzD3kiF31sT9WuHScxLnaWv1IEH7VShkTlmtO6tn4ZycINfj971EGHwFdUPSxkAf78xZ2Ayv/MUmzDbSATWIpAMwFqkstwIASrVVs25NqxtDaok79qO7mCu1dlr2iAxtTZf0hfJ+JREld7GZ+u71WpQ6dee23Px+LzOOQkideQ7QLWJhUZBjHxLbP5MA96mR3wlhMHVTMq58KVZ8RIeJqnQaNxza8JRj5apEBMSn46aaDhIxfX5RsNC07KWhH+2zqJvPfmU9NpoGQaRHpz2RtRGFzBTMQnIYZGUCJwFgWQAzgLzje+EsxQpuybSEIlpzja9BIzLiqRU71P9cP7aQj3JnHqX2eGU1Mbp8+KWNa4liZHqTHLm0+KnDm950n/xNK+dymgAStw46ZPHeUuc3ThBFpKj4SOq/z4nvj1sOC9u9V6XyKeWlDEVz9pMvHVoFDFgHbYknGp9FXSB0cBw9IhGp06qNPdegPok/pZps9bWh3mIb0RSInCpCCQDcKnw7qZxYUgPbmy7ZfLCtEhe1PgOuC0kjK/2oibBtqF5a9pz+NcXoTrs9Tyv54j6/k5TalcMg3As0Qv+uXzb78ffau9slwK7c0vqOeBFUCDSqqx7LfH05yCIaBFoLYpN+S8r5oJGhATaUv2IjUuQJqCe8znxFXJYP4kLG9qNrWQ9OMEV6j3Ny0+iji6h5VBvC7WOdrQmwlh75grrKRy11m4IdRVmOEeYNs5/LWEOMQH+MV0sOZ9umVeWTQT+D4FkAHIznAoBjmgu2aJu7rXLk1+ct9SqPWe/tk57aZxqrNoZ+QC4lF28wrTqnO7H9C3Mq7Z51224iEsGv56mwLdJLVxekmuld850wvtQLyJCqlv28UIYKRqEms6JL+dITNepqecDYG+5rAtJyFQzDWvG0Por8Lt4jUFFPimtpovWBpM2RyIGOKfOmbSYBGgKMAs/uWbgWSYRWItAMgBrkcpyaxAgAVF9CjOT23xEpFiSrTC+0aMq6spWN/LWXzOeURnpU3uMChWveP+LXvyl37nQrnputAFtGtg3qNL08vB22dc+C8wGJZNfL4+APAYlUoKanQajVV+fC9/W5HGRtWvrfvXkEV/+TpPSzlPq3tqRdE3/PP5J8YWEUvIL6FHrlyBPQJ08aKk/jIW8EHPvMmiDqU0OiV765qU+8vdE4DYIJAOQm+IyEKAi5zAlXSsVeB23XffnoHRJMR+0ZG+Knyepn5qoiNmSaxJLT8Jq8+pT/dJseLhImBbJ3bhatSzmQbKdmuZCu1ov9TabX/1egMu8Vp/rw1g9goRK2trSN1MBDUExMfTqnxNf8fByKVwGtZkdWx8Bfco42YZnLo2l1tAoK86+fYehtNGmGnZB1yaIpb7K75xIhdX6dpibRiQslIZqKfvj2n6z3E4RSAZgpwt/xmm7UElgnMBkZmuJNsBFRrqpSQx1m+FPeOFlvILmO6DibSUwmQZdMG1oXw8+Ht/MG4WkfDWHkZNbLaGrI9yvRCq00QS9hDK1F3mbF4G5oH7zoIfbOfGVPpdmpRA85zREF9meUizX/hA97cpS+6IIOJ/WdPuZLH11lkZ1Pnl64Gepn9HvGGZ7US4DjB8NSktLUQbH9p31doRAMgA7WuxrMFUhbELaeKfXRLJ2wNYOVr2kOsdIcmumTdVL5VuT9wV6Dlqj9tpse6P49FL/85oENnUGRH3TnqBROzUDUSeooX2R377YwGku6sdsSv/nxLd9hnjLE8Zr1q8uI/KkjnToRQkstcmE5eXAQiIuJC8aMXNMM/W7Fvb32oeKlsbCNCTXhncaWu1UpgBeQi9/n0UgGYDcIFeBQC/vfPtwTu+CIjWukca3zql9053UKLRszj+h7aO1p48y1JV6HPfqB4CKlK5fUQEl7fEofp0PRXkPoGYS2strlP3unPi2DMCpk0XVa+Hirl8YHL16OLdHME0SLhXivMqpskciTFpnv7lwwa17s5SnIRI5IYdEoTnHxGP7yXo7QiAZgB0t9jWbavs2PZsmqbgQyafN1Df3EMtFpteOhf29falurn0Odr/ZFPBCYp0Zrq3fxplLAsOuz2O9vCBHsuT810vzKklNcUorWed8z8YhfBGxu3upsEfnxNdl6lItxGOez8VlEH8I2BeSnvcOGzqCHTxrvxXvNlivHtknP1j9wGyFUd2S3XDt8GrHUHVEO9TvaKxtJ8slAv+LQDIAuRGuCgHpg6k2CwnTcvnVVMe6+7uMgOKitxBnqqV4f1EBkuIUWnqcp+2fPbbN5b+UsKj1HJdjnkRHfV+SB93j8GzsfQaTZUopcfTqGD/HMw6OheRMqG3vbVPnwpfpp37ljobFI0lbUjG7kF12S6F1rQZA7on6BcGlvdPuS+U93kRL1CO+FnwuCmHi6kd+lvrb8nvrm3CMf8OW/rLsDUcgGYAbvsCXOD0XDs9oHsvU91vU5YYlSUqdnKWXza59w15sttz2a0l4FWmex726pNCeZNbmZd/CALi4PVNbE+9sTnZzCVxcEi78QhwlXYolox/nSBqPUWpYzomfMVUukmAdOdDzq2hxOxe+zhlvN9RZEZeYk3asTCby8HO05G9Btd+j1rRivanP1+xP0rw90kateH3xoYP+2lwKtFi0WT0SlWG/2OtedxTSt4U40UobXWgUzrqlzSy7YwSSAdjx4l9g6hLKsHGXg5LUJHxpLVH/OgBLmJp6vSdtMRjivAs9Zop9bz20e/2SOqlm6zSxo6dj26dZR6l5234kP8JcSOhSZwAk7XJqnCO5BmBQSBSBpEHeVkCezK1t2W1bdRY/krRLqr4U58LWSlvnwld/zCEuvkJeL/SIz5osd5zqOD162wAJwxTv33sQisNj+zxwa17qrQvVv3DUNnUz8wtmbqStsIZ13gjfQf04VunLHuH8WLQRokQ8b9yajub2jG+hfvYXMyS6JikROAqBZACOgm33lTg5ObjKgQwQNmne10sHusNSUpZip1Z35MzUHprKOnDFeo9ystvTDkVPzPKIL0TabaMPym8kS6FbNVHRP2BmpdmZSaKkfRn/JHIptBQBoFzrPObC9zQuIrVy9pp7q4DJgekBuaRoDopTIMnQGi09EXsufI3RfGglaukaviItRjn65YDgKOl55pqE+tVe+vVvHh3iO1FnAqQh4QxZmyFKHfuFN71MiRJZYTLL08nKPOyQiU9YZo+MT/n6O3CptyGtpW6b+pd5giZkKbQVo2yP1k6j2mwdZ2e2a/6UCNwWgWQAclcciwDbdHsw814npZCkSOnU2CRjKlgSOScmj6DUB6YyPOBHlx21LBV7XYft0/sCzAj6IU25UEnkLsbyYl6ZmwOZyn100bAtYyio4Atp8+6TNOf/I32IaSd9i83H7JiTED6OYoXMye8jNbVyvj31y7zUcXmhueeBSx+0GeLP6/GWpElzF2S73ufAt/SJSWrV3nIfCHuk2hay55VDpg+5IWhF2tA3tng2+TlyUTIF1ESCL+l07QO+IZgkJqwildu3GEyvWRZqMw3Wbbbplq2ncMHRQz60Udqv95nQQql++WpgUJgqYIAJ4QBKSwKH9q2INvnTAiT5cyJwWwSSAchdcSwCpBJSdZtRb0t7Dn8Xap2zvlefZEuir00Ga/vxEAxpfil80NO0npltvwmHOSdCTEKtUXCh3GXSEtxx8jWox+QQd6E5yCVy6cWQP6p66a+u61Jmz5+j1oeglOUk50IrTMsanM6Br3HAVnKl2hSwZnylDJ8HTndLHvZCKIXMjUL3en2KmGA+kPWxjgBpMw3WdTEiNeO3xnTEL0WmwMLsbZl/KYuRwaQsaXiOaTvr7AiBZAB2tNiXMFXqXFoAYWu1VLPUlcvTRUBSW/LqLm3JjMbvYMm2XspLMyxFK9Xu0oVR6tBOOFyX5kJSc4kVxzCqdP+/5Oav509DUR7taXHRTqutWOM/oB1RBj1VMwnbvLfSOfAtY3Jx0gaUZ46XxiqUjzZmSwQIdb5HpzCYc4RRY07AWDDn0ETVIYqYgjqEsW7L5V9rI+a0BXU9ZjB1t0YL2BuiZeYiO5awzN8Tgf9DIBmA3AynQICUy4udJCz/PQmUKpTETt3KTso84AATJkV17W9byX4VU079zSOaSpV07RAn4ct/71JkMnBoL/kj9PrXHidHfbBbYwZI0+y1D5m0HiQ4fdYk/z4/Ahi42FwmmBDq3TozXV3Hhda+MEeyo95dot4LdDCF/ShyYKnNc+BbxsA0xPYuEoQDIzMRrOHGZu8iphkS1rikIZqbl9BRWRXtF8mPmFxodPgJWEde/MIoC7UvCfacU0tZ46q1DPIy8AtZS/IT0KBR8/OJoWWiGaB1spY0ZEwGNAtwWPIVWNtvlksE/heBZAByIyQCiUAikAgkAjtEIBmAHS56TjkRSAQSgUQgEUgGIPdAIpAIJAKJQCKwQwSSAdjhoueUE4FEIBFIBBKBZAByDyQCiUAikAgkAjtEIBmAHS56TjkRSAQSgUQgEUgGIPdAIpAIJAKJQCKwQwSSAdjhoueUE4FEIBFIBBKBZAByDyQCiUAikAgkAjtEIBmAHS56TjkRSAQSgUQgEUgGIPdAIpAIJAKJQCKwQwSSAdjhoueUE4FEIBFIBBKBZAByDyQCiUAikAgkAjtEIBmAHS56TjkRSAQSgUQgEUgGIPdAIpAIJAKJQCKwQwSSAdjhoueUE4FEIBFIBBKBZAByDyQCiUAikAgkAjtEIBmAHS56TjkRSAQSgUQgEUgGIPdAIpAIJAKJQCKwQwSSAdjhoueUE4FEIBFIBBKBZAByDyQCiUAikAgkAjtEIBmAHS56TjkRSAQSgUQgEUgGIPdAIpAIJAKJQCKwQwSSAdjhoueUE4FEIBFIBBKBZAByDyQCiUAikAgkAjtEIBmAHS56TjkRSAQSgUQgEUgGIPdAIpAIJAKJQCKwQwSSAdjhoueUE4FEIBFIBBKB/wHLg9oIGlwOqgAAAABJRU5ErkJggg=="/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-121"><g><path d="M 75 264.63 L 75 250 L 74.65 235.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 75 269.88 L 71.5 262.88 L 75 264.63 L 78.5 262.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 74.53 230.12 L 78.19 237.03 L 74.65 235.37 L 71.19 237.2 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-122"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 251px; margin-left: 75px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">S3</div></div></div></foreignObject><image x="68.5" y="245" width="13" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-123"><g><rect x="10" y="271" width="130" height="40" rx="6" ry="6" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 291px; margin-left: 11px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;">Analyse Service</div></div></div></foreignObject><image x="11" y="284.5" width="128" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-124"><g><rect x="10" y="107" width="130" height="40" rx="6" ry="6" fill="#e6e6e6" stroke="#000000" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 127px; margin-left: 11px;"><div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Upload Service</b><div><i>tusd</i></div></div></div></div></foreignObject><image x="11" y="113" width="128" height="32" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-125"><g><path d="M 455 153.37 L 455 180.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 455 148.12 L 458.5 155.12 L 455 153.37 L 451.5 155.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 455 185.88 L 451.5 178.88 L 455 180.63 L 458.5 178.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-126"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 167px; margin-left: 457px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">HTTP</div></div></div></foreignObject><image x="442.5" y="161" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-127"><g><path d="M 236.37 41 L 265 41 L 265 100.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 231.12 41 L 238.12 37.5 L 236.37 41 L 238.12 44.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 265 105.88 L 261.5 98.88 L 265 100.63 L 268.5 98.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-128"><g><ellipse cx="215" cy="7.5" rx="7.5" ry="7.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 215 15 L 215 40 M 215 20 L 200 20 M 215 20 L 230 20 M 215 40 L 200 60 M 215 40 L 230 60" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 67px; margin-left: 215px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;">Researcher</div></div></div></foreignObject><image x="184" y="67.5" width="62" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-129"><g><ellipse cx="185" cy="524.5" rx="7.5" ry="7.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 185 532 L 185 557 M 185 537 L 170 537 M 185 537 L 200 537 M 185 557 L 170 577 M 185 557 L 200 577" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 584px; margin-left: 185px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;">Database<div>Engineer</div></div></div></div></foreignObject><image x="159.5" y="584.5" width="51" height="32" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMwAAACACAYAAABHuIblAAAAAXNSR0IArs4c6QAAG0lJREFUeF7t3QnYtd1UB/ClkUpzStGgpDkllaERlQaVDBGlUGmgqJCoSKSQCiGaUEoDGhXNSWjWREkDzTMNms7v7d7ftb797XMPz3Of857znr2u67m+732e+97D2vu/17jvdaXo1DnQOTCbA1ea/WR/sHOgcyA6YPom6BxYwIEOmAXM6o92DnTA9D3QObCAAx0wC5jVH+0c6IDpe6BzYAEHOmAWMKs/2jnQAdP3QOfAAg50wCxg1kV69KYR8VOp71dFxBtdpLGcfLcdMIe/BTpgDmiNasC8aUT8w4LxvSYi/i0i/i4i/iIifj8ifiMinhsRv7egnf7odg50wBzQ7jgvYMam8kcR8e0R8a0DoA5o2s2hfEZEvNPwl2+MiH88kAF3wBzIQhjGLgFTpvkvEfF1EfGwiCCRDpX+KiKuNgwOcP7kQAbaAXMgCzEXMM+LiN/dMuarRsSbRcSbR8R7bIBxlZG5/fpGXfukiPjTA5p/Gco7R8RL07g6YA5wkQ5hSHMkzBdGxLfMGOzrRsT7RcTNIuJuEfF2jXf+OiI+YgSAM7rZySN3jIjv6oDZCW8vqUbXBExmDPDYhI+MiDeuOPbKiLheRPjvodBjBpCX8XQJcygrc2Dj2BVgsqrz/YPkyVP/uUHS/O+B8IO6eN0uYQ5kNQ54GLsGjKm/ZUT8avJAFXbwSmU1aIpNV4+IT4yID4uI94wI/2ZDmQOP1l9GxIsGl/bTI+LfRxp8nYUOiN+sANVqes3x5fZro/9fh3mXZ669cVDcKSI+PCLeNSKEBgQ3OTF+a3NYPSMifmBw/0/xuP77G0bEzSPioyPivYY1xPPXi4h/joi/jwi8+aWIeEpEULnPQtq+VUR8QES8+2AX6+e/IoLTiAPmxRHx7I128qyIwIOz0AcO8/nIiLhGRLzVMJe/GcbOXv/JoZ//aHWwD8DoF0NsZowuxO1sgf9nYuacCl8bEXeOCKreHLKQXxYRT9zy8JqA2cX4xgBjo75JRJjD12827d0j4rUmmPLHEfHZEfGcOcwb2rtnRNx3cOjMee0/Nxvw0RHx5ROHVW6Lo+hREeFQmEvW9iGbQ+PhETFXQ7n+4KllP88hAL3fZn8+tX54X4DRr3jM51QD+NiI+PGRGbzjkBbyLnNm2XiGs4LToqa1ALOr8Y0BxoYhtUnRWy7gC5c+L+WPTbzjUPuhjVZgbc5Cz48IJ/irJ17+0I1E+ZFKWi7pzxhJpakDlybzbcMBs6T9smc/P/exT8C8w8YRQKq8dhr1kwbJ0ZqIhcP8bFt4jgpAxeDqlpXgdKUOfUhE3K6RZ3WXLZLmbYZOiWWqSyai+8/SL2w22QyZdj2+0letkr1iM8dv2DhTHjE88E+D2kUtohK9weDix4trVWO2id+tmlvN+9oB4u/6/N6I+LWhD6rSW0TE+w/OHepNpicPv9+2QamNMkHKGngOj62rLJGXDaoYHltbEuJTBzUqt/nVm3981QgKPjMi7LFMJCFTwMFBkuhXHzce9mLt3SU1v6A0sE/A6BMAbMZCGFMvavkbFeJx1WQfsDkpvmZEFAMlHfQ66T3eOH1ss2ksWu2xm+Ml29f4asCUQ4Jaxj65a0TQwWt6/cFLycWfyWZx6rYImNgKWcX70c3hdJsRiSH2BiBZ2lGVgEmaVIu+dAhkl7+xt0ilbfE+zwGP4Pc9UoNsNWteH2YeoZXonx1WSPu3GA7u1riuPIRQqP+ZjO1n/GLfgBHxZ1tkol60JlyDi0F2wy0LkH/tNOJkyMRw/Ykt754VMPsaXw2YMg0LyBgfy56wvub9UWnu/z2c7H/b4Ee9Pjbk2w/G/RjrSbWXD6pieU5b99nyEimS7QlqD8k2hxwSNn0hDo/vbLxYPyfXkbbSmnf9ev3ub0fE+1wMwNA5uZnrDf7C6nfUth+MiLcd0lWoTQxQBuIccpLwthR66PB+692zAGaf42sBht7+3jMDwCQ6cGfapqY+ePC2SRHyY2N/8hyGDxs+S7Nf2Uj7G2x5V1aF7IpC1CEq5RwynzsM6hSVijMJWDOROhwdWVKSgOyeOXTN4X22biH9vmDfEoZL+GerEXMVP3PGLIx1rleEd4MOX2hMDTkLYFrD3dX4WoDh7VriWbKxbKJCTxtsgim2L5lTraJKgcp95r5ktWe1+fabf3/P1GAW/P3+G7A8MD0PPFS0ufvHqz88hDFKM9/MI7lvwHAvE2+Z1maWtnnHiPlCfPdZjOf+1wLMgvVcNL4WYLh8ZVHMpe+o7JbLVIy5Dcx4rtYexE/qLI/SDLsoe+F+ZyPNeM2WXC0ZGxLP68ekB6h7eT/MmM6F9K6sJr6A/b1vwED5S6rREq+CXmuS9PxsHFqgj9/SwcUAzJLxtQBD/68l9Rj/xBQ4SwoJyjGG2TNrEZd1VnnGbobyeNUShVrF40Vl9+55iE0sIbgQxwjX8hKiTv5yeoHT6Kr7BozkTK7JTHNUMrqkpE5GP92dISoS7CfrmaVdm4HHo9CuAbPL8bUAw43LiJ1LDqXvrh7mFhbTGSORd/3juYwCEgPPeeBq4sXyt0JjgGEDcutmZ0R5z8Z0GIjqc2wIIyxRpXgP67tMDoy8+efwDX/EujJde9+AwSBu30xSOuSWtcgicEF+UeWBmTPh/MyuALOP8bUAY8OKJ8wlhxKdPBP7YttVC+oVB4BMjLPS1LcHfJeAZrFNVS79khZsNgBj606pbea1q7tM1983YETdv6laAR6JP2+sCpH6043EzbMs4C4As6/x1YChRrWk6hhfSGcndib5eHXcg1eJ6iLgd16aAkxp/9OHNJQ54HRIAD6DXryoRdy/pNIu6Cb7BowThZFfaJthaOF+oRF3IWql2Dhx2EICdkR4nR6xxEY4iw2zz/HVgPENBXGPJdSSUtzuvFWZuN/vXf1OVJ/XUWyCcS7JVcaA32daYsO0xn6jDQhuvXHdftzg0Rqbn0PDWAWy67WXn7YNTEt41nr2E/cJGHqrFItyDdiABNUEFWsSjPI9gExUOa7iKZHsnV0DZp/ja212gF2i11N7bPhMtR3ERrHRcoIrlY23ac4HTc4LmDw2mRbm7YeDQxyuRZdLWxkekNpSayzCGT9/XrR4f5+AaenRMm35t2siXQSzCslBY3g6XefQYzcn4eemB9dWyfY5vhZgGLaylufSpw3pK/l5+Vzy0Ao9aCM1viL928ktDDAHLF677ZBvVpqYq5JNzcHh8EEbEAi2Ut9qdfSytJWhIQ6fOv3fgSG0cG7aJ2DqTSalQ7YvqZNJbhJVLSdpLo071H74NQGz7/G1AMPbuC1Pq7UppNwz4gu1VGFepByZZ2A75OYSVY6atDZgcv+8drQSHqxCMkI+pRqkPSWhstC2g3nu3C57bl+AaZ1w7BnuzpokSpIomQS1AG4O2dCS+bKLc03A7Ht8LcAsjV3J2M2GvFw7p3Ym6hcHTCH2AakzlzhobpIeXkvC1P1/VpV9LkP7rauH6lwwuWbU6HPTPgDDuJTLlDcwb8f7NoxOE/L7+vTkQakDntsm784Nx0CmNQGz7/G1ACOmQj2ZSw6gnBXuYh0VJxPbkJpWSKrLE2Z2YI05BHLu1hzAUJ+WBinF4HLuGNUxayOGXEs7rml5iUtc8c2p7xow7A7uzHzvwUDcoBRMahE1Tdp/JqdhnYHcetcJ6X5+Ftme823iVpDM31peMomB8o8OYXwtwLA9GMZzHCAydPEkUysRsc43s+mk008Rm0Icrc4ktzlbAU4pKuwOaqVN7GcqgJrH4PD8g/QLYJDxnonhD1QZSNsSTrfNz36xT+1fDicq62t2BRgDlYsjxbt2gVKtbIJtaLcA3Mf5HgNwGfwYiULTb+nhXJ8ZpDaM+xktAq465fuDGxm+5d19j29bev+FZMCp3Tykq/BgFeIStsFqBwreuS5QaOyQKc/YP+JqLljVPPdMyzlRq4e0gfrOzti06rs0vF+8YDWxbXKmNWD5WlGd2dzqS4xNtjXPYaELnxtbGzCQ7fSykK1rxQJlIvutC0954K6u8scXcgIx+GrJU/4uWCWNwQRJBrp3dktzMHBNZq9QBoBYTj6NxiSg9/Y5vjo7wkan+ji9ebXcb29d07W27JD6RuK2eypfMnwjIK8DoNXu6PJ3B40scEmU+Cs8wI7JZA3rK9G0BZsxk2sbHBNT15rlA8q0zofwtrs0tASqfa50QIqK9dTXSfJYeAbluflvIfYdtfPVcwAz9uVLDRq8D0EIGNEvtxHJwusyR41opdAAGS+Mkw+A6NuAAqBOEhue1HLacCvWWdHsGFdaSS8Lk3OxRIYvXBAaSIyDU8LCahf4Za6WQN8+x+fUz5ffXJ1mgxQguF7NppFNi0c2CFWYcVyrSaSAW5Wtg8Op6vTNG0xwkgSRECm2IT+PSgQcbm0Wu/Rew5Vp/Wf1iO3Eve+/0oiKKlVnT2O7NQVOqrcNag3FhIzLmPVZ36+xbi4MbrtE14qXOVy4mP04XHkMzUMfYk5AmW0xbVvvC8mucwAzgoFZf3J6W1z30Jdkx5IQSzwbJsYbZ3HNCzPYQy0i1o2nkFugTt4x8s2AX0wP7Gt8TmkSrZBNJ63FgreCvtvmYGOQ7nXya34eCGzmJSRI/MXDCy0glLay4wXwjH/JnZ56TOJDNvjUp4c5R6T7zP3iUO7HwWpPXZaHt0vAOMWchD6HU8da5iyICbrXwlszRTxo3Kb51l4rhby0UwOGekMXzt8bqPusAbOv8ZGgPg5RiDrhVDVmqgz+1OtYj51qQuLUxn+Lr9ojVVoGe37e+jpoHp9+SSV2AzJ7RFuA8TuSmxpoLWonzdh6O4DZb64rzA3esl1oJ0sAKpYn6fcP82DWAAypQXxStZx+VAS6rNTsNb7Wz5vCwyEWI53DYkA+1cTmIcb9tKQXFdCi8BTZ4FQSLm7f86r1WE4Gz9Jxy/VZ6psTzCYQ+Gul1O96fE7IfGe9NsZJG5IBf0oKPv6UDxsCG/7UuV9jm5LniiolrlI+Dmgty8cBqYhU1taGpQ5SfY2HI4axzeXs8PTlmZrwndppM7MbuL85C6j67u2QjNaaik0tctq3VMqpQ9XfAYdUlm4jq5ldq3/8Es+hcjt03eup8+wutD91Ms0ZRH+mc+BkONABczJL3Se6Bgc6YNbgYm/jZDjQAXMyS90nugYHOmDW4GJv42Q40AFzMkvdJ7oGBzpg1uBib+NkONABczJL3Se6Bgc6YNbgYm/jZDjQAXMyS90nugYHOmDW4GJv42Q40AFzMkvdJ7oGBzpg1uBib+NkONABczJL3Se6Bgc6YNbgYm/jZDjQAXMyS90nugYHOmDW4GJv42Q40AFzMkvdJ7oGBzpg1uBib+NkONABczJL3Se6Bgc6YNbgYm/jZDjQAXNxl9qHAvNX9H3fy3e+Oh0oBzpgLu7CdMBcXP4v7n0JYOqSbIs7m/GCr8D7OuOpUAfMka10B8zFXbAOmIvL/8W9d8AsZtmqL/jwd67Z6Mv8vvbY6UA5cF7APHf4lOda0/NJ0VyYdK12ezudA6tw4LyA8R1dm7xT58BJcKAD5iSWuU9yLQ50wKzFyd7OSXDgWACjelU2hpUnyDUw1RpRq92PWpbKNShvoVyFUgkKISkZMVZMaNuCK31x26F4jxIJSlwrHaFdhUKVreMOL6TMQ/638h8qL7dorpfsYs7fuDkmVOFSluJGAw9UGsMHVceUAVGKQk0VPDkPKXb7CZuyEzcbyncoSaHEiQplapHipyKtikwppTGHOFeUzSikXEapGG3vKO1xx6GKnr7y3y/X/rEAxqABxsYpZKLKr9mMTx0mO8U8m1tZckV5pkhfKqepGTNVvUodRwWL1E9RPlBB0kI2kE3WormAuRjzL+N1WChe1KpZ2pqT0ox4NqfqdX7fIffAoepcXUa81Q8AqPOjklxd4LZ+Xnu5Po5aN9bX79WbUaYv0yUBGAzK9Rf9v0KdijcpwDOXFBi61cTDTlSl/3L14an21XFUX1MRolwASWEpZbbPC5h9zt9YbSYV4Jy+S8nmdICovTmHaAUOHdJ7KTl0FKadqp0KJNmF7/9VGMulG0vflwRgMKSIURNTGes5m8pW1xwkjRqKqnMpXkryqOhsozrxc5FP7xL5uW5kvUjqXSpHl+lVQ/1H1bf0oaSdEn82lIK4SPUqFXhttEJj5buXSJh9zt/YW/UqVelSL5L69crhlKamUp9UQcvVjRXWVTbx+yYQwNNKCufD0CvUO++qZemwUBxWJW01J/03k1KESsVvK2XvWVXyshqvLP2Lq3KBVD57healvyvQMalkdFjVmgsBiIKpLx3K7Knj2CJl+0iVLOaBBWhaxGZRHj2rf/pQgJQUqclJpUy5Wo3I4injV4i+7d0WLQHMvuZvnK36oCTunUfiblQqpe5ynVAbkBbgvy3CY9WfcwVrZQBvM9gpW167cEipc5klhjKBdYn1/D6poYRgofsMdS/Zw0qeOyBKKUDAckBegY4JMJheFw9Vx5E4d9qNUV3xGDMwr1XfXrbwPVJjRLkFbdY8TM+RKmrG17QWYPY1f5JTXc+rpYk47en5LX7l+dIAlALP5edt7LtvWRzZ2Y9If1OnVC5hrla9bV3vORQcLn8nXUg7e6JF9YGj2Ksq2/p73sT+uezPxw4YJ5GTb4pqz5Xn1WUvdePz+zYLNa8QsNHHp4g6AlT5Xe/sEjC7mD9vEedIIc4WnqupQ6k8f7vBCVP+TZW8eiPlx96zabMzQfXmfFiN8dz71LXrpIeo0RwBLWodODSD+00tbP77eQGzpK+pZzG6VWW3vFdP2Ma2kFOnnve5CuuKv06W7P71nCq+qvVm4kp99tTgh7/fq2FE7gowu5i/abALs5OCqqKk+1yiJjnlszbA3Z89h9pSxl2p90zW80/mdjQY7Y9Mz1u7rN7lpur9Q5oBMrf4bDpmwDA+7zp7plc0+m6xKUP9rOr9Wnfn7aG6TbktSzNOy5dUbe4KMLuYPzuPHp+N47lSLE/7aYMdUn7n1K+dKPcebIjyDLtRCfUlxD7yXiGOBuvFwK+pBgy1D2gX0TEDhr3wmAWz5eERBCt0641EeXr1vjjA/dPvXjbUjV/QTby80uF3BZhdzN/pzAbJdO3BsbKEB/cdHCHlHa5/nrRMJA4PZqGnbPq5w5JOBm8Wo/3K6b0bD97KKcCQTOygRXRewDxjiKYv6nTLw4+NiOePNFSfEKSBk2wuUROyn78FmCdW9opsbHGVJVRvhF0BZhfz51EUyMvEE2lTLiE8y1nnMgGuUTXAm3jd9Du26JIDsLwq1pPbpnWQvlOAWXrgXGjvvIDZZ7ZyDZipWErNsDmAqVUJbtJbLtkpm7Scx1eq4q4As4v5i6WwWdYmXsk6zkJ681KtTdz7rWBkvX+mbObmuDpgLs8WsR1R40JSbgTKltBDNqk3fPyFjgkw3L+PWjLZBc9yBjC0C9Vu3gVNjT76oI0j6AGNJ2rAkKbPXNppB8zlOSaKzytW6MlDUt4Svsq7yq7KYwLM523svEcvmeyCZ6UvZU9lbVMuaGr00W22yXk1lAuddsBcnvcyArIKNifvrF49tljOvzomwJCmDolCXPYkA+/T2sSbmGMwXzkkX67dT2mvA2YiH6xm/BwbRsBO4K7Q2GbftrDynzgU5rSxJDXmvAs+Z/4M/DrHjps2p8avtaGlxOScMBF/caxd0Xn51yVMw61s0aRrFDpLbED2gMTQYwSMcdfZD1zNdTB3jU3NPmR4F+JdFODcFXXA7EDCUKWoVIW4U2UJzMkm8A73potlmY5JJaOiM8ZzVrgo/y48Z3UemfjVLrxmZS06YHYAGOky7q9koja8aOax1zKajwkwpinRMmdXy4aQFbE2+UQulTTT9c54K3bO2DpgdgAYCZSuvebI8TY3Zb1IsnypcNc6Yglj6K30IPG2qWztPG0GvFumcvD8uFbcIsmTkmALLfVKurPibo57SPoRaC4p+nV/HTA7AAwmO1HzlVWMpttP3eh7+JZUi2OTMO6oSOzMWRE2pOj9nI8MksjytBwghbbZQa24TyvHrwU2F70EmvPt2TGvZgfMjgBjwaT8ZHJyMUh9VKMmCYsuL5XYC4DkWM6xAcb8JFzWaUdujsoEGEvzlxsmvShf9JOvl72GmX/A6e5//kiI7y3cZfMBDLll20gm9OMqJ4FE2etvrpVvu0h4EIBZ+8uXGMTd+OAGp8474Tlu1dKtDzlI4sv0inQ918curjKUquAooLKgJwynMzWu0DECxtjrS3d+JwvYFQzgwQ8Sx9djSBAHig2bSQ6ZC36ClNvIlQoXuOrUGfuAi56HrqjJ0v/dbfJhDs6YTA4s91u20Xn3z4V2zxu4HBnfmf8kPaX+iofGzjvhJYBxCYwaUl8GG5uUjFz5Xb6YcikAhuR0W/JuZ1xJXi+fZnJJbIqAyrq7Z38WeugGvDKkx+i8+6cDphGHyQxnvFMvpspvUAVca3bCuSYrS/dSAEzhBXXKfPLNxrGNSaXCN/fk60t7Y++5zOVOvtut+a7+2Dukj3s2UpqmqANmRzZMzfibD4blDYYTsNze5DVyO/FJ1S1Bi85LVEiCn0S/Fh1apH/bpiNtbjpIDKoqSeBukY1NTaN6+QILFd31gDEVbGpj+x4ADcP9GR40Kh+biPrH8SKlhrpGIrmxOTdtZ++AmZpo//v/c0Dyn+9dFfKNsjt15lwaHFhiw1waM979LNyhyR8A3HWO1O5n1Hu4jAMdMOtuBvwUw8g3ACVz5gzgdXvsre2VAx0wV2S3AB27xV12AUs689zUkFZqjRT21gcA97rQvbN1ONABc0U+uhPumnEhRqW8J4bmGDGAGfHyoQqJL9xwnaXqrRwCBzpgrrgK7n+QCLwzhXiB2CUv3LJosnsZ97UkchmNTdPpEuFAB0x7IXm1RLprEpyUa8ZOEWPwOVUSxE3F+uPVPkp++0tkn/RpDBzogNm+FeSHtT6mMGfzCKQJ+LU+KDfn/f7MgXKgA2Z8YahUspDnXmyS8+QTPw9bcOnsQLdGH1aLAx0w0/tC9THZx/LElLEAHnYO3ok8i2qzbXynWWZus0zCdDf9iWPgQAfMMaxSH+PBcKAD5mCWog/kGDjQAXMMq9THeDAc6IA5mKXoAzkGDnTAHMMq9TEeDAc6YA5mKfpAjoEDHTDHsEp9jAfDgQ6Yg1mKPpBj4EAHzDGsUh/jwXCgA+ZglqIP5Bg40AFzDKvUx3gwHOiAOZil6AM5Bg50wBzDKvUxHgwHOmAOZin6QI6BAx0wx7BKfYwHw4EOmINZij6QY+BAB8wxrFIf48FwoAPmYJaiD+QYOPB/QT/lx2wyY0IAAAAASUVORK5CYII="/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-130"><g><rect x="220" y="481" width="310" height="14" fill="rgb(255, 255, 255)" stroke="none" pointer-events="all"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-131"><g><path d="M 455 481.37 L 455 508.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 455 476.12 L 458.5 483.12 L 455 481.37 L 451.5 483.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 455 513.88 L 451.5 506.88 L 455 508.63 L 458.5 506.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-132"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 496px; margin-left: 456px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">HTTP</div></div></div></foreignObject><image x="441.5" y="490" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-133"><g><path d="M 265 481.37 L 265 508.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 265 476.12 L 268.5 483.12 L 265 481.37 L 261.5 483.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 265 513.88 L 261.5 506.88 L 265 508.63 L 268.5 506.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 495px; margin-left: 265px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">JDBC</div></div></div></foreignObject><image x="250.5" y="489" width="29" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-134"><g><ellipse cx="357" cy="509.5" rx="7.5" ry="7.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 357 517 L 357 542 M 357 522 L 342 522 M 357 522 L 372 522 M 357 542 L 342 562 M 357 542 L 372 562" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 569px; margin-left: 357px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;">System<div>Engineer</div></div></div></div></foreignObject><image x="333" y="569.5" width="48" height="32" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAACACAYAAABdhGZrAAAAAXNSR0IArs4c6QAAGVZJREFUeF7t3Qnctk81B/ATIlsphFJUllSIQiJSdmXNkkQqW7aIFtpXiihrtpQo+760EUr27IkskWyVENl1f/tco2O6lrnu976f/3M/15zP5/287/s8M3PNnJnfzNlmzuWiU+fAhjlwuQ2PvQ+9cyA6APoi2DQHOgA2Pf198B0AfQ1smgMdAJue/j74DoC+BjbNgQ6ATU9/H3wHQF8Dm+ZAB8Cmp78P/qwB8AYR8U4R8Q4RcaWIeOOIeL2I+NeI+JeI+OuI+JOIeH5E/Hufns6BY3PgLABw9Yi4XUR8fES8e0S8VsOgXhERvxgR3x8RT4iIf2uo04t0DqzmwDEBYLe/d0TcNSJef3XPXl3hbyPisyPiRy6hjVOqak7w7bV3vHtZRHztKXX+1Pp6LAC8eUT8eES81wxDiDgvj4j/jIg3HMShOf592U5cetipMXiP/l5vd1r+/lDvBRHxtnu00as0cuAYACDiEF9uWvXBYn98RPxERPx2RLyo+v0b7USe60fEB0fEnSPimiNjuG1EPKlxbKda7E4R8W0dAGczfccAwOdGxNdX3f/piPjUiHhx47AuHxEP2CnC96rKE4co0P/U2M4pFvv2iLhjB8DZTN0xAPBbEfGuqfvPiYibRMR/7DGkB+9EpC+v6t1zp1N85R5tnUqVPxgsZfrbRaAjz9qhAXDViLBLZ/rkiHjinuNwEjw3Iq6T6v9hWiB7Nntuq71JRLx0d/qVeekAOPJUHRoAN4qIX6/6/I4R8UeXMA7iwAdExO8NyqG//zy198MR8dHp/06gd9vzez8TER+S6vr/h0209Va7Pt0mIt530F3eYlDk6UD0HToOsP7cYMH6q4l2PjAinrqiv48aLGtzVV5n0KWM5X0iQt/ebGdd+q+I+PuI0Jdn7IwURNNfWvFtZd87lX/PiPi14f+vu/Ph3D4iPm433hum7/3NsCa+ezcvPzrxrbfb9ekzdrrjLXdmb/9mFPnH4QT82Yj4xoj4sxX9bC56aABYDBTgTKwadvFj0UcMinVuHwAAYQ296c7carIsnkKfGBHfVzVylYh4yDBhTJUtxNL1uIi424j+cmgA6DPR0UJqIfP1JRHxqw2FnzwAqxS9xQBwxosfGvSzuWaeMmwa/zwUslk8cOfnIdbO8RL/vigivqGhj6uKHBoAFNTnVT349J0p7ztX9WpdYYxzIrx1qvboiPjCdc3EZ0bEY1Kdf9j93y6fPdL+//RLEMH+eFf/ZpWYeCgA4APjA5/JWnIyOGm/a6Ei0/atUhn/prP88m6XJv62kBP7Y4eC3zpY/FrqKeN0AbSD0aEBYBLsoo7bQn86+ANaLUD7DO5Bg/Oo1H1JRFxtpeLtqCVqFXLssmhlIjJ8aPUzooSFQdzhuPrfYfzvPEwY73cm5fN3iA5OFfRREfHNqfALI+I9qvpCRsoOmn9lk/m0quzfDSZV3xRm4ltvExEfNJTlrCyk3580cuLlJmtx8xOGnZlYJJyFifoXBj2GL8gJoc16d3//4bQAAGTTJCLhITBeewcsbROxMv3F7iS9VkT8T/Xzvf97aADoiF2oXjh0APbtZ+7d0/mKnEWAlsdDPv/Bxu+RkcnsOUwjy7easRCzmGAS+CVqEan+5KdEBNOmxVcIiIgTNVks2WDQqgTX9bQrjATPx8Di9zYICzovMpuUWK2pzcru+zGp00QafhuOu48c5qAe080HHSeLlnSB94uIK0fEwwdLn4Vf09ft+vJ51Q+L2NU4tfPFjgEARyGZv+xquQcY9j07pv/UoIwdZBBDIxRJ4kShn6yO67lvYTJmFzKhN6gq3HfwTZQfW2B2qRYivz4yFbRbEw1r2gcAggntjFkEcVIRT5Z2SlYnTsnsdMSHL5gY1A8Mp1r+NVERr2rHZi4zdjr5PcdofWrlek6ov6zW0v2reWjh/2SZYwDAx1geLMipGCDH7e8MlgiWhWcNlolLGQzlL3uJ/3u3815jOPqX2nUy6XMhSuFXV5V4Z+2ohcTrUIZbSNTrVw1WDfqKDYJ/5BAAYHmxkArRWYgJRJ4WcorZlAqN6T7ld2MAAO6leCVWOqdNJgGOgMcqNUfm1NzmPgisPAgdCwA6xzKAse/S2FPHvYX488MJMWU2nGqOiGEXYs0pdI/hiJ3rAuXZDlp44Sj2s9qfQTb/rNTQt1T/bxzmbLF9TgBKObGg0NTpMvVhogm9LfNtStmsAcA6wzBA55qjMeMI8ZSYukT1yUvHoEMchI4JAB2k/HCEMXMxh64hOyT0W2iUyxb6mspG3uI0++Jqt6fQkmdr+tIKTJQ+p8Zac+vcONYCAH/Zy9nNCxHLiGdr6Hsrce4RO6X27iMN1AD4zZ0BgO9niZyAdfgKKx1r3RLxD1gDhVq/udTuq35/bADkTlAiKVAUQI6S1m9zKrEWsPQ4nufIqcNRlomFgpluiii22dIytfs5FThjsjLHImOxmKBWkWOu/2sB4HQlw2d6++FCUdMCGAqJuXpoqvC0wVJUt1EDgNlUjNcSAWqt5FKeWxyA7pK4E1JoTD9b+v7k71sX4d4fmKjouLV7ihj1t11k6c4AkQSAnr3QGYs9h2HPiSpkZdajQqwfLvBMxS2R+wGxJjoNDzjPMXOqPu5zo20tAJhN63sSHINOpzXEA2tshYif2a9Sfl4DYI2/BY8y1Va2qf7WPLkQAKgHK+YHCJjGnBCcRXmnLeVNrMC6352ZXaHUxb6smKP3LSPCLbOaiGb5jkHLhLJC3GfhZhsFjz7DGmOBZpDNLcy1AGBBOYaT0ckmPL2mGgCCEvGwhWoA8JPUp/VYO5sAQD1witXnDC76+mRgPSJC1QwtbZg44kieQLZ4jpaa6BnaKtQaQuHkEm6QHVpzi4CVC9CYZg8JAOZKsUHHIBsQS1qmDoBjcHqmTfEs5FHey0wfPuyuU1VrkyVLSfYRqCdIj5JcaJ8gOvI2pZPSfOOG+84uAzFbTin1a0+AuxwjPmZgiEcLasW1A+CMAeBzQgl+o/oub/Pnz/SFmJR1BacFmTY7a2rzmrvLl7KbcvyRpcufqWA0ugJRb0wkWwuAWkHk+LJzT52Olzp9HQCXysE96/9K5bJnPWBFmCN6QvbmMncykxaiTBXTLHu20IBDxis5HYhegMrln0kE5P1GOr8WAGORsFecCX/Yk/3/V60DoJGDYmocoUtmy8bmXuVQ47EsJAa9DpSq27Kj5wXP3FmsQxQwukShHKHY2qfWckIUiD7Z1Apo4o/qUIW1ABhzMDGNzhkJWvs9Vq4DYIZ7tx5sx6w5rkQ66gVCHYJ+bCcGab8Q6wo9YI6YWpnzxMoUcrOMReYrdiIIL3EhMjwH2LHId4VCZ7Pz2D2JtQDQnhtkYnoKHTP8vANgZoWIdXHhoxA5lFWldtSsXWRkWmHBdsxC4vZb4t5rDyeHD9Mdh1ZRrPkX6Adj0Yhjfb3C4CdYCjSr6wIev0MhekB9eWgtALRVh2hPebLX8n2sfAfADBdZQcr1uFLMKSBuY61jJn+mjtT0O6cBsWKJxL2LQC3E0sN0KJ6kkKA3wW9zxDdhcVLIhQsL7loyadbtUcCZdwuN2cFrAIiEHHseJrdd1wFkbWcL1xKf6CMcknjlTxYPc90OgAVOcvrwTmZyJ1Y8kICrtcTKIZY+izEWhQsTLTs2EcFbo3nnpUADxtxCrPvJ3e9KYyFAEmLR+mRjfZdAPZeGOJwyCcOwyArZOPgz5qw6ggAF8+UTkt+BNarFG23j4rTLPJ7SIzoAFlawiymUTbeBMlGG3ecUO7J0Qd6EcjAJs80X1LVnIbD+8A20Eq8tq8sYOaHqG1dj5SxCIkwel5CHOwzx6nN94W8glrAKFZq6S2Dc2s3UEjPDF0HcywToPMVzMUpCS2ww2UplkU+FG3cANKw61hnMZ44bI/I8E6TwZ7eVxN24+GASLBLH95gbnswtgrB+dGupS+R7Mfhjl67dXHP1sYUs9sdWBZlPXe4hUjlpRGY6dUQ/UnyJf0yVdQCdHXYsPILiLj4+K8tOCaHYlGg8ZfkRIVmTvuljJoGEImrNBxHMieDk8X2nTQ1+RgNinquUY9QB0LJShsl3ta9ld21p0uRReve11JDXa6uRxUAmX2Oqre8et/Q9l+FZtevWu3wuA1BTT7EoJzxhLE4KwN3mEkKyD9mQnDZzJ3QHwArO8gXYZcTR7wsEu6Qj2o2jS1GkLbr6NQF3efNNo9ah0XGYUa/bWmEQ3ehHeOGkmCOnoFty+WGBXH4KAKUM8QVQiV4tRB/BY48PLz052QHQwtGRMsQQuxofgYmhKzjOiTrlISnHNZOkZzY4cuySdQjEnp9/1Y7pWM+yrv4IX96H9FnEKusQkUHYA/HFxRSiGtGOKCPaUXi2hWOHbSUmWk9C0oHK0yxOKrszS1v9ZmrdrtNA7JMd3VtNomHpL/iAz0QdYigeA+aUyFO32wHQOoPnrJwFxfZfZGuWJCBca8s/Z8Pq3blUDlxWF2Iutd9r69eeX3bvKcvQ2rZ7+RPmwBYAQOyhS5RwAcqvE6G+9H7C09i7vi8HtgCA+nEldwXGzIj78rDXO2EOXHQACJnwClkZJ58DO/oahfSEp7d3fYkDFxkAvKPuy+YrlXSBJQvKEs/67y8QBy4KAIRfM7GyYzMben24DsUW4OU+QGv8zgWa5j6UKQ5cFACMRYzmMbN7i3bsok/Hwv/jwBYAIDiPd1TEZKfOgQsJACKPuH4hwbyddnxeWO8DuTfQHV594Y9y4KKcAH16Owf24kAHwF5s65UuCgc6AC7KTPZx7MWBDoC92NYrXRQOdABclJns49iLAx0Ae7GtV7ooHOgAuCgz2cexFwc6APZiW690UTjQAXBRZrKPYy8OdADsxbZe6aJwoAPgosxkH8deHOgA2Ittqyp5OcIDtoU8npVfc17VWC98WA50AByWn2OtdQAcn8d7f6EGgJ1pzUtp+354S8DrANh3lZxBvQ6A4zO5A+D4PN77Cx0Ae7OuuaL7CfmxXy9c0wM6nQMOtADAXVqvqh2SJJjo1DlwmXOgBQCyHK59kvwyH1jvQOdACwc6AFq41MtcWA50AFzYqe0Da+HAeQOAd/Hl3iok20xOvOdpE8mnbzq87uw5ck+Re+dTMm05AKRUXZspnaIqVaq3/+UycLlelhcmYc+Iu1j/HRHxstQ3T4tLaVTIxXz5hmtaYwW6rMaf+e3Z+FsMmTM9qS5llafePaH+7N38PHlIpNeSf2xqDeK3p9s9/25O8Vs+BHnffMujBs8YHIh40kp1plJptuSWQJIb3nOYM8/FX14arvMGAMzNGeBNhCR73t63AC3SJZL3y2L0BHoLAZnXI6QNmiOLX4ZJec6Q9K+5zlQurzUAuCzGbyxAL31sBvQcL6Sckr9AAvO1JCnJg4ecCi11pZKVxdPzNkukXf0q5N8PHR5J442X4jbTuQOAFEi3Sj30bzuAHFw3WBp9+j2rldfinA5zJFevJBn5+cSlz3ha0ROLdd5f+cBy+tXSzhoAnPX49VEiPQ8Gj6VdWuKF3GXyrLU8OyNpB2NKS37n+rtOhjumzWeqXxY8EBTy74cPKWOvNlLp3AGACJFNpLfZveYm87lEc4g4JKOJNEOSxzk27eDEIiJLpqX8v45BuXSvVNWz03hT1LtC7PXXGPokVSpxgHgl35gyOTWpo3zsuF4DgLMcv2HjrZM1kweEHz8k/7PTSwTouUmZZu60Oy2vXpWX/dPLfEuEX8CWiVgFfMQd2Szx19P10tgqK3liIXyXE1lqqylyUjwi/dIaePEuBezD0s88jWlezfu9zpsIRIaXz6uQ5HYWv/xgdoA6FWgpJ+3S06vJeUlEQL0JHSN5sbSZ6b7DDjKmQ8heaYc2QTI2WhTZwUV3kQ6ppjUAOMvxS+sk3zE9qpD0VMTMqTxmRAi7OCBkKqLq1MKsk3krJ1WsdqZOaXNnQ7DBFbKYyfL+HiMy/yPTL75p2KzMmfUhD5pN1Pxa+1c4bwCoc1AZi+OVfG0Ac2THsMtkusmgHNf1nBwSd+fUqU/YTfztF75h0dAx6lNDtUMA4KzGr7+ejc86FcXzhjOLK7Omriun25QOJQG3ZymvmhogjxNvl0QnsWl0rWumuvI90MXGyM8flX4hp5rn8EkNEja+xvdOAQDy+JIzlwijWW2yPE/efMxIRTuPo7eQzIsYNZa7t67OMfjokTaPBYBjjN+OaKyS/RWasmKN8Z1YqH7WG2qLXalnUyFSFWI9utZCAu/8zdtWyrY5LokD676NPZLshJEP7qVjA2kBwNLCW/N7i3FOCRrbAS1MIkcLySopa2Oh+++OugeMVKy/w7zHtNpCxAAWpjqN6bEAcIzx36fKkWYxO93WmI/tqszGhaZ2Zic3EamQU5ru0UpA5rRmCSxkN6/T3vrdGABsVhKsj9J5B8Dzh+zxrcxiry8KszrkwbuNVKb85jy6TGXZfLb0PeLS7apCxwDAscZPBKGbFGo9ZfKQJeRWrxDZOsvrfk7EpHBmPUPiEvL/GqL7qVeIonv3kQbGACBd7KT4fN4BgFF54EtMYyHwFHqhMQsFSwMLUj6+6Q/5mF76DuWZEp3pGAA4xvj1mYHgKqnzcqZlkXBp/H5vvNnqxbrCEsdkWYheQIbPJBE4YK8hpmebVKGnDZaiuo0xANDXJhOAtwCAh9WOeQji1HrcTEO1aMLObKdppSdV2d/HAEB+rXMF8AdwuLTS2MQeAwDHGL8FkT3axuz0W+NxVYdIYr7mFjcRiaiUqVj1Wnmt3C13wLp3qkBhl3x9CQC8yln5fo0KLQA4y2jQGgBLtvx6QC0AYEZj7svEaSbsu5WY6ExCpmMA4BjjpwCz7x+DeJRZyQqNWeYO8V0neDZBlzbrE+B5EXHduQ9uEQAmqXarr1E08ZPFqc41dioAGDu9DrEotWGnFiNVqDZLHuo72iHCst5lqgHwnMoo8hrf3yIA+AZYfTKxgEw5f8YmDfN5SDOdCgCuNwT4HXIxlraIPIIRC90lIoihx6Ax2b4GAKvgjec+vkUA8OjW4o6fCX1oJSEQTHOnCAChDC+s+j4Vx9TKj6lyLGUsZoU4omwea8yta/rQAdCgBF97ZLef2r2nmD+2i57KCcAk+fJqYDzCwjwOTRRepulMV2wIUty3Hx0ADQAwAfWl9LW26do7acJOBQD6+qLBm1oWGlmdI+vQRLeiiGaigwidOAZ1ADQAAOOJLzmSs4Q4t04Km3kdEHZKAKhjeZim79A6+BXliNhCEPJLeLzAdczWiiZni3YANAJA+C25t5Bj+taNs+AmETNiHV9+SgC4x3CnoQx5KXK2kTWjxWqvM1Gr5WLTPt/sAGgEwAN3JjTxMIXIxJTDSY9hKnvn4QZZPUGnBABjfUEVDWtctXd7bhGK0OWdfcpwTZIjrbaMqV+HQvMUMzqsca7eb7g66Vv+TPlsOgAaAXCjymFjogAi3yYam3xRhRw9OTCrlDslAOhzfffAKYAvgLFEwijcfRDWUGjKYSr0hOc9i5zPGnwGLfeKmTGfOfheyrem9IgOgEYAYGQdOWpnogyPXWxXnuXH8c2K9NQhwjHfJzg1AFxnuBCTPapEO7FU2Ztbg8HV1CdWV1QtcB52F5fGCF/ry0x4yFPsJtgUuRzlVLpyKiBaIMd75bpHAcAxXoZ7xc46wJJS01mEQpRvihI0CTVx5Jgslym43IUOuKZJSeQBJi7ZlbwWccoAMG5jemzFALZ6QPdHmLR4ekFuQgpEkLrIku8REHuIQ/SqOfKdWtHGS+Er5oFlyokgzNwOL+SZ1z6T8BPh7q5SjtFRALAwrr1+PRXLcZYA0HGypTsDrWSCTIyrmk6MUweAcbvrzKpFuV9LdnzOrjrgbawdvGJqXRPcmNshmgGajWmKOgBWiECFiS5LkP3Hgqsyo5877GAljuiiAMAYyf5eunAqthLrzl0XFuRYW8SXB1X3Mea+KeaKGOQ+75KRogNgDwBgPpOmnYznkmzsQSjuekcuedjJRDcowVfs2/6dQ0kczYKvalpzKf6sT8C6r4DgYSzvAxH98IHn2E5P7GC5ocDixRorTv0dpwGw2dG9NuGFDt8SJkEswncipsA6p8uUyFO3e8kAaEX/1suNxdS753qsMOOt8/to499SppZDMtH9AU+KZDpmjMsh+97bShzoANhvOdTOMKHUQqo7nRgHtgoAcq0AMMFanDn+5p4fe9hqbErrUArvhbKmdDoxDmwVAMbNeZPvlbbGA/EJ1M4yrxxz0Xc6MQ5sFQCmiVntIdV8eVXME9r1dcdSjBOI4yY/88FRSCfodIIc2DIAPLzqLRshDpm8O1kex2WO4/0lJrnud/OqLKC4Ylk//XGCS2GbXd4yAMw4mz83PBPmWmKv9iq12PpOJ8qBrQPAtIns9PyINyxzjMvclHppjAeZs6bTCXOgA+DVk+cU4Ka/2e7pvusPQVnEJDu9B1m9ZiYsV7DcmMf3hJfBdrveAbDdue8jr2JZOkM6BzbHgX4CbG7K+4AzBzoA+nrYNAc6ADY9/X3wHQB9DWyaAx0Am57+PvgOgL4GNs2BDoBNT38ffAdAXwOb5kAHwKanvw++A6CvgU1zoANg09PfB98B0NfApjnQAbDp6e+D7wDoa2DTHOgA2PT098F3APQ1sGkOvBJnDROkM7/CrQAAAABJRU5ErkJggg=="/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-135"><g><path d="M 19.5 523.6 C 19.5 518.85 30.69 515 44.5 515 C 51.13 515 57.49 515.91 62.18 517.52 C 66.87 519.13 69.5 521.32 69.5 523.6 L 69.5 570.4 C 69.5 575.15 58.31 579 44.5 579 C 30.69 579 19.5 575.15 19.5 570.4 Z" fill="#e6e6e6" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 69.5 523.6 C 69.5 528.35 58.31 532.2 44.5 532.2 C 30.69 532.2 19.5 528.35 19.5 523.6" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-136"><g><path d="M 79.5 523.6 C 79.5 518.85 90.69 515 104.5 515 C 111.13 515 117.49 515.91 122.18 517.52 C 126.87 519.13 129.5 521.32 129.5 523.6 L 129.5 570.4 C 129.5 575.15 118.31 579 104.5 579 C 90.69 579 79.5 575.15 79.5 570.4 Z" fill="#e6e6e6" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 129.5 523.6 C 129.5 528.35 118.31 532.2 104.5 532.2 C 90.69 532.2 79.5 528.35 79.5 523.6" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-137"><g><path d="M 49.5 533.6 C 49.5 528.85 60.69 525 74.5 525 C 81.13 525 87.49 525.91 92.18 527.52 C 96.87 529.13 99.5 531.32 99.5 533.6 L 99.5 580.4 C 99.5 585.15 88.31 589 74.5 589 C 60.69 589 49.5 585.15 49.5 580.4 Z" fill="#e6e6e6" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 99.5 533.6 C 99.5 538.35 88.31 542.2 74.5 542.2 C 60.69 542.2 49.5 538.35 49.5 533.6" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-138"><g><rect x="0" y="506" width="150" height="105" rx="6.3" ry="6.3" fill="none" stroke="rgb(0, 0, 0)" stroke-dasharray="3 3" pointer-events="all"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-139"><g><path d="M 170 547 L 156.37 547" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 151.12 547 L 158.12 543.5 L 156.37 547 L 158.12 550.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-140"><g><rect x="390" y="271" width="130" height="40" rx="6" ry="6" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 291px; margin-left: 391px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;">User Interface</div></div></div></foreignObject><image x="391" y="284.5" width="128" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-141"><g><path d="M 293.63 41 L 265 41 L 265 100.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 298.88 41 L 291.88 44.5 L 293.63 41 L 291.88 37.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 265 105.88 L 261.5 98.88 L 265 100.63 L 268.5 98.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-142"><g><ellipse cx="315" cy="7.5" rx="7.5" ry="7.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 315 15 L 315 40 M 315 20 L 300 20 M 315 20 L 330 20 M 315 40 L 300 60 M 315 40 L 330 60" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 67px; margin-left: 315px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;">Machine</div></div></div></foreignObject><image x="292.5" y="67.5" width="45" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-143"><g><path d="M 75 428.63 L 75 411 L 186 411 L 186 376 C 189.9 376 189.9 370 186 370 L 186 370 L 186 341 L 232.5 341 L 232.5 153.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 75 433.88 L 71.5 426.88 L 75 428.63 L 78.5 426.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 232.5 148.12 L 236 155.12 L 232.5 153.37 L 229 155.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-144"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 221px; margin-left: 232px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">HTTP</div></div></div></foreignObject><image x="217.5" y="215" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-145"><g><path d="M 530 497.35 L 530 478.47" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-146"><g><path d="M 220 502.88 L 220 488" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-147"><g><path d="M 336.37 127 L 363 127 L 363 291 L 383.63 291" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 331.12 127 L 338.12 123.5 L 336.37 127 L 338.12 130.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 388.88 291 L 381.88 294.5 L 383.63 291 L 381.88 287.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-148"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 217px; margin-left: 364px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">HTTP</div></div></div></foreignObject><image x="349.5" y="211" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-149"><g><path d="M 383.63 137 L 377 137 L 377 288 C 380.9 288 380.9 294 377 294 L 377 294 L 377 328 C 380.9 328 380.9 334 377 334 L 377 334 L 377 370 C 380.9 370 380.9 376 377 376 L 377 376 L 377 408 C 380.9 408 380.9 414 377 414 L 377 414 L 377 418 C 380.9 418 380.9 424 377 424 L 377 424 L 377 445 L 390 445" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 388.88 137 L 381.88 140.5 L 383.63 137 L 381.88 133.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-150"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 238px; margin-left: 381px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">HTTP</div></div></div></foreignObject><image x="366.5" y="232" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g></g></g></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" style="background: transparent; background-color: transparent; color-scheme: light;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="611px" height="614px" viewBox="-0.5 -0.5 611 614"><defs/><g><g data-cell-id="0"><g data-cell-id="1"><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-26"><g><rect x="420" y="505.61" width="150" height="105" rx="6.3" ry="6.3" fill="none" stroke="#000000" stroke-dasharray="3 3" pointer-events="all" style="stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-97"><g><path d="M 495 428.63 L 495 411 L 380 411 L 380 171 L 337.5 171 L 337.5 153.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 495 433.88 L 491.5 426.88 L 495 428.63 L 498.5 426.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/><path d="M 337.5 148.12 L 341 155.12 L 337.5 153.37 L 334 155.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-98"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 173px; margin-left: 362px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">HTTP</div></div></div></foreignObject><image x="347.5" y="167" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-143"><g><path d="M 115 428.63 L 115 411 L 220 411 L 220 171 L 272.5 171 L 272.5 153.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 115 433.88 L 111.5 426.88 L 115 428.63 L 118.5 426.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/><path d="M 272.5 148.12 L 276 155.12 L 272.5 153.37 L 269 155.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-144"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 172px; margin-left: 241px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">HTTP</div></div></div></foreignObject><image x="226.5" y="166" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-77"><g><path d="M 376.37 137 L 388 137 L 388 331 L 495 331 L 495 346.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 371.12 137 L 378.12 133.5 L 376.37 137 L 378.12 140.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/><path d="M 495 351.88 L 491.5 344.88 L 495 346.63 L 498.5 344.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-78"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 296px; margin-left: 451px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">HTTP</div></div></div></foreignObject><image x="436.5" y="290" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-79"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 332px; margin-left: 451px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">HTTP</div></div></div></foreignObject><image x="436.5" y="326" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-81"><g><path d="M 305 399.37 L 305 428.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 305 394.12 L 308.5 401.12 L 305 399.37 L 301.5 401.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/><path d="M 305 433.88 L 301.5 426.88 L 305 428.63 L 308.5 426.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 409px; margin-left: 305px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">LDAP</div></div></div></foreignObject><image x="290.5" y="403" width="29" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-82"><g><rect x="72.5" y="589" width="85" height="20" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 89px; height: 1px; padding-top: 599px; margin-left: 71px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">data-db</div></div></div></foreignObject><image x="71" y="592.5" width="89" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-83"><g><path d="M 82.5 428.63 L 82.5 393" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 82.5 433.88 L 79 426.88 L 82.5 428.63 L 86 426.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-84"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 412px; margin-left: 83px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">AMQP</div></div></div></foreignObject><image x="67" y="406" width="32" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAA/CAYAAAAoosBrAAAAAXNSR0IArs4c6QAADUhJREFUeF7tnHeQFEUUxh+ISDKAKEEBQTIUKskIAorIkXMSYwkKJhRFECQYMICgIjkntQo9wJKoYI6FoIgKCIogJgwlBlDgrF9X9VRvb5ievbkT7ub9dbfb3dP9+usXvtezBbKysrIkknyrgQIRAPLt3quFRwDI3/sfASCf738EgAgAURCYrzEQxQD5evujIDCfb38EgAgAQXmAJk2ayFtvvRWjuOXLl0u7du3SUuaXX34p1apVi+s7ceJEuf3229Ma0+y0detWqVmzZtw4L730krRt2zat8T/++GNZuXKlfPDBB7J9+3b59ttv5c8//xTCqRNPPFFKly6tnnnuuedK69atpXHjxlKwYMHAz0qmm1QDFShQQE466SQpWbKkVK1aVc4//3y1zgsuuCBht0AxwOeffy61a9eOG4jNBwTpSLJForyNGzemM2RMn2HDhsnYsWOzDYDDhw/LvHnz5IknnpAtW7YEmlfFihUVmPv37y/Fixd37psOAJINXr9+fXnyySflkksuiWkSCACDBg0STqYtxx13nHzzzTdSvnx558XphqkWuWnTJjnnnHMCj6k7cCLPOussNTdbgliAzZs3y1VXXSWffPJJ2nOhY6VKlWTatGnSqlUrp3HCBAAPxAqNGTNG7rvvPu/5zgA4ePCgnHHGGfLzzz+rzmz23r17vYEefPDBmIGdVigi9iKZ5JEjR1T3O+64QyZMmOA6VFy7devWyWWXXaY+N8flf1cALFu2THr16iV///133PiY+ubNmyuQnXbaaXL88cfLjz/+qPTy+uuvy9dffx3XBxP92GOPyeDBg33XZeuG8RcvXpyy3z///CO//fabYK1Z/2effRbX/qmnnpJbb71Vfe4MgEWLFqlToGX69OmCed23b5/6qEqVKmozWWAQsRfZqFEj+fDDD9UQKBX/ysLTkWuvvVaZbaRevXoxJ9gFAOvXr5eWLVsK5t8UNn306NFy8cUXp/TtKJ+D8dxzz6n4wBRAcPfdd6dclq2bE044QQ4cOBBIFWvXrpUbb7xRdu3a5fUrUqSIEBvhmpwBcOmll8obb7yhBilUqJB8//33cu+998rMmTO9gV955RXvxLnO0l4koHr44Ye97kuXLpUOHTq4Due1++uvv6RMmTLyxx9/qM9uvvlmmTJlive9HwA4xfjNH374wevDBsyZM0dZhCBC0NyxY0fPetIXi7RixYqU7iAMAPAsNp9AFOukBX1MnjzZDQB2JE1ky+TXrFkTs4AePXootAcRe5GYp9mzZwv+H0FxmZmZQYZUbRcuXCh9+/ZVf4N4Nv+6665zBsAVV1whnB4tbP7q1auFg5COoMNmzZqpg6MF14GVKFq0aMIhwwIAgz/99NNy2223ec8588wzZffu3W4AuOuuu1T0qwXl9unTR5lGBtKLQkmY7FNPPdVZR/Yix40bJ5ze+++/X42B+ec04m+DiLmBbdq0ke7du8s111zjBID3338/Lm0KIy1dtWqVZGRkxLiDVK4gTABgycqVKxfzbCyDrwsgqCD4076+RIkSyiwWK1ZMKZNgZvz48Z5iAQrZgqvYi8T8t2/fXurWresNEVT5gBD/poPJWbNmqdjk+uuvdwJAp06dBNejhVz63XffDRzfJNKBGZfwPZnBjh07hEzKljABwNjEVHof+R8ewxcAzz77rPTu3dub2w033BDj9zFhderU8b6HJwiSJ9uLHDVqlIwcOVIRKZhNJCgn8Oijj6r4BClcuLCyUEuWLJF+/fr5AuD333+XUqVKxQR+uDXcWxhCSklAasprr72W0LWEDYCzzz5bdu7c6T361Vdf9QcAES8T1PL222/LRRddFLMAWCbMppZ33nlHLrzwQid92YscPny4PPDAAypfBQhagnACWA8Nws6dO8sLL7yg8u+bbrrJFwDENrgMLTBqWLx0M5FESkA37733nvfVkCFD5JFHHslxC4Br/uWXX2J0mtICQHPWqFHD8xv8/cUXX8RNlJQQlksLwRaBnIvYAICkIHXCP1WuXNl7tisnsGHDBmnYsKH3aPJ4XMrUqVNVJqAlWRbAZuCXteCzX375ZZelOLexn0FgaR4yPVCYFgC3SLymBZf4008/pbYA5KkEZVowrffcc0/cQjGbBBgEbwh053fffad4cT9JBgD6tWjRQsjFEVdOAMqVTMLu4woAeHNzw7FEI0aM8FtGoO+JL4gztJCumtlBTgAAQu3OO+/0nqndalILQPAHYkAJQu5P2lC2bNmEiyXCnj9/vvcdCjetQjINpQIA45mRux8ncOjQIcVQ6jkDBk1duwLANs/k/QRuYcpHH30kDRo0iBkSppV4xZSwLABUOM8zA0DqI8RJSQHw/PPPS8+ePb35YEYxp8kEksjMkTHDmtFLpbxUAMCiALj9+/erIfw4Acw689SCos877zz1rysAqlevrip8WuAgeG6Y8tVXXynm1BQ2x06fwwAAJNTVV18tPNO0OGQeWOqkALj88suFKFGL3+mjHWVdJq3FJXBLBQDGIXXjFCJ+nEDXrl1VwIcQCBJxa3EFAIAz2T/IIHQRprDZuDRT9uzZo9JtUxLVAl588cWUU4GboRawbds2tX9mcK51SClb10gSAgB0sJmav8ZHMUHcQCohhzcrTQMHDpRJkyal7OMHgDfffFOaNm3qjZGME/j1119VHIIpRR5//PGYgosrAMjLzephblkA4ig7Zgq7GsiJnzt3rnBQtCQEAL6BgE8LwaAZGSfbURg7CBhdPDnllFNUMAgVm0z8AEA/LjYASiQZJ2BuMKQK8QqACGoBzBSSvmQzJoUchiXgngN1Bi3Ml/jFljABwImHDq5Vq1bMY+IA8O+//0qFChVizCDKJQV0EdI1bsxoWbBgQUwV0W+ROg0028ELaGqYzxO5FrgJ2DpE1yrMMVwtAH2hbLXARUBOhSlkGeZtJNcswHUOsLSQWRA/3OCCC9GxkD1GHABgzLp16+b6LN92mG9q49mxAJhkCifaJdmcgH1SEjF3rgBgbG7OaOHyhgkI3wU7NABUpJdaknENYQSBftOJA4BdBfMbwOV7KF2i60Ti4gLohwnjggNicwJYB6wEcvLJJ6uc2nY7rgCwqW/Go4xqp2gu607WxtYxdwtMC6f75ToASBUwG2G/K5IqhnAFAK6EdEaLvojKXJmzTnPg+6F9bXEFQKKqma5+ZmfTdV8YOayZ6fMT0eu0z3UA2BcoUbi+URNk8TYde/rpp6ssIhGf7goAmxPglgsUNH7frE0kU6YrAFinnQJzmcJOp4Low2wLqwjVrYVC2qeffupkHdO5EeQ3T88FgEiCP5OSxHebKZjfYOb3ROtmMEh+TjBiiysA6EclUtcYyJkBlUlXky2YJI75rCAASBQHPfPMMzJgwIAgKohrS25OMKYpcxoQmd9yyy3/PwAgGLp06eJNJJUyXbQAH2/e67/yyivVXfrsAMDmBAAYFz102Zg4gGpiIgkCANwKTCZMohYia55vpm8uetBt2HRuBJnsKKVzUsJk8UWuugA2iCtPWjRXHGSRZlvKjvDympjhDhx+Gp7AlCAWgH4mJwDAdMROdYvxIXKyCwD641qwfqav5oUL6OagVpGb1KR9ZgmY+ULT2qX1VLrJMRdA6RVuWt+gSUSkpAMEagnUFLQkyqmDAsDkBDiV2pxyb0FnCWEAgDFgE+3qJ2wogSbcgE3n2s+FEOM2Em0hxEwBuOYdvURzzjULgNl86KGHvDlk500fcyH2pVFOP6fUfE0qKABsTkA/D4rTrBzaCg3iAsy+EFPmLWX9HacRk47l5PAQ6AIOKpFsNvV91m/WFXRfxhs6dKjvmcoVABw6dCiLjTFf8nAp/PjOXkRZFJRj3kknDkBpWoICgH4mJ8D/cNwEr9xXTCbpAoDxKEYRqJnBm8v67TYwfjNmzHB+jzJXAJCZmZllX05wKfy4KgDzB9GhRV/Ryg4AbE7AJV3NDgCYKyDGhfGCTCLePpU+KPOSwZCxBLndnCsAyMjIyOIenBZ8nlkIct3oZO3sq11wAQAMk4mkYwE4iRR6qKAhLi+kZBcAen2YeFJa7j+QhWB5mIcJCgI8LpbAH/D2EAFgqoJYMt3lCgCCvh6eXUDkxf74eXgJ8xUybkvblbejce2+18KPxkkfjXOy+X1II8ijo10iAIS0Q1wcMZlOyB2IJPOdiZAeFeowEQBCUifsIZdJzNexqYByqzmd300IaVq+w0QA8FWRewM2m6vsppAB8B4AbzhTBSQ1piLI9S8dCLs/IfyWEQBC1ql5NyHV0Nw7MG9dhzwN5+EiADiryr0h5V74D/uHJcwRIgC46/OYbMm7ibyNw3UyTL4W+AACQ2oBcAT/t0QWIBd2gBdbIIugrLliFvRndHJyihEAclK7x8DYEQCOgU3KySlGAMhJ7R4DYwf7TbdjYEHRFINpIAJAMH3ludYRAPLclgZbUASAYPrKc60jAOS5LQ22oAgAwfSV51pHAMhzWxpsQREAgukrz7WOAJDntjTYgiIABNNXnmsdASDPbWmwBf0HvLkmY11zz9QAAAAASUVORK5CYII="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-85"><g><rect x="50" y="435" width="130" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: rgb(255, 255, 255); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 455px; margin-left: 51px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">Data Service</div></div></div></foreignObject><image x="51" y="448.5" width="128" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAABECAYAAAD3Lo2pAAAAAXNSR0IArs4c6QAAFnRJREFUeF7tnQXUPkUVxi8Wdnd3dzcmKiYmigq2IqKIqNhgd4uB2IHdiYndiS12omJhx/44u+fsmXPv7O67Me/3vc895z3/8//e3Zk7z+y788yt2cEkQkAICAEhIASEwMYhsMPGjVgDFgJCQAgIASEgBEwEQA+BEBACQkAICIENREAEYAMnXUMWAkJACAgBISACoGdACAgBISAEhMAGIiACsIGTriELASEgBISAEBAB0DMgBISAEBACQmADERAB2MBJ15CFgBAQAkJACIgA6BkQAkJACAgBIbCBCIgAbOCka8hCQAhMhsDdzewlQWuXMbOvTNaTGhICEyMgAjAxoGpOCCyMwCnM7KJmdj4zO6WZ8f8dzezY+vM7M/t+/fnzwrptQnciAJswy9t0jCIA22tiP2NmVxowpP+a2d/M7E9m9nMz+4GZfdXMPmFmnzazfw9oS5cuh8Clzex21VztamYX6tnt/8zsS2b2HjM7xMx+0vM+XZZHQARAT8iWRUAEYMtOnav4UAKQG/0x1eLyOjN7npkduUVg+pCZXael67PN7AFbRPc+arLLf4qZ3bLPxZlr/lWbrfczs7+PbGvTbxcB2PQnYAuPXwRgC0+eo/qUBKBpHivBa82MxeI3awzXmWorxvG3KQGA2LzFzE414Rx8ubL2XM/Mfj9hm5vW1O3N7KnBoHfeQuR50+ZN4zXTWQDb7CmYgwA0EOFL3s3MDl9TzO5nZs9JdNsuFgBM/p81sxPNgP0HzeyGZgbRkwgBIbBBCMgCsL0me04CAFL/MbM9zOw1awjbJ83sqtuQABzPzNipXzKD+dFm9lEz+07l8sB1Q+wGAYEXMLPrmtlZOubrzlUQ4avWcE6lkhAQAjMiIAIwI7gFms4RgIeaGbv4tpzEzE5XLxBXq6PJu54JSMBNzOx9BcYXdXkOM/uxY9HaDhaAa5vZh4OB47/HNUMaGn59TyAQu9exHJACTyAOF16j+ZQqQkAILIBA18t+ARXUxYQI5AjAeczsRx19sVPc18zuY2Ynz1wLkbiEmf1yQt3HNPWgwA+7HQgAbg3cG57cy8xe3BO4K5vZxzJuhEtVwYVf69mWLhMCQmAbICACsA0msTWEsQSgaercZvY2M2NRiOTVVdrgnQbAd946ep00xYub2RnqnHUsCn8ws59Vvmj0f6+Zvd/MSFuLhN3qtwb03b70Lmb28o57r1iZ3W9uZhRyuYiZnbomRKRMouv36jTJNy6waL7bzHZx9MXMD0n7xwAcnl8Fcu6VXI/lgJTAh1Sk7s092yIWgeBBPrhdzlxZGE5vZlgbCBT9Re2SeGeNU89mj0tTBPNUHl21fVD9R6xW6Hqbah55Tk9qZn+tnyWsQFiDUuEZO+PAYEfSYT23C3hBlBtr2pRZAOhIPMb1677BlA9zzHP37fo38oZq/N/sC6pz3VzzN0Il3VoCARGAEqjP1+dUBAANebEeYWaXDdRlgSYHncUwJxSpeXLtNug7ctq8r5kRoObJXASAhRZdISh9hdRDduLUUJhDPmdmV3AapqhPZNKP9GAu7mhmP2x9flrHdvTRnQwLCNQjzeycfW6o0jI/Xi1e9+9ZEY84hp2cdp9Z1ap4YE14sGKkzyQEADJEiuT+gV6QVUhrHyHdkuJJnryjJofNd1MQABb5A2pyduI+CtZuoX0GEoG556+n6rpsXRAQAViXmZhGjykJABqxw6KUaZR69qzaZRBpzy7tFdWiyq5tqEAwHmZmT3JunJoA8Dtg4Y8Wjy7d/1LhdAszgwxMLdGiSD8E+UUL1dR6QDYOq3eoQ9vGWsEC/PqOGyNrB4WL7lE/SwQsptIQAKwHWBE8wVpz256K8xxAJjyhDdpqZCwBgMy8q0egpqcL1ghIwAt7jGuJ+euhhi5ZJwREANZpNsbrMjUBQKPHVQFmDw9UY/cY7QTJW/+AmbXz8lcZobdzm5oAYGJ+zCrKte6hmiJ+9lVdE1H3uCvIvPAEfHFVzF3MB2vQpzpcQl3wYYYnjfRNmQtxQXhFjiAeuAC+EaQuNwSApsHfC2hkfnA7/bNL0XqsV3Guow3qTbTxHkMArlG7vE7WQ6fcJRS7It4lkqXmb+QwdPvSCIgALI34vP3NQQB4aeLTPUGg+vkd8ze16DGJny24h1LD7KIoP0zt+htXL/dbB9fiU8Ykyy67ETIXCFRsBJO0lyNPOWNK37YFE2472A0/L2l2+K9TYdFi8cGM/dsq4O6s9U6WGAFPiF/w/PVjZh2T+6GZBlgUsZSwe54rl5/+0cOTL1aL4sGtxRk8CVr03CgUHCKmIiooReVJSEIqjI0YEVwtnrQJwKMqknBgcN0NalKamw/8+zyX3rsRHO6W3LwqAeAZJs4g+o1AMnCBEbjLbwSywO/AEywsfM/v35Ol5m/Mc657CyAgAlAA9Bm7nIMAoG7kh+Y7KqGlpt3cS5F8c8+MyyL2+ACbe1cm0hdlcIMceLuoPlkA+IVJk/OEcbw0+QKLBiZbgrU8YfdJWt1Ugm8bSwuBiDn5dZ2a+ZEqiIyaCFO5BrDkRK4NrBMsiCnxOGH9THi7ee6JyAQVJ3meUqEIEsShiXn4br1LZ94hqLiqsL4guEX43hPKWkcZFc31EMsXBPeDBfi2ZVUCwO+AeAxPIJyc9fCr1pe8q/d2il01l3whiBVZcv6meubVzkIIiAAsBPRC3cxFAJ6R8fXjHnhCMj4WSHb1nvAiJ5o5FXbwvPBO43z31o7696sSABZzorm9GAd0iQroEJQHKfKEgLe0IuHY6b9nBwHy2mdcWED4QAh4NoZkDDRtRn55dqbMZeR+YNdKMCcm87agA7gS1Z5KjoxxLeZ7rABdWRyfr0ja5Z32yRKALOQEtwpR+KlggTiXQ3ZWIQBkKhCI6VnV0JHsmz8GSkJO2tav9mXUjCBmpC1Lzt/Y51z3L4yACMDCgM/c3VwEAB8jkdie8EIiYr8t7Gy8OgKY1KOz07k/evmyo8udercqAWBHeYdgXOy6eXl6grsAs7MXsU1efmSqHjP91Jun3sGqwkLNzhIXCGlkuDS65Ox1iqD3nnhExmLTtItFB8tOKjwv3i67iwBAhHLPT9MPGQNPDwZHWWVM755gZcE9gQUjFYICST9MZRUCEOFC2yzuuaA+XAaQEU8gnhDQRpaev67nSd+vGQIiAGs2ISPVmYsAYLInmt8T/r7nSL2b26MFAN8xPtNIViUAY9TmJez5bzmw51ZjGs7ci3mczAvyxccIO2l20Vhu2HFGAjmKyj5fs04TzekRmZ/TVLqu+ed7Fm2i/HP1IZp2iNWAwHlxHcQIPDZQGuIalUQmtuHrzn2rEIDIpYYrhblNK3am3RKwSupgKkclxGfp+RvzTOreAgiIABQAfcYu5yIApPOxa/RkaEGg3PCjiHfMxrn86BIEABM4JuFUKGIUxQdMMfXEOmBhIC4Cf/cYwYpBO1F+PD7z1LrT9MdOOkceuA5Tt1ddMMoeyVkAsH5Eu3oPA3z113K+iHzlXBplITCGqCjWUAJASizmfc/KQHGfITUouuZ+6fnr0kffrxkCIgBrNiEj1ZmLAJCDHZWcxVwZ+SQZDjsVApo4a4CXKEFb+NyHnGy3FAHAzYCu+I8vVscj4CYYkso4NwFoPyLsSolsZ6cNvvjdV5HItM55D7Q/h/BcpDvdHAEg7oLFu69EcRNYELDcpGWsWZhxi3jBpA/OHPk7lACQ90/mhCdU39y17wB7XLf0/PVQSZesEwIiAOs0G+N1mYsA4Pv0CvKgMQV0OGgoFRYjfJ3sVocs9h4KcxMAyhRTJneKnfuSBKCNFSSF8xmIhidNkRK9ubiJ9r2kkUHOjkzAJ/o+Snkc+7Sy003L2eYIAESM6od95bR1UKm30/bOULhZ5WJ4u9M4ZnlqXZAa6MlQAkD55KjCJfENEJepZOn5m0pvtbMQAiIACwG9UDdzEQD8wFGwnPcyJfKbkq19F6AueOYkAOyc2SnlDj/q0q/9fSkC4OnIPOxcz10XufEq5ZHOeMEhgx9wLQSFDIW2RAQAguIt5F3dcRYBJ1emQnBn+veXBbEsnMTIkcqRDCUAOXdan7TVrjG3v196/obopmvXAAERgDWYhAlVmIsAkLLEaYKepMFgPFO82Dn0JxKi+kkRw3fPy70Rqq+xG09lLgJAOhqV46JSx+hG8BkBf/jL2wFolP71zMXrRADaOOLWgMhFCzoHHRFoyb+NYBEg1W8OuZFzpHREAKjAF81RTrcoCI6MCMZ6bH0z1hPqKHiBpnetYj0gB5EMJQAEclLvwJPn1qV9p8J76fmbSm+1sxACIgALAb1QN3MQgMtlfK8szLw0WRwbyUUes5BSSz3d+TX3Lh0ESFwD8Q2eYMEgKjxKuSoVBDjmUWKuWBSiLIKUzFH+1yuJiw6Y2L1c/jH6RQSAoLmuQkhevxA00voohZsKBK4x+ZM/z04/FYgCVhQISCRDCQDEJ61O2bRN0Snam0qWnr+p9FY7CyEgArAQ0At1MwcByNWi93a7uSJAXiW1NjQEQVHbPpU5LAAUYSHoy1tYeOET4X9MZt74ztuVzm0B4DeL7hwEs4qQQsbZB55gnm7X6o+KyHAv+HCM8JQyNQFAt6i8cNvfTmplO3++GROZLwSF5mQoAcAyFpXshRhEBbRWwXnp+VtFR91TEAERgILgz9D11ASAgDLq9kdR8J55lN2ad0wtO7G0KlwKQXQG+xwEIHdyXNeLn2qF1CbwZCoCAOacs4AJng9H+fIvpYbxFUcHNHU9Vhyu9MrgIiwe7bz/XAVIr+pcV99d389BAG5aFz9K+26nIkYuLgIDiSOYkgBgOTk6OGuA8s1jUzvbui49f13zq+/XDAERgDWbkJHqTEkAMBdjqo9eSPhM2QW2y8uSStX4VdOhcKwwi24kxBjwIvZkDgKQM8V2HXOcO6BnKgKQSxcDe3z5OdN0hDPEgRMePSHYrW0KZ/cbHeFLZkh0ZO6qj/EcBIDgQfDySkxDqngHptkI6E+KIjEiXZaWoRYA2s755klR5PCtnGDVwFqTCuSb9MomVmXp+Vt13nVfIQREAAoBP1O3UxEAXkKU5eUFGYl3BGluZ5w7Opg+SMPbK+iMl3AulTAqBJQrUkS+NVX7PIkOLOJazO/ko0eFYUjxIvJ+ConiDGibhZl4iz6V8RpdyHTAyuIFWnJNatbnOcDM71XUI5fdq7ffHjepfqQRYv3B3cK/fNoxI+3r5yAAtI+53/Ot71tbt57mTJZX4tqb01UIQK5AT1fBIwgNBMGrBEg2C8S2kaXnb4pnXm0siIAIwIJgL9DVWALADp60PvzEuahrjs+lMAu1/dvCQsFi7S0Y5FNzEAtEIBWKzeD/9O5rrqWuQPtI4HYb7IS9Ijg5q8NOzsEpTZukT0F+vON1c3Xcub/Pwtj3UaC+whMzF3P8MKfbcfRyl+BOoGwz6XeeRHrnYjrYYUYVIukDMkTeeyq0iWk+lbkIQBTkB34QOu/wHy9N0cNtFQJAkSmOcfaEQ6go8BSd1QBpwbTvCZap9KCkJeev6xnU92uGgAjAmk3ISHVyBGD/2veYdkGkNL55Xjq8CL2I6fY9RH4TGxAducqLjRecJwQlsWg0O8Ad68In7MCaHT47Wu+5ZCGJjqWlSAv13z2JFil2UOxGo98AgXLUjG922FQwxHTeFGqJ9CSNjij7iKwMmWIIGThzqEskkDBOgOPDKYuYrhuXCWPEVUBJXBbBHMHy6jnQJ88E1iBPmEfwTQ9NIn6BcwaooOdJ6mporpmLADBuiGf6jOCuYv7BuS0QKghTH1mFANAuhLe9W2/3xVkBnCfRzkBBT2JuqLzpnSLI+NCZcx7asuT89cFL16wRAiIAazQZE6iSIwATNH/cwk0BlfTI0XbbXafWscOhQhm1/fFzs7A2wo6RXbdXfpa684+sg+942bVrzB9hZlcPBshCjb681OmLf/err42OjW2aYkHlABgIEhaP9kLBaXj409PFg3vxo2PmRYijaJ/rPnQerlGN7fAJqinm+iXlEYIQuRNyhaBol+OGwZhKfZAVdvfeOQlcS1sEG3oyFwGgr1xAXKrLQZlMifTaVQkA+GBJ82IT6IOFnHgSnldIOharqIYD8wbm0emVS83f0Gdb1xdGQASg8ARM3P2cBIBAKhb/rnrsHABDkR9290OEyGhqDpCXz+KakwOrL3FTNJJLbUvbOazaKe9W/5GaBPx/qLDgNWbliHg0bU4RLY+eRO4PxbTPuFiEdukgKWR1QNrIQBgjuGSwRkRn3c9JACBw7Kz7CAstz3AfWZUA0DZZBqRdrlLlsK0bsTMHZ5Rdav764KVr1ggBEYA1mowJVJmLALCDIOiPRbqP5A4P8u4np55StSwypLoRlZ17NlMCQLQ2u3Uv/TDtr00A+K7rDPr0fiwPmFVxH3CSXu7Fy71TEADawVpC9PdUpXnZNTKvLB59auyTvkadBiwSqwhWGszakW87NxerFgJK9WRR7zLtQxJyVSzTNscQANqiNganEK5S6IhCRQQNEkDbJUvMX5cO+n7NEBABWLMJGanOlASAYD4qpXHYT9eu31N7z/rF1BVTQLUyrm3vuDh4iDSzSFICwHUQCOrZd9X0TwkAuy+Omd27g3SwYBJgRcGYZsHkXsz9OSvAVASAMeL73b3aQRMIFmUhdD1CxCjgfya4MDqVLmqDOA1OfjygR02Hpg1II31RuyANGk37mdMCQF+Y9nEj5WSfqrolJXn7ylgCQD9YzYg52SPw73u6YO5H1yh11rtn7vnri5muWxMERADWZCImUmMVAsDCRjAUu6yjap83uzUWiVwlvD4q43MnaI60OHb27HLwbeLDR1d2tFGAGS9D7uWEO0gE+hGdj6/50MqPTNGUVMgyYHGkP3ysBKMRtMgHggHZYFzeGfUELmK5wETNvU3WAf1wtjyLv5cvjm4Eu5GXTXodfbLLJXaAmIZDMibvPhhG16AjQWQQAUzzjB2dIUAQBeI1CERk7AQSknvOgo9fOarV0FcfxgzhIjCT3TJBj9SNYOxkZJA6iLkfrPm0zxfI9TE3AeAZTE88bOvD2Q+kzmHd6StTEICmL4gA7hhwJQuFIE527ujFM4WVi98mbgPOsFhV5pq/VfXRfYUQEAEoBLy6FQJCQAgIASFQEgERgJLoq28hIASEgBAQAoUQEAEoBLy6FQJCQAgIASFQEgERgJLoq28hIASEgBAQAoUQEAEoBLy6FQJCQAgIASFQEgERgJLoq28hIASEgBAQAoUQEAEoBLy6FQJCQAgIASFQEgERgJLoq28hIASEgBAQAoUQEAEoBLy6FQJCQAgIASFQEgERgJLoq28hIASEgBAQAoUQEAEoBLy6FQJCQAgIASFQEgERgJLoq28hIASEgBAQAoUQEAEoBLy6FQJCQAgIASFQEgERgJLoq28hIASEgBAQAoUQEAEoBLy6FQJCQAgIASFQEgERgJLoq28hIASEgBAQAoUQEAEoBLy6FQJCQAgIASFQEgERgJLoq28hIASEgBAQAoUQEAEoBLy6FQJCQAgIASFQEgERgJLoq28hIASEgBAQAoUQEAEoBLy6FQJCQAgIASFQEgERgJLoq28hIASEgBAQAoUQEAEoBLy6FQJCQAgIASFQEgERgJLoq28hIASEgBAQAoUQ+D9wFVeBT0XgVAAAAABJRU5ErkJggg=="/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-86"><g><path d="M 115 481.37 L 115 500 L 114.63 518.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 115 476.12 L 118.5 483.12 L 115 481.37 L 111.5 483.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/><path d="M 114.52 523.88 L 111.16 516.81 L 114.63 518.63 L 118.16 516.95 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-87"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 498px; margin-left: 115px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">JDBC</div></div></div></foreignObject><image x="100.5" y="492" width="29" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-88"><g><path d="M 186.37 373 L 233.63 373" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 181.12 373 L 188.12 369.5 L 186.37 373 L 188.12 376.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/><path d="M 238.88 373 L 231.88 376.5 L 233.63 373 L 231.88 369.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-89"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 374px; margin-left: 211px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">LDAP</div></div></div></foreignObject><image x="196.5" y="368" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAACKVJREFUeF7tXGeI1kwQnteOInbFrqjYe8GCig0VexesqAceKIrYe8eK7Y/YK/ZeEBv2hvUETxR7x4K968mzfLskubxvkr39SC7sgD8u2Z3dmSczOzM7r5GkpKQk0hQaDUQ0oKHBkgmiAQ0XnhrQkOGpAdWAhk0DIZNHn6Ea0JBpIGTiaAsNM6ArVqyguLg4IWLz5s3p0KFDSkUuVKgQPXv2zJFnxowZKUeOHJQzZ07KlSsXValSherVq8f+gcf/RRMmTKDp06eb2A8bNozmz58vvaRbmY0LZMmShbJnz85krVWrFjVu3Jhat25N6dKli7kPk4UGCdBYu27QoAENHz6cCRiJRKQVbZ34588fKlq0aLIPLnfu3OxZhgwZpNaSAdRuIfCZOHGiyeis41IloFyI8uXL08aNG6ly5cpSirZO2rNnD7Vv396W15YtW6hr165S66gClC/etm1b2rp1K8GLBQ7QmTNnUqlSpZJt7Pv37/T27Vt69+4dXb9+nc6dO0dv3rxJNi5Tpky0YMECGjhwoJSyjZNatWpFBw8eZI/g7rGHb9++sb+bNm1KR44ckVrDCmg0mTlzeIqPHz/SgwcPmNynTp0ia8m9U6dOtH379uABev78eapdu7ajoiDQ2bNnac6cObR///5kAk6ePJkmTZrkyCfagCdPnlCxYsXo79+/bEivXr2YUmG1ILj2+/fvszFeyQqoW5n5Onfv3mVu9uTJk6al7byG7y7Xq3CQ6MSJE9S9e3d69eqVScDNmzdTt27dvOqbjcfHMHXqVDEXQH769Il69uwpno0fP56mTZvmmX9KAcWCP3/+ZF7i9OnTYv2yZcvSrVu3TPtJlYBCgufPn1P9+vWZ1XDKli0b3blzh/LmzetJ6XBxsLynT5+yeYguX758yZSYJ08e+vHjB3tesGBBevToEaVNm9YTfxWAYsGbN29SpUqVTGvDekuWLCmepVpAIUFCQgLVqVOHvn79KgQaNGgQLVmyxJPC9+3bRwg0OA0YMICWL1/O/uzSpYvprMJYRNdeSBWgWBOBoNEq165dS7179w4HoJBixowZBFfICfkbLA1W5pbatGnDzmVOOKuQGoHwHO85AXh+rrrlrxJQ6weGmGLEiBHhAfT9+/csd0QAw2ndunUsqHFDAB/uFm4XBPcFt83zWzwvXLgwvXjxgr1HYv/48WPKnz+/G/ZsjEpA+/fvT6tWrRJroxBiPPtTtcvlUvXt25fgejj16NGDNmzY4ErhU6ZMIUTInGDxY8eONc0dPXo0zZ49WzxD2jFmzBhX/FUDinRl586dYu2FCxfSkCFDwmOhkARfLL5cTshrYWVOhBSlePHizOJACHYQ9CD4MRJ4lS5dWjwqUaIEIRhxW6VSaaHwIPfu3RN72bFjB3Xs2DFcgCJIQLDACW4RRQGnaPTAgQOmAKdly5aisGD9GBBRnzlzRjw+duwYq6+6IVWAXr16lapXry6WTJMmDb1+/ZrVuzmFwuWiooR6q5GQ1jidc+3ataO9e/eKaai8wKXZ0erVq6lfv37iFfLgTZs2ucFTyRmKFKpJkyamj8ru8iQUgMJ1wiqN5TG4SbuSIkcAgBcpUkQEQ04F+C9fvrAPBMUGEOqo4GG0jmjoptRCcSTgY4JXEJYYidClS5eoRo0apmVDASgkQk2XFwDw9+3bt03nnlXZuCJDhMhp6NChrCYci5Cfrly5UgyxBiRuAZ03b17MveHDxIcDIFHuxBXm79+/TewR2Rr3HyqXC2HTp09vEhjXXQUKFLDVMSwagc3Dhw/FexQpKlasGBNQFMpxH8upQoUKrHrjRKpvW5B3Iv+0o1BYKMCzXnp//vyZUGSwI3zxCIA41axZk7kvN1SuXDlKTEwUQ93UolUBikh77ty5pkKHdc+hAPT48eMsYOCEsw7nWzRCmL9r1y7xGldvbov6a9asMeW8SJfQGBCLZADlHRtIoerWrUstWrRgH6FTqhQKQHEDgpt8TgD36NGjtjpG0R2VH+uZ5MY67cbAC6CKlDVr1qgsUhoUedlbKADFferFixeF3Ah4xo0bZ6sHVHmivfOiOOPYZcuWxWwL0YB60KzdlRIS8KpVqybjgugRlRbjlZuHpaIOdTqDNaAetGw9D6tVq0ZXrlyx5XD48GFCMs4JRX20eTidS1ZmSPIRQaOgwenGjRvJ7ir5Ow2oS0B3795NHTp0MI1ev369qcvA+LJz586E2icnFOaNZ6/LZdkw5K2LFi0SUwYPHkyLFy+2ZaEBdaFZuFXUUj98+CBGo3/1woULthaHdhUEQ79+/WLjUQeFdaJaJENWV4+mMkTWKHBYSQPqoGFcMPfp08cEZubMmQk5obVFg7OaNWuW6cpLRRM5zs7Lly+L3eLKDld3GlAXXX9Q0rVr11iHgtFtcmtDoTxa3yyCIdR1jddO6GvF7X9KaOnSpRQfHy9YNGzYkDWwBRZQXEnhrJAlJN3WgMNLjypqs+jLxfUYFIX6rJXQzY4OhViFAeSkzZo1E1Px0wq4R9lOeM4I7h5FDN67i+d2lwKBcbmyQPJ5OK+sv8WQqZpE2wfKcOhUsN44WMfDcrdt2yYeuynEu5UdrS7G7ohRo0YR3LuRNKAO2kSXAQrU8ABOVoYLYCgUqQYnBDQorKsgeI5GjRoJVvny5WNNasYPWQP6n3rgrlFSw51jmTJlCDkmWihRGXKbO6KYPXLkSKFwRMLGqlJKQbU7n9HzY0ynfAM0pcLp+f5rQP/g138MlO5AA6pUnf4z04D6j4HSHWhAlarTf2YaUP8xULoDDahSdfrPTAPqPwZKd6ABVapO/5lpQP3HQOkONKBK1ek/Mw2o/xgo3YG6/4ZL6bY0M1kNaEBlNRfQeRrQgAIjuy0NqKzmAjpPAxpQYGS3pQGV1VxA52lAAwqM7LY0oLKaC+g8DWhAgZHdlgZUVnMBnacBDSgwstv6B7Iqwbui8BEvAAAAAElFTkSuQmCC"/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-90"><g><path d="M 115 346.63 L 115 331 L 210 331 L 210 137 L 233.63 137" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 115 351.88 L 111.5 344.88 L 115 346.63 L 118.5 344.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/><path d="M 238.88 137 L 231.88 140.5 L 233.63 137 L 231.88 133.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-91"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 332px; margin-left: 191px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><div>AMQP,<br />MQTT</div></div></div></div></foreignObject><image x="174" y="319.5" width="34" height="28.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIgAAABzCAYAAABD70qIAAAAAXNSR0IArs4c6QAAFVpJREFUeF7tnQW0XTXThnNxp7gVd3cv7sXdXYsXd3coUqC4Fddixd0pXgoUdy9eoEDhfv+Tv3PWnNwtyd776sms9a2P3rMje/LuZPLOZNLU3NzcbKJEDaRooCkCJGIjSwMRIBEfmRqIAIkAiQCJGCiugTiDFNddQ5SMAGmIYS7+khEgxXXXECUjQBpimIu/ZDBAlltuOfPMM8/UtXj33Xebddddt1AvPvjgAzP77LO3KHvuueea/fbbr1CdutC7775r5pprrhb13HPPPWadddYpVP8bb7xh7r//fjNo0CDz/vvvmy+//NL8/vvvBs5xwgknNJNPPrltc6GFFjJrrbWWWWKJJcxoo40W3FaabjJ5i6YmM9FEE5lJJpnEzDbbbGbJJZe077nUUksFt0+BIIC88847Zp555mnREOAAJEUkTQko97XXXitSZV2ZI444wpx66qmlAfLvv/+aa665xpx99tnmrbfeCurXDDPMYMG+++67m/HHH9+7bBGApFW+yCKLmPPOO8/06NHDu/1ggPTu3dvwZbsy+uijm88++8xMO+20QY3zcJYSXn/9dbPgggsG1ykF+KJnmmkm2zdXQmaQN99802yzzTZm8ODBhftCwRlnnNFccsklZo011vCqp0qA0CCz2AknnGCOPPJIr/aDAPLXX3+Z6aabzvzwww+2csDw1Vdf1Ro66aSTghqWgq4SeIn//vvP/rz//vubc845x/tl3Acfe+wxs8oqq9g/63r5ty9A7rrrLrPllluaP//8s0U/WEpWWmklC8IpppjCjDnmmOa7776zennyySfNJ5980qJMU1OTOeOMM8xBBx2U+16ubqj/hhtuyCz3999/m59//tkw2/P+b7/9dovn+/bta/bZZ5/c9oMAcv3119uvSOTSSy81TN/Dhg2zf5plllnsbIACQsRVwuKLL25eeuklWwVKZ31HMUVkhx12sMsCssACC9TNAD4Aefzxx81qq61mWF60AIrjjz/eLLvsspm2BYPDh3PTTTdZ+0QLIDn44IMzX8vVzdhjj21GjBgRpIqHH37Y7LrrrubTTz+tlRtnnHEMthlLX5542yArrLCCeeqpp2x9Y4wxhvnmm2/MYYcdZi6//PJaG4888kjti81rWH53lQDoTjnllFrxO++806y//vq+1dWe++OPP8xUU01lhg8fbv/Wq1cvc9FFF9V+zwMIswDr9rffflsrwwBdddVVdkYJEYz6DTbYoDb7UpYZ7b777stcbqoACG0BDgxlZjcR9NGvX7/c1/ACiLsTwDLn5R566KG6F9x8883t1xIirhKY/q688kqD/YGg2AEDBoRUaZ+97rrrzLbbbmv/my8GcOy4447eAFl99dUNX58I4HjwwQcNH0oRQYcrrrii/bBEWJqYZcYdd9zEKqsCCJWff/75Zt9996210717d/P555/nvooXQA488EBrvYug/K233tpOvTQkL40SWRImm2yy3IblAVcJZ511luHrP+aYY+wjLC98zaz3IaIHeO211zabbbaZ2X777b0A8uKLL7bYFlax7X7ggQdMz54965abrKWmSoAwE04zzTR1bTOz5C0zuQDB6ME4FVtjggkmsNPueOONZ5WNsdWnT5+a4gESux1fcZXA8rLeeuuZ+eabr1ZF6OAAUl5cjN0rrrjC2kY77bSTF0A23HBDw9ImApfw/PPPB9tXSTrQdhG/s7P58MMPDTtBV6oECHVj08k48m94HGy+LMkFyI033mi22mqrWh0777xznd3BFDnvvPPWfocnCeEJXCUcd9xx5thjj7VEE9MyEsqJnH766dY+QsYaayw7w912221mt912ywXIr7/+aiaddNI6w5Rlk+WzCmHLjMGs5YknnkhcuqoGyKyzzmo++uijWtOPPvqoWXnllcsBBIudFxB59tlnzTLLLFNXKSwd07LIc889Z5ZeemkvfbpKOOqoo8yJJ55o9+sARSSEE2H2EZButNFG5vbbb7f8wx577JELEGwrliQRGElmzKI7qSQloJsXXnih9tOhhx5qTjvttFafQVj6f/zxxyCdZs4g0Mhzzjlnbd3iv4cOHdriRdjywhKKYAxiaPqICxBIHLaGrI8zzzxzrW1fTuSVV14xiy22WK1peAyWrIsvvtjuZETSdjEMFnaBCDbDwIEDfV7F+xm3DQxf/RFKRVXOICy72IsiLLnff/99rr2YCRD26RiNIkzdhxxySAtFMC1jAGFcItDJX3/9tfVL5EkaQCjH9AcXgfhyIlDa7ITcMr4AwW+hAcFMdvTRR+e9RtDv2DfYOSJsx/XupjUAAuF4wAEH1Nr0XbZTAYJxCuJAGQL3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"/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-92"><g><rect x="50" y="353" width="130" height="40" rx="6" ry="6" fill="#e6e6e6" stroke="#000000" pointer-events="all" style="fill: rgb(230, 230, 230); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 373px; margin-left: 51px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>Broker Service</b><div><i>rabbitmq</i></div></div></div></div></foreignObject><image x="51" y="359" width="128" height="32" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-96"><g><rect x="240" y="353" width="130" height="40" rx="6" ry="6" fill="#e6e6e6" stroke="#000000" pointer-events="all" style="fill: rgb(230, 230, 230); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 373px; margin-left: 241px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>Identity Service</b><div><i>openldap</i></div></div></div></div></foreignObject><image x="241" y="359" width="128" height="32" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-99"><g><path d="M 462.5 435 L 462.5 421 L 308 421 C 308 417.1 302 417.1 302 421 L 302 421 L 147.5 421 L 147.5 428.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 147.5 433.88 L 144 426.88 L 147.5 428.63 L 151 426.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-100"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 422px; margin-left: 246px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">HTTP</div></div></div></foreignObject><image x="231.5" y="416" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-101"><g><rect x="430" y="435" width="130" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: rgb(255, 255, 255); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 455px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">Metadata Service</div></div></div></foreignObject><image x="431" y="448.5" width="128" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-102"><g><path d="M 376.37 465 L 423.63 465" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 371.12 465 L 378.12 461.5 L 376.37 465 L 378.12 468.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/><path d="M 428.88 465 L 421.88 468.5 L 423.63 465 L 421.88 461.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-103"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 466px; margin-left: 401px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">HTTP</div></div></div></foreignObject><image x="386.5" y="460" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-106"><g><path d="M 470 195.6 C 470 190.85 481.19 187 495 187 C 501.63 187 507.99 187.91 512.68 189.52 C 517.37 191.13 520 193.32 520 195.6 L 520 242.4 C 520 247.15 508.81 251 495 251 C 481.19 251 470 247.15 470 242.4 Z" fill="#e6e6e6" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(230, 230, 230); stroke: rgb(0, 0, 0);"/><path d="M 520 195.6 C 520 200.35 508.81 204.2 495 204.2 C 481.19 204.2 470 200.35 470 195.6" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-107"><g><rect x="452.5" y="251.5" width="85" height="17" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 89px; height: 1px; padding-top: 260px; margin-left: 451px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">search-db</div></div></div></foreignObject><image x="451" y="253.5" width="89" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-111"><g><path d="M 280 523.6 C 280 518.85 291.19 515 305 515 C 311.63 515 317.99 515.91 322.68 517.52 C 327.37 519.13 330 521.32 330 523.6 L 330 570.4 C 330 575.15 318.81 579 305 579 C 291.19 579 280 575.15 280 570.4 Z" fill="#e6e6e6" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(230, 230, 230); stroke: rgb(0, 0, 0);"/><path d="M 330 523.6 C 330 528.35 318.81 532.2 305 532.2 C 291.19 532.2 280 528.35 280 523.6" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-112"><g><rect x="262.5" y="579" width="85" height="20" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 89px; height: 1px; padding-top: 589px; margin-left: 261px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">auth-db</div></div></div></foreignObject><image x="261" y="582.5" width="89" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-115"><g><path d="M 376.37 117 L 423.63 117" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 371.12 117 L 378.12 113.5 L 376.37 117 L 378.12 120.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/><path d="M 428.88 117 L 421.88 120.5 L 423.63 117 L 421.88 113.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 117px; margin-left: 400px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">HTTP</div></div></div></foreignObject><image x="385.5" y="111" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-117"><g><path d="M 233.63 127 L 200 127 L 200 291 L 186.37 291" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 238.88 127 L 231.88 130.5 L 233.63 127 L 231.88 123.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/><path d="M 181.12 291 L 188.12 287.5 L 186.37 291 L 188.12 294.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-118"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 242px; margin-left: 191px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">HTTP</div></div></div></foreignObject><image x="176.5" y="236" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-13"><g><path d="M 305 147 L 305 182.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 305 187.88 L 301.5 180.88 L 305 182.63 L 308.5 180.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-119"><g><rect x="240" y="107" width="130" height="40" rx="6" ry="6" fill="#e6e6e6" stroke="#000000" pointer-events="all" style="fill: rgb(230, 230, 230); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 127px; margin-left: 241px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>Gateway Service</b><div><i>nginx</i></div></div></div></div></foreignObject><image x="241" y="113" width="128" height="32" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-121"><g><path d="M 115 264.63 L 115 250 L 114.65 235.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 115 269.88 L 111.5 262.88 L 115 264.63 L 118.5 262.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/><path d="M 114.53 230.12 L 118.19 237.03 L 114.65 235.37 L 111.19 237.2 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-122"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 251px; margin-left: 115px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">S3</div></div></div></foreignObject><image x="108.5" y="245" width="13" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-123"><g><rect x="50" y="271" width="130" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: rgb(255, 255, 255); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 291px; margin-left: 51px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">Analyse Service</div></div></div></foreignObject><image x="51" y="284.5" width="128" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-125"><g><path d="M 495 153.37 L 495 180.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 495 148.12 L 498.5 155.12 L 495 153.37 L 491.5 155.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/><path d="M 495 185.88 L 491.5 178.88 L 495 180.63 L 498.5 178.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-126"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 167px; margin-left: 497px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">HTTP</div></div></div></foreignObject><image x="482.5" y="161" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-127"><g><path d="M 276.37 41 L 305 41 L 305 100.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 271.12 41 L 278.12 37.5 L 276.37 41 L 278.12 44.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/><path d="M 305 105.88 L 301.5 98.88 L 305 100.63 L 308.5 98.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-128"><g><ellipse cx="255" cy="7.5" rx="7.5" ry="7.5" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: rgb(255, 255, 255); stroke: rgb(0, 0, 0);"/><path d="M 255 15 L 255 40 M 255 20 L 240 20 M 255 20 L 270 20 M 255 40 L 240 60 M 255 40 L 270 60" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 67px; margin-left: 255px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Researcher</div></div></div></foreignObject><image x="224" y="67.5" width="62" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPgAAABECAYAAACs2fgFAAAAAXNSR0IArs4c6QAAEqFJREFUeF7t3QOQLc2SB/B8y7e2bdu2bdvet36rt7Zt27Zt27bt3f5FdG1k5NeonnNm3pz5KiMm7r3T1V1VWfVPV937xKDBgcGBO8uB+9zZmY2JDQ4MDsQA+NgEgwN3mAMD4Hd4ccfUBgcGwMceGBy4wxwYAL/DizumNjgwAD72wODAHebAAPgdXtwxtcGBAfCxBwYH7jAHBsDv8OLey6f2VxHxKIkHLxcR33Rv48kA+L1txe898x0Aj7hHocsjRsTfnrAH/ici/jEi/i4i/jAifjoifjgivjEi/u2E745XBweOcmAA/BoAvrYIhMZnRMQHRMS/HF2p0X5w4AocGAC/QYC39fndiHjliPi5KyzYeGVw4AgHBsA7Af6jEfErnZx9iIh4hIh4soh48oh40IX3/joiXjAifqnzm6PZ4MBVODAA3gnwt4uIT7oCh0UwXzsi3iciHq28//OTX/4s07P/vsJ3xyuDAz0cGAC/ZoC3RQDu74iIZyyr8oYR8fk9KzXaDA5cgQMD4DcEcGvzJLNJft+0UN8cES97hYUbrwwO9HBgAPwGAW5BvnIC+aumlfmniHi4npVKbZ49Il4qIl44Ih53Nv35/X8ZEX8REeIF3z5bDP9+8NuaP8wsdF48Ip4uIh5/HuNDRsQ/R4RN8xtzP18fEVyNq5B0JOH2ErNlw8p55DnFqI/fjojvnAszfvMqHczvmA9+6edpJ4vpieb54Nk/RMTfzHOQyvzimYc93T3sPNbW9u8jwpyQuMtbTnN4vYh46rm//Hzt+w8eES85j/e5IuIx5kIV6VXrK+Vqbb+sMxNTAY4P3zZ3/iBzsNd+5Co+VkTgSUvv/tBsXf5MDzMW2jxYRNhD+P4881weNSL+a57LH09xqO+LiG+d2v3IgT4+auL7O6f295v4/nHzv59qSkW/R0S8UEQ8ZkTg5/1qoctSHvyqPngd97tMAPrI8ksAB/Q9eraI+PB58HttPf+9iHivKdD3JT2Np/SdBccs8QJBwl76ngkUbx0Rv975AgvmnaYN+m6d/agr+MJ5LjZFL5mPfu4/C46e9/5jEpifHBHv2VGzAMQ2a6P/nAHi91+3YJntAfzl570hMLtHUq428mdGxP9uNK4Af5GIsF5PM++Lp9/raOb9W0TEv3a0bU1eIyI+KCKetPOdH5wwABs/0dHed+3rRv7+IXPQmrDIFrI2NwrwN58k5aeXSTx2RPzpzsTeYNLWnzUxjVQ8Sp82Scy3iQhAWSPfpRVe5ejH5/YE1EtHhIXaIkFHpZLPeYV+WCc0Qo/FQBN97TymK3QVPz5bSHv1CkCd18Tf3zEiaJlKWwB/vwmoD7jCQAm+N9oI1FaAP+8M1O9O1kZPt3gptbtHhJtgNOvlKBGWbzwLlK13ARrIG/n7R0TEr011JrBU6UYB/t6T+faBZQQkzpYpbQE/p7xD03xBRHzLrKltNCaWBXyTSbI/TmlPK73tBtdogw8tz2nkL58BBVz6oNlpGKYeU5KWbCT19xQR4c8lYiqT0EzWTL8wzwWovPvwk7B5yqlO4BUj4hWKC8V8ZMn81s7u+ZSIeKvS5k9mIcbkNB8bisB55tmU5u5k+qL591tdEWzm1YhZ+Mul/hvI8ImlyAWpVDes59wG7o+x4gkr75kigmZ8pPKBT5zav/3KICvAX2zeS483a34aj8mv4pI5CyAE9YsuuK7W4ht2+P55EUEZZcJryok5TpERvk8wVXcai7YPnRqzRl5z2iNfsdFPtYI/enYb8/7l0hCo9uv9b9JE/65JyzGTGil6eeKNyTBxFMTkTSQfz5zjoy4RgUGKAnomPvv3LrxgYS1C8x81+YTZXN/S+vw2kt1mafRhs0m8NC6WBFOvkcVkPnNZ1vrhu31NRDx6es9GMZc105RwALIsfAQzX33Db32oyZwE6KylfB/4twqSbCICqRFBiQc0PzPfhtcGWUMxjExAS7BZg0Y2Nw24VC5tjcQJgDATnxNfKlWAW39tuW+vNrkRP7W0UJNQf6U5XpRrOCiTl1lp79eA+aXluZiTfah0e4kIFHtIXKmRMfOl/blE3MiPSQ8+deYHocEywfefnPcHbN/3pgD+rLMGy/3xoZjta0SKA3MjPqhU29rk83fqu784gWXJ53r+adG/P734Z3Pwric/D+SY2eZk4whiVQIUAaJMFqJaDUt8sPgCPhkEXAnAXyJxCv59I6ASKKQVt4gm+f1JOAoENfItoF0j38waVfDxCWd/ULBzjwBOwVMjIKXZsm9fv0GA/+xs5bRngpHcl0oV4J4T5tZjL55RrSB8JMyWhLEA7B8UQcw6EETdUhLGQ2hxu6xRoy2rhLXy8aktnrMqxT3si3v0dxMAN3ggsviZgHXNpySRfqdoIhqGxOshmtX72UcEFoDM9LrF72Fl2GS9pLYeATeA2LSVyZ89+1ftm7Qi4bC3+K29uEUWhFva5INn0ND6fgSVaKQeqpv6xyYTVjR7jZYAJOCTg0Br76p0tDkzcT/WtOrWmuGjuVb3aGl8NPdXdTDjOSY3zPwzsY6WgqmyBVzGRlxOgn4vttTav1YJBrNeuJxLritXkwDIxEKArUUhfp0AJ/H4Ge+/4DvxS95sg9Gi2Q08mgErk30ralo/R6rxnRotScZqWtl0fOlzEeluwZjBjY4W+BCEtFYj1oUNIHW0R9a3l2c1CEorEbRrVAF0ZFz2xPumDwMOAPUQX54gBuj2I1VU04l1fFxCe6hHsLJoqkvxApN79AMLA2Qac5sacU3EjnqJEmI55rPra1baEsC5lO+w1lkPwJlOPdFbfRhsq0W3MW3wSvwuvnhlYG7HxBHIakS7iIYfIYEm7zWivbO/4/e0Rk1P2Ojch3NQ1QTAJhjFVOwla0QbyAs34g/S5OckOWF+YyOaIfvYta8KIK7E83UOSHArm9VXWd+9rur4jvZh/vL9jbiLjj1n4qeLM+Q4kXhH5uPeOD0X0PVeI7GZ7Gq13y8BXFCQkFmkHoD3DLC3Dd+YSbMWeGjfIZlz1JW2p/WPEPMyFxGILorIZh/P/AXusvYAQiaXCCXf/RSqPhPfr0ase75fASEjwRw/J4ncZxeIAM4bvPZVAfSxc+69Z0z1XRqIJjon1T6OCm5COJ+hWDLvxXWq8uN+7GU66jwFXLk3jdZcxSWAU6iKlh6oAOfPkEprwaE8OAOWEsrErztS8eNdJk/1t5aYz7xS4ZQDWa1vrgFrAsPFEY5ehmHTyw03YkZuBRbX1kn1Ui7rFU0WP9gjwU0SXlWeudPIhNySZSWFkysLjwKchZUtprWxGUOLrrc2PWmovbnW5xXgLJSvPvARZnO2mpYAbtxcwUysq70agjoMFi2h3WhNEVSAc9NyluUe07tuDa6AQQoGUHqJ3ydodR20Fshhfjn4ktNltX++G1+YNmWJ9FQefe40Fz73uWmvjt9mpuF7KsPWxnYU4IJFCob2SNBVQDLTWhpz71tbz0+tRe8BuBgTn/vctMb7CvDd2EUPwHtLVZnUOsypFppRYcgRWjJ7jry/1baVKy61sfEE9mxU2myP5OKlLOS4FcIsEYulN4q9119+rmpOiq+S/DdX5kiQZ63fowDv1cKsCQU+mVT3ic2ck24C4NUFO+f4xbNqurYCnMKR9lulcwJcJ0uVZ3xuWryXVHsp1rgO6tmETHsakE8qcpoj4EtjItSk8JYuxVC4wbQ7N60trEKTdy+diTmoyWd1uGSDZmJC1nzzqT54762lSwBX1HPUBdvj6U0A3DkElZLXQUu+dQW4+gpu2I0BnMCQSlA22kjATHVOT1rHO0pN/6iMeC1FcR2Mzd9UWGHz8WNpf/nrXCXW2vLNRcxrqkY0/k3TB+XJc0rlnOPnYxOMOZYg1SUb8asdHd0UwJdMdLUH4hznpJsA+OsU5cWNo3l7U5NH5/tAB7gBO5ZIw+QiE74Z07eHpBzqCbOlFEXPt87dhvshR+mkVvVvCTaCKJPAovrhRuqrCYnrIHX+OVBjs1mLHnAbj1rv7EMfNdF7NfhSELXXfz/Ct5sAuIBavWtdEHEvS3RkHrntrQC4ATnh8q5lFr0bwGsORyjmaMTXqRU8V2XSOd6jJUWMs3b2XfGDnFqrxSOsmRyjOMdY2jeYuLnyzOGIXOiz1xfTnonf6LoA7vs1DSoYmwub9sba8/wmAE7I1+q2ugd6xtrb5tYAnBamOfJhDGa3s7irObs0y1pLLsJ9HdHoXsYutWOhWNx8YIZP5gBAIwcq6qUByhivI0vAHM/8VilWT+9tzbceBrpOgLvCK5cESzUdCUaKk2RXhMashVM3AXAuqRLRnH0Rh7qOyLq1uzUANxgLVvPeIs71KOPSpqvahMR3+sZR0esgfrXI+dH/nMFR1hyxrqAiBGyAnF+W084ngs41H3GAvNGOFHaIkQjA5fjCdQKctlaO3IhLxrLpvYXnz0v+ly9cL/e4CYAbf626VO2WD0mda31vHcANiH+Sj9kJPjhBtFTTmxkh0CZXmo/sMYcd3OglpZCqg2gLuWsmbE5nqTmXApRmeIbZ5K5uxV5fNlWOLSylFOtRUek1lkzvZm58BDhz8eMMcyVWQa4dJyS5SntECCniee7SkDBdKohpzU4BEN67pCCTY6L1QpClsSs3rik1VpRa80ynjM93evLg2tXzDLITMgV1flvrwEURzG3rW9OI7d1bpcENijkqsptTTQ50ANSetqw5ZFpcgKoWSSwxTk5e9ZzIcqMKvhrNBSDjWjtrXvvhhijgyZVESwUbvlnPVSuDzcG3rcU37lzGqS4dkGvuXc2BO8AarR2jzH0xMX3bxrGh1cln2iqDPBVAhHyuXde/9RV/WSPjBQJZjUZrNQGnjq8X4Cw/7lGuenPHnaxLjxCX5lLHn4Xpmh9/6wBuEZx9rnXTW5cjtIVzEytg5HrovcP63hU5dvjen40sADO0lhBW88r3mXt7OVkb35VBAoeNAI8PvHSWnF9er/JxtREzdU3Q8TFpYeZsrlewyEu516U776S+xDOWiB+r5t4FCoSFgqSaqto61HIqgFQVOjeerTTKwKGLpZoC0WnWUM3GSAOy0CqdOr5egOvXmB0YyUTAqnTbOjbKjWWV5nP1yqvXaiduJcBJOAX5+UAHM4aplY9BLm1CgTXlnpmkf/g5fmhQARY+ru9bbDXb2Ze0eZnrS7d+KKpxyixfnaMvAKcpBApZDr5BY9P6xq2wpZa1SjOtXbfj+/qpVzYRPMx8/fErjVusQR9Mv3pc05jMcSnPymph3WSBiM80tNNNgpzy+u3aKZuvxQZaXECtQo7ys2YIJn9axxwxPhVA+Fx9cb/Da4KXhnfgA99pdunJemUTk37tDrRTx3cE4Ma9VJYstiD1COwsExodf2lo8yHkMqlB5zKunTa8lQA3AVfluHwgk+iy4pCtGzy0f/25/HLpMMiKcvr/X9PYNHI9EJDfo4VJ372KtbW+gI2mrTfG1vY0JqG0dYnC1nxoVxp565jtVWqjnaV2FRBaulesjanWv58KoPbdpeq7vXX1nGC0N9Zu3zl1fEcBzhKRyu0JIi/Nj3CmiOpFGLntrQW4QTJp6wkoVwK5GmiPSHAbIftee+/QAk5ybTGsfYM57+TXke97lwuh6GXpvrel8dGgxuSsb9VGa/MhzQULbZ6eywpEz2ntrQCZvpzoMg7/62sjMQvlj0v31V8XwPVNm9kH3LI9kpXg9u0F5G4a4G3czGvpyd6LQ7hozHRz2ksh32qAC0KILGbT1uSYK72X+wM6X5FFwHx1XpcJR1MDgu8LcDjXfCSK2RaHCc3Ed/jBAgk6+b5IM3PL5vJd1geroOeKoaUNy5/k38oFm5N50PCsAYssIsyt4VsC1l5AsvbBzGe6CvQwyfGc6csNEKEVkHPkdGlDiQC7ccVhFuPkokih2YS50u1UANUxs9CsrR9WjuAlnjBr8398IL7Scxzz1PEd1eB5PrQ5ZUEjK9u2j6xx20dMcfEGVq191HsByMkA35Oe4/ngwODABXGgnia7oKGPoQ4ODA7scWAAfI9D4/ngwAVzYAD8ghdvDH1wYI8DA+B7HBrPBwcumAMD4Be8eGPogwN7HBgA3+PQeD44cMEcGAC/4MUbQx8c2OPAAPgeh8bzwYEL5sAA+AUv3hj64MAeBwbA9zg0ng8OXDAHBsAvePHG0AcH9jgwAL7HofF8cOCCOTAAfsGLN4Y+OLDHgQHwPQ6N54MDF8yBAfALXrwx9MGBPQ4MgO9xaDwfHLhgDgyAX/DijaEPDuxxYAB8j0Pj+eDABXNgAPyCF28MfXBgjwMD4HscGs8HBy6YAwPgF7x4Y+iDA3scGADf49B4PjhwwRwYAL/gxRtDHxzY48D/AbTWH0p48Qc9AAAAAElFTkSuQmCC"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-129"><g><ellipse cx="225" cy="524.5" rx="7.5" ry="7.5" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: rgb(255, 255, 255); stroke: rgb(0, 0, 0);"/><path d="M 225 532 L 225 557 M 225 537 L 210 537 M 225 537 L 240 537 M 225 557 L 210 577 M 225 557 L 240 577" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 584px; margin-left: 225px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Database<div>Engineer</div></div></div></div></foreignObject><image x="199.5" y="584.5" width="51" height="32" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-133"><g><path d="M 305 481.37 L 305 508.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 305 476.12 L 308.5 483.12 L 305 481.37 L 301.5 483.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/><path d="M 305 513.88 L 301.5 506.88 L 305 508.63 L 308.5 506.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 495px; margin-left: 305px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">JDBC</div></div></div></foreignObject><image x="290.5" y="489" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAACm1JREFUeF7tnAWoFG0Xx881Xrsbu7sTuwsVxU5QTLDF7m4xMRC7CyxssTsudjcGJrZer/fjN3yz3+zszM7uvbvDu/ebAyLuPvOcec7/OX3WsKioqChxKNZIIMwBNNZgqRzEATR24ekAGsvwdAB1AI1tEohl53F8qANoLJNALDuOo6H/b4DeuHFDihYtannsWrVqyeHDhw3XLV++XLp162a5R1hYmCRPnlxSp04tqVKlkmzZsknFihWlUqVKUqZMGfnnn38s9zBa0KFDB1m/fr1Pz8aJE0eSJEkiyZIlU/gXKlRIKleuLI0bN5a0adP6tIcvi65cuSL79u2TCxcuyP379+Xly5fy7ds3iRs3rsI7Xbp0Cu+SJUsqvIsVK+bLttZRrp2AentjAO7Ro4f07dtXMmXK5NPh1EX+AGq2cbx48aRLly4yYcIEyZAhg1/81cV///6V1atXy6xZs+TWrVt+7VG4cGEZPny4tG3bVrh0ZmRpcv8tgKoHQEsHDRqkCBYh+0KBAFTlkyVLFtm/f78gYH/ozp070r59e0EzY0JYi7Vr10qOHDkMt7EE9OPHj7J9+3aPhy9evCjLli1zfe6PyS1RooSMHDnSY09u8KdPn+TDhw/y4sULOX36tFy/fl0iIyM91nKwjRs3CgK2Ij2gCLZp06aGj/EOmL7nz5/LpUuXFDfy48cPt7W5c+eWa9euSeLEia1YK9+zR7NmzeTr168e69OkSSPILnv27JI+fXqJHz++IHM0+OTJk/L69WuPZzD9R44cMTTDloCavfGmTZsU9VfJH0Dr1aun3HJfiMNxcebNmyevXr1yewQfx6H52xvpAZ06daoMGzbMF/by7t07GTBggKxbt85t/ezZs2XgwIGWe1y+fFmJAX79+uW2tkKFCjJ58mSpXr26qQnlcnEZxo8fL2fOnHF7HlCvXr3qcaH/9YCqp0BLevXqpfggLaHt586dkwQJEpgKNyaAqpvWqVPHLegjWMOCeCOsTalSpeTx48euZfi/uXPnSp8+fSwvg7qAhhiXUG/VuAxHjx4VgkmVQgZQ9YWnT5/uoV0EC1OmTAkqoDt37nQz05hKtNcbderUSfF3LmGHhSluonXr1j6DqV1IMDV48GC3Z3fs2KGY85AFlBfv2LGjmwlEOx8+fCiZM2c2FFQgNPTevXuSP39+N00z8u3qArQyb968bv6fCB3XEROqW7euHDp0SNmC9A6Ate4j5DSUg3z58kUJIvCvKmGOJk2aFDRAb9++reSFKpFGEbyZUe/evWXRokWur7lsDx48kIQJE8YET8EnE1M0b95catas6RHphySgSGTMmDEyceJEl3By5cqlaKkRBUJDMW0IUaUaNWoo/suI8HlErFqTzGUziuxjhK7BwyEL6JMnTyRnzpxuR6LikidPHo9jBgLQhg0bKpUdldASs+rXzZs3pUiRIm7vQSXI34JIdMAOWUA5LOkK+aJKlPfatWsXUEDRNooY48aNc+0LWJg+s1LkkiVLlIhcJXwpPtgOCmlAW7VqJVu3bnXJCaGPHTs2RoCS+1EAwAKQllCH1lZ3smbNKseOHRNMvBn179/fLfghiFuzZo0deFrXcs3ewq7CgjcpkMstXLjQtaR79+6ydOlSS0CjI1nKjFSYKCiQsngjfbpilVZF533MnglpDUUbMYcqYW6NuioxreWijYDSpk0bSZo0qaX8GzVqJHv37nWtI3ceMmSI5XOBWBDSgE6bNk0RtEoInMRdTzEFVN0vUaJE0rJlSyW69lZupIJz/Phx12ssWLBASGPsoJAGdNSoUUo9VCWiTm3DQP1cDyjrjIIndX1ERISS61IcIPjZs2eP8m+V6Jdu2LBBmjRpYohRgwYN3GrVdqUsvExIAwowBC0qUTWZMWOGpYb6U5xnM7ovlBZ5Tv2hAT6VjkfVqlU9+FHa27Jli+tzivj4XjsopAFFmHRbVCIgIjCyMrn+AqruR1GdzotK5MGkI/q+7NChQ90uFj519+7dduAZuhpKO4pa5vfv312CAlz6pMECFO0kB9VOG6CJ+FUtrVy5UpluUIn3pGqk7YoEC92Q1VD6qfgqrV97//69YRstEJUilQ9BGMGYSkap0t27d6VAgQJumDE7VLZs2WDh6No32oASTWoDC29Na/2QmD8NbjMJUFelvqoSAQotLiMKJKD6KhDdjwMHDniwZUTk6dOnrs8DWVw4ePCgUACpX7++B9+wiIiIKPwA9Uf+YFbokFsR/qpnz56uZQQCFBuMKNCAhoeHS+nSpZVDqbRr1y5lOi7YgM6fP1/69evnYmNWpNdH4JQJMdWMr8SEcDFoPyXPcuXKKZUx6swqhYWHh0fR9VeJxBnTZTUySaI8c+ZM13Peen2BBPT3799SpUoVZfxRJWqlDGGZTcMFUkMBE1BVMst9ETjgkQKpxNjJqVOnlFHN6FLnzp1l1apVrscZ8yS1Uv1zWGRkZBTzKdre4ubNm4U6qTdCQ7Q1TrPCOHsEClA0kmBDP4ZCVUZ7S/XvHShA//z5I/ny5XMbKSEPHjFihKGomE6cM2eO23f43MWLF3sdxTSTu9G0Bi08rIRLQ/nBL/Ou2oSczjxgmU21MbjEjI1KhO3Pnj0zbQ8FAlAuXNeuXd38JvwBSzvmEUyTSy6q72niprSNby3/z58/KzNF+j4t7gmZ+FJGZD8uElMJ+lzWyCoqQRGjkphdrU8icEFTU6RI4SYj/BfO+M2bN67PrYQaE0BJ6jExaIJ+6o9p+hMnTgglOW8UUw3lHSj3UbTQ/g8GBGbbtm3zyhvAGSgDXC1lzJhRiVWYnGRS3ogAkirV6NGjhfloLVWrVk0IjvSu0RXl6jsXPIwpJpLlBpL3MUrIjC6MVGIUg3FCRkLMSA+o2Vwuz3OpKLPhg7ASVGO0uabKg6ICgZD+wvmiod7mcnke0GihcYE4GymSfqaWNtrZs2dN55i074GPI8V6+/atx+sBCOAULFhQmXLAKjItyEXgsho9U7t2bSWiN7KgLkABDD9kNlZhJCg0g9TBKHzWrvf1ty1er/p/vySgoMTH7bYK3NT9AlWcV/cjCANkbz1R/Vm4oLgMtCq6xNmJntFYs8DKLQ/9+fOnULaix6g1v0YvQOhMcELobEWBAJQDEKjhw/z9GUKgAE2ZMqXSNeEdojvshWZRejx//ryV2FzfE6NQjSJF0U4eGm1gWFh49OiRrFixQmkBkaMSkHAATEL58uWVLkOLFi18Dr/9BZSxTH6Fhlnjl2+YJHhaNZbNJBQdQAlYMOe8A6kBJp6fT0QXSP27IVfqu6RfmFd+8qB2dODLlGDx4sWVFA2+vp492pUin6+Xs9BWCTiA2iru4DNzAA2+jG3l4ABqq7iDz8wBNPgytpWDA6it4g4+MwfQ4MvYVg4OoLaKO/jMHECDL2NbOTiA2iru4DNzAA2+jG3l4ABqq7iDz+x//31G8Hk5HGyQgAOoDUK2k4UDqJ3StoGXA6gNQraThQOondK2gZcDqA1CtpOFA6id0raBlwOoDUK2k4UDqJ3StoGXA6gNQraThQOondK2gdd/AGTpUcp01/CWAAAAAElFTkSuQmCC"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-134"><g><ellipse cx="385" cy="524.5" rx="7.5" ry="7.5" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: rgb(255, 255, 255); stroke: rgb(0, 0, 0);"/><path d="M 385 532 L 385 557 M 385 537 L 370 537 M 385 537 L 400 537 M 385 557 L 370 577 M 385 557 L 400 577" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 584px; margin-left: 385px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">System<div>Engineer</div></div></div></div></foreignObject><image x="361" y="584.5" width="48" height="32" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-135"><g><path d="M 59.5 523.6 C 59.5 518.85 70.69 515 84.5 515 C 91.13 515 97.49 515.91 102.18 517.52 C 106.87 519.13 109.5 521.32 109.5 523.6 L 109.5 570.4 C 109.5 575.15 98.31 579 84.5 579 C 70.69 579 59.5 575.15 59.5 570.4 Z" fill="#e6e6e6" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(230, 230, 230); stroke: rgb(0, 0, 0);"/><path d="M 109.5 523.6 C 109.5 528.35 98.31 532.2 84.5 532.2 C 70.69 532.2 59.5 528.35 59.5 523.6" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-136"><g><path d="M 119.5 523.6 C 119.5 518.85 130.69 515 144.5 515 C 151.13 515 157.49 515.91 162.18 517.52 C 166.87 519.13 169.5 521.32 169.5 523.6 L 169.5 570.4 C 169.5 575.15 158.31 579 144.5 579 C 130.69 579 119.5 575.15 119.5 570.4 Z" fill="#e6e6e6" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(230, 230, 230); stroke: rgb(0, 0, 0);"/><path d="M 169.5 523.6 C 169.5 528.35 158.31 532.2 144.5 532.2 C 130.69 532.2 119.5 528.35 119.5 523.6" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-137"><g><path d="M 89.5 533.6 C 89.5 528.85 100.69 525 114.5 525 C 121.13 525 127.49 525.91 132.18 527.52 C 136.87 529.13 139.5 531.32 139.5 533.6 L 139.5 580.4 C 139.5 585.15 128.31 589 114.5 589 C 100.69 589 89.5 585.15 89.5 580.4 Z" fill="#e6e6e6" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(230, 230, 230); stroke: rgb(0, 0, 0);"/><path d="M 139.5 533.6 C 139.5 538.35 128.31 542.2 114.5 542.2 C 100.69 542.2 89.5 538.35 89.5 533.6" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-138"><g><rect x="40" y="506" width="150" height="105" rx="6.3" ry="6.3" fill="none" stroke="#000000" stroke-dasharray="3 3" pointer-events="all" style="stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-139"><g><path d="M 210 547 L 196.37 547" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 191.12 547 L 198.12 543.5 L 196.37 547 L 198.12 550.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-140"><g><rect x="430" y="271" width="130" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: rgb(255, 255, 255); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 291px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">User Interface</div></div></div></foreignObject><image x="431" y="284.5" width="128" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-141"><g><path d="M 333.63 41 L 305 41 L 305 100.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 338.88 41 L 331.88 44.5 L 333.63 41 L 331.88 37.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/><path d="M 305 105.88 L 301.5 98.88 L 305 100.63 L 308.5 98.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-142"><g><ellipse cx="355" cy="7.5" rx="7.5" ry="7.5" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: rgb(255, 255, 255); stroke: rgb(0, 0, 0);"/><path d="M 355 15 L 355 40 M 355 20 L 340 20 M 355 20 L 370 20 M 355 40 L 340 60 M 355 40 L 370 60" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 67px; margin-left: 355px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Machine</div></div></div></foreignObject><image x="332.5" y="67.5" width="45" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-147"><g><path d="M 376.37 127 L 403 127 L 403 291 L 423.63 291" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 371.12 127 L 378.12 123.5 L 376.37 127 L 378.12 130.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/><path d="M 428.88 291 L 421.88 294.5 L 423.63 291 L 421.88 287.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-148"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 217px; margin-left: 404px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">HTTP</div></div></div></foreignObject><image x="389.5" y="211" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-149"><g><path d="M 423.63 137 L 417 137 L 417 288 C 420.9 288 420.9 294 417 294 L 417 294 L 417 328 C 420.9 328 420.9 334 417 334 L 417 334 L 417 408 C 420.9 408 420.9 414 417 414 L 417 414 L 417 418 C 420.9 418 420.9 424 417 424 L 417 424 L 417 445 L 430 445" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 428.88 137 L 421.88 140.5 L 423.63 137 L 421.88 133.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-150"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 238px; margin-left: 421px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">HTTP</div></div></div></foreignObject><image x="406.5" y="232" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAAA/xJREFUeF7tm78vNEEYx78rEoUG0VGJHxGJSIiIQuFHkKAglCRErVKQUChIUPgDRChPUIqCwu9EQSHRiEgkNKIhUQg5mXvf2/f23tubW7Nr5jbf7dzMPM8z388882uXFY1Go+ATGgUsAg0Ny1hHCDRcPAk0ZDwJlEDDpkDI+sM1lEBDpkDIusMMDTPQ1dVVjI+P213s7OzE3t6eUpeLi4vx8vJi27i6ukJdXZ399/7+Pjo6OpR8yBqPjIxgfX0dv+krMabS0lI8Pj7KwnSU5+fno6CgAKJtY2MjWltb0dPTg9zc3LR2HBlKoJ40T1k5PnhUgaYyLuDOzs46ki65HoGqM3RYCBJo3FFfXx82NzeRl5f3X/TagT49PWF3dzcjWaenp/H8/GzXnZqaQllZmbRtZWUlWlpa8Ju+0mXo/Pw8KioqXOP++vrC6+sr7u/vcXZ2hqOjIyRfuQ8MDGBra8s8oFIaCRXKy8txd3dn/3J+fo6mpiYvJjKu66ev5DXUa9y3t7exafbw8NARfyQSwdDQkOM37RmascIA/BRZ5tdPX6pARawfHx9ob2/H8fGxHXp1dTVubm4IVAZTlJsGVMR0fX2N2tpaR/gie0Ws8YcZ6kLXRKAi1JqaGkdWbmxsYHh4mEBlWWoq0MHBQcdmaHFxEZOTkwSarUDHxsawtrZmhz8zM4O5uTkCzVag4riys7Njh7+ysoKJiQkCzVagyUvB9vY2+vv7CTQbgV5eXqK+vt4OPScnJ3bRUlRUlBlQcZuRuIOSiZCqfGFhAe/v73ZR8uW8F5t+blRkfv305dc5tK2tDScnJ3boqV6epD22yDr9k3ICBbzeFD08PGB0dBQHBwf/MtGycHFxgYaGhswvFn4CTNaGQIHl5WVUVVW5SiXubd/e3iBAnp6exl5hfn5+OuqLna3Y4SY/zFANFwuyQS8rF+dOcf5M9fCmKIuAiqxeWlpCb2+vK3MCNRSoeNdZWFiIkpISNDc3o6urC93d3bAsK20CE6gGoF43RbIpOLGcQAnUy3gBZB+JebHm59lQ5tdPX36cQ2XxxsuZoczQTMfKn3rMUMQ+xUz8jJNr6N8x5Oc0KBuWfvoi0F+YBglUpoBLOadcTrmuQ8fPaVA2Pv30xSmXU65svPHqz6tCzFCuoa5jRtuU63UUs755CvAffs1johQRgSrJZ15jAjWPiVJEBKokn3mNCdQ8JkoREaiSfOY1JlDzmChFRKBK8pnXmEDNY6IUEYEqyWdeYwI1j4lSROm/2lUyzcY6FCBQHaoH6JNAAxRXh2kC1aF6gD4JNEBxdZgmUB2qB+iTQAMUV4dpAtWheoA+CTRAcXWYJlAdqgfok0ADFFeH6W97Qt2suZ3FFgAAAABJRU5ErkJggg=="/></switch></g></g></g></g><g data-cell-id="a_cl7nsyDpLQFaXOHeFD-3"><g><path d="M 279.5 257.6 C 279.5 252.85 290.69 249 304.5 249 C 311.13 249 317.49 249.91 322.18 251.52 C 326.87 253.13 329.5 255.32 329.5 257.6 L 329.5 304.4 C 329.5 309.15 318.31 313 304.5 313 C 290.69 313 279.5 309.15 279.5 304.4 Z" fill="#e6e6e6" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(230, 230, 230); stroke: rgb(0, 0, 0);"/><path d="M 329.5 257.6 C 329.5 262.35 318.31 266.2 304.5 266.2 C 290.69 266.2 279.5 262.35 279.5 257.6" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="a_cl7nsyDpLQFaXOHeFD-4"><g><rect x="262" y="313" width="85" height="17" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 89px; height: 1px; padding-top: 322px; margin-left: 260px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">metric-db</div></div></div></foreignObject><image x="260" y="315.5" width="89" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-6"><g><path d="M 570 127 L 550 127 L 580 127 L 564.87 127" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 561.12 127 L 566.12 124.5 L 564.87 127 L 566.12 129.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-5"><g><rect x="570" y="120" width="40" height="14" rx="2.1" ry="2.1" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: rgb(255, 255, 255); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 127px; margin-left: 571px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">init</div></div></div></foreignObject><image x="571" y="120.5" width="38" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJgAAABECAYAAAB9Pvx1AAAAAXNSR0IArs4c6QAABCZJREFUeF7tnFmoTVEYx3/3wRTiRaYi05Mk4kFE8UYKGZJIhkylDK8iPFJCIWMSUQpRSiHyJFEeCIlCkVmEhP1p37qd1h7O8J17jv3fdbt1z1rfXv3Wb39r7bXWuS3oEgFHAi2OsRVaBJBgksCVgARzxavgEkwOuBKQYK54FVyCyQFXAhLMFa+CSzA54Eqg2QQ7ASwIEPkE9HQlVX7wF0D/QLXzwIzywzVnDQnm128SDJpuoVUZzO+BcImsDOaC9V/QajJYF+AN0K1N82YC5/ya6xO52QTbDcxKmIMN90FUcdTbQN9A7cuRfMsyos4BzpSUkWAVd4UqlhI4G3iQJJg8qQmB7vHw2FkZrCY8FaSEwELgeICKMphUqQmBi8A0CVYTlmUHqWSZYiewPnCna8Dkkr+PAxYDE4ABQAfgLfAQsMn5IeBjzlbnfYtcCezLGbO02KCovc8qrFuXas32FlmJYJsjklsCNO8Bo+K/94jlmZ1B/X00P1oNnM7ROxKsIAutG6L1pB0BIZ4CQ+ItphvAiBzSWJE/wBLgWEZ5CVYQwdYAewMy2NDXC7gATM8pV2uxb8BI4ElKPQlWEMFWAPsDIvwAFuUc7kIeHQGW1kCw0cDUOE4/YFVCzJPAg5LP9gC20d+wVxHmYLZqfjChBywDDQW+AtuAU8DLSMg+wPx47tY1oa5lMcuA9jt05c1gbeuOid4gbQcgdGmZog6PUSWT/DTBrMlfgEnA3UD7pwBXUjL9ROCmBEvu+aJnMCOzPH6DTKIU2rZpLbsWsGFKGSwBQtEFex6tmg8Gfqdk37kp87TtwCYJpgyWNAezRdiNGUO7zdEeJ5Sx7GVZTBlMGSxIYF7gWExpwY6AvXGGrgOArcRLMAkWJGBbQrcyMph9/DPeNiotKsEy4BV9DmZbRbZllHV9BzoFCkkwCfbv9GjSHEyCZT1aVX6uDKYMVqVC6dUlmASTYG0I1HolX0Okq17F+F6k5mDOEqWF1xDZPEOkPSiH29GVim4twRpLMDu6cyehJ3dFR3PWVdTL7VhJgjWWYMOARwk+2LmvsSnbVu2oUfKtJVhjCWbfhfycsGtgvWjn1q5GhxJfAwOjn6PxGbaGlMsaJcEaSzDrk+vx+bQ80tjp19Bp3Tx161JGgjWeYHZ8+lLO3pdgOUHlLfa/r4O1crAzZltzQJFgOSCVU6QoghmT8YB9I8pOfPQGfgEfgHfA/fgUiP23xFflAKx32WYbIuvNR/erkoAEqxKgqqcTkGAyxJWABHPFq+ASTA64EpBgrngVXILJAVcCEswVr4JLMDngSkCCueJVcAkmB1wJSDBXvAouweSAKwEJ5opXwSWYHHAlIMFc8Sq4BJMDrgQkmCteBZdgcsCVgARzxavgEkwOuBKQYK54FVyCyQFXAhLMFa+C/wVRVztUleCmzgAAAABJRU5ErkJggg=="/></switch></g></g></g><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-9"><g><path d="M 570 373 L 550 373 L 580 373 L 564.87 373" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 561.12 373 L 566.12 370.5 L 564.87 373 L 566.12 375.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-8"><g><rect x="570" y="366.5" width="40" height="13" rx="1.95" ry="1.95" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: rgb(255, 255, 255); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 373px; margin-left: 571px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">init</div></div></div></foreignObject><image x="571" y="366.5" width="38" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJgAAABECAYAAAB9Pvx1AAAAAXNSR0IArs4c6QAABCZJREFUeF7tnFmoTVEYx3/3wRTiRaYi05Mk4kFE8UYKGZJIhkylDK8iPFJCIWMSUQpRSiHyJFEeCIlCkVmEhP1p37qd1h7O8J17jv3fdbt1z1rfXv3Wb39r7bXWuS3oEgFHAi2OsRVaBJBgksCVgARzxavgEkwOuBKQYK54FVyCyQFXAhLMFa+CSzA54Eqg2QQ7ASwIEPkE9HQlVX7wF0D/QLXzwIzywzVnDQnm128SDJpuoVUZzO+BcImsDOaC9V/QajJYF+AN0K1N82YC5/ya6xO52QTbDcxKmIMN90FUcdTbQN9A7cuRfMsyos4BzpSUkWAVd4UqlhI4G3iQJJg8qQmB7vHw2FkZrCY8FaSEwELgeICKMphUqQmBi8A0CVYTlmUHqWSZYiewPnCna8Dkkr+PAxYDE4ABQAfgLfAQsMn5IeBjzlbnfYtcCezLGbO02KCovc8qrFuXas32FlmJYJsjklsCNO8Bo+K/94jlmZ1B/X00P1oNnM7ROxKsIAutG6L1pB0BIZ4CQ+ItphvAiBzSWJE/wBLgWEZ5CVYQwdYAewMy2NDXC7gATM8pV2uxb8BI4ElKPQlWEMFWAPsDIvwAFuUc7kIeHQGW1kCw0cDUOE4/YFVCzJPAg5LP9gC20d+wVxHmYLZqfjChBywDDQW+AtuAU8DLSMg+wPx47tY1oa5lMcuA9jt05c1gbeuOid4gbQcgdGmZog6PUSWT/DTBrMlfgEnA3UD7pwBXUjL9ROCmBEvu+aJnMCOzPH6DTKIU2rZpLbsWsGFKGSwBQtEFex6tmg8Gfqdk37kp87TtwCYJpgyWNAezRdiNGUO7zdEeJ5Sx7GVZTBlMGSxIYF7gWExpwY6AvXGGrgOArcRLMAkWJGBbQrcyMph9/DPeNiotKsEy4BV9DmZbRbZllHV9BzoFCkkwCfbv9GjSHEyCZT1aVX6uDKYMVqVC6dUlmASTYG0I1HolX0Okq17F+F6k5mDOEqWF1xDZPEOkPSiH29GVim4twRpLMDu6cyehJ3dFR3PWVdTL7VhJgjWWYMOARwk+2LmvsSnbVu2oUfKtJVhjCWbfhfycsGtgvWjn1q5GhxJfAwOjn6PxGbaGlMsaJcEaSzDrk+vx+bQ80tjp19Bp3Tx161JGgjWeYHZ8+lLO3pdgOUHlLfa/r4O1crAzZltzQJFgOSCVU6QoghmT8YB9I8pOfPQGfgEfgHfA/fgUiP23xFflAKx32WYbIuvNR/erkoAEqxKgqqcTkGAyxJWABHPFq+ASTA64EpBgrngVXILJAVcCEswVr4JLMDngSkCCueJVcAkmB1wJSDBXvAouweSAKwEJ5opXwSWYHHAlIMFc8Sq4BJMDrgQkmCteBZdgcsCVgARzxavgEkwOuBKQYK54FVyCyQFXAhLMFa+C/wVRVztUleCmzgAAAABJRU5ErkJggg=="/></switch></g></g></g><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-11"><g><path d="M 40 209 L 60 209 L 29.5 209 L 44.63 209" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 48.38 209 L 43.38 211.5 L 44.63 209 L 43.38 206.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-10"><g><rect x="0" y="203" width="40" height="12" rx="1.8" ry="1.8" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: rgb(255, 255, 255); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 209px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">init</div></div></div></foreignObject><image x="1" y="202.5" width="38" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJgAAABECAYAAAB9Pvx1AAAAAXNSR0IArs4c6QAABCZJREFUeF7tnFmoTVEYx3/3wRTiRaYi05Mk4kFE8UYKGZJIhkylDK8iPFJCIWMSUQpRSiHyJFEeCIlCkVmEhP1p37qd1h7O8J17jv3fdbt1z1rfXv3Wb39r7bXWuS3oEgFHAi2OsRVaBJBgksCVgARzxavgEkwOuBKQYK54FVyCyQFXAhLMFa+CSzA54Eqg2QQ7ASwIEPkE9HQlVX7wF0D/QLXzwIzywzVnDQnm128SDJpuoVUZzO+BcImsDOaC9V/QajJYF+AN0K1N82YC5/ya6xO52QTbDcxKmIMN90FUcdTbQN9A7cuRfMsyos4BzpSUkWAVd4UqlhI4G3iQJJg8qQmB7vHw2FkZrCY8FaSEwELgeICKMphUqQmBi8A0CVYTlmUHqWSZYiewPnCna8Dkkr+PAxYDE4ABQAfgLfAQsMn5IeBjzlbnfYtcCezLGbO02KCovc8qrFuXas32FlmJYJsjklsCNO8Bo+K/94jlmZ1B/X00P1oNnM7ROxKsIAutG6L1pB0BIZ4CQ+ItphvAiBzSWJE/wBLgWEZ5CVYQwdYAewMy2NDXC7gATM8pV2uxb8BI4ElKPQlWEMFWAPsDIvwAFuUc7kIeHQGW1kCw0cDUOE4/YFVCzJPAg5LP9gC20d+wVxHmYLZqfjChBywDDQW+AtuAU8DLSMg+wPx47tY1oa5lMcuA9jt05c1gbeuOid4gbQcgdGmZog6PUSWT/DTBrMlfgEnA3UD7pwBXUjL9ROCmBEvu+aJnMCOzPH6DTKIU2rZpLbsWsGFKGSwBQtEFex6tmg8Gfqdk37kp87TtwCYJpgyWNAezRdiNGUO7zdEeJ5Sx7GVZTBlMGSxIYF7gWExpwY6AvXGGrgOArcRLMAkWJGBbQrcyMph9/DPeNiotKsEy4BV9DmZbRbZllHV9BzoFCkkwCfbv9GjSHEyCZT1aVX6uDKYMVqVC6dUlmASTYG0I1HolX0Okq17F+F6k5mDOEqWF1xDZPEOkPSiH29GVim4twRpLMDu6cyehJ3dFR3PWVdTL7VhJgjWWYMOARwk+2LmvsSnbVu2oUfKtJVhjCWbfhfycsGtgvWjn1q5GhxJfAwOjn6PxGbaGlMsaJcEaSzDrk+vx+bQ80tjp19Bp3Tx161JGgjWeYHZ8+lLO3pdgOUHlLfa/r4O1crAzZltzQJFgOSCVU6QoghmT8YB9I8pOfPQGfgEfgHfA/fgUiP23xFflAKx32WYbIuvNR/erkoAEqxKgqqcTkGAyxJWABHPFq+ASTA64EpBgrngVXILJAVcCEswVr4JLMDngSkCCueJVcAkmB1wJSDBXvAouweSAKwEJ5opXwSWYHHAlIMFc8Sq4BJMDrgQkmCteBZdgcsCVgARzxavgEkwOuBKQYK54FVyCyQFXAhLMFa+C/wVRVztUleCmzgAAAABJRU5ErkJggg=="/></switch></g></g></g><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-12"><g><rect x="240" y="189" width="130" height="40" rx="6" ry="6" fill="#e6e6e6" stroke="#000000" pointer-events="all" style="fill: rgb(230, 230, 230); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 209px; margin-left: 241px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>Dashboard UI</b><div><i>grafana</i></div></div></div></div></foreignObject><image x="241" y="195" width="128" height="32" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-17"><g><path d="M 230 455 L 250 455 L 220 455 L 235.13 455" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 238.88 455 L 233.88 457.5 L 235.13 455 L 233.88 452.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-18"><g><path d="M 230 455 L 250 455 L 220 455 L 238.13 455" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 238.88 455 L 237.88 455.5 L 238.13 455 L 237.88 454.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-14"><g><rect x="190" y="448.5" width="40" height="13" rx="1.95" ry="1.95" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: rgb(255, 255, 255); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 455px; margin-left: 191px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">init</div></div></div></foreignObject><image x="191" y="448.5" width="38" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJgAAABECAYAAAB9Pvx1AAAAAXNSR0IArs4c6QAABCZJREFUeF7tnFmoTVEYx3/3wRTiRaYi05Mk4kFE8UYKGZJIhkylDK8iPFJCIWMSUQpRSiHyJFEeCIlCkVmEhP1p37qd1h7O8J17jv3fdbt1z1rfXv3Wb39r7bXWuS3oEgFHAi2OsRVaBJBgksCVgARzxavgEkwOuBKQYK54FVyCyQFXAhLMFa+CSzA54Eqg2QQ7ASwIEPkE9HQlVX7wF0D/QLXzwIzywzVnDQnm128SDJpuoVUZzO+BcImsDOaC9V/QajJYF+AN0K1N82YC5/ya6xO52QTbDcxKmIMN90FUcdTbQN9A7cuRfMsyos4BzpSUkWAVd4UqlhI4G3iQJJg8qQmB7vHw2FkZrCY8FaSEwELgeICKMphUqQmBi8A0CVYTlmUHqWSZYiewPnCna8Dkkr+PAxYDE4ABQAfgLfAQsMn5IeBjzlbnfYtcCezLGbO02KCovc8qrFuXas32FlmJYJsjklsCNO8Bo+K/94jlmZ1B/X00P1oNnM7ROxKsIAutG6L1pB0BIZ4CQ+ItphvAiBzSWJE/wBLgWEZ5CVYQwdYAewMy2NDXC7gATM8pV2uxb8BI4ElKPQlWEMFWAPsDIvwAFuUc7kIeHQGW1kCw0cDUOE4/YFVCzJPAg5LP9gC20d+wVxHmYLZqfjChBywDDQW+AtuAU8DLSMg+wPx47tY1oa5lMcuA9jt05c1gbeuOid4gbQcgdGmZog6PUSWT/DTBrMlfgEnA3UD7pwBXUjL9ROCmBEvu+aJnMCOzPH6DTKIU2rZpLbsWsGFKGSwBQtEFex6tmg8Gfqdk37kp87TtwCYJpgyWNAezRdiNGUO7zdEeJ5Sx7GVZTBlMGSxIYF7gWExpwY6AvXGGrgOArcRLMAkWJGBbQrcyMph9/DPeNiotKsEy4BV9DmZbRbZllHV9BzoFCkkwCfbv9GjSHEyCZT1aVX6uDKYMVqVC6dUlmASTYG0I1HolX0Okq17F+F6k5mDOEqWF1xDZPEOkPSiH29GVim4twRpLMDu6cyehJ3dFR3PWVdTL7VhJgjWWYMOARwk+2LmvsSnbVu2oUfKtJVhjCWbfhfycsGtgvWjn1q5GhxJfAwOjn6PxGbaGlMsaJcEaSzDrk+vx+bQ80tjp19Bp3Tx161JGgjWeYHZ8+lLO3pdgOUHlLfa/r4O1crAzZltzQJFgOSCVU6QoghmT8YB9I8pOfPQGfgEfgHfA/fgUiP23xFflAKx32WYbIuvNR/erkoAEqxKgqqcTkGAyxJWABHPFq+ASTA64EpBgrngVXILJAVcCEswVr4JLMDngSkCCueJVcAkmB1wJSDBXvAouweSAKwEJ5opXwSWYHHAlIMFc8Sq4BJMDrgQkmCteBZdgcsCVgARzxavgEkwOuBKQYK54FVyCyQFXAhLMFa+C/wVRVztUleCmzgAAAABJRU5ErkJggg=="/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-104"><g><rect x="240" y="435" width="130" height="40" rx="6" ry="6" fill="#e6e6e6" stroke="#000000" pointer-events="all" style="fill: rgb(230, 230, 230); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 455px; margin-left: 241px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>Auth Service</b><br /><i>keycloak</i></div></div></div></foreignObject><image x="241" y="441" width="128" height="32" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-120"><g><rect x="49.5" y="189" width="130" height="40" rx="6" ry="6" fill="#e6e6e6" stroke="#000000" pointer-events="all" style="fill: rgb(230, 230, 230); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 209px; margin-left: 51px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>Storage Service</b><div><i>seaweedfs</i></div></div></div></div></foreignObject><image x="51" y="195" width="128" height="32" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-105"><g><rect x="430" y="107" width="130" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: rgb(255, 255, 255); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 127px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">Search Service</div></div></div></foreignObject><image x="431" y="120.5" width="128" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="FWEJ_FGA9GBXbfwohBE8-108"><g><rect x="430" y="353" width="130" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: rgb(255, 255, 255); stroke: rgb(0, 0, 0);"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 373px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>Dashboard Service</b></div></div></div></foreignObject><image x="431" y="366.5" width="128" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAABECAYAAAD3Lo2pAAAAAXNSR0IArs4c6QAAHhxJREFUeF7t3QXUNU1SH/Ba3N2Cu3uCu7s7y+KQhMXdgiUszuLunuAs7u6SBIK7uztB7o+9c5jTVPfM3Ofe+zzfO1XnPOf7zntnenqqerr/XfWv6vtFSWmgNFAaKA2UBkoDu9PA/Xb3xvXCpYHSQGmgNFAaKA1EAYAaBKWB0kBpoDRQGtihBgoA7NDo9cqlgdJAaaA0UBooAFBjoDRQGigNlAZKAzvUQAGAHRq9Xrk0UBooDZQGSgMFAGoMlAZKA6WB0kBpYIcaKACwQ6PXK5cGSgOlgdJAaaAAQI2B0kBpoDRQGigN7FADBQB2aPTklZ82In6ho4p3ioiPuZCavuDw3Psnbf/Z4ZmPdaFnVrPX08BnRMRbJI/7u4h4pOt1o550BzTwmxHxJEk/vjoiXv0O9G+XXSgAsEuz/7uXLgBQ4+ASGrgrAOARIuLpI+IZI+KxI+LRI+JRIgIQ+auI+POI+OWI+MWI+P1LKKLajAIAd3AQ3FcAwMtHxDds1J+P+2+OH7TB91MR8WMR8a0R8dsb27rXLy8AcK9b+Hbe7zYBgN3m60fEa0XE80TEw61Uwa8c55rPi4gfWnlPXbasgQIAyzq6+hX3MgAYKfMHI8Lk9PkR8fdX1/rde2ABgLtnk3uhR7cBAB4jIt43It7uDGGGb4mIt4yIX78XjHHL71AA4JYNkD1+rwBg0oUP+90i4n/dQdtcs0sFAK6p7f0869oA4Mkj4usj4lnOqOI/jIhXjIgfOWObe2yK/v5D8uLfeARZe9TJrb/z3gHAZIAvOZKV/vrWLXI7HSgAcDt6v9efek0A8GgR8X8i4qkvoNTfioj/FBG/e4G2q8nSwK1poADAv6n+hyPiZY6EoFszyC09uADALSn+Hn/sNQHAJ0TEAwf6/NuI+O4DJ+Anj7wgHCFEwKeMiBeMiGddsMVndTIa7nET1uvdyxq4FwDA90fEZzdGephjGtnjHt2BLxwRj7nCkN8VES99iCH+/xXX3kuXFAC4l6x5d97lWgDgUY+LugU9k0+KiP8WEX88UM0LRIRFXqZAJuaEpyk+wN0ZXNWTm2vgXgAAnxsRb7qgCoBAHO99IuL5F679kAMx8L1vrtr7VAsFAO5T5rrPdPZaAOA1I+LLO1r54oh4w5Uas2EQq36qzvXvEBEft7Ktuqw0cOc1sBcAMDfEux7YwR8aEQ/bsc4/RMSzH1KIfnaD9Z43Il4tIp4rIp7p6H0Qk5SG+CfHIjs/cPBGfGlE/N8N7baX8mJ4zoscJrxnO+xYkJ7kND/yMZ/5TyPi5w6FNf53RHxNRPCO/NOK540AQDvpcZliRvOUyK32np6LUCnF0i7q51c80yW9QkDak689iXd848Pk/ErH9378o5dGOqe4LxLnVx0AHtudKk980NfLRsRLHO3/eBFhQfjn487xj4624yXCDr8pM1ys2sL1fEf3s3fynv94HDNY07JVpL9+07Efa97toyNC8aZWvuPgAn/J2T++ySEd9q0PunvmWdEl6XI/OnjIlFr3KsdF8gmPdviNY1+/6KibqYlP7xC8zl0ICJH3wzv9Nk6/bY3ijte8TkIKNgaMNVlD77WhLR6DV4iIl4qIZ4gIY0qBK4Wu1Bv46UOK4tdFxEMOWQvG1xq5qX3fsVN8y7PNLeaNtfKxh2/j7TsXv+rxvaafz5UFYK5jU+Fam7kniAjfjk2eufbXjumbX3u0O9udKpew36l9uch9ewQAFCk/2M6gJ194KAryRis0zqvwYSvih/OmTEb/OSJ+aUX70yWPc1jI3+9AQvovEfGIG+4DYqRE9XZHU1MjAKCvn3b8wPTBBKiwSk+4Sh8cEe+5Anz0AADmtY+a2L19/GHnRQcjAax4gn5ig35caiHm8QEwHn7lvRbp/3m4/oOPk/jK2/71MguuMfPKG25SpVF8G/BYkg84gIX3Ty6il+c+/jt7vlVyTQ8AAMvvHBEfeASboz6Is9OlifhTjyCjvf7cAMDiDwRk8h8j4seXlDb73dhmV/1XHMif2gD6vFae7nAhO5hnLExL8pfHZ/pulp5zU/taMIGOTD5zIyOfjmxCWgFmMP7ngPymAIBdjFnz2RMtKfT4u+/Ghm8LqHHrJe23suvXuWyvAIB2lbe1u83EwLUjtBBlQm8m8d6ks2Q9H7zyl2t2JlKapMo86VKjg9/tyi3kPW7DCACYzC3UCqOsAUVTN+yW3DuSHgCw27Lb9PF+xIb3ple73LUpW28QESY9u4pTRA2Jtz301U53jdhdClmd8jw7GUCF92okvd2wKncmtjc7emmyNjIAYKx/zgpbzttjP7wbffmvyYPODQB6i6JHWzSEIq4lvmvjGi9hq/DY8RioTNiTm9qXd/B3jt6I9hm/d1y41+yajRXE6UxwLlpC5k0AAM+JksHImqcIjhhv1xpu16Xtd0r/L3bPngEAFzMEy+2aiRrmFs5M7LBMOjcRHzkX1s8MGjHw/9/RzXWTZ7nXbowHIZMRAHjtI/kJ4NkqDzhOhr37egDgV48T9zcfdp1bx+gfHImf/jsSi6md3jnkfxxJZqO2ABPv0ws9re3Hkk4VwMni1Cb3JzvuaHtgMgMAdHQKJ0YoARC7BgDg+WmJwJM+hSeEzHzrlxYAGcBbs+vv9cWi+qIDT8A57PvJg7kAGVLoaUkeNAiHWKiFPOdyKgDgsfi+wzxijrqJfMWhGqy5bARurmG/m7zD2e/dOrmevQMrGxyVAl5DAuw9ZhTDsjiZbFvBD+BOzT7yyTXMDWoB4kXQBo5AJuK7wgg96ZGoXM+t+T2HhVKOsh2VWLyYvDg54JCJWOS3Jz+MAMDbHF36W0IP0yO4T7Xd++hGAAB/Ap+C8MR875Fr8BTHCX1U2tUEp989Eev8ygG4sFNgQ2EaNvUOL7YQIniNIw8heybdaSs7DMX13g0/hC0BUjY0WWUidiw2yduRCU/PpyQ/qHmPuzEKfbUAQLjCjrEXGmFXfTcW6UwqnfjsBHKADjyBVs7tAUDaM9Z6YvwIXwAJ9HAJMVaBniwTQQoim/je9cWiJkbOHplugS6u7kvZF8DAZclkLQnaxiXLmDDOs8X6FABgfRKu4BXJxPgDDpR5dy0OVm+udT+P4kd12rqW/S4x9k5uc+8AwOLbi4ch02UDvLdoMYIPmkt5LiZDhBQgJhPP8KxWuIlN9hb2VsQWxaAz4Xq0uCHJtIKkl/37CACIf06saLHjTzwSJE10SHM8A4iBPbHzRUDLZKRL1yMw4h2I8c7jiXaweBomskws2mKT2ZkPuAVig720UK5GnpK26IuYpvfvxe4RkICTv0g6ZFz0wgS9UMnIQ6F/PDqZcHVmv9Hld86IgBYi48EYowvj0L1zkiruCKJiJhZ3dfZNwHNBdrPbAh56cm4A4Dn4EcDHSCz+ALDQG/DsXde4hRea/defAUaehlYQ/nwDGQ9BmIRXqA0JGetCf9kJneewr3mfR4RHqBWLKYLxSCyWCIyZfFCHg3IKAOCF7YVvtGf8tWEIQB0hODtN1KbCN5p5B69lvzVj6WrX7B0AmPhM3JkeTFI+zPnu1WKO4JItHhaMrNQlY47iZb3UoufsENpMWs+xMEIMfnG++ZGrFkXuUB+vHclcRgBguq4XS+XlMLllOz33CpeYFDJZAgB2QT03vZrvnms3nAm2Mw9PKyPXJaAmBkhXmfA64GPwpGQiPvuRyQ/atavPhD2yjBOkJ2Nqng0x3Q/g9RbmEdiY7lc0x25oRDjzXM/vET6BL4toJsAXz0HWd9dfAgBYtOzARwTVtq8qfzogjLsakPE+5oOtokpgj3cyAmue04vp4768e9KRc9lX+8ZAJoixgH9PRuCUFzIDLlsBgDkZyMg2Yb5P2TNsl8nrDjZIPEFt+Paa9ts6ti56/d4BAOVKOevtBrnq5mjRotPLKba49rwJwgV2H9kZ6HaV3Lat2F1L/2rFh7mm3KmdKvvaBfuzY+ulBC4BgKWsCKlA2WKr76PFagQAuHTtJkc7tFHsl4vzxRvlAXSAUWZvoMjkxY4j0ScTUxYCsqvKvCFii5knx0Q2IhDaHWYeG2mW+pHJ0gIhVe/+K2YVaYLIf5mot98DNNP1o0XiEgDAc4EiIY4tIGD+fr4PoBJg42FbmwrcS3fkDTKHtIB7/kzjgjemDbEZp3boLRg9l31lhPQW0B54nvoN7Fg0W7EbtzBnshUAGPfGfyZswws6EiAkC0VkG6hr2m/Fp3e9SwoAPDR22Cv84d8R0s4hvQ+Au5Qrq5UXOsZXs2dziyOerWHrrun7EgDw+yht0e6/VyddjDhzjerXCACMdv/TOwFkPDIZH4DrtXUD2rlze2fSs0N2rd1ij5HMIzGKR6+xx3RNTz8q2qlRkMlogbDwGtMWlyUR6unxKAAv3JuR4DsY85lcCgB4loUNeXfJS7b0/n63ANkxYuePBCCTYdGKcEPPWzS/tud+9i5tWuu57Ov5AE4GJEf9Bkp6NTBsBKTsZrIVAIxSOwE9G4uRALkIja0Aee/ShBSvab814+5q1xQAeCjLvhevXFr4thgKkBB/asUuP+MH2KXaGfTIbhbkLzvGHp1bvraQSNbnEQCwS8jQfttO7wNXex1xMpMRAPDM3g5l3ha3r1zvTOh7Pln99wG5aku6mEUBCMtkzeK4dtzYgduJtzJaQEcLhJ2tIj5rBHADQjNZC3J4SiYi57ydSwIAzzGvIVFK0QQ+bzLPAdmK76h/kRWaQrjtZZw4ZCzLgmh1CmxlnsUsE+lc9tWHXjYTrxuuDO9oK70sBPcAfTglmWwFACOQrW+9FO01Y3t+zbXtt7V/F73+Jh/GRTvWNH6pLACPwbwWx85EwQmu855Az693XCCRdsQ87Uq3pHr1AIBnjkhYbZ/keUvfQbjzN4rhtfeOAMASo35qSxw1K7PcI1O6rwcATLpco2tOZzTJskEmSFZzkhqCH/Z1JlnqUs/uo0JS8vRH1eJMOPprcbVLNZkBe1vc1qcCgB5HIXvP3ndhERRK6fEk5m0BqJl369IAYN4HhFHzh504gliPp7M0n/XCYMZ8m/K21Nba3+2m20p7IwCwxb76IOSVEZD9pkaGb6sV3gHVMltZCgttBQDSpLMU7bZK6Fpd9q67tv1u2t+z3l8A4KGLTK8wC6Y75mgrYvBQe4/Zv8VIIwBgB2tyOWXSkqYjtUxWwlLZ2hEAcIiKcMOS9FjYpwAAOyqx0zVikrTTy0T6ENLeJKNdLeLaUvx/ageru1fEqcfpMJkhNOJ7bFnss/c6FQC05VlH+hW/zngLI7Jr217vhL5rAoDs2+UaRswF+qSOjVJK5/dj4LecDWPM4ncJAaAUj5rLCABsse/UZs+Dlp2hoBqnDVGmLx6MUYrpFgCg/V5Zb7F9wOVccm37navfZ2ln7wBA3K5Xt16cNPMM2LlZVLLJ8RSjjACA9uRWK2XZ4yksPVO1OmlhGMU9MtI5DgOik5dLOnMKAFhLdPQ4O+736CjBTts5AZP0cpf9bnJbywAfZXVkkzaOBFJij7i3ZMP291MBQOsR6T0XwZFLN5sf8Bt6mRdtez3b3CYAaPsobZZngKdC3HhU7wKZFslzvjjZKSNWXkJwENpvagQA1tp33lfx8CxzxU57OnNjur5HDFWTwhgfeey2AADP7YUSnP0hQ+pccm37navfZ2ln7wBAqdoemSkjwtiJW0R6WQMmTQPUYMf6n5P0pJdl5UGXAABD80Q4yRApK8tvXTMYxNO5QZHjWrlrAKBXTCR7zxFZSBx4fg5CLya9FQBgOveqpQEc85CEb4wXp8eO9mwg1M7GRDrPerBTzTI+TgUAGaks0ykA0HPxb7GNhcUCswXArBnLl7oG4AeWR+c0cH+rpzDJKOXspv3E7WnDaiMAsNa+836J2/MQZlktbeEw+fWKaLWiTHjGVZlftwUAmGezGh7aG3GKTtH3te13Sh8vds/eAcAoPzurxtU7RIWB7PCke/WYz1tJgJnRhSqkB0rBMhFtLY/pA1ax7q4DAG7GtQd+jNjqdDU/QOdcIYBRNkHLmeAaFT/OxFgxAfViyOcmAXJ3y89fIwBsVtWu5xnL2lT9LktxvUsegLbfFkLerCz90rXIn8ikk/TSdf2uJHPvvJE1NsiuGQGALfadtw3Q8IK04ryU6WRJYwHxLguXtt9Zb6xnlTDxcmyO5iJdOgu9umYLAF2j42vbb02frnbNngGAnZVdV69ud1sTW1xKbDrbgSOsiNdnrNnJmL16A2s8AL0BASnbISh/Of0thSay09HumgfA7tOEI3yxJNKB2glkuodu7KIm6e1g/L6FBDjKkW/PBRiBzFGVRH3q9fdUD8CWBcJCn4GwLSRApW8znsw1AABX/tLJer2xpX5Er3olwDnnnIzCQUoPv/nSAN74+yUAQK989Dze7hvLUu969Qra19riAXAvAJDVTQFMl+a4LSq9tv229O3i1+4ZAIwmZjFoi+K8cI7Js3esaOv2bQ0nO0DudiY3AQBte8hldi6KsPTy1DOW+l0DAN5L6iB335IoXSoDI5M2XWiUvpcRvHrPHlVRQ9rCA5hEyEVmSCtinL3qidO1wklZCuU1AIAQRy9ssTYNEKkyO3jonABA+9J4pRv6m/5fWKWXxrg0pka57krTzo9SHlUTzYpRLT176fdLAAD8F+TO7FyCydZqKzhJshUpklmYp71uKwDojX3tsrkslXPIte13jj6frY29AoBR5TrK5fbi/prLiC06d5VlxhkdwXpOADA9WxoiZjL3VitSexBf5nIXAYBJxeQyEgu8cEE2jqcjhef3j9j7uAK9A3jaPvRqR+B8WNSnvHDu0h4xiiseqOzJ6ICbawCAXnU0/bWr7Z2+N70P8moPwJ0LAPDKsb8FLJPWA7R24hwV4eL+b2tA9MilwJ8x2mO0r+3P/LpLAADt9zZEeEdCOXb6GWBdyzvYCgAcKdyroYCsuUS8VIJZFkomdv3zAkvXtN8pNr/YPXsEABZ3J0L13t1AVX+6PTVM7Fy1uEx6B7q41iQl1aZXmUyMOluo3cvVZXGWreAPj2Bp4E/968WeH5Lkwt9FAGCRVd99VO1wBOQyvgOXooksC+PIkLDb6ZGPJr0qLKNyWyZtKdSR58fuWOphT0bcBgtKL5XwXAuECRSfIZPRmJ2uH/X/XADAs5B4kXkzMbFbzNdmd0xt8Oi16XfTb8I/SG9zQRzkQcpkTWqe4lFc3oAjz5A/8fasdPe57Nv21aKqLkcrYvRAjzmsFaTanvetvXYrAADGpTFnsqagVa/mh3AtUDYPL17Tfp1Xup1/3hMAsABjJS+dGNYrM4kkM2f/zi0m1Y3rMftgl85TzyrtWZC5D9s0RIsTILCmQA6gk+2gofkWWd9FAEC/DzzUA7ATyEQpXHW9e0WceoVMRtUAeQFM/D3QIZcfkbBX2bDNOsAvsVhnPBNjRUpZVntA6hcPzuhceX3JjgQ+1wKBX2LS7vVBqKlXVhnPRPncHkg5JwBYKuQijs1l3zv+dj62AEOnW/YWc7bEi2jDeaPDZLiy8XN6fJaet8H48G7tIUPnsm/7TclQAjxa4qcF0zzSHqDjfqFGxwevka0AQDjChif7vn2feBo9IM4euD/Z2M2Oj7+m/dbo6mrX3AsAQKW37MhIxof0xIss+tmpUq2iW4LP/HcV3HwgPZ0pq2lxmRYPz0YImyYT/57dC/kretNO5r3DLHgh7HhG55pD5XZpWQGh7CjhuwoATJpAQGtfNrU7yCoPshnXq4kjA0rsqGpiL5XT7k65UxPfXIwfrPxeXJy7W35yCwJHHAWHR0kZnGyJuGa8AKrT4tkbN8Z0VozonAtEr+obvdihymBoyXI8JA5rGRWvOicA0Jc1FTOBRex+9uAFMjbo2DhACDaWHA8+IphlxXGmMTIqXcsbZZffpuDiLMj1z3gSTibMjrs+p33b+a9XVVOZ8fbsCeNSmMoBWGtkKwDQptolAFkm5mK1GwDyuSBv4+BkwAG52EaQd7GVa9lvja6uds29AADOpSzFdgyo0elzvVOwpj44XMNCIFYmzjRPmXG4jVz+LI3GRDvFq6SEIeQ8IHE1Ts+xA8Ed4OL0/3Ym3NsGvedCxxn6RZyx2G85DjjjQ2Q6P6UQkHBGy0fQtowJY3NapC3Y0L7qdNz0QiajanpL/AFuWZNyb/wDYwCUyc2OSDzbxNK7Xr/s8rLT40aEQe/K1nYr7CeeCjhOog8ARVZgSd9UaWR/XgQLHDnnAmEBWto5IwtO5FichvkBLCbazEVsIl5bfW/N9w1A02F2EuOa+9dcA/B4l16BGuEqIaCMua59i6gxZywDGa6XzpuVDQd8jYVsoTqnfdv39l1wna8R32OWOti79xQAwAsACI1qaFi4eVmMKTobET/VDOkVDbuW/dbo9mrXFAB4qKrl9yO7LNU3P7VohEEqb99Cr1rXSKZCI2xjwujVrt86SLybhVMfWrktD4BdfEa8M0kq8ds7Ynj07sh1FuMl4tXouNotugWmjAvcikwwynlzRhXmsvssOFzp3NfA40jmZ5yfe4HogbQlHQHUYsTv2bkQQD3XaZYeYXEGQrPd9FJfl363eDtEaanmP++NePJNhE6QLHtHMZ/bvvO+AtUAKe7KkmzJmtHWKQDAfbwMwklr64L0+s27gefQOxLdfdew35Jer/r73gEAVyAX89LRknOjjE6wy4xnZyZeaucwIlZN984rjdl9IiQtnb2+NGi4s7ma53Xx5/fcFgDoEXUwdKH5EcEre2dFQgCs3tHE7T0mBOGF3q5tSa8mNZyRNk7b3mcRBzLXCg+I/Hm7Wm5iO8HRt3pJAMBjJdSQHa3aex/95T2QX/6gzkW9czbW6ii7jvfEmJGxcy5hA8S/3qE52ZiSMnfKeQ/AJH5Ob/H3rEsCAO37HpxCOBIhHAvyqO5Je/+pAEA7yLLCZTxxp4iMFYv7yLs7tWtOuKT9Tun/xe7ZKwBALpG6Z7CPYumZ4rmlZBEoBjLSHyTvQ1YJjIuYuHfJC9CWGvUMC4id1NbzAHyoYtr4CaMz4G8LACCRZeelT2WY7RK5ue3WlyZUcT82GZ3emNnTu3uGD3/tKY4mPlXeHrxhEhQDxjHJquvN+2W341peg0lG5x245pIAQPvqGHjXNUVteHUAXaGJEfDhtu8do3vTCY9r2omMxtYpoQa7RHZg4x4TfdRH7mT8ny3eO0WTxLxxFEZyaQAwSpWd+oWHlJ3yOOr3TQCAdpEU3/FYc2CNh8I9PFDmhF5Rp15/L2m/m47ts95/rwMAbmCLr4nGYLCzxK5ec878kqK5HE1w4u2qAE6sbO5rA87in8XwLAA+dGxz5COLjv7hDoj5AiVZvX7XKe7DjY/IYuEyifowAAtAxruKDWsLOYYbtiWz9RbB+YIzv+aSHIAep6I9etUOwMTHk+JAHbqW2iUrQmYG916vNv+SHaffuerF2i0abGs3Kb9cPJYLGLAQ4wVOAJcJ1K1t33XatBNhQzt7rHPti+HrP5IZUlgmdqHuNTkZQ8aIXan3t2Mx7sglFwhsadwUiwS+CWBAD55tvPGOzYtl8VxJ2crE2N9yZPUWPU/X0i+bCgkhccqgwSsRg5/KzeJ7+Eb0xffKY2cx3goks/7JDEIspC/cFQRUz0dABJDMSYAG8JrxR7I2L2lfzwO6LdYjEmcvU+qSAGBq25jjHUOCxXfyTSEomh/NCbyAviUhOd/GTcJMl7DfKeP4YvfcVwDAxRRQDZcGSgOlgdJAaWCPGigAsEer1zuXBkoDpYHSwO41UABg90OgFFAaKA2UBkoDe9RAAYA9Wr3euTRQGigNlAZ2r4ECALsfAqWA0kBpoDRQGtijBgoA7NHq9c6lgdJAaaA0sHsNFADY/RAoBZQGSgOlgdLAHjVQAGCPVq93Lg2UBkoDpYHda6AAwO6HQCmgNFAaKA2UBvaogQIAe7R6vXNpoDRQGigN7F4DBQB2PwRKAaWB0kBpoDSwRw0UANij1eudSwOlgdJAaWD3GigAsPshUAooDZQGSgOlgT1qoADAHq1e71waKA2UBkoDu9dAAYDdD4FSQGmgNFAaKA3sUQMFAPZo9Xrn0kBpoDRQGti9BgoA7H4IlAJKA6WB0kBpYI8aKACwR6vXO5cGSgOlgdLA7jVQAGD3Q6AUUBooDZQGSgN71EABgD1avd65NFAaKA2UBnavgQIAux8CpYDSQGmgNFAa2KMGCgDs0er1zqWB0kBpoDSwew0UANj9ECgFlAZKA6WB0sAeNVAAYI9Wr3cuDZQGSgOlgd1r4F8ABXXbn1coepcAAAAASUVORK5CYII="/></switch></g></g></g><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-21"><g><rect x="452.5" y="588.61" width="85" height="20" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 89px; height: 1px; padding-top: 599px; margin-left: 451px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">data-db</div></div></div></foreignObject><image x="451" y="592.5" width="89" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></g><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-23"><g><path d="M 439.5 523.21 C 439.5 518.46 450.69 514.61 464.5 514.61 C 471.13 514.61 477.49 515.52 482.18 517.13 C 486.87 518.74 489.5 520.93 489.5 523.21 L 489.5 570.01 C 489.5 574.76 478.31 578.61 464.5 578.61 C 450.69 578.61 439.5 574.76 439.5 570.01 Z" fill="#e6e6e6" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(230, 230, 230); stroke: rgb(0, 0, 0);"/><path d="M 489.5 523.21 C 489.5 527.96 478.31 531.81 464.5 531.81 C 450.69 531.81 439.5 527.96 439.5 523.21" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-24"><g><path d="M 499.5 523.21 C 499.5 518.46 510.69 514.61 524.5 514.61 C 531.13 514.61 537.49 515.52 542.18 517.13 C 546.87 518.74 549.5 520.93 549.5 523.21 L 549.5 570.01 C 549.5 574.76 538.31 578.61 524.5 578.61 C 510.69 578.61 499.5 574.76 499.5 570.01 Z" fill="#e6e6e6" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(230, 230, 230); stroke: rgb(0, 0, 0);"/><path d="M 549.5 523.21 C 549.5 527.96 538.31 531.81 524.5 531.81 C 510.69 531.81 499.5 527.96 499.5 523.21" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-25"><g><path d="M 470.5 533.21 C 470.5 528.46 481.69 524.61 495.5 524.61 C 502.13 524.61 508.49 525.52 513.18 527.13 C 517.87 528.74 520.5 530.93 520.5 533.21 L 520.5 580.01 C 520.5 584.76 509.31 588.61 495.5 588.61 C 481.69 588.61 470.5 584.76 470.5 580.01 Z" fill="#e6e6e6" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(230, 230, 230); stroke: rgb(0, 0, 0);"/><path d="M 520.5 533.21 C 520.5 537.96 509.31 541.81 495.5 541.81 C 481.69 541.81 470.5 537.96 470.5 533.21" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="stroke: rgb(0, 0, 0);"/></g></g><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-29"><g><path d="M 494.86 481.37 L 494.86 518.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: rgb(0, 0, 0);"/><path d="M 494.86 476.12 L 498.36 483.12 L 494.86 481.37 L 491.36 483.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/><path d="M 494.86 523.88 L 491.36 516.88 L 494.86 518.63 L 498.36 516.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: rgb(0, 0, 0); stroke: rgb(0, 0, 0);"/></g><g data-cell-id="uDJ2bVtIrgoZBCZFZmDG-30"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 498px; margin-left: 496px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; background-color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">JDBC</div></div></div></foreignObject><image x="481.5" y="492" width="29" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAA/CAYAAAAxBeyIAAAAAXNSR0IArs4c6QAACm1JREFUeF7tnAWoFG0Xx881Xrsbu7sTuwsVxU5QTLDF7m4xMRC7CyxssTsudjcGJrZer/fjN3yz3+zszM7uvbvDu/ebAyLuPvOcec7/OX3WsKioqChxKNZIIMwBNNZgqRzEATR24ekAGsvwdAB1AI1tEohl53F8qANoLJNALDuOo6H/b4DeuHFDihYtannsWrVqyeHDhw3XLV++XLp162a5R1hYmCRPnlxSp04tqVKlkmzZsknFihWlUqVKUqZMGfnnn38s9zBa0KFDB1m/fr1Pz8aJE0eSJEkiyZIlU/gXKlRIKleuLI0bN5a0adP6tIcvi65cuSL79u2TCxcuyP379+Xly5fy7ds3iRs3rsI7Xbp0Cu+SJUsqvIsVK+bLttZRrp2AentjAO7Ro4f07dtXMmXK5NPh1EX+AGq2cbx48aRLly4yYcIEyZAhg1/81cV///6V1atXy6xZs+TWrVt+7VG4cGEZPny4tG3bVrh0ZmRpcv8tgKoHQEsHDRqkCBYh+0KBAFTlkyVLFtm/f78gYH/ozp070r59e0EzY0JYi7Vr10qOHDkMt7EE9OPHj7J9+3aPhy9evCjLli1zfe6PyS1RooSMHDnSY09u8KdPn+TDhw/y4sULOX36tFy/fl0iIyM91nKwjRs3CgK2Ij2gCLZp06aGj/EOmL7nz5/LpUuXFDfy48cPt7W5c+eWa9euSeLEia1YK9+zR7NmzeTr168e69OkSSPILnv27JI+fXqJHz++IHM0+OTJk/L69WuPZzD9R44cMTTDloCavfGmTZsU9VfJH0Dr1aun3HJfiMNxcebNmyevXr1yewQfx6H52xvpAZ06daoMGzbMF/by7t07GTBggKxbt85t/ezZs2XgwIGWe1y+fFmJAX79+uW2tkKFCjJ58mSpXr26qQnlcnEZxo8fL2fOnHF7HlCvXr3qcaH/9YCqp0BLevXqpfggLaHt586dkwQJEpgKNyaAqpvWqVPHLegjWMOCeCOsTalSpeTx48euZfi/uXPnSp8+fSwvg7qAhhiXUG/VuAxHjx4VgkmVQgZQ9YWnT5/uoV0EC1OmTAkqoDt37nQz05hKtNcbderUSfF3LmGHhSluonXr1j6DqV1IMDV48GC3Z3fs2KGY85AFlBfv2LGjmwlEOx8+fCiZM2c2FFQgNPTevXuSP39+N00z8u3qArQyb968bv6fCB3XEROqW7euHDp0SNmC9A6Ate4j5DSUg3z58kUJIvCvKmGOJk2aFDRAb9++reSFKpFGEbyZUe/evWXRokWur7lsDx48kIQJE8YET8EnE1M0b95catas6RHphySgSGTMmDEyceJEl3By5cqlaKkRBUJDMW0IUaUaNWoo/suI8HlErFqTzGUziuxjhK7BwyEL6JMnTyRnzpxuR6LikidPHo9jBgLQhg0bKpUdldASs+rXzZs3pUiRIm7vQSXI34JIdMAOWUA5LOkK+aJKlPfatWsXUEDRNooY48aNc+0LWJg+s1LkkiVLlIhcJXwpPtgOCmlAW7VqJVu3bnXJCaGPHTs2RoCS+1EAwAKQllCH1lZ3smbNKseOHRNMvBn179/fLfghiFuzZo0deFrXcs3ewq7CgjcpkMstXLjQtaR79+6ydOlSS0CjI1nKjFSYKCiQsngjfbpilVZF533MnglpDUUbMYcqYW6NuioxreWijYDSpk0bSZo0qaX8GzVqJHv37nWtI3ceMmSI5XOBWBDSgE6bNk0RtEoInMRdTzEFVN0vUaJE0rJlSyW69lZupIJz/Phx12ssWLBASGPsoJAGdNSoUUo9VCWiTm3DQP1cDyjrjIIndX1ERISS61IcIPjZs2eP8m+V6Jdu2LBBmjRpYohRgwYN3GrVdqUsvExIAwowBC0qUTWZMWOGpYb6U5xnM7ovlBZ5Tv2hAT6VjkfVqlU9+FHa27Jli+tzivj4XjsopAFFmHRbVCIgIjCyMrn+AqruR1GdzotK5MGkI/q+7NChQ90uFj519+7dduAZuhpKO4pa5vfv312CAlz6pMECFO0kB9VOG6CJ+FUtrVy5UpluUIn3pGqk7YoEC92Q1VD6qfgqrV97//69YRstEJUilQ9BGMGYSkap0t27d6VAgQJumDE7VLZs2WDh6No32oASTWoDC29Na/2QmD8NbjMJUFelvqoSAQotLiMKJKD6KhDdjwMHDniwZUTk6dOnrs8DWVw4ePCgUACpX7++B9+wiIiIKPwA9Uf+YFbokFsR/qpnz56uZQQCFBuMKNCAhoeHS+nSpZVDqbRr1y5lOi7YgM6fP1/69evnYmNWpNdH4JQJMdWMr8SEcDFoPyXPcuXKKZUx6swqhYWHh0fR9VeJxBnTZTUySaI8c+ZM13Peen2BBPT3799SpUoVZfxRJWqlDGGZTcMFUkMBE1BVMst9ETjgkQKpxNjJqVOnlFHN6FLnzp1l1apVrscZ8yS1Uv1zWGRkZBTzKdre4ubNm4U6qTdCQ7Q1TrPCOHsEClA0kmBDP4ZCVUZ7S/XvHShA//z5I/ny5XMbKSEPHjFihKGomE6cM2eO23f43MWLF3sdxTSTu9G0Bi08rIRLQ/nBL/Ou2oSczjxgmU21MbjEjI1KhO3Pnj0zbQ8FAlAuXNeuXd38JvwBSzvmEUyTSy6q72niprSNby3/z58/KzNF+j4t7gmZ+FJGZD8uElMJ+lzWyCoqQRGjkphdrU8icEFTU6RI4SYj/BfO+M2bN67PrYQaE0BJ6jExaIJ+6o9p+hMnTgglOW8UUw3lHSj3UbTQ/g8GBGbbtm3zyhvAGSgDXC1lzJhRiVWYnGRS3ogAkirV6NGjhfloLVWrVk0IjvSu0RXl6jsXPIwpJpLlBpL3MUrIjC6MVGIUg3FCRkLMSA+o2Vwuz3OpKLPhg7ASVGO0uabKg6ICgZD+wvmiod7mcnke0GihcYE4GymSfqaWNtrZs2dN55i074GPI8V6+/atx+sBCOAULFhQmXLAKjItyEXgsho9U7t2bSWiN7KgLkABDD9kNlZhJCg0g9TBKHzWrvf1ty1er/p/vySgoMTH7bYK3NT9AlWcV/cjCANkbz1R/Vm4oLgMtCq6xNmJntFYs8DKLQ/9+fOnULaix6g1v0YvQOhMcELobEWBAJQDEKjhw/z9GUKgAE2ZMqXSNeEdojvshWZRejx//ryV2FzfE6NQjSJF0U4eGm1gWFh49OiRrFixQmkBkaMSkHAATEL58uWVLkOLFi18Dr/9BZSxTH6Fhlnjl2+YJHhaNZbNJBQdQAlYMOe8A6kBJp6fT0QXSP27IVfqu6RfmFd+8qB2dODLlGDx4sWVFA2+vp492pUin6+Xs9BWCTiA2iru4DNzAA2+jG3l4ABqq7iDz8wBNPgytpWDA6it4g4+MwfQ4MvYVg4OoLaKO/jMHECDL2NbOTiA2iru4DNzAA2+jG3l4ABqq7iDz+x//31G8Hk5HGyQgAOoDUK2k4UDqJ3StoGXA6gNQraThQOondK2gZcDqA1CtpOFA6id0raBlwOoDUK2k4UDqJ3StoGXA6gNQraThQOondK2gdd/AGTpUcp01/CWAAAAAElFTkSuQmCC"/></switch></g></g></g></g></g></g></g></svg> \ No newline at end of file diff --git a/.docs/images/architecture.drawio b/.docs/images/architecture.drawio index b1aed4cb40..4343db2e4a 100644 --- a/.docs/images/architecture.drawio +++ b/.docs/images/architecture.drawio @@ -1,11 +1,41 @@ -<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.0.9 Chrome/128.0.6613.186 Electron/32.2.5 Safari/537.36" version="26.0.9" pages="9"> +<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.2.2 Chrome/134.0.6998.178 Electron/35.1.2 Safari/537.36" version="26.2.2" pages="9"> <diagram id="mvBsv1rP8O80Qe3yGnn_" name="docker-compose"> - <mxGraphModel dx="683" dy="391" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> + <mxGraphModel dx="819" dy="330" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-76" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;dashed=1;arcSize=2;" parent="1" vertex="1"> - <mxGeometry x="320" y="160" width="640" height="397" as="geometry" /> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-26" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;dashed=1;arcSize=6;" vertex="1" parent="1"> + <mxGeometry x="700" y="574.61" width="150" height="105" as="geometry" /> + </mxCell> + <mxCell id="FWEJ_FGA9GBXbfwohBE8-97" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;jumpStyle=arc;startArrow=classic;startFill=1;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-101" target="FWEJ_FGA9GBXbfwohBE8-119" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="775" y="480" /> + <mxPoint x="660" y="480" /> + <mxPoint x="660" y="240" /> + <mxPoint x="618" y="240" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="FWEJ_FGA9GBXbfwohBE8-98" value="HTTP" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="FWEJ_FGA9GBXbfwohBE8-97" vertex="1" connectable="0"> + <mxGeometry x="0.7012" y="1" relative="1" as="geometry"> + <mxPoint x="-19" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="FWEJ_FGA9GBXbfwohBE8-143" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;jumpStyle=arc;startArrow=classic;startFill=1;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-85" target="FWEJ_FGA9GBXbfwohBE8-119" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="395" y="480" /> + <mxPoint x="500" y="480" /> + <mxPoint x="500" y="240" /> + <mxPoint x="553" y="240" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="FWEJ_FGA9GBXbfwohBE8-144" value="HTTP" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="FWEJ_FGA9GBXbfwohBE8-143" vertex="1" connectable="0"> + <mxGeometry x="0.6707" relative="1" as="geometry"> + <mxPoint x="17" as="offset" /> + </mxGeometry> </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-77" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.75;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;startArrow=classic;startFill=1;endArrow=classic;endFill=1;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-119" target="FWEJ_FGA9GBXbfwohBE8-108" edge="1"> <mxGeometry relative="1" as="geometry"> @@ -23,12 +53,9 @@ </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-79" value="HTTP" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="FWEJ_FGA9GBXbfwohBE8-77" vertex="1" connectable="0"> <mxGeometry x="-0.3724" relative="1" as="geometry"> - <mxPoint x="-2" y="11" as="offset" /> + <mxPoint x="62" y="105" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-80" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;dashed=1;arcSize=6;" parent="1" vertex="1"> - <mxGeometry x="540" y="557" width="420" height="123" as="geometry" /> - </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-81" value="LDAP" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-96" target="FWEJ_FGA9GBXbfwohBE8-104" edge="1"> <mxGeometry x="-0.2381" relative="1" as="geometry"> <mxPoint as="offset" /> @@ -68,50 +95,22 @@ <mxGeometry relative="1" as="geometry"> <Array as="points"> <mxPoint x="395" y="400" /> - <mxPoint x="500" y="400" /> - <mxPoint x="500" y="206" /> + <mxPoint x="490" y="400" /> + <mxPoint x="490" y="206" /> </Array> </mxGeometry> </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-91" value="HTTP,<div>AMQP</div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="FWEJ_FGA9GBXbfwohBE8-90" vertex="1" connectable="0"> + <mxCell id="FWEJ_FGA9GBXbfwohBE8-91" value="<div>AMQP,<br>MQTT</div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="FWEJ_FGA9GBXbfwohBE8-90" vertex="1" connectable="0"> <mxGeometry x="-0.1797" y="2" relative="1" as="geometry"> - <mxPoint x="2" y="-77" as="offset" /> + <mxPoint x="-18" y="23" as="offset" /> </mxGeometry> </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-92" value="<b>Broker Service</b><div><i>rabbitmq</i></div>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E6E6E6;fontColor=#000000;strokeColor=#000000;" parent="1" vertex="1"> <mxGeometry x="330" y="422" width="130" height="40" as="geometry" /> </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-93" value="LDAP" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-96" target="FWEJ_FGA9GBXbfwohBE8-108" edge="1"> - <mxGeometry relative="1" as="geometry"> - <mxPoint as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-94" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-96" target="FWEJ_FGA9GBXbfwohBE8-119" edge="1"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-95" value="HTTP" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="FWEJ_FGA9GBXbfwohBE8-94" vertex="1" connectable="0"> - <mxGeometry x="0.125" relative="1" as="geometry"> - <mxPoint as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-96" value="<b>Identity Service *</b><div><i>openldap</i></div>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E6E6E6;fontColor=#000000;strokeColor=#000000;" parent="1" vertex="1"> + <mxCell id="FWEJ_FGA9GBXbfwohBE8-96" value="<b>Identity Service</b><div><i>openldap</i></div>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E6E6E6;fontColor=#000000;strokeColor=#000000;" parent="1" vertex="1"> <mxGeometry x="520" y="422" width="130" height="40" as="geometry" /> </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-97" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;jumpStyle=arc;startArrow=classic;startFill=1;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-101" target="FWEJ_FGA9GBXbfwohBE8-119" edge="1"> - <mxGeometry relative="1" as="geometry"> - <Array as="points"> - <mxPoint x="775" y="480" /> - <mxPoint x="662" y="480" /> - <mxPoint x="662" y="410" /> - <mxPoint x="617" y="410" /> - </Array> - </mxGeometry> - </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-98" value="HTTP" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="FWEJ_FGA9GBXbfwohBE8-97" vertex="1" connectable="0"> - <mxGeometry x="0.7012" y="1" relative="1" as="geometry"> - <mxPoint x="1" y="2" as="offset" /> - </mxGeometry> - </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-99" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=0;exitDx=0;exitDy=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;jumpStyle=arc;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-101" target="FWEJ_FGA9GBXbfwohBE8-85" edge="1"> <mxGeometry relative="1" as="geometry"> <Array as="points"> @@ -136,55 +135,23 @@ <mxPoint x="3" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-104" value="<b>Auth Service</b><br><i>keycloak</i>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E6E6E6;fontColor=#000000;strokeColor=#000000;" parent="1" vertex="1"> - <mxGeometry x="520" y="504" width="130" height="40" as="geometry" /> - </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-105" value="Search Service" style="rounded=1;whiteSpace=wrap;html=1;fontStyle=1" parent="1" vertex="1"> - <mxGeometry x="710" y="176" width="130" height="40" as="geometry" /> - </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-106" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=8.600000000000023;fillColor=#E6E6E6;strokeColor=#000000;" parent="1" vertex="1"> <mxGeometry x="750" y="256" width="50" height="64" as="geometry" /> </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-107" value="search-db" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;spacing=-1;" parent="1" vertex="1"> <mxGeometry x="732.5" y="320.5" width="85" height="17" as="geometry" /> </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-108" value="<b>Dashboard Service</b><div><i>grafana</i></div>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E6E6E6;fontColor=#000000;strokeColor=#000000;" parent="1" vertex="1"> - <mxGeometry x="710" y="422" width="130" height="40" as="geometry" /> - </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-109" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-124" target="FWEJ_FGA9GBXbfwohBE8-120" edge="1"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-110" value="S3" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="FWEJ_FGA9GBXbfwohBE8-109" vertex="1" connectable="0"> - <mxGeometry x="0.2961" y="-3" relative="1" as="geometry"> - <mxPoint x="3" y="-9" as="offset" /> - </mxGeometry> - </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-111" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=8.600000000000023;fillColor=#E6E6E6;strokeColor=#000000;" parent="1" vertex="1"> <mxGeometry x="560" y="584" width="50" height="64" as="geometry" /> </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-112" value="auth-db" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;spacing=-1;" parent="1" vertex="1"> <mxGeometry x="542.5" y="648" width="85" height="20" as="geometry" /> </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-113" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=8.600000000000023;fillColor=#E6E6E6;strokeColor=#000000;" parent="1" vertex="1"> - <mxGeometry x="750" y="584" width="50" height="64" as="geometry" /> - </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-114" value="metadata-db" style="text;html=1;strokeColor=none;fillColor=default;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;spacing=-1;" parent="1" vertex="1"> - <mxGeometry x="732.5" y="649" width="85" height="17" as="geometry" /> - </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-115" value="HTTP" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-119" target="FWEJ_FGA9GBXbfwohBE8-105" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint as="offset" /> </mxGeometry> </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-116" value="HTTP" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.25;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-119" target="FWEJ_FGA9GBXbfwohBE8-124" edge="1"> - <mxGeometry relative="1" as="geometry"> - <Array as="points"> - <mxPoint x="490" y="186" /> - <mxPoint x="490" y="186" /> - </Array> - <mxPoint as="offset" /> - </mxGeometry> - </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-117" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-119" target="FWEJ_FGA9GBXbfwohBE8-123" edge="1"> <mxGeometry relative="1" as="geometry"> <Array as="points"> @@ -195,15 +162,15 @@ </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-118" value="HTTP" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="FWEJ_FGA9GBXbfwohBE8-117" vertex="1" connectable="0"> <mxGeometry x="0.5551" y="-1" relative="1" as="geometry"> - <mxPoint x="1" y="-64" as="offset" /> + <mxPoint x="-9" y="-20" as="offset" /> </mxGeometry> </mxCell> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="FWEJ_FGA9GBXbfwohBE8-119" target="uDJ2bVtIrgoZBCZFZmDG-12"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-119" value="<b>Gateway Service</b><div><i>nginx</i></div>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E6E6E6;fontColor=#000000;strokeColor=#000000;" parent="1" vertex="1"> <mxGeometry x="520" y="176" width="130" height="40" as="geometry" /> </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-120" value="<b>Storage Service</b><div><i>seaweedfs</i></div>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E6E6E6;fontColor=#000000;strokeColor=#000000;" parent="1" vertex="1"> - <mxGeometry x="329.5" y="258" width="130" height="40" as="geometry" /> - </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-121" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-123" target="FWEJ_FGA9GBXbfwohBE8-120" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> @@ -215,9 +182,6 @@ <mxCell id="FWEJ_FGA9GBXbfwohBE8-123" value="Analyse Service" style="rounded=1;whiteSpace=wrap;html=1;fontStyle=1" parent="1" vertex="1"> <mxGeometry x="330" y="340" width="130" height="40" as="geometry" /> </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-124" value="<b>Upload Service</b><div><i>tusd</i></div>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E6E6E6;fontColor=#000000;strokeColor=#000000;" parent="1" vertex="1"> - <mxGeometry x="330" y="176" width="130" height="40" as="geometry" /> - </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-125" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=classic;startFill=1;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-105" target="FWEJ_FGA9GBXbfwohBE8-106" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> @@ -239,24 +203,11 @@ <mxCell id="FWEJ_FGA9GBXbfwohBE8-129" value="Database<div>Engineer</div>" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1"> <mxGeometry x="490" y="586" width="30" height="60" as="geometry" /> </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-130" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;" parent="1" vertex="1"> - <mxGeometry x="540" y="550" width="420" height="14" as="geometry" /> - </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-131" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=classic;startFill=1;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-101" target="FWEJ_FGA9GBXbfwohBE8-113" edge="1"> - <mxGeometry relative="1" as="geometry"> - <mxPoint x="840" y="524" as="sourcePoint" /> - </mxGeometry> - </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-132" value="HTTP" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="FWEJ_FGA9GBXbfwohBE8-131" vertex="1" connectable="0"> - <mxGeometry x="-0.0169" y="-1" relative="1" as="geometry"> - <mxPoint x="1" as="offset" /> - </mxGeometry> - </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-133" value="JDBC" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;startArrow=classic;startFill=1;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-104" target="FWEJ_FGA9GBXbfwohBE8-111" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-134" value="System<div>Engineer</div>" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1"> - <mxGeometry x="662" y="571" width="30" height="60" as="geometry" /> + <mxGeometry x="650" y="586" width="30" height="60" as="geometry" /> </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-135" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=8.600000000000023;fillColor=#E6E6E6;strokeColor=#000000;" parent="1" vertex="1"> <mxGeometry x="339.5" y="584" width="50" height="64" as="geometry" /> @@ -288,33 +239,6 @@ <mxCell id="FWEJ_FGA9GBXbfwohBE8-142" value="Machine" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1"> <mxGeometry x="620" y="69" width="30" height="60" as="geometry" /> </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-143" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;jumpStyle=arc;startArrow=classic;startFill=1;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-85" target="FWEJ_FGA9GBXbfwohBE8-119" edge="1"> - <mxGeometry relative="1" as="geometry"> - <Array as="points"> - <mxPoint x="395" y="480" /> - <mxPoint x="506" y="480" /> - <mxPoint x="506" y="410" /> - <mxPoint x="553" y="410" /> - </Array> - </mxGeometry> - </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-144" value="HTTP" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="FWEJ_FGA9GBXbfwohBE8-143" vertex="1" connectable="0"> - <mxGeometry x="0.6707" relative="1" as="geometry"> - <mxPoint x="-1" as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-145" value="" style="endArrow=none;dashed=1;html=1;rounded=0;entryX=1;entryY=0.976;entryDx=0;entryDy=0;entryPerimeter=0;exitX=1;exitY=0.076;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-80" target="FWEJ_FGA9GBXbfwohBE8-76" edge="1"> - <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="810" y="570" as="sourcePoint" /> - <mxPoint x="860" y="520" as="targetPoint" /> - </mxGeometry> - </mxCell> - <mxCell id="FWEJ_FGA9GBXbfwohBE8-146" value="" style="endArrow=none;dashed=1;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.121;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-80" target="FWEJ_FGA9GBXbfwohBE8-130" edge="1"> - <mxGeometry width="50" height="50" relative="1" as="geometry"> - <mxPoint x="540" y="590" as="sourcePoint" /> - <mxPoint x="590" y="540" as="targetPoint" /> - </mxGeometry> - </mxCell> <mxCell id="FWEJ_FGA9GBXbfwohBE8-147" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" parent="1" source="FWEJ_FGA9GBXbfwohBE8-119" target="FWEJ_FGA9GBXbfwohBE8-140" edge="1"> <mxGeometry relative="1" as="geometry"> <Array as="points"> @@ -341,22 +265,76 @@ <mxPoint x="4" y="34" as="offset" /> </mxGeometry> </mxCell> - <mxCell id="a_cl7nsyDpLQFaXOHeFD-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="a_cl7nsyDpLQFaXOHeFD-3" target="FWEJ_FGA9GBXbfwohBE8-108"> + <mxCell id="a_cl7nsyDpLQFaXOHeFD-3" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=8.600000000000023;fillColor=#E6E6E6;strokeColor=#000000;" parent="1" vertex="1"> + <mxGeometry x="559.5" y="318" width="50" height="64" as="geometry" /> + </mxCell> + <mxCell id="a_cl7nsyDpLQFaXOHeFD-4" value="metric-db" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;spacing=-1;" parent="1" vertex="1"> + <mxGeometry x="542" y="382" width="85" height="17" as="geometry" /> + </mxCell> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;endSize=4;" edge="1" parent="1" source="uDJ2bVtIrgoZBCZFZmDG-5" target="FWEJ_FGA9GBXbfwohBE8-105"> <mxGeometry relative="1" as="geometry" /> </mxCell> - <mxCell id="a_cl7nsyDpLQFaXOHeFD-6" value="HTTP" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="a_cl7nsyDpLQFaXOHeFD-5"> - <mxGeometry x="-0.1222" relative="1" as="geometry"> - <mxPoint as="offset" /> - </mxGeometry> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-5" value="init" style="rounded=1;whiteSpace=wrap;html=1;fontStyle=1" vertex="1" parent="1"> + <mxGeometry x="850" y="189" width="40" height="14" as="geometry" /> + </mxCell> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;endSize=4;" edge="1" parent="1" source="uDJ2bVtIrgoZBCZFZmDG-8" target="FWEJ_FGA9GBXbfwohBE8-108"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-8" value="init" style="rounded=1;whiteSpace=wrap;html=1;fontStyle=1" vertex="1" parent="1"> + <mxGeometry x="850" y="435.5" width="40" height="13" as="geometry" /> </mxCell> - <mxCell id="a_cl7nsyDpLQFaXOHeFD-3" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=8.600000000000023;fillColor=#E6E6E6;strokeColor=#000000;" vertex="1" parent="1"> - <mxGeometry x="900" y="410" width="50" height="64" as="geometry" /> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endSize=4;" edge="1" parent="1" source="uDJ2bVtIrgoZBCZFZmDG-10" target="FWEJ_FGA9GBXbfwohBE8-120"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-10" value="init" style="rounded=1;whiteSpace=wrap;html=1;fontStyle=1" vertex="1" parent="1"> + <mxGeometry x="280" y="272" width="40" height="12" as="geometry" /> </mxCell> - <mxCell id="a_cl7nsyDpLQFaXOHeFD-4" value="metric-db" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;spacing=-1;" vertex="1" parent="1"> - <mxGeometry x="882.5" y="474" width="85" height="17" as="geometry" /> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-12" value="<b>Dashboard UI</b><div><i>grafana</i></div>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E6E6E6;fontColor=#000000;strokeColor=#000000;" vertex="1" parent="1"> + <mxGeometry x="520" y="258" width="130" height="40" as="geometry" /> </mxCell> - <mxCell id="a_cl7nsyDpLQFaXOHeFD-7" value="* omitted edges for all services to metric-db" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> - <mxGeometry x="727" y="683" width="233" height="11" as="geometry" /> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endSize=4;" edge="1" parent="1" source="uDJ2bVtIrgoZBCZFZmDG-14" target="FWEJ_FGA9GBXbfwohBE8-104"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-18" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endSize=0;startSize=0;jumpSize=3;" edge="1" parent="1" source="uDJ2bVtIrgoZBCZFZmDG-14" target="FWEJ_FGA9GBXbfwohBE8-104"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-14" value="init" style="rounded=1;whiteSpace=wrap;html=1;fontStyle=1" vertex="1" parent="1"> + <mxGeometry x="470" y="517.5" width="40" height="13" as="geometry" /> + </mxCell> + <mxCell id="FWEJ_FGA9GBXbfwohBE8-104" value="<b>Auth Service</b><br><i>keycloak</i>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E6E6E6;fontColor=#000000;strokeColor=#000000;" parent="1" vertex="1"> + <mxGeometry x="520" y="504" width="130" height="40" as="geometry" /> + </mxCell> + <mxCell id="FWEJ_FGA9GBXbfwohBE8-120" value="<b>Storage Service</b><div><i>seaweedfs</i></div>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E6E6E6;fontColor=#000000;strokeColor=#000000;" parent="1" vertex="1"> + <mxGeometry x="329.5" y="258" width="130" height="40" as="geometry" /> + </mxCell> + <mxCell id="FWEJ_FGA9GBXbfwohBE8-105" value="Search Service" style="rounded=1;whiteSpace=wrap;html=1;fontStyle=1" parent="1" vertex="1"> + <mxGeometry x="710" y="176" width="130" height="40" as="geometry" /> + </mxCell> + <mxCell id="FWEJ_FGA9GBXbfwohBE8-108" value="<b>Dashboard Service</b>" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> + <mxGeometry x="710" y="422" width="130" height="40" as="geometry" /> + </mxCell> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-21" value="data-db" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;spacing=-1;" vertex="1" parent="1"> + <mxGeometry x="732.5" y="657.61" width="85" height="20" as="geometry" /> + </mxCell> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-23" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=8.600000000000023;fillColor=#E6E6E6;strokeColor=#000000;" vertex="1" parent="1"> + <mxGeometry x="719.5" y="583.61" width="50" height="64" as="geometry" /> + </mxCell> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-24" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=8.600000000000023;fillColor=#E6E6E6;strokeColor=#000000;" vertex="1" parent="1"> + <mxGeometry x="779.5" y="583.61" width="50" height="64" as="geometry" /> + </mxCell> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-25" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=8.600000000000023;fillColor=#E6E6E6;strokeColor=#000000;" vertex="1" parent="1"> + <mxGeometry x="750.5" y="593.61" width="50" height="64" as="geometry" /> + </mxCell> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=classic;startFill=1;" edge="1" parent="1"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="774.86" y="544" as="sourcePoint" /> + <mxPoint x="774.86" y="594" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="uDJ2bVtIrgoZBCZFZmDG-30" value="JDBC" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="uDJ2bVtIrgoZBCZFZmDG-29"> + <mxGeometry x="0.3566" relative="1" as="geometry"> + <mxPoint x="1" y="-12" as="offset" /> + </mxGeometry> </mxCell> </root> </mxGraphModel> @@ -1108,11 +1086,33 @@ </root> </mxGraphModel> </diagram> - <diagram id="7HywRA3nQAgvNxZjCRq2" name="private-embargo"> - <mxGraphModel dx="1434" dy="822" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> + <diagram id="7HywRA3nQAgvNxZjCRq2" name="data-versioning"> + <mxGraphModel dx="988" dy="563" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> + <mxCell id="795Xv0Ka93fOG331V9Xn-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="795Xv0Ka93fOG331V9Xn-4" edge="1"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="622" y="141" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="795Xv0Ka93fOG331V9Xn-8" value="t3:<b> UPDATE</b>&nbsp;tbl<br><b>SET</b> `Temp` = <font style="color: light-dark(rgb(251, 35, 108), rgb(251, 35, 108));">22.1</font><br><b>WHERE</b> `ID` = 1" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=default;fontSize=17;" parent="795Xv0Ka93fOG331V9Xn-7" vertex="1" connectable="0"> + <mxGeometry x="-0.1405" y="3" relative="1" as="geometry"> + <mxPoint x="22" y="3" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="795Xv0Ka93fOG331V9Xn-4" value="" style="rounded=1;whiteSpace=wrap;html=1;arcSize=4;" parent="1" vertex="1"> + <mxGeometry x="120" y="80" width="284" height="122" as="geometry" /> + </mxCell> + <mxCell id="795Xv0Ka93fOG331V9Xn-18" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAABJEAAAHoCAYAAAD5W34cAACAAElEQVR4XuydB5iV1bWGTTP2buyxRGNFNHYMEcUGoiiKgg0RFOzYqWIHLIiKPYiKEkWxoCioFCsR0RhbTJPYk1yvN7m5aQbcl3fBd7LPP2eQGc4MM+b7nmc95y9773//ex+G2e+stfZSybIsy7Isy7Isy7Isy7K+REsVL1iWZTVV/eMf/7DZbHU0y7Isy7Isy6qWDJEsy2o2YkH8y1/+0mazLaL99a9/Lf4zsizLsizLsqx6yxDJsqxmI0Mkm61uZohkWZZlWZZlVVOGSJZlNRsZItlsdTNDJMuyLMuyLKuaMkSyLKvZyBDJZqubGSJZlmVZlmVZ1ZQhkmVZzUaGSDZb3cwQybIsy7Isy6qmDJEsy2o2MkSy2epmhkiWZVmWZVlWNWWIZFlWs5Ehks1WNzNEsizLsizLsqopQyTLspqNDJFstrqZIZJlWZZlWZZVTRkiWZbVbGSIZLPVzQyRLMuyLMuyrGrKEMmyrGYjQySbrW5miGRZlmVZlmVVU4ZIlmU1Gxki2Wx1M0Mky7Isy7Isq5oyRLIsq9nIEMlmq5sZIlmWZVmWZVnVlCGSZVnNRg0FkV5//fX09ttv17huszWWvfnmm2HF64trhkiWZVmWZVlWNWWIZFlWs1FDQKRRo0alXXbZJb322mtxvvvuu6fvf//7DQaVZsyYkdZaa63UtWvXGvdqs2KdcePGpY4dO6allloqXXnllTXKyyZNmpROOOGEtOKKK6bWrVvXuF8ta+gx+0+wmTNnpl133TWNHTu2xr3FMUMky7Isy7Isq5oyRLIsq9mo2hBpwIABaeutt04vv/xy6RpA6Xvf+16DAZEXX3wxrbHGGqlz58417tVmleqMHz/+SyGSbOONN25QiNTQY/afYsBCYNzQoUNr3KuvGSJZlmVZlmVZ1ZQhkmVZzUbVhEgjR45M3/72t9O0adNq3GsOJoh01VVX1bhXtGpBJMKtttxyyxrXm5o1l35WsokTJ6ZvfetbacyYMTXu1ccMkSzLsizLsqxqyhDJsqxmo2pBpDfeeCM8e4444oga95qLCSJdffXVNe4VrVoQ6bLLLkurrLJKjetNzZpLP2uz9u3bpw033DD94he/qHGvrmaIZFmWZVmWZVVThkiWZTUbVQsi4b0DgCEfUn6d8DaAyze+8Y3StWuuuSatu+66Uf7kk09OW221VVpmmWXS6quvnvr16xdlpk+fnvbaa68os9lmm6W+ffuW6g8aNCi8Ylq2bBn5bo4//vjIUbTbbruVPfvyyy+P0LqddtopQppatWoV13/+859XrCOIdMghh0Sfll122bTaaqulww47rCw8D6sEkV566aXUqVOntNFGG8VzseJ45Na/f/+05pprxtjwLoSwcb3SmPXo0SOtsMIKAUJ69uwZz2DM+Bw+fHi6+eab0z777BOgZ+WVV069evUqexbw5Iwzzoh2W7RoEZ8aa4ywue7du0efd9hhh7TJJpuk3r17L7SfGDmlGFvGgs999903xoF7hAWut956MaZnnnlmPJd3oC36x3h36dIlvguMNfP9s5/9LOoOGzYsoORyyy2XjjzyyCiz9NJLp8033zzeNX+32uY5txEjRlT8ftbHDJEsy7Isy7KsasoQybKsZqNqQSRAC4t0ctAU7x111FFlQATr06dPlL/22mvTk08+mZ544omAE1//+tfT1KlTowyJuQEiQKRim9tss0168MEHS+eUyYHQfffdl772ta9F25wDSYrQp1hHEOmss85Kr776asAm4AOAA0CR1y1CpHfeeSdtt912AV8EnE4//fQAH0899VRZ3dwOPPDAih4+lcaM5wFWbrzxxvTII48EEFl77bWj3JAhQ9L9998fY9KmTZt4jwkTJpTqkgycvlCP87vvvrss/9M555yTvvvd78auepyTM4q+fVk/mTPGiuMXXnghffOb3wwYpftnn312POeiiy5KDzzwQPSROlwDhtEP+nnSSSfFtYEDB5bqduvWLa5Nnjw55o8wScaA933ssceizKLMM0YbembxXl3NEMmyLMuyLMuqpgyRLMtqNqoWRNp2221rQA9ZJSAiiPTTn/60dO2mm26Ka7feemvpGot+rt15552la4CS7bffvqy9IhC6+OKLA0gBQ3Qtf1alOrUl1j722GPjeg6tihAJjyjK4LWja88991xcwwMoby+32uBMpTHjeTw3v4YnF8/IPaUEiABgnBNqCAhr27ZtWV28mNi9jOMOHTqEFw8wTPfz8aqtn+xql59vsMEGaY899iidCyIBmHTtjjvuiGvk0NI14A/vm++wJ4iUt//MM89EObzFOF+UecbwcKKtSoCprmaIZFmWZVmWZVVThkiW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pTb79ttv0913350222yztMEGG6Sddtop7nmyiBCmhx56aNpoo41CDg0cODCkgn4j9AVZRv379499+/btm84555wQRtdcc0065ZRT0lZbbZVWWmmltMMOO6THH388ff3113EtOkYxM0r3BEHGCxlNyKPVV189ruHoo49OTzzxROm3pu9UnAZXabqqRMprGUko8TviPfIHGdivX7902mmnpRdffLE0yJdYQiLxmX6m7Q888MC05pprpkUWWSRtuOGG8Xt8+umnm53X4SgXlkjGGGOMMaZSjFaJpAGoptEMHTo0ps3wP/DHHntsDKLJhpl44oljEMZgS4Wf82NaIrWPltqN9//617/SnXfemQ477LC04oorpummmy6tv/76IfYYwIty+5tG8vbN2ygXSUgHxOiUU06ZVllllRA/CAUyhIgnn3wy7bXXXmmyySZLW2+9dbrxxhtLv5dPPvkkDR48OG288cZpoYUWCoH09ttvx3oKZr/66qshnshsWnTRRdOFF14Yx+Y6inIrD35/SBD6n/1322231KtXrzTjjDOmQw45JGSU9tc+lkiNoZpIKphNO5JhxHKmJSKCVl111ZCFNTU1sQ/bqNYR8fzzz8cUUoTRLrvsEr+/qaaaKq2wwgqRCWaJ5GhrWCIZY4wxxphKUTWJpKyFfKBJ1gt1jjTgZnB8/PHHx/Se5557LmohkZHBQAqJRIYEmUoamEs+mfZDu/F0tuKUJjJWTj/99HTUUUeFyGM62/LLL5+uuOKKGBAL9mffooSyVGpEwiZ/gqDah/udzBPaeeqpp46MIuQD/aFtmCp2wQUXxL1P+7Mtx2Lfzz77LF1++eVpm222CdFK3STkkfrzq6++iho6a6yxRlpwwQVDQCCW2JdtlIVUFEBcE78zppA+/PDDUQOJqYyIRKbG3X///U2+W7XEUU5XlUjIIGUV8TmXSkjxZZZZJi2xxBJp2223TY8++miTqWu1tbXxZx+y78gjj4xsJUQeGUlzzjlnyKSTTz45ss+K53U4yoUlkjHGGGOMqRRVkUiSRMpgECruy2CWoO4LUz/IRmKgzCsigzovyKU333yzySPoi1LKtA31h9qPoC8QDAx6yZZAbNTU1MR0q+WWWy716dMnxJ6knY6R92ee5dJdkWDRvV6uTVhOxhcFyxEH1DwiC4jtEDO6x5E5k046aUzpJDNIy9kW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Y8wYgyWSw9F6WCIZY4wxxphKYYlkjBljsERyOFoPSyRjjDHGGFMpLJFMh2loaCguMl2Iurq69L///S/997//jfedzejo/zFdIjGoLy5zODo7LJGMMcYYY0ylqJpEqq+vT3/88Ue8CgahfCZ4n38uLmMQXNx32LBhTZaZtkP70aZqY/qmKBqKkkD9ArQ9giLvAx2ruF93pHgv634WeVtqe6AP6Iv83qedWab91E+80v75cfP2ZxD51FNPpfvuuy999NFHZfslP4+uh+Pq3tA2nJ9zCbatlJwaGV1ZIjFg//DDD+OVtqfNeWUd7z/44IP07rvvxvt//vOfTYSS3ueDf46Vf9Z69uc963W+fF+d09F9wxLJGGOMMcZUiqpIJAahGhxrMK3BsOSQBqXff/99DIyee+659OCDD6Y77rgj3XLLLemee+6JATGDr59++im2t0TqGHn7v/POO+n+++9PN910U7r55pvTbbfdlm699dYmceedd6YHHnggPfPMM9E3//73v6OvJBbyPlT/dmfUBrmcURtpOZ//85//pB9//DEGey+++GJ6+OGHo63ph9tvvz09/vjj6b333ks//PBDiKT8OPDmm2+mG2+8MX4f6ive6/Npp52Wjj322HTmmWem1157rXRu9U8ui3Rs+hRJQV8jn/j96dj8Hl9++eX0+eefp6FDh8Y9oN9gftxK0lUlEoN1iR8+FyUSr0gk+pM/wySRcpH09ttvp2effTb+rLv22mvTJZdcki688MJ0wQUXxHvuCf4M5DiSR/n+uUAqrnN0r7BEMsYYY4wxlaIqEkkD6fwzg2JlsjD45PVf//pXeumll2LQtP3226eePXumaaedNk088cRprrnmSptuumm6+OKLQ3woW8O0n7w/BgwYkHr06JEmn3zyaOdJJpkkTTTRRKX3vNIH888/f9pqq63SueeeG4PjX3/9tcnx6A/1Z3eGe7KYcaflyhzSK3LojTfeSBdddFHaddddU+/evdMss8ySpphiijT11FOn1VdfPZ1xxhkxEGQfiSRxzDHHRF+1FBNOOGFaZJFF0vHHH59eeeWVJlKL90ggjim4buQQAmO77bZL88wzT5pqqqniPuAeWGqppVKfPn1CZnzyySel7ySZWPzOlaCrSqRiBhKSSEKJ5e+//36813Jtq/fs8/TTT6dLL7007bLLLmnFFVdMc845Z/wuib/85S9pyy23TGeddVZ64YUXIqOJY3388cclWZBnIClLqXidju4RlkjGGGOMMaZSjDaJlGcxAP/gJRtm5513jsHSnnvumQYNGpTOP//8dM4556Tddtstrb322mmVVVaJgRbZEL/99lvVp9OMDUja0X5klpx66qlpttlmi6B9aferrroqXXnllSHtkBUIvOWWWy6tv/76MZB96623SsfJM5Hy7JbuiESNMnNyUapg/XfffRfZXTvttFPaZJNNQtogjLi3kagHHHBA2mijjdIKK6yQ/va3v6VXX301joOwkfw54ogjQvLwuzjyyCOjv4grrrgijsMrmWX0MeeT9NH1qe/g999/j+04DkJr9913T6effnoIrssuuyzkIde06qqrpq233jp+l2RRcS25mKo0XV0i5cs0kCeri77ld0SbkhUm+VNbWxtC6LHHHksHH3xwWnPNNeM3uO+++8bv8KSTTor33AtIvG222SZdfvnl6fnnnw+JpKltOncuD4rX4+g+YYlkjDHGGGMqRdUkUj7A5LOyKggGxgy0GGSR/bDWWmvFIJXpHWQnEVdffXXaYostIiuCwSwZSwxiu3vmS0egL2hzpqXRD2RAkI204IILhqxjECLhgWhi2tR5552XlllmmRBN2267bRoyZEjpOBIREiTVykrpquSyiClreY0jLUcAIOOmm266yDo57rjjQib8/PPPMV3zySefTHvttVdkgm2++ebpuuuuK2UjcUzkDcKH/jjkkEPSE088Ufqd6fcloZf3R/5b1O+PQDKRgTT33HOn9dZbLw0cODDEiKatMc0UyYtMXGihhdIOO+wQg9RffvmlyXerNF1RIjFQZ4qZMop4pe00bY1pgfzZtdJKK4WA4886JBL7fvrppyGVmJbI+llnnTVtuOGGMX2NwT+/PfZHJi2wwAJp0UUXTQcddFB66KGHmgkjSSPOWbxGR/cKSyRjjDHGGFMpqiKRijDYVEYEA2wGzfxPPANp/rf9hBNOKGU5aBDMQIvlU045ZUgMarUwoHQmUvuh3fPsoZqampB38847b2TGMCCWbKB/mLpGf9DuM888c2TOUEdJx8rlhTORmhZ8V9vonldQG+eUU06JqUrULWLAh7BTphGC7+9//3tMSeM3QVZKMaOJ3wvShwwWpB5ySeeTcCJa6gv9ttiGwSa1k/h9HXbYYZH5xDUo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e8VVV12Vttlmm9ju8MMPb7a+M6Ij38fRPK6//vq0zjrrpJqammbrOiOaSSQGZoihP/74I/6X/5tvvmkWX3/9dfryyy/TZ599lr744ot473A4HNWO9957Lz333HMOh6NMPP/88+mll16K12eeeSY99dRT6ZFHHmnyl74xxhjTnaiUROLv2QUXXDCddtpppWUvvPBCmmGGGdLWW2/dbPvOiquvvjpNOumk6Ywzzmi2rqU46KCD0pRTTpkeeuih0rJ+/fq1KpEI/k1RSYnUke/jKB+33nprmmOOOdJdd93VbN2oRlmJRIbRd999l4466qi03nrrhcVae+21S7H++uunDTbYoNlyh8PhqGasuuqqaYUVVnA4HGVixRVXTCuttFK88nn55ZdPyy23XJO/9I0xxpjuRCUk0vvvv5969epV0YyjSockEjKsuC6PzpRIDzzwQHiF4vKuFmPKdZaLAQMGhMhEaBbXjUo0k0hkISGR+F9+JNH444+fxhtvvDTuuOPGDUNMOOGEaeKJJ451LHc4HI7REfozyeFwtBz8VvT3OH9vG2OMMd2VSkikY489Nv6ebU3AdOWQRCKTubguj86USJtuumkkrBSXd7UYU66zXPCUXqZUbrXVVs3WjUo0k0h66hpT1viffv7BOcEEE8SrhBKfEUn67HA4HA6Ho2sGf2dPNNFE8fc2YYwxxnRXKiGR5pprrrTEEks0Wfb222+nPfbYI6aNkQ3MMh5usdZaa4WEWX311UNMkCXC39HUJFL9moEDB6bpppsuttt2223T/fffH8uZfrbjjjvGGJwpaXzecsstYzvqHOncyKx11103romYd9550wUXXBDrLrvssshMZp+bbrqptI8kEtfMFCiuafbZZ0+HHnpo6eEcREsS6fzzz0+LLLJI6tmzZ5p77rnTdtttF22Qb6OgHAVZW/ybZOqpp069e/eO85b7PhQpp834jzDabPPNN0+zzDJLTHlbfPHFY8rWySefnJZZZplYNuuss8a15Oe777770sorr5zmn3/+CGYyPPbYY6X1t9xyS1pyySXjGFz/QgstlB5//PEWr5N97rzzzvi+tC/9O88885TqOI3qNe+6666RsMPxOc7000+fJplkksguf/jhh0vbjayf8+A7cLxXX3212bqORjOJpIK1v/32WzTejTfeGEFxJuKGG25o8t7hcDgcDkfXDf2dTVx55ZVN/tI3xhhjuhOdLZGoIYT02GGHHZqtIxZYYIGSRFIggVZZZZUQEYgj5AP/6YNA0TbIG4573nnnNdn30ksvTWuuuWbpM7UPixKJY2+yySZN9jnmmGNKnxEWLUkk/q3w7rvvppdffjntv//+sYxXbVdOIl1xxRWxjKlTfFYtqNayX8iQKWb4lPs+BFJr2WWXTYMHDw4pNGjQoGhHhBXf5+67745rn3POOaNoOE+mZT8yq6aaaqq00UYbxTIyc5Ax7Md7xB6C6NRTTy2dC1F0zz33jPQ6aVNEnj7vvPPO8Z92r7zyyihfM4HIWnjhheP6uc477rgjpN5ss80W/cM2rfWzAmFFm9JPxXUdjWYS6ffffw+BRPBekS/T++I2DofD4XA4ulbkf2cTxhhjTHelsyWSBEpReihakkhkFOXLyDpZdNFFS5+ROGSfLL300k22W2ONNeIpafpcTrrMOOOMaaeddip9Rk5wPH0emUQqFtamWDgSRtlI5SQS3w8JguzQMp7iRvYL9aLy4+VRTs6U+z4EQobspnwZ2VtcX77s4IMPjv1VA4jj8DmXQkg7lpEowwNHeJ9nAr355pshl/S53HXSTvn0xTPPPDOOg+zRso5eM4FEQkDl25111lmxnYq3t9bPCuRSsc9GNZpJpCafjDHGGGOMMcaYsYDOlkgSEtRFKq4j2iqRmE6FOMiXMZUtFyA8ZZXpWHnGSjnpsvHGG8dUqr/+9a8hSvLtifZIJF3DE088EZ/LSSQk02KLLdZkP4mRfNpYMcrJmXLfhygnZMjEYRpZvqz4PSjPw+d8ah1Z2ixj2iDii+lkU0wxRWRcDRkypMnxiHLXWYyzzz47jslUNS3r6DUT5SQSWWtst9tuu8Xn1vpZQbYT++25557N1nU0LJGMMcYYY4wxxoz1dLZEYhoUA/Tjjjuu2TpiVCTSgw8+GMfWtDAkx/HHH99km3LShUwa6uowTYt1SIv8Me/tkUiIB5ZzLXwuJ5H4PpwL6aFgKhZTr8j0yY+XRzk5U+77EB0VMrQ9oiW/NuoScW1nnHFGbPPoo4/GdVD7iH05LtcxsutkKuIWW2yRVltttXhqPTWJKi2RXn/99dgOecTn1vpZIWmWZy2NalgiGWOMMcYYY4wZ6+lsiXTOOefEAP3II49sto4YFYlEUBCaaW1MdaJwMkWb8/UtSReCqWQXXnhh1CeiWLaWt0cikeXC8hdffDE+l5NISIzid2xLlJMzLX2fjgoZPW0+36aleO2112J/ts/rORWvkzagT8gIUvZPNTKRyAZju+K901I/K5j+yH777LNPs3UdDUskY4wxxhhjjDFjPZ0tka699toYoOfFp/MYVYmkmks8yatcJkk56XL55Zc32aZ///6xjer8tEciITzmm2++0udyEmm55ZYLgZHXRGpL8MSySkskTat74IEHmmynePbZZ9O9997bZBmFy8lW0ufidfKQEo7Jq5ZVQyKp36iNxOfW+rm4X7mi2x0NSyRjjDHGGGOMMWM9nS2ReGw606U23XTTZuuIUZVIZLqQgcQ5ytXrKSddevToEbJHn7feeuso3K3PbZVIJ554Ypw3LzpdTiKRBcMysnd4mhjLqEFEDR9tUy4oMI1Qeeutt0qPny/3fYiOChnqSE022WRRswmRRHuSucO1Ib2oN0Wxcj3x7L333ou6U6o7VO46Nc2Q6+EzdZ94Ol8lJRJT2Xr27Bn3E9fIstb6uXh86iYV13U0LJGMMcYYY4wxxoz1dLZEIqiHg3jIlz388MNpl112SVNOOWVk6ey+++4hG/r06RNihuweCjuzLcJk+umnj2lh5abFDRgwIB5LX1xOltLmm28egoAaRGRDIUl4nD2iguwl5NRaa61VKnBNTSUyh9gHeaInfSFTmLrGOp4gxuPke/funS655JLS+ZgWhShiX6TMYYcdVlpHJg6SgyeyTTvttJHJc8oppzS75jyYCsh35slu1BYis6b4fRA3tNl4440X3wl5hfzZb7/90kwzzRQFsanbxHS7QYMGxXVJaEnKUCcIecO2k08+ecgXjomMYRtkDXKG796rV6/I+MoLcRevkzbed999YxmCiswlFVin7W6//fZRvmYkEvfE6quvnpZffvk011xzpc0226yJNBpZP+dBDSWuvZihNCphiWSMMcYYY4wxZqynEhJJmT0tTZlyONobSKQVV1yx2fL2BhIOkdnSdMuOhiWSMcYYY4wxxpixnkpIJIKaOWSNFJc7HB2J4nS2jgYZU2RedWYWEmGJZIwxxhhjjDFmrKdSEonpTzwJjFo67S0w7XAUozMkElPlmJ6XT4HrrLBEMsYYY4wxxhgz1lMpiUR8+OGH6aSTTopCxsV1Dkdbg6lnU001VZpuuunSzjvvnB59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41XT1DiG2pjjsC39q6ev5cdXX0lMcT1sL8mEONp8883TXHPNFX0088wzp6WWWioNGDAgffnll6X7g304rqZFSlqpwDrbFSUjwfkQh8cde2zq2bNnmnHGGSOmnXbatOOOO8Z+o9IflkjGGGOMMcYYY8ZqKiWRFAzchwwZkk477bR08MEHp9122y1Ey0477ZR23nnndMABB0S2jgQFYuKxxx4LcbD77ruXtmVfslKee+650vQqZaZIQEnSKEuIZZJOZJogcxZYYIE03njjpXHHHTdtvPHGkZGE6JIYeuaZZ9LZZ5+ddthhhzgv75VVkwsYzsln3it76emnn05XXHFFWmONNdI000yTxhlnnJAVfMcXX3yxtK8Eko5XbLNKhASPxJGWaT3XTnZO37590y677BLtTtBfe+21V3yvF154oZRFhKQ79dRT0z777FPq00MOOSSde+650X+cg/Opb/J+0nnVrpI+ZAhxzCWXXDLEzqSTTpp69+6djj/++JIQUvYX5+G89NHf/va39OSTTzaRXPpe+fdFVpF5huxDVs0///xpsskmS+OPP37acsstS2Kto31iiWSMMcYYY4wxZqymUhKJ40jy3HfffWnfffeNTKCJJpooBA5Btg6ZJgMHDixljCB0mBJGltCss84awmfqqadOK6ywQoiDRx55JLJZOIfEhDJ7lOXCMokaHRdBxHGXXXbZkDscd6ONNgqJRBYR2yCw7r777rTddtuFWOAat91221KWC8dHYChDin1Yh3TgMzKJ4s3IDbJp2H+hhRZK++23X3r11Vdje7WLpFe1RBLnJDuI95JfeV8z5Q6BQ/vQ3uqjKaaYIs0777zpuOOOC9GkjC9kzB577BEiRtvRl4cddli64447YjtlGOXZQJxLGWV8b9qU7CFleHGvbLjhhmm22WYLicQxkUiSglw7/UXmEAKIfkQA3X777XEezqnsJLWr2lgZUzU1Nemoo45KK664YppkkklKx9A15RKqPWGJZIwxxhgzFtHwxQ/FRcYY0+2plERSRgcZJgiFJ554Igbq0003XZpggglCJs0333zp6KOPTvfff39J9Kig8jnnnJM22GCDNOGEE6ZVVlklnXjiiZFtgkBACnAOtlONHgmAPJNE7/WdyDJCHEgikYmEmGI6G8ekXg4ZS0gkSRTeS4AQOrbeS1Yo4wlZhDDr0aNH7M8r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LcvybL8lx6Ns27KCSKVSqVQqlUqlrU4c4J///OcNJEXe//KXv5w4yL/61a8mjnLa33DDDcNPf/rT9pr3N954Y9su7UvzUw8HelhgTH/yk59Mxrq3LPf6ox/9qL3/xS9+MWvOAhMs64FDaf0yVu6F3AOub+P84x//eNb177N1c0Efc2de+vnz+Yc//GFbdtlllw3vete7htNOO2245JJLZsEh2wbw9lAo96d92jcQNb4uXAP9vbsUmrnm+lkQ6fq/OWviCI+d46UyECggqIdFPlseOPTVr351Fkj6yle+0l6vvPLKBvm0s8x2y5cvn7QB/770pS9NzHx+/vOfb+az7S6//PJ2LNnefsfHWVY2lxVEKpVKpVKpVCptdQoo4pjGxpEVef+DH/ygOUdvf/vbh+OPP3448MADh8c//vHDfvvtNxx66KHDK17xiuEjH/nI8P3vf38CnJYyCmJ71cc+9rHhkEMOGZ7whCcMj33sY2fZ4x73uGbWmYMTTzxxOPfcc5ujCjL0MGoMOErrl7ECY6655pphampqOOOMM4bjjjtuOPjgg9vYP+lJTxqOPvro4eyzzx6+8IUvNLjaQzrbf/SjHx323nvvYZ999mk2nr8999yz2bHHHjtcfPHFc953AUq5L+3nM5/5zPDqV796eMYznjEccMABbf71/9SnPrXdh5deeunwne98px3/UoHDMUS69pTzJo7w2DneGixRQQE7YBHgY1lA09VXX93agkzWJSrpqquuanPwtre9bXjpS186PP3pTx/22muv4RGPeMTwyEc+cth///2Hk046aXjPe94zfO5zn2t9BFqNj6OsbF1WEKlUKpVKpVKptFUpzir1IKmHP145sFJtOLkvfOELh8MOO6w50IEaHKcHPOD/t3cmcFfPaf9/nmeesa/zGLswY4nKLoqUFjOy7yFlGSJKaJGQFgppoUKhlJIplRIhrXRLyb7MDBqyC+NvbKPb99/7quv4nt85d/c5932rc+4+79frep1zfts59+93fofvu+u6vvXD0UcfHdq3bx+ef/55y4bgWJIWuZMUPTxyDhER5557bthll13CRhttFH7/+9+HBg0apMQEkoIBbMOGDcORRx5pYm/s2LE24M2WHSNyA1mDWLjvvvtM8rRs2dKuA4+c9yZNmoTGjRubxLv77rtNPLi48/N+zz33hPXWWy/suuuu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;clipPath=inset(0.4% 57.33% 56.4% 0%);" parent="1" vertex="1"> + <mxGeometry x="122" y="82" width="279.7" height="118" as="geometry" /> + </mxCell> + <mxCell id="795Xv0Ka93fOG331V9Xn-20" value="" style="rounded=1;whiteSpace=wrap;html=1;arcSize=4;" parent="1" vertex="1"> + <mxGeometry x="621" y="79.5" width="284" height="151" as="geometry" /> + </mxCell> + <mxCell id="795Xv0Ka93fOG331V9Xn-2" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAABJEAAAHoCAYAAAD5W34cAACAAElEQVR4XuydB5iV1bWGTTP2buyxRGNFNHYMEcUGoiiKgg0RFOzYqWIHLIiKPYiKEkWxoCioFCsR0RhbTJPYk1yvN7m5aQbcl3fBd7LPP2eQGc4MM+b7nmc95y9773//ex+G2e+stfZSybIsy7Isy7Isy7Isy7K+REsVL1iWZTVV/eMf/7DZbHU0y7Isy7Isy6qWDJEsy2o2YkH8y1/+0mazLaL99a9/Lf4zsizLsizLsqx6yxDJsqxmI0Mkm61uZohkWZZlWZZlVVOGSJZlNRsZItlsdTNDJMuyLMuyLKuaMkSyLKvZyBDJZqubGSJZlmVZlmVZ1ZQhkmVZzUaGSDZb3cwQybIsy7Isy6qmDJEsy2o2MkSy2epmhkiWZVmWZVlWNWWIZFlWs5Ehks1WNzNEsizLsizLsqopQyTLspqNDJFstrqZIZJlWZZlWZZVTRkiWZbVbGSIZLPVzQyRLMuyLMuyrGrKEMmyrGYjQySbrW5miGRZlmVZlmVVU4ZIlmU1Gxki2Wx1M0Mky7Isy7Isq5oyRLIsq9nIEMlmq5sZIlmWZVmWZVnVlCGSZVnNRg0FkV5//fX09ttv17huszWWvfnmm2HF64trhkiWZVmWZVlWNWWIZFlWs1FDQKRRo0alXXbZJb322mtxvvvuu6fvf//7DQaVZsyYkdZaa63UtWvXGvdqs2KdcePGpY4dO6allloqXXnllTXKyyZNmpROOOGEtOKKK6bWrVvXuF8ta+gx+0+wmTNnpl133TWNHTu2xr3FMUMky7Isy7Isq5oyRLIsq9mo2hBpwIABaeutt04vv/xy6RpA6Xvf+16DAZEXX3wxrbHGGqlz58417tVmleqMHz/+SyGSbOONN25QiNTQY/afYsBCYNzQoUNr3KuvGSJZlmVZlmVZ1ZQhkmVZzUbVhEgjR45M3/72t9O0adNq3GsOJoh01VVX1bhXtGpBJMKtttxyyxrXm5o1l35WsokTJ6ZvfetbacyYMTXu1ccMkSzLsizLsqxqyhDJsqxmo2pBpDfeeCM8e4444oga95qLCSJdffXVNe4VrVoQ6bLLLkurrLJKjetNzZpLP2uz9u3bpw033DD94he/qHGvrmaIZFmWZVmWZVVThkiWZTUbVQsi4b0DgCEfUn6d8DaAyze+8Y3StWuuuSatu+66Uf7kk09OW221VVpmmWXS6quvnvr16xdlpk+fnvbaa68os9lmm6W+ffuW6g8aNCi8Ylq2bBn5bo4//vjIUbTbbruVPfvyyy+P0LqddtopQppatWoV13/+859XrCOIdMghh0Sfll122bTaaqulww47rCw8D6sEkV566aXUqVOntNFGG8VzseJ45Na/f/+05pprxtjwLoSwcb3SmPXo0SOtsMIKAUJ69uwZz2DM+Bw+fHi6+eab0z777BOgZ+WVV069evUqexbw5Iwzzoh2W7RoEZ8aa4ywue7du0efd9hhh7TJJpuk3r17L7SfGDmlGFvGgs999903xoF7hAWut956MaZnnnlmPJd3oC36x3h36dIlvguMNfP9s5/9LOoOGzYsoORyyy2XjjzyyCiz9NJLp8033zzeNX+32uY5txEjRlT8ftbHDJEsy7Isy7KsasoQybKsZqNqQSRAC4t0ctAU7x111FFlQATr06dPlL/22mvTk08+mZ544omAE1//+tfT1KlTowyJuQEiQKRim9tss0168MEHS+eUyYHQfffdl772ta9F25wDSYrQp1hHEOmss85Kr776asAm4AOAA0CR1y1CpHfeeSdtt912AV8EnE4//fQAH0899VRZ3dwOPPDAih4+lcaM5wFWbrzxxvTII48EEFl77bWj3JAhQ9L9998fY9KmTZt4jwkTJpTqkgycvlCP87vvvrss/9M555yTvvvd78auepyTM4q+fVk/mTPGiuMXXnghffOb3wwYpftnn312POeiiy5KDzzwQPSROlwDhtEP+nnSSSfFtYEDB5bqduvWLa5Nnjw55o8wScaA933ssceizKLMM0YbembxXl3NEMmyLMuyLMuqpgyRLMtqNqoWRNp2221rQA9ZJSAiiPTTn/60dO2mm26Ka7feemvpGot+rt15552la4CS7bffvqy9IhC6+OKLA0gBQ3Qtf1alOrUl1j722GPjeg6tihAJjyjK4LWja88991xcwwMoby+32uBMpTHjeTw3v4YnF8/IPaUEiABgnBNqCAhr27ZtWV28mNi9jOMOHTqEFw8wTPfz8aqtn+xql59vsMEGaY899iidCyIBmHTtjjvuiGvk0NI14A/vm++wJ4iUt//MM89EObzFOF+UecbwcKKtSoCprmaIZFmWZVmWZVVThkiW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pTb79ttv0913350222yztMEGG6Sddtop7nmyiBCmhx56aNpoo41CDg0cODCkgn4j9AVZRv379499+/btm84555wQRtdcc0065ZRT0lZbbZVWWmmltMMOO6THH388ff3113EtOkYxM0r3BEHGCxlNyKPVV189ruHoo49OTzzxROm3pu9UnAZXabqqRMprGUko8TviPfIHGdivX7902mmnpRdffLE0yJdYQiLxmX6m7Q888MC05pprpkUWWSRtuOGG8Xt8+umnm53X4SgXlkjGGGOMMaZSjFaJpAGoptEMHTo0ps3wP/DHHntsDKLJhpl44oljEMZgS4Wf82NaIrWPltqN9//617/SnXfemQ477LC04oorpummmy6tv/76IfYYwIty+5tG8vbN2ygXSUgHxOiUU06ZVllllRA/CAUyhIgnn3wy7bXXXmmyySZLW2+9dbrxxhtLv5dPPvkkDR48OG288cZpoYUWCoH09ttvx3oKZr/66qshnshsWnTRRdOFF14Yx+Y6inIrD35/SBD6n/1322231KtXrzTjjDOmQw45JGSU9tc+lkiNoZpIKphNO5JhxHKmJSKCVl111ZCFNTU1sQ/bqNYR8fzzz8cUUoTRLrvsEr+/qaaaKq2wwgqRCWaJ5GhrWCIZY4wxxphKUTWJpKyFfKBJ1gt1jjTgZnB8/PHHx/Se5557LmohkZHBQAqJRIYEmUoamEs+mfZDu/F0tuKUJjJWTj/99HTUUUeFyGM62/LLL5+uuOKKGBAL9mffooSyVGpEwiZ/gqDah/udzBPaeeqpp46MIuQD/aFtmCp2wQUXxL1P+7Mtx2Lfzz77LF1++eVpm222CdFK3STkkfrzq6++iho6a6yxRlpwwQVDQCCW2JdtlIVUFEBcE78zppA+/PDDUQOJqYyIRKbG3X///U2+W7XEUU5XlUjIIGUV8TmXSkjxZZZZJi2xxBJp2223TY8++miTqWu1tbXxZx+y78gjj4xsJUQeGUlzzjlnyKSTTz45ss+K53U4yoUlkjHGGGOMqRRVkUiSRMpgECruy2CWoO4LUz/IRmKgzCsigzovyKU333yzySPoi1LKtA31h9qPoC8QDAx6yZZAbNTU1MR0q+WWWy716dMnxJ6knY6R92ee5dJdkWDRvV6uTVhOxhcFyxEH1DwiC4jtEDO6x5E5k046aUzpJDNIy9kW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Y8wYgyWSw9F6WCIZY4wxxphKYYlkjBljsERyOFoPSyRjjDHGGFMpLJFMh2loaCguMl2Iurq69L///S/997//jfedzejo/zFdIjGoLy5zODo7LJGMMcYYY0ylqJpEqq+vT3/88Ue8CgahfCZ4n38uLmMQXNx32LBhTZaZtkP70aZqY/qmKBqKkkD9ArQ9giLvAx2ruF93pHgv634WeVtqe6AP6Iv83qedWab91E+80v75cfP2ZxD51FNPpfvuuy999NFHZfslP4+uh+Pq3tA2nJ9zCbatlJwaGV1ZIjFg//DDD+OVtqfNeWUd7z/44IP07rvvxvt//vOfTYSS3ueDf46Vf9Z69uc963W+fF+d09F9wxLJGGOMMcZUiqpIJAahGhxrMK3BsOSQBqXff/99DIyee+659OCDD6Y77rgj3XLLLemee+6JATGDr59++im2t0TqGHn7v/POO+n+++9PN910U7r55pvTbbfdlm699dYmceedd6YHHnggPfPMM9E3//73v6OvJBbyPlT/dmfUBrmcURtpOZ//85//pB9//DEGey+++GJ6+OGHo63ph9tvvz09/vjj6b333ks//PBDiKT8OPDmm2+mG2+8MX4f6ive6/Npp52Wjj322HTmmWem1157rXRu9U8ui3Rs+hRJQV8jn/j96dj8Hl9++eX0+eefp6FDh8Y9oN9gftxK0lUlEoN1iR8+FyUSr0gk+pM/wySRcpH09ttvp2effTb+rLv22mvTJZdcki688MJ0wQUXxHvuCf4M5DiSR/n+uUAqrnN0r7BEMsYYY4wxlaIqEkkD6fwzg2JlsjD45PVf//pXeumll2LQtP3226eePXumaaedNk088cRprrnmSptuumm6+OKLQ3woW8O0n7w/BgwYkHr06JEmn3zyaOdJJpkkTTTRRKX3vNIH888/f9pqq63SueeeG4PjX3/9tcnx6A/1Z3eGe7KYcaflyhzSK3LojTfeSBdddFHaddddU+/evdMss8ySpphiijT11FOn1VdfPZ1xxhkxEGQfiSRxzDHHRF+1FBNOOGFaZJFF0vHHH59eeeWVJlKL90ggjim4buQQAmO77bZL88wzT5pqqqniPuAeWGqppVKfPn1CZnzyySel7ySZWPzOlaCrSqRiBhKSSEKJ5e+//36813Jtq/fs8/TTT6dLL7007bLLLmnFFVdMc845Z/wuib/85S9pyy23TGeddVZ64YUXIqOJY3388cclWZBnIClLqXidju4RlkjGGGOMMaZSjDaJlGcxAP/gJRtm5513jsHSnnvumQYNGpTOP//8dM4556Tddtstrb322mmVVVaJgRbZEL/99lvVp9OMDUja0X5klpx66qlpttlmi6B9aferrroqXXnllSHtkBUIvOWWWy6tv/76MZB96623SsfJM5Hy7JbuiESNMnNyUapg/XfffRfZXTvttFPaZJNNQtogjLi3kagHHHBA2mijjdIKK6yQ/va3v6VXX301joOwkfw54ogjQvLwuzjyyCOjv4grrrgijsMrmWX0MeeT9NH1qe/g999/j+04DkJr9913T6effnoIrssuuyzkIde06qqrpq233jp+l2RRcS25mKo0XV0i5cs0kCeri77ld0SbkhUm+VNbWxtC6LHHHksHH3xwWnPNNeM3uO+++8bv8KSTTor33AtIvG222SZdfvnl6fnnnw+JpKltOncuD4rX4+g+YYlkjDHGGGMqRdUkUj7A5LOyKggGxgy0GGSR/bDWWmvFIJXpHWQnEVdffXXaYostIiuCwSwZSwxiu3vmS0egL2hzpqXRD2RAkI204IILhqxjECLhgWhi2tR5552XlllmmRBN2267bRoyZEjpOBIREiTVykrpquSyiClreY0jLUcAIOOmm266yDo57rjjQib8/PPPMV3zySefTHvttVdkgm2++ebpuuuuK2UjcUzkDcKH/jjkkEPSE088Ufqd6fcloZf3R/5b1O+PQDKRgTT33HOn9dZbLw0cODDEiKatMc0UyYtMXGihhdIOO+wQg9RffvmlyXerNF1RIjFQZ4qZMop4pe00bY1pgfzZtdJKK4WA4886JBL7fvrppyGVmJbI+llnnTVtuOGGMX2NwT+/PfZHJi2wwAJp0UUXTQcddFB66KGHmgkjSSPOWbxGR/cKSyRjjDHGGFMpqiKRijDYVEYEA2wGzfxPPANp/rf9hBNOKGU5aBDMQIvlU045ZUgMarUwoHQmUvuh3fPsoZqampB38847b2TGMCCWbKB/mLpGf9DuM888c2TOUEdJx8rlhTORmhZ8V9vonldQG+eUU06JqUrULWLAh7BTphGC7+9//3tMSeM3QVZKMaOJ3wvShwwWpB5ySeeTcCJa6gv9ttiGwSa1k/h9HXbYYZH5xDUo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e8VVV12Vttlmm9ju8MMPb7a+M6Ij38fRPK6//vq0zjrrpJqammbrOiOaSSQGZoihP/74I/6X/5tvvmkWX3/9dfryyy/TZ599lr744ot473A4HNWO9957Lz333HMOh6NMPP/88+mll16K12eeeSY99dRT6ZFHHmnyl74xxhjTnaiUROLv2QUXXDCddtpppWUvvPBCmmGGGdLWW2/dbPvOiquvvjpNOumk6Ywzzmi2rqU46KCD0pRTTpkeeuih0rJ+/fq1KpEI/k1RSYnUke/jKB+33nprmmOOOdJdd93VbN2oRlmJRIbRd999l4466qi03nrrhcVae+21S7H++uunDTbYoNlyh8PhqGasuuqqaYUVVnA4HGVixRVXTCuttFK88nn55ZdPyy23XJO/9I0xxpjuRCUk0vvvv5969epV0YyjSockEjKsuC6PzpRIDzzwQHiF4vKuFmPKdZaLAQMGhMhEaBbXjUo0k0hkISGR+F9+JNH444+fxhtvvDTuuOPGDUNMOOGEaeKJJ451LHc4HI7REfozyeFwtBz8VvT3OH9vG2OMMd2VSkikY489Nv6ebU3AdOWQRCKTubguj86USJtuumkkrBSXd7UYU66zXPCUXqZUbrXVVs3WjUo0k0h66hpT1viffv7BOcEEE8SrhBKfEUn67HA4HA6Ho2sGf2dPNNFE8fc2YYwxxnRXKiGR5pprrrTEEks0Wfb222+nPfbYI6aNkQ3MMh5usdZaa4WEWX311UNMkCXC39HUJFL9moEDB6bpppsuttt2223T/fffH8uZfrbjjjvGGJwpaXzecsstYzvqHOncyKx11103romYd9550wUXXBDrLrvssshMZp+bbrqptI8kEtfMFCiuafbZZ0+HHnpo6eEcREsS6fzzz0+LLLJI6tmzZ5p77rnTdtttF22Qb6OgHAVZW/ybZOqpp069e/eO85b7PhQpp834jzDabPPNN0+zzDJLTHlbfPHFY8rWySefnJZZZplYNuuss8a15Oe777770sorr5zmn3/+CGYyPPbYY6X1t9xyS1pyySXjGFz/QgstlB5//PEWr5N97rzzzvi+tC/9O88885TqOI3qNe+6666RsMPxOc7000+fJplkksguf/jhh0vbjayf8+A7cLxXX3212bqORjOJpIK1v/32WzTejTfeGEFxJuKGG25o8t7hcDgcDkfXDf2dTVx55ZVN/tI3xhhjuhOdLZGoIYT02GGHHZqtIxZYYIGSRFIggVZZZZUQEYgj5AP/6YNA0TbIG4573nnnNdn30ksvTWuuuWbpM7UPixKJY2+yySZN9jnmmGNKnxEWLUkk/q3w7rvvppdffjntv//+sYxXbVdOIl1xxRWxjKlTfFYtqNayX8iQKWb4lPs+BFJr2WWXTYMHDw4pNGjQoGhHhBXf5+67745rn3POOaNoOE+mZT8yq6aaaqq00UYbxTIyc5Ax7Md7xB6C6NRTTy2dC1F0zz33jPQ6aVNEnj7vvPPO8Z92r7zyyihfM4HIWnjhheP6uc477rgjpN5ss80W/cM2rfWzAmFFm9JPxXUdjWYS6ffffw+BRPBekS/T++I2DofD4XA4ulbkf2cTxhhjTHelsyWSBEpReihakkhkFOXLyDpZdNFFS5+ROGSfLL300k22W2ONNeIpafpcTrrMOOOMaaeddip9Rk5wPH0emUQqFtamWDgSRtlI5SQS3w8JguzQMp7iRvYL9aLy4+VRTs6U+z4EQobspnwZ2VtcX77s4IMPjv1VA4jj8DmXQkg7lpEowwNHeJ9nAr355pshl/S53HXSTvn0xTPPPDOOg+zRso5eM4FEQkDl25111lmxnYq3t9bPCuRSsc9GNZpJpCafjDHGGGOMMcaYsYDOlkgSEtRFKq4j2iqRmE6FOMiXMZUtFyA8ZZXpWHnGSjnpsvHGG8dUqr/+9a8hSvLtifZIJF3DE088EZ/LSSQk02KLLdZkP4mRfNpYMcrJmXLfhygnZMjEYRpZvqz4PSjPw+d8ah1Z2ixj2iDii+lkU0wxRWRcDRkypMnxiHLXWYyzzz47jslUNS3r6DUT5SQSWWtst9tuu8Xn1vpZQbYT++25557N1nU0LJGMMcYYY4wxxoz1dLZEYhoUA/Tjjjuu2TpiVCTSgw8+GMfWtDAkx/HHH99km3LShUwa6uowTYt1SIv8Me/tkUiIB5ZzLXwuJ5H4PpwL6aFgKhZTr8j0yY+XRzk5U+77EB0VMrQ9oiW/NuoScW1nnHFGbPPoo4/GdVD7iH05LtcxsutkKuIWW2yRVltttXhqPTWJKi2RXn/99dgOecTn1vpZIWmWZy2NalgiGWOMMcYYY4wZ6+lsiXTOOefEAP3II49sto4YFYlEUBCaaW1MdaJwMkWb8/UtSReCqWQXXnhh1CeiWLaWt0cikeXC8hdffDE+l5NISIzid2xLlJMzLX2fjgoZPW0+36aleO2112J/ts/rORWvkzagT8gIUvZPNTKRyAZju+K901I/K5j+yH777LNPs3UdDUskY4wxxhhjjDFjPZ0tka699toYoOfFp/MYVYmkmks8yatcJkk56XL55Zc32aZ///6xjer8tEciITzmm2++0udyEmm55ZYLgZHXRGpL8MSySkskTat74IEHmmynePbZZ9O9997bZBmFy8lW0ufidfKQEo7Jq5ZVQyKp36iNxOfW+rm4X7mi2x0NSyRjjDHGGGOMMWM9nS2ReGw606U23XTTZuuIUZVIZLqQgcQ5ytXrKSddevToEbJHn7feeuso3K3PbZVIJ554Ypw3LzpdTiKRBcMysnd4mhjLqEFEDR9tUy4oMI1Qeeutt0qPny/3fYiOChnqSE022WRRswmRRHuSucO1Ib2oN0Wxcj3x7L333ou6U6o7VO46Nc2Q6+EzdZ94Ol8lJRJT2Xr27Bn3E9fIstb6uXh86iYV13U0LJGMMcYYY4wxxoz1dLZEIqiHg3jIlz388MNpl112SVNOOWVk6ey+++4hG/r06RNihuweCjuzLcJk+umnj2lh5abFDRgwIB5LX1xOltLmm28egoAaRGRDIUl4nD2iguwl5NRaa61VKnBNTSUyh9gHeaInfSFTmLrGOp4gxuPke/funS655JLS+ZgWhShiX6TMYYcdVlpHJg6SgyeyTTvttJHJc8oppzS75jyYCsh35slu1BYis6b4fRA3tNl4440X3wl5hfzZb7/90kwzzRQFsanbxHS7QYMGxXVJaEnKUCcIecO2k08+ecgXjomMYRtkDXKG796rV6/I+MoLcRevkzbed999YxmCiswlFVin7W6//fZRvmYkEvfE6quvnpZffvk011xzpc0226yJNBpZP+dBDSWuvZihNCphiWSMMcYYY4wxZqynEhJJmT0tTZlyONobSKQVV1yx2fL2BhIOkdnSdMuOhiWSMcYYY4wxxpixnkpIJIKaOWSNFJc7HB2J4nS2jgYZU2RedWYWEmGJZIwxxhhjjDFmrKdSEonpTzwJjFo67S0w7XAUozMkElPlmJ6XT4HrrLBEMsYYY4wxxhgz1lMpiUR8+OGH6aSTTopCxsV1Dkdbg6lnU001VZpuuunSzjvvnB59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41XT1DiG2pjjsC39q6ev5cdXX0lMcT1sL8mEONp8883TXHPNFX0088wzp6WWWioNGDAgffnll6X7g304rqZFSlqpwDrbFSUjwfkQh8cde2zq2bNnmnHGGSOmnXbatOOOO8Z+o9IflkjGGGOMMcYYY8ZqKiWRFAzchwwZkk477bR08MEHp9122y1Ey0477ZR23nnndMABB0S2jgQFYuKxxx4LcbD77ruXtmVfslKee+650vQqZaZIQEnSKEuIZZJOZJogcxZYYIE03njjpXHHHTdtvPHGkZGE6JIYeuaZZ9LZZ5+ddthhhzgv75VVkwsYzsln3it76emnn05XXHFFWmONNdI000yTxhlnnJAVfMcXX3yxtK8Eko5XbLNKhASPxJGWaT3XTnZO37590y677BLtTtBfe+21V3yvF154oZRFhKQ79dRT0z777FPq00MOOSSde+650X+cg/Opb/J+0nnVrpI+ZAhxzCWXXDLEzqSTTpp69+6djj/++JIQUvYX5+G89NHf/va39OSTTzaRXPpe+fdFVpF5huxDVs0///xpsskmS+OPP37acsstS2Kto31iiWSMMcYYY4wxZqymUhKJ40jy3HfffWnfffeNTKCJJpooBA5Btg6ZJgMHDixljCB0mBJGltCss84awmfqqadOK6ywQoiDRx55JLJZOIfEhDJ7lOXCMokaHRdBxHGXXXbZkDscd6ONNgqJRBYR2yCw7r777rTddtuFWOAat91221KWC8dHYChDin1Yh3TgMzKJ4s3IDbJp2H+hhRZK++23X3r11Vdje7WLpFe1RBLnJDuI95JfeV8z5Q6BQ/vQ3uqjKaaYIs0777zpuOOOC9GkjC9kzB577BEiRtvRl4cddli64447YjtlGOXZQJxLGWV8b9qU7CFleHGvbLjhhmm22WYLicQxkUiSglw7/UXmEAKIfkQA3X777XEezqnsJLWr2lgZUzU1Nemoo45KK664YppkkklKx9A15RKqPWGJZIwxxhgzFtHwxQ/FRcYY0+2plERSRgcZJgiFJ554Igbq0003XZpggglCJs0333zp6KOPTvfff39J9Kig8jnnnJM22GCDNOGEE6ZVVlklnXjiiZFtgkBACnAOtlONHgmAPJNE7/WdyDJCHEgikYmEmGI6G8ekXg4ZS0gkSRTeS4AQOrbeS1Yo4wlZhDDr0aNH7M8r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LcvybL8lx6Ns27KCSKVSqVQqlUqlrU4c4J///OcNJEXe//KXv5w4yL/61a8mjnLa33DDDcNPf/rT9pr3N954Y9su7UvzUw8HelhgTH/yk59Mxrq3LPf6ox/9qL3/xS9+MWvOAhMs64FDaf0yVu6F3AOub+P84x//eNb177N1c0Efc2de+vnz+Yc//GFbdtlllw3vete7htNOO2245JJLZsEh2wbw9lAo96d92jcQNb4uXAP9vbsUmrnm+lkQ6fq/OWviCI+d46UyECggqIdFPlseOPTVr351Fkj6yle+0l6vvPLKBvm0s8x2y5cvn7QB/770pS9NzHx+/vOfb+az7S6//PJ2LNnefsfHWVY2lxVEKpVKpVKpVCptdQoo4pjGxpEVef+DH/ygOUdvf/vbh+OPP3448MADh8c//vHDfvvtNxx66KHDK17xiuEjH/nI8P3vf38CnJYyCmJ71cc+9rHhkEMOGZ7whCcMj33sY2fZ4x73uGbWmYMTTzxxOPfcc5ujCjL0MGoMOErrl7ECY6655pphampqOOOMM4bjjjtuOPjgg9vYP+lJTxqOPvro4eyzzx6+8IUvNLjaQzrbf/SjHx323nvvYZ999mk2nr8999yz2bHHHjtcfPHFc953AUq5L+3nM5/5zPDqV796eMYznjEccMABbf71/9SnPrXdh5deeunwne98px3/UoHDMUS69pTzJo7w2DneGixRQQE7YBHgY1lA09VXX93agkzWJSrpqquuanPwtre9bXjpS186PP3pTx/22muv4RGPeMTwyEc+cth///2Hk046aXjPe94zfO5zn2t9BFqNj6OsbF1WEKlUKpVKpVKptFUpzir1IKmHP145sFJtOLkvfOELh8MOO6w50IEaHKcHPOD/t3cmcFfPaf9/nmeesa/zGLswY4nKLoqUFjOy7yFlGSJKaJGQFgppoUKhlJIplRIhrXRLyb7MDBqyC+NvbKPb99/7quv4nt85d/c5932rc+4+79frep1zfts59+93fofvu+u6vvXD0UcfHdq3bx+ef/55y4bgWJIWuZMUPTxyDhER5557bthll13CRhttFH7/+9+HBg0apMQEkoIBbMOGDcORRx5pYm/s2LE24M2WHSNyA1mDWLjvvvtM8rRs2dKuA4+c9yZNmoTGjRubxLv77rtNPLi48/N+zz33hPXWWy/suuuu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;clipPath=inset(42% 0.33% 0% 56.33%);" parent="1" vertex="1"> + <mxGeometry x="623.13" y="82.5" width="279.73" height="156" as="geometry" /> + </mxCell> </root> </mxGraphModel> </diagram> diff --git a/.docs/images/data-versioning.png b/.docs/images/data-versioning.png new file mode 100644 index 0000000000000000000000000000000000000000..01fe62af37e22534cca302ae9d184b215b31692b GIT binary patch literal 45988 zcmeAS@N?(olHy`uVBq!ia0y~yU>0IvU|7Jx#=yWZLoZ5$fq{XsILO_JVcj{ImkbOF z44y8IAr*0N?y@(ex^A@px6Am*)D<ZKO$%liBq>RFDp`6MG<1EGG&pE%Q>m4v`d7d} zz=hS7)lp@!62~GYr7k8fp^&DOX&a2c|Ns9b;P<T4XU^TRHr{Q$`S}YY<L~n>FW<du z_o{vOSG~*Idi!meNw{*O8&fZf6sL($hKj*km4dsa*IVoN|9PsvJoff1HdByjxypuL zuU1bN-}~pOe!uCph{u8YxvCQuWb|1+oAKkQeqG={Q>Zb=v>CbDAN_oyZvRu_sqwu{ zv!6?Ing~fmGG$)wxBK<N==+(&&$3i5cr2Lcpf9w*KjzEHy5DcZbE@K4Js9}bR~*$o zHC?~@=4q+c%iU9Er-K|-(ZiCJ-uCEba=)#VCfGG6g$&+bizz;PT;h*sU2bp<$OD&S zn6~=bzgn@FD=s6p`t8<SuH`2SW<A?$e{^>F{o3zG?f?HgpEk$uU|mek#-m9I2@58O zf`n$DI3n`q@Um0E-b}Z1x5w5zmcHNdbXs&?R_LCUZ?{Zg_&<ra{=-4`<*C2Lwz%=~ z@f};ae4f<*-~0bdUyrNK-SX{5a{sms>9WfrF0@?QQvPo`gKEj=v*zXwN&nujI)3Ft zVSjbZnq99}xxVbEV-h}l)nmcL15Z30UNxFLO`GT2S2H_k_jCq@kL&CIYQNk0eBL|x zym>R;t86%-)Ggv9VEJR2`CiSa>@^$Rb|-Q^-(8obbw#m}&BN!e;zS20k13B1CO{%@ zvT~#C_dA=HXqacVOjf?X?8-aU3k;p_QqAn`Cps`0b|~byDpbzyo&D^&U-m08Rh?Td zD$AaEcqlCVwl-{ar<U*8yqqjsR~3cOor>(sJ<@d*uI4lx`SR)oi;yRunL|?5*Y{g; zeVJ93<y|*(NP6`xHu&>O^+vWe{(J3azcbAPDSe1vsfQ1eQZ^5t_5WfLqAv4J*s$1P z+3TCS84Fv*y7ukcXL$P5=YNJL{{H>jU-|A~yS(1hr`2~Rf3JMMCUWzs-@7Z<|Gs+l z>CTl!E6Y!1sYseTB(3_A7JUAt0w_${<L1QWz7X@+F@Nsg+xP#8Wv|~`7E^Rm_386X zr}eDUqU+x8{eCR|->2yn$BgF*cI)r^v6$u81!w-FN5$i1&ey&xetb+izh|a#`n2B` zC-nXun;IS`*<b(X@nOfD!#^1hf4!i){f<!iy~^~+jyb7k-`iIH|NDKqtYLU$>eLN~ zmHryuy2{XbQRPaFeY{t~8i%If?CzcMe_w@vd?dc#V&CVv?~kO-&K1jEyY<=(wT@%< z9}X}VemKZ}{B_*-U5i{^bvIeRUbFd>dzsR&cjfz~^Q&*)PRq}H_4oOlV!uDXuJ7-w z{eIV6EVksL<tgL21qz3X|J_UK)>T`=f92}_Jcp3&`fRiO?EijQG$A}Hb7`Vz9<$1> zsaeJK%8mCx3E^JqbsI}dp%-Ev41)ImKK4KM^sfrCd0%<Ho0;FnASd(B6LtH_Gk$wx z7xmeGyOA`1dR)~@chesGk2}xT>V3Oc{hmqUoW<jw9~au~On%$Fw|}?eani$9@xHg) z@7MK}-PwEKu<*POEk7>L|0i-irr0-U-_K|LjQV>$ro|V$Ub}r-?i}^*gp|YQ?f?G? z+AF^AL#tu(v7W%yw-`DDU9a3Rum^?Lq1q|OKhOXFr{Y}kyx@rT<#u0Jwnna4?{Zgi z=YyQ(k9j-(yer?|z1;R~W-8P3=kvbH9CbbzAhXT4?)UBca{l$dE~hh#M&Eh6`Mll7 zrTVp+(;|{OZ=SE-=Jxy4-e0d)cW*jU@#pXRdVPnayQSA_uQWZmWw_$>iK?gRbH6Tm z;Ai=C$|8=~o7c`+Es3$ZA8bE4_k8uMP4D*oe)r?s_WiQ!Yu{#{R*aY%&aCq6xa8F< znY+9eFbZAXn!Y@5_bx`EoCiy%$3^8_umAtOUOc+{PO@@uZkcao=J5%o`_c~^zM3f* zAe=c*w6(zhU-EOyBa39ux%^oF|JVA2)iv+uHt@L1HGEuW#eA^%=gn5}xCn+LujBv! z`jnHVT(Rw3+==hMd|Hm&uUo%aepBtf;B<vUl?Lyt@Bj9?duMgbcSf;Wuj11@D%5f} zo9)m~oxWtzuH`(o%VjqG{LpSM^S<(Y^&?IH%2O+rWHYNQdlwV4Alpt%A#qY{;Zadn z#zb)quG^E>?*I48wM^~Lr_=iJhbokK8xFaO$A+j)&GpRR|Mwe{P|f%2`~PjVVfP3S zD(hLaB<|Ox>0)2_W^lyUeOWBuE57%IE9=qqo6lLX?%`OeHsQk=`TswT?|8Xv_Nm=d zX9_k+=j~A3_vfkpaqak@r-W=j`f<5grq8QPTeIiWsm;!P4&4U2*Y5w;V13GUdY8Y; zgLS*#b>08>ZM*AD2D4j5M+DuERNw!7??ys1uh(x)(Klx{&-=P&$D2*3AKCx^=^rSS z!deqsdNuTE`SQ@9q$zKLymdn*#7kMK3~cLv9G3TzJ<;6s`|taDdHWv+`MD}y^)#3` zBsI?4<@@;gCKf3L!|AN|_T+_dmN2W_c<jt)x#Y&K*s_~TZ=`>VX=8}~zOlbnXWPxR z**hNhS$D-gOR0YqJim+A{LY36kvUe<I-;+%<9~YHoEOs8(0%t=LU&HVtW>!TXBY8D z=WY$%n4GgggU!C_^1ILHYn~Zzyyzx9HAMSg<C?~j6a6-yP6Qp3zW1Rm$v;)>&DQI2 zA2-kcyXHnj+2<vb{j|z%Z@&Ng-uFirocVPb9&9+w*B!q1Rj8`cr@rz%i&HFYe&0N= z_dK_Q@6TiT{~D#$&#muAzB=p9FsJU*<oQ#~{_p?){eRcq=chHwx8E((erxml&1Ubp zC*7rUInRnm<!-&|)z(&=W_B}Wa!~$7;kr}&^*;_LT`s?sxjb;OJnsaF(i7(9XZnRC zxF<YdsQ>#qUVkDJ7ssh(6D*F(ygpz5@AJl&%VvwEIvuQeBs`zPviDtKhj98$mZJ}5 zx15?V`K09kFU##?_Zgow5S@3s^7-84{eQn{PoCZsJn!V%8lO|*`+ppLRI*ywHRIE) zBO<Ndv+e$U>=!?}<H;oNX(EcZS9TUu+>84l(qDA%*R}1_%4AC}I6ke*6`f`K=fmOT z|9`*tU*Gf0RJChSolN=D0Iqk-UuYzAeVci{CXG?-|7ZLE!M6_lJbvWINyeLn$7Q{( zmo`=I|GlUG(y<5+QDyzoBPjt64V`6L;nJFqtX^GY==@peW?DLHolr)@k&?GJSKeNi z*TAyLdx`wPV>exWJcaL7y<XdW_>A1f*^B<l|2*N|73;pK_I31qt+KoR7a8B!EIMy* zHv4Qzh16_51&j2ff9I6;?J-d=X7Bj$lT|z>;9YS4mgkqI`PqCt62#6j`~6MtZ~eV# z!Ioc6eXwz_y&hYx%g`8qAU)wcqvCs(X+Km>C8#qpq%79x_;j;yALs4U*LDfalmBsm z{SkNk52s2$$r`aIss|qC+ckb;ly6}9-@4y1?$%4=viNV#>*Oup@A>TIWf8x$*w^#< ziR^|WSLSwemz+J$q@p8r$S#4w=Sa+J29JUT_P=kQ7rT-_DZoyGh2yTvah?tvkFyW= z1gA8#uzIM;uuB&$=K<yFvur{Q%*$szu06!5F0!;;bm5*o=l4z#Zq1lfbYklBpm;7p zhJ`K$5`5W<c{I*#-}6*=soklMd|j<g3}PA*D+As=yi+}I(UFKfzwf@+dwXaegOG@z zLgUht<@^5seXlRbGm-zj_{jtF0@|L>tIpGmo_(_M(PE2xKaQD;B{)v3nx?Z>Sg`k_ zxkKrnkH^JX?=y6=R_!wDo!<_MC>xQw&#w|yFX&E45VyRszV7R4cNU=&=6q)DQr`cc zneX3uL)~o3+4TR64D)q2pD|+f=@3)6J4H9^0;fs?|F&s!r;71vXmo#Gt9S1(pE8T( zw`5kKH;bOTgr+Fw?0h=yX#5A8`v+SSp5%X!Y!E1ud69U3Yj7FEfhT*FWDYp+s{D{) z;88f3p0NJrTNa@&O!W`5<9|n;)L=-N(#r5f?jNUubK2sylQSAzj4v)<!g7pD#p0V& zlR%aFgaZ$X>n!i8Nhv7G2dFS~7<4vrDY~CCRY)vKmagf~T)?7Go@sxB)x*A#C2am8 zMhl-~EJ9N>%I^F7nLV#IQFvJC_qV{o>Gl%Wz!?s$vg#U43@?AZUa!w}YL~$7fRrt* zO$U~7oDZ6J=-`}s?&F$K7kMgIa;n_feVEUBN=J8zY8UhD=1#%dlixi!7bi4Mxm$jJ zFQZU!QJLw~d48Z!EqQhJ<;7`v4J=MP7uElk-Ok-ED?C9!)c)<3%U!*0b)MGK<c{=h zihMKmlR(NM<_0e}IU}XUn9cY23y+n3=C=6d&}^cyO~5g|ZezQL^L_8er0$=LL9^Ss zJ$TqvmIx}d{1lW_{rP$R|CmKAmnOIvH%JJIO=Ni)ut-^Z%?78H_SSY`3J3L_bd*G0 zjT@xCe&5N_Vk9{8m9yUBT%pShoi7db#dn1DuzI9qP4?szDA@4!+kwvIE*i_FJPLYh z{VF+_gH&X4-!H0}k{H|ke*TXm>SAFHMjNj^xc~oOIp=&Pp$Yb43;~7@7goMuXm#<7 z{PTBR`QFtVlq4E>q?xQln9`0!@#J_eGpnq3Q@L{6c1r59n3*R&DPLu`n3(pYGF!|= z)qqbre@|gzm`ij6_sTejz7@P}u3F*^j3y^}k5(`U`5j$a(jekBbCY89nN}0sZ2fD| z`FjubF_^q#Ueh4lz0P|3gzTW%Vmn^mGO3UQH5@(%{5ZS%xa`CSbGoaFm$<(F>ynoE zZmr{=f8Y1VFM9e$GHqV$q(X&T`n)q`A8{z3eDYU$_Zdz<tJ~clHcb=ys2+Rj7VE{X z+j+a!-Z_44*Af<H2bs60_4n^#5IA4_XRZ2~)~h)R_6#pi@G*1LFqci~P0jwPm}6EH zBr7;$k#IwU>2wZfha*)S+d{S+-PPuE-sxWCbB+lfm#5h_aHQ_PS^xgAdW81L<&0@R zY~Ps3JA2Le{<(Nd=lcVGpUdMuO`1OC`wHdxjDps;{Q7w(WT^d`GUY%-0}HE4Q35;L zWO46vjd6uXMNhX(I>!7q*y9HG{K7r13O)hds}xGPXZYLwe8ME><MW1r_0Y}l+dnPk zDm-N<GpF9mSLA@olL^sxQk9}D-j<&;-;g+QTKSGE;XkGb>tA`bylmE)SI;9;xg39G zE;N3sap{4r$kf>RTlzO$DdRq=$@u=+0cOKX8#TCloQ(t>IG-+jcWbTOlzA_h7O=EL zvaq?V=-;K)d}#8omdZlTi<5fIf{z^tc|Pwp?}QnXg4eD5A~My1S!G$qao@*T<-!vS z^sP01@v9W9y7{82+-d*jV!P*iqPZVf)<1vew{!8t>e^#z=_Uu6QtO{f2K+l$uHk(% zXP1%X*}7+b?mzeW+&`=PyfpsY-aED@%YRx+&*I*4_qlCk|D9G($w>bM4RfcHn~I;W zxOMS+WNhBM2Tvjue5#6<`9IGKzV*y9H_-k&qj=CN>+&5kc@bs~NmBmTUf$WVk%9BA z_&J+bD;9fk2o%ZlM*64E>|LHKvfMRRgxk!+WNF;@38}$u4AFW2wU*qeG<8U_vAt+> z+hc(>r-{QN>q^sd|9vdG7=^M9uTwa><hGaYqYr%P^=kW{1%KyF>6;+3_2&b2dy7Zg z)^WH<Z;W_y_FVtd4|_pf%)*Th*K5`|DBa}gp4!6H`ghjqYR-TsN}3T|3-6o>eXGOS zt?cyp!h$pMxeYGgKjqEKP%#Ju6(=s9n>5oGsa(*V@Znw$Q$dbk6Yqo<>&#F1KXK$T zJzl>gc(tpSQIS#DqpgfWcfYz8f3Hz$+{o1VbIC4WQ!P#t!Ok=b6QLQ^AfxU~F8#c0 zqvrx~1;cHVX77I13Tn3LFS)m;_zp;VhpWYTu8f8wHo~=^AF&27@lJ?fu&%YsFJe}C z_L=Y1rYhbEFM<-zzWv+|(pUe*S$}IrgNuGp_Pk7$3$s~-JUpzYY`YNC%kpe13j?RM zY}DZ!40kK<N<XgOZ=$K*zWbEYkA)#yzWwmd^U6>$=mc4*!c{)0JFnr03il4peG?s2 z8%wU_FlI`p|2*IO`5Mo}O4Y`g+X>u-)<RFWt$cO(d(NNpl~;}T?!Uh6$F^PdJQEJY z+&F*j-*+pU{120rvevmVeGXzerrx%8=dyV$GOLm=mc5#CtiWflT~3xwsmg=}iLcjg z>oPuPv-#re;N`EErTQ|mb1%DDu<QPhoSIWB?_NE3aKqBS8ypUWMe{vukjh?sU*g}& zyDu*<{8lEnf!VRx*Ot>_Px}1YZ<!58uDss0>{xIB6Q{}??Z*?=9jo&{=r_kL^xS6t zo}<6t@89pDQe$>awrSZ!jb*;UbKZWub$#ErjSf!7i>_rYy<GBb%ggVYcLkC!F=mJa zg3V<)?^x#RlJx3pZ1Cfi>WwTyJMEMrAFRASY1y&Mu1qy2L9NHs-WFrU6!9yXewUZd z<@U1H*#>H*{)teycrq&GUDW3K_f1A7&+eB=b@#2$zp?e__Woxf#_5%y;S$~nGiKer zex<6*Q=!pixo`frhx3zUEqzyI%RFN&zGh{0(Q<R#q?lLRR?dB3@&BCReamaF-x~`} zdKp@ow9V?u{M5Ox%6-{1&KtFR|2(zpsnzm_Pp0I)i>WrcQ?vfQ>2i;!8E>z&n_Aw` z+4ioC#sB+nb~fcSUY9dcCaaa$ZukF@?%ANW|7zEZ)&IY`>O6_Bcd5U>#6!KYMOeaJ z>d)6D2ajB>oLRcmK(VqY*>8`@o=Oexy{|dHsjTn0aCP#oV!`CKCxSRv_-l2Z<al0{ zF01!VuPf^A>t8C)k=GZVi}c-j#mH;skD2?ge_9Z*>CUgXR89BT7Dv!H0-J}=sW%y1 zxhfwrI8C@$&lWV?@7a*M<L9&4-dUF;jxYaxschNWcO@$>ue-L~aJld4^kA`4$*sI+ zj9z`$Tz_xL0yg=`{~ujKHuc>4exiKE{_p(LWkarSRr|fw@V{UDif@)}+#)4SQ>M(W zN;#6Tr0@zu=g-`>v#)>M*vK8hAfwZ^>)*AE|KIX2+Wp<svHM;Bw_1L;Gc_8I=FJr3 zKid^i^04EmxaR*TZym9ZJB}{;I_K)*tuHq({<=n;w~=STqV@Wx<|POh^s;(fIpfy5 zOjDR|D=&-Bgj+lPo?DB$`Q4Lxm|mCecco;`<x0QS$*I-;YgO(%mwbQrXqvFXB=^SI zf0V_y1Tt+)_jb3lUw?c0{Hv#mF1m{Ap1NEdc|T|Qe%s`^UT&Iqr+->8b^81Cb8{l! z1@k{O6YT7K^L5!8HzsB8gf)Fp%7@*UioKakCrG@u&Mq>@Et=Gl!yT=1^jLc4?MssG zOP;2GtvO+IRlT-Rs^G_(I<u1-dsbEKo4n<9>ca|Nw-d^_TQ^-!KUt+3_+sA|cOi?b zx&Dhbv$2%2IPKnJ?zwNvV@`)n@j-6IU0x;*Noy8YIPTzYsQB<O<Nvc)5;lJ~W&Hp5 zUhw)|D;Ax!=7unrdhMiRiv&;W34T1_ELeVD{$qpe6uFybH~0fPMW^*$GoCL|JKI)0 zYJFwikwbr-1$zqP7BhCvnX)p+XUd!jFE!My{Eyqs{S~5il1b(BJYl`5F4L~BWY~0P z&XKuZt0#-Doch?}sL}6_b3UwOsh#MsFirK-cNW)`B7e`wZp>1h#AWO_%Pi>5z3E-+ zg^xTjj@<T5f8UQsAD5`xuDo;0!czF^YhTM=mbU2*#>Zz(G~5p=VgrS1GN)%>vwQ0) zYrDeHA(uIOnyqZH*_roq9+g}$etYV#WTD50Nj!DwQ}&C`j!PG;*thNOR^G3%+caMX z|2E@XBJ?7ocrNdR#|pRKzt>U!+o-~EdE4{n#aW<HlkJjb`mdC^3g0td-1lLXgw3}- z8Sy1scSIEaiPqK;-gxfR#j0DY1XtVHMV;1_+;~H&zfW(<bNQZcdySR<6;^Lq|Fir^ zsJZ*^ThVQ&UcT<WwrjP^{oQ8W*N*x3&)9fkN0g=11dro8=KXjXBmKeh<ewuGuJ4`{ zsPNCMGv*}Ql?<E9EuVh-Ip-=ZGoGhm-{{pe>(|Xf&g2>G!JN;IoX>F5x+UeaL?_G4 zEjGCGN>BfD<5v&9-(j|KbgEnK^G4ui+7tDubLV^O?=4xg<53sygc&dT@=s-}81%46 zDO}{~{^`rKm!WgkiB+5jZ%s76b~)|p%B^#c$XDJey&jv`%eH&#B`<AJhQQ@6OMBM^ z*Gx@r-0^(M{~yQg_qp82UT|^sn%9+4%#2S}4QD=yeHRgF{hf2lB$=;sc_-h<eC>HP zFluA{R+~@XS&V<?Wv0)x+xKSE>9(!C%8i|D9$#*~zWj72yIj||qxIbfoBevf&Ci!A z`ZK*U=1cB}D;>Pod#9~v-paR=&nY8m$ATt}mULs&Q@6UT-}Qcr&+9uFTqj=m+cx84 z#@cT`Ui?0B?c%K$na-JkwlT@9LS669==v<3?4>l-SN-<6iDr?-kJOl*UdGh_{rd6y z{{MS@j$I9pul?59XZm>J3cJ@2me08W8cKI9w0+3w-|^h$xut8R@0Y1uEBh?2y!CdN zm>Yhbr}$azt#!S(URA%{qU~&C^2DQ2Ex<#}!*ctbBJV$6*VpTM<vg7l-j{CodFIld zlmaOQ!;7}}rd;<(NZ~YbSR^U?c{WQGqfm~YT+;EjO{R8_C6?=cs$KVTvvq>+gq`h^ z=SH%gGqQTW=W~~A{rBDXWnZt~U#GbL4aZC4zRfRortdlZe*68p>OU{s?YrjxeUtt$ z;p+AM|GsYgcue|ukEHRj(yW?g!m2-4?%%?i;5py*?w<DCXHU|vwR}^b87^E?BeChn zx$=F&%jefsWq!}w{Z?#t{=UkI+yx6`HJ7XKPb~xuEnB9~m$kQe*uu2q-|PMVw9W38 zTo&B^BDdklAG5>H!fGx4l;4$azHg_`)^AguvG;ILxBGpy^L^LcUc2e+dl67|sUm3N z5*J1hWBIOc^YeNR=KnW()Yz^p7H#p%EK>iM-9G2a^zGLp8eA6rNO|nrroC>5(!U?a z?WbK26q3%}5@_?W(_iQIh1iORt*J?cHRd-Gnh(uNKjKtZ?`Gs<^Ifj!gre)i88h;0 z9!sBADQ!^R@L|&QJxeU^o>WTty>8d5RTf_^I6wY$T3_Gmb@BY)F*7d+m#);`_T*8w zeqZ+bz1uVd-&VZzj*q&vbYJ@X+Oo*?8?HrViz+k+7N%O5D;rD^RjocE=q?iWh&R8& z`OSvIe6ERqABpeph|b@;Rbv`xKIPl5&XBYxf7a&LYU}NKvFJv@Vcy5a^MCpTemPkZ zP;*wQv-8#0Wpmt^il;d+tIQHK0+&gNGMi)lGVEV2ncNi%8oqiY`@X_`&yS<}ef57H z%YVGOzRq;rzF)5@j%vpV?tZ_odZY17)&t8_H+-mbxyf$-<6x5b_q*lyE3U4N6aD}1 z`+jf9^82;rHUB=(*Z(##*XP>3&nHZmTQG~hue!dwD>-hx<C&7xc`5T4lpL8E4u*l! zk?z0Fsy(0QzSmiBw7iC${lG`%vYV;XD}G&`Z+H9ti8q{YQ_Ck-#s4@Y?zQ*+mu2Qh z`>fwZIGk6v|9SG!dW(`@lIJUqy*bQyHQL&Cdcy1d|9|gK26e9|{>W)?G2d$&`%YFu zC)2%ozJ=Yb>GuP~oTFv#ZhyE-&_5z6qwtGMJU{=Gts-yjW8|CFV<bL)aPXY|>i3JX zi&6Ps*OgUB@p`CSj(cw8bVKc#`M!_6Kc3tFj}$pyeed(UM**`}*!>3$ecsOBU;Ady z=X0z}cfaCr>w2<mc3u}~w48NHg37&r-?ocSd$4)_-<&_s%=dTl*S>I0Jrt~Gx$<gf zk=4H+k00N@|F6tq%3JUFUqL(5mGs}*Je?BE#qD^JQSgRXL+2va28{)_-|rZk-Oky3 zGsi`DbxO{Or}h7y*LOKBY}g_?;Zj+9^v{_W+j=}0^lwaB+-IfLXZPzxL6@oOwC>GQ z@4mTZGST+ll&c;K7=_MC%!m?t!Rn#Hd|t2i&trN0Z?it1{})w!oXy%nvhiypf6am$ z%T$DnmEx9bFe^E9d}3gJ(A@j)A%A^D&W*V0x1mPtMxhp+jw-Xh->-Pw`*GX$y}EIq zXI-C?;d<+A+%=CEd#!q-Y=27L|MSe8JEQ7icU;J=mIYV*7#>gG|0i|hV~&eC^Q}@W zXXYJ!$Lw1F^K?Ad%bl0~tVNwBoImW&u;T~2>CNRlZ(VA-_Av-Cc%;7y@7u-Z;j{Lq z`Mz6T_Ona{-gd9=JovX>B$s>T^jM`|Wi^Fc=IswVq9lC0uRr1<yIkM5`~PL%KGyH} zW}nwTjrC@AzGQ8*UH%z{v^5S+vPRR5Bsq9?8{EGZogaIHrH57QQH!vjhA{7|`0~4@ zr(Gt`3f8ysOK`Xe8h7om|MQUl=)rr*{kC2bK}#H;Fz*Uq7od3jw*Au%u>h_q2a4za zzQd%Vv7mF$7GdS)(49{vc_*!2yG<*1(qj+9f_F>h_JRiDa{7L2F3V9r>b-EsrnyQy zw>%$aEHBG`&K>{b(4vfD*^Y0T{K=pGzOT0j&G6oIXwsP^ncHw=adk}npZEX&<<F^l zwK7%bmQ?xfx7)OneOxlvOz)6b{7A@@dD`pOr{n(>)%-XtKX31kbLH9V_m=&6n_pjj zrM9Pa&O=|bn@g@}iyzznb#1=x#ASQFs2})yWx3tfIaypA(ppw;KF71U)UaXQ>*x0W zD<!4%ik+(6cW=8>bo$3j|9Y#Oxz_Vd=S%L}7{jCMd}>41V~^?YU+{hRU%I-}!)NKe zD1%qGv?nBF-_YLHI{ELO=eFx#%mqyu9o<*=HalLs@5{aF_pz56ZrGH`em+;WF<igm zAa_!$Xqbj1M~?DbZ+)e^dV9ZI+VQYW+Upq8qTHFO(=^{7ex`iBf&W`?@!MjDrgx8} zRV1%_^FO=AcYf2sC(h~f%5G&k=5M|_r?QTD_nE%c?LLgVqHd?!FqrSV?w7LEhsB6N zMWCZ*YVNk1%TjbRg#SNI)vu16$bPfy(g*nyF42OEZ|P<!DlcRd+WX~QN%gabjgOA- zzbkdwlD}8$-^%&0wE)^t*=t2=-`})JI(c+=7e`OD&bg&K9`BR*^U(F;zqh8TAItuW zmvvv$o@c3MU???VMPz%A-;5P%Z5uS&86ys81vseno%dDixVzU*xX@sskIT;qH~PO` zi(c<jkYnRMxA^b0?R%CkVVwEpUV4%J>&Ww3!jpyT4zh|*`LJ@sn$B~Di_d6u#9Xn> zn`sy1pvPwY<3aP|CzJj4-aeVIZsRd2)w?fW$N#Tlw3?&S6=1C?ac)gn(1M_8L5ZO0 z!KJ+Ub)RQ<Z&qJ>a{n3ar(Y(SM`o%&U32I4y4~wE6m-smCIxQ3Ju~MT>sOghVSgLL zZ};o}|G4|UF1)H|4TI6+!!v{w4{xb`lPs^j>9IxsS1JAp7vA^ucPpL>er);w*v@}m z3XQc)dS8|nPJVE}_Eq+qlDOlt<uRVjXS^eyE%aU@U_3*7+L;*BW1l7{-{1Rb>Uy2W z<_Gx&Hvjo_nqON^u~L)$aO~XL3k;nb`!+n==f)(g-1w29(?@xk{!0#@y*vyv+1|)~ z^6^^xwF5M9>fQQsB4~o@Xyr2xb!~nR2FW=knkT=AFY50*eC%@ZoV-5kPd+IOFPFu% zM6Z*5Frh!Se6gkH`g3(Bwsy%>)-hF|>dW7FR7^Ff@W;dU=^}5!_y4-O)VE}obJb5- zhSn85X8YciuGcnWn~=~i*u-$q^7)+LOVb+VXNvq;kiBl_vLB9rSTuuQ6<>=?7yY@x z-Pa{4>Da$3daf#urtMDp;M?x@``7J7U#Co6{GNHetQB*T&1;3Ksa;=%zn|;*mO1_C zgY$Zw*R=Zk_c7lyDfxCpgZ*YNo60LK)fFdVrx+|$Q#0`wEPQ0)rKaS5lVwqX!7u;H zQ^BW}7|&d)QuxNgCSYghNy#bmUl^a;abBTna^Gd<mYS#9@tQpyoM$|r*c6`GC@=G- z(=XR6we9KBoCdj-uIKB%ZT8;n!gWPlVUf=g1yyFh#G)S>QC!m|J^V6>zu<`AnHq1e z+qc-?E?8iZ=P>Du`r9KsoiP)fnN|MfyPP`u)Ixm%gM%dd0{(!rr)!@aTPU9$l4RrH zRMqftlK3;(%V|6uzonfyRa_K$GQ}73IWS*7X8r6;c|&=vruPxn4{0k5Yv0N9d1UYY z&S=(?{CujzqRr=$LtP=U?X_;_`iTdQcq|ZCcz9MOr_UyRI&;r~MbmG*D?V?#{YKa} zZbqf71BPk4H+<gz@9X;RSocSJzwdpotGR8H&=RwaH)V?XEEo>vKgeJf`7*W0sQ1+G zyZ+{v9lw;XJznLR>m@L8VrNV~hsuVfC2LI7{;^fBUVH24wN0=8aBUN-R5EVTSK{?r z!usH0J44vaTT5bGv<h7Mu0?q4d?x>)@dw8%713Gem+ZZ?&pqn$%_U~OXZFn4@2$zb zI{nyz+x;EiRIj_)WbS<N|Ad({_uS{K9UhsY1|J=G>R!(Y(pOmYe@3~x#f?0^udmoV zQX=fjW1HUi%J}KA9?5(bFgwC&Nrd02BT~%W-AlSWgc<F0bdJ>(?6JH!BYE;omiAk^ z4Ub$3Lkv{r88dEVx#r8^Sajv>uLs6`Ny`L%uP~gd@mu54W?Vc`taZUW@HF&|@RUX; zp+*5Eu|SIl4a{A}EAEM`Eenbf5m0sWJ0%)AaTe<WhQxWNOVwo@c=(R0)GlQda^CAL z_9^PKlKtbP9o{N0g6IDV>E!DWV~`WEIoii6{ce_r!or%isUN34DtR_DosU~(liUm& zp9S5DX$w9xv7M3BtYa`wo~|>?@>->@+60Mp{5{z#eP5lup~Ne|>%rz0!*c%W5;NZ^ z)3Q!QUQoTDJt5)zOToZ^*NPVVA}ZhP-tX!>F_L3f&zho7f1NqJuDUGpe9LNfqlU+R zci$U_Hws7hH2X5gxHz7-c-(U%eSU41|AV`Wm~#@AnW;`#Q6BqhX}@sG64~iT3*Kxz zKFw;wMGx7`*&Px~dP0JBaVeaTRalzN$oGa#DPYSIHlY)NbrX(WQ`-M7@w2drN4-$3 zgOgm@jYQT7j4Idq`nH@-VOFVn`F7>Eo>I>AcsXWyo3f1KOZ@liMV;0+&3AM;C2(SA zdKyp7%O^!_uJ>ohOV+-xJ}YxQyNA`|$*qn%j*8pE7qj?i_3^uNeljyuEb0q*7pIbX zSf$ur{oLP(FfMlPgiopy3_fo7*uZiuZidL~M%M*X48-Qx3rBf`%&S~CaYj!^%eEwM ziw_Qy3UtgGofvvFe9kbbsxECibTv$n^XuXSMvettn;82VR1<?9`aex-`E!IXxI{vF z%>)q*udnR(KO7TFp2V9uBxP&}{x-!>EiU9x#j5KkUhw~A$dQ;X6V7n$XvWP%74h$9 zc@+}xNC-b`?KoK=*tttiQZr$NPQ;mR<8ukKlO0z6dCJUhvq3_;I6sf6^WiTCEm4KU z?&Q*>1skW_aJ%TfU`|{{!;ui<8sFOI;hbN%RJN$k&H3ija`2aZibQOy$?4pyH_a}V zJYlfz+XGr3!1dFWePi)Xx2EQEVH>})%a#Om9_hLe72cRI;SsaVh1P4z3f60ue%N#L z+Rn|vzhw8Gu-&Zws#tak^PP?htGIV7MCmZ;oH|s0!R&2N`S%s!%NAGp-MumKOwWSH zDSkIRj&6SEIEhK<p6mO_ezi}B>L31&P`>D*QuXrc%TH$#sxxAbMDzE5(=B(uKW}}< zwKo5`_6{zrYPY7xiZ{2<6WsVD>Ei#h<u0#ZuI`OEezC!2(JvPMud_J0oNn<yZxc>0 z3NTT7VfA`Vuo}NWV<Q8X!S|Ob$)ScPKB@WIb#ebbSZP*i_;udFm=oK#R8N}Y%e`B3 z4vWwXVXp;c8`QIQq-IUt<KZ`pHB*E$Op=@NNrL<d772l=7wQ%?epU%uJoi@9SAl;| zJUaKh+4Xwe(S=K=*l=5T77PAjRnySWj7do|oU=vqz*0t`|JQdr$XKRl1>b#tK)oPq zPQa(0Q1k09ZYmP|kFQyrJaIC^fhi&FiOVvV$DdA}XfsP>**vdDAz-TYlBa)@dp)ka zw#u@Uoc!#)M|iq?N|vzup_&uiw>6^}zj$V6G`N^A-neu7!~-XUB={#J9A>Q9=5@tk zig2f5QO0srzl|MCzuPZN`tLuTQ7mWLZx@v{oh}6%zH>O48Er2Mx9>BpXIQY{dISG2 zhL6Ykx>7d0R$5azBX+%mQt+&z$CGs0|DDxgm?^YKbCEzp|F7S1cYla9O#G5Ok;R2~ zQJ1Xyn^Gpue_d;sk8sUAF^yq{K>y5Ihc?p*4kBiPovfu{_ic^Y_<v;b$dx-D5uPvb zSN`@w7u9FGUq6gA{IU1*;=kSYuGx1(+k@szn`M||>dq`=y2<~WljF;j;%~+#nSz^a z>K&Z4`aLs(iux?Y7V!odyBID}Ol)QB?C~g=V|jCq;De@MzP-uCmd5jf`Hr?)PQ2B! z_xP+G^+sj6r?wS&S>|1u=@Mx1HONn+IVI{!V2R4@hTfA?)Et~#l!~=A0~1;vExc1S zahjQD>LIScH8M82D(>C)tQaT17r%1!S}~Il&*FVTO~<!%GCXa1vhmFIj|`nv4~>rX z7M4b?(Ps~z-^-?AaXaW~R{Na_!*6FickT}Qb;fh|EXI%n%Phm<lUaq7Pqr*p2;UX0 zkhqS)x{~p%j7Unu+C}0j3JdpJ<jAZ%bN|_%tIMBX+kNH2+Ml({%2gI#_C8nf&2iuE zxYuFVb!GM5pU_=4+2Pa8g3=YAFaDi(yXxB4HK#+TS1IPC$A0?#t9I`Bl1b5f=a>eZ zW(jop7dbu0d0%+Eig%nolibR8rBC+V<JzP4(8$+9_U9JkNd3|k_OpZce`iv;vNY{= zE}zn?zmw<xSz>YanLZQ$MA!C>d#|O=+<s~Pl1#6w3*{L&q)lgBKb3g>uJYdL&SyKn z?fIHn!zdW`tGCu!$IDvu<dJ*bK?<%#vCg((#};i5PTRWXb=}lmNAy-R2PD+8TTf!) z`K^`IbAnN2jr79JH}dPc(zmcaaH{F*x_tUldaB-rkK0bAuAjIj$SO5}!6&8BKvmu) zQBUiA&h?h%W=}O6EKl&xxMOxX{omEe*57xXZFYJ!xx-rhS%me{efsJV&rV1yd~Hx~ zsPX^1Pljh}&>G2iYtq+F$x03Me-p*{B*lm2)$WPguB=kecy~G8|D2`ol|>5aye{|m zzw2qdE*o)8>4<n)ccigcpJQNGhWqP@%Bya_J(#ieSDH5Cd#%5MZ(meD`TWUcx9yek zb2F=3L^X^mpX~cTo8z6d*7@?(MK0Ojtl4ij_iKHhD80D$^xTX8j_@mqz3boSd|#+m zKPvskiX#yXEk^FA!bQ#<*7)-(e81KUxfKUyNi7$!5}6-;q^PLnw?&CaKj%@-O#!nv zAKJOh$LCCsM}XNBZuU9Ji()47L~jgCiQpIH<lA}DPR{wZrTVLlXEm38uxMfsX6JqV zww6cGjmcQgMEiTN7w>VuBTYfeTu!omShS#l*Qc#2TfdF1JNYeZ>*1R$GfuQC9e&3o zG)1yt5<7FC8~3Zml42&I()ee3?lQ&Qe~uR=u8|13UU1$}=GW9ejA_?BZtrKRI@a== zG2!~0h89cC1m-Iex`LY1_laLE^3*)xoiTS~`ktk{SFT4ix~%VB>)z$j5j1OeW#_bn zS3TvWQ2`Asci&CoQZzbx(_vA>;>G+gIsG`JPh}=M_iFy)b#$u#VV#?@zRYIspDi<Q z>dRPGo$f3CVj7*gr>J3%_4Y?4``=$Nep|EA^HQdD-7`H)Q{@=z>y`EQrhikl_y2$B z_ojVz-nZknFa1_ub@A^TaW%OUpKIoQI+J+jN=)%IUL*DF{Yx&ZJuClNIq%P#_qW7f zPYJ)PcmHbbl>O&9b-psGY~r(=HzAQjd!qBo&YY?9Q+(ANTDJB*+pzJV;`VE&Bc{0~ z#QdIjSVva)v7W4?fnl1(xf3#Fa)D`gB9mKxKEI+Iog+9qdrgn^%ax0N7AIeP`qlQ= z5i6H$zOAw+Rd|gVm8`X6Z^eYzmp<P=p+6+Te(h<OI|{#Fr0?UuDe1k)bQAB3l-GxU z@OA_U^6%rfZ;RcyZPH!2b@A#V9uhJEQqv|sUg~(r=a8?}<i$%3<7T~Kbmx;YdhvGB zWM&KYGQVSSYB78^vIjE)?Ra!lR~**mG8K5z>{xzpVO-^rD!+dre5E(EX6Ai=lBjU+ z`ArsAPMaXhrw=>~rZO*-tN3|t&YXFr^Bm>G7X7g~RpZCCYtQ3_kr)5H`+3ps!Ih4! z;a!d2^X1g%|GNC+Y31{yN!@y4{O6^t?kmh(!otaRR&91(kj&wOjR#+pC)`zDpv)NL zca4eV_wTgko|}KK^f5^M`rXF2UHh$8gR7_Wf<?AB=KalKROIJB@}N`P{q-Arx9sQB zUH<R8&AU4+$wa|$dFQLY$Cif3Og=3k@XeSnn9=FMNiUDd4_b;ZE&1%xy2wC7fAR$; z4ZdDhzd80^og0sq1UwUAc<M6E?)d@3BmcHJ_}G1`xUurwwr4Yf)Q)-{3|MjR?83u$ zR91H!eD)!5#T*s~PwTbc1u_lO4P@(n-LvBC;Z@E0$FbS#agdza;X6z{C(an(@?@+0 zl`d7l)qm){iNjs38!Id7mkW2>GJQF*?ONf<w)2^VrRl$2J9|RK-I-UcUhiWol)8X9 z_U@Yo6Lkf}UWUt0jqD`S#J}|`O1(7lTgtJ4zw)fMg5sgJgcIG$y1Gi@{rVaXO?~P1 z7Oxg9`!!kSOzDw^oqa6{?G_4>jEk7h*5|DMVwSMz-qWSx(s7f^Umek0wArHJgv2lL zl@qOB6tcbCF^j_|dhU|cX){yeYG;IB+qkVbGyV1REQ3itKMR&5O`Gml|LT{NPs!rr zdzcT1x-P$bGs|k$=ImzvBYe+n%S}H;F0WlVGym%<$FQaoQD$HNzU;sHDe%A5s>x*~ zet++3PgwEvSf8?<#l8+LKfUV3_Qj57LOpZ8+0N$X*>F*&uujy#f$dL7^pQ=qMgm(b zYlBNw{jEi%F27Nky;A3U#}29DQ{V4x$-evL^_+L1;$OGeU7RC)^{esimvev3-<uwN zmGi(gKL+dT_hwqZTKBeOokvf4?K0jPpSRB!&)%N0?Cs9tdEa-HUutY&%kF8FpULfg zF(Enh)RXDEmm1BGza5;It~={sT0*@q%b^qJW=!5}6Xm|tNyWi$a!kAi_hq+?PX~F} zbc_uidofH_G<okYru4e$tnbsyk^5Pg?#=bu;`X|9iIRHuHq-elr=~AIbh2~agESS% zDZk(C(7*NG-s%zmb@%M=ypI=(+gtWo{d)1^@zeUAv)gajyxaME-lIQGH$MHD7FD&< z;`f@(-NlTl`a7>oQvGG{J8P;y^9QG&oDx4GXLR=zJh44Im+NkoiqS`pl*KOEf9#cI zMJ|b&yS$!oS$SHtQPlB$>c7IJZ{6Ov?-;X6&_A{I`X?Desr$8WR~TOWvn0jv^Rcb< z$2Oktk^UZ}^W=CT+oD)I<8yz$?Ce}A&nWQT@ZetY3e$Jhh8v2desfmzGJc&RJu9%m zWZ9JNZlQB?8_!tJU%lD#Ri)Pq84C_g_SCc`6F;f(Zz@^8)6wmg%gtY&b|R&2SA$+Y z-{H?}bE{?^-+g8wo=IDbr*jCD@w`a-^7+)C8i$e{b9>z;vD&6N8XuS0+}3%yzbIBX zBH^9Osu*EL6&DegHAV8pezMNTH$Hi>^F@5%{yjayr6z7xj_2<%2$jk|k?OShp!Zs1 zsiPJ{m|xU`CKi<w4fh;4yt+@kUG>r{rTL%P`-#m@julQ+O57t=91)zX{Wg7lna$hG zTL};N0t~nP5SEDe#r;5#_n^Y_-A1O`ou^eejkA?FP5PFcf2H9il*;LJ;_&BVrJKH$ zwzd9xx^VWF)N8xH$=l3dlJsm=`Rd=7SEkHA={WmrYKrK8&g`6j-Rqt%lfSi~_tn$C zHS+JjNB%pVQFzNf*VD;lv$xH2<FX4+KYuB_)TV77yvl8JV2;0=+wn!WC#!fHOy<ko z=KsI2XS3d|DJv^Er)AyOdYdw@F4leNtDadlTW6hH_4lxj_ua{JUibXySsJ_e?&N=q zzgPBGJ&9P|7#}<T97m+x^t#p0jjE<b@>B}U`>uMxr(W~q`-wSUTijIkxF|2RHwZhl zNNi(*ilUhpo3_@UjBtrHtk1iZ^=+EJE}5}G-n9Gv+mzFNo{3Jy5j<RhRc+r3dlrQ5 zzLF5X(8O;__0^NVH(s5iz?7DwU@`yqnUqHsGh+_5pZaXaHFaW=!rj-Asl`iTP9+pv zp4qZsp_|{b^abZ!4)2r*v`m>)z4>}ay~<4y){4Wq7w`R@@aV^OyIrwoqKYnB{M~Zd zTcs)R|LLjqnr<~$uZH!S@A=1@8a{RNIV<B|zkYk4I;h00A9Snu_}ua-jbC?2_G@R9 zUpy+-%bsQzkYZ$DA#hsHc*?JW^LxL$#IF|h*4rAQv-8NL!rO1RAN~9NuDrL-&Lb0K zev5b2|NH!G$M1R7r`{XOnJ;#+dAIBLx`>jAuE|TMhIcJx`=z|E#Ougi<Hh;=Wf$ka z{wi;L{usAPR>O2J4bkkgepeaP)ial03fx(x^z8oDpien|cTAjq&O2GODEMYpcoW<H zaxLk{>drTQ_MDfP`^V<?q%NJ~@!NK%z4_zkc4OWhq4k$n%rfTAa&d~dsZ_HtJz;X( zg9^rc8K%I<KrX+TJJas6RQ9G`S4-}{tbNMspWd(5jo0SuDQ2^Hy_yu)&{8;MdF<s# z89#B`;|mwAj^R+T3XkueR`N>Ay8p!Ksd?&JldnfK9+|_pM7UP)tmL~_Z<rs4R^L!P zH`7B=$#KdFiDTbpa&rq!FxW20CKDtmdB!|F_Q+`|IhKWmnn#008fto8+gQeWsi&KB zuK#%BLrK(2!Ec7j2d*u8sr_xT?X~bZb`wQP9WyS~dI)|sJ)a}f_~gmr4UJ|u7`!a* z%M=PGm5Hxj&-4B=+h_KhYz{M{Yos6CxRWHk)>ydJnB9e=$e91}gt;y<8&=lvyL7D% zFPQ3M^S@=iQ}_k-KN3%sYtDG{?EE$J{i37KG-LIy%P%|_K6#t^DIb1@mRq_}C&iiP zxeB|!nCMgVS&;d_QjR5d;tP%V*3@5O{}nTT#bFnB6)Q$3-*3xoRcEWL5y~hL+RW); z^>qF>{oGCSPhHrr_tu0j>%StS`!vgonZEaCe?7UYWZP9+)0?sGy+RLEZg}pV_x<uy zPPeQ{){bG5?#`XK#c!|GLkFj&pG540xwP0+OitVv;Srm5@l1^#gY%6kLK_NH!Vg|Q z7qPudW3Ku6!aHvdpI#BzAvS4-#@Cj#6TTXm3Qp~8Df3EvJQLn+teVon>0R*Yt%g>@ zNtG{iH|VQAE@$pDnszJoQPHVdf5F)$R^6KwR2d#8GbQsf3VO9qI;>UIXO!@w=z@xq zOy&bV8yoGkxxaS5_<w{`@U^XGRQ`RHTYqa=T|{>B@rbd0yvn>!YW3P(QG5RJuJ3<t z|Nf`ysQ|T{EnPx?um0TM^?Kdjbv$NV(;ihk?2eN#zh6>pc;(fqcdyD`rcOVm`+wik zC3|e1Tb}P*y?)=a9A~$c0T+5E?6Z4*r`YS~F9wFkIurM2T$wgIN345prRx#PaF_eh z@unr8%8t(zddw(v%db&OS#nX;rdN|=dgi>T)%rWfr*u{1+LEGAR~0POOO^i2+49bF zsrj1immjyU<e3zD!ZL(;NzVGRRnASFETKF_O&?N9vkpu=Wh}X%#y#xjcg@{8>Z$I0 zob!U$O=ewICGv2IUD`Y2Ej+e+Cw4!4>8!bMQMin9!h!P2qR$cMCZ6ar{wKror03I_ z=$AfUc+wZx?Or0T5XjA;Fj440XOLO#vrF&i6!Td+C`#R_yvciVPPt-fg9bR4Sgk7N zzV++gIlBetU5`I?EMBtYQ^A23rrnk&Pi$Sl&{?vlC(!J?lfPei-glq6W0QXN3$Uo1 z$*(<;=zeVCO2fIyYr~iC?BmdIe#Oe5s5@0|;{9AZ&*DcG%CCM%ywZ5>cuQ3N$mUxI zm%R?|+m~Lme7#`LyQj(<Jnt>EZ4i7uQ+b_k(V3;)r^3@Oe`;_|ZoB`;(#%kq`PoJh zm5aiH?%8cq=9le>-mg|#{!Oq_A^jzv(ehxIUqN{dyUZB*fB9IS@cX-lQK0m4yF=%d zeRmA`K8SNZ-OU)n;eOGwc&72I@&!J>8Lf96`*9-I<!9u|&+W69zq+35qIBBx_OvB& zuVz0yv9n~~<z*XvJtwFdtmHgAC4W+?Wa5dsQyM-^+~3tVc>K1%_)W*r>zC-u->EE$ z|JNO#v@3<>-1(j>OU_STS$1>Y6vw-5EQ*qAz2Xyh{F_st@G!NZ<zVkzqYpkAZ0x`F zw+lI^esJ0&b!4K6f@KDqg}c3Y#`jeXuQ-o;KD|?|uEv!7Ou^{Cguc_3A4gn*>fQJm zHXNN+t*KV}*}ROam{Ep-_0*CR8ZvJhs*AjJ9UN}NpW9Kt?U4#|x4N&L+i4cl&c90} ze5<@TtC{8)Y?BbSw|q4BM8T1cBh37+zkiFn{XVVkp7Ui(#`{l`UThXv<Nq#DgyGBW z?)vC^>b9x<w%=#$6)3-Uc=MxcxAS_H`RtYQcKuv-qjLG&<f)<In%sqX``>=6c)t6d zr1ttPMS;uG=aq)#?0Crbbe{D8!sO0B5_4|n>@CgN^YQefcKct6j4{{5a`s*gD||k; zd}`|skq66W=Ly};-Cq0W;V1he7u{uJ8}3%$`}!{8`@Gi0?{7bM&E75U_W%DIiH#R7 zSat6?#;j5lqmrHY=*q)aDT-O_HnPt{v{u?oD)nDF>CJ4zDSajvjOHxzOf^$a&#<|F z)l1=^w^nz^k(CO2)GvR{N{!Xt5OVFNUTW&^&39%g7S*3^yYgM<MEBa`mzSU2+{;om z(ZR|!xz=oMK-rmR0+*&RaFzvT2{U<d2|jO3=JD8YUB)?E_GZM(DzWeBQ69eQdbY|* zp7fbL-KD)_ZfWkEq=~f?OS-*2FL1X0!1zE(lVQ=Wt_sHMIr?t05(&rGraGHgiOz^$ z)azl$XE|-|XWl8B?!TE_UM;>MB|5;4NBVsE1LKGTUiUv&GYAICd`c9zylJ+Lp`waa z$aMEQo{M~Tq6&(aj`3eC`>rV1P+i0{$Ho0l`edFX%d9q?t&uRA;&-xLaO!DaQwH@q zz9!?7y#Kf^G-ZU;z5C&Q?ii1O>a7_sqlH;jUS(7@by)qHut0I{3mN-+@wYc^3I17G zH(e#>)=w2i>&={-VrQC}3cZkcZ6SZU_Aukjn*3!8u0EM>wE3Rrs_O?9f3x2-CnsNb zeNDdljaO?vw=i?^ahiB{rmVPpgiVFVgMs<6no8DehhEbRO$D!mNBpkkY$-UEAsgUt z<-=Mw-?)F{<$@fE3CubHdTP=~6ODG+A8hPwjQxE1R2i3-3G1fz8yl7O9nP6iFegRP zZho?5%Y(g_Ta@J=x+?}f3^~v|>F~6K-+#}PXy4!I-Z5>`fj8;1-6o$su-91Gu0Cjs z|F76BX4Pd!`1GZOrkgAeTW!%O9$OJ8Q*ohjsr|Q#%gPRm){8c<uzhJ@=GVBmc<=rF z<$;Uh{~x=~z2fH6(%mAgzwW-T-L9dQd$+J%_VN4c|7`i}UOWi;*KYS`Aydu1`aj>j zP1=QS<$k~Gbu(h!>--&daoazi`#4K?dyn<|9maOwHufKjEx#+f{&wc`8#Q0kk1Dy( z5nkInPwX%I8^Mh)ocdqA`pDEdCnaUZ3fuSq>%*lU8~HvyJ>tze#cg3&%*%rGD+|NS zIBkwGPkL_hZS$QPe|3#j$^tJxEdM;=l*!DlsF}-}R_<TjTl02<io)uH-piaMy}4g~ zTfg|_nrFY=n1pp3^BP^O<Yba}MLn?$o-L4n&2&>dheVl7F|UV*<|Ch?O*cdPvhwop za)0*Y+xmINu9mk<Q36wIc(!$YKELppjq-5|ubsNfb(p`!d~uB3_{B)%hw7W{JS-QP zzHv>M@UPv(c}k|R^t<YPjAC)$SlT5sP8bI-5s#eU9d@bWC-b7hQ;!c^|7JDw^T$&y zHYX15W?=fqI#Ydu!v!YZORE^#eGIppp2xu&@1wQk#KhJu96k%Y?q_mO;P~<3_K%c5 zs)0cb9wmNkt)G6XJy|$+k>Qh7`mau;KcDf=RB2-J<r}LP|1tHRf5gt;TNkz#AX0YY zinkNr+v;yx#6OAQ%*SbhUu)F<vd+&Ao_p?!q^iW(hwn=Bt_wC->7=%(o<6((viZjt z-xpW+dA*f?Ue)O*J#U|jo0i+E|1C_M`WJW3$rV1WV*c{g;T=2%=T<s)u|9}!{^yih zXD+DlZ%)q54{=rt-i0(Vgcxv%aJwd6O5k=8Ur@L(mxnFYGt%?)LJm!Zj=Q_~g?WSz zzMQV^As85OE1T&yuZQI#qX-_pEiuvOXBIfHN_Hfr+}qqb?Mb3iR1cp=0_&aYC)1Y8 zxP>}>w-aE_x74{6eov%!cdo?8P0Rn^pLhA~!5Lpa94>sgUcZZ(&q^UIvT|z0<JtEl z^s63rr{(ijozhf4UcUeP-bD=8YhUeJYX9YR?f3iQ(fM0TSH9kO-*Vdq+1>B|{kl>2 z`|YDu`~R8p*?!4pT~qUcS-!{gdX#b9hrjY72PXbp+R)O$qQ=T_^O0%v5odn85Qznw zY;UH`KK9!DrdC?b$154OsZ(FrKijXArgKSjf=9b)aQUkV>9&f(Q<o>t@!30lVzry_ zr<p8b`~2H?vz3`v`I{Z6T{&Zq{$kOs%=b^<c=v6lAM13ZRg!Z<4$QqcY1YaU-<BQn zR1MXhlTu>!blRth`Li>t?pj&i-L`w@{)q>g^cwS?M+hke&2~|Fk)0VgC+VEVagl@v zJ&~7Bcz)$8<MBMk{-B`CsXw*-pygNp<>$_}UflW3J0$)H%gtjeMX!ddYx>mmm;8BA zbk4|#FR{boN%{xh1|A2;u6Z0y+oJw={JE^wvT*;+l<x%xEYEQmy$tMd_%`2G{AB=p zT~E={-yaxXncSMS<yC6VwUs&txD+O4tK0~5Xge2HZxm?%_u%%6{yT&FOWfJF{p`#6 zb58xy<tJs&-k2#gJ`kNNu=j$U;Bud%VmBv#J*fU+Pmj>o6Q)Inw{8?ym{@w=aB7)p zuD{hq&n{KX87@&)4>D(8mV3IZ@z(V<oLg`8pO~_sWKVYWjQ1~>`d8Pgy^j2?QhG%7 z_MERi)v@`VbH3T03`*^N6<-!o;ndi|^>PZ&_QD&!8qD4<PA&(YJaZ|SWBFKZ$DYb_ zyBNJ986{4>_;zVUPO_D^mApZK+R;OarVkCpZ?KmJg+Dz0=uY0oqi^=EuvK=S78L4! z&P4TzrGt}}n8LxA*Y!>vww+NW9Kbd4q<Sq!*YRVg7{&CKR-9nhPB8LL6?*H@;N<uu zk2#iqOLf|`&&s#{@38&#t)g;E+^;J)T_e~X-|gS`pvmIHf@ZI~4Rge8{<FHe?VIdX zdgY?K=!NaC^>!b7)U9u3onLo!YFL-*^a!QCiML9Q%}lLjU0nDzG+b06@j}*hsqA%u z3{ub1PG8TF-2G;kx6PjmhYL^qw^qs9@$gv1-E-DQr>(EeJ+r4ittMrD|B<!Z?}=IG z?61xF{Al`7rTO-%QLAkgf7Nd&Khop6n@Oni*xxe+>6<>h)OlXMa!T;eD}E*ED>kPc z7vi`wu`R{>lBIt_(EqpdQi9dG_ex~0xpGQnsvFa?l(bi7L1vO>zDFk&c^?hc-n6kV za94t(t$WfMqpWw?Dh7d|V+1Pn_i89Lnmk_de4X!{z}Nf?oZCXY`b84U{Ju2hZc$Sx z&-IeM?wu9<YQ`FSYd(tz{SL+HN=GI>^Y+l6<fyRQA*^Am)gtD9(=;2dh`27Vu2~l= zllH*Dg~?gp>(oc_SjPz)GvA5teW0K4N3j3RrV}kCDGH}{+b*xG;i#G%uMqX1_@Cpe ziz<;>wzqQauRriIV^2_4QcODJp1Aq0vN6*JW&MN+@r%zl=>5%ZH~%*C&xy|af$l0x zniw7bn7#eD`vvPEkqHx?t(Bi}U{iq0$|>4jNB4UQl`Lv-v3e!ed;K-{<+jb6|6S$Y zn;rR7!pA!H_q0+r$LF;tU!}Jw)pFIR?+VCe-(7lW_uKz_?*Hz!R9M%y=*hHyH_K8i z?2Wd&hFxcI=bV=nFs-iG{Oha$g@;G2B!1@^M8@z6I&Ws%(8#s3Sc%6&hvE2a;oJ?g zUx*01%<a2hF=s7{nc5bErKa3UjITPrE-!c^p>%1&@{>i+t_J?#Q)t@NYQ`JK;1H*9 z)M;aqR)dQ0neqlkF^9SZFW476l6!kO?A%t)bfKUGHKnCXd;)nIjy_S{&cpxAEdFju z*3R$$*pnY9-|zfZ8Sa+-Tiosbv-5LfUGjc@n|(h<gk8SIW6h3BU8%iX1yeG_UYDFW z*e+7w9_jIxNl1U^lkciY#>vMXd(Aae6gm0LIw$_u-v!M4TD9)mdiY#R?|eLdG;MaC z*zR}RvL!#T%M~R2dAzLth@bVl5GA4O@#VFNO<%6x{&q_{Zo{ox7yr)`Ui|fq>7xI$ z-&dURymO4Db$axMvQug^J9}I**4tfIuQM0>oN^&W%*W{Bq8<f}%e6mqWUrnG$T(#v zDR^GP|7PV=KhJ;bju&YyXEBTY{@y|^Aiwm?-5QB=cm7-Tmgfn2a9(A%SvvV)y43N! z)t4AL^Hi_hx$m){obwBl$_vLeCJqkglh>>j-BQN?vaN8LvdibCwl}AV{&ZQs;b%~N z@$T0p2dWA;7`?ZiYwowZgK5*nWpX)u)i0S;ZphfR=w{t*4ivYY@a(YP#mG6;7g@H& z{W6F?^wD=x|Kc1$BZnhuMN2mR>Tp=#X~sM=qJ=l&L+q6JpqlbK8<!{-Ke$=tXLn5Q z#mZa{rp~w&r+F*ar$%@vi(5LL`6cV%aeL{!19P{mz2mECZnmLRCz7c_$+s?CFG<wl zGTYnBadn)P%C4?PCz{Tu1WRn19G50tpWLW_B>uv^iR<E&gl_R}@baI2v`I#+a#O|K z=Nw7zub)2_w~q0Q;S{qS#*g0Rn{70nG>@;`>gLOYa<^NX=W=FL&0l%fcBS31c|TY1 z<(MX{)UC<**R%ht^dgBJ>lX9hoF{eX+JV)xZ~16U2;l5G^5B`m>@#Z9IrEgRKKDpq zwm8S8oPOoW(iJ{UR%=)0RhaX7Z+RvuETuGkcW3B>Il*=j>|Y;mnH?ijZ#hxSDR@pp zOJ4zhy8MF$F_tGUZ1?E$U|FzmuY=%&grdT2jp9#twI@xT?O~|CNL}5hbAn=PPEtTq zk^S2B3q(FOtjxO=_pbKALkXKNUnFdPiC?UGx_MFl^y%mB{q4wkx99b_A3t~6>-%)S zjnr+adz-yo>Xz6h(Zbid+o%2eb$R~(kZ-H*RV?m(eDC+W?%Daj-1j_SeLem6zMpIJ zkF7uV`|2B6#dZ6hy|Q@rBH8PIWY1E4&78LzKZ`bOJ+Y`;r1k4^?SCS#*Z*(2k@NZN z<4O19gG9D|-;;XY{P?5rf5wkyKX-e5^|kAN@$&wN9lK41N;?F9EDUM%to|0fL(RtZ zc!7bDgHi&=i=Ed$JKa=s*P1&ka`j^Im2)P|T_GM<?LU_(w7Jvj&8^b=-+nl(RWV3^ z7Au#dy#4BT1`|~u&0?uDyz`eH^nP~id>sG%%m$Z!*&8<3JQlEXmT;>~+L$_fV%pBn z(`zcrcoZ|{viwccyR0Z<Wp;U&drw8)v`N1<Pw!}{x-h@=uPc+q8V~DTv-{ixR*6?X z-n(<Hb@aMCnY!*ZOI0iT=BBT<jFL(E#~9rg<Cv!O_lB~I{O^T4^P`m~q_dqgE9ke1 zsL3(hRlVV1PL<p(&W;V$JJr^dt;=RwH9OCDX2HCd1u3#Yy~>;~7>s|p{`}Q9pZQ7V z{I{8|@eL|RX1(Bf;GFkI=394uO1P&T&)@TH*{kiI*k`KOyS_5NnJq2p`Ttwp`+(^_ zt0mXv?q%S7nz`A7d*-C2TMGXk4S)Q&aF*cpoa(0LExW%idU8u_HTUlK>6?CL?tXpc z?j5Cl_jolAI$J&dxq0@#H(%r4o8|Q~*79jE6#k05HScG}*|k4Ac6{6Xt@l+<*Ba-y z?@NN$bFvCq9eN;Aw<O2n*qk&)r``=GPAV9@VBpq2UXd)A!#eBu?d6N7`FXEjVSCwR zlb^`q#*7U!ELd^{f|~5wi<YVsDm^WnEg_=Zs$6nH@tUVvpTVLjDyh4~D=zTuwwJu3 z_x?doWxLUo(-Xh?ysKc=NO058=;FR5w(8S%jYgR>aku0*vn72vE`I#M@_LE2;%kL# ztM@4_+Q0saw))4L&*#K0V*J(kMziDU^@!Szsq;+(ew})hWo>>oqQ>p!PEP5Cc@c9a z``Ku|+xh%m#i63pN8P0JLL4Mi^U_zCUXL)2+jWqw@LOcMSXpwX>a?C-vwIq05p}H= ze>x6#e~L<fTYAchEBd0=<TYW@nNMF>zvaL9@22X-?XTM|ZhvoP=2>@ThMca_MDuL- zHo22mb{uhAxw}K+!J_poJKwq~>C6#a5TbC*%T1w3=vt!7`%_nz%H+?Cnz}IT`*W+F zDfMTWN{kbaSFhj2$RNX_m{&ac5_`+m*eyMd$AS{8CNMl}*FK(T)T22&@AVbb;@Ifc zteiX{)g0DM8?F_uWWMZqZpyThDU*F(9_?GIA23;AXKne~{Hv?WM1r4ZvG1K$HTT_T z{kb2{Y!6R!<9u~D_tL|VI=A(c51!LCz3hMT#pd$#kXw5_uPr$<Wu{-*dZUw@t{nV5 z>A<IbDUXeB&3*0l>Ag*ap0U}anSMX7uC$lzJ$LxVl=J0`8aJx=R&h8?TiJ8xYQ~~Q zmvamYJVjb~ChQA3zGY%Q>kq}UrPF_(d4E98;pjX?liEIoXVX<W9<+aay(Kt|bHU2D z9PTUg@130fbh$_I`S*;P`_`^z6Wx3M+D7}8@5%z4Cw!h;v{^|(;HK`>vlH3=_&G%1 zXE>YU$oA)2&h~v?0vAuum=mBdk@>=db>Cl|e{0HV#a`!^(0iK0#qY>2#l4HZmE5qI zzf$Hai>Lek%Z{f!r>_isHLdc=KJV67#<?etnwQ!o^ri(fK2`CPR5?8N{_1wm30#iH zwI<JbW}@gWQ`Y=8<Nv>W!w=66FWUM_cv1fS-1OxfODCP(CE~twz3AUs=UiQ{Rkjw= z3%9ek_ifkf+qgDD-ty|LLz(QCL?yrKhol&1CxrcstK`-<De-eORQX%GRF>^;V!ZX5 zH@CL@ExSE^i^2WMxSO^7XS%*UOn3eB_1TN+=gTgB@AGZ<yR>fI#fFw&=~cl}hMQO) z=o~q`FWQA;iD8#ow3b58bSq{b5w+IliQl*HTU6t+wC8<{2~W$<J|?Dp8VU=OxO`Mt zGQ?_6e|7#9Q8oYkCz0<PSNDIs?`bwgua(&*YchvovO=hT3y%lezCZ64HQbrLGO<Bi z)q1(jjfq*e7&<?Ge^{W(@F~b>iG_mMvP-Qe1lOjn*m&fuX(4EX$(5JVFH5f9WZW7& z$85_#9ohd|?(elwe|hBk5#MRy%R8Ud{@grSblv?}=1H?8R(dX<QnPLQyUs1zH?KWR zxy>n&6<Ky_Vf4<FDa-s0ul(DrQYplsX0hsa$nTK3=kjG4PZbGgEYUwID9Xv8q7(ML zfAYLC^Tw-l+zRvsJ9DI$%Q3Hir=->qVP<|%`qSm8=xw*9#O$VsC<uy0vU5ZqF(|rT zeCgATq*NwWBf}+|H@4e7?x?<Z|BdSHvv#L~95uZE3w6FSy;^Q#Y<qn3{69jq2iHBn znZ{Yy$fL4-jl|mrlQYa`cDQsZsb;)Ut+IINu&B6cx%2#Hh5vpJpE}5AHtk-o?!L=P za0B1OGOej8rjvXnGn1}&ZS)KGbe(kmY5B@Oo91dx{}nm^>dz|8#j`SBZhbrF=eM)} zI}e)62)(`izIWgEy=qbZ@>Uo4JU-a6?_GaY{H+9+;`H+;cJI&swy<RB-ToZO+4s+f z+5N43nqc|#XQcL*Pwrpml;6;NwQP32-fInu&$sh-`&zmueLE+2ZpV(FeHrinKNhlm zX`Rsj;&#E^<7YNsY;dvN7Ig0b;{k_*1s%Fs?T<F=)-g$4TKD8G*Z)~LizL(}pB*kf zbVN<2z)>;K?b3yo^RAm+rc6=gId@Sk=vj;RTqd^-(sqk?w8$H(-IbdBQDdHo(pS#8 z3<3;}f=M%SCeG+t^1Gog#KGwpPlt2A%NduqlNzP6_b%g}FyT<bo(TVzrAB>*HWEge zvp9t;j|Fi&FPUile14$R+a!y*-NtuPYfdLm3(I0$DwF9}zs381(%NTFQ{xQI9Qr76 z{^YJ(_CIrZ<bHn6i2wb*LshK*+UM(C`}lK3*Iu3ee}DMD*XJZ`9xOMkI2f<|Zl8UW ze~ez#?p%v4%yGvVXZEjrp8NgC0lWL1-}L{>{B_@_9VN{__lxcNb$N|0%jMp0DL-ua zZ0q0EvR6xdjxT<kb$hnaoXN#@bLLq8?cR0fR{G1D@a6W#%fI!6q{Ti@5_6ZfPnOU) z{4-K{Yqg2ORn5z9{>zw`wsAb_^_wW<`uyg<FqL>W&*!r`EVphJSD2V^zS{D~zh%*> zH3gGyhJTwfcbT)yB=`9R|8jpUvMX6WrFehzX=ag*eY>x-F)h-r+rF-)CspsnEJvHF z_D@SfJ>NQeDJfgNFMHv`V7Yv&V)Bby>+(+OaQ@?cute{x;z`Na<i$7GZnD=%P84~| zHlbmy5BqD^@D(3gm^vq_7|eMbYkhXBvE8kdH(sX>>lCb2FM7M-`H?p)Y;(O#|G$e_ zFzNi&hLvpmKkrR(wT*1A-gdi;uX_L7*>*qPX2gHEo{{_E%EB+p+!yh>-YgIJyV=os z3)hYrcduPb4(_(PZ5eZg!9z3ECP+-R<koq=?#cd^mhbkz{}=K8=J~$s@ApNo*?Mhq z`#V9`oo{w!$XB^-nYTafi|oH`8KrM-OevjpIqCJTej}c<hR<Rmo1HEu*lWshH6CW2 z>0P|2!6H<IFU@>rHTU-?N=%X$>=F_LXO)VJ%;eNzN{r<`)}pKuAF@tosrSXAYflYt zbvUH7Df?AkRWNhRKhID!rEzldTEDGKDi)h$65lfPe6m{@%>A&|oiT96oTMH;g|xc? zd%cfE9D7^BAQW`?#9`I%QU)x2jo#u4o^I<{gr?{gSl&t9b7J$c4NspIXe6JE_|Uhf z$MwDZ%Sq08J%&O(>$XNzN}lIgz`R%D?w&8H^So@Q+09u~y`e_JD7)g-FW)P_+4lcE zE%E0He|y=c+bMfHqTlr$Tt6qM>;3<m_55!I%D<nHxbdyqHT>J#y{Sh&dAt7JaysdQ z^>f$zb=I!;Uz^Kqw0c{-zN4{rzw}zs>7C!E{-3eQA!*T*yHkv}sveM2)jU=Had)ZO zHPKx!OkAR0^_|IB@wfS*$_4HT0ewZrN{-tZnPh6`M{aNIalE$i{qy<tbvGw+O<3UV zD)xinjri}g*A$NkNPJP1KFjCTJ?UMK!IPZJ`zsk1b+8FEPf7XxgKyE#lB;vJ?Vh_P zFn~F$MfEqM2ZQG|lb7;uw@qt0yWsiT1Fm@oL>pK_6z01mPrCAU+rDB}kCNz>&;D^v zI<ThkP#5o>|1Ub8PV4&T|L)5S*$HYde2aCKxmZUzuZ(8<UHkoBxJXmyu2)&Bk8L`w zWBujNnf9a)2Z9&Z-qpRh{e9WR@4Kekq}94;O}1q0EIDMnwyWrL2lG*-zb6*yDB5ue zCTq94pSaefdrnM^X#xYEhURNd1H&MFoq6Uz7t~ls&zK^xm!s{|QkTf$goShW?p%A? zVCCIr!37N#J`OFiwn82pXVdDk<)#@={5#nvv5DjFqq#vzZ_c>-O-Xvk?XSrBF=|dm zx$*AGfIVg+2X0I-ewvaSV16Loih=V$qa!O@>!Hs{4H6ogwn<#Hn!_UGFr(m8gg*E4 z28(XX-tV0|8t%uI-`%<)``CA;QqR429z1s5eNcAW^*77JWq(dPe2TAd?R0x(w*K7; zZ1#mUU*>Ph-!gC8t2e*d%6=4e-um|chqH25ZbJ8Yx9sn{i@%;xKYE}qKC|Hnlj(tF z>B*Dtd^HwVzWyYA(&Cx1lgz3XUH7;m$eFEjqkPwyUF=Wf3lyA~JPQ6Way~EGczEYF zW=BOO#b2kcoz&Uz?drOaO<Xl@>o@2BVRmSmyhi2-k93B*!S0Zc%s&JVu-~<d$@+Ik zO7It}qt<E1tl)WZ=jKniw&d;`5lKd&Yt1)yhWx%!@{iAG>-7vTW|e1Q{^wVJ=h*zd zwj}Y_?`^e-TjD<NIljhn#+y~D6E<8+(ztW8kCA)fZ*eKF`cLvJBkFhPvGM<lJYr;g z%CTf^X`7f~Y24zaW~$AT0+lB_o3uRUubf>VCYap5R4cLR@8$+C7p4gdREqxRA7D_J za4cz4pxPqI8F7BfsYe92YupUm@6d2X%<EVRtI85?&Q34hO?x+Nm6)QakSKKR=Zeyj z9HU=qi%lfEmRf9lJ%w*6$Cn+)r8uQkI(FR%J0I35HYf3xrh-GWPto$N8?TjGF>s!< z703#l{rAadqi;*<BAuP)ty{^UA|W3g+O@#&$PG<}lNIN#m?pC<PPbvcaA1SwkrPtC zmGaEiB+OvQa=VwxBl$bR=Cjun@0m*RK|E(WcNT5E{WNCowWRJT8qRTV_y5&qGrMj7 z%Wix1m$zRYbyTOh{hnX$_FA+5nmzM-TdiBu<D|L&z6w?j|NhKcDJ*i^i`zR{RhA@O zi2QP@AbkBxuHvQsv!<W<F0>+ecH8L{C+<#swN-Pmp!Z%El}mXScb9m-^E=|F{Gupv zuZX-A=LCl%Hw@S>_X)T(dD@HBdbCF^V|15_KHt}^)g8qk#K3yM>G)^S8xGP_E~I{0 z+R>uHU@-aiss3x<I^PuRYufg-%CGd{>y9}mRypupdaESlp_kz4)@nNE+U1`-nqKEG z->wv@oy%o0?U$KDl1|X9Q{QcV6rA9cyYarI<EVJ=zrW?35zh*Xx4K@MCO5hL*NLVa z(af#?|1aL~ey2T~{r|}s|3CM=xc&L*#qa-gmBlK*Y+JvX_rJz-k1OAwzOM}0DX>gL zgwG&V>Cu6ShJqRjf}Ah?dW^0eQd#=N=ZMSueatEh!hvjl;;br1PBlJC==RXKf2~HM z)>>o6lR4fAZXyo*mc~w!s5+%}xNBy+^~Jd%?T*1OtHlEjdoJOyJSKKvw?-C2mye4| zgFctWb+#Su86wvAc_$mnHn4=9nk7-R<*MOw2?^FMR_j+Xs4PiJy!k~vj6cC3uJLZn zeMSufyG7*;4cm;vF8ysdsoZC=$mMyDYJ<zF1(t<xHXff=dxkMvP{-|hl56VZ+3$Dn zWGG+Br5w9$^%ObNYuO)WKR@z7yk6*UdYw{Kw#~NxUY6f&B{s+XU73-)A@56l<(IG0 z#ljvDDW2DNJgK;TVB3r9VXI%<2c6;E%~JH{N!6jM?hEG%Lzmb1ACuxt^~x+#W4rC@ zeo^ryL$<uN-d4{mQ`fSp+>rUo&Tzx{A43qcpwdzHhwkndJ>NY{C_c1Qb@NRQHx?;{ zhqc%Il(;P)=BVAB#yz`wV&VGpSF+0lnmQaVW-D~|oM_E=oPU{n<{}-@ZoRa_49b~_ zw{E^}`UpA*qdEAgCEJs}-)+~t{`^{hvFhLC(|H~nKb&Yk>Qi$0RMNY~gPSH#{(qG( zH}Zq6gki;@){Ay;FKtrT^Z!ISU*lXsv8BCY69ekKl-0}LStWjoKCJMG!6W5_@zjN~ z(^_0CE#EP#EYS{(JHYz<q-_IBI>%(kgC`CyxnLkS!B#<0m$m!+O2bB1l?FC0-rtF_ zO`K;=hWPvK;q*T^^TOoBKgGTQR)2q*2Pms}b#`o6G2JSYops4xnUp>iwzfx8Kc)Om zx&O3JHd)sEGNZ?YnJ0L|_U&Wv`IH<Z6rwUg;l9nq-N9jHQV&b6U%%s(n`E)nQu4mj z@5)Y_2#=EntGE9v=YKHa`E7~Y5_-R1MGHTfl$IddUetQ2^~zet#3@rJPJcdSdi8_; z(mx42#pSyn&I>e8F4CFKarnSH_UWbkweqrw3x6L-;Mw#1L`Hl~sm_<lwMt>Ne^$7j z_f=SEbV<*W`ODP8Fy^k47gQH>E!dfO%R}L9`rd1ykA*a@Bq)jhzn1BDm~+wej+UYg zZ%cSDHSKk&Vr00MDe*l=%!y?J!-m@aC(d>oGUw!++k955fuo9PVjAzPkYuYF`#$mI zCh)&K<xzg|tA~i6RTJ;ZN0nu=g34a8^LN;qvpJ-RD*T;b&M?7L@QY<Y<CDwkC2N{r zyXdb?Pn^xbe`JBF{H4je@0u*li)U7O=9Yi{b-9g=_O0;0#%yJ_8gujyW^9Z5_T}bt zuQR=`u6B34e&NEy<8r5<ny2oUyDHPg`X6x@qw3#ww94&0uzTI(hz1tdsp*atVe=BS z6oh?OwSHI;bMVfw>Bh$mC(U}qpv=|0>7$(v$Abi;DD}kcYzJDLla-Pdx7xLaG&0Ul z%yw1LkY#6Jl%A8py-(Bf{eyyMiLO(eo`<yy-!(72CGu4H&C1wYZ|{oeyUlD`*sx?L z2YWG}X7v9PosTwbJ0jJPw@C1ov1~(2nS}WwV=?pO{Sr&|Slsj5of>m&Q?_uy=^JOc z6%x()eP;hkzVYeOd8dcR^vk$89&DIpU-@)hK!fPwr<>++Tu57Uwvk0BXx1dl^7&IN z-6E_+0<5;L|91Yr2=jYuqo~<->c94H`2FEm!82!Pg-4gNxeq4R9*tPHlUL=1u+eja z9Tpax8ZVZpDH%?S%YG;6$@JB#bB}tX%ce)ADz!!pEk={?7@gbOADr{t!TzR-neQv3 zyRXY{vYp_uzx?f_(}MMDI!kWqum~i!FIBx9|7D~0LAFQd%gZvSFqJ-?8b0m$)RSsT z6F%*ku+y?@l1f51gU0L~AM9O}UgRlg1YcgFb@}6~x0Y5+FAvQ>SsW&0a!zxWNz894 z1w-@d+PJ;mA&>sGFRJ~u)bPW`$ETaJpBrzP_jSomCbhJ7x4D)V)3a|bELOY4&+l@l z^8SUg_2qZuYj@`g)c(#9R&1~2yPn~&DDA<gyE8b1dAa;qTLO<cJaJj9BP27U<5Kt& z-e<0rmLB~=k4l35WY*td61{aiN~1rRBd6fllAult56M9J+h>>*rp!ODu_&Zy=K`I> zCxk6itdxaLEeo+c+%W0A<xeF;5ubSvG<#jFm#hkin3LRn`cqDC-s>BjD!Xdy;_ll| z3T7+u<eg-<T;6r7OU|?JSJZay3;NV^@m%-EDO?Jz{1Y}r?2h{}*WnNwThBD@#+Jg= zhjmPx$F9#f$$es4lgh1hxt^~^=Fgr;Jm2Y3taYBx=Y-w+@5f+k0lN3?jT5bvzmxUj z#dF>AqX(k-^|RG}=^Uy1^#5hk#aC8B6JA_%=>InF;=c2icNjV^s$8wH7vr?)VySu3 z=r>{F?5Z<`|9JVPz1YX$yghv0$*Jd`?qolCPF-<&>00FvTk|KB*}slvR!*(9JME`r z!WeYxQjL4wi=h1H_j7k2tFFJMd3{aEtAkU#d4Ckyx~G?{jJCbX(E0J(y^zX#3yZ$n z3N*+6%;c$i|0iSZj*^?=ci$;Zp8HH?Yvwmg;cMOzCAJ0<g_rA-K3p(9CD!vTO8>RF zPLoXP{I?eyjugZueR}e+(eh!@?rk9|J5L8|O}KMPZ)*Sf&l?Wbw4aQ6FLYJ%*4KMB zM^5bhS#B4cKYe;vfsuIj)!dKsY~~ou<e2|dv3PES&SlS_nPt+Q9y5KvcCa{1WfwZR z`Rx?vciDP-UH<+5!>6+5;YJJp*=^B}6BSJ_SjQ<Oeq4MaHcrge>p0`N#*Z809>*#h zR(#P<`tVuZ?f&xe&V6&^jQ(Wj?@!lg+6~&q*<0>nQ`fmMZ2cYc?aD&;X5LOnb3N%f zpK%NCgcqxR&zh|s$+UNwnQzh7S&yoxI54YJiQJh|bH;4VcN+ob`F|X@`0royX6C)^ zhr1VjJ+xJMT0~9=d!5rQo(nb~0=DSyS7htA-v8$2y{dyz7ynN+pQf92cwx!nn7s_0 z7f<Evn_n$7<COzbvtG<QCKa7s-T_+m_h(67)Se%0Y`mYjGpAp~?6vi$NrzI}r`Y^X z+T(EOr)ZhYY43j<b2(iPw{^Gmm?$0J?6#=(Uwl%+`Sq^<r^m^!&5gJCqb<PZaO5w) z+yC$P%$G>--t)|Cf`Fuwe<m-dLXr6Lv|g9#bFbgAdnuIBaAZk$#kze97=?;M?|eRZ z`ibb>(t4gZ{~u?}|JYu{5tIE_o!_w7`}~YMA<H8h&YY3>^D+O_q5K60#n%75ziCI+ zu^Ej%%qq{C3r+g8d`cA-zWln2y>fF=&RX-r852)S39l@<@n@rqNBhU^Z4352yOxyw zeoIF{)_fDSom(&QF(|IA3YxU!SFgB7hgCt|Q;F!{q{jU#dUeH~pEAu>VB7X5=E$UO z_xtVJ>)vRGM_5H=uM>DXS+B2=Up87vZ0**tiZiuqpRWyFwBu>Zo5gi<we0&Xqx_@R zy?JwG-=nso`rotak3LYZ7pRrLsTOrUZg0)Cs&i6;-Fh~fzM{PXo>$!G-acUFkQC%{ zPsECk)5IZ3=Fn_@`P_yhH8(VimwJH?ak8w}xyX4Ydd&`>FS(oRw#?i8EMQge{}bJF zcdwgovaCJb^-e`KPtE5$9rgDuMR+T}r(N8ByG^kBe5J3;^WRbm7fboig!B8bD<tyV z+RD86-2}_m${NAX-EX|Q9=3DtZnLv1h1;x4^75EC6;3#Imi^nX%)K`5>#Fdn&9l_B zloEftWQI7fM0VEQ2&z2RBUzkUvu*u;Q?@wMPm%()yYm7L96rF_-}%kI&OB+Z*sg;A zlbRy8_5S_idGY_|{%OYQx9ayOvTgf)spI_D|BvbyZ@u-x+OAZ)=a~$6O4WY7>IH_* z%Dc?MzyGm$_^h#69+t`6d~x5OUlM=rbY9%|<`<KkLH1hS>$?9>S@K=eo>Cuca(3EN zCHa4q$3@NEey2}&`TeS%&#*Xqy-4lv_fl)WhRFwO1v9Jcn($X-N2wJ<r>4TQpUb*- z-q>~TX6C+?cbEbuswr(`DETCkoy4rNETX+P=q?-R7Ku0eOy~T){l530uzugRDT`PC zvt*G9i`<q|dLt^iwWBn=bK23i#X3!T`s_+FP32e5Ui^3XYwE?sKiL`HhpwGE?E>n? z=C_Nxuh~%Yy|ng8r<&5m%`cvHvr8)&#+Mw9S?$8C@@&?M_S!%uPU|OUUjFH=j6VJB zE%ziA2F}|PzHQ3B+@!L6<)yIfJ2FM#fA(CvaLwv%T6_D-OSQrw{s~Ig_2-mjZmBOw z-15JwxKnM)(evD2-Pi1N+7cFTm$dTe;;o-H33ls=Z2aH^I$?3f&wwL)`CXz<UD~?c z?f3iteH%91KJ=<=_Z+d?Rc}8pe!q6TR`mI4TUKstm?SvsIzuPttM8Q|pe!`;!SjpR z(h7$CEdNhr3wuQT$j`oa?yd3j+_$r~>vsqx94?-IgmvTJ%WKbW`)Bv*gt9!hO39YH zhJC;9eNUR^d{}O0(d-j1)jF2h8b0}PUaF&_AneSJ`Y@Zv&l)Q(^1hA8Dp*(%ll`!W z&82Zx>8{|p$FAf}f9v}`|9sc&-|0uEYHxW|p8e(c-u~zejtT~q<Qr2nuk6d%p8SlN ze~PTvtn62w2Oie=N&9|Vq^P$nPTtIPo|TY?g5uUQ3q$6ri}=r-W@4JFa={~^ZpwkA zZe6n)7blJ@FYEj`);PLsXAeEo-<$W!WEYFh)_3w95o_*>d-HueZuFh+$f55xBHZ`O z{B^1x$6l=ee&)sg?+Y{Z?}+oS-BZG&vophH%cr1^A3k{>vF(r6c=w{(BJCURu{HY^ z<}B~rHzy>w`qVMbxfv(@>MF(F-%?${C^T9B^)udH79kId|1Mf53);I(gP^z6tQV3f z>}~mwF85$6dzmTMif}{!zt5vCG^|Zps>8cwv8t>W%i^nDW%a9Fq;4(Z^;`EYEwPM$ zks;sQZ8`scKATk~6p_@adg|K>-U&0RYOi0Zc;%_kc!bydPQaoaXCJ*@dA;4YSDN$8 zd7*;7OH$cu3~w(xAE!LAa>}6v-<F@d+;F_;&(A-19xTfXj%VUjk@<BsCfJ|pn#Y<= zr?fx@#$LZt!R4jU*u2^C-LBW`iiCEbpJnn?^TtfysnVQh+JzWY!1v@Zb+Yiyw7PWt zx;Ve>mw=o9Z@)i#)gvL!Q$aks+rwm~@8?zGRrTvTj;va}?iNGmJ=YsHH$4*0fO_?5 z=jPmeamLVl-Oh~@9h4h4dL;C%^j##hNKo&M>$?5}8K4VjDpecPt}m-p{n=TWzd8Hz zkrRblQx7%%eHFf6N_*XoB+Hl8N}xL;wDop8Xe#phb}M_m?L=4q?oC$LJu*TjFSF6z zRW{Eg$*Onm%PZ3=jU?nMUv@Ys&Aiv+6QR!-l46qN*S+rf5uxipXI@Tx_^lv!F4x;r zRq3(T|NWAK`Okg)61#lPF=gci*Q7XC`ue&g#jWbUcW<u(11H~G&{;i?OzIy?-=Cqo zqM6^$;@<at->2@k|1`1xi1@w_tvBz#-TVDs;e$r@V_w>8L;R+nGXkB8cKl(x{6CGv z`6ZV;H{LC~J@x#$z29z4n*S>H{;zA>pWV=WU-y0Y>C8(zRkNR;E!lJQgMQ^n@1*^I zzs-I-BYMT`*HO>DFiDr_Y`;@<_+HVso9V~TS-+P7okFqaA#eVS+Ve)Ib%bZ<@2ixl z|MT(b=5xC?T6*j6Ex9S0ayxfB?<aw)r?@?C7N56$e7^o)aZJfY*U42u+l0^TeZA$f zpZ5PN)ph%W^6!^i_DyZ(`XtkT?@P@*_r?$z|H#iyWv^EAZj%qK-@jS&XXRhxzw=j4 zYMt0u`0vX1TPH8B4!&9Bb0t}^{`}UBC5%Rvmv0)&p8I}E`kea=@xL>_2E^yCdA+87 zGE4aTSuE!b*XYhWIc0y&|2<jW=I_r|WiKv!GUJ@lE3@qQZD;>pnwTQ_bn4%?@ALj{ zHe~Fa<B~i#<ZD%z)g;5^r%Izg=C#;Le!u3hy6o8J@0OM?CI`;XJ9TE)>)CT6R;FaN z&ip$g^?L3r6StK!tZvUef9-_*cKJ7{2bNvh@pjv7H5reTy<2pzbF3_vI{on0g!|?{ zk0r}Dax+cvSpE-m*TbKW{q=Kn=fsxXR0Z89FnvGhq(h7Ue?F(zKYt(p|JU`6uh;E9 z_I=;?z4IDbmh$oNlovj*|9R5i?o{M<_KH`GyMHk->-{Zx*eZSubeqVE#+DUMZ%<r* z|MP8rz4U3l-ETUYAI{2N$7y8oY({cgzPN?Z1cqIEZr=%74!Sz%spacz&^<d9pC-@$ zv*LTrGvoQ158kd=+$Z%r;mxCS^Z$KW{t<K!!IGzz{fSykoxk7h&cD;W_Hw17RkH5f zi7QhM7r$M;?ZU&CE=&8KPq0imee`FN@G`I8n|Ob@?#`O8B72&}|7FSZ`<bt8+}XZv zuFSW3^I3TI`gu2}A6v5ja^|@$HGRd~7H<1$THrB1eO1ccl>L&+Z!VkSdUyG)x&Pw! z+MTl9y8rTPiTNKUuNAgfvT3EGt5u(AbD;S;?zwj7^FqJ7{IDz#K6!0T-PwEJUm5tP zDQ6$w9>y^@ustO!>%hZ#QXW@QQ|qst@wgXVKfPhWbk5apPBI9+nlf2mJ=*qVR$20z z1yx4B3sz0rtH98ia<x}|;%3$9F`G)n+2xJTcpA#<)P1#1-gYI(o3-pO=t!_PTd&92 zGIxS5^Z7V^|DV*p!;91Yy4t%qe%kfpQTJof^%br+wMxF<E!SVLm`w<DZWkl7aA_}# zO5NAh@kiUF^M0(j9#i>r>c>sf_pVvuQTVL-qWs=#(i%0-t?x^oumAVi`$(E2i;!fm zf!VtK|9)NKKdryNrtr=s&)1>*ihu9ia(#}%=XapHVl1*BYx-AuWlr{<ZLuJ@RpZg@ z4y)MmyQNEQznnUyy<P@%Ez=v1yUqM|66W_Rk}o=^IQ(aL`fC$gsAQ*y`qg#u^F;re z@EN_W&HH}4;QeWhpg!mCR|LBr%A}ot5&vuE8UdDb&KK_Qo6S`_?_XI{;~j~WY9$j5 ze$77b5^wjA)1Sl4Dcbt)=eWgFh51yn#CE^y2yxiCc8%MW-HyJZN9OmHzD-D~tm#{N zn(?;wrrFVxjef6m+c<?!?66p4riewYi0`)J-=}oWm-JhGd+x%cbB?^6QGLub`B=}* z)T@&h%r5g+n{eV^==+kOtjMbm{Y%ptd={lR?#evgRQ0}zK}90dXaDOt#pgQ1_kEhW zdG5#3>#^IHyaJv0s42)fvBO(`ugSdcd!A4Iy?)oLRT1fPOP@(j2w>NA0p*%Q4;y8^ z{bco6aeL!&Icd=0p^w|`|0IGA_$<zqDqO<g_%fJVYr=x#z3s;5Z8k5tzxQ?Q`!3Lt zd&Qy`dbc0GJniaA-E*p&uDNkNjK242+Kr@c-7Z^y>#+2&p6`Drf8AsC@9+Eieqlcg z#VzfJ^+o%IcRud37PDo}m{WL6Qnl##LKWr*F;+^SoVKi={A2giY0;-<OrOOuq2rY9 zz8{Y^U!JYD+V<|0+mfChmnO+Ge^FAMpb9$OGM$-q{^f&Tj4eH8ZuxxS&%51Mi#!<? z?)_sXn7Hrjuh;A2^O!aKZ9X1(v|4f1m!*b^s=|>i4^C->y1leA4m@^=e=?Jbk<`SO zic;Q;j&)X74v7A0pJE-{cr55;Wu^ZniJ9Hgcpg<gpDPYJNw#^i!T#+l`L3!>VBj(E zi7?|9x8ws|8<zb0?e_k)+wWOzXuI`m_x-=?mWX;7Us(TX$JeLb@qZp&ddI`L-00Ky z{r|qMxA=M`xckw>ZHzuoT&_>Q>v!iQi_poG2@^YKZdzm!%empiYtX^0nc5PkzFv#Y z_maF^Y1uBuqTsmiKtss9zu)iM+x@!OKW&Pd&%Q58#Sc1^`#L~*W8-<d-&5}2|JYY9 z5_aZJ@z-5$NqYo2-<KsQ9DnsxzrOO%pXc`T*Eg^nn`)QzgWvYc1w;O)+Us^KTH<x~ z<*S}^Jmv43xKv&o^48nA<OZih<gMGs?Y?ci>9EMJTef)lnZwerzlisIDc}G5?jr-{ zFK<MaTYWy4T~;R-R@t}yn*A$&4+cKarE1<@5BB|j7cG-<(ZtNRCGg8ZDedzco-dzM z<W=*4S-wMj&jZ$eul7fq|Ni^FUw>lo_ly45A{iC;Zn{2Mb$?Z{LY;e)!-AI+ocS~- z`n2%fJ>9OLovnMb&>nP0(zFw2?(`J(g^NjcUW{{T|C)bbUa$I=`R}Ibbr(FGJ*l<B zd_rdr<2oUSp7h)kOBgy+N`pP-=;_?v`FvjV1p|>I4Os<qqwlYEw!G)};^|MG%BL#7 zKsT7R%a%njdWfkf8ClG|d2sKZ<W2KWnk^~163_GE`o3>lAN_d3usDW+t=q}`Ud7`H zp9;QQbQeE9v$^r*0lp+-9T8KD%|7pUJfBy6>g0=47v85hb0#LgzOo>X_d*I&r_V{F zl?%$>8vAX(nKt`o<(4VNPx^hAH5iyQT=^sNYVI3DlX;)SMHCtz{(fe@Uotv(Yv`Ps zPbWYA`@Vm_j>$6pmh*=5f6l$%Z}aKI|Mh!6GfZA(_5Xi)+O$nyloYrY-8g!WTcd05 zLbqi72{#sX9$UAO#nf=)(R<oIS6<ZM3S7J~u`_l<xQl?JgO$!{J?rBC|IbU_J6n3A zb?(iXb9e53Zg<{pw{`Jp%lqH&6yJM)yDyqSqBv1$qtP1U$!jIs!{W?8N7=|fF}Nar zt7Rhtw^&Mh<-=Rq>#yESpa0ib>EQ1^9^?MU{q}LnZaoo^#nXS=&Ay<vTS8gny-aTI zi$<ZXn<nTVnjZE|ZhMH*!8;vGr57u_wtOP~R9M+7M2Rb>ZhL80<-9__MgKORw|l*2 z+k~Z;{q19WSo@~-wzu`|cbe~RKY{;s-uZd9bLE&A4>(+0A8#N2r14*%+1#J)l@0Gd z+H9J(aKFH%R7L$Q;x!#R7|d6#Q%q0kn>evBK<h@t5$@b=8BF)ezeqY68umFUC<HXK z@fLkv=j#7KHjeX|rA=QCZ}&9KEoY>v>wk5nv+mqnm%yRc#FB3zr?H1`PIFA)H$|Z} z_7x!q5A^I3%aZmBIlnBoQeEib1%U`5<_V1L3nXfIBBmI0u!va;*NAwq<ZeC4p1ri* z$8JZ}#w*Ehf4$AGf2|`q^C!d7EBns`$o_NBObbjax>^7K@7)E`)@5sEn-s(^R&kh> zu${-@S4TI`vhzn;LPfVLT#tOCIFDmZgNA8E_Jr>{pU->UkuoDAwcB@LC(HNauR5o5 zK59v=I59zSoxG1peC^k%vlA*Cf6ASHQFc35T+`dlY_iL~^SPQXO)Z&4JP}ta!zGj_ z6h7lt%X4zt@J4X=sXGUEGkt6bF=_Ky;}I7Yx^mwt--p?fpH(ClN0=<hnjG44s%*~_ zCzTy+hgrOwg5`CmdffQco+!X9SZx2<GWj}B_RVuoeRZubn+MF$c_XHJ=1_FR^$PZW zt5+K7Hr(%Li?;4-Ee`!5t!*mTdAI!j-AaXu{0qJj_fN1N+;E_(Z6Ob{;*-NEl6-}Z z?TZh|TwhcWePg<7hKO_D!}M9@Cs%n!sx-EmKFn=$_|V+fY}k^mAbmnEpWEeh$t8^w zv;IYQ*nT>=xoO@}t7dklX5Ax#mpa%5mAQUNS6M7v{j8AtwB_}>=TkjWqITsz+IYTj zvf)SN9og%49@EUY_918OrK3_i#I#Skv@m_Rk=$?DDA?V$db$ByOxHusZo6qg{|}|~ zm(6;VA1W14RB`Zwg5V^^nF=b0ou*sJha2emC#5EC_X+ZGddTH&<{<ebqGE!%OZUNC zcRjtwPJ*19S2Z$s$?GLO+OYANfZiegcY&+Dnnk&}jTgqw^Dz0-o1^K{G`Hof@d1^- zr_;*2D<^C`mXx;c>sj;rcXTgB^n7S&?R44pG=4L0E?0Q2Qcf$g`F~Jf=2qqEDMcz3 z=7lGd_Z(1|dN#4}<JZ{B0^Hf&>OyO3C73z2jg=BV*RAXFFf+<Iv-8=+2Xbk(M;E)_ zOzBCL*r{>wO!etm?ScnHwjHzCzH;4G4*p-A<$`}%-V4t2o078m+GJ@55mqiWb{FPH zDXxlZ&bx_RV6V8o!#>+0J7MLiTT`-s_fDK%AjiWmW|*WR)N|tR19sWg3(L*~?etaM zeaxnPV-KI#3dJH9^^Hn$6Eu15Ni;>~cgQqae3G7&n3^bUeD1TCijQXMrgL*9NKV*s z(XCJB<)du{Gm{URHM*TNJ=Jucf10cJ5)~7UV|C{&pJ(j<`>oi?g!Qh_25IAfPnEel zV$D9zc=N_m!#X0Zf>VFz6QOilQ#Ss}1F{{i%?CLqyWixyf4W2Xe3C-)S{KJhF&)#N zraf`mz~!p4=KYr5=0EIlXKKISz1~_K*~qZ(uvR<k%%dXQpSIo3i=JJRmSTKad#b;r z+s`=NRu2VbtpgwCEhtE|0bM#P^YfX)_l^&a_c%E;@970U`MFQRQmDn`;o62L2LIO1 z3f2_lyvFz8NP%-jurvRBWy7njD_fqwY)eXiZumVZL-9}hPJU(K-_;8yxIEqPQ<nAA zBGnBMo9#JvaaV6yFhg+N>EE*>r*53`JM$ik4c{L5HJ8`KpE$uaH$pSuTB=k12dktP z3N14~>#RBcEquZL2Tql#d>t&GokN5!DE@2t+raF3tgTs9!&!-Aui6)pO;fWg{0)z} z-e7iJVfk6fg=wxz%v8>w4=a^VHJuQiv{7+-#R?0f?Tja;sXUwO(ehb&Mv2bD)?-d8 zA3Qcp*tFu%KdHq5V$KE6Vjrp=N$Pz)AtK{Y^@c}*>jaDh*KMBHeRc1IT4Vo4RrSdE zhg>F1@BSxSb|X<wzRB@qLbBo^sn)5?(>1Qi#08kmT6Erw;qWv;wd_NSCz$UqTzm8T zQa6=D_oO6j<Rm*3uW2Q}Pg{CW*||vgP5p7%@{%KldtOZGy1jiuvgY*a?J7!*=8V}A z-1>4p-wG7OW-=dUPGoN}Pt<H$v&p|n_NanTg;by#hquZR!9|AywOpFY`+jopD-?&A zwV$7uVKb2-zehu2M#omQGp#X9v%hbe=)UosX{z+ot{Nt@o+svoPiorL1&_|!+GSC! z?74GI=+PI-*(TZIf~*odD#BkhOPb{FbvJjOCgEZ@V_{9w%58^~w%k3z6d`EVe6Hak zbAQWcr=?6sS7pbTH-~X*%4xeze_gBgHhoQ!h-%2>f03eI1qpr&R<O7<)g`_$SzNa5 zREeRr-)zNJ@%WmJ(wk3QvJp}%Pibdw`&;=YrswCf<>qejC#@$MY?J<GFoTuB?TAyS z`=ed2*A<JID+>h*&eEJE(6M^mu2ZT1lD9r~J^aa|l*P<NN%BIROWpKI$5mtATVJ+n zy>vdw_mKM3=nV^;lq}Ahy)~>n)X+J(H6W(y<<h)MM*NdCuYQ?((EBJyT+j)zg}&R= zoqz0U+t<<h&BNfOlD}F+oKFYK8(IIZ%2W$>C)fX#nKReqJ})nxZ~p9Pj)qvE&3aWq zP9F6m(YFsa9j!j<xKF}xcbP%{oPtA~y=p?*w<hoj`OiDn^=;yTB-gEGd{cBfik!`t zG^>1Emr}eY$Jy!~>qRF+CS@L>2Od57!Lk~&&UDMPm^?~s<uH0)_&_pop3c$3&ngZ@ ze0n;Of%}==q0<qcdpxH6vdSyoq<Qg#P_yJQhqAo%+{4-)68tQj%tDVZ_vA0txL+_k z!(OE$Kx`4mil8Ho8p4(W8t0yD7uc1$(62(yFk?>1CC^*g>-T0Y_RP7S|BLUT!~KW( z##44}wU!HCo^BVIRMsl?ZtKLLxu>RP1*@q(Qe_m)U817bmc1cC*Sz*viSQyXgS^GF z7c8EkzU&Im0d1x!b&DoX66lZ7WN6lF%X9muy~+K()BeYMQ+po!KDo1DUXqG+^uwof zJzC-|xEYPMbINgw8Hly4UcYabnfswrN2mQ#VcGGe^W=<9k@6Q0+vVTg*m?DXY9_n5 zq+$ER#t5(GOFBY{+}!gGPiUO=*3Dg0r(qMJUXc1Yw?W{7KiiUtTr=#JFneo@GU?pZ zl)1(n_ia*Ju}Vdn9?R+gmqQ#4f~sPY972;<SE^XB3o(lM9H>y)VD(sQ%MGt}+hyYy zhj{7TKB;{DbF|Pzg(nw9;*MF(^FA&3D7I<Nt#b#$YEKrNy{f!XX=g;y_pT0>>$myt z9PwFPVK6UnOIX<k55ep?X9MLYa@=n&b5O_-|Gs{8R*2d8Gv8v?%nF;mcU`t|>h!mN zxhw1Tb+8oAf6LrzIAN8q#{4y+5%$G1PjlaV|LdKveZ=J#+_eXSD;~Cr@2Z?z$d{>d zrv3ZmQr@Mv%`~;$s-=JV{AzU<bY{rbd(ZX0Gc^3j;X^UbjRMaU7IExo^RjPQbus-~ zWsm%x*Dg{Q@{jTFl0Gu?xA3c;k0PyewywKdJ^AY6TmLnt`DA{4R=YLfMcS&k-R(`+ zQn^lb`D<iYvpG&lJHe7|KCR+eoYR2|H#PkE?WP?UW34pS)7gK}CiBex7ikjf6$Av> zgw}YjQ=2Y2w{539Gly%jfzHh9Cpld8swxh4u!!B=kmRZ?C?&@!q2R)FFiOu=uQ&e% z_q6k$*F0jJW~jA5;8)Tq<1^wyjK3eJZno+Cu<gsw9Pf4Cxr{G-m?zI;qccInj>jg> zWX<#t<^{iam?sr5IT>)&Cmd4!HsO_Dgvo{n3p5<<3WTKt6M`1A$i_*j<!Jw(wVHcl zfD4n&*~N#ry&h?EE>~GEWPL9E#FYC!CwBC2WH|7zP(7-Ze>F$a)V+%y37s#sNv)3c zRua0I^!WUDjwjNMHG-VaOgTj7nXKO1KdJYV>zkcZi_e$;<}S4FII<#eaf}^HvDHtn zHI)gjO-8O}25S};IK~9-@vfCK&u3Yvz2@*U&xgfdbgsqyO6<J$#BtNKN%uRNe81{? zi2jUvk@m**pp@G>RwMP}9I<TtB1Y`S9Cfc(e!lX1(ee<p;>4(sk26+Xd$-W?a9POH zXSLmO?^p^ITqX;s6<H~IeCh8BePPm*`k^UiLqA&__wBWN1(NmWf8Wv}r+j?EA@z9` zha_VS(ws#uY`^Gxkg;;%{2-GyC#HvwEX@3$Eb4wf*P}()*H`m#>k%XO^a@W-_Cu2n zK1daa{!^<bdt!M&SebrH>!&l_t+V@M;{z8+mS{}l@w!vDAyUg;;9XL!)>6+CW?Uvm zZ~i*^<m3~t920$+qQ(9vM3PumF4)Ctq%6)dbJ7`C`<W#Liyu0r1S;NXf6dvc@PxZ{ z&PkqfscB(xQOQ?sCIx#aC8j=(h*>j>orQZn%i}4YQ{HzhKC0dNwe6n}6Pw<&JuP>3 zPA~qiCZsJLrTePdUnOeFj@tC@o(4^hGm#RXr6%W`wK{Hl#`xe~kGRx4mzf%0P4BoQ zw)t{@J@lh>lI!oEJ@Ubq0(M9>M+SG!w|nTSSTFoDqNJl$b+g%GXZPi>wE!E%3i<3O zX#VPWGht!n#XyU*8OPG^^q>E+@k4Bh4ENXG(5ox1cPzj9?yzQ%R>6_Pi+<U!mv8<S zaA8}I)Y7j`0%loaS#Lh@yk<V{aPAB9-y<80BAZ!jwXYf+{nfDLqi6k(jdewK?{zjk zV~_3Lm?!6QdG8@jw#1nxC2yY1_4x3h-~|uwlH?<^g}Iz$#ATI!3V7>Ji}5bX%2?c8 zD)(3EeDkT`9X$o_1O0j;T-a1qILl6Zdsw>1v_ITb(OMO_>FD7n$=5IHaR}XG^O&bP z{iEfkLreL++qVioYpCw|TzT_@kAupLkdA{#T{~h5%azM@B6j#H%I?{d&}Q2FUYE^y z`nP0D!)~u_*RPlFYc;!=e@xe?RmM?fX3c@dpqXD-^I49}u=^x?Pi#$ijl5dM&SNsq zR{JllkoQ;d3e?)?dsdV&*l5P~8QTw^Dk*-u`F;3hMS<0xD{r6Jezo#TdyoQaZuH8m zyYprh-kYbFu5{vo;LNIkWT&i6FH>XBuk_B;6SdWyy|49rY@|K+#r;h}odr&7-zrGH zTcSBBaMcfn%kBraY>-{umLMi2lK<;)|55Q-O|xDf(6~}6_BpG_$!**8me%JVa&D}i z+OoMW>d>}OqenL0Tb}248$Ow*R?VIIXnW-PBFQVQpFC#FIn&KBbHlgG&k8=x%-xpp z_WAa&Cy%vNs&4waL&WRe(xP~O6)#tzeX_cYjRq4p#C8>LwA#k9rbfQlL1DrzpBXFX zh1)JaYW*dA_jdJNPhLmvmtWM?_*x^v@lk2T-~OPRS7idSu1yzd@i56gQuDm4&tYMQ z%SG#JPErp#UAP6eyifB~5Kt3pQEhdO^IFunPjI5U!oC$=A631lYUQuJcK=++YWZhb z7boz>GHsir$@+BdbniWU(o+`;Scz3Cif&+@=OH2xQ~&yq!h=qi#Dd&ayQ`EghIssb zUctf<*l+nM!BQw;Qn&hz<d=dg#2Xv(n@a3hs=alT1@`LIM}2G!omF})FKX8_t*t4C zj?EAK_N3lkZL#$}n~5Fk-bCe`ww>6q?FESVQ}cRptHTVBmSUAfSGn)sTA?Tqzr$tq z-^4ACx>uWiF5jJXvf=8Te?niMx>P6$nsWYMzjvO8OL&>?wx{zvT%x~#h`N1WFFGCQ zU}4o-aqaPE<wdIdHMW}>?!VM(8M=0Bmr3@*kjYc7y;v8b^llYrB&%oq6qQp!(@yhm z^_p{T_Y}QdPyU4b`@k_pg=wD0lqC^TcQpJ}q<E&<UsS%3!P4Uq@$<Ob{R{UGC{NI3 zGJdZ8_4e<jW@|<Ezl+d)8?)|aaoTR9-4B)2?_8@^+r+y4$Mb5Xz#7RPVkw;s>OzrB zVM)uYl>(EPKAz3I#__}DTAJ>?jFP;#)=9_jHO-9rxZ5x6!s^Y-{#u-!>i^ySi{J+r zrC&xlg|;7Dlx`_~cTu|a>GRrtF{XJQF5YoxH*IxXknpT#rOv{L<3&p+dHT*abnad~ z-Q@JUZCm^*l`dXVxySSCb*Iag))$>FTb@3Tme*ymnb<LH&#cny$(l>&)r6m9kGpur zxP3)Zuin{RyLFcq&-2(K;%UCPu1ZNTHxWeq{CUlto6%ook?Q)iySG+JE&cbQW77G) z%YT^7uHJcE9+6kynRfSo+AT|em02qjW*2X_nb@(d1RjqK>OvPMg>TN&ZLJXt(X#w! z{rAT5xnj$wnZ16uZOXYyrHer-cYA)l1i2AJAiJ?PyV+soQqx&>nO$1bLbNh&uew>j zb7%Pl;m&7z57Tbg`>QO{4FM7M_kU$5PT-!nV4wZgzm{ukmVdR1k+X|gWt^32{n9;l z>AS;!d!zoZv42>%vD#$Qmb;68-v4#t{)wtrS5{_SUe+5HTYB}@r_~Sl%JOJSdzY=B zlM)xZ_z5fj%4dh)o4j6;8?y29uHL$ZhpbcEe@pHwRGKL8cdK2C`LWICUvB<;_l4Wm z1=1Bt7n@pQJJz+S&zPe&RYvM*rwiYLsTWk|c}$sLP!l}MmT9L@r-8wp#mknt8K<4O z;4WXggi}~;2k+6U@9);;Zohji*R9p)Vo0__a!VSQ%I_?j&u5H({rP-;u2Jq=_l0rE zy{234mff~ID#bb_yC=f*+0E8H)66zKe6YlG@|Tn9^D}O3$@J5FcYpu>ZTIV{*KRtc z<!6__|L?ZA>bF~?gj!?7bs`q*{eCan`u(2Gr%s)UG2S_C{`-Bu{qpyIop$5Gg!DB# zpUvW%9k;h?W$Ei{H&5@`6lJP@cjcAzV3W_^owro%-uj8HTTn&1{g2x=wRq)Fn+bKb zf4^SubNN^~->!Dc&u6o(=Nvfje)+Y6jZfx!%t)HKGdNN0xB0ahnm^ji_gbV!*&F?y znYojLKO!nBOE_m)sOBI0`sm+pi)Xw1w5idF+Tw9}xqrES{Pw)NSvTu$REchz)Ur0l z=fX~zRu!R#|8Cv?a#KuLdi_j^tLb}BFRefOSIS>y*6x<t|6ZJpIh`)GVQ=&I{dD_& zzkdI-^Yh<}T(125%(AuQ_1f*%K0G`;H%XE;_4c)Gr%riY|7ZX2WB;oQ3!D4w|5d1O z>$m@R<F8D?0Y<BDH<GWe3|>AddjD&wc#YHYbw3uq+wqvM^v#XH=$wtM$~6-hemU0P z+LpVz`rS_V<YPS-L4)G28#Au2n`?GE$9V0wTUlFcTN4yMv&&T+5Nu;)X0teCSoS8u z-S3>uXP>VxE-F{gysk2JmO<?1eKS_L+TLEh%)Ncj9=&aT#m35Y6I?mo3;WwF1T89< zowKP^x#z*B7mNFMZ3E4^&$2FGcdTE2z3sOf&Y(NeQc~uLKloHId5>_X&vwbl5{LeL zyPf~_ob`JPwvGvcFV^jT_lj-P&byy3%x}8iG@bkD&u_Q$uk+jg3HW{KqQ6LH+&#x; zww2z~|4%i2ygO)C!r^thH*B&=KPO`@xcC3R-{(GE*;`%yJt%kQ(`oOXCV!ss|M&j? z#n<?h-D=$S_glZS$ldet*t+>X85;La%q@<uc*yE*HlxSvZb@)Ezp&WzXG*`F1Ur2$ ziKz9u_593vc4p?U2hIF<Qe6JOJl$vg?uCx&0}(qT&eVhK87y)SI$c;=p3J_HBXDA> z#|)>mW6Cyy<@YL=m)%Si=asd(BG~zQ{r<S%Wj+^K#bX|b1a3~7u2qr9Z}s|$zy04Q z94`0w)s|lNHQ!mv?fvzA{r~E<`+mLp^*a9lt83=#PG9|SH6&ue>^;9;t*-j<u)Xw* z;c<&i$9Gj<33Ru-8B_D|=(z{w-|v>czFU6(s;hYH63}%@+bYGbB^S9f9#3u-syn5* z+~Uv)<A4J{cRrhyT{OA!YS7YWp)ZcJ7Kb=)D%H7`(IN4;C-|6r(bN3PksmDXmfg-h z*L~=QtNHI&tJi<|a@jxo|KIQBaU2~-&YItU!y&PRyFWzpWlk^KiUZ~v91}NmayJ$o z_~qUw^ODVQjezT$z2EO$o>%>DrE<Sb&|K^CK9<MJ^}lp-ewpYlcd^&}-itep&FuVQ z*LuzG*970M|G$^d_Dg_l?U##Ny*6!p9Q4ua#-Ri*`@cy}e~;V$d-%(s;DJNw+gqXQ z_y61VT6-G%2^M|O#L4TpOU-;%C-!dnb9ZyPfBISj%S-WUitkwc4C<!jtgHX|bh_-! zA7}IH9?wghw=(Bg<-*REt(-pd>i<=yXWq`;emACm;(O4=?9ZP)HU7|8u~9&_?#IJ( zwzE91c)7m2nGkcL*mk0Z%C3L+<QnHIPtcvXVRi1`Z9ls=NIolAb4%lT#PYy>k*D?d zd~gzf6!Pj+S*#0_@{L>B>(^$l-+OJXyTrwa=K*T^yWbdXUspKgm(96dn+qN~ZCBf< zrmWsGZ_U*;`zzuu9Q+WGz~P+sWp?RVo~jdfc;<_WiuSqud2au|@CcW)qRXS5&*v4h z9o1g9<Iv0E$cgTsjPLz(GZp{u%v}~8zqx+n&M6+xADKK$xU;bNB0u-`q&-Oo>Rv2t zpA*hD$wA|upY_`(JvX*U`-|A0_%kg!uh93v?zTdM%NjRkd^7!?{n<~2$AJ6qfh6wL zvZh&6l8^lT^|e@xr{&m!zlY`jJ+RaMI^D!(XIN<H%U<()7v9%>x1L+~>!p-g&WvC= zb-y_;)D-pzg~wH<zFiWP<#I@k`?YZH@!ds-dCe{O1@(g}D|g1#d~`LxdEtEg|6kYh z9v<jwOgeky5O;=W<+o3l!tIg|9#s8xGkyNf><#Y>3=>%oI3G-x&fOCDcFEMU-C-I^ zg4;3-5{)<;IaOYEDEAcze|~auvaII4^!c@0&YIn}*qO}ORMN<~$=ut`;*RF*f2QAy zZ6{{D6Z-a7Ta{&#s?f}n%gmOy+rIvDHYOwN&t*UBvy#D!oK()tXxqr~+BWRf=X2KQ zJ9!@qvMrwMXSMR$qj}xW_edlk*z;=5!9TsGa<Z(=x@~&bzE;2AdtI{J-{zys@`&OM z%aU(6*KJ!?{C9eM-AfL!C0!fjJ2+ok-Rq41`zn0vu>)-1OEZH`cFPC8ntI;k_ln#t z3F~`5IjO9<KP|vlUV+QSRe-ZuyzN`^pX9%aQ@Eds?_9LlNu|Rmvixpow(~xzJL>g| z4o|YtRKD|LMpMC_nr#x2jRr{#4xKAqI#oj0S|?BcaxFSvbfJl|TTh3`M2CY*{P%RE z&n=yH&hB^4_a-C5kCzTz;=JqlGfiQ3>Fy~VL9s@US`P;wX-EiKxL1I4k6`+o!Zu~^ z2<vn9|7+6kT0EaqJSS;xrG%&Bvm=+2e(rcO$$L&Xlaf=8nhFoo$wSE!smABHTvgWa zo|v)m<degToMbenNq6wyQ&&s&5E0`$mzq@jbZWTF!~?gJ#H5P1Pn+~+^TC|~&#ROI zHB$c8+A^I6Wt$T*|6ePKtr7RP`?<uJOVFxWe74F{jWeYW{|WwTp4hRq-)=+QNAs>v ziS4q_oazJo77IN~ic?8xOJ};&@bKG{$^O@Vy<Y$RNptJJmCNT9y|(Z&akIasd%BoY z`|+B`E}|2}9oKP8WQ+J`d40;KH7V!pgmS#hAG-hDk+4oHO!NF{?d)T>HWXg@B+2=B z*Xwn=W4>@K^jUMa=J>6%`M;VM&Q>W+>037``$lP;mGHsYPo{dzxGf;#)A4ZnwHCK| zEQZ+{=`A}992S3Cbcx+YC}Kh8??!gH7c=y{jNTcm1<$CvVHMnUjVDeiJ3LK~L74dn zzqj>6KLN%Qg2KW_IK$uT*Z=f3fBDJ0_UNp{qUYON%@(FS7CO4hzWQ6v@`A-Z!v9#q zcJAQk_EpKS|MBPh{{L6!|NoO7ev)aENBqW^i)n{@1k~^BnV^%D%b9BwUT6`o(Nyew zaMqhnmxBwwnt$WaX?IxXa_HK-Ge!&6)VHh^`qpH$^LkvhrFOnv;;N$p;T3WJJ|34Z zJ;bSQ(QSQC^w%jXzjw#OqH~}2v}(*-`Yx06amKORpxe>)-iY;cTdrKQ{lt_LoJA}K zJ&M~eE_S!hwh>g;xHaeaFJ8YjjV+%RJ)R)WypciOMs!WDbj}9H!_KoOX|l%qO|B{n zy0CTcGT;9f1!vaCB-R?oNVJ_l$e`pX!e}qS)LUUNO;Kvubb-KzMuXesYVx%mpKL$* zsT?Z&KJ&nWIS;*#X!U;3X;jw|o}hVZPl^ENq@opZ31{X_Z<@|q)OdQr!7Sl`ur+%* z-KOXYrR8oCZ@+)yq|lTX@_E^Db|-`ir$ywvkbf8;b0p#2_WN~P^%asEssrl!3>1WR zNM=kBR@38<DC}}m+H`bTfXg8p(=FVR!qbjE@hau^U=r4ellXP~`w6l2ypshCr+?w> zpDozAp?e3Xi_}c_3ME0wz@Keq%q*KiyNr749THNSDr@iTDBSgG)#^FZXFUn!X<T+< z>MlovH@)d^4=X1cev~ku`8ZJT<BY{R$rsh{H|(^#UAjubx!rD}w1eKG{r~^wi(g_< zG!mM4lb!n{8}o^#R-MabHlixmH`gWmv{Wp3?4Wc~R`H;mc75zb&eE^8Kay5WQopCD z%6!y)-m=W6C-(?;{@Spt{>3a8cL${tr%ja({^B`V@#o|5xrtMjWdBM^%nzJUZg?yr z_WT*`i5u8k;=|O$?kwP7U9HPJXM+Np!Zn^^>1n@MMA**T2u)LN%$~k);uMzM_D?1_ z$80LyAy%mQ^}HC@>_3OOc{epFJovZdY(zH4TSq^Q^H&zAy=gyUr6%fhWla{l@H9d7 zB+dD?-y)|AH=54x;`F)Yb0(p+iI4I0(^OrNi5%f;9qxt9;S%QbXp;3Yo5E4^a_RJ# z47te$aWj4VV{Xg}*V3=uc>7_e%SP1)^Y2d*IMM3SGCA+;Z?4XSb<1lsHa@ACI`e*n zu*beWr>knlY@cRZ%Jj3ebZq7Dw&oIiEj+JWBvWXzXFy+<`yrh-Epr!|1n=auZMh(8 z<KFUdgP!m{W=@y7HN`D<i8{(3=akOd+V@p9pCyj7$X;{DA&CPOZO7U2c~4a~cOE%D zdFrm8mPc<*@vOHCx-51^(_&)6n?>gxYC2aPc<fZi!frX?LDE!}gPp6wTN*Yln?C7W z*sIT>ah)xK9X^Z(KXMu#=QTU<NE$7f=HjBscF}3J&dpiVIWI9hb`Ml5XXs{lsCTT! z`|M+(Z*DEw`kN~ZHr^}0U+Z`9xT@EUNt!pF?KNmR@_fg3PY*WsJ%(Z5M0GUy+r^o( z*}f+VIscm=vPWpjG}i4o{Z4|N8^YW6Nli@HbR;R6^J!1|ry7pmN;duPXU@@CH|bx4 zYOS%*++6wDpMTEtFiC&;Yu{8Urkg^Xv-h7lak%FAp1!1$G5t-xi*yz3E0zZyE4z`% zZqENqXw|JN6_SQYed>vGoRlhVa9&-wKH`&n^&3O?DGHKn9tU0se8C^cAn`rmongTy zy+}pTPv()+J?1U5Up}vD)$g-aJ=YtV48Mpjoh=~0N3!B+r_+KxmVy#53S<0#@V7<; z><IVTbfSC3I?w5qzRNnQ!&j9?#yQUpGimEs;=rz0(`%60q2wYl=}1(|L-9E`jGJQw z7HOa8J?Uzm`D$Z~*7?)c6Hjb85#@Vdf8UQo8>=5Zo>_3_X^WEE51*Bqw@Y_DYdWCW z_C-+1@dQ7Y375Hp(6-j;Os$^|vdfp~7vFdlujRDd_u&TV=!}Yo1)l|-Pd@S5V{f|k zrat3q)^%}rZngXhkn8>Jpi)rZ#4I+Uz_jP}y4~jz54pIw*>ek?JiSA5V?%-6sh?iz zi+CPzxvEt7+-P>Yzkc7Ztn|)Ap`~lT^xFw;Vr3J%)Y>hwTIL#$c6atBebJrMy{v5} zYKVINDBHpUYJxnxpk^$$Fu_><QLn<AsRe4rQVT<p&K~<E%c_*fdGe3j%VUT9>~+ug z+gPl*t`aYNEu~hgl-sm6VLiW%_7i2NFB5F7xQ%vwx#T_fkxztK9GjNtMfGbs*UFu$ zfAnnnR+A>De(Lw41m~awO#<pA7A4!+RB!073Hj9XTl99S@=^YKVXv;7dwBNmr>V*t z7k!stRx?r)VmsvVg(2J0^NECwqW_C5i3UmL7R$(_D(@NcpDrHXBg9!OJuCXk6t8Ux z$0r?p;yi=<(4n<0-MnTVtt~N5F`pP6wtZiazoEz}s^I&?h_eTj1tqhs^<N%jmw%&n zt$@!#^Q*oLbH<XUlWg1NuBjHuaReVa>UlO}&HIX|89pBKw!LB(;M*g9LX@BRdxOKm z3TGh&$vOOD6$@wF2{>?&^-*K%fhpf}o&<nLu``ri85Q>X7=;ukI4Pa!?wsn`Y4`Y> zT2D7`7034`jcCb8W!0to7*d;S?aqC5QIgmARb9a%)#jk*a_9uh^;=a3s~SwFR~qb@ zmuRt2fR!s!<k_wb?sAVMKW`V6U-<V+yJc79{PSmTgnDIH)VBGhIKS9f8N24}mzCbj z&vmH=uZoLVd6Zjh<+4?`DmiX#%Ut|zu9eosT~kA*UD(srniYC4?5*{`{tkumFLECk z#XC4%HYrwnERm~^Uio@{*c$(G)ps_5uWl{$>|}{>5PH%4)Ut^?;-lr?L&}NC41Z0g zXHDX*mY)4QvQkw@>{d$Gl)wFtN`F3`zS}^2iXUGK+iiEprHdR^?q8x-C*m6ylI3?< zU&K=_&~CeIU*euHr>!E|W;0`coJ~29|Epy=gHqzu&I!s!&X#IvBIX9Ek3Z;r4BAxS zAf+G{p}rv`k+;$0f!NVqj1Qe&wq+<L$1GD>eE7%N(iv|b1#2h?^5r_s`y%_vrI2Bd zu}X+?c+8@Zy$|xW+0QI-xm&m<!fe{wp199*tcu=GRTtWs{Cxcvj+AbPZ7xl}XJ5U? zW1Fbosu@$0{+hksU3Ha$jOj$n=eMIo?2dn#sqsSN;ivVT6)^`VWvwh)nIxR9Wm>mr zlJGKZ!~Bg&qM?@#sd7CF^++vT8N4&(o?Fz?#aH(AK9c@A@z?jD4R!fPZ*31<<Ezd3 z(PSmh<kO;63pg^BrgY9-GhcG~jaPR?Z?D>aWn1WEAx`6h*?)fIx;9Gecbky&CrW;E z?fIxrKP%OR*p?Y4{cHbvlTGuXmSas@P~yhtfdVYKX6spmvnmP>B{5zp;y7?XZCTLl z6x}T+<BU!xZ**1KQ?THJva;P_tyXKJH}9TSpI&@GyRm1YcD-`-zRk}+KAL4c<+tgP zMH4OcxLj3oF0wFZPygEZU)N9UQbL@$a`Kmn?+>=hujBr1&6T`+<*gT;F2Ra#=RX$o z(Ejo8=bnW#Zb-?6t$Q2wtipIw>t1o*z2zIvo!)Zg_OIMyTR&LM?TilTV2NwL((}`+ z=3jG=e*LlsbMu$5P8C|Bq)=x*?H<dz(3!!nV&6HXhFbMEz7Kw4=#e!yU`=^=X8TtW z`5lcW3)WxRy7$ViGiyI;n@nO0GAN$c<bFTo%?4SK*Y_?~THo0`U3HgvXvXA|XKk{# zrOkeqyyW7Ox6YF`*IR$~Q^{#a-R0&x;~2}~mO~=%H1@0z;}WUsd^M}((3)*m_6S`w z%ibO;##H~?dX7p?*z#R!*FJbl)Cs;-J-a32=8p~Uiw`cl;Bsh<)y!*JpA97B(pDM; z3BI#Ga@gxg+W#oC_u4iSGwyx*x>sA5rASq1=~eFgvqY5|zSd_3&D!j-GTc7A;QeW? zee<X8TN3K@>O$DYe|tru^G#Qli*q(j=+I_c*x+$R<?_AG5QVcdmOt1ZuQ|icKPu*} z4Of@v#<;nn_PP2;+43|>J%zcH*-mfO71b#HXg{Uu8S~Nhyv09S*}b3Iudlih;&P~e z&LQOuG7}|iDheEW6AnfC+~nT;ZK~$)V?PeB(W~j*d9=r7&6JyBa?NYzPsqIbfGzP_ zbk@E0Gkk4#C%eh`Jmim_qZ6-?Gt)>(B5c#)B^QqMXg+@E^6G=dDHW-k90xmCt~wWO z+;a8%nu6bl*1g^E^z0g`Kig(KerUAcOw6dW$n0<SyXTWwcKmv^diPuxPI2YV%kpxJ z{SJu&A6yn0?3i{Y_M<|GUg)ch=Aw7(!w&XTW)@x881pecM}6(yRY?^>x3(^u<#Bix z@4^Gk8y5r}be}xs*ZJd@?zr|9tOyrB+JDFMV{%zpV!*lGf_4g~D;*B*ct6FadWlf^ z+$A?|tzO1?cGF_b$!n#rCDw-}3#^#z;h=Ql!}%?8=~}aUD>v-l_C+vbP51hZ*RQt+ zDB21w)t~xe`-Bu*p||cm5)V(X?6my%fun+jtGPj4sP*7hm3OD|E(WJ*em!2VRq;N0 z`3vjwhxbKmZ96FyB<(c)(}hc`q*&+s24<c4eQC+ebuHOB+j~Xr^H+E;DytMbeQGzG zyx*j-_sb&s{VqMydd^#Tzm?Bl<&(l>p<PFdTpsOyzmI!^(54-;!xy#OdOiD*;0F#D z8OA-KIXSML33~){*q-wDH@Gh_;HXdvl!)oB3->tk;`@|8w~a6L7su`h{PV)GD|h#~ zPjO8(rqj~vtXx;#o<ChIRC8Mx|55*&&Kv)3n{;c6<_x3gm6P9vY$)gy;-9lD;{UwT zZAXPWYdDvfyxS}@k)ugrL5lh{r!v!J`!=YHELGIG&(-g6MeqQ#V`suMiTpJkyG&|- zFK%d17YdvZG%Z(U;jeH1HA=5{>zOxYd3=0aHqC0v_4(T;JXL;WJNLrUouXd024M%) zC&ykY`*X!s)IMzjlimI=f#Ob6ccfNW=_?(UK3Hoz@x*ikug7+!LY%YGxb2?m|NPkQ zen9zwV1^D;g}gz)gm#F(KY;vQ(KGuC=Y)>z;~HNtNWa_ov3Xl)&UMC@2Fp@ICvx4J zmwNK<!PE1#On=#iKQpcSb+1c)<K)jiJC@|G<_L99wwb80qh;0?#;-!1YPqfTGr+ch zqSuD0(*1yN=N{*%J<?7}ZhIGB5%pg(_50+q@SM%2mrqs8PW#_vUXt0{v|U}}>xJxd z#zOYV@kje_tNJR16;vn%7MwJB$!s$*BWTCp!!}HEjQtJn2b3?Aa8xK=EQt{R;`v0q z#=`St{QZYsn~v3+s_Z=&y-#RWac)iO)}Z=&--Ek_m$>+JO1Eon`|PIurLRJ1qV|oY zm2=gFmTHRM*8&^%K=1>Hi4>#1iWG0+$9xBki+i|K+wU%W@Ofp|+ug0V=O?;8boRZL zackQSua$xCwIqJeOp;!+?8n~aTGw{Q?u`@jSDEEw<@-s&Uu70c+J6CrnYK*xJWOn# zRn{k!_6B|5zeq%MR#kcEqo(FNc7ndsgg0*Dvos1^dnJB;(bU<G(%&rp@!{^J-Rai@ z>#hlRPGyu@``#8b8S3-@*ci_OFggOH__O0#$S{_|Y<I6u@Nd*P$!aw~3B?d1-C zWEw8Qu~*98bLH;%DW{?}Ki-J!T6^#8^!l@+=Q(1Zce=E+Je~bY5E3nNjX44zT$H4@ zczw9DYN^-X(k(&!d)M7q_E+TpTf47Ozq;>L-TL)lHCNn!r;mrrL;g&PUs7yg#P@!p z#;zrwZZY_)eBxTZe<nPhz1SK3RlMBAEVrioOH%FM8+q`$z17h<b60l<EnKPCd%XJ7 zSCggdBp;it_O_{6cID#xoVx-q7S;5r3k6P_m%kfsPFRD(zD}3W(5XV5EjJe0$@Q;Z zv&P3pS?g72SRey~u#%^XV~D$h&Hj+vb%)!}PuGc5nxgdU$iZ^gx6)ldZ^vs_zOwCF zdoA?i=XS5$=<D32MpH%p9(W|bgz5UXkO@V99mBXT%|2Lo<;s;S-}oz!<?weY+|7Tz z|FG6npU0xz);HG+2(Pl}{jt1hzL>_x^P5GYw{O3q^>MS=^V`af_t)H4GrpBw`@s51 z*8Gq5^_Th9l~%AG{9h2I_IpLo%cSj>g*%hH57^&V1|_Kq78@p3Cx!VgOi#0~t%(E; z^nZCaJO9;&!+e*kUawtlmV0Z7=v5AxWd%{eZ~sq^uZsi??%y^j{(iSSys~m<@Qk1P zGFqAf7Iw=8zPkCbOMXjl5_?|kdh@0-y_g*V^7Vf<+Wmi2e0H9x_f+p`EAr>tNg1V- ze|>q`-EqRDDVo71d4DQu?SEG5Ms4xv+|*KbC(-@wj>mjim$&84YH0Cr4K1De?EL)o z{P+GJm^dl6?56A6+gr<LT+u8pQk_>7zEb^uXwLhyQ-8cR4Ek-xsw(8hcbKJp+ehZa zq%+&{@89bU_7H9P_;&mKYd=0d{(86kzGcwHSF2WM&9D7-@tAb}nrmxct7i*JJo3Hg z;;%AGrs%%|B46+_{ZtZ)$W`~Bw<djlZCJnUw;5X6+Mv0L%+F`d%df@hTn)51^UEjt ztdwo?F`ix-%b@S~s@MD3e01TJHuH(yT~>Pc;haT+ojXOn<jOZU<)>@ZePit6eG#pH z<m9X+$9n%e^xJ&u*mf&R+g&bT()<1Y>)x6asK4F+|KF+=D=ti4Jg;Owzr_Ov(EQcn z<2~1&cup?)baMHM`v3p7-jk4P`QBN*=i9ApzmNBFHlH=g`C(A{=EBB0pAU;_OhZ?$ zKCW?X`)ncqIg{5Jh+2JmJMqD_JHnF^j!gLI@mpLcVnO!0oo?1|w@g;<n9x#wzc&2) z-SYWtyi!a4e!J~2tmac-v3BdVD63a17GK$2{(k;Lf!4y<GiFsvfj(dUZiZ*{00)*& zt|}XD?fduZwO`<2r`p53<}Y5YUVm-b?7UYxdtG@MPchjm3q`C7wD~Eo{dev5d#`k^ z|Ed4?^LchNuUWy96Kn3ee%x_p&iW^Y=Grr?+&k@MHP_x+dT-vPclrB%y3Mco)LC|~ zGJWl)Q(EUf)m?NIUzvV>o|Ik9j7J|^?o~dQ{rd8@JF}V8f>%qgR{h`m{p$s1{+HMH z|J%ClMiKW`t?a4qihZKC6inRr?^$-~>ubLLHXmC~38hMzy<sVRb4By*#Ez>ETe+B6 z?avfG^i_#cpSROtW8B>OXPzg`Coa(K@t-XI);+HH`8m;f%iQH_L!|R|EZlY@iTms8 z>*p&q?S8#be!KJeyr|r*SHE2Lw}1KVc7D0a;~kItF27p6UQUufTFiNW!tyGmK!c3G zy@()-0R>sWxqt%!e)p?h>&BK|4Fzp@S(3Z$=CMkZMFkR?54Qi+iQ97{^7j4e_qJc( z-o75W?7a1R8(uk^9WNB41v;JtntK(CX%_zdcslai;ThIHRkG(ey)9BoDm)u+5U>2t z!s+$;{rmWSKTUjfW#we<*d~=3NB{L+zklJy#l@wkG?!;A?ltq8yjo%DjHJGhkB4hH ze{=oYAD(sN!^3lvAKI9f<_ZaV9NfdTRIftg@0^RzHLorIeg4z|u_h0l*j-n?p5%~E zF8%f8rIc}6&%Ek)md|q=Wj-~FuZ`VZwl2T;*_py8S$B36N*SeeY`a@_d(mlIuJ=JZ zdgpn#_$KY!3#}I)2xcgNGM5cs>egMmZdI!3?f+Bse4;|nF`)wQyV`<&Crp(LOJ9ZD zEjq2McVubt^K(*$NiE!smXA7=uPpTzUp_<Zs5Ij};dG74C%s*zZx{Ud$?o;k{=Df4 z877TmdIzf{87uz({cf6dMT6HiW5u=`HQZCTYnL0f<P_XHBWXN$IivTVh3#^$Z1~g8 zwzEilbb3~Pr*3ya2+#kk1*IAH9Y4C*x-_}z`f61^`+I59QZJit)km+z`)d7;e-XW} zv*qc=2tkI=ejj8!4#k$=eY%JL_q*NePfu;o5uEk?&*$^I->09O^YX+|#deuTd&~p1 z6)qfDxgcSAC6<)ntI}az|G3wDj{Boi+Uu`Oi_VLTeyhgi!jw7VP;ZmZ9-G9dFRcP= zL9<|-Z<@IEF6?@}E_$|dAde>7eZTNe9nzw&uQ?W$ZPtq~6xuLRdCkYm%Y3iCxR`t; z|7@L<MZp4P*Uk#3My92cG$*>)ew(^c&+zwyX8y4KroXPXRULgCvbt+`@yCROxBK62 zyS>27D)ENF^P4Now`lTin3Uc-MJ&urbK--G54B<*G%kPnZuk4L&MSW=xSVIaIm0A# z(!T%ys>S)f{d_(@yWjR(K^*4>t*;wndOk+nH@2Oqp_=()8>ngl$GAd2$CKF}2`85( z1<&wU;31-`Xz9Hs>-1u_MviQyl;<y(&o8@L^}(j*+s$-6$M3&hufP87c7D9{wosm< zMl*~~SE__e4taD+c`09R_>E|h`bq1SpP#W#JiaDS)~e*fg2v`6d#k^f{A*wm?+e+u z<B;Hr{QZBgwJyuuaj-2@drxRKm*$gm2LtwAc{<_4-wncTE0dS^>6NUC^U+#8)#kP1 zt7BRpuk7sl`a1B!g=M=O41-)-4Q+(nRMs4tQ5mOjti}9p;c;2L<&U0B_AgtQ5U43P z;pqqc6EEj^h_Hm!2ls>8d7ye!M82^`m{UZ*h)Zwx8>7EZ_3JNQi_VYD-l`wQ5#StX z_EgB{1-qiIfYPBE9*10Kwt2*q-z`1o<<BbriE+m|jjpFWlh)=3eRyo6y3Qu4_2jjL z2KA(ahghph-$b09zu%$y{pRVr%3eO>2>#9YHde`WUWdQ^&k+5+UnXtd$1h=U;A?;O z+9zw3TPsvgOy&sc^SD#?JGak<N8awv-R}3VrkMX!H-4sFdeZ(5-<{6-x$7g|uM6r} z^2B<}O1q!4-5<@Xe)m&y;({#EmKgzNQxbmp<?&oydCu~=O!(YY5=S;Je7xhzxz8?( zuBbe^{TSXZvr(Mjuhe*`HOQ*$O~iD0N4tZ3)^7r4&xv|<D!hW9Q^ZrKFuwL{=ya33 zhdL3<{jFZAEKm7l`I|d}^M+05l84)8y8pZ$E#fm{-4EAxjcw;veU0<JuQfg7)!G01 zR{Gojy)w1@?ba;)>6bqpdEB4<;=;mLm$t6vep>mkReVd?|E*iUnnha|IkGAXZD!|{ zS&@0Uu4Jdk6Rs_}m#?)pTAn`}TfVBOaH*f|*AVx0CswZrz9-O`Ul;O9-`{iYt(9+n z+I!5s{ddh>Ur&_}MxfRCxAJzsjd{n-p7L>OcwAwMpwiKQ(o>pK<9Sz^t=)Xi%Jp=2 z=8p#&b3sX4HuA?bMABZ*@ub^h!5`l_78}DjlkGXbsX16G2VNC<x5v!xyt%QGV~tIm zs15&w#oYRPE`+{rG!Xc7`2Un0ODA32cwFwa)*q2pl~A3)Pc64aYCi2v+JDFKW9_yT z<<3@5m^~|gJZzua-WZ^3HhZ>x{ye+iZ;Jmu+j4)$own!y{?0j8ZxP4Lma|50uC?`P zo1IK8pK~^yR6A#MfB*j|tAZB+*Wb%8`?DZlz3#QpWKH(!2aW72?$65J^*MU`D&_R% z*hTmMM6I-r56D@6cFK>}7lVG!Z%;85otW^$LC9m-@+M&;(0U~q%SDrf|1O>-EXTDk zeY368-ZRFNpFg~wlmEQaWwYqo_ptucmJ)ESw(sV0hHP``9f54qBx*QVIIjn;*qgu5 zSA{=#ExWgkqPNC{C(Z>9DnI62SRS{x%JQ_`UmdQAD?CA+wWWH$mnXgc7WU`N-z8?L zrF@xF9!nahXWU_bJcnJe=7Hmlyx(tQUR;|VU-QsR%qOs^(`&=W8OkhET;E<y7InA! zaBR)qZ@1ow1uv^vfAW6)dk+@t<mub9m(R1UvO05X+gj!H<jkOz((?j8TvSngXBW9q z);wa}Szk|;oI8(N8!R?VXQ^<QCvm<)@x!`+U(@W|GpBzGnt2;Krj3Z~^PtF%*u3FE z@=kY0?&)s2U5n<bhCRHXmc9OAva0jT`Kvud`mev67PDm^>!fAp!gx8a7i){`e^hYv z#uPoV)w6wAG{Yx$Zi`OZI@PT-+K#2jl3zxTKj~(ipdNclWM!E8{fIknWf>0^{Loqb zB}FmrWXPq^hA2MqL$lKKLtZU%U(%O5Rib!bQta)`wm;6_x;@2(X%R=^mTk9xJT2bt zer!`OXRb`d&pV4w+MG6w<pQly<O=$b3++fT_B${NoKT-=(7i7>WMhW@?dYcaOXp?e zUT70u=X-Kp=r-rS8-+GrTfaziT8P80CxNX0tKv7-ZV&k*e%m{>^o@q^rcxu{CXJh1 zh8xa4zqI7w$Br-Q0nHDd8x=2&Yc2_0z9HyrYt6HQ#jk`_j#(NvJuTmMtohTE-CW1^ ztiSP~cgl{;in*%UvnP4XkeO&-|9GmQP|WW1W1HT;sg}OYS|L08sjltBjA=<<=YHaV z2Ka$brC+<32~;OOX>%}I`rt07*W5aJ>m!<VKlPWsldTV9)!Z)q{HNB8lXtqdm@nGp z_VIV!;u~RqU#r+wFs_*4n%5M1<dn*?%DlPzV;KcMxGZXT@GH8S1=>4bFoR>w)@xDg zoOmsH^7I+koICAQ-gQ&&{~I=?2IhsEyjI%x2ECe}?>YNh@S`nzmu_48inlQ9!Q9W) zw<az1y89;|G{}>)U-$CUtk;>!E=@MlpM($HQ+RH<Qawj|fA81w)9OqDou=1gF5kU$ z(%^&L+?q$P-#>+yor@GVyk56^m#sV-uT;qH%ovL$i!*pX^XFMGwJ7_}SvYHP-V`yt zz(3o6YiuiwUs-y$^E&VT!g=S`cxqLoHw7ujmoAMHR`&PKcM9j%G*FuOa^i<q>GPgk zJhI)e{|Ga`&4W{#)k+tSFn#F%3=2$$g#rnM^&bwh-}O5_%|ps>lHQf#zqOxx7_Lrm z+q?G4Q~w=%n6)e{Q}>1{o##LGsjMZg*3@_9?RnFug=p8^3pm;@v*S=%YbQ%3=d@yB zzlQUhME`wJQc95H>=8RIU%y9P$aP9<{T6ut_)`}{s$M&<^s{g53u2bHPWmA*Y0sgU zAG0SmZ`k4W>+<ARUw&=ZdVMX>bpOrZt9Ng&RGa5llmALt@W_?4XHHvpeRaL6v*N;{ z*z4hEZ~oT2wsOzCWezePWoeJ?PhE*J+ES_fXGcz!rrE#BGul&pjwLusEdB0bA{SiG z4zG`=@Gwp2)Lys4>GCq);#{Z7&+aUO986nRdA*wSzB<!kP4}d?(XSWgZ8kNHSo2EZ zsg|bc)r(qU*Jo|yv#QD~KdL=FD<*5(y0@0GQ|G?Au|#ii-~`rhFAo?8h96zC>{WBU zU!6e4{e64){ri=jzDB~PVuQNS&&I3wkHY)ZOPdc|beCUyJ-&YLG?yP0UoK7b-KP6; zTE^<Yx!(i!FU>VszRIaz_g`54k~FQWR*I^x^mu2#HGXA%U-REp(_2w@P4?6<m*xep z^B3kWjXFAe)~q!i`6b(%4h#J?UTxCq{qfoAwg2pVn;E44)c$-reJlTGxz1$=@7g0A z;M>M9yQuQhg_HvEKaLx3c8mPKy_xHuZJeX8*Gk?h?XoKlnN#~RjRHGfxu2X861eoi zI&sneX}fOERx10j&1>$a-A!_Hz1FMb9$flBo`GqC^Cy)zA6yRgbHhUzluMWPIizk4 z(yv|g;FTfQvh!1Sl?CK1=M}k~n|yTFR{zPJ$Aq|Scvd<bT%^i1?|;C-`u&rh=}g+S zCHT=LXVKfq!7JaMIy}=$*6aShKZ*}JUH)zOQV!4kpoUd|1xvuE<!6FkeL60>=jYUr zxl?XU(cJc$;V4_)iW{%)E(uG`@t^y5qL=0j8}Eas=WA8`&dw~{y4yeJdavmI9|A{z zmFQP!gnsM&7A_*q=&#bH%lN+r#r?dl4Yg{kvPF94uefsJy2zfdTe%&J6#ZmRi{4%{ zKPh^>?$;MfBHFhF%?^7x-(cs8brV-jTjo5yZpPY#JLOz<GiLnjdGcr5+Pi*N^Z2`Y z!^=}#KOTCPY_jF|zde_n4hVN%n$(`(3(pfaOmdB)$_{<TT=p#q@03*ke_7Jhujb7y z<{fG(WM$t~UlX|_xP4n@kYNAv!;3f)i@tNH6e;cqk92x<EAHb#W)bVcj-=HkUcwzN zO6L6S(-XTL4hVOODW=``MDo-uRi+6|s@_X~cE{#5+s#;UWyW{W8uQ?&DCMgvOJ`j% zIwY`!lldOE+4k(%WjEAnMQ>Nh9%aj25V4(4sHNG4!=uCAhDqD;fH0@M3$&;Njl_Q7 zFcD{&rgnMuO~GwjRv7sj{a6_>>6^ob#+cV(LG5N;r5e+3ZS`xnbJUTVz2<I=!I!@o q2B2|839b4?$N>Nu7){{#V?WQ|HuhWFrDO&M1_n=8KbLh*2~7aVh7B12 literal 0 HcmV?d00001 diff --git a/.docs/images/screenshots/dashboard-managed.png b/.docs/images/screenshots/dashboard-managed.png new file mode 100644 index 0000000000000000000000000000000000000000..d5a0086672021d5b85c47f1d31f9952f38943b9d GIT binary patch literal 115429 zcmeAS@N?(olHy`uVBq!ia0y~yU}a!nU{>H@VqjqS{3~J&0|NtNage(c<IR&g^$ZLQ zoCO|{#S9GG!XV7ZFl&wk1LL7CPZ!6KiaBrYvPJ~|mOuV+qSmFZmMIH56jns6SfR14 zBG>h3Uv@%y%=+s)Zrr_l_ikrHQj<cLN3=<h*Wdkbp5LwSGc=QMe)zenrs7!SoXwjL zm))B;V@_PCFdqXLIAp4~Gq8b~4VxGkdB7}&R3;_~2<sFJiva@z!wHY0U8|y`W_|j^ zrE06lpx}G+X5`0CPEE~|ATFyj12Y3dLyv@%MBR@Min_X6m#DKaEb;X8JbB}W$|vU( zPk#=Fg8~N_7#I|kkF}{eI_7&-X)!qb%DS>bQcg1LQZQqH0mL2-CW!@GoEQ$jcd}x9 zleX%_$%i>Sr*(cgGcqtZWVSM}X{@cg%&;!*?xVZAx2xKUDzr2<)=fUvyJqd$o?f1- zSFdJz1YNrRp@XCTKf`+We*2mq5ii`QIWg>>skL*a#-&!@#F^4g#$7)$7#J7=q7)k# zy|h^jJh+$Uzn^D2%i3h=>7t?{OH0cfi`ZrJ--P$K&pYlvPcMc|+_Yi!wCTIA?y%V{ zGj-l(L!HNGmg|_!`Dg2QLhn>FGstaCAh!t|P!P?X6V)qa=o1$g_vLKSj&1Mn)PBAu z>*=l-$q;;b)BKQaUpDWar*!+9c7xZ9yG0jH=Vv4^Ffb$t9AH=~$|TXXF8%wuzcIf) z@K5~Bum1h^woR4M&6RyJwso)0Sau#$a%2d8y=$h{MT^Wo6JJ`kJ$-s3)$PU8oB8`T z^Bw|47)L_GrByj>8`^fcy}eZ`BrGg6Sx8x_ZvXOlg>Njb_uJ;#*_O{@c9jX2ULLmC zz4w8<lD_`>HEY%^T=?<6;Q`Oi&Q3{5$;e21)@Rq=TC3jT({W_jeLdveI`t>BUz@k3 z+WDR6@;aX=T_>HXWpZgk`gWVomf2+w%0Dg#B_S_EL*^Zo#qNIZx~8lB{qnh5P)siB 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%0Ds3pd}0c`|p- z+M9Q`+NY+hwVyt3*1Xn_Tb@_SdNRzhWuL*6R?%$mGbroZ`Xq%ZiIb1t3}~1-|LDZv z>_&0f^{oNnb!tnaC*0h>$0-q~n`Sc>%(=KqXXcjoix<s}Pks7)&*B1wvkzDQQ3@^M z)QDIsF5Snh62$o=T6?~y>CX4NwOU^3=(TrUewusTMCYT5TCk!`GNXh^O6)tW3qiH} zMKYEjFs}TuYtz1XBR8)PD<+GrR1&g37FA<$u+B^KsoQi_`>sZotCqRVXBpG9cHC%= zzj`z)00n=owK?F$)SU5P%L!v02BFS|B^eq<<<oAc%uEUhoGe}C_3hKdw$obHhlSbC zC#~lAIaOO^iq(0id+{98Em&s#OJYi&qjCLHghuH+UCkJsmoJ0jLKBjOTPIu+<(qR( zsJdaZ%TkY;i7wl__Mf#mfTP6eTFD+!sV~pD<%CDW1m^;?yQkYF^VZhv+9Kc@XSXqZ z#-pc)dAF+__djg&b8`p7A9pURo`{VqF(NJ8His8UbgY+KQqeHAE&ZN1<I4Hll=d`g z$ZXNhlP+R){KBUEJ6M9jSTq7_wmBx3;PZUmd(Ef6rGMJR-I?Rb_3FXllk@eJ4o=!q zxy@;dz*-mIxG&v3R$ga6JV~_Dlk=%-ed?+6c2C4leSHyz4Lx%#Ki+2IVoNq_-6{68 zTfncQ(R=!%#cGdMEZL?gEaws#;QQrJ>y&jt^9s(C_03?PvGPF@e_g2fYDW}&efwvI z@W`qEXLG3sO|M<#qSmftb3m;@zI}bAiQ;opQKm^8MyipkGj^D=ttu{7e0bSn$;11P zwk&bjdL!j$P42H&jsrpI|1Uj=k!au)PYt@*l=Y<I$s&clObV4(ME7(EF8AIZcJtxu zCE|K5H}_ZOT0j3kCCP%l;?|VNt3GFbC?5Bdu`B-8@<qbo>#GP}Ig>a2yxB@|ZQ7+u z>4z^bPdwfyKg&G*VrzH0e%wcW2NnB08vVTK%f-sd`lf#QD$j0jRg+SG=r~JW`1^T( zrA)V6yL74Ur&iJDYrH2<dTQ)R@$5Y(yDQ2xBgAR#k-OE~7k=2ElE$@YuFb`(ch>xZ z^pFC1HgDbd{>sAao132A-`jn6Z~E`<58^>Q!X0`3(bK<eGvkZ8b!&Sb`#g)nh@4ek z9U;y4x~IRrz5VyMxw9X|zP(klAus3s?vlj)cFbSDYOjyo?^WaTF=Xwm(qp|dO;UgD zV48FL%E6tz-n&0liQchIyM5bq>*mehzea~V5%UU%jDGFbEx3B=ib`zrl+_KBm$f}R zuk1E^R#eT;NgrQaY>wT%J^ks|$t9(w*5z;F_Qy3pdGf^id)|Dj+8*oECpMhAps1|< zGThJ0%jSLkv!Vm6qPJW%r@h~F`u6p`9Pby&-Y(C)zs|Tk!p&{h>o+IwobM9-BKt<R zf36MF?Wd<-m%hBRIPPxM`+G-Y_m=&PdLa64L)Njhx3@}H#NAa=d-nCH_w)C6_cxpN zbH1Ey%dYv=DgT4-o4G!#XCB+z&%LASqt^jdkvOmAS3V>z&WgHbS^Uf*OK3vU?rpNU zQnxcRGHojgo`0CgEII$<T&sZd?`oq=%5VPrp7t*}=~Bzf{Ch{<+}qsjEp_|fQBQ6b z)z6nN%nx55d2DV_<o->sdA2V;&KJ9<My@Vv%9V`U%a~=@&RW<!`nfjRJnzn~b94PN zZ!@i&uJQ5qrTgM~WrwdVaI!u+=>?<S1tZrV=l0IxNUD^rO|5Bmee(3M!y2B%u1WX* z>3(<<Khaj?gh+n+<Ctybu?5=%xVfJ)9+PelQjc)$Xbd{-b@t!VtD2P-+cyb#`-$^! zoV4$+_I$l>)>mh|l@WF4H#m@fsJ&(Nb^T(+{QLVBGV`kiG9Rwn%bxo?`||N6{a$lB zuIzr^@Z!bv>rBjUeDbmq6>kGSG&8w;I^6x`LH^}kvC`B1!q>%B$csOJ@E~MaiKM*! z`7b>sH?A(Ke0@%K_gu?rB}K)Bp{LC>H8odX*K<$rl{DSAsqx{`)BmDoMfuJ)>+h*y zyvtO#rC0hUkJN|BZEb3@4Zgl-)O_a@+8R9g`FVM-)Xj)18$Nvd>f__JL|RSk=sd>1 zZCBRCp8tPH@<!gxJF1^je@x4j<_>DQAI-{;u%gv!>#MhS{)Ts_tvxkOzx>GyN0EQC z@6Xb`ZDvzbBEM}RbNK4AyHB;J*MvTv8rsMxp>Z+$;-%>AOz-dQ7XGDjV`=E`NBjq- ztZrC8zrEko#K@}tU(d8{Vqa>Rne^nX3poxcMqQWuY***Q!Lw)8`uLrZo5dKz^<{0R z#a<7PDo(H7)7#r9y?A5cRx#bE{~HT^Gcq=Ky;&r3`unY~N`E2+@45c|F3WR%pK-eX zqWLo;XKFn5$h}>%CUo<+SzEPBwv?uwjS={+_wCr)?9f#b=A{|O7P6YG<$S#S-tKyH zl_!B`XKj7^M#d~BM)**7i|2y;&oWD{a4$W`ti<>KrTB}JHk{mM=IbBcS#xz4@Bil5 zsoIh~(zY*?gPd*}J<YqjtM3KhyzH;9uI(@SS`?MFYIE`F@9!ULyf<fTm^(LGRjn@O z&DMs;DRvB#Z`qq=ZglIF$qu-A;`({vkM<?pjNV~uJ~ij+>aNukjx8<mV!gZb=ciDW zDLso9Z~lLD^9xnkrMca%j0v4(Tq*~d*Cf1Hf8n5-@IqEI8EJk=@yd%QdG{_$%9{7x z=SZlF&Ef?dsa+bJ&s}~_`SLdY;Dzit;!%+m%PJepmk6v3PTG|<<1lM_V$$LU`Gah! zajFY~T$d_p<sQ<yv*^~O|Efz{yZI+Fy)Dw$-{E1HyV&9!W1DrX%aQI{_J33BxGt9q zzC8He?D*$@&DI>fUem68h}%+fd|mGMclR63o<Dq7`|3*Jm$Jn@d6NCCcG=hdeN+15 zy0hr1t@w{M_dnQwaoN6Qg=O8HE0%eegDwXJ&iSyQDdYV;?yS43?kcUXEPVgiBaBzt zO3V23>2I>pDVEn?^<);mv)@tu>P%r*;v)}@Zy{?Iyf?dEeDad(hb7aW?wLB@taRG; z{@=ID^SPrJ+>c>pNSIWYz|bZ&|NXWTx5anO$bYchi^1Tj)&rI$CZ|jH^{;n-vpeF) z%?qmv|Nm=#zWY4r@aMI@lkeI7J{$d@t7`s*srj#N)GWMi6WJHMI`y>Kg$Eb)EY=jI zHka0~3G0lVlJqlfch?6!F8kwuj2=4w`F*##JZbjX8}Vv()gMK6tnQqfJpUf^f;#)9 z>7ONHHk7_LjrcWNJcs{{{g#-UpI)1<b6d{PzjVnmh2WVRewm$j^x7LBW%FfOL!kM; zoqTgmb53aJ=APx9ea-5IxvA;uedX`{uD|>&XS0L3ggs0*_S62@-P`Z;?NU6w`|yOA z#hYXp)`gvo*`KuZ!0hmgs|{z`FigI+-y$>TPk>Hw+V1$BMIV2hR6ggYySwx)>s#Tw zjlaK01?;bLPI$a!i%Chr+*_sflBW0aUp|^)zFspoT8E3ldrPo_E5jZk>+-;Lo6j-x z96EJA!~0@V2-A59$zat+jrRsTMNby8vduQswimvvy3DWj=bsNco=X+OpKaNB%4xl_ zeVhGB=LMbb&5t-Pv0C)R>0(W|&>3&v=|cN^1oY~*I~>V(^j@(3k531~bipFs$8Q}q zMT7Yb#2OxkU0whF!K`Upy{GH_Rr+)DrLp=v+j_0jFRz!qyK?r#hEwf7ezf<?%h;AN z$T7#T8(La&cHLN78ZDjun@jYI^I^IDmA}R2X>0#~?rtUCmw$KD+O=!<HZHt)yrt!^ z`#09Rdv%><<8Q0&^A=aCeqflKkkAr0k;&jkyhVC;?)v4+&5O^8$mY)NlihV?W$b>R znVbCQx6ZYx1)TtT$=e~+rRu}=O>1O7o2e;2Y}R>x^7-q%N#FO^v)|pDnip1k=*P?A zXMRuTth*4~{QT*`!_`~2Y*{rs+NM(Ko8|M^O*?1)e9~$B{M>B5^A#mayjO4Q>pLfH z_Rp?-8@p`7-<q(z->?18W!_)s%U%(oB%v&+*4L86f1qJ%sPY%BsH?7w4?aKlcQ#us zA-TV=)2gK6|K{iZDJ|X!-}hTL@CTmQy(3~r#lt9P`~Nrh{{7XvdaAZ$$(svT7rC81 zvqrzaSzgw@j^pP+xBg$Ic6M^VYD{&rRaI2xSl4s$O`Ev>%PO}}>n-n-5(9(1qkrGq zYhC^AotLMt+qFZ6X1#BDd3z7sVrKuohoioahhatby*;6(!k1UPSaEwhbM<$r1v(7; zvNlbp{gRRn)%4%2VR*J*^TL%2Up~if1<kImS@X&~=jNTGN0vl=dHrH_xIV9x1&?a1 z*K(6P#jmcdT)#YAQR&ms{nce|uKOpY?k~P5eIegq2G{L{3l-b@-Z}GbO=|6$YgN{) zbn3*3if?aT{%ij4lrM4j{sQ~IZz3hOv1x`gF8`KmeRXa0{Opqjt`22oZ*KkiFtOl( zcl7jczOyWJzr``!etgWQr?1PZq{RMKYSh`BPb$|VH!n}AIj8Y&x5m*=d&@*0#)@o9 zKR1JYM&YL`frTwMzrOx@TV6V>-F;7k%hxYji`r%-M;|}dn>$_S=$^}sCnir4TDY{c z+)%Oh^m7IEy1fBXf0X#|UrzTcQeN~nSC)Y<{p`$DD_1uDDA@LziLYV$&$ah<W=rpy zEh#<w%nYmR#TW1V;Qx3dMwwxsaLMZGemlE;as|()pJX;z`8PW=i))gasE$I$_q@H~ z>m%*b&a`NU>&>w&_nKzxcRTxH(0}f9zvsNg4zDh(Gyd`}u0{Lew$u=YX?g1Llb$gI zKWup<8O-CcXYZ#4O$N>Tb(!oBZLjB^zV3rg5C>nvgwU90C+8n~c;0<!m8|Md{-Zk& zUu8PUY?IXdA?WC`)2EegYJp~OUoJh{s@;~}xw&3+3vbP<Q_j|ctDbr}?^8{g$adrO z_TD*Xr!*fe;xiCyh_=|?*7xAy;@|UIT1#GCk$v}RUiV#vnu*6Jg$L^M%ioOOy2|tY zyxM*_YmtJtM)D1F=SG#hzsA1ndO`NKZQD%Ort$q~VUVcSQ@OG(_xNM=eh2prrQXxi z&PJV$HxS-+tAyd-pP!%4Mqi(A!^z9Z+vZn%RZHzU)B2Pp=@u3yYa<-x-)(r2_Dk9G z)FnZ)-nYNLOYb?6ZD+vW;L@L0`>guRlW%-)>_gn$t3QW5{PFN#EqnOdtTSJ)d%v8* zbmZ3V`tp>N9k*rtPYGni#@;<T&-?E*y}rIqC&jXDe6hQ~L_9E@oiyXnoKJ5XtMsF{ z$uLB$o|b!hs{Z#E7n_yc`IUr%Edv=Wlx_c(T{v6*{+^|I_QJJmnOUdKoa(ug#X~OP z#rhp*zt;R#d-iUxLPD&2ds=~{l06&4hR%&QH$G;Ux2;Rae|=+Raru4KoA*54OpV*L z<k+8`^8_b8Og}e|rR~lA{0obZ^M9AU(YvO%UcUazkAvIulOMPQ2N&z-m+y$bz9P@E z@XwY5(&5g|^0Q}0-?(j=)<0K!1^bQD$8F7ypVVh<;N|T}+jVYtsj-2@7r`&((k2`9 z;@8=DRXzD|QB*s`s_+%Z5jNI{T_H1<p57a<W1{2KzwO_aEM5BLrRj^av#-~`y}`58 zJbl{l<44{sJRv0|b#~U)n*aaq9<#r`@ON~`mDBdy*N9(VaAfs@`u&Q#mX`d#vuhrA z;q14Zvc3l=u{%5vRzLIMyM1$;;JKME>%RVa+C9CfU1Zu--Q5?8IZZle%(#BEMx23p zWrT+6x2@%(Z(~a)w#Qfe*nDa#@98O;!ZM#;e7M-m$+?puIW5aB?aPs!d6#!)-t#!X zV7zR1Ya5$#%d^#GYps;q`y07sX3WfcSRZ-+jpYf?0R1W12Xm*ndqf!Q@^7m8`r`JT zou>0w{4BY?JH38K<l4C1e~R6Xbv#V=ni6n(L#D2#JHvrz&rHMC#+g+=Yr1j6{DlW! z!_qrVOB$Z8Pgb8TF?&zF{QjJs=2_cMc<!rd&403*<5Z`|lx=5a9cD7?-1YN2RoS4a z#K@UDQ|agpH6L;3je8z2HFe1>OPjd2M#X$-Q{uf-PCAT6t`pOqP8DMO|D-)g{2H^4 zQt`*tEN2>-DvllXU!^=rb<58!E#=~_Pb#Nv*f4WNqn2U8tY1M4tRj~cFEqJs5csfT zOIG&X8*-&$3)gdgcYNXatU`C%zs=Rh_p;w)j?{h`{_lgL-Q!|5`G(l#XL)(K?P|U- zbmd;_sXVZV;lPsORLgFSniG{DIb|=TdWYxV`BGhQBH4;zzHRlZnsZA6WOL^p?VeUy zb<Xi}|3kjl8xK5x@US)`<zl}|EC0V$ZlTBf=fA3dC=+#<=fJU>J5@g^D;{*-k`+4H zG&}sm`Au6l%3CDdxK*k>;lBU0&o{PhSn+gwj^PzS*#<_N2bFI&X1r_P^ZnY_*QOGN zIbXia6xL|FsJh|#@`LuXXU=pK-c|8&PFvfu#mSpP?(yhd6=H2*UKht`GWBVUc)+ua zo^nP8iBtQluiuN?_wL0M$YSBM<?}gZ9T^_1S)-Fzac|E~?(_5QnQblKOy#@1)cf_a zrAzC6eq!CWyW|~X&F-wPK`C!{ZeD&q)<XC6&LZ1q)r$?8n%ViTUtizS$N2TV@rjEU zf8J&=n9{RxqvrII`}dgV&N6fNT)ler^h=tpal5aqicCNAf^(g*dfmx0GNwf_H8nC- zAK4@SeR^6P6cjY~)>k*4-$(Bj^UdN;$jAsee5a}U;P$+~|C8?T6$IrCh6%qfFZZu` zE_bKe*;%eQ);1(^!^ba?H|Ed2t}HE9`9sdSPU7dQ)JoeE_ph(5_++wX#(OUx9~DvV zrAPLCTeoO$H=m@5lBwy>!Vk)SyMBEu^YzY}67y}gxRfM!_|nc!N%OX8!WY8d-YT8` zL-)~c$>^;)%+qyq7{X*NwzMb7T{f@gJH_$UX{Xq&?XT}#TYC7I{dFht6@G7b+4D-S zTpV0=?T%)_!^O=%OW0$lpPZZ~Ar;b?`@-VywnOcc^f%mG<aT!H>Ae@LkNM8Ne(>yk z<^;{{3YrNw7gfHVclY<a&-O=k%>s{Zc;$1wl1u!M%b{(#`}SEftY6d+e{fHYNP$vC zQtJuDFP~O&w*T{z%3FJ4cZadKc>kY?p91D?@0ASG{q{*yDsL^vJlA7SRp$u@c<>wS zo#OFf&4MW((jPri*AY|A7kw()AQ5)bQ+w{ZJLmp{TmLC|#4Y=?tm$jQ=eT_$!TcK% z1lKJ0KiuHG@VE7|=^q<p3JW*t$Jy+zddu}{f~ED=lEO^+?|Nohzn+5DRbCM1YY3h+ zxjuRqTUGv@0GS<yvuB05%O$+oxoOTp@3OMK3)P_Vv1H};oVyGYeApA#$;X`DbZ*DS z$t*LiDqp?uyl1q^zU>8noyPW+lhgOrNOJbOi7@$>RLpQ(T5z04&cG)+y8V6gs_^5l zp3grnXImw(*Vkd?nYnK}<sLFIJln6$SuM1u?C<|mFQ!F4dAa?IxxUF7kt;{eZS;OV z@6YwONr$USUSHnS%6-ev|G!D`Igu_~29;@ITNnIpnzu6HUd{HS7v?A_9iFOt;Jw~0 znFoLWFA6uSS*OjwQ2y@9;<et@j(=9y|L3hLWjMeoZ~yM!_k58TR=Mx){w`n8@3HIB z!uo5ATDiY$-?GJ|w|Dj4zP_e+;@6^9^nK_MpR9JKgQNajFHa8S=%@~-qq^-uUaSlc zJRdK2b!jQ~bbikNLrgW+X>E(Mu=?s>yd_>!+x9Knw(Z)Po0BgaUs8;3X6O4o<HyId zv#%#6Dr)#?oSe1wRmbt$i+|s?DG&DuiD?d6#}s*Pmiew-yJnkxwmDF2vz{g9NsMPy zRMa#v(}fGxtbP0F@#BTwyp6@_JL9=|KI|_LlWmqUI&n4lOu4FBEi6N<FBE?|tFe9e z`)O-mU!3txb8_0f-SS67xrJipt&QFqyEkp-f#cj^p{vu_axY!mc5<orbN>g&LW~t_ zXFpe%K5a*w#&sr!dkuBYYjfWuDt~)ByZGPo>XP^7w{`zB9=|wu*REZ!O}4LDb0&Iw zzM5+7mb{$crCld4rN+rmwo97dFT-%UXkI772Rm<@<NdRn7$Q#Tc6jfqvt1piT>tb? z_}aK{N`GeR<V$^c{UYPUr%6k@FKA?oeC`VM7O^Whnj2kn`~Nq&2XAz3?h8C~OFC4T zpw`iIdkKG#sv`T*^KA>`c5SsWQd>S-e*X@SDc`LoEu6*Ru~XZgn}I*~<azhA-r+l4 zH=J0YE!uqa;gRXAkDhRT3}D;-IIJ#gnOMbBpM2>>uA4jZ+f}xDK8(Ayx;KYGZ<<`f zDW!;p>1XH6y1x3p!ne24`|pb>mj`Ihz2qx9caBW-i_jGf%Vdif=FFP3Dd**@v(f(? zVv7U5uiJa}Y_<Z!v3a-mdh4^dFKaYkx4%Yo<`2V%(*yVa+ncP-*YI0fLL!M_N7&qr z`+fctpWdY(|H;0Wxo2%xx5`D=$`9F@Sx)ubx1O!K>b-NSmQGg0KdZb`dwv@4WIQ}s z&8NSw@7C`B@?S2W*l_Ae=emI4`uBGZxtbRJcoDSJYw`BSObqK{PBQ#@@nXZ4Eg@T` zo!_Loy8O+pD)sbR+jNeHMr`-1-Jja6+2+{4FlXkb3~OWK$<=AeZ(rUmZdkeU=BKIq zVmi)0y8rFnZ}*j|i@Q3P=rp;qKKSF^z;YnqU)WbEF1H1YGEUMb*dDa7yqhg4!?1XM zlXmR-8rBuv;eit$K0L1+@5T@`Yv!!y%p3M>m0@Uaw}0GL$58ywMrpd!M%{LmP6i&| z>`wnY$HtWtC+hRboH|>&cURc{KYz4Uc+LN6PL4G--705W#~`U0y)0(`zGeZ2(?xd# z&8~erJ8Nr0+^w^-ub2PX-248;Gw+8=5nom_tPE~n7xq<J?<BWQWYA&tYQ7KKc7JbT z**H~u`SYCzq)UB{_s{<IE%(g4+TBH~HPbUUMi#5pd-?0bx-LIsr|9>y+GV`i<>tv7 z|6X)o9d~kNzoK<?`$6XRh0EoxF$4%#yYD#j^F7N<7SLEj<BzXSnICqhWn@Z*81>YM zGMe7o7puPS^UTH8vyYWA|Kcy4{r=QhpR(C+E1$nx`&hj{VSaxN1KWxA=Ki@BEZ-+@ z&%eJQde@<7f$3YeZ8NjExwF6_Bjxai`E`b-hMzxvE}8r8+e7C+?_Y;6Viv3X!4|Vy zX~v6lXBpk>H-huPHHH|`{j1C}6_xVz-?NtmzblWkae8tfr#sPIN#Ws#p1$H8mw#OQ z#CNK<H(~9cfRsJ`6XxlOihF+0(dhMEyri;0)oHiX%8DhtfogMg?6{MsGPobjZMLtO zTP|eQ@3rK#@thFuBfC!Lt1k)DH4nG^ZE&W0M$#+BV@w<Rw)w3LT6*D?JMSxVDa)ju z`<ITcPhQm9>)Q~LYMIQf?muVZ2gQfy*S`Mgyx{rS*oyac0_H7ge{N_>&6<_LVe&1e z+<bj^___EU6@Jr<e_zSIxM}TeGbRRWv%*(bHd=q@`utol`C*zC+k>Li(>wJ)#O+P9 ztm@`0kEpgjK6`t9jaq$>zpHE22j_!*($*Ib9LV_TWuM13OXvCRT5j8#zPT1XcCIT{ zuiky3_T;m*JKw84P*=Ec`^Js0^=ls0hl!usHpMT~Q7HZV{6}H)L^AHY;MCO2y#4Q9 zi_T2T!@6%gIh+J1B}PnqvvGUri>t*4YRbb+qT==^sV01qzrftXoN!9jfhpld_}7<r z?<YTuxgy>Ch$)Tj&*Z0P7>_X-eDg9lUVU$6^7hJiJM$**+sm%S^57tId-$3a|M#1o zzMy%cKX8ll0>wX<QtO`>t<4I#T6)YTB;dmLRWUakKHqVAzQ*~t-UO4bte2aP2Cm<{ z{FrH8igC^h4VD7|Mw*%@Ga?vEa-~hTG#2GuxlrY>f4+_QQ@+M^YvOmNt-Zy_INi5r z^+m=RMWO{x-fs$iI?b2-9Pxzh`<ZQeZ?!|#9I<?U@xUk3?CJKk-<HJA?(6fNrTcAW zzaG~L4&ljJE7o=Y*Yny~vp&|fLR@!sblH;=8?DQ8ox7h-yQus4<-^^T-rLxB_`R+A z`<wS;ghhMza<|gc@yGq_s^2X+u>1Gr2lF4EJgPgJWx>_u*AGM%FH1>V`DFRI{f+z1 z7EcJ$pTc&3{rLksc6@*S$A95wwLey-VhmHadsw)apPe(S{Ouj?Jk1r0nU3u~`?coF z3&u<a8~Fyug8Jg3lD4+vj2jL`3&`qBjIMaRY-@j${FN1XhJ}AhGH$#`-oLk+Z^PED z@%s)<ubv&eyzH*wexE1HWG3I*7IE|#^O?yq^8){*Jz_i~WZ-Ehn)8Uu=77s&RsrwL zV(w-p+1*($bXKx_YWu`>ZrR#Hu_|&2aZ@Z-a~KAs{qOP<UZ(nz^?3N4zq9$*3Ayod zv_I-jnw)q@^Ik%rUe`+Y2m_X1cXvnZxXdeOz>~Lwo&SC9U#nHQxBag5=H3-Q*OuP- zyXJkv>gng^+Nb7)Eq4EISN@*$t@Vc4{0A<~e0^i%?Wx-0hvv0Ng_vdCUzhylb;b*& z*Hf<_o@bqU>5P!-m2dC<x-TzTnbvpHZbj~GGe(B+OY2S2r@1F29QfP*-Dma8tr_=T zJzYILiGi*3^(En|b?$w#KHlD&H)kfLUcGQVUorJzlBnp*gZDSP-+y*CO4eqJ_}9Y@ zALZ{IKa#S2v)I|_@|Rcsewq1r=Y4x0U&e$9Pxmx5sLydsZLTl-e|B$U-B&FmL(PrT zQs)Z2QVr;c`^ok97he;5V#SZ*N$#?%itfzlG|!8x|M)2K@iDWjt7iV)c1T?JsHdTi zLYHlW3}{lJ^7pe(qV>MKYt3@4mMmLVG-YX2kXVD}bOwe?PqoG6ZT4`dzP_@>Qepo6 zO-EI|ru_Kv@$r&QV<RKG*gY@eonqJ4-ae;l>h(+aYg3&xXT!$uU7Z_W>MyRdt@`p{ z?(Xetq;FeWZ};)@TEc8FYfjnEQ>_;^Jcu%VePwO5{Ey8Uj1msp%hp!?=KJ&c=jZh4 z*WNasyuK!uk+t>4r-zHHw>Rfa(^z<KX>$2qE>VR{U0vPvt)~^Z)%|5RZ&~s3!37>a zM+TexcZYub_;J|%TV_^P>HBNmdtFX0J-zoqBEwSliSaus#JGgLOf6L<xndTw&nOW+ z@bPi|+^V;?re-%X8r>^zC@m?uwe4-i&rSb7&Z(1=YOH+sXXf+s^AGGS+vdw~E_}_G z=6el&+s=K-EWWqDUR<K$?2#i|W(IfLZ(qaDSE+Kk(mnD_d0-yj{cQ1<)(2R3bT_4) zpEG~Tl#-8^b_!*^S{uDxcV(QAP-`}?oM%;)==R+EEqs^PM`ZrG61nkxlK-4D>Ma{K zBq(TDT)KGh<%x^Vot~W2#J0Z4kv-sN#yevXY!b%Wdh45ui{Gz}zJB<S(*pmb#K7X4 zMfr8%EsJ+|iE5pj_mc02lt_uOt}XAoT?PML-tXD4Q;fkNg0J7zb}v_BWB5hgxtIR2 zdUh+f-xjgSm}kR#dt<gX*US6m1<b46y7!7NS+?|0Y{@5=>z9^#-``jJ_-A+eRUe<( z*4yhosfhF{F5i+{=ydc7^PK&Q9U4^bw152Z(9nO&rA;dQ8yI9XH?#|Lo+}LK-L^qN zS1!+2qRLk?%=Z*4SNJt%p9Vu#2~EBEi@q{wGoIfQB$}Z0^m5pflBIo86D}U=yw-KA zb3tozJgisq`QLJWdD{T5<zE&wI={Z2&7rt)W4`}9ySB8yH*eke{^DAAc=-3z)Ajr1 z?%)1;{{EeGrzdvJDVL92IKW}`qVWB_nc>?VoEL0-K1(9JdH33lg<JbOIWKH{cfbC_ zyFIO&9<02)&iA<2RIPSf&dR@5w@$3!5^GRAy04ba;r+IjsLmrtj?{nu_xHiW+Lx*e zw3KXrO#ij+(uE68+F4@u9^t*vWR!DrPwCA~PZ^l`WN-GfZBz~uJi>g}G><`4C@RYN zA(I4y=v=EZ))X#IUb~VM`R#n{cMbNv_;x^fTlxBbTeGfK{<qUpdGhh2uzTH}&;_3H z-xXt-_`do6{wh6Z+BB>3dps7YpH!}|3hn8av8_1wUnFLya$7&!z2?IWndbR-8$2el z99W{g*L}O4uk36`-g~?2)xYKX+}#yc!Z7XWncu9S+Kh48uXr2llnVu149rdU_Sd&d z8=dWBI*?j&`pawM9c6E==I^h$xx4)OgM)|b<9AQ`FR4=e`OT8`EHQ8H=NouQy|awn z{Y58y+n>|ZCyMLMmA0y2VS12tERC6+&(!ElTq9dmDLdc4Znou9^wwGz{m96euz}b1 z(Ee@tP4_l9F-#L&$MnLw>dbe(9c7Zd3mT+Dmiyh!$(^-i=~5P!m|Zdj6Rl;Lc9*?m zEK9rn`OnE?_SXyLpSHz-t|N=PTXpf`#S5MMwL*vHhW;s^2+C2{FWukM^-53c^v*>K zCx)-jn>j(?zeJvI<$Rgu?$=cb4B`7_Z<W8iux_)0>zBQe6%}7!+`D~o;ml>r#0(Di z9$>f>-a2yvs7i|iRcSke`=_0ao*JMpIs5T!SLVwWA78F>EA8G_%eKgM!-BO%@(oA4 z7!GXOGnH>$?EXV{FKNDwcVj($&z9XJ>&A)O*C+3OexR4{-FX52s4e{OKIg{VV!kw8 zf4#V%q@dWhAD5<bXQb+T-4;{-a+a||Ro{Wv+JDj`N#S$uPmeB=nD9Zpqe+w@df(X= z|Hl);>ZWxE>wKJ$u=Bs@gN-k2m}-(XM827Ou3ocY%_Qc`btYUkEVKRx^R&!hX8p11 zOhMix)%g40PiNnrvhCpKchAlqoHiw|?#L6HOSjzSbuDK9k<B4suBpkH`~A(u>l-#5 z+{K%{Z@s5|!;+eRjVmp>uPUg&;MDyZy|?gk)Duh1Jq$6ECl|lBWH{{1);q&=`wR7; zO;RDHwarpz<WgR5JaYVcv)%Q%D-)8gFIcsjBRe3I-#|Vg<xt%2ko)To-1Ka)UGzRY z<4E|7zuKov7!Oo9Pkh-O@|4&0oYMKkW0U86`p|QBx(fdWjo76%`(3hE=DNu^*Xgn7 zJ-$=Xk;^RZSGUp0E8Mf<*-{mGz3F-jLqEG2p4j>}=i_akyj>^RyXLd+IB|8IZ@ZfB zoPWPwpEuuV*eexL{{GtUCohxlcrEu~6@x5+ELs(HwBpf^m!I#Zr->YmsV(08>hUq3 zTbtj{U$8)WYxecmcUD&4*?q%)`@g^+Ggv_j@P4tGW?a6pE_Zg{om-_ouG(e1t9F5w zP9Ax8>h+PuzHh!4om~Cw*}S&SO&)3gwb(>w`f#jHvEOD<X=S5reP48b{3i1mj~K;j z_`Cw7TE8${HVpdH)o9%<p_j{H@=G%%aZRYv&w|uv36C$Itv{%kBfTX5zt+Tc8vRZ2 zH~#!nw>hBdomG-?e`nm>Uu<n|^X+PP6@0w2QvO}H%Y9eKVy6?F3J1?!bNn;)3e)P9 z&70Te3JWJs7J8-n{x0vWz2EcS-Jb2LfwahS-TN1e%aXMOTRa}Rd^r96hvtV*owlo! z^5yhmbyhq$GqvA+<8=O9p#z-{o+{sT*c7kl5T$#8VFp9;lplt5Uv*AyuGgHzbpFu) z7rD*tE2k_`-Qp=^Gx@=^h;o+v4Fw%_*Xpk_pZPKs`_fMC13xPF-`F|Pvfe=9)ZG5R zfi0&4It5yj*53H;Z5Y0B>#1|)s!WQU6F%&VcV$pxZ8$nD;6o@w%OahJjuYP;6&34h zd3fhg!AHeOS&q8<bGzLPJKENNzRk1l(vp7e1M_rr#WmUgG0P<^Td(r%K{(19+>M}= zD$Z|kcE7viH%;Z1Zkr0O^#5F!o(72@(Z99i2mi|3HNRWFxXD=P%E+u%ljlFE_0X)Y z&%{*Rs4i<!%<7Y7|8&kW`!q!a&3$$>US(grk&X7372V=1gIeZVWP64sCLh?ow8r0J zYbbZI;>%E`&kV+*F_8E{Tf;f8xS@FWv&wG!r~j1C{(D;frcmIttcJXOT69HFWBUJR z?VdCKcF$(kxp+F9p+lA7#{Zkv{1%>FoBo&k&%1fEV!QYW&qXYvtSqi7++I_3xMm25 z2s$#J^qka`P@%fFA;qOA#KGa9c+Zm;g75Rb=RJNhbKXCD)2o+*V^{7@|Hjw$|MTAi zasIyLOV_<y8E@+!YWjHkIqR$XJGS!Z9GIk3weFMnc_~$y9l0912NYe`sKu`AxO$iM zD?|Ib*3)hxA-T-D2Rwd1;IH4_T)yG<LF*fDAIQEb`@mObEpNfS!99G{+SaJXCysfH zVP`)qVU*h{;?dQyeASW75_&6n*RDwOzIZ8Rj@PuOW<3s*JZshEma_gZI%#*{pORU@ zuDMYSTOUQHN<L#xswg&)-#<ILa);7?yK=`hI^PsOZcpC6=B8c-quVX^`X9Sx_cY(- zyLT{;{e1%1A(i#d7>bQmRJH9d%k6W?(P(*DwBaw?oWH9B-{vlrPC1*RXO<^&u>RZn zLyOjR{QqR2ci~siij)o2Q@@1BOX{q4{{Lg=XVKyfOTVv(JRjq>wfcWibi~GRHqYxK z>qH(4?oZ0n?-xs0lKY{3KZ>6#*muu;n!^}&%F?mk^G#aP4t2JlVqQ&Wgk83#?OSbi zS2F6S<%|{2!ajyR@zT7J@-*mPE5o`&jXDPy-xqBtalTo%^Uki1=E2`{r5`!;sQmlz zGHdRu+IMpog`Upczp0|-$LH+}StT;X|2%vT4&n-SxW}LWoyq)W$J9&fc5Zjh=k{AZ zM|!z1v+(XPo7FDf6$>v3NT`)N{@7dZ{O<iKk@Hd7^DFM0vDg1|C#c}i`o=p(dt`JD z*liVzVAEb&VI2O6<4UfxRKI!b<*jVnT~?mFZnnQwbnoF`nhcEZHWjS=q_==oB2ylV zBhr6zKA5VPcleZen1bQO*6p88wzOz%-=(vPrPJ+>)Vitta%?w#PiJAd{d>D^<B{XX zRF-aLSe<opws!1}fcbXCds07U94%fwuQlrGxqn~1!{<lO?>x--er~3Ls7Q@yw$*`$ zo$|O++v#e)4JS*krFMV0VYGU&--fLlKW&biags$SeQw#?inEumI9-|Tu|jg*+5+o< zTn;Xy8~66xZB^vtf5G%tW}pAIc>i6Dj{-UUQgfw!tOfT-Oc5(}Wi%;IJeIrPm$64I zVM#33s8(w@9=6LO;CjsFwka+`9AVb+t6!d3a=KpIGL6~hxd&^ILHHAemuwR&U#)(! z^h28l>xZYTr7M>TazDIhY_<9CtUcPB&L|(aZ6>nr#KTLXheRj-xXb!>PFX(p^lOvs z{>el&2(mZ|us8}V5oS8e_>Dv8SL$l#^(Bu@M5ZOSc9`A~kTlvJ^eld9hpDZY{nn1u z*46HJShsr?J)E@ih*zbuWnPWQ_t~KydDlwA=B=K&oxxcCPqwr3gc4C}$(5JB%B%|d z9^)EqG=0V?KL3e3G}up0-4c4@c8`11Wcv(8H;}z7juZN3NOEtGmb>J7t@_Qz{-0~N z$Y{ixZ~s&xs#v8xX9ZK}wA_UvB6+21{(p?q7{%6{|0kB9mlkRE_j2fVUc0t}M>k8@ zjhMFc9_46>-<78sBKiFE(p9{LTN<`Atlq<^;&~}x3xhI8lLAMRf`|JL{U+79e^1YN zGR4V5YTdnk9;(x7T4wqvc*d@o%H*kAdTZuiZI>0(*ROTD71zD%)YowB2~!TO+3UK& z=VjsrQ1<y5eei0cd+y-}{z5J*o%*VtZ?C@0o60#|>{PX;{{ERC!fv~98-Ok2Xew!0 z&pJb<RBeLPqy<+y#l_{h5=_5tw$id&!7@qfa#o>q&inZO-{l4?*H7&}$TG=1X5){I z$Cz}w%ATHJC>PJk&CL!t<$8<lhS}rWW-nqdbi`GzE7^A6;N5Gr|6BjRiGO;9VgK4~ zMf=?m7CIPk7ceh$*1w^pxovlI*5g%SEq3QNGOn%3*|9%hV&u;~zjv=v;>v!?t(_El zTrN=elzrm8O<J*ji9dHabSLwjV&v0{QJ#1BMBsn3$9uQ%vZuYDxh$La+fBdD%-epQ zS6{Y8J&d`TCbG3rECG^iSYC3-bALD`&c5Z-OO{Csr!h*o$0sT-N;P;rLw(NF^C9P- zghc#QxtZ&2(>}Gk?H<#bQ~d&-3ra%8yTc_9WqN%)b0V<v_J`ZQ!*h%q-#10OUETY* z__g4TNn-1Ywu@~#al9X4Q3peJ!pb#$ir@cT<yfLH%`k9=Vcu0M@l@+S_x1}tJw8Xy zg{hPEYlqUe8``sdJFi~c7^$6g#(jn<=U$F!PXaX0>?m<Q`;YhaIoY^<UaZR%X6M>> zR~d(Y3X*W@{k^ro|JsiqKg*ovAH4JaB2y12v2Zjg$Uewt%)8X)u<0k?-k7c}PvR%! zPFC@(+_Xr@V^zP_#dn2GQzK<}Ix<$~7PJVSzr>$=qweL*>GHGuPO*Gg7+w*xVCkdC z>Cqo+Le*++vDrqkRsYwz{Pl_b64rUoj{jVcd36$_vS*IdsyF-3Y)8rt9BGWp7}x6U zb6Qbh{fjYWw$D+cgSlLym$&k~c3q<oKBIfj%PPLZ&%AUNKbg^$b$shA@xY>!vS&)K z30xNH<5drhU3s*ibx-)!HZ65y)8FPbyNcE`CVpFgU26RYg@CJVPiF86yqlX>wlVPu z!l!c$l*JO}wwg73c)YeoP5%$m&gkEfKUI!jdQ;Jy^3cUY`^gH6!@+acY1Qf3H+AP! zizU1)R9L;wZu_0wi!c23w%2LPncH7fZcUBY$W@;HvT9!r@7oOzPchC7o5y_qUubuh zB8%<;NG9aCB*@6JAwzO8V`EHx?VOO%NzTeQR92aH$oBucIKw@4=iJQeky9Ol*8K75 zS7FkeVDQ*T#X5}B>7&wKgUj8Op?=e*zYV`_=AzG5dOKjMQbTKebXS^9kUrbC+y^r7 zWZ9u0_FzGo)8*gmPf0z?m&}eenY_7Pb^6AgqRGKe!k%{NtmdlR6}5AP(0Sw3-(M$A zOky$K_sMv^cCXA-ouI1@nWnsx^(Ghg`b@oVJxlvpjNWrOeYUDaDIbm=uZ=w+iYPXf zZ*5}mzT+F}w1PMM$+n!edlW97`>@1ABsxNSet(B)Yrs+Wr}y@+4P9gVlV3Y2)bxGw zN3o=UrLQe{6x>@k@|DgO^yj=|c4Nz)+~!>4d$;nk-^cq(F3oig<?>YN-S&`AWg)8s zxPWGHv~tpKI3B(;!aV)bgTr&31G`veN}oJwb2~q8iH^;cH}|jo{P!r#m_^~%#;Y&c zCUk!)@SC>MWsQo`wiWk+xSzf~!L&xPA;u&+{<hDIdpqZ{vE2S09%Nt^dvvMM#dQUF z-{&3K!c~{i{8fs>lBEGD+c}6mSa$WI!IdD#9}m<;RX(z8_`8i|Qr`Rco6{^;UHQ7{ zriebL#vF^wtGpCAon{Hv6-DZuTq_&Fw!8h&&sAQRPK4V}k9F-io%n5iNP(94*{mh6 z?=I8G*~Qg(_Gz2_<+B~nn>XbyKzQ=db*4MNWIPlu?ws{b-0n7?so#`{4@_tOedXFv zma~7;pWmHXGqpD@GIM#l#>aeugHZA5>E4sKEbNMp>Pq`_`pmc6S?d2b*UQRmPfg9u zz7!hqqc-h-(L={?|EAuq`+JFZ()?o|O%Ty1%oN>lb@ekX*29}NFmONL-MMpG;@f}g zd_LW?Jaf=>nU{}LS3xVo=VSVl>+ii?aA&uH^5%NxsZKMaBX`(TM*ewtcjr&j4LtcP znU}2=+juH;hv%+Wp*u|1Mom*a%g~~<{hhc4J1qLrnr3ces6K3(cVNv_pM58S8}`=E zEHS<P(}Oim<Knt4Jg3tuv_3C5wO`#qbwbM0X^RDt?VNe;sJ{BS?sVEW{n_qSN3L&6 zS2$LXyL#5tWhpzaR`5!675v@%Sw{Po+v>(mxp89qwd{M7kt@51hE9fQXWdO(8W@7y zRj1Xcv@bX#!MJ4pL(jyclXOa_8VHvzycf4zYjF~z!O=JOm;K<+DV=g6+)(`>>q3F% zm>DbA?x>N=u`3N-7b56!`qA_}?*gq`Y|?tWGoz%}uWQZzvSXFVT94Yaw#A6}Q<}hP z(c&<v+x94rzf`k(<IfwMp${8X%eA*R8GIJM+E!8@zQ1IzQt(u5&x&eod-gf+SBZl1 zU}$%GtM;avMB`tnKlauy-DP$qHY2SiQ~I8Mite3U)kD4FMWRI<3BSS+9%TQK->edA z8vbz68u5)<7cZ>~;LLjZc<sSiSD3k`8id(Be0?n@b>-CaA}#aN53X%c3cD~T=ik#u zW;<9Tl=Dn)K6tnCm{HD(!@lqLGo~24x6tJ&C=jbit=qCy(Ne70bnC(P?YB5@n_WOu z2M?7S!gJ3u@@Y?qN;;piJ}mO*k-xE(m1=(%2zh+!kJ6rR^1m_t|1XdDy)itB6EYkW z9zM6UzfyN@Z9%@1aRTGCmfzcX=dWGMwEVW!lvr7}Wv{}l#l0LqMj!CG7G{~xitw2` zOL=1&r^=b8h+{6SX2wh>_3u6i^9|IfS~?{uQDvvYB%NPZcbyS4`}uLJ@G7oj^IxWU z$=%!bHhit~(WZ`%-bJYzhmIDqg+6pmuim+M)1}@!=^GRZxWl(eo>yo(S;b-!KIfS_ z_m1L2fryq7%SMLZoJ+#g<4U~6SUC5FY>L_xq_FbP)+B#T51U1^jtQT8wPF?T)r~F| z8-GrmdRkcSOlX8=)zzJojtOYQhRW^v$We4r`}rG%u;BQM+UKwO>|DS7nO60?Jw?@P zk4-$%eXw4`@kIZY+yxA7ux1}e0%KTbgngu_gVE159x@(BijqS2f7hR!C!sw*peVoY z%hRtbEVcgs__KTIhi7vZZOJ+9y5<^_OvbnMFM0WOZvU9$QLKG0xb*gf=}v<ER(I2G z8~nT#_U^Cr2H&jc9jkI#q7u&RoOQB(ajwt(u3~sQmpSba)0uYjepd4b%hvj<1;6av zwxT^`QPfi<?cF}pqt^!{wzyBYxqs0lJ{|F|k0RytR?4OBTFZ3u+?4L;4MwI7UwD=0 zrEYyCduT#Lo9N3|#kY^i<ec1Vd^i7&$5*{yTV}T0{~gYO)FgA6-JMW4ZFTDIPn*M; zIJNChuUYo0q?y}T&!*?~nji&EW1HAUl^-(fC#Kq%PwIEf-G4CKxmoKj!^ah@>YvwN zFpKKksCzIBRQ?5;>6Ol&BY1oLnpX4krmoRjZlndk<1hUM>xUz&#MuQ5ny&h#n=UnE zDK`J=IsJcF(HXXia|@X~=hgRWe=?f;ceNZ-!6qH|iR|-#v`YBAcQ=cz%)9zg<H+U` zMuW9iOVTb)-MzkADeNBW-K_I5-1%|uB|A84r-w4@^*(+Xjj)fMWdp-$vHGOeX>ltu zcKz5?{HLYsWaOWaX^CMws*cQ6YL{AgsjcIw(OrS7eM`?@KXsf}z@v47*AcJ2*-O7| zXDI$|@<1jt*RSMrY^vN@J0&xhU0Ll}C%sOujX9ZY+@f{$`nFYPf1LRj%EN20^Qa}F z>7b}{Ag*_rz{ZfY0`V7XYbLqQbGiF``nm$0v$F(d3#==hYr3N#)9BWZqnB7Ey#hMp zj?T=>xug>M$TDEpDxZ$;=iHCXdgtKQ;JV7DnW<)1U2c%3`{7#;cODc^6wTgwoniWh zmw&^rc8GizL29ln6h9cmY3BUm?CK{g;%1yYviZo-TgK@|GkEgypFS5j<f%CO>F?dY zmTGs#2U@t+ZZlG~p4{)Qd}d2h+*D!t*_&5|nI^?8t3P_{+Yi<ci=y^&OtZQh@cA~g zt!B*a32R*5-uyk?mzx#2)3D=fr1EMD<3a(!>|IJ1&NJQFsUUcG>bVt+VRg^e))ei$ zad1!Y+K#C%N9wN}(cifG_P%vHH*L9M$*Gp)dyQ$0@J6oivi~Kf(-NHp<q{a2G<vc^ z3zl|#J=t#-D}o3~M%@E#f`@jk5c0M=<P(s#PSigsIFwUmtKVf#<4CvAL;ji^tv^rZ z<yroor`_Akr82cfw0P0P_1moGJ$RY5q{89!=4H7jzU+zLwQqIP=3KY3%Qd>^Hx*nx zdtpmKzU9|k=NZEHY+M+7U`=Vk6HGdS9z`3ETWfhgFDTk|^@A6mv$R}9(e@&34&(a3 z+$}Nbhu8gCb7t)}kyAn4w>c`i)H~H%D$Mpil=`^lpn7c7>a!l9VZp~-BX`BG)4CgW zWYhXXcUfm=OW)I9vS`;;Gn;ik6kWFFuiJC{viV|oDZ|IHfn(Yk*UFji|DJBkev^DK ztS;~LspYfErF^=!vvDv*|BTrFAwelDaDLvu(#-{}{B|$dCLH`!(!8_yH%|x4goAq? zZ#iakW*hI;ifdaWpEh(q@+qxYJ(nfpA)>{8?t|a~?Kvq&(tqFF%F;da+$r@n?@n{7 zIQQ%?Tp^(KsefOP%ZbftPt)JOiI;!5dQ$g7Rv}&vl|Or)XX_kx;yHEa+#9()x!ZYL z|5~T)y5!A#D&(%+fm2iG&-UKJdL~pmrtJNl$G5&@eB2j|D6W66U@6d%lb4V=lfG?J z+cwk5hwp5Ed!z1eY}suAkGhv^;vS0vzMLv*tueJ-_h1t1gg?*zRs~O=<{f0QHsVr5 z@a>s@wRif+?N`~pDn_!apm2_3XvMlb-@rbjysMisLgIK<-I^ftIr7=*(=FR?btZ)t z6kgQvf9CM_S$xffy2l??m6elvB{X1VstSh`cY)UAlWChTW|UZ_b2<tLp59cnGiGJL zgt~4fSo`PCMUDg($6c)OB>0G*D}m*wKm$UBBV&((JQKW->9E&m5Pagyz?A^)Y<^^C zHE62gaDb<(e+wAgCh#-DU2;TT<N(JfMFx0o`mtF2z{ZL_VN<_P7G#N>_d?zcVST?F z!*ZjUIcCzmZqtjW39txm)X|=PdMX#|%k4-8PG#sj`k1-7xz%Z5lry(M)1Ln>$`f<8 zm7hG(@h2K#Soble9@|8gpAHKvqu|j5_P~;8gnMNhnIw>d;F6$5gCMOHyybilTYj^4 z_xbk~7xm9Ye|T1Z_W<v;`yZs+YoDLnomc(iVms5ax+B~ByVQlm|30cYYiYmx!SsIH ze<$9S-#OK~{`16A{{P<sr^kL={XD+HETM?w(p98tJj0*i{QT{Q`ul8OPIQ;s_4wWG zI|u%L`*|vD{;fw(g6mD@&gPr(E3W#DbhlgnuCG;REj1bhTbkgJZnY>^{Keyb>!T)T zH=nn?%4_-fO7ZkQ-HWq}Z-b&S0G=8=+_&g9l>a@HcRP3Y<;drAY<8uH*sa@j>Xo~E z>7Cf}``?zk%SpYEzmxi0zxIi8Ha`zfZ(m<SS?xd9MS<maQ@`hKyZ7#0b^iUj+jHaU zo-SRze(#@Z_kRXr-GARKnty2f{5vI^*KWI0)%sK0ZSltC^DAF%v%eFvE~KZ8q3+d6 z^-C+y{CZtqa`Mu}^nd^A`)z)?I}03;t}A(bKJV+!(6Gqdhl{??t9zDT|MPXS$$aaa z?Vr`{{;gcNQ1Qg`&FBCA{`dR+Hs0zsZ9&Ir-0;M;MERE3fh*j<{;|K``M+`Z!^h&~ zHy?k#ol}2nrn;X`kNnrW$?WXx^7U^fMy=iUcAK@D(8*xG--SDa*ckV`HM8FH`<}JG z-Pa@4@ArPb&zir3sp4+wwg2DD_jB+1zI1xrje^6zW;cI4=KuR~U-i4)moqpX1a0JK z`nh!ay#HU8+cSIp=HGt*&-3H*iL3@Eo+bBN3i|zczW?98SF2X%@4GpzzV3~G`MtmG zrq_R*DDVGqaR2|${q=u;%M1M5c|MPOmGrqtx2c^9r$yjd;F93nHB5gWKlWP}x?23t z9~p~(7y12Hg=yRG{t;vG?(8?U;FYSpr$3}``*SC*`d#(E*7W_q@7*qWxu&?T>eZu* zM@`tm8QhgGP7RBCx^}x*z~?tFm;d>)cDr~?-P3$fB)mS$Djw@(vwCvp5r01m<>{yA zRv(mH!*K8WY4&y7UP%dfEdKi`?sxs8$Mb)E>~vqh`CC<c{p;%Maph0%|Nm&xvVPO2 zRqyxx?hD<Xw&IgO%1-1ID9pI$^tt$3b-U;KTmJpgkvXsE(#`U_pWE$i|0uLH&$^p+ z`uw{6_uL)X&d)QQbN1V%uZvbP*ge~!tb2Omf;HS<y0q79xjHTS{QT`qEe#TNFP}cI z|9soKw~gW7Y2o^Rf8Uy4_TE=@AyNMC3%BF{erSX-$XB1?)Lys2X!>5^`XZlw5e$rb zzPVrf`@YHi-jDa${r3M(Jh_sRF50H>UK%N}SP35Z{OsKSkA>>@KmC?Yn)pJl`c3h# znd*mrUd;H??mmCQ*)+!jy_hW<!dAci)q2;4>BkM_Sm`y|4d%a}i2Z(7eZe|^|JDa* z&F|F|AMCTPNzAEPsogNY<`bt!Yh2NTfAM!y9`|=MStPl=Pnx!bEw1+M)U4i;Pxd=s zK9jC3nS3=YT6glvf3M8N_y0S#dhT`UCY^euyjh~u(A)O>^NUGGCweSdzkU8M`}I2x zc^#K4e#C1Y_j&vB`7QnPf4|wb`~9}<>lyz2T6lk+d48+$dApfy^9yfPzTfwIns$S@ zew54I+0uF!mOn45JjW^(^3mOXmtoAj^Uoh_;k|adAgSol-S7AOmS2*;opM=ye$^qf zH!e1H*CfUNeV*?hUw?V4ad0`urW!}aJ5#S*TY2l`wNup_r$0(ND&oKT{MI!)*S?gz z*n06qMo7^uhr3ZruXVkBx+8Mh5w_<CX1+WAqh4rIaoGB6)t<+clrO$e@{B5r-@8p} z^0n;3%?h60XA*Podev^=o9=$U&-H$f>;3LRZ~j}EyT1uma;yBD+2L}(>*C{EvqE>b z@4R8AG<o8Qh$ClQYl<NQ!Ah4FGW<K_7k?+~^xB6H9=gl@dVH8)qL=f)^0}WbUyrZ< zdeQ!WW=6)fvfJ-&+_!(A-LQYp^?$Q#UtO->@pxKi=SN+$`$coNUa$Y#8y>@GV`=#D z+HLN6_5W__ZvXRU)#^2Mzh$@E{kkzff^pBcsMj^mKfKqE+Vf$eyIhm^w_C;g!{e(Z z_bvML`(^sPs&6;z&(Ae~&uv}%^4jgZ67deV3GbL#3&M>)-VV%OI<4o8ZMDHi7cZOK zS3MhFsh@gx{LKGv%ks~4Eq~fSL+5Q!fqh#2z4<j7%Ja<rKJGk~-o5tnIcX2OS<ixP zve*1FoRswIyX{QvUq?K+*!{)7pWeEuq%!{3Ho1=`;uk)&{w;obUc7gP`}-!B{=G9i z?$0PKt;l`*>WQm&$VU}9|F83mJ^I!4Bch`BE6o#*6!Ep2=682`r_MBwa!BnjD$DiY z=H~YLqCYPS3SLR7H<T@HjL!Qwb8h*sB%_%%505_oxBEfw-ThDU8PBCv^V_|+u+@Ik zyG5?=|Gs^xZolp1vR0>aq6ZeNOXod%FXeH+e$<u^Gt=k&y1dxsY0+(k+ztQQ6pn^R z=k}Ip{e9$pKEC*^=+PiUsm^!1UcZ}vH*0o=Nz}S2j&k?^Kd?0pDdyO;2b9bTm@Ix4 zSXCcnDDRuQ?RZ{fih-N&PKG{-WOKc3n|m_9&p)|Oxc!KWC8LaFH;;_b@ikR%w(n!A z_%mzbuQ$^It-eL=`Cq*`^r+7Jh!ge2TwIH+6s!L^d=hkTDc5VzOgs7JXX*SB4hHb} zpNm&JlZ4}hr)*pg*0l&9NINKVD}7$z_c_7$w#~3kYvP^A_2AXArz<a?ylYr27|zBo zXJBr0@HcZY(+ro2*!*8s{w-CEG11GdeiknZJi96Lc&^qtcD~udu^Jn9OxqW5LjGlB zf<TvKt#;b?>uVqG65Oopy|}rZN7~fA@w#2m+&wo04_y47G;!&?Kga*i^@)F<a#i#| z+R>i9K2bYOkFPraRp;sb;>`M2aaSN63>GF<gQgO0jfUMq;S9|_OFtL=?wc)If6iF5 z{MVC@r=F>PlUd1d?r%Ypg@m-*r;8>>BBQ(S9GQ3j%hGpGY$v-i=7gPXbbjV?EGj5i zzv1)!Sz2$WwKxB`Ke;V4#QvVe=UqA+neTkEpWb?+>ix#$@V9K~nXjuS^Dm1Qo^ke= z&WjM+f9sc2b7nJ6dv^b*=z)u_7aN_QUpVkfXZ4QoeOs#cNzOGaxbo&j{nPUdkQ~a* zmB8{+EP$b0RrtR#myjUeB>vP>w<o{c{qlB|(e&*s>K?~8MvF@uTJKU|Gn%@NPn9dd zBKJ?*(JRL-st-EU&I`53xRtSH)z$yZ_l$3f9yrNv{8V<1<>5Kszh0S{+_z@0>Fk}C zw6m3u{dg}HtjWi8b;azT?**9izwEtn;ClPcEuY-|rtN#6qS)!>*3L8|=+;(;;#3ni zmQBw;_C4hQyHE+*PP{X92b0C`&5d{XJLVUs6qbCLFl`$1Qm(4285Nq-?Sq$e+jKMS z_%!p<myf-zVmZk#PJez?yrwh0_tJU?$)eL1yO|`Oq?R^w#dsh7-9OJ)wv%@)!@9hn zc~-YG*_zqUH;NozFI$-O<KCMa**@9bH<PdTTl~9Wn*8Fx&SzWx|2ku=)X>-&-ygNw z?9S=zXBQfan^bxgIGPkr{C^H=i03h~7KA_IdT`H}z5Dmm756_K*xt4{-`e`G&wPWp zn_V1N8V|QG_mf}EKbdpgB8IZNOOo}~e)Z2xopJ02Z};1MZTr7$-TP8{kGeT)!LwKQ zo+!Wkc-sBtsWThHAOCf?eD-J>_m{P{Gqr8?F6>;azH+10FTb1zvyVKnuDi-Hw{rHb zz003(Upsm2)z!lLOP1t3`afy!a<8x_LW$2Aj?eepHEYhKDuc&W0k2sL9$r}a=w6?4 z$$d}fBhk{3%!Nn*y4)XHnNt=oXuDtZY}LIlx-Of9jz60%e)#^2-5VS8dHUn`M_94X z&=Ib^th88h=H2Y#`}3E)JA1M9V&h?(M;Am72ynU_&C7VQ?%0|w49698k6*v_cU8fS zkV1VWQ)S_a2brJm`u(e^g-y}7-}w5MW%)TGTAAYC^WM&P>D(vIy@Si-M76-rFE>OF zOmw~I=*Td=OzX-1=M|3W^=1?PDDS^23{DLk?C|ue%UDxb|K;kBCre#^Scb(MUQx5l z<gf6f8$6c;SyXO5UE#0PaN1g|$lcQG{8qVeGkxFrZ{FBl|9|)9#_Q3&2Sg8CN#O1( zd30*xFNMyTIh`dhWHu-H&9w`=8=};3S4Xl(Y;A79Oq+U5-Z$2XCt@$I+LW64%jJ1W zxoMgPlSs?z_8-P4_f3}lT_DXAk;SN2zi-Cxhb+^rz>e%-6FI<fNp}ImJFh#T3##>A z`rn-{xxZ|Q-D#!I72oG)`?(e!_nl(zJ|*k_#Ldb1M~>%5#Jr!*@nB`~v@r8L38$Ms z4;xm$nRZkmk2g{E`80-o>X$#CuCvg{4_{(Dq4!zRIfWR<eNs)_TV7A%z1i$zbu8}K zW2>JDYSn@EwlnAI@@PqIF_Cc)T%ZtRd*uJTH`XgP8xHSw@YX$W^lx$NdY{XW?-{cT z*ZXSbGlQM$!3=k<1>+q1npIz1A9?dg8T~AnWhLEwPx_BmV0jQ@jQooJ`0Y0gN>>)l zJE_Z9Q@-qZcwYqTS<mS+%(R~!NIcx?yzJ#NuQjYQzHSXm6g#`H_W32>+O=1+-bKZn zWH-9m?HRR(yX0jztJdsLu?G#^37)J59#sP0zRZZd&kae6tnj#<!%(JvR&Ab7W6~VE zsWQ8TLbMvZtDk(nKjV|{iudlDADy?FcQ}YKCVIV5<-*6u=G3U<K0AA99qVE3hDhg) zZPRv6ooOH=nHjM>_x#Lt>_2+A6E0kR9Nu%wcFC?YFHbyhEIzZUYyzZmVF8ua{Gig> zk3m{6`OP!evSVha)iO?eGUNUKd~w?GIMwX|S`D$M*UELsOj>X}h>>T9+;z8P=7+a- zsoeUad-F_aA46IAu}hOHl&)5PTQE87a;nq|+iZi6;{EcUj^w+&Jm%NAeDdDqXJ#<8 zah;L14!n8BbGj}QIOIFn_A<m})nAgjana*UUaJxFn`J2*WSeq6+5f!ubNV0C%pIAB z?}u6Zy)@13$+A?gmsN+3#;iQFQzFN6&KYr)?Rn=^mkJm??7TEvFW%*<p>)4Q-l|9C zpC6ypo$PP+->%XiHPR^M<)`xFVb`~*DE(WkR`<?rr)%J~Z6;>9ej(+@O?J-CGVh;~ zdziCO@8RcnlcR4(XFc=Lwx3o1^52t3`xi32v#Ve{vm&_b_5Yj`EE`Pk&)RY5X0!Rv z<t5(^G3xz0={^0*wG0ch=St4(XBL7JMgFqqm!>hS<G-rDPHN+0IqkL9^*7F$iLKAd zS*CsWa>lFW-m9erExoq=xm!LjQYACge2vfC*AmmtcFo+m$-J_jjc?AQ^Ai}BbtgEU zTf24jRbH*5wx6$TzLjyNTh5~B#+k)G#lb11{tHvZlK<*uHQQDN`+Y2V6#8&cz?CkC z)(0V;d|OXl;5MFbQ}OsC+ewvadfS_PzWPT^jt<tCZWX@kLz+v>l6!ZIrrxkv<SbFM z>r%DW#PvyjP25h3Z4RKZy$#zI%FgF36py-i^Vhb6ZQB<y^2YrBoT<^Un?I0Yx_$T= z+3Q8det#D(e{Ph{s};x~&VS<K+{rvgt^7ae&Urki;8wz;{3k3^8PuNFr|#OZKfPZm zoMHOD8RzBS{fJ7}f9G#^Kz~)tE#3M5!#=a5-Bv7jR%@RnSZ$mqcBU%-Zq!=0!y!x& zDjzFWeU~}D=M7hasKTM&eRD;tnbZF(fvQ6x4tYkKnu*t5y{LP*)#{T`sM;K!txgv@ z(pybUXE;piwmo0CS>&vQ4VRDR1d-MtPL-Rf_wH1MCTup_vM6eU)vBVS^2V+qPrZcl zR(Y=#oU>`dhDVjla`sOu;f>Ne+Tgu9_r|>0N3PAYE3MUK-NC)Iy5EKIPHhL%jdM4W z&Gi?xg&p4gx?iI~eVxR{XVFh~&$8U|J?8qRS3%LMt$uR5`>6e&b8eou&k-p`pKUI? zl9t$olsm^T+EhNgbgPPY>&=)Yv%FW^U6<N_%FzAz|A}vYcPeMR-7(iXZIWqrcSTs^ zJVi#CYQ>Ay?;3Wem_YJ}eih@Mif^t@GG=m#?(Ce<8!vFR*Pt~ZQGaU3-V0(6wzYT# zuiP#qCVQxr=i|@oSGRd}X}`Mc-o-8d^H!S5cJ=3G)&~TW5}c-P>A&7k5ZVzX#Cb<; zs#wC+SOKSym!JABA7WrnZ`5DR@XpPJF~?xvk%=FVy*le_!FZ<Y_L1O~_b#(9_3Zhd zXDGTwp`ZP`qEe)C1MmB9JKcgAuBS&ozHafz>|4#E|2HB(J^EABxwUHX$1A-H|2~_w zbDGDxoItI&F)Qj8o!R>DM1;z>BBfGy|3CJ9=klW&oG+gF=#i3X^3O@>ql?xzE~z^3 zN+izq^{hL-Mrv}}#Fq7IY~7o8X3dSut0r#<+qZ#f<<H)WTc)0RcGf6s(?q>w$!$Nc zFkhL}|I8%iX;!Gp|FvtjEnO<WJ4NcFj<f2#sm=_IE%U$E^jdEhX!g2uu7Nc|=w6O` zo8W<+bB`^MyBK)2?7{8^v4kbk9XGGN*=3t@)9~;bsf*i_(&lYffvgwW6aOQkL7FK- z`OK0RDXVUkUQ5n@lCoKM<18)K8Co_C98b=FpPzoa(ILotZosy9f3whLrg^KQD#Lh! zZrr)rrnqDM>1=0?>0<t6GAH)lk>2mG`?FF^qgdLduj}D0N5*ZT+h2vfJ-T34ct6T) zdxF~=&AG`d8AR6fX*DiUT9JAt=kMyRf2)qlO)qwQW2!fG&9pTl9;*skE2hOBdltrV zUAJFF*sp5(V}(Vt&i1c~+2y*5iQDgdqQJ*9TbCwuhp#MB5<Y)Vks&%aP<)TXl||w6 zR{Pz#?)@DxgvXb0pJ|QZ2G+uaYcc2JpH5xVb2Lad$vNU@$jt|>UGr~zZrk3n-RlTf zSNq0)nPR_QMI2dm+Ha|8`PQUw`qm#5yMtAeQfDsSs$w6k`ttC#Ha+z$LFuY*>z$6Q zx}3X>ck=q&ms)oaqvd@cHZq*wsd1pmp~)f1>dUIoV$}jRvu6MDwzU7dE>?=I40<wc z>nG2eeW8nP9anp)Jg+s#;}O5X@9>aIvfb%-FSMmaZFkc<buOecedmnpIyuYw)HhU^ zMT(cd6lgnQq_g+nyTlK-68tm&G$RM=ZH1SulD|_=yzP!?JlM%~vnHg_PPaOBMM-ON zzGjO;{<OWC-Q9JbY^*HTBRzK=Y?V}>^Cu>~RpGosYYj*9Mi1_1`LTaKy_s>U-`I4^ zLZQ!&mwBI^TU&Va`6F??&lQFmy02Dk0}bv%CO55)-)Fj`a^afAo~tGk9^@Rme{D~& zzle`Tbz|HQ$xp7U4lR5AEKFm@I<}OpF04Yc>w8yx+oi<r8Ls`=X6fWuRsGhWA1C`m zi<hWgEGT_v>wGmW#4@lu{b+;t1lLtoUg3dyM`Mu&l?BrTbq?Ep6W6*o`4Bgo<AfJF zhaX;^x*|d?LOCSmXMUS^k+$e+FKz?zoNfPN(>B*fGqW7(2@Wj!%*?XTWzCZaovkk| zc~Y-}R}3ZI-Ff&PYv`_1l5ZBJ&e+KVp9V8xZrRANIeymKofEBQrzl*H?=0X_3bANh zQkW=uBrZXF{`}or&HvwuJU(mD>eMASSEb8ezZoXtWP7?~>--tdxg}57t=F0NM9Y6i zTGbA%?YGPppK><%sFN*y%5~M2m%p}pPOS**tVbG5JjlAiZ&8N$`bllodSYvr6=kpT znZdg8Z<i-z5{^Y^e)Qp+_e0mcy7E%*@znWyoo0y^8Ldu!e8O5jbj?2nqlm!yYkN+d z3pp9J{~(iLrK`;^MbXf;Sy2}DLWgBm|6w{}#eYF95I%qE{(|+xi#gq;#mcPP<F+yc ztK6Sf5yrVTZP%VB6J)k~Jyd@ll4M<wmpXmp&Q!l5uZu#L=G|EpGjXR!YTn5h-B$22 zqR?flJKW#zduP7kQ2kOVk$@9{7i;J4)bQBVw(CmnUDm3YUDBY52@i%>n{~2XwT*;& z^}5c5%qcszEo}9yogQD--takUx%mqFt7}?YPfYUovNv`1;agUr%2~(bJajIHOyF18 z`c<p!PKW*M4Bqd`9^yvEVhQIM#9YLF9Z}vmd*#v!j+@KQyBTQDFX(bVQuTCl_>omg zpCSvg+n!8b6LV$i^xaYR2NWY$TC8BbG5cbf&VfzQn)^?`nzKdyB{T2kjLTnn3SOl5 z7?%s_9*E`t;=VBaRE?RE@Wc}tSJr6U?z@|O{aQ-igj|<pN@_8tq7%PaW@U%G&3WB@ zB1L7BM%J{ixx$WiXQqIL5-ex#+p1oidf(@0<ll_cS9_L%n|?fJL*^KJ|NMOP4!?R( zd3sgd)%`xgQoAcR&Ru){*P$BoC7*64<!+67cI)2LHQf$fw>_=DRoyu=`<l&aJ9qO} zf%8+ZUR!sq{Z*O2?JfnmXo2R*)3eKV&;R&Z>^l2v=jwCD-v8_kuXSy`Rduy0-u7FR z%s*r9)9=GqZgIb-F>~c_BV(cH%66x{*ZuzQOLt3JY|&gIoZ@h{?{+}o1=|k${${V! zobucs?sSWAGi8de6gn#Rb8*Oo#G{-26eNXC9&}m0A({KOxT&#`aP@yJx$@9F)kU`! zZ1U7v;#!{VXY2jwyWshI>!&SbjhN_LntS3<>8z{O5+OFmTeb3~AN?td-L<gIU{0{e zcRt+%u_wRut1rmbXgeO)t1j=U{{DQ&-HummQ&)bT-Zg!OtMSJOtH14X=NL>&zeSWz zHj@8;`r{MknOB%4WtO}Dvu9!bVC35&eqh<gFMX|UXI|J>neC~ZmU&5L@^qb*Ya`$O zzn60%ytR2*H~SNZmgV^;ik3%eUwN?l)AKI3Bf@#lls~2m&s<%-IKR$e?Js!~Ca#3+ zrBVNOPrk~los;n8ZN#JXnk(L>&T(ICm(v?>%f#Nyey+F2z2^M&<nPyx=SA_bGq<0c z>DWK%)3??;7bl;zU$)s^dc*Hm$>w@}K5lH^r+>dWK~jAJ>x`*fGRqdo-Z{*m6reQE zbkQx5^<RY3xD*vT-SyAdOmfru6sm3i`$~fg6RSwwr0x{?8(j%~woZNWA`5m-I+Ga2 zX*{)NYU(=4{x{LS(XS>=o$q^CRNCt1olWn|o+q$-iL(}jJFyl#`Z#5A)Z{kP^=WJ4 zHixZ|?B#QOAK5%-!BQp*BOzbADQfe57u&6li(kn0H~$lx*34S_d7{-zOHZ$4XuE&$ zMAE0*Is8`_Zg;Pe6IA|Iv*>+~WAUoXatuu#E5BbaR_{sImx-{Ow&m6FQ%hsH_onmw zn)mae*nzTs+uBbN=a2rKv-<Pz490VR6AndPd}UpFVNTq-eCc1`q-|38_WbqQ{q*zw zSxuXqc{e<Fn5|ipe5&vE#K2EMtzO2(g0GdYzS=eQ)~?Xq%k4hAeaOEiy1H6~Z+4eX z*V1=0C4Z}X3oypq-C<PwOCqG=%~6*eN1j<Owd+{-du`piYJ%#vLb31XBsrC9ZS4~T zWimbAw%FEQ+7W45eO}HW>zCgm^KH$`&N`{o&c1$0+H_gJ{PxRb?_V|>zlaLGxyPjT zQ^hNOTifYhCn_$f7IVAb$y-xgvFwrimmiT0`qOr%uDYfacFK%%Q3032yvjhWa?xqt z!H&;PhE?!c{tj0S36a0LXl|jaSh4mFCG!vO{;n3d6qC0!{Z-2H_X5owukIB-6smnY zJvw*x!{iOMk3Zi2ef{yib)~Dqmsl&md!4h(Rph{34$%X9pYt@ar5#=yn*CE*ZJ{@B z?8e5!>F(3EePI?o@G)Ju)_&H}IHtROclwX5mJWUN-|O4l3$L0k>nW^w^rJrNUho2+ zW&X0O*9I?TK683a&58fl1CDOJ^Tqkyij%LNEmd%v#J`<kUClBU+fV=ApX=NEuJY^t zex@IPlYX^)JQcQd;ofI6T{rK^H7q~l^6gIJllhn5aUQk(+`8Uh(sc3jPy4RiwRO8& zy*D%BbN1<~Q(r!*CH4HR3;cACCos&ocRxd))Z_5pE9uc6b~Ep{dt<&p(Q%fWTC}su z<Lf;~;(89hPoBMV=FLg7E^H82mG}StC+Vi0oyae{lQDN^@9TW=e`B<`>;0bZ^2VpX zJEge2IKi}LdT3*cf$83h!A}mAs(t@AHEp5t!bcNVdY#^Ie9sHPe#NwDY=RpZQ#QDS zR6m`6rFQN{p3gryZGVR=?+krd^>NL_#W4;Zp7-}Xz4?3Us$7jXA5NKdial88qT0YI znEdO=$5UcUf7nm1Ro}Mj%9rv$kpphYZXb{2yPe%*`Q>S4-hvPY=B=iyCr{UDtW*5L zm%bx}<B~%89haZQN1v)S9M4zi>riC*aQ5bz|L11xf6DI8@VsxHPJX-tBhQol=8?BH z8f1%4ntUp4>C50_zx|}T{@Z%)U%NJR?w$<JJ(<7#B)a}<|J?Vi<Y(aB9Y&?+f{t&o zxcq}FA-na~k*A9%x?Vi!{QSk@O<`+%W6Zer_vCUvn5mnYn|moL=zIFKeuiyft9}1u zZFzp_-<7>bYHa`QSKi3F@m{d~g3H==H9yWVrZI^Wh3EyF-dZ6!)9XOSomHU^lcIWV ze3n`5b#c?DpKt$aw`CudoBotx(cO}}8I=!Hxbq(Fdv`6VK;WZ}%S+{RqK537T8p0F zwsV%STNFM&dTGTq9>$JyZyQz0J6g~3l<rUu-NI0=ZpC;<LQsBx){%FsH`hi^WxbKH z!>;e{rV}fqH}A8!|8;vfXM%E;&fa20llcp4pUv8NZ9#SIw$NWejCzcgxqdE>^i_h& zQ<L<o)}5_SUS)Uwm2L8dPb-Tu`{!((l$!pk!0*val|p@yIj7z%iM_Wn;O3r`wNcGZ zuHr`)@Xy+{UES!}WB$m$E<1PluX}F3<af}Wy#couFx_lEovg2FbUpp-N{*6k4_a<j ziN4Tt$V=8gZhZZV+x@R6bhGz`{z}@n%};b)>u2T36JPAUcqRAdk^hyu_Uv4&er6S? zEZ+srl(X|pv&-^rjf8q_=byMU;pv=;*N0Wky{ZbeSiyf)`LdeItX-?!_w--wpT3a$ z-L9?9=g!XhEP7Hmxv|CN^lh>1>?<dvZ2tGE|C`jbj{kc9nw&@`PtMl0=Qp0&BN-{v zyI0KLW}4dRby*w3R!uF_yJEIxLbSkk-qRj7bCvELI$Or{oz-te-KxU=Nl)Ysa-RHc zG?DYXt(M$`)$76;MFamv?A+tLahu;#yVZGmy$-*9?$0QV&dmMmRd_!p^|F!4h8x<2 zuOu^`Deqmr{nw^|u19&57Mty^clEd}taS=E{nhvUp6~w@87;Ho()`SJr_|MxwpLv| zccVbxVcnAaQ@h@>zgoM+ecv{>t1BcwrbYMK&OY(SZ(aUMhI293XV)mi-qB}|jm~(x zB+}0P(*diPimbZdOqrsQJFGVziNEyZok(=KyK2KiQOBYH(FrV((m#7E{`{Y`@^{sP zZ<dDnaZP8`=Xp6^nz!m-(YjrkGflp(wppt2Hflx9G7j~_sxfNWufsgI)~|9|^>^!z z$$Psvzn?B({V><|LyrjGoOQV|8^hK$iZt$?_9yt()K;AdjF)n*t-AI1>x<}(M<#1l z9H_lJ!<CUo->UjT)4Sc#$vYRTJ<R|1=-(%^qo=O*rri&3PkUgK*ZnivVU-})KhF$i z(~9_sp+fJ@7xZuNcsL<*M|Ly&gm|lr%*o<9Z~y<xDR1+5cZ1Wz_NN2eriK0O%=0E* z%B!pp-9GExTic7<_xgTs`S{|IhRuVgvRtXRN;aEK(f;?IC3BaP^y>4Q7Bqa=)o|kM zNsl*6E%x{?aIEV3yfw3fT}oolsZaN3u38(tlK)DqzT78{!`_+6le9a|u9$Vv_2Lud z%!<a#<wkd=9BQ<zh<Ko|NkuC5#S_L`&TDq=66$=y-TEqR>8)9z6*-I79}TYeIV|nA zhUF96jeQ*X%sUD{+)(>B%j^Ce*12r!k1V|VeC4&mmP@{WszhETeh^s7uua&^B)MX* zgXW3XyDV#_?OMzpG;`u4zqz|bW+|;!KWTe+<Hxo+;l@gAkvebRM*OiqdBs-JI`wcg zla$aEvpvOk?u%DEKKkD?>cJJsWVbtQ@{#+x>;l!+e<@Y)>;7`%li-h=MRLWH_iWXQ z7R_FL<<;hs>xC+3?)RDJQsH{xn?c>%j@#xl_M~`zIUDhfspNW;-w*w!rJH(K-`uJ8 zd!!fewkK;xn7bOAqSr%b>C*wM+x~KG3Ra!4<doa2U2bt%&u(TddcIY7zVl+;)yV>h z%XIYBIZUsGD6&lr;8AIA^*G%1)8JEd#%;zwOfy=qrAUT95z{>o+Zo5ee8IQ<9mk&! z-~aS4o?;@F@M5jsTsyYAkpgG(9$c~XUbt9+E1~=)-=b-{>H<~alb`oEwzE}bUT9pm zHm;eE@x{_J|GzmsZ|gR$4z&N0l>EQ<cwC2bKjRgJ7(UsF`yQun{2Shp`|6D03+Kb@ ztpz<yg?F(oU~`Q8`Y)y9-;LE8`Qc~&CNNFXdpoavo;%O3W<e#_6;7|MQ!_p-QoZ2a zZ9ChfSWQIU>dS?-jq60MH}3p!HB;c^h1acp+%8N~Y`gLV&i#DgxShvJX+f4l#gX}* zLaNg?t(KndXz!fU+|KL#{iyBE9p&o^UYLXk&S8^Xb1N&<L-vs4>gEFl{@QPYPRJW_ z-d%s?uI<F~<O_+qwVM1we7nLX$nWSp$u2$lvX9dKg&QvD_Wf68RAt&5GCzIdDVwxy zyM4Gz4so&jJF^~(?{ZF^6q_5i?y6l->$ZbxT0uWcIHP6>Do=j*NdK7QM(6voyQYSS zGYS}$J_`z1vQb=Uqj}N?u~ki%W~4jT{qmDYs{Xd+Xxh3L+A?OWu_tfLHhfX*q^$Vp zvKiYxW1s2VO}|#wZSrXezBP^O!Kvk^6!LmIc#W)o<%vk~hx8@R+-onppf={zkFVVi zwRXIJ`j)G6|K!<0@3*d=J!Ro!-b2X`qz`YIKi4{sNriDHo4gx?^U{f`FJ7e>*<^?c zteBwPvEljiziXziapdi^7JcB>;APS+xV*@1(cj}|il+92Fhpx#S$0mc`OYC`(ZBgJ zS<E7QH7#0itqVD#`YujkxiD|xw<yn9$9}x;Fy#GYyybgLSwQ9|aqk65OUp_HE-5T` z+~pu0%$abZI^gOz2ibR~S88&%O4;;Ji1~Ji@kPz%jgHC9YV5u8S#tjl1v{4oO7(w{ zHSd;Aek8zZaM87R&BEH}yB<}3x}<vTkJO%<3Y;rKFCCloVMpkKV-NZ!AMdSfS$J%L z)I;r0e3goU@dumC81xw{qN??-W`<Wxd$>{RhuF%9R|>`jH)OQh9j^A=-yyMOT87qj zX8&JbJRg@`@w0K>6dSvp>ylJd;QPvX*DY3vZ_YaMf1=LYn1(RM{{458on<F2+pS{t z;cH@;lGD9qb-P67WmKp)Y+JwfR>eoPH(yF`o+({xW>fo0!sOyV<#hk~reW{bP8PqF z!V(wu<*84!f{pSA9yjr0Yb?V`KMT1`sxg^s+s~n1ao}^i|DnTvar=!TJ?>pi??1Si zCs(vi-=W#DxOLl<3ZtXGYtPFXGydYe_b|Yrg2llk%zUMTbz{?kr&5eO`_&$s>$aV0 z4?A+QTHI*v^W%>L98PQqVJMHfbZko0W(NOhkN<{5@8%M8;wcf~@!Jr#A?tPMgS)Ku zb3bf&-al`_`{<Pna=UW{x46B^c#t6VGvB|_t6hEimdWKOUN7Ahs9GGF|4Q%Ex@CD% z0p3q^e^trE#TQ&Y`Qq40=aL9^C7Iucm9CpJ))g=2ew1g<5P6MdKJ%N+-`6{>=x7l= zuhsa(GUV)!sb@drxJhNyhfh5a%&BrUbzYD`>vc=N)!`LkSJ~>{Jl9&o!*BgNT=$l< zr60Rj_{u$7Us`?C$l86?tfg^ALp5J<?y)H~uj|EGF6Qla=IxCUeecA0r}YO{f<X0U z^*-nA>;GrCUtXni;DUOCd}cs)OpX?}LCNV)_vg0675)D{XU0SE@=w<ne@MPxeJ$aU zz8}wr)%HI>t6r!q-P(Im<UoPL6R*n_413vMEOA<{__JV^?236-$vjmzE^Jpz<Fb-V zky6O`e18VhT$_R)8`5@)Xf-@+(CPbh`d`?zx@|096ib#Z<iGNL^0LU2IX*vcZ(@mc zdttF_qQm{BFF7+hYo6wI?Mzl*kZe*>aGHxziDgMgqU7FmKDB?>)*Rrtqiob`P#Zig zcAm&5hn%D{w>DfkIH^=q-T6m&zkuVvt(NO5+W4McnVI~CSM~cN@5&dt2YFxF)}FY_ z-J%!e{pzjLa-)+Cu2<Ub*<{;os(!toz@&S<z{<)~5+Oz<iP3fQ)Mm23izxR^;&1%+ zc%rc2;vMzt3LcnTF(}z__uZP^d6r+ET-v@xYi8HdBf*;2j#*cJ6uR(yQAqPMlaKa` z7f7CH%3W`@Uft-&r_W2>PRiKi^kvJkGV+A-uKYgF=1SH9!|GRG3Nx<S?tklj_nk)l ziy&unlLt;KLl_P-rvF{sFD?1rBBd{T^%8%slI~8%&6VX2k)nJv+m7+~Gw@F2cre5E zW4G!BasT-Fxt<?q%>Dn%<WAuwwmO5^c7h7i7Hs8_Gq}EW`*pJwKJ)gAlyKZuH<J=- zUBhlICHrU9r3SOggFzEgw8S$k8kW!AG1ct(?nB1h(;c`O8((R?Jtd|(p;Ey4y{B{D zx>KOZYTu&OJRK||2U0GulsvxKyjHQ_<FMB5Qp4J8v*Ogv$IiHQUR(Vo=Gt?qlW({1 zb_qs_+x%N_&}3#{;N1;OXXWIU9$f$9$D>URHFJNw)sUI6>~_pWse95N+?qD=$XOlN zRoJ_H$;)|0BLB@Vm-x%JPj`6MWmkS(=0Zz~MZ(jlZ+{w}D4)Ha880ivz;a1-O{RkA zfe*KOo+$5K&eN5aQlY#3Qq!GtTOB?h?v{;{dS@`r_?L1q&pf-zJ)0^y=Vcq29{83r zLsoCeYvY5?T)a1W#V*aV$=AHXFO$t;z>q)nQKRMNtYzz8`re({$ow+%$<fkRGfuJY zT0Du1NkXom;>=IO1v7l(CY|+KwqGhpJR^|d`F`WbTU#C6GX2Yr?d&<`zeG^=x2Zt< z+S%f+;;z5<Tc64M=fdtD6(;=TZ*rQ>fxI2}RBs3zUil%z?Nzp<+6JYt+_T&h*ySsi z?dv+dUupZIBcF~fo^<D->zXT0tADMC{cm}Lp*`%#s;qnI51eO4yYARBW0g%y`SWWX z5qIC*XHdE(z;5?re+J{ff`{4-p7*~TTDs=2gy?|_KMQh~f5^@{tG@220MlN#b=De! z2h?6lPH6Q{F1!D6bIkk5Tf0T4AJuvra-#nH<=zEM5pUR?^;7<MZQ9Fn(WW=fBUd)S z)LZHCL`H$edwqN}AMQ!*G@e;>VXcD0-A1#7yS^*c6xELB^Kbs<d28j<lo=vPanh?U zUoFhw5IwMt_h74-;)y$c0;LxcWo<I_O3yBRW&6>EYuArAnaTU(S<F{2Ejx4U$j%(u z7I}`@*D3{HIP0(bey#nR>dY4J2TlQ#0#a(tELL#6-MJ)w>r2(Sn(ii77Z%6FGjPf7 zIT3f|eZ(r>P4_aN8mr!mxhbGB!PalaN|u6uvxAr3{k(>);Lv{4&|A9m|5nz2QdGCp zYFOABU|u19%QDTK{g%Liq}@uaHl03u*!R9#XX`!X%mUL7rSIj`3$Cw|Tgh+g5}RD& zEOOvO#$o1jl_?gcmp44xb!ytI<{MvUW`utEv&p{xh|20q+R;;&`Ab~)cljcCz%==T zcJa-nZ43gFul8!aF>?)Bu<2E|(Z|(+6TURZ&t4pP(|QMk*i+t_(|>oXeh^|#^>$t* zukAnARIFa_V)>l%6YB;2j{J#ydq!}ncdKV?rilpOY^`@wpW7t$99uKtl3e8u&4O%D zsJ=Ndck)~RDGxU$-8X)EUbOhQZ%3%(;hTw?S`7=2I%V_hsOK-#y}8eW?dz<?JX(=2 zDwOs}N?Rn&h~??=bL-tZ;l=;N#f#1y>&{y$W&P*Lkvl(@HZb4MogkAg)}bTrd3U~_ z%`CCl#xG1eCQs^Os(5wAP~a!?eVJ#=5;m}iANX*pDcow0H~W4=_mXGkvqHJf+nsy) z_kd6hU%`W$`_J<2ZxXoX8u;PFIw7GCYR^jjLv@3W=D0rI%JcfOa75AemdX38jn9hO zPU6aZdvE`xJ6cy(trD4c`RjKNDQD@hzhRkwFJ0YRSbOQK%%|;U4aK`l)~iJ3EsbCK zN&o!X96gh$hTTH-jC<TftGX6Ud0}GayqDiV;BUT7ZF*aVXd1^%u7nqH0js4rR{i2S zqQoWdXtUum$IB1(?<Jc%)%SV_na8k4MjO7>6Fz_2y5g;u>g3zzi`pE|O+2sZu~>P< zcC|o8oq5i`_bpjpw!^*cBCp)S4S(G~O=>>>yz<C1%MZPY*XQ?gB?O$ibHyvGn0cnJ ztfr|2UzhvYWnpJ8t!w>Lu69(iEk*FkPB9Kwt@4!zp5+|!Yw5LqbZdv2p7hqRHG-DE z0xs~*dEMN*E~0nG#Z@^*A=!muv0PK5-!w3Z9$3U+up;8^`t!enPA`sAh0IzvFOhk6 z?fTMLEwW7unRfi25qU?aB>Sn<mqU?(SK1iTLc_HAL$>alv4DHsCH4uqfAmUNj*D(w z#IP*8p>y?Jsk7T2mMxpxWIv;E_G^(pw*-}w_~mTGmn@du-o7B9*V@lFbWML-M;ya$ z*W{D3rjhqHKCt`!_2#u7rpiIq#&f4A>Q3=4U_5h5wCirL{O(jko2egitTZoeWJp}n z)3<X*@Wh3GZ{3uc+V{Qlmt>UAmT0q<S~K-J?=AA#X-g(Vve`@e+f6z*?|#lMUdB7+ zZ`S<yd~ez92-dE>+<w*{_55=$d_1z+?S?sj?cp8T%<PR`XXnL#4?G|3tjpc~`w3V4 z>}N5t8hr<D=gRHzoa0-fo18Jf^3DUn+EA%Fu>`Nw?x2qcWIi%wFz^SSKgzsj6~A^v z^Yjpr1AWY=AFq7l${e#WrinYjN??JcaqIp2A78t@N!j~;i{i^W)lX{G&nQLksx<Zf z4ANwhRD2bC##7Dm#ZsY-f>8=9uX<_RUZ3@CeO7&V>mhE1Gby(`mFGOktZdn$zTK#L zan8D}Zf>_4Q#Wi8xfJAm`0Apl9X@k;eREfb)$zR*e~^2-F86SXcog?cJ+24qj@)P6 zb<sGDH*XQQ$)8!1);2tkXkG7j_1apsf7d2xpKUwNnef8ru;s*wFAkWu@3iAu5p!Wz z%0%h)r6<naSZe!e4aah(9q*4QS}}JW4Gi{GPtg)OvTv?q`^ok3Jht-=GEe;*uGMgK zW}TnvAKRDbl1d-FS>JzuLqw8VuhiAA+9?ND9o%&{Kl1aMSI4zd+WnU)dw27nnz`B4 z;*^&NvtZKv?av~<Imj;B`s`Ykbf^OJI)-Ihb60$Pf37T_J#@*M<t9^AQ?9Pw|7mLE z&yt%_dtXT<IDU0(QSf^Z*YL;Vu44SU&ZB|X*B|-4f4z+0f@HD1%MJVP`z~0dwoZm| zCRftbwgAR6zp{2&D771|I?Y;eB%<oO(+YvY>hr&9xU-c1y?43)(eHNKZq87vA5$%3 zJXe~1u=vm}e&CYik}J;-$wn8-9WYPsRBw5D)=dBUwKcm=Z|P#1F{?6ibC&kh($$mg zqaUqOuu{BVdVFc+f}4x?O?lViX;o$P<!R-*={q{&7`)5vPRsi})82J{<ztZz8mG>3 zsm0f>VVan}?xpYj6;~1*Sw0-mpYCwGOkPa9!m;=6#*VK(^Q>yu?8=n975&6^-`3_P zqo$L(g0CLS{`YT+-p%nv_oLpznVz>xJ~Fv8G#Bj3Ry0W{Yhzt%cU~($I>kL@MSo|8 z*79cVHwv<~K0)78eewbiuzcK-eqS_%VKaARx5Ml;>lyT|xZ^eiJpaJ9A#4rn#MUdk ziXTI?e(f^YUUS~2Fe)==IZrw7ySb-IYhKRn?wRp6n=$X|u>@J6*7-cUY!vTsm&bLk zXUN;VWD!H#{Q!aOAA((%y|J6>bN`-jb>sZ`GBFI|`;21m*dMQ&=wY<KF7?%x!XLa% z%X#u@U)_^CE8MG7-*kp?+WHS`Zb_*h_~Y|T{+V~L&Xl&#Sr#YW#Lrw2wp==E-6oyg zn<}DSvI$?^c3m_wP&(*oPDWO=l(V$9z4oMO$Jgg6IHv#4;!v4ad%Mj-V6nzBrMm&Q z)ie*Qu5OyVAG9hhp3%pBt1VyStI!1}=N$H)-q4k-&fC?U5coL#+oOL^nC0e2XqkmX zss^)s&#~$;eKh6Uo0oSyjJnrsEYbD#-o#d_ynV^`6p2}HgJc+Wz9eL*cC0%W#29nO zJp7g|f4rl<WQopK|8;8vw^rK-A6vm%@!^5xyD7R{UwV(_#k1^<cyW4Hqd;Qee3_Z^ zqD&uZC+*nKdn+sD;frfVo6qj-E+}5;wCMej2NGKByRN*+aeMLS>3-9ts~8*JUb>nd z+1gxmp?v%AS0$?Hf1`Fx^`ExfUs~9mD<b26bd~wbU61DJRX8(v?|#6@Y9RaL!j$Qz zI|8{ktSCrxVetOWxQuPri$yOSl4px$t-9*+^qyBBgRuO|#O_mUm0H}3ncFRUvpzld zUcm0Z_R*F3)545Or+D1Gclq;eyX<|Yg-1P3ONKVaF?erxEShtEHq(q#b-qGD)(gE0 zxHl{*l3LFi7VjIkWy!W}f7Ck<txc8}NMGXo`sTsP^c~#ns}iJDwlZw)XLc1iP!ixQ zxiWXhsZ)XnE?v(|F4fDhymrcTah?O~q3V+@(~rn-E2Y1Et`%ufd#WOJ^Q2`ZUvfQP z`@Ryss8xDGk<&WQdD^Ml;wMw&E8a;RZk1xZlj!Nn=)>Gy{p_^0h{u-R=$REdtX?<f zips|@Jnsi>GiX@e^QLnF+Y_rlI}S7FrRS_z_ak`am${OG70U0q6Lk-~wKS0KD!8{W zDp@k^?c%0KTw2^W?`%^H;rU*_cdGxK?QeRI>)+kiv-8@X69L!Wc+Y;>Vi>t$x{vhY z%U{jKuK)a#aY|dG;_{Py0g-Ld%rcjLs7}=qGjHe!^{o0U(CpXs`<a=8O>WdY+fwh_ zOWrfEw{GS6&9eivj<tqm!_9!y)mI|so1fLXzz|va$-6SVUdo8kCuUZ?ZI+l)bNuHu zIW~n)J50|D?fvayB9^e}$)|mm*IlPY<uAGBdTaKRYQ?w}vz6Zd-Tbich5&1UbIiuM zQJW@R4qvvIJIQwX_lbARbT>|ZuD>=nKv4I<y7VIL`Aw`d);#!nR#RZh%+tSx&a2%0 zS)^d<Sg`5$nudls|4vH88uTy)S=J_B6Wx+0dGqBO$A-M%hYK=aERepp^u&+LQj-_C z8jE)udldfBDGQY3DlPBnab@E#x+gl9J0bnS;=D7ruGY_wu+rGv!?IzEzPI`5LiKmk zw(CCYo5>K#@hCukxkkgwIUgDix8FQ^X-<fgacrch%XOQ@!CQ~7SD8Iu@O<2hn&Ua2 zW;{{4@MlH#(tE$Mwx~Dk6-!9Jb7VJjWkFMPgDa!XMuyAVd#}B@$(AzpZnT)N{paRq zMb))CKU@~Rv+VcMpKV1eE;z=dHYjl=Sgnnklc&2#@IZ>shdWEtZnlJ{KDxMNx0YNj zBiqDQss38A?4`Gk<hw`8mx@)rZjNq<eX!3z#@NXwW7cQc5T+fUC!Jy~5PsynwVp5T zbio<Ddf7uvKI&cZ_onaj-EOge_RLS$jy`I%+~hwm_lvwWx9JD=MhCHki=|;(J*Ixk z%s78a+~Yt+U$m3eoT=w$ms}{hdgy#{m(P~suzge0W>)7-i>P1vA|WiYf4%OOc@;OS z9>km8i@Du4BRob`SG-qU%=FxCebYOuW!m??x%er0eMDRSpEjkKiF(z`CN(^YTx4`O zKUa0h>ho*U_{ucOvqcVohHs~rYdqQKKdnls`<lt#$0cG9o{2bK2)Et;O(){$*O_zf zPJMUUq5U@R5+@I>Fv~fX2R4;Xm6`v1*>ye9Cy$EU-HPW%PgOm*vayf#!;Ri<NAHeJ z)1sc=5<XC(w@xExPM?l)!$N!aumnA~pzmo5;$6%3RG7Z&Dp;;l@>%QV86SC{#RVrq z3g6eH1Rl;&YCbphs(vYVE>F~~D{&9cTuzg*PIq81pSF2h_3NO^8uHIKi5$3e^wJBN zgzu|gsXbk}`S^o%U*(?~uZ|Hp5VCGUXdmnM%vG*8IagfSz^3?NgHMd*A-$!3uVrp& z-Rvouz37G6nTtCa%BIO($h)>GF^$#WiDc2cZ2xTLs^%ryA^}<1;p+NPO1o4#E?;+T z;!a5CYpRmyKD{A?;c}GF->MgH-YIOFaBABZ-kWE(dfm2D^!jrkvRy%ZS8=~!f}l?2 z%RSuzD_9Dit6t?!@cQ~Vwc_2IdDrwJ53(ABD2FWj;utKn`DFDCYetqzdCrX-)7<u* zicOz=&EWftSd-HQGAs6q8FXF^To*axN^41La^|%?j%x%`gTJl0eER(Ir7K!jm<#q^ zk$h*)e?x2I(_MD@(bJ2r)_n?ny=;G&+NXDKg8i*F-Ras~U)o*dS-kuIvyZW67yoMP zX1cL6qb+B@Pv6x{_Ke9|i7(?+dxI~f-PopEVc4OaX`XPqXF`W2n`cos(+=&690}Q1 zZ(WJ>UdVm4Qu<Zwg5&F@)}G%K!5_Vnq3xZfhQkFOm$jzWm#<V?c5LiErumB9I(Kr$ z=F)OY-(6-sC45?6Kc{TB5PKQGaM?BTgx{*&)mBz1&5N?7SBGv_Y!IDy`^bXYyBsyA ze+gaQH!JStMApE(2%f*{o4B^jR}fifTXgCBrqp<MX})Qjb<6EN1y^-1k=3^fn6z)_ zMqRJw0;U~_Y2v=oTcT=oXSzu+u6a4V+hVoDbLD3C^AEpxzH?8Jmix|G^qwzM>(<$P zSH_q-#_>OXP5IJTG|eIX`o-RcyqFX*<qsR4*BKmK$LE?aP_nGM`uPJv<!Om8_vSr1 z6Ce=A$F0}EyX)B39Pb_#4rA?xhh+zRGt*m6@LTO;_Fet|_ThP|`(}4A&CoMFle<Mt zbqB+;-3wSFcgHC=sOv`tMQ=WJUw^Zq*7mI4sjcVs2rZNhF<<5Lw?xzMZC!Rm{{3a| zWj;=I+U{<2OZ31M)|0jMR;z2cuU@M3Z01N<ymRWr-zt}EFYWOCr!j}2?Tw?_$-J!i z*}{9|=Ik_kb<roKa*_A}?`N?&r>(wJS<m(exUK*E+sn=-&gXgtdoT5g*0pJhU#)6X zS#sNI3a4l&?~0bm>i?JR{Cs@T?;5L#o^5rLpLl(H${+sko0ReTmes1QR|97ir>>lR zT>HF{|9x%Q%jXU;GXAj;J@D(t(L1Lu@tXb)zhpM2;AKPi4YQh<iOoy3r#MZlpTAq7 z%Fv{*yL=JDJ0}-Lp8ZV<hrM<`J$-x9-LTHjS|@~-?O!c);6kB}jN3PH)q9iT<=f)p zrSwD(w7ovQd%?z+uF7>23KW=LH<y-i6>9&Rx9he3+jq=&%0C7CnR#vIm49y{W6a%D z43C`DeZ;jZ<JB8O>ok5DOY2|pPftWH7fTRWT_3@6>BQypeNvazC)O>wIFBLkU9w35 z%jDwAGyYB7?5LN`xNLX!mzYcZkymq~oy?E5+*1*0e{Hbys^7N>KDXA@Ef8RSpYNue zY{jg<)>$L%|HjRC!W>_BRn-agez!KtIrz>#CE)S%m&pOKDHe-Y{&nI^com|#PRy^2 z@#j&Y%~@aMjisX&s85@bdz{z2O@L{Krsa{;GcHlT8SF28u*om`{_;+^NA`ma*V0a( zv-y)Q{hLAjY5DO9oCzm>9=WO<u=mcTM|oN<b;ji_s~#P>A9UfX{GI%Dw}l>D>$$r_ zVix-r)v~#Xq6_AqzAbt*b+0o=LfZU-3zm0yqPJZMN(*C{oLi)?=q>Hhdtl$pi<7O> znC@*U5Z`1kEf8O|h@nkA?^DpGr}^?62J2?Jo?Lt-YgZ%dhPfNn>ujUspKUKF-*@)f z-Cx%^626BXu6jD<o5Jn2hZ%qW%GF)?e{SM=53geTf|Y_Z)~4?|A-pF@LH%7euZY6U znL7<NosHRdYzq@TrTuKaUaLUu@{K=Y7B7BLvA)Nhjc?}RV`j>#Pgx9ZHk41vZ~tK7 zT==Wr!1|le&Wl&%=bgFz|Cmf(gTo#68Sj=ITle~%ib+Jf&`n#jBL_@*(l5H~m;86) zQ(~IVfrl*2u|cP+8#7lw^VwC@>OI|jL+5?3%?fSRE$v^t!zXMJ65HN9Nyhl1XKK(9 zlfE04KWBbzlB!$!=k3;8qWs~@yw6P5pXQXuDCYGrvfy;~Mw8y)?>_5Hj~_4Dn4^1u zF=c~IZ144kg&h0}Nk@%m+wu7vva+^mJ;(KJo2c1ipFbIl@4Qwp^z9Q}e7opUs?D7D zIn5FG>aL&8J*)MO*=OUk$Pe0l`&TO1-CS5WmBCD@SJyUd#n(TZ>`VJEPj0w({>#kd z3%%L8p0gBwH(g1OyfCxudE3RQONITHXwBD~cr{Y`*yLO8+7kpsSVR<VuUxw}a;{Z6 z&#uCEzZQMH`SsH_R^_ygyd0UiyB#iHtv$ha^8an_P%k#|GNsA8AN}{6Ql`5_z2Rkv z?}e6`r>oD-%3K?w{WgNZb54y?=pF6zRV%{G*Z9o0W2;p*H`^p|{ZPi6r7pj=&AS$p z{i14~o0_+?cR}@m36j+t;?7@t$@IW)|Ie=$UnV5!3)#QARdw}~AM1|Do7`-Z_+QUa zUwL%u8ri=I#~RwLGegX^Zr6ToT()xIw!G3;YnBGI9ElGKnRxBF$-9Y}6Hd%zo$t)~ z;MuXwY0r-7h^*aJIMZXjTdKh0GvC#DPy5`TXei~?pOe1V?dq)juk$Qlge7P&`qU~o zTBoi%>GWCcp0N3evnB7eE+~9n#QkVv_@jxL!di3qx<6c2INMhIEKT*rT=jo%_FDff z-M+Mw=|;v4iHA|vY3lN&VutJ1r%c_hCuO?$eaZO;6Cb|I<2^s;!iJY$SUm5gSa?TV z<*7(p_|$o8y54K!)oB`xIVMLHxBPk1?3W-LXH=}S>E>5PEBntgMGv?w-ll#&KI{86 z#p;RWQqPZ{s6HvT;`n@@RWdW0AL#9OSyZDeSHEhjPs82#^*MoU;qu#EC08CxR`a;L z*Erc^mX(H8_F1>fw&@ePRF!)e%%mP=y~_E-a7b86GB+gfPUXjC?_L$&KQG1Tvpl!i zjg?g*QfTY5>#Jr@Uo|`A()Dj*e6y3pFDWy}UDt23X@1atef`!fUODq$7KimuJZbe- zZ2u5C#jbgxo9*|j4<oa6XUc6}?kCNDP)xG>$p5J-@9S@`$O~&brSks9)hsDSpR;#A zeCqkHo#<zw+N#E7>QJ|*?<<dXPrN0Quim#BrP^x#DIF$9?U$!7SklD6mg+6^%U|hV zjnXC!HeKPkmjaI}g_Muo_?qJ6`)9uA4&@KG)Yrd0c3_%D!$Xr5p4msGu0;RI_grq7 z8|L@N^y+8(+LT}CE4>%S9@H=W)5;RVZR*gz=eOUKHAfqC>i_5-m?YYnTKzxks^^WH z`x99weP8Tu_FLa&iO}9ncUGO}&Uu=hr!3MdalFQG>&vKxdmp-p`Cakfw{wa%>*UHy zF_~=)Qi`|Nh})KA|39kP!TKZA`+1mdimPg#^=5|EhkUP>T7J0})>U%%&ad|F<t#h7 zeZ(#>-I*G|_@>UpJ1xbA$^P@l<-sS92h9;$e4%ce1fTu$3ziLX_S-u)1~Hho&*@Zt zk*M2kSQ5__pQ+<JGvlP$gsm6&3rbBz4=}g$H@j)Q4O93l*Sy8`MYO|mmpQWRMN11l zn3TjUh|V!_QFwVdX8zN%6Cy8T7@XtRez^Mb5})e}+sh0AvU|mOLhRzs$(moB$I#}^ zw`#?n;)Ag!(z{%4a<gY;hc0Y?71gk|GOTcaOzP}KmXe)jzdHPQ&D$&&++yEnynE`j zn-OcPmNUIzF)J-UC0X*g=(wN5*6mM9&bH`<{JJK0-}1Iwa+Flcji`msmV_Bi7BCK8 zeQwecdG+1Sl3(O(r=N(K{?sPHnKMB{WTRW&>n#PF?|ksjOOu}!UpPOebTQZOpl-dM zZ+|nU-EMQ{On6b^H`kJ_ys@q&F8}??Po{HLFtBx|u8o`h?;%TM(ClUZ%6PhTW_D#x z;$(U{m#e`4W<uFZqm>M73yfobc=1{7P{{Z2aW($;KIPf0xO-pjPH`(>C@lKTADEwI zA#tZZFXhtx2cE~7=IjYSp?Bdz)FG~f#fsqzd=FVS@~TL$ox7~~+T23M9Fr}QHYHQn zdVR3j)fh1ICO6xT+S9igLR4*Jr}}!geedPYKl;P_<CDF%a|$Kyt@yCzknPji?>=t6 z<J<4VnXowVgO1D$X5HiaDioRbrt=<~Upmk6uhxa9xm`#97Au^Y^JkCj>3Q}7vYmZ* zcg!e0(CATgy!WtnYu%R}3SX~2v<<ko%jG_^pP5$L`SrhEY~nk+;Mnh1-jx+kFELcG zf177L!M<eI9%o18hSkzxUF?3sfpgPzjJGlJ`<-9^d*`u$==Dammv+o<u{K<I88m4Y zcSW^gKL7T4c^$?-J*4ifd#825?XYIruNKZ<+H5<RcPwHslgiJjNIN}Wch^eimsRWD zH1izT%;2vP!urR?@@k|}vc8Iuc}jBK{>~Gh6gyZW)Pqg64K{ys`&)D6T2jcTz4fg# zc%7A-O~2Xx|G91<i%@Ul$J^7Etrkdge>;iC?&bCA;bKwC|L;q=x##toYu~g}LKF{d z(tO<X_tMQNacx3T-3cpM5^rydw?EJ1sd?mzX|D4$*R6k+tvyuTc&YoK_5QoF^DgW> zrO_~Prg~Py=j;oO%ol~KZI6{P@sv+WOwLpP^T9cvZI|`M?MeGS&t3C#+Qcm<CwbIm zuQ+F+khf4-wANV6#h#_N_-Rz_2Dw^wG0De|Ti!kXA-ecO!MFbfV*6K>otbBopP74i z)s>~fU*c-_vCd6+B(9+6C#@(}`oh}nnDP-_%M??myw{&kMlC*aBx>?~9i>UhOa4DE zlzPJ;usZDUdc|!D$EyAWIefShzU5VI>G72d54-rLH*2quoS?VLs7SJ*I`LZX38#~_ zPcrV#-JUEpzby0En$T=F)|5*<p=;!}-+Icc$#dk;&LZA<UtT=QkiL8+U1-IzoxI`G zX9?EY-aGbfzttkQ+7qkJuM+luHcPPb{PKHgJ6@W7PB^>PQSQtt$?D$vk8F(hiaxAs z-aco?H;eAMO3^Zhf2$aY3LZ~dFmK_cwQUM2)hEQK-du22=U3j9a{nTJ!%wRd&8yWe znKw^9za#hH%#Cd>HAgQ`ojG%oQG~Wx*1nuWneQH5s>$het6Rjj^X2;AK3f%L@IGI2 zQ_S=3Z2zDwTRl`=+!nv#(EQ|h;5yTp&WNkmEVN9f8P2`E{9ydmDJ;5;TDv^6!|R?U zPk!ztx=!Hyrqeg>d|J59;n%0-$<_G_rJ18<t=?~*<}dmt=A_)aexC2MKC>wozTN%Y z|NPZ;6-$)1FWYo8{4VSI56O>zUNh@ldyR9+RatI>*&Dp<PhBc4K00@$i>CO?yZPHB z=Z7BDycc?qdCBVYxzfcOW*5!;`{bl0S3=59$MD8!?_|0IPR-YT);HVZ{;abxnjg<E zF}`MW{oAUV67YVy%6QOrtKA;P=goQoK5_{;hFJ4m-4;GUg3EEy_H(RTJ{7jxIkieN zT{!>m>E)*`&)8PG_}_GYdG7P4-Piv9UuF9<tCzdoyZnDhO~1dYP?l!ZAKs&^-m|J% zXRGaRnE7yR?#$m-!H@Y~uNSd=*zGvCzbT@j^x?txo3!M5A8*NMOkEdrRP4Z~oL$!v zp7NC0DP1#KBQaxwZMjCn#HZ|B3GpwctzB7dWV?ULn-<6E*0VmY^#!~7<pc+@g!j8n zJ+c0D{P@@F$FE7bD0F^Yp|aiU8E4ax%?~DcePKJdHe>IXIg2)YiY+L}nwr>YxIM@? zuVPWn{rx(TnsX$=WQ_LjtxZ~6Srq-jUM%AI{m{JoOgb&cm5y2dUiR!Od+FL;Z_b|$ zUBDa8*S2T*tk$zF5;pB!x4vC#D>>k5`un<lrnCM$({T2Qzt$XZ<2Kkd$C2?(_g1dR z`H?Y`&zzg2S++EmJ0<ej`?Fz|w-iCUQa|l`px&U*_0;P2p93=4;%BpDSa1BkZXf&4 z=e(wow}LSL{Pa%Q^H<)yUnP>c?8ns1H{VX)Xq-Rw2D6sw@1AJy^*U?1!`#=IUGn_g zqrW_Cj;i?5<$w46_*88cf7?e!@!9TK$K>XBy#4Cgx%!*SLAetiUAm=>V#?1h@ouP? z+Qg9SEZXnCYnP9=&i_MBg(6???bo`gv+T6YVg|Qq@)`}z0r$4e`2TLn+zkt-y-0C2 zim&R`nwj`JZq5563%^%dsWvHaG$}CIF;)CK`sSKN+rl@qx>;uZT|KGt%=Wm2O4H@n zSX_Mj_jcW`u1}{@MCH$MEO9yW=j!%LdpBKOqPKVdpCjI9*qm;)JmZ~_{%-cGiAO*G z@ZK8#f1}cVy@Xto*w*J?W<Gy2S<H6bbf4SX?P7m^d#-BqZ<D)rfAI6%eZOogC!F+F z55IKhli`V@YftV{@@{9?(jB5%ta`Ry<KjA@tG=^0M^~J0=)Q5TyL<tI+cfc?`96`^ zq1AeCpHDA$+H=FUEb};1q;~eU)G*&oGG8WT{CV$LzFq`;Y>ZvNnI6`NX7>p@9J5Xr zT+Wm7I&vyRM|jP~Z6}S^i*M8_R7!K&V)OpX#v2Qb?*2I9z191jcKam%_&+Xh8rG@= z>dsqH|G)g`vCchzid_~Y-P@E=X_t5XiJP|f8gcPE;eN+^mA6giN|?)Paiu0aG`E67 z>E+QMH~*B(S!ccfu5Fs@nzZ-vp_(R{NT)a-y3h1x=3nhd({QHc(R<TbHyzPhTjSL7 zhjroie^WD_3%vB|*0Y?<7W3iims6W7uRooYDpMO;Sh7p+%+_f;qs<?mQtOSEn>JCe zqx8yEf!S|0=LUG(4RCsV{#mx`Qlanfxz}{dY2@!)_9xniea21ph#=3L9gC*%e2jLj zi1>IXOIpod<H7##>u;nvEqNV$`%=Ne35czk=RRy@n5;at)oWdT&a;rCHBs)%E;-kU zCe_d0JY$PjU(wE~=gV`SM(*ocpE>)_Q9JGi&(@n-o6mCZJN2HO)8<di+wJ^Qow?LM zoqc#)-G28x7smLH89)8cU%j!~H!DzlP2Z{?#-5M={Js1))6V(ntiOwAdwCac^JBQ| zy5YwX6?rEPr-=+najNcjSBGr${HlMuYUebauS^_s^BNe%MIh(OC~#a7tYX|#^6zNS z>XqlL#OrP^F(`A2tE+fZvFGjf(!dor_y4+cN-y~7w10)4HlG*UxHqNx|Gy8f4p~2D z(+(@mEX^ssvXjf4dEc*@N6Mr<mV907AO8M_yQrTMQ$_SnhPp?g-mB!lzI)x6_TMOe z<*l}pGR3*hX@TLplvYm)J9%Y8`N7*}Gm4KcJuTrHx92ej!c}&4dKbhy*KIz-Ub@G3 z_u^wrI>qLt;t7u)=N}f`*(*6u%W=`BPnBy9=GbhK`S)eP6{+H%np?TmU)|ro>V@)r zm8_t;H-%3{+u45XR#?CEYP<6C_cMirV@)FeU-VsCbvQ!q0+UQqN8?W~CGnk?o3?u1 z%WmjaNVzRwwEW)h>AA)}x69^nmFAhIE;){f%|4D4#%bL4oNpt4PGR!&IdPJ+S|{S? zk%FsD&T~!~?0xu9b^8||sR<pkuh;l*D!fqpe@)!q3|GV7*R?l@GI^?sPkmS?_Q3eN z-&!r75VmuBcYnFFyR_;mPgKKUy%o>mRR3Pfsm(Qxf3bbrq9126`KPUW;_Vr|srFfd zbW)ylJ<`s~AJGl7SLE)mF^{$W9iEx~`NTy9CeJOCHXgM5ws)EX*RBjP^OfPYEDE;I zlUKX<-#1pBSAR?QsQCSrub-^G!x}Xy`k&sGmiaN$yjyST%|7yN`p?Y&Pp{s}ms__Z zJ&VO)H`kV;4ClagW+?>=Bp;tys+haKX0_O@wheP9>E8TpUb3qztOaq{;GyG8dk!7l zWx0Y)K2OV!JO8(7X|eKA*7g$@H{Jhj-jea0_0qlQBl~qYPOnO>c{-^{%l<RlnaaNt zA2KF~`7a6CI^E~?;^1%9kH5a0wEt>glt=vY+Y8qezT5XQWKO?f{I>cU?@XolR)3{t zXX+lPsrwT)M{M&FjUeOg+qO^ev$?cQF?#PF&9J2(voG=Pd}MOj>Slp|u0~X;w&D4G z*I4H;!wyTGYalF^kY91yG+ZxcYxVzMk)N5KD6ZLhcJ{iPn|MyIt=YDqWl!FfE*ZJq z(XS?Fd#W+W*M?5CE?ykEcz&Gvx6Z4J_a0I@Glg~WHRk{8Z2twF-4xvzcY2%qzmsYI zjaC;J@BI6(@1$?|^qfD{Z{xN2C#5cpPCwVcI)nFn@$+e}&yNV7W4iNg-r+qROLGtF z_M9=&;k&RR=Hu73vp5|QS536+XPptMzNac7fKy^JKSv6q*qZ5!j-GdaX1ccKU-kd4 zhgy!0l;_$0e11sZB4QKshvNLm^m}1tpZ~AiniPN6%5HVI(f_a%o%H`7Z@zka{z{2h zLcZJAZr9vhQD1&rdz!p$QvEu)E<S0!QFC;|*GFa@FQz^<bNF+{p{-6~S?R_@^XGX^ zH@0DyiZJ{c5IXy#9Cz;S!WhJ!=(!KJb6j(^a=gKnRdUVuYf{MC$b(f=1<x2QyY`?l zcfX0f-@dCmr$$zVu3Y_8HKyujxlwJC>vw(qt9m=-SvClEOR(q9y-}BZ@aK(wbGJ3~ z??=Z?y1f3+n`mh_o3xk;hpH9r{`a@_2LBJJO5SpAs`eeFh*j0E&We_+)%$sr=S3>z zp2**qyW$U%)WcVA*iWtva5J>pg4k=!vVp-okbD1vX@+s#numP9ze-~|b#wnI*HuhQ zPqX}te4-+r`Fv|tk+k7k>ArV@!F4}&-pc>)5jM>#Z~K$usr!yQ&d|9r-7cc;-`rh$ zL`)8x5B<@g`^Y+9CorIYPsHv|8@Yn@p3iGy_;>EPD$|co$N$AwKW7v>da?bZH6M#8 ztH{(W_oMf`FWfj9*Q9Hxwk%61S*Y5@HAH8l`Z0-Y6T`Y=d2jX}yI1Wf$erLkh3|MR zH+Ok-+P8091*_k`ue94_zT5iqyK_I@?)g1`=GmV-llByKX8pWW`BX^n%!}>yI}dYi zy4ATR|G&^J6-QA+_F1>)tPbOLH<ZYKc=MMby95ImbQ`2KJQsTIBXq*BE;7))R!Dc* zDc;h+Fs*4C;Yz364YejUhurL3*k-cw=6=grN0n3-)x_n!vYam>#C@;MF8AreEB(<T zF9K%2iA$NZEY$brj2h#p)5d;}cAm;Qyqa}gRDAi@B@3FqEt+`!<H=nMS5KZ4Wa(*{ zK2wl!*<OK#v!Vm}+Hy}myz_*I<JrvORXoyX{1n8_FH_qhc`mc%<_VLnMo|_@2fz+x zh-g`3d0^5zm%J(d0+P>C4|-1D#&~RT&7z0bnig(eRKzREeR@)mQ<(R^eXDm(nqC!j zziAOuh_v6bW5-_GDO-95SI%4@z1vLFY~Grfv;Q-HOkHaB#r8OtD(A=Ns_j91cP|LN z^7CVfsQImWtBs}T%x16u_J{YxN6z1-bndt6O4a4TUxY8QhAaMPKY07u*4%%gD}>Ay znRviXYhab=Wst7p-m7fMx9oonw|PkV5v`80r{~_pb7ngldn`I_x;!Sd_tLD5ww&^e z`$U(ned1X#&wTNgaHXw+{>JZ)q@<**=(1jYw|m9x@ZuHfmOfTCZq|9ZT&9cs4AXK~ zXWHetZP-+vv}NJ!AQsD%{8gL94k}3|98!un7MClr@!+Fsztip4%#M`0@0M=6yJX=B zq5J<-_pP2N|1qrloXGRZTYFtMfE~)PfkT<?M)Vii1U|Kz7B?Awl{u*$4_2OVo3;N? z@w383FSg8@XTLS(<k9w?8F7ABChoHdnp;%1c$YBGh8fA`m(1sSR{w}mzjok{X8fgh zi_2v@=FNQip!dts-$AVDg6mtazK`;--Mc<`A=9C5pYs8}Hzt()-|08Q|6F5`V8Stm z(=v;EjQ7_3RobobmCN~mlk*KTmG^BsVm3u}imnZv^5xCrlk<HS<!s*1xmZGgkqzwP z14?Il8CG|^JR~{E>Rm&M_KXNk?YvXpV}Ek>xc%h#JgqWaO8fg<uW$ED&5X`P&R+QI zal)y4-Y>7bK6~m)+~Qxm<|Yf<S0}0YEOZW2+1C-y`L6hyyi>}L)n=?r9+7W%O!@Y` zKGQ@sNbtd7P4|3G<paMq_bl&Lyc<3F(?o-fLB;(m)uw%DYX0*!ezREn;(Y}tZ@IC+ zGmaeNvi63v(T~HYH43`?`OzKHxu|Bz(rqnfQDr-YE+)KF%u3XHAL3^++t9;TD|6rL zlp_r1@6D>QvN`-A`cepg#de3?vr_o~yx+OyzpVe`d9Hi()aI|cS7u+Pcw}k(k@TKl z>Z+E#;;mv=mQCc?kh1ehwutg!J)vipPi0C^>YjPh^sN|Ar+BK$i78_D;jTJ8L6lKV zLUi8B6YtinF0~PMn(e>(k;(~kk1apso_b9B`|Nh|$2Y0}_M|R;DrJ~9=Sx(oN%FnP zQcQb4JKgGPUb*D8s<cXPl&#%~i56nNQk&l07WI_0inB}F`c3NUmV173>lQ7YAG)e? zchEVPfW<r3FkKcqxJc4T^y@dFQ)hQio&QtUvFK^~tOD6gk>--wihF7v%1!z@|A=n~ z12Z@}6Bvz@4zLuZKTQw3;+JC?@+7pTS3)IlXPa;1{Rvy{gan`cy-)k0sKd{oSDNwy zVU1~(Uu=?p#GiCC<yh2rlxy{~$#!dx804p)TDd#w@X9~jiSL5~nA_id<(T&J5%b$K zZ#A2C39rtInU~bipTgH@mK?(npY%<>t8&?%f`u-=nYoj~*2U>s&Rul>Mz_R84YpY; z%~B3ZA3Y$~$YB6>AA?xp8HV$wSrSG2{%XIu5X{@zmDAEAA!-?DC*0FDOFVL^`_GKS zsl7U1j)p&dxN4re;cA|G8K0Y_im@xEZJ4__a&GRn_R=Dyb=-Sj2i-cQypl=y#MIX> zSIxV$dqMMyD<x~QuGo9}$Gzn7RQjA_!!&0r$FwyZ8+fF3G^S7R`{gx#Vv*~0SM6|% zf+%-+(*ya^PgWb`f74g5c4=S)yKe)>WaR@)$_po@horbR>`dP{&ADJ($&`MBJGZ_R zEe+~%{n_$4@GINO1jehM@=vf?Xoi{>1O`c^A2BqnUlf}Y;`lk1y@}hl(*5`6cOsly zlXqK&sqxOgS7Mg?cc#g~$Rn1QE(s<i?$pZD30~qgA#YZt*`5;{UfkZVHr?AMbW^Ux zrKO7wPICSd$|)@f%b-k8beoPUy_q#RdB4@QB8lFET$5L@btX+y3H$!^fBQazNd|q# z%{{&pJzZyU*7N^;{?^W)u{{_3ZcowavnqP8{x(m1L->Egjt8sr-7?kld<5^c$;=A9 z$dlvwVV!?`de5KuBCB*+Jx*yK(*uuOH~iRnF^ZMHZs(sDTK^roZ?$<<OgPe%wMblV z*|coGH{n~v1rxvl#h`QO3de>ssq;N%?^!bE++M{dcjLOM-?NfAE8YcHrD>iGx!l9$ zYjQ9oJ-)Ta|8dGvec6x|8-yRGz1cZuUrxQ&eu;arllrXm{w+#Sbbt8n#dOKT|NX>b z^sBA8#RAS&>|fyR*feRTb&#H0R^`*Kyw*gHlFGB;D$IMncx+=7o1?lzPs?PsSM|e1 zkCsTkGwYrxZuqEZ>D3@#eMjBj?SBrn8vQn3p4%O_uONPh0<0Esm6*@$(~^Fkqi}Q1 z;zh#J440FejTYzLDM?=alFMgJVDY5ZiLO&K0`1IdqwJR#sd6sv`)@bv(|gI2`TwQX zd9OX)v+gt3yuXTxs?V2%+<opnDdOzS&#lEj*0?rK``7YbeeSN+e^dRr*2m0!v99Qw z7f)kac;mDcsjJWYORc}O$#83KNB<PFjY-0OdD3@QFVMfFCd&Biy%VCmQ)JTN@jcl+ zyYutZE!}h8R5-8C+!$uo{pQ8Y6X7#gO%vdKCZ}}!T&MDZ_-%zbp>rSDn9uc#{v0p0 zFy`f-V!rqfnU2$)4&BukE@=)|5zKuue~IGdoxV4=O|kYbI&{eB%<?a*S+;HnDs2-t zT;#f{V`Ab$j)VG~pLG;t&T-4$JI!6YOzlj*JHk1Yd>f9ux&KBtxjWGF$oCW;S2YPI zQ`7prTNQ4k9XfUXN)hkLMT<_ZVtHv5x?1X654+g&$|r8WnqoEYYz|4<I%S1&F5ic{ z>bDACb95(I-dH`Yexg0wk8i@dXU}||aM7%1kH~_nO&az8PBu+b*!#&?mHAO<$7$1R zhg=tJ{+uo(WUd5@Hr5mU4BjrsPCN^f$ySz-*jlGyboGa4&F|}fidxez26?cxg)ZG+ z@oRaZMWDOC`EE;jVLR5EuZ?A&+C(BhItMz<6ndpu%TYOR=kmF`jnf5n&c$xJ{$w`e zxgLh#v&-isJ~2xFFO@0%<kHhUhZcBE`>|c2=An~h!urR&PoF(kV?d<$7Rv)Ri<N%9 zjlZ-fK2k6tC{n9%(@eM4^x)Dj8uGe6nORf(C;a<8z4gf9slk^@ny0C#E`QZw`D8`v zRL-~Y{lED3N{I`+zEf(M`*fnoN2mCoa*XG~lp5!VYd_LAcrKF^bbG;c?c_w`!rRNX z^1hs|vng(e#H<u1c<Zcb4abHOpP*Y}U6+qOo0j}-iPC|rk4?@-ZPC)*dXt_^`t(r# zr1{mh+*jo>p|9kvtj*SVM6hRHy?ABq^GljPg+pE*{cCez<&Mn-tU7I1j|Xp$^|;<` z<kBF?{HL-`;=$WFmIsnjw(!>7?Yza7xx->(uE!MZ@0Y{0PL{mlmQA!4+?IQ31>?Pf z>}w494zM)BJ;9v)M#6KA(*cEN+7jL=nY%}&_*i*Oo19QGZ|#Y%UaOy4By*~|Y(3Wg zMu;b<H2&-j1@*#b=N}up{huo{-^a+~%ZlXRw`TqG<(%9l>9)?V>QB&d-^AXT&AEJy zX%jD+tr7hFR3h-@HpK{&(^}eo($x>0{GP{{!h@t`3uE0w<MTZkT35fM{co31Ry|gC z^5=!qrs?1G&wk<hfB1jSq$^6HZ{(XJuNrTiAAD1&Wyagi+qWvMgHn#xZQgcj>IQDk zq9TQs$)V!PTaCA+`Z1{8I(p%Ik<I2UvZigDC+|uTJk)w*&nXX|i=3xozs27=e1peH zuj!Sj$D+Ljf_rW~XwU226QMY5wbB;$&M1Ms1t;~c8~Dt<p7!Gu>tYEbe&szK3-=Z{ z!osV2f;D@@+5hW9?)a?hoGOu^bFAa3*})@TD^*+HF1a$xs$`ol@9*=`lMip(t+(uN zp+@KwduhgJFTz*WcCS8GqFnR0<LUCXC#TC5+))ef|B><QugX5J3;EkVU9XXG*fC+L zdr;pUvAT~PX==Q?Po@R6Y2~qP%5Dr<_k^48<Abtwol`HX9TinbT-zBwacTpiLXKjI z=)Wgk5X>>#ZE?+=+^Q-428So7Ob8KqoYKm%A#rxfs++otCW`TG|M&NFlPmY6ZksaW z+JEmtX2qryfBe2t`qsgX8<Z{Ef1fvMx~`Tk@4vCz#8~Zk!^_O4`Tq+U694KRW02pw zSarMPBB8%(7q3tHyl@Ne)+fu?`sjzhdlMh`wd+dPEzX6l-EsR;p89w2D8ur->xo&+ zIXU0f`?>zG)4JOC?9{3AS%2^NomyU)p>6;9lSuNzQ|BK&o*lOB|1w)kjxz<?Uc0}g z+?vWB_3@D3y`yh#g>26cyn65Ayfvo2t7q*n{CV&4oDb`7%n)Rmc!lfP?n!x*K5}e$ za(98|$-g(&FP!VKmA6mu>dP0ov#*(HESt6Atgpb|Xo2VRH!#9WfCCvU7Qfl|U(dUF z>U@f_Zb#3=@QQ8kw%2E-&0a9ySR^uGjz{3}HM*}pymx%dW%7Ny__VVRZ#lm`yP_xD zbJz4vtMYWy<l56aR-c}#;`{UIhDRQ+=4rpw+7+u3v-L^rqCFE&_?+rt*zerMAn$9b zCB>w>w(*MD4c)BU3QI4?ueosgZ0pqdnrm+bNbJu|Ka^|i_Am7)JgihDIvIYSF?I>F zoLiA6K7UWvIv1TQS8ncqCMo*&q}!sJFO~b%Tz_8q^WV$ur;O~C#P`;fy9LE28qJ<u zzQz8%pW(?PLfe<-F0pgeVyZd*;i&SdwW^r`E0-vp-@>t>Gq*Wr-9y&)4Y>i~52wZJ zEuH(K-t$kiz;d|lt|z(}F7J9aN93Z~UA-WsI=4kNk4~(bHBWVU%%VWWlTV*0Yo9uv z7t|xHdTP1;vE?(WD#VWm>0SGHpyxNJ!VK4y{JCsy+Pq@DElV$Q82C1?&{-MI(^RH( z)y%>ybWw(6?xhpmqAzzJx$RwZa*;6K#p{xt48@lpUxzz@^+W_qw~_gz6qm@Bd9L&I zZg+5feyBe2(PWiu$KJnE`cY20imN<BRj0m-im+X?IoXw8nR)io#FiYZx!c~A%=((V z->S;))f$cu)=M}FrZG-46^V?yZLq0t>YHteC;ZfNq*G>lX-4$<ipI09HF^;~adG5X z+sJlA7COT4``qRKCPr_9T|LEJKlGgYclG&#M{}}1tx5iv=Xu)K=&j3VA4!?jVS+{m z%MRZ2`&zo2$@kBaXUyIcX040bq5t$s?7s=gN+p-`F1?B0>p889p}5Uq@>Gwh*(Qth z;+A+7oiNnAJL%!;HWk_Zx!z~~J&kR>Sg#rM65i|=+@y3sL|EHQC2~eiQsy#O-FvRa zJX&?TY=pJrJUXXKpDhYjs$O<eov-v%R@C)^72)Sv0t}LC{qK3+FVuYd&v@=iwQ0+a zEMYy?<KB?zHf2%cFQw*dW*qP4fW{1Ta+5SS*Z-XVU{aX&=GMu5D)FsRQ#Z&V^2HVo z1I-{W6OXo%OlgJm-uUL5X~GqLw^$yltZZ2m=DwvhXxS|B)h0V68@<(5d@TrM54jZb z{c6a!NkxYQ{f+zX`Pi2z+iFfNP~38K(Tb<1%+LS%64TA_I(c`~<Rx*50dYqH-ZxCV z$g(LuQDR+_NUZvdtd&2utr6Elc>fr$LE_W&ZS{Jy{7=8#-rXblQbBXOQu(sfZ+<g3 z*Q>_tj(mEmb5@s+=~ac)T=BAy-_^HwiUe6(ui~~|8GOmezD-1WeV6YQ+sdgEXB-N4 zJu$zkFz8!!-J9vvVy1K7IdguGY5OQFr(bNbJ<&XKp=oFSe=fVkslj>c*8S0m$?!dX z`OLQ73Kv)>g2hrW!6_zC#$0&$XC20$!d^DchYWAr;W?{0U1p;2{AqI?47Y#s*_t34 z-=(EFTkE{SM<4x<t2#R__s&c|^iimIgX(+TjWH)Pmamx0al7q@YtP0@s#i`)?8~!p z(kuU_UoO%-akpdkWQ6yPcnp?1uV2h-^)%Y@=C<CnD3zYB5SEC%DgFQ6#tSd5DX|Sw z3)?eyW$^L%i8He2xE#~xJ{6Nat8?jc4<62Eca=@;W53;9pf%BKzR_(q^Sc#KBG>k_ z6^j`Npa1l<{!mx$?MuN7DOWbV2w7OS7%9=Ixi_ftO!8W$DsamtGSF_)M1_9~W~N`t z49fcH*82Bo-l-qo^3$3=+}?le{iKLZKFux?y?(ma3mlgyXFi*m^DK4UfivgbFWE@H z+x%kPsefBUSKfK!`?I{cy5r2QVCiocZnss4X8%*4u5z0VQRTnkFsRQ{Im_lPZ7i8~ zvcphWQpK?(Dt|%|-(u;&I>n;JvzkiguGy`~Bips8Z^?9~Wjr^R-V85XB@>+cXf^Mw z#L3a?K62RKEC_nPt?RNM%leR#FCA7-nN)72tUFrA8#Z&d5K8-^PuKRmOS6hpm(I2_ zp}^qUv}x-t)(Tk)Oi~nFHknuG<g%`IrOT%#<%%yoYkcxqs<)c+MTgnSz9-x!oU=c) z>Bjn5)*_J>XJ+3q({P^Xs~tW?Z=YV|Rt3xDbMGJOEI;`q>fEp2Qt*uA7{(HzYoPKc zagLT(%8aC>&|e}#LZ1UW(<OO0%^$g&Z;W|-%D8+=>%N{F>bF8Wu6o7no+W*HiF?~m z=k!dqX%(Vd=5JCuFh~B`UEacr%lMuzo0@%NipH#RvD=eaTQ5HPpwpswswhP8wpQU4 zhO580{(C0!LA&MC65n!cknujy-7h)&VP<cUrslE51vTOx-8tRsnq1ur3?`KYMkx4- z8piUR)#JM4Y1BJqb<oNsZSujNrzg(4`b%7L)9tnmt}{aQK3?)&!5Vk)5Qjmo3FAVK zTYpo|ACZCg89i8be6cZ`rIlEkB59nNeM-$++IW(q65qzK)vW5?7JJ?losIk%Ic4FN zT2WEAsE3iN9_lGcO}x`;SQAt(=~<m-an@MrB9SQ`v-He1#TzQ!&+31No6HZB2vnEM z6n>`Vy{#bX_Jil=GjHEf-Dgn`??Wr~xHTAW_c8Ej^V?JLQ8Dn!6x;6Sc1zPMF8P?A zwYlta`R$xDrtLcq@8@Le4A47k(doZbN~La>rndcMpWRz3mtAXmvUloK|8oIP*6eny zWKGy{TgNT#NXO}^VcC&yre`e4+!&u+s=hooW$FGnM75A$!{pNux~af-jm~YiA1CiB zCx&P&j`{gt(DmmJZQaX8My99IS9LDUy}YPqOaA|$)1v3&%vLq-v)aBUoM+D7v>Sns zbKNwq9f~}jRckWin`_3whP=9z8#h8bz6ssda@4JrsPw!2U~Vt08k&|A$PzKf&os7V zwt7^DhIpDRx1sK-<;%`LS>p1OqbPM&`aiwkw@MFJJ)Kcm$X0Y}>0BK<?~>S(&u4b7 zUUKm5vHgFw^NiJIr3Z_z6xz-ecw2yfyV}a7cl`5qA{8`Z2QQ_r4?5E*w{w!z0Ud24 zHM6ukJ0}V`Pbpni|9kqPfO)pdQqCK@-pTEn_}E2ubMm!Mypv9p3$t`yz4U4MlY}P4 zDIrO(3i2+$)xKD8seOHP_R-9jyLBfV+nIHk@0{7w?h7}&>mC|=K*ks%S_GM6(&qhJ zt`XpF;<PAZ#uXm_O16_;8{>CnK9^SM^nYCNT&w$w$A6QfHk((icp295_f-$i9J5bc z4GMEtg-IBlJEtzb@9*jS$zhWF&PjLqWM7q0pZj(8hqv)XJG1`PtDY(5L-=iz(gCN% zhu*(9ZLm>A{IsXp<rOP<Cngq6=}$Yvo5lL{lUe3B|3_LL6N3Vm?V7XOWn+EHV%OLg z-Dydgw?j_*dM}@@T`iVZW>;zVd-~b<V~5fXZFBtpP5<bTN%fch>q<n=I(=c=&aB7R z;dxFhp^hbDzh~stY5R3EKex2GWSr^v?3c;bsWN>E|9_95U9;>a2hZ`-y}qJStn;*< zO?dkMOGhrfZ@UtD!Q@2r#~TUXPUJfK{*K$y`t(!Tq{}PyODx!?-q&hb7G*K3VM&<l zzNL?fkaB=@!rV0r_g|a!clG(+Csm$?aUZqz&8$~BwAk_|_fn6QMoDvyT=y{cn6hH= ztlkyfJd<>i)dXB_O{?>CTpRq*jyq?AX4<_gQ4i+2XG=Q;`%cY&C6jZ=%=}=-%4aj` zZ>@ST=jYp>ISs4BR{Hpab6wB7b0(h?9El3^Ckiu8GxE?{b#wAYy>$<l#LWGBI{frW zYiskas9OOkr|v48n7XBVicGQXH}4&*Kb?jq%b>C;2JEw2rA()4g{!{LTk+%NlU>GJ zgo{=`tIg`Ro$%q)(UybXCWU{j(&gE}dH_27Dakg&K0oZg{KW~eQ$HwNG_$|CCSvu4 z2?6Q<i+rX;v}}}|aVXm)DXG=3|5vcvl>X)SLxjC|e>M^JKH<Kva$2Ih>wBvg<<SKk zFXb-XV%x4$cl*IM$$xjvUf<p?bY0{Ak)Yc`-(4qlt@&2^?;K+rBV+{K%l#I^ejQ`~ zb&f$Vd$~2GbUHqLl$r75jz?$7&1tt6T&rlgw%~%tnjn#<lMUuClTx{?bfDyNUQ=b* zY3=E0c1M3+e%EFfyzk~@nLG3D`l-lncGN8tzgpIHdFk4HE9SoVdO7|7tgl=RA$m#& z#2A?&^C4?CaflhtO`FyuVZ83(iF-!7y7Xr^yF>)L?MynzQmwPgVxj+}U*Far@F?z? z9~kWy<SnLhN9{&hl$}s%mX46$G{ww6YfOGm&#+M4|5y8m&%~8ag<QL@aP&V3-SlRg zqQub!=klR8HC!^3Vl?~nOj4q3-Lks&FWc*HGII*rbXqLDG9mWnwApDMDYa7Wx<B@5 zU)4L+FYhI(a=D#LSnsCJXPxqI>sdlR=VYiKOaGrXIrrO&@@T)EbM~72H3`=JetUn* zjrAL1HnaWgzEZR;5!P_x_*vYr(#`47?fohl+Cry|*|MBdBC@{eXXY*cav^5Y<SDzd z9(|qE7V-JB`c3<LPF`&b_wO|NJ-tro?vYQIPad88X}aZ_sH6VoOLHfjUOGGCmDZh^ zPfta+MsI5Mo*fZ2Td=?C!fMeiUDvZe%EGFo19vz!bWPVY<cW}YDy;uW<?-$PbBa=H ziX*1<=Un#d<(Zsb5oB7hX6l9v(Uma^9WQaNpVd=y+0XdA<@8C}f(doI4Az{_6THo) zYNWG2rZbRP%WKyUy})RxrMVJP8sDq0FZttZa$W~f%Ba<_dET1gDHRxJbhfBtPNZL> zlC{>Bl{%KkgA5WI40Yq&cXK(rS^e9l(RY0Nu_9ifv-`THdfW)_)V%cR^wbTHKHX}& zvdLe?K7UP2^Fx(8xrwtCLudUdWE5%Eo#a!$HF1ZZ<>q=$Q8rivg8F8{JVH0$1g2GN zvixB6MQC&V(o3n)dCgH14UO|wg|;Q0{H6Q&sn_bMd$?YOdawE8BbApstMc66sq>2$ zEw-F_Y0<J{ZAzC<nWp&MN{!Ne!IIm&zd2(SZ*KGDZN5fV-9kTZkN?jMvySz|4<4b+ zj!m7;6ThZ+PO@kZ?(K4^@wv9W-q%2-sU&z&&7!+)J5PODR0FCnitNAsI{7TjMkunc za#~{Z$)~5J&*eU8?ckBtk+IMflzg_0cUR@PuQ&I%g$p#<Wa!Gkn@Wc}7{5s^FDft> zyDsE<X33(OMd!sic_w+yslTRnbj5^vsjW&%XRj>WeCXzWw>A1_^=9QvxWN*6tiOJb zOG?BP=FqiQl@2@#WL~y~*Xz&iBSoFdPi<Klw0dsvvzGK&*-X)F<=p0=@?USiT=$<` z=5r#JIp_U@2d|z@n=@z5q*+cj+~A^(;pwA<_W>&c7N+~p>nPu7`>@5yck9up)w13k z-)0H_HnmH+&eNQ-CgvxbXO76vZF7?1ukKm+poMip&)MHkr~B>EJ9N}@mTG6lDo~6q zpZHmQ#nP2QftQZHm&_2?-?2SwqwG_j)oQ8E(nlS3OSj}MOnLaV=o0T+mCd}bIX2h3 zcBg$jV))Md;jg^Aca@LSuhr6aYnaO=T2xkcEyLu<UWgMl#Mg#N%gfK7GsELf_dElJ zZOvcyhpm=`rhW#71JfFz<ro9QhcE_cG%_$eSj)f$orq&N5Y5N~Z6`7`Y-f^yYtCmi zfX*E=Fx=x>liBcAR_4;>gnrOm%1(*el1DeW7#J94w0v27Ig3qV{(n$`>EpWk>apX; z)z#I6zC-1^zHGi~#Wut6=DNJR&d$!vmlfW;3=9k>T$9tEzlnKrbF%uQ*otjT3=9lu z3LkSqBMq5iPF?=&`iA?n3P><t_voFjqb{z3<qskDH6Gb43U>Sn|AYpRTV6AP{dGeF z?A(S@h?jFjz&<&!3sQTSae+OV5DU>G%?dVRgC0arFT{ulaflu_h!JbJA$k@cV2EaY ze(0R2){l+S7Y#2O8U}vk{P<Isi-E!6UxF~(j=Z<OdZpQ?eAE5?#PiEiZSn8#?@wKL z+4I!2N3$L8TZ(8He19%!)c^j<!tBRxjGLePb=OK}mn~#qU}(5%c$=ZUZ@!f1-;9Tg ze*T*B>S|Wqzn9_K|6+>%9lE*w)xq%9X>+4YUv20!SNvDHGHBkJvLAPEi|fxlpP$LV z!0@T@kNJVdT&t277rs7Q``Ulr5rZtP@O4!`KedY1>!y~KzP+<J^mN&M{@-4|q*&Tn zzrILbe{oIZck{PDR)wyr{dx3(Yxnc`-Gx(s-dqys@b=c%e-RrkG%Y=MDKIcFDCnP5 zW!8Cq@cZ8hf@k7?=1<NQUe+IYV`s;Kcdv9mw)y^lve=A)f#IjqKj{Z6C#SdF-@7^G zrqj3d<$QN<ZOfDwva)&?I;WEDh6W^XZ>a4|X?QB~mrWw!+6yDSaGM7=cW(GxeYZM( zPmNq*0s}+E?GyFPHmR4+tax#pyKeUCvnL)b`~LpB=iXhsH{U9|^R2o6rGIsI^m4w~ zzkjrL?h>p1_2uNUv#;01?bor(Iq~4(w{PDzKle)xy0!J?fj7EgYi?Xl_t%f#xuf{` zwQ?!*w^v^?fBVtiFL!2+?b71q?{cG9`J@daW-km~edX-^+|cEIw*LI@U%WUju0QW~ zc>#a%lIFe6^Y6)rX~b_VNPOPjuhcJNtFf6Gl;URi>PaTNYhEAX*}vfXuZrrQE3Uq( z7A!A+ck9=K#1xN$8POY)-gKV+A8|y&_1T7RZ>>UCJeWRjo?P8`v*H_{#m~>&D`mZV zTdwuBb&<<60;hLR*T1pys*mHr$Hr%kKU<tTabaIq_v*mK*Phjz%h;B!aQy4$%RH;P zvMSr;+w${sZfq#@^~%b6>h&+4S7uYm&qHmzv!>`q|2xu|T>bs+i(9H48`qya=~?~# zy;b2Sd*eLW?81Io`$H>IgPCrZB>a1KYj^YC$c204gIS6le0YBHF*7h!D4(onzO(x| z`+JkjZ$CaB_72yJ+g)Y(>0zze+)9USxtACEy{+mNJD)yplcE2j{lCjvX3xGo@i6<0 z<@v9#HL`M9w6*l<#odW5m~oH6`24o~{gPE5FYV+OKR;D7c-_(6YiF|m-&<WSZI*Fo zqx1E**4ysvE1q0=qxd)D+1cCPTwMHp?uY2~^YgMUEb#nUB>FFA>zg+_FTZ8BX5aR9 z$NK~C-23IOtiOHX{(h_AFRy=G585uqz`(Gf$Hw5meV$+UPM@CraVF=-kGj!YQv2rE z6$c&Vs<Umrm%eR#PUQI?505N4GGSvPA0J;k-~04=8_v$!+EXoQ{dRe$q*d(eu(!KP zUKRfSb~ZTO@5<`v`^R^iBro~OcH{bTlg}QurN4eWKHh)lP8aX5PtnJ|-`i2R)~)x} z*6gcyH<usZCL0~WEF=2$$Ca6n?e6XS`pT^4*O!xfs~>JZoWC{e;<cR~6F(|0F43AC z&X)L#fzfx?+L*09vk(2b`a7|$|5xp)(i02}4ENYR-Dj}AVZ9~yvfYEZ<=o<BX?1b? z3rj!mf4z9Iu_@;<Gx0*bM=zdyd2=&3ZFi(Y_k!=g&de}<dhs!P)8Q{{GisM@;+y8F z|2F#B#l`Js4#yd=%(~4lVOz9E&)GcrTFSG9>o#tFeS5e4=N0=(pQ{z~Jf44eSzmvx z<m)F-p1gV_)+>IDfq|h&(wk>PclT<G*qnx$?P{N6W*e7RMODq3y*j$8%IbI3bZeGf zad+AN{;u8i>HN~?dUF!%*i7=St-j9QJzZx<)!(8IF9M#4eA~G)Y^AgFvMdv+y^Ll0 z@9gYKOrp0O^LzX_*viPLsdTfj^D<Yvj)+Y;ioZ9+eLlbHv3kGJOT~kU>xJVsAKq~z z{qL1b;iP%TW>meF_<s6N>YufCM=e*+J}Ap4dt;gNm&qADO>7Je+q?dlAJ8ew+PXgf z=Buk&27VTnmX)u*1U&Q9DcE*q^XAM0yF>r3Ha5Glw}LbMxl(ccKg~z~Y-cg1ZJU{% zrMh41yVARRd&{4nn8;kX{!z#x%LBja8uso@`*o%AH~*V^n@Sfu%v-(s_JsU4QO%$y z=jKM6=ijyXc0bW=-WO3&#urQKWK5H*v@ZX*+W+HM-OCGW#WympdlvtAalf6nujjtv z=iioUi+>TW*}-P9!d?E^OPi!C0?#U*r8_Qf3O=0n{_g(l`}<<guzlb8^JRm+_LT3J zr4#->o^kZ{>E)RY#s2*IYI6+_o9D&F?#QsqZkVp~`|YW#-e(LCxA%E^`TQt-Xp^?P zaB=ysZ}04@&zbyvVes?Hs>tJum$cU%*xZ%UdH?l2Yc;j5*-Q)!4|<P>@obR$W@`M} zZ|AwN#TR-0C-!XKY@D3Bc+uiZmoHnFze&5oU~IDD{*JV-w^C0}(+xRMdGJu>!}9#g zyc_<0Sy^2E{^q{9my<6%PI!M|RqAan(LblA>dv1sMZ~PM#w%;pnQl<!d`5x4&B1tg zOzfSg?R+|qquUHmUeAw-+>+AhmC`WVB=3|&f?36Bn~CXu|5NWb-u?ak{XC;evFi-= zW(fg5KZ$m*?FejEtNm5;<AY<$k-xjYzjtTZ_WFm?x5{^t4}zB3NFF~O`#dtI!H`9Y zf#IIhr<)Ab)jxYA#P%dV-@p4?PI~aItuHTZbiU5I|Loq<=W5q)ZgOAu@BXRD%lnP( zqxan2RlR-QCAJ+4f)844eJyWaIHfW{yr6(%w#n;1KQGs>{~4Ub@ugqc*~rMKsLdh! z*SDV^&fE+(&yOuH*AG0l{msqKGo4r7yd1tZuJG3x&Qr0h3=9lw9ONV(a6SF|=FOGu z@9zXXJ!2y!ZuF`2PxeQFjK5r$-kaoIvrgyuGR4z)zFoCZ`aS<uYYxUN6kc|_@EJof z?}z8}`96L4Fv}*@=67+>3;%vO*Jtw>#q^tw#;kPL<loDfrp_sRy@QQ`;RD;`|AG(X z_esBe`?UJspPAP`uAeh!&a3O$e?FzYx$<&hPj>3`YZ1HOy>I82-_ubmCuO8-^XJ<^ z=ignT+V_@~F6i#o&TiP*ez#s=Vf~{`YBM*koUR|Q^Yr1xjkVWHrT>+`*?)Lx?J1tW ziC^lE^T+S1`FQMX_MJM1xwpRBz58$ZxZ?a=>)8Eu$@{yeUi<U;`p3z~?W7G>RDGRg zU7nlTwIY6f;@MfHY3Jq%iT=HD<1Hv)&ZuwaEpT%?c7!vy)avRw+uQMbySQ_1Zwy#? zC^6W12K%Gw^Xp@``TX4ff4h;I+N-18;`i&#FYVp&`(Jal%p2KR=J|gg9Q+$EekOI^ zl{25GS8~m_Eq`@ut2VE+nP&Jlr>H2ciwxhns`dvSE;q}IJ8koHwh7;gn3Y*S?nduS zZwQTCyg+jL?&|YpHEf&=3=Q-Cm>+PR)6KH&^%0x@F|l{&+4O?)=ETM9^KH+^ygYSt z=ZWjg?G=?j4g9a!hwJiZTw3G&Td%LL@A|s<o#KVttFOP|*zmyMuW)$s@|SmZ{@(2y zon<m>%9Sb1?BCwp*{l1RDdbh1JWoQ+n{M&*>TSKEJuJyyFRyJ)Z)9S<bm<bG+^yZY z$HmkxE?wdMex7{D>afW-`?{-tp5L{9ecW!H!e~%ga{6R5N5RfbPpiMbdH(X{Q5j)L z$&E!<jmkEj<a(-A_v_?=L#=afK3zGZ{i`}N+cf>~#+#*|pKY}d)ARK53rekJTN%6C zuQcmwv3}sAA0HR9%5a6OjhdU$Fth!uyL?^L$@N|(Umj0h-hX{%ti7S3T{y47<D!}A zRf*4)9+u}9_v-zwO*kf6%<ciI{k>1rgPYI{N@>y$Y@F8y?cTNP*uI|BdcGeoxaH;J z|5`k+Y5#Zt)c!3qSIjPb9kkSD=KhYqObiF2VQu6a`xyDE*607-^|fEdR^+qFu2uD4 zLD}y2`wzc*vp+?P^B-d~-gkZR6n1MdE1N%N&(L-2y$IP*n~=W0YpRXS-YqX*s{6^@ z-cgy`<~RNRE>LgB2-;Ln`VDTn2Z%xWkk%#craNfq+%;CPo(+MJ);~RZ3<F~Alf8`Z zZtZmc`>S`3%-p>DJ9mCspQ@>;8Kw^^tWUT@d@rrq&s#9}*4JI-uXmQ+y}xne#=TW_ z0-}E_&f3>UZs!2C{Ochdpqwc-W(Ra<ZNGNo=3DCx?Kjs2?hQ-0-DmvVXKS7y1E}`{ z3H%!xKP}jI#NY2Xl{$MW^mNgBup#eZhWs%)ur=$-&j)||)6Z~KfBTcE2d+$?aBs_K zQ16-l>eZuPr`K;j{Qh2Au-A_1JpT+!&d+;$yX>E~y*#&O__msbPOaSHT0YhfUT#+Z zuJrENOu2;ES*#}fRqNOLEuU?W=@WCuySA$NSMTq={|z@E{PIW6w(iH*1@E~;3g-O& z>@O5q`s%{g!o>|Yi<ckW*K@Y?uFAc6+q5=c^EoSKx}xO9@?$TJ)x+2RYo0A<W3|Pl zb5i)axR^~jiR-vd?3Fqr&K$EYXQyL)-S(=pr?|z>cYe3B6fG$#O4%+eJ2xn3Qn7Qh zj{*Y|1WCm0tI7PcKqlupgS)%C?|ehg<(F1|I?Q0acV^pHY47jhGm`maZvB4pa`K*u zENi&4ml~Bw?k>x}zqNX{UG0PC_d`|&`K}Gy9HzCxUB0?E?d-1os++PdX)GvvyQ_Xp z#H1;6ru;tCx+gR@G;Qt7S-M#PFAe;A7rAyXTegI)Uw+-yteZzJ*`>DsGw@n|Id*TE zW;k!bx@!sdq#p>qQ{DHw>`C9;=ssEdq%R5K;o*~i$%L^(ovm;ngwZUkLHN<*y?blT z^5Uvre5ebplSo)*e)x}V>9dw2hPu&P5=*?~nRCRhdD-?=9oez$rLo$^&Q>n5Stf<Y zCaYhZCl~iDa^;@qYqM78`>ZXjT%BbwJz<_yXD4UeynEXJV~XA#iZt8k{ynZ&ibX|L z)u!r?0>pK4(hm-`&TX&%|M;Nt?;Gvw14XXCY-HeQ0HY0o%zqS&nlx899qmdCR##Cu z!p&3gx2kuRY3{i%r6y9pFQ@zE+}NR}YPz*Z_5XS{zQ|oQiHF&IPfgRTfAnPI-rr>< zZ-qiur`=uh<VfxBvbh#t<!9ITzS=s=G&k_p_L!10$<Mwd|CbfZUJ<s{?dvMj9<ROP zh2pV6t%sskI=g=}&%fsNe%6srXEy%L+qciREw|cS{_RYB`TKi$?;l*);Q08-k|lSm z%jZ~DcX__Qv$A@2SmR;0n#E^NB=q@v`|hlGnKb)aW8wNo*Ve|ref8+tGT-WDJMZ=H z*<JGUy{4vSPIT<1H`}$t^$nMs=l$@zZ}&I-{7kW*AM7TFZf+3ko_6N_HPeoloq4yn zy?l6>J$Bcg=iwVqeSYqL?a$}(Cx<x>LK8x!$*i(mt1Ih5*SnmYqzUTxy-f<=`Zwpm zfm2ie9$waF5c>G-Q{$W${lEF&+}xEb3`sS+A8!BqcXiwSy^Fu^n%O^z{k!+?X>}hA zCi&`wo?2YH`<$qDNK(wlrP|`<?`}<-H}B_-qQb)0cNVUmAD<c?zJ0m>{G3~R-o5&I zdexfxTW4o)o%8?ooO5%lfBc%Vuk`n?TcxYxkM9?oGH<o%jN@!O{MXm{N||5%e<f?{ zVK=^M7IB4h<)9JVz#wgUATY3hM%>E}3zPlk+U=`4J3odwX6dH?3-sF!j(t7Wn{AqP zWnJv*ck}jIZ+m;=P?_gU;hA!6{oC{R?&6(UcLvtux_ND9!NiZkZZAWu^8MdGJlvFj zXGhh)LpP05PnqV46ukJbPdD0}%S1%)$(^0a;i7++)?Hom?%d1E#|<?C7j9Vh^7{Q} zHKs3iA8zN*xwWa!^Ut^03-$EYx%0`txVYH-BE#|H`}fuSeDwG@|NY!+r|#}OvPAQ7 z+`b;s8_OrD+PrgZxxcG)ap~&=Jh{8VW*7cAQ70a5{%pqC|Lg1v3f6C_&APfsxA@o2 z;^oq2Igg&c{QT$V=I-g|RF9~ayt(n!?}u-p!t1qJtBtbPdZ!=Tz9lX1>*VEzXJ?t| zzl|<Cm|vWKcjw6;a~@n&6xW{{zqRV<goB5>#dNJoZ?P=97SQa~UYTX^KY#wLS%?1E z|KBlTqUTA^saj$Geyx80KW^`$;^*%sP82+odp*PCag(~bs;b=o_bZA8(~mu~t^YV@ z?!Etaw<~w;+$n2Uq+qMNH}rK`AL|?^wLU*j&&2G{bty+?8msTwTPtOrSM}*i;m7jA z;;n3-3q><5HP&5bW)xrmqlCq5KTb|w!OC6#Z^!@VrCHZ!8|POgB`vzgkp1ROO^uhk z+r9MV?CotS`yQuTndeL|IcvYVZ@$f`CG9Njd;KbGtKXS~rY+y;dZD^@na}J4U)p|u zc@@4br}FQElW~skjb)czJZRsMYEU~%OgG9{`u4Vbu{T*a7x^x9YP~2QYU0a$@9ocf zzb~ix@VvUXJ!ECjWA&aipO6zfHtek~S5r~>^5R~1MnnF+J^y|``nhV(%hvk8e~-`H ztj_xF<kh3ONjD-wpPjk1thVZV^sYbKPlp@j3SAC+e|Puq<EM^Z`qp_e>(P^hXY+YJ z_ZR=UvBA0hd;Xn0(=2lixW`Y?4!2YJ;{I{#9$Qd>Y-we+OI-ipv3Boi8m4JqT6F*C z-KaM(=D4#f^|s&KUGMMg+?w3JZolrYnJWXPYP9uBg~%*?y!=l8p7I|j4jzo>kKLa5 z^<r}S{r8vWSJwQoD7(>8nD~7&Pr+U*Ub{EnPu`d?k(2Y|8O<|s&jb(K#Lw94I;Y#h z($cne+Ri(MzxO0a3q{W^e&)CTzk<_L)2nkb!xJy7cd$N*<2}US%)sIRMiJo+XQdvz zVC8;p7<>D{Md3w@<kv@iJuY!hAR}LY{xZh1wl;fY-n^AGu6cZHYioDCV2P(YkL=_L zGY+IIdQ|T3&cpld+c&`}7HMxj99hD$Q7CCX+uw`k%x2Rp-Y)NadOGyY-Pg_c#m;HR z?($jQcURqCGJb6q?<_{Uq9+R3X)&>P)p}+hI>yZU&9lB{tyHO<<cFnowx2g9s~PcD zU!271_EvayC}TU5z3=Sp#oxEh-M!7I{cH9A$5~gi405MdSmt|1PmRo8wPq$C?<;ey zs4G`*-kfQud%G;>=H_zt$?L*ay7TaV`}D=G{@<If{nIwwT*Nk&@AH+8o;};&^t&o1 zACB8o@$YqhvAX}Sm&d-o)(+R5Ymz9H-Oyb1CG*;r)(1!I|3{U5`;*x_H}-OaSm@u? zR#u`(QQVi)p8fk1eB^KS&8?P22D>+i1viKOUCrJv?|5Z`w<!lR4>$)fFbX8ZGMeQ! z%zV3TE%VHKZ-4P-H{E-ESn7cr@9Zxx|2{n2KJmNKJGXoN968rN9_<!alT5Jgy*sVm zyuf=;?Q=0}VV|A_{>}ehNH^c}I(l^P9Gk*p4-fyYtvPLBX?1p%_14PGVI|Bp36Gzh zN!&h7I-xdZqvv9VWuDO)^F#98LE%zcT_3SNuen<A;Y5C=_xJbzzNsGnlGh-)w2hy; zO#fZo+h0?kYKv_Kg-YK&hVs`!U-C9jJJX!-K)iXnUVO#RQ?Bb6`8X=dKTcx3BP{Q3 z+tpuhTk}HV`Jr>)mEPIZ{fSuZn=WT%!#pQ+wpKD*#8hiEzi-QHn0fEj3c<&hwnpju z=U-!}|MyaXpMU+y;A5NF{bzl+yx5)piFCp;_Tar$y3b0=L}E<;OX)vOS~|Tq^?A9h z#g^>_iO<`<N<U6k$!Dw57L^q~YO+enwaX|s=lQy~zxm#r%4L4@_Nj4FghBN>t?ac? z%Un*so%~8SW3^GXZq6f~WB1oZ?QOC=dirqnla7s5%y(8gZx360Yi-olKa2m(*ZrS- z@#yL2q06Kbt}Ix)(EPx?dH0mt`uEm8pVq(q`;CvvGovm@Cwz1K@cYrv>-jOEsl6&m z|3u^W*Im7QxqIc=tJz`mY)a>N=KsrEEqAwSW_m;D&VXiv1JLr1f$^GX!fUn}3pdUG zAKu(%Aiak1o#>ak#cl6%?(F&Y^z;q2US_TERZ?<w(fb(F!reOi`m72xik%Vy`t7#A zzZ0|Pi+QGJZB^ZYb$N$MGM3nLa!+Bp?sau-?El03_8Wt5xBC1s)O(kjC!NsiW}Fx! zF?mz@{k&yUx8>YBcKh~mt#6)Rmu(N7xz#M|M})ikaouS1Raak4)4et2o9=0;gkzt1 z{?>ij_jmWU^nG5xPhH>sWy?$9$&)4rG<&({H_Ut+sC;ay*3-gYUplX5{|iaor*hWp zK##JlZPK2-d!HRRXnXPE#kp2x#ab^+QnNf7nfewgUY_y%1azojSLuS)-K%f1MWnu! zYGG^xH`*E)I5w<fV3kN{^JlM#-0UWMjltU5y8g?<<x~IsS)434-==hr-`lEA&dyJ~ z8?;_e7WHMGHC;D)--6(Sug%x3`%|oWnR(i@7QL6V*{^#U)}_6A63H)b`=j!oPFi@L zbVAzg^+`+D&28ROTQkqDa?}3<@4o-8WBIMZK67i>!aecx<K%Zt*N`mK|8rnr?fhD! z4#NZ0-`~mDeQ|eJU%v9P^VX=fvsd4~VL18RJln6|XH8w<xb(2;fw#9yv*d65+<w1) zU!`_&tMOjOu+&;M%?-ZCi&C|Bh-x1Tc{+dfH2VsPlS|l5GOsPH4R=4zbUi<2XZ8EM z@9S(68&VhT@Z*OTvkncqQVG&6FE7OGEZdoKGD!8V_abku9LX)AOPi%atgfwfJk4A1 zG3nj>daDzcFIU%`SP}kl{g;>Vb^l63>kmKgzUlvORp_fo<L9?mzP)iI`?|jVqw}-G z79d%`z_UST1|RQdb2~#u?n?~P?75*Y7qCt3E6u*(#2m9H;^X`Fo;y3Uv)9j)=io7z zeqfud_Rr9tsRwhy!?!=UxKP=Rf1;*8aw|+CAu?ojl(M1W!?+`N|A;X)2wn)A%9j=J zGGaTMuE_ya?<rbAOEO$seyow)e~D+q-o4HzZfpo$J^lWU%DqlMyJ~-b;h!y~6g=;d zl`T9^K>O!OQ!NijSzB{5gDS$Pt*<tHzW4fS?v16v-^KOkRaRBS?kGvTysSPbC|I>9 zEM_@7tWN@&q1+Hybeq9=_px5y==~4tr>~DmsSDG1AHFv0>*;X4qeqXHy%$>&mOV`` zUSr~BES68Y&GzGN!!+M}nO3#OR6a%??cT}W&nat|)e*M(=`w3*PcF7=*O9$llNT#a zhjcp{7&r<_O1e5br`6j)rvRU<V%!#dyH{3tSLy9%#p35SXv)dWvzpuY*3H1RpLd=~ z(U<QpUp{Hy?bVq7R}t17g!Z?OzGB-EJNuia=F0ZIH|dvVn`GTum3mwAvf7Ift8X4^ zsvBaD_s+f+x4&>}{`-GY)w`c+i+Mj;gA(1K3EG6k5qBB*|NNQ#WXcrLdcDBaSCZZQ zZ|u&0e)971o$TctZ|>|0U9fj=?UUw?c=0m_l_H=q@u7|LL^|^s5q)PB1_p)?YRVs{ zY`MemT(0Z&7f7?ffq_MViRVmvrtOMIS5OLF;kYz;3tM6X+#_qW8Q3Id@LS#YVmDn; z6430$&L#niCxw2{0-eu}&!a&}5R_&PAX*$xHZn*gB-p*E(U!fk;F2S+maIeqtm)ri zBgVkYbB29xJ~&&fa9qmF46jWm9A`>sX#Bb0^IEWVrYlMk5YG7&!N6l+AYZZ%oJ1F} zP37Y;faN_0Iqn8Vwr9=fwu7y^vf$E5edd^*oBlWan}77UdW$dj!)2@CxoiIQb@6dq zQW{<CkVE4D12eLJo^&&=i(Q@fJ#TN{e2b|4dCrZDWu>Lua<W!QUj$}GY9h6S(L6L+ zpY6teudT-e`)g{w%3lkq7#t8i75?V-^7<QB1a9qQLhkFLyZX50fvc;piby}GDwQsK zdFAiX?(}){;>7i0Z)|xvf6A4RP9HqFH<~iXEZh^nb=6h<_?;r+;<xukPl#F@xvOTO ziyE>|HLfz0XWd^Kx3?`Z*m;Yj<frqip2aV|&o2LeU&g<`?1D|PbFE9)M=ZQ_XMX*r zWv9$#OZMf;Z1uXkwYXnQ_g2gOy|(oSWj->laFhlm44w4{ZOjhDbcq-9%L!X0T@hFt zcG|bRNbALuCnxfDi<EX&i>7a5I}PvN!!p^PAl`z#yLeZJuig1*y{g*W&{b31-!I?~ zTNCq1>)+G_ah?s53qI$bzH!@{=TB0>$w{j7ZEIHrzf71f!VW5;ma=`m!BAaM@v6jX zoAf~uTeFHwCobM!zI?L$J1y3IU)y1|Qot(4ZB_;c(i+Zf*M0oz)wh=o`r`VLpa}#a zRj)&KntWFlT-xZx`>c^MZ1olSZ_)*yp44xDcPHo4ip+%FebVM@_trhmx_|Gl>9?}e z;X2b!xFDCH(Iy9i)z079lUh5~>*}hIl|{eKoLqa`to-Gjy=7~wPHLX~{r$aV-6xG= zpV!kGd0&~&GD}YSnDlP3d*A&Hg=arbK0f2ic{U!cS3xD`Y&P}lz70-$!N0iqc)y27 zN4nh4wb5JG1}|@{{wQRgAKP6k8NIB;QX*lp!}HtIHf}G!keaboQnI${YjbUo5-9Ud zl{&-Byyjwtn(vH#$<Oz@_sJ$*vSumEyQ_8K-aWfdjz`vWKT8nQf#$@D!z?#eF!ps- z?WsL3wl(T+;(q_&;7R>5wiR!GO+7caDr99$>X{pYR#W}*8)iOczFn5{FK@MH;$y9_ zFTbBWZnQr;M@H6ppUOJMv~yXPcm3VRynDV~=gRQ)jqyiM^~>2eF`99f>=R{tGZ~yC zZ<`zlb3_g~Y10GNWhwi+-rd`}e17~>$<2pm<cf=Lzwj}5+4&hFqJL*(H<*@{9d2iJ zzr+1~b;#2{KaFpf<t%)9#`M7BCiU1o6?vzx^}bnmQTdqqa+SjjvstX}cQJhP1eZpL za-rcZ$A&=WJ#~L)ZGP^*`bTgvx0UD|DYMx(`*zg#XE#WmnyUN%?SsVg^KEB;3tn+# z*M%zPIWs00WIy|})LT4mZ{5thqE{AgU!NZd4)$ol19qCABCU}T(ddz7%<o|QwmRZv z_xXK&-QBb8iZ>mpn##nyr{d)L>-jOs<zHW1TkRuxhS7`{DLfDbBExOL4{8z*nD|)T z`en)=J=thgDs^X9Y4YP|Ter+%bzX2j-ePy@ZMCxNALQ$Nu4g4S_%hAScV+m!1YATS zO5_7&EPFWFc9ft0etP=n*{12M`upE+Z*Kp)E5Yx_UF#!rSi2Lp=3Y)bJ&kw0aGYUe zWmU!Ty<N?yv4rBP1r^LOH_z8UIB;<PnfaCakLGEe=K1|Ibf#UijX=}~$tBxznO<L6 z_x|C-(x0bVXUveW-+#*BfLi0Z?Me-`K~|^*dxAAn&P9gkzWS-FnD_q(n{Z;s(-#?^ zmNI>IKvW=4wlS7%DF3nHenXV$>vd6kAAOlAyyvoa<(KOJ$^QKB!`DCFmVf`yzLK!j zS2m}e+a7#-<MEi?b(I$<u?qdvMk<Xzq)8>XyC0vV+M*<H({sj~H=h|%6V1J2cHnUR zkB<kNf7{um^2ysO7#vvK*1uO?a%1}Yb5f>RrLQiOzWNfNW{zkyt&B%XxDDo)8JhPn zBC4;+x7l_i{ynz*+#HEte^)5G^B3}NXx@9+JpTWO+lO{)u3UNMeB%B8JJR3xd57zT zXvA;KpZ_m0*g54@IBK&8xuR9if5y<wYcPG1su!>Pug5)+iT?9#*M@ITobGoweow`- zmoG~nUTXE7{V!40i1%n|6=WP*fdRet{B##I7SmQ^{paFh_Wx_5&;D5xaBqFo)mPKk z$8>dfzrCmHvG$ry?7je{bo{2&n<Y%>Uj17CbNbRwySV{-W>kNeaY1l#TgKL?yj_!n z9o5y{%Wf}S;eBVdg{4#xC$xxZU~qR|K4V74&*O*D>els)e6KDppA<i}a{n10AFqU9 z8ylNaE7{w<30-p1HknUeyziVZni6;?x*l#6YKvm7joE>#f3mNviLCxQ%YNpOXTH&9 zxz`>&k5AjzSHISNljq`Pjc={;?riz?t9Ny6_4n&HZtKQxjKJ^D8w}esuda*SJWX+- zy;z~1QQ@JItx;?3(;yQQr*lg1wYJb}a%tu{)yTtTXpIEoTRjeT(h18dB$XO_AH90? z%}CE|e<;IeP^0R~f=d^#FE|n`gj5K0F$sX$K`$VsE~xdzLW?$A@@BRjMXCQ8|Jrx= z`*X||Q!1Q++73TZbKz$gs1N|PEVpGgWM5x(dvEmm$Lf98*54L@JNTXfqrm}mwSQNK zRLgulaeaBoc0EUUcl$#dCt471^kqI1v^UBZUTRf*W<hJj9bky&fVB}BcnnThBe}}U z<ba<a>)bgqH{UKa7LSbR^1tMB{fcec{C)qPCVG46$7?K}xcb^8nMsr4>ji(!y}8_c zjrfPU_5M176DG_tDLb@1ZGPOQS<$WE;-+z2P)(on<LfR}%ZL-33cu@~Nqi~xJz1Q4 zcI__j!09`}3)AMmi(VRec3b?cS}W(QqC@kJHtU=`=yYvQ@%ckCVt4ckU##4Gb9r<G z>$J^h_ReXw)ak7+)A_me=JMyiWj6#kOuXdlb?xsBA;w)_T8isy)&5tY<_1|+sRTXY z>3@Rn=-qsyBvks%KmYG%t3Uahiz}Y)e}8W0+_d@k_5|&mrD~j%oIiW6^Ufk!tNO3= zZZ0o>eP?yyWwXGI8`GW#ERQ+r&-T^i_m?i++SS*}$~$}wtlN)psh0Ivr+s@lZF6GS zowtvl&5t|dzV-X8$FuJGr9Dqbe6#x5?)TN9*<ath6y99C;!S+<)g^jq^YbisTOFHM zo%1hS#Q*vA--|B)+Y@}@jm#(8KRXsC&7GWCmNx(0+KaN?wR_aeZoQHD^p`I}<G|`N z|Mya7-)wnyzwryx)^q<ZhX4DBmOKm&fS?!?GY|8e_uu&0B-my!@O+rfh0;l3lVH2y zl+cja@cHh)gA9imgg2Oi*17#IePvQ1DsKLDd4Tt)pN}@LpW$<D&FPvV|G75BcYm3t zpPz50*`D>!^jGbNkMFym-LDr=ym57B@b@lJt+RiBs(Xt(GkZ~UTW6|PSl-=Lxi2q0 zRZ@Qc_TFyoKYBZ>+oiTd1~hvek20On&lbT4awGz?<UCYdySzyCe`7q~y*-t+Kla|{ zm$y@pdmO&;l6m}JgPbGgw|aOw*XWoZSn5^zh3{9w(Nn7HAH{Q)9b{nMyfR>)(&dKp z^Q=ohU+aB!H7jg&RPw*|n~&;8hOBUmW;I<=vL>S0;J~E=42Qw+`R>2XjBSi+3Ecdd zw(m{y#3XJQs(f+pO#XC+!5dTxEsMY3f7g4;obRW3zCC}izP_WYD{BA8`bWxv&D%IZ zP3w(pi498|8QZ|{T={QyW*%mr16SI=OgU-1{r!!g)oFW;mY%k$`SRe##=~ni>Oh*U z*Vo10U6<QFV+Lrbx%TJJ>xDh6vAer$3y)kdoW4Hp*3NA0&9Q5<dY`@DrWL#^Cg)A} zXYupzZf;g~o-QaP^DJzQMD>TIr=L&%yKzO4>VH4k-Bnc;dwY8K7QOv+EmvCFl;_3W z*UaB$Tu%2}6Sa5Ig5ZOEZ>@iauZ&ybanbtW_Of^PPPO%AvdxGv`RH|1n@i4KNl`Iw zZP50-tK0nMvb{U%eP>Up?zdE($;><k2F&vE_j|td9KYCqV}5+C<&UG?;yKQu4N_Zt zL6O*H%E7F|%VPkB1^aH>OC(4nFr`U6*s^7d?*F`$J87Gj>E7DH^{4jZpV#K=HkBD_ zy}H;L{QvImYV%KtEN2;}7wB7N9oZ4Q{69DU{@`6DH`RKXzrDG=HT^wbXc)_m*xh}? zYH98b>b^71RlL#tpZDS0H{MqlvtMsJd%RCx(52z`_uofupZ@;i<l@YgnZ45cgZIq% zedOdp&6O)%m~{fTNUUSz%elSL_w~2md~fQ0sVs}z%T_0<ZC~|=gH0lWBiP-(Z`OuK z=Z}W3i&J~&%6rQK)H_JzJ;dP6%*+FZu)NbC$@b&T&C9RN*Cp2T{YlyoHhW*nO{Z&m z=Vpk0d-2h^O#Cdv_ZQbLpIrIim1+H^musW8<X-t8TXs@=9jLbytakp#{aK;n`t#H4 zjP8AXdiuteFDC04^<IP&d|EPd;X?aOmrG2`%7l;k-`$e>_h#|(4z`Fz8HO>;HhLA8 zj&?uamUH*SJ1N_wnj$YF9)k@m%f8lqzWV*+$B*3N|D9|YOfw#XhPR$##Kwc|2O0j$ Yx9@(~c<brz-=Jk8p00i_>zopr0K5R1LI3~& literal 0 HcmV?d00001 diff --git a/.docs/index.md b/.docs/index.md index 12f027bd10..6b4674bf5d 100644 --- a/.docs/index.md +++ b/.docs/index.md @@ -14,18 +14,18 @@ author: Martin Weise   -Documentation for version: [v1.7.2](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/releases). +Documentation for version: [v1.7.3](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/releases). -DBRepo is a repository for data in databases that are used from the beginning until the end of a research -project supporting data evolution, -citation and -versioning. It implements the query store of the -[RDA WGDC](https://doi.org/10.1162/99608f92.be565013) on precisely identifying arbitrary subsets of data. +DBRepo is a repository for data in databases that cover the entire data life cycle supporting data evolution, -citation +and -versioning. It implements the query store of the [RDA WGDC](https://doi.org/10.1162/99608f92.be565013) on precisely +identifying arbitrary subsets of data. ## Why use DBRepo? -* **Built-in search** makes your dataset searchable without extra effort: most metadata is generated - automatically for data in your databases. +* **Built-in search** makes your dataset searchable without extra effort: metadata is generated automatically for data + in your databases. * **Citable datasets** adopting the recommendations of the RDA-WGDC, arbitrary subsets can be precisely, persistently - identified using system-versioned tables of MariaDB and the DataCite schema for minting DOIs. + identified using [data versioning](concepts/data-versioning) of MariaDB and the DataCite schema for minting DOIs. * **Powerful API for Data Scientists** with our strongly typed Python Library, Data Scientists can import, export and work with data from Jupyter Notebook or Python script, optionally using Pandas DataFrames. * **Cloud Native** our lightweight Helm chart allows for installations on any cloud provider or private-cloud setting diff --git a/.docs/kubernetes.md b/.docs/kubernetes.md index 0881fe7ca3..d551be901d 100644 --- a/.docs/kubernetes.md +++ b/.docs/kubernetes.md @@ -14,7 +14,7 @@ helm upgrade --install dbrepo \ -n dbrepo \ "oci://registry.datalab.tuwien.ac.at/dbrepo/helm/dbrepo" \ --values ./values.yaml \ - --version "1.7.3" \ + --version "1.8.0" \ --create-namespace \ --cleanup-on-fail ``` diff --git a/.gitignore b/.gitignore index c7f9e18556..7aac91c7e1 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ target/ !**/src/main/**/target/ !**/src/test/**/target/ +# TODO +.docker/ # generated ready schema.xsd diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 92270eee73..e9aad03603 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,18 +2,19 @@ variables: BUILD_VERSION: "" HOSTALIASES: "./hosts" DOCKER_HOST: "unix:///var/run/dind/docker.sock" + TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE: "/var/run/dind/docker.sock" DOCKER_VERSION: "27" - TESTCONTAINERS_RYUK_DISABLED: "false" ALPINE_VERSION: "3.21" PYTHON_VERSION: "3.11" JAVA_VERSION: "17" NODE_VERSION: "18" SONARQUBE_VERSION: "10.0" BUN_VERSION: "1.1.40" - DOC_VERSION: "1.7" - APP_VERSION: "1.7.3" - CHART_VERSION: "1.7.3" - SUPPORTED_VERSIONS: "[\"1.7.0\",\"1.7.1\",\"1.7.2\",\"1.7.3\"]" + DOC_VERSION: "1.8" + APP_VERSION: "1.8.0" + CHART_VERSION: "1.8.0" + SUPPORTED_VERSIONS: "1.7.3, 1.8.0" + MAINTAINED_SERVICES: "analyse-service, auth-service-init, dashboard-service, dashboard-service-init, data-service, metadata-service, search-db, search-service, search-service-init, storage-service-init, ui" CACHE_FALLBACK_KEY: "${CI_DEFAULT_BRANCH}" # This will supress any download for dependencies and plugins or upload messages which would clutter the console log. # `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work. @@ -74,13 +75,13 @@ lint-docker-compose: - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-metadata-db'" - "IGNORE_IMAGE=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-metadata-service'" - "IGNORE_VOLUMES=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-metric-db'" - - "IGNORE_IMAGE=1 bash .scripts/check-service.sh 'dbrepo-search-db'" + - "bash .scripts/check-service.sh 'dbrepo-search-db'" - "IGNORE_IMAGE=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-search-service'" - "IGNORE_IMAGE=1 bash .scripts/check-service.sh 'dbrepo-search-service-init'" - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-storage-service'" - "IGNORE_VOLUMES=1 IGNORE_IMAGE=1 bash .scripts/check-service.sh 'dbrepo-storage-service-init'" + - "IGNORE_IMAGE=1 bash .scripts/check-service.sh 'dbrepo-dashboard-service-init'" - "IGNORE_IMAGE=1 bash .scripts/check-service.sh 'dbrepo-ui'" - - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-upload-service'" lint-helm-chart: image: docker.io/alpine:${ALPINE_VERSION} @@ -149,19 +150,20 @@ build-metadata-service: only: - merge_requests - master + needs: + - build-java-lib + dependencies: + - build-java-lib script: - - "mvn -f ./dbrepo-metadata-service/pom.xml clean install $MAVEN_OPTS -DskipTests" + - "mvn -f ./dbrepo-metadata-service/pom.xml clean package $MAVEN_OPTS -DskipTests" # Compiled classes are needed for SonarQube in later stages artifacts: when: always paths: - - ./dbrepo-metadata-service/test/target/classes - - ./dbrepo-metadata-service/services/target/classes + - ./dbrepo-metadata-service/oai/target/classes - ./dbrepo-metadata-service/repositories/target/classes - ./dbrepo-metadata-service/rest-service/target/classes - - ./dbrepo-metadata-service/api/target/classes - - ./dbrepo-metadata-service/oai/target/classes - - ./dbrepo-metadata-service/entities/target/classes + - ./dbrepo-metadata-service/services/target/classes expire_in: 1 days build-analyse-service: @@ -176,7 +178,7 @@ build-analyse-service: - "pip install pipenv" - "pipenv install gunicorn && pipenv install --dev --system --deploy" -build-lib: +build-python-lib: image: docker.io/python:${PYTHON_VERSION}-alpine${ALPINE_VERSION} stage: build only: @@ -188,6 +190,19 @@ build-lib: - "pip install pipenv" - "pipenv install gunicorn && pipenv install --dev --system --deploy" +build-java-lib: + image: maven:3-openjdk-${JAVA_VERSION} + stage: build + only: + - merge_requests + - master + script: + - "mvn -f ./lib/java/dbrepo-core/pom.xml clean install $MAVEN_OPTS -DskipTests" + artifacts: + when: always + paths: + - ./lib/java/dbrepo-core/target/classes + build-data-service: image: maven:3-openjdk-${JAVA_VERSION} stage: build @@ -195,11 +210,9 @@ build-data-service: - merge_requests - master needs: - - build-metadata-service + - build-java-lib dependencies: - - build-metadata-service - before_script: - - "mvn -f ./dbrepo-metadata-service/pom.xml clean install $MAVEN_OPTS -DskipTests" + - build-java-lib script: - "mvn -f ./dbrepo-data-service/pom.xml clean package $MAVEN_OPTS -DskipTests" # Compiled classes are needed for SonarQube in later stages @@ -231,6 +244,17 @@ build-search-service: script: - "cd dbrepo-search-service && pipenv install --system --deploy" +build-dashboard-service: + image: docker.io/python:${PYTHON_VERSION}-alpine${ALPINE_VERSION} + stage: build + only: + - merge_requests + - master + before_script: + - "pip install pipenv" + script: + - "cd dbrepo-dashboard-service && pipenv install --system --deploy" + build-images: image: docker.io/docker:${DOCKER_VERSION}-dind stage: build @@ -241,8 +265,9 @@ build-images: - "apk add --no-cache make" - echo "$CI_REGISTRY_PASSWORD" | docker login --username "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY_URL script: - - docker build -q --network=host -t dbrepo-metadata-service:build --target build dbrepo-metadata-service - - docker build -q --network=host -t dbrepo-data-service:build --target build dbrepo-data-service + - docker build --network=host -t dbrepo-core:build --target build ./lib/java/dbrepo-core + - docker build --network=host -t dbrepo-data-service:build --target build dbrepo-data-service + - docker build --network=host -t dbrepo-metadata-service:build --target build dbrepo-metadata-service - docker compose build -q --parallel build-helm: @@ -266,9 +291,9 @@ test-metadata-service: - merge_requests - master needs: - - build-metadata-service + - build-java-lib dependencies: - - build-metadata-service + - build-java-lib script: - "mvn -f ./dbrepo-metadata-service/pom.xml clean test verify $MAVEN_OPTS" - "cat ./dbrepo-metadata-service/report/target/site/jacoco-aggregate/index.html | grep -o 'Total[^%]*%' | sed 's/<.*>/ /; s/Total/Jacoco Coverage Total:/'" @@ -321,7 +346,7 @@ test-analyse-service: script: - "pip install pipenv" - "pipenv install gunicorn && pipenv install --dev --system --deploy" - - cd ./dbrepo-analyse-service/ && coverage run --rcfile=.coveragerc -m pytest tests/test_determine_dt.py tests/test_determine_pk.py tests/test_s3_client.py && coverage html && coverage xml && coverage report > ./coverage.txt + - cd ./dbrepo-analyse-service/ && coverage run --rcfile=.coveragerc -m pytest tests/test_determine_dt.py tests/test_determine_pk.py && coverage html && coverage xml && coverage report > ./coverage.txt - "cat ./coverage.txt | grep -o 'TOTAL[^%]*%'" artifacts: when: always @@ -370,17 +395,10 @@ test-search-service: - build-search-service dependencies: - build-search-service - before_script: - - "cp -r ./dbrepo-search-service/init/clients ./dbrepo-search-service" - - "cp -r ./dbrepo-search-service/init/omlib ./dbrepo-search-service" - - "cp -r ./dbrepo-search-service/init/tests/rsa ./dbrepo-search-service/tests" - - "cp ./dbrepo-search-service/init/tests/test_keycloak_client.py ./dbrepo-search-service/tests" - - "cp ./dbrepo-search-service/init/tests/test_opensearch_client.py ./dbrepo-search-service/tests" - - "cp ./dbrepo-search-service/init/friendly_names_overrides.json ./dbrepo-search-service/friendly_names_overrides.json" script: - "pip install pipenv" - "pipenv install gunicorn && pipenv install --dev --system --deploy" - - cd ./dbrepo-search-service/ && coverage run --rcfile=.coveragerc -m pytest tests/test_app.py tests/test_jwt.py tests/test_opensearch_client.py tests/test_keycloak_client.py && coverage html && coverage xml && coverage report > ./coverage.txt + - cd ./dbrepo-search-service/ && coverage run --rcfile=.coveragerc -m pytest tests/test_app.py && coverage html && coverage xml && coverage report > ./coverage.txt - "cat ./coverage.txt | grep -o 'TOTAL[^%]*%'" artifacts: when: always @@ -392,6 +410,60 @@ test-search-service: junit: ./dbrepo-search-service/coverage.xml coverage: '/TOTAL.*?([0-9]{1,3})%/' +test-dashboard-service: + image: docker.io/python:${PYTHON_VERSION}-alpine${ALPINE_VERSION} + stage: test + only: + - merge_requests + - master + variables: + PIPENV_PIPFILE: "./dbrepo-dashboard-service/Pipfile" + needs: + - build-dashboard-service + dependencies: + - build-dashboard-service + script: + - "pip install pipenv" + - "pipenv install gunicorn && pipenv install --dev --system --deploy" + - cd ./dbrepo-dashboard-service/ && coverage run --rcfile=.coveragerc -m pytest tests/test_integration_app.py && coverage html && coverage xml && coverage report > ./coverage.txt + - "cat ./coverage.txt | grep -o 'TOTAL[^%]*%'" + artifacts: + when: always + paths: + - ./dbrepo-dashboard-service/coverage.xml + - ./dbrepo-dashboard-service/coverage.txt + expire_in: 1 days + reports: + junit: ./dbrepo-dashboard-service/coverage.xml + coverage: '/TOTAL.*?([0-9]{1,3})%/' + +test-dashboard-service-init: + image: docker.io/python:${PYTHON_VERSION}-alpine${ALPINE_VERSION} + stage: test + only: + - merge_requests + - master + variables: + PIPENV_PIPFILE: "./dbrepo-dashboard-service/init/Pipfile" + needs: + - build-dashboard-service + dependencies: + - build-dashboard-service + script: + - "pip install pipenv" + - "pipenv install gunicorn && pipenv install --dev --system --deploy" + - cd ./dbrepo-dashboard-service/init/ && coverage run --rcfile=.coveragerc -m pytest tests/test_app.py && coverage html && coverage xml && coverage report > ./coverage.txt + - "cat ./coverage.txt | grep -o 'TOTAL[^%]*%'" + artifacts: + when: always + paths: + - ./dbrepo-dashboard-service/init/coverage.xml + - ./dbrepo-dashboard-service/init/coverage.txt + expire_in: 1 days + reports: + junit: ./dbrepo-dashboard-service/init/coverage.xml + coverage: '/TOTAL.*?([0-9]{1,3})%/' + test-search-service-init: image: docker.io/python:${PYTHON_VERSION}-alpine${ALPINE_VERSION} stage: test @@ -407,7 +479,7 @@ test-search-service-init: script: - "pip install pipenv" - "pipenv install gunicorn && pipenv install --dev --system --deploy" - - cd ./dbrepo-search-service/init/ && coverage run --rcfile=.coveragerc -m pytest tests/test_app.py tests/test_keycloak_client.py tests/test_opensearch_client.py && coverage html && coverage xml && coverage report > ./coverage.txt + - cd ./dbrepo-search-service/init/ && coverage run --rcfile=.coveragerc -m pytest tests/test_unit_app.py && coverage html && coverage xml && coverage report > ./coverage.txt - "cat ./coverage.txt | grep -o 'TOTAL[^%]*%'" artifacts: when: always @@ -419,7 +491,7 @@ test-search-service-init: junit: ./dbrepo-search-service/coverage.xml coverage: '/TOTAL.*?([0-9]{1,3})%/' -test-lib: +test-python-lib: image: docker.io/python:${PYTHON_VERSION}-alpine${ALPINE_VERSION} stage: test only: @@ -428,9 +500,9 @@ test-lib: variables: PIPENV_PIPFILE: "./lib/python/Pipfile" needs: - - build-lib + - build-python-lib dependencies: - - build-lib + - build-python-lib script: - "pip install pipenv" - "pipenv install gunicorn && pipenv install --dev --system --deploy" @@ -490,7 +562,7 @@ release-images: - test-analyse-service - test-auth-service-init - test-data-service - - test-lib + - test-python-lib - test-metadata-service - test-search-service - test-search-service-init @@ -504,29 +576,32 @@ release-images: - "docker logout ${CI_REGISTRY2_URL}" - "echo ${CI_REGISTRY2_PASSWORD} | docker login --username ${CI_REGISTRY2_USER} --password-stdin ${CI_REGISTRY2_URL}" script: - - docker build -q --network=host -t dbrepo-metadata-service:build --target build dbrepo-metadata-service - - docker build -q --network=host -t dbrepo-data-service:build --target build dbrepo-data-service + - docker build --network=host -t dbrepo-core:build --target build ./lib/java/dbrepo-core + - docker build --network=host -t dbrepo-data-service:build --target build dbrepo-data-service + - docker build --network=host -t dbrepo-metadata-service:build --target build dbrepo-metadata-service - docker compose build -q --parallel - docker tag dbrepo-analyse-service:latest "${CI_REGISTRY2_URL}/analyse-service:${APP_VERSION}${BUILD_VERSION}" + - docker tag dbrepo-auth-service-init:latest "${CI_REGISTRY2_URL}/auth-service-init:${APP_VERSION}${BUILD_VERSION}" - docker tag dbrepo-dashboard-service:latest "${CI_REGISTRY2_URL}/dashboard-service:${APP_VERSION}${BUILD_VERSION}" - - docker tag dbrepo-ui:latest "${CI_REGISTRY2_URL}/ui:${APP_VERSION}${BUILD_VERSION}" + - docker tag dbrepo-dashboard-service-init:latest "${CI_REGISTRY2_URL}/dashboard-service-init:${APP_VERSION}${BUILD_VERSION}" - docker tag dbrepo-data-service:latest "${CI_REGISTRY2_URL}/data-service:${APP_VERSION}${BUILD_VERSION}" - - docker tag dbrepo-auth-service-init:latest "${CI_REGISTRY2_URL}/auth-service-init:${APP_VERSION}${BUILD_VERSION}" - docker tag dbrepo-metadata-service:latest "${CI_REGISTRY2_URL}/metadata-service:${APP_VERSION}${BUILD_VERSION}" - docker tag dbrepo-search-db:latest "${CI_REGISTRY2_URL}/search-db:${APP_VERSION}${BUILD_VERSION}" - docker tag dbrepo-search-service:latest "${CI_REGISTRY2_URL}/search-service:${APP_VERSION}${BUILD_VERSION}" - docker tag dbrepo-search-service-init:latest "${CI_REGISTRY2_URL}/search-service-init:${APP_VERSION}${BUILD_VERSION}" - docker tag dbrepo-storage-service-init:latest "${CI_REGISTRY2_URL}/storage-service-init:${APP_VERSION}${BUILD_VERSION}" + - docker tag dbrepo-ui:latest "${CI_REGISTRY2_URL}/ui:${APP_VERSION}${BUILD_VERSION}" - docker push "${CI_REGISTRY2_URL}/analyse-service:${APP_VERSION}${BUILD_VERSION}" + - docker push "${CI_REGISTRY2_URL}/auth-service-init:${APP_VERSION}${BUILD_VERSION}" - docker push "${CI_REGISTRY2_URL}/dashboard-service:${APP_VERSION}${BUILD_VERSION}" - - docker push "${CI_REGISTRY2_URL}/ui:${APP_VERSION}${BUILD_VERSION}" + - docker push "${CI_REGISTRY2_URL}/dashboard-service-init:${APP_VERSION}${BUILD_VERSION}" - docker push "${CI_REGISTRY2_URL}/data-service:${APP_VERSION}${BUILD_VERSION}" - - docker push "${CI_REGISTRY2_URL}/auth-service-init:${APP_VERSION}${BUILD_VERSION}" - docker push "${CI_REGISTRY2_URL}/search-db:${APP_VERSION}${BUILD_VERSION}" - docker push "${CI_REGISTRY2_URL}/metadata-service:${APP_VERSION}${BUILD_VERSION}" - docker push "${CI_REGISTRY2_URL}/search-service:${APP_VERSION}${BUILD_VERSION}" - docker push "${CI_REGISTRY2_URL}/search-service-init:${APP_VERSION}${BUILD_VERSION}" - docker push "${CI_REGISTRY2_URL}/storage-service-init:${APP_VERSION}${BUILD_VERSION}" + - docker push "${CI_REGISTRY2_URL}/ui:${APP_VERSION}${BUILD_VERSION}" release-helm: stage: release @@ -621,13 +696,21 @@ verify-dist: image: docker.io/alpine:${ALPINE_VERSION} stage: verify only: - refs: - - /^release-.*/ + - /^release-.*/ + - master before_script: - "apk add curl" script: - "curl -v --output /dev/null --fail https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/${APP_VERSION}/dist.tar.gz" +verify-images: + image: docker.io/docker:${DOCKER_VERSION}-dind + stage: verify + only: + - master + script: + - bash ./.gitlab/check-unsupported-images.sh + scan-sonarqube: image: sonarsource/sonar-scanner-cli:${SONARQUBE_VERSION} stage: scan @@ -635,10 +718,10 @@ scan-sonarqube: - master needs: - build-data-service - - build-metadata-service + - build-java-lib dependencies: - build-data-service - - build-metadata-service + - build-java-lib script: - 'sonar-scanner -Dsonar.token="${CI_SONAR_TOKEN}"' allow_failure: true diff --git a/.gitlab/check-supported-images.sh b/.gitlab/check-supported-images.sh new file mode 100755 index 0000000000..2f1f804e5d --- /dev/null +++ b/.gitlab/check-supported-images.sh @@ -0,0 +1,30 @@ +#!/bin/bash +echo "Starting registry check ..." + +if [ -z $SUPPORTED_VERSIONS ]; then + echo "[ERROR] Missing environment variable SUPPORTED_VERSIONS" > /dev/stderr + exit 1 +elif [ -z $MAINTAINED_SERVICES ]; then + echo "[ERROR] Missing environment variable MAINTAINED_SERVICES" > /dev/stderr + exit 1 +elif [ -z $CI_REGISTRY2_URL ]; then + echo "[ERROR] Missing environment variable CI_REGISTRY2_URL" > /dev/stderr + exit 1 +fi + +VERSIONS=(${SUPPORTED_VERSIONS//,/ }) +SERVICES=(${MAINTAINED_SERVICES//,/ }) + +for SERVICE in "${SERVICES[@]}"; do + TAGS=$(regctl tag ls "${CI_REGISTRY2_URL}/${SERVICE}") + for VERSION in "${VERSIONS[@]}"; do + if [[ "$VERSION" == "$APP_VERSION" ]]; then + continue + fi + if [[ ! "${TAGS[*]}" =~ $VERSION ]]; then + >&2 echo "[ERROR] Failed to find image: ${CI_REGISTRY2_URL}/${SERVICE}:${VERSION}" + exit 1 + fi + done +done +echo "[INFO] Finished successfully." diff --git a/.gitlab/remove-unsupported-images.sh b/.gitlab/remove-unsupported-images.sh index ccfe3f7df8..d3914e4a7f 100755 --- a/.gitlab/remove-unsupported-images.sh +++ b/.gitlab/remove-unsupported-images.sh @@ -1,26 +1,28 @@ #!/bin/bash -declare -A services -services[0]=analyse-service -services[1]=auth-service-init -services[2]=dashboard-service -services[3]=data-service -services[4]=metadata-service -services[5]=search-db -services[6]=search-service -services[7]=search-service-init -services[8]=storage-service-init -services[9]=ui - echo "Starting registry housekeeping ..." -for key in "${!services[@]}"; do - echo "Checking ${CI_REGISTRY2_URL}/${services[$key]} tags ..." - TAGS=$(regctl tag ls ${CI_REGISTRY2_URL}/${services[$key]}) - for tag in $TAGS; do - res=$(echo "${SUPPORTED_VERSIONS}" | grep "$tag") - if [[ -z $res ]]; then - regctl tag rm ${CI_REGISTRY2_URL}/${services[$key]}:$tag - echo "Deleted unsupported tag ${CI_REGISTRY2_URL}/${services[$key]}:$tag" - fi +if [ -z $SUPPORTED_VERSIONS ]; then + echo "[ERROR] Missing environment variable SUPPORTED_VERSIONS" > /dev/stderr + exit 1 +elif [ -z $MAINTAINED_SERVICES ]; then + echo "[ERROR] Missing environment variable MAINTAINED_SERVICES" > /dev/stderr + exit 1 +elif [ -z $CI_REGISTRY2_URL ]; then + echo "[ERROR] Missing environment variable CI_REGISTRY2_URL" > /dev/stderr + exit 1 +fi + +VERSIONS=(${SUPPORTED_VERSIONS//,/ }) +SERVICES=(${MAINTAINED_SERVICES//,/ }) + +for SERVICE in "${SERVICES[@]}"; do + TAGS=$(regctl tag ls "${CI_REGISTRY2_URL}/${SERVICE}") + TAGS=(${TAGS//\n/ }) + for TAG in "${TAGS[@]}"; do + if [[ ! "${VERSIONS[*]}" =~ $TAG ]]; then + regctl tag rm ${CI_REGISTRY2_URL}/${SERVICE}:$TAG + echo "[INFO] Deleted unsupported tag ${CI_REGISTRY2_URL}/${SERVICE}:$TAG" + fi done done +echo "[INFO] Finished successfully." diff --git a/.scripts/check-service.sh b/.scripts/check-service.sh index 1af6d7eea1..f5d144abaa 100755 --- a/.scripts/check-service.sh +++ b/.scripts/check-service.sh @@ -7,6 +7,7 @@ compare "services.$1.restart" compare "services.$1.container_name" compare "services.$1.hostname" compare "services.$1.environment" +compare "services.$1.depends_on" compare "services.$1.healthcheck" compare "services.$1.logging" diff --git a/Makefile b/Makefile index b32b8e6e15..00c00d6208 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ .PHONY: all -APP_VERSION ?= 1.7.3 -CHART_VERSION ?= 1.7.3 +APP_VERSION ?= 1.8.0 +CHART_VERSION ?= 1.8.0 REPOSITORY_URL ?= registry.datalab.tuwien.ac.at/dbrepo .PHONY: all diff --git a/dbrepo-analyse-service/.gitignore b/dbrepo-analyse-service/.gitignore index 4ae9f6930d..daf1899e30 100644 --- a/dbrepo-analyse-service/.gitignore +++ b/dbrepo-analyse-service/.gitignore @@ -43,3 +43,4 @@ htmlcov/ .coverage .coverage.* *,cover +coverage.xml diff --git a/dbrepo-analyse-service/Dockerfile b/dbrepo-analyse-service/Dockerfile index 1432cd52c6..a140efd513 100644 --- a/dbrepo-analyse-service/Dockerfile +++ b/dbrepo-analyse-service/Dockerfile @@ -15,16 +15,15 @@ RUN pip install pipenv && \ pipenv install gunicorn && \ pipenv install --system --deploy -RUN adduser -D analyse-service --uid 1000 +RUN adduser -D dbrepo --uid 1001 WORKDIR /app -USER 1000 +USER 1001 -COPY --chown=1000 ./api ./api -COPY --chown=1000 ./as-yml ./as-yml -COPY --chown=1000 ./clients ./clients -COPY --chown=1000 ./*.py ./ +COPY --chown=1001 ./api ./api +COPY --chown=1001 ./as-yml ./as-yml +COPY --chown=1001 ./*.py ./ # non-root port EXPOSE 8080 diff --git a/dbrepo-analyse-service/Pipfile b/dbrepo-analyse-service/Pipfile index 0a8881e78e..3e3dfe11e8 100644 --- a/dbrepo-analyse-service/Pipfile +++ b/dbrepo-analyse-service/Pipfile @@ -21,7 +21,7 @@ numpy = "*" pandas = "*" minio = "*" pydantic = "*" -dbrepo = {path = "./lib/dbrepo-1.7.3.tar.gz"} +dbrepo = {path = "./lib/dbrepo-1.8.0.tar.gz"} opensearch-py = "*" [dev-packages] diff --git a/dbrepo-analyse-service/Pipfile.lock b/dbrepo-analyse-service/Pipfile.lock index 7f5a9de58a..d9f5a1cdbc 100644 --- a/dbrepo-analyse-service/Pipfile.lock +++ b/dbrepo-analyse-service/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "6af4b2ce324df97cc0877129f7986549d6e07a877998431609e062e2b63a40ca" + "sha256": "b7c8a1b53fbd95813c0accfa6e5351d63059e0ad816bff0a1cb82e5fb7beced2" }, "pipfile-spec": 6, "requires": { @@ -26,90 +26,90 @@ }, "aiohttp": { "hashes": [ - "sha256:04eb541ce1e03edc1e3be1917a0f45ac703e913c21a940111df73a2c2db11d73", - "sha256:05582cb2d156ac7506e68b5eac83179faedad74522ed88f88e5861b78740dc0e", - "sha256:0a29be28e60e5610d2437b5b2fed61d6f3dcde898b57fb048aa5079271e7f6f3", - "sha256:0b2501f1b981e70932b4a552fc9b3c942991c7ae429ea117e8fba57718cdeed0", - "sha256:0df3788187559c262922846087e36228b75987f3ae31dd0a1e5ee1034090d42f", - "sha256:12c5869e7ddf6b4b1f2109702b3cd7515667b437da90a5a4a50ba1354fe41881", - "sha256:14fc03508359334edc76d35b2821832f092c8f092e4b356e74e38419dfe7b6de", - "sha256:1a7169ded15505f55a87f8f0812c94c9412623c744227b9e51083a72a48b68a5", - "sha256:1c68e41c4d576cd6aa6c6d2eddfb32b2acfb07ebfbb4f9da991da26633a3db1a", - "sha256:20412c7cc3720e47a47e63c0005f78c0c2370020f9f4770d7fc0075f397a9fb0", - "sha256:22a8107896877212130c58f74e64b77f7007cb03cea8698be317272643602d45", - "sha256:28a3d083819741592685762d51d789e6155411277050d08066537c5edc4066e6", - "sha256:2b86efe23684b58a88e530c4ab5b20145f102916bbb2d82942cafec7bd36a647", - "sha256:2d0b46abee5b5737cb479cc9139b29f010a37b1875ee56d142aefc10686a390b", - "sha256:321238a42ed463848f06e291c4bbfb3d15ba5a79221a82c502da3e23d7525d06", - "sha256:3a8a0d127c10b8d89e69bbd3430da0f73946d839e65fec00ae48ca7916a31948", - "sha256:3a8b0321e40a833e381d127be993b7349d1564b756910b28b5f6588a159afef3", - "sha256:3b420d076a46f41ea48e5fcccb996f517af0d406267e31e6716f480a3d50d65c", - "sha256:3b512f1de1c688f88dbe1b8bb1283f7fbeb7a2b2b26e743bb2193cbadfa6f307", - "sha256:413fe39fd929329f697f41ad67936f379cba06fcd4c462b62e5b0f8061ee4a77", - "sha256:41cf0cefd9e7b5c646c2ef529c8335e7eafd326f444cc1cdb0c47b6bc836f9be", - "sha256:4848ae31ad44330b30f16c71e4f586cd5402a846b11264c412de99fa768f00f3", - "sha256:4b0a200e85da5c966277a402736a96457b882360aa15416bf104ca81e6f5807b", - "sha256:4e2e8ef37d4bc110917d038807ee3af82700a93ab2ba5687afae5271b8bc50ff", - "sha256:4edcbe34e6dba0136e4cabf7568f5a434d89cc9de5d5155371acda275353d228", - "sha256:51ba80d473eb780a329d73ac8afa44aa71dfb521693ccea1dea8b9b5c4df45ce", - "sha256:5409a59d5057f2386bb8b8f8bbcfb6e15505cedd8b2445db510563b5d7ea1186", - "sha256:572def4aad0a4775af66d5a2b5923c7de0820ecaeeb7987dcbccda2a735a993f", - "sha256:599b66582f7276ebefbaa38adf37585e636b6a7a73382eb412f7bc0fc55fb73d", - "sha256:59a05cdc636431f7ce843c7c2f04772437dd816a5289f16440b19441be6511f1", - "sha256:602d4db80daf4497de93cb1ce00b8fc79969c0a7cf5b67bec96fa939268d806a", - "sha256:65c75b14ee74e8eeff2886321e76188cbe938d18c85cff349d948430179ad02c", - "sha256:69bb252bfdca385ccabfd55f4cd740d421dd8c8ad438ded9637d81c228d0da49", - "sha256:6d3986112e34eaa36e280dc8286b9dd4cc1a5bcf328a7f147453e188f6fe148f", - "sha256:6dd9766da617855f7e85f27d2bf9a565ace04ba7c387323cd3e651ac4329db91", - "sha256:70ab0f61c1a73d3e0342cedd9a7321425c27a7067bebeeacd509f96695b875fc", - "sha256:749f1eb10e51dbbcdba9df2ef457ec060554842eea4d23874a3e26495f9e87b1", - "sha256:781c8bd423dcc4641298c8c5a2a125c8b1c31e11f828e8d35c1d3a722af4c15a", - "sha256:7e7abe865504f41b10777ac162c727af14e9f4db9262e3ed8254179053f63e6d", - "sha256:7f2dadece8b85596ac3ab1ec04b00694bdd62abc31e5618f524648d18d9dd7fa", - "sha256:86135c32d06927339c8c5e64f96e4eee8825d928374b9b71a3c42379d7437058", - "sha256:8778620396e554b758b59773ab29c03b55047841d8894c5e335f12bfc45ebd28", - "sha256:87f0e003fb4dd5810c7fbf47a1239eaa34cd929ef160e0a54c570883125c4831", - "sha256:8aa5c68e1e68fff7cd3142288101deb4316b51f03d50c92de6ea5ce646e6c71f", - "sha256:8d14e274828561db91e4178f0057a915f3af1757b94c2ca283cb34cbb6e00b50", - "sha256:8d1dd75aa4d855c7debaf1ef830ff2dfcc33f893c7db0af2423ee761ebffd22b", - "sha256:92007c89a8cb7be35befa2732b0b32bf3a394c1b22ef2dff0ef12537d98a7bda", - "sha256:92868f6512714efd4a6d6cb2bfc4903b997b36b97baea85f744229f18d12755e", - "sha256:948abc8952aff63de7b2c83bfe3f211c727da3a33c3a5866a0e2cf1ee1aa950f", - "sha256:95d7787f2bcbf7cb46823036a8d64ccfbc2ffc7d52016b4044d901abceeba3db", - "sha256:997b57e38aa7dc6caab843c5e042ab557bc83a2f91b7bd302e3c3aebbb9042a1", - "sha256:99b8bbfc8111826aa8363442c0fc1f5751456b008737ff053570f06a151650b3", - "sha256:9e73fa341d8b308bb799cf0ab6f55fc0461d27a9fa3e4582755a3d81a6af8c09", - "sha256:a0d2c04a623ab83963576548ce098baf711a18e2c32c542b62322a0b4584b990", - "sha256:a40087b82f83bd671cbeb5f582c233d196e9653220404a798798bfc0ee189fff", - "sha256:ad1f2fb9fe9b585ea4b436d6e998e71b50d2b087b694ab277b30e060c434e5db", - "sha256:b05774864c87210c531b48dfeb2f7659407c2dda8643104fb4ae5e2c311d12d9", - "sha256:b41693b7388324b80f9acfabd479bd1c84f0bc7e8f17bab4ecd9675e9ff9c734", - "sha256:b42dbd097abb44b3f1156b4bf978ec5853840802d6eee2784857be11ee82c6a0", - "sha256:b4e7c7ec4146a94a307ca4f112802a8e26d969018fabed526efc340d21d3e7d0", - "sha256:b59d096b5537ec7c85954cb97d821aae35cfccce3357a2cafe85660cc6295628", - "sha256:b9c60d1de973ca94af02053d9b5111c4fbf97158e139b14f1be68337be267be6", - "sha256:bccd2cb7aa5a3bfada72681bdb91637094d81639e116eac368f8b3874620a654", - "sha256:c32593ead1a8c6aabd58f9d7ee706e48beac796bb0cb71d6b60f2c1056f0a65f", - "sha256:c7571f99525c76a6280f5fe8e194eeb8cb4da55586c3c61c59c33a33f10cfce7", - "sha256:c8b2df9feac55043759aa89f722a967d977d80f8b5865a4153fc41c93b957efc", - "sha256:ca9f835cdfedcb3f5947304e85b8ca3ace31eef6346d8027a97f4de5fb687534", - "sha256:cc9253069158d57e27d47a8453d8a2c5a370dc461374111b5184cf2f147a3cc3", - "sha256:ced66c5c6ad5bcaf9be54560398654779ec1c3695f1a9cf0ae5e3606694a000a", - "sha256:d173c0ac508a2175f7c9a115a50db5fd3e35190d96fdd1a17f9cb10a6ab09aa1", - "sha256:d6edc538c7480fa0a3b2bdd705f8010062d74700198da55d16498e1b49549b9c", - "sha256:daf20d9c3b12ae0fdf15ed92235e190f8284945563c4b8ad95b2d7a31f331cd3", - "sha256:dc311634f6f28661a76cbc1c28ecf3b3a70a8edd67b69288ab7ca91058eb5a33", - "sha256:e2bc827c01f75803de77b134afdbf74fa74b62970eafdf190f3244931d7a5c0d", - "sha256:e365034c5cf6cf74f57420b57682ea79e19eb29033399dd3f40de4d0171998fa", - "sha256:e906da0f2bcbf9b26cc2b144929e88cb3bf943dd1942b4e5af066056875c7618", - "sha256:e9faafa74dbb906b2b6f3eb9942352e9e9db8d583ffed4be618a89bd71a4e914", - "sha256:ec6cd1954ca2bbf0970f531a628da1b1338f594bf5da7e361e19ba163ecc4f3b", - "sha256:f296d637a50bb15fb6a229fbb0eb053080e703b53dbfe55b1e4bb1c5ed25d325", - "sha256:f30fc72daf85486cdcdfc3f5e0aea9255493ef499e31582b34abadbfaafb0965", - "sha256:fe846f0a98aa9913c2852b630cd39b4098f296e0907dd05f6c7b30d911afa4c3" + "sha256:004511d3413737700835e949433536a2fe95a7d0297edd911a1e9705c5b5ea43", + "sha256:0902e887b0e1d50424112f200eb9ae3dfed6c0d0a19fc60f633ae5a57c809656", + "sha256:09b00dd520d88eac9d1768439a59ab3d145065c91a8fab97f900d1b5f802895e", + "sha256:0a2f451849e6b39e5c226803dcacfa9c7133e9825dcefd2f4e837a2ec5a3bb98", + "sha256:0a950c2eb8ff17361abd8c85987fd6076d9f47d040ebffce67dce4993285e973", + "sha256:0ad1fb47da60ae1ddfb316f0ff16d1f3b8e844d1a1e154641928ea0583d486ed", + "sha256:13ceac2c5cdcc3f64b9015710221ddf81c900c5febc505dbd8f810e770011540", + "sha256:14461157d8426bcb40bd94deb0450a6fa16f05129f7da546090cebf8f3123b0f", + "sha256:16f8a2c9538c14a557b4d309ed4d0a7c60f0253e8ed7b6c9a2859a7582f8b1b8", + "sha256:17ae4664031aadfbcb34fd40ffd90976671fa0c0286e6c4113989f78bebab37a", + "sha256:1ce63ae04719513dd2651202352a2beb9f67f55cb8490c40f056cea3c5c355ce", + "sha256:23a15727fbfccab973343b6d1b7181bfb0b4aa7ae280f36fd2f90f5476805682", + "sha256:2540ddc83cc724b13d1838026f6a5ad178510953302a49e6d647f6e1de82bc34", + "sha256:37dcee4906454ae377be5937ab2a66a9a88377b11dd7c072df7a7c142b63c37c", + "sha256:38bea84ee4fe24ebcc8edeb7b54bf20f06fd53ce4d2cc8b74344c5b9620597fd", + "sha256:3ab3367bb7f61ad18793fea2ef71f2d181c528c87948638366bf1de26e239183", + "sha256:3ad1d59fd7114e6a08c4814983bb498f391c699f3c78712770077518cae63ff7", + "sha256:3b4e6db8dc4879015b9955778cfb9881897339c8fab7b3676f8433f849425913", + "sha256:3e061b09f6fa42997cf627307f220315e313ece74907d35776ec4373ed718b86", + "sha256:42864e70a248f5f6a49fdaf417d9bc62d6e4d8ee9695b24c5916cb4bb666c802", + "sha256:493910ceb2764f792db4dc6e8e4b375dae1b08f72e18e8f10f18b34ca17d0979", + "sha256:4d0c970c0d602b1017e2067ff3b7dac41c98fef4f7472ec2ea26fd8a4e8c2149", + "sha256:54eb3aead72a5c19fad07219acd882c1643a1027fbcdefac9b502c267242f955", + "sha256:56a3443aca82abda0e07be2e1ecb76a050714faf2be84256dae291182ba59049", + "sha256:576f5ca28d1b3276026f7df3ec841ae460e0fc3aac2a47cbf72eabcfc0f102e1", + "sha256:58ede86453a6cf2d6ce40ef0ca15481677a66950e73b0a788917916f7e35a0bb", + "sha256:61c721764e41af907c9d16b6daa05a458f066015abd35923051be8705108ed17", + "sha256:634d96869be6c4dc232fc503e03e40c42d32cfaa51712aee181e922e61d74814", + "sha256:696ef00e8a1f0cec5e30640e64eca75d8e777933d1438f4facc9c0cdf288a810", + "sha256:69a2cbd61788d26f8f1e626e188044834f37f6ae3f937bd9f08b65fc9d7e514e", + "sha256:6a792ce34b999fbe04a7a71a90c74f10c57ae4c51f65461a411faa70e154154e", + "sha256:6ac13b71761e49d5f9e4d05d33683bbafef753e876e8e5a7ef26e937dd766713", + "sha256:6fdec0213244c39973674ca2a7f5435bf74369e7d4e104d6c7473c81c9bcc8c4", + "sha256:72b1b03fb4655c1960403c131740755ec19c5898c82abd3961c364c2afd59fe7", + "sha256:745f1ed5e2c687baefc3c5e7b4304e91bf3e2f32834d07baaee243e349624b24", + "sha256:776c8e959a01e5e8321f1dec77964cb6101020a69d5a94cd3d34db6d555e01f7", + "sha256:780df0d837276276226a1ff803f8d0fa5f8996c479aeef52eb040179f3156cbd", + "sha256:78e6e23b954644737e385befa0deb20233e2dfddf95dd11e9db752bdd2a294d3", + "sha256:7951decace76a9271a1ef181b04aa77d3cc309a02a51d73826039003210bdc86", + "sha256:7ba92a2d9ace559a0a14b03d87f47e021e4fa7681dc6970ebbc7b447c7d4b7cd", + "sha256:7f6428fee52d2bcf96a8aa7b62095b190ee341ab0e6b1bcf50c615d7966fd45b", + "sha256:87944bd16b7fe6160607f6a17808abd25f17f61ae1e26c47a491b970fb66d8cb", + "sha256:87a6e922b2b2401e0b0cf6b976b97f11ec7f136bfed445e16384fbf6fd5e8602", + "sha256:8cb0688a8d81c63d716e867d59a9ccc389e97ac7037ebef904c2b89334407180", + "sha256:8df6612df74409080575dca38a5237282865408016e65636a76a2eb9348c2567", + "sha256:911a6e91d08bb2c72938bc17f0a2d97864c531536b7832abee6429d5296e5b27", + "sha256:92b7ee222e2b903e0a4b329a9943d432b3767f2d5029dbe4ca59fb75223bbe2e", + "sha256:938f756c2b9374bbcc262a37eea521d8a0e6458162f2a9c26329cc87fdf06534", + "sha256:9756d9b9d4547e091f99d554fbba0d2a920aab98caa82a8fb3d3d9bee3c9ae85", + "sha256:98b88a2bf26965f2015a771381624dd4b0839034b70d406dc74fd8be4cc053e3", + "sha256:9b751a6306f330801665ae69270a8a3993654a85569b3469662efaad6cf5cc50", + "sha256:a2a450bcce4931b295fc0848f384834c3f9b00edfc2150baafb4488c27953de6", + "sha256:a3814760a1a700f3cfd2f977249f1032301d0a12c92aba74605cfa6ce9f78489", + "sha256:a5abcbba9f4b463a45c8ca8b7720891200658f6f46894f79517e6cd11f3405ca", + "sha256:a6db7458ab89c7d80bc1f4e930cc9df6edee2200127cfa6f6e080cf619eddfbd", + "sha256:ad497f38a0d6c329cb621774788583ee12321863cd4bd9feee1effd60f2ad133", + "sha256:ad9509ffb2396483ceacb1eee9134724443ee45b92141105a4645857244aecc8", + "sha256:bbcba75fe879ad6fd2e0d6a8d937f34a571f116a0e4db37df8079e738ea95c71", + "sha256:c10d85e81d0b9ef87970ecbdbfaeec14a361a7fa947118817fcea8e45335fa46", + "sha256:c15b2271c44da77ee9d822552201180779e5e942f3a71fb74e026bf6172ff287", + "sha256:ca37057625693d097543bd88076ceebeb248291df9d6ca8481349efc0b05dcd0", + "sha256:cc3a145479a76ad0ed646434d09216d33d08eef0d8c9a11f5ae5cdc37caa3540", + "sha256:ccf10f16ab498d20e28bc2b5c1306e9c1512f2840f7b6a67000a517a4b37d5ee", + "sha256:cd464ba806e27ee24a91362ba3621bfc39dbbb8b79f2e1340201615197370f7c", + "sha256:d007aa39a52d62373bd23428ba4a2546eed0e7643d7bf2e41ddcefd54519842c", + "sha256:d0666afbe984f6933fe72cd1f1c3560d8c55880a0bdd728ad774006eb4241ecd", + "sha256:d07502cc14ecd64f52b2a74ebbc106893d9a9717120057ea9ea1fd6568a747e7", + "sha256:d489d9778522fbd0f8d6a5c6e48e3514f11be81cb0a5954bdda06f7e1594b321", + "sha256:df7db76400bf46ec6a0a73192b14c8295bdb9812053f4fe53f4e789f3ea66bbb", + "sha256:e3538bc9fe1b902bef51372462e3d7c96fce2b566642512138a480b7adc9d508", + "sha256:e87fd812899aa78252866ae03a048e77bd11b80fb4878ce27c23cade239b42b2", + "sha256:ecdb8173e6c7aa09eee342ac62e193e6904923bd232e76b4157ac0bfa670609f", + "sha256:f244b8e541f414664889e2c87cac11a07b918cb4b540c36f7ada7bfa76571ea2", + "sha256:f4065145bf69de124accdd17ea5f4dc770da0a6a6e440c53f6e0a8c27b3e635c", + "sha256:f420bfe862fb357a6d76f2065447ef6f484bc489292ac91e29bc65d2d7a2c84d", + "sha256:f6ddd90d9fb4b501c97a4458f1c1720e42432c26cb76d28177c5b5ad4e332601", + "sha256:fa73e8c2656a3653ae6c307b3f4e878a21f87859a9afab228280ddccd7369d71", + "sha256:fadbb8f1d4140825069db3fedbbb843290fd5f5bc0a5dbd7eaf81d91bf1b003b", + "sha256:fb3d0cc5cdb926090748ea60172fa8a213cec728bd6c54eae18b96040fcd6227", + "sha256:fb46bb0f24813e6cede6cc07b1961d4b04f331f7112a23b5e21f567da4ee50aa", + "sha256:fd36c119c5d6551bce374fcb5c19269638f8d09862445f85a5a48596fd59f4bb" ], "markers": "python_version >= '3.9'", - "version": "==3.11.14" + "version": "==3.11.16" }, "aiosignal": { "hashes": [ @@ -180,20 +180,20 @@ }, "boto3": { "hashes": [ - "sha256:295648f887464ab74c5c301a44982df76f9ba39ebfc16be5b8f071ad1a81fe95", - "sha256:90fa5a91d7d7456219f0b7c4a93b38335dc5cf4613d885da4d4c1d099e04c6b7" + "sha256:77ff13723ad5b836a565c382610c3994e14ce643144dc9c604bfe1efb3213739", + "sha256:78fb57556c2337e087d2eda419ee371b52843a2420861114413791113efeabe2" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==1.37.13" + "version": "==1.37.26" }, "botocore": { "hashes": [ - "sha256:60dfb831c54eb466db9b91891a6c8a0c223626caa049969d5d42858ad1e7f8c7", - "sha256:aa417bac0f4d79533080e6e17c0509e149353aec83cfe7879597a7942f7f08d0" + "sha256:7f6dc999e7a34c0917623aac67c9ea2389b741bb7babee1a88cf2cd04006ea7a", + "sha256:d499a617903cbcaae18380320125fa3a95cb625b613d746e6edc69c6f01f1326" ], "markers": "python_version >= '3.8'", - "version": "==1.37.13" + "version": "==1.37.26" }, "certifi": { "hashes": [ @@ -425,9 +425,9 @@ }, "dbrepo": { "hashes": [ - "sha256:ad01d6dc5d99f3c0c9caf3fb11b51502bec5390c72ff28b6b725e2755f5a2f7c" + "sha256:55de6a4934010e14a574032b5a5179bf3dac9895ef74e5cd4a221a625a75674b" ], - "path": "./lib/dbrepo-1.7.3.tar.gz" + "path": "./lib/dbrepo-1.8.0.tar.gz" }, "events": { "hashes": [ @@ -852,109 +852,109 @@ }, "mistune": { "hashes": [ - "sha256:4b47731332315cdca99e0ded46fc0004001c1299ff773dfb48fbe1fd226de319", - "sha256:733bf018ba007e8b5f2d3a9eb624034f6ee26c4ea769a98ec533ee111d504dff" + "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", + "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0" ], "markers": "python_version >= '3.8'", - "version": "==3.1.2" + "version": "==3.1.3" }, "multidict": { "hashes": [ - "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f", - "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056", - "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761", - "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3", - "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b", - "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6", - "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748", - "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966", - "sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f", - "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1", - "sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6", - "sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada", - "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305", - "sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2", - "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d", - "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a", - "sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef", - "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c", - "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb", - "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60", - "sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6", - "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4", - "sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478", - "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81", - "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7", - "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56", - "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3", - "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6", - "sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30", - "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb", - "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506", - "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0", - "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925", - "sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c", - "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6", - "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e", - "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95", - "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2", - "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133", - "sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2", - "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa", - "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3", - "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3", - "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436", - "sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657", - "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581", - "sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492", - "sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43", - "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2", - "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2", - "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926", - "sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057", - "sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc", - "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80", - "sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255", - "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1", - "sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972", - "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53", - "sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1", - "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423", - "sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a", - "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160", - "sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c", - "sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd", - "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa", - "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5", - "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b", - "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa", - "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef", - "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44", - "sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4", - "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156", - "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753", - "sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28", - "sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d", - "sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a", - "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304", - "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008", - "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429", - "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72", - "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399", - "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3", - "sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392", - "sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167", - "sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c", - "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774", - "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351", - "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76", - "sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875", - "sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd", - "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28", - "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db" + "sha256:0085b0afb2446e57050140240a8595846ed64d1cbd26cef936bfab3192c673b8", + "sha256:042028348dc5a1f2be6c666437042a98a5d24cee50380f4c0902215e5ec41844", + "sha256:05fefbc3cddc4e36da209a5e49f1094bbece9a581faa7f3589201fd95df40e5d", + "sha256:063be88bd684782a0715641de853e1e58a2f25b76388538bd62d974777ce9bc2", + "sha256:07bfa8bc649783e703263f783f73e27fef8cd37baaad4389816cf6a133141331", + "sha256:08549895e6a799bd551cf276f6e59820aa084f0f90665c0f03dd3a50db5d3c48", + "sha256:095a2eabe8c43041d3e6c2cb8287a257b5f1801c2d6ebd1dd877424f1e89cf29", + "sha256:0b183a959fb88ad1be201de2c4bdf52fa8e46e6c185d76201286a97b6f5ee65c", + "sha256:0c383d28857f66f5aebe3e91d6cf498da73af75fbd51cedbe1adfb85e90c0460", + "sha256:0d57a01a2a9fa00234aace434d8c131f0ac6e0ac6ef131eda5962d7e79edfb5b", + "sha256:0dc25a3293c50744796e87048de5e68996104d86d940bb24bc3ec31df281b191", + "sha256:0e5a644e50ef9fb87878d4d57907f03a12410d2aa3b93b3acdf90a741df52c49", + "sha256:0f249badb360b0b4d694307ad40f811f83df4da8cef7b68e429e4eea939e49dd", + "sha256:0f74f2fc51555f4b037ef278efc29a870d327053aba5cb7d86ae572426c7cccc", + "sha256:125dd82b40f8c06d08d87b3510beaccb88afac94e9ed4a6f6c71362dc7dbb04b", + "sha256:13551d0e2d7201f0959725a6a769b6f7b9019a168ed96006479c9ac33fe4096b", + "sha256:14ed9ed1bfedd72a877807c71113deac292bf485159a29025dfdc524c326f3e1", + "sha256:163f4604e76639f728d127293d24c3e208b445b463168af3d031b92b0998bb90", + "sha256:19e2819b0b468174de25c0ceed766606a07cedeab132383f1e83b9a4e96ccb4f", + "sha256:1e2a2193d3aa5cbf5758f6d5680a52aa848e0cf611da324f71e5e48a9695cc86", + "sha256:1f3c099d3899b14e1ce52262eb82a5f5cb92157bb5106bf627b618c090a0eadc", + "sha256:214207dcc7a6221d9942f23797fe89144128a71c03632bf713d918db99bd36de", + "sha256:2325105e16d434749e1be8022f942876a936f9bece4ec41ae244e3d7fae42aaf", + "sha256:2529ddbdaa424b2c6c2eb668ea684dd6b75b839d0ad4b21aad60c168269478d7", + "sha256:256d431fe4583c5f1e0f2e9c4d9c22f3a04ae96009b8cfa096da3a8723db0a16", + "sha256:25bb96338512e2f46f615a2bb7c6012fe92a4a5ebd353e5020836a7e33120349", + "sha256:2e87f1926e91855ae61769ba3e3f7315120788c099677e0842e697b0bfb659f2", + "sha256:2fc6af8e39f7496047c7876314f4317736eac82bf85b54c7c76cf1a6f8e35d98", + "sha256:3157126b028c074951839233647bd0e30df77ef1fedd801b48bdcad242a60f4e", + "sha256:32c9b4878f48be3e75808ea7e499d6223b1eea6d54c487a66bc10a1871e3dc6a", + "sha256:32ed748ff9ac682eae7859790d3044b50e3076c7d80e17a44239683769ff485e", + "sha256:3501621d5e86f1a88521ea65d5cad0a0834c77b26f193747615b7c911e5422d2", + "sha256:437c33561edb6eb504b5a30203daf81d4a9b727e167e78b0854d9a4e18e8950b", + "sha256:48d39b1824b8d6ea7de878ef6226efbe0773f9c64333e1125e0efcfdd18a24c7", + "sha256:4ac3fcf9a2d369bd075b2c2965544036a27ccd277fc3c04f708338cc57533081", + "sha256:4ccfd74957ef53fa7380aaa1c961f523d582cd5e85a620880ffabd407f8202c0", + "sha256:52b05e21ff05729fbea9bc20b3a791c3c11da61649ff64cce8257c82a020466d", + "sha256:5389445f0173c197f4a3613713b5fb3f3879df1ded2a1a2e4bc4b5b9c5441b7e", + "sha256:5c5e7d2e300d5cb3b2693b6d60d3e8c8e7dd4ebe27cd17c9cb57020cac0acb80", + "sha256:5d26547423e5e71dcc562c4acdc134b900640a39abd9066d7326a7cc2324c530", + "sha256:5dd7106d064d05896ce28c97da3f46caa442fe5a43bc26dfb258e90853b39b44", + "sha256:5f8cb1329f42fadfb40d6211e5ff568d71ab49be36e759345f91c69d1033d633", + "sha256:61d5541f27533f803a941d3a3f8a3d10ed48c12cf918f557efcbf3cd04ef265c", + "sha256:639556758c36093b35e2e368ca485dada6afc2bd6a1b1207d85ea6dfc3deab27", + "sha256:641cf2e3447c9ecff2f7aa6e9eee9eaa286ea65d57b014543a4911ff2799d08a", + "sha256:6aed763b6a1b28c46c055692836879328f0b334a6d61572ee4113a5d0c859872", + "sha256:6e2a2d6749e1ff2c9c76a72c6530d5baa601205b14e441e6d98011000f47a7ac", + "sha256:7243c5a6523c5cfeca76e063efa5f6a656d1d74c8b1fc64b2cd1e84e507f7e2a", + "sha256:76b34c12b013d813e6cb325e6bd4f9c984db27758b16085926bbe7ceeaace626", + "sha256:781b5dd1db18c9e9eacc419027b0acb5073bdec9de1675c0be25ceb10e2ad133", + "sha256:7c611345bbe7cb44aabb877cb94b63e86f2d0db03e382667dbd037866d44b4f8", + "sha256:83b78c680d4b15d33042d330c2fa31813ca3974197bddb3836a5c635a5fd013f", + "sha256:84e87a7d75fa36839a3a432286d719975362d230c70ebfa0948549cc38bd5b46", + "sha256:89b3857652183b8206a891168af47bac10b970d275bba1f6ee46565a758c078d", + "sha256:8cd1a0644ccaf27e9d2f6d9c9474faabee21f0578fe85225cc5af9a61e1653df", + "sha256:8de4d42dffd5ced9117af2ce66ba8722402541a3aa98ffdf78dde92badb68932", + "sha256:94a7bb972178a8bfc4055db80c51efd24baefaced5e51c59b0d598a004e8305d", + "sha256:98aa8325c7f47183b45588af9c434533196e241be0a4e4ae2190b06d17675c02", + "sha256:9e658d1373c424457ddf6d55ec1db93c280b8579276bebd1f72f113072df8a5d", + "sha256:9f49585f4abadd2283034fc605961f40c638635bc60f5162276fec075f2e37a4", + "sha256:9f6cad071960ba1914fa231677d21b1b4a3acdcce463cee41ea30bc82e6040cf", + "sha256:a0cc398350ef31167e03f3ca7c19313d4e40a662adcb98a88755e4e861170bdd", + "sha256:a1133414b771619aa3c3000701c11b2e4624a7f492f12f256aedde97c28331a2", + "sha256:a33273a541f1e1a8219b2a4ed2de355848ecc0254264915b9290c8d2de1c74e1", + "sha256:a3c0ff89fe40a152e77b191b83282c9664357dce3004032d42e68c514ceff27e", + "sha256:a49994481b99cd7dedde07f2e7e93b1d86c01c0fca1c32aded18f10695ae17eb", + "sha256:abf5b17bc0cf626a8a497d89ac691308dbd825d2ac372aa990b1ca114e470151", + "sha256:ac380cacdd3b183338ba63a144a34e9044520a6fb30c58aa14077157a033c13e", + "sha256:ad81012b24b88aad4c70b2cbc2dad84018783221b7f923e926f4690ff8569da3", + "sha256:b2c00ad31fbc2cbac85d7d0fcf90853b2ca2e69d825a2d3f3edb842ef1544a2c", + "sha256:b4c153863dd6569f6511845922c53e39c8d61f6e81f228ad5443e690fca403de", + "sha256:b4f3d66dd0354b79761481fc15bdafaba0b9d9076f1f42cc9ce10d7fcbda205a", + "sha256:b99aac6bb2c37db336fa03a39b40ed4ef2818bf2dfb9441458165ebe88b793af", + "sha256:b9f6392d98c0bd70676ae41474e2eecf4c7150cb419237a41f8f96043fcb81d1", + "sha256:c537da54ce4ff7c15e78ab1292e5799d0d43a2108e006578a57f531866f64025", + "sha256:ca23db5fb195b5ef4fd1f77ce26cadefdf13dba71dab14dadd29b34d457d7c44", + "sha256:cc826b9a8176e686b67aa60fd6c6a7047b0461cae5591ea1dc73d28f72332a8a", + "sha256:cca83a629f77402cfadd58352e394d79a61c8015f1694b83ab72237ec3941f88", + "sha256:cf8d370b2fea27fb300825ec3984334f7dd54a581bde6456799ba3776915a656", + "sha256:d1175b0e0d6037fab207f05774a176d71210ebd40b1c51f480a04b65ec5c786d", + "sha256:d1996ee1330e245cd3aeda0887b4409e3930524c27642b046e4fae88ffa66c5e", + "sha256:d5a36953389f35f0a4e88dc796048829a2f467c9197265504593f0e420571547", + "sha256:da51d8928ad8b4244926fe862ba1795f0b6e68ed8c42cd2f822d435db9c2a8f4", + "sha256:e16e7297f29a544f49340012d6fc08cf14de0ab361c9eb7529f6a57a30cbfda1", + "sha256:e25b11a0417475f093d0f0809a149aff3943c2c56da50fdf2c3c88d57fe3dfbd", + "sha256:e4371591e621579cb6da8401e4ea405b33ff25a755874a3567c4075ca63d56e2", + "sha256:e653d36b1bf48fa78c7fcebb5fa679342e025121ace8c87ab05c1cefd33b34fc", + "sha256:e7d91a230c7f8af86c904a5a992b8c064b66330544693fd6759c3d6162382ecf", + "sha256:e851e6363d0dbe515d8de81fd544a2c956fdec6f8a049739562286727d4a00c3", + "sha256:ef7d48207926edbf8b16b336f779c557dd8f5a33035a85db9c4b0febb0706817", + "sha256:f7716f7e7138252d88607228ce40be22660d6608d20fd365d596e7ca0738e019", + "sha256:facaf11f21f3a4c51b62931feb13310e6fe3475f85e20d9c9fdce0d2ea561b87" ], - "markers": "python_version >= '3.8'", - "version": "==6.1.0" + "markers": "python_version >= '3.9'", + "version": "==6.2.0" }, "numpy": { "hashes": [ @@ -1110,107 +1110,107 @@ }, "propcache": { "hashes": [ - "sha256:02df07041e0820cacc8f739510078f2aadcfd3fc57eaeeb16d5ded85c872c89e", - "sha256:03acd9ff19021bd0567582ac88f821b66883e158274183b9e5586f678984f8fe", - "sha256:03c091bb752349402f23ee43bb2bff6bd80ccab7c9df6b88ad4322258d6960fc", - "sha256:07700939b2cbd67bfb3b76a12e1412405d71019df00ca5697ce75e5ef789d829", - "sha256:0c3e893c4464ebd751b44ae76c12c5f5c1e4f6cbd6fbf67e3783cd93ad221863", - "sha256:119e244ab40f70a98c91906d4c1f4c5f2e68bd0b14e7ab0a06922038fae8a20f", - "sha256:11ae6a8a01b8a4dc79093b5d3ca2c8a4436f5ee251a9840d7790dccbd96cb649", - "sha256:15010f29fbed80e711db272909a074dc79858c6d28e2915704cfc487a8ac89c6", - "sha256:19d36bb351ad5554ff20f2ae75f88ce205b0748c38b146c75628577020351e3c", - "sha256:1c8f7d896a16da9455f882870a507567d4f58c53504dc2d4b1e1d386dfe4588a", - "sha256:2383a17385d9800b6eb5855c2f05ee550f803878f344f58b6e194de08b96352c", - "sha256:24c04f8fbf60094c531667b8207acbae54146661657a1b1be6d3ca7773b7a545", - "sha256:2578541776769b500bada3f8a4eeaf944530516b6e90c089aa368266ed70c49e", - "sha256:26a67e5c04e3119594d8cfae517f4b9330c395df07ea65eab16f3d559b7068fe", - "sha256:2b975528998de037dfbc10144b8aed9b8dd5a99ec547f14d1cb7c5665a43f075", - "sha256:2d15bc27163cd4df433e75f546b9ac31c1ba7b0b128bfb1b90df19082466ff57", - "sha256:2d913d36bdaf368637b4f88d554fb9cb9d53d6920b9c5563846555938d5450bf", - "sha256:3302c5287e504d23bb0e64d2a921d1eb4a03fb93a0a0aa3b53de059f5a5d737d", - "sha256:36ca5e9a21822cc1746023e88f5c0af6fce3af3b85d4520efb1ce4221bed75cc", - "sha256:3b812b3cb6caacd072276ac0492d249f210006c57726b6484a1e1805b3cfeea0", - "sha256:3c6ec957025bf32b15cbc6b67afe233c65b30005e4c55fe5768e4bb518d712f1", - "sha256:41de3da5458edd5678b0f6ff66691507f9885f5fe6a0fb99a5d10d10c0fd2d64", - "sha256:42924dc0c9d73e49908e35bbdec87adedd651ea24c53c29cac103ede0ea1d340", - "sha256:4544699674faf66fb6b4473a1518ae4999c1b614f0b8297b1cef96bac25381db", - "sha256:46ed02532cb66612d42ae5c3929b5e98ae330ea0f3900bc66ec5f4862069519b", - "sha256:49ea05212a529c2caffe411e25a59308b07d6e10bf2505d77da72891f9a05641", - "sha256:4fa0e7c9c3cf7c276d4f6ab9af8adddc127d04e0fcabede315904d2ff76db626", - "sha256:507c5357a8d8b4593b97fb669c50598f4e6cccbbf77e22fa9598aba78292b4d7", - "sha256:549722908de62aa0b47a78b90531c022fa6e139f9166be634f667ff45632cc92", - "sha256:58e6d2a5a7cb3e5f166fd58e71e9a4ff504be9dc61b88167e75f835da5764d07", - "sha256:5a16167118677d94bb48bfcd91e420088854eb0737b76ec374b91498fb77a70e", - "sha256:5d62c4f6706bff5d8a52fd51fec6069bef69e7202ed481486c0bc3874912c787", - "sha256:5fa159dcee5dba00c1def3231c249cf261185189205073bde13797e57dd7540a", - "sha256:6032231d4a5abd67c7f71168fd64a47b6b451fbcb91c8397c2f7610e67683810", - "sha256:63f26258a163c34542c24808f03d734b338da66ba91f410a703e505c8485791d", - "sha256:65a37714b8ad9aba5780325228598a5b16c47ba0f8aeb3dc0514701e4413d7c0", - "sha256:67054e47c01b7b349b94ed0840ccae075449503cf1fdd0a1fdd98ab5ddc2667b", - "sha256:67dda3c7325691c2081510e92c561f465ba61b975f481735aefdfc845d2cd043", - "sha256:6985a593417cdbc94c7f9c3403747335e450c1599da1647a5af76539672464d3", - "sha256:6a1948df1bb1d56b5e7b0553c0fa04fd0e320997ae99689488201f19fa90d2e7", - "sha256:6b5b7fd6ee7b54e01759f2044f936dcf7dea6e7585f35490f7ca0420fe723c0d", - "sha256:6c929916cbdb540d3407c66f19f73387f43e7c12fa318a66f64ac99da601bcdf", - "sha256:6f4d7a7c0aff92e8354cceca6fe223973ddf08401047920df0fcb24be2bd5138", - "sha256:728af36011bb5d344c4fe4af79cfe186729efb649d2f8b395d1572fb088a996c", - "sha256:742840d1d0438eb7ea4280f3347598f507a199a35a08294afdcc560c3739989d", - "sha256:75e872573220d1ee2305b35c9813626e620768248425f58798413e9c39741f46", - "sha256:794c3dd744fad478b6232289c866c25406ecdfc47e294618bdf1697e69bd64a6", - "sha256:7c0fdbdf6983526e269e5a8d53b7ae3622dd6998468821d660d0daf72779aefa", - "sha256:7c5f5290799a3f6539cc5e6f474c3e5c5fbeba74a5e1e5be75587746a940d51e", - "sha256:7c6e7e4f9167fddc438cd653d826f2222222564daed4116a02a184b464d3ef05", - "sha256:7cedd25e5f678f7738da38037435b340694ab34d424938041aa630d8bac42663", - "sha256:7e2e068a83552ddf7a39a99488bcba05ac13454fb205c847674da0352602082f", - "sha256:8319293e85feadbbfe2150a5659dbc2ebc4afdeaf7d98936fb9a2f2ba0d4c35c", - "sha256:8526b0941ec5a40220fc4dfde76aed58808e2b309c03e9fa8e2260083ef7157f", - "sha256:8884ba1a0fe7210b775106b25850f5e5a9dc3c840d1ae9924ee6ea2eb3acbfe7", - "sha256:8cb625bcb5add899cb8ba7bf716ec1d3e8f7cdea9b0713fa99eadf73b6d4986f", - "sha256:8d663fd71491dde7dfdfc899d13a067a94198e90695b4321084c6e450743b8c7", - "sha256:8ee1983728964d6070ab443399c476de93d5d741f71e8f6e7880a065f878e0b9", - "sha256:997e7b8f173a391987df40f3b52c423e5850be6f6df0dcfb5376365440b56667", - "sha256:9be90eebc9842a93ef8335291f57b3b7488ac24f70df96a6034a13cb58e6ff86", - "sha256:9ddd49258610499aab83b4f5b61b32e11fce873586282a0e972e5ab3bcadee51", - "sha256:9ecde3671e62eeb99e977f5221abcf40c208f69b5eb986b061ccec317c82ebd0", - "sha256:9ff4e9ecb6e4b363430edf2c6e50173a63e0820e549918adef70515f87ced19a", - "sha256:a254537b9b696ede293bfdbc0a65200e8e4507bc9f37831e2a0318a9b333c85c", - "sha256:a2b9bf8c79b660d0ca1ad95e587818c30ccdb11f787657458d6f26a1ea18c568", - "sha256:a61a68d630e812b67b5bf097ab84e2cd79b48c792857dc10ba8a223f5b06a2af", - "sha256:a7080b0159ce05f179cfac592cda1a82898ca9cd097dacf8ea20ae33474fbb25", - "sha256:a8fd93de4e1d278046345f49e2238cdb298589325849b2645d4a94c53faeffc5", - "sha256:a94ffc66738da99232ddffcf7910e0f69e2bbe3a0802e54426dbf0714e1c2ffe", - "sha256:aa806bbc13eac1ab6291ed21ecd2dd426063ca5417dd507e6be58de20e58dfcf", - "sha256:b0c1a133d42c6fc1f5fbcf5c91331657a1ff822e87989bf4a6e2e39b818d0ee9", - "sha256:b58229a844931bca61b3a20efd2be2a2acb4ad1622fc026504309a6883686fbf", - "sha256:bb2f144c6d98bb5cbc94adeb0447cfd4c0f991341baa68eee3f3b0c9c0e83767", - "sha256:be90c94570840939fecedf99fa72839aed70b0ced449b415c85e01ae67422c90", - "sha256:bf0d9a171908f32d54f651648c7290397b8792f4303821c42a74e7805bfb813c", - "sha256:bf15fc0b45914d9d1b706f7c9c4f66f2b7b053e9517e40123e137e8ca8958b3d", - "sha256:bf4298f366ca7e1ad1d21bbb58300a6985015909964077afd37559084590c929", - "sha256:c441c841e82c5ba7a85ad25986014be8d7849c3cfbdb6004541873505929a74e", - "sha256:cacea77ef7a2195f04f9279297684955e3d1ae4241092ff0cfcef532bb7a1c32", - "sha256:cd54895e4ae7d32f1e3dd91261df46ee7483a735017dc6f987904f194aa5fd14", - "sha256:d1323cd04d6e92150bcc79d0174ce347ed4b349d748b9358fd2e497b121e03c8", - "sha256:d383bf5e045d7f9d239b38e6acadd7b7fdf6c0087259a84ae3475d18e9a2ae8b", - "sha256:d3e7420211f5a65a54675fd860ea04173cde60a7cc20ccfbafcccd155225f8bc", - "sha256:d8074c5dd61c8a3e915fa8fc04754fa55cfa5978200d2daa1e2d4294c1f136aa", - "sha256:df03cd88f95b1b99052b52b1bb92173229d7a674df0ab06d2b25765ee8404bce", - "sha256:e45377d5d6fefe1677da2a2c07b024a6dac782088e37c0b1efea4cfe2b1be19b", - "sha256:e53d19c2bf7d0d1e6998a7e693c7e87300dd971808e6618964621ccd0e01fe4e", - "sha256:e560fd75aaf3e5693b91bcaddd8b314f4d57e99aef8a6c6dc692f935cc1e6bbf", - "sha256:ec5060592d83454e8063e487696ac3783cc48c9a329498bafae0d972bc7816c9", - "sha256:ecc2920630283e0783c22e2ac94427f8cca29a04cfdf331467d4f661f4072dac", - "sha256:ed7161bccab7696a473fe7ddb619c1d75963732b37da4618ba12e60899fefe4f", - "sha256:ee0bd3a7b2e184e88d25c9baa6a9dc609ba25b76daae942edfb14499ac7ec374", - "sha256:ee25f1ac091def37c4b59d192bbe3a206298feeb89132a470325bf76ad122a1e", - "sha256:efa44f64c37cc30c9f05932c740a8b40ce359f51882c70883cc95feac842da4d", - "sha256:f47d52fd9b2ac418c4890aad2f6d21a6b96183c98021f0a48497a904199f006e", - "sha256:f857034dc68d5ceb30fb60afb6ff2103087aea10a01b613985610e007053a121", - "sha256:fb91d20fa2d3b13deea98a690534697742029f4fb83673a3501ae6e3746508b5", - "sha256:fddb8870bdb83456a489ab67c6b3040a8d5a55069aa6f72f9d872235fbc52f54" + "sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e", + "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b", + "sha256:069e7212890b0bcf9b2be0a03afb0c2d5161d91e1bf51569a64f629acc7defbf", + "sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b", + "sha256:0c3c3a203c375b08fd06a20da3cf7aac293b834b6f4f4db71190e8422750cca5", + "sha256:0c86e7ceea56376216eba345aa1fc6a8a6b27ac236181f840d1d7e6a1ea9ba5c", + "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c", + "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a", + "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf", + "sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8", + "sha256:1eb34d90aac9bfbced9a58b266f8946cb5935869ff01b164573a7634d39fbcb5", + "sha256:1f6cc0ad7b4560e5637eb2c994e97b4fa41ba8226069c9277eb5ea7101845b42", + "sha256:27c6ac6aa9fc7bc662f594ef380707494cb42c22786a558d95fcdedb9aa5d035", + "sha256:2d219b0dbabe75e15e581fc1ae796109b07c8ba7d25b9ae8d650da582bed01b0", + "sha256:2fce1df66915909ff6c824bbb5eb403d2d15f98f1518e583074671a30fe0c21e", + "sha256:319fa8765bfd6a265e5fa661547556da381e53274bc05094fc9ea50da51bfd46", + "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d", + "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24", + "sha256:3e19ea4ea0bf46179f8a3652ac1426e6dcbaf577ce4b4f65be581e237340420d", + "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de", + "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf", + "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7", + "sha256:43593c6772aa12abc3af7784bff4a41ffa921608dd38b77cf1dfd7f5c4e71371", + "sha256:47ef24aa6511e388e9894ec16f0fbf3313a53ee68402bc428744a367ec55b833", + "sha256:4cf9e93a81979f1424f1a3d155213dc928f1069d697e4353edb8a5eba67c6259", + "sha256:4d0dfdd9a2ebc77b869a0b04423591ea8823f791293b527dc1bb896c1d6f1136", + "sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25", + "sha256:58aa11f4ca8b60113d4b8e32d37e7e78bd8af4d1a5b5cb4979ed856a45e62005", + "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef", + "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7", + "sha256:5b9145c35cc87313b5fd480144f8078716007656093d23059e8993d3a8fa730f", + "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53", + "sha256:5cdb0f3e1eb6dfc9965d19734d8f9c481b294b5274337a8cb5cb01b462dcb7e0", + "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb", + "sha256:603f1fe4144420374f1a69b907494c3acbc867a581c2d49d4175b0de7cc64566", + "sha256:61014615c1274df8da5991a1e5da85a3ccb00c2d4701ac6f3383afd3ca47ab0a", + "sha256:64a956dff37080b352c1c40b2966b09defb014347043e740d420ca1eb7c9b908", + "sha256:668ddddc9f3075af019f784456267eb504cb77c2c4bd46cc8402d723b4d200bf", + "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458", + "sha256:6f173bbfe976105aaa890b712d1759de339d8a7cef2fc0a1714cc1a1e1c47f64", + "sha256:71ebe3fe42656a2328ab08933d420df5f3ab121772eef78f2dc63624157f0ed9", + "sha256:730178f476ef03d3d4d255f0c9fa186cb1d13fd33ffe89d39f2cda4da90ceb71", + "sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b", + "sha256:7f30241577d2fef2602113b70ef7231bf4c69a97e04693bde08ddab913ba0ce5", + "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037", + "sha256:82de5da8c8893056603ac2d6a89eb8b4df49abf1a7c19d536984c8dd63f481d5", + "sha256:83be47aa4e35b87c106fc0c84c0fc069d3f9b9b06d3c494cd404ec6747544894", + "sha256:8638f99dca15b9dff328fb6273e09f03d1c50d9b6512f3b65a4154588a7595fe", + "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757", + "sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3", + "sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976", + "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6", + "sha256:916cd229b0150129d645ec51614d38129ee74c03293a9f3f17537be0029a9641", + "sha256:9532ea0b26a401264b1365146c440a6d78269ed41f83f23818d4b79497aeabe7", + "sha256:967a8eec513dbe08330f10137eacb427b2ca52118769e82ebcfcab0fba92a649", + "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120", + "sha256:9979643ffc69b799d50d3a7b72b5164a2e97e117009d7af6dfdd2ab906cb72cd", + "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40", + "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e", + "sha256:9e64e948ab41411958670f1093c0a57acfdc3bee5cf5b935671bbd5313bcf229", + "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c", + "sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7", + "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111", + "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654", + "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f", + "sha256:a461959ead5b38e2581998700b26346b78cd98540b5524796c175722f18b0294", + "sha256:a75801768bbe65499495660b777e018cbe90c7980f07f8aa57d6be79ea6f71da", + "sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f", + "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7", + "sha256:b0313e8b923b3814d1c4a524c93dfecea5f39fa95601f6a9b1ac96cd66f89ea0", + "sha256:b23c11c2c9e6d4e7300c92e022046ad09b91fd00e36e83c44483df4afa990073", + "sha256:b303b194c2e6f171cfddf8b8ba30baefccf03d36a4d9cab7fd0bb68ba476a3d7", + "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11", + "sha256:bd39c92e4c8f6cbf5f08257d6360123af72af9f4da75a690bef50da77362d25f", + "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27", + "sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70", + "sha256:c66d8ccbc902ad548312b96ed8d5d266d0d2c6d006fd0f66323e9d8f2dd49be7", + "sha256:cd6a55f65241c551eb53f8cf4d2f4af33512c39da5d9777694e9d9c60872f519", + "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5", + "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180", + "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f", + "sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee", + "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18", + "sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815", + "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e", + "sha256:e861ad82892408487be144906a368ddbe2dc6297074ade2d892341b35c59844a", + "sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7", + "sha256:ed5f6d2edbf349bd8d630e81f474d33d6ae5d07760c44d33cd808e2f5c8f4ae6", + "sha256:ef2e4e91fb3945769e14ce82ed53007195e616a63aa43b40fb7ebaaf907c8d4c", + "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc", + "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8", + "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98", + "sha256:f35c7070eeec2cdaac6fd3fe245226ed2a6292d3ee8c938e5bb645b434c5f256", + "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5", + "sha256:f6f1324db48f001c2ca26a25fa25af60711e09b9aaf4b28488602776f4f9a744", + "sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723", + "sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277", + "sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5" ], "markers": "python_version >= '3.9'", - "version": "==0.3.0" + "version": "==0.3.1" }, "pycparser": { "hashes": [ @@ -1257,118 +1257,117 @@ }, "pydantic": { "hashes": [ - "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584", - "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236" + "sha256:442557d2910e75c991c39f4b4ab18963d57b9b55122c8b2a9cd176d8c29ce968", + "sha256:5b6c415eee9f8123a14d859be0c84363fec6b1feb6b688d6435801230b56e0b8" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==2.10.6" + "markers": "python_version >= '3.9'", + "version": "==2.11.1" }, "pydantic-core": { "hashes": [ - "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278", - "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50", - "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9", - "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f", - "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6", - "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc", - "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54", - "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630", - "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9", - "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236", - "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7", - "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee", - "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b", - "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048", - "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc", - "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130", - "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4", - "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd", - "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4", - "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7", - "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7", - "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4", - "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e", - "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa", - "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6", - "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962", - "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b", - "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f", - "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474", - "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5", - "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459", - "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf", - "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a", - "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c", - "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76", - "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362", - "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4", - "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934", - "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320", - "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118", - "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96", - "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306", - "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046", - "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3", - "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2", - "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af", - "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9", - "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67", - "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a", - "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27", - "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35", - "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b", - "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151", - "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b", - "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154", - "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133", - "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef", - "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145", - "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15", - "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4", - "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc", - "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee", - "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c", - "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0", - "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5", - "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57", - "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b", - "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8", - "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1", - "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da", - "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e", - "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc", - "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993", - "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656", - "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4", - "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c", - "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb", - "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d", - "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9", - "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e", - "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1", - "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc", - "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a", - "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9", - "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506", - "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b", - "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1", - "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d", - "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99", - "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3", - "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31", - "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c", - "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39", - "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a", - "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308", - "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2", - "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228", - "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b", - "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9", - "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad" + "sha256:024d136ae44d233e6322027bbf356712b3940bee816e6c948ce4b90f18471b3d", + "sha256:0310524c833d91403c960b8a3cf9f46c282eadd6afd276c8c5edc617bd705dc9", + "sha256:07b4ced28fccae3f00626eaa0c4001aa9ec140a29501770a88dbbb0966019a86", + "sha256:085d8985b1c1e48ef271e98a658f562f29d89bda98bf120502283efbc87313eb", + "sha256:0a98257451164666afafc7cbf5fb00d613e33f7e7ebb322fbcd99345695a9a61", + "sha256:0bcf0bab28995d483f6c8d7db25e0d05c3efa5cebfd7f56474359e7137f39856", + "sha256:138d31e3f90087f42aa6286fb640f3c7a8eb7bdae829418265e7e7474bd2574b", + "sha256:14229c1504287533dbf6b1fc56f752ce2b4e9694022ae7509631ce346158de11", + "sha256:1583539533160186ac546b49f5cde9ffc928062c96920f58bd95de32ffd7bffd", + "sha256:175ab598fb457a9aee63206a1993874badf3ed9a456e0654273e56f00747bbd6", + "sha256:1a69b7596c6603afd049ce7f3835bcf57dd3892fc7279f0ddf987bebed8caa5a", + "sha256:1a73be93ecef45786d7d95b0c5e9b294faf35629d03d5b145b09b81258c7cd6d", + "sha256:1b1262b912435a501fa04cd213720609e2cefa723a07c92017d18693e69bf00b", + "sha256:1b2ea72dea0825949a045fa4071f6d5b3d7620d2a208335207793cf29c5a182d", + "sha256:20d4275f3c4659d92048c70797e5fdc396c6e4446caf517ba5cad2db60cd39d3", + "sha256:23c3e77bf8a7317612e5c26a3b084c7edeb9552d645742a54a5867635b4f2453", + "sha256:26a4ea04195638dcd8c53dadb545d70badba51735b1594810e9768c2c0b4a5da", + "sha256:26bc7367c0961dec292244ef2549afa396e72e28cc24706210bd44d947582c59", + "sha256:2a0147c0bef783fd9abc9f016d66edb6cac466dc54a17ec5f5ada08ff65caf5d", + "sha256:2c0afd34f928383e3fd25740f2050dbac9d077e7ba5adbaa2227f4d4f3c8da5c", + "sha256:30369e54d6d0113d2aa5aee7a90d17f225c13d87902ace8fcd7bbf99b19124db", + "sha256:31860fbda80d8f6828e84b4a4d129fd9c4535996b8249cfb8c720dc2a1a00bb8", + "sha256:34e7fb3abe375b5c4e64fab75733d605dda0f59827752debc99c17cb2d5f3276", + "sha256:40eb8af662ba409c3cbf4a8150ad32ae73514cd7cb1f1a2113af39763dd616b3", + "sha256:41d698dcbe12b60661f0632b543dbb119e6ba088103b364ff65e951610cb7ce0", + "sha256:4726f1f3f42d6a25678c67da3f0b10f148f5655813c5aca54b0d1742ba821b8f", + "sha256:4927564be53239a87770a5f86bdc272b8d1fbb87ab7783ad70255b4ab01aa25b", + "sha256:4b6d77c75a57f041c5ee915ff0b0bb58eabb78728b69ed967bc5b780e8f701b8", + "sha256:4d9149e7528af8bbd76cc055967e6e04617dcb2a2afdaa3dea899406c5521faa", + "sha256:4deac83a8cc1d09e40683be0bc6d1fa4cde8df0a9bf0cda5693f9b0569ac01b6", + "sha256:4f1ab031feb8676f6bd7c85abec86e2935850bf19b84432c64e3e239bffeb1ec", + "sha256:502ed542e0d958bd12e7c3e9a015bce57deaf50eaa8c2e1c439b512cb9db1e3a", + "sha256:5461934e895968655225dfa8b3be79e7e927e95d4bd6c2d40edd2fa7052e71b6", + "sha256:58c1151827eef98b83d49b6ca6065575876a02d2211f259fb1a6b7757bd24dd8", + "sha256:5bdd36b362f419c78d09630cbaebc64913f66f62bda6d42d5fbb08da8cc4f181", + "sha256:5bf637300ff35d4f59c006fff201c510b2b5e745b07125458a5389af3c0dff8c", + "sha256:5bf68bb859799e9cec3d9dd8323c40c00a254aabb56fe08f907e437005932f2b", + "sha256:5d8dc9f63a26f7259b57f46a7aab5af86b2ad6fbe48487500bb1f4b27e051e4c", + "sha256:5f36afd0d56a6c42cf4e8465b6441cf546ed69d3a4ec92724cc9c8c61bd6ecf4", + "sha256:5f72914cfd1d0176e58ddc05c7a47674ef4222c8253bf70322923e73e14a4ac3", + "sha256:6291797cad239285275558e0a27872da735b05c75d5237bbade8736f80e4c225", + "sha256:62c151ce3d59ed56ebd7ce9ce5986a409a85db697d25fc232f8e81f195aa39a1", + "sha256:635702b2fed997e0ac256b2cfbdb4dd0bf7c56b5d8fba8ef03489c03b3eb40e2", + "sha256:64672fa888595a959cfeff957a654e947e65bbe1d7d82f550417cbd6898a1d6b", + "sha256:68504959253303d3ae9406b634997a2123a0b0c1da86459abbd0ffc921695eac", + "sha256:69297418ad644d521ea3e1aa2e14a2a422726167e9ad22b89e8f1130d68e1e9a", + "sha256:6c32a40712e3662bebe524abe8abb757f2fa2000028d64cc5a1006016c06af43", + "sha256:715c62af74c236bf386825c0fdfa08d092ab0f191eb5b4580d11c3189af9d330", + "sha256:71dffba8fe9ddff628c68f3abd845e91b028361d43c5f8e7b3f8b91d7d85413e", + "sha256:7419241e17c7fbe5074ba79143d5523270e04f86f1b3a0dff8df490f84c8273a", + "sha256:759871f00e26ad3709efc773ac37b4d571de065f9dfb1778012908bcc36b3a73", + "sha256:7a25493320203005d2a4dac76d1b7d953cb49bce6d459d9ae38e30dd9f29bc9c", + "sha256:7b79af799630af263eca9ec87db519426d8c9b3be35016eddad1832bac812d87", + "sha256:7c9c84749f5787781c1c45bb99f433402e484e515b40675a5d121ea14711cf61", + "sha256:7da333f21cd9df51d5731513a6d39319892947604924ddf2e24a4612975fb936", + "sha256:82a4eba92b7ca8af1b7d5ef5f3d9647eee94d1f74d21ca7c21e3a2b92e008358", + "sha256:89670d7a0045acb52be0566df5bc8b114ac967c662c06cf5e0c606e4aadc964b", + "sha256:8a1d581e8cdbb857b0e0e81df98603376c1a5c34dc5e54039dcc00f043df81e7", + "sha256:8ec86b5baa36f0a0bfb37db86c7d52652f8e8aa076ab745ef7725784183c3fdd", + "sha256:91301a0980a1d4530d4ba7e6a739ca1a6b31341252cb709948e0aca0860ce0ae", + "sha256:918f2013d7eadea1d88d1a35fd4a1e16aaf90343eb446f91cb091ce7f9b431a2", + "sha256:9cb2390355ba084c1ad49485d18449b4242da344dea3e0fe10babd1f0db7dcfc", + "sha256:9ee65f0cc652261744fd07f2c6e6901c914aa6c5ff4dcfaf1136bc394d0dd26b", + "sha256:a608a75846804271cf9c83e40bbb4dab2ac614d33c6fd5b0c6187f53f5c593ef", + "sha256:a66d931ea2c1464b738ace44b7334ab32a2fd50be023d863935eb00f42be1778", + "sha256:a7a7f2a3f628d2f7ef11cb6188bcf0b9e1558151d511b974dfea10a49afe192b", + "sha256:abaeec1be6ed535a5d7ffc2e6c390083c425832b20efd621562fbb5bff6dc518", + "sha256:abfa44cf2f7f7d7a199be6c6ec141c9024063205545aa09304349781b9a125e6", + "sha256:ade5dbcf8d9ef8f4b28e682d0b29f3008df9842bb5ac48ac2c17bc55771cc976", + "sha256:ae62032ef513fe6281ef0009e30838a01057b832dc265da32c10469622613885", + "sha256:aec79acc183865bad120b0190afac467c20b15289050648b876b07777e67ea48", + "sha256:b716294e721d8060908dbebe32639b01bfe61b15f9f57bcc18ca9a0e00d9520b", + "sha256:b9ec80eb5a5f45a2211793f1c4aeddff0c3761d1c70d684965c1807e923a588b", + "sha256:ba95691cf25f63df53c1d342413b41bd7762d9acb425df8858d7efa616c0870e", + "sha256:bccc06fa0372151f37f6b69834181aa9eb57cf8665ed36405fb45fbf6cac3bae", + "sha256:c860773a0f205926172c6644c394e02c25421dc9a456deff16f64c0e299487d3", + "sha256:ca1103d70306489e3d006b0f79db8ca5dd3c977f6f13b2c59ff745249431a606", + "sha256:ce72d46eb201ca43994303025bd54d8a35a3fc2a3495fac653d6eb7205ce04f4", + "sha256:d20cbb9d3e95114325780f3cfe990f3ecae24de7a2d75f978783878cce2ad585", + "sha256:dcfebee69cd5e1c0b76a17e17e347c84b00acebb8dd8edb22d4a03e88e82a207", + "sha256:e1c69aa459f5609dec2fa0652d495353accf3eda5bdb18782bc5a2ae45c9273a", + "sha256:e2762c568596332fdab56b07060c8ab8362c56cf2a339ee54e491cd503612c50", + "sha256:e37f10f6d4bc67c58fbd727108ae1d8b92b397355e68519f1e4a7babb1473442", + "sha256:e790954b5093dff1e3a9a2523fddc4e79722d6f07993b4cd5547825c3cbf97b5", + "sha256:e81a295adccf73477220e15ff79235ca9dcbcee4be459eb9d4ce9a2763b8386c", + "sha256:e925819a98318d17251776bd3d6aa9f3ff77b965762155bdad15d1a9265c4cfd", + "sha256:ea30239c148b6ef41364c6f51d103c2988965b643d62e10b233b5efdca8c0099", + "sha256:eabf946a4739b5237f4f56d77fa6668263bc466d06a8036c055587c130a46f7b", + "sha256:ecb158fb9b9091b515213bed3061eb7deb1d3b4e02327c27a0ea714ff46b0760", + "sha256:ecc6d02d69b54a2eb83ebcc6f29df04957f734bcf309d346b4f83354d8376862", + "sha256:eddb18a00bbb855325db27b4c2a89a4ba491cd6a0bd6d852b225172a1f54b36c", + "sha256:f00e8b59e1fc8f09d05594aa7d2b726f1b277ca6155fc84c0396db1b373c4555", + "sha256:f1fb026c575e16f673c61c7b86144517705865173f3d0907040ac30c4f9f5915", + "sha256:f200b2f20856b5a6c3a35f0d4e344019f805e363416e609e9b47c552d35fd5ea", + "sha256:f225f3a3995dbbc26affc191d0443c6c4aa71b83358fd4c2b7d63e2f6f0336f9", + "sha256:f22dab23cdbce2005f26a8f0c71698457861f97fc6318c75814a50c75e87d025", + "sha256:f3eb479354c62067afa62f53bb387827bee2f75c9c79ef25eef6ab84d4b1ae3b", + "sha256:fc53e05c16697ff0c1c7c2b98e45e131d4bfb78068fffff92a82d169cbb4c7b7", + "sha256:ff48a55be9da6930254565ff5238d71d5e9cd8c5487a191cb85df3bdb8c77365" ], - "markers": "python_version >= '3.8'", - "version": "==2.27.2" + "markers": "python_version >= '3.9'", + "version": "==2.33.0" }, "pyjwt": { "hashes": [ @@ -1388,10 +1387,10 @@ }, "pytz": { "hashes": [ - "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57", - "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e" + "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", + "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00" ], - "version": "==2025.1" + "version": "==2025.2" }, "pyyaml": { "hashes": [ @@ -1471,112 +1470,123 @@ }, "rpds-py": { "hashes": [ - "sha256:09cd7dbcb673eb60518231e02874df66ec1296c01a4fcd733875755c02014b19", - "sha256:0f3288930b947cbebe767f84cf618d2cbe0b13be476e749da0e6a009f986248c", - "sha256:0fced9fd4a07a1ded1bac7e961ddd9753dd5d8b755ba8e05acba54a21f5f1522", - "sha256:112b8774b0b4ee22368fec42749b94366bd9b536f8f74c3d4175d4395f5cbd31", - "sha256:11dd60b2ffddba85715d8a66bb39b95ddbe389ad2cfcf42c833f1bcde0878eaf", - "sha256:178f8a60fc24511c0eb756af741c476b87b610dba83270fce1e5a430204566a4", - "sha256:1b08027489ba8fedde72ddd233a5ea411b85a6ed78175f40285bd401bde7466d", - "sha256:1bf5be5ba34e19be579ae873da515a2836a2166d8d7ee43be6ff909eda42b72b", - "sha256:1ed7de3c86721b4e83ac440751329ec6a1102229aa18163f84c75b06b525ad7e", - "sha256:1eedaaccc9bb66581d4ae7c50e15856e335e57ef2734dbc5fd8ba3e2a4ab3cb6", - "sha256:243241c95174b5fb7204c04595852fe3943cc41f47aa14c3828bc18cd9d3b2d6", - "sha256:26bb3e8de93443d55e2e748e9fd87deb5f8075ca7bc0502cfc8be8687d69a2ec", - "sha256:271fa2184cf28bdded86bb6217c8e08d3a169fe0bbe9be5e8d96e8476b707122", - "sha256:28358c54fffadf0ae893f6c1050e8f8853e45df22483b7fff2f6ab6152f5d8bf", - "sha256:285019078537949cecd0190f3690a0b0125ff743d6a53dfeb7a4e6787af154f5", - "sha256:2893d778d4671ee627bac4037a075168b2673c57186fb1a57e993465dbd79a93", - "sha256:2a54027554ce9b129fc3d633c92fa33b30de9f08bc61b32c053dc9b537266fed", - "sha256:2c6ae11e6e93728d86aafc51ced98b1658a0080a7dd9417d24bfb955bb09c3c2", - "sha256:2cfa07c346a7ad07019c33fb9a63cf3acb1f5363c33bc73014e20d9fe8b01cdd", - "sha256:35d5631ce0af26318dba0ae0ac941c534453e42f569011585cb323b7774502a5", - "sha256:3614d280bf7aab0d3721b5ce0e73434acb90a2c993121b6e81a1c15c665298ac", - "sha256:3902df19540e9af4cc0c3ae75974c65d2c156b9257e91f5101a51f99136d834c", - "sha256:3aaf141d39f45322e44fc2c742e4b8b4098ead5317e5f884770c8df0c332da70", - "sha256:3d8abf7896a91fb97e7977d1aadfcc2c80415d6dc2f1d0fca5b8d0df247248f3", - "sha256:3e77febf227a1dc3220159355dba68faa13f8dca9335d97504abf428469fb18b", - "sha256:3e9212f52074fc9d72cf242a84063787ab8e21e0950d4d6709886fb62bcb91d5", - "sha256:3ee9d6f0b38efb22ad94c3b68ffebe4c47865cdf4b17f6806d6c674e1feb4246", - "sha256:4233df01a250b3984465faed12ad472f035b7cd5240ea3f7c76b7a7016084495", - "sha256:4263320ed887ed843f85beba67f8b2d1483b5947f2dc73a8b068924558bfeace", - "sha256:4ab923167cfd945abb9b51a407407cf19f5bee35001221f2911dc85ffd35ff4f", - "sha256:4caafd1a22e5eaa3732acb7672a497123354bef79a9d7ceed43387d25025e935", - "sha256:50fb62f8d8364978478b12d5f03bf028c6bc2af04082479299139dc26edf4c64", - "sha256:55ff4151cfd4bc635e51cfb1c59ac9f7196b256b12e3a57deb9e5742e65941ad", - "sha256:5b98b6c953e5c2bda51ab4d5b4f172617d462eebc7f4bfdc7c7e6b423f6da957", - "sha256:5c9ff044eb07c8468594d12602291c635da292308c8c619244e30698e7fc455a", - "sha256:5e9c206a1abc27e0588cf8b7c8246e51f1a16a103734f7750830a1ccb63f557a", - "sha256:5fb89edee2fa237584e532fbf78f0ddd1e49a47c7c8cfa153ab4849dc72a35e6", - "sha256:633462ef7e61d839171bf206551d5ab42b30b71cac8f10a64a662536e057fdef", - "sha256:66f8d2a17e5838dd6fb9be6baaba8e75ae2f5fa6b6b755d597184bfcd3cb0eba", - "sha256:6959bb9928c5c999aba4a3f5a6799d571ddc2c59ff49917ecf55be2bbb4e3722", - "sha256:698a79d295626ee292d1730bc2ef6e70a3ab135b1d79ada8fde3ed0047b65a10", - "sha256:721f9c4011b443b6e84505fc00cc7aadc9d1743f1c988e4c89353e19c4a968ee", - "sha256:72e680c1518733b73c994361e4b06441b92e973ef7d9449feec72e8ee4f713da", - "sha256:75307599f0d25bf6937248e5ac4e3bde5ea72ae6618623b86146ccc7845ed00b", - "sha256:754fba3084b70162a6b91efceee8a3f06b19e43dac3f71841662053c0584209a", - "sha256:759462b2d0aa5a04be5b3e37fb8183615f47014ae6b116e17036b131985cb731", - "sha256:7938c7b0599a05246d704b3f5e01be91a93b411d0d6cc62275f025293b8a11ce", - "sha256:7b77e07233925bd33fc0022b8537774423e4c6680b6436316c5075e79b6384f4", - "sha256:7e5413d2e2d86025e73f05510ad23dad5950ab8417b7fc6beaad99be8077138b", - "sha256:7f3240dcfa14d198dba24b8b9cb3b108c06b68d45b7babd9eefc1038fdf7e707", - "sha256:7f9682a8f71acdf59fd554b82b1c12f517118ee72c0f3944eda461606dfe7eb9", - "sha256:8d67beb6002441faef8251c45e24994de32c4c8686f7356a1f601ad7c466f7c3", - "sha256:9441af1d25aed96901f97ad83d5c3e35e6cd21a25ca5e4916c82d7dd0490a4fa", - "sha256:98b257ae1e83f81fb947a363a274c4eb66640212516becaff7bef09a5dceacaa", - "sha256:9e9f3a3ac919406bc0414bbbd76c6af99253c507150191ea79fab42fdb35982a", - "sha256:a1c66e71ecfd2a4acf0e4bd75e7a3605afa8f9b28a3b497e4ba962719df2be57", - "sha256:a1e17d8dc8e57d8e0fd21f8f0f0a5211b3fa258b2e444c2053471ef93fe25a00", - "sha256:a20cb698c4a59c534c6701b1c24a968ff2768b18ea2991f886bd8985ce17a89f", - "sha256:a970bfaf130c29a679b1d0a6e0f867483cea455ab1535fb427566a475078f27f", - "sha256:a98f510d86f689fcb486dc59e6e363af04151e5260ad1bdddb5625c10f1e95f8", - "sha256:a9d3b728f5a5873d84cba997b9d617c6090ca5721caaa691f3b1a78c60adc057", - "sha256:ad76f44f70aac3a54ceb1813ca630c53415da3a24fd93c570b2dfb4856591017", - "sha256:ae28144c1daa61366205d32abd8c90372790ff79fc60c1a8ad7fd3c8553a600e", - "sha256:b03a8d50b137ee758e4c73638b10747b7c39988eb8e6cd11abb7084266455165", - "sha256:b5a96fcac2f18e5a0a23a75cd27ce2656c66c11c127b0318e508aab436b77428", - "sha256:b5ef909a37e9738d146519657a1aab4584018746a18f71c692f2f22168ece40c", - "sha256:b79f5ced71efd70414a9a80bbbfaa7160da307723166f09b69773153bf17c590", - "sha256:b91cceb5add79ee563bd1f70b30896bd63bc5f78a11c1f00a1e931729ca4f1f4", - "sha256:b92f5654157de1379c509b15acec9d12ecf6e3bc1996571b6cb82a4302060447", - "sha256:c04ca91dda8a61584165825907f5c967ca09e9c65fe8966ee753a3f2b019fe1e", - "sha256:c1f8afa346ccd59e4e5630d5abb67aba6a9812fddf764fd7eb11f382a345f8cc", - "sha256:c5334a71f7dc1160382d45997e29f2637c02f8a26af41073189d79b95d3321f1", - "sha256:c617d7453a80e29d9973b926983b1e700a9377dbe021faa36041c78537d7b08c", - "sha256:c632419c3870507ca20a37c8f8f5352317aca097639e524ad129f58c125c61c6", - "sha256:c6760211eee3a76316cf328f5a8bd695b47b1626d21c8a27fb3b2473a884d597", - "sha256:c698d123ce5d8f2d0cd17f73336615f6a2e3bdcedac07a1291bb4d8e7d82a05a", - "sha256:c76b32eb2ab650a29e423525e84eb197c45504b1c1e6e17b6cc91fcfeb1a4b1d", - "sha256:c8f7e90b948dc9dcfff8003f1ea3af08b29c062f681c05fd798e36daa3f7e3e8", - "sha256:c9e799dac1ffbe7b10c1fd42fe4cd51371a549c6e108249bde9cd1200e8f59b4", - "sha256:cafa48f2133d4daa028473ede7d81cd1b9f9e6925e9e4003ebdf77010ee02f35", - "sha256:ce473a2351c018b06dd8d30d5da8ab5a0831056cc53b2006e2a8028172c37ce5", - "sha256:d31ed4987d72aabdf521eddfb6a72988703c091cfc0064330b9e5f8d6a042ff5", - "sha256:d550d7e9e7d8676b183b37d65b5cd8de13676a738973d330b59dc8312df9c5dc", - "sha256:d6adb81564af0cd428910f83fa7da46ce9ad47c56c0b22b50872bc4515d91966", - "sha256:d6f6512a90bd5cd9030a6237f5346f046c6f0e40af98657568fa45695d4de59d", - "sha256:d7031d493c4465dbc8d40bd6cafefef4bd472b17db0ab94c53e7909ee781b9ef", - "sha256:d9f75a06ecc68f159d5d7603b734e1ff6daa9497a929150f794013aa9f6e3f12", - "sha256:db7707dde9143a67b8812c7e66aeb2d843fe33cc8e374170f4d2c50bd8f2472d", - "sha256:e0397dd0b3955c61ef9b22838144aa4bef6f0796ba5cc8edfc64d468b93798b4", - "sha256:e0df046f2266e8586cf09d00588302a32923eb6386ced0ca5c9deade6af9a149", - "sha256:e14f86b871ea74c3fddc9a40e947d6a5d09def5adc2076ee61fb910a9014fb35", - "sha256:e5963ea87f88bddf7edd59644a35a0feecf75f8985430124c253612d4f7d27ae", - "sha256:e768267cbe051dd8d1c5305ba690bb153204a09bf2e3de3ae530de955f5b5580", - "sha256:e9cb79ecedfc156c0692257ac7ed415243b6c35dd969baa461a6888fc79f2f07", - "sha256:ed6f011bedca8585787e5082cce081bac3d30f54520097b2411351b3574e1219", - "sha256:f3429fb8e15b20961efca8c8b21432623d85db2228cc73fe22756c6637aa39e7", - "sha256:f35eff113ad430b5272bbfc18ba111c66ff525828f24898b4e146eb479a2cdda", - "sha256:f3a6cb95074777f1ecda2ca4fa7717caa9ee6e534f42b7575a8f0d4cb0c24013", - "sha256:f7356a6da0562190558c4fcc14f0281db191cdf4cb96e7604c06acfcee96df15", - "sha256:f88626e3f5e57432e6191cd0c5d6d6b319b635e70b40be2ffba713053e5147dd", - "sha256:fad784a31869747df4ac968a351e070c06ca377549e4ace94775aaa3ab33ee06", - "sha256:fc869af5cba24d45fb0399b0cfdbcefcf6910bf4dee5d74036a57cf5264b3ff4", - "sha256:fee513135b5a58f3bb6d89e48326cd5aa308e4bcdf2f7d59f67c861ada482bf8" + "sha256:0047638c3aa0dbcd0ab99ed1e549bbf0e142c9ecc173b6492868432d8989a046", + "sha256:006f4342fe729a368c6df36578d7a348c7c716be1da0a1a0f86e3021f8e98724", + "sha256:041f00419e1da7a03c46042453598479f45be3d787eb837af382bfc169c0db33", + "sha256:04ecf5c1ff4d589987b4d9882872f80ba13da7d42427234fce8f22efb43133bc", + "sha256:04f2b712a2206e13800a8136b07aaedc23af3facab84918e7aa89e4be0260032", + "sha256:0aeb3329c1721c43c58cae274d7d2ca85c1690d89485d9c63a006cb79a85771a", + "sha256:0e374c0ce0ca82e5b67cd61fb964077d40ec177dd2c4eda67dba130de09085c7", + "sha256:0f00c16e089282ad68a3820fd0c831c35d3194b7cdc31d6e469511d9bffc535c", + "sha256:174e46569968ddbbeb8a806d9922f17cd2b524aa753b468f35b97ff9c19cb718", + "sha256:1b221c2457d92a1fb3c97bee9095c874144d196f47c038462ae6e4a14436f7bc", + "sha256:208b3a70a98cf3710e97cabdc308a51cd4f28aa6e7bb11de3d56cd8b74bab98d", + "sha256:20f2712bd1cc26a3cc16c5a1bfee9ed1abc33d4cdf1aabd297fe0eb724df4272", + "sha256:24795c099453e3721fda5d8ddd45f5dfcc8e5a547ce7b8e9da06fecc3832e26f", + "sha256:2a0f156e9509cee987283abd2296ec816225145a13ed0391df8f71bf1d789e2d", + "sha256:2b2356688e5d958c4d5cb964af865bea84db29971d3e563fb78e46e20fe1848b", + "sha256:2c13777ecdbbba2077670285dd1fe50828c8742f6a4119dbef6f83ea13ad10fb", + "sha256:2d3ee4615df36ab8eb16c2507b11e764dcc11fd350bbf4da16d09cda11fcedef", + "sha256:2d53747da70a4e4b17f559569d5f9506420966083a31c5fbd84e764461c4444b", + "sha256:32bab0a56eac685828e00cc2f5d1200c548f8bc11f2e44abf311d6b548ce2e45", + "sha256:34d90ad8c045df9a4259c47d2e16a3f21fdb396665c94520dbfe8766e62187a4", + "sha256:369d9c6d4c714e36d4a03957b4783217a3ccd1e222cdd67d464a3a479fc17796", + "sha256:3a55fc10fdcbf1a4bd3c018eea422c52cf08700cf99c28b5cb10fe97ab77a0d3", + "sha256:3d2d8e4508e15fc05b31285c4b00ddf2e0eb94259c2dc896771966a163122a0c", + "sha256:3fab5f4a2c64a8fb64fc13b3d139848817a64d467dd6ed60dcdd6b479e7febc9", + "sha256:43dba99f00f1d37b2a0265a259592d05fcc8e7c19d140fe51c6e6f16faabeb1f", + "sha256:44d51febb7a114293ffd56c6cf4736cb31cd68c0fddd6aa303ed09ea5a48e029", + "sha256:493fe54318bed7d124ce272fc36adbf59d46729659b2c792e87c3b95649cdee9", + "sha256:4b28e5122829181de1898c2c97f81c0b3246d49f585f22743a1246420bb8d399", + "sha256:4cd031e63bc5f05bdcda120646a0d32f6d729486d0067f09d79c8db5368f4586", + "sha256:528927e63a70b4d5f3f5ccc1fa988a35456eb5d15f804d276709c33fc2f19bda", + "sha256:564c96b6076a98215af52f55efa90d8419cc2ef45d99e314fddefe816bc24f91", + "sha256:5db385bacd0c43f24be92b60c857cf760b7f10d8234f4bd4be67b5b20a7c0b6b", + "sha256:5ef877fa3bbfb40b388a5ae1cb00636a624690dcb9a29a65267054c9ea86d88a", + "sha256:5f6e3cec44ba05ee5cbdebe92d052f69b63ae792e7d05f1020ac5e964394080c", + "sha256:5fc13b44de6419d1e7a7e592a4885b323fbc2f46e1f22151e3a8ed3b8b920405", + "sha256:60748789e028d2a46fc1c70750454f83c6bdd0d05db50f5ae83e2db500b34da5", + "sha256:60d9b630c8025b9458a9d114e3af579a2c54bd32df601c4581bd054e85258143", + "sha256:619ca56a5468f933d940e1bf431c6f4e13bef8e688698b067ae68eb4f9b30e3a", + "sha256:630d3d8ea77eabd6cbcd2ea712e1c5cecb5b558d39547ac988351195db433f6c", + "sha256:63981feca3f110ed132fd217bf7768ee8ed738a55549883628ee3da75bb9cb78", + "sha256:66420986c9afff67ef0c5d1e4cdc2d0e5262f53ad11e4f90e5e22448df485bf0", + "sha256:675269d407a257b8c00a6b58205b72eec8231656506c56fd429d924ca00bb350", + "sha256:6a4a535013aeeef13c5532f802708cecae8d66c282babb5cd916379b72110cf7", + "sha256:6a727fd083009bc83eb83d6950f0c32b3c94c8b80a9b667c87f4bd1274ca30ba", + "sha256:6e1daf5bf6c2be39654beae83ee6b9a12347cb5aced9a29eecf12a2d25fff664", + "sha256:6eea559077d29486c68218178ea946263b87f1c41ae7f996b1f30a983c476a5a", + "sha256:75a810b7664c17f24bf2ffd7f92416c00ec84b49bb68e6a0d93e542406336b56", + "sha256:772cc1b2cd963e7e17e6cc55fe0371fb9c704d63e44cacec7b9b7f523b78919e", + "sha256:78884d155fd15d9f64f5d6124b486f3d3f7fd7cd71a78e9670a0f6f6ca06fb2d", + "sha256:79e8d804c2ccd618417e96720ad5cd076a86fa3f8cb310ea386a3e6229bae7d1", + "sha256:7e80d375134ddb04231a53800503752093dbb65dad8dabacce2c84cccc78e964", + "sha256:8097b3422d020ff1c44effc40ae58e67d93e60d540a65649d2cdaf9466030791", + "sha256:8205ee14463248d3349131bb8099efe15cd3ce83b8ef3ace63c7e976998e7124", + "sha256:8212ff58ac6dfde49946bea57474a386cca3f7706fc72c25b772b9ca4af6b79e", + "sha256:823e74ab6fbaa028ec89615ff6acb409e90ff45580c45920d4dfdddb069f2120", + "sha256:84e0566f15cf4d769dade9b366b7b87c959be472c92dffb70462dd0844d7cbad", + "sha256:896c41007931217a343eff197c34513c154267636c8056fb409eafd494c3dcdc", + "sha256:8aa362811ccdc1f8dadcc916c6d47e554169ab79559319ae9fae7d7752d0d60c", + "sha256:8b3b397eefecec8e8e39fa65c630ef70a24b09141a6f9fc17b3c3a50bed6b50e", + "sha256:8ebc7e65ca4b111d928b669713865f021b7773350eeac4a31d3e70144297baba", + "sha256:9168764133fd919f8dcca2ead66de0105f4ef5659cbb4fa044f7014bed9a1797", + "sha256:921ae54f9ecba3b6325df425cf72c074cd469dea843fb5743a26ca7fb2ccb149", + "sha256:92558d37d872e808944c3c96d0423b8604879a3d1c86fdad508d7ed91ea547d5", + "sha256:951cc481c0c395c4a08639a469d53b7d4afa252529a085418b82a6b43c45c240", + "sha256:998c01b8e71cf051c28f5d6f1187abbdf5cf45fc0efce5da6c06447cba997034", + "sha256:9abc80fe8c1f87218db116016de575a7998ab1629078c90840e8d11ab423ee25", + "sha256:9be4f99bee42ac107870c61dfdb294d912bf81c3c6d45538aad7aecab468b6b7", + "sha256:9c39438c55983d48f4bb3487734d040e22dad200dab22c41e331cee145e7a50d", + "sha256:9d7e8ce990ae17dda686f7e82fd41a055c668e13ddcf058e7fb5e9da20b57793", + "sha256:9ea7f4174d2e4194289cb0c4e172d83e79a6404297ff95f2875cf9ac9bced8ba", + "sha256:a18fc371e900a21d7392517c6f60fe859e802547309e94313cd8181ad9db004d", + "sha256:a36b452abbf29f68527cf52e181fced56685731c86b52e852053e38d8b60bc8d", + "sha256:a5b66d1b201cc71bc3081bc2f1fc36b0c1f268b773e03bbc39066651b9e18391", + "sha256:a824d2c7a703ba6daaca848f9c3d5cb93af0505be505de70e7e66829affd676e", + "sha256:a88c0d17d039333a41d9bf4616bd062f0bd7aa0edeb6cafe00a2fc2a804e944f", + "sha256:aa6800adc8204ce898c8a424303969b7aa6a5e4ad2789c13f8648739830323b7", + "sha256:aad911555286884be1e427ef0dc0ba3929e6821cbeca2194b13dc415a462c7fd", + "sha256:afc6e35f344490faa8276b5f2f7cbf71f88bc2cda4328e00553bd451728c571f", + "sha256:b9a4df06c35465ef4d81799999bba810c68d29972bf1c31db61bfdb81dd9d5bb", + "sha256:bb2954155bb8f63bb19d56d80e5e5320b61d71084617ed89efedb861a684baea", + "sha256:bbc4362e06f950c62cad3d4abf1191021b2ffaf0b31ac230fbf0526453eee75e", + "sha256:c0145295ca415668420ad142ee42189f78d27af806fcf1f32a18e51d47dd2052", + "sha256:c30ff468163a48535ee7e9bf21bd14c7a81147c0e58a36c1078289a8ca7af0bd", + "sha256:c347a20d79cedc0a7bd51c4d4b7dbc613ca4e65a756b5c3e57ec84bd43505b47", + "sha256:c43583ea8517ed2e780a345dd9960896afc1327e8cf3ac8239c167530397440d", + "sha256:c61a2cb0085c8783906b2f8b1f16a7e65777823c7f4d0a6aaffe26dc0d358dd9", + "sha256:c9ca89938dff18828a328af41ffdf3902405a19f4131c88e22e776a8e228c5a8", + "sha256:cc31e13ce212e14a539d430428cd365e74f8b2d534f8bc22dd4c9c55b277b875", + "sha256:cdabcd3beb2a6dca7027007473d8ef1c3b053347c76f685f5f060a00327b8b65", + "sha256:cf86f72d705fc2ef776bb7dd9e5fbba79d7e1f3e258bf9377f8204ad0fc1c51e", + "sha256:d09dc82af2d3c17e7dd17120b202a79b578d79f2b5424bda209d9966efeed114", + "sha256:d3aa13bdf38630da298f2e0d77aca967b200b8cc1473ea05248f6c5e9c9bdb44", + "sha256:d69d003296df4840bd445a5d15fa5b6ff6ac40496f956a221c4d1f6f7b4bc4d9", + "sha256:d6e109a454412ab82979c5b1b3aee0604eca4bbf9a02693bb9df027af2bfa91a", + "sha256:d8551e733626afec514b5d15befabea0dd70a343a9f23322860c4f16a9430205", + "sha256:d8754d872a5dfc3c5bf9c0e059e8107451364a30d9fd50f1f1a85c4fb9481164", + "sha256:d8f9a6e7fd5434817526815f09ea27f2746c4a51ee11bb3439065f5fc754db58", + "sha256:dbcbb6db5582ea33ce46a5d20a5793134b5365110d84df4e30b9d37c6fd40ad3", + "sha256:e0f3ef95795efcd3b2ec3fe0a5bcfb5dadf5e3996ea2117427e524d4fbf309c6", + "sha256:e13ae74a8a3a0c2f22f450f773e35f893484fcfacb00bb4344a7e0f4f48e1f97", + "sha256:e274f62cbd274359eff63e5c7e7274c913e8e09620f6a57aae66744b3df046d6", + "sha256:e838bf2bb0b91ee67bf2b889a1a841e5ecac06dd7a2b1ef4e6151e2ce155c7ae", + "sha256:e8acd55bd5b071156bae57b555f5d33697998752673b9de554dd82f5b5352727", + "sha256:e8e5ab32cf9eb3647450bc74eb201b27c185d3857276162c101c0f8c6374e098", + "sha256:ebcb786b9ff30b994d5969213a8430cbb984cdd7ea9fd6df06663194bd3c450c", + "sha256:ebea2821cdb5f9fef44933617be76185b80150632736f3d76e54829ab4a3b4d1", + "sha256:ed0ef550042a8dbcd657dfb284a8ee00f0ba269d3f2286b0493b15a5694f9fe8", + "sha256:eda5c1e2a715a4cbbca2d6d304988460942551e4e5e3b7457b50943cd741626d", + "sha256:f5c0ed12926dec1dfe7d645333ea59cf93f4d07750986a586f511c0bc61fe103", + "sha256:f6016bd950be4dcd047b7475fdf55fb1e1f59fc7403f387be0e8123e4a576d30", + "sha256:f9e0057a509e096e47c87f753136c9b10d7a91842d8042c2ee6866899a717c0d", + "sha256:fc1c892b1ec1f8cbd5da8de287577b455e388d9c328ad592eabbdcb6fc93bee5", + "sha256:fc2c1e1b00f88317d9de6b2c2b39b012ebbfe35fe5e7bef980fd2a91f6100a07", + "sha256:fd822f019ccccd75c832deb7aa040bb02d70a92eb15a2f16c7987b7ad4ee8d83" ], "markers": "python_version >= '3.9'", - "version": "==0.23.1" + "version": "==0.24.0" }, "s3transfer": { "hashes": [ @@ -1588,11 +1598,11 @@ }, "setuptools": { "hashes": [ - "sha256:199466a166ff664970d0ee145839f5582cb9bca7a0a3a2e795b6a9cb2308e9c6", - "sha256:43b4ee60e10b0d0ee98ad11918e114c70701bc6051662a9a675a0496c1a158f4" + "sha256:18fd474d4a82a5f83dac888df697af65afa82dec7323d09c3e37d1f14288da54", + "sha256:3e386e96793c8702ae83d17b853fb93d3e09ef82ec62722e61da5cd22376dcd8" ], "markers": "python_version >= '3.9'", - "version": "==76.0.0" + "version": "==78.1.0" }, "six": { "hashes": [ @@ -1620,19 +1630,27 @@ }, "typing-extensions": { "hashes": [ - "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", - "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" + "sha256:0a4ac55a5820789d87e297727d229866c9650f6521b64206413c4fbada24d95b", + "sha256:c8dd92cc0d6425a97c18fbb9d1954e5ff92c1ca881a309c45f06ebc0b79058e5" ], "markers": "python_version >= '3.8'", - "version": "==4.12.2" + "version": "==4.13.0" + }, + "typing-inspection": { + "hashes": [ + "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f", + "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122" + ], + "markers": "python_version >= '3.9'", + "version": "==0.4.0" }, "tzdata": { "hashes": [ - "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694", - "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639" + "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", + "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9" ], "markers": "python_version >= '2'", - "version": "==2025.1" + "version": "==2025.2" }, "urllib3": { "hashes": [ @@ -2007,73 +2025,73 @@ }, "coverage": { "hashes": [ - "sha256:056d3017ed67e7ddf266e6f57378ece543755a4c9231e997789ab3bd11392c94", - "sha256:0ce8cf59e09d31a4915ff4c3b94c6514af4c84b22c4cc8ad7c3c546a86150a92", - "sha256:104bf640f408f4e115b85110047c7f27377e1a8b7ba86f7db4fa47aa49dc9a8e", - "sha256:1393e5aa9441dafb0162c36c8506c648b89aea9565b31f6bfa351e66c11bcd82", - "sha256:1586ad158523f4133499a4f322b230e2cfef9cc724820dbd58595a5a236186f4", - "sha256:180e3fc68ee4dc5af8b33b6ca4e3bb8aa1abe25eedcb958ba5cff7123071af68", - "sha256:1b336d06af14f8da5b1f391e8dec03634daf54dfcb4d1c4fb6d04c09d83cef90", - "sha256:1c8fbce80b2b8bf135d105aa8f5b36eae0c57d702a1cc3ebdea2a6f03f6cdde5", - "sha256:2d673e3add00048215c2cc507f1228a7523fd8bf34f279ac98334c9b07bd2656", - "sha256:316f29cc3392fa3912493ee4c83afa4a0e2db04ff69600711f8c03997c39baaa", - "sha256:33c1394d8407e2771547583b66a85d07ed441ff8fae5a4adb4237ad39ece60db", - "sha256:37cbc7b0d93dfd133e33c7ec01123fbb90401dce174c3b6661d8d36fb1e30608", - "sha256:39abcacd1ed54e2c33c54bdc488b310e8ef6705833f7148b6eb9a547199d375d", - "sha256:3ab7090f04b12dc6469882ce81244572779d3a4b67eea1c96fb9ecc8c607ef39", - "sha256:3b0e6e54591ae0d7427def8a4d40fca99df6b899d10354bab73cd5609807261c", - "sha256:416e2a8845eaff288f97eaf76ab40367deafb9073ffc47bf2a583f26b05e5265", - "sha256:4545485fef7a8a2d8f30e6f79ce719eb154aab7e44217eb444c1d38239af2072", - "sha256:4c124025430249118d018dcedc8b7426f39373527c845093132196f2a483b6dd", - "sha256:4fbb7a0c3c21908520149d7751cf5b74eb9b38b54d62997b1e9b3ac19a8ee2fe", - "sha256:52fc89602cde411a4196c8c6894afb384f2125f34c031774f82a4f2608c59d7d", - "sha256:55143aa13c49491f5606f05b49ed88663446dce3a4d3c5d77baa4e36a16d3573", - "sha256:57f3bd0d29bf2bd9325c0ff9cc532a175110c4bf8f412c05b2405fd35745266d", - "sha256:5b2f144444879363ea8834cd7b6869d79ac796cb8f864b0cfdde50296cd95816", - "sha256:5efdeff5f353ed3352c04e6b318ab05c6ce9249c25ed3c2090c6e9cadda1e3b2", - "sha256:60e6347d1ed882b1159ffea172cb8466ee46c665af4ca397edbf10ff53e9ffaf", - "sha256:693d921621a0c8043bfdc61f7d4df5ea6d22165fe8b807cac21eb80dd94e4bbd", - "sha256:708f0a1105ef2b11c79ed54ed31f17e6325ac936501fc373f24be3e6a578146a", - "sha256:70f0925c4e2bfc965369f417e7cc72538fd1ba91639cf1e4ef4b1a6b50439b3b", - "sha256:7789e700f33f2b133adae582c9f437523cd5db8de845774988a58c360fc88253", - "sha256:7b6c96d69928a3a6767fab8dc1ce8a02cf0156836ccb1e820c7f45a423570d98", - "sha256:7d2a65876274acf544703e943c010b60bd79404e3623a1e5d52b64a6e2728de5", - "sha256:7f18d47641282664276977c604b5a261e51fefc2980f5271d547d706b06a837f", - "sha256:89078312f06237417adda7c021c33f80f7a6d2db8572a5f6c330d89b080061ce", - "sha256:8c938c6ae59be67ac19a7204e079efc94b38222cd7d0269f96e45e18cddeaa59", - "sha256:8e336b56301774ace6be0017ff85c3566c556d938359b61b840796a0202f805c", - "sha256:a0a207c87a9f743c8072d059b4711f8d13c456eb42dac778a7d2e5d4f3c253a7", - "sha256:a2454b12a3f12cc4698f3508912e6225ec63682e2ca5a96f80a2b93cef9e63f3", - "sha256:a538a23119d1e2e2ce077e902d02ea3d8e0641786ef6e0faf11ce82324743944", - "sha256:aa4dff57fc21a575672176d5ab0ef15a927199e775c5e8a3d75162ab2b0c7705", - "sha256:ad0edaa97cb983d9f2ff48cadddc3e1fb09f24aa558abeb4dc9a0dbacd12cbb4", - "sha256:ae8006772c6b0fa53c33747913473e064985dac4d65f77fd2fdc6474e7cd54e4", - "sha256:b0fac2088ec4aaeb5468b814bd3ff5e5978364bfbce5e567c44c9e2854469f6c", - "sha256:b3e212a894d8ae07fde2ca8b43d666a6d49bbbddb10da0f6a74ca7bd31f20054", - "sha256:b54a1ee4c6f1905a436cbaa04b26626d27925a41cbc3a337e2d3ff7038187f07", - "sha256:b667b91f4f714b17af2a18e220015c941d1cf8b07c17f2160033dbe1e64149f0", - "sha256:b8c36093aca722db73633cf2359026ed7782a239eb1c6db2abcff876012dc4cf", - "sha256:bb356e7ae7c2da13f404bf8f75be90f743c6df8d4607022e759f5d7d89fe83f8", - "sha256:bce730d484038e97f27ea2dbe5d392ec5c2261f28c319a3bb266f6b213650135", - "sha256:c075d167a6ec99b798c1fdf6e391a1d5a2d054caffe9593ba0f97e3df2c04f0e", - "sha256:c4e09534037933bf6eb31d804e72c52ec23219b32c1730f9152feabbd7499463", - "sha256:c5f8a5364fc37b2f172c26a038bc7ec4885f429de4a05fc10fdcb53fb5834c5c", - "sha256:cb203c0afffaf1a8f5b9659a013f8f16a1b2cad3a80a8733ceedc968c0cf4c57", - "sha256:cc41374d2f27d81d6558f8a24e5c114580ffefc197fd43eabd7058182f743322", - "sha256:cd879d4646055a573775a1cec863d00c9ff8c55860f8b17f6d8eee9140c06166", - "sha256:d013c07061751ae81861cae6ec3a4fe04e84781b11fd4b6b4201590234b25c7b", - "sha256:d8c7524779003d59948c51b4fcbf1ca4e27c26a7d75984f63488f3625c328b9b", - "sha256:d9710521f07f526de30ccdead67e6b236fe996d214e1a7fba8b36e2ba2cd8261", - "sha256:e1ffde1d6bc2a92f9c9207d1ad808550873748ac2d4d923c815b866baa343b3f", - "sha256:e7f559c36d5cdc448ee13e7e56ed7b6b5d44a40a511d584d388a0f5d940977ba", - "sha256:f2a1e18a85bd066c7c556d85277a7adf4651f259b2579113844835ba1a74aafd", - "sha256:f32b165bf6dfea0846a9c9c38b7e1d68f313956d60a15cde5d1709fddcaf3bee", - "sha256:f5a2f71d6a91238e7628f23538c26aa464d390cbdedf12ee2a7a0fb92a24482a", - "sha256:f81fe93dc1b8e5673f33443c0786c14b77e36f1025973b85e07c70353e46882b" + "sha256:042e7841a26498fff7a37d6fda770d17519982f5b7d8bf5278d140b67b61095f", + "sha256:04bfec25a8ef1c5f41f5e7e5c842f6b615599ca8ba8391ec33a9290d9d2db3a3", + "sha256:0915742f4c82208ebf47a2b154a5334155ed9ef9fe6190674b8a46c2fb89cb05", + "sha256:18c5ae6d061ad5b3e7eef4363fb27a0576012a7447af48be6c75b88494c6cf25", + "sha256:2931f66991175369859b5fd58529cd4b73582461877ecfd859b6549869287ffe", + "sha256:2e4b6b87bb0c846a9315e3ab4be2d52fac905100565f4b92f02c445c8799e257", + "sha256:3043ba1c88b2139126fc72cb48574b90e2e0546d4c78b5299317f61b7f718b78", + "sha256:379fe315e206b14e21db5240f89dc0774bdd3e25c3c58c2c733c99eca96f1ada", + "sha256:42421e04069fb2cbcbca5a696c4050b84a43b05392679d4068acbe65449b5c64", + "sha256:4dfd9a93db9e78666d178d4f08a5408aa3f2474ad4d0e0378ed5f2ef71640cb6", + "sha256:52a523153c568d2c0ef8826f6cc23031dc86cffb8c6aeab92c4ff776e7951b28", + "sha256:554fec1199d93ab30adaa751db68acec2b41c5602ac944bb19187cb9a41a8067", + "sha256:581a40c7b94921fffd6457ffe532259813fc68eb2bdda60fa8cc343414ce3733", + "sha256:5a26c0c795c3e0b63ec7da6efded5f0bc856d7c0b24b2ac84b4d1d7bc578d676", + "sha256:5a570cd9bd20b85d1a0d7b009aaf6c110b52b5755c17be6962f8ccd65d1dbd23", + "sha256:5aaeb00761f985007b38cf463b1d160a14a22c34eb3f6a39d9ad6fc27cb73008", + "sha256:5ac46d0c2dd5820ce93943a501ac5f6548ea81594777ca585bf002aa8854cacd", + "sha256:5c8a5c139aae4c35cbd7cadca1df02ea8cf28a911534fc1b0456acb0b14234f3", + "sha256:6b8af63b9afa1031c0ef05b217faa598f3069148eeee6bb24b79da9012423b82", + "sha256:769773614e676f9d8e8a0980dd7740f09a6ea386d0f383db6821df07d0f08545", + "sha256:771eb7587a0563ca5bb6f622b9ed7f9d07bd08900f7589b4febff05f469bea00", + "sha256:77af0f6447a582fdc7de5e06fa3757a3ef87769fbb0fdbdeba78c23049140a47", + "sha256:7a3d62b3b03b4b6fd41a085f3574874cf946cb4604d2b4d3e8dca8cd570ca501", + "sha256:821f7bcbaa84318287115d54becb1915eece6918136c6f91045bb84e2f88739d", + "sha256:89b1f4af0d4afe495cd4787a68e00f30f1d15939f550e869de90a86efa7e0814", + "sha256:8a1d96e780bdb2d0cbb297325711701f7c0b6f89199a57f2049e90064c29f6bd", + "sha256:8a40fcf208e021eb14b0fac6bdb045c0e0cab53105f93ba0d03fd934c956143a", + "sha256:8f99eb72bf27cbb167b636eb1726f590c00e1ad375002230607a844d9e9a2318", + "sha256:90e7fbc6216ecaffa5a880cdc9c77b7418c1dcb166166b78dbc630d07f278cc3", + "sha256:94ec0be97723ae72d63d3aa41961a0b9a6f5a53ff599813c324548d18e3b9e8c", + "sha256:95aa6ae391a22bbbce1b77ddac846c98c5473de0372ba5c463480043a07bff42", + "sha256:96121edfa4c2dfdda409877ea8608dd01de816a4dc4a0523356067b305e4e17a", + "sha256:a1f406a8e0995d654b2ad87c62caf6befa767885301f3b8f6f73e6f3c31ec3a6", + "sha256:a321c61477ff8ee705b8a5fed370b5710c56b3a52d17b983d9215861e37b642a", + "sha256:a5761c70c017c1b0d21b0815a920ffb94a670c8d5d409d9b38857874c21f70d7", + "sha256:a9abbccd778d98e9c7e85038e35e91e67f5b520776781d9a1e2ee9d400869487", + "sha256:ad80e6b4a0c3cb6f10f29ae4c60e991f424e6b14219d46f1e7d442b938ee68a4", + "sha256:b44674870709017e4b4036e3d0d6c17f06a0e6d4436422e0ad29b882c40697d2", + "sha256:b571bf5341ba8c6bc02e0baeaf3b061ab993bf372d982ae509807e7f112554e9", + "sha256:b8194fb8e50d556d5849753de991d390c5a1edeeba50f68e3a9253fbd8bf8ccd", + "sha256:b87eb6fc9e1bb8f98892a2458781348fa37e6925f35bb6ceb9d4afd54ba36c73", + "sha256:bbb5cc845a0292e0c520656d19d7ce40e18d0e19b22cb3e0409135a575bf79fc", + "sha256:be945402e03de47ba1872cd5236395e0f4ad635526185a930735f66710e1bd3f", + "sha256:bf13d564d310c156d1c8e53877baf2993fb3073b2fc9f69790ca6a732eb4bfea", + "sha256:cf60dd2696b457b710dd40bf17ad269d5f5457b96442f7f85722bdb16fa6c899", + "sha256:d1ba00ae33be84066cfbe7361d4e04dec78445b2b88bdb734d0d1cbab916025a", + "sha256:d39fc4817fd67b3915256af5dda75fd4ee10621a3d484524487e33416c6f3543", + "sha256:d766a4f0e5aa1ba056ec3496243150698dc0481902e2b8559314368717be82b1", + "sha256:dbf364b4c5e7bae9250528167dfe40219b62e2d573c854d74be213e1e52069f7", + "sha256:dd19608788b50eed889e13a5d71d832edc34fc9dfce606f66e8f9f917eef910d", + "sha256:e013b07ba1c748dacc2a80e69a46286ff145935f260eb8c72df7185bf048f502", + "sha256:e5d2b9be5b0693cf21eb4ce0ec8d211efb43966f6657807f6859aab3814f946b", + "sha256:e5ff52d790c7e1628241ffbcaeb33e07d14b007b6eb00a19320c7b8a7024c040", + "sha256:e75a2ad7b647fd8046d58c3132d7eaf31b12d8a53c0e4b21fa9c4d23d6ee6d3c", + "sha256:e7ac22a0bb2c7c49f441f7a6d46c9c80d96e56f5a8bc6972529ed43c8b694e27", + "sha256:ed2144b8a78f9d94d9515963ed273d620e07846acd5d4b0a642d4849e8d91a0c", + "sha256:f017a61399f13aa6d1039f75cd467be388d157cd81f1a119b9d9a68ba6f2830d", + "sha256:f1d8a2a57b47142b10374902777e798784abf400a004b14f1b0b9eaf1e528ba4", + "sha256:f2d32f95922927186c6dbc8bc60df0d186b6edb828d299ab10898ef3f40052fe", + "sha256:f319bae0321bc838e205bf9e5bc28f0a3165f30c203b610f17ab5552cff90323", + "sha256:f3c38e4e5ccbdc9198aecc766cedbb134b2d89bf64533973678dfcf07effd883", + "sha256:f9983d01d7705b2d1f7a95e10bbe4091fabc03a46881a256c2787637b087003f", + "sha256:fa260de59dfb143af06dcf30c2be0b200bed2a73737a8a59248fcb9fa601ef0f" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==7.7.0" + "version": "==7.8.0" }, "docker": { "hashes": [ @@ -2099,11 +2117,11 @@ }, "iniconfig": { "hashes": [ - "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", - "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" + "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", + "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760" ], - "markers": "python_version >= '3.7'", - "version": "==2.0.0" + "markers": "python_version >= '3.8'", + "version": "==2.1.0" }, "minio": { "hashes": [ @@ -2250,11 +2268,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", - "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" + "sha256:0a4ac55a5820789d87e297727d229866c9650f6521b64206413c4fbada24d95b", + "sha256:c8dd92cc0d6425a97c18fbb9d1954e5ff92c1ca881a309c45f06ebc0b79058e5" ], "markers": "python_version >= '3.8'", - "version": "==4.12.2" + "version": "==4.13.0" }, "urllib3": { "hashes": [ diff --git a/dbrepo-analyse-service/app.py b/dbrepo-analyse-service/app.py index 1a2a058048..a0329d32e3 100644 --- a/dbrepo-analyse-service/app.py +++ b/dbrepo-analyse-service/app.py @@ -1,20 +1,17 @@ -import os import logging -from typing import Any, List - +import os from json import dumps +from typing import Any, List -import requests.exceptions +from botocore.exceptions import ClientError from dbrepo.api.dto import ApiError +from dbrepo.core.client.auth import User, AuthServiceClient from flasgger import LazyJSONEncoder, Swagger, swag_from from flask import Flask, Response, request from flask_cors import CORS from flask_httpauth import HTTPBasicAuth, MultiAuth, HTTPTokenAuth from prometheus_flask_exporter import PrometheusMetrics -from botocore.exceptions import ClientError - -from clients.keycloak_client import KeycloakClient, User from determine_dt import determine_datatypes from determine_pk import determine_pk @@ -100,15 +97,19 @@ template = { }, "type": "object" }, - "ErrorDto": { + "ApiError": { "properties": { "message": { "example": "Message", "type": "string" }, - "success": { - "example": False, - "type": "boolean" + "status": { + "example": "BAD_REQUEST", + "type": "string" + }, + "code": { + "example": "error.dashboard.create", + "type": "string" } }, "type": "object" @@ -149,10 +150,6 @@ template = { "type": "integer", "example": 4 }, - "dfid": { - "type": "integer", - "example": None - }, "enums": { "type": "array", "example": None, @@ -188,7 +185,7 @@ template = { "info": { "title": "Database Repository Analyse Service API", "description": "Service that analyses data structures", - "version": "1.5", + "version": "1.8.0", "contact": { "name": "Prof. Andreas Rauber", "email": "andreas.rauber@tuwien.ac.at" @@ -200,11 +197,11 @@ template = { }, "externalDocs": { "description": "Sourcecode Documentation", - "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.5/" + "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8/" }, "servers": [ { - "url": "http://localhost:5000", + "url": "http://localhost", "description": "Generated server url" }, { @@ -219,7 +216,7 @@ app.config["JWT_ALGORITHM"] = "HS256" app.config["JWT_PUBKEY"] = '-----BEGIN PUBLIC KEY-----\n' + os.getenv("JWT_PUBKEY", "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB") + '\n-----END PUBLIC KEY-----' app.config["ANALYSE_NROWS"] = int(os.getenv('ANALYSE_NROWS', '10000')) -app.config["AUTH_SERVICE_ENDPOINT"] = os.getenv("AUTH_SERVICE_ENDPOINT", "http://localhost/api/auth") +app.config["AUTH_SERVICE_ENDPOINT"] = os.getenv("AUTH_SERVICE_ENDPOINT", "http://auth-service:8080") app.config["AUTH_SERVICE_CLIENT"] = os.getenv("AUTH_SERVICE_CLIENT", "dbrepo-client") app.config["AUTH_SERVICE_CLIENT_SECRET"] = os.getenv("AUTH_SERVICE_CLIENT_SECRET", "MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG") app.config["S3_ACCESS_KEY_ID"] = os.getenv('S3_ACCESS_KEY_ID', 'seaweedfsadmin') @@ -234,41 +231,28 @@ app.config["SYSTEM_PASSWORD"] = os.getenv('SYSTEM_PASSWORD', 'admin') app.json_encoder = LazyJSONEncoder +auth_client = AuthServiceClient(app.config["AUTH_SERVICE_ENDPOINT"], app.config["AUTH_SERVICE_CLIENT"], + app.config["AUTH_SERVICE_CLIENT_SECRET"], app.config["JWT_PUBKEY"]) + @token_auth.verify_token def verify_token(token: str): - if token is None or token == "": - return False - try: - client = KeycloakClient() - return client.verify_jwt(access_token=token) - except AssertionError: - return False + return auth_client.is_valid_token(token) @basic_auth.verify_password def verify_password(username: str, password: str) -> Any: - if username is None or username == "" or password is None or password == "": - return False - client = KeycloakClient() - try: - return client.verify_jwt(access_token=client.obtain_user_token(username=username, password=password)) - except AssertionError as error: - logging.error(error) - return False - except requests.exceptions.ConnectionError as error: - logging.error(f"Failed to connect to Authentication Service {error}") - return False + return auth_client.is_valid_password(username, password) @token_auth.get_user_roles def get_user_roles(user: User) -> List[str]: - return user.roles + return auth_client.get_user_roles(user) @basic_auth.get_user_roles def get_user_roles(user: User) -> List[str]: - return user.roles + return auth_client.get_user_roles(user) @app.route("/health", methods=["GET"], endpoint="analyse_health") @@ -300,7 +284,8 @@ def analyse_datatypes(): return ApiError(status='BAD_REQUEST', message=str(e), code='error.analyse.invalid').model_dump_json(), 400 except ClientError as e: logging.error(f"Failed to determine separator: {e}") - return ApiError(status='NOT_FOUND', message='Failed to find csv', code='error.analyse.missing').model_dump_json(), 404 + return ApiError(status='NOT_FOUND', message='Failed to find csv', + code='error.analyse.missing').model_dump_json(), 404 @app.route("/api/analyse/keys", methods=["GET"], endpoint="analyse_analyse_keys") diff --git a/dbrepo-analyse-service/clients/keycloak_client.py b/dbrepo-analyse-service/clients/keycloak_client.py deleted file mode 100644 index afa36a1112..0000000000 --- a/dbrepo-analyse-service/clients/keycloak_client.py +++ /dev/null @@ -1,37 +0,0 @@ -import logging -from dataclasses import dataclass -import requests -from flask import current_app -from typing import List - -from jwt import jwk_from_pem, JWT - - -@dataclass(init=True, eq=True) -class User: - username: str - roles: List[str] - - -class KeycloakClient: - - def obtain_user_token(self, username: str, password: str) -> str: - response = requests.post( - f"{current_app.config['AUTH_SERVICE_ENDPOINT']}/realms/dbrepo/protocol/openid-connect/token", - data={ - "username": username, - "password": password, - "grant_type": "password", - "client_id": current_app.config["AUTH_SERVICE_CLIENT"], - "client_secret": current_app.config["AUTH_SERVICE_CLIENT_SECRET"] - }) - body = response.json() - if "access_token" not in body: - raise AssertionError("Failed to obtain user token(s)") - return response.json()["access_token"] - - def verify_jwt(self, access_token: str) -> User: - public_key = jwk_from_pem(str(current_app.config["JWT_PUBKEY"]).encode('utf-8')) - payload = JWT().decode(message=access_token, key=public_key, do_time_check=True) - logging.debug(f"JWT token client_id={payload.get('client_id')} and realm_access={payload.get('realm_access')}") - return User(username=payload.get('client_id'), roles=payload.get('realm_access')["roles"]) diff --git a/dbrepo-analyse-service/determine_dt.py b/dbrepo-analyse-service/determine_dt.py index 8df1b7363f..722131801e 100644 --- a/dbrepo-analyse-service/determine_dt.py +++ b/dbrepo-analyse-service/determine_dt.py @@ -1,27 +1,24 @@ -# -*- coding: utf-8 -*- -""" -@author: Martin Weise -""" -import logging import io -import pandas +import logging -from numpy import dtype, max, min +import pandas +from dbrepo.core.client.storage import StorageServiceClient from flask import current_app -from pandas import DataFrame, NaT +from numpy import dtype, max, min +from pandas import DataFrame from pandas.errors import EmptyDataError, ParserError from api.dto import ColumnAnalysisDto, DataTypeDto, AnalysisDto -from clients.s3_client import S3Client def determine_datatypes(filename, enum=False, enum_tol=0.0001, separator=',') -> AnalysisDto: # Use option enum=True for searching Postgres ENUM Types in CSV file. Remark # Enum is not SQL standard, hence, it might not be supported by all db-engines. # However, it can be used in Postgres and MySQL. - s3_client = S3Client() - s3_client.file_exists(current_app.config['S3_BUCKET'], filename) - response = s3_client.get_file(current_app.config['S3_BUCKET'], filename) + storage_client = StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']) + storage_client.file_exists(current_app.config['S3_BUCKET'], filename) + response = storage_client.get_file(current_app.config['S3_BUCKET'], filename) stream = response['Body'] if response['ContentLength'] == 0: logging.warning(f'Failed to determine data types: file {filename} has empty body') @@ -44,8 +41,9 @@ def determine_datatypes(filename, enum=False, enum_tol=0.0001, separator=',') -> for encoding in ['utf-8', 'cp1252', 'latin1', 'iso-8859-1']: try: logging.debug(f"attempt parsing .csv using encoding {encoding}") - df = pandas.read_csv(fh, delimiter=separator, nrows=current_app.config['ANALYSE_NROWS'], - lineterminator=line_terminator, index_col=False, encoding=encoding) + df = pandas.read_csv(fh, delimiter=separator, lineterminator=line_terminator, index_col=False, + encoding=encoding) + df = df.sample(frac=1) logging.debug(f"parsing .csv using encoding {encoding} was successful") break except ParserError as error: @@ -98,7 +96,7 @@ def determine_datatypes(filename, enum=False, enum_tol=0.0001, separator=',') -> logging.debug(f"mapped column {name} from O to date") col.type = DataTypeDto.DATE continue - except ValueError: + except Exception: pass max_size = max(df[name].astype(str).map(len)) if max_size <= 1: diff --git a/dbrepo-analyse-service/determine_pk.py b/dbrepo-analyse-service/determine_pk.py index b0ad8cbf76..772c356fdd 100644 --- a/dbrepo-analyse-service/determine_pk.py +++ b/dbrepo-analyse-service/determine_pk.py @@ -1,11 +1,13 @@ -import json import logging -import pandas +import math import random + import numpy -import math +import pandas +from dbrepo.core.client.storage import StorageServiceClient +from flask import current_app + from determine_dt import determine_datatypes -from clients.s3_client import S3Client def determine_pk(filename: str, separator: str = ','): @@ -14,10 +16,10 @@ def determine_pk(filename: str, separator: str = ','): # {k.lower(): v for k, v in dt['columns'].items() if v != 'Numeric'} colnames = dt.keys() colindex = list(range(0, len(colnames))) - - s3_client = S3Client() - s3_client.file_exists('dbrepo', filename) - response = s3_client.get_file('dbrepo', filename) + storage_client = StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']) + storage_client.file_exists('dbrepo', filename) + response = storage_client.get_file('dbrepo', filename) stream = response['Body'] if response['ContentLength'] == 0: raise OSError(f'Failed to determine primary key: file {filename} has empty body') diff --git a/dbrepo-analyse-service/lib/dbrepo-1.7.2.tar.gz b/dbrepo-analyse-service/lib/dbrepo-1.7.2.tar.gz deleted file mode 100644 index 12cef6f73928370726f75f4f3909aa6510049543..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49700 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 diff --git a/dbrepo-analyse-service/lib/dbrepo-1.7.3-py3-none-any.whl b/dbrepo-analyse-service/lib/dbrepo-1.7.3-py3-none-any.whl deleted file mode 100644 index c1a74fe8c7e3f602651db9b6c30a5f7dcf17d97b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32568 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 diff --git a/dbrepo-analyse-service/lib/dbrepo-1.7.3.tar.gz b/dbrepo-analyse-service/lib/dbrepo-1.7.3.tar.gz deleted file mode 100644 index 7c13793a4936d21d621548c512ca88cfbf914716..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49697 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 diff --git a/dbrepo-analyse-service/lib/dbrepo-1.8.0-py3-none-any.whl b/dbrepo-analyse-service/lib/dbrepo-1.8.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..a285fef8ff07eaeffb5a1dfbab34dd395c0330d9 GIT binary patch literal 88139 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šlGb7gmLWPCSy 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˴@-L3iT?xh&#&)r;io13r6-SA}<y(qs< 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 literal 0 HcmV?d00001 diff --git a/dbrepo-analyse-service/lib/dbrepo-1.8.0.tar.gz b/dbrepo-analyse-service/lib/dbrepo-1.8.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..4b3de54c835f7085ce9546cc519400bdbc9480b0 GIT binary patch literal 97612 zcmb2|=HU3|^e&z0e@aqOYC*oPp`L}FfnG^s5yP9kud8mmZPJ)^zluxe>`AqqVy<^n z-K#CCFAB*PFX~nfJegwiFQbD&wa2l6(cxsz^!cx9p0j?NJa^SA?R6}gU6YbOdFu$h zc(-cZx^*C&mt$u3|M%LTFMD&N%0Ap(T(j+l`uq3SuDzT0tMB~w?Pc4__Zi#OZf`kn z(Q}63K>hdJy0SQ_!zUzfoqa1_y_=m~zwSo;%^Uv{tINyl%ir$4`rQBj#&yiqPx5oj z<IJ|1?XTYR^M6vk{QtcDH|}5hf68+I-tUi&zPoqt+q;9@GyYpw-`3w}{B64B|Mu_O zgm3+Px@_-%FZ<r-3jfRbE`6#mSN%U->3_M&&;7i{`M(!z+&byc{bhgbU&?GfuXnrO z@IU{zZ$(f3pF8;No!!a*Z|~-6w0*8G&u4$Le{Jfy|M?;R)=OTtTRZXQ{;j>j%k!%j z#)kY8x8{(&Z(Jr7UHbU_GIO)$&W)S5Zk-<e(yYs^efI3{-@o%tK49|aLE7ci1&7X> zuDOvLKPOIV?dIgiFaEsQary0>`LR;#&+GTBK3#TqN5=lW7WVtB4jnJmD!sGwO<YM_ z>_g$Kgx!fUx0#O@D>>-ptSQX7R@r~8_rtZ4*yN1a^8_9Jm8~V(+FnMw-T$r=c3R>` zqaokhU5uAiKddd3m%m;a9C5AakVe6}<3H{gI3ISJuq`#lzsGy`d8wOi-<a!binISD z{9yj^(7|%Qz1*$1DMwE82X%b?dr_qzFHiaK{_k%NFicsnNZ6OBSmy4p#?R~rAHPkx z+L3qm1j7RJMo!Va(ppDeE>KLkKV#j+Wy^v+dTie)B<4$}&5sg{V31s(lYgw8NyhOw zpJawYhRBb+y9UhBe+oEXT76@i-)FnQ`N7?S7u9=I<1XwdUle_fkNJi{+;7H*hEnXx z@)mA^p?o_e7MI>TWmT$bvdXVF^y~Y#3-}I;AJ9+~>N~#gdhZGIUury7(;lzg5bn}= zKw{Rs%H+on6z>$=+5fcTYVYsp*}M1``xp3TMK3?IxA_js+7Q_TEp6(1O5JW;Iv~kl z>Rxu?__Ec%qwinmn8W`hu|=G>S9wBQgMJSqPjEu}BG-&hx4t!S)Uvl3UE9^RT<X*P zKOc7mw(k0&8?pZ7V!r>1zVBqRdvaOZ&dKj#{4JdDx}}5Tfo;j52@>;u^!PGKO%qui z%e2ML$8kp7VU^{*Ow|eOj3LXnGcWq#&SLmQmwi{-r8Pp#Zz^ibeU>zMW>nOr>^OJ9 z@r6O(Li>()6ZbkXaWp3}em#0;aa)D)8i&|3{~L>q`Ci!abZ2Kjdi>|t{R3Q?SA6pi z%{y4o6FW=3`GEYP)Bo1KWW1Kt#1LMgIL(CB`J(Xj|1uKG4xVs6d-bvGlU$WuoR`y{ zJZSmEX?gFg^aGX`%r<?c5!2%?T((x*>zvbm_U^)5%VmPTZdKdszc%-4E-c{Z=S-gD zd?GW8%VOS(wmA$vC3~WsBPt}G&3(D!*;egm`_-nu((s+g_**SqHTV>(;@t+GfQT-0 zH%*N<0+DAmobEb_2;KOkw(0`o@5z=jj43NP7Rlb26MAIQ+KVUHPRvg*+WD{6H}K&N zzB$$l9?i{Fa6I%?g<YX1N9x19&(kD$Ssq<a>u7#{F=UGXTakSM|Kw1Pt~T!HhyJd; zy#HzoBTpEM6+>ED!hK7VDJPCPNZI-GNNc=de<W^lusw3V?;gV|MP(dwoUWKN&Uk-m zNki7T-p7nnzRXzubmN5J<{MwuOM8AQe5GjqdE??|JFjuPS@`nA&&>Wa4Hm2~o$gB9 zYJBULAXg#ZS#bS;?g{mImRquuF31YF96a!5@}w2nRzX6hts+6kzp-as=?|DvEIZ%w z(Md~%<!jjdg(mo0Ec8~DyAhG&)6uS**V!?x#!Y$^>-*0W)@M&va$5PGIU~H|Z9xt1 zre<#b#Bzah!DlUU^SM|$o>ZJ#Be2-#)w+P_7j0Z#sZ9NU>T;P4*&VuS9xt7<&HP&G z{A-obKKH#h@=VPUS4()%Y_RUJM$Bxzj~8njzS<bs9g|zWuW_@3`mVJcttDMfrjZ^0 z688p(dfr@mxZ%HupMs#Qxc2UZAgAnErzR~6u;5g#mUyKkQ}XVHo9HEV*^}NI9=e}B zzD6`N`=!hJ>?D<AtWsMi<|RD-c3d&DvdKcF^5oeQ@t%(~ucp)sxpaIF{h(Z;Dr5O~ zqdi~ZC%&@}l)LshM7ke(vdQ`RG3A^5YdVr$TFyRk5ea*p?vQ`^!t<<TTiaIQZ(HAN zo6#8TD>t`6L%yAJ!7*Kh;#_9?#*-P7RoIu5T4V{eeS4q$KwkXdx7r2f!PhfBWL@s( zTr{`sqw=g!j&B}i@eyIip3cw=Keu{jw`A_Dmq9n#bTczpi~?F1&ZQik7|U=>@r#ho zo{6%IsVu)6UlgycX3yn4|J^L(iSrA?e|H#GtM542I@#XvZpJ1<j+`G)8xqT(e-E6n ze2ZoLe?^Clx0<93j=P;WuIah_$j^)#-qOad11prTv$#$7XGmX`<y>`$m%H}vve`d_ z#3pZ?(==n@InQky7;jx=d$G3D>ASyyRp^Seex*4H8=iEubh2=?<v4~IyRBJ&>qX;E zzTUgD%FQAxnG~bke>XGUs$9U5BYs5xx424|yh~2P5}5~WM%%eO&veXF<h&ulx#C&I zlSf6Dzb9PiJf*SQBCGa#NyEK0Ypz)?P%>Q<9Dd4|KP_KkR-^OgVu6M)g4$BI1$X(+ z|8aE#+v$Y+n|Hdgd}J5v-12H=)TX8v0?`kPa=Bj^E9>{kuow0_E0)9_e!)}l=V_D% zi)X8iF1u<`o&?vk-p=)&CqA}Thid9%MzhyR<Ov+yAYEJE^G*0SuX4WBx=Q)Jxg5J+ z-7@##WH`$5>6Ds>$5AClcdJH4xlc>CWi4ONmaeo*^;ojUG%b_EJ{v96xh8w+xc&4I z<mNR!zT=c|nCN9b3)jLgEbC`1G`OKtp)tchNIdFr>7t`92jdR!*id>tpxJ@{Z0DpL zPfeDh3xeBxedI(VDos=}%$PP9a#%i6-jeZPy}oHt&CN3*6@4nJS1%P1blG_A!nT_l z{59g&TzvL(-z?psc0JVe+GWFnTfC3DUu^u!#<Q9^)@9+++53u0JLZSD`(ENdIrYeY zHB+sGxNL)&kKJZo+R=CDt99`!mJ?1JY6@(g2yd(6G5w(NNX0vO_KuSMib*%t%(Zy3 zkIiy}@{EMiMDuL#iYQqIx0B~G8&n;R3Y5-C^s>HYS$;iGC(7)WZ|T_?3SzxiN*>oH z>vizdOj0t<+iCbx^OnLBo%uXb7mRNBs;JK{bX+1beZzyvvc1A*S1r6S>G65-I*Ti> z)1Tix7g#N;c7J)ti{8t9haDzIH!nV~=gX3EW{OB^=AJFfj$FFjVrZfpm8`XFv+>C; zr;{%B>#y;MXQ@a=xUb;;YE*J{*2!fBYO$R+7w}#;bB^(Q8CMnOdN$0UhvCIShsz=s zT2b0uM|WuH9C=v(`jE}BlwW)LtQYX4FL=VU>WuVK#>;PiJKFlD2H&WfHNAU1uh9w< zk24}h3JI(y*tn&5*6_Z0;?mdK{?9VPU~yvN><t`m?`;Z|IJMqn=GKpDj~jKDE}hJO zO(5%ImzbA~tlf5xB;TZcl`GABP9J*DxURgU?@E;5iej#*GdWA${tB=;y%%1){KDSE z$ZhGp?T2!D3ws1~a{j8f8EandIB=+wG3CS@pC@aZOocZyHx*9$FOm4^o34@Pk}%Pf zZId?7lVspLKHW^@2FLsMKBHYvWVS>lhvl`gu8*mfjCNZinY;dkd`d!a_~kT*?xUXP zf?U3zJGs*3tzyR6*~<ky-i96BvSG`vi_?9UnS2U7qpKXQ)j8E6$KhM%#>3@IH=;r# z8xs%j_~g*tW|Hwuo#9G(!B219ENPWX`wcy#CeAYUE>3>BYu%Kk{Q{HwWYS*6zP|T7 za$4G*GfF0=ZHc}Hm#+%#?qBn7rhKC6&T8jhPj97n8_n5fzGaWIsnd$q<N)@Cxi@o^ zIhHq?smKUy)|=5RvO;6Ji}{9S%E#t^kaW^E`aSvXbr&1XIL`?O_8Bs7TR$bH`orD^ zW`Wj244i>FS!G+EPJYre<K)`69EuNrwn-VsA2DmQblE?1OU8xQsqE!1E<d+tR6lok z&4z@i#=_Xjxj&3dH`L2p*L>#?t>Q>-(wf^QBC_B9$lJ^#Y%6%m+~uuKv^(ipT?n52 z>3r8sm1Dix%{-z9G`=oMl(AOSom+6ZEa4B=H}wmtO6rX+U#kv@ZP@bZnCdhkW|OWh z6@hUZc1ao7eRpon5-oIH?pV~hYP#F^)SQCs7uT64?!ULo#A^EMW2>*FJ`WQ3e%<f; z*`J};e{3x+ylC~h?AG*SKU??d*8jVeG52rUpDUKuY{kbDtq;t<U@f(3o`p)d&RO48 zX#zhzeHE9hZ8)JCbg@apqdP(&ZTn^0%<GM>(xvBazAip@v;6JlZ#U=NwaAT^*~_RC zz1~WF?z{XWPV24jZvLjqEuZnx?A|uLgahmRqQsBgUfsR@`Sjdnxi|9`c3X2d{O4$} z+Va}L+BhdvB3)c!=K*<EzFE(&JY*~o7gPKfEEN8Ex>0_zM3ZmJUC~FkI6XJD*WI6Z zIz{cuPdn|(<gdNgz9dcic<(gZA2F4qUg~|7Z+C2|yyti}yW!_!*B16{X1SeD-mu6d zE?v7b>WH71LBNvTJT||Nl^*!@>h{)Mciyf$9<%e(XXB~&SDy)Rn7{9J%w$LR6L%Nb zJH3nMm>}q;(6YsPo~`|iFFh;yOHOqt7Rxf7v1KyZ^6bK%&fgz4ZsXt#ILP?$#Ie1l zx!)z#L?pK5XfyIkJiC09*Ye(q2^U@zGw-<=E4#tA_{yW8@W<;4ixzrck@1!^PV<-P z=U=84UfS=twZK0nq4jQA?XeB!`||HvuX|_xhr{cpe6P<Jp+&w1Zb#UcJ?>*(*6UMl z@NG(=vzLLg5KB4Zgv!z?g9Bw8J<T;8Y*m*8kKdkfuH^Er;*7~92M(JjuoWnEJYc(L zGn>)gq$f<ilqty3Bd+C6P*>D!k^T1;y_B23?&R4+hu)ecwtma6onPsA^0MUZ9QFCy zH*%S0KjG}KI&|U7FSFN2I(9nl{4!hM{!M3oXYVP_Jrl2r?vVbs_4M9=l<hf-ZaAKv zp1akdzF^;nuTzDOZL3ab{CI5t@u>pQUS3Utwp-gm|7$EdTD<kHKxXmhT*0D8pN?yI zOqEcrIe95?w}#guZU2eK*zTzJWUHkgcw+2VVRpaMjM-EAwA_KB)~gJsZ=5QaJNw`S zm5B!HR7J0r$gwxx(tSKHdBVvJTE~xS6)(DWx$g06PII%6b~O)1*Wk=E_p|S;nAs~N ze(b>8&B<3*M<y10+4uFEuE@(jj|JK%>|s?1RJW;d<iC5kyyev1JKl#r?3yI{%BDx@ zov%RJR{qUu4XG6>d!$OYPLj9Smfgyx!7<~F&x`oSdP{ld?ELrc@2;pN3(}jicXuYJ zO<GlRb@|#Q(r#aGeAhCHbC|t&(Z~NQB)3E@PtD?Z##+EM<A)IcKC25?wrw--E>@k> zVDn$a+$l5gya0nGqv%}$^A!=9@6<(u=A1Ix$EfGrJym!2i8C^ssXE)j*5`_Da<X2+ zG+97<9dpr>9d43)`gSSp`+TxFUcfiO#{J##;!~Zq;V<U}`tcdRxc{inG?{Jd%pZA7 z^S>XnJ|z9Y=gp>l%OB10)X6<7l0JWzoIqB{#)h7qYyRfvIIVFH5HR?9^zQRRJ>@q0 zcvLTHSbEK}xV7s3ezp9WlEpVU-OQ8^zPs$?SIO~(ZGlhdsfZVq+t~Xpqc88BVpzrb z#h}GedqR4n{e?ebZRQi-UfPzd!J($UnXQ6t*R#7ljSml~Fl>FGs{DJ$c9)y46L-b; zhF1K2_2>MnKhHtvbLpJ_mA^0dzi_dPfAw?z+qZZB?mhDJ{N2BE*IxZOKefj1?TIaC zPTYC0?UtfMc6D}o!Vg)g9`kEYq?0CXJ^fL@c6s};kE^*Wa`()2*>1;nq4BP)&$W9$ zoU562uR0rTb;`@OY~CQ)`(E~T_Kd%6lDSDQ+B#?3{LSEDJEg|FjnlyFdX$K2RmPmA zsa#@L*Lzg{D_~A;yz87CTOV$|EBx5{3*UBqysl`Qe<9=VcD|4K*>`kqW*ATI_;ti5 z%;@_)HoIf?IWe(w9z<nj7|%a`XK%;Wa+&)-=B&Tid{$7<`eGTovc2=w7rnwepOq$; zWLt$LOscgun48di?551(g_(H~*QIY{bvQnre6}$)ub{tr$IgwO8<!-?oKm%y*r=hA zZGTfZA|h(xgC)NVuN>j1c<dAwX?=)Q<XAp~wao4EZLj+?a?3cU$h04OxNu{7j>P(g z?qt{9|2T4PI3JlM|L21C;o@WK_)3D-v&rt`Jo8Xs?OowS2ItIkk3ZyY-?&$Hb&;Ku zx@y>tB^}W^C4AGYB@S1VF*LX9-*}{WC*iD&RDE`k@$oFv9fe2C1kH9$7Ca*pvnlV< zxpr1=y_4J5C#JH@*eu$W^;KdTU;7rPjfXY<L>DjLxO;Amb&=hymFdFVv9JF=DPHh8 zW0DpR+kVM)vi=FaFTU_sDs2B%tG#S*)sgEV(mNJJNB{Qj+Y@0e{~_3`_IjfA>Mu=U zD(@rae!u$j+3C3C^37q#B^b{|W_L+O{;{;Yb-^(8any{t`y-g&+~X|Ly0G}<2}M2m zjgcEQyA(Rgn`W>+b)9&2*2cDT4doUZu1_C+Rhwt|^K^W}TnFEs5~BOIeS3JAz2wDD zhpYdOComnnA#q5cU*jFW?7f&G=aXAaZ_Q-Z{4Q8I^Sgz};)a?Z@jOS)ColgmI8|}Y z)cP&Ta#r3;l4t)}Cb*Gz%Y@?QkBsSWvS%24Yj-}>ow(WUs3c!6x57n1=}57=nJd(@ zvun=GzI9mZ%&dv;D*}sSC#W?|=e;-2?$c}21nnbNO%5r3m7d5u@#6*N5BWUDyYepj zO8of#aF!{915eW9V|`Uu=E_}L$;I~4GOYOSy-jiN-t4K_`0?;He*2s^xqB-%ek>~Z zaQIkW{qJ_i`tQ5;@7=yXPTz|2bkwnJaXI{P-{RlM=G=I8?%=U|2mgIL_Vryt`r`ce zvU~2_mCBjjy!X+zf*{lFuiRezNi;9d&VItXDvJ4yb)DVUUv?dVk#e$Xc1O29tm|g3 zm+EaROy89}`{>r6^O6HESkHUY<hG3``S*g2`-?aHJ!BAf`-t=7?8U#nl~k`zllcGr z|L&VI|L*^vZkqfi$9%z_jazFwmPt4Nc=jbcBdvN_TG{7WH)pP#**qt0!NT(0Ca;dE zCs(s~JnCzY`!UbAbMXN;|5TOl&6ep|e|iMj_9gt3DE_>uhU-DfhH1w?lzy4a`eJ(a zI{q5__F}gM^8&V-U0;8eL5<V!--)af?*#Xo+lO1c58+ci``XRbNWf;Diu-~|=U0n9 zF<W!^_==$8j=v5ajBa-0DCV2{b^faNDo?(f`b~11&(`XDs`ae9+e+`UdAsr~68k&1 zrkP9J{$kDYIX~l=T>7>a3El~1zH_RMxSeQPu*Boc7fbKET-%b~24(D&oml%p@tX6B zGc`{vG|paMCVguwze1<=yu!Ec+uiQ-WY*8?%M+BJsZ*l)<l}Z1&zgjKCf>7;3OY~D zRF`67zB1W5QkbuVC;Q9$oA=7@f7!7-KZ)n#gjXF&vMZ~4ZZe)e^N`!|?)L~*iL`H% zzvUb`{C$qwf(X5t=QirjIH#7G@wmS6sF<5{exdXfr~K<?2W}ky?0MwA0Yln+r*plp ztWUph|18D8KKt2;n}4{K|FD_uJt)2Is>%sd=UeO#n;-T%XB0BWE-UY=)pz7(kc!}( zvaQWYflHx@-TY_SJ*8?n=KG3ykM_FdMRBMcTP(fDm+8n+9XGv=caNKH)nq&`#w@P; zQQH4oLGqIbmOW<=&1O*XVK(_9&V25l%iSf$(QBq>)N3ers+I5PY?ja46r^~zNx5#C zjL$={W5w*-jxJ)>cz5xGyV0z-w~krv>$DNEkf=OqW|#B+9A{0xm_hl55=94_4_yB? zS2{F#8~QeH>{gT(v1?OT>Dju!Khf(pquacj*Z2K5T(Vfx!YRjJ=n1ExJVz5hZ^PF{ z_Ki(tCAE{2IOcSmY}?xXEp_|#s@pHOp6|Oqul(FDuVTZhT=O?|F@-Cw!l%FO-h3@{ zwx+??Ke?|zeY*a+J9*ibE1yq)yLgp#ird9K`>t92{i$nPS6mm#wnpdww?9m$-plW~ zaZygKAh7lEjuX%Km+0*ZUn|TvhcPz2$*&{yH0RB06Y7f(^J{UjHUvq_N$cskdKQ`I zNgZSVvg2%~{bzNVYf}HakG<ur+1i}NyYw69q19c}Io7!~*`5|_eC|~gf8YTBSwXMo z-cbq{e>EExvn;C4eQRHM(k4UVebl_x+xL#K&fqFrpceV0rBkx)(Sh$~<@FXfs&4M+ zZOePReuLIe>F*EzlnU27>^?4=5nBFfN``Pwi@3G*&fax<_OAYuzxwa|(0|*ns;B>d zzUZ!%U9NfCHKXtK+v48jyjA(UUsgtD&A0k#A0v0BhUeX!8eR5uS}Y#s(;cbdb~8f% z{MY*TKl14R{dex(y?Z~pvT?uZfBo&N<dXlLFZ(b2XZPk^|1-D#-#+R8>c9K1rr-Ru z-}F!Ik!!NO7oU9m{{P$e?|eeP>)Cflul_xM+NX!!q4rbwN^CR_?Qa+U`Q!e=PaC^S zb8{SX`sT1%Z}o3KSQ%)urS+f4wB`k}EOi^yt{=Xh_TtM-=4GcoX_;u>4?nx1pJ}C- z)cx?6Z0)^oW&ik{F8=m_p`PDR`!ny9)mLs_+PhMJ>E^vh6IoV2Ocefgl|%Woy!%$u zFMpH!*p7Z_4=JsktGes}kI*Yw{}%=ym~B_r>g225_H(`8a<S_6!X*qnVlR5LBwnN* zV##$rqj+?V&za3fK6(D>Zn$Tewk>((xjDiSF**JQ7Z|qv{T5SIH^qMD@6|aISM^w4 zG+>|M)WkS7_C#6cMjo#Akh44Z{`8k!*!}fmj=)5ZFXHm1J;m?L7q8xaW+V5~Yq9(D zcm1f^JMp5(B#nzAcBgW<?z(>MF=NQ}shQU*Rv+3RS1x_DKzO%R=dmNnYZdoSyYbw! ztli%4n$R4v#hN^mFPfZl(Yr1&QRWk$qTrYEkLT21t?pBa(}>wBo^8|Jck%VZy;6JQ zOt;*1JT~Q&!%n64os;4fZ}$J06uEcRhJ~lH>{rj1Ji4hW*4XTyTRdNC<(pFH*UD4A z9A=v@_u|~@u%tf!2`*7DqtdKZxVUaPwy(%y_g-B#$Fa`#E_>9<g|8(yuR8L3@)1|{ zJVC#Y+fs|SNl(kSd7L@NF6l*=fMDOlu3H7Z0g*j9ik&;9cLq)G2?)0FkM4V@n_Q{< zL6bG&{bF0iw3U-3@}u~kH89t@S00?)GxMNV(xl*Hj%<v@cOJ8`=4K@KmH3;jNHMHF zx6y!s``am#b&2z8pWM7|TgKXa=B0{iAWyZ3Ta<HeN}@~KR3+c3HEXT9T~(I(@IC9e zm~!55e{{~8M&I*4d^tZpe60WIjp&RSzYGp9TfuiNes;-6NrB1nUlsk1Y}&kPRnwWL zo7Y9SUvBl?)F9<PX;uEy-C9Pu#+o9pmMouj(lTy--R87Ei_iC@-E*0>Gc?zEwWsW5 zIg@+4mOYkT$$s_5gEKtY+x&C(WM}D!*mrNNI2sw->lw;BBTP`@(&ktmwV>c8`!&nD z3}0_nPuu<A`LZ8Evw!)%wLXz{f0oHbg}jKz4>gvo=s3e?qH$T`K-|yzuz&NX{!jn< z)9R1?^8M}?h5p)CN3-h({hL2G^w0OpKkAqLs7aaebnSf!ruilnTbS;hW3c}pW2a~; zc*#!j>$)xeFTOm_`yTy?^W;CfJL)R4PkrUg-Cwga`uz91C)m<H-PPF8{q?TGrt^38 z7jyjDA}1!(>{=0#V(lt7Epr~n%@fTwf?QLNRw(_8`Pa7oV4_0u7Z3JN3VWYqcb4Xt z+-LqcCn8Qg?7+!WbIx7evS0COmI2?kpsTU><-fkT6CkC3Fk)k9?!hLrYm4lwu5sVG zn!fd4{M!G|qyNjl*?;Hm&8W5i_kaAlzsoxQ(69RP^z{D;vycDJl}~sSAN7CzBl~GP z|M}~@fBcRi>XLQQ*<V>gHxr-N_=*U!uZy&-W0<^uvb*$8@49PIdyeHS*F7zBu*>+Z z<%TOpKkdDDi0a*VYxHem{>_xfS3d^$O8Y--{bL?|dEd9@Y^wu@=g*s^H>-Y|Y8K<J zjal~nZxf0*UngJ8`yJe3Hs`d_zGG77H<-TWD9mtc@O{nK;}>Ify_eg~H15%))T6!s zgMQ1N@tm~epul?-UYGwLZLTg6|7lycXXUy+w@1!(D{jd>I3)O<yLO(OxN6lUIq|nA zd?Wk0=Y<{m`a4A2`_j%sv3kL=IxCgKvn*$5D2Vl32)S~;;HW_dE8on>7(*t{ZF_`5 zCiHKvHT;t{McR1N`?H-MSN6<%A3X8xxhKIBw|=V8+7p)X{Wzn;uc_xw-z+&%*6_UW z<+OCo(v&2wJ==Pc<Qf(|`W3Tt!sF}B7uP!7oqYQ2>C?hn_iSXY^W~f8#&YpeLi(2* zPiuGFxOHH2&xWuo-q%bn)gEvzkbfknXv)IRbu{rEi(6;*{qpoOR@ILyJ|yauu-hIu zIXO_L(OyXVyr@cg_^r%Iv$7NlT|R!|n{%aR&gsU<R<e@C4@6pCtMvK%@m@(>qJ7B0 z>`Kc<*Gpl`jy^wOc2hjkfg|tqKDqlL$zRz-gQS<e{*(Babw$Odd7epiY}3-ce#l54 z(T|F1IsZu7CPjFQc$;3BgUr4VlkMT}?G%n4`x~e5FR!+H_nu>or}s~sz`@^J9{MM; zTK@)roX>}poXLN8EiKiZ;%pyj*WIM`^0uvr_$1$W<H+XYxsR`Qmbd=M<k<W;K)&p% z%-kz$(|&LG5V}lw^)?lKu>j#;CM#6h-WuEd4?6j<+tHQhMEbX<-C}~%bi589oz?Bj zZC3Gf&-@&Bo^R>jmU1i+Fq>~0=kM^`CQxoq%A)gsZcjg?VR5l;@(#D+{i$2u{@i4v zu~TJc$JEb)qO7wXMJIDyTYuZxd>-3$iNIiu)_GTb)}3KHFId0*+`DH5{}lY9kMFdI zs85~E7_oeQa&B#;zKUD?oMY+R&3^Y?y}u{zZGwDK$oW?d4#m^_3LZ@<IXCUVES{|9 zlR~Qhlg`!$zFHKycj-|N-`6n-?vD=y8@1K1+{Af3rQSor?BRc_gISO4owk{oKASIh ztaaXfwR8nd!`Xk<PuSx7t)2Ub+TYcjZ+}PMm$7njnbe;l@W=n+JeFnNLghD&9tYm` zO<>`ed2q$CmNpx${lOEAGc|%QC)gUQy#DC;ELlK%^R%2tXTqP^C47^Az0$BpI(x=F zF71}C0QC(QYRXy9$FcU=R?PR+^;*XIO!w+p6%n(;d2^N-CX2sJ`Zwv|jowg)SfOR& zr`z4wSN%8<wPk|RUA}8=+m<m!G(4JXaCx!?SE>`Ir9f|&8#h~T4&Q?1S3b;Hc)d~Y z^`!a9N&z9cEhP`V*Yk5MUb%VmR#Ev-o>R@=QY%wlWj&ja<=39o^lK|y$@z^2vI3`n z1{_V>>Zs~FM@jAk!_xM|*4&MW79q0kTO4aszCP=IaOKpMPOB9T+k0RA^f%qByGKVY z%|UQ_<KAhHj4HyqPH$NE@#5jv;R~HDzB$+VPC3&Te5U2b0pkQGpPH{%4HnAGIcliL zcX+Z<qQ=^aKevi!NczikPF~l*yOK$|Y@4d@e%aLl-a5TcU5X3ClRCHg+zs&BE?yoH zRPE#{H7$R$;-Vu-s;M8IrThKRKVPb(AYZULbVF^^eeMVEa^I%uPJMKElI~po&S`4* zl5?Y{PP*`I(}JVyYdLNmkgv8{GxN&HVBaSnJ6r<K#i*srl#5(_y7b_m=La|sX*_jr z3X=3UzG%vxkZxrX`N;RcuUnqS#XMc-=|-$up`K{@aFNWsE1`->3#ROdnN=4QWM8_| zLV4QMuF{7tuU2K5?ew-i)v@c{qo=nFo?p{7{?SqY@}Qgi`>E_no#w9`xf&MjX;I8C zPz#?w!BS}1+rZ6byL5AJtT4Q$?zc+EKA)$5%_`;y=^c|ZOOqF`4Zj|jG4mBy)T1{G zw-?qGUa>s4@~^^Fq5F1|jG}eUzW3c@D`U*Q`S#(LlX9O$)zAC&L~+$5!QY0ZmowJ9 zT(;|3hV}`;tdt!-vwS2L99eNGCFjz9uNKpz;=VnmPq+U(=hk`hqDcHJt8DYF?_&;` zzPumhDZA&hfUHl^XU47yZEw?K&)t018-_icrMtFH&h=-u!PdRqsy7%no)h{}dA2da zyFWqTjl|V!7XyFiZm+euyU)Ee#VYRB{6dwuDUo@r!nnkzuDWq~y^gA0{Mk=NhDzMg z$*Te@Pqi*P(iFYoQ+duw&CGx;@1}&7{x(RzYssJeY()y|H^VQVV)pF)8L9qwbF9Ou zz}kjSvqI-NvtR8vyMLRv$>);K?rOLEP81d@mrEMz-PV|+wdu-b?!v}X;mU^}FWzV% zsMr1^vLK=V(*bR}5*Lk#BAtE>!M`QvlAo4b^Dep<exPE9<oAGck8@hB!#DBWf3kSS zq_6(cF2BFtx_-{(4%dae)d6k|GhAHF8XirFk#>+xoFs6>Q*D>cf&;<2r~Yu}uwI;c z_PmtpytPXe+Ujn;OLLt4bmyGM0?*5=SEtQO^ZPtIQs{Eju0G>8HE;E1M(j!4w_mOD zx{sC5#)za3w@peGKCGyG&GFU1dzQw2O;(Wt^Ub#keMS1q_el%$_}yY%E68>_D|}W) zgOrMV#D-iJmI?Y16>qnmeJ@|E&bEJ=lJT?%{*K<o6Bd-3sr{KGxAEni&X7fCYJS*8 zIMuhFyZ`Bya^bs$EN&%ijL#H9Jk6)qu1fS;9c88=*LC1M%Nf<hbyJeO9{)29a=OF# zsN&5J=C?)_OA~CJy$heTbAOs(d{S+R{9L9?qvc!mDrf!T|Es0{GxwiO(#q-sllV_n z9os(tLduM*hUeDn1n(;MJoi!Lj;e&V<_s^3R7t(o4fQ9Q<_aVpJ-~i4e3pfCrvP_@ zR{OQOqTsfLQ+2scC#APn%sS0E`I4dD+EYq9q8lFAxD@ZHaXA$+Pm`lRp*m0c>f-LQ z>{n{+<_?qJrJiM)su||+h4-v<wB(}22X;2w-MtZ}Up7bWn_5}ZGKYXyoskhNM{ang z&R*Dla#E_zeerL+_gKV_oC({NaOrjOD*rv3de<p?&)#_BIosX1V@`@nd%pWfiPa{` zoR(VEfBo@^54HwZoIdx(uY8euTuLcC=JLGhu2~|dHh!+{ZMiD#R>F2>+u8}&6FDM; zGD@U>Jf0n0cXayG@Aghx6W(m>lW}|2yD_m=!|1Fjr>o=X&L*wj6SX?d8*yv*c}Bed zVRO3e{F9Xxv7s%wCaXTY`m^m3`<G9*C#io6%021g8<lD^rK(pbCL*uXBw%HP^zv{Q z+dYSJpUe_=Xfx*OKK`+xkUh=*_J#ECuMcf{#BBCikvmQA-RA?p6E@~wdBx6hCe7oX zm-E@~{OXkxEsA}0mt4D`65S!{BmT_vM!}V+8$YzZ)r;rO@SeFY`q>nl8L6B?hn8yY zvr(9z-*zW6%_f?MrP4_4v84YtoA9R8w-wrxO?>}_zdEb-|M!d2U9N8;&+S}y;hXgI z-5WgKOxH_KUC0>w<&u)(rc=)T+#7!CJUM>XQZHNS^M{0&|HJR?nG-u>O82&TkDGNL z)`$x3-8J9jq5qXL9%lt-Z}tyP3s3jVyPE#c`mdVolA<lkC3UsipXE62zqz}0c31m+ zCB7e5w$C~EL|k?2CYu@EpIzS7xX$yC%bukeF<o}!?9M}<9+edzJfGlt<{4*<_v$A_ z5w`sLiIzN-D=TH%vOix)Q`6Rz<BCoB_~ZL2;~8dULG1F+H)L=eGU}PR=&|3t+VcXD zk*wOQAADTPl(hAzBnxM4y<hRQjkD%F4u4g>bl?8muX`D${8#xk=jPYcBoFU7rhO~< zybgKp?0hG4VOi1NzY?=--}`9W^X<NLmHWz7lMe5TSB_4Y=j6|=c2DJ5+>Ar>%#YZ{ z3!c9sIcNUVGt1=f%#ZvXa_QWO4W{#6c&wjO>odV_=0?Q>_Kgb{HrL6ywH<g-`HTJ1 z4c)`j1On2xC`UY~a+@LGc_7BUL5v}!h}p&aVeJZ|mCt{e=~};GKc_KQi&eF@|L)ew zJvr}{4sDh)^e%QwX+QkALoUs`HhH(9<dr9P8ZX#yxbj>6%I6Z^xt<;WUOAdIem-1k zvM*?EQsdXJCa$vU-}mW?dN<!&qSA8d<4-~Fh5sE+U;Wv|d;Lv?<hFe?48zh=nT@CQ z_g-ETR&eOY+u!dhUbL3ZJ1zf9IMC|BB5BE0pK{;6Z0hn*e!=Ma`EA=-$=QoN7ccv^ zSMSBmGmEl=fB&m!w9d&gHJuun6HzQOWkSs9J^$z2y{lNkcq-I%TUOS6@8Bt>tW#%} z%w4$b$^K<Q3JyZnuPo=K)~~u|Bs-hsS)lSXjzgOkPqn!4)Kx2!VY<-lBM%Mtsku(< za;-X3%q#Qf%hL|MxAI>-oVk?$?zH*$ae*<f%n@O??1!3_hm>?a<p*u!RDHQj<zL4a z?hLs{^F=J3l<J<JGx_~)r(~*s@vXYF<F_xX8D6}R6~#8W^;GGZt%oJDHG^W=)g@mj zRyMgL`%jNud}FWT8$MOnj3wQdaxzX&o$|h+%yY+!+7-%<3)RH?<7aXtS=gul-25{# z;OEU{{}t+D%HH)qy*bgdpg8?+g^l*omIaLmH!j~5ba|87|3wp%vp!UM&R&1jHuRs( z^;0X4Sp0nGxAZ5A_G~x)`|)>AdMSRhSY6xpX;S#_!Uf(FE@d|KZ?m7l|E)5I>Dj|0 z^X*Og9rpZO?lbjFY1B@Yt(Q$ABPJ|1`!2I@f$N_mhVu?=uUPyh>88evf<}#n%kuxt zta@R$q5a?7+^dh5zxgWl@5Bz%!?*c;-ru|BwPcAmyK|V?+G)#G5ByqY@=kg63f2_X ze^sTIKAk_aj8Wg;TvuUZ;jX32{X)<8Xb5yol=nHMs{<b3?vByA9UZMQ|Nh>@ToDV` zt6g&sFSZeAh!V&xI`zZA&_k%Df6FZok!0J25nUfY%sQH%VUhCopmY0w5v472-an~a zuPS%Yd-KW4&;J#&P3#}<kKZSyzG+4?|0jj>t9X`(hxxo-n%T^A;&e&k@rCEM#Ldig zoxoUlDyTKB!zA!|v_^_Ut(Cepo1Fjs*}qx6d~eR;e%a%=<IHAOz4Cd&5A1WxUc2P{ zFrGf8D_BlN`+1R@u)NI$$+NdBZgI}c)_-*R#v7L+@!ZObJLek(2hA0#+Ta|ebkZp# z*!S2ogMIa8x8velHE#Sl!}%xYta{3+)c4hjzSFk9UAn;5<ATjc(bY>`&*o@OS;F<h ziY2(trM_&2WvI$${<hS<1Am*sDpTsxc5DCqIpx#lH<|TiO|0n-r3+`CoIY!B&2z=3 z{|nn0p4+r;H~Bfg>3c)8sk|@yl(NuIlT%t}IaqtRah~Fjoc1}na+1PYxofBH*95tx zp0M_xapBv%9~u%#6IUJbygYS#(2B`oi|W$$UNzNR+MoFH%l~Em$y@DRXE0pfJEvu$ zZI8K;%h98{YK7-Iid9N(wr!gCw*PRb+`^x0cr4xS1a-tRPcNS4_Oh*@rdN2`Nj4V$ z)Q#$)Q{|kud1X#{+TFHgt(4ATbCc6g3*Q><_3XC$;JR#L*}d+n3n?KH4|4VV>nER9 z%2{a1Z(z7NY3K9l)6(jfJ~&%cm8rhDT=J2Lyvp?TeeTR!SN_Eusr#@{t?lCGT`N>O zh2pktT%jE$cQ!_^dR8ZU*x6@`bcGW_Z>@`6Hv8Lo`NJXC`h*I-wXL&eK0HxuoxShg zf%QwX-btK!+FGp}TzuR?&BVOkJ-EvA;f3>_@y{1*5vY~T{=HK9qenx)s^+3-S>-)5 zy4fG*swRI*v2ye3owEPn!b>`K@>l2Waqj+gbE#^+MVWHVg9;!04GZ@A$e#^!Tob=b zv1YpP+wdJr9q;}&{#6n2Tr6cegLCmh!{)?I0^N#|OkaJ<D^^UIq<Lih42kD=t7Dh+ zz4&Hrrj)VvvX9HTtMbQMwX;_?CO?e4n#DSMg~82<9?_F@I^TxPh*){`*_{LHKZnhJ z<9~O@R^QWnhn_w6;!ZoQu}Vftbj5qCTB)tRCBY&4&dh!sq*kf2@VW%czYXFyYV9{1 z$~q+csbk@UARQf3o}lJkO9W1^9BEfipP8nj+OVkMAm^!^rk%0Uo86PLEM6>H+OpT= zYL-NZn84<h55HF=N-ymb6^SzLG-hpm=CiKYw5ZMF&BKmkhmOtX{ph;?MX6e_N7^>c zbZ*;EKVPJ$^QnFeb6#L3`t$CN6W=UUqP87bbfvXEDm&|Ey6(KS4<}pYf8095uAw#M z>!*NJ(TspP_K(s$AHqxj{=RRvPd=|EzjS|n@sGbRAAX<yKW6>fH*0V9&(pd4;L<_8 zuNO|ns9pb~?l*7a!o|uzOc+;HHNBp>M%FKMxxDYq>X#QjddMAr>3Dqp&dNhpYEp~k z7CmC0+%UH>{kZMPy(i5Dl1^6UmNfEL#$8^vXKBo|=q08JAunbAo&2fYU|y!1#OpG# zsQ*@2ZmOQmg_wlqzZu&OH8(q@oN+I=DT?IbK6?0!WXZ=F()vA9{1?74QqXt2|I{IN z!zt}OT1w2Vl2;!vm&UL$`AdXcXtrc3cD-D1Qd+`eYGc*u-6o8ylSLR$A7B5fbM2GU zvB?az{3riUUb}9~mVckruj}yGTL0$|H~D{Yo=W)iMQ;{!?|J<(A>r{?;q_`0Wy{WO zEzp@7ZuP19?}v3(MvHIHlmD{7Z}L^)Z8qXDQ!01;yj9|Ct-hvjV)9DC5|fGz*ADF8 zaA`$Y$o>VvQ?1k)-FPRZwWl7Oew;5qIY#}Mk@2y$g73aH7^d;`98a5HcG+OAaxL3q z<KlN>GZwON2kW$!hsYmxE<DKIU$8?yYqr$dyzRBu-p-k?`NL$PM2v!hF{gP#VJ5r9 zU#HvLb2*~^@{1L(eP}AvKC!S{`bf&#g&hw#Kcy;gx}HuBZj(HA$;vfNVY=Aq%`;3l z9&24(7Jl;7qrba!@3qg~GdrhYo{G$@vwv2-Hl7|h`QYPi4ZCJBGas5bU)eq*?3F0b zjBm=jBO})zF};2!@Y1@+2bpg3wcRnlyXMd7)mP@lr-)1s@lRZ^Tv7k9!}+#fxsoq3 zrEHcuCR8o6=A5Z3;On+=H&4*^rIOps<xZ_We`9LKj}_uS*WIY-&Yhpwt=sgVrC5q{ z#V5;2ZOwax430i+FS*wBpuKd~rw_6otx00qhF{ORO|J^8E1hs@`<nY7l@r&zR(d;K z@ZO{{ma`ScZKX`ha=tKLd~k1J%GWoV55fw#XDF#^*57YEw%2aw_LQ#{7giNN{>fN% zjO|NP^mo;7=X7SDbg!$`U3?*E`^BOyR=iemE!wKh87q(Od{8v;)b%HKX72qLWbM5% zGJNS%F1b%DKREklJ`G!~zRDw(z0~3M(tD48gh~Xb?sGo3V#Uv8OV0hyNpAF?<!iZF zyZfeM)UmhkcHN11B&n>Jex+wdwBq?yQkxz4A4Qt}n8g{qk8Q_R%lZFKGJTN|5m>YA zaAw`2`EO1tXHO1%z*G2`al=g4SRe6C3McIs@jQ|imXcY_?;)7I{>l5xC+=%9iCBKt zo;ddwOQqJv&MQ??D^Dss=Q!)FXQKZ<#A&kbPeFwX$6vN@zNb;5nVohz*zRehSFw@J z+<h-EX_`o{e^}GDFu!$UQddy?&K0p29QVBBTl>6DWPL>a6R9JqdosEr<t!!do@>ra z3@ZM?=~7n|r5pQcx!{DVdFQ%W`V0T8y>NI+|IJ4-zT7>xPPv;G7WnO}`XIQgW`h69 z;L1k_+K;4O-N_rI<kqbkENmDRU)>_M`0gLZD9(bOE)Kry?ouWf)c-~=Ol0~Wmv?R{ zgUux|iPHM5{NFTwC-ijAGx(Hk<NQE;_I|BD-M)X-{(a^#pH<<vPyI&5sfIm!T-yA1 zUYyc+sK|Vlkw68Tc=_3Nao(##>a3rJFAADJvoAVxeR{d;(>1@cv$AHia3z0U`fJYD zX?5=(6nzb2d!l+j<LBB}Yk8z>`nk^wh%=aeTeNA_>NlRr5oW%Y$vz4Dn<gLYw!Cqg zUp#wdYoz!6cZT;vuT4>vm#b?#US_EBX`yxZ&F6)V|5hB{{^yUr+nsRj|2Hh0P6k)5 zIlRMXoo!>CKXaU0-F2S@{qtE>dCN091GsW~P2x_QnqK-a|6AS~BQ-ZI_SZhg4sZ53 zHf!N8)l>C#%n4IX-*RqVc6LR{{w&?ye^in+cX(gk=<RPZjp_FslQ(~E9v54bFnv-? z&aAqrMh8{i2A1gNbbCGcI-hm>p1_%^T32OiPkuZwW6Rah%+ydO<y*yjlRnK@eCme5 z?;nPJ-yc8KoYZriW9ya_*O>*+cQ)&6-l*>TJ=pILLx1Cft1=xL%_fy0UN)W5M|Y%r z@IIy5@~0p<{!u?`>SRxS#Zqm>ePYUw_C1=t@lS)`nkR8LoRjURi+}&AGo7_(wV8c! z+uu(TnoT!+Qa*3(`g8k8eb#9U$E_BuM$cV+H9zjYV?BGGQ>$p>yiD%=#EmN|C49~Q z$lHG?vC8{9L#f#2v7+`wnT+!ak4ie1F?L5KAGfrK{Kzrqq{#VGArUjVw1X2jE<5B? zo?V|j?NG$g1NN;;C$QI5eq4F}M9_)DFDxUtE*Cyl6-&~5;#kdgaP#K~F4gy$HOIsb zdKIo0`F=_C`}OMckAhcTw)t?Hdv>kcD--_3&lmVDe|*ea$7Sv_$Ld3Cj@(f_zkd1o z;6;DFy`KN^{6<@bm+j6b&zCxL?<!v5J8?_N+D}i<t1BH--uJm8n_Z_fvtEWpBi!@h zoml~zMlrW}lo!~p@U+`?(`#>|R>bsa5>uK_mi$`QzFh9-UVDQhA@cWJG>*SKC0cow zOGjbR?Wn^Qj}uNQEkD0_Vgz@`?!zV~>-SDmy2gB#)2>NN;O3;mJ632<vdgKBIHT$* zzs)$x%O!aAj1Y;FzoVDeuMW}Iy)~ypsjgw(OoM+~7EWegwr3VbT(~m-=EOtF-@Iq1 zs_+<0?b(ndlCRi(d)4BJ6%%i|Z<x!l`I@YUXUq9piJv;mkAJ@)D4nk?(|<!T*+#pp zzx?T+lRcJ}-8(IpvFC(rwY-02pSI}{&g&^lUc2rSc$+mNb@e#`wOutACoJURt-9Ed zw)4sQwd<yz>I>FSt}y;(pWy8q=d|^l-ohw*lWUWw2du64ycZj4=WOU)u+Qbwy87bg zPMg9<4J!|u{nR<wdgPOz&V%mqXLo<un^|4^RehIf{?DK_yF9$_rCe(LzsmMioZRbM zo3?*ox$^YwotFaXoRW9yCbH@;)ahbKTQy;3UjF@a3k#htizphpKGk`-?Fvg!u$Yg@ z?Fc_1z4~Xj#YG;>D+q16)wwXR#%A91$UAf2iGOQbdrfp^c2~`DdHsI@=jUJ3JS!4) zCv;hV_Hz3LOJzRK7JhKPYWqr~GZO#Lyb$~Qxk~5ej{Lf5pA{<;673EPJN_3x^v^zG z=TFK1e?RTt;P=`1-|y6af0o@pRJ!m^^@caEok}-&cOCF;s(JF-skESf?aRp@=DpKs zTK06g%(w2>zaBlV;|_fM<?#1AoYuPpi*~ko>DHKt{_owrAWW;kO!P<YoSVBZ#xycK z=M>>@-yL#x@xhp`R}VkPIe%aC^eykQ1?QJ^woE%2rnNak=#&4G`31=upH2(UI~ru* z?mxvw^52=KRoB)r<Oj)I52<u#u4eIZinjc4Pu_j;N3YN`5)U_CF|IYaE;nI*b(p4K zxxCKB##v3~mpflKTh5to*x^;z&-DM?#)ugQJ96KhJn6*q*Fs8_efIIllSdkC?;5qe zeIPz>i5+8JrTd=$`ywtnSgVGfWjg1p99B^@o4KxRRq|G`8P)QIE1hJ|-`t{8EW*en zwfwr2)1mKf!VagaOB~NjR#r~3WBVY;`_*E@(i5R_CSOdFrq1V>eRA4*X#++l37s;- z=O&l`3B50xu<Ydp9=opY3odNYi?beyX6Ype1vEIkmCR@FT&Mp2*_4mw4QpQ~9gvJm zQZy>qaQfbkC&`V^<i3<8e9QfN%kS!m{Xxn+&izN4)snXe@0@j9L2*X9oa7RLN6zAA z_Z=+$<P?UV>}Cmjz3`}f=wiW@pI%;nQZN5^&n@TafyMIz9$O{ue16H|!qd5Kml^Ex zK6uN-Ju^vjmHTQT$^QR_o2$&NU^%77iSIX9eN#$*aNx>$-(=tRb=I2_rk@LT_j_`y z=I56_*S(ppAD;eR#Ifh%jE-z}8IFaI*(-VFHeP@KdX3U;-*>(_#tU9dQ}UQ5`;EC> zN$*pXeVFUL?$u|wqht=0Y$y(__03PUW=qIE%+c{k{Y|>0#k!Ywdo&L{ZK<E!d#u;) zXM{hymi)0x6Q(n)4!&We{wwrd;V1rD{aw9#^)gI1Tx{85($+2fp=ob;NzMBCEdl-A zn`Ii^rm6C38?ax@*|yxn=+^VZIjgod#jyOyoz_+JY=c7GA3NvN+<OVNKa1Pcu7teq z;!;?8=+>HuBWep>+H6ffyyW3MrmneLH_}e?n6J0O{EU!um-TKw_>z2Y+ZCN-$9}Be zDLq+uwv_PX>UqmPU2}8ojlHqIe=dXn>pO=Q^?u@xiQBs?r~K>HzQ+?iLm8~JC%^AW zsDHVoelBmux3kQ~O>eiw&E1mTJX@&Cv#q_om^Y!#!Pm^U|9O^8@QY0uT;><OGULug z&Rccp{sBS7X>K$8x2ev5G_NfGUGe_K(|2$u7UZ42#I@5qHZ)@Y=EjY_mpx`BRkpXz z@V(t*;=JwTzbjMSa!=)}`c0AuT5Wc8`j(ZqeC$>n{}LDcKafl9dZzEc@SC%IKQ7hV z>K$D3F#4j0&`KLG$H$-co&2wLc$4P7E0dEp&HNF|<>#ej7VQ5ja?;wFAJ=^2sQmNe z{?9({so(Q7%;FYxH_JB!h{Sv|l$ZVVsqdG{Lc7d5JK32=|2pp6o-SU`r!H-}OW@bS z>kjD-6^9<1*SuDJDjUfE$lPxFhZ!Od#6K^6FwN)GWTUh3LhDubs;Y+nJk>wxscz@? zzY6i5dsa?ep5o@uIq7|3olxDy9WM=)MRQHgCOYk${iC=3m#SQv$jradX8v<|`n{6E zj!b8+H1Aj+W1ua5<`nDZqJwLo%+IE~63pz6i~OIiGrh;i<3hzst1#m*^)%b*B^TFB z{j8u;WAWKCW7*+T-yfWLId3MP(c${wW0srECO=m_T^)SN)L8b6@{hb@{SSBD{JAQ| zJV$h2&2e9@cS3i}W*W>tmO0t!>CPQFTmp}?_q6ZI2@;rRG_TeBmyzD=Anm8y*X(ui zXcT)hOZ1vmt>PY|yJ5?28=KrU`}rj@qUFW>prb`fwyo37GVNt?oz4C&vm{r{?7Zt; zvB%pKdS|mf(VVI$_eVHeGHCm&IrBf<dp`e5@y~<S7aJZtJrrD(^>j+W<lt8M^*^u5 z$P2T~DQj4hvrYP`UF|OCMH?Kx#Qs0#S$NvA+OSg8;@bk2^DEl8cDjnro*Q3r_hk5C zgF-32u3Qn$`I8DA7Cq*Cr*d0n<MGs;Zd;OSzWk}q6griwH<Nuw$5I#R&Bh|@e_s6% z+_R%QN!@YZ@)WhR$EOs(NSt@~aSV@f`BdX%7Lf?0#(%#i&C6)LqB5ajtL?*=#g58M z67T!Ek6ZsNGThK!llb_vF8g7gykpKQ46<*nzgd3v%bOWB_ccuHG92s_v>$T%S!->T z|F(c_^Y>kH*OuJbaxI3rq(6~yqlLXn*2d$(Wo>?&*lK3=E2b-+|CI4Tr{Bapm%aQ$ zPfDNrj4dDA*L{uuQKLCCPp;&i(cTSw&-=X3o)KBU(etOyTd_6V+J=^*_OY7j!F7`} zFT6C`rSiX)hg(bYh^K?X#}93MoH_z$)^FE|+#fXO=)dw;lX7(KDcVh*eo>b3mE+u< zi_d*nCgk~ZCr_kXyviE(Qnf|rI<^VzbrcQxSH`Fjn|Mm^;0Bdlr_7I>3UA3;bM={D zp!9x~2Z6@d><;|6RPwXgsN>A!8hx=<0tR`9wRsnHYPZkRdEuH~qE+&5i9xsa;)fDf zWD3f?gj2N_SzbD-cH+~QYp)NRSzM6l(Y6v%@ZYn2VsiP5cB|!Ygmof*>T4)GvV3|m zZqwwyi9#B;@7nyHQY&X1w*RzZ`Ypem^AwY>O?sbXS{fca-E{ejyE?XwmU2>WPn^j% z6Xxq;bL&pKvD7E#ME2GbJZfRr7w_J3Ex9pHsl>BdfANeLO-*ZqjvqVnHNK+v;5V_F zM|U^h4U%25<H}3hlx>AC^-d+|$TF5@<URAV+cI6}T1A!lSLuvXUxM|XeGyWM$z9j? z?Aw-*s0%yz9<2O#luJ#y^|Z3qrl0EqPi&l<-s%-wcfgl(CENUfnU|*4#<V{AzT;xI z|0mPsdmi+Mp1m+-lWS1D^RAes4)%O69p3I)HE~vaUs%fBx$6Wr%Diy$Yg>Q6X=$DQ z%?eeyni+Rb&8m15Iqgoaa?-gC*O&QkeN-D2mhw&4bk+B*pEGWKU;JXvid=KI2g{$V zP~^#C^PjuvxT=JgNx%t@MHk+zIg<VF<qS`OioiK48h?&>7S8;7=AHG~^D)cc@9Ekd z^!5H0@w?LOem8~pA269Wd6nav8ke==a=UroF61l=u@}?fipl;o*R^dy)M@q4FHdbQ z`_U|3S5S6$j_$cD6GL5XtTwM&u$(I^B-Qn0V`1q<%^QzGN{(9n(2i6*&XzpmkL2NH z@`>9^MP2uH+`TuaWw*|bznf<S#G6TG=haOsPH&W~IDJ3wYzx1ze`s!*+1B@^mj7ox zI=y)L`&0>C`+9xp-c<Duq5;#V9}I8*k@4{sYr%4tw8xB#RF9-SSK2yZjcMn#^gX-1 z`!}E4P`IRE<CzcNZkaP{U%w>z+Hb;-ykFOo+Ixaqk8z$q?bW~j%MYV3JLcs1FI?Mi zskVIIQy#VBMb8eWWb{owXt8vwQSi?GRbfxJOnovt`slfpA2u0O>^khl>S3#WHlpXj zov5N*zFjsxwRPY3*!7-0_N;!tsr_EXjsGnSpoc)5YlIyFvESHEx0xYXVk-mW42ZHG z#e37Q+^O5RefQq2dpFl!xDoX`@9R%DyKAKh{eODj9y@*Pn%eJ;H(y)s*!9lTZF1|` z|IK@C|Lp#oRPX&?`}v=5_qxSz@4g+t^Zft6?&h`cdq5{PJlxBxrL_OfmhbT|pGThf ze|PVeKldX~{$G0H|MXdZ>@6xj9{zXw*uT?v@812pcdFPAx2N`cR^qn*<KMjZpZb4y zb@lDt?D`4+-oJg@_;>sMN&mHf*Q@>y|MvgY=8~WLPnaHf^X>n^fA7AX`WJul|I|P6 ztNz$CoUTvLR{bCTss3`;AJ?7r%TD}nzPt8sY~KIo2lo~KpFeo*o!3A8$Hp9g7G8Y4 zargad+ryH5e-w;-&VN?ECBb|B+7IJ90*-+j-AW76m%N{)nAi1*iTQY$?zd~-jyZqa z!F&Ja<qV@myKQb1^ZZ$J`ozv%7n2NfvwNq?`ReTZfBw||q~E<}BDJq)^_6F`_r0{L zzj5$Zl=z3HMwz~zWm)Y{=Llw)ADJHVbyYUsdfm%AtWDlYC5rHD2-*7SZ@%<>e)E0X zcirD_`RCu455G?z``+yJ_U^-D@2Vf~?>S|!UAiyv=3<ox64y6;tIN&pUBUEs6Z0;8 z=S8u}zvFD!njSuDQNBLsi;az^=KOmz-$ne+{8@V{%lYs@Ic^1!=2#BJi$?b<^`ssa z$~?Q#%h#KIznpca&#MVL&arN<GK>??FIXtJ?vvNv#+&VYezPQgpV@Y+=3ZuCxIkjm z-H3XPWi^F!g>pA%e?M}pbk*OA*`Hz@{M%o**iQ3|SuAeD{d@bj3qAXV0wQ%z>-W{p ze|PcC+KqNHoKKdOJi5lO%v<?aLdaH<_1xUYx6HR)J^W<b$5XdX3pVWg&b;>7jh7pb z9eq>Fo_|Etei4gb)Y_KEt{a6|*FV0ym&>?nmYc+7$DLCD43|7UJn?1{OUm_G!QtyW z)S1;el-Z28-)2aO5-c_-h-vqKb|<Lr!tsTtYV@s{@6ND`yfkH2Q-WZ|v>WnA)Xt=> zHeag9b$V7<MgpH~c~FQ~k+a_I=cm~oXua7xd%}i4PlP&Ww;Ggi9gl3C(I<FS*U4U@ zTH^4MhfP6BZSU4f-t$|k-ge|{SBBB5eBG%w>o|(1h4nbPEj^UR;?rKhwJEm6K=!)N z8zI?%?eQW!<#LZ(Y}e)GXzOh|-BmOz@q57Da$C<6YBN@>)!>@*x-g}E^XcW8pUZYV zxM(;taM=u@kB42{=eeZ$2o`6SUT}RScF`vGsqS@yl~FfWEq7gRH{s=K5uWZe!}SVI z|33&y`Pf_tWs{#7vQ<#K`eL4}bNMw#*QnQzcxAl~+I+3OZ2W<jtuWY{ca8hey1g$- zZtwjZe}2Qa+6OLW{67qLb5`{hA6(vWh&L(5?6x!4YTcHLR+fPV3jz#zvX<?5Ipe{s z)=3*15>L4}iRH~%<encT-jV<R8qbZ%@loQB9?G&!>wLc6Dt&GD{SP0vKAw5dWm=g2 zf<6D%-M0Mw_Ug%>+BKq<_nzGPy8i0yyx;P%AK9D*eoB7~u@lr?aclY8$LFrD)Ue#5 zn{E^G^k#Hm_ukM_|8wW-L`-Av?+*O>p?5`Ve#qQ!H?L~i9sMd>U37Ebi!B**oTCCd zm&bndNVxaXsK|BI^|{73Ganelz56rgmQ&!#Xe(B;N3MqzKQ!x{t~wsS@!ZMsKP$7g ze^#z9d3)!?^7a1bqQ4Y8_@!1~R#W%&)skL*UHK>5&d%S~Z?$~Q>}hw|Q_pU+&MS?K zoWS|Yb9=GY{6|qiUw&?>y_q|AU+Ugx++kn+Y|{MevW<@&=AI|=y1U!?w9&o`LY!gw z7cb1J35eGHmHH`u{mbhO|9^GX)jnzdXv}-~{U6zlO(!KA7iur_=swbY^64q*S;E_E zjJD{#j6G5R*J=N|ANoqoCp#}Js#><<yZ^7R?D9cPb!QjuUt|~a*>21F4$tF%WVcqH zy<OuvBewWV+}?%p+nanPx<ACXJU2c5S@i4ssE!8tm)CjIT@MwX_-LaP^Gjy>e2(+| z&Wb5BIv(!l*lc(FO;6Ov3hn<(Ce?RLy0X~r{YAlxYtCnWyS$#|;k^CU%ggQlA9ayB z{)_kTuBZF^R@DCuFwjem{MW4zA#+HwaG&~&dB+a^a_(SJ6ZoOulvn)1hl@k;!m@j} z_H19j@=3$=n!n}0zUKeyK9+dk_(Rh~+XoT*)&9v8{QEO;$^+i;Mth-o<}&AnrIe@l zU-ZASzkgAEPE%1#ol=Fo<sP%GNuR^&7RAf|Tra<JyZN5&_Lo-N`4Cv?ym#-@y|vCC z@+|k5v%H^nxY}7{&r^{a=L`9kU(8*mNBd1TXL&fy`Nf3}%bFurA(tMiT3?B7|Gv$+ zq|hSPs-^pI;Y$HMzT-=s1!Nc-pY1;U{C9uId$%jeMpM7PfB)s({Xci_cgFwIwV1Tx z%f#T9>QejrYyQ+Nva5Mg`=j$g?UN6B9g~^QowN^}E$=$}%KrW&la=q~EAQ7Uz597$ z=X3Q}7v1kIo}Up`JBQ=yu_;pjU26*}<^4G3oqjmi;H&x+)!vDxkH2X7_59Pnxdx(I zQ`8;HEx!c6x<BFj`zgN+M1q<%44+J~P_>gTva?Q&>fQcRIkD`pp|xsEo6Pj!MeimA zf1k4C*aYuh?pL`7s;j*s_${xcUn%eZ{<lY=B59xS_lh~y=Qy(alWX1XJih64(b)F< zeL<W4!`8}NRdbrsS?)f*V10$X{rkf|9Q8kI|8=`ve!jTU@9*cz|K~hs{fe12PnfmV z@8I?;&pNjMoc7E7(cfxsRrftlva8Gm-gkUb_WQZr<)`5CKj%$m?f-mnkHQPa_Buyf zu8MxW6)6T{Y23yUKlB$RoY1WByx`3DchWDpPy6D7@}2M9_HGg=;+Srtr6@nu`&I6V z>T1s#F)rJ)JVuF57gw~@gy_xGJo>xb?Sl>9df$*umQ(dsx-Wboc=qgs^Jl%aB)cXZ zu~mFNPtUR6;)~wd{T>pBTsk{~7kN+Vuu$D~MsCV8edD^H`j1|Fym(ohro#2ObEe-P z@x9$gtPdGKswnH6C%8O)`Y*YU`^r0;1eYgFuaf?FFHZ1Ua^F|csWP7@g<m-}V|$V7 zq}ns8zxA)QTi<Js=QwZO_guf_x$N=J;fs#gE<Xav6SL}gf2@yRdCzwJcm74E)%~X5 z=Qz~j{G->)ui|9AP>a1qOZ}xA{|v*HE&b55xiqUv(`TOa){d!l4bD&7eJt`$Zxe}+ zIv?fjE!A$mewh~6?CJL|{S4GEOZ>PrS9-%I#eDyw^-s;Z+#WuBmS!Qh@N@sA6JHZ| z-uloy+gC$6uS;F}QC%PJvoAMy+`fHV;*gctc6&AH#SGisl#cWL-?ZD&{KzrhPcw{p z<I^pxmS{V#VM=<(=cW+ZwoCh4uF;-Xmrs1V5%Iuvx2KGeq4$pYmk!shiDig?A$>)* zp8w5sw#_2F-32jfafPd1M~Eial(NKKzIw3rNcwhe^*t;9ES&e>?EdrVI=8(`Y$F?= zEj&AE>yzIu@6R51b#T_tT>=)`$CkTn47PPVCUdDq`$@-VX>~WV-l82n@dncl#&mgI z(mg9Im+G&*(|G-ThtN0AuHBYq{dVBzlDc+f;~#gg?)lYddZEto?!6N|0qcEk-;(Gz zdZK?iA=C1&M%)C=lZzhx_`KMbb90vb?R9eltru6cH|Yhb#_rEQrW%@&oYr#U`mx5R z0v9?y{=U)AwcS_t{5!^#ZGGWc^-kwSCm%7Gc2l$7+Fz|mt7S_0IoqwWb5o+j9*V1% ztdqUosn&htZ+h;$`{KEc$DRtjo#oppG^6l6*9mS@-{XgGZ#2<xe`TrPzF3*bF^Tn~ z>&%QvFRe=@_nv*&C3Jhjy&I*~HZObS1cI~n7bwOYH<Q!-9ejT4-q|m<DO52D^NH`- z#&vJu`?&jgOBtO^9x=RGu_Hk3tt$VL^p58bL}l9_-Sb_$GqZ+a&W-;XSw&U8tBtwl zER^)AQn;D6+TsKA?VTU1d{nZ|{GPS<$H{q9def|!=Usm1rp#({dY$N}oHt6kS&G@O zU;TO1Vfp7p_lLh14vGBZxc^XcE#F7|?^>}NynckQWsc68{X_9Y_U^M!e;MfSGqDPO z^yb$ZpG)_m(j55BjLy0(Hd=aSzl*2Z+ONw#SFCr@zMSK7^={FQv~Z8bHo<#^cFi_E zR${C_+j`%<#Mo0DPjxFkEqlD(ob`0*kIiSc{qXWHaO5k0BC%F{TX*5@RTU4n__la% zZuB)(JiD9WzCiPmQ!yXHIhW1rJEy#;;fs&*gyx8cN(&hNze(8FV;%ohQ^veIDEaid zi7Btyj`>L(D(DDwdF5NNdj0K_lP6r)v1Gij?)!1irCGOM?R}=<IdjuZyN;k|E1p`n zUebEH!+U+%QQ7B(bB@HmN}V8ZeX2-9pySM)u1|coupZpUkbdj;y!Om5A9P#;gTJZo zwx6f8i22yfy*G5rB9*7lVp_UF?1th#4UWF6UQ6#JtmG)`J+50EwCTx(??vHdnb)<t z8mEZNeKldOt=qLyn{7v$?2iU9Br_z>w%Zb=vxBRuta5^CMoU8H$*xU7No7AbOyY^3 zpYo&lG)tYU)59xilf&j;KI(V9-<Ic>j)pSdiie6PHMXrkepuYt`}Vxh2s7Oc&wAeI ziv(#Ms{1IkszpR=3hU_^OPWsIY(HOg-u**mtVem9-E5;zKOCpUov?Q^>^?6U9B6TY z<D2=ju4}PpZuq{7_RA4idVJ*?_I}NKK1^vsZzttVn|*!%f3^f>KFxq{vJYxC;<kUB z{^Zt)exLA-t9Z2SOrC7%Haz6icfsb>3bh~l{Z}tNPw$(-U3V;ZujahgPt^iDLR&tq zU}aTXIQd&cdd?J2zGG{*mp_RNoh|hK`Aw<cC+9s;T2S^=LgR{2r?aSraO2rI|3vEK zZ>cR?d3;0VzuQHR{12UY75Q!MKaQ}|wlCaXP5kL;Gs*77#KWIHFUvTwbjP9QDU199 zwF?v4%hXc#8!>ekuzh9vZ>JM*ZOsH3J;S>%Hhj6VSL#K=`WVm8@7N4y#u-d6OmV+@ zBJQ9~^(xPgw+fY)O*{QgnrDUEHMWE6^KXfZ_?Ppqx^a$+FL&dPP+{iqr+M`WXWJV3 zMK?Xz9<gMZrju#^?Kg};$+j0C&-q~L%9ksW+!Quv!TYBbyB;O<y=C;g*t230Q$uD( z>w=CZ$=h!<@93&0>^x|?Y{C=&jcj{0UpNR|zZsQ2%fff+700VP1RHJ6$X@o?@r0{+ z;^*2&JGM;K^XORm-K*X$HOwTV<6d(?aPRb^MyuPV%vGvc|K`cXvR@}$&dqUGzx(ZI z<m%f$m)?C{w(HG?(9^1um5ScwFli}Gh(9T0uxMh{<-HkmW9Mzz^)~sco4LW>3DX*) zgrCO>NN+LinjX1Ey;nEWck0`Rx~q@(Y+CcK^qk&p@jqWAZyb6Q5&3(`+5WCTj&oJ} zE?0}?{8(k-_T9wm`1383x$0d`7`bK~mjC#>=dYcx`%aBRlK(pH|9`O|IO?GN9P7f6 zS644uTDum%jahu_DaW>R+sZ#`);>IMHC<=Y+<hI74bzY3+_=}UM{M!cpA$uo>`#)O zA$#M{{zsnQJ8WOdbsm=7^H=!lzmuxBb&l<~+3<gg?ZN$jIMt6tyLN8BV)EyqRr>U+ zJMWjSX;Kuv_xmVc^z%*SR~-53T^S$D{cxhuYyA;T;|kY<Z-1CfG1XgtZ=Y@E{B7rV z*@|)A=hQ#Gcw%;PMDg|W8p|02R7GWuJo>Zdw&m_ih94R8^VcLE?l$Q85#1{K>QwhR z?X|4WI(CQYb|_tGs*vVN+xcehw%uzVi&-0fIL6~&xo0bj;=S*2#)}syckdDV#%T80 z`}d<w#dXJ`f40g#o8J3j``*vj*Kq#(SEJxPXKTIhRIAPJFSFi{+fx5>PW;l_HPScA z`|QtU{LX#7Xm!_2N0obukA6%_?p+_UbanWFZ}|;d<{HOM{;j>H@6`?0-=-1%>F&2U zVs0>RSe$THrQJbnk>P~*TN7>UcX@3%W7t3AI@=`iB<7Rx?NY{b_r0BSq$1PeP`0^< zb|B+9&o6#g|1B-On8}!bSYiIEKqKaeT9=BmyWGxx=C=8A+p2TAE&m6G4KLNW%KI1} zpA(!Swz=)>yL~USCbP9~`J3I-wxjB*W(TXq&ks}WSoItp%YKiG-(c)x!O9d+e(kk` zO!}eB%DU3RE7NYo{d&A0Kf5AsOZ~oAF-Hu3)bdQ5*v2UOK;wdS>*1fPPZwWtUiIr| z>5Ij7lfJqNW;yKP-I}cQk>j%^4|DF<37K+xcCkFIbJ=rm*RhIC`)oektu3ze>6m+| z)or0w)4euDo5PK4yPMADoq3<yE?atZvPIFCS1d2RoqP*4*9x9z*VrzyzU;Pp{<#j- z4XIjb-}7x#ICHk%*rVW`FUB-+zH+zRiGVkECe+HGUT`4m&TPf+^PBA&-z!hxeKXBu z&4M7KKQ&j=W^%5G>TGk`v>>@t{MqKfuBkD3-?wD>Y1H`|)W>YfPEhTtVQwjYnf68R z)8^l6!`FHjmd(GDuvA)DG^F@Q)|-aeJ}Lo=6t(6$mp|P+uld)R%1NdiLG2eVx-Ycj zGMJXC5!!An(`UM-bBg%d>n18;34C2{EFA5sH&knvv3ppp%Z|C-mb-AP@M31)RZjYD z%Y>tD#|8Oa<Ox@fHab1idiHPWx${?CIIJOND|0)x>-zQW$5PUkPrB{ndM>w2z1oxC zJoiW14z0V5au470Rc*g`q1U?8oAqTnzvS`|qusK)<rC{qAN#8^XSyW!KTXl~ZWVLq z?hx1UZI2amSQ9SzQ$SvIqw;eVEB%Qc2Bo%TG2K7epCtD%rR!Zi<WTr5Nmoy4vYMDU z_l})`Q>xF*YMNxqD!-b=D9qC5!t1Kn6|T{9EM9k?I#QYQaponBz$pb9&)=_kGRJR* z<-(|+%Dns*Ne8yEKglk7r_QzEZ&Q=fAD7lJxBCw~WmjJ~<=OuIOESOLlPO)IC#*yi zQ~g(pdC9$>5tVS!n%|)@vs$6(_p*cwPwM;}C3hN633j``ZcgQ;qiMm<c;=`YC;r<r z+w5rA<mWT}=H1x#z}fte@!7LSPMYhgDAtwf6(;0u>zSP3)b}<eDnNcs%zL+)I-he+ zJ#P;`D-j;*cXC6W5BI70dUNKbsGC)Km0XKiH6?YIysBi!j#WKps(Lo27Vp0!Xg!-% zfw#L^DxG`b37>PepLxzKS^alqeRh@k$;{0PkJ@Z2-3!it3)mI$F?q9&;fF*e_YY0! zvc;J;TSTX|8Q<jSJQMWw<mZ`d`hM*R$({Djgx7xF!nBh%r&@X>9&8MjIWLvG<x#59 z+-}{zS1GIQrZQQEpWSeBbrZ{ziJ>n~>-$|=cy6Cu*3`)c{9mtJypyZAO{gl;^~yd; zeY4wQ>g%UeW^Adwx%Y)ZdSQZdcVB^+{8qjGsGRyu`E9kACvl$MwRiJs;dvWPlz#iE z=)d0D*Yf?w=jych%HECF3V)Zre&zDSR5bg_SDq~K*Nr7VC7;Y)(kAhv$FMH`faxud zRPhgc<#zv$d3^iEj-!XU_Q>5nKQGEkE-3QC_c;sNO&)1Zir716SO4AR+uv;Xxn-ix ztm8L@m;Gt1QggfaTsHAK-}-d<mFF!@)>nP2E7iO*|KsLe|8q<K-+uM){MEntCx72} zxZb#qQ>=*n&X(Wy-}!^S*S~xFX6?KB=wt2o*M561&_8c;_uURosRJy$+MkX-&3<`V z<+<|h-CI6JwU|Ags%3WR$M2^<CF>__c)ecfR7>iHR|!ibj->2(DSP+Us~2620oK!> zA3NQ=Hn-U|-+}SRaZcXz+jMUmty5>Ym+;~0B!`&)s_Ph5Kf0EB_rv=CXA2c4=P>A6 zCPd8KA=gx1dewTZgt6|&I`cL63!LUZ3|hNZHLm@!;1@gBeyiL$*QA)lk372Rd2Q;y z_?Q2|#FT&kTXwrvwETOhc0lCs{@tIG^cVh*&)FYw_y4Xb{RL+>GR#oE5dG#sY;;e( zQMXyftA^>z4wtQ%s+;ccZsLiA>wE4cxxJlu_qd1CeeWf^j@{mvWZt{5dG+6uoQn&r zG73LRxc2R=aJ|B^zOU(chVYDe{ed$=RxxBq=XdFFU%YqVQd?%^g|{CZ3(lv#&|p}6 zA^!2b&b-D&8NU<u=dOxpIntljp6K-2u4kV8w>3@M;(s69njE>!d~fbE8`a6YQp^5+ zR$AllE526y_N;qGvG-Zu^0`iJO4I!H#^@7s^~SedlUZNPKipxz-hL(@!;Hu0US<b7 zFX;)traK{vWigZS$_kMKJgtR!cNx<!nUzUysNHp0^49nFGBdUbCNmiLOq_UA|BJd( z(gIcqu_rD1vpj9`|2<`S#d~`4g7^Kg-MemoZ$E5!EW~}%)vYCe6t_k<IArrY)%1~9 zoR;P-XU$e@8MdF{g6d%zwmZqo1x}ZjB|Lh`7IXE1RP&>>LhA|Jjb)$NOh|BS@|hzM zUM%Gz#uw?t6Kttze#r3c3EpFQj<>~mdX17gxwzW)9{ZQ-*D>|$wy6JWuhp;qdjHkt zA7AfZkm(hB@^9{@f4A?|Zk+n*|GPam;@1A3_Tqo(-`Uc~cSlA)-tS&f9C$+J(7g(a zSseBoS{)_cSZXWBB@~={%`i=)w0Z6x?Gp9PUwFQzIJNBJVO+gA_mkCb!M*2%Bd<hW z>!`ANSbz72IQQ=pXWZ5=zv{VgX^bq>?jKn!Iua$Co1LvE-cMEx3l)^BTJdnr{YP=) z$Ge4U*GNj&KmPk%k%_q{Vr|e%w*G__lJ%zBrs_*oF>0SZqLdj>sr%OU)Qk*iovD+a zcPnsxakw0{Sg8N?qlGbUmn)91b92kL`TeZom5TKK-kT4_HO!MH7P)OcS#_do@Acn@ zw6691&p3CVyN%CrQg*Pc^*z;TJkH1JzQ}O@KCZm>-o|#`<BQ}zaW5#`>&&t5c9lK{ z-;Con|8L4)jOpRK5R>yJY03$Q{u7hrKK^u{eeHVDiEd6&rBIbN9_D#P?fMRen_M3@ zr3k;@8}ajp-^ut8rx`bj!^$+9gAH8Hs=2pp|6zA6CTGPY=B>3em~3zV;NTOGopb79 z*ODls1v-m<EjDlrtXEm_vVTMBBzNA6JZDohoQ_{Gnbq;#HRRz2F;AhJdo4^kp0j9L zyf?d`@o|mT`Hd~BR-F9ZaR2qvbc2$mGo|tpb{OeqG+*iwUY^42QrBqycg59^zIkgn zPXz@%J?H=L)@ASMv*(7CR8BU|&l8ez4L0t4o^)fv#oTL|C*3?ZD0%lS-J#W~`KiS# z_Gp~>llQYc9KC;^ut}e4p>!i;N!glR6W*WY=?!`=+_Jy<K1;hJclMozga3G#b}=7J zH=H7ISSu*-<o5PcQ<Q_3&MK@7wmp7sm1nn`+4Tj^*1Qk5^cTOs^06tkV_~9OuHp2_ zvL6dC@?B-P|Ll(2k!ID|@4e0j99$=&Vi_%K`>kl(tf&vE#@$tkzH%iC!!JaJ^4#4T z*v}Q7T_v%0lA1-Y?WXh2o6fU#7h6oU<yk#T@X&Hs<HvcrIZHX0EY;r{6sr=rHs^!e z_P_mkE4zMu+^uHsa**$-W?yZ4#h&$7zi{whJI<yX9&qHs^sH9DQ?hSDg$m^Y8rP;t z8JKGPx${!}_IhcvP3bq*e5tj5(HxP%pe&@ewXO62vZsRaVWv92t7?K}*IZr|6~#1v z<6Zrn^F7LKHu*PeAF!0~-8N0xK63sRRo}-uYOh%4&V3Sk;BZGkV!rnJ2G;!YNBOzt zTg0y@o-wrb&Yxg;O+@bJV$NV|+iA|nUpI!esy&SE@_gia)_>88pDTB0C~QpqvsE*? zef{kzo11K(@}68SdVJM{IYl$lDmheFPWN!P@iF0+jh{RJ`Nozj@o&<@7VETLzvWzb zEXVug#q-A{jLoJ>|Ni`Bhx>+Wex=T5vv~fyyQf!0ZQighE%imsB<`n2E~vjUarj}{ zVz4TV&rxK?Jr!?;Gj3apXXz@5=_aq}UhexGG7_)5!mRX8@$tI8c?u`fCnc@Tt6uo$ zl#TT<{fy+vxf72nB+i(`855Vr(b^{I_UBE|TE@HUn@Xd+J-Kcki#J|-Me^j0{ie;4 zCn~-yD>ZZ#&PhLQ#`|{e-@ok2b?pZyY<~F9`}HE0Uk!JhO0WK0oTVvp+cPm#&V0>W z<v*u6|0!K*3Gm6j_=#hc*^xQN<5L5VTJ|?(>(=YAYJE?8a4<eX{zFGp%lGwMeYf{( z{nDD6++H<<p>El|x{EH=jR6m{4dWKA)7QUYq;;IbS8sN~o+nu=KCQ2x8~TXNT=&o6 z!znt2<`TE9<Yu+X6-7_Jnj-c5pmpi_r2pmR`g{NH-hAtS?5Th6y>tJ6fAHWa|8ITi z-}>d{<=?-D?LKh-#lQUf{BO>(p8qfY`}fZ0_1k{@dk;T_znb0J;Q#mV-}_hpm_PMT zeB7V&j2{2yt_}Tj-s|7(*?Z;Q@qDS`=3tyv_AmJ4|F_M5WxM`YHh#OW_3yd#M9?g2 z>i_k2=e_?W3%r<o^Z)PN760;6|F3@onq$5BfAx9clmA)QGNx_+AOA*n&AIyZPyT!T zTmR($tIs8$?sxrhox?C&>3?}y{2P_O_P=*WYyaHe!=L-`dsTCx3E!JI|2Ykd7GEz> zi<|SfOHKLAm818&kE|&55<b=4qc*KG{iUno%#9|~9?X6^$78v1Z>rbQnh!?8<ri}~ z>k2MwR@pz*%5EunbpJ<qV{|}Q>JmK-1HCnUm5y9-@v|3RKJLTj8h$gOsAchiWj6Pg zNsEb=9(sJ`ujNXoKS7O5rxK@4E<Qh3WNVY={l3TLjt_gEd|Ykt#_q$l`wO3BpSdP0 zHg)Qf9a^57wjT)lUh>jC?`B}(#EPUxOnhf|>AU<9;#rgzd|mJKrDNgGnx{VzFQ2NB zb=qjNV0qL@qa{;0d*3F!Xi2;#dR6(SRv~M6Q;p4C=T-Z5g(_RWwYzk%|FYx6D1YgY zn%TDJg_p$lJ-oHC<+%3U{hL73*{A-+-~7Mx+yACX41S;g=e&P=?Ct-#Yu~>8JN57W zp8gG|e;!p!ulpi(-rn!zlw;o6m3!8`z4NAUwdb}=|5yM0|9sVd<M03D-@JSGex2I8 z?Q8!3UYA^b@!6th|8su-XTSX+W9$F@QUBLI`JeT7`!Ab?f8t#@4xIV@f5X4(jko?s zf+x;T{=fR%^Qpa>M|}p*0g<2e8;Unf@A`i$?(YAsQ~Z_wXCDi*e>dZ5?=<s?Clf21 z%I3*^yZ?Qn#;^Ck`)zBkN#8uY>*M$M-J4w8CWThi=6pZes@!@rDO$N*^wMdC>1y1M z_9eW@W0<&Y{*0diclp)MNYy#ccpIsFzfp)S*6U0~{G9`O_3dT$8(bw{i0o&X6Fa?2 z((y`WUCuVeDAQR&4tp9}m{p&AKcmF6MeA7I@$O@WO`ATlulj6WcI7bdrMM^cTWtNB zZuDiw-ZnYjm*~X&V|BXrgYW|;s^%tcbrPZMujeP%{@)~dW0^HiYmOvq-IMRN<(K7e z&P&ey&@EubIrXcM=D~vhJAUqriP~CvaphO%oBJn8-n_=jxM0<fsBN!&6AlSHTxS{* z#yfSbo+V?}@tY~f#3UxGM0pnYy?fq$YFgpjXkn=gvuC_L-Ybr6TDx}h5B6gLua!QE zUh}@Q-2LajD8-)EUCzm|OMib}Z@87Mck02Jo43u|m9O7;Vz<SY?~*<5BIcY9oclHJ z<TcfEX8+om<Rcb2f8DL;>L<%=@@P7HR_+pGsjQ4mZCCbZ@0_`6#eQEipYpN?JZiQx zc8Br?D9h~h3yC$qmi>O4@XC`yE2Fe*Lb*?bt7zW!WD$C1{Qr~c#D`tVr|+jdI(=E= zDC@SwHaEXTV%AfSU0hUk<Iuv7H~khh{LEamfNSxE94XNwyZ>fBVc8aX^2CRgm&163 zdge&>9!`7uYE9|Y+Tyy4KhuBj2r_RwAo{HLu1v_T6H*nQ`AnnDw3U_au4#EQ$#c<# z8;2b~GC$|{5xpjn^uzPK6u<k`sJl0A--^@jfBpJ%clg}LkH5`q(@=J{W&Yq0vv&$( zX?WqDW43c1Ze6)B#j=&bGe+3U`Q?YKwz$j<vlCZOEi}1N5qWV^eD4{~yIhx#6s~); zcX~*`7vJMc@)D+bU(L9?;g6i2bJdjM&7F}2L6_$>)yb?r`OqYxj9HAYr}<Lc$LY$u zq~wa1c72~Zr(~*#tjKzws@2CgtZSICQ0cY7ca@EE1t$Nq4D;z%)9`&c`=7dFfzJv* zo|8x09~Kw33n$dt2G81Kc6WnAOUG)D$x1HDRg?d%74?73bmL_m_tmg#Eey&=ZY+Pz z%pKW(_INb<yI5Cg{(KY2>83AyZPF8y%m9y+S&zJRU7zeYrF?Vdva*=EOZ&IJw0$hF zL~<Exu1el&E!MIHE0go)JiPwHHTqGOmcX-!m#3@NvfTD?y5w`I;@N~{?1ddX=e<>r zDQS9`hTrR)`al2a|LC9p!{)30_@A=oI`f={qyP5*ZGQXY=lr>A_pS~7b3gdU|4p$q z=8cvHwwsSvI9c4TOYu)koE*ApV&n|VM?X%@vY))LZH**j)D@9(Veu-CtD-(y+cWO| zIJ)uu(XRnNYFGUam|J~9Z`QY@WlHMTuN5@1r}bRsKX_?pd#dk~Mf2BuTKx9mS;d5? z*i%ANx0;^j{JoA-$znq596Kw?KfThC%%5Ml1>BJ4Uw=`g^<7|Az3${!slOLpwpw}o za%Oq*etrLFb@jQMe;mI2t?>CPlb<5>%fq}@`rO^91)8q^sDAu;_<FxvUweGMzQ2Ag zW9Rg%f<Bzl{%YISrKj!cv;DjF?yiQi!lP4f=4~(j7A=&1W(s$yQ=01cyxix{#O|)y zeXL$e|L0yw=i)2HvhS0px=qs0JHj}B*TXMA10`haj!Xa8FwgyY+WF1ztH1Z9|NQ<& zhkMWRQr%lSE3BRyOnWXW7vd<?IPuRZ)4ly?U4&mAG&ubDfc!!2^`32IyILN9y}L2> ze-c|_+{FHEwyzfbI$tS2)BNW3hzqTJqAK2P=B%EVj?^2yQskZeCI6SIz*f%x-Q3<) zJCYne>f~*kaO%Z`7p_xW{{Q-);b-A@zFhh8=DX#hO(B*3FB@M9o<4N?c4hd&^u(us ztIICCnPz{wX5#i>`Z|aEKRET~+589)HtQ7J<}k}rZtd({I{yn<cd#zWb(QJZbaU#t zjm9<25$96&xH-)Jl~p?BqJ{PespU`3ceY(QqMgIm9s1>Jl}>xHvE}DS*{33wYwbU{ zT*%*J?tKZrcZ-hQ+hZxi$A5T3&;%nZ-nz$MN)B)O)VXMhn_}RG8M#$c=dAQ*mzf=T zU1sS_+ly7kAFUTRy$K1fy;><OVWzg&?&3=)hw9aNK2N?g{bcUg{Y+!a+L*!slj@ls z3@Sz{OtaH&PHNGZ{x^?h(P_R}Q?ob!zxZvF%y#p}<h@@Ht39m0eP`aITYK~0z46uj zwDM=BSEpxj(CW<eSvw78=C9v)A~VeV#gZi#Oiwgy4>Ym5bEo9*zL)oYB~E#IdfOAl zGxID$dqZa$Hdm`fPkj=mYJ82)bT(hs3VGg79L#c|A{U!arSII!erlb*zpDA_%;htl zacghaTqV;m$?PN3sqgBIN4Pl_IWm4UjZ^SbsGB&cN}xQ_@Y00`SA*g-dn>ARH$4of z<<$RkV&Y<t&;AlytC~~3743Pv<d^=%15x+p@w0bwOcwjQ#`Jq@Znf#^`N>~ekJt0& z2<Nl^jb1xx<H=)xJ8y8WHN6<IW^GkXO4e2r!;EqZ-`-s}%r1odN)}`fJh6!H_=2A^ z>njxwu2^o^^>B{xZ0^mM@)^oHKTQ2}a?Qqt78$McuLl^J_`IzUd&Xn1DEjt}!go3R zug$NeeEctF&i6un*Q+g(=4$Fc65g2g6t9rGW4&Y3uZCkM+uhW1N}gF?yYluz(YuO$ z4I%5;=d^ta7iC!b=k?2{Pp4R`nCP1aS$LW#eNF#iethd$zti1@N!z(T1x{kWW4dx( z_d_oyM&nN11?Dr=+PKaZK5VlOKB~}_{9&KO^YRsKZ+<WG^-H@N-sZ4T`u3_l`Ygs< z{x_U!;$u6@_a^E}UIIUp^`6|Yvh8iIPu&`Qh4qe~@`&c$YO-|7%XRB^bia2JQe@wk zee<B`gw2!sC-R%@=AUz7UeiRDdsFUb%}kzg_Sj>=Te(u|#WC5MCtFW@JP4c?tk`a8 z>h(bF#c%zW4xEuL8&{?7-j))o88AWlv9S4W_BCZidZ&&>vI~E9xZ6LMQO(svsQeRC z*3Vtyv%i!mPhT-Zw^-wXO6{7`fQjdO&fiSfw<6j>`{v@+fpK+fHTeE;FK;&7qAZ;F zq9XaW&^lqQpl><+>m#<@_*$5hr53i@qEP$&<m|aeUb`jmH!fbiX`;l#4_2YA43c@w z?D?Fg|I%^<KkN~z5Y+UP4KtJH-uEO=>gd`N`Q6U^*8=_?NR-=^q_TBV>xx&pYIW%+ zRZ2PxCc50wiE&?eWXH5LVYTDSJS=vKo}CwJ+B-MzSE7-?+>p<m4!T+ejzS;0w4Qi4 zF!~8M1c_*#68BP`rsiJA8QQ5mCDUi7fyoBO!u3<W$b_*3MCf&Lcy2WLxyiC<&Dryn zJRWKuYhP5Yu~gtnFx+5h5z`#-*pu<TvF-iYJbw#s9L}+|aZ_6u{7ORYkW$Tz-;?E9 z{zg}49GjP(!8$cr<4mgREbdh?@2i>)S?9?tl0EX6x4<W~@EKo-z2m7@2A}h{tXq+k zF5xG#-t&{^-<s(<f92M%UAJIyK(KgJ=@!1yeUn9wOqee6^<VwBdwVS>J=r0=XaDcu zDI46h8=6<G(^~K$L-?9lbDht5lU={1GJ=fHnrQ@1Wtg;L)tZxMUgecU&(7?hrK&mU zQrGsVb$wN9-)VSlUw!$4MxaQp$IOZUUpuc6JUny%4^cfi$%!9NxThRqo~m+jwXE1G zC8hdzFCT({Ug8vY#r^=*hzD$)TV9JyjSTilnK?uEQ_oVZY5UfwEa80=I9Ww*p-^jc zvoedhWed-G;n{zFJv<}rTCUz-U~%H>dBI(?RK0Y$U#=Bev~5y<QO8`dH76eXXKLJM z?9Bb68{@cra_FQ#2j|7zwhH@SV>IzfxXomV>v>Bqtmux_jod9)*Dy_Ja^%mCdDeV) zgy+v*I5+sXLa|PM^i+!z8?Gs(`g=}w+I3{*Zq0RJ8E?z}T$=v!Qssfq&AR4(GiDbj z@BBEY_T4v@c#U6+9RhZ&E>SLBe$2-8QJC)0)l<HUywbEScD64#f9HVYb^+&&lRvDP z%A>U5?+NK%IiI<VSq-*3u0Ppy)sWre!<$ZVw||CGft+)vx<|auux5R9SS|Wg%8_pj zXOEtctkl1Iv}cFsL77`#d`6dV3$2=b(U|SYmwZ)u<73Hv$xQoP+}9>qYyOu`{CwM^ zTc-byb9%{#e`k2l@qJpW_3%Dt)D7<PJ&(eE=}A@I&UkU)dtt)=6S6LK2^{LrLWOTK zyS-g`Cdq$VVDT&UWsxbS$&VRc7ufW#-+$=;(QWLRsU}4qXF6!jVxBMcF*+uSM{?<3 z=i9r4<@e6E-u`X2x3}au;ioZ=jy&)@zkQzc7A?DZ3GN~<&#IX9#BBM+mprZFVaby@ zZzo;&JaKy6mI=R;+|C`4T|AX*ue5#FpTe7rhlKzCwC(DUnIc`%KY>xQGT7_j47an3 zSx*%xo&K!oaNwd-n@Ik#$^9Q*-s|fR`D$33@J#s;(^kXj?Eg4?y%`@}k=z;hWZMbG zN#+@PlJOoh6u;W(RqXh8zVcyf{x8N`EbkP>W@{^M{NLBzZ+!P*b>4$;8OF_xUE=F* z-qyMOe_rv6J}<whJMR;frdzC97V_U&{f1oSap6mQgO@!wD46%&HC<UsHPBD4^=g&( zkC-%$6lR`}eVw0Xca+Y2SFv%ItU+M+RhO6B=h=npTbwa|uPU3g@{Ghi7WN1C=l8lL zRx<oxy?6AH{a5!V4fFN|FTb*^x#v@5zJ%!fpwn5R^NZdpO6RPOUlwiQ;Pq@-yRt7| z`o`L}TpO|N%@?OXQn+@G-*DQ7LpEF!?}ktOnK9Ya!qsZ-BYVC-H?LgLI~B2ivSwfx z<3&!pJ0IK+PdJzDxX`+Nq5Uk^ikBy%Y!)4u*>dHY%4_|tQ5(N{BzI=K;pqFL;W}%} zoXM<O|MrB;bo9&-cA6>vd5elz?02=P@f|k1C)!Gg$JckQ(Jq}W;qEA!FF1MskqHuq z6iscG?Vfmi^_dehcjmHxwT*Uj@iVgc7Gm;x)8nrA{H!DXuaY`U))&5BefQ3s^5Q4{ za&AAfw=BJUrvB!s<JZ?+G)mQ4VR_p7)u~N93*!!-n7iqvce(1>!xwon3OswQGj8Y> zZT*+Ib!tZ27x}8W%jSOkD0-`Cw@TE4H(Whs%8kYgv<o6?f6DGs&VS<?F=_hh%_j3s zx!ls?KXfG_)7dvLI>o=<u{*ZUFy5$k@t?OBSR3}uF+YF8(d%irNc)k?_5}xcgqROy zresU(Dhlh3vCN+S_LQW`?(8*g8|UUM^StO+Smk7G)tLRH`S&B9mERWM2u;ySs%!YZ z_~W;eTY?|(r89qTbXj366%w|o_l8SeTz>txs-vBbCD9pg7AgH!6Zd`Txuy7#Pv6<) z!rvxMdHk_>3FCXq^nW^wK1^XQwD059PPJR^HgWy6>tcCorWsQF%;xH1eRkUCgF=@5 zYrA;meO}C=JL_L{?+Hto5q~03bC<gQv*JA~j(<%0cP#7PvF@KztE;3||CV&sPwr%o zJF!{gx2X5Z`>*^?a9hZ&wvg6;kkwLP5>{j!R%Dd6L*n$_*<Jrma91d6|5j?Wop|-n zgq3k8vY*a>EiY?2{Zmh2v+ULN=OU9%-aB(_&0WDIZyJ+#+a%ljS)PynI-x5_Z+8~o zj{6qVZ>^7PVCmH9eQIHLr`$%_KD>r?qrsA|Og<v|k0$qCxh%A=IQ6pX9S!}>ZznCf zeq@7LqJ3C_@7A)y9L?FLilS^6)YjT9Gz(YP{%RN5xwEwNK+t4W$8YJo7GI23kv)CQ z$s*36WXna9vSn)b1t+naC;Yp7Q>E&OJ->G4?&R%{4mq8yyRu(0$2O89{c-DZ(Vjas z>#Ls4Jl-TPV=cVpVf2bO-sSNE@m8fL<4s;Dl$~+rH7kklaGuyQS9VA6x^$1Vy?Z@( zI><FE&J~Zg-Jy7Vo$<}6Mw$E<3kAa;y74T2c<@5)wyW{G4oHgD?Ywn5?m)dh!@O*v zG`%;A{vYb|is(9a^gp+yQSw`+Ul-iu6^^Gp+P|T@XYa=x9y_yH?A*K0aT|RLy2@O6 zQo1*Gbu{;l;F7`(SMm;}UAX4d5;m*5zeC*m<%I4T{37ozwYq;-dnhu~Ms$&yu;o_4 zI~xu(NsH;Qn(N50uj95_y`yK-3$_y*U7wsV*w9+Ncr%N|hs#U76s1n7?Y#6>zu|P; z&gv9Hb<bb2ri}8f+k8GRyXfZ2BB<zGF-<z1>tOKt)@4`N3^~+%ZD%@j?Jq7{x&9o} z#*<HX%48LaP04!x{BG~lKM6s+TSeZiQdE<lRdM>#k)-GD8Bcj$#B1(&d^T_Hg8Flu zHha3be*Bykqw45Udtih2PKDn5AD11U=*a1uclx$8bxY<lOO3$eZ?;VNSsGcuIh|2& zjp*~I2?28!bA(Si==`vH`y0=!sUm!H>MDwwx7Vz?$Nf*{+Gn-M3A4V}iuTU>afILI z3j1EEU%wqYzV&dh><jSQ9~l&(y-ewVB<E$LEWO7Glg?cdI@dJu&pn6z@xpg}dHcP% z_ocj7YE;@;FxiFY$MOQtWdgkJ!8@02@MCpzI-B`Tx8+!N&9;S08f%%I&q#JG{}J#g zt7Q(?6oyZVuO(Nfofr7x_v=SRUt9}Eq~nyDHbuc%`Zj+JEiSRKUwZI0fxBHccd1>; z;WrCk{aRuhT&WQ0rT^u~nX7K~Pu%P}@0xB_S9|7iaIx7LIo0?t`FZ^99?pA&)M^(` zT_qWJ`c;adkLMKe=eu{F+FKv`|M9AS?t5R=uUWf(ed+pF^)XlfKlp0@NUB796~mnP z|H-L)cW)EB{y*Yv*|l9e{=Kitf4b`5@zg(uJ!1;lB4Y9y_GO3dPp)bU);{O7Wt#lF zi8`B{-@iD)TM*d)w!OUa+cSaL&l~N#?+ASF{Bx|+ShDZVk_qhp^d`-_C?OYj*gtGl z|B?D%g*OG~^v#LVJn_I%X2T@u-Nr>Md%a^P6?Q%pNdLHK|Kl~j4~v+ePwmcbQ{g}6 zaxskmLV5KQ>zKEbmbHs?@vIK@D3J79%%u_~y*KSdZrEwVb<It3^{-itf)4j69sgJH zMD~$MfJcZr=Mwha?B)6IQcdM|`&n?uT)QEkZu;f8rgFOJvF)2GHl}`=neMoJO-Rs! z<i-7|oX4ERrne|geR?d}<QhZzf=7{Elfx%1NuF}-1IIbWTaUPXw@*pg<F%`Fj>_Dp z_m)nzFsyiX`i2Xa$H{~9wg?ArJbwSw)P#>WUjB4HslVd_^T8WZa%NA@tor!g&U5`+ zzj?Z5@-}-)>)&7dws`J#zI#<0w%=cJV(OEZI*VU4PH>HtNdA89-?y`G|GsVB8{KbL zUjF>r!L`55<?VJ<%l98MI=)#kO0hQF+{{XP?z5mYzHcQR{TGGb<-fm|rFJIz)R{~3 z?2a6MyLaz-`-+y=TR!c%eo7$X)V2?^qs~Y?I;iX;mA8D^O#btSPRPnH5#IFu-MxQn zV<&bjGnT2Ioc2rM<&q=K94Q|hg(6dgye}V5t`AY#`7&~kz5Ii{u>$Ts4|X;c?|S_5 z;IXU=A1<Ak|KjGJ!_vHwvzLDfDy~Ua{i3Gx;BN5In7mD@0^2*5n%}AVl*L$|V7lVt z^QXs{>Jr~*|M|J~=R%=rkC>O(E@O0x*V{6^#MEowyk}QaLbz5=nHhdr^_2DD<ysj$ zXIIZyWFkKOR_6tsiBEnXIlg`C0k$}Y_xU?iZPZNJm7n#z5}Pv3a<S9;A1B#^!k+(7 z2sm*~-<x&P?4(r}cDzuJSvAGLPqpBs+dTQw#$SoE*HmtHY>&*Fu;=)W)ZJ@Sa?RUC zo*%!a5UXt;GDkG7zIKP+udp*G4&Ax0wKeI{kqeb=lV4tnH>&;hW45$Y>lS5mr&H}y zmn>>O^uu+NSdgV^sD40%;#T%Z_CJk!kGEWCFwZf6C-*Rj<zGVE;vbVu?@61@5j-bU zc`RO9vdi>{n)+ESO|9)Kg)Ne2ZmAVy(94-{DI&AgKI3gtUd=z2>+H)lcO;7)4M|et zpXw-Op1I^;@3Hqn|NgFH_|_H>uDCXT+PQfjLyo_3O<nQwzrfst^bfoz*NC3}=k-}; zKgY{d+wwyyhb>pKx7PLMYN|24_$uo^;i`F#&GDL_ca`lWcI@wtKleWA=%hfFrg{H3 zj1{lRxN@zDXr3(jc~$3<C6&!Zf$JLk>MaYLmaO`4Rr?Ct;+nZH&(*BiFsmzlPN;q7 z&MCsng=ZenQOMu3<4EhQ=i7Egh4W8ZQNs1%W27ffqs&L~%fj2Ay`Q~la>&<X`90~^ z;w%<4t`E9f9LK5<{&9&8-=Yn7RGLM!C#{NlAf(oLQ{_ZNU{`$k9)SS2mxr|WNB0=! zuk2{vaI&ecqD)}t!5<2VysKmT_r<DxKWyZ6=Eveh=5*_0JNHPxyC`^Xu6?n4x=t`l zq3DHGQx`W^yih%I;`w!!e-pG!g)h3PJ}_bJdf#jMM>#38Wo3azU`e^!?R7KQf~4=& zKIBna>agd=+l+^z%YJ=rika8<{rJi0vR}-K+kfcDKHkiIy(g{y%#7@)6RR}ju9y5> zzVak16LaLH^+BdDnA|&$Xl|ZrBJh6V+R5T`E}p2bGjPhbkoxvur@0j0oP-Xm;|B|V zh?w;q$#z*Jsr9dVZSC)<x+Nc$ha@l@|Nb!LoqC)~hWa8V{|)&`mprD3|5A#nIQ8%Q z%D9c4J!<Td7d+lEo5a=Z@?XyO)9R$jTtoXutg?}IJ{5C2?)ACOI_F=))A-t?AYxwm z6W$lM{lA>-y<s9a&vOl@RrCk(S1CIW%6oiVzG$(%;<J-Y6F6k6TIYwV<Tw7fb>g(@ zLaE%fjJD=tQAgNMX6mX({9R_!TYqtPLVd7T^`EWxELP5G*v(NY@@3hN1QBy3Ll(_` z-j@>pikF;PGC$s1jj`S_WuwC;_sBbTrRNVFUAo2R&81C?r!Q3cEB$5aey=w1?B6S{ zIlNhUq)~Or;iMfR<-GG%lx=E#Q~KK0ol5rZJeJIPu|(|ll@FRl0{IDIU)@(emKC@; zr7KG&G5yp<j<bB_MG8;!VkSMZ7m(%*ZePjMyZYsV`L|T0)Q@mKPTKTG_vOhS8_m9} zb$K}@2|ZZzVtw4|!;=>-SJsb;aj-t6zV==4Cba}5@h=BYTKJ27=uzLgL#*Jgn8^{x zC-NWk#V?9`?~Ls)m^bI)3mwVk@@LAPxnf`0)9o4^jwj3U&R0<JU%xayMKQmJRdT|* zSuZtAM7pk?joW8qJt3#-M*yS#1gE3kX)4F6ecu(U?sxsS(%SRq%wxrdpI^W1t<v3= zyk%NNMwr6wJ2`7bEhcZil{BqNcnkZHUm3qY{%fAI;X!NW1G!553%6`6`wY6~y}VVe z`&U2r>0ZST@!FG}uSXVgs<8%sS%0%@jVN1UclEV>E^%L`pIZCtmRZ-0Zz?NP>%Lsd zW?MA#9m|qepB3_s>?)in_B34Up~lxmpOsn{iqDfe`OIs+vPg^dnY!jJaqPFf3qN}V z?@Ic)X^Bnmk6gdGv$lv&+`Bn*@?75=9&*KxKJ0%HJj?s~rT6JOoR=N=!W4PuT)$-B z{Ko4-hXQprb8bF5za+?H`nrN@q3oMKX6-7=`)u`imAYoD!|UZS^`gzycYXFd%+F=t zz@+nor(Yzhwsrjp^UH_-u|DnOw-kS@^d@L-&{LCC%dZtFnzet{G+9PVvKFuMK50<U zr}XJp65E5=JyPeRd?SPwa^6ikp|j8I`ubESK`|Sz?(&Xe3E^XVy^_;!-R`~nulwio zv)-Da&6}9peD5>e`lRrsQr{`~_{Z)AQZxTfT|OyNdg+aVM^zqocNMmJ?N{eBRyiCe zaLJiB^5HV=$7{r+&(;Wj&)Cg(Y0t--@?j^Y2-&PWoKaSCBqp#(gY|vywr9MX%1b^T z{nsYE<KxuW^pdq1<(_-pGn9)?l+DTrGLbuS*Vt^i(Dx4-CsyPH%B%bn%J*2#$RzC| z_wlQxhgQt4`-;<oUNPU8Hf>IdT-`<43B9_;{2%_*W!L{tZ1%FBDg3tWwq2fi+|g~v zcpqM#yu9~%@AcCW*OwU8*l;WFeKg-~?lz|Y#n7mwqAXXA#K=m@r%rnGdi|FBS0ZKe zyQU?Z>)$TuioGRw>Ex|A&2F7doCj7})K+?1*Kzyr%{(mYzu1_Eb)nn;(A6r>-)+Cd z=IZ3MMP}0HJC1_9XU$gbYM(8+w!1>uvrT!uz}g8n*qnq-|M|qmNpiCY@@+GEGULn9 zF#CV*8p>zR=X|reo8W)(?M&`Ky}uQweOIa<ub=MoTYKMk#h3`Uxi48CHGeoVUvNH? zY<A-2&of)EU)|ZVy<pe;?)(R01|Od=s|nRAY}r>g_tDdfdLK8e=!%H<N;lYbf7#BI z;>li0cf~#)U%FaX`o%O}Yl+VP;@<W_=Qg<tmgX;*`NUfA*Nw;W#&0-(wd_9ZwcE_% zvO?T8!;(k3!6JgcB_}p(`29C*J>U`j$vIcnU)9a>N!1HB3vW&}w$1xgH`pyJcI-K; zbggq!*7Ea}HJYrx1*+eVHx<{&EPJK%sE}{-UYi@y&UJALcMk08vRItnxP8MJ`RngX z&dk+W|9rVp#|-5cCp)>SW=1a8>_~5{_7Oh$;G~yjtDVd_w&i*6j>HP6>D8;v+V#Wu zTlnJVAB>DTmawi(s=TDRv?zC0dTha(;B$8m+!hqt*A*-&?|*0E2a#EBeE)YGt!$dR zmSujPiR$`4E8lELt2K0#*~IhB;?R2YSEt;R{%%^nE9ytZ{;gL}v`&09Q$g~mQD;*8 zl35WqE*!nM_if|hQ~zAL=eVDKbi@0nTZgoK@f!<an+zMVTK-)-e=j+yk!4rwyXe@- z=10$XiZYWYZ@MF|?{@d;lTiJwlBr6TyOy4^{;pLrZJA@0(B#$%6_qt_++-)cIJxn5 z#V4&-`{L?Ezs6mb^nAl}ikt6=>0K{H?c5X9idBK;EH>}d3kqLPZ3s_QxxD($i|k1^ zZ|u3)5xmqiUc5x(tx0-YL|>(+?iTf(*PgCE#G&MD9BR8-W%KDRlU)i<m53g%$ufEL zI$J#ZW7W?^Im$+<=eAiG2Ut#1taO#VP+#9$`Dl;E@yUV@Pre9mQ&(Ls9=}uTtnN0U z7`}X?`r4?sCAz0sZ>7BY;`Z3sf|>1i@a=16vnO4gnB)1AVV3NT3g*(^J~w_GT5|IT z&tAo?9?`RN1CD1tTmDnd#PUu2k+ifG?|#fUD0xau{dbG6cW(K2ms?fKWnvV)-Ks@Z z&#(K?-(B*1nI%J|x|GTz-i@hVxAkoImc5m_=eBI_KlOtXU(`Rf4%&TgO3Sg23lxPI z8^tQvbw5_De!i{Xg-KuQLBaAX`7b_{h<`NewPF74w={8G=DMp*ijjLJ*>N>nA9WNz zsg~2#z4piE33pE<ed?TjRL<IP)}rdgS8J=7*}Et1sGV-}hC_GC7moBN3-}+t+0goT zCg<k(Jrx)2tgW;6*Zkb%%aku5-}?SYEpw$_-}Qu(r^TdrdOy5v;!^xK&%WAlO0V46 zGa_<FBNX~NgKPZS&Z!v52R=}di}ctaq@ri}hh0{Eo<PUyxB9>Cwft$4b9CLHQL$u` z%e*tk&ani^6|?J1b1PD4oh#pc_FHM^u@4Q)<+3OD?0Is6yI#rgj8jm~oEyi=+q(al zS5~|4>ua85lsu_o@!GW|>RY#&_iZ#g;c8l?-PCTsH|g-ww^b2#Z`Ida3=Wi=<*UV4 zaqsBIo!w`dYy8(<jLDj8V{>D@Lt4t_yGK6yn$I)ZI5BCn5Zm2=y!(%KSO0MPz$mON z)Y*M~o#y||dkcCwrr(+TsZ}OSMXM!X@0|)a$u)CReC|A-viVT3bpC_(h5zRr6P{Sx zZ~LS-xNusPV*JH<y4nR-zIVvqEsJ-lSmwFM!8Tc<<&^H1|I;NdEzQ39uF@*Wrd<4| z!1-xQEPXD2ezfdVcZAIRhXJc4)S{U>^Hj_j;?_AWO3QSfWzYG)=PlDO?dYi`=?)K$ zG9Q2VM5joonvdx{=eGkFZXe67i7$Hp@Y}hyOQrpHhUjkD@IKpd5lgPo#~9bY)2;?i zU-!v7=4t)TQ~!ew|Iz>3J2mdP*8kI?|E8<__kO~DZe#UA7K5KZ<9EIIzxK$__+8n5 z<$mpJH$4#gZ~EyU)0f0_+ROf$xPOsa+QOF(6Eub9ZF(c$9O>Yrn{x3&yyx*LIqKEg z{mXBxSjKMT)FphUaf#T)-xsQ{ZqYq&;G`PpX*g->w`SI;V}{R7_;_c>oZS23f~-RH zQ-z<Ndv7YM+)R+4?6La!!$uR0zRTkOr$uG;E7^%X-Th^Apyj`G#!|=It?3oZd%k(J z^jB+h?u=gF^1bQ2M&F*t>Sy;(ZEo+Edt;wrS6ln|*Vk|xj?zf=<kwTbh2HTwynAbf z(;}|vVpFzA7S5W!HbUja{O-bif}50YXSHdcW%<geS-&ZOYj<Q>&Rn~<(vJ&E*p}3- zHfWaXJ7%fG_lKeW(9V~^nzf%lo&yc7KT5qVIn##yN9pH^V-rtrzWRVSqU6x`sOyVA zilj>@@ISpDw0ECFS>lf)s((G^`32Wh_MQlvv*l&M6M3^6S_f|5`}R@Qp{n}2z11hS zdB#eS3kxRo3hdSR^=j_M&zI&am?<h9zdpZo{pRX_DgORR3*0T{I+XmaX#2)~{qR(= zrQ)6S+>1GGt6z-Zw@dkwxSjED&%;aWHp*wV#5PV`U%K?oA=!`W3ky4*-EB~lyYNU( z;_&y!*M6+u(r}c4{i&>K^P?T%U0yO_`zD(gaSBX|W~)!KoAW}Y^6I5Zi|psEE*dvD zBqNO<X}^DxvFD;(%Xuk2%c`Ywk1(j#o?kWRk=fMKSvwc2vVY!was8>S+k=!d4Zk%_ z%Iv<}T$=W2{;~a2ZcIM@k$aJb5XY6pE^`cWWUg{fo}7~!7;$*oWwC=>c4X_`i{eP` zSUUSusG-rJU$XT^3nj0}?R2-8I=k-ehKz_MOOLMp|L-&B9J^B|cm(X5vz0cTI_oUH zQ-99Kk|*0FuDYlS_J%~chJ@L@T-B%O)po$=)Jczq+Z$Y5Z*E?^#!M)Ek&e_W<7q!{ z-0b9g#CXHUXQJDpORbu_6z*>d3Np+rxo2=$^M}+KMqZovn#nyIkG55@ul;2u{YX>) z%#SHMdrh|A_B*%D!?=cN+hhKdQ+-VI!>m_x-~5*p&YPpOO4#^?@sm3`)B4W0a4X$@ zx&77E<y#&kKDF#uf5#nT#%9}H;~aeOLHe=4Td$Jym)P$*vF}u(*DSB%tFM2>@K3G0 zo79r==i0}N{Y?6@?w?Ma`XzL~?%`qmShh=NvjY{px)^8v*|J=RefrmD#=UB#&o)ne zDEc=bg>ggRr{|@A)NaoB`1?$)eYoEi?f?Ie{`s%Hde{H`<xl_b7y19cZO;GN&HFFD z%U`p8&6n_XYTxoV{h$A&dLN(J|Led1^8B}-`&sAz?^Cy|X8r&B_1>%h*IvZ`{J;KO z{rWHeul{_0b${i{`m$ANAOD13`Tyt7_RFz*t^V)5^gsO9f3N@Xe`hcL_k3xh-X;c- zqyN`@yB7L)|E0+Nm;O)xsL!{9v(5cQ>G7rgC(`4dKEHU^{oTc_YnmLKmsqPUoE{Rt z>*T%@uLSw#2<m%pY5#AaY4&A8idoFGZoZ2%QeHVdZ9Ms-DJ16gv!9=z=hh4TRQ~^C z%~ScUCwfc&DC+fH`PTgSb))y>V1>^7uj|YwS1jIL@?gig)6KWp``_Qcd;jo6Yn3&T zeC>IAE@s@D>tbOqbvAvA`=rIT7Ka)RtF0{g{qwE+_xJbqH&5=J|8w)P2Q7E5$KKez z`$B=+!t?tSrazpV>0W#HKi|X7nGY_BaKE>^asR$s#*69QXN~Q<WMuCC*Zbvv{q0&k z^Ggnw(yoO5xu;v%F+I=bNOeg^-Y<bIlCqDkz3*V&q3`iMdWp53*z9Yv=8NXa-<u?7 zU;6U0{H1q)zr0%_`gVW)>xnny3+I2izx;3Y%fFu5xBj2IYn}8z`TdM9`<;K~FDqB? z&G>#dI_UdG@7?bwy~}=i*Hih{-?_WL%W>TG-#f8?_xwrkv>}3Pqpg1@{TD75n8@h& z;<UGX!?s1rclK;mek8w(xvBm|z`v#Z4pATfl|TI__tJmY_D#R53;)lJ{{H<aBioNA z2DwBB_Y(?@X5H}z?^b_5qIm3HhD)2oWksVK9<w(pmdV*pXp>-R>Hq&tP*(Z1@1!#C zjh}Yv^BESZrL=I$DmYK_SY4rX=dR#y|GkVa?Rza}9^|;x!&mV8+By{;_jfb64hPz} z97|dB_Jzdl-<JgZT-*yD2^ystXCAw9(mAtb`nxH7AC2nf&-|5g>UhQXMxCqabvjqm zKT6EZ>OEDuNay~M?T($_mS+9AcCPui`Nb0|8(B3UzVq!%S5{w8o-k`+_ZGcrch&aQ zoSwe%sGe?^-oN{kBG0aTa_n@NRLZXd*X*i-F6SJuc(|<IMWH?V)TNfyMlv7H2rRJ> z3l90+pZ9cvUD@ITshian%1pd<RYQM~mfY)Eu0`)`ZrwY(kZt;}V@G6GA6fB5MA*5_ zYs=PO3A6HU%3flBEOweD=HZTr-ryN+)9-gjq+0l}Id3nQzjsPhAl;^PWlPR-gV0CX zXYM5MZ?V$7x3lzparyh_6KY@e&8v*)G{5huZoN>ZE$5rV?pqHI?u|)((7!_OgZoUE z<0aC9u}kz%JYIKGxjg;%zq8Tbw-sy1SxjDNt+efY!VGs~wc8(D#V5|S5l+imE^yw= zs67AeosQ5Ov&&VRKTnw9^}b?B+q2KEDQP7egM6+>wBJeCrOInu_R?VYA%neZ5<QaB zYP=829M5>iad=G%Z}FT3H>Y28F`QMKIOFP?#6>J;ohxT#+MIDtoKbhp;Bv~0=>5vP zkM}J&d`GA)^0ZW&N!qk2CTC7doUJ}&@H+DF9-j+)emh7#JG1=o9&Mh@6HR$C=WtxS zy**DYY0A!g%}I;&cb)i?&pCU>9NmzK8W%UV{0%vmx6WhUi-?cc`2PRy{rErj=l}J8 z{)hkjul>Ki?f?AU<!^ufw_cq+H}vZN`_Zpse*V{g9N+djR%6OZ*M|D#JAci+sQXRY zT;fOn&GM4(+b1~I^8Zg4|NmU?-}!%?(w09C*Z!HmeY=&@4>Qio_uRez?E7=o_RCe< zpW1tT?@!%-XxfF?RGmKtHgf;sf2!}%-J@Us)$G@+w=EKDO!+N}`R<4ZA6dlNYa737 z;;il}`<K4nCR5+k>%X*jv(dX*ZT|9Y-yKJhie~0A{;hXB%31a1>^OKsexC0fLn*%8 zlneXrI_i3FZrj6Tx5oHeI)~UTk=D)5vo<e(((s)%?)<TPN9MPB{8F-UDhVrEv)xs& z?EZ76H_5NQ+I9N`Y|r5SBA9NHyy?`wz0+%U&jz7t^Pk`J{)OG<>~cCY-}T><<U9U# zJLlK@F8lQMwzpDYqR5deFH>Yq#lLUQuwDH3dc~tl=fB52{^@Q1e&4anGwSwr+x@@I zAIaYH%5>h<FYkY^|M+Ct{QGr#uZS3098OegfBfXg4|hMOD5Do9SGVja;C_3;Q&A`= z^xKOQM>pMnut~s-&BXWP!rKlCCqlcErx&dJ_{#L$!9QLrgrh&K@BKW}dZLSaR$Eo) z-_3`APVRGXX>``>m~i!ADVzGn4KYH}$2JFEl<}@H`Iu7OeDc51?2I?Ft54@l+L&K9 z{U%HD{X1t1H*;)$!&^8>ceCWNeS7zxNxLq+ax%C0VcDwlUX!m~^2p9yveo2L)Kib_ zrISEh%_V=?W7>{OU)aSmCt}aTWv*{#)=gE7^f>A^yKvF;p!^I~8^uV4@6z+1GGG3Z z)S-DReD|;L@}uiNrOvSH_~0h}Y~R1Dw-1F^mcKG>dRE=|>J@00-u%_S?Zbcn@A+H5 ziGNSs#-H)8{_&ste|7(^|HV(iHQc}ZtLwjB_<wah)71U{FFWs#{|TxSr~cc2>3{hD zR}24tEmpWZb%DqK^53ie#mBykpZh=dl>O5UeqSU%`+MJXuShoMnVTGLyQF)6Ud~3g zaH*$RfA>fIUw`fY>iYegUfcKSEL-YzT8h#2_5V{|;gSD;um1b)>aY6B*Y<rq_aDB$ zHi`3q{<TNe`>)L}Gu;Z(_4R+&-~GSXcl^8T?RzoOQrzL;ului8zpme2zV-k9Ctv^P z{mIi${<{6on$?-L;7dTmU;n?lzkA((oxn@3m+ZyX{MTMx`}Lo{cx~M7C{Wg_nVSB_ zMSZ5_z6vv~d0St<GyPEQEPhT*Z0>_!tc9m*|FnC?8Rq=d*?c6*`PcQhIdTf;Oxtt? z>-Sj9?7e%ynS*bh<>HyUeNJoqKFHXpvGmW5{*J!2B9_-8UpC1vI9~t$l4ba#M(?Bj zN^369|0;0(lJ?&vJB-yP-!3gtIaHo@XlZ*JKhyQjJI#kTGr#ifDOji-bUA;g;Lk4; ze{E%N+_Xct@<Gro-j4H$N*O!5S);Nw3j{dK6HMPeVmH??imBzaS6XM#&!Squ9;j?J zdsnaPuPNUS1@S4gMLpjn>+?lZNiD{2&eT;)^qc-%eWw4d_{-i)`I_Bd&%KpkR`=Mw z;^6FQwFh@xsc0~Me6dk;kJbLvh`v=%#0||-KQBIeF=nf?nfvCI(mHxue>yk?m%4pE zJH<y{DXwzeompAWb-Pp>&pqi-GM{zj^L%Iba|)jdE3G~STU)-eSg>D5O@!Oz<GX(s zFFL+(%l!LzJ{Oxudi|~K^HU@4C;0o;Yrm1a)g5>=aOeB>_nSAkPiD)V6r~p1;JuNz z|MQa1Ta2!6`S-!6TRyQ)^Hb=l%W>v$oOced&a}3XmjAW*=+f(#V%=@tpWI_*;dJ`# z0eR(_-wqk<`#rUaGhl|vlj|k2k*~I1kdE!L39GQ3`MAL7^nMvv&r@C=MlL<;USxTE zy2todCsX&HZJ6GVi{?cK)xvXA7lkV2SuegYHFdFH$e%D*Ew{kAD}KD~a=G#<^iSE* z@WPnY;UC{?3k8CyeO%4f?{>}WH*a&@7ASn%O+;=}_m9|bGc=Y9{x0z_W2iT>N{*jk z{ov8v@+;G#HlAI&CHlq3S88_@pU>)BQ*o02+4U>sk|I2PYqAyBntB#Jmb`!4eBZo% z3?+x-BVJBtmD4#{&2;Ri?l-O5D`!9aQL6oTRW(~`^`vcU_9@zh-rlA1IQzEXM^4qx z!YSRlmCIlH_LNo5isA0$+EEa^>_OKY%c8!zc|kX`p6!2=W}|#%3dc*~!zIU<&M3bA ze4;{ZLS)JmqeXXW80Q%;edfFR%bt_7te3tmGrk#6|I=5L?`5bIm)k0zjG$@C;xGFY zm`?`FrOo<yg!AkJ(RC7!JmxR$*PJ}>2v^^09``qHX^+E7RgOOvVn6Luw*ED@NPbR6 zWbBRCN9F~;@L#rR{T%)q2VLYA?XvqSK6fea&F`PO#l9|o5b8ITZDFqHb|e348MXJ9 zXUk+{PJMqZUPPxb?%||!GB3iN{>^&u>IIuV+xtz^q>Wkh{g%sL`g3*v$$anR1?S9L zQy<A6U4QvWP2;KsJLU8zG~d!~Qh8pmFyQR@$oWO#Iw$StKkQt}U@97UZ~xp=2P^Je zX=ZRV4w#m9Ch#ctTGK;57j4xv-)<AicpI>0606z2dv~`@a*emW{a`7B$g9WSCoEU; zG*)Zb@jFN>daI_-%xKTwl7)+GW-FWb1W7$!>o7?n_(AuEhaOWW*-YDc<DY%U(TV*h zqI>>4X1>?;^TUlce(S%BnD4awnUq<qc3wbDepcliznCap#i-jAo%xKvIYLYiRh{~% z<o)Z}>N7p*&3c)O4a_XsA12-Fxn5lq_SC@e+9%8N?lPWizury>FHtU)p7BfTr^9ul zO9Eb>4mvJPJoLt+U~AC4?JXC|ZpCie>sw!+)N=mPdOgWW5_O8j!Sf!KPhN1YUw)Ea zXj(zv-I<D~cPSp=e_-|2Z<YG~V%^+x56YXBAKiL!I<K8?|CS~Ee{T1#vsq=~@#$x; zoBnYt%^K#&=CV*@{Yq(t_UqgF*Iv&3F0?DSfH%}Ccb`=<GTK&pY))y>nm1|+{C(PU z#GL0c9-jYi*}UJg=7vhl`MaztdGmP<y^<f?h1-5>D}}6l9{Ws?bEkUpR-uhzJ35}q zHZQ$3!Cm=&=d=%LvHyMTV|>5gST?)krp>8>HF0?|ERRB-_`2U~c*plta?=?mkq_*L z7NrUa8D?rYazELaQ|+d6hf8d?iHFjxr|0(tvw86euAdqGedlV`cXIYk){G}hr?)H? zT)$VrXM3~H@x2OOGPjND`yQ}<K6ZJcw(Xpn*1u1jlgxi?_Kfk4ct5vnky=m2tIzsY zPxfAkEZh5TbIuFDKO4;pm7IQERSCWy^U|};<ve%&-DTIW{{6rD_y6$k|JVQfD|PSx z_v3#)m4B6CsQmtaxAyD5`=<S0zxmq!UH|Jf|NoQSrzLOJw`bz*igzu%>0&>VYo0vn zaZB$_E^j(*xyzzq*TuK7@7Kk=FWoi!bnm-cz5jmop7Z*BYwHiCS_2y=Cg=5cE}#F? z^>^{^{+N`kd!Lm|ZfLv?v%Bw|oynv(PugM6M}Pja83r8u)-@ZX+ojY}4{nz_J6U7a zy&ZLbQ9Fwr$_(`hY|ZjA@%(o#%x7h`DU90t+GO3FKhL|*so2;G>n=2~d%bYmiODnc zyM1qM+IdI9a`NM~&r+_$Jc_woSE_z?>GDJ8^XEUj<{7#1T#@tN{i>RCo-<u3)OdN3 zCvHYdXpZ1^71Q~AR<*)rB~gEM<T~t+@+|1zBeRSD#plz3dmsDES@_&1@0YU68cybj z{$mqLCTfVyDE!A>U;6Lh^dIZ>{q^R`8)YuFY_1i5cfv67<j?v4AO7_J_w(`k+EAtN z1UH+oX%AM|uil()pfk%h)?l4#L`Yd|!iC+!E+<=d=*_t}PvYI>kT?cTeWgF{`s%a4 z&oNyQI*p}F-~VZV$kQjU-?4B%UwrdQsc%Y;Sw72-+GlfqA8UVZ|7-T={6Alh|NjvG z%<?nKC9lm-ugKbdR&(3@Zt?xov+_$Ota-WY&#H6V$~Qe-#(hSkFXdeE+kmpRl)^uc z*Vq4iZvX3-`u|^VKd=Au;JN*u-|>Iq_y7Ma|L@-U`aivEt~a!u6$<^R{-<i5*8bRA zSC%@QI{D(;TU+L<Em4|R;-ASZ@z>8}Dz#Qiy0G`&$yrg4{68Bs?po{jb9<**Bu9;= z@{7mwYvQ-&vFNENFO&3~enxoeo=blu7qickFnoG`-=w30MsCyeB&<(73)tFtYSB7Z zF~gFlKQ_JIcYr;H|6+jK>8tVo->TpLdHwVM&(;}*|Bl-KD-~P*C{Q}s<c-Zyw*~7= z(w)j5__zJ$Sk9T8k!|k1^uqkjDbL04|6P{#QpNUZ=#gbCffICninzAV3z+UK{ZMNA z%EO5tmDH@<Y|0iN$i2%sr!c$U=8ssPKkuK7#Wsb?`3md*bX+)n;6l~q&&sF$_dPyy zNFdYrbpJ`i#RulQ{`}F`zKdhe9XbEI2j-rx?n&)zGe6IIu;$43vIjnX?(?*w{f&8_ zH?LcG^2)0+qwgyp<x8%fpSpNu^u4TGmLJvfUhK0j?lH?Q{CrF@YyMG=ElVx_f9rq# z*3|2T*4fFw-+lfb!|o_QD|*rjf8}=}4+4Mx*k9Md+re-5=cxa`f^$AWoVsT<i*D_0 z=a7E5Wd~c%uP52}e}D1+XK^}1>9FacianLHe1#I9@-7#Ce&xt(*IP^T^d=_?E9Y45 z3*2zEG<q(t!DRJg0ewz;4oF6xmaox$o%&dD)3c5*vtNZ<_<hzYS=-^*lRU5OfsFY3 zcxB@a$F`NVZ8Q@9t#jL{=vcb)m#>dK=XFo?zqrG+Gws~0$G7{RR^ACRD~mnRsdGSo z?dxyp2Um*EyYrc8aqyBImB}r)(yM;_f1_{zbMO24^&gu3_x~yVy65GjaI3~$m*yP& z&N+9b{Ela3LhpleR39!rZvX#%vDrisA@9v6=CZowE$#pRyu8?EV#SooS<W9npPpz} z;y!Wn-dpb_G<Ys;Ym`2J@%lN&>1v{Xdzl@!E7!l_Et_j#a%FPi{x)YTvtt%sD*ox` z^v-|rR9$J3T%ay4dCBid+cU4GZ&?@eSi6|sFWUF_@z3{5OT4swW;{Mnns2S%Xl+?| z_S~llt*>~bJ?HCu*Os+jyRa(n*Jb|v$MZOys&<_$m!DfU|4(%D>@uU9Pp2!^i_OiE ze<<+rr1Bm{^P4kj9!Jmr_cQ)M?2qvOs@|_B6-s|R(0d^8&h_bgg)~E^rCsh6c2T~r z;h~c^OV#Jq`BfZyTkEE$z7RP6;5gHkOK~qt&8wy7p0yLn7jjTdpObu~Z(;Eq%k^_M z`zXKv|8w^l<KBg5=1uYackEWy^2_fUe2tddlpnj7@#LZIhsAHB*}5h3?>W5fomObA zJ)L8>$=UO<-><l+6ztZSIiYT{iR(M*_}6Rl9QJ*ZaJzY<ao<ekJ@enPzdwJIH_oo+ z(>{5d@_yU&Pks}m*Q@=gj_f~{IYD^Ow~yEV-~YV-Z~t@onzxVbe_xBS-7D1iv{~cg zX0`O~e-nCcBxc;cWM^S6_HIh{wRd;wYAPo>N$Eb_doQnHuclhkr*8YdCx3?j3tqN= zHs6$^(=s1;+pq4saQ;L$$H6nbTl~b&h@T6bmV9~UYnI=Q_D2){v3+WqZ7#NW$KjyL z?LWN4C6~_DZjcgj&N38QHFN3vAC0el?A}YyU03^Sdj0grEDN4#$Zq&}Xa1SH5>K~G zo$q)ej$3}$LA|(DpDQMxVZFnA-X?46kD1H+FTb>?j(RXzctdTslS}J~L`4(D_?2BB z4?8VC_E=_VSJ~0||6Z~`zyCwnbW?DMV!3?$Ja@;%+f9!1omX0XRC4=iqjTr}|BIgg z=ivW|lCQMBg={y?PkWzf_F#%1&%!UAk5iJCr94_TvoPw^c`e~@ew%h)XnpL&w782u z^|);7Jsp$s1xIAL_NZrRU%m1B@%{fl4%=J(zj!~zZ~OeZ9g|;2Go~y!(oxyEEL;EC zL}SaZXLR1ocwX2)XL8b)Usv2#E&XztU;gaj<x>x6sUP9vlr&Bh%KEu^Kd;eLSy_!@ zz5MiuyRj8d&rgi7^Io61C;r>PSNDqbc|J;hIFMog@pygVzxx0E{rmr`&#!yQZ~WH9 zCh0K;zh$`aMB%V|MRo7^_I_Y_AKKd&^Y~ke_PokxU6J1p@;~1%D&DD`&uD3^{M{^X zdS$x%AK$A}^7-^Xp5tQ;x~6G4({){DfYq&<`d?@FpV@P+;n=KHxtSN#Q?>lR6fYDm z=PfYydYE!_nYaOOww7?+#I~8nFRJgKf1<K3d4gt0vhT88*WNW8VTp)KdnWN}?)F2e z`o=5<x7OU7;&1b$#&gL<BRf&XTG=lfC7os`ZCm`UdS$qO%9fz{Pund1>dd$x6LOE| z%!g@<_LWa*@SG{K_P9~!hAq!N^)ODYQr*3>%l!LPm0h>4Y2VZh>GIO)+L&|n?b{Pm zxt7gf(BYdA7dr9uhLsnNT$a#dnPzJto_J`vlBsf$NWgWD>Dzfs_%8df%Jf!po(g(- zai;?R$q-Y)h(~RW;-P{L8z&eY@?khG)7q}ne1a)AlTqw>*1l8AgGGZ*bN8RE^=`EO z@ZsVlW3TD8-;auHb#2J#yY$0#>w$BVr#z4UblQ_8@BQDI!aEKt{c`1e8+jqrkmqpt zx4voN%Dl$K`8O*v->0bV_GtbcV5jUj|6b`+i327-PMz$MwYs$MsdU+9=lp=QOKTb; z3;vv(ZWAk1_f+HS9LeOzXJ_iUJMkMG_gcAo9_t-WF6TQdy*rp@=qZ~0h)GhtscCH- zrTw9z{F9pJt6$UiE)5LiwwBb^Uii>XEp&#QsLl(oOCPToP7B?9VAT(MEfdB|-$ZZU z+UQZ`_toY1g<y8>?r&w+3f*ocP28BKy<_sX)4bd2ob~0{vcKPu`FMlv#zw_+Ogp`< z&Pi22B<t|{4#WDL)@r%cYXz3?NMiVYQ)^Pp4fl5zpT4FP6tbSN2>!)-V8X}QneMv{ zj&S|RF6^-T5F`}UR4Cl9Z)jX6G3Q0WAJYfRejmEX=XM~XlWn>M=PSpg6WIrj7}pE@ zd^vN`feO!g7tdH_Gk1OUd9fpAe&D%Q+3R-MCyjMBhb>sFw??+Q`M`GbpC><jTUOt+ zk8e#0zpd&=4H@~1H+*$(37op1vg7n|y=vxo{tHaXlKlD;d3LvZUbyahFw%st^eJ1m z4A+nBjY94d7ppyEjA_33LP%fnyq?83sSky(qEeLQ?nsGCev&fyxb$e~Ll90q8rrzz z`o<NfPW%uHo!PKoZ`GN3mCIfm1$@?VjAzen6RYViS~*jDL(<Fz>raQ7e{SkLdUxHU z)6921Tzfl>gE6)E(dsp<^M3Hu+U|+oCYEq@JL`^rL06t$&e^*mebdS-PEk3A?{?|z z6cgvFJ=+?q$@1rG!IkJO@gH7%+ahs1j@fQrmGb>*VuzD&2PGT6yHv#!KVw7Xf#&1e zD-S3?Sl{@?Ma+ER#G}3$A%((Lg=%KGwKjWPdFL%yf4V56Snbto#SbAOnk!nJISy`o zE*LbE^Oew|6WUKWH)%V~(ie<qV)?VR;PkEFXTja4YN7&X?k`zxw*62_MYUT>(>}IE zlb_h_SGljFp)LGn|IVcxb<Dw^|F?z5pV)n>=FN)CtBlHgeNRnA?K$<HG$^ev+m&+v z^BQd<?Rn{QXU(d}(Rnx5WIFGgdzy~%%wclX$IT);+qa)M#Zt=~;d!V(_nqRGADIt) zTRa?nQ!cC7n?7VoTi&o=Z+2Dp!Gd4=<jkb}4#bP6Z=dw&(xUCswwzb)#;WG4cBX8V zd9;T8ag>MEgbRVw1=8R6Z9NltR*~oYjh3z`*Qe1}DyuGNtvM(B;kxRB!$}ubo$|i1 z;HpHm?=`+|r<H5vHW<xZu>R=X2^UXnt~6)i&HtRo;T$iVeS4Pc;+eN5i19kdt<C5= zdUw5^-GT4xh5wj-JQWcwYcikb$)f`ku0MTp=9<ox{&NiJiq3JWau=TI#q)Bq+<T(_ z;<XTG;>9f&m=zOpxf$zYZPdi3v)@f-+HJ$}BYTrg#JTnd5$D<iwDa#>d37#~-?HJ` zGvDm3o44+G_2}T*wYzvKm%a$C{y42MS^u8V3Xun;QqTYIo1<&Kr1aE;_*Ad!hqyb! zkFVOBe0{(AgY_p<v#R%r=rRdinR;mB^`m)PmSvZ$77V&s@W#|qbmK9%w>B)3x_K&N z--X^V%2k@p*Lq@aLuPVe;Dt5PH%t{B<0nhMoW`%VHTvZT_Q{;0rIs^}n9X%P-;~yW z$VyD;OR445E!Dr%6U^UuEm@#ee6Q}$Dzmq1Th?c7xpK5LIdbKzchVJWwJroMw~*@A z-k)ZCXx$&qU$Zh8SBpQo@{_+-QSV^<^cxA;)snUb5=F*`H(pm+xheJP%BP{*0z-NN z1I3TNbP1bm{pg|Yt;L+bX3h9!Cb~TBHnX-LV|^^so}5j={TCUZE%$KL{o~k}d{JJ+ zLhP@j<5mOxHF9r$ZZ*Bj_Uihx8?S|YbNeS&8JKFQ3x6@)xK3AY>xylrZvwdw$4%e6 zr8d2F-`s7F)?Qe-(%XscwAuE$nUeQjh`m_hpURvf6|p~X=`C}!ypTexSBIi<bZ!K1 zm^GJqRf6TWs1&uW(@(PZ=jxkhe(e(cCUk1`YoiROpAwa^hbH8D_R2N$XqfR-PE{!D z?n^gqlfCx-%*N}fo?FZqzaAARVk>%6y7AVUkAd5-EBrjM@w)5ONd1}1vP`5^FI&iN z-BhQm<y*Vy@G4)%dfj#TQ9YjzHAnB+7ioB|yP{;xON+a*tScW|e48~V;>K<5%;%yD zs#W{;s(rj{c6$4cu>5Y-7uiK}nT44bYQAmIc5d3I7L=(kzJBl8h@RbFRypLkMBc8x z^*Q3mj@55$bZ;+z^-lPn)l-uzN6l2{Rm?tq?pG(%hmD&(9DTP;c<WGf{g<BB!bN&b zUCy0vmN|U|;VjV|$&oIm(Gqbk!dh9I&zG-VHsk6h2j=HD3bUsqi8XJW@z(39O3o(j zw!LaKTckps-8!qI{b2oRUYXTTU%Z*dCjQ~Ni&<`!Yv@ImvaX^pr8j@w@?IutDK<IN z^=gvr$-lX?r)I1POZK~P-K9#$&&9VcK|QHypP0LC^MUQNG6H?2dFN(Ke7xSb(k!}4 zcd4E9f~3bcwC}#!zQ^|Rp<NHQr*n#y-kdk_&B|$imR8*gx2VtT*}X+3aenhzlcn>{ znk+5l>^_h-Z?A^zRToy?OPv$1yY@%#=g70)=CWY1o>y;+z|A`kUke5th_0E~v@0fI zTL$mz@EM6`6B+AccVy;IUuG;^GJV>D^(VbjPS;!%Q*!vMdMx%<&B3((ty9A{Usni^ zYulq{w%#>$*+#*z>8dZX4|!G3@_DSXLh131*N>DoO8i)7<&nUAKlzPmr_APh#Sm_V z%|-Gdi<hd2zt*YxWFpS9Mp++R0G3$KEx(kMUwF9rV~$AW<%zpbILAzv28}#7>t0!Z zw=t=+g=wLzW&68~*C%cHKWA;Z;bL#@xAeaH@o3-jrecTXrbW#6GK`c?&OW^P<3jse zlcf6#|C?M^f9RXee$mi!_gnVl{Gy(nlg}<`ycLonX0W{^W=^hB?_4(4s}_rRrH!u{ zB_?oXTlLPp-T!%J@iVJ~a*Nap=1x2@Nx(MMtcb~q`{#lkmC1%Z);gL3D|XI&C*Kjd z<I>yj=DTVg%#u8G-JCL|Ek3mOf9K(Fe=F79|9#q~C1w(j>`fmlE!%bf-50a!SdB@7 zGp;?}`zbHK-l%YMrth<tKiU6({$u}NSN-eLP8TgHw^`FZ`3qMj*^AasjXW~xV)U#y z9&byz-aX&b?|rDBZ|Rt#BEF^eaqS(&aEE}y$9{9Mvu$?H-=OWumE^E|^Uht{F1^on zDs)<~vg?LLqR0<n`N*_$9#`i`#t80S@>1(w!SBL*TVAfq`(}RK{F?Ra2~7(x1uwle zd$+jdMV%tvipFT=sh+pfyN=&Doq8lHee>Q;ySOUupUFL{GG+hucjwg(zfIpK&XXQ| zpPRSBVV8;6+$F)^Y%Fyy2+jSLRljuq&FDyW>-%9GT4yIV3R_%UC)}oX>Z^!p*@Sfx zi@%)<nx>}ee96swl~d^Sn<8S0s+X9H<&!mZed2!3eAM3~CUZrvTd<<zj411O=iYoJ z?qngQ=1M_L&X4~ublr|*nr$L-GREic5<kwUYv26-9B|=Yyv*a{gJZ63v(y}C&;43f zo?I$hV3;R(<7uzh^MWUB!T0A&tUd1edCS#^rPis8@3w_sH@|l6`kk=l{BE}Fp{aj) zK_gc_%LH?0E{!~I|Lfh){(owxS1H%dow)0vP`!WTLb+Xyr|dSA&I&eufA;I*NC_pC z{<QYATRu7SzZ%v3TfhH*w|xEU$NzuvKfnLu^=J7y&noShqv@}<@-2xAelX3HZI9=c zz58=hSQaenb-iLy{BgcpWtc$ZwXk1zul{?+cIQ^V!&ZT1T44`t%Zp^@&bZmodsHwp zcFClaN!4%vX)RH6a)=Tsom%47_psYdH~9W$FKyv@F4bQiTw!+$e0h{_?q(r5!7IO< z_$KyleRnHsH}kfe&K0Ywo!bu1{CQ2>)a=IhNnvTf@8xa3{Ptj_r-WhXwL9DAt~4%m z{vLZh<Kf>Q(f2L?Kk$z9)|OsV_{{H8?$6VKUzh?#x7=lUE9!lQ`_@CJ;KloI-iwHQ zz3#B4J<rNtZx#q_S3jPX#*o_=QSfN@@|n`Mx47Q+e%vr~^9%9&f1l~w|2n09|F7Dn z2X#L$hKCk6ZvTC#$>#D3-lLYgZrzKx`(oXi#j2^iU8@VXh$VWvPMap6eQX_fN9gjs zJ9plTzTNW7A$8}hUCqJDz1`B!v~Is#IdRe58!vL!tv`4(fFn%x_@gHhyB{4>oBT5U zzG83vx8_2zx0<?FY|osxJ5jo6=UTlvlMR=xH3{yU^WuoS{k_|>S<l}wW?r~Jc0+`T z)1~EeT5sm&f0<y@uv1KPj+pWSo4<=^n%5Z2=80LX={U>0=8j!?noO_Mzte|KUd+z_ zc0K%;_5`(Zr+}%JMMkrEn9G0M`P%1y=8VzG_D*4!;(u$t-M(><OHD{<k(Q6eH@Eh@ zd8f563Kw2pb2aR5WU0ozz&+=6Zgpv&FI7=^T~N1?rT=NwnR1z3r?<yc&uo#peCvGq zq+RE?yS-!3c79&*$nD;O1!|jD@YL9AE#?aREaN(3i*|wWnvyVcs{%2hw$NBbtL6iH zdpV6Q%A9>U&ui_lt=86ldzE)Xu7-2$*@Y#SrKJRAc2Dv6%xyXK+V9yL<W!kf{(01H zp|(@QH{_mr{O@}|+wGlhH-FCm|Kqa#Ux&ML9Yy}n+STn6G=oKF`3PN*R1%D<Qy0`! z+z~0=apG!He@`Fl0UzhK1v0fqj@+F0>td&M0n>R?%d+0HO71Vdwx&I^`56Cb+1sUu zK3_lQwf%NvWA$&T%uuE16E827Nm!*X^*bi@L*(0<EuB{mGTPqVy4CcDu#uCq>qm`J zjq^(mKM063og4gf<Hk+9ZoWUrb(EFw>G?Sc5mD10`R$Yn`f~Em)%r6byA~<gN<Y)S zbXG4Wf&Ey$qia=*j^p{3@Fj`U7V7?=A-H3~`~45gVn2R9eX;HZ-@W;YZ*x?%_Y_WR zc)=Ueeq{E0?RQq?4}6*HAM|`H*)RG)NJVM(_m^1@>^{32-#M<rGuiwc&yh2w4ePc} zob@WNp>t--@+Zs83T%WYdG6N9>ThN`y60M4?EO18-Z)j6NG!UP{l&JvC})>df57ca zr;D~<j?FGlI2>m1;*(&aamw)-8iJP$UcWtMzv@)7JE!E6$yS`(;@)qlFWA-Gs8ze^ zhk)+tW9;3*n>K1&gwK&WcKO@yxm)$-{5ifQ<YS6#)xL?++}lsbgdMrRMfB+D(u7h* zR>fnCJL;BH_ebR~VwZF~K6k;z9;G|>e-`)e|JuB!_EU~n%1zTBj5DL33D5kVd0qaR z!tx}ZWlL(!xi{pQn)C`c_mycI^l>kWw7Od+{_c)uTZv<}_{$&e?>4rVKV6m`EU<mO zK-`UN<=@F`_cQKvGW;RBDvsr%x3c(U`@j94`TwbA@0yTkq~7you~qWDDoc6h84EYP zDLrr4p?~sg-p_?!D&HR|lL)?XJLRHb`RDmo=?kT2u%3TBEmC{&r|dmut2P@=+!$LO zu4p-BQrTkj0_OWC3RHBBb=`kn=kZh7SEemkA>-n?wxvx&P|#`GAMRMsH~D3^3Ig3E z{J%y_FlT<g)cnxH9qVQufAwen|BsX3|9QPU{@<_T@u$E1{_H4ixNK+Z0?#K?=gZa^ zm`vcfv*ypKJ(uEMul@ErVR@ZlSCNR{97(^cCbz!2<z+s9di?*F^B#OYd`)q?-re~9 z$iwW}k&}yc9`S@V$E6wDIL;D@$-4c5Sxb6ivG^8_<?m98+!l*|WBz|e!=U?nhR!3q zo42n$58SA|_ww8Czwdqx-NB&Cx4!k_RQs6Ef@k~ZES$uw{JMj8yV~_Ik6E1|b~aW& z;{U&0U3qEaw$8G*8|HC0c5!`g68wDc==S@(YD$?t>#n8WXOo-b5??Y$p;+18>h$At z&t65P*Dg&yxc4yU+6SL!+1<N6vvs0<8Pnv*W~&Jqy^ODe6YX8sTdi9ldzI}@>+zdg zR0Dz%XU^*V^Ks!sQTN$t_n1QK!c5=zO*@<zUHF?ps#NCE`iu8CGo%j(&9*6N-Y()U z;%R8~WnSfxBSN1xBoqtoX-ec-Fmw7(=J<5ix8H&$x1A~|y!@1{W}82!Q`o-qEQLB% zD~|JpvAo=wXYpdk*COXDQVWV5n2IvhGrbD4S(L0l`hQ}J{QR^{q58nqRjwL4^(V=l z@;tP?Jzr?&;T*0Tj&Uo>8u#XDbtnJnI9<2BBx(kS<=mMcgw{FkND)&Jc_@9%ON=pf z9`}*pGKWY;u9liyDRUjgiyu|Cs9i8x^7HiPb)6dhx*i|%7CKG3XKKuR#zpVu{zw69 zwp2fTo$`A}-*Xon<Loz`m2EvIv~}{CrnV~%Pm=nsy9>|tTgoZ7k?rB6rCOJ_hi2%d ze`_(Fzd6=J?VCw3ORKQ@MTrTM-79PUv3LnZh<=L8;69ye$R67H*K1?hvY6Iur%ydD zUdVSh@JY`4Z`P9>8}9QMPu+ZR`S;j74l$b$PJyqEx}vF`-NzGpum5sb|6|wL;Cl=P zH-)-iN!BILVLF~rty5-nOOe|o;)crd!zWc6-Lyqd3wCEQO_lxmaQYq#u2;8R{s_HI zTmEJ}%hHH1F5(BG-zjKay3na-owzo)LfJwj`GZ^aJC?nyn~g-z%$e(bEMK_hqAz36 zAHADO1;P8cr!-kzlXrg3BeId<KuU0eL9&kTw4l!_oCaEtaxV!@*{;RloWAj3-MpP$ z2hBfAb)24e(s27XV{N%*dDEXVbzV4j^WPjU@l!gLFWgcijHb?V-mJoC>_2VK^jKHD zsp?)=Ei;zwF<+llpcTGsVtki&P<6$+4-cQ8ocjCR5}shSpyG^qDhba{PAV___+7}x za`J6wW7h^_|8)<hu4f7MTl(yRjpu<g;Q^;!-ZZ|yYM$tWGn2KgXDkznkv#GCpzQCH zA3i@gbwSqRu@Il;y?brm4(!JK(>fmNF7p%0*134_Otb2dYZ`|qFKOmow&cJ}_V5Zr zJLhE|zL`}lYM#mNeMfw$#i3cZ6FS&Z<^D{l;dJAxKe#;c;KTKYXZBk;PIIs<J!Eww zP+e+HWkKtWm#I4@m25aTRm9@+1Fo`;DT!S9`OWH9Gj?t`BK<>@>0pI<_rV0KEtYI8 z6aV_Kx~cxvDbixSBNI6_@03W9*40IfX(4Ti#`1O#e{B=}ab$PolgWI!eKn^d9&$@g z-FJbxSSx$)eE!uR6g^n|KIVx@E_I&0+DtxVR`ts;p&e%OS2Dg$WWK|-#_LyPN+{Qk zO19o^_Lr%PUbPn2RxkW&wd3dU>-&$-)py-Eagi{GiIq`fg3zg*=eI-%#yKu+I`ovm z=fb-Wx>XNLWe$ciRLi#W=P*@R8;P(V<X~z&%{XI0?ey7qT?>xJGHBdmY2tjau{x)1 zx;abR>Eou3yI=D%8D~m-o_688)sF*d4KurR+2&-_Bpk>|xO|{QdCv!N15pOGjQrin z&Tk8jL^D11Rd~YWC-$+n{{NBM7xv}N^Vn|H8oJsFSZwms>yld*#=qmj<esHhPw#(y zYP0X%l78mvcMIJYPI6Q3ZCH3i;^KwY(-E_~j!$WuvcX=|lJCdnrtJ!k{58%`OI2Ow z#rbmMofkJXI;Q0ch<SBzuAcgBx`Mi^zN5zjcaQTMXNe@atme!+mG)S3pZCPv`C1oP zf0wX+`Q<XNG3)=Y(rqUfT+pAzvw`QtR>?KR53X@<{yu-sv_nDX=h^e$TJ0MX@vB&U zbt&JT=V|XeMEE++1xE0xNIW~(m@_#nu_58op-c1AFGs2Wk9}vYvnakK^^lRmL4)}` zGRM=59d0~k(r2)oeaHI(L$EWWfNj<VsRS!`#vP9(xf%){aCqCh7o2?3ek7*mMBmx& z7vkqWJTwzBYT0R^aGZCsWMii^+YHv7eG<QIRv2+MSQ^}q3^>Zikal1X52IQ`=r*SZ zn-l!16@UGB^O&WT^-v*`0sALDkvGN)$5U4oIF!s}+N^LrGiyHk)w0$DHZyK-n_#zZ zPdLMjf0jF0lXOE8y&2YWJl~?OAm$e#(KR7Wyz{xB?FEgN3o5@93Ujok2lHlLShwYy zLw?VcC64=)GCZ29)^A|16kMUg=wUqNnEqGBmh;C=-PXrMn;uyoTlTiGtzznu#20+0 z&Zq1YR$x7O;26t;ziF9FPy8BKRG6iO9TuJS3SRJqNySlO=M<$wp0?k5`c@p@9Qef7 z{hmUgM;4d*LhBN<<$Jl(uNVHB^d%*R%hIO()D5R)Zy&MbEr0i7rn#r@o)w?wZej7; zcVd3r93y>W+1{q&9QFNcS`IcWT~;6&z3}5HjZc>~E8AcE_xx(Qys`Sp-h%cm?+&%< zS<5^sy5zJqRKIDrhhxF?b;gc0ye7FjMQ5G-adu1Aseo_V$K#u=t{j<lO-qT%NSIgO zaIy_|iT;Gps|9*%wrI`J(qG6r`SE&2^Um7YQ8VRw7CsR?+mm#uA*^cdt8>C{or~+@ zCVfkZ^k&?uF1v~Cj*6myW^4a}8=i6s8z)E4X_$U~(`xCnsn?>fEc`X4{pv!de^Ld) z^F4XyoV*}w8MdSI`1IDvc08Z>GHp_LcX*yN*Eyvod4Ew3*N^N2zH?$uE_-(5@$HZ~ zO#iA1E^j{Ld)~-=@2`T%FJ!y#T=}Y|W6t`=bfRx}R<N*d#M+q))-!6K{J6>W_1vEP zi&f$ut~bp7!PNZf33IZlT+AbtCDjuY*LQnF&AGSB<IuT$#(G_|DZ#dyb`SE3R_WMG za5}m1`jK5*R;Zgk77FuKdy##>Yf_4jWg=6uid;;R%9EcW&T+!h88b?Sug%k3a%Xw# z=8iVj?HSKEaow~&c0pY6LUIpFZR|9KY~i^0CWUkx(0KVSeZIYiH=p2>{`lb2$)k}h zGgeJg(yuk~o^$eB+QN4{>~mW=f9*QsG<!|Razz7e$zQY9>@CZ6JiksiV!o_#na)ky z$yZ~NAGmK4;w`nDxOLmTSI;*t*t%Ns+pZ56*A=`v!!q4(X4fv4tvBxPdT~%U?3<pI zX{lwzmdbkz=Ib!YTXcwAIhgv8S0|h456kW@heZq3&K2#pxoY$5fz8y66^#D=w%yT3 zg3mt^o2a;6U~jkn*4vxQu7t8&yVbezdP?x(SdT5+mox6YcVOf7CkqbDvdB8lGU3vR z3D+Ascbr*j8_z0tci!rz<n<@N-I9~vy4F-f-tyb56N_V`T_<}MM7u6psK@8o{rt}^ zccE`{;t#}kA7(uM=w?Im$BY9jQ@&l);@);G(rDM#)@jM>J8!1vw_Z47cR{o%d42ch z4@P^URvo@DDcpPMGB%xKnFrr=YRTQ5x1#8csbSiiw_i-0*-Dll-+2AVj&0kRGPjvN zVLCG5`q9wb>szkPz4~C=Rv*{cb$f5xFkX1SmvKHrhsc#9Ym>u$Oz-pUnBrw}MfKRZ zS!`FG-zbD?9FG&XyEW&Hm3E{0ZVyM_zTa<LHCC(FE)YCr_-WUgH{Z%#e!a>|bzc%3 zJUxKxwxHH4#u=>~q7%ESeq4I<);Kg>>V?^4#q}pY?z7d)a{s*`=gE!NkJOgm+^u)g z_gv5f#$6|0PAGl2EVg&0u}DnvsgNs2mbUD3F5!hO7&tOl@A%OvzcM_g2ft$WnjiV# zb+XynlDF@qH%!%gu-<o-O83c(pdi(QX^RClSG3<u4z>zC%pPGO{Ka(Vqb$p~kh!lv zd|af&TYB@&4UvG_)yz7Jlvqm>R%Cy+;qA{e^j{u5|FcQVf<x0bdxXxKuy2t>xvrnK z((PZ9Yz~!WozqwqY4YR5D@g&l`^)x;e7OGf#+_?6*Zt2js#`h7O)gM=eLQ2{*JP9R zWsOtHijVodo%gj%<Vu?5CQ;v+n}isT1sA<}x>xvw$<|kM1J3VVuveJ#->wrA?lSP4 z?wsSwm9^>5EqmW9*AlhcJEe5DM!4$4$sTEr4zA>>+$vF2ZJl7-AydLVXTkbb{ez3X z^yGS--?8e;181k~-;8f-gp2GCOt`M<aYRb|>kR=9v!XYqovwbb=EwTEY>Kew)6<Jw zAsa3%pZUaJ?cLKK9w!$o)GkRm@TvS&pnvzRKQ}h6INQJaZC!!;>UM6es~6I_Isfgt z)3&KPZ1KHjCi~T%8Y@mVF0%Cwwf12#4YB+->yF}P&FQyvjS@DBe7OFk;o!WGtmE7Z zf<T2q)#ho7V>jPc2;O4+q;%(}lw9qF_sg5^con=U?OeTS#yZPQGZxHEUhl1^=Pfv4 zx!CC!^TKo%ch8+=Ha+aDDfgZ&Tt8kH)g=VZzB#8=rrLK}Shr`|mZPF($9<ai$rbvE zy;oc@(Qm_c0gG?5-Z<*~ezhf+W6yfMg^Tp|S=H>lnWZItJWFf#tv3_d)%$FYJLebK zNLw;KeQ3)+U%p3d_7YjC^d~-j+h@I7vUAHFfx090S&<HXGBM}MR$tF7-<>VJI^lbJ zvc^-LX~F76ZZ})(9v+#{Hs{hwk3}K>1UEli`DgVZjxBn2CC#>pPRD#+ZnI7>i|NU{ zw@BpA8}`XBZp@uwFmvnKN1MOxKK07oXmN5h-^X9FTdppjeQ(C)xn;{Qzx-;x;D)Y) z_S`*X)kQkem6DrzO>=duc6^*<^!$Z#iLi@GS@GiC`*!W)lQ?-#>40}|%@c)+b2B>~ zj`(hV;`rB6jD4zf&2)jy$;G*)i|@z1Y?{kdB=J<D@R?O3r+C3`9o65i?mu`pyU*e4 zvypX*eYmFNw|2IN#e*+?JlkZ{`)Vg&W!rixiTPiqW<6WU@7Hs`o;5Xid|coDdgg)i z%GYQ1rn}|Kt<*`sQSoK-er4ND%NS+D@|R^DpI_H8>qJhHnpu2(Rjoy}o5Hp|E*6U? z+VAY{zEV-CU2;h4(!z}|j>b+iay=@kx%$YP3({}Aj&X*~SpE0v)^lnzb_i7Hx&>4& zwVYLXn0@of1G)!=FRgs|IF7ByQp)tt^wu>mx0;9T)}Cv+{VJpI)RrBuc%&-dFLsox zn*8G9JjU#d&&Ncz=IhwqJDtLnb$y1L8`I^;*!Y+0);AWaE?n`oV*Mi)qerZ>tt@j4 z=9*}~mi~J+kH6wth=P639F3!*GnZzxK8uVpTidxRv2ga>5NVUh!rR)~f45#;cl%Y- z+MPxwQv>~*9$q|Qoul0I_}gRma`~O^;x}3E7p5h4TnnpYZpdh><vF{qm32)iyW~6F zUD3Nti`WAnBscACY<iHn%|yn^@j+jY8guR}Ye_zSUp43L`#0{~xR2>;pXNHP;KUbl z^LDCDZZJ8c6!kA~t4aPcuDxd_MSQw@&5Qlqu>}jf;))BHQn;i~Fy+oTI`O5#`TZL& zz03J>{o3{4(s!?(eRpctZ#VHX-=6I7VzWN4cKCp-UHRU}lV6-Y(7orwkp}Ld?Z=Yt zY|P-UTJ>(n@44UHmTza;X5+OX%5c>sn~!SE!Y9`!8U+@prv!A~HJW-9Jkn<W=fiaQ z+NXbR+yDFGZ~x<|d;C+~_<1KLpP2oGQzR;`y4IjvQf;BCVBEoCLyj8d{d~DIw{Fnd zzbgCH{@N+WMYr^oU2{<0r?s=-&hhH%%@1Z)r#(AX`0>{z4$uBYol7ose^YroHPpkr z?{?CI)4ToE>q4r&)%@}Q|L5iO{dIr;9Jc@UBijDN9EnBDqP9m%b}iiYFC<TATi<ov zsmF!W+um@dZ|UBlc=7WE-g{1WHa%M48WLN;mSpU)-f4FF<3-o(f8RcEc5`86;*A{P z^5}UJ*I2Ag<u>1(^mcM(^t=n(^4mJ+CO_b7-faC$+V09O#vL!CW8bdH%UQE#eYx3z z5JUA9m!9RDSewlhoL~2||NQ>%;?L{<t<^c(%zkPf=a1t{V`eYked}HRx(3UMNfxSW zW92muw|f*Ec6{KgEWG);dfdb%{>xfc%o992Ym&?cZRt<;2E`JOb5#pY>pwVW_$$rK zBxv!T!ezFLO#@Wfw@&!!cHyADq0*!xnL@s^*F~?Hd3&6Ae`}TU++dk!>osBzeCA|) zYja)jPu3l)bt>(fKODId>NM-wZm%>o?Gs-6w{N=1xH(gEofh};6WwQ0{{4}TKNn@} z_QQEvo&x`gE8J<PbH&dcoD=7IG$8Vm09z5yp6~z8INmOtSh?f*!3)*TS~GMbp8UPQ zyfyEERDW}JXa7lsX?OoSy-8?f3aW84%uNb+n}0$0U01l&k!c^6#BiMqb-0qt&OI&c zzq^{|zIKgM3Ky;>^SbCgV_|spd0kPGp0n7-N68r*E+~mQ=_P2ccHUEe=GYpQ=@yE! zeNQk)NP7HZIq;5O*Fw|%Rb+MGBga}pp&4rwoLd_zvIIWfdgxuiC|Yul?}^=lB})$P z+QP8*N!My??i!X9^S4o(S6$6`{qzZ+$&=VnQIB`4RkK4M<|wUANT2xQLDy;b*3!p9 zVm&oUFOKYf{?uRA=zH=qW=1i&Io%&j6uT}?=QX)GLw){(cLG`lJx?macV3^Ub$o)k z(Ghm(^-MoCSpV{OhOkcPHVaew{c~1NmSF&|n%#~=tE$w)<1YW!F;`GEPj1{Bta7k$ zThX2F8FSRKb<WR{(~3Rdv&AQ1=awVJ+a1mZu4`Up`SIXRj!c=w4~q^p$vwO-$a?JQ zz3&f}e-kuIE-&QDtq<BE9dPS#9_OWlPtHs0O-fyJxzQk0XXf(C16|wGtgoI3^4#be zEqEkpa^IfRC0fqG)p;{l)p#G9!;>y2Jn`U;$(5bDQ#C)$HP4uLXXfQtlbNcwXIkzE zid0(urYY^@w>d$XCv|pyUDPvShrZ4!j&>veI-4(SsV*s6rtQx>n9}sLt=5G|DjOQ+ zS5!-j_3@?2={!7omN)Xy?b`{RAfDn%E$<C2+qWMSl08#Xa<Wi!+J|ptF+Rsl6FAQv ziEL8$WS92wY&7OycfmwP6+S+3Nh8g={+dw5_w`H$r6pnud~0Se$OvU%jb4`Qd~egV z3w$Z84j<>;;nB<I>IrY2z&&HiNdx9HvzeH$DLna|9xu`5d`CcH&8HtV=?l`ecCAs} z5_~~han}tCW9QRROp8MqpDa3hZL4I|H6e+$Tngg4Cs*gQO*dyfw%XC4C}eN<WR5n~ z$6?bl@44)D)Hd4D)G_t+jrPZvcYT^;<@=iT><X4B-XCA4MSCvsyK`DVlQD)jLUnhU zkEN;a>(rYUjpOYmI#2%8BelG&xqRK{<!2^_S|plTGo82hOw^q&y?|X^tD$Ma_C`gB z?F$|_$n8xu-myp1Adc5bFCi{<iG)Eu7f(cUK*n21ulzegQB|T0KLa-w>dr~pvPRV) zO4MQD-Tby`TUp#zGiluVH?y%<nkhL{Za%lD{IQvdsk)5^S23JfyoHA;X03)HtJ6oR zg_TO&*X!<`O$yn|m)oapucsT`>wi!6!^zdW^E(=Y=K1fL?P~Y(!n3Rr`S6FquO<ra zI9VGbZ})KNBAeL}`rR>?8qQAie0ltGYmAreQns|<V~JnqsL95PzBl%9Rs6!#>~Q#n zCBx)|dKstGmTxy6?_w0uWlw1Oc8%M3!$}_2qo?HZnZDXim#r3StbM6=eEos~VGgy1 z&giooA2{<lc`O<ec1asqux>1fcV(T>J?;7r&9>9CnI2zN5Rox=yTcn&aYw??UF1XI zVy1&vJ|`5MOJQ8cwcy8`lRSF)S&!$OlrZ2GHD@|A`<8{iIoliyhOYkkx(%Un@iklW zt*$Q%YjJE&c+;fO_0=OrV8cN<t(HH#O)~yl@&0Kv*4nlF!M+)b;$EaDJ@%Y#5S1Wl zYy9wukYj$p+gS(t1e;SIi^|oW{8n;k)fH=duDf3r`LE{wzlcl!r;2Z|zLvJbOWRaw z2kw0B$=!zLGo6=ntauO`#khCYVZoS94inqc^UsTXYJDrI^Rx1|@#`n{C7a7sxqddC z=b2X1mmv4#c}~%lOs$-v1jz}zPj5WeIQz`|T!X)|(U<G>m>j~5geIgMX)v~*$nfB) z38SI7Tu3BSgQdZG(+0cR`FCGvBsCPQXPLn$b0|h4AXStl?ZBRCj=#QWy;d+_ezsLW z=($&+%Ctl5OT`t;TPF5So;C4oWTw=VxCRprW$DWb_j}D$9QOv?-5hfLatlMz=H(`= zUiuC~Efae)1M=QVUs`bY>-$D4bFWJcp&^+<Py8B0RG4S)XQ_WO=?~jWsY)AZ*Lx*T zc$1!8ULkf*?vsF$V`7P|wk6-)@8A9JwErtMe_{Jb`ctfMQPJ@zu{qoeI3=Gh-}dDA zwh$?wxxqKnTAj9BIDW`6LrN)F=-x%ISn)^gx{+%WH4RHAT@RbFOfxm;EmyGC37M1U zN>01w{d#mS$lF1DpZNu^b6P^ie<wb^el|e(G;b$cLhgjuZ*=ub59#0hKA~9kV_=^Q zo95#9Z6&Kj#L^>0;_mzIRLEO+fN!ob_oFJ~&0T8?5@rU4@vk{zRq0^7wNCCqWqR4# zJ(VJBu4hfStsUVn$0}(SJzeYZle(s9du4kjrc`uJUT}N{=dVwxb{FG(*DCY6naRa0 zk}_(QbB?oP+*|$TM)lQ-lIr|f$@=lfSl=#vlgVYX%hvbc#_JBj4`kiu=w9Jc|M=q* z)3KuYhgjzvb-vax`^e4Ie4|MZ-=00jQag24z4G~cH7bX1&z`{fOX`F`>HQ^B6PQxe zt6GluEtKL+(Fl6l<Xw^I;m@6spSpQ6caGdome0I7r)#dR$*I_<7ILL^{f#Q?6887! zV`6lF2le>>v+&@a!XG8>s&U0_*OIBO6^nWoa~l<8)^_;ceyh8_qNIAY_VGCWzwV2c z=4RSOPEk1RVDQ8=LFrrPt<bU`oMltzx;XPzc*zugE92XxEcox1OKE?v?XIn%!Zyya zuHReDKV%AWTL0rV+2dlS-O5<Ly1g%g-Iy_c_O_*$w)!$<q|TS9jLp%V{ky#MFz257 z^cUHitZoHo+&aZE@AkG;%p7~0gugDhxrm`rE>QhNwt|C7#OZr6ApduB{@V2;`R&G_ z@5h@q89ByJS9YylbERLzF%q=qj>Y}jCfiugw(ZNcg}<04sCG`+w*A(mhi`SabN;&Y zTG#ITrX7tJ`ram(3vm95I&tC3vNYwxw=d^#{@RscHhbCW18N{`H{CK=SH8_vcIZA> z^k(T*sf!(E&liQ>Hg}8{-ro_czxJ67<M&HmCRb8|qCT5u77Javeq_RR7X#g0vqBcO zd^ItAV=CxYU2|oL;FNxu>exTJX4{ir&0^jooBZPSBb5y@@r$atbgr&m9p1v}*Pffd z?eWF8XUqEbveg_(4;N!@zuIhm<3M8DUcGtZyT2{XTiYx>!$`FB;(~8t%CVJAdTyM* zX5E+>tnQHYr-;Y*myU<`<i3bRVcV^e-ixfaJlL!kR@`;zc8*xS@sc~ooA;hm2nv{d z^wK<q%x=|+S2wegp6uJO!``*|wy}W3r(JJWy*b&pZ#C07?%1CxZ7w3wdnPPr)nQ&f zA@#*-AL-rS7Fd-YSnD{kDT*ca<E`rbpBO)QiXO~j{Gj4={MnkI$K4Nvjl=szwr-cd zFfHN2TZZFt?7_#j?v%+CZ%g!*-2N)brOzaH-J!6<r-Z*O<vgyZUR{#?&M07$<+m(p zh3ajq_x)wu8V4HmxR~BQ`PN>R0Jowyr8{pVUDvyEROpV;l$9$OqdzXSs{ZA>TYzKL zeT#2dVGDfO`}5eDtSel&vL^jIJWnDsu;szlWve;`_jzabXT6ou(6}m7ow@4c%-yc_ zJH!kaUi1532;XIsYwSIHnQr6cEu25H7Z~wX{k<C^K7GcL^RYfMo~L`2+1JiH7`FcY zJBN=hPK_7(<~Wyc`TAs@yV&%jY3t9+7UntB&6mkHRbTw<Qjzl7KpT#{Cw{ZM{SD_I zZ~vF!o#nGD{W<fInaqoKKVB(avFWZv)#S%FPjIeS@lnz9_pwFd-y<d|=$Nkv$*xj) zmbU$FY~*X_kCPoT4c|OHeDUt{iS{SeEGrGSEOpZS|5ZHx@3-au|Hl7ZukXJke(Js- zxpty;`}(E19~P?w=FHh|yw+*;0WX7{PXt2$*>bkIE5F~+yP@xPzx>_WCvvfGz6c6l zPr9=8k;v@ZKmP9Y%KH73?akuPmtNSPEl%-0b%yuOotmsA8MFW0a@)QA+S{)W_e4(S zJ|mzay1mxq+P%*HXEla@SJb}dD9_Mo+u<$9zT!dQD|0im>$g^~PWYN>Ak(zpl|$qG zu`lV96(tWmx%>FolwUfohE_I{(sw)k*HWrme7*VfT|b4peTtzAYO7zlXNbRKnI}DK z(}ImJd@7ggn@ry{Q}MIX$qt#~#h2qE<6o{VyY6^XaZ-rl`@<O_PO=Z4-F)Scp;p{9 zCA6!Ur8us{YVNzN^_#E7Hx}>cal0CNc%`{%q-Ee{olQsQKMLLGV83S3%ZqGt<V74k z<=-k4EIoRpg?oO@+iLs&7w`Z5w0QlT`rpUr|9i>4|Idrnk=K~y<T`tPG^k!ZAuM&e zNjY_Tn$7Dq>$aNz%3i(qp4N=@;*B|;J{o6_U2xC2ReI<`OYM@v<esSXlb5{fg&y6X z>tmh${XzZT?d!!d=Hyii>pI$g?-ez;+;urJ?gC%%w)#k!N4=XRmY4@fK9PB+k=2pQ zAz5x!Ahw+2_@;}M$7i-KeD0$oJ;Ss1=C!#;cI-7RVi!EC`O@v)fjb{$ly`n)njG#Q zowm39X?Sj!#%}(FJnMUV+1!JFS=_9A(H>~Qu_rSnrJaAyv7}2&Pw>tC<?&eUtnj7k zf-T8DYoAD7<uTeE%aI#-?%TTsbAP(6zt3*EO-qL-Ip3%|Mz=&I_*dX($y>#9f4qAc zH0^XtUnftnP1Z8WvVT+me|c&CUr6`T{F?8xUvcT4o2hT|)bnuO%<g4T`I|Ry+{hT= z#w8qJ$aR#n$KoZ+%->=k)pKuZm^to}Ju!9hshw7v!sXt-J=>K2E>g4jt+@S9=ah}L zpB_%P`*-@ih*WO>cPYh6mX?Ft?nS@O$y>Aj+b`RI)x8@Rn(+5Cr59O!>baA;CU=@m z=Kj@ArPe3RUBhl^YoA#1cGp_H83~*V81`O$ndbPq?9Yan|6l72gul)8*yB?^r~kX& zzUy!DzL<sYUQm7Zc=c2Mz30^2PH}HPed*t&d@gIdpC|p#?f)A-bCq1_+0q*djBgs& z&M@?QeJH&u?b9@S%R2VI|7ZWpcp@=#k^KJ;^5^V-1WlWE<gw|8hF(R<z^ju&gz}UQ zOcuEA<zyWFcfYDe-03Y-#ZEh`&yYCdc1Oqi6Cdw2-|bg#H!QL^7SwmHQJlvhcK5u_ zyC<U_e_qM-*tqvj-R{lX?nS<L)+%jm_@vjxvbaQGv8+7b-t@Q?q2HVKKbXz7VuypI zWvaySx%Zq7r#|+drDyIJ;C;a(OVFv#)%2W&PpY5i-j?@Ft97Sb7Je6Uy5rMp#>>om zWcM6+CX)BWCBXlRLmuC@f6JP7KJmKBY;x<#n{Dz7-kvf1$EbM9cKY)@7pwG6tN%)P zwTNNiN$&LHvt9G8KH4?yOZxUBX2q4BgG>u|OQfzj^MJ9BFOYG@v<Q=H9Fx?xEfCtI z@Knetg=4F`bkd($Tp~_7H`$Z2HU4CJ__S2(@4vNF=}}RrSAyexWBp1=?)57_6hv-U zuvi(O7s<ame2c)0@~NMiHOm@H4s&hlSWtFe>sWA*oHxf}TTheAyI3n`o@1T+@zder zLMs)8<5PBT*(&;P8RO0;JC(G5S?_$k>j>kCrLpW2fB*Z?b@8UBVXBYM+Arr$_Zsfl zn96W@#VfPT+4+x>jDK#Lbt8s(C40%kT;5Bn-n#SOxEarQDa~zc!RztRTQ)m7Z_&0( zLW^Il4}ZT$M<tZ;tj~)4BdT*))jYSpwA|4%({hEKretuLakiq?GS;bPJ4=*etfWNG zJXLd>9QjFXUtegGx_VJ{#xjnAXD6rLzIpR|(9T6EubZEpdRwV_(L0Z!-@8JlvRe9| zo9vkw7S|HFSsz@!Bt;2`$eyd&(d2z~+9R&l3GLe8`SUw_`*}B1|K!%p-*u;9|37`F z6R~=QlUR)RtWh<H5q0<&*d!TqPefupn_|7X^vo{iY)+nVP>1G8sY&x`aEC@hvigaO zVo1K0sNU1&D|r{RcQLF}wMp}Pb}la{bUV-LV=M0-c$>2D$@@Q%t>)*STAKR6dz%6) zKYXg0wd`xtvtXvRY&E;SE@GN}NBrB)BaLS#dak+Rw6T2FR+ex6s~L*K<-)>uN$6&C z_JpwpZ1A}>Y30$3NbiI#S`9H<j=W8P_H#81W-nXTP#K(XK&mC?z>(I4@9%Pj23_*M zbBIxUsYpR_i1(C@Pa~&(*?eM^NWtf851v|<&T0{hNDgV+UgP(SVeYaMEyY}Z-76MJ zY-($mzCeZHXEuB8AH8o{5(jM`>o$H=6W}?-+ghFC+Go`yb<bVF=>)6KCbij&&wLNo zx^cC{9I&``jYl6GL<w1cL^_$x>k^haGA3*=kv{m;xA9|^K$lLU^S4dY4itnks0CX8 z&a7m(oK#kE$@W3V+`mmJbwan^ZdtP?Goz9#Bw@>K)|H{ETb@Lm=Xl4N&)H+%n85U- zuRKSM=lB{$gBZR88gr!WZ*aV8*xthT=o#~DhC2PNH%g=)EZJae@ZfuwmRt76%Wf6^ zk<Q$LSB_=K?`pgA^yP-ei*_a6AEwR8lRjws2<#)DH*vx*mv&3-`I04YhQXiP@(hE2 zqvaY$1IC<9aRCQDyl!PX$YQ|v%<zzPS^ruN7WRZag~m;@pY(3uSZK_av!G5huHfrx zCWGYlE9*SE9ye^>-cxtOSC?~=*1kQeTmFb${W^g`dPcg4{*KCJOa_kC#=4$GZQ;i^ zH-1ZVT=v-FmoPiKy-$ByX}nLMbxX&O4PudZv?6YqKfJk9g4yMy$nw8(Z>PB5W@?_z zwRpzP-8Md}IW|e?v7LUxayT`9%Mt(keVc6BxR_fcoFaZ%HdRijpFKZW<f6XZ>I0x< z0MnzjkE}CFI@meeqPKd(_AnuV;)jeI@AX!En6#bcxg*n~OV09ryh(B)tt*Z^`mSKR z(XEkhQ}t#O#v*kGrb&&xoCm(jc?m0&GpQ&@-k8CVbM4{nd6jMsbL{U+2mDxbdQ--8 zhiRNaA0%RS`Sf!K6h!YSw|u_3+mi7S7r&l<YiH&^p-qLCgTF@WoI3S{;X{GG@!@|q zS<fR<mWA1{Pn*v9YgWkSOP9CY(!Ss{pS7kVT2)s2o^|vT#kC@WYj{*&WE;uqo|<4L zo0zKM7{69ymg}jnvoba;;r_Au%A9Q$wO5)hZ`j<Pyxx1NTes1Y=@~6k6&dSWy+ksv zKYTm&*PJHlkD{*^C4S9ae`MvhZw=Edp5DkdsPw34ay4~1wtYnh%OBGRX*Kc(rm0;z zA`~X5`a=6^`WBBJVe<v2ePF3wD)e1!d4Jerxw3C6FR~3PBlfJbjTY$5zbf|RhxV0S z%NOq7mT`Tr^oA|mKUV8J?TcOd@<!;aP|o8U6T~==AC6YBag5(5;GA+b0m^yVdpkxq zX0_fKmRjC0?kc}@|Be$s#Fly-h~LNIUSobh>}^U-_ZIFS+H1wi_V)F~u20^}$N1*$ zLeu5SFXUz=ukU6)waDicpGL$&kq_5hH%32Mw(dsaPR$4FPrjVunwGUZc*7o_3)hc^ zE(;0V{6f8$LAdhR32mA44|LZS_w1X;d-wFMshgi4%sX>)#nhTN7Hhs2*}O5)lRUS- z@A&G2PYUC2m|VMhSTCY@YO=n4{hj35x5WAL1AnW%c>OTyy1v2<<KGAM-JjoO)3{>0 z?V0baZ;W#+IDc{R1@3O&l~S{s?_#&?tEekdx4hf0N^$<$bt6aYsE7IOgrgn@;-h*# zY&$n?=c;^9*&BP}L)V1X^rRQw%V?jl;j@}!Jb&@odr7OKvKM6QI>)_Kx&AD(r)m;+ zjnv_b;h)u_=a}y@mn?h4@gv)y_`}Nyu4!56(O_>jOx-8Fpv}2?(&oa`Ym|2L$Lu_% zr>~(JJ}>ru&iCur!>=!#F>^tX<xdp}x!yg8%?_F8+1HhPpIBWYxNyhgGlwn|PceGb zk#ghslIs)qnL3>=eUSXWOS+Po_3&kx*4NdOGw%PDZT{{(%S<fr@tLk?mp$r^-%BY_ z@|+uSW6$nQ8#ncxo_+j3ciHAHhFrxtqUW~uF<)PE!ZLGa<W1XxIf-GsUp~wK^-Y`j zd48RSu|Ywb#}buwYuA4ZubN%3`_YWPNw2pE^Uayaxj5srPvgY;qjQ9Ae!SqR{ZnuH z1~0FY?FYR=iz7Z?+n4xc{;q|b^D|HD*lF)yRdcV~NPB_y)7?UjF2dq()TEr*PrNI! z&8$m$+!B0$zRf-3fSxsl$sa%73v%38I;+QF((S9?((;oxUoVcHYr4Z&nrr3PiuH#o z52uLj++kv|k|9f}X2)rswY-}nL95%nBUknF-HkZHdRCfGF80}UjmgQ8Dk~QWv23{B zZawS3il{k{K3#ojn6hTYSv9TPH7jg0Hyt~idiGiTpXd6uzn<66-QL&Y_^xH!YFpPo z#r)h3%u|F?m1fOk(%Mkbc6%w;o*znnMN4<wZhvgmR>LSMXLazwnG>H5@@{qs|7SSw z(kecl;3N5)_io&FGdi*`I(EYzc^;ok@s{KafyL8Se%s(>V7zJa_j}A+LIt|Kj_F0p z$jiLlbud9pVsF)~-G}X+Vm;@tS=o4Nr{m)<JIiNT>L2Uf-uHB+WA3^ZS8Z)=TL-g~ zSEi+16aPDN=064A&CA;VEM9fB{(rvR&%N){SAE%j*(WjEYL4R8J(<hcZdn(uym!MR zJ6HI6!_(f9xN~iDcsEPS%<f>!nx@L~$iItYPW_K~yML?uja(VNPibk`v-HVVWp1G} z`A&h?jw#reFbQv)|Npc7KTxOU|HJF&{y(@q|4;q@znAs@U;JtQ@5yuff5-Igf2}$a z+PJcP$*$U0uLbIZL?!;|hS!&Vu;0Pyxp4~bNBQ3mzp$KLT3cRV^s#9Bn>m}7geMy& z{WUtPpnfX#@H4mc+_iVxi+hc7bp3)dw<+xX`5@!}zkMgK@x6U@p{iX<T<7B_pP09K zYswl}8y4#AxBe&?yW3CV7^h6P5y!_jJ$oJ(MLkp8aM#Ih&!11+|56TZx@NWWs(8WS z)G{gVA6`d}&rYco+ZJaXqxej{A<R6dQ;F4&eQwv<4NiL|WZctS6*^62cX`6<sV5b@ z_Hj&}v{$4uOG>>u|DcJkaG>4O%&yXDp^J<biUx~*ew=&tlV7!=q2>bpM{jwAEvCOu z-H|)-xZ8%#X|mD_#qLhqus~R#c*Vt~{+7ajQy+>hYd%@q{b*NYnWg-V*kiua^C#^% zo-^z7vIE7j%?V}?y)(kAwXO#APm+#myKK8pj?MmVsX*&WtH|lGVQDtfX8HT>2z1S5 zjxQ2kDB;OjoGo(7V^LIsY766zl(VPg-}lX{oSgK^)41T)$rYcqr|YKdHC;LR?Sa>v zvOd$+?fAp>NY%SNdYxq5NgYMax-FZ(HtjmOZPS5Q3D1sBsu0!Fn=8J${KaiWp@u^~ zH;!e<T4%^6Z+Yo;a?6XVtZVtFwX*hYefeH`DQEc4DYIf^X8C{jEpCfvoA06a_ft>R z%v-#(f|+(mZQ%NCdb;?P#aeNb#X=dyPlR``NDVNXXU=+#cfF&=nIrja)3>s;t!6sm zdiv5Gi389^lPt3+*9!H&I$;6+jOPD^UhVj@B+&QMO6f?=h36PW<RoTH^+?lg)KwRC zm^k;jq<G1<HzFlw`t#(THyJxXrbcE|eD8EWx`OM~jO{GnKC27(FeD3~;dtL-%F+f} zXKA|Pp!>z9>kon%XDl$)yx{rpkob!$3Nsk?eLb}1fx&KmPM&Yqx`VDt$X?Fs>06rB z^DM*Ht2%hchoyT>In)|>v;5Uxujk#7wsraAV`^KMYsUPzby<pKbI{tOr&+YGa_#lW z5a`m5OFI7h$_kI?n)#fu9}Er#Bs_l5QSvw|&!lEAd-dNlOTJ0kZaN~q#+Qr3FVgu# z(%PH{J4FPPzxMV@6g-Pwy<kSejug2E)fbn({(f>U!_0|1IWhbB*+r+RIlN=>a4_0n z$e6Su;MUybkF?6xOz%}Hv%KEd5-Zf{Z>oRj_@l^&{&6lUpDl_XzE{%!<61lO<nPS_ ztdrX`;^l&^_B>^~=$&k}<isiAJ6F{VS)vQyH0&(7#cO2PcSZPcS#i$%Kev{==U6tO z_1BWNZvvjHmfZceamHp&lR27>@!cwif>&ooocIwonZrMON=NISDBJf<t|wEx<ridJ zQ`^W?_$d0xvbfIz(`GaM+f{IR-lZ!uIpvw7#Fu)S<%zKd>pQV%&tUp@Ys%(RdtT%i zH*Wh9a6{*o`0i6aHp^COYU`vuVY&a~WXKiQD{nT1PB$vpb}Hmb!`d5@)ALg=3OP0D z>Bv;e{&?Zm=W4ggb$!Cm6C19pu<kngH1c#K-)<{)&;q)s${SMJ!LQVu!Go|Ox5X+~ z>c7}<M&!eF<&T?eLszQBv0a_QQz`pK@p{%(mbGu#3S=X<7hPr9G&kha)QCG=@>Yy5 z+$?M_p132l|G@#3=rdQmDw#hS9gB^s>bQJyk=pgS%Qno4IS@ZN>O<N0lvzBD`6pGR zvVt~VTGWuGs-5`M*fD<c*|o7BubAz4@JRDwfO!0tT>G9~9MK;RcZ6J7(zf(y<oc@{ zTIPP`{B`S!^QQMx{8o0S9Mzob<Uh6R(!9O4)3<pv=k2oiwoByQ*5e*~^Yk^;g}-dI z=-gcWU|snBX1mVSmm94Eh1%ae_&Za2$MmO59-U_nEv>mSt0HpBlr7(4bY3`4_&4>7 z$mXA~S$3x7U)^!}oBV@qpi%LZj(d(9mObAxsdht_9%xhMq}N7bl`E$gHm5FY*snH^ zt$JIJ*+oZR$-cdMjWf!&E_)Zo5<c5V)U;6VmMzz}H*&1kpC93!{~<bMsn|S*)2CQ! zeY4_k1<#6l=^e22<i_i%n%j?i)T**SO=;Svx3Dm*dF|C57B3RA`}XVAaaK32+^y=s zYU~&<9(K#Lr=+Y&+RaF`bmn`r^~@_S%l@!paE=$>J~NK>O4bsyI*EcAWp1_SYvTFu z-Ml?n>8viJmWxbv?3Ou4t1EVOHScX#f3Uv0XtVgerK`*?e9-IKbE{Xd+BopK<APvA z$N1@=EmuE`En8pC`6GMN^{v_aGJnSwy!KtRP)*&-?0eR_t1JGn)W$kZ)Y02hB_s6a zkoJT1jOLk>x`U3+$rN8)bZ*Pa?0`#_IvPIrUal#-{=t4j)SSX;^IjdDJ9$%Q^+aPy ztAiI>s+U}!_?oTv=!6pIzee7>yF--^|4_Vn^lsqmrdKoXPL)e2%vqSH^4OtL`-J4r z#^+v}cE6W-=Bc#Y{N3${DOKhk-+d;!%;kIc?s;fUY;L*vHM0Xes$83v21m>a&u5dn z^=<AO<-Y#8g3r#KdX_6Zv)kHC>DK1P`aGR=Ic9ag9=`Q)tNpa~{oMNB$M^rZbbtQ; zgWDtbUSGc^XOUjk-S9xR`#otpua;Q<J!^JH=9=XtCmqIwH|w-#+dZ}DX7E4t@#~-X zef9sI$M2I!{{5DBcF$3rpZ{-GZ<jqjF(+`%{I8;O=4|%&vK3P8+9l@JyK>#Cck66x zSH?!#?%iH2B;~cl$WpaaDrnWIIc~PU9x|}KVL!Y<{%_I^es+U`f&_^Vm;W_<7Hs41 z`zzijeKNu2gPN;GWT?-XlGI5DJ4CgwMQuzvy36Chn-$?5DXkGwUs<lWKla!mwOG#o z`BMYy3r|lnGo~?m^%cD3VLE=F-TM4(F@dQipXV&vUCm&X^X+qJ3sa})V@Zco*Cf7i zi>_&Vd+CP$$G)ph_YO>-8NDL&RoediKDA~$1)kuzi_!O|ABZ^|{H^(+;O~PUzWhyC zu=>f`hk~~co-1y4nq`nRqiy{Y?`fCfI#2Yh6Oqo`*S3Yblqn!}k-*QVPW!7)Tc=Ns z4YTc^^1ZX})I^h?pZEWi|Mz+S|M((}>V5l9tL7E2n6PW|4=vvp@7Mm_$1y2!w~36} zy^SINx*2RcA1NEIdy;F&q9i7Iec#@w-Q2Pb+b-7E{r$9cbC%XAmRr}J^tD>*=-7Df zSo67Lb94InCl}0jy06W-I?X;NRcrHvSDX5SF2}9c|E*IxMa#?X-S>H-ia#@c)vmC$ zJMGl4L-sV+hdVdlKb>pcyD}%H@#nPbn-@e>eq6&ab-}c#&#dhVVXL3`YwrzQe|_@t zuN;%kb$^;%dhJ}%`|8`}_jXM%SaN%LVCx3n<l8^>|NpK3bN>Io{lDw~t^faR|DWCe zjY}sN{+qJ%;ETm^_a*x0_Sx)8bkJ}2R+uN(^*~^o_hIixvejX~zd7z%{Kru1n|8gu zB7^O=rDcgf`CGRHT`}l2nyeqGxOIb(zrE1ZivoQ`UqpADvo5I8Nm+W#_wtIK+OtBp zuI~OU9K~~avGs|F=-ZLe0imZolI27>70*sxqA%W5^lZtyiT6E)x}JL`9-kh?E!?SY zH}M_MVaCuEeZTnc-8#8esc-fE6KfUu*zKy1UWnFSqx-{s;(y_2%`awaJ~^&kbVS5M zM`I>8TfcEZXSax0$1(={tn5cEe?Iv|Y9@%z@|(Cw{7nhV{S)*2Hl7mK>YVDD^UyVH z>!$voDeSrj<>!92F6U18*=iV~^6^0J#cKvxOTwK!8A7(K@b2_g{<?Zw+UeVtn-Wgz zns}{xvhWqZ<<`LaZo7oEToptAa5z@V_#G{qVPm#6K>MUkSG%5O{?V;5mr~!B8*%Sg z(lFV#?C6mL(X4y^Z!<XT&d&11wZiAb)eZO5W}Uvab<%-3(G#j4M0{%&Wm%$7H8II- zqY96G-g41H6V-S>AJjRLa6+Torn5*pOIYmjz6objj`;cX7OYto>65mkwt{W0aeUW= z{=}vCeFdLZN}EmLsbz7fOFbsP=n%_8GjaQq7QO1y+f3gz9=X&TsUS9Kx@)NN()5?g z=Po{+bFrlP%dMm<D}^4`P0rDOA9J$tv&7T)0WCTgPZzyf>h7y5?(^K?M4a1;-e{f& zD^{j7SPF1mynETH)H?E&aM<rDzRmvKVjn}YKP&P)yc6~G;}*eM)w$t|9pwc5Z?rat zB%iw(acEht?>o0cO%wJSyV<F8`ZwK~+Pi<Tx3yPX6k|dEN#?+bKWyeIt_so*cTHeC zp<Cf;cVgm^MDLSLGguX*qjWYLyz<HG%46Nbe9~Tfrui@gu-uY=5EjgF$M;H*(H=vN zRt7euO%i(&oo_y9`<s@3YDQMvo#%|*E3fUG&aG`+BN&i)@~hK^cZb?0HTE)`Xt~z@ zb4m^WgdG>Y9S-?=jD36G7VlS2Ua&IO&XN>US-0$5-NG~>f9~V2FPP<MBplhzZp>?) zqp@+074xCwIcZ+kr={<k)WN&z`Jt;%75%5Ia6K1UpBiP~bx&~9y$h-jp3ANjJ=3af z6#wj#Fq@26G^<2{rtsf_CwGkQPP@T(n872;Ywxr!_wy{5KIV5%FLFOw`ZPLPN#fJ# z9nN!Secc>3{cOOqyY3v7rdjP9*R`JVYCqVh62`Z><GX^%9}ORe1F0nwW;ZCb?Nj=i zI;GGgJjzYYy?sKs%GuRM)1Dn!<TH;?alMCDdg_!DsYTN~I~AXZdY)ax(;1T_Hq(Pg zalOaY$kaDyuFjcy@|@z6(32YLc)Dwh3TI~YB&_$cGDy`qtIj<6<YmD(qJbqL&-l|r zWl#P*to%Y-N&f27UyoUqgiQa+@vUpg7I7BFm8UcP*(T4tvd<~euE6UQi|YKwpk)hs z64v`@3bdwZYOp9x*Lx`$!n%;_^_<T?rbNG()AWDFqTXqjAXs#j35SVh>MfI3u`|tN z55`S&O4CY}o^BMgDP!@2^<J3=r}Qv$W%C3nd+C~0cx_^+xW9PHrV9*Op55~tLsjOT zl2Y?JedXANaE7TFsZ%qL*(9F2(xZH1^(5~Y#qQ5Dk3221V6AsG<8KvBkeM3R!tt#u zLh#Dn2bNrCn-!mk8fLCc$vwA1b>>#hAKJl_JQS^1O*@}Fnmo^uRe&p*<?2bV8@sI{ zB@f0;d_3PM^5opVOOE9UpU{5vcEO~bmhJ2(_xK)+pUS21YTcWizvP47zj3~yU9^As z7o*m_4<^^n6gnI~RVdBt^`#A=XHu>&?R>DlBYU#fttWeCt6WxNt#_TGn7XXMPkd4) zC%@wQu1a53-%o62CtW<xFHrj3Z?x)(nf%NUNvAm8tCxb-L`8Lldaq7ewbW?VlTh!O zE|Lf11b44DGAVM4pBcfUxZbNXvDN&BcPl6YJH9Oraw+1PkRs@LFrG2zkwQr83m4`U zN7QYbSIwx~Im?-gcYlV?%C!4iE;-%gWAJd(*!=jzC*NhV>P>sKyt=*mo_rNMDdTy5 zftJk5oX1ZkgPt9eJ{TuDc}CQsl-#6CoW}DUUEjq_t?n-rU$3?2_>GxU?%6ze>*wXF zU3xwEN`q1UO21XvtcELdgr8<OK9iGjiWAiCI;F!q?UW90Sm`Dc4Ic62&n72&#kv#L zdwpp>^yBDUr@a<Ud$kG|WF0ONk$&@1GQ@R$aE5H^RLh;$0-35qd8)JWCy7+=yKKDT z*tx|*bKhK3mYiw$MRaFH__0TK*6#M<<5yho^`pT^=hH)Gql*#;;{@GvOU;k;9pcz0 z@QF)d;(F<MFP`;ojj%pGJ<9*f(uL<vU5#e<|F{4D%l-fA|3Ck4y8gzm)8>{(ueDd@ zTLeYq&UKIeIm7%s|D3ts?|qC{c-+2QCm_Z0pGUUUlg)doPDd<P-yzBG_G#6WV;4#e zS<Y!_o3P?kVq;CH5T|qP8U{|5X`i;{B;H;4o?lwrs_U&hR{}%r!nKS2FWq?a`{)0^ z_WyRPtXDBed?j4`>d!j+Nl{KOtEJXW`g&~dTmRM9&z&mIKggp{FRE$F7gec!cDcQ_ zGyk&-5-%q&)O<T_+H99hn>B0CE=s6OzGTwNa^w1v3&!07iG_D1oR1y3QXQPR^l0*e zQwxulo4E!s&04y!x$fw-J#Fu!oZi~4s=7OQMo)Ed*M={5wmzOdWh(cVK+QnQxnGw3 z3TR#9vSEsOp}KF^%Fw41zxsJFe9@l9uy5-%Po@*=3>GapvL|PEvQ6u`?fbUAd=M#O zx6eiUTlZFd--7oK&7Xdq+_<vgfxw@oFLR$({*H;1IXgFNuJKEm!qxo07XJ&FwZr#N zC?E5ir%6($C$8Q-W244CuRYBi3unIb-%}@a)j0HEqGovyw1wob71Tl!dUOA5u(oyS zp{m()H!vvA5)DpRu=b>^)#@1secM(u@2he-E|XvRJm*g8v<<!2`fHY(e(%%|?yq}r zx2Ar2X@m5OV<`$}xts2+P<tL4XV^Obe@&>1bgS;xXXnE!oBFM{@~Q20T(91LNl<0( z{Pm~gJ-%Jrr*XeM_j1Mj>hquMa}JzfcoXL!aCyGp*N<EDeK{901nDpziPpE%sutiW zUl}1%lP%lCFwI?8ht*@Fa#r{$P1fV}3Om(exLjPd_K0cv_Fd)wnR?PvpeW1oUevjR z-#zB8{66#P+QY}*Y9w#H;^XIO;5AL;c<D0lD<c1uS6*GaYK6tS{RL0`U!7j9v^3_i z*Mi0u-l9_-Ed@S%_q%9@dri67yDu;_%UpKFB$M!_TURdLoXH*Jn7&b<^8Uo?Sv^vp z13#CQC~uwka{IByqO_6^uLF1NDp&a7COcDP%}?G7FLT8nT(&pNk_bL2vOPQ7NY-d_ zv-sMxCsHFkSD)1|S2ksKSm^Zl{GzjV`P-E?=*{F$5tmM9Jazb|^C79JonP2RUDpdK z*tivb-2NoSSEX<2=Bce`Z->Mh&%D&ntXj;tQa^60M!xzCU$;^l*2~qUIcu%AJpK@N z<%{Go`4tP|7%lo84=b|#7xmf^yG!rq{nq&>^?dvo!yCEY<tO||&h&Zf8h_F)gy)v> zBhJ)Pjj)5ZSz150oNJt*DVfkwy3y%=qW8(xeUS`Z8P=>^YQi6Nb|)BdJ52m^F5sa~ z$URUiC+40d(*lky{s*f>nyzt4d$pM{DMZ`1bKTyr5TqZ(|5GvR=Cvhva}5pVM5{PA zvz!wQT_L4^HEz?9M8%VaUtLzN<!X}MI-RdfXi`qq;p?s81=^cqvuCrLW%BRh**~Ft z?xYqK;hZPZ>vXIpmgi2d<myXU@3V;Y;-l3*TNP%POxnD{ZB4_b8(L-o4$G#_I}kf@ z%7#-vW_RzLdh(v)lhDqkK{Jj_>0LT$_K_(E;wJh8pSo}&b=IWLqXM5+r3eIu_qBP; zD{bZT<*0V;2$YnvOqv3c>N@ghwGMCIN*&&~l~IRIc}(nAobK5z_(t?%>6G-Chb3~N zlHoUI%1m76of?^H_jB!?lGv-7t9e8!Q>Pq}b4U>qXxy#DDLYkAY5LhfHQBZa;Yar@ z=n<$q-Q*Jls^p^zTA%5K>6|hx7rdc8i8n@4YG=*^qm2?yaZ`^lpW1LjU2a0>F^+Ft zDF*}E-1NBHe016-gg;SO&eM6v(N9gt`NZl;-64`<KVy~z)p9xC(4OSwa`)RKjXO)6 zPpn>KtaW)$<=nt!ufP@hx>ui8Y%Gmgx-3w6LO4t3bM1wCyGyEEEu>N<LfpD)np|dX zkvJGP^|ei_xyGB)d3U5mn5tdhtUYyN;^xh#mK+oKw8~(s)8qYKlU-P<L-hi$hzdT- z4_xAQ^2mkol+9sLoCgA<b>}qgXSxw1Z+325z$}d$2D%>hKPUBGh&Rrh7$NT<8foR! zA@_g7i~L{DHY-WoTeye6Hu(4T|9>O1zHt{Wp0Xt7s8Xxa7yhpw6K=>`$sV3i{^-j= z`)8Xkg|~b-9LKrkYeh>z#OseUrZ#Qamw3uOYQ4?5FtG>Al{B1rFBeR$Ir-_6Ighq_ zl5MC#5r^O0{Pwe{;W=w>9$oVJs-a84;XT<Oxz=^LlpT6{)_?WaQ`R|eog~{5vUA&K zPd~Mid70%4>E?Mh*OoEZD^|--aaj6!Z=Ouxw(Bciu3p_^Ge5a_1^=?iolSePD)g34 zbi8CFdDyAiWlHiXiL`g?R=$n+*5J9KCoxWF)kBvuF)f4p%9{*#zINRh;<F&JN>1&U z>hzXO#gLCdpDs)8op;72R54@f$*PVi=NDPJ1thC_y0IjrwB0_ixv1`my4@o0-qc0x zcEvJLGn^RJ{eB!geag{M;!p0CkTSV;i4NmrM$O2d-u<&Y<9;8x&_A8+QM9=^tLGf^ zhu5agX>(!mP+Q%$=C60!B7LQ(lzX)ondK)Nt;*S_arES(u9PmViPLiy>nKN-m5ERF zNm^(ekf){Ctr9a;%FBU&u5+$M?;&#yw+$s-?NdJ(-?Ws|cpzsi$;KDb?#WQ}Df*$u z&)6FQMN4W}945};)bQIIaH*wz#nLBhI1M>wGW<Sw>F&=B0_xeer@B9-Z~nMtYu}Na zk4h^(3I9*@?Af$K<W$Iq?<-QHUwdDEFR5_ujKRX?U&|jX-gDsRhFs}6*ZBA4#OHH3 z=4Gu|w4g2bX_J@pg!Kng4A_}-E4(JnJKNc$JYP2FfZLtkP9OIpPp;a`++yPIvR!Mt zl7QH`sI`3kPwpu3_h-7jJpQ31+`WI!>fIq#p#1fu)vD=<v;LBx6rS49Jv~=1s=QCr znW~ZeLR*M=9pB^_fgK?(ZX3dn{&bTq|9s9oXs31CKCQglr}n(6*q%ExuT=0&=*QK; zo|C-H=ScioHDQUB;mONOLM$bn<ELgldKGX|J!W#(DT!aJGNxz+o;2E#64G`dTvaG^ z?wTjgflE)FlK9odvUruUm!4Fpmap4}aOIC}RwkQfnlDK*Y}uparZClU@48b9;<h{O z<hydx?HrRzsEON#a2KOhhn3YOmp(FV+N;D_dZp7%Z*gD9O^JhXqM<QMU4vF$5_XR7 zJsTyfbn|SKmXz}e?MYu89@;%#VG{1LA^fP=N<W8B+dNhZ8MW=xYP|F+;H0~kw`(d- zt!r6s>7BE0Zw2kNZrZD4`23Z|ByOweUK0f0h#pWb*$~?9eq*<ljoXHBSC>`EIdLvt zPv1!V>S~#*eJ4j|s*2>nxT&-Cr*cgQI$QxZE0xV8@A9-v2X4jnUI&?`Dot7&p%CfP zb|KuwMeB%)w$f82qn5o&xB89tJ)0swvqsh_PB1h^*05;Rj*z6Dg!NrDA(f}no-Te8 zT*gr=`sb%ut8vMMWtoMq-ejBE+>J7*wBo3|^zpjwPRARD9$m(z9nPEMA5@7*zb<?I z=I+u*Q)KT)wJQ{?&Hb1oTW_7BTeGELL!@6<*ZSJ>_iW|)?+%2lF@0m;*pt8J=q<rD zTi$$Cn=sAW^}&71)}m>5EHg7XUW99M)?8BFpt0qIGfUfw951%)_y{qV-pj$p8+dno z;aT9i&E*2`V*94Zo+qxkfdRJ5JQ@l@0u)%*F_$e}Ai(%w*~-)B_oRu>_k1&nV^!$H zjhb!GKTf`VSKK?deEz%}@9b>X-mMkd*i<5&Wpw*)xYP8TcPfvXNM10A?OzzbEM=qe zmn9L^2OF;J>P}eeStT}yM_1p_X9l}NR+@xO$;1@i`<DOyy|2uadY7Pll2hu!0oO~f zQ<lFu;4x+9#%3uq>nqZmBkROwbjUAFV@+r~zmmJ}a_Qj>f8KAN%;e(RIAP*Ukp||4 z9%9TQhvGE458huqZPI3mBMMJ0Wqo{*<Fn;c^5$fXPtKbs&fn^=GU$c6oMDrT|HoGv z{wLbKRh=s3O-^zwO%D(h*P8m{$($7`izhejxBA}kJ$<+9p6NC174d@W)2FJO{Aug0 z=E?Q%RK@>0^G|<&9=GoK`C3<{dsky`6$ri$($7`8vHEdpRlS+~<?54i%f5%+ObqdI zubVzmNA9I$h`Q;Czc+=N?|A!h7sX3nKk>WR((T^q((XO$yMmW^?R$1tN%ga-ZFAQV z1ufef8v;8v@tYa`5lt+ZdgIBA7$Y;yAKJqG74_>fj#Tg5*zx`9%I!=2qO7uBPHft* zbu;UVY~ha_)1dPfhF`9F{wc2Cw#EMYq{;v8gg;%f;@gDH!P!rjrUy(6`nsxP(&`ZX ziE5m8LOtg$`S!^1<IdUh99{L~MAAA-L)h-PYzS8soNDFrNxUb>P|`VGHss!X-ihBQ zU5pS7o?sO^$y(j(s*3UrZQ)y$_3I9ttKOM7_xse7AvN{uY>s{}+AMNETz%%zzc+&- z?|A#A6vj{8Qu96C>r}bEsp|dOP^Z0Dq>kN8(0|$Xv4ZWYCsTF(HjxeACkY?87ryM+ z(Z4&jV(y$?n_n0&IJxCgmiDwuS=wPoof6-l7vrebx8&Kzb%aAZ;qa>i*~=52=H0PS z*ARNB#rICS|IErOv+fECJbm=%o;CMzeIeCmsb#JwRpK{o+_&Fg>Ga9#Zfhw`aH<et zKb<0)Hd$7rIl1Vc$EgjIcFf`9v(^;6ynXvO*29ZDF0Yy3XO_3hBV)=egLB9Gdsk%$ zEHB@#x#`A&NU8kG>m$zn^Zze>{$`-T6s}{(4rs(Z7h0oM-MCrhlyBG?<=MTewl^lG z*n4)C`RsW*+3Zhe{QHWTbN%v_^zRs|dY}FpY2o#4mz;3eOyy(TMP`|^wmo{2U3T(e z^|aHDzcVhXUp`r3@y464tasrro@wzric^fL4=#1*z5MO{6K}JkJ5edRR!_dHwDGe) z?NvXg@ob=0%bOW@43<Quh2$l@cyl0aMXor<ez&(N$K%!6^;y)X{!<XY(cm{#K|G18 z=gp~)JEVR}pO~4~SoGrehJ{axUI;SGyug$umOQQVgzG1lteP^5qP)MEQ`u7VxV$#~ zozb*k>bj)X#FKHE9>+lCXwQi=`_`T7=$YX^PcU*%qkY%n1zIAX{F;OcC7j}B{>uLT zeAT`({q5hPT;CbRoLjYOU6#bf;3rdgy*JOb^U|5O%UjV-%Kz2c0G?XcIq@N!Zs&fw zE{ahp2!ER7E6Vk=+qBbyM{#{e*J3}TBCo!XlM)BxChG8Yc}%q4=dr|vr_9t(_tl9B zwwpbc9uoMps)BE&v+{du714=?Uqn0W0?NK5C(EbE{WZ8F`cXb8v*UqHhf1`P#t-eH zra;&JJ3n2OY=w5Lez<<UPh`s7uc@!PINq#cIk)O|%#RC^D`$K2)P_z{S@rotsKjv* zr?{CDB102Pn-)ZN29^rG5$$9TR+ZS9VbIw$@j$HT>KR_4?c2LOua&-#3_0>(ZI_B= z^LCd>Dh1(c6~F(*EWG`_h<W>Jp*briEw_|jn=)<LgY_MiK6Brlh&-`mRiEG+QBJF{ zcK3HO%A);(Z$dfegqD{dU_0lv*ZRPO@S}HDaCPq47^o!Vd_udZCotp2MiHs9HLE5( z3|gAlWbg02txA7&@(hPCq0lQQqAOG;C394|T12hf+`071%_FO(O!c|@ZBvMQkKz+i z2PK{q4H<ta({o$~Pn!L1-Via{HYGrVGvtN;@?RBN##&E(CN7mvUh#15=CATyI<{Fe zw!Jwy{mrC$^@!Z1jO~gRr7DKit2D)2=LkC1gnZesrB&3OC!PIt{+i$4&sD`{+}n}) z>dwsTI&=RQ%vZg(#4YOBf-4KB9r|+T;4Q69k5(i`%}D*EDxLDvP3Nk}^i1BwRj#u$ zluxfW>YU}-m*~Y)Yc{oSie3MzN%hCyJ;``<?k}H*yMd?70oP^sCr&%sB57~j!|m!* zz}0>zgWo8+^P^nmtfPzP9JbV4{z0Yh*rX~k|H&!+MV71irvACQCM4w8h45CbtA-Z- zQ-dUJ+V*L!2&vqALOJ-;UnSe-u8^F-RP9Gv+dND}1$Sr{ZC%l~bLVQ;m3w3l#tB~M zF0FVnM}G;Z)uGiYa`ooLpGI9lye|#Egmz8|eqnat=&6%mr8^d^_u^zKeREb^al)zl zhF`97{0v$?eY0YG(AG}^pSpIeT=_WXoTsl=vipW`m3?l7TPCfxh+65yw<qI!@bqua z3)2HQDqTH-?)n`TTymvXt!b~8Wk!hBB<rb8Ms53)HY&aPmZKNt@@kpv!8p<H!L9AN z=NLoZWm-4w(~5I?l`-kN@FcG(hF?N0Z?AAxt=~2g)cET9!LaJE%5!E7(TRd@LIYK< zDozSlU77@H{Z#i^g?y^+1BXiL`M~Y9pR4<>ytQuIr?hb1D}$4))n2YCEY+^>_Fs88 zaW~`SuHzivx>&SU2~UbyuqZ?lG~&3Yh%5i#jXgz0`3IeDtbVj_(Wyzttk-*NS<*To z{OLdMrLPX(tM?46b$YS7;Qj^;nIMN*%fxq|;M3k9=99qqu+a3Y-Z_!r4<Dy()7<kW z@bQ{YW;UrC99?F1uU~iQY`P13YWAH2`{OHHwG0mJ-!gZ4bi+i>g%^GwzIZ~0`JCM8 zsLKK`E)}W@ShqgrS#&JYWWH=ZL$rY*dy07H<7dZ$Z$7D8R?*x)@lK%qdYS+63F{gZ zw0b+49p3ab>05kz;P_*vO}jbY4nET}GZ%{lh$W_;vMbM+wCaufhVY{<%P;wNn_l$% zcA0D8dapd8sn?ync#j)?33XiRmHj+!sdqL{t?RnhDZ5G{ykf1^Xhm9IJ?VMwmS(7r z+lKHXM?FGkIh;G_ku=MJsod3I#g|3bL#r-E&(t=39=9+dWp3lrQ%40pb;T@ODcpT0 zbymnm&{&|&s^l!b{-BvwO?#EzHNAQ<u~>YH7bxc!o(U@DJhD60a}Nub;`$T4ORSbX z%TrluRLW8vdS_+mu9UYSRh-8zgge?fZO#z<ZIm@5E!uBi%G*=-({4_wu3CS6@-!V4 zmL>a~g*)e4=f|h4Ox(Ri`|=U%Z~IEhr^jTL+~LX(dlENA&_ZQXzr;<~pBz44wKi>e zE^6ss(aHOHQ-RRIhBqH(b{0KoTG?az_>K6a<g*$-w1x85Z)jS&*vQMKX|I-_kydh0 zgu3KOLrujmp@p}C+$Zn3JuPHW&%*T`OT*`GI_c@Pa#tElb!gv&S00n>UA$CJO8i<? zu-(e>WbyV8M@i@SPUZ_~$)eT_jcu7(g`ZSci~nE#e?lqKq*rbdOhM-^bGUM@JTrU6 zmpaq7eM-9)I7#;}{&dd1X|GnF#+*{8h00t~-m8?oW*I8Y7N1+4nyG!mTca~9jHlGK z=!7Nv{c6@?)%R=nSG8}Q{8Y0&db{BLMaPVU4{dBnnRjyG&iJ`J&(>)z>3YENt?P+$ zP`kUH{KOC&w+-Pe{jbW5`1*s&H*tLH@=$4=Xy13LM^*4mf6sA!yFU57tIPj?IJN8l zxs5r;!;Rhe|1bG_`}NG`ALT#py!hJtPyE(jOMwE8Z`1hO{y+Ns=cWG^-aRfeBp)|g zO7$*3+-Wzb$G14cY~PA{yPxva53Q}&C%+Khd;MsA$@F>rOYhx^Evc=(I`z>1#}5Vm zW%sn({<`1sy!T*54j)^ar4;i&`NsYGF0?&=^8al0ao#y!$|~R6Uz+cA;{U&n>HpJo z|DRX-|9i_HdA~Dt{_n3&+CT08#y|7V$7VFnc)h#*@y~h_36Tl^k7e9oKmU8L;tjSf z_bh+zpZ0(2pY>1cb^mAo^gsPSA#?5A#jN#;KkvV9wx9gzzQk<j#nb*j{}K7~UfYj` ztaoY8e^&EWH=0Sk5LM%poz&9j;j}&W#o=dFw>SL#{K4^-__@EAZaSWh6sVW6eO$Hi zn*O13R;w1Z?Mt`UKL2qjZoR@^yY73_-%8F_`Og2SE`HMXoqONCzw<Wt$4luS?or-T zm{nrfKU6Qi7_n}x!U1Npi`&<#pYX7D-^2M{YJI-ci<9yN+uC|J@Bf@5l(GHNwCv-b zo_l9kJ~uhJ`~!RGiphQ@S619S^(sB@=C?n8=Wd>xzt=W^({uU?=2iEnK0h3^xcbiK zXL*yAkMch3-@WMexiqO?syExRmmhC?^g{TTBm;xPik*$SS%q)varT5vHe2{{+PCz) z6(8E)yK*>QxhkCK&rp!apZnHyi>mUKEhgF7#She?Y&=<wJ0)H01pOYwzl{I%VCiB` zCJjdEFaD>hicZhGIr04){(sY6t$w1Uu=<~M_S~I(C*6+gv%Z>_#kihloluLv?XO}z zrkVHlTzz$Fq1%!A>!;)WDwZ(6i%$6MKk@h3Zu4@!ciz?S-@RY4TIcO`{#jeU9enx9 zvH0EH1o@2a!*bg<-MxD1qvPrBm=ex<y|R7Vi~sE9X4&!Wxvs>^^U>xG+FRQ{L`b`D zX8Q8XiM^;Y`Rz|vyS$7;QigHSYp2XTdh6|+wZ7Xr*)|tdTr@J1?O6WvR+PnSwO{(K zkvqDN=v7>i6ESsTK5$HAYsBlX-#-*i*r)#RJcI7S_#-S+8cbb0|CqK<cljOj=g8`t zJ@r#JsT$vzbX5K29*=tt+b7;x>GCV_LQj1z^MvP4`XWECOqf&0!#v0CtGIFv^Diff z#4ctF-ejdk0><8niyF3nwF{9exUD9$zxSl^mnU88Z%Nt+`St|ay*U3;Kl+Y2%i74Q zq)bMJ=Z_}w&hTN6-73u3lE_?r*QUVhyy3=;&&#U+?L7W`mSx$V+(W_69FOPe=$jfk z?D5U&Ulx7&mD+>$DPf+W?D>E8s5$iuI!!cny3_X3{-m%s_XBQU%dVe`<pK*{Ra73z zyEtEWTK7Xek6OJ1`z;H*`{thQUj8M`Z=>yvB**z1Ubi|=OMlPc`5;s5uj|Ucf0Qon zk9&2yAbfd&bN5*e=Z}ZOgaT)*Qz}Uph_SoG8TnX$v3bJ#6uy!vYN{49&GqLc^0Y5$ z@H@ruk>O;(bgl(?pBF^#Yo1o|kg-Nz_kP(yt}K^n(=IQsPzgG7RqMn8m#~^!GF=P{ z%fuYaMH&?tz1~}Uequ;gvG4WJeD0ieWz&;WOf`3R3ku}1M8<vRe3Y-QuJTT5&2|R1 z6^aG%pM|<Eh%_uexy3ARi@xOs>pua<&Q6#47Bw^dwBGI9S&Q5oy!Sk-jFsAdTQ2E4 z^9xO@+YY-f3ap8GDSU->VR?A@mm?hI*Q~QTwnxAJ8}@tm<LX=In5#PCsusw+{FK@0 znWC<8{pi^Pk?V~@H<@kSdTvqgj+<VEmdizUFk5^xi>@*WnbyR%;KIbmue5hGoVm%c zcj?v|t|ckTZb#D{d!F-$I=s>7)@WPMSmos3!l-A%dSPwm8Mf;A3e&8AWvo6OA6Wil z%bi~zp8tLSu~|Y}e&3}Bf97TEH~Rdqz_b6+AKfTh2eZz_DVLI3?rk%jn5c85@O#~4 z#zn1f^d4CLiV|Nd`BS3u(xrynxgiHms86^S$Zf%qCp`1QN@ZV;LaB?-=FKSboRYCX zWK+TX2{lnlZvQ85wX@K#k<T$cF{@>BW3=4_rv&%5<<}(YF6hqqaG!5o|5X14Jyj3x z{Mu0b;aus(MGq4cTIHP+COd5CP2*@#xjOy9ewOUT^D_2MIV$_v{P3O|le!*siuYWW zJmS+hT{tdtzQg^MZ517Nj9BJnnN~iQpX1h+YG&zh$>8*%=reM&6Aa7z46kttFO5;{ zSm6Ko?qyf;rp6AvAHUm6BHb+PDi54b{`L3`SHB{s&}S`m9*KY#mfS~o2rT-s`tgH9 z$0n&H^h~%=XS}#=VO+-pVfjajOG4TU3Ye@dSGS)M%+<NyZKt(HBlf{jrl?hGolSib zdjEfQet6HR*Sn+Ltb5}$o`wFrs$zfV->92Z;TU@&u)|{;=lYwAKKnnE<=pFj#XPy~ zv=xIo|H7B<msfoMAakov{j_FS$z!vx;#Ofs%K!T2eb?Nbam{qqrCyU%Yv<YOyWb@? z{|LOIwJ+hQ?<Kv6^Sd>j91hzWF#U4w+`Fl)@%NhgtpE3K{onrW|JuLx!GG!}K3^2| zKYp>fk?*zt<rj>z|KE52^#AWK_w!{=mmQ}FuUh-}^VQEUQhH?q=gTC2NxgF9#(tNY z9uF-WhySh@OgHm9|6{JQe(i}X90>|__A3t`KEi&3QzO&bPttO2<&}iKJuDYieBNum zz2<&ZhS7XCJNCj&Q(shP?_K_T`89>5_qVmx_5W(o+|PGyt#VX<L@vMdZpQ3o4Sc2z z8fG6(%zyM{id`TR*B`q!m2At4To2P8xq7kA4aj@5U!t-?QQ^qCs28Cb?df|qZ+gEo zASl-4rm0mz+sP{&Cfl}dU+^`V?S}_@m;IL~exJj88eC&jnRVEt>TYNiSgP|Et_;4u z{X);ivj6Wo#P+-~={r{c?Sjz6c{@0pbl(2h=lr8#TK~(QAJK2m`k$}AH1DqE>FokW z-rc)8r!z@TEjuT~Wn!H+amnUPY1szb+{Y86ee-j(6AYeg+NAb5HE);K$>kEOJ2RX2 z74Di+?l-gZd5^s3zBLaYKU~q*IXO*d;Y-tpZ<JpY-bubC)%E;=^}$5hovlgRk008^ z(-meB^QPyNLfnaiAH}Qotq?gNQGed+p3C7Ydi@Pn%%5)hH2>5vj@eke@HuOX%@HO4 z_&>ilp6HdadfX=Rd(HJ9feI=~ZmSQRFL_?qzh}+l;;dBD?irpw{~TqizHErB$X@c% zmC+-!>;AP{78kd2{L#5DIeF{fLwZK*J_%3%`o`BzF8B*um&l)Oo&OVA!hZ0bW%?f& z64(`$p6#_GQZlr2-lU{n%{k25KR*^1+%J%Eq{V-G$De<koBVGda{l0VY2hdJ31*$b zCR&;uzV4odcUK+R(-%Mglhw2-uALS$A0<T{NeC(4ZJ&A8I&JauMStxTRf|L#GOm1* zatORta9DEs?Qh974?4TP{}Jd|<GY_nkh?*5*X8AmI`^LWABelS*Oqs|lVj&D3EsKM zX(IVfOYy*S!$a4;{lE1u{`UXu-}PO8<#$HS$@q7E+kff5f%zsWZ~s3?%>8eFoPXob z{55}NPyPthl02cj>{~;h0hdwrfjn;YZyNKtRVQ+_SVg)o&$XzVTqT(Ho8#_^O_OU= zj(E4Pe8PHhqs8kJV!y>Y4}}IUzERS&gei4-M(5Pkd+)2rZ!LPXSowz2(|P?%I`6Eg zIbL=8mG8yxJ9l{AVn|6+53^SO(sC+Jtd2wF#8u6sP5}(gOFssvq}h}|dZ_ZCy76|H zVEft@@wk~Dg>(A$bpAi+mvco!qsJ=7pT%A}j?aF<UiDVv{@s<69?t8%`!;UkpBGH~ z<8B=l?fY$9=;nN{;etZL_Q)%YHGTD`y;KWq?#(#V_i+9NXZ^aZTUScv%>Dkk<*M$# zwr$61Xa0y2KXUPjzE{zT%hy@>J~<~HlGGOV=U&J7HGGTH7nYZ1AM#CCi%$J}L(Xi2 z!7O&$#JOv?7jFO1zb3S6-vaTK-u1C_O{@Ht&D>~pu|(m~WBWy07d~q(GCfkiDpK-! z9s4ZCpKU)mHWfv4%crgNUZV8E`n|1o+X_9oO3yfzXVaB0R3wV|G4JE74?n8pzKqB7 z+?;=AQA%mIG`*aZPI|ms=9w;;*eoaH>2}Gut1y^*ZHW}`(ZWd2Akn@R@rhUJ*Hli4 zasH7QVxyeFWOL3?kV{NJOEfF1VoQ|&gRQ^y{p0`t_;fsf>vZk62dy(sTW43l&JYjR z*Eh+Qt$4`1Vb6mECQkMR>E9<f1%3=!=h0}lL~6sqzk#b;m=rlK`Tg#@^(12dFQ1iy z-xRJiMSPs-cOv39_ddR_vpiU2eCw1tC$!zVBP(}NZ12|NqPZ+7%P;>D;Lq3Io4rO@ z<h9JUv+wW479N;fp>*U`fsGu~D%SoOp`Vi?U(S}?bhf`R=9Iy->7Uc;c@&qd5X@kk z@^8Xkk15MSI~atz+{><qTz+&~o>?!Zw(7^HZuytfPcFO_bN}sTorGnV9N7a>7fHTO za{bs{rPFWO_|N<}vwJ~{?~{jo?bckrA%RXEQ@K43A9^LxB-2$W(d`j)?7|L%4T9be z4l#BH{%h}%wX%*qXERgov|Yl==B<AJn5Mc}XKzmM<-52&LI3o%slnxYemoO?Uzs_5 zGpDY;RNwMhd*?s0KEe8)F<`Ch1)t70%9YcV-g>{zXuIdVH}QG(f7_n=<J-R7nH|>j zIb+L}Z=S|6C5qiE49}WyAC8xmaMfW;PG@yImeujoIK-htJ>JPp=&LLL`=6V4+H6Z_ zVhKoA=b76S{ek(`_n!_`TVB33T<>x&VdBo71Gk0ZRv&-2?c#-(<*ybTzj17qj6v;A z=M6h6PW~}fi<4Q=e#X1V$$QOjXT8a)_Rm*Lu!=~%<+L(yQ%lf;yatITyDguWZohdj z@*!7yPr$FW+gM&O^e_hRb-ka!dAsCGbZm9?>ioRj+ix9Wlx-}_&yUXSl3jTE?LWRV z7IS{i{eF+}{g$<lZ!A#HX7y8luX~^Gi`%t_e<T}&64GtX?NK`6=b-J_`O#%%L*-Sq zpPp5_R=!xFuqE_t+MHDP^VYJLXQy2X?|yUi;y#1^vJVQk_C3%y@SA^EKZ@yB&+mgJ zjW_vJ-Mg&v-1c`?c^q3|U_I+aPp^IUl5?iH*L4j8XWjdLE!yE|HUA2mat4<bHb)|O zzOsL~ku*8&=-gK!<>7KFW)*AP)-rCtlT=sne%*D&pvE)ZI_|Y9+>X{+$G#=Lyy5xU z+fy!5W{$w^iD#Rl4F9q4+;iM;pxocftNw>+$<6ZZiceMs$?z~Sf1iAX-_FbK%&mR7 z5_|2r>wn6=y12tKk6A<M(Zw1k#+u%T`I7_lqmn+k-Z#1Q>wq_V$!zIHo#XS<CRHlh zE#cXGrO{xcyDEQ4XZVb$hI`)icOJ*9?|xy*A|lxMrRDp6XYU_VuL;Y$N-)%!U+$Tr zS2zDAD{smoVa))iH`$83%WwA1SoufJfpM$Zipxua@@`Z<I`+}r`0b;L!wNGVxoTy* z37@?%ZzbpF<2TffInMqv<(;&*{FlpfEh2C69v3t7D}S82`yp@Um$|_f9;<bhiYhUu zSw75i60#_Cjjr_mRlT<O)2y;0v8jgVQ}nZga^`H<u*bJ6@>a{PWBPe^rd($;88;SB z7JB$#@#$@4m7cLHOeRNm6>SuL8FjHDQqnl{=$p!OXIK8%F=6ZB2fiK^79DQqHk3Tg zQgeFyEMh9_>VW4LqAz%;tkiwhCEP#PDVD82>CT*Wt3QaZDOr5r^Y^pc&mHE8PByca z=wtquSJck-Vck`&@;_ddTubM!4B}6Gx=XXxWOB8R@J&N+xy2_Q$<%jfoq2qQ$$ag$ zZ60xw(JrqKid8(k=kE4e;!gSg<@<kYJ+)TOxA>v+|Fm2t=fB7$wHFfi{m_zG|3G|^ zr)Wc;&5P7$Vf~T$pBXB3-+lfhd9pI+V3=`k=?%S&+|R{QAGN=cw%yb7mf^<1PyL<` zSR8xqJzAgp*8B8+-YCt7RSQ^s7`Ok(cD``EYW^&VUPp#m5yo#e%BqP)|JlkqQR~(3 zFt_{hoxjg{ya?O#{-)2JpSLD9PMLBpKegmvsMqso$+`d4E?Q>(Kd#(W?-D8@!Mnuc zW6zWAIbj#BBuU<EHJV_$*=KIg6#g%lG7T47ZZy@uB%Hj+|B?1#%Usc(-QM@KxlDBp zyu8dG{$RCoR6fLTu0mMl;hZOW6MvhD{$oj5y31!Kr@P!kJ>KG=gxiY$lxDF=9nN#B z-|igHqL~`JuH#fFvqPK92F{AvynAAqr2IGV>(`!A+5TKZ>zPp6)=8pD&z`(5QBk?J z^uck(TaP9lexD(*tFS-jna3ZK;Ik(ecD;BQlVYX3j@erytM2aw58J8_b5%SUZ9d9B zs9fIuwyyWfW!AON1<O@f81;J&`z=<x{wOc6BH)6i+CS634;p7n6lPDc6#Z4~7XKyx z)|cnH=k&FOw{1wCxKX}##@=0;Q$+uJRsU+g!WyQqa|*{qJ)c$bb>CcKY&!mYQoSm4 zYQNg6g|5o$Sz4cY&H533<v>REnaOsh-V21;*tRGe$iMvHYW&iu`x>L4OzoGJz3#KP ze>Z-1mEX4GTkXDD`?a>qsy=W&z1VrIh2`gL$vRD&WNzbKhb1}M&(ALVAGj>nW0u+6 zX7lC~Wp);Z9jpqA<Cf-pb1naM^x(|LC87@&cUNQ=?Yzyn@DI-=7LBX#-!n+Z#r@}c zyKIXOXRUk`XQs>Fi~D~T6wi#|W|+d=B457xK~wO_TQ|*Ge=+Sh@_evB)!<r#;IrA& z<L&oWE&TiE@oDp0-Su@}FZb)$)fBVJPMVi-eLvHRL%Eg@k6c{#>+H&NQ`i1qX4w?% z`&j#Z%GxzoSpFsMRBwzoUq4;UKS_5<;lF2b9G21B&6%t0ZvMZ%AxFT1L*DG+QvKR< z4L?8kud_M86uso#fm2_bYgzcY&uNwloLa~l`n&YNj&Ga?p8PnXp8HbeZsZhp^`&`1 zM`o(L6}p$6o{;|hby&)a<14bB@=RK|V;AcSoetM~JQr0L%W=unPugjBv@c>~actM) z`6r(D_pUhc?X!?h-4DgbE9WQqo%?jKWs2ijVXqSHi<%ajSsJ9~=xPZqw4BDjcg<<> zhJ6QW^KIYEX5{SNkrFe-^O>;K!A%+6f4eWvz8|317|4>mYo>hd44v0|zdz1(_K$Yy z6WU={p}|$!*7oh*vU?ROrni)IosXz;s~9_^Pj~EZJhg|9^SkJxoXgsc^Ph@GFJC^@ zGVI%0rQ~$4A4!*I=We->%XoFmC$&?36YTd2b@2SnFZQ;bXTV-_>;7@)3(R#Zmre<N zaw(^B`)3z@1J`E0c~X1R{_F`|A)hGEBl`3^%jv7a;i+sp_)NX(>_6NSFBAQxD(%nZ zx&M%h4~xyht~ck3TP^P#VO-X*!q1~nVb4NkjXCX)55Ki9+P>dH%ZjbLB&fb4hbus| zVEe*;%}q1h^vX8&T-1-MoY7%Wt`-wux4z<q)`J$mFLT$)sFVoAPB~z%s#-F|XHCw3 zpCGTq{V{9OlV<yI|2R`(?%6B!lq<T6DM0hB{`zVyqk?Ha4Bmb@d|XaIU-4s0SEhkY zmeAWvhcYj}KmPcwgvRxzXs5!|wLMZ1Qy%#ghwpmkpZR;?qWNoP96c~0<d)@I$(Mg_ zZuGzT(K_|-q=$;>?oM$Z72D4}6>O8(c=VfytnZ`44je2O%w{q>%$VQI@~X&P_|Lwn zm)CDlO5V8cYxxJBTfc6c3$g4B?6VHOI5+H#PwA_d?zc|57r6cO?KJk{tX0@3wW(Bj zXO$r5OeLA4KLpeT&u+J5-t=KXfA31KRkE(-#V03--rT9ZLZb8NK84(A5%L;(KaW;V zxbQ>9f1gKh5?eg0_OB}{I=wB6O+^B8Sw;RkP0jERJDyoNckSY5VT;cC&z*Q7ZuRmF zmnEI&sFgDa-ZxP>)u?*PDd1KOTUya4i`paCc_mj?_l5Vq^vk~bV`J#!BUvHgrt8io z&p)eHf2Yjb^Q3&x)A}Og6rb?Qn-wDOpM~Bq`n+jfn)IF`SC__?c2={amsavjHrkP+ z^uTC#N|jK!=55uNao3hbRy{tmze)ARGNTV^Q3gS`7(4#W@%Oo6p|LoB;lvx$F0Grx za{9<^Kb`CBFKnOg;`A2T@XzPpeV0kLAD30X+TcEOQ%FwT^4ta%qpmNT$`7(UU1EM# zEn=5)o{L(r@n^IB$*dke&8FHbdG{w4t508aa<6N2T~^&%rD``0-%DPTC!JfS@OIkK z9~)oY`l<1iMQdu?gqTyOuP|{>Wj)c=s<&lg`uiedt==dv;f}RA`_A3D>!K`j|HdXy z>uP74s7Gn8QOjRnyD4(=(te4>tUHz38`EA+iG0Ek;4$x$`wXLB73Ub+rX7u0*6~Wl zrHG45rttB<Oc?{CpeJ+7ws2Ul`?pZ(+_woUUv|$HwF|nCscdxIGgITMgP?BTrNu6r zqFCpCZnN~5V{q$a`J<_}9!I`R+q?6^m!eaKO1XPd0w-$8C<Q6le&k6M_nq@aBfWjo zsnE<**1|_+eKS+}ncM^WZW%kAi<`Yu_Ts9YJ6sL#+UH6y`mMj0xi)83y&;pIdq$v} zW!r`BjK8id3aa<#iC?d^=S{WW>~=MC)j!VZ??OZV7q5<;TgKs07XNoK!z!<7E9Y+3 zU9##a&n}CnGJ@wgPZ_z`uL@JMzo*u9-@nBtE!-ivWhsY<w#8Ek<*T2!ZCcLba-M75 z>(A@oEY*5{GnCUl@oMbaV^JB^9+T&8@jAKp%=NIBUR|uMCyy^{Pcx1WWS@}a^`Lu^ z)kXJ3OkAJBm+gvPwzT(wh+|?(sPgT|sk~dc_^glTZ~MYwaZJ|Z$)ffm^=H<6i_=^) zMNIud5|*C27o^d$wAg@6xN~mdzE!8=1I?FYoo}~)U$1KLV2R0tgYQ31t_YLg=X7-i zXuwdQX2+8DvnO`VoZ|Lkt%V~en-G^ITbsv^2O(3Grl=R4zQFnD(&e~G{tESr#0muN zsI5xsuU$6#-lO&Bj9AQjz8&`7aK}7aJzTS2{@BZ@GngBHln9xzOEYoq>|P-JXj*Q` z+0xR<aX&&1EQ(%Wbac%D>+=_DSf-0?YiE!9z<-+c#A+iQx%o9GRWg!q=%k;1w(N|8 z*s~SQvU8ozRP?->T&$!ty&z%Pm(aPZo_AchzQrL^P1Z<PBYC@*<I)dvY-Q(fpBXXf zi^toZidUcB&8v*|U*xxC%8Op6MCqS0J3F@TtvGMpxZ7xw<VQBawyTRa=u~VzZj!oF zU%7=_$TKO+r1L@DqsZh+r@dXBO-^xX57%!gayt`XBEs{E^Zk70t_{aoW33`@%}8?Y zXL_i$%2P3H@w)YfU!^SWzV=mK%2iS2p7}-Pj^mDpLWvqG)q#t4EA5n7yo)ttD&M3; z){GB)@nOw=uO(b6Wq)3AJDH=qLci|sw0ZBDr=HsQc!{0CTOC)`giTT5-QIBrpKR83 zv`-AmGnlv|x8I9bQbov>?RxEu$J1oz>z_FIV39)Xr4KI7U9W5>XvqcszT%|E={v>c z{nMPgu0jDa8$Y)lwLhrY)H21{_TAz2AI-$(X+LtAGciuQzD54xeAnasr=Pe9EuDN| zzsQZ$CHb$O-#(P?$tU*yt#Q`&ERnwXC(bN5l=E3V`(WSS9luLHp4C)YFX@~6_1Tw| zdD<?2uI%nkDEDkRZ1}6}mR@nul`TB4Wn|x<Je{3&{E$N31*7uSE)~l?{v4kz`BFb! z{Pe_si<&dz>~vg{<_j>zhHLwuJz>`-w?4ffVsYm4Gt1)`n_JFZ^WofMqBFH);*^5| zoQK(;`uW-ZH+p$MZ$syi`;My>4BgafE_<4N6KQRjSDbe@cUR#%RZ(`ygriT4yZ*k& z<Wh6G^S#@bRX_6K$p_C`mpeOp_-fRg^3vcm6mUPzAS?fS@^Y`|$LuaVnjZPN{;&O} z3CB361iN}BT1$%7din?4;W(P2W?1ox*E?;-rJGZWq@<1c95*J-b2-s-{1Ru_Y95IK zpBzJtIsG@fTtD)y<34jnXSr2&(?u3pg>&cMIhA-Q%vxQ%zkOD=(6KPT)dEw_WbH`p zbGY*1i(|*Zz;l5bjB{7a<_LD5voh!+>u;?V{cVZ2b}AH^>#q19(s#nj$<!yq{LrR# zvA!`EwjQ+n9VEs0wqf>Kz9rW-iN0V8xgF!$(3(|x^N;DrH_qDk&aaRRn(VPlA>Chj z@w9abN}bns20vWbJUMaRrOPLcuW9lnPk4MY_TK8*Vd;~+?>^lS${O3IH}%|f!{g@^ zJFDJaiC_N8P;;SJ`t<}2nKKb<j?8jq;x*<om0$l%V6x`c_s2`-?R|OK#JAS(^YxWc z&P@Blc6Cl<eCpZ8*=zW_^wQfp^GjR$E2Oqun{cGK@07#&3GZ5temgnKUFceq#q+hh zKTY(@H0W8M;%KX8e&$KYU)4{GFD~qr+F5tWX-;{$+uvi-c7<YR@4ft}Geh(8jOA9X zze|3kck=G)xt*;!J-n*D=fN-2Bi^cJu7{#O%zx5-<E~}YiD2`CK5JhG=G_q5o_&SQ z<9C(%hL0cfYC9NK<Z@5U{rT6c=5}Zv|DvS}zoiNtT(wQ*;oJuozc;e3{}Yn@u>05Z z;GY+FSAFMSzvlOQnbT!8rpaGE_}|*Ucb;WOef#;|xce{a7v7!E%*d{As@C97`mTR} zJGb3zK3kX8!~QJ8WFDXTuY#-@&n~RF`N#OjM)7@{KU=lgU967%)Bf(xy|O!RPrdef z^8aH2$A8mfhvoj}ANhPN!N!c8`LIkc<A46M7awrvR`~t9zo-1p0nhyD-}g=XfBZD^ zyz`zvkSXVYfBSzu-adD_eck8DEdS(r*)%`hH#qaKVbXsGF^R>DQ~vKQ{`5ax>wkU0 zw`sX=*PfeSaP*pbRJ^=N-4?TR!n~86m8+UNmK2uW$kF-#u=CrW*Vi9x{q`!c{(0`! z_jg<Q<;?eeHuFnQzuWZw{kPw-AC}y%{r_+8yLC*p^%d`}qVGn%y0(v-<IMJ^z4Z}I zla~q$+<M()xT|+L`-P?dU49?@^!>q<-`q!RDsL2;P1{|!DE7kpTeoJ<-x}|5U;Ng4 z^A|h&!d~-#>4-PoS3domS%H=QyYd7Vo8`-`C1%}y+1$DJldZ(sTR(q({qApK!E4d| z?c-*TFW>J(%b7ih>GcUXUS{>`oxrA<`{LOS9^`!Fmw)%~t*95ftxs>Q_5S|n_PbL> zfBB-)Uo$)oUE8<!#eq2H^7lXa?@rAvWjbEZZXi-(9V`BIhRoAb)<3-6?`ibfTk*fQ zz0c?5m1WN!uM~Xp^^3{Jj5B(UU5(iC{G4_A+qVi*TeTZbIxn!TT*SMj@0;m@M=qDm z@12W1v_1S@*8h8-<{mlzz)~$-+-K519-klAwwp;yNd4Knb+0W0SHoJ)-sby0cMXK* z|Jl-<R`cVa=%&^~ZuYU6`rEfLuhqX$^Yhlv+Xq>>ZyvmBb8+9Sg?aO=4_+z{tebw$ zIDa>Lu64d#Swr!+bAR`7Yy4dMcJF<+lHa|%+1~G~|M})<f4KgmxcR#e{_~t6t@b19 z+I8RN+TF$XqwZ{GzkTc7UDe+*4@$ouFx|Foo2bb=`<%7CyK5Fjc1S<o|K4d^zx-Ox z8`=zIi$C5Lsl50jb8FG`bz84Z%NEx=C$-<<*t+aLXMI0g)JeWb+kUmpvydazG%4xI zH#w8~_crzXXQTR_>c5|0dp3{Z#X9GbW6tm8%Jdd}l6}^dcY}qmP*%x!aqW#Iw=YRu zcv8(PuDaT`;%@FshSL44Pgu6C{3<mea`DIM`~RfA%w^_J_<BDhLLp-=Z^Way&mN^M ze8Q$H-D_T+$1pAbr`RQ<nS}!Dn3f#A|4{MY%LjV*51lQzpHcJr&DOh#j9~%`{i1)~ zV_P7oP}sXkEivoDKPJm>(gzIA#m`gNVPL|0WsZjMdd9AK52u!zbKL$YTygzLQgr>F z4V*jDp6|T<_l=SZuTRb5$^TwV-Jij@scA!0)CR}TZ3oyUd`J*mv!6+E$=mle$1m2r zuf4D#@n@Bd(xwB8UY>bqes+Sxvvsz+3#z^?xj(<h`trS!TasUnJwBIWI;-r=Qo~r? zvqvvU@aP+@-uPf%VtjJ4X=ES!;=bgs?sE@jWR!?KTXjFus`=uPH*0yaO;5bzHoCgz z`ZcES@6VmdF)gz@;Cngl;LgMIfB(G1oHV7Y^u`2lmPrXNmrG-vmo{%@cyGUMZLW+% zx5Kptzp7bjJzo;*Q+iC_O0!?Qkhst^{%^vUs9E3E|Nppc_s{G98+Kp()y8)#+x9VM z$lVVe_y2z2esN6WYVXWzzWYPW7f;D^aKEk=Rr)s0_!oob>%(c%cM_&mJhQ%bkMpGD z2Bn2QUGo^V85tct>>Teb(M@DL!Sn4W$3EW6H9rk%3d%Nq+9Pu6X5(AVytSLVTc0wk zIkxQI{57Mh<6ipyIH6lRYlI%|SsUxd!Xg*HNxNXC-|FcTZapwh>D9YkFwt(p!?#oA z80HlpoK|svPoLYqOu;EHytin~&|Laa`PdcF8|^m#neO@}ZFHL?)3l#?!N1%!N0Jl$ z1r~`Oxy!RjPD$CLDPgixQktj7D?JtMJL|VqTsW|0V%>-7M|ch%&z<swMUQLe`+wXM zj_7Z{b?El}OmFUI#fKfI&gf$}yvX<T&BciVY7d#8%e}c!z~J=c!P?fMCyj42|6Wko zUdi7ugVFxQt^F137k-9umz@)`<6CXnHebC%)<H97A4AUf;y;WLX@Asr+3?8U6Od`_ zeaiLTvXA%1O(*Lu-|`!eiM_F2Uz5GF{Zzu@i;SoKiM<P$u<syK#ObBw48nPFx9=HQ zgfU8#uAO`PudZ7Sd)Zw@+3ismC-CZC;%}OK+?r*<@xJeTSv$}D&UjJ4kaZ&?z#_ar z=HfqH29~O9-8)-%*H5teeB^_^py|X&=d4LaLd!1ly%gqkIr4^Yo;>r4yJjzXY#Zkk zE>x@A-J5pf=1w!IKS%d&wt4gL5tCU%*S<LqAN<vrkya4Vvbp7#`x+I+XMDQ~J~r#+ zi7MzZaQ!>Am$lYR%D-_LlNehf(+Ar}Zv3*$4Sb&$=*paU9P8n{FS|L+;_{-+wa<Uu z6O&E2*SMHl%H#TkD)xWR73$n%8LZ-EuSuOzUB+52=2dd#$8qL_%;VSVzI;1(=<_|c z029Se4eJ?M-iZmy3$WB*JQz`balyU5vg2FRZ)!wdk~`gY?6r7!{xkphy>s^e`1o`6 z{J4KV)b8yx*vE4>Qq6qbkJ<Cr$L;y|@g=|h2R1SL`mbMJy_!Bh&i?r9us?rZ9o;-X zzWG{!NxaFte;@qUUwHh!ZkLu(&Xs>x{ntDGewcA*xt!64BfXP1xSaq0<<r;M^XJ$3 zvmI}aOK=qL3cbxc;ZJ<^_U!_hSJ)VqnpLb>`!G<%Gw*NM^?yvdIqt8{KjD;I?f9?t z)Z6b5!k^q?X8SMKcbzBx(8DN?4c#SzA8e-GS%2_Q{u<dS=fYn!w49TlG2^>KiMdq# zA?43r*VoO@%XRQ>{3f-6t54qe<~?2szUD^<ZkL^Xxx)P7`){*LUw?lP@=0{#gFpMY z|1<oxtLLm*+H1r5i^b~Dj{E*^w`}`%?YsTgzy7uVga3={`M>km%jeh6$Hlz-{d@1O z-}C2Xe(`<wFa3^u&#T|_i~qP>dm`>X|NjT4`!{;;G8;O)s?Oh>$ME;zhRfyryo)&P z@BYbcFJ*o8kiY)+`<?9@!yIjSY<nNO|0zvYZsyxrzHnykPlNc~x3@QLnCRbg^U(C_ zd~<g#$**FXzirmM*tqxm4E2PP^KG4lll%`qdCT}YiCNb8<u&i~<t~dCKG&S!@_y0- zm;Tnpi?>I-^?o~fPaE66DdF2h@95f`-X44}Il1cA>AlaJFYEsnn=os)M=R(4*0B5x zR?Z{q-&*K6e5qo-5?t^{X#W>8%em~{*>gX=m0NZ6QMiU{=Lg?CHkOl@Nx2F4%zIkL z#CYIj&Z+w6layF2<9~kBGHkWoCG5EK6=Npb8Rhcb<$1L!t@951J!_GBcG@E-U~QnN zFoQjd!qcnwinh;~`D6NmYL8<xYn=rI_NHy&>g8Tk9&(rY;%(lArQcY0$_VehWx;5o z#JZ?FVV|7E3EPf)j@IoTTKVg}=gS&JcEq(@Ic>{-WOAz;|A#$ct6qJMul=|BeErw+ z$LszHzr6P8eEo;>Pkye?=kZx=_kZr=<!N85{;&W3A4<GWn|b!i&HC!SiSxJq?{nW< z1)8ybY}WIqMfrHb8&02?`s}!sP}RSlZ@&3o*gTo*`~Q10EdPJ!nel(&z5nO8{xdy% z{dfJ||JQ&2FED!9|N8I$;=BJRud@&OX`lT6{dcy+f8rk`4D8PQzhwUU?|&Kl>nTU` zrIs8icyiUR#_fT!i>x@WbzgX!f9uCR;=S8d)<`c~=R7fFiDKu4T>>tZ@g{jv77Hx? zy$aW5@sN3W|5|_=!wm(~C;y#(GgN&$c&)9vYt9`#sU!cH?0SP4T>1mg7&Sd@vN#cY z=fR#8DkZA(qSJh;ES^7l_~N1XQKgHAul;m<u|V|*OXo|qz{3fjEJS42>F#`0ESpuf zu+-ys)-uQ60Tyy5!mj&;vjcya8%eq9PkhU<F8^^=VZrq>_H>@!#7=hSd2Q9_qZdDP zV~gpZ&Gs)VQTM*pic{=YecazalkUj4P_MC@@1NC<%oa|W2kOU{73|1Rxnw4DKXl5D zhl?5~n_h@L>2<x};sH&mly9|x?<Z{iw?5|o`p@=u^Zvy@uV3@^f589a`~IE2y0+%u z`7Qr>-F*HXcdQS%|9`Ig|MI;2=NE2NU%nB&y?99=BP-M2#KSM%&b*d=WzvFs|FeJJ zf1dbXng>Mh{qNoX;Ka@UyvZ3yzS$RZe6L?@zwZ10;y-`BncsDOP%i#%+v}YB6HAKJ zPC7hf`+fLcEV~uYWUkBp3QCy|c3e<9x8B94E%A{`lI0x1-HAVD7|Ea0o2T~akM7>H z&o;PT4corm;;!eRj1`&e^|sdc`h>qV_4aIT@ieUR%&9lNr7+`9L7z|GW}fEc8}pvr z=1#lbnG&S4Ovt}9`}wjxjX%y;O#QsHFM0o_s09K0?yyzKD9*TlZF_j&;@M$)mtOf5 zpZkC1Tl=s6tzYeBF05|(fBNcwgLdV`>;4DM|DXM{{@UmL7ma@%TVeOV{@$nges>G| zKL6j5|LBi@TV_Mrg#Yesk@Nqb|K!Z~^_|!<{-;7-ZSMct75<2-{c2!o(q&2XJE`iG zCl$q!Q@-=~OTWU^y{zXxKe?Or_TZ{#FMc*}jdTxV&3<|&anVILrQfO+H{ABV+v_&v z;iXNvQ?3e$X=N&je~tX{>iGP7F?%a6AB!}5`1|J5+1LH&@7<B(8n3_RKx`7n%>McN zfBbr$AH5;UamM~)&rjQw_$Rp8Y<;%=MNYM6kE}tfncdsCbvE*6D){F$x9@j5{>1xs zWMunSyN?roF{GW__pg1KsLn#0JXZ5t_6ZLb^e$~ZRr}Am`0>ql(;u%n|HwY?%w!Gm zd&mEA{d7i$JGU&0cFbWsVL!e6+O@dJGvg+$VmTS9yk65HqT|u(z3(GtzyHua-DJ-T z)|^*&-p?=D-SFy5LVk6-?Om-ydO04;R%GtK%28%mqFAx-x$4K-&Sf0-uG+rkKE6+_ zW^t|C`)lFHg`%Rz>h^t42z+SXz&T6N{Kbd$>0u$8q}2bn#o29`WL(7(b}o{6OPqPM zd0}Yy^SYgO3#?8*;B{cAD*c&MedB<WLdp-(H4cAS(w4YyFU)Az{x0wNjVtcvg}Jv5 z-2A^Mnfs#B;#u2^x1IHt)u???Zy;S1-rk?E&)`G7tkIKH?q^%#?;1W`o;dYJMVR1r zv+(k@uPu^m3Mz|hJ!i$<Q>ki5v-60`JsbT;RLEG+(jfBfv70&!&t?}KHEd<SZm{-d z4d4D5=kr;<P7!qBFuwIZZI<Gy?LA$llLPNCtc?@qxhEtZ+_rPc9o=BhnP0Z-`XlP} ziE+(e)t6?SLPk4}SZC$7GPm(0T6Z7LEiUD}E;6~Z&E5HE>NfxQy*!goHXm)R+_peF ziiKZF=;6ansxoYcJ722maQd8I9?B=Z!rJFdV*c5T*yy!0xH^mFay+@p@&iLP9X70Z zD}45r-IkS>3)ywoeipsukThqZ-m?#qXPo)}EnKDIyz17^hPJ<dnO$n`-2SRs`Od0A zWaq5=4#y%Q%2H}dWy@-n*F3NNnO~DGdhxK~T$SbG+gpUszI|sk>#*-mRh9s883x}E z&#HKr9?RctIJ=zlZn=K6zm=N(pZtRor<rd^+_$`SDQdkmt9q|?N^lGFvHZu&Hzas} zS##BI!+p~Q=^sQUe&+Q*@8ojeYw`DUY8L9OF_RVZ=dFk`y!8L)^mkFGZrv4$x9Rz% zeEnT<B4f~YTRH8>gY%}HdyuU%XXV?8w>N7(JntFuW}UtBUycvG4;b!lSfI$N$)sgf zeXjX%(MyZ61FsApuH&qocEIi%?<I!1-mQ)NQZqxinf_?6b*tHtBWq|{Hrp+m*`IC2 zN8wGv+1J*xYCjdZxoM`Zc>Ygg4v){L^>=>lU+_fS=GBK~S04#{x%X-NgLsCI=c7X= zGQ8ko5Npu!IK3t8!mkN@rUxDiH^p6=bxdiq#QB7?Tp_<chL@bnHsf8pxbSdhtXFk* zW_*_0`s=?w@Q3W*&=8p0vg+;rt$)9-`F8(eLDIMCt$(*~`!9Clvd-Cm)<*1!f76pq z-ZVe2Exxk)?f&Om{=22c=F}eTmU+?WdCl77P~6NVp9HeDefTE#=||_^rbBHzZgSsm zzZREdx%-exNo(`zg6`>tbC*V4k&2lAkGW>b6%l^xjFwr4GkpCLbB@gVVfRPi^<2h) zhk-BBEoP^AFR#iv^grRa*^h;L-%I{7swlt6mUZ%9UfII(#4j=5mBPX&m@%hulvG44 zT_wqP@f3S)VZ=VxE(;4sCEv1ro9>jp6Z!VfImq2MS1Fg**>HEk_V;VHW<R!H$@%DO zYwG-M=Y-Z>%}y`nkda=SFC?;Lm*M@r94DO<LRy6L;^elSv)yvpa+}!2NzbAi9%pP8 zyKr{y6}=+|7H+P*5@_gUbvdc0XhoL-e^~9mi4GyEHN^#@uBK};V>@!q?|sU3HtQ7T zKNI$<Du`KC!B^hvPHE%L)5=?t6;mZ`rripC_)22Yr7x<n+ol~UnrHG?WCHJ6kE>6T zKibJ3x}EYXGh0)Dqx|P|#tAhSib6A1_ZO)23w8S(-fC;0u!`@@nJ2+Y4u_s(%sSZV zm9R<w#ryjA?`H4WVlzu<5_5y(z61N``tWN`*!|6HQKP^6=8PTMx?5g4b$@<Zvv1>_ zw>5R0yL-+Fe8}9)XS?EU{no$hzx`iRf9l5n8K<(f{@VZE8#w>tf0_Qa(tq2JZ~Q-z zJ@MIk%b<JR;VS8K%uB1^yQ(?*_{RTUxB1bnk77rzyUee8cGK@t-w&NNzox%zKmPhb z%bd&ar%mjSNqY8+|AGC6KC6<hX8uWD+ySKvUNhTnUY31c&+YKTloZR==dyOZC}nHD zxN7qYYq#_){om7ezR^AVa7yO_k-suE;_Q1DaecQwURKDZKjZqE-)C-FZ<o8k8UOR# zrMo*V+#?&~KE71=Df+nL;GCNubWIPi9Z32tG*w)6$DW+*dfq*6-$*4q+Eu<-*uD91 z+Vvd6c@{lpr!yXga8}jq;uK$f^U+n8HC6k6+&&m(e(*qU@5Q}GSJ&OxcejbTCg`SJ z)yvZhG#ok^pKtJZv*!Nm=Z{)1e|hL1$Rp@GH(7q4`;rI6x4yWp@QuH6t7Pr}>%Z#P z{=aTNfBirCso`PE{?9%fSU=&)|KA&!Qr7;juli-bY}vMNLeq}s9rvH`%tvnW{lr-r z63myc6%-{e_%C0WmXU4W<`(wp`{l#`_`=@ADIJ||^XFjH;T=jv>36RE>oJ+1Z&Uy9 z);8g7O$Sp#;??K6Pus`*<@=1oDf2y*W?ZODG1#EqmgsBMJkRhgj~n;u%^TVu_a#f( zu70mmb^4>i^Cu1dy!H|MvTgrI8CUH}e35p}{6go6`%$kg|5Y&CZxb(GY;N9DdGC06 z9K(Clghff!6EBPD{X6qwc5@=1!-NBA9cKjM#N6@?q<qBYK0NTQobB6=`!oH{IHo`P zGH0Ug3xBb+iN#Sh^LDacd1%kD;iAyXb>WX*vrO`;5nmpywMF9#Kj*C3%7132<%c{9 zz8+=my}{{$!>ao`xp!Qsc31B&b<#Nhaek`9r&xo9mXCDqSRU;77hb*b%KXLGRev?d z9~605KChOih_fy2!usVu!sP@bbN(&gGe6*p;-fddy&n%rSkGN(%QPqZ_Udyb8>C9Z zj#X@u;$Jf_*HSg@(3-dn(b4=ZhW~#qzka;z%eg3dzt;zs1+O`7x$jVDeAVoCw_UH_ zEPHRezxv`X&5dOaWoN!8@N4eod3djR+QR$u``Rbp6FJfGl0)Zk#+{k#-Z-Y4%<>6$ zsC~Ist=95%!PiG$PcOeee}_;b^M`F=`y{x(i+Oy1xAF0ggMaeb^WWdtoWG{@fy{mG zt|<)<c{`k=OB7tDO-*Arn|{Nmx%||HX{=@!T4cMo-j{H{wUv)?%EW?&;q%&Uq?;JR zPBGk`@HBo)Nto(^lV9~_>VE&^5tI6V!P#$<a<<i)CNDT!zAoXm?#Io{x7&A@<;hmd z>9Y3;h1<q#xivkaIn*R!$He(brcX<PvtQ@Ro840sxb64(kI1Dndt5o=gi7bN|1;9? zVYTECn<LS{$}Zbj?|$wSf0gagZ=XaweY#^9jufhW?)T@L?=2SYDrev1Qzx=>j^b?2 z-D<u9nbS=x?_`BFMxUJ(ot^i0%TCiwDVu50?4b{?Ii6i>y1nk!omqRBEv7{;4}EYg z6D;!R&a6FY)_t+(AHNB0Nd5iw;nuX9{&Q2gt)<mwOtUada^ih<E^T}LgmV746OP82 zKlj_+Or3g0^?c^nUuxIWO^<Zt#HZ#ZPV$r3bcc1zV;i<D!gJXkaLH~ncpth^I{K8N z!n}P-okef{)|DJA|6^NUve*4?+V&#*{hOPtH=OtR6?}VM#N?9)W_)=&FV~lC@l;Ex zTYbr2ejht!=BDf*ek{S#P;BzmlB@Ii!nKpH$n!5dx1oIElh)ajXNI({u5{d|`zS}w z=$+)<Gr=PKE7gC?gq*z1aiz-XYMkHJ>A`QGPT8t|CC-oO(dxZ(vh<fL^R4WE^He23 zXqRirZxeqF%cwBpd#||V&6d1OP2W*!$@rQpKW&Nrp^w|XK54RXig>2kom9iqT{K6E zPvUN%@Z<^Gv?^RAxr0^Kgr&Icjj6n+n(DSUCgNYJcY5GOk!MTw_l8*h2z#Ha%Ky;a zI@L3_b#b^;AA4T{>)HMc*0cUOto<KO39NbWKsoB*LG^7-?is>&xaPSpoUpUBHfvJI zq+f-LZdW>;e<V<FDdzOfh;YlpZgc-HJoi7~di{#e_Di1Bf0(<IwdIass65y6dSl<s z=daWov^@x%`~P9hPx%EL8B3lv{doPmHY}=RL&TBj=ZQPNt=aB#vcrDTaTQ0G877SH z=5~4s9G#@zQYI3#MdwO2ORBPGtzn3PQ6%GcCT0$^f8FYV{GN~Bv~G>Dax}PKoj+GM zqx7N8o*&{BU&{o;4=wHgyg`y#Xl2RE>TGqLcek#^WXp>cvHs6>+Vc8?{n;>XU&bw6 z=?nr-^AdK3E^Aodz3O|@f3?JYJ<CdGnyvM|zwz2^%Xu>4k`mh+J~V~DxPRm|Kkq;D zRjYKw<mwU{|9@{+_TY06-1|lRQP-xFN`~B*|9_m8Ua-(IdIhif$0fI49F4!ff3CC8 z?Dungi%XX?zsPM^xh-vNe){zF>kk-AUlVvV+F>i7W%9$T!TCoI#Wkq-%Zp5(%OL!1 zvS<FK*GhBPV|6ljTg!|3MwTmHi`l*TNUHWOj%y+RbyND>)82P5>K#(ucVheL#pf6m zRVxJ*<{lQinj5{FqhGM{+xHo^w<^~B3BB2JZQAA?8LQ&w#0v+h9(&aO_*~hfFs&%v zDUs0?5!GGS0&D6#Em!U>t||X&z^*gvRLmJ0#T81wx~mVVGX0zxdwF`S&BH+5hwH1h zC|<G3fsBLvT>sDV;~#O0Y5Q$nvdpOc_qyM=_{^ODzxFN+od5q^#lO!@S1!wkv>Ncf zk=u0Xw`2JtR*SV;x0+uFW=;DZEpK-FL;Rf6?<E6bzuN_*d~-Nj|8%$X>3Rk)#~FqF zeoO9Nd(dg{$FyS-OPVULi?aLM2OC1R6;>%JUg$JZK2vFycYaPr;>IW1UzBVvGr5Xp zm@Beva1PDS(ha{{m%d|;o>lY2%rc#7tG5zuJLmL-DW_Y__)zD1!<9>}=4W}&e9ffG ze;@8Wxc$pL<}YWI<|tN7TYU6JLD*rx`|s9UHJ@B`f99>nndyd+Uwuz+sX83@U&(Io zqaRB5++}8-onCD^m$~=Lxm)+FQrZ%I7qh(=*lMkF?Oo8D^&D}JjjmO$&C%WwT`?{H zyljZ#ZL#e=d0c5t0i7E+7ab@$KKJ6KxH7h9DR*Xmk=bng*4nRrlT^gxryI7E>lAA1 zew=%QeWwrmB8QHvB{uV<x*gLK*Rst$cxXn6+UkvW4XY;~JTk*#@xup8F02YxR$@7K zu&pj8rNzRfN&TX&%9Mn%UKL))O9!MR7dxhB-emBcY?$!nC6_|xQy$;LF<<6p>apH% zDLT_XT}J7QQ{$BDlNQSCKA_HZl>2z)!#u;qWqcWmEp3gGJd2|kWsmN?d+xp!{}0B5 zzfYt8yynX{_#oT!_S9h)1ND-S3yH!93QkN8?Gc|*eq;CTXcmE=EEiT6PUMfAreW>& zXJbcOwW@>EJ(G<o(H5&W8Z+tGM@j~4vYh)e$?C<IH6L$8-K<@(Q8HE1*J^II(ziLM zle`VX_twOHv#t=lul<wv@bq=DQlbtIXC2)&{omKq`SJgLEYlG=SW_Lb{`s}4w|ng` z^;;JF=bI~YYLZuG&%`PT<8@M}vl73}eVTQ}FwEdc0+-pAlNSoD_BI;JeRY2(6tHUw zN8+xy)4#vJ|N8x1wD=?&ty@g8tl#+W*1!7x``8xqT^Unl1ht-R_E2>b-t3lKox?Ym zZ-%_UuHfW5kvu(h=}*5byZki6Mke}Lr*QIe788a1w|DJI_Jp!Ki5!SG>l2l!VfVdU z&h-9){@iujUw+xWt@yR|IpcKM9qkLgOu5ha>Hdz}m!>rA+x#xwt$$_q;lBq?99&^z z8T7J$$7CheCAkt6@}4_P4r^Fwy@=>+xVR(eYR8Wc4g5||A6@%Ux#&Ro((Sev*NM-K z`*P^<w41E`H&|Zo<<y&$oxWXv!5o>Rm1~@eL)144m0Wqwc~sMGS+djHo6Oaz>#e?t z$ds{pd#t#&;JRVevm<dm%ez}MJ<e_4aD1Wu#fSSeZBI99^)6iE7t->s&ptzR8jpM8 z2an966qk^~yWe*F^Im=7IIpn0#T6dL{;Y2`9|Jx#T${wrXcu-y!+Va@xw+robZ(T1 zlub9;YSrABShno((Iw1&ntv~zkg{CdSh%oj^(lFFEhUjhn=dIpeE&rG+{NV!!nDsz z1xzwOpDH9Mdu6(EaiTTzYGWgr4f$UWX5Niz$UP(Tt?lv4P3E(tQv1!9Pnv%z`G?^0 zm&%r3Lzt!(vWU++!1(i?NsvwajoY1R-s$Jmd=GwFq}pD;CFu3}_V~u)(<hUcSeJ-w z=5jsIP`A12u(@Vo_8X~5_vY;iS=hGVq{8dhO)~POJxkoq@f6H5e>VBXX;(ReCuz%N zEFQYMGH{*m`gpzb_q-neiGP+}Qx5sR$xXY=@bH-<sn;KGpSA9F<O_`wXC)cdxUEwp zPiJIjr%QhnHB?Hmau*feCv{oXXWf+Zp${FMzLXm3dH>&MaQLH&Xt~gA%}>=HhVC7^ zmi9;<)tojfO7NDhHuK|mnk%bSN+w=Y4&HV|Sw`{GjehPEQikgf=yfn%JvA>@u+_`^ zz3u$w1zM9XJIXzE%2nZSYpOZ2TEkM-`KTK&V{o&`;-|tbGPa6~Hl*>ithf7QFz?E> zC`-4bNo%(*5YAoOaFr`!Z9}L(<LPG~=QyzIUzq#W`ug{6*QeX>t@`-*YWMQ>^J~rj z|9o}ywfy{lA0B;TEBL+Cdi&m=*KVJem5`~wsUgF>)+uGe4#rz^`?QX(-v4oJF2mm^ zT~p^MHQu~<fm20v-tvSZpW~e;V{i1O>dT~G-Pksbb$yHY+><vNw^+UE@7<Ug(N-E* zaf(y_&?RHP>HnTvUY~wM_Fcr3l<cQg+14|dv*z!PzP)q(IgyobyqgSNHke;zo)XS) z?RwBrzvUAj*KxHeJb_F`Z?)Hkb2w_udamrwH|MZsN2Kh(f8X0LoZi#4$KmjGl?0~J z6yfRzMV)gee6~3v^5SfpVd9g`Q%uC3&x{hBIg_bk^Yv>zazFUx^{W`|FY@o>ZoZfD zv$IB^McRllr*Pj4pOew-6<0pSm;MQt{U7>YM)<#|Y-!)=-+>zcP8;;vRZQ>rZ*=TI zztz9jJs;y^u1wds$i8vv@ye}-8dm)9+{m!;!}jGG{I1c5|3Bi`_(4|whiGfZ(w6$d z<m2ilTo+Q3HknN>TzB?~K#p;wqO%6e%>B1+*~`lOf0*_DXX5>Z`kLpI1k6>=dtQ(% zwC7ciJM>)S)icF@JEy;M3Nk#O7B8APC(2gc%~Q(AWov;@%kkfuj;jx5B+d>lws@=4 z^KgN&MBkfpNxR;ZPn%|H;&v^;!pzn4Qel!E$2^5rmQCtTzW<7hjMPuxJMf05_uvNO z2#d*msfV~bj#gOBmFk|C+QTBtq5O%fOw4+IOw!LX%@6jTRgMcP&#XOqN$kL+=QGqx z)_8B}n*Q(EnkCwMSNJ4mojV&VH~I6<;MCxVNt0N18%*+BrzZS3hqJG}`fJcfzGZ5U zHk7sdg&ur!{dE01o92cXyNh}UJ%4>_mbrCk^XbI~B_;Z9i4xJz7aAL$5)qyykbLQc zZu;R)rX$iqWz(+2x<2UE$hHpHbzNog{-dJ2-0xf?e+Mu=f7i6};mXE`PEQ}6SX6cL z*WCM2*~hn=$ULi=xjTIFg{(klvwOQIK8vY!`ntkKAz+Od=iPlQ#jjpxiaHAi-qhrB zek~K7xSeCU*2?)x`%Y-7Sfpesq<iGo+Z;<>zHNF>X<}DZhxGD4dd26Y%$DmOUa;u& z1e>q&J9+w-_Q`J+aecMe=3G!gRQSiM3h#oqehbZx-}>$A%glI-($yE@4rhg}*>Kw4 zeA1LS<3!P3?$=GL78Y(yP?;X#d-_LIx=N_=WtEDo3#l&;iEVQ9;A)V0YwV&{#G9Kf zp}AJZbN#-cX)}II2|ZAyGON-j>Et4zM9+1PMVY@opQiLA>DrS;(_;E;V?I7HTEVcB zC#xvXTkp6WQ)SW2u!fjrraM=tia)FRUr{Cb?N`5_zBA{yhFNh&FJ0gKE#$g6LsVgQ zRHr5X%{d-A&o}x$6ZY9Z&3F~3+agBO<&U1ZFZ*|D3Ex+ffP|&2aqUO1&+7HAdCvCk zQ0#6=yXLKT_iUSez3g-U`Mf%dSI0I;d$)ub?~Yh9_3nq$x6fa0758U)`d(Gla+8>8 ziTm8`rhg(69c$S(Z|AvXxqRv#p41bI`jkY1CU~{9y$k;S*?7k8r;|@kWcS{>X~`~; z$y-Y2`x!R(_b0KL9-Xpq#*&@CL%J-R1%u6wuGm&tCzYaP7Cp~T@7Zy8y)<9FrDvut z7dkn!XWAytrSYqGuyQ=z@nRNF)=9&#XG`rpCAf?Obhu|feN+F|=FGC$EXBeB8z&!C zToG!@6vbV=ahA_<*>sD!Wo+jzyoz|X>bfNV@5?7s9z@t4UeVjIRd9nDlh@6s0^DMy zo8N|?IUA;N^GXCq;HzziKCN7lY2f2=>sr^hXqPSF*K;I-ZYM|a1b4VBQ!C}#cw)0a z+mVF2kRu7#jx0FzLtN<agT+d1j=nrvZ>nZUtjfM5EO>b5+DdtLLys-@T3r(BLR<p# z#kq1yW{9lHohLled4HJd)W}B$zH`ndZ%E2=xpiy)$taCRt|Hxb)|U+tOS)$Av$9F6 znjJ|Nex<opXw@c$u!}ug3crc{S=7BMMZ~*9IsHKSy3cV%O!F!d!{?QI<}yv^KE3~m zD`T9JWZCjyqwh-$vPyd$WzK4B=9;^s&*)mvyvX)7+Dm@-XBG-J|NEuro;X=cIIBv_ z(f{gJ;b$i}KL^KzbBgU>GRGj>GBCjJ%9kn1>TL4M=Sb9az1BJ?F=vW!bCjRR6k$`_ z)Jwso`Qk=TTdricy;`&SNHtSbT#ZZjpA(-JEn9u4=<pwlr)@tu*RR*f44m)O<<&iF zmeGopx6CKcEL!wG^Br^1JBiH1j}zB^ROarPwdT`FuT%!kgGV(l+bJGWp1ACu)77tB zaTgv1)%b?oveY}he1F}?FO}z9O_xjyb~d*$2z7|Oy7I}zqbGu+E;Q>*__Isy;e(P! z*DaIQGCc{p86^L4(u%b|6tg4y%y)E6PyJA+dwRjG(?u<{-dl90>ai-tN&OUcRM9_M zSZzD~(z<(pTYi2!72vo1Mo5rBh}z^Ul0lxGoG!i-A`G2^guJe`Em`Z#5OvhzNuZb3 zoPI9(jYZB{ohQF=>*;NlQ<u<feI;l3_{DMW>Xjm8>ta~lb0%CZPVt-C{Oq}NcbYEy zd71W^UZu_F+h4JnUY%?Cz_|65+)|;Vj|1+`<c_PU3MoHywodEo%=!FZuUfyYbdCtl zcz5wtk`3S8udgTPi6*6HD?j19en+Tc(XEqj?5(*|xT-_UD}0$a?b6y--}*PhvH00@ zr{Xl<;{G|suWPo=TXo^if@M41{oa<^dHb7Yyt|WmFw5GX@s_c@_^s97ZyfgxDT~wg zH(jwVe!iMk%Hx$)PFuKERjgDA+ig7MMon(|+bJ6?y_8*S^z`}8`OkTN#y38otV?{U zl;lh9iTzcxV@zMVZ|z*Ck$B=xi2U&n)4U>{rF%uB`9=h-$zIuF`oo7aJ3x4vh;S5F z;!5*{p_4a+L|?HBI%IXwZ<<%avvjY7uhTRROH6YLdv4ek`c)!g^~Xy(ahhLB^}4Sw zUtPBJ(#4%T3C~TVP47%KbNBr4yg1kFvfi`Ly-)L=f9C#kH1YL2MZVG>TW)661pe3f zjdhu3T)oJDzWLI7_a)XrmT4Y1V<+*?IQD;C{Ovcf8+J-QZp{4Bv(NBSwdwI%Gy5GO zg~u<bSFPu6&AV`Pd$a>vvn-?6m#MFR{CfA$1hlU5LwvH$n~VRO?z5$>Pp?blIhK6b z#KHK(p8Lk^4gag3KdFz|q`Eiu-tYb|$M3$esh7{)nUH^sUx+Ju@y1Vkd)qQy`$ffj zP5S1mNHJ~o+5SE5#;a5p-`rQ_6%VgnTeqg1@9UYn>kl4IH`sB&d)u-6e?4DXetaxe zkNEYDFH0^bzBBxO^zGZtrKfp+oK4Jj-tge^^>epwS)1|d%Jo$@$}Ond8D0_ghoR}5 za(!)GRJh0aBejYt0SfLX65}tN5cU!5Z@ka7AkqHxfgF~D-`{=9J+Rj18u!6+M-PUR zr<=`^Kj#`R+qKPODbGW3>G)fn#>KPkpDi#nzb4o7<%_JvngcPl8zdK%USY~ue%kax z(8|ysk{^yqf7mDaa_NWl=?=Q=%ViQT1nQVSjotr9VxokW#NEP;Qj*EZ8GhE+5_qnB z^{l@&Q*T*!pJ^1&G3MhDeYwW(Jrw@-G;T6IbZ$=Ke*3Mzo6i*(ZLng#JhS0k*y6ri zzGdE<%}v5Dr^cmcdqf+%ByzNF<}SI_ZFpyDBeU7O#JcVG*BlJ6zCP`q{Sot-t~-sj zk7RG>@C)28zE);N0i)rOsL$-jKRulKbHNGogL5CB*Sr5`&0i*!f2rrhPi$4v6#r_! zx8|ewy-mW7w%n@Q{yjQwW7Ve`YOq_(%ixIdx0FQv<;!kL^0uEo$FN|Z@!W4``jV}m zZL!~Y=3YYK6GJOrxdz<>&!kvSroL9=FAV5WS8HOiPWwG|>ny9isp*-0xdyEdH*DVE zKKa~|?OT=yC+~d4Kkc|5W3M-ZoAR^fT~5*7OksO&C)9j@^K?o2jk!;=4BzpH?KONb zzi$2I?Z>a3nxnV8ZKsXg{feBR!1uG`_nmCNc6_#+>Jr8$KMxmItIoQ^@!(!$#N%^| z(ixMYblB&<TxI^Y=gh-`r#kB2j!4Lv?<~Lei(y&Hmy*T#d~LDW8~50(Ql6ioxjE#o zYyG!RXS-J~wsL=?d!_EnbNjt#V!Ktt6b~>7q%tX%@*KHwC2p<N>4yv+cb=BqnE9o> zA!piyD+$&Od-@GaCT`?dX|wrH>*L@2xo_q79@zTs(@Qq#ziCQued@n{zJ7oIo?q`= z=Utar<*T`RN6P9PjUu0qnLmAQ@-(&u$!lp936(D{{xw;|f2Gju0FBaCuhPvkazt_` zxt8Bf`W>fIaMY`A^MnAAQwOIMI|k1(v6>uX<?5s=+S$V#xcQIRc@CR@CRfjh1}~q& z^7OoV`q^L81ssC*y!8{b|M=bYNnh1XW$%A;JPxm{ou_nt%7uR?PjU#?B!o5bpP9v< zWoOaH-{<c({Xw&%>W_qg&yHu=kAFP)@#RMiJB#eJJt1}$x4v$A);x>f&;Q2s2ke`L z{sg>sH?^O0jDLB-!JC`emlZkfw==vxr$9%2PDo^H68lWnD|Vch*XJl%wKgmfI^VhV zg@&}T-ZPDxx{sn7<6CNubL^Za=pOq(zOcFejp#qa@*n*V-YvXyf3Xpt{M64AEUvmL z-FA2SW;E}G%EuLPLhd^}WnQZnPFmbzv!4Cv^=|cFwsWq2e3){cU2`4(q+0nrFEO7d zwess4UlrWl?fJw0&X%p#A{@eJ>h?BpHkSSFR=?G{^>(Xuu6SMb$A?P}tru~ht9!_M z-7CfLK#Rr~emi;6MK3?tz;QtN=Bkw}UVlqYPI@5IcWL&FV@a%RGj5p))GeNRd8W>9 zZw2my57O>$?D_b^=~>lcueV=|<`?fYJoQk4dvpFbvB`n#8p&zt26Gu?H>dMhKRdOl zee%5ot6ATct}_#Aus*%rtZ>TPmtovu6Q3T@Dc`qDS<p*<4X3{5{Kp?{w3DaJXqn>w zDZ^{3;qhXzpVR8u=XZwBblovoLpqc(b#d{+p8jMjuH5JAqUROPzi2Q1%FpY2RC}4H zwQEflqetnASz4!`J{P&Q^g>Q#d)d{6v85T;)kSWVKDfHdsoLS<hxPwv9^P*uyV`SQ zG}qF{mS^NY^(=n)P4UFch5w#;->aQbQ!aUP`bEjx3pHv_SibwX<nFtZyWc;qZ;1>M zdB1Yi_FL{dQ$vcs&sZKWzxSEw2aO3YV<#-V>~TPFtypiuCD#Ldb5CY*h_)`gJ9EbA z(Bm`w#QtX1XMA(FUHKzWD)rQCuXB+%x9-skF%$YKvQ+)B`u9Jt`m5gGIi+o&o~7p% zGEKO2>MBjm<(cY2S0-t_P(CFxadVb}P-uT}NuQRcw9wX`h`lTNmKAK9P&4sTLY;|M zbEG!!)=L4%#Pd_}N<mU=^1YV~R!nV+%0wZGRjVIOZ8KJ>p0vb-NA!2f6))$tCJ3Tt zm)Bv=nIBzFHUGS*!T;6Nb*;^nQ_gVW@XSjcpR_=vSCI6tt==hX&8}oQ!-?jyb8}Ab zd8c6f{FCyLXuC`QqPDI$Ihk2a^r+W78MVm094CXDm6slI4O3PLN;G*glUZ@;F^73# z|033&a9`=zA9|<O`|W=9C2Q50w)y=CQLpj(y97*I`5#(-{M6kqg(``^?igu3<&U#_ z9yHfw<&rz^Cau*pof)Le?At#zvGaOXpVg=NlVqJ1M4a^I56lkRnih&o%wL~oYO&2G z%TU*Qi92VbRqReHyTxq*7mc!ASBGuMLM8mdww&?zzG$Vy-5GFE>PlDG+Kj8H#N0I* zymq>-uRG4@GP!!ky_yzvah2#=Wa3wi=-P!XUPq<|ZSgx%rW~^4mG+UShpR-_Arn@y z4~^_STVJb~dgpa5h`PEebS*ORt0r{qzva)w>SMxG8~3RiubuQo;dD`^j?_D^*~;r? zo!@%XXZMWr=F@i1J+EKz`tY^8hi|_4kh%Hlk467}*3^Glckl0E?brXTk2Bp~H_Nc< zhx*(5aqI27Ap24b_Fs5+zOjLMLO)W2N8xPm#{(u+Zucc#?u}BZF|+@6sJtu=(&Q;` zUC=Ge-{hP0F7Ls{lJ5$Q|J|Dz|6FH~Quv$C|2OZ;J_EML8xy4#NIv<$@uu;<3sujb z)UP?Rbo=S*{}cc1m_7ITd*!(d8vH*T5AC{=v8E<}abncP<XCs*-pA^lZ4Sq;zTGRn zt%`Fc=gON7?vd*n*EPxi<vG@N{7l-C83*>yi)>^T*|6kM*=vDCJkP-Ma?>Yi`$n@X zx81UmF~72ReSXo`46UDTPS!ooFP!mQTv$7Ko@?`=mM2?Mu79*zc==Ar78A9{6R%40 zA4^L&h`2eoGm*#oSV?AY*tX<vZynd2WR{mOoAy4cY+vIOS&Ku5jX$;~zG$15AHWo` zk?-~2H`3X>2BpQ94l$|3e9seNUtPS$bhgpc7_XYO|F8av2NClF{zvcjX75-WY<fWE z?|S=J#lP-nTv-2gzrWA_-*Umi*IA;sKRC;MHU82nam}73{gbqm7e00mkUDu{(v@Qc za?7>)1np8*_oY;76hD9S>E`Bh*Z*IVd|{hm{Qd6Dr+4f2bI&W;ed6EyeZ|x6r7<g9 zwf%2)B>Y0GP02y^yKlUwKGD57w>e+YVfroOJIlY7?EilEDC4#Z9`|Q$jjMjoY_PZQ zE!)TJ?Cito>=zD2XNKLlbM0RBzi3{Q8_kT<?p-Sj{QP(B*5myjOxvEZ&DwhV=RLj` zJF3(FGQ>A*>suQ?EzC1=)5LXC#Fj2O<5R~OWaaOxEZB7_E#%DZ2PcjM+^lY2CH*-2 z@BVB5!9?q?|Hn9)GWJ+}WSEftUsmeyl7IK#e?4>S-|v+#|Jx^IS)Kght?}tkmyKk^ zBqe#HFjw6JDN85(yxzoD@i=t7@mBV~=Ms{9t-7xkT$E&JO*DGbzufOUXSPY~j@whq z1EX%I7HY@d*6n(C+~|<qBY#lX!y@4GwrbGW`iiUnfBn7KaQXkS#Zmu%ANjI>K8LAl zEW@GYs-ligv)(03lsa#lu!QGWuw|(1k_k%Dsy;e$K|FJxo+zxET$gSb#c=e39Itiv z%FL2q+Q~V5;eQ`iSm+9IG3Fi;zo7O9vb#wxY5U`~RujaSew;qGv8nmJg0$g*hVl>7 z{jT3G`E^&x`Atpw(|hOj_V`Y`cJSP%|J#n8V_}{3`&-txWA+wDms#D9Y}obpt!D7G z{W|NDi%qm+PwM#{o4;^Y?Cbwq|Haq-tv8u7<8K^j35Wf)|Bcfg*lT?IZ_2aT+-$<X ze7>HG8~*>_UcS~hPwC{f`M<*j{<;RWOsEjyP;>fzZ)VwfpZj+|p1C#e?%s>H7iuhc zp{COrHzDV{)t~$Mp^QQ=PA+y>5!!NCS8-mbx_@d~YMSfE{mOFxFE07#f2~p7WWtL7 zF77){rAr6&{+B!_yQAxV1-JNz=M4SNb9mbK3rc)jY_GC=z5W`ZZ;$roZ>%$4{`phw z!}R=J3Z1)WS1&TYe=PD??Zfzx?K=);abMF4n;y-+|JeNBhukxKKg!pn?BMvYv3rC5 zAHfP^i9LT<_a51QeEFRpm!Ia$`zdtSe5dry%i?wQZj78#Cj_}C$NpHlKhSLR{=oG% zdHwu9Ze`RS;L-b#X<yfN&!lSli_A-<T)%Dy-})QNnXbLN_ulgb7pJY`ZxB7U<mq+E zM%64f7tZNV{8pZr5bHVTLeYssSCj=amuWIBaTHv&PNmP}s0mMlg4(>fo^xKGzQrQ- zttqrD!+!3$?<~*zHO|%a?y~=CCz15z$;*_#+k`W2`u&<<;FYw++=qXU{g(L`c;5Y$ z?0z}<>EQ!27g#bjZ!SF1^oHm7caf`CE=(4=eDKMeu63CaN)vKCTc$O=wL3hiG_<%O z`|bK80<3lQAJR1@P2S7CEV**s;x(TSA2(iYGcotwYXSS$DTN>I`D||cZWm_J`S`*1 zUmCj;jp7!a^gDTDL&)E!hi2RR*)5#TQp(J=E;M>l%D00Dv)?e^yB64<uw!D{KDBFw zT`8Q)ClsdD{0}hsDJ!h@N$&X**VA+Q=HK}j^6bd-jF1JqHT&h1R*0OG=vbw*Q)!cK z4}UCMMArnRRnu0UHgYgBVCX(2n5`(co_(3#;@4_xVmpPrt{zT^O<#6F?Buog6$U(3 zI_q~kezE&3y~OjYteVg={`u4Ad&SwX7f;z!RF|c-dE&u?Gb8jZ+gs#TSKkiVF0<Su z;9Ai7Qvt!D-r~H+3tbmj?c&IlO?p_oAgwRww9HGNr+t@hJW1j_UOZzG<D4pk6o2MO zzT`h=OxC32y7SiU`u+6X-Q#iZ7jBQAt-${HqP5lP(=t0IPOJEC_MLNyRo9g74}KMd zPd3QSI6rUl|HiU!x$l0rP5xPAHTObBoeh)g&iU@={T3d&Ad|A{f&j1R4W$jS3bXpS zT&_=;@N|aq5^vYQkLhdfiXUpL(Yz5MmOIzC<<H;a-_7^``>{{TrEl(^33@iE>hBg7 zUJG<#WNAn~VZ<gdA!V{i^WmOH8Onl=kxg8iRH~<VFYTZ4*?f}B-*4&<#VuSJMHXFo zZj-X>;DN$PrR$74o3r;!e4l$#=mO)r8eWT(xbh_(YSRQRItX2oT_7<nYns#>F8h1; z_I%*WlSy4LWtZC|ZNDq~;$k*+Z)4V+VClU`&fEOZ$LVK23%zW=^V2%5iF0CKZP+S# zYl)BVJJ%a(<+J<x$f%|9F0uNt*ThEc)~ZHNmWaOY1&dezTpMtld;ands?*->F5l_j zv+B91<>8NSpYkMf_WW`7<chp=j`{X{Ui(OA6Zxvo4^3yDILGFGK}Oevb9z{Z*qLPI zeS&MBvpc@yp4;;1!}Y$`zvsTMRs0uv^T*XD$LG~$V)qM^%{9Ny<?qO^5K@rt7gU^S z{Ql{@Pvya_ylwYi{HYE(b+mY&IwQl%y`kMFa_^Ogo;2Q7`l<BwyVdeDYz}Oee^%L) z$kG%dxVKiKW>N5?hd-j9&wnKQ@=)Kx$Zcy*C<huU%E{!O6!Eq3OA<W9+^|UM!WQ03 zPj9wQ?QaXcadF8Bi}aa$YZWCgrm{(HDEHRj{gGD@G2ugX#ec`-NG-R`DN>x~2i{c9 z@zLU)#2*_~Kb?c?pZd~&Yx`9G|7DNXXnuM~FGKS3$x|PXl?0f7YI$1tN^JX9!<|93 z;St$p{5tF2UHZA|<KJgKVbfnZzrMNVpncum+WOO%?%aAFqOs`O^x|1ZnnM;kF1#Yv zZyURF{g)FS8_mNyd-mQnl~xwoB~m79F1o9vVg}=+D-LEl&wts(%#Zclm?C&Z%Ve+J zek=R<t?m5TN{7r065d|9&hT7TZMVgATj|6Js~g^_U0gZmMU-cWmb#T+$($ESi%z$B zO;xfw(7A4^3%kX|!bOi=!s{}>@-CX}KIg?PkCIOv!m=Qxh8J^Lc27^R@||RPdFzCi zTVyV)&3S2YId;O^T@#N6cfHxMc-`ET<Fci5-dNn68s}i?U3_+`(zB58DX&EAex6#{ z7aV(()n{|f_PE_s+|7y(*;b}JzIfr-G<Jhe4u^_WzC5e272g}qtx~fj@Kq_x>fi|X zufJ1{hw7XbNDU8jNnp}Q3cKKPluh6!-<C7Ym2$mT92ER}b9UKz_g*|Q@j$uVoqu1y zJzM<1^0m51UETlR`G=yOv1)1j5P0}*u0!>{;wPIXTNd8&G32*=^WNcTMW|T%hwb+H z_y6Djw>VO3_r=||2R~%qDO~Vu*RH<A#l0oYQ{9b%Vy?SwbIMw)uteIyT*cjO(yG;~ z-fFbHn>ER<s3e&2f+61?1+fWFO9bz;zer$F;eNGgk;W{|)navJ-WOvdL){loG%;$- z%#^xhdemS-;;mKL5eKd{<|R2qKR8h9vCGo)G^e=dtQ!~8XX&Sli8UO4x#e}~ghR5S zPW@MNVtT(;T4~GuZLd6174NN5<?NQbGDKukp0&2?4#C)GY1>wD%bQC5u28Zu;8e3= zRa@1#ux3XDo5X{l21Y#|3DrZ{Mh7nFvr7DWYUno8bC-z47H>(vE#1<7T>e>05-xsu z)TQ3aw%b(ZJgd~xIR~EbcFKkwmg3m>`}@Kb@n-wWH$9rg`LTNXi(6V%|3BSaxxR<t z`<a6CJm1gAd^sbdcQt%_^0UgDddGPdFDx-XyKZKK&$p#&*I#~#%b&3D&|9bGRJGhL zzNNR{%PXs{dV9F%`RntK?G-o8P&u~wFt4|nPS0}YADZ*E_I9d%4cf4zNJsWa5a;(t zYSRuZP2em5^ZK8#P0RBCk<C5rRN94Do@u9^grpu^5_?Kv`A5fh95cAAZ8v*l9eaOM z$V5|oUETXVrvh81ex93_xQ%bYUCu4NbvIr$_mmsmK4iLU-pwuf@6`HdS0A4gaPyeO zqZMgy7o|Nj%{`TStK<F_z2lk8^DZ~73*P2>QMzcJ*)v;RksDzr8h5>PTwA=V<7d#( z<uh%)E+;Hj{X9!sCOq0Zocm<dcB_oi)y-wws!mocUvhP8SaNK(_BHRL-72~FD!6hw zT>_TQeH&*dp?vMc%SSxVXLP!|-DZ@GU%X_`pNFrac|$gv`mW#O{C451Lld`a2=4Q% z-g5g&SHc;lo2#G728vAnA5&y@-1zwCl^<nR-srRDn6D5SWL<gjMfKdI3qGp<w=L)^ z^*F$};JAv`<|8Tp%?hq`v-VYOJg{<_g$Ofyj84IUqfE=Ak_1`%$~N{ajx~53a#DBU zhRk#E7u;TKIA>w0{$fL6`Hg=?=WLXnPO@qRompnO!YlmRPQ~1&v)2j)15UrS*1oKp z^)_#__mue>`|VoS{aU*r%yDIz@tR19tw&Y7H!O+Mn-<ciY8DpNq*|~uf=R|Zhi5y7 z_pPU&CLOEn?9~-lTq)VTZfnM>qf4xvO`e*)UuP3O!{>z0?G&Y+<A=Vc7&YIkG1}R8 zF5=u?*35&9H*dd<-TUx%_6@ef2S3#RYlyF3+LmqmeZr#L`|+MZU%sYqik~JDS*u)= zyNGex3{$3>-`sEOT?NxrR#fQpH)wfpQhLqY$^HFkPM_$4^!O?4#~h@D>iF9On^>0p z_H@YZb$6XPKVIwPem;hu+WjV)f5R8eSN+<{<E9)r^<!eiex*#U3S|%9Q}rS{_y6CK zynp`7XJ_aAO;G&tF!Yb6<n#5DWF<{MzUp$h!6BH%mL2Qa!5{bjpj4~v(OIrp*XRGZ zB>!>yJFn>q_wzQWwT52qW%?eG9?9Ze{gAzS?<r}ix$=A${%jWi@%i_;-?#bY)$RWk zn*S`Q{`~y+?Q_irVpb{wONvX6T(8=y-;^So+w>-N!_!SZ_8$)YZ+Z4+&coxUOD9UK zWNMvSb~WX`hsf<ho6xqCa}T`}ysx*{#okhP=clyp+R9H4&z#;^aqyV*o8n3C*Kgl# zE>}F6_Tt@V^W*(NFBz|8Pu#JuU;4qX55lgxQ)OlswwkZ%EdJa7x?cOQ|8<_wi97xs z|GMAf|Kgj~p(gufe$8K#{mWzFulZab#9L4N_XrhT_uq8Ie^t(9otNB0I_F3!hH}h* zc<10L@0tTzx3)FxnqepK+Jrg%p}KpmioqLh^Ab+MPt#XKRlJFAIq5e^)2m*=PJh<E z+u|MDB<uf(%bLGTwbOZUh+BN#UaRu0%MmSg75ii23zn;0_cdzyeQ5m;8~cjL+8uv; z?zh;SzINN?o&~>s<)@&VE6@BpRuWR5?8R7r{Ort|f_ty@)x6nP@VnG;%EXuL(+e8Y zKAzhWU-^~S{HDy!mBHKpv})VV+vX@JY8Q31z34>TRV}VB5$5`5pG*_Ed@$z$q7}WU zV_M?LU8^h)Y<=^3Sx}Sm+`c_e4@NJ#z-M#o@Wq1{t!1rPA5Sm4q_XSqqZ6_oRlAHg z#(h#-Du0IapHETKMz@+ZOO(#a$3+F7KUbKLVZTt)NB+Kc{+BgI{@<3DFDdp2`l%c^ z$wPko`sRIo?@t<5a@$NQ-FE6sY(UTQYj;ltFEhLz6m@*fwmsYm?_!g??J8HQZu@l7 zmC-Y@{Ab12mHv&+&*S>i*2}ZLH|!DX4?YzjbM$t~v(|;?^(iKA!$P^TSg$swTKO}q zS1Sl*3V6yq-RMD*`0ui5M^34Tt$W3_NmuFOqXzw|ufa~SPXpF3?098%Nc-{hlb^am zQy#E19gK+ba#76l;C^r^$WUS;KTog2UY7|^*sl2UePwy2)?PJx;k?poqQ`fsY0A9z zjM;E#<GrLc@4u-`Z?w7odv)8P;uGeaKPNe)OV6zTmJq(fe)-h|{pkwx9RE!Gbt|U+ zeDBZNgZb*NdBu6tKWW%SZU5s?B$^xgEIVgYT&t-uXJldJ*%!Sxue<N7x0v%qe!I!* zq~@N-++DkLy;;~d^e1Zw7YFFDB-G0s*f{ydQL{IE1sVZ!_w0INxIQdyx`CYTK|ycj zjJLC%l%Abwko!IBDO*@A!?{)b4%)vLq|B<j!~Qm|rFMJf(k+|hPhFp5CF2_rWWQjs zA@^B@>3#t*(g`csMJ_W)MF}r=a8Y`9TeVAWpR?S*3qn`_6*)R>v{PIYab)8T5s%g1 zrihC2^u?&I{}mkYapQHzGmk?Yj5}AWemKfiQz(4$EAtcEb0@i{?`Ej0`yIS9c>dxG znYV6ye{GSa6>7w`Ov`&+M-I2L+jPchT1z@srM}w4Gl7TaK*qcIMpA;y3%#DFm!;l1 zzlNuy>Dt%MMaD)~uKkpizUbKgcIxJyD<89WxXvo-*U1h!r#aDj-mYEeo4;=Dj?O;1 zt!Z0q|J}Q}vkn^isTOTWX9{hbwJK^?hDDz?)76Wv8LtJp7c-j{r$j&VNZ08s++w)z z=jtUA=M#1Q6udgPfp6paPhy{+FMIu9?d92Q_ILjleSep{{`&>%C7}}zf8>yxdwnhA zqKWq^zHd9AnZo9Fs=i{bMGQCpW5XKf_21?w@o(L{ocoUToHNrezhv=S{%?B9-2L~Q z*Vk1SXRPefifq$s5>zWokm}3u+N8Ehuf)WeX<44u?<Yy=+k8s>Bbgi5WQ#nltT(IM zv2FK5Eyu=A=JmWMR`l?(-8;0+np;wdwO~oe$IN-n-jgMxysVw$g`-YY#(n(I)3>b1 zxY@g8yRhOimW)+L6puE#zhqm->f5@pn1SKz^@sVwOn%eyZitvf1bTPw+0PrXQk+$L z>fu#tz7@=24;Ce`TCB+mnr*xxY5Ia<z71B9eCKu^T;*hRhHcN4?j~`0p6&yyRaVT} z`0aM;zQU(_HTN^TR_PC4o0lr%*}I@cHcV@Ikk7nDMV)6J|9NcG6YKKIpwGP9i0|FK z+8wp^6>+%_^&gb1k+C~A`{DDZ&Cd&iOp7PfywIA&^h@O>$N$Me|HIrT{r~s){KbTw z8>(3!U7ERO<7D~&hj(=Uv;Ok0`Pe3vw*nnjhwln^m_$r{rZTyzQ{~G0;B3u~SCLOQ z74pnI(YTG<LyKMLvCM>G=Afk~ADd2KU>ADqG7ZGr`IN;&DqUq-cl12f30`Y6XSN0w zFXYl~7ka#8U2${J)jNi}`qZ-z8;9m7eH1#%s%~}vx6_~1n?7cTbSp*QICMAuV$+Oh z=A?wyBRgJvjp}}GyLxj_@y8S1Qw&5--kr5ci2Kp@JGNcb;xpRjx-;I`JxBC6Puwn> zTT)v(ZtPFIUKso>|NRDwb*GvN4nAqR*^nUj@vg-?g_@=m*O^}z)jz5375ZTH*WU8l zOTD+BGsPLAA2N4MToR`>DWp%u&2NE(=Yyb$EEba_DjPK>ZSj7p(pxN~Y%Xy0;_I)B zPY(pu{?tzIR8^}}xE+5^d`+*Ps`#mS0wuSYHmmRYQEc(=+Rx<`&a+se4?a{{FzrFP z+p>f!*Uqjpy4<pV*_!Lij;l2&us;5kd%`Sno1^k4kqf!~jx!s)_eK<~l!+<5IfHY@ zful{_1qD}A%iJDZ(wnx^<XlW?<RZZ>vo^Zl=2}0C_fm12xbx$ZclwL`zqEVHs`~bA zx$Cj}uhdo9-yekZF06U-OD88eiErJ4OI~u5XRr9U@#>?mjO*m~v&ZWGy`5z`_y1RC ze!J3NPV9D*WE~F6%U`_X$oR98ZTX7Nd&@=2zE<nr>e?L~E|w`U;j7i-Q;d^)H>Zd% zxZ2IS<rL#xEr;;f*gXp^8on_}6*z3?x)6F@AYVgf;o6347S7vwE?k{9Dc3-2(cWv) z*B9Mp&1B;~78GM18t~-m#IN_JCQ5UES!w;DNiyv8HKRy7>)zexr=?3zJ9eOY+tmlt zAK0F*%-nS^eA3G;Pm6B1Wijh*SN*<YuGo>cmqoc^>Vz-k#FXx4aoii?7_d`e51*sP z!$-GOIUWSDG8Q;i$TkHWGToueacgNGhm^cvT(^QqnPy(MqqE*o)$bZbfh&SVB&L|= z9os1^Zn`h#|GBW)+mG)rKC*vP@3doL9*^{<1wZQGoOWY}Sy^Jh-UOaiGR;>FB1*3= zZQH|@draYh#G1B)tGrE2Q!Z>5Z<cy~aFxWGZ4dmKx0TH1<ya>e=Ax)=yzQZCRovwb zd&&>a3l|Qa%-rs?C^e^k*POGF;&*p041YW6Szt`4k;xqmF^Nc}2_?+t{Yf3`R5Q5> zWWu+vbw2CN@iZXtZb$vQdvd$jf^9auuFRK9<@Q@t{$Wn@_S#Cf$17rAe)5DAix)n5 zZnIZ6IQaa+etTBAqRf7eu9rP-tF(75bF4Zt%_T##D?@VHn$@$IV@~Vw+(>=UyMDe{ z_jCC+=i^mweeCRYA1rFx`ZFq;KYn|W?D$XFVcYjNx*AE`_m#7jy)ms~*V{Cwy8Gk& zANz0Jv;BK5eqW7b%}2XRmYgqFJ9G5n+Uh5#UcOKw+`|=PQFV1?JEIWSc@2R>_4<ho zEs|-w9z5`_eweavj-Psg)z|$B>3@vpw5_;)OR}M(zD@azKtNE+MN^evmOewFg$rLV zddU#W9uVYv{9d?@WUyb_!PS?m0)joy?M@R|^gUN&_s+(y=#M`f-%VW3?|rxV#K$FO zfwz;+cuMN64zka=-tfn2G1F?#>g;Cr*@CaEmhKEQTo+q+lT&YT#j&XZt7AIOtA3cs z{ZU)^(W;Fzv=!Mv0vVGb0)<Noi?b#jYW?xx$&^E_Gq?+Von+46zWd{|<)+ovt4-I1 z&G-LeA^z;T=9#N5KfbnY*({vgx_ieCiR)^|o-UFoJ6V)G)lu)V&$%O3b8_@n{#&_( zEp3w2ERQ6;)v3z14`lq}53%U6^xl~C?ahSJ9mm~^{_?Lro$vkfQ2c?+p6dlV-@nTU z{D^nj^z2t(MgNmK`PRFekNEu&aG$$o-s0VSs|D;HuRg!$XM~)`NAVw}Ig|8_S)M2B z{%Wz-_$Q+`r?c6vf9gSxyKyBeKX|1Ux?edS{CeM6Tkp7vu$uUv?`k!yHw)c6`Yh*r z*EP@Ue0I9$W}G>{jW<d?>f1|(eGJFNwM$=3eXzP^a*h7JSKp`1XWi#zeI#CapVp6j z{s%r!Es{gSK9xS~Vcg}n&#bUoU|E6hnwIOYPZhUv@}8OR)ABK5$Gn8e7iascUB4)K zWU9lgLWgf<)#3Rwa+)6|{IIV-uzvp~)rR|5HhEs$_I|yJ=C5DIH}$={*6b79w=Xjx zIw^(q$G3dF;$V?Pw=hk)(-Jo}sc3Jqo3QTQhqq2<$GI+S)<4CZtia2;x8?AOw|=tI zf9yZ_nVb9Pbw-8yrxVqd{ttRNy#(H0a{1?8!BGk7Fa3YR{mE$yQjck)RLlnrk+&x_ zw8O*m9-MFC&~E;!p?idV{r42UBT*+0ME*D#xO&fuwatqb3T6LHeARU`P`JPUn@IoU zL-Q56PE56XR9zOHtn{<2xs+*5aqjw+9(_sg8uy)FR%yxRw2eo%FlD8(pn|uk?s3^p zF@_5pLYQw%D)r%4y!YELYu<tR`hQmb|Dp72oyYygni+}`ddx0&e=&0XO-)$5&|Y}z zL*7|!_l*8@q@C9|a4Vw0%018H?$x<JY!qvg-YagmlFFR_<fql&6CbPlqhG{Tov^5v z_p+`Ix4p6Uk!|eb1(vS1myLYF{LWrAc)qaW(^^sK>;HHDJO8zQ-T(L3{(pQBwfmob z_NFC;fB!Rmsqa}PFW!A%^RypfwZG<SUATC>&XjrKena)E;{RN?PS5cRs}E1{wtvj_ zF5hR~w5>M#Y<?CzdmCmv`Nj#~SaU1&rRSGUxwHGjTzmJ`8&2JOcl+(;qEl`e%jTKz zU9$PoGf~M;fBSpOmDjrJxz%sniP&=`KFWM)=i}S!a;9{#aaJ}bvz`2VSg^XqjJbHX ziJ*4U^fI1U(;Utfi`1BXS;UN7Rwy;t_xfC(qRV-zD*bNsW4|NCsyqiu9&a*d_`KzN zA@c;YipOjTSB!j;IJ>r8w2Pjwhx?T2!>KVdP5n51v=vL%=QFQ6HlwiY#LJ{->f!|n zA2{O+xt{lX|L7=RP`UiN_QlnQYtHZc?O1;7M5vgM*Q?2Q-kx$=B*i75b?41lkC>%w z_a%KN$D2LA@n+YN&A&7*iOcOhpCLC@`t={S=2r9fPxN_1*Pa&jOw_8{dL=`PapArP zRgODOY{{G``HtuP*VY*#%kMqD+$1V*BAD@b*@cH%%E1$56{03R>tfK{#F6SM*tl|K zK>Ol}oKtn30wRAVc#4-5*)pwOCCD3`|8yCfZsseY#O~G0^89kw+_{tHJ!^N+G4b3l zYQ}q4ZMB+hId|@2r*q3Km)yM;aMtvh{K~Jkhm{Ny*52H)@4jd67g=t$xn6(6bQx8@ za<T5-UvqS08(XEA?fOsi(j%9xQk>iDdY<{-XPs<m(-lk`CAuvif9??2_wfh6-2Xt8 zf6kz;cEum|{{J11?Cq*wc;Edfze%ZA#Nn}hh{EexLdWYhZ2m1i_=EqE;QmwM+)l~H z^B&%5T%FLfy@0WvZ^NzwY5`B)OO)0Ast<`@tiL8)@nlQy1m{Qn_0fwSJk>3-{qtd7 zzyHshv-JWd+!H?DeBtlKrT31_O!>QF9>>n}HZd#_D<fNKANC)Zeel6k{THhLZ1;tJ zF_@|U<qWG`{@09h<27AJ=P#DNY+L)VTq^l3yJb?0nRB=qbIc~OKl3h3d-2TrP-@<O zx9o#86`bN3+l&R$%EjJkDYTjVKiD9V<#8lerziaE-g5~$6Ay~NeDcIk(^X1ZRYM~E z`I-e!Bi1GMxh$EfcI~LChSSxlM<y<t(Z(n+C8aX`$>Cp{%wC368>Wc_ZQN(@?zQ@w zb&D&KbetSt)oyzIrDV~W;L~N7+FK?+UuydG&Bx;jokqW%rKQ;l-k*;sn6D$xc8=vN z=bE{_&KcK|E%q&+v3_5huZiuqgYy@9bbXV1vETxqjTY16?50J@$Bj=j-;EH{JaS%Y z>D+g=$>I+r9wa^9c<5xhNXrh}ZND^jCssjb!e*TLHk~{FpT*CXIH4=Ni?%+Rv<=kt z<BLm{|FEskiskUyPobP|`+`M$ELwYP9{+A%WM=%#^@;5{^^(BNkCs1H-)=wE@}s4c zaR&4K_3Q##u10K&Al<*m&eIvEDJ_9_{|e5YvUGT89mgLX8|K$OV{3NgrPmj(Rb(!g zof)+M@ki4a8}__oyZHM|{sgs9A^THb9)A85e6ss_Lf@qDbN;@mW=0kk!mm~HJp@)) zyNkX)rulcu)+?)xu7q5@<a)R;MsP)+o>O#t#1EMjGnH=}xmyMAj1EuO;c@7r%(4`Q z<#IeXFFQ;-EMfooU8qL&-u8QSxk_4hD&|KCPth#+tiv!%wMALG%dBPhtd^A*7A>;; zW%j+ce4TaWmp39>JZBx3aq(UZXw+r8&ARC2iUyHJ*J;Up6ZAw~kIvs%7SAF5X=y@o z<d#x1!B5}i@8AFP>+$a_0n4&a&hHZsvpdLGKVH+_&cwlRd_pRZg2G9)u$Q`LH2Tbh z1gEI3Q1IU5zBA-ksLpcs`~Ot_FfG?;Xwu<-(m1Q#$6TVqZQbLDo##~iR(`w{>3aXv zB-I7XcYaD0hzMFJyP9ll>0p~Q;T^-#4I!JaB!vI?xNTd+eVOut#~RH=#Vh%W9v1Cd zkQJ}b_j~DEg&t+~*sX3B|0Y$&DgB*bU9bLnr|`=g=}UiYoG<u)-VT|U)h{m`Ig*%k z&0$sZeec7`i`GibaA|nDgTrdqtovN0dp=Zh#V5VoS3Ujrk@E$+bjsQu-##rl%iVSL zVx{X3`41<e&3v6SyT$id<+5b&vbj5@w?5i`vEkK|*9VIC@t-s{JmtA~efT1)sG~aD zR)j{TZ(JMmd*bUOL5v0)W%@px=&8IG;3~XpQbtdRDE}ok7J<0unq@`4H5ZQe-I3Tb zM`pQ!{EU}tSnF6W?Yg+3^hrzoWX=g6zqa4rfA3z+kz=zyeExmEUN}v^BtiV&$JcLv zN8icsKUB|osdS#V@4SQ`Ci~17<qo;cc>BR%`D~#}DemmbH%&?o2ORLY8gp`j`?ZU! zzOv>%N?sd$#B#&sd-@aZM}&0ERJXsTa>ISHrP9eflcNgm%Gc*zJ-Te?>QosQ-}@D( z91lLzm;HP%;`8*=4jyvNUst%XnX)~OoHudJ1&Lz?U$hMJ3?(<-=nL)jdHqy&Z`aS2 z;c@Fr@30tOUD;%=&3c2WZ(Qnf$ZuhxXK?-Bm}T*kKDrF@5+lG|P9i!EQ1N*8wi z;rpDheCL<4Paa>z>zD1BA6*c!B7*nn>3J-yKAQ^t_`6meSTXITbTdl~o5z9H<|R!> zFH~gC7G_#%cKdNoLy+d~U3#C}R-V_}etO-G<9(&-;$N?CEWUpA!P?|kYoepAEoY^k zes<F^x!fjy1COriyWML;xo-ws%)54SW{OAV%Pz*2@GYB@k5z7-U-Z@0u-E*ot?#q` z=|>KC2AwSbUiMY)yn1J4)!rhxN@pqEWEO_LhF80?q!@jlPd0XNY+m^^y}9XCSH|bm zx+o)+6zkocb)s5jWj9wjmNlF^_^#q=vG(gD%WfPxV1H+?@UEixm!_6S4;|XJ!l?6- zww1ou;lqzS1Aomt)1fBjoRyz=I5F8k(?EXq&fl-t)%ZWWX>VOD*QfhU&pam1*wuV# zhH3ql3yL9O=S@3VDwTKdluj*w>KSro|5`PHlRmedzrNmSa<Qsr|ICiNOO4ZCo4jFM zsx(cL**bpB50<2jx}Do~M6N_6bt|hYpL=KfWz~(xFAaD8^QxQUf11T&s)_lk4KIKF zIhHv^w%*KP&KZf%UqT{{-LLuewMTBOIeJ>hdDR@n=o1sP(ml>in4=hJkiywtH%*Z- z{e+m2$^)L0l9P;8xZ89LA5Ts6Xnj3FHw8q_QM7b6N<1N3s>*$NiJImdwP^RrQ8y<< z`%RvsX6c)jSyY~TSIFn2=qWQJ)o=~V;G$(IC#O99vGJo2*Bs?y@%{(Fx92EZx*I(_ zQKWbyb5V{K%k1FPW@C$)9-l9_xNPd{$k9=lRA`gp)S@HtXo}+0t?t2Q0v<EFgHEei zC9HBdBP{!EV`j<b%PEh!k8Vy_y&`Ypt!Y{Jtc<>PKYRNA{qJAQS<zR1F7FFoD=C^f zVPkWU7mGrg;L<puMIn7FthBgN1zGht0~?fA^?h=dbkUrCB#`U*ipL#V(gG9OLjN){ z>NZ_n`TXX2<}gvUfXyd@^f@EvY$#G*Ei-S{%z~_`chCFo-_`YXY2(!?&HqeqG)V3* zXJ$xbo4m>IcqnVYE<J(QM<e!4bp2Z=@MPZwPZp8-rB}Q6eQ*5{p87aE==6)~vZ=hs zd&3!*cOT_H!S!M?!_A08hxKNbNlwt5HsQ&d@1Lf>xREt4YNGf0-OT$+uDv*6EwZl6 zw|eu;swHb)#ZA6B=iRPuK}{!tGFkJ`mIdVkyPw!kpL05}CQajC;$4kg29xR>cTrQB zasj)8>08`NzU;M|n6b>n-CE#8O3*^zJyp9_Hv0;!6z5W!+T3yQ7qel<fz~FD0s+H_ z`3h_kD;FvlS$1fh<4l>jB=*IOWgiXK?%8a{z3|y5=3DHGZ%qrZbe0H>(U_EU^4s*! ztl8UJ84q~KK6Sb&+~nt-;3n6q6a0PcXaA3FCf?84dG<C~iR|0_vD@|R-4(_US+Wl= zZ3x{jy}*?r>l}Xplg!qm>JuJ#?G1@pDHC40gHtG`(fg?AgB`057f*O_YEMYaOquYl zmcmK}nbWN#vT6+09NsUmaFwLKv-iZ%^|K$=Oq_cAX~EN-hg$T^OlERC-dJEe^UMPC u`9A9w8&50FcZ@25^uB%^GvD{IH^1hw^nC)%+pf9)`BS#tXJ_CLWB>qp^5pdZ literal 0 HcmV?d00001 diff --git a/dbrepo-analyse-service/tests/conftest.py b/dbrepo-analyse-service/tests/conftest.py index 3418998a94..6c3745526b 100644 --- a/dbrepo-analyse-service/tests/conftest.py +++ b/dbrepo-analyse-service/tests/conftest.py @@ -73,7 +73,7 @@ def opensearch_container(): with os_container: client = os_container.get_client() index_mapping_path = os.path.join( - "..", "dbrepo-search-db", "init", "indices", "database.json" + "..", "dbrepo-search-service", "init", "database.json" ) with open(index_mapping_path, "r") as file: mapping = json.load(file) diff --git a/dbrepo-analyse-service/tests/s3_config.json b/dbrepo-analyse-service/tests/s3_config.json deleted file mode 100644 index f270753cdc..0000000000 --- a/dbrepo-analyse-service/tests/s3_config.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "identities": [ - { - "name": "admin", - "credentials": [ - { - "accessKey": "seaweedfsadmin", - "secretKey": "seaweedfsadmin" - } - ], - "actions": [ - "Read", - "Write", - "List", - "Tagging", - "Admin" - ] - } - ] -} \ No newline at end of file diff --git a/dbrepo-analyse-service/tests/test_determine_dt.py b/dbrepo-analyse-service/tests/test_determine_dt.py index 824fbfcf47..72cf915e52 100644 --- a/dbrepo-analyse-service/tests/test_determine_dt.py +++ b/dbrepo-analyse-service/tests/test_determine_dt.py @@ -1,8 +1,10 @@ import unittest -from api.dto import AnalysisDto -from clients.s3_client import S3Client from botocore.exceptions import ClientError +from dbrepo.core.client.storage import StorageServiceClient +from flask import current_app + +from api.dto import AnalysisDto from determine_dt import determine_datatypes @@ -47,9 +49,11 @@ class DetermineDatatypesTest(unittest.TestCase): }, }) - # mock - S3Client().upload_file("datetime.csv", './data/test_dt/', 'dbrepo') + with current_app.app_context(): + StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']).upload_file("datetime.csv", + './data/test_dt/', 'dbrepo') # test response = determine_datatypes(filename="datetime.csv", separator=",") @@ -95,7 +99,10 @@ class DetermineDatatypesTest(unittest.TestCase): }) # mock - S3Client().upload_file("datetime_tz.csv", './data/test_dt/', 'dbrepo') + with current_app.app_context(): + StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']).upload_file("datetime_tz.csv", + './data/test_dt/', 'dbrepo') # test response = determine_datatypes(filename="datetime_tz.csv", separator=",") @@ -141,7 +148,10 @@ class DetermineDatatypesTest(unittest.TestCase): }) # mock - S3Client().upload_file("datetime_t.csv", './data/test_dt/', 'dbrepo') + with current_app.app_context(): + StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']).upload_file("datetime_t.csv", + './data/test_dt/', 'dbrepo') # test response = determine_datatypes(filename="datetime_t.csv", separator=",") @@ -188,7 +198,10 @@ class DetermineDatatypesTest(unittest.TestCase): }) # mock - S3Client().upload_file("datatypes.csv", './data/test_dt/', 'dbrepo') + with current_app.app_context(): + StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']).upload_file("datatypes.csv", + './data/test_dt/', 'dbrepo') # test response = determine_datatypes(filename="datatypes.csv", separator=",") @@ -209,7 +222,10 @@ class DetermineDatatypesTest(unittest.TestCase): def test_determine_datatypes_fileEmpty_succeeds(self): # mock - S3Client().upload_file("empty.csv", './data/test_dt/', 'dbrepo') + with current_app.app_context(): + StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']).upload_file("empty.csv", './data/test_dt/', + 'dbrepo') # test response = determine_datatypes("empty.csv") @@ -219,7 +235,10 @@ class DetermineDatatypesTest(unittest.TestCase): def test_determine_datatypes_separatorSemicolon_succeeds(self): # mock - S3Client().upload_file("separator.csv", './data/test_dt/', 'dbrepo') + with current_app.app_context(): + StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']).upload_file("separator.csv", + './data/test_dt/', 'dbrepo') # test response = determine_datatypes(filename="separator.csv", separator=";") @@ -228,7 +247,10 @@ class DetermineDatatypesTest(unittest.TestCase): def test_determine_datatypes_separatorGuess_succeeds(self): # mock - S3Client().upload_file("separator.csv", './data/test_dt/', 'dbrepo') + with current_app.app_context(): + StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']).upload_file("separator.csv", + './data/test_dt/', 'dbrepo') # test response = determine_datatypes(filename="separator.csv") @@ -252,7 +274,10 @@ class DetermineDatatypesTest(unittest.TestCase): }) # mock - S3Client().upload_file("novel.csv", './data/test_dt/', 'dbrepo') + with current_app.app_context(): + StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']).upload_file("novel.csv", './data/test_dt/', + 'dbrepo') # test response = determine_datatypes(filename="novel.csv", separator=";") diff --git a/dbrepo-analyse-service/tests/test_determine_pk.py b/dbrepo-analyse-service/tests/test_determine_pk.py index 4e960d39c0..b2e730edc6 100644 --- a/dbrepo-analyse-service/tests/test_determine_pk.py +++ b/dbrepo-analyse-service/tests/test_determine_pk.py @@ -1,22 +1,29 @@ import unittest -from clients.s3_client import S3Client + +from dbrepo.core.client.storage import StorageServiceClient +from flask import current_app + from determine_pk import determine_pk class DeterminePrimaryKeyTest(unittest.TestCase): - # @Test def test_determine_pk_largeFileIdFirst_succeeds(self): # mock - S3Client().upload_file("largefile_idfirst.csv", './data/test_pk/', 'dbrepo') + with current_app.app_context(): + StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']).upload_file("largefile_idfirst.csv", + './data/test_pk/', 'dbrepo') # test response = determine_pk('largefile_idfirst.csv') self.assertEqual(1, int(response['id'])) - # @Test def test_determine_pk_largeFileIdInBetween_succeeds(self): # mock - S3Client().upload_file("largefile_idinbtw.csv", './data/test_pk/', 'dbrepo') + with current_app.app_context(): + StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']).upload_file("largefile_idinbtw.csv", + './data/test_pk/', 'dbrepo') # test response = determine_pk('largefile_idinbtw.csv') @@ -25,52 +32,65 @@ class DeterminePrimaryKeyTest(unittest.TestCase): # @Test def test_determine_pk_largeFileNoPrimaryKey_fails(self): # mock - S3Client().upload_file("largefile_no_pk.csv", './data/test_pk/', 'dbrepo') + with current_app.app_context(): + StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']).upload_file("largefile_no_pk.csv", + './data/test_pk/', 'dbrepo') # test response = determine_pk('largefile_no_pk.csv') self.assertEqual({}, response) - # @Test def test_determine_pk_largeFileNullInUnique_fails(self): # mock - S3Client().upload_file("largefile_nullinunique.csv", './data/test_pk/', 'dbrepo') + with current_app.app_context(): + StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']).upload_file("largefile_nullinunique.csv", + './data/test_pk/', 'dbrepo') # test response = determine_pk('largefile_nullinunique.csv') self.assertFalse('uniquestr' in response) - # @Test def test_determine_pk_smallFileIdFirst_fails(self): # mock - S3Client().upload_file("smallfile_idfirst.csv", './data/test_pk/', 'dbrepo') + with current_app.app_context(): + StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']).upload_file("smallfile_idfirst.csv", + './data/test_pk/', 'dbrepo') # test response = determine_pk('smallfile_idfirst.csv') self.assertEqual(1, int(response['id'])) - # @Test def test_determine_pk_smallFileIdIntBetween_fails(self): # mock - S3Client().upload_file("smallfile_idinbtw.csv", './data/test_pk/', 'dbrepo') + with current_app.app_context(): + StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']).upload_file("smallfile_idinbtw.csv", + './data/test_pk/', 'dbrepo') # test response = determine_pk('smallfile_idinbtw.csv') self.assertEqual(1, int(response['id'])) - # @Test def test_determine_pk_smallFileNoPrimaryKey_fails(self): # mock - S3Client().upload_file("smallfile_no_pk.csv", './data/test_pk/', 'dbrepo') + with current_app.app_context(): + StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']).upload_file("smallfile_no_pk.csv", + './data/test_pk/', 'dbrepo') # test response = determine_pk('smallfile_no_pk.csv') self.assertEqual({}, response) - # @Test def test_determine_pk_smallFileNullInUnique_fails(self): # mock - S3Client().upload_file("smallfile_nullinunique.csv", './data/test_pk/', 'dbrepo') + with current_app.app_context(): + StorageServiceClient(current_app.config['S3_ENDPOINT'], current_app.config['S3_ACCESS_KEY_ID'], + current_app.config['S3_SECRET_ACCESS_KEY']).upload_file("smallfile_nullinunique.csv", + './data/test_pk/', 'dbrepo') # test response = determine_pk('smallfile_nullinunique.csv') diff --git a/dbrepo-auth-service/init/.coveragerc b/dbrepo-auth-service/init/.coveragerc index a387be8425..75f7db52f9 100644 --- a/dbrepo-auth-service/init/.coveragerc +++ b/dbrepo-auth-service/init/.coveragerc @@ -2,8 +2,6 @@ omit = # omit tests ./tests/* - # omit ext lib - ./omlib/* [html] directory = htmlcov diff --git a/dbrepo-auth-service/init/app.py b/dbrepo-auth-service/init/app.py index 65252a5ccd..55fa08cdae 100644 --- a/dbrepo-auth-service/init/app.py +++ b/dbrepo-auth-service/init/app.py @@ -5,22 +5,30 @@ from requests import post, get endpoint = os.getenv('AUTH_SERVICE_ENDPOINT', 'http://localhost:8080') system_username = os.getenv('SYSTEM_USERNAME', 'admin') +readonly_username = os.getenv('READONLY_USERNAME', 'user') -def fetch() -> (str, str): - print(f'Fetching user id of internal user with username: {system_username}') +def fetch_keycloak_master_access_token() -> str: + """ + Fetch admin access token from the master realm. + :return: The access token. + """ response = post(url=f'{endpoint}/realms/master/protocol/openid-connect/token', data=dict({ 'username': os.getenv('AUTH_SERVICE_ADMIN', 'admin'), 'password': os.getenv('AUTH_SERVICE_ADMIN_PASSWORD', 'admin'), 'grant_type': 'password', 'client_id': 'admin-cli' })) - if response.status_code != 200: raise IOError(f'Failed to obtain admin token: {response.status_code}') + return response.json()["access_token"] + + +def fetch(username) -> (str, str): + print(f'Fetching user id of internal user with username: {username}') - response = get(url=f'{endpoint}/admin/realms/dbrepo/users/?username={system_username}', headers=dict({ - 'Authorization': f'Bearer {response.json()["access_token"]}' + response = get(url=f'{endpoint}/admin/realms/dbrepo/users/?username={username}', headers=dict({ + 'Authorization': f'Bearer {fetch_keycloak_master_access_token()}' })) if response.status_code != 200 or len(response.json()) != 1: raise FileNotFoundError(f'Failed to obtain user') @@ -39,7 +47,7 @@ def fetch() -> (str, str): return (ldap_user_id, user_id) -def save(user_id: str, keycloak_id: str) -> None: +def save(user_id: str, keycloak_id: str, username: str) -> None: conn = mariadb.connect(user=os.getenv('METADATA_USERNAME', 'root'), password=os.getenv('METADATA_DB_PASSWORD', 'dbrepo'), host=os.getenv('METADATA_HOST', 'metadata-db'), @@ -48,12 +56,14 @@ def save(user_id: str, keycloak_id: str) -> None: cursor = conn.cursor() cursor.execute( "INSERT IGNORE INTO `mdb_users` (`id`, `keycloak_id`, `username`, `mariadb_password`, `is_internal`) VALUES (?, ?, ?, PASSWORD(LEFT(UUID(), 20)), true)", - (user_id, keycloak_id, system_username)) + (user_id, keycloak_id, username)) conn.commit() conn.close() + print(f'Successfully inserted user: {username}') if __name__ == '__main__': - user_id, keycloak_id = fetch() - save(user_id, keycloak_id) - print(f'Successfully inserted user') + user_id, keycloak_id = fetch(system_username) + save(user_id, keycloak_id, system_username) + user_id, keycloak_id = fetch(readonly_username) + save(user_id, keycloak_id, readonly_username) diff --git a/dbrepo-auth-service/init/tests/test_unit_app.py b/dbrepo-auth-service/init/tests/test_unit_app.py index 4fb38ac2f4..fc454cfa3e 100644 --- a/dbrepo-auth-service/init/tests/test_unit_app.py +++ b/dbrepo-auth-service/init/tests/test_unit_app.py @@ -23,7 +23,7 @@ class AppUnitTest(unittest.TestCase): mock.post(f'{endpoint}/realms/master/protocol/openid-connect/token', json=self.token_res, status_code=400) # test try: - fetch() + fetch('admin') except IOError: pass @@ -33,7 +33,7 @@ class AppUnitTest(unittest.TestCase): mock.post(f'{endpoint}/realms/master/protocol/openid-connect/token', json=self.token_res, status_code=401) # test try: - fetch() + fetch('admin') except IOError: pass @@ -45,7 +45,7 @@ class AppUnitTest(unittest.TestCase): # test try: - fetch() + fetch('admin') except FileNotFoundError: pass @@ -57,7 +57,7 @@ class AppUnitTest(unittest.TestCase): # test try: - fetch() + fetch('admin') except FileNotFoundError: pass @@ -69,7 +69,7 @@ class AppUnitTest(unittest.TestCase): # test try: - fetch() + fetch('admin') except FileNotFoundError: pass @@ -83,7 +83,7 @@ class AppUnitTest(unittest.TestCase): # test try: - fetch() + fetch('admin') except ModuleNotFoundError: pass @@ -98,7 +98,7 @@ class AppUnitTest(unittest.TestCase): # test try: - fetch() + fetch('admin') except ImportError: pass @@ -115,7 +115,7 @@ class AppUnitTest(unittest.TestCase): # test try: - fetch() + fetch('admin') except EnvironmentError: pass @@ -131,6 +131,6 @@ class AppUnitTest(unittest.TestCase): }], status_code=200) # test - ldap_user_id, user_id = fetch() + ldap_user_id, user_id = fetch('admin') self.assertEqual("7a0b4b7f-77cd-4f28-a665-2da443024621", ldap_user_id) self.assertEqual("5b516520-67cb-4aa0-86a6-d12f8b8f1a20", user_id) diff --git a/dbrepo-auth-service/listeners/target/create-event-listener.jar b/dbrepo-auth-service/listeners/target/create-event-listener.jar index 9fb1271c4361841c3d4061e536d23bc16b590d0e..42cd10a361a5b4a644dabc8044ccc4a52f5870b9 100644 GIT binary patch delta 973 zcmbR1Ki^+Cz?+#xgn@yBgW*_kbJV(&m06_|g%#@$`aL!f*z11E{s()Gxv!^lo(NwK zYj;S(`^hI;qI~C^nz!Wk{^P!i9a&p<v)@iW|9Q`I^E#I7tWP@i6F)E8-0E>fr!P;I zF<3SHxRcExhp;;qcV;!t@wob^CF1L{l}~ovI{Dl-amTiv#lb0A%?B1vsxiD1pt$PN z#eI`6d=9HBYOZ(O<>Ghe^Tsc!m%`?1AE~-psefwmjR4hmjgMcr@6KPLdiwvf-3@ih zA>s8W{;NNK{cNE?^s~MCTkK@`PF;yBtT#vzUBGnh*fl<z-Euq2pL~s+*S9#KL~NQV zkHN>gftd&V+ULu1UbCyLeC43HVC|-(JN|R#R=jK8`1gIG{X=8Xs(OvfE_Dg>H%{F? zcWaByGuv%PXFn{=kbRaLuk|Ks?_y;$**D7^T9+LAsP7@w^z1{yO^Nd<C+BkKXBebM z9bsAMmpJkHhBIlI^VEKpPMg*(^E_PgfsJSS_0uNy_p3|KPA{&%yx^wbOS1}(ciyKp zR5*TJ5bEh!Tn>s0E(Qh;1_tJ1!OfF5F{&^h4Q`%%lTnu$#OGv^1Jhbes$e>ZNefKZ zGns(tZA@NZ^~}s?!SrS3ZjkuqM3y;BAjT$kZcY%rnNOfb5X6|=t2hfxYbj0Ugh&76 zV@j6tARYq};DoaU7~VQApDd>=0k*?ZS(@?O<WOZrusM~=(qjJ@85j~v^aH#ZnM9Z& zz5zLYm9n&zJQG-|q_jLUH4j}y6x;>|1_pjO2V|W))8s@ZVO~@N<yEAaN|+}1G0AG7 zNT8Ubk7CYhkaFqC511r0L0TZm{%CM>)Sr26PF)NP3?CR67&PEo7#Nl`{+N7U#T@KY zNmXga6O&C<1HnG+RF!55W0_pQVlw%bDi2ubrK&X3SGLLg>=KjZ)F48-YSK*10+S0^ z)F&6J889u7o!rL+vR`cS6*Xb7rdMjxOihY#;j@Z-+K`ZgI1UsI!X6>#k{K8nHZm|U S2%|VoesZC@8rx<ikRSjyLt3T) delta 939 zcmbR5Ki6M6z?+#xgn@yBgCVG(AgXd{`Lkk128J_C3=ATZ?<tAb_Xge0d#oT(yZuT1 z19pbxrFW0y`+iR}f92|>|Ne2}9><M^EXnDgzpMJaUUhNRZvF!YWS+^KE8stOO(bI9 zB>rv1OJ}Uq@y)YkoILTgv*x=*1@%0eyf+SUF{}P`M10$3Sd_Z$Q>MGb`q<?s4L5Cd zeGuVk7oE34WZ9=JuT{S6nb=tWCt>2biNfEHM*OmQ>GRxsV^o=9$18<vDM$PtnEbr@ zPAco<$NfLgEr{p1dNuyj|C2vA?bANmRw?ea_WSR>n@R)jyw|m4UD2?$bZh&8eeUmU zS!*XPzpNq^dnA>W*{8;S#ij?#4)^!DWXm_(lr0dsFiT1PJO71a&+kQE|1bGncwa#M z#`aG|YWFw#-#B&qoTZc8XU5x~wm&V*kbUkOulXiw?^0$n*_`DLN0%J?sP7@Q=-H2g zn>P+TIWeDWedY%Bs1w`~DVy&+2?z<#5c}M-A<99f(#$<3#q!$Jne*T6{qgMb&i5u6 z-&}U}%1!!z#fYo3>E2cs<;zcaL6O46z`()4z#LRiFnJ533UgpV!Q|VFx?q}{Ne(Qo z!=wtPLzuL{bR&}qnBKwU1y;w(d=^Y!W$p%vZ%$^J!vqr8%*4*k2^J9$s1XD)Cig4O z0@FH5lR4oDVe$zjOL-8F0SR!z*#Zo29hXj4P?i9hIoVoSn(@r!aAid>uUc7J><=RY zLt=@3fHxzP2s6YxAm6M}mbR2-0!x*YmS?8sp{t03+rYrUzz^qutaF{D0`a<{iZoLZ z)8q+EvXi4#xD?PGsgI&-B}k$4<OM29@__{fQGe#OIdw5GFnnNOV9<aoWMEj*_-*n- z6?3rrrB$UFk4-jL4Frcux2iN#2+L%70rkn}RVBd+UaLwoeP)|1$SyHiL5&BjN?%Qy ziBVv(ynycHN;NH}d9sryFiB57pr#3yeWNDL)Sw6zlA3I%E(Q)-VULh=$qWn(8yOfF Sgi#zLJGoe0jcub6NDu&}bW!yH diff --git a/dbrepo-dashboard-service/.coveragerc b/dbrepo-dashboard-service/.coveragerc new file mode 100644 index 0000000000..9fd61fc166 --- /dev/null +++ b/dbrepo-dashboard-service/.coveragerc @@ -0,0 +1,7 @@ +[report] +omit = + # omit tests + ./tests/* + +[html] +directory = htmlcov \ No newline at end of file diff --git a/dbrepo-dashboard-service/.gitignore b/dbrepo-dashboard-service/.gitignore new file mode 100644 index 0000000000..cadb5f2657 --- /dev/null +++ b/dbrepo-dashboard-service/.gitignore @@ -0,0 +1,135 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Generated +coverage.txt +report.xml +clients/ +api/ +dashboard.py +access.py +panel.py + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# SQLite db +*.db + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ diff --git a/dbrepo-dashboard-service/Dockerfile b/dbrepo-dashboard-service/Dockerfile index d5f64a82fb..fcc698ed27 100644 --- a/dbrepo-dashboard-service/Dockerfile +++ b/dbrepo-dashboard-service/Dockerfile @@ -1,8 +1,29 @@ -FROM docker.io/bitnami/grafana:11.5.1 AS runtime +FROM python:3.11-alpine3.21 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" +RUN apk add --no-cache \ + curl \ + bash \ + jq + +COPY Pipfile Pipfile.lock ./ + +COPY ./lib ./lib + +RUN pip install pipenv && \ + pipenv install gunicorn && \ + pipenv install --system --deploy + +RUN adduser -D dbrepo --uid 1001 + WORKDIR /app -COPY --chown=grafana:grafana ./dashboards /app/dashboards -COPY --chown=grafana:grafana ./grafana.ini /etc/grafana/grafana.ini -COPY --chown=grafana:grafana ./ldap.toml /etc/grafana/ldap.toml +USER 1001 + +COPY --chown=1001 ./ds-yml ./ds-yml +COPY --chown=1001 ./app.py ./app.py + +# non-root port +EXPOSE 8080 + +ENTRYPOINT [ "gunicorn", "--log-level", "debug", "--workers", "4", "--bind", ":8080", "app:app" ] diff --git a/dbrepo-dashboard-service/Pipfile b/dbrepo-dashboard-service/Pipfile new file mode 100644 index 0000000000..6c446aaefa --- /dev/null +++ b/dbrepo-dashboard-service/Pipfile @@ -0,0 +1,28 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +flasgger = "*" +flask = "~=2.0" +flask-cors = "~=4.0" +flask-jwt-extended = "~=4.5" +prometheus-flask-exporter = "*" +python-dotenv = "~=1.0" +jwt = "~=1.3" +pytest = "*" +dbrepo = {path = "./lib/dbrepo-1.8.0.tar.gz"} +gunicorn = "*" +pydantic = "*" +flask_httpauth = "*" +grafana-client = "*" + +[dev-packages] +coverage = "*" +pytest = "*" +testcontainers = "*" +requests-mock = "*" + +[requires] +python_version = "3.11" diff --git a/dbrepo-dashboard-service/Pipfile.lock b/dbrepo-dashboard-service/Pipfile.lock new file mode 100644 index 0000000000..ba1cf80caa --- /dev/null +++ b/dbrepo-dashboard-service/Pipfile.lock @@ -0,0 +1,2224 @@ +{ + "_meta": { + "hash": { + "sha256": "911a375e6d52635530a1278e4186660b395093e16a092a223fd7050c6241bedc" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.11" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "aiohappyeyeballs": { + "hashes": [ + "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", + "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8" + ], + "markers": "python_version >= '3.9'", + "version": "==2.6.1" + }, + "aiohttp": { + "hashes": [ + "sha256:004511d3413737700835e949433536a2fe95a7d0297edd911a1e9705c5b5ea43", + "sha256:0902e887b0e1d50424112f200eb9ae3dfed6c0d0a19fc60f633ae5a57c809656", + "sha256:09b00dd520d88eac9d1768439a59ab3d145065c91a8fab97f900d1b5f802895e", + "sha256:0a2f451849e6b39e5c226803dcacfa9c7133e9825dcefd2f4e837a2ec5a3bb98", + "sha256:0a950c2eb8ff17361abd8c85987fd6076d9f47d040ebffce67dce4993285e973", + "sha256:0ad1fb47da60ae1ddfb316f0ff16d1f3b8e844d1a1e154641928ea0583d486ed", + "sha256:13ceac2c5cdcc3f64b9015710221ddf81c900c5febc505dbd8f810e770011540", + "sha256:14461157d8426bcb40bd94deb0450a6fa16f05129f7da546090cebf8f3123b0f", + "sha256:16f8a2c9538c14a557b4d309ed4d0a7c60f0253e8ed7b6c9a2859a7582f8b1b8", + "sha256:17ae4664031aadfbcb34fd40ffd90976671fa0c0286e6c4113989f78bebab37a", + "sha256:1ce63ae04719513dd2651202352a2beb9f67f55cb8490c40f056cea3c5c355ce", + "sha256:23a15727fbfccab973343b6d1b7181bfb0b4aa7ae280f36fd2f90f5476805682", + "sha256:2540ddc83cc724b13d1838026f6a5ad178510953302a49e6d647f6e1de82bc34", + "sha256:37dcee4906454ae377be5937ab2a66a9a88377b11dd7c072df7a7c142b63c37c", + "sha256:38bea84ee4fe24ebcc8edeb7b54bf20f06fd53ce4d2cc8b74344c5b9620597fd", + "sha256:3ab3367bb7f61ad18793fea2ef71f2d181c528c87948638366bf1de26e239183", + "sha256:3ad1d59fd7114e6a08c4814983bb498f391c699f3c78712770077518cae63ff7", + "sha256:3b4e6db8dc4879015b9955778cfb9881897339c8fab7b3676f8433f849425913", + "sha256:3e061b09f6fa42997cf627307f220315e313ece74907d35776ec4373ed718b86", + "sha256:42864e70a248f5f6a49fdaf417d9bc62d6e4d8ee9695b24c5916cb4bb666c802", + "sha256:493910ceb2764f792db4dc6e8e4b375dae1b08f72e18e8f10f18b34ca17d0979", + "sha256:4d0c970c0d602b1017e2067ff3b7dac41c98fef4f7472ec2ea26fd8a4e8c2149", + "sha256:54eb3aead72a5c19fad07219acd882c1643a1027fbcdefac9b502c267242f955", + "sha256:56a3443aca82abda0e07be2e1ecb76a050714faf2be84256dae291182ba59049", + "sha256:576f5ca28d1b3276026f7df3ec841ae460e0fc3aac2a47cbf72eabcfc0f102e1", + "sha256:58ede86453a6cf2d6ce40ef0ca15481677a66950e73b0a788917916f7e35a0bb", + "sha256:61c721764e41af907c9d16b6daa05a458f066015abd35923051be8705108ed17", + "sha256:634d96869be6c4dc232fc503e03e40c42d32cfaa51712aee181e922e61d74814", + "sha256:696ef00e8a1f0cec5e30640e64eca75d8e777933d1438f4facc9c0cdf288a810", + "sha256:69a2cbd61788d26f8f1e626e188044834f37f6ae3f937bd9f08b65fc9d7e514e", + "sha256:6a792ce34b999fbe04a7a71a90c74f10c57ae4c51f65461a411faa70e154154e", + "sha256:6ac13b71761e49d5f9e4d05d33683bbafef753e876e8e5a7ef26e937dd766713", + "sha256:6fdec0213244c39973674ca2a7f5435bf74369e7d4e104d6c7473c81c9bcc8c4", + "sha256:72b1b03fb4655c1960403c131740755ec19c5898c82abd3961c364c2afd59fe7", + "sha256:745f1ed5e2c687baefc3c5e7b4304e91bf3e2f32834d07baaee243e349624b24", + "sha256:776c8e959a01e5e8321f1dec77964cb6101020a69d5a94cd3d34db6d555e01f7", + "sha256:780df0d837276276226a1ff803f8d0fa5f8996c479aeef52eb040179f3156cbd", + "sha256:78e6e23b954644737e385befa0deb20233e2dfddf95dd11e9db752bdd2a294d3", + "sha256:7951decace76a9271a1ef181b04aa77d3cc309a02a51d73826039003210bdc86", + "sha256:7ba92a2d9ace559a0a14b03d87f47e021e4fa7681dc6970ebbc7b447c7d4b7cd", + "sha256:7f6428fee52d2bcf96a8aa7b62095b190ee341ab0e6b1bcf50c615d7966fd45b", + "sha256:87944bd16b7fe6160607f6a17808abd25f17f61ae1e26c47a491b970fb66d8cb", + "sha256:87a6e922b2b2401e0b0cf6b976b97f11ec7f136bfed445e16384fbf6fd5e8602", + "sha256:8cb0688a8d81c63d716e867d59a9ccc389e97ac7037ebef904c2b89334407180", + "sha256:8df6612df74409080575dca38a5237282865408016e65636a76a2eb9348c2567", + "sha256:911a6e91d08bb2c72938bc17f0a2d97864c531536b7832abee6429d5296e5b27", + "sha256:92b7ee222e2b903e0a4b329a9943d432b3767f2d5029dbe4ca59fb75223bbe2e", + "sha256:938f756c2b9374bbcc262a37eea521d8a0e6458162f2a9c26329cc87fdf06534", + "sha256:9756d9b9d4547e091f99d554fbba0d2a920aab98caa82a8fb3d3d9bee3c9ae85", + "sha256:98b88a2bf26965f2015a771381624dd4b0839034b70d406dc74fd8be4cc053e3", + "sha256:9b751a6306f330801665ae69270a8a3993654a85569b3469662efaad6cf5cc50", + "sha256:a2a450bcce4931b295fc0848f384834c3f9b00edfc2150baafb4488c27953de6", + "sha256:a3814760a1a700f3cfd2f977249f1032301d0a12c92aba74605cfa6ce9f78489", + "sha256:a5abcbba9f4b463a45c8ca8b7720891200658f6f46894f79517e6cd11f3405ca", + "sha256:a6db7458ab89c7d80bc1f4e930cc9df6edee2200127cfa6f6e080cf619eddfbd", + "sha256:ad497f38a0d6c329cb621774788583ee12321863cd4bd9feee1effd60f2ad133", + "sha256:ad9509ffb2396483ceacb1eee9134724443ee45b92141105a4645857244aecc8", + "sha256:bbcba75fe879ad6fd2e0d6a8d937f34a571f116a0e4db37df8079e738ea95c71", + "sha256:c10d85e81d0b9ef87970ecbdbfaeec14a361a7fa947118817fcea8e45335fa46", + "sha256:c15b2271c44da77ee9d822552201180779e5e942f3a71fb74e026bf6172ff287", + "sha256:ca37057625693d097543bd88076ceebeb248291df9d6ca8481349efc0b05dcd0", + "sha256:cc3a145479a76ad0ed646434d09216d33d08eef0d8c9a11f5ae5cdc37caa3540", + "sha256:ccf10f16ab498d20e28bc2b5c1306e9c1512f2840f7b6a67000a517a4b37d5ee", + "sha256:cd464ba806e27ee24a91362ba3621bfc39dbbb8b79f2e1340201615197370f7c", + "sha256:d007aa39a52d62373bd23428ba4a2546eed0e7643d7bf2e41ddcefd54519842c", + "sha256:d0666afbe984f6933fe72cd1f1c3560d8c55880a0bdd728ad774006eb4241ecd", + "sha256:d07502cc14ecd64f52b2a74ebbc106893d9a9717120057ea9ea1fd6568a747e7", + "sha256:d489d9778522fbd0f8d6a5c6e48e3514f11be81cb0a5954bdda06f7e1594b321", + "sha256:df7db76400bf46ec6a0a73192b14c8295bdb9812053f4fe53f4e789f3ea66bbb", + "sha256:e3538bc9fe1b902bef51372462e3d7c96fce2b566642512138a480b7adc9d508", + "sha256:e87fd812899aa78252866ae03a048e77bd11b80fb4878ce27c23cade239b42b2", + "sha256:ecdb8173e6c7aa09eee342ac62e193e6904923bd232e76b4157ac0bfa670609f", + "sha256:f244b8e541f414664889e2c87cac11a07b918cb4b540c36f7ada7bfa76571ea2", + "sha256:f4065145bf69de124accdd17ea5f4dc770da0a6a6e440c53f6e0a8c27b3e635c", + "sha256:f420bfe862fb357a6d76f2065447ef6f484bc489292ac91e29bc65d2d7a2c84d", + "sha256:f6ddd90d9fb4b501c97a4458f1c1720e42432c26cb76d28177c5b5ad4e332601", + "sha256:fa73e8c2656a3653ae6c307b3f4e878a21f87859a9afab228280ddccd7369d71", + "sha256:fadbb8f1d4140825069db3fedbbb843290fd5f5bc0a5dbd7eaf81d91bf1b003b", + "sha256:fb3d0cc5cdb926090748ea60172fa8a213cec728bd6c54eae18b96040fcd6227", + "sha256:fb46bb0f24813e6cede6cc07b1961d4b04f331f7112a23b5e21f567da4ee50aa", + "sha256:fd36c119c5d6551bce374fcb5c19269638f8d09862445f85a5a48596fd59f4bb" + ], + "markers": "python_version >= '3.9'", + "version": "==3.11.16" + }, + "aiosignal": { + "hashes": [ + "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5", + "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54" + ], + "markers": "python_version >= '3.9'", + "version": "==1.3.2" + }, + "annotated-types": { + "hashes": [ + "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", + "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89" + ], + "markers": "python_version >= '3.8'", + "version": "==0.7.0" + }, + "attrs": { + "hashes": [ + "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", + "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b" + ], + "markers": "python_version >= '3.8'", + "version": "==25.3.0" + }, + "blinker": { + "hashes": [ + "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", + "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc" + ], + "markers": "python_version >= '3.9'", + "version": "==1.9.0" + }, + "certifi": { + "hashes": [ + "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", + "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe" + ], + "markers": "python_version >= '3.6'", + "version": "==2025.1.31" + }, + "cffi": { + "hashes": [ + "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", + "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", + "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1", + "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", + "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", + "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", + "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8", + "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36", + "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", + "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", + "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc", + "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", + "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", + "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", + "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", + "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", + "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", + "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", + "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", + "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b", + "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", + "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", + "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c", + "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", + "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", + "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", + "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8", + "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1", + "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", + "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", + "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", + "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595", + "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0", + "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", + "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", + "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", + "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", + "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", + "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", + "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16", + "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", + "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e", + "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", + "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964", + "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", + "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576", + "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", + "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3", + "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662", + "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", + "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", + "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", + "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", + "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", + "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", + "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", + "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", + "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9", + "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7", + "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", + "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a", + "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", + "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", + "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", + "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", + "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", + "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b" + ], + "markers": "python_version >= '3.8'", + "version": "==1.17.1" + }, + "charset-normalizer": { + "hashes": [ + "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", + "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa", + "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a", + "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", + "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b", + "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", + "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", + "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", + "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", + "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", + "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", + "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", + "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", + "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", + "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", + "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", + "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", + "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", + "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", + "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", + "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e", + "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a", + "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4", + "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca", + "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", + "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", + "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", + "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", + "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", + "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", + "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", + "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", + "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", + "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", + "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", + "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd", + "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c", + "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", + "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", + "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", + "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", + "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824", + "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", + "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf", + "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487", + "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d", + "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd", + "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", + "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534", + "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", + "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", + "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", + "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd", + "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", + "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9", + "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", + "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", + "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d", + "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", + "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", + "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", + "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", + "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", + "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", + "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8", + "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", + "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", + "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", + "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", + "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", + "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", + "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", + "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", + "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", + "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", + "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", + "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", + "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e", + "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6", + "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", + "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", + "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e", + "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", + "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", + "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c", + "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", + "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", + "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089", + "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", + "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e", + "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", + "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616" + ], + "markers": "python_version >= '3.7'", + "version": "==3.4.1" + }, + "click": { + "hashes": [ + "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", + "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a" + ], + "markers": "python_version >= '3.7'", + "version": "==8.1.8" + }, + "cryptography": { + "hashes": [ + "sha256:04abd71114848aa25edb28e225ab5f268096f44cf0127f3d36975bdf1bdf3390", + "sha256:0529b1d5a0105dd3731fa65680b45ce49da4d8115ea76e9da77a875396727b41", + "sha256:1bc312dfb7a6e5d66082c87c34c8a62176e684b6fe3d90fcfe1568de675e6688", + "sha256:268e4e9b177c76d569e8a145a6939eca9a5fec658c932348598818acf31ae9a5", + "sha256:29ecec49f3ba3f3849362854b7253a9f59799e3763b0c9d0826259a88efa02f1", + "sha256:2bf7bf75f7df9715f810d1b038870309342bff3069c5bd8c6b96128cb158668d", + "sha256:3b721b8b4d948b218c88cb8c45a01793483821e709afe5f622861fc6182b20a7", + "sha256:3c00b6b757b32ce0f62c574b78b939afab9eecaf597c4d624caca4f9e71e7843", + "sha256:3dc62975e31617badc19a906481deacdeb80b4bb454394b4098e3f2525a488c5", + "sha256:4973da6ca3db4405c54cd0b26d328be54c7747e89e284fcff166132eb7bccc9c", + "sha256:4e389622b6927d8133f314949a9812972711a111d577a5d1f4bee5e58736b80a", + "sha256:51e4de3af4ec3899d6d178a8c005226491c27c4ba84101bfb59c901e10ca9f79", + "sha256:5f6f90b72d8ccadb9c6e311c775c8305381db88374c65fa1a68250aa8a9cb3a6", + "sha256:6210c05941994290f3f7f175a4a57dbbb2afd9273657614c506d5976db061181", + "sha256:6f101b1f780f7fc613d040ca4bdf835c6ef3b00e9bd7125a4255ec574c7916e4", + "sha256:7bdcd82189759aba3816d1f729ce42ffded1ac304c151d0a8e89b9996ab863d5", + "sha256:7ca25849404be2f8e4b3c59483d9d3c51298a22c1c61a0e84415104dacaf5562", + "sha256:81276f0ea79a208d961c433a947029e1a15948966658cf6710bbabb60fcc2639", + "sha256:8cadc6e3b5a1f144a039ea08a0bdb03a2a92e19c46be3285123d32029f40a922", + "sha256:8e0ddd63e6bf1161800592c71ac794d3fb8001f2caebe0966e77c5234fa9efc3", + "sha256:909c97ab43a9c0c0b0ada7a1281430e4e5ec0458e6d9244c0e821bbf152f061d", + "sha256:96e7a5e9d6e71f9f4fca8eebfd603f8e86c5225bb18eb621b2c1e50b290a9471", + "sha256:9a1e657c0f4ea2a23304ee3f964db058c9e9e635cc7019c4aa21c330755ef6fd", + "sha256:9eb9d22b0a5d8fd9925a7764a054dca914000607dff201a24c791ff5c799e1fa", + "sha256:af4ff3e388f2fa7bff9f7f2b31b87d5651c45731d3e8cfa0944be43dff5cfbdb", + "sha256:b042d2a275c8cee83a4b7ae30c45a15e6a4baa65a179a0ec2d78ebb90e4f6699", + "sha256:bc821e161ae88bfe8088d11bb39caf2916562e0a2dc7b6d56714a48b784ef0bb", + "sha256:c505d61b6176aaf982c5717ce04e87da5abc9a36a5b39ac03905c4aafe8de7aa", + "sha256:c63454aa261a0cf0c5b4718349629793e9e634993538db841165b3df74f37ec0", + "sha256:c7362add18b416b69d58c910caa217f980c5ef39b23a38a0880dfd87bdf8cd23", + "sha256:d03806036b4f89e3b13b6218fefea8d5312e450935b1a2d55f0524e2ed7c59d9", + "sha256:d1b3031093a366ac767b3feb8bcddb596671b3aaff82d4050f984da0c248b615", + "sha256:d1c3572526997b36f245a96a2b1713bf79ce99b271bbcf084beb6b9b075f29ea", + "sha256:efcfe97d1b3c79e486554efddeb8f6f53a4cdd4cf6086642784fa31fc384e1d7", + "sha256:f514ef4cd14bb6fb484b4a60203e912cfcb64f2ab139e88c2274511514bf7308" + ], + "markers": "python_version >= '3.7' and python_full_version not in '3.9.0, 3.9.1'", + "version": "==44.0.2" + }, + "dbrepo": { + "hashes": [ + "sha256:55de6a4934010e14a574032b5a5179bf3dac9895ef74e5cd4a221a625a75674b" + ], + "path": "./lib/dbrepo-1.8.0.tar.gz" + }, + "flasgger": { + "hashes": [ + "sha256:ca098e10bfbb12f047acc6299cc70a33851943a746e550d86e65e60d4df245fb" + ], + "index": "pypi", + "version": "==0.9.7.1" + }, + "flask": { + "hashes": [ + "sha256:09c347a92aa7ff4a8e7f3206795f30d826654baf38b873d0744cd571ca609efc", + "sha256:f69fcd559dc907ed196ab9df0e48471709175e696d6e698dd4dbe940f96ce66b" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==2.3.3" + }, + "flask-cors": { + "hashes": [ + "sha256:38364faf1a7a5d0a55bd1d2e2f83ee9e359039182f5e6a029557e1f56d92c09a", + "sha256:493b98e2d1e2f1a4720a7af25693ef2fe32fbafec09a2f72c59f3e475eda61d2" + ], + "index": "pypi", + "version": "==4.0.2" + }, + "flask-httpauth": { + "hashes": [ + "sha256:66568a05bc73942c65f1e2201ae746295816dc009edd84b482c44c758d75097a", + "sha256:a58fedd09989b9975448eef04806b096a3964a7feeebc0a78831ff55685b62b0" + ], + "index": "pypi", + "version": "==4.8.0" + }, + "flask-jwt-extended": { + "hashes": [ + "sha256:52f35bf0985354d7fb7b876e2eb0e0b141aaff865a22ff6cc33d9a18aa987978", + "sha256:8085d6757505b6f3291a2638c84d207e8f0ad0de662d1f46aa2f77e658a0c976" + ], + "index": "pypi", + "markers": "python_version >= '3.9' and python_version < '4'", + "version": "==4.7.1" + }, + "frozenlist": { + "hashes": [ + "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e", + "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf", + "sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6", + "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a", + "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d", + "sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f", + "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28", + "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b", + "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9", + "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2", + "sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec", + "sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2", + "sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c", + "sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336", + "sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4", + "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d", + "sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b", + "sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c", + "sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10", + "sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08", + "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942", + "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8", + "sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f", + "sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10", + "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5", + "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6", + "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21", + "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c", + "sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d", + "sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923", + "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608", + "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de", + "sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17", + "sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0", + "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f", + "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641", + "sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c", + "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a", + "sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0", + "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9", + "sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab", + "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f", + "sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3", + "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a", + "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784", + "sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604", + "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d", + "sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5", + "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03", + "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e", + "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953", + "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee", + "sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d", + "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817", + "sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3", + "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039", + "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f", + "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9", + "sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf", + "sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76", + "sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba", + "sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171", + "sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb", + "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439", + "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631", + "sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972", + "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d", + "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869", + "sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9", + "sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411", + "sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723", + "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2", + "sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b", + "sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99", + "sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e", + "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840", + "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3", + "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb", + "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3", + "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0", + "sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca", + "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45", + "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e", + "sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f", + "sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5", + "sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307", + "sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e", + "sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2", + "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778", + "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a", + "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30", + "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a" + ], + "markers": "python_version >= '3.8'", + "version": "==1.5.0" + }, + "grafana-client": { + "hashes": [ + "sha256:2477a47b923fd0637947e620b0b777c641af18a3025464fa4505783dbf05dfcc", + "sha256:8cb61bb2a87ec07bca10974df276b9a1a95bfdb63f3a696f065692ffc9b8c389" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==4.3.2" + }, + "gunicorn": { + "hashes": [ + "sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d", + "sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==23.0.0" + }, + "h11": { + "hashes": [ + "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", + "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761" + ], + "markers": "python_version >= '3.7'", + "version": "==0.14.0" + }, + "idna": { + "hashes": [ + "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" + ], + "markers": "python_version >= '3.6'", + "version": "==3.10" + }, + "iniconfig": { + "hashes": [ + "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", + "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760" + ], + "markers": "python_version >= '3.8'", + "version": "==2.1.0" + }, + "itsdangerous": { + "hashes": [ + "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", + "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173" + ], + "markers": "python_version >= '3.8'", + "version": "==2.2.0" + }, + "jh2": { + "hashes": [ + "sha256:038091480cd1544e9389b0adbb1b1645a797689dcb68ceae7e45eec96ed24497", + "sha256:0c8e336df8ed1687590695f4469f480eeb4159bf13bb6193791c6530fe114b49", + "sha256:0c9bf2d5e4ef45c1686c6f76935e7ca263f5eae4de92bf5d1873a0e737e4eb7d", + "sha256:0faf6e96f74d27b8ca816b40217904891f91b664ed1c0388737949ceb50ac15d", + "sha256:10ea7f497e6226372e1d4fdbf42c8381f4887819a643ab930bff4072ad298d84", + "sha256:11650f7ed77ee1df30f25d6b3b74b2fa1c94124e074fd455abafea3cbc913d53", + "sha256:12ead3ee3e9c7caa00356b528a5cc7fe210fbe2060628af6e19ed76b8416572e", + "sha256:136b3c5b08883681fcb58f12393a5bbfa422d6e2d5ba887e263e776874276bc6", + "sha256:17d6e1691154ea9f726e43dcb717df48e56c66b5a01c90ad675c6494c36e5be1", + "sha256:19cb987915cc0d321746a12f2a693d087ffb721c37ac9a153cc088c57d4d90eb", + "sha256:1cdf15de698c4026e64fd914fead3180e52bf2a7bcbe44a3392404582dbf2d22", + "sha256:1e81e1c64e33506b8508ba5e3c7c139b2577e78b079c2c16a8e7a02a161f1080", + "sha256:2226c76e4ff2149c5d9f94bed22bf9c4f3411d38cc53d4a7ddfbe0899c8b558c", + "sha256:2837412fb7b684c6ce7392c8bc57440c6dbadaf1bde7a53144381f7df7083c1c", + "sha256:293f0f3da3c391e997e0d55fdb85540e98a8b0406622bb4ba57fb7617697f31e", + "sha256:2b9cc6c0239215a349d28c192fa4c4e7a7348eee7980531525c01bffe39eea80", + "sha256:2f3ad679f84ff236a0d7b71ddc4b3c09fe467abee2f1a86671f0cd417be5352b", + "sha256:358cad2f328c52c15756cf32b0ad17afb0d617e7cdfe93d59aa2616966d825b7", + "sha256:3663712305b509f79c002c8c0ca9994f716cadba576f5a59632dda1aec1ca8c6", + "sha256:41794820ccca039ca2ead6245f30b34601dd1456eee5b5dde620672bb989e79d", + "sha256:44b7e64aff542471c474c24f771eae5efd9152da02a12556f7cb7607020e1420", + "sha256:45770eb0990166026538d3c2fd7d92f17cfde13ca6567570c4baec3ce9162936", + "sha256:498060078a4d1b458e9381fefb027d85329397b50d65287712b3d48233e20836", + "sha256:4c2f18f337c2393f84e45e5011c8b02697b81638b1cec49da60a01b9ed067695", + "sha256:5162d6e475d2762035fb8ea25982bcbec6c58715e33bd0951499f743cd90b110", + "sha256:51e8c890bb59008c95b3a552cefd8bd9ce50a7466a6c920a78cf586e885d7449", + "sha256:56ad3839ac6ac5fd3d023cf59d4b04264b74bb4cb44c0780faf51d6b5ff38fbc", + "sha256:5821638ef0d7c973071810a6786f59b305172197f7e7e469a2ce169e7f4978e3", + "sha256:5ac1b2d379f4d40c13dcce537e69704452943cddbe991fd54a84fdb2da9026d5", + "sha256:5b465d4311b0429fe6fa85df8e2cfcb038c9fface95396dd14e838ecabaaadf2", + "sha256:5d8656b98057329bd03d968aac8d5198389cf51517511295cfc4cb827a507e39", + "sha256:5dcfb3e823ef4b91b70b92848570d1d8cfd584304bd2bd54272dc100c9494def", + "sha256:5e40d23ea43f683f3a7c032dde391104f609b05c21b6d284101120b51dbd50c1", + "sha256:63a01522bde161c713f7fa5ee5d850fee6386fc386073490ebcd438f14579cf2", + "sha256:6b2a3d7756035dde13571f4ad232629b78b7f35c2cd5fda7b464079fc697db3a", + "sha256:6b3be1a6bf6c965aea3b4e3a40df9d2c134c516d89c76cf2b6c81f67e6c5c6ed", + "sha256:6c7bea3357f2dc653756e6da55f66cd21c73d3875c8f3dc4e8d196a876252de0", + "sha256:6e6c8e229507cf29333a2f491cbaa7dff5b8a4a3e613af8090ccce9ce3e4f7a0", + "sha256:6fad27f2a63884ee45d491aebec4b1f38752cd6aaccc625038c21e7f43c02c49", + "sha256:71bfef52547c2b8b145897fa8d1b5142bc52313cfa38c0742e0ef755f0d09c60", + "sha256:72370d312323282b1bf74426e53fae861a310d7ae519b419da46673c38e7d147", + "sha256:76c7d36043a9c478b0c846fcec7da5cb095983722473e503e0122ccd170182b5", + "sha256:78d8a81ef51edb9a2f278a6fb278789b49e304b12bb21bccf2fe7e344f71a9fb", + "sha256:798a6b159ce32181a5e7ab7611c17d1080e74a5541fec47f961b728dab25a76f", + "sha256:7e370567f66a57e2c0e3ae2afcc6f126e1d6babd36831cfd0caad279b05c1c88", + "sha256:8004b845f606b95a8b17efa112aa10b327e46e95dcda604a257b4633d4ed45c8", + "sha256:80b20bf9ea4e709b3b9ae364ac298dfa872b084c186e5c1d60b0b79c79a7ee7e", + "sha256:87303f4bb1b493997f911a4f126123ccd2827d3a2e7dd2390cc6143fbc75805b", + "sha256:8d423f4631395b92dceda39f481a463498131ac02a58581124a44495491f715b", + "sha256:94ee262192db50fb9c069a0be7bb1a426fb1b43af26ce12bf4c6c30e13f46b56", + "sha256:960e4be2e7de340300ab4bcc2b45bed46be1d62330575b8265e6602dbcb9a14c", + "sha256:99397d5e1da6b345cec3e6125e2902b0e6864eb8eaa4be43a2013f059c502c93", + "sha256:9abbb8c1bad08817bad62ae1ea76c01bdbd0ee8c827d05f3ba038c9f6d6f14bb", + "sha256:9c0b8fadf80bc70d341032f92702bda1b0ed78c01e9c495f0df701938c99bcf5", + "sha256:9f977da9abae170eebdcf02bda33727c342fad5dcdbc08498bfdfb6cc6c65489", + "sha256:a6be712ca39d5e9c89b705bc9800be36739436fefb8d0b52b2d332f7d6d22a01", + "sha256:aa434418d6ee44b0ba3a5a407bc9e1543cf496328f43f149e9b58f74a63d5c21", + "sha256:ac4f778e32f7de0ba63346893a4af87c2280ffc1783f594a117be51d908a10da", + "sha256:ac85d65ee369c09b2904b55078ad589961e2e2e03c810963d35a26e6a3931425", + "sha256:ad5d78c664d39960435d4162db31117c8945ba74fb0c414e79ba85a8bdeafdec", + "sha256:ad91f57c3485d87a8edee558dafab0f08c716857d748731c0998dcefe9d3fd5f", + "sha256:afd255d42b340036883ca95bded553b29065b064e2fe5db64ad5988517db9694", + "sha256:b1c2c74f100a0c2110a8e30445554ae331860d32f145c60a2a1e1c27702022a2", + "sha256:b49a8c71378d40d43c6a56eaa536d7823baa43c27c93e082aeb60a9717be0c10", + "sha256:b5f52611323e8e35705e6750a760f32165b41c052d22da154ae343871e7cd50d", + "sha256:b6bf99ae529ac359263269710356d3ddb173c15d8f8dc8849ae794ab811e5cd0", + "sha256:ba361bf87c4701f11241be92c99ef5cf916865dd225955cccb2376bf76717b3c", + "sha256:bc351aa2158575e68943d8e1d5531719ad86bf6607776627ed5a1a60657664af", + "sha256:bd6eb7b1e12e4dd0b75cab1b023272f1333494add5ad61deedac738af1ffeede", + "sha256:bf8852595f5e2d2b072e24c29394b5aca7fba96ecc8656d56660535f9e9872c9", + "sha256:c1dd66541569a2bdbe92589cc96a89f470b20d168f2238fd463e1b59ee3e2d49", + "sha256:c36a7a004cba4e370d0675826eeefe4e42a256638b6b1432263ddb4af317bc02", + "sha256:c886cda61da4d39010be84802bed11bc75f03e8a6094cc18016957a2c80254d4", + "sha256:cc7aa83946f80c66a5d2dea7e165f15aa3eb21e7b74b24d8f850afc0d44bb00e", + "sha256:cea9c4bef70d1358bafec6019164abce362f4de15d79d1ecd64ae31c1749d77a", + "sha256:cfe1951e80869695857986be104a40a1e7fa8ec7de05f86bcbd7bd20854be764", + "sha256:d36cf6f139da3279644794fcfda18af425c8bb122ef9c2e7c762a937bbf7b0f4", + "sha256:d81308faaa9393b7e6ed20718d465c4c2b73c24d5e4826024961acf4b87b1524", + "sha256:db51ea1f9c5ac790848bc271fcdf4108ad1b77a77c6949a96320477962cf7ba5", + "sha256:dd05c18c920a15e00d7a52df37bffd3930fe2c004c690f9422b20e12077e6dbd", + "sha256:df05918a11e1db0198d00486e36673b4b4a89390e4458ff9479b4908dde357ac", + "sha256:e4c31dccf6be131709e545d0258eb5b75c5fac304857ad3976331c6740e8b9d6", + "sha256:e60954d673040430802b29fe5bba698e262182b5ba5f302ff4458e39f8101881", + "sha256:e60e2d2c88a0552e61c37172fe377f6a8abf479130a445314886de4a360ba940", + "sha256:e786f773ddc153846b2ebdb854011cfd1f7c874b8ee79cced3706801341c9f5d", + "sha256:e7cd91548fb95b69edd376f5204e27115ac7d093ec7d80066123a5bdb31c71d9", + "sha256:eaef2ea4f5602aefaaf3d6e8235f3b9ffde35aff15aac1c16cc802f6bbf0a3b5", + "sha256:ec8c5ea93a03775fbadd08462200cf34ce617ec75a032abfa44fd6d3a00e5424", + "sha256:eddeb8574bc9d9abb8491d4a46b60e553c2cea235b80373756acb06568101175", + "sha256:eeb300b0e4b428aab2f70d785cad4306529262af6de8c8c5fe6a4b41a674a434", + "sha256:f39d71ece8e97cf069e4154868eaac1256b133fe23e0459829432e4bb6406472", + "sha256:f4840ddad2b9d53710e92361391944da89e3576641a290066a1719520059247c", + "sha256:f70723a00bcbce0f9a216853139955be45da35741335eb3afead304e77662560", + "sha256:f829cf2ba5b553e6529d6238928c07096f1feb47f4ad536b7f06bca6cc77173f", + "sha256:f96386910467725895f7972939a6faabd6e96b1de0cc2c092e4bd2c40e956e25", + "sha256:fe259a9d6f555bc79aed9bb4b9a7fff73db443b4c483e4a81a428c8a2860428b" + ], + "markers": "python_version >= '3.7'", + "version": "==5.0.8" + }, + "jinja2": { + "hashes": [ + "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", + "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + ], + "markers": "python_version >= '3.7'", + "version": "==3.1.6" + }, + "jsonschema": { + "hashes": [ + "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4", + "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566" + ], + "markers": "python_version >= '3.8'", + "version": "==4.23.0" + }, + "jsonschema-specifications": { + "hashes": [ + "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272", + "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf" + ], + "markers": "python_version >= '3.9'", + "version": "==2024.10.1" + }, + "jwt": { + "hashes": [ + "sha256:61c9170f92e736b530655e75374681d4fcca9cfa8763ab42be57353b2b203494" + ], + "index": "pypi", + "markers": "python_version >= '3.6'", + "version": "==1.3.1" + }, + "markupsafe": { + "hashes": [ + "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", + "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", + "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0", + "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", + "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", + "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13", + "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", + "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", + "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", + "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", + "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0", + "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", + "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", + "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", + "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", + "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff", + "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", + "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", + "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", + "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", + "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", + "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", + "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", + "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", + "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a", + "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", + "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", + "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", + "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", + "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144", + "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f", + "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", + "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", + "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", + "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", + "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", + "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", + "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", + "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", + "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", + "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", + "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", + "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", + "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", + "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", + "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", + "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", + "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", + "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29", + "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", + "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", + "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", + "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", + "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", + "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", + "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a", + "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178", + "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", + "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", + "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", + "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50" + ], + "markers": "python_version >= '3.9'", + "version": "==3.0.2" + }, + "mistune": { + "hashes": [ + "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", + "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0" + ], + "markers": "python_version >= '3.8'", + "version": "==3.1.3" + }, + "multidict": { + "hashes": [ + "sha256:0085b0afb2446e57050140240a8595846ed64d1cbd26cef936bfab3192c673b8", + "sha256:042028348dc5a1f2be6c666437042a98a5d24cee50380f4c0902215e5ec41844", + "sha256:05fefbc3cddc4e36da209a5e49f1094bbece9a581faa7f3589201fd95df40e5d", + "sha256:063be88bd684782a0715641de853e1e58a2f25b76388538bd62d974777ce9bc2", + "sha256:07bfa8bc649783e703263f783f73e27fef8cd37baaad4389816cf6a133141331", + "sha256:08549895e6a799bd551cf276f6e59820aa084f0f90665c0f03dd3a50db5d3c48", + "sha256:095a2eabe8c43041d3e6c2cb8287a257b5f1801c2d6ebd1dd877424f1e89cf29", + "sha256:0b183a959fb88ad1be201de2c4bdf52fa8e46e6c185d76201286a97b6f5ee65c", + "sha256:0c383d28857f66f5aebe3e91d6cf498da73af75fbd51cedbe1adfb85e90c0460", + "sha256:0d57a01a2a9fa00234aace434d8c131f0ac6e0ac6ef131eda5962d7e79edfb5b", + "sha256:0dc25a3293c50744796e87048de5e68996104d86d940bb24bc3ec31df281b191", + "sha256:0e5a644e50ef9fb87878d4d57907f03a12410d2aa3b93b3acdf90a741df52c49", + "sha256:0f249badb360b0b4d694307ad40f811f83df4da8cef7b68e429e4eea939e49dd", + "sha256:0f74f2fc51555f4b037ef278efc29a870d327053aba5cb7d86ae572426c7cccc", + "sha256:125dd82b40f8c06d08d87b3510beaccb88afac94e9ed4a6f6c71362dc7dbb04b", + "sha256:13551d0e2d7201f0959725a6a769b6f7b9019a168ed96006479c9ac33fe4096b", + "sha256:14ed9ed1bfedd72a877807c71113deac292bf485159a29025dfdc524c326f3e1", + "sha256:163f4604e76639f728d127293d24c3e208b445b463168af3d031b92b0998bb90", + "sha256:19e2819b0b468174de25c0ceed766606a07cedeab132383f1e83b9a4e96ccb4f", + "sha256:1e2a2193d3aa5cbf5758f6d5680a52aa848e0cf611da324f71e5e48a9695cc86", + "sha256:1f3c099d3899b14e1ce52262eb82a5f5cb92157bb5106bf627b618c090a0eadc", + "sha256:214207dcc7a6221d9942f23797fe89144128a71c03632bf713d918db99bd36de", + "sha256:2325105e16d434749e1be8022f942876a936f9bece4ec41ae244e3d7fae42aaf", + "sha256:2529ddbdaa424b2c6c2eb668ea684dd6b75b839d0ad4b21aad60c168269478d7", + "sha256:256d431fe4583c5f1e0f2e9c4d9c22f3a04ae96009b8cfa096da3a8723db0a16", + "sha256:25bb96338512e2f46f615a2bb7c6012fe92a4a5ebd353e5020836a7e33120349", + "sha256:2e87f1926e91855ae61769ba3e3f7315120788c099677e0842e697b0bfb659f2", + "sha256:2fc6af8e39f7496047c7876314f4317736eac82bf85b54c7c76cf1a6f8e35d98", + "sha256:3157126b028c074951839233647bd0e30df77ef1fedd801b48bdcad242a60f4e", + "sha256:32c9b4878f48be3e75808ea7e499d6223b1eea6d54c487a66bc10a1871e3dc6a", + "sha256:32ed748ff9ac682eae7859790d3044b50e3076c7d80e17a44239683769ff485e", + "sha256:3501621d5e86f1a88521ea65d5cad0a0834c77b26f193747615b7c911e5422d2", + "sha256:437c33561edb6eb504b5a30203daf81d4a9b727e167e78b0854d9a4e18e8950b", + "sha256:48d39b1824b8d6ea7de878ef6226efbe0773f9c64333e1125e0efcfdd18a24c7", + "sha256:4ac3fcf9a2d369bd075b2c2965544036a27ccd277fc3c04f708338cc57533081", + "sha256:4ccfd74957ef53fa7380aaa1c961f523d582cd5e85a620880ffabd407f8202c0", + "sha256:52b05e21ff05729fbea9bc20b3a791c3c11da61649ff64cce8257c82a020466d", + "sha256:5389445f0173c197f4a3613713b5fb3f3879df1ded2a1a2e4bc4b5b9c5441b7e", + "sha256:5c5e7d2e300d5cb3b2693b6d60d3e8c8e7dd4ebe27cd17c9cb57020cac0acb80", + "sha256:5d26547423e5e71dcc562c4acdc134b900640a39abd9066d7326a7cc2324c530", + "sha256:5dd7106d064d05896ce28c97da3f46caa442fe5a43bc26dfb258e90853b39b44", + "sha256:5f8cb1329f42fadfb40d6211e5ff568d71ab49be36e759345f91c69d1033d633", + "sha256:61d5541f27533f803a941d3a3f8a3d10ed48c12cf918f557efcbf3cd04ef265c", + "sha256:639556758c36093b35e2e368ca485dada6afc2bd6a1b1207d85ea6dfc3deab27", + "sha256:641cf2e3447c9ecff2f7aa6e9eee9eaa286ea65d57b014543a4911ff2799d08a", + "sha256:6aed763b6a1b28c46c055692836879328f0b334a6d61572ee4113a5d0c859872", + "sha256:6e2a2d6749e1ff2c9c76a72c6530d5baa601205b14e441e6d98011000f47a7ac", + "sha256:7243c5a6523c5cfeca76e063efa5f6a656d1d74c8b1fc64b2cd1e84e507f7e2a", + "sha256:76b34c12b013d813e6cb325e6bd4f9c984db27758b16085926bbe7ceeaace626", + "sha256:781b5dd1db18c9e9eacc419027b0acb5073bdec9de1675c0be25ceb10e2ad133", + "sha256:7c611345bbe7cb44aabb877cb94b63e86f2d0db03e382667dbd037866d44b4f8", + "sha256:83b78c680d4b15d33042d330c2fa31813ca3974197bddb3836a5c635a5fd013f", + "sha256:84e87a7d75fa36839a3a432286d719975362d230c70ebfa0948549cc38bd5b46", + "sha256:89b3857652183b8206a891168af47bac10b970d275bba1f6ee46565a758c078d", + "sha256:8cd1a0644ccaf27e9d2f6d9c9474faabee21f0578fe85225cc5af9a61e1653df", + "sha256:8de4d42dffd5ced9117af2ce66ba8722402541a3aa98ffdf78dde92badb68932", + "sha256:94a7bb972178a8bfc4055db80c51efd24baefaced5e51c59b0d598a004e8305d", + "sha256:98aa8325c7f47183b45588af9c434533196e241be0a4e4ae2190b06d17675c02", + "sha256:9e658d1373c424457ddf6d55ec1db93c280b8579276bebd1f72f113072df8a5d", + "sha256:9f49585f4abadd2283034fc605961f40c638635bc60f5162276fec075f2e37a4", + "sha256:9f6cad071960ba1914fa231677d21b1b4a3acdcce463cee41ea30bc82e6040cf", + "sha256:a0cc398350ef31167e03f3ca7c19313d4e40a662adcb98a88755e4e861170bdd", + "sha256:a1133414b771619aa3c3000701c11b2e4624a7f492f12f256aedde97c28331a2", + "sha256:a33273a541f1e1a8219b2a4ed2de355848ecc0254264915b9290c8d2de1c74e1", + "sha256:a3c0ff89fe40a152e77b191b83282c9664357dce3004032d42e68c514ceff27e", + "sha256:a49994481b99cd7dedde07f2e7e93b1d86c01c0fca1c32aded18f10695ae17eb", + "sha256:abf5b17bc0cf626a8a497d89ac691308dbd825d2ac372aa990b1ca114e470151", + "sha256:ac380cacdd3b183338ba63a144a34e9044520a6fb30c58aa14077157a033c13e", + "sha256:ad81012b24b88aad4c70b2cbc2dad84018783221b7f923e926f4690ff8569da3", + "sha256:b2c00ad31fbc2cbac85d7d0fcf90853b2ca2e69d825a2d3f3edb842ef1544a2c", + "sha256:b4c153863dd6569f6511845922c53e39c8d61f6e81f228ad5443e690fca403de", + "sha256:b4f3d66dd0354b79761481fc15bdafaba0b9d9076f1f42cc9ce10d7fcbda205a", + "sha256:b99aac6bb2c37db336fa03a39b40ed4ef2818bf2dfb9441458165ebe88b793af", + "sha256:b9f6392d98c0bd70676ae41474e2eecf4c7150cb419237a41f8f96043fcb81d1", + "sha256:c537da54ce4ff7c15e78ab1292e5799d0d43a2108e006578a57f531866f64025", + "sha256:ca23db5fb195b5ef4fd1f77ce26cadefdf13dba71dab14dadd29b34d457d7c44", + "sha256:cc826b9a8176e686b67aa60fd6c6a7047b0461cae5591ea1dc73d28f72332a8a", + "sha256:cca83a629f77402cfadd58352e394d79a61c8015f1694b83ab72237ec3941f88", + "sha256:cf8d370b2fea27fb300825ec3984334f7dd54a581bde6456799ba3776915a656", + "sha256:d1175b0e0d6037fab207f05774a176d71210ebd40b1c51f480a04b65ec5c786d", + "sha256:d1996ee1330e245cd3aeda0887b4409e3930524c27642b046e4fae88ffa66c5e", + "sha256:d5a36953389f35f0a4e88dc796048829a2f467c9197265504593f0e420571547", + "sha256:da51d8928ad8b4244926fe862ba1795f0b6e68ed8c42cd2f822d435db9c2a8f4", + "sha256:e16e7297f29a544f49340012d6fc08cf14de0ab361c9eb7529f6a57a30cbfda1", + "sha256:e25b11a0417475f093d0f0809a149aff3943c2c56da50fdf2c3c88d57fe3dfbd", + "sha256:e4371591e621579cb6da8401e4ea405b33ff25a755874a3567c4075ca63d56e2", + "sha256:e653d36b1bf48fa78c7fcebb5fa679342e025121ace8c87ab05c1cefd33b34fc", + "sha256:e7d91a230c7f8af86c904a5a992b8c064b66330544693fd6759c3d6162382ecf", + "sha256:e851e6363d0dbe515d8de81fd544a2c956fdec6f8a049739562286727d4a00c3", + "sha256:ef7d48207926edbf8b16b336f779c557dd8f5a33035a85db9c4b0febb0706817", + "sha256:f7716f7e7138252d88607228ce40be22660d6608d20fd365d596e7ca0738e019", + "sha256:facaf11f21f3a4c51b62931feb13310e6fe3475f85e20d9c9fdce0d2ea561b87" + ], + "markers": "python_version >= '3.9'", + "version": "==6.2.0" + }, + "niquests": { + "hashes": [ + "sha256:68e0a7e9f338466b3606945fffd11f75e3c90af7498aa9336ef03812323b7e36", + "sha256:86e484c2c60444aa96069c15f6295af6e25a8bad50781e1326df1b5c7ab48339" + ], + "markers": "python_version >= '3.7'", + "version": "==3.14.0" + }, + "numpy": { + "hashes": [ + "sha256:05c076d531e9998e7e694c36e8b349969c56eadd2cdcd07242958489d79a7286", + "sha256:0d54974f9cf14acf49c60f0f7f4084b6579d24d439453d5fc5805d46a165b542", + "sha256:11c43995255eb4127115956495f43e9343736edb7fcdb0d973defd9de14cd84f", + "sha256:188dcbca89834cc2e14eb2f106c96d6d46f200fe0200310fc29089657379c58d", + "sha256:1974afec0b479e50438fc3648974268f972e2d908ddb6d7fb634598cdb8260a0", + "sha256:1cf4e5c6a278d620dee9ddeb487dc6a860f9b199eadeecc567f777daace1e9e7", + "sha256:207a2b8441cc8b6a2a78c9ddc64d00d20c303d79fba08c577752f080c4007ee3", + "sha256:218f061d2faa73621fa23d6359442b0fc658d5b9a70801373625d958259eaca3", + "sha256:2aad3c17ed2ff455b8eaafe06bcdae0062a1db77cb99f4b9cbb5f4ecb13c5146", + "sha256:2fa8fa7697ad1646b5c93de1719965844e004fcad23c91228aca1cf0800044a1", + "sha256:31504f970f563d99f71a3512d0c01a645b692b12a63630d6aafa0939e52361e6", + "sha256:3387dd7232804b341165cedcb90694565a6015433ee076c6754775e85d86f1fc", + "sha256:4ba5054787e89c59c593a4169830ab362ac2bee8a969249dc56e5d7d20ff8df9", + "sha256:4f92084defa704deadd4e0a5ab1dc52d8ac9e8a8ef617f3fbb853e79b0ea3592", + "sha256:65ef3468b53269eb5fdb3a5c09508c032b793da03251d5f8722b1194f1790c00", + "sha256:6f527d8fdb0286fd2fd97a2a96c6be17ba4232da346931d967a0630050dfd298", + "sha256:7051ee569db5fbac144335e0f3b9c2337e0c8d5c9fee015f259a5bd70772b7e8", + "sha256:7716e4a9b7af82c06a2543c53ca476fa0b57e4d760481273e09da04b74ee6ee2", + "sha256:79bd5f0a02aa16808fcbc79a9a376a147cc1045f7dfe44c6e7d53fa8b8a79392", + "sha256:7a4e84a6283b36632e2a5b56e121961f6542ab886bc9e12f8f9818b3c266bfbb", + "sha256:8120575cb4882318c791f839a4fd66161a6fa46f3f0a5e613071aae35b5dd8f8", + "sha256:81413336ef121a6ba746892fad881a83351ee3e1e4011f52e97fba79233611fd", + "sha256:8146f3550d627252269ac42ae660281d673eb6f8b32f113538e0cc2a9aed42b9", + "sha256:879cf3a9a2b53a4672a168c21375166171bc3932b7e21f622201811c43cdd3b0", + "sha256:892c10d6a73e0f14935c31229e03325a7b3093fafd6ce0af704be7f894d95687", + "sha256:92bda934a791c01d6d9d8e038363c50918ef7c40601552a58ac84c9613a665bc", + "sha256:9ba03692a45d3eef66559efe1d1096c4b9b75c0986b5dff5530c378fb8331d4f", + "sha256:9eeea959168ea555e556b8188da5fa7831e21d91ce031e95ce23747b7609f8a4", + "sha256:a0258ad1f44f138b791327961caedffbf9612bfa504ab9597157806faa95194a", + "sha256:a761ba0fa886a7bb33c6c8f6f20213735cb19642c580a931c625ee377ee8bd39", + "sha256:a7b9084668aa0f64e64bd00d27ba5146ef1c3a8835f3bd912e7a9e01326804c4", + "sha256:a84eda42bd12edc36eb5b53bbcc9b406820d3353f1994b6cfe453a33ff101775", + "sha256:ab2939cd5bec30a7430cbdb2287b63151b77cf9624de0532d629c9a1c59b1d5c", + "sha256:ac0280f1ba4a4bfff363a99a6aceed4f8e123f8a9b234c89140f5e894e452ecd", + "sha256:adf8c1d66f432ce577d0197dceaac2ac00c0759f573f28516246351c58a85020", + "sha256:b4adfbbc64014976d2f91084915ca4e626fbf2057fb81af209c1a6d776d23e3d", + "sha256:bb649f8b207ab07caebba230d851b579a3c8711a851d29efe15008e31bb4de24", + "sha256:bce43e386c16898b91e162e5baaad90c4b06f9dcbe36282490032cec98dc8ae7", + "sha256:bd3ad3b0a40e713fc68f99ecfd07124195333f1e689387c180813f0e94309d6f", + "sha256:c3f7ac96b16955634e223b579a3e5798df59007ca43e8d451a0e6a50f6bfdfba", + "sha256:cf28633d64294969c019c6df4ff37f5698e8326db68cc2b66576a51fad634880", + "sha256:d0f35b19894a9e08639fd60a1ec1978cb7f5f7f1eace62f38dd36be8aecdef4d", + "sha256:db1f1c22173ac1c58db249ae48aa7ead29f534b9a948bc56828337aa84a32ed6", + "sha256:dbe512c511956b893d2dacd007d955a3f03d555ae05cfa3ff1c1ff6df8851854", + "sha256:df2f57871a96bbc1b69733cd4c51dc33bea66146b8c63cacbfed73eec0883017", + "sha256:e2f085ce2e813a50dfd0e01fbfc0c12bbe5d2063d99f8b29da30e544fb6483b8", + "sha256:e642d86b8f956098b564a45e6f6ce68a22c2c97a04f5acd3f221f57b8cb850ae", + "sha256:e9e0a277bb2eb5d8a7407e14688b85fd8ad628ee4e0c7930415687b6564207a4", + "sha256:ea2bb7e2ae9e37d96835b3576a4fa4b3a97592fbea8ef7c3587078b0068b8f09", + "sha256:ee4d528022f4c5ff67332469e10efe06a267e32f4067dc76bb7e2cddf3cd25ff", + "sha256:f05d4198c1bacc9124018109c5fba2f3201dbe7ab6e92ff100494f236209c960", + "sha256:f34dc300df798742b3d06515aa2a0aee20941c13579d7a2f2e10af01ae4901ee", + "sha256:f4162988a360a29af158aeb4a2f4f09ffed6a969c9776f8f3bdee9b06a8ab7e5", + "sha256:f486038e44caa08dbd97275a9a35a283a8f1d2f0ee60ac260a1790e76660833c", + "sha256:f7de08cbe5551911886d1ab60de58448c6df0f67d9feb7d1fb21e9875ef95e91" + ], + "markers": "python_version >= '3.10'", + "version": "==2.2.4" + }, + "packaging": { + "hashes": [ + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" + ], + "markers": "python_version >= '3.8'", + "version": "==24.2" + }, + "pandas": { + "hashes": [ + "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", + "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", + "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5", + "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", + "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", + "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32", + "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea", + "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", + "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f", + "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348", + "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", + "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", + "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5", + "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e", + "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", + "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645", + "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", + "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30", + "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", + "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", + "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", + "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3", + "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039", + "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", + "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd", + "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761", + "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", + "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57", + "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c", + "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c", + "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", + "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", + "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", + "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42", + "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", + "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39", + "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc", + "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698", + "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed", + "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", + "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", + "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319" + ], + "markers": "python_version >= '3.9'", + "version": "==2.2.3" + }, + "pika": { + "hashes": [ + "sha256:0779a7c1fafd805672796085560d290213a465e4f6f76a6fb19e378d8041a14f", + "sha256:b2a327ddddf8570b4965b3576ac77091b850262d34ce8c1d8cb4e4146aa4145f" + ], + "markers": "python_version >= '3.7'", + "version": "==1.3.2" + }, + "pluggy": { + "hashes": [ + "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", + "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669" + ], + "markers": "python_version >= '3.8'", + "version": "==1.5.0" + }, + "prometheus-client": { + "hashes": [ + "sha256:252505a722ac04b0456be05c05f75f45d760c2911ffc45f2a06bcaed9f3ae3fb", + "sha256:594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301" + ], + "markers": "python_version >= '3.8'", + "version": "==0.21.1" + }, + "prometheus-flask-exporter": { + "hashes": [ + "sha256:41fc9bbd7d48cc958ed8384aacf60c3621d9e903768be61c4e7f0c63872eaf1a", + "sha256:94922a636d4c1d8b68e1ee605c30a23e9bbb0b21756df8222aa919634871784c" + ], + "index": "pypi", + "version": "==0.23.2" + }, + "propcache": { + "hashes": [ + "sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e", + "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b", + "sha256:069e7212890b0bcf9b2be0a03afb0c2d5161d91e1bf51569a64f629acc7defbf", + "sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b", + "sha256:0c3c3a203c375b08fd06a20da3cf7aac293b834b6f4f4db71190e8422750cca5", + "sha256:0c86e7ceea56376216eba345aa1fc6a8a6b27ac236181f840d1d7e6a1ea9ba5c", + "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c", + "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a", + "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf", + "sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8", + "sha256:1eb34d90aac9bfbced9a58b266f8946cb5935869ff01b164573a7634d39fbcb5", + "sha256:1f6cc0ad7b4560e5637eb2c994e97b4fa41ba8226069c9277eb5ea7101845b42", + "sha256:27c6ac6aa9fc7bc662f594ef380707494cb42c22786a558d95fcdedb9aa5d035", + "sha256:2d219b0dbabe75e15e581fc1ae796109b07c8ba7d25b9ae8d650da582bed01b0", + "sha256:2fce1df66915909ff6c824bbb5eb403d2d15f98f1518e583074671a30fe0c21e", + "sha256:319fa8765bfd6a265e5fa661547556da381e53274bc05094fc9ea50da51bfd46", + "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d", + "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24", + "sha256:3e19ea4ea0bf46179f8a3652ac1426e6dcbaf577ce4b4f65be581e237340420d", + "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de", + "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf", + "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7", + "sha256:43593c6772aa12abc3af7784bff4a41ffa921608dd38b77cf1dfd7f5c4e71371", + "sha256:47ef24aa6511e388e9894ec16f0fbf3313a53ee68402bc428744a367ec55b833", + "sha256:4cf9e93a81979f1424f1a3d155213dc928f1069d697e4353edb8a5eba67c6259", + "sha256:4d0dfdd9a2ebc77b869a0b04423591ea8823f791293b527dc1bb896c1d6f1136", + "sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25", + "sha256:58aa11f4ca8b60113d4b8e32d37e7e78bd8af4d1a5b5cb4979ed856a45e62005", + "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef", + "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7", + "sha256:5b9145c35cc87313b5fd480144f8078716007656093d23059e8993d3a8fa730f", + "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53", + "sha256:5cdb0f3e1eb6dfc9965d19734d8f9c481b294b5274337a8cb5cb01b462dcb7e0", + "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb", + "sha256:603f1fe4144420374f1a69b907494c3acbc867a581c2d49d4175b0de7cc64566", + "sha256:61014615c1274df8da5991a1e5da85a3ccb00c2d4701ac6f3383afd3ca47ab0a", + "sha256:64a956dff37080b352c1c40b2966b09defb014347043e740d420ca1eb7c9b908", + "sha256:668ddddc9f3075af019f784456267eb504cb77c2c4bd46cc8402d723b4d200bf", + "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458", + "sha256:6f173bbfe976105aaa890b712d1759de339d8a7cef2fc0a1714cc1a1e1c47f64", + "sha256:71ebe3fe42656a2328ab08933d420df5f3ab121772eef78f2dc63624157f0ed9", + "sha256:730178f476ef03d3d4d255f0c9fa186cb1d13fd33ffe89d39f2cda4da90ceb71", + "sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b", + "sha256:7f30241577d2fef2602113b70ef7231bf4c69a97e04693bde08ddab913ba0ce5", + "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037", + "sha256:82de5da8c8893056603ac2d6a89eb8b4df49abf1a7c19d536984c8dd63f481d5", + "sha256:83be47aa4e35b87c106fc0c84c0fc069d3f9b9b06d3c494cd404ec6747544894", + "sha256:8638f99dca15b9dff328fb6273e09f03d1c50d9b6512f3b65a4154588a7595fe", + "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757", + "sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3", + "sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976", + "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6", + "sha256:916cd229b0150129d645ec51614d38129ee74c03293a9f3f17537be0029a9641", + "sha256:9532ea0b26a401264b1365146c440a6d78269ed41f83f23818d4b79497aeabe7", + "sha256:967a8eec513dbe08330f10137eacb427b2ca52118769e82ebcfcab0fba92a649", + "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120", + "sha256:9979643ffc69b799d50d3a7b72b5164a2e97e117009d7af6dfdd2ab906cb72cd", + "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40", + "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e", + "sha256:9e64e948ab41411958670f1093c0a57acfdc3bee5cf5b935671bbd5313bcf229", + "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c", + "sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7", + "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111", + "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654", + "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f", + "sha256:a461959ead5b38e2581998700b26346b78cd98540b5524796c175722f18b0294", + "sha256:a75801768bbe65499495660b777e018cbe90c7980f07f8aa57d6be79ea6f71da", + "sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f", + "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7", + "sha256:b0313e8b923b3814d1c4a524c93dfecea5f39fa95601f6a9b1ac96cd66f89ea0", + "sha256:b23c11c2c9e6d4e7300c92e022046ad09b91fd00e36e83c44483df4afa990073", + "sha256:b303b194c2e6f171cfddf8b8ba30baefccf03d36a4d9cab7fd0bb68ba476a3d7", + "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11", + "sha256:bd39c92e4c8f6cbf5f08257d6360123af72af9f4da75a690bef50da77362d25f", + "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27", + "sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70", + "sha256:c66d8ccbc902ad548312b96ed8d5d266d0d2c6d006fd0f66323e9d8f2dd49be7", + "sha256:cd6a55f65241c551eb53f8cf4d2f4af33512c39da5d9777694e9d9c60872f519", + "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5", + "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180", + "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f", + "sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee", + "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18", + "sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815", + "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e", + "sha256:e861ad82892408487be144906a368ddbe2dc6297074ade2d892341b35c59844a", + "sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7", + "sha256:ed5f6d2edbf349bd8d630e81f474d33d6ae5d07760c44d33cd808e2f5c8f4ae6", + "sha256:ef2e4e91fb3945769e14ce82ed53007195e616a63aa43b40fb7ebaaf907c8d4c", + "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc", + "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8", + "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98", + "sha256:f35c7070eeec2cdaac6fd3fe245226ed2a6292d3ee8c938e5bb645b434c5f256", + "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5", + "sha256:f6f1324db48f001c2ca26a25fa25af60711e09b9aaf4b28488602776f4f9a744", + "sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723", + "sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277", + "sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5" + ], + "markers": "python_version >= '3.9'", + "version": "==0.3.1" + }, + "pycparser": { + "hashes": [ + "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", + "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc" + ], + "markers": "python_version >= '3.8'", + "version": "==2.22" + }, + "pydantic": { + "hashes": [ + "sha256:442557d2910e75c991c39f4b4ab18963d57b9b55122c8b2a9cd176d8c29ce968", + "sha256:5b6c415eee9f8123a14d859be0c84363fec6b1feb6b688d6435801230b56e0b8" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==2.11.1" + }, + "pydantic-core": { + "hashes": [ + "sha256:024d136ae44d233e6322027bbf356712b3940bee816e6c948ce4b90f18471b3d", + "sha256:0310524c833d91403c960b8a3cf9f46c282eadd6afd276c8c5edc617bd705dc9", + "sha256:07b4ced28fccae3f00626eaa0c4001aa9ec140a29501770a88dbbb0966019a86", + "sha256:085d8985b1c1e48ef271e98a658f562f29d89bda98bf120502283efbc87313eb", + "sha256:0a98257451164666afafc7cbf5fb00d613e33f7e7ebb322fbcd99345695a9a61", + "sha256:0bcf0bab28995d483f6c8d7db25e0d05c3efa5cebfd7f56474359e7137f39856", + "sha256:138d31e3f90087f42aa6286fb640f3c7a8eb7bdae829418265e7e7474bd2574b", + "sha256:14229c1504287533dbf6b1fc56f752ce2b4e9694022ae7509631ce346158de11", + "sha256:1583539533160186ac546b49f5cde9ffc928062c96920f58bd95de32ffd7bffd", + "sha256:175ab598fb457a9aee63206a1993874badf3ed9a456e0654273e56f00747bbd6", + "sha256:1a69b7596c6603afd049ce7f3835bcf57dd3892fc7279f0ddf987bebed8caa5a", + "sha256:1a73be93ecef45786d7d95b0c5e9b294faf35629d03d5b145b09b81258c7cd6d", + "sha256:1b1262b912435a501fa04cd213720609e2cefa723a07c92017d18693e69bf00b", + "sha256:1b2ea72dea0825949a045fa4071f6d5b3d7620d2a208335207793cf29c5a182d", + "sha256:20d4275f3c4659d92048c70797e5fdc396c6e4446caf517ba5cad2db60cd39d3", + "sha256:23c3e77bf8a7317612e5c26a3b084c7edeb9552d645742a54a5867635b4f2453", + "sha256:26a4ea04195638dcd8c53dadb545d70badba51735b1594810e9768c2c0b4a5da", + "sha256:26bc7367c0961dec292244ef2549afa396e72e28cc24706210bd44d947582c59", + "sha256:2a0147c0bef783fd9abc9f016d66edb6cac466dc54a17ec5f5ada08ff65caf5d", + "sha256:2c0afd34f928383e3fd25740f2050dbac9d077e7ba5adbaa2227f4d4f3c8da5c", + "sha256:30369e54d6d0113d2aa5aee7a90d17f225c13d87902ace8fcd7bbf99b19124db", + "sha256:31860fbda80d8f6828e84b4a4d129fd9c4535996b8249cfb8c720dc2a1a00bb8", + "sha256:34e7fb3abe375b5c4e64fab75733d605dda0f59827752debc99c17cb2d5f3276", + "sha256:40eb8af662ba409c3cbf4a8150ad32ae73514cd7cb1f1a2113af39763dd616b3", + "sha256:41d698dcbe12b60661f0632b543dbb119e6ba088103b364ff65e951610cb7ce0", + "sha256:4726f1f3f42d6a25678c67da3f0b10f148f5655813c5aca54b0d1742ba821b8f", + "sha256:4927564be53239a87770a5f86bdc272b8d1fbb87ab7783ad70255b4ab01aa25b", + "sha256:4b6d77c75a57f041c5ee915ff0b0bb58eabb78728b69ed967bc5b780e8f701b8", + "sha256:4d9149e7528af8bbd76cc055967e6e04617dcb2a2afdaa3dea899406c5521faa", + "sha256:4deac83a8cc1d09e40683be0bc6d1fa4cde8df0a9bf0cda5693f9b0569ac01b6", + "sha256:4f1ab031feb8676f6bd7c85abec86e2935850bf19b84432c64e3e239bffeb1ec", + "sha256:502ed542e0d958bd12e7c3e9a015bce57deaf50eaa8c2e1c439b512cb9db1e3a", + "sha256:5461934e895968655225dfa8b3be79e7e927e95d4bd6c2d40edd2fa7052e71b6", + "sha256:58c1151827eef98b83d49b6ca6065575876a02d2211f259fb1a6b7757bd24dd8", + "sha256:5bdd36b362f419c78d09630cbaebc64913f66f62bda6d42d5fbb08da8cc4f181", + "sha256:5bf637300ff35d4f59c006fff201c510b2b5e745b07125458a5389af3c0dff8c", + "sha256:5bf68bb859799e9cec3d9dd8323c40c00a254aabb56fe08f907e437005932f2b", + "sha256:5d8dc9f63a26f7259b57f46a7aab5af86b2ad6fbe48487500bb1f4b27e051e4c", + "sha256:5f36afd0d56a6c42cf4e8465b6441cf546ed69d3a4ec92724cc9c8c61bd6ecf4", + "sha256:5f72914cfd1d0176e58ddc05c7a47674ef4222c8253bf70322923e73e14a4ac3", + "sha256:6291797cad239285275558e0a27872da735b05c75d5237bbade8736f80e4c225", + "sha256:62c151ce3d59ed56ebd7ce9ce5986a409a85db697d25fc232f8e81f195aa39a1", + "sha256:635702b2fed997e0ac256b2cfbdb4dd0bf7c56b5d8fba8ef03489c03b3eb40e2", + "sha256:64672fa888595a959cfeff957a654e947e65bbe1d7d82f550417cbd6898a1d6b", + "sha256:68504959253303d3ae9406b634997a2123a0b0c1da86459abbd0ffc921695eac", + "sha256:69297418ad644d521ea3e1aa2e14a2a422726167e9ad22b89e8f1130d68e1e9a", + "sha256:6c32a40712e3662bebe524abe8abb757f2fa2000028d64cc5a1006016c06af43", + "sha256:715c62af74c236bf386825c0fdfa08d092ab0f191eb5b4580d11c3189af9d330", + "sha256:71dffba8fe9ddff628c68f3abd845e91b028361d43c5f8e7b3f8b91d7d85413e", + "sha256:7419241e17c7fbe5074ba79143d5523270e04f86f1b3a0dff8df490f84c8273a", + "sha256:759871f00e26ad3709efc773ac37b4d571de065f9dfb1778012908bcc36b3a73", + "sha256:7a25493320203005d2a4dac76d1b7d953cb49bce6d459d9ae38e30dd9f29bc9c", + "sha256:7b79af799630af263eca9ec87db519426d8c9b3be35016eddad1832bac812d87", + "sha256:7c9c84749f5787781c1c45bb99f433402e484e515b40675a5d121ea14711cf61", + "sha256:7da333f21cd9df51d5731513a6d39319892947604924ddf2e24a4612975fb936", + "sha256:82a4eba92b7ca8af1b7d5ef5f3d9647eee94d1f74d21ca7c21e3a2b92e008358", + "sha256:89670d7a0045acb52be0566df5bc8b114ac967c662c06cf5e0c606e4aadc964b", + "sha256:8a1d581e8cdbb857b0e0e81df98603376c1a5c34dc5e54039dcc00f043df81e7", + "sha256:8ec86b5baa36f0a0bfb37db86c7d52652f8e8aa076ab745ef7725784183c3fdd", + "sha256:91301a0980a1d4530d4ba7e6a739ca1a6b31341252cb709948e0aca0860ce0ae", + "sha256:918f2013d7eadea1d88d1a35fd4a1e16aaf90343eb446f91cb091ce7f9b431a2", + "sha256:9cb2390355ba084c1ad49485d18449b4242da344dea3e0fe10babd1f0db7dcfc", + "sha256:9ee65f0cc652261744fd07f2c6e6901c914aa6c5ff4dcfaf1136bc394d0dd26b", + "sha256:a608a75846804271cf9c83e40bbb4dab2ac614d33c6fd5b0c6187f53f5c593ef", + "sha256:a66d931ea2c1464b738ace44b7334ab32a2fd50be023d863935eb00f42be1778", + "sha256:a7a7f2a3f628d2f7ef11cb6188bcf0b9e1558151d511b974dfea10a49afe192b", + "sha256:abaeec1be6ed535a5d7ffc2e6c390083c425832b20efd621562fbb5bff6dc518", + "sha256:abfa44cf2f7f7d7a199be6c6ec141c9024063205545aa09304349781b9a125e6", + "sha256:ade5dbcf8d9ef8f4b28e682d0b29f3008df9842bb5ac48ac2c17bc55771cc976", + "sha256:ae62032ef513fe6281ef0009e30838a01057b832dc265da32c10469622613885", + "sha256:aec79acc183865bad120b0190afac467c20b15289050648b876b07777e67ea48", + "sha256:b716294e721d8060908dbebe32639b01bfe61b15f9f57bcc18ca9a0e00d9520b", + "sha256:b9ec80eb5a5f45a2211793f1c4aeddff0c3761d1c70d684965c1807e923a588b", + "sha256:ba95691cf25f63df53c1d342413b41bd7762d9acb425df8858d7efa616c0870e", + "sha256:bccc06fa0372151f37f6b69834181aa9eb57cf8665ed36405fb45fbf6cac3bae", + "sha256:c860773a0f205926172c6644c394e02c25421dc9a456deff16f64c0e299487d3", + "sha256:ca1103d70306489e3d006b0f79db8ca5dd3c977f6f13b2c59ff745249431a606", + "sha256:ce72d46eb201ca43994303025bd54d8a35a3fc2a3495fac653d6eb7205ce04f4", + "sha256:d20cbb9d3e95114325780f3cfe990f3ecae24de7a2d75f978783878cce2ad585", + "sha256:dcfebee69cd5e1c0b76a17e17e347c84b00acebb8dd8edb22d4a03e88e82a207", + "sha256:e1c69aa459f5609dec2fa0652d495353accf3eda5bdb18782bc5a2ae45c9273a", + "sha256:e2762c568596332fdab56b07060c8ab8362c56cf2a339ee54e491cd503612c50", + "sha256:e37f10f6d4bc67c58fbd727108ae1d8b92b397355e68519f1e4a7babb1473442", + "sha256:e790954b5093dff1e3a9a2523fddc4e79722d6f07993b4cd5547825c3cbf97b5", + "sha256:e81a295adccf73477220e15ff79235ca9dcbcee4be459eb9d4ce9a2763b8386c", + "sha256:e925819a98318d17251776bd3d6aa9f3ff77b965762155bdad15d1a9265c4cfd", + "sha256:ea30239c148b6ef41364c6f51d103c2988965b643d62e10b233b5efdca8c0099", + "sha256:eabf946a4739b5237f4f56d77fa6668263bc466d06a8036c055587c130a46f7b", + "sha256:ecb158fb9b9091b515213bed3061eb7deb1d3b4e02327c27a0ea714ff46b0760", + "sha256:ecc6d02d69b54a2eb83ebcc6f29df04957f734bcf309d346b4f83354d8376862", + "sha256:eddb18a00bbb855325db27b4c2a89a4ba491cd6a0bd6d852b225172a1f54b36c", + "sha256:f00e8b59e1fc8f09d05594aa7d2b726f1b277ca6155fc84c0396db1b373c4555", + "sha256:f1fb026c575e16f673c61c7b86144517705865173f3d0907040ac30c4f9f5915", + "sha256:f200b2f20856b5a6c3a35f0d4e344019f805e363416e609e9b47c552d35fd5ea", + "sha256:f225f3a3995dbbc26affc191d0443c6c4aa71b83358fd4c2b7d63e2f6f0336f9", + "sha256:f22dab23cdbce2005f26a8f0c71698457861f97fc6318c75814a50c75e87d025", + "sha256:f3eb479354c62067afa62f53bb387827bee2f75c9c79ef25eef6ab84d4b1ae3b", + "sha256:fc53e05c16697ff0c1c7c2b98e45e131d4bfb78068fffff92a82d169cbb4c7b7", + "sha256:ff48a55be9da6930254565ff5238d71d5e9cd8c5487a191cb85df3bdb8c77365" + ], + "markers": "python_version >= '3.9'", + "version": "==2.33.0" + }, + "pyjwt": { + "hashes": [ + "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", + "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb" + ], + "markers": "python_version >= '3.9'", + "version": "==2.10.1" + }, + "pytest": { + "hashes": [ + "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", + "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==8.3.5" + }, + "python-dateutil": { + "hashes": [ + "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", + "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==2.9.0.post0" + }, + "python-dotenv": { + "hashes": [ + "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5", + "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==1.1.0" + }, + "pytz": { + "hashes": [ + "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", + "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00" + ], + "version": "==2025.2" + }, + "pyyaml": { + "hashes": [ + "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff", + "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", + "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", + "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e", + "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", + "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", + "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", + "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", + "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", + "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", + "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a", + "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", + "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", + "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8", + "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", + "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19", + "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", + "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a", + "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", + "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", + "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", + "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631", + "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", + "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", + "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", + "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", + "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", + "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", + "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", + "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706", + "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", + "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", + "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", + "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083", + "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", + "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", + "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", + "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", + "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725", + "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", + "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", + "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", + "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", + "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", + "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5", + "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d", + "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", + "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", + "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", + "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", + "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", + "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", + "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4" + ], + "markers": "python_version >= '3.8'", + "version": "==6.0.2" + }, + "qh3": { + "hashes": [ + "sha256:0107f576a0524421e1b0f9e0437d2881a1835b1b6105eadd7ea0c1c9bf2da917", + "sha256:06159707895c606a321ccb5630347a2d2a44ee584f22945e5b22b0ad34f21ec8", + "sha256:06255835f99ea1af9e5d358056011686fcccbafaba893454027daa62ab6f701f", + "sha256:09b2305a954e61a9ed8b46a7a45f54e8d95ef870a47d5fd1836e14c7600d3b92", + "sha256:0a51dcffae03a89ddbab1884860569e0d1dbbf95deee47457c1fd29b4ac8d220", + "sha256:0a5d1cd881b7d43481ad60262cf3390a555e0e51751bc2af70ba4a612487e797", + "sha256:0e1c273660f9b8511c22d0b082137556e46d6a7eccf132bd82f95d29f90488b2", + "sha256:0e540cc7e7da65da30381bdb73a789a8635c6aaef98688d904eee3bc587654a5", + "sha256:10ed818f47dc522350a12641e8f2bea19ff824f8ce373c23a8e594b3481fd7a4", + "sha256:195b4ad58cf5a8da218e2368d34f47628c14581f3cc9863fc0406b32e137f3a6", + "sha256:1a80d07249c7ccbaa57bb9015b5ead0ead7ac1940cd5483548dfe56db99ce7a4", + "sha256:1cf0b18823801078d2294a0356abc2be34b4a224bea863a87029c1c97d6c34e0", + "sha256:1fac2ab4b8a2e50894b54a19416cd363defe0fb33f52754686ea58999f98dfc5", + "sha256:205cdaea9da8881b31b76eb6da5b88c9558ba96bc16a3ecf11333098ac7f3859", + "sha256:2294e78bcc40728a3a772df0f8ecf8b8756616d06dd001029016876aa4e5c9de", + "sha256:235236ab195d34e7cd18d186e46b7a4f8aceafe246bf36b42913f72627ded414", + "sha256:25eef1f2be50d79d23e01a567c719e46e4892518a5ccc96685fcb4746357320b", + "sha256:2ae147b756c3adf59699756feb9e07d4a69674f57b4e13d6c25f9d1dc3c8707c", + "sha256:2c9cdd7ea49c79b671e7de35dad61d2aa91920e2498d0c6dfa932d5e05070a5e", + "sha256:2dc9f269d7316b0a44e61ae7a11ffd8daa800b3f5ba773de2e9d8c4ee636a896", + "sha256:2f94d69edb0070ef4ec414deabfc2369aa2100b11bf4a4f2f393f2c28c4bc7ba", + "sha256:311da331e31c55afc3f4f4f2ba9d07a1d700ffb7db5aa4f58300b9f56f2523dc", + "sha256:3578844a9ff4c342a409d010f909782afc52a31680876f7fab65bf133aa3f4db", + "sha256:4032c2898b4c0ff7a25cf7d68c3b1f2abdcaf4f25cc8b6802a941a842f9a95b6", + "sha256:40abd150eddfa0884c139bd281e87ff920d4cd52d685fc4ef25ddcc77ff7a220", + "sha256:43e32602651d07f8a0860ba0a45d8c8fe9ccd537030e7632d1258f7b84881416", + "sha256:45a21d25fe17168f4db09fcaabee5dd171763ad1bd8753c257297837f5ba9197", + "sha256:45bfbb126e31ecf63ef74c249d38d07e149c0663b4a191cf9e2e3445a80758d5", + "sha256:4745667c9956bcfd74ff677edd4c73d6cb578b6b47c5fb3d246aaa223dd6a004", + "sha256:4936a5d8915866b4f08ab18018f41ed93a2593788ad0a80796aada2e23d402e5", + "sha256:4a45a9698b3bcae05f91356f50df8dab3c3fdef3187548b9c4a396a6eb6760b5", + "sha256:4b84c1ca283278e2e22a3b9e2ce8ea55c0a1797d6e86255640a1b6293fe18b2a", + "sha256:4dc88397ed7f3b46f542f87e19050a7f82267225009ce65651ac44cb55b204b1", + "sha256:4e10a872077373c71d7938fb1a7ae0561f2e79aad2b1b5323dbb6325a389041a", + "sha256:4f1b5dcb4d9da5b441e0b14216b816be7b5b5d080c2ccb957adf84266411ff6b", + "sha256:50d25182d598312197f500a65acebf5430391764e6ffcdb73d96e80c5dd06fc7", + "sha256:529c5b9e27fced27befce26e2699eca3110c576f6427dfbd26e30b7666b2d6d1", + "sha256:571da625b22e953731307539b44b2177f6ab13b6142d7698c0f28b9379ae1be6", + "sha256:5a9de89e2480b385a99613798d375e69a0a53d4575bd74b133307c8e83a84751", + "sha256:5bcc46cf89cb1036c2d029c01f360c82180329997a75728b20dc205f34114327", + "sha256:5dfa6238a6236f2bb3ecaac9befd23cee0bcbb9e497003fb3aef875e19325c61", + "sha256:6342b961b18037e3df8692e8914c576816a966bf29f913ee2728e7e838bde9bd", + "sha256:65e112c175a0b0328822dd0d19ead9ef1d7925359d154fb52e46b080945eef38", + "sha256:6f8a2b15c4dd58133e92f95d4312efd09b87ec15b881885629dff70e89f1e751", + "sha256:726f749444d1cc73c1bf221343dc6fdbde2541ffe30860d2d5ef6e310a1f5478", + "sha256:742f39cd807df31c21e035aec63f6f61e139a60545cffb16e8e87f61609d7cba", + "sha256:7840c18ec27aa08ecdd8ff23df348c124378c6f3edf9a0e02b16a5a4ce504c89", + "sha256:79d1de24d3c7345719af8333b64f19a8777dd50a059851bfcfa583c7109eddf2", + "sha256:7ba9303c5334d64b547483be92c4bbacd37964ff3abd0b1e8c82c63ec6f7b3ec", + "sha256:85587d9dfbd2f7f8622cf57f3c1a19cee441b5607a982cdf4c08ef38d45d5a36", + "sha256:8711b86e447e689d1b693419708b6ad64bf0c57091b94a3f65c6d4bd7cfb7d9a", + "sha256:877edc4db25309d86af07d992926394936f491cce84fce439961729552e942fe", + "sha256:8bb17669e362d3456bebd5c69abb0c26e8ab29c10894f123c715b0217aece479", + "sha256:8bb17a1e50e35a8d07cab784caea68b33f739391ccb5e3161afb9db0bde8faf4", + "sha256:8d4640a6bb3aa29797bdcf0c5bae4e86da5f2fbf84b67a7fad549fa34c19aa98", + "sha256:90697f3d9e4b3ddccfb31b40637bac6d44b39288cd57f78e51ff13e70916eccc", + "sha256:90f127f57c00b111ea3ffd95f4c12ad83efebd10310fd718d66771dd64e568f1", + "sha256:95f8f70bca1e880da7559ef38b7f1778a3b39b586fc829b8a7e989e912aa988f", + "sha256:9a60c102a01dfa8c5d737499c9a5d5e7c2b6642009c9b80b27f228ec50ce6fb0", + "sha256:9c7f1821ec749ea29bd9d079e4f13a552371731d0b664962a60cbb2f31d571b5", + "sha256:9f81ee66fadedbfd4d5c49e64151db3b6f353b041ddf5ab0b151340a4467e038", + "sha256:9f8e530e29e1afe9231b1100645aa5cc240b823c0e4162f70046270a3559400c", + "sha256:a0c647db3f156e8c94a63c1fa0fc4f2ce8b70f0eb12f2726e6c19493198b1e99", + "sha256:a0cda60607ab4ffc14fa8425ea7c9ae78ad60923c3c8be94d19c14f83198b1cf", + "sha256:a5bff397d49da302b5afbdf244dd7ca480a827f5de856d957df05dfd7e73b490", + "sha256:a94bd391b955b24948b2986845f9c6ad8abc709c2d57d0515daeacf16a2a3a4c", + "sha256:ad4572bd37c1a6a7a12ff47da4f3578a13e3c8ee85a1f02d2435dfdc6d9ed394", + "sha256:b13b7de1686f1b5da7526dc4f0de410a685f5cb654e984b09ddd8d14be6fffc0", + "sha256:b1724c43c5c0d08b68c3407467e07794b9adf153b6de8300d61883e8d95fa640", + "sha256:b27d29cb718df9ed006f8c75a89dd90534437761b2477dc7a4145bde0daa60fc", + "sha256:b3afa3a78b0f011ff5a09dea37d74fcea9269b318d2828f18b2fbf9dde625a71", + "sha256:bd6a61007e678284178bb00931af59f686a2a55797505e0886241050ec5c243c", + "sha256:befeca45fd7787c08a3286fb72caaccfa4c3962760981dfeb0992f5ba9be5cb2", + "sha256:c2d31b8233f406e00f180e221986f436765c3bb06839e72c898feca31fef1d4e", + "sha256:c3e2518ce442b70314892a594e21157deb13fbc436f77ad6555439cfd9912035", + "sha256:c8d5fbee607db24ef6c7b0bd08c21226d10782df4149b9d6f1f1516c7c85092b", + "sha256:cc2cc804998e852bdffcc87e8d008043ffa85efe6d3516d9784714d709f14774", + "sha256:cd8a681107c6118f60a0714671cec7b301533f25984a5c898e547a33a01af75c", + "sha256:d056831ebf3fa8116672ae970ad19a9f5f1427a2217cd0e01c1eaac5f8222668", + "sha256:d5ac3e8e3f66ff88819205dbc67e6f771cbb80529325ca9f3bc03fa00c5c83aa", + "sha256:dba15ca2da7859300ae79d2ea2eb8bb0eb827b93a2f104981783add16a97058a", + "sha256:de6cabb89248b60ea9bb9d7848de78dfb824abfdc15f52448a8efe821dd7d559", + "sha256:e02f6d1cc2005b847176dd8770fdfe90f04a34a3f094b79a8369bde0aa8f6a04", + "sha256:e514bd4b27c953c46485b2be0ecd2421aa196c5a0cd7d67f1ccec16a56b00507", + "sha256:e53464124379764f982a69f5ab34d0d5c527e8ac1e788db86a25f79045e5b18d", + "sha256:e9cf59660a543bef86de457c671c1d78ad2d88c53bb9eb3fce6ce0cb9729d490", + "sha256:edfc1bc732bc5e62fdaea268a541eb442d5e04927cb27dfd8e92ef07213658d2", + "sha256:ee8e7a66be70a18f5e0558f2f6a89e39c608f87b027234848f76a6699975dcf8", + "sha256:effb7072efef7dca10a98c24be0cc882a40edc78e293b41f5b6dc7f1952215ed", + "sha256:f04e4ee7e3c123ac7f21cee6f819cfa9b5a376e656257dfa7a4d133b3590bdd9", + "sha256:f0531c7abe963affebd3fb6cf9ea87eb8c63a0240535d81d0223945bd41be254", + "sha256:f5afd1c216315682a6bbf606618de0e3817ed8eeafc27ad7660ef2f581d4fd46", + "sha256:f93d3c74e00268ac6042c080653a34d0f0e8903697fd8dc480c1e3de81c90faf", + "sha256:fbc4e6452cc48c3e1398fe930349e2ec9ad76a2c00e729f3e797700c2f0646e6", + "sha256:fc73fc2889a01a43737c7a7c7fb9ee13aa56065b22abbed0e787cc58a3747808" + ], + "markers": "python_version >= '3.7'", + "version": "==1.4.2" + }, + "referencing": { + "hashes": [ + "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", + "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0" + ], + "markers": "python_version >= '3.9'", + "version": "==0.36.2" + }, + "requests": { + "hashes": [ + "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", + "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" + ], + "markers": "python_version >= '3.8'", + "version": "==2.32.3" + }, + "rpds-py": { + "hashes": [ + "sha256:0047638c3aa0dbcd0ab99ed1e549bbf0e142c9ecc173b6492868432d8989a046", + "sha256:006f4342fe729a368c6df36578d7a348c7c716be1da0a1a0f86e3021f8e98724", + "sha256:041f00419e1da7a03c46042453598479f45be3d787eb837af382bfc169c0db33", + "sha256:04ecf5c1ff4d589987b4d9882872f80ba13da7d42427234fce8f22efb43133bc", + "sha256:04f2b712a2206e13800a8136b07aaedc23af3facab84918e7aa89e4be0260032", + "sha256:0aeb3329c1721c43c58cae274d7d2ca85c1690d89485d9c63a006cb79a85771a", + "sha256:0e374c0ce0ca82e5b67cd61fb964077d40ec177dd2c4eda67dba130de09085c7", + "sha256:0f00c16e089282ad68a3820fd0c831c35d3194b7cdc31d6e469511d9bffc535c", + "sha256:174e46569968ddbbeb8a806d9922f17cd2b524aa753b468f35b97ff9c19cb718", + "sha256:1b221c2457d92a1fb3c97bee9095c874144d196f47c038462ae6e4a14436f7bc", + "sha256:208b3a70a98cf3710e97cabdc308a51cd4f28aa6e7bb11de3d56cd8b74bab98d", + "sha256:20f2712bd1cc26a3cc16c5a1bfee9ed1abc33d4cdf1aabd297fe0eb724df4272", + "sha256:24795c099453e3721fda5d8ddd45f5dfcc8e5a547ce7b8e9da06fecc3832e26f", + "sha256:2a0f156e9509cee987283abd2296ec816225145a13ed0391df8f71bf1d789e2d", + "sha256:2b2356688e5d958c4d5cb964af865bea84db29971d3e563fb78e46e20fe1848b", + "sha256:2c13777ecdbbba2077670285dd1fe50828c8742f6a4119dbef6f83ea13ad10fb", + "sha256:2d3ee4615df36ab8eb16c2507b11e764dcc11fd350bbf4da16d09cda11fcedef", + "sha256:2d53747da70a4e4b17f559569d5f9506420966083a31c5fbd84e764461c4444b", + "sha256:32bab0a56eac685828e00cc2f5d1200c548f8bc11f2e44abf311d6b548ce2e45", + "sha256:34d90ad8c045df9a4259c47d2e16a3f21fdb396665c94520dbfe8766e62187a4", + "sha256:369d9c6d4c714e36d4a03957b4783217a3ccd1e222cdd67d464a3a479fc17796", + "sha256:3a55fc10fdcbf1a4bd3c018eea422c52cf08700cf99c28b5cb10fe97ab77a0d3", + "sha256:3d2d8e4508e15fc05b31285c4b00ddf2e0eb94259c2dc896771966a163122a0c", + "sha256:3fab5f4a2c64a8fb64fc13b3d139848817a64d467dd6ed60dcdd6b479e7febc9", + "sha256:43dba99f00f1d37b2a0265a259592d05fcc8e7c19d140fe51c6e6f16faabeb1f", + "sha256:44d51febb7a114293ffd56c6cf4736cb31cd68c0fddd6aa303ed09ea5a48e029", + "sha256:493fe54318bed7d124ce272fc36adbf59d46729659b2c792e87c3b95649cdee9", + "sha256:4b28e5122829181de1898c2c97f81c0b3246d49f585f22743a1246420bb8d399", + "sha256:4cd031e63bc5f05bdcda120646a0d32f6d729486d0067f09d79c8db5368f4586", + "sha256:528927e63a70b4d5f3f5ccc1fa988a35456eb5d15f804d276709c33fc2f19bda", + "sha256:564c96b6076a98215af52f55efa90d8419cc2ef45d99e314fddefe816bc24f91", + "sha256:5db385bacd0c43f24be92b60c857cf760b7f10d8234f4bd4be67b5b20a7c0b6b", + "sha256:5ef877fa3bbfb40b388a5ae1cb00636a624690dcb9a29a65267054c9ea86d88a", + "sha256:5f6e3cec44ba05ee5cbdebe92d052f69b63ae792e7d05f1020ac5e964394080c", + "sha256:5fc13b44de6419d1e7a7e592a4885b323fbc2f46e1f22151e3a8ed3b8b920405", + "sha256:60748789e028d2a46fc1c70750454f83c6bdd0d05db50f5ae83e2db500b34da5", + "sha256:60d9b630c8025b9458a9d114e3af579a2c54bd32df601c4581bd054e85258143", + "sha256:619ca56a5468f933d940e1bf431c6f4e13bef8e688698b067ae68eb4f9b30e3a", + "sha256:630d3d8ea77eabd6cbcd2ea712e1c5cecb5b558d39547ac988351195db433f6c", + "sha256:63981feca3f110ed132fd217bf7768ee8ed738a55549883628ee3da75bb9cb78", + "sha256:66420986c9afff67ef0c5d1e4cdc2d0e5262f53ad11e4f90e5e22448df485bf0", + "sha256:675269d407a257b8c00a6b58205b72eec8231656506c56fd429d924ca00bb350", + "sha256:6a4a535013aeeef13c5532f802708cecae8d66c282babb5cd916379b72110cf7", + "sha256:6a727fd083009bc83eb83d6950f0c32b3c94c8b80a9b667c87f4bd1274ca30ba", + "sha256:6e1daf5bf6c2be39654beae83ee6b9a12347cb5aced9a29eecf12a2d25fff664", + "sha256:6eea559077d29486c68218178ea946263b87f1c41ae7f996b1f30a983c476a5a", + "sha256:75a810b7664c17f24bf2ffd7f92416c00ec84b49bb68e6a0d93e542406336b56", + "sha256:772cc1b2cd963e7e17e6cc55fe0371fb9c704d63e44cacec7b9b7f523b78919e", + "sha256:78884d155fd15d9f64f5d6124b486f3d3f7fd7cd71a78e9670a0f6f6ca06fb2d", + "sha256:79e8d804c2ccd618417e96720ad5cd076a86fa3f8cb310ea386a3e6229bae7d1", + "sha256:7e80d375134ddb04231a53800503752093dbb65dad8dabacce2c84cccc78e964", + "sha256:8097b3422d020ff1c44effc40ae58e67d93e60d540a65649d2cdaf9466030791", + "sha256:8205ee14463248d3349131bb8099efe15cd3ce83b8ef3ace63c7e976998e7124", + "sha256:8212ff58ac6dfde49946bea57474a386cca3f7706fc72c25b772b9ca4af6b79e", + "sha256:823e74ab6fbaa028ec89615ff6acb409e90ff45580c45920d4dfdddb069f2120", + "sha256:84e0566f15cf4d769dade9b366b7b87c959be472c92dffb70462dd0844d7cbad", + "sha256:896c41007931217a343eff197c34513c154267636c8056fb409eafd494c3dcdc", + "sha256:8aa362811ccdc1f8dadcc916c6d47e554169ab79559319ae9fae7d7752d0d60c", + "sha256:8b3b397eefecec8e8e39fa65c630ef70a24b09141a6f9fc17b3c3a50bed6b50e", + "sha256:8ebc7e65ca4b111d928b669713865f021b7773350eeac4a31d3e70144297baba", + "sha256:9168764133fd919f8dcca2ead66de0105f4ef5659cbb4fa044f7014bed9a1797", + "sha256:921ae54f9ecba3b6325df425cf72c074cd469dea843fb5743a26ca7fb2ccb149", + "sha256:92558d37d872e808944c3c96d0423b8604879a3d1c86fdad508d7ed91ea547d5", + "sha256:951cc481c0c395c4a08639a469d53b7d4afa252529a085418b82a6b43c45c240", + "sha256:998c01b8e71cf051c28f5d6f1187abbdf5cf45fc0efce5da6c06447cba997034", + "sha256:9abc80fe8c1f87218db116016de575a7998ab1629078c90840e8d11ab423ee25", + "sha256:9be4f99bee42ac107870c61dfdb294d912bf81c3c6d45538aad7aecab468b6b7", + "sha256:9c39438c55983d48f4bb3487734d040e22dad200dab22c41e331cee145e7a50d", + "sha256:9d7e8ce990ae17dda686f7e82fd41a055c668e13ddcf058e7fb5e9da20b57793", + "sha256:9ea7f4174d2e4194289cb0c4e172d83e79a6404297ff95f2875cf9ac9bced8ba", + "sha256:a18fc371e900a21d7392517c6f60fe859e802547309e94313cd8181ad9db004d", + "sha256:a36b452abbf29f68527cf52e181fced56685731c86b52e852053e38d8b60bc8d", + "sha256:a5b66d1b201cc71bc3081bc2f1fc36b0c1f268b773e03bbc39066651b9e18391", + "sha256:a824d2c7a703ba6daaca848f9c3d5cb93af0505be505de70e7e66829affd676e", + "sha256:a88c0d17d039333a41d9bf4616bd062f0bd7aa0edeb6cafe00a2fc2a804e944f", + "sha256:aa6800adc8204ce898c8a424303969b7aa6a5e4ad2789c13f8648739830323b7", + "sha256:aad911555286884be1e427ef0dc0ba3929e6821cbeca2194b13dc415a462c7fd", + "sha256:afc6e35f344490faa8276b5f2f7cbf71f88bc2cda4328e00553bd451728c571f", + "sha256:b9a4df06c35465ef4d81799999bba810c68d29972bf1c31db61bfdb81dd9d5bb", + "sha256:bb2954155bb8f63bb19d56d80e5e5320b61d71084617ed89efedb861a684baea", + "sha256:bbc4362e06f950c62cad3d4abf1191021b2ffaf0b31ac230fbf0526453eee75e", + "sha256:c0145295ca415668420ad142ee42189f78d27af806fcf1f32a18e51d47dd2052", + "sha256:c30ff468163a48535ee7e9bf21bd14c7a81147c0e58a36c1078289a8ca7af0bd", + "sha256:c347a20d79cedc0a7bd51c4d4b7dbc613ca4e65a756b5c3e57ec84bd43505b47", + "sha256:c43583ea8517ed2e780a345dd9960896afc1327e8cf3ac8239c167530397440d", + "sha256:c61a2cb0085c8783906b2f8b1f16a7e65777823c7f4d0a6aaffe26dc0d358dd9", + "sha256:c9ca89938dff18828a328af41ffdf3902405a19f4131c88e22e776a8e228c5a8", + "sha256:cc31e13ce212e14a539d430428cd365e74f8b2d534f8bc22dd4c9c55b277b875", + "sha256:cdabcd3beb2a6dca7027007473d8ef1c3b053347c76f685f5f060a00327b8b65", + "sha256:cf86f72d705fc2ef776bb7dd9e5fbba79d7e1f3e258bf9377f8204ad0fc1c51e", + "sha256:d09dc82af2d3c17e7dd17120b202a79b578d79f2b5424bda209d9966efeed114", + "sha256:d3aa13bdf38630da298f2e0d77aca967b200b8cc1473ea05248f6c5e9c9bdb44", + "sha256:d69d003296df4840bd445a5d15fa5b6ff6ac40496f956a221c4d1f6f7b4bc4d9", + "sha256:d6e109a454412ab82979c5b1b3aee0604eca4bbf9a02693bb9df027af2bfa91a", + "sha256:d8551e733626afec514b5d15befabea0dd70a343a9f23322860c4f16a9430205", + "sha256:d8754d872a5dfc3c5bf9c0e059e8107451364a30d9fd50f1f1a85c4fb9481164", + "sha256:d8f9a6e7fd5434817526815f09ea27f2746c4a51ee11bb3439065f5fc754db58", + "sha256:dbcbb6db5582ea33ce46a5d20a5793134b5365110d84df4e30b9d37c6fd40ad3", + "sha256:e0f3ef95795efcd3b2ec3fe0a5bcfb5dadf5e3996ea2117427e524d4fbf309c6", + "sha256:e13ae74a8a3a0c2f22f450f773e35f893484fcfacb00bb4344a7e0f4f48e1f97", + "sha256:e274f62cbd274359eff63e5c7e7274c913e8e09620f6a57aae66744b3df046d6", + "sha256:e838bf2bb0b91ee67bf2b889a1a841e5ecac06dd7a2b1ef4e6151e2ce155c7ae", + "sha256:e8acd55bd5b071156bae57b555f5d33697998752673b9de554dd82f5b5352727", + "sha256:e8e5ab32cf9eb3647450bc74eb201b27c185d3857276162c101c0f8c6374e098", + "sha256:ebcb786b9ff30b994d5969213a8430cbb984cdd7ea9fd6df06663194bd3c450c", + "sha256:ebea2821cdb5f9fef44933617be76185b80150632736f3d76e54829ab4a3b4d1", + "sha256:ed0ef550042a8dbcd657dfb284a8ee00f0ba269d3f2286b0493b15a5694f9fe8", + "sha256:eda5c1e2a715a4cbbca2d6d304988460942551e4e5e3b7457b50943cd741626d", + "sha256:f5c0ed12926dec1dfe7d645333ea59cf93f4d07750986a586f511c0bc61fe103", + "sha256:f6016bd950be4dcd047b7475fdf55fb1e1f59fc7403f387be0e8123e4a576d30", + "sha256:f9e0057a509e096e47c87f753136c9b10d7a91842d8042c2ee6866899a717c0d", + "sha256:fc1c892b1ec1f8cbd5da8de287577b455e388d9c328ad592eabbdcb6fc93bee5", + "sha256:fc2c1e1b00f88317d9de6b2c2b39b012ebbfe35fe5e7bef980fd2a91f6100a07", + "sha256:fd822f019ccccd75c832deb7aa040bb02d70a92eb15a2f16c7987b7ad4ee8d83" + ], + "markers": "python_version >= '3.9'", + "version": "==0.24.0" + }, + "six": { + "hashes": [ + "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", + "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==1.17.0" + }, + "tinydb": { + "hashes": [ + "sha256:f7dfc39b8d7fda7a1ca62a8dbb449ffd340a117c1206b68c50b1a481fb95181d", + "sha256:f97030ee5cbc91eeadd1d7af07ab0e48ceb04aa63d4a983adbaca4cba16e86c3" + ], + "markers": "python_version >= '3.8' and python_version < '4.0'", + "version": "==4.8.2" + }, + "tuspy": { + "hashes": [ + "sha256:156734eac5c61a046cfecd70f14119f05be92cce198eb5a1a99a664482bedb89", + "sha256:7fc5ac8fb25de37c96c90213f83a1ffdede7f48a471cb5a15a2f57846828a79a" + ], + "markers": "python_full_version >= '3.5.3'", + "version": "==1.1.0" + }, + "typing-extensions": { + "hashes": [ + "sha256:0a4ac55a5820789d87e297727d229866c9650f6521b64206413c4fbada24d95b", + "sha256:c8dd92cc0d6425a97c18fbb9d1954e5ff92c1ca881a309c45f06ebc0b79058e5" + ], + "markers": "python_version >= '3.8'", + "version": "==4.13.0" + }, + "typing-inspection": { + "hashes": [ + "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f", + "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122" + ], + "markers": "python_version >= '3.9'", + "version": "==0.4.0" + }, + "tzdata": { + "hashes": [ + "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", + "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9" + ], + "markers": "python_version >= '2'", + "version": "==2025.2" + }, + "urllib3": { + "hashes": [ + "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", + "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" + ], + "markers": "python_version >= '3.9'", + "version": "==2.3.0" + }, + "urllib3-future": { + "hashes": [ + "sha256:3adfa22c5718caee5ca69bc7f7461dc529f4396494d4d9b1db8af7c56cd3ac34", + "sha256:9cd79ce61da77b5d56681bc126f42955c2153e9c0da2f0a62bca8e0a05641f92" + ], + "markers": "python_version >= '3.7'", + "version": "==2.12.915" + }, + "verlib2": { + "hashes": [ + "sha256:2862f19528db400d130253a2b71c7c3616ee14e1d54bf6833bc0929d2cddd141", + "sha256:cf8e2be044b834a2670f2d4c20a93cfc674933c0070543a6f61d531439cca200" + ], + "markers": "python_version >= '3.6'", + "version": "==0.3.1" + }, + "wassima": { + "hashes": [ + "sha256:10508102696d5e2cf4df6942a8ae251c136a49dc32591e9c3f7dd007f5ea1c2f", + "sha256:1102836ba373912537eba891e7e5893532d4ee915ee2486e981b73f925f63c37", + "sha256:11887557464e0c3f9694fb16406bb56c1fb1566178cd04bfb5b4624fad183b31", + "sha256:12c855cc5b96a2ac32d405ab7de1563fc91be54108b4fb16b06d125d07ea892b", + "sha256:134e863b692c35afe8f5ccbe8082fa39963804e20439a4c7aa98510197034704", + "sha256:17f129f4d36591772d906bcc893b76b236363fda61b575067ddfa8250f84ad30", + "sha256:17f132ffbab294902f8740708f27fd995ea04182fe4b4fde20be563f8a010715", + "sha256:18bc78b2230c6f1f9ddbeb6ca38439fea4cc8f60836af4f3538ed259e60e5eb8", + "sha256:194c3fad38603618dec03307d10a4ece852516df56560e04fb2562506f79c175", + "sha256:1b18ec743ab98dcbfc221749026b23fc573891651342f20971e53bdbf56d28ae", + "sha256:1fa19a3652509edd18f693cd9c873d8f73c9d1624eae6c3bf93e561b18ae2766", + "sha256:24bdb1a2b90c215e11ed7ce82ed7eada339c7dca8e0366916e4e3215b3b9d8d3", + "sha256:27d518f0863788c826faf387326f3babb3ea95a0b908f5b3ad2bc1fcc3c5a37d", + "sha256:350b5854dfb3eeb95cd17723b0f3503de0c01454da5ae7d60f192be2009239eb", + "sha256:3b3a4c8ffa76147507f0c88c5cc8c76ef96ab93b81e49b288a3a0b94ebfb34af", + "sha256:3e00fa8ff1aef7d8aad2e1b957add6cba8549a42e415400bd72ff1b61dc9da9d", + "sha256:3f29045dd0a7c287f850f1dc3948632a2d2cf7dd7ec02271c5f248f058da5650", + "sha256:4a528244e4a0f9e01b8593b1c8a60ac1d80ce8b13fe079f44b38328e4be075e3", + "sha256:4c4f5ca102fd083aa2b05c65a1fd18175e3dc7a889525fd2964219ee3c51edef", + "sha256:52358d86195954816231d2aa8c2919b85075320b6d3ba5b96216985c3182bfa0", + "sha256:52f473233ec4d57322c6295e85b3912dc1fc400d6308a04bd427b863934aa74e", + "sha256:556cded582aef3089de889b5a6efcf6d87fabfec55d574fcc3a4ada21308d487", + "sha256:564eda7bf0420c8cbebe5e8efc15f1b27fdcb37ebc4c2f92b8461ca83381b223", + "sha256:57a0ab5aed596f129fd4ea7584336b11fbef25c07d1351e37a959901dea8728e", + "sha256:58f1fddd660da8c8f30f4b8460129e2f217c226cd1b54b1cabb6465881fd788a", + "sha256:597b0d8ba697f4319bc1f301ed31630ca783c9fe82d2a2434dd2f7f709c4e394", + "sha256:5b194f0de77a4ae7bcf217a3ccd10798e94ca430cec6307628098a61cd2ac230", + "sha256:5f5ee564f4b836ed1b70ddb187c817e8f6f1ffb521a636bb20676f07b523396b", + "sha256:601f96340e4c8071994a39a76d4278e8e1d087cf385781dba795c5334262d865", + "sha256:61bfa09f38c36f1b1e6e44e7af888bb8f9d739e86099082a3b45875651a425e2", + "sha256:67fd323b8ad0e057c06b153983d8c50f812aad979ac89b07ed6952c345f6da02", + "sha256:69cb51f629d118256da3d2373575190c7e30d3fa67c344dc655f6c8ab3e83f0d", + "sha256:6b1d7ceeede8d8eed48616d2d33ed23d2dff307d0b17c577eafdadafe86a0478", + "sha256:6b7d696155ddd7ab5739ac221e8854115d0d8171bbf805074d9484083de386aa", + "sha256:6d23e9483756b81850b82e8b7ed20fd23de22b50d6a678f765c660d4206b7ce9", + "sha256:7b0229fecc849234f2a2d11e948ac38a9bab02d201fa4d6ad43c143e18c1a66e", + "sha256:7c53050b670d702eed541503175bd5441fc4bdf3898714f8eac8c6ae9db548ac", + "sha256:7d65676f1fc138d1742f704bf490045571b9c2c48cab7d2c2076a52729c143e5", + "sha256:7db25328c40cd574e5a68ef6507c5af4d1fa2a44cb3c028ff9ca6b522f8faf32", + "sha256:83ce1b09e9eb2ae033c303b74ecc4f3186bbc0897db1d8cd9942153b0631b8e0", + "sha256:86c509900cbb90b7b75155c580b22af591b696fa059059bcdbd75bc74179df85", + "sha256:87f80d0075f0d396b73d41bb1626a2dd5607e0db4b74cb17e55d874fcd538971", + "sha256:8b719755d556649f2fbf226cf1ca8581ade114751df1facec96f94e75bffdb3c", + "sha256:8e739d4192758df6e5363791f527deb91c615d63020ee8965df4bcd1a217f9a5", + "sha256:923d3bf8770dfeb3d94bdfee1c5b5a081592de69766436a395e1e6203c19cf71", + "sha256:97772bb55cb47da3de49ca4b59309a9bd91ead730a7cfac1992932486fb41352", + "sha256:98bdfdf734144277132f34f770eeb6b0db2c4de87415f34b178adee766632f24", + "sha256:98f38b1b01e6f270b9279d76261d6f222b72ef06b025cbd4911b962bb6de4c98", + "sha256:99318b5ea78843e3c3e19cd56367216774674a99848f00a6f2dcf84e36039641", + "sha256:9c623ef06876d432dc8acc93ed3494d3453333d767b1b06bba1a016ea9d850c9", + "sha256:9d0f9720dfd0155432d23bcc3605fe5831cd0f586ede4f14ff6f3bebe8fb867a", + "sha256:9e79216760faac6395bee8ca4077a53a309312faba0f71982127ad8625861780", + "sha256:a470c908fd9baaecf41715ea3c30c57b530d598ae5e9de7e0bd532755e66bb1b", + "sha256:a634b9b79e059f45a56ff3ef6e7241662bc6f0e5a096ee6eed6770ea368e8278", + "sha256:acd8195a53d0e84ea95bdf15a2651c53b829a3ddead21b4a620b6a0c5e1ae2ff", + "sha256:addbd207df3718fc9d9de5b6c90a5e3fbe667830cf629186c9fdcafbb6578cb4", + "sha256:ae2aec9d55e108ae2d22fd0bda24450a6c13c116f9698b9e7ba2c6492c4fe715", + "sha256:af6b70ca9788964c5da5b59ca412b62db2ea7f2386a91c0117667bdd963e828c", + "sha256:afa7d60a9203db36a55b6f2868da90aaa829ab415a21fba7fa75678789aeb16f", + "sha256:b08c1931c44e3c034e645f3e3a7f4c47e8b0758fb8f09a52d1e880a307a1066f", + "sha256:b22e356914e606ff398c002b9925df4454c5deca9dbe55b3ba4a5c9b2365cf0f", + "sha256:b8c0f50397c51086df941b48057c82f85d9da000bf4fe6f4bc64c4f649b26a5b", + "sha256:bc068bcd79fe017866f536e0ad9424793220be34e3124476e17e6cb77a97e690", + "sha256:bc30f5a605a366acb7f301b3421508eaec3c1a515c960791bd776cb63d016302", + "sha256:c0d246b3f8a771578279eab9cfcb820dedefd3dd5dc0e34b37a337fe46271fc0", + "sha256:c0fee0a8593028bde17b57527b1ac21fea74f209b3522363e3ba0197ffaa6323", + "sha256:c139d5b103bb1f085d8918815d62ad946224a658ac1a7cc1b93dc44bd498ff9a", + "sha256:c25235cec12c0e38b4104268e312c9c2f3527ebc126d296cff69ea7aa13434dc", + "sha256:c7429d038dc383966c692e752010cbb4d5dab0e515f231aa01cd746aed9db359", + "sha256:c85cd2e64967c0dce2927ad7c62c090aae6d6b7f9e3a6b9fb91f58b890ea6adc", + "sha256:ca04984df012020dd846599b8555666c544982c2a91dc6135565e6708624eb71", + "sha256:cb7d43c07d58ba13736e70dc3e064496efeb1ed4475a28afb26b7a3b030b89df", + "sha256:d018e05cb61eed3050d45bd0c0ef9b75420899f6ae254e68e7f2ef26975098c9", + "sha256:d24d42881eb74729b34014e2e87f3a4d0419c43db309de2dff3f39118716865f", + "sha256:d6e17f218af856ca22c30d1a1ac58b19bccf768b8589eb8d6e45e1f1ff258404", + "sha256:d855d0be1759c5efc404c04977ee48a8b6260aef6441e72c10973924dbde5a73", + "sha256:dea0dcc0e50978ef73be8cb384694b71a6e64b46847ee7decad96dc85fbf650c", + "sha256:e1e9228049cf2442ac486a03a0d543c5dff3089a915a3e39ab809b22672e1d76", + "sha256:e26d052a248d5be2257d848d6078d932cc1fd4e8226639f550344d0a7a2b8813", + "sha256:ee6ccb8197936a308a4034c90a42b30b37c46b7cbda66101d439d6983f59b368", + "sha256:eea9c37b45e73cebb4670afd1779db138eeff0f84ffc0871d2fb90c04c8d3aa8", + "sha256:f195bf641276261e6bc5f79f52601850c9bdbff8af401483b4805dbff535ed30", + "sha256:f264827618400ebeab16708c8acf7870f693b03bfb4d7e95253eb9b35074db5c", + "sha256:f44ccd2eaa433ff1a10f70242dc33315fc192b81664696154127bdd66ad7d3b2", + "sha256:f7a6068d8857c403e105e62132a00e9d9d401bd0efbff7f8b5b5bc8ab768a2d8", + "sha256:f9886176fe4bf1ac008c02adb5bd103f1191799f1897777d203ee44f615325a5", + "sha256:fa1f38d5583d283b40f998e2f13471bfa952e0c423ff95ec2ec329f3e1898107", + "sha256:fa65494e7bd0e3ba33b3e5a5ab30c2b6e95d3d1762baaa56151a0861618dc261", + "sha256:fd7186e23963714bab3c9a2ab75d002078335110d2c9fc883c65cbce43717f26", + "sha256:fec32c22b521fcdeb9aa7dee4373b2d81ca2d3fc8edc532f3e189d6f4f6f1f81" + ], + "markers": "python_version >= '3.7'", + "version": "==1.2.2" + }, + "werkzeug": { + "hashes": [ + "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", + "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746" + ], + "markers": "python_version >= '3.9'", + "version": "==3.1.3" + }, + "yarl": { + "hashes": [ + "sha256:00e5a1fea0fd4f5bfa7440a47eff01d9822a65b4488f7cff83155a0f31a2ecba", + "sha256:02ddb6756f8f4517a2d5e99d8b2f272488e18dd0bfbc802f31c16c6c20f22193", + "sha256:045b8482ce9483ada4f3f23b3774f4e1bf4f23a2d5c912ed5170f68efb053318", + "sha256:09c7907c8548bcd6ab860e5f513e727c53b4a714f459b084f6580b49fa1b9cee", + "sha256:0b0cad37311123211dc91eadcb322ef4d4a66008d3e1bdc404808992260e1a0e", + "sha256:0b3c92fa08759dbf12b3a59579a4096ba9af8dd344d9a813fc7f5070d86bbab1", + "sha256:0fb2171a4486bb075316ee754c6d8382ea6eb8b399d4ec62fde2b591f879778a", + "sha256:1a74a13a4c857a84a845505fd2d68e54826a2cd01935a96efb1e9d86c728e186", + "sha256:1d407181cfa6e70077df3377938c08012d18893f9f20e92f7d2f314a437c30b1", + "sha256:1dd4bdd05407ced96fed3d7f25dbbf88d2ffb045a0db60dbc247f5b3c5c25d50", + "sha256:25b411eddcfd56a2f0cd6a384e9f4f7aa3efee14b188de13048c25b5e91f1640", + "sha256:2d06d3005e668744e11ed80812e61efd77d70bb7f03e33c1598c301eea20efbb", + "sha256:2ec9bbba33b2d00999af4631a3397d1fd78290c48e2a3e52d8dd72db3a067ac8", + "sha256:3236da9272872443f81fedc389bace88408f64f89f75d1bdb2256069a8730ccc", + "sha256:35098b24e0327fc4ebdc8ffe336cee0a87a700c24ffed13161af80124b7dc8e5", + "sha256:41f7ce59d6ee7741af71d82020346af364949314ed3d87553763a2df1829cc58", + "sha256:436c4fc0a4d66b2badc6c5fc5ef4e47bb10e4fd9bf0c79524ac719a01f3607c2", + "sha256:4891ed92157e5430874dad17b15eb1fda57627710756c27422200c52d8a4e393", + "sha256:4ac515b860c36becb81bb84b667466885096b5fc85596948548b667da3bf9f24", + "sha256:5094d9206c64181d0f6e76ebd8fb2f8fe274950a63890ee9e0ebfd58bf9d787b", + "sha256:54d6921f07555713b9300bee9c50fb46e57e2e639027089b1d795ecd9f7fa910", + "sha256:578e281c393af575879990861823ef19d66e2b1d0098414855dd367e234f5b3c", + "sha256:5a3f356548e34a70b0172d8890006c37be92995f62d95a07b4a42e90fba54272", + "sha256:602d98f2c2d929f8e697ed274fbadc09902c4025c5a9963bf4e9edfc3ab6f7ed", + "sha256:61b1a825a13bef4a5f10b1885245377d3cd0bf87cba068e1d9a88c2ae36880e1", + "sha256:61e5e68cb65ac8f547f6b5ef933f510134a6bf31bb178be428994b0cb46c2a04", + "sha256:61ee62ead9b68b9123ec24bc866cbef297dd266175d53296e2db5e7f797f902d", + "sha256:6333c5a377c8e2f5fae35e7b8f145c617b02c939d04110c76f29ee3676b5f9a5", + "sha256:6748dbf9bfa5ba1afcc7556b71cda0d7ce5f24768043a02a58846e4a443d808d", + "sha256:67a283dd2882ac98cc6318384f565bffc751ab564605959df4752d42483ad889", + "sha256:75674776d96d7b851b6498f17824ba17849d790a44d282929c42dbb77d4f17ae", + "sha256:757e81cae69244257d125ff31663249b3013b5dc0a8520d73694aed497fb195b", + "sha256:77a6e85b90a7641d2e07184df5557132a337f136250caafc9ccaa4a2a998ca2c", + "sha256:7c33dd1931a95e5d9a772d0ac5e44cac8957eaf58e3c8da8c1414de7dd27c576", + "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34", + "sha256:7e2ee16578af3b52ac2f334c3b1f92262f47e02cc6193c598502bd46f5cd1477", + "sha256:80316a8bd5109320d38eef8833ccf5f89608c9107d02d2a7f985f98ed6876990", + "sha256:82123d0c954dc58db301f5021a01854a85bf1f3bb7d12ae0c01afc414a882ca2", + "sha256:84b2deecba4a3f1a398df819151eb72d29bfeb3b69abb145a00ddc8d30094512", + "sha256:8503ad47387b8ebd39cbbbdf0bf113e17330ffd339ba1144074da24c545f0069", + "sha256:877d209b6aebeb5b16c42cbb377f5f94d9e556626b1bfff66d7b0d115be88d0a", + "sha256:8874027a53e3aea659a6d62751800cf6e63314c160fd607489ba5c2edd753cf6", + "sha256:88a19f62ff30117e706ebc9090b8ecc79aeb77d0b1f5ec10d2d27a12bc9f66d0", + "sha256:8d39d351e7faf01483cc7ff7c0213c412e38e5a340238826be7e0e4da450fdc8", + "sha256:90adb47ad432332d4f0bc28f83a5963f426ce9a1a8809f5e584e704b82685dcb", + "sha256:913829534200eb0f789d45349e55203a091f45c37a2674678744ae52fae23efa", + "sha256:93b2e109287f93db79210f86deb6b9bbb81ac32fc97236b16f7433db7fc437d8", + "sha256:9d41beda9dc97ca9ab0b9888cb71f7539124bc05df02c0cff6e5acc5a19dcc6e", + "sha256:a440a2a624683108a1b454705ecd7afc1c3438a08e890a1513d468671d90a04e", + "sha256:a4bb030cf46a434ec0225bddbebd4b89e6471814ca851abb8696170adb163985", + "sha256:a9ca04806f3be0ac6d558fffc2fdf8fcef767e0489d2684a21912cc4ed0cd1b8", + "sha256:ac1801c45cbf77b6c99242eeff4fffb5e4e73a800b5c4ad4fc0be5def634d2e1", + "sha256:ac36703a585e0929b032fbaab0707b75dc12703766d0b53486eabd5139ebadd5", + "sha256:b1771de9944d875f1b98a745bc547e684b863abf8f8287da8466cf470ef52690", + "sha256:b464c4ab4bfcb41e3bfd3f1c26600d038376c2de3297760dfe064d2cb7ea8e10", + "sha256:b4f6450109834af88cb4cc5ecddfc5380ebb9c228695afc11915a0bf82116789", + "sha256:b57f4f58099328dfb26c6a771d09fb20dbbae81d20cfb66141251ea063bd101b", + "sha256:b643562c12680b01e17239be267bc306bbc6aac1f34f6444d1bded0c5ce438ca", + "sha256:b958ddd075ddba5b09bb0be8a6d9906d2ce933aee81100db289badbeb966f54e", + "sha256:b9d60031cf568c627d028239693fd718025719c02c9f55df0a53e587aab951b5", + "sha256:ba23302c0c61a9999784e73809427c9dbedd79f66a13d84ad1b1943802eaaf59", + "sha256:ba87babd629f8af77f557b61e49e7c7cac36f22f871156b91e10a6e9d4f829e9", + "sha256:c017a3b6df3a1bd45b9fa49a0f54005e53fbcad16633870104b66fa1a30a29d8", + "sha256:c1e1cc06da1491e6734f0ea1e6294ce00792193c463350626571c287c9a704db", + "sha256:c654d5207c78e0bd6d749f6dae1dcbbfde3403ad3a4b11f3c5544d9906969dde", + "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7", + "sha256:c7d79f7d9aabd6011004e33b22bc13056a3e3fb54794d138af57f5ee9d9032cb", + "sha256:ccaa3a4b521b780a7e771cc336a2dba389a0861592bbce09a476190bb0c8b4b3", + "sha256:ccd17349166b1bee6e529b4add61727d3f55edb7babbe4069b5764c9587a8cc6", + "sha256:ce1af883b94304f493698b00d0f006d56aea98aeb49d75ec7d98cd4a777e9285", + "sha256:d0e883008013c0e4aef84dcfe2a0b172c4d23c2669412cf5b3371003941f72bb", + "sha256:d980e0325b6eddc81331d3f4551e2a333999fb176fd153e075c6d1c2530aa8a8", + "sha256:e17c9361d46a4d5addf777c6dd5eab0715a7684c2f11b88c67ac37edfba6c482", + "sha256:e2c08cc9b16f4f4bc522771d96734c7901e7ebef70c6c5c35dd0f10845270bcd", + "sha256:e35ef8683211db69ffe129a25d5634319a677570ab6b2eba4afa860f54eeaf75", + "sha256:e3b9fd71836999aad54084906f8663dffcd2a7fb5cdafd6c37713b2e72be1760", + "sha256:ef9f7768395923c3039055c14334ba4d926f3baf7b776c923c93d80195624782", + "sha256:f52a265001d830bc425f82ca9eabda94a64a4d753b07d623a9f2863fde532b53", + "sha256:f91c4803173928a25e1a55b943c81f55b8872f0018be83e3ad4938adffb77dd2", + "sha256:fbd6748e8ab9b41171bb95c6142faf068f5ef1511935a0aa07025438dd9a9bc1", + "sha256:fe57328fbc1bfd0bd0514470ac692630f3901c0ee39052ae47acd1d90a436719", + "sha256:fea09ca13323376a2fdfb353a5fa2e59f90cd18d7ca4eaa1fd31f0a8b4f91e62" + ], + "markers": "python_version >= '3.9'", + "version": "==1.18.3" + } + }, + "develop": { + "certifi": { + "hashes": [ + "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", + "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe" + ], + "markers": "python_version >= '3.6'", + "version": "==2025.1.31" + }, + "charset-normalizer": { + "hashes": [ + "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", + "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa", + "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a", + "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", + "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b", + "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", + "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", + "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", + "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", + "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", + "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", + "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", + "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", + "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", + "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", + "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", + "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", + "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", + "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", + "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", + "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e", + "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a", + "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4", + "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca", + "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", + "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", + "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", + "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", + "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", + "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", + "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", + "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", + "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", + "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", + "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", + "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd", + "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c", + "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", + "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", + "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", + "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", + "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824", + "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", + "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf", + "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487", + "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d", + "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd", + "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", + "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534", + "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", + "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", + "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", + "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd", + "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", + "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9", + "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", + "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", + "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d", + "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", + "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", + "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", + "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", + "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", + "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", + "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8", + "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", + "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", + "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", + "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", + "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", + "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", + "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", + "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", + "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", + "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", + "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", + "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", + "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e", + "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6", + "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", + "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", + "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e", + "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", + "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", + "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c", + "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", + "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", + "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089", + "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", + "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e", + "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", + "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616" + ], + "markers": "python_version >= '3.7'", + "version": "==3.4.1" + }, + "coverage": { + "hashes": [ + "sha256:042e7841a26498fff7a37d6fda770d17519982f5b7d8bf5278d140b67b61095f", + "sha256:04bfec25a8ef1c5f41f5e7e5c842f6b615599ca8ba8391ec33a9290d9d2db3a3", + "sha256:0915742f4c82208ebf47a2b154a5334155ed9ef9fe6190674b8a46c2fb89cb05", + "sha256:18c5ae6d061ad5b3e7eef4363fb27a0576012a7447af48be6c75b88494c6cf25", + "sha256:2931f66991175369859b5fd58529cd4b73582461877ecfd859b6549869287ffe", + "sha256:2e4b6b87bb0c846a9315e3ab4be2d52fac905100565f4b92f02c445c8799e257", + "sha256:3043ba1c88b2139126fc72cb48574b90e2e0546d4c78b5299317f61b7f718b78", + "sha256:379fe315e206b14e21db5240f89dc0774bdd3e25c3c58c2c733c99eca96f1ada", + "sha256:42421e04069fb2cbcbca5a696c4050b84a43b05392679d4068acbe65449b5c64", + "sha256:4dfd9a93db9e78666d178d4f08a5408aa3f2474ad4d0e0378ed5f2ef71640cb6", + "sha256:52a523153c568d2c0ef8826f6cc23031dc86cffb8c6aeab92c4ff776e7951b28", + "sha256:554fec1199d93ab30adaa751db68acec2b41c5602ac944bb19187cb9a41a8067", + "sha256:581a40c7b94921fffd6457ffe532259813fc68eb2bdda60fa8cc343414ce3733", + "sha256:5a26c0c795c3e0b63ec7da6efded5f0bc856d7c0b24b2ac84b4d1d7bc578d676", + "sha256:5a570cd9bd20b85d1a0d7b009aaf6c110b52b5755c17be6962f8ccd65d1dbd23", + "sha256:5aaeb00761f985007b38cf463b1d160a14a22c34eb3f6a39d9ad6fc27cb73008", + "sha256:5ac46d0c2dd5820ce93943a501ac5f6548ea81594777ca585bf002aa8854cacd", + "sha256:5c8a5c139aae4c35cbd7cadca1df02ea8cf28a911534fc1b0456acb0b14234f3", + "sha256:6b8af63b9afa1031c0ef05b217faa598f3069148eeee6bb24b79da9012423b82", + "sha256:769773614e676f9d8e8a0980dd7740f09a6ea386d0f383db6821df07d0f08545", + "sha256:771eb7587a0563ca5bb6f622b9ed7f9d07bd08900f7589b4febff05f469bea00", + "sha256:77af0f6447a582fdc7de5e06fa3757a3ef87769fbb0fdbdeba78c23049140a47", + "sha256:7a3d62b3b03b4b6fd41a085f3574874cf946cb4604d2b4d3e8dca8cd570ca501", + "sha256:821f7bcbaa84318287115d54becb1915eece6918136c6f91045bb84e2f88739d", + "sha256:89b1f4af0d4afe495cd4787a68e00f30f1d15939f550e869de90a86efa7e0814", + "sha256:8a1d96e780bdb2d0cbb297325711701f7c0b6f89199a57f2049e90064c29f6bd", + "sha256:8a40fcf208e021eb14b0fac6bdb045c0e0cab53105f93ba0d03fd934c956143a", + "sha256:8f99eb72bf27cbb167b636eb1726f590c00e1ad375002230607a844d9e9a2318", + "sha256:90e7fbc6216ecaffa5a880cdc9c77b7418c1dcb166166b78dbc630d07f278cc3", + "sha256:94ec0be97723ae72d63d3aa41961a0b9a6f5a53ff599813c324548d18e3b9e8c", + "sha256:95aa6ae391a22bbbce1b77ddac846c98c5473de0372ba5c463480043a07bff42", + "sha256:96121edfa4c2dfdda409877ea8608dd01de816a4dc4a0523356067b305e4e17a", + "sha256:a1f406a8e0995d654b2ad87c62caf6befa767885301f3b8f6f73e6f3c31ec3a6", + "sha256:a321c61477ff8ee705b8a5fed370b5710c56b3a52d17b983d9215861e37b642a", + "sha256:a5761c70c017c1b0d21b0815a920ffb94a670c8d5d409d9b38857874c21f70d7", + "sha256:a9abbccd778d98e9c7e85038e35e91e67f5b520776781d9a1e2ee9d400869487", + "sha256:ad80e6b4a0c3cb6f10f29ae4c60e991f424e6b14219d46f1e7d442b938ee68a4", + "sha256:b44674870709017e4b4036e3d0d6c17f06a0e6d4436422e0ad29b882c40697d2", + "sha256:b571bf5341ba8c6bc02e0baeaf3b061ab993bf372d982ae509807e7f112554e9", + "sha256:b8194fb8e50d556d5849753de991d390c5a1edeeba50f68e3a9253fbd8bf8ccd", + "sha256:b87eb6fc9e1bb8f98892a2458781348fa37e6925f35bb6ceb9d4afd54ba36c73", + "sha256:bbb5cc845a0292e0c520656d19d7ce40e18d0e19b22cb3e0409135a575bf79fc", + "sha256:be945402e03de47ba1872cd5236395e0f4ad635526185a930735f66710e1bd3f", + "sha256:bf13d564d310c156d1c8e53877baf2993fb3073b2fc9f69790ca6a732eb4bfea", + "sha256:cf60dd2696b457b710dd40bf17ad269d5f5457b96442f7f85722bdb16fa6c899", + "sha256:d1ba00ae33be84066cfbe7361d4e04dec78445b2b88bdb734d0d1cbab916025a", + "sha256:d39fc4817fd67b3915256af5dda75fd4ee10621a3d484524487e33416c6f3543", + "sha256:d766a4f0e5aa1ba056ec3496243150698dc0481902e2b8559314368717be82b1", + "sha256:dbf364b4c5e7bae9250528167dfe40219b62e2d573c854d74be213e1e52069f7", + "sha256:dd19608788b50eed889e13a5d71d832edc34fc9dfce606f66e8f9f917eef910d", + "sha256:e013b07ba1c748dacc2a80e69a46286ff145935f260eb8c72df7185bf048f502", + "sha256:e5d2b9be5b0693cf21eb4ce0ec8d211efb43966f6657807f6859aab3814f946b", + "sha256:e5ff52d790c7e1628241ffbcaeb33e07d14b007b6eb00a19320c7b8a7024c040", + "sha256:e75a2ad7b647fd8046d58c3132d7eaf31b12d8a53c0e4b21fa9c4d23d6ee6d3c", + "sha256:e7ac22a0bb2c7c49f441f7a6d46c9c80d96e56f5a8bc6972529ed43c8b694e27", + "sha256:ed2144b8a78f9d94d9515963ed273d620e07846acd5d4b0a642d4849e8d91a0c", + "sha256:f017a61399f13aa6d1039f75cd467be388d157cd81f1a119b9d9a68ba6f2830d", + "sha256:f1d8a2a57b47142b10374902777e798784abf400a004b14f1b0b9eaf1e528ba4", + "sha256:f2d32f95922927186c6dbc8bc60df0d186b6edb828d299ab10898ef3f40052fe", + "sha256:f319bae0321bc838e205bf9e5bc28f0a3165f30c203b610f17ab5552cff90323", + "sha256:f3c38e4e5ccbdc9198aecc766cedbb134b2d89bf64533973678dfcf07effd883", + "sha256:f9983d01d7705b2d1f7a95e10bbe4091fabc03a46881a256c2787637b087003f", + "sha256:fa260de59dfb143af06dcf30c2be0b200bed2a73737a8a59248fcb9fa601ef0f" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==7.8.0" + }, + "docker": { + "hashes": [ + "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c", + "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0" + ], + "markers": "python_version >= '3.8'", + "version": "==7.1.0" + }, + "idna": { + "hashes": [ + "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" + ], + "markers": "python_version >= '3.6'", + "version": "==3.10" + }, + "iniconfig": { + "hashes": [ + "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", + "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760" + ], + "markers": "python_version >= '3.8'", + "version": "==2.1.0" + }, + "packaging": { + "hashes": [ + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" + ], + "markers": "python_version >= '3.8'", + "version": "==24.2" + }, + "pluggy": { + "hashes": [ + "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", + "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669" + ], + "markers": "python_version >= '3.8'", + "version": "==1.5.0" + }, + "pytest": { + "hashes": [ + "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", + "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==8.3.5" + }, + "python-dotenv": { + "hashes": [ + "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5", + "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==1.1.0" + }, + "requests": { + "hashes": [ + "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", + "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" + ], + "markers": "python_version >= '3.8'", + "version": "==2.32.3" + }, + "requests-mock": { + "hashes": [ + "sha256:b1e37054004cdd5e56c84454cc7df12b25f90f382159087f4b6915aaeef39563", + "sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401" + ], + "index": "pypi", + "markers": "python_version >= '3.5'", + "version": "==1.12.1" + }, + "testcontainers": { + "hashes": [ + "sha256:03f85c3e505d8b4edeb192c72a961cebbcba0dd94344ae778b4a159cb6dcf8d3", + "sha256:31ed1a81238c7e131a2a29df6db8f23717d892b592fa5a1977fd0dcd0c23fc23" + ], + "index": "pypi", + "markers": "python_version >= '3.9' and python_version < '4.0'", + "version": "==4.10.0" + }, + "typing-extensions": { + "hashes": [ + "sha256:0a4ac55a5820789d87e297727d229866c9650f6521b64206413c4fbada24d95b", + "sha256:c8dd92cc0d6425a97c18fbb9d1954e5ff92c1ca881a309c45f06ebc0b79058e5" + ], + "markers": "python_version >= '3.8'", + "version": "==4.13.0" + }, + "urllib3": { + "hashes": [ + "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", + "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" + ], + "markers": "python_version >= '3.9'", + "version": "==2.3.0" + }, + "wrapt": { + "hashes": [ + "sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f", + "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c", + "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a", + "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b", + "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555", + "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c", + "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b", + "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6", + "sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8", + "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662", + "sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061", + "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998", + "sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb", + "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62", + "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984", + "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392", + "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2", + "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306", + "sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7", + "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3", + "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9", + "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6", + "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192", + "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317", + "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f", + "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda", + "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563", + "sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a", + "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f", + "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d", + "sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9", + "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8", + "sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82", + "sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9", + "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845", + "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82", + "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125", + "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504", + "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b", + "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7", + "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc", + "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6", + "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40", + "sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a", + "sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3", + "sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a", + "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72", + "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681", + "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438", + "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae", + "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2", + "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb", + "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5", + "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a", + "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3", + "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8", + "sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2", + "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22", + "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72", + "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061", + "sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f", + "sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9", + "sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04", + "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98", + "sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9", + "sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f", + "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b", + "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925", + "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6", + "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0", + "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9", + "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c", + "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991", + "sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6", + "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000", + "sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb", + "sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119", + "sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b", + "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58" + ], + "markers": "python_version >= '3.8'", + "version": "==1.17.2" + } + } +} diff --git a/dbrepo-dashboard-service/README.md b/dbrepo-dashboard-service/README.md new file mode 100644 index 0000000000..a05a200d2d --- /dev/null +++ b/dbrepo-dashboard-service/README.md @@ -0,0 +1,14 @@ +# Search Service + +## Actuator + +- Health: http://localhost:5000/api/search/health +- Prometheus: http://localhost:5000/metrics + +## Swagger UI Endpoints + +- Swagger UI: http://localhost:5000/swagger-ui/ + +## OpenAPI Endpoints + +- OpenAPI v3 as .json: http://localhost:5000/api-search.json \ No newline at end of file diff --git a/dbrepo-dashboard-service/access.py b/dbrepo-dashboard-service/access.py deleted file mode 100644 index b72b2dcfbf..0000000000 --- a/dbrepo-dashboard-service/access.py +++ /dev/null @@ -1,30 +0,0 @@ -import logging - -from grafana_client.client import GrafanaException - -from api.dto import Permission -from dbrepo.api.dto import Database -from clients import grafana_client - -statistics_row_title = '${table_id}' - - -def update_anonymous_read_access(uid: str, is_public: bool, is_schema_public: bool) -> None: - grafana = grafana_client.connect() - permissions = grafana.dashboard.get_permissions_by_uid(uid) - viewer_role = [permission for permission in permissions if - 'permissionName' in permission and permission['permissionName'] != 'View'] - permission = '' - if is_public or is_schema_public: - permission = 'View' - if len(viewer_role) == 0: - logging.warning(f'Failed to find permissionName=View') - return None - try: - response = grafana_client.generic_post(f'/api/access-control/dashboards/{uid}/builtInRoles/Viewer', - Permission(permission=permission).model_dump()) - if response.status_code != 200: - raise OSError(f'Failed to update anonymous read access: {response.content}') - except GrafanaException as e: - raise OSError(f'Failed to update anonymous read access: {e.message}') - logging.info(f"Updated anonymous read access for dashboard with uid: {uid}") diff --git a/dbrepo-dashboard-service/app.py b/dbrepo-dashboard-service/app.py new file mode 100644 index 0000000000..eb50fe66c7 --- /dev/null +++ b/dbrepo-dashboard-service/app.py @@ -0,0 +1,237 @@ +import logging +import os +from http import HTTPStatus +from json import dumps +from typing import List, Any + +from dbrepo.api.dto import ApiError, Database, User +from dbrepo.core.api.exceptions import DashboardNotFound +from dbrepo.core.client.auth import AuthServiceClient +from dbrepo.core.client.dashboard import DashboardServiceClient +from flasgger import LazyJSONEncoder, Swagger, swag_from +from flask import Flask, request, Response +from flask_cors import CORS +from flask_httpauth import HTTPTokenAuth, HTTPBasicAuth, MultiAuth +from grafana_client.client import GrafanaClientError +from prometheus_flask_exporter import PrometheusMetrics +from pydantic import ValidationError + +logging.addLevelName(level=logging.NOTSET, levelName='TRACE') +logging.basicConfig(level=logging.DEBUG) + +from logging.config import dictConfig + +# logging configuration +dictConfig({ + 'version': 1, + 'formatters': { + 'default': { + 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', + }, + 'simple': { + 'format': '[%(asctime)s] %(levelname)s: %(message)s', + }, + }, + 'handlers': {'wsgi': { + 'class': 'logging.StreamHandler', + 'stream': 'ext://flask.logging.wsgi_errors_stream', + 'formatter': 'simple' # default + }}, + 'root': { + 'level': 'DEBUG', + 'handlers': ['wsgi'] + } +}) + +# create app object +app = Flask(__name__) + +cors = CORS(app, resources={r"/api/*": {"origins": "*"}}) + +metrics = PrometheusMetrics(app) +metrics.info("app_info", "Application info", version="0.0.1") +app.config["SWAGGER"] = {"openapi": "3.0.1", "title": "Swagger UI", "uiversion": 3} + +token_auth = HTTPTokenAuth(scheme='Bearer') +basic_auth = HTTPBasicAuth() +auth = MultiAuth(token_auth, basic_auth) + +swagger_config = { + "headers": [], + "specs": [ + { + "endpoint": "api-dashboard", + "route": "/api-dashboard.json", + "rule_filter": lambda rule: True, + "model_filter": lambda tag: True, # all in + } + ], + "static_url_path": "/flasgger_static", + "swagger_ui": True, + "specs_route": "/swagger-ui/", +} + +template = { + "openapi": "3.0.0", + "info": { + "title": "Database Repository Dashboard Service API", + "description": "Service that manages the dashboards", + "version": "1.8.0", + "contact": { + "name": "Prof. Andreas Rauber", + "email": "andreas.rauber@tuwien.ac.at" + }, + "license": { + "name": "Apache 2.0", + "url": "https://www.apache.org/licenses/LICENSE-2.0" + }, + }, + "externalDocs": { + "description": "Sourcecode Documentation", + "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.7/" + }, + "servers": [ + { + "url": "http://localhost", + "description": "Generated server url" + }, + { + "url": "https://test.dbrepo.tuwien.ac.at", + "description": "Sandbox" + } + ], + "components": { + "schemas": { + "ApiError": { + "properties": { + "message": { + "example": "Message", + "type": "string" + }, + "status": { + "example": "BAD_REQUEST", + "type": "string" + }, + "code": { + "example": "error.dashboard.create", + "type": "string" + } + }, + "type": "object" + }, + }, + "securitySchemes": { + "bearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT", + "in": "header" + }, + "basicAuth": { + "type": "http", + "scheme": "basic", + "in": "header" + } + }, + } +} + +swagger = Swagger(app, config=swagger_config, template=template) +app.config["AUTH_SERVICE_ENDPOINT"] = os.getenv("AUTH_SERVICE_ENDPOINT", "http://localhost:8080") +app.config["AUTH_SERVICE_CLIENT"] = os.getenv("AUTH_SERVICE_CLIENT", "dbrepo-client") +app.config["AUTH_SERVICE_CLIENT_SECRET"] = os.getenv("AUTH_SERVICE_CLIENT_SECRET", "MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG") +app.config["BASE_URL"] = os.getenv("BASE_URL", "http://localhost") +app.config["JSON_DATASOURCE_NAME"] = os.getenv('JSON_DATASOURCE_NAME', 'dbrepojson0') +app.config["JWT_ALGORITHM"] = "HS256" +app.config["JWT_PUBKEY"] = '-----BEGIN PUBLIC KEY-----\n' + os.getenv("JWT_PUBKEY", + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB") + '\n-----END PUBLIC KEY-----' +app.config["READONLY_USERNAME"] = os.getenv('READONLY_USERNAME', 'user') +app.config["READONLY_PASSWORD"] = os.getenv('READONLY_PASSWORD', 'user') + +app.json_encoder = LazyJSONEncoder + +headers = {'Content-Type': 'application/json'} + + +def dashboard_client(): + return DashboardServiceClient(os.getenv('DASHBOARD_UI_ENDPOINT', 'http://localhost:3000'), + os.getenv('SYSTEM_USERNAME', 'admin'), os.getenv('SYSTEM_PASSWORD', 'admin')) + + +def auth_client(): + return AuthServiceClient(app.config["AUTH_SERVICE_ENDPOINT"], app.config["AUTH_SERVICE_CLIENT"], + app.config["AUTH_SERVICE_CLIENT_SECRET"], app.config["JWT_PUBKEY"]) + + +@token_auth.verify_token +def verify_token(token: str) -> bool | User: + return auth_client().is_valid_token(token) + + +@basic_auth.verify_password +def verify_password(username: str, password: str) -> Any: + return auth_client().is_valid_password(username, password) + + +@token_auth.get_user_roles +def get_user_roles(user: User) -> List[str]: + return auth_client().get_user_roles(user) + + +@basic_auth.get_user_roles +def get_user_roles(user: User) -> List[str]: + return auth_client().get_user_roles(user) + + +@app.route("/health", methods=["GET"], endpoint="actuator_health") +def health(): + return dict({"status": "UP"}), 200 + + +@app.route("/api/dashboard", methods=["POST"], endpoint="create_dashboard") +@metrics.gauge(name='dbrepo_create_dashboard', description='Time needed to create dashboard') +@swag_from("ds-yml/create_dashboard.yml") +@auth.login_required(role=['system']) +def create_dashboard(): + for parameter in [param for param in ['is_public', 'is_schema_public', 'owner_username', 'database_name'] if + param not in request.json]: + return Response(ApiError(status='BAD_REQUEST', message=f'Missing required parameter: {parameter}', + code="error.dashboard.malformed").model_dump_json(), 400, headers) + + is_public = bool(request.json['is_public']) + is_schema_public = bool(request.json['is_schema_public']) + owner_username = request.json['owner_username'] + logging.debug( + f"endpoint create dashboard, is_public={is_public}, is_schema_public={is_schema_public}, owner_username={owner_username}") + try: + db = dashboard_client().create(request.json['database_name']) + dashboard_client().update_anonymous_read_access(db['uid'], is_public, is_schema_public) + return Response(dumps(db)), 201, headers + except GrafanaClientError as e: + dto = ApiError(status=HTTPStatus(e.status_code).phrase.upper(), + message=f"Failed to create dashboard: {e.response['message']}", code="error.dashboard.create") + if e.status_code == 409 or e.status_code == 412: + dto.code = "error.dashboard.exists" + return Response(dto.model_dump_json(), 409, headers) + return Response(dto.model_dump_json(), e.status_code, headers) + + +@app.route("/api/dashboard/<string:uid>", methods=["PUT"], endpoint="update_dashboard") +@metrics.gauge(name='dbrepo_update_dashboard', description='Time needed to update dashboard') +@swag_from("ds-yml/update_dashboard.yml") +@auth.login_required(role=['system']) +def update_dashboard(uid: str): + logging.debug(f'endpoint update dashboard, uid={uid}') + try: + database = Database.model_validate(request.json) + except ValidationError as e: + logging.error(f'Model malformed: {e}') + return Response(ApiError(status='BAD_REQUEST', message='Invalid database format', + code='error.database.malformed').model_dump_json(), 400, headers) + try: + dashboard_client().update(database) + except DashboardNotFound as e: + return Response(ApiError(status='NOT_FOUND', message=f"Failed to update dashboard: not found", + code="error.dashboard.missing").model_dump_json(), 404, headers) + dashboard_client().update_anonymous_read_access(uid, database.is_public, database.is_schema_public) + return Response(), 202, headers diff --git a/dbrepo-dashboard-service/clients/grafana_client.py b/dbrepo-dashboard-service/clients/grafana_client.py deleted file mode 100644 index 8f7d5aab0f..0000000000 --- a/dbrepo-dashboard-service/clients/grafana_client.py +++ /dev/null @@ -1,27 +0,0 @@ -import logging -import os - -import requests -from requests import Response - -from grafana_client import GrafanaApi - -url = os.getenv('DASHBOARD_UI_ENDPOINT', 'http://localhost:3000') -username = os.getenv('SYSTEM_USERNAME', 'admin') -password = os.getenv('SYSTEM_PASSWORD', 'admin') - - -def connect() -> GrafanaApi: - return GrafanaApi.from_url(url=f'{url}', credential=(username, password)) - - -def generic_get(api_url: str) -> Response: - request_url = url + api_url - logging.debug(f'generic get url={request_url}, auth=({username}, <reacted>)') - return requests.get(request_url, auth=(username, password)) - - -def generic_post(api_url: str, payload: dict) -> Response: - request_url = url + api_url - logging.debug(f'generic post url={request_url}, payload={payload}, auth=({username}, <reacted>)') - return requests.post(request_url, json=payload, auth=(username, password)) diff --git a/dbrepo-dashboard-service/clients/keycloak_client.py b/dbrepo-dashboard-service/clients/keycloak_client.py deleted file mode 100644 index 7abb0a28a5..0000000000 --- a/dbrepo-dashboard-service/clients/keycloak_client.py +++ /dev/null @@ -1,35 +0,0 @@ -from dataclasses import dataclass -from typing import List - -import requests -from flask import current_app -from jwt import jwk_from_pem, JWT - - -@dataclass(init=True, eq=True) -class User: - username: str - roles: List[str] - - -class KeycloakClient: - - def obtain_user_token(self, username: str, password: str) -> str: - response = requests.post( - f"{current_app.config['AUTH_SERVICE_ENDPOINT']}/realms/dbrepo/protocol/openid-connect/token", - data={ - "username": username, - "password": password, - "grant_type": "password", - "client_id": current_app.config["AUTH_SERVICE_CLIENT"], - "client_secret": current_app.config["AUTH_SERVICE_CLIENT_SECRET"] - }) - body = response.json() - if "access_token" not in body: - raise AssertionError(f"Failed to obtain user token(s): {response.status_code}") - return response.json()["access_token"] - - def verify_jwt(self, access_token: str) -> User: - public_key = jwk_from_pem(str(current_app.config["JWT_PUBKEY"]).encode('utf-8')) - payload = JWT().decode(message=access_token, key=public_key, do_time_check=True) - return User(username=payload.get('client_id'), roles=payload.get('realm_access')["roles"]) diff --git a/dbrepo-dashboard-service/dashboard.py b/dbrepo-dashboard-service/dashboard.py deleted file mode 100644 index f8d4212be4..0000000000 --- a/dbrepo-dashboard-service/dashboard.py +++ /dev/null @@ -1,344 +0,0 @@ -import logging -import os - -from dbrepo.api.dto import Database, View - -from clients import grafana_client - -statistics_row_title = '${view_id}' - -base_url = os.getenv('BASE_URL', 'http://localhost') -datasource_uid = os.getenv('JSON_DATASOURCE_NAME', 'dbrepojson0') - - -def map_link(title: str, url: str) -> dict: - return dict(targetBlank=True, - asDropdown=False, - includeVars=False, - keepTime=False, - tags=[], - type='link', - icon='info', - title=title, - url=url) - - -def map_statistics_row(dashboard: dict) -> dict | None: - filtered_panels = [panel for panel in dashboard['panels'] if - panel['type'] == 'row' and panel['title'] == statistics_row_title] - if len(filtered_panels) == 0: - logging.warning(f"Failed to find statistics row title {statistics_row_title} in: {filtered_panels}") - return None - return filtered_panels[0] - - -def map_links(database: Database) -> [dict]: - links = [] - if len(database.identifiers) > 0: - links.append(map_link('Database', f"{base_url}/pid/{database.identifiers[0].id}")) - else: - links.append(map_link('Database', f"{base_url}/database/{database.id}")) - return links - - -def map_templating(database: Database) -> dict: - options = [dict(selected=False, - text=view.name, - value=str(view.id)) for view in database.views] - selected = dict(selected=True, - text=[view.name for view in database.views], - value=[str(view.id) for view in database.views]) - datasource = dict(uid=datasource_uid, - type='yesoreyeram-infinity-datasource') - return dict(list=[dict(description='', - name='view_id', - hide=0, - includeAll=True, - multi=True, - datasource=datasource, - refresh=1, - regex='', - sort=0, - definition='dbrepo-json- (infinity) json', - query=dict(queryType='infinity', - query='', - infinityQuery=dict(format='table', - filters=[], - parser='backend', - refId='variable', - root_selector='', - source='url', - type='json', - url=f"/api/database/{database.id}/view", - columns=[dict(selector='id', - text='value', - type='string'), - dict( - selector='internal_name', - text='name', - type='string')], - url_options=dict(data='', - method='GET'))), - label='Datasource', - skipUrlSync=False, - type='query', - current=selected, - options=options)]) - - -def map_timeseries_panel(database: Database, view: View) -> dict: - datasource = dict(uid=datasource_uid, - type='yesoreyeram-infinity-datasource') - return dict( - title=view['name'], - type='timeseries', - datasource=datasource, - targets=[dict(datasource=datasource, - format='table', - global_query_id='', - hide=False, - refId='A', - root_selector='', - source='url', - type='json', - url=f"/api/database/{database['id']}/view/{view['id']}", - url_options=dict(data='', - method='GET'))], - gridPos=dict(h=8, - w=12, - x=0, - y=0), - options=dict(legend=dict(displayMode='list', - placement='bottom', - showLegend=True), - tooltip=dict(mode='single', - sort='none')), - fieldConfig=dict( - defaults=dict(color=dict(mode='palette-classic'), - custom=dict( - axisBorderShow=False, - axisCenteredZero=False, - axisColorMode='text', - axisLabel='', - axisPlacement='auto', - barAlignment=0, - drawStyle='line', - fillOpacity=0, - gradientMode='none', - hideFrom=dict(legend=False, - tooltip=False, - viz=False), - insertNulls=False, - lineInterpolation='linear', - lineWidth=1, - pointSize=5, - scaleDistribution=dict(type='linear'), - showPoints='auto', - spanNulls=False, - stacking=dict(group='A', - mode='none'), - thresholdsStyle=dict(mode='absolute'))))) - - -def map_statistics_panel(database_id: str, view: View) -> dict: - datasource = dict(uid=datasource_uid, - type='yesoreyeram-infinity-datasource') - return dict( - title=view.name, - type='table', - datasource=datasource, - targets=[dict(datasource=datasource, - columns=[], - filters=[], - format='table', - global_query_id='', - hide=False, - refId='A', - root_selector='', - source='url', - type='json', - url=f"/api/database/{database_id}/view/{view.id}/data", - url_options=dict(data='', - method='GET'))], - options=dict(cellHeight="sm", - showHeader=True, - footer=dict(countRows=False, - fields="", - reducer=["sum"], - show=False)), - gridPos=dict(h=8, - w=12, - x=12, - y=0), - transformations=dict(id="organize", - options=dict(excludeByName=dict(), - includeByName=dict(), - indexByName=dict( - HEADER_AVG=3, - HEADER_COL=0, - HEADER_STDDEV=4, - HEADER_MAX=2, - HEADER_MIN=1))), - fieldConfig=dict(defaults=dict(custom=dict(align="auto", - filterable="true", - cellOptions=dict(type="auto"), - inspect=False), - mappings=[], - thresholds=dict(mode="absolute", - steps=[dict(color="green", - value=None), - dict(color="red", - value=80) - ])), - overrides=[dict(matcher=dict(id="byName", - options="HEADER_COL"), - properties=[dict(id="custom.align", - value="center")]), - dict(matcher=dict(id="byName", - options="HEADER_MIN"), - properties=[dict(id="custom.width", - value=115)]), - dict(matcher=dict(id="byName", - options="HEADER_MAX"), - properties=[dict(id="custom.width", - value=115)]), - dict(matcher=dict(id="byName", - options="HEADER_AVG"), - properties=[dict(id="custom.width", - value=115)]), - dict(matcher=dict(id="byName", - options="HEADER_STDDEV"), - properties=[dict(id="custom.width", - value=115)]) - ])) - - -def map_overview_panel(database_id: str) -> dict: - datasource = dict(uid=datasource_uid, - type='yesoreyeram-infinity-datasource') - return dict(title='Preview', - type='table', - fieldConfig=dict( - defaults=dict( - color=dict(mode='palette-classic'), - custom=dict(axisBorderShow=False, - axisCenteredZero=False, - axisColorMode='text', - axisLabel='', - axisPlacement='auto', - barAlignment=0, - drawStyle='line', - fillOpacity=0, - gradientMode='none', - hideFrom=dict( - legend=False, - tooltip=False, - viz=False), - insertNulls=False, - lineInterpolation='linear', - lineWidth=1, - pointSize=5, - scaleDistribution=dict( - type='linear'), - showPoints='auto', - spanNulls=False, - stacking=dict(group='A', - mode='none'), - thresholdsStyle=dict( - mode='off'))), - overrides=[]), - options=dict(legend=dict(displayMode='list', - placement='bottom', - showLegend=True, - calcs=[]), - tooltip=dict(mode='single', - sort='none')), - targets=[dict(format='json', - columns=[], - datasource=datasource, - filters=[], - global_query_id='', - refId='A', - root_selector='', - source='url', - type='json', - url='/api/database/' + database_id + '/view/${view_id}/data', - url_options=dict(data='', - method='GET'))], - datasource=datasource, - gridPos=dict(h=4, - w=12, - x=0, - y=0)) - - -def map_row() -> dict: - datasource = dict(uid=datasource_uid, - type='yesoreyeram-infinity-datasource') - return dict(collapsed=False, - repeat='view_id', - repeatDirection='h', - title=statistics_row_title, - type='row', - panels=[], - targets=[dict(refId='A', - datasource=datasource)], - gridPos=dict(h=1, - w=24, - x=0, - y=0)) - - -def map_panels(dashboard: dict, database: Database) -> [dict]: - if map_statistics_row(dashboard) is None: - dashboard['panels'].append(map_row()) - dashboard['panels'].append(map_overview_panel(database.id)) - for view in database.views: - dashboard['panels'].append(map_statistics_panel(database.id, view)) - return dashboard['panels'] - - -def find(uid: str): - grafana = grafana_client.connect() - return grafana.dashboard.get_dashboard(uid) - - -def create(database_name: str, uid: str = '') -> dict: - grafana = grafana_client.connect() - dashboard = dict(uid=uid, - title=f'{database_name} Overview', - tags=['dbrepo'], - timezone='browser', - fiscalYearStartMonth=1, - panels=[]) - dashboard['panels'] = [] - payload = dict(folderUid='', - overwrite=False, - dashboard=dashboard) - dashboard = grafana.dashboard.update_dashboard(payload) - logging.info(f"Created dashboard with uid: {dashboard['uid']}") - return dashboard - - -def delete(uid: str) -> None: - grafana = grafana_client.connect() - grafana.dashboard.delete_dashboard(uid) - - -def update(database: Database) -> None: - grafana = grafana_client.connect() - dashboard = find(database.dashboard_uid)['dashboard'] - # update metadata - if len(database.identifiers) > 0 and len(database.identifiers[0].titles) > 0: - dashboard['title'] = database.identifiers[0].titles[0].title - if len(database.identifiers) > 0 and len(database.identifiers[0].descriptions) > 0: - dashboard['description'] = database.identifiers[0].descriptions[0].description - dashboard['links'] = map_links(database) - dashboard['templating'] = map_templating(database) - # update panels - dashboard['panels'] = map_panels(dashboard, database) - payload = dict(folderUid='', - overwrite=True, - dashboard=dashboard) - response = grafana.dashboard.update_dashboard(payload) - logging.info(f"Updated dashboard with uid: {response['uid']}") diff --git a/dbrepo-dashboard-service/ds-yml/create_dashboard.yml b/dbrepo-dashboard-service/ds-yml/create_dashboard.yml new file mode 100644 index 0000000000..8499d13ed5 --- /dev/null +++ b/dbrepo-dashboard-service/ds-yml/create_dashboard.yml @@ -0,0 +1,55 @@ +tags: + - dashboard-endpoint +summary: "Create dashboard" +operationId: create_dashboard +description: "Creates a dashboard in the Dashboard UI. Requires role `system`." +consumes: + - "application/json" +produces: + - "application/json" +parameters: + - in: "body" + name: "body" + required: true + schema: + required: + - is_public + - is_schema_public + - database_name + - owner_username + type: object + properties: + is_public: + type: boolean + example: True + is_schema_public: + type: boolean + example: True + database_name: + type: string + example: "some_database" + owner_username: + type: string + example: "foobar" +responses: + 201: + description: Created dashboard successfully + content: + application/json: + schema: + type: object + 409: + description: "Dashboard exists with same name" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiError' + 500: + description: "Unexpected system error" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiError' +security: + - bearerAuth: [ ] + - basicAuth: [ ] diff --git a/dbrepo-dashboard-service/ds-yml/update_dashboard.yml b/dbrepo-dashboard-service/ds-yml/update_dashboard.yml new file mode 100644 index 0000000000..0765ad9565 --- /dev/null +++ b/dbrepo-dashboard-service/ds-yml/update_dashboard.yml @@ -0,0 +1,43 @@ +tags: + - dashboard-endpoint +summary: "Update dashboard" +operationId: update_dashboard +description: "Updates a dashboard in the Dashboard UI. Requires role `system`." +consumes: + - "application/json" +produces: + - "application/json" +parameters: + - name: uid + in: path + required: true + schema: + type: string + format: uuid + - name: "body" + in: "body" + required: true + schema: + type: object +responses: + 202: + description: Updated dashboard successfully + content: + application/json: + schema: + type: object + 404: + description: "Dashboard not found" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiError' + 500: + description: "Unexpected system error" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiError' +security: + - bearerAuth: [ ] + - basicAuth: [ ] diff --git a/dbrepo-dashboard-service/init/.coveragerc b/dbrepo-dashboard-service/init/.coveragerc new file mode 100644 index 0000000000..9fd61fc166 --- /dev/null +++ b/dbrepo-dashboard-service/init/.coveragerc @@ -0,0 +1,7 @@ +[report] +omit = + # omit tests + ./tests/* + +[html] +directory = htmlcov \ No newline at end of file diff --git a/dbrepo-dashboard-service/init/Dockerfile b/dbrepo-dashboard-service/init/Dockerfile new file mode 100644 index 0000000000..a073362558 --- /dev/null +++ b/dbrepo-dashboard-service/init/Dockerfile @@ -0,0 +1,25 @@ +FROM python:3.11-alpine3.21 +LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" + +RUN apk add --no-cache \ + curl \ + bash \ + jq + +COPY Pipfile Pipfile.lock ./ + +COPY ./lib ./lib + +RUN pip install pipenv && \ + pipenv install gunicorn && \ + pipenv install --system --deploy + +RUN adduser -D dbrepo --uid 1001 + +WORKDIR /app + +USER 1001 + +COPY --chown=1001 ./app.py ./app.py + +ENTRYPOINT [ "python", "./app.py" ] diff --git a/dbrepo-dashboard-service/init/Pipfile b/dbrepo-dashboard-service/init/Pipfile new file mode 100644 index 0000000000..e94396551e --- /dev/null +++ b/dbrepo-dashboard-service/init/Pipfile @@ -0,0 +1,28 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +flasgger = "*" +flask = "~=2.0" +flask-cors = "~=4.0" +flask-jwt-extended = "~=4.5" +prometheus-flask-exporter = "*" +python-dotenv = "~=1.0" +pytest = "*" +dbrepo = {path = "./lib/dbrepo-1.8.0.tar.gz"} +gunicorn = "*" +pydantic = "*" +flask_httpauth = "*" +grafana-client = "*" + +[dev-packages] +coverage = "*" +pytest = "*" +testcontainers = "*" +requests-mock = "*" +grafana-client = "*" + +[requires] +python_version = "3.11" diff --git a/dbrepo-dashboard-service/init/Pipfile.lock b/dbrepo-dashboard-service/init/Pipfile.lock new file mode 100644 index 0000000000..0e70d6655f --- /dev/null +++ b/dbrepo-dashboard-service/init/Pipfile.lock @@ -0,0 +1,2434 @@ +{ + "_meta": { + "hash": { + "sha256": "63b2ba52d16213be5e67d8f325b8d28b7caac9f0c9aff04270dd46afc462b397" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.11" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "aiohappyeyeballs": { + "hashes": [ + "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", + "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8" + ], + "markers": "python_version >= '3.9'", + "version": "==2.6.1" + }, + "aiohttp": { + "hashes": [ + "sha256:004511d3413737700835e949433536a2fe95a7d0297edd911a1e9705c5b5ea43", + "sha256:0902e887b0e1d50424112f200eb9ae3dfed6c0d0a19fc60f633ae5a57c809656", + "sha256:09b00dd520d88eac9d1768439a59ab3d145065c91a8fab97f900d1b5f802895e", + "sha256:0a2f451849e6b39e5c226803dcacfa9c7133e9825dcefd2f4e837a2ec5a3bb98", + "sha256:0a950c2eb8ff17361abd8c85987fd6076d9f47d040ebffce67dce4993285e973", + "sha256:0ad1fb47da60ae1ddfb316f0ff16d1f3b8e844d1a1e154641928ea0583d486ed", + "sha256:13ceac2c5cdcc3f64b9015710221ddf81c900c5febc505dbd8f810e770011540", + "sha256:14461157d8426bcb40bd94deb0450a6fa16f05129f7da546090cebf8f3123b0f", + "sha256:16f8a2c9538c14a557b4d309ed4d0a7c60f0253e8ed7b6c9a2859a7582f8b1b8", + "sha256:17ae4664031aadfbcb34fd40ffd90976671fa0c0286e6c4113989f78bebab37a", + "sha256:1ce63ae04719513dd2651202352a2beb9f67f55cb8490c40f056cea3c5c355ce", + "sha256:23a15727fbfccab973343b6d1b7181bfb0b4aa7ae280f36fd2f90f5476805682", + "sha256:2540ddc83cc724b13d1838026f6a5ad178510953302a49e6d647f6e1de82bc34", + "sha256:37dcee4906454ae377be5937ab2a66a9a88377b11dd7c072df7a7c142b63c37c", + "sha256:38bea84ee4fe24ebcc8edeb7b54bf20f06fd53ce4d2cc8b74344c5b9620597fd", + "sha256:3ab3367bb7f61ad18793fea2ef71f2d181c528c87948638366bf1de26e239183", + "sha256:3ad1d59fd7114e6a08c4814983bb498f391c699f3c78712770077518cae63ff7", + "sha256:3b4e6db8dc4879015b9955778cfb9881897339c8fab7b3676f8433f849425913", + "sha256:3e061b09f6fa42997cf627307f220315e313ece74907d35776ec4373ed718b86", + "sha256:42864e70a248f5f6a49fdaf417d9bc62d6e4d8ee9695b24c5916cb4bb666c802", + "sha256:493910ceb2764f792db4dc6e8e4b375dae1b08f72e18e8f10f18b34ca17d0979", + "sha256:4d0c970c0d602b1017e2067ff3b7dac41c98fef4f7472ec2ea26fd8a4e8c2149", + "sha256:54eb3aead72a5c19fad07219acd882c1643a1027fbcdefac9b502c267242f955", + "sha256:56a3443aca82abda0e07be2e1ecb76a050714faf2be84256dae291182ba59049", + "sha256:576f5ca28d1b3276026f7df3ec841ae460e0fc3aac2a47cbf72eabcfc0f102e1", + "sha256:58ede86453a6cf2d6ce40ef0ca15481677a66950e73b0a788917916f7e35a0bb", + "sha256:61c721764e41af907c9d16b6daa05a458f066015abd35923051be8705108ed17", + "sha256:634d96869be6c4dc232fc503e03e40c42d32cfaa51712aee181e922e61d74814", + "sha256:696ef00e8a1f0cec5e30640e64eca75d8e777933d1438f4facc9c0cdf288a810", + "sha256:69a2cbd61788d26f8f1e626e188044834f37f6ae3f937bd9f08b65fc9d7e514e", + "sha256:6a792ce34b999fbe04a7a71a90c74f10c57ae4c51f65461a411faa70e154154e", + "sha256:6ac13b71761e49d5f9e4d05d33683bbafef753e876e8e5a7ef26e937dd766713", + "sha256:6fdec0213244c39973674ca2a7f5435bf74369e7d4e104d6c7473c81c9bcc8c4", + "sha256:72b1b03fb4655c1960403c131740755ec19c5898c82abd3961c364c2afd59fe7", + "sha256:745f1ed5e2c687baefc3c5e7b4304e91bf3e2f32834d07baaee243e349624b24", + "sha256:776c8e959a01e5e8321f1dec77964cb6101020a69d5a94cd3d34db6d555e01f7", + "sha256:780df0d837276276226a1ff803f8d0fa5f8996c479aeef52eb040179f3156cbd", + "sha256:78e6e23b954644737e385befa0deb20233e2dfddf95dd11e9db752bdd2a294d3", + "sha256:7951decace76a9271a1ef181b04aa77d3cc309a02a51d73826039003210bdc86", + "sha256:7ba92a2d9ace559a0a14b03d87f47e021e4fa7681dc6970ebbc7b447c7d4b7cd", + "sha256:7f6428fee52d2bcf96a8aa7b62095b190ee341ab0e6b1bcf50c615d7966fd45b", + "sha256:87944bd16b7fe6160607f6a17808abd25f17f61ae1e26c47a491b970fb66d8cb", + "sha256:87a6e922b2b2401e0b0cf6b976b97f11ec7f136bfed445e16384fbf6fd5e8602", + "sha256:8cb0688a8d81c63d716e867d59a9ccc389e97ac7037ebef904c2b89334407180", + "sha256:8df6612df74409080575dca38a5237282865408016e65636a76a2eb9348c2567", + "sha256:911a6e91d08bb2c72938bc17f0a2d97864c531536b7832abee6429d5296e5b27", + "sha256:92b7ee222e2b903e0a4b329a9943d432b3767f2d5029dbe4ca59fb75223bbe2e", + "sha256:938f756c2b9374bbcc262a37eea521d8a0e6458162f2a9c26329cc87fdf06534", + "sha256:9756d9b9d4547e091f99d554fbba0d2a920aab98caa82a8fb3d3d9bee3c9ae85", + "sha256:98b88a2bf26965f2015a771381624dd4b0839034b70d406dc74fd8be4cc053e3", + "sha256:9b751a6306f330801665ae69270a8a3993654a85569b3469662efaad6cf5cc50", + "sha256:a2a450bcce4931b295fc0848f384834c3f9b00edfc2150baafb4488c27953de6", + "sha256:a3814760a1a700f3cfd2f977249f1032301d0a12c92aba74605cfa6ce9f78489", + "sha256:a5abcbba9f4b463a45c8ca8b7720891200658f6f46894f79517e6cd11f3405ca", + "sha256:a6db7458ab89c7d80bc1f4e930cc9df6edee2200127cfa6f6e080cf619eddfbd", + "sha256:ad497f38a0d6c329cb621774788583ee12321863cd4bd9feee1effd60f2ad133", + "sha256:ad9509ffb2396483ceacb1eee9134724443ee45b92141105a4645857244aecc8", + "sha256:bbcba75fe879ad6fd2e0d6a8d937f34a571f116a0e4db37df8079e738ea95c71", + "sha256:c10d85e81d0b9ef87970ecbdbfaeec14a361a7fa947118817fcea8e45335fa46", + "sha256:c15b2271c44da77ee9d822552201180779e5e942f3a71fb74e026bf6172ff287", + "sha256:ca37057625693d097543bd88076ceebeb248291df9d6ca8481349efc0b05dcd0", + "sha256:cc3a145479a76ad0ed646434d09216d33d08eef0d8c9a11f5ae5cdc37caa3540", + "sha256:ccf10f16ab498d20e28bc2b5c1306e9c1512f2840f7b6a67000a517a4b37d5ee", + "sha256:cd464ba806e27ee24a91362ba3621bfc39dbbb8b79f2e1340201615197370f7c", + "sha256:d007aa39a52d62373bd23428ba4a2546eed0e7643d7bf2e41ddcefd54519842c", + "sha256:d0666afbe984f6933fe72cd1f1c3560d8c55880a0bdd728ad774006eb4241ecd", + "sha256:d07502cc14ecd64f52b2a74ebbc106893d9a9717120057ea9ea1fd6568a747e7", + "sha256:d489d9778522fbd0f8d6a5c6e48e3514f11be81cb0a5954bdda06f7e1594b321", + "sha256:df7db76400bf46ec6a0a73192b14c8295bdb9812053f4fe53f4e789f3ea66bbb", + "sha256:e3538bc9fe1b902bef51372462e3d7c96fce2b566642512138a480b7adc9d508", + "sha256:e87fd812899aa78252866ae03a048e77bd11b80fb4878ce27c23cade239b42b2", + "sha256:ecdb8173e6c7aa09eee342ac62e193e6904923bd232e76b4157ac0bfa670609f", + "sha256:f244b8e541f414664889e2c87cac11a07b918cb4b540c36f7ada7bfa76571ea2", + "sha256:f4065145bf69de124accdd17ea5f4dc770da0a6a6e440c53f6e0a8c27b3e635c", + "sha256:f420bfe862fb357a6d76f2065447ef6f484bc489292ac91e29bc65d2d7a2c84d", + "sha256:f6ddd90d9fb4b501c97a4458f1c1720e42432c26cb76d28177c5b5ad4e332601", + "sha256:fa73e8c2656a3653ae6c307b3f4e878a21f87859a9afab228280ddccd7369d71", + "sha256:fadbb8f1d4140825069db3fedbbb843290fd5f5bc0a5dbd7eaf81d91bf1b003b", + "sha256:fb3d0cc5cdb926090748ea60172fa8a213cec728bd6c54eae18b96040fcd6227", + "sha256:fb46bb0f24813e6cede6cc07b1961d4b04f331f7112a23b5e21f567da4ee50aa", + "sha256:fd36c119c5d6551bce374fcb5c19269638f8d09862445f85a5a48596fd59f4bb" + ], + "markers": "python_version >= '3.9'", + "version": "==3.11.16" + }, + "aiosignal": { + "hashes": [ + "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5", + "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54" + ], + "markers": "python_version >= '3.9'", + "version": "==1.3.2" + }, + "annotated-types": { + "hashes": [ + "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", + "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89" + ], + "markers": "python_version >= '3.8'", + "version": "==0.7.0" + }, + "attrs": { + "hashes": [ + "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", + "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b" + ], + "markers": "python_version >= '3.8'", + "version": "==25.3.0" + }, + "blinker": { + "hashes": [ + "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", + "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc" + ], + "markers": "python_version >= '3.9'", + "version": "==1.9.0" + }, + "certifi": { + "hashes": [ + "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", + "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe" + ], + "markers": "python_version >= '3.6'", + "version": "==2025.1.31" + }, + "charset-normalizer": { + "hashes": [ + "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", + "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa", + "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a", + "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", + "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b", + "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", + "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", + "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", + "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", + "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", + "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", + "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", + "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", + "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", + "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", + "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", + "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", + "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", + "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", + "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", + "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e", + "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a", + "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4", + "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca", + "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", + "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", + "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", + "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", + "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", + "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", + "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", + "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", + "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", + "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", + "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", + "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd", + "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c", + "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", + "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", + "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", + "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", + "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824", + "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", + "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf", + "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487", + "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d", + "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd", + "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", + "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534", + "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", + "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", + "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", + "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd", + "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", + "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9", + "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", + "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", + "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d", + "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", + "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", + "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", + "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", + "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", + "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", + "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8", + "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", + "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", + "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", + "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", + "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", + "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", + "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", + "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", + "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", + "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", + "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", + "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", + "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e", + "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6", + "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", + "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", + "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e", + "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", + "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", + "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c", + "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", + "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", + "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089", + "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", + "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e", + "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", + "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616" + ], + "markers": "python_version >= '3.7'", + "version": "==3.4.1" + }, + "click": { + "hashes": [ + "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", + "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a" + ], + "markers": "python_version >= '3.7'", + "version": "==8.1.8" + }, + "dbrepo": { + "hashes": [ + "sha256:55de6a4934010e14a574032b5a5179bf3dac9895ef74e5cd4a221a625a75674b" + ], + "path": "./lib/dbrepo-1.8.0.tar.gz" + }, + "flasgger": { + "hashes": [ + "sha256:ca098e10bfbb12f047acc6299cc70a33851943a746e550d86e65e60d4df245fb" + ], + "index": "pypi", + "version": "==0.9.7.1" + }, + "flask": { + "hashes": [ + "sha256:09c347a92aa7ff4a8e7f3206795f30d826654baf38b873d0744cd571ca609efc", + "sha256:f69fcd559dc907ed196ab9df0e48471709175e696d6e698dd4dbe940f96ce66b" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==2.3.3" + }, + "flask-cors": { + "hashes": [ + "sha256:38364faf1a7a5d0a55bd1d2e2f83ee9e359039182f5e6a029557e1f56d92c09a", + "sha256:493b98e2d1e2f1a4720a7af25693ef2fe32fbafec09a2f72c59f3e475eda61d2" + ], + "index": "pypi", + "version": "==4.0.2" + }, + "flask-httpauth": { + "hashes": [ + "sha256:66568a05bc73942c65f1e2201ae746295816dc009edd84b482c44c758d75097a", + "sha256:a58fedd09989b9975448eef04806b096a3964a7feeebc0a78831ff55685b62b0" + ], + "index": "pypi", + "version": "==4.8.0" + }, + "flask-jwt-extended": { + "hashes": [ + "sha256:52f35bf0985354d7fb7b876e2eb0e0b141aaff865a22ff6cc33d9a18aa987978", + "sha256:8085d6757505b6f3291a2638c84d207e8f0ad0de662d1f46aa2f77e658a0c976" + ], + "index": "pypi", + "markers": "python_version >= '3.9' and python_version < '4'", + "version": "==4.7.1" + }, + "frozenlist": { + "hashes": [ + "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e", + "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf", + "sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6", + "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a", + "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d", + "sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f", + "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28", + "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b", + "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9", + "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2", + "sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec", + "sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2", + "sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c", + "sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336", + "sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4", + "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d", + "sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b", + "sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c", + "sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10", + "sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08", + "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942", + "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8", + "sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f", + "sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10", + "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5", + "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6", + "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21", + "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c", + "sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d", + "sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923", + "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608", + "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de", + "sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17", + "sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0", + "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f", + "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641", + "sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c", + "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a", + "sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0", + "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9", + "sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab", + "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f", + "sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3", + "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a", + "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784", + "sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604", + "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d", + "sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5", + "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03", + "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e", + "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953", + "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee", + "sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d", + "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817", + "sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3", + "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039", + "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f", + "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9", + "sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf", + "sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76", + "sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba", + "sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171", + "sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb", + "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439", + "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631", + "sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972", + "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d", + "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869", + "sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9", + "sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411", + "sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723", + "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2", + "sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b", + "sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99", + "sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e", + "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840", + "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3", + "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb", + "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3", + "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0", + "sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca", + "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45", + "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e", + "sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f", + "sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5", + "sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307", + "sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e", + "sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2", + "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778", + "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a", + "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30", + "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a" + ], + "markers": "python_version >= '3.8'", + "version": "==1.5.0" + }, + "grafana-client": { + "hashes": [ + "sha256:2477a47b923fd0637947e620b0b777c641af18a3025464fa4505783dbf05dfcc", + "sha256:8cb61bb2a87ec07bca10974df276b9a1a95bfdb63f3a696f065692ffc9b8c389" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==4.3.2" + }, + "gunicorn": { + "hashes": [ + "sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d", + "sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==23.0.0" + }, + "h11": { + "hashes": [ + "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", + "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761" + ], + "markers": "python_version >= '3.7'", + "version": "==0.14.0" + }, + "idna": { + "hashes": [ + "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" + ], + "markers": "python_version >= '3.6'", + "version": "==3.10" + }, + "iniconfig": { + "hashes": [ + "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", + "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760" + ], + "markers": "python_version >= '3.8'", + "version": "==2.1.0" + }, + "itsdangerous": { + "hashes": [ + "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", + "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173" + ], + "markers": "python_version >= '3.8'", + "version": "==2.2.0" + }, + "jh2": { + "hashes": [ + "sha256:038091480cd1544e9389b0adbb1b1645a797689dcb68ceae7e45eec96ed24497", + "sha256:0c8e336df8ed1687590695f4469f480eeb4159bf13bb6193791c6530fe114b49", + "sha256:0c9bf2d5e4ef45c1686c6f76935e7ca263f5eae4de92bf5d1873a0e737e4eb7d", + "sha256:0faf6e96f74d27b8ca816b40217904891f91b664ed1c0388737949ceb50ac15d", + "sha256:10ea7f497e6226372e1d4fdbf42c8381f4887819a643ab930bff4072ad298d84", + "sha256:11650f7ed77ee1df30f25d6b3b74b2fa1c94124e074fd455abafea3cbc913d53", + "sha256:12ead3ee3e9c7caa00356b528a5cc7fe210fbe2060628af6e19ed76b8416572e", + "sha256:136b3c5b08883681fcb58f12393a5bbfa422d6e2d5ba887e263e776874276bc6", + "sha256:17d6e1691154ea9f726e43dcb717df48e56c66b5a01c90ad675c6494c36e5be1", + "sha256:19cb987915cc0d321746a12f2a693d087ffb721c37ac9a153cc088c57d4d90eb", + "sha256:1cdf15de698c4026e64fd914fead3180e52bf2a7bcbe44a3392404582dbf2d22", + "sha256:1e81e1c64e33506b8508ba5e3c7c139b2577e78b079c2c16a8e7a02a161f1080", + "sha256:2226c76e4ff2149c5d9f94bed22bf9c4f3411d38cc53d4a7ddfbe0899c8b558c", + "sha256:2837412fb7b684c6ce7392c8bc57440c6dbadaf1bde7a53144381f7df7083c1c", + "sha256:293f0f3da3c391e997e0d55fdb85540e98a8b0406622bb4ba57fb7617697f31e", + "sha256:2b9cc6c0239215a349d28c192fa4c4e7a7348eee7980531525c01bffe39eea80", + "sha256:2f3ad679f84ff236a0d7b71ddc4b3c09fe467abee2f1a86671f0cd417be5352b", + "sha256:358cad2f328c52c15756cf32b0ad17afb0d617e7cdfe93d59aa2616966d825b7", + "sha256:3663712305b509f79c002c8c0ca9994f716cadba576f5a59632dda1aec1ca8c6", + "sha256:41794820ccca039ca2ead6245f30b34601dd1456eee5b5dde620672bb989e79d", + "sha256:44b7e64aff542471c474c24f771eae5efd9152da02a12556f7cb7607020e1420", + "sha256:45770eb0990166026538d3c2fd7d92f17cfde13ca6567570c4baec3ce9162936", + "sha256:498060078a4d1b458e9381fefb027d85329397b50d65287712b3d48233e20836", + "sha256:4c2f18f337c2393f84e45e5011c8b02697b81638b1cec49da60a01b9ed067695", + "sha256:5162d6e475d2762035fb8ea25982bcbec6c58715e33bd0951499f743cd90b110", + "sha256:51e8c890bb59008c95b3a552cefd8bd9ce50a7466a6c920a78cf586e885d7449", + "sha256:56ad3839ac6ac5fd3d023cf59d4b04264b74bb4cb44c0780faf51d6b5ff38fbc", + "sha256:5821638ef0d7c973071810a6786f59b305172197f7e7e469a2ce169e7f4978e3", + "sha256:5ac1b2d379f4d40c13dcce537e69704452943cddbe991fd54a84fdb2da9026d5", + "sha256:5b465d4311b0429fe6fa85df8e2cfcb038c9fface95396dd14e838ecabaaadf2", + "sha256:5d8656b98057329bd03d968aac8d5198389cf51517511295cfc4cb827a507e39", + "sha256:5dcfb3e823ef4b91b70b92848570d1d8cfd584304bd2bd54272dc100c9494def", + "sha256:5e40d23ea43f683f3a7c032dde391104f609b05c21b6d284101120b51dbd50c1", + "sha256:63a01522bde161c713f7fa5ee5d850fee6386fc386073490ebcd438f14579cf2", + "sha256:6b2a3d7756035dde13571f4ad232629b78b7f35c2cd5fda7b464079fc697db3a", + "sha256:6b3be1a6bf6c965aea3b4e3a40df9d2c134c516d89c76cf2b6c81f67e6c5c6ed", + "sha256:6c7bea3357f2dc653756e6da55f66cd21c73d3875c8f3dc4e8d196a876252de0", + "sha256:6e6c8e229507cf29333a2f491cbaa7dff5b8a4a3e613af8090ccce9ce3e4f7a0", + "sha256:6fad27f2a63884ee45d491aebec4b1f38752cd6aaccc625038c21e7f43c02c49", + "sha256:71bfef52547c2b8b145897fa8d1b5142bc52313cfa38c0742e0ef755f0d09c60", + "sha256:72370d312323282b1bf74426e53fae861a310d7ae519b419da46673c38e7d147", + "sha256:76c7d36043a9c478b0c846fcec7da5cb095983722473e503e0122ccd170182b5", + "sha256:78d8a81ef51edb9a2f278a6fb278789b49e304b12bb21bccf2fe7e344f71a9fb", + "sha256:798a6b159ce32181a5e7ab7611c17d1080e74a5541fec47f961b728dab25a76f", + "sha256:7e370567f66a57e2c0e3ae2afcc6f126e1d6babd36831cfd0caad279b05c1c88", + "sha256:8004b845f606b95a8b17efa112aa10b327e46e95dcda604a257b4633d4ed45c8", + "sha256:80b20bf9ea4e709b3b9ae364ac298dfa872b084c186e5c1d60b0b79c79a7ee7e", + "sha256:87303f4bb1b493997f911a4f126123ccd2827d3a2e7dd2390cc6143fbc75805b", + "sha256:8d423f4631395b92dceda39f481a463498131ac02a58581124a44495491f715b", + "sha256:94ee262192db50fb9c069a0be7bb1a426fb1b43af26ce12bf4c6c30e13f46b56", + "sha256:960e4be2e7de340300ab4bcc2b45bed46be1d62330575b8265e6602dbcb9a14c", + "sha256:99397d5e1da6b345cec3e6125e2902b0e6864eb8eaa4be43a2013f059c502c93", + "sha256:9abbb8c1bad08817bad62ae1ea76c01bdbd0ee8c827d05f3ba038c9f6d6f14bb", + "sha256:9c0b8fadf80bc70d341032f92702bda1b0ed78c01e9c495f0df701938c99bcf5", + "sha256:9f977da9abae170eebdcf02bda33727c342fad5dcdbc08498bfdfb6cc6c65489", + "sha256:a6be712ca39d5e9c89b705bc9800be36739436fefb8d0b52b2d332f7d6d22a01", + "sha256:aa434418d6ee44b0ba3a5a407bc9e1543cf496328f43f149e9b58f74a63d5c21", + "sha256:ac4f778e32f7de0ba63346893a4af87c2280ffc1783f594a117be51d908a10da", + "sha256:ac85d65ee369c09b2904b55078ad589961e2e2e03c810963d35a26e6a3931425", + "sha256:ad5d78c664d39960435d4162db31117c8945ba74fb0c414e79ba85a8bdeafdec", + "sha256:ad91f57c3485d87a8edee558dafab0f08c716857d748731c0998dcefe9d3fd5f", + "sha256:afd255d42b340036883ca95bded553b29065b064e2fe5db64ad5988517db9694", + "sha256:b1c2c74f100a0c2110a8e30445554ae331860d32f145c60a2a1e1c27702022a2", + "sha256:b49a8c71378d40d43c6a56eaa536d7823baa43c27c93e082aeb60a9717be0c10", + "sha256:b5f52611323e8e35705e6750a760f32165b41c052d22da154ae343871e7cd50d", + "sha256:b6bf99ae529ac359263269710356d3ddb173c15d8f8dc8849ae794ab811e5cd0", + "sha256:ba361bf87c4701f11241be92c99ef5cf916865dd225955cccb2376bf76717b3c", + "sha256:bc351aa2158575e68943d8e1d5531719ad86bf6607776627ed5a1a60657664af", + "sha256:bd6eb7b1e12e4dd0b75cab1b023272f1333494add5ad61deedac738af1ffeede", + "sha256:bf8852595f5e2d2b072e24c29394b5aca7fba96ecc8656d56660535f9e9872c9", + "sha256:c1dd66541569a2bdbe92589cc96a89f470b20d168f2238fd463e1b59ee3e2d49", + "sha256:c36a7a004cba4e370d0675826eeefe4e42a256638b6b1432263ddb4af317bc02", + "sha256:c886cda61da4d39010be84802bed11bc75f03e8a6094cc18016957a2c80254d4", + "sha256:cc7aa83946f80c66a5d2dea7e165f15aa3eb21e7b74b24d8f850afc0d44bb00e", + "sha256:cea9c4bef70d1358bafec6019164abce362f4de15d79d1ecd64ae31c1749d77a", + "sha256:cfe1951e80869695857986be104a40a1e7fa8ec7de05f86bcbd7bd20854be764", + "sha256:d36cf6f139da3279644794fcfda18af425c8bb122ef9c2e7c762a937bbf7b0f4", + "sha256:d81308faaa9393b7e6ed20718d465c4c2b73c24d5e4826024961acf4b87b1524", + "sha256:db51ea1f9c5ac790848bc271fcdf4108ad1b77a77c6949a96320477962cf7ba5", + "sha256:dd05c18c920a15e00d7a52df37bffd3930fe2c004c690f9422b20e12077e6dbd", + "sha256:df05918a11e1db0198d00486e36673b4b4a89390e4458ff9479b4908dde357ac", + "sha256:e4c31dccf6be131709e545d0258eb5b75c5fac304857ad3976331c6740e8b9d6", + "sha256:e60954d673040430802b29fe5bba698e262182b5ba5f302ff4458e39f8101881", + "sha256:e60e2d2c88a0552e61c37172fe377f6a8abf479130a445314886de4a360ba940", + "sha256:e786f773ddc153846b2ebdb854011cfd1f7c874b8ee79cced3706801341c9f5d", + "sha256:e7cd91548fb95b69edd376f5204e27115ac7d093ec7d80066123a5bdb31c71d9", + "sha256:eaef2ea4f5602aefaaf3d6e8235f3b9ffde35aff15aac1c16cc802f6bbf0a3b5", + "sha256:ec8c5ea93a03775fbadd08462200cf34ce617ec75a032abfa44fd6d3a00e5424", + "sha256:eddeb8574bc9d9abb8491d4a46b60e553c2cea235b80373756acb06568101175", + "sha256:eeb300b0e4b428aab2f70d785cad4306529262af6de8c8c5fe6a4b41a674a434", + "sha256:f39d71ece8e97cf069e4154868eaac1256b133fe23e0459829432e4bb6406472", + "sha256:f4840ddad2b9d53710e92361391944da89e3576641a290066a1719520059247c", + "sha256:f70723a00bcbce0f9a216853139955be45da35741335eb3afead304e77662560", + "sha256:f829cf2ba5b553e6529d6238928c07096f1feb47f4ad536b7f06bca6cc77173f", + "sha256:f96386910467725895f7972939a6faabd6e96b1de0cc2c092e4bd2c40e956e25", + "sha256:fe259a9d6f555bc79aed9bb4b9a7fff73db443b4c483e4a81a428c8a2860428b" + ], + "markers": "python_version >= '3.7'", + "version": "==5.0.8" + }, + "jinja2": { + "hashes": [ + "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", + "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" + ], + "markers": "python_version >= '3.7'", + "version": "==3.1.6" + }, + "jsonschema": { + "hashes": [ + "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4", + "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566" + ], + "markers": "python_version >= '3.8'", + "version": "==4.23.0" + }, + "jsonschema-specifications": { + "hashes": [ + "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272", + "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf" + ], + "markers": "python_version >= '3.9'", + "version": "==2024.10.1" + }, + "markupsafe": { + "hashes": [ + "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", + "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", + "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0", + "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", + "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", + "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13", + "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", + "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", + "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", + "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", + "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0", + "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", + "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", + "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", + "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", + "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff", + "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", + "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", + "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", + "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", + "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", + "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", + "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", + "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", + "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a", + "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", + "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", + "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", + "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", + "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144", + "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f", + "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", + "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", + "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", + "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", + "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", + "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", + "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", + "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", + "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", + "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", + "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", + "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", + "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", + "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", + "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", + "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", + "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", + "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29", + "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", + "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", + "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", + "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", + "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", + "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", + "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a", + "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178", + "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", + "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", + "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", + "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50" + ], + "markers": "python_version >= '3.9'", + "version": "==3.0.2" + }, + "mistune": { + "hashes": [ + "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", + "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0" + ], + "markers": "python_version >= '3.8'", + "version": "==3.1.3" + }, + "multidict": { + "hashes": [ + "sha256:0085b0afb2446e57050140240a8595846ed64d1cbd26cef936bfab3192c673b8", + "sha256:042028348dc5a1f2be6c666437042a98a5d24cee50380f4c0902215e5ec41844", + "sha256:05fefbc3cddc4e36da209a5e49f1094bbece9a581faa7f3589201fd95df40e5d", + "sha256:063be88bd684782a0715641de853e1e58a2f25b76388538bd62d974777ce9bc2", + "sha256:07bfa8bc649783e703263f783f73e27fef8cd37baaad4389816cf6a133141331", + "sha256:08549895e6a799bd551cf276f6e59820aa084f0f90665c0f03dd3a50db5d3c48", + "sha256:095a2eabe8c43041d3e6c2cb8287a257b5f1801c2d6ebd1dd877424f1e89cf29", + "sha256:0b183a959fb88ad1be201de2c4bdf52fa8e46e6c185d76201286a97b6f5ee65c", + "sha256:0c383d28857f66f5aebe3e91d6cf498da73af75fbd51cedbe1adfb85e90c0460", + "sha256:0d57a01a2a9fa00234aace434d8c131f0ac6e0ac6ef131eda5962d7e79edfb5b", + "sha256:0dc25a3293c50744796e87048de5e68996104d86d940bb24bc3ec31df281b191", + "sha256:0e5a644e50ef9fb87878d4d57907f03a12410d2aa3b93b3acdf90a741df52c49", + "sha256:0f249badb360b0b4d694307ad40f811f83df4da8cef7b68e429e4eea939e49dd", + "sha256:0f74f2fc51555f4b037ef278efc29a870d327053aba5cb7d86ae572426c7cccc", + "sha256:125dd82b40f8c06d08d87b3510beaccb88afac94e9ed4a6f6c71362dc7dbb04b", + "sha256:13551d0e2d7201f0959725a6a769b6f7b9019a168ed96006479c9ac33fe4096b", + "sha256:14ed9ed1bfedd72a877807c71113deac292bf485159a29025dfdc524c326f3e1", + "sha256:163f4604e76639f728d127293d24c3e208b445b463168af3d031b92b0998bb90", + "sha256:19e2819b0b468174de25c0ceed766606a07cedeab132383f1e83b9a4e96ccb4f", + "sha256:1e2a2193d3aa5cbf5758f6d5680a52aa848e0cf611da324f71e5e48a9695cc86", + "sha256:1f3c099d3899b14e1ce52262eb82a5f5cb92157bb5106bf627b618c090a0eadc", + "sha256:214207dcc7a6221d9942f23797fe89144128a71c03632bf713d918db99bd36de", + "sha256:2325105e16d434749e1be8022f942876a936f9bece4ec41ae244e3d7fae42aaf", + "sha256:2529ddbdaa424b2c6c2eb668ea684dd6b75b839d0ad4b21aad60c168269478d7", + "sha256:256d431fe4583c5f1e0f2e9c4d9c22f3a04ae96009b8cfa096da3a8723db0a16", + "sha256:25bb96338512e2f46f615a2bb7c6012fe92a4a5ebd353e5020836a7e33120349", + "sha256:2e87f1926e91855ae61769ba3e3f7315120788c099677e0842e697b0bfb659f2", + "sha256:2fc6af8e39f7496047c7876314f4317736eac82bf85b54c7c76cf1a6f8e35d98", + "sha256:3157126b028c074951839233647bd0e30df77ef1fedd801b48bdcad242a60f4e", + "sha256:32c9b4878f48be3e75808ea7e499d6223b1eea6d54c487a66bc10a1871e3dc6a", + "sha256:32ed748ff9ac682eae7859790d3044b50e3076c7d80e17a44239683769ff485e", + "sha256:3501621d5e86f1a88521ea65d5cad0a0834c77b26f193747615b7c911e5422d2", + "sha256:437c33561edb6eb504b5a30203daf81d4a9b727e167e78b0854d9a4e18e8950b", + "sha256:48d39b1824b8d6ea7de878ef6226efbe0773f9c64333e1125e0efcfdd18a24c7", + "sha256:4ac3fcf9a2d369bd075b2c2965544036a27ccd277fc3c04f708338cc57533081", + "sha256:4ccfd74957ef53fa7380aaa1c961f523d582cd5e85a620880ffabd407f8202c0", + "sha256:52b05e21ff05729fbea9bc20b3a791c3c11da61649ff64cce8257c82a020466d", + "sha256:5389445f0173c197f4a3613713b5fb3f3879df1ded2a1a2e4bc4b5b9c5441b7e", + "sha256:5c5e7d2e300d5cb3b2693b6d60d3e8c8e7dd4ebe27cd17c9cb57020cac0acb80", + "sha256:5d26547423e5e71dcc562c4acdc134b900640a39abd9066d7326a7cc2324c530", + "sha256:5dd7106d064d05896ce28c97da3f46caa442fe5a43bc26dfb258e90853b39b44", + "sha256:5f8cb1329f42fadfb40d6211e5ff568d71ab49be36e759345f91c69d1033d633", + "sha256:61d5541f27533f803a941d3a3f8a3d10ed48c12cf918f557efcbf3cd04ef265c", + "sha256:639556758c36093b35e2e368ca485dada6afc2bd6a1b1207d85ea6dfc3deab27", + "sha256:641cf2e3447c9ecff2f7aa6e9eee9eaa286ea65d57b014543a4911ff2799d08a", + "sha256:6aed763b6a1b28c46c055692836879328f0b334a6d61572ee4113a5d0c859872", + "sha256:6e2a2d6749e1ff2c9c76a72c6530d5baa601205b14e441e6d98011000f47a7ac", + "sha256:7243c5a6523c5cfeca76e063efa5f6a656d1d74c8b1fc64b2cd1e84e507f7e2a", + "sha256:76b34c12b013d813e6cb325e6bd4f9c984db27758b16085926bbe7ceeaace626", + "sha256:781b5dd1db18c9e9eacc419027b0acb5073bdec9de1675c0be25ceb10e2ad133", + "sha256:7c611345bbe7cb44aabb877cb94b63e86f2d0db03e382667dbd037866d44b4f8", + "sha256:83b78c680d4b15d33042d330c2fa31813ca3974197bddb3836a5c635a5fd013f", + "sha256:84e87a7d75fa36839a3a432286d719975362d230c70ebfa0948549cc38bd5b46", + "sha256:89b3857652183b8206a891168af47bac10b970d275bba1f6ee46565a758c078d", + "sha256:8cd1a0644ccaf27e9d2f6d9c9474faabee21f0578fe85225cc5af9a61e1653df", + "sha256:8de4d42dffd5ced9117af2ce66ba8722402541a3aa98ffdf78dde92badb68932", + "sha256:94a7bb972178a8bfc4055db80c51efd24baefaced5e51c59b0d598a004e8305d", + "sha256:98aa8325c7f47183b45588af9c434533196e241be0a4e4ae2190b06d17675c02", + "sha256:9e658d1373c424457ddf6d55ec1db93c280b8579276bebd1f72f113072df8a5d", + "sha256:9f49585f4abadd2283034fc605961f40c638635bc60f5162276fec075f2e37a4", + "sha256:9f6cad071960ba1914fa231677d21b1b4a3acdcce463cee41ea30bc82e6040cf", + "sha256:a0cc398350ef31167e03f3ca7c19313d4e40a662adcb98a88755e4e861170bdd", + "sha256:a1133414b771619aa3c3000701c11b2e4624a7f492f12f256aedde97c28331a2", + "sha256:a33273a541f1e1a8219b2a4ed2de355848ecc0254264915b9290c8d2de1c74e1", + "sha256:a3c0ff89fe40a152e77b191b83282c9664357dce3004032d42e68c514ceff27e", + "sha256:a49994481b99cd7dedde07f2e7e93b1d86c01c0fca1c32aded18f10695ae17eb", + "sha256:abf5b17bc0cf626a8a497d89ac691308dbd825d2ac372aa990b1ca114e470151", + "sha256:ac380cacdd3b183338ba63a144a34e9044520a6fb30c58aa14077157a033c13e", + "sha256:ad81012b24b88aad4c70b2cbc2dad84018783221b7f923e926f4690ff8569da3", + "sha256:b2c00ad31fbc2cbac85d7d0fcf90853b2ca2e69d825a2d3f3edb842ef1544a2c", + "sha256:b4c153863dd6569f6511845922c53e39c8d61f6e81f228ad5443e690fca403de", + "sha256:b4f3d66dd0354b79761481fc15bdafaba0b9d9076f1f42cc9ce10d7fcbda205a", + "sha256:b99aac6bb2c37db336fa03a39b40ed4ef2818bf2dfb9441458165ebe88b793af", + "sha256:b9f6392d98c0bd70676ae41474e2eecf4c7150cb419237a41f8f96043fcb81d1", + "sha256:c537da54ce4ff7c15e78ab1292e5799d0d43a2108e006578a57f531866f64025", + "sha256:ca23db5fb195b5ef4fd1f77ce26cadefdf13dba71dab14dadd29b34d457d7c44", + "sha256:cc826b9a8176e686b67aa60fd6c6a7047b0461cae5591ea1dc73d28f72332a8a", + "sha256:cca83a629f77402cfadd58352e394d79a61c8015f1694b83ab72237ec3941f88", + "sha256:cf8d370b2fea27fb300825ec3984334f7dd54a581bde6456799ba3776915a656", + "sha256:d1175b0e0d6037fab207f05774a176d71210ebd40b1c51f480a04b65ec5c786d", + "sha256:d1996ee1330e245cd3aeda0887b4409e3930524c27642b046e4fae88ffa66c5e", + "sha256:d5a36953389f35f0a4e88dc796048829a2f467c9197265504593f0e420571547", + "sha256:da51d8928ad8b4244926fe862ba1795f0b6e68ed8c42cd2f822d435db9c2a8f4", + "sha256:e16e7297f29a544f49340012d6fc08cf14de0ab361c9eb7529f6a57a30cbfda1", + "sha256:e25b11a0417475f093d0f0809a149aff3943c2c56da50fdf2c3c88d57fe3dfbd", + "sha256:e4371591e621579cb6da8401e4ea405b33ff25a755874a3567c4075ca63d56e2", + "sha256:e653d36b1bf48fa78c7fcebb5fa679342e025121ace8c87ab05c1cefd33b34fc", + "sha256:e7d91a230c7f8af86c904a5a992b8c064b66330544693fd6759c3d6162382ecf", + "sha256:e851e6363d0dbe515d8de81fd544a2c956fdec6f8a049739562286727d4a00c3", + "sha256:ef7d48207926edbf8b16b336f779c557dd8f5a33035a85db9c4b0febb0706817", + "sha256:f7716f7e7138252d88607228ce40be22660d6608d20fd365d596e7ca0738e019", + "sha256:facaf11f21f3a4c51b62931feb13310e6fe3475f85e20d9c9fdce0d2ea561b87" + ], + "markers": "python_version >= '3.9'", + "version": "==6.2.0" + }, + "niquests": { + "hashes": [ + "sha256:68e0a7e9f338466b3606945fffd11f75e3c90af7498aa9336ef03812323b7e36", + "sha256:86e484c2c60444aa96069c15f6295af6e25a8bad50781e1326df1b5c7ab48339" + ], + "markers": "python_version >= '3.7'", + "version": "==3.14.0" + }, + "numpy": { + "hashes": [ + "sha256:05c076d531e9998e7e694c36e8b349969c56eadd2cdcd07242958489d79a7286", + "sha256:0d54974f9cf14acf49c60f0f7f4084b6579d24d439453d5fc5805d46a165b542", + "sha256:11c43995255eb4127115956495f43e9343736edb7fcdb0d973defd9de14cd84f", + "sha256:188dcbca89834cc2e14eb2f106c96d6d46f200fe0200310fc29089657379c58d", + "sha256:1974afec0b479e50438fc3648974268f972e2d908ddb6d7fb634598cdb8260a0", + "sha256:1cf4e5c6a278d620dee9ddeb487dc6a860f9b199eadeecc567f777daace1e9e7", + "sha256:207a2b8441cc8b6a2a78c9ddc64d00d20c303d79fba08c577752f080c4007ee3", + "sha256:218f061d2faa73621fa23d6359442b0fc658d5b9a70801373625d958259eaca3", + "sha256:2aad3c17ed2ff455b8eaafe06bcdae0062a1db77cb99f4b9cbb5f4ecb13c5146", + "sha256:2fa8fa7697ad1646b5c93de1719965844e004fcad23c91228aca1cf0800044a1", + "sha256:31504f970f563d99f71a3512d0c01a645b692b12a63630d6aafa0939e52361e6", + "sha256:3387dd7232804b341165cedcb90694565a6015433ee076c6754775e85d86f1fc", + "sha256:4ba5054787e89c59c593a4169830ab362ac2bee8a969249dc56e5d7d20ff8df9", + "sha256:4f92084defa704deadd4e0a5ab1dc52d8ac9e8a8ef617f3fbb853e79b0ea3592", + "sha256:65ef3468b53269eb5fdb3a5c09508c032b793da03251d5f8722b1194f1790c00", + "sha256:6f527d8fdb0286fd2fd97a2a96c6be17ba4232da346931d967a0630050dfd298", + "sha256:7051ee569db5fbac144335e0f3b9c2337e0c8d5c9fee015f259a5bd70772b7e8", + "sha256:7716e4a9b7af82c06a2543c53ca476fa0b57e4d760481273e09da04b74ee6ee2", + "sha256:79bd5f0a02aa16808fcbc79a9a376a147cc1045f7dfe44c6e7d53fa8b8a79392", + "sha256:7a4e84a6283b36632e2a5b56e121961f6542ab886bc9e12f8f9818b3c266bfbb", + "sha256:8120575cb4882318c791f839a4fd66161a6fa46f3f0a5e613071aae35b5dd8f8", + "sha256:81413336ef121a6ba746892fad881a83351ee3e1e4011f52e97fba79233611fd", + "sha256:8146f3550d627252269ac42ae660281d673eb6f8b32f113538e0cc2a9aed42b9", + "sha256:879cf3a9a2b53a4672a168c21375166171bc3932b7e21f622201811c43cdd3b0", + "sha256:892c10d6a73e0f14935c31229e03325a7b3093fafd6ce0af704be7f894d95687", + "sha256:92bda934a791c01d6d9d8e038363c50918ef7c40601552a58ac84c9613a665bc", + "sha256:9ba03692a45d3eef66559efe1d1096c4b9b75c0986b5dff5530c378fb8331d4f", + "sha256:9eeea959168ea555e556b8188da5fa7831e21d91ce031e95ce23747b7609f8a4", + "sha256:a0258ad1f44f138b791327961caedffbf9612bfa504ab9597157806faa95194a", + "sha256:a761ba0fa886a7bb33c6c8f6f20213735cb19642c580a931c625ee377ee8bd39", + "sha256:a7b9084668aa0f64e64bd00d27ba5146ef1c3a8835f3bd912e7a9e01326804c4", + "sha256:a84eda42bd12edc36eb5b53bbcc9b406820d3353f1994b6cfe453a33ff101775", + "sha256:ab2939cd5bec30a7430cbdb2287b63151b77cf9624de0532d629c9a1c59b1d5c", + "sha256:ac0280f1ba4a4bfff363a99a6aceed4f8e123f8a9b234c89140f5e894e452ecd", + "sha256:adf8c1d66f432ce577d0197dceaac2ac00c0759f573f28516246351c58a85020", + "sha256:b4adfbbc64014976d2f91084915ca4e626fbf2057fb81af209c1a6d776d23e3d", + "sha256:bb649f8b207ab07caebba230d851b579a3c8711a851d29efe15008e31bb4de24", + "sha256:bce43e386c16898b91e162e5baaad90c4b06f9dcbe36282490032cec98dc8ae7", + "sha256:bd3ad3b0a40e713fc68f99ecfd07124195333f1e689387c180813f0e94309d6f", + "sha256:c3f7ac96b16955634e223b579a3e5798df59007ca43e8d451a0e6a50f6bfdfba", + "sha256:cf28633d64294969c019c6df4ff37f5698e8326db68cc2b66576a51fad634880", + "sha256:d0f35b19894a9e08639fd60a1ec1978cb7f5f7f1eace62f38dd36be8aecdef4d", + "sha256:db1f1c22173ac1c58db249ae48aa7ead29f534b9a948bc56828337aa84a32ed6", + "sha256:dbe512c511956b893d2dacd007d955a3f03d555ae05cfa3ff1c1ff6df8851854", + "sha256:df2f57871a96bbc1b69733cd4c51dc33bea66146b8c63cacbfed73eec0883017", + "sha256:e2f085ce2e813a50dfd0e01fbfc0c12bbe5d2063d99f8b29da30e544fb6483b8", + "sha256:e642d86b8f956098b564a45e6f6ce68a22c2c97a04f5acd3f221f57b8cb850ae", + "sha256:e9e0a277bb2eb5d8a7407e14688b85fd8ad628ee4e0c7930415687b6564207a4", + "sha256:ea2bb7e2ae9e37d96835b3576a4fa4b3a97592fbea8ef7c3587078b0068b8f09", + "sha256:ee4d528022f4c5ff67332469e10efe06a267e32f4067dc76bb7e2cddf3cd25ff", + "sha256:f05d4198c1bacc9124018109c5fba2f3201dbe7ab6e92ff100494f236209c960", + "sha256:f34dc300df798742b3d06515aa2a0aee20941c13579d7a2f2e10af01ae4901ee", + "sha256:f4162988a360a29af158aeb4a2f4f09ffed6a969c9776f8f3bdee9b06a8ab7e5", + "sha256:f486038e44caa08dbd97275a9a35a283a8f1d2f0ee60ac260a1790e76660833c", + "sha256:f7de08cbe5551911886d1ab60de58448c6df0f67d9feb7d1fb21e9875ef95e91" + ], + "markers": "python_version >= '3.10'", + "version": "==2.2.4" + }, + "packaging": { + "hashes": [ + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" + ], + "markers": "python_version >= '3.8'", + "version": "==24.2" + }, + "pandas": { + "hashes": [ + "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", + "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", + "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5", + "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", + "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", + "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32", + "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea", + "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", + "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f", + "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348", + "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", + "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", + "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5", + "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e", + "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", + "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645", + "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", + "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30", + "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", + "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", + "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", + "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3", + "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039", + "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", + "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd", + "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761", + "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", + "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57", + "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c", + "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c", + "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", + "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", + "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", + "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42", + "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", + "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39", + "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc", + "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698", + "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed", + "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", + "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", + "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319" + ], + "markers": "python_version >= '3.9'", + "version": "==2.2.3" + }, + "pika": { + "hashes": [ + "sha256:0779a7c1fafd805672796085560d290213a465e4f6f76a6fb19e378d8041a14f", + "sha256:b2a327ddddf8570b4965b3576ac77091b850262d34ce8c1d8cb4e4146aa4145f" + ], + "markers": "python_version >= '3.7'", + "version": "==1.3.2" + }, + "pluggy": { + "hashes": [ + "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", + "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669" + ], + "markers": "python_version >= '3.8'", + "version": "==1.5.0" + }, + "prometheus-client": { + "hashes": [ + "sha256:252505a722ac04b0456be05c05f75f45d760c2911ffc45f2a06bcaed9f3ae3fb", + "sha256:594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301" + ], + "markers": "python_version >= '3.8'", + "version": "==0.21.1" + }, + "prometheus-flask-exporter": { + "hashes": [ + "sha256:41fc9bbd7d48cc958ed8384aacf60c3621d9e903768be61c4e7f0c63872eaf1a", + "sha256:94922a636d4c1d8b68e1ee605c30a23e9bbb0b21756df8222aa919634871784c" + ], + "index": "pypi", + "version": "==0.23.2" + }, + "propcache": { + "hashes": [ + "sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e", + "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b", + "sha256:069e7212890b0bcf9b2be0a03afb0c2d5161d91e1bf51569a64f629acc7defbf", + "sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b", + "sha256:0c3c3a203c375b08fd06a20da3cf7aac293b834b6f4f4db71190e8422750cca5", + "sha256:0c86e7ceea56376216eba345aa1fc6a8a6b27ac236181f840d1d7e6a1ea9ba5c", + "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c", + "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a", + "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf", + "sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8", + "sha256:1eb34d90aac9bfbced9a58b266f8946cb5935869ff01b164573a7634d39fbcb5", + "sha256:1f6cc0ad7b4560e5637eb2c994e97b4fa41ba8226069c9277eb5ea7101845b42", + "sha256:27c6ac6aa9fc7bc662f594ef380707494cb42c22786a558d95fcdedb9aa5d035", + "sha256:2d219b0dbabe75e15e581fc1ae796109b07c8ba7d25b9ae8d650da582bed01b0", + "sha256:2fce1df66915909ff6c824bbb5eb403d2d15f98f1518e583074671a30fe0c21e", + "sha256:319fa8765bfd6a265e5fa661547556da381e53274bc05094fc9ea50da51bfd46", + "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d", + "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24", + "sha256:3e19ea4ea0bf46179f8a3652ac1426e6dcbaf577ce4b4f65be581e237340420d", + "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de", + "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf", + "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7", + "sha256:43593c6772aa12abc3af7784bff4a41ffa921608dd38b77cf1dfd7f5c4e71371", + "sha256:47ef24aa6511e388e9894ec16f0fbf3313a53ee68402bc428744a367ec55b833", + "sha256:4cf9e93a81979f1424f1a3d155213dc928f1069d697e4353edb8a5eba67c6259", + "sha256:4d0dfdd9a2ebc77b869a0b04423591ea8823f791293b527dc1bb896c1d6f1136", + "sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25", + "sha256:58aa11f4ca8b60113d4b8e32d37e7e78bd8af4d1a5b5cb4979ed856a45e62005", + "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef", + "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7", + "sha256:5b9145c35cc87313b5fd480144f8078716007656093d23059e8993d3a8fa730f", + "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53", + "sha256:5cdb0f3e1eb6dfc9965d19734d8f9c481b294b5274337a8cb5cb01b462dcb7e0", + "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb", + "sha256:603f1fe4144420374f1a69b907494c3acbc867a581c2d49d4175b0de7cc64566", + "sha256:61014615c1274df8da5991a1e5da85a3ccb00c2d4701ac6f3383afd3ca47ab0a", + "sha256:64a956dff37080b352c1c40b2966b09defb014347043e740d420ca1eb7c9b908", + "sha256:668ddddc9f3075af019f784456267eb504cb77c2c4bd46cc8402d723b4d200bf", + "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458", + "sha256:6f173bbfe976105aaa890b712d1759de339d8a7cef2fc0a1714cc1a1e1c47f64", + "sha256:71ebe3fe42656a2328ab08933d420df5f3ab121772eef78f2dc63624157f0ed9", + "sha256:730178f476ef03d3d4d255f0c9fa186cb1d13fd33ffe89d39f2cda4da90ceb71", + "sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b", + "sha256:7f30241577d2fef2602113b70ef7231bf4c69a97e04693bde08ddab913ba0ce5", + "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037", + "sha256:82de5da8c8893056603ac2d6a89eb8b4df49abf1a7c19d536984c8dd63f481d5", + "sha256:83be47aa4e35b87c106fc0c84c0fc069d3f9b9b06d3c494cd404ec6747544894", + "sha256:8638f99dca15b9dff328fb6273e09f03d1c50d9b6512f3b65a4154588a7595fe", + "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757", + "sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3", + "sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976", + "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6", + "sha256:916cd229b0150129d645ec51614d38129ee74c03293a9f3f17537be0029a9641", + "sha256:9532ea0b26a401264b1365146c440a6d78269ed41f83f23818d4b79497aeabe7", + "sha256:967a8eec513dbe08330f10137eacb427b2ca52118769e82ebcfcab0fba92a649", + "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120", + "sha256:9979643ffc69b799d50d3a7b72b5164a2e97e117009d7af6dfdd2ab906cb72cd", + "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40", + "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e", + "sha256:9e64e948ab41411958670f1093c0a57acfdc3bee5cf5b935671bbd5313bcf229", + "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c", + "sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7", + "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111", + "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654", + "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f", + "sha256:a461959ead5b38e2581998700b26346b78cd98540b5524796c175722f18b0294", + "sha256:a75801768bbe65499495660b777e018cbe90c7980f07f8aa57d6be79ea6f71da", + "sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f", + "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7", + "sha256:b0313e8b923b3814d1c4a524c93dfecea5f39fa95601f6a9b1ac96cd66f89ea0", + "sha256:b23c11c2c9e6d4e7300c92e022046ad09b91fd00e36e83c44483df4afa990073", + "sha256:b303b194c2e6f171cfddf8b8ba30baefccf03d36a4d9cab7fd0bb68ba476a3d7", + "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11", + "sha256:bd39c92e4c8f6cbf5f08257d6360123af72af9f4da75a690bef50da77362d25f", + "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27", + "sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70", + "sha256:c66d8ccbc902ad548312b96ed8d5d266d0d2c6d006fd0f66323e9d8f2dd49be7", + "sha256:cd6a55f65241c551eb53f8cf4d2f4af33512c39da5d9777694e9d9c60872f519", + "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5", + "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180", + "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f", + "sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee", + "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18", + "sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815", + "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e", + "sha256:e861ad82892408487be144906a368ddbe2dc6297074ade2d892341b35c59844a", + "sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7", + "sha256:ed5f6d2edbf349bd8d630e81f474d33d6ae5d07760c44d33cd808e2f5c8f4ae6", + "sha256:ef2e4e91fb3945769e14ce82ed53007195e616a63aa43b40fb7ebaaf907c8d4c", + "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc", + "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8", + "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98", + "sha256:f35c7070eeec2cdaac6fd3fe245226ed2a6292d3ee8c938e5bb645b434c5f256", + "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5", + "sha256:f6f1324db48f001c2ca26a25fa25af60711e09b9aaf4b28488602776f4f9a744", + "sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723", + "sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277", + "sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5" + ], + "markers": "python_version >= '3.9'", + "version": "==0.3.1" + }, + "pydantic": { + "hashes": [ + "sha256:442557d2910e75c991c39f4b4ab18963d57b9b55122c8b2a9cd176d8c29ce968", + "sha256:5b6c415eee9f8123a14d859be0c84363fec6b1feb6b688d6435801230b56e0b8" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==2.11.1" + }, + "pydantic-core": { + "hashes": [ + "sha256:024d136ae44d233e6322027bbf356712b3940bee816e6c948ce4b90f18471b3d", + "sha256:0310524c833d91403c960b8a3cf9f46c282eadd6afd276c8c5edc617bd705dc9", + "sha256:07b4ced28fccae3f00626eaa0c4001aa9ec140a29501770a88dbbb0966019a86", + "sha256:085d8985b1c1e48ef271e98a658f562f29d89bda98bf120502283efbc87313eb", + "sha256:0a98257451164666afafc7cbf5fb00d613e33f7e7ebb322fbcd99345695a9a61", + "sha256:0bcf0bab28995d483f6c8d7db25e0d05c3efa5cebfd7f56474359e7137f39856", + "sha256:138d31e3f90087f42aa6286fb640f3c7a8eb7bdae829418265e7e7474bd2574b", + "sha256:14229c1504287533dbf6b1fc56f752ce2b4e9694022ae7509631ce346158de11", + "sha256:1583539533160186ac546b49f5cde9ffc928062c96920f58bd95de32ffd7bffd", + "sha256:175ab598fb457a9aee63206a1993874badf3ed9a456e0654273e56f00747bbd6", + "sha256:1a69b7596c6603afd049ce7f3835bcf57dd3892fc7279f0ddf987bebed8caa5a", + "sha256:1a73be93ecef45786d7d95b0c5e9b294faf35629d03d5b145b09b81258c7cd6d", + "sha256:1b1262b912435a501fa04cd213720609e2cefa723a07c92017d18693e69bf00b", + "sha256:1b2ea72dea0825949a045fa4071f6d5b3d7620d2a208335207793cf29c5a182d", + "sha256:20d4275f3c4659d92048c70797e5fdc396c6e4446caf517ba5cad2db60cd39d3", + "sha256:23c3e77bf8a7317612e5c26a3b084c7edeb9552d645742a54a5867635b4f2453", + "sha256:26a4ea04195638dcd8c53dadb545d70badba51735b1594810e9768c2c0b4a5da", + "sha256:26bc7367c0961dec292244ef2549afa396e72e28cc24706210bd44d947582c59", + "sha256:2a0147c0bef783fd9abc9f016d66edb6cac466dc54a17ec5f5ada08ff65caf5d", + "sha256:2c0afd34f928383e3fd25740f2050dbac9d077e7ba5adbaa2227f4d4f3c8da5c", + "sha256:30369e54d6d0113d2aa5aee7a90d17f225c13d87902ace8fcd7bbf99b19124db", + "sha256:31860fbda80d8f6828e84b4a4d129fd9c4535996b8249cfb8c720dc2a1a00bb8", + "sha256:34e7fb3abe375b5c4e64fab75733d605dda0f59827752debc99c17cb2d5f3276", + "sha256:40eb8af662ba409c3cbf4a8150ad32ae73514cd7cb1f1a2113af39763dd616b3", + "sha256:41d698dcbe12b60661f0632b543dbb119e6ba088103b364ff65e951610cb7ce0", + "sha256:4726f1f3f42d6a25678c67da3f0b10f148f5655813c5aca54b0d1742ba821b8f", + "sha256:4927564be53239a87770a5f86bdc272b8d1fbb87ab7783ad70255b4ab01aa25b", + "sha256:4b6d77c75a57f041c5ee915ff0b0bb58eabb78728b69ed967bc5b780e8f701b8", + "sha256:4d9149e7528af8bbd76cc055967e6e04617dcb2a2afdaa3dea899406c5521faa", + "sha256:4deac83a8cc1d09e40683be0bc6d1fa4cde8df0a9bf0cda5693f9b0569ac01b6", + "sha256:4f1ab031feb8676f6bd7c85abec86e2935850bf19b84432c64e3e239bffeb1ec", + "sha256:502ed542e0d958bd12e7c3e9a015bce57deaf50eaa8c2e1c439b512cb9db1e3a", + "sha256:5461934e895968655225dfa8b3be79e7e927e95d4bd6c2d40edd2fa7052e71b6", + "sha256:58c1151827eef98b83d49b6ca6065575876a02d2211f259fb1a6b7757bd24dd8", + "sha256:5bdd36b362f419c78d09630cbaebc64913f66f62bda6d42d5fbb08da8cc4f181", + "sha256:5bf637300ff35d4f59c006fff201c510b2b5e745b07125458a5389af3c0dff8c", + "sha256:5bf68bb859799e9cec3d9dd8323c40c00a254aabb56fe08f907e437005932f2b", + "sha256:5d8dc9f63a26f7259b57f46a7aab5af86b2ad6fbe48487500bb1f4b27e051e4c", + "sha256:5f36afd0d56a6c42cf4e8465b6441cf546ed69d3a4ec92724cc9c8c61bd6ecf4", + "sha256:5f72914cfd1d0176e58ddc05c7a47674ef4222c8253bf70322923e73e14a4ac3", + "sha256:6291797cad239285275558e0a27872da735b05c75d5237bbade8736f80e4c225", + "sha256:62c151ce3d59ed56ebd7ce9ce5986a409a85db697d25fc232f8e81f195aa39a1", + "sha256:635702b2fed997e0ac256b2cfbdb4dd0bf7c56b5d8fba8ef03489c03b3eb40e2", + "sha256:64672fa888595a959cfeff957a654e947e65bbe1d7d82f550417cbd6898a1d6b", + "sha256:68504959253303d3ae9406b634997a2123a0b0c1da86459abbd0ffc921695eac", + "sha256:69297418ad644d521ea3e1aa2e14a2a422726167e9ad22b89e8f1130d68e1e9a", + "sha256:6c32a40712e3662bebe524abe8abb757f2fa2000028d64cc5a1006016c06af43", + "sha256:715c62af74c236bf386825c0fdfa08d092ab0f191eb5b4580d11c3189af9d330", + "sha256:71dffba8fe9ddff628c68f3abd845e91b028361d43c5f8e7b3f8b91d7d85413e", + "sha256:7419241e17c7fbe5074ba79143d5523270e04f86f1b3a0dff8df490f84c8273a", + "sha256:759871f00e26ad3709efc773ac37b4d571de065f9dfb1778012908bcc36b3a73", + "sha256:7a25493320203005d2a4dac76d1b7d953cb49bce6d459d9ae38e30dd9f29bc9c", + "sha256:7b79af799630af263eca9ec87db519426d8c9b3be35016eddad1832bac812d87", + "sha256:7c9c84749f5787781c1c45bb99f433402e484e515b40675a5d121ea14711cf61", + "sha256:7da333f21cd9df51d5731513a6d39319892947604924ddf2e24a4612975fb936", + "sha256:82a4eba92b7ca8af1b7d5ef5f3d9647eee94d1f74d21ca7c21e3a2b92e008358", + "sha256:89670d7a0045acb52be0566df5bc8b114ac967c662c06cf5e0c606e4aadc964b", + "sha256:8a1d581e8cdbb857b0e0e81df98603376c1a5c34dc5e54039dcc00f043df81e7", + "sha256:8ec86b5baa36f0a0bfb37db86c7d52652f8e8aa076ab745ef7725784183c3fdd", + "sha256:91301a0980a1d4530d4ba7e6a739ca1a6b31341252cb709948e0aca0860ce0ae", + "sha256:918f2013d7eadea1d88d1a35fd4a1e16aaf90343eb446f91cb091ce7f9b431a2", + "sha256:9cb2390355ba084c1ad49485d18449b4242da344dea3e0fe10babd1f0db7dcfc", + "sha256:9ee65f0cc652261744fd07f2c6e6901c914aa6c5ff4dcfaf1136bc394d0dd26b", + "sha256:a608a75846804271cf9c83e40bbb4dab2ac614d33c6fd5b0c6187f53f5c593ef", + "sha256:a66d931ea2c1464b738ace44b7334ab32a2fd50be023d863935eb00f42be1778", + "sha256:a7a7f2a3f628d2f7ef11cb6188bcf0b9e1558151d511b974dfea10a49afe192b", + "sha256:abaeec1be6ed535a5d7ffc2e6c390083c425832b20efd621562fbb5bff6dc518", + "sha256:abfa44cf2f7f7d7a199be6c6ec141c9024063205545aa09304349781b9a125e6", + "sha256:ade5dbcf8d9ef8f4b28e682d0b29f3008df9842bb5ac48ac2c17bc55771cc976", + "sha256:ae62032ef513fe6281ef0009e30838a01057b832dc265da32c10469622613885", + "sha256:aec79acc183865bad120b0190afac467c20b15289050648b876b07777e67ea48", + "sha256:b716294e721d8060908dbebe32639b01bfe61b15f9f57bcc18ca9a0e00d9520b", + "sha256:b9ec80eb5a5f45a2211793f1c4aeddff0c3761d1c70d684965c1807e923a588b", + "sha256:ba95691cf25f63df53c1d342413b41bd7762d9acb425df8858d7efa616c0870e", + "sha256:bccc06fa0372151f37f6b69834181aa9eb57cf8665ed36405fb45fbf6cac3bae", + "sha256:c860773a0f205926172c6644c394e02c25421dc9a456deff16f64c0e299487d3", + "sha256:ca1103d70306489e3d006b0f79db8ca5dd3c977f6f13b2c59ff745249431a606", + "sha256:ce72d46eb201ca43994303025bd54d8a35a3fc2a3495fac653d6eb7205ce04f4", + "sha256:d20cbb9d3e95114325780f3cfe990f3ecae24de7a2d75f978783878cce2ad585", + "sha256:dcfebee69cd5e1c0b76a17e17e347c84b00acebb8dd8edb22d4a03e88e82a207", + "sha256:e1c69aa459f5609dec2fa0652d495353accf3eda5bdb18782bc5a2ae45c9273a", + "sha256:e2762c568596332fdab56b07060c8ab8362c56cf2a339ee54e491cd503612c50", + "sha256:e37f10f6d4bc67c58fbd727108ae1d8b92b397355e68519f1e4a7babb1473442", + "sha256:e790954b5093dff1e3a9a2523fddc4e79722d6f07993b4cd5547825c3cbf97b5", + "sha256:e81a295adccf73477220e15ff79235ca9dcbcee4be459eb9d4ce9a2763b8386c", + "sha256:e925819a98318d17251776bd3d6aa9f3ff77b965762155bdad15d1a9265c4cfd", + "sha256:ea30239c148b6ef41364c6f51d103c2988965b643d62e10b233b5efdca8c0099", + "sha256:eabf946a4739b5237f4f56d77fa6668263bc466d06a8036c055587c130a46f7b", + "sha256:ecb158fb9b9091b515213bed3061eb7deb1d3b4e02327c27a0ea714ff46b0760", + "sha256:ecc6d02d69b54a2eb83ebcc6f29df04957f734bcf309d346b4f83354d8376862", + "sha256:eddb18a00bbb855325db27b4c2a89a4ba491cd6a0bd6d852b225172a1f54b36c", + "sha256:f00e8b59e1fc8f09d05594aa7d2b726f1b277ca6155fc84c0396db1b373c4555", + "sha256:f1fb026c575e16f673c61c7b86144517705865173f3d0907040ac30c4f9f5915", + "sha256:f200b2f20856b5a6c3a35f0d4e344019f805e363416e609e9b47c552d35fd5ea", + "sha256:f225f3a3995dbbc26affc191d0443c6c4aa71b83358fd4c2b7d63e2f6f0336f9", + "sha256:f22dab23cdbce2005f26a8f0c71698457861f97fc6318c75814a50c75e87d025", + "sha256:f3eb479354c62067afa62f53bb387827bee2f75c9c79ef25eef6ab84d4b1ae3b", + "sha256:fc53e05c16697ff0c1c7c2b98e45e131d4bfb78068fffff92a82d169cbb4c7b7", + "sha256:ff48a55be9da6930254565ff5238d71d5e9cd8c5487a191cb85df3bdb8c77365" + ], + "markers": "python_version >= '3.9'", + "version": "==2.33.0" + }, + "pyjwt": { + "hashes": [ + "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", + "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb" + ], + "markers": "python_version >= '3.9'", + "version": "==2.10.1" + }, + "pytest": { + "hashes": [ + "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", + "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==8.3.5" + }, + "python-dateutil": { + "hashes": [ + "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", + "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==2.9.0.post0" + }, + "python-dotenv": { + "hashes": [ + "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5", + "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==1.1.0" + }, + "pytz": { + "hashes": [ + "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", + "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00" + ], + "version": "==2025.2" + }, + "pyyaml": { + "hashes": [ + "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff", + "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", + "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", + "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e", + "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", + "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", + "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", + "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", + "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", + "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", + "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a", + "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", + "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", + "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8", + "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", + "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19", + "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", + "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a", + "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", + "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", + "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", + "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631", + "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", + "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", + "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", + "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", + "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", + "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", + "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", + "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706", + "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", + "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", + "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", + "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083", + "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", + "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", + "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", + "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", + "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725", + "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", + "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", + "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", + "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", + "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", + "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5", + "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d", + "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", + "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", + "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", + "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", + "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", + "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", + "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4" + ], + "markers": "python_version >= '3.8'", + "version": "==6.0.2" + }, + "qh3": { + "hashes": [ + "sha256:0107f576a0524421e1b0f9e0437d2881a1835b1b6105eadd7ea0c1c9bf2da917", + "sha256:06159707895c606a321ccb5630347a2d2a44ee584f22945e5b22b0ad34f21ec8", + "sha256:06255835f99ea1af9e5d358056011686fcccbafaba893454027daa62ab6f701f", + "sha256:09b2305a954e61a9ed8b46a7a45f54e8d95ef870a47d5fd1836e14c7600d3b92", + "sha256:0a51dcffae03a89ddbab1884860569e0d1dbbf95deee47457c1fd29b4ac8d220", + "sha256:0a5d1cd881b7d43481ad60262cf3390a555e0e51751bc2af70ba4a612487e797", + "sha256:0e1c273660f9b8511c22d0b082137556e46d6a7eccf132bd82f95d29f90488b2", + "sha256:0e540cc7e7da65da30381bdb73a789a8635c6aaef98688d904eee3bc587654a5", + "sha256:10ed818f47dc522350a12641e8f2bea19ff824f8ce373c23a8e594b3481fd7a4", + "sha256:195b4ad58cf5a8da218e2368d34f47628c14581f3cc9863fc0406b32e137f3a6", + "sha256:1a80d07249c7ccbaa57bb9015b5ead0ead7ac1940cd5483548dfe56db99ce7a4", + "sha256:1cf0b18823801078d2294a0356abc2be34b4a224bea863a87029c1c97d6c34e0", + "sha256:1fac2ab4b8a2e50894b54a19416cd363defe0fb33f52754686ea58999f98dfc5", + "sha256:205cdaea9da8881b31b76eb6da5b88c9558ba96bc16a3ecf11333098ac7f3859", + "sha256:2294e78bcc40728a3a772df0f8ecf8b8756616d06dd001029016876aa4e5c9de", + "sha256:235236ab195d34e7cd18d186e46b7a4f8aceafe246bf36b42913f72627ded414", + "sha256:25eef1f2be50d79d23e01a567c719e46e4892518a5ccc96685fcb4746357320b", + "sha256:2ae147b756c3adf59699756feb9e07d4a69674f57b4e13d6c25f9d1dc3c8707c", + "sha256:2c9cdd7ea49c79b671e7de35dad61d2aa91920e2498d0c6dfa932d5e05070a5e", + "sha256:2dc9f269d7316b0a44e61ae7a11ffd8daa800b3f5ba773de2e9d8c4ee636a896", + "sha256:2f94d69edb0070ef4ec414deabfc2369aa2100b11bf4a4f2f393f2c28c4bc7ba", + "sha256:311da331e31c55afc3f4f4f2ba9d07a1d700ffb7db5aa4f58300b9f56f2523dc", + "sha256:3578844a9ff4c342a409d010f909782afc52a31680876f7fab65bf133aa3f4db", + "sha256:4032c2898b4c0ff7a25cf7d68c3b1f2abdcaf4f25cc8b6802a941a842f9a95b6", + "sha256:40abd150eddfa0884c139bd281e87ff920d4cd52d685fc4ef25ddcc77ff7a220", + "sha256:43e32602651d07f8a0860ba0a45d8c8fe9ccd537030e7632d1258f7b84881416", + "sha256:45a21d25fe17168f4db09fcaabee5dd171763ad1bd8753c257297837f5ba9197", + "sha256:45bfbb126e31ecf63ef74c249d38d07e149c0663b4a191cf9e2e3445a80758d5", + "sha256:4745667c9956bcfd74ff677edd4c73d6cb578b6b47c5fb3d246aaa223dd6a004", + "sha256:4936a5d8915866b4f08ab18018f41ed93a2593788ad0a80796aada2e23d402e5", + "sha256:4a45a9698b3bcae05f91356f50df8dab3c3fdef3187548b9c4a396a6eb6760b5", + "sha256:4b84c1ca283278e2e22a3b9e2ce8ea55c0a1797d6e86255640a1b6293fe18b2a", + "sha256:4dc88397ed7f3b46f542f87e19050a7f82267225009ce65651ac44cb55b204b1", + "sha256:4e10a872077373c71d7938fb1a7ae0561f2e79aad2b1b5323dbb6325a389041a", + "sha256:4f1b5dcb4d9da5b441e0b14216b816be7b5b5d080c2ccb957adf84266411ff6b", + "sha256:50d25182d598312197f500a65acebf5430391764e6ffcdb73d96e80c5dd06fc7", + "sha256:529c5b9e27fced27befce26e2699eca3110c576f6427dfbd26e30b7666b2d6d1", + "sha256:571da625b22e953731307539b44b2177f6ab13b6142d7698c0f28b9379ae1be6", + "sha256:5a9de89e2480b385a99613798d375e69a0a53d4575bd74b133307c8e83a84751", + "sha256:5bcc46cf89cb1036c2d029c01f360c82180329997a75728b20dc205f34114327", + "sha256:5dfa6238a6236f2bb3ecaac9befd23cee0bcbb9e497003fb3aef875e19325c61", + "sha256:6342b961b18037e3df8692e8914c576816a966bf29f913ee2728e7e838bde9bd", + "sha256:65e112c175a0b0328822dd0d19ead9ef1d7925359d154fb52e46b080945eef38", + "sha256:6f8a2b15c4dd58133e92f95d4312efd09b87ec15b881885629dff70e89f1e751", + "sha256:726f749444d1cc73c1bf221343dc6fdbde2541ffe30860d2d5ef6e310a1f5478", + "sha256:742f39cd807df31c21e035aec63f6f61e139a60545cffb16e8e87f61609d7cba", + "sha256:7840c18ec27aa08ecdd8ff23df348c124378c6f3edf9a0e02b16a5a4ce504c89", + "sha256:79d1de24d3c7345719af8333b64f19a8777dd50a059851bfcfa583c7109eddf2", + "sha256:7ba9303c5334d64b547483be92c4bbacd37964ff3abd0b1e8c82c63ec6f7b3ec", + "sha256:85587d9dfbd2f7f8622cf57f3c1a19cee441b5607a982cdf4c08ef38d45d5a36", + "sha256:8711b86e447e689d1b693419708b6ad64bf0c57091b94a3f65c6d4bd7cfb7d9a", + "sha256:877edc4db25309d86af07d992926394936f491cce84fce439961729552e942fe", + "sha256:8bb17669e362d3456bebd5c69abb0c26e8ab29c10894f123c715b0217aece479", + "sha256:8bb17a1e50e35a8d07cab784caea68b33f739391ccb5e3161afb9db0bde8faf4", + "sha256:8d4640a6bb3aa29797bdcf0c5bae4e86da5f2fbf84b67a7fad549fa34c19aa98", + "sha256:90697f3d9e4b3ddccfb31b40637bac6d44b39288cd57f78e51ff13e70916eccc", + "sha256:90f127f57c00b111ea3ffd95f4c12ad83efebd10310fd718d66771dd64e568f1", + "sha256:95f8f70bca1e880da7559ef38b7f1778a3b39b586fc829b8a7e989e912aa988f", + "sha256:9a60c102a01dfa8c5d737499c9a5d5e7c2b6642009c9b80b27f228ec50ce6fb0", + "sha256:9c7f1821ec749ea29bd9d079e4f13a552371731d0b664962a60cbb2f31d571b5", + "sha256:9f81ee66fadedbfd4d5c49e64151db3b6f353b041ddf5ab0b151340a4467e038", + "sha256:9f8e530e29e1afe9231b1100645aa5cc240b823c0e4162f70046270a3559400c", + "sha256:a0c647db3f156e8c94a63c1fa0fc4f2ce8b70f0eb12f2726e6c19493198b1e99", + "sha256:a0cda60607ab4ffc14fa8425ea7c9ae78ad60923c3c8be94d19c14f83198b1cf", + "sha256:a5bff397d49da302b5afbdf244dd7ca480a827f5de856d957df05dfd7e73b490", + "sha256:a94bd391b955b24948b2986845f9c6ad8abc709c2d57d0515daeacf16a2a3a4c", + "sha256:ad4572bd37c1a6a7a12ff47da4f3578a13e3c8ee85a1f02d2435dfdc6d9ed394", + "sha256:b13b7de1686f1b5da7526dc4f0de410a685f5cb654e984b09ddd8d14be6fffc0", + "sha256:b1724c43c5c0d08b68c3407467e07794b9adf153b6de8300d61883e8d95fa640", + "sha256:b27d29cb718df9ed006f8c75a89dd90534437761b2477dc7a4145bde0daa60fc", + "sha256:b3afa3a78b0f011ff5a09dea37d74fcea9269b318d2828f18b2fbf9dde625a71", + "sha256:bd6a61007e678284178bb00931af59f686a2a55797505e0886241050ec5c243c", + "sha256:befeca45fd7787c08a3286fb72caaccfa4c3962760981dfeb0992f5ba9be5cb2", + "sha256:c2d31b8233f406e00f180e221986f436765c3bb06839e72c898feca31fef1d4e", + "sha256:c3e2518ce442b70314892a594e21157deb13fbc436f77ad6555439cfd9912035", + "sha256:c8d5fbee607db24ef6c7b0bd08c21226d10782df4149b9d6f1f1516c7c85092b", + "sha256:cc2cc804998e852bdffcc87e8d008043ffa85efe6d3516d9784714d709f14774", + "sha256:cd8a681107c6118f60a0714671cec7b301533f25984a5c898e547a33a01af75c", + "sha256:d056831ebf3fa8116672ae970ad19a9f5f1427a2217cd0e01c1eaac5f8222668", + "sha256:d5ac3e8e3f66ff88819205dbc67e6f771cbb80529325ca9f3bc03fa00c5c83aa", + "sha256:dba15ca2da7859300ae79d2ea2eb8bb0eb827b93a2f104981783add16a97058a", + "sha256:de6cabb89248b60ea9bb9d7848de78dfb824abfdc15f52448a8efe821dd7d559", + "sha256:e02f6d1cc2005b847176dd8770fdfe90f04a34a3f094b79a8369bde0aa8f6a04", + "sha256:e514bd4b27c953c46485b2be0ecd2421aa196c5a0cd7d67f1ccec16a56b00507", + "sha256:e53464124379764f982a69f5ab34d0d5c527e8ac1e788db86a25f79045e5b18d", + "sha256:e9cf59660a543bef86de457c671c1d78ad2d88c53bb9eb3fce6ce0cb9729d490", + "sha256:edfc1bc732bc5e62fdaea268a541eb442d5e04927cb27dfd8e92ef07213658d2", + "sha256:ee8e7a66be70a18f5e0558f2f6a89e39c608f87b027234848f76a6699975dcf8", + "sha256:effb7072efef7dca10a98c24be0cc882a40edc78e293b41f5b6dc7f1952215ed", + "sha256:f04e4ee7e3c123ac7f21cee6f819cfa9b5a376e656257dfa7a4d133b3590bdd9", + "sha256:f0531c7abe963affebd3fb6cf9ea87eb8c63a0240535d81d0223945bd41be254", + "sha256:f5afd1c216315682a6bbf606618de0e3817ed8eeafc27ad7660ef2f581d4fd46", + "sha256:f93d3c74e00268ac6042c080653a34d0f0e8903697fd8dc480c1e3de81c90faf", + "sha256:fbc4e6452cc48c3e1398fe930349e2ec9ad76a2c00e729f3e797700c2f0646e6", + "sha256:fc73fc2889a01a43737c7a7c7fb9ee13aa56065b22abbed0e787cc58a3747808" + ], + "markers": "python_version >= '3.7'", + "version": "==1.4.2" + }, + "referencing": { + "hashes": [ + "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", + "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0" + ], + "markers": "python_version >= '3.9'", + "version": "==0.36.2" + }, + "requests": { + "hashes": [ + "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", + "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" + ], + "markers": "python_version >= '3.8'", + "version": "==2.32.3" + }, + "rpds-py": { + "hashes": [ + "sha256:0047638c3aa0dbcd0ab99ed1e549bbf0e142c9ecc173b6492868432d8989a046", + "sha256:006f4342fe729a368c6df36578d7a348c7c716be1da0a1a0f86e3021f8e98724", + "sha256:041f00419e1da7a03c46042453598479f45be3d787eb837af382bfc169c0db33", + "sha256:04ecf5c1ff4d589987b4d9882872f80ba13da7d42427234fce8f22efb43133bc", + "sha256:04f2b712a2206e13800a8136b07aaedc23af3facab84918e7aa89e4be0260032", + "sha256:0aeb3329c1721c43c58cae274d7d2ca85c1690d89485d9c63a006cb79a85771a", + "sha256:0e374c0ce0ca82e5b67cd61fb964077d40ec177dd2c4eda67dba130de09085c7", + "sha256:0f00c16e089282ad68a3820fd0c831c35d3194b7cdc31d6e469511d9bffc535c", + "sha256:174e46569968ddbbeb8a806d9922f17cd2b524aa753b468f35b97ff9c19cb718", + "sha256:1b221c2457d92a1fb3c97bee9095c874144d196f47c038462ae6e4a14436f7bc", + "sha256:208b3a70a98cf3710e97cabdc308a51cd4f28aa6e7bb11de3d56cd8b74bab98d", + "sha256:20f2712bd1cc26a3cc16c5a1bfee9ed1abc33d4cdf1aabd297fe0eb724df4272", + "sha256:24795c099453e3721fda5d8ddd45f5dfcc8e5a547ce7b8e9da06fecc3832e26f", + "sha256:2a0f156e9509cee987283abd2296ec816225145a13ed0391df8f71bf1d789e2d", + "sha256:2b2356688e5d958c4d5cb964af865bea84db29971d3e563fb78e46e20fe1848b", + "sha256:2c13777ecdbbba2077670285dd1fe50828c8742f6a4119dbef6f83ea13ad10fb", + "sha256:2d3ee4615df36ab8eb16c2507b11e764dcc11fd350bbf4da16d09cda11fcedef", + "sha256:2d53747da70a4e4b17f559569d5f9506420966083a31c5fbd84e764461c4444b", + "sha256:32bab0a56eac685828e00cc2f5d1200c548f8bc11f2e44abf311d6b548ce2e45", + "sha256:34d90ad8c045df9a4259c47d2e16a3f21fdb396665c94520dbfe8766e62187a4", + "sha256:369d9c6d4c714e36d4a03957b4783217a3ccd1e222cdd67d464a3a479fc17796", + "sha256:3a55fc10fdcbf1a4bd3c018eea422c52cf08700cf99c28b5cb10fe97ab77a0d3", + "sha256:3d2d8e4508e15fc05b31285c4b00ddf2e0eb94259c2dc896771966a163122a0c", + "sha256:3fab5f4a2c64a8fb64fc13b3d139848817a64d467dd6ed60dcdd6b479e7febc9", + "sha256:43dba99f00f1d37b2a0265a259592d05fcc8e7c19d140fe51c6e6f16faabeb1f", + "sha256:44d51febb7a114293ffd56c6cf4736cb31cd68c0fddd6aa303ed09ea5a48e029", + "sha256:493fe54318bed7d124ce272fc36adbf59d46729659b2c792e87c3b95649cdee9", + "sha256:4b28e5122829181de1898c2c97f81c0b3246d49f585f22743a1246420bb8d399", + "sha256:4cd031e63bc5f05bdcda120646a0d32f6d729486d0067f09d79c8db5368f4586", + "sha256:528927e63a70b4d5f3f5ccc1fa988a35456eb5d15f804d276709c33fc2f19bda", + "sha256:564c96b6076a98215af52f55efa90d8419cc2ef45d99e314fddefe816bc24f91", + "sha256:5db385bacd0c43f24be92b60c857cf760b7f10d8234f4bd4be67b5b20a7c0b6b", + "sha256:5ef877fa3bbfb40b388a5ae1cb00636a624690dcb9a29a65267054c9ea86d88a", + "sha256:5f6e3cec44ba05ee5cbdebe92d052f69b63ae792e7d05f1020ac5e964394080c", + "sha256:5fc13b44de6419d1e7a7e592a4885b323fbc2f46e1f22151e3a8ed3b8b920405", + "sha256:60748789e028d2a46fc1c70750454f83c6bdd0d05db50f5ae83e2db500b34da5", + "sha256:60d9b630c8025b9458a9d114e3af579a2c54bd32df601c4581bd054e85258143", + "sha256:619ca56a5468f933d940e1bf431c6f4e13bef8e688698b067ae68eb4f9b30e3a", + "sha256:630d3d8ea77eabd6cbcd2ea712e1c5cecb5b558d39547ac988351195db433f6c", + "sha256:63981feca3f110ed132fd217bf7768ee8ed738a55549883628ee3da75bb9cb78", + "sha256:66420986c9afff67ef0c5d1e4cdc2d0e5262f53ad11e4f90e5e22448df485bf0", + "sha256:675269d407a257b8c00a6b58205b72eec8231656506c56fd429d924ca00bb350", + "sha256:6a4a535013aeeef13c5532f802708cecae8d66c282babb5cd916379b72110cf7", + "sha256:6a727fd083009bc83eb83d6950f0c32b3c94c8b80a9b667c87f4bd1274ca30ba", + "sha256:6e1daf5bf6c2be39654beae83ee6b9a12347cb5aced9a29eecf12a2d25fff664", + "sha256:6eea559077d29486c68218178ea946263b87f1c41ae7f996b1f30a983c476a5a", + "sha256:75a810b7664c17f24bf2ffd7f92416c00ec84b49bb68e6a0d93e542406336b56", + "sha256:772cc1b2cd963e7e17e6cc55fe0371fb9c704d63e44cacec7b9b7f523b78919e", + "sha256:78884d155fd15d9f64f5d6124b486f3d3f7fd7cd71a78e9670a0f6f6ca06fb2d", + "sha256:79e8d804c2ccd618417e96720ad5cd076a86fa3f8cb310ea386a3e6229bae7d1", + "sha256:7e80d375134ddb04231a53800503752093dbb65dad8dabacce2c84cccc78e964", + "sha256:8097b3422d020ff1c44effc40ae58e67d93e60d540a65649d2cdaf9466030791", + "sha256:8205ee14463248d3349131bb8099efe15cd3ce83b8ef3ace63c7e976998e7124", + "sha256:8212ff58ac6dfde49946bea57474a386cca3f7706fc72c25b772b9ca4af6b79e", + "sha256:823e74ab6fbaa028ec89615ff6acb409e90ff45580c45920d4dfdddb069f2120", + "sha256:84e0566f15cf4d769dade9b366b7b87c959be472c92dffb70462dd0844d7cbad", + "sha256:896c41007931217a343eff197c34513c154267636c8056fb409eafd494c3dcdc", + "sha256:8aa362811ccdc1f8dadcc916c6d47e554169ab79559319ae9fae7d7752d0d60c", + "sha256:8b3b397eefecec8e8e39fa65c630ef70a24b09141a6f9fc17b3c3a50bed6b50e", + "sha256:8ebc7e65ca4b111d928b669713865f021b7773350eeac4a31d3e70144297baba", + "sha256:9168764133fd919f8dcca2ead66de0105f4ef5659cbb4fa044f7014bed9a1797", + "sha256:921ae54f9ecba3b6325df425cf72c074cd469dea843fb5743a26ca7fb2ccb149", + "sha256:92558d37d872e808944c3c96d0423b8604879a3d1c86fdad508d7ed91ea547d5", + "sha256:951cc481c0c395c4a08639a469d53b7d4afa252529a085418b82a6b43c45c240", + "sha256:998c01b8e71cf051c28f5d6f1187abbdf5cf45fc0efce5da6c06447cba997034", + "sha256:9abc80fe8c1f87218db116016de575a7998ab1629078c90840e8d11ab423ee25", + "sha256:9be4f99bee42ac107870c61dfdb294d912bf81c3c6d45538aad7aecab468b6b7", + "sha256:9c39438c55983d48f4bb3487734d040e22dad200dab22c41e331cee145e7a50d", + "sha256:9d7e8ce990ae17dda686f7e82fd41a055c668e13ddcf058e7fb5e9da20b57793", + "sha256:9ea7f4174d2e4194289cb0c4e172d83e79a6404297ff95f2875cf9ac9bced8ba", + "sha256:a18fc371e900a21d7392517c6f60fe859e802547309e94313cd8181ad9db004d", + "sha256:a36b452abbf29f68527cf52e181fced56685731c86b52e852053e38d8b60bc8d", + "sha256:a5b66d1b201cc71bc3081bc2f1fc36b0c1f268b773e03bbc39066651b9e18391", + "sha256:a824d2c7a703ba6daaca848f9c3d5cb93af0505be505de70e7e66829affd676e", + "sha256:a88c0d17d039333a41d9bf4616bd062f0bd7aa0edeb6cafe00a2fc2a804e944f", + "sha256:aa6800adc8204ce898c8a424303969b7aa6a5e4ad2789c13f8648739830323b7", + "sha256:aad911555286884be1e427ef0dc0ba3929e6821cbeca2194b13dc415a462c7fd", + "sha256:afc6e35f344490faa8276b5f2f7cbf71f88bc2cda4328e00553bd451728c571f", + "sha256:b9a4df06c35465ef4d81799999bba810c68d29972bf1c31db61bfdb81dd9d5bb", + "sha256:bb2954155bb8f63bb19d56d80e5e5320b61d71084617ed89efedb861a684baea", + "sha256:bbc4362e06f950c62cad3d4abf1191021b2ffaf0b31ac230fbf0526453eee75e", + "sha256:c0145295ca415668420ad142ee42189f78d27af806fcf1f32a18e51d47dd2052", + "sha256:c30ff468163a48535ee7e9bf21bd14c7a81147c0e58a36c1078289a8ca7af0bd", + "sha256:c347a20d79cedc0a7bd51c4d4b7dbc613ca4e65a756b5c3e57ec84bd43505b47", + "sha256:c43583ea8517ed2e780a345dd9960896afc1327e8cf3ac8239c167530397440d", + "sha256:c61a2cb0085c8783906b2f8b1f16a7e65777823c7f4d0a6aaffe26dc0d358dd9", + "sha256:c9ca89938dff18828a328af41ffdf3902405a19f4131c88e22e776a8e228c5a8", + "sha256:cc31e13ce212e14a539d430428cd365e74f8b2d534f8bc22dd4c9c55b277b875", + "sha256:cdabcd3beb2a6dca7027007473d8ef1c3b053347c76f685f5f060a00327b8b65", + "sha256:cf86f72d705fc2ef776bb7dd9e5fbba79d7e1f3e258bf9377f8204ad0fc1c51e", + "sha256:d09dc82af2d3c17e7dd17120b202a79b578d79f2b5424bda209d9966efeed114", + "sha256:d3aa13bdf38630da298f2e0d77aca967b200b8cc1473ea05248f6c5e9c9bdb44", + "sha256:d69d003296df4840bd445a5d15fa5b6ff6ac40496f956a221c4d1f6f7b4bc4d9", + "sha256:d6e109a454412ab82979c5b1b3aee0604eca4bbf9a02693bb9df027af2bfa91a", + "sha256:d8551e733626afec514b5d15befabea0dd70a343a9f23322860c4f16a9430205", + "sha256:d8754d872a5dfc3c5bf9c0e059e8107451364a30d9fd50f1f1a85c4fb9481164", + "sha256:d8f9a6e7fd5434817526815f09ea27f2746c4a51ee11bb3439065f5fc754db58", + "sha256:dbcbb6db5582ea33ce46a5d20a5793134b5365110d84df4e30b9d37c6fd40ad3", + "sha256:e0f3ef95795efcd3b2ec3fe0a5bcfb5dadf5e3996ea2117427e524d4fbf309c6", + "sha256:e13ae74a8a3a0c2f22f450f773e35f893484fcfacb00bb4344a7e0f4f48e1f97", + "sha256:e274f62cbd274359eff63e5c7e7274c913e8e09620f6a57aae66744b3df046d6", + "sha256:e838bf2bb0b91ee67bf2b889a1a841e5ecac06dd7a2b1ef4e6151e2ce155c7ae", + "sha256:e8acd55bd5b071156bae57b555f5d33697998752673b9de554dd82f5b5352727", + "sha256:e8e5ab32cf9eb3647450bc74eb201b27c185d3857276162c101c0f8c6374e098", + "sha256:ebcb786b9ff30b994d5969213a8430cbb984cdd7ea9fd6df06663194bd3c450c", + "sha256:ebea2821cdb5f9fef44933617be76185b80150632736f3d76e54829ab4a3b4d1", + "sha256:ed0ef550042a8dbcd657dfb284a8ee00f0ba269d3f2286b0493b15a5694f9fe8", + "sha256:eda5c1e2a715a4cbbca2d6d304988460942551e4e5e3b7457b50943cd741626d", + "sha256:f5c0ed12926dec1dfe7d645333ea59cf93f4d07750986a586f511c0bc61fe103", + "sha256:f6016bd950be4dcd047b7475fdf55fb1e1f59fc7403f387be0e8123e4a576d30", + "sha256:f9e0057a509e096e47c87f753136c9b10d7a91842d8042c2ee6866899a717c0d", + "sha256:fc1c892b1ec1f8cbd5da8de287577b455e388d9c328ad592eabbdcb6fc93bee5", + "sha256:fc2c1e1b00f88317d9de6b2c2b39b012ebbfe35fe5e7bef980fd2a91f6100a07", + "sha256:fd822f019ccccd75c832deb7aa040bb02d70a92eb15a2f16c7987b7ad4ee8d83" + ], + "markers": "python_version >= '3.9'", + "version": "==0.24.0" + }, + "six": { + "hashes": [ + "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", + "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==1.17.0" + }, + "tinydb": { + "hashes": [ + "sha256:f7dfc39b8d7fda7a1ca62a8dbb449ffd340a117c1206b68c50b1a481fb95181d", + "sha256:f97030ee5cbc91eeadd1d7af07ab0e48ceb04aa63d4a983adbaca4cba16e86c3" + ], + "markers": "python_version >= '3.8' and python_version < '4.0'", + "version": "==4.8.2" + }, + "tuspy": { + "hashes": [ + "sha256:156734eac5c61a046cfecd70f14119f05be92cce198eb5a1a99a664482bedb89", + "sha256:7fc5ac8fb25de37c96c90213f83a1ffdede7f48a471cb5a15a2f57846828a79a" + ], + "markers": "python_full_version >= '3.5.3'", + "version": "==1.1.0" + }, + "typing-extensions": { + "hashes": [ + "sha256:0a4ac55a5820789d87e297727d229866c9650f6521b64206413c4fbada24d95b", + "sha256:c8dd92cc0d6425a97c18fbb9d1954e5ff92c1ca881a309c45f06ebc0b79058e5" + ], + "markers": "python_version >= '3.8'", + "version": "==4.13.0" + }, + "typing-inspection": { + "hashes": [ + "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f", + "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122" + ], + "markers": "python_version >= '3.9'", + "version": "==0.4.0" + }, + "tzdata": { + "hashes": [ + "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", + "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9" + ], + "markers": "python_version >= '2'", + "version": "==2025.2" + }, + "urllib3": { + "hashes": [ + "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", + "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" + ], + "markers": "python_version >= '3.9'", + "version": "==2.3.0" + }, + "urllib3-future": { + "hashes": [ + "sha256:3adfa22c5718caee5ca69bc7f7461dc529f4396494d4d9b1db8af7c56cd3ac34", + "sha256:9cd79ce61da77b5d56681bc126f42955c2153e9c0da2f0a62bca8e0a05641f92" + ], + "markers": "python_version >= '3.7'", + "version": "==2.12.915" + }, + "verlib2": { + "hashes": [ + "sha256:2862f19528db400d130253a2b71c7c3616ee14e1d54bf6833bc0929d2cddd141", + "sha256:cf8e2be044b834a2670f2d4c20a93cfc674933c0070543a6f61d531439cca200" + ], + "markers": "python_version >= '3.6'", + "version": "==0.3.1" + }, + "wassima": { + "hashes": [ + "sha256:10508102696d5e2cf4df6942a8ae251c136a49dc32591e9c3f7dd007f5ea1c2f", + "sha256:1102836ba373912537eba891e7e5893532d4ee915ee2486e981b73f925f63c37", + "sha256:11887557464e0c3f9694fb16406bb56c1fb1566178cd04bfb5b4624fad183b31", + "sha256:12c855cc5b96a2ac32d405ab7de1563fc91be54108b4fb16b06d125d07ea892b", + "sha256:134e863b692c35afe8f5ccbe8082fa39963804e20439a4c7aa98510197034704", + "sha256:17f129f4d36591772d906bcc893b76b236363fda61b575067ddfa8250f84ad30", + "sha256:17f132ffbab294902f8740708f27fd995ea04182fe4b4fde20be563f8a010715", + "sha256:18bc78b2230c6f1f9ddbeb6ca38439fea4cc8f60836af4f3538ed259e60e5eb8", + "sha256:194c3fad38603618dec03307d10a4ece852516df56560e04fb2562506f79c175", + "sha256:1b18ec743ab98dcbfc221749026b23fc573891651342f20971e53bdbf56d28ae", + "sha256:1fa19a3652509edd18f693cd9c873d8f73c9d1624eae6c3bf93e561b18ae2766", + "sha256:24bdb1a2b90c215e11ed7ce82ed7eada339c7dca8e0366916e4e3215b3b9d8d3", + "sha256:27d518f0863788c826faf387326f3babb3ea95a0b908f5b3ad2bc1fcc3c5a37d", + "sha256:350b5854dfb3eeb95cd17723b0f3503de0c01454da5ae7d60f192be2009239eb", + "sha256:3b3a4c8ffa76147507f0c88c5cc8c76ef96ab93b81e49b288a3a0b94ebfb34af", + "sha256:3e00fa8ff1aef7d8aad2e1b957add6cba8549a42e415400bd72ff1b61dc9da9d", + "sha256:3f29045dd0a7c287f850f1dc3948632a2d2cf7dd7ec02271c5f248f058da5650", + "sha256:4a528244e4a0f9e01b8593b1c8a60ac1d80ce8b13fe079f44b38328e4be075e3", + "sha256:4c4f5ca102fd083aa2b05c65a1fd18175e3dc7a889525fd2964219ee3c51edef", + "sha256:52358d86195954816231d2aa8c2919b85075320b6d3ba5b96216985c3182bfa0", + "sha256:52f473233ec4d57322c6295e85b3912dc1fc400d6308a04bd427b863934aa74e", + "sha256:556cded582aef3089de889b5a6efcf6d87fabfec55d574fcc3a4ada21308d487", + "sha256:564eda7bf0420c8cbebe5e8efc15f1b27fdcb37ebc4c2f92b8461ca83381b223", + "sha256:57a0ab5aed596f129fd4ea7584336b11fbef25c07d1351e37a959901dea8728e", + "sha256:58f1fddd660da8c8f30f4b8460129e2f217c226cd1b54b1cabb6465881fd788a", + "sha256:597b0d8ba697f4319bc1f301ed31630ca783c9fe82d2a2434dd2f7f709c4e394", + "sha256:5b194f0de77a4ae7bcf217a3ccd10798e94ca430cec6307628098a61cd2ac230", + "sha256:5f5ee564f4b836ed1b70ddb187c817e8f6f1ffb521a636bb20676f07b523396b", + "sha256:601f96340e4c8071994a39a76d4278e8e1d087cf385781dba795c5334262d865", + "sha256:61bfa09f38c36f1b1e6e44e7af888bb8f9d739e86099082a3b45875651a425e2", + "sha256:67fd323b8ad0e057c06b153983d8c50f812aad979ac89b07ed6952c345f6da02", + "sha256:69cb51f629d118256da3d2373575190c7e30d3fa67c344dc655f6c8ab3e83f0d", + "sha256:6b1d7ceeede8d8eed48616d2d33ed23d2dff307d0b17c577eafdadafe86a0478", + "sha256:6b7d696155ddd7ab5739ac221e8854115d0d8171bbf805074d9484083de386aa", + "sha256:6d23e9483756b81850b82e8b7ed20fd23de22b50d6a678f765c660d4206b7ce9", + "sha256:7b0229fecc849234f2a2d11e948ac38a9bab02d201fa4d6ad43c143e18c1a66e", + "sha256:7c53050b670d702eed541503175bd5441fc4bdf3898714f8eac8c6ae9db548ac", + "sha256:7d65676f1fc138d1742f704bf490045571b9c2c48cab7d2c2076a52729c143e5", + "sha256:7db25328c40cd574e5a68ef6507c5af4d1fa2a44cb3c028ff9ca6b522f8faf32", + "sha256:83ce1b09e9eb2ae033c303b74ecc4f3186bbc0897db1d8cd9942153b0631b8e0", + "sha256:86c509900cbb90b7b75155c580b22af591b696fa059059bcdbd75bc74179df85", + "sha256:87f80d0075f0d396b73d41bb1626a2dd5607e0db4b74cb17e55d874fcd538971", + "sha256:8b719755d556649f2fbf226cf1ca8581ade114751df1facec96f94e75bffdb3c", + "sha256:8e739d4192758df6e5363791f527deb91c615d63020ee8965df4bcd1a217f9a5", + "sha256:923d3bf8770dfeb3d94bdfee1c5b5a081592de69766436a395e1e6203c19cf71", + "sha256:97772bb55cb47da3de49ca4b59309a9bd91ead730a7cfac1992932486fb41352", + "sha256:98bdfdf734144277132f34f770eeb6b0db2c4de87415f34b178adee766632f24", + "sha256:98f38b1b01e6f270b9279d76261d6f222b72ef06b025cbd4911b962bb6de4c98", + "sha256:99318b5ea78843e3c3e19cd56367216774674a99848f00a6f2dcf84e36039641", + "sha256:9c623ef06876d432dc8acc93ed3494d3453333d767b1b06bba1a016ea9d850c9", + "sha256:9d0f9720dfd0155432d23bcc3605fe5831cd0f586ede4f14ff6f3bebe8fb867a", + "sha256:9e79216760faac6395bee8ca4077a53a309312faba0f71982127ad8625861780", + "sha256:a470c908fd9baaecf41715ea3c30c57b530d598ae5e9de7e0bd532755e66bb1b", + "sha256:a634b9b79e059f45a56ff3ef6e7241662bc6f0e5a096ee6eed6770ea368e8278", + "sha256:acd8195a53d0e84ea95bdf15a2651c53b829a3ddead21b4a620b6a0c5e1ae2ff", + "sha256:addbd207df3718fc9d9de5b6c90a5e3fbe667830cf629186c9fdcafbb6578cb4", + "sha256:ae2aec9d55e108ae2d22fd0bda24450a6c13c116f9698b9e7ba2c6492c4fe715", + "sha256:af6b70ca9788964c5da5b59ca412b62db2ea7f2386a91c0117667bdd963e828c", + "sha256:afa7d60a9203db36a55b6f2868da90aaa829ab415a21fba7fa75678789aeb16f", + "sha256:b08c1931c44e3c034e645f3e3a7f4c47e8b0758fb8f09a52d1e880a307a1066f", + "sha256:b22e356914e606ff398c002b9925df4454c5deca9dbe55b3ba4a5c9b2365cf0f", + "sha256:b8c0f50397c51086df941b48057c82f85d9da000bf4fe6f4bc64c4f649b26a5b", + "sha256:bc068bcd79fe017866f536e0ad9424793220be34e3124476e17e6cb77a97e690", + "sha256:bc30f5a605a366acb7f301b3421508eaec3c1a515c960791bd776cb63d016302", + "sha256:c0d246b3f8a771578279eab9cfcb820dedefd3dd5dc0e34b37a337fe46271fc0", + "sha256:c0fee0a8593028bde17b57527b1ac21fea74f209b3522363e3ba0197ffaa6323", + "sha256:c139d5b103bb1f085d8918815d62ad946224a658ac1a7cc1b93dc44bd498ff9a", + "sha256:c25235cec12c0e38b4104268e312c9c2f3527ebc126d296cff69ea7aa13434dc", + "sha256:c7429d038dc383966c692e752010cbb4d5dab0e515f231aa01cd746aed9db359", + "sha256:c85cd2e64967c0dce2927ad7c62c090aae6d6b7f9e3a6b9fb91f58b890ea6adc", + "sha256:ca04984df012020dd846599b8555666c544982c2a91dc6135565e6708624eb71", + "sha256:cb7d43c07d58ba13736e70dc3e064496efeb1ed4475a28afb26b7a3b030b89df", + "sha256:d018e05cb61eed3050d45bd0c0ef9b75420899f6ae254e68e7f2ef26975098c9", + "sha256:d24d42881eb74729b34014e2e87f3a4d0419c43db309de2dff3f39118716865f", + "sha256:d6e17f218af856ca22c30d1a1ac58b19bccf768b8589eb8d6e45e1f1ff258404", + "sha256:d855d0be1759c5efc404c04977ee48a8b6260aef6441e72c10973924dbde5a73", + "sha256:dea0dcc0e50978ef73be8cb384694b71a6e64b46847ee7decad96dc85fbf650c", + "sha256:e1e9228049cf2442ac486a03a0d543c5dff3089a915a3e39ab809b22672e1d76", + "sha256:e26d052a248d5be2257d848d6078d932cc1fd4e8226639f550344d0a7a2b8813", + "sha256:ee6ccb8197936a308a4034c90a42b30b37c46b7cbda66101d439d6983f59b368", + "sha256:eea9c37b45e73cebb4670afd1779db138eeff0f84ffc0871d2fb90c04c8d3aa8", + "sha256:f195bf641276261e6bc5f79f52601850c9bdbff8af401483b4805dbff535ed30", + "sha256:f264827618400ebeab16708c8acf7870f693b03bfb4d7e95253eb9b35074db5c", + "sha256:f44ccd2eaa433ff1a10f70242dc33315fc192b81664696154127bdd66ad7d3b2", + "sha256:f7a6068d8857c403e105e62132a00e9d9d401bd0efbff7f8b5b5bc8ab768a2d8", + "sha256:f9886176fe4bf1ac008c02adb5bd103f1191799f1897777d203ee44f615325a5", + "sha256:fa1f38d5583d283b40f998e2f13471bfa952e0c423ff95ec2ec329f3e1898107", + "sha256:fa65494e7bd0e3ba33b3e5a5ab30c2b6e95d3d1762baaa56151a0861618dc261", + "sha256:fd7186e23963714bab3c9a2ab75d002078335110d2c9fc883c65cbce43717f26", + "sha256:fec32c22b521fcdeb9aa7dee4373b2d81ca2d3fc8edc532f3e189d6f4f6f1f81" + ], + "markers": "python_version >= '3.7'", + "version": "==1.2.2" + }, + "werkzeug": { + "hashes": [ + "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", + "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746" + ], + "markers": "python_version >= '3.9'", + "version": "==3.1.3" + }, + "yarl": { + "hashes": [ + "sha256:00e5a1fea0fd4f5bfa7440a47eff01d9822a65b4488f7cff83155a0f31a2ecba", + "sha256:02ddb6756f8f4517a2d5e99d8b2f272488e18dd0bfbc802f31c16c6c20f22193", + "sha256:045b8482ce9483ada4f3f23b3774f4e1bf4f23a2d5c912ed5170f68efb053318", + "sha256:09c7907c8548bcd6ab860e5f513e727c53b4a714f459b084f6580b49fa1b9cee", + "sha256:0b0cad37311123211dc91eadcb322ef4d4a66008d3e1bdc404808992260e1a0e", + "sha256:0b3c92fa08759dbf12b3a59579a4096ba9af8dd344d9a813fc7f5070d86bbab1", + "sha256:0fb2171a4486bb075316ee754c6d8382ea6eb8b399d4ec62fde2b591f879778a", + "sha256:1a74a13a4c857a84a845505fd2d68e54826a2cd01935a96efb1e9d86c728e186", + "sha256:1d407181cfa6e70077df3377938c08012d18893f9f20e92f7d2f314a437c30b1", + "sha256:1dd4bdd05407ced96fed3d7f25dbbf88d2ffb045a0db60dbc247f5b3c5c25d50", + "sha256:25b411eddcfd56a2f0cd6a384e9f4f7aa3efee14b188de13048c25b5e91f1640", + "sha256:2d06d3005e668744e11ed80812e61efd77d70bb7f03e33c1598c301eea20efbb", + "sha256:2ec9bbba33b2d00999af4631a3397d1fd78290c48e2a3e52d8dd72db3a067ac8", + "sha256:3236da9272872443f81fedc389bace88408f64f89f75d1bdb2256069a8730ccc", + "sha256:35098b24e0327fc4ebdc8ffe336cee0a87a700c24ffed13161af80124b7dc8e5", + "sha256:41f7ce59d6ee7741af71d82020346af364949314ed3d87553763a2df1829cc58", + "sha256:436c4fc0a4d66b2badc6c5fc5ef4e47bb10e4fd9bf0c79524ac719a01f3607c2", + "sha256:4891ed92157e5430874dad17b15eb1fda57627710756c27422200c52d8a4e393", + "sha256:4ac515b860c36becb81bb84b667466885096b5fc85596948548b667da3bf9f24", + "sha256:5094d9206c64181d0f6e76ebd8fb2f8fe274950a63890ee9e0ebfd58bf9d787b", + "sha256:54d6921f07555713b9300bee9c50fb46e57e2e639027089b1d795ecd9f7fa910", + "sha256:578e281c393af575879990861823ef19d66e2b1d0098414855dd367e234f5b3c", + "sha256:5a3f356548e34a70b0172d8890006c37be92995f62d95a07b4a42e90fba54272", + "sha256:602d98f2c2d929f8e697ed274fbadc09902c4025c5a9963bf4e9edfc3ab6f7ed", + "sha256:61b1a825a13bef4a5f10b1885245377d3cd0bf87cba068e1d9a88c2ae36880e1", + "sha256:61e5e68cb65ac8f547f6b5ef933f510134a6bf31bb178be428994b0cb46c2a04", + "sha256:61ee62ead9b68b9123ec24bc866cbef297dd266175d53296e2db5e7f797f902d", + "sha256:6333c5a377c8e2f5fae35e7b8f145c617b02c939d04110c76f29ee3676b5f9a5", + "sha256:6748dbf9bfa5ba1afcc7556b71cda0d7ce5f24768043a02a58846e4a443d808d", + "sha256:67a283dd2882ac98cc6318384f565bffc751ab564605959df4752d42483ad889", + "sha256:75674776d96d7b851b6498f17824ba17849d790a44d282929c42dbb77d4f17ae", + "sha256:757e81cae69244257d125ff31663249b3013b5dc0a8520d73694aed497fb195b", + "sha256:77a6e85b90a7641d2e07184df5557132a337f136250caafc9ccaa4a2a998ca2c", + "sha256:7c33dd1931a95e5d9a772d0ac5e44cac8957eaf58e3c8da8c1414de7dd27c576", + "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34", + "sha256:7e2ee16578af3b52ac2f334c3b1f92262f47e02cc6193c598502bd46f5cd1477", + "sha256:80316a8bd5109320d38eef8833ccf5f89608c9107d02d2a7f985f98ed6876990", + "sha256:82123d0c954dc58db301f5021a01854a85bf1f3bb7d12ae0c01afc414a882ca2", + "sha256:84b2deecba4a3f1a398df819151eb72d29bfeb3b69abb145a00ddc8d30094512", + "sha256:8503ad47387b8ebd39cbbbdf0bf113e17330ffd339ba1144074da24c545f0069", + "sha256:877d209b6aebeb5b16c42cbb377f5f94d9e556626b1bfff66d7b0d115be88d0a", + "sha256:8874027a53e3aea659a6d62751800cf6e63314c160fd607489ba5c2edd753cf6", + "sha256:88a19f62ff30117e706ebc9090b8ecc79aeb77d0b1f5ec10d2d27a12bc9f66d0", + "sha256:8d39d351e7faf01483cc7ff7c0213c412e38e5a340238826be7e0e4da450fdc8", + "sha256:90adb47ad432332d4f0bc28f83a5963f426ce9a1a8809f5e584e704b82685dcb", + "sha256:913829534200eb0f789d45349e55203a091f45c37a2674678744ae52fae23efa", + "sha256:93b2e109287f93db79210f86deb6b9bbb81ac32fc97236b16f7433db7fc437d8", + "sha256:9d41beda9dc97ca9ab0b9888cb71f7539124bc05df02c0cff6e5acc5a19dcc6e", + "sha256:a440a2a624683108a1b454705ecd7afc1c3438a08e890a1513d468671d90a04e", + "sha256:a4bb030cf46a434ec0225bddbebd4b89e6471814ca851abb8696170adb163985", + "sha256:a9ca04806f3be0ac6d558fffc2fdf8fcef767e0489d2684a21912cc4ed0cd1b8", + "sha256:ac1801c45cbf77b6c99242eeff4fffb5e4e73a800b5c4ad4fc0be5def634d2e1", + "sha256:ac36703a585e0929b032fbaab0707b75dc12703766d0b53486eabd5139ebadd5", + "sha256:b1771de9944d875f1b98a745bc547e684b863abf8f8287da8466cf470ef52690", + "sha256:b464c4ab4bfcb41e3bfd3f1c26600d038376c2de3297760dfe064d2cb7ea8e10", + "sha256:b4f6450109834af88cb4cc5ecddfc5380ebb9c228695afc11915a0bf82116789", + "sha256:b57f4f58099328dfb26c6a771d09fb20dbbae81d20cfb66141251ea063bd101b", + "sha256:b643562c12680b01e17239be267bc306bbc6aac1f34f6444d1bded0c5ce438ca", + "sha256:b958ddd075ddba5b09bb0be8a6d9906d2ce933aee81100db289badbeb966f54e", + "sha256:b9d60031cf568c627d028239693fd718025719c02c9f55df0a53e587aab951b5", + "sha256:ba23302c0c61a9999784e73809427c9dbedd79f66a13d84ad1b1943802eaaf59", + "sha256:ba87babd629f8af77f557b61e49e7c7cac36f22f871156b91e10a6e9d4f829e9", + "sha256:c017a3b6df3a1bd45b9fa49a0f54005e53fbcad16633870104b66fa1a30a29d8", + "sha256:c1e1cc06da1491e6734f0ea1e6294ce00792193c463350626571c287c9a704db", + "sha256:c654d5207c78e0bd6d749f6dae1dcbbfde3403ad3a4b11f3c5544d9906969dde", + "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7", + "sha256:c7d79f7d9aabd6011004e33b22bc13056a3e3fb54794d138af57f5ee9d9032cb", + "sha256:ccaa3a4b521b780a7e771cc336a2dba389a0861592bbce09a476190bb0c8b4b3", + "sha256:ccd17349166b1bee6e529b4add61727d3f55edb7babbe4069b5764c9587a8cc6", + "sha256:ce1af883b94304f493698b00d0f006d56aea98aeb49d75ec7d98cd4a777e9285", + "sha256:d0e883008013c0e4aef84dcfe2a0b172c4d23c2669412cf5b3371003941f72bb", + "sha256:d980e0325b6eddc81331d3f4551e2a333999fb176fd153e075c6d1c2530aa8a8", + "sha256:e17c9361d46a4d5addf777c6dd5eab0715a7684c2f11b88c67ac37edfba6c482", + "sha256:e2c08cc9b16f4f4bc522771d96734c7901e7ebef70c6c5c35dd0f10845270bcd", + "sha256:e35ef8683211db69ffe129a25d5634319a677570ab6b2eba4afa860f54eeaf75", + "sha256:e3b9fd71836999aad54084906f8663dffcd2a7fb5cdafd6c37713b2e72be1760", + "sha256:ef9f7768395923c3039055c14334ba4d926f3baf7b776c923c93d80195624782", + "sha256:f52a265001d830bc425f82ca9eabda94a64a4d753b07d623a9f2863fde532b53", + "sha256:f91c4803173928a25e1a55b943c81f55b8872f0018be83e3ad4938adffb77dd2", + "sha256:fbd6748e8ab9b41171bb95c6142faf068f5ef1511935a0aa07025438dd9a9bc1", + "sha256:fe57328fbc1bfd0bd0514470ac692630f3901c0ee39052ae47acd1d90a436719", + "sha256:fea09ca13323376a2fdfb353a5fa2e59f90cd18d7ca4eaa1fd31f0a8b4f91e62" + ], + "markers": "python_version >= '3.9'", + "version": "==1.18.3" + } + }, + "develop": { + "certifi": { + "hashes": [ + "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", + "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe" + ], + "markers": "python_version >= '3.6'", + "version": "==2025.1.31" + }, + "charset-normalizer": { + "hashes": [ + "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", + "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa", + "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a", + "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", + "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b", + "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", + "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", + "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", + "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", + "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", + "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", + "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", + "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", + "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", + "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", + "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", + "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", + "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", + "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", + "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", + "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e", + "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a", + "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4", + "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca", + "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", + "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", + "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", + "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", + "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", + "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", + "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", + "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", + "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", + "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", + "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", + "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd", + "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c", + "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", + "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", + "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", + "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", + "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824", + "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", + "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf", + "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487", + "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d", + "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd", + "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", + "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534", + "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", + "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", + "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", + "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd", + "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", + "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9", + "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", + "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", + "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d", + "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", + "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", + "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", + "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", + "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", + "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", + "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8", + "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", + "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", + "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", + "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", + "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", + "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", + "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", + "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", + "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", + "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", + "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", + "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", + "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e", + "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6", + "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", + "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", + "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e", + "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", + "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", + "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c", + "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", + "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", + "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089", + "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", + "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e", + "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", + "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616" + ], + "markers": "python_version >= '3.7'", + "version": "==3.4.1" + }, + "coverage": { + "hashes": [ + "sha256:042e7841a26498fff7a37d6fda770d17519982f5b7d8bf5278d140b67b61095f", + "sha256:04bfec25a8ef1c5f41f5e7e5c842f6b615599ca8ba8391ec33a9290d9d2db3a3", + "sha256:0915742f4c82208ebf47a2b154a5334155ed9ef9fe6190674b8a46c2fb89cb05", + "sha256:18c5ae6d061ad5b3e7eef4363fb27a0576012a7447af48be6c75b88494c6cf25", + "sha256:2931f66991175369859b5fd58529cd4b73582461877ecfd859b6549869287ffe", + "sha256:2e4b6b87bb0c846a9315e3ab4be2d52fac905100565f4b92f02c445c8799e257", + "sha256:3043ba1c88b2139126fc72cb48574b90e2e0546d4c78b5299317f61b7f718b78", + "sha256:379fe315e206b14e21db5240f89dc0774bdd3e25c3c58c2c733c99eca96f1ada", + "sha256:42421e04069fb2cbcbca5a696c4050b84a43b05392679d4068acbe65449b5c64", + "sha256:4dfd9a93db9e78666d178d4f08a5408aa3f2474ad4d0e0378ed5f2ef71640cb6", + "sha256:52a523153c568d2c0ef8826f6cc23031dc86cffb8c6aeab92c4ff776e7951b28", + "sha256:554fec1199d93ab30adaa751db68acec2b41c5602ac944bb19187cb9a41a8067", + "sha256:581a40c7b94921fffd6457ffe532259813fc68eb2bdda60fa8cc343414ce3733", + "sha256:5a26c0c795c3e0b63ec7da6efded5f0bc856d7c0b24b2ac84b4d1d7bc578d676", + "sha256:5a570cd9bd20b85d1a0d7b009aaf6c110b52b5755c17be6962f8ccd65d1dbd23", + "sha256:5aaeb00761f985007b38cf463b1d160a14a22c34eb3f6a39d9ad6fc27cb73008", + "sha256:5ac46d0c2dd5820ce93943a501ac5f6548ea81594777ca585bf002aa8854cacd", + "sha256:5c8a5c139aae4c35cbd7cadca1df02ea8cf28a911534fc1b0456acb0b14234f3", + "sha256:6b8af63b9afa1031c0ef05b217faa598f3069148eeee6bb24b79da9012423b82", + "sha256:769773614e676f9d8e8a0980dd7740f09a6ea386d0f383db6821df07d0f08545", + "sha256:771eb7587a0563ca5bb6f622b9ed7f9d07bd08900f7589b4febff05f469bea00", + "sha256:77af0f6447a582fdc7de5e06fa3757a3ef87769fbb0fdbdeba78c23049140a47", + "sha256:7a3d62b3b03b4b6fd41a085f3574874cf946cb4604d2b4d3e8dca8cd570ca501", + "sha256:821f7bcbaa84318287115d54becb1915eece6918136c6f91045bb84e2f88739d", + "sha256:89b1f4af0d4afe495cd4787a68e00f30f1d15939f550e869de90a86efa7e0814", + "sha256:8a1d96e780bdb2d0cbb297325711701f7c0b6f89199a57f2049e90064c29f6bd", + "sha256:8a40fcf208e021eb14b0fac6bdb045c0e0cab53105f93ba0d03fd934c956143a", + "sha256:8f99eb72bf27cbb167b636eb1726f590c00e1ad375002230607a844d9e9a2318", + "sha256:90e7fbc6216ecaffa5a880cdc9c77b7418c1dcb166166b78dbc630d07f278cc3", + "sha256:94ec0be97723ae72d63d3aa41961a0b9a6f5a53ff599813c324548d18e3b9e8c", + "sha256:95aa6ae391a22bbbce1b77ddac846c98c5473de0372ba5c463480043a07bff42", + "sha256:96121edfa4c2dfdda409877ea8608dd01de816a4dc4a0523356067b305e4e17a", + "sha256:a1f406a8e0995d654b2ad87c62caf6befa767885301f3b8f6f73e6f3c31ec3a6", + "sha256:a321c61477ff8ee705b8a5fed370b5710c56b3a52d17b983d9215861e37b642a", + "sha256:a5761c70c017c1b0d21b0815a920ffb94a670c8d5d409d9b38857874c21f70d7", + "sha256:a9abbccd778d98e9c7e85038e35e91e67f5b520776781d9a1e2ee9d400869487", + "sha256:ad80e6b4a0c3cb6f10f29ae4c60e991f424e6b14219d46f1e7d442b938ee68a4", + "sha256:b44674870709017e4b4036e3d0d6c17f06a0e6d4436422e0ad29b882c40697d2", + "sha256:b571bf5341ba8c6bc02e0baeaf3b061ab993bf372d982ae509807e7f112554e9", + "sha256:b8194fb8e50d556d5849753de991d390c5a1edeeba50f68e3a9253fbd8bf8ccd", + "sha256:b87eb6fc9e1bb8f98892a2458781348fa37e6925f35bb6ceb9d4afd54ba36c73", + "sha256:bbb5cc845a0292e0c520656d19d7ce40e18d0e19b22cb3e0409135a575bf79fc", + "sha256:be945402e03de47ba1872cd5236395e0f4ad635526185a930735f66710e1bd3f", + "sha256:bf13d564d310c156d1c8e53877baf2993fb3073b2fc9f69790ca6a732eb4bfea", + "sha256:cf60dd2696b457b710dd40bf17ad269d5f5457b96442f7f85722bdb16fa6c899", + "sha256:d1ba00ae33be84066cfbe7361d4e04dec78445b2b88bdb734d0d1cbab916025a", + "sha256:d39fc4817fd67b3915256af5dda75fd4ee10621a3d484524487e33416c6f3543", + "sha256:d766a4f0e5aa1ba056ec3496243150698dc0481902e2b8559314368717be82b1", + "sha256:dbf364b4c5e7bae9250528167dfe40219b62e2d573c854d74be213e1e52069f7", + "sha256:dd19608788b50eed889e13a5d71d832edc34fc9dfce606f66e8f9f917eef910d", + "sha256:e013b07ba1c748dacc2a80e69a46286ff145935f260eb8c72df7185bf048f502", + "sha256:e5d2b9be5b0693cf21eb4ce0ec8d211efb43966f6657807f6859aab3814f946b", + "sha256:e5ff52d790c7e1628241ffbcaeb33e07d14b007b6eb00a19320c7b8a7024c040", + "sha256:e75a2ad7b647fd8046d58c3132d7eaf31b12d8a53c0e4b21fa9c4d23d6ee6d3c", + "sha256:e7ac22a0bb2c7c49f441f7a6d46c9c80d96e56f5a8bc6972529ed43c8b694e27", + "sha256:ed2144b8a78f9d94d9515963ed273d620e07846acd5d4b0a642d4849e8d91a0c", + "sha256:f017a61399f13aa6d1039f75cd467be388d157cd81f1a119b9d9a68ba6f2830d", + "sha256:f1d8a2a57b47142b10374902777e798784abf400a004b14f1b0b9eaf1e528ba4", + "sha256:f2d32f95922927186c6dbc8bc60df0d186b6edb828d299ab10898ef3f40052fe", + "sha256:f319bae0321bc838e205bf9e5bc28f0a3165f30c203b610f17ab5552cff90323", + "sha256:f3c38e4e5ccbdc9198aecc766cedbb134b2d89bf64533973678dfcf07effd883", + "sha256:f9983d01d7705b2d1f7a95e10bbe4091fabc03a46881a256c2787637b087003f", + "sha256:fa260de59dfb143af06dcf30c2be0b200bed2a73737a8a59248fcb9fa601ef0f" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==7.8.0" + }, + "docker": { + "hashes": [ + "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c", + "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0" + ], + "markers": "python_version >= '3.8'", + "version": "==7.1.0" + }, + "grafana-client": { + "hashes": [ + "sha256:2477a47b923fd0637947e620b0b777c641af18a3025464fa4505783dbf05dfcc", + "sha256:8cb61bb2a87ec07bca10974df276b9a1a95bfdb63f3a696f065692ffc9b8c389" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==4.3.2" + }, + "h11": { + "hashes": [ + "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", + "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761" + ], + "markers": "python_version >= '3.7'", + "version": "==0.14.0" + }, + "idna": { + "hashes": [ + "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" + ], + "markers": "python_version >= '3.6'", + "version": "==3.10" + }, + "iniconfig": { + "hashes": [ + "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", + "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760" + ], + "markers": "python_version >= '3.8'", + "version": "==2.1.0" + }, + "jh2": { + "hashes": [ + "sha256:038091480cd1544e9389b0adbb1b1645a797689dcb68ceae7e45eec96ed24497", + "sha256:0c8e336df8ed1687590695f4469f480eeb4159bf13bb6193791c6530fe114b49", + "sha256:0c9bf2d5e4ef45c1686c6f76935e7ca263f5eae4de92bf5d1873a0e737e4eb7d", + "sha256:0faf6e96f74d27b8ca816b40217904891f91b664ed1c0388737949ceb50ac15d", + "sha256:10ea7f497e6226372e1d4fdbf42c8381f4887819a643ab930bff4072ad298d84", + "sha256:11650f7ed77ee1df30f25d6b3b74b2fa1c94124e074fd455abafea3cbc913d53", + "sha256:12ead3ee3e9c7caa00356b528a5cc7fe210fbe2060628af6e19ed76b8416572e", + "sha256:136b3c5b08883681fcb58f12393a5bbfa422d6e2d5ba887e263e776874276bc6", + "sha256:17d6e1691154ea9f726e43dcb717df48e56c66b5a01c90ad675c6494c36e5be1", + "sha256:19cb987915cc0d321746a12f2a693d087ffb721c37ac9a153cc088c57d4d90eb", + "sha256:1cdf15de698c4026e64fd914fead3180e52bf2a7bcbe44a3392404582dbf2d22", + "sha256:1e81e1c64e33506b8508ba5e3c7c139b2577e78b079c2c16a8e7a02a161f1080", + "sha256:2226c76e4ff2149c5d9f94bed22bf9c4f3411d38cc53d4a7ddfbe0899c8b558c", + "sha256:2837412fb7b684c6ce7392c8bc57440c6dbadaf1bde7a53144381f7df7083c1c", + "sha256:293f0f3da3c391e997e0d55fdb85540e98a8b0406622bb4ba57fb7617697f31e", + "sha256:2b9cc6c0239215a349d28c192fa4c4e7a7348eee7980531525c01bffe39eea80", + "sha256:2f3ad679f84ff236a0d7b71ddc4b3c09fe467abee2f1a86671f0cd417be5352b", + "sha256:358cad2f328c52c15756cf32b0ad17afb0d617e7cdfe93d59aa2616966d825b7", + "sha256:3663712305b509f79c002c8c0ca9994f716cadba576f5a59632dda1aec1ca8c6", + "sha256:41794820ccca039ca2ead6245f30b34601dd1456eee5b5dde620672bb989e79d", + "sha256:44b7e64aff542471c474c24f771eae5efd9152da02a12556f7cb7607020e1420", + "sha256:45770eb0990166026538d3c2fd7d92f17cfde13ca6567570c4baec3ce9162936", + "sha256:498060078a4d1b458e9381fefb027d85329397b50d65287712b3d48233e20836", + "sha256:4c2f18f337c2393f84e45e5011c8b02697b81638b1cec49da60a01b9ed067695", + "sha256:5162d6e475d2762035fb8ea25982bcbec6c58715e33bd0951499f743cd90b110", + "sha256:51e8c890bb59008c95b3a552cefd8bd9ce50a7466a6c920a78cf586e885d7449", + "sha256:56ad3839ac6ac5fd3d023cf59d4b04264b74bb4cb44c0780faf51d6b5ff38fbc", + "sha256:5821638ef0d7c973071810a6786f59b305172197f7e7e469a2ce169e7f4978e3", + "sha256:5ac1b2d379f4d40c13dcce537e69704452943cddbe991fd54a84fdb2da9026d5", + "sha256:5b465d4311b0429fe6fa85df8e2cfcb038c9fface95396dd14e838ecabaaadf2", + "sha256:5d8656b98057329bd03d968aac8d5198389cf51517511295cfc4cb827a507e39", + "sha256:5dcfb3e823ef4b91b70b92848570d1d8cfd584304bd2bd54272dc100c9494def", + "sha256:5e40d23ea43f683f3a7c032dde391104f609b05c21b6d284101120b51dbd50c1", + "sha256:63a01522bde161c713f7fa5ee5d850fee6386fc386073490ebcd438f14579cf2", + "sha256:6b2a3d7756035dde13571f4ad232629b78b7f35c2cd5fda7b464079fc697db3a", + "sha256:6b3be1a6bf6c965aea3b4e3a40df9d2c134c516d89c76cf2b6c81f67e6c5c6ed", + "sha256:6c7bea3357f2dc653756e6da55f66cd21c73d3875c8f3dc4e8d196a876252de0", + "sha256:6e6c8e229507cf29333a2f491cbaa7dff5b8a4a3e613af8090ccce9ce3e4f7a0", + "sha256:6fad27f2a63884ee45d491aebec4b1f38752cd6aaccc625038c21e7f43c02c49", + "sha256:71bfef52547c2b8b145897fa8d1b5142bc52313cfa38c0742e0ef755f0d09c60", + "sha256:72370d312323282b1bf74426e53fae861a310d7ae519b419da46673c38e7d147", + "sha256:76c7d36043a9c478b0c846fcec7da5cb095983722473e503e0122ccd170182b5", + "sha256:78d8a81ef51edb9a2f278a6fb278789b49e304b12bb21bccf2fe7e344f71a9fb", + "sha256:798a6b159ce32181a5e7ab7611c17d1080e74a5541fec47f961b728dab25a76f", + "sha256:7e370567f66a57e2c0e3ae2afcc6f126e1d6babd36831cfd0caad279b05c1c88", + "sha256:8004b845f606b95a8b17efa112aa10b327e46e95dcda604a257b4633d4ed45c8", + "sha256:80b20bf9ea4e709b3b9ae364ac298dfa872b084c186e5c1d60b0b79c79a7ee7e", + "sha256:87303f4bb1b493997f911a4f126123ccd2827d3a2e7dd2390cc6143fbc75805b", + "sha256:8d423f4631395b92dceda39f481a463498131ac02a58581124a44495491f715b", + "sha256:94ee262192db50fb9c069a0be7bb1a426fb1b43af26ce12bf4c6c30e13f46b56", + "sha256:960e4be2e7de340300ab4bcc2b45bed46be1d62330575b8265e6602dbcb9a14c", + "sha256:99397d5e1da6b345cec3e6125e2902b0e6864eb8eaa4be43a2013f059c502c93", + "sha256:9abbb8c1bad08817bad62ae1ea76c01bdbd0ee8c827d05f3ba038c9f6d6f14bb", + "sha256:9c0b8fadf80bc70d341032f92702bda1b0ed78c01e9c495f0df701938c99bcf5", + "sha256:9f977da9abae170eebdcf02bda33727c342fad5dcdbc08498bfdfb6cc6c65489", + "sha256:a6be712ca39d5e9c89b705bc9800be36739436fefb8d0b52b2d332f7d6d22a01", + "sha256:aa434418d6ee44b0ba3a5a407bc9e1543cf496328f43f149e9b58f74a63d5c21", + "sha256:ac4f778e32f7de0ba63346893a4af87c2280ffc1783f594a117be51d908a10da", + "sha256:ac85d65ee369c09b2904b55078ad589961e2e2e03c810963d35a26e6a3931425", + "sha256:ad5d78c664d39960435d4162db31117c8945ba74fb0c414e79ba85a8bdeafdec", + "sha256:ad91f57c3485d87a8edee558dafab0f08c716857d748731c0998dcefe9d3fd5f", + "sha256:afd255d42b340036883ca95bded553b29065b064e2fe5db64ad5988517db9694", + "sha256:b1c2c74f100a0c2110a8e30445554ae331860d32f145c60a2a1e1c27702022a2", + "sha256:b49a8c71378d40d43c6a56eaa536d7823baa43c27c93e082aeb60a9717be0c10", + "sha256:b5f52611323e8e35705e6750a760f32165b41c052d22da154ae343871e7cd50d", + "sha256:b6bf99ae529ac359263269710356d3ddb173c15d8f8dc8849ae794ab811e5cd0", + "sha256:ba361bf87c4701f11241be92c99ef5cf916865dd225955cccb2376bf76717b3c", + "sha256:bc351aa2158575e68943d8e1d5531719ad86bf6607776627ed5a1a60657664af", + "sha256:bd6eb7b1e12e4dd0b75cab1b023272f1333494add5ad61deedac738af1ffeede", + "sha256:bf8852595f5e2d2b072e24c29394b5aca7fba96ecc8656d56660535f9e9872c9", + "sha256:c1dd66541569a2bdbe92589cc96a89f470b20d168f2238fd463e1b59ee3e2d49", + "sha256:c36a7a004cba4e370d0675826eeefe4e42a256638b6b1432263ddb4af317bc02", + "sha256:c886cda61da4d39010be84802bed11bc75f03e8a6094cc18016957a2c80254d4", + "sha256:cc7aa83946f80c66a5d2dea7e165f15aa3eb21e7b74b24d8f850afc0d44bb00e", + "sha256:cea9c4bef70d1358bafec6019164abce362f4de15d79d1ecd64ae31c1749d77a", + "sha256:cfe1951e80869695857986be104a40a1e7fa8ec7de05f86bcbd7bd20854be764", + "sha256:d36cf6f139da3279644794fcfda18af425c8bb122ef9c2e7c762a937bbf7b0f4", + "sha256:d81308faaa9393b7e6ed20718d465c4c2b73c24d5e4826024961acf4b87b1524", + "sha256:db51ea1f9c5ac790848bc271fcdf4108ad1b77a77c6949a96320477962cf7ba5", + "sha256:dd05c18c920a15e00d7a52df37bffd3930fe2c004c690f9422b20e12077e6dbd", + "sha256:df05918a11e1db0198d00486e36673b4b4a89390e4458ff9479b4908dde357ac", + "sha256:e4c31dccf6be131709e545d0258eb5b75c5fac304857ad3976331c6740e8b9d6", + "sha256:e60954d673040430802b29fe5bba698e262182b5ba5f302ff4458e39f8101881", + "sha256:e60e2d2c88a0552e61c37172fe377f6a8abf479130a445314886de4a360ba940", + "sha256:e786f773ddc153846b2ebdb854011cfd1f7c874b8ee79cced3706801341c9f5d", + "sha256:e7cd91548fb95b69edd376f5204e27115ac7d093ec7d80066123a5bdb31c71d9", + "sha256:eaef2ea4f5602aefaaf3d6e8235f3b9ffde35aff15aac1c16cc802f6bbf0a3b5", + "sha256:ec8c5ea93a03775fbadd08462200cf34ce617ec75a032abfa44fd6d3a00e5424", + "sha256:eddeb8574bc9d9abb8491d4a46b60e553c2cea235b80373756acb06568101175", + "sha256:eeb300b0e4b428aab2f70d785cad4306529262af6de8c8c5fe6a4b41a674a434", + "sha256:f39d71ece8e97cf069e4154868eaac1256b133fe23e0459829432e4bb6406472", + "sha256:f4840ddad2b9d53710e92361391944da89e3576641a290066a1719520059247c", + "sha256:f70723a00bcbce0f9a216853139955be45da35741335eb3afead304e77662560", + "sha256:f829cf2ba5b553e6529d6238928c07096f1feb47f4ad536b7f06bca6cc77173f", + "sha256:f96386910467725895f7972939a6faabd6e96b1de0cc2c092e4bd2c40e956e25", + "sha256:fe259a9d6f555bc79aed9bb4b9a7fff73db443b4c483e4a81a428c8a2860428b" + ], + "markers": "python_version >= '3.7'", + "version": "==5.0.8" + }, + "niquests": { + "hashes": [ + "sha256:68e0a7e9f338466b3606945fffd11f75e3c90af7498aa9336ef03812323b7e36", + "sha256:86e484c2c60444aa96069c15f6295af6e25a8bad50781e1326df1b5c7ab48339" + ], + "markers": "python_version >= '3.7'", + "version": "==3.14.0" + }, + "packaging": { + "hashes": [ + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" + ], + "markers": "python_version >= '3.8'", + "version": "==24.2" + }, + "pluggy": { + "hashes": [ + "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", + "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669" + ], + "markers": "python_version >= '3.8'", + "version": "==1.5.0" + }, + "pytest": { + "hashes": [ + "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", + "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==8.3.5" + }, + "python-dotenv": { + "hashes": [ + "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5", + "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==1.1.0" + }, + "qh3": { + "hashes": [ + "sha256:0107f576a0524421e1b0f9e0437d2881a1835b1b6105eadd7ea0c1c9bf2da917", + "sha256:06159707895c606a321ccb5630347a2d2a44ee584f22945e5b22b0ad34f21ec8", + "sha256:06255835f99ea1af9e5d358056011686fcccbafaba893454027daa62ab6f701f", + "sha256:09b2305a954e61a9ed8b46a7a45f54e8d95ef870a47d5fd1836e14c7600d3b92", + "sha256:0a51dcffae03a89ddbab1884860569e0d1dbbf95deee47457c1fd29b4ac8d220", + "sha256:0a5d1cd881b7d43481ad60262cf3390a555e0e51751bc2af70ba4a612487e797", + "sha256:0e1c273660f9b8511c22d0b082137556e46d6a7eccf132bd82f95d29f90488b2", + "sha256:0e540cc7e7da65da30381bdb73a789a8635c6aaef98688d904eee3bc587654a5", + "sha256:10ed818f47dc522350a12641e8f2bea19ff824f8ce373c23a8e594b3481fd7a4", + "sha256:195b4ad58cf5a8da218e2368d34f47628c14581f3cc9863fc0406b32e137f3a6", + "sha256:1a80d07249c7ccbaa57bb9015b5ead0ead7ac1940cd5483548dfe56db99ce7a4", + "sha256:1cf0b18823801078d2294a0356abc2be34b4a224bea863a87029c1c97d6c34e0", + "sha256:1fac2ab4b8a2e50894b54a19416cd363defe0fb33f52754686ea58999f98dfc5", + "sha256:205cdaea9da8881b31b76eb6da5b88c9558ba96bc16a3ecf11333098ac7f3859", + "sha256:2294e78bcc40728a3a772df0f8ecf8b8756616d06dd001029016876aa4e5c9de", + "sha256:235236ab195d34e7cd18d186e46b7a4f8aceafe246bf36b42913f72627ded414", + "sha256:25eef1f2be50d79d23e01a567c719e46e4892518a5ccc96685fcb4746357320b", + "sha256:2ae147b756c3adf59699756feb9e07d4a69674f57b4e13d6c25f9d1dc3c8707c", + "sha256:2c9cdd7ea49c79b671e7de35dad61d2aa91920e2498d0c6dfa932d5e05070a5e", + "sha256:2dc9f269d7316b0a44e61ae7a11ffd8daa800b3f5ba773de2e9d8c4ee636a896", + "sha256:2f94d69edb0070ef4ec414deabfc2369aa2100b11bf4a4f2f393f2c28c4bc7ba", + "sha256:311da331e31c55afc3f4f4f2ba9d07a1d700ffb7db5aa4f58300b9f56f2523dc", + "sha256:3578844a9ff4c342a409d010f909782afc52a31680876f7fab65bf133aa3f4db", + "sha256:4032c2898b4c0ff7a25cf7d68c3b1f2abdcaf4f25cc8b6802a941a842f9a95b6", + "sha256:40abd150eddfa0884c139bd281e87ff920d4cd52d685fc4ef25ddcc77ff7a220", + "sha256:43e32602651d07f8a0860ba0a45d8c8fe9ccd537030e7632d1258f7b84881416", + "sha256:45a21d25fe17168f4db09fcaabee5dd171763ad1bd8753c257297837f5ba9197", + "sha256:45bfbb126e31ecf63ef74c249d38d07e149c0663b4a191cf9e2e3445a80758d5", + "sha256:4745667c9956bcfd74ff677edd4c73d6cb578b6b47c5fb3d246aaa223dd6a004", + "sha256:4936a5d8915866b4f08ab18018f41ed93a2593788ad0a80796aada2e23d402e5", + "sha256:4a45a9698b3bcae05f91356f50df8dab3c3fdef3187548b9c4a396a6eb6760b5", + "sha256:4b84c1ca283278e2e22a3b9e2ce8ea55c0a1797d6e86255640a1b6293fe18b2a", + "sha256:4dc88397ed7f3b46f542f87e19050a7f82267225009ce65651ac44cb55b204b1", + "sha256:4e10a872077373c71d7938fb1a7ae0561f2e79aad2b1b5323dbb6325a389041a", + "sha256:4f1b5dcb4d9da5b441e0b14216b816be7b5b5d080c2ccb957adf84266411ff6b", + "sha256:50d25182d598312197f500a65acebf5430391764e6ffcdb73d96e80c5dd06fc7", + "sha256:529c5b9e27fced27befce26e2699eca3110c576f6427dfbd26e30b7666b2d6d1", + "sha256:571da625b22e953731307539b44b2177f6ab13b6142d7698c0f28b9379ae1be6", + "sha256:5a9de89e2480b385a99613798d375e69a0a53d4575bd74b133307c8e83a84751", + "sha256:5bcc46cf89cb1036c2d029c01f360c82180329997a75728b20dc205f34114327", + "sha256:5dfa6238a6236f2bb3ecaac9befd23cee0bcbb9e497003fb3aef875e19325c61", + "sha256:6342b961b18037e3df8692e8914c576816a966bf29f913ee2728e7e838bde9bd", + "sha256:65e112c175a0b0328822dd0d19ead9ef1d7925359d154fb52e46b080945eef38", + "sha256:6f8a2b15c4dd58133e92f95d4312efd09b87ec15b881885629dff70e89f1e751", + "sha256:726f749444d1cc73c1bf221343dc6fdbde2541ffe30860d2d5ef6e310a1f5478", + "sha256:742f39cd807df31c21e035aec63f6f61e139a60545cffb16e8e87f61609d7cba", + "sha256:7840c18ec27aa08ecdd8ff23df348c124378c6f3edf9a0e02b16a5a4ce504c89", + "sha256:79d1de24d3c7345719af8333b64f19a8777dd50a059851bfcfa583c7109eddf2", + "sha256:7ba9303c5334d64b547483be92c4bbacd37964ff3abd0b1e8c82c63ec6f7b3ec", + "sha256:85587d9dfbd2f7f8622cf57f3c1a19cee441b5607a982cdf4c08ef38d45d5a36", + "sha256:8711b86e447e689d1b693419708b6ad64bf0c57091b94a3f65c6d4bd7cfb7d9a", + "sha256:877edc4db25309d86af07d992926394936f491cce84fce439961729552e942fe", + "sha256:8bb17669e362d3456bebd5c69abb0c26e8ab29c10894f123c715b0217aece479", + "sha256:8bb17a1e50e35a8d07cab784caea68b33f739391ccb5e3161afb9db0bde8faf4", + "sha256:8d4640a6bb3aa29797bdcf0c5bae4e86da5f2fbf84b67a7fad549fa34c19aa98", + "sha256:90697f3d9e4b3ddccfb31b40637bac6d44b39288cd57f78e51ff13e70916eccc", + "sha256:90f127f57c00b111ea3ffd95f4c12ad83efebd10310fd718d66771dd64e568f1", + "sha256:95f8f70bca1e880da7559ef38b7f1778a3b39b586fc829b8a7e989e912aa988f", + "sha256:9a60c102a01dfa8c5d737499c9a5d5e7c2b6642009c9b80b27f228ec50ce6fb0", + "sha256:9c7f1821ec749ea29bd9d079e4f13a552371731d0b664962a60cbb2f31d571b5", + "sha256:9f81ee66fadedbfd4d5c49e64151db3b6f353b041ddf5ab0b151340a4467e038", + "sha256:9f8e530e29e1afe9231b1100645aa5cc240b823c0e4162f70046270a3559400c", + "sha256:a0c647db3f156e8c94a63c1fa0fc4f2ce8b70f0eb12f2726e6c19493198b1e99", + "sha256:a0cda60607ab4ffc14fa8425ea7c9ae78ad60923c3c8be94d19c14f83198b1cf", + "sha256:a5bff397d49da302b5afbdf244dd7ca480a827f5de856d957df05dfd7e73b490", + "sha256:a94bd391b955b24948b2986845f9c6ad8abc709c2d57d0515daeacf16a2a3a4c", + "sha256:ad4572bd37c1a6a7a12ff47da4f3578a13e3c8ee85a1f02d2435dfdc6d9ed394", + "sha256:b13b7de1686f1b5da7526dc4f0de410a685f5cb654e984b09ddd8d14be6fffc0", + "sha256:b1724c43c5c0d08b68c3407467e07794b9adf153b6de8300d61883e8d95fa640", + "sha256:b27d29cb718df9ed006f8c75a89dd90534437761b2477dc7a4145bde0daa60fc", + "sha256:b3afa3a78b0f011ff5a09dea37d74fcea9269b318d2828f18b2fbf9dde625a71", + "sha256:bd6a61007e678284178bb00931af59f686a2a55797505e0886241050ec5c243c", + "sha256:befeca45fd7787c08a3286fb72caaccfa4c3962760981dfeb0992f5ba9be5cb2", + "sha256:c2d31b8233f406e00f180e221986f436765c3bb06839e72c898feca31fef1d4e", + "sha256:c3e2518ce442b70314892a594e21157deb13fbc436f77ad6555439cfd9912035", + "sha256:c8d5fbee607db24ef6c7b0bd08c21226d10782df4149b9d6f1f1516c7c85092b", + "sha256:cc2cc804998e852bdffcc87e8d008043ffa85efe6d3516d9784714d709f14774", + "sha256:cd8a681107c6118f60a0714671cec7b301533f25984a5c898e547a33a01af75c", + "sha256:d056831ebf3fa8116672ae970ad19a9f5f1427a2217cd0e01c1eaac5f8222668", + "sha256:d5ac3e8e3f66ff88819205dbc67e6f771cbb80529325ca9f3bc03fa00c5c83aa", + "sha256:dba15ca2da7859300ae79d2ea2eb8bb0eb827b93a2f104981783add16a97058a", + "sha256:de6cabb89248b60ea9bb9d7848de78dfb824abfdc15f52448a8efe821dd7d559", + "sha256:e02f6d1cc2005b847176dd8770fdfe90f04a34a3f094b79a8369bde0aa8f6a04", + "sha256:e514bd4b27c953c46485b2be0ecd2421aa196c5a0cd7d67f1ccec16a56b00507", + "sha256:e53464124379764f982a69f5ab34d0d5c527e8ac1e788db86a25f79045e5b18d", + "sha256:e9cf59660a543bef86de457c671c1d78ad2d88c53bb9eb3fce6ce0cb9729d490", + "sha256:edfc1bc732bc5e62fdaea268a541eb442d5e04927cb27dfd8e92ef07213658d2", + "sha256:ee8e7a66be70a18f5e0558f2f6a89e39c608f87b027234848f76a6699975dcf8", + "sha256:effb7072efef7dca10a98c24be0cc882a40edc78e293b41f5b6dc7f1952215ed", + "sha256:f04e4ee7e3c123ac7f21cee6f819cfa9b5a376e656257dfa7a4d133b3590bdd9", + "sha256:f0531c7abe963affebd3fb6cf9ea87eb8c63a0240535d81d0223945bd41be254", + "sha256:f5afd1c216315682a6bbf606618de0e3817ed8eeafc27ad7660ef2f581d4fd46", + "sha256:f93d3c74e00268ac6042c080653a34d0f0e8903697fd8dc480c1e3de81c90faf", + "sha256:fbc4e6452cc48c3e1398fe930349e2ec9ad76a2c00e729f3e797700c2f0646e6", + "sha256:fc73fc2889a01a43737c7a7c7fb9ee13aa56065b22abbed0e787cc58a3747808" + ], + "markers": "python_version >= '3.7'", + "version": "==1.4.2" + }, + "requests": { + "hashes": [ + "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", + "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" + ], + "markers": "python_version >= '3.8'", + "version": "==2.32.3" + }, + "requests-mock": { + "hashes": [ + "sha256:b1e37054004cdd5e56c84454cc7df12b25f90f382159087f4b6915aaeef39563", + "sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401" + ], + "index": "pypi", + "markers": "python_version >= '3.5'", + "version": "==1.12.1" + }, + "testcontainers": { + "hashes": [ + "sha256:03f85c3e505d8b4edeb192c72a961cebbcba0dd94344ae778b4a159cb6dcf8d3", + "sha256:31ed1a81238c7e131a2a29df6db8f23717d892b592fa5a1977fd0dcd0c23fc23" + ], + "index": "pypi", + "markers": "python_version >= '3.9' and python_version < '4.0'", + "version": "==4.10.0" + }, + "typing-extensions": { + "hashes": [ + "sha256:0a4ac55a5820789d87e297727d229866c9650f6521b64206413c4fbada24d95b", + "sha256:c8dd92cc0d6425a97c18fbb9d1954e5ff92c1ca881a309c45f06ebc0b79058e5" + ], + "markers": "python_version >= '3.8'", + "version": "==4.13.0" + }, + "urllib3": { + "hashes": [ + "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", + "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" + ], + "markers": "python_version >= '3.9'", + "version": "==2.3.0" + }, + "urllib3-future": { + "hashes": [ + "sha256:3adfa22c5718caee5ca69bc7f7461dc529f4396494d4d9b1db8af7c56cd3ac34", + "sha256:9cd79ce61da77b5d56681bc126f42955c2153e9c0da2f0a62bca8e0a05641f92" + ], + "markers": "python_version >= '3.7'", + "version": "==2.12.915" + }, + "verlib2": { + "hashes": [ + "sha256:2862f19528db400d130253a2b71c7c3616ee14e1d54bf6833bc0929d2cddd141", + "sha256:cf8e2be044b834a2670f2d4c20a93cfc674933c0070543a6f61d531439cca200" + ], + "markers": "python_version >= '3.6'", + "version": "==0.3.1" + }, + "wassima": { + "hashes": [ + "sha256:10508102696d5e2cf4df6942a8ae251c136a49dc32591e9c3f7dd007f5ea1c2f", + "sha256:1102836ba373912537eba891e7e5893532d4ee915ee2486e981b73f925f63c37", + "sha256:11887557464e0c3f9694fb16406bb56c1fb1566178cd04bfb5b4624fad183b31", + "sha256:12c855cc5b96a2ac32d405ab7de1563fc91be54108b4fb16b06d125d07ea892b", + "sha256:134e863b692c35afe8f5ccbe8082fa39963804e20439a4c7aa98510197034704", + "sha256:17f129f4d36591772d906bcc893b76b236363fda61b575067ddfa8250f84ad30", + "sha256:17f132ffbab294902f8740708f27fd995ea04182fe4b4fde20be563f8a010715", + "sha256:18bc78b2230c6f1f9ddbeb6ca38439fea4cc8f60836af4f3538ed259e60e5eb8", + "sha256:194c3fad38603618dec03307d10a4ece852516df56560e04fb2562506f79c175", + "sha256:1b18ec743ab98dcbfc221749026b23fc573891651342f20971e53bdbf56d28ae", + "sha256:1fa19a3652509edd18f693cd9c873d8f73c9d1624eae6c3bf93e561b18ae2766", + "sha256:24bdb1a2b90c215e11ed7ce82ed7eada339c7dca8e0366916e4e3215b3b9d8d3", + "sha256:27d518f0863788c826faf387326f3babb3ea95a0b908f5b3ad2bc1fcc3c5a37d", + "sha256:350b5854dfb3eeb95cd17723b0f3503de0c01454da5ae7d60f192be2009239eb", + "sha256:3b3a4c8ffa76147507f0c88c5cc8c76ef96ab93b81e49b288a3a0b94ebfb34af", + "sha256:3e00fa8ff1aef7d8aad2e1b957add6cba8549a42e415400bd72ff1b61dc9da9d", + "sha256:3f29045dd0a7c287f850f1dc3948632a2d2cf7dd7ec02271c5f248f058da5650", + "sha256:4a528244e4a0f9e01b8593b1c8a60ac1d80ce8b13fe079f44b38328e4be075e3", + "sha256:4c4f5ca102fd083aa2b05c65a1fd18175e3dc7a889525fd2964219ee3c51edef", + "sha256:52358d86195954816231d2aa8c2919b85075320b6d3ba5b96216985c3182bfa0", + "sha256:52f473233ec4d57322c6295e85b3912dc1fc400d6308a04bd427b863934aa74e", + "sha256:556cded582aef3089de889b5a6efcf6d87fabfec55d574fcc3a4ada21308d487", + "sha256:564eda7bf0420c8cbebe5e8efc15f1b27fdcb37ebc4c2f92b8461ca83381b223", + "sha256:57a0ab5aed596f129fd4ea7584336b11fbef25c07d1351e37a959901dea8728e", + "sha256:58f1fddd660da8c8f30f4b8460129e2f217c226cd1b54b1cabb6465881fd788a", + "sha256:597b0d8ba697f4319bc1f301ed31630ca783c9fe82d2a2434dd2f7f709c4e394", + "sha256:5b194f0de77a4ae7bcf217a3ccd10798e94ca430cec6307628098a61cd2ac230", + "sha256:5f5ee564f4b836ed1b70ddb187c817e8f6f1ffb521a636bb20676f07b523396b", + "sha256:601f96340e4c8071994a39a76d4278e8e1d087cf385781dba795c5334262d865", + "sha256:61bfa09f38c36f1b1e6e44e7af888bb8f9d739e86099082a3b45875651a425e2", + "sha256:67fd323b8ad0e057c06b153983d8c50f812aad979ac89b07ed6952c345f6da02", + "sha256:69cb51f629d118256da3d2373575190c7e30d3fa67c344dc655f6c8ab3e83f0d", + "sha256:6b1d7ceeede8d8eed48616d2d33ed23d2dff307d0b17c577eafdadafe86a0478", + "sha256:6b7d696155ddd7ab5739ac221e8854115d0d8171bbf805074d9484083de386aa", + "sha256:6d23e9483756b81850b82e8b7ed20fd23de22b50d6a678f765c660d4206b7ce9", + "sha256:7b0229fecc849234f2a2d11e948ac38a9bab02d201fa4d6ad43c143e18c1a66e", + "sha256:7c53050b670d702eed541503175bd5441fc4bdf3898714f8eac8c6ae9db548ac", + "sha256:7d65676f1fc138d1742f704bf490045571b9c2c48cab7d2c2076a52729c143e5", + "sha256:7db25328c40cd574e5a68ef6507c5af4d1fa2a44cb3c028ff9ca6b522f8faf32", + "sha256:83ce1b09e9eb2ae033c303b74ecc4f3186bbc0897db1d8cd9942153b0631b8e0", + "sha256:86c509900cbb90b7b75155c580b22af591b696fa059059bcdbd75bc74179df85", + "sha256:87f80d0075f0d396b73d41bb1626a2dd5607e0db4b74cb17e55d874fcd538971", + "sha256:8b719755d556649f2fbf226cf1ca8581ade114751df1facec96f94e75bffdb3c", + "sha256:8e739d4192758df6e5363791f527deb91c615d63020ee8965df4bcd1a217f9a5", + "sha256:923d3bf8770dfeb3d94bdfee1c5b5a081592de69766436a395e1e6203c19cf71", + "sha256:97772bb55cb47da3de49ca4b59309a9bd91ead730a7cfac1992932486fb41352", + "sha256:98bdfdf734144277132f34f770eeb6b0db2c4de87415f34b178adee766632f24", + "sha256:98f38b1b01e6f270b9279d76261d6f222b72ef06b025cbd4911b962bb6de4c98", + "sha256:99318b5ea78843e3c3e19cd56367216774674a99848f00a6f2dcf84e36039641", + "sha256:9c623ef06876d432dc8acc93ed3494d3453333d767b1b06bba1a016ea9d850c9", + "sha256:9d0f9720dfd0155432d23bcc3605fe5831cd0f586ede4f14ff6f3bebe8fb867a", + "sha256:9e79216760faac6395bee8ca4077a53a309312faba0f71982127ad8625861780", + "sha256:a470c908fd9baaecf41715ea3c30c57b530d598ae5e9de7e0bd532755e66bb1b", + "sha256:a634b9b79e059f45a56ff3ef6e7241662bc6f0e5a096ee6eed6770ea368e8278", + "sha256:acd8195a53d0e84ea95bdf15a2651c53b829a3ddead21b4a620b6a0c5e1ae2ff", + "sha256:addbd207df3718fc9d9de5b6c90a5e3fbe667830cf629186c9fdcafbb6578cb4", + "sha256:ae2aec9d55e108ae2d22fd0bda24450a6c13c116f9698b9e7ba2c6492c4fe715", + "sha256:af6b70ca9788964c5da5b59ca412b62db2ea7f2386a91c0117667bdd963e828c", + "sha256:afa7d60a9203db36a55b6f2868da90aaa829ab415a21fba7fa75678789aeb16f", + "sha256:b08c1931c44e3c034e645f3e3a7f4c47e8b0758fb8f09a52d1e880a307a1066f", + "sha256:b22e356914e606ff398c002b9925df4454c5deca9dbe55b3ba4a5c9b2365cf0f", + "sha256:b8c0f50397c51086df941b48057c82f85d9da000bf4fe6f4bc64c4f649b26a5b", + "sha256:bc068bcd79fe017866f536e0ad9424793220be34e3124476e17e6cb77a97e690", + "sha256:bc30f5a605a366acb7f301b3421508eaec3c1a515c960791bd776cb63d016302", + "sha256:c0d246b3f8a771578279eab9cfcb820dedefd3dd5dc0e34b37a337fe46271fc0", + "sha256:c0fee0a8593028bde17b57527b1ac21fea74f209b3522363e3ba0197ffaa6323", + "sha256:c139d5b103bb1f085d8918815d62ad946224a658ac1a7cc1b93dc44bd498ff9a", + "sha256:c25235cec12c0e38b4104268e312c9c2f3527ebc126d296cff69ea7aa13434dc", + "sha256:c7429d038dc383966c692e752010cbb4d5dab0e515f231aa01cd746aed9db359", + "sha256:c85cd2e64967c0dce2927ad7c62c090aae6d6b7f9e3a6b9fb91f58b890ea6adc", + "sha256:ca04984df012020dd846599b8555666c544982c2a91dc6135565e6708624eb71", + "sha256:cb7d43c07d58ba13736e70dc3e064496efeb1ed4475a28afb26b7a3b030b89df", + "sha256:d018e05cb61eed3050d45bd0c0ef9b75420899f6ae254e68e7f2ef26975098c9", + "sha256:d24d42881eb74729b34014e2e87f3a4d0419c43db309de2dff3f39118716865f", + "sha256:d6e17f218af856ca22c30d1a1ac58b19bccf768b8589eb8d6e45e1f1ff258404", + "sha256:d855d0be1759c5efc404c04977ee48a8b6260aef6441e72c10973924dbde5a73", + "sha256:dea0dcc0e50978ef73be8cb384694b71a6e64b46847ee7decad96dc85fbf650c", + "sha256:e1e9228049cf2442ac486a03a0d543c5dff3089a915a3e39ab809b22672e1d76", + "sha256:e26d052a248d5be2257d848d6078d932cc1fd4e8226639f550344d0a7a2b8813", + "sha256:ee6ccb8197936a308a4034c90a42b30b37c46b7cbda66101d439d6983f59b368", + "sha256:eea9c37b45e73cebb4670afd1779db138eeff0f84ffc0871d2fb90c04c8d3aa8", + "sha256:f195bf641276261e6bc5f79f52601850c9bdbff8af401483b4805dbff535ed30", + "sha256:f264827618400ebeab16708c8acf7870f693b03bfb4d7e95253eb9b35074db5c", + "sha256:f44ccd2eaa433ff1a10f70242dc33315fc192b81664696154127bdd66ad7d3b2", + "sha256:f7a6068d8857c403e105e62132a00e9d9d401bd0efbff7f8b5b5bc8ab768a2d8", + "sha256:f9886176fe4bf1ac008c02adb5bd103f1191799f1897777d203ee44f615325a5", + "sha256:fa1f38d5583d283b40f998e2f13471bfa952e0c423ff95ec2ec329f3e1898107", + "sha256:fa65494e7bd0e3ba33b3e5a5ab30c2b6e95d3d1762baaa56151a0861618dc261", + "sha256:fd7186e23963714bab3c9a2ab75d002078335110d2c9fc883c65cbce43717f26", + "sha256:fec32c22b521fcdeb9aa7dee4373b2d81ca2d3fc8edc532f3e189d6f4f6f1f81" + ], + "markers": "python_version >= '3.7'", + "version": "==1.2.2" + }, + "wrapt": { + "hashes": [ + "sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f", + "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c", + "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a", + "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b", + "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555", + "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c", + "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b", + "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6", + "sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8", + "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662", + "sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061", + "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998", + "sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb", + "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62", + "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984", + "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392", + "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2", + "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306", + "sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7", + "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3", + "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9", + "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6", + "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192", + "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317", + "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f", + "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda", + "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563", + "sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a", + "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f", + "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d", + "sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9", + "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8", + "sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82", + "sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9", + "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845", + "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82", + "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125", + "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504", + "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b", + "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7", + "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc", + "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6", + "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40", + "sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a", + "sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3", + "sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a", + "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72", + "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681", + "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438", + "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae", + "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2", + "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb", + "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5", + "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a", + "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3", + "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8", + "sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2", + "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22", + "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72", + "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061", + "sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f", + "sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9", + "sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04", + "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98", + "sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9", + "sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f", + "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b", + "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925", + "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6", + "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0", + "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9", + "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c", + "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991", + "sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6", + "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000", + "sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb", + "sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119", + "sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b", + "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58" + ], + "markers": "python_version >= '3.8'", + "version": "==1.17.2" + } + } +} diff --git a/dbrepo-dashboard-service/init/app.py b/dbrepo-dashboard-service/init/app.py new file mode 100644 index 0000000000..41cfd9a0e5 --- /dev/null +++ b/dbrepo-dashboard-service/init/app.py @@ -0,0 +1,67 @@ +import logging +import os +from logging.config import dictConfig +from typing import List + +from dbrepo.RestClient import RestClient +from dbrepo.api.dto import Database +from dbrepo.core.client.dashboard import DashboardServiceClient + +logging.addLevelName(level=logging.NOTSET, levelName='TRACE') +logging.basicConfig(level=logging.DEBUG) + +# logging configuration +dictConfig({ + 'version': 1, + 'formatters': { + 'default': { + 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', + }, + 'simple': { + 'format': '[%(asctime)s] %(levelname)s: %(message)s', + }, + }, + 'handlers': {'wsgi': { + 'class': 'logging.StreamHandler', + 'stream': 'ext://flask.logging.wsgi_errors_stream', + 'formatter': 'simple' # default + }}, + 'root': { + 'level': 'DEBUG', + 'handlers': ['wsgi'] + } +}) + + +def dashboard_client(): + return DashboardServiceClient(os.getenv('DASHBOARD_UI_ENDPOINT', 'http://localhost:3000'), + os.getenv('SYSTEM_USERNAME', 'admin'), os.getenv('SYSTEM_PASSWORD', 'admin')) + + +def rest_client(): + return RestClient(endpoint=os.getenv("METADATA_SERVICE_ENDPOINT", "http://localhost"), + username=os.getenv('SYSTEM_USERNAME', 'admin'), password=os.getenv('SYSTEM_PASSWORD', 'admin')) + + +def fetch_databases() -> List[Database]: + databases = [] + for index, database in enumerate(rest_client().get_databases()): + logging.debug(f"fetching database details for database id: {database.id}") + databases.append(rest_client().get_database(database_id=database.id)) + logging.info(f"Fetched {len(databases)} database(s)") + return databases + + +def upsert_dashboard(database: Database) -> None: + db = dashboard_client().find(database.dashboard_uid)['dashboard'] + if db is None: + db = dashboard_client().create(database.internal_name, database.dashboard_uid)['dashboard'] + rest_client().update_database_dashboard(database.id, db['uid']) + return + dashboard_client().update(database) + + +if __name__ == "__main__": + for database in fetch_databases(): + upsert_dashboard(database) + logging.info("Finished. Exiting.") diff --git a/dbrepo-dashboard-service/init/lib/dbrepo-1.8.0-py3-none-any.whl b/dbrepo-dashboard-service/init/lib/dbrepo-1.8.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..a285fef8ff07eaeffb5a1dfbab34dd395c0330d9 GIT binary patch literal 88139 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šlGb7gmLWPCSy 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˴@-L3iT?xh&#&)r;io13r6-SA}<y(qs< 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 literal 0 HcmV?d00001 diff --git a/dbrepo-dashboard-service/init/lib/dbrepo-1.8.0.tar.gz b/dbrepo-dashboard-service/init/lib/dbrepo-1.8.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..4b3de54c835f7085ce9546cc519400bdbc9480b0 GIT binary patch literal 97612 zcmb2|=HU3|^e&z0e@aqOYC*oPp`L}FfnG^s5yP9kud8mmZPJ)^zluxe>`AqqVy<^n z-K#CCFAB*PFX~nfJegwiFQbD&wa2l6(cxsz^!cx9p0j?NJa^SA?R6}gU6YbOdFu$h zc(-cZx^*C&mt$u3|M%LTFMD&N%0Ap(T(j+l`uq3SuDzT0tMB~w?Pc4__Zi#OZf`kn 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 literal 0 HcmV?d00001 diff --git a/dbrepo-search-service/init/tests/rsa/rs256.key b/dbrepo-dashboard-service/init/tests/rsa/rs256.key similarity index 100% rename from dbrepo-search-service/init/tests/rsa/rs256.key rename to dbrepo-dashboard-service/init/tests/rsa/rs256.key diff --git a/dbrepo-search-service/init/tests/rsa/rsa256.pkey b/dbrepo-dashboard-service/init/tests/rsa/rsa256.pkey similarity index 100% rename from dbrepo-search-service/init/tests/rsa/rsa256.pkey rename to dbrepo-dashboard-service/init/tests/rsa/rsa256.pkey diff --git a/dbrepo-dashboard-service/init/tests/test_app.py b/dbrepo-dashboard-service/init/tests/test_app.py new file mode 100644 index 0000000000..60f3ec44cf --- /dev/null +++ b/dbrepo-dashboard-service/init/tests/test_app.py @@ -0,0 +1,100 @@ +import unittest + +import requests_mock +from dbrepo.api.dto import Database, Table, Constraints, Column, ColumnType, ConceptBrief, UnitBrief, \ + UserBrief, ContainerBrief, ImageBrief, DatabaseBrief +from dbrepo.api.exceptions import NotExistsError + +from app import fetch_databases + +req = Database(id="209acf92-5c9b-4633-ad99-113c86f6e948", + name="Test", + internal_name="test_tuw1", + owner=UserBrief(id="c6b71ef5-2d2f-48b2-9d79-b8f23a3a0502", username="foo"), + contact=UserBrief(id="c6b71ef5-2d2f-48b2-9d79-b8f23a3a0502", username="foo"), + exchange_name="dbrepo", + is_public=True, + is_schema_public=True, + is_dashboard_enabled=True, + container=ContainerBrief(id="7efe8b27-6cdc-4387-80e3-92ee28f4a7c5", + name="MariaDB", + internal_name="mariadb", + image=ImageBrief(id="f97791b4-baf4-4b18-8f7d-3084818e6549", + name="mariadb", + version="11.1.3", + default=True)), + tables=[Table(id="f94a6164-cad4-4873-a9fd-3fe5313b2e95", + database_id="209acf92-5c9b-4633-ad99-113c86f6e948", + name="Data", + internal_name="data", + owner=UserBrief(id="c6b71ef5-2d2f-48b2-9d79-b8f23a3a0502", username="foo"), + constraints=Constraints(uniques=[], foreign_keys=[], checks=[], primary_key=[]), + is_versioned=False, + queue_name="dbrepo", + routing_key="dbrepo.1.1", + is_public=True, + is_schema_public=True, + columns=[Column(id="7bef7e68-88f1-438e-9b94-0a77afd21471", + database_id="209acf92-5c9b-4633-ad99-113c86f6e948", + table_id="f94a6164-cad4-4873-a9fd-3fe5313b2e95", + name="ID", + ord=0, + internal_name="id", + type=ColumnType.BIGINT, + is_null_allowed=False, + size=20, + d=0, + concept=ConceptBrief(id="fb32ecf6-1f68-49b4-85ee-04e76263cbef", + uri="http://www.wikidata.org/entity/Q2221906"), + unit=UnitBrief(id="a67d735e-32ef-4917-b412-fe099c6757a1", + uri="http://www.ontology-of-units-of-measure.org/resource/om-2/degreeCelsius"), + val_min=0, + val_max=10)] + )]) + + +class AppUnitTest(unittest.TestCase): + + def test_fetch_databases_succeeds(self): + with requests_mock.Mocker() as mock: + # mock + mock.get('/api/database', + json=[DatabaseBrief(id='209acf92-5c9b-4633-ad99-113c86f6e948', + name="Test", + internal_name="test_tuw1", + owner_id="c6b71ef5-2d2f-48b2-9d79-b8f23a3a0502", + is_public=True, + is_schema_public=True, + contact=UserBrief(id="c6b71ef5-2d2f-48b2-9d79-b8f23a3a0502", + username="foo")).model_dump()]) + mock.get(f'/api/database/{req.id}', json=req.model_dump()) + # test + response = fetch_databases() + self.assertEqual(1, len(response)) + + def test_fetch_databases_empty_succeeds(self): + with requests_mock.Mocker() as mock: + # mock + mock.get('/api/database', json=[]) + # test + response = fetch_databases() + self.assertEqual(0, len(response)) + + def test_fetch_databases_not_found_fails(self): + with requests_mock.Mocker() as mock: + # mock + mock.get('/api/database', + json=[DatabaseBrief(id='209acf92-5c9b-4633-ad99-113c86f6e948', + name="Test", + internal_name="test_tuw1", + owner_id="c6b71ef5-2d2f-48b2-9d79-b8f23a3a0502", + is_public=True, + is_schema_public=True, + contact=UserBrief(id="c6b71ef5-2d2f-48b2-9d79-b8f23a3a0502", + username="foo")).model_dump()]) + mock.get(f'/api/database/{req.id}', status_code=404) + # test + try: + fetch_databases() + except NotExistsError: + pass \ No newline at end of file diff --git a/dbrepo-dashboard-service/lib/dbrepo-1.8.0-py3-none-any.whl b/dbrepo-dashboard-service/lib/dbrepo-1.8.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..a285fef8ff07eaeffb5a1dfbab34dd395c0330d9 GIT binary patch literal 88139 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šlGb7gmLWPCSy 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˴@-L3iT?xh&#&)r;io13r6-SA}<y(qs< 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 literal 0 HcmV?d00001 diff --git a/dbrepo-dashboard-service/lib/dbrepo-1.8.0.tar.gz b/dbrepo-dashboard-service/lib/dbrepo-1.8.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..4b3de54c835f7085ce9546cc519400bdbc9480b0 GIT binary patch literal 97612 zcmb2|=HU3|^e&z0e@aqOYC*oPp`L}FfnG^s5yP9kud8mmZPJ)^zluxe>`AqqVy<^n z-K#CCFAB*PFX~nfJegwiFQbD&wa2l6(cxsz^!cx9p0j?NJa^SA?R6}gU6YbOdFu$h zc(-cZx^*C&mt$u3|M%LTFMD&N%0Ap(T(j+l`uq3SuDzT0tMB~w?Pc4__Zi#OZf`kn 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 literal 0 HcmV?d00001 diff --git a/dbrepo-dashboard-service/panel.py b/dbrepo-dashboard-service/panel.py deleted file mode 100644 index acb3d548bb..0000000000 --- a/dbrepo-dashboard-service/panel.py +++ /dev/null @@ -1,252 +0,0 @@ -import os - -datasource_uid = os.getenv('JSON_DATASOURCE_NAME', 'dbrepojson0') - -statistics_row_title = '${view_id}' - - -def _get_start_index(dashboard: dict) -> int: - return [panel['title'] for panel in dashboard['panels']].index(statistics_row_title) - - -def get_panels(dashboard: dict) -> [dict]: - return [] - - -def map_timeseries_panel(database_id: str) -> dict: - datasource = dict(uid=datasource_uid, - type='yesoreyeram-infinity-datasource') - return dict(title='${view_id}', - type='timeseries', - datasource=datasource, - targets=[dict(datasource=datasource, - format='table', - global_query_id='', - hide=False, - refId='A', - root_selector='', - source='url', - type='json', - url='/api/database/' + database_id + '/view/${view_id}/data', - url_options=dict(data='', - method='GET'))], - gridPos=dict(h=8, - w=12, - x=12, - y=8), - options=dict(legend=dict(displayMode='list', - placement='bottom', - showLegend=True), - tooltip=dict(mode='single', - sort='none')), - fieldConfig=dict( - defaults=dict(color=dict(mode='palette-classic'), - custom=dict( - axisBorderShow=False, - axisCenteredZero=False, - axisColorMode='text', - axisLabel='', - axisPlacement='auto', - barAlignment=0, - drawStyle='line', - fillOpacity=0, - gradientMode='none', - hideFrom=dict(legend=False, - tooltip=False, - viz=False), - insertNulls=False, - lineInterpolation='linear', - lineWidth=1, - pointSize=5, - scaleDistribution=dict(type='linear'), - showPoints='auto', - spanNulls=False, - stacking=dict(group='A', - mode='none'), - thresholdsStyle=dict(mode='absolute'))))) - - -def map_number_panel(database_id: str, title: str, root_selector: str, y: int = 0) -> dict: - datasource = dict(uid=datasource_uid, - type='yesoreyeram-infinity-datasource') - return dict(title=title, - type='stat', - datasource=datasource, - targets=[dict(datasource=datasource, - columns=[], - filters=[], - format='table', - global_query_id='', - hide=False, - refId='A', - root_selector=root_selector, - source='url', - type='json', - url='/api/database/' + database_id + '/view/${view_id}/statistic', - url_options=dict(data='', - method='GET'))], - fieldConfig=dict(defaults=dict(mappings=[], - thresholds=dict(mode='absolute', - steps=[dict(color='blue', - value=None)]), - unit=''), - overrides=[]), - gridPos=dict(h=4, - w=6, - x=18, - y=y), - options=dict(colorMode='background', - graphMode='area', - justifyMode='auto', - orientation='auto', - reduceOptions=dict(calcs=[], - fields='/.*/', - values=True), - showPercentChange=False, - textMode='auto', - wideLayout=True)) - - -def map_statistics_panel(database_id: str) -> dict: - datasource = dict(uid=datasource_uid, - type='yesoreyeram-infinity-datasource') - return dict(title='Statistics', - type='table', - gridPos=dict(h=8, - w=12, - x=0, - y=8), - datasource=datasource, - targets=[dict(datasource=datasource, - columns=[], - filters=[], - format='table', - global_query_id='', - hide=False, - refId='A', - root_selector='columns', - source='url', - type='json', - url='/api/database/' + database_id + '/view/${view_id}/statistic', - url_options=dict(data='', - method='GET'))], - options=dict(cellHeight="sm", - showHeader=True, - footer=dict(countRows=False, - fields="", - reducer=["sum"], - show=False)), - transformations=[dict(id="organize", - options=dict(excludeByName=dict(), - includeByName=dict(), - indexByName=dict(name=0, - val_min=1, - val_max=2, - mean=3, - median=4, - std_dev=5), - renameByName=dict(name="Name", - mean="Mean", - median="Median", - std_dev="std.dev", - val_min="Minimum", - val_max="Maximum")))], - fieldConfig=dict(defaults=dict(custom=dict(align="auto", - filterable="true", - cellOptions=dict(type="auto"), - inspect=False), - mappings=[], - thresholds=dict(mode="absolute", - steps=[dict(color="green", - value=None), - dict(color="red", - value=80) - ])), - overrides=[])) - - -def map_overview_panel(database_id: str) -> dict: - datasource = dict(uid=datasource_uid, - type='yesoreyeram-infinity-datasource') - return dict(title='Datasource Preview', - type='table', - gridPos=dict(h=8, - w=18, - x=0, - y=4), - fieldConfig=dict( - defaults=dict( - color=dict(mode='palette-classic'), - custom=dict(axisBorderShow=False, - axisCenteredZero=False, - axisColorMode='text', - axisLabel='', - axisPlacement='auto', - barAlignment=0, - drawStyle='line', - fillOpacity=0, - gradientMode='none', - hideFrom=dict( - legend=False, - tooltip=False, - viz=False), - insertNulls=False, - lineInterpolation='linear', - lineWidth=1, - pointSize=5, - scaleDistribution=dict( - type='linear'), - showPoints='auto', - spanNulls=False, - stacking=dict(group='A', - mode='none'), - thresholdsStyle=dict( - mode='off'))), - overrides=[]), - options=dict(legend=dict(displayMode='list', - placement='bottom', - showLegend=True, - calcs=[]), - tooltip=dict(mode='single', - sort='none')), - targets=[dict(format='json', - columns=[], - datasource=datasource, - filters=[], - global_query_id='', - refId='A', - root_selector='', - source='url', - type='json', - url='/api/database/' + database_id + '/view/${view_id}/data', - url_options=dict(data='', - method='GET'))], - datasource=datasource) - - -def map_row() -> dict: - datasource = dict(uid=datasource_uid, - type='yesoreyeram-infinity-datasource') - return dict(collapsed=False, - repeat='view_id', - repeatDirection='h', - title=statistics_row_title, - type='row', - panels=[], - targets=[dict(refId='A', - datasource=datasource)], - gridPos=dict(h=1, - w=24, - x=0, - y=0)) - - -def map_panels(dashboard: dict, database: Database) -> [dict]: - if get_statistics_row(dashboard) is None: - dashboard['panels'].append(map_row()) # repeating - dashboard['panels'].append(map_overview_panel(database.id)) # left top - dashboard['panels'].append(map_number_panel(database.id, 'Total Entries', 'rows', 0)) # right top - dashboard['panels'].append(map_number_panel(database.id, 'Variables', '$count(columns)', 4)) # right top - dashboard['panels'].append(map_statistics_panel(database.id)) # left - dashboard['panels'].append(map_timeseries_panel(database.id)) # middle - return dashboard['panels'] diff --git a/dbrepo-dashboard-service/test.sh b/dbrepo-dashboard-service/test.sh new file mode 100644 index 0000000000..40328cd5dd --- /dev/null +++ b/dbrepo-dashboard-service/test.sh @@ -0,0 +1,7 @@ +#!/bin/bash +PIPENV_PIPFILE=./dbrepo-search-service/Pipfile +source ./dbrepo-search-service/venv/bin/activate +pip install pipenv +pipenv install gunicorn && pipenv install --dev --system --deploy +cd ./dbrepo-search-service/ && coverage run -m pytest test/test_app.py test/test_jwt.py test/test_opensearch_client.py test/test_keycloak_client.py --junitxml=report.xml && coverage html && coverage report > ./coverage.txt +cat ./coverage.txt | grep -o 'TOTAL[^%]*%' \ No newline at end of file diff --git a/dbrepo-dashboard-service/tests/conftest.py b/dbrepo-dashboard-service/tests/conftest.py new file mode 100644 index 0000000000..da1c56e9eb --- /dev/null +++ b/dbrepo-dashboard-service/tests/conftest.py @@ -0,0 +1,48 @@ +import logging +import os + +import pytest +from dbrepo.core.client.dashboard import DashboardServiceClient +from tests.grafana import GrafanaContainer + +logging.basicConfig(level=logging.DEBUG) + + +@pytest.fixture(scope="session") +def session(request): + """ + Create one Grafana container per test run only (admin:admin) + :param request: / + :return: The Grafana container + """ + logging.debug("[fixture] creating grafana container") + container = GrafanaContainer() + logging.debug("[fixture] starting grafana container") + container.start() + os.environ['DASHBOARD_UI_ENDPOINT'] = container.get_url() + os.environ['SYSTEM_USERNAME'] = 'admin' + os.environ['SYSTEM_PASSWORD'] = 'admin' + + # destructor + def stop_grafana(): + container.stop() + + request.addfinalizer(stop_grafana) + return container + + +@pytest.fixture(scope="function", autouse=True) +def cleanup(request, session): + """ + Clean up after each test by removing dashboards (=so it's empty again) + :param request: / + :param session: / + :return: + """ + dashboard_client = DashboardServiceClient(os.getenv('DASHBOARD_UI_ENDPOINT', 'http://localhost:3000'), + os.getenv('SYSTEM_USERNAME', 'admin'), + os.getenv('SYSTEM_PASSWORD', 'admin')) + logging.info("[fixture] clean dashboards") + for dashboard in dashboard_client.get_client().search.search_dashboards(): + dashboard_client.get_client().dashboard.delete_dashboard(dashboard['uid']) + logging.debug(f"[fixture] deleted dashboard {dashboard['uid']}") diff --git a/dbrepo-dashboard-service/tests/grafana/__init__.py b/dbrepo-dashboard-service/tests/grafana/__init__.py new file mode 100644 index 0000000000..46e29e9c76 --- /dev/null +++ b/dbrepo-dashboard-service/tests/grafana/__init__.py @@ -0,0 +1,28 @@ +import requests +from testcontainers.core.container import DockerContainer +from testcontainers.core.waiting_utils import wait_for_logs, wait_container_is_ready + + +class GrafanaContainer(DockerContainer): + MGMT_PORT = 3000 + + def __init__(self, image: str = "bitnami/grafana:11", **kwargs) -> None: + super().__init__(image=image, **kwargs) + self.with_exposed_ports(self.MGMT_PORT) + + def get_url(self) -> str: + return f"http://{self.get_container_host_ip()}:{self.get_exposed_port(self.MGMT_PORT)}" + + @wait_container_is_ready(requests.exceptions.ConnectionError, requests.exceptions.ReadTimeout) + def _readiness_probe(self) -> None: + try: + response = requests.get(f"{self.get_url()}/api/health", timeout=1) + except requests.exceptions.ConnectionError: + response = requests.get(f"{self.get_url()}/healthz", timeout=1) + response.raise_for_status() + wait_for_logs(self, "HTTP Server Listen") + + def start(self) -> "GrafanaContainer": + super().start() + self._readiness_probe() + return self diff --git a/dbrepo-dashboard-service/tests/rsa/rs256.key b/dbrepo-dashboard-service/tests/rsa/rs256.key new file mode 100644 index 0000000000..86b3eaf5c6 --- /dev/null +++ b/dbrepo-dashboard-service/tests/rsa/rs256.key @@ -0,0 +1,3 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQABAoIBADNcMt6hAHub4JTAYS6Mra0EPRBO2XhWmACBrv3+8ETClXd5475KPLDewgRVtlmtbwU8G8awUXESQgPS9lfiqvQhPreA3cHlm6oP2WMKOEtakr2s8I+frsTBLCo0Ini9RaSzjoVVgS0zofyhASKi+T970MafSj5P3XNb8YBFdXgoYDiA7FXLH6a/+m7LScL+wGcFMAAeYESxZbMQLfH3v8L+4EcTraiwjLG17ZdlF3dpybMyUSse6ZQ/PdlyvBuzzLXhN6Ce2gd9ATfS+YWTzo7Yf+GU+ex5bIpVOfHqtuM/hyq7YGKENClsXwNZIAoFnvGCbvECAfgyapVrD30IfykCgYEA0rgsSZ82pxT40NxwgBD1g9lbNVBKXphRB/3S078qusUzJjT7AldEj4imGPhAbI7bI8gAeWJsp1XJWkjM8ktaVrh+NQl7p8e9OPh0pQF/5Bdg8ajbjXESpjnaU66pVYRQy/d+jNli/YRAHX5RUfsBl+6W4+WSVMGmKBiqJsur+ecCgYEAz1YVXClcmUnyZem5B+2E9noIzjF6ROE+jIb6rawM85P3Xd0lXtECQavtxw+Qk7I32qOwrxl1UpK2foVel3pazi+4OpMfmqtYGenRP1Zk1cZwrDo0cIemTDGjj3kJ8tYn12CGolFQpJZgK6OHzvG0tOxI5VZgjIViWNPe1PGWXtUCgYEAxXGNDe8BZs1f11S2lUlOw5yGug3hoYFXbAWJ5p7Ziuf8ZXB/QlJDC7se54a11wKEk6Jzz0lKRgE8CjzszJuOqnN0zn10QGIIC7nCklo1W6QMUmPGVWH994N976tZP6gbjQL6sT+AYcvpx7j0ubxYYeRNvnz+ACzzY964kGGHY0ECgYEAumlwPPNnMN7+VEjGNm2D7UMdJZ3wi3tkjF5ThdA5uMohTsAk+FG80KSu3RmOaGyEsUwY7+VYyYvlDm4E9PZqLBVVczyR3rMNPAcwPd0EPfvzk7WlLkOX7ct3fehaXH3VRlyfz9KCSeh1wOZ/lT1VtpD2nVOC7PSDzs92+kfXZZ0CgYAnrD1y4skgXkdwolZ3unn3EFyGm2d+X5aMTHwQPdWxqoNIAl/9wdghlzihwnPhhsxq1WzlxuC3V2IMrNPtRx70Mi+FbSmR5m4Xx5RptgMtMlwno+L40PzNJgMjHGjt0wcx3Vel8wuohDtnqMyS7P5nG1/TQx0Cyzwn7QOXlNpgbQ== +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/dbrepo-dashboard-service/tests/rsa/rsa256.pkey b/dbrepo-dashboard-service/tests/rsa/rsa256.pkey new file mode 100644 index 0000000000..857dfb22be --- /dev/null +++ b/dbrepo-dashboard-service/tests/rsa/rsa256.pkey @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB +-----END PUBLIC KEY----- diff --git a/dbrepo-dashboard-service/tests/test_integration_app.py b/dbrepo-dashboard-service/tests/test_integration_app.py new file mode 100644 index 0000000000..de95ad5abd --- /dev/null +++ b/dbrepo-dashboard-service/tests/test_integration_app.py @@ -0,0 +1,208 @@ +import time +import unittest + +import jwt +from dbrepo.api.dto import Database, Table, Constraints, Column, ColumnType, ConceptBrief, UnitBrief, \ + UserBrief, ContainerBrief, ImageBrief + +from app import app + +req = Database(id="209acf92-5c9b-4633-ad99-113c86f6e948", + name="Test", + internal_name="test_tuw1", + dashboard_uid="2432cf61e71dea", + owner=UserBrief(id="c6b71ef5-2d2f-48b2-9d79-b8f23a3a0502", username="foo"), + contact=UserBrief(id="c6b71ef5-2d2f-48b2-9d79-b8f23a3a0502", username="foo"), + exchange_name="dbrepo", + is_public=True, + is_schema_public=True, + is_dashboard_enabled=True, + container=ContainerBrief(id="7efe8b27-6cdc-4387-80e3-92ee28f4a7c5", + name="MariaDB", + internal_name="mariadb", + image=ImageBrief(id="f97791b4-baf4-4b18-8f7d-3084818e6549", + name="mariadb", + version="11.1.3", + default=True)), + tables=[Table(id="f94a6164-cad4-4873-a9fd-3fe5313b2e95", + database_id="209acf92-5c9b-4633-ad99-113c86f6e948", + name="Data", + internal_name="data", + owner=UserBrief(id="c6b71ef5-2d2f-48b2-9d79-b8f23a3a0502", username="foo"), + constraints=Constraints(uniques=[], foreign_keys=[], checks=[], primary_key=[]), + is_versioned=False, + queue_name="dbrepo", + routing_key="dbrepo.1.1", + is_public=True, + is_schema_public=True, + columns=[Column(id="7bef7e68-88f1-438e-9b94-0a77afd21471", + database_id="209acf92-5c9b-4633-ad99-113c86f6e948", + table_id="f94a6164-cad4-4873-a9fd-3fe5313b2e95", + name="ID", + ord=0, + internal_name="id", + type=ColumnType.BIGINT, + is_null_allowed=False, + size=20, + d=0, + concept=ConceptBrief(id="fb32ecf6-1f68-49b4-85ee-04e76263cbef", + uri="http://www.wikidata.org/entity/Q2221906"), + unit=UnitBrief(id="a67d735e-32ef-4917-b412-fe099c6757a1", + uri="http://www.ontology-of-units-of-measure.org/resource/om-2/degreeCelsius"), + val_min=0, + val_max=10)] + )]) + + +class AppIntegrationTest(unittest.TestCase): + + def token(self, roles: [str], iat: int = int(time.time())): + claims = { + 'iat': iat, + 'uid': 'c6b71ef5-2d2f-48b2-9d79-b8f23a3a0502', + 'preferred_username': 'foo', + 'realm_access': { + 'roles': roles + } + } + with open('./tests/rsa/rs256.key', 'rb') as fh: + return jwt.JWT().encode(claims, jwt.jwk_from_pem(fh.read()), alg='RS256') + + def test_create_dashboard_fails(self): + with app.test_client() as test_client: + # test + response = test_client.post('/api/dashboard', + headers={'Authorization': f'Bearer {self.token(["system"])}'}) + self.assertEqual(415, response.status_code) + + def test_health_succeeds(self): + with app.test_client() as test_client: + # test + response = test_client.get('/health') + self.assertEqual(200, response.status_code) + + def test_create_dashboard_no_auth_fails(self): + with app.test_client() as test_client: + # test + response = test_client.post('/api/dashboard') + self.assertEqual(401, response.status_code) + + def test_create_dashboard_no_body_fails(self): + with app.test_client() as test_client: + # test + response = test_client.post('/api/dashboard', + headers={'Authorization': f'Bearer {self.token(["system"])}', + 'Content-Type': 'application/json'}) + self.assertEqual(400, response.status_code) + + def test_create_dashboard_empty_body_fails(self): + with app.test_client() as test_client: + # test + response = test_client.post('/api/dashboard', + headers={'Authorization': f'Bearer {self.token(["system"])}', + 'Content-Type': 'application/json'}, + json={}) + self.assertEqual(400, response.status_code) + + def test_create_dashboard_malformed_body_fails(self): + with app.test_client() as test_client: + # test + response = test_client.post('/api/dashboard', + headers={'Authorization': f'Bearer {self.token(["system"])}', + 'Content-Type': 'application/json'}, + json=dict({'is_public': True})) + self.assertEqual(400, response.status_code) + + def test_create_dashboard_succeeds(self): + with app.test_client() as test_client: + # test + response = test_client.post('/api/dashboard', + headers={'Authorization': f'Bearer {self.token(["system"])}', + 'Content-Type': 'application/json'}, + json=dict({'is_public': True, + 'is_schema_public': True, + 'database_name': 'some_database', + 'owner_username': 'foobar'})) + self.assertEqual(201, response.status_code) + + def test_update_dashboard_no_auth_fails(self): + with app.test_client() as test_client: + headers = {'Authorization': f'Bearer {self.token(["system"])}', + 'Content-Type': 'application/json'} + json_payload = dict({'is_public': True, + 'is_schema_public': True, + 'database_name': 'some_database', + 'owner_username': 'foobar'}) + # mock + response = test_client.post('/api/dashboard', headers=headers, json=json_payload) + # test + response = test_client.put(f"/api/dashboard/{response.json['uid']}") + self.assertEqual(401, response.status_code) + + def test_update_dashboard_no_body_fails(self): + with app.test_client() as test_client: + headers = {'Authorization': f'Bearer {self.token(["system"])}', + 'Content-Type': 'application/json'} + json_payload = dict({'is_public': True, + 'is_schema_public': True, + 'database_name': 'some_database', + 'owner_username': 'foobar'}) + # mock + response = test_client.post('/api/dashboard', headers=headers, json=json_payload) + # test + response = test_client.put(f"/api/dashboard/{response.json['uid']}", + headers=headers) + self.assertEqual(400, response.status_code) + + def test_update_dashboard_empty_body_fails(self): + with app.test_client() as test_client: + headers = {'Authorization': f'Bearer {self.token(["system"])}', + 'Content-Type': 'application/json'} + json_payload = dict({'is_public': True, + 'is_schema_public': True, + 'database_name': 'some_database', + 'owner_username': 'foobar'}) + # mock + response = test_client.post('/api/dashboard', headers=headers, json=json_payload) + # test + response = test_client.put(f"/api/dashboard/{response.json['uid']}", headers=headers, json={}) + self.assertEqual(400, response.status_code) + + def test_update_dashboard_malformed_body_fails(self): + with app.test_client() as test_client: + headers = {'Authorization': f'Bearer {self.token(["system"])}', + 'Content-Type': 'application/json'} + json_payload = dict({'is_public': True, + 'is_schema_public': True, + 'database_name': 'some_database', + 'owner_username': 'foobar'}) + # mock + response = test_client.post('/api/dashboard', headers=headers, json=json_payload) + # test + response = test_client.put(f"/api/dashboard/{response.json['uid']}", headers=headers, + json=dict({'is_public': True})) + self.assertEqual(400, response.status_code) + + def test_update_dashboard_succeeds(self): + with app.test_client() as test_client: + headers = {'Authorization': f'Bearer {self.token(["system"])}', + 'Content-Type': 'application/json'} + json_payload = dict({'is_public': True, + 'is_schema_public': True, + 'database_name': 'some_database', + 'owner_username': 'foobar'}) + # mock + response = test_client.post('/api/dashboard', headers=headers, json=json_payload) + req.dashboard_uid = response.json['uid'] + # test + response = test_client.put(f"/api/dashboard/{response.json['uid']}", headers=headers, + json=req.model_dump()) + self.assertEqual(202, response.status_code) + + def test_update_dashboard_not_found_fails(self): + with app.test_client() as test_client: + headers = {'Authorization': f'Bearer {self.token(["system"])}', + 'Content-Type': 'application/json'} + # test + response = test_client.put(f"/api/dashboard/idonotexist", headers=headers, json=req.model_dump()) + self.assertEqual(404, response.status_code) diff --git a/dbrepo-dashboard-ui/Dockerfile b/dbrepo-dashboard-ui/Dockerfile new file mode 100644 index 0000000000..07a30f99ab --- /dev/null +++ b/dbrepo-dashboard-ui/Dockerfile @@ -0,0 +1,9 @@ +FROM docker.io/bitnami/grafana:11 AS runtime +LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" + +WORKDIR /app + +COPY --chown=grafana:grafana ./dashboards /app/dashboards +COPY --chown=grafana:grafana ./provisioning /etc/grafana/provisioning +COPY --chown=grafana:grafana ./grafana.ini /etc/grafana/grafana.ini +COPY --chown=grafana:grafana ./ldap.toml /etc/grafana/ldap.toml diff --git a/dbrepo-dashboard-service/dashboards/system.json b/dbrepo-dashboard-ui/dashboards/System/dbrepo.json similarity index 96% rename from dbrepo-dashboard-service/dashboards/system.json rename to dbrepo-dashboard-ui/dashboards/System/dbrepo.json index e6f81bda40..6ce787d456 100644 --- a/dbrepo-dashboard-service/dashboards/system.json +++ b/dbrepo-dashboard-ui/dashboards/System/dbrepo.json @@ -30,7 +30,7 @@ "title": "Docs", "tooltip": "", "type": "link", - "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.6/" + "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.7/" } ], "panels": [ @@ -49,7 +49,7 @@ "datasource": { "default": true, "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "Quality of Service", "fieldConfig": { @@ -115,7 +115,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "code", @@ -135,7 +135,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "", "fieldConfig": { @@ -185,7 +185,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "code", @@ -206,7 +206,7 @@ "datasource": { "default": true, "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "fieldConfig": { "defaults": { @@ -253,7 +253,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "builder", @@ -274,7 +274,7 @@ "datasource": { "default": true, "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "fieldConfig": { "defaults": { @@ -321,7 +321,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "builder", @@ -337,7 +337,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "builder", @@ -354,7 +354,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "builder", @@ -389,7 +389,7 @@ "datasource": { "default": true, "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "", "fieldConfig": { @@ -437,7 +437,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "builder", @@ -457,7 +457,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "Top 10 by number of accesses", "fieldConfig": { @@ -511,7 +511,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "editorMode": "code", "expr": "topk(10, dbrepo_datasource_data_get_total)", @@ -540,7 +540,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "", "fieldConfig": { @@ -602,7 +602,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "code", @@ -622,7 +622,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "", "fieldConfig": { @@ -684,7 +684,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "code", @@ -704,7 +704,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "", "fieldConfig": { @@ -754,7 +754,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "code", @@ -774,7 +774,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "", "fieldConfig": { @@ -824,7 +824,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "code", @@ -844,7 +844,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "", "fieldConfig": { @@ -895,7 +895,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "code", @@ -915,7 +915,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "fieldConfig": { "defaults": { @@ -978,7 +978,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "builder", @@ -998,7 +998,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "fieldConfig": { "defaults": { @@ -1078,7 +1078,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "builder", @@ -1111,7 +1111,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "Quality of Service", "fieldConfig": { @@ -1176,7 +1176,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "code", @@ -1196,7 +1196,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "", "fieldConfig": { @@ -1245,7 +1245,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "code", @@ -1265,7 +1265,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "", "fieldConfig": { @@ -1314,7 +1314,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "code", @@ -1334,7 +1334,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "", "fieldConfig": { @@ -1395,7 +1395,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "code", @@ -1415,7 +1415,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "Ready and unacknowledged messages stored in memory", "fieldConfig": { @@ -1476,7 +1476,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "code", @@ -1496,7 +1496,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "Messages delivered to consumers but not yet acknowledged", "fieldConfig": { @@ -1557,7 +1557,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "code", @@ -1577,7 +1577,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "Messages for received protocol messages", "fieldConfig": { @@ -1685,7 +1685,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "code", @@ -1718,7 +1718,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "", "fieldConfig": { @@ -1798,7 +1798,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "code", @@ -1818,7 +1818,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "fieldConfig": { "defaults": { @@ -1889,7 +1889,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "builder", @@ -1909,7 +1909,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "fieldConfig": { "defaults": { @@ -2046,7 +2046,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "builder", @@ -2068,7 +2068,7 @@ "datasource": { "default": true, "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "Heap and non-heap memory summed", "fieldConfig": { @@ -2206,7 +2206,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "disableTextWrap": false, "editorMode": "builder", @@ -2227,7 +2227,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "Top 10 by frequency of access", "fieldConfig": { @@ -2282,7 +2282,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "editorMode": "code", "expr": "topk(10, rate(dbrepo_table_data_get_total[$__range]))", @@ -2298,7 +2298,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "fieldConfig": { "defaults": { @@ -2404,7 +2404,7 @@ { "datasource": { "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "editorMode": "code", "expr": "rate(flask_http_request_duration_seconds_count{status!~\"200|201|202\"}[$__rate_interval])", @@ -2421,8 +2421,14 @@ "refresh": "1m", "schemaVersion": 39, "tags": [ - "provisioned", - "dbrepo" + "ui", + "dashboard", + "metadata", + "data", + "gateway", + "analyse", + "metrics", + "auth" ], "templating": { "list": [] @@ -2433,7 +2439,7 @@ }, "timepicker": {}, "timezone": "browser", - "title": "DBRepo - Overview", + "title": "DBRepo", "uid": "bdz20owu8zn5se", "version": 8, "weekStart": "" diff --git a/dbrepo-dashboard-service/dashboards/rabbitmq.json b/dbrepo-dashboard-ui/dashboards/System/rabbitmq.json similarity index 99% rename from dbrepo-dashboard-service/dashboards/rabbitmq.json rename to dbrepo-dashboard-ui/dashboards/System/rabbitmq.json index a8db65695f..6958b05e83 100644 --- a/dbrepo-dashboard-service/dashboards/rabbitmq.json +++ b/dbrepo-dashboard-ui/dashboards/System/rabbitmq.json @@ -41,7 +41,7 @@ "datasource": { "default": true, "type": "prometheus", - "uid": "P18F45E9DC7E75912" + "uid": "dbrepometrics0" }, "description": "", "fieldConfig": { @@ -8056,7 +8056,7 @@ "refresh": "15s", "schemaVersion": 34, "style": "dark", - "tags": ["provisioned", "rabbitmq"], + "tags": ["rabbitmq", "amqp", "mqtt"], "templating": { "list": [ { @@ -8157,7 +8157,7 @@ ] }, "timezone": "", - "title": "RabbitMQ - Overview", + "title": "Broker Service", "uid": "Kn5xm-gZk", "version": 20220805, "weekStart": "", diff --git a/dbrepo-dashboard-service/grafana.ini b/dbrepo-dashboard-ui/grafana.ini similarity index 89% rename from dbrepo-dashboard-service/grafana.ini rename to dbrepo-dashboard-ui/grafana.ini index 1f8d9c1ef3..7b7d22ccb5 100644 --- a/dbrepo-dashboard-service/grafana.ini +++ b/dbrepo-dashboard-ui/grafana.ini @@ -1,7 +1,6 @@ [server] protocol = http domain = localhost -root_url = http://%(domain)s/dashboard/ http_port = 3000 [security] diff --git a/dbrepo-dashboard-service/ldap.toml b/dbrepo-dashboard-ui/ldap.toml similarity index 92% rename from dbrepo-dashboard-service/ldap.toml rename to dbrepo-dashboard-ui/ldap.toml index 4523531361..c6ca55f79d 100644 --- a/dbrepo-dashboard-service/ldap.toml +++ b/dbrepo-dashboard-ui/ldap.toml @@ -12,7 +12,7 @@ timeout = 10 # User search filter, for example "(cn=%s)" or "(sAMAccountName=%s)" or "(uid=%s)" # Allow login from email or username, example "(|(sAMAccountName=%s)(userPrincipalName=%s))" -search_filter = "(cn=%s)" +search_filter = "(uid=%s)" # An array of base dns to search through search_base_dns = ["${LDAP_ROOT}"] @@ -22,11 +22,11 @@ group_search_filter = "(&(objectClass=groupOfNames)(member=cn=%s,ou=users,${LDAP group_search_filter_user_attribute = "uid" [servers.attributes] -name = "givenName" +name = "cn" surname = "sn" -username = "cn" +username = "uid" member_of = "member" -email = "email" +email = "mail" [[servers.group_mappings]] group_dn = "cn=${LDAP_ADMIN_USERNAME},ou=users,${LDAP_ROOT}" diff --git a/dbrepo-dashboard-ui/provisioning/dashboards/provider.yaml b/dbrepo-dashboard-ui/provisioning/dashboards/provider.yaml new file mode 100644 index 0000000000..a11a2c20b4 --- /dev/null +++ b/dbrepo-dashboard-ui/provisioning/dashboards/provider.yaml @@ -0,0 +1,20 @@ +apiVersion: 1 + +providers: + # <string> an unique provider name. Required + - name: 'dbrepo' + # <int> Org id. Default to 1 + orgId: 1 + # <string> provider type. Default to 'file' + type: file + # <bool> disable dashboard deletion + disableDeletion: false + # <int> how often Grafana will scan for changed dashboards + updateIntervalSeconds: 10 + # <bool> allow updating provisioned dashboards from the UI + allowUiUpdates: true + options: + # <string, required> path to dashboard files on disk. Required when using the 'file' type + path: /app/dashboards + # <bool> use folder names from filesystem to create folders in Grafana + foldersFromFilesStructure: true \ No newline at end of file diff --git a/dbrepo-dashboard-ui/provisioning/datasources/infinity.yaml b/dbrepo-dashboard-ui/provisioning/datasources/infinity.yaml new file mode 100644 index 0000000000..ce1409240e --- /dev/null +++ b/dbrepo-dashboard-ui/provisioning/datasources/infinity.yaml @@ -0,0 +1,17 @@ +apiVersion: 1 + +datasources: + - name: dbrepo-json + uid: dbrepojson0 + type: yesoreyeram-infinity-datasource + basicAuth: true + basicAuthUser: user + url: http://localhost + jsonData: + auth_method: 'basicAuth' + httpHeaderName1: Accept + allowedHosts: + - 'http://localhost' + secureJsonData: + basicAuthPassword: user + httpHeaderValue1: application/json diff --git a/dbrepo-dashboard-ui/provisioning/datasources/prometheus.yaml b/dbrepo-dashboard-ui/provisioning/datasources/prometheus.yaml new file mode 100644 index 0000000000..493954f181 --- /dev/null +++ b/dbrepo-dashboard-ui/provisioning/datasources/prometheus.yaml @@ -0,0 +1,7 @@ +apiVersion: 1 + +datasources: + - name: dbrepo-metrics + type: prometheus + uid: dbrepometrics0 + url: http://metric-db:9090 diff --git a/dbrepo-data-service/Dockerfile b/dbrepo-data-service/Dockerfile index 9edf1375fb..7468f1c568 100644 --- a/dbrepo-data-service/Dockerfile +++ b/dbrepo-data-service/Dockerfile @@ -1,5 +1,5 @@ ###### FIRST STAGE ###### -FROM dbrepo-metadata-service:build AS dependency +FROM dbrepo-core:build AS dependency LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" ###### SECOND STAGE ###### @@ -10,7 +10,7 @@ COPY ./pom.xml ./ RUN mvn -fn dependency:go-offline -COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien +COPY --from=dependency /root/.m2/repository/at/ac/tuwien/ifs/dbrepo /root/.m2/repository/at/ac/tuwien/ifs/dbrepo COPY ./querystore ./querystore COPY ./report ./report @@ -28,7 +28,7 @@ RUN apk add --no-cache curl bash jq WORKDIR /app -RUN adduser -S -u 1001 data-service +RUN adduser -D dbrepo --uid 1001 USER 1001 diff --git a/dbrepo-data-service/pom.xml b/dbrepo-data-service/pom.xml index 338d6a5d73..bd2a9027b5 100644 --- a/dbrepo-data-service/pom.xml +++ b/dbrepo-data-service/pom.xml @@ -16,7 +16,7 @@ <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service</artifactId> <name>dbrepo-data-service</name> - <version>1.7.3</version> + <version>1.8.0</version> <description>Service that manages the data</description> @@ -28,7 +28,7 @@ <module>report</module> </modules> - <url>https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.7/</url> + <url>https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8/</url> <developers> <developer> <name>Martin Weise</name> @@ -94,39 +94,13 @@ <dependencies> <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-security</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-test</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-bootstrap</artifactId> - <version>${spring-cloud.version}</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-data-jpa</artifactId> + <groupId>at.ac.tuwien.ifs.dbrepo</groupId> + <artifactId>dbrepo-core</artifactId> + <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-actuator</artifactId> - </dependency> - <dependency> - <groupId>com.google.guava</groupId> - <artifactId>guava</artifactId> - <version>${guava.version}</version> + <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- Spark --> <dependency> @@ -166,13 +140,12 @@ <artifactId>hadoop-aws</artifactId> <version>${hadoop.version}</version> </dependency> - <!-- Open API --> + <!-- Data Source --> <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-api</artifactId> - <version>${springdoc-openapi.version}</version> + <groupId>org.mariadb.jdbc</groupId> + <artifactId>mariadb-java-client</artifactId> + <version>${mariadb.version}</version> </dependency> - <!-- Data Source --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> @@ -203,12 +176,6 @@ <version>${micrometer.version}</version> <scope>test</scope> </dependency> - <!-- IDE --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <scope>compile</scope> - </dependency> <!-- Mapping --> <dependency> <groupId>org.mapstruct</groupId> @@ -221,11 +188,6 @@ <artifactId>mapstruct</artifactId> <version>${mapstruct.version}</version> </dependency> - <dependency> - <groupId>com.fasterxml.jackson.datatype</groupId> - <artifactId>jackson-datatype-jsr310</artifactId> - <version>${jackson-datatype.version}</version> - </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> @@ -252,29 +214,12 @@ <artifactId>keycloak-admin-client</artifactId> <version>${keycloak.version}</version> </dependency> - <dependency> - <groupId>com.fasterxml.jackson.datatype</groupId> - <artifactId>jackson-datatype-hibernate6</artifactId> - <version>${jackson-datatype.version}</version> - </dependency> <!-- Authentication --> <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>${jwt.version}</version> </dependency> - <!-- DTOs --> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-api</artifactId> - <version>${project.version}</version> - </dependency> - <!-- Exceptions --> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-repositories</artifactId> - <version>${project.version}</version> - </dependency> <!-- AMPQ --> <dependency> <groupId>org.springframework.amqp</groupId> @@ -293,19 +238,8 @@ </dependency> <!-- Testing --> <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-test</artifactId> - <version>${project.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-entities</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> + <groupId>org.springframework.security</groupId> + <artifactId>spring-security-test</artifactId> <scope>test</scope> </dependency> <dependency> @@ -378,7 +312,8 @@ <artifactId>maven-surefire-plugin</artifactId> <!-- Note config is repeated in scalatest config --> <configuration> - <argLine>@{argLine} -ea -Xmx4g -Xss4m -XX:MaxMetaspaceSize=2g -XX:ReservedCodeCacheSize=${CodeCacheSize} + <argLine>@{argLine} -ea -Xmx4g -Xss4m -XX:MaxMetaspaceSize=2g + -XX:ReservedCodeCacheSize=${CodeCacheSize} ${extraJavaTestArgs} </argLine> </configuration> diff --git a/dbrepo-data-service/querystore/pom.xml b/dbrepo-data-service/querystore/pom.xml index 2410a8e9fe..2e2c7d2674 100644 --- a/dbrepo-data-service/querystore/pom.xml +++ b/dbrepo-data-service/querystore/pom.xml @@ -6,12 +6,12 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service</artifactId> - <version>1.7.3</version> + <version>1.8.0</version> </parent> <artifactId>dbrepo-data-service-querystore</artifactId> <name>dbrepo-data-service-querystore</name> - <version>1.7.3</version> + <version>1.8.0</version> <dependencies/> diff --git a/dbrepo-data-service/report/pom.xml b/dbrepo-data-service/report/pom.xml index b2dab3ebd0..22839d6f4e 100644 --- a/dbrepo-data-service/report/pom.xml +++ b/dbrepo-data-service/report/pom.xml @@ -6,12 +6,12 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service</artifactId> - <version>1.7.3</version> + <version>1.8.0</version> </parent> <artifactId>report</artifactId> <name>dbrepo-data-service-report</name> - <version>1.7.3</version> + <version>1.8.0</version> <description> This module is only intended for the pipeline coverage report. See the detailed report in the respective modules diff --git a/dbrepo-data-service/rest-service/pom.xml b/dbrepo-data-service/rest-service/pom.xml index c0f90e3cd6..a8590a762d 100644 --- a/dbrepo-data-service/rest-service/pom.xml +++ b/dbrepo-data-service/rest-service/pom.xml @@ -6,18 +6,18 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service</artifactId> - <version>1.7.3</version> + <version>1.8.0</version> </parent> <artifactId>rest-service</artifactId> <name>dbrepo-data-service-rest-service</name> - <version>1.7.3</version> + <version>1.8.0</version> <dependencies> <dependency> <groupId>at.tuwien</groupId> <artifactId>services</artifactId> - <version>1.7.3</version> + <version>1.8.0</version> </dependency> </dependencies> diff --git a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/DbrepoDataServiceApplication.java b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/DataServiceApplication.java similarity index 57% rename from dbrepo-data-service/rest-service/src/main/java/at/tuwien/DbrepoDataServiceApplication.java rename to dbrepo-data-service/rest-service/src/main/java/at/tuwien/DataServiceApplication.java index 1f38a7920a..95a70f0bb2 100644 --- a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/DbrepoDataServiceApplication.java +++ b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/DataServiceApplication.java @@ -3,13 +3,15 @@ package at.tuwien; import lombok.extern.log4j.Log4j2; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; @Log4j2 +@EnableScheduling @SpringBootApplication -public class DbrepoDataServiceApplication { +public class DataServiceApplication { public static void main(String[] args) { - SpringApplication.run(DbrepoDataServiceApplication.class, args); + SpringApplication.run(DataServiceApplication.class, args); } } diff --git a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java index ba1a0e76da..91f3e4410b 100644 --- a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java +++ b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java @@ -1,10 +1,10 @@ package at.tuwien.endpoints; -import at.tuwien.api.database.CreateAccessDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.CreateAccessDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import at.tuwien.service.AccessService; import at.tuwien.service.CacheService; import io.swagger.v3.oas.annotations.Operation; diff --git a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java index 752aa83196..bf6bbc4879 100644 --- a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java +++ b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java @@ -1,12 +1,12 @@ package at.tuwien.endpoints; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.database.AccessTypeDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.internal.CreateDatabaseDto; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.api.user.internal.UpdateUserPasswordDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.AccessTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.internal.CreateDatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.internal.UpdateUserPasswordDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import at.tuwien.mapper.MetadataMapper; import at.tuwien.service.AccessService; import at.tuwien.service.CacheService; @@ -94,6 +94,7 @@ public class DatabaseEndpoint extends RestEndpoint { final DatabaseDto database = containerService.createDatabase(container, data); containerService.createQueryStore(container, data.getInternalName()); accessService.create(database, metadataMapper.createDatabaseDtoToPrivilegedUserDto(data), AccessTypeDto.WRITE_ALL); + accessService.create(database, metadataMapper.createDatabaseDtoToReadonlyUserDto(data), AccessTypeDto.READ); return ResponseEntity.status(HttpStatus.CREATED) .body(database); } catch (SQLException e) { diff --git a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/RestEndpoint.java b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/RestEndpoint.java index 45cea4371c..a9edad9674 100644 --- a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/RestEndpoint.java +++ b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/RestEndpoint.java @@ -1,6 +1,6 @@ package at.tuwien.endpoints; -import at.tuwien.api.user.UserDetailsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDetailsDto; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; import org.springframework.security.core.Authentication; diff --git a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/SubsetEndpoint.java b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/SubsetEndpoint.java index fb076ce3a2..28e7b2ca9c 100644 --- a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/SubsetEndpoint.java +++ b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/SubsetEndpoint.java @@ -1,14 +1,14 @@ package at.tuwien.endpoints; -import at.tuwien.ExportResourceDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewColumnDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.query.QueryDto; -import at.tuwien.api.database.query.QueryPersistDto; -import at.tuwien.api.database.query.SubsetDto; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.ExportResourceDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.QueryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.QueryPersistDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.SubsetDto; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import at.tuwien.gateway.MetadataServiceGateway; import at.tuwien.mapper.MariaDbMapper; import at.tuwien.service.CacheService; @@ -254,8 +254,8 @@ public class SubsetEndpoint extends RestEndpoint { QueryStoreInsertException, TableMalformedException, PaginationException, QueryNotSupportedException, NotAllowedException, UserNotFoundException, MetadataServiceException, TableNotFoundException, ViewMalformedException, ViewNotFoundException, ImageNotFoundException, FormatNotAvailableException { - log.debug("endpoint create subset in database, databaseId={}, page={}, size={}, timestamp={}", databaseId, - page, size, timestamp); + log.debug("endpoint create subset in database, databaseId={}, page={}, size={}, timestamp={}, data.datasource_id={}", + databaseId, page, size, timestamp, data.getDatasourceId()); /* check */ endpointValidator.validateDataParams(page, size); endpointValidator.validateSubsetParams(data); @@ -469,11 +469,11 @@ public class SubsetEndpoint extends RestEndpoint { public ResponseEntity<QueryDto> persist(@NotNull @PathVariable("databaseId") UUID databaseId, @NotNull @PathVariable("queryId") UUID queryId, @NotNull @Valid @RequestBody QueryPersistDto data, - @NotNull Principal principal) throws NotAllowedException, + Principal principal) throws NotAllowedException, RemoteUnavailableException, DatabaseNotFoundException, QueryStorePersistException, DatabaseUnavailableException, QueryNotFoundException, UserNotFoundException, MetadataServiceException { - log.debug("endpoint persist query, databaseId={}, queryId={}, data.persist={}, principal.name={}", databaseId, - queryId, data.getPersist(), principal.getName()); + log.debug("endpoint persist query, databaseId={}, queryId={}, data.persist={}", databaseId, queryId, + data.getPersist()); final DatabaseDto database = cacheService.getDatabase(databaseId); if (!isSystem(principal)) { cacheService.getAccess(databaseId, getId(principal)); diff --git a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java index 8e1fef5bac..d699fb920d 100644 --- a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java +++ b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java @@ -1,14 +1,14 @@ package at.tuwien.endpoints; -import at.tuwien.ExportResourceDto; -import at.tuwien.api.database.DatabaseAccessDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.query.ImportDto; -import at.tuwien.api.database.table.*; -import at.tuwien.api.database.table.columns.ColumnDto; -import at.tuwien.api.database.table.internal.TableCreateDto; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.ExportResourceDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseAccessDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.ImportDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.internal.TableCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import at.tuwien.gateway.MetadataServiceGateway; import at.tuwien.mapper.MariaDbMapper; import at.tuwien.service.*; @@ -297,7 +297,7 @@ public class TableEndpoint extends RestEndpoint { final HttpHeaders headers = new HttpHeaders(); if (request.getMethod().equals("HEAD")) { headers.set("Access-Control-Expose-Headers", "X-Count"); - headers.set("X-Count", "" + tableService.getCount(database, table, timestamp)); + headers.set("X-Count", "" + tableService.getCount(database, table.getInternalName(), timestamp)); return ResponseEntity.ok() .headers(headers) .build(); @@ -364,7 +364,7 @@ public class TableEndpoint extends RestEndpoint { public ResponseEntity<Void> insertRawTuple(@NotNull @PathVariable("databaseId") UUID databaseId, @NotNull @PathVariable("tableId") UUID tableId, @Valid @RequestBody TupleDto data, - @NotNull Principal principal, + Principal principal, @RequestHeader("Authorization") String authorization) throws DatabaseUnavailableException, RemoteUnavailableException, TableNotFoundException, TableMalformedException, QueryMalformedException, NotAllowedException, StorageUnavailableException, @@ -418,7 +418,7 @@ public class TableEndpoint extends RestEndpoint { public ResponseEntity<Void> updateRawTuple(@NotNull @PathVariable("databaseId") UUID databaseId, @NotNull @PathVariable("tableId") UUID tableId, @Valid @RequestBody TupleUpdateDto data, - @NotNull Principal principal, + Principal principal, @RequestHeader("Authorization") String authorization) throws DatabaseUnavailableException, RemoteUnavailableException, TableNotFoundException, TableMalformedException, QueryMalformedException, NotAllowedException, MetadataServiceException, @@ -473,7 +473,7 @@ public class TableEndpoint extends RestEndpoint { public ResponseEntity<Void> deleteRawTuple(@NotNull @PathVariable("databaseId") UUID databaseId, @NotNull @PathVariable("tableId") UUID tableId, @Valid @RequestBody TupleDeleteDto data, - @NotNull Principal principal, + Principal principal, @RequestHeader("Authorization") String authorization) throws DatabaseUnavailableException, RemoteUnavailableException, TableNotFoundException, TableMalformedException, QueryMalformedException, NotAllowedException, MetadataServiceException, @@ -643,7 +643,7 @@ public class TableEndpoint extends RestEndpoint { public ResponseEntity<Void> importDataset(@NotNull @PathVariable("databaseId") UUID databaseId, @NotNull @PathVariable("tableId") UUID tableId, @Valid @RequestBody ImportDto data, - @NotNull Principal principal, + Principal principal, @RequestHeader("Authorization") String authorization) throws RemoteUnavailableException, TableNotFoundException, NotAllowedException, MetadataServiceException, StorageNotFoundException, MalformedException, StorageUnavailableException, QueryMalformedException, @@ -701,8 +701,9 @@ public class TableEndpoint extends RestEndpoint { MetadataServiceException, TableMalformedException, DatabaseNotFoundException { log.debug("endpoint generate table statistic, databaseId={}, tableId={}", databaseId, tableId); final DatabaseDto database = cacheService.getDatabase(databaseId); + final TableDto table = cacheService.getTable(databaseId, tableId); try { - return ResponseEntity.ok(tableService.getStatistics(database, cacheService.getTable(databaseId, tableId))); + return ResponseEntity.ok(tableService.getStatistics(database, table.getInternalName())); } catch (SQLException e) { log.error("Failed to establish connection to database: {}", e.getMessage()); throw new DatabaseUnavailableException("Failed to establish connection to database", e); diff --git a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/UploadEndpoint.java b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/UploadEndpoint.java index 9d338e42bf..41982ebc36 100644 --- a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/UploadEndpoint.java +++ b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/UploadEndpoint.java @@ -1,9 +1,9 @@ package at.tuwien.endpoints; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.api.file.UploadResponseDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.api.file.UploadResponseDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import at.tuwien.service.StorageService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; diff --git a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/ViewEndpoint.java b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/ViewEndpoint.java index add04964d0..73d88f0bef 100644 --- a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/ViewEndpoint.java +++ b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/endpoints/ViewEndpoint.java @@ -1,12 +1,13 @@ package at.tuwien.endpoints; -import at.tuwien.ExportResourceDto; -import at.tuwien.api.database.CreateViewDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewColumnDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.ExportResourceDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.CreateViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableStatisticDto; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import at.tuwien.mapper.MariaDbMapper; import at.tuwien.service.*; import at.tuwien.validation.EndpointValidator; @@ -56,9 +57,8 @@ public class ViewEndpoint extends RestEndpoint { @Autowired public ViewEndpoint(DSLContext context, ViewService viewService, CacheService cacheService, - MariaDbMapper mariaDbMapper, SubsetService subsetService, - StorageService storageService, DatabaseService databaseService, - EndpointValidator endpointValidator) { + MariaDbMapper mariaDbMapper, SubsetService subsetService, StorageService storageService, + DatabaseService databaseService, EndpointValidator endpointValidator) { this.context = context; this.viewService = viewService; this.cacheService = cacheService; @@ -136,7 +136,7 @@ public class ViewEndpoint extends RestEndpoint { mediaType = "application/json", schema = @Schema(implementation = ApiErrorDto.class))}), @ApiResponse(responseCode = "404", - description = "Failed to find database in metadata database", + description = "Failed to find database (or table or view) in metadata database", content = {@Content( mediaType = "application/json", schema = @Schema(implementation = ApiErrorDto.class))}), @@ -154,7 +154,7 @@ public class ViewEndpoint extends RestEndpoint { public ResponseEntity<ViewDto> create(@NotNull @PathVariable("databaseId") UUID databaseId, @Valid @RequestBody CreateViewDto data) throws DatabaseUnavailableException, DatabaseNotFoundException, RemoteUnavailableException, ViewMalformedException, MetadataServiceException, - TableNotFoundException, ImageNotFoundException, QueryMalformedException { + TableNotFoundException, ImageNotFoundException, QueryMalformedException, ViewNotFoundException { log.debug("endpoint create view, databaseId={}, data.name={}", databaseId, data.getName()); /* check */ endpointValidator.validateSubsetParams(data.getQuery()); @@ -339,4 +339,47 @@ public class ViewEndpoint extends RestEndpoint { } } + @GetMapping("/{viewId}/statistic") + @Observed(name = "dbrepo_view_statistic") + @Operation(summary = "Get view statistic", + description = "Gets basic statistical properties (min, max, mean, median, std.dev) of numerical columns of a view with id.", + hidden = true) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", + description = "Generated view statistic", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = TableStatisticDto.class))}), + @ApiResponse(responseCode = "400", + description = "Failed to obtain column statistic", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), + @ApiResponse(responseCode = "404", + description = "Failed to find view or database in metadata database", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), + @ApiResponse(responseCode = "503", + description = "Failed to establish connection with the metadata service", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), + }) + public ResponseEntity<TableStatisticDto> statistic(@NotNull @PathVariable("databaseId") UUID databaseId, + @NotNull @PathVariable("viewId") UUID viewId) + throws DatabaseUnavailableException, RemoteUnavailableException, TableNotFoundException, + MetadataServiceException, TableMalformedException, DatabaseNotFoundException, ViewNotFoundException, + QueryMalformedException { + log.debug("endpoint generate view statistic, databaseId={}, viewId={}", databaseId, viewId); + final DatabaseDto database = cacheService.getDatabase(databaseId); + final ViewDto view = cacheService.getView(databaseId, viewId); + try { + return ResponseEntity.ok(cacheService.getStatistic(database, view)); + } catch (SQLException e) { + log.error("Failed to establish connection to database: {}", e.getMessage()); + throw new DatabaseUnavailableException("Failed to establish connection to database", e); + } + } + } diff --git a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java index 0926b1cf02..8485d507c5 100644 --- a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java +++ b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java @@ -1,7 +1,7 @@ package at.tuwien.handlers; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import io.swagger.v3.oas.annotations.Hidden; import lombok.extern.log4j.Log4j2; import org.springframework.http.HttpHeaders; @@ -115,6 +115,20 @@ public class ApiExceptionHandler extends ResponseEntityExceptionHandler { return generic_handle(e.getClass(), e.getLocalizedMessage()); } + @Hidden + @ResponseStatus(code = HttpStatus.SERVICE_UNAVAILABLE) + @ExceptionHandler(DashboardServiceException.class) + public ResponseEntity<ApiErrorDto> handle(DashboardServiceException e) { + return generic_handle(e.getClass(), e.getLocalizedMessage()); + } + + @Hidden + @ResponseStatus(code = HttpStatus.BAD_GATEWAY) + @ExceptionHandler(DashboardServiceConnectionException.class) + public ResponseEntity<ApiErrorDto> handle(DashboardServiceConnectionException e) { + return generic_handle(e.getClass(), e.getLocalizedMessage()); + } + @Hidden @ResponseStatus(code = HttpStatus.EXPECTATION_FAILED) @ExceptionHandler(DatabaseMalformedException.class) diff --git a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java index 655741cc23..5f8b39704b 100644 --- a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java +++ b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java @@ -1,13 +1,13 @@ package at.tuwien.validation; -import at.tuwien.api.database.AccessTypeDto; -import at.tuwien.api.database.DatabaseAccessDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.query.FilterDto; -import at.tuwien.api.database.query.FilterTypeDto; -import at.tuwien.api.database.query.SubsetDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.AccessTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseAccessDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.FilterDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.FilterTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.SubsetDto; import at.tuwien.endpoints.RestEndpoint; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import at.tuwien.service.CacheService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; diff --git a/dbrepo-data-service/rest-service/src/main/resources/application.yml b/dbrepo-data-service/rest-service/src/main/resources/application.yml index 53c0858bbd..a22eb40a20 100644 --- a/dbrepo-data-service/rest-service/src/main/resources/application.yml +++ b/dbrepo-data-service/rest-service/src/main/resources/application.yml @@ -17,6 +17,10 @@ spring: time_zone: UTC application: name: data-service + servlet: + multipart: + max-file-size: "${MAX_UPLOAD_SIZE:2GB}" + max-request-size: "${MAX_UPLOAD_SIZE:2GB}" rabbitmq: host: "${BROKER_HOST:broker-service}" virtual-host: "${BROKER_VIRTUALHOST:dbrepo}" @@ -41,6 +45,8 @@ management: enabled: true server: port: 8080 + tomcat: + max-swallow-size: -1 logging: pattern.console: "%d %highlight(%-5level) %msg%n" level: @@ -58,6 +64,8 @@ dbrepo: accessKeyId: "${S3_ACCESS_KEY_ID:seaweedfsadmin}" secretAccessKey: "${S3_SECRET_ACCESS_KEY:seaweedfsadmin}" bucket: "${S3_BUCKET:dbrepo}" + maxAge: "${S3_MAX_AGE:86400}" + cron: "${S3_STALE_CRON:0 */60 * * * *}" system: username: "${SYSTEM_USERNAME:admin}" password: "${SYSTEM_PASSWORD:admin}" @@ -68,14 +76,11 @@ dbrepo: password: "${AUTH_SERVICE_ADMIN_PASSWORD:admin}" client: "${AUTH_SERVICE_CLIENT:dbrepo-client}" clientSecret: "${AUTH_SERVICE_CLIENT_SECRET:MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG}" - sql: - forbidden: "${NOT_SUPPORTED_KEYWORDS:AVG,BIT_AND,BIT_OR,BIT_XOR,COUNT,COUNTDISTINCT,GROUP_CONCAT,JSON_ARRAYAGG,JSON_OBJECTAGG,MAX,MIN,STD,STDDEV,STDDEV_POP,STDDEV_SAMP,SUM,VARIANCE,VAR_POP,VAR_SAMP,--}" grant: default: read: "${GRANT_DEFAULT_READ:SELECT}" write: "${GRANT_DEFAULT_WRITE:SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE}" - website: "${BASE_URL:http://localhost}" - credentialCacheTimeout: "${CREDENTIAL_CACHE_TIMEOUT:60}" + credentialCacheTimeout: "${CREDENTIAL_CACHE_TIMEOUT:300}" minConcurrent: "${MIN_CONCURRENT_CONSUMERS:2}" maxConcurrent: "${MAX_CONCURRENT_CONSUMERS:6}" requeueRejected: ${REQUEUE_REJECTED:false} diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/config/MariaDbConfig.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/config/MariaDbConfig.java index e03ea299a2..f0b3bb8784 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/config/MariaDbConfig.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/config/MariaDbConfig.java @@ -1,8 +1,8 @@ package at.tuwien.config; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.query.QueryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.QueryDto; import lombok.extern.log4j.Log4j2; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/config/MariaDbContainerConfig.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/config/MariaDbContainerConfig.java index 7aa18e3b9e..2d0e156117 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/config/MariaDbContainerConfig.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/config/MariaDbContainerConfig.java @@ -1,7 +1,8 @@ package at.tuwien.config; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import lombok.extern.log4j.Log4j2; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.testcontainers.containers.MariaDBContainer; @@ -10,8 +11,9 @@ import org.testcontainers.images.PullPolicy; /** * This class configures the MariaDB container for the integration tests. */ +@Log4j2 @Configuration -public class MariaDbContainerConfig extends AbstractUnitTest { +public class MariaDbContainerConfig extends BaseTest { public static CustomMariaDBContainer getContainer() { return CustomMariaDBContainer.getInstance(); @@ -36,7 +38,7 @@ public class MariaDbContainerConfig extends AbstractUnitTest { if (instance == null) { instance = new CustomMariaDBContainer(MARIADB_IMAGE); instance.withImagePullPolicy(PullPolicy.alwaysPull()); - instance.addFixedExposedPort(BaseTest.CONTAINER_1_PORT, BaseTest.IMAGE_1_PORT); + instance.addFixedExposedPort(BaseTest.CONTAINER_1_PORT, IMAGE_1_DEFAULT_PORT); instance.withUsername(BaseTest.CONTAINER_1_PRIVILEGED_USERNAME); instance.withPassword(BaseTest.CONTAINER_1_PRIVILEGED_PASSWORD); instance.withInitScript("init/users.sql"); diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java index d41e0609ba..36579a1954 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java @@ -1,15 +1,14 @@ package at.tuwien.endpoint; -import at.tuwien.api.database.AccessTypeDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.AccessTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import at.tuwien.endpoints.AccessEndpoint; -import at.tuwien.exception.*; import at.tuwien.service.AccessService; import at.tuwien.service.CacheService; -import at.tuwien.test.AbstractUnitTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -28,7 +27,7 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class AccessEndpointUnitTest extends AbstractUnitTest { +public class AccessEndpointUnitTest extends BaseTest { @Autowired private AccessEndpoint accessEndpoint; @@ -39,11 +38,6 @@ public class AccessEndpointUnitTest extends AbstractUnitTest { @MockBean private AccessService accessService; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @WithMockUser(username = USER_LOCAL_ADMIN_USERNAME, authorities = {"system"}) public void create_succeeds() throws UserNotFoundException, NotAllowedException, DatabaseUnavailableException, diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/DatabaseEndpointUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/DatabaseEndpointUnitTest.java index e2a6c550d0..7c318d10ae 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/DatabaseEndpointUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/DatabaseEndpointUnitTest.java @@ -1,17 +1,16 @@ package at.tuwien.endpoint; -import at.tuwien.api.database.AccessTypeDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.AccessTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import at.tuwien.endpoints.DatabaseEndpoint; -import at.tuwien.exception.*; import at.tuwien.service.AccessService; -import at.tuwien.service.ContainerService; import at.tuwien.service.CacheService; +import at.tuwien.service.ContainerService; import at.tuwien.service.DatabaseService; -import at.tuwien.test.AbstractUnitTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -33,7 +32,7 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class DatabaseEndpointUnitTest extends AbstractUnitTest { +public class DatabaseEndpointUnitTest extends BaseTest { @Autowired private DatabaseEndpoint databaseEndpoint; @@ -50,11 +49,6 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { @MockBean private CacheService credentialService; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @WithMockUser(username = USER_LOCAL_ADMIN_USERNAME, authorities = {"system"}) public void create_succeeds() throws DatabaseUnavailableException, RemoteUnavailableException, @@ -68,7 +62,7 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { .thenReturn(DATABASE_1_PRIVILEGED_DTO); doNothing() .when(containerService) - .createQueryStore(CONTAINER_1_DTO, DATABASE_1_INTERNALNAME); + .createQueryStore(CONTAINER_1_DTO, DATABASE_1_INTERNAL_NAME); doNothing() .when(accessService) .create(eq(DATABASE_1_PRIVILEGED_DTO), any(UserDto.class), any(AccessTypeDto.class)); @@ -90,7 +84,7 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { .thenReturn(DATABASE_1_PRIVILEGED_DTO); doNothing() .when(containerService) - .createQueryStore(CONTAINER_1_DTO, DATABASE_1_INTERNALNAME); + .createQueryStore(CONTAINER_1_DTO, DATABASE_1_INTERNAL_NAME); doNothing() .when(accessService) .create(eq(DATABASE_1_PRIVILEGED_DTO), any(UserDto.class), any(AccessTypeDto.class)); @@ -148,7 +142,7 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { .thenReturn(DATABASE_1_PRIVILEGED_DTO); doThrow(QueryStoreCreateException.class) .when(containerService) - .createQueryStore(CONTAINER_1_DTO, DATABASE_1_INTERNALNAME); + .createQueryStore(CONTAINER_1_DTO, DATABASE_1_INTERNAL_NAME); /* test */ assertThrows(ContainerNotFoundException.class, () -> { diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/SubsetEndpointUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/SubsetEndpointUnitTest.java index 92bead3674..7c21fa5ebf 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/SubsetEndpointUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/SubsetEndpointUnitTest.java @@ -1,23 +1,22 @@ package at.tuwien.endpoint; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.query.QueryDto; -import at.tuwien.api.database.query.QueryPersistDto; -import at.tuwien.api.database.query.SubsetDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.QueryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.QueryPersistDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.SubsetDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import at.tuwien.endpoints.SubsetEndpoint; -import at.tuwien.exception.*; import at.tuwien.gateway.MetadataServiceGateway; import at.tuwien.service.CacheService; import at.tuwien.service.DatabaseService; import at.tuwien.service.StorageService; import at.tuwien.service.SubsetService; -import at.tuwien.test.AbstractUnitTest; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.log4j.Log4j2; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; import org.apache.spark.sql.SparkSession; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -36,13 +35,13 @@ import java.util.List; import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class SubsetEndpointUnitTest extends AbstractUnitTest { +public class SubsetEndpointUnitTest extends BaseTest { @Autowired private SubsetEndpoint subsetEndpoint; @@ -68,11 +67,6 @@ public class SubsetEndpointUnitTest extends AbstractUnitTest { @MockBean private MetadataServiceGateway metadataServiceGateway; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @WithAnonymousUser public void list_publicDataPrivateSchemaAnonymous_succeeds() throws QueryNotFoundException, diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java index 3a5a62731b..528c9c16ed 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java @@ -1,24 +1,24 @@ package at.tuwien.endpoint; -import at.tuwien.api.database.DatabaseAccessDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.query.ImportDto; -import at.tuwien.api.database.table.*; -import at.tuwien.api.database.table.internal.TableCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.AccessTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseAccessDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.ImportDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.internal.TableCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import at.tuwien.endpoints.TableEndpoint; -import at.tuwien.exception.*; import at.tuwien.gateway.MetadataServiceGateway; import at.tuwien.service.CacheService; import at.tuwien.service.DatabaseService; import at.tuwien.service.SubsetService; import at.tuwien.service.TableService; -import at.tuwien.test.AbstractUnitTest; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.log4j.Log4j2; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; import org.apache.spark.sql.SparkSession; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; @@ -27,7 +27,6 @@ import org.junit.jupiter.params.provider.MethodSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.AccessDeniedException; @@ -47,7 +46,7 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class TableEndpointUnitTest extends AbstractUnitTest { +public class TableEndpointUnitTest extends BaseTest { @Autowired private TableEndpoint tableEndpoint; @@ -83,17 +82,12 @@ public class TableEndpointUnitTest extends AbstractUnitTest { public static Stream<Arguments> anyAccess_parameters() { return Stream.of( - Arguments.arguments("read", DATABASE_1_USER_2_READ_ACCESS_DTO), - Arguments.arguments("write_own", DATABASE_1_USER_2_WRITE_OWN_ACCESS_DTO), - Arguments.arguments("write_all", DATABASE_1_USER_2_WRITE_ALL_ACCESS_DTO) + Arguments.arguments("read", AccessTypeDto.READ), + Arguments.arguments("write_own", AccessTypeDto.WRITE_OWN), + Arguments.arguments("write_all", AccessTypeDto.WRITE_ALL) ); } - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @WithMockUser(username = USER_LOCAL_ADMIN_USERNAME, authorities = {"system"}) public void create_succeeds() throws DatabaseUnavailableException, TableMalformedException, ViewNotFoundException, @@ -177,7 +171,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { .thenReturn(TABLE_8_DTO); when(credentialService.getDatabase(DATABASE_3_ID)) .thenReturn(DATABASE_3_PRIVILEGED_DTO); - when(tableService.getStatistics(any(DatabaseDto.class), any(TableDto.class))) + when(tableService.getStatistics(any(DatabaseDto.class), anyString())) .thenReturn(TABLE_8_STATISTIC_DTO); /* test */ @@ -197,7 +191,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { .thenReturn(DATABASE_3_PRIVILEGED_DTO); doThrow(SQLException.class) .when(tableService) - .getStatistics(any(DatabaseDto.class), any(TableDto.class)); + .getStatistics(any(DatabaseDto.class), anyString()); /* test */ assertThrows(DatabaseUnavailableException.class, () -> { @@ -322,7 +316,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { .thenReturn(TABLE_5_DTO); when(credentialService.getDatabase(DATABASE_2_ID)) .thenReturn(DATABASE_2_PRIVILEGED_DTO); - when(tableService.getCount(any(DatabaseDto.class), any(TableDto.class), any(Instant.class))) + when(tableService.getCount(any(DatabaseDto.class), anyString(), any(Instant.class))) .thenReturn(3L); when(subsetService.getData(eq(DATABASE_2_DTO), anyString())) .thenReturn(mock); @@ -432,7 +426,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { @ParameterizedTest @WithMockUser(username = USER_2_USERNAME) @MethodSource("anyAccess_parameters") - public void getData_private_succeeds(String name, DatabaseAccessDto access) throws DatabaseUnavailableException, + public void getData_private_succeeds(String name, AccessTypeDto type) throws DatabaseUnavailableException, TableNotFoundException, QueryMalformedException, RemoteUnavailableException, PaginationException, MetadataServiceException, NotAllowedException, DatabaseNotFoundException, StorageUnavailableException, FormatNotAvailableException { final Dataset<Row> mock = sparkSession.emptyDataFrame(); @@ -443,7 +437,12 @@ public class TableEndpointUnitTest extends AbstractUnitTest { when(credentialService.getDatabase(DATABASE_1_ID)) .thenReturn(DATABASE_1_PRIVILEGED_DTO); when(credentialService.getAccess(DATABASE_1_ID, USER_2_ID)) - .thenReturn(access); + .thenReturn(DatabaseAccessDto.builder() + .user(USER_2_BRIEF_DTO) + .huserid(USER_2_ID) + .hdbid(DATABASE_1_ID) + .type(type) + .build()); when(subsetService.getData(any(DatabaseDto.class), anyString())) .thenReturn(mock); when(httpServletRequest.getMethod()) @@ -1345,7 +1344,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { @ParameterizedTest @WithMockUser(username = USER_2_USERNAME) @MethodSource("anyAccess_parameters") - public void getData_privateDataPrivateSchemaTextCsv_succeeds(String name, DatabaseAccessDto access) + public void getData_privateDataPrivateSchemaTextCsv_succeeds(String name, AccessTypeDto type) throws TableNotFoundException, NotAllowedException, StorageUnavailableException, QueryMalformedException, RemoteUnavailableException, MetadataServiceException, DatabaseNotFoundException, DatabaseUnavailableException, FormatNotAvailableException, PaginationException { @@ -1357,7 +1356,12 @@ public class TableEndpointUnitTest extends AbstractUnitTest { when(credentialService.getDatabase(DATABASE_1_ID)) .thenReturn(DATABASE_1_PRIVILEGED_DTO); when(credentialService.getAccess(DATABASE_1_ID, USER_2_ID)) - .thenReturn(access); + .thenReturn(DatabaseAccessDto.builder() + .user(USER_2_BRIEF_DTO) + .huserid(USER_2_ID) + .hdbid(DATABASE_1_ID) + .type(type) + .build()); when(credentialService.getDatabase(DATABASE_1_ID)) .thenReturn(DATABASE_1_DTO); when(subsetService.getData(any(DatabaseDto.class), anyString())) diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/ViewEndpointUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/ViewEndpointUnitTest.java index 5ce2990700..b4215747e3 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/ViewEndpointUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/ViewEndpointUnitTest.java @@ -1,20 +1,19 @@ package at.tuwien.endpoint; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import at.tuwien.endpoints.ViewEndpoint; -import at.tuwien.exception.*; import at.tuwien.service.CacheService; import at.tuwien.service.DatabaseService; import at.tuwien.service.SubsetService; import at.tuwien.service.ViewService; -import at.tuwien.test.AbstractUnitTest; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.log4j.Log4j2; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; import org.apache.spark.sql.SparkSession; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -37,7 +36,7 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class ViewEndpointUnitTest extends AbstractUnitTest { +public class ViewEndpointUnitTest extends BaseTest { @MockBean private ViewService viewService; @@ -60,16 +59,11 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { @Autowired private SparkSession sparkSession; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @WithMockUser(username = USER_LOCAL_ADMIN_USERNAME, authorities = {"system"}) public void create_succeeds() throws DatabaseNotFoundException, RemoteUnavailableException, ViewMalformedException, SQLException, DatabaseUnavailableException, MetadataServiceException, TableNotFoundException, - ImageNotFoundException, QueryMalformedException { + ImageNotFoundException, QueryMalformedException, ViewNotFoundException { /* mock */ when(credentialService.getDatabase(DATABASE_1_ID, true)) diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/gateway/InterceptorUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/gateway/InterceptorUnitTest.java index b87793a8bc..c41b8c326c 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/gateway/InterceptorUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/gateway/InterceptorUnitTest.java @@ -1,12 +1,10 @@ package at.tuwien.gateway; -import at.tuwien.api.keycloak.TokenDto; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; @@ -22,17 +20,12 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class InterceptorUnitTest extends AbstractUnitTest { +public class InterceptorUnitTest extends BaseTest { @MockBean @Qualifier("keycloakRestTemplate") private RestTemplate restTemplate; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void intercept_succeeds() { diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/gateway/MetadataServiceGatewayUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/gateway/MetadataServiceGatewayUnitTest.java index 1ea87d2fc1..8052efff55 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/gateway/MetadataServiceGatewayUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/gateway/MetadataServiceGatewayUnitTest.java @@ -1,16 +1,15 @@ package at.tuwien.gateway; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.database.DatabaseAccessDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.identifier.IdentifierBriefDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.exception.*; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseAccessDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -34,7 +33,7 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { +public class MetadataServiceGatewayUnitTest extends BaseTest { @MockBean @Qualifier("internalRestTemplate") @@ -43,11 +42,6 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { @Autowired private MetadataServiceGateway metadataServiceGateway; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void getTableById_succeeds() throws TableNotFoundException, RemoteUnavailableException, MetadataServiceException { @@ -130,7 +124,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { headers.set("X-Port", "" + CONTAINER_1_PORT); headers.set("X-Username", CONTAINER_1_PRIVILEGED_USERNAME); headers.set("X-Password", CONTAINER_1_PRIVILEGED_PASSWORD); - headers.set("X-Jdbc-Method", IMAGE_1_JDBC); + headers.set("X-Jdbc-Method", IMAGE_1_JDBC_METHOD); headers.set("Access-Control-Expose-Headers", "X-Username X-Password X-Jdbc-Method X-Host X-Port"); /* mock */ @@ -232,7 +226,7 @@ public class MetadataServiceGatewayUnitTest extends AbstractUnitTest { headers.set("X-Port", "" + CONTAINER_1_PORT); headers.set("X-Username", CONTAINER_1_PRIVILEGED_USERNAME); headers.set("X-Password", CONTAINER_1_PRIVILEGED_PASSWORD); - headers.set("X-Jdbc-Method", IMAGE_1_JDBC); + headers.set("X-Jdbc-Method", IMAGE_1_JDBC_METHOD); headers.set("Access-Control-Expose-Headers", "X-Username X-Password X-Jdbc-Method X-Host X-Port"); /* mock */ diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/handlers/ApiExceptionHandlerTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/handlers/ApiExceptionHandlerTest.java index 7dcb0343ac..063234a012 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/handlers/ApiExceptionHandlerTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/handlers/ApiExceptionHandlerTest.java @@ -1,8 +1,8 @@ package at.tuwien.handlers; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.exception.*; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -21,15 +21,15 @@ import java.util.Arrays; import java.util.List; import java.util.Optional; -import static at.tuwien.test.utils.EndpointUtils.getErrorCodes; -import static at.tuwien.test.utils.EndpointUtils.getExceptions; +import static at.ac.tuwien.ifs.dbrepo.core.test.utils.EndpointUtils.getErrorCodes; +import static at.ac.tuwien.ifs.dbrepo.core.test.utils.EndpointUtils.getExceptions; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @Log4j2 @ExtendWith(SpringExtension.class) @SpringBootTest -public class ApiExceptionHandlerTest extends AbstractUnitTest { +public class ApiExceptionHandlerTest extends BaseTest { @Autowired private ApiExceptionHandler apiExceptionHandler; diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/listener/DefaultListenerIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/listener/DefaultListenerIntegrationTest.java index bf63189bf2..8400a37cb9 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/listener/DefaultListenerIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/listener/DefaultListenerIntegrationTest.java @@ -1,16 +1,15 @@ package at.tuwien.listener; +import at.ac.tuwien.ifs.dbrepo.core.exception.DatabaseNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.MetadataServiceException; +import at.ac.tuwien.ifs.dbrepo.core.exception.RemoteUnavailableException; +import at.ac.tuwien.ifs.dbrepo.core.exception.TableNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; -import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.exception.MetadataServiceException; -import at.tuwien.exception.RemoteUnavailableException; -import at.tuwien.exception.TableNotFoundException; import at.tuwien.service.CacheService; -import at.tuwien.test.AbstractUnitTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.amqp.core.Message; @@ -31,7 +30,6 @@ import java.util.HashMap; import static at.tuwien.utils.RabbitMqUtils.buildMessage; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.when; @Log4j2 @@ -40,7 +38,7 @@ import static org.mockito.Mockito.when; @Testcontainers @ExtendWith(SpringExtension.class) @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -public class DefaultListenerIntegrationTest extends AbstractUnitTest { +public class DefaultListenerIntegrationTest extends BaseTest { @MockBean private CacheService credentialService; @@ -56,7 +54,6 @@ public class DefaultListenerIntegrationTest extends AbstractUnitTest { @BeforeEach public void beforeEach() throws SQLException { - genesis(); /* database */ MariaDbConfig.dropAllDatabases(CONTAINER_1_PRIVILEGED_DTO); MariaDbConfig.createInitDatabase(DATABASE_1_PRIVILEGED_DTO); @@ -78,20 +75,4 @@ public class DefaultListenerIntegrationTest extends AbstractUnitTest { assertTrue(output.getAll().contains("successfully inserted tuple")); } - @Test - @Disabled - public void onMessage_tableNotFound_fails(CapturedOutput output) throws TableNotFoundException, - RemoteUnavailableException, MetadataServiceException { - final Message request = buildMessage("dbrepo." + DATABASE_1_ID + "." + TABLE_1_ID, "{\"id\":4,\"date\":\"2023-10-03\",\"mintemp\":15.0,\"rainfall\":0.2}", new HashMap<>()); - - /* mock */ - doThrow(TableNotFoundException.class) - .when(credentialService) - .getTable(DATABASE_1_ID, TABLE_1_ID); - - /* test */ - defaultListener.onMessage(request); - assertTrue(output.getAll().contains("Failed to insert tuple")); - } - } diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/listener/DefaultListenerUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/listener/DefaultListenerUnitTest.java index 686a134dc5..ebff4c3fd9 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/listener/DefaultListenerUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/listener/DefaultListenerUnitTest.java @@ -1,13 +1,13 @@ package at.tuwien.listener; +import at.ac.tuwien.ifs.dbrepo.core.exception.DatabaseNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.MetadataServiceException; +import at.ac.tuwien.ifs.dbrepo.core.exception.RemoteUnavailableException; +import at.ac.tuwien.ifs.dbrepo.core.exception.TableNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; -import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.exception.MetadataServiceException; -import at.tuwien.exception.RemoteUnavailableException; -import at.tuwien.exception.TableNotFoundException; import at.tuwien.service.CacheService; -import at.tuwien.test.AbstractUnitTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -36,7 +36,7 @@ import static org.mockito.Mockito.when; @SpringBootTest @ExtendWith({SpringExtension.class, OutputCaptureExtension.class}) @Testcontainers -public class DefaultListenerUnitTest extends AbstractUnitTest { +public class DefaultListenerUnitTest { @MockBean private CacheService credentialService; @@ -50,13 +50,12 @@ public class DefaultListenerUnitTest extends AbstractUnitTest { @Container private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer(); - @BeforeEach - public void beforeEach() throws SQLException { - genesis(); - /* metadata database */ - MariaDbConfig.dropAllDatabases(CONTAINER_1_PRIVILEGED_DTO); - MariaDbConfig.createInitDatabase(DATABASE_1_PRIVILEGED_DTO); - } +// @BeforeEach +// public void beforeEach() throws SQLException { +// /* metadata database */ +// MariaDbConfig.dropAllDatabases(CONTAINER_1_PRIVILEGED_DTO); +// MariaDbConfig.createInitDatabase(DATABASE_1_PRIVILEGED_DTO); +// } @Test public void onMessage_routingKeyDatabaseAndTableMissing_fails(CapturedOutput output) { @@ -76,35 +75,35 @@ public class DefaultListenerUnitTest extends AbstractUnitTest { assertTrue(output.getAll().contains("Failed to map database and table")); } - @Test - public void onMessage_messageMalformed_fails(CapturedOutput output) throws TableNotFoundException, - RemoteUnavailableException, MetadataServiceException, DatabaseNotFoundException { - final Message request = buildMessage(TABLE_1_ROUTING_KEY, "{,}", new HashMap<>()); - - /* mock */ - when(credentialService.getTable(DATABASE_1_ID, TABLE_1_ID)) - .thenReturn(TABLE_1_DTO); - when(credentialService.getDatabase(DATABASE_1_ID)) - .thenReturn(DATABASE_1_PRIVILEGED_DTO); - - /* test */ - defaultListener.onMessage(request); - assertTrue(output.getAll().contains("Failed to read object")); - } - - @Test - public void onMessage_tableNotFound_fails(CapturedOutput output) throws TableNotFoundException, - RemoteUnavailableException, MetadataServiceException { - final Message request = buildMessage(TABLE_1_ROUTING_KEY, "{\"id\": 1}", new HashMap<>()); - - /* mock */ - doThrow(TableNotFoundException.class) - .when(credentialService) - .getTable(DATABASE_1_ID, TABLE_1_ID); - - /* test */ - defaultListener.onMessage(request); - assertTrue(output.getAll().contains("Failed to find table")); - } +// @Test +// public void onMessage_messageMalformed_fails(CapturedOutput output) throws TableNotFoundException, +// RemoteUnavailableException, MetadataServiceException, DatabaseNotFoundException { +// final Message request = buildMessage(TABLE_1_ROUTING_KEY, "{,}", new HashMap<>()); +// +// /* mock */ +// when(credentialService.getTable(DATABASE_1_ID, TABLE_1_ID)) +// .thenReturn(TABLE_1_DTO); +// when(credentialService.getDatabase(DATABASE_1_ID)) +// .thenReturn(DATABASE_1_PRIVILEGED_DTO); +// +// /* test */ +// defaultListener.onMessage(request); +// assertTrue(output.getAll().contains("Failed to read object")); +// } +// +// @Test +// public void onMessage_tableNotFound_fails(CapturedOutput output) throws TableNotFoundException, +// RemoteUnavailableException, MetadataServiceException { +// final Message request = buildMessage(TABLE_1_ROUTING_KEY, "{\"id\": 1}", new HashMap<>()); +// +// /* mock */ +// doThrow(TableNotFoundException.class) +// .when(credentialService) +// .getTable(DATABASE_1_ID, TABLE_1_ID); +// +// /* test */ +// defaultListener.onMessage(request); +// assertTrue(output.getAll().contains("Failed to find table")); +// } } diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mapper/MariaDbMapperUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mapper/MariaDbMapperUnitTest.java index a1a3ef4dad..ffd7a9cdcc 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mapper/MariaDbMapperUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mapper/MariaDbMapperUnitTest.java @@ -1,6 +1,6 @@ package at.tuwien.mapper; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; @@ -12,12 +12,12 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.stream.Stream; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class MariaDbMapperUnitTest extends AbstractUnitTest { +public class MariaDbMapperUnitTest extends BaseTest { @Autowired private MariaDbMapper mariaDbMapper; diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/ActuatorEndpointMvcTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/ActuatorEndpointMvcTest.java index a7a83a6184..50f371a9a8 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/ActuatorEndpointMvcTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/ActuatorEndpointMvcTest.java @@ -1,6 +1,6 @@ package at.tuwien.mvc; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -20,7 +20,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @AutoConfigureMockMvc @SpringBootTest @AutoConfigureObservability -public class ActuatorEndpointMvcTest extends AbstractUnitTest { +public class ActuatorEndpointMvcTest extends BaseTest { @Autowired private MockMvc mockMvc; diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/OpenApiEndpointMvcTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/OpenApiEndpointMvcTest.java index b5ed475ea8..a2ef7f201c 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/OpenApiEndpointMvcTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/OpenApiEndpointMvcTest.java @@ -1,8 +1,8 @@ package at.tuwien.mvc; -import at.tuwien.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; import at.tuwien.endpoints.*; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.responses.ApiResponse; @@ -30,7 +30,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @ExtendWith(SpringExtension.class) @AutoConfigureMockMvc @SpringBootTest -public class OpenApiEndpointMvcTest extends AbstractUnitTest { +public class OpenApiEndpointMvcTest extends BaseTest { @Autowired private MockMvc mockMvc; @@ -68,6 +68,7 @@ public class OpenApiEndpointMvcTest extends AbstractUnitTest { } private void generic_openApiDocs(Class<?> endpoint) { + final String packageScope = "at.ac.tuwien.ifs.dbrepo"; final List<Method> methods = Arrays.stream(endpoint.getMethods()) .filter(m -> m.getDeclaringClass().equals(endpoint)) .toList(); @@ -76,9 +77,9 @@ public class OpenApiEndpointMvcTest extends AbstractUnitTest { final List<Class<?>> exceptions = Arrays.stream(m.getExceptionTypes()) .toList(); final List<Class<?>> invalidExceptions = exceptions.stream() - .filter(e -> !e.getName().startsWith("at.tuwien.")) + .filter(e -> !e.getName().startsWith(packageScope)) .toList(); - assertTrue(invalidExceptions.isEmpty(), "method '" + m.getName() + "' throws exception(s) outside package scope at.tuwien: " + invalidExceptions.stream().map(Class::getName).toList()); + assertTrue(invalidExceptions.isEmpty(), "method '" + m.getName() + "' throws exception(s) outside package scope " + packageScope + ": " + invalidExceptions.stream().map(Class::getName).toList()); exceptions.forEach(exception -> { final int status = exception.getAnnotation(ResponseStatus.class) .code() diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/PrometheusEndpointMvcTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/PrometheusEndpointMvcTest.java index de1c875e0a..164aa99c06 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/PrometheusEndpointMvcTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/PrometheusEndpointMvcTest.java @@ -1,16 +1,16 @@ package at.tuwien.mvc; -import at.tuwien.api.database.query.ImportDto; -import at.tuwien.api.database.query.QueryPersistDto; -import at.tuwien.api.database.table.TupleDeleteDto; -import at.tuwien.api.database.table.TupleDto; -import at.tuwien.api.database.table.TupleUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.ImportDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.QueryPersistDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TupleDeleteDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TupleDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TupleUpdateDto; import at.tuwien.config.MetricsConfig; import at.tuwien.endpoints.SubsetEndpoint; import at.tuwien.endpoints.TableEndpoint; import at.tuwien.endpoints.ViewEndpoint; import at.tuwien.listener.DefaultListener; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import io.micrometer.observation.tck.TestObservationRegistry; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.log4j.Log4j2; @@ -42,7 +42,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @SpringBootTest @Import(MetricsConfig.class) @AutoConfigureObservability -public class PrometheusEndpointMvcTest extends AbstractUnitTest { +public class PrometheusEndpointMvcTest extends BaseTest { @Autowired private MockMvc mockMvc; diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/SubsetEndpointMvcTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/SubsetEndpointMvcTest.java index f3f0cb9799..1371d58bb3 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/SubsetEndpointMvcTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/mvc/SubsetEndpointMvcTest.java @@ -2,7 +2,7 @@ package at.tuwien.mvc; import at.tuwien.gateway.MetadataServiceGateway; import at.tuwien.service.SubsetService; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -25,7 +25,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @AutoConfigureMockMvc @SpringBootTest @AutoConfigureObservability -public class SubsetEndpointMvcTest extends AbstractUnitTest { +public class SubsetEndpointMvcTest extends BaseTest { @MockBean private MetadataServiceGateway metadataServiceGateway; diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java index abcfd4a175..55eacd882c 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java @@ -1,10 +1,10 @@ package at.tuwien.service; -import at.tuwien.api.database.AccessTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.AccessTypeDto; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; -import at.tuwien.exception.DatabaseMalformedException; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.exception.DatabaseMalformedException; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -26,7 +26,7 @@ import static org.junit.jupiter.api.Assertions.*; @SpringBootTest @ExtendWith(SpringExtension.class) @Testcontainers -public class AccessServiceIntegrationTest extends AbstractUnitTest { +public class AccessServiceIntegrationTest extends BaseTest { @Autowired private AccessService accessService; @@ -42,9 +42,8 @@ public class AccessServiceIntegrationTest extends AbstractUnitTest { @BeforeEach public void beforeEach() throws SQLException { - genesis(); /* metadata database */ - MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNALNAME); + MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNAL_NAME); MariaDbConfig.createInitDatabase(DATABASE_1_PRIVILEGED_DTO); } diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java index ef4f8713c8..d495fac306 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java @@ -1,11 +1,11 @@ package at.tuwien.service; -import at.tuwien.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; -import at.tuwien.exception.DatabaseMalformedException; -import at.tuwien.exception.QueryStoreCreateException; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.exception.DatabaseMalformedException; +import at.ac.tuwien.ifs.dbrepo.core.exception.QueryStoreCreateException; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -28,7 +28,7 @@ import static org.junit.jupiter.api.Assertions.*; @SpringBootTest @ExtendWith(SpringExtension.class) @Testcontainers -public class ContainerServiceIntegrationTest extends AbstractUnitTest { +public class ContainerServiceIntegrationTest extends BaseTest { @Autowired private ContainerService containerService; @@ -43,10 +43,9 @@ public class ContainerServiceIntegrationTest extends AbstractUnitTest { @BeforeEach public void beforeEach() throws SQLException, InterruptedException { - genesis(); /* metadata database */ - MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNALNAME); - MariaDbConfig.createDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNALNAME); + MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNAL_NAME); + MariaDbConfig.createDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNAL_NAME); Thread.sleep(1000) /* wait for test container some more */; } @@ -54,12 +53,12 @@ public class ContainerServiceIntegrationTest extends AbstractUnitTest { public void create_succeeds() throws SQLException, DatabaseMalformedException { /* mock */ - MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNALNAME); + MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNAL_NAME); /* test */ final DatabaseDto response = containerService.createDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_CREATE_INTERNAL); assertNull(response.getName()); - assertEquals(DATABASE_1_INTERNALNAME, response.getInternalName()); + assertEquals(DATABASE_1_INTERNAL_NAME, response.getInternalName()); assertEquals(EXCHANGE_DBREPO_NAME, response.getExchangeName()); assertNotNull(response.getOwner()); assertEquals(USER_1_ID, response.getOwner().getId()); @@ -82,7 +81,7 @@ public class ContainerServiceIntegrationTest extends AbstractUnitTest { public void createQueryStore_succeeds() throws SQLException, QueryStoreCreateException { /* test */ - createQueryStore_generic(DATABASE_1_INTERNALNAME); + createQueryStore_generic(DATABASE_1_INTERNAL_NAME); } protected void createQueryStore_generic(String databaseName) throws SQLException, QueryStoreCreateException { diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/CredentialServiceUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/CredentialServiceUnitTest.java index 95121ad704..994d011360 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/CredentialServiceUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/CredentialServiceUnitTest.java @@ -1,15 +1,15 @@ package at.tuwien.service; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.database.DatabaseAccessDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseAccessDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import at.tuwien.gateway.MetadataServiceGateway; import at.tuwien.service.impl.CacheServiceImpl; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -27,7 +27,7 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class CredentialServiceUnitTest extends AbstractUnitTest { +public class CredentialServiceUnitTest extends BaseTest { @Autowired private CacheServiceImpl credentialService; @@ -37,7 +37,6 @@ public class CredentialServiceUnitTest extends AbstractUnitTest { @BeforeEach public void beforeEach() throws SQLException { - genesis(); /* cache */ credentialService.invalidateAll(); } diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java index 40fdb982ab..cccba468ff 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java @@ -1,25 +1,25 @@ package at.tuwien.service; -import at.tuwien.api.database.ViewColumnDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.table.TableBriefDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.columns.*; -import at.tuwien.api.database.table.constraints.ConstraintsDto; -import at.tuwien.api.database.table.constraints.CreateTableConstraintsDto; -import at.tuwien.api.database.table.constraints.foreign.CreateForeignKeyDto; -import at.tuwien.api.database.table.constraints.foreign.ForeignKeyDto; -import at.tuwien.api.database.table.constraints.foreign.ForeignKeyReferenceDto; -import at.tuwien.api.database.table.constraints.foreign.ReferenceTypeDto; -import at.tuwien.api.database.table.constraints.primary.PrimaryKeyDto; -import at.tuwien.api.database.table.constraints.unique.UniqueDto; -import at.tuwien.api.database.table.internal.TableCreateDto; -import at.tuwien.api.identifier.IdentifierDto; -import at.tuwien.api.user.internal.UpdateUserPasswordDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.ConstraintsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.CreateTableConstraintsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign.CreateForeignKeyDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign.ForeignKeyDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign.ForeignKeyReferenceDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign.ReferenceTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.primary.PrimaryKeyDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.unique.UniqueDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.internal.TableCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.internal.UpdateUserPasswordDto; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; -import at.tuwien.exception.*; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -45,7 +45,7 @@ import static org.junit.jupiter.api.Assertions.*; @SpringBootTest @ExtendWith(SpringExtension.class) @Testcontainers -public class DatabaseServiceIntegrationTest extends AbstractUnitTest { +public class DatabaseServiceIntegrationTest extends BaseTest { @Autowired private DatabaseService databaseService; @@ -60,11 +60,10 @@ public class DatabaseServiceIntegrationTest extends AbstractUnitTest { @BeforeEach public void beforeEach() throws SQLException, InterruptedException { - genesis(); /* metadata database */ - MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNALNAME); + MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNAL_NAME); MariaDbConfig.createInitDatabase(DATABASE_1_PRIVILEGED_DTO); - MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_2_INTERNALNAME); + MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_2_INTERNAL_NAME); MariaDbConfig.createInitDatabase(DATABASE_2_PRIVILEGED_DTO); Thread.sleep(1000) /* wait for test container some more */; } @@ -113,9 +112,9 @@ public class DatabaseServiceIntegrationTest extends AbstractUnitTest { MariaDbConfig.grantWriteAccess(DATABASE_1_PRIVILEGED_DTO, USER_1_USERNAME); /* pre-condition */ - MariaDbConfig.mockQuery(CONTAINER_1_HOST, CONTAINER_1_PORT, DATABASE_1_INTERNALNAME, "CREATE SEQUENCE debug NOCACHE", USER_1_USERNAME, USER_1_PASSWORD); + MariaDbConfig.mockQuery(CONTAINER_1_HOST, CONTAINER_1_PORT, DATABASE_1_INTERNAL_NAME, "CREATE SEQUENCE debug NOCACHE", USER_1_USERNAME, USER_1_PASSWORD); try { - MariaDbConfig.mockQuery(CONTAINER_1_HOST, CONTAINER_1_PORT, DATABASE_1_INTERNALNAME, "CREATE SEQUENCE debug NOCACHE", USER_1_USERNAME, USER_2_PASSWORD); + MariaDbConfig.mockQuery(CONTAINER_1_HOST, CONTAINER_1_PORT, DATABASE_1_INTERNAL_NAME, "CREATE SEQUENCE debug NOCACHE", USER_1_USERNAME, USER_2_PASSWORD); fail(); } catch (SQLException e) { /* ignore */ @@ -123,7 +122,7 @@ public class DatabaseServiceIntegrationTest extends AbstractUnitTest { /* test */ databaseService.update(DATABASE_1_PRIVILEGED_DTO, request); - MariaDbConfig.mockQuery(CONTAINER_1_HOST, CONTAINER_1_PORT, DATABASE_1_INTERNALNAME, "CREATE SEQUENCE debug2 NOCACHE", USER_1_USERNAME, USER_2_PASSWORD); + MariaDbConfig.mockQuery(CONTAINER_1_HOST, CONTAINER_1_PORT, DATABASE_1_INTERNAL_NAME, "CREATE SEQUENCE debug2 NOCACHE", USER_1_USERNAME, USER_2_PASSWORD); } @Test @@ -189,7 +188,7 @@ public class DatabaseServiceIntegrationTest extends AbstractUnitTest { assertTrue(response.getIsVersioned()); assertEquals(DATABASE_2_PUBLIC, response.getIsPublic()); assertNotNull(response.getOwner()); - assertEquals(DATABASE_2_OWNER, response.getOwner().getId()); + assertEquals(USER_2_ID, response.getOwner().getId()); assertEquals(USER_2_NAME, response.getOwner().getName()); assertEquals(USER_2_USERNAME, response.getOwner().getUsername()); assertEquals(USER_2_FIRSTNAME, response.getOwner().getFirstname()); @@ -307,8 +306,8 @@ public class DatabaseServiceIntegrationTest extends AbstractUnitTest { assertNotNull(fk0.getOnDelete()); assertNotNull(fk0.getOnUpdate()); assertNotNull(fk0.getReferencedTable()); - assertEquals(TABLE_2_INTERNALNAME, fk0.getReferencedTable().getName()); - assertEquals(TABLE_2_INTERNALNAME, fk0.getReferencedTable().getInternalName()); + assertEquals(TABLE_2_INTERNAL_NAME, fk0.getReferencedTable().getName()); + assertEquals(TABLE_2_INTERNAL_NAME, fk0.getReferencedTable().getInternalName()); } @Test @@ -600,8 +599,8 @@ public class DatabaseServiceIntegrationTest extends AbstractUnitTest { /* test */ final TableDto response = databaseService.createTable(DATABASE_1_PRIVILEGED_DTO, TABLE_4_CREATE_INTERNAL_DTO); - assertEquals(TABLE_4_INTERNALNAME, response.getName()); - assertEquals(TABLE_4_INTERNALNAME, response.getInternalName()); + assertEquals(TABLE_4_INTERNAL_NAME, response.getName()); + assertEquals(TABLE_4_INTERNAL_NAME, response.getInternalName()); final List<ColumnDto> columns = response.getColumns(); assertEquals(TABLE_4_COLUMNS.size(), columns.size()); assertColumn(columns.get(0), null, null, DATABASE_1_ID, "timestamp", "timestamp", ColumnTypeDto.TIMESTAMP, null, null, false, null); @@ -616,7 +615,7 @@ public class DatabaseServiceIntegrationTest extends AbstractUnitTest { @Test public void createTable_malformed_fails() { - final at.tuwien.api.database.table.internal.TableCreateDto request = TableCreateDto.builder() + final at.ac.tuwien.ifs.dbrepo.core.api.database.table.internal.TableCreateDto request = TableCreateDto.builder() .name("missing_foreign_key") .columns(List.of()) .constraints(CreateTableConstraintsDto.builder() @@ -637,7 +636,7 @@ public class DatabaseServiceIntegrationTest extends AbstractUnitTest { @Test public void createTable_compositePrimaryKey_fails() throws TableNotFoundException, TableMalformedException, SQLException, TableExistsException { - final at.tuwien.api.database.table.internal.TableCreateDto request = TableCreateDto.builder() + final at.ac.tuwien.ifs.dbrepo.core.api.database.table.internal.TableCreateDto request = TableCreateDto.builder() .name("composite_primary_key") .columns(List.of(CreateTableColumnDto.builder() .name("name") diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java index 6996ecb9f4..190614876b 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java @@ -2,13 +2,13 @@ package at.tuwien.service; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; -import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.exception.MetadataServiceException; -import at.tuwien.exception.RemoteUnavailableException; -import at.tuwien.exception.TableNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.DatabaseNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.MetadataServiceException; +import at.ac.tuwien.ifs.dbrepo.core.exception.RemoteUnavailableException; +import at.ac.tuwien.ifs.dbrepo.core.exception.TableNotFoundException; import at.tuwien.gateway.MetadataServiceGateway; import at.tuwien.service.impl.QueueServiceRabbitMqImpl; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -32,7 +32,7 @@ import static org.mockito.Mockito.when; @SpringBootTest @ExtendWith(SpringExtension.class) @Testcontainers -public class QueueServiceIntegrationTest extends AbstractUnitTest { +public class QueueServiceIntegrationTest extends BaseTest { @Autowired private QueueServiceRabbitMqImpl queueService; @@ -50,9 +50,8 @@ public class QueueServiceIntegrationTest extends AbstractUnitTest { @BeforeEach public void beforeEach() throws SQLException { - genesis(); /* metadata database */ - MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNALNAME); + MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNAL_NAME); MariaDbConfig.createInitDatabase(DATABASE_1_PRIVILEGED_DTO); } diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/StorageServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/StorageServiceIntegrationTest.java index 4344c9abb3..9d923542a1 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/StorageServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/StorageServiceIntegrationTest.java @@ -1,12 +1,12 @@ package at.tuwien.service; -import at.tuwien.ExportResourceDto; +import at.ac.tuwien.ifs.dbrepo.core.api.ExportResourceDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.MalformedException; +import at.ac.tuwien.ifs.dbrepo.core.exception.StorageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.StorageUnavailableException; +import at.ac.tuwien.ifs.dbrepo.core.exception.TableMalformedException; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import at.tuwien.config.S3Config; -import at.tuwien.exception.MalformedException; -import at.tuwien.exception.StorageNotFoundException; -import at.tuwien.exception.StorageUnavailableException; -import at.tuwien.exception.TableMalformedException; -import at.tuwien.test.AbstractUnitTest; import lombok.extern.log4j.Log4j2; import org.apache.commons.io.FileUtils; import org.apache.spark.sql.Dataset; @@ -31,6 +31,7 @@ import org.testcontainers.junit.jupiter.Testcontainers; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.CreateBucketRequest; +import software.amazon.awssdk.services.s3.model.ListObjectsRequest; import software.amazon.awssdk.services.s3.model.PutObjectRequest; import java.io.*; @@ -48,7 +49,7 @@ import static org.junit.jupiter.api.Assertions.*; @SpringBootTest @ExtendWith(SpringExtension.class) @Testcontainers -public class StorageServiceIntegrationTest extends AbstractUnitTest { +public class StorageServiceIntegrationTest extends BaseTest { @Autowired private StorageService storageService; @@ -84,7 +85,6 @@ public class StorageServiceIntegrationTest extends AbstractUnitTest { @BeforeEach public void beforeEach() throws SQLException { - genesis(); /* s3 */ if (s3Client.listBuckets().buckets().stream().noneMatch(b -> b.name().equals(s3Config.getS3Bucket()))) { s3Client.createBucket(CreateBucketRequest.builder() @@ -233,6 +233,35 @@ public class StorageServiceIntegrationTest extends AbstractUnitTest { assertEquals("", lines.get(0)); } + @Test + public void deleteStaleObjects_none_succeeds() { + + /* mock */ + s3Client.putObject(PutObjectRequest.builder() + .key("s3key") + .bucket(s3Config.getS3Bucket()) + .build(), RequestBody.fromFile(new File("src/test/resources/csv/weather_aus.csv"))); + + /* test */ + storageService.deleteStaleObjects(); + assertEquals(1, s3Client.listObjects(ListObjectsRequest.builder().bucket(s3Config.getS3Bucket()).build()).contents().size()); + } + + @Test + public void deleteStaleObjects_succeeds() throws InterruptedException { + + /* mock */ + s3Client.putObject(PutObjectRequest.builder() + .key("s3key") + .bucket(s3Config.getS3Bucket()) + .build(), RequestBody.fromFile(new File("src/test/resources/csv/weather_aus.csv"))); + + /* test */ + Thread.sleep(4000); + storageService.deleteStaleObjects(); + assertEquals(0, s3Client.listObjects(ListObjectsRequest.builder().bucket(s3Config.getS3Bucket()).build()).contents().size()); + } + @ParameterizedTest @Disabled("cannot fix") @MethodSource("loadDataset_arguments") diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SubsetServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SubsetServiceIntegrationTest.java index d05979af36..f6bd02059b 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SubsetServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SubsetServiceIntegrationTest.java @@ -1,12 +1,12 @@ package at.tuwien.service; -import at.tuwien.api.database.query.*; -import at.tuwien.api.identifier.IdentifierBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.*; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierBriefDto; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import at.tuwien.gateway.MetadataServiceGateway; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; @@ -39,7 +39,7 @@ import static org.mockito.Mockito.when; @SpringBootTest @ExtendWith(SpringExtension.class) @Testcontainers -public class SubsetServiceIntegrationTest extends AbstractUnitTest { +public class SubsetServiceIntegrationTest extends BaseTest { @Autowired private SubsetService subsetService; @@ -60,9 +60,8 @@ public class SubsetServiceIntegrationTest extends AbstractUnitTest { @BeforeEach public void beforeEach() throws SQLException { - genesis(); /* metadata database */ - MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNALNAME); + MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNAL_NAME); MariaDbConfig.createInitDatabase(DATABASE_1_PRIVILEGED_DTO); } @@ -242,7 +241,7 @@ public class SubsetServiceIntegrationTest extends AbstractUnitTest { @Test public void create_succeeds() throws SQLException, QueryStoreInsertException, ViewMalformedException, - TableNotFoundException, QueryMalformedException, ImageNotFoundException { + TableNotFoundException, QueryMalformedException, ImageNotFoundException, ViewNotFoundException { /* test */ final UUID response = subsetService.create(DATABASE_1_PRIVILEGED_DTO, QUERY_1_SUBSET_DTO, QUERY_1_CREATED, USER_1_ID); @@ -253,9 +252,10 @@ public class SubsetServiceIntegrationTest extends AbstractUnitTest { @MethodSource("create_arguments") public void create_illegalQuery_succeeds(String name, String injection) throws TableNotFoundException, QueryStoreInsertException, ViewMalformedException, SQLException, QueryMalformedException, - ImageNotFoundException { + ImageNotFoundException, ViewNotFoundException { final SubsetDto request = SubsetDto.builder() - .tableId(TABLE_1_ID) + .datasourceId(TABLE_1_ID) + .datasourceType(DatasourceType.TABLE) .columns(new LinkedList<>(List.of(COLUMN_1_1_ID, COLUMN_1_2_ID, COLUMN_1_3_ID, COLUMN_1_4_ID, COLUMN_1_5_ID))) .filter(new LinkedList<>(List.of(FilterDto.builder() .type(FilterTypeDto.WHERE) diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java index 77e91361db..b46ed8d484 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java @@ -1,13 +1,13 @@ package at.tuwien.service; -import at.tuwien.api.database.query.ImportDto; -import at.tuwien.api.database.table.*; -import at.tuwien.api.database.table.columns.ColumnStatisticDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.ImportDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnStatisticDto; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; import at.tuwien.config.S3Config; -import at.tuwien.exception.*; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import com.google.common.io.Files; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeAll; @@ -45,7 +45,7 @@ import static org.junit.jupiter.api.Assertions.*; @SpringBootTest @ExtendWith(SpringExtension.class) @Testcontainers -public class TableServiceIntegrationTest extends AbstractUnitTest { +public class TableServiceIntegrationTest extends BaseTest { @Autowired private TableService tableService; @@ -74,11 +74,10 @@ public class TableServiceIntegrationTest extends AbstractUnitTest { @BeforeEach public void beforeEach() throws SQLException { - genesis(); /* metadata database */ - MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNALNAME); - MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_2_INTERNALNAME); - MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_3_INTERNALNAME); + MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNAL_NAME); + MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_2_INTERNAL_NAME); + MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_3_INTERNAL_NAME); MariaDbConfig.createInitDatabase(DATABASE_1_PRIVILEGED_DTO); MariaDbConfig.createInitDatabase(DATABASE_3_PRIVILEGED_DTO); /* s3 */ @@ -307,24 +306,28 @@ public class TableServiceIntegrationTest extends AbstractUnitTest { public void getStatistics_succeeds() throws TableMalformedException, SQLException, TableNotFoundException { /* test */ - final TableStatisticDto response = tableService.getStatistics(DATABASE_1_PRIVILEGED_DTO, TABLE_2_DTO); + final TableStatisticDto response = tableService.getStatistics(DATABASE_1_PRIVILEGED_DTO, TABLE_2_INTERNAL_NAME); assertEquals(TABLE_2_COLUMNS.size(), response.getColumns().size()); - log.trace("response rows: {}", response.getRows()); - assertEquals(3L, response.getRows()); - assertEquals(Set.of("location", "lat", "lng"), response.getColumns().keySet()); - final ColumnStatisticDto column0 = response.getColumns().get("location"); + assertEquals(TABLE_2_COLUMNS.size(), response.getTotalColumns()); + log.trace("response rows: {}", response.getTotalRows()); + assertEquals(3L, response.getTotalRows()); + assertEquals(List.of("location", "lat", "lng"), response.getColumns().stream().map(ColumnStatisticDto::getName).toList()); + final ColumnStatisticDto column0 = response.getColumns().get(0); + assertEquals("location", column0.getName()); assertNull(column0.getMin()); assertNull(column0.getMax()); assertNull(column0.getMean()); assertNull(column0.getMedian()); assertNull(column0.getStdDev()); - final ColumnStatisticDto column3 = response.getColumns().get("lat"); + final ColumnStatisticDto column3 = response.getColumns().get(3); + assertEquals("lat", column0.getName()); assertEquals(BigDecimal.valueOf(-36.0653583), column3.getMin()); assertEquals(BigDecimal.valueOf(-33.847927), column3.getMax()); assertNotNull(column3.getMean()); assertNotNull(column3.getMedian()); assertNotNull(column3.getStdDev()); - final ColumnStatisticDto column4 = response.getColumns().get("lng"); + final ColumnStatisticDto column4 = response.getColumns().get(4); + assertEquals("lng", column0.getName()); assertEquals(BigDecimal.valueOf(146.9112214), column4.getMin()); assertEquals(BigDecimal.valueOf(150.6517942), column4.getMax()); assertNotNull(column4.getMean()); @@ -343,7 +346,7 @@ public class TableServiceIntegrationTest extends AbstractUnitTest { public void delete_notFound_fails() throws SQLException { /* mock */ - MariaDbConfig.createDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_2_INTERNALNAME); + MariaDbConfig.createDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_2_INTERNAL_NAME); /* test */ assertThrows(QueryMalformedException.class, () -> { @@ -355,7 +358,7 @@ public class TableServiceIntegrationTest extends AbstractUnitTest { public void getCount_succeeds() throws SQLException, QueryMalformedException { /* test */ - final Long response = tableService.getCount(DATABASE_1_PRIVILEGED_DTO, TABLE_1_DTO, null); + final Long response = tableService.getCount(DATABASE_1_PRIVILEGED_DTO, TABLE_1_INTERNAL_NAME, null); assertEquals(3, response); } @@ -363,7 +366,7 @@ public class TableServiceIntegrationTest extends AbstractUnitTest { public void getCount_timestamp_succeeds() throws SQLException, QueryMalformedException { /* test */ - final Long response = tableService.getCount(DATABASE_1_PRIVILEGED_DTO, TABLE_1_DTO, Instant.ofEpochSecond(0)); + final Long response = tableService.getCount(DATABASE_1_PRIVILEGED_DTO, TABLE_1_INTERNAL_NAME, Instant.ofEpochSecond(0)); assertEquals(0, response); } @@ -371,11 +374,11 @@ public class TableServiceIntegrationTest extends AbstractUnitTest { public void getCount_notFound_fails() throws SQLException { /* mock */ - MariaDbConfig.createDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_2_INTERNALNAME); + MariaDbConfig.createDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_2_INTERNAL_NAME); /* test */ assertThrows(QueryMalformedException.class, () -> { - tableService.getCount(DATABASE_2_PRIVILEGED_DTO, TABLE_5_DTO, null); + tableService.getCount(DATABASE_2_PRIVILEGED_DTO, TABLE_5_INTERNAL_NAME, null); }); } @@ -395,7 +398,7 @@ public class TableServiceIntegrationTest extends AbstractUnitTest { public void history_notFound_fails() throws SQLException { /* mock */ - MariaDbConfig.createDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_2_INTERNALNAME); + MariaDbConfig.createDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_2_INTERNAL_NAME); /* test */ assertThrows(TableNotFoundException.class, () -> { diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java index 5e99f4afbc..7f5180e4ab 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java @@ -2,8 +2,8 @@ package at.tuwien.service; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; -import at.tuwien.exception.ViewMalformedException; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.exception.ViewMalformedException; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -21,7 +21,7 @@ import java.sql.SQLException; @SpringBootTest @ExtendWith(SpringExtension.class) @Testcontainers -public class ViewServiceIntegrationTest extends AbstractUnitTest { +public class ViewServiceIntegrationTest extends BaseTest { @Autowired private ViewService viewService; @@ -31,9 +31,8 @@ public class ViewServiceIntegrationTest extends AbstractUnitTest { @BeforeEach public void beforeEach() throws SQLException { - genesis(); /* metadata database */ - MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNALNAME); + MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNAL_NAME); MariaDbConfig.createInitDatabase(DATABASE_1_PRIVILEGED_DTO); } diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/utils/MariaDbUtilTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/utils/MariaDbUtilTest.java index 6ed73e8a01..6a7a08cf26 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/utils/MariaDbUtilTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/utils/MariaDbUtilTest.java @@ -1,6 +1,6 @@ package at.tuwien.utils; -import at.tuwien.api.database.table.columns.ColumnTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnTypeDto; import org.junit.jupiter.api.Test; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageProperties; diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/validation/EndpointValidatorUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/validation/EndpointValidatorUnitTest.java index d833d3fc1a..0f865a3929 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/validation/EndpointValidatorUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/validation/EndpointValidatorUnitTest.java @@ -1,7 +1,7 @@ package at.tuwien.validation; -import at.tuwien.exception.PaginationException; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.exception.PaginationException; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -18,7 +18,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; @AutoConfigureMockMvc @SpringBootTest @AutoConfigureObservability -public class EndpointValidatorUnitTest extends AbstractUnitTest { +public class EndpointValidatorUnitTest extends BaseTest { @Autowired private EndpointValidator endpointValidator; diff --git a/dbrepo-data-service/rest-service/src/test/resources/application.properties b/dbrepo-data-service/rest-service/src/test/resources/application.properties index a0bb7de2bb..f1d57b6786 100644 --- a/dbrepo-data-service/rest-service/src/test/resources/application.properties +++ b/dbrepo-data-service/rest-service/src/test/resources/application.properties @@ -33,3 +33,4 @@ spring.rabbitmq.password=guest # s3 dbrepo.s3.accessKeyId=minioadmin dbrepo.s3.secretAccessKey=minioadmin +dbrepo.s3.maxAge=3 diff --git a/dbrepo-data-service/services/pom.xml b/dbrepo-data-service/services/pom.xml index b02ce620c7..27d773f4d2 100644 --- a/dbrepo-data-service/services/pom.xml +++ b/dbrepo-data-service/services/pom.xml @@ -6,18 +6,18 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service</artifactId> - <version>1.7.3</version> + <version>1.8.0</version> </parent> <artifactId>services</artifactId> <name>dbrepo-data-service-services</name> - <version>1.7.3</version> + <version>1.8.0</version> <dependencies> <dependency> <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service-querystore</artifactId> - <version>1.7.3</version> + <version>1.8.0</version> </dependency> </dependencies> diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java b/dbrepo-data-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java index 1e9d1c4bf0..81590fbe4d 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java @@ -1,7 +1,7 @@ package at.tuwien.auth; -import at.tuwien.api.auth.RealmAccessDto; -import at.tuwien.api.user.UserDetailsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.auth.RealmAccessDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDetailsDto; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/auth/BasicAuthenticationProvider.java b/dbrepo-data-service/services/src/main/java/at/tuwien/auth/BasicAuthenticationProvider.java index 7af0e8cab0..047469e772 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/auth/BasicAuthenticationProvider.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/auth/BasicAuthenticationProvider.java @@ -1,6 +1,6 @@ package at.tuwien.auth; -import at.tuwien.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; import at.tuwien.service.CredentialService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; @@ -28,6 +28,7 @@ public class BasicAuthenticationProvider implements AuthenticationManager { public Authentication authenticate(Authentication auth) throws AuthenticationException { final TokenDto tokenDto = credentialService.getAccessToken(auth.getName(), auth.getCredentials().toString()); final UserDetails userDetails = authTokenFilter.verifyJwt(tokenDto.getAccessToken()); + log.debug("set basic auth principal username: {}", userDetails.getUsername()); return new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); } } diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/auth/InternalRequestInterceptor.java b/dbrepo-data-service/services/src/main/java/at/tuwien/auth/InternalRequestInterceptor.java index 5ba81ea4b3..e5549a35b1 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/auth/InternalRequestInterceptor.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/auth/InternalRequestInterceptor.java @@ -1,6 +1,6 @@ package at.tuwien.auth; -import at.tuwien.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; import at.tuwien.config.GatewayConfig; import at.tuwien.service.CredentialService; import lombok.extern.log4j.Log4j2; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/config/CacheConfig.java b/dbrepo-data-service/services/src/main/java/at/tuwien/config/CacheConfig.java index 603491c970..2466f40a2b 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/config/CacheConfig.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/config/CacheConfig.java @@ -1,12 +1,13 @@ package at.tuwien.config; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.database.DatabaseAccessDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.keycloak.TokenDto; -import at.tuwien.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseAccessDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableStatisticDto; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDto; import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; import org.springframework.beans.factory.annotation.Value; @@ -52,6 +53,11 @@ public class CacheConfig { return new ExpiryCache<UUID, ContainerDto>().build(); } + @Bean + public Cache<UUID, TableStatisticDto> statisticCache() { + return new ExpiryCache<UUID, TableStatisticDto>().build(); + } + @Bean public Cache<String, TokenDto> tokenCache() { return new ExpiryCache<String, TokenDto>().build(); diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/config/S3Config.java b/dbrepo-data-service/services/src/main/java/at/tuwien/config/S3Config.java index c5aeb968d5..726692e55d 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/config/S3Config.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/config/S3Config.java @@ -30,6 +30,9 @@ public class S3Config { @Value("${dbrepo.s3.bucket}") private String s3Bucket; + @Value("${dbrepo.s3.maxAge}") + private Integer maxAge; + @Bean public S3Client s3client() { final AwsCredentialsProvider credentialsProvider = StaticCredentialsProvider.create( diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/KeycloakGateway.java b/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/KeycloakGateway.java index 21fbf674db..5b23d7c367 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/KeycloakGateway.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/KeycloakGateway.java @@ -1,10 +1,10 @@ package at.tuwien.gateway; -import at.tuwien.api.keycloak.TokenDto; -import at.tuwien.exception.AccountNotSetupException; -import at.tuwien.exception.AuthServiceConnectionException; -import at.tuwien.exception.CredentialsInvalidException; -import at.tuwien.exception.NotAllowedException; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.AccountNotSetupException; +import at.ac.tuwien.ifs.dbrepo.core.exception.AuthServiceConnectionException; +import at.ac.tuwien.ifs.dbrepo.core.exception.CredentialsInvalidException; +import at.ac.tuwien.ifs.dbrepo.core.exception.NotAllowedException; import org.springframework.security.authentication.BadCredentialsException; public interface KeycloakGateway { diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/MetadataServiceGateway.java b/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/MetadataServiceGateway.java index 38b28ebcac..7d5571da9a 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/MetadataServiceGateway.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/MetadataServiceGateway.java @@ -1,18 +1,18 @@ package at.tuwien.gateway; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.database.DatabaseAccessDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.identifier.IdentifierBriefDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseAccessDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import jakarta.validation.constraints.NotNull; import java.util.List; import java.util.UUID; - +// todo ? public interface MetadataServiceGateway { /** diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/impl/KeycloakGatewayImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/impl/KeycloakGatewayImpl.java index 1e14a4b4ce..d0f874cb9c 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/impl/KeycloakGatewayImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/impl/KeycloakGatewayImpl.java @@ -1,6 +1,6 @@ package at.tuwien.gateway.impl; -import at.tuwien.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; import at.tuwien.config.KeycloakConfig; import at.tuwien.gateway.KeycloakGateway; import at.tuwien.mapper.MetadataMapper; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/impl/MetadataServiceGatewayImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/impl/MetadataServiceGatewayImpl.java index ab0ab9dea5..959ad34e5d 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/impl/MetadataServiceGatewayImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/gateway/impl/MetadataServiceGatewayImpl.java @@ -1,14 +1,14 @@ package at.tuwien.gateway.impl; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.database.DatabaseAccessDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.identifier.IdentifierBriefDto; -import at.tuwien.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseAccessDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDto; import at.tuwien.config.GatewayConfig; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import at.tuwien.gateway.MetadataServiceGateway; import at.tuwien.mapper.MetadataMapper; import jakarta.validation.constraints.NotNull; @@ -157,7 +157,7 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway { ViewNotFoundException, MetadataServiceException { final ResponseEntity<ViewDto> response; final String url = "/api/database/" + databaseId + "/view/" + id; - log.debug("get view info from metadata service: {}", url); + log.debug("get view info from metadata service: {}", url); try { response = internalRestTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, ViewDto.class); } catch (ResourceAccessException | HttpServerErrorException e) { @@ -185,7 +185,7 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway { MetadataServiceException { final ResponseEntity<UserDto> response; final String url = "/api/user/" + userId; - log.debug("get user info from metadata service: {}", url); + log.debug("get user info from metadata service: {}", url); try { response = internalRestTemplate.exchange(url, HttpMethod.GET, HttpEntity.EMPTY, UserDto.class); } catch (ResourceAccessException | HttpServerErrorException e) { diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/listener/DefaultListener.java b/dbrepo-data-service/services/src/main/java/at/tuwien/listener/DefaultListener.java index 929ede0a8f..aad70d3f37 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/listener/DefaultListener.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/listener/DefaultListener.java @@ -1,11 +1,11 @@ package at.tuwien.listener; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.exception.MetadataServiceException; -import at.tuwien.exception.RemoteUnavailableException; -import at.tuwien.exception.TableNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.DatabaseNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.MetadataServiceException; +import at.ac.tuwien.ifs.dbrepo.core.exception.RemoteUnavailableException; +import at.ac.tuwien.ifs.dbrepo.core.exception.TableNotFoundException; import at.tuwien.service.CacheService; import at.tuwien.service.QueueService; import com.fasterxml.jackson.core.type.TypeReference; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DataMapper.java b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DataMapper.java index 9692b48b9e..c6e14875fe 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DataMapper.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DataMapper.java @@ -1,26 +1,24 @@ package at.tuwien.mapper; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewColumnDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.query.QueryDto; -import at.tuwien.api.database.table.*; -import at.tuwien.api.database.table.columns.*; -import at.tuwien.api.database.table.constraints.ConstraintsDto; -import at.tuwien.api.database.table.constraints.foreign.ForeignKeyBriefDto; -import at.tuwien.api.database.table.constraints.foreign.ForeignKeyDto; -import at.tuwien.api.database.table.constraints.foreign.ForeignKeyReferenceDto; -import at.tuwien.api.database.table.constraints.foreign.ReferenceTypeDto; -import at.tuwien.api.database.table.constraints.primary.PrimaryKeyDto; -import at.tuwien.api.database.table.constraints.unique.UniqueDto; -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.exception.TableNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.QueryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.ConstraintsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign.ForeignKeyBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign.ForeignKeyDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign.ForeignKeyReferenceDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign.ReferenceTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.primary.PrimaryKeyDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.unique.UniqueDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.TableNotFoundException; import org.apache.hadoop.shaded.com.google.common.hash.Hashing; import org.apache.hadoop.shaded.org.apache.commons.io.FileUtils; import org.jetbrains.annotations.NotNull; import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; import java.io.File; import java.io.IOException; @@ -104,17 +102,19 @@ public interface DataMapper { default TableStatisticDto resultSetToTableStatistic(ResultSet data) throws SQLException { final TableStatisticDto statistic = TableStatisticDto.builder() - .columns(new LinkedHashMap<>()) + .columns(new LinkedList<>()) .build(); while (data.next()) { final ColumnStatisticDto columnStatistic = ColumnStatisticDto.builder() + .name(data.getString(1)) .min(data.getBigDecimal(2)) .max(data.getBigDecimal(3)) .median(data.getBigDecimal(4)) .mean(data.getBigDecimal(5)) .stdDev(data.getBigDecimal(6)) .build(); - statistic.getColumns().put(data.getString(1), columnStatistic); + statistic.getColumns() + .add(columnStatistic); } return statistic; } @@ -202,6 +202,9 @@ public interface DataMapper { .resultHash(data.getString(6)) .resultNumber(data.getLong(7)) .isPersisted(data.getBoolean(8)) + .owner(UserBriefDto.builder() + .id(UUID.fromString(data.getString(3))) + .build()) .execution(LocalDateTime.parse(data.getString(9), mariaDbFormatter) .atZone(ZoneId.of("UTC")) .toInstant()) diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MariaDbMapper.java b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MariaDbMapper.java index a080dfb163..7a0a094e16 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MariaDbMapper.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MariaDbMapper.java @@ -1,25 +1,23 @@ package at.tuwien.mapper; -import at.tuwien.api.container.image.OperatorDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.query.FilterDto; -import at.tuwien.api.database.query.FilterTypeDto; -import at.tuwien.api.database.query.OrderDto; -import at.tuwien.api.database.query.SubsetDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.TupleDeleteDto; -import at.tuwien.api.database.table.TupleDto; -import at.tuwien.api.database.table.TupleUpdateDto; -import at.tuwien.api.database.table.columns.ColumnDto; -import at.tuwien.api.database.table.columns.ColumnTypeDto; -import at.tuwien.api.database.table.columns.CreateTableColumnDto; -import at.tuwien.exception.ImageNotFoundException; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.TableMalformedException; -import at.tuwien.exception.TableNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.OperatorDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.FilterDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.FilterTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.OrderDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.SubsetDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TupleDeleteDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TupleDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TupleUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.CreateTableColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import at.tuwien.utils.MariaDbUtil; -import org.jooq.Record; import org.jooq.*; +import org.jooq.Record; import org.jooq.conf.ParamType; import org.mapstruct.Mapper; import org.mapstruct.Named; @@ -317,7 +315,7 @@ public interface MariaDbMapper { } default String tableCreateDtoToCreateTableRawQuery(String databaseName, - at.tuwien.api.database.table.internal.TableCreateDto data) { + at.ac.tuwien.ifs.dbrepo.core.api.database.table.internal.TableCreateDto data) { final StringBuilder stringBuilder = new StringBuilder("CREATE TABLE `") .append(databaseName) .append("`.`") @@ -895,15 +893,30 @@ public interface MariaDbMapper { } default String subsetDtoToRawQuery(DSLContext context, DatabaseDto database, SubsetDto data) - throws TableNotFoundException, ImageNotFoundException { - final TableDto table = tableIdToTableDto(database, data.getTableId()); - final List<Field<Object>> columns = table.getColumns() - .stream() - .filter(c -> data.getColumns().contains(c.getId())) - .map(c -> field(name(c.getInternalName()))) - .toList(); + throws TableNotFoundException, ImageNotFoundException, ViewNotFoundException { + final String datasourceName; + final List<Field<Object>> columns = switch (data.getDatasourceType()) { + case TABLE -> { + final TableDto table = tableIdToTableDto(database, data.getDatasourceId()); + datasourceName = table.getInternalName(); + yield table.getColumns() + .stream() + .filter(c -> data.getColumns().contains(c.getId())) + .map(c -> field(name(c.getInternalName()))) + .toList(); + } + case VIEW -> { + final ViewDto view = viewIdToViewDto(database, data.getDatasourceId()); + datasourceName = view.getInternalName(); + yield view.getColumns() + .stream() + .filter(c -> data.getColumns().contains(c.getId())) + .map(c -> field(name(c.getInternalName()))) + .toList(); + } + }; final SelectJoinStep<Record> query = context.select(columns) - .from(name(table.getInternalName())); + .from(name(datasourceName)); final SelectConditionStep<Record> where = subsetDtoToSelectConditions(query, database, data); final String sql; if (data.getOrder() == null) { @@ -972,4 +985,17 @@ public interface MariaDbMapper { return optional.get(); } + default ViewDto viewIdToViewDto(DatabaseDto database, UUID viewId) throws ViewNotFoundException { + final Optional<ViewDto> optional = database.getViews() + .stream() + .filter(v -> v.getId().equals(viewId)) + .findFirst(); + if (optional.isEmpty()) { + log.error("Failed to find view with id: {}", viewId); + log.trace("known view ids: {}", database.getViews().stream().map(ViewDto::getId).collect(Collectors.toList())); + throw new ViewNotFoundException("Failed to find view id: " + viewId); + } + return optional.get(); + } + } diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MetadataMapper.java b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MetadataMapper.java index 8539b00432..ff979bd088 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MetadataMapper.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MetadataMapper.java @@ -1,21 +1,20 @@ package at.tuwien.mapper; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.container.image.ImageDto; -import at.tuwien.api.database.DatabaseBriefDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewColumnDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.internal.CreateDatabaseDto; -import at.tuwien.api.database.query.QueryDto; -import at.tuwien.api.database.table.TableBriefDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.columns.ColumnDto; -import at.tuwien.api.identifier.IdentifierBriefDto; -import at.tuwien.api.identifier.IdentifierDto; -import at.tuwien.api.keycloak.TokenDto; -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.internal.CreateDatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierDto; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDto; import org.keycloak.representations.AccessTokenResponse; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -37,6 +36,12 @@ public interface MetadataMapper { }) UserDto createDatabaseDtoToPrivilegedUserDto(CreateDatabaseDto data); + @Mappings({ + @Mapping(target = "username", source = "readonlyUsername"), + @Mapping(target = "password", source = "readonlyPassword"), + }) + UserDto createDatabaseDtoToReadonlyUserDto(CreateDatabaseDto data); + DatabaseBriefDto databaseDtoToDatabaseBriefDto(DatabaseDto data); ColumnDto viewColumnDtoToColumnDto(ViewColumnDto data); diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/AccessService.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/AccessService.java index c42fc28101..71899fc081 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/AccessService.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/AccessService.java @@ -1,9 +1,9 @@ package at.tuwien.service; -import at.tuwien.api.database.AccessTypeDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.exception.DatabaseMalformedException; +import at.ac.tuwien.ifs.dbrepo.core.api.database.AccessTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.DatabaseMalformedException; import java.sql.SQLException; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/CacheService.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/CacheService.java index 208d6e755e..9424af16c2 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/CacheService.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/CacheService.java @@ -1,18 +1,30 @@ package at.tuwien.service; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.database.DatabaseAccessDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.keycloak.TokenDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseAccessDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableStatisticDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import java.sql.SQLException; import java.util.UUID; public interface CacheService { + /** + * Gets credentials for a database with given id either from the cache (if not expired) or retrieves them from the + * Metadata Service. + * + * @param id The id. + * @param forceReload If set to true, force a reload of the cached result. Otherwise, use the cached result if it is present. + * @return The credentials. + * @throws DatabaseNotFoundException The database was not found in the metadata service. + * @throws RemoteUnavailableException The remote service is not available. + * @throws MetadataServiceException The remote service returned invalid data. + */ DatabaseDto getDatabase(UUID id, Boolean forceReload) throws DatabaseNotFoundException, RemoteUnavailableException, MetadataServiceException; @@ -29,6 +41,9 @@ public interface CacheService { DatabaseDto getDatabase(UUID id) throws DatabaseNotFoundException, RemoteUnavailableException, MetadataServiceException; + TableStatisticDto getStatistic(DatabaseDto database, ViewDto view) throws TableNotFoundException, + TableMalformedException, QueryMalformedException, SQLException; + /** * Gets credentials for a container with given id either from the cache (if not expired) or retrieves them from the * Metadata Service. diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/ContainerService.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/ContainerService.java index 4f9e92ed78..f788a06eeb 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/ContainerService.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/ContainerService.java @@ -1,10 +1,10 @@ package at.tuwien.service; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.internal.CreateDatabaseDto; -import at.tuwien.exception.DatabaseMalformedException; -import at.tuwien.exception.QueryStoreCreateException; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.internal.CreateDatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.DatabaseMalformedException; +import at.ac.tuwien.ifs.dbrepo.core.exception.QueryStoreCreateException; import java.sql.SQLException; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/CredentialService.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/CredentialService.java index b1c28cf170..bb9765c810 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/CredentialService.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/CredentialService.java @@ -1,6 +1,6 @@ package at.tuwien.service; -import at.tuwien.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; public interface CredentialService { diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/DatabaseService.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/DatabaseService.java index 8f07b6bfb2..a12c8e0d4d 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/DatabaseService.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/DatabaseService.java @@ -1,11 +1,11 @@ package at.tuwien.service; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.internal.TableCreateDto; -import at.tuwien.api.user.internal.UpdateUserPasswordDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.internal.TableCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.internal.UpdateUserPasswordDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import java.sql.SQLException; import java.util.List; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/QueueService.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/QueueService.java index 1e8ba52923..e35f4029bb 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/QueueService.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/QueueService.java @@ -1,7 +1,7 @@ package at.tuwien.service; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; import java.sql.SQLException; import java.util.Map; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/StorageService.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/StorageService.java index 7ba3f93e71..0e126e27a6 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/StorageService.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/StorageService.java @@ -1,14 +1,15 @@ package at.tuwien.service; -import at.tuwien.ExportResourceDto; -import at.tuwien.exception.MalformedException; -import at.tuwien.exception.StorageNotFoundException; -import at.tuwien.exception.StorageUnavailableException; -import at.tuwien.exception.TableMalformedException; +import at.ac.tuwien.ifs.dbrepo.core.api.ExportResourceDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.MalformedException; +import at.ac.tuwien.ifs.dbrepo.core.exception.StorageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.StorageUnavailableException; +import at.ac.tuwien.ifs.dbrepo.core.exception.TableMalformedException; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; import java.io.InputStream; +import java.time.Instant; import java.util.List; public interface StorageService { @@ -47,6 +48,10 @@ public interface StorageService { */ byte[] getBytes(String bucket, String key) throws StorageUnavailableException, StorageNotFoundException; + void deleteObject(String bucket, String key); + + void deleteStaleObjects(); + /** * Loads an object of the default export bucket from the Storage Service into an export resource. * diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/SubsetService.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/SubsetService.java index 30d4baca5c..b57c2b3f10 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/SubsetService.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/SubsetService.java @@ -1,9 +1,9 @@ package at.tuwien.service; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.query.QueryDto; -import at.tuwien.api.database.query.SubsetDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.QueryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.SubsetDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; @@ -26,7 +26,7 @@ public interface SubsetService { * @throws SQLException The connection to the database could not be established. */ UUID create(DatabaseDto database, SubsetDto subset, Instant timestamp, UUID userId) - throws QueryStoreInsertException, SQLException, QueryMalformedException, TableNotFoundException, ImageNotFoundException, ViewMalformedException; + throws QueryStoreInsertException, SQLException, QueryMalformedException, TableNotFoundException, ImageNotFoundException, ViewMalformedException, ViewNotFoundException; /** * Counts the subset row count of a query of a given subset in the given database. diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/TableService.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/TableService.java index bb2b53432c..7ecc58bef8 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/TableService.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/TableService.java @@ -1,9 +1,9 @@ package at.tuwien.service; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.query.ImportDto; -import at.tuwien.api.database.table.*; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.ImportDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.*; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import java.sql.SQLException; import java.time.Instant; @@ -14,14 +14,14 @@ public interface TableService { /** * Generate table statistic for a given table. Only numerical columns are calculated. * - * @param table The table. + * @param tableName The table name. * @return The table statistic, if successful. * @throws SQLException Failed to parse SQL query, contains invalid syntax. * @throws TableMalformedException The table statistic generation was unsuccessful, likely due to a bug in the mapping. * @throws TableNotFoundException The table could not be inspected in the data database. */ - TableStatisticDto getStatistics(DatabaseDto database, TableDto table) throws SQLException, TableMalformedException, - TableNotFoundException; + TableStatisticDto getStatistics(DatabaseDto database, String tableName) throws SQLException, + TableMalformedException, TableNotFoundException; /** * Updating table description. @@ -58,13 +58,13 @@ public interface TableService { /** * Obtains the table data tuples count at time. * - * @param table The table object. + * @param tableName The table name. * @param timestamp The timestamp. * @return Number of tuples, if successful. * @throws SQLException Failed to parse SQL query, contains invalid syntax. * @throws QueryMalformedException The count query is malformed, likely due to a bug in the application. */ - Long getCount(DatabaseDto database, TableDto table, Instant timestamp) throws SQLException, + Long getCount(DatabaseDto database, String tableName, Instant timestamp) throws SQLException, QueryMalformedException; /** diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/ViewService.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/ViewService.java index 7f64f72ebe..7fb1f0bdf8 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/ViewService.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/ViewService.java @@ -1,9 +1,9 @@ package at.tuwien.service; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.ViewMalformedException; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.QueryMalformedException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ViewMalformedException; import java.sql.SQLException; import java.time.Instant; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/AccessServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/AccessServiceMariaDbImpl.java index be049663b7..fee072d633 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/AccessServiceMariaDbImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/AccessServiceMariaDbImpl.java @@ -1,9 +1,9 @@ package at.tuwien.service.impl; -import at.tuwien.api.database.AccessTypeDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.exception.DatabaseMalformedException; +import at.ac.tuwien.ifs.dbrepo.core.api.database.AccessTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.DatabaseMalformedException; import at.tuwien.mapper.MariaDbMapper; import at.tuwien.service.AccessService; import com.mchange.v2.c3p0.ComboPooledDataSource; @@ -66,8 +66,8 @@ public class AccessServiceMariaDbImpl extends DataConnector implements AccessSer } finally { dataSource.close(); } - log.info("Created access to database with internal name {} for user with id {}", database.getInternalName(), - user.getId()); + log.info("Created access to database with internal name {} for user: {}", database.getInternalName(), + user.getUsername()); } @Override diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/CacheServiceImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/CacheServiceImpl.java index 2346fe1071..65646d1ad4 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/CacheServiceImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/CacheServiceImpl.java @@ -1,25 +1,30 @@ package at.tuwien.service.impl; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.database.DatabaseAccessDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseAccessDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableStatisticDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import at.tuwien.gateway.MetadataServiceGateway; import at.tuwien.service.CacheService; +import at.tuwien.service.TableService; import com.github.benmanes.caffeine.cache.Cache; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.sql.SQLException; +import java.time.Instant; import java.util.UUID; @Log4j2 @Service public class CacheServiceImpl implements CacheService { + private final TableService tableService; private final MetadataServiceGateway gateway; private final Cache<UUID, UserDto> userCache; private final Cache<UUID, ViewDto> viewCache; @@ -27,12 +32,14 @@ public class CacheServiceImpl implements CacheService { private final Cache<UUID, DatabaseDto> databaseCache; private final Cache<UUID, ContainerDto> containerCache; private final Cache<UUID, DatabaseAccessDto> accessCache; + private final Cache<UUID, TableStatisticDto> statisticCache; @Autowired - public CacheServiceImpl(MetadataServiceGateway gateway, Cache<UUID, UserDto> userCache, + public CacheServiceImpl(TableService tableService, MetadataServiceGateway gateway, Cache<UUID, UserDto> userCache, Cache<UUID, ViewDto> viewCache, Cache<UUID, TableDto> tableCache, Cache<UUID, DatabaseAccessDto> accessCache, Cache<UUID, DatabaseDto> databaseCache, - Cache<UUID, ContainerDto> containerCache) { + Cache<UUID, ContainerDto> containerCache, Cache<UUID, TableStatisticDto> statisticCache) { + this.tableService = tableService; this.gateway = gateway; this.userCache = userCache; this.viewCache = viewCache; @@ -40,6 +47,7 @@ public class CacheServiceImpl implements CacheService { this.accessCache = accessCache; this.databaseCache = databaseCache; this.containerCache = containerCache; + this.statisticCache = statisticCache; } @Override @@ -78,6 +86,21 @@ public class CacheServiceImpl implements CacheService { return table; } + @Override + public TableStatisticDto getStatistic(DatabaseDto database, ViewDto view) throws TableNotFoundException, + TableMalformedException, QueryMalformedException, SQLException { + final TableStatisticDto cacheStatistic = statisticCache.getIfPresent(view.getId()); + if (cacheStatistic != null) { + log.trace("found view statistic with id {} in cache", view.getId()); + return cacheStatistic; + } + log.debug("view statistic with id {} not it cache (anymore): reload", view.getId()); + final TableStatisticDto statistic = tableService.getStatistics(database, view.getInternalName()); + statistic.setTotalRows(tableService.getCount(database, view.getInternalName(), Instant.now())); + statisticCache.put(view.getId(), statistic); + return statistic; + } + @Override public ContainerDto getContainer(UUID id) throws RemoteUnavailableException, MetadataServiceException, ContainerNotFoundException { @@ -144,6 +167,7 @@ public class CacheServiceImpl implements CacheService { tableCache.invalidateAll(); databaseCache.invalidateAll(); containerCache.invalidateAll(); + statisticCache.invalidateAll(); } } diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceMariaDbImpl.java index 9e35574d8d..ff14b7329d 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceMariaDbImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceMariaDbImpl.java @@ -1,12 +1,12 @@ package at.tuwien.service.impl; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.internal.CreateDatabaseDto; -import at.tuwien.api.user.UserBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.internal.CreateDatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserBriefDto; import at.tuwien.config.RabbitConfig; -import at.tuwien.exception.DatabaseMalformedException; -import at.tuwien.exception.QueryStoreCreateException; +import at.ac.tuwien.ifs.dbrepo.core.exception.DatabaseMalformedException; +import at.ac.tuwien.ifs.dbrepo.core.exception.QueryStoreCreateException; import at.tuwien.mapper.MariaDbMapper; import at.tuwien.service.ContainerService; import com.mchange.v2.c3p0.ComboPooledDataSource; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/CredentialServiceImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/CredentialServiceImpl.java index 7cf7d1eff4..cbe1912b3a 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/CredentialServiceImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/CredentialServiceImpl.java @@ -1,6 +1,6 @@ package at.tuwien.service.impl; -import at.tuwien.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; import at.tuwien.gateway.KeycloakGateway; import at.tuwien.service.CredentialService; import com.github.benmanes.caffeine.cache.Cache; @@ -8,6 +8,8 @@ import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.time.Instant; + @Log4j2 @Service public class CredentialServiceImpl implements CredentialService { @@ -25,10 +27,16 @@ public class CredentialServiceImpl implements CredentialService { public TokenDto getAccessToken(String username, String password) { final TokenDto cacheAccessToken = tokenCache.getIfPresent(username); if (cacheAccessToken != null) { - log.trace("found access token for user with username {} in cache", username); - return cacheAccessToken; + final Instant expiry = Instant.ofEpochSecond(cacheAccessToken.getExpiresIn()); + if (!expiry.isBefore(Instant.now())) { + log.trace("found access token for user with username {} in cache", username); + return cacheAccessToken; + } else { + log.debug("access token for user with username {} expired in cache: request new", username); + } + } else { + log.debug("access token for user with username {} not it cache (anymore): request new", username); } - log.debug("access token for user with username {} not it cache (anymore): request new", username); final TokenDto token = keycloakGateway.obtainUserToken(username, password); tokenCache.put(username, token); return token; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/DataConnector.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/DataConnector.java index 6e6e316b5a..366afd92a3 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/DataConnector.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/DataConnector.java @@ -1,7 +1,7 @@ package at.tuwien.service.impl; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; import com.mchange.v2.c3p0.ComboPooledDataSource; import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Service; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceMariaDbImpl.java index 846fa86a4c..c6a0d61595 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceMariaDbImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceMariaDbImpl.java @@ -1,12 +1,12 @@ package at.tuwien.service.impl; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.constraints.unique.UniqueDto; -import at.tuwien.api.database.table.internal.TableCreateDto; -import at.tuwien.api.user.internal.UpdateUserPasswordDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.unique.UniqueDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.internal.TableCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.internal.UpdateUserPasswordDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import at.tuwien.mapper.DataMapper; import at.tuwien.mapper.MariaDbMapper; import at.tuwien.mapper.MetadataMapper; @@ -48,7 +48,7 @@ public class DatabaseServiceMariaDbImpl extends DataConnector implements Databas try { /* obtain only view metadata */ long start = System.currentTimeMillis(); - final PreparedStatement statement1 = connection.prepareStatement(mariaDbMapper.databaseViewSelectRawQuery()); + final PreparedStatement statement1 = connection.prepareStatement(mariaDbMapper.databaseTableSelectRawQuery()); statement1.setString(1, database.getInternalName()); statement1.setString(2, viewName); log.trace("1={}, 2={}", database.getInternalName(), viewName); diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/QueueServiceRabbitMqImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/QueueServiceRabbitMqImpl.java index 07b889d536..541f68e951 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/QueueServiceRabbitMqImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/QueueServiceRabbitMqImpl.java @@ -1,8 +1,8 @@ package at.tuwien.service.impl; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.columns.ColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnDto; import at.tuwien.mapper.DataMapper; import at.tuwien.mapper.MetadataMapper; import at.tuwien.service.QueueService; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/StorageServiceS3Impl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/StorageServiceS3Impl.java index 2d421ed0f3..bb75d7bac2 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/StorageServiceS3Impl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/StorageServiceS3Impl.java @@ -1,11 +1,11 @@ package at.tuwien.service.impl; -import at.tuwien.ExportResourceDto; +import at.ac.tuwien.ifs.dbrepo.core.api.ExportResourceDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.MalformedException; +import at.ac.tuwien.ifs.dbrepo.core.exception.StorageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.StorageUnavailableException; +import at.ac.tuwien.ifs.dbrepo.core.exception.TableMalformedException; import at.tuwien.config.S3Config; -import at.tuwien.exception.MalformedException; -import at.tuwien.exception.StorageNotFoundException; -import at.tuwien.exception.StorageUnavailableException; -import at.tuwien.exception.TableMalformedException; import at.tuwien.service.StorageService; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.RandomStringUtils; @@ -17,13 +17,12 @@ import org.springframework.core.io.InputStreamResource; import org.springframework.stereotype.Service; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.services.s3.S3Client; -import software.amazon.awssdk.services.s3.model.GetObjectRequest; -import software.amazon.awssdk.services.s3.model.NoSuchKeyException; -import software.amazon.awssdk.services.s3.model.PutObjectRequest; -import software.amazon.awssdk.services.s3.model.S3Exception; +import software.amazon.awssdk.services.s3.model.*; import java.io.*; import java.nio.charset.Charset; +import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; @@ -91,6 +90,30 @@ public class StorageServiceS3Impl implements StorageService { } } + @Override + public void deleteObject(String bucket, String key) { + log.trace("delete object with key {} from bucket: {}", key, bucket); + s3Client.deleteObject(DeleteObjectRequest.builder() + .bucket(bucket) + .key(key) + .build()); + } + + @Override + public void deleteStaleObjects() { + log.trace("list stale objects in bucket: {}", s3Config.getS3Bucket()); + final List<String> keys = s3Client.listObjects(ListObjectsRequest.builder() + .bucket(s3Config.getS3Bucket()) + .build()) + .contents() + .stream() + .filter(o -> o.lastModified().isBefore(Instant.now().minus(s3Config.getMaxAge(), ChronoUnit.SECONDS))) + .map(S3Object::key) + .toList(); + keys.forEach(key -> deleteObject(s3Config.getS3Bucket(), key)); + log.info("Deleted {} stale object(s) in bucket: {}", keys.size(), s3Config.getS3Bucket()); + } + @Override public ExportResourceDto getResource(String key) throws StorageNotFoundException, StorageUnavailableException { return getResource(s3Config.getS3Bucket(), key); diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/SubsetServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/SubsetServiceMariaDbImpl.java index 274654db63..bfd52d5d50 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/SubsetServiceMariaDbImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/SubsetServiceMariaDbImpl.java @@ -1,14 +1,15 @@ package at.tuwien.service.impl; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.query.QueryDto; -import at.tuwien.api.database.query.SubsetDto; -import at.tuwien.api.identifier.IdentifierBriefDto; -import at.tuwien.api.identifier.IdentifierTypeDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.QueryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.SubsetDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import at.tuwien.gateway.MetadataServiceGateway; import at.tuwien.mapper.DataMapper; import at.tuwien.mapper.MariaDbMapper; +import at.tuwien.mapper.MetadataMapper; import at.tuwien.service.SubsetService; import com.mchange.v2.c3p0.ComboPooledDataSource; import lombok.extern.log4j.Log4j2; @@ -34,15 +35,18 @@ public class SubsetServiceMariaDbImpl extends DataConnector implements SubsetSer private final DataMapper dataMapper; private final SparkSession sparkSession; private final MariaDbMapper mariaDbMapper; + private final MetadataMapper metadataMapper; private final MetadataServiceGateway metadataServiceGateway; @Autowired public SubsetServiceMariaDbImpl(DSLContext context, DataMapper dataMapper, MariaDbMapper mariaDbMapper, - SparkSession sparkSession, MetadataServiceGateway metadataServiceGateway) { + SparkSession sparkSession, MetadataMapper metadataMapper, + MetadataServiceGateway metadataServiceGateway) { this.context = context; this.dataMapper = dataMapper; this.sparkSession = sparkSession; this.mariaDbMapper = mariaDbMapper; + this.metadataMapper = metadataMapper; this.metadataServiceGateway = metadataServiceGateway; } @@ -70,7 +74,7 @@ public class SubsetServiceMariaDbImpl extends DataConnector implements SubsetSer @Override public UUID create(DatabaseDto database, SubsetDto subset, Instant timestamp, UUID userId) throws QueryStoreInsertException, SQLException, QueryMalformedException, TableNotFoundException, - ImageNotFoundException, ViewMalformedException { + ImageNotFoundException, ViewMalformedException, ViewNotFoundException { final String statement = mariaDbMapper.subsetDtoToRawQuery(context, database, subset); return storeQuery(database, statement, timestamp, userId); } @@ -134,8 +138,8 @@ public class SubsetServiceMariaDbImpl extends DataConnector implements SubsetSer } @Override - public QueryDto findById(DatabaseDto database, UUID queryId) throws QueryNotFoundException, - SQLException, RemoteUnavailableException, DatabaseNotFoundException, MetadataServiceException { + public QueryDto findById(DatabaseDto database, UUID queryId) throws QueryNotFoundException, SQLException, + UserNotFoundException, RemoteUnavailableException, MetadataServiceException { final ComboPooledDataSource dataSource = getDataSource(database); final Connection connection = dataSource.getConnection(); try { @@ -148,7 +152,8 @@ public class SubsetServiceMariaDbImpl extends DataConnector implements SubsetSer throw new QueryNotFoundException("Failed to find query"); } final QueryDto query = dataMapper.resultSetToQueryDto(resultSet); - query.setOwner(database.getOwner()); + query.setOwner(metadataMapper.userDtoToUserBriefDto(metadataServiceGateway.getUserById(query.getOwner() + .getId()))); query.setDatabaseId(database.getId()); return query; } catch (SQLException e) { diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/TableServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/TableServiceMariaDbImpl.java index 4ca226ffde..8e6e6acab3 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/TableServiceMariaDbImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/TableServiceMariaDbImpl.java @@ -1,12 +1,12 @@ package at.tuwien.service.impl; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.query.ImportDto; -import at.tuwien.api.database.table.*; -import at.tuwien.api.database.table.columns.ColumnDto; -import at.tuwien.api.database.table.columns.ColumnStatisticDto; -import at.tuwien.api.database.table.columns.ColumnTypeDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.ImportDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnStatisticDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import at.tuwien.mapper.DataMapper; import at.tuwien.mapper.MariaDbMapper; import at.tuwien.service.DatabaseService; @@ -51,7 +51,7 @@ public class TableServiceMariaDbImpl extends DataConnector implements TableServi } @Override - public TableStatisticDto getStatistics(DatabaseDto database, TableDto table) throws SQLException, TableMalformedException, + public TableStatisticDto getStatistics(DatabaseDto database, String tableName) throws SQLException, TableMalformedException, TableNotFoundException { final ComboPooledDataSource dataSource = getDataSource(database); final Connection connection = dataSource.getConnection(); @@ -59,27 +59,30 @@ public class TableServiceMariaDbImpl extends DataConnector implements TableServi try { /* obtain statistic */ final long start = System.currentTimeMillis(); - final String query = mariaDbMapper.tableColumnStatisticsSelectRawQuery(table.getColumns(), table.getInternalName()); + final TableDto tmpTable = databaseService.inspectTable(database, tableName); + final String query = mariaDbMapper.tableColumnStatisticsSelectRawQuery(tmpTable.getColumns(), tableName); if (query == null) { - log.debug("table {}.{} does not have columns that can be analysed for statistical properties", database.getInternalName(), table.getInternalName()); - statistic = null; - } else { - final ResultSet resultSet = connection.prepareStatement(query) - .executeQuery(); - log.trace("executed statement in {} ms", System.currentTimeMillis() - start); - statistic = dataMapper.resultSetToTableStatistic(resultSet); - final TableDto tmpTable = databaseService.inspectTable(database, table.getInternalName()); - statistic.setAvgRowLength(tmpTable.getAvgRowLength()); - statistic.setDataLength(tmpTable.getDataLength()); - statistic.setMaxDataLength(tmpTable.getMaxDataLength()); - statistic.setRows(tmpTable.getNumRows()); - /* add to statistic dto */ - table.getColumns() - .stream() - .filter(column -> !MariaDbUtil.numericDataTypes.contains(column.getColumnType())) - .forEach(column -> statistic.getColumns().put(column.getInternalName(), new ColumnStatisticDto())); - log.info("Obtained statistics for the table and {} column(s)", statistic.getColumns().size()); + log.debug("table {}.{} does not have columns that can be analysed for statistical properties", database.getInternalName(), tableName); + return null; } + final ResultSet resultSet = connection.prepareStatement(query) + .executeQuery(); + statistic = dataMapper.resultSetToTableStatistic(resultSet); + statistic.setTotalColumns(Long.parseLong("" + tmpTable.getColumns() + .size())); + log.trace("executed statement in {} ms", System.currentTimeMillis() - start); + statistic.setAvgRowLength(tmpTable.getAvgRowLength()); + statistic.setDataLength(tmpTable.getDataLength()); + statistic.setMaxDataLength(tmpTable.getMaxDataLength()); + statistic.setTotalRows(tmpTable.getNumRows()); + /* add to statistic dto */ + tmpTable.getColumns() + .stream() + .filter(column -> !MariaDbUtil.numericDataTypes.contains(column.getColumnType())) + .forEach(column -> ColumnStatisticDto.builder() + .name(column.getInternalName()) + .build()); + log.info("Obtained statistics for the table and {} column(s)", statistic.getColumns().size()); } catch (SQLException e) { connection.rollback(); log.error("Failed to obtain column statistics: {}", e.getMessage()); @@ -168,7 +171,7 @@ public class TableServiceMariaDbImpl extends DataConnector implements TableServi } @Override - public Long getCount(DatabaseDto database, TableDto table, Instant timestamp) throws SQLException, + public Long getCount(DatabaseDto database, String tableName, Instant timestamp) throws SQLException, QueryMalformedException { final ComboPooledDataSource dataSource = getDataSource(database); final Connection connection = dataSource.getConnection(); @@ -177,19 +180,19 @@ public class TableServiceMariaDbImpl extends DataConnector implements TableServi /* find table data */ final long start = System.currentTimeMillis(); final ResultSet resultSet = connection.prepareStatement(mariaDbMapper.selectCountRawQuery( - database.getInternalName(), table.getInternalName(), timestamp)) + database.getInternalName(), tableName, timestamp)) .executeQuery(); log.trace("executed statement in {} ms", System.currentTimeMillis() - start); queryResult = mariaDbMapper.resultSetToNumber(resultSet); connection.commit(); } catch (SQLException e) { connection.rollback(); - log.error("Failed to find row count from table {}.{}: {}", database, table.getInternalName(), e.getMessage()); - throw new QueryMalformedException("Failed to find row count from table " + database + "." + table.getInternalName() + ": " + e.getMessage(), e); + log.error("Failed to find row count from table {}.{}: {}", database, tableName, e.getMessage()); + throw new QueryMalformedException("Failed to find row count from table " + database + "." + tableName + ": " + e.getMessage(), e); } finally { dataSource.close(); } - log.info("Find row count from table {}.{}", database.getInternalName(), table.getInternalName()); + log.info("Find row count from table {}.{}", database.getInternalName(), tableName); return queryResult; } diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ViewServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ViewServiceMariaDbImpl.java index c1ba33ae4a..0ef62bb025 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ViewServiceMariaDbImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ViewServiceMariaDbImpl.java @@ -1,9 +1,9 @@ package at.tuwien.service.impl; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.exception.QueryMalformedException; -import at.tuwien.exception.ViewMalformedException; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.QueryMalformedException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ViewMalformedException; import at.tuwien.mapper.MariaDbMapper; import at.tuwien.service.ViewService; import com.mchange.v2.c3p0.ComboPooledDataSource; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/timer/StaleObjectTimer.java b/dbrepo-data-service/services/src/main/java/at/tuwien/timer/StaleObjectTimer.java new file mode 100644 index 0000000000..de30299f3d --- /dev/null +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/timer/StaleObjectTimer.java @@ -0,0 +1,25 @@ +package at.tuwien.timer; + +import at.tuwien.service.StorageService; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +@Log4j2 +@Component +public class StaleObjectTimer { + + private final StorageService storageService; + + @Autowired + public StaleObjectTimer(StorageService storageService) { + this.storageService = storageService; + } + + @Scheduled(cron = "${dbrepo.s3.cron}") + public void deleteStaleObjects() { + storageService.deleteStaleObjects(); + } + +} diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/utils/MariaDbUtil.java b/dbrepo-data-service/services/src/main/java/at/tuwien/utils/MariaDbUtil.java index a917be6d46..6d831d8d11 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/utils/MariaDbUtil.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/utils/MariaDbUtil.java @@ -1,6 +1,6 @@ package at.tuwien.utils; -import at.tuwien.api.database.table.columns.ColumnTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnTypeDto; import java.util.List; diff --git a/dbrepo-gateway-service/dbrepo.conf b/dbrepo-gateway-service/dbrepo.conf index f181fdf7a7..fe98534bd8 100644 --- a/dbrepo-gateway-service/dbrepo.conf +++ b/dbrepo-gateway-service/dbrepo.conf @@ -12,62 +12,31 @@ proxy_busy_buffers_size 256k; resolver 127.0.0.11 valid=30s; # docker dns -upstream broker { - server broker-service:15672; -} - -upstream analyse { - server analyse-service:8080; -} - -upstream data { - server data-service:8080; -} - -upstream metadata { - server metadata-service:8080; -} - -upstream search { - server search-service:8080; -} - -upstream ui { - server ui:3000; -} - -upstream dashboard-service { - server dashboard-service:3000; -} - -upstream auth-service { - server auth-service:8080; -} - server { listen 8080 default_server; server_name _; - location /dashboard { + location /dashboard/ { rewrite ^/dashboard/(.*) /$1 break; - proxy_set_header Host $host; + proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://dashboard-service; + proxy_pass http://dashboard-ui:3000; proxy_read_timeout 90; } # Proxy Grafana Live WebSocket connections. - location /dashboard/api/live { - proxy_set_header Host $host; + location /dashboard/api/live/ { + rewrite ^/dashboard/(.*) /$1 break; + proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_http_version 1.1; - proxy_pass http://dashboard-service; + proxy_pass http://dashboard-ui:3000; proxy_read_timeout 90; } @@ -77,7 +46,7 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://auth-service; + proxy_pass http://auth-service:8080; proxy_read_timeout 90; } @@ -87,7 +56,7 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://auth-service; + proxy_pass http://auth-service:8080; proxy_read_timeout 90; } @@ -96,7 +65,25 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://search; + proxy_pass http://search-service:8080; + proxy_read_timeout 90; + } + + location /api/datasource { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://dashboard-service:8080; + proxy_read_timeout 90; + } + + location /api/dashboard { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://dashboard-service:8080; proxy_read_timeout 90; } @@ -106,7 +93,7 @@ server { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; - proxy_pass http://data; + proxy_pass http://data-service:8080; proxy_read_timeout 90; # Disable request and response buffering proxy_request_buffering off; @@ -119,25 +106,25 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://analyse; + proxy_pass http://analyse-service:8080; proxy_read_timeout 90; } - location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/table/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/(data|history)" { + location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/table/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/(data|statistic|history)" { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://data; + proxy_pass http://data-service:8080; proxy_read_timeout 90; } - location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/view/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/data" { + location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/view/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/(data|statistic)" { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://data; + proxy_pass http://data-service:8080; proxy_read_timeout 90; } @@ -146,7 +133,7 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://metadata; + proxy_pass http://metadata-service:8080; proxy_read_timeout 90; } @@ -155,7 +142,7 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://data; + proxy_pass http://data-service:8080; proxy_read_timeout 600; } @@ -164,7 +151,7 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://metadata; + proxy_pass http://metadata-service:8080; proxy_read_timeout 90; } @@ -173,7 +160,7 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://metadata; + proxy_pass http://metadata-service:8080; proxy_read_timeout 90; } @@ -183,7 +170,7 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://metadata; + proxy_pass http://metadata-service:8080; proxy_read_timeout 90; } @@ -192,7 +179,7 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://ui; + proxy_pass http://ui:3000; proxy_read_timeout 90; } } diff --git a/dbrepo-grafana-service/.dockerignore b/dbrepo-grafana-service/.dockerignore new file mode 100644 index 0000000000..fcdfe8de55 --- /dev/null +++ b/dbrepo-grafana-service/.dockerignore @@ -0,0 +1 @@ +rest-service/src/main/resources/*.csv \ No newline at end of file diff --git a/dbrepo-grafana-service/.gitignore b/dbrepo-grafana-service/.gitignore new file mode 100644 index 0000000000..d39a47ee0f --- /dev/null +++ b/dbrepo-grafana-service/.gitignore @@ -0,0 +1,43 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### Environment ### +.env + +### Generated ### +ready +mapping.xml +schema.xsd +*.versionsBackup +metrics.txt + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/dbrepo-grafana-service/.mvn/wrapper/MavenWrapperDownloader.java b/dbrepo-grafana-service/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000000..a45eb6ba26 --- /dev/null +++ b/dbrepo-grafana-service/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,118 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.6"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if (mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if (mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if (!outputFile.getParentFile().exists()) { + if (!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/dbrepo-grafana-service/.mvn/wrapper/maven-wrapper.jar b/dbrepo-grafana-service/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054 GIT binary patch literal 50710 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 literal 0 HcmV?d00001 diff --git a/dbrepo-grafana-service/.mvn/wrapper/maven-wrapper.properties b/dbrepo-grafana-service/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000..642d572ce9 --- /dev/null +++ b/dbrepo-grafana-service/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/dbrepo-grafana-service/Dockerfile b/dbrepo-grafana-service/Dockerfile new file mode 100644 index 0000000000..b01544827f --- /dev/null +++ b/dbrepo-grafana-service/Dockerfile @@ -0,0 +1,31 @@ +###### FIRST STAGE ###### +FROM dbrepo-metadata-service:build AS dependency +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> + +FROM maven:3-openjdk-17 AS build +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> + +COPY ./pom.xml ./ + +RUN mvn -fn -B dependency:go-offline + +COPY ./rest-service ./rest-service +COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien + +# Make sure it compiles +RUN mvn clean package -DskipTests + +###### SECOND STAGE ###### +FROM eclipse-temurin:17-jdk AS runtime +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> + +WORKDIR /app + +USER 65534 + +COPY --from=build --chown=65534 ./rest-service/target/dbrepo-grafana-service-rest-service-*.jar ./grafana-service.jar + +# non-root port +EXPOSE 8080 + +ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./grafana-service.jar"] \ No newline at end of file diff --git a/dbrepo-grafana-service/README.md b/dbrepo-grafana-service/README.md new file mode 100644 index 0000000000..7160f7bbbc --- /dev/null +++ b/dbrepo-grafana-service/README.md @@ -0,0 +1,38 @@ +# Metadata Service + +## Test + +Run all unit and integration tests and create an HTML+TXT coverage report located in the `report` module: + +```bash +mvn -pl rest-service clean test verify +``` + +Or run only unit tests +in [`KeycloakGatewayUnitTest.java`](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/blob/master/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java): + +```bash +mvn -pl rest-service -Dtest="KeycloakGatewayUnitTest" clean test +``` + +## Run + +Start the Metadata Database before and then run the Metadata Service: + +```bash +mvn -pl rest-service clean spring-boot:run -Dspring-boot.run.profiles=local +``` + +### Endpoints + +#### Actuator + +- Info: http://localhost:9099/actuator/info +- Health: http://localhost:9099/actuator/health + - Readiness: http://localhost:9099/actuator/health/readiness + - Liveness: http://localhost:9099/actuator/health/liveness +- Prometheus: http://localhost:9099/actuator/prometheus + +#### OpenAPI + +- OpenAPI v3 as .yaml: http://localhost:9099/v3/api-docs.yaml \ No newline at end of file diff --git a/dbrepo-grafana-service/mvnw b/dbrepo-grafana-service/mvnw new file mode 100755 index 0000000000..a16b5431b4 --- /dev/null +++ b/dbrepo-grafana-service/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/dbrepo-grafana-service/mvnw.cmd b/dbrepo-grafana-service/mvnw.cmd new file mode 100644 index 0000000000..c8d43372c9 --- /dev/null +++ b/dbrepo-grafana-service/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/dbrepo-grafana-service/pom.xml b/dbrepo-grafana-service/pom.xml new file mode 100644 index 0000000000..763aa408f0 --- /dev/null +++ b/dbrepo-grafana-service/pom.xml @@ -0,0 +1,299 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-parent</artifactId> + <version>3.0.13</version> + </parent> + + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-grafana-service</artifactId> + <name>dbrepo-grafana-service</name> + <version>1.4.4</version> + + <description>Service that creates automated grafana dashboards</description> + + <packaging>pom</packaging> + <modules> + <module>rest-service</module> + </modules> + + <properties> + <java.version>17</java.version> + <spring-cloud.version>4.0.2</spring-cloud.version> + <mapstruct.version>1.5.5.Final</mapstruct.version> + <rabbitmq.version>5.20.0</rabbitmq.version> + <jackson-datatype.version>2.15.0</jackson-datatype.version> + <commons-io.version>2.15.0</commons-io.version> + <commons-validator.version>1.8.0</commons-validator.version> + <jacoco.version>0.8.11</jacoco.version> + <jwt.version>4.3.0</jwt.version> + <opencsv.version>5.7.1</opencsv.version> + <super-csv.version>2.4.0</super-csv.version> + <jsql.version>4.6</jsql.version> + <springdoc-openapi.version>2.3.0</springdoc-openapi.version> + <hsqldb.version>2.7.2</hsqldb.version> + <testcontainers.version>1.19.1</testcontainers.version> + <jackson.version>2.15.2</jackson.version> + <c3p0.version>0.9.5.5</c3p0.version> + <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version> + <aws-s3.version>2.25.23</aws-s3.version> + <minio.version>8.5.7</minio.version> + <apache-commons.version>1.10.0</apache-commons.version> + </properties> + + <dependencies> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-validation</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-security</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.security</groupId> + <artifactId>spring-security-test</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-starter-bootstrap</artifactId> + <version>${spring-cloud.version}</version> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-data-jpa</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-actuator</artifactId> + </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-text</artifactId> + <version>${apache-commons.version}</version> + + </dependency> + <!-- Caching --> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-data-redis</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-cache</artifactId> + </dependency> + <dependency> + <groupId>redis.clients</groupId> + <artifactId>jedis</artifactId> + </dependency> + <!-- Open API --> + <dependency> + <groupId>org.springdoc</groupId> + <artifactId>springdoc-openapi-starter-webmvc-api</artifactId> + <version>${springdoc-openapi.version}</version> + </dependency> + <!-- Data Source --> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + </dependency> + <dependency> + <groupId>com.mchange</groupId> + <artifactId>c3p0</artifactId> + <version>${c3p0.version}</version> + </dependency> + <dependency> + <groupId>org.hibernate.orm</groupId> + <artifactId>hibernate-c3p0</artifactId> + <version>${c3p0-hibernate.version}</version> + </dependency> + <!-- Monitoring --> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-aop</artifactId> + </dependency> + <dependency> + <groupId>io.micrometer</groupId> + <artifactId>micrometer-registry-prometheus</artifactId> + <version>${micrometer.version}</version> + </dependency> + <dependency> + <groupId>io.micrometer</groupId> + <artifactId>micrometer-observation-test</artifactId> + <version>${micrometer.version}</version> + <scope>test</scope> + </dependency> + <!-- IDE --> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <scope>compile</scope> + </dependency> + <!-- Mapping --> + <dependency> + <groupId>org.mapstruct</groupId> + <artifactId>mapstruct-processor</artifactId> + <version>${mapstruct.version}</version> + <optional>true</optional> + </dependency> + <dependency> + <groupId>org.mapstruct</groupId> + <artifactId>mapstruct</artifactId> + <version>${mapstruct.version}</version> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-jsr310</artifactId> + <version>${jackson-datatype.version}</version> + </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + <version>${commons-io.version}</version> + </dependency> + <dependency> + <groupId>commons-validator</groupId> + <artifactId>commons-validator</artifactId> + <version>${commons-validator.version}</version> + </dependency> + <!-- Authentication --> + <dependency> + <groupId>com.auth0</groupId> + <artifactId>java-jwt</artifactId> + <version>${jwt.version}</version> + </dependency> + <!-- DTOs --> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-api</artifactId> + <version>${project.version}</version> + </dependency> + <!-- AMPQ --> + <dependency> + <groupId>org.springframework.amqp</groupId> + <artifactId>spring-rabbit</artifactId> + </dependency> + <dependency> + <groupId>com.rabbitmq</groupId> + <artifactId>amqp-client</artifactId> + <version>${rabbitmq.version}</version> + </dependency> + <!-- Storage --> + <dependency> + <groupId>software.amazon.awssdk</groupId> + <artifactId>s3</artifactId> + <version>${aws-s3.version}</version> + </dependency> + <!-- Testing --> + <dependency> + <groupId>com.github.jsqlparser</groupId> + <artifactId>jsqlparser</artifactId> + <version>${jsql.version}</version> + </dependency> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-test</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-test</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>rabbitmq</artifactId> + <version>${testcontainers.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>junit-jupiter</artifactId> + <version>${testcontainers.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>mariadb</artifactId> + <version>${testcontainers.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>minio</artifactId> + <version>${testcontainers.version}</version> + </dependency> + <dependency> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>${jacoco.version}</version> + </dependency> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpclient</artifactId> + </dependency> + </dependencies> + <build> + <resources> + <resource> + <directory>${basedir}/src/main/resources</directory> + <filtering>true</filtering> + <includes> + <include>**/application*.yml</include> + <include>**/rdf/*</include> + <include>**/templates/*.txt</include> + <include>**/templates/*.xml</include> + </includes> + </resource> + </resources> + <plugins> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>${jacoco.version}</version> + <configuration> + <excludes> + <exclude>at/tuwien/utils/**/*</exclude> + <exclude>at/tuwien/seeder/**/*</exclude> + <exclude>at/tuwien/mapper/**/*</exclude> + <exclude>at/tuwien/handlers/**/*</exclude> + <exclude>at/tuwien/exception/**/*</exclude> + <exclude>at/tuwien/converters/**/*</exclude> + <exclude>at/tuwien/utils/**/*</exclude> + <exclude>at/tuwien/config/**/*</exclude> + <exclude>at/tuwien/auth/**/*</exclude> + <exclude>at/tuwien/gateway/impl/ApiTemplateInterceptorImpl.class</exclude> + <exclude>**/testcontainers.properties</exclude> + <exclude>**/HibernateConnector.class</exclude> + <exclude>**/DbrepoMetadataServiceApplication.class</exclude> + </excludes> + </configuration> + <executions> + <execution> + <id>default-prepare-agent</id> + <goals> + <goal>prepare-agent</goal> + </goals> + </execution> + <execution> + <id>report</id> + <phase>verify</phase> + <goals> + <goal>report</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + +</project> diff --git a/dbrepo-grafana-service/rest-service/pom.xml b/dbrepo-grafana-service/rest-service/pom.xml new file mode 100644 index 0000000000..ace7de5a1c --- /dev/null +++ b/dbrepo-grafana-service/rest-service/pom.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>dbrepo-grafana-service</artifactId> + <groupId>at.tuwien</groupId> + <version>1.4.4</version> + </parent> + + <artifactId>dbrepo-grafana-service-rest-service</artifactId> + <name>dbrepo-grafana-service-rest</name> + <version>1.4.4</version> + + <dependencies> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>repackage</goal><!-- to make it exuteable with $ java -jar ./app.jar --> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + +</project> \ No newline at end of file diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/DbrepoGrafanaServiceApplication.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/DbrepoGrafanaServiceApplication.java new file mode 100644 index 0000000000..79c50fa5ef --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/DbrepoGrafanaServiceApplication.java @@ -0,0 +1,13 @@ +package at.tuwien; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cache.annotation.EnableCaching; + +@SpringBootApplication +@EnableCaching +public class DbrepoGrafanaServiceApplication { + public static void main(String[] args) { + SpringApplication.run(DbrepoGrafanaServiceApplication.class, args); + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/auth/AuthTokenFilter.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/auth/AuthTokenFilter.java new file mode 100644 index 0000000000..46ec0e6a24 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/auth/AuthTokenFilter.java @@ -0,0 +1,96 @@ +package at.tuwien.auth; + +import at.tuwien.api.auth.RealmAccessDto; +import at.tuwien.api.user.UserDetailsDto; +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTVerifier; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.interfaces.DecodedJWT; +import com.auth0.jwt.interfaces.Verification; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; +import org.springframework.util.StringUtils; +import org.springframework.web.filter.OncePerRequestFilter; + +import java.io.IOException; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.X509EncodedKeySpec; +import java.util.Arrays; +import java.util.Base64; +import java.util.stream.Collectors; + +@Slf4j +public class AuthTokenFilter extends OncePerRequestFilter { + + @Value("${dbrepo.jwt.public_key}") + private String publicKey; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws ServletException, IOException { + final String jwt = parseJwt(request); + if (jwt != null) { + final UserDetails userDetails = verifyJwt(jwt); + final UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( + userDetails, null, userDetails.getAuthorities()); + authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); + + SecurityContextHolder.getContext().setAuthentication(authentication); + } + filterChain.doFilter(request, response); + } + + public UserDetails verifyJwt(String token) throws ServletException { + final KeyFactory kf; + try { + kf = KeyFactory.getInstance("RSA"); + } catch (NoSuchAlgorithmException e) { + log.error("Failed to find RSA algorithm"); + throw new ServletException("Failed to find RSA algorithm", e); + } + final X509EncodedKeySpec keySpecX509 = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey)); + final RSAPublicKey pubKey; + try { + pubKey = (RSAPublicKey) kf.generatePublic(keySpecX509); + } catch (InvalidKeySpecException e) { + log.error("Provided public key is invalid"); + throw new ServletException("Provided public key is invalid", e); + } + final Algorithm algorithm = Algorithm.RSA256(pubKey, null); + final Verification verification = JWT.require(algorithm); + final JWTVerifier verifier = verification.build(); + final DecodedJWT jwt = verifier.verify(token); + final RealmAccessDto realmAccess = jwt.getClaim("realm_access").as(RealmAccessDto.class); + return UserDetailsDto.builder() + .id(jwt.getSubject()) + .username(jwt.getClaim("client_id").asString()) + .authorities(Arrays.stream(realmAccess.getRoles()).map(SimpleGrantedAuthority::new).collect(Collectors.toList())) + .build(); + } + + /** + * Parses the token from the HTTP header of the request + * + * @param request The request. + * @return The token. + */ + public String parseJwt(HttpServletRequest request) { + String headerAuth = request.getHeader("Authorization"); + if (StringUtils.hasText(headerAuth) && headerAuth.startsWith("Bearer ")) { + return headerAuth.substring(7, headerAuth.length()); + } + return null; + } +} \ No newline at end of file diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/auth/BasicAuthenticationProvider.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/auth/BasicAuthenticationProvider.java new file mode 100644 index 0000000000..6cd55e9ef7 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/auth/BasicAuthenticationProvider.java @@ -0,0 +1,60 @@ +package at.tuwien.auth; + +import at.tuwien.api.keycloak.TokenDto; +import at.tuwien.api.user.UserDetailsDto; +import at.tuwien.config.GatewayConfig; +import at.tuwien.exception.ServiceConnectionException; +import at.tuwien.exception.ServiceException; +import at.tuwien.gateway.KeycloakGateway; +import jakarta.servlet.ServletException; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Log4j2 +@Component +public class BasicAuthenticationProvider implements AuthenticationManager { + + private final GatewayConfig gatewayConfig; + private final AuthTokenFilter authTokenFilter; + private final KeycloakGateway keycloakGateway; + + @Autowired + public BasicAuthenticationProvider(GatewayConfig gatewayConfig, AuthTokenFilter authTokenFilter, + KeycloakGateway keycloakGateway) { + this.gatewayConfig = gatewayConfig; + this.authTokenFilter = authTokenFilter; + this.keycloakGateway = keycloakGateway; + } + + @Override + public Authentication authenticate(Authentication auth) throws AuthenticationException { + if (auth.getName().equals(gatewayConfig.getAdminUsername()) + && auth.getCredentials().toString().equals(gatewayConfig.getAdminPassword())) { + log.trace("current user is {}: skip authentication", gatewayConfig.getAdminUsername()); + final UserDetails userDetails = UserDetailsDto.builder() + .username(auth.getName()) + .authorities(List.of(new SimpleGrantedAuthority("admin"))) + .build(); + return new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); + } + log.trace("current user is {}: begin authentication", auth.getName()); + try { + final TokenDto tokenDto = keycloakGateway.obtainUserToken(auth.getName(), auth.getCredentials().toString()); + final UserDetails userDetails = authTokenFilter.verifyJwt(tokenDto.getAccessToken()); + return new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); + } catch (ServletException | ServiceConnectionException | ServiceException e) { + throw new BadCredentialsException("Failed to authenticate with authentication service", e); + } + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/config/CacheConfig.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/config/CacheConfig.java new file mode 100644 index 0000000000..dafb08dafc --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/config/CacheConfig.java @@ -0,0 +1,40 @@ +package at.tuwien.config; + +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +import java.time.Duration; + + +@Configuration +@EnableCaching +public class CacheConfig { + + @Bean + public CacheManager cacheManager(RedisConnectionFactory connectionFactory) { + return RedisCacheManager.RedisCacheManagerBuilder + .fromConnectionFactory(connectionFactory) + .withCacheConfiguration("myCache", + RedisCacheConfiguration.defaultCacheConfig() + .entryTtl(Duration.ofSeconds(30)) + ) + .build(); + } + + @Bean + public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(redisConnectionFactory); + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); + return redisTemplate; + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/config/GatewayConfig.java new file mode 100644 index 0000000000..1692f53b29 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/config/GatewayConfig.java @@ -0,0 +1,104 @@ +package at.tuwien.config; + +import at.tuwien.interceptor.KeycloakInterceptor; +import lombok.Getter; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.support.BasicAuthenticationInterceptor; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.DefaultUriBuilderFactory; + +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.util.List; + +@Log4j2 +@Getter +@Configuration +public class GatewayConfig { + + @Value("${dbrepo.endpoints.gatewayService}") + private String gatewayEndpoint; + + @Value("${dbrepo.endpoints.grafana}") + private String grafanaEndpoint; + + @Value("${dbrepo.admin.username}") + private String adminUsername; + + @Value("${dbrepo.admin.password}") + private String adminPassword; + + @Value("${dbrepo.endpoints.dataService}") + private String dataEndpoint; + + @Value("${dbrepo.endpoints.metadataService}") + private String metaDataEndpoint; + + @Value("${dbrepo.grafana.username}") + private String grafanaUsername; + + @Value("${dbrepo.grafana.password}") + private String grafanaPassword; + + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } + + @Bean("grafanaTemplate") + public RestTemplate grafanaTemplate() { + final RestTemplate restTemplate = new RestTemplate(); + restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(grafanaEndpoint)); + restTemplate.getInterceptors().add(grafanaHttpRequestInterceptor()); + return restTemplate; + } + + @Bean + public ClientHttpRequestInterceptor clientHttpRequestInterceptor() { + return (request, body, execution) -> { + final HttpHeaders headers = request.getHeaders(); + headers.add("Accept", MediaType.APPLICATION_JSON_VALUE); + return execution.execute(request, body); + }; + } + + @Bean + public ClientHttpRequestInterceptor grafanaHttpRequestInterceptor() { + return (request, body, execution) -> { + final HttpHeaders headers = request.getHeaders(); + headers.add("Accept", MediaType.APPLICATION_JSON_VALUE); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setBasicAuth(grafanaUsername, grafanaPassword); + return execution.execute(request, body); + }; + } + + @Bean("dataServiceRestTemplate") + public RestTemplate dataServiceRestTemplate() { + final RestTemplate restTemplate = new RestTemplate(); + restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(dataEndpoint)); + log.debug("add basic authentication for internal data service: username={}, password=(hidden)", adminUsername); + + restTemplate.getInterceptors() + .addAll(List.of(new BasicAuthenticationInterceptor(adminUsername, adminPassword), + clientHttpRequestInterceptor())); + + return restTemplate; + } + + @Bean("metaDataServiceRestTemplate") + public RestTemplate metaDataServiceRestTemplate() { + final RestTemplate restTemplate = new RestTemplate(); + restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(metaDataEndpoint)); + restTemplate.getInterceptors().add(clientHttpRequestInterceptor()); + return restTemplate; + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/config/KeycloakConfig.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/config/KeycloakConfig.java new file mode 100644 index 0000000000..4d258d496a --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/config/KeycloakConfig.java @@ -0,0 +1,50 @@ +package at.tuwien.config; + +import at.tuwien.interceptor.KeycloakInterceptor; +import lombok.Getter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.DefaultUriBuilderFactory; + +import java.util.List; + +@Getter +@Configuration +public class KeycloakConfig { + + @Value("${dbrepo.endpoints.authService}") + private String keycloakEndpoint; + + @Value("${dbrepo.keycloak.username}") + private String keycloakUsername; + + @Value("${dbrepo.keycloak.password}") + private String keycloakPassword; + + @Value("${dbrepo.keycloak.client}") + private String keycloakClient; + + @Value("${dbrepo.keycloak.clientSecret}") + private String keycloakClientSecret; + + private final ClientHttpRequestInterceptor clientHttpRequestInterceptor; + + @Autowired + public KeycloakConfig(ClientHttpRequestInterceptor clientHttpRequestInterceptor) { + this.clientHttpRequestInterceptor = clientHttpRequestInterceptor; + } + + @Bean("keycloakRestTemplate") + public RestTemplate brokerRestTemplate() { + final RestTemplate restTemplate = new RestTemplate(); + restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(keycloakEndpoint)); + restTemplate.getInterceptors() + .addAll(List.of(new KeycloakInterceptor(keycloakUsername, keycloakPassword, keycloakEndpoint), + clientHttpRequestInterceptor)); + return restTemplate; + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/config/WebSecurityConfig.java new file mode 100644 index 0000000000..5bb4b2e970 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/config/WebSecurityConfig.java @@ -0,0 +1,107 @@ +package at.tuwien.config; + +import at.tuwien.auth.AuthTokenFilter; +import at.tuwien.auth.BasicAuthenticationProvider; +import at.tuwien.gateway.KeycloakGateway; +import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; +import io.swagger.v3.oas.annotations.security.SecurityScheme; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import org.springframework.security.web.util.matcher.OrRequestMatcher; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +@Configuration +@EnableWebSecurity +@EnableGlobalMethodSecurity(prePostEnabled = true) +@SecurityScheme( + name = "bearerAuth", + type = SecuritySchemeType.HTTP, + bearerFormat = "JWT", + scheme = "bearer" +) +@SecurityScheme( + name = "basicAuth", + type = SecuritySchemeType.HTTP, + scheme = "basic" +) +public class WebSecurityConfig { + + @Bean + public AuthTokenFilter authTokenFilter() { + return new AuthTokenFilter(); + } + + @Bean + public SecurityFilterChain filterChain(HttpSecurity http, KeycloakGateway keycloakGateway, + GatewayConfig gatewayConfig) throws Exception { + final OrRequestMatcher internalEndpoints = new OrRequestMatcher( + new AntPathRequestMatcher("/actuator/**", "GET"), + new AntPathRequestMatcher("/v3/api-docs.yaml"), + new AntPathRequestMatcher("/v3/api-docs/**"), + new AntPathRequestMatcher("/swagger-ui/**"), + new AntPathRequestMatcher("/swagger-ui.html") + ); + final OrRequestMatcher publicEndpoints = new OrRequestMatcher( + new AntPathRequestMatcher("/api/**", "GET"), + new AntPathRequestMatcher("/api/**", "HEAD") + ); + /* enable CORS and disable CSRF */ + http = http.cors().and().csrf().disable(); + /* set session management to stateless */ + http = http + .sessionManagement() + .sessionCreationPolicy(SessionCreationPolicy.STATELESS) + .and(); + /* set unauthorized requests exception handler */ + http = http + .exceptionHandling() + .authenticationEntryPoint( + (request, response, ex) -> { + response.sendError(HttpServletResponse.SC_UNAUTHORIZED, + ex.getMessage() + ); + } + ).and(); + /* set permissions on endpoints */ + http.authorizeHttpRequests() + /* our internal endpoints */ + .requestMatchers(internalEndpoints).permitAll() + /* our public endpoints */ + .requestMatchers(publicEndpoints).permitAll() + /* our private endpoints */ + .anyRequest().authenticated(); + /* add JWT token filter */ + http.addFilterBefore(authTokenFilter(), + UsernamePasswordAuthenticationFilter.class + ); + http.addFilterBefore(new BasicAuthenticationFilter(new BasicAuthenticationProvider(gatewayConfig, + authTokenFilter(), keycloakGateway)), + UsernamePasswordAuthenticationFilter.class + ); + return http.build(); + } + + @Bean + public CorsFilter corsFilter() { + final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + final CorsConfiguration config = new CorsConfiguration(); + config.setAllowCredentials(true); + config.addAllowedOriginPattern("*"); + config.addAllowedHeader("*"); + config.addAllowedMethod("*"); + source.registerCorsConfiguration("/**", config); + return new CorsFilter(source); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/DashboardConfigDto.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/DashboardConfigDto.java new file mode 100644 index 0000000000..e93c50362c --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/DashboardConfigDto.java @@ -0,0 +1,46 @@ +package at.tuwien.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DashboardConfigDto { + /** + * Map containing information to create time series data. + * <p> + * The key of the map represents the table id. + * The value is a list of {@link TimeSeriesDto} objects in this table. + */ + private Map<Long, List<TimeSeriesDto>> timeSeriesDto; + + /** + * Map containing information about params for the PieChartPanel. + * <p> + * The key of the map represents the table id. + * The value is a Map with key = column id and value = {@link PieChartConfigDto}. + */ + private Map<Long, Map<Long, PieChartConfigDto>> pieChartConfigDto; + + /** + * Map containing information about params for the Histogram. + * <p> + * The key of the map represents the table id. + * The value is a Map with key = column id and value = {@link HistogramConfigDto}. + */ + private Map<Long, Map<Long, HistogramConfigDto>> histogramConfigDto; + + /** + * Map containing information about params for the tables. + * <p> + * The key of the map represents the table id. + * The value is a dto {@link TableConfigDto} holding the properties. + */ + private Map<Long, TableConfigDto> tableConfigDto; + private Integer refreshRate; +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/HistogramConfigDto.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/HistogramConfigDto.java new file mode 100644 index 0000000000..be6f3b21e8 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/HistogramConfigDto.java @@ -0,0 +1,14 @@ +package at.tuwien.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class HistogramConfigDto { + private Integer min; + private Integer max; + private Long size; +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/PieChartConfigDto.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/PieChartConfigDto.java new file mode 100644 index 0000000000..487d7042bf --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/PieChartConfigDto.java @@ -0,0 +1,14 @@ +package at.tuwien.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PieChartConfigDto { + private String limit; + private String decimalPlace; + private Long size; +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/TableConfigDto.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/TableConfigDto.java new file mode 100644 index 0000000000..0b21d8571d --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/TableConfigDto.java @@ -0,0 +1,12 @@ +package at.tuwien.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class TableConfigDto { + private Long size; +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/TimeDto.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/TimeDto.java new file mode 100644 index 0000000000..f78cb3d1c5 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/TimeDto.java @@ -0,0 +1,17 @@ +package at.tuwien.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class TimeDto { + private Long yearColId; + private Long monthColId; + private Long dayColId; + private Long hourColId; + private Long minuteColId; + private Long secondColId; +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/TimeSeriesDto.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/TimeSeriesDto.java new file mode 100644 index 0000000000..dd4356d70b --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/dto/TimeSeriesDto.java @@ -0,0 +1,14 @@ +package at.tuwien.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class TimeSeriesDto { + private TimeDto timeDto; + private Long valueColId; + private Long size; +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/endpoints/DashboardEndpoint.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/endpoints/DashboardEndpoint.java new file mode 100644 index 0000000000..bd9cc68b24 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/endpoints/DashboardEndpoint.java @@ -0,0 +1,92 @@ +package at.tuwien.endpoints; + +import at.tuwien.api.error.ApiErrorDto; +import at.tuwien.dto.DashboardConfigDto; +import at.tuwien.service.DashboardService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.validation.constraints.NotBlank; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@Log4j2 +@RestController +@CrossOrigin(origins = "*") +@RequestMapping(path = "/api/dashboard") +public class DashboardEndpoint { + private final DashboardService dashboardService; + + @Autowired + public DashboardEndpoint(DashboardService dashboardService) { + this.dashboardService = dashboardService; + } + + @PostMapping("/generate/{dbId}") + @Operation(summary = "Generate dashboard", + description = "Generates dashboard for a provided database id.", + security = {@SecurityRequirement(name = "bearerAuth")}) + @ApiResponses(value = { + @ApiResponse(responseCode = "201", + description = "Created a new dashboard", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = String.class))}), + @ApiResponse(responseCode = "500", + description = "Internal error", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}) + }) + public ResponseEntity<String> generateDashboard(@RequestHeader("Authorization") String token, + @NotBlank @PathVariable("dbId") Long dbId, + @RequestBody(required = false) DashboardConfigDto configDto) { + + return ResponseEntity.status(HttpStatus.CREATED) + .body(this.dashboardService.generateDashboard(dbId, token, configDto)); + } + + @RequestMapping(value = "/exists/{dbId}", method = {RequestMethod.GET, RequestMethod.HEAD}) + @Operation(summary = "Check if dashboard exists", + description = "Checks if a dashboard for a provided database id exists.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", + description = "Returns Boolean if dashboard exsists", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = Boolean.class))}), + @ApiResponse(responseCode = "500", + description = "Internal error", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}) + }) + public ResponseEntity<Boolean> checkIfDashboardExists(@NotBlank @PathVariable("dbId") Long dbId) { + return ResponseEntity.status(HttpStatus.OK) + .body(this.dashboardService.checkIfDashboardExists(dbId)); + } + + @DeleteMapping("/{dbId}") + @Operation(summary = "Delete dashboard in Grafana", + description = "Deletes a dashboard in Grafana for a provided id.", + security = {@SecurityRequirement(name = "bearerAuth")}) + @ApiResponses(value = { + @ApiResponse(responseCode = "202", + description = "Deleted grafana dashbaord"), + @ApiResponse(responseCode = "500", + description = "Internal error", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), + }) + public ResponseEntity<Void> removeDashboard(@NotBlank @PathVariable("dbId") Long dbId) { + this.dashboardService.removeDashboard(dbId); + return ResponseEntity.status(HttpStatus.ACCEPTED).build(); + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/endpoints/DataEndpoint.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/endpoints/DataEndpoint.java new file mode 100644 index 0000000000..6e698347df --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/endpoints/DataEndpoint.java @@ -0,0 +1,157 @@ +package at.tuwien.endpoints; + +import at.tuwien.api.error.ApiErrorDto; +import at.tuwien.panels.*; +import at.tuwien.service.DataService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import jakarta.validation.constraints.NotBlank; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Map; + +@Slf4j +@RestController +@CrossOrigin(origins = "*") +@RequestMapping(path = DataEndpoint.API_PREFIX) +public class DataEndpoint { + public static final String API_PREFIX = "/api/dashboard/data"; + private final DataService dataService; + private static final Long DEFAULT_RESPONSE_SIZE = 100L; + + @Autowired + public DataEndpoint(DataService dataService) { + this.dataService = dataService; + } + + @GetMapping(PieChartPanel.RELATIVE_PATH + "/{dbId}/{viewId}") + @Operation(summary = "Returns data for Pie Chart", + description = "Returns data for Pie Chart for a specific database and view") + @ApiResponses(value = { + @ApiResponse(responseCode = "500", + description = "Internal error", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}) + }) + public Map<String, Object> getPieChart(@NotBlank @PathVariable Long dbId, @NotBlank @PathVariable Long viewId, + @RequestParam(required = false) Long size) { + if (size == null) { + size = DEFAULT_RESPONSE_SIZE; + } + + return dataService.getPieChartData(dbId, viewId, size); + } + + @GetMapping(CntAllPanel.RELATIVE_PATH + "/{dbId}/{viewId}") + @Operation(summary = "Returns data for the Count All Stats Visualization", + description = "Returns data for the Count All Stats Visualization for a specific database and view") + @ApiResponses(value = { + @ApiResponse(responseCode = "500", + description = "Internal error", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}) + }) + public Map<String, Object> getCntAll(@NotBlank @PathVariable Long dbId, @NotBlank @PathVariable Long viewId) { + + return dataService.getCntAllData(dbId, viewId); + } + + @GetMapping(TablePanel.RELATIVE_PATH + "/{dbId}/{tableId}") + @Operation(summary = "Returns data for the Table Visualization", + description = "Returns data for the Table Visualization for a specific database and table") + @ApiResponses(value = { + @ApiResponse(responseCode = "500", + description = "Internal error", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}) + }) + public List<Map<String, Object>> getTable(@NotBlank @PathVariable Long dbId, + @NotBlank @PathVariable Long tableId, + @RequestParam(required = false) Long size) { + if (size == null) { + size = DEFAULT_RESPONSE_SIZE; + } + + return dataService.getTableData(dbId, tableId, size); + } + + @GetMapping(HistogramPanel.RELATIVE_PATH + "/{dbId}/{viewId}") + @Operation(summary = "Returns data for the Histogram Visualization", + description = "Returns data for the Histogram Visualization for a specific database and view") + @ApiResponses(value = { + @ApiResponse(responseCode = "500", + description = "Internal error", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}) + }) + public Map<String, List<Object>> getHistogram(@NotBlank @PathVariable Long dbId, @NotBlank @PathVariable Long viewId, + @RequestParam(required = false) Long size) { + if (size == null) { + size = DEFAULT_RESPONSE_SIZE; + } + + return dataService.getHistogramData(dbId, viewId, size); + } + + @GetMapping(StatsPanel.RELATIVE_PATH + "/{dbId}/{tableId}") + @Operation(summary = "Returns data for the Stats Visualization", + description = "Returns data for the Stats Visualization for a specific database and table") + @ApiResponses(value = { + @ApiResponse(responseCode = "500", + description = "Internal error", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}) + }) + public List<Map<String, Object>> getStats(@NotBlank @PathVariable Long dbId, @NotBlank @PathVariable Long tableId) { + return dataService.getStatsData(dbId, tableId); + } + + @GetMapping(TimeSeriesPanel.RELATIVE_PATH + "/{dbId}/{viewId}") + @Operation(summary = "Returns data for the Time Visualization", + description = "Returns data for the Time Visualization for a specific database and view") + @ApiResponses(value = { + @ApiResponse(responseCode = "500", + description = "Internal error", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}) + }) + public Map<String, List<Map<String, Object>>> getTimeSeries(@NotBlank @PathVariable Long dbId, @NotBlank @PathVariable Long viewId, + @RequestParam(required = false) Long size) { + if (size == null) { + size = DEFAULT_RESPONSE_SIZE; + } + return dataService.getTimeSeriesData(dbId, viewId, size); + } + + @GetMapping(MultiTimeSeriesPanel.RELATIVE_PATH + "/{dbId}/{viewId}") + @Operation(summary = "Returns data for the Multi Time Visualization", + description = "Returns data for the MUlti Time Visualization for a specific database and view") + @ApiResponses(value = { + @ApiResponse(responseCode = "500", + description = "Internal error", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}) + }) + public Map<String, List<Map<String, Object>>> getMultiTimeSeries(@NotBlank @PathVariable Long dbId, @NotBlank @PathVariable Long viewId, + @RequestParam(required = false) Long size) { + if (size == null) { + size = DEFAULT_RESPONSE_SIZE; + } + return dataService.getMultiTimeSeriesData(dbId, viewId, size); + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/ContainerNotFoundException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/ContainerNotFoundException.java new file mode 100644 index 0000000000..a15fcfb8a9 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/ContainerNotFoundException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.NOT_FOUND) +public class ContainerNotFoundException extends Exception { + + public ContainerNotFoundException(String message) { + super(message); + } + + public ContainerNotFoundException(String message, Throwable thr) { + super(message, thr); + } + + public ContainerNotFoundException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/DatabaseMalformedException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/DatabaseMalformedException.java new file mode 100644 index 0000000000..1ead17c389 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/DatabaseMalformedException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.BAD_REQUEST) +public class DatabaseMalformedException extends Exception { + + public DatabaseMalformedException(String message) { + super(message); + } + + public DatabaseMalformedException(String message, Throwable thr) { + super(message, thr); + } + + public DatabaseMalformedException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java new file mode 100644 index 0000000000..cb9075c80a --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.NOT_FOUND) +public class DatabaseNotFoundException extends Exception { + + public DatabaseNotFoundException(String message) { + super(message); + } + + public DatabaseNotFoundException(String message, Throwable thr) { + super(message, thr); + } + + public DatabaseNotFoundException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/DatabaseUnavailableException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/DatabaseUnavailableException.java new file mode 100644 index 0000000000..e584390ec9 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/DatabaseUnavailableException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.SERVICE_UNAVAILABLE) +public class DatabaseUnavailableException extends Exception { + + public DatabaseUnavailableException(String message) { + super(message); + } + + public DatabaseUnavailableException(String message, Throwable thr) { + super(message, thr); + } + + public DatabaseUnavailableException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/FormatNotAvailableException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/FormatNotAvailableException.java new file mode 100644 index 0000000000..4ca41e346d --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/FormatNotAvailableException.java @@ -0,0 +1,23 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +import java.io.IOException; + +@ResponseStatus(code = HttpStatus.NOT_ACCEPTABLE) +public class FormatNotAvailableException extends IOException { + + public FormatNotAvailableException(String msg) { + super(msg); + } + + public FormatNotAvailableException(String msg, Throwable thr) { + super(msg + ": " + thr.getLocalizedMessage(), thr); + } + + public FormatNotAvailableException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/JsonProcessingException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/JsonProcessingException.java new file mode 100644 index 0000000000..66f414018f --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/JsonProcessingException.java @@ -0,0 +1,17 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR) +public class JsonProcessingException extends RuntimeException { + + public JsonProcessingException(String message) { + super(message); + } + + public JsonProcessingException(String message, Throwable thr) { + super(message, thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/NotAllowedException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/NotAllowedException.java new file mode 100644 index 0000000000..341b93a644 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/NotAllowedException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.FORBIDDEN) +public class NotAllowedException extends Exception { + + public NotAllowedException(String message) { + super(message); + } + + public NotAllowedException(String message, Throwable thr) { + super(message, thr); + } + + public NotAllowedException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/PaginationException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/PaginationException.java new file mode 100644 index 0000000000..b47c66c5b3 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/PaginationException.java @@ -0,0 +1,22 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.BAD_REQUEST) +public class PaginationException extends Exception { + + public PaginationException(String msg) { + super(msg); + } + + public PaginationException(String msg, Throwable thr) { + super(msg + ": " + thr.getLocalizedMessage(), thr); + } + + public PaginationException(Throwable thr) { + super(thr); + } + +} + diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryMalformedException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryMalformedException.java new file mode 100644 index 0000000000..4d89f64f94 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryMalformedException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.BAD_REQUEST) +public class QueryMalformedException extends Exception { + + public QueryMalformedException(String message) { + super(message); + } + + public QueryMalformedException(String message, Throwable thr) { + super(message, thr); + } + + public QueryMalformedException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryNotFoundException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryNotFoundException.java new file mode 100644 index 0000000000..44fcbf4cee --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryNotFoundException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.NOT_FOUND) +public class QueryNotFoundException extends Exception { + + public QueryNotFoundException(String message) { + super(message); + } + + public QueryNotFoundException(String message, Throwable thr) { + super(message, thr); + } + + public QueryNotFoundException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryStoreCreateException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryStoreCreateException.java new file mode 100644 index 0000000000..e7166363e0 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryStoreCreateException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.BAD_REQUEST) +public class QueryStoreCreateException extends Exception { + + public QueryStoreCreateException(String message) { + super(message); + } + + public QueryStoreCreateException(String message, Throwable thr) { + super(message, thr); + } + + public QueryStoreCreateException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryStoreGCException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryStoreGCException.java new file mode 100644 index 0000000000..d1d25bbde1 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryStoreGCException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.BAD_REQUEST) +public class QueryStoreGCException extends Exception { + + public QueryStoreGCException(String message) { + super(message); + } + + public QueryStoreGCException(String message, Throwable thr) { + super(message, thr); + } + + public QueryStoreGCException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryStoreInsertException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryStoreInsertException.java new file mode 100644 index 0000000000..95c621493e --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryStoreInsertException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.BAD_REQUEST) +public class QueryStoreInsertException extends Exception { + + public QueryStoreInsertException(String message) { + super(message); + } + + public QueryStoreInsertException(String message, Throwable thr) { + super(message, thr); + } + + public QueryStoreInsertException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryStorePersistException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryStorePersistException.java new file mode 100644 index 0000000000..b9250ffefc --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/QueryStorePersistException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.BAD_REQUEST) +public class QueryStorePersistException extends Exception { + + public QueryStorePersistException(String message) { + super(message); + } + + public QueryStorePersistException(String message, Throwable thr) { + super(message, thr); + } + + public QueryStorePersistException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/RemoteUnavailableException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/RemoteUnavailableException.java new file mode 100644 index 0000000000..d007a65c02 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/RemoteUnavailableException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.SERVICE_UNAVAILABLE) +public class RemoteUnavailableException extends Exception { + + public RemoteUnavailableException(String message) { + super(message); + } + + public RemoteUnavailableException(String message, Throwable thr) { + super(message, thr); + } + + public RemoteUnavailableException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/RestTemplateExchangeException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/RestTemplateExchangeException.java new file mode 100644 index 0000000000..6724c3f260 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/RestTemplateExchangeException.java @@ -0,0 +1,17 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR) +public class RestTemplateExchangeException extends RuntimeException { + + public RestTemplateExchangeException(String message) { + super(message); + } + + public RestTemplateExchangeException(String message, Throwable thr) { + super(message, thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/ServiceConnectionException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/ServiceConnectionException.java new file mode 100644 index 0000000000..ec36c03e3a --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/ServiceConnectionException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.BAD_GATEWAY) +public class ServiceConnectionException extends Exception { + + public ServiceConnectionException(String msg) { + super(msg); + } + + public ServiceConnectionException(String msg, Throwable thr) { + super(msg + ": " + thr.getLocalizedMessage(), thr); + } + + public ServiceConnectionException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/ServiceException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/ServiceException.java new file mode 100644 index 0000000000..56004d6a47 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/ServiceException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.SERVICE_UNAVAILABLE) +public class ServiceException extends Exception { + + public ServiceException(String message) { + super(message); + } + + public ServiceException(String message, Throwable thr) { + super(message, thr); + } + + public ServiceException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/SidecarExportException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/SidecarExportException.java new file mode 100644 index 0000000000..88ac95e2e9 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/SidecarExportException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.SERVICE_UNAVAILABLE) +public class SidecarExportException extends Exception { + + public SidecarExportException(String message) { + super(message); + } + + public SidecarExportException(String message, Throwable thr) { + super(message, thr); + } + + public SidecarExportException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/SidecarImportException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/SidecarImportException.java new file mode 100644 index 0000000000..8dd9a832be --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/SidecarImportException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.SERVICE_UNAVAILABLE) +public class SidecarImportException extends Exception { + + public SidecarImportException(String message) { + super(message); + } + + public SidecarImportException(String message, Throwable thr) { + super(message, thr); + } + + public SidecarImportException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/StorageNotFoundException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/StorageNotFoundException.java new file mode 100644 index 0000000000..79c3608adc --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/StorageNotFoundException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.NOT_FOUND) +public class StorageNotFoundException extends Exception { + + public StorageNotFoundException(String message) { + super(message); + } + + public StorageNotFoundException(String message, Throwable thr) { + super(message, thr); + } + + public StorageNotFoundException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/StorageUnavailableException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/StorageUnavailableException.java new file mode 100644 index 0000000000..96a33f1175 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/StorageUnavailableException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.SERVICE_UNAVAILABLE) +public class StorageUnavailableException extends Exception { + + public StorageUnavailableException(String message) { + super(message); + } + + public StorageUnavailableException(String message, Throwable thr) { + super(message, thr); + } + + public StorageUnavailableException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/SyncDatabaseNotFoundException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/SyncDatabaseNotFoundException.java new file mode 100644 index 0000000000..f0bedd46ec --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/SyncDatabaseNotFoundException.java @@ -0,0 +1,17 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR) +public class SyncDatabaseNotFoundException extends RuntimeException { + + public SyncDatabaseNotFoundException(String message) { + super(message); + } + + public SyncDatabaseNotFoundException(String message, Throwable thr) { + super(message, thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/TableExistsException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/TableExistsException.java new file mode 100644 index 0000000000..dbbe0b86e1 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/TableExistsException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.CONFLICT) +public class TableExistsException extends Exception { + + public TableExistsException(String message) { + super(message); + } + + public TableExistsException(String message, Throwable thr) { + super(message, thr); + } + + public TableExistsException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/TableMalformedException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/TableMalformedException.java new file mode 100644 index 0000000000..6c959fc55b --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/TableMalformedException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.BAD_REQUEST) +public class TableMalformedException extends Exception { + + public TableMalformedException(String message) { + super(message); + } + + public TableMalformedException(String message, Throwable thr) { + super(message, thr); + } + + public TableMalformedException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/TableNotFoundException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/TableNotFoundException.java new file mode 100644 index 0000000000..05547bdfe2 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/TableNotFoundException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.NOT_FOUND) +public class TableNotFoundException extends Exception { + + public TableNotFoundException(String message) { + super(message); + } + + public TableNotFoundException(String message, Throwable thr) { + super(message, thr); + } + + public TableNotFoundException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/UserNotFoundException.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/UserNotFoundException.java new file mode 100644 index 0000000000..f3bece1e14 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/exception/UserNotFoundException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.NOT_FOUND) +public class UserNotFoundException extends Exception { + + public UserNotFoundException(String message) { + super(message); + } + + public UserNotFoundException(String message, Throwable thr) { + super(message, thr); + } + + public UserNotFoundException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/gateway/KeycloakGateway.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/gateway/KeycloakGateway.java new file mode 100644 index 0000000000..a05a75a6ff --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/gateway/KeycloakGateway.java @@ -0,0 +1,11 @@ +package at.tuwien.gateway; + +import at.tuwien.api.keycloak.TokenDto; +import at.tuwien.exception.ServiceConnectionException; +import at.tuwien.exception.ServiceException; + +public interface KeycloakGateway { + + TokenDto obtainUserToken(String username, String password) throws ServiceConnectionException, ServiceException; + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/gateway/impl/KeycloakGatewayImpl.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/gateway/impl/KeycloakGatewayImpl.java new file mode 100644 index 0000000000..76f3e83cef --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/gateway/impl/KeycloakGatewayImpl.java @@ -0,0 +1,81 @@ +package at.tuwien.gateway.impl; + +import at.tuwien.api.keycloak.TokenDto; +import at.tuwien.config.KeycloakConfig; +import at.tuwien.exception.ServiceConnectionException; +import at.tuwien.exception.ServiceException; +import at.tuwien.gateway.KeycloakGateway; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.http.*; +import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.HttpServerErrorException; +import org.springframework.web.client.ResourceAccessException; +import org.springframework.web.client.RestTemplate; + +@Log4j2 +@Service +public class KeycloakGatewayImpl implements KeycloakGateway { + + private final RestTemplate restTemplate; + private final KeycloakConfig keycloakConfig; + + public KeycloakGatewayImpl(@Qualifier("keycloakRestTemplate") RestTemplate restTemplate, + KeycloakConfig keycloakConfig) { + this.restTemplate = restTemplate; + this.keycloakConfig = keycloakConfig; + } + + public TokenDto obtainToken() throws ServiceConnectionException, ServiceException { + final HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + final MultiValueMap<String, String> payload = new LinkedMultiValueMap<>(); + payload.add("username", keycloakConfig.getKeycloakUsername()); + payload.add("password", keycloakConfig.getKeycloakPassword()); + payload.add("grant_type", "password"); + payload.add("client_id", "admin-cli"); + final String url = keycloakConfig.getKeycloakEndpoint() + "/realms/master/protocol/openid-connect/token"; + log.debug("request admin token from url {}", url); + final ResponseEntity<TokenDto> response; + try { + response = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(payload, headers), TokenDto.class); + } catch (ResourceAccessException | HttpServerErrorException.ServiceUnavailable e) { + log.error("Failed to obtain admin token: {}", e.getMessage()); + throw new ServiceConnectionException("Failed to obtain admin token: " + e.getMessage(), e); + } catch (Exception e) { + log.error("Failed to obtain admin token: remote host answered unexpected: {}", e.getMessage(), e); + throw new ServiceException("Failed to obtain admin token: remote host answered unexpected: " + e.getMessage(), e); + } + return response.getBody(); + } + + @Override + public TokenDto obtainUserToken(String username, String password) throws ServiceConnectionException, ServiceException { + final HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + final MultiValueMap<String, String> payload = new LinkedMultiValueMap<>(); + payload.add("username", username); + payload.add("password", password); + payload.add("grant_type", "password"); + payload.add("scope", "openid roles attributes"); + payload.add("client_id", keycloakConfig.getKeycloakClient()); + payload.add("client_secret", keycloakConfig.getKeycloakClientSecret()); + final String url = keycloakConfig.getKeycloakEndpoint() + "/realms/dbrepo/protocol/openid-connect/token"; + log.debug("request user token from url {}", url); + final ResponseEntity<TokenDto> response; + try { + response = new RestTemplate() + .exchange(url, HttpMethod.POST, new HttpEntity<>(payload, headers), TokenDto.class); + } catch (ResourceAccessException | HttpServerErrorException.ServiceUnavailable e) { + log.error("Failed to obtain user token: {}", e.getMessage()); + throw new ServiceConnectionException("Failed to obtain user token: " + e.getMessage(), e); + } catch (Exception e) { + log.error("Failed to obtain user token: unexpected response: {}", e.getMessage(), e); + throw new ServiceException("Failed to obtain user token: unexpected response: " + e.getMessage(), e); + } + return response.getBody(); + } + +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/handlers/DashboardApiExceptionHandler.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/handlers/DashboardApiExceptionHandler.java new file mode 100644 index 0000000000..80c834f77c --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/handlers/DashboardApiExceptionHandler.java @@ -0,0 +1,52 @@ +package at.tuwien.handlers; + +import at.tuwien.api.error.ApiErrorDto; +import at.tuwien.exception.RestTemplateExchangeException; +import at.tuwien.exception.JsonProcessingException; +import at.tuwien.exception.SyncDatabaseNotFoundException; +import io.swagger.v3.oas.annotations.Hidden; +import lombok.extern.log4j.Log4j2; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; + +@Log4j2 +@ControllerAdvice +public class DashboardApiExceptionHandler { + + @Hidden + @ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR) + @ExceptionHandler(JsonProcessingException.class) + public ResponseEntity<ApiErrorDto> handle(JsonProcessingException e) { + return genericHandle(e.getClass(), e.getLocalizedMessage()); + } + + @Hidden + @ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR) + @ExceptionHandler(RestTemplateExchangeException.class) + public ResponseEntity<ApiErrorDto> handle(RestTemplateExchangeException e) { + return genericHandle(e.getClass(), e.getLocalizedMessage()); + } + + @Hidden + @ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR) + @ExceptionHandler(SyncDatabaseNotFoundException.class) + public ResponseEntity<ApiErrorDto> handle(SyncDatabaseNotFoundException e) { + return genericHandle(e.getClass(), e.getLocalizedMessage()); + } + + private ResponseEntity<ApiErrorDto> genericHandle(Class<?> exceptionClass, String message) { + final HttpHeaders headers = new HttpHeaders(); + headers.set("Content-Type", "application/problem+json"); + final ResponseStatus annotation = exceptionClass.getAnnotation(ResponseStatus.class); + final ApiErrorDto response = ApiErrorDto.builder() + .status(annotation.code()) + .message(message) + .code(annotation.reason()) + .build(); + return new ResponseEntity<>(response, headers, response.getStatus()); + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/interceptor/KeycloakInterceptor.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/interceptor/KeycloakInterceptor.java new file mode 100644 index 0000000000..78fb5adc61 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/interceptor/KeycloakInterceptor.java @@ -0,0 +1,55 @@ +package at.tuwien.interceptor; + +import at.tuwien.api.keycloak.TokenDto; +import lombok.extern.log4j.Log4j2; +import org.springframework.http.*; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.HttpServerErrorException; +import org.springframework.web.client.ResourceAccessException; +import org.springframework.web.client.RestTemplate; + +import java.io.IOException; + +@Log4j2 +public class KeycloakInterceptor implements ClientHttpRequestInterceptor { + + private final String adminUsername; + private final String adminPassword; + private final String keycloakEndpoint; + + public KeycloakInterceptor(String adminUsername, String adminPassword, String keycloakEndpoint) { + this.adminUsername = adminUsername; + this.adminPassword = adminPassword; + this.keycloakEndpoint = keycloakEndpoint; + } + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) + throws IOException { + final RestTemplate restTemplate = new RestTemplate(); + final HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + final MultiValueMap<String, String> payload = new LinkedMultiValueMap<>(); + payload.add("username", adminUsername); + payload.add("password", adminPassword); + payload.add("grant_type", "password"); + payload.add("client_id", "admin-cli"); + final ResponseEntity<TokenDto> response; + try { + response = restTemplate.exchange(keycloakEndpoint + "/realms/master/protocol/openid-connect/token", + HttpMethod.POST, new HttpEntity<>(payload, headers), TokenDto.class); + } catch (ResourceAccessException | HttpServerErrorException.ServiceUnavailable e) { + log.error("Failed to obtain admin token: {}", e.getMessage()); + return execution.execute(request, body); + } + if (response.getBody() == null) { + return execution.execute(request, body); + } + request.getHeaders().set("Authorization", "Bearer " + response.getBody().getAccessToken()); + return execution.execute(request, body); + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/AbstractPanel.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/AbstractPanel.java new file mode 100644 index 0000000000..7d45e43922 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/AbstractPanel.java @@ -0,0 +1,47 @@ +package at.tuwien.panels; + +import lombok.Setter; + +public abstract class AbstractPanel { + @Setter + protected static String dataEndpoint; + public static final String DATASRC_UID = "infinityDataSrc"; + + protected static int x; + protected static int y; + private static int prevHeight = -1; + + public static void resetCoordinates() { + x = 0; + y = 0; + } + + public static void addRowPlaceHolder() { + y += 1; + } + + public static void markNewRow() { + x = 0; + } + + + public static void handleOverflow(int height, int width) { + if ( (x + width) > 24) { + x = 0; + y += prevHeight == -1 ? height : prevHeight; + prevHeight = height; + } + } + + public static void updateCoords(int height, int width) { + x += width; + + if (x > 24) { + x = 0; + y += prevHeight == -1 ? height : prevHeight; + } + prevHeight = height; + } + + public abstract String getConstructedPanel(); +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/CntAllPanel.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/CntAllPanel.java new file mode 100644 index 0000000000..f5af7d56e4 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/CntAllPanel.java @@ -0,0 +1,69 @@ +package at.tuwien.panels; + +import at.tuwien.endpoints.DataEndpoint; +import lombok.extern.log4j.Log4j2; + +@Log4j2 +public class CntAllPanel extends AbstractPanel { + public static final String RELATIVE_PATH = "/cntAll"; + private static final int HEIGHT = 8; + private static final int WIDTH = 5; + private final String dataAPI; + + public CntAllPanel(Long dbId, Long vId) { + this.dataAPI = String.format("%s%s%s/%d/%d", dataEndpoint, DataEndpoint.API_PREFIX, RELATIVE_PATH, dbId, vId); + } + + @Override + public String getConstructedPanel() { + handleOverflow(HEIGHT, WIDTH); + String panelJson = "{\n" + + " \"datasource\": {\n" + + " \"type\": \"yesoreyeram-infinity-datasource\",\n" + + " \"uid\": \"" + DATASRC_UID + "\"" + + " },\n" + + " \"fieldConfig\": {\n" + + " \"defaults\": {\n" + + " \"color\": {\n" + + " \"fixedColor\": \"#FFFFFF\",\n" + + " \"mode\": \"fixed\"\n" + + " },\n" + + " \"mappings\": []\n" + + " },\n" + + " \"overrides\": []\n" + + " },\n" + + " \"gridPos\": {\n" + + " \"h\": " + HEIGHT + ",\n" + + " \"w\": " + WIDTH + ",\n" + + " \"x\": " + x + ",\n" + + " \"y\": " + y + "\n" + + " },\n" + + " \"targets\": [\n" + + " {\n" + + " \"columns\": [],\n" + + " \"datasource\": {\n" + + " \"type\": \"yesoreyeram-infinity-datasource\",\n" + + " \"uid\": \"" + DATASRC_UID + "\"" + + " },\n" + + " \"filters\": [],\n" + + " \"format\": \"table\",\n" + + " \"global_query_id\": \"\",\n" + + " \"refId\": \"A\",\n" + + " \"root_selector\": \"\",\n" + + " \"source\": \"url\",\n" + + " \"type\": \"json\",\n" + + " \"url\": \"" + this.dataAPI + "\",\n" + + " \"url_options\": {\n" + + " \"data\": \"\",\n" + + " \"method\": \"GET\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"title\": \"Total elements\",\n" + + " \"type\": \"stat\"\n" + + " }"; + + updateCoords(HEIGHT, WIDTH); + return panelJson; + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/Dashboard.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/Dashboard.java new file mode 100644 index 0000000000..322485b909 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/Dashboard.java @@ -0,0 +1,29 @@ +package at.tuwien.panels; + +import java.util.List; + +public class Dashboard { + + public String getDashboard(List<String> panels, Long dbId, int refreshrate) { + + return "{\n" + + " \"dashboard\": {\n" + + " \"id\": null,\n" + + " \"uid\": \"" + dbId + "\",\n" + + " \"title\": \"automated dashboard_" + dbId + "\",\n" + + " \"tags\": [\n" + + " \"templated\"\n" + + " ],\n" + + " \"timezone\": \"browser\",\n" + + " \"schemaVersion\": 16,\n" + + " \"refresh\": \"" + (refreshrate == 0 ? "" : refreshrate + "s") + "\",\n" + + " \"panels\": [" + + String.join(", ", panels) + + " ]" + + " \n" + + " },\n" + + " \"message\": \"automated creation of dashboard\",\n" + + " \"overwrite\": false\n" + + "}"; + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/HistogramPanel.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/HistogramPanel.java new file mode 100644 index 0000000000..e021f0ab6b --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/HistogramPanel.java @@ -0,0 +1,110 @@ +package at.tuwien.panels; + +import at.tuwien.dto.HistogramConfigDto; +import at.tuwien.endpoints.DataEndpoint; +import lombok.extern.log4j.Log4j2; + +@Log4j2 +public class HistogramPanel extends AbstractPanel { + public static final String RELATIVE_PATH = "/histogram"; + private static final int HEIGHT = 8; + private static final int WIDTH = 5; + private String dataAPI; + private final String colName; + private Integer min; + private Integer max; + + public HistogramPanel(Long dbId, Long vId, String colName, HistogramConfigDto configDto) { + this.dataAPI = String.format("%s%s%s/%d/%d", dataEndpoint, DataEndpoint.API_PREFIX, RELATIVE_PATH, dbId, vId); + this.colName = colName; + + if (configDto != null) { + if (configDto.getMin() != null) { + this.min = configDto.getMin(); + } + + if (configDto.getMax() != null) { + this.max = configDto.getMax(); + } + + if (configDto.getSize() != null) { + dataAPI += String.format("?size=%d", configDto.getSize()); + } + } + } + + @Override + public String getConstructedPanel() { + handleOverflow(HEIGHT, WIDTH); + String panelJson = "{\n" + + " \"datasource\": {\n" + + " \"type\": \"yesoreyeram-infinity-datasource\",\n" + + " \"uid\": \"" + DATASRC_UID + "\"" + + " },\n" + + " \"fieldConfig\": {\n" + + " \"defaults\": {\n" + + " \"color\": {\n" + + " \"mode\": \"palette-classic\"\n" + + " },\n" + + " \"custom\": {\n" + + " \"fillOpacity\": 80,\n" + + " \"gradientMode\": \"none\",\n" + + " \"hideFrom\": {\n" + + " \"legend\": false,\n" + + " \"tooltip\": true,\n" + + " \"viz\": false\n" + + " },\n" + + " \"lineWidth\": 1\n" + + " },\n" + + " \"mappings\": [],\n" + + " \"max\": " + ((max == null) ? "null" : max) + ",\n" + + " \"min\": " + ((min == null) ? "null" : min) + "\n" + + " },\n" + + " \"overrides\": []\n" + + " },\n" + + " \"gridPos\": {\n" + + " \"h\": " + HEIGHT + ",\n" + + " \"w\": " + WIDTH + ",\n" + + " \"x\": " + x + ",\n" + + " \"y\": " + y + "\n" + + " },\n" + + " \"id\": null,\n" + + " \"description\": \"" + "Each bar represents a bucket, and the bar height represents " + + "the frequency of the values from the column " + this.colName + " that fell into that bucket's interval.\",\n" + + " \"options\": {\n" + + " \"legend\": {\n" + + " \"calcs\": [],\n" + + " \"displayMode\": \"list\",\n" + + " \"placement\": \"bottom\",\n" + + " \"showLegend\": false\n" + + " }\n" + + " },\n" + + " \"targets\": [\n" + + " {\n" + + " \"columns\": [],\n" + + " \"datasource\": {\n" + + " \"type\": \"yesoreyeram-infinity-datasource\",\n" + + " \"uid\": \"" + DATASRC_UID + "\"" + + " },\n" + + " \"filters\": [],\n" + + " \"format\": \"table\",\n" + + " \"global_query_id\": \"\",\n" + + " \"refId\": \"A\",\n" + + " \"root_selector\": \"values\",\n" + + " \"source\": \"url\",\n" + + " \"type\": \"json\",\n" + + " \"url\": \"" + this.dataAPI + "\",\n" + + " \"url_options\": {\n" + + " \"data\": \"\",\n" + + " \"method\": \"GET\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"title\": \"" + "Distribution of " + this.colName + " \",\n" + + " \"type\": \"histogram\"\n" + + " }"; + + updateCoords(HEIGHT, WIDTH); + return panelJson; + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/MultiTimeSeriesPanel.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/MultiTimeSeriesPanel.java new file mode 100644 index 0000000000..70be0650ee --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/MultiTimeSeriesPanel.java @@ -0,0 +1,90 @@ +package at.tuwien.panels; + +import at.tuwien.endpoints.DataEndpoint; +import lombok.extern.log4j.Log4j2; + +@Log4j2 +public class MultiTimeSeriesPanel extends AbstractPanel { + public static final String RELATIVE_PATH = "/multitimeseries"; + public static final String VIEW_MULTI_TIMECOL = "timecol"; + public static final String VIEW_MULTI_SELECTOR_TIME = "time"; + public static final String VIEW_MULTI_SELECTOR_VALUE = "value"; + public static final String VIEW_MULTI_SELECTOR_NAME = "name"; + + + private static final int HEIGHT = 8; + private static final int WIDTH = 5; + private String dataAPI; + + public MultiTimeSeriesPanel(Long dbId, Long vId) { + this.dataAPI = String.format("%s%s%s/%d/%d", dataEndpoint, DataEndpoint.API_PREFIX, RELATIVE_PATH, dbId, vId); + dataAPI += String.format("?size=%d", 100); + } + + @Override + public String getConstructedPanel() { + handleOverflow(HEIGHT, WIDTH); + String panelJson = " {\n" + + "\"datasource\": {\n" + + " \"uid\": \"" + DATASRC_UID + "\",\n" + + " \"type\": \"yesoreyeram-infinity-datasource\"\n" + + " },\n" + + " \"type\": \"timeseries\",\n" + + " \"title\": \"Time Series\",\n" + + " \"gridPos\": {\n" + + " \"h\": " + HEIGHT + ",\n" + + " \"w\": " + WIDTH + ",\n" + + " \"x\": " + x + ",\n" + + " \"y\": " + y + "\n" + + " },\n" + + "\"options\": {\n" + + " \"legend\": {\n" + + " \"calcs\": [],\n" + + " \"displayMode\": \"list\",\n" + + " \"placement\": \"bottom\",\n" + + " \"showLegend\": true\n" + + " },\n" + + " \"tooltip\": {\n" + + " \"mode\": \"single\",\n" + + " \"sort\": \"none\"\n" + + " }\n" + + " },\n" + + " \"targets\": [\n" + + " {\n" + + " \"datasource\": {\n" + + " \"type\": \"yesoreyeram-infinity-datasource\",\n" + + " \"uid\": \"" + DATASRC_UID + "\"" + + " },\n" + + " \"refId\": \"A\",\n" + + " \"type\": \"json\",\n" + + " \"source\": \"url\",\n" + + " \"format\": \"timeseries\",\n" + + " \"url\": \"" + this.dataAPI + "\",\n" + + " \"url_options\": {\n" + + " \"method\": \"GET\",\n" + + " \"data\": \"\"\n" + + " },\n" + + " \"root_selector\": \"time_series\",\n" + + " \"columns\": [\n" + + " {\n" + + " \"selector\": \"" + VIEW_MULTI_SELECTOR_TIME + "\",\n" + + " \"type\": \"timestamp\"\n" + + " },\n" + + " {\n" + + " \"selector\": \"" + VIEW_MULTI_SELECTOR_VALUE + "\",\n" + + " \"type\": \"number\"\n" + + " },\n" + + " {\n" + + " \"selector\": \"" + VIEW_MULTI_SELECTOR_NAME + "\",\n" + + " \"type\": \"string\"\n" + + " }\n" + + " ],\n" + + " \"filters\": [],\n" + + " \"global_query_id\": \"\"\n" + + " }\n" + + " ]}"; + + updateCoords(HEIGHT, WIDTH); + return panelJson; + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/PieChartPanel.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/PieChartPanel.java new file mode 100644 index 0000000000..3b98dec4d0 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/PieChartPanel.java @@ -0,0 +1,110 @@ +package at.tuwien.panels; + +import at.tuwien.dto.PieChartConfigDto; +import at.tuwien.endpoints.DataEndpoint; +import lombok.extern.log4j.Log4j2; + +@Log4j2 +public class PieChartPanel extends AbstractPanel { + public static final String RELATIVE_PATH = "/piechart"; + public static final String VIEW_PIE_PERCENTAGE_COL = "percentage"; + + private static final int HEIGHT = 8; + private static final int WIDTH = 7; + private String dataAPI; + private final String colName; + + public PieChartPanel(Long dbId, Long vId, String colName, PieChartConfigDto config) { + this.dataAPI = String.format("%s%s%s/%d/%d", dataEndpoint, DataEndpoint.API_PREFIX, RELATIVE_PATH, dbId, vId); + this.colName = colName; + + if (config != null && config.getSize() != null) { + dataAPI += String.format("?size=%d", config.getSize()); + } + } + + @Override + public String getConstructedPanel() { + handleOverflow(HEIGHT, WIDTH); + String panelJson = "{\n" + + " \"datasource\": {\n" + + " \"type\": \"yesoreyeram-infinity-datasource\",\n" + + " \"uid\": \"" + DATASRC_UID + "\"" + + " },\n" + + " \"fieldConfig\": {\n" + + " \"defaults\": {\n" + + " \"color\": {\n" + + " \"mode\": \"palette-classic\"\n" + + " },\n" + + " \"custom\": {\n" + + " \"hideFrom\": {\n" + + " \"legend\": false,\n" + + " \"tooltip\": false,\n" + + " \"viz\": false\n" + + " }\n" + + " },\n" + + " \"mappings\": []\n" + + " },\n" + + " \"overrides\": []\n" + + " },\n" + + " \"gridPos\": {\n" + + " \"h\": " + HEIGHT + ",\n" + + " \"w\": " + WIDTH + ",\n" + + " \"x\": " + x + ",\n" + + " \"y\": " + y + "\n" + + " },\n" + + " \"options\": {\n" + + " \"displayLabels\": [\n" + + " \"percent\"\n" + + " ],\n" + + " \"legend\": {\n" + + " \"calcs\": [],\n" + + " \"displayMode\": \"list\",\n" + + " \"placement\": \"right\",\n" + + " \"showLegend\": true,\n" + + " \"values\": [\n" + + " \"value\"\n" + + " ]\n" + + " },\n" + + " \"pieType\": \"pie\",\n" + + " \"reduceOptions\": {\n" + + " \"calcs\": [\n" + + " \"lastNotNull\"\n" + + " ],\n" + + " \"fields\": \"\",\n" + + " \"values\": false\n" + + " },\n" + + " \"tooltip\": {\n" + + " \"mode\": \"single\",\n" + + " \"sort\": \"none\"\n" + + " }\n" + + " },\n" + + " \"targets\": [\n" + + " {\n" + + " \"columns\": [],\n" + + " \"datasource\": {\n" + + " \"type\": \"yesoreyeram-infinity-datasource\",\n" + + " \"uid\": \"" + DATASRC_UID + "\"" + + " },\n" + + " \"filters\": [],\n" + + " \"format\": \"table\",\n" + + " \"global_query_id\": \"\",\n" + + " \"refId\": \"A\",\n" + + " \"root_selector\": \"\",\n" + + " \"source\": \"url\",\n" + + " \"type\": \"json\",\n" + + " \"url\": \"" + this.dataAPI + "\",\n" + + " \"url_options\": {\n" + + " \"data\": \"\",\n" + + " \"method\": \"GET\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"title\": \"Distribution of Most Frequent " + this.colName + "\",\n" + + " \"type\": \"piechart\"\n" + + " }"; + + updateCoords(HEIGHT, WIDTH); + return panelJson; + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/RowPanel.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/RowPanel.java new file mode 100644 index 0000000000..94ae55b74b --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/RowPanel.java @@ -0,0 +1,52 @@ +package at.tuwien.panels; + +import at.tuwien.exception.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.log4j.Log4j2; + +import java.util.List; + +@Log4j2 +public class RowPanel extends AbstractPanel { + private static final int HEIGHT = 1; + private static final int WIDTH = 24; + private final String name; + private final List<String> tablePanels; + private final ObjectMapper mapper; + + public RowPanel(String name, List<String> tablePanels) { + this.name = name; + this.tablePanels = tablePanels; + this.mapper = new ObjectMapper(); + } + + @Override + public String getConstructedPanel() { + + int rowY = -1; + try{ + JsonNode rootNode = mapper.readTree(tablePanels.get(0)); + rowY = rootNode.path("gridPos").path("y").asInt() - 1; + } catch (Exception e) { + log.debug("failed to read json of table panel"); + throw new JsonProcessingException("Failed to parse table panel"); + } + + return "{\n" + + " \"collapsed\": true,\n" + + " \"gridPos\": {\n" + + " \"h\": " + HEIGHT + ",\n" + + " \"w\": " + WIDTH + ",\n" + + " \"x\": " + 0 + ",\n" + + " \"y\": " + rowY + "\n" + + " },\n" + + " \"id\": null,\n" + + " \"panels\": [" + + String.join(", ", tablePanels) + + "],\n" + + " \"title\": \"" + name + "\",\n" + + " \"type\": \"row\"\n" + + " }"; + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/StatsPanel.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/StatsPanel.java new file mode 100644 index 0000000000..81e9204336 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/StatsPanel.java @@ -0,0 +1,183 @@ +package at.tuwien.panels; + +import at.tuwien.endpoints.DataEndpoint; +import lombok.extern.log4j.Log4j2; + +@Log4j2 +public class StatsPanel extends AbstractPanel { + public static final String RELATIVE_PATH = "/stats"; + public static final String HEADER_COL = "column"; + public static final String HEADER_MIN = "min"; + public static final String HEADER_MAX = "max"; + public static final String HEADER_STDDEV = "stddev"; + public static final String HEADER_AVG = "median"; + + private static final int HEIGHT = 8; + private static final int WIDTH = 9; + private final String dataAPI; + private final String name; + + public StatsPanel(Long dbId, Long tId, String name) { + this.dataAPI = String.format("%s%s%s/%d/%d", dataEndpoint, DataEndpoint.API_PREFIX, RELATIVE_PATH, dbId, tId); + this.name = name; + } + + @Override + public String getConstructedPanel() { + handleOverflow(HEIGHT, WIDTH); + String panelJson = " {\n" + + " \"datasource\": {\n" + + " \"type\": \"yesoreyeram-infinity-datasource\",\n" + + " \"uid\": \"" + DATASRC_UID + "\"" + + " },\n" + + " \"fieldConfig\": {\n" + + " \"defaults\": {\n" + + " \"custom\": {\n" + + " \"align\": \"auto\",\n" + + " \"filterable\": \"true\",\n" + + " \"cellOptions\": {\n" + + " \"type\": \"auto\"\n" + + " },\n" + + " \"inspect\": false\n" + + " },\n" + + " \"mappings\": [],\n" + + " \"thresholds\": {\n" + + " \"mode\": \"absolute\",\n" + + " \"steps\": [\n" + + " {\n" + + " \"color\": \"green\",\n" + + " \"value\": null\n" + + " },\n" + + " {\n" + + " \"color\": \"red\",\n" + + " \"value\": 80\n" + + " }\n" + + " ]\n" + + " }\n" + + " },\n" + + " \"overrides\": [\n" + + " {\n" + + " \"matcher\": {\n" + + " \"id\": \"byName\",\n" + + " \"options\": \"" + HEADER_COL + "\"\n" + + " },\n" + + " \"properties\": [\n" + + " {\n" + + " \"id\": \"custom.align\",\n" + + " \"value\": \"center\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"matcher\": {\n" + + " \"id\": \"byName\",\n" + + " \"options\": \"" + HEADER_MIN + "\"\n" + + " },\n" + + " \"properties\": [\n" + + " {\n" + + " \"id\": \"custom.width\",\n" + + " \"value\": 115\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"matcher\": {\n" + + " \"id\": \"byName\",\n" + + " \"options\": \"" + HEADER_MAX + "\"\n" + + " },\n" + + " \"properties\": [\n" + + " {\n" + + " \"id\": \"custom.width\",\n" + + " \"value\": 115\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"matcher\": {\n" + + " \"id\": \"byName\",\n" + + " \"options\": \"" + HEADER_AVG + "\"\n" + + " },\n" + + " \"properties\": [\n" + + " {\n" + + " \"id\": \"custom.width\",\n" + + " \"value\": 115\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"matcher\": {\n" + + " \"id\": \"byName\",\n" + + " \"options\": \"" + HEADER_STDDEV + "\"\n" + + " },\n" + + " \"properties\": [\n" + + " {\n" + + " \"id\": \"custom.width\",\n" + + " \"value\": 115\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " },\n" + + " \"gridPos\": {\n" + + " \"h\": " + HEIGHT + ",\n" + + " \"w\": " + WIDTH + ",\n" + + " \"x\": " + x + ",\n" + + " \"y\": " + y + "\n" + + " },\n" + + " \"options\": {\n" + + " \"cellHeight\": \"sm\",\n" + + " \"footer\": {\n" + + " \"countRows\": false,\n" + + " \"fields\": \"\",\n" + + " \"reducer\": [\n" + + " \"sum\"\n" + + " ],\n" + + " \"show\": false\n" + + " },\n" + + " \"showHeader\": true\n" + + " },\n" + + " \"targets\": [\n" + + " {\n" + + " \"columns\": [],\n" + + " \"datasource\": {\n" + + " \"type\": \"yesoreyeram-infinity-datasource\",\n" + + " \"uid\": \"" + DATASRC_UID + "\"" + + " },\n" + + " \"filters\": [],\n" + + " \"format\": \"table\",\n" + + " \"global_query_id\": \"\",\n" + + " \"refId\": \"A\",\n" + + " \"root_selector\": \"\",\n" + + " \"source\": \"url\",\n" + + " \"type\": \"json\",\n" + + " \"url\": \"" + this.dataAPI + "\",\n" + + " \"url_options\": {\n" + + " \"data\": \"\",\n" + + " \"method\": \"GET\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"title\": \"Stats for " + name + "\",\n" + + " \"transformations\": [\n" + + " {\n" + + " \"id\": \"organize\",\n" + + " \"options\": {\n" + + " \"excludeByName\": {},\n" + + " \"includeByName\": {},\n" + + " \"indexByName\": {\n" + + " \"" + HEADER_AVG + "\": 3,\n" + + " \"" + HEADER_COL + "\": 0,\n" + + " \"" + HEADER_STDDEV + "\": 4,\n" + + " \"" + HEADER_MAX + "\": 2,\n" + + " \"" + HEADER_MIN + "\": 1\n" + + " }\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"type\": \"table\"\n" + + " }"; + + updateCoords(HEIGHT, WIDTH); + return panelJson; + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/TablePanel.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/TablePanel.java new file mode 100644 index 0000000000..7295f1528d --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/TablePanel.java @@ -0,0 +1,73 @@ +package at.tuwien.panels; + +import at.tuwien.endpoints.DataEndpoint; +import lombok.extern.log4j.Log4j2; + +@Log4j2 +public class TablePanel extends AbstractPanel { + public static final String RELATIVE_PATH = "/tablepanel"; + private static final int HEIGHT = 8; + private static final int WIDTH = 16; + private final String name; + + private String dataAPI; + + public TablePanel(Long dbId, Long tId, String name, Long size) { + this.name = name; + this.dataAPI = String.format("%s%s%s/%d/%d", dataEndpoint, DataEndpoint.API_PREFIX, RELATIVE_PATH, dbId, tId); + if (size != null) { + dataAPI += String.format("?size=%d", size); + } + } + + @Override + public String getConstructedPanel() { + handleOverflow(HEIGHT, WIDTH); + String panelJson = "{\n" + + " \"datasource\": {\n" + + " \"type\": \"yesoreyeram-infinity-datasource\",\n" + + " \"uid\": \"" + DATASRC_UID + "\"" + + " },\n" + + " \"fieldConfig\": {\n" + + " \"defaults\": {\n" + + " \"custom\": {\n" + + " \"filterable\": true\n" + + " }\n" + + " }\n" + + " }," + + " \"gridPos\": {\n" + + " \"h\": " + HEIGHT + ",\n" + + " \"w\": " + WIDTH + ",\n" + + " \"x\": " + x + ",\n" + + " \"y\": " + y + "\n" + + " },\n" + + " \"id\": null,\n" + + " \"targets\": [\n" + + " {\n" + + " \"columns\": [],\n" + + " \"datasource\": {\n" + + " \"type\": \"yesoreyeram-infinity-datasource\",\n" + + " \"uid\": \"" + DATASRC_UID + "\"" + + " },\n" + + " \"filters\": [],\n" + + " \"format\": \"table\",\n" + + " \"global_query_id\": \"\",\n" + + " \"refId\": \"A\",\n" + + " \"root_selector\": \"\",\n" + + " \"source\": \"url\",\n" + + " \"type\": \"json\",\n" + + " \"url\": \"" + this.dataAPI + "\",\n" + + " \"url_options\": {\n" + + " \"data\": \"\",\n" + + " \"method\": \"GET\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"title\": \"" + name + "\",\n" + + " \"type\": \"table\"\n" + + " }"; + + updateCoords(HEIGHT, WIDTH); + return panelJson; + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/TimeSeriesPanel.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/TimeSeriesPanel.java new file mode 100644 index 0000000000..e0f5b305ea --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/panels/TimeSeriesPanel.java @@ -0,0 +1,93 @@ +package at.tuwien.panels; + +import at.tuwien.endpoints.DataEndpoint; +import lombok.extern.log4j.Log4j2; + +@Log4j2 +public class TimeSeriesPanel extends AbstractPanel { + public static final String RELATIVE_PATH = "/timeseries"; + public static final String TIME_VAL_COL = "value"; + public static final String TIME_YEAR_COL = "year"; + public static final String TIME_MONTH_COL = "month"; + public static final String TIME_DAY_COL = "day"; + public static final String TIME_HOUR_COL = "hour"; + public static final String TIME_MIN_COL = "min"; + public static final String TIME_SECOND_COL = "sec"; + private final String value; + + private static final int HEIGHT = 8; + private static final int WIDTH = 5; + private String dataAPI; + + public TimeSeriesPanel(Long dbId, Long vId, String value, Long size) { + this.dataAPI = String.format("%s%s%s/%d/%d", dataEndpoint, DataEndpoint.API_PREFIX, RELATIVE_PATH, dbId, vId); + this.value = value; + if (size != null) { + dataAPI += String.format("?size=%d", size); + } + } + + @Override + public String getConstructedPanel() { + handleOverflow(HEIGHT, WIDTH); + String panelJson = " {\n" + + "\"datasource\": {\n" + + " \"uid\": \"" + DATASRC_UID + "\",\n" + + " \"type\": \"yesoreyeram-infinity-datasource\"\n" + + " },\n" + + " \"type\": \"timeseries\",\n" + + " \"title\": \"Time Series\",\n" + + " \"gridPos\": {\n" + + " \"h\": " + HEIGHT + ",\n" + + " \"w\": " + WIDTH + ",\n" + + " \"x\": " + x + ",\n" + + " \"y\": " + y + "\n" + + " },\n" + + "\"options\": {\n" + + " \"legend\": {\n" + + " \"calcs\": [],\n" + + " \"displayMode\": \"list\",\n" + + " \"placement\": \"bottom\",\n" + + " \"showLegend\": true\n" + + " },\n" + + " \"tooltip\": {\n" + + " \"mode\": \"single\",\n" + + " \"sort\": \"none\"\n" + + " }\n" + + " },\n" + + " \"targets\": [\n" + + " {\n" + + " \"datasource\": {\n" + + " \"type\": \"yesoreyeram-infinity-datasource\",\n" + + " \"uid\": \"" + DATASRC_UID + "\"" + + " },\n" + + " \"refId\": \"A\",\n" + + " \"type\": \"json\",\n" + + " \"source\": \"url\",\n" + + " \"format\": \"table\",\n" + + " \"url\": \"" + this.dataAPI + "\",\n" + + " \"url_options\": {\n" + + " \"method\": \"GET\",\n" + + " \"data\": \"\"\n" + + " },\n" + + " \"root_selector\": \"time_series\",\n" + + " \"columns\": [\n" + + " {\n" + + " \"selector\": \"time\",\n" + + " \"type\": \"timestamp\"\n" + + " },\n" + + " {\n" + + " \"text\": \"" + value + "\",\n" + + " \"selector\": \"value\",\n" + + " \"type\": \"number\"\n" + + " }\n" + + " ],\n" + + " \"filters\": [],\n" + + " \"global_query_id\": \"\"\n" + + " }\n" + + " ]}"; + + updateCoords(HEIGHT, WIDTH); + return panelJson; + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/DashboardService.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/DashboardService.java new file mode 100644 index 0000000000..26c66d4efe --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/DashboardService.java @@ -0,0 +1,9 @@ +package at.tuwien.service; + +import at.tuwien.dto.DashboardConfigDto; + +public interface DashboardService { + String generateDashboard(Long dbId, String token, DashboardConfigDto configDto); + Boolean checkIfDashboardExists(Long dbId); + void removeDashboard(Long dbId); +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/DataService.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/DataService.java new file mode 100644 index 0000000000..253fde5ebb --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/DataService.java @@ -0,0 +1,14 @@ +package at.tuwien.service; + +import java.util.List; +import java.util.Map; + +public interface DataService { + Map<String, Object> getPieChartData(Long dbId, Long viewId, Long size); + Map<String, Object> getCntAllData(Long dbId, Long viewId); + List<Map<String, Object>> getTableData(Long dbId, Long tableId, Long size); + Map<String, List<Object>> getHistogramData(Long dbId, Long viewId, Long size); + List<Map<String, Object>> getStatsData(Long dbId, Long tableId); + Map<String, List<Map<String, Object>>> getTimeSeriesData(Long dbId, Long viewId, Long size); + Map<String, List<Map<String, Object>>> getMultiTimeSeriesData(Long dbId, Long viewId, Long size); +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/DataSourceService.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/DataSourceService.java new file mode 100644 index 0000000000..070ba1f1d5 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/DataSourceService.java @@ -0,0 +1,7 @@ +package at.tuwien.service; + + +public interface DataSourceService { + String addDatasource(); + String getDatasource(); +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/TableService.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/TableService.java new file mode 100644 index 0000000000..49a5b773de --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/TableService.java @@ -0,0 +1,16 @@ +package at.tuwien.service; + + +import at.tuwien.api.database.table.TableBriefDto; +import at.tuwien.api.database.table.TableDto; + +import java.util.List; +import java.util.Map; + + +public interface TableService { + + List<TableBriefDto> getAllTables(Long dbId); + TableDto getTableSchemas(Long dbId, Long tId); + List<Map<String, Object>> getTableData(Long dbId, Long tId, Long size); +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/ViewGeneratorService.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/ViewGeneratorService.java new file mode 100644 index 0000000000..ef7def1323 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/ViewGeneratorService.java @@ -0,0 +1,15 @@ +package at.tuwien.service; + +import at.tuwien.dto.PieChartConfigDto; + +import java.util.List; +import java.util.Map; + +public interface ViewGeneratorService { + Long genCntAllView(Long dbId, String tableName, String token); + Long genPieChartView(Long dbId, String tableName, String colName, PieChartConfigDto config, String token); + Long genHistogramView(Long dbId, String tableName, String colName, String token); + Long genStatisticsView(Long dbId, String tableName, String colName, String token); + Long genTimeSeriesView(Long dbId, String tableName, Map<String, String> timeMap, String token); + Long genMultiTimeSeriesView(Long dbId, String tableName, String timeCol, List<String> numValues, String token); +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/DashboardServiceImpl.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/DashboardServiceImpl.java new file mode 100644 index 0000000000..b373a8c0f8 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/DashboardServiceImpl.java @@ -0,0 +1,408 @@ +package at.tuwien.service.impl; + +import at.tuwien.api.database.query.QueryResultDto; +import at.tuwien.api.database.table.TableBriefDto; +import at.tuwien.api.database.table.TableDto; +import at.tuwien.api.database.table.columns.ColumnDto; +import at.tuwien.api.database.table.columns.ColumnTypeDto; +import at.tuwien.dto.*; +import at.tuwien.exception.JsonProcessingException; +import at.tuwien.panels.*; +import at.tuwien.service.*; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.*; +import org.springframework.stereotype.Service; +import org.springframework.web.client.*; + +import java.util.*; +import java.util.stream.Collectors; + +import static at.tuwien.panels.TimeSeriesPanel.*; + +@Log4j2 +@Service +public class DashboardServiceImpl implements DashboardService { + + @Value("${dbrepo.endpoints.grafanaService}") + private String grafanaServiceEndpoint; + + @Value("${application.baseurl}") + private String baseUrl; + + @Value("${dbrepo.endpoints.grafanaPort}") + private String grafanaPort; + + @Value("${dbrepo.grafana.default_refreshrate}") + private int defaultRefreshrate; + + private final RestTemplate grafanaRestTemplate; + private final TableService tableService; + private final DataSourceService dataSourceService; + private final ViewGeneratorService viewGeneratorService; + private String token = ""; + + @Autowired + public DashboardServiceImpl(@Qualifier("grafanaTemplate") RestTemplate grafanaRestTemplate, + DataSourceService dataSourceService, TableService tableService, + ViewGeneratorService viewGeneratorService) { + this.grafanaRestTemplate = grafanaRestTemplate; + this.dataSourceService = dataSourceService; + this.tableService = tableService; + this.viewGeneratorService = viewGeneratorService; + } + + @Override + public Boolean checkIfDashboardExists(Long dbId) { + return this.checkForSync(dbId) != null; + } + + @Override + public void removeDashboard(Long dbId) { + String path = String.format("/api/dashboards/uid/%d", dbId); + + try { + ResponseEntity<String> responseEntity = grafanaRestTemplate.exchange( + path, + HttpMethod.DELETE, + null, + String.class + ); + + log.warn(responseEntity.getBody()); + } catch (ResourceAccessException e) { + log.error("Resource access error for accessing URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.DELETE, e); + throw new ResourceAccessException("Resource access error occurred"); + } catch (RestClientException e) { + log.error("RestClient Exception occurred URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.DELETE, e); + throw new ResourceAccessException("RestClient Exception occurred"); + } catch (Exception e) { + log.error("Exception occurred, URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.DELETE, e); + throw new ResourceAccessException("Exception occurred"); + } + } + + @Override + public String generateDashboard(Long dbId, String token, DashboardConfigDto configDto) { + this.token = token; + addDatasourceIfNotPresent(); + + String url = this.checkForSync(dbId); + if (url != null) { + return String.format("%s:%s%s%n", baseUrl, grafanaPort, url); + } + + Map<Long, List<TimeSeriesDto>> timeSeriesParamMap = new HashMap<>(); + Map<Long, Map<Long, PieChartConfigDto>> pieChartParamMap = new HashMap<>(); + Map<Long, Map<Long, HistogramConfigDto>> histogramParamMap = new HashMap<>(); + Map<Long, TableConfigDto> tableParamMap = new HashMap<>(); + DashboardConfigDto dashboardConfigDto = new DashboardConfigDto(); + + if (configDto != null) { + dashboardConfigDto = configDto; + } + + if (dashboardConfigDto.getTimeSeriesDto() != null) { + timeSeriesParamMap = dashboardConfigDto.getTimeSeriesDto(); + } + + if (dashboardConfigDto.getPieChartConfigDto() != null) { + pieChartParamMap = dashboardConfigDto.getPieChartConfigDto(); + } + + if (dashboardConfigDto.getHistogramConfigDto() != null) { + histogramParamMap = dashboardConfigDto.getHistogramConfigDto(); + } + + if (dashboardConfigDto.getTableConfigDto() != null) { + tableParamMap = dashboardConfigDto.getTableConfigDto(); + } + + List<TableBriefDto> tableIds = this.tableService.getAllTables(dbId); + List<Long> idList = tableIds.stream() + .map(TableBriefDto::getId) + .toList(); + + AbstractPanel.setDataEndpoint(grafanaServiceEndpoint); + AbstractPanel.resetCoordinates(); + List<String> rowPanels = new ArrayList<>(); + List<String> tablePanels; + + for (var tId : idList) { + tablePanels = new ArrayList<>(); + TableDto tableSchema = this.tableService.getTableSchemas(dbId, tId); + String tableName = tableSchema.getInternalName(); + + List<ColumnDto> columns = tableSchema.getColumns(); + Set<Long> primaryKeys = tableSchema.getConstraints().getPrimaryKey().stream() + .map(pkDto -> pkDto.getColumn().getId()) + .collect(Collectors.toSet()); + + columns.removeIf(column -> primaryKeys.contains(column.getId())); + + AbstractPanel.addRowPlaceHolder(); + + if (tableParamMap.containsKey(tId)) { + tablePanels.add(generateTablePanel(dbId, tId, tableName, tableParamMap.get(tId).getSize())); + } else { + tablePanels.add(generateTablePanel(dbId, tId, tableName, null)); + } + + tablePanels.add(generateCntAllPanel(dbId, tableName)); + tablePanels.add(generateStatsPanel(dbId, tId, tableName)); + + if (timeSeriesParamMap.containsKey(tId)) { + addTimeSeriesPanel(dbId, tId, tableName, columns, timeSeriesParamMap, tablePanels); + } + + for (var col : columns) { + ColumnTypeDto columnType = col.getColumnType(); + + if (isNumericalColumn(columnType)) { + + if (histogramParamMap.containsKey(tId) && histogramParamMap.get(tId).containsKey(col.getId())) { + tablePanels.add(generateHistogramPanel(dbId, tableName, col.getInternalName(), histogramParamMap.get(tId).get(col.getId()))); + } else { + tablePanels.add(generateHistogramPanel(dbId, tableName, col.getInternalName(), null)); + } + } else if (isStringColumn(columnType)) { + + if (pieChartParamMap.containsKey(tId) && pieChartParamMap.get(tId).containsKey(col.getId())) { + tablePanels.add(generatePieChartPanel(dbId, tableName, col.getInternalName(), pieChartParamMap.get(tId).get(col.getId()))); + } else { + tablePanels.add(generatePieChartPanel(dbId, tableName, col.getInternalName(), null)); + } + } else if (isTimeStamp(columnType)) { + List<String> numColumns = new ArrayList<>(); + + for(var other : columns) { + if (isNumericalColumn(other.getColumnType())) { + numColumns.add(other.getInternalName()); + } + } + + tablePanels.add(generateMultiTimeSeriesPanel(dbId, tableName, col.getInternalName(), numColumns)); + } + } + + rowPanels.add(new RowPanel(tableName, tablePanels).getConstructedPanel()); + AbstractPanel.markNewRow(); + } + + int refreshRate = defaultRefreshrate; + if (dashboardConfigDto.getRefreshRate() != null) { + refreshRate = dashboardConfigDto.getRefreshRate(); + } + + Dashboard d = new Dashboard(); + String dashboardJson = d.getDashboard(rowPanels, dbId, refreshRate); + + String relativeUrl = createDashboard(dashboardJson); + + return String.format("%s:%s%s%n", baseUrl, grafanaPort, relativeUrl); + } + + private String generateCntAllPanel(Long dbId, String tableName) { + Long viewId = this.viewGeneratorService.genCntAllView(dbId, tableName, this.token); + + CntAllPanel panel = new CntAllPanel(dbId, viewId); + return panel.getConstructedPanel(); + } + + private String generatePieChartPanel(Long dbId, String tableName, String colName, PieChartConfigDto config) { + Long viewId = this.viewGeneratorService.genPieChartView(dbId, tableName, colName, config, this.token); + PieChartPanel panel = new PieChartPanel(dbId, viewId, colName, config); + return panel.getConstructedPanel(); + } + + private String generateTablePanel(Long dbId, Long tId, String tableName, Long size) { + TablePanel panel = new TablePanel(dbId, tId, tableName, size); + return panel.getConstructedPanel(); + } + + private String generateHistogramPanel(Long dbId, String tableName, String colName, HistogramConfigDto config) { + Long viewId = this.viewGeneratorService.genHistogramView(dbId, tableName, colName, this.token); + HistogramPanel panel = new HistogramPanel(dbId, viewId, colName, config); + return panel.getConstructedPanel(); + } + + private String generateStatsPanel(Long dbId, Long tId, String tableName) { + StatsPanel panel = new StatsPanel(dbId, tId, tableName); + return panel.getConstructedPanel(); + } + + private String generateTimeSeriesPanel(Long dbId, String tableName, String valueName, Map<String, String> timeMap, Long size) { + Long viewId = this.viewGeneratorService.genTimeSeriesView(dbId, tableName, timeMap, this.token); + TimeSeriesPanel panel = new TimeSeriesPanel(dbId, viewId, valueName, size); + return panel.getConstructedPanel(); + } + + private String generateMultiTimeSeriesPanel(Long dbId, String tableName, String timeCol, List<String> numValues) { + Long viewId = this.viewGeneratorService.genMultiTimeSeriesView(dbId, tableName, timeCol, numValues, this.token); + MultiTimeSeriesPanel panel = new MultiTimeSeriesPanel(dbId, viewId); + return panel.getConstructedPanel(); + } + + private boolean isNumericalColumn(ColumnTypeDto type) { + return switch (type) { + case TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL -> true; + default -> false; + }; + } + + private boolean isStringColumn(ColumnTypeDto type) { + return switch (type) { + case CHAR, VARCHAR, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT -> true; + default -> false; + }; + } + + private boolean isTimeStamp(ColumnTypeDto type) { + return switch (type) { + case TIMESTAMP -> true; + default -> false; + }; + } + + private void addDatasourceIfNotPresent() { + String jsonString = dataSourceService.getDatasource(); + ObjectMapper objectMapper = new ObjectMapper(); + try { + JsonNode rootNode = objectMapper.readTree(jsonString); + + if (rootNode.isArray()) { + for (JsonNode node : rootNode) { + if (node.has("uid") && node.get("uid").asText().equals(AbstractPanel.DATASRC_UID)) { + return; + } + } + } + + dataSourceService.addDatasource(); + } catch (Exception e) { + log.error("failed to read json of datasource"); + throw new JsonProcessingException("Failed to process datasource json"); + } + } + + private void addTimeSeriesPanel(Long dbId, Long tId, String tableName, List<ColumnDto> columns, + Map<Long, List<TimeSeriesDto>> timeSeriesMap, List<String> tablePanels) { + List<TimeSeriesDto> timeSeriesDtos = timeSeriesMap.get(tId); + + for (TimeSeriesDto timeSeriesDto : timeSeriesDtos) { + TimeDto timeDto = timeSeriesDto.getTimeDto(); + + Map<String, String> timeMap = new HashMap<>(); + String valueName = null; + if (timeDto != null) { + + for (var col : columns) { + Long colId = col.getId(); + String colName = col.getInternalName(); + + if (Objects.equals(timeDto.getYearColId(), colId)) { + timeMap.put(TIME_YEAR_COL, colName); + } else if (Objects.equals(timeDto.getMonthColId(), colId)) { + timeMap.put(TIME_MONTH_COL, colName); + } else if (Objects.equals(timeDto.getDayColId(), colId)) { + timeMap.put(TIME_DAY_COL, colName); + } else if (Objects.equals(timeDto.getHourColId(), colId)) { + timeMap.put(TIME_HOUR_COL, colName); + } else if (Objects.equals(timeDto.getMinuteColId(), colId)) { + timeMap.put(TIME_MIN_COL, colName); + } else if (Objects.equals(timeDto.getSecondColId(), colId)) { + timeMap.put(TIME_SECOND_COL, colName); + } else if (Objects.equals(timeSeriesDto.getValueColId(), colId)) { + valueName = colName; + timeMap.put(TIME_VAL_COL, valueName); + } + } + + if (!timeMap.isEmpty()) { + tablePanels.add(generateTimeSeriesPanel(dbId, tableName, valueName, timeMap, timeSeriesDto.getSize())); + } + } + } + } + + private String checkForSync(Long dbId) { + String path = String.format("/api/dashboards/uid/%d", dbId); + + ResponseEntity<String> responseEntity = null; + try { + responseEntity = grafanaRestTemplate.exchange( + path, + HttpMethod.GET, + null, + String.class + ); + + if (responseEntity.getStatusCode() == HttpStatus.OK) { + log.debug("dashboard with id {} already present", dbId); + + ObjectMapper mapper = new ObjectMapper(); + JsonNode rootNode = mapper.readTree(responseEntity.getBody()); + + return rootNode.get("meta").get("url").asText(); + } + } catch (RestClientException e) { + + if (e.getMessage().startsWith("404")) { + log.debug("dashboard with id {} not present", dbId); + return null; + } + + log.error("RestClient Exception occurred URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.GET, e); + throw new ResourceAccessException("RestClient Exception occurred"); + } catch (Exception e) { + log.error("Exception occurred, URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.GET, e); + throw new ResourceAccessException("Exception occurred"); + } + + return null; + } + + private String createDashboard(String dashboardJson) { + String path = "/api/dashboards/db"; + + HttpEntity<String> requestEntity = new HttpEntity<>(dashboardJson); + + try { + ResponseEntity<String> responseEntity = grafanaRestTemplate.exchange( + path, + HttpMethod.POST, + requestEntity, + String.class + ); + + ObjectMapper mapper = new ObjectMapper(); + String jsonString = responseEntity.getBody(); + JsonNode rootNode = mapper.readTree(jsonString); + + return rootNode.get("url").asText(); + + } catch (ResourceAccessException e) { + log.error("Resource access error for accessing URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Resource access error occurred"); + } catch (RestClientException e) { + log.error("RestClient Exception occurred URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("RestClient Exception occurred"); + } catch (Exception e) { + log.error("Exception occurred, URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Exception occurred"); + } + } + +} \ No newline at end of file diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/DataServiceImpl.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/DataServiceImpl.java new file mode 100644 index 0000000000..797483b042 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/DataServiceImpl.java @@ -0,0 +1,405 @@ +package at.tuwien.service.impl; + +import at.tuwien.api.database.query.QueryResultDto; +import at.tuwien.api.database.table.TableStatisticDto; +import at.tuwien.api.database.table.columns.ColumnStatisticDto; +import at.tuwien.panels.StatsPanel; +import at.tuwien.service.DataService; +import at.tuwien.service.TableService; +import lombok.extern.log4j.Log4j2; +import org.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +import static at.tuwien.panels.MultiTimeSeriesPanel.*; +import static at.tuwien.panels.PieChartPanel.VIEW_PIE_PERCENTAGE_COL; +import static at.tuwien.panels.TimeSeriesPanel.*; + +@Log4j2 +@Service +public class DataServiceImpl implements DataService { + private final RestTemplate dataRestTemplate; + private final TableService tableService; + private final RestTemplate grafanaRestTemplate; + + @Autowired + public DataServiceImpl(@Qualifier("dataServiceRestTemplate") RestTemplate dataRestTemplate, + @Qualifier("grafanaTemplate") RestTemplate grafanaRestTemplate, + TableService tableService) { + this.dataRestTemplate = dataRestTemplate; + this.grafanaRestTemplate = grafanaRestTemplate; + this.tableService = tableService; + } + + @Override + public Map<String, Object> getPieChartData(Long dbId, Long viewId, Long size) { + + Long page = 0L; + String path = String.format("/api/database/%d/view/%d/data?page=%d&size=%d", dbId, viewId, page, size); + + try { + ResponseEntity<QueryResultDto> responseEntity = dataRestTemplate.exchange( + path, + HttpMethod.GET, + null, + QueryResultDto.class + ); + QueryResultDto queryResultDto = responseEntity.getBody(); + assert queryResultDto != null; + + List<Map<String, Object>> res = queryResultDto.getResult(); + Map<String, Object> pieDataMap = new HashMap<>(); + double sum = 0; + + for (Map<String, Object> map : res) { + String key = null; + Object value = null; + + for (Map.Entry<String, Object> entry : map.entrySet()) { + if (!entry.getKey().equals(VIEW_PIE_PERCENTAGE_COL)) { // string column + key = (String) entry.getValue(); + } else { + value = entry.getValue(); + sum += (double) value; + } + } + + if (key != null && value != null) { + pieDataMap.put(key, value); + } + } + + pieDataMap.put("Others", 100 - sum); + return pieDataMap; + } catch (ResourceAccessException e) { + log.error("Resource access error for accessing URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Resource access error occurred"); + } catch (RestClientException e) { + log.error("RestClient Exception occurred URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("RestClient Exception occurred"); + } catch (Exception e) { + log.error("Exception occurred, URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Exception occurred"); + } + } + + @Override + public Map<String, Object> getCntAllData(Long dbId, Long viewId) { + + String path = String.format("/api/database/%d/view/%d/data", dbId, viewId); + + try { + ResponseEntity<QueryResultDto> responseEntity = dataRestTemplate.exchange( + path, + HttpMethod.GET, + null, + QueryResultDto.class + ); + QueryResultDto queryResultDto = responseEntity.getBody(); + assert queryResultDto != null; + return queryResultDto.getResult().get(0); + } catch (ResourceAccessException e) { + log.error("Resource access error for accessing URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Resource access error occurred"); + } catch (RestClientException e) { + log.error("RestClient Exception occurred URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("RestClient Exception occurred"); + } catch (Exception e) { + log.error("Exception occurred, URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Exception occurred"); + } + } + + @Override + public List<Map<String, Object>> getTableData(Long dbId, Long tableId, Long size) { + return tableService.getTableData(dbId, tableId, size); + } + + @Override + public Map<String, List<Object>> getHistogramData(Long dbId, Long viewId, Long size) { + + Long page = 0L; + String path = String.format("/api/database/%d/view/%d/data?page=%d&size=%d", dbId, viewId, page, size); + + try { + ResponseEntity<QueryResultDto> responseEntity = dataRestTemplate.exchange( + path, + HttpMethod.GET, + null, + QueryResultDto.class + ); + QueryResultDto queryResultDto = responseEntity.getBody(); + assert queryResultDto != null; + + List<Map<String, Object>> resultMap = queryResultDto.getResult(); + List<Object> valueList = new ArrayList<>(); + + for (Map<String, Object> map : resultMap) { + if (!map.isEmpty()) { + valueList.add(map.entrySet().iterator().next().getValue()); + } + } + + return Map.of("values", valueList); + } catch (ResourceAccessException e) { + log.error("Resource access error for accessing URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Resource access error occurred"); + } catch (RestClientException e) { + log.error("RestClient Exception occurred URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("RestClient Exception occurred"); + } catch (Exception e) { + log.error("Exception occurred, URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Exception occurred"); + } + } + + @Override + public List<Map<String, Object>> getStatsData(Long dbId, Long tableId) { + + String path = String.format("/api/database/%d/table/%d/statistic", dbId, tableId); + + try { + ResponseEntity<TableStatisticDto> responseEntity = dataRestTemplate.exchange( + path, + HttpMethod.GET, + null, + TableStatisticDto.class + ); + TableStatisticDto columnStatisticDto = responseEntity.getBody(); + assert columnStatisticDto != null; + Map<String, ColumnStatisticDto> map = columnStatisticDto.getColumns(); + + map = map.entrySet().stream() + .filter(entry -> entry.getValue().getMin() != null) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + List<Map<String, Object>> res = new ArrayList<>(); + Map<String, Object> row; + for (Map.Entry<String, ColumnStatisticDto> entry : map.entrySet()) { + row = new HashMap<>(); + + row.put(StatsPanel.HEADER_COL, entry.getKey()); + row.put(StatsPanel.HEADER_MIN, entry.getValue().getMin()); + row.put(StatsPanel.HEADER_MAX, entry.getValue().getMax()); + row.put(StatsPanel.HEADER_AVG, entry.getValue().getMedian()); + row.put(StatsPanel.HEADER_STDDEV, entry.getValue().getStdDev()); + + res.add(row); + } + + return res; + } catch (ResourceAccessException e) { + log.error("Resource access error for accessing URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Resource access error occurred"); + } catch (RestClientException e) { + log.error("RestClient Exception occurred URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("RestClient Exception occurred"); + } catch (Exception e) { + log.error("Exception occurred, URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Exception occurred"); + } + } + + @Override + public Map<String, List<Map<String, Object>>> getTimeSeriesData(Long dbId, Long viewId, Long size) { + + Long page = 0L; + String path = String.format("/api/database/%d/view/%d/data?page=%d&size=%d", dbId, viewId, page, size); + + try { + ResponseEntity<QueryResultDto> responseEntity = dataRestTemplate.exchange( + path, + HttpMethod.GET, + null, + QueryResultDto.class + ); + QueryResultDto queryResultDto = responseEntity.getBody(); + assert queryResultDto != null; + + List<Map<String, Object>> resultMap = queryResultDto.getResult(); + + + Map<String, List<Map<String, Object>>> res = new HashMap<>(); + res.put("time_series", formatTimeData(resultMap)); + + return res; + } catch (ResourceAccessException e) { + log.error("Resource access error for accessing URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Resource access error occurred"); + } catch (RestClientException e) { + log.error("RestClient Exception occurred URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("RestClient Exception occurred"); + } catch (Exception e) { + log.error("Exception occurred, URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Exception occurred"); + } + } + + public Map<String, List<Map<String, Object>>> getMultiTimeSeriesData(Long dbId, Long viewId, Long size) { + Long page = 0L; + String path = String.format("/api/database/%d/view/%d/data?page=%d&size=%d", dbId, viewId, page, size); + + try { + ResponseEntity<QueryResultDto> responseEntity = dataRestTemplate.exchange( + path, + HttpMethod.GET, + null, + QueryResultDto.class + ); + QueryResultDto queryResultDto = responseEntity.getBody(); + assert queryResultDto != null; + + List<Map<String, Object>> resultMap = queryResultDto.getResult(); + List<Map<String, Object>> timeMap = new ArrayList<>(); + + for (Map<String, Object> map : resultMap) { + Object time = map.get(VIEW_MULTI_TIMECOL); + + for (Map.Entry<String, Object> entry : map.entrySet()) { + Map<String, Object> multiTimeEntry = new HashMap<>(); + if (!entry.getKey().equals(VIEW_MULTI_TIMECOL)) { + multiTimeEntry.put(VIEW_MULTI_SELECTOR_NAME, entry.getKey()); + multiTimeEntry.put(VIEW_MULTI_SELECTOR_VALUE, entry.getValue()); + multiTimeEntry.put(VIEW_MULTI_SELECTOR_TIME, time); + + timeMap.add(multiTimeEntry); + } + } + } + Map<String, List<Map<String, Object>>> res = new HashMap<>(); + res.put("time_series", timeMap); + + return res; + } catch (ResourceAccessException e) { + log.error("Resource access error for accessing URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Resource access error occurred"); + } catch (RestClientException e) { + log.error("RestClient Exception occurred URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("RestClient Exception occurred"); + } catch (Exception e) { + log.error("Exception occurred, URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Exception occurred"); + } + } + + private List<Map<String, Object>> formatTimeData(List<Map<String, Object>> resultMap) { + int year, month, day, hour, min, sec; + Object val; + + List<Map<String, Object>> timeValues = new ArrayList<>(); + Map<String, Object> timeValue; + + for (Map<String, Object> map : resultMap) { + year = 0; + month = 1; + day = 1; + hour = 0; + min = 0; + sec = 0; + val = null; + timeValue = new HashMap<>(); + + if(map.containsKey(TIME_YEAR_COL)) { + Object y = map.get(TIME_YEAR_COL); + if (y instanceof Integer) { + year = (int) y; + } + } + + if(map.containsKey(TIME_MONTH_COL)) { + Object m = map.get(TIME_MONTH_COL); + if (m instanceof String) { + month = getMonth(m.toString()); + } else if (m instanceof Integer) { + month = (int) m; + } + } + + if(map.containsKey(TIME_DAY_COL)) { + Object d = map.get(TIME_DAY_COL); + if (d instanceof Integer) { + day = (int) d; + } + } + + if(map.containsKey(TIME_HOUR_COL)) { + Object h = map.get(TIME_HOUR_COL); + if (h instanceof Integer) { + hour = (int) h; + } + } + + if(map.containsKey(TIME_MIN_COL)) { + Object m = map.get(TIME_MIN_COL); + if (m instanceof Integer) { + min = (int) m; + } + } + + if(map.containsKey(TIME_SECOND_COL)) { + Object s = map.get(TIME_SECOND_COL); + if (s instanceof Integer) { + sec = (int) s; + } + } + + if(map.containsKey(TIME_VAL_COL)) { + val = map.get(TIME_VAL_COL); + } + + timeValue.put("time", String.format("%d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, min, sec)); + timeValue.put("value", val); + timeValues.add(timeValue); + } + + return timeValues; + } + + private int getMonth(String month) { + return switch (month.toLowerCase()) { + case "february" -> 2; + case "march" -> 3; + case "april" -> 4; + case "may" -> 5; + case "june" -> 6; + case "july" -> 7; + case "august" -> 8; + case "september" -> 9; + case "october" -> 10; + case "november" -> 11; + case "december" -> 12; + default -> 1; + }; + } +} diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/DataSourceServiceImpl.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/DataSourceServiceImpl.java new file mode 100644 index 0000000000..f4fde957b3 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/DataSourceServiceImpl.java @@ -0,0 +1,99 @@ +package at.tuwien.service.impl; + +import at.tuwien.api.database.query.QueryResultDto; +import at.tuwien.panels.AbstractPanel; +import at.tuwien.service.DataService; +import at.tuwien.service.DataSourceService; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.*; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.Map; + +@Log4j2 +@Service +public class DataSourceServiceImpl implements DataSourceService { + + private final RestTemplate grafanaRestTemplate; + private String addDatasourceJSON = "{\n" + + " \"id\": null,\n" + + " \"uid\": \"" + AbstractPanel.DATASRC_UID + "\",\n" + + " \"name\": \"infinity datasource\",\n" + + " \"type\": \"yesoreyeram-infinity-datasource\",\n" + + " \"access\": \"proxy\"\n" + + "}"; + + @Autowired + public DataSourceServiceImpl(@Qualifier("grafanaTemplate") RestTemplate grafanaRestTemplate) { + this.grafanaRestTemplate = grafanaRestTemplate; + } + + @Override + public String addDatasource() { + String path = "/api/datasources"; + + HttpEntity<String> requestEntity = new HttpEntity<>(addDatasourceJSON); + + try { + ResponseEntity<String> responseEntity = grafanaRestTemplate.exchange( + path, + HttpMethod.POST, + requestEntity, + String.class + ); + return responseEntity.getBody(); + } catch (ResourceAccessException e) { + log.error("Resource access error for accessing URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Resource access error occurred"); + } catch (RestClientException e) { + log.error("RestClient Exception occurred URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("RestClient Exception occurred"); + } catch (Exception e) { + log.error("Exception occurred, URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Exception occurred"); + } + } + + @Override + public String getDatasource() { + String path = "/api/datasources"; + + try { + ResponseEntity<String> responseEntity = grafanaRestTemplate.exchange( + path, + HttpMethod.GET, + null, + String.class + ); + + return responseEntity.getBody(); + } catch (ResourceAccessException e) { + log.error("Resource access error for accessing URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Resource access error occurred"); + } catch (RestClientException e) { + log.error("RestClient Exception occurred URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("RestClient Exception occurred"); + } catch (Exception e) { + log.error("Exception occurred, URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Exception occurred"); + } + } + +} \ No newline at end of file diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/TableServiceImpl.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/TableServiceImpl.java new file mode 100644 index 0000000000..a3c8fc8622 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/TableServiceImpl.java @@ -0,0 +1,121 @@ +package at.tuwien.service.impl; + +import at.tuwien.api.database.query.QueryResultDto; +import at.tuwien.api.database.table.TableBriefDto; +import at.tuwien.api.database.table.TableDto; +import at.tuwien.service.TableService; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.*; +import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.*; +import org.springframework.web.util.UriComponentsBuilder; + +import java.util.*; + +@Log4j2 +@Service +public class TableServiceImpl implements TableService { + private final RestTemplate dataRestTemplate; + private final RestTemplate metaDataRestTemplate; + + @Autowired + public TableServiceImpl(@Qualifier("dataServiceRestTemplate") RestTemplate dataRestTemplate, + @Qualifier("metaDataServiceRestTemplate") RestTemplate metaDataRestTemplate) { + this.dataRestTemplate = dataRestTemplate; + this.metaDataRestTemplate = metaDataRestTemplate; + } + + @Override + public List<TableBriefDto> getAllTables(Long dbId) { + String path = String.format("/api/database/%d/table", dbId); + + try { + ResponseEntity<List<TableBriefDto>> responseEntity = metaDataRestTemplate.exchange( + path, + HttpMethod.GET, + null, + new ParameterizedTypeReference<List<TableBriefDto>>() {} + ); + return responseEntity.getBody(); + } catch (ResourceAccessException e) { + log.error("Resource access error for accessing URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Resource access error occurred"); + } catch (RestClientException e) { + log.error("RestClient Exception occurred URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("RestClient Exception occurred"); + } catch (Exception e) { + log.error("Exception occurred, URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Exception occurred"); + } + } + + + @Override + public TableDto getTableSchemas(Long dbId, Long tId) { + String path = String.format("/api/database/%d/table/%d", dbId, tId); + try { + ResponseEntity<TableDto> responseEntity = metaDataRestTemplate.exchange( + path, + HttpMethod.GET, + null, + TableDto.class + ); + + return responseEntity.getBody(); + } catch (ResourceAccessException e) { + log.error("Resource access error for accessing URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Resource access error occurred"); + } catch (RestClientException e) { + log.error("RestClient Exception occurred URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("RestClient Exception occurred"); + } catch (Exception e) { + log.error("Exception occurred, URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Exception occurred"); + } + } + + @Override + public List<Map<String, Object>> getTableData(Long dbId, Long tId, Long size) { + Long page = 0L; + String path = String.format("/api/database/%d/table/%d/data?page=%d&size=%d", dbId, tId, page, size); + + try { + // Send GET request with query parameters + ResponseEntity<QueryResultDto> responseEntity = dataRestTemplate.exchange( + path, + HttpMethod.GET, + null, + QueryResultDto.class + ); + + QueryResultDto responseBody = responseEntity.getBody(); + + return responseBody.getResult(); + + } catch (ResourceAccessException e) { + log.error("Resource access error for accessing URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Resource access error occurred"); + } catch (RestClientException e) { + log.error("RestClient Exception occurred URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("RestClient Exception occurred"); + } catch (Exception e) { + log.error("Exception occurred, URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Exception occurred"); + } + } + +} \ No newline at end of file diff --git a/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/ViewGeneratorServiceImpl.java b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/ViewGeneratorServiceImpl.java new file mode 100644 index 0000000000..baa258460c --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/java/at/tuwien/service/impl/ViewGeneratorServiceImpl.java @@ -0,0 +1,225 @@ +package at.tuwien.service.impl; + +import at.tuwien.api.database.ViewBriefDto; +import at.tuwien.api.database.ViewCreateDto; +import at.tuwien.dto.PieChartConfigDto; +import at.tuwien.panels.StatsPanel; +import at.tuwien.service.ViewGeneratorService; +import lombok.extern.log4j.Log4j2; +import org.apache.commons.text.StringSubstitutor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static at.tuwien.panels.MultiTimeSeriesPanel.VIEW_MULTI_TIMECOL; +import static at.tuwien.panels.PieChartPanel.VIEW_PIE_PERCENTAGE_COL; +import static at.tuwien.panels.TimeSeriesPanel.TIME_VAL_COL; + +@Log4j2 +@Service +public class ViewGeneratorServiceImpl implements ViewGeneratorService { + + private final RestTemplate metaDataRestTemplate; + private static final String PIE_DEFAULT_LIMIT = "10"; + private static final String PIE_DEFAULT_DEC_PLACE = "2"; + + @Autowired + public ViewGeneratorServiceImpl(@Qualifier("metaDataServiceRestTemplate") RestTemplate metaDataRestTemplate) { + this.metaDataRestTemplate = metaDataRestTemplate; + } + + @Override + public Long genCntAllView(Long dbId, String tableName, String token) { + final String query = String.format("select count(*) from %s", tableName); + + ViewCreateDto viewCreateDto = new ViewCreateDto(); + viewCreateDto.setName(String.format("%d_cntAll_%s", dbId, tableName)); + viewCreateDto.setQuery(query); + viewCreateDto.setIsPublic(true); + + ViewBriefDto createdView = createView(dbId, viewCreateDto, token); + if (createdView == null) { + log.warn("failed to create view {}", viewCreateDto); + return -1L; + } + + return createdView.getId(); + } + + @Override + public Long genPieChartView(Long dbId, String tableName, String colName, PieChartConfigDto config, String token) { + Map<String, String> valueMap = new HashMap<>(); + valueMap.put("col_name", colName); + valueMap.put("table_name", tableName); + valueMap.put("limit", (config != null && config.getLimit() != null) ? config.getLimit() : PIE_DEFAULT_LIMIT); + valueMap.put("dec_place", (config != null && config.getDecimalPlace() != null) ? config.getDecimalPlace() : PIE_DEFAULT_DEC_PLACE); + valueMap.put("percentage", VIEW_PIE_PERCENTAGE_COL); + + final String templateQuery = + "SELECT\n" + + " ${col_name},\n" + + " ROUND( (COUNT(*) / total_count) * 100, ${dec_place}) AS ${percentage}\n" + + " FROM\n" + + " ${table_name},\n" + + " (SELECT COUNT(*) AS total_count FROM ${table_name}) AS t\n" + + " GROUP BY\n" + + " ${col_name}\n" + + " ORDER BY\n" + + " ${percentage} DESC\n" + + " LIMIT ${limit}"; + + StringSubstitutor sub = new StringSubstitutor(valueMap); + + ViewCreateDto viewCreateDto = new ViewCreateDto(); + viewCreateDto.setName(String.format("%d_piechart_%s_%s", dbId, tableName, colName)); + viewCreateDto.setQuery(sub.replace(templateQuery)); + viewCreateDto.setIsPublic(true); + + ViewBriefDto createdView = createView(dbId, viewCreateDto, token); + if (createdView == null) { + log.warn("failed to create view {}", viewCreateDto); + return -1L; + } + + return createdView.getId(); + } + + @Override + public Long genHistogramView(Long dbId, String tableName, String colName, String token) { + final String query = String.format("select %s from %s", colName, tableName); + + ViewCreateDto viewCreateDto = new ViewCreateDto(); + viewCreateDto.setName(String.format("%d_histogram_%s_%s", dbId, tableName, colName)); + viewCreateDto.setQuery(query); + viewCreateDto.setIsPublic(true); + + ViewBriefDto createdView = createView(dbId, viewCreateDto, token); + if (createdView == null) { + log.warn("failed to create view {}", viewCreateDto); + return -1L; + } + + return createdView.getId(); + } + + @Override + public Long genStatisticsView(Long dbId, String tableName, String colName, String token) { + Map<String, String> valueMap = new HashMap<>(); + valueMap.put("col_name", colName); + valueMap.put("table_name", tableName); + valueMap.put("header_col", StatsPanel.HEADER_COL); + valueMap.put("header_min", StatsPanel.HEADER_MIN); + valueMap.put("header_max", StatsPanel.HEADER_MAX); + valueMap.put("header_avg", StatsPanel.HEADER_AVG); + valueMap.put("header_stddev", StatsPanel.HEADER_STDDEV); + + final String templateQuery = "select " + + "min(${col_name}) as ${header_min}, " + + "max(${col_name}) as ${header_max}, " + + "avg(${col_name}) as ${header_avg}, " + + "STDDEV(${col_name}) as ${header_stddev} " + + "from ${table_name}"; + + StringSubstitutor sub = new StringSubstitutor(valueMap); + + ViewCreateDto viewCreateDto = new ViewCreateDto(); + viewCreateDto.setName(String.format("%d_statschart_%s_%s", dbId, tableName, colName)); + viewCreateDto.setQuery(sub.replace(templateQuery)); + viewCreateDto.setIsPublic(true); + + ViewBriefDto createdView = createView(dbId, viewCreateDto, token); + if (createdView == null) { + log.warn("failed to create view {}", viewCreateDto); + return -1L; + } + + return createdView.getId(); + } + + @Override + public Long genTimeSeriesView(Long dbId, String tableName, Map<String, String> timeMap, String token) { + + List<String> colNames = new ArrayList<>(); + for (Map.Entry<String, String> entry : timeMap.entrySet()) { + colNames.add(String.format("%s AS %s", entry.getValue(), entry.getKey())); + } + + final String query = String.format("select %s from %s", String.join(",", colNames), tableName); + + ViewCreateDto viewCreateDto = new ViewCreateDto(); + viewCreateDto.setName(String.format("%d_timeseries_%s_%s", dbId, tableName, timeMap.get(TIME_VAL_COL))); + viewCreateDto.setQuery(query); + viewCreateDto.setIsPublic(true); + + ViewBriefDto createdView = createView(dbId, viewCreateDto, token); + if (createdView == null) { + log.warn("failed to create view {}", viewCreateDto); + return -1L; + } + + return createdView.getId(); + } + + @Override + public Long genMultiTimeSeriesView(Long dbId, String tableName, String timeCol, List<String> numValues, String token) { + + final String query = String.format("select %s AS %s, %s from %s", timeCol, VIEW_MULTI_TIMECOL, String.join(",", numValues), tableName); + ViewCreateDto viewCreateDto = new ViewCreateDto(); + viewCreateDto.setName(String.format("%d_multitimeseries_%s_%s", dbId, tableName, timeCol)); + viewCreateDto.setQuery(query); + viewCreateDto.setIsPublic(true); + + ViewBriefDto createdView = createView(dbId, viewCreateDto, token); + if (createdView == null) { + log.warn("failed to create view {}", viewCreateDto); + return -1L; + } + + return createdView.getId(); + } + + + private ViewBriefDto createView(Long dbId, ViewCreateDto viewCreateDto, String token) { + String path = String.format("/api/database/%d/view", dbId); + + HttpHeaders headers = new HttpHeaders(); + headers.set("Authorization", token); + headers.set("Content-Type", "application/json"); + + HttpEntity<ViewCreateDto> requestEntity = new HttpEntity<>(viewCreateDto, headers); + + try { + ResponseEntity<ViewBriefDto> responseEntity = metaDataRestTemplate.exchange( + path, + HttpMethod.POST, + requestEntity, + ViewBriefDto.class + ); + + return responseEntity.getBody(); + } catch (ResourceAccessException e) { + log.error("Resource access error for accessing URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Resource access error occurred"); + } catch (RestClientException e) { + log.error("RestClient Exception occurred URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("RestClient Exception occurred"); + } catch (Exception e) { + log.error("Exception occurred, URL: {}, Exception message: {}, Request method: {}, Stack Trace: {}", + path, e.getMessage(), HttpMethod.POST, e); + throw new ResourceAccessException("Exception occurred"); + } + } + +} \ No newline at end of file diff --git a/dbrepo-grafana-service/rest-service/src/main/resources/application-local.yml b/dbrepo-grafana-service/rest-service/src/main/resources/application-local.yml new file mode 100644 index 0000000000..8e99c2d0a9 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/resources/application-local.yml @@ -0,0 +1,89 @@ +application: + title: DBRepo + version: '@project.version@' +spring: + datasource: + url: jdbc:h2:mem:fda;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA;NON_KEYWORDS=value + driver-class-name: org.h2.Driver + username: sa + password: password + rabbitmq: + host: "${BROKER_HOST:broker-service}" + virtual-host: "${BROKER_VIRTUALHOST:dbrepo}" + password: "${BROKER_PASSWORD:fda}" + username: "${BROKER_USERNAME:fda}" + port: ${BROKER_PORT:5672} + jpa: + show-sql: false + database-platform: org.hibernate.dialect.H2Dialect + open-in-view: false + properties: + hibernate: + default_schema: fda + jdbc: + time_zone: UTC + application: + name: grafana-service + main: + banner-mode: off +management: + endpoints: + web: + exposure: + include: health,info,prometheus + endpoint: + health: + probes: + enabled: true + health: + readinessState: + enabled: true + livenessState: + enabled: true +server: + port: 1880 +logging: + pattern.console: "%d %highlight(%-5level) %msg%n" + level: + root: debug + at.tuwien.: "${LOG_LEVEL:info}" + org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug +dbrepo: + endpoints: + grafana: http://grafana:3000 + dataService: http://data-service:8080 + gatewayService: "${GATEWAY_SERVICE_ENDPOINT:http://gateway-service}" + storageService: "${S3_ENDPOINT:http://storage-service:9000}" + authService: "${AUTH_SERVICE_HOST:http://auth-service:8080}" + s3: + accessKeyId: "${S3_ACCESS_KEY_ID:seaweedfsadmin}" + secretAccessKey: "${S3_SECRET_ACCESS_KEY:seaweedfsadmin}" + importBucket: "${S3_IMPORT_BUCKET:dbrepo-upload}" + exportBucket: "${S3_EXPORT_BUCKET:dbrepo-download}" + filePath: "${S3_FILE_PATH:/tmp}" + admin: + username: "${ADMIN_USERNAME:admin}" + password: "${ADMIN_PASSWORD:admin}" + jwt: + public_key: "${JWT_PUBKEY:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB}" + keycloak: + username: "${AUTH_SERVICE_ADMIN:fda}" + password: "${AUTH_SERVICE_ADMIN_PASSWORD:fda}" + client: "${AUTH_SERVICE_CLIENT:dbrepo-client}" + clientSecret: "${AUTH_SERVICE_CLIENT_SECRET:MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG}" + sql: + forbidden: "${NOT_SUPPORTED_KEYWORDS:\\*,AVG,BIT_AND,BIT_OR,BIT_XOR,COUNT,COUNTDISTINCT,GROUP_CONCAT,JSON_ARRAYAGG,JSON_OBJECTAGG,MAX,MIN,STD,STDDEV,STDDEV_POP,STDDEV_SAMP,SUM,VARIANCE,VAR_POP,VAR_SAMP,--}" + grant: + default: + read: "${GRANT_DEFAULT_READ:SELECT}" + write: "${GRANT_DEFAULT_WRITE:SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE}" + minConcurrent: "${MIN_CONCURRENT_CONSUMERS:2}" + maxConcurrent: "${MAX_CONCURRENT_CONSUMERS:6}" + requeueRejected: ${REQUEUE_REJECTED:false} + queueName: "${BROKER_QUEUE_NAME:dbrepo}" + exchangeName: "${BROKER_EXCHANGE_NAME:dbrepo}" + routingKey: "${BROKER_ROUTING_KEY:#}" + connectionTimeout: ${CONNECTION_TIMEOUT:10000} + defaultDateFormatId: "${DEFAULT_DATE_FORMAT_ID:3}" + defaultTimeFormatId: "${DEFAULT_TIME_FORMAT_ID:4}" + defaultTimestampFormatId: "${DEFAULT_TIMESTAMP_FORMAT_ID:1}" diff --git a/dbrepo-grafana-service/rest-service/src/main/resources/application.yml b/dbrepo-grafana-service/rest-service/src/main/resources/application.yml new file mode 100644 index 0000000000..b8fcf710c7 --- /dev/null +++ b/dbrepo-grafana-service/rest-service/src/main/resources/application.yml @@ -0,0 +1,107 @@ +application: + title: DBRepo + version: '@project.version@' + baseurl: ${BASE_URL:http://localhost} +spring: + datasource: + url: jdbc:h2:mem:fda;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA;NON_KEYWORDS=value + driver-class-name: org.h2.Driver + username: sa + password: password + rabbitmq: + host: "${BROKER_HOST:broker-service}" + virtual-host: "${BROKER_VIRTUALHOST:dbrepo}" + password: "${BROKER_PASSWORD:fda}" + username: "${BROKER_USERNAME:fda}" + port: ${BROKER_PORT:5672} + jpa: + show-sql: false + database-platform: org.hibernate.dialect.H2Dialect + open-in-view: false + properties: + hibernate: + default_schema: fda + jdbc: + time_zone: UTC + application: + name: grafana-service + main: + banner-mode: off + data: + redis: + host: redis + port: 6379 +management: + endpoints: + web: + exposure: + include: health,info,prometheus + endpoint: + health: + probes: + enabled: true + health: + readinessState: + enabled: true + livenessState: + enabled: true +server: + port: 8080 +logging: + pattern.console: "%d %highlight(%-5level) %msg%n" + level: + root: warn + at.tuwien.: "${LOG_LEVEL:info}" + org: + springframework: + web: + client: + RestTemplate: DEBUG + org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug +dbrepo: + endpoints: + grafana: http://grafana:3000 + grafanaPort: 3000 + grafanaService: http://grafana-service:8080 + dataService: http://data-service:8080 + metadataService: http://metadata-service:8080 + gatewayService: "${GATEWAY_SERVICE_ENDPOINT:http://gateway-service}" + storageService: "${S3_ENDPOINT:http://storage-service:9000}" + authService: "${AUTH_SERVICE_HOST:http://auth-service:8080}" + s3: + accessKeyId: "${S3_ACCESS_KEY_ID:seaweedfsadmin}" + secretAccessKey: "${S3_SECRET_ACCESS_KEY:seaweedfsadmin}" + importBucket: "${S3_IMPORT_BUCKET:dbrepo-upload}" + exportBucket: "${S3_EXPORT_BUCKET:dbrepo-download}" + filePath: "${S3_FILE_PATH:/tmp}" + admin: + username: "${ADMIN_USERNAME:kper}" + password: "${ADMIN_PASSWORD:k1a1r1l1o1}" + jwt: + public_key: "${JWT_PUBKEY:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB}" + keycloak: + username: "${AUTH_SERVICE_ADMIN:fda}" + password: "${AUTH_SERVICE_ADMIN_PASSWORD:fda}" + client: "${AUTH_SERVICE_CLIENT:dbrepo-client}" + clientSecret: "${AUTH_SERVICE_CLIENT_SECRET:MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG}" + grafana: + username: "${GRAFANA_USERNAME:admin}" + password: "${GRAFANA_PASSWORD:admin}" + default_refreshrate: 0 + sql: + forbidden: "${NOT_SUPPORTED_KEYWORDS:\\*,AVG,BIT_AND,BIT_OR,BIT_XOR,COUNT,COUNTDISTINCT,GROUP_CONCAT,JSON_ARRAYAGG,JSON_OBJECTAGG,MAX,MIN,STD,STDDEV,STDDEV_POP,STDDEV_SAMP,SUM,VARIANCE,VAR_POP,VAR_SAMP,--}" + grant: + default: + read: "${GRANT_DEFAULT_READ:SELECT}" + write: "${GRANT_DEFAULT_WRITE:SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE}" + minConcurrent: "${MIN_CONCURRENT_CONSUMERS:2}" + maxConcurrent: "${MAX_CONCURRENT_CONSUMERS:6}" + requeueRejected: ${REQUEUE_REJECTED:false} + queueName: "${BROKER_QUEUE_NAME:dbrepo}" + exchangeName: "${BROKER_EXCHANGE_NAME:dbrepo}" + routingKey: "${BROKER_ROUTING_KEY:#}" + connectionTimeout: ${CONNECTION_TIMEOUT:10000} + defaultDateFormatId: "${DEFAULT_DATE_FORMAT_ID:3}" + defaultTimeFormatId: "${DEFAULT_TIME_FORMAT_ID:4}" + defaultTimestampFormatId: "${DEFAULT_TIMESTAMP_FORMAT_ID:1}" + diff --git a/dbrepo-search-service/init/omlib/__init__.py b/dbrepo-grafana-service/rest-service/src/test/resources/application.properties similarity index 100% rename from dbrepo-search-service/init/omlib/__init__.py rename to dbrepo-grafana-service/rest-service/src/test/resources/application.properties diff --git a/dbrepo-metadata-db/1_setup-schema.sql b/dbrepo-metadata-db/1_setup-schema.sql index 7e7978cad8..4ba9d70b17 100644 --- a/dbrepo-metadata-db/1_setup-schema.sql +++ b/dbrepo-metadata-db/1_setup-schema.sql @@ -52,6 +52,8 @@ CREATE TABLE IF NOT EXISTS `mdb_containers` privileged_username VARCHAR(255) NOT NULL, privileged_password VARCHAR(255) NOT NULL, quota INT, + readonly_username VARCHAR(255) NOT NULL, + readonly_password VARCHAR(255) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`image_id`) REFERENCES mdb_images (`id`) ) WITH SYSTEM VERSIONING; @@ -67,20 +69,22 @@ CREATE TABLE IF NOT EXISTS `mdb_licenses` CREATE TABLE IF NOT EXISTS `mdb_databases` ( - id VARCHAR(36) NOT NULL DEFAULT UUID(), - cid VARCHAR(36) NOT NULL, - name VARCHAR(255) NOT NULL, - internal_name VARCHAR(255) NOT NULL, - exchange_name VARCHAR(255) NOT NULL, - description TEXT, - engine VARCHAR(20), - is_public BOOLEAN NOT NULL DEFAULT TRUE, - is_schema_public BOOLEAN NOT NULL DEFAULT TRUE, - image LONGBLOB, - owned_by VARCHAR(36) NOT NULL, - contact_person VARCHAR(36) NOT NULL, - created TIMESTAMP NOT NULL DEFAULT NOW(), - last_modified TIMESTAMP, + id VARCHAR(36) NOT NULL DEFAULT UUID(), + cid VARCHAR(36) NOT NULL, + grafana_dashboard_uid character varying(255), + name VARCHAR(255) NOT NULL, + internal_name VARCHAR(255) NOT NULL, + exchange_name VARCHAR(255) NOT NULL, + description TEXT, + engine VARCHAR(20), + is_public BOOLEAN NOT NULL DEFAULT TRUE, + is_schema_public BOOLEAN NOT NULL DEFAULT TRUE, + is_dashboard_enabled BOOLEAN NOT NULL DEFAULT TRUE, + image LONGBLOB, + owned_by VARCHAR(36) NOT NULL, + contact_person VARCHAR(36) NOT NULL, + created TIMESTAMP NOT NULL DEFAULT NOW(), + last_modified TIMESTAMP, PRIMARY KEY (`id`), FOREIGN KEY (`cid`) REFERENCES mdb_containers (`id`), FOREIGN KEY (`owned_by`) REFERENCES mdb_users (`id`), @@ -291,7 +295,7 @@ CREATE TABLE IF NOT EXISTS `mdb_messages` type ENUM ('ERROR', 'WARNING', 'INFO') NOT NULL DEFAULT 'INFO', message TEXT NOT NULL, link TEXT NULL, - link_TEXT VARCHAR(255) NULL, + link_text VARCHAR(255) NULL, display_start TIMESTAMP NULL, display_end TIMESTAMP NULL, PRIMARY KEY (`id`) diff --git a/dbrepo-metadata-db/2_setup-data.sql b/dbrepo-metadata-db/2_setup-data.sql index dc4917cd8b..611efbbde1 100644 --- a/dbrepo-metadata-db/2_setup-data.sql +++ b/dbrepo-metadata-db/2_setup-data.sql @@ -1,8 +1,8 @@ BEGIN; INSERT INTO `mdb_containers` (id, name, internal_name, image_id, host, port, ui_host, ui_port, privileged_username, - privileged_password) + privileged_password, readonly_username, readonly_password) VALUES ('6cfb3b8e-1792-4e46-871a-f3d103527203', 'mariadb:11.1.3-debian-11-r6', 'mariadb_11_1_3', - 'd79cb089-363c-488b-9717-649e44d8fcc5', 'data-db', 3306, 'localhost', 3306, 'root', 'dbrepo'); + 'd79cb089-363c-488b-9717-649e44d8fcc5', 'data-db', 3306, 'localhost', 3306, 'root', 'dbrepo', 'user', 'user'); COMMIT; diff --git a/dbrepo-metadata-db/migration/16/schema.sql b/dbrepo-metadata-db/migration/16/schema.sql index 68a87f1a67..5c96c23375 100644 --- a/dbrepo-metadata-db/migration/16/schema.sql +++ b/dbrepo-metadata-db/migration/16/schema.sql @@ -376,6 +376,8 @@ ALTER TABLE mdb_users DROP SYSTEM VERSIONING; ALTER TABLE mdb_users CHANGE COLUMN id id VARCHAR(36) NOT NULL DEFAULT UUID(); +ALTER TABLE mdb_users + DROP COLUMN email; -- mdb_images ALTER TABLE mdb_images ADD PRIMARY KEY (id); diff --git a/dbrepo-metadata-db/migration/16/update_id.sql b/dbrepo-metadata-db/migration/16/update_id.sql new file mode 100644 index 0000000000..a3f161cc2a --- /dev/null +++ b/dbrepo-metadata-db/migration/16/update_id.sql @@ -0,0 +1,11 @@ +SET FOREIGN_KEY_CHECKS = 0; +BEGIN; +UPDATE mdb_users SET id = :old_id WHERE id = :new_id; +UPDATE mdb_have_access SET user_id = :old_id WHERE user_id = :new_id; +UPDATE mdb_databases SET owned_by = :old_id WHERE owned_by = :new_id; +UPDATE mdb_databases SET contact_person = :old_id WHERE contact_person = :new_id; +UPDATE mdb_tables SET owned_by = :old_id WHERE owned_by = :new_id; +UPDATE mdb_view SET owned_by = :old_id WHERE owned_by = :new_id; +UPDATE mdb_identifiers SET owned_by = :old_id WHERE owned_by = :new_id; +COMMIT; +SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file diff --git a/dbrepo-metadata-service/Dockerfile b/dbrepo-metadata-service/Dockerfile index fa92b799ee..8d01865d85 100644 --- a/dbrepo-metadata-service/Dockerfile +++ b/dbrepo-metadata-service/Dockerfile @@ -1,32 +1,27 @@ ###### FIRST STAGE ###### +FROM dbrepo-core:build AS dependency +LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" + +###### SECOND STAGE ###### FROM maven:3-amazoncorretto-17 AS build LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" COPY ./pom.xml ./ -COPY ./api/pom.xml ./api/ -COPY ./entities/pom.xml ./entities/ -COPY ./oai/pom.xml ./oai/ -COPY ./report/pom.xml ./report/ -COPY ./repositories/pom.xml ./repositories/ -COPY ./rest-service/pom.xml ./rest-service/ -COPY ./services/pom.xml ./services/ -COPY ./test/pom.xml ./test/ - -RUN mvn dependency:go-offline - -COPY ./api ./api -COPY ./entities ./entities + +RUN mvn -fn dependency:go-offline + +COPY --from=dependency /root/.m2/repository/at/ac/tuwien/ifs/dbrepo /root/.m2/repository/at/ac/tuwien/ifs/dbrepo + COPY ./oai ./oai COPY ./report ./report COPY ./repositories ./repositories COPY ./rest-service ./rest-service COPY ./services ./services -COPY ./test ./test # Make sure it compiles -RUN mvn clean install -DskipTests +RUN mvn -fn clean package -DskipTests -###### SECOND STAGE ###### +###### THIRD STAGE ###### FROM amazoncorretto:17-alpine3.19 AS runtime LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" @@ -34,6 +29,8 @@ RUN apk add --no-cache curl bash jq WORKDIR /app +RUN adduser -D dbrepo --uid 1001 + USER 1001 COPY --from=build --chown=1001 ./rest-service/target/dbrepo-metadata-service-rest-service-*.jar ./metadata-service.jar @@ -41,4 +38,6 @@ COPY --from=build --chown=1001 ./rest-service/target/dbrepo-metadata-service-res # non-root port EXPOSE 8080 -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./metadata-service.jar"] +ENV JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true" + +ENTRYPOINT exec java $JAVA_OPTS -jar ./metadata-service.jar \ No newline at end of file diff --git a/dbrepo-metadata-service/api/pom.xml b/dbrepo-metadata-service/api/pom.xml deleted file mode 100644 index 96b717f3aa..0000000000 --- a/dbrepo-metadata-service/api/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service</artifactId> - <version>1.7.3</version> - </parent> - - <artifactId>dbrepo-metadata-service-api</artifactId> - <name>dbrepo-metadata-service-api</name> - <version>1.7.3</version> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-entities</artifactId> - <version>1.7.3</version> - <scope>compile</scope> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <source>${java.version}</source> - <target>${java.version}</target> - <annotationProcessorPaths> - <path> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <version>${lombok.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ExecuteStatementDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ExecuteStatementDto.java deleted file mode 100644 index fbc8bfebe0..0000000000 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ExecuteStatementDto.java +++ /dev/null @@ -1,22 +0,0 @@ -package at.tuwien.api.database.query; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; - -import jakarta.validation.constraints.NotBlank; -import lombok.extern.jackson.Jacksonized; - -@Getter -@Setter -@Builder -@NoArgsConstructor -@AllArgsConstructor -@Jacksonized -@ToString -public class ExecuteStatementDto { - - @NotBlank - @Schema(example = "SELECT `id` FROM `air_quality`") - private String statement; - -} diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ExportDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/AffiliationDto.java similarity index 53% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ExportDto.java rename to dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/AffiliationDto.java index 36a13b3487..807c03f48d 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ExportDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/AffiliationDto.java @@ -1,7 +1,6 @@ -package at.tuwien.api.database.query; +package at.tuwien.api.doi; import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotBlank; import lombok.*; import lombok.extern.jackson.Jacksonized; @@ -13,9 +12,9 @@ import lombok.extern.jackson.Jacksonized; @AllArgsConstructor @Jacksonized @ToString -public class ExportDto { +public class AffiliationDto { + + @Schema(example = "ISE, TU Wien, Data Science Research Unit, Vienna, Austria") + private String name; - @NotBlank - @Schema(example = "/tmp/file.csv") - private String location; } diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/AuthorDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/AuthorDto.java new file mode 100644 index 0000000000..8f8bbb61ff --- /dev/null +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/AuthorDto.java @@ -0,0 +1,35 @@ +package at.tuwien.api.doi; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import lombok.extern.jackson.Jacksonized; + +import java.util.List; + +@Getter +@Setter +@Builder +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString +public class AuthorDto { + + @Schema(example = "Weise") + private String family; + + @Schema(example = "Martin") + private String given; + + @JsonProperty("ORCID") + @Schema(example = "http://orcid.org/0000-0003-4216-302X") + private String orcid; + + @Schema(example = "first") + private String sequence; + + private List<AffiliationDto> affiliation; + +} diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/DoiDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/DoiDto.java new file mode 100644 index 0000000000..af0cd5bcc6 --- /dev/null +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/DoiDto.java @@ -0,0 +1,82 @@ +package at.tuwien.api.doi; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.*; +import lombok.extern.jackson.Jacksonized; + +import java.util.List; + +@Getter +@Setter +@Builder +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString +public class DoiDto { + + @NotNull + @Schema(example = "https://doi.org/10.5334/dsj-2022-004") + private String id; + + @NotNull + private TimeRepresentationDto indexed; + + private TimeRepresentationDto deposited; + + private TimeRepresentationDto issued; + + private TimeRepresentationDto published; + + @JsonProperty("DOI") + @Schema(example = "10.5334/dsj-2022-004") + private String doi; + + @NotNull + @Schema(example = "dataset") + private String type; + + private List<AuthorDto> author; + + @Schema(example = "Crossref") + private String source; + + @Schema(example = "DBRepo: A Data Repository System for Research Data in Databases") + private String title; + + @Schema(example = "10.1109") + private String prefix; + + @Schema(example = "21") + private String volume; + + @JsonProperty("is-referenced-by-count") + @Schema(example = "0") + private Integer isReferencedByCount; + + @JsonProperty("reference-count") + @Schema(example = "28") + private Integer referenceCount; + + @Schema(example = "IEEE") + private String publisher; + + @Schema(example = "322-331") + private String page; + + private String member; + + @Schema(example = "2024 IEEE International Conference on Big Data (BigData)") + private String event; + + private List<ReferenceDto> reference; + + private Integer score; + + @JsonProperty("URL") + private String url; + +} diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/LicenseDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/LicenseDto.java new file mode 100644 index 0000000000..32f5ffcd2a --- /dev/null +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/LicenseDto.java @@ -0,0 +1,32 @@ +package at.tuwien.api.doi; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import lombok.extern.jackson.Jacksonized; + +@Getter +@Setter +@Builder +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString +public class LicenseDto { + + private TimeRepresentationDto start; + + @JsonProperty("content-version") + @Schema(example = "stm-asf") + private String contentVersion; + + @JsonProperty("delay-in-days") + @Schema(example = "0") + private Integer delayInDays; + + @JsonProperty("URL") + @Schema(example = "https://doi.org/10.15223/policy-029") + private String url; + +} diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/LinkDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/LinkDto.java new file mode 100644 index 0000000000..5f70696091 --- /dev/null +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/LinkDto.java @@ -0,0 +1,35 @@ +package at.tuwien.api.doi; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.*; +import lombok.extern.jackson.Jacksonized; + +@Getter +@Setter +@Builder +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString +public class LinkDto { + + @JsonProperty("URL") + @Schema(example = "http://xplorestaging.ieee.org/ielx8/10824975/10824942/10825401.pdf?arnumber=10825401") + private String url; + + @JsonProperty("content-type") + @Schema(example = "unspecified") + private String contentType; + + @JsonProperty("content-version") + @Schema(example = "vor") + private String contentVersion; + + @JsonProperty("intended-application") + @Schema(example = "similarity-checking") + private String intendedApplication; + +} diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/ReferenceDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/ReferenceDto.java new file mode 100644 index 0000000000..9458c0f919 --- /dev/null +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/ReferenceDto.java @@ -0,0 +1,55 @@ +package at.tuwien.api.doi; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.*; +import lombok.extern.jackson.Jacksonized; + +import java.util.List; + +@Getter +@Setter +@Builder +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString +public class ReferenceDto { + + @NotNull + @Schema(example = "ref1") + private String key; + + @JsonProperty("doi-asserted-by") + @Schema(example = "publisher") + private String doiAssertedBy; + + @JsonProperty("DOI") + @Schema(example = "10.1038/sdata.2016.18") + private String doi; + + @Schema(example = "2024") + private String year; + + @JsonProperty("article-title") + @Schema(example = "The Dryad Data Repository: a Singapore Framework metadata Architecture in a DSpace Environment") + private String articleTitle; + + @JsonProperty("volume-title") + @Schema(example = "Proceedings of the 2008 International Conference on Dublin Core and Metadata Applications") + private String volumeTitle; + + @JsonProperty("journal-title") + @Schema(example = "Libraries Research Publications") + private String journalTitle; + + @Schema(example = "Witt") + private String author; + + @JsonProperty("first-page") + @Schema(example = "157") + private String firstPage; + +} diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/ResourceDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/ResourceDto.java new file mode 100644 index 0000000000..a2543c2834 --- /dev/null +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/ResourceDto.java @@ -0,0 +1,20 @@ +package at.tuwien.api.doi; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import lombok.extern.jackson.Jacksonized; + +@Getter +@Setter +@Builder +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString +public class ResourceDto { + + private ResourceRepresentationDto primary; + +} diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/ResourceRepresentationDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/ResourceRepresentationDto.java new file mode 100644 index 0000000000..bf2312a648 --- /dev/null +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/ResourceRepresentationDto.java @@ -0,0 +1,20 @@ +package at.tuwien.api.doi; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.*; +import lombok.extern.jackson.Jacksonized; + +@Getter +@Setter +@Builder +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString +public class ResourceRepresentationDto { + + @JsonProperty("URL") + private String url; + +} diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/TimeRepresentationDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/TimeRepresentationDto.java new file mode 100644 index 0000000000..fe649217e9 --- /dev/null +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/doi/TimeRepresentationDto.java @@ -0,0 +1,33 @@ +package at.tuwien.api.doi; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import lombok.extern.jackson.Jacksonized; + +import java.time.Instant; +import java.util.List; + +@Getter +@Setter +@Builder +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString +public class TimeRepresentationDto { + + @JsonProperty("date-parts") + @Schema(example = "[[2025,1,18]]") + private List<List<Integer>> dateParts; + + @JsonProperty("date-time") + @Schema(example = "2021-03-12T15:26:21Z") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ssX", timezone = "UTC") + private Instant dateTime; + + private Long timestamp; + +} diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedSourceTypeDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedSourceTypeDto.java deleted file mode 100644 index f883a034f5..0000000000 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedSourceTypeDto.java +++ /dev/null @@ -1,6 +0,0 @@ -package at.tuwien.api.orcid.activities.employments.affiliation.group.summary.organization.disambiguated; - -public enum OrcidDisambiguatedSourceTypeDto { - RINGGOLD, - ROR -} diff --git a/dbrepo-metadata-service/entities/pom.xml b/dbrepo-metadata-service/entities/pom.xml deleted file mode 100644 index 0140b73477..0000000000 --- a/dbrepo-metadata-service/entities/pom.xml +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service</artifactId> - <version>1.7.3</version> - </parent> - - <artifactId>dbrepo-metadata-service-entities</artifactId> - <name>dbrepo-metadata-service-entity</name> - <version>1.7.3</version> - - <dependencies/> - - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <source>${java.version}</source> - <target>${java.version}</target> - <annotationProcessorPaths> - <path> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <version>${lombok.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/NameType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/NameType.java deleted file mode 100644 index 5f0790fbab..0000000000 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/NameType.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien.entities.identifier; - -import lombok.Getter; - -@Getter -public enum NameType { - PERSONAL, - ORGANIZATIONAL; -} diff --git a/dbrepo-metadata-service/oai/pom.xml b/dbrepo-metadata-service/oai/pom.xml index 3fcbaa59bd..d075e57506 100644 --- a/dbrepo-metadata-service/oai/pom.xml +++ b/dbrepo-metadata-service/oai/pom.xml @@ -6,12 +6,12 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-metadata-service</artifactId> - <version>1.7.3</version> + <version>1.8.0</version> </parent> <artifactId>dbrepo-metadata-service-oai</artifactId> <name>dbrepo-metadata-service-oai</name> - <version>1.7.3</version> + <version>1.8.0</version> <dependencies/> diff --git a/dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiErrorType.java b/dbrepo-metadata-service/oai/src/main/java/at/ac/tuwien/ifs/dbrepo/oaipmh/OaiErrorType.java similarity index 91% rename from dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiErrorType.java rename to dbrepo-metadata-service/oai/src/main/java/at/ac/tuwien/ifs/dbrepo/oaipmh/OaiErrorType.java index 2fe750a9ad..e2a13d7762 100644 --- a/dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiErrorType.java +++ b/dbrepo-metadata-service/oai/src/main/java/at/ac/tuwien/ifs/dbrepo/oaipmh/OaiErrorType.java @@ -1,4 +1,4 @@ -package at.tuwien.oaipmh; +package at.ac.tuwien.ifs.dbrepo.oaipmh; import lombok.Getter; @@ -14,8 +14,8 @@ public enum OaiErrorType { BAD_RESUMPTION_TOKEN("badResumptionToken", "The value of the resumptionToken argument is invalid or expired."), BAD_ARGUMENT("badArgument", "The request includes illegal arguments, is missing required arguments, includes a repeated argument, or values for arguments have an illegal syntax."); - private String errorCode; - private String errorText; + private final String errorCode; + private final String errorText; OaiErrorType(String errorCode, String errorText) { this.errorCode = errorCode; diff --git a/dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiListIdentifiersParameters.java b/dbrepo-metadata-service/oai/src/main/java/at/ac/tuwien/ifs/dbrepo/oaipmh/OaiListIdentifiersParameters.java similarity index 97% rename from dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiListIdentifiersParameters.java rename to dbrepo-metadata-service/oai/src/main/java/at/ac/tuwien/ifs/dbrepo/oaipmh/OaiListIdentifiersParameters.java index 721175ed17..d55f1b994f 100644 --- a/dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiListIdentifiersParameters.java +++ b/dbrepo-metadata-service/oai/src/main/java/at/ac/tuwien/ifs/dbrepo/oaipmh/OaiListIdentifiersParameters.java @@ -1,4 +1,4 @@ -package at.tuwien.oaipmh; +package at.ac.tuwien.ifs.dbrepo.oaipmh; import lombok.*; import org.apache.commons.lang3.StringUtils; diff --git a/dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiListRecordsParameters.java b/dbrepo-metadata-service/oai/src/main/java/at/ac/tuwien/ifs/dbrepo/oaipmh/OaiListRecordsParameters.java similarity index 97% rename from dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiListRecordsParameters.java rename to dbrepo-metadata-service/oai/src/main/java/at/ac/tuwien/ifs/dbrepo/oaipmh/OaiListRecordsParameters.java index a18f0b0aec..b7eb9ce37e 100644 --- a/dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiListRecordsParameters.java +++ b/dbrepo-metadata-service/oai/src/main/java/at/ac/tuwien/ifs/dbrepo/oaipmh/OaiListRecordsParameters.java @@ -1,4 +1,4 @@ -package at.tuwien.oaipmh; +package at.ac.tuwien.ifs.dbrepo.oaipmh; import lombok.*; import org.apache.commons.lang3.StringUtils; diff --git a/dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiRecordParameters.java b/dbrepo-metadata-service/oai/src/main/java/at/ac/tuwien/ifs/dbrepo/oaipmh/OaiRecordParameters.java similarity index 93% rename from dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiRecordParameters.java rename to dbrepo-metadata-service/oai/src/main/java/at/ac/tuwien/ifs/dbrepo/oaipmh/OaiRecordParameters.java index da0433c0b6..3b24e111dd 100644 --- a/dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/OaiRecordParameters.java +++ b/dbrepo-metadata-service/oai/src/main/java/at/ac/tuwien/ifs/dbrepo/oaipmh/OaiRecordParameters.java @@ -1,4 +1,4 @@ -package at.tuwien.oaipmh; +package at.ac.tuwien.ifs.dbrepo.oaipmh; import lombok.*; diff --git a/dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/RequestParameters.java b/dbrepo-metadata-service/oai/src/main/java/at/ac/tuwien/ifs/dbrepo/oaipmh/RequestParameters.java similarity index 90% rename from dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/RequestParameters.java rename to dbrepo-metadata-service/oai/src/main/java/at/ac/tuwien/ifs/dbrepo/oaipmh/RequestParameters.java index 3f3d9f1a04..1af3449b1e 100644 --- a/dbrepo-metadata-service/oai/src/main/java/at/tuwien/oaipmh/RequestParameters.java +++ b/dbrepo-metadata-service/oai/src/main/java/at/ac/tuwien/ifs/dbrepo/oaipmh/RequestParameters.java @@ -1,4 +1,4 @@ -package at.tuwien.oaipmh; +package at.ac.tuwien.ifs.dbrepo.oaipmh; import org.apache.commons.lang3.StringUtils; diff --git a/dbrepo-metadata-service/pom.xml b/dbrepo-metadata-service/pom.xml index 65f8f7333b..df4596e8ea 100644 --- a/dbrepo-metadata-service/pom.xml +++ b/dbrepo-metadata-service/pom.xml @@ -16,23 +16,20 @@ <groupId>at.tuwien</groupId> <artifactId>dbrepo-metadata-service</artifactId> <name>dbrepo-metadata-service</name> - <version>1.7.3</version> + <version>1.8.0</version> <description>Service that manages the metadata</description> <packaging>pom</packaging> <modules> - <module>api</module> - <module>entities</module> <module>oai</module> - <module>test</module> <module>repositories</module> <module>services</module> <module>rest-service</module> <module>report</module> </modules> - <url>https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.7/</url> + <url>https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8/</url> <developers> <developer> <name>Martin Weise</name> @@ -43,10 +40,8 @@ <properties> <java.version>17</java.version> - <spring-cloud.version>4.1.4</spring-cloud.version> - <mapstruct.version>1.5.5.Final</mapstruct.version> + <mapstruct.version>1.6.3</mapstruct.version> <rabbitmq.version>5.20.0</rabbitmq.version> - <jackson-datatype.version>2.15.0</jackson-datatype.version> <commons-io.version>2.17.0</commons-io.version> <commons-validator.version>1.8.0</commons-validator.version> <guava.version>33.0.0-jre</guava.version> @@ -57,8 +52,6 @@ <apache-jena.version>4.10.0</apache-jena.version> <opencsv.version>5.7.1</opencsv.version> <super-csv.version>2.4.0</super-csv.version> - <keycloak.version>26.0.4</keycloak.version> - <springdoc-openapi.version>2.3.0</springdoc-openapi.version> <testcontainers.version>1.19.1</testcontainers.version> <jackson.version>2.15.2</jackson.version> <keycloak-testcontainer.version>3.2.0</keycloak-testcontainer.version> @@ -73,44 +66,9 @@ <dependencies> <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-security</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-test</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-bootstrap</artifactId> - <version>${spring-cloud.version}</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-thymeleaf</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-data-jpa</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-actuator</artifactId> - </dependency> - <!-- Open API --> - <dependency> - <groupId>org.springdoc</groupId> - <artifactId>springdoc-openapi-starter-webmvc-api</artifactId> - <version>${springdoc-openapi.version}</version> + <groupId>at.ac.tuwien.ifs.dbrepo</groupId> + <artifactId>dbrepo-core</artifactId> + <version>1.8.0</version> </dependency> <!-- Data Source --> <dependency> @@ -150,12 +108,6 @@ <version>${micrometer.version}</version> <scope>test</scope> </dependency> - <!-- IDE --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <scope>compile</scope> - </dependency> <!-- Mapping --> <dependency> <groupId>org.mapstruct</groupId> @@ -168,11 +120,6 @@ <artifactId>mapstruct</artifactId> <version>${mapstruct.version}</version> </dependency> - <dependency> - <groupId>com.fasterxml.jackson.datatype</groupId> - <artifactId>jackson-datatype-jsr310</artifactId> - <version>${jackson-datatype.version}</version> - </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> @@ -183,22 +130,7 @@ <artifactId>commons-validator</artifactId> <version>${commons-validator.version}</version> </dependency> - <dependency> - <groupId>com.fasterxml.jackson.datatype</groupId> - <artifactId>jackson-datatype-hibernate6</artifactId> - <version>${jackson-datatype.version}</version> - </dependency> <!-- Authentication --> - <dependency> - <groupId>org.keycloak</groupId> - <artifactId>keycloak-common</artifactId> - <version>${keycloak.version}</version> - </dependency> - <dependency> - <groupId>org.keycloak</groupId> - <artifactId>keycloak-admin-client</artifactId> - <version>${keycloak.version}</version> - </dependency> <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> @@ -236,6 +168,11 @@ <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> + <dependency> + <groupId>org.springframework.security</groupId> + <artifactId>spring-security-test</artifactId> + <scope>test</scope> + </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> diff --git a/dbrepo-metadata-service/report/pom.xml b/dbrepo-metadata-service/report/pom.xml index ed1592ddaa..114d9d1cbd 100644 --- a/dbrepo-metadata-service/report/pom.xml +++ b/dbrepo-metadata-service/report/pom.xml @@ -6,12 +6,12 @@ <parent> <artifactId>dbrepo-metadata-service</artifactId> <groupId>at.tuwien</groupId> - <version>1.7.3</version> + <version>1.8.0</version> </parent> <artifactId>dbrepo-metadata-service-report</artifactId> <name>dbrepo-metadata-service-report</name> - <version>1.7.3</version> + <version>1.8.0</version> <dependencies> <dependency> diff --git a/dbrepo-metadata-service/repositories/pom.xml b/dbrepo-metadata-service/repositories/pom.xml index b2e76ac0d7..3bc1da72f5 100644 --- a/dbrepo-metadata-service/repositories/pom.xml +++ b/dbrepo-metadata-service/repositories/pom.xml @@ -6,17 +6,17 @@ <parent> <artifactId>dbrepo-metadata-service</artifactId> <groupId>at.tuwien</groupId> - <version>1.7.3</version> + <version>1.8.0</version> </parent> <artifactId>dbrepo-metadata-service-repositories</artifactId> <name>dbrepo-metadata-service-repositories</name> - <version>1.7.3</version> + <version>1.8.0</version> <dependencies> <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-api</artifactId> + <groupId>at.ac.tuwien.ifs.dbrepo</groupId> + <artifactId>dbrepo-core</artifactId> <version>${project.version}</version> </dependency> <dependency> @@ -24,37 +24,7 @@ <artifactId>dbrepo-metadata-service-oai</artifactId> <version>${project.version}</version> </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-entities</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <source>${java.version}</source> - <target>${java.version}</target> - <annotationProcessorPaths> - <path> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <version>${lombok.version}</version> - </path> - <!-- keep this order https://stackoverflow.com/questions/47676369/mapstruct-and-lombok-not-working-together#answer-65021876 --> - <path> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct-processor</artifactId> - <version>${mapstruct.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - </plugins> - </build> + </dependencies> </project> diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/SparqlMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/mapper/SparqlMapper.java similarity index 97% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/SparqlMapper.java rename to dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/mapper/SparqlMapper.java index dff867970f..2ca00f05db 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/SparqlMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/mapper/SparqlMapper.java @@ -1,6 +1,6 @@ -package at.tuwien.mapper; +package at.ac.tuwien.ifs.dbrepo.mapper; -import at.tuwien.entities.semantics.Ontology; +import at.ac.tuwien.ifs.dbrepo.core.entity.semantics.Ontology; import org.mapstruct.Mapper; import java.util.List; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/BannerMessageRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/BannerMessageRepository.java similarity index 72% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/BannerMessageRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/BannerMessageRepository.java index c12dc7b83f..655b530bb6 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/BannerMessageRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/BannerMessageRepository.java @@ -1,6 +1,6 @@ -package at.tuwien.repository; +package at.ac.tuwien.ifs.dbrepo.repository; -import at.tuwien.entities.maintenance.BannerMessage; +import at.ac.tuwien.ifs.dbrepo.core.entity.maintenance.BannerMessage; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/ConceptRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/ConceptRepository.java similarity index 71% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/ConceptRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/ConceptRepository.java index 1e70cfdfb2..546243b1ac 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/ConceptRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/ConceptRepository.java @@ -1,6 +1,6 @@ -package at.tuwien.repository; +package at.ac.tuwien.ifs.dbrepo.repository; -import at.tuwien.entities.database.table.columns.TableColumnConcept; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumnConcept; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/ContainerRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/ContainerRepository.java similarity index 81% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/ContainerRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/ContainerRepository.java index 536802cf41..9d258ed781 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/ContainerRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/ContainerRepository.java @@ -1,6 +1,6 @@ -package at.tuwien.repository; +package at.ac.tuwien.ifs.dbrepo.repository; -import at.tuwien.entities.container.Container; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.Container; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/DatabaseRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/DatabaseRepository.java similarity index 87% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/DatabaseRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/DatabaseRepository.java index d984cb3337..2d61108679 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/DatabaseRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/DatabaseRepository.java @@ -1,6 +1,6 @@ -package at.tuwien.repository; +package at.ac.tuwien.ifs.dbrepo.repository; -import at.tuwien.entities.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/IdentifierRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/IdentifierRepository.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/IdentifierRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/IdentifierRepository.java index 9e49f2aa1c..4011a8d168 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/IdentifierRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/IdentifierRepository.java @@ -1,6 +1,6 @@ -package at.tuwien.repository; +package at.ac.tuwien.ifs.dbrepo.repository; -import at.tuwien.entities.identifier.Identifier; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.Identifier; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/ImageRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/ImageRepository.java similarity index 77% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/ImageRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/ImageRepository.java index 6282ed9040..55af367a63 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/ImageRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/ImageRepository.java @@ -1,6 +1,6 @@ -package at.tuwien.repository; +package at.ac.tuwien.ifs.dbrepo.repository; -import at.tuwien.entities.container.image.ContainerImage; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.image.ContainerImage; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/LicenseRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/LicenseRepository.java similarity index 73% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/LicenseRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/LicenseRepository.java index f180cdf901..e04b1ffb7e 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/LicenseRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/LicenseRepository.java @@ -1,6 +1,6 @@ -package at.tuwien.repository; +package at.ac.tuwien.ifs.dbrepo.repository; -import at.tuwien.entities.database.License; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.License; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/OntologyRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/OntologyRepository.java similarity index 78% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/OntologyRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/OntologyRepository.java index 69b4e204be..35460fc050 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/OntologyRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/OntologyRepository.java @@ -1,6 +1,6 @@ -package at.tuwien.repository; +package at.ac.tuwien.ifs.dbrepo.repository; -import at.tuwien.entities.semantics.Ontology; +import at.ac.tuwien.ifs.dbrepo.core.entity.semantics.Ontology; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/TableRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/TableRepository.java similarity index 69% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/TableRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/TableRepository.java index bc126eaa27..e6d3670101 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/TableRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/TableRepository.java @@ -1,6 +1,6 @@ -package at.tuwien.repository; +package at.ac.tuwien.ifs.dbrepo.repository; -import at.tuwien.entities.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/UnitRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/UnitRepository.java similarity index 71% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/UnitRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/UnitRepository.java index 6676410730..ed4c6c778c 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/UnitRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/UnitRepository.java @@ -1,6 +1,6 @@ -package at.tuwien.repository; +package at.ac.tuwien.ifs.dbrepo.repository; -import at.tuwien.entities.database.table.columns.TableColumnUnit; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumnUnit; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/UserRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/UserRepository.java similarity index 80% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/UserRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/UserRepository.java index 30f2f20c16..f270810ac1 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/UserRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/UserRepository.java @@ -1,6 +1,6 @@ -package at.tuwien.repository; +package at.ac.tuwien.ifs.dbrepo.repository; -import at.tuwien.entities.user.User; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/ViewRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/ViewRepository.java similarity index 71% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/ViewRepository.java rename to dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/ViewRepository.java index 50544822e5..d35ed6e337 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/ViewRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/ViewRepository.java @@ -1,6 +1,6 @@ -package at.tuwien.repository; +package at.ac.tuwien.ifs.dbrepo.repository; -import at.tuwien.entities.database.View; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.View; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/utils/EnumToStringConverter.java b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/utils/EnumToStringConverter.java similarity index 92% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/utils/EnumToStringConverter.java rename to dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/utils/EnumToStringConverter.java index 2e53ae6cdc..158d5be808 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/utils/EnumToStringConverter.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/utils/EnumToStringConverter.java @@ -1,4 +1,4 @@ -package at.tuwien.utils; +package at.ac.tuwien.ifs.dbrepo.utils; import org.mapstruct.TargetType; diff --git a/dbrepo-metadata-service/rest-service/pom.xml b/dbrepo-metadata-service/rest-service/pom.xml index d8021b4c10..ed5cacbdeb 100644 --- a/dbrepo-metadata-service/rest-service/pom.xml +++ b/dbrepo-metadata-service/rest-service/pom.xml @@ -6,22 +6,17 @@ <parent> <artifactId>dbrepo-metadata-service</artifactId> <groupId>at.tuwien</groupId> - <version>1.7.3</version> + <version>1.8.0</version> </parent> <artifactId>dbrepo-metadata-service-rest-service</artifactId> <name>dbrepo-metadata-service-rest</name> - <version>1.7.3</version> + <version>1.8.0</version> <dependencies> <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-api</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-entities</artifactId> + <groupId>at.ac.tuwien.ifs.dbrepo</groupId> + <artifactId>dbrepo-core</artifactId> <version>${project.version}</version> </dependency> <dependency> @@ -29,11 +24,6 @@ <artifactId>dbrepo-metadata-service-services</artifactId> <version>${project.version}</version> </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-test</artifactId> - <version>${project.version}</version> - </dependency> </dependencies> <build> diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/DbrepoMetadataServiceApplication.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/MetadataServiceApplication.java similarity index 64% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/DbrepoMetadataServiceApplication.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/MetadataServiceApplication.java index e931ce7509..de133ba720 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/DbrepoMetadataServiceApplication.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/MetadataServiceApplication.java @@ -1,4 +1,4 @@ -package at.tuwien; +package at.ac.tuwien.ifs.dbrepo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -9,13 +9,13 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; @EnableJpaAuditing @EnableTransactionManagement -@EntityScan(basePackages = {"at.tuwien.entities"}) -@EnableJpaRepositories(basePackages = {"at.tuwien.repository"}) +@EntityScan(basePackages = {"at.ac.tuwien.ifs.dbrepo.core.entity"}) +@EnableJpaRepositories(basePackages = {"at.ac.tuwien.ifs.dbrepo.repository"}) @SpringBootApplication -public class DbrepoMetadataServiceApplication { +public class MetadataServiceApplication { public static void main(String[] args) { - SpringApplication.run(DbrepoMetadataServiceApplication.class, args); + SpringApplication.run(MetadataServiceApplication.class, args); } } diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/config/MvcConfig.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/config/MvcConfig.java similarity index 71% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/config/MvcConfig.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/config/MvcConfig.java index 6bdb809731..70ed7ea611 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/config/MvcConfig.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/config/MvcConfig.java @@ -1,7 +1,7 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; -import at.tuwien.converters.IdentifierStatusTypeDtoConverter; -import at.tuwien.converters.IdentifierTypeDtoConverter; +import at.ac.tuwien.ifs.dbrepo.converters.IdentifierStatusTypeDtoConverter; +import at.ac.tuwien.ifs.dbrepo.converters.IdentifierTypeDtoConverter; import org.springframework.context.annotation.Configuration; import org.springframework.format.FormatterRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/config/SwaggerConfig.java similarity index 98% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/config/SwaggerConfig.java index 7830213b8e..21881faa1f 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/config/SwaggerConfig.java @@ -1,4 +1,4 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; import io.swagger.v3.oas.models.ExternalDocumentation; import io.swagger.v3.oas.models.OpenAPI; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/converters/IdentifierStatusTypeDtoConverter.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/converters/IdentifierStatusTypeDtoConverter.java similarity index 75% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/converters/IdentifierStatusTypeDtoConverter.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/converters/IdentifierStatusTypeDtoConverter.java index 96e67f63d2..cb59169cfd 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/converters/IdentifierStatusTypeDtoConverter.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/converters/IdentifierStatusTypeDtoConverter.java @@ -1,6 +1,6 @@ -package at.tuwien.converters; +package at.ac.tuwien.ifs.dbrepo.converters; -import at.tuwien.api.identifier.IdentifierStatusTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierStatusTypeDto; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/converters/IdentifierTypeDtoConverter.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/converters/IdentifierTypeDtoConverter.java similarity index 75% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/converters/IdentifierTypeDtoConverter.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/converters/IdentifierTypeDtoConverter.java index 61e169604f..6c0fc163bd 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/converters/IdentifierTypeDtoConverter.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/converters/IdentifierTypeDtoConverter.java @@ -1,6 +1,6 @@ -package at.tuwien.converters; +package at.ac.tuwien.ifs.dbrepo.converters; -import at.tuwien.api.identifier.IdentifierTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierTypeDto; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/AbstractEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/AbstractEndpoint.java new file mode 100644 index 0000000000..b6f5f65cf9 --- /dev/null +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/AbstractEndpoint.java @@ -0,0 +1,136 @@ +package at.ac.tuwien.ifs.dbrepo.endpoints; + +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDetailsDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.DatabaseAccess; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.View; +import at.ac.tuwien.ifs.dbrepo.core.exception.NotAllowedException; +import lombok.extern.log4j.Log4j2; +import org.springframework.security.core.Authentication; + +import java.security.Principal; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +@Log4j2 +public abstract class AbstractEndpoint { + + public boolean hasRole(Principal principal, String role) { + if (principal == null || role == null) { + return false; + } + final Authentication authentication = (Authentication) principal; + return authentication.getAuthorities() + .stream() + .anyMatch(a -> a.getAuthority().equals(role)); + } + + public boolean isSystem(Principal principal) { + if (principal == null) { + return false; + } + final Authentication authentication = (Authentication) principal; + return authentication.getAuthorities() + .stream() + .anyMatch(a -> a.getAuthority().equals("system")); + } + + public UUID getId(Principal principal) { + if (principal == null) { + return null; + } + final Authentication authentication = (Authentication) principal; + if (authentication.getPrincipal() instanceof UserDetailsDto user) { + if (user.getId() == null) { + throw new IllegalArgumentException("Principal has no id"); + } + return UUID.fromString(user.getId()); + } + throw new IllegalArgumentException("Unknown principal instance: " + authentication.getPrincipal().getClass()); + } + + public void removeInternalData(ContainerDto container) { + container.setPassword(null); + container.setUsername(null); + container.setHost(null); + container.setPort(null); + } + + public Database filterDatabase(Database database, Principal principal) throws NotAllowedException { + if (principal != null) { + if (isSystem(principal)) { + log.trace("filter database: system principal, skip"); + return database; + } + final Optional<DatabaseAccess> optional = database.getAccesses() + .stream() + .filter(a -> a.getUser().getId().equals(getId(principal))) + .findFirst(); + if (!database.getIsPublic() && !database.getIsSchemaPublic() && optional.isEmpty()) { + log.error("Failed to find database: not public and no access found"); + throw new NotAllowedException("Failed to find database: not public and no access found"); + } + /* reduce metadata */ + if (!database.getOwner().getId().equals(getId(principal))) { + log.trace("authenticated user is not owner: remove access list"); + database.setAccesses(List.of()); + } + final int tables = database.getTables() + .size(); + database.setTables(database.getTables() + .stream() + .filter(t -> t.getIsPublic() || t.getIsSchemaPublic() || optional.isPresent()) + .toList()); + log.trace("filtered database tables from {} to {}", tables, database.getTables().size()); + final int views = database.getViews() + .size(); + database.setViews(database.getViews() + .stream() + .filter(v -> v.getIsPublic() || v.getIsSchemaPublic() || optional.isPresent()) + .toList()); + log.trace("filtered database views from {} to {}", views, database.getViews().size()); + return database; + } + if (!database.getIsPublic() && !database.getIsSchemaPublic()) { + log.error("Failed to find database: not public and not authenticated"); + throw new NotAllowedException("Failed to find database: not public and not authenticated"); + } + /* reduce metadata */ + database.getTables() + .removeAll(database.getTables() + .stream() + .filter(t -> !t.getIsPublic() && !t.getIsSchemaPublic()) + .toList()); + database.getViews() + .removeAll(database.getViews() + .stream() + .filter(v -> !v.getIsPublic() && !v.getIsSchemaPublic()) + .toList()); + database.setAccesses(List.of()); + return database; + } + + public List<View> filterViews(Database database, Principal principal) { + final List<View> views = database.getViews(); + DatabaseAccess access = null; + if (principal != null) { + if (isSystem(principal)) { + return views; + } + final Optional<DatabaseAccess> optional = database.getAccesses() + .stream() + .filter(a -> a.getHdbid().equals(getId(principal))) + .findFirst(); + if (optional.isPresent()) { + access = optional.get(); + } + } + final Boolean hasAccess = access != null; + return views.stream() + .filter(v -> v.getIsPublic() || v.getIsSchemaPublic() || hasAccess) + .toList(); + } + +} diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/AccessEndpoint.java similarity index 86% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/AccessEndpoint.java index 79dc5fd8e9..a605ec126f 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/AccessEndpoint.java @@ -1,16 +1,17 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.api.database.DatabaseAccessDto; -import at.tuwien.api.database.CreateAccessDto; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.service.AccessService; -import at.tuwien.service.DatabaseService; -import at.tuwien.service.UserService; +import at.ac.tuwien.ifs.dbrepo.core.api.database.CreateAccessDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseAccessDto; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.DatabaseAccess; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.service.AccessService; +import at.ac.tuwien.ifs.dbrepo.service.DashboardService; +import at.ac.tuwien.ifs.dbrepo.service.DatabaseService; +import at.ac.tuwien.ifs.dbrepo.service.UserService; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -40,14 +41,16 @@ public class AccessEndpoint extends AbstractEndpoint { private final AccessService accessService; private final MetadataMapper metadataMapper; private final DatabaseService databaseService; + private final DashboardService dashboardService; @Autowired public AccessEndpoint(UserService userService, AccessService accessService, MetadataMapper metadataMapper, - DatabaseService databaseService) { + DatabaseService databaseService, DashboardService dashboardService) { this.userService = userService; this.accessService = accessService; this.metadataMapper = metadataMapper; this.databaseService = databaseService; + this.dashboardService = dashboardService; } @PostMapping("/{userId}") @@ -92,9 +95,10 @@ public class AccessEndpoint extends AbstractEndpoint { public ResponseEntity<DatabaseAccessDto> create(@NotNull @PathVariable("databaseId") UUID databaseId, @PathVariable("userId") UUID userId, @Valid @RequestBody CreateAccessDto data, - @NotNull Principal principal) throws NotAllowedException, DataServiceException, - DataServiceConnectionException, DatabaseNotFoundException, UserNotFoundException, AccessNotFoundException, - SearchServiceException, SearchServiceConnectionException { + Principal principal) throws NotAllowedException, + DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, UserNotFoundException, + AccessNotFoundException, SearchServiceException, SearchServiceConnectionException, + DashboardServiceException, DashboardServiceConnectionException { log.debug("endpoint give access to database, databaseId={}, userId={}, access.type={}", databaseId, userId, data.getType()); final Database database = databaseService.findById(databaseId); @@ -111,6 +115,7 @@ public class AccessEndpoint extends AbstractEndpoint { /* ignore */ } accessService.create(database, user, data.getType()); + dashboardService.updateAccess(database, user, data.getType()); return ResponseEntity.accepted() .build(); } @@ -154,11 +159,12 @@ public class AccessEndpoint extends AbstractEndpoint { public ResponseEntity<Void> update(@NotNull @PathVariable("databaseId") UUID databaseId, @PathVariable("userId") UUID userId, @Valid @RequestBody CreateAccessDto data, - @NotNull Principal principal) throws NotAllowedException, + Principal principal) throws NotAllowedException, DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, UserNotFoundException, - AccessNotFoundException, SearchServiceException, SearchServiceConnectionException { - log.debug("endpoint modify database access, databaseId={}, userId={}, access.type={}, principal.name={}", - databaseId, userId, data.getType(), principal.getName()); + AccessNotFoundException, SearchServiceException, SearchServiceConnectionException, + DashboardServiceException, DashboardServiceConnectionException { + log.debug("endpoint modify database access, databaseId={}, userId={}, access.type={}", databaseId, userId, + data.getType()); final Database database = databaseService.findById(databaseId); if (!database.getOwner().getId().equals(getId(principal))) { log.error("Failed to update access: not owner"); @@ -170,11 +176,12 @@ public class AccessEndpoint extends AbstractEndpoint { } final User user = userService.findById(userId); if (user.getIsInternal()) { - log.error("Failed to update access: the internal user must have write-all access"); - throw new NotAllowedException("Failed to update access: the internal user must have write-all access"); + log.error("Failed to update access: cannot modify access of internal users"); + throw new NotAllowedException("Failed to update access: cannot modify access of internal users"); } accessService.find(database, user); accessService.update(database, user, data.getType()); + dashboardService.updateAccess(database, user, data.getType()); return ResponseEntity.accepted() .build(); } @@ -205,10 +212,9 @@ public class AccessEndpoint extends AbstractEndpoint { }) public ResponseEntity<DatabaseAccessDto> find(@NotNull @PathVariable("databaseId") UUID databaseId, @PathVariable("userId") UUID userId, - @NotNull Principal principal) throws DatabaseNotFoundException, + Principal principal) throws DatabaseNotFoundException, UserNotFoundException, AccessNotFoundException, NotAllowedException { - log.debug("endpoint get database access, databaseId={}, userId={}, principal.name={}", databaseId, userId, - principal.getName()); + log.debug("endpoint get database access, databaseId={}, userId={}", databaseId, userId); if (!userId.equals(getId(principal))) { if (!hasRole(principal, "check-foreign-database-access")) { log.error("Failed to find access: foreign user"); @@ -260,9 +266,10 @@ public class AccessEndpoint extends AbstractEndpoint { }) public ResponseEntity<Void> revoke(@NotNull @PathVariable("databaseId") UUID databaseId, @PathVariable("userId") UUID userId, - @NotNull Principal principal) throws NotAllowedException, DataServiceException, + Principal principal) throws NotAllowedException, DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, UserNotFoundException, AccessNotFoundException, - SearchServiceException, SearchServiceConnectionException { + SearchServiceException, SearchServiceConnectionException, DashboardServiceException, + DashboardServiceConnectionException { log.debug("endpoint revoke database access, databaseId={}, userId={}", databaseId, userId); final Database database = databaseService.findById(databaseId); if (!database.getOwner().getId().equals(getId(principal))) { @@ -280,6 +287,7 @@ public class AccessEndpoint extends AbstractEndpoint { } accessService.find(database, user); accessService.delete(database, user); + dashboardService.updateAccess(database, user, null); return ResponseEntity.accepted() .build(); } diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ConceptEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/ConceptEndpoint.java similarity index 90% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ConceptEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/ConceptEndpoint.java index acf6a31ca2..11b2d8ea0c 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ConceptEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/ConceptEndpoint.java @@ -1,8 +1,8 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.api.database.table.columns.concepts.ConceptDto; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.service.ConceptService; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts.ConceptDto; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.service.ConceptService; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/ContainerEndpoint.java similarity index 92% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/ContainerEndpoint.java index 266430372d..d98901f535 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/ContainerEndpoint.java @@ -1,15 +1,15 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.api.container.ContainerBriefDto; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.container.CreateContainerDto; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.entities.container.Container; -import at.tuwien.exception.ContainerAlreadyExistsException; -import at.tuwien.exception.ContainerNotFoundException; -import at.tuwien.exception.ImageNotFoundException; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.service.ContainerService; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.CreateContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.Container; +import at.ac.tuwien.ifs.dbrepo.core.exception.ContainerAlreadyExistsException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ContainerNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.service.ContainerService; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/DatabaseEndpoint.java similarity index 86% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/DatabaseEndpoint.java index 9eadffd0df..0474215e01 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/DatabaseEndpoint.java @@ -1,17 +1,14 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.api.database.*; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.entities.container.Container; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.service.ContainerService; -import at.tuwien.service.DatabaseService; -import at.tuwien.service.StorageService; -import at.tuwien.service.UserService; +import at.ac.tuwien.ifs.dbrepo.core.api.database.*; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.CreateDashboardResponseDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.Container; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.service.*; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.headers.Header; @@ -35,7 +32,6 @@ import org.springframework.web.bind.annotation.*; import java.security.Principal; import java.util.List; -import java.util.Optional; import java.util.UUID; @Log4j2 @@ -49,15 +45,18 @@ public class DatabaseEndpoint extends AbstractEndpoint { private final StorageService storageService; private final DatabaseService databaseService; private final ContainerService containerService; + private final DashboardService dashboardService; @Autowired public DatabaseEndpoint(UserService userService, MetadataMapper metadataMapper, StorageService storageService, - DatabaseService databaseService, ContainerService containerService) { + DatabaseService databaseService, ContainerService containerService, + DashboardService dashboardService) { this.userService = userService; this.metadataMapper = metadataMapper; this.storageService = storageService; this.databaseService = databaseService; this.containerService = containerService; + this.dashboardService = dashboardService; } @RequestMapping(method = {RequestMethod.GET, RequestMethod.HEAD}) @@ -164,10 +163,10 @@ public class DatabaseEndpoint extends AbstractEndpoint { schema = @Schema(implementation = ApiErrorDto.class))}), }) public ResponseEntity<DatabaseBriefDto> create(@Valid @RequestBody CreateDatabaseDto data, - @NotNull Principal principal) throws DataServiceException, + Principal principal) throws DataServiceException, DataServiceConnectionException, UserNotFoundException, DatabaseNotFoundException, ContainerNotFoundException, SearchServiceException, SearchServiceConnectionException, - ContainerQuotaException { + ContainerQuotaException, DashboardServiceException, DashboardServiceConnectionException { log.debug("endpoint create database, data.name={}", data.getName()); final Container container = containerService.find(data.getCid()); if (container.getQuota() != null && container.getDatabases().size() + 1 > container.getQuota()) { @@ -175,9 +174,12 @@ public class DatabaseEndpoint extends AbstractEndpoint { throw new ContainerQuotaException("Failed to create database: quota of " + container.getQuota() + " exceeded"); } final User caller = userService.findById(getId(principal)); + final Database database = databaseService.create(container, data, caller, userService.findAllInternalUsers()); + /* find in dashboard service */ + final CreateDashboardResponseDto dashboard = dashboardService.create(database); + database.setDashboardUid(dashboard.getUid()); return ResponseEntity.status(HttpStatus.CREATED) - .body(metadataMapper.databaseDtoToDatabaseBriefDto(metadataMapper.databaseToDatabaseDto( - databaseService.create(container, data, caller, userService.findAllInternalUsers())))); + .body(metadataMapper.databaseToDatabaseBriefDto(database)); } @PutMapping("/{databaseId}/metadata/table") @@ -220,10 +222,9 @@ public class DatabaseEndpoint extends AbstractEndpoint { schema = @Schema(implementation = ApiErrorDto.class))}), }) public ResponseEntity<DatabaseBriefDto> refreshTableMetadata(@NotNull @PathVariable("databaseId") UUID databaseId, - @NotNull Principal principal) throws DataServiceException, + Principal principal) throws DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, SearchServiceException, - SearchServiceConnectionException, NotAllowedException, QueryNotFoundException, MalformedException, - TableNotFoundException { + SearchServiceConnectionException, NotAllowedException, MalformedException, TableNotFoundException { log.debug("endpoint refresh database metadata, databaseId={}", databaseId); final Database database = databaseService.findById(databaseId); if (!database.getOwner().getId().equals(getId(principal))) { @@ -269,10 +270,10 @@ public class DatabaseEndpoint extends AbstractEndpoint { schema = @Schema(implementation = ApiErrorDto.class))}), }) public ResponseEntity<DatabaseBriefDto> refreshViewMetadata(@NotNull @PathVariable("databaseId") UUID databaseId, - @NotNull Principal principal) throws DataServiceException, + Principal principal) throws DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, SearchServiceException, - SearchServiceConnectionException, NotAllowedException, QueryNotFoundException, ViewNotFoundException { - log.debug("endpoint refresh database metadata, databaseId={}, principal.name={}", databaseId, principal.getName()); + SearchServiceConnectionException, NotAllowedException, ViewNotFoundException { + log.debug("endpoint refresh database metadata, databaseId={}", databaseId); final Database database = databaseService.findById(databaseId); if (!database.getOwner().getId().equals(getId(principal))) { log.error("Failed to refresh database views metadata: not owner"); @@ -323,14 +324,17 @@ public class DatabaseEndpoint extends AbstractEndpoint { }) public ResponseEntity<DatabaseBriefDto> visibility(@NotNull @PathVariable("databaseId") UUID databaseId, @Valid @RequestBody DatabaseModifyVisibilityDto data, - @NotNull Principal principal) throws DatabaseNotFoundException, - NotAllowedException, SearchServiceException, SearchServiceConnectionException, UserNotFoundException { + Principal principal) throws DatabaseNotFoundException, + NotAllowedException, SearchServiceException, SearchServiceConnectionException, DashboardServiceException, + DashboardServiceConnectionException { log.debug("endpoint modify database visibility, databaseId={}, data={}", databaseId, data); final Database database = databaseService.findById(databaseId); if (!database.getOwner().getId().equals(getId(principal))) { log.error("Failed to modify database visibility: not owner"); throw new NotAllowedException("Failed to modify database visibility: not owner"); } + final Database database1 = databaseService.modifyVisibility(database, data); + dashboardService.update(database1); return ResponseEntity.accepted() .body(metadataMapper.databaseDtoToDatabaseBriefDto(metadataMapper.databaseToDatabaseDto( databaseService.modifyVisibility(database, data)))); @@ -377,7 +381,7 @@ public class DatabaseEndpoint extends AbstractEndpoint { }) public ResponseEntity<DatabaseBriefDto> transfer(@NotNull @PathVariable("databaseId") UUID databaseId, @Valid @RequestBody DatabaseTransferDto data, - @NotNull Principal principal) throws NotAllowedException, + Principal principal) throws NotAllowedException, DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, UserNotFoundException, SearchServiceException, SearchServiceConnectionException { log.debug("endpoint transfer database, databaseId={}, transferDto.id={}", databaseId, data.getId()); @@ -433,7 +437,7 @@ public class DatabaseEndpoint extends AbstractEndpoint { }) public ResponseEntity<DatabaseBriefDto> modifyImage(@NotNull @PathVariable("databaseId") UUID databaseId, @Valid @RequestBody DatabaseModifyImageDto data, - @NotNull Principal principal) throws NotAllowedException, + Principal principal) throws NotAllowedException, DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException, StorageUnavailableException, StorageNotFoundException { log.debug("endpoint modify database image, databaseId={}, data.key={}", databaseId, data.getKey()); @@ -451,6 +455,50 @@ public class DatabaseEndpoint extends AbstractEndpoint { databaseService.modifyImage(database, image)))); } + @PutMapping("/{databaseId}/dashboard") + @Transactional + @PreAuthorize("hasAuthority('system')") + @Observed(name = "dbrepo_database_dashboard") + @Operation(summary = "Update database dashboard uid", + description = "Updates the dashboard uid for a database with given id. Only the database owner can perform this operation. Requires role `system`.", + security = {@SecurityRequirement(name = "bearerAuth"), @SecurityRequirement(name = "basicAuth")}) + @ApiResponses(value = { + @ApiResponse(responseCode = "202", + description = "Modify of dashboard uid was successful", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = DatabaseBriefDto.class))}), + @ApiResponse(responseCode = "400", + description = "Malformed payload", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), + @ApiResponse(responseCode = "404", + description = "Database could not be found", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), + @ApiResponse(responseCode = "502", + description = "Connection to search service failed", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), + @ApiResponse(responseCode = "503", + description = "Failed to save in search service", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}) + }) + public ResponseEntity<DatabaseBriefDto> modifyDashboard(@NotNull @PathVariable("databaseId") UUID databaseId, + @Valid @RequestBody DatabaseModifyDashboardDto data) + throws DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException { + log.debug("endpoint modify database dashboard uid, databaseId={}, data.uid={}", databaseId, data.getUid()); + final Database database = databaseService.findById(databaseId); + return ResponseEntity.accepted() + .body(metadataMapper.databaseDtoToDatabaseBriefDto(metadataMapper.databaseToDatabaseDto( + databaseService.modifyDashboard(database, data.getUid())))); + } + @GetMapping("/{databaseId}/image") @Transactional @Observed(name = "dbrepo_database_image_view") @@ -504,54 +552,7 @@ public class DatabaseEndpoint extends AbstractEndpoint { Principal principal) throws DatabaseNotFoundException, NotAllowedException { log.debug("endpoint find database, databaseId={}", databaseId); - final Database database = databaseService.findById(databaseId); - if (principal != null) { - final Optional<DatabaseAccess> optional = database.getAccesses() - .stream() - .filter(a -> a.getUser().getId().equals(getId(principal))) - .findFirst(); - optional.ifPresentOrElse(access -> log.trace("user has access: {}", access), () -> log.trace("user has no access")); - if (!database.getIsPublic() && !database.getIsSchemaPublic() && optional.isEmpty() && !isSystem(principal)) { - log.error("Failed to find database: not public and no access found"); - throw new NotAllowedException("Failed to find database: not public and no access found"); - } - /* reduce metadata */ - final int tables = database.getTables() - .size(); - database.setTables(database.getTables() - .stream() - .filter(t -> t.getIsPublic() || t.getIsSchemaPublic() || optional.isPresent() || isSystem(principal)) - .toList()); - log.trace("filtered database tables from {} to {}", tables, database.getTables().size()); - final int views = database.getViews() - .size(); - database.setViews(database.getViews() - .stream() - .filter(v -> v.getIsPublic() || v.getIsSchemaPublic() || optional.isPresent() || isSystem(principal)) - .toList()); - log.trace("filtered database views from {} to {}", views, database.getViews().size()); - if (!isSystem(principal) && !database.getOwner().getId().equals(getId(principal))) { - log.trace("authenticated user {} is not owner: remove access list", principal.getName()); - database.setAccesses(List.of()); - } - } else { - if (!database.getIsPublic() && !database.getIsSchemaPublic()) { - log.error("Failed to find database: not public and not authenticated"); - throw new NotAllowedException("Failed to find database: not public and not authenticated"); - } - /* reduce metadata */ - database.getTables() - .removeAll(database.getTables() - .stream() - .filter(t -> !t.getIsPublic() && !t.getIsSchemaPublic()) - .toList()); - database.getViews() - .removeAll(database.getViews() - .stream() - .filter(v -> !v.getIsPublic() && !v.getIsSchemaPublic()) - .toList()); - database.setAccesses(List.of()); - } + final Database database = filterDatabase(databaseService.findById(databaseId), principal); final DatabaseDto dto = metadataMapper.databaseToDatabaseDto(database); final HttpHeaders headers = new HttpHeaders(); if (isSystem(principal)) { diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/IdentifierEndpoint.java similarity index 96% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/IdentifierEndpoint.java index 96deaea775..ea6e569e52 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/IdentifierEndpoint.java @@ -1,19 +1,19 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.api.identifier.*; -import at.tuwien.api.identifier.ld.LdDatasetDto; -import at.tuwien.api.user.external.ExternalMetadataDto; -import at.tuwien.config.EndpointConfig; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.entities.identifier.IdentifierStatusType; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.service.*; -import at.tuwien.validation.EndpointValidator; +import at.ac.tuwien.ifs.dbrepo.config.EndpointConfig; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.*; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.ld.LdDatasetDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.external.ExternalMetadataDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.DatabaseAccess; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.Identifier; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.IdentifierStatusType; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.service.*; +import at.ac.tuwien.ifs.dbrepo.validation.EndpointValidator; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; @@ -374,13 +374,13 @@ public class IdentifierEndpoint extends AbstractEndpoint { }) public ResponseEntity<IdentifierDto> save(@NotNull @PathVariable("identifierId") UUID identifierId, @NotNull @Valid @RequestBody IdentifierSaveDto data, - @NotNull Principal principal) throws UserNotFoundException, + Principal principal) throws UserNotFoundException, DatabaseNotFoundException, MalformedException, NotAllowedException, DataServiceException, DataServiceConnectionException, SearchServiceException, QueryNotFoundException, SearchServiceConnectionException, IdentifierNotFoundException, ViewNotFoundException, TableNotFoundException, ExternalServiceException { - log.debug("endpoint save identifier, identifierId={}, data.id={}, principal.name={}", identifierId, - data.getId(), principal.getName()); + log.debug("endpoint save identifier, identifierId={}, data.id={}", identifierId, + data.getId()); final Database database = databaseService.findById(data.getDatabaseId()); final User caller = userService.findById(getId(principal)); final Identifier identifier = identifierService.find(identifierId); @@ -475,7 +475,7 @@ public class IdentifierEndpoint extends AbstractEndpoint { schema = @Schema(implementation = ApiErrorDto.class))}), }) public ResponseEntity<IdentifierDto> create(@NotNull @Valid @RequestBody CreateIdentifierDto data, - @NotNull Principal principal) throws DatabaseNotFoundException, + Principal principal) throws DatabaseNotFoundException, UserNotFoundException, NotAllowedException, MalformedException, DataServiceConnectionException, SearchServiceException, DataServiceException, QueryNotFoundException, SearchServiceConnectionException, IdentifierNotFoundException, ViewNotFoundException, ExternalServiceException { diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/ImageEndpoint.java similarity index 89% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/ImageEndpoint.java index 62c00d1ee8..3137e08a68 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/ImageEndpoint.java @@ -1,16 +1,16 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.api.container.image.ImageBriefDto; -import at.tuwien.api.container.image.ImageChangeDto; -import at.tuwien.api.container.image.ImageCreateDto; -import at.tuwien.api.container.image.ImageDto; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.entities.container.image.ContainerImage; -import at.tuwien.exception.ImageAlreadyExistsException; -import at.tuwien.exception.ImageInvalidException; -import at.tuwien.exception.ImageNotFoundException; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.service.ImageService; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageChangeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageDto; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.image.ContainerImage; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageAlreadyExistsException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageInvalidException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.service.ImageService; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; @@ -95,9 +95,9 @@ public class ImageEndpoint extends AbstractEndpoint { schema = @Schema(implementation = ApiErrorDto.class))}), }) public ResponseEntity<ImageDto> create(@Valid @RequestBody ImageCreateDto data, - @NotNull Principal principal) throws ImageAlreadyExistsException, + Principal principal) throws ImageAlreadyExistsException, ImageInvalidException { - log.debug("endpoint create image, data={}, principal.name={}", data, principal.getName()); + log.debug("endpoint create image, data={}", data); return ResponseEntity.status(HttpStatus.CREATED) .body(metadataMapper.containerImageToImageDto( imageService.create(data, principal))); diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/LicenseEndpoint.java similarity index 91% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/LicenseEndpoint.java index 18d5e93ca2..f82127b86a 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/LicenseEndpoint.java @@ -1,8 +1,8 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.api.database.LicenseDto; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.service.LicenseService; +import at.ac.tuwien.ifs.dbrepo.core.api.database.LicenseDto; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.service.LicenseService; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MessageEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/MessageEndpoint.java similarity index 92% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MessageEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/MessageEndpoint.java index 656279a86d..6d6f3c8591 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MessageEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/MessageEndpoint.java @@ -1,14 +1,14 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.api.maintenance.BannerMessageBriefDto; -import at.tuwien.api.maintenance.BannerMessageCreateDto; -import at.tuwien.api.maintenance.BannerMessageDto; -import at.tuwien.api.maintenance.BannerMessageUpdateDto; -import at.tuwien.entities.maintenance.BannerMessage; -import at.tuwien.exception.MessageNotFoundException; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.service.BannerMessageService; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageDto; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.maintenance.BannerMessage; +import at.ac.tuwien.ifs.dbrepo.core.exception.MessageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.service.BannerMessageService; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MetadataEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/MetadataEndpoint.java similarity index 94% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MetadataEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/MetadataEndpoint.java index 8a36471816..4916ed8612 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MetadataEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/MetadataEndpoint.java @@ -1,10 +1,10 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.exception.IdentifierNotFoundException; -import at.tuwien.oaipmh.OaiErrorType; -import at.tuwien.oaipmh.OaiListIdentifiersParameters; -import at.tuwien.oaipmh.OaiRecordParameters; -import at.tuwien.service.MetadataService; +import at.ac.tuwien.ifs.dbrepo.core.exception.IdentifierNotFoundException; +import at.ac.tuwien.ifs.dbrepo.oaipmh.OaiErrorType; +import at.ac.tuwien.ifs.dbrepo.oaipmh.OaiListIdentifiersParameters; +import at.ac.tuwien.ifs.dbrepo.oaipmh.OaiRecordParameters; +import at.ac.tuwien.ifs.dbrepo.service.MetadataService; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/OntologyEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/OntologyEndpoint.java similarity index 93% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/OntologyEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/OntologyEndpoint.java index c723568556..da48971adb 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/OntologyEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/OntologyEndpoint.java @@ -1,15 +1,15 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.api.semantics.*; -import at.tuwien.entities.semantics.Ontology; -import at.tuwien.exception.FilterBadRequestException; -import at.tuwien.exception.MalformedException; -import at.tuwien.exception.OntologyNotFoundException; -import at.tuwien.exception.UriMalformedException; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.service.EntityService; -import at.tuwien.service.OntologyService; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.*; +import at.ac.tuwien.ifs.dbrepo.core.entity.semantics.Ontology; +import at.ac.tuwien.ifs.dbrepo.core.exception.FilterBadRequestException; +import at.ac.tuwien.ifs.dbrepo.core.exception.MalformedException; +import at.ac.tuwien.ifs.dbrepo.core.exception.OntologyNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.UriMalformedException; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.service.EntityService; +import at.ac.tuwien.ifs.dbrepo.service.OntologyService; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; @@ -104,8 +104,8 @@ public class OntologyEndpoint extends AbstractEndpoint { schema = @Schema(implementation = OntologyDto.class))}) }) public ResponseEntity<OntologyDto> create(@NotNull @Valid @RequestBody OntologyCreateDto data, - @NotNull Principal principal) { - log.debug("endpoint create ontology, data={}, principal.name={}", data, principal.getName()); + Principal principal) { + log.debug("endpoint create ontology, data={}", data); return ResponseEntity.status(HttpStatus.CREATED) .body(metadataMapper.ontologyToOntologyDto(ontologyService.create(data, principal))); } diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/TableEndpoint.java similarity index 86% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/TableEndpoint.java index f04f66eb8e..211efe731e 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/TableEndpoint.java @@ -1,20 +1,21 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.api.database.table.CreateTableDto; -import at.tuwien.api.database.table.TableBriefDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.TableUpdateDto; -import at.tuwien.api.database.table.columns.ColumnDto; -import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.api.semantics.EntityDto; -import at.tuwien.api.semantics.TableColumnEntityDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.table.Table; -import at.tuwien.exception.*; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.service.*; -import at.tuwien.validation.EndpointValidator; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.CreateTableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.EntityDto; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.TableColumnEntityDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.DatabaseAccess; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.service.*; +import at.ac.tuwien.ifs.dbrepo.validation.EndpointValidator; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; @@ -35,6 +36,7 @@ import org.springframework.web.bind.annotation.*; import java.security.Principal; import java.util.List; +import java.util.Optional; import java.util.UUID; import java.util.stream.Collectors; @@ -47,21 +49,21 @@ public class TableEndpoint extends AbstractEndpoint { private final UserService userService; private final TableService tableService; private final EntityService entityService; - private final AccessService accessService; private final MetadataMapper metadataMapper; private final DatabaseService databaseService; + private final DashboardService dashboardService; private final EndpointValidator endpointValidator; @Autowired public TableEndpoint(UserService userService, TableService tableService, EntityService entityService, - AccessService accessService, MetadataMapper metadataMapper, DatabaseService databaseService, - EndpointValidator endpointValidator) { + MetadataMapper metadataMapper, DatabaseService databaseService, + DashboardService dashboardService, EndpointValidator endpointValidator) { this.userService = userService; this.tableService = tableService; this.entityService = entityService; - this.accessService = accessService; this.metadataMapper = metadataMapper; this.databaseService = databaseService; + this.dashboardService = dashboardService; this.endpointValidator = endpointValidator; } @@ -95,13 +97,33 @@ public class TableEndpoint extends AbstractEndpoint { final Database database = databaseService.findById(databaseId); endpointValidator.validateOnlyPrivateSchemaAccess(database, principal); endpointValidator.validateOnlyPrivateSchemaHasRole(database, principal, "list-tables"); - return ResponseEntity.ok(database.getTables() + return ResponseEntity.ok(filterTables(database, principal) .stream() - .filter(t -> t.getIsPublic() || t.getIsSchemaPublic() || (principal != null && isSystem(principal))) .map(metadataMapper::tableToTableBriefDto) .collect(Collectors.toList())); } + public List<Table> filterTables(Database database, Principal principal) { + final List<Table> tables = database.getTables(); + DatabaseAccess access = null; + if (principal != null) { + if (isSystem(principal)) { + return tables; + } + final Optional<DatabaseAccess> optional = database.getAccesses() + .stream() + .filter(a -> a.getHdbid().equals(getId(principal))) + .findFirst(); + if (optional.isPresent()) { + access = optional.get(); + } + } + final Boolean hasAccess = access != null; + return tables.stream() + .filter(t -> t.getIsPublic() || t.getIsSchemaPublic() || hasAccess) + .toList(); + } + @GetMapping("/{tableId}/suggest") @Transactional(readOnly = true) @PreAuthorize("hasAuthority('table-semantic-analyse')") @@ -143,10 +165,9 @@ public class TableEndpoint extends AbstractEndpoint { }) public ResponseEntity<List<EntityDto>> analyseTable(@NotNull @PathVariable("databaseId") UUID databaseId, @NotNull @PathVariable("tableId") UUID tableId, - @NotNull Principal principal) + Principal principal) throws MalformedException, TableNotFoundException, DatabaseNotFoundException, NotAllowedException { - log.debug("endpoint analyse table semantics, databaseId={}, tableId={}, principal.name={}", databaseId, tableId, - principal); + log.debug("endpoint analyse table semantics, databaseId={}, tableId={}", databaseId, tableId); final Database database = databaseService.findById(databaseId); final Table table = tableService.findById(database, tableId); if (!table.getOwner().getId().equals(getId(principal))) { @@ -195,11 +216,10 @@ public class TableEndpoint extends AbstractEndpoint { }) public ResponseEntity<Void> updateStatistic(@NotNull @PathVariable("databaseId") UUID databaseId, @NotNull @PathVariable("tableId") UUID tableId, - @NotNull Principal principal) + Principal principal) throws TableNotFoundException, DatabaseNotFoundException, SearchServiceException, NotAllowedException, SearchServiceConnectionException, MalformedException, DataServiceException, DataServiceConnectionException { - log.debug("endpoint update table statistics, databaseId={}, tableId={}, principal.name={}", databaseId, tableId, - principal.getName()); + log.debug("endpoint update table statistics, databaseId={}, tableId={}", databaseId, tableId); final Database database = databaseService.findById(databaseId); final Table table = tableService.findById(database, tableId); if (!table.getOwner().getId().equals(getId(principal)) && !isSystem(principal)) { @@ -254,12 +274,12 @@ public class TableEndpoint extends AbstractEndpoint { @NotNull @PathVariable("tableId") UUID tableId, @NotNull @PathVariable("columnId") UUID columnId, @NotNull @Valid @RequestBody ColumnSemanticsUpdateDto updateDto, - @NotNull Principal principal) throws NotAllowedException, + Principal principal) throws NotAllowedException, MalformedException, DataServiceException, DataServiceConnectionException, UserNotFoundException, TableNotFoundException, DatabaseNotFoundException, AccessNotFoundException, SearchServiceException, SearchServiceConnectionException, OntologyNotFoundException, SemanticEntityNotFoundException { - log.debug("endpoint update table, databaseId={}, tableId={}, columnId={}, principal.name={}", databaseId, - tableId, columnId, principal.getName()); + log.debug("endpoint update table, databaseId={}, tableId={}, columnId={}", databaseId, + tableId, columnId); final Database database = databaseService.findById(databaseId); final Table table = tableService.findById(database, tableId); if (!hasRole(principal, "modify-foreign-table-column-semantics")) { @@ -303,10 +323,10 @@ public class TableEndpoint extends AbstractEndpoint { public ResponseEntity<List<TableColumnEntityDto>> analyseTableColumn(@NotNull @PathVariable("databaseId") UUID databaseId, @NotNull @PathVariable("tableId") UUID tableId, @NotNull @PathVariable("columnId") UUID columnId, - @NotNull Principal principal) + Principal principal) throws MalformedException, TableNotFoundException, DatabaseNotFoundException { - log.debug("endpoint analyse table column semantics, databaseId={}, tableId={}, columnId={}, principal.name={}", - databaseId, tableId, columnId, principal.getName()); + log.debug("endpoint analyse table column semantics, databaseId={}, tableId={}, columnId={}", + databaseId, tableId, columnId); return ResponseEntity.ok() .body(entityService.suggestByColumn( tableService.findColumnById( @@ -359,18 +379,19 @@ public class TableEndpoint extends AbstractEndpoint { }) public ResponseEntity<TableBriefDto> create(@NotNull @PathVariable("databaseId") UUID databaseId, @NotNull @Valid @RequestBody CreateTableDto data, - @NotNull Principal principal) throws NotAllowedException, MalformedException, + Principal principal) throws NotAllowedException, MalformedException, DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, UserNotFoundException, AccessNotFoundException, TableNotFoundException, TableExistsException, SearchServiceException, - SearchServiceConnectionException, OntologyNotFoundException, SemanticEntityNotFoundException { - log.debug("endpoint create table, databaseId={}, data.name={}, principal.name={}", databaseId, data.getName(), - principal.getName()); + SearchServiceConnectionException, OntologyNotFoundException, SemanticEntityNotFoundException, + DashboardServiceException, DashboardServiceConnectionException { + log.debug("endpoint create table, databaseId={}, data.name={}", databaseId, data.getName()); final Database database = databaseService.findById(databaseId); endpointValidator.validateOnlyAccess(database, principal, true); endpointValidator.validateColumnCreateConstraints(data); + final Table table = tableService.createTable(database, data, principal); + dashboardService.update(table.getDatabase()); return ResponseEntity.status(HttpStatus.CREATED) - .body(metadataMapper.tableToTableBriefDto( - tableService.createTable(database, data, principal))); + .body(metadataMapper.tableToTableBriefDto(table)); } @PutMapping("/{tableId}") @@ -415,20 +436,22 @@ public class TableEndpoint extends AbstractEndpoint { public ResponseEntity<TableBriefDto> update(@NotNull @PathVariable("databaseId") UUID databaseId, @NotNull @PathVariable("tableId") UUID tableId, @NotNull @Valid @RequestBody TableUpdateDto data, - @NotNull Principal principal) throws NotAllowedException, + Principal principal) throws NotAllowedException, DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, TableNotFoundException, - SearchServiceException, SearchServiceConnectionException { - log.debug("endpoint update table, databaseId={}, data.is_public={}, data.is_schema_public={}, principal.name={}", - databaseId, data.getIsPublic(), data.getIsSchemaPublic(), principal.getName()); + SearchServiceException, SearchServiceConnectionException, DashboardServiceException, + DashboardServiceConnectionException { + log.debug("endpoint update table, databaseId={}, data.is_public={}, data.is_schema_public={}", + databaseId, data.getIsPublic(), data.getIsSchemaPublic()); final Database database = databaseService.findById(databaseId); final Table table = tableService.findById(database, tableId); if (!table.getOwner().getId().equals(getId(principal))) { log.error("Failed to update table: not owner"); throw new NotAllowedException("Failed to update table: not owner"); } + final Table table1 = tableService.updateTable(table, data); + dashboardService.update(table1.getDatabase()); return ResponseEntity.accepted() - .body(metadataMapper.tableToTableBriefDto( - tableService.updateTable(table, data))); + .body(metadataMapper.tableToTableBriefDto(table1)); } @GetMapping("/{tableId}") @@ -461,28 +484,23 @@ public class TableEndpoint extends AbstractEndpoint { log.debug("endpoint find table, databaseId={}, tableId={}", databaseId, tableId); final Database database = databaseService.findById(databaseId); final Table table = tableService.findById(database, tableId); - boolean isOwner = false; if (principal != null) { - isOwner = table.getOwner().getId().equals(getId(principal)); - if (!table.getIsSchemaPublic()) { - try { - accessService.find(table.getDatabase(), userService.findById(getId(principal))); - } catch (UserNotFoundException | AccessNotFoundException e) { - if (!isOwner && !isSystem(principal)) { - log.error("Failed to find table with id {}: private and no access permission", table); - throw new NotAllowedException("Failed to find table with id " + tableId + ": private and no access permission"); - } - } + if (isSystem(principal)) { + return ResponseEntity.ok(metadataMapper.tableToTableDto(table)); + } + final Optional<DatabaseAccess> optional = database.getAccesses() + .stream() + .filter(a -> a.getHuserid().equals(getId(principal))) + .findFirst(); + if (table.getIsPublic() || table.getIsSchemaPublic() || optional.isPresent()) { + return ResponseEntity.ok(metadataMapper.tableToTableDto(table)); } } - if (!table.getIsSchemaPublic() && !isOwner && !isSystem(principal)) { - log.debug("remove schema from table: {}.{}", database.getInternalName(), table.getInternalName()); - table.setColumns(List.of()); - table.setConstraints(null); + if (!table.getIsPublic() && !table.getIsSchemaPublic()) { + log.error("Failed to find table: not public and no access found"); + throw new NotAllowedException("Failed to find table: not public and no access found"); } - final TableDto dto = metadataMapper.tableToTableDto(table); - return ResponseEntity.ok() - .body(dto); + return ResponseEntity.ok(metadataMapper.tableToTableDto(table)); } @DeleteMapping("/{tableId}") @@ -523,11 +541,11 @@ public class TableEndpoint extends AbstractEndpoint { }) public ResponseEntity<Void> delete(@NotNull @PathVariable("databaseId") UUID databaseId, @NotNull @PathVariable("tableId") UUID tableId, - @NotNull Principal principal) throws NotAllowedException, + Principal principal) throws NotAllowedException, DataServiceException, DataServiceConnectionException, TableNotFoundException, DatabaseNotFoundException, - SearchServiceException, SearchServiceConnectionException { - log.debug("endpoint delete table, databaseId={}, tableId={}, principal.name={}", databaseId, tableId, - principal.getName()); + SearchServiceException, SearchServiceConnectionException, DashboardServiceException, + DashboardServiceConnectionException { + log.debug("endpoint delete table, databaseId={}, tableId={}", databaseId, tableId); final Database database = databaseService.findById(databaseId); final Table table = tableService.findById(database, tableId); /* roles */ @@ -542,6 +560,7 @@ public class TableEndpoint extends AbstractEndpoint { } /* delete table */ tableService.deleteTable(table); + dashboardService.update(databaseService.findById(databaseId)); return ResponseEntity.accepted() .build(); } diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UnitEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/UnitEndpoint.java similarity index 90% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UnitEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/UnitEndpoint.java index 45aef3645b..a0f5630c7a 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UnitEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/UnitEndpoint.java @@ -1,8 +1,8 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.api.database.table.columns.concepts.UnitDto; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.service.UnitService; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts.UnitDto; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.service.UnitService; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/UserEndpoint.java similarity index 91% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/UserEndpoint.java index 8f3e15529e..1de29eef1b 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/UserEndpoint.java @@ -1,16 +1,16 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.api.auth.CreateUserDto; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.api.user.UserUpdateDto; -import at.tuwien.entities.user.User; -import at.tuwien.exception.AuthServiceException; -import at.tuwien.exception.NotAllowedException; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.service.UserService; +import at.ac.tuwien.ifs.dbrepo.core.api.auth.CreateUserDto; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.AuthServiceException; +import at.ac.tuwien.ifs.dbrepo.core.exception.NotAllowedException; +import at.ac.tuwien.ifs.dbrepo.core.exception.UserNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.service.UserService; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; @@ -132,9 +132,9 @@ public class UserEndpoint extends AbstractEndpoint { schema = @Schema(implementation = ApiErrorDto.class))}), }) public ResponseEntity<UserDto> find(@NotNull @PathVariable("userId") UUID userId, - @NotNull Principal principal) throws NotAllowedException, + Principal principal) throws NotAllowedException, UserNotFoundException { - log.debug("endpoint find a user, userId={}, principal.name={}", userId, principal.getName()); + log.debug("endpoint find a user, userId={}", userId); /* check */ final User user = userService.findById(userId); if (!user.getId().equals(getId(principal)) && !hasRole(principal, "find-foreign-user")) { @@ -192,7 +192,7 @@ public class UserEndpoint extends AbstractEndpoint { }) public ResponseEntity<UserBriefDto> modify(@NotNull @PathVariable("userId") UUID userId, @NotNull @Valid @RequestBody UserUpdateDto data, - @NotNull Principal principal) throws NotAllowedException, + Principal principal) throws NotAllowedException, UserNotFoundException, AuthServiceException { log.debug("endpoint modify a user, userId={}, data={}", userId, data); final User user = userService.findById(userId); diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ViewEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/ViewEndpoint.java similarity index 83% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ViewEndpoint.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/ViewEndpoint.java index 2cc187c884..2c4bfd4e44 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ViewEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/ViewEndpoint.java @@ -1,18 +1,19 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.api.database.CreateViewDto; -import at.tuwien.api.database.ViewBriefDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.ViewUpdateDto; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.View; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.service.DatabaseService; -import at.tuwien.service.UserService; -import at.tuwien.service.ViewService; +import at.ac.tuwien.ifs.dbrepo.core.api.database.CreateViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.DatabaseAccess; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.View; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.service.DashboardService; +import at.ac.tuwien.ifs.dbrepo.service.DatabaseService; +import at.ac.tuwien.ifs.dbrepo.service.UserService; +import at.ac.tuwien.ifs.dbrepo.service.ViewService; import io.micrometer.observation.annotation.Observed; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.ArraySchema; @@ -33,6 +34,7 @@ import org.springframework.web.bind.annotation.*; import java.security.Principal; import java.util.List; +import java.util.Optional; import java.util.UUID; import java.util.stream.Collectors; @@ -46,14 +48,16 @@ public class ViewEndpoint extends AbstractEndpoint { private final ViewService viewService; private final MetadataMapper metadataMapper; private final DatabaseService databaseService; + private final DashboardService dashboardService; @Autowired public ViewEndpoint(UserService userService, ViewService viewService, MetadataMapper metadataMapper, - DatabaseService databaseService) { + DatabaseService databaseService, DashboardService dashboardService) { this.userService = userService; this.viewService = viewService; this.metadataMapper = metadataMapper; this.databaseService = databaseService; + this.dashboardService = dashboardService; } @GetMapping @@ -79,13 +83,7 @@ public class ViewEndpoint extends AbstractEndpoint { DatabaseNotFoundException { log.debug("endpoint find all views, databaseId={}", databaseId); final Database database = databaseService.findById(databaseId); - final User caller; - if (principal != null) { - caller = userService.findById(getId(principal)); - } else { - caller = null; - } - return ResponseEntity.ok(viewService.findAll(database, caller) + return ResponseEntity.ok(filterViews(database, principal) .stream() .map(metadataMapper::viewToViewBriefDto) .collect(Collectors.toList())); @@ -142,10 +140,10 @@ public class ViewEndpoint extends AbstractEndpoint { }) public ResponseEntity<ViewBriefDto> create(@NotNull @PathVariable("databaseId") UUID databaseId, @NotNull @Valid @RequestBody CreateViewDto data, - @NotNull Principal principal) throws NotAllowedException, + Principal principal) throws NotAllowedException, MalformedException, DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, UserNotFoundException, SearchServiceException, SearchServiceConnectionException, TableNotFoundException, - ImageNotFoundException, ViewExistsException { + ImageNotFoundException, ViewExistsException, DashboardServiceException, DashboardServiceConnectionException { log.debug("endpoint create view, databaseId={}, data.name={}", databaseId, data.getName()); final Database database = databaseService.findById(databaseId); if (!database.getOwner().getId().equals(getId(principal))) { @@ -156,9 +154,10 @@ public class ViewEndpoint extends AbstractEndpoint { log.error("Failed to create view: name exists"); throw new ViewExistsException("Failed to create view: name exists"); } + final View view = viewService.create(database, userService.findById(getId(principal)), data); + dashboardService.update(view.getDatabase()); return ResponseEntity.status(HttpStatus.CREATED) - .body(metadataMapper.viewToViewBriefDto( - viewService.create(database, userService.findById(getId(principal)), data))); + .body(metadataMapper.viewToViewBriefDto(view)); } @GetMapping("/{viewId}") @@ -187,12 +186,27 @@ public class ViewEndpoint extends AbstractEndpoint { public ResponseEntity<ViewDto> find(@NotNull @PathVariable("databaseId") UUID databaseId, @NotNull @PathVariable("viewId") UUID viewId, Principal principal) throws DatabaseNotFoundException, - ViewNotFoundException { + ViewNotFoundException, NotAllowedException { log.debug("endpoint find view, databaseId={}, viewId={}", databaseId, viewId); final Database database = databaseService.findById(databaseId); final View view = viewService.findById(database, viewId); - return ResponseEntity.status(HttpStatus.OK) - .body(metadataMapper.viewToViewDto(view)); + if (principal != null) { + if (isSystem(principal)) { + return ResponseEntity.ok(metadataMapper.viewToViewDto(view)); + } + final Optional<DatabaseAccess> optional = database.getAccesses() + .stream() + .filter(a -> a.getHuserid().equals(getId(principal))) + .findFirst(); + if (view.getIsPublic() || view.getIsSchemaPublic() || optional.isPresent()) { + return ResponseEntity.ok(metadataMapper.viewToViewDto(view)); + } + } + if (!view.getIsPublic() && !view.getIsSchemaPublic()) { + log.error("Failed to find view: not public and no access found"); + throw new NotAllowedException("Failed to find view: not public and no access found"); + } + return ResponseEntity.ok(metadataMapper.viewToViewDto(view)); } @DeleteMapping("/{viewId}") @@ -238,9 +252,10 @@ public class ViewEndpoint extends AbstractEndpoint { }) public ResponseEntity<Void> delete(@NotNull @PathVariable("databaseId") UUID databaseId, @NotNull @PathVariable("viewId") UUID viewId, - @NotNull Principal principal) throws NotAllowedException, DataServiceException, + Principal principal) throws NotAllowedException, DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, ViewNotFoundException, SearchServiceException, - SearchServiceConnectionException, UserNotFoundException { + SearchServiceConnectionException, UserNotFoundException, DashboardServiceException, + DashboardServiceConnectionException { log.debug("endpoint delete view, databaseId={}, viewId={}", databaseId, viewId); final Database database = databaseService.findById(databaseId); if (!database.getOwner().getId().equals(getId(principal))) { @@ -249,6 +264,7 @@ public class ViewEndpoint extends AbstractEndpoint { } final View view = viewService.findById(database, viewId); viewService.delete(view); + dashboardService.update(databaseService.findById(databaseId)); return ResponseEntity.accepted() .build(); } @@ -292,9 +308,10 @@ public class ViewEndpoint extends AbstractEndpoint { public ResponseEntity<ViewBriefDto> update(@NotNull @PathVariable("databaseId") UUID databaseId, @NotNull @PathVariable("viewId") UUID viewId, @NotNull @Valid @RequestBody ViewUpdateDto data, - @NotNull Principal principal) throws NotAllowedException, + Principal principal) throws NotAllowedException, DataServiceConnectionException, DatabaseNotFoundException, ViewNotFoundException, SearchServiceException, - SearchServiceConnectionException, UserNotFoundException { + SearchServiceConnectionException, UserNotFoundException, DashboardServiceException, + DashboardServiceConnectionException { log.debug("endpoint update view, databaseId={}, viewId={}", databaseId, viewId); final Database database = databaseService.findById(databaseId); final View view = viewService.findById(database, viewId); @@ -302,9 +319,10 @@ public class ViewEndpoint extends AbstractEndpoint { log.error("Failed to update view: not the database- or view owner"); throw new NotAllowedException("Failed to update view: not the database- or view owner"); } + final View view1 = viewService.update(view, data); + dashboardService.update(view1.getDatabase()); return ResponseEntity.accepted() - .body(metadataMapper.viewToViewBriefDto( - viewService.update(database, view, data))); + .body(metadataMapper.viewToViewBriefDto(view1)); } } diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/handlers/ApiExceptionHandler.java similarity index 96% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/handlers/ApiExceptionHandler.java index eadce489d9..0d4a617001 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/handlers/ApiExceptionHandler.java @@ -1,7 +1,7 @@ -package at.tuwien.handlers; +package at.ac.tuwien.ifs.dbrepo.handlers; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import com.auth0.jwt.exceptions.TokenExpiredException; import io.swagger.v3.oas.annotations.Hidden; import jakarta.ws.rs.NotAuthorizedException; @@ -130,6 +130,20 @@ public class ApiExceptionHandler extends ResponseEntityExceptionHandler { return generic_handle(e.getClass(), e.getLocalizedMessage()); } + @Hidden + @ResponseStatus(code = HttpStatus.BAD_GATEWAY) + @ExceptionHandler(DashboardServiceConnectionException.class) + public ResponseEntity<ApiErrorDto> handle(DashboardServiceConnectionException e) { + return generic_handle(e.getClass(), e.getLocalizedMessage()); + } + + @Hidden + @ResponseStatus(code = HttpStatus.SERVICE_UNAVAILABLE) + @ExceptionHandler(DashboardServiceException.class) + public ResponseEntity<ApiErrorDto> handle(DashboardServiceException e) { + return generic_handle(e.getClass(), e.getLocalizedMessage()); + } + @Hidden @ResponseStatus(code = HttpStatus.EXPECTATION_FAILED) @ExceptionHandler(DatabaseMalformedException.class) diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/validation/EndpointValidator.java similarity index 94% rename from dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java rename to dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/validation/EndpointValidator.java index 6fe29c118b..8068a8d734 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/validation/EndpointValidator.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/validation/EndpointValidator.java @@ -1,19 +1,19 @@ -package at.tuwien.validation; +package at.ac.tuwien.ifs.dbrepo.validation; -import at.tuwien.SortType; -import at.tuwien.api.database.table.CreateTableDto; -import at.tuwien.api.database.table.columns.ColumnTypeDto; -import at.tuwien.api.database.table.columns.CreateTableColumnDto; -import at.tuwien.api.identifier.IdentifierSaveDto; -import at.tuwien.endpoints.AbstractEndpoint; -import at.tuwien.entities.database.AccessType; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.service.AccessService; -import at.tuwien.service.UserService; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.CreateTableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.SortType; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.CreateTableColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierSaveDto; +import at.ac.tuwien.ifs.dbrepo.endpoints.AbstractEndpoint; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.AccessType; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.DatabaseAccess; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.service.AccessService; +import at.ac.tuwien.ifs.dbrepo.service.UserService; import lombok.extern.log4j.Log4j2; import org.apache.commons.validator.GenericValidator; import org.springframework.beans.factory.annotation.Autowired; diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AbstractEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AbstractEndpoint.java deleted file mode 100644 index 7ec1471f4d..0000000000 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AbstractEndpoint.java +++ /dev/null @@ -1,53 +0,0 @@ -package at.tuwien.endpoints; - -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.user.UserDetailsDto; -import org.springframework.security.core.Authentication; - -import java.security.Principal; -import java.util.UUID; - -public abstract class AbstractEndpoint { - - public boolean hasRole(Principal principal, String role) { - if (principal == null || role == null) { - return false; - } - final Authentication authentication = (Authentication) principal; - return authentication.getAuthorities() - .stream() - .anyMatch(a -> a.getAuthority().equals(role)); - } - - public boolean isSystem(Principal principal) { - if (principal == null) { - return false; - } - final Authentication authentication = (Authentication) principal; - return authentication.getAuthorities() - .stream() - .anyMatch(a -> a.getAuthority().equals("system")); - } - - public UUID getId(Principal principal) { - if (principal == null) { - return null; - } - final Authentication authentication = (Authentication) principal; - if (authentication.getPrincipal() instanceof UserDetailsDto user) { - if (user.getId() == null) { - throw new IllegalArgumentException("Principal has no id"); - } - return UUID.fromString(user.getId()); - } - throw new IllegalArgumentException("Unknown principal instance: " + authentication.getPrincipal().getClass()); - } - - public void removeInternalData(ContainerDto container) { - container.setPassword(null); - container.setUsername(null); - container.setHost(null); - container.setPort(null); - } - -} diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/application.yml b/dbrepo-metadata-service/rest-service/src/main/resources/application.yml index a8a1675982..681a6db8dd 100644 --- a/dbrepo-metadata-service/rest-service/src/main/resources/application.yml +++ b/dbrepo-metadata-service/rest-service/src/main/resources/application.yml @@ -48,15 +48,22 @@ logging: at.tuwien.: "${LOG_LEVEL:info}" org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug dbrepo: + datacite: + url: "${DATACITE_URL:https://api.datacite.org}" + prefix: "${DATACITE_PREFIX}" + username: "${DATACITE_USERNAME}" + password: "${DATACITE_PASSWORD}" endpoints: analyseService: "${ANALYSE_SERVICE_ENDPOINT:http://analyse-service:8080}" - searchService: "${SEARCH_SERVICE_ENDPOINT:http://search-service:8080}" - dataService: "${DATA_SERVICE_ENDPOINT:http://data-service:8080}" - brokerService: "${BROKER_SERVICE_ENDPOINT:http://broker-service:15672}" authService: "${AUTH_SERVICE_ENDPOINT:http://auth-service:8080}" - storageService: "${S3_ENDPOINT:http://storage-service:9000}" - rorService: "${ROR_ENDPOINT:https://api.ror.org}" + brokerService: "${BROKER_SERVICE_ENDPOINT:http://broker-service:15672}" crossRefService: "${CROSSREF_ENDPOINT:http://data.crossref.org}" + dashboardService: "${DASHBOARD_SERVICE_ENDPOINT:http://dashboard-service:8080}" + doiService: "${DOI_ENDPOINT:https://doi.org}" + dataService: "${DATA_SERVICE_ENDPOINT:http://data-service:8080}" + rorService: "${ROR_ENDPOINT:https://api.ror.org}" + searchService: "${SEARCH_SERVICE_ENDPOINT:http://search-service:8080}" + storageService: "${S3_ENDPOINT:http://storage-service:9000}" s3: accessKeyId: "${S3_ACCESS_KEY_ID:seaweedfsadmin}" secretAccessKey: "${S3_SECRET_ACCESS_KEY:seaweedfsadmin}" diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/datatypes.json b/dbrepo-metadata-service/rest-service/src/main/resources/datatypes.json deleted file mode 100644 index 3779d12cbe..0000000000 --- a/dbrepo-metadata-service/rest-service/src/main/resources/datatypes.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "name": "", - "size": { - "min": 0, - "required": true - }, - "d": { - "required": false - }, - "documentation": "https://mariadb.com/kb/en/bigint/", - "quoted": false, - "buildable": true - } -] \ No newline at end of file diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/ApplicationIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/ApplicationIntegrationTest.java similarity index 86% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/ApplicationIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/ApplicationIntegrationTest.java index 33c7bc76c5..30b82efb1f 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/ApplicationIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/ApplicationIntegrationTest.java @@ -1,4 +1,4 @@ -package at.tuwien; +package at.ac.tuwien.ifs.dbrepo; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; @@ -17,7 +17,7 @@ public class ApplicationIntegrationTest { public void main_succeeds() { /* test */ - DbrepoMetadataServiceApplication.main(new String[]{}); + MetadataServiceApplication.main(new String[]{}); } } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/ObjectMapperConfig.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/config/ObjectMapperConfig.java similarity index 95% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/ObjectMapperConfig.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/config/ObjectMapperConfig.java index 6cbf682c8d..508540f52a 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/ObjectMapperConfig.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/config/ObjectMapperConfig.java @@ -1,4 +1,4 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/RabbitConfig.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/config/RabbitConfig.java similarity index 91% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/RabbitConfig.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/config/RabbitConfig.java index f8a83baf85..3dddb8cf33 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/RabbitConfig.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/config/RabbitConfig.java @@ -1,6 +1,6 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; -import at.tuwien.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.Getter; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Value; @@ -11,6 +11,8 @@ import org.springframework.http.client.support.BasicAuthenticationInterceptor; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.DefaultUriBuilderFactory; +import java.io.IOException; + @Getter @Log4j2 @Configuration diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/converters/IdentifierStatusTypeDtoConverterUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/converters/IdentifierStatusTypeDtoConverterUnitTest.java similarity index 75% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/converters/IdentifierStatusTypeDtoConverterUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/converters/IdentifierStatusTypeDtoConverterUnitTest.java index 8c7316b3d1..20f1f615eb 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/converters/IdentifierStatusTypeDtoConverterUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/converters/IdentifierStatusTypeDtoConverterUnitTest.java @@ -1,28 +1,24 @@ -package at.tuwien.converters; +package at.ac.tuwien.ifs.dbrepo.converters; -import at.tuwien.api.identifier.IdentifierStatusTypeDto; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierStatusTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import java.io.IOException; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @Log4j2 @SpringBootTest -public class IdentifierStatusTypeDtoConverterUnitTest extends AbstractUnitTest { +public class IdentifierStatusTypeDtoConverterUnitTest extends BaseTest { @Autowired private IdentifierStatusTypeDtoConverter identifierStatusTypeDtoConverter; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void identifierStatusTypeDtoConverter_succeeds() { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/converters/IdentifierTypeDtoConverterUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/converters/IdentifierTypeDtoConverterUnitTest.java similarity index 75% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/converters/IdentifierTypeDtoConverterUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/converters/IdentifierTypeDtoConverterUnitTest.java index 98abd668d8..1d73cc3445 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/converters/IdentifierTypeDtoConverterUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/converters/IdentifierTypeDtoConverterUnitTest.java @@ -1,28 +1,24 @@ -package at.tuwien.converters; +package at.ac.tuwien.ifs.dbrepo.converters; -import at.tuwien.api.identifier.IdentifierTypeDto; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import java.io.IOException; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @Log4j2 @SpringBootTest -public class IdentifierTypeDtoConverterUnitTest extends AbstractUnitTest { +public class IdentifierTypeDtoConverterUnitTest extends BaseTest { @Autowired private IdentifierTypeDtoConverter identifierTypeDtoConverter; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void IdentifierTypeDtoConverter_succeeds() { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/AbstractEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/AbstractEndpointUnitTest.java similarity index 56% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/AbstractEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/AbstractEndpointUnitTest.java index dfa4924957..52ffe690fa 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/AbstractEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/AbstractEndpointUnitTest.java @@ -1,53 +1,27 @@ -package at.tuwien.endpoints; - -import at.tuwien.api.database.AccessTypeDto; -import at.tuwien.api.database.DatabaseAccessDto; -import at.tuwien.api.user.UserDetailsDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.service.AccessService; -import at.tuwien.service.DatabaseService; -import at.tuwien.service.UserService; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.endpoints; + +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDetailsDto; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.test.context.support.WithAnonymousUser; -import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.security.Principal; -import java.util.List; -import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class AbstractEndpointUnitTest extends AbstractUnitTest { +public class AbstractEndpointUnitTest extends BaseTest { @Autowired private AccessEndpoint accessEndpoint; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void hasRole_noPrincipal_fails() { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/AccessEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/AccessEndpointUnitTest.java similarity index 86% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/AccessEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/AccessEndpointUnitTest.java index 49b5d48de8..3c041352ea 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/AccessEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/AccessEndpointUnitTest.java @@ -1,18 +1,19 @@ -package at.tuwien.endpoints; - -import at.tuwien.api.database.AccessTypeDto; -import at.tuwien.api.database.DatabaseAccessDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.service.AccessService; -import at.tuwien.service.DatabaseService; -import at.tuwien.service.UserService; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.endpoints; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.AccessTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseAccessDto; +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.CreateDashboardResponseDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.DatabaseAccess; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.service.AccessService; +import at.ac.tuwien.ifs.dbrepo.service.DashboardService; +import at.ac.tuwien.ifs.dbrepo.service.DatabaseService; +import at.ac.tuwien.ifs.dbrepo.service.UserService; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -37,7 +38,7 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class AccessEndpointUnitTest extends AbstractUnitTest { +public class AccessEndpointUnitTest extends BaseTest { @MockBean private AccessService accessService; @@ -48,17 +49,15 @@ public class AccessEndpointUnitTest extends AbstractUnitTest { @MockBean private UserService userService; + @MockBean + private DashboardService dashboardService; + @Autowired private AccessEndpoint accessEndpoint; @Autowired private MetadataMapper metadataMapper; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @WithAnonymousUser public void create_anonymous_fails() { @@ -113,7 +112,7 @@ public class AccessEndpointUnitTest extends AbstractUnitTest { @WithMockUser(username = USER_1_USERNAME, authorities = {"create-database-access"}) public void create_succeeds() throws DataServiceException, DataServiceConnectionException, NotAllowedException, DatabaseNotFoundException, UserNotFoundException, AccessNotFoundException, SearchServiceException, - SearchServiceConnectionException { + SearchServiceConnectionException, DashboardServiceException, DashboardServiceConnectionException { /* mock */ when(accessService.create(eq(DATABASE_1), eq(USER_2), any(AccessTypeDto.class))) @@ -208,7 +207,7 @@ public class AccessEndpointUnitTest extends AbstractUnitTest { @WithMockUser(username = USER_1_USERNAME, authorities = {"update-database-access"}) public void update_succeeds() throws NotAllowedException, DataServiceException, DataServiceConnectionException, AccessNotFoundException, DatabaseNotFoundException, UserNotFoundException, SearchServiceException, - SearchServiceConnectionException { + SearchServiceConnectionException, DashboardServiceException, DashboardServiceConnectionException { /* mock */ doNothing() @@ -216,7 +215,7 @@ public class AccessEndpointUnitTest extends AbstractUnitTest { .update(eq(DATABASE_1), eq(USER_2), any(AccessTypeDto.class)); /* test */ - generic_update(USER_1_PRINCIPAL, USER_1, USER_2_ID, USER_2, DATABASE_1_USER_2_WRITE_OWN_ACCESS); + generic_update(USER_1_PRINCIPAL, USER_1, USER_2_ID, USER_2, DATABASE_1_USER_1_READ_ACCESS); } @Test @@ -293,7 +292,7 @@ public class AccessEndpointUnitTest extends AbstractUnitTest { @WithMockUser(username = USER_1_USERNAME, authorities = {"delete-database-access"}) public void revoke_succeeds() throws NotAllowedException, DataServiceException, DataServiceConnectionException, UserNotFoundException, DatabaseNotFoundException, AccessNotFoundException, SearchServiceException, - SearchServiceConnectionException { + SearchServiceConnectionException, DashboardServiceException, DashboardServiceConnectionException { /* mock */ doNothing() @@ -311,7 +310,7 @@ public class AccessEndpointUnitTest extends AbstractUnitTest { protected void generic_create(Principal principal, User principalUser, UUID userId, User user, DatabaseAccess access) throws NotAllowedException, DataServiceException, DataServiceConnectionException, UserNotFoundException, DatabaseNotFoundException, AccessNotFoundException, SearchServiceException, - SearchServiceConnectionException { + SearchServiceConnectionException, DashboardServiceException, DashboardServiceConnectionException { /* mock */ when(databaseService.findById(DATABASE_1_ID)) @@ -340,6 +339,10 @@ public class AccessEndpointUnitTest extends AbstractUnitTest { .when(userService) .findById(any(UUID.class)); } + when(dashboardService.create(DATABASE_1)) + .thenReturn(CreateDashboardResponseDto.builder() + .uid(DATABASE_1_DASHBOARD_UID) + .build()); /* test */ final ResponseEntity<?> response = accessEndpoint.create(DATABASE_1_ID, userId, UPDATE_DATABASE_ACCESS_READ_DTO, principal); @@ -384,7 +387,7 @@ public class AccessEndpointUnitTest extends AbstractUnitTest { protected void generic_update(Principal principal, User principalUser, UUID userId, User user, DatabaseAccess access) throws NotAllowedException, DataServiceException, DataServiceConnectionException, AccessNotFoundException, UserNotFoundException, DatabaseNotFoundException, - SearchServiceException, SearchServiceConnectionException { + SearchServiceException, SearchServiceConnectionException, DashboardServiceException, DashboardServiceConnectionException { /* mock */ when(databaseService.findById(DATABASE_1_ID)) @@ -415,6 +418,9 @@ public class AccessEndpointUnitTest extends AbstractUnitTest { .when(userService) .findByUsername(anyString()); } + doNothing() + .when(dashboardService) + .updateAccess(DATABASE_1, user, AccessTypeDto.READ); /* test */ final ResponseEntity<?> response = accessEndpoint.update(DATABASE_1_ID, userId, UPDATE_DATABASE_ACCESS_READ_DTO, principal); @@ -425,7 +431,7 @@ public class AccessEndpointUnitTest extends AbstractUnitTest { protected void generic_revoke(Principal principal, User principalUser, UUID userId, User user) throws DataServiceConnectionException, NotAllowedException, DataServiceException, UserNotFoundException, DatabaseNotFoundException, AccessNotFoundException, SearchServiceException, - SearchServiceConnectionException { + SearchServiceConnectionException, DashboardServiceException, DashboardServiceConnectionException { /* mock */ when(databaseService.findById(DATABASE_1_ID)) @@ -436,6 +442,9 @@ public class AccessEndpointUnitTest extends AbstractUnitTest { } when(userService.findById(userId)) .thenReturn(user); + doNothing() + .when(dashboardService) + .updateAccess(DATABASE_1, user, null); /* test */ final ResponseEntity<?> response = accessEndpoint.revoke(DATABASE_1_ID, userId, principal); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ActuatorComponentTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/ActuatorComponentTest.java similarity index 85% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ActuatorComponentTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/ActuatorComponentTest.java index 78b7f086c3..f86a8c4e8b 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ActuatorComponentTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/ActuatorComponentTest.java @@ -1,8 +1,7 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -11,6 +10,8 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.servlet.MockMvc; +import java.io.IOException; + import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; @@ -20,16 +21,11 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @ExtendWith(SpringExtension.class) @AutoConfigureMockMvc @SpringBootTest -public class ActuatorComponentTest extends AbstractUnitTest { +public class ActuatorComponentTest extends BaseTest { @Autowired private MockMvc mockMvc; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void actuatorInfo_succeeds() throws Exception { this.mockMvc.perform(get("/actuator/info")) diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ConceptEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/ConceptEndpointUnitTest.java similarity index 77% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ConceptEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/ConceptEndpointUnitTest.java index d48317f119..ba1d324299 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ConceptEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/ConceptEndpointUnitTest.java @@ -1,10 +1,9 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.api.database.table.columns.concepts.ConceptDto; -import at.tuwien.service.ConceptService; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts.ConceptDto; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.service.ConceptService; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -18,13 +17,14 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class ConceptEndpointUnitTest extends AbstractUnitTest { +public class ConceptEndpointUnitTest extends BaseTest { @MockBean private ConceptService conceptService; @@ -32,11 +32,6 @@ public class ConceptEndpointUnitTest extends AbstractUnitTest { @Autowired private ConceptEndpoint conceptEndpoint; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @WithAnonymousUser public void findAllConcepts_anonymous_succeeds() { @@ -46,7 +41,7 @@ public class ConceptEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_4_USERNAME, authorities = {}) + @WithMockUser(username = USER_4_USERNAME) public void findAllConcepts_noRole_succeeds() { /* test */ @@ -70,5 +65,5 @@ public class ConceptEndpointUnitTest extends AbstractUnitTest { assertNotNull(body); assertEquals(2, body.size()); } - + } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ContainerEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/ContainerEndpointUnitTest.java similarity index 85% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ContainerEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/ContainerEndpointUnitTest.java index 67078ee409..0933ab65ef 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ContainerEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/ContainerEndpointUnitTest.java @@ -1,16 +1,15 @@ -package at.tuwien.endpoints; - -import at.tuwien.api.container.ContainerBriefDto; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.container.CreateContainerDto; -import at.tuwien.entities.container.Container; -import at.tuwien.exception.ContainerAlreadyExistsException; -import at.tuwien.exception.ContainerNotFoundException; -import at.tuwien.exception.ImageNotFoundException; -import at.tuwien.service.impl.ContainerServiceImpl; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.endpoints; + +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.CreateContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.Container; +import at.ac.tuwien.ifs.dbrepo.core.exception.ContainerAlreadyExistsException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ContainerNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.service.impl.ContainerServiceImpl; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -34,7 +33,7 @@ import static org.mockito.Mockito.when; @Log4j2 @ExtendWith(SpringExtension.class) @SpringBootTest -public class ContainerEndpointUnitTest extends AbstractUnitTest { +public class ContainerEndpointUnitTest extends BaseTest { @MockBean private ContainerServiceImpl containerService; @@ -42,11 +41,6 @@ public class ContainerEndpointUnitTest extends AbstractUnitTest { @Autowired private ContainerEndpoint containerEndpoint; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @WithAnonymousUser public void findById_anonymous_succeeds() throws ContainerNotFoundException { @@ -74,7 +68,7 @@ public class ContainerEndpointUnitTest extends AbstractUnitTest { assertEquals(List.of("" + CONTAINER_1_PORT), headers.get("X-Port")); assertEquals(List.of(CONTAINER_1_PRIVILEGED_USERNAME), headers.get("X-Username")); assertEquals(List.of(CONTAINER_1_PRIVILEGED_PASSWORD), headers.get("X-Password")); - assertEquals(List.of(IMAGE_1_JDBC), headers.get("X-Jdbc-Method")); + assertEquals(List.of(IMAGE_1_JDBC_METHOD), headers.get("X-Jdbc-Method")); assertEquals(List.of("X-Username X-Password X-Jdbc-Method X-Host X-Port"), headers.get("Access-Control-Expose-Headers")); } @@ -135,7 +129,7 @@ public class ContainerEndpointUnitTest extends AbstractUnitTest { public void create_anonymous_fails() { final CreateContainerDto request = CreateContainerDto.builder() .name(CONTAINER_1_NAME) - .imageId(IMAGE_1_ID) + .imageId(CONTAINER_1_ID) .build(); /* test */ @@ -149,7 +143,7 @@ public class ContainerEndpointUnitTest extends AbstractUnitTest { public void create_hasRole_succeeds() throws ContainerAlreadyExistsException, ImageNotFoundException { final CreateContainerDto request = CreateContainerDto.builder() .name(CONTAINER_1_NAME) - .imageId(IMAGE_1_ID) + .imageId(CONTAINER_1_ID) .build(); /* test */ @@ -161,7 +155,7 @@ public class ContainerEndpointUnitTest extends AbstractUnitTest { public void create_noRole_fails() { final CreateContainerDto request = CreateContainerDto.builder() .name(CONTAINER_1_NAME) - .imageId(IMAGE_1_ID) + .imageId(CONTAINER_1_ID) .build(); /* test */ @@ -226,11 +220,11 @@ public class ContainerEndpointUnitTest extends AbstractUnitTest { final ContainerBriefDto container1 = body.get(0); assertEquals(CONTAINER_1_ID, container1.getId()); assertEquals(CONTAINER_1_NAME, container1.getName()); - assertEquals(CONTAINER_1_INTERNALNAME, container1.getInternalName()); + assertEquals(CONTAINER_1_INTERNAL_NAME, container1.getInternalName()); final ContainerBriefDto container2 = body.get(1); assertEquals(CONTAINER_2_ID, container2.getId()); assertEquals(CONTAINER_2_NAME, container2.getName()); - assertEquals(CONTAINER_2_INTERNALNAME, container2.getInternalName()); + assertEquals(CONTAINER_2_INTERNAL_NAME, container2.getInternalName()); } public void create_generic(CreateContainerDto data) throws ContainerAlreadyExistsException, ImageNotFoundException { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/DatabaseEndpointUnitTest.java similarity index 88% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/DatabaseEndpointUnitTest.java index a52a0a8880..7f185fd989 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/DatabaseEndpointUnitTest.java @@ -1,14 +1,14 @@ -package at.tuwien.endpoints; - -import at.tuwien.api.database.*; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.service.*; -import at.tuwien.service.impl.DatabaseServiceImpl; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.endpoints; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.*; +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.CreateDashboardResponseDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.service.*; +import at.ac.tuwien.ifs.dbrepo.service.impl.DatabaseServiceImpl; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -34,7 +34,7 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class DatabaseEndpointUnitTest extends AbstractUnitTest { +public class DatabaseEndpointUnitTest extends BaseTest { @MockBean private BrokerService messageQueueService; @@ -54,21 +54,20 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { @MockBean private StorageService storageService; + @MockBean + private DashboardService dashboardService; + @Autowired private DatabaseEndpoint databaseEndpoint; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @WithAnonymousUser public void create_anonymous_fails() { final CreateDatabaseDto request = CreateDatabaseDto.builder() .cid(CONTAINER_1_ID) - .name(DATABASE_1_NAME) - .isPublic(DATABASE_1_PUBLIC) + .name(DATABASE_1.getName()) + .isPublic(DATABASE_1.getIsPublic()) + .isSchemaPublic(DATABASE_1.getIsSchemaPublic()) .build(); /* test */ @@ -81,9 +80,10 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { @WithMockUser(username = USER_4_USERNAME) public void create_noRole_fails() { final CreateDatabaseDto request = CreateDatabaseDto.builder() - .cid(CONTAINER_3_ID) - .name(DATABASE_3_NAME) - .isPublic(DATABASE_3_PUBLIC) + .cid(CONTAINER_1_ID) + .name(DATABASE_3.getName()) + .isPublic(DATABASE_3.getIsPublic()) + .isSchemaPublic(DATABASE_3.getIsSchemaPublic()) .build(); /* test */ @@ -97,11 +97,12 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { public void create_succeeds() throws DataServiceException, DataServiceConnectionException, UserNotFoundException, DatabaseNotFoundException, ContainerNotFoundException, SearchServiceException, SearchServiceConnectionException, AuthServiceException, AuthServiceConnectionException, - BrokerServiceException, BrokerServiceConnectionException, ContainerQuotaException { + BrokerServiceException, BrokerServiceConnectionException, ContainerQuotaException, + DashboardServiceException, DashboardServiceConnectionException { final CreateDatabaseDto request = CreateDatabaseDto.builder() .cid(CONTAINER_1_ID) - .name(DATABASE_1_NAME) - .isPublic(DATABASE_1_PUBLIC) + .name(DATABASE_1.getName()) + .isPublic(DATABASE_1.getIsPublic()) .build(); /* mock */ @@ -122,13 +123,13 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { @WithMockUser(username = USER_1_USERNAME, authorities = {"create-database"}) public void create_quotaExceeded_fails() throws UserNotFoundException, ContainerNotFoundException { final CreateDatabaseDto request = CreateDatabaseDto.builder() - .cid(CONTAINER_4_ID) - .name(DATABASE_1_NAME) - .isPublic(DATABASE_1_PUBLIC) + .cid(CONTAINER_4.getId()) + .name(DATABASE_1.getName()) + .isPublic(DATABASE_1.getIsPublic()) .build(); /* mock */ - when(containerService.find(CONTAINER_4_ID)) + when(containerService.find(CONTAINER_4.getId())) .thenReturn(CONTAINER_4); when(userService.findById(USER_1_ID)) .thenReturn(USER_1); @@ -203,8 +204,8 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"find-database"}) public void refreshViewMetadata_succeeds() throws UserNotFoundException, SearchServiceException, - NotAllowedException, DataServiceException, QueryNotFoundException, DatabaseNotFoundException, - SearchServiceConnectionException, DataServiceConnectionException, ViewNotFoundException { + NotAllowedException, DataServiceException, DatabaseNotFoundException, SearchServiceConnectionException, + DataServiceConnectionException, ViewNotFoundException { /* mock */ when(databaseService.findById(DATABASE_1_ID)) @@ -285,7 +286,7 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { public void list_hasRole_succeeds() { /* pre-condition */ - assertTrue(DATABASE_3_PUBLIC); + assertTrue(DATABASE_3.getIsPublic()); /* mock */ when(databaseService.findAllPublicOrSchemaPublicOrReadAccess(any(UUID.class))) @@ -300,7 +301,7 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { public void list_hasRoleForeign_succeeds() { /* pre-condition */ - assertTrue(DATABASE_3_PUBLIC); + assertTrue(DATABASE_3.getIsPublic()); /* mock */ when(databaseService.findAllPublicOrSchemaPublicOrReadAccess(USER_1_ID)) @@ -315,11 +316,11 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { public void list_hasRoleFilter_succeeds() { /* mock */ - when(databaseService.findAllPublicOrSchemaPublicOrReadAccessByInternalName(USER_1_ID, DATABASE_3_INTERNALNAME)) + when(databaseService.findAllPublicOrSchemaPublicOrReadAccessByInternalName(USER_1_ID, DATABASE_3.getInternalName())) .thenReturn(List.of(DATABASE_3)); /* test */ - list_generic(DATABASE_3_INTERNALNAME, USER_1_PRINCIPAL, 1); + list_generic(DATABASE_3.getInternalName(), USER_1_PRINCIPAL, 1); } @Test @@ -351,11 +352,11 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { public void list_hasSystemRoleFilterByName_succeeds() { /* mock */ - when(databaseService.findByInternalName(DATABASE_1_INTERNALNAME)) + when(databaseService.findByInternalName(DATABASE_1.getInternalName())) .thenReturn(List.of(DATABASE_1)); /* test */ - list_generic(DATABASE_1_INTERNALNAME, USER_LOCAL_ADMIN_PRINCIPAL, 1); + list_generic(DATABASE_1.getInternalName(), USER_LOCAL_ADMIN_PRINCIPAL, 1); } @Test @@ -386,7 +387,8 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"modify-database-visibility"}) public void visibility_hasRole_succeeds() throws NotAllowedException, UserNotFoundException, - DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException { + DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException, + DashboardServiceException, DashboardServiceConnectionException { final DatabaseModifyVisibilityDto request = DatabaseModifyVisibilityDto.builder() .isPublic(true) .build(); @@ -654,7 +656,7 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { /* mock */ when(accessService.list(DATABASE_1)) - .thenReturn(List.of(DATABASE_1_USER_1_WRITE_ALL_ACCESS, DATABASE_1_USER_2_READ_ACCESS)); + .thenReturn(List.of(DATABASE_1.getAccesses().get(0), DATABASE_1.getAccesses().get(1))); /* test */ final ResponseEntity<DatabaseDto> response = findById_generic(DATABASE_1_ID, DATABASE_1, USER_1_PRINCIPAL); @@ -671,7 +673,7 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { /* mock */ when(accessService.list(DATABASE_1)) - .thenReturn(List.of(DATABASE_1_USER_1_WRITE_ALL_ACCESS, DATABASE_1_USER_2_READ_ACCESS)); + .thenReturn(List.of(DATABASE_1.getAccesses().get(0), DATABASE_1.getAccesses().get(1))); /* test */ final ResponseEntity<DatabaseDto> response = findById_generic(DATABASE_1_ID, DATABASE_1, USER_2_PRINCIPAL); @@ -688,7 +690,7 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { /* mock */ when(accessService.list(DATABASE_1)) - .thenReturn(List.of(DATABASE_1_USER_1_WRITE_ALL_ACCESS, DATABASE_1_USER_2_READ_ACCESS)); + .thenReturn(List.of(DATABASE_1.getAccesses().get(0), DATABASE_1.getAccesses().get(1))); /* test */ final ResponseEntity<DatabaseDto> response = findById_generic(DATABASE_1_ID, DATABASE_1, USER_1_PRINCIPAL); @@ -730,7 +732,7 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { assertEquals(List.of("" + CONTAINER_1_PORT), headers.get("X-Port")); assertEquals(List.of(CONTAINER_1_PRIVILEGED_USERNAME), headers.get("X-Username")); assertEquals(List.of(CONTAINER_1_PRIVILEGED_PASSWORD), headers.get("X-Password")); - assertEquals(List.of(IMAGE_1_JDBC), headers.get("X-Jdbc-Method")); + assertEquals(List.of(IMAGE_1_JDBC_METHOD), headers.get("X-Jdbc-Method")); assertEquals(List.of("X-Username X-Password X-Jdbc-Method X-Host X-Port"), headers.get("Access-Control-Expose-Headers")); } @@ -795,9 +797,10 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { } public void create_generic(CreateDatabaseDto data, Principal principal, User user) throws DataServiceException, - DataServiceConnectionException, UserNotFoundException, DatabaseNotFoundException, + DataServiceConnectionException, UserNotFoundException, DatabaseNotFoundException, BrokerServiceException, ContainerNotFoundException, SearchServiceException, SearchServiceConnectionException, - BrokerServiceException, BrokerServiceConnectionException, ContainerQuotaException { + BrokerServiceConnectionException, ContainerQuotaException, DashboardServiceException, + DashboardServiceConnectionException { /* mock */ doNothing() @@ -805,6 +808,10 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { .setVirtualHostPermissions(user); when(databaseService.findById(any(UUID.class))) .thenReturn(DATABASE_1); + when(dashboardService.create(DATABASE_1)) + .thenReturn(CreateDashboardResponseDto.builder() + .uid(DATABASE_1_DASHBOARD_UID) + .build()); /* test */ final ResponseEntity<DatabaseBriefDto> response = databaseEndpoint.create(data, principal); @@ -814,7 +821,8 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { public void visibility_generic(UUID databaseId, Database database, DatabaseModifyVisibilityDto data, Principal principal) throws NotAllowedException, DatabaseNotFoundException, - SearchServiceException, SearchServiceConnectionException, UserNotFoundException { + SearchServiceException, SearchServiceConnectionException, DashboardServiceException, + DashboardServiceConnectionException { /* mock */ if (database != null) { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/IdentifierEndpointUnitTest.java similarity index 92% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/IdentifierEndpointUnitTest.java index 59aca6a405..38b8ee2217 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/IdentifierEndpointUnitTest.java @@ -1,22 +1,20 @@ -package at.tuwien.endpoints; - -import at.tuwien.api.identifier.*; -import at.tuwien.api.identifier.ld.LdDatasetDto; -import at.tuwien.config.EndpointConfig; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.entities.identifier.IdentifierType; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.service.*; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.endpoints; + +import at.ac.tuwien.ifs.dbrepo.config.EndpointConfig; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.*; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.ld.LdDatasetDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.DatabaseAccess; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.Identifier; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.IdentifierType; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.gateway.DataServiceGateway; +import at.ac.tuwien.ifs.dbrepo.service.*; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.log4j.Log4j2; import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; @@ -37,7 +35,6 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import java.io.File; import java.io.IOException; -import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.security.Principal; import java.util.List; @@ -50,7 +47,7 @@ import static org.mockito.Mockito.*; @Log4j2 @ExtendWith(SpringExtension.class) @SpringBootTest -public class IdentifierEndpointUnitTest extends AbstractUnitTest { +public class IdentifierEndpointUnitTest extends BaseTest { @MockBean private IdentifierService identifierService; @@ -84,10 +81,10 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { public static Stream<Arguments> save_parameters() { return Stream.of( - Arguments.arguments("foreign_subset", DATABASE_2_ID, DATABASE_2, null, IDENTIFIER_5, IDENTIFIER_5_SAVE_DTO, USER_1_PRINCIPAL, USER_1), - Arguments.arguments("foreign_database", DATABASE_1_ID, DATABASE_1, null, IDENTIFIER_1, IDENTIFIER_1_SAVE_DTO, USER_1_PRINCIPAL, USER_1), - Arguments.arguments("foreign_view", DATABASE_1_ID, DATABASE_1, null, IDENTIFIER_3, IDENTIFIER_3_SAVE_DTO, USER_1_PRINCIPAL, USER_1), - Arguments.arguments("foreign_table", DATABASE_1_ID, DATABASE_1, null, IDENTIFIER_4, IDENTIFIER_4_SAVE_DTO, USER_1_PRINCIPAL, USER_1) + Arguments.arguments("foreign_subset", 2, 5, 1), + Arguments.arguments("foreign_database", 1, 1, 1), + Arguments.arguments("foreign_view", 1, 3, 1), + Arguments.arguments("foreign_table", 1, 4, 1) ); } @@ -143,22 +140,22 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { public static Stream<Arguments> findAll_filterDatabase_parameters() { return Stream.of( - Arguments.arguments("database_dbid", IdentifierTypeDto.DATABASE, null, DATABASE_1_ID, null, null, null, 1, USER_1_PRINCIPAL), - Arguments.arguments("database_qid", IdentifierTypeDto.DATABASE, null, DATABASE_1_ID, QUERY_1_ID, null, null, 1, USER_1_PRINCIPAL), - Arguments.arguments("database_vid", IdentifierTypeDto.DATABASE, null, DATABASE_1_ID, null, VIEW_1_ID, null, 0, USER_1_PRINCIPAL), - Arguments.arguments("database_tid", IdentifierTypeDto.DATABASE, null, DATABASE_1_ID, null, null, TABLE_1_ID, 0, USER_1_PRINCIPAL), - Arguments.arguments("subset_dbid", IdentifierTypeDto.SUBSET, null, DATABASE_1_ID, null, null, null, 1, USER_1_PRINCIPAL), - Arguments.arguments("subset_qid", IdentifierTypeDto.SUBSET, null, DATABASE_1_ID, QUERY_1_ID, null, null, 1, USER_1_PRINCIPAL), - Arguments.arguments("subset_vid", IdentifierTypeDto.SUBSET, null, DATABASE_1_ID, null, VIEW_1_ID, null, 0, USER_1_PRINCIPAL), - Arguments.arguments("subset_tid", IdentifierTypeDto.SUBSET, null, DATABASE_1_ID, null, null, TABLE_1_ID, 0, USER_1_PRINCIPAL), - Arguments.arguments("view_dbid", IdentifierTypeDto.VIEW, null, DATABASE_1_ID, null, null, null, 1, USER_1_PRINCIPAL), - Arguments.arguments("view_qid", IdentifierTypeDto.VIEW, null, DATABASE_1_ID, QUERY_1_ID, null, null, 0, USER_1_PRINCIPAL), - Arguments.arguments("view_vid", IdentifierTypeDto.VIEW, null, DATABASE_1_ID, null, VIEW_1_ID, null, 1, USER_1_PRINCIPAL), - Arguments.arguments("view_tid", IdentifierTypeDto.VIEW, null, DATABASE_1_ID, null, null, TABLE_1_ID, 0, USER_1_PRINCIPAL), - Arguments.arguments("table_dbid", IdentifierTypeDto.TABLE, null, DATABASE_1_ID, null, null, null, 1, USER_1_PRINCIPAL), - Arguments.arguments("table_qid", IdentifierTypeDto.TABLE, null, DATABASE_1_ID, QUERY_1_ID, null, null, 0, USER_1_PRINCIPAL), - Arguments.arguments("table_vid", IdentifierTypeDto.TABLE, null, DATABASE_1_ID, null, VIEW_1_ID, null, 0, USER_1_PRINCIPAL), - Arguments.arguments("table_tid", IdentifierTypeDto.TABLE, null, DATABASE_1_ID, null, null, TABLE_1_ID, 1, USER_1_PRINCIPAL), + Arguments.arguments("database_dbid", IdentifierTypeDto.DATABASE, null, DATABASE_1_ID, null, null, null, 1, 1), + Arguments.arguments("database_qid", IdentifierTypeDto.DATABASE, null, DATABASE_1_ID, QUERY_1_ID, null, null, 1, 1), + Arguments.arguments("database_vid", IdentifierTypeDto.DATABASE, null, DATABASE_1_ID, null, VIEW_1_ID, null, 0, 1), + Arguments.arguments("database_tid", IdentifierTypeDto.DATABASE, null, DATABASE_1_ID, null, null, TABLE_1_ID, 0, 1), + Arguments.arguments("subset_dbid", IdentifierTypeDto.SUBSET, null, DATABASE_1_ID, null, null, null, 1, 1), + Arguments.arguments("subset_qid", IdentifierTypeDto.SUBSET, null, DATABASE_1_ID, QUERY_1_ID, null, null, 1, 1), + Arguments.arguments("subset_vid", IdentifierTypeDto.SUBSET, null, DATABASE_1_ID, null, VIEW_1_ID, null, 0, 1), + Arguments.arguments("subset_tid", IdentifierTypeDto.SUBSET, null, DATABASE_1_ID, null, null, TABLE_1_ID, 0, 1), + Arguments.arguments("view_dbid", IdentifierTypeDto.VIEW, null, DATABASE_1_ID, null, null, null, 1, 1), + Arguments.arguments("view_qid", IdentifierTypeDto.VIEW, null, DATABASE_1_ID, QUERY_1_ID, null, null, 0, 1), + Arguments.arguments("view_vid", IdentifierTypeDto.VIEW, null, DATABASE_1_ID, null, VIEW_1_ID, null, 1, 1), + Arguments.arguments("view_tid", IdentifierTypeDto.VIEW, null, DATABASE_1_ID, null, null, TABLE_1_ID, 0, 1), + Arguments.arguments("table_dbid", IdentifierTypeDto.TABLE, null, DATABASE_1_ID, null, null, null, 1, 1), + Arguments.arguments("table_qid", IdentifierTypeDto.TABLE, null, DATABASE_1_ID, QUERY_1_ID, null, null, 0, 1), + Arguments.arguments("table_vid", IdentifierTypeDto.TABLE, null, DATABASE_1_ID, null, VIEW_1_ID, null, 0, 1), + Arguments.arguments("table_tid", IdentifierTypeDto.TABLE, null, DATABASE_1_ID, null, null, TABLE_1_ID, 1, 1), Arguments.arguments("anon_database_dbid", IdentifierTypeDto.DATABASE, null, DATABASE_1_ID, null, null, null, 1, null), Arguments.arguments("anon_database_qid", IdentifierTypeDto.DATABASE, null, DATABASE_1_ID, QUERY_1_ID, null, null, 1, null), Arguments.arguments("anon_database_vid", IdentifierTypeDto.DATABASE, null, DATABASE_1_ID, null, VIEW_1_ID, null, 0, null), @@ -180,17 +177,12 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { public static Stream<Arguments> save_foreign_parameters() { return Stream.of( - Arguments.arguments("view", IDENTIFIER_3, IDENTIFIER_3_SAVE_DTO), - Arguments.arguments("table", IDENTIFIER_4, IDENTIFIER_4_SAVE_DTO), - Arguments.arguments("subset", IDENTIFIER_2, IDENTIFIER_2_SAVE_DTO) + Arguments.arguments("view", 3), + Arguments.arguments("table", 4), + Arguments.arguments("subset", 2) ); } - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @WithAnonymousUser public void findAll_empty_succeeds() { @@ -290,7 +282,7 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { @WithAnonymousUser public void findAll_filterDatabase_succeeds(String name, IdentifierTypeDto type, IdentifierStatusTypeDto status, UUID databaseId, UUID queryId, UUID viewId, UUID tableId, - Integer expectedSize, Principal principal) throws ViewNotFoundException, + Integer expectedSize, Integer idx) throws ViewNotFoundException, TableNotFoundException, DatabaseNotFoundException { /* mock */ @@ -304,6 +296,12 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { when(tableService.findById(DATABASE_1, TABLE_1_ID)) .thenReturn(TABLE_1); } + final Principal principal; + if (idx == null) { + principal = null; + } else { + principal = USER_1_PRINCIPAL; + } /* test */ final ResponseEntity<?> response = identifierEndpoint.findAll(type, status, databaseId, queryId, viewId, tableId, "application/json", principal); @@ -430,11 +428,11 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { final IdentifierDto compare = objectMapper.readValue(FileUtils.readFileToString(new File("src/test/resources/json/metadata0.json"), StandardCharsets.UTF_8), IdentifierDto.class); /* mock */ - when(identifierService.find(IDENTIFIER_7_ID)) + when(identifierService.find(IDENTIFIER_7.getId())) .thenReturn(IDENTIFIER_7); /* test */ - final ResponseEntity<?> response = identifierEndpoint.find(IDENTIFIER_7_ID, accept, USER_4_PRINCIPAL); + final ResponseEntity<?> response = identifierEndpoint.find(IDENTIFIER_7.getId(), accept, USER_4_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final IdentifierDto body = (IdentifierDto) response.getBody(); assertNotNull(body); @@ -535,12 +533,12 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { /* mock */ when(identifierService.exportBibliography(IDENTIFIER_7, BibliographyTypeDto.APA)) .thenReturn(compare); - when(identifierService.find(IDENTIFIER_7_ID)) + when(identifierService.find(IDENTIFIER_7.getId())) .thenReturn(IDENTIFIER_7); /* test */ assertThrows(NotAllowedException.class, () -> { - identifierEndpoint.find(IDENTIFIER_7_ID, accept, null); + identifierEndpoint.find(IDENTIFIER_7.getId(), accept, null); }); } @@ -556,11 +554,11 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { /* mock */ when(identifierService.exportBibliography(IDENTIFIER_7, BibliographyTypeDto.APA)) .thenReturn(compare); - when(identifierService.find(IDENTIFIER_7_ID)) + when(identifierService.find(IDENTIFIER_7.getId())) .thenReturn(IDENTIFIER_7); /* test */ - final ResponseEntity<?> response = identifierEndpoint.find(IDENTIFIER_7_ID, accept, USER_4_PRINCIPAL); + final ResponseEntity<?> response = identifierEndpoint.find(IDENTIFIER_7.getId(), accept, USER_4_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -649,7 +647,7 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { when(identifierService.exportBibliography(any(Identifier.class), eq(BibliographyTypeDto.APA))) .thenReturn(compare); when(identifierService.find(IDENTIFIER_1_ID)) - .thenReturn(IDENTIFIER_1_WITH_DOI); + .thenReturn(IDENTIFIER_1); /* test */ final ResponseEntity<?> response = identifierEndpoint.find(IDENTIFIER_1_ID, accept, null); @@ -671,11 +669,11 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { /* mock */ when(identifierService.exportBibliography(IDENTIFIER_7, BibliographyTypeDto.IEEE)) .thenReturn(compare); - when(identifierService.find(IDENTIFIER_7_ID)) + when(identifierService.find(IDENTIFIER_7.getId())) .thenReturn(IDENTIFIER_7); /* test */ - final ResponseEntity<?> response = identifierEndpoint.find(IDENTIFIER_7_ID, accept, USER_4_PRINCIPAL); + final ResponseEntity<?> response = identifierEndpoint.find(IDENTIFIER_7.getId(), accept, USER_4_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -741,7 +739,7 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { when(identifierService.exportBibliography(any(Identifier.class), eq(BibliographyTypeDto.IEEE))) .thenReturn(compare); when(identifierService.find(IDENTIFIER_1_ID)) - .thenReturn(IDENTIFIER_1_WITH_DOI); + .thenReturn(IDENTIFIER_1); /* test */ final ResponseEntity<?> response = identifierEndpoint.find(IDENTIFIER_1_ID, accept, null); @@ -763,11 +761,11 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { /* mock */ when(identifierService.exportBibliography(IDENTIFIER_7, BibliographyTypeDto.BIBTEX)) .thenReturn(compare); - when(identifierService.find(IDENTIFIER_7_ID)) + when(identifierService.find(IDENTIFIER_7.getId())) .thenReturn(IDENTIFIER_7); /* test */ - final ResponseEntity<?> response = identifierEndpoint.find(IDENTIFIER_7_ID, accept, USER_4_PRINCIPAL); + final ResponseEntity<?> response = identifierEndpoint.find(IDENTIFIER_7.getId(), accept, USER_4_PRINCIPAL); assertEquals(HttpStatus.OK, response.getStatusCode()); final String body = (String) response.getBody(); assertNotNull(body); @@ -833,7 +831,7 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { when(identifierService.exportBibliography(any(Identifier.class), eq(BibliographyTypeDto.BIBTEX))) .thenReturn(compare); when(identifierService.find(IDENTIFIER_1_ID)) - .thenReturn(IDENTIFIER_1_WITH_DOI); + .thenReturn(IDENTIFIER_1); /* test */ final ResponseEntity<?> response = identifierEndpoint.find(IDENTIFIER_1_ID, accept, null); @@ -867,12 +865,12 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { final String accept = "text/csv"; /* mock */ - when(identifierService.find(IDENTIFIER_7_ID)) + when(identifierService.find(IDENTIFIER_7.getId())) .thenReturn(IDENTIFIER_7); /* test */ assertThrows(NotAllowedException.class, () -> { - identifierEndpoint.find(IDENTIFIER_7_ID, accept, null); + identifierEndpoint.find(IDENTIFIER_7.getId(), accept, null); }); } @@ -900,7 +898,7 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_1_USERNAME, authorities = {}) + @WithMockUser(username = USER_1_USERNAME) public void delete_noRole_fails() { /* test */ @@ -919,9 +917,8 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { @Test @WithMockUser(username = USER_2_USERNAME, authorities = {"delete-identifier"}) - public void delete_alreadyPublished_fails() throws DataServiceException, DataServiceConnectionException, - DatabaseNotFoundException, IdentifierNotFoundException, SearchServiceException, - SearchServiceConnectionException { + public void delete_alreadyPublished_fails() throws DatabaseNotFoundException, IdentifierNotFoundException, + SearchServiceException, SearchServiceConnectionException { /* mock */ when(identifierService.find(IDENTIFIER_1_ID)) @@ -1270,16 +1267,35 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { @ParameterizedTest @MethodSource("save_foreign_parameters") @WithMockUser(username = USER_1_USERNAME, authorities = {"create-identifier"}) - public void save_foreign_fails(String name, Identifier identifier, IdentifierSaveDto data) + public void save_foreign_fails(String name, Integer idx) throws UserNotFoundException { /* mock */ when(userService.findById(USER_1_ID)) .thenReturn(USER_1); + final Identifier identifier; + final IdentifierSaveDto identifierSave = switch (idx) { + case 2 -> { + identifier = IDENTIFIER_2; + yield IDENTIFIER_2_SAVE_DTO; + } + case 3 -> { + identifier = IDENTIFIER_3; + yield IDENTIFIER_3_SAVE_DTO; + } + case 4 -> { + identifier = IDENTIFIER_4; + yield IDENTIFIER_4_SAVE_DTO; + } + default -> { + identifier = null; + yield null; + } + }; /* test */ assertThrows(NotAllowedException.class, () -> { - generic_save(DATABASE_1_ID, DATABASE_1, null, identifier, data, USER_1_PRINCIPAL, USER_1); + generic_save(DATABASE_1_ID, DATABASE_1, null, identifier, identifierSave, USER_1_PRINCIPAL, USER_1); }); } @@ -1309,12 +1325,60 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { @ParameterizedTest @MethodSource("save_parameters") @WithMockUser(username = USER_1_USERNAME, authorities = {"create-identifier"}) - public void save_noForeign_fails(String name, UUID databaseId, Database database, DatabaseAccess access, - Identifier identifier, IdentifierSaveDto data, Principal principal, User user) { + public void save_noForeign_fails(String name, Integer dbIdx, Integer idIdx, Integer uIdx) { + final UUID databaseId; + final Database database = switch (dbIdx) { + case 1 -> { + databaseId = DATABASE_1_ID; + yield DATABASE_1; + } + case 2 -> { + databaseId = DATABASE_2_ID; + yield DATABASE_2; + } + default -> { + databaseId = null; + yield null; + } + }; + final IdentifierSaveDto identifierSave; + final Identifier identifier = switch (idIdx) { + case 1 -> { + identifierSave = IDENTIFIER_1_SAVE_DTO; + yield IDENTIFIER_1; + } + case 3 -> { + identifierSave = IDENTIFIER_3_SAVE_DTO; + yield IDENTIFIER_3; + } + case 4 -> { + identifierSave = IDENTIFIER_4_SAVE_DTO; + yield IDENTIFIER_4; + } + case 5 -> { + identifierSave = IDENTIFIER_5_SAVE_DTO; + yield IDENTIFIER_5; + } + default -> { + identifierSave = null; + yield null; + } + }; + final Principal principal; + final User user = switch (uIdx) { + case 1 -> { + principal = USER_1_PRINCIPAL; + yield USER_1; + } + default -> { + principal = null; + yield null; + } + }; /* test */ assertThrows(NotAllowedException.class, () -> { - generic_save(databaseId, database, access, identifier, data, principal, user); + generic_save(databaseId, database, null, identifier, identifierSave, principal, user); }); } @@ -1356,7 +1420,8 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { .thenReturn(IDENTIFIER_1); /* test */ - final ResponseEntity<IdentifierDto> response = identifierEndpoint.create(IDENTIFIER_1_CREATE_DTO, USER_1_PRINCIPAL); + final ResponseEntity<IdentifierDto> response = identifierEndpoint.create(IDENTIFIER_1_CREATE_DTO, + USER_1_PRINCIPAL); assertEquals(HttpStatus.CREATED, response.getStatusCode()); final IdentifierDto body = response.getBody(); assertNotNull(body); @@ -1496,14 +1561,14 @@ public class IdentifierEndpointUnitTest extends AbstractUnitTest { SearchServiceConnectionException { /* mock */ - when(identifierService.find(IDENTIFIER_7_ID)) + when(identifierService.find(IDENTIFIER_7.getId())) .thenReturn(IDENTIFIER_7); doNothing() .when(identifierService) .delete(IDENTIFIER_7); /* test */ - final ResponseEntity<?> response = identifierEndpoint.delete(IDENTIFIER_7_ID); + final ResponseEntity<?> response = identifierEndpoint.delete(IDENTIFIER_7.getId()); assertEquals(HttpStatus.ACCEPTED, response.getStatusCode()); assertNull(response.getBody()); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ImageEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/ImageEndpointUnitTest.java similarity index 76% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ImageEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/ImageEndpointUnitTest.java index b5be98cfb6..9a1289a86b 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ImageEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/ImageEndpointUnitTest.java @@ -1,17 +1,17 @@ -package at.tuwien.endpoints; - -import at.tuwien.api.container.image.ImageBriefDto; -import at.tuwien.api.container.image.ImageChangeDto; -import at.tuwien.api.container.image.ImageCreateDto; -import at.tuwien.api.container.image.ImageDto; -import at.tuwien.entities.container.image.ContainerImage; -import at.tuwien.exception.ImageAlreadyExistsException; -import at.tuwien.exception.ImageInvalidException; -import at.tuwien.exception.ImageNotFoundException; -import at.tuwien.service.impl.ImageServiceImpl; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.endpoints; + +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageChangeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.image.ContainerImage; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageAlreadyExistsException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageInvalidException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.service.impl.ImageServiceImpl; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -33,7 +33,7 @@ import static org.mockito.Mockito.*; @Log4j2 @ExtendWith(SpringExtension.class) @SpringBootTest -public class ImageEndpointUnitTest extends AbstractUnitTest { +public class ImageEndpointUnitTest extends BaseTest { @MockBean private ImageServiceImpl imageService; @@ -41,10 +41,8 @@ public class ImageEndpointUnitTest extends AbstractUnitTest { @Autowired private ImageEndpoint imageEndpoint; - @BeforeEach - public void beforeEach() { - genesis(); - } + @Autowired + private MetadataMapper metadataMapper; @Test @WithAnonymousUser @@ -76,9 +74,9 @@ public class ImageEndpointUnitTest extends AbstractUnitTest { final ImageCreateDto request = ImageCreateDto.builder() .name(IMAGE_1_NAME) .version(IMAGE_1_VERSION) - .defaultPort(IMAGE_1_PORT) + .defaultPort(IMAGE_1_DEFAULT_PORT) .dialect(IMAGE_1_DIALECT) - .jdbcMethod(IMAGE_1_JDBC) + .jdbcMethod(IMAGE_1_JDBC_METHOD) .build(); /* test */ @@ -93,9 +91,9 @@ public class ImageEndpointUnitTest extends AbstractUnitTest { final ImageCreateDto request = ImageCreateDto.builder() .name(IMAGE_1_NAME) .version(IMAGE_1_VERSION) - .defaultPort(IMAGE_1_PORT) + .defaultPort(IMAGE_1_DEFAULT_PORT) .dialect(IMAGE_1_DIALECT) - .jdbcMethod(IMAGE_1_JDBC) + .jdbcMethod(IMAGE_1_JDBC_METHOD) .build(); /* test */ @@ -110,9 +108,9 @@ public class ImageEndpointUnitTest extends AbstractUnitTest { final ImageCreateDto request = ImageCreateDto.builder() .name(IMAGE_1_NAME) .version(IMAGE_1_VERSION) - .defaultPort(IMAGE_1_PORT) + .defaultPort(IMAGE_1_DEFAULT_PORT) .dialect(IMAGE_1_DIALECT) - .jdbcMethod(IMAGE_1_JDBC) + .jdbcMethod(IMAGE_1_JDBC_METHOD) .build(); /* test */ @@ -126,14 +124,14 @@ public class ImageEndpointUnitTest extends AbstractUnitTest { public void create_succeeds() throws ImageAlreadyExistsException, ImageInvalidException { /* test */ - create_generic(IMAGE_1_CREATE_DTO, USER_1_PRINCIPAL); + create_generic(metadataMapper.containerImageToImageCreateDto(IMAGE_1), USER_1_PRINCIPAL); } @Test public void findById_anonymous_succeeds() throws ImageNotFoundException { /* test */ - findById_generic(IMAGE_1_ID, IMAGE_1); + findById_generic(CONTAINER_1_ID, IMAGE_1); } @Test @@ -156,7 +154,7 @@ public class ImageEndpointUnitTest extends AbstractUnitTest { /* test */ assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - delete_generic(IMAGE_1_ID, IMAGE_1); + delete_generic(CONTAINER_1_ID, IMAGE_1); }); } @@ -166,7 +164,7 @@ public class ImageEndpointUnitTest extends AbstractUnitTest { /* test */ assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - delete_generic(IMAGE_1_ID, IMAGE_1); + delete_generic(CONTAINER_1_ID, IMAGE_1); }); } @@ -180,22 +178,22 @@ public class ImageEndpointUnitTest extends AbstractUnitTest { .delete(IMAGE_1); /* test */ - delete_generic(IMAGE_1_ID, IMAGE_1); + delete_generic(CONTAINER_1_ID, IMAGE_1); } @Test @WithAnonymousUser public void modify_anonymous_fails() { final ImageChangeDto request = ImageChangeDto.builder() - .defaultPort(IMAGE_1_PORT) + .defaultPort(IMAGE_1_DEFAULT_PORT) .dialect(IMAGE_1_DIALECT) - .jdbcMethod(IMAGE_1_JDBC) - .driverClass(IMAGE_1_DRIVER) + .jdbcMethod(IMAGE_1_JDBC_METHOD) + .driverClass(IMAGE_1.getDriverClass()) .build(); /* test */ assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - modify_generic(IMAGE_1_ID, IMAGE_1, request); + modify_generic(CONTAINER_1_ID, IMAGE_1, request); }); } @@ -203,15 +201,15 @@ public class ImageEndpointUnitTest extends AbstractUnitTest { @WithMockUser(username = USER_4_USERNAME) public void modify_noRole_fails() { final ImageChangeDto request = ImageChangeDto.builder() - .defaultPort(IMAGE_1_PORT) + .defaultPort(IMAGE_1_DEFAULT_PORT) .dialect(IMAGE_1_DIALECT) - .jdbcMethod(IMAGE_1_JDBC) - .driverClass(IMAGE_1_DRIVER) + .jdbcMethod(IMAGE_1_JDBC_METHOD) + .driverClass(IMAGE_1.getDriverClass()) .build(); /* test */ assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { - modify_generic(IMAGE_1_ID, IMAGE_1, request); + modify_generic(CONTAINER_1_ID, IMAGE_1, request); }); } @@ -219,15 +217,15 @@ public class ImageEndpointUnitTest extends AbstractUnitTest { @WithMockUser(username = USER_2_USERNAME, authorities = {"modify-image"}) public void modify_hasRole_succeeds() throws ImageNotFoundException { final ImageChangeDto request = ImageChangeDto.builder() - .registry(IMAGE_1_REGISTRY) - .defaultPort(IMAGE_1_PORT) + .registry(IMAGE_1.getRegistry()) + .defaultPort(IMAGE_1_DEFAULT_PORT) .dialect(IMAGE_1_DIALECT) - .jdbcMethod(IMAGE_1_JDBC) - .driverClass(IMAGE_1_DRIVER) + .jdbcMethod(IMAGE_1_JDBC_METHOD) + .driverClass(IMAGE_1.getDriverClass()) .build(); /* test */ - modify_generic(IMAGE_1_ID, IMAGE_1, request); + modify_generic(CONTAINER_1_ID, IMAGE_1, request); } /* ################################################################################################### */ diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/LicenseEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/LicenseEndpointUnitTest.java similarity index 82% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/LicenseEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/LicenseEndpointUnitTest.java index f45dd85fb4..765d16dc83 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/LicenseEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/LicenseEndpointUnitTest.java @@ -1,10 +1,9 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.api.database.LicenseDto; -import at.tuwien.repository.LicenseRepository; +import at.ac.tuwien.ifs.dbrepo.core.api.database.LicenseDto; +import at.ac.tuwien.ifs.dbrepo.repository.LicenseRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -23,7 +22,7 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class LicenseEndpointUnitTest extends AbstractUnitTest { +public class LicenseEndpointUnitTest extends BaseTest { @MockBean private LicenseRepository licenseRepository; @@ -31,11 +30,6 @@ public class LicenseEndpointUnitTest extends AbstractUnitTest { @Autowired private LicenseEndpoint licenseEndpoint; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void list_succeeds() { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MessageEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/MessageEndpointUnitTest.java similarity index 87% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MessageEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/MessageEndpointUnitTest.java index 0fabc67c91..f31518e8e2 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MessageEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/MessageEndpointUnitTest.java @@ -1,14 +1,13 @@ -package at.tuwien.endpoints; - -import at.tuwien.exception.MessageNotFoundException; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.api.maintenance.BannerMessageCreateDto; -import at.tuwien.api.maintenance.BannerMessageDto; -import at.tuwien.api.maintenance.BannerMessageUpdateDto; -import at.tuwien.entities.maintenance.BannerMessage; -import at.tuwien.service.BannerMessageService; +package at.ac.tuwien.ifs.dbrepo.endpoints; + +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageDto; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.maintenance.BannerMessage; +import at.ac.tuwien.ifs.dbrepo.core.exception.MessageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.service.BannerMessageService; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -29,7 +28,7 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class MessageEndpointUnitTest extends AbstractUnitTest { +public class MessageEndpointUnitTest extends BaseTest { @MockBean private BannerMessageService bannerMessageService; @@ -37,11 +36,6 @@ public class MessageEndpointUnitTest extends AbstractUnitTest { @Autowired private MessageEndpoint messageEndpoint; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @WithAnonymousUser public void list_anonymous_succeeds() { @@ -127,7 +121,7 @@ public class MessageEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"create-maintenance-message"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"create-maintenance-message"}) public void create_hasRole_succeeds() { /* test */ @@ -155,7 +149,7 @@ public class MessageEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"update-maintenance-message"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"update-maintenance-message"}) public void update_hasRole_succeeds() throws MessageNotFoundException { /* test */ @@ -183,7 +177,7 @@ public class MessageEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"delete-maintenance-message"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"delete-maintenance-message"}) public void delete_hasRole_succeeds() throws MessageNotFoundException { /* test */ @@ -191,7 +185,7 @@ public class MessageEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"delete-maintenance-message"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"delete-maintenance-message"}) public void delete_hasRoleNotFound_fails() { /* test */ diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/MetadataEndpointUnitTest.java similarity index 92% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/MetadataEndpointUnitTest.java index 98f756a1c0..012ca1f1c0 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/MetadataEndpointUnitTest.java @@ -1,12 +1,11 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.oaipmh.OaiListIdentifiersParameters; -import at.tuwien.oaipmh.OaiRecordParameters; -import at.tuwien.repository.IdentifierRepository; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.utils.XmlUtils; +import at.ac.tuwien.ifs.dbrepo.oaipmh.OaiListIdentifiersParameters; +import at.ac.tuwien.ifs.dbrepo.oaipmh.OaiRecordParameters; +import at.ac.tuwien.ifs.dbrepo.repository.IdentifierRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.utils.XmlUtils; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -27,7 +26,7 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class MetadataEndpointUnitTest extends AbstractUnitTest { +public class MetadataEndpointUnitTest extends BaseTest { @MockBean private IdentifierRepository identifierRepository; @@ -35,11 +34,6 @@ public class MetadataEndpointUnitTest extends AbstractUnitTest { @Autowired private MetadataEndpoint metadataEndpoint; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @WithAnonymousUser public void identify_succeeds() { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/OntologyEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/OntologyEndpointUnitTest.java similarity index 91% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/OntologyEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/OntologyEndpointUnitTest.java index ab3d0775ad..3055de08cd 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/OntologyEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/OntologyEndpointUnitTest.java @@ -1,18 +1,17 @@ -package at.tuwien.endpoints; - -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.api.semantics.*; -import at.tuwien.entities.semantics.Ontology; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.service.EntityService; -import at.tuwien.service.OntologyService; -import at.tuwien.service.UserService; +package at.ac.tuwien.ifs.dbrepo.endpoints; + +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.*; +import at.ac.tuwien.ifs.dbrepo.core.entity.semantics.Ontology; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.service.EntityService; +import at.ac.tuwien.ifs.dbrepo.service.OntologyService; +import at.ac.tuwien.ifs.dbrepo.service.UserService; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.apache.jena.sys.JenaSystem; import org.hibernate.HibernateException; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -34,7 +33,7 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class OntologyEndpointUnitTest extends AbstractUnitTest { +public class OntologyEndpointUnitTest extends BaseTest { @MockBean private OntologyService ontologyService; @@ -53,11 +52,6 @@ public class OntologyEndpointUnitTest extends AbstractUnitTest { JenaSystem.init(); } - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @WithAnonymousUser public void findAll_anonymous_succeeds() { @@ -142,11 +136,11 @@ public class OntologyEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-ontology"}) + @WithMockUser(username =USER_3_USERNAME, authorities = {"create-ontology"}) public void create_hasRole_succeeds() throws UserNotFoundException { /* test */ - create_generic(ONTOLOGY_1_CREATE_DTO, USER_3_PRINCIPAL, USER_3_USERNAME, USER_3, ONTOLOGY_1); + create_generic(ONTOLOGY_1_CREATE_DTO, USER_3_PRINCIPAL, USER_3.getUsername(), USER_3, ONTOLOGY_1); } @Test @@ -170,7 +164,7 @@ public class OntologyEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"update-ontology"}) + @WithMockUser(username =USER_3_USERNAME, authorities = {"update-ontology"}) public void update_hasRole_succeeds() throws OntologyNotFoundException { /* test */ @@ -198,7 +192,7 @@ public class OntologyEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"delete-ontology"}) + @WithMockUser(username =USER_3_USERNAME, authorities = {"delete-ontology"}) public void delete_hasRole_succeeds() throws OntologyNotFoundException { /* test */ @@ -216,7 +210,7 @@ public class OntologyEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_4_USERNAME, authorities = {}) + @WithMockUser(username = USER_4_USERNAME) public void find_noRole_fails() { /* test */ diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/TableEndpointUnitTest.java similarity index 78% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/TableEndpointUnitTest.java index 12b6e0a247..9c756b8311 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/TableEndpointUnitTest.java @@ -1,29 +1,28 @@ -package at.tuwien.endpoints; - -import at.tuwien.api.database.table.CreateTableDto; -import at.tuwien.api.database.table.TableBriefDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.TableUpdateDto; -import at.tuwien.api.database.table.columns.ColumnDto; -import at.tuwien.api.database.table.columns.ColumnTypeDto; -import at.tuwien.api.database.table.columns.CreateTableColumnDto; -import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; -import at.tuwien.api.database.table.constraints.CreateTableConstraintsDto; -import at.tuwien.api.semantics.EntityDto; -import at.tuwien.api.semantics.TableColumnEntityDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.TableColumn; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.service.*; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.validation.EndpointValidator; +package at.ac.tuwien.ifs.dbrepo.endpoints; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.CreateTableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.CreateTableColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.CreateTableConstraintsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.EntityDto; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.TableColumnEntityDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.DatabaseAccess; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumn; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.service.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.validation.EndpointValidator; import lombok.extern.log4j.Log4j2; import org.apache.jena.sys.JenaSystem; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; @@ -49,7 +48,7 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class TableEndpointUnitTest extends AbstractUnitTest { +public class TableEndpointUnitTest extends BaseTest { @MockBean private DatabaseService databaseService; @@ -57,12 +56,6 @@ public class TableEndpointUnitTest extends AbstractUnitTest { @MockBean private AccessService accessService; - @MockBean - private UnitService unitService; - - @MockBean - private ConceptService conceptService; - @MockBean private TableService tableService; @@ -101,11 +94,6 @@ public class TableEndpointUnitTest extends AbstractUnitTest { JenaSystem.init(); } - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @WithAnonymousUser public void list_publicDataPrivateSchemaAnonymous_fails() { @@ -141,7 +129,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { UserNotFoundException, DatabaseNotFoundException, AccessNotFoundException { /* test */ - final ResponseEntity<List<TableBriefDto>> response = generic_list(DATABASE_3_ID, DATABASE_3, USER_1_PRINCIPAL, USER_1, DATABASE_1_USER_1_READ_ACCESS); + final ResponseEntity<List<TableBriefDto>> response = generic_list(DATABASE_3_ID, DATABASE_3, USER_1_PRINCIPAL, USER_1, DATABASE_1.getAccesses().get(0)); assertEquals(HttpStatus.OK, response.getStatusCode()); final List<TableBriefDto> body = response.getBody(); assertNotNull(body); @@ -208,7 +196,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) + @WithMockUser(username =USER_3_USERNAME, authorities = {"create-table"}) public void create_publicDecimalColumnSizeTooSmall_fails() { final CreateTableDto request = CreateTableDto.builder() .name("Some Table") @@ -229,7 +217,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) + @WithMockUser(username =USER_3_USERNAME, authorities = {"create-table"}) public void create_publicDecimalColumnDTooSmall_fails() { final CreateTableDto request = CreateTableDto.builder() .name("Some Table") @@ -251,9 +239,12 @@ public class TableEndpointUnitTest extends AbstractUnitTest { @ParameterizedTest @MethodSource("canHaveSize_parameters") - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) - public void create_publicOptionalSizeNone_succeeds(ColumnTypeDto columnType) throws UserNotFoundException, SearchServiceException, - NotAllowedException, SemanticEntityNotFoundException, DataServiceConnectionException, TableNotFoundException, MalformedException, DataServiceException, DatabaseNotFoundException, AccessNotFoundException, OntologyNotFoundException, TableExistsException, SearchServiceConnectionException { + @WithMockUser(username =USER_3_USERNAME, authorities = {"create-table"}) + public void create_publicOptionalSizeNone_succeeds(ColumnTypeDto columnType) throws UserNotFoundException, + SearchServiceException, NotAllowedException, SemanticEntityNotFoundException, TableNotFoundException, + DataServiceConnectionException, MalformedException, DataServiceException, DatabaseNotFoundException, + AccessNotFoundException, OntologyNotFoundException, TableExistsException, SearchServiceConnectionException, + DashboardServiceException, DashboardServiceConnectionException { final CreateTableDto request = CreateTableDto.builder() .name("Some Table") .description("Some Description") @@ -282,9 +273,12 @@ public class TableEndpointUnitTest extends AbstractUnitTest { @ParameterizedTest @MethodSource("canHaveSize_parameters") - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) - public void create_publicOptionalSize_succeeds(ColumnTypeDto columnType) throws UserNotFoundException, SearchServiceException, - NotAllowedException, SemanticEntityNotFoundException, DataServiceConnectionException, TableNotFoundException, MalformedException, DataServiceException, DatabaseNotFoundException, AccessNotFoundException, OntologyNotFoundException, TableExistsException, SearchServiceConnectionException { + @WithMockUser(username =USER_3_USERNAME, authorities = {"create-table"}) + public void create_publicOptionalSize_succeeds(ColumnTypeDto columnType) throws UserNotFoundException, + SearchServiceException, NotAllowedException, SemanticEntityNotFoundException, TableNotFoundException, + DataServiceConnectionException, MalformedException, DataServiceException, DatabaseNotFoundException, + AccessNotFoundException, OntologyNotFoundException, TableExistsException, SearchServiceConnectionException, + DashboardServiceException, DashboardServiceConnectionException { final CreateTableDto request = CreateTableDto.builder() .name("Some Table") .description("Some Description") @@ -307,9 +301,12 @@ public class TableEndpointUnitTest extends AbstractUnitTest { @ParameterizedTest @MethodSource("needNothing_parameters") - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) - public void create_publicNeedNothing_succeeds(ColumnTypeDto columnType) throws UserNotFoundException, SearchServiceException, - NotAllowedException, SemanticEntityNotFoundException, DataServiceConnectionException, TableNotFoundException, MalformedException, DataServiceException, DatabaseNotFoundException, AccessNotFoundException, OntologyNotFoundException, TableExistsException, SearchServiceConnectionException { + @WithMockUser(username =USER_3_USERNAME, authorities = {"create-table"}) + public void create_publicNeedNothing_succeeds(ColumnTypeDto columnType) throws UserNotFoundException, + SearchServiceException, NotAllowedException, SemanticEntityNotFoundException, TableNotFoundException, + DataServiceConnectionException, MalformedException, DataServiceException, DatabaseNotFoundException, + AccessNotFoundException, OntologyNotFoundException, TableExistsException, SearchServiceConnectionException, + DashboardServiceException, DashboardServiceConnectionException { final CreateTableDto request = CreateTableDto.builder() .name("Some Table") .description("Some Description") @@ -333,9 +330,12 @@ public class TableEndpointUnitTest extends AbstractUnitTest { @ParameterizedTest @MethodSource("needSize_parameters") - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) - public void create_publicNeedSize_succeeds(ColumnTypeDto columnType) throws UserNotFoundException, SearchServiceException, - NotAllowedException, SemanticEntityNotFoundException, DataServiceConnectionException, TableNotFoundException, MalformedException, DataServiceException, DatabaseNotFoundException, AccessNotFoundException, OntologyNotFoundException, TableExistsException, SearchServiceConnectionException { + @WithMockUser(username =USER_3_USERNAME, authorities = {"create-table"}) + public void create_publicNeedSize_succeeds(ColumnTypeDto columnType) throws UserNotFoundException, + SearchServiceException, NotAllowedException, SemanticEntityNotFoundException, TableNotFoundException, + DataServiceConnectionException, MalformedException, DataServiceException, DatabaseNotFoundException, + AccessNotFoundException, OntologyNotFoundException, TableExistsException, SearchServiceConnectionException, + DashboardServiceException, DashboardServiceConnectionException { final CreateTableDto request = CreateTableDto.builder() .name("Some Table") .description("Some Description") @@ -358,7 +358,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { @ParameterizedTest @MethodSource("needSize_parameters") - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) + @WithMockUser(username =USER_3_USERNAME, authorities = {"create-table"}) public void create_publicNeedSizeNone_fails(ColumnTypeDto columnType) { final CreateTableDto request = CreateTableDto.builder() .name("Some Table") @@ -378,145 +378,9 @@ public class TableEndpointUnitTest extends AbstractUnitTest { }); } - @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) - public void create_sets_succeeds() throws UserNotFoundException, SearchServiceException, NotAllowedException, - SemanticEntityNotFoundException, DataServiceConnectionException, TableNotFoundException, MalformedException, - DataServiceException, DatabaseNotFoundException, AccessNotFoundException, OntologyNotFoundException, - TableExistsException, SearchServiceConnectionException { - final CreateTableDto request = CreateTableDto.builder() - .name("Some Table") - .description("Some Description") - .columns(List.of(CreateTableColumnDto.builder() - .name("sex") - .type(ColumnTypeDto.SET) - .sets(List.of("male", "female")) - .build())) - .build(); - - /* test */ - generic_create(DATABASE_3_ID, DATABASE_3, request, USER_1_PRINCIPAL, USER_1, DATABASE_3_USER_1_WRITE_OWN_ACCESS); - } - - @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) - public void create_enum_succeeds() throws UserNotFoundException, SearchServiceException, NotAllowedException, - SemanticEntityNotFoundException, DataServiceConnectionException, TableNotFoundException, MalformedException, - DataServiceException, DatabaseNotFoundException, AccessNotFoundException, OntologyNotFoundException, - TableExistsException, SearchServiceConnectionException { - final CreateTableDto request = CreateTableDto.builder() - .name("Some Table") - .description("Some Description") - .columns(List.of(CreateTableColumnDto.builder() - .name("sex") - .type(ColumnTypeDto.ENUM) - .enums(List.of("male", "female")) - .build())) - .build(); - - /* test */ - generic_create(DATABASE_3_ID, DATABASE_3, request, USER_1_PRINCIPAL, USER_1, DATABASE_3_USER_1_WRITE_OWN_ACCESS); - } - - @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) - public void create_hasUnit_succeeds() throws UserNotFoundException, SearchServiceException, NotAllowedException, - SemanticEntityNotFoundException, DataServiceConnectionException, TableNotFoundException, MalformedException, - DataServiceException, DatabaseNotFoundException, AccessNotFoundException, OntologyNotFoundException, - TableExistsException, SearchServiceConnectionException, UnitNotFoundException { - final CreateTableDto request = CreateTableDto.builder() - .name("Some Table") - .description("Some Description") - .columns(List.of(CreateTableColumnDto.builder() - .name(UNIT_1_NAME) - .type(ColumnTypeDto.INT) - .unitUri(UNIT_1_URI) - .build())) - .build(); - - /* mock */ - when(unitService.find(UNIT_1_URI)) - .thenReturn(UNIT_1); - - /* test */ - generic_create(DATABASE_3_ID, DATABASE_3, request, USER_1_PRINCIPAL, USER_1, DATABASE_3_USER_1_WRITE_OWN_ACCESS); - } - - @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) - public void create_hasUnitNotFound_succeeds() throws UserNotFoundException, SearchServiceException, NotAllowedException, - SemanticEntityNotFoundException, DataServiceConnectionException, TableNotFoundException, MalformedException, - DataServiceException, DatabaseNotFoundException, AccessNotFoundException, OntologyNotFoundException, - TableExistsException, SearchServiceConnectionException { - final CreateTableDto request = CreateTableDto.builder() - .name("Some Table") - .description("Some Description") - .columns(List.of(CreateTableColumnDto.builder() - .name(UNIT_1_NAME) - .type(ColumnTypeDto.INT) - .unitUri(UNIT_1_URI) - .build())) - .build(); - - /* mock */ - when(unitService.create(UNIT_1)) - .thenReturn(UNIT_1); - - /* test */ - generic_create(DATABASE_3_ID, DATABASE_3, request, USER_1_PRINCIPAL, USER_1, DATABASE_3_USER_1_WRITE_OWN_ACCESS); - } - - @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) - public void create_hasConcept_succeeds() throws UserNotFoundException, SearchServiceException, NotAllowedException, - SemanticEntityNotFoundException, DataServiceConnectionException, TableNotFoundException, MalformedException, - DataServiceException, DatabaseNotFoundException, AccessNotFoundException, OntologyNotFoundException, - TableExistsException, SearchServiceConnectionException, ConceptNotFoundException { - final CreateTableDto request = CreateTableDto.builder() - .name("Some Table") - .description("Some Description") - .columns(List.of(CreateTableColumnDto.builder() - .name(CONCEPT_1_NAME) - .type(ColumnTypeDto.INT) - .conceptUri(UNIT_1_URI) - .build())) - .build(); - - /* mock */ - when(conceptService.find(CONCEPT_1_URI)) - .thenReturn(CONCEPT_1); - - /* test */ - generic_create(DATABASE_3_ID, DATABASE_3, request, USER_1_PRINCIPAL, USER_1, DATABASE_3_USER_1_WRITE_OWN_ACCESS); - } - - @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) - public void create_hasConceptNotFound_succeeds() throws UserNotFoundException, SearchServiceException, NotAllowedException, - SemanticEntityNotFoundException, DataServiceConnectionException, TableNotFoundException, MalformedException, - DataServiceException, DatabaseNotFoundException, AccessNotFoundException, OntologyNotFoundException, - TableExistsException, SearchServiceConnectionException { - final CreateTableDto request = CreateTableDto.builder() - .name("Some Table") - .description("Some Description") - .columns(List.of(CreateTableColumnDto.builder() - .name("precipitation") - .type(ColumnTypeDto.INT) - .conceptUri(UNIT_1_URI) - .build())) - .build(); - - /* mock */ - when(conceptService.create(CONCEPT_1)) - .thenReturn(CONCEPT_1); - - /* test */ - generic_create(DATABASE_3_ID, DATABASE_3, request, USER_1_PRINCIPAL, USER_1, DATABASE_3_USER_1_WRITE_OWN_ACCESS); - } - @ParameterizedTest @MethodSource("canHaveSizeAndD_parameters") - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) + @WithMockUser(username =USER_3_USERNAME, authorities = {"create-table"}) public void create_publicCanHaveSizeAndDSizeNone_fails(ColumnTypeDto columnType) { final CreateTableDto request = CreateTableDto.builder() .name("Some Table") @@ -538,7 +402,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { @ParameterizedTest @MethodSource("canHaveSizeAndD_parameters") - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) + @WithMockUser(username =USER_3_USERNAME, authorities = {"create-table"}) public void create_publicCanHaveSizeAndDDNone_fails(ColumnTypeDto columnType) { final CreateTableDto request = CreateTableDto.builder() .name("Some Table") @@ -560,12 +424,12 @@ public class TableEndpointUnitTest extends AbstractUnitTest { @ParameterizedTest @MethodSource("canHaveSizeAndD_parameters") - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) + @WithMockUser(username =USER_3_USERNAME, authorities = {"create-table"}) public void create_publicCanHaveSizeAndDBothNone_succeeds(ColumnTypeDto columnType) throws UserNotFoundException, SearchServiceException, NotAllowedException, SemanticEntityNotFoundException, DataServiceConnectionException, TableNotFoundException, MalformedException, DataServiceException, DatabaseNotFoundException, AccessNotFoundException, OntologyNotFoundException, TableExistsException, - SearchServiceConnectionException { + SearchServiceConnectionException, DashboardServiceException, DashboardServiceConnectionException { final CreateTableDto request = CreateTableDto.builder() .name("Some Table") .description("Some Description") @@ -587,7 +451,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) + @WithMockUser(username =USER_3_USERNAME, authorities = {"create-table"}) public void create_publicHasMultipleSerial_fails() { final CreateTableDto request = CreateTableDto.builder() .name("Some Table") @@ -615,7 +479,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) + @WithMockUser(username =USER_3_USERNAME, authorities = {"create-table"}) public void create_publicSerialNullAllowed_fails() { final CreateTableDto request = CreateTableDto.builder() .name("Some Table") @@ -638,12 +502,12 @@ public class TableEndpointUnitTest extends AbstractUnitTest { @ParameterizedTest @MethodSource("canHaveSizeAndD_parameters") - @WithMockUser(username = USER_3_USERNAME, authorities = {"create-table"}) + @WithMockUser(username =USER_3_USERNAME, authorities = {"create-table"}) public void create_publicCanHaveSizeAndDBothNotNone_succeeds(ColumnTypeDto columnType) throws UserNotFoundException, SearchServiceException, NotAllowedException, SemanticEntityNotFoundException, DataServiceConnectionException, TableNotFoundException, MalformedException, DataServiceException, DatabaseNotFoundException, AccessNotFoundException, OntologyNotFoundException, TableExistsException, - SearchServiceConnectionException { + SearchServiceConnectionException, DashboardServiceException, DashboardServiceConnectionException { final CreateTableDto request = CreateTableDto.builder() .name("Some Table") .description("Some Description") @@ -679,7 +543,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { /* test */ assertThrows(TableNotFoundException.class, () -> { - generic_findById(DATABASE_3_ID, DATABASE_3, TABLE_8_ID, null, USER_1_PRINCIPAL, USER_1, DATABASE_1_USER_1_READ_ACCESS); + generic_findById(DATABASE_3_ID, DATABASE_3, TABLE_8_ID, null, USER_1_PRINCIPAL, USER_1, DATABASE_1.getAccesses().get(0)); }); } @@ -689,7 +553,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { /* test */ assertThrows(DatabaseNotFoundException.class, () -> { - generic_findById(DATABASE_3_ID, null, TABLE_8_ID, TABLE_8, USER_1_PRINCIPAL, USER_1, DATABASE_1_USER_1_READ_ACCESS); + generic_findById(DATABASE_3_ID, null, TABLE_8_ID, TABLE_8, USER_1_PRINCIPAL, USER_1, DATABASE_1.getAccesses().get(0)); }); } @@ -699,7 +563,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { TableNotFoundException, NotAllowedException, DatabaseNotFoundException, AccessNotFoundException { /* test */ - final ResponseEntity<TableDto> response = generic_findById(DATABASE_3_ID, DATABASE_3, TABLE_8_ID, TABLE_8, USER_1_PRINCIPAL, USER_1, DATABASE_1_USER_1_READ_ACCESS); + final ResponseEntity<TableDto> response = generic_findById(DATABASE_3_ID, DATABASE_3, TABLE_8_ID, TABLE_8, USER_1_PRINCIPAL, USER_1, DATABASE_1.getAccesses().get(0)); assertEquals(HttpStatus.OK, response.getStatusCode()); final TableDto body = response.getBody(); assertNotNull(body); @@ -840,7 +704,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"modify-table-column-semantics"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_publicHasRoleForeignHasOwnWriteAccess_fails() { final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() .unitUri(UNIT_1_URI) @@ -868,7 +732,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"modify-table-column-semantics"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_publicHasRoleForeignHasAllWriteAccess_succeeds() throws MalformedException, DataServiceException, NotAllowedException, DataServiceConnectionException, UserNotFoundException, TableNotFoundException, DatabaseNotFoundException, AccessNotFoundException, SearchServiceException, @@ -924,7 +788,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { /* test */ assertThrows(NotAllowedException.class, () -> { generic_updateColumn(DATABASE_1_ID, DATABASE_1, TABLE_1_ID, TABLE_1, TABLE_1_COLUMNS.get(0).getId(), - TABLE_1_COLUMNS.get(0), USER_1_PRINCIPAL, USER_1, request, DATABASE_1_USER_1_READ_ACCESS); + TABLE_1_COLUMNS.get(0), USER_1_PRINCIPAL, USER_1, request, DATABASE_1.getAccesses().get(0)); }); } @@ -944,7 +808,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"modify-table-column-semantics"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_privateHasRoleForeignHasOwnWriteAccess_fails() { final ColumnSemanticsUpdateDto request = ColumnSemanticsUpdateDto.builder() .unitUri(UNIT_1_URI) @@ -972,7 +836,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"modify-table-column-semantics"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"modify-table-column-semantics"}) public void update_privateHasRoleForeignHasAllWriteAccess_succeeds() throws MalformedException, DataServiceException, NotAllowedException, DataServiceConnectionException, UserNotFoundException, TableNotFoundException, DatabaseNotFoundException, AccessNotFoundException, SearchServiceException, @@ -993,7 +857,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { /* test */ assertThrows(DatabaseNotFoundException.class, () -> { - generic_list(DATABASE_1_ID, null, USER_1_PRINCIPAL, USER_1, DATABASE_1_USER_1_READ_ACCESS); + generic_list(DATABASE_1_ID, null, USER_1_PRINCIPAL, USER_1, DATABASE_1.getAccesses().get(0)); }); } @@ -1003,7 +867,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { UserNotFoundException, DatabaseNotFoundException, AccessNotFoundException { /* test */ - final ResponseEntity<List<TableBriefDto>> response = generic_list(DATABASE_1_ID, DATABASE_1, USER_1_PRINCIPAL, USER_1, DATABASE_1_USER_1_READ_ACCESS); + final ResponseEntity<List<TableBriefDto>> response = generic_list(DATABASE_1_ID, DATABASE_1, USER_1_PRINCIPAL, USER_1, DATABASE_1.getAccesses().get(0)); assertEquals(HttpStatus.OK, response.getStatusCode()); final List<TableBriefDto> body = response.getBody(); assertNotNull(body); @@ -1055,7 +919,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { /* test */ assertThrows(NotAllowedException.class, () -> { - generic_create(DATABASE_1_ID, DATABASE_1, TABLE_5_CREATE_DTO, USER_1_PRINCIPAL, USER_1, DATABASE_1_USER_1_READ_ACCESS); + generic_create(DATABASE_1_ID, DATABASE_1, TABLE_5_CREATE_DTO, USER_1_PRINCIPAL, USER_1, DATABASE_1.getAccesses().get(0)); }); } @@ -1086,7 +950,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { /* test */ assertThrows(TableNotFoundException.class, () -> { - generic_findById(DATABASE_1_ID, DATABASE_1, TABLE_1_ID, null, USER_1_PRINCIPAL, USER_1, DATABASE_1_USER_1_READ_ACCESS); + generic_findById(DATABASE_1_ID, DATABASE_1, TABLE_1_ID, null, USER_1_PRINCIPAL, USER_1, DATABASE_1.getAccesses().get(0)); }); } @@ -1096,7 +960,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { /* test */ assertThrows(DatabaseNotFoundException.class, () -> { - generic_findById(DATABASE_1_ID, null, TABLE_1_ID, TABLE_1, USER_1_PRINCIPAL, USER_1, DATABASE_1_USER_1_READ_ACCESS); + generic_findById(DATABASE_1_ID, null, TABLE_1_ID, TABLE_1, USER_1_PRINCIPAL, USER_1, DATABASE_1.getAccesses().get(0)); }); } @@ -1106,21 +970,12 @@ public class TableEndpointUnitTest extends AbstractUnitTest { TableNotFoundException, NotAllowedException, DatabaseNotFoundException, AccessNotFoundException { /* test */ final ResponseEntity<TableDto> response = generic_findById(DATABASE_1_ID, DATABASE_1, TABLE_1_ID, TABLE_1, - USER_1_PRINCIPAL, USER_1, DATABASE_1_USER_1_READ_ACCESS); + USER_1_PRINCIPAL, USER_1, DATABASE_1.getAccesses().get(0)); assertEquals(HttpStatus.OK, response.getStatusCode()); final TableDto body = response.getBody(); assertNotNull(body); } - @Test - @WithMockUser(username = USER_4_USERNAME) - public void findById_privateDatabasePrivateDataPrivateSchemaNoRole_succeeds() throws UserNotFoundException, - TableNotFoundException, NotAllowedException, DatabaseNotFoundException, AccessNotFoundException { - - /* test */ - generic_findById(DATABASE_1_ID, DATABASE_1, TABLE_1_ID, TABLE_1, USER_4_PRINCIPAL, USER_4, DATABASE_1_USER_4_READ_ACCESS); - } - @Test @WithMockUser(username = USER_4_USERNAME) public void delete_privateNoRole_fails() { @@ -1135,14 +990,14 @@ public class TableEndpointUnitTest extends AbstractUnitTest { @WithMockUser(username = USER_1_USERNAME, authorities = {"delete-table"}) public void delete_succeeds() throws NotAllowedException, DataServiceException, DataServiceConnectionException, TableNotFoundException, DatabaseNotFoundException, SearchServiceException, - SearchServiceConnectionException { + SearchServiceConnectionException, DashboardServiceException, DashboardServiceConnectionException { /* test */ generic_delete(USER_1_PRINCIPAL, TABLE_1); } @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"delete-table"}) + @WithMockUser(username =USER_3_USERNAME, authorities = {"delete-table"}) public void delete_foreign_fails() { /* test */ @@ -1155,14 +1010,15 @@ public class TableEndpointUnitTest extends AbstractUnitTest { @WithMockUser(username = USER_5_USERNAME, authorities = {"delete-foreign-table"}) public void delete_foreign_succeeds() throws NotAllowedException, DataServiceConnectionException, TableNotFoundException, DatabaseNotFoundException, SearchServiceException, - SearchServiceConnectionException, DataServiceException { + SearchServiceConnectionException, DataServiceException, DashboardServiceException, + DashboardServiceConnectionException { /* test */ generic_delete(USER_5_PRINCIPAL, TABLE_1); } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"delete-table"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"delete-table"}) public void delete_hasIdentifiers_fails() { final Table response = Table.builder() .identifiers(List.of(IDENTIFIER_1)) @@ -1180,7 +1036,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { @WithMockUser(username = USER_1_USERNAME, authorities = {"update-table"}) public void update_succeeds() throws TableNotFoundException, SearchServiceException, NotAllowedException, DataServiceException, DatabaseNotFoundException, SearchServiceConnectionException, - DataServiceConnectionException { + DataServiceConnectionException, DashboardServiceException, DashboardServiceConnectionException { final TableUpdateDto request = TableUpdateDto.builder() .isPublic(true) .isSchemaPublic(true) @@ -1194,7 +1050,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"update-table"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"update-table"}) public void update_notOwner_fails() { final TableUpdateDto request = TableUpdateDto.builder() .isPublic(true) @@ -1209,7 +1065,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"update-table-statistic"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"update-table-statistic"}) public void updateStatistic_notOwner_fails() { /* test */ @@ -1311,7 +1167,7 @@ public class TableEndpointUnitTest extends AbstractUnitTest { throws MalformedException, NotAllowedException, DataServiceException, DataServiceConnectionException, UserNotFoundException, DatabaseNotFoundException, AccessNotFoundException, TableNotFoundException, TableExistsException, SearchServiceException, SearchServiceConnectionException, OntologyNotFoundException, - SemanticEntityNotFoundException { + SemanticEntityNotFoundException, DashboardServiceException, DashboardServiceConnectionException { /* mock */ if (principal != null) { @@ -1384,7 +1240,8 @@ public class TableEndpointUnitTest extends AbstractUnitTest { protected ResponseEntity<?> generic_delete(Principal principal, Table table) throws NotAllowedException, DataServiceException, DataServiceConnectionException, TableNotFoundException, DatabaseNotFoundException, - SearchServiceException, SearchServiceConnectionException { + SearchServiceException, SearchServiceConnectionException, DashboardServiceException, + DashboardServiceConnectionException { /* mock */ when(databaseService.findById(DATABASE_1_ID)) @@ -1443,7 +1300,8 @@ public class TableEndpointUnitTest extends AbstractUnitTest { protected ResponseEntity<TableBriefDto> generic_update(TableUpdateDto data, Principal caller) throws TableNotFoundException, SearchServiceException, NotAllowedException, DataServiceException, - DatabaseNotFoundException, SearchServiceConnectionException, DataServiceConnectionException { + DatabaseNotFoundException, SearchServiceConnectionException, DataServiceConnectionException, + DashboardServiceException, DashboardServiceConnectionException { /* mock */ when(databaseService.findById(DATABASE_1_ID)) diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UnitEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/UnitEndpointUnitTest.java similarity index 77% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UnitEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/UnitEndpointUnitTest.java index 7d74e615be..77f8bebaa2 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UnitEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/UnitEndpointUnitTest.java @@ -1,10 +1,9 @@ -package at.tuwien.endpoints; +package at.ac.tuwien.ifs.dbrepo.endpoints; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.api.database.table.columns.concepts.UnitDto; -import at.tuwien.service.UnitService; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts.UnitDto; +import at.ac.tuwien.ifs.dbrepo.service.UnitService; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -18,13 +17,14 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class UnitEndpointUnitTest extends AbstractUnitTest { +public class UnitEndpointUnitTest extends BaseTest { @MockBean private UnitService unitService; @@ -32,11 +32,6 @@ public class UnitEndpointUnitTest extends AbstractUnitTest { @Autowired private UnitEndpoint unitEndpoint; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @WithAnonymousUser public void findAllUnits_anonymous_succeeds() { @@ -46,7 +41,7 @@ public class UnitEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_4_USERNAME, authorities = {}) + @WithMockUser(username = USER_4_USERNAME) public void findAllUnits_noRole_succeeds() { /* test */ diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/UserEndpointUnitTest.java similarity index 88% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/UserEndpointUnitTest.java index 5f0341fa7b..c24461a164 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/UserEndpointUnitTest.java @@ -1,17 +1,16 @@ -package at.tuwien.endpoints; - -import at.tuwien.api.auth.CreateUserDto; -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.api.user.UserUpdateDto; -import at.tuwien.entities.user.User; -import at.tuwien.exception.AuthServiceException; -import at.tuwien.exception.NotAllowedException; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.service.UserService; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.endpoints; + +import at.ac.tuwien.ifs.dbrepo.core.api.auth.CreateUserDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.AuthServiceException; +import at.ac.tuwien.ifs.dbrepo.core.exception.NotAllowedException; +import at.ac.tuwien.ifs.dbrepo.core.exception.UserNotFoundException; +import at.ac.tuwien.ifs.dbrepo.service.UserService; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -37,7 +36,7 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class UserEndpointUnitTest extends AbstractUnitTest { +public class UserEndpointUnitTest extends BaseTest { @MockBean private UserService userService; @@ -45,11 +44,6 @@ public class UserEndpointUnitTest extends AbstractUnitTest { @Autowired private UserEndpoint userEndpoint; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @WithAnonymousUser public void findAll_anonymous_succeeds() throws UserNotFoundException { @@ -123,7 +117,7 @@ public class UserEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"find-foreign-user"}) + @WithMockUser(username =USER_3_USERNAME, authorities = {"find-foreign-user"}) public void find_hasRoleForeign_succeeds() throws UserNotFoundException, NotAllowedException { final Principal principal = new UsernamePasswordAuthenticationToken(USER_3_DETAILS, USER_3_PASSWORD, List.of( new SimpleGrantedAuthority("find-foreign-user"))); @@ -133,7 +127,7 @@ public class UserEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"system"}) + @WithMockUser(username =USER_3_USERNAME, authorities = {"system"}) public void find_system_succeeds() throws UserNotFoundException, NotAllowedException { final Principal principal = new UsernamePasswordAuthenticationToken(USER_3_DETAILS, USER_3_PASSWORD, List.of( new SimpleGrantedAuthority("system"))); @@ -141,7 +135,7 @@ public class UserEndpointUnitTest extends AbstractUnitTest { /* test */ final ResponseEntity<UserDto> response = find_generic(USER_3_ID, USER_3, principal); assertNotNull(response.getHeaders().get("X-Username")); - assertEquals(USER_3_USERNAME, response.getHeaders().get("X-Username").get(0)); + assertEquals(USER_3.getUsername(), response.getHeaders().get("X-Username").get(0)); assertNotNull(response.getHeaders().get("X-Password")); assertNotEquals(USER_3_PASSWORD, response.getHeaders().get("X-Password").get(0)); assertEquals(USER_3_DATABASE_PASSWORD, response.getHeaders().get("X-Password").get(0)); @@ -192,7 +186,7 @@ public class UserEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"modify-user-information"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"modify-user-information"}) public void modify_hasRoleForeign_fails() { final UserUpdateDto request = UserUpdateDto.builder() .firstname(USER_1_FIRSTNAME) @@ -232,7 +226,7 @@ public class UserEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME) + @WithMockUser(username =USER_2_USERNAME) public void create_notInternalUser_fails() { /* test */ diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ViewEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/ViewEndpointUnitTest.java similarity index 77% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ViewEndpointUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/ViewEndpointUnitTest.java index ac5a8ef524..d0cb350758 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ViewEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoints/ViewEndpointUnitTest.java @@ -1,27 +1,22 @@ -package at.tuwien.endpoints; - -import at.tuwien.api.database.CreateViewDto; -import at.tuwien.api.database.ViewBriefDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.ViewUpdateDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.database.View; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.service.AccessService; -import at.tuwien.service.DatabaseService; -import at.tuwien.service.UserService; -import at.tuwien.service.ViewService; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.endpoints; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.CreateViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.DatabaseAccess; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.View; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.service.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.AccessDeniedException; @@ -39,7 +34,7 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class ViewEndpointUnitTest extends AbstractUnitTest { +public class ViewEndpointUnitTest extends BaseTest { @MockBean private DatabaseService databaseService; @@ -50,17 +45,15 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { @MockBean private ViewService viewService; + @MockBean + private DashboardService dashboardService; + @MockBean private UserService userService; @Autowired private ViewEndpoint viewEndpoint; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @WithAnonymousUser public void findAll_publicAnonymous_succeeds() throws UserNotFoundException, AccessNotFoundException, @@ -71,7 +64,7 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"list-views"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"list-views"}) public void findAll_publicHasRole_succeeds() throws UserNotFoundException, AccessNotFoundException, DatabaseNotFoundException { @@ -80,7 +73,7 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"list-views"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"list-views"}) public void findAll_publicHasRoleHasAccess_succeeds() throws UserNotFoundException, AccessNotFoundException, DatabaseNotFoundException { @@ -89,7 +82,7 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME) + @WithMockUser(username =USER_2_USERNAME) public void findAll_publicNoRole_succeeds() throws UserNotFoundException, AccessNotFoundException, DatabaseNotFoundException { @@ -108,7 +101,7 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"create-database-view"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"create-database-view"}) public void create_publicHasRole_fails() { /* test */ @@ -118,17 +111,17 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"create-database-view"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"create-database-view"}) public void create_publicHasRoleHasAccess_fails() { /* test */ assertThrows(NotAllowedException.class, () -> { - create_generic(DATABASE_3_ID, DATABASE_3, "View", USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2_USER_1_READ_ACCESS); + create_generic(DATABASE_3_ID, DATABASE_3, "View", USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2.getAccesses().get(0)); }); } @Test - @WithMockUser(username = USER_2_USERNAME) + @WithMockUser(username =USER_2_USERNAME) public void create_publicNoRole_fails() { /* test */ @@ -141,8 +134,8 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { @WithMockUser(username = USER_1_USERNAME, authorities = {"create-database-view"}) public void create_succeeds() throws UserNotFoundException, SearchServiceException, MalformedException, NotAllowedException, DataServiceException, DatabaseNotFoundException, AccessNotFoundException, - SearchServiceConnectionException, DataServiceConnectionException, TableNotFoundException, - ImageNotFoundException, ViewExistsException { + SearchServiceConnectionException, DataServiceConnectionException, DashboardServiceException, + DashboardServiceConnectionException, TableNotFoundException, ViewExistsException, ImageNotFoundException { /* test */ create_generic(DATABASE_1_ID, DATABASE_1, "View", USER_1_PRINCIPAL, USER_1_ID, USER_1, DATABASE_1_USER_1_WRITE_ALL_ACCESS); @@ -161,37 +154,37 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { @Test @WithAnonymousUser public void find_publicAnonymous_succeeds() throws UserNotFoundException, DatabaseNotFoundException, - AccessNotFoundException, ViewNotFoundException { + AccessNotFoundException, ViewNotFoundException, NotAllowedException { /* test */ find_generic(DATABASE_3_ID, DATABASE_3, null, null, null, null); } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"find-database-view"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"find-database-view"}) public void find_publicHasRole_succeeds() throws UserNotFoundException, DatabaseNotFoundException, - AccessNotFoundException, ViewNotFoundException { + AccessNotFoundException, ViewNotFoundException, NotAllowedException { /* test */ - find_generic(DATABASE_3_ID, DATABASE_3, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2_USER_1_READ_ACCESS); + find_generic(DATABASE_3_ID, DATABASE_3, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2.getAccesses().get(0)); } @Test - @WithMockUser(username = USER_2_USERNAME) + @WithMockUser(username =USER_2_USERNAME) public void find_publicNoRole_succeeds() throws UserNotFoundException, DatabaseNotFoundException, - AccessNotFoundException, ViewNotFoundException { + AccessNotFoundException, ViewNotFoundException, NotAllowedException { /* test */ - find_generic(DATABASE_3_ID, DATABASE_3, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2_USER_1_READ_ACCESS); + find_generic(DATABASE_3_ID, DATABASE_3, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2.getAccesses().get(0)); } @Test - @WithMockUser(username = USER_2_USERNAME) + @WithMockUser(username =USER_2_USERNAME) public void find_publicHasRoleHasAccess_succeeds() throws UserNotFoundException, DatabaseNotFoundException, - AccessNotFoundException, ViewNotFoundException { + AccessNotFoundException, ViewNotFoundException, NotAllowedException { /* test */ - find_generic(DATABASE_3_ID, DATABASE_3, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2_USER_1_READ_ACCESS); + find_generic(DATABASE_3_ID, DATABASE_3, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2.getAccesses().get(0)); } @Test @@ -205,30 +198,31 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"delete-database-view"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"delete-database-view"}) public void delete_publicHasRole_fails() { /* test */ assertThrows(NotAllowedException.class, () -> { - delete_generic(DATABASE_3_ID, DATABASE_3, VIEW_1_ID, VIEW_1, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2_USER_1_READ_ACCESS); + delete_generic(DATABASE_3_ID, DATABASE_3, VIEW_1_ID, VIEW_1, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2.getAccesses().get(0)); }); } @Test - @WithMockUser(username = USER_2_USERNAME) + @WithMockUser(username =USER_2_USERNAME) public void delete_publicNoRole_fails() { /* test */ assertThrows(AccessDeniedException.class, () -> { - delete_generic(DATABASE_3_ID, DATABASE_3, VIEW_1_ID, VIEW_1, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2_USER_1_READ_ACCESS); + delete_generic(DATABASE_3_ID, DATABASE_3, VIEW_1_ID, VIEW_1, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2.getAccesses().get(0)); }); } @Test - @WithMockUser(username = USER_3_USERNAME, authorities = {"delete-database-view"}) + @WithMockUser(username =USER_3_USERNAME, authorities = {"delete-database-view"}) public void delete_publicOwner_succeeds() throws NotAllowedException, DataServiceException, UserNotFoundException, DataServiceConnectionException, DatabaseNotFoundException, AccessNotFoundException, ViewNotFoundException, - SearchServiceException, SearchServiceConnectionException { + SearchServiceException, SearchServiceConnectionException, DashboardServiceException, + DashboardServiceConnectionException { /* test */ delete_generic(DATABASE_3_ID, DATABASE_3, VIEW_5_ID, VIEW_5, USER_3_PRINCIPAL, USER_3_ID, USER_3, DATABASE_3_USER_1_WRITE_ALL_ACCESS); @@ -248,7 +242,7 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"list-views"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"list-views"}) public void findAll_privateHasRole_succeeds() throws UserNotFoundException, AccessNotFoundException, DatabaseNotFoundException { @@ -257,7 +251,7 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"list-views"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"list-views"}) public void findAll_privateHasRoleHasAccess_succeeds() throws UserNotFoundException, AccessNotFoundException, DatabaseNotFoundException { @@ -266,7 +260,7 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME) + @WithMockUser(username =USER_2_USERNAME) public void findAll_privateNoRole_succeeds() throws UserNotFoundException, AccessNotFoundException, DatabaseNotFoundException { @@ -285,7 +279,7 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"create-database-view"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"create-database-view"}) public void create_privateHasRole_fails() { /* test */ @@ -295,17 +289,17 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"create-database-view"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"create-database-view"}) public void create_privateHasRoleHasAccess_fails() { /* test */ assertThrows(NotAllowedException.class, () -> { - create_generic(DATABASE_1_ID, DATABASE_1, "View", USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2_USER_1_READ_ACCESS); + create_generic(DATABASE_1_ID, DATABASE_1, "View", USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2.getAccesses().get(0)); }); } @Test - @WithMockUser(username = USER_2_USERNAME) + @WithMockUser(username =USER_2_USERNAME) public void create_privateNoRole_fails() { /* test */ @@ -317,37 +311,37 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { @Test @WithAnonymousUser public void find_privateAnonymous_succeeds() throws UserNotFoundException, DatabaseNotFoundException, - AccessNotFoundException, ViewNotFoundException { + AccessNotFoundException, ViewNotFoundException, NotAllowedException { /* test */ find_generic(DATABASE_1_ID, DATABASE_1, null, null, null, null); } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"find-database-view"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"find-database-view"}) public void find_privateHasRole_succeeds() throws UserNotFoundException, DatabaseNotFoundException, - AccessNotFoundException, ViewNotFoundException { + AccessNotFoundException, ViewNotFoundException, NotAllowedException { /* test */ - find_generic(DATABASE_1_ID, DATABASE_1, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2_USER_1_READ_ACCESS); + find_generic(DATABASE_1_ID, DATABASE_1, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2.getAccesses().get(0)); } @Test - @WithMockUser(username = USER_2_USERNAME) + @WithMockUser(username =USER_2_USERNAME) public void find_privateNoRole_succeeds() throws UserNotFoundException, DatabaseNotFoundException, - AccessNotFoundException, ViewNotFoundException { + AccessNotFoundException, ViewNotFoundException, NotAllowedException { /* test */ - find_generic(DATABASE_1_ID, DATABASE_1, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2_USER_1_READ_ACCESS); + find_generic(DATABASE_1_ID, DATABASE_1, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2.getAccesses().get(0)); } @Test - @WithMockUser(username = USER_2_USERNAME) + @WithMockUser(username =USER_2_USERNAME) public void find_privateHasRoleHasAccess_succeeds() throws UserNotFoundException, DatabaseNotFoundException, - AccessNotFoundException, ViewNotFoundException { + AccessNotFoundException, ViewNotFoundException, NotAllowedException { /* test */ - find_generic(DATABASE_1_ID, DATABASE_1, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2_USER_1_READ_ACCESS); + find_generic(DATABASE_1_ID, DATABASE_1, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2.getAccesses().get(0)); } @Test @@ -361,22 +355,22 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"delete-database-view"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"delete-database-view"}) public void delete_privateHasRole_fails() { /* test */ assertThrows(NotAllowedException.class, () -> { - delete_generic(DATABASE_1_ID, DATABASE_1, VIEW_1_ID, VIEW_1, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2_USER_1_READ_ACCESS); + delete_generic(DATABASE_1_ID, DATABASE_1, VIEW_1_ID, VIEW_1, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2.getAccesses().get(0)); }); } @Test - @WithMockUser(username = USER_2_USERNAME) + @WithMockUser(username =USER_2_USERNAME) public void delete_privateNoRole_fails() { /* test */ assertThrows(AccessDeniedException.class, () -> { - delete_generic(DATABASE_1_ID, DATABASE_1, VIEW_1_ID, VIEW_1, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2_USER_1_READ_ACCESS); + delete_generic(DATABASE_1_ID, DATABASE_1, VIEW_1_ID, VIEW_1, USER_2_PRINCIPAL, USER_2_ID, USER_2, DATABASE_2.getAccesses().get(0)); }); } @@ -384,7 +378,8 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { @WithMockUser(username = USER_1_USERNAME, authorities = {"delete-database-view"}) public void delete_privateOwner_succeeds() throws NotAllowedException, DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, AccessNotFoundException, SearchServiceException, - SearchServiceConnectionException, ViewNotFoundException, UserNotFoundException { + SearchServiceConnectionException, ViewNotFoundException, UserNotFoundException, DashboardServiceException, + DashboardServiceConnectionException { /* test */ delete_generic(DATABASE_1_ID, DATABASE_1, VIEW_1_ID, VIEW_1, USER_1_PRINCIPAL, USER_1_ID, USER_1, DATABASE_1_USER_1_WRITE_ALL_ACCESS); @@ -411,7 +406,7 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { } @Test - @WithMockUser(username = USER_2_USERNAME, authorities = {"modify-view-visibility"}) + @WithMockUser(username =USER_2_USERNAME, authorities = {"modify-view-visibility"}) public void update_notOwner_fails() { /* test */ @@ -423,7 +418,8 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"modify-view-visibility"}) public void update_succeeds() throws NotAllowedException, DataServiceConnectionException, DatabaseNotFoundException, - SearchServiceException, SearchServiceConnectionException, ViewNotFoundException, UserNotFoundException { + SearchServiceException, SearchServiceConnectionException, ViewNotFoundException, UserNotFoundException, + DashboardServiceException, DashboardServiceConnectionException { /* test */ update_generic(USER_1_PRINCIPAL); @@ -448,32 +444,24 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { log.trace("mock access of database with id {} and user id {}", databaseId, userId); when(accessService.find(database, user)) .thenReturn(access); - when(viewService.findAll(database, user)) - .thenReturn(List.of(VIEW_1, VIEW_2)); } else { log.trace("mock no access of database with id {} and user id {}", databaseId, userId); when(accessService.find(database, user)) .thenThrow(AccessNotFoundException.class); - when(viewService.findAll(database, user)) - .thenReturn(List.of(VIEW_1)); } /* test */ final ResponseEntity<List<ViewBriefDto>> response = viewEndpoint.findAll(databaseId, principal); assertEquals(HttpStatus.OK, response.getStatusCode()); assertNotNull(response.getBody()); - if (access == null) { - assertEquals(1, response.getBody().size()); - } else { - assertEquals(2, response.getBody().size()); - } } protected void create_generic(UUID databaseId, Database database, String viewName, Principal principal, UUID userId, User user, DatabaseAccess access) throws MalformedException, DataServiceException, DataServiceConnectionException, NotAllowedException, UserNotFoundException, DatabaseNotFoundException, AccessNotFoundException, SearchServiceException, SearchServiceConnectionException, TableNotFoundException, - ImageNotFoundException, ViewExistsException { + ImageNotFoundException, ViewExistsException, DashboardServiceException, + DashboardServiceConnectionException { final CreateViewDto request = CreateViewDto.builder() .name(viewName) .query(VIEW_1_SUBSET_DTO) @@ -509,7 +497,7 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { protected ResponseEntity<ViewDto> find_generic(UUID databaseId, Database database, Principal principal, UUID userId, User user, DatabaseAccess access) - throws DatabaseNotFoundException, UserNotFoundException, AccessNotFoundException, ViewNotFoundException { + throws DatabaseNotFoundException, UserNotFoundException, AccessNotFoundException, ViewNotFoundException, NotAllowedException { /* mock */ when(databaseService.findById(databaseId)) @@ -544,7 +532,8 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { protected void delete_generic(UUID databaseId, Database database, UUID viewId, View view, Principal principal, UUID userId, User user, DatabaseAccess access) throws NotAllowedException, DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, AccessNotFoundException, - SearchServiceException, SearchServiceConnectionException, ViewNotFoundException, UserNotFoundException { + SearchServiceException, SearchServiceConnectionException, ViewNotFoundException, UserNotFoundException, + DashboardServiceException, DashboardServiceConnectionException { /* mock */ when(databaseService.findById(databaseId)) @@ -561,6 +550,9 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { doNothing() .when(viewService) .delete(view); + doNothing() + .when(dashboardService) + .update(database); /* test */ final ResponseEntity<?> response = viewEndpoint.delete(databaseId, viewId, principal); @@ -569,7 +561,8 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { protected void update_generic(Principal principal) throws SearchServiceException, NotAllowedException, DatabaseNotFoundException, SearchServiceConnectionException, DataServiceConnectionException, - ViewNotFoundException, UserNotFoundException { + ViewNotFoundException, UserNotFoundException, DashboardServiceException, + DashboardServiceConnectionException { final ViewUpdateDto request = ViewUpdateDto.builder() .isPublic(true) .isSchemaPublic(true) @@ -580,7 +573,7 @@ public class ViewEndpointUnitTest extends AbstractUnitTest { .thenReturn(DATABASE_1); when(viewService.findById(DATABASE_1, VIEW_1_ID)) .thenReturn(VIEW_1); - when(viewService.update(DATABASE_1, VIEW_1, request)) + when(viewService.update(VIEW_1, request)) .thenReturn(VIEW_1); /* test */ diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/entities/EntitiesUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/entity/EntitiesUnitTest.java similarity index 64% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/entities/EntitiesUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/entity/EntitiesUnitTest.java index 4fdb83bcd7..32f5b79f66 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/entities/EntitiesUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/entity/EntitiesUnitTest.java @@ -1,6 +1,6 @@ -package at.tuwien.entities; +package at.ac.tuwien.ifs.dbrepo.core.entity; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; @@ -9,7 +9,7 @@ import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; @Log4j2 -public class EntitiesUnitTest extends AbstractUnitTest { +public class EntitiesUnitTest extends BaseTest { @Test public void uuidVersion_succeeds() { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/BrokerServiceGatewayUnitTest.java similarity index 94% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/BrokerServiceGatewayUnitTest.java index 32a8c8b190..e8d2b01923 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/BrokerServiceGatewayUnitTest.java @@ -1,8 +1,9 @@ -package at.tuwien.gateway; +package at.ac.tuwien.ifs.dbrepo.gateway; -import at.tuwien.api.amqp.GrantExchangePermissionsDto; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.amqp.GrantExchangePermissionsDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.BrokerServiceConnectionException; +import at.ac.tuwien.ifs.dbrepo.core.exception.BrokerServiceException; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -25,7 +26,7 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class BrokerServiceGatewayUnitTest extends AbstractUnitTest { +public class BrokerServiceGatewayUnitTest extends BaseTest { @MockBean @Qualifier("brokerRestTemplate") @@ -36,8 +37,8 @@ public class BrokerServiceGatewayUnitTest extends AbstractUnitTest { private final GrantExchangePermissionsDto WRITE_ALL_PERMISSIONS = GrantExchangePermissionsDto.builder() .exchange("dbrepo") - .read("^(dbrepo\\.1\\..*)$") /* WRITE_ALL */ - .write("^(dbrepo\\.1\\..*)$") + .read("^(dbrepo\\." + DATABASE_1_ID + "\\..*)$") /* WRITE_ALL */ + .write("^(dbrepo\\." + DATABASE_1_ID + "\\..*)$") .build(); @Test diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/CrossrefGatewayUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/CrossRefGatewayUnitTest.java similarity index 70% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/CrossrefGatewayUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/CrossRefGatewayUnitTest.java index 881f29ed04..7513622f37 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/CrossrefGatewayUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/CrossRefGatewayUnitTest.java @@ -1,8 +1,8 @@ -package at.tuwien.gateway; +package at.ac.tuwien.ifs.dbrepo.gateway; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.api.crossref.CrossrefDto; -import at.tuwien.exception.DoiNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.api.crossref.CrossRefDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.DoiNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -16,7 +16,6 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.web.client.HttpServerErrorException; -import org.springframework.web.client.ResourceAccessException; import org.springframework.web.client.RestTemplate; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -25,24 +24,25 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class CrossrefGatewayUnitTest extends AbstractUnitTest { +public class CrossRefGatewayUnitTest extends BaseTest { @MockBean + @Qualifier("crossRefServiceRestTemplate") private RestTemplate restTemplate; @Autowired - private CrossrefGateway crossrefGateway; + private CrossRefGateway crossRefGateway; @Test public void findById_succeeds() throws DoiNotFoundException { /* mock */ - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(CrossrefDto.class))) + when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(CrossRefDto.class))) .thenReturn(ResponseEntity.status(HttpStatus.OK) .build()); /* test */ - crossrefGateway.findById("501100004729"); + crossRefGateway.findById("501100004729"); } @Test @@ -51,11 +51,11 @@ public class CrossrefGatewayUnitTest extends AbstractUnitTest { /* mock */ doThrow(HttpServerErrorException.class) .when(restTemplate) - .exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(CrossrefDto.class)); + .exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(CrossRefDto.class)); /* test */ assertThrows(DoiNotFoundException.class, () -> { - crossrefGateway.findById("501100004729"); + crossRefGateway.findById("501100004729"); }); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/DashboardServiceGatewayUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/DashboardServiceGatewayUnitTest.java new file mode 100644 index 0000000000..c1a60d0115 --- /dev/null +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/DashboardServiceGatewayUnitTest.java @@ -0,0 +1,286 @@ +package at.ac.tuwien.ifs.dbrepo.gateway; + +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.CreateDashboardResponseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.PermissionTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.DashboardServiceConnectionException; +import at.ac.tuwien.ifs.dbrepo.core.exception.DashboardServiceException; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import lombok.extern.log4j.Log4j2; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.HttpServerErrorException; +import org.springframework.web.client.RestTemplate; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.when; + +@Log4j2 +@SpringBootTest +@ExtendWith(SpringExtension.class) +public class DashboardServiceGatewayUnitTest extends BaseTest { + + @MockBean + @Qualifier("dashboardServiceRestTemplate") + private RestTemplate restTemplate; + + @Autowired + private DashboardServiceGateway dashboardServiceGateway; + + @Test + public void update_succeeds() throws DashboardServiceException, DashboardServiceConnectionException { + + /* mock */ + when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + .thenReturn(ResponseEntity.status(HttpStatus.ACCEPTED) + .build()); + + /* test */ + dashboardServiceGateway.update(DATABASE_2_DTO); + } + + @Test + public void update_wrongStatus_failed() { + + /* mock */ + when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + .thenReturn(ResponseEntity.status(HttpStatus.OK) + .build()); + + /* test */ + assertThrows(DashboardServiceException.class, () -> { + dashboardServiceGateway.update(DATABASE_1_DTO); + }); + } + + @Test + public void update_connection_failed() { + + /* mock */ + doThrow(HttpServerErrorException.ServiceUnavailable.class) + .when(restTemplate) + .exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class)); + + /* test */ + assertThrows(DashboardServiceConnectionException.class, () -> { + dashboardServiceGateway.update(DATABASE_1_DTO); + }); + } + + @Test + public void update_unauthorized_failed() { + + /* mock */ + doThrow(HttpClientErrorException.Unauthorized.class) + .when(restTemplate) + .exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class)); + + /* test */ + assertThrows(DashboardServiceException.class, () -> { + dashboardServiceGateway.update(DATABASE_1_DTO); + }); + } + + @Test + public void create_succeeds() throws DashboardServiceException, DashboardServiceConnectionException { + + /* mock */ + when(restTemplate.exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(CreateDashboardResponseDto.class))) + .thenReturn(ResponseEntity.status(HttpStatus.CREATED) + .body(DATABASE_2_CREATE_DASHBOARD_RESPONSE_DTO)); + + /* test */ + final CreateDashboardResponseDto response = dashboardServiceGateway.create(DATABASE_2_CREATE_DASHBOARD_DTO); + assertEquals(DATABASE_2_DASHBOARD_UID, response.getUid()); + } + + @Test + public void create_emptyBody_fails() { + + /* mock */ + when(restTemplate.exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(CreateDashboardResponseDto.class))) + .thenReturn(ResponseEntity.status(HttpStatus.CREATED) + .body(null)); // <<< + + /* test */ + assertThrows(DashboardServiceException.class, () -> { + dashboardServiceGateway.create(DATABASE_2_CREATE_DASHBOARD_DTO); + }); + } + + @Test + public void create_wrongStatus_failed() { + + /* mock */ + when(restTemplate.exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(CreateDashboardResponseDto.class))) + .thenReturn(ResponseEntity.status(HttpStatus.OK) + .build()); + + /* test */ + assertThrows(DashboardServiceException.class, () -> { + dashboardServiceGateway.create(DATABASE_2_CREATE_DASHBOARD_DTO); + }); + } + + @Test + public void create_connection_failed() { + + /* mock */ + doThrow(HttpServerErrorException.ServiceUnavailable.class) + .when(restTemplate) + .exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(CreateDashboardResponseDto.class)); + + /* test */ + assertThrows(DashboardServiceConnectionException.class, () -> { + dashboardServiceGateway.create(DATABASE_2_CREATE_DASHBOARD_DTO); + }); + } + + @Test + public void create_unauthorized_failed() { + + /* mock */ + doThrow(HttpClientErrorException.Unauthorized.class) + .when(restTemplate) + .exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(CreateDashboardResponseDto.class)); + + /* test */ + assertThrows(DashboardServiceException.class, () -> { + dashboardServiceGateway.create(DATABASE_2_CREATE_DASHBOARD_DTO); + }); + } + + @Test + public void create_exists_failed() { + + /* mock */ + doThrow(HttpClientErrorException.Conflict.class) + .when(restTemplate) + .exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(CreateDashboardResponseDto.class)); + + /* test */ + assertThrows(DashboardServiceException.class, () -> { + dashboardServiceGateway.create(DATABASE_2_CREATE_DASHBOARD_DTO); + }); + } + + @Test + public void updateAccess_succeeds() throws DashboardServiceException, DashboardServiceConnectionException { + + /* mock */ + when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + .thenReturn(ResponseEntity.status(HttpStatus.ACCEPTED) + .build()); + + /* test */ + dashboardServiceGateway.updateAccess(DATABASE_2_DASHBOARD_UID, USER_2_USERNAME, PermissionTypeDto.VIEW); + } + + @Test + public void updateAccess_wrongStatus_failed() { + + /* mock */ + when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + .thenReturn(ResponseEntity.status(HttpStatus.OK) + .build()); + + /* test */ + assertThrows(DashboardServiceException.class, () -> { + dashboardServiceGateway.updateAccess(DATABASE_2_DASHBOARD_UID, USER_2_USERNAME, PermissionTypeDto.VIEW); + }); + } + + @Test + public void updateAccess_connection_failed() { + + /* mock */ + doThrow(HttpServerErrorException.ServiceUnavailable.class) + .when(restTemplate) + .exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class)); + + /* test */ + assertThrows(DashboardServiceConnectionException.class, () -> { + dashboardServiceGateway.updateAccess(DATABASE_2_DASHBOARD_UID, USER_2_USERNAME, PermissionTypeDto.VIEW); + }); + } + + @Test + public void updateAccess_unauthorized_failed() { + + /* mock */ + doThrow(HttpClientErrorException.Unauthorized.class) + .when(restTemplate) + .exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class)); + + /* test */ + assertThrows(DashboardServiceException.class, () -> { + dashboardServiceGateway.updateAccess(DATABASE_2_DASHBOARD_UID, USER_2_USERNAME, PermissionTypeDto.VIEW); + }); + } + + @Test + public void updateAnonymousAccess_succeeds() throws DashboardServiceException, DashboardServiceConnectionException { + + /* mock */ + when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + .thenReturn(ResponseEntity.status(HttpStatus.ACCEPTED) + .build()); + + /* test */ + dashboardServiceGateway.updateAnonymousAccess(DATABASE_2_DASHBOARD_UID, DATABASE_2_BRIEF_DTO); + } + + @Test + public void updateAnonymousAccess_wrongStatus_failed() { + + /* mock */ + when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + .thenReturn(ResponseEntity.status(HttpStatus.OK) + .build()); + + /* test */ + assertThrows(DashboardServiceException.class, () -> { + dashboardServiceGateway.updateAnonymousAccess(DATABASE_2_DASHBOARD_UID, DATABASE_2_BRIEF_DTO); + }); + } + + @Test + public void updateAnonymousAccess_connection_failed() { + + /* mock */ + doThrow(HttpServerErrorException.ServiceUnavailable.class) + .when(restTemplate) + .exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class)); + + /* test */ + assertThrows(DashboardServiceConnectionException.class, () -> { + dashboardServiceGateway.updateAnonymousAccess(DATABASE_2_DASHBOARD_UID, DATABASE_2_BRIEF_DTO); + }); + } + + @Test + public void updateAnonymousAccess_unauthorized_failed() { + + /* mock */ + doThrow(HttpClientErrorException.Unauthorized.class) + .when(restTemplate) + .exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class)); + + /* test */ + assertThrows(DashboardServiceException.class, () -> { + dashboardServiceGateway.updateAnonymousAccess(DATABASE_2_DASHBOARD_UID, DATABASE_2_BRIEF_DTO); + }); + } +} \ No newline at end of file diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/DataServiceGatewayUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/DataServiceGatewayUnitTest.java similarity index 97% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/DataServiceGatewayUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/DataServiceGatewayUnitTest.java index af1ecc9f1c..14df28608a 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/DataServiceGatewayUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/DataServiceGatewayUnitTest.java @@ -1,13 +1,13 @@ -package at.tuwien.gateway; - -import at.tuwien.api.database.AccessTypeDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.query.QueryDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.TableStatisticDto; -import at.tuwien.exception.*; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.gateway; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.AccessTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.QueryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableStatisticDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -32,7 +32,7 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class DataServiceGatewayUnitTest extends AbstractUnitTest { +public class DataServiceGatewayUnitTest extends BaseTest { @MockBean @Qualifier("dataServiceRestTemplate") @@ -1045,20 +1045,6 @@ public class DataServiceGatewayUnitTest extends AbstractUnitTest { }); } - @Test - public void getTableStatistics_emptyBody_fails() { - - /* mock */ - when(dataServiceRestTemplate.exchange(anyString(), eq(HttpMethod.GET), eq(HttpEntity.EMPTY), eq(TableStatisticDto.class))) - .thenReturn(ResponseEntity.status(HttpStatus.OK) - .build()); - - /* test */ - assertThrows(DataServiceException.class, () -> { - dataServiceGateway.getTableStatistics(DATABASE_3_ID, TABLE_8_ID); - }); - } - @Test public void updateTable_succeeds() throws DataServiceException, DataServiceConnectionException, DatabaseNotFoundException { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/KeycloakGatewayIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/KeycloakGatewayIntegrationTest.java similarity index 87% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/KeycloakGatewayIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/KeycloakGatewayIntegrationTest.java index 583fa4c440..40d8eab970 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/KeycloakGatewayIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/KeycloakGatewayIntegrationTest.java @@ -1,10 +1,10 @@ -package at.tuwien.gateway; +package at.ac.tuwien.ifs.dbrepo.gateway; -import at.tuwien.exception.AuthServiceException; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.gateway.impl.KeycloakGatewayImpl; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.utils.KeycloakUtils; +import at.ac.tuwien.ifs.dbrepo.core.exception.AuthServiceException; +import at.ac.tuwien.ifs.dbrepo.core.exception.UserNotFoundException; +import at.ac.tuwien.ifs.dbrepo.gateway.impl.KeycloakGatewayImpl; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.utils.KeycloakUtils; import dasniko.testcontainers.keycloak.KeycloakContainer; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; @@ -20,15 +20,13 @@ import org.testcontainers.images.PullPolicy; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; -import java.util.UUID; - import static org.junit.jupiter.api.Assertions.*; @Log4j2 @SpringBootTest @Testcontainers @ExtendWith(SpringExtension.class) -public class KeycloakGatewayIntegrationTest extends AbstractUnitTest { +public class KeycloakGatewayIntegrationTest extends BaseTest { @Autowired private KeycloakGatewayImpl keycloakGateway; @@ -38,13 +36,12 @@ public class KeycloakGatewayIntegrationTest extends AbstractUnitTest { @BeforeEach public void beforeEach() { - genesis(); /* auth service */ keycloakUtils.deleteUser(USER_1_USERNAME); } @Container - private static KeycloakContainer keycloakContainer = new KeycloakContainer(KEYCLOAK_IMAGE) + private static final KeycloakContainer keycloakContainer = new KeycloakContainer(KEYCLOAK_IMAGE) .withImagePullPolicy(PullPolicy.alwaysPull()) .withAdminUsername("admin") .withAdminPassword("admin") diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/OrcidGatewayUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/OrcidGatewayUnitTest.java similarity index 82% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/OrcidGatewayUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/OrcidGatewayUnitTest.java index bcd27107bc..31d8baeab5 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/OrcidGatewayUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/OrcidGatewayUnitTest.java @@ -1,13 +1,12 @@ -package at.tuwien.gateway; +package at.ac.tuwien.ifs.dbrepo.gateway; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.api.orcid.OrcidDto; -import at.tuwien.exception.OrcidNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.OrcidDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.OrcidNotFoundException; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.HttpEntity; @@ -16,16 +15,17 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.web.client.HttpServerErrorException; -import org.springframework.web.client.ResourceAccessException; import org.springframework.web.client.RestTemplate; +import java.io.IOException; + import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class OrcidGatewayUnitTest extends AbstractUnitTest { +public class OrcidGatewayUnitTest extends BaseTest { @MockBean private RestTemplate restTemplate; @@ -33,6 +33,9 @@ public class OrcidGatewayUnitTest extends AbstractUnitTest { @Autowired private OrcidGateway orcidGateway; + public OrcidGatewayUnitTest() throws IOException { + } + @Test public void findByUrl_succeeds() throws OrcidNotFoundException { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/RorGatewayUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/RorGatewayUnitTest.java similarity index 77% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/RorGatewayUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/RorGatewayUnitTest.java index ff9d4f741c..b8b100c413 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/RorGatewayUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/RorGatewayUnitTest.java @@ -1,15 +1,18 @@ -package at.tuwien.gateway; +package at.ac.tuwien.ifs.dbrepo.gateway; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.api.ror.RorDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.ror.RorDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.RorNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.*; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.web.client.HttpServerErrorException; import org.springframework.web.client.RestTemplate; @@ -20,7 +23,7 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class RorGatewayUnitTest extends AbstractUnitTest { +public class RorGatewayUnitTest extends BaseTest { @MockBean private RestTemplate restTemplate; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/SearchServiceGatewayUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/SearchServiceGatewayUnitTest.java similarity index 93% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/SearchServiceGatewayUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/SearchServiceGatewayUnitTest.java index b39dd06bac..3ff4a3a508 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/SearchServiceGatewayUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/SearchServiceGatewayUnitTest.java @@ -1,8 +1,10 @@ -package at.tuwien.gateway; +package at.ac.tuwien.ifs.dbrepo.gateway; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.api.database.DatabaseBriefDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.DatabaseNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.SearchServiceConnectionException; +import at.ac.tuwien.ifs.dbrepo.core.exception.SearchServiceException; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -25,7 +27,7 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class SearchServiceGatewayUnitTest extends AbstractUnitTest { +public class SearchServiceGatewayUnitTest extends BaseTest { @MockBean @Qualifier("searchServiceRestTemplate") diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/handlers/ApiExceptionHandlerTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/handlers/ApiExceptionHandlerTest.java similarity index 95% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/handlers/ApiExceptionHandlerTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/handlers/ApiExceptionHandlerTest.java index 87d7d0185a..7ab54f089c 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/handlers/ApiExceptionHandlerTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/handlers/ApiExceptionHandlerTest.java @@ -1,8 +1,8 @@ -package at.tuwien.handlers; +package at.ac.tuwien.ifs.dbrepo.handlers; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.exception.*; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import com.auth0.jwt.exceptions.TokenExpiredException; import jakarta.ws.rs.NotAuthorizedException; import lombok.extern.log4j.Log4j2; @@ -23,14 +23,14 @@ import java.util.Arrays; import java.util.List; import java.util.Optional; -import static at.tuwien.test.utils.EndpointUtils.getErrorCodes; -import static at.tuwien.test.utils.EndpointUtils.getExceptions; +import static at.ac.tuwien.ifs.dbrepo.core.test.utils.EndpointUtils.getErrorCodes; +import static at.ac.tuwien.ifs.dbrepo.core.test.utils.EndpointUtils.getExceptions; import static org.junit.jupiter.api.Assertions.*; @Log4j2 @ExtendWith(SpringExtension.class) @SpringBootTest -public class ApiExceptionHandlerTest extends AbstractUnitTest { +public class ApiExceptionHandlerTest extends BaseTest { @Autowired private ApiExceptionHandler apiExceptionHandler; @@ -49,7 +49,7 @@ public class ApiExceptionHandlerTest extends AbstractUnitTest { final Method method = optional.get(); /* exception */ Assertions.assertNotNull(exception.getDeclaredAnnotation(ResponseStatus.class).code()); - Assertions.assertNotEquals(exception.getDeclaredAnnotation(ResponseStatus.class).code(), HttpStatus.INTERNAL_SERVER_ERROR); + Assertions.assertNotEquals(HttpStatus.INTERNAL_SERVER_ERROR, exception.getDeclaredAnnotation(ResponseStatus.class).code()); Assertions.assertNotNull(exception.getDeclaredAnnotation(ResponseStatus.class).reason(), "Exception " + exception.getName() + " does not provide a reason code"); assertTrue(errorCodes.contains(exception.getDeclaredAnnotation(ResponseStatus.class).reason()), "Exception code " + exception.getDeclaredAnnotation(ResponseStatus.class).reason() + " does have a reason code mapped in localized ui error messages"); /* handler method */ @@ -239,6 +239,32 @@ public class ApiExceptionHandlerTest extends AbstractUnitTest { assertEquals("error.user.credentials", body.getCode()); } + @Test + public void handle_dashboardServiceConnectionException_succeeds() { + + /* test */ + final ResponseEntity<ApiErrorDto> response = apiExceptionHandler.handle(new DashboardServiceConnectionException("msg")); + assertEquals(HttpStatus.BAD_GATEWAY, response.getStatusCode()); + final ApiErrorDto body = response.getBody(); + assertNotNull(body); + assertEquals("msg", body.getMessage()); + assertEquals(HttpStatus.BAD_GATEWAY, body.getStatus()); + assertEquals("error.dashboard.connection", body.getCode()); + } + + @Test + public void handle_dashboardServiceException_succeeds() { + + /* test */ + final ResponseEntity<ApiErrorDto> response = apiExceptionHandler.handle(new DashboardServiceException("msg")); + assertEquals(HttpStatus.SERVICE_UNAVAILABLE, response.getStatusCode()); + final ApiErrorDto body = response.getBody(); + assertNotNull(body); + assertEquals("msg", body.getMessage()); + assertEquals(HttpStatus.SERVICE_UNAVAILABLE, body.getStatus()); + assertEquals("error.dashboard.invalid", body.getCode()); + } + @Test public void handle_dataServiceConnectionException_succeeds() { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/MetadataMapperUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mapper/MetadataMapperUnitTest.java similarity index 91% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/MetadataMapperUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mapper/MetadataMapperUnitTest.java index ac1103d2e5..0b3c5fdf68 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/MetadataMapperUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mapper/MetadataMapperUnitTest.java @@ -1,14 +1,12 @@ -package at.tuwien.mapper; - -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.identifier.IdentifierTypeDto; -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.entities.database.View; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.entities.identifier.IdentifierType; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.mapper; + +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.Identifier; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.IdentifierType; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -26,7 +24,7 @@ import static org.junit.jupiter.api.Assertions.*; @Log4j2 @SpringBootTest -public class MetadataMapperUnitTest extends AbstractUnitTest { +public class MetadataMapperUnitTest extends BaseTest { private final DateTimeFormatter mariaDbFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss[.SSS]") .withZone(ZoneId.of("UTC")); @@ -34,11 +32,6 @@ public class MetadataMapperUnitTest extends AbstractUnitTest { @Autowired private MetadataMapper metadataMapper; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void mapMariaDbInstant_succeeds() { final String timestamp = "2023-01-08 08:49:29"; @@ -72,7 +65,7 @@ public class MetadataMapperUnitTest extends AbstractUnitTest { public void identifierCreateDtoToIdentifier_withDoi_succeeds() { /* test */ - final Identifier response = metadataMapper.identifierCreateDtoToIdentifier(IDENTIFIER_1_CREATE_WITH_DOI_DTO); + final Identifier response = metadataMapper.createIdentifierDtoToIdentifier(IDENTIFIER_1_CREATE_WITH_DOI_DTO); assertNull(response.getDatabase()); assertNull(response.getViewId()); assertNull(response.getQueryId()); @@ -85,7 +78,7 @@ public class MetadataMapperUnitTest extends AbstractUnitTest { public void identifierCreateDtoToIdentifier_subset_succeeds() { /* test */ - final Identifier response = metadataMapper.identifierCreateDtoToIdentifier(IDENTIFIER_2_CREATE_DTO); + final Identifier response = metadataMapper.createIdentifierDtoToIdentifier(IDENTIFIER_2_CREATE_DTO); assertNull(response.getDatabase()); assertNull(response.getViewId()); assertNull(response.getTableId()); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/ActuatorEndpointMvcTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/ActuatorEndpointMvcTest.java similarity index 90% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/ActuatorEndpointMvcTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/ActuatorEndpointMvcTest.java index a7a83a6184..7d8c74437a 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/ActuatorEndpointMvcTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/ActuatorEndpointMvcTest.java @@ -1,6 +1,6 @@ -package at.tuwien.mvc; +package at.ac.tuwien.ifs.dbrepo.mvc; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -20,7 +20,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @AutoConfigureMockMvc @SpringBootTest @AutoConfigureObservability -public class ActuatorEndpointMvcTest extends AbstractUnitTest { +public class ActuatorEndpointMvcTest extends BaseTest { @Autowired private MockMvc mockMvc; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/AuthenticationPrivilegedIntegrationMvcTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/AuthenticationPrivilegedIntegrationMvcTest.java similarity index 87% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/AuthenticationPrivilegedIntegrationMvcTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/AuthenticationPrivilegedIntegrationMvcTest.java index e6535ccf19..9a6354453b 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/AuthenticationPrivilegedIntegrationMvcTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/AuthenticationPrivilegedIntegrationMvcTest.java @@ -1,16 +1,16 @@ -package at.tuwien.mvc; - -import at.tuwien.api.keycloak.TokenDto; -import at.tuwien.exception.AuthServiceConnectionException; -import at.tuwien.exception.AuthServiceException; -import at.tuwien.exception.CredentialsInvalidException; -import at.tuwien.gateway.KeycloakGateway; -import at.tuwien.repository.ContainerRepository; -import at.tuwien.repository.DatabaseRepository; -import at.tuwien.repository.LicenseRepository; -import at.tuwien.repository.UserRepository; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.utils.KeycloakUtils; +package at.ac.tuwien.ifs.dbrepo.mvc; + +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.AuthServiceConnectionException; +import at.ac.tuwien.ifs.dbrepo.core.exception.AuthServiceException; +import at.ac.tuwien.ifs.dbrepo.core.exception.CredentialsInvalidException; +import at.ac.tuwien.ifs.dbrepo.gateway.KeycloakGateway; +import at.ac.tuwien.ifs.dbrepo.repository.ContainerRepository; +import at.ac.tuwien.ifs.dbrepo.repository.DatabaseRepository; +import at.ac.tuwien.ifs.dbrepo.repository.LicenseRepository; +import at.ac.tuwien.ifs.dbrepo.repository.UserRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.utils.KeycloakUtils; import dasniko.testcontainers.keycloak.KeycloakContainer; import jakarta.transaction.Transactional; import lombok.extern.log4j.Log4j2; @@ -41,7 +41,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @AutoConfigureMockMvc @Testcontainers @SpringBootTest -public class AuthenticationPrivilegedIntegrationMvcTest extends AbstractUnitTest { +public class AuthenticationPrivilegedIntegrationMvcTest extends BaseTest { @Autowired private MockMvc mockMvc; @@ -65,7 +65,7 @@ public class AuthenticationPrivilegedIntegrationMvcTest extends AbstractUnitTest private KeycloakGateway keycloakGateway; @Container - private static KeycloakContainer keycloakContainer = new KeycloakContainer(KEYCLOAK_IMAGE) + private static final KeycloakContainer keycloakContainer = new KeycloakContainer(KEYCLOAK_IMAGE) .withImagePullPolicy(PullPolicy.alwaysPull()) .withAdminUsername("admin") .withAdminPassword("admin") @@ -79,7 +79,6 @@ public class AuthenticationPrivilegedIntegrationMvcTest extends AbstractUnitTest @BeforeEach public void beforeEach() throws AuthServiceException, AuthServiceConnectionException, CredentialsInvalidException { - genesis(); /* metadata database */ licenseRepository.save(LICENSE_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4, USER_LOCAL)); @@ -115,7 +114,7 @@ public class AuthenticationPrivilegedIntegrationMvcTest extends AbstractUnitTest .andExpect(header().string("X-Port", "" + CONTAINER_1_PORT)) .andExpect(header().string("X-Username", CONTAINER_1_PRIVILEGED_USERNAME)) .andExpect(header().string("X-Password", CONTAINER_1_PRIVILEGED_PASSWORD)) - .andExpect(header().string("X-Jdbc-Method", IMAGE_1_JDBC)) + .andExpect(header().string("X-Jdbc-Method", IMAGE_1_JDBC_METHOD)) .andExpect(header().string("Access-Control-Expose-Headers", "X-Username X-Password X-Jdbc-Method X-Host X-Port")) .andExpect(status().isOk()); } @@ -134,7 +133,7 @@ public class AuthenticationPrivilegedIntegrationMvcTest extends AbstractUnitTest .andExpect(header().string("X-Port", "" + CONTAINER_1_PORT)) .andExpect(header().string("X-Username", CONTAINER_1_PRIVILEGED_USERNAME)) .andExpect(header().string("X-Password", CONTAINER_1_PRIVILEGED_PASSWORD)) - .andExpect(header().string("X-Jdbc-Method", IMAGE_1_JDBC)) + .andExpect(header().string("X-Jdbc-Method", IMAGE_1_JDBC_METHOD)) .andExpect(header().string("Access-Control-Expose-Headers", "X-Username X-Password X-Jdbc-Method X-Host X-Port")) .andExpect(status().isOk()); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/IdentifierEndpointMvcTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/IdentifierEndpointMvcTest.java similarity index 86% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/IdentifierEndpointMvcTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/IdentifierEndpointMvcTest.java index 2594eb70b1..b0cdca73e2 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/IdentifierEndpointMvcTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/IdentifierEndpointMvcTest.java @@ -1,7 +1,7 @@ -package at.tuwien.mvc; +package at.ac.tuwien.ifs.dbrepo.mvc; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.gateway.OrcidGateway; +import at.ac.tuwien.ifs.dbrepo.gateway.OrcidGateway; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import com.mchange.io.FileUtils; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; @@ -16,7 +16,8 @@ import org.springframework.test.web.servlet.MockMvc; import java.io.File; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; @@ -26,7 +27,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @ExtendWith(SpringExtension.class) @AutoConfigureMockMvc @SpringBootTest -public class IdentifierEndpointMvcTest extends AbstractUnitTest { +public class IdentifierEndpointMvcTest extends BaseTest { @MockBean private OrcidGateway orcidGateway; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/MetadataEndpointMvcTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/MetadataEndpointMvcTest.java similarity index 93% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/MetadataEndpointMvcTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/MetadataEndpointMvcTest.java index 7f9ba9743d..870251323e 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/MetadataEndpointMvcTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/MetadataEndpointMvcTest.java @@ -1,10 +1,9 @@ -package at.tuwien.mvc; +package at.ac.tuwien.ifs.dbrepo.mvc; -import at.tuwien.repository.IdentifierRepository; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.config.MetadataConfig; +import at.ac.tuwien.ifs.dbrepo.config.MetadataConfig; +import at.ac.tuwien.ifs.dbrepo.repository.IdentifierRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -28,7 +27,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @AutoConfigureMockMvc @SpringBootTest -public class MetadataEndpointMvcTest extends AbstractUnitTest { +public class MetadataEndpointMvcTest extends BaseTest { @MockBean private IdentifierRepository identifierRepository; @@ -39,11 +38,6 @@ public class MetadataEndpointMvcTest extends AbstractUnitTest { @Autowired private MockMvc mockMvc; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void identify_succeeds() throws Exception { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/OpenApiEndpointMvcTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/OpenApiEndpointMvcTest.java similarity index 91% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/OpenApiEndpointMvcTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/OpenApiEndpointMvcTest.java index d685ca65cd..0d37944ba9 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/OpenApiEndpointMvcTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/OpenApiEndpointMvcTest.java @@ -1,8 +1,8 @@ -package at.tuwien.mvc; +package at.ac.tuwien.ifs.dbrepo.mvc; -import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.endpoints.*; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.core.api.error.ApiErrorDto; +import at.ac.tuwien.ifs.dbrepo.endpoints.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.responses.ApiResponse; @@ -30,7 +30,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @ExtendWith(SpringExtension.class) @AutoConfigureMockMvc @SpringBootTest -public class OpenApiEndpointMvcTest extends AbstractUnitTest { +public class OpenApiEndpointMvcTest extends BaseTest { @Autowired private MockMvc mockMvc; @@ -113,6 +113,7 @@ public class OpenApiEndpointMvcTest extends AbstractUnitTest { } private void generic_openApiDocs(Class<?> endpoint) { + final String packageScope = "at.ac.tuwien.ifs.dbrepo"; final List<Method> methods = Arrays.stream(endpoint.getMethods()) .filter(m -> m.getDeclaringClass().equals(endpoint)) .toList(); @@ -120,9 +121,9 @@ public class OpenApiEndpointMvcTest extends AbstractUnitTest { final List<Class<?>> exceptions = Arrays.stream(m.getExceptionTypes()) .toList(); final List<Class<?>> invalidExceptions = exceptions.stream() - .filter(e -> !e.getName().startsWith("at.tuwien.")) + .filter(e -> !e.getName().startsWith(packageScope)) .toList(); - assertTrue(invalidExceptions.isEmpty(), "method '" + m.getName() + "' throws exception(s) outside package scope at.tuwien: " + invalidExceptions.stream().map(Class::getName).toList()); + assertTrue(invalidExceptions.isEmpty(), "method '" + m.getName() + "' throws exception(s) outside package scope " + packageScope + ": " + invalidExceptions.stream().map(Class::getName).toList()); exceptions.forEach(exception -> { assertNotNull(m.getDeclaredAnnotation(Operation.class).summary()); final int status = exception.getAnnotation(ResponseStatus.class) diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/PrometheusEndpointMvcTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/PrometheusEndpointMvcTest.java similarity index 94% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/PrometheusEndpointMvcTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/PrometheusEndpointMvcTest.java index 2adc2f0647..f3a15c7f3f 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/PrometheusEndpointMvcTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/PrometheusEndpointMvcTest.java @@ -1,14 +1,15 @@ -package at.tuwien.mvc; - -import at.tuwien.api.container.CreateContainerDto; -import at.tuwien.api.database.DatabaseModifyImageDto; -import at.tuwien.api.database.DatabaseModifyVisibilityDto; -import at.tuwien.api.database.DatabaseTransferDto; -import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; -import at.tuwien.api.identifier.IdentifierTypeDto; -import at.tuwien.config.MetricsConfig; -import at.tuwien.endpoints.*; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.mvc; + +import at.ac.tuwien.ifs.dbrepo.core.api.container.CreateContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseModifyImageDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseModifyVisibilityDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseTransferDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierTypeDto; +import at.ac.tuwien.ifs.dbrepo.config.MetricsConfig; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.endpoints.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import io.micrometer.observation.tck.TestObservationRegistry; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; @@ -38,7 +39,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @SpringBootTest @Import(MetricsConfig.class) @AutoConfigureObservability -public class PrometheusEndpointMvcTest extends AbstractUnitTest { +public class PrometheusEndpointMvcTest extends BaseTest { @Autowired private MockMvc mockMvc; @@ -150,7 +151,7 @@ public class PrometheusEndpointMvcTest extends AbstractUnitTest { /* ignore */ } try { - containerEndpoint.create(CreateContainerDto.builder().name(CONTAINER_1_NAME).imageId(IMAGE_1_ID).build()); + containerEndpoint.create(CreateContainerDto.builder().name(CONTAINER_1_NAME).imageId(CONTAINER_1_ID).build()); } catch (Exception e) { /* ignore */ } @@ -281,17 +282,17 @@ public class PrometheusEndpointMvcTest extends AbstractUnitTest { /* ignore */ } try { - imageEndpoint.findById(IMAGE_1_ID); + imageEndpoint.findById(CONTAINER_1_ID); } catch (Exception e) { /* ignore */ } try { - imageEndpoint.update(IMAGE_1_ID, IMAGE_1_CHANGE_DTO); + imageEndpoint.update(CONTAINER_1_ID, IMAGE_1_CHANGE_DTO); } catch (Exception e) { /* ignore */ } try { - imageEndpoint.delete(IMAGE_1_ID); + imageEndpoint.delete(CONTAINER_1_ID); } catch (Exception e) { /* ignore */ } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/AccessServiceUnitTest.java similarity index 94% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/AccessServiceUnitTest.java index 1c96e6283d..17a7cb32f8 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/AccessServiceUnitTest.java @@ -1,15 +1,14 @@ -package at.tuwien.service; - -import at.tuwien.exception.*; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.api.database.AccessTypeDto; -import at.tuwien.api.database.DatabaseBriefDto; -import at.tuwien.entities.database.AccessType; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.repository.DatabaseRepository; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.AccessTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.AccessType; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.DatabaseAccess; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.repository.DatabaseRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -34,7 +33,7 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class AccessServiceUnitTest extends AbstractUnitTest { +public class AccessServiceUnitTest extends BaseTest { @MockBean private DatabaseRepository databaseRepository; @@ -50,11 +49,6 @@ public class AccessServiceUnitTest extends AbstractUnitTest { @Autowired private AccessService accessService; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void list_succeeds() { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AuthenticationServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/AuthenticationServiceIntegrationTest.java similarity index 80% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AuthenticationServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/AuthenticationServiceIntegrationTest.java index d655a25cf1..016e0f949b 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AuthenticationServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/AuthenticationServiceIntegrationTest.java @@ -1,13 +1,12 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.gateway.KeycloakGateway; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.utils.KeycloakUtils; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.gateway.KeycloakGateway; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.utils.KeycloakUtils; import dasniko.testcontainers.keycloak.KeycloakContainer; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -27,7 +26,7 @@ import java.util.UUID; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest @ExtendWith(SpringExtension.class) -public class AuthenticationServiceIntegrationTest extends AbstractUnitTest { +public class AuthenticationServiceIntegrationTest extends BaseTest { @Autowired private AuthenticationService authenticationService; @@ -38,13 +37,8 @@ public class AuthenticationServiceIntegrationTest extends AbstractUnitTest { @Autowired private KeycloakUtils keycloakUtils; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Container - private static KeycloakContainer keycloakContainer = new KeycloakContainer(KEYCLOAK_IMAGE) + private static final KeycloakContainer keycloakContainer = new KeycloakContainer(KEYCLOAK_IMAGE) .withImagePullPolicy(PullPolicy.alwaysPull()) .withAdminUsername("admin") .withAdminPassword("admin") diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/BrokerServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/BrokerServiceIntegrationTest.java similarity index 88% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/BrokerServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/BrokerServiceIntegrationTest.java index d04409c87b..ada49fbd9a 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/BrokerServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/BrokerServiceIntegrationTest.java @@ -1,18 +1,17 @@ -package at.tuwien.service; - -import at.tuwien.api.amqp.GrantExchangePermissionsDto; -import at.tuwien.api.amqp.GrantVirtualHostPermissionsDto; -import at.tuwien.api.amqp.TopicPermissionDto; -import at.tuwien.api.amqp.VirtualHostPermissionDto; -import at.tuwien.config.RabbitConfig; -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.user.User; -import at.tuwien.exception.BrokerServiceConnectionException; -import at.tuwien.exception.BrokerServiceException; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.utils.AmqpUtils; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.amqp.GrantExchangePermissionsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.amqp.GrantVirtualHostPermissionsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.amqp.TopicPermissionDto; +import at.ac.tuwien.ifs.dbrepo.core.api.amqp.VirtualHostPermissionDto; +import at.ac.tuwien.ifs.dbrepo.config.RabbitConfig; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.DatabaseAccess; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.BrokerServiceConnectionException; +import at.ac.tuwien.ifs.dbrepo.core.exception.BrokerServiceException; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.utils.AmqpUtils; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -36,7 +35,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; @SpringBootTest @ExtendWith(SpringExtension.class) @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -public class BrokerServiceIntegrationTest extends AbstractUnitTest { +public class BrokerServiceIntegrationTest extends BaseTest { @Autowired private RabbitConfig rabbitConfig; @@ -54,11 +53,6 @@ public class BrokerServiceIntegrationTest extends AbstractUnitTest { registry.add("dbrepo.endpoints.brokerService", rabbitContainer::getHttpUrl); } - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void updatePermissions_empty_succeeds() throws BrokerServiceException, BrokerServiceConnectionException { @@ -155,7 +149,7 @@ public class BrokerServiceIntegrationTest extends AbstractUnitTest { BrokerServiceConnectionException { /* test */ - final TopicPermissionDto permissions = setTopicExchangePermissions_generic(List.of(DATABASE_1_USER_1_READ_ACCESS)); + final TopicPermissionDto permissions = setTopicExchangePermissions_generic(List.of(DATABASE_1.getAccesses().get(0))); assertEquals(USER_1_USERNAME, permissions.getUser()); assertEquals(REALM_DBREPO_NAME, permissions.getVhost()); assertEquals(DATABASE_1_EXCHANGE, permissions.getExchange()); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ConceptServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ConceptServiceUnitTest.java similarity index 80% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ConceptServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ConceptServiceUnitTest.java index 164f335eb7..67f14f3ebb 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ConceptServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ConceptServiceUnitTest.java @@ -1,11 +1,10 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.exception.ConceptNotFoundException; -import at.tuwien.repository.ConceptRepository; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.entities.database.table.columns.TableColumnConcept; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumnConcept; +import at.ac.tuwien.ifs.dbrepo.core.exception.ConceptNotFoundException; +import at.ac.tuwien.ifs.dbrepo.repository.ConceptRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -23,7 +22,7 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class ConceptServiceUnitTest extends AbstractUnitTest { +public class ConceptServiceUnitTest extends BaseTest { @MockBean private ConceptRepository conceptRepository; @@ -31,11 +30,6 @@ public class ConceptServiceUnitTest extends AbstractUnitTest { @Autowired private ConceptService conceptService; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void findAll_succeeds() { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ContainerServiceUnitTest.java similarity index 84% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ContainerServiceUnitTest.java index a6fbbf7592..e8e17ea3ae 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ContainerServiceUnitTest.java @@ -1,15 +1,14 @@ -package at.tuwien.service; - -import at.tuwien.api.container.CreateContainerDto; -import at.tuwien.entities.container.Container; -import at.tuwien.exception.ContainerAlreadyExistsException; -import at.tuwien.exception.ContainerNotFoundException; -import at.tuwien.exception.ImageNotFoundException; -import at.tuwien.repository.ContainerRepository; -import at.tuwien.repository.ImageRepository; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.container.CreateContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.Container; +import at.ac.tuwien.ifs.dbrepo.core.exception.ContainerAlreadyExistsException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ContainerNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.repository.ContainerRepository; +import at.ac.tuwien.ifs.dbrepo.repository.ImageRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -32,7 +31,7 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class ContainerServiceUnitTest extends AbstractUnitTest { +public class ContainerServiceUnitTest extends BaseTest { @MockBean private ContainerRepository containerRepository; @@ -43,22 +42,17 @@ public class ContainerServiceUnitTest extends AbstractUnitTest { @Autowired private ContainerService containerService; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void create_succeeds() throws ContainerAlreadyExistsException, ImageNotFoundException { final CreateContainerDto request = CreateContainerDto.builder() - .imageId(IMAGE_1_ID) + .imageId(CONTAINER_1_ID) .name(CONTAINER_1_NAME) .build(); /* mock */ when(containerRepository.findByInternalName(CONTAINER_1_NAME)) .thenReturn(Optional.empty()); - when(imageRepository.findById(IMAGE_1_ID)) + when(imageRepository.findById(CONTAINER_1_ID)) .thenReturn(Optional.of(IMAGE_1)); when(containerRepository.save(any(Container.class))) .thenReturn(CONTAINER_1); @@ -71,12 +65,12 @@ public class ContainerServiceUnitTest extends AbstractUnitTest { @Test public void create_containerExists_fails() { final CreateContainerDto request = CreateContainerDto.builder() - .imageId(IMAGE_1_ID) + .imageId(CONTAINER_1_ID) .name(CONTAINER_1_NAME) .build(); /* mock */ - when(containerRepository.findByInternalName(CONTAINER_1_INTERNALNAME)) + when(containerRepository.findByInternalName(CONTAINER_1_INTERNAL_NAME)) .thenReturn(Optional.of(CONTAINER_1)); /* test */ @@ -95,7 +89,7 @@ public class ContainerServiceUnitTest extends AbstractUnitTest { /* mock */ when(containerRepository.findByInternalName(CONTAINER_1_NAME)) .thenReturn(Optional.empty()); - when(imageRepository.findById(IMAGE_1_ID)) + when(imageRepository.findById(CONTAINER_1_ID)) .thenReturn(Optional.empty()); /* test */ diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/DataCiteIdentifierServicePersistenceTest.java similarity index 89% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServicePersistenceTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/DataCiteIdentifierServicePersistenceTest.java index 260aebe7be..b96bc4bad2 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServicePersistenceTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/DataCiteIdentifierServicePersistenceTest.java @@ -1,20 +1,21 @@ -package at.tuwien.service; - -import at.tuwien.api.datacite.DataCiteBody; -import at.tuwien.api.datacite.doi.DataCiteDoi; -import at.tuwien.api.identifier.BibliographyTypeDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.identifier.Creator; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.entities.identifier.IdentifierStatusType; -import at.tuwien.entities.identifier.NameIdentifierSchemeType; -import at.tuwien.exception.*; -import at.tuwien.gateway.SearchServiceGateway; -import at.tuwien.repository.ContainerRepository; -import at.tuwien.repository.DatabaseRepository; -import at.tuwien.repository.LicenseRepository; -import at.tuwien.repository.UserRepository; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.datacite.DataCiteBody; +import at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi.DataCiteDoi; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.BibliographyTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.Creator; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.Identifier; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.IdentifierStatusType; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.NameIdentifierSchemeType; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.gateway.SearchServiceGateway; +import at.ac.tuwien.ifs.dbrepo.repository.ContainerRepository; +import at.ac.tuwien.ifs.dbrepo.repository.DatabaseRepository; +import at.ac.tuwien.ifs.dbrepo.repository.LicenseRepository; +import at.ac.tuwien.ifs.dbrepo.repository.UserRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -45,8 +46,8 @@ import static org.mockito.Mockito.when; @ExtendWith(SpringExtension.class) @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@SpringBootTest(properties = "spring.profiles.active:local,junit,doi") -public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest { +@SpringBootTest(properties = "spring.profiles.active=local,junit,doi") +public class DataCiteIdentifierServicePersistenceTest extends BaseTest { @MockBean private SearchServiceGateway searchServiceGateway; @@ -75,7 +76,6 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest { @BeforeEach public void beforeEach() { - genesis(); /* metadata database */ licenseRepository.save(LICENSE_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4, USER_5)); @@ -89,7 +89,7 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest { /* test */ final List<Identifier> response = dataCiteIdentifierService.findAll(null, null, null, null, null); assertEquals(7, response.size()); - for (UUID id : List.of(IDENTIFIER_1_ID, IDENTIFIER_2_ID, IDENTIFIER_3_ID, IDENTIFIER_4_ID, IDENTIFIER_5_ID, IDENTIFIER_6_ID, IDENTIFIER_7_ID)) { + for (UUID id : List.of(IDENTIFIER_1_ID, IDENTIFIER_2_ID, IDENTIFIER_3_ID, IDENTIFIER_4_ID, IDENTIFIER_5_ID, IDENTIFIER_6_ID, IDENTIFIER_7.getId())) { assertTrue(response.stream().map(Identifier::getId).toList().contains(id)); } } @@ -202,7 +202,7 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest { @Test public void create_hasDoi_succeeds() throws SearchServiceException, MalformedException, DataServiceException, QueryNotFoundException, DataServiceConnectionException, DatabaseNotFoundException, - SearchServiceConnectionException, IdentifierNotFoundException, ViewNotFoundException, + SearchServiceConnectionException, ViewNotFoundException, ExternalServiceException { final ResponseEntity<DataCiteBody<DataCiteDoi>> mock = ResponseEntity.status(HttpStatus.CREATED) .body(IDENTIFIER_1_DATA_CITE); @@ -228,7 +228,7 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest { /* test */ final Identifier response = dataCiteIdentifierService.publish(IDENTIFIER_7); - assertEquals(IDENTIFIER_7_ID, response.getId()); + assertEquals(IDENTIFIER_7.getId(), response.getId()); assertEquals(IdentifierStatusType.PUBLISHED, response.getStatus()); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/DatabaseServicePersistenceTest.java similarity index 66% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServicePersistenceTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/DatabaseServicePersistenceTest.java index b1886aa835..2bb1d9e89d 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServicePersistenceTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/DatabaseServicePersistenceTest.java @@ -1,13 +1,12 @@ -package at.tuwien.service; - -import at.tuwien.entities.container.Container; -import at.tuwien.entities.database.Database; -import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.repository.ContainerRepository; -import at.tuwien.repository.DatabaseRepository; -import at.tuwien.repository.LicenseRepository; -import at.tuwien.repository.UserRepository; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.exception.DatabaseNotFoundException; +import at.ac.tuwien.ifs.dbrepo.repository.ContainerRepository; +import at.ac.tuwien.ifs.dbrepo.repository.DatabaseRepository; +import at.ac.tuwien.ifs.dbrepo.repository.LicenseRepository; +import at.ac.tuwien.ifs.dbrepo.repository.UserRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -21,13 +20,12 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; @Log4j2 @SpringBootTest @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @ExtendWith(SpringExtension.class) -public class DatabaseServicePersistenceTest extends AbstractUnitTest { +public class DatabaseServicePersistenceTest extends BaseTest { @Autowired private DatabaseService databaseService; @@ -46,7 +44,6 @@ public class DatabaseServicePersistenceTest extends AbstractUnitTest { @BeforeEach public void beforeEach() { - genesis(); /* metadata database */ licenseRepository.save(LICENSE_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4, USER_5)); @@ -68,16 +65,7 @@ public class DatabaseServicePersistenceTest extends AbstractUnitTest { public void findAllPublicOrSchemaPublicByInternalName_privateEmpty_succeeds() { /* test */ - final List<Database> response = databaseService.findAllPublicOrSchemaPublicByInternalName(DATABASE_1_INTERNALNAME); - assertEquals(0, response.size()); - } - - @Test - @Transactional(readOnly = true) - public void findAllAtLestReadAccess_privateNoAccessEmpty_succeeds() { - - /* test */ - final List<Database> response = databaseService.findAllAtLestReadAccess(USER_4_ID); + final List<Database> response = databaseService.findAllPublicOrSchemaPublicByInternalName(DATABASE_1_INTERNAL_NAME); assertEquals(0, response.size()); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/DatabaseServiceUnitTest.java similarity index 88% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/DatabaseServiceUnitTest.java index 85829f6ae6..b2f42bd167 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/DatabaseServiceUnitTest.java @@ -1,18 +1,17 @@ -package at.tuwien.service; - -import at.tuwien.api.database.DatabaseModifyVisibilityDto; -import at.tuwien.api.database.internal.CreateDatabaseDto; -import at.tuwien.api.user.internal.UpdateUserPasswordDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; -import at.tuwien.repository.DatabaseRepository; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseModifyVisibilityDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.internal.CreateDatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.internal.UpdateUserPasswordDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.gateway.DataServiceGateway; +import at.ac.tuwien.ifs.dbrepo.gateway.SearchServiceGateway; +import at.ac.tuwien.ifs.dbrepo.repository.DatabaseRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -32,7 +31,7 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class DatabaseServiceUnitTest extends AbstractUnitTest { +public class DatabaseServiceUnitTest extends BaseTest { @MockBean private SearchServiceGateway searchServiceGateway; @@ -46,11 +45,6 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { @Autowired private DatabaseService databaseService; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void findAll_succeeds() { /* mock */ @@ -215,8 +209,8 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { @Test public void updateViewMetadata_oneMissing_succeeds() throws SearchServiceException, DataServiceException, - QueryNotFoundException, DatabaseNotFoundException, SearchServiceConnectionException, - DataServiceConnectionException, ViewNotFoundException { + DatabaseNotFoundException, SearchServiceConnectionException, DataServiceConnectionException, + ViewNotFoundException { /* mock */ when(dataServiceGateway.getViewSchemas(DATABASE_1_ID)) @@ -233,8 +227,8 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { @Test public void updateViewMetadata_allKnown_succeeds() throws SearchServiceException, DataServiceException, - QueryNotFoundException, DatabaseNotFoundException, SearchServiceConnectionException, - DataServiceConnectionException, ViewNotFoundException { + DatabaseNotFoundException, SearchServiceConnectionException, DataServiceConnectionException, + ViewNotFoundException { /* mock */ when(dataServiceGateway.getViewSchemas(DATABASE_1_ID)) @@ -251,8 +245,8 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { @Test public void updateTableMetadata_empty_succeeds() throws TableNotFoundException, SearchServiceException, - MalformedException, DataServiceException, QueryNotFoundException, DatabaseNotFoundException, - SearchServiceConnectionException, DataServiceConnectionException { + MalformedException, DataServiceException, DatabaseNotFoundException, SearchServiceConnectionException, + DataServiceConnectionException { /* mock */ when(dataServiceGateway.getTableSchemas(DATABASE_1_ID)) @@ -269,8 +263,8 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { @Test public void updateTableMetadata_allKnown_succeeds() throws TableNotFoundException, SearchServiceException, - MalformedException, DataServiceException, QueryNotFoundException, DatabaseNotFoundException, - SearchServiceConnectionException, DataServiceConnectionException { + MalformedException, DataServiceException, DatabaseNotFoundException, SearchServiceConnectionException, + DataServiceConnectionException { /* mock */ when(dataServiceGateway.getTableSchemas(DATABASE_1_ID)) @@ -287,8 +281,8 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { @Test public void updateTableMetadata_oneMissing_succeeds() throws TableNotFoundException, SearchServiceException, - MalformedException, DataServiceException, QueryNotFoundException, DatabaseNotFoundException, - SearchServiceConnectionException, DataServiceConnectionException { + MalformedException, DataServiceException, DatabaseNotFoundException, SearchServiceConnectionException, + DataServiceConnectionException { /* mock */ when(dataServiceGateway.getTableSchemas(DATABASE_1_ID)) @@ -303,7 +297,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { assertNotNull(response); final Optional<Table> optional = response.getTables() .stream() - .filter(t -> t.getInternalName().equals(TABLE_5_INTERNALNAME)) + .filter(t -> t.getInternalName().equals(TABLE_5_INTERNAL_NAME)) .findFirst(); assertTrue(optional.isPresent()); final Table table = optional.get(); @@ -513,9 +507,9 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { /* ## GENERIC TEST CASES ## */ /* ################################################################################################### */ - protected Database generic_create() throws DataServiceException, - DataServiceConnectionException, UserNotFoundException, DatabaseNotFoundException, - ContainerNotFoundException, SearchServiceException, SearchServiceConnectionException { + protected Database generic_create() throws DataServiceException, DataServiceConnectionException, + UserNotFoundException, DatabaseNotFoundException, ContainerNotFoundException, SearchServiceException, + SearchServiceConnectionException, DashboardServiceException, DashboardServiceConnectionException { /* mock */ when(searchServiceGateway.update(any(Database.class))) @@ -525,7 +519,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { /* test */ final Database response = databaseService.create(CONTAINER_1, DATABASE_1_CREATE, USER_1, List.of(USER_LOCAL)); - assertTrue(response.getInternalName().startsWith(DATABASE_1_INTERNALNAME)); + assertTrue(response.getInternalName().startsWith(DATABASE_1_INTERNAL_NAME)); assertNotNull(response.getContainer()); assertNotNull(response.getTables()); assertNotNull(response.getViews()); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/EntityServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/EntityServiceUnitTest.java similarity index 86% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/EntityServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/EntityServiceUnitTest.java index afe3b6e2b8..27987dd6b4 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/EntityServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/EntityServiceUnitTest.java @@ -1,11 +1,12 @@ -package at.tuwien.service; - -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.api.semantics.EntityDto; -import at.tuwien.api.semantics.TableColumnEntityDto; -import at.tuwien.exception.*; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.EntityDto; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.TableColumnEntityDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.MalformedException; +import at.ac.tuwien.ifs.dbrepo.core.exception.OntologyNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.SemanticEntityNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -24,7 +25,7 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class EntityServiceUnitTest extends AbstractUnitTest { +public class EntityServiceUnitTest extends BaseTest { @MockBean private OntologyService ontologyService; @@ -32,11 +33,6 @@ public class EntityServiceUnitTest extends AbstractUnitTest { @Autowired private EntityService entityService; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void findByLabel_wikidataSparql_succeeds() throws MalformedException { @@ -49,7 +45,6 @@ public class EntityServiceUnitTest extends AbstractUnitTest { assertFalse(response.isEmpty()); final EntityDto entity0 = response.get(0); assertNotNull(entity0.getUri()); - log.trace("found concept {}", entity0); } @Test @@ -66,7 +61,6 @@ public class EntityServiceUnitTest extends AbstractUnitTest { assertEquals(1, response.size()); final EntityDto entity0 = response.get(0); assertNotNull(entity0.getUri()); - log.trace("found concept {}", entity0); } @Test @@ -82,7 +76,6 @@ public class EntityServiceUnitTest extends AbstractUnitTest { /* test */ final EntityDto response = entityService.findOneByUri(CONCEPT_1_URI); assertNotNull(response.getUri()); - log.trace("found concept {}", response); } @Test @@ -97,7 +90,6 @@ public class EntityServiceUnitTest extends AbstractUnitTest { assertFalse(response.isEmpty()); final EntityDto entity0 = response.get(0); assertNotNull(entity0.getUri()); - log.trace("found unit {}", entity0); } @Test @@ -114,7 +106,6 @@ public class EntityServiceUnitTest extends AbstractUnitTest { assertEquals(1, response.size()); final EntityDto entity0 = response.get(0); assertNotNull(entity0.getUri()); - log.trace("found unit {}", entity0); } @Test diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/IdentifierServicePersistenceTest.java similarity index 92% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServicePersistenceTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/IdentifierServicePersistenceTest.java index c053afa51d..259680ad1a 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServicePersistenceTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/IdentifierServicePersistenceTest.java @@ -1,18 +1,19 @@ -package at.tuwien.service; - -import at.tuwien.api.database.query.QueryDto; -import at.tuwien.api.identifier.BibliographyTypeDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.License; -import at.tuwien.entities.identifier.*; -import at.tuwien.exception.*; -import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; -import at.tuwien.repository.ContainerRepository; -import at.tuwien.repository.DatabaseRepository; -import at.tuwien.repository.LicenseRepository; -import at.tuwien.repository.UserRepository; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.QueryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.BibliographyTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.License; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.*; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.gateway.DataServiceGateway; +import at.ac.tuwien.ifs.dbrepo.gateway.SearchServiceGateway; +import at.ac.tuwien.ifs.dbrepo.repository.ContainerRepository; +import at.ac.tuwien.ifs.dbrepo.repository.DatabaseRepository; +import at.ac.tuwien.ifs.dbrepo.repository.LicenseRepository; +import at.ac.tuwien.ifs.dbrepo.repository.UserRepository; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -41,7 +42,7 @@ import static org.mockito.Mockito.when; @SpringBootTest @ExtendWith(SpringExtension.class) @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -public class IdentifierServicePersistenceTest extends AbstractUnitTest { +public class IdentifierServicePersistenceTest extends BaseTest { @MockBean private DataServiceGateway dataServiceGateway; @@ -70,7 +71,6 @@ public class IdentifierServicePersistenceTest extends AbstractUnitTest { @BeforeEach public void beforeEach() { - genesis(); /* metadata database */ licenseRepository.save(LICENSE_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4, USER_5)); @@ -84,7 +84,7 @@ public class IdentifierServicePersistenceTest extends AbstractUnitTest { /* test */ final List<Identifier> response = identifierService.findAll(null, null, null, null, null); assertEquals(7, response.size()); - for (UUID id : List.of(IDENTIFIER_1_ID, IDENTIFIER_2_ID, IDENTIFIER_3_ID, IDENTIFIER_4_ID, IDENTIFIER_5_ID, IDENTIFIER_6_ID, IDENTIFIER_7_ID)) { + for (UUID id : List.of(IDENTIFIER_1_ID, IDENTIFIER_2_ID, IDENTIFIER_3_ID, IDENTIFIER_4_ID, IDENTIFIER_5_ID, IDENTIFIER_6_ID, IDENTIFIER_7.getId())) { assertTrue(response.stream().map(Identifier::getId).toList().contains(id)); } } @@ -345,7 +345,7 @@ public class IdentifierServicePersistenceTest extends AbstractUnitTest { final List<IdentifierTitle> titles = response.getTitles(); assertEquals(2, titles.size()); final IdentifierTitle title0 = titles.get(0); - assertEquals(IDENTIFIER_1_TITLE_1_TITLE, title0.getTitle()); + assertEquals(IDENTIFIER_1.getTitles().get(0).getTitle(), title0.getTitle()); assertEquals(IDENTIFIER_1_TITLE_1_LANG, title0.getLanguage()); assertEquals(IDENTIFIER_1_TITLE_1_TYPE, title0.getTitleType()); final IdentifierTitle title1 = titles.get(1); @@ -357,7 +357,7 @@ public class IdentifierServicePersistenceTest extends AbstractUnitTest { final List<IdentifierDescription> descriptions = response.getDescriptions(); final IdentifierDescription description0 = descriptions.get(0); assertNotNull(description0.getId()); - assertEquals(IDENTIFIER_1_DESCRIPTION_1_DESCRIPTION, description0.getDescription()); + assertEquals(IDENTIFIER_1.getDescriptions().get(0).getDescription(), description0.getDescription()); assertEquals(IDENTIFIER_1_DESCRIPTION_1_LANG, description0.getLanguage()); assertEquals(IDENTIFIER_1_DESCRIPTION_1_TYPE, description0.getDescriptionType()); assertNotNull(response.getCreators()); @@ -391,7 +391,7 @@ public class IdentifierServicePersistenceTest extends AbstractUnitTest { final List<IdentifierTitle> titles = response.getTitles(); assertEquals(1, titles.size()); final IdentifierTitle title0 = titles.get(0); - assertEquals(IDENTIFIER_1_TITLE_1_TITLE, title0.getTitle()); + assertEquals(IDENTIFIER_1.getTitles().get(0).getTitle(), title0.getTitle()); assertEquals(IDENTIFIER_1_TITLE_1_LANG, title0.getLanguage()); assertEquals(IDENTIFIER_1_TITLE_1_TYPE, title0.getTitleType()); assertNotNull(response.getDescriptions()); @@ -476,8 +476,7 @@ public class IdentifierServicePersistenceTest extends AbstractUnitTest { @Test public void create_hasDoi_succeeds() throws SearchServiceException, MalformedException, DataServiceException, QueryNotFoundException, DataServiceConnectionException, DatabaseNotFoundException, - SearchServiceConnectionException, IdentifierNotFoundException, ViewNotFoundException, - ExternalServiceException { + SearchServiceConnectionException, ViewNotFoundException, ExternalServiceException { /* test */ final Identifier response = identifierService.create(DATABASE_1, USER_1, IDENTIFIER_1_CREATE_WITH_DOI_DTO); @@ -491,7 +490,7 @@ public class IdentifierServicePersistenceTest extends AbstractUnitTest { /* test */ final Identifier response = identifierService.publish(IDENTIFIER_7); - assertEquals(IDENTIFIER_7_ID, response.getId()); + assertEquals(IDENTIFIER_7.getId(), response.getId()); assertEquals(IdentifierStatusType.PUBLISHED, response.getStatus()); } } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ImageServicePersistenceTest.java similarity index 65% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServicePersistenceTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ImageServicePersistenceTest.java index fb501cb281..8e597f5c6b 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServicePersistenceTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ImageServicePersistenceTest.java @@ -1,11 +1,11 @@ -package at.tuwien.service; - -import at.tuwien.exception.ImageInvalidException; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.api.container.image.ImageCreateDto; -import at.tuwien.exception.ImageAlreadyExistsException; -import at.tuwien.repository.ContainerRepository; -import at.tuwien.repository.ImageRepository; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageAlreadyExistsException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageInvalidException; +import at.ac.tuwien.ifs.dbrepo.repository.ContainerRepository; +import at.ac.tuwien.ifs.dbrepo.repository.ImageRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -21,7 +21,7 @@ import static org.junit.jupiter.api.Assertions.*; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @ExtendWith(SpringExtension.class) @SpringBootTest -public class ImageServicePersistenceTest extends AbstractUnitTest { +public class ImageServicePersistenceTest extends BaseTest { @Autowired private ImageService imageService; @@ -34,7 +34,6 @@ public class ImageServicePersistenceTest extends AbstractUnitTest { @BeforeEach public void beforeEach() { - genesis(); /* metadata database */ imageRepository.save(IMAGE_1); } @@ -44,11 +43,11 @@ public class ImageServicePersistenceTest extends AbstractUnitTest { final ImageCreateDto request = ImageCreateDto.builder() .name(IMAGE_1_NAME) .version("11.1.4") // new tag - .registry(IMAGE_1_REGISTRY) - .jdbcMethod(IMAGE_1_JDBC) + .registry(IMAGE_1.getRegistry()) + .jdbcMethod(IMAGE_1_JDBC_METHOD) .dialect(IMAGE_1_DIALECT) - .driverClass(IMAGE_1_DRIVER) - .defaultPort(IMAGE_1_PORT) + .driverClass(IMAGE_1.getDriverClass()) + .defaultPort(IMAGE_1_DEFAULT_PORT) .isDefault(false) .build(); @@ -61,9 +60,9 @@ public class ImageServicePersistenceTest extends AbstractUnitTest { final ImageCreateDto request = ImageCreateDto.builder() .name(IMAGE_1_NAME) .version(IMAGE_1_VERSION) - .defaultPort(IMAGE_1_PORT) - .driverClass(IMAGE_1_DRIVER) - .jdbcMethod(IMAGE_1_JDBC) + .defaultPort(IMAGE_1_DEFAULT_PORT) + .driverClass(IMAGE_1.getDriverClass()) + .jdbcMethod(IMAGE_1_JDBC_METHOD) .dialect(IMAGE_1_DIALECT) .isDefault(IMAGE_1_IS_DEFAULT) .build(); @@ -79,10 +78,10 @@ public class ImageServicePersistenceTest extends AbstractUnitTest { final ImageCreateDto request = ImageCreateDto.builder() .name("mariadb") .version("10.5") - .registry(IMAGE_1_REGISTRY) - .defaultPort(IMAGE_1_PORT) - .driverClass(IMAGE_1_DRIVER) - .jdbcMethod(IMAGE_1_JDBC) + .registry(IMAGE_1.getRegistry()) + .defaultPort(IMAGE_1_DEFAULT_PORT) + .driverClass(IMAGE_1.getDriverClass()) + .jdbcMethod(IMAGE_1_JDBC_METHOD) .dialect(IMAGE_1_DIALECT) .isDefault(true) // <<<< .build(); @@ -94,11 +93,11 @@ public class ImageServicePersistenceTest extends AbstractUnitTest { } @Test - public void delete_hasNoContainer_succeeds() { + public void delete_hasNoContainer_succeeds() { /* test */ imageService.delete(IMAGE_1); - assertTrue(imageRepository.findById(IMAGE_1_ID).isEmpty()); + assertTrue(imageRepository.findById(CONTAINER_1_ID).isEmpty()); assertFalse(containerRepository.findById(CONTAINER_1_ID).isPresent()); /* container should NEVER be deletable in the metadata db */ } @@ -107,7 +106,7 @@ public class ImageServicePersistenceTest extends AbstractUnitTest { /* test */ imageService.delete(IMAGE_1); - assertTrue(imageRepository.findById(IMAGE_1_ID).isEmpty()); + assertTrue(imageRepository.findById(CONTAINER_1_ID).isEmpty()); } } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ImageServiceUnitTest.java similarity index 76% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ImageServiceUnitTest.java index dc77ff263b..4ad64bfabe 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ImageServiceUnitTest.java @@ -1,16 +1,14 @@ -package at.tuwien.service; - -import at.tuwien.exception.ImageInvalidException; -import at.tuwien.exception.ImageNotFoundException; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.api.container.image.ImageChangeDto; -import at.tuwien.api.container.image.ImageCreateDto; -import at.tuwien.entities.container.image.ContainerImage; -import at.tuwien.exception.ImageAlreadyExistsException; -import at.tuwien.repository.ImageRepository; -import at.tuwien.service.impl.ImageServiceImpl; -import jakarta.validation.ConstraintViolationException; -import org.junit.jupiter.api.BeforeEach; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageChangeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.image.ContainerImage; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageAlreadyExistsException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageInvalidException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.repository.ImageRepository; +import at.ac.tuwien.ifs.dbrepo.service.impl.ImageServiceImpl; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -23,11 +21,12 @@ import java.util.Optional; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; @ExtendWith(SpringExtension.class) @SpringBootTest -public class ImageServiceUnitTest extends AbstractUnitTest { +public class ImageServiceUnitTest extends BaseTest { @MockBean private ImageRepository imageRepository; @@ -35,11 +34,6 @@ public class ImageServiceUnitTest extends AbstractUnitTest { @Autowired private ImageService imageService; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void getAll_succeeds() { @@ -58,11 +52,11 @@ public class ImageServiceUnitTest extends AbstractUnitTest { public void getById_succeeds() throws ImageNotFoundException { /* mock */ - when(imageRepository.findById(IMAGE_1_ID)) + when(imageRepository.findById(CONTAINER_1_ID)) .thenReturn(Optional.of(IMAGE_1)); /* test */ - final ContainerImage response = imageService.find(IMAGE_1_ID); + final ContainerImage response = imageService.find(CONTAINER_1_ID); assertEquals(IMAGE_1_NAME, response.getName()); assertEquals(IMAGE_1_VERSION, response.getVersion()); } @@ -71,12 +65,12 @@ public class ImageServiceUnitTest extends AbstractUnitTest { public void getById_notFound_fails() { /* mock */ - when(imageRepository.findById(IMAGE_1_ID)) + when(imageRepository.findById(CONTAINER_1_ID)) .thenReturn(Optional.empty()); /* test */ assertThrows(ImageNotFoundException.class, () -> { - imageService.find(IMAGE_1_ID); + imageService.find(CONTAINER_1_ID); }); } @@ -85,7 +79,7 @@ public class ImageServiceUnitTest extends AbstractUnitTest { final ImageCreateDto request = ImageCreateDto.builder() .name(IMAGE_1_NAME) .version(IMAGE_1_VERSION) - .defaultPort(IMAGE_1_PORT) + .defaultPort(IMAGE_1_DEFAULT_PORT) .build(); /* mock */ @@ -103,7 +97,7 @@ public class ImageServiceUnitTest extends AbstractUnitTest { final ImageCreateDto request = ImageCreateDto.builder() .name(IMAGE_1_NAME) .version("10.5") - .defaultPort(IMAGE_1_PORT) + .defaultPort(IMAGE_1_DEFAULT_PORT) .isDefault(true) .build(); @@ -123,11 +117,11 @@ public class ImageServiceUnitTest extends AbstractUnitTest { public void update_succeeds() { final ImageServiceImpl mockImageService = mock(ImageServiceImpl.class); final ImageChangeDto request = ImageChangeDto.builder() - .defaultPort(IMAGE_1_PORT) + .defaultPort(IMAGE_1_DEFAULT_PORT) .build(); /* mock */ - when(imageRepository.findById(IMAGE_1_ID)) + when(imageRepository.findById(CONTAINER_1_ID)) .thenReturn(Optional.of(IMAGE_1)); when(imageRepository.save(any())) .thenReturn(IMAGE_1); @@ -148,7 +142,7 @@ public class ImageServiceUnitTest extends AbstractUnitTest { .build(); /* mock */ - when(imageRepository.findById(IMAGE_1_ID)) + when(imageRepository.findById(CONTAINER_1_ID)) .thenReturn(Optional.of(IMAGE_1)); when(imageRepository.save(any())) .thenReturn(IMAGE_1); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/LicenseServiceUnitTest.java similarity index 79% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/LicenseServiceUnitTest.java index a73ce8df24..417c50424f 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/LicenseServiceUnitTest.java @@ -1,11 +1,10 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.exception.LicenseNotFoundException; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.entities.database.License; -import at.tuwien.repository.LicenseRepository; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.License; +import at.ac.tuwien.ifs.dbrepo.core.exception.LicenseNotFoundException; +import at.ac.tuwien.ifs.dbrepo.repository.LicenseRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -24,7 +23,7 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class LicenseServiceUnitTest extends AbstractUnitTest { +public class LicenseServiceUnitTest extends BaseTest { @MockBean private LicenseRepository licenseRepository; @@ -32,11 +31,6 @@ public class LicenseServiceUnitTest extends AbstractUnitTest { @Autowired private LicenseService licenseService; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void findAll_succeeds() { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/MessageServiceUnitTest.java similarity index 85% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/MessageServiceUnitTest.java index fb7806f454..0fb606d6df 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/MessageServiceUnitTest.java @@ -1,13 +1,12 @@ -package at.tuwien.service; - -import at.tuwien.exception.MessageNotFoundException; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.api.maintenance.BannerMessageCreateDto; -import at.tuwien.api.maintenance.BannerMessageUpdateDto; -import at.tuwien.entities.maintenance.BannerMessage; -import at.tuwien.repository.BannerMessageRepository; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.maintenance.BannerMessage; +import at.ac.tuwien.ifs.dbrepo.core.exception.MessageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.repository.BannerMessageRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -23,14 +22,13 @@ import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.when; @Log4j2 @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest @ExtendWith(SpringExtension.class) -public class MessageServiceUnitTest extends AbstractUnitTest { +public class MessageServiceUnitTest extends BaseTest { @MockBean private BannerMessageRepository bannerMessageRepository; @@ -38,11 +36,6 @@ public class MessageServiceUnitTest extends AbstractUnitTest { @Autowired private BannerMessageService bannerMessageService; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void findAll_succeeds() { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/MetadataServiceUnitTest.java similarity index 86% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/MetadataServiceUnitTest.java index 2f4fd3a85a..f96d6807f0 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/MetadataServiceUnitTest.java @@ -1,22 +1,21 @@ -package at.tuwien.service; - -import at.tuwien.api.crossref.CrossrefDto; -import at.tuwien.api.orcid.OrcidDto; -import at.tuwien.api.ror.RorDto; -import at.tuwien.api.user.external.ExternalMetadataDto; -import at.tuwien.api.user.external.affiliation.ExternalAffiliationDto; -import at.tuwien.exception.*; -import at.tuwien.gateway.CrossrefGateway; -import at.tuwien.gateway.OrcidGateway; -import at.tuwien.gateway.RorGateway; -import at.tuwien.oaipmh.OaiErrorType; -import at.tuwien.oaipmh.OaiListIdentifiersParameters; -import at.tuwien.oaipmh.OaiRecordParameters; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.crossref.CrossRefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.OrcidDto; +import at.ac.tuwien.ifs.dbrepo.core.api.ror.RorDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.external.ExternalMetadataDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.external.affiliation.ExternalAffiliationDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.gateway.CrossRefGateway; +import at.ac.tuwien.ifs.dbrepo.gateway.OrcidGateway; +import at.ac.tuwien.ifs.dbrepo.gateway.RorGateway; +import at.ac.tuwien.ifs.dbrepo.oaipmh.OaiErrorType; +import at.ac.tuwien.ifs.dbrepo.oaipmh.OaiListIdentifiersParameters; +import at.ac.tuwien.ifs.dbrepo.oaipmh.OaiRecordParameters; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -40,7 +39,7 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class MetadataServiceUnitTest extends AbstractUnitTest { +public class MetadataServiceUnitTest extends BaseTest { @MockBean private OrcidGateway orcidGateway; @@ -49,7 +48,7 @@ public class MetadataServiceUnitTest extends AbstractUnitTest { private RorGateway rorGateway; @MockBean - private CrossrefGateway crossrefGateway; + private CrossRefGateway crossRefGateway; @MockBean private IdentifierService identifierService; @@ -60,11 +59,6 @@ public class MetadataServiceUnitTest extends AbstractUnitTest { @Autowired private ObjectMapper objectMapper; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void identify_succeeds() { @@ -209,11 +203,11 @@ public class MetadataServiceUnitTest extends AbstractUnitTest { @Test public void findByUrl_doi_succeeds() throws OrcidNotFoundException, RorNotFoundException, IOException, DoiNotFoundException, IdentifierNotSupportedException { - final CrossrefDto doi = objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .readValue(new File("src/test/resources/json/doi_ec.json"), CrossrefDto.class); + final CrossRefDto doi = objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .readValue(new File("src/test/resources/json/doi_ec.json"), CrossRefDto.class); /* mock */ - when(crossrefGateway.findById(FUNDER_1_IDENTIFIER_ID_ONLY)) + when(crossRefGateway.findById(FUNDER_1_IDENTIFIER_ID_ONLY)) .thenReturn(doi); /* test */ @@ -229,7 +223,7 @@ public class MetadataServiceUnitTest extends AbstractUnitTest { /* mock */ doThrow(DoiNotFoundException.class) - .when(crossrefGateway) + .when(crossRefGateway) .findById(anyString()); /* test */ diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StorageServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/StorageServiceIntegrationTest.java similarity index 89% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StorageServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/StorageServiceIntegrationTest.java index 5ef5f9742b..21c2f6199a 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StorageServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/StorageServiceIntegrationTest.java @@ -1,8 +1,9 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.config.S3Config; -import at.tuwien.exception.*; -import at.tuwien.test.AbstractUnitTest; +import at.ac.tuwien.ifs.dbrepo.config.S3Config; +import at.ac.tuwien.ifs.dbrepo.core.exception.StorageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.StorageUnavailableException; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -33,7 +34,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest @ExtendWith(SpringExtension.class) -public class StorageServiceIntegrationTest extends AbstractUnitTest { +public class StorageServiceIntegrationTest extends BaseTest { @Autowired private StorageService storageService; @@ -45,7 +46,7 @@ public class StorageServiceIntegrationTest extends AbstractUnitTest { private S3Config s3Config; @Container - private static final MinIOContainer minIOContainer = new MinIOContainer("minio/minio:RELEASE.2024-06-06T09-36-42Z"); + private static final MinIOContainer minIOContainer = new MinIOContainer(MINIO_IMAGE); @DynamicPropertySource static void dynamicProperties(DynamicPropertyRegistry registry) { @@ -54,7 +55,6 @@ public class StorageServiceIntegrationTest extends AbstractUnitTest { @BeforeEach public void beforeEach() throws SQLException { - genesis(); /* s3 */ if (s3Client.listBuckets().buckets().stream().noneMatch(b -> b.name().equals(s3Config.getS3Bucket()))) { s3Client.createBucket(CreateBucketRequest.builder() diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/TableServicePersistenceTest.java similarity index 84% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServicePersistenceTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/TableServicePersistenceTest.java index 459c3b6dbe..9cdacb06b3 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServicePersistenceTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/TableServicePersistenceTest.java @@ -1,24 +1,24 @@ -package at.tuwien.service; - -import at.tuwien.api.database.table.CreateTableDto; -import at.tuwien.api.database.table.columns.ColumnTypeDto; -import at.tuwien.api.database.table.columns.CreateTableColumnDto; -import at.tuwien.api.database.table.constraints.CreateTableConstraintsDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.TableColumn; -import at.tuwien.entities.database.table.columns.TableColumnType; -import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKey; -import at.tuwien.entities.database.table.constraints.primaryKey.PrimaryKey; -import at.tuwien.entities.database.table.constraints.unique.Unique; -import at.tuwien.exception.*; -import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; -import at.tuwien.repository.ContainerRepository; -import at.tuwien.repository.DatabaseRepository; -import at.tuwien.repository.LicenseRepository; -import at.tuwien.repository.UserRepository; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.CreateTableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.CreateTableColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.CreateTableConstraintsDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumn; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumnType; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.foreignKey.ForeignKey; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.primaryKey.PrimaryKey; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.unique.Unique; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.gateway.DataServiceGateway; +import at.ac.tuwien.ifs.dbrepo.gateway.SearchServiceGateway; +import at.ac.tuwien.ifs.dbrepo.repository.ContainerRepository; +import at.ac.tuwien.ifs.dbrepo.repository.DatabaseRepository; +import at.ac.tuwien.ifs.dbrepo.repository.LicenseRepository; +import at.ac.tuwien.ifs.dbrepo.repository.UserRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -42,7 +42,7 @@ import static org.mockito.Mockito.*; @SpringBootTest @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @ExtendWith(SpringExtension.class) -public class TableServicePersistenceTest extends AbstractUnitTest { +public class TableServicePersistenceTest extends BaseTest { @MockBean private SearchServiceGateway searchServiceGateway; @@ -70,7 +70,6 @@ public class TableServicePersistenceTest extends AbstractUnitTest { @BeforeEach public void beforeEach() { - genesis(); /* metadata database */ licenseRepository.save(LICENSE_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); @@ -81,7 +80,9 @@ public class TableServicePersistenceTest extends AbstractUnitTest { @Test @Transactional public void create_succeeds() throws MalformedException, DataServiceException, DataServiceConnectionException, - UserNotFoundException, TableNotFoundException, DatabaseNotFoundException, TableExistsException, SearchServiceException, SearchServiceConnectionException, OntologyNotFoundException, SemanticEntityNotFoundException { + UserNotFoundException, TableNotFoundException, DatabaseNotFoundException, TableExistsException, + SearchServiceException, SearchServiceConnectionException, OntologyNotFoundException, + SemanticEntityNotFoundException { final CreateTableDto request = CreateTableDto.builder() .name("New Table") .description("A wonderful table") diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/TableServiceUnitTest.java similarity index 89% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/TableServiceUnitTest.java index 9b0b7fcb1a..0c260f3ed6 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/TableServiceUnitTest.java @@ -1,28 +1,27 @@ -package at.tuwien.service; - -import at.tuwien.api.database.table.CreateTableDto; -import at.tuwien.api.database.table.TableStatisticDto; -import at.tuwien.api.database.table.TableUpdateDto; -import at.tuwien.api.database.table.columns.ColumnStatisticDto; -import at.tuwien.api.database.table.columns.ColumnTypeDto; -import at.tuwien.api.database.table.columns.CreateTableColumnDto; -import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; -import at.tuwien.api.database.table.constraints.CreateTableConstraintsDto; -import at.tuwien.api.database.table.constraints.foreign.CreateForeignKeyDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.ColumnEnum; -import at.tuwien.entities.database.table.columns.ColumnSet; -import at.tuwien.entities.database.table.columns.TableColumn; -import at.tuwien.entities.database.table.columns.TableColumnType; -import at.tuwien.entities.database.table.constraints.Constraints; -import at.tuwien.exception.*; -import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; -import at.tuwien.repository.DatabaseRepository; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.CreateTableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableStatisticDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnStatisticDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.CreateTableColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.CreateTableConstraintsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign.CreateForeignKeyDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.ColumnEnum; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.ColumnSet; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumn; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumnType; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.Constraints; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.gateway.DataServiceGateway; +import at.ac.tuwien.ifs.dbrepo.gateway.SearchServiceGateway; +import at.ac.tuwien.ifs.dbrepo.repository.DatabaseRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -42,7 +41,7 @@ import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class TableServiceUnitTest extends AbstractUnitTest { +public class TableServiceUnitTest extends BaseTest { @MockBean private DatabaseRepository databaseRepository; @@ -68,11 +67,6 @@ public class TableServiceUnitTest extends AbstractUnitTest { @Autowired private TableService tableService; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void findById_succeeds() throws TableNotFoundException, DatabaseNotFoundException { @@ -188,15 +182,14 @@ public class TableServiceUnitTest extends AbstractUnitTest { public void updateStatistics_columnNotFound_fails() throws TableNotFoundException, DataServiceException, DataServiceConnectionException { final TableStatisticDto mock = TableStatisticDto.builder() - .columns(new HashMap<>() {{ - put("unknown_column", ColumnStatisticDto.builder() - .min(BigDecimal.valueOf(11.2)) - .max(BigDecimal.valueOf(23.1)) - .mean(BigDecimal.valueOf(13.5333)) - .median(BigDecimal.valueOf(11.4)) - .stdDev(BigDecimal.valueOf(4.2952)) - .build()); - }}) + .columns(new LinkedList<>(List.of(ColumnStatisticDto.builder() + .name("unknown_column") + .min(BigDecimal.valueOf(11.2)) + .max(BigDecimal.valueOf(23.1)) + .mean(BigDecimal.valueOf(13.5333)) + .median(BigDecimal.valueOf(11.4)) + .stdDev(BigDecimal.valueOf(4.2952)) + .build()))) .build(); /* mock */ @@ -286,7 +279,7 @@ public class TableServiceUnitTest extends AbstractUnitTest { /* test */ final Table response = tableService.createTable(DATABASE_1, TABLE_3_CREATE_DTO, USER_1_PRINCIPAL); - assertEquals(TABLE_3_INTERNALNAME, response.getInternalName()); + assertEquals(TABLE_3_INTERNAL_NAME, response.getInternalName()); } @Test diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UnitServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/UnitServiceUnitTest.java similarity index 80% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UnitServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/UnitServiceUnitTest.java index 67b396c660..e8e73fca32 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UnitServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/UnitServiceUnitTest.java @@ -1,11 +1,10 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.repository.UnitRepository; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.entities.database.table.columns.TableColumnUnit; -import at.tuwien.exception.UnitNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumnUnit; +import at.ac.tuwien.ifs.dbrepo.core.exception.UnitNotFoundException; +import at.ac.tuwien.ifs.dbrepo.repository.UnitRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -24,7 +23,7 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class UnitServiceUnitTest extends AbstractUnitTest { +public class UnitServiceUnitTest extends BaseTest { @MockBean private UnitRepository unitRepository; @@ -32,11 +31,6 @@ public class UnitServiceUnitTest extends AbstractUnitTest { @Autowired private UnitService unitService; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test @Transactional public void findAll_succeeds() { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/UserServiceIntegrationTest.java similarity index 75% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/UserServiceIntegrationTest.java index 39aed0d28e..9311d0dd34 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/UserServiceIntegrationTest.java @@ -1,12 +1,11 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.entities.user.User; -import at.tuwien.exception.AuthServiceException; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.gateway.KeycloakGateway; -import at.tuwien.repository.UserRepository; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.utils.KeycloakUtils; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.AuthServiceException; +import at.ac.tuwien.ifs.dbrepo.core.exception.UserNotFoundException; +import at.ac.tuwien.ifs.dbrepo.repository.UserRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.utils.KeycloakUtils; import dasniko.testcontainers.keycloak.KeycloakContainer; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; @@ -14,7 +13,6 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.DynamicPropertyRegistry; import org.springframework.test.context.DynamicPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -22,17 +20,14 @@ import org.testcontainers.images.PullPolicy; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; -import java.util.List; -import java.util.Optional; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; @Log4j2 @Testcontainers @ExtendWith(SpringExtension.class) @SpringBootTest -public class UserServiceIntegrationTest extends AbstractUnitTest { +public class UserServiceIntegrationTest extends BaseTest { @Autowired private UserRepository userRepository; @@ -45,14 +40,13 @@ public class UserServiceIntegrationTest extends AbstractUnitTest { @BeforeEach public void beforeEach() { - genesis(); /* keycloak */ userRepository.deleteAll(); keycloakUtils.deleteUser(USER_1_USERNAME); } @Container - private static KeycloakContainer keycloakContainer = new KeycloakContainer(KEYCLOAK_IMAGE) + private static final KeycloakContainer keycloakContainer = new KeycloakContainer(KEYCLOAK_IMAGE) .withImagePullPolicy(PullPolicy.alwaysPull()) .withAdminUsername("admin") .withAdminPassword("admin") diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/UserServicePersistenceTest.java similarity index 84% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServicePersistenceTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/UserServicePersistenceTest.java index c224fa9a85..cb4e873ac9 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServicePersistenceTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/UserServicePersistenceTest.java @@ -1,12 +1,12 @@ -package at.tuwien.service; - -import at.tuwien.api.user.UserUpdateDto; -import at.tuwien.entities.user.User; -import at.tuwien.exception.AuthServiceException; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.gateway.KeycloakGateway; -import at.tuwien.repository.UserRepository; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.AuthServiceException; +import at.ac.tuwien.ifs.dbrepo.core.exception.UserNotFoundException; +import at.ac.tuwien.ifs.dbrepo.gateway.KeycloakGateway; +import at.ac.tuwien.ifs.dbrepo.repository.UserRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -26,7 +26,7 @@ import static org.mockito.Mockito.doNothing; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @SpringBootTest @ExtendWith(SpringExtension.class) -public class UserServicePersistenceTest extends AbstractUnitTest { +public class UserServicePersistenceTest extends BaseTest { @Autowired private UserRepository userRepository; @@ -39,7 +39,6 @@ public class UserServicePersistenceTest extends AbstractUnitTest { @BeforeEach public void beforeEach() { - genesis(); /* metadata database */ userRepository.saveAll(List.of(USER_1, USER_LOCAL)); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/UserServiceUnitTest.java similarity index 82% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/UserServiceUnitTest.java index c610f3ee95..8a6a29400b 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/UserServiceUnitTest.java @@ -1,13 +1,12 @@ -package at.tuwien.service; - -import at.tuwien.api.user.UserUpdateDto; -import at.tuwien.entities.user.User; -import at.tuwien.exception.AuthServiceException; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.gateway.KeycloakGateway; -import at.tuwien.repository.UserRepository; -import at.tuwien.test.AbstractUnitTest; -import org.junit.jupiter.api.BeforeEach; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.AuthServiceException; +import at.ac.tuwien.ifs.dbrepo.core.exception.UserNotFoundException; +import at.ac.tuwien.ifs.dbrepo.gateway.KeycloakGateway; +import at.ac.tuwien.ifs.dbrepo.repository.UserRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -25,7 +24,7 @@ import static org.mockito.Mockito.*; @ExtendWith(SpringExtension.class) @SpringBootTest -public class UserServiceUnitTest extends AbstractUnitTest { +public class UserServiceUnitTest extends BaseTest { @MockBean private UserRepository userRepository; @@ -36,11 +35,6 @@ public class UserServiceUnitTest extends AbstractUnitTest { @Autowired private UserService userService; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void findByUsername_succeeds() throws UserNotFoundException { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ViewServicePersistenceTest.java similarity index 78% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ViewServicePersistenceTest.java index 57a84965dc..33cc7db8a4 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ViewServicePersistenceTest.java @@ -1,16 +1,15 @@ -package at.tuwien.service; - -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.View; -import at.tuwien.entities.database.ViewColumn; -import at.tuwien.exception.*; -import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; -import at.tuwien.repository.ContainerRepository; -import at.tuwien.repository.DatabaseRepository; -import at.tuwien.repository.LicenseRepository; -import at.tuwien.repository.UserRepository; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.View; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.gateway.DataServiceGateway; +import at.ac.tuwien.ifs.dbrepo.gateway.SearchServiceGateway; +import at.ac.tuwien.ifs.dbrepo.repository.ContainerRepository; +import at.ac.tuwien.ifs.dbrepo.repository.DatabaseRepository; +import at.ac.tuwien.ifs.dbrepo.repository.LicenseRepository; +import at.ac.tuwien.ifs.dbrepo.repository.UserRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; @@ -35,7 +34,7 @@ import static org.mockito.Mockito.when; @Disabled("CI/CD") @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @ExtendWith(SpringExtension.class) -public class ViewServicePersistenceTest extends AbstractUnitTest { +public class ViewServicePersistenceTest extends BaseTest { @Autowired private UserRepository userRepository; @@ -60,7 +59,6 @@ public class ViewServicePersistenceTest extends AbstractUnitTest { @BeforeEach public void beforeEach() { - genesis(); /* metadata database */ licenseRepository.save(LICENSE_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ViewServiceUnitTest.java similarity index 86% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ViewServiceUnitTest.java index e99fef1acc..a50b7ca339 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/ViewServiceUnitTest.java @@ -1,15 +1,14 @@ -package at.tuwien.service; - -import at.tuwien.api.database.CreateViewDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.View; -import at.tuwien.exception.*; -import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; -import at.tuwien.repository.DatabaseRepository; -import at.tuwien.test.AbstractUnitTest; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.CreateViewDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.View; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.gateway.DataServiceGateway; +import at.ac.tuwien.ifs.dbrepo.gateway.SearchServiceGateway; +import at.ac.tuwien.ifs.dbrepo.repository.DatabaseRepository; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -29,7 +28,7 @@ import static org.mockito.Mockito.*; @Testcontainers @SpringBootTest @ExtendWith(SpringExtension.class) -public class ViewServiceUnitTest extends AbstractUnitTest { +public class ViewServiceUnitTest extends BaseTest { @MockBean private DataServiceGateway dataServiceGateway; @@ -43,11 +42,6 @@ public class ViewServiceUnitTest extends AbstractUnitTest { @Autowired private ViewService viewService; - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void create_succeeds() throws MalformedException, DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException, TableNotFoundException, @@ -94,20 +88,6 @@ public class ViewServiceUnitTest extends AbstractUnitTest { }); } - @Test - public void findAll_public_succeeds() { - - /* test */ - viewService.findAll(DATABASE_1, null); - } - - @Test - public void findAll_publicAndPrivate_succeeds() { - - /* test */ - viewService.findAll(DATABASE_1, USER_1); - } - @Test public void delete_succeeds() throws DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, ViewNotFoundException, SearchServiceException, SearchServiceConnectionException { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/utils/AmqpUtils.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/utils/AmqpUtils.java similarity index 98% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/utils/AmqpUtils.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/utils/AmqpUtils.java index df86598714..09017252d8 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/utils/AmqpUtils.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/utils/AmqpUtils.java @@ -1,7 +1,7 @@ -package at.tuwien.utils; +package at.ac.tuwien.ifs.dbrepo.utils; -import at.tuwien.api.amqp.*; -import at.tuwien.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.core.api.amqp.*; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; import lombok.extern.log4j.Log4j2; import org.apache.commons.codec.binary.Base64; import org.springframework.beans.factory.annotation.Autowired; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/utils/H2Utils.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/utils/H2Utils.java similarity index 96% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/utils/H2Utils.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/utils/H2Utils.java index 7c80d5274a..f10486047a 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/utils/H2Utils.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/utils/H2Utils.java @@ -1,4 +1,4 @@ -package at.tuwien.utils; +package at.ac.tuwien.ifs.dbrepo.utils; import jakarta.persistence.EntityManager; import lombok.extern.log4j.Log4j2; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/utils/KeycloakUtils.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/utils/KeycloakUtils.java similarity index 90% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/utils/KeycloakUtils.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/utils/KeycloakUtils.java index 100178a337..9a0ea26a73 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/utils/KeycloakUtils.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/utils/KeycloakUtils.java @@ -1,9 +1,9 @@ -package at.tuwien.utils; +package at.ac.tuwien.ifs.dbrepo.utils; -import at.tuwien.api.keycloak.UserCreateDto; -import at.tuwien.config.KeycloakConfig; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.UserCreateDto; +import at.ac.tuwien.ifs.dbrepo.config.KeycloakConfig; +import at.ac.tuwien.ifs.dbrepo.core.exception.UserNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; import jakarta.ws.rs.core.Response; import lombok.extern.log4j.Log4j2; import org.keycloak.admin.client.Keycloak; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/utils/XmlUtils.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/utils/XmlUtils.java similarity index 96% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/utils/XmlUtils.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/utils/XmlUtils.java index b351d2798e..268d2c0be5 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/utils/XmlUtils.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/utils/XmlUtils.java @@ -1,4 +1,4 @@ -package at.tuwien.utils; +package at.ac.tuwien.ifs.dbrepo.utils; import java.io.File; import java.io.IOException; diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/validator/EndpointValidatorUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/validator/EndpointValidatorUnitTest.java similarity index 94% rename from dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/validator/EndpointValidatorUnitTest.java rename to dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/validator/EndpointValidatorUnitTest.java index 1e7ce07afd..3d3675c285 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/validator/EndpointValidatorUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/validator/EndpointValidatorUnitTest.java @@ -1,20 +1,19 @@ -package at.tuwien.validator; - -import at.tuwien.SortType; -import at.tuwien.api.database.table.CreateTableDto; -import at.tuwien.api.database.table.columns.ColumnTypeDto; -import at.tuwien.api.database.table.columns.CreateTableColumnDto; -import at.tuwien.api.identifier.IdentifierSaveDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.service.AccessService; -import at.tuwien.service.DatabaseService; -import at.tuwien.service.TableService; -import at.tuwien.test.AbstractUnitTest; -import at.tuwien.validation.EndpointValidator; +package at.ac.tuwien.ifs.dbrepo.validator; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.CreateTableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.SortType; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.CreateTableColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierSaveDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.service.AccessService; +import at.ac.tuwien.ifs.dbrepo.service.DatabaseService; +import at.ac.tuwien.ifs.dbrepo.service.TableService; +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import at.ac.tuwien.ifs.dbrepo.validation.EndpointValidator; import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; @@ -38,7 +37,7 @@ import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class EndpointValidatorUnitTest extends AbstractUnitTest { +public class EndpointValidatorUnitTest extends BaseTest { @MockBean private DatabaseService databaseService; @@ -78,11 +77,6 @@ public class EndpointValidatorUnitTest extends AbstractUnitTest { ); } - @BeforeEach - public void beforeEach() { - genesis(); - } - @Test public void validateDataParams_succeeds() throws PaginationException { @@ -216,7 +210,7 @@ public class EndpointValidatorUnitTest extends AbstractUnitTest { when(databaseService.findById(DATABASE_1_ID)) .thenReturn(DATABASE_1); when(accessService.find(eq(DATABASE_1), any(User.class))) - .thenReturn(DATABASE_1_USER_1_READ_ACCESS); + .thenReturn(DATABASE_1.getAccesses().get(0)); /* test */ endpointValidator.validateOnlyAccessOrPublic(DATABASE_1, USER_1_PRINCIPAL); @@ -286,7 +280,7 @@ public class EndpointValidatorUnitTest extends AbstractUnitTest { when(tableService.findById(DATABASE_1, TABLE_1_ID)) .thenReturn(TABLE_1); when(accessService.find(eq(DATABASE_1), any(User.class))) - .thenReturn(DATABASE_1_USER_1_READ_ACCESS); + .thenReturn(DATABASE_1.getAccesses().get(0)); /* test */ assertThrows(NotAllowedException.class, () -> { @@ -374,7 +368,7 @@ public class EndpointValidatorUnitTest extends AbstractUnitTest { when(tableService.findById(DATABASE_1, TABLE_1_ID)) .thenReturn(TABLE_1); when(accessService.find(DATABASE_1, USER_1)) - .thenReturn(DATABASE_1_USER_1_READ_ACCESS); + .thenReturn(DATABASE_1.getAccesses().get(0)); /* test */ assertThrows(NotAllowedException.class, () -> { @@ -610,7 +604,7 @@ public class EndpointValidatorUnitTest extends AbstractUnitTest { public void validateOnlyMineOrWriteAccessOrHasRole_readAccess_fails() { /* test */ - assertFalse(endpointValidator.validateOnlyMineOrWriteAccessOrHasRole(USER_1, USER_1_PRINCIPAL, DATABASE_1_USER_1_READ_ACCESS, "nobody-role")); + assertFalse(endpointValidator.validateOnlyMineOrWriteAccessOrHasRole(USER_1, USER_1_PRINCIPAL, DATABASE_1.getAccesses().get(0), "nobody-role")); } @Test diff --git a/dbrepo-metadata-service/rest-service/src/test/resources/application.properties b/dbrepo-metadata-service/rest-service/src/test/resources/application.properties index 0929175cf7..d96b443102 100644 --- a/dbrepo-metadata-service/rest-service/src/test/resources/application.properties +++ b/dbrepo-metadata-service/rest-service/src/test/resources/application.properties @@ -23,10 +23,10 @@ logging.level.com.github.dockerjava.=warn logging.level.com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.wire.=off # datacite -dbrepo.datacite.url: https://api.test.datacite.org -dbrepo.datacite.prefix: 10.12345 -dbrepo.datacite.username: test-user -dbrepo.datacite.password: test-password +dbrepo.datacite.url= https://api.test.datacite.org +dbrepo.datacite.prefix= 10.12345 +dbrepo.datacite.username= test-user +dbrepo.datacite.password= test-password # s3 dbrepo.s3.accessKeyId=minioadmin diff --git a/dbrepo-metadata-service/rest-service/src/test/resources/doi/database.json b/dbrepo-metadata-service/rest-service/src/test/resources/doi/database.json new file mode 100644 index 0000000000..94508d61a5 --- /dev/null +++ b/dbrepo-metadata-service/rest-service/src/test/resources/doi/database.json @@ -0,0 +1,70 @@ +{ + "indexed": { + "date-parts": [ + [ + 2024, + 12, + 11 + ] + ], + "date-time": "2024-12-11T00:54:48Z", + "timestamp": 1733878488241, + "version": "3.30.1" + }, + "reference-count": 0, + "publisher": "International STM Association", + "content-domain": { + "domain": [], + "crossmark-restriction": false + }, + "DOI": "10.15223\/policy-037", + "type": "database", + "created": { + "date-parts": [ + [ + 2021, + 5, + 3 + ] + ], + "date-time": "2021-05-03T21:10:23Z", + "timestamp": 1620076223000 + }, + "source": "Crossref", + "is-referenced-by-count": 0, + "title": "Article Sharing Framework Policy #37", + "prefix": "10.15223", + "member": "5868", + "container-title": [], + "original-title": [], + "deposited": { + "date-parts": [ + [ + 2021, + 5, + 3 + ] + ], + "date-time": "2021-05-03T21:10:23Z", + "timestamp": 1620076223000 + }, + "score": 1, + "resource": { + "primary": { + "URL": "https:\/\/www.stm-assoc.org\/asf\/policy-037" + } + }, + "subtitle": [], + "short-title": [], + "issued": { + "date-parts": [ + [ + null + ] + ] + }, + "references-count": 0, + "URL": "http:\/\/dx.doi.org\/10.15223\/policy-037", + "relation": {}, + "subject": [] +} \ No newline at end of file diff --git a/dbrepo-metadata-service/rest-service/src/test/resources/doi/dataset.json b/dbrepo-metadata-service/rest-service/src/test/resources/doi/dataset.json new file mode 100644 index 0000000000..f231138689 --- /dev/null +++ b/dbrepo-metadata-service/rest-service/src/test/resources/doi/dataset.json @@ -0,0 +1,25 @@ +{ + "type": "dataset", + "id": "https://doi.org/10.5281/zenodo.1404173", + "author": [ + { + "family": "Marshall", + "given": "Michael" + } + ], + "issued": { + "date-parts": [ + [ + 2018, + 8, + 27 + ] + ] + }, + "abstract": "<strong>Data Set Characteristics:</strong>\n\nNumber of Instances:\n150 (50 in each of three classes)\nNumber of Attributes:\n\n4 numeric, predictive attributes and the class\nAttribute Information:\n\n\n\tsepal length in cm\n\tsepal width in cm\n\tpetal length in cm\n\tpetal width in cm\n\t\n\tclass:\n\n\t\n\t\tIris-Setosa\n\t\tIris-Versicolour\n\t\tIris-Virginica", + "DOI": "10.5281/ZENODO.1404173", + "publisher": "Zenodo", + "title": "Scikit-Learn Iris", + "URL": "https://zenodo.org/record/1404173", + "copyright": "Creative Commons Attribution 4.0" +} \ No newline at end of file diff --git a/dbrepo-metadata-service/rest-service/src/test/resources/doi/journal-article.json b/dbrepo-metadata-service/rest-service/src/test/resources/doi/journal-article.json new file mode 100644 index 0000000000..627ca16767 --- /dev/null +++ b/dbrepo-metadata-service/rest-service/src/test/resources/doi/journal-article.json @@ -0,0 +1,403 @@ +{ + "indexed": { + "date-parts": [ + [ + 2024, + 7, + 1 + ] + ], + "date-time": "2024-07-01T09:15:12Z", + "timestamp": 1719825312147 + }, + "reference-count": 37, + "publisher": "Ubiquity Press, Ltd.", + "content-domain": { + "domain": [], + "crossmark-restriction": false + }, + "published-print": { + "date-parts": [ + [ + 2022, + 2, + 9 + ] + ] + }, + "DOI": "10.5334\/dsj-2022-004", + "type": "journal-article", + "created": { + "date-parts": [ + [ + 2022, + 2, + 9 + ] + ], + "date-time": "2022-02-09T11:11:20Z", + "timestamp": 1644405080000 + }, + "source": "Crossref", + "is-referenced-by-count": 5, + "title": "OSSDIP: Open Source Secure Data Infrastructure and Processes Supporting Data Visiting", + "prefix": "10.5334", + "volume": "21", + "author": [ + { + "ORCID": "http:\/\/orcid.org\/0000-0003-4216-302X", + "authenticated-orcid": false, + "given": "Martin", + "family": "Weise", + "sequence": "first", + "affiliation": [] + }, + { + "ORCID": "http:\/\/orcid.org\/0000-0002-2854-0434", + "authenticated-orcid": false, + "given": "Filip", + "family": "Kovacevic", + "sequence": "additional", + "affiliation": [] + }, + { + "ORCID": "http:\/\/orcid.org\/0000-0003-4615-2774", + "authenticated-orcid": false, + "given": "Nikolas", + "family": "Popper", + "sequence": "additional", + "affiliation": [] + }, + { + "ORCID": "http:\/\/orcid.org\/0000-0002-9272-6225", + "authenticated-orcid": false, + "given": "Andreas", + "family": "Rauber", + "sequence": "additional", + "affiliation": [] + } + ], + "member": "3285", + "reference": [ + { + "key": "key20220209060905_B1", + "volume-title": "Defenders\u2019 Guide to Container Infrastructure Security", + "year": "2019" + }, + { + "issue": "2", + "key": "key20220209060905_B2", + "first-page": "315", + "article-title": "20 remoteneps: Data Dissemination in a Collaborative Workspace", + "volume": "14", + "year": "2011", + "journal-title": "Zeitschrift f\u00fcr Erziehungswissenschaft" + }, + { + "issue": "1", + "key": "key20220209060905_B3", + "article-title": "Kadi4Mat: A Research Data Infrastructure for Materials Science", + "volume": "20", + "year": "2021", + "journal-title": "Data Science Journal" + }, + { + "issue": "1", + "key": "key20220209060905_B4", + "doi-asserted-by": "crossref", + "first-page": "195", + "DOI": "10.1055\/s-0039-1677917", + "article-title": "The French Health Data Hub and the German Medical Informatics Initiatives: Two National Projects to Promote Data Sharing in Healthcare", + "volume": "28", + "year": "2019", + "journal-title": "EN. Yearbook of Medical Informatics" + }, + { + "key": "key20220209060905_B5", + "article-title": "Five Safes: Designing data access for research [Online]", + "year": "2016", + "journal-title": "Economics Working Paper Series 1601" + }, + { + "key": "key20220209060905_B6", + "article-title": "Remote Access to Official Microdata", + "year": "2020" + }, + { + "key": "key20220209060905_B7", + "first-page": "554", + "article-title": "Role-Based Access Controls", + "year": "1992" + }, + { + "key": "key20220209060905_B8", + "article-title": "De-identification of personal information", + "year": "2015", + "journal-title": "National institute of standards and technology" + }, + { + "key": "key20220209060905_B9", + "first-page": "16", + "article-title": "Secure cloud computing with a virtualized network infrastructure", + "year": "2010" + }, + { + "key": "key20220209060905_B10", + "doi-asserted-by": "crossref", + "first-page": "196", + "DOI": "10.1016\/j.jbi.2014.01.003", + "article-title": "A case study of the Secure Anonymous Information Linkage (SAIL) Gateway: A privacy-protecting remote access system for health-related research and evaluation", + "volume": "50", + "year": "2014", + "journal-title": "Journal of Biomedical Informatics" + }, + { + "issue": "4", + "key": "key20220209060905_B11", + "doi-asserted-by": "crossref", + "first-page": "533", + "DOI": "10.1016\/j.giq.2010.10.008", + "article-title": "Key Issues in Data Center Security: An Investigation of Government Audit Reports", + "volume": "28", + "year": "2011", + "journal-title": "Government Information Quarterly" + }, + { + "issue": "5", + "key": "key20220209060905_B12", + "doi-asserted-by": "crossref", + "first-page": "38", + "DOI": "10.1109\/MSEC.2020.2990230", + "article-title": "Dedicated Security Chips in the Age of Secure Enclaves", + "volume": "18", + "year": "2020", + "journal-title": "IEEE Security & Privacy" + }, + { + "issue": "3", + "key": "key20220209060905_B13", + "first-page": "34", + "volume": "41", + "year": "2012", + "journal-title": "Temporal Features in SQL:2011" + }, + { + "issue": "4", + "key": "key20220209060905_B14", + "article-title": "Watermill: An Optimized Fingerprinting System for Databases under Constraints", + "volume": "20", + "year": "2008", + "journal-title": "IEEE Transactions on Knowledge and Data Engineering" + }, + { + "key": "key20220209060905_B15", + "article-title": "Keystone: An Open Framework for Architecting Trusted Execution Environments", + "year": "2020" + }, + { + "key": "key20220209060905_B16", + "first-page": "106", + "article-title": "T-closeness: privacy beyond k-anonymity and l-diversity", + "year": "2007" + }, + { + "issue": "1", + "key": "key20220209060905_B17", + "article-title": "Fingerprinting Relational Databases: Schemes and Specialties", + "volume": "2", + "year": "2005", + "journal-title": "Transactions on Dependable and Secure Computing" + }, + { + "issue": "1", + "key": "key20220209060905_B18", + "doi-asserted-by": "crossref", + "first-page": "3", + "DOI": "10.1145\/1217299.1217302", + "article-title": "L-diversity: privacy beyond k-anonymity", + "volume": "1", + "year": "2007", + "journal-title": "Acm transactions on knowledge discovery from data (tkdd)" + }, + { + "key": "key20220209060905_B19", + "first-page": "1", + "article-title": "Database security threats and challenges", + "year": "2020" + }, + { + "key": "key20220209060905_B20", + "article-title": "Data grid concepts for data security in distributed computing", + "year": "2013", + "journal-title": "Arxiv preprint arxiv:1308.6058" + }, + { + "key": "key20220209060905_B21", + "volume-title": "A vision of a Nordic secure digital infrastructure for health data: The Nordic Commons", + "year": "2019" + }, + { + "key": "key20220209060905_B22", + "unstructured": "Peisert, S. 2021. An Examination and Survey of Data Confidentiality Issues and Solutions in Academic Research Computing. https:\/\/escholarship.org\/uc\/item\/7cz7m1ws. Online; accessed 22 December 2021." + }, + { + "key": "key20220209060905_B23", + "first-page": "561", + "article-title": "Real-Time Screen Watermarking Using Overlaying Layer", + "year": "2014", + "journal-title": "2014 Ninth International Conference on Availability, Reliability and Security" + }, + { + "issue": "4", + "key": "key20220209060905_B24", + "doi-asserted-by": "crossref", + "first-page": "203", + "DOI": "10.11128\/sne.27.tn.10396", + "article-title": "Planning Future Health: Developing Big Data and System Modelling Pipelines for Health System Research", + "volume": "27", + "year": "2017", + "journal-title": "Simulation Notes Europe" + }, + { + "key": "key20220209060905_B25", + "first-page": "231", + "article-title": "Preventing Privilege Escalation", + "year": "2003" + }, + { + "key": "key20220209060905_B26", + "year": "2015", + "journal-title": "Data Citation of Evolving Data: Recommendations of the Working Group on Data Citation (WGDC)" + }, + { + "issue": "1", + "key": "key20220209060905_B27", + "article-title": "Identification of Reproducible Subsets for Data Citation, Sharing and Re-Use", + "volume": "12", + "year": "2016", + "journal-title": "Bulletin of the IEEE Technical Committe on Digital Libraries (TCDL)" + }, + { + "key": "key20220209060905_B28", + "first-page": "199", + "article-title": "Hey, you, get off of my cloud: exploring information leakage in third-party compute clouds", + "year": "2009" + }, + { + "key": "key20220209060905_B29", + "doi-asserted-by": "crossref", + "first-page": "221", + "DOI": "10.1109\/SERVICES.2015.40", + "volume-title": "2015 IEEE world congress on services", + "year": "2015" + }, + { + "key": "key20220209060905_B30", + "doi-asserted-by": "crossref", + "first-page": "611", + "DOI": "10.1007\/978-3-658-11994-2_34", + "volume-title": "Methodological Issues of Longitudinal Surveys: The Example of the National Educational Panel Study", + "year": "2016" + }, + { + "key": "key20220209060905_B31", + "first-page": "1", + "article-title": "A collective attestation scheme towards cloud system", + "year": "2020", + "journal-title": "Cluster computing" + }, + { + "issue": "5", + "key": "key20220209060905_B32", + "doi-asserted-by": "crossref", + "first-page": "557", + "DOI": "10.1142\/S0218488502001648", + "article-title": "K-anonymity: a model for protecting privacy", + "volume": "10", + "year": "2002", + "journal-title": "International journal of uncertainty, fuzziness and knowledge-based systems" + }, + { + "key": "key20220209060905_B33", + "unstructured": "United Kingdom Health Data Research Alliance. 2020. Trusted Research Environments [Online]. URL: https:\/\/ukhealthdata.org\/projects\/aligning-approach-to-trusted-research-environments\/. Accessed September 2020. Version 2.0." + }, + { + "key": "key20220209060905_B34", + "first-page": "34", + "article-title": "FDA-DBRepo: A Data Preservation Repository Supporting FAIR Principles, Data Versioning and Reproducible Queries", + "year": "2021" + }, + { + "key": "key20220209060905_B35", + "first-page": "51", + "article-title": "A Data-Visiting Infrastructure for Providing Access to Preserved Databases that Cannot be Shared or Made Publicly Accessible", + "year": "2021" + }, + { + "key": "key20220209060905_B36", + "article-title": "OpenSAFELY: factors associated with COVID-19-related hospital death in the linked electronic health records of 17 million adult NHS patients", + "year": "2020", + "journal-title": "Medrxiv" + }, + { + "key": "key20220209060905_B37", + "first-page": "305", + "article-title": "Cross-vm side channels and their use to extract private keys", + "year": "2012" + } + ], + "container-title": "Data Science Journal", + "original-title": [], + "language": "en", + "link": [ + { + "URL": "https:\/\/doi.org\/10.5334\/dsj-2022-004", + "content-type": "unspecified", + "content-version": "vor", + "intended-application": "similarity-checking" + } + ], + "deposited": { + "date-parts": [ + [ + 2022, + 7, + 11 + ] + ], + "date-time": "2022-07-11T09:21:08Z", + "timestamp": 1657531268000 + }, + "score": 1, + "resource": { + "primary": { + "URL": "http:\/\/datascience.codata.org\/articles\/10.5334\/dsj-2022-004\/" + } + }, + "subtitle": [], + "short-title": [], + "issued": { + "date-parts": [ + [ + 2022 + ] + ] + }, + "references-count": 37, + "alternative-id": [ + "10.5334\/dsj-2022-004" + ], + "URL": "http:\/\/dx.doi.org\/10.5334\/dsj-2022-004", + "relation": {}, + "ISSN": [ + "1683-1470" + ], + "subject": [], + "published": { + "date-parts": [ + [ + 2022 + ] + ] + } +} \ No newline at end of file diff --git a/dbrepo-metadata-service/rest-service/src/test/resources/doi/proceedings-article.json b/dbrepo-metadata-service/rest-service/src/test/resources/doi/proceedings-article.json new file mode 100644 index 0000000000..429179549a --- /dev/null +++ b/dbrepo-metadata-service/rest-service/src/test/resources/doi/proceedings-article.json @@ -0,0 +1,320 @@ +{ + "indexed": { + "date-parts": [ + [ + 2025, + 1, + 18 + ] + ], + "date-time": "2025-01-18T05:07:56Z", + "timestamp": 1737176876420, + "version": "3.33.0" + }, + "reference-count": 28, + "publisher": "IEEE", + "license": [ + { + "start": { + "date-parts": [ + [ + 2024, + 12, + 15 + ] + ], + "date-time": "2024-12-15T00:00:00Z", + "timestamp": 1734220800000 + }, + "content-version": "stm-asf", + "delay-in-days": 0, + "URL": "https:\/\/doi.org\/10.15223\/policy-029" + }, + { + "start": { + "date-parts": [ + [ + 2024, + 12, + 15 + ] + ], + "date-time": "2024-12-15T00:00:00Z", + "timestamp": 1734220800000 + }, + "content-version": "stm-asf", + "delay-in-days": 0, + "URL": "https:\/\/doi.org\/10.15223\/policy-037" + } + ], + "funder": [ + { + "DOI": "10.13039\/100016234", + "name": "ASEAN-European Academic University Network", + "doi-asserted-by": "publisher", + "id": [ + { + "id": "10.13039\/100016234", + "id-type": "DOI", + "asserted-by": "publisher" + } + ] + } + ], + "content-domain": { + "domain": [], + "crossmark-restriction": false + }, + "published-print": { + "date-parts": [ + [ + 2024, + 12, + 15 + ] + ] + }, + "DOI": "10.1109\/bigdata62323.2024.10825401", + "type": "proceedings-article", + "created": { + "date-parts": [ + [ + 2025, + 1, + 16 + ] + ], + "date-time": "2025-01-16T18:31:23Z", + "timestamp": 1737052283000 + }, + "page": "322-331", + "source": "Crossref", + "is-referenced-by-count": 0, + "title": "DBRepo: A Data Repository System for Research Data in Databases", + "prefix": "10.1109", + "author": [ + { + "given": "Martin", + "family": "Weise", + "sequence": "first", + "affiliation": [ + { + "name": "ISE, TU Wien,Data Science Research Unit,Vienna,Austria" + } + ] + }, + { + "given": "Andreas", + "family": "Rauber", + "sequence": "additional", + "affiliation": [ + { + "name": "ISE, TU Wien,Data Science Research Unit,Vienna,Austria" + } + ] + } + ], + "member": "263", + "reference": [ + { + "key": "ref1", + "doi-asserted-by": "publisher", + "DOI": "10.1002\/0470867167.ch36" + }, + { + "key": "ref2", + "doi-asserted-by": "publisher", + "DOI": "10.2218\/ijdc.v17i1.825" + }, + { + "key": "ref3", + "doi-asserted-by": "publisher", + "DOI": "10.1145\/2380776.2380786" + }, + { + "key": "ref4", + "doi-asserted-by": "publisher", + "DOI": "10.1038\/sdata.2016.18" + }, + { + "year": "2024", + "key": "ref5", + "article-title": "DataCite Metadata Schema Documentation for the Publication and Citation of Research Data and Other Research Outputs v4.5" + }, + { + "article-title": "Digital Cartographic Standard for Geologic Map Symbolization", + "volume-title": "Tech. Rep.", + "year": "2006", + "key": "ref6" + }, + { + "article-title": "FAIR Digital Objects and FAIR Signposting", + "year": "2023", + "author": "Van de Sompel", + "key": "ref7" + }, + { + "key": "ref8", + "doi-asserted-by": "publisher", + "DOI": "10.1086\/666656" + }, + { + "key": "ref9", + "doi-asserted-by": "publisher", + "DOI": "10.1162\/99608f92.be565013" + }, + { + "key": "ref10", + "doi-asserted-by": "publisher", + "DOI": "10.1045\/january2003-smith" + }, + { + "key": "ref11", + "doi-asserted-by": "publisher", + "DOI": "10.1177\/0049124107306660" + }, + { + "key": "ref12", + "first-page": "157", + "article-title": "The Dryad Data Repository: a Singapore Framework metadata Architecture in a DSpace Environment", + "volume-title": "Proceedings of the 2008 International Conference on Dublin Core and Metadata Applications", + "author": "White" + }, + { + "key": "ref13", + "doi-asserted-by": "publisher", + "DOI": "10.5670\/oceanog.2014.50" + }, + { + "key": "ref14", + "doi-asserted-by": "publisher", + "DOI": "10.1109\/SOCA.2016.15" + }, + { + "key": "ref15", + "first-page": "83", + "article-title": "Introduction to Institutional Data Repositories Workshop", + "author": "Witt", + "year": "2008", + "journal-title": "Libraries Research Publications" + }, + { + "key": "ref16", + "doi-asserted-by": "publisher", + "DOI": "10.1109\/ICDE.2018.00098" + }, + { + "key": "ref17", + "doi-asserted-by": "publisher", + "DOI": "10.1145\/2737924.2737959" + }, + { + "key": "ref18", + "doi-asserted-by": "publisher", + "DOI": "10.1109\/ICoDSE56892.2022.9971958" + }, + { + "key": "ref19", + "doi-asserted-by": "publisher", + "DOI": "10.1016\/j.promfg.2019.03.032" + }, + { + "key": "ref20", + "doi-asserted-by": "publisher", + "DOI": "10.1016\/j.trpro.2023.11.866" + }, + { + "volume-title": "Emissionstrends 1990-2022", + "year": "2024", + "author": "Anderl", + "key": "ref21" + }, + { + "key": "ref22", + "doi-asserted-by": "publisher", + "DOI": "10.1109\/TVCG.2018.2864903" + }, + { + "key": "ref23", + "doi-asserted-by": "publisher", + "DOI": "10.1016\/j.scitotenv.2016.06.235" + }, + { + "key": "ref24", + "doi-asserted-by": "publisher", + "DOI": "10.1186\/s12302-024-00862-4" + }, + { + "key": "ref25", + "doi-asserted-by": "publisher", + "DOI": "10.1038\/533452a" + }, + { + "key": "ref26", + "doi-asserted-by": "publisher", + "DOI": "10.18653\/v1\/2024.findings-acl.137" + }, + { + "author": "Altug", + "key": "ref27", + "article-title": "Generating Semantic Context for Data Interoperability in Relational Databases using bge M3-Embeddings" + }, + { + "key": "ref28", + "doi-asserted-by": "publisher", + "DOI": "10.1186\/s13643-019-1250-y" + } + ], + "event": "2024 IEEE International Conference on Big Data (BigData)", + "container-title": "2024 IEEE International Conference on Big Data (BigData)", + "original-title": [], + "link": [ + { + "URL": "http:\/\/xplorestaging.ieee.org\/ielx8\/10824975\/10824942\/10825401.pdf?arnumber=10825401", + "content-type": "unspecified", + "content-version": "vor", + "intended-application": "similarity-checking" + } + ], + "deposited": { + "date-parts": [ + [ + 2025, + 1, + 17 + ] + ], + "date-time": "2025-01-17T07:55:27Z", + "timestamp": 1737100527000 + }, + "score": 1, + "resource": { + "primary": { + "URL": "https:\/\/ieeexplore.ieee.org\/document\/10825401\/" + } + }, + "subtitle": [], + "short-title": [], + "issued": { + "date-parts": [ + [ + 2024, + 12, + 15 + ] + ] + }, + "references-count": 28, + "URL": "http:\/\/dx.doi.org\/10.1109\/BigData62323.2024.10825401", + "relation": {}, + "subject": [], + "published": { + "date-parts": [ + [ + 2024, + 12, + 15 + ] + ] + } +} \ No newline at end of file diff --git a/dbrepo-metadata-service/services/pom.xml b/dbrepo-metadata-service/services/pom.xml index a0b354871b..12d34b7e8f 100644 --- a/dbrepo-metadata-service/services/pom.xml +++ b/dbrepo-metadata-service/services/pom.xml @@ -6,17 +6,17 @@ <parent> <artifactId>dbrepo-metadata-service</artifactId> <groupId>at.tuwien</groupId> - <version>1.7.3</version> + <version>1.8.0</version> </parent> <artifactId>dbrepo-metadata-service-services</artifactId> <name>dbrepo-metadata-service-services</name> - <version>1.7.3</version> + <version>1.8.0</version> <dependencies> <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-api</artifactId> + <groupId>at.ac.tuwien.ifs.dbrepo</groupId> + <artifactId>dbrepo-core</artifactId> <version>${project.version}</version> </dependency> <dependency> @@ -24,11 +24,6 @@ <artifactId>dbrepo-metadata-service-oai</artifactId> <version>${project.version}</version> </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-entities</artifactId> - <version>${project.version}</version> - </dependency> <dependency> <groupId>at.tuwien</groupId> <artifactId>dbrepo-metadata-service-repositories</artifactId> diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/auth/AuthTokenFilter.java similarity index 95% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/auth/AuthTokenFilter.java index b056eafe17..fc7d7bdaa2 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/auth/AuthTokenFilter.java @@ -1,7 +1,7 @@ -package at.tuwien.auth; +package at.ac.tuwien.ifs.dbrepo.auth; -import at.tuwien.api.auth.RealmAccessDto; -import at.tuwien.api.user.UserDetailsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.auth.RealmAccessDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDetailsDto; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; @@ -91,7 +91,7 @@ public class AuthTokenFilter extends OncePerRequestFilter { public String parseJwt(HttpServletRequest request) { String headerAuth = request.getHeader("Authorization"); if (StringUtils.hasText(headerAuth) && headerAuth.startsWith("Bearer ")) { - return headerAuth.substring(7, headerAuth.length()); + return headerAuth.substring(7); } return null; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/auth/BasicAuthenticationProvider.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/auth/BasicAuthenticationProvider.java similarity index 84% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/auth/BasicAuthenticationProvider.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/auth/BasicAuthenticationProvider.java index 963249b393..5ab64107cd 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/auth/BasicAuthenticationProvider.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/auth/BasicAuthenticationProvider.java @@ -1,7 +1,7 @@ -package at.tuwien.auth; +package at.ac.tuwien.ifs.dbrepo.auth; -import at.tuwien.api.keycloak.TokenDto; -import at.tuwien.service.CredentialService; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.service.CredentialService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; @@ -28,7 +28,7 @@ public class BasicAuthenticationProvider implements AuthenticationManager { public Authentication authenticate(Authentication auth) throws AuthenticationException { final TokenDto tokenDto = credentialService.getAccessToken(auth.getName(), auth.getCredentials().toString()); final UserDetails userDetails = authTokenFilter.verifyJwt(tokenDto.getAccessToken()); - log.debug("set basic auth principal: {}", userDetails); + log.debug("set basic auth principal username: {}", userDetails.getUsername()); return new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); } } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/auth/InternalRequestInterceptor.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/auth/InternalRequestInterceptor.java similarity index 87% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/auth/InternalRequestInterceptor.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/auth/InternalRequestInterceptor.java index 6d7480ba80..272dfda2cf 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/auth/InternalRequestInterceptor.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/auth/InternalRequestInterceptor.java @@ -1,8 +1,8 @@ -package at.tuwien.auth; +package at.ac.tuwien.ifs.dbrepo.auth; -import at.tuwien.api.keycloak.TokenDto; -import at.tuwien.config.GatewayConfig; -import at.tuwien.service.CredentialService; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.config.GatewayConfig; +import at.ac.tuwien.ifs.dbrepo.service.CredentialService; import lombok.extern.log4j.Log4j2; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpRequest; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/CacheConfig.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/CacheConfig.java similarity index 89% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/config/CacheConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/CacheConfig.java index 9229927e83..4fd448efa2 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/CacheConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/CacheConfig.java @@ -1,6 +1,6 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; -import at.tuwien.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; import org.springframework.beans.factory.annotation.Value; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/DataCiteConfig.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/DataCiteConfig.java similarity index 97% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/config/DataCiteConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/DataCiteConfig.java index 9667553119..1c00d625dd 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/DataCiteConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/DataCiteConfig.java @@ -1,4 +1,4 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; import lombok.Getter; import lombok.extern.log4j.Log4j2; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/EndpointConfig.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/EndpointConfig.java similarity index 86% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/config/EndpointConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/EndpointConfig.java index 20e2805a03..2512863082 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/EndpointConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/EndpointConfig.java @@ -1,4 +1,4 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; import lombok.Getter; import org.springframework.beans.factory.annotation.Value; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/GatewayConfig.java similarity index 69% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/config/GatewayConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/GatewayConfig.java index 34b0acbcb7..a7f9992650 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/GatewayConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/GatewayConfig.java @@ -1,7 +1,7 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; -import at.tuwien.auth.InternalRequestInterceptor; -import at.tuwien.service.CredentialService; +import at.ac.tuwien.ifs.dbrepo.auth.InternalRequestInterceptor; +import at.ac.tuwien.ifs.dbrepo.service.CredentialService; import lombok.Getter; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; @@ -27,12 +27,18 @@ public class GatewayConfig { @Value("${dbrepo.endpoints.searchService}") private String searchEndpoint; + @Value("${dbrepo.endpoints.dashboardService}") + private String dashboardEndpoint; + @Value("${dbrepo.endpoints.rorService}") private String rorEndpoint; @Value("${dbrepo.endpoints.crossRefService}") private String crossRefEndpoint; + @Value("${dbrepo.endpoints.doiService}") + private String doiEndpoint; + @Value("${spring.rabbitmq.username}") private String brokerUsername; @@ -89,4 +95,27 @@ public class GatewayConfig { return restTemplate; } + @Bean("dashboardServiceRestTemplate") + public RestTemplate dashboardServiceRestTemplate() { + final RestTemplate restTemplate = new RestTemplate(); + restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(dashboardEndpoint)); + restTemplate.getInterceptors() + .add(new InternalRequestInterceptor(credentialService, this)); + return restTemplate; + } + + @Bean("doiServiceRestTemplate") + public RestTemplate doiServiceRestTemplate() { + final RestTemplate restTemplate = new RestTemplate(); + restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(doiEndpoint)); + return restTemplate; + } + + @Bean("crossRefServiceRestTemplate") + public RestTemplate crossRefServiceRestTemplate() { + final RestTemplate restTemplate = new RestTemplate(); + restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(crossRefEndpoint)); + return restTemplate; + } + } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/JacksonConfig.java similarity index 84% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/config/JacksonConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/JacksonConfig.java index 61e7f2b180..8ff2d5434e 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/JacksonConfig.java @@ -1,6 +1,5 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.hibernate6.Hibernate6Module; @@ -10,7 +9,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import java.util.Date; import java.util.TimeZone; @Slf4j @@ -18,7 +16,7 @@ import java.util.TimeZone; public class JacksonConfig { @Bean - public ObjectMapper objectMapper() throws JsonProcessingException { + public ObjectMapper objectMapper() { final ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new Jdk8Module()); objectMapper.registerModule(new JavaTimeModule()); diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/JenaConfig.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/JenaConfig.java similarity index 92% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/config/JenaConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/JenaConfig.java index e9395e4470..4e1868e8b8 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/JenaConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/JenaConfig.java @@ -1,4 +1,4 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; import lombok.Getter; import org.apache.jena.query.Dataset; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/KeycloakConfig.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/KeycloakConfig.java similarity index 96% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/config/KeycloakConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/KeycloakConfig.java index 4b62b61dcb..34596462e7 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/KeycloakConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/KeycloakConfig.java @@ -1,4 +1,4 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; import lombok.Getter; import org.keycloak.admin.client.Keycloak; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/MetadataConfig.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/MetadataConfig.java similarity index 93% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/config/MetadataConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/MetadataConfig.java index d2484407ee..f79360781e 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/MetadataConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/MetadataConfig.java @@ -1,4 +1,4 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; import lombok.Getter; import org.springframework.beans.factory.annotation.Value; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/MetricsConfig.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/MetricsConfig.java similarity index 90% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/config/MetricsConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/MetricsConfig.java index b86a97a4dc..8509d27c44 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/MetricsConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/MetricsConfig.java @@ -1,10 +1,10 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; -import at.tuwien.entities.database.table.Table; -import at.tuwien.repository.DatabaseRepository; -import at.tuwien.repository.IdentifierRepository; -import at.tuwien.repository.TableRepository; -import at.tuwien.repository.ViewRepository; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.repository.DatabaseRepository; +import at.ac.tuwien.ifs.dbrepo.repository.IdentifierRepository; +import at.ac.tuwien.ifs.dbrepo.repository.TableRepository; +import at.ac.tuwien.ifs.dbrepo.repository.ViewRepository; import io.micrometer.core.instrument.Gauge; import io.micrometer.core.instrument.Metrics; import io.micrometer.observation.ObservationRegistry; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/RabbitConfig.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/RabbitConfig.java similarity index 93% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/config/RabbitConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/RabbitConfig.java index 0ed5001dd4..a727e972e2 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/RabbitConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/RabbitConfig.java @@ -1,4 +1,4 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; import lombok.Getter; import lombok.extern.log4j.Log4j2; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/S3Config.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/S3Config.java similarity index 97% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/config/S3Config.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/S3Config.java index 6c82c29e25..6202d2b2a8 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/S3Config.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/S3Config.java @@ -1,4 +1,4 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; import lombok.Getter; import lombok.extern.slf4j.Slf4j; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/SecurityConfig.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/SecurityConfig.java similarity index 91% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/config/SecurityConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/SecurityConfig.java index 03be90470f..1d08f95630 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/SecurityConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/SecurityConfig.java @@ -1,4 +1,4 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/TemplateConfig.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/TemplateConfig.java similarity index 96% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/config/TemplateConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/TemplateConfig.java index d38f17c6cb..28c5210e29 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/TemplateConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/TemplateConfig.java @@ -1,4 +1,4 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/WebSecurityConfig.java similarity index 95% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/WebSecurityConfig.java index 2413384696..653c25c337 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/config/WebSecurityConfig.java @@ -1,8 +1,8 @@ -package at.tuwien.config; +package at.ac.tuwien.ifs.dbrepo.config; -import at.tuwien.auth.AuthTokenFilter; -import at.tuwien.auth.BasicAuthenticationProvider; -import at.tuwien.service.CredentialService; +import at.ac.tuwien.ifs.dbrepo.auth.AuthTokenFilter; +import at.ac.tuwien.ifs.dbrepo.auth.BasicAuthenticationProvider; +import at.ac.tuwien.ifs.dbrepo.service.CredentialService; import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; import io.swagger.v3.oas.annotations.security.SecurityScheme; import jakarta.servlet.http.HttpServletResponse; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/BrokerServiceGateway.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/BrokerServiceGateway.java similarity index 85% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/BrokerServiceGateway.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/BrokerServiceGateway.java index 42e8912d0c..44e3938980 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/BrokerServiceGateway.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/BrokerServiceGateway.java @@ -1,8 +1,8 @@ -package at.tuwien.gateway; +package at.ac.tuwien.ifs.dbrepo.gateway; -import at.tuwien.api.amqp.*; -import at.tuwien.api.user.ExchangeUpdatePermissionsDto; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.amqp.*; +import at.ac.tuwien.ifs.dbrepo.core.api.user.ExchangeUpdatePermissionsDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; public interface BrokerServiceGateway { diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/CrossrefGateway.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/CrossRefGateway.java similarity index 53% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/CrossrefGateway.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/CrossRefGateway.java index 58e023ac9d..83b0446827 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/CrossrefGateway.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/CrossRefGateway.java @@ -1,9 +1,9 @@ -package at.tuwien.gateway; +package at.ac.tuwien.ifs.dbrepo.gateway; -import at.tuwien.api.crossref.CrossrefDto; -import at.tuwien.exception.DoiNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.api.crossref.CrossRefDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.DoiNotFoundException; -public interface CrossrefGateway { +public interface CrossRefGateway { /** * Retrieves metadata from the CrossRef funder database for a given CrossRef id. @@ -12,5 +12,5 @@ public interface CrossrefGateway { * @return The CrossRef metadata from the CrossRef funder database. * @throws DoiNotFoundException The metadata was not found in the CrossRef funder database. */ - CrossrefDto findById(String id) throws DoiNotFoundException; + CrossRefDto findById(String id) throws DoiNotFoundException; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/DashboardServiceGateway.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/DashboardServiceGateway.java new file mode 100644 index 0000000000..95df0c6548 --- /dev/null +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/DashboardServiceGateway.java @@ -0,0 +1,51 @@ +package at.ac.tuwien.ifs.dbrepo.gateway; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.CreateDashboardDto; +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.CreateDashboardResponseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.PermissionTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.DashboardServiceConnectionException; +import at.ac.tuwien.ifs.dbrepo.core.exception.DashboardServiceException; + +public interface DashboardServiceGateway { + + /** + * Updates a dashboard configuration by given database. + * @param database The database. + * @throws DashboardServiceConnectionException The connection to the dashboard service failed. + * @throws DashboardServiceException The dashboard service failed to update the dashboard configuration. + */ + void update(DatabaseDto database) throws DashboardServiceConnectionException, DashboardServiceException; + + /** + * Creates a dashboard by given metadata. + * @param data The metadata. + * @return The dashboard response. + * @throws DashboardServiceConnectionException The connection to the dashboard service failed. + * @throws DashboardServiceException The dashboard service failed to create the dashboard. + */ + CreateDashboardResponseDto create(CreateDashboardDto data) throws DashboardServiceConnectionException, + DashboardServiceException; + + /** + * Updates the access on a dashboard for a given user by given dashboard uid and username. + * @param dashboardUid The dashboard uid. + * @param username The username. + * @param permission The access. + * @throws DashboardServiceConnectionException The connection to the dashboard service failed. + * @throws DashboardServiceException The dashboard service failed to update access to the dashboard. + */ + void updateAccess(String dashboardUid, String username, PermissionTypeDto permission) + throws DashboardServiceConnectionException, DashboardServiceException; + + /** + * Updates the access on a dashboard for anonymous users by given dashboard uid. + * @param dashboardUid The dashboard uid. + * @param database The database. + * @throws DashboardServiceConnectionException The connection to the dashboard service failed. + * @throws DashboardServiceException The dashboard service failed to update access to the dashboard. + */ + void updateAnonymousAccess(String dashboardUid, DatabaseBriefDto database) + throws DashboardServiceConnectionException, DashboardServiceException; +} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/DataServiceGateway.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/DataServiceGateway.java similarity index 90% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/DataServiceGateway.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/DataServiceGateway.java index 3996448d21..d7d54ca8e7 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/DataServiceGateway.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/DataServiceGateway.java @@ -1,17 +1,17 @@ -package at.tuwien.gateway; - -import at.tuwien.api.database.AccessTypeDto; -import at.tuwien.api.database.CreateViewDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.internal.CreateDatabaseDto; -import at.tuwien.api.database.query.QueryDto; -import at.tuwien.api.database.table.CreateTableDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.TableStatisticDto; -import at.tuwien.api.database.table.TableUpdateDto; -import at.tuwien.api.user.internal.UpdateUserPasswordDto; -import at.tuwien.exception.*; +package at.ac.tuwien.ifs.dbrepo.gateway; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.AccessTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.CreateViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.internal.CreateDatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.QueryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.CreateTableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableStatisticDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.internal.UpdateUserPasswordDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import java.util.List; import java.util.UUID; @@ -173,7 +173,7 @@ public interface DataServiceGateway { * * @param databaseId The database id. * @param tableId The table id. - * @return The statistic, if successful. + * @return The statistic, if successful. If no column can be analyzed, the response is null. * @throws DataServiceConnectionException The connection to the data service could not be established. * @throws DataServiceException The data service responded unexpectedly. * @throws TableNotFoundException The table was not found in the database. diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/KeycloakGateway.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/KeycloakGateway.java similarity index 65% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/KeycloakGateway.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/KeycloakGateway.java index 9436db80cb..a829db05bf 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/KeycloakGateway.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/KeycloakGateway.java @@ -1,9 +1,9 @@ -package at.tuwien.gateway; +package at.ac.tuwien.ifs.dbrepo.gateway; -import at.tuwien.api.keycloak.TokenDto; -import at.tuwien.api.user.UserUpdateDto; -import at.tuwien.exception.AuthServiceException; -import at.tuwien.exception.UserNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.AuthServiceException; +import at.ac.tuwien.ifs.dbrepo.core.exception.UserNotFoundException; import org.keycloak.representations.idm.UserRepresentation; import java.util.UUID; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/OrcidGateway.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/OrcidGateway.java similarity index 69% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/OrcidGateway.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/OrcidGateway.java index 2cd5f142e6..98336290b3 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/OrcidGateway.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/OrcidGateway.java @@ -1,7 +1,7 @@ -package at.tuwien.gateway; +package at.ac.tuwien.ifs.dbrepo.gateway; -import at.tuwien.api.orcid.OrcidDto; -import at.tuwien.exception.OrcidNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.OrcidDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.OrcidNotFoundException; import org.springframework.stereotype.Service; @Service diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/RorGateway.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/RorGateway.java similarity index 69% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/RorGateway.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/RorGateway.java index 27603b9919..8a49aa636b 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/RorGateway.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/RorGateway.java @@ -1,7 +1,7 @@ -package at.tuwien.gateway; +package at.ac.tuwien.ifs.dbrepo.gateway; -import at.tuwien.api.ror.RorDto; -import at.tuwien.exception.RorNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.api.ror.RorDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.RorNotFoundException; public interface RorGateway { diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/SearchServiceGateway.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/SearchServiceGateway.java similarity index 60% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/SearchServiceGateway.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/SearchServiceGateway.java index 1b3b20485f..fdf4b430fe 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/SearchServiceGateway.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/SearchServiceGateway.java @@ -1,8 +1,8 @@ -package at.tuwien.gateway; +package at.ac.tuwien.ifs.dbrepo.gateway; -import at.tuwien.api.database.DatabaseBriefDto; -import at.tuwien.entities.database.Database; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import java.util.UUID; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/BrokerServiceGatewayImpl.java similarity index 94% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/BrokerServiceGatewayImpl.java index da1c289185..9c35fa4182 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/BrokerServiceGatewayImpl.java @@ -1,17 +1,16 @@ -package at.tuwien.gateway.impl; +package at.ac.tuwien.ifs.dbrepo.gateway.impl; -import at.tuwien.api.amqp.*; -import at.tuwien.api.user.ExchangeUpdatePermissionsDto; -import at.tuwien.config.RabbitConfig; -import at.tuwien.exception.*; -import at.tuwien.gateway.BrokerServiceGateway; +import at.ac.tuwien.ifs.dbrepo.core.api.amqp.*; +import at.ac.tuwien.ifs.dbrepo.core.api.user.ExchangeUpdatePermissionsDto; +import at.ac.tuwien.ifs.dbrepo.config.RabbitConfig; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.gateway.BrokerServiceGateway; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.web.client.HttpServerErrorException; -import org.springframework.web.client.ResourceAccessException; import org.springframework.web.client.RestTemplate; @Slf4j diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/CrossrefGatewayImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/CrossRefGatewayImpl.java similarity index 64% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/CrossrefGatewayImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/CrossRefGatewayImpl.java index 8fd957f330..559f3b7657 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/CrossrefGatewayImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/CrossRefGatewayImpl.java @@ -1,40 +1,40 @@ -package at.tuwien.gateway.impl; +package at.ac.tuwien.ifs.dbrepo.gateway.impl; -import at.tuwien.api.crossref.CrossrefDto; -import at.tuwien.config.GatewayConfig; -import at.tuwien.exception.DoiNotFoundException; -import at.tuwien.gateway.CrossrefGateway; +import at.ac.tuwien.ifs.dbrepo.config.GatewayConfig; +import at.ac.tuwien.ifs.dbrepo.core.api.crossref.CrossRefDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.DoiNotFoundException; +import at.ac.tuwien.ifs.dbrepo.gateway.CrossRefGateway; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.HttpServerErrorException; -import org.springframework.web.client.ResourceAccessException; import org.springframework.web.client.RestTemplate; @Log4j2 @Service -public class CrossrefGatewayImpl implements CrossrefGateway { +public class CrossRefGatewayImpl implements CrossRefGateway { private final RestTemplate restTemplate; private final GatewayConfig gatewayConfig; @Autowired - public CrossrefGatewayImpl(RestTemplate restTemplate, GatewayConfig gatewayConfig) { + public CrossRefGatewayImpl(@Qualifier("crossRefServiceRestTemplate") RestTemplate restTemplate, + GatewayConfig gatewayConfig) { this.restTemplate = restTemplate; this.gatewayConfig = gatewayConfig; } @Override - public CrossrefDto findById(String id) throws DoiNotFoundException { + public CrossRefDto findById(String id) throws DoiNotFoundException { final String path = "/fundingdata/funder/" + id; log.trace("find crossref metadata by id from endpoint {} with path {}", gatewayConfig.getCrossRefEndpoint(), path); - final ResponseEntity<CrossrefDto> response; + final ResponseEntity<CrossRefDto> response; try { - response = restTemplate.exchange(gatewayConfig.getCrossRefEndpoint() + path, HttpMethod.GET, HttpEntity.EMPTY, CrossrefDto.class); + response = restTemplate.exchange(gatewayConfig.getCrossRefEndpoint() + path, HttpMethod.GET, HttpEntity.EMPTY, CrossRefDto.class); } catch (HttpServerErrorException e) { log.error("Failed to retrieve crossref metadata: {}", e.getMessage()); throw new DoiNotFoundException("Failed to retrieve crossref metadata: " + e.getMessage(), e); diff --git a/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/DashboardServiceGatewayImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/DashboardServiceGatewayImpl.java new file mode 100644 index 0000000000..8f36db0f3b --- /dev/null +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/DashboardServiceGatewayImpl.java @@ -0,0 +1,142 @@ +package at.ac.tuwien.ifs.dbrepo.gateway.impl; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.CreateDashboardDto; +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.CreateDashboardResponseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.PermissionTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.UpdateDashboardAccessDto; +import at.ac.tuwien.ifs.dbrepo.config.GatewayConfig; +import at.ac.tuwien.ifs.dbrepo.core.exception.DashboardServiceConnectionException; +import at.ac.tuwien.ifs.dbrepo.core.exception.DashboardServiceException; +import at.ac.tuwien.ifs.dbrepo.gateway.DashboardServiceGateway; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.HttpServerErrorException; +import org.springframework.web.client.ResourceAccessException; +import org.springframework.web.client.RestTemplate; + +@Log4j2 +@Service +public class DashboardServiceGatewayImpl implements DashboardServiceGateway { + + private final RestTemplate restTemplate; + private final GatewayConfig gatewayConfig; + + @Autowired + public DashboardServiceGatewayImpl(@Qualifier("dashboardServiceRestTemplate") RestTemplate restTemplate, + GatewayConfig gatewayConfig) { + this.restTemplate = restTemplate; + this.gatewayConfig = gatewayConfig; + } + + @Override + public void update(DatabaseDto database) throws DashboardServiceConnectionException, DashboardServiceException { + final ResponseEntity<Void> response; + final String path = "/api/dashboard/" + database.getDashboardUid(); + log.trace("update dashboard at endpoint {} with path {}", gatewayConfig.getDashboardEndpoint(), path); + try { + response = restTemplate.exchange(path, HttpMethod.PUT, new HttpEntity<>(database), Void.class); + } catch (ResourceAccessException | HttpServerErrorException.ServiceUnavailable | + HttpServerErrorException.InternalServerError e) { + log.error("Failed to update dashboard: {}", e.getMessage()); + throw new DashboardServiceConnectionException("Failed to update dashboard: " + e.getMessage(), e); + } catch (HttpClientErrorException.Unauthorized e) { + log.error("Failed to update dashboard: unauthorized: {}", e.getMessage()); + throw new DashboardServiceException("Failed to update dashboard: unauthorized: " + e.getMessage(), e); + } + if (!response.getStatusCode().equals(HttpStatus.ACCEPTED)) { + log.error("Failed to update dashboard: response code is not 202"); + throw new DashboardServiceException("Failed to update dashboard: response code is not 202"); + } + log.info("Updated dashboard with uid: {}", database.getDashboardUid()); + } + + @Override + public CreateDashboardResponseDto create(CreateDashboardDto data) throws DashboardServiceConnectionException, + DashboardServiceException { + final ResponseEntity<CreateDashboardResponseDto> response; + final String path = "/api/dashboard"; + log.trace("create dashboard at endpoint {} with path {}", gatewayConfig.getDashboardEndpoint(), path); + try { + response = restTemplate.exchange(path, HttpMethod.POST, new HttpEntity<>(data), CreateDashboardResponseDto.class); + } catch (ResourceAccessException | HttpServerErrorException.ServiceUnavailable | + HttpServerErrorException.InternalServerError e) { + log.error("Failed to create dashboard: {}", e.getMessage()); + throw new DashboardServiceConnectionException("Failed to create dashboard: " + e.getMessage(), e); + } catch (HttpClientErrorException.BadRequest | HttpClientErrorException.Unauthorized e) { + log.error("Failed to create dashboard: malformed payload: {}", e.getMessage()); + throw new DashboardServiceException("Failed to create dashboard: malformed payload: " + e.getMessage(), e); + } catch (HttpClientErrorException.Conflict e) { + log.error("Failed to create dashboard: exists: {}", e.getMessage()); + throw new DashboardServiceException("Failed to create dashboard: exists: " + e.getMessage(), e); + } + if (!response.getStatusCode().equals(HttpStatus.CREATED)) { + log.error("Failed to create dashboard: response code is not 201"); + throw new DashboardServiceException("Failed to create dashboard: response code is not 201"); + } + final CreateDashboardResponseDto body = response.getBody(); + if (body == null) { + log.error("Failed to create dashboard: body is empty"); + throw new DashboardServiceException("Failed to create dashboard: body is empty"); + } + log.info("Created dashboard with uid: {}", body.getUid()); + return body; + } + + @Override + public void updateAccess(String dashboardUid, String username, PermissionTypeDto permission) + throws DashboardServiceConnectionException, DashboardServiceException { + final ResponseEntity<Void> response; + final String path = "/api/dashboard/" + dashboardUid + "/access/" + username; + log.trace("update dashboard access at endpoint {} with path {}", gatewayConfig.getDashboardEndpoint(), path); + try { + response = restTemplate.exchange(path, HttpMethod.PUT, new HttpEntity<>(UpdateDashboardAccessDto.builder() + .permission(permission) + .build()), Void.class); + } catch (ResourceAccessException | HttpServerErrorException.ServiceUnavailable | + HttpServerErrorException.InternalServerError e) { + log.error("Failed to update dashboard access: {}", e.getMessage()); + throw new DashboardServiceConnectionException("Failed to update dashboard access: " + e.getMessage(), e); + } catch (HttpClientErrorException.BadRequest | HttpClientErrorException.Unauthorized e) { + log.error("Failed to update dashboard access: malformed payload: {}", e.getMessage()); + throw new DashboardServiceException("Failed to update dashboard access: malformed payload: " + e.getMessage(), e); + } + if (!response.getStatusCode().equals(HttpStatus.ACCEPTED)) { + log.error("Failed to update dashboard access: response code is not 202"); + throw new DashboardServiceException("Failed to update dashboard access: response code is not 202"); + } + log.info("Updated dashboard access for user with username: {}", username); + } + + @Override + public void updateAnonymousAccess(String dashboardUid, DatabaseBriefDto database) + throws DashboardServiceConnectionException, DashboardServiceException { + final ResponseEntity<Void> response; + final String path = "/api/dashboard/" + dashboardUid + "/access"; + log.trace("update dashboard anonymous access at endpoint {} with path {}", gatewayConfig.getDashboardEndpoint(), + path); + try { + response = restTemplate.exchange(path, HttpMethod.PUT, new HttpEntity<>(database), Void.class); + } catch (ResourceAccessException | HttpServerErrorException.ServiceUnavailable | + HttpServerErrorException.InternalServerError e) { + log.error("Failed to update dashboard anonymous access: {}", e.getMessage()); + throw new DashboardServiceConnectionException("Failed to update dashboard anonymous access: " + e.getMessage(), e); + } catch (HttpClientErrorException.BadRequest | HttpClientErrorException.Unauthorized e) { + log.error("Failed to update dashboard anonymous access: malformed payload: {}", e.getMessage()); + throw new DashboardServiceException("Failed to update dashboard anonymous access: malformed payload: " + e.getMessage(), e); + } + if (!response.getStatusCode().equals(HttpStatus.ACCEPTED)) { + log.error("Failed to update dashboard access: response code is not 202"); + throw new DashboardServiceException("Failed to update dashboard access: response code is not 202"); + } + log.info("Updated dashboard anonymous access"); + } +} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/DataServiceGatewayImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/DataServiceGatewayImpl.java similarity index 96% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/DataServiceGatewayImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/DataServiceGatewayImpl.java index ba855feda3..41ab74b9cc 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/DataServiceGatewayImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/DataServiceGatewayImpl.java @@ -1,16 +1,16 @@ -package at.tuwien.gateway.impl; +package at.ac.tuwien.ifs.dbrepo.gateway.impl; -import at.tuwien.api.database.*; -import at.tuwien.api.database.internal.CreateDatabaseDto; -import at.tuwien.api.database.query.QueryDto; -import at.tuwien.api.database.table.CreateTableDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.TableStatisticDto; -import at.tuwien.api.database.table.TableUpdateDto; -import at.tuwien.api.user.internal.UpdateUserPasswordDto; -import at.tuwien.config.GatewayConfig; -import at.tuwien.exception.*; -import at.tuwien.gateway.DataServiceGateway; +import at.ac.tuwien.ifs.dbrepo.core.api.database.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.internal.CreateDatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.QueryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.CreateTableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableStatisticDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.internal.UpdateUserPasswordDto; +import at.ac.tuwien.ifs.dbrepo.config.GatewayConfig; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.gateway.DataServiceGateway; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.http.HttpEntity; @@ -398,12 +398,7 @@ public class DataServiceGatewayImpl implements DataServiceGateway { log.error("Failed to analyse table statistic: wrong http code: {}", response.getStatusCode()); throw new DataServiceException("Failed to analyse table statistic: wrong http code: " + response.getStatusCode()); } - final TableStatisticDto body = response.getBody(); - if (body == null) { - log.error("Failed to analyse table statistic: empty body: {}", response.getStatusCode()); - throw new DataServiceException("Failed to analyse table statistic: empty body"); - } - return body; + return response.getBody(); } } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/KeycloakGatewayImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/KeycloakGatewayImpl.java similarity index 90% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/KeycloakGatewayImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/KeycloakGatewayImpl.java index 4eb96aeee5..f3f5c4ad09 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/KeycloakGatewayImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/KeycloakGatewayImpl.java @@ -1,12 +1,12 @@ -package at.tuwien.gateway.impl; +package at.ac.tuwien.ifs.dbrepo.gateway.impl; -import at.tuwien.api.keycloak.TokenDto; -import at.tuwien.api.user.UserUpdateDto; -import at.tuwien.config.KeycloakConfig; -import at.tuwien.exception.AuthServiceException; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.gateway.KeycloakGateway; -import at.tuwien.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserUpdateDto; +import at.ac.tuwien.ifs.dbrepo.config.KeycloakConfig; +import at.ac.tuwien.ifs.dbrepo.core.exception.AuthServiceException; +import at.ac.tuwien.ifs.dbrepo.core.exception.UserNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.gateway.KeycloakGateway; import jakarta.ws.rs.ForbiddenException; import jakarta.ws.rs.NotAuthorizedException; import jakarta.ws.rs.NotFoundException; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/OrcidGatewayImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/OrcidGatewayImpl.java similarity index 82% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/OrcidGatewayImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/OrcidGatewayImpl.java index 7634e421fe..78751b72be 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/OrcidGatewayImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/OrcidGatewayImpl.java @@ -1,17 +1,15 @@ -package at.tuwien.gateway.impl; +package at.ac.tuwien.ifs.dbrepo.gateway.impl; -import at.tuwien.api.orcid.OrcidDto; -import at.tuwien.exception.OrcidNotFoundException; -import at.tuwien.gateway.OrcidGateway; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.OrcidDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.OrcidNotFoundException; +import at.ac.tuwien.ifs.dbrepo.gateway.OrcidGateway; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.HttpServerErrorException; -import org.springframework.web.client.ResourceAccessException; import org.springframework.web.client.RestTemplate; @Log4j2 diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/RorGatewayImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/RorGatewayImpl.java similarity index 83% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/RorGatewayImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/RorGatewayImpl.java index 37ed982f9e..b8af43362d 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/RorGatewayImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/RorGatewayImpl.java @@ -1,18 +1,16 @@ -package at.tuwien.gateway.impl; +package at.ac.tuwien.ifs.dbrepo.gateway.impl; -import at.tuwien.api.ror.RorDto; -import at.tuwien.config.GatewayConfig; -import at.tuwien.exception.RorNotFoundException; -import at.tuwien.gateway.RorGateway; +import at.ac.tuwien.ifs.dbrepo.core.api.ror.RorDto; +import at.ac.tuwien.ifs.dbrepo.config.GatewayConfig; +import at.ac.tuwien.ifs.dbrepo.core.exception.RorNotFoundException; +import at.ac.tuwien.ifs.dbrepo.gateway.RorGateway; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.HttpServerErrorException; -import org.springframework.web.client.ResourceAccessException; import org.springframework.web.client.RestTemplate; @Log4j2 diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/SearchServiceGatewayImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/SearchServiceGatewayImpl.java similarity index 87% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/SearchServiceGatewayImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/SearchServiceGatewayImpl.java index 89b4dff5c7..97977fbb43 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/SearchServiceGatewayImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/gateway/impl/SearchServiceGatewayImpl.java @@ -1,13 +1,13 @@ -package at.tuwien.gateway.impl; +package at.ac.tuwien.ifs.dbrepo.gateway.impl; -import at.tuwien.api.database.DatabaseBriefDto; -import at.tuwien.config.GatewayConfig; -import at.tuwien.entities.database.Database; -import at.tuwien.exception.DatabaseNotFoundException; -import at.tuwien.exception.SearchServiceConnectionException; -import at.tuwien.exception.SearchServiceException; -import at.tuwien.gateway.SearchServiceGateway; -import at.tuwien.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseBriefDto; +import at.ac.tuwien.ifs.dbrepo.config.GatewayConfig; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.exception.DatabaseNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.SearchServiceConnectionException; +import at.ac.tuwien.ifs.dbrepo.core.exception.SearchServiceException; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.gateway.SearchServiceGateway; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -37,7 +37,8 @@ public class SearchServiceGatewayImpl implements SearchServiceGateway { } @Override - public DatabaseBriefDto update(Database database) throws SearchServiceConnectionException, SearchServiceException, DatabaseNotFoundException { + public DatabaseBriefDto update(Database database) throws SearchServiceConnectionException, SearchServiceException, + DatabaseNotFoundException { final ResponseEntity<DatabaseBriefDto> response; final HttpHeaders headers = new HttpHeaders(); headers.set("Accept", "application/json"); diff --git a/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/AccessService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/AccessService.java new file mode 100644 index 0000000000..21f8f0444b --- /dev/null +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/AccessService.java @@ -0,0 +1,81 @@ +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.AccessTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.DatabaseAccess; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; + +import java.security.Principal; +import java.util.List; + +public interface AccessService { + + /** + * Loads all database access definitions for a database with id. + * + * @param database The database. + * @return The list of database access definitions. + */ + List<DatabaseAccess> list(Database database); + + /** + * Finds database access by given database and user, where the access is determined by the username (needed since {@link Principal#getName()} embeds the username). + * + * @param database The database. + * @param user The user. + * @return The database access, if successful. + * @throws AccessNotFoundException The access was not found in the metadata database. + */ + DatabaseAccess find(Database database, User user) throws AccessNotFoundException; + + /** + * Give somebody access to a database of container. + * + * @param database The database. + * @param access The access. + * @param user The user. + * @return The database access, if successful. + * @throws DataServiceException The data service responded with an unexpected error code. + * @throws DataServiceConnectionException The connection with the data service could not be established. + * @throws DatabaseNotFoundException The database was not found in the metadata/search database. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + */ + DatabaseAccess create(Database database, User user, AccessTypeDto access) throws DataServiceException, + DataServiceConnectionException, DatabaseNotFoundException, SearchServiceException, + SearchServiceConnectionException; + + /** + * Update access to a database. + * + * @param database The database. + * @param user The user. + * @param access The updated access. + * @throws DataServiceException The data service responded with unexpected behavior. + * @throws DataServiceConnectionException The connection with the data service could not be established. + * @throws AccessNotFoundException The access was not found. + * @throws DatabaseNotFoundException The database was not found in the metadata/search database. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + */ + void update(Database database, User user, AccessTypeDto access) throws DataServiceException, + DataServiceConnectionException, AccessNotFoundException, DatabaseNotFoundException, SearchServiceException, + SearchServiceConnectionException; + + /** + * Revokes access to a database of container. + * + * @param database The database. + * @param user The user. + * @throws AccessNotFoundException The access was not found. + * @throws DataServiceException The data service responded with unexpected behavior. + * @throws DataServiceConnectionException The connection with the data service could not be established. + * @throws DatabaseNotFoundException The database was not found in the metadata/search database. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + */ + void delete(Database database, User user) throws AccessNotFoundException, DataServiceException, + DataServiceConnectionException, DatabaseNotFoundException, SearchServiceException, + SearchServiceConnectionException; +} diff --git a/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/AuthenticationService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/AuthenticationService.java new file mode 100644 index 0000000000..808c774e23 --- /dev/null +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/AuthenticationService.java @@ -0,0 +1,18 @@ +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.AuthServiceException; +import at.ac.tuwien.ifs.dbrepo.core.exception.UserNotFoundException; + +public interface AuthenticationService { + + /** + * Deletes a user at the Authentication Service with given user id. + * + * @param user The user. + * @throws AuthServiceException The auth service responded with unexpected behavior. + * @throws UserNotFoundException The user was not found after creation in the auth database. + */ + void delete(User user) throws AuthServiceException, UserNotFoundException; + +} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/BannerMessageService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/BannerMessageService.java similarity index 81% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/BannerMessageService.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/BannerMessageService.java index a7973b6171..98c6b12679 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/BannerMessageService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/BannerMessageService.java @@ -1,9 +1,9 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.api.maintenance.BannerMessageCreateDto; -import at.tuwien.api.maintenance.BannerMessageUpdateDto; -import at.tuwien.entities.maintenance.BannerMessage; -import at.tuwien.exception.MessageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.maintenance.BannerMessage; +import at.ac.tuwien.ifs.dbrepo.core.exception.MessageNotFoundException; import java.util.List; import java.util.UUID; diff --git a/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/BrokerService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/BrokerService.java new file mode 100644 index 0000000000..6f9109cbe0 --- /dev/null +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/BrokerService.java @@ -0,0 +1,25 @@ +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; + +public interface BrokerService { + + /** + * Updates the virtual host permissions in the Broker Service for a user with given principal. + * + * @param user The user. + * @throws BrokerServiceException The broker service responded with an unexpected response code. + * @throws BrokerServiceConnectionException The connection to the broker service could not be established. + */ + void setVirtualHostPermissions(User user) throws BrokerServiceException, BrokerServiceConnectionException; + + /** + * Sets topic exchange permissions for a user. + * + * @param user The user. + * @throws BrokerServiceException The broker service responded with an unexpected response code. + * @throws BrokerServiceConnectionException The connection to the broker service could not be established. + */ + void setTopicExchangePermissions(User user) throws BrokerServiceException, BrokerServiceConnectionException; +} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ConceptService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/ConceptService.java similarity index 75% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ConceptService.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/ConceptService.java index 94fa1e0c89..ec582b10d8 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ConceptService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/ConceptService.java @@ -1,7 +1,7 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.entities.database.table.columns.TableColumnConcept; -import at.tuwien.exception.ConceptNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumnConcept; +import at.ac.tuwien.ifs.dbrepo.core.exception.ConceptNotFoundException; import java.util.List; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ContainerService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/ContainerService.java similarity index 75% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ContainerService.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/ContainerService.java index d559b5134d..fcda5ef460 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ContainerService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/ContainerService.java @@ -1,10 +1,10 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.api.container.CreateContainerDto; -import at.tuwien.entities.container.Container; -import at.tuwien.exception.ContainerAlreadyExistsException; -import at.tuwien.exception.ContainerNotFoundException; -import at.tuwien.exception.ImageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.api.container.CreateContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.Container; +import at.ac.tuwien.ifs.dbrepo.core.exception.ContainerAlreadyExistsException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ContainerNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageNotFoundException; import java.util.List; import java.util.UUID; @@ -19,8 +19,7 @@ public interface ContainerService { * @throws ImageNotFoundException The image of the container was not found in the metadata database. * @throws ContainerAlreadyExistsException A container with this name already exists. */ - Container create(CreateContainerDto createDto) throws ImageNotFoundException, - ContainerAlreadyExistsException; + Container create(CreateContainerDto createDto) throws ImageNotFoundException, ContainerAlreadyExistsException; /** * Removes a container by given id from the metadata database. diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/CredentialService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/CredentialService.java similarity index 80% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/CredentialService.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/CredentialService.java index b1c28cf170..4a54849006 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/CredentialService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/CredentialService.java @@ -1,6 +1,6 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; public interface CredentialService { diff --git a/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/DashboardService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/DashboardService.java new file mode 100644 index 0000000000..77be6e2447 --- /dev/null +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/DashboardService.java @@ -0,0 +1,44 @@ +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.AccessTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.CreateDashboardResponseDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.DashboardServiceConnectionException; +import at.ac.tuwien.ifs.dbrepo.core.exception.DashboardServiceException; + +public interface DashboardService { + + /** + * Updates the panels in the dashboard in the dashboard service for a given database. Only updates the dashboard if + * (and only if) the {@link Database#isDashboardEnabled} is set to true. + * + * @param database The database. + * @throws DashboardServiceException The dashboard service responded with an unexpected error code. + * @throws DashboardServiceConnectionException The connection to the dashboard service could not be established. + */ + void update(Database database) throws DashboardServiceException, DashboardServiceConnectionException; + + /** + * Creates the dashboard in the dashboard service for a given database. Does not create panels. + * + * @param database The database. + * @return The response containing the UID of the created dashboard. + * @throws DashboardServiceException The dashboard service responded with an unexpected error code. + * @throws DashboardServiceConnectionException The connection to the dashboard service could not be established. + */ + CreateDashboardResponseDto create(Database database) throws DashboardServiceException, + DashboardServiceConnectionException; + + /** + * Updates the access on the dashboard in the dashboard service. + * + * @param database The database. + * @param user The user whose access is updated. + * @param access The access type. + * @throws DashboardServiceException The dashboard service responded with an unexpected error code. + * @throws DashboardServiceConnectionException The connection to the dashboard service could not be established. + */ + void updateAccess(Database database, User user, AccessTypeDto access) throws DashboardServiceException, + DashboardServiceConnectionException; +} diff --git a/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/DatabaseService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/DatabaseService.java new file mode 100644 index 0000000000..351e383b05 --- /dev/null +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/DatabaseService.java @@ -0,0 +1,193 @@ +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.CreateDatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseModifyVisibilityDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.Container; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.UUID; + +@Service +public interface DatabaseService { + + /** + * Finds all databases stored in the metadata database. + * + * @return List of databases. + */ + List<Database> findAll(); + + /** + * Filters all databases where {@link Database#isPublic} or {@link Database#isSchemaPublic} evaluates to true. + * + * @return List of databases. + */ + List<Database> findAllPublicOrSchemaPublic(); + + /** + * Filters all databases whose internal name matches the given internal name. + * + * @param internalName The internal name. + * @return List of databases. + */ + List<Database> findByInternalName(String internalName); + + /** + * Filters all databases where {@link Database#isPublic} or {@link Database#isSchemaPublic} and the user by given id + * has at least read access and whose internal name matches the given internal name evaluates to true. + * @param userId The user id. + * @param internalName The internal name. + * @return List of databases. + */ + List<Database> findAllPublicOrSchemaPublicOrReadAccessByInternalName(UUID userId, String internalName); + + /** + * Filters all databases where {@link Database#isPublic} or {@link Database#isSchemaPublic} or the user by given id + * has at least read access evaluate to true. + * + * @param userId The user id. + * @return List of databases. + */ + List<Database> findAllPublicOrSchemaPublicOrReadAccess(UUID userId); + + /** + * Filters all databases where {@link Database#isPublic} or {@link Database#isSchemaPublic} or the internal name + * matches the given internal name evaluate to true. + * + * @param internalName The internal name. + * @return List of databases. + */ + List<Database> findAllPublicOrSchemaPublicByInternalName(String internalName); + + /** + * Find a database by given id. + * + * @param databaseId The id. + * @return The database, if successful. + * @throws DatabaseNotFoundException The database was not found in the metadata database. + */ + Database findById(UUID databaseId) throws DatabaseNotFoundException; + + /** + * Creates a new database with minimal metadata in the metadata database and creates a new database on the + * container. + * + * @param container The container. + * @param createDto The metadata. + * @param user The user. + * @param internalUsers The list of internal users. + * @return The database, if successful. + * @throws DataServiceException The data service responded with unexpected behavior. + * @throws DataServiceConnectionException The connection with the data service could not be established. + * @throws DatabaseNotFoundException The created database was not found in the metadata database. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + * @throws DashboardServiceException The dashboard service responded with an unexpected error code. + * @throws DashboardServiceConnectionException The connection to the dashboard service could not be established. + */ + Database create(Container container, CreateDatabaseDto createDto, User user, List<User> internalUsers) + throws DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, + SearchServiceException, SearchServiceConnectionException, DashboardServiceException, + DashboardServiceConnectionException; + + /** + * Updates the user's password. + * + * @param database The database. + * @param user The user. + * @throws DataServiceException The data service responded with unexpected behavior. + * @throws DataServiceConnectionException The connection with the data service could not be established. + * @throws DatabaseNotFoundException The created database was not found in the metadata database. + */ + void updatePassword(Database database, User user) throws DataServiceException, DataServiceConnectionException, + DatabaseNotFoundException; + + /** + * Updates the visibility of the database. + * + * @param database The database. + * @param data The visibility + * @return The database, if successful. + * @throws DatabaseNotFoundException The created database was not found in the metadata database. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + */ + Database modifyVisibility(Database database, DatabaseModifyVisibilityDto data) throws DatabaseNotFoundException, + SearchServiceException, SearchServiceConnectionException; + + /** + * Transfer ownership of a database + * + * @param database The database. + * @param user The payload with the new owner. + * @return The database, if successful. + * @throws DatabaseNotFoundException The created database was not found in the metadata database. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + */ + Database modifyOwner(Database database, User user) throws DatabaseNotFoundException, SearchServiceException, + SearchServiceConnectionException; + + /** + * Modify image of database with given id. + * + * @param database The database. + * @param image The image. + * @return The database, if successful. + * @throws DatabaseNotFoundException The created database was not found in the metadata database. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + */ + Database modifyImage(Database database, byte[] image) throws DatabaseNotFoundException, SearchServiceException, + SearchServiceConnectionException; + + /** + * Modify dashboard uid of database with given id. + * + * @param database The database. + * @param uid The dashboard uid. + * @return The database, if successful. + * @throws DatabaseNotFoundException The created database was not found in the metadata database. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + */ + Database modifyDashboard(Database database, String uid) throws DatabaseNotFoundException, SearchServiceException, + SearchServiceConnectionException; + + /** + * Updates the table metadata of a given database. + * + * @param database The database. + * @return The updated database, if successful. + * @throws DatabaseNotFoundException The created database was not found in the metadata database. + * @throws DataServiceException The data service responded with unexpected behavior. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + * @throws DataServiceConnectionException The connection with the data service could not be established. + * @throws MalformedException The table is malformed, e.g. a column of a primary key constraint could not be found. + * @throws TableNotFoundException The table was not found in the metadata database. + */ + Database updateTableMetadata(Database database) throws DatabaseNotFoundException, DataServiceException, + SearchServiceException, SearchServiceConnectionException, DataServiceConnectionException, + MalformedException, TableNotFoundException; + + /** + * Updates the view metadata of a given database. + * + * @param database The database. + * @return The updated database, if successful. + * @throws DatabaseNotFoundException The created database was not found in the metadata database. + * @throws DataServiceException The data service responded with unexpected behavior. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + * @throws DataServiceConnectionException The connection with the data service could not be established. + * @throws ViewNotFoundException The view was not found in the metadata database. + */ + Database updateViewMetadata(Database database) throws DatabaseNotFoundException, DataServiceException, + SearchServiceException, SearchServiceConnectionException, DataServiceConnectionException, + ViewNotFoundException; +} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/EntityService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/EntityService.java similarity index 54% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/EntityService.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/EntityService.java index 69a801cf5c..c767ad3a7b 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/EntityService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/EntityService.java @@ -1,11 +1,13 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.api.semantics.EntityDto; -import at.tuwien.api.semantics.TableColumnEntityDto; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.TableColumn; -import at.tuwien.entities.semantics.Ontology; -import at.tuwien.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.EntityDto; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.TableColumnEntityDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumn; +import at.ac.tuwien.ifs.dbrepo.core.entity.semantics.Ontology; +import at.ac.tuwien.ifs.dbrepo.core.exception.MalformedException; +import at.ac.tuwien.ifs.dbrepo.core.exception.OntologyNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.SemanticEntityNotFoundException; import java.util.List; @@ -16,7 +18,8 @@ public interface EntityService { * * @param ontology The ontology. * @param label The label. - * @return The list of entities that match. + * @return List of entities. + * @throws MalformedException The query is malformed. */ List<EntityDto> findByLabel(Ontology ontology, String label) throws MalformedException; @@ -26,7 +29,8 @@ public interface EntityService { * @param ontology The ontology. * @param label The label. * @param limit The maximum number of entities to return. - * @return The list of entities that match. + * @return List of entities. + * @throws MalformedException The query is malformed. */ List<EntityDto> findByLabel(Ontology ontology, String label, Integer limit) throws MalformedException; @@ -34,7 +38,9 @@ public interface EntityService { * Finds entities in the ontology whose uri match the given uri. * * @param uri The uri. - * @return The list of entities that match. + * @return List of entities. + * @throws MalformedException The query is malformed. + * @throws OntologyNotFoundException The ontology was not found in the metadata database. */ List<EntityDto> findByUri(String uri) throws MalformedException, OntologyNotFoundException; @@ -43,14 +49,19 @@ public interface EntityService { * * @param uri The uri. * @return The entity, if successful. + * @throws MalformedException The query is malformed. + * @throws SemanticEntityNotFoundException The semantic entity was not found in the metadata database. + * @throws OntologyNotFoundException The ontology was not found in the metadata database. */ - EntityDto findOneByUri(String uri) throws MalformedException, SemanticEntityNotFoundException, OntologyNotFoundException; + EntityDto findOneByUri(String uri) throws MalformedException, SemanticEntityNotFoundException, + OntologyNotFoundException; /** * Attempts to suggest table semantics for a table with given id in database with given id. * * @param table The table. * @return The list of entities that were suggested. + * @throws MalformedException The query is malformed. */ List<EntityDto> suggestByTable(Table table) throws MalformedException; @@ -59,6 +70,7 @@ public interface EntityService { * * @param column The table column. * @return The list of entities that were suggested. + * @throws MalformedException The query is malformed. */ List<TableColumnEntityDto> suggestByColumn(TableColumn column) throws MalformedException; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/IdentifierService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/IdentifierService.java similarity index 54% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/IdentifierService.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/IdentifierService.java index 8c9a3088fe..ac23dc1b4f 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/IdentifierService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/IdentifierService.java @@ -1,13 +1,13 @@ -package at.tuwien.service; - -import at.tuwien.api.identifier.BibliographyTypeDto; -import at.tuwien.api.identifier.CreateIdentifierDto; -import at.tuwien.api.identifier.IdentifierSaveDto; -import at.tuwien.api.identifier.IdentifierTypeDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.BibliographyTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.CreateIdentifierDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierSaveDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.Identifier; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; import org.springframework.core.io.InputStreamResource; import org.springframework.stereotype.Service; @@ -91,11 +91,12 @@ public interface IdentifierService { * * @param identifier The identifier. * @return The resulting identifier. - * @throws SearchServiceException - * @throws DatabaseNotFoundException - * @throws SearchServiceConnectionException - * @throws MalformedException - * @throws DataServiceConnectionException + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws DatabaseNotFoundException The created database was not found in the metadata database. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + * @throws MalformedException The table is malformed, e.g. a column of a primary key constraint could not be found. + * @throws DataServiceConnectionException The connection with the data service could not be established. + * @throws ExternalServiceException The DataCite system rejected the publish-request. */ Identifier publish(Identifier identifier) throws SearchServiceException, DatabaseNotFoundException, SearchServiceConnectionException, MalformedException, DataServiceConnectionException, @@ -108,19 +109,20 @@ public interface IdentifierService { * @param user The user. * @param data The data. * @return The created identifier from the metadata database if successful. - * @throws DataServiceException - * @throws DataServiceConnectionException - * @throws IdentifierNotFoundException - * @throws MalformedException - * @throws ViewNotFoundException - * @throws DatabaseNotFoundException - * @throws QueryNotFoundException - * @throws SearchServiceException - * @throws SearchServiceConnectionException + * @throws DataServiceException The data service responded with unexpected behavior. + * @throws DataServiceConnectionException The connection with the data service could not be established. + * @throws IdentifierNotFoundException The identifier was not found in the metadata service. + * @throws MalformedException The table is malformed, e.g. a column of a primary key constraint could not be found. + * @throws ViewNotFoundException The view was not found in the metadata service. + * @throws DatabaseNotFoundException The created database was not found in the metadata database. + * @throws QueryNotFoundException The subset was not found in the data service. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. */ Identifier save(Database database, User user, IdentifierSaveDto data) throws DataServiceException, DataServiceConnectionException, IdentifierNotFoundException, MalformedException, ViewNotFoundException, - DatabaseNotFoundException, QueryNotFoundException, SearchServiceException, SearchServiceConnectionException, ExternalServiceException; + DatabaseNotFoundException, QueryNotFoundException, SearchServiceException, SearchServiceConnectionException, + ExternalServiceException; /** * Creates a new identifier in the metadata database for a query or database. @@ -129,19 +131,18 @@ public interface IdentifierService { * @param user The user. * @param data The data. * @return The created identifier from the metadata database if successful. - * @throws DataServiceException - * @throws DataServiceConnectionException - * @throws IdentifierNotFoundException - * @throws MalformedException - * @throws ViewNotFoundException - * @throws DatabaseNotFoundException - * @throws QueryNotFoundException - * @throws SearchServiceException - * @throws SearchServiceConnectionException + * @throws DataServiceException The data service responded with unexpected behavior. + * @throws DataServiceConnectionException The connection with the data service could not be established. + * @throws MalformedException The table is malformed, e.g. a column of a primary key constraint could not be found. + * @throws ViewNotFoundException The view was not found in the metadata service. + * @throws DatabaseNotFoundException The created database was not found in the metadata database. + * @throws QueryNotFoundException The subset was not found in the data service. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. */ Identifier create(Database database, User user, CreateIdentifierDto data) throws DataServiceException, - DataServiceConnectionException, IdentifierNotFoundException, MalformedException, ViewNotFoundException, - DatabaseNotFoundException, QueryNotFoundException, SearchServiceException, SearchServiceConnectionException, ExternalServiceException; + DataServiceConnectionException, MalformedException, ViewNotFoundException, DatabaseNotFoundException, + QueryNotFoundException, SearchServiceException, SearchServiceConnectionException, ExternalServiceException; /** * Export metadata for a identifier @@ -166,13 +167,10 @@ public interface IdentifierService { * database, but sets it as deleted. * * @param identifier The identifier. - * @throws DataServiceException - * @throws DataServiceConnectionException - * @throws IdentifierNotFoundException - * @throws DatabaseNotFoundException - * @throws SearchServiceException - * @throws SearchServiceConnectionException + * @throws DatabaseNotFoundException The created database was not found in the metadata database. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. */ - void delete(Identifier identifier) throws DataServiceException, DataServiceConnectionException, IdentifierNotFoundException, - DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException; + void delete(Identifier identifier) throws DatabaseNotFoundException, SearchServiceException, + SearchServiceConnectionException; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ImageService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/ImageService.java similarity index 73% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ImageService.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/ImageService.java index c5f353c7a1..09afe61aae 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ImageService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/ImageService.java @@ -1,11 +1,11 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.api.container.image.ImageChangeDto; -import at.tuwien.api.container.image.ImageCreateDto; -import at.tuwien.entities.container.image.ContainerImage; -import at.tuwien.exception.ImageAlreadyExistsException; -import at.tuwien.exception.ImageInvalidException; -import at.tuwien.exception.ImageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageChangeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.image.ContainerImage; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageAlreadyExistsException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageInvalidException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageNotFoundException; import java.security.Principal; import java.util.List; @@ -25,6 +25,7 @@ public interface ImageService { * * @param imageId The image id. * @return The image, if successful. + * @throws ImageNotFoundException The image was not found in the metadata service. */ ContainerImage find(UUID imageId) throws ImageNotFoundException; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/LicenseService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/LicenseService.java similarity index 74% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/LicenseService.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/LicenseService.java index 4bea349946..a0854ab374 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/LicenseService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/LicenseService.java @@ -1,7 +1,7 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.entities.database.License; -import at.tuwien.exception.LicenseNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.License; +import at.ac.tuwien.ifs.dbrepo.core.exception.LicenseNotFoundException; import java.util.List; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MetadataService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/MetadataService.java similarity index 62% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MetadataService.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/MetadataService.java index 95c2b299e4..bbc2d2d494 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MetadataService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/MetadataService.java @@ -1,10 +1,10 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.api.user.external.ExternalMetadataDto; -import at.tuwien.exception.*; -import at.tuwien.oaipmh.OaiErrorType; -import at.tuwien.oaipmh.OaiListIdentifiersParameters; -import at.tuwien.oaipmh.OaiRecordParameters; +import at.ac.tuwien.ifs.dbrepo.core.api.user.external.ExternalMetadataDto; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.oaipmh.OaiErrorType; +import at.ac.tuwien.ifs.dbrepo.oaipmh.OaiListIdentifiersParameters; +import at.ac.tuwien.ifs.dbrepo.oaipmh.OaiRecordParameters; public interface MetadataService { @@ -28,6 +28,7 @@ public interface MetadataService { * * @param parameters The parameters. * @return The xml record. + * @throws IdentifierNotFoundException The identifier was not found. */ String getRecord(OaiRecordParameters parameters) throws IdentifierNotFoundException; @@ -51,9 +52,10 @@ public interface MetadataService { * * @param url The user identifier. * @return The user metadata. - * @throws OrcidNotFoundException The provided identifier is of ORCID type and does not exist. - * @throws RorNotFoundException The provided identifier is of ROR type and does not exist. - * @throws DoiNotFoundException The doi was not found. + * @throws OrcidNotFoundException The provided identifier is of ORCID type and does not exist. + * @throws RorNotFoundException The provided identifier is of ROR type and does not exist. + * @throws DoiNotFoundException The doi was not found. + * @throws IdentifierNotSupportedException The identifier is not supported. */ ExternalMetadataDto findByUrl(String url) throws OrcidNotFoundException, RorNotFoundException, DoiNotFoundException, IdentifierNotSupportedException; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/OntologyService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/OntologyService.java similarity index 72% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/OntologyService.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/OntologyService.java index c8e4c70676..584ab4178c 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/OntologyService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/OntologyService.java @@ -1,9 +1,9 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.api.semantics.OntologyCreateDto; -import at.tuwien.api.semantics.OntologyModifyDto; -import at.tuwien.entities.semantics.Ontology; -import at.tuwien.exception.OntologyNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.OntologyCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.OntologyModifyDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.semantics.Ontology; +import at.ac.tuwien.ifs.dbrepo.core.exception.OntologyNotFoundException; import java.security.Principal; import java.util.List; @@ -34,6 +34,13 @@ public interface OntologyService { */ Ontology find(UUID ontologyId) throws OntologyNotFoundException; + /** + * Finds an ontology in the metadata database with given entity uri. + * + * @param entityUri The entity uri. + * @return The ontology, if successful. + * @throws OntologyNotFoundException The ontology was not found in the metadata database. + */ Ontology find(String entityUri) throws OntologyNotFoundException; /** diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/StorageService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/StorageService.java similarity index 73% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/StorageService.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/StorageService.java index 7cb195ce4e..33a96b1296 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/StorageService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/StorageService.java @@ -1,7 +1,7 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.exception.StorageNotFoundException; -import at.tuwien.exception.StorageUnavailableException; +import at.ac.tuwien.ifs.dbrepo.core.exception.StorageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.StorageUnavailableException; import java.io.InputStream; @@ -13,8 +13,8 @@ public interface StorageService { * @param bucket The bucket name. * @param key The object key. * @return The input stream, if successful. + * @throws StorageNotFoundException The object could not be found in the Storage Service. * @throws StorageUnavailableException The object failed to be loaded from the Storage Service. - * @throws StorageNotFoundException The object could not be found in the Storage Service. */ InputStream getObject(String bucket, String key) throws StorageNotFoundException, StorageUnavailableException; @@ -25,7 +25,7 @@ public interface StorageService { * @param key The object key. * @return The byte array. * @throws StorageUnavailableException The object failed to be loaded from the Storage Service. - * @throws StorageNotFoundException The object could not be found in the Storage Service. + * @throws StorageNotFoundException The object could not be found in the Storage Service. */ byte[] getBytes(String key) throws StorageUnavailableException, StorageNotFoundException; @@ -35,8 +35,8 @@ public interface StorageService { * @param bucket The bucket name. * @param key The object key. * @return The byte array. + * @throws StorageNotFoundException The object could not be found in the Storage Service. * @throws StorageUnavailableException The object failed to be loaded from the Storage Service. - * @throws StorageNotFoundException The object could not be found in the Storage Service. */ byte[] getBytes(String bucket, String key) throws StorageNotFoundException, StorageUnavailableException; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/TableService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/TableService.java new file mode 100644 index 0000000000..b024698362 --- /dev/null +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/TableService.java @@ -0,0 +1,140 @@ +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.CreateTableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumn; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; + +import java.security.Principal; +import java.util.UUID; + +public interface TableService { + + /** + * Find a table in the metadata database by database and table id. + * + * @param database The database. + * @param tableId The table id. + * @return The table, if successful. + * @throws TableNotFoundException The table was not found in the metadata service. + * @throws DatabaseNotFoundException The database was not found in the metadata service. + */ + Table findById(Database database, UUID tableId) throws TableNotFoundException, DatabaseNotFoundException; + + /** + * Find a table in the metadata database by database id and table name. + * + * @param database The database. + * @param internalName The table name. + * @return The table, if successful. + * @throws TableNotFoundException The table was not found in the metadata service. + * @throws DatabaseNotFoundException The database was not found in the metadata service. + */ + Table findByName(Database database, String internalName) throws TableNotFoundException, DatabaseNotFoundException; + + + /** + * + * Creates a table for a database id with given schema as data + * + * @param database The database. + * @param createDto The schema (as data). + * @param principal The principal. + * @return The created table. + * @throws TableNotFoundException The table was not found in the metadata service. + * @throws DataServiceException The data service responded with unexpected behavior. + * @throws DataServiceConnectionException The connection with the data service could not be established. + * @throws UserNotFoundException The user with this username was not found in the metadata database. + * @throws DatabaseNotFoundException The database was not found in the metadata service. + * @throws TableExistsException The table with this name exists in the target database. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + * @throws MalformedException The table is malformed, e.g. a column of a primary key constraint could not be found. + * @throws OntologyNotFoundException The ontology was not found in the metadata database. + * @throws SemanticEntityNotFoundException The semantic entity was not found in the metadata database. + */ + Table createTable(Database database, CreateTableDto createDto, Principal principal) throws TableNotFoundException, + DataServiceException, DataServiceConnectionException, UserNotFoundException, DatabaseNotFoundException, + TableExistsException, SearchServiceException, SearchServiceConnectionException, MalformedException, + OntologyNotFoundException, SemanticEntityNotFoundException; + + /** + * Deletes a given table from the database in the metadata database and data database. + * + * @param table The table. + * @throws DataServiceException The data service responded with unexpected behavior. + * @throws DataServiceConnectionException The connection with the data service could not be established. + * @throws DatabaseNotFoundException The database was not found in the metadata service. + * @throws TableNotFoundException The table was not found in the metadata service. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + */ + void deleteTable(Table table) throws DataServiceException, DataServiceConnectionException, + DatabaseNotFoundException, TableNotFoundException, SearchServiceException, SearchServiceConnectionException; + + /** + * Updates a given table from the database in the metadata database. + * + * @param table The table. + * @param data The update data. + * @return The updated table, if successful. + * @throws DataServiceException The data service responded with unexpected behavior. + * @throws DataServiceConnectionException The connection with the data service could not be established. + * @throws DatabaseNotFoundException The database was not found in the metadata service. + * @throws TableNotFoundException The table was not found in the metadata service. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + */ + Table updateTable(Table table, TableUpdateDto data) throws DataServiceException, + DataServiceConnectionException, DatabaseNotFoundException, TableNotFoundException, SearchServiceException, + SearchServiceConnectionException; + + /** + * Updates a given table column in the metadata database. + * + * @param column The table column. + * @param updateDto The update data. + * @return The updated table column, if successful. + * @throws DataServiceException The data service responded with unexpected behavior. + * @throws DataServiceConnectionException The connection with the data service could not be established. + * @throws DatabaseNotFoundException The database was not found in the metadata service. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + * @throws MalformedException The table is malformed, e.g. a column of a primary key constraint could not be found. + * @throws OntologyNotFoundException The ontology was not found in the metadata database. + * @throws SemanticEntityNotFoundException The semantic entity was not found in the metadata database. + */ + TableColumn update(TableColumn column, ColumnSemanticsUpdateDto updateDto) throws DataServiceException, + DataServiceConnectionException, DatabaseNotFoundException, SearchServiceException, + SearchServiceConnectionException, MalformedException, OntologyNotFoundException, + SemanticEntityNotFoundException; + + /** + * Find a table column by given table and column id. + * + * @param table The table. + * @param columnId The column id. + * @return The column, if found. + * @throws MalformedException The table column was not found. + */ + TableColumn findColumnById(Table table, UUID columnId) throws MalformedException; + + /** + * Updates the table statistics by given table. + * + * @param table The table. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws DatabaseNotFoundException The database was not found in the metadata service. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + * @throws MalformedException The table is malformed, e.g. a column of a primary key constraint could not be found. + * @throws TableNotFoundException The table was not found in the metadata service. + * @throws DataServiceException The data service responded with unexpected behavior. + * @throws DataServiceConnectionException The connection with the data service could not be established. + */ + void updateStatistics(Table table) throws SearchServiceException, DatabaseNotFoundException, + SearchServiceConnectionException, MalformedException, TableNotFoundException, DataServiceException, + DataServiceConnectionException; +} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/UnitService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/UnitService.java similarity index 63% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/UnitService.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/UnitService.java index 93824eeb62..fcf37fbe5a 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/UnitService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/UnitService.java @@ -1,13 +1,19 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.entities.database.table.columns.TableColumnUnit; -import at.tuwien.exception.UnitNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumnUnit; +import at.ac.tuwien.ifs.dbrepo.core.exception.UnitNotFoundException; import org.springframework.transaction.annotation.Transactional; import java.util.List; public interface UnitService { + /** + * Creates a table column unit in the metadata database. + * + * @param unit The table column unit. + * @return The saved table column unit, if successful. + */ TableColumnUnit create(TableColumnUnit unit); /** diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/UserService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/UserService.java similarity index 68% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/UserService.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/UserService.java index f38268c000..3e244e8e8b 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/UserService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/UserService.java @@ -1,12 +1,10 @@ -package at.tuwien.service; +package at.ac.tuwien.ifs.dbrepo.service; -import at.tuwien.api.auth.CreateUserDto; -import at.tuwien.api.user.UserPasswordDto; -import at.tuwien.api.user.UserUpdateDto; -import at.tuwien.entities.user.User; -import at.tuwien.exception.AuthServiceException; -import at.tuwien.exception.UserExistsException; -import at.tuwien.exception.UserNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.api.auth.CreateUserDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.AuthServiceException; +import at.ac.tuwien.ifs.dbrepo.core.exception.UserNotFoundException; import java.util.List; import java.util.UUID; @@ -29,6 +27,11 @@ public interface UserService { */ User findByUsername(String username) throws UserNotFoundException; + /** + * Filters all users where they are marked as service account ({@link User#isInternal}). + * + * @return List of users. + */ List<User> findAllInternalUsers(); /** @@ -54,8 +57,8 @@ public interface UserService { * @param user The user. * @param data The user information. * @return The user if successful. False otherwise. + * @throws UserNotFoundException The user was not found. + * @throws AuthServiceException The auth service responded with an unexpected error code. */ User modify(User user, UserUpdateDto data) throws UserNotFoundException, AuthServiceException; - - String getMariaDbPassword(String password); } diff --git a/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/ViewService.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/ViewService.java new file mode 100644 index 0000000000..eda8cdd443 --- /dev/null +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/ViewService.java @@ -0,0 +1,69 @@ +package at.ac.tuwien.ifs.dbrepo.service; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.CreateViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.View; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; + +import java.util.UUID; + +public interface ViewService { + + /** + * Find a view of a database with id. + * + * @param database The database. + * @param viewId The view id. + * @return The view, if successful. + * @throws ViewNotFoundException The view with given id was not found in the metadata database. + */ + View findById(Database database, UUID viewId) throws ViewNotFoundException; + + /** + * Delete view in the container with the given id and database with id and the given view id. + * + * @param view The view. + * @throws DataServiceException The data service responded with unexpected behavior. + * @throws DataServiceConnectionException The connection with the data service could not be established. + * @throws DatabaseNotFoundException The database was not found in the metadata service. + * @throws ViewNotFoundException The view was not found in the metadata database. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + */ + void delete(View view) throws DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, + ViewNotFoundException, SearchServiceException, SearchServiceConnectionException; + + /** + * Creates a view in the container with given id and database with id with the given query. + * + * @param database The database. + * @param user The user. + * @param data The given query. + * @return The view that was created. + * @throws MalformedException The query was malformed in the data service. + * @throws DataServiceException The data service responded with unexpected behavior. + * @throws DataServiceConnectionException The connection with the data service could not be established. + * @throws DatabaseNotFoundException The database was not found in the metadata service. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + */ + View create(Database database, User user, CreateViewDto data) throws MalformedException, DataServiceException, + DataServiceConnectionException, DatabaseNotFoundException, SearchServiceException, + SearchServiceConnectionException; + + /** + * Updates the view in the metadata database and search service. + * + * @param view The view. + * @param data The update data. + * @return The view, if successful. + * @throws DataServiceConnectionException The connection with the data service could not be established. + * @throws DatabaseNotFoundException The database was not found in the metadata service. + * @throws SearchServiceException The search service responded with an unexpected error code. + * @throws SearchServiceConnectionException The connection with the search service could not be established. + */ + View update(View view, ViewUpdateDto data) throws DataServiceConnectionException, DatabaseNotFoundException, + SearchServiceException, SearchServiceConnectionException; +} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/AccessServiceImpl.java similarity index 87% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/AccessServiceImpl.java index e5b59ebda8..7d3120bba2 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/AccessServiceImpl.java @@ -1,16 +1,16 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.api.database.AccessTypeDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.repository.DatabaseRepository; -import at.tuwien.service.AccessService; -import at.tuwien.service.DatabaseService; +import at.ac.tuwien.ifs.dbrepo.core.api.database.AccessTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.DatabaseAccess; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.gateway.DataServiceGateway; +import at.ac.tuwien.ifs.dbrepo.gateway.SearchServiceGateway; +import at.ac.tuwien.ifs.dbrepo.repository.DatabaseRepository; +import at.ac.tuwien.ifs.dbrepo.service.AccessService; +import at.ac.tuwien.ifs.dbrepo.service.DatabaseService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AuthenticationServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/AuthenticationServiceImpl.java similarity index 62% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AuthenticationServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/AuthenticationServiceImpl.java index e6bb056bfe..b2b4853271 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AuthenticationServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/AuthenticationServiceImpl.java @@ -1,10 +1,10 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.entities.user.User; -import at.tuwien.exception.AuthServiceException; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.gateway.KeycloakGateway; -import at.tuwien.service.AuthenticationService; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.AuthServiceException; +import at.ac.tuwien.ifs.dbrepo.core.exception.UserNotFoundException; +import at.ac.tuwien.ifs.dbrepo.gateway.KeycloakGateway; +import at.ac.tuwien.ifs.dbrepo.service.AuthenticationService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/BannerMessageServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/BannerMessageServiceImpl.java similarity index 82% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/BannerMessageServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/BannerMessageServiceImpl.java index d75d384b3c..8b8766401a 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/BannerMessageServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/BannerMessageServiceImpl.java @@ -1,12 +1,12 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.api.maintenance.BannerMessageCreateDto; -import at.tuwien.api.maintenance.BannerMessageUpdateDto; -import at.tuwien.entities.maintenance.BannerMessage; -import at.tuwien.exception.MessageNotFoundException; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.repository.BannerMessageRepository; -import at.tuwien.service.BannerMessageService; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.maintenance.BannerMessage; +import at.ac.tuwien.ifs.dbrepo.core.exception.MessageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.repository.BannerMessageRepository; +import at.ac.tuwien.ifs.dbrepo.service.BannerMessageService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/BrokerServiceRabbitMqImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/BrokerServiceRabbitMqImpl.java similarity index 88% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/BrokerServiceRabbitMqImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/BrokerServiceRabbitMqImpl.java index 2800c96bc9..709e7cebde 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/BrokerServiceRabbitMqImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/BrokerServiceRabbitMqImpl.java @@ -1,13 +1,13 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.api.amqp.GrantExchangePermissionsDto; -import at.tuwien.api.amqp.GrantVirtualHostPermissionsDto; -import at.tuwien.config.RabbitConfig; -import at.tuwien.entities.database.AccessType; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.gateway.BrokerServiceGateway; -import at.tuwien.service.BrokerService; +import at.ac.tuwien.ifs.dbrepo.core.api.amqp.GrantExchangePermissionsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.amqp.GrantVirtualHostPermissionsDto; +import at.ac.tuwien.ifs.dbrepo.config.RabbitConfig; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.AccessType; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.gateway.BrokerServiceGateway; +import at.ac.tuwien.ifs.dbrepo.service.BrokerService; import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ConceptServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ConceptServiceImpl.java similarity index 80% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ConceptServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ConceptServiceImpl.java index 647d4fe198..93f64a16ea 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ConceptServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ConceptServiceImpl.java @@ -1,9 +1,9 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.entities.database.table.columns.TableColumnConcept; -import at.tuwien.exception.ConceptNotFoundException; -import at.tuwien.repository.ConceptRepository; -import at.tuwien.service.ConceptService; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumnConcept; +import at.ac.tuwien.ifs.dbrepo.core.exception.ConceptNotFoundException; +import at.ac.tuwien.ifs.dbrepo.repository.ConceptRepository; +import at.ac.tuwien.ifs.dbrepo.service.ConceptService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ContainerServiceImpl.java similarity index 84% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ContainerServiceImpl.java index d92b6c17dc..27daf63487 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ContainerServiceImpl.java @@ -1,15 +1,15 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.api.container.CreateContainerDto; -import at.tuwien.entities.container.Container; -import at.tuwien.entities.container.image.ContainerImage; -import at.tuwien.exception.ContainerAlreadyExistsException; -import at.tuwien.exception.ContainerNotFoundException; -import at.tuwien.exception.ImageNotFoundException; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.repository.ContainerRepository; -import at.tuwien.repository.ImageRepository; -import at.tuwien.service.ContainerService; +import at.ac.tuwien.ifs.dbrepo.core.api.container.CreateContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.Container; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.image.ContainerImage; +import at.ac.tuwien.ifs.dbrepo.core.exception.ContainerAlreadyExistsException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ContainerNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.repository.ContainerRepository; +import at.ac.tuwien.ifs.dbrepo.repository.ImageRepository; +import at.ac.tuwien.ifs.dbrepo.service.ContainerService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/CredentialServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/CredentialServiceImpl.java similarity index 85% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/CredentialServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/CredentialServiceImpl.java index 7cf7d1eff4..65597ec056 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/CredentialServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/CredentialServiceImpl.java @@ -1,8 +1,8 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.api.keycloak.TokenDto; -import at.tuwien.gateway.KeycloakGateway; -import at.tuwien.service.CredentialService; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.gateway.KeycloakGateway; +import at.ac.tuwien.ifs.dbrepo.service.CredentialService; import com.github.benmanes.caffeine.cache.Cache; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; diff --git a/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DashboardServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DashboardServiceImpl.java new file mode 100644 index 0000000000..af76ee2d4f --- /dev/null +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DashboardServiceImpl.java @@ -0,0 +1,51 @@ +package at.ac.tuwien.ifs.dbrepo.service.impl; + +import at.ac.tuwien.ifs.dbrepo.core.api.database.AccessTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.CreateDashboardResponseDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.DashboardServiceConnectionException; +import at.ac.tuwien.ifs.dbrepo.core.exception.DashboardServiceException; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.gateway.DashboardServiceGateway; +import at.ac.tuwien.ifs.dbrepo.service.DashboardService; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Log4j2 +@Service +public class DashboardServiceImpl implements DashboardService { + + private final MetadataMapper metadataMapper; + private final DashboardServiceGateway dashboardServiceGateway; + + @Autowired + public DashboardServiceImpl(MetadataMapper metadataMapper, DashboardServiceGateway dashboardServiceGateway) { + this.metadataMapper = metadataMapper; + this.dashboardServiceGateway = dashboardServiceGateway; + } + + @Override + public void update(Database database) throws DashboardServiceException, DashboardServiceConnectionException { + if (!database.getIsDashboardEnabled()) { + log.trace("database does not manage their dashboard, skip"); + return; + } + dashboardServiceGateway.update(metadataMapper.databaseToDatabaseDto(database)); + } + + @Override + public CreateDashboardResponseDto create(Database database) throws DashboardServiceException, + DashboardServiceConnectionException { + return dashboardServiceGateway.create(metadataMapper.databaseToCreateDashboardDto(database)); + } + + @Override + public void updateAccess(Database database, User user, AccessTypeDto access) throws DashboardServiceException, + DashboardServiceConnectionException { + dashboardServiceGateway.updateAccess(database.getDashboardUid(), user.getUsername(), + metadataMapper.accessTypeDtoToPermissionTypeDto(access)); + } + +} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DataCiteIdentifierServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DataCiteIdentifierServiceImpl.java similarity index 83% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DataCiteIdentifierServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DataCiteIdentifierServiceImpl.java index 5ab9cc26a2..5c10963318 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DataCiteIdentifierServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DataCiteIdentifierServiceImpl.java @@ -1,24 +1,24 @@ -package at.tuwien.service.impl; - -import at.tuwien.api.datacite.DataCiteBody; -import at.tuwien.api.datacite.DataCiteData; -import at.tuwien.api.datacite.doi.DataCiteCreateDoi; -import at.tuwien.api.datacite.doi.DataCiteDoi; -import at.tuwien.api.datacite.doi.DataCiteDoiEvent; -import at.tuwien.api.identifier.BibliographyTypeDto; -import at.tuwien.api.identifier.CreateIdentifierDto; -import at.tuwien.api.identifier.IdentifierSaveDto; -import at.tuwien.api.identifier.IdentifierTypeDto; -import at.tuwien.config.DataCiteConfig; -import at.tuwien.config.EndpointConfig; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.entities.identifier.IdentifierStatusType; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.repository.IdentifierRepository; -import at.tuwien.service.IdentifierService; +package at.ac.tuwien.ifs.dbrepo.service.impl; + +import at.ac.tuwien.ifs.dbrepo.core.api.datacite.DataCiteBody; +import at.ac.tuwien.ifs.dbrepo.core.api.datacite.DataCiteData; +import at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi.DataCiteCreateDoi; +import at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi.DataCiteDoi; +import at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi.DataCiteDoiEvent; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.BibliographyTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.CreateIdentifierDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierSaveDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierTypeDto; +import at.ac.tuwien.ifs.dbrepo.config.DataCiteConfig; +import at.ac.tuwien.ifs.dbrepo.config.EndpointConfig; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.Identifier; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.IdentifierStatusType; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.repository.IdentifierRepository; +import at.ac.tuwien.ifs.dbrepo.service.IdentifierService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Primary; @@ -107,9 +107,8 @@ public class DataCiteIdentifierServiceImpl implements IdentifierService { @Override @Transactional(rollbackFor = {Exception.class}) public Identifier create(Database database, User user, CreateIdentifierDto data) throws DataServiceException, - DataServiceConnectionException, IdentifierNotFoundException, MalformedException, ViewNotFoundException, - DatabaseNotFoundException, QueryNotFoundException, SearchServiceException, - SearchServiceConnectionException, ExternalServiceException { + DataServiceConnectionException, MalformedException, ViewNotFoundException, DatabaseNotFoundException, + QueryNotFoundException, SearchServiceException, SearchServiceConnectionException, ExternalServiceException { data.setDoi(remoteSave(identifierService.create(database, user, data), DataCiteDoiEvent.REGISTER)); return identifierService.create(database, user, data); } @@ -198,8 +197,7 @@ public class DataCiteIdentifierServiceImpl implements IdentifierService { @Override @Transactional - public void delete(Identifier identifier) throws DataServiceException, DataServiceConnectionException, - DatabaseNotFoundException, IdentifierNotFoundException, SearchServiceException, + public void delete(Identifier identifier) throws DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException { identifierService.delete(identifier); } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DatabaseServiceImpl.java similarity index 85% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DatabaseServiceImpl.java index d01e5c0b6e..6cfa0180a8 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DatabaseServiceImpl.java @@ -1,28 +1,28 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.api.database.CreateDatabaseDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.DatabaseModifyVisibilityDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.user.internal.UpdateUserPasswordDto; -import at.tuwien.entities.container.Container; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.View; -import at.tuwien.entities.database.ViewColumn; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.TableColumn; -import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKey; -import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKeyReference; -import at.tuwien.entities.database.table.constraints.primaryKey.PrimaryKey; -import at.tuwien.entities.database.table.constraints.unique.Unique; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.repository.DatabaseRepository; -import at.tuwien.service.DatabaseService; +import at.ac.tuwien.ifs.dbrepo.core.api.database.CreateDatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseModifyVisibilityDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.internal.UpdateUserPasswordDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.Container; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.View; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.ViewColumn; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumn; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.foreignKey.ForeignKey; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.foreignKey.ForeignKeyReference; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.primaryKey.PrimaryKey; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.unique.Unique; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.gateway.DataServiceGateway; +import at.ac.tuwien.ifs.dbrepo.gateway.SearchServiceGateway; +import at.ac.tuwien.ifs.dbrepo.repository.DatabaseRepository; +import at.ac.tuwien.ifs.dbrepo.service.DatabaseService; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.RandomStringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -72,11 +72,6 @@ public class DatabaseServiceImpl implements DatabaseService { return databaseRepository.findAllPublicOrSchemaPublicOrReadAccessByInternalNameDesc(userId, internalName); } - @Override - public List<Database> findAllAtLestReadAccess(UUID userId) { - return databaseRepository.findAllAtLestReadAccessDesc(userId); - } - @Override public List<Database> findAllPublicOrSchemaPublicOrReadAccess(UUID userId) { return databaseRepository.findAllPublicOrSchemaPublicOrReadAccessDesc(userId); @@ -101,11 +96,13 @@ public class DatabaseServiceImpl implements DatabaseService { @Override @Transactional public Database create(Container container, CreateDatabaseDto data, User user, List<User> internalUsers) - throws UserNotFoundException, ContainerNotFoundException, DataServiceException, SearchServiceException, - DataServiceConnectionException, DatabaseNotFoundException, SearchServiceConnectionException { + throws DataServiceException, SearchServiceException, DataServiceConnectionException, + DatabaseNotFoundException, SearchServiceConnectionException, DashboardServiceException, + DashboardServiceConnectionException { final Database entity = Database.builder() .isPublic(data.getIsPublic()) .isSchemaPublic(data.getIsSchemaPublic()) + .isDashboardEnabled(true) .name(data.getName()) .internalName(metadataMapper.nameToInternalName(data.getName()) + "_" + RandomStringUtils.randomAlphabetic(4).toLowerCase()) .cid(data.getCid()) @@ -120,13 +117,15 @@ public class DatabaseServiceImpl implements DatabaseService { .identifiers(new LinkedList<>()) .build(); /* create in data database */ - final at.tuwien.api.database.internal.CreateDatabaseDto payload = at.tuwien.api.database.internal.CreateDatabaseDto.builder() + final at.ac.tuwien.ifs.dbrepo.core.api.database.internal.CreateDatabaseDto payload = at.ac.tuwien.ifs.dbrepo.core.api.database.internal.CreateDatabaseDto.builder() .containerId(data.getCid()) .userId(user.getId()) .username(user.getUsername()) .password(user.getMariadbPassword()) .privilegedUsername(container.getPrivilegedUsername()) .privilegedPassword(container.getPrivilegedPassword()) + .readonlyUsername(container.getReadonlyUsername()) + .readonlyPassword(container.getReadonlyPassword()) .internalName(entity.getInternalName()) .build(); final DatabaseDto dto = dataServiceGateway.createDatabase(payload); @@ -135,10 +134,6 @@ public class DatabaseServiceImpl implements DatabaseService { final Database entity1 = databaseRepository.save(entity); entity1.getAccesses() .add(metadataMapper.userToWriteAllAccess(entity1, user)); -// entity1.getAccesses() -// .addAll(internalUsers.stream() -// .map(internalUser -> metadataMapper.userToWriteAllAccess(entity1, internalUser)) -// .toList()); final Database database = databaseRepository.save(entity1); /* create in search service */ searchServiceGateway.update(database); @@ -170,6 +165,7 @@ public class DatabaseServiceImpl implements DatabaseService { /* update in metadata database */ database.setIsPublic(data.getIsPublic()); database.setIsSchemaPublic(data.getIsSchemaPublic()); + database.setIsDashboardEnabled(data.getIsDashboardEnabled()); log.debug("visibility change affects {} table(s)", database.getTables().stream().filter(t -> !t.getIsSchemaPublic().equals(data.getIsSchemaPublic())).count()); database.getTables() .forEach(table -> table.setIsSchemaPublic(data.getIsSchemaPublic())); @@ -209,6 +205,19 @@ public class DatabaseServiceImpl implements DatabaseService { return database; } + @Override + @Transactional + public Database modifyDashboard(Database database, String uid) throws DatabaseNotFoundException, + SearchServiceException, SearchServiceConnectionException { + /* update in metadata database */ + database.setDashboardUid(uid); + database = databaseRepository.save(database); + /* save in search service */ + searchServiceGateway.update(database); + log.info("Updated database dashboard uid of database with id {} & search database", database.getId()); + return database; + } + @Override @Transactional(rollbackFor = {Exception.class}) public Database updateTableMetadata(Database database) throws DatabaseNotFoundException, DataServiceException, diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/EntityServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/EntityServiceImpl.java similarity index 91% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/EntityServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/EntityServiceImpl.java index dba30481f5..60001b92ac 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/EntityServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/EntityServiceImpl.java @@ -1,15 +1,15 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.api.semantics.EntityDto; -import at.tuwien.api.semantics.TableColumnEntityDto; -import at.tuwien.config.JenaConfig; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.TableColumn; -import at.tuwien.entities.semantics.Ontology; -import at.tuwien.exception.*; -import at.tuwien.mapper.SparqlMapper; -import at.tuwien.service.EntityService; -import at.tuwien.service.OntologyService; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.EntityDto; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.TableColumnEntityDto; +import at.ac.tuwien.ifs.dbrepo.config.JenaConfig; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumn; +import at.ac.tuwien.ifs.dbrepo.core.entity.semantics.Ontology; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.mapper.SparqlMapper; +import at.ac.tuwien.ifs.dbrepo.service.EntityService; +import at.ac.tuwien.ifs.dbrepo.service.OntologyService; import lombok.extern.log4j.Log4j2; import org.apache.jena.query.*; import org.apache.jena.rdf.model.RDFNode; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/IdentifierServiceImpl.java similarity index 90% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/IdentifierServiceImpl.java index 8af7023c8c..f8b2c273e8 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/IdentifierServiceImpl.java @@ -1,25 +1,25 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.api.database.query.QueryDto; -import at.tuwien.api.identifier.BibliographyTypeDto; -import at.tuwien.api.identifier.CreateIdentifierDto; -import at.tuwien.api.identifier.IdentifierSaveDto; -import at.tuwien.api.identifier.IdentifierTypeDto; -import at.tuwien.config.MetadataConfig; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.LanguageType; -import at.tuwien.entities.database.View; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.entities.identifier.IdentifierStatusType; -import at.tuwien.entities.identifier.IdentifierTitle; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.repository.IdentifierRepository; -import at.tuwien.service.IdentifierService; -import at.tuwien.service.ViewService; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.QueryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.BibliographyTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.CreateIdentifierDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierSaveDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierTypeDto; +import at.ac.tuwien.ifs.dbrepo.config.MetadataConfig; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.LanguageType; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.View; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.Identifier; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.IdentifierStatusType; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.IdentifierTitle; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.gateway.DataServiceGateway; +import at.ac.tuwien.ifs.dbrepo.gateway.SearchServiceGateway; +import at.ac.tuwien.ifs.dbrepo.repository.IdentifierRepository; +import at.ac.tuwien.ifs.dbrepo.service.IdentifierService; +import at.ac.tuwien.ifs.dbrepo.service.ViewService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.springframework.core.io.InputStreamResource; @@ -226,8 +226,8 @@ public class IdentifierServiceImpl implements IdentifierService { @Transactional public Identifier create(Database database, User user, CreateIdentifierDto data) throws SearchServiceException, DataServiceException, QueryNotFoundException, DataServiceConnectionException, DatabaseNotFoundException, - SearchServiceConnectionException, IdentifierNotFoundException, ViewNotFoundException { - final Identifier identifier = metadataMapper.identifierCreateDtoToIdentifier(data); + SearchServiceConnectionException, ViewNotFoundException { + final Identifier identifier = metadataMapper.createIdentifierDtoToIdentifier(data); identifier.setDatabase(database); identifier.setOwnedBy(user.getId()); identifier.setOwner(user); @@ -278,8 +278,8 @@ public class IdentifierServiceImpl implements IdentifierService { @Transactional public Identifier save(Identifier identifier) throws DataServiceException, DataServiceConnectionException, - IdentifierNotFoundException, ViewNotFoundException, DatabaseNotFoundException, QueryNotFoundException, - SearchServiceException, SearchServiceConnectionException { + ViewNotFoundException, DatabaseNotFoundException, QueryNotFoundException, SearchServiceException, + SearchServiceConnectionException { /* save identifier */ switch (identifier.getType()) { case SUBSET -> { @@ -357,8 +357,7 @@ public class IdentifierServiceImpl implements IdentifierService { @Override @Transactional - public void delete(Identifier identifier) throws DataServiceException, DataServiceConnectionException, - IdentifierNotFoundException, DatabaseNotFoundException, SearchServiceException, + public void delete(Identifier identifier) throws DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException { /* delete in metadata database */ identifierRepository.deleteById(identifier.getId()); diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ImageServiceImpl.java similarity index 85% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ImageServiceImpl.java index b82c8ca382..470fd9c3a8 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ImageServiceImpl.java @@ -1,14 +1,14 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.api.container.image.ImageChangeDto; -import at.tuwien.api.container.image.ImageCreateDto; -import at.tuwien.entities.container.image.ContainerImage; -import at.tuwien.exception.ImageAlreadyExistsException; -import at.tuwien.exception.ImageInvalidException; -import at.tuwien.exception.ImageNotFoundException; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.repository.ImageRepository; -import at.tuwien.service.ImageService; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageChangeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.image.ContainerImage; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageAlreadyExistsException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageInvalidException; +import at.ac.tuwien.ifs.dbrepo.core.exception.ImageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.repository.ImageRepository; +import at.ac.tuwien.ifs.dbrepo.service.ImageService; import jakarta.validation.ConstraintViolationException; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/LicenseServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/LicenseServiceImpl.java similarity index 76% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/LicenseServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/LicenseServiceImpl.java index de5018f8c7..41765fb36a 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/LicenseServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/LicenseServiceImpl.java @@ -1,9 +1,9 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.entities.database.License; -import at.tuwien.exception.LicenseNotFoundException; -import at.tuwien.repository.LicenseRepository; -import at.tuwien.service.LicenseService; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.License; +import at.ac.tuwien.ifs.dbrepo.core.exception.LicenseNotFoundException; +import at.ac.tuwien.ifs.dbrepo.repository.LicenseRepository; +import at.ac.tuwien.ifs.dbrepo.service.LicenseService; import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Service; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/MetadataServiceImpl.java similarity index 84% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/MetadataServiceImpl.java index 1b6051f543..1c4376184a 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/MetadataServiceImpl.java @@ -1,22 +1,22 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.api.crossref.CrossrefDto; -import at.tuwien.api.orcid.OrcidDto; -import at.tuwien.api.ror.RorDto; -import at.tuwien.api.user.external.ExternalMetadataDto; -import at.tuwien.config.MetadataConfig; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.exception.*; -import at.tuwien.gateway.CrossrefGateway; -import at.tuwien.gateway.OrcidGateway; -import at.tuwien.gateway.RorGateway; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.oaipmh.OaiErrorType; -import at.tuwien.oaipmh.OaiListIdentifiersParameters; -import at.tuwien.oaipmh.OaiRecordParameters; -import at.tuwien.repository.IdentifierRepository; -import at.tuwien.service.IdentifierService; -import at.tuwien.service.MetadataService; +import at.ac.tuwien.ifs.dbrepo.config.MetadataConfig; +import at.ac.tuwien.ifs.dbrepo.core.api.crossref.CrossRefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.OrcidDto; +import at.ac.tuwien.ifs.dbrepo.core.api.ror.RorDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.external.ExternalMetadataDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.Identifier; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.gateway.CrossRefGateway; +import at.ac.tuwien.ifs.dbrepo.gateway.OrcidGateway; +import at.ac.tuwien.ifs.dbrepo.gateway.RorGateway; +import at.ac.tuwien.ifs.dbrepo.oaipmh.OaiErrorType; +import at.ac.tuwien.ifs.dbrepo.oaipmh.OaiListIdentifiersParameters; +import at.ac.tuwien.ifs.dbrepo.oaipmh.OaiRecordParameters; +import at.ac.tuwien.ifs.dbrepo.repository.IdentifierRepository; +import at.ac.tuwien.ifs.dbrepo.service.IdentifierService; +import at.ac.tuwien.ifs.dbrepo.service.MetadataService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -39,21 +39,21 @@ public class MetadataServiceImpl implements MetadataService { private final MetadataConfig metadataConfig; private final MetadataMapper metadataMapper; private final TemplateEngine templateEngine; - private final CrossrefGateway crossrefGateway; + private final CrossRefGateway crossRefGateway; private final IdentifierService identifierService; private final IdentifierRepository identifierRepository; @Autowired public MetadataServiceImpl(RorGateway rorGateway, OrcidGateway orcidGateway, MetadataConfig metadataConfig, MetadataMapper metadataMapper, TemplateEngine templateEngine, - CrossrefGateway crossrefGateway, IdentifierService identifierService, + CrossRefGateway crossRefGateway, IdentifierService identifierService, IdentifierRepository identifierRepository) { this.rorGateway = rorGateway; this.orcidGateway = orcidGateway; this.metadataConfig = metadataConfig; this.metadataMapper = metadataMapper; this.templateEngine = templateEngine; - this.crossrefGateway = crossrefGateway; + this.crossRefGateway = crossRefGateway; this.identifierService = identifierService; this.identifierRepository = identifierRepository; } @@ -117,10 +117,9 @@ public class MetadataServiceImpl implements MetadataService { @Override public String listMetadataFormats() { - final StringBuilder builder = new StringBuilder("<ListMetadataFormats>"); - builder.append(templateEngine.process("metadata-format.xml", new Context())); - builder.append("</ListMetadataFormats>"); - return parseResponse("verb=\"ListMetadataFormats\"", builder.toString()); + String builder = "<ListMetadataFormats>" + templateEngine.process("metadata-format.xml", new Context()) + + "</ListMetadataFormats>"; + return parseResponse("verb=\"ListMetadataFormats\"", builder); } @Override @@ -178,7 +177,7 @@ public class MetadataServiceImpl implements MetadataService { throw new RorNotFoundException("Failed to find metadata from CrossRef URL: too short"); } final String id = url.substring(idx + 8); - final CrossrefDto crossrefDto = crossrefGateway.findById(id); + final CrossRefDto crossrefDto = crossRefGateway.findById(id); return metadataMapper.crossrefDtoToExternalMetadataDto(crossrefDto); } log.error("Failed to find metadata: unsupported identifier {}", url); diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/OntologyServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/OntologyServiceImpl.java similarity index 84% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/OntologyServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/OntologyServiceImpl.java index d40239a06e..182f1eb5c9 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/OntologyServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/OntologyServiceImpl.java @@ -1,13 +1,12 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.api.semantics.OntologyCreateDto; -import at.tuwien.api.semantics.OntologyModifyDto; -import at.tuwien.entities.semantics.Ontology; -import at.tuwien.exception.OntologyNotFoundException; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.mapper.SparqlMapper; -import at.tuwien.repository.OntologyRepository; -import at.tuwien.service.OntologyService; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.OntologyCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.OntologyModifyDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.semantics.Ontology; +import at.ac.tuwien.ifs.dbrepo.core.exception.OntologyNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.repository.OntologyRepository; +import at.ac.tuwien.ifs.dbrepo.service.OntologyService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -23,14 +22,12 @@ import java.util.UUID; @Service public class OntologyServiceImpl implements OntologyService { - private final SparqlMapper sparqlMapper; private final MetadataMapper metadataMapper; private final OntologyRepository ontologyRepository; @Autowired - public OntologyServiceImpl(SparqlMapper ontologyMapper, MetadataMapper metadataMapper, + public OntologyServiceImpl(MetadataMapper metadataMapper, OntologyRepository ontologyRepository) { - this.sparqlMapper = ontologyMapper; this.metadataMapper = metadataMapper; this.ontologyRepository = ontologyRepository; } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/StorageServiceS3Impl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/StorageServiceS3Impl.java similarity index 82% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/StorageServiceS3Impl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/StorageServiceS3Impl.java index aef3213ccf..345529486a 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/StorageServiceS3Impl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/StorageServiceS3Impl.java @@ -1,14 +1,16 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.config.S3Config; -import at.tuwien.exception.StorageNotFoundException; -import at.tuwien.exception.StorageUnavailableException; -import at.tuwien.service.StorageService; +import at.ac.tuwien.ifs.dbrepo.config.S3Config; +import at.ac.tuwien.ifs.dbrepo.core.exception.StorageNotFoundException; +import at.ac.tuwien.ifs.dbrepo.core.exception.StorageUnavailableException; +import at.ac.tuwien.ifs.dbrepo.service.StorageService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import software.amazon.awssdk.services.s3.S3Client; -import software.amazon.awssdk.services.s3.model.*; +import software.amazon.awssdk.services.s3.model.GetObjectRequest; +import software.amazon.awssdk.services.s3.model.NoSuchKeyException; +import software.amazon.awssdk.services.s3.model.S3Exception; import java.io.IOException; import java.io.InputStream; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/TableServiceImpl.java similarity index 89% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/TableServiceImpl.java index 3b0a530e52..520f84b401 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/TableServiceImpl.java @@ -1,29 +1,32 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.api.database.table.CreateTableDto; -import at.tuwien.api.database.table.TableStatisticDto; -import at.tuwien.api.database.table.TableUpdateDto; -import at.tuwien.api.database.table.columns.ColumnStatisticDto; -import at.tuwien.api.database.table.columns.CreateTableColumnDto; -import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; -import at.tuwien.config.RabbitConfig; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.*; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.repository.DatabaseRepository; -import at.tuwien.service.*; +import at.ac.tuwien.ifs.dbrepo.config.RabbitConfig; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.CreateTableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableStatisticDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnStatisticDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.CreateTableColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.*; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.gateway.DataServiceGateway; +import at.ac.tuwien.ifs.dbrepo.gateway.SearchServiceGateway; +import at.ac.tuwien.ifs.dbrepo.repository.DatabaseRepository; +import at.ac.tuwien.ifs.dbrepo.service.*; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.security.Principal; -import java.util.*; +import java.util.LinkedList; +import java.util.List; +import java.util.Optional; +import java.util.UUID; @Log4j2 @Service @@ -296,18 +299,21 @@ public class TableServiceImpl implements TableService { DatabaseNotFoundException, SearchServiceConnectionException, MalformedException, TableNotFoundException, DataServiceException, DataServiceConnectionException { final TableStatisticDto statistic = dataServiceGateway.getTableStatistics(table.getTdbid(), table.getId()); - table.setNumRows(statistic.getRows()); + if (statistic == null) { + log.warn("Table statistic is empty (no column can be analysed), skip."); + return; + } + table.setNumRows(statistic.getTotalRows()); table.setDataLength(statistic.getDataLength()); table.setAvgRowLength(statistic.getAvgRowLength()); table.setMaxDataLength(statistic.getMaxDataLength()); - for (Map.Entry<String, ColumnStatisticDto> entry : statistic.getColumns().entrySet()) { - final Optional<TableColumn> optional = table.getColumns().stream().filter(c -> c.getInternalName().equals(entry.getKey())).findFirst(); + for (ColumnStatisticDto columnStatistic : statistic.getColumns()) { + final Optional<TableColumn> optional = table.getColumns().stream().filter(c -> c.getInternalName().equals(columnStatistic.getName())).findFirst(); if (optional.isEmpty()) { - log.error("Failed to assign table column statistic: column {} does not exist in table {}.{}", entry.getKey(), table.getDatabase().getInternalName(), table.getInternalName()); + log.error("Failed to assign table column statistic: column {} does not exist in table {}.{}", columnStatistic.getName(), table.getDatabase().getInternalName(), table.getInternalName()); throw new MalformedException("Failed to assign table column statistic: column does not exist"); } final TableColumn column = optional.get(); - final ColumnStatisticDto columnStatistic = statistic.getColumns().get(entry.getKey()); column.setMean(columnStatistic.getMean()); column.setMedian(columnStatistic.getMedian()); column.setMin(columnStatistic.getMin()); diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UnitServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/UnitServiceImpl.java similarity index 80% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UnitServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/UnitServiceImpl.java index 03270abcd5..ae24d0342f 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UnitServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/UnitServiceImpl.java @@ -1,9 +1,9 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.entities.database.table.columns.TableColumnUnit; -import at.tuwien.exception.UnitNotFoundException; -import at.tuwien.repository.UnitRepository; -import at.tuwien.service.UnitService; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumnUnit; +import at.ac.tuwien.ifs.dbrepo.core.exception.UnitNotFoundException; +import at.ac.tuwien.ifs.dbrepo.repository.UnitRepository; +import at.ac.tuwien.ifs.dbrepo.service.UnitService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/UserServiceImpl.java similarity index 79% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/UserServiceImpl.java index ad05c4fd46..f93dacc21c 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/UserServiceImpl.java @@ -1,13 +1,13 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.api.auth.CreateUserDto; -import at.tuwien.api.user.UserUpdateDto; -import at.tuwien.entities.user.User; -import at.tuwien.exception.AuthServiceException; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.gateway.KeycloakGateway; -import at.tuwien.repository.UserRepository; -import at.tuwien.service.UserService; +import at.ac.tuwien.ifs.dbrepo.core.api.auth.CreateUserDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.AuthServiceException; +import at.ac.tuwien.ifs.dbrepo.core.exception.UserNotFoundException; +import at.ac.tuwien.ifs.dbrepo.gateway.KeycloakGateway; +import at.ac.tuwien.ifs.dbrepo.repository.UserRepository; +import at.ac.tuwien.ifs.dbrepo.service.UserService; import lombok.extern.log4j.Log4j2; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.RandomStringUtils; @@ -65,12 +65,15 @@ public class UserServiceImpl implements UserService { @Override public User create(CreateUserDto data) { /* create at authentication service */ + final String passwordHash = "*" + DigestUtils.sha1Hex(DigestUtils.sha1(RandomStringUtils.randomAlphabetic(40) + .getBytes(StandardCharsets.UTF_8))) + .toUpperCase(); final User entity = User.builder() .id(data.getLdapId()) .keycloakId(data.getId()) .username(data.getUsername()) .theme("light") - .mariadbPassword(getMariaDbPassword(RandomStringUtils.randomAlphabetic(10))) + .mariadbPassword(passwordHash) .language("en") .firstname(data.getGivenName()) .lastname(data.getFamilyName()) @@ -97,10 +100,4 @@ public class UserServiceImpl implements UserService { log.info("Modified user with id: {}", user.getId()); return user; } - - @Override - public String getMariaDbPassword(String password) { - final byte[] utf8 = password.getBytes(StandardCharsets.UTF_8); - return "*" + DigestUtils.sha1Hex(DigestUtils.sha1(utf8)).toUpperCase(); - } } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ViewServiceImpl.java similarity index 67% rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java rename to dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ViewServiceImpl.java index 51c9832e26..e952e25e42 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ViewServiceImpl.java @@ -1,17 +1,17 @@ -package at.tuwien.service.impl; +package at.ac.tuwien.ifs.dbrepo.service.impl; -import at.tuwien.api.database.CreateViewDto; -import at.tuwien.api.database.ViewDto; -import at.tuwien.api.database.ViewUpdateDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.View; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import at.tuwien.gateway.DataServiceGateway; -import at.tuwien.gateway.SearchServiceGateway; -import at.tuwien.mapper.MetadataMapper; -import at.tuwien.repository.DatabaseRepository; -import at.tuwien.service.ViewService; +import at.ac.tuwien.ifs.dbrepo.core.api.database.CreateViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.View; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.exception.*; +import at.ac.tuwien.ifs.dbrepo.core.mapper.MetadataMapper; +import at.ac.tuwien.ifs.dbrepo.gateway.DataServiceGateway; +import at.ac.tuwien.ifs.dbrepo.gateway.SearchServiceGateway; +import at.ac.tuwien.ifs.dbrepo.repository.DatabaseRepository; +import at.ac.tuwien.ifs.dbrepo.service.ViewService; import com.google.common.hash.Hashing; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; @@ -20,7 +20,6 @@ import org.springframework.transaction.annotation.Transactional; import java.nio.charset.StandardCharsets; import java.util.LinkedList; -import java.util.List; import java.util.Optional; import java.util.UUID; @@ -55,25 +54,10 @@ public class ViewServiceImpl implements ViewService { return optional.get(); } - @Override - @Transactional(readOnly = true) - public List<View> findAll(Database database, User user) { - if (user == null) { - return database.getViews() - .stream() - .filter(View::getIsPublic) - .toList(); - } - return database.getViews() - .stream() - .filter(v -> v.getIsPublic() || v.getOwnedBy().equals(user.getId())) - .toList(); - } - @Override @Transactional - public void delete(View view) throws DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, - ViewNotFoundException, SearchServiceException, SearchServiceConnectionException { + public void delete(View view) throws DataServiceException, DataServiceConnectionException, + DatabaseNotFoundException, ViewNotFoundException, SearchServiceException, SearchServiceConnectionException { /* delete in data service */ dataServiceGateway.deleteView(view.getDatabase().getId(), view.getId()); /* delete in metadata database */ @@ -90,7 +74,7 @@ public class ViewServiceImpl implements ViewService { @Transactional public View create(Database database, User creator, CreateViewDto data) throws MalformedException, DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, SearchServiceException, - SearchServiceConnectionException, TableNotFoundException, ImageNotFoundException { + SearchServiceConnectionException { /* create in metadata database */ final View view = View.builder() .database(database) @@ -136,24 +120,15 @@ public class ViewServiceImpl implements ViewService { @Override @Transactional - public View update(Database database, View view, ViewUpdateDto data) throws DataServiceConnectionException, - DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException, ViewNotFoundException { - final Optional<View> optional = database.getViews() - .stream() - .filter(v -> v.getInternalName().equals(view.getInternalName())) - .findFirst(); - if (optional.isEmpty()) { - log.error("Failed to find view"); - throw new ViewNotFoundException("Failed to find view"); - } - final View tmpView = optional.get(); - tmpView.setIsPublic(data.getIsPublic()); - tmpView.setIsSchemaPublic(data.getIsSchemaPublic()); - database = databaseRepository.save(database); + public View update(View view, ViewUpdateDto data) throws DataServiceConnectionException, DatabaseNotFoundException, + SearchServiceException, SearchServiceConnectionException { + view.setIsPublic(data.getIsPublic()); + view.setIsSchemaPublic(data.getIsSchemaPublic()); + final Database database = databaseRepository.save(view.getDatabase()); /* update in search service */ searchServiceGateway.update(database); - log.info("Updated view with id {}", tmpView.getId()); - return optional.get(); + log.info("Updated view with id {}", view.getId()); + return view; } } diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AccessService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AccessService.java deleted file mode 100644 index 2642574f27..0000000000 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AccessService.java +++ /dev/null @@ -1,70 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.api.database.AccessTypeDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.DatabaseAccess; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; - -import java.security.Principal; -import java.util.List; - -public interface AccessService { - - /** - * Loads all database access definitions for a database with id. - * - * @param database The database. - * @return The list of database access definitions. - */ - List<DatabaseAccess> list(Database database); - - /** - * Finds database access by given database and user, where the access is determined by the username (needed since {@link Principal#getName()} embeds the username). - * - * @param database The database. - * @param user The user. - * @return The database access, if successful. - * @throws AccessNotFoundException The access was not found in the metadata database. - */ - DatabaseAccess find(Database database, User user) throws AccessNotFoundException; - - /** - * Give somebody access to a database of container. - * - * @param database The database. - * @param access The access. - * @param user The user. - * @return The database access, if successful. - * @throws DataServiceException The data service responded with unexpected behavior. - * @throws DataServiceConnectionException The connection with the data service could not be established. - * @throws DatabaseNotFoundException The database was not found in the metadata/search database. - */ - DatabaseAccess create(Database database, User user, AccessTypeDto access) throws DataServiceException, DataServiceConnectionException, - DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException; - - /** - * Update access to a database. - * - * @param database The database. - * @param user The user. - * @param access The updated access. - * @throws DataServiceException The data service responded with unexpected behavior. - * @throws DataServiceConnectionException The connection with the data service could not be established. - * @throws DatabaseNotFoundException The database was not found in the metadata/search database. - */ - void update(Database database, User user, AccessTypeDto access) throws at.tuwien.exception.DataServiceException, DataServiceConnectionException, - AccessNotFoundException, DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException; - - /** - * Revokes access to a database of container. - * - * @param database The database. - * @param user The user. - * @throws DataServiceException The data service responded with unexpected behavior. - * @throws DataServiceConnectionException The connection with the data service could not be established. - * @throws DatabaseNotFoundException The database was not found in the search database. - */ - void delete(Database database, User user) throws AccessNotFoundException, DataServiceException, - DataServiceConnectionException, DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException; -} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AuthenticationService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AuthenticationService.java deleted file mode 100644 index f93e81b69f..0000000000 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AuthenticationService.java +++ /dev/null @@ -1,22 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.user.User; -import at.tuwien.exception.AuthServiceConnectionException; -import at.tuwien.exception.AuthServiceException; -import at.tuwien.exception.CredentialsInvalidException; -import at.tuwien.exception.UserNotFoundException; - -public interface AuthenticationService { - - /** - * Deletes a user at the Authentication Service with given user id. - * - * @param user The user. - * @throws AuthServiceException The auth service responded with unexpected behavior. - * @throws AuthServiceConnectionException The connection with the auth service could not be established. - * @throws UserNotFoundException The user was not found after creation in the auth database. - */ - void delete(User user) throws AuthServiceException, AuthServiceConnectionException, UserNotFoundException, - CredentialsInvalidException; - -} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/BrokerService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/BrokerService.java deleted file mode 100644 index f249f7a2cf..0000000000 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/BrokerService.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; - -public interface BrokerService { - - /** - * Updates the virtual host permissions in the Broker Service for a user with given principal. - * - * @param user The user. - */ - void setVirtualHostPermissions(User user) throws BrokerServiceException, BrokerServiceConnectionException; - - /** - * Sets topic exchange permissions for a user. - * - * @param user The user. - */ - void setTopicExchangePermissions(User user) throws BrokerServiceException, BrokerServiceConnectionException; -} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java deleted file mode 100644 index 2f6aa6f372..0000000000 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java +++ /dev/null @@ -1,124 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.api.database.CreateDatabaseDto; -import at.tuwien.api.database.DatabaseModifyVisibilityDto; -import at.tuwien.entities.container.Container; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; -import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.UUID; - -@Service -public interface DatabaseService { - - /** - * Finds all databases stored in the metadata database. - * - * @return List of databases. - */ - List<Database> findAll(); - - List<Database> findAllPublicOrSchemaPublic(); - - List<Database> findByInternalName(String internalName); - - List<Database> findAllPublicOrSchemaPublicOrReadAccessByInternalName(UUID userId, String internalName); - - /** - * Finds all databases stored in the metadata database. - * - * @param userId The user id. - * @return List of databases. - */ - List<Database> findAllAtLestReadAccess(UUID userId); - - /** - * Finds all databases stored in the metadata database. - * - * @param userId The user id. - * @return List of databases. - */ - List<Database> findAllPublicOrSchemaPublicOrReadAccess(UUID userId); - - /** - * @param internalName The database internal name. - * @return The databases if found. - */ - List<Database> findAllPublicOrSchemaPublicByInternalName(String internalName); - - /** - * Find a database by id, only used in the authentication service - * - * @param databaseId the database id. - * @return The database, if successful. - * @throws DatabaseNotFoundException The database was not found in the metadata database. - */ - Database findById(UUID databaseId) throws DatabaseNotFoundException; - - /** - * Creates a new database with minimal metadata in the metadata database and creates a new database on the container. - * - * @param container The container. - * @param createDto The metadata. - * @param user The user. - * @param internalUsers The list of internal users. - * @return The database, if successful. - * @throws UserNotFoundException If the container/user was not found in the metadata database. - * @throws DataServiceException If the data service returned non-successfully. - * @throws DataServiceConnectionException If failing to connect to the data service/search service. - */ - Database create(Container container, CreateDatabaseDto createDto, User user, List<User> internalUsers) throws UserNotFoundException, - ContainerNotFoundException, DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, - SearchServiceException, SearchServiceConnectionException; - - /** - * Updates the user's password. - * - * @param database The database. - * @param user The user. - * @throws DataServiceException If the data service returned non-successfully. - * @throws DataServiceConnectionException If failing to connect to the data service. - */ - void updatePassword(Database database, User user) throws DataServiceException, DataServiceConnectionException, DatabaseNotFoundException; - - /** - * Updates the visibility of the database. - * - * @param database The database. - * @param data The visibility - * @return The database, if successful. - * @throws NotFoundException The database was not found in the metadata database. - * @throws DataServiceConnectionException If failing to connect to the search service. - */ - Database modifyVisibility(Database database, DatabaseModifyVisibilityDto data) throws DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException; - - /** - * Transfer ownership of a database - * - * @param database The database. - * @param user The payload with the new owner. - * @return The database, if successful. - * @throws DatabaseNotFoundException The database was not found in the metadata database. - */ - Database modifyOwner(Database database, User user) throws DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException; - - /** - * Modify image of database with given id. - * - * @param database The database. - * @param image The image. - * @return The database, if successful. - */ - Database modifyImage(Database database, byte[] image) throws DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException; - - Database updateTableMetadata(Database database) throws DatabaseNotFoundException, DataServiceException, - SearchServiceException, SearchServiceConnectionException, QueryNotFoundException, - DataServiceConnectionException, MalformedException, TableNotFoundException; - - Database updateViewMetadata(Database database) throws DatabaseNotFoundException, DataServiceException, - SearchServiceException, SearchServiceConnectionException, QueryNotFoundException, - DataServiceConnectionException, ViewNotFoundException; -} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/TableService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/TableService.java deleted file mode 100644 index 2edea6ebeb..0000000000 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/TableService.java +++ /dev/null @@ -1,64 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.api.database.table.CreateTableDto; -import at.tuwien.api.database.table.TableUpdateDto; -import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.TableColumn; -import at.tuwien.exception.*; - -import java.security.Principal; -import java.util.UUID; - -public interface TableService { - - /** - * Find a table in the metadata database by database and table id. - * - * @param database The database. - * @param tableId The table id. - * @return The table, if successful. - */ - Table findById(Database database, UUID tableId) throws TableNotFoundException, DatabaseNotFoundException; - - /** - * Find a table in the metadata database by database id and table name. - * - * @param database The database. - * @param internalName The table name. - * @return The table, if successful. - */ - Table findByName(Database database, String internalName) throws TableNotFoundException, DatabaseNotFoundException; - - - /** - * Creates a table for a database id with given schema as data - * - * @param database The database. - * @param createDto The schema (as data). - * @param principal The principal. - * @return The created table. - */ - Table createTable(Database database, CreateTableDto createDto, Principal principal) - throws TableNotFoundException, DataServiceException, DataServiceConnectionException, UserNotFoundException, - DatabaseNotFoundException, TableExistsException, SearchServiceException, SearchServiceConnectionException, MalformedException, OntologyNotFoundException, SemanticEntityNotFoundException; - - /** - * Deletes a table from the database in the metadata database and data database. - * - * @param table The table. - */ - void deleteTable(Table table) throws DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, TableNotFoundException, SearchServiceException, SearchServiceConnectionException; - - Table updateTable(Table table, TableUpdateDto data) throws DataServiceException, - DataServiceConnectionException, DatabaseNotFoundException, TableNotFoundException, SearchServiceException, - SearchServiceConnectionException; - - TableColumn update(TableColumn column, ColumnSemanticsUpdateDto updateDto) throws DataServiceException, - DataServiceConnectionException, DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException, MalformedException, OntologyNotFoundException, SemanticEntityNotFoundException; - - TableColumn findColumnById(Table table, UUID columnId) throws MalformedException; - - void updateStatistics(Table table) throws SearchServiceException, DatabaseNotFoundException, SearchServiceConnectionException, MalformedException, TableNotFoundException, DataServiceException, DataServiceConnectionException; -} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ViewService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ViewService.java deleted file mode 100644 index 54c9dd80bf..0000000000 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ViewService.java +++ /dev/null @@ -1,72 +0,0 @@ -package at.tuwien.service; - -import at.tuwien.api.database.CreateViewDto; -import at.tuwien.api.database.ViewUpdateDto; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.View; -import at.tuwien.entities.user.User; -import at.tuwien.exception.*; - -import java.util.List; -import java.util.UUID; - -public interface ViewService { - - /** - * Find a view of a database with id. - * - * @param database The database. - * @param viewId The view id. - * @return The view, if successful. - */ - View findById(Database database, UUID viewId) throws ViewNotFoundException; - - /** - * Find all views by database id. - * - * @param database The database. - * @param user The user. - * @return A list of views. - */ - List<View> findAll(Database database, User user); - - /** - * Delete view in the container with the given id and database with id and the given view id. - * - * @param view The view. - */ - void delete(View view) throws DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, - ViewNotFoundException, SearchServiceException, SearchServiceConnectionException; - - /** - * Creates a view in the container with given id and database with id with the given query. - * - * @param database The database. - * @param user The user. - * @param data The given query. - * @return The view that was created. - * @throws MalformedException - * @throws DataServiceException - * @throws DataServiceConnectionException - * @throws DatabaseNotFoundException - * @throws SearchServiceException - * @throws SearchServiceConnectionException - */ - View create(Database database, User user, CreateViewDto data) throws MalformedException, DataServiceException, - DataServiceConnectionException, DatabaseNotFoundException, SearchServiceException, - SearchServiceConnectionException, TableNotFoundException, ImageNotFoundException; - - /** - * @param database - * @param view - * @param data - * @return - * @throws DataServiceConnectionException - * @throws DatabaseNotFoundException - * @throws SearchServiceException - * @throws SearchServiceConnectionException - * @throws ViewNotFoundException - */ - View update(Database database, View view, ViewUpdateDto data) throws DataServiceConnectionException, - DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException, ViewNotFoundException; -} diff --git a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/AbstractUnitTest.java b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/AbstractUnitTest.java deleted file mode 100644 index 230aada37a..0000000000 --- a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/AbstractUnitTest.java +++ /dev/null @@ -1,160 +0,0 @@ -package at.tuwien.test; - -import at.tuwien.entities.database.AccessType; -import at.tuwien.entities.identifier.IdentifierStatusType; -import org.springframework.test.context.TestPropertySource; - -import java.util.LinkedList; -import java.util.List; - -@TestPropertySource(locations = "classpath:application.properties") -public abstract class AbstractUnitTest extends BaseTest { - - public void genesis() { - IMAGE_1_DTO.setOperators(IMAGE_1_OPERATORS_DTO); - CONTAINER_1_DTO.setImage(IMAGE_1_DTO); - IMAGE_1.setOperators(new LinkedList<>(IMAGE_1_OPERATORS)); - CONTAINER_1.setDatabases(new LinkedList<>(List.of(DATABASE_1, DATABASE_2, DATABASE_3))); - CONTAINER_4.setDatabases(new LinkedList<>(List.of(DATABASE_4))); - /* USER_1 */ - USER_1.setAccesses(new LinkedList<>()); - USER_1.setTheme(USER_1_THEME); - /* USER_2 */ - USER_2.setAccesses(new LinkedList<>()); - /* USER_3 */ - USER_3.setAccesses(new LinkedList<>()); - /* USER_4 */ - USER_4.setAccesses(new LinkedList<>()); - /* USER_4 */ - USER_5.setAccesses(new LinkedList<>()); - /* DATABASE 1 */ - TABLE_1_COLUMNS.get(0).setUnit(null); - TABLE_1_COLUMNS.get(0).setConcept(null); - DATABASE_1.setOwner(USER_1); - DATABASE_1.setSubsets(new LinkedList<>()); - DATABASE_1.setIsPublic(DATABASE_1_PUBLIC); - DATABASE_1.setIsSchemaPublic(DATABASE_1_SCHEMA_PUBLIC); - DATABASE_1_USER_1_READ_ACCESS.setType(AccessType.READ); - DATABASE_1.setAccesses(new LinkedList<>(List.of(DATABASE_1_USER_1_READ_ACCESS, DATABASE_1_USER_2_WRITE_OWN_ACCESS, DATABASE_1_USER_3_WRITE_ALL_ACCESS))); - DATABASE_1_DTO.setAccesses(new LinkedList<>(List.of(DATABASE_1_USER_1_READ_ACCESS_DTO, DATABASE_1_USER_2_WRITE_OWN_ACCESS_DTO, DATABASE_1_USER_3_WRITE_ALL_ACCESS_DTO))); - DATABASE_1_PRIVILEGED_DTO.setAccesses(new LinkedList<>(List.of(DATABASE_1_USER_1_READ_ACCESS_DTO, DATABASE_1_USER_2_WRITE_OWN_ACCESS_DTO, DATABASE_1_USER_3_WRITE_ALL_ACCESS_DTO))); - UNIT_1.setId(UNIT_1_ID); - TABLE_1.setDatabase(DATABASE_1); - TABLE_1.setColumns(new LinkedList<>(TABLE_1_COLUMNS)); - TABLE_1.setConstraints(TABLE_1_CONSTRAINTS); - VIEW_1_DTO.setIdentifiers(VIEW_1_DTO_IDENTIFIERS); - DATABASE_1.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_1, IDENTIFIER_2, IDENTIFIER_3, IDENTIFIER_4))); - IDENTIFIER_1.setDatabase(DATABASE_1); - IDENTIFIER_2.setDatabase(DATABASE_1); - IDENTIFIER_3.setDatabase(DATABASE_1); - IDENTIFIER_4.setDatabase(DATABASE_1); - DATABASE_1.setTables(new LinkedList<>(List.of(TABLE_1, TABLE_2, TABLE_3, TABLE_4))); - DATABASE_1.setViews(new LinkedList<>(List.of(VIEW_1, VIEW_2, VIEW_3))); - DATABASE_1_DTO.setContainer(CONTAINER_1_DTO); - DATABASE_1_DTO.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_1_DTO, IDENTIFIER_2_DTO, IDENTIFIER_3_DTO, IDENTIFIER_4_DTO))); - DATABASE_1_DTO.setTables(new LinkedList<>(List.of(TABLE_1_DTO, TABLE_2_DTO, TABLE_3_DTO, TABLE_4_DTO))); - DATABASE_1_DTO.setViews(new LinkedList<>(List.of(VIEW_1_DTO, VIEW_2_DTO, VIEW_3_DTO))); - TABLE_1_DTO.setColumns(new LinkedList<>(TABLE_1_COLUMNS_DTO)); - TABLE_1_DTO.setConstraints(TABLE_1_CONSTRAINTS_DTO); - TABLE_2.setDatabase(DATABASE_1); - TABLE_2.setColumns(new LinkedList<>(TABLE_2_COLUMNS)); - TABLE_2_CONSTRAINTS.getForeignKeys().get(0).getReferences().get(0).setForeignKey(TABLE_2_CONSTRAINTS.getForeignKeys().get(0)); - TABLE_2.setConstraints(TABLE_2_CONSTRAINTS); - TABLE_2_DTO.setColumns(new LinkedList<>(TABLE_2_COLUMNS_DTO)); - TABLE_2_DTO.setConstraints(TABLE_2_CONSTRAINTS_DTO); - TABLE_3.setDatabase(DATABASE_1); - TABLE_3.setColumns(new LinkedList<>(TABLE_3_COLUMNS)); - TABLE_3.setConstraints(TABLE_3_CONSTRAINTS); - TABLE_3_DTO.setColumns(new LinkedList<>(TABLE_3_COLUMNS_DTO)); - TABLE_3_DTO.setConstraints(TABLE_3_CONSTRAINTS_DTO); - TABLE_4.setDatabase(DATABASE_1); - TABLE_4.setColumns(new LinkedList<>(TABLE_4_COLUMNS)); - TABLE_4.setConstraints(TABLE_4_CONSTRAINTS); - TABLE_4_DTO.setColumns(TABLE_4_COLUMNS_DTO); - TABLE_4_DTO.setConstraints(TABLE_4_CONSTRAINTS_DTO); - VIEW_1.setDatabase(DATABASE_1); - VIEW_1.setColumns(new LinkedList<>(VIEW_1_COLUMNS)); - VIEW_1.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_3))); - VIEW_2.setDatabase(DATABASE_1); - VIEW_2.setColumns(new LinkedList<>(VIEW_2_COLUMNS)); - VIEW_3.setDatabase(DATABASE_1); - VIEW_3.setColumns(new LinkedList<>(VIEW_3_COLUMNS)); - IDENTIFIER_1.setDatabase(DATABASE_1); - IDENTIFIER_2.setDatabase(DATABASE_1); - IDENTIFIER_3.setDatabase(DATABASE_1); - IDENTIFIER_4.setDatabase(DATABASE_1); - /* DATABASE 2 */ - DATABASE_2.setSubsets(new LinkedList<>()); - DATABASE_2.setAccesses(new LinkedList<>(List.of(DATABASE_2_USER_2_WRITE_ALL_ACCESS, DATABASE_2_USER_3_READ_ACCESS))); - DATABASE_2.setTables(new LinkedList<>(List.of(TABLE_5, TABLE_6, TABLE_7))); - VIEW_4.setColumns(new LinkedList<>(VIEW_4_COLUMNS)); - DATABASE_2.setViews(new LinkedList<>(List.of(VIEW_4))); - DATABASE_2.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_5))); - DATABASE_2_DTO.setAccesses(new LinkedList<>(List.of(DATABASE_2_USER_2_WRITE_ALL_ACCESS_DTO, DATABASE_2_USER_3_READ_ACCESS_DTO))); - DATABASE_2_DTO.setTables(new LinkedList<>(List.of(TABLE_5_DTO, TABLE_6_DTO, TABLE_7_DTO))); - DATABASE_2_DTO.setViews(new LinkedList<>(List.of(VIEW_4_DTO))); - DATABASE_2_DTO.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_5_DTO))); - DATABASE_2_PRIVILEGED_DTO.setAccesses(new LinkedList<>(List.of(DATABASE_2_USER_2_WRITE_ALL_ACCESS_DTO, DATABASE_2_USER_3_READ_ACCESS_DTO))); - DATABASE_2_PRIVILEGED_DTO.setTables(new LinkedList<>(List.of(TABLE_5_DTO, TABLE_6_DTO, TABLE_7_DTO))); - DATABASE_2_PRIVILEGED_DTO.setViews(new LinkedList<>(List.of(VIEW_4_DTO))); - DATABASE_2_PRIVILEGED_DTO.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_5_DTO))); - TABLE_5.setDatabase(DATABASE_2); - TABLE_5.setColumns(new LinkedList<>(TABLE_5_COLUMNS)); - TABLE_5.setConstraints(TABLE_5_CONSTRAINTS); - TABLE_5_DTO.setColumns(new LinkedList<>(TABLE_5_COLUMNS_DTO)); - TABLE_5_DTO.setConstraints(TABLE_5_CONSTRAINTS_DTO); - TABLE_6.setDatabase(DATABASE_2); - TABLE_6.setColumns(new LinkedList<>(TABLE_6_COLUMNS)); - TABLE_6.setConstraints(TABLE_6_CONSTRAINTS); - TABLE_7.setDatabase(DATABASE_2); - TABLE_7.setColumns(new LinkedList<>(TABLE_7_COLUMNS)); - TABLE_7.setConstraints(TABLE_7_CONSTRAINTS); - TABLE_7_CONSTRAINTS.getForeignKeys().get(0).getReferences().get(0).setForeignKey(TABLE_7_CONSTRAINTS.getForeignKeys().get(0)); - TABLE_7_CONSTRAINTS.getForeignKeys().get(1).getReferences().get(0).setForeignKey(TABLE_7_CONSTRAINTS.getForeignKeys().get(1)); - TABLE_7_DTO.setColumns(TABLE_7_COLUMNS_DTO); - TABLE_7_DTO.setConstraints(TABLE_7_CONSTRAINTS_DTO); - TABLE_7_CONSTRAINTS_DTO.getForeignKeys().get(0).getReferences().get(0).setForeignKey(TABLE_7_CONSTRAINTS_FOREIGN_KEY_BRIEF_0_DTO); - TABLE_7_CONSTRAINTS_DTO.getForeignKeys().get(1).getReferences().get(0).setForeignKey(TABLE_7_CONSTRAINTS_FOREIGN_KEY_BRIEF_1_DTO); - VIEW_4.setDatabase(DATABASE_2); - IDENTIFIER_5.setDatabase(DATABASE_2); - /* DATABASE 3 */ - DATABASE_3.setSubsets(new LinkedList<>()); - DATABASE_3.setTables(new LinkedList<>(List.of(TABLE_8))); - DATABASE_3.setViews(new LinkedList<>(List.of(VIEW_5))); - DATABASE_3.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_6))); - DATABASE_3.setAccesses(new LinkedList<>(List.of(DATABASE_3_USER_1_WRITE_ALL_ACCESS))); - DATABASE_3_DTO.setTables(new LinkedList<>(List.of(TABLE_8_DTO))); - DATABASE_3_DTO.setViews(new LinkedList<>(List.of(VIEW_5_DTO))); - DATABASE_3_DTO.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_6_DTO))); - DATABASE_3_DTO.setAccesses(new LinkedList<>(List.of(DATABASE_3_USER_1_WRITE_ALL_ACCESS_DTO))); - DATABASE_3_PRIVILEGED_DTO.setAccesses(new LinkedList<>(List.of(DATABASE_3_USER_1_WRITE_ALL_ACCESS_DTO))); - DATABASE_3_PRIVILEGED_DTO.setTables(new LinkedList<>(List.of(TABLE_8_DTO))); - DATABASE_3_PRIVILEGED_DTO.setViews(new LinkedList<>(List.of(VIEW_5_DTO))); - DATABASE_3_PRIVILEGED_DTO.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_6_DTO))); - TABLE_8.setDatabase(DATABASE_3); - TABLE_8.setColumns(new LinkedList<>(TABLE_8_COLUMNS)); - TABLE_8.setConstraints(TABLE_8_CONSTRAINTS); - TABLE_8_DTO.setColumns(new LinkedList<>(TABLE_8_COLUMNS_DTO)); - TABLE_8_DTO.setConstraints(TABLE_8_CONSTRAINTS_DTO); - VIEW_5.setDatabase(DATABASE_3); - VIEW_5.setColumns(VIEW_5_COLUMNS); - VIEW_5_DTO.setColumns(VIEW_5_COLUMNS_DTO); - IDENTIFIER_6.setDatabase(DATABASE_3); - /* DATABASE 4 */ - DATABASE_4.setSubsets(new LinkedList<>()); - DATABASE_4.setAccesses(new LinkedList<>(List.of(DATABASE_4_USER_1_READ_ACCESS, DATABASE_4_USER_2_WRITE_OWN_ACCESS, DATABASE_4_USER_3_WRITE_ALL_ACCESS))); - DATABASE_4.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_7))); - DATABASE_4_DTO.setTables(new LinkedList<>(List.of(TABLE_9_DTO))); - DATABASE_4_DTO.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_7_DTO))); - DATABASE_4_PRIVILEGED_DTO.setTables(new LinkedList<>(List.of(TABLE_9_DTO))); - DATABASE_4_PRIVILEGED_DTO.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_7_DTO))); - TABLE_9.setDatabase(DATABASE_4); - TABLE_9.setColumns(TABLE_9_COLUMNS); - TABLE_9.setConstraints(TABLE_9_CONSTRAINTS); - TABLE_9_DTO.setColumns(TABLE_9_COLUMNS_DTO); - TABLE_9_DTO.setConstraints(TABLE_9_CONSTRAINTS_DTO); - IDENTIFIER_7.setStatus(IdentifierStatusType.DRAFT); - IDENTIFIER_7.setDatabase(DATABASE_4); - } - -} diff --git a/dbrepo-metric-db/prometheus.yml b/dbrepo-metric-db/prometheus.yml index ce0a6eb43c..333420ee55 100644 --- a/dbrepo-metric-db/prometheus.yml +++ b/dbrepo-metric-db/prometheus.yml @@ -16,4 +16,4 @@ scrape_configs: - job_name: 'metrics scrape' metrics_path: '/metrics' static_configs: - - targets: ['ui:3000', 'auth-service:9000', 'analyse-service:8080', 'search-service:8080', 'storage-service:9090', 'upload-service:8080', 'dashboard-service:3000', 'broker-service:15692'] + - targets: ['ui:3000', 'auth-service:9000', 'analyse-service:8080', 'search-service:8080', 'storage-service:9090', 'dashboard-service:8080', 'dashboard-ui:3000', 'broker-service:15692'] diff --git a/dbrepo-search-db/Dockerfile b/dbrepo-search-db/Dockerfile deleted file mode 100644 index 022dc438a3..0000000000 --- a/dbrepo-search-db/Dockerfile +++ /dev/null @@ -1,30 +0,0 @@ -FROM opensearchproject/opensearch:2.10.0 AS runtime - -USER root - -RUN yum install -y jq - -COPY ./limits.conf /etc/security/limits.conf - -WORKDIR /usr/share/opensearch - -RUN chmod 0700 ./config -COPY --chown=opensearch:opensearch ./opensearch.yml ./config/opensearch.yml -COPY --chown=opensearch:opensearch ./config.yml ./config/opensearch-security/config.yml - -RUN chmod 0600 ./config/opensearch.yml -RUN chmod 0600 ./config/opensearch-security/config.yml - -COPY --chown=opensearch:opensearch ./pem/admin.pem ./config/admin.pem -COPY --chown=opensearch:opensearch ./pem/admin-key.pem ./config/admin-key.pem -RUN chmod 0600 ./config/admin*.pem -COPY --chown=opensearch:opensearch ./pem/node1.pem ./config/node1.pem -COPY --chown=opensearch:opensearch ./pem/node1-key.pem ./config/node1-key.pem -RUN chmod 0600 ./config/node1*.pem -COPY --chown=opensearch:opensearch ./pem/root-ca.pem ./config/root-ca.pem -COPY --chown=opensearch:opensearch ./pem/root-ca-key.pem ./config/root-ca-key.pem -RUN chmod 0600 ./config/root-ca*.pem - -USER opensearch - -ENV DISABLE_INSTALL_DEMO_CONFIG=true diff --git a/dbrepo-search-db/README.md b/dbrepo-search-db/README.md deleted file mode 100644 index 5b7e1d92f2..0000000000 --- a/dbrepo-search-db/README.md +++ /dev/null @@ -1,16 +0,0 @@ - -# Search Database - -## REST - -### Indices - -* View all [http://localhost:9200/_cat/indices](http://localhost:9200/_cat/indices) - -### Nodes - -* View all [http://localhost:9200/_cat/nodes](http://localhost:9200/_cat/nodes) - -### Health - -* View all [http://localhost:9200/_plugins/_security/health](http://localhost:9200/_plugins/_security/health) \ No newline at end of file diff --git a/dbrepo-search-db/config.yml b/dbrepo-search-db/config.yml deleted file mode 100644 index 37ddd73176..0000000000 --- a/dbrepo-search-db/config.yml +++ /dev/null @@ -1,41 +0,0 @@ ---- - -_meta: - type: "config" - config_version: 2 - -config: - dynamic: - http: - # Either enables or disables anonymous authentication. When true, HTTP authenticators try to find user credentials in - # the HTTP request. If credentials are found, the user is authenticated. If none are found, the user is authenticated - # as an “anonymous” user. This user then has the username “anonymous” and one role named “anonymous_backendrole”. - # When you enable anonymous authentication, all defined HTTP authenticators are non-challenging. Also see The - # challenge setting. - anonymous_auth_enabled: true - xff: - enabled: false - authc: - basic_internal_auth_domain: - description: "Authenticate via HTTP Basic against internal users database" - http_enabled: true - transport_enabled: true - order: 0 - http_authenticator: - type: basic - challenge: true - authentication_backend: - type: intern - openid_auth_domain: - http_enabled: true - transport_enabled: true - order: 1 - http_authenticator: - type: openid - challenge: false - config: - subject_key: client_id - roles_key: roles - openid_connect_url: http://auth-service:8080/api/auth/realms/dbrepo/.well-known/openid-configuration - authentication_backend: - type: noop diff --git a/dbrepo-search-db/generate-pki.sh b/dbrepo-search-db/generate-pki.sh deleted file mode 100644 index 6aff5a819e..0000000000 --- a/dbrepo-search-db/generate-pki.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -# Generate the private key of the root CA -openssl genrsa -out ./pem/root-ca-key.pem 4096 -# Generate the self-signed root CA certificate -openssl req -x509 -sha256 -new -nodes -key ./pem/root-ca-key.pem -days 3650 -out ./pem/root-ca.pem -subj "/C=AT/O=Technische Universität Wien/CN=test.dbrepo.tuwien.ac.at" - -# Create the certificate key -openssl genrsa -out ./pem/admin-key.pem 4096 -# Create the signing (csr) -openssl req -new -sha256 -key ./pem/admin-key.pem -subj "/C=AT/O=Technische Universität Wien/CN=test.dbrepo.tuwien.ac.at" -out ./pem/admin.csr -# Generate the certificate using the csr and key along with the CA Root key -openssl x509 -req -in ./pem/admin.csr -CA ./pem/root-ca.pem -CAkey ./pem/root-ca-key.pem -CAcreateserial -out ./pem/admin.pem -days 365 -sha256 - -# Create the certificate key -openssl genrsa -out ./pem/node1-key.pem 4096 -# Create the signing (csr) -openssl req -new -sha256 -key ./pem/node1-key.pem -subj "/C=AT/O=Technische Universität Wien/CN=test.dbrepo.tuwien.ac.at" -out ./pem/node1.csr -# Generate the certificate using the csr and key along with the CA Root key -openssl x509 -req -in ./pem/node1.csr -CA ./pem/root-ca.pem -CAkey ./pem/root-ca-key.pem -CAcreateserial -out ./pem/node1.pem -days 365 -sha256 \ No newline at end of file diff --git a/dbrepo-search-db/limits.conf b/dbrepo-search-db/limits.conf deleted file mode 100644 index 80050ed398..0000000000 --- a/dbrepo-search-db/limits.conf +++ /dev/null @@ -1,3 +0,0 @@ -# allow user 'opensearch' mlockall -opensearch soft memlock unlimited -opensearch hard memlock unlimited diff --git a/dbrepo-search-db/opensearch.yml b/dbrepo-search-db/opensearch.yml deleted file mode 100644 index b64bacde53..0000000000 --- a/dbrepo-search-db/opensearch.yml +++ /dev/null @@ -1,21 +0,0 @@ ---- -cluster.name: search-db - -# Bind to all interfaces because we don't know what IP address Docker will assign to us. -network.host: 0.0.0.0 - -# Setting network.host to a non-loopback address enables the annoying bootstrap checks. "Single-node" mode disables them again. -discovery.type: single-node - -plugins.security.ssl.transport.pemcert_filepath: /usr/share/opensearch/config/node1.pem -plugins.security.ssl.transport.pemkey_filepath: /usr/share/opensearch/config/node1-key.pem -plugins.security.ssl.transport.pemtrustedcas_filepath: /usr/share/opensearch/config/root-ca.pem -plugins.security.ssl.http.pemcert_filepath: /usr/share/opensearch/config/node1.pem -plugins.security.ssl.http.pemkey_filepath: /usr/share/opensearch/config/node1-key.pem -plugins.security.ssl.http.pemtrustedcas_filepath: r/usr/share/opensearch/config/root-ca.pem -plugins.security.allow_default_init_securityindex: true -plugins.security.audit.type: internal_opensearch -plugins.security.enable_snapshot_restore_privilege: true -plugins.security.check_snapshot_restore_write_privileges: true -plugins.security.restapi.roles_enabled: ["all_access", "security_rest_api_access"] -cluster.routing.allocation.disk.threshold_enabled: false diff --git a/dbrepo-search-db/opensearch_dashboards.yml b/dbrepo-search-db/opensearch_dashboards.yml deleted file mode 100644 index e6e255a48c..0000000000 --- a/dbrepo-search-db/opensearch_dashboards.yml +++ /dev/null @@ -1,5 +0,0 @@ -server.name: log-dashboard -server.host: "0.0.0.0" -opensearch.hosts: http://search-db:9200 -opensearch.username: admin -opensearch.password: admin diff --git a/dbrepo-search-db/pem/admin-key.pem b/dbrepo-search-db/pem/admin-key.pem deleted file mode 100644 index e7310ac797..0000000000 --- a/dbrepo-search-db/pem/admin-key.pem +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- diff --git a/dbrepo-search-db/pem/admin.csr b/dbrepo-search-db/pem/admin.csr deleted file mode 100644 index 65320f6864..0000000000 --- a/dbrepo-search-db/pem/admin.csr +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIEnjCCAoYCAQAwWTELMAkGA1UEBhMCQVQxJzAlBgNVBAoMHlRlY2huaXNjaGUg -VW5pdmVyc2l0w4PCpHQgV2llbjEhMB8GA1UEAwwYdGVzdC5kYnJlcG8udHV3aWVu -LmFjLmF0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2IAI4L2wvxlV -S/StlmCQVQLMz+Oif7R2ydDsy1io/W5Tf+68N6Ybn3b6GUjeVMNT49gCctYoDBOb -uu9ZdKYsYzF1gr8j0LoNoXIUg0wo5vTz2jQoB747q6ttTI6s6VgMknZx62FQ0tlY -QwyXSTAq4JT/Rr2fO1wkPzafmdQ56n3DPkznHjikgx7bXmez8DpxvwN4YJpdT1cG -CE4OYQipPpHfqSOnzJG4E6C/78juErX7vH2HY3t2TGXdvXnSMZym9Ie7MNNZln9p -y0KjJykXnbuh3dLZfCtkEcjyxZTQzaQgIKsNG0g8ViHx7jJE0Dn4MpcWI9cQ4BfS -Lg4Gg+ToK3EFa0VtOWiFgLZqA3bro5i2zSLKXhdls2sTe0ftKdkoRckswB4IffsU -+zc7WtQw+MHjrZEfVd38lShydmQx+HoARb4tIniSUujEz6FX9+EbCGvWgPC2TRgq -XtQAuILlkykvkXMk5bP+YqeL+Ul1TPw/t/R7KLp/7XJhGvkuZrbZnd1jGN5WpD1D -vrliV3apJbfbcGb/DgxUHwBkx+dNYrPKyVXq+gtHM0q1NNHFMl7NHn1gCaXghnNy -7lWDPx8Rt5xlnu7xtIoub/Ou4USx55FdIP5uX165FpelBlrdAqt2HqFABj36jt8y -IbvPL+r+VQrjjOyFKCFyJPzcpciPWCkCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IC -AQCLRTDst5KQB/tEKxxYGKsoykZzHzEME+UsjWwu3EFvKWeN96H4ZzcDoFA106R5 -ernGiy7VPr6AjJ5osYZM6LooBZ7RGMBoBufYCuy4rHbj2+5V/+B8Nyhlcse15d6j -6YKKGsz6sTpxdOb26+RR5WDiOlF4uSinGVeLBLKIhDiWK/U7lNeZofqrVZhEhKHN -O8jYOW5igmMF7ydqX1qCmKyQR1UHLyGqbX1LrOK38UQux3hXpW/5QbwcokhxJnIV -YlLbrDrJoQ7TvtQA4JiAJ1SQ2WTYGbTWaFsv3qyFezJgpiLzqtqatn94yJ9B5fGb -W2OO8/NUtg1UXPlUxNOQMJbI7iLoEBZPBEEhusuMyp9jvshKaK0N7Vv3cbPZj/qm -EnBjLYEBEa5pcHo+q0n9F4IYFvDuks6dv8tu2VnBOYcGsYJHFoo3Ubv1JoCH1wXl -ApFWK55GuZqOLcsptqUVVkK5XvXlCuhBieThJcpR4qD5nA1yL0qZ8Jlt7sSufBHd -hOUkqQrHKXE5i14dKru3IWo5MjgmSBe3yv9Jxp6+GkWqcada9eMjHDaGfzHeSNmW -HVF1fvgEJUsjEgYk6rOB38i4aSQNSuJ/3z7Dtu3FFugPEpE8IcryUWZJjE8LFq9P -VOwcOSaWhve/oiWxZuARAm1B0NamHuRgT0DBooYhd4rAmA== ------END CERTIFICATE REQUEST----- diff --git a/dbrepo-search-db/pem/admin.pem b/dbrepo-search-db/pem/admin.pem deleted file mode 100644 index 43ae3e3fe5..0000000000 --- a/dbrepo-search-db/pem/admin.pem +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFOTCCAyECFA8pGpUGVSN3/rXMBf0WWMvA90juMA0GCSqGSIb3DQEBCwUAMFkx -CzAJBgNVBAYTAkFUMScwJQYDVQQKDB5UZWNobmlzY2hlIFVuaXZlcnNpdMODwqR0 -IFdpZW4xITAfBgNVBAMMGHRlc3QuZGJyZXBvLnR1d2llbi5hYy5hdDAeFw0yMzEw -MjAxOTQwNThaFw0yNDEwMTkxOTQwNThaMFkxCzAJBgNVBAYTAkFUMScwJQYDVQQK -DB5UZWNobmlzY2hlIFVuaXZlcnNpdMODwqR0IFdpZW4xITAfBgNVBAMMGHRlc3Qu -ZGJyZXBvLnR1d2llbi5hYy5hdDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC -ggIBANiACOC9sL8ZVUv0rZZgkFUCzM/jon+0dsnQ7MtYqP1uU3/uvDemG592+hlI -3lTDU+PYAnLWKAwTm7rvWXSmLGMxdYK/I9C6DaFyFINMKOb089o0KAe+O6urbUyO -rOlYDJJ2cethUNLZWEMMl0kwKuCU/0a9nztcJD82n5nUOep9wz5M5x44pIMe215n -s/A6cb8DeGCaXU9XBghODmEIqT6R36kjp8yRuBOgv+/I7hK1+7x9h2N7dkxl3b15 -0jGcpvSHuzDTWZZ/actCoycpF527od3S2XwrZBHI8sWU0M2kICCrDRtIPFYh8e4y -RNA5+DKXFiPXEOAX0i4OBoPk6CtxBWtFbTlohYC2agN266OYts0iyl4XZbNrE3tH -7SnZKEXJLMAeCH37FPs3O1rUMPjB462RH1Xd/JUocnZkMfh6AEW+LSJ4klLoxM+h -V/fhGwhr1oDwtk0YKl7UALiC5ZMpL5FzJOWz/mKni/lJdUz8P7f0eyi6f+1yYRr5 -Lma22Z3dYxjeVqQ9Q765Yld2qSW323Bm/w4MVB8AZMfnTWKzyslV6voLRzNKtTTR -xTJezR59YAml4IZzcu5Vgz8fEbecZZ7u8bSKLm/zruFEseeRXSD+bl9euRaXpQZa -3QKrdh6hQAY9+o7fMiG7zy/q/lUK44zshSghciT83KXIj1gpAgMBAAEwDQYJKoZI -hvcNAQELBQADggIBAHc2ACMWyQuSZeah9zAaPGeKS0OmBUF3dI35ApE33lz266oh -e/EeOaWocul8I9aqW8yoBfGJ/MazTUx4zrOIXSHX5s5Owt7OksRnvlwLbRBHMQ/X -GLqb2HFuGtmVANVkkw4AkSGoDxc+BUqgetbqMczf6HQKQk4OKPN4HWc3ak22UaKb -lIgIFvU0c1UjbczXTSZR1qr/6nH2Kn7qlN3qmRw7MT45uvKn+/J961b5cwvWNpf+ -mi5V4vC7j5+d5SFAgwuFH09aPUaShA5E58VvAO8FqJYTqigobcqvKZkZ0s1udfW6 -2zOoLCwF48u8UuHjIpJUe/IkQv2D/RMrA21XFQJp5BbVcDqX99/ZSA92ha2iLxqZ -Ngte9QSbliDGETyPY251hPwHVWRrn0POJB6xGn3n0XLmgj5+LDWBHo776GtehsNS -hWbG4Uqh33WkOboqb8nSQARckdxv3jUDI8rVj5w/nuEXqk+/uZ8Nqgw9GUSKJ5lM -17va57Vvo+p8p4m0XvqkcTpEqKfD+vfLGm5z3Fz1IrXQB+cCa8lM2DzAWua4NEwt -xazm5eQenU69OhFrPwVstmL0CLLd3yHKv8Yr+LXTiKBBInWGmQZ7qwyEkUDK46lS -LL0LplajHeGJ7VnpwPFoVcwVQt9+WPLFDUNQK1l3kVsiPfoUyD7aUeElrS6h ------END CERTIFICATE----- diff --git a/dbrepo-search-db/pem/node1-key.pem b/dbrepo-search-db/pem/node1-key.pem deleted file mode 100644 index 359df25e2e..0000000000 --- a/dbrepo-search-db/pem/node1-key.pem +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- diff --git a/dbrepo-search-db/pem/node1.csr b/dbrepo-search-db/pem/node1.csr deleted file mode 100644 index d0a4464a50..0000000000 --- a/dbrepo-search-db/pem/node1.csr +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIEnjCCAoYCAQAwWTELMAkGA1UEBhMCQVQxJzAlBgNVBAoMHlRlY2huaXNjaGUg -VW5pdmVyc2l0w4PCpHQgV2llbjEhMB8GA1UEAwwYdGVzdC5kYnJlcG8udHV3aWVu -LmFjLmF0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuwKkBUg/6Sqa -W1zaqCWP8FfIWP/FzoG63h5/tZXS2wFGmOfQh3pRy+BCebN1R5lJGhc6zzOTnyvt -OK6u7EA/oVv2uLIgirE4OSU1qUoaY7FlPSFygUzF6GiSraIFMIz7VFcY7hWA9KXj -XE8eSvqpij6iOrXuB7iFrR4SoT2mM+LduSl+S1EfM56IwlA4LQZ1JbAWexLIr6w4 -vZ8KjSaeLku8XqNjHaGE3Qj8BgUNwMqHA4eUHlh28dW8y8mo/Un1CCP4kOFyhsKB -2AYXy/FNgUgyRi9NKQX1FuxzCaJ7K/lAgeR/zNUhpr8XBInoXMkXZkjzPQfH/26v -B2rIvtW5sKemwNdUmA4Y+BSD/v+9SH7nxml151eGxEeU8Jjo51MRH7xIMWAri7Ae -2Ch9Bc3rYAjvtmH2TkzPPYw9ZE80fqSRIW5gJntyxlUB3kuRv/pp7OnPPpLjOGa9 -6r+CaMHkrI0YzsAgd9VOasi4LiJqDtxQgw/SXYitPJXktnB3Z+hhV2QpSxpkXpqe -azus7MarzRk6nHDfABhyZhYc75KBN/WGfCRjs/3DviBiRlmnksSmBu8WsT1tegHC -XJvCxzyQ7l67dSKGbzi2wnbedvkd+sUt9ZpsYRJiUu1/9zWHKfX4+szPBecFBT9a -0jxR1+wvLLb5iBS0uhRuz4JW21srRsMCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IC -AQA6QDgWK0UlMpshwMrkoHsw0FN5r6/Rq1d11QpN0828qwE47K38xreBWRQGlxHT -TDdFQih9RMGz7CV7AncQ6rPueBE8zG3l1R3TZZkbdLwYlWnLTjlHzrmdx5qHbuYC -EB05XukVI7mWZ6WagQZMDuf6qct3I9VSgQ62F/XygNsMoHHIbFtnLVWx3slon6oF -aAx8/8AROyZeSDCTMSoGVdk1i9TUSU6vwxdrlY+mXviHhq236Dvdx9zrQdUT0ohd -UG3oeRZjNa9NoPUJQ7VMXuj77jAFwzhytZKdg04MuD6wxiQ651TLQ9S9yyYq/77/ -sW5uVMKnGUfUS8WeX5U3HG2FnQCPZ2gT5VLo2f9td/elieGVuUiyNThpPJsNHW/j -/dEli8Qqvcrh8TVp8MZKS9FFX5tW7yaRllakrHikwiIuqWQG8ZSX/AzSNkNPvEnA -yc2GtBvd7ICKV2LjReUsizzQv46dviIAUh2DznQg9Y90/jBUZFtFAj9vY3hNaWy+ -iYPDWZPmWGGg5oj90PJPeGaEdZN4pZ0QyOsuInkHNDGh3/PjcIxXZKr8wHPpsvB/ -vJc/AzLvgLsxejaTKIjYnJvlp0U7bhN1rpQYk66PLLG+teaW6eX4ZbJM3KHBwMhb -V1CqYFHgZE2L40j78FUFgZCWGHZ7BqdWKiC7t5plxgQ1Hw== ------END CERTIFICATE REQUEST----- diff --git a/dbrepo-search-db/pem/node1.pem b/dbrepo-search-db/pem/node1.pem deleted file mode 100644 index 5704f25dbc..0000000000 --- a/dbrepo-search-db/pem/node1.pem +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFOTCCAyECFA8pGpUGVSN3/rXMBf0WWMvA90jvMA0GCSqGSIb3DQEBCwUAMFkx -CzAJBgNVBAYTAkFUMScwJQYDVQQKDB5UZWNobmlzY2hlIFVuaXZlcnNpdMODwqR0 -IFdpZW4xITAfBgNVBAMMGHRlc3QuZGJyZXBvLnR1d2llbi5hYy5hdDAeFw0yMzEw -MjAxOTQxMDBaFw0yNDEwMTkxOTQxMDBaMFkxCzAJBgNVBAYTAkFUMScwJQYDVQQK -DB5UZWNobmlzY2hlIFVuaXZlcnNpdMODwqR0IFdpZW4xITAfBgNVBAMMGHRlc3Qu -ZGJyZXBvLnR1d2llbi5hYy5hdDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC -ggIBALsCpAVIP+kqmltc2qglj/BXyFj/xc6But4ef7WV0tsBRpjn0Id6UcvgQnmz -dUeZSRoXOs8zk58r7TiuruxAP6Fb9riyIIqxODklNalKGmOxZT0hcoFMxehokq2i -BTCM+1RXGO4VgPSl41xPHkr6qYo+ojq17ge4ha0eEqE9pjPi3bkpfktRHzOeiMJQ -OC0GdSWwFnsSyK+sOL2fCo0mni5LvF6jYx2hhN0I/AYFDcDKhwOHlB5YdvHVvMvJ -qP1J9Qgj+JDhcobCgdgGF8vxTYFIMkYvTSkF9Rbscwmieyv5QIHkf8zVIaa/FwSJ -6FzJF2ZI8z0Hx/9urwdqyL7VubCnpsDXVJgOGPgUg/7/vUh+58ZpdedXhsRHlPCY -6OdTER+8SDFgK4uwHtgofQXN62AI77Zh9k5Mzz2MPWRPNH6kkSFuYCZ7csZVAd5L -kb/6aezpzz6S4zhmveq/gmjB5KyNGM7AIHfVTmrIuC4iag7cUIMP0l2IrTyV5LZw -d2foYVdkKUsaZF6anms7rOzGq80ZOpxw3wAYcmYWHO+SgTf1hnwkY7P9w74gYkZZ -p5LEpgbvFrE9bXoBwlybwsc8kO5eu3Uihm84tsJ23nb5HfrFLfWabGESYlLtf/c1 -hyn1+PrMzwXnBQU/WtI8UdfsLyy2+YgUtLoUbs+CVttbK0bDAgMBAAEwDQYJKoZI -hvcNAQELBQADggIBANPQq2mJZ+UwgihSuo2iHJRljm4csiKUsf5Q9SvtmyeXYZVp -41T04DPucrgMVXlVSAIyclBWzoloSiiBsv28iM6ZWvEt8TdNjzWEMioihWVkjI+X -eNCumk8h/+OUfjRE50LJh94Is/7vCMNfKBL0r8SBWO5kJuhrlV7TWopygR8zPQ4p -xcjN0v/nMWS5EZCvP5cl4pmooyhGMJjwvfujUgeUi+jK5EJtSlccXjPpq9//e4/u -x5D+cS0BPSp7/NYVjUVG31qK6SJ2XBjBg2IInVuLCbfyF2QHK0TQafWbtirzxtQi -PJDrisqPAqrTol38Ov3r/+U97pSbOTfMwtA58bJfFr+jIXxhRMlvGflbdrU2SZOp -GyENHBR0yb06qCGuyhZ9PYap4yLNxq95ENw/pzRii70cehaOlix6iVkN/Cdh9xnx -h8WfY73eIfsDB8JNHYEBg2UREu5RLMpqXUIoJ++5yIIhZp7VOy+COQv8Ovewt/Vz -wVoTYovMPOBJpAOqy91RFJuyr/ewPbw/H2nq1ak8jSr0bWqAgBCFWVFMbRjWQ9T6 -LXrN4poIHlU6NbAVUtKqs7Uksj5ZAd90v20QUJHFLclpjTbRo/JcpChHSmhI1L0j -JMPc90BgcRDQWx8pFd+kklpgW5o0Cx+ZkW1dY62c0sY0wLlJxoxPshr+ZR2N ------END CERTIFICATE----- diff --git a/dbrepo-search-db/pem/root-ca-key.pem b/dbrepo-search-db/pem/root-ca-key.pem deleted file mode 100644 index 06192a8ceb..0000000000 --- a/dbrepo-search-db/pem/root-ca-key.pem +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- diff --git a/dbrepo-search-db/pem/root-ca.pem b/dbrepo-search-db/pem/root-ca.pem deleted file mode 100644 index 47b1af9d1e..0000000000 --- a/dbrepo-search-db/pem/root-ca.pem +++ /dev/null @@ -1,32 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFkzCCA3ugAwIBAgIUIlyZZ6AC0dvI9/szfx2KotOqhpAwDQYJKoZIhvcNAQEL -BQAwWTELMAkGA1UEBhMCQVQxJzAlBgNVBAoMHlRlY2huaXNjaGUgVW5pdmVyc2l0 -w4PCpHQgV2llbjEhMB8GA1UEAwwYdGVzdC5kYnJlcG8udHV3aWVuLmFjLmF0MB4X -DTIzMTAyMDE5NDA1N1oXDTMzMTAxNzE5NDA1N1owWTELMAkGA1UEBhMCQVQxJzAl -BgNVBAoMHlRlY2huaXNjaGUgVW5pdmVyc2l0w4PCpHQgV2llbjEhMB8GA1UEAwwY -dGVzdC5kYnJlcG8udHV3aWVuLmFjLmF0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEA5zjphoEVAZzg5au4dvdejXuk6R151mt5hTxZgAcI1ahitR+UDTJy -av7y3CRbRKFLYGYc4Au0AI7j/z2OgT2dcAegTTcsv+hU4FL53Y/DHrv7NAd74kHp -AAgNT/S7C3+JdFtD3/34up8NvrtYieZkyNrApAEB8RluxG6VlgSU0samMHHeIoP1 -Np8BJC3nXEm6deIGkEBAmwT9mTSUnwGfCAtrYiCDQHKTd+zwyZjmMthCA7DhkIeU -K5+eaGXjxg+Oyiv2mY8cKT0q/xavGGewcujQwaTQq1jnOtZ2MaOS7tI9Gl9P1IsU -eum5lNQ8IRNr5/KamKaDRjXE83gBFKx5tyP0Sy4JQKQq1iLNXCxRbPcdkVRY8RGy -szbB9jqE2+JANjrkfx9hFfDh+5cBUJpXNO+RO+GWs6ctS3w2zfMWICUDLXsyhFXY -xmLFZZjVp6tiXGVDvPSs3X49r6FZ/Q8c2JAKyBfDzEbI8kaCdUw3/IqIfeF2pn3d -Py4IaH/oAXAADLaGmvWMXVJV4OEMAYq1tQ3OYcVNRN4pDcc/wwW6A+r/UE6AcNOZ -83HvUNJgPk4wUAvshqg2ZrDxk2ZDE7z8lesNEenAXt7g3cNdAYmOwr5MgTtrqS9/ -r02gFDrOmcg/hZ9UO9yUZKo0ChkK5PehelH2blGRO5X2BwDvKJqnCzkCAwEAAaNT -MFEwHQYDVR0OBBYEFBTLcdE8I6tQvEEdD1COQLmHQiofMB8GA1UdIwQYMBaAFBTL -cdE8I6tQvEEdD1COQLmHQiofMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggIBAF2TN5VdkoULWy4bVHrkGfkdO6vTDx6qqp4m6rqqcf7XwglScn86fFzD -TmZM+klXOl1HUVKU6NiFb+ZH79HL8O+63XzaBzH588InuF+uW7Zmh7qmZGU/J58w -ZXbl0aaBZmM3mEjz7uqrlb/gjlwhXKYWTLeqBFSNxteOLhkYBSc4XBxoU4yyjmlN -3GX1NgKLnUzdIspnmH6wGQ1pFXwePso6SnKctUJ79ROicwhDCsbBJ5BfZ8Ura7Eh -DFO68Y2eDfIjWEiJ5qTtXG1Q8VHzisxtTarPaa9DcZTFIdGWndafGe2+wOqneOtE -YZ76In7iXBdTxJRuMBnUwZStmBp38+/GryTT1Zmvtj6zJNJP9FNf+zUqaC7dAscJ -rscTc7dxhRB26AHPEkyb3sOnfi5RDQskkR4KS0n4MlfTm3cnDXc6Vf8T2BZORXA7 -xuRjjAYNzEOBog47LNKXSn2eof0eJN1WIszdbSuHIeLbpT4j6ASI91oEeSyH+hiY -WX4pn+GaOmETlJtLKATSScvzCKXhM2H+hfGpF9zCtWy748pQXAtqsM7itx80JDY+ -3q8Lw2Y3A9NdeelBdJuRYr+7khNosLVhJlPZOSApnbJG/6FkH1ZlOvJ4zdZq75IE -hQ4WWtstrjTwE1W/fV0dOg/9idfU9FViQ5y3fEKfcOoZjGLQxgQO ------END CERTIFICATE----- diff --git a/dbrepo-search-db/pem/root-ca.srl b/dbrepo-search-db/pem/root-ca.srl deleted file mode 100644 index 6f3548578c..0000000000 --- a/dbrepo-search-db/pem/root-ca.srl +++ /dev/null @@ -1 +0,0 @@ -0F291A9506552377FEB5CC05FD1658CBC0F748EF diff --git a/dbrepo-search-service/.gitignore b/dbrepo-search-service/.gitignore index 726e588cd1..e4a1bfbd16 100644 --- a/dbrepo-search-service/.gitignore +++ b/dbrepo-search-service/.gitignore @@ -38,12 +38,6 @@ MANIFEST *.manifest *.spec -# generate -/friendly_names_overrides.json -/test/rsa -/test/test_keycloak_client.py -/test/test_opensearch_client.py - # Installer logs pip-log.txt pip-delete-this-directory.txt diff --git a/dbrepo-search-service/.testpickle b/dbrepo-search-service/.testpickle deleted file mode 100644 index 8588dbe4ae53420fa89daf9e6c52728afad63086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100 zcmZo*nX1kJ0ku;!dRPkbi%O>Suo@egn_EojVadoZE}7E9nUkNKm;+{)>fzC0fL#Xw D-3=fM diff --git a/dbrepo-search-service/Dockerfile b/dbrepo-search-service/Dockerfile index 3e46d8fc90..8b7356470d 100644 --- a/dbrepo-search-service/Dockerfile +++ b/dbrepo-search-service/Dockerfile @@ -13,12 +13,12 @@ RUN pip install pipenv && \ pipenv install gunicorn && \ pipenv install --system --deploy -USER 1001 +RUN adduser -D dbrepo --uid 1001 WORKDIR /app -COPY --chown=1001 ./init/clients ./clients -COPY --chown=1001 ./init/omlib ./omlib +USER 1001 + COPY --chown=1001 ./init/friendly_names_overrides.json ./friendly_names_overrides.json COPY --chown=1001 ./os-yml ./os-yml COPY --chown=1001 ./app.py ./app.py diff --git a/dbrepo-search-service/Pipfile b/dbrepo-search-service/Pipfile index 2c5f2a319a..f3a2c53320 100644 --- a/dbrepo-search-service/Pipfile +++ b/dbrepo-search-service/Pipfile @@ -18,7 +18,8 @@ jwt = "~=1.3" testcontainers-opensearch = "*" pytest = "*" rdflib = "*" -dbrepo = {path = "./lib/dbrepo-1.7.3.tar.gz"} +grafana-client = "*" +dbrepo = {path = "./lib/dbrepo-1.8.0.tar.gz"} gunicorn = "*" [dev-packages] diff --git a/dbrepo-search-service/Pipfile.lock b/dbrepo-search-service/Pipfile.lock index 23c64796a6..5f07119f32 100644 --- a/dbrepo-search-service/Pipfile.lock +++ b/dbrepo-search-service/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "7996ac8acc7350e2485cccbdc5226347f8590634130778a023c0efb67932f296" + "sha256": "fb499e12b1aebca72d5bf49fe952273163696c251b5b6440361db361baa21131" }, "pipfile-spec": 6, "requires": { @@ -26,90 +26,90 @@ }, "aiohttp": { "hashes": [ - "sha256:04eb541ce1e03edc1e3be1917a0f45ac703e913c21a940111df73a2c2db11d73", - "sha256:05582cb2d156ac7506e68b5eac83179faedad74522ed88f88e5861b78740dc0e", - "sha256:0a29be28e60e5610d2437b5b2fed61d6f3dcde898b57fb048aa5079271e7f6f3", - "sha256:0b2501f1b981e70932b4a552fc9b3c942991c7ae429ea117e8fba57718cdeed0", - "sha256:0df3788187559c262922846087e36228b75987f3ae31dd0a1e5ee1034090d42f", - "sha256:12c5869e7ddf6b4b1f2109702b3cd7515667b437da90a5a4a50ba1354fe41881", - "sha256:14fc03508359334edc76d35b2821832f092c8f092e4b356e74e38419dfe7b6de", - "sha256:1a7169ded15505f55a87f8f0812c94c9412623c744227b9e51083a72a48b68a5", - "sha256:1c68e41c4d576cd6aa6c6d2eddfb32b2acfb07ebfbb4f9da991da26633a3db1a", - "sha256:20412c7cc3720e47a47e63c0005f78c0c2370020f9f4770d7fc0075f397a9fb0", - "sha256:22a8107896877212130c58f74e64b77f7007cb03cea8698be317272643602d45", - "sha256:28a3d083819741592685762d51d789e6155411277050d08066537c5edc4066e6", - "sha256:2b86efe23684b58a88e530c4ab5b20145f102916bbb2d82942cafec7bd36a647", - "sha256:2d0b46abee5b5737cb479cc9139b29f010a37b1875ee56d142aefc10686a390b", - "sha256:321238a42ed463848f06e291c4bbfb3d15ba5a79221a82c502da3e23d7525d06", - "sha256:3a8a0d127c10b8d89e69bbd3430da0f73946d839e65fec00ae48ca7916a31948", - "sha256:3a8b0321e40a833e381d127be993b7349d1564b756910b28b5f6588a159afef3", - "sha256:3b420d076a46f41ea48e5fcccb996f517af0d406267e31e6716f480a3d50d65c", - "sha256:3b512f1de1c688f88dbe1b8bb1283f7fbeb7a2b2b26e743bb2193cbadfa6f307", - "sha256:413fe39fd929329f697f41ad67936f379cba06fcd4c462b62e5b0f8061ee4a77", - "sha256:41cf0cefd9e7b5c646c2ef529c8335e7eafd326f444cc1cdb0c47b6bc836f9be", - "sha256:4848ae31ad44330b30f16c71e4f586cd5402a846b11264c412de99fa768f00f3", - "sha256:4b0a200e85da5c966277a402736a96457b882360aa15416bf104ca81e6f5807b", - "sha256:4e2e8ef37d4bc110917d038807ee3af82700a93ab2ba5687afae5271b8bc50ff", - "sha256:4edcbe34e6dba0136e4cabf7568f5a434d89cc9de5d5155371acda275353d228", - "sha256:51ba80d473eb780a329d73ac8afa44aa71dfb521693ccea1dea8b9b5c4df45ce", - "sha256:5409a59d5057f2386bb8b8f8bbcfb6e15505cedd8b2445db510563b5d7ea1186", - "sha256:572def4aad0a4775af66d5a2b5923c7de0820ecaeeb7987dcbccda2a735a993f", - "sha256:599b66582f7276ebefbaa38adf37585e636b6a7a73382eb412f7bc0fc55fb73d", - "sha256:59a05cdc636431f7ce843c7c2f04772437dd816a5289f16440b19441be6511f1", - "sha256:602d4db80daf4497de93cb1ce00b8fc79969c0a7cf5b67bec96fa939268d806a", - "sha256:65c75b14ee74e8eeff2886321e76188cbe938d18c85cff349d948430179ad02c", - "sha256:69bb252bfdca385ccabfd55f4cd740d421dd8c8ad438ded9637d81c228d0da49", - "sha256:6d3986112e34eaa36e280dc8286b9dd4cc1a5bcf328a7f147453e188f6fe148f", - "sha256:6dd9766da617855f7e85f27d2bf9a565ace04ba7c387323cd3e651ac4329db91", - "sha256:70ab0f61c1a73d3e0342cedd9a7321425c27a7067bebeeacd509f96695b875fc", - "sha256:749f1eb10e51dbbcdba9df2ef457ec060554842eea4d23874a3e26495f9e87b1", - "sha256:781c8bd423dcc4641298c8c5a2a125c8b1c31e11f828e8d35c1d3a722af4c15a", - "sha256:7e7abe865504f41b10777ac162c727af14e9f4db9262e3ed8254179053f63e6d", - "sha256:7f2dadece8b85596ac3ab1ec04b00694bdd62abc31e5618f524648d18d9dd7fa", - "sha256:86135c32d06927339c8c5e64f96e4eee8825d928374b9b71a3c42379d7437058", - "sha256:8778620396e554b758b59773ab29c03b55047841d8894c5e335f12bfc45ebd28", - "sha256:87f0e003fb4dd5810c7fbf47a1239eaa34cd929ef160e0a54c570883125c4831", - "sha256:8aa5c68e1e68fff7cd3142288101deb4316b51f03d50c92de6ea5ce646e6c71f", - "sha256:8d14e274828561db91e4178f0057a915f3af1757b94c2ca283cb34cbb6e00b50", - "sha256:8d1dd75aa4d855c7debaf1ef830ff2dfcc33f893c7db0af2423ee761ebffd22b", - "sha256:92007c89a8cb7be35befa2732b0b32bf3a394c1b22ef2dff0ef12537d98a7bda", - "sha256:92868f6512714efd4a6d6cb2bfc4903b997b36b97baea85f744229f18d12755e", - "sha256:948abc8952aff63de7b2c83bfe3f211c727da3a33c3a5866a0e2cf1ee1aa950f", - "sha256:95d7787f2bcbf7cb46823036a8d64ccfbc2ffc7d52016b4044d901abceeba3db", - "sha256:997b57e38aa7dc6caab843c5e042ab557bc83a2f91b7bd302e3c3aebbb9042a1", - "sha256:99b8bbfc8111826aa8363442c0fc1f5751456b008737ff053570f06a151650b3", - "sha256:9e73fa341d8b308bb799cf0ab6f55fc0461d27a9fa3e4582755a3d81a6af8c09", - "sha256:a0d2c04a623ab83963576548ce098baf711a18e2c32c542b62322a0b4584b990", - "sha256:a40087b82f83bd671cbeb5f582c233d196e9653220404a798798bfc0ee189fff", - "sha256:ad1f2fb9fe9b585ea4b436d6e998e71b50d2b087b694ab277b30e060c434e5db", - "sha256:b05774864c87210c531b48dfeb2f7659407c2dda8643104fb4ae5e2c311d12d9", - "sha256:b41693b7388324b80f9acfabd479bd1c84f0bc7e8f17bab4ecd9675e9ff9c734", - "sha256:b42dbd097abb44b3f1156b4bf978ec5853840802d6eee2784857be11ee82c6a0", - "sha256:b4e7c7ec4146a94a307ca4f112802a8e26d969018fabed526efc340d21d3e7d0", - "sha256:b59d096b5537ec7c85954cb97d821aae35cfccce3357a2cafe85660cc6295628", - "sha256:b9c60d1de973ca94af02053d9b5111c4fbf97158e139b14f1be68337be267be6", - "sha256:bccd2cb7aa5a3bfada72681bdb91637094d81639e116eac368f8b3874620a654", - "sha256:c32593ead1a8c6aabd58f9d7ee706e48beac796bb0cb71d6b60f2c1056f0a65f", - "sha256:c7571f99525c76a6280f5fe8e194eeb8cb4da55586c3c61c59c33a33f10cfce7", - "sha256:c8b2df9feac55043759aa89f722a967d977d80f8b5865a4153fc41c93b957efc", - "sha256:ca9f835cdfedcb3f5947304e85b8ca3ace31eef6346d8027a97f4de5fb687534", - "sha256:cc9253069158d57e27d47a8453d8a2c5a370dc461374111b5184cf2f147a3cc3", - "sha256:ced66c5c6ad5bcaf9be54560398654779ec1c3695f1a9cf0ae5e3606694a000a", - "sha256:d173c0ac508a2175f7c9a115a50db5fd3e35190d96fdd1a17f9cb10a6ab09aa1", - "sha256:d6edc538c7480fa0a3b2bdd705f8010062d74700198da55d16498e1b49549b9c", - "sha256:daf20d9c3b12ae0fdf15ed92235e190f8284945563c4b8ad95b2d7a31f331cd3", - "sha256:dc311634f6f28661a76cbc1c28ecf3b3a70a8edd67b69288ab7ca91058eb5a33", - "sha256:e2bc827c01f75803de77b134afdbf74fa74b62970eafdf190f3244931d7a5c0d", - "sha256:e365034c5cf6cf74f57420b57682ea79e19eb29033399dd3f40de4d0171998fa", - "sha256:e906da0f2bcbf9b26cc2b144929e88cb3bf943dd1942b4e5af066056875c7618", - "sha256:e9faafa74dbb906b2b6f3eb9942352e9e9db8d583ffed4be618a89bd71a4e914", - "sha256:ec6cd1954ca2bbf0970f531a628da1b1338f594bf5da7e361e19ba163ecc4f3b", - "sha256:f296d637a50bb15fb6a229fbb0eb053080e703b53dbfe55b1e4bb1c5ed25d325", - "sha256:f30fc72daf85486cdcdfc3f5e0aea9255493ef499e31582b34abadbfaafb0965", - "sha256:fe846f0a98aa9913c2852b630cd39b4098f296e0907dd05f6c7b30d911afa4c3" + "sha256:004511d3413737700835e949433536a2fe95a7d0297edd911a1e9705c5b5ea43", + "sha256:0902e887b0e1d50424112f200eb9ae3dfed6c0d0a19fc60f633ae5a57c809656", + "sha256:09b00dd520d88eac9d1768439a59ab3d145065c91a8fab97f900d1b5f802895e", + "sha256:0a2f451849e6b39e5c226803dcacfa9c7133e9825dcefd2f4e837a2ec5a3bb98", + "sha256:0a950c2eb8ff17361abd8c85987fd6076d9f47d040ebffce67dce4993285e973", + "sha256:0ad1fb47da60ae1ddfb316f0ff16d1f3b8e844d1a1e154641928ea0583d486ed", + "sha256:13ceac2c5cdcc3f64b9015710221ddf81c900c5febc505dbd8f810e770011540", + "sha256:14461157d8426bcb40bd94deb0450a6fa16f05129f7da546090cebf8f3123b0f", + "sha256:16f8a2c9538c14a557b4d309ed4d0a7c60f0253e8ed7b6c9a2859a7582f8b1b8", + "sha256:17ae4664031aadfbcb34fd40ffd90976671fa0c0286e6c4113989f78bebab37a", + "sha256:1ce63ae04719513dd2651202352a2beb9f67f55cb8490c40f056cea3c5c355ce", + "sha256:23a15727fbfccab973343b6d1b7181bfb0b4aa7ae280f36fd2f90f5476805682", + "sha256:2540ddc83cc724b13d1838026f6a5ad178510953302a49e6d647f6e1de82bc34", + "sha256:37dcee4906454ae377be5937ab2a66a9a88377b11dd7c072df7a7c142b63c37c", + "sha256:38bea84ee4fe24ebcc8edeb7b54bf20f06fd53ce4d2cc8b74344c5b9620597fd", + "sha256:3ab3367bb7f61ad18793fea2ef71f2d181c528c87948638366bf1de26e239183", + "sha256:3ad1d59fd7114e6a08c4814983bb498f391c699f3c78712770077518cae63ff7", + "sha256:3b4e6db8dc4879015b9955778cfb9881897339c8fab7b3676f8433f849425913", + "sha256:3e061b09f6fa42997cf627307f220315e313ece74907d35776ec4373ed718b86", + "sha256:42864e70a248f5f6a49fdaf417d9bc62d6e4d8ee9695b24c5916cb4bb666c802", + "sha256:493910ceb2764f792db4dc6e8e4b375dae1b08f72e18e8f10f18b34ca17d0979", + "sha256:4d0c970c0d602b1017e2067ff3b7dac41c98fef4f7472ec2ea26fd8a4e8c2149", + "sha256:54eb3aead72a5c19fad07219acd882c1643a1027fbcdefac9b502c267242f955", + "sha256:56a3443aca82abda0e07be2e1ecb76a050714faf2be84256dae291182ba59049", + "sha256:576f5ca28d1b3276026f7df3ec841ae460e0fc3aac2a47cbf72eabcfc0f102e1", + "sha256:58ede86453a6cf2d6ce40ef0ca15481677a66950e73b0a788917916f7e35a0bb", + "sha256:61c721764e41af907c9d16b6daa05a458f066015abd35923051be8705108ed17", + "sha256:634d96869be6c4dc232fc503e03e40c42d32cfaa51712aee181e922e61d74814", + "sha256:696ef00e8a1f0cec5e30640e64eca75d8e777933d1438f4facc9c0cdf288a810", + "sha256:69a2cbd61788d26f8f1e626e188044834f37f6ae3f937bd9f08b65fc9d7e514e", + "sha256:6a792ce34b999fbe04a7a71a90c74f10c57ae4c51f65461a411faa70e154154e", + "sha256:6ac13b71761e49d5f9e4d05d33683bbafef753e876e8e5a7ef26e937dd766713", + "sha256:6fdec0213244c39973674ca2a7f5435bf74369e7d4e104d6c7473c81c9bcc8c4", + "sha256:72b1b03fb4655c1960403c131740755ec19c5898c82abd3961c364c2afd59fe7", + "sha256:745f1ed5e2c687baefc3c5e7b4304e91bf3e2f32834d07baaee243e349624b24", + "sha256:776c8e959a01e5e8321f1dec77964cb6101020a69d5a94cd3d34db6d555e01f7", + "sha256:780df0d837276276226a1ff803f8d0fa5f8996c479aeef52eb040179f3156cbd", + "sha256:78e6e23b954644737e385befa0deb20233e2dfddf95dd11e9db752bdd2a294d3", + "sha256:7951decace76a9271a1ef181b04aa77d3cc309a02a51d73826039003210bdc86", + "sha256:7ba92a2d9ace559a0a14b03d87f47e021e4fa7681dc6970ebbc7b447c7d4b7cd", + "sha256:7f6428fee52d2bcf96a8aa7b62095b190ee341ab0e6b1bcf50c615d7966fd45b", + "sha256:87944bd16b7fe6160607f6a17808abd25f17f61ae1e26c47a491b970fb66d8cb", + "sha256:87a6e922b2b2401e0b0cf6b976b97f11ec7f136bfed445e16384fbf6fd5e8602", + "sha256:8cb0688a8d81c63d716e867d59a9ccc389e97ac7037ebef904c2b89334407180", + "sha256:8df6612df74409080575dca38a5237282865408016e65636a76a2eb9348c2567", + "sha256:911a6e91d08bb2c72938bc17f0a2d97864c531536b7832abee6429d5296e5b27", + "sha256:92b7ee222e2b903e0a4b329a9943d432b3767f2d5029dbe4ca59fb75223bbe2e", + "sha256:938f756c2b9374bbcc262a37eea521d8a0e6458162f2a9c26329cc87fdf06534", + "sha256:9756d9b9d4547e091f99d554fbba0d2a920aab98caa82a8fb3d3d9bee3c9ae85", + "sha256:98b88a2bf26965f2015a771381624dd4b0839034b70d406dc74fd8be4cc053e3", + "sha256:9b751a6306f330801665ae69270a8a3993654a85569b3469662efaad6cf5cc50", + "sha256:a2a450bcce4931b295fc0848f384834c3f9b00edfc2150baafb4488c27953de6", + "sha256:a3814760a1a700f3cfd2f977249f1032301d0a12c92aba74605cfa6ce9f78489", + "sha256:a5abcbba9f4b463a45c8ca8b7720891200658f6f46894f79517e6cd11f3405ca", + "sha256:a6db7458ab89c7d80bc1f4e930cc9df6edee2200127cfa6f6e080cf619eddfbd", + "sha256:ad497f38a0d6c329cb621774788583ee12321863cd4bd9feee1effd60f2ad133", + "sha256:ad9509ffb2396483ceacb1eee9134724443ee45b92141105a4645857244aecc8", + "sha256:bbcba75fe879ad6fd2e0d6a8d937f34a571f116a0e4db37df8079e738ea95c71", + "sha256:c10d85e81d0b9ef87970ecbdbfaeec14a361a7fa947118817fcea8e45335fa46", + "sha256:c15b2271c44da77ee9d822552201180779e5e942f3a71fb74e026bf6172ff287", + "sha256:ca37057625693d097543bd88076ceebeb248291df9d6ca8481349efc0b05dcd0", + "sha256:cc3a145479a76ad0ed646434d09216d33d08eef0d8c9a11f5ae5cdc37caa3540", + "sha256:ccf10f16ab498d20e28bc2b5c1306e9c1512f2840f7b6a67000a517a4b37d5ee", + "sha256:cd464ba806e27ee24a91362ba3621bfc39dbbb8b79f2e1340201615197370f7c", + "sha256:d007aa39a52d62373bd23428ba4a2546eed0e7643d7bf2e41ddcefd54519842c", + "sha256:d0666afbe984f6933fe72cd1f1c3560d8c55880a0bdd728ad774006eb4241ecd", + "sha256:d07502cc14ecd64f52b2a74ebbc106893d9a9717120057ea9ea1fd6568a747e7", + "sha256:d489d9778522fbd0f8d6a5c6e48e3514f11be81cb0a5954bdda06f7e1594b321", + "sha256:df7db76400bf46ec6a0a73192b14c8295bdb9812053f4fe53f4e789f3ea66bbb", + "sha256:e3538bc9fe1b902bef51372462e3d7c96fce2b566642512138a480b7adc9d508", + "sha256:e87fd812899aa78252866ae03a048e77bd11b80fb4878ce27c23cade239b42b2", + "sha256:ecdb8173e6c7aa09eee342ac62e193e6904923bd232e76b4157ac0bfa670609f", + "sha256:f244b8e541f414664889e2c87cac11a07b918cb4b540c36f7ada7bfa76571ea2", + "sha256:f4065145bf69de124accdd17ea5f4dc770da0a6a6e440c53f6e0a8c27b3e635c", + "sha256:f420bfe862fb357a6d76f2065447ef6f484bc489292ac91e29bc65d2d7a2c84d", + "sha256:f6ddd90d9fb4b501c97a4458f1c1720e42432c26cb76d28177c5b5ad4e332601", + "sha256:fa73e8c2656a3653ae6c307b3f4e878a21f87859a9afab228280ddccd7369d71", + "sha256:fadbb8f1d4140825069db3fedbbb843290fd5f5bc0a5dbd7eaf81d91bf1b003b", + "sha256:fb3d0cc5cdb926090748ea60172fa8a213cec728bd6c54eae18b96040fcd6227", + "sha256:fb46bb0f24813e6cede6cc07b1961d4b04f331f7112a23b5e21f567da4ee50aa", + "sha256:fd36c119c5d6551bce374fcb5c19269638f8d09862445f85a5a48596fd59f4bb" ], "markers": "python_version >= '3.9'", - "version": "==3.11.14" + "version": "==3.11.16" }, "aiosignal": { "hashes": [ @@ -373,9 +373,9 @@ }, "dbrepo": { "hashes": [ - "sha256:ad01d6dc5d99f3c0c9caf3fb11b51502bec5390c72ff28b6b725e2755f5a2f7c" + "sha256:55de6a4934010e14a574032b5a5179bf3dac9895ef74e5cd4a221a625a75674b" ], - "path": "./lib/dbrepo-1.7.3.tar.gz" + "path": "./lib/dbrepo-1.8.0.tar.gz" }, "docker": { "hashes": [ @@ -539,6 +539,15 @@ "markers": "python_version >= '3.8'", "version": "==1.5.0" }, + "grafana-client": { + "hashes": [ + "sha256:2477a47b923fd0637947e620b0b777c641af18a3025464fa4505783dbf05dfcc", + "sha256:8cb61bb2a87ec07bca10974df276b9a1a95bfdb63f3a696f065692ffc9b8c389" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==4.3.2" + }, "greenlet": { "hashes": [ "sha256:0153404a4bb921f0ff1abeb5ce8a5131da56b953eda6e14b88dc6bbc04d2049e", @@ -627,6 +636,14 @@ "markers": "python_version >= '3.7'", "version": "==23.0.0" }, + "h11": { + "hashes": [ + "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", + "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761" + ], + "markers": "python_version >= '3.7'", + "version": "==0.14.0" + }, "idna": { "hashes": [ "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", @@ -637,11 +654,11 @@ }, "iniconfig": { "hashes": [ - "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", - "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" + "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", + "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760" ], - "markers": "python_version >= '3.7'", - "version": "==2.0.0" + "markers": "python_version >= '3.8'", + "version": "==2.1.0" }, "itsdangerous": { "hashes": [ @@ -651,6 +668,108 @@ "markers": "python_version >= '3.8'", "version": "==2.2.0" }, + "jh2": { + "hashes": [ + "sha256:038091480cd1544e9389b0adbb1b1645a797689dcb68ceae7e45eec96ed24497", + "sha256:0c8e336df8ed1687590695f4469f480eeb4159bf13bb6193791c6530fe114b49", + "sha256:0c9bf2d5e4ef45c1686c6f76935e7ca263f5eae4de92bf5d1873a0e737e4eb7d", + "sha256:0faf6e96f74d27b8ca816b40217904891f91b664ed1c0388737949ceb50ac15d", + "sha256:10ea7f497e6226372e1d4fdbf42c8381f4887819a643ab930bff4072ad298d84", + "sha256:11650f7ed77ee1df30f25d6b3b74b2fa1c94124e074fd455abafea3cbc913d53", + "sha256:12ead3ee3e9c7caa00356b528a5cc7fe210fbe2060628af6e19ed76b8416572e", + "sha256:136b3c5b08883681fcb58f12393a5bbfa422d6e2d5ba887e263e776874276bc6", + "sha256:17d6e1691154ea9f726e43dcb717df48e56c66b5a01c90ad675c6494c36e5be1", + "sha256:19cb987915cc0d321746a12f2a693d087ffb721c37ac9a153cc088c57d4d90eb", + "sha256:1cdf15de698c4026e64fd914fead3180e52bf2a7bcbe44a3392404582dbf2d22", + "sha256:1e81e1c64e33506b8508ba5e3c7c139b2577e78b079c2c16a8e7a02a161f1080", + "sha256:2226c76e4ff2149c5d9f94bed22bf9c4f3411d38cc53d4a7ddfbe0899c8b558c", + "sha256:2837412fb7b684c6ce7392c8bc57440c6dbadaf1bde7a53144381f7df7083c1c", + "sha256:293f0f3da3c391e997e0d55fdb85540e98a8b0406622bb4ba57fb7617697f31e", + "sha256:2b9cc6c0239215a349d28c192fa4c4e7a7348eee7980531525c01bffe39eea80", + "sha256:2f3ad679f84ff236a0d7b71ddc4b3c09fe467abee2f1a86671f0cd417be5352b", + "sha256:358cad2f328c52c15756cf32b0ad17afb0d617e7cdfe93d59aa2616966d825b7", + "sha256:3663712305b509f79c002c8c0ca9994f716cadba576f5a59632dda1aec1ca8c6", + "sha256:41794820ccca039ca2ead6245f30b34601dd1456eee5b5dde620672bb989e79d", + "sha256:44b7e64aff542471c474c24f771eae5efd9152da02a12556f7cb7607020e1420", + "sha256:45770eb0990166026538d3c2fd7d92f17cfde13ca6567570c4baec3ce9162936", + "sha256:498060078a4d1b458e9381fefb027d85329397b50d65287712b3d48233e20836", + "sha256:4c2f18f337c2393f84e45e5011c8b02697b81638b1cec49da60a01b9ed067695", + "sha256:5162d6e475d2762035fb8ea25982bcbec6c58715e33bd0951499f743cd90b110", + "sha256:51e8c890bb59008c95b3a552cefd8bd9ce50a7466a6c920a78cf586e885d7449", + "sha256:56ad3839ac6ac5fd3d023cf59d4b04264b74bb4cb44c0780faf51d6b5ff38fbc", + "sha256:5821638ef0d7c973071810a6786f59b305172197f7e7e469a2ce169e7f4978e3", + "sha256:5ac1b2d379f4d40c13dcce537e69704452943cddbe991fd54a84fdb2da9026d5", + "sha256:5b465d4311b0429fe6fa85df8e2cfcb038c9fface95396dd14e838ecabaaadf2", + "sha256:5d8656b98057329bd03d968aac8d5198389cf51517511295cfc4cb827a507e39", + "sha256:5dcfb3e823ef4b91b70b92848570d1d8cfd584304bd2bd54272dc100c9494def", + "sha256:5e40d23ea43f683f3a7c032dde391104f609b05c21b6d284101120b51dbd50c1", + "sha256:63a01522bde161c713f7fa5ee5d850fee6386fc386073490ebcd438f14579cf2", + "sha256:6b2a3d7756035dde13571f4ad232629b78b7f35c2cd5fda7b464079fc697db3a", + "sha256:6b3be1a6bf6c965aea3b4e3a40df9d2c134c516d89c76cf2b6c81f67e6c5c6ed", + "sha256:6c7bea3357f2dc653756e6da55f66cd21c73d3875c8f3dc4e8d196a876252de0", + "sha256:6e6c8e229507cf29333a2f491cbaa7dff5b8a4a3e613af8090ccce9ce3e4f7a0", + "sha256:6fad27f2a63884ee45d491aebec4b1f38752cd6aaccc625038c21e7f43c02c49", + "sha256:71bfef52547c2b8b145897fa8d1b5142bc52313cfa38c0742e0ef755f0d09c60", + "sha256:72370d312323282b1bf74426e53fae861a310d7ae519b419da46673c38e7d147", + "sha256:76c7d36043a9c478b0c846fcec7da5cb095983722473e503e0122ccd170182b5", + "sha256:78d8a81ef51edb9a2f278a6fb278789b49e304b12bb21bccf2fe7e344f71a9fb", + "sha256:798a6b159ce32181a5e7ab7611c17d1080e74a5541fec47f961b728dab25a76f", + "sha256:7e370567f66a57e2c0e3ae2afcc6f126e1d6babd36831cfd0caad279b05c1c88", + "sha256:8004b845f606b95a8b17efa112aa10b327e46e95dcda604a257b4633d4ed45c8", + "sha256:80b20bf9ea4e709b3b9ae364ac298dfa872b084c186e5c1d60b0b79c79a7ee7e", + "sha256:87303f4bb1b493997f911a4f126123ccd2827d3a2e7dd2390cc6143fbc75805b", + "sha256:8d423f4631395b92dceda39f481a463498131ac02a58581124a44495491f715b", + "sha256:94ee262192db50fb9c069a0be7bb1a426fb1b43af26ce12bf4c6c30e13f46b56", + "sha256:960e4be2e7de340300ab4bcc2b45bed46be1d62330575b8265e6602dbcb9a14c", + "sha256:99397d5e1da6b345cec3e6125e2902b0e6864eb8eaa4be43a2013f059c502c93", + "sha256:9abbb8c1bad08817bad62ae1ea76c01bdbd0ee8c827d05f3ba038c9f6d6f14bb", + "sha256:9c0b8fadf80bc70d341032f92702bda1b0ed78c01e9c495f0df701938c99bcf5", + "sha256:9f977da9abae170eebdcf02bda33727c342fad5dcdbc08498bfdfb6cc6c65489", + "sha256:a6be712ca39d5e9c89b705bc9800be36739436fefb8d0b52b2d332f7d6d22a01", + "sha256:aa434418d6ee44b0ba3a5a407bc9e1543cf496328f43f149e9b58f74a63d5c21", + "sha256:ac4f778e32f7de0ba63346893a4af87c2280ffc1783f594a117be51d908a10da", + "sha256:ac85d65ee369c09b2904b55078ad589961e2e2e03c810963d35a26e6a3931425", + "sha256:ad5d78c664d39960435d4162db31117c8945ba74fb0c414e79ba85a8bdeafdec", + "sha256:ad91f57c3485d87a8edee558dafab0f08c716857d748731c0998dcefe9d3fd5f", + "sha256:afd255d42b340036883ca95bded553b29065b064e2fe5db64ad5988517db9694", + "sha256:b1c2c74f100a0c2110a8e30445554ae331860d32f145c60a2a1e1c27702022a2", + "sha256:b49a8c71378d40d43c6a56eaa536d7823baa43c27c93e082aeb60a9717be0c10", + "sha256:b5f52611323e8e35705e6750a760f32165b41c052d22da154ae343871e7cd50d", + "sha256:b6bf99ae529ac359263269710356d3ddb173c15d8f8dc8849ae794ab811e5cd0", + "sha256:ba361bf87c4701f11241be92c99ef5cf916865dd225955cccb2376bf76717b3c", + "sha256:bc351aa2158575e68943d8e1d5531719ad86bf6607776627ed5a1a60657664af", + "sha256:bd6eb7b1e12e4dd0b75cab1b023272f1333494add5ad61deedac738af1ffeede", + "sha256:bf8852595f5e2d2b072e24c29394b5aca7fba96ecc8656d56660535f9e9872c9", + "sha256:c1dd66541569a2bdbe92589cc96a89f470b20d168f2238fd463e1b59ee3e2d49", + "sha256:c36a7a004cba4e370d0675826eeefe4e42a256638b6b1432263ddb4af317bc02", + "sha256:c886cda61da4d39010be84802bed11bc75f03e8a6094cc18016957a2c80254d4", + "sha256:cc7aa83946f80c66a5d2dea7e165f15aa3eb21e7b74b24d8f850afc0d44bb00e", + "sha256:cea9c4bef70d1358bafec6019164abce362f4de15d79d1ecd64ae31c1749d77a", + "sha256:cfe1951e80869695857986be104a40a1e7fa8ec7de05f86bcbd7bd20854be764", + "sha256:d36cf6f139da3279644794fcfda18af425c8bb122ef9c2e7c762a937bbf7b0f4", + "sha256:d81308faaa9393b7e6ed20718d465c4c2b73c24d5e4826024961acf4b87b1524", + "sha256:db51ea1f9c5ac790848bc271fcdf4108ad1b77a77c6949a96320477962cf7ba5", + "sha256:dd05c18c920a15e00d7a52df37bffd3930fe2c004c690f9422b20e12077e6dbd", + "sha256:df05918a11e1db0198d00486e36673b4b4a89390e4458ff9479b4908dde357ac", + "sha256:e4c31dccf6be131709e545d0258eb5b75c5fac304857ad3976331c6740e8b9d6", + "sha256:e60954d673040430802b29fe5bba698e262182b5ba5f302ff4458e39f8101881", + "sha256:e60e2d2c88a0552e61c37172fe377f6a8abf479130a445314886de4a360ba940", + "sha256:e786f773ddc153846b2ebdb854011cfd1f7c874b8ee79cced3706801341c9f5d", + "sha256:e7cd91548fb95b69edd376f5204e27115ac7d093ec7d80066123a5bdb31c71d9", + "sha256:eaef2ea4f5602aefaaf3d6e8235f3b9ffde35aff15aac1c16cc802f6bbf0a3b5", + "sha256:ec8c5ea93a03775fbadd08462200cf34ce617ec75a032abfa44fd6d3a00e5424", + "sha256:eddeb8574bc9d9abb8491d4a46b60e553c2cea235b80373756acb06568101175", + "sha256:eeb300b0e4b428aab2f70d785cad4306529262af6de8c8c5fe6a4b41a674a434", + "sha256:f39d71ece8e97cf069e4154868eaac1256b133fe23e0459829432e4bb6406472", + "sha256:f4840ddad2b9d53710e92361391944da89e3576641a290066a1719520059247c", + "sha256:f70723a00bcbce0f9a216853139955be45da35741335eb3afead304e77662560", + "sha256:f829cf2ba5b553e6529d6238928c07096f1feb47f4ad536b7f06bca6cc77173f", + "sha256:f96386910467725895f7972939a6faabd6e96b1de0cc2c092e4bd2c40e956e25", + "sha256:fe259a9d6f555bc79aed9bb4b9a7fff73db443b4c483e4a81a428c8a2860428b" + ], + "markers": "python_version >= '3.7'", + "version": "==5.0.8" + }, "jinja2": { "hashes": [ "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", @@ -752,109 +871,117 @@ }, "mistune": { "hashes": [ - "sha256:4b47731332315cdca99e0ded46fc0004001c1299ff773dfb48fbe1fd226de319", - "sha256:733bf018ba007e8b5f2d3a9eb624034f6ee26c4ea769a98ec533ee111d504dff" + "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", + "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0" ], "markers": "python_version >= '3.8'", - "version": "==3.1.2" + "version": "==3.1.3" }, "multidict": { "hashes": [ - "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f", - "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056", - "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761", - "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3", - "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b", - "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6", - "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748", - "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966", - "sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f", - "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1", - "sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6", - "sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada", - "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305", - "sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2", - "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d", - "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a", - "sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef", - "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c", - "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb", - "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60", - "sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6", - "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4", - "sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478", - "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81", - "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7", - "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56", - "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3", - "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6", - "sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30", - "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb", - "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506", - "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0", - "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925", - "sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c", - "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6", - "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e", - "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95", - "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2", - "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133", - "sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2", - "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa", - "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3", - "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3", - "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436", - "sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657", - "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581", - "sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492", - "sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43", - "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2", - "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2", - "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926", - "sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057", - "sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc", - "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80", - "sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255", - "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1", - "sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972", - "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53", - "sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1", - "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423", - "sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a", - "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160", - "sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c", - "sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd", - "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa", - "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5", - "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b", - "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa", - "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef", - "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44", - "sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4", - "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156", - "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753", - "sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28", - "sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d", - "sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a", - "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304", - "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008", - "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429", - "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72", - "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399", - "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3", - "sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392", - "sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167", - "sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c", - "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774", - "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351", - "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76", - "sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875", - "sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd", - "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28", - "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db" + "sha256:0085b0afb2446e57050140240a8595846ed64d1cbd26cef936bfab3192c673b8", + "sha256:042028348dc5a1f2be6c666437042a98a5d24cee50380f4c0902215e5ec41844", + "sha256:05fefbc3cddc4e36da209a5e49f1094bbece9a581faa7f3589201fd95df40e5d", + "sha256:063be88bd684782a0715641de853e1e58a2f25b76388538bd62d974777ce9bc2", + "sha256:07bfa8bc649783e703263f783f73e27fef8cd37baaad4389816cf6a133141331", + "sha256:08549895e6a799bd551cf276f6e59820aa084f0f90665c0f03dd3a50db5d3c48", + "sha256:095a2eabe8c43041d3e6c2cb8287a257b5f1801c2d6ebd1dd877424f1e89cf29", + "sha256:0b183a959fb88ad1be201de2c4bdf52fa8e46e6c185d76201286a97b6f5ee65c", + "sha256:0c383d28857f66f5aebe3e91d6cf498da73af75fbd51cedbe1adfb85e90c0460", + "sha256:0d57a01a2a9fa00234aace434d8c131f0ac6e0ac6ef131eda5962d7e79edfb5b", + "sha256:0dc25a3293c50744796e87048de5e68996104d86d940bb24bc3ec31df281b191", + "sha256:0e5a644e50ef9fb87878d4d57907f03a12410d2aa3b93b3acdf90a741df52c49", + "sha256:0f249badb360b0b4d694307ad40f811f83df4da8cef7b68e429e4eea939e49dd", + "sha256:0f74f2fc51555f4b037ef278efc29a870d327053aba5cb7d86ae572426c7cccc", + "sha256:125dd82b40f8c06d08d87b3510beaccb88afac94e9ed4a6f6c71362dc7dbb04b", + "sha256:13551d0e2d7201f0959725a6a769b6f7b9019a168ed96006479c9ac33fe4096b", + "sha256:14ed9ed1bfedd72a877807c71113deac292bf485159a29025dfdc524c326f3e1", + "sha256:163f4604e76639f728d127293d24c3e208b445b463168af3d031b92b0998bb90", + "sha256:19e2819b0b468174de25c0ceed766606a07cedeab132383f1e83b9a4e96ccb4f", + "sha256:1e2a2193d3aa5cbf5758f6d5680a52aa848e0cf611da324f71e5e48a9695cc86", + "sha256:1f3c099d3899b14e1ce52262eb82a5f5cb92157bb5106bf627b618c090a0eadc", + "sha256:214207dcc7a6221d9942f23797fe89144128a71c03632bf713d918db99bd36de", + "sha256:2325105e16d434749e1be8022f942876a936f9bece4ec41ae244e3d7fae42aaf", + "sha256:2529ddbdaa424b2c6c2eb668ea684dd6b75b839d0ad4b21aad60c168269478d7", + "sha256:256d431fe4583c5f1e0f2e9c4d9c22f3a04ae96009b8cfa096da3a8723db0a16", + "sha256:25bb96338512e2f46f615a2bb7c6012fe92a4a5ebd353e5020836a7e33120349", + "sha256:2e87f1926e91855ae61769ba3e3f7315120788c099677e0842e697b0bfb659f2", + "sha256:2fc6af8e39f7496047c7876314f4317736eac82bf85b54c7c76cf1a6f8e35d98", + "sha256:3157126b028c074951839233647bd0e30df77ef1fedd801b48bdcad242a60f4e", + "sha256:32c9b4878f48be3e75808ea7e499d6223b1eea6d54c487a66bc10a1871e3dc6a", + "sha256:32ed748ff9ac682eae7859790d3044b50e3076c7d80e17a44239683769ff485e", + "sha256:3501621d5e86f1a88521ea65d5cad0a0834c77b26f193747615b7c911e5422d2", + "sha256:437c33561edb6eb504b5a30203daf81d4a9b727e167e78b0854d9a4e18e8950b", + "sha256:48d39b1824b8d6ea7de878ef6226efbe0773f9c64333e1125e0efcfdd18a24c7", + "sha256:4ac3fcf9a2d369bd075b2c2965544036a27ccd277fc3c04f708338cc57533081", + "sha256:4ccfd74957ef53fa7380aaa1c961f523d582cd5e85a620880ffabd407f8202c0", + "sha256:52b05e21ff05729fbea9bc20b3a791c3c11da61649ff64cce8257c82a020466d", + "sha256:5389445f0173c197f4a3613713b5fb3f3879df1ded2a1a2e4bc4b5b9c5441b7e", + "sha256:5c5e7d2e300d5cb3b2693b6d60d3e8c8e7dd4ebe27cd17c9cb57020cac0acb80", + "sha256:5d26547423e5e71dcc562c4acdc134b900640a39abd9066d7326a7cc2324c530", + "sha256:5dd7106d064d05896ce28c97da3f46caa442fe5a43bc26dfb258e90853b39b44", + "sha256:5f8cb1329f42fadfb40d6211e5ff568d71ab49be36e759345f91c69d1033d633", + "sha256:61d5541f27533f803a941d3a3f8a3d10ed48c12cf918f557efcbf3cd04ef265c", + "sha256:639556758c36093b35e2e368ca485dada6afc2bd6a1b1207d85ea6dfc3deab27", + "sha256:641cf2e3447c9ecff2f7aa6e9eee9eaa286ea65d57b014543a4911ff2799d08a", + "sha256:6aed763b6a1b28c46c055692836879328f0b334a6d61572ee4113a5d0c859872", + "sha256:6e2a2d6749e1ff2c9c76a72c6530d5baa601205b14e441e6d98011000f47a7ac", + "sha256:7243c5a6523c5cfeca76e063efa5f6a656d1d74c8b1fc64b2cd1e84e507f7e2a", + "sha256:76b34c12b013d813e6cb325e6bd4f9c984db27758b16085926bbe7ceeaace626", + "sha256:781b5dd1db18c9e9eacc419027b0acb5073bdec9de1675c0be25ceb10e2ad133", + "sha256:7c611345bbe7cb44aabb877cb94b63e86f2d0db03e382667dbd037866d44b4f8", + "sha256:83b78c680d4b15d33042d330c2fa31813ca3974197bddb3836a5c635a5fd013f", + "sha256:84e87a7d75fa36839a3a432286d719975362d230c70ebfa0948549cc38bd5b46", + "sha256:89b3857652183b8206a891168af47bac10b970d275bba1f6ee46565a758c078d", + "sha256:8cd1a0644ccaf27e9d2f6d9c9474faabee21f0578fe85225cc5af9a61e1653df", + "sha256:8de4d42dffd5ced9117af2ce66ba8722402541a3aa98ffdf78dde92badb68932", + "sha256:94a7bb972178a8bfc4055db80c51efd24baefaced5e51c59b0d598a004e8305d", + "sha256:98aa8325c7f47183b45588af9c434533196e241be0a4e4ae2190b06d17675c02", + "sha256:9e658d1373c424457ddf6d55ec1db93c280b8579276bebd1f72f113072df8a5d", + "sha256:9f49585f4abadd2283034fc605961f40c638635bc60f5162276fec075f2e37a4", + "sha256:9f6cad071960ba1914fa231677d21b1b4a3acdcce463cee41ea30bc82e6040cf", + "sha256:a0cc398350ef31167e03f3ca7c19313d4e40a662adcb98a88755e4e861170bdd", + "sha256:a1133414b771619aa3c3000701c11b2e4624a7f492f12f256aedde97c28331a2", + "sha256:a33273a541f1e1a8219b2a4ed2de355848ecc0254264915b9290c8d2de1c74e1", + "sha256:a3c0ff89fe40a152e77b191b83282c9664357dce3004032d42e68c514ceff27e", + "sha256:a49994481b99cd7dedde07f2e7e93b1d86c01c0fca1c32aded18f10695ae17eb", + "sha256:abf5b17bc0cf626a8a497d89ac691308dbd825d2ac372aa990b1ca114e470151", + "sha256:ac380cacdd3b183338ba63a144a34e9044520a6fb30c58aa14077157a033c13e", + "sha256:ad81012b24b88aad4c70b2cbc2dad84018783221b7f923e926f4690ff8569da3", + "sha256:b2c00ad31fbc2cbac85d7d0fcf90853b2ca2e69d825a2d3f3edb842ef1544a2c", + "sha256:b4c153863dd6569f6511845922c53e39c8d61f6e81f228ad5443e690fca403de", + "sha256:b4f3d66dd0354b79761481fc15bdafaba0b9d9076f1f42cc9ce10d7fcbda205a", + "sha256:b99aac6bb2c37db336fa03a39b40ed4ef2818bf2dfb9441458165ebe88b793af", + "sha256:b9f6392d98c0bd70676ae41474e2eecf4c7150cb419237a41f8f96043fcb81d1", + "sha256:c537da54ce4ff7c15e78ab1292e5799d0d43a2108e006578a57f531866f64025", + "sha256:ca23db5fb195b5ef4fd1f77ce26cadefdf13dba71dab14dadd29b34d457d7c44", + "sha256:cc826b9a8176e686b67aa60fd6c6a7047b0461cae5591ea1dc73d28f72332a8a", + "sha256:cca83a629f77402cfadd58352e394d79a61c8015f1694b83ab72237ec3941f88", + "sha256:cf8d370b2fea27fb300825ec3984334f7dd54a581bde6456799ba3776915a656", + "sha256:d1175b0e0d6037fab207f05774a176d71210ebd40b1c51f480a04b65ec5c786d", + "sha256:d1996ee1330e245cd3aeda0887b4409e3930524c27642b046e4fae88ffa66c5e", + "sha256:d5a36953389f35f0a4e88dc796048829a2f467c9197265504593f0e420571547", + "sha256:da51d8928ad8b4244926fe862ba1795f0b6e68ed8c42cd2f822d435db9c2a8f4", + "sha256:e16e7297f29a544f49340012d6fc08cf14de0ab361c9eb7529f6a57a30cbfda1", + "sha256:e25b11a0417475f093d0f0809a149aff3943c2c56da50fdf2c3c88d57fe3dfbd", + "sha256:e4371591e621579cb6da8401e4ea405b33ff25a755874a3567c4075ca63d56e2", + "sha256:e653d36b1bf48fa78c7fcebb5fa679342e025121ace8c87ab05c1cefd33b34fc", + "sha256:e7d91a230c7f8af86c904a5a992b8c064b66330544693fd6759c3d6162382ecf", + "sha256:e851e6363d0dbe515d8de81fd544a2c956fdec6f8a049739562286727d4a00c3", + "sha256:ef7d48207926edbf8b16b336f779c557dd8f5a33035a85db9c4b0febb0706817", + "sha256:f7716f7e7138252d88607228ce40be22660d6608d20fd365d596e7ca0738e019", + "sha256:facaf11f21f3a4c51b62931feb13310e6fe3475f85e20d9c9fdce0d2ea561b87" ], - "markers": "python_version >= '3.8'", - "version": "==6.1.0" + "markers": "python_version >= '3.9'", + "version": "==6.2.0" + }, + "niquests": { + "hashes": [ + "sha256:68e0a7e9f338466b3606945fffd11f75e3c90af7498aa9336ef03812323b7e36", + "sha256:86e484c2c60444aa96069c15f6295af6e25a8bad50781e1326df1b5c7ab48339" + ], + "markers": "python_version >= '3.7'", + "version": "==3.14.0" }, "numpy": { "hashes": [ @@ -1016,107 +1143,107 @@ }, "propcache": { "hashes": [ - "sha256:02df07041e0820cacc8f739510078f2aadcfd3fc57eaeeb16d5ded85c872c89e", - "sha256:03acd9ff19021bd0567582ac88f821b66883e158274183b9e5586f678984f8fe", - "sha256:03c091bb752349402f23ee43bb2bff6bd80ccab7c9df6b88ad4322258d6960fc", - "sha256:07700939b2cbd67bfb3b76a12e1412405d71019df00ca5697ce75e5ef789d829", - "sha256:0c3e893c4464ebd751b44ae76c12c5f5c1e4f6cbd6fbf67e3783cd93ad221863", - "sha256:119e244ab40f70a98c91906d4c1f4c5f2e68bd0b14e7ab0a06922038fae8a20f", - "sha256:11ae6a8a01b8a4dc79093b5d3ca2c8a4436f5ee251a9840d7790dccbd96cb649", - "sha256:15010f29fbed80e711db272909a074dc79858c6d28e2915704cfc487a8ac89c6", - "sha256:19d36bb351ad5554ff20f2ae75f88ce205b0748c38b146c75628577020351e3c", - "sha256:1c8f7d896a16da9455f882870a507567d4f58c53504dc2d4b1e1d386dfe4588a", - "sha256:2383a17385d9800b6eb5855c2f05ee550f803878f344f58b6e194de08b96352c", - "sha256:24c04f8fbf60094c531667b8207acbae54146661657a1b1be6d3ca7773b7a545", - "sha256:2578541776769b500bada3f8a4eeaf944530516b6e90c089aa368266ed70c49e", - "sha256:26a67e5c04e3119594d8cfae517f4b9330c395df07ea65eab16f3d559b7068fe", - "sha256:2b975528998de037dfbc10144b8aed9b8dd5a99ec547f14d1cb7c5665a43f075", - "sha256:2d15bc27163cd4df433e75f546b9ac31c1ba7b0b128bfb1b90df19082466ff57", - "sha256:2d913d36bdaf368637b4f88d554fb9cb9d53d6920b9c5563846555938d5450bf", - "sha256:3302c5287e504d23bb0e64d2a921d1eb4a03fb93a0a0aa3b53de059f5a5d737d", - "sha256:36ca5e9a21822cc1746023e88f5c0af6fce3af3b85d4520efb1ce4221bed75cc", - "sha256:3b812b3cb6caacd072276ac0492d249f210006c57726b6484a1e1805b3cfeea0", - "sha256:3c6ec957025bf32b15cbc6b67afe233c65b30005e4c55fe5768e4bb518d712f1", - "sha256:41de3da5458edd5678b0f6ff66691507f9885f5fe6a0fb99a5d10d10c0fd2d64", - "sha256:42924dc0c9d73e49908e35bbdec87adedd651ea24c53c29cac103ede0ea1d340", - "sha256:4544699674faf66fb6b4473a1518ae4999c1b614f0b8297b1cef96bac25381db", - "sha256:46ed02532cb66612d42ae5c3929b5e98ae330ea0f3900bc66ec5f4862069519b", - "sha256:49ea05212a529c2caffe411e25a59308b07d6e10bf2505d77da72891f9a05641", - "sha256:4fa0e7c9c3cf7c276d4f6ab9af8adddc127d04e0fcabede315904d2ff76db626", - "sha256:507c5357a8d8b4593b97fb669c50598f4e6cccbbf77e22fa9598aba78292b4d7", - "sha256:549722908de62aa0b47a78b90531c022fa6e139f9166be634f667ff45632cc92", - "sha256:58e6d2a5a7cb3e5f166fd58e71e9a4ff504be9dc61b88167e75f835da5764d07", - "sha256:5a16167118677d94bb48bfcd91e420088854eb0737b76ec374b91498fb77a70e", - "sha256:5d62c4f6706bff5d8a52fd51fec6069bef69e7202ed481486c0bc3874912c787", - "sha256:5fa159dcee5dba00c1def3231c249cf261185189205073bde13797e57dd7540a", - "sha256:6032231d4a5abd67c7f71168fd64a47b6b451fbcb91c8397c2f7610e67683810", - "sha256:63f26258a163c34542c24808f03d734b338da66ba91f410a703e505c8485791d", - "sha256:65a37714b8ad9aba5780325228598a5b16c47ba0f8aeb3dc0514701e4413d7c0", - "sha256:67054e47c01b7b349b94ed0840ccae075449503cf1fdd0a1fdd98ab5ddc2667b", - "sha256:67dda3c7325691c2081510e92c561f465ba61b975f481735aefdfc845d2cd043", - "sha256:6985a593417cdbc94c7f9c3403747335e450c1599da1647a5af76539672464d3", - "sha256:6a1948df1bb1d56b5e7b0553c0fa04fd0e320997ae99689488201f19fa90d2e7", - "sha256:6b5b7fd6ee7b54e01759f2044f936dcf7dea6e7585f35490f7ca0420fe723c0d", - "sha256:6c929916cbdb540d3407c66f19f73387f43e7c12fa318a66f64ac99da601bcdf", - "sha256:6f4d7a7c0aff92e8354cceca6fe223973ddf08401047920df0fcb24be2bd5138", - "sha256:728af36011bb5d344c4fe4af79cfe186729efb649d2f8b395d1572fb088a996c", - "sha256:742840d1d0438eb7ea4280f3347598f507a199a35a08294afdcc560c3739989d", - "sha256:75e872573220d1ee2305b35c9813626e620768248425f58798413e9c39741f46", - "sha256:794c3dd744fad478b6232289c866c25406ecdfc47e294618bdf1697e69bd64a6", - "sha256:7c0fdbdf6983526e269e5a8d53b7ae3622dd6998468821d660d0daf72779aefa", - "sha256:7c5f5290799a3f6539cc5e6f474c3e5c5fbeba74a5e1e5be75587746a940d51e", - "sha256:7c6e7e4f9167fddc438cd653d826f2222222564daed4116a02a184b464d3ef05", - "sha256:7cedd25e5f678f7738da38037435b340694ab34d424938041aa630d8bac42663", - "sha256:7e2e068a83552ddf7a39a99488bcba05ac13454fb205c847674da0352602082f", - "sha256:8319293e85feadbbfe2150a5659dbc2ebc4afdeaf7d98936fb9a2f2ba0d4c35c", - "sha256:8526b0941ec5a40220fc4dfde76aed58808e2b309c03e9fa8e2260083ef7157f", - "sha256:8884ba1a0fe7210b775106b25850f5e5a9dc3c840d1ae9924ee6ea2eb3acbfe7", - "sha256:8cb625bcb5add899cb8ba7bf716ec1d3e8f7cdea9b0713fa99eadf73b6d4986f", - "sha256:8d663fd71491dde7dfdfc899d13a067a94198e90695b4321084c6e450743b8c7", - "sha256:8ee1983728964d6070ab443399c476de93d5d741f71e8f6e7880a065f878e0b9", - "sha256:997e7b8f173a391987df40f3b52c423e5850be6f6df0dcfb5376365440b56667", - "sha256:9be90eebc9842a93ef8335291f57b3b7488ac24f70df96a6034a13cb58e6ff86", - "sha256:9ddd49258610499aab83b4f5b61b32e11fce873586282a0e972e5ab3bcadee51", - "sha256:9ecde3671e62eeb99e977f5221abcf40c208f69b5eb986b061ccec317c82ebd0", - "sha256:9ff4e9ecb6e4b363430edf2c6e50173a63e0820e549918adef70515f87ced19a", - "sha256:a254537b9b696ede293bfdbc0a65200e8e4507bc9f37831e2a0318a9b333c85c", - "sha256:a2b9bf8c79b660d0ca1ad95e587818c30ccdb11f787657458d6f26a1ea18c568", - "sha256:a61a68d630e812b67b5bf097ab84e2cd79b48c792857dc10ba8a223f5b06a2af", - "sha256:a7080b0159ce05f179cfac592cda1a82898ca9cd097dacf8ea20ae33474fbb25", - "sha256:a8fd93de4e1d278046345f49e2238cdb298589325849b2645d4a94c53faeffc5", - "sha256:a94ffc66738da99232ddffcf7910e0f69e2bbe3a0802e54426dbf0714e1c2ffe", - "sha256:aa806bbc13eac1ab6291ed21ecd2dd426063ca5417dd507e6be58de20e58dfcf", - "sha256:b0c1a133d42c6fc1f5fbcf5c91331657a1ff822e87989bf4a6e2e39b818d0ee9", - "sha256:b58229a844931bca61b3a20efd2be2a2acb4ad1622fc026504309a6883686fbf", - "sha256:bb2f144c6d98bb5cbc94adeb0447cfd4c0f991341baa68eee3f3b0c9c0e83767", - "sha256:be90c94570840939fecedf99fa72839aed70b0ced449b415c85e01ae67422c90", - "sha256:bf0d9a171908f32d54f651648c7290397b8792f4303821c42a74e7805bfb813c", - "sha256:bf15fc0b45914d9d1b706f7c9c4f66f2b7b053e9517e40123e137e8ca8958b3d", - "sha256:bf4298f366ca7e1ad1d21bbb58300a6985015909964077afd37559084590c929", - "sha256:c441c841e82c5ba7a85ad25986014be8d7849c3cfbdb6004541873505929a74e", - "sha256:cacea77ef7a2195f04f9279297684955e3d1ae4241092ff0cfcef532bb7a1c32", - "sha256:cd54895e4ae7d32f1e3dd91261df46ee7483a735017dc6f987904f194aa5fd14", - "sha256:d1323cd04d6e92150bcc79d0174ce347ed4b349d748b9358fd2e497b121e03c8", - "sha256:d383bf5e045d7f9d239b38e6acadd7b7fdf6c0087259a84ae3475d18e9a2ae8b", - "sha256:d3e7420211f5a65a54675fd860ea04173cde60a7cc20ccfbafcccd155225f8bc", - "sha256:d8074c5dd61c8a3e915fa8fc04754fa55cfa5978200d2daa1e2d4294c1f136aa", - "sha256:df03cd88f95b1b99052b52b1bb92173229d7a674df0ab06d2b25765ee8404bce", - "sha256:e45377d5d6fefe1677da2a2c07b024a6dac782088e37c0b1efea4cfe2b1be19b", - "sha256:e53d19c2bf7d0d1e6998a7e693c7e87300dd971808e6618964621ccd0e01fe4e", - "sha256:e560fd75aaf3e5693b91bcaddd8b314f4d57e99aef8a6c6dc692f935cc1e6bbf", - "sha256:ec5060592d83454e8063e487696ac3783cc48c9a329498bafae0d972bc7816c9", - "sha256:ecc2920630283e0783c22e2ac94427f8cca29a04cfdf331467d4f661f4072dac", - "sha256:ed7161bccab7696a473fe7ddb619c1d75963732b37da4618ba12e60899fefe4f", - "sha256:ee0bd3a7b2e184e88d25c9baa6a9dc609ba25b76daae942edfb14499ac7ec374", - "sha256:ee25f1ac091def37c4b59d192bbe3a206298feeb89132a470325bf76ad122a1e", - "sha256:efa44f64c37cc30c9f05932c740a8b40ce359f51882c70883cc95feac842da4d", - "sha256:f47d52fd9b2ac418c4890aad2f6d21a6b96183c98021f0a48497a904199f006e", - "sha256:f857034dc68d5ceb30fb60afb6ff2103087aea10a01b613985610e007053a121", - "sha256:fb91d20fa2d3b13deea98a690534697742029f4fb83673a3501ae6e3746508b5", - "sha256:fddb8870bdb83456a489ab67c6b3040a8d5a55069aa6f72f9d872235fbc52f54" + "sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e", + "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b", + "sha256:069e7212890b0bcf9b2be0a03afb0c2d5161d91e1bf51569a64f629acc7defbf", + "sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b", + "sha256:0c3c3a203c375b08fd06a20da3cf7aac293b834b6f4f4db71190e8422750cca5", + "sha256:0c86e7ceea56376216eba345aa1fc6a8a6b27ac236181f840d1d7e6a1ea9ba5c", + "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c", + "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a", + "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf", + "sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8", + "sha256:1eb34d90aac9bfbced9a58b266f8946cb5935869ff01b164573a7634d39fbcb5", + "sha256:1f6cc0ad7b4560e5637eb2c994e97b4fa41ba8226069c9277eb5ea7101845b42", + "sha256:27c6ac6aa9fc7bc662f594ef380707494cb42c22786a558d95fcdedb9aa5d035", + "sha256:2d219b0dbabe75e15e581fc1ae796109b07c8ba7d25b9ae8d650da582bed01b0", + "sha256:2fce1df66915909ff6c824bbb5eb403d2d15f98f1518e583074671a30fe0c21e", + "sha256:319fa8765bfd6a265e5fa661547556da381e53274bc05094fc9ea50da51bfd46", + "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d", + "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24", + "sha256:3e19ea4ea0bf46179f8a3652ac1426e6dcbaf577ce4b4f65be581e237340420d", + "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de", + "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf", + "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7", + "sha256:43593c6772aa12abc3af7784bff4a41ffa921608dd38b77cf1dfd7f5c4e71371", + "sha256:47ef24aa6511e388e9894ec16f0fbf3313a53ee68402bc428744a367ec55b833", + "sha256:4cf9e93a81979f1424f1a3d155213dc928f1069d697e4353edb8a5eba67c6259", + "sha256:4d0dfdd9a2ebc77b869a0b04423591ea8823f791293b527dc1bb896c1d6f1136", + "sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25", + "sha256:58aa11f4ca8b60113d4b8e32d37e7e78bd8af4d1a5b5cb4979ed856a45e62005", + "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef", + "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7", + "sha256:5b9145c35cc87313b5fd480144f8078716007656093d23059e8993d3a8fa730f", + "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53", + "sha256:5cdb0f3e1eb6dfc9965d19734d8f9c481b294b5274337a8cb5cb01b462dcb7e0", + "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb", + "sha256:603f1fe4144420374f1a69b907494c3acbc867a581c2d49d4175b0de7cc64566", + "sha256:61014615c1274df8da5991a1e5da85a3ccb00c2d4701ac6f3383afd3ca47ab0a", + "sha256:64a956dff37080b352c1c40b2966b09defb014347043e740d420ca1eb7c9b908", + "sha256:668ddddc9f3075af019f784456267eb504cb77c2c4bd46cc8402d723b4d200bf", + "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458", + "sha256:6f173bbfe976105aaa890b712d1759de339d8a7cef2fc0a1714cc1a1e1c47f64", + "sha256:71ebe3fe42656a2328ab08933d420df5f3ab121772eef78f2dc63624157f0ed9", + "sha256:730178f476ef03d3d4d255f0c9fa186cb1d13fd33ffe89d39f2cda4da90ceb71", + "sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b", + "sha256:7f30241577d2fef2602113b70ef7231bf4c69a97e04693bde08ddab913ba0ce5", + "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037", + "sha256:82de5da8c8893056603ac2d6a89eb8b4df49abf1a7c19d536984c8dd63f481d5", + "sha256:83be47aa4e35b87c106fc0c84c0fc069d3f9b9b06d3c494cd404ec6747544894", + "sha256:8638f99dca15b9dff328fb6273e09f03d1c50d9b6512f3b65a4154588a7595fe", + "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757", + "sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3", + "sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976", + "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6", + "sha256:916cd229b0150129d645ec51614d38129ee74c03293a9f3f17537be0029a9641", + "sha256:9532ea0b26a401264b1365146c440a6d78269ed41f83f23818d4b79497aeabe7", + "sha256:967a8eec513dbe08330f10137eacb427b2ca52118769e82ebcfcab0fba92a649", + "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120", + "sha256:9979643ffc69b799d50d3a7b72b5164a2e97e117009d7af6dfdd2ab906cb72cd", + "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40", + "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e", + "sha256:9e64e948ab41411958670f1093c0a57acfdc3bee5cf5b935671bbd5313bcf229", + "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c", + "sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7", + "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111", + "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654", + "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f", + "sha256:a461959ead5b38e2581998700b26346b78cd98540b5524796c175722f18b0294", + "sha256:a75801768bbe65499495660b777e018cbe90c7980f07f8aa57d6be79ea6f71da", + "sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f", + "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7", + "sha256:b0313e8b923b3814d1c4a524c93dfecea5f39fa95601f6a9b1ac96cd66f89ea0", + "sha256:b23c11c2c9e6d4e7300c92e022046ad09b91fd00e36e83c44483df4afa990073", + "sha256:b303b194c2e6f171cfddf8b8ba30baefccf03d36a4d9cab7fd0bb68ba476a3d7", + "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11", + "sha256:bd39c92e4c8f6cbf5f08257d6360123af72af9f4da75a690bef50da77362d25f", + "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27", + "sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70", + "sha256:c66d8ccbc902ad548312b96ed8d5d266d0d2c6d006fd0f66323e9d8f2dd49be7", + "sha256:cd6a55f65241c551eb53f8cf4d2f4af33512c39da5d9777694e9d9c60872f519", + "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5", + "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180", + "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f", + "sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee", + "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18", + "sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815", + "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e", + "sha256:e861ad82892408487be144906a368ddbe2dc6297074ade2d892341b35c59844a", + "sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7", + "sha256:ed5f6d2edbf349bd8d630e81f474d33d6ae5d07760c44d33cd808e2f5c8f4ae6", + "sha256:ef2e4e91fb3945769e14ce82ed53007195e616a63aa43b40fb7ebaaf907c8d4c", + "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc", + "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8", + "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98", + "sha256:f35c7070eeec2cdaac6fd3fe245226ed2a6292d3ee8c938e5bb645b434c5f256", + "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5", + "sha256:f6f1324db48f001c2ca26a25fa25af60711e09b9aaf4b28488602776f4f9a744", + "sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723", + "sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277", + "sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5" ], "markers": "python_version >= '3.9'", - "version": "==0.3.0" + "version": "==0.3.1" }, "pycparser": { "hashes": [ @@ -1128,117 +1255,116 @@ }, "pydantic": { "hashes": [ - "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584", - "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236" + "sha256:442557d2910e75c991c39f4b4ab18963d57b9b55122c8b2a9cd176d8c29ce968", + "sha256:5b6c415eee9f8123a14d859be0c84363fec6b1feb6b688d6435801230b56e0b8" ], - "markers": "python_version >= '3.8'", - "version": "==2.10.6" + "markers": "python_version >= '3.9'", + "version": "==2.11.1" }, "pydantic-core": { "hashes": [ - "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278", - "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50", - "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9", - "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f", - "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6", - "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc", - "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54", - "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630", - "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9", - "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236", - "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7", - "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee", - "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b", - "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048", - "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc", - "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130", - "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4", - "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd", - "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4", - "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7", - "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7", - "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4", - "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e", - "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa", - "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6", - "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962", - "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b", - "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f", - "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474", - "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5", - "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459", - "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf", - "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a", - "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c", - "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76", - "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362", - "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4", - "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934", - "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320", - "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118", - "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96", - "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306", - "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046", - "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3", - "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2", - "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af", - "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9", - "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67", - "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a", - "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27", - "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35", - "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b", - "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151", - "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b", - "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154", - "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133", - "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef", - "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145", - "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15", - "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4", - "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc", - "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee", - "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c", - "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0", - "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5", - "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57", - "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b", - "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8", - "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1", - "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da", - "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e", - "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc", - "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993", - "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656", - "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4", - "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c", - "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb", - "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d", - "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9", - "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e", - "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1", - "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc", - "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a", - "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9", - "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506", - "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b", - "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1", - "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d", - "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99", - "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3", - "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31", - "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c", - "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39", - "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a", - "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308", - "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2", - "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228", - "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b", - "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9", - "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad" + "sha256:024d136ae44d233e6322027bbf356712b3940bee816e6c948ce4b90f18471b3d", + "sha256:0310524c833d91403c960b8a3cf9f46c282eadd6afd276c8c5edc617bd705dc9", + "sha256:07b4ced28fccae3f00626eaa0c4001aa9ec140a29501770a88dbbb0966019a86", + "sha256:085d8985b1c1e48ef271e98a658f562f29d89bda98bf120502283efbc87313eb", + "sha256:0a98257451164666afafc7cbf5fb00d613e33f7e7ebb322fbcd99345695a9a61", + "sha256:0bcf0bab28995d483f6c8d7db25e0d05c3efa5cebfd7f56474359e7137f39856", + "sha256:138d31e3f90087f42aa6286fb640f3c7a8eb7bdae829418265e7e7474bd2574b", + "sha256:14229c1504287533dbf6b1fc56f752ce2b4e9694022ae7509631ce346158de11", + "sha256:1583539533160186ac546b49f5cde9ffc928062c96920f58bd95de32ffd7bffd", + "sha256:175ab598fb457a9aee63206a1993874badf3ed9a456e0654273e56f00747bbd6", + "sha256:1a69b7596c6603afd049ce7f3835bcf57dd3892fc7279f0ddf987bebed8caa5a", + "sha256:1a73be93ecef45786d7d95b0c5e9b294faf35629d03d5b145b09b81258c7cd6d", + "sha256:1b1262b912435a501fa04cd213720609e2cefa723a07c92017d18693e69bf00b", + "sha256:1b2ea72dea0825949a045fa4071f6d5b3d7620d2a208335207793cf29c5a182d", + "sha256:20d4275f3c4659d92048c70797e5fdc396c6e4446caf517ba5cad2db60cd39d3", + "sha256:23c3e77bf8a7317612e5c26a3b084c7edeb9552d645742a54a5867635b4f2453", + "sha256:26a4ea04195638dcd8c53dadb545d70badba51735b1594810e9768c2c0b4a5da", + "sha256:26bc7367c0961dec292244ef2549afa396e72e28cc24706210bd44d947582c59", + "sha256:2a0147c0bef783fd9abc9f016d66edb6cac466dc54a17ec5f5ada08ff65caf5d", + "sha256:2c0afd34f928383e3fd25740f2050dbac9d077e7ba5adbaa2227f4d4f3c8da5c", + "sha256:30369e54d6d0113d2aa5aee7a90d17f225c13d87902ace8fcd7bbf99b19124db", + "sha256:31860fbda80d8f6828e84b4a4d129fd9c4535996b8249cfb8c720dc2a1a00bb8", + "sha256:34e7fb3abe375b5c4e64fab75733d605dda0f59827752debc99c17cb2d5f3276", + "sha256:40eb8af662ba409c3cbf4a8150ad32ae73514cd7cb1f1a2113af39763dd616b3", + "sha256:41d698dcbe12b60661f0632b543dbb119e6ba088103b364ff65e951610cb7ce0", + "sha256:4726f1f3f42d6a25678c67da3f0b10f148f5655813c5aca54b0d1742ba821b8f", + "sha256:4927564be53239a87770a5f86bdc272b8d1fbb87ab7783ad70255b4ab01aa25b", + "sha256:4b6d77c75a57f041c5ee915ff0b0bb58eabb78728b69ed967bc5b780e8f701b8", + "sha256:4d9149e7528af8bbd76cc055967e6e04617dcb2a2afdaa3dea899406c5521faa", + "sha256:4deac83a8cc1d09e40683be0bc6d1fa4cde8df0a9bf0cda5693f9b0569ac01b6", + "sha256:4f1ab031feb8676f6bd7c85abec86e2935850bf19b84432c64e3e239bffeb1ec", + "sha256:502ed542e0d958bd12e7c3e9a015bce57deaf50eaa8c2e1c439b512cb9db1e3a", + "sha256:5461934e895968655225dfa8b3be79e7e927e95d4bd6c2d40edd2fa7052e71b6", + "sha256:58c1151827eef98b83d49b6ca6065575876a02d2211f259fb1a6b7757bd24dd8", + "sha256:5bdd36b362f419c78d09630cbaebc64913f66f62bda6d42d5fbb08da8cc4f181", + "sha256:5bf637300ff35d4f59c006fff201c510b2b5e745b07125458a5389af3c0dff8c", + "sha256:5bf68bb859799e9cec3d9dd8323c40c00a254aabb56fe08f907e437005932f2b", + "sha256:5d8dc9f63a26f7259b57f46a7aab5af86b2ad6fbe48487500bb1f4b27e051e4c", + "sha256:5f36afd0d56a6c42cf4e8465b6441cf546ed69d3a4ec92724cc9c8c61bd6ecf4", + "sha256:5f72914cfd1d0176e58ddc05c7a47674ef4222c8253bf70322923e73e14a4ac3", + "sha256:6291797cad239285275558e0a27872da735b05c75d5237bbade8736f80e4c225", + "sha256:62c151ce3d59ed56ebd7ce9ce5986a409a85db697d25fc232f8e81f195aa39a1", + "sha256:635702b2fed997e0ac256b2cfbdb4dd0bf7c56b5d8fba8ef03489c03b3eb40e2", + "sha256:64672fa888595a959cfeff957a654e947e65bbe1d7d82f550417cbd6898a1d6b", + "sha256:68504959253303d3ae9406b634997a2123a0b0c1da86459abbd0ffc921695eac", + "sha256:69297418ad644d521ea3e1aa2e14a2a422726167e9ad22b89e8f1130d68e1e9a", + "sha256:6c32a40712e3662bebe524abe8abb757f2fa2000028d64cc5a1006016c06af43", + "sha256:715c62af74c236bf386825c0fdfa08d092ab0f191eb5b4580d11c3189af9d330", + "sha256:71dffba8fe9ddff628c68f3abd845e91b028361d43c5f8e7b3f8b91d7d85413e", + "sha256:7419241e17c7fbe5074ba79143d5523270e04f86f1b3a0dff8df490f84c8273a", + "sha256:759871f00e26ad3709efc773ac37b4d571de065f9dfb1778012908bcc36b3a73", + "sha256:7a25493320203005d2a4dac76d1b7d953cb49bce6d459d9ae38e30dd9f29bc9c", + "sha256:7b79af799630af263eca9ec87db519426d8c9b3be35016eddad1832bac812d87", + "sha256:7c9c84749f5787781c1c45bb99f433402e484e515b40675a5d121ea14711cf61", + "sha256:7da333f21cd9df51d5731513a6d39319892947604924ddf2e24a4612975fb936", + "sha256:82a4eba92b7ca8af1b7d5ef5f3d9647eee94d1f74d21ca7c21e3a2b92e008358", + "sha256:89670d7a0045acb52be0566df5bc8b114ac967c662c06cf5e0c606e4aadc964b", + "sha256:8a1d581e8cdbb857b0e0e81df98603376c1a5c34dc5e54039dcc00f043df81e7", + "sha256:8ec86b5baa36f0a0bfb37db86c7d52652f8e8aa076ab745ef7725784183c3fdd", + "sha256:91301a0980a1d4530d4ba7e6a739ca1a6b31341252cb709948e0aca0860ce0ae", + "sha256:918f2013d7eadea1d88d1a35fd4a1e16aaf90343eb446f91cb091ce7f9b431a2", + "sha256:9cb2390355ba084c1ad49485d18449b4242da344dea3e0fe10babd1f0db7dcfc", + "sha256:9ee65f0cc652261744fd07f2c6e6901c914aa6c5ff4dcfaf1136bc394d0dd26b", + "sha256:a608a75846804271cf9c83e40bbb4dab2ac614d33c6fd5b0c6187f53f5c593ef", + "sha256:a66d931ea2c1464b738ace44b7334ab32a2fd50be023d863935eb00f42be1778", + "sha256:a7a7f2a3f628d2f7ef11cb6188bcf0b9e1558151d511b974dfea10a49afe192b", + "sha256:abaeec1be6ed535a5d7ffc2e6c390083c425832b20efd621562fbb5bff6dc518", + "sha256:abfa44cf2f7f7d7a199be6c6ec141c9024063205545aa09304349781b9a125e6", + "sha256:ade5dbcf8d9ef8f4b28e682d0b29f3008df9842bb5ac48ac2c17bc55771cc976", + "sha256:ae62032ef513fe6281ef0009e30838a01057b832dc265da32c10469622613885", + "sha256:aec79acc183865bad120b0190afac467c20b15289050648b876b07777e67ea48", + "sha256:b716294e721d8060908dbebe32639b01bfe61b15f9f57bcc18ca9a0e00d9520b", + "sha256:b9ec80eb5a5f45a2211793f1c4aeddff0c3761d1c70d684965c1807e923a588b", + "sha256:ba95691cf25f63df53c1d342413b41bd7762d9acb425df8858d7efa616c0870e", + "sha256:bccc06fa0372151f37f6b69834181aa9eb57cf8665ed36405fb45fbf6cac3bae", + "sha256:c860773a0f205926172c6644c394e02c25421dc9a456deff16f64c0e299487d3", + "sha256:ca1103d70306489e3d006b0f79db8ca5dd3c977f6f13b2c59ff745249431a606", + "sha256:ce72d46eb201ca43994303025bd54d8a35a3fc2a3495fac653d6eb7205ce04f4", + "sha256:d20cbb9d3e95114325780f3cfe990f3ecae24de7a2d75f978783878cce2ad585", + "sha256:dcfebee69cd5e1c0b76a17e17e347c84b00acebb8dd8edb22d4a03e88e82a207", + "sha256:e1c69aa459f5609dec2fa0652d495353accf3eda5bdb18782bc5a2ae45c9273a", + "sha256:e2762c568596332fdab56b07060c8ab8362c56cf2a339ee54e491cd503612c50", + "sha256:e37f10f6d4bc67c58fbd727108ae1d8b92b397355e68519f1e4a7babb1473442", + "sha256:e790954b5093dff1e3a9a2523fddc4e79722d6f07993b4cd5547825c3cbf97b5", + "sha256:e81a295adccf73477220e15ff79235ca9dcbcee4be459eb9d4ce9a2763b8386c", + "sha256:e925819a98318d17251776bd3d6aa9f3ff77b965762155bdad15d1a9265c4cfd", + "sha256:ea30239c148b6ef41364c6f51d103c2988965b643d62e10b233b5efdca8c0099", + "sha256:eabf946a4739b5237f4f56d77fa6668263bc466d06a8036c055587c130a46f7b", + "sha256:ecb158fb9b9091b515213bed3061eb7deb1d3b4e02327c27a0ea714ff46b0760", + "sha256:ecc6d02d69b54a2eb83ebcc6f29df04957f734bcf309d346b4f83354d8376862", + "sha256:eddb18a00bbb855325db27b4c2a89a4ba491cd6a0bd6d852b225172a1f54b36c", + "sha256:f00e8b59e1fc8f09d05594aa7d2b726f1b277ca6155fc84c0396db1b373c4555", + "sha256:f1fb026c575e16f673c61c7b86144517705865173f3d0907040ac30c4f9f5915", + "sha256:f200b2f20856b5a6c3a35f0d4e344019f805e363416e609e9b47c552d35fd5ea", + "sha256:f225f3a3995dbbc26affc191d0443c6c4aa71b83358fd4c2b7d63e2f6f0336f9", + "sha256:f22dab23cdbce2005f26a8f0c71698457861f97fc6318c75814a50c75e87d025", + "sha256:f3eb479354c62067afa62f53bb387827bee2f75c9c79ef25eef6ab84d4b1ae3b", + "sha256:fc53e05c16697ff0c1c7c2b98e45e131d4bfb78068fffff92a82d169cbb4c7b7", + "sha256:ff48a55be9da6930254565ff5238d71d5e9cd8c5487a191cb85df3bdb8c77365" ], - "markers": "python_version >= '3.8'", - "version": "==2.27.2" + "markers": "python_version >= '3.9'", + "version": "==2.33.0" }, "pyjwt": { "hashes": [ @@ -1250,11 +1376,11 @@ }, "pyparsing": { "hashes": [ - "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1", - "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a" + "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", + "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be" ], "markers": "python_version >= '3.9'", - "version": "==3.2.1" + "version": "==3.2.3" }, "pytest": { "hashes": [ @@ -1275,19 +1401,19 @@ }, "python-dotenv": { "hashes": [ - "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", - "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a" + "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5", + "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==1.0.1" + "markers": "python_version >= '3.9'", + "version": "==1.1.0" }, "pytz": { "hashes": [ - "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57", - "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e" + "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", + "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00" ], - "version": "==2025.1" + "version": "==2025.2" }, "pyyaml": { "hashes": [ @@ -1348,14 +1474,115 @@ "markers": "python_version >= '3.8'", "version": "==6.0.2" }, + "qh3": { + "hashes": [ + "sha256:0107f576a0524421e1b0f9e0437d2881a1835b1b6105eadd7ea0c1c9bf2da917", + "sha256:06159707895c606a321ccb5630347a2d2a44ee584f22945e5b22b0ad34f21ec8", + "sha256:06255835f99ea1af9e5d358056011686fcccbafaba893454027daa62ab6f701f", + "sha256:09b2305a954e61a9ed8b46a7a45f54e8d95ef870a47d5fd1836e14c7600d3b92", + "sha256:0a51dcffae03a89ddbab1884860569e0d1dbbf95deee47457c1fd29b4ac8d220", + "sha256:0a5d1cd881b7d43481ad60262cf3390a555e0e51751bc2af70ba4a612487e797", + "sha256:0e1c273660f9b8511c22d0b082137556e46d6a7eccf132bd82f95d29f90488b2", + "sha256:0e540cc7e7da65da30381bdb73a789a8635c6aaef98688d904eee3bc587654a5", + "sha256:10ed818f47dc522350a12641e8f2bea19ff824f8ce373c23a8e594b3481fd7a4", + "sha256:195b4ad58cf5a8da218e2368d34f47628c14581f3cc9863fc0406b32e137f3a6", + "sha256:1a80d07249c7ccbaa57bb9015b5ead0ead7ac1940cd5483548dfe56db99ce7a4", + "sha256:1cf0b18823801078d2294a0356abc2be34b4a224bea863a87029c1c97d6c34e0", + "sha256:1fac2ab4b8a2e50894b54a19416cd363defe0fb33f52754686ea58999f98dfc5", + "sha256:205cdaea9da8881b31b76eb6da5b88c9558ba96bc16a3ecf11333098ac7f3859", + "sha256:2294e78bcc40728a3a772df0f8ecf8b8756616d06dd001029016876aa4e5c9de", + "sha256:235236ab195d34e7cd18d186e46b7a4f8aceafe246bf36b42913f72627ded414", + "sha256:25eef1f2be50d79d23e01a567c719e46e4892518a5ccc96685fcb4746357320b", + "sha256:2ae147b756c3adf59699756feb9e07d4a69674f57b4e13d6c25f9d1dc3c8707c", + "sha256:2c9cdd7ea49c79b671e7de35dad61d2aa91920e2498d0c6dfa932d5e05070a5e", + "sha256:2dc9f269d7316b0a44e61ae7a11ffd8daa800b3f5ba773de2e9d8c4ee636a896", + "sha256:2f94d69edb0070ef4ec414deabfc2369aa2100b11bf4a4f2f393f2c28c4bc7ba", + "sha256:311da331e31c55afc3f4f4f2ba9d07a1d700ffb7db5aa4f58300b9f56f2523dc", + "sha256:3578844a9ff4c342a409d010f909782afc52a31680876f7fab65bf133aa3f4db", + "sha256:4032c2898b4c0ff7a25cf7d68c3b1f2abdcaf4f25cc8b6802a941a842f9a95b6", + "sha256:40abd150eddfa0884c139bd281e87ff920d4cd52d685fc4ef25ddcc77ff7a220", + "sha256:43e32602651d07f8a0860ba0a45d8c8fe9ccd537030e7632d1258f7b84881416", + "sha256:45a21d25fe17168f4db09fcaabee5dd171763ad1bd8753c257297837f5ba9197", + "sha256:45bfbb126e31ecf63ef74c249d38d07e149c0663b4a191cf9e2e3445a80758d5", + "sha256:4745667c9956bcfd74ff677edd4c73d6cb578b6b47c5fb3d246aaa223dd6a004", + "sha256:4936a5d8915866b4f08ab18018f41ed93a2593788ad0a80796aada2e23d402e5", + "sha256:4a45a9698b3bcae05f91356f50df8dab3c3fdef3187548b9c4a396a6eb6760b5", + "sha256:4b84c1ca283278e2e22a3b9e2ce8ea55c0a1797d6e86255640a1b6293fe18b2a", + "sha256:4dc88397ed7f3b46f542f87e19050a7f82267225009ce65651ac44cb55b204b1", + "sha256:4e10a872077373c71d7938fb1a7ae0561f2e79aad2b1b5323dbb6325a389041a", + "sha256:4f1b5dcb4d9da5b441e0b14216b816be7b5b5d080c2ccb957adf84266411ff6b", + "sha256:50d25182d598312197f500a65acebf5430391764e6ffcdb73d96e80c5dd06fc7", + "sha256:529c5b9e27fced27befce26e2699eca3110c576f6427dfbd26e30b7666b2d6d1", + "sha256:571da625b22e953731307539b44b2177f6ab13b6142d7698c0f28b9379ae1be6", + "sha256:5a9de89e2480b385a99613798d375e69a0a53d4575bd74b133307c8e83a84751", + "sha256:5bcc46cf89cb1036c2d029c01f360c82180329997a75728b20dc205f34114327", + "sha256:5dfa6238a6236f2bb3ecaac9befd23cee0bcbb9e497003fb3aef875e19325c61", + "sha256:6342b961b18037e3df8692e8914c576816a966bf29f913ee2728e7e838bde9bd", + "sha256:65e112c175a0b0328822dd0d19ead9ef1d7925359d154fb52e46b080945eef38", + "sha256:6f8a2b15c4dd58133e92f95d4312efd09b87ec15b881885629dff70e89f1e751", + "sha256:726f749444d1cc73c1bf221343dc6fdbde2541ffe30860d2d5ef6e310a1f5478", + "sha256:742f39cd807df31c21e035aec63f6f61e139a60545cffb16e8e87f61609d7cba", + "sha256:7840c18ec27aa08ecdd8ff23df348c124378c6f3edf9a0e02b16a5a4ce504c89", + "sha256:79d1de24d3c7345719af8333b64f19a8777dd50a059851bfcfa583c7109eddf2", + "sha256:7ba9303c5334d64b547483be92c4bbacd37964ff3abd0b1e8c82c63ec6f7b3ec", + "sha256:85587d9dfbd2f7f8622cf57f3c1a19cee441b5607a982cdf4c08ef38d45d5a36", + "sha256:8711b86e447e689d1b693419708b6ad64bf0c57091b94a3f65c6d4bd7cfb7d9a", + "sha256:877edc4db25309d86af07d992926394936f491cce84fce439961729552e942fe", + "sha256:8bb17669e362d3456bebd5c69abb0c26e8ab29c10894f123c715b0217aece479", + "sha256:8bb17a1e50e35a8d07cab784caea68b33f739391ccb5e3161afb9db0bde8faf4", + "sha256:8d4640a6bb3aa29797bdcf0c5bae4e86da5f2fbf84b67a7fad549fa34c19aa98", + "sha256:90697f3d9e4b3ddccfb31b40637bac6d44b39288cd57f78e51ff13e70916eccc", + "sha256:90f127f57c00b111ea3ffd95f4c12ad83efebd10310fd718d66771dd64e568f1", + "sha256:95f8f70bca1e880da7559ef38b7f1778a3b39b586fc829b8a7e989e912aa988f", + "sha256:9a60c102a01dfa8c5d737499c9a5d5e7c2b6642009c9b80b27f228ec50ce6fb0", + "sha256:9c7f1821ec749ea29bd9d079e4f13a552371731d0b664962a60cbb2f31d571b5", + "sha256:9f81ee66fadedbfd4d5c49e64151db3b6f353b041ddf5ab0b151340a4467e038", + "sha256:9f8e530e29e1afe9231b1100645aa5cc240b823c0e4162f70046270a3559400c", + "sha256:a0c647db3f156e8c94a63c1fa0fc4f2ce8b70f0eb12f2726e6c19493198b1e99", + "sha256:a0cda60607ab4ffc14fa8425ea7c9ae78ad60923c3c8be94d19c14f83198b1cf", + "sha256:a5bff397d49da302b5afbdf244dd7ca480a827f5de856d957df05dfd7e73b490", + "sha256:a94bd391b955b24948b2986845f9c6ad8abc709c2d57d0515daeacf16a2a3a4c", + "sha256:ad4572bd37c1a6a7a12ff47da4f3578a13e3c8ee85a1f02d2435dfdc6d9ed394", + "sha256:b13b7de1686f1b5da7526dc4f0de410a685f5cb654e984b09ddd8d14be6fffc0", + "sha256:b1724c43c5c0d08b68c3407467e07794b9adf153b6de8300d61883e8d95fa640", + "sha256:b27d29cb718df9ed006f8c75a89dd90534437761b2477dc7a4145bde0daa60fc", + "sha256:b3afa3a78b0f011ff5a09dea37d74fcea9269b318d2828f18b2fbf9dde625a71", + "sha256:bd6a61007e678284178bb00931af59f686a2a55797505e0886241050ec5c243c", + "sha256:befeca45fd7787c08a3286fb72caaccfa4c3962760981dfeb0992f5ba9be5cb2", + "sha256:c2d31b8233f406e00f180e221986f436765c3bb06839e72c898feca31fef1d4e", + "sha256:c3e2518ce442b70314892a594e21157deb13fbc436f77ad6555439cfd9912035", + "sha256:c8d5fbee607db24ef6c7b0bd08c21226d10782df4149b9d6f1f1516c7c85092b", + "sha256:cc2cc804998e852bdffcc87e8d008043ffa85efe6d3516d9784714d709f14774", + "sha256:cd8a681107c6118f60a0714671cec7b301533f25984a5c898e547a33a01af75c", + "sha256:d056831ebf3fa8116672ae970ad19a9f5f1427a2217cd0e01c1eaac5f8222668", + "sha256:d5ac3e8e3f66ff88819205dbc67e6f771cbb80529325ca9f3bc03fa00c5c83aa", + "sha256:dba15ca2da7859300ae79d2ea2eb8bb0eb827b93a2f104981783add16a97058a", + "sha256:de6cabb89248b60ea9bb9d7848de78dfb824abfdc15f52448a8efe821dd7d559", + "sha256:e02f6d1cc2005b847176dd8770fdfe90f04a34a3f094b79a8369bde0aa8f6a04", + "sha256:e514bd4b27c953c46485b2be0ecd2421aa196c5a0cd7d67f1ccec16a56b00507", + "sha256:e53464124379764f982a69f5ab34d0d5c527e8ac1e788db86a25f79045e5b18d", + "sha256:e9cf59660a543bef86de457c671c1d78ad2d88c53bb9eb3fce6ce0cb9729d490", + "sha256:edfc1bc732bc5e62fdaea268a541eb442d5e04927cb27dfd8e92ef07213658d2", + "sha256:ee8e7a66be70a18f5e0558f2f6a89e39c608f87b027234848f76a6699975dcf8", + "sha256:effb7072efef7dca10a98c24be0cc882a40edc78e293b41f5b6dc7f1952215ed", + "sha256:f04e4ee7e3c123ac7f21cee6f819cfa9b5a376e656257dfa7a4d133b3590bdd9", + "sha256:f0531c7abe963affebd3fb6cf9ea87eb8c63a0240535d81d0223945bd41be254", + "sha256:f5afd1c216315682a6bbf606618de0e3817ed8eeafc27ad7660ef2f581d4fd46", + "sha256:f93d3c74e00268ac6042c080653a34d0f0e8903697fd8dc480c1e3de81c90faf", + "sha256:fbc4e6452cc48c3e1398fe930349e2ec9ad76a2c00e729f3e797700c2f0646e6", + "sha256:fc73fc2889a01a43737c7a7c7fb9ee13aa56065b22abbed0e787cc58a3747808" + ], + "markers": "python_version >= '3.7'", + "version": "==1.4.2" + }, "rdflib": { "hashes": [ - "sha256:5402310a9f0f3c07d453d73fd0ad6ba35616286fe95d3670db2b725f3f539673", - "sha256:f3dcb4c106a8cd9e060d92f43d593d09ebc3d07adc244f4c7315856a12e383ee" + "sha256:72f4adb1990fa5241abd22ddaf36d7cafa5d91d9ff2ba13f3086d339b213d997", + "sha256:fed46e24f26a788e2ab8e445f7077f00edcf95abb73bcef4b86cefa8b62dd174" ], "index": "pypi", "markers": "python_full_version >= '3.8.1' and python_full_version < '4.0.0'", - "version": "==7.1.3" + "version": "==7.1.4" }, "referencing": { "hashes": [ @@ -1375,112 +1602,123 @@ }, "rpds-py": { "hashes": [ - "sha256:09cd7dbcb673eb60518231e02874df66ec1296c01a4fcd733875755c02014b19", - "sha256:0f3288930b947cbebe767f84cf618d2cbe0b13be476e749da0e6a009f986248c", - "sha256:0fced9fd4a07a1ded1bac7e961ddd9753dd5d8b755ba8e05acba54a21f5f1522", - "sha256:112b8774b0b4ee22368fec42749b94366bd9b536f8f74c3d4175d4395f5cbd31", - "sha256:11dd60b2ffddba85715d8a66bb39b95ddbe389ad2cfcf42c833f1bcde0878eaf", - "sha256:178f8a60fc24511c0eb756af741c476b87b610dba83270fce1e5a430204566a4", - "sha256:1b08027489ba8fedde72ddd233a5ea411b85a6ed78175f40285bd401bde7466d", - "sha256:1bf5be5ba34e19be579ae873da515a2836a2166d8d7ee43be6ff909eda42b72b", - "sha256:1ed7de3c86721b4e83ac440751329ec6a1102229aa18163f84c75b06b525ad7e", - "sha256:1eedaaccc9bb66581d4ae7c50e15856e335e57ef2734dbc5fd8ba3e2a4ab3cb6", - "sha256:243241c95174b5fb7204c04595852fe3943cc41f47aa14c3828bc18cd9d3b2d6", - "sha256:26bb3e8de93443d55e2e748e9fd87deb5f8075ca7bc0502cfc8be8687d69a2ec", - "sha256:271fa2184cf28bdded86bb6217c8e08d3a169fe0bbe9be5e8d96e8476b707122", - "sha256:28358c54fffadf0ae893f6c1050e8f8853e45df22483b7fff2f6ab6152f5d8bf", - "sha256:285019078537949cecd0190f3690a0b0125ff743d6a53dfeb7a4e6787af154f5", - "sha256:2893d778d4671ee627bac4037a075168b2673c57186fb1a57e993465dbd79a93", - "sha256:2a54027554ce9b129fc3d633c92fa33b30de9f08bc61b32c053dc9b537266fed", - "sha256:2c6ae11e6e93728d86aafc51ced98b1658a0080a7dd9417d24bfb955bb09c3c2", - "sha256:2cfa07c346a7ad07019c33fb9a63cf3acb1f5363c33bc73014e20d9fe8b01cdd", - "sha256:35d5631ce0af26318dba0ae0ac941c534453e42f569011585cb323b7774502a5", - "sha256:3614d280bf7aab0d3721b5ce0e73434acb90a2c993121b6e81a1c15c665298ac", - "sha256:3902df19540e9af4cc0c3ae75974c65d2c156b9257e91f5101a51f99136d834c", - "sha256:3aaf141d39f45322e44fc2c742e4b8b4098ead5317e5f884770c8df0c332da70", - "sha256:3d8abf7896a91fb97e7977d1aadfcc2c80415d6dc2f1d0fca5b8d0df247248f3", - "sha256:3e77febf227a1dc3220159355dba68faa13f8dca9335d97504abf428469fb18b", - "sha256:3e9212f52074fc9d72cf242a84063787ab8e21e0950d4d6709886fb62bcb91d5", - "sha256:3ee9d6f0b38efb22ad94c3b68ffebe4c47865cdf4b17f6806d6c674e1feb4246", - "sha256:4233df01a250b3984465faed12ad472f035b7cd5240ea3f7c76b7a7016084495", - "sha256:4263320ed887ed843f85beba67f8b2d1483b5947f2dc73a8b068924558bfeace", - "sha256:4ab923167cfd945abb9b51a407407cf19f5bee35001221f2911dc85ffd35ff4f", - "sha256:4caafd1a22e5eaa3732acb7672a497123354bef79a9d7ceed43387d25025e935", - "sha256:50fb62f8d8364978478b12d5f03bf028c6bc2af04082479299139dc26edf4c64", - "sha256:55ff4151cfd4bc635e51cfb1c59ac9f7196b256b12e3a57deb9e5742e65941ad", - "sha256:5b98b6c953e5c2bda51ab4d5b4f172617d462eebc7f4bfdc7c7e6b423f6da957", - "sha256:5c9ff044eb07c8468594d12602291c635da292308c8c619244e30698e7fc455a", - "sha256:5e9c206a1abc27e0588cf8b7c8246e51f1a16a103734f7750830a1ccb63f557a", - "sha256:5fb89edee2fa237584e532fbf78f0ddd1e49a47c7c8cfa153ab4849dc72a35e6", - "sha256:633462ef7e61d839171bf206551d5ab42b30b71cac8f10a64a662536e057fdef", - "sha256:66f8d2a17e5838dd6fb9be6baaba8e75ae2f5fa6b6b755d597184bfcd3cb0eba", - "sha256:6959bb9928c5c999aba4a3f5a6799d571ddc2c59ff49917ecf55be2bbb4e3722", - "sha256:698a79d295626ee292d1730bc2ef6e70a3ab135b1d79ada8fde3ed0047b65a10", - "sha256:721f9c4011b443b6e84505fc00cc7aadc9d1743f1c988e4c89353e19c4a968ee", - "sha256:72e680c1518733b73c994361e4b06441b92e973ef7d9449feec72e8ee4f713da", - "sha256:75307599f0d25bf6937248e5ac4e3bde5ea72ae6618623b86146ccc7845ed00b", - "sha256:754fba3084b70162a6b91efceee8a3f06b19e43dac3f71841662053c0584209a", - "sha256:759462b2d0aa5a04be5b3e37fb8183615f47014ae6b116e17036b131985cb731", - "sha256:7938c7b0599a05246d704b3f5e01be91a93b411d0d6cc62275f025293b8a11ce", - "sha256:7b77e07233925bd33fc0022b8537774423e4c6680b6436316c5075e79b6384f4", - "sha256:7e5413d2e2d86025e73f05510ad23dad5950ab8417b7fc6beaad99be8077138b", - "sha256:7f3240dcfa14d198dba24b8b9cb3b108c06b68d45b7babd9eefc1038fdf7e707", - "sha256:7f9682a8f71acdf59fd554b82b1c12f517118ee72c0f3944eda461606dfe7eb9", - "sha256:8d67beb6002441faef8251c45e24994de32c4c8686f7356a1f601ad7c466f7c3", - "sha256:9441af1d25aed96901f97ad83d5c3e35e6cd21a25ca5e4916c82d7dd0490a4fa", - "sha256:98b257ae1e83f81fb947a363a274c4eb66640212516becaff7bef09a5dceacaa", - "sha256:9e9f3a3ac919406bc0414bbbd76c6af99253c507150191ea79fab42fdb35982a", - "sha256:a1c66e71ecfd2a4acf0e4bd75e7a3605afa8f9b28a3b497e4ba962719df2be57", - "sha256:a1e17d8dc8e57d8e0fd21f8f0f0a5211b3fa258b2e444c2053471ef93fe25a00", - "sha256:a20cb698c4a59c534c6701b1c24a968ff2768b18ea2991f886bd8985ce17a89f", - "sha256:a970bfaf130c29a679b1d0a6e0f867483cea455ab1535fb427566a475078f27f", - "sha256:a98f510d86f689fcb486dc59e6e363af04151e5260ad1bdddb5625c10f1e95f8", - "sha256:a9d3b728f5a5873d84cba997b9d617c6090ca5721caaa691f3b1a78c60adc057", - "sha256:ad76f44f70aac3a54ceb1813ca630c53415da3a24fd93c570b2dfb4856591017", - "sha256:ae28144c1daa61366205d32abd8c90372790ff79fc60c1a8ad7fd3c8553a600e", - "sha256:b03a8d50b137ee758e4c73638b10747b7c39988eb8e6cd11abb7084266455165", - "sha256:b5a96fcac2f18e5a0a23a75cd27ce2656c66c11c127b0318e508aab436b77428", - "sha256:b5ef909a37e9738d146519657a1aab4584018746a18f71c692f2f22168ece40c", - "sha256:b79f5ced71efd70414a9a80bbbfaa7160da307723166f09b69773153bf17c590", - "sha256:b91cceb5add79ee563bd1f70b30896bd63bc5f78a11c1f00a1e931729ca4f1f4", - "sha256:b92f5654157de1379c509b15acec9d12ecf6e3bc1996571b6cb82a4302060447", - "sha256:c04ca91dda8a61584165825907f5c967ca09e9c65fe8966ee753a3f2b019fe1e", - "sha256:c1f8afa346ccd59e4e5630d5abb67aba6a9812fddf764fd7eb11f382a345f8cc", - "sha256:c5334a71f7dc1160382d45997e29f2637c02f8a26af41073189d79b95d3321f1", - "sha256:c617d7453a80e29d9973b926983b1e700a9377dbe021faa36041c78537d7b08c", - "sha256:c632419c3870507ca20a37c8f8f5352317aca097639e524ad129f58c125c61c6", - "sha256:c6760211eee3a76316cf328f5a8bd695b47b1626d21c8a27fb3b2473a884d597", - "sha256:c698d123ce5d8f2d0cd17f73336615f6a2e3bdcedac07a1291bb4d8e7d82a05a", - "sha256:c76b32eb2ab650a29e423525e84eb197c45504b1c1e6e17b6cc91fcfeb1a4b1d", - "sha256:c8f7e90b948dc9dcfff8003f1ea3af08b29c062f681c05fd798e36daa3f7e3e8", - "sha256:c9e799dac1ffbe7b10c1fd42fe4cd51371a549c6e108249bde9cd1200e8f59b4", - "sha256:cafa48f2133d4daa028473ede7d81cd1b9f9e6925e9e4003ebdf77010ee02f35", - "sha256:ce473a2351c018b06dd8d30d5da8ab5a0831056cc53b2006e2a8028172c37ce5", - "sha256:d31ed4987d72aabdf521eddfb6a72988703c091cfc0064330b9e5f8d6a042ff5", - "sha256:d550d7e9e7d8676b183b37d65b5cd8de13676a738973d330b59dc8312df9c5dc", - "sha256:d6adb81564af0cd428910f83fa7da46ce9ad47c56c0b22b50872bc4515d91966", - "sha256:d6f6512a90bd5cd9030a6237f5346f046c6f0e40af98657568fa45695d4de59d", - "sha256:d7031d493c4465dbc8d40bd6cafefef4bd472b17db0ab94c53e7909ee781b9ef", - "sha256:d9f75a06ecc68f159d5d7603b734e1ff6daa9497a929150f794013aa9f6e3f12", - "sha256:db7707dde9143a67b8812c7e66aeb2d843fe33cc8e374170f4d2c50bd8f2472d", - "sha256:e0397dd0b3955c61ef9b22838144aa4bef6f0796ba5cc8edfc64d468b93798b4", - "sha256:e0df046f2266e8586cf09d00588302a32923eb6386ced0ca5c9deade6af9a149", - "sha256:e14f86b871ea74c3fddc9a40e947d6a5d09def5adc2076ee61fb910a9014fb35", - "sha256:e5963ea87f88bddf7edd59644a35a0feecf75f8985430124c253612d4f7d27ae", - "sha256:e768267cbe051dd8d1c5305ba690bb153204a09bf2e3de3ae530de955f5b5580", - "sha256:e9cb79ecedfc156c0692257ac7ed415243b6c35dd969baa461a6888fc79f2f07", - "sha256:ed6f011bedca8585787e5082cce081bac3d30f54520097b2411351b3574e1219", - "sha256:f3429fb8e15b20961efca8c8b21432623d85db2228cc73fe22756c6637aa39e7", - "sha256:f35eff113ad430b5272bbfc18ba111c66ff525828f24898b4e146eb479a2cdda", - "sha256:f3a6cb95074777f1ecda2ca4fa7717caa9ee6e534f42b7575a8f0d4cb0c24013", - "sha256:f7356a6da0562190558c4fcc14f0281db191cdf4cb96e7604c06acfcee96df15", - "sha256:f88626e3f5e57432e6191cd0c5d6d6b319b635e70b40be2ffba713053e5147dd", - "sha256:fad784a31869747df4ac968a351e070c06ca377549e4ace94775aaa3ab33ee06", - "sha256:fc869af5cba24d45fb0399b0cfdbcefcf6910bf4dee5d74036a57cf5264b3ff4", - "sha256:fee513135b5a58f3bb6d89e48326cd5aa308e4bcdf2f7d59f67c861ada482bf8" + "sha256:0047638c3aa0dbcd0ab99ed1e549bbf0e142c9ecc173b6492868432d8989a046", + "sha256:006f4342fe729a368c6df36578d7a348c7c716be1da0a1a0f86e3021f8e98724", + "sha256:041f00419e1da7a03c46042453598479f45be3d787eb837af382bfc169c0db33", + "sha256:04ecf5c1ff4d589987b4d9882872f80ba13da7d42427234fce8f22efb43133bc", + "sha256:04f2b712a2206e13800a8136b07aaedc23af3facab84918e7aa89e4be0260032", + "sha256:0aeb3329c1721c43c58cae274d7d2ca85c1690d89485d9c63a006cb79a85771a", + "sha256:0e374c0ce0ca82e5b67cd61fb964077d40ec177dd2c4eda67dba130de09085c7", + "sha256:0f00c16e089282ad68a3820fd0c831c35d3194b7cdc31d6e469511d9bffc535c", + "sha256:174e46569968ddbbeb8a806d9922f17cd2b524aa753b468f35b97ff9c19cb718", + "sha256:1b221c2457d92a1fb3c97bee9095c874144d196f47c038462ae6e4a14436f7bc", + "sha256:208b3a70a98cf3710e97cabdc308a51cd4f28aa6e7bb11de3d56cd8b74bab98d", + "sha256:20f2712bd1cc26a3cc16c5a1bfee9ed1abc33d4cdf1aabd297fe0eb724df4272", + "sha256:24795c099453e3721fda5d8ddd45f5dfcc8e5a547ce7b8e9da06fecc3832e26f", + "sha256:2a0f156e9509cee987283abd2296ec816225145a13ed0391df8f71bf1d789e2d", + "sha256:2b2356688e5d958c4d5cb964af865bea84db29971d3e563fb78e46e20fe1848b", + "sha256:2c13777ecdbbba2077670285dd1fe50828c8742f6a4119dbef6f83ea13ad10fb", + "sha256:2d3ee4615df36ab8eb16c2507b11e764dcc11fd350bbf4da16d09cda11fcedef", + "sha256:2d53747da70a4e4b17f559569d5f9506420966083a31c5fbd84e764461c4444b", + "sha256:32bab0a56eac685828e00cc2f5d1200c548f8bc11f2e44abf311d6b548ce2e45", + "sha256:34d90ad8c045df9a4259c47d2e16a3f21fdb396665c94520dbfe8766e62187a4", + "sha256:369d9c6d4c714e36d4a03957b4783217a3ccd1e222cdd67d464a3a479fc17796", + "sha256:3a55fc10fdcbf1a4bd3c018eea422c52cf08700cf99c28b5cb10fe97ab77a0d3", + "sha256:3d2d8e4508e15fc05b31285c4b00ddf2e0eb94259c2dc896771966a163122a0c", + "sha256:3fab5f4a2c64a8fb64fc13b3d139848817a64d467dd6ed60dcdd6b479e7febc9", + "sha256:43dba99f00f1d37b2a0265a259592d05fcc8e7c19d140fe51c6e6f16faabeb1f", + "sha256:44d51febb7a114293ffd56c6cf4736cb31cd68c0fddd6aa303ed09ea5a48e029", + "sha256:493fe54318bed7d124ce272fc36adbf59d46729659b2c792e87c3b95649cdee9", + "sha256:4b28e5122829181de1898c2c97f81c0b3246d49f585f22743a1246420bb8d399", + "sha256:4cd031e63bc5f05bdcda120646a0d32f6d729486d0067f09d79c8db5368f4586", + "sha256:528927e63a70b4d5f3f5ccc1fa988a35456eb5d15f804d276709c33fc2f19bda", + "sha256:564c96b6076a98215af52f55efa90d8419cc2ef45d99e314fddefe816bc24f91", + "sha256:5db385bacd0c43f24be92b60c857cf760b7f10d8234f4bd4be67b5b20a7c0b6b", + "sha256:5ef877fa3bbfb40b388a5ae1cb00636a624690dcb9a29a65267054c9ea86d88a", + "sha256:5f6e3cec44ba05ee5cbdebe92d052f69b63ae792e7d05f1020ac5e964394080c", + "sha256:5fc13b44de6419d1e7a7e592a4885b323fbc2f46e1f22151e3a8ed3b8b920405", + "sha256:60748789e028d2a46fc1c70750454f83c6bdd0d05db50f5ae83e2db500b34da5", + "sha256:60d9b630c8025b9458a9d114e3af579a2c54bd32df601c4581bd054e85258143", + "sha256:619ca56a5468f933d940e1bf431c6f4e13bef8e688698b067ae68eb4f9b30e3a", + "sha256:630d3d8ea77eabd6cbcd2ea712e1c5cecb5b558d39547ac988351195db433f6c", + "sha256:63981feca3f110ed132fd217bf7768ee8ed738a55549883628ee3da75bb9cb78", + "sha256:66420986c9afff67ef0c5d1e4cdc2d0e5262f53ad11e4f90e5e22448df485bf0", + "sha256:675269d407a257b8c00a6b58205b72eec8231656506c56fd429d924ca00bb350", + "sha256:6a4a535013aeeef13c5532f802708cecae8d66c282babb5cd916379b72110cf7", + "sha256:6a727fd083009bc83eb83d6950f0c32b3c94c8b80a9b667c87f4bd1274ca30ba", + "sha256:6e1daf5bf6c2be39654beae83ee6b9a12347cb5aced9a29eecf12a2d25fff664", + "sha256:6eea559077d29486c68218178ea946263b87f1c41ae7f996b1f30a983c476a5a", + "sha256:75a810b7664c17f24bf2ffd7f92416c00ec84b49bb68e6a0d93e542406336b56", + "sha256:772cc1b2cd963e7e17e6cc55fe0371fb9c704d63e44cacec7b9b7f523b78919e", + "sha256:78884d155fd15d9f64f5d6124b486f3d3f7fd7cd71a78e9670a0f6f6ca06fb2d", + "sha256:79e8d804c2ccd618417e96720ad5cd076a86fa3f8cb310ea386a3e6229bae7d1", + "sha256:7e80d375134ddb04231a53800503752093dbb65dad8dabacce2c84cccc78e964", + "sha256:8097b3422d020ff1c44effc40ae58e67d93e60d540a65649d2cdaf9466030791", + "sha256:8205ee14463248d3349131bb8099efe15cd3ce83b8ef3ace63c7e976998e7124", + "sha256:8212ff58ac6dfde49946bea57474a386cca3f7706fc72c25b772b9ca4af6b79e", + "sha256:823e74ab6fbaa028ec89615ff6acb409e90ff45580c45920d4dfdddb069f2120", + "sha256:84e0566f15cf4d769dade9b366b7b87c959be472c92dffb70462dd0844d7cbad", + "sha256:896c41007931217a343eff197c34513c154267636c8056fb409eafd494c3dcdc", + "sha256:8aa362811ccdc1f8dadcc916c6d47e554169ab79559319ae9fae7d7752d0d60c", + "sha256:8b3b397eefecec8e8e39fa65c630ef70a24b09141a6f9fc17b3c3a50bed6b50e", + "sha256:8ebc7e65ca4b111d928b669713865f021b7773350eeac4a31d3e70144297baba", + "sha256:9168764133fd919f8dcca2ead66de0105f4ef5659cbb4fa044f7014bed9a1797", + "sha256:921ae54f9ecba3b6325df425cf72c074cd469dea843fb5743a26ca7fb2ccb149", + "sha256:92558d37d872e808944c3c96d0423b8604879a3d1c86fdad508d7ed91ea547d5", + "sha256:951cc481c0c395c4a08639a469d53b7d4afa252529a085418b82a6b43c45c240", + "sha256:998c01b8e71cf051c28f5d6f1187abbdf5cf45fc0efce5da6c06447cba997034", + "sha256:9abc80fe8c1f87218db116016de575a7998ab1629078c90840e8d11ab423ee25", + "sha256:9be4f99bee42ac107870c61dfdb294d912bf81c3c6d45538aad7aecab468b6b7", + "sha256:9c39438c55983d48f4bb3487734d040e22dad200dab22c41e331cee145e7a50d", + "sha256:9d7e8ce990ae17dda686f7e82fd41a055c668e13ddcf058e7fb5e9da20b57793", + "sha256:9ea7f4174d2e4194289cb0c4e172d83e79a6404297ff95f2875cf9ac9bced8ba", + "sha256:a18fc371e900a21d7392517c6f60fe859e802547309e94313cd8181ad9db004d", + "sha256:a36b452abbf29f68527cf52e181fced56685731c86b52e852053e38d8b60bc8d", + "sha256:a5b66d1b201cc71bc3081bc2f1fc36b0c1f268b773e03bbc39066651b9e18391", + "sha256:a824d2c7a703ba6daaca848f9c3d5cb93af0505be505de70e7e66829affd676e", + "sha256:a88c0d17d039333a41d9bf4616bd062f0bd7aa0edeb6cafe00a2fc2a804e944f", + "sha256:aa6800adc8204ce898c8a424303969b7aa6a5e4ad2789c13f8648739830323b7", + "sha256:aad911555286884be1e427ef0dc0ba3929e6821cbeca2194b13dc415a462c7fd", + "sha256:afc6e35f344490faa8276b5f2f7cbf71f88bc2cda4328e00553bd451728c571f", + "sha256:b9a4df06c35465ef4d81799999bba810c68d29972bf1c31db61bfdb81dd9d5bb", + "sha256:bb2954155bb8f63bb19d56d80e5e5320b61d71084617ed89efedb861a684baea", + "sha256:bbc4362e06f950c62cad3d4abf1191021b2ffaf0b31ac230fbf0526453eee75e", + "sha256:c0145295ca415668420ad142ee42189f78d27af806fcf1f32a18e51d47dd2052", + "sha256:c30ff468163a48535ee7e9bf21bd14c7a81147c0e58a36c1078289a8ca7af0bd", + "sha256:c347a20d79cedc0a7bd51c4d4b7dbc613ca4e65a756b5c3e57ec84bd43505b47", + "sha256:c43583ea8517ed2e780a345dd9960896afc1327e8cf3ac8239c167530397440d", + "sha256:c61a2cb0085c8783906b2f8b1f16a7e65777823c7f4d0a6aaffe26dc0d358dd9", + "sha256:c9ca89938dff18828a328af41ffdf3902405a19f4131c88e22e776a8e228c5a8", + "sha256:cc31e13ce212e14a539d430428cd365e74f8b2d534f8bc22dd4c9c55b277b875", + "sha256:cdabcd3beb2a6dca7027007473d8ef1c3b053347c76f685f5f060a00327b8b65", + "sha256:cf86f72d705fc2ef776bb7dd9e5fbba79d7e1f3e258bf9377f8204ad0fc1c51e", + "sha256:d09dc82af2d3c17e7dd17120b202a79b578d79f2b5424bda209d9966efeed114", + "sha256:d3aa13bdf38630da298f2e0d77aca967b200b8cc1473ea05248f6c5e9c9bdb44", + "sha256:d69d003296df4840bd445a5d15fa5b6ff6ac40496f956a221c4d1f6f7b4bc4d9", + "sha256:d6e109a454412ab82979c5b1b3aee0604eca4bbf9a02693bb9df027af2bfa91a", + "sha256:d8551e733626afec514b5d15befabea0dd70a343a9f23322860c4f16a9430205", + "sha256:d8754d872a5dfc3c5bf9c0e059e8107451364a30d9fd50f1f1a85c4fb9481164", + "sha256:d8f9a6e7fd5434817526815f09ea27f2746c4a51ee11bb3439065f5fc754db58", + "sha256:dbcbb6db5582ea33ce46a5d20a5793134b5365110d84df4e30b9d37c6fd40ad3", + "sha256:e0f3ef95795efcd3b2ec3fe0a5bcfb5dadf5e3996ea2117427e524d4fbf309c6", + "sha256:e13ae74a8a3a0c2f22f450f773e35f893484fcfacb00bb4344a7e0f4f48e1f97", + "sha256:e274f62cbd274359eff63e5c7e7274c913e8e09620f6a57aae66744b3df046d6", + "sha256:e838bf2bb0b91ee67bf2b889a1a841e5ecac06dd7a2b1ef4e6151e2ce155c7ae", + "sha256:e8acd55bd5b071156bae57b555f5d33697998752673b9de554dd82f5b5352727", + "sha256:e8e5ab32cf9eb3647450bc74eb201b27c185d3857276162c101c0f8c6374e098", + "sha256:ebcb786b9ff30b994d5969213a8430cbb984cdd7ea9fd6df06663194bd3c450c", + "sha256:ebea2821cdb5f9fef44933617be76185b80150632736f3d76e54829ab4a3b4d1", + "sha256:ed0ef550042a8dbcd657dfb284a8ee00f0ba269d3f2286b0493b15a5694f9fe8", + "sha256:eda5c1e2a715a4cbbca2d6d304988460942551e4e5e3b7457b50943cd741626d", + "sha256:f5c0ed12926dec1dfe7d645333ea59cf93f4d07750986a586f511c0bc61fe103", + "sha256:f6016bd950be4dcd047b7475fdf55fb1e1f59fc7403f387be0e8123e4a576d30", + "sha256:f9e0057a509e096e47c87f753136c9b10d7a91842d8042c2ee6866899a717c0d", + "sha256:fc1c892b1ec1f8cbd5da8de287577b455e388d9c328ad592eabbdcb6fc93bee5", + "sha256:fc2c1e1b00f88317d9de6b2c2b39b012ebbfe35fe5e7bef980fd2a91f6100a07", + "sha256:fd822f019ccccd75c832deb7aa040bb02d70a92eb15a2f16c7987b7ad4ee8d83" ], "markers": "python_version >= '3.9'", - "version": "==0.23.1" + "version": "==0.24.0" }, "six": { "hashes": [ @@ -1492,66 +1730,66 @@ }, "sqlalchemy": { "hashes": [ - "sha256:018ee97c558b499b58935c5a152aeabf6d36b3d55d91656abeb6d93d663c0c4c", - "sha256:01da15490c9df352fbc29859d3c7ba9cd1377791faeeb47c100832004c99472c", - "sha256:04545042969833cb92e13b0a3019549d284fd2423f318b6ba10e7aa687690a3c", - "sha256:06205eb98cb3dd52133ca6818bf5542397f1dd1b69f7ea28aa84413897380b06", - "sha256:08cf721bbd4391a0e765fe0fe8816e81d9f43cece54fdb5ac465c56efafecb3d", - "sha256:0d7e3866eb52d914aea50c9be74184a0feb86f9af8aaaa4daefe52b69378db0b", - "sha256:125a7763b263218a80759ad9ae2f3610aaf2c2fbbd78fff088d584edf81f3782", - "sha256:23c5aa33c01bd898f879db158537d7e7568b503b15aad60ea0c8da8109adf3e7", - "sha256:2600a50d590c22d99c424c394236899ba72f849a02b10e65b4c70149606408b5", - "sha256:2d7332868ce891eda48896131991f7f2be572d65b41a4050957242f8e935d5d7", - "sha256:2ed107331d188a286611cea9022de0afc437dd2d3c168e368169f27aa0f61338", - "sha256:3395e7ed89c6d264d38bea3bfb22ffe868f906a7985d03546ec7dc30221ea980", - "sha256:344cd1ec2b3c6bdd5dfde7ba7e3b879e0f8dd44181f16b895940be9b842fd2b6", - "sha256:34d5c49f18778a3665d707e6286545a30339ad545950773d43977e504815fa70", - "sha256:35e72518615aa5384ef4fae828e3af1b43102458b74a8c481f69af8abf7e802a", - "sha256:3eb14ba1a9d07c88669b7faf8f589be67871d6409305e73e036321d89f1d904e", - "sha256:412c6c126369ddae171c13987b38df5122cb92015cba6f9ee1193b867f3f1530", - "sha256:4600c7a659d381146e1160235918826c50c80994e07c5b26946a3e7ec6c99249", - "sha256:463ecfb907b256e94bfe7bcb31a6d8c7bc96eca7cbe39803e448a58bb9fcad02", - "sha256:4a06e6c8e31c98ddc770734c63903e39f1947c9e3e5e4bef515c5491b7737dde", - "sha256:4b2de1523d46e7016afc7e42db239bd41f2163316935de7c84d0e19af7e69538", - "sha256:4dabd775fd66cf17f31f8625fc0e4cfc5765f7982f94dc09b9e5868182cb71c0", - "sha256:4eff9c270afd23e2746e921e80182872058a7a592017b2713f33f96cc5f82e32", - "sha256:52607d0ebea43cf214e2ee84a6a76bc774176f97c5a774ce33277514875a718e", - "sha256:533e0f66c32093a987a30df3ad6ed21170db9d581d0b38e71396c49718fbb1ca", - "sha256:5493a8120d6fc185f60e7254fc056a6742f1db68c0f849cfc9ab46163c21df47", - "sha256:5d2d1fe548def3267b4c70a8568f108d1fed7cbbeccb9cc166e05af2abc25c22", - "sha256:5dfbc543578058c340360f851ddcecd7a1e26b0d9b5b69259b526da9edfa8875", - "sha256:66a40003bc244e4ad86b72abb9965d304726d05a939e8c09ce844d27af9e6d37", - "sha256:67de057fbcb04a066171bd9ee6bcb58738d89378ee3cabff0bffbf343ae1c787", - "sha256:6827f8c1b2f13f1420545bd6d5b3f9e0b85fe750388425be53d23c760dcf176b", - "sha256:6b35e07f1d57b79b86a7de8ecdcefb78485dab9851b9638c2c793c50203b2ae8", - "sha256:7399d45b62d755e9ebba94eb89437f80512c08edde8c63716552a3aade61eb42", - "sha256:788b6ff6728072b313802be13e88113c33696a9a1f2f6d634a97c20f7ef5ccce", - "sha256:78f1b79132a69fe8bd6b5d91ef433c8eb40688ba782b26f8c9f3d2d9ca23626f", - "sha256:79f4f502125a41b1b3b34449e747a6abfd52a709d539ea7769101696bdca6716", - "sha256:7a8517b6d4005facdbd7eb4e8cf54797dbca100a7df459fdaff4c5123265c1cd", - "sha256:7bd5c5ee1448b6408734eaa29c0d820d061ae18cb17232ce37848376dcfa3e92", - "sha256:7f5243357e6da9a90c56282f64b50d29cba2ee1f745381174caacc50d501b109", - "sha256:805cb481474e111ee3687c9047c5f3286e62496f09c0e82e8853338aaaa348f8", - "sha256:871f55e478b5a648c08dd24af44345406d0e636ffe021d64c9b57a4a11518304", - "sha256:87a1ce1f5e5dc4b6f4e0aac34e7bb535cb23bd4f5d9c799ed1633b65c2bcad8c", - "sha256:8a10ca7f8a1ea0fd5630f02feb055b0f5cdfcd07bb3715fc1b6f8cb72bf114e4", - "sha256:995c2bacdddcb640c2ca558e6760383dcdd68830160af92b5c6e6928ffd259b4", - "sha256:9f03143f8f851dd8de6b0c10784363712058f38209e926723c80654c1b40327a", - "sha256:a1c6b0a5e3e326a466d809b651c63f278b1256146a377a528b6938a279da334f", - "sha256:a28f9c238f1e143ff42ab3ba27990dfb964e5d413c0eb001b88794c5c4a528a9", - "sha256:b2cf5b5ddb69142511d5559c427ff00ec8c0919a1e6c09486e9c32636ea2b9dd", - "sha256:b761a6847f96fdc2d002e29e9e9ac2439c13b919adfd64e8ef49e75f6355c548", - "sha256:bf555f3e25ac3a70c67807b2949bfe15f377a40df84b71ab2c58d8593a1e036e", - "sha256:c08a972cbac2a14810463aec3a47ff218bb00c1a607e6689b531a7c589c50723", - "sha256:c457a38351fb6234781d054260c60e531047e4d07beca1889b558ff73dc2014b", - "sha256:c4c433f78c2908ae352848f56589c02b982d0e741b7905228fad628999799de4", - "sha256:d9f119e7736967c0ea03aff91ac7d04555ee038caf89bb855d93bbd04ae85b41", - "sha256:e6b0a1c7ed54a5361aaebb910c1fa864bae34273662bb4ff788a527eafd6e14d", - "sha256:f2bcb085faffcacf9319b1b1445a7e1cfdc6fb46c03f2dce7bc2d9a4b3c1cdc5", - "sha256:fe193d3ae297c423e0e567e240b4324d6b6c280a048e64c77a3ea6886cc2aa87" + "sha256:00a494ea6f42a44c326477b5bee4e0fc75f6a80c01570a32b57e89cf0fbef85a", + "sha256:0bb933a650323e476a2e4fbef8997a10d0003d4da996aad3fd7873e962fdde4d", + "sha256:110179728e442dae85dd39591beb74072ae4ad55a44eda2acc6ec98ead80d5f2", + "sha256:15d08d5ef1b779af6a0909b97be6c1fd4298057504eb6461be88bd1696cb438e", + "sha256:16d325ea898f74b26ffcd1cf8c593b0beed8714f0317df2bed0d8d1de05a8f26", + "sha256:1abb387710283fc5983d8a1209d9696a4eae9db8d7ac94b402981fe2fe2e39ad", + "sha256:1ffdf9c91428e59744f8e6f98190516f8e1d05eec90e936eb08b257332c5e870", + "sha256:2be94d75ee06548d2fc591a3513422b873490efb124048f50556369a834853b0", + "sha256:2cbafc8d39ff1abdfdda96435f38fab141892dc759a2165947d1a8fffa7ef596", + "sha256:2ee5f9999a5b0e9689bed96e60ee53c3384f1a05c2dd8068cc2e8361b0df5b7a", + "sha256:32587e2e1e359276957e6fe5dad089758bc042a971a8a09ae8ecf7a8fe23d07a", + "sha256:35904d63412db21088739510216e9349e335f142ce4a04b69e2528020ee19ed4", + "sha256:37a5c21ab099a83d669ebb251fddf8f5cee4d75ea40a5a1653d9c43d60e20867", + "sha256:37f7a0f506cf78c80450ed1e816978643d3969f99c4ac6b01104a6fe95c5490a", + "sha256:46628ebcec4f23a1584fb52f2abe12ddb00f3bb3b7b337618b80fc1b51177aff", + "sha256:4a4c5a2905a9ccdc67a8963e24abd2f7afcd4348829412483695c59e0af9a705", + "sha256:4aeb939bcac234b88e2d25d5381655e8353fe06b4e50b1c55ecffe56951d18c2", + "sha256:50f5885bbed261fc97e2e66c5156244f9704083a674b8d17f24c72217d29baf5", + "sha256:519624685a51525ddaa7d8ba8265a1540442a2ec71476f0e75241eb8263d6f51", + "sha256:5434223b795be5c5ef8244e5ac98056e290d3a99bdcc539b916e282b160dda00", + "sha256:55028d7a3ebdf7ace492fab9895cbc5270153f75442a0472d8516e03159ab364", + "sha256:5654d1ac34e922b6c5711631f2da497d3a7bffd6f9f87ac23b35feea56098011", + "sha256:574aea2c54d8f1dd1699449f332c7d9b71c339e04ae50163a3eb5ce4c4325ee4", + "sha256:5cfa124eda500ba4b0d3afc3e91ea27ed4754e727c7f025f293a22f512bcd4c9", + "sha256:5ea9181284754d37db15156eb7be09c86e16e50fbe77610e9e7bee09291771a1", + "sha256:641ee2e0834812d657862f3a7de95e0048bdcb6c55496f39c6fa3d435f6ac6ad", + "sha256:650490653b110905c10adac69408380688cefc1f536a137d0d69aca1069dc1d1", + "sha256:6959738971b4745eea16f818a2cd086fb35081383b078272c35ece2b07012716", + "sha256:6cfedff6878b0e0d1d0a50666a817ecd85051d12d56b43d9d425455e608b5ba0", + "sha256:7e0505719939e52a7b0c65d20e84a6044eb3712bb6f239c6b1db77ba8e173a37", + "sha256:8b6b28d303b9d57c17a5164eb1fd2d5119bb6ff4413d5894e74873280483eeb5", + "sha256:8bb131ffd2165fae48162c7bbd0d97c84ab961deea9b8bab16366543deeab625", + "sha256:915866fd50dd868fdcc18d61d8258db1bf9ed7fbd6dfec960ba43365952f3b01", + "sha256:9408fd453d5f8990405cc9def9af46bfbe3183e6110401b407c2d073c3388f47", + "sha256:957f8d85d5e834397ef78a6109550aeb0d27a53b5032f7a57f2451e1adc37e98", + "sha256:9c7a80ed86d6aaacb8160a1caef6680d4ddd03c944d985aecee940d168c411d1", + "sha256:9d3b31d0a1c44b74d3ae27a3de422dfccd2b8f0b75e51ecb2faa2bf65ab1ba0d", + "sha256:a669cbe5be3c63f75bcbee0b266779706f1a54bcb1000f302685b87d1b8c1500", + "sha256:a8aae085ea549a1eddbc9298b113cffb75e514eadbb542133dd2b99b5fb3b6af", + "sha256:ae9597cab738e7cc823f04a704fb754a9249f0b6695a6aeb63b74055cd417a96", + "sha256:afe63b208153f3a7a2d1a5b9df452b0673082588933e54e7c8aac457cf35e758", + "sha256:b5a5bbe29c10c5bfd63893747a1bf6f8049df607638c786252cb9243b86b6706", + "sha256:baf7cee56bd552385c1ee39af360772fbfc2f43be005c78d1140204ad6148438", + "sha256:bb19e30fdae77d357ce92192a3504579abe48a66877f476880238a962e5b96db", + "sha256:bece9527f5a98466d67fb5d34dc560c4da964240d8b09024bb21c1246545e04e", + "sha256:c0cae71e20e3c02c52f6b9e9722bca70e4a90a466d59477822739dc31ac18b4b", + "sha256:c268b5100cfeaa222c40f55e169d484efa1384b44bf9ca415eae6d556f02cb08", + "sha256:c7b927155112ac858357ccf9d255dd8c044fd9ad2dc6ce4c4149527c901fa4c3", + "sha256:c884de19528e0fcd9dc34ee94c810581dd6e74aef75437ff17e696c2bfefae3e", + "sha256:cd2f75598ae70bcfca9117d9e51a3b06fe29edd972fdd7fd57cc97b4dbf3b08a", + "sha256:cf0e99cdb600eabcd1d65cdba0d3c91418fee21c4aa1d28db47d095b1064a7d8", + "sha256:d827099289c64589418ebbcaead0145cd19f4e3e8a93919a0100247af245fa00", + "sha256:e8040680eaacdce4d635f12c55c714f3d4c7f57da2bc47a01229d115bd319191", + "sha256:f0fda83e113bb0fb27dc003685f32a5dcb99c9c4f41f4fa0838ac35265c23b5c", + "sha256:f1ea21bef99c703f44444ad29c2c1b6bd55d202750b6de8e06a955380f4725d7", + "sha256:f6bacab7514de6146a1976bc56e1545bee247242fab030b89e5f70336fc0003e", + "sha256:fe147fcd85aaed53ce90645c91ed5fca0cc88a797314c70dfd9d35925bd5d106" ], "markers": "python_version >= '3.7'", - "version": "==2.0.39" + "version": "==2.0.40" }, "sqlalchemy-utils": { "hashes": [ @@ -1595,19 +1833,27 @@ }, "typing-extensions": { "hashes": [ - "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", - "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" + "sha256:0a4ac55a5820789d87e297727d229866c9650f6521b64206413c4fbada24d95b", + "sha256:c8dd92cc0d6425a97c18fbb9d1954e5ff92c1ca881a309c45f06ebc0b79058e5" ], "markers": "python_version >= '3.8'", - "version": "==4.12.2" + "version": "==4.13.0" + }, + "typing-inspection": { + "hashes": [ + "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f", + "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122" + ], + "markers": "python_version >= '3.9'", + "version": "==0.4.0" }, "tzdata": { "hashes": [ - "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694", - "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639" + "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", + "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9" ], "markers": "python_version >= '2'", - "version": "==2025.1" + "version": "==2025.2" }, "urllib3": { "hashes": [ @@ -1617,6 +1863,118 @@ "markers": "python_version >= '3.9'", "version": "==2.3.0" }, + "urllib3-future": { + "hashes": [ + "sha256:3adfa22c5718caee5ca69bc7f7461dc529f4396494d4d9b1db8af7c56cd3ac34", + "sha256:9cd79ce61da77b5d56681bc126f42955c2153e9c0da2f0a62bca8e0a05641f92" + ], + "markers": "python_version >= '3.7'", + "version": "==2.12.915" + }, + "verlib2": { + "hashes": [ + "sha256:2862f19528db400d130253a2b71c7c3616ee14e1d54bf6833bc0929d2cddd141", + "sha256:cf8e2be044b834a2670f2d4c20a93cfc674933c0070543a6f61d531439cca200" + ], + "markers": "python_version >= '3.6'", + "version": "==0.3.1" + }, + "wassima": { + "hashes": [ + "sha256:10508102696d5e2cf4df6942a8ae251c136a49dc32591e9c3f7dd007f5ea1c2f", + "sha256:1102836ba373912537eba891e7e5893532d4ee915ee2486e981b73f925f63c37", + "sha256:11887557464e0c3f9694fb16406bb56c1fb1566178cd04bfb5b4624fad183b31", + "sha256:12c855cc5b96a2ac32d405ab7de1563fc91be54108b4fb16b06d125d07ea892b", + "sha256:134e863b692c35afe8f5ccbe8082fa39963804e20439a4c7aa98510197034704", + "sha256:17f129f4d36591772d906bcc893b76b236363fda61b575067ddfa8250f84ad30", + "sha256:17f132ffbab294902f8740708f27fd995ea04182fe4b4fde20be563f8a010715", + "sha256:18bc78b2230c6f1f9ddbeb6ca38439fea4cc8f60836af4f3538ed259e60e5eb8", + "sha256:194c3fad38603618dec03307d10a4ece852516df56560e04fb2562506f79c175", + "sha256:1b18ec743ab98dcbfc221749026b23fc573891651342f20971e53bdbf56d28ae", + "sha256:1fa19a3652509edd18f693cd9c873d8f73c9d1624eae6c3bf93e561b18ae2766", + "sha256:24bdb1a2b90c215e11ed7ce82ed7eada339c7dca8e0366916e4e3215b3b9d8d3", + "sha256:27d518f0863788c826faf387326f3babb3ea95a0b908f5b3ad2bc1fcc3c5a37d", + "sha256:350b5854dfb3eeb95cd17723b0f3503de0c01454da5ae7d60f192be2009239eb", + "sha256:3b3a4c8ffa76147507f0c88c5cc8c76ef96ab93b81e49b288a3a0b94ebfb34af", + "sha256:3e00fa8ff1aef7d8aad2e1b957add6cba8549a42e415400bd72ff1b61dc9da9d", + "sha256:3f29045dd0a7c287f850f1dc3948632a2d2cf7dd7ec02271c5f248f058da5650", + "sha256:4a528244e4a0f9e01b8593b1c8a60ac1d80ce8b13fe079f44b38328e4be075e3", + "sha256:4c4f5ca102fd083aa2b05c65a1fd18175e3dc7a889525fd2964219ee3c51edef", + "sha256:52358d86195954816231d2aa8c2919b85075320b6d3ba5b96216985c3182bfa0", + "sha256:52f473233ec4d57322c6295e85b3912dc1fc400d6308a04bd427b863934aa74e", + "sha256:556cded582aef3089de889b5a6efcf6d87fabfec55d574fcc3a4ada21308d487", + "sha256:564eda7bf0420c8cbebe5e8efc15f1b27fdcb37ebc4c2f92b8461ca83381b223", + "sha256:57a0ab5aed596f129fd4ea7584336b11fbef25c07d1351e37a959901dea8728e", + "sha256:58f1fddd660da8c8f30f4b8460129e2f217c226cd1b54b1cabb6465881fd788a", + "sha256:597b0d8ba697f4319bc1f301ed31630ca783c9fe82d2a2434dd2f7f709c4e394", + "sha256:5b194f0de77a4ae7bcf217a3ccd10798e94ca430cec6307628098a61cd2ac230", + "sha256:5f5ee564f4b836ed1b70ddb187c817e8f6f1ffb521a636bb20676f07b523396b", + "sha256:601f96340e4c8071994a39a76d4278e8e1d087cf385781dba795c5334262d865", + "sha256:61bfa09f38c36f1b1e6e44e7af888bb8f9d739e86099082a3b45875651a425e2", + "sha256:67fd323b8ad0e057c06b153983d8c50f812aad979ac89b07ed6952c345f6da02", + "sha256:69cb51f629d118256da3d2373575190c7e30d3fa67c344dc655f6c8ab3e83f0d", + "sha256:6b1d7ceeede8d8eed48616d2d33ed23d2dff307d0b17c577eafdadafe86a0478", + "sha256:6b7d696155ddd7ab5739ac221e8854115d0d8171bbf805074d9484083de386aa", + "sha256:6d23e9483756b81850b82e8b7ed20fd23de22b50d6a678f765c660d4206b7ce9", + "sha256:7b0229fecc849234f2a2d11e948ac38a9bab02d201fa4d6ad43c143e18c1a66e", + "sha256:7c53050b670d702eed541503175bd5441fc4bdf3898714f8eac8c6ae9db548ac", + "sha256:7d65676f1fc138d1742f704bf490045571b9c2c48cab7d2c2076a52729c143e5", + "sha256:7db25328c40cd574e5a68ef6507c5af4d1fa2a44cb3c028ff9ca6b522f8faf32", + "sha256:83ce1b09e9eb2ae033c303b74ecc4f3186bbc0897db1d8cd9942153b0631b8e0", + "sha256:86c509900cbb90b7b75155c580b22af591b696fa059059bcdbd75bc74179df85", + "sha256:87f80d0075f0d396b73d41bb1626a2dd5607e0db4b74cb17e55d874fcd538971", + "sha256:8b719755d556649f2fbf226cf1ca8581ade114751df1facec96f94e75bffdb3c", + "sha256:8e739d4192758df6e5363791f527deb91c615d63020ee8965df4bcd1a217f9a5", + "sha256:923d3bf8770dfeb3d94bdfee1c5b5a081592de69766436a395e1e6203c19cf71", + "sha256:97772bb55cb47da3de49ca4b59309a9bd91ead730a7cfac1992932486fb41352", + "sha256:98bdfdf734144277132f34f770eeb6b0db2c4de87415f34b178adee766632f24", + "sha256:98f38b1b01e6f270b9279d76261d6f222b72ef06b025cbd4911b962bb6de4c98", + "sha256:99318b5ea78843e3c3e19cd56367216774674a99848f00a6f2dcf84e36039641", + "sha256:9c623ef06876d432dc8acc93ed3494d3453333d767b1b06bba1a016ea9d850c9", + "sha256:9d0f9720dfd0155432d23bcc3605fe5831cd0f586ede4f14ff6f3bebe8fb867a", + "sha256:9e79216760faac6395bee8ca4077a53a309312faba0f71982127ad8625861780", + "sha256:a470c908fd9baaecf41715ea3c30c57b530d598ae5e9de7e0bd532755e66bb1b", + "sha256:a634b9b79e059f45a56ff3ef6e7241662bc6f0e5a096ee6eed6770ea368e8278", + "sha256:acd8195a53d0e84ea95bdf15a2651c53b829a3ddead21b4a620b6a0c5e1ae2ff", + "sha256:addbd207df3718fc9d9de5b6c90a5e3fbe667830cf629186c9fdcafbb6578cb4", + "sha256:ae2aec9d55e108ae2d22fd0bda24450a6c13c116f9698b9e7ba2c6492c4fe715", + "sha256:af6b70ca9788964c5da5b59ca412b62db2ea7f2386a91c0117667bdd963e828c", + "sha256:afa7d60a9203db36a55b6f2868da90aaa829ab415a21fba7fa75678789aeb16f", + "sha256:b08c1931c44e3c034e645f3e3a7f4c47e8b0758fb8f09a52d1e880a307a1066f", + "sha256:b22e356914e606ff398c002b9925df4454c5deca9dbe55b3ba4a5c9b2365cf0f", + "sha256:b8c0f50397c51086df941b48057c82f85d9da000bf4fe6f4bc64c4f649b26a5b", + "sha256:bc068bcd79fe017866f536e0ad9424793220be34e3124476e17e6cb77a97e690", + "sha256:bc30f5a605a366acb7f301b3421508eaec3c1a515c960791bd776cb63d016302", + "sha256:c0d246b3f8a771578279eab9cfcb820dedefd3dd5dc0e34b37a337fe46271fc0", + "sha256:c0fee0a8593028bde17b57527b1ac21fea74f209b3522363e3ba0197ffaa6323", + "sha256:c139d5b103bb1f085d8918815d62ad946224a658ac1a7cc1b93dc44bd498ff9a", + "sha256:c25235cec12c0e38b4104268e312c9c2f3527ebc126d296cff69ea7aa13434dc", + "sha256:c7429d038dc383966c692e752010cbb4d5dab0e515f231aa01cd746aed9db359", + "sha256:c85cd2e64967c0dce2927ad7c62c090aae6d6b7f9e3a6b9fb91f58b890ea6adc", + "sha256:ca04984df012020dd846599b8555666c544982c2a91dc6135565e6708624eb71", + "sha256:cb7d43c07d58ba13736e70dc3e064496efeb1ed4475a28afb26b7a3b030b89df", + "sha256:d018e05cb61eed3050d45bd0c0ef9b75420899f6ae254e68e7f2ef26975098c9", + "sha256:d24d42881eb74729b34014e2e87f3a4d0419c43db309de2dff3f39118716865f", + "sha256:d6e17f218af856ca22c30d1a1ac58b19bccf768b8589eb8d6e45e1f1ff258404", + "sha256:d855d0be1759c5efc404c04977ee48a8b6260aef6441e72c10973924dbde5a73", + "sha256:dea0dcc0e50978ef73be8cb384694b71a6e64b46847ee7decad96dc85fbf650c", + "sha256:e1e9228049cf2442ac486a03a0d543c5dff3089a915a3e39ab809b22672e1d76", + "sha256:e26d052a248d5be2257d848d6078d932cc1fd4e8226639f550344d0a7a2b8813", + "sha256:ee6ccb8197936a308a4034c90a42b30b37c46b7cbda66101d439d6983f59b368", + "sha256:eea9c37b45e73cebb4670afd1779db138eeff0f84ffc0871d2fb90c04c8d3aa8", + "sha256:f195bf641276261e6bc5f79f52601850c9bdbff8af401483b4805dbff535ed30", + "sha256:f264827618400ebeab16708c8acf7870f693b03bfb4d7e95253eb9b35074db5c", + "sha256:f44ccd2eaa433ff1a10f70242dc33315fc192b81664696154127bdd66ad7d3b2", + "sha256:f7a6068d8857c403e105e62132a00e9d9d401bd0efbff7f8b5b5bc8ab768a2d8", + "sha256:f9886176fe4bf1ac008c02adb5bd103f1191799f1897777d203ee44f615325a5", + "sha256:fa1f38d5583d283b40f998e2f13471bfa952e0c423ff95ec2ec329f3e1898107", + "sha256:fa65494e7bd0e3ba33b3e5a5ab30c2b6e95d3d1762baaa56151a0861618dc261", + "sha256:fd7186e23963714bab3c9a2ab75d002078335110d2c9fc883c65cbce43717f26", + "sha256:fec32c22b521fcdeb9aa7dee4373b2d81ca2d3fc8edc532f3e189d6f4f6f1f81" + ], + "markers": "python_version >= '3.7'", + "version": "==1.2.2" + }, "werkzeug": { "hashes": [ "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", @@ -1908,73 +2266,73 @@ }, "coverage": { "hashes": [ - "sha256:056d3017ed67e7ddf266e6f57378ece543755a4c9231e997789ab3bd11392c94", - "sha256:0ce8cf59e09d31a4915ff4c3b94c6514af4c84b22c4cc8ad7c3c546a86150a92", - "sha256:104bf640f408f4e115b85110047c7f27377e1a8b7ba86f7db4fa47aa49dc9a8e", - "sha256:1393e5aa9441dafb0162c36c8506c648b89aea9565b31f6bfa351e66c11bcd82", - "sha256:1586ad158523f4133499a4f322b230e2cfef9cc724820dbd58595a5a236186f4", - "sha256:180e3fc68ee4dc5af8b33b6ca4e3bb8aa1abe25eedcb958ba5cff7123071af68", - "sha256:1b336d06af14f8da5b1f391e8dec03634daf54dfcb4d1c4fb6d04c09d83cef90", - "sha256:1c8fbce80b2b8bf135d105aa8f5b36eae0c57d702a1cc3ebdea2a6f03f6cdde5", - "sha256:2d673e3add00048215c2cc507f1228a7523fd8bf34f279ac98334c9b07bd2656", - "sha256:316f29cc3392fa3912493ee4c83afa4a0e2db04ff69600711f8c03997c39baaa", - "sha256:33c1394d8407e2771547583b66a85d07ed441ff8fae5a4adb4237ad39ece60db", - "sha256:37cbc7b0d93dfd133e33c7ec01123fbb90401dce174c3b6661d8d36fb1e30608", - "sha256:39abcacd1ed54e2c33c54bdc488b310e8ef6705833f7148b6eb9a547199d375d", - "sha256:3ab7090f04b12dc6469882ce81244572779d3a4b67eea1c96fb9ecc8c607ef39", - "sha256:3b0e6e54591ae0d7427def8a4d40fca99df6b899d10354bab73cd5609807261c", - "sha256:416e2a8845eaff288f97eaf76ab40367deafb9073ffc47bf2a583f26b05e5265", - "sha256:4545485fef7a8a2d8f30e6f79ce719eb154aab7e44217eb444c1d38239af2072", - "sha256:4c124025430249118d018dcedc8b7426f39373527c845093132196f2a483b6dd", - "sha256:4fbb7a0c3c21908520149d7751cf5b74eb9b38b54d62997b1e9b3ac19a8ee2fe", - "sha256:52fc89602cde411a4196c8c6894afb384f2125f34c031774f82a4f2608c59d7d", - "sha256:55143aa13c49491f5606f05b49ed88663446dce3a4d3c5d77baa4e36a16d3573", - "sha256:57f3bd0d29bf2bd9325c0ff9cc532a175110c4bf8f412c05b2405fd35745266d", - "sha256:5b2f144444879363ea8834cd7b6869d79ac796cb8f864b0cfdde50296cd95816", - "sha256:5efdeff5f353ed3352c04e6b318ab05c6ce9249c25ed3c2090c6e9cadda1e3b2", - "sha256:60e6347d1ed882b1159ffea172cb8466ee46c665af4ca397edbf10ff53e9ffaf", - "sha256:693d921621a0c8043bfdc61f7d4df5ea6d22165fe8b807cac21eb80dd94e4bbd", - "sha256:708f0a1105ef2b11c79ed54ed31f17e6325ac936501fc373f24be3e6a578146a", - "sha256:70f0925c4e2bfc965369f417e7cc72538fd1ba91639cf1e4ef4b1a6b50439b3b", - "sha256:7789e700f33f2b133adae582c9f437523cd5db8de845774988a58c360fc88253", - "sha256:7b6c96d69928a3a6767fab8dc1ce8a02cf0156836ccb1e820c7f45a423570d98", - "sha256:7d2a65876274acf544703e943c010b60bd79404e3623a1e5d52b64a6e2728de5", - "sha256:7f18d47641282664276977c604b5a261e51fefc2980f5271d547d706b06a837f", - "sha256:89078312f06237417adda7c021c33f80f7a6d2db8572a5f6c330d89b080061ce", - "sha256:8c938c6ae59be67ac19a7204e079efc94b38222cd7d0269f96e45e18cddeaa59", - "sha256:8e336b56301774ace6be0017ff85c3566c556d938359b61b840796a0202f805c", - "sha256:a0a207c87a9f743c8072d059b4711f8d13c456eb42dac778a7d2e5d4f3c253a7", - "sha256:a2454b12a3f12cc4698f3508912e6225ec63682e2ca5a96f80a2b93cef9e63f3", - "sha256:a538a23119d1e2e2ce077e902d02ea3d8e0641786ef6e0faf11ce82324743944", - "sha256:aa4dff57fc21a575672176d5ab0ef15a927199e775c5e8a3d75162ab2b0c7705", - "sha256:ad0edaa97cb983d9f2ff48cadddc3e1fb09f24aa558abeb4dc9a0dbacd12cbb4", - "sha256:ae8006772c6b0fa53c33747913473e064985dac4d65f77fd2fdc6474e7cd54e4", - "sha256:b0fac2088ec4aaeb5468b814bd3ff5e5978364bfbce5e567c44c9e2854469f6c", - "sha256:b3e212a894d8ae07fde2ca8b43d666a6d49bbbddb10da0f6a74ca7bd31f20054", - "sha256:b54a1ee4c6f1905a436cbaa04b26626d27925a41cbc3a337e2d3ff7038187f07", - "sha256:b667b91f4f714b17af2a18e220015c941d1cf8b07c17f2160033dbe1e64149f0", - "sha256:b8c36093aca722db73633cf2359026ed7782a239eb1c6db2abcff876012dc4cf", - "sha256:bb356e7ae7c2da13f404bf8f75be90f743c6df8d4607022e759f5d7d89fe83f8", - "sha256:bce730d484038e97f27ea2dbe5d392ec5c2261f28c319a3bb266f6b213650135", - "sha256:c075d167a6ec99b798c1fdf6e391a1d5a2d054caffe9593ba0f97e3df2c04f0e", - "sha256:c4e09534037933bf6eb31d804e72c52ec23219b32c1730f9152feabbd7499463", - "sha256:c5f8a5364fc37b2f172c26a038bc7ec4885f429de4a05fc10fdcb53fb5834c5c", - "sha256:cb203c0afffaf1a8f5b9659a013f8f16a1b2cad3a80a8733ceedc968c0cf4c57", - "sha256:cc41374d2f27d81d6558f8a24e5c114580ffefc197fd43eabd7058182f743322", - "sha256:cd879d4646055a573775a1cec863d00c9ff8c55860f8b17f6d8eee9140c06166", - "sha256:d013c07061751ae81861cae6ec3a4fe04e84781b11fd4b6b4201590234b25c7b", - "sha256:d8c7524779003d59948c51b4fcbf1ca4e27c26a7d75984f63488f3625c328b9b", - "sha256:d9710521f07f526de30ccdead67e6b236fe996d214e1a7fba8b36e2ba2cd8261", - "sha256:e1ffde1d6bc2a92f9c9207d1ad808550873748ac2d4d923c815b866baa343b3f", - "sha256:e7f559c36d5cdc448ee13e7e56ed7b6b5d44a40a511d584d388a0f5d940977ba", - "sha256:f2a1e18a85bd066c7c556d85277a7adf4651f259b2579113844835ba1a74aafd", - "sha256:f32b165bf6dfea0846a9c9c38b7e1d68f313956d60a15cde5d1709fddcaf3bee", - "sha256:f5a2f71d6a91238e7628f23538c26aa464d390cbdedf12ee2a7a0fb92a24482a", - "sha256:f81fe93dc1b8e5673f33443c0786c14b77e36f1025973b85e07c70353e46882b" + "sha256:042e7841a26498fff7a37d6fda770d17519982f5b7d8bf5278d140b67b61095f", + "sha256:04bfec25a8ef1c5f41f5e7e5c842f6b615599ca8ba8391ec33a9290d9d2db3a3", + "sha256:0915742f4c82208ebf47a2b154a5334155ed9ef9fe6190674b8a46c2fb89cb05", + "sha256:18c5ae6d061ad5b3e7eef4363fb27a0576012a7447af48be6c75b88494c6cf25", + "sha256:2931f66991175369859b5fd58529cd4b73582461877ecfd859b6549869287ffe", + "sha256:2e4b6b87bb0c846a9315e3ab4be2d52fac905100565f4b92f02c445c8799e257", + "sha256:3043ba1c88b2139126fc72cb48574b90e2e0546d4c78b5299317f61b7f718b78", + "sha256:379fe315e206b14e21db5240f89dc0774bdd3e25c3c58c2c733c99eca96f1ada", + "sha256:42421e04069fb2cbcbca5a696c4050b84a43b05392679d4068acbe65449b5c64", + "sha256:4dfd9a93db9e78666d178d4f08a5408aa3f2474ad4d0e0378ed5f2ef71640cb6", + "sha256:52a523153c568d2c0ef8826f6cc23031dc86cffb8c6aeab92c4ff776e7951b28", + "sha256:554fec1199d93ab30adaa751db68acec2b41c5602ac944bb19187cb9a41a8067", + "sha256:581a40c7b94921fffd6457ffe532259813fc68eb2bdda60fa8cc343414ce3733", + "sha256:5a26c0c795c3e0b63ec7da6efded5f0bc856d7c0b24b2ac84b4d1d7bc578d676", + "sha256:5a570cd9bd20b85d1a0d7b009aaf6c110b52b5755c17be6962f8ccd65d1dbd23", + "sha256:5aaeb00761f985007b38cf463b1d160a14a22c34eb3f6a39d9ad6fc27cb73008", + "sha256:5ac46d0c2dd5820ce93943a501ac5f6548ea81594777ca585bf002aa8854cacd", + "sha256:5c8a5c139aae4c35cbd7cadca1df02ea8cf28a911534fc1b0456acb0b14234f3", + "sha256:6b8af63b9afa1031c0ef05b217faa598f3069148eeee6bb24b79da9012423b82", + "sha256:769773614e676f9d8e8a0980dd7740f09a6ea386d0f383db6821df07d0f08545", + "sha256:771eb7587a0563ca5bb6f622b9ed7f9d07bd08900f7589b4febff05f469bea00", + "sha256:77af0f6447a582fdc7de5e06fa3757a3ef87769fbb0fdbdeba78c23049140a47", + "sha256:7a3d62b3b03b4b6fd41a085f3574874cf946cb4604d2b4d3e8dca8cd570ca501", + "sha256:821f7bcbaa84318287115d54becb1915eece6918136c6f91045bb84e2f88739d", + "sha256:89b1f4af0d4afe495cd4787a68e00f30f1d15939f550e869de90a86efa7e0814", + "sha256:8a1d96e780bdb2d0cbb297325711701f7c0b6f89199a57f2049e90064c29f6bd", + "sha256:8a40fcf208e021eb14b0fac6bdb045c0e0cab53105f93ba0d03fd934c956143a", + "sha256:8f99eb72bf27cbb167b636eb1726f590c00e1ad375002230607a844d9e9a2318", + "sha256:90e7fbc6216ecaffa5a880cdc9c77b7418c1dcb166166b78dbc630d07f278cc3", + "sha256:94ec0be97723ae72d63d3aa41961a0b9a6f5a53ff599813c324548d18e3b9e8c", + "sha256:95aa6ae391a22bbbce1b77ddac846c98c5473de0372ba5c463480043a07bff42", + "sha256:96121edfa4c2dfdda409877ea8608dd01de816a4dc4a0523356067b305e4e17a", + "sha256:a1f406a8e0995d654b2ad87c62caf6befa767885301f3b8f6f73e6f3c31ec3a6", + "sha256:a321c61477ff8ee705b8a5fed370b5710c56b3a52d17b983d9215861e37b642a", + "sha256:a5761c70c017c1b0d21b0815a920ffb94a670c8d5d409d9b38857874c21f70d7", + "sha256:a9abbccd778d98e9c7e85038e35e91e67f5b520776781d9a1e2ee9d400869487", + "sha256:ad80e6b4a0c3cb6f10f29ae4c60e991f424e6b14219d46f1e7d442b938ee68a4", + "sha256:b44674870709017e4b4036e3d0d6c17f06a0e6d4436422e0ad29b882c40697d2", + "sha256:b571bf5341ba8c6bc02e0baeaf3b061ab993bf372d982ae509807e7f112554e9", + "sha256:b8194fb8e50d556d5849753de991d390c5a1edeeba50f68e3a9253fbd8bf8ccd", + "sha256:b87eb6fc9e1bb8f98892a2458781348fa37e6925f35bb6ceb9d4afd54ba36c73", + "sha256:bbb5cc845a0292e0c520656d19d7ce40e18d0e19b22cb3e0409135a575bf79fc", + "sha256:be945402e03de47ba1872cd5236395e0f4ad635526185a930735f66710e1bd3f", + "sha256:bf13d564d310c156d1c8e53877baf2993fb3073b2fc9f69790ca6a732eb4bfea", + "sha256:cf60dd2696b457b710dd40bf17ad269d5f5457b96442f7f85722bdb16fa6c899", + "sha256:d1ba00ae33be84066cfbe7361d4e04dec78445b2b88bdb734d0d1cbab916025a", + "sha256:d39fc4817fd67b3915256af5dda75fd4ee10621a3d484524487e33416c6f3543", + "sha256:d766a4f0e5aa1ba056ec3496243150698dc0481902e2b8559314368717be82b1", + "sha256:dbf364b4c5e7bae9250528167dfe40219b62e2d573c854d74be213e1e52069f7", + "sha256:dd19608788b50eed889e13a5d71d832edc34fc9dfce606f66e8f9f917eef910d", + "sha256:e013b07ba1c748dacc2a80e69a46286ff145935f260eb8c72df7185bf048f502", + "sha256:e5d2b9be5b0693cf21eb4ce0ec8d211efb43966f6657807f6859aab3814f946b", + "sha256:e5ff52d790c7e1628241ffbcaeb33e07d14b007b6eb00a19320c7b8a7024c040", + "sha256:e75a2ad7b647fd8046d58c3132d7eaf31b12d8a53c0e4b21fa9c4d23d6ee6d3c", + "sha256:e7ac22a0bb2c7c49f441f7a6d46c9c80d96e56f5a8bc6972529ed43c8b694e27", + "sha256:ed2144b8a78f9d94d9515963ed273d620e07846acd5d4b0a642d4849e8d91a0c", + "sha256:f017a61399f13aa6d1039f75cd467be388d157cd81f1a119b9d9a68ba6f2830d", + "sha256:f1d8a2a57b47142b10374902777e798784abf400a004b14f1b0b9eaf1e528ba4", + "sha256:f2d32f95922927186c6dbc8bc60df0d186b6edb828d299ab10898ef3f40052fe", + "sha256:f319bae0321bc838e205bf9e5bc28f0a3165f30c203b610f17ab5552cff90323", + "sha256:f3c38e4e5ccbdc9198aecc766cedbb134b2d89bf64533973678dfcf07effd883", + "sha256:f9983d01d7705b2d1f7a95e10bbe4091fabc03a46881a256c2787637b087003f", + "sha256:fa260de59dfb143af06dcf30c2be0b200bed2a73737a8a59248fcb9fa601ef0f" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==7.7.0" + "version": "==7.8.0" }, "idna": { "hashes": [ @@ -1986,11 +2344,11 @@ }, "iniconfig": { "hashes": [ - "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", - "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" + "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", + "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760" ], - "markers": "python_version >= '3.7'", - "version": "==2.0.0" + "markers": "python_version >= '3.8'", + "version": "==2.1.0" }, "packaging": { "hashes": [ diff --git a/dbrepo-search-service/app.py b/dbrepo-search-service/app.py index 8e26546532..1ee06add21 100644 --- a/dbrepo-search-service/app.py +++ b/dbrepo-search-service/app.py @@ -4,15 +4,13 @@ import os from json import dumps from typing import List, Any -import requests -from clients.keycloak_client import User, KeycloakClient -from clients.opensearch_client import OpenSearchClient, flatten from dbrepo.api.dto import Database, ApiError +from dbrepo.core.client.auth import User, AuthServiceClient +from dbrepo.core.client.search import SearchServiceClient, flatten from flasgger import LazyJSONEncoder, Swagger, swag_from from flask import Flask, request, Response from flask_cors import CORS from flask_httpauth import HTTPTokenAuth, HTTPBasicAuth, MultiAuth -from jwt.exceptions import JWTDecodeError from opensearchpy import NotFoundError from prometheus_flask_exporter import PrometheusMetrics from pydantic import ValidationError @@ -135,7 +133,24 @@ template = { "type": "object" } } - } + }, + "ApiError": { + "properties": { + "message": { + "example": "Message", + "type": "string" + }, + "status": { + "example": "BAD_REQUEST", + "type": "string" + }, + "code": { + "example": "error.dashboard.create", + "type": "string" + } + }, + "type": "object" + }, }, "securitySchemes": { "bearerAuth": { @@ -154,7 +169,7 @@ template = { "info": { "title": "Database Repository Search Service API", "description": "Service that searches the search database", - "version": "1.5", + "version": "1.8.0", "contact": { "name": "Prof. Andreas Rauber", "email": "andreas.rauber@tuwien.ac.at" @@ -166,7 +181,7 @@ template = { }, "externalDocs": { "description": "Sourcecode Documentation", - "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.5/" + "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.7/" }, "servers": [ { @@ -185,7 +200,7 @@ app.config["METADATA_SERVICE_ENDPOINT"] = os.getenv("METADATA_SERVICE_ENDPOINT", app.config["JWT_ALGORITHM"] = "HS256" app.config["JWT_PUBKEY"] = '-----BEGIN PUBLIC KEY-----\n' + os.getenv("JWT_PUBKEY", "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB") + '\n-----END PUBLIC KEY-----' -app.config["AUTH_SERVICE_ENDPOINT"] = os.getenv("AUTH_SERVICE_ENDPOINT", "http://auth-service:8080") +app.config["AUTH_SERVICE_ENDPOINT"] = os.getenv("AUTH_SERVICE_ENDPOINT", "http://localhost:8080") app.config["AUTH_SERVICE_CLIENT"] = os.getenv("AUTH_SERVICE_CLIENT", "dbrepo-client") app.config["AUTH_SERVICE_CLIENT_SECRET"] = os.getenv("AUTH_SERVICE_CLIENT_SECRET", "MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG") app.config["OPENSEARCH_HOST"] = os.getenv('OPENSEARCH_HOST', 'search-db') @@ -195,41 +210,31 @@ app.config["OPENSEARCH_PASSWORD"] = os.getenv('OPENSEARCH_PASSWORD', 'admin') app.json_encoder = LazyJSONEncoder +auth_client = AuthServiceClient(app.config["AUTH_SERVICE_ENDPOINT"], app.config["AUTH_SERVICE_CLIENT"], + app.config["AUTH_SERVICE_CLIENT_SECRET"], app.config["JWT_PUBKEY"]) + @token_auth.verify_token def verify_token(token: str) -> bool | User: - if token is None or token == "": - return False - try: - client = KeycloakClient() - return client.verify_jwt(access_token=token) - except JWTDecodeError: - return False + return auth_client.is_valid_token(token) @basic_auth.verify_password def verify_password(username: str, password: str) -> Any: - if username is None or username == "" or password is None or password == "": - return False - client = KeycloakClient() - try: - return client.verify_jwt(access_token=client.obtain_user_token(username=username, password=password)) - except AssertionError as error: - logging.error(error) - return False - except requests.exceptions.ConnectionError as error: - logging.error(f"Failed to connect to Authentication Service {error}") - return False + return auth_client.is_valid_password(username, password) @token_auth.get_user_roles def get_user_roles(user: User) -> List[str]: - return user.roles + return auth_client.get_user_roles(user) @basic_auth.get_user_roles def get_user_roles(user: User) -> List[str]: - return user.roles + return auth_client.get_user_roles(user) + + +headers = {'Content-Type': 'application/json'} def general_filter(index, results): @@ -264,9 +269,14 @@ def general_filter(index, results): return results +def search_client(): + return SearchServiceClient(app.config["OPENSEARCH_HOST"], int(app.config["OPENSEARCH_PORT"]), + app.config["OPENSEARCH_USERNAME"], app.config["OPENSEARCH_PASSWORD"]) + + @app.route("/health", methods=["GET"], endpoint="actuator_health") def health(): - return dict({"status": "UP"}), 200 + return dict({"status": "UP"}), 200, headers @app.route("/api/search/<string:index>", methods=["GET"], endpoint="search_get_index") @@ -279,7 +289,7 @@ def get_index(index: str): :return: list of the results """ logging.debug(f'endpoint get search type: {index}') - results = OpenSearchClient().query_index_by_term_opensearch("*", "contains") + results = search_client().query_index_by_term_opensearch("*", "contains") try: results = general_filter(index, results) @@ -287,10 +297,10 @@ def get_index(index: str): max_pages = math.ceil(len(results) / results_per_page) page = min(request.args.get("page", 1, type=int), max_pages) results = results[(results_per_page * (page - 1)): (results_per_page * page)] - return Response(dumps(results, default=pydantic_encoder)), 200, {'Content-Type': 'application/json'} + return Response(dumps(results, default=pydantic_encoder)), 200, headers except KeyError: return ApiError(status='NOT_FOUND', message=f'Failed to find get index: {index}', - code='search.index.missing').model_dump(), 404 + code='search.index.missing').model_dump(), 404, headers @app.route("/api/search/<string:field_type>/fields", methods=["GET"], endpoint="search_get_index_fields") @@ -304,12 +314,12 @@ def get_fields(field_type: str): """ logging.debug(f'endpoint get search type fields: {field_type}') try: - fields = OpenSearchClient().get_fields_for_index(field_type) + fields = search_client().get_fields_for_index(field_type) logging.debug(f'get fields for field_type {field_type} resulted in {len(fields)} field(s)') - return Response(dumps(fields, default=pydantic_encoder)), 200, {'Content-Type': 'application/json'} + return Response(dumps(fields, default=pydantic_encoder)), 200, headers except NotFoundError: return ApiError(status='NOT_FOUND', message=f'Failed to find fields for search type {field_type}', - code='search.type.missing').model_dump(), 404 + code='search.type.missing').model_dump(), 404, headers @app.route("/api/search", methods=["GET"], endpoint="search_fuzzy_search") @@ -326,13 +336,13 @@ def get_fuzzy_search(): return ApiError(status='BAD_REQUEST', message='Provide a search term with ?q=term', code='search.fuzzy.invalid').model_dump(), 400 logging.debug(f"search request query: {search_term}") - user_id, error, status = KeycloakClient().userId(request.headers.get('Authorization')) + user_id, error, status = auth_client.get_user_id(request.headers.get('Authorization')) if error is not None and status is not None: - return error, status - results: [Database] = OpenSearchClient().fuzzy_search(search_term=search_term, - user_id=user_id, - user_token=request.headers.get('Authorization')) - return Response(dumps(results, default=pydantic_encoder)), 200, {'Content-Type': 'application/json'} + return error, status, headers + results = search_client().fuzzy_search(search_term=search_term, + user_id=user_id, + user_token=request.headers.get('Authorization')) + return Response(dumps(results, default=pydantic_encoder)), 200, headers @app.route("/api/search/<string:field_type>", methods=["POST"], endpoint="search_post_general_search") @@ -354,16 +364,16 @@ def post_general_search(field_type): t2 = request.args.get("t2") if not str(t2).isdigit(): t2 = None - user_id, error, status = KeycloakClient().userId(request.headers.get('Authorization')) + user_id, error, status = auth_client.get_user_id(request.headers.get('Authorization')) if error is not None and status is not None: return error, status if t1 is not None and t2 is not None and "unit.uri" in value_pairs and "concept.uri" in value_pairs: - response: [Database] = OpenSearchClient().unit_independent_search(t1, t2, value_pairs, user_id) + response = search_client().unit_independent_search(t1, t2, value_pairs, user_id) else: - response: [Database] = OpenSearchClient().general_search(field_type=field_type, - field_value_pairs=value_pairs, - user_id=user_id, - user_token=request.headers.get('Authorization')) + response = search_client().general_search(field_type=field_type, + field_value_pairs=value_pairs, + user_id=user_id, + user_token=request.headers.get('Authorization')) # filter by type tables = [table for table in flatten([database.tables for database in response]) if table.is_public or table.is_schema_public or (user_id is not None and table.owner.id == user_id)] @@ -408,34 +418,34 @@ def post_general_search(field_type): response = tmp elif field_type == 'view': response = views - return Response(dumps(response, default=pydantic_encoder)), 200, {'Content-Type': 'application/json'} + return Response(dumps(response, default=pydantic_encoder)), 200, headers -@app.route("/api/search/database/<string:database_id>", methods=["PUT"], endpoint="search_put_database") -@metrics.gauge(name='dbrepo_search_update_database', +@app.route("/api/search/database/<string:database_id>", methods=["PUT"], endpoint="search_save_database") +@metrics.gauge(name='dbrepo_search_save_database', description='Time needed to update a database in the search database') @auth.login_required(role=['update-search-index']) -def update_database(database_id: str): - logging.debug(f"updating database with id: {database_id}") +def save_database(database_id: str): + logging.debug(f"save database with id: {database_id}") try: - payload: Database = Database.model_validate(request.json) + payload = Database.model_validate(request.json) except ValidationError as e: logging.error(f"Failed to validate: {e}") return ApiError(status='BAD_REQUEST', message=f'Malformed payload: {e}', code='search.general.missing').model_dump(), 400 - database = OpenSearchClient().update_database(database_id, payload) - logging.info(f"Updated database with id: {database_id}") - return database.model_dump(), 202 + search_client().save_database(database_id, payload) + return Response(), 202, headers @app.route("/api/search/database/<string:database_id>", methods=["DELETE"], endpoint="database_delete_database") @metrics.gauge(name='dbrepo_search_delete_database', description='Time needed to delete a database in the search database') -@auth.login_required(role=['admin']) +@auth.login_required(role=['system']) def delete_database(database_id: str): + logging.debug(f"delete database with id: {database_id}") try: - OpenSearchClient().delete_database(database_id) - return Response(dumps({})), 202 + search_client().delete_database(database_id) + return Response(dumps({})), 202, headers except NotFoundError: return ApiError(status='NOT_FOUND', message='Failed to find database', code='search.database.missing').model_dump(), 404 diff --git a/dbrepo-search-service/examples/database/fields_response_payload.json b/dbrepo-search-service/examples/database/fields_response_payload.json deleted file mode 100644 index 2eab729543..0000000000 --- a/dbrepo-search-service/examples/database/fields_response_payload.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "fields": [ - { - "attribute_name": "_class", - "type": "keyword" - }, - { - "attribute_name": "container", - "type": "nested" - }, - { - "attribute_name": "container.properties._class", - "type": "keyword" - }, - { - "attribute_name": "container.properties.created", - "type": "date" - }, - { - "attribute_name": "created", - "type": "date" - }, - { - "attribute_name": "creator", - "type": "nested" - }, - { - "attribute_name": "creator.properties._class", - "type": "keyword" - }, - { - "attribute_name": "description", - "type": "text" - }, - { - "attribute_name": "exchange_name", - "type": "keyword" - }, - { - "attribute_name": "id", - "type": "keyword" - }, - { - "attribute_name": "internal_name", - "type": "keyword" - }, - { - "attribute_name": "is_public", - "type": "boolean" - }, - { - "attribute_name": "name", - "type": "keyword" - }, - { - "attribute_name": "owner", - "type": "nested" - }, - { - "attribute_name": "owner.properties._class", - "type": "keyword" - } - ], - "status": 200 -} \ No newline at end of file diff --git a/dbrepo-search-service/examples/database/search_request_payload.json b/dbrepo-search-service/examples/database/search_request_payload.json deleted file mode 100644 index de7101b1b2..0000000000 --- a/dbrepo-search-service/examples/database/search_request_payload.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "database.created": "2022-05-27", - "database.description": "Some description", - "database.is_public": true, - "id": "5", - "internal_name": "test_db", - "name": "Test DB", - "search_term": "free text here", - "type": "database" -} \ No newline at end of file diff --git a/dbrepo-search-service/examples/unit/fields_response_payload.json b/dbrepo-search-service/examples/unit/fields_response_payload.json deleted file mode 100644 index e6bca5a6fe..0000000000 --- a/dbrepo-search-service/examples/unit/fields_response_payload.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "fields": [ - { - "attribute_name": "_class", - "type": "keyword" - }, - { - "attribute_name": "created", - "type": "date" - }, - { - "attribute_name": "description", - "type": "text" - }, - { - "attribute_name": "id", - "type": "keyword" - }, - { - "attribute_name": "name", - "type": "keyword" - }, - { - "attribute_name": "uri", - "type": "keyword" - } - ], - "status": 200 -} \ No newline at end of file diff --git a/dbrepo-search-service/examples/unit/search_request_payload.json b/dbrepo-search-service/examples/unit/search_request_payload.json deleted file mode 100644 index 28356ec8db..0000000000 --- a/dbrepo-search-service/examples/unit/search_request_payload.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "id": "7", - "name": "Test DB", - "search_term": "free text here", - "type": "unit", - "unit.uri": "some uri" -} \ No newline at end of file diff --git a/dbrepo-search-service/friendly_names_overrides.json b/dbrepo-search-service/friendly_names_overrides.json new file mode 100644 index 0000000000..8aca718186 --- /dev/null +++ b/dbrepo-search-service/friendly_names_overrides.json @@ -0,0 +1,18 @@ +{ + "tables.name": "Table Name", + "owner.id": "Owner ID", + "owner.username": "Owner Username", + "owner.attributes.orcid": "Owner ORCID", + "creator.orcid": "Creator ORCID", + "identifiers.doi": "DOI", + "identifiers.licenses.uri": "License URI", + "identifiers.funders.funder_identifier": "Funder PID", + "identifiers.table_id": "Table ID", + "identifiers.query_id": "Subset ID", + "identifiers.view_id": "View ID", + "identifiers.database_id": "Database ID", + "identifiers.creator.username": "Creator Username", + "is_public": "Public", + "tables.columns.concept.uri": "URI", + "tables.columns.unit.uri": "URI" +} \ No newline at end of file diff --git a/dbrepo-search-service/init/Dockerfile b/dbrepo-search-service/init/Dockerfile index b3874230bc..e61e29e080 100644 --- a/dbrepo-search-service/init/Dockerfile +++ b/dbrepo-search-service/init/Dockerfile @@ -1,9 +1,10 @@ FROM python:3.11-alpine3.21 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" -RUN apk add --no-cache curl bash jq - -WORKDIR /home/alpine +RUN apk add --no-cache \ + curl \ + bash \ + jq COPY Pipfile Pipfile.lock ./ @@ -13,12 +14,12 @@ RUN pip install pipenv && \ pipenv install gunicorn && \ pipenv install --system --deploy -USER 1001 +RUN adduser -D dbrepo --uid 1001 WORKDIR /app -COPY --chown=1001 ./clients ./clients -COPY --chown=1001 ./omlib ./omlib +USER 1001 + COPY --chown=1001 ./app.py ./app.py COPY --chown=1001 ./database.json ./database.json diff --git a/dbrepo-search-service/init/Pipfile b/dbrepo-search-service/init/Pipfile index 9f970d4c87..c28f804c8a 100644 --- a/dbrepo-search-service/init/Pipfile +++ b/dbrepo-search-service/init/Pipfile @@ -9,8 +9,9 @@ opensearch-py = "~=2.2" python-dotenv = "~=1.0" testcontainers-opensearch = "*" pytest = "*" -dbrepo = {path = "./lib/dbrepo-1.7.3.tar.gz"} +dbrepo = {path = "./lib/dbrepo-1.8.0.tar.gz"} rdflib = "*" +grafana-client = "*" [dev-packages] coverage = "*" diff --git a/dbrepo-search-service/init/Pipfile.lock b/dbrepo-search-service/init/Pipfile.lock index 55997adfc4..be7988331c 100644 --- a/dbrepo-search-service/init/Pipfile.lock +++ b/dbrepo-search-service/init/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "902ab105fecae6a9ffa50c6db24de91d2f41d0494033ffd7f3284049a9ba4add" + "sha256": "67eb310e10e744b0fdb8dae9f252a9f80529fd2fd82cd4eb586cb22fd3fa56be" }, "pipfile-spec": 6, "requires": { @@ -26,90 +26,90 @@ }, "aiohttp": { "hashes": [ - "sha256:04eb541ce1e03edc1e3be1917a0f45ac703e913c21a940111df73a2c2db11d73", - "sha256:05582cb2d156ac7506e68b5eac83179faedad74522ed88f88e5861b78740dc0e", - "sha256:0a29be28e60e5610d2437b5b2fed61d6f3dcde898b57fb048aa5079271e7f6f3", - "sha256:0b2501f1b981e70932b4a552fc9b3c942991c7ae429ea117e8fba57718cdeed0", - "sha256:0df3788187559c262922846087e36228b75987f3ae31dd0a1e5ee1034090d42f", - "sha256:12c5869e7ddf6b4b1f2109702b3cd7515667b437da90a5a4a50ba1354fe41881", - "sha256:14fc03508359334edc76d35b2821832f092c8f092e4b356e74e38419dfe7b6de", - "sha256:1a7169ded15505f55a87f8f0812c94c9412623c744227b9e51083a72a48b68a5", - "sha256:1c68e41c4d576cd6aa6c6d2eddfb32b2acfb07ebfbb4f9da991da26633a3db1a", - "sha256:20412c7cc3720e47a47e63c0005f78c0c2370020f9f4770d7fc0075f397a9fb0", - "sha256:22a8107896877212130c58f74e64b77f7007cb03cea8698be317272643602d45", - "sha256:28a3d083819741592685762d51d789e6155411277050d08066537c5edc4066e6", - "sha256:2b86efe23684b58a88e530c4ab5b20145f102916bbb2d82942cafec7bd36a647", - "sha256:2d0b46abee5b5737cb479cc9139b29f010a37b1875ee56d142aefc10686a390b", - "sha256:321238a42ed463848f06e291c4bbfb3d15ba5a79221a82c502da3e23d7525d06", - "sha256:3a8a0d127c10b8d89e69bbd3430da0f73946d839e65fec00ae48ca7916a31948", - "sha256:3a8b0321e40a833e381d127be993b7349d1564b756910b28b5f6588a159afef3", - "sha256:3b420d076a46f41ea48e5fcccb996f517af0d406267e31e6716f480a3d50d65c", - "sha256:3b512f1de1c688f88dbe1b8bb1283f7fbeb7a2b2b26e743bb2193cbadfa6f307", - "sha256:413fe39fd929329f697f41ad67936f379cba06fcd4c462b62e5b0f8061ee4a77", - "sha256:41cf0cefd9e7b5c646c2ef529c8335e7eafd326f444cc1cdb0c47b6bc836f9be", - "sha256:4848ae31ad44330b30f16c71e4f586cd5402a846b11264c412de99fa768f00f3", - "sha256:4b0a200e85da5c966277a402736a96457b882360aa15416bf104ca81e6f5807b", - "sha256:4e2e8ef37d4bc110917d038807ee3af82700a93ab2ba5687afae5271b8bc50ff", - "sha256:4edcbe34e6dba0136e4cabf7568f5a434d89cc9de5d5155371acda275353d228", - "sha256:51ba80d473eb780a329d73ac8afa44aa71dfb521693ccea1dea8b9b5c4df45ce", - "sha256:5409a59d5057f2386bb8b8f8bbcfb6e15505cedd8b2445db510563b5d7ea1186", - "sha256:572def4aad0a4775af66d5a2b5923c7de0820ecaeeb7987dcbccda2a735a993f", - "sha256:599b66582f7276ebefbaa38adf37585e636b6a7a73382eb412f7bc0fc55fb73d", - "sha256:59a05cdc636431f7ce843c7c2f04772437dd816a5289f16440b19441be6511f1", - "sha256:602d4db80daf4497de93cb1ce00b8fc79969c0a7cf5b67bec96fa939268d806a", - "sha256:65c75b14ee74e8eeff2886321e76188cbe938d18c85cff349d948430179ad02c", - "sha256:69bb252bfdca385ccabfd55f4cd740d421dd8c8ad438ded9637d81c228d0da49", - "sha256:6d3986112e34eaa36e280dc8286b9dd4cc1a5bcf328a7f147453e188f6fe148f", - "sha256:6dd9766da617855f7e85f27d2bf9a565ace04ba7c387323cd3e651ac4329db91", - "sha256:70ab0f61c1a73d3e0342cedd9a7321425c27a7067bebeeacd509f96695b875fc", - "sha256:749f1eb10e51dbbcdba9df2ef457ec060554842eea4d23874a3e26495f9e87b1", - "sha256:781c8bd423dcc4641298c8c5a2a125c8b1c31e11f828e8d35c1d3a722af4c15a", - "sha256:7e7abe865504f41b10777ac162c727af14e9f4db9262e3ed8254179053f63e6d", - "sha256:7f2dadece8b85596ac3ab1ec04b00694bdd62abc31e5618f524648d18d9dd7fa", - "sha256:86135c32d06927339c8c5e64f96e4eee8825d928374b9b71a3c42379d7437058", - "sha256:8778620396e554b758b59773ab29c03b55047841d8894c5e335f12bfc45ebd28", - "sha256:87f0e003fb4dd5810c7fbf47a1239eaa34cd929ef160e0a54c570883125c4831", - "sha256:8aa5c68e1e68fff7cd3142288101deb4316b51f03d50c92de6ea5ce646e6c71f", - "sha256:8d14e274828561db91e4178f0057a915f3af1757b94c2ca283cb34cbb6e00b50", - "sha256:8d1dd75aa4d855c7debaf1ef830ff2dfcc33f893c7db0af2423ee761ebffd22b", - "sha256:92007c89a8cb7be35befa2732b0b32bf3a394c1b22ef2dff0ef12537d98a7bda", - "sha256:92868f6512714efd4a6d6cb2bfc4903b997b36b97baea85f744229f18d12755e", - "sha256:948abc8952aff63de7b2c83bfe3f211c727da3a33c3a5866a0e2cf1ee1aa950f", - "sha256:95d7787f2bcbf7cb46823036a8d64ccfbc2ffc7d52016b4044d901abceeba3db", - "sha256:997b57e38aa7dc6caab843c5e042ab557bc83a2f91b7bd302e3c3aebbb9042a1", - "sha256:99b8bbfc8111826aa8363442c0fc1f5751456b008737ff053570f06a151650b3", - "sha256:9e73fa341d8b308bb799cf0ab6f55fc0461d27a9fa3e4582755a3d81a6af8c09", - "sha256:a0d2c04a623ab83963576548ce098baf711a18e2c32c542b62322a0b4584b990", - "sha256:a40087b82f83bd671cbeb5f582c233d196e9653220404a798798bfc0ee189fff", - "sha256:ad1f2fb9fe9b585ea4b436d6e998e71b50d2b087b694ab277b30e060c434e5db", - "sha256:b05774864c87210c531b48dfeb2f7659407c2dda8643104fb4ae5e2c311d12d9", - "sha256:b41693b7388324b80f9acfabd479bd1c84f0bc7e8f17bab4ecd9675e9ff9c734", - "sha256:b42dbd097abb44b3f1156b4bf978ec5853840802d6eee2784857be11ee82c6a0", - "sha256:b4e7c7ec4146a94a307ca4f112802a8e26d969018fabed526efc340d21d3e7d0", - "sha256:b59d096b5537ec7c85954cb97d821aae35cfccce3357a2cafe85660cc6295628", - "sha256:b9c60d1de973ca94af02053d9b5111c4fbf97158e139b14f1be68337be267be6", - "sha256:bccd2cb7aa5a3bfada72681bdb91637094d81639e116eac368f8b3874620a654", - "sha256:c32593ead1a8c6aabd58f9d7ee706e48beac796bb0cb71d6b60f2c1056f0a65f", - "sha256:c7571f99525c76a6280f5fe8e194eeb8cb4da55586c3c61c59c33a33f10cfce7", - "sha256:c8b2df9feac55043759aa89f722a967d977d80f8b5865a4153fc41c93b957efc", - "sha256:ca9f835cdfedcb3f5947304e85b8ca3ace31eef6346d8027a97f4de5fb687534", - "sha256:cc9253069158d57e27d47a8453d8a2c5a370dc461374111b5184cf2f147a3cc3", - "sha256:ced66c5c6ad5bcaf9be54560398654779ec1c3695f1a9cf0ae5e3606694a000a", - "sha256:d173c0ac508a2175f7c9a115a50db5fd3e35190d96fdd1a17f9cb10a6ab09aa1", - "sha256:d6edc538c7480fa0a3b2bdd705f8010062d74700198da55d16498e1b49549b9c", - "sha256:daf20d9c3b12ae0fdf15ed92235e190f8284945563c4b8ad95b2d7a31f331cd3", - "sha256:dc311634f6f28661a76cbc1c28ecf3b3a70a8edd67b69288ab7ca91058eb5a33", - "sha256:e2bc827c01f75803de77b134afdbf74fa74b62970eafdf190f3244931d7a5c0d", - "sha256:e365034c5cf6cf74f57420b57682ea79e19eb29033399dd3f40de4d0171998fa", - "sha256:e906da0f2bcbf9b26cc2b144929e88cb3bf943dd1942b4e5af066056875c7618", - "sha256:e9faafa74dbb906b2b6f3eb9942352e9e9db8d583ffed4be618a89bd71a4e914", - "sha256:ec6cd1954ca2bbf0970f531a628da1b1338f594bf5da7e361e19ba163ecc4f3b", - "sha256:f296d637a50bb15fb6a229fbb0eb053080e703b53dbfe55b1e4bb1c5ed25d325", - "sha256:f30fc72daf85486cdcdfc3f5e0aea9255493ef499e31582b34abadbfaafb0965", - "sha256:fe846f0a98aa9913c2852b630cd39b4098f296e0907dd05f6c7b30d911afa4c3" + "sha256:004511d3413737700835e949433536a2fe95a7d0297edd911a1e9705c5b5ea43", + "sha256:0902e887b0e1d50424112f200eb9ae3dfed6c0d0a19fc60f633ae5a57c809656", + "sha256:09b00dd520d88eac9d1768439a59ab3d145065c91a8fab97f900d1b5f802895e", + "sha256:0a2f451849e6b39e5c226803dcacfa9c7133e9825dcefd2f4e837a2ec5a3bb98", + "sha256:0a950c2eb8ff17361abd8c85987fd6076d9f47d040ebffce67dce4993285e973", + "sha256:0ad1fb47da60ae1ddfb316f0ff16d1f3b8e844d1a1e154641928ea0583d486ed", + "sha256:13ceac2c5cdcc3f64b9015710221ddf81c900c5febc505dbd8f810e770011540", + "sha256:14461157d8426bcb40bd94deb0450a6fa16f05129f7da546090cebf8f3123b0f", + "sha256:16f8a2c9538c14a557b4d309ed4d0a7c60f0253e8ed7b6c9a2859a7582f8b1b8", + "sha256:17ae4664031aadfbcb34fd40ffd90976671fa0c0286e6c4113989f78bebab37a", + "sha256:1ce63ae04719513dd2651202352a2beb9f67f55cb8490c40f056cea3c5c355ce", + "sha256:23a15727fbfccab973343b6d1b7181bfb0b4aa7ae280f36fd2f90f5476805682", + "sha256:2540ddc83cc724b13d1838026f6a5ad178510953302a49e6d647f6e1de82bc34", + "sha256:37dcee4906454ae377be5937ab2a66a9a88377b11dd7c072df7a7c142b63c37c", + "sha256:38bea84ee4fe24ebcc8edeb7b54bf20f06fd53ce4d2cc8b74344c5b9620597fd", + "sha256:3ab3367bb7f61ad18793fea2ef71f2d181c528c87948638366bf1de26e239183", + "sha256:3ad1d59fd7114e6a08c4814983bb498f391c699f3c78712770077518cae63ff7", + "sha256:3b4e6db8dc4879015b9955778cfb9881897339c8fab7b3676f8433f849425913", + "sha256:3e061b09f6fa42997cf627307f220315e313ece74907d35776ec4373ed718b86", + "sha256:42864e70a248f5f6a49fdaf417d9bc62d6e4d8ee9695b24c5916cb4bb666c802", + "sha256:493910ceb2764f792db4dc6e8e4b375dae1b08f72e18e8f10f18b34ca17d0979", + "sha256:4d0c970c0d602b1017e2067ff3b7dac41c98fef4f7472ec2ea26fd8a4e8c2149", + "sha256:54eb3aead72a5c19fad07219acd882c1643a1027fbcdefac9b502c267242f955", + "sha256:56a3443aca82abda0e07be2e1ecb76a050714faf2be84256dae291182ba59049", + "sha256:576f5ca28d1b3276026f7df3ec841ae460e0fc3aac2a47cbf72eabcfc0f102e1", + "sha256:58ede86453a6cf2d6ce40ef0ca15481677a66950e73b0a788917916f7e35a0bb", + "sha256:61c721764e41af907c9d16b6daa05a458f066015abd35923051be8705108ed17", + "sha256:634d96869be6c4dc232fc503e03e40c42d32cfaa51712aee181e922e61d74814", + "sha256:696ef00e8a1f0cec5e30640e64eca75d8e777933d1438f4facc9c0cdf288a810", + "sha256:69a2cbd61788d26f8f1e626e188044834f37f6ae3f937bd9f08b65fc9d7e514e", + "sha256:6a792ce34b999fbe04a7a71a90c74f10c57ae4c51f65461a411faa70e154154e", + "sha256:6ac13b71761e49d5f9e4d05d33683bbafef753e876e8e5a7ef26e937dd766713", + "sha256:6fdec0213244c39973674ca2a7f5435bf74369e7d4e104d6c7473c81c9bcc8c4", + "sha256:72b1b03fb4655c1960403c131740755ec19c5898c82abd3961c364c2afd59fe7", + "sha256:745f1ed5e2c687baefc3c5e7b4304e91bf3e2f32834d07baaee243e349624b24", + "sha256:776c8e959a01e5e8321f1dec77964cb6101020a69d5a94cd3d34db6d555e01f7", + "sha256:780df0d837276276226a1ff803f8d0fa5f8996c479aeef52eb040179f3156cbd", + "sha256:78e6e23b954644737e385befa0deb20233e2dfddf95dd11e9db752bdd2a294d3", + "sha256:7951decace76a9271a1ef181b04aa77d3cc309a02a51d73826039003210bdc86", + "sha256:7ba92a2d9ace559a0a14b03d87f47e021e4fa7681dc6970ebbc7b447c7d4b7cd", + "sha256:7f6428fee52d2bcf96a8aa7b62095b190ee341ab0e6b1bcf50c615d7966fd45b", + "sha256:87944bd16b7fe6160607f6a17808abd25f17f61ae1e26c47a491b970fb66d8cb", + "sha256:87a6e922b2b2401e0b0cf6b976b97f11ec7f136bfed445e16384fbf6fd5e8602", + "sha256:8cb0688a8d81c63d716e867d59a9ccc389e97ac7037ebef904c2b89334407180", + "sha256:8df6612df74409080575dca38a5237282865408016e65636a76a2eb9348c2567", + "sha256:911a6e91d08bb2c72938bc17f0a2d97864c531536b7832abee6429d5296e5b27", + "sha256:92b7ee222e2b903e0a4b329a9943d432b3767f2d5029dbe4ca59fb75223bbe2e", + "sha256:938f756c2b9374bbcc262a37eea521d8a0e6458162f2a9c26329cc87fdf06534", + "sha256:9756d9b9d4547e091f99d554fbba0d2a920aab98caa82a8fb3d3d9bee3c9ae85", + "sha256:98b88a2bf26965f2015a771381624dd4b0839034b70d406dc74fd8be4cc053e3", + "sha256:9b751a6306f330801665ae69270a8a3993654a85569b3469662efaad6cf5cc50", + "sha256:a2a450bcce4931b295fc0848f384834c3f9b00edfc2150baafb4488c27953de6", + "sha256:a3814760a1a700f3cfd2f977249f1032301d0a12c92aba74605cfa6ce9f78489", + "sha256:a5abcbba9f4b463a45c8ca8b7720891200658f6f46894f79517e6cd11f3405ca", + "sha256:a6db7458ab89c7d80bc1f4e930cc9df6edee2200127cfa6f6e080cf619eddfbd", + "sha256:ad497f38a0d6c329cb621774788583ee12321863cd4bd9feee1effd60f2ad133", + "sha256:ad9509ffb2396483ceacb1eee9134724443ee45b92141105a4645857244aecc8", + "sha256:bbcba75fe879ad6fd2e0d6a8d937f34a571f116a0e4db37df8079e738ea95c71", + "sha256:c10d85e81d0b9ef87970ecbdbfaeec14a361a7fa947118817fcea8e45335fa46", + "sha256:c15b2271c44da77ee9d822552201180779e5e942f3a71fb74e026bf6172ff287", + "sha256:ca37057625693d097543bd88076ceebeb248291df9d6ca8481349efc0b05dcd0", + "sha256:cc3a145479a76ad0ed646434d09216d33d08eef0d8c9a11f5ae5cdc37caa3540", + "sha256:ccf10f16ab498d20e28bc2b5c1306e9c1512f2840f7b6a67000a517a4b37d5ee", + "sha256:cd464ba806e27ee24a91362ba3621bfc39dbbb8b79f2e1340201615197370f7c", + "sha256:d007aa39a52d62373bd23428ba4a2546eed0e7643d7bf2e41ddcefd54519842c", + "sha256:d0666afbe984f6933fe72cd1f1c3560d8c55880a0bdd728ad774006eb4241ecd", + "sha256:d07502cc14ecd64f52b2a74ebbc106893d9a9717120057ea9ea1fd6568a747e7", + "sha256:d489d9778522fbd0f8d6a5c6e48e3514f11be81cb0a5954bdda06f7e1594b321", + "sha256:df7db76400bf46ec6a0a73192b14c8295bdb9812053f4fe53f4e789f3ea66bbb", + "sha256:e3538bc9fe1b902bef51372462e3d7c96fce2b566642512138a480b7adc9d508", + "sha256:e87fd812899aa78252866ae03a048e77bd11b80fb4878ce27c23cade239b42b2", + "sha256:ecdb8173e6c7aa09eee342ac62e193e6904923bd232e76b4157ac0bfa670609f", + "sha256:f244b8e541f414664889e2c87cac11a07b918cb4b540c36f7ada7bfa76571ea2", + "sha256:f4065145bf69de124accdd17ea5f4dc770da0a6a6e440c53f6e0a8c27b3e635c", + "sha256:f420bfe862fb357a6d76f2065447ef6f484bc489292ac91e29bc65d2d7a2c84d", + "sha256:f6ddd90d9fb4b501c97a4458f1c1720e42432c26cb76d28177c5b5ad4e332601", + "sha256:fa73e8c2656a3653ae6c307b3f4e878a21f87859a9afab228280ddccd7369d71", + "sha256:fadbb8f1d4140825069db3fedbbb843290fd5f5bc0a5dbd7eaf81d91bf1b003b", + "sha256:fb3d0cc5cdb926090748ea60172fa8a213cec728bd6c54eae18b96040fcd6227", + "sha256:fb46bb0f24813e6cede6cc07b1961d4b04f331f7112a23b5e21f567da4ee50aa", + "sha256:fd36c119c5d6551bce374fcb5c19269638f8d09862445f85a5a48596fd59f4bb" ], "markers": "python_version >= '3.9'", - "version": "==3.11.14" + "version": "==3.11.16" }, "aiosignal": { "hashes": [ @@ -259,9 +259,9 @@ }, "dbrepo": { "hashes": [ - "sha256:ad01d6dc5d99f3c0c9caf3fb11b51502bec5390c72ff28b6b725e2755f5a2f7c" + "sha256:55de6a4934010e14a574032b5a5179bf3dac9895ef74e5cd4a221a625a75674b" ], - "path": "./lib/dbrepo-1.7.3.tar.gz" + "path": "./lib/dbrepo-1.8.0.tar.gz" }, "docker": { "hashes": [ @@ -384,6 +384,23 @@ "markers": "python_version >= '3.8'", "version": "==1.5.0" }, + "grafana-client": { + "hashes": [ + "sha256:2477a47b923fd0637947e620b0b777c641af18a3025464fa4505783dbf05dfcc", + "sha256:8cb61bb2a87ec07bca10974df276b9a1a95bfdb63f3a696f065692ffc9b8c389" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==4.3.2" + }, + "h11": { + "hashes": [ + "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", + "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761" + ], + "markers": "python_version >= '3.7'", + "version": "==0.14.0" + }, "idna": { "hashes": [ "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", @@ -394,11 +411,11 @@ }, "iniconfig": { "hashes": [ - "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", - "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" + "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", + "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760" ], - "markers": "python_version >= '3.7'", - "version": "==2.0.0" + "markers": "python_version >= '3.8'", + "version": "==2.1.0" }, "itsdangerous": { "hashes": [ @@ -408,6 +425,108 @@ "markers": "python_version >= '3.8'", "version": "==2.2.0" }, + "jh2": { + "hashes": [ + "sha256:038091480cd1544e9389b0adbb1b1645a797689dcb68ceae7e45eec96ed24497", + "sha256:0c8e336df8ed1687590695f4469f480eeb4159bf13bb6193791c6530fe114b49", + "sha256:0c9bf2d5e4ef45c1686c6f76935e7ca263f5eae4de92bf5d1873a0e737e4eb7d", + "sha256:0faf6e96f74d27b8ca816b40217904891f91b664ed1c0388737949ceb50ac15d", + "sha256:10ea7f497e6226372e1d4fdbf42c8381f4887819a643ab930bff4072ad298d84", + "sha256:11650f7ed77ee1df30f25d6b3b74b2fa1c94124e074fd455abafea3cbc913d53", + "sha256:12ead3ee3e9c7caa00356b528a5cc7fe210fbe2060628af6e19ed76b8416572e", + "sha256:136b3c5b08883681fcb58f12393a5bbfa422d6e2d5ba887e263e776874276bc6", + "sha256:17d6e1691154ea9f726e43dcb717df48e56c66b5a01c90ad675c6494c36e5be1", + "sha256:19cb987915cc0d321746a12f2a693d087ffb721c37ac9a153cc088c57d4d90eb", + "sha256:1cdf15de698c4026e64fd914fead3180e52bf2a7bcbe44a3392404582dbf2d22", + "sha256:1e81e1c64e33506b8508ba5e3c7c139b2577e78b079c2c16a8e7a02a161f1080", + "sha256:2226c76e4ff2149c5d9f94bed22bf9c4f3411d38cc53d4a7ddfbe0899c8b558c", + "sha256:2837412fb7b684c6ce7392c8bc57440c6dbadaf1bde7a53144381f7df7083c1c", + "sha256:293f0f3da3c391e997e0d55fdb85540e98a8b0406622bb4ba57fb7617697f31e", + "sha256:2b9cc6c0239215a349d28c192fa4c4e7a7348eee7980531525c01bffe39eea80", + "sha256:2f3ad679f84ff236a0d7b71ddc4b3c09fe467abee2f1a86671f0cd417be5352b", + "sha256:358cad2f328c52c15756cf32b0ad17afb0d617e7cdfe93d59aa2616966d825b7", + "sha256:3663712305b509f79c002c8c0ca9994f716cadba576f5a59632dda1aec1ca8c6", + "sha256:41794820ccca039ca2ead6245f30b34601dd1456eee5b5dde620672bb989e79d", + "sha256:44b7e64aff542471c474c24f771eae5efd9152da02a12556f7cb7607020e1420", + "sha256:45770eb0990166026538d3c2fd7d92f17cfde13ca6567570c4baec3ce9162936", + "sha256:498060078a4d1b458e9381fefb027d85329397b50d65287712b3d48233e20836", + "sha256:4c2f18f337c2393f84e45e5011c8b02697b81638b1cec49da60a01b9ed067695", + "sha256:5162d6e475d2762035fb8ea25982bcbec6c58715e33bd0951499f743cd90b110", + "sha256:51e8c890bb59008c95b3a552cefd8bd9ce50a7466a6c920a78cf586e885d7449", + "sha256:56ad3839ac6ac5fd3d023cf59d4b04264b74bb4cb44c0780faf51d6b5ff38fbc", + "sha256:5821638ef0d7c973071810a6786f59b305172197f7e7e469a2ce169e7f4978e3", + "sha256:5ac1b2d379f4d40c13dcce537e69704452943cddbe991fd54a84fdb2da9026d5", + "sha256:5b465d4311b0429fe6fa85df8e2cfcb038c9fface95396dd14e838ecabaaadf2", + "sha256:5d8656b98057329bd03d968aac8d5198389cf51517511295cfc4cb827a507e39", + "sha256:5dcfb3e823ef4b91b70b92848570d1d8cfd584304bd2bd54272dc100c9494def", + "sha256:5e40d23ea43f683f3a7c032dde391104f609b05c21b6d284101120b51dbd50c1", + "sha256:63a01522bde161c713f7fa5ee5d850fee6386fc386073490ebcd438f14579cf2", + "sha256:6b2a3d7756035dde13571f4ad232629b78b7f35c2cd5fda7b464079fc697db3a", + "sha256:6b3be1a6bf6c965aea3b4e3a40df9d2c134c516d89c76cf2b6c81f67e6c5c6ed", + "sha256:6c7bea3357f2dc653756e6da55f66cd21c73d3875c8f3dc4e8d196a876252de0", + "sha256:6e6c8e229507cf29333a2f491cbaa7dff5b8a4a3e613af8090ccce9ce3e4f7a0", + "sha256:6fad27f2a63884ee45d491aebec4b1f38752cd6aaccc625038c21e7f43c02c49", + "sha256:71bfef52547c2b8b145897fa8d1b5142bc52313cfa38c0742e0ef755f0d09c60", + "sha256:72370d312323282b1bf74426e53fae861a310d7ae519b419da46673c38e7d147", + "sha256:76c7d36043a9c478b0c846fcec7da5cb095983722473e503e0122ccd170182b5", + "sha256:78d8a81ef51edb9a2f278a6fb278789b49e304b12bb21bccf2fe7e344f71a9fb", + "sha256:798a6b159ce32181a5e7ab7611c17d1080e74a5541fec47f961b728dab25a76f", + "sha256:7e370567f66a57e2c0e3ae2afcc6f126e1d6babd36831cfd0caad279b05c1c88", + "sha256:8004b845f606b95a8b17efa112aa10b327e46e95dcda604a257b4633d4ed45c8", + "sha256:80b20bf9ea4e709b3b9ae364ac298dfa872b084c186e5c1d60b0b79c79a7ee7e", + "sha256:87303f4bb1b493997f911a4f126123ccd2827d3a2e7dd2390cc6143fbc75805b", + "sha256:8d423f4631395b92dceda39f481a463498131ac02a58581124a44495491f715b", + "sha256:94ee262192db50fb9c069a0be7bb1a426fb1b43af26ce12bf4c6c30e13f46b56", + "sha256:960e4be2e7de340300ab4bcc2b45bed46be1d62330575b8265e6602dbcb9a14c", + "sha256:99397d5e1da6b345cec3e6125e2902b0e6864eb8eaa4be43a2013f059c502c93", + "sha256:9abbb8c1bad08817bad62ae1ea76c01bdbd0ee8c827d05f3ba038c9f6d6f14bb", + "sha256:9c0b8fadf80bc70d341032f92702bda1b0ed78c01e9c495f0df701938c99bcf5", + "sha256:9f977da9abae170eebdcf02bda33727c342fad5dcdbc08498bfdfb6cc6c65489", + "sha256:a6be712ca39d5e9c89b705bc9800be36739436fefb8d0b52b2d332f7d6d22a01", + "sha256:aa434418d6ee44b0ba3a5a407bc9e1543cf496328f43f149e9b58f74a63d5c21", + "sha256:ac4f778e32f7de0ba63346893a4af87c2280ffc1783f594a117be51d908a10da", + "sha256:ac85d65ee369c09b2904b55078ad589961e2e2e03c810963d35a26e6a3931425", + "sha256:ad5d78c664d39960435d4162db31117c8945ba74fb0c414e79ba85a8bdeafdec", + "sha256:ad91f57c3485d87a8edee558dafab0f08c716857d748731c0998dcefe9d3fd5f", + "sha256:afd255d42b340036883ca95bded553b29065b064e2fe5db64ad5988517db9694", + "sha256:b1c2c74f100a0c2110a8e30445554ae331860d32f145c60a2a1e1c27702022a2", + "sha256:b49a8c71378d40d43c6a56eaa536d7823baa43c27c93e082aeb60a9717be0c10", + "sha256:b5f52611323e8e35705e6750a760f32165b41c052d22da154ae343871e7cd50d", + "sha256:b6bf99ae529ac359263269710356d3ddb173c15d8f8dc8849ae794ab811e5cd0", + "sha256:ba361bf87c4701f11241be92c99ef5cf916865dd225955cccb2376bf76717b3c", + "sha256:bc351aa2158575e68943d8e1d5531719ad86bf6607776627ed5a1a60657664af", + "sha256:bd6eb7b1e12e4dd0b75cab1b023272f1333494add5ad61deedac738af1ffeede", + "sha256:bf8852595f5e2d2b072e24c29394b5aca7fba96ecc8656d56660535f9e9872c9", + "sha256:c1dd66541569a2bdbe92589cc96a89f470b20d168f2238fd463e1b59ee3e2d49", + "sha256:c36a7a004cba4e370d0675826eeefe4e42a256638b6b1432263ddb4af317bc02", + "sha256:c886cda61da4d39010be84802bed11bc75f03e8a6094cc18016957a2c80254d4", + "sha256:cc7aa83946f80c66a5d2dea7e165f15aa3eb21e7b74b24d8f850afc0d44bb00e", + "sha256:cea9c4bef70d1358bafec6019164abce362f4de15d79d1ecd64ae31c1749d77a", + "sha256:cfe1951e80869695857986be104a40a1e7fa8ec7de05f86bcbd7bd20854be764", + "sha256:d36cf6f139da3279644794fcfda18af425c8bb122ef9c2e7c762a937bbf7b0f4", + "sha256:d81308faaa9393b7e6ed20718d465c4c2b73c24d5e4826024961acf4b87b1524", + "sha256:db51ea1f9c5ac790848bc271fcdf4108ad1b77a77c6949a96320477962cf7ba5", + "sha256:dd05c18c920a15e00d7a52df37bffd3930fe2c004c690f9422b20e12077e6dbd", + "sha256:df05918a11e1db0198d00486e36673b4b4a89390e4458ff9479b4908dde357ac", + "sha256:e4c31dccf6be131709e545d0258eb5b75c5fac304857ad3976331c6740e8b9d6", + "sha256:e60954d673040430802b29fe5bba698e262182b5ba5f302ff4458e39f8101881", + "sha256:e60e2d2c88a0552e61c37172fe377f6a8abf479130a445314886de4a360ba940", + "sha256:e786f773ddc153846b2ebdb854011cfd1f7c874b8ee79cced3706801341c9f5d", + "sha256:e7cd91548fb95b69edd376f5204e27115ac7d093ec7d80066123a5bdb31c71d9", + "sha256:eaef2ea4f5602aefaaf3d6e8235f3b9ffde35aff15aac1c16cc802f6bbf0a3b5", + "sha256:ec8c5ea93a03775fbadd08462200cf34ce617ec75a032abfa44fd6d3a00e5424", + "sha256:eddeb8574bc9d9abb8491d4a46b60e553c2cea235b80373756acb06568101175", + "sha256:eeb300b0e4b428aab2f70d785cad4306529262af6de8c8c5fe6a4b41a674a434", + "sha256:f39d71ece8e97cf069e4154868eaac1256b133fe23e0459829432e4bb6406472", + "sha256:f4840ddad2b9d53710e92361391944da89e3576641a290066a1719520059247c", + "sha256:f70723a00bcbce0f9a216853139955be45da35741335eb3afead304e77662560", + "sha256:f829cf2ba5b553e6529d6238928c07096f1feb47f4ad536b7f06bca6cc77173f", + "sha256:f96386910467725895f7972939a6faabd6e96b1de0cc2c092e4bd2c40e956e25", + "sha256:fe259a9d6f555bc79aed9bb4b9a7fff73db443b4c483e4a81a428c8a2860428b" + ], + "markers": "python_version >= '3.7'", + "version": "==5.0.8" + }, "jinja2": { "hashes": [ "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", @@ -485,101 +604,109 @@ }, "multidict": { "hashes": [ - "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f", - "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056", - "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761", - "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3", - "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b", - "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6", - "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748", - "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966", - "sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f", - "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1", - "sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6", - "sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada", - "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305", - "sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2", - "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d", - "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a", - "sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef", - "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c", - "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb", - "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60", - "sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6", - "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4", - "sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478", - "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81", - "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7", - "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56", - "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3", - "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6", - "sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30", - "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb", - "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506", - "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0", - "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925", - "sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c", - "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6", - "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e", - "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95", - "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2", - "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133", - "sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2", - "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa", - "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3", - "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3", - "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436", - "sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657", - "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581", - "sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492", - "sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43", - "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2", - "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2", - "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926", - "sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057", - "sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc", - "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80", - "sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255", - "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1", - "sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972", - "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53", - "sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1", - "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423", - "sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a", - "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160", - "sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c", - "sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd", - "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa", - "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5", - "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b", - "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa", - "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef", - "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44", - "sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4", - "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156", - "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753", - "sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28", - "sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d", - "sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a", - "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304", - "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008", - "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429", - "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72", - "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399", - "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3", - "sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392", - "sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167", - "sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c", - "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774", - "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351", - "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76", - "sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875", - "sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd", - "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28", - "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db" + "sha256:0085b0afb2446e57050140240a8595846ed64d1cbd26cef936bfab3192c673b8", + "sha256:042028348dc5a1f2be6c666437042a98a5d24cee50380f4c0902215e5ec41844", + "sha256:05fefbc3cddc4e36da209a5e49f1094bbece9a581faa7f3589201fd95df40e5d", + "sha256:063be88bd684782a0715641de853e1e58a2f25b76388538bd62d974777ce9bc2", + "sha256:07bfa8bc649783e703263f783f73e27fef8cd37baaad4389816cf6a133141331", + "sha256:08549895e6a799bd551cf276f6e59820aa084f0f90665c0f03dd3a50db5d3c48", + "sha256:095a2eabe8c43041d3e6c2cb8287a257b5f1801c2d6ebd1dd877424f1e89cf29", + "sha256:0b183a959fb88ad1be201de2c4bdf52fa8e46e6c185d76201286a97b6f5ee65c", + "sha256:0c383d28857f66f5aebe3e91d6cf498da73af75fbd51cedbe1adfb85e90c0460", + "sha256:0d57a01a2a9fa00234aace434d8c131f0ac6e0ac6ef131eda5962d7e79edfb5b", + "sha256:0dc25a3293c50744796e87048de5e68996104d86d940bb24bc3ec31df281b191", + "sha256:0e5a644e50ef9fb87878d4d57907f03a12410d2aa3b93b3acdf90a741df52c49", + "sha256:0f249badb360b0b4d694307ad40f811f83df4da8cef7b68e429e4eea939e49dd", + "sha256:0f74f2fc51555f4b037ef278efc29a870d327053aba5cb7d86ae572426c7cccc", + "sha256:125dd82b40f8c06d08d87b3510beaccb88afac94e9ed4a6f6c71362dc7dbb04b", + "sha256:13551d0e2d7201f0959725a6a769b6f7b9019a168ed96006479c9ac33fe4096b", + "sha256:14ed9ed1bfedd72a877807c71113deac292bf485159a29025dfdc524c326f3e1", + "sha256:163f4604e76639f728d127293d24c3e208b445b463168af3d031b92b0998bb90", + "sha256:19e2819b0b468174de25c0ceed766606a07cedeab132383f1e83b9a4e96ccb4f", + "sha256:1e2a2193d3aa5cbf5758f6d5680a52aa848e0cf611da324f71e5e48a9695cc86", + "sha256:1f3c099d3899b14e1ce52262eb82a5f5cb92157bb5106bf627b618c090a0eadc", + "sha256:214207dcc7a6221d9942f23797fe89144128a71c03632bf713d918db99bd36de", + "sha256:2325105e16d434749e1be8022f942876a936f9bece4ec41ae244e3d7fae42aaf", + "sha256:2529ddbdaa424b2c6c2eb668ea684dd6b75b839d0ad4b21aad60c168269478d7", + "sha256:256d431fe4583c5f1e0f2e9c4d9c22f3a04ae96009b8cfa096da3a8723db0a16", + "sha256:25bb96338512e2f46f615a2bb7c6012fe92a4a5ebd353e5020836a7e33120349", + "sha256:2e87f1926e91855ae61769ba3e3f7315120788c099677e0842e697b0bfb659f2", + "sha256:2fc6af8e39f7496047c7876314f4317736eac82bf85b54c7c76cf1a6f8e35d98", + "sha256:3157126b028c074951839233647bd0e30df77ef1fedd801b48bdcad242a60f4e", + "sha256:32c9b4878f48be3e75808ea7e499d6223b1eea6d54c487a66bc10a1871e3dc6a", + "sha256:32ed748ff9ac682eae7859790d3044b50e3076c7d80e17a44239683769ff485e", + "sha256:3501621d5e86f1a88521ea65d5cad0a0834c77b26f193747615b7c911e5422d2", + "sha256:437c33561edb6eb504b5a30203daf81d4a9b727e167e78b0854d9a4e18e8950b", + "sha256:48d39b1824b8d6ea7de878ef6226efbe0773f9c64333e1125e0efcfdd18a24c7", + "sha256:4ac3fcf9a2d369bd075b2c2965544036a27ccd277fc3c04f708338cc57533081", + "sha256:4ccfd74957ef53fa7380aaa1c961f523d582cd5e85a620880ffabd407f8202c0", + "sha256:52b05e21ff05729fbea9bc20b3a791c3c11da61649ff64cce8257c82a020466d", + "sha256:5389445f0173c197f4a3613713b5fb3f3879df1ded2a1a2e4bc4b5b9c5441b7e", + "sha256:5c5e7d2e300d5cb3b2693b6d60d3e8c8e7dd4ebe27cd17c9cb57020cac0acb80", + "sha256:5d26547423e5e71dcc562c4acdc134b900640a39abd9066d7326a7cc2324c530", + "sha256:5dd7106d064d05896ce28c97da3f46caa442fe5a43bc26dfb258e90853b39b44", + "sha256:5f8cb1329f42fadfb40d6211e5ff568d71ab49be36e759345f91c69d1033d633", + "sha256:61d5541f27533f803a941d3a3f8a3d10ed48c12cf918f557efcbf3cd04ef265c", + "sha256:639556758c36093b35e2e368ca485dada6afc2bd6a1b1207d85ea6dfc3deab27", + "sha256:641cf2e3447c9ecff2f7aa6e9eee9eaa286ea65d57b014543a4911ff2799d08a", + "sha256:6aed763b6a1b28c46c055692836879328f0b334a6d61572ee4113a5d0c859872", + "sha256:6e2a2d6749e1ff2c9c76a72c6530d5baa601205b14e441e6d98011000f47a7ac", + "sha256:7243c5a6523c5cfeca76e063efa5f6a656d1d74c8b1fc64b2cd1e84e507f7e2a", + "sha256:76b34c12b013d813e6cb325e6bd4f9c984db27758b16085926bbe7ceeaace626", + "sha256:781b5dd1db18c9e9eacc419027b0acb5073bdec9de1675c0be25ceb10e2ad133", + "sha256:7c611345bbe7cb44aabb877cb94b63e86f2d0db03e382667dbd037866d44b4f8", + "sha256:83b78c680d4b15d33042d330c2fa31813ca3974197bddb3836a5c635a5fd013f", + "sha256:84e87a7d75fa36839a3a432286d719975362d230c70ebfa0948549cc38bd5b46", + "sha256:89b3857652183b8206a891168af47bac10b970d275bba1f6ee46565a758c078d", + "sha256:8cd1a0644ccaf27e9d2f6d9c9474faabee21f0578fe85225cc5af9a61e1653df", + "sha256:8de4d42dffd5ced9117af2ce66ba8722402541a3aa98ffdf78dde92badb68932", + "sha256:94a7bb972178a8bfc4055db80c51efd24baefaced5e51c59b0d598a004e8305d", + "sha256:98aa8325c7f47183b45588af9c434533196e241be0a4e4ae2190b06d17675c02", + "sha256:9e658d1373c424457ddf6d55ec1db93c280b8579276bebd1f72f113072df8a5d", + "sha256:9f49585f4abadd2283034fc605961f40c638635bc60f5162276fec075f2e37a4", + "sha256:9f6cad071960ba1914fa231677d21b1b4a3acdcce463cee41ea30bc82e6040cf", + "sha256:a0cc398350ef31167e03f3ca7c19313d4e40a662adcb98a88755e4e861170bdd", + "sha256:a1133414b771619aa3c3000701c11b2e4624a7f492f12f256aedde97c28331a2", + "sha256:a33273a541f1e1a8219b2a4ed2de355848ecc0254264915b9290c8d2de1c74e1", + "sha256:a3c0ff89fe40a152e77b191b83282c9664357dce3004032d42e68c514ceff27e", + "sha256:a49994481b99cd7dedde07f2e7e93b1d86c01c0fca1c32aded18f10695ae17eb", + "sha256:abf5b17bc0cf626a8a497d89ac691308dbd825d2ac372aa990b1ca114e470151", + "sha256:ac380cacdd3b183338ba63a144a34e9044520a6fb30c58aa14077157a033c13e", + "sha256:ad81012b24b88aad4c70b2cbc2dad84018783221b7f923e926f4690ff8569da3", + "sha256:b2c00ad31fbc2cbac85d7d0fcf90853b2ca2e69d825a2d3f3edb842ef1544a2c", + "sha256:b4c153863dd6569f6511845922c53e39c8d61f6e81f228ad5443e690fca403de", + "sha256:b4f3d66dd0354b79761481fc15bdafaba0b9d9076f1f42cc9ce10d7fcbda205a", + "sha256:b99aac6bb2c37db336fa03a39b40ed4ef2818bf2dfb9441458165ebe88b793af", + "sha256:b9f6392d98c0bd70676ae41474e2eecf4c7150cb419237a41f8f96043fcb81d1", + "sha256:c537da54ce4ff7c15e78ab1292e5799d0d43a2108e006578a57f531866f64025", + "sha256:ca23db5fb195b5ef4fd1f77ce26cadefdf13dba71dab14dadd29b34d457d7c44", + "sha256:cc826b9a8176e686b67aa60fd6c6a7047b0461cae5591ea1dc73d28f72332a8a", + "sha256:cca83a629f77402cfadd58352e394d79a61c8015f1694b83ab72237ec3941f88", + "sha256:cf8d370b2fea27fb300825ec3984334f7dd54a581bde6456799ba3776915a656", + "sha256:d1175b0e0d6037fab207f05774a176d71210ebd40b1c51f480a04b65ec5c786d", + "sha256:d1996ee1330e245cd3aeda0887b4409e3930524c27642b046e4fae88ffa66c5e", + "sha256:d5a36953389f35f0a4e88dc796048829a2f467c9197265504593f0e420571547", + "sha256:da51d8928ad8b4244926fe862ba1795f0b6e68ed8c42cd2f822d435db9c2a8f4", + "sha256:e16e7297f29a544f49340012d6fc08cf14de0ab361c9eb7529f6a57a30cbfda1", + "sha256:e25b11a0417475f093d0f0809a149aff3943c2c56da50fdf2c3c88d57fe3dfbd", + "sha256:e4371591e621579cb6da8401e4ea405b33ff25a755874a3567c4075ca63d56e2", + "sha256:e653d36b1bf48fa78c7fcebb5fa679342e025121ace8c87ab05c1cefd33b34fc", + "sha256:e7d91a230c7f8af86c904a5a992b8c064b66330544693fd6759c3d6162382ecf", + "sha256:e851e6363d0dbe515d8de81fd544a2c956fdec6f8a049739562286727d4a00c3", + "sha256:ef7d48207926edbf8b16b336f779c557dd8f5a33035a85db9c4b0febb0706817", + "sha256:f7716f7e7138252d88607228ce40be22660d6608d20fd365d596e7ca0738e019", + "sha256:facaf11f21f3a4c51b62931feb13310e6fe3475f85e20d9c9fdce0d2ea561b87" ], - "markers": "python_version >= '3.8'", - "version": "==6.1.0" + "markers": "python_version >= '3.9'", + "version": "==6.2.0" + }, + "niquests": { + "hashes": [ + "sha256:68e0a7e9f338466b3606945fffd11f75e3c90af7498aa9336ef03812323b7e36", + "sha256:86e484c2c60444aa96069c15f6295af6e25a8bad50781e1326df1b5c7ab48339" + ], + "markers": "python_version >= '3.7'", + "version": "==3.14.0" }, "numpy": { "hashes": [ @@ -725,229 +852,228 @@ }, "propcache": { "hashes": [ - "sha256:02df07041e0820cacc8f739510078f2aadcfd3fc57eaeeb16d5ded85c872c89e", - "sha256:03acd9ff19021bd0567582ac88f821b66883e158274183b9e5586f678984f8fe", - "sha256:03c091bb752349402f23ee43bb2bff6bd80ccab7c9df6b88ad4322258d6960fc", - "sha256:07700939b2cbd67bfb3b76a12e1412405d71019df00ca5697ce75e5ef789d829", - "sha256:0c3e893c4464ebd751b44ae76c12c5f5c1e4f6cbd6fbf67e3783cd93ad221863", - "sha256:119e244ab40f70a98c91906d4c1f4c5f2e68bd0b14e7ab0a06922038fae8a20f", - "sha256:11ae6a8a01b8a4dc79093b5d3ca2c8a4436f5ee251a9840d7790dccbd96cb649", - "sha256:15010f29fbed80e711db272909a074dc79858c6d28e2915704cfc487a8ac89c6", - "sha256:19d36bb351ad5554ff20f2ae75f88ce205b0748c38b146c75628577020351e3c", - "sha256:1c8f7d896a16da9455f882870a507567d4f58c53504dc2d4b1e1d386dfe4588a", - "sha256:2383a17385d9800b6eb5855c2f05ee550f803878f344f58b6e194de08b96352c", - "sha256:24c04f8fbf60094c531667b8207acbae54146661657a1b1be6d3ca7773b7a545", - "sha256:2578541776769b500bada3f8a4eeaf944530516b6e90c089aa368266ed70c49e", - "sha256:26a67e5c04e3119594d8cfae517f4b9330c395df07ea65eab16f3d559b7068fe", - "sha256:2b975528998de037dfbc10144b8aed9b8dd5a99ec547f14d1cb7c5665a43f075", - "sha256:2d15bc27163cd4df433e75f546b9ac31c1ba7b0b128bfb1b90df19082466ff57", - "sha256:2d913d36bdaf368637b4f88d554fb9cb9d53d6920b9c5563846555938d5450bf", - "sha256:3302c5287e504d23bb0e64d2a921d1eb4a03fb93a0a0aa3b53de059f5a5d737d", - "sha256:36ca5e9a21822cc1746023e88f5c0af6fce3af3b85d4520efb1ce4221bed75cc", - "sha256:3b812b3cb6caacd072276ac0492d249f210006c57726b6484a1e1805b3cfeea0", - "sha256:3c6ec957025bf32b15cbc6b67afe233c65b30005e4c55fe5768e4bb518d712f1", - "sha256:41de3da5458edd5678b0f6ff66691507f9885f5fe6a0fb99a5d10d10c0fd2d64", - "sha256:42924dc0c9d73e49908e35bbdec87adedd651ea24c53c29cac103ede0ea1d340", - "sha256:4544699674faf66fb6b4473a1518ae4999c1b614f0b8297b1cef96bac25381db", - "sha256:46ed02532cb66612d42ae5c3929b5e98ae330ea0f3900bc66ec5f4862069519b", - "sha256:49ea05212a529c2caffe411e25a59308b07d6e10bf2505d77da72891f9a05641", - "sha256:4fa0e7c9c3cf7c276d4f6ab9af8adddc127d04e0fcabede315904d2ff76db626", - "sha256:507c5357a8d8b4593b97fb669c50598f4e6cccbbf77e22fa9598aba78292b4d7", - "sha256:549722908de62aa0b47a78b90531c022fa6e139f9166be634f667ff45632cc92", - "sha256:58e6d2a5a7cb3e5f166fd58e71e9a4ff504be9dc61b88167e75f835da5764d07", - "sha256:5a16167118677d94bb48bfcd91e420088854eb0737b76ec374b91498fb77a70e", - "sha256:5d62c4f6706bff5d8a52fd51fec6069bef69e7202ed481486c0bc3874912c787", - "sha256:5fa159dcee5dba00c1def3231c249cf261185189205073bde13797e57dd7540a", - "sha256:6032231d4a5abd67c7f71168fd64a47b6b451fbcb91c8397c2f7610e67683810", - "sha256:63f26258a163c34542c24808f03d734b338da66ba91f410a703e505c8485791d", - "sha256:65a37714b8ad9aba5780325228598a5b16c47ba0f8aeb3dc0514701e4413d7c0", - "sha256:67054e47c01b7b349b94ed0840ccae075449503cf1fdd0a1fdd98ab5ddc2667b", - "sha256:67dda3c7325691c2081510e92c561f465ba61b975f481735aefdfc845d2cd043", - "sha256:6985a593417cdbc94c7f9c3403747335e450c1599da1647a5af76539672464d3", - "sha256:6a1948df1bb1d56b5e7b0553c0fa04fd0e320997ae99689488201f19fa90d2e7", - "sha256:6b5b7fd6ee7b54e01759f2044f936dcf7dea6e7585f35490f7ca0420fe723c0d", - "sha256:6c929916cbdb540d3407c66f19f73387f43e7c12fa318a66f64ac99da601bcdf", - "sha256:6f4d7a7c0aff92e8354cceca6fe223973ddf08401047920df0fcb24be2bd5138", - "sha256:728af36011bb5d344c4fe4af79cfe186729efb649d2f8b395d1572fb088a996c", - "sha256:742840d1d0438eb7ea4280f3347598f507a199a35a08294afdcc560c3739989d", - "sha256:75e872573220d1ee2305b35c9813626e620768248425f58798413e9c39741f46", - "sha256:794c3dd744fad478b6232289c866c25406ecdfc47e294618bdf1697e69bd64a6", - "sha256:7c0fdbdf6983526e269e5a8d53b7ae3622dd6998468821d660d0daf72779aefa", - "sha256:7c5f5290799a3f6539cc5e6f474c3e5c5fbeba74a5e1e5be75587746a940d51e", - "sha256:7c6e7e4f9167fddc438cd653d826f2222222564daed4116a02a184b464d3ef05", - "sha256:7cedd25e5f678f7738da38037435b340694ab34d424938041aa630d8bac42663", - "sha256:7e2e068a83552ddf7a39a99488bcba05ac13454fb205c847674da0352602082f", - "sha256:8319293e85feadbbfe2150a5659dbc2ebc4afdeaf7d98936fb9a2f2ba0d4c35c", - "sha256:8526b0941ec5a40220fc4dfde76aed58808e2b309c03e9fa8e2260083ef7157f", - "sha256:8884ba1a0fe7210b775106b25850f5e5a9dc3c840d1ae9924ee6ea2eb3acbfe7", - "sha256:8cb625bcb5add899cb8ba7bf716ec1d3e8f7cdea9b0713fa99eadf73b6d4986f", - "sha256:8d663fd71491dde7dfdfc899d13a067a94198e90695b4321084c6e450743b8c7", - "sha256:8ee1983728964d6070ab443399c476de93d5d741f71e8f6e7880a065f878e0b9", - "sha256:997e7b8f173a391987df40f3b52c423e5850be6f6df0dcfb5376365440b56667", - "sha256:9be90eebc9842a93ef8335291f57b3b7488ac24f70df96a6034a13cb58e6ff86", - "sha256:9ddd49258610499aab83b4f5b61b32e11fce873586282a0e972e5ab3bcadee51", - "sha256:9ecde3671e62eeb99e977f5221abcf40c208f69b5eb986b061ccec317c82ebd0", - "sha256:9ff4e9ecb6e4b363430edf2c6e50173a63e0820e549918adef70515f87ced19a", - "sha256:a254537b9b696ede293bfdbc0a65200e8e4507bc9f37831e2a0318a9b333c85c", - "sha256:a2b9bf8c79b660d0ca1ad95e587818c30ccdb11f787657458d6f26a1ea18c568", - "sha256:a61a68d630e812b67b5bf097ab84e2cd79b48c792857dc10ba8a223f5b06a2af", - "sha256:a7080b0159ce05f179cfac592cda1a82898ca9cd097dacf8ea20ae33474fbb25", - "sha256:a8fd93de4e1d278046345f49e2238cdb298589325849b2645d4a94c53faeffc5", - "sha256:a94ffc66738da99232ddffcf7910e0f69e2bbe3a0802e54426dbf0714e1c2ffe", - "sha256:aa806bbc13eac1ab6291ed21ecd2dd426063ca5417dd507e6be58de20e58dfcf", - "sha256:b0c1a133d42c6fc1f5fbcf5c91331657a1ff822e87989bf4a6e2e39b818d0ee9", - "sha256:b58229a844931bca61b3a20efd2be2a2acb4ad1622fc026504309a6883686fbf", - "sha256:bb2f144c6d98bb5cbc94adeb0447cfd4c0f991341baa68eee3f3b0c9c0e83767", - "sha256:be90c94570840939fecedf99fa72839aed70b0ced449b415c85e01ae67422c90", - "sha256:bf0d9a171908f32d54f651648c7290397b8792f4303821c42a74e7805bfb813c", - "sha256:bf15fc0b45914d9d1b706f7c9c4f66f2b7b053e9517e40123e137e8ca8958b3d", - "sha256:bf4298f366ca7e1ad1d21bbb58300a6985015909964077afd37559084590c929", - "sha256:c441c841e82c5ba7a85ad25986014be8d7849c3cfbdb6004541873505929a74e", - "sha256:cacea77ef7a2195f04f9279297684955e3d1ae4241092ff0cfcef532bb7a1c32", - "sha256:cd54895e4ae7d32f1e3dd91261df46ee7483a735017dc6f987904f194aa5fd14", - "sha256:d1323cd04d6e92150bcc79d0174ce347ed4b349d748b9358fd2e497b121e03c8", - "sha256:d383bf5e045d7f9d239b38e6acadd7b7fdf6c0087259a84ae3475d18e9a2ae8b", - "sha256:d3e7420211f5a65a54675fd860ea04173cde60a7cc20ccfbafcccd155225f8bc", - "sha256:d8074c5dd61c8a3e915fa8fc04754fa55cfa5978200d2daa1e2d4294c1f136aa", - "sha256:df03cd88f95b1b99052b52b1bb92173229d7a674df0ab06d2b25765ee8404bce", - "sha256:e45377d5d6fefe1677da2a2c07b024a6dac782088e37c0b1efea4cfe2b1be19b", - "sha256:e53d19c2bf7d0d1e6998a7e693c7e87300dd971808e6618964621ccd0e01fe4e", - "sha256:e560fd75aaf3e5693b91bcaddd8b314f4d57e99aef8a6c6dc692f935cc1e6bbf", - "sha256:ec5060592d83454e8063e487696ac3783cc48c9a329498bafae0d972bc7816c9", - "sha256:ecc2920630283e0783c22e2ac94427f8cca29a04cfdf331467d4f661f4072dac", - "sha256:ed7161bccab7696a473fe7ddb619c1d75963732b37da4618ba12e60899fefe4f", - "sha256:ee0bd3a7b2e184e88d25c9baa6a9dc609ba25b76daae942edfb14499ac7ec374", - "sha256:ee25f1ac091def37c4b59d192bbe3a206298feeb89132a470325bf76ad122a1e", - "sha256:efa44f64c37cc30c9f05932c740a8b40ce359f51882c70883cc95feac842da4d", - "sha256:f47d52fd9b2ac418c4890aad2f6d21a6b96183c98021f0a48497a904199f006e", - "sha256:f857034dc68d5ceb30fb60afb6ff2103087aea10a01b613985610e007053a121", - "sha256:fb91d20fa2d3b13deea98a690534697742029f4fb83673a3501ae6e3746508b5", - "sha256:fddb8870bdb83456a489ab67c6b3040a8d5a55069aa6f72f9d872235fbc52f54" + "sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e", + "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b", + "sha256:069e7212890b0bcf9b2be0a03afb0c2d5161d91e1bf51569a64f629acc7defbf", + "sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b", + "sha256:0c3c3a203c375b08fd06a20da3cf7aac293b834b6f4f4db71190e8422750cca5", + "sha256:0c86e7ceea56376216eba345aa1fc6a8a6b27ac236181f840d1d7e6a1ea9ba5c", + "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c", + "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a", + "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf", + "sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8", + "sha256:1eb34d90aac9bfbced9a58b266f8946cb5935869ff01b164573a7634d39fbcb5", + "sha256:1f6cc0ad7b4560e5637eb2c994e97b4fa41ba8226069c9277eb5ea7101845b42", + "sha256:27c6ac6aa9fc7bc662f594ef380707494cb42c22786a558d95fcdedb9aa5d035", + "sha256:2d219b0dbabe75e15e581fc1ae796109b07c8ba7d25b9ae8d650da582bed01b0", + "sha256:2fce1df66915909ff6c824bbb5eb403d2d15f98f1518e583074671a30fe0c21e", + "sha256:319fa8765bfd6a265e5fa661547556da381e53274bc05094fc9ea50da51bfd46", + "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d", + "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24", + "sha256:3e19ea4ea0bf46179f8a3652ac1426e6dcbaf577ce4b4f65be581e237340420d", + "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de", + "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf", + "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7", + "sha256:43593c6772aa12abc3af7784bff4a41ffa921608dd38b77cf1dfd7f5c4e71371", + "sha256:47ef24aa6511e388e9894ec16f0fbf3313a53ee68402bc428744a367ec55b833", + "sha256:4cf9e93a81979f1424f1a3d155213dc928f1069d697e4353edb8a5eba67c6259", + "sha256:4d0dfdd9a2ebc77b869a0b04423591ea8823f791293b527dc1bb896c1d6f1136", + "sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25", + "sha256:58aa11f4ca8b60113d4b8e32d37e7e78bd8af4d1a5b5cb4979ed856a45e62005", + "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef", + "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7", + "sha256:5b9145c35cc87313b5fd480144f8078716007656093d23059e8993d3a8fa730f", + "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53", + "sha256:5cdb0f3e1eb6dfc9965d19734d8f9c481b294b5274337a8cb5cb01b462dcb7e0", + "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb", + "sha256:603f1fe4144420374f1a69b907494c3acbc867a581c2d49d4175b0de7cc64566", + "sha256:61014615c1274df8da5991a1e5da85a3ccb00c2d4701ac6f3383afd3ca47ab0a", + "sha256:64a956dff37080b352c1c40b2966b09defb014347043e740d420ca1eb7c9b908", + "sha256:668ddddc9f3075af019f784456267eb504cb77c2c4bd46cc8402d723b4d200bf", + "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458", + "sha256:6f173bbfe976105aaa890b712d1759de339d8a7cef2fc0a1714cc1a1e1c47f64", + "sha256:71ebe3fe42656a2328ab08933d420df5f3ab121772eef78f2dc63624157f0ed9", + "sha256:730178f476ef03d3d4d255f0c9fa186cb1d13fd33ffe89d39f2cda4da90ceb71", + "sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b", + "sha256:7f30241577d2fef2602113b70ef7231bf4c69a97e04693bde08ddab913ba0ce5", + "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037", + "sha256:82de5da8c8893056603ac2d6a89eb8b4df49abf1a7c19d536984c8dd63f481d5", + "sha256:83be47aa4e35b87c106fc0c84c0fc069d3f9b9b06d3c494cd404ec6747544894", + "sha256:8638f99dca15b9dff328fb6273e09f03d1c50d9b6512f3b65a4154588a7595fe", + "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757", + "sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3", + "sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976", + "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6", + "sha256:916cd229b0150129d645ec51614d38129ee74c03293a9f3f17537be0029a9641", + "sha256:9532ea0b26a401264b1365146c440a6d78269ed41f83f23818d4b79497aeabe7", + "sha256:967a8eec513dbe08330f10137eacb427b2ca52118769e82ebcfcab0fba92a649", + "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120", + "sha256:9979643ffc69b799d50d3a7b72b5164a2e97e117009d7af6dfdd2ab906cb72cd", + "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40", + "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e", + "sha256:9e64e948ab41411958670f1093c0a57acfdc3bee5cf5b935671bbd5313bcf229", + "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c", + "sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7", + "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111", + "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654", + "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f", + "sha256:a461959ead5b38e2581998700b26346b78cd98540b5524796c175722f18b0294", + "sha256:a75801768bbe65499495660b777e018cbe90c7980f07f8aa57d6be79ea6f71da", + "sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f", + "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7", + "sha256:b0313e8b923b3814d1c4a524c93dfecea5f39fa95601f6a9b1ac96cd66f89ea0", + "sha256:b23c11c2c9e6d4e7300c92e022046ad09b91fd00e36e83c44483df4afa990073", + "sha256:b303b194c2e6f171cfddf8b8ba30baefccf03d36a4d9cab7fd0bb68ba476a3d7", + "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11", + "sha256:bd39c92e4c8f6cbf5f08257d6360123af72af9f4da75a690bef50da77362d25f", + "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27", + "sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70", + "sha256:c66d8ccbc902ad548312b96ed8d5d266d0d2c6d006fd0f66323e9d8f2dd49be7", + "sha256:cd6a55f65241c551eb53f8cf4d2f4af33512c39da5d9777694e9d9c60872f519", + "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5", + "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180", + "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f", + "sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee", + "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18", + "sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815", + "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e", + "sha256:e861ad82892408487be144906a368ddbe2dc6297074ade2d892341b35c59844a", + "sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7", + "sha256:ed5f6d2edbf349bd8d630e81f474d33d6ae5d07760c44d33cd808e2f5c8f4ae6", + "sha256:ef2e4e91fb3945769e14ce82ed53007195e616a63aa43b40fb7ebaaf907c8d4c", + "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc", + "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8", + "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98", + "sha256:f35c7070eeec2cdaac6fd3fe245226ed2a6292d3ee8c938e5bb645b434c5f256", + "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5", + "sha256:f6f1324db48f001c2ca26a25fa25af60711e09b9aaf4b28488602776f4f9a744", + "sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723", + "sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277", + "sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5" ], "markers": "python_version >= '3.9'", - "version": "==0.3.0" + "version": "==0.3.1" }, "pydantic": { "hashes": [ - "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584", - "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236" + "sha256:442557d2910e75c991c39f4b4ab18963d57b9b55122c8b2a9cd176d8c29ce968", + "sha256:5b6c415eee9f8123a14d859be0c84363fec6b1feb6b688d6435801230b56e0b8" ], - "markers": "python_version >= '3.8'", - "version": "==2.10.6" + "markers": "python_version >= '3.9'", + "version": "==2.11.1" }, "pydantic-core": { "hashes": [ - "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278", - "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50", - "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9", - "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f", - "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6", - "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc", - "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54", - "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630", - "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9", - "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236", - "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7", - "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee", - "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b", - "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048", - "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc", - "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130", - "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4", - "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd", - "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4", - "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7", - "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7", - "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4", - "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e", - "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa", - "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6", - "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962", - "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b", - "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f", - "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474", - "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5", - "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459", - "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf", - "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a", - "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c", - "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76", - "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362", - "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4", - "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934", - "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320", - "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118", - "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96", - "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306", - "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046", - "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3", - "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2", - "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af", - "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9", - "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67", - "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a", - "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27", - "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35", - "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b", - "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151", - "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b", - "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154", - "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133", - "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef", - "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145", - "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15", - "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4", - "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc", - "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee", - "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c", - "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0", - "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5", - "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57", - "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b", - "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8", - "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1", - "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da", - "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e", - "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc", - "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993", - "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656", - "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4", - "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c", - "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb", - "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d", - "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9", - "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e", - "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1", - "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc", - "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a", - "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9", - "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506", - "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b", - "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1", - "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d", - "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99", - "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3", - "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31", - "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c", - "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39", - "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a", - "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308", - "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2", - "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228", - "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b", - "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9", - "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad" + "sha256:024d136ae44d233e6322027bbf356712b3940bee816e6c948ce4b90f18471b3d", + "sha256:0310524c833d91403c960b8a3cf9f46c282eadd6afd276c8c5edc617bd705dc9", + "sha256:07b4ced28fccae3f00626eaa0c4001aa9ec140a29501770a88dbbb0966019a86", + "sha256:085d8985b1c1e48ef271e98a658f562f29d89bda98bf120502283efbc87313eb", + "sha256:0a98257451164666afafc7cbf5fb00d613e33f7e7ebb322fbcd99345695a9a61", + "sha256:0bcf0bab28995d483f6c8d7db25e0d05c3efa5cebfd7f56474359e7137f39856", + "sha256:138d31e3f90087f42aa6286fb640f3c7a8eb7bdae829418265e7e7474bd2574b", + "sha256:14229c1504287533dbf6b1fc56f752ce2b4e9694022ae7509631ce346158de11", + "sha256:1583539533160186ac546b49f5cde9ffc928062c96920f58bd95de32ffd7bffd", + "sha256:175ab598fb457a9aee63206a1993874badf3ed9a456e0654273e56f00747bbd6", + "sha256:1a69b7596c6603afd049ce7f3835bcf57dd3892fc7279f0ddf987bebed8caa5a", + "sha256:1a73be93ecef45786d7d95b0c5e9b294faf35629d03d5b145b09b81258c7cd6d", + "sha256:1b1262b912435a501fa04cd213720609e2cefa723a07c92017d18693e69bf00b", + "sha256:1b2ea72dea0825949a045fa4071f6d5b3d7620d2a208335207793cf29c5a182d", + "sha256:20d4275f3c4659d92048c70797e5fdc396c6e4446caf517ba5cad2db60cd39d3", + "sha256:23c3e77bf8a7317612e5c26a3b084c7edeb9552d645742a54a5867635b4f2453", + "sha256:26a4ea04195638dcd8c53dadb545d70badba51735b1594810e9768c2c0b4a5da", + "sha256:26bc7367c0961dec292244ef2549afa396e72e28cc24706210bd44d947582c59", + "sha256:2a0147c0bef783fd9abc9f016d66edb6cac466dc54a17ec5f5ada08ff65caf5d", + "sha256:2c0afd34f928383e3fd25740f2050dbac9d077e7ba5adbaa2227f4d4f3c8da5c", + "sha256:30369e54d6d0113d2aa5aee7a90d17f225c13d87902ace8fcd7bbf99b19124db", + "sha256:31860fbda80d8f6828e84b4a4d129fd9c4535996b8249cfb8c720dc2a1a00bb8", + "sha256:34e7fb3abe375b5c4e64fab75733d605dda0f59827752debc99c17cb2d5f3276", + "sha256:40eb8af662ba409c3cbf4a8150ad32ae73514cd7cb1f1a2113af39763dd616b3", + "sha256:41d698dcbe12b60661f0632b543dbb119e6ba088103b364ff65e951610cb7ce0", + "sha256:4726f1f3f42d6a25678c67da3f0b10f148f5655813c5aca54b0d1742ba821b8f", + "sha256:4927564be53239a87770a5f86bdc272b8d1fbb87ab7783ad70255b4ab01aa25b", + "sha256:4b6d77c75a57f041c5ee915ff0b0bb58eabb78728b69ed967bc5b780e8f701b8", + "sha256:4d9149e7528af8bbd76cc055967e6e04617dcb2a2afdaa3dea899406c5521faa", + "sha256:4deac83a8cc1d09e40683be0bc6d1fa4cde8df0a9bf0cda5693f9b0569ac01b6", + "sha256:4f1ab031feb8676f6bd7c85abec86e2935850bf19b84432c64e3e239bffeb1ec", + "sha256:502ed542e0d958bd12e7c3e9a015bce57deaf50eaa8c2e1c439b512cb9db1e3a", + "sha256:5461934e895968655225dfa8b3be79e7e927e95d4bd6c2d40edd2fa7052e71b6", + "sha256:58c1151827eef98b83d49b6ca6065575876a02d2211f259fb1a6b7757bd24dd8", + "sha256:5bdd36b362f419c78d09630cbaebc64913f66f62bda6d42d5fbb08da8cc4f181", + "sha256:5bf637300ff35d4f59c006fff201c510b2b5e745b07125458a5389af3c0dff8c", + "sha256:5bf68bb859799e9cec3d9dd8323c40c00a254aabb56fe08f907e437005932f2b", + "sha256:5d8dc9f63a26f7259b57f46a7aab5af86b2ad6fbe48487500bb1f4b27e051e4c", + "sha256:5f36afd0d56a6c42cf4e8465b6441cf546ed69d3a4ec92724cc9c8c61bd6ecf4", + "sha256:5f72914cfd1d0176e58ddc05c7a47674ef4222c8253bf70322923e73e14a4ac3", + "sha256:6291797cad239285275558e0a27872da735b05c75d5237bbade8736f80e4c225", + "sha256:62c151ce3d59ed56ebd7ce9ce5986a409a85db697d25fc232f8e81f195aa39a1", + "sha256:635702b2fed997e0ac256b2cfbdb4dd0bf7c56b5d8fba8ef03489c03b3eb40e2", + "sha256:64672fa888595a959cfeff957a654e947e65bbe1d7d82f550417cbd6898a1d6b", + "sha256:68504959253303d3ae9406b634997a2123a0b0c1da86459abbd0ffc921695eac", + "sha256:69297418ad644d521ea3e1aa2e14a2a422726167e9ad22b89e8f1130d68e1e9a", + "sha256:6c32a40712e3662bebe524abe8abb757f2fa2000028d64cc5a1006016c06af43", + "sha256:715c62af74c236bf386825c0fdfa08d092ab0f191eb5b4580d11c3189af9d330", + "sha256:71dffba8fe9ddff628c68f3abd845e91b028361d43c5f8e7b3f8b91d7d85413e", + "sha256:7419241e17c7fbe5074ba79143d5523270e04f86f1b3a0dff8df490f84c8273a", + "sha256:759871f00e26ad3709efc773ac37b4d571de065f9dfb1778012908bcc36b3a73", + "sha256:7a25493320203005d2a4dac76d1b7d953cb49bce6d459d9ae38e30dd9f29bc9c", + "sha256:7b79af799630af263eca9ec87db519426d8c9b3be35016eddad1832bac812d87", + "sha256:7c9c84749f5787781c1c45bb99f433402e484e515b40675a5d121ea14711cf61", + "sha256:7da333f21cd9df51d5731513a6d39319892947604924ddf2e24a4612975fb936", + "sha256:82a4eba92b7ca8af1b7d5ef5f3d9647eee94d1f74d21ca7c21e3a2b92e008358", + "sha256:89670d7a0045acb52be0566df5bc8b114ac967c662c06cf5e0c606e4aadc964b", + "sha256:8a1d581e8cdbb857b0e0e81df98603376c1a5c34dc5e54039dcc00f043df81e7", + "sha256:8ec86b5baa36f0a0bfb37db86c7d52652f8e8aa076ab745ef7725784183c3fdd", + "sha256:91301a0980a1d4530d4ba7e6a739ca1a6b31341252cb709948e0aca0860ce0ae", + "sha256:918f2013d7eadea1d88d1a35fd4a1e16aaf90343eb446f91cb091ce7f9b431a2", + "sha256:9cb2390355ba084c1ad49485d18449b4242da344dea3e0fe10babd1f0db7dcfc", + "sha256:9ee65f0cc652261744fd07f2c6e6901c914aa6c5ff4dcfaf1136bc394d0dd26b", + "sha256:a608a75846804271cf9c83e40bbb4dab2ac614d33c6fd5b0c6187f53f5c593ef", + "sha256:a66d931ea2c1464b738ace44b7334ab32a2fd50be023d863935eb00f42be1778", + "sha256:a7a7f2a3f628d2f7ef11cb6188bcf0b9e1558151d511b974dfea10a49afe192b", + "sha256:abaeec1be6ed535a5d7ffc2e6c390083c425832b20efd621562fbb5bff6dc518", + "sha256:abfa44cf2f7f7d7a199be6c6ec141c9024063205545aa09304349781b9a125e6", + "sha256:ade5dbcf8d9ef8f4b28e682d0b29f3008df9842bb5ac48ac2c17bc55771cc976", + "sha256:ae62032ef513fe6281ef0009e30838a01057b832dc265da32c10469622613885", + "sha256:aec79acc183865bad120b0190afac467c20b15289050648b876b07777e67ea48", + "sha256:b716294e721d8060908dbebe32639b01bfe61b15f9f57bcc18ca9a0e00d9520b", + "sha256:b9ec80eb5a5f45a2211793f1c4aeddff0c3761d1c70d684965c1807e923a588b", + "sha256:ba95691cf25f63df53c1d342413b41bd7762d9acb425df8858d7efa616c0870e", + "sha256:bccc06fa0372151f37f6b69834181aa9eb57cf8665ed36405fb45fbf6cac3bae", + "sha256:c860773a0f205926172c6644c394e02c25421dc9a456deff16f64c0e299487d3", + "sha256:ca1103d70306489e3d006b0f79db8ca5dd3c977f6f13b2c59ff745249431a606", + "sha256:ce72d46eb201ca43994303025bd54d8a35a3fc2a3495fac653d6eb7205ce04f4", + "sha256:d20cbb9d3e95114325780f3cfe990f3ecae24de7a2d75f978783878cce2ad585", + "sha256:dcfebee69cd5e1c0b76a17e17e347c84b00acebb8dd8edb22d4a03e88e82a207", + "sha256:e1c69aa459f5609dec2fa0652d495353accf3eda5bdb18782bc5a2ae45c9273a", + "sha256:e2762c568596332fdab56b07060c8ab8362c56cf2a339ee54e491cd503612c50", + "sha256:e37f10f6d4bc67c58fbd727108ae1d8b92b397355e68519f1e4a7babb1473442", + "sha256:e790954b5093dff1e3a9a2523fddc4e79722d6f07993b4cd5547825c3cbf97b5", + "sha256:e81a295adccf73477220e15ff79235ca9dcbcee4be459eb9d4ce9a2763b8386c", + "sha256:e925819a98318d17251776bd3d6aa9f3ff77b965762155bdad15d1a9265c4cfd", + "sha256:ea30239c148b6ef41364c6f51d103c2988965b643d62e10b233b5efdca8c0099", + "sha256:eabf946a4739b5237f4f56d77fa6668263bc466d06a8036c055587c130a46f7b", + "sha256:ecb158fb9b9091b515213bed3061eb7deb1d3b4e02327c27a0ea714ff46b0760", + "sha256:ecc6d02d69b54a2eb83ebcc6f29df04957f734bcf309d346b4f83354d8376862", + "sha256:eddb18a00bbb855325db27b4c2a89a4ba491cd6a0bd6d852b225172a1f54b36c", + "sha256:f00e8b59e1fc8f09d05594aa7d2b726f1b277ca6155fc84c0396db1b373c4555", + "sha256:f1fb026c575e16f673c61c7b86144517705865173f3d0907040ac30c4f9f5915", + "sha256:f200b2f20856b5a6c3a35f0d4e344019f805e363416e609e9b47c552d35fd5ea", + "sha256:f225f3a3995dbbc26affc191d0443c6c4aa71b83358fd4c2b7d63e2f6f0336f9", + "sha256:f22dab23cdbce2005f26a8f0c71698457861f97fc6318c75814a50c75e87d025", + "sha256:f3eb479354c62067afa62f53bb387827bee2f75c9c79ef25eef6ab84d4b1ae3b", + "sha256:fc53e05c16697ff0c1c7c2b98e45e131d4bfb78068fffff92a82d169cbb4c7b7", + "sha256:ff48a55be9da6930254565ff5238d71d5e9cd8c5487a191cb85df3bdb8c77365" ], - "markers": "python_version >= '3.8'", - "version": "==2.27.2" + "markers": "python_version >= '3.9'", + "version": "==2.33.0" }, "pyparsing": { "hashes": [ - "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1", - "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a" + "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", + "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be" ], "markers": "python_version >= '3.9'", - "version": "==3.2.1" + "version": "==3.2.3" }, "pytest": { "hashes": [ @@ -968,28 +1094,129 @@ }, "python-dotenv": { "hashes": [ - "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", - "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a" + "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5", + "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==1.0.1" + "markers": "python_version >= '3.9'", + "version": "==1.1.0" }, "pytz": { "hashes": [ - "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57", - "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e" + "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", + "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00" ], - "version": "==2025.1" + "version": "==2025.2" + }, + "qh3": { + "hashes": [ + "sha256:0107f576a0524421e1b0f9e0437d2881a1835b1b6105eadd7ea0c1c9bf2da917", + "sha256:06159707895c606a321ccb5630347a2d2a44ee584f22945e5b22b0ad34f21ec8", + "sha256:06255835f99ea1af9e5d358056011686fcccbafaba893454027daa62ab6f701f", + "sha256:09b2305a954e61a9ed8b46a7a45f54e8d95ef870a47d5fd1836e14c7600d3b92", + "sha256:0a51dcffae03a89ddbab1884860569e0d1dbbf95deee47457c1fd29b4ac8d220", + "sha256:0a5d1cd881b7d43481ad60262cf3390a555e0e51751bc2af70ba4a612487e797", + "sha256:0e1c273660f9b8511c22d0b082137556e46d6a7eccf132bd82f95d29f90488b2", + "sha256:0e540cc7e7da65da30381bdb73a789a8635c6aaef98688d904eee3bc587654a5", + "sha256:10ed818f47dc522350a12641e8f2bea19ff824f8ce373c23a8e594b3481fd7a4", + "sha256:195b4ad58cf5a8da218e2368d34f47628c14581f3cc9863fc0406b32e137f3a6", + "sha256:1a80d07249c7ccbaa57bb9015b5ead0ead7ac1940cd5483548dfe56db99ce7a4", + "sha256:1cf0b18823801078d2294a0356abc2be34b4a224bea863a87029c1c97d6c34e0", + "sha256:1fac2ab4b8a2e50894b54a19416cd363defe0fb33f52754686ea58999f98dfc5", + "sha256:205cdaea9da8881b31b76eb6da5b88c9558ba96bc16a3ecf11333098ac7f3859", + "sha256:2294e78bcc40728a3a772df0f8ecf8b8756616d06dd001029016876aa4e5c9de", + "sha256:235236ab195d34e7cd18d186e46b7a4f8aceafe246bf36b42913f72627ded414", + "sha256:25eef1f2be50d79d23e01a567c719e46e4892518a5ccc96685fcb4746357320b", + "sha256:2ae147b756c3adf59699756feb9e07d4a69674f57b4e13d6c25f9d1dc3c8707c", + "sha256:2c9cdd7ea49c79b671e7de35dad61d2aa91920e2498d0c6dfa932d5e05070a5e", + "sha256:2dc9f269d7316b0a44e61ae7a11ffd8daa800b3f5ba773de2e9d8c4ee636a896", + "sha256:2f94d69edb0070ef4ec414deabfc2369aa2100b11bf4a4f2f393f2c28c4bc7ba", + "sha256:311da331e31c55afc3f4f4f2ba9d07a1d700ffb7db5aa4f58300b9f56f2523dc", + "sha256:3578844a9ff4c342a409d010f909782afc52a31680876f7fab65bf133aa3f4db", + "sha256:4032c2898b4c0ff7a25cf7d68c3b1f2abdcaf4f25cc8b6802a941a842f9a95b6", + "sha256:40abd150eddfa0884c139bd281e87ff920d4cd52d685fc4ef25ddcc77ff7a220", + "sha256:43e32602651d07f8a0860ba0a45d8c8fe9ccd537030e7632d1258f7b84881416", + "sha256:45a21d25fe17168f4db09fcaabee5dd171763ad1bd8753c257297837f5ba9197", + "sha256:45bfbb126e31ecf63ef74c249d38d07e149c0663b4a191cf9e2e3445a80758d5", + "sha256:4745667c9956bcfd74ff677edd4c73d6cb578b6b47c5fb3d246aaa223dd6a004", + "sha256:4936a5d8915866b4f08ab18018f41ed93a2593788ad0a80796aada2e23d402e5", + "sha256:4a45a9698b3bcae05f91356f50df8dab3c3fdef3187548b9c4a396a6eb6760b5", + "sha256:4b84c1ca283278e2e22a3b9e2ce8ea55c0a1797d6e86255640a1b6293fe18b2a", + "sha256:4dc88397ed7f3b46f542f87e19050a7f82267225009ce65651ac44cb55b204b1", + "sha256:4e10a872077373c71d7938fb1a7ae0561f2e79aad2b1b5323dbb6325a389041a", + "sha256:4f1b5dcb4d9da5b441e0b14216b816be7b5b5d080c2ccb957adf84266411ff6b", + "sha256:50d25182d598312197f500a65acebf5430391764e6ffcdb73d96e80c5dd06fc7", + "sha256:529c5b9e27fced27befce26e2699eca3110c576f6427dfbd26e30b7666b2d6d1", + "sha256:571da625b22e953731307539b44b2177f6ab13b6142d7698c0f28b9379ae1be6", + "sha256:5a9de89e2480b385a99613798d375e69a0a53d4575bd74b133307c8e83a84751", + "sha256:5bcc46cf89cb1036c2d029c01f360c82180329997a75728b20dc205f34114327", + "sha256:5dfa6238a6236f2bb3ecaac9befd23cee0bcbb9e497003fb3aef875e19325c61", + "sha256:6342b961b18037e3df8692e8914c576816a966bf29f913ee2728e7e838bde9bd", + "sha256:65e112c175a0b0328822dd0d19ead9ef1d7925359d154fb52e46b080945eef38", + "sha256:6f8a2b15c4dd58133e92f95d4312efd09b87ec15b881885629dff70e89f1e751", + "sha256:726f749444d1cc73c1bf221343dc6fdbde2541ffe30860d2d5ef6e310a1f5478", + "sha256:742f39cd807df31c21e035aec63f6f61e139a60545cffb16e8e87f61609d7cba", + "sha256:7840c18ec27aa08ecdd8ff23df348c124378c6f3edf9a0e02b16a5a4ce504c89", + "sha256:79d1de24d3c7345719af8333b64f19a8777dd50a059851bfcfa583c7109eddf2", + "sha256:7ba9303c5334d64b547483be92c4bbacd37964ff3abd0b1e8c82c63ec6f7b3ec", + "sha256:85587d9dfbd2f7f8622cf57f3c1a19cee441b5607a982cdf4c08ef38d45d5a36", + "sha256:8711b86e447e689d1b693419708b6ad64bf0c57091b94a3f65c6d4bd7cfb7d9a", + "sha256:877edc4db25309d86af07d992926394936f491cce84fce439961729552e942fe", + "sha256:8bb17669e362d3456bebd5c69abb0c26e8ab29c10894f123c715b0217aece479", + "sha256:8bb17a1e50e35a8d07cab784caea68b33f739391ccb5e3161afb9db0bde8faf4", + "sha256:8d4640a6bb3aa29797bdcf0c5bae4e86da5f2fbf84b67a7fad549fa34c19aa98", + "sha256:90697f3d9e4b3ddccfb31b40637bac6d44b39288cd57f78e51ff13e70916eccc", + "sha256:90f127f57c00b111ea3ffd95f4c12ad83efebd10310fd718d66771dd64e568f1", + "sha256:95f8f70bca1e880da7559ef38b7f1778a3b39b586fc829b8a7e989e912aa988f", + "sha256:9a60c102a01dfa8c5d737499c9a5d5e7c2b6642009c9b80b27f228ec50ce6fb0", + "sha256:9c7f1821ec749ea29bd9d079e4f13a552371731d0b664962a60cbb2f31d571b5", + "sha256:9f81ee66fadedbfd4d5c49e64151db3b6f353b041ddf5ab0b151340a4467e038", + "sha256:9f8e530e29e1afe9231b1100645aa5cc240b823c0e4162f70046270a3559400c", + "sha256:a0c647db3f156e8c94a63c1fa0fc4f2ce8b70f0eb12f2726e6c19493198b1e99", + "sha256:a0cda60607ab4ffc14fa8425ea7c9ae78ad60923c3c8be94d19c14f83198b1cf", + "sha256:a5bff397d49da302b5afbdf244dd7ca480a827f5de856d957df05dfd7e73b490", + "sha256:a94bd391b955b24948b2986845f9c6ad8abc709c2d57d0515daeacf16a2a3a4c", + "sha256:ad4572bd37c1a6a7a12ff47da4f3578a13e3c8ee85a1f02d2435dfdc6d9ed394", + "sha256:b13b7de1686f1b5da7526dc4f0de410a685f5cb654e984b09ddd8d14be6fffc0", + "sha256:b1724c43c5c0d08b68c3407467e07794b9adf153b6de8300d61883e8d95fa640", + "sha256:b27d29cb718df9ed006f8c75a89dd90534437761b2477dc7a4145bde0daa60fc", + "sha256:b3afa3a78b0f011ff5a09dea37d74fcea9269b318d2828f18b2fbf9dde625a71", + "sha256:bd6a61007e678284178bb00931af59f686a2a55797505e0886241050ec5c243c", + "sha256:befeca45fd7787c08a3286fb72caaccfa4c3962760981dfeb0992f5ba9be5cb2", + "sha256:c2d31b8233f406e00f180e221986f436765c3bb06839e72c898feca31fef1d4e", + "sha256:c3e2518ce442b70314892a594e21157deb13fbc436f77ad6555439cfd9912035", + "sha256:c8d5fbee607db24ef6c7b0bd08c21226d10782df4149b9d6f1f1516c7c85092b", + "sha256:cc2cc804998e852bdffcc87e8d008043ffa85efe6d3516d9784714d709f14774", + "sha256:cd8a681107c6118f60a0714671cec7b301533f25984a5c898e547a33a01af75c", + "sha256:d056831ebf3fa8116672ae970ad19a9f5f1427a2217cd0e01c1eaac5f8222668", + "sha256:d5ac3e8e3f66ff88819205dbc67e6f771cbb80529325ca9f3bc03fa00c5c83aa", + "sha256:dba15ca2da7859300ae79d2ea2eb8bb0eb827b93a2f104981783add16a97058a", + "sha256:de6cabb89248b60ea9bb9d7848de78dfb824abfdc15f52448a8efe821dd7d559", + "sha256:e02f6d1cc2005b847176dd8770fdfe90f04a34a3f094b79a8369bde0aa8f6a04", + "sha256:e514bd4b27c953c46485b2be0ecd2421aa196c5a0cd7d67f1ccec16a56b00507", + "sha256:e53464124379764f982a69f5ab34d0d5c527e8ac1e788db86a25f79045e5b18d", + "sha256:e9cf59660a543bef86de457c671c1d78ad2d88c53bb9eb3fce6ce0cb9729d490", + "sha256:edfc1bc732bc5e62fdaea268a541eb442d5e04927cb27dfd8e92ef07213658d2", + "sha256:ee8e7a66be70a18f5e0558f2f6a89e39c608f87b027234848f76a6699975dcf8", + "sha256:effb7072efef7dca10a98c24be0cc882a40edc78e293b41f5b6dc7f1952215ed", + "sha256:f04e4ee7e3c123ac7f21cee6f819cfa9b5a376e656257dfa7a4d133b3590bdd9", + "sha256:f0531c7abe963affebd3fb6cf9ea87eb8c63a0240535d81d0223945bd41be254", + "sha256:f5afd1c216315682a6bbf606618de0e3817ed8eeafc27ad7660ef2f581d4fd46", + "sha256:f93d3c74e00268ac6042c080653a34d0f0e8903697fd8dc480c1e3de81c90faf", + "sha256:fbc4e6452cc48c3e1398fe930349e2ec9ad76a2c00e729f3e797700c2f0646e6", + "sha256:fc73fc2889a01a43737c7a7c7fb9ee13aa56065b22abbed0e787cc58a3747808" + ], + "markers": "python_version >= '3.7'", + "version": "==1.4.2" }, "rdflib": { "hashes": [ - "sha256:5402310a9f0f3c07d453d73fd0ad6ba35616286fe95d3670db2b725f3f539673", - "sha256:f3dcb4c106a8cd9e060d92f43d593d09ebc3d07adc244f4c7315856a12e383ee" + "sha256:72f4adb1990fa5241abd22ddaf36d7cafa5d91d9ff2ba13f3086d339b213d997", + "sha256:fed46e24f26a788e2ab8e445f7077f00edcf95abb73bcef4b86cefa8b62dd174" ], "index": "pypi", "markers": "python_full_version >= '3.8.1' and python_full_version < '4.0.0'", - "version": "==7.1.3" + "version": "==7.1.4" }, "requests": { "hashes": [ @@ -1040,19 +1267,27 @@ }, "typing-extensions": { "hashes": [ - "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", - "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" + "sha256:0a4ac55a5820789d87e297727d229866c9650f6521b64206413c4fbada24d95b", + "sha256:c8dd92cc0d6425a97c18fbb9d1954e5ff92c1ca881a309c45f06ebc0b79058e5" ], "markers": "python_version >= '3.8'", - "version": "==4.12.2" + "version": "==4.13.0" + }, + "typing-inspection": { + "hashes": [ + "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f", + "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122" + ], + "markers": "python_version >= '3.9'", + "version": "==0.4.0" }, "tzdata": { "hashes": [ - "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694", - "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639" + "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", + "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9" ], "markers": "python_version >= '2'", - "version": "==2025.1" + "version": "==2025.2" }, "urllib3": { "hashes": [ @@ -1062,6 +1297,118 @@ "markers": "python_version >= '3.9'", "version": "==2.3.0" }, + "urllib3-future": { + "hashes": [ + "sha256:3adfa22c5718caee5ca69bc7f7461dc529f4396494d4d9b1db8af7c56cd3ac34", + "sha256:9cd79ce61da77b5d56681bc126f42955c2153e9c0da2f0a62bca8e0a05641f92" + ], + "markers": "python_version >= '3.7'", + "version": "==2.12.915" + }, + "verlib2": { + "hashes": [ + "sha256:2862f19528db400d130253a2b71c7c3616ee14e1d54bf6833bc0929d2cddd141", + "sha256:cf8e2be044b834a2670f2d4c20a93cfc674933c0070543a6f61d531439cca200" + ], + "markers": "python_version >= '3.6'", + "version": "==0.3.1" + }, + "wassima": { + "hashes": [ + "sha256:10508102696d5e2cf4df6942a8ae251c136a49dc32591e9c3f7dd007f5ea1c2f", + "sha256:1102836ba373912537eba891e7e5893532d4ee915ee2486e981b73f925f63c37", + "sha256:11887557464e0c3f9694fb16406bb56c1fb1566178cd04bfb5b4624fad183b31", + "sha256:12c855cc5b96a2ac32d405ab7de1563fc91be54108b4fb16b06d125d07ea892b", + "sha256:134e863b692c35afe8f5ccbe8082fa39963804e20439a4c7aa98510197034704", + "sha256:17f129f4d36591772d906bcc893b76b236363fda61b575067ddfa8250f84ad30", + "sha256:17f132ffbab294902f8740708f27fd995ea04182fe4b4fde20be563f8a010715", + "sha256:18bc78b2230c6f1f9ddbeb6ca38439fea4cc8f60836af4f3538ed259e60e5eb8", + "sha256:194c3fad38603618dec03307d10a4ece852516df56560e04fb2562506f79c175", + "sha256:1b18ec743ab98dcbfc221749026b23fc573891651342f20971e53bdbf56d28ae", + "sha256:1fa19a3652509edd18f693cd9c873d8f73c9d1624eae6c3bf93e561b18ae2766", + "sha256:24bdb1a2b90c215e11ed7ce82ed7eada339c7dca8e0366916e4e3215b3b9d8d3", + "sha256:27d518f0863788c826faf387326f3babb3ea95a0b908f5b3ad2bc1fcc3c5a37d", + "sha256:350b5854dfb3eeb95cd17723b0f3503de0c01454da5ae7d60f192be2009239eb", + "sha256:3b3a4c8ffa76147507f0c88c5cc8c76ef96ab93b81e49b288a3a0b94ebfb34af", + "sha256:3e00fa8ff1aef7d8aad2e1b957add6cba8549a42e415400bd72ff1b61dc9da9d", + "sha256:3f29045dd0a7c287f850f1dc3948632a2d2cf7dd7ec02271c5f248f058da5650", + "sha256:4a528244e4a0f9e01b8593b1c8a60ac1d80ce8b13fe079f44b38328e4be075e3", + "sha256:4c4f5ca102fd083aa2b05c65a1fd18175e3dc7a889525fd2964219ee3c51edef", + "sha256:52358d86195954816231d2aa8c2919b85075320b6d3ba5b96216985c3182bfa0", + "sha256:52f473233ec4d57322c6295e85b3912dc1fc400d6308a04bd427b863934aa74e", + "sha256:556cded582aef3089de889b5a6efcf6d87fabfec55d574fcc3a4ada21308d487", + "sha256:564eda7bf0420c8cbebe5e8efc15f1b27fdcb37ebc4c2f92b8461ca83381b223", + "sha256:57a0ab5aed596f129fd4ea7584336b11fbef25c07d1351e37a959901dea8728e", + "sha256:58f1fddd660da8c8f30f4b8460129e2f217c226cd1b54b1cabb6465881fd788a", + "sha256:597b0d8ba697f4319bc1f301ed31630ca783c9fe82d2a2434dd2f7f709c4e394", + "sha256:5b194f0de77a4ae7bcf217a3ccd10798e94ca430cec6307628098a61cd2ac230", + "sha256:5f5ee564f4b836ed1b70ddb187c817e8f6f1ffb521a636bb20676f07b523396b", + "sha256:601f96340e4c8071994a39a76d4278e8e1d087cf385781dba795c5334262d865", + "sha256:61bfa09f38c36f1b1e6e44e7af888bb8f9d739e86099082a3b45875651a425e2", + "sha256:67fd323b8ad0e057c06b153983d8c50f812aad979ac89b07ed6952c345f6da02", + "sha256:69cb51f629d118256da3d2373575190c7e30d3fa67c344dc655f6c8ab3e83f0d", + "sha256:6b1d7ceeede8d8eed48616d2d33ed23d2dff307d0b17c577eafdadafe86a0478", + "sha256:6b7d696155ddd7ab5739ac221e8854115d0d8171bbf805074d9484083de386aa", + "sha256:6d23e9483756b81850b82e8b7ed20fd23de22b50d6a678f765c660d4206b7ce9", + "sha256:7b0229fecc849234f2a2d11e948ac38a9bab02d201fa4d6ad43c143e18c1a66e", + "sha256:7c53050b670d702eed541503175bd5441fc4bdf3898714f8eac8c6ae9db548ac", + "sha256:7d65676f1fc138d1742f704bf490045571b9c2c48cab7d2c2076a52729c143e5", + "sha256:7db25328c40cd574e5a68ef6507c5af4d1fa2a44cb3c028ff9ca6b522f8faf32", + "sha256:83ce1b09e9eb2ae033c303b74ecc4f3186bbc0897db1d8cd9942153b0631b8e0", + "sha256:86c509900cbb90b7b75155c580b22af591b696fa059059bcdbd75bc74179df85", + "sha256:87f80d0075f0d396b73d41bb1626a2dd5607e0db4b74cb17e55d874fcd538971", + "sha256:8b719755d556649f2fbf226cf1ca8581ade114751df1facec96f94e75bffdb3c", + "sha256:8e739d4192758df6e5363791f527deb91c615d63020ee8965df4bcd1a217f9a5", + "sha256:923d3bf8770dfeb3d94bdfee1c5b5a081592de69766436a395e1e6203c19cf71", + "sha256:97772bb55cb47da3de49ca4b59309a9bd91ead730a7cfac1992932486fb41352", + "sha256:98bdfdf734144277132f34f770eeb6b0db2c4de87415f34b178adee766632f24", + "sha256:98f38b1b01e6f270b9279d76261d6f222b72ef06b025cbd4911b962bb6de4c98", + "sha256:99318b5ea78843e3c3e19cd56367216774674a99848f00a6f2dcf84e36039641", + "sha256:9c623ef06876d432dc8acc93ed3494d3453333d767b1b06bba1a016ea9d850c9", + "sha256:9d0f9720dfd0155432d23bcc3605fe5831cd0f586ede4f14ff6f3bebe8fb867a", + "sha256:9e79216760faac6395bee8ca4077a53a309312faba0f71982127ad8625861780", + "sha256:a470c908fd9baaecf41715ea3c30c57b530d598ae5e9de7e0bd532755e66bb1b", + "sha256:a634b9b79e059f45a56ff3ef6e7241662bc6f0e5a096ee6eed6770ea368e8278", + "sha256:acd8195a53d0e84ea95bdf15a2651c53b829a3ddead21b4a620b6a0c5e1ae2ff", + "sha256:addbd207df3718fc9d9de5b6c90a5e3fbe667830cf629186c9fdcafbb6578cb4", + "sha256:ae2aec9d55e108ae2d22fd0bda24450a6c13c116f9698b9e7ba2c6492c4fe715", + "sha256:af6b70ca9788964c5da5b59ca412b62db2ea7f2386a91c0117667bdd963e828c", + "sha256:afa7d60a9203db36a55b6f2868da90aaa829ab415a21fba7fa75678789aeb16f", + "sha256:b08c1931c44e3c034e645f3e3a7f4c47e8b0758fb8f09a52d1e880a307a1066f", + "sha256:b22e356914e606ff398c002b9925df4454c5deca9dbe55b3ba4a5c9b2365cf0f", + "sha256:b8c0f50397c51086df941b48057c82f85d9da000bf4fe6f4bc64c4f649b26a5b", + "sha256:bc068bcd79fe017866f536e0ad9424793220be34e3124476e17e6cb77a97e690", + "sha256:bc30f5a605a366acb7f301b3421508eaec3c1a515c960791bd776cb63d016302", + "sha256:c0d246b3f8a771578279eab9cfcb820dedefd3dd5dc0e34b37a337fe46271fc0", + "sha256:c0fee0a8593028bde17b57527b1ac21fea74f209b3522363e3ba0197ffaa6323", + "sha256:c139d5b103bb1f085d8918815d62ad946224a658ac1a7cc1b93dc44bd498ff9a", + "sha256:c25235cec12c0e38b4104268e312c9c2f3527ebc126d296cff69ea7aa13434dc", + "sha256:c7429d038dc383966c692e752010cbb4d5dab0e515f231aa01cd746aed9db359", + "sha256:c85cd2e64967c0dce2927ad7c62c090aae6d6b7f9e3a6b9fb91f58b890ea6adc", + "sha256:ca04984df012020dd846599b8555666c544982c2a91dc6135565e6708624eb71", + "sha256:cb7d43c07d58ba13736e70dc3e064496efeb1ed4475a28afb26b7a3b030b89df", + "sha256:d018e05cb61eed3050d45bd0c0ef9b75420899f6ae254e68e7f2ef26975098c9", + "sha256:d24d42881eb74729b34014e2e87f3a4d0419c43db309de2dff3f39118716865f", + "sha256:d6e17f218af856ca22c30d1a1ac58b19bccf768b8589eb8d6e45e1f1ff258404", + "sha256:d855d0be1759c5efc404c04977ee48a8b6260aef6441e72c10973924dbde5a73", + "sha256:dea0dcc0e50978ef73be8cb384694b71a6e64b46847ee7decad96dc85fbf650c", + "sha256:e1e9228049cf2442ac486a03a0d543c5dff3089a915a3e39ab809b22672e1d76", + "sha256:e26d052a248d5be2257d848d6078d932cc1fd4e8226639f550344d0a7a2b8813", + "sha256:ee6ccb8197936a308a4034c90a42b30b37c46b7cbda66101d439d6983f59b368", + "sha256:eea9c37b45e73cebb4670afd1779db138eeff0f84ffc0871d2fb90c04c8d3aa8", + "sha256:f195bf641276261e6bc5f79f52601850c9bdbff8af401483b4805dbff535ed30", + "sha256:f264827618400ebeab16708c8acf7870f693b03bfb4d7e95253eb9b35074db5c", + "sha256:f44ccd2eaa433ff1a10f70242dc33315fc192b81664696154127bdd66ad7d3b2", + "sha256:f7a6068d8857c403e105e62132a00e9d9d401bd0efbff7f8b5b5bc8ab768a2d8", + "sha256:f9886176fe4bf1ac008c02adb5bd103f1191799f1897777d203ee44f615325a5", + "sha256:fa1f38d5583d283b40f998e2f13471bfa952e0c423ff95ec2ec329f3e1898107", + "sha256:fa65494e7bd0e3ba33b3e5a5ab30c2b6e95d3d1762baaa56151a0861618dc261", + "sha256:fd7186e23963714bab3c9a2ab75d002078335110d2c9fc883c65cbce43717f26", + "sha256:fec32c22b521fcdeb9aa7dee4373b2d81ca2d3fc8edc532f3e189d6f4f6f1f81" + ], + "markers": "python_version >= '3.7'", + "version": "==1.2.2" + }, "werkzeug": { "hashes": [ "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", @@ -1426,73 +1773,73 @@ }, "coverage": { "hashes": [ - "sha256:056d3017ed67e7ddf266e6f57378ece543755a4c9231e997789ab3bd11392c94", - "sha256:0ce8cf59e09d31a4915ff4c3b94c6514af4c84b22c4cc8ad7c3c546a86150a92", - "sha256:104bf640f408f4e115b85110047c7f27377e1a8b7ba86f7db4fa47aa49dc9a8e", - "sha256:1393e5aa9441dafb0162c36c8506c648b89aea9565b31f6bfa351e66c11bcd82", - "sha256:1586ad158523f4133499a4f322b230e2cfef9cc724820dbd58595a5a236186f4", - "sha256:180e3fc68ee4dc5af8b33b6ca4e3bb8aa1abe25eedcb958ba5cff7123071af68", - "sha256:1b336d06af14f8da5b1f391e8dec03634daf54dfcb4d1c4fb6d04c09d83cef90", - "sha256:1c8fbce80b2b8bf135d105aa8f5b36eae0c57d702a1cc3ebdea2a6f03f6cdde5", - "sha256:2d673e3add00048215c2cc507f1228a7523fd8bf34f279ac98334c9b07bd2656", - "sha256:316f29cc3392fa3912493ee4c83afa4a0e2db04ff69600711f8c03997c39baaa", - "sha256:33c1394d8407e2771547583b66a85d07ed441ff8fae5a4adb4237ad39ece60db", - "sha256:37cbc7b0d93dfd133e33c7ec01123fbb90401dce174c3b6661d8d36fb1e30608", - "sha256:39abcacd1ed54e2c33c54bdc488b310e8ef6705833f7148b6eb9a547199d375d", - "sha256:3ab7090f04b12dc6469882ce81244572779d3a4b67eea1c96fb9ecc8c607ef39", - "sha256:3b0e6e54591ae0d7427def8a4d40fca99df6b899d10354bab73cd5609807261c", - "sha256:416e2a8845eaff288f97eaf76ab40367deafb9073ffc47bf2a583f26b05e5265", - "sha256:4545485fef7a8a2d8f30e6f79ce719eb154aab7e44217eb444c1d38239af2072", - "sha256:4c124025430249118d018dcedc8b7426f39373527c845093132196f2a483b6dd", - "sha256:4fbb7a0c3c21908520149d7751cf5b74eb9b38b54d62997b1e9b3ac19a8ee2fe", - "sha256:52fc89602cde411a4196c8c6894afb384f2125f34c031774f82a4f2608c59d7d", - "sha256:55143aa13c49491f5606f05b49ed88663446dce3a4d3c5d77baa4e36a16d3573", - "sha256:57f3bd0d29bf2bd9325c0ff9cc532a175110c4bf8f412c05b2405fd35745266d", - "sha256:5b2f144444879363ea8834cd7b6869d79ac796cb8f864b0cfdde50296cd95816", - "sha256:5efdeff5f353ed3352c04e6b318ab05c6ce9249c25ed3c2090c6e9cadda1e3b2", - "sha256:60e6347d1ed882b1159ffea172cb8466ee46c665af4ca397edbf10ff53e9ffaf", - "sha256:693d921621a0c8043bfdc61f7d4df5ea6d22165fe8b807cac21eb80dd94e4bbd", - "sha256:708f0a1105ef2b11c79ed54ed31f17e6325ac936501fc373f24be3e6a578146a", - "sha256:70f0925c4e2bfc965369f417e7cc72538fd1ba91639cf1e4ef4b1a6b50439b3b", - "sha256:7789e700f33f2b133adae582c9f437523cd5db8de845774988a58c360fc88253", - "sha256:7b6c96d69928a3a6767fab8dc1ce8a02cf0156836ccb1e820c7f45a423570d98", - "sha256:7d2a65876274acf544703e943c010b60bd79404e3623a1e5d52b64a6e2728de5", - "sha256:7f18d47641282664276977c604b5a261e51fefc2980f5271d547d706b06a837f", - "sha256:89078312f06237417adda7c021c33f80f7a6d2db8572a5f6c330d89b080061ce", - "sha256:8c938c6ae59be67ac19a7204e079efc94b38222cd7d0269f96e45e18cddeaa59", - "sha256:8e336b56301774ace6be0017ff85c3566c556d938359b61b840796a0202f805c", - "sha256:a0a207c87a9f743c8072d059b4711f8d13c456eb42dac778a7d2e5d4f3c253a7", - "sha256:a2454b12a3f12cc4698f3508912e6225ec63682e2ca5a96f80a2b93cef9e63f3", - "sha256:a538a23119d1e2e2ce077e902d02ea3d8e0641786ef6e0faf11ce82324743944", - "sha256:aa4dff57fc21a575672176d5ab0ef15a927199e775c5e8a3d75162ab2b0c7705", - "sha256:ad0edaa97cb983d9f2ff48cadddc3e1fb09f24aa558abeb4dc9a0dbacd12cbb4", - "sha256:ae8006772c6b0fa53c33747913473e064985dac4d65f77fd2fdc6474e7cd54e4", - "sha256:b0fac2088ec4aaeb5468b814bd3ff5e5978364bfbce5e567c44c9e2854469f6c", - "sha256:b3e212a894d8ae07fde2ca8b43d666a6d49bbbddb10da0f6a74ca7bd31f20054", - "sha256:b54a1ee4c6f1905a436cbaa04b26626d27925a41cbc3a337e2d3ff7038187f07", - "sha256:b667b91f4f714b17af2a18e220015c941d1cf8b07c17f2160033dbe1e64149f0", - "sha256:b8c36093aca722db73633cf2359026ed7782a239eb1c6db2abcff876012dc4cf", - "sha256:bb356e7ae7c2da13f404bf8f75be90f743c6df8d4607022e759f5d7d89fe83f8", - "sha256:bce730d484038e97f27ea2dbe5d392ec5c2261f28c319a3bb266f6b213650135", - "sha256:c075d167a6ec99b798c1fdf6e391a1d5a2d054caffe9593ba0f97e3df2c04f0e", - "sha256:c4e09534037933bf6eb31d804e72c52ec23219b32c1730f9152feabbd7499463", - "sha256:c5f8a5364fc37b2f172c26a038bc7ec4885f429de4a05fc10fdcb53fb5834c5c", - "sha256:cb203c0afffaf1a8f5b9659a013f8f16a1b2cad3a80a8733ceedc968c0cf4c57", - "sha256:cc41374d2f27d81d6558f8a24e5c114580ffefc197fd43eabd7058182f743322", - "sha256:cd879d4646055a573775a1cec863d00c9ff8c55860f8b17f6d8eee9140c06166", - "sha256:d013c07061751ae81861cae6ec3a4fe04e84781b11fd4b6b4201590234b25c7b", - "sha256:d8c7524779003d59948c51b4fcbf1ca4e27c26a7d75984f63488f3625c328b9b", - "sha256:d9710521f07f526de30ccdead67e6b236fe996d214e1a7fba8b36e2ba2cd8261", - "sha256:e1ffde1d6bc2a92f9c9207d1ad808550873748ac2d4d923c815b866baa343b3f", - "sha256:e7f559c36d5cdc448ee13e7e56ed7b6b5d44a40a511d584d388a0f5d940977ba", - "sha256:f2a1e18a85bd066c7c556d85277a7adf4651f259b2579113844835ba1a74aafd", - "sha256:f32b165bf6dfea0846a9c9c38b7e1d68f313956d60a15cde5d1709fddcaf3bee", - "sha256:f5a2f71d6a91238e7628f23538c26aa464d390cbdedf12ee2a7a0fb92a24482a", - "sha256:f81fe93dc1b8e5673f33443c0786c14b77e36f1025973b85e07c70353e46882b" + "sha256:042e7841a26498fff7a37d6fda770d17519982f5b7d8bf5278d140b67b61095f", + "sha256:04bfec25a8ef1c5f41f5e7e5c842f6b615599ca8ba8391ec33a9290d9d2db3a3", + "sha256:0915742f4c82208ebf47a2b154a5334155ed9ef9fe6190674b8a46c2fb89cb05", + "sha256:18c5ae6d061ad5b3e7eef4363fb27a0576012a7447af48be6c75b88494c6cf25", + "sha256:2931f66991175369859b5fd58529cd4b73582461877ecfd859b6549869287ffe", + "sha256:2e4b6b87bb0c846a9315e3ab4be2d52fac905100565f4b92f02c445c8799e257", + "sha256:3043ba1c88b2139126fc72cb48574b90e2e0546d4c78b5299317f61b7f718b78", + "sha256:379fe315e206b14e21db5240f89dc0774bdd3e25c3c58c2c733c99eca96f1ada", + "sha256:42421e04069fb2cbcbca5a696c4050b84a43b05392679d4068acbe65449b5c64", + "sha256:4dfd9a93db9e78666d178d4f08a5408aa3f2474ad4d0e0378ed5f2ef71640cb6", + "sha256:52a523153c568d2c0ef8826f6cc23031dc86cffb8c6aeab92c4ff776e7951b28", + "sha256:554fec1199d93ab30adaa751db68acec2b41c5602ac944bb19187cb9a41a8067", + "sha256:581a40c7b94921fffd6457ffe532259813fc68eb2bdda60fa8cc343414ce3733", + "sha256:5a26c0c795c3e0b63ec7da6efded5f0bc856d7c0b24b2ac84b4d1d7bc578d676", + "sha256:5a570cd9bd20b85d1a0d7b009aaf6c110b52b5755c17be6962f8ccd65d1dbd23", + "sha256:5aaeb00761f985007b38cf463b1d160a14a22c34eb3f6a39d9ad6fc27cb73008", + "sha256:5ac46d0c2dd5820ce93943a501ac5f6548ea81594777ca585bf002aa8854cacd", + "sha256:5c8a5c139aae4c35cbd7cadca1df02ea8cf28a911534fc1b0456acb0b14234f3", + "sha256:6b8af63b9afa1031c0ef05b217faa598f3069148eeee6bb24b79da9012423b82", + "sha256:769773614e676f9d8e8a0980dd7740f09a6ea386d0f383db6821df07d0f08545", + "sha256:771eb7587a0563ca5bb6f622b9ed7f9d07bd08900f7589b4febff05f469bea00", + "sha256:77af0f6447a582fdc7de5e06fa3757a3ef87769fbb0fdbdeba78c23049140a47", + "sha256:7a3d62b3b03b4b6fd41a085f3574874cf946cb4604d2b4d3e8dca8cd570ca501", + "sha256:821f7bcbaa84318287115d54becb1915eece6918136c6f91045bb84e2f88739d", + "sha256:89b1f4af0d4afe495cd4787a68e00f30f1d15939f550e869de90a86efa7e0814", + "sha256:8a1d96e780bdb2d0cbb297325711701f7c0b6f89199a57f2049e90064c29f6bd", + "sha256:8a40fcf208e021eb14b0fac6bdb045c0e0cab53105f93ba0d03fd934c956143a", + "sha256:8f99eb72bf27cbb167b636eb1726f590c00e1ad375002230607a844d9e9a2318", + "sha256:90e7fbc6216ecaffa5a880cdc9c77b7418c1dcb166166b78dbc630d07f278cc3", + "sha256:94ec0be97723ae72d63d3aa41961a0b9a6f5a53ff599813c324548d18e3b9e8c", + "sha256:95aa6ae391a22bbbce1b77ddac846c98c5473de0372ba5c463480043a07bff42", + "sha256:96121edfa4c2dfdda409877ea8608dd01de816a4dc4a0523356067b305e4e17a", + "sha256:a1f406a8e0995d654b2ad87c62caf6befa767885301f3b8f6f73e6f3c31ec3a6", + "sha256:a321c61477ff8ee705b8a5fed370b5710c56b3a52d17b983d9215861e37b642a", + "sha256:a5761c70c017c1b0d21b0815a920ffb94a670c8d5d409d9b38857874c21f70d7", + "sha256:a9abbccd778d98e9c7e85038e35e91e67f5b520776781d9a1e2ee9d400869487", + "sha256:ad80e6b4a0c3cb6f10f29ae4c60e991f424e6b14219d46f1e7d442b938ee68a4", + "sha256:b44674870709017e4b4036e3d0d6c17f06a0e6d4436422e0ad29b882c40697d2", + "sha256:b571bf5341ba8c6bc02e0baeaf3b061ab993bf372d982ae509807e7f112554e9", + "sha256:b8194fb8e50d556d5849753de991d390c5a1edeeba50f68e3a9253fbd8bf8ccd", + "sha256:b87eb6fc9e1bb8f98892a2458781348fa37e6925f35bb6ceb9d4afd54ba36c73", + "sha256:bbb5cc845a0292e0c520656d19d7ce40e18d0e19b22cb3e0409135a575bf79fc", + "sha256:be945402e03de47ba1872cd5236395e0f4ad635526185a930735f66710e1bd3f", + "sha256:bf13d564d310c156d1c8e53877baf2993fb3073b2fc9f69790ca6a732eb4bfea", + "sha256:cf60dd2696b457b710dd40bf17ad269d5f5457b96442f7f85722bdb16fa6c899", + "sha256:d1ba00ae33be84066cfbe7361d4e04dec78445b2b88bdb734d0d1cbab916025a", + "sha256:d39fc4817fd67b3915256af5dda75fd4ee10621a3d484524487e33416c6f3543", + "sha256:d766a4f0e5aa1ba056ec3496243150698dc0481902e2b8559314368717be82b1", + "sha256:dbf364b4c5e7bae9250528167dfe40219b62e2d573c854d74be213e1e52069f7", + "sha256:dd19608788b50eed889e13a5d71d832edc34fc9dfce606f66e8f9f917eef910d", + "sha256:e013b07ba1c748dacc2a80e69a46286ff145935f260eb8c72df7185bf048f502", + "sha256:e5d2b9be5b0693cf21eb4ce0ec8d211efb43966f6657807f6859aab3814f946b", + "sha256:e5ff52d790c7e1628241ffbcaeb33e07d14b007b6eb00a19320c7b8a7024c040", + "sha256:e75a2ad7b647fd8046d58c3132d7eaf31b12d8a53c0e4b21fa9c4d23d6ee6d3c", + "sha256:e7ac22a0bb2c7c49f441f7a6d46c9c80d96e56f5a8bc6972529ed43c8b694e27", + "sha256:ed2144b8a78f9d94d9515963ed273d620e07846acd5d4b0a642d4849e8d91a0c", + "sha256:f017a61399f13aa6d1039f75cd467be388d157cd81f1a119b9d9a68ba6f2830d", + "sha256:f1d8a2a57b47142b10374902777e798784abf400a004b14f1b0b9eaf1e528ba4", + "sha256:f2d32f95922927186c6dbc8bc60df0d186b6edb828d299ab10898ef3f40052fe", + "sha256:f319bae0321bc838e205bf9e5bc28f0a3165f30c203b610f17ab5552cff90323", + "sha256:f3c38e4e5ccbdc9198aecc766cedbb134b2d89bf64533973678dfcf07effd883", + "sha256:f9983d01d7705b2d1f7a95e10bbe4091fabc03a46881a256c2787637b087003f", + "sha256:fa260de59dfb143af06dcf30c2be0b200bed2a73737a8a59248fcb9fa601ef0f" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==7.7.0" + "version": "==7.8.0" }, "cryptography": { "hashes": [ @@ -1545,11 +1892,11 @@ }, "iniconfig": { "hashes": [ - "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", - "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" + "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", + "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760" ], - "markers": "python_version >= '3.7'", - "version": "==2.0.0" + "markers": "python_version >= '3.8'", + "version": "==2.1.0" }, "jwt": { "hashes": [ diff --git a/dbrepo-search-service/init/app.py b/dbrepo-search-service/init/app.py index f8f671bade..48a59538e0 100644 --- a/dbrepo-search-service/init/app.py +++ b/dbrepo-search-service/init/app.py @@ -4,10 +4,9 @@ import os from logging.config import dictConfig from typing import List -import opensearchpy.exceptions from dbrepo.RestClient import RestClient from dbrepo.api.dto import Database -from opensearchpy import OpenSearch +from dbrepo.core.client.search import SearchServiceClient level = os.getenv("LOG_LEVEL", "DEBUG").upper() logging.basicConfig(level=level) @@ -34,84 +33,35 @@ dictConfig({ } }) +search_client = SearchServiceClient(host=os.getenv("OPENSEARCH_HOST", "search-db"), + port=int(os.getenv("OPENSEARCH_PORT", "9200")), + username=os.getenv("OPENSEARCH_USERNAME", "admin"), + password=os.getenv("OPENSEARCH_PASSWORD", "admin")) -class App: - """ - The client to communicate with the OpenSearch database. - """ - metadata_service_endpoint: str = None - search_host: str = None - search_port: int = None - search_username: str = None - search_password: str = None - search_instance: OpenSearch = None - system_username: str = None - system_password: str = None +rest_client = RestClient(endpoint=os.getenv("METADATA_SERVICE_ENDPOINT", "http://metadata-service:8080"), + username=os.getenv("SYSTEM_USERNAME", "admin"), + password=os.getenv("SYSTEM_PASSWORD", "admin")) - def __init__(self): - self.metadata_service_endpoint = os.getenv("METADATA_SERVICE_ENDPOINT", "http://metadata-service:8080") - self.search_host = os.getenv("OPENSEARCH_HOST", "search-db") - self.search_port = int(os.getenv("OPENSEARCH_PORT", "9200")) - self.search_username = os.getenv("OPENSEARCH_USERNAME", "admin") - self.search_password = os.getenv("OPENSEARCH_PASSWORD", "admin") - self.system_username = os.getenv("SYSTEM_USERNAME", "admin") - self.system_password = os.getenv("SYSTEM_PASSWORD", "admin") - def _instance(self) -> OpenSearch: - """ - Wrapper method to get the instance singleton. +def fetch_databases() -> List[Database]: + databases = [] + for index, database in enumerate(rest_client.get_databases()): + database = rest_client.get_database(database_id=database.id) + logging.debug(f'fetch database details with id: {database.id}') + databases.append(database) + logging.debug(f'fetched {len(databases)} database(s)') + return databases - @returns: The opensearch instance singleton, if successful. - """ - if self.search_instance is None: - self.search_instance = OpenSearch(hosts=[{"host": self.search_host, "port": self.search_port}], - http_compress=True, - http_auth=(self.search_username, self.search_password)) - logging.debug(f"create instance {self.search_host}:{self.search_port}") - return self.search_instance - def database_exists(self, database_id: int): - try: - self._instance().get(index="database", id=database_id) - return True - except opensearchpy.exceptions.NotFoundError: - return False - - def index_update(self) -> None: - if self._instance().indices.exists(index="database"): - logging.debug(f"index 'database' exists, removing...") - self._instance().indices.delete(index="database") - with open('./database.json', 'r') as f: - self._instance().indices.create(index="database", body=json.load(f)) - logging.info(f"Created index 'database'") - - def fetch_databases(self) -> List[Database]: - logging.debug(f"fetching database from endpoint: {self.metadata_service_endpoint}") - client = RestClient(endpoint=self.metadata_service_endpoint, username=self.system_username, - password=self.system_password) - databases = [] - for index, database in enumerate(client.get_databases()): - logging.debug(f"fetching database {index}/{len(databases)} details for database id: {database.id}") - databases.append(client.get_database(database_id=database.id)) - logging.debug(f"fetched {len(databases)} database(s)") - return databases - - def save_databases(self, databases: List[Database]): - index = f'database' - logging.debug(f"save {len(databases)} database(s) in index: {index}") - for doc in databases: - doc: Database = doc - try: - self._instance().delete(index=index, id=doc.id) - logging.debug(f"truncated database with id {doc.id} in index: {index}") - except opensearchpy.NotFoundError: - pass - self._instance().create(index=index, id=doc.id, body=doc.model_dump()) - logging.info(f"Saved database with id {doc.id} in index: {index}") +def save_databases(databases: List[Database]): + logging.debug(f"save {len(databases)} database(s)") + for doc in databases: + search_client.save_database(database_id=doc.id, data=doc) + logging.info(f"Saved database with id {doc.id}") if __name__ == "__main__": - app = App() - update = app.index_update() - app.save_databases(databases=app.fetch_databases()) + with open('./database.json', 'r') as f: + search_client.index_update(mapping=json.load(f)) + save_databases(databases=fetch_databases()) logging.info("Finished. Exiting.") diff --git a/dbrepo-search-service/init/clients/keycloak_client.py b/dbrepo-search-service/init/clients/keycloak_client.py deleted file mode 100644 index e8c277601b..0000000000 --- a/dbrepo-search-service/init/clients/keycloak_client.py +++ /dev/null @@ -1,56 +0,0 @@ -import logging -import os -from dataclasses import dataclass -from typing import List - -import requests -from dbrepo.api.dto import ApiError -from jwt import jwk_from_pem, JWT -from jwt.exceptions import JWTDecodeError - - -@dataclass(init=True, eq=True) -class User: - id: str - username: str - roles: List[str] - - -class KeycloakClient: - - def obtain_user_token(self, username: str, password: str) -> str: - response = requests.post( - f"{os.getenv('AUTH_SERVICE_ENDPOINT', 'http://auth-service:8080')}/realms/dbrepo/protocol/openid-connect/token", - data={ - "username": username, - "password": password, - "grant_type": "password", - "client_id": os.getenv("AUTH_SERVICE_CLIENT", "dbrepo-client"), - "client_secret": os.getenv("AUTH_SERVICE_CLIENT_SECRET", "MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG") - }) - body = response.json() - if "access_token" not in body: - raise AssertionError("Failed to obtain user token(s)") - return response.json()["access_token"] - - def verify_jwt(self, access_token: str) -> ApiError | User: - public_key = jwk_from_pem(str('-----BEGIN PUBLIC KEY-----\n' + os.getenv("JWT_PUBKEY", - "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB") + '\n-----END PUBLIC KEY-----').encode( - 'utf-8')) - payload = JWT().decode(message=access_token, key=public_key, do_time_check=True) - return User(id=payload.get('uid'), username=payload.get('client_id'), - roles=payload.get('realm_access')["roles"]) - - def userId(self, auth_header: str | None) -> (str | None, ApiError, int): - if auth_header is None: - return None, None, None - try: - user = self.verify_jwt(auth_header.split(" ")[1]) - logging.debug(f'mapped JWT to user.id {user.id}') - return user.id, None, None - except JWTDecodeError as e: - logging.error(f'Failed to decode JWT: {e}') - if str(e) == 'JWT Expired': - return None, ApiError(status='UNAUTHORIZED', message=f'Token expired', - code='search.user.unauthorized').model_dump(), 401 - return None, ApiError(status='FORBIDDEN', message=str(e), code='search.user.forbidden').model_dump(), 403 diff --git a/dbrepo-search-service/init/lib/dbrepo-1.7.2.tar.gz b/dbrepo-search-service/init/lib/dbrepo-1.7.2.tar.gz deleted file mode 100644 index 12cef6f73928370726f75f4f3909aa6510049543..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49700 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 diff --git a/dbrepo-search-service/init/lib/dbrepo-1.7.3-py3-none-any.whl b/dbrepo-search-service/init/lib/dbrepo-1.7.3-py3-none-any.whl deleted file mode 100644 index c1a74fe8c7e3f602651db9b6c30a5f7dcf17d97b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32568 zcmWIWW@Zs#U|`^2XzU7$Vo`9h+``PjkjBlx01{0}DoQQL*LTb<EO5@rOwB9NE2x|r zmfL;XLg3%KctaL184uR*9dbH5CcImA=TPb7wC&-1d_772GIvi+(mt8_{r-HF+aFJB zKD-vc=uD5?S>t>mZS9pj9<m$LLN})0TKn~M<e&a&i=vAoMSMg8O9D2v)U4kysU@uE z!Fe9-!%Hq)n6)me*d;N-ZEnTdDItMZ-l<owiY(JU+9>+ban+<*DgV@#SsAZ6(%NRe zaY5O~Z_~^3&VFp!Be<vhzxS0{V%PHav8?yDy7Rl;e|9QMqrY_P79Sn`MZS93n>!Y1 zJPyf@n0kM8^tm;g&Ffz0n0?;w?=JIVf#J4$PHLw&iOrj-@qpdfeM8K{caP7tF^A3H zpOd(CFT3*Yh$mM9n6%F=Ty*M_!3vX<kOOj#iy2RCZQ1{Kp}HI6(N0ZGuku%&T5jKE zz6wncIWl|k3GI_>F3IQi$L5>A{Pi$z_s;qXr4Q5B*zT}d7^LI=J|-<VIb^Qn>;DHj zpItC+eQ;9clbd;+^qZ+QZd2u!nwk4{Sncz3NqBs^p@^xxVu9)QFk?OAQ**1_m;&@% zgf-N;oc{j$x4rx{LtE+XD^uF<WQB&`$$nMwCVFk)&PlTyN*^&^C<ssWe$pQDbBdq# zymzm(az%n?t9d+d<dS(cOJU~{bvq8{yEFcz)cdC_dQmH@u}AGV^Ab(rGfOhpOq6HR z6)mW&^ZWegQ=4Z0>1m2#pVdMY{|KCKi0t^vbg%A1_w3DklYQA_)-JuWB$q#ELFaS5 z-7C-L{rdgv<4M0ojbD{I9=jhDo%1%${6OI~TR!WUd*7e`efRS9tNvsCtOmSJvpDCk z)Ia<n?sH~OZJYDD|MnFQR(<}{cV+k0)W*D*3!8u4%wg_Nl~b{4>)R^6{`ir*dG}_G zxjz@J|GDa3@v?s3lg*o^x6FP2(s<vGq{v@}^PcD!mx=v9(-$IQp?k(bv()$9zT9G_ ztp2BY99*o{3oV$xZQe0)dtAfUMS+1gZrfFt8ChRuP0L%bMfq0kTNSCw_iYy$I(&NP z8uw1!zjE2Dd25U<t8bk-$emnr>W<h4i|gBbV&@#V=l=N1)~>=z%~K|A_e4G>e(N;q z+sU2QdTOtl!^7`Vcdsm1%o}%3<k{wZC2Zx1kK!Gke3QBQHd1`|BHv}si7(%;Ou6;= zA^VA``8Om_E_JIi%}VREdiSkxVnq@&<ISQ|M{@N$+)q}1ja>iR?PuJVoiASRJbm=| zwkyBq9H~9TCY|fZ^`z|j0@bL*Kk}QOeVti$_ukdwOS*1r=kr`EGdul9wU9q)()HA( z$=CH9nN%JJEw=p~kDAMQ-{^M8Gcz!lbD-pM-@=j-crLFE&CR}T0LtZsEM77NM|U}D zHu7vTOZ|I6#oOpuLW0QeM;TL9!zW$-df$K2+arZ{pLwU;y<2>KZ`ae-5Vj?J5v7;b zAAcOL>stKG==6*ev(7iYQ$0DqSCKPagC~IZoiRt5*Ru(EqGFRSGztEho{%_0L@Mic zX6CnREvi>y&rg}8#gSFBY3VH0?LluM#NI7AwQ?qpzSAn<!$mTgJ2+Ukwx3>o{@t06 z4SRO&D7$Z&<!ij!yyw7aHQslJ|I`VxUif_3P4TR{S>7UFEpKD4CWVI~*%ey^@BaF6 z>|Tk1#E<`H<)V#NOwo<@NSQbNkh_{uMPeGiS=f%>+cv#yI4(b%*JnC^LdxXsDN<eu zr*@uQv8hlZL`q02p?kr_WmB^`>-St{Ufl5Lz!Z_4pQ{#hUDS1#Wt`MgQ7V$DI8(Ih z`n9(?J3G=p?|%9yai8Lc=xK5>asist7O79aaY-Un?bxUMi7V#FIluVo!?fPyTiS-u zPn@B9rr+vWEn@m{mo^jkeYPpWI}Xe0?z}2hFf-uY5#~$GPlK*B7KQH(2sby6Uu5RC zGH~a$7YruXbth~KP4xb$6nd*PI=+1EtUinGyUT>t45l;P-lQcFKBrUtb*lO#*~P;B z(++qC-EovLKIkLUF7<QW^0n13c=}h$?aROL^v2?w$9K4|?f=iAxBu7SA1mJfm@F2( zTGMpp?B0}&Lkm|s=41=h$FDIjTNiz6ah!~Og!}^?@zr8|m)|`wQLJP6RBRi4c6q-s z_mvgp0ke2&JW_YX{f}DnPRDDpomJ>gjqP(@)`q48l$qXKD`fw0wSU%=>Bm)4J70R{ zT%Pf6`<jA)YVPf|8YyoYnBElK3!eBe^W5s+x5Ojjr*<5=_U-)S-J5?qB|K_dAou^; zmpO$c%vYF{VpH9hUHTNgVY=1rQm;c>_(k4qvN~U+D=~lTqD4N*_nU>^v3;LX=o4$k z74mK+W9xa<U7ZWl+5XMb^kHAlb$$K4BlcBGs@M;$`*FfbFD_~Kyu+IV7JX*8Cvm-! zZ@040-pp?t>+JU$J`WPxXcqGILzdL)&~+#Fe^b%@?9{$aZt-`4)I`Sr%!my2$R#gI zRQlDL9CZc;-Fb}2)n-s?F(N~~waqTRePZJMui65kKRseIPVGMV^i@dvl9cG`!lT*w zI=OPsccgSkbe(8o5NBALTJrC``Q6WKYzhpM7*vBp%{&v9Rm<7lwY9x#d$2}OeWviS z?b{toszo-;FVxz%boG~vSx1W1J7oX8c&erRa`t!kMIKIdag$6QKNX96QoT~+_pQ@= z-V5dX{Wv}Ky=$a_;QIAp+(qxIyL(jJ*R<46p5SWpP3+)}^D3w6_4lak_c@`&{m5g{ zFNaI4e?8-l+U@k1WFcw!{?VI9(;Lis|NlEa(fR+r?#Z(ceD^#uzwUkOWs8}@@mCg| zHC^?$(sR<)R55j?cSrTN9GoZ~x9(EU8QuraPv^KT=$13-+rLQSd7N8xaouy)h2_GN z1atNJr1T3tC+$vfIupPCk%p2m=W+wK;{1&YoiF~Mzi{fc&OX2C=9(wn`uvaAaV7Kf z8y~28J2_K;mEq%y4*#D&j(In8x|;IlwFl>{u&yxs64X`U=NI(+rokcuzj^hab!+%f z%5vUpzJKt&rDyQ_Y15>8WNMys?a04Z`@OCudD4IH%`Fwh(<fcCIQyq!=3E(BSzjl8 z-$bF!;fW6JA9z;F$;&@}ezhm#y-e7QZP#WV`TW!9(8IpGxxW==Tb3}*xvp=2A+X3U zCMM4Ex&0nV>*t9cp2BX;ezC87_MF(M$S13Qocr>Po!mC<F6E9w?!^uV)IOi{W|G)m z@?^rtw-VixPsAT#)NR_qaM0AXp!Vatul(=t@7XP7d0HeR*{_JTZqJ?{AKv}>&CR7X zyJznH<K8(gHSUvCK5!oA$ekacb#Btr7NI%!Qf`{>ox7>^vGSVwHqjL2^EVEB44lw^ z{9JX6b(}?6+~k$pc`{Evj+~}@&d)!8Z_l0T)z3AR4<*a4dlAjIu42u>tJ%6QQtlq_ zoWELCZu%9klPNO;eCn6J=5(L8sabQb&aScq5ti$PhaRYXoFpnMZ*?@#=Xi_C!IIWi zn~hS<IZuxSr;F+fKY#W1>C2~2qdjK{Pf9r`;?c3>+=NZjHWu?+OxK(c;&tfdXOkVh z9r;siF1Ee<9J)zm{&BXWt27r(ez{|cxGPKi3d1vd0}fBAR&;x$*5~|DCjP?HH!<;t zyY}sqb8^;wt$V+ZasD%dc@+<J{5Cf(owT-hTGBSL=&q-?_?t@~+5EQ^v$qafdgx`u zI=$(q78ox7@=^C>Tl1ly#WL<9_J#{js75flt~uTqwb4>zQF&-UoyGn=e_sFQU#}?= z7~{yf?5U`}e%#+550eTWv1kgdwG`XLoAY8-lmg?<lDxzWb|J2X-AlRDek*Zv9D6%? z_S3f)R+!5!xbfl8gZL6jm6E%GVm)&tc21hX_Wj_DBl=kxciBJo+NE%RvGR3Z!I1mI z$l{{LFFVJB$24v&e3LI`EVTH;qzU!TY7^&K%C~>`{A99%{jVg^WAol`iZ_1rb4v9* z%Q}OTr#z>0P2$|iR;GCJi}kVWWsFbPxs@)7Jy>_l>8-`(<*|*$E3BUI_^w(K%vbPX zs%Pe(vz?aNo#IQ5EQ{n>e*Au5Ym*=6)83LJ4mI7==4w7`7yVE<LEwLcpoXmPt>rHj z%yap_{G9H{8SBHI<Ro`Pe8%ogi!5S!=4{lt@nq`dI=Q|XZ`i*r<yx9x#xJ$@`G(?I zEBfPvE;9dL#;mi>i1EJbD#>{vhx(Et=W*@)W1y%x-8@93;OO>`bF%h7+`4~`zR4bs zj#&;5A4mr*m9@?PaXfj!Sqsj8ty9W)vJ0#JOse3#>L<?=5#OiHp4^nBG1pLj>TZh< z>dVb}_`V#JD2--!F`ix0#NW5m%{}eyE6p=or9`vZKMEcF&+{RE%8r6|<2yZbGUj@F zZ1Yh%n*3wBVswGtZ-=xOm+F;|JUvw3w0)P<$J?a^f8Wo~l-W6_LFIVK&*cxc=>2}c zbMfeZ(`B{x-Fqt=nmhgoiZuN{-McNI_rd#imL)bXGJ+~?Ch4EQ!LY<9F{HRDcwX;X zhSet&w`VYzrq11|X=$cD^L%6AGY$Snv1_i>-r5u|EB@?4$h8$O_O)@Xlv=U9Wbx0B z?!Vro3Qc&a{yXC@|GQu(muXS#Tn8H3x>av@=&B3vvYf5wyqM|4q%Aul?TYVR&@!AL zmbWBeTX3%P?cl(eEuG~~zUQ|Ga!d~1Wop}+#<OK(!i|9E3m$8#+Ni%sw$eL3X&$eb z#;Qwm7fsi_{F*b@V1?EFeHDr4UirRRuTc{z*HM)*H|XpOgEPJVPR=OPUm%@cv^V17 zGFNAY)xKI@j}AQulw0t`;BMmY9I105#~0oVsku@0*)`x*!ds`gd>Py4KKyMz_r(UI zPu^)70UoI#@!A2BwPD?-7OeXmEOOudg5r#7t3bIM!WULJNY1I<>ZQcOQ0>sNMY6x0 z<LQ%}evU+`D%C?FSsy=qwMxjc2~yG7#btDaE9X{zv-O?c=9Q<{PZ63saSlWJETQZJ zpGsU;a-27bP_j`}lC@XM>Ef8O;$*YG{Eq|mH?OxclpNR^=J?IBYW;!Vx5f8w%$<5B zb7S#yV;S#L?;ce@;?GL@y_R>jWoGD&Wgm?$6`BgE*Xllb$`l!RGRiGk#$2R#&V}y0 z>G#(Du;iU&qJ3jxhUV$u?BczeSB;rtbksO@?dRj!Jo$;{3Fo&xPu<^mM)mL1XjU%^ z-5?Rgr7|aG>diB!=ah))JInK&%GvOzP>xT2iFRo3f}K<HLN&HLHrO%u;4JHJd!MNP zIKqDZ<uN7i7YUu_uN)a0r7Am}ZHg{jQLpGb;;F>q-L+v$rgOp?|C$v!WpRsTx2+1^ zWzG@)`jyn?wc*#}E_`I4eavJ*%wicKb$;1nzxmhS+oQK~??ey7{(hD7V$q+g^_Oyg zpP$0iyCX3zGcW4Cf90mm6)DYoy>D)b$l8>-MDkY5hT3)aUweI4NM<`=*tSC=_D}pq zgYcS*H)d$>zv__kQ@H!EXuO+M=I&eN=N`uV`M+ct&%ZKZ$)1{GX2(B=)TGXCO*~=h zrWLbE^r*k?9N*UcZNb*NUpVj^SarX+y^5J_iL3_8eXGNt!`JK8?bubZH*P<B;S<)t zi}OBu?OCz;Zb*QZ`P5Yr|E;}mPOH7Tiu?BIJ3TqM{VUU!p6^|j!+Jg7X@2r)&EpHQ z?rW}o^(*n@zRkRu(>hXG%fyRzissI@dvSQjc4-gG)zTd6m;ISj7H~G=_ug1OpZeGC z5nn&m{4uSMYwz`znCk61?bZCw?qzSZ6U8fbSV~7HKP>Y4*2JXQmpVn$il;?8qE0W~ zai`Rj<ELIOnZA6FyF*2R#CFZ6g`1itYe%-re_H5&@}vIw!Z-c?a@K-{x(<I#rZ8;m zSXIK{s=3sPVY9J>#DNqAxsb?Jt~1paXm_leW0#@4ar>;M8Nb$@J)4xX%h+<ZMD*;r zqBH8QeNj<VxL0&KYF3|am0fJ`%dbh5!fe8a?{Byh=X`qkWXYM;+p<h8j%nvCK4{Xk zB1e9q+^rp*n`SR^W;8cmEqpzuaP#MIwq%YjwT#?^1#e;}u$eoakWFS?WcZ2wS<dW> zj1%-{RKMjdl;|lq%FuG;mG>I!BeQ%@^lsg&x@Lk+$u={s@MW>T&7NK8zwjeEzUs*% zxvVW5$pSB|mV|aacoWE*y}&Oe^I_KnA^n+WPPGT}FO6Wf+1EI+!JNUOBjN}1JR_H_ z1#cHF+tG1ZH}ZsJy6_$T#SSrPTdrC5ul|4G#(M4jTQ^TV96v99$4~ZB-N*O8tS~Y$ z?J-`s{N%m9p2w_vWHq!|=X6=#6q)XI=YQ(qxygxFPb~i#E@jQ!mtf&=HTzoq6aLhQ z&2QFh$b0R<buq?q*7H8K?W=A(XwQA&v*qCe*1$^VR~hqId8{wk?k{XxZx=IXz3r0+ zTp9QFtjSy;;HYeJerLJ&6s27rP1d)TM?Z>}erR$`TDfUiQ=n7J{h5cEl4r0VG1@V0 z$Jh3slS*~&%b(DVo&O+Z?dl1FviCEbR+KrYdGoCQ+?A#CrIN>cjzKtw*7u;L5k4(N zI@v4i?&%n-_pMkot*U&1NxIVuu^Qe+t-KFsPP-d=o!<CkU!mV?U*jG|<s<%;vey{m zmCmMl?%6YUW5K@jbv8dc!@Q>nzCIE8?5@@Mzvn|&?L4;dLZ)T-gtMKI0`nrdwYyGc zzW;D%+2QESQ)^atZD@9T8W+oVn&*OcyQ=axt_>4j6irps_{wIn<HDT;8Lc^HDz3NP z&wp$#5v<a_CE=%WMqYhUi}hEvGS~TBZ&cqcv16X`sLw@D!u$5^2fyEJ&gb}QtdOR? zBxm`;Ye%o|y?WwkjB?8%IjKtSNloIHN_|T$TBd!gaJ#lRNw0F(x|z&VcYl~K<i765 zr8xfWA7!t9%CVM6N$GidlVkca?*F+BJ;hSf>%Dfq{B(Y9zV^1lw3|io3+I}b?cR7| z?)0+Fn=eertInR79Qk#lxMYMiZ{>FN<E5b~@8ope{y#M<yof8<;9{Rw&IZ$-^@kRR zZ=d|^P3J7Bm6A!`=Q3Z-dG&<r{i!v(#J62uf5|~By?XAYB7+RG;$K_mi_O!LdUu%r z$L|~b%U18#SeLpvA@97<&0Fr<*}YZ1n{G9@w$8R}t?!F-`P)TmnROS<RNdgPzchNQ zeAuBX-6u<LN$~XF>hV?9Jz3Ja?o!30>QqS`E$h|;$Hk<0lU_K@T*+15b;36Lgrl}a z2J7zYTobNrTQ2bA$=~Xj&5iGiy6ijNNBLTGyqEd3TzTL23s2OQ&d-dCKi<B@ZOukS zD+5mTXKK5+SC~xw{XW*?n~<dLp+x>oRo$DU)He!y#`dn{x76+UA<|i$&9r-MclAz% zyepCs^O?0@^!~oQ#s5RN^ZA5alak(fPE}7|CHHJGPjz1K-tppv!1wKw6r;Ax|JIoF zde;S2mTPTQEX6U~cW^4Q>zJ}+@Hv?BJ8TiTm##Irsx$Yp`b!l~v7;fH2VMs5)U4VT z@7O$B%W$rw@|$-b?ksM985DmrvnSQWvXtT5d7ZES(!cJBa8?(RssDPw?!eP`R#LGm z{S1%)3M_PK&Jfb8ed^78ZHZ0Wt$#lyy%+9Z_)N+s>FCvW`iH-X^VX*FSs5r-CeNFd zb<px@xlsG*$|-#ndiA&F^IT@E7Bx5Gc^YlonQ`3DRYS0(eNox+MBUnAle{Nc_uZ3h zVsG!*b?f_G%Xb@=KFw0v9JTS8Z-CDx10{=vZ{G1aa&Ng4psXGKJFePAQX^_+;dM4s z)xSHv8ZIa*-YgaP`DFUT&Z`?bGs-s4e^95_u`oMdwQq~HzbbE{`aVw?`Ni2HBCPRC zVvm^?e0jZH*=qa!Ob_RUuD^;U|7{HPVRpZ`c)OU($z<(ITEErOW(Um4^L^Csv%i7u z->qBfu6+}F?(f{}xBs^J(lzrlejjVwUN?D0M#@&b=96JRt)ARUY`MxAe*K~+(=8SM z2@Kcb%X+guw_UIn5kEL{o!91tx#3*fm~B)at|<?8ZpxZ<$HvY`?8vP>=l?wa;@I=) z-m?D=Rd1}myO&p`$i=>1BftA{P?mv|m1W9W&8;W0Pw7il_A-3$zHJlsIplA}y5_*n zz)#QImX`HQ)m?n{eE8?xHcyu9zWH{uTKS&a<`c^fEbZnfFSCp2E3@ZgJbmlP{QOz& z2UzwqXNFma8comqI_b)~$tjtxeYY-I)EJ7T9Wiuy@LNV>&mte4$ig;_jbi!#BBe{_ zPpGVM|1(iCb^Y}Y@pEUq)925;Ggt6vP}kDQmfF!Gr(X*t)P@R`A6Lraj%<`)@AJwo zZCl3<>zi9zj~sLLsQnb5xo5{RAH(j+pH74%CmR-BdJymOB<Sa}qufu<%l|)-5F+7v zwQug@!!`n2GCj*qxvMSXX0~)p-krIw;AWn3c+XdsTFq&nrJwCzxb<Keo4@rRm52=6 z+b8SZtCl4!wS2neC%XdgcgBDB<4^nE>(IIOz)kGQvO^A0iAOiR^O1@$D9=1(w$bd? zdXw9N5eDmSu6n>VQ7dbAZxd^Fy<1s<O<cX%ck!sKvlnB!4B0ZLZ)8<8pQrptefC|e z=hFM0&j|`V<+f+jR70tk3C_tT?HAuS>0A|mxOAgc;*QmQdko$!KQ}2P&`DZ)NviV9 z?kvV78`~cKy(d#`%N17e>i~O2{#A8_Q|r#}P4L-e{VnK*S(1ru{Klx+S53SZs<<9_ zoZz$5Da!wC-m?h7tM*p9x-#Fj7ZjbZ(Z0j{|IOt3YrWsn1$8zst*NZNruV@2->>tM zD&ckQcjmK4mLB`h{ljcWXmPsHf^91&xlao9V$z+!BRpmPMxE#DQ&k)TZ6c&^#-*IF z_LsQaSH;KL944~r!@@=@o!;GDTLiwY{mOTJ$rZlCmyZ8m-FIx)57lOt9S@&sojq}f z#fbgjQByU+^dp*+%4S~JB-lB9clYV4H<c~dG9-)ob}UPXVGbAaUYz2*YfmHV<4v56 zD|EiOT$9mUF~co#pM>|_tTRS6!5ikt&o>EctU9CAyK17?`&Qe6n;JPE&8Gj$FS^;L zcg3iobEW9rWBR4b>P0`8cE<g>cFUUETG##L&uoE*EnFM#XKgU&%SzI{#s7ZQB(;O7 z(zkalN=<)NbT>ooUBuNhF44yiuG$uNd+E$?8&?H>T`N%fRpa6Ik_(G>mAL2SuBqJ9 z7eCi4k2$^kU0keJ9&@T+(dY6VORS69@2OYDURtvDL^gBT{dpB991N~H?p@r+8gu68 z+z)Y2YCok|x%u>l)E#Kt#&2`)hWy2O+DCp>wnpD8kxcub&@m$>!LK?@`fN8>{C*{c zittBo!z-6G-mUI3le@N4_oeET1(ugH7R<<TO+K;P;q6OK{%JurtS?1{9@qR?viS<@ zy}ILREL%!rIvsZYa-O`?$Rl}1_X&AEc7~(_74CYup8He|$Qo>0G&QHJ!TwP|>^H-r zv?HHAC+*^IF5VR-cJsj*$qT;{4Gu<Hvl<_L;C)+Wy3t8xqrD$ZI-g(XoOz^kK40;) z39`GKytZ9fDZQj^tFrhBnPX=sZ(b8TsmP=8-~pyoE6421ZpHpSYk94*S1#0FdsS*# zv+j?athcx4-gaBNp~)*(O*}YY<+&+R;hPiqnr-7B#0dPb6pR1T9VflgY37NXV1Myj zg*7GXBL2S$*mpOJ>&il<{nFwm<d(Udo))pl=VL~T`YPX2`Rt9`yZjaJJ=(a!Zj0!o zE3cEMhH5zcoV)3M3fKO&<LCeV`*ZWpPvifuZpxpZS6lz>&8PZ)f4*PS90KjXEGcgF zcE6o@!Bczc>e?eG<+QD;n12@rTosNnzf|^P1>5ADvo}vm^YlNdn<M!4$Gp|*Ym%8H zz6r3{hjK>n*l>S$`K)H|aN*PW1O5@OY}T*T&exp&blXZ^3+JB0^}qkA9^KAUtHPV1 z^h{3m-$}>V0<&Q88!7L7!f)Krboo^iqbsiXInl9x#xy_i-8L18&NtgPY)*LRaBphD z-AyO7Pc)kPW@xaPPbr+n_T@!Lf$w#WSnXLYr|%zVSk%+CeUrEF0;>wa4K;sO&9m^@ z_ovr*X|4aof63zEQBn0jCwq%svk8(r<a+SGOW4o5OEq>Ex0P?6<Hs3e|FLN5#4l&7 z&&qn2rOr8eee##Q9UnH`ES(c`*-CG<dP(KE9R{Db{GKbm?3UujgF!b7N?tj(Pj>$< z^}(}T>Tu&L@wZnJj<hrEVGG=JIoI*-Uia+pW^ScPdTZ_S9)B^vKE*&v*Vk;<UpXnU z;w9z*c5Ab@JMp^4Oi0q)d-&G_IWB3tUmVM-gYRCk+`nsAMfulff2~{P#YGN#vrkyr za{lGBNh%xu1PLv5bX)kZ>t{^%+gbXT&&)i?XqZ)fK&hgs=A}o|y-y6MJ_aeT4SuFt zlznmTu{9e_&&gc9WSOz2Kj!h>n5VX>!dJSjO`?AuHb_%bp8oLhu7)L-gbO&>tIj<- zBHP3Ez(6+rh^!31&&jQFh41uvly)6dJ2~g}vbzWE7df8h*f>|~MNjb8g$u+D%NH)V zy|FHqtE!OaR|v<R6WrmNmsvMmJ+$NWf`aH-&WoPL#MK^K=hEzcJyNEt+5GVj9))?z zZ3?+7RT@q_?=4|kFtvqqoyE}z?IZL13Qk^rU$Ua%tdpwRzMF57&cAxk$MtF2*V{at z$+6;@`{$IjU7F~1?6&G%b%#^OW|*1m<Tr@4t@gSdR>(a=%1h*5p+}>;uu1;OS8A6M z3#5;7MjTuAqbd8l>A7<?hkhvU-#4u{VEOS3)gW1QS-nG3=Qui8Jr60^>HF|?;j1n0 z_g^_VY2&N59kGoH^BMWGw79lU4qVqYrF0A5)Uwv^2KCHtA=k<sB$>C~6S*GP9@n<% zfcV*!F*kFAv!3{M?AmcR_PMm|F$qq)#bGYljdwy!ZUtyZwnUo#n8z8kPpx3fO}~FP z1l~3?EZY52>t?gkQ~#8$$(frxnk;2(E?hGa6n{Na=jjuBM*c_a!cubSPSUMQY9H+X z`SVTN|8<EA9A@^nlxJ}-(ci|o_$vSPlo{SLo~fqKn(p6~xk=YvVaa1*pHq`$r`^*i z(agT}Q#1aP&QeRQc?XYh8*=p?Fr8EV;#b(Au1H4Hp#C{m^E3tW_c~_ZcmBBQsryQ& znB!f`I#Q3Hd=a(z_Z_KsjZdFX4}Cso{|yGs=Z0}AH(h^3FKu19C-t_mN$$n$)q8gC zJYe}V>#@MDqA9hfLgrZ%2=8Abc-=AUN5;mKtV8bE@0YA#O`F;-CcXO`UzBA@jtHad zn|_m=ka<37PKQ)J?zNett#IR_phVgK0={jNiw)ddY^&<7o@wsri_iJ1^<974m)IZq z{QR>j{PxN5&C;2%+dJjPbH~X`Iq%AuL`q#)UU5}_agIt{c6Ugf^;2cRmDOsG`7WKl z=~I>azw6YpPuaOyGv;t4zfRq8zQ}uj`G)A7sR!?T?41_B`p%{v$NQOKQ!Xr8F)c7G zyyR-H$+FwaObw59l*yl6`!gw;^Uc$PN29V5*<QZp{cM}!dvj`pE~nhR!y94?I`4c* zxhU7~{j;BI-_wu#9~9cl{CWFR`+<$=T=nRbQrCUgnrrlx-YM;0E&B4^<^>`j%cgNG z4Z5zeZFO|$;*S0ECnP9Oy)7lWctZ2miJvyuOWt1Px<BXB<!}bR$jen{W?c(-VV9+O zyLQq>rhDg7a-Me{<I4E%d1%{tyKSP3w>^tCmVOHT#KOPS{p!{Y&m)-D{a>@=DevhL zjS%lAs`>0cmdLL2YTj?9)W~~lU!393S>{tGF0}n4@vPe1=J&MhUXO~L1y<f+DMxQV z<1^CUP*=h4|2??>Z-CU|o-kttCjLu50(HNs<cU0<qqy$mbcWB*PVLLF7n!0^+#0dH z=uNh@&byB<{}-7&ZsCnMyLp3et^MxLzweyRWn8@KGP~b~UcEDGW-E29b=elz?yz6) z&-Tx&wYF<JM8#bRN!Wk)-pwoR9IKt~zTn8u-nSxEH){Ql_xC=Q)ZSKWQ{Y~-$?fW` z&M67EnfovEg)%?edhC$pj}1;7bB?o|cMP>y!Nne$xO<h;;@w;K8~G-#ta<SJg2<^0 z<<IBua-ZcC+5OEiIO4upT$1)IC&_KL1@m$jYhKy2ys+Q2sri8&$2+Bm?;;B9?^TQa z7FwSAVt4WEyUK-8*A~?ZEPs9bn0JoroN0--8!gt(o;qXplb>I|q&iKxU-vitM}_aQ zDZdYjY~53m;a$!byFgtxZgtJi=i3h*KWtMuXJU)0;ar``EI+ik=FD{0PWAKHW3o8e z|ES9R*xdp0%^cTus#-jCFq+#b?s!Fc|Mzx3!)wd)jUGI%c-plmtu;?!)6J7NekL<$ zb~kZ;cS{mj@Ro7%g+1Q_6E~QJsQ=*6a!-l(d%SI($FDz+K9}iv{`%9)8gy=U)XycC zX6~8KI(eqh-W{3TMqhp`e4Kgo<NYQjl?C_Le?Giu!Msh1t<`U?hn=1v>7XUK@TkTu zCL#4zi)U6OzE!?DH{<lV_Zrh#{_yZUc9)T{cW%Gta{ltuCRR!3H8*VUO#OUhisjC( zomR`Nb9lCzzR$WpRpJrz^GyqPpG!J;>#B+Oii30XN`5Bk#EKsKk>qo*=-m1P^6RD> z{kig5<6h1mbBmzK(*tBTd#~s_Kj-lu)sW-ypUT76UKLuhx7Tz-tkO?|eS2G7=4~ig zvFb42&l<;8k57#cKOD9G{P9Qr`TIYP&oAMf!|T`Vz0plccjxIH-2b;~A9pOvI<)KB zSHXD)ZrwdOw{K(T=?CWjGY?M}77OKAtF+|e+qXZnQ;$eISMd#1zSc3PFVFj|Y1Y{` z&T#22?Su8V=5lkD*uL{}u-cdw(tiB2(e2%r|1wwlUD<bN*K!T>KOY~>j{3L7FLTv} zZ|jWiuAR4!af#5^+58MVH!ok?FZtKRq}$F<b^E?YCBGD|JKH5JocoA#MLqA1{|r;_ zvj6yhdcULWcgBDDNs?!un*Wtr$NltLv!1j1rwr>)2hJ|O^RaZH)vj3YUpD*xISHC* z?pM2Ue#+OY59^`@AOBG9J0!||*TXWNd0|*l{UI@zKjC>zRvib@ls>%fxVihPPos!G ze^dM8w;`W0EUX1>W$x>x^j}=y^`=*4;sm3zg_m3=EvQ{&bEwyJV*I=f;?W0%ECY>= zYR>=M^){rTS>)j?t@jyDVpBXmXteL^pMEo`Qb3f~*2b#$<>9T{9P8dKi;;P6_u@iB z)Pd_7kA9Ww_DpAUJGx)ovqt>KnX?H8`My6%a%{TS>!O)?Hm}TxZPUMPhHqH*8%_G9 zyL4K=$M5;8Sb1B6gRkT$=1E1dPP{Gi@m^=&;kX4~Et8h}$Ue$BSDQcaB3s6kIwLWe ze^nb7o$V?+_rg-K{P;`W7VD5JzA1A*guXMm!XN!qFtNAf=R{|52QT&R*fTr*w(f7) zEwd!c>ieYmM_e<Mn%5eCdBC-G!ZsC0_QuJ!c6>sy^^<qc4*qrj!nHO<i#Z2X#gv%Y zcfaW^wtJQ#ck!OzUe1f_--bB+3!IT?_0^z4WQk#!QuyadMI31}*_l=z+41t&vyZp- zl|3n+y5Hl0w(xY_@6KnPt`@kp)%@J~r}+8Dtl4>squf>$&b*KtBjtW8)?`*&!S-|d zYId)U(p<}={El6GAGOk8<5x+SV|VYpd}nd0DbrzkU8Ynv&#pRU?zlvoQn3`phqssa zpLy-8&7^N1TKPbCn#B&4haMX&3xn7`h*tm2JfgMf@{`x1ABDc;tvvK(a>*o?7lnar zf46FV@{CE1V=VNV&a9dHs{BXTp~8%8&bf?%e{_FGvirYq-R}LRpz`#7&jrgasms59 z>G1ThkH2#q^IE$@`?g<NUu521FXw*qOhqiCsp0~sUs4BWGXH4Y8~*r*XMamT|LV;$ zft@<uR&|ejH>d4d?qOv0FmDc5l&c=ok84Ym;w{f~%I`B@v1YCG3jKOBhK18^O<m!z zGo<R$7SUr$Q+gBqWh-tmEZFH$7<6Uwt8JN_Pl_F$TJ3d`m8sv-x-`s?;qm?`=E>aB zjh#pDvW48dw}R^i`=`%F9tu(EZsxf&;valEK7G1)_^&+mj)0}B9CA-Txh?QE{$9+V zt&*3{RDE`E-V**?|9+gw;pl{}%BJP~(Y^~>7d~@*{5b5uTA%5a!7Y{=TQhg2RIlQ) ze`>2WeVI<LL41y^d*S-s=H>U_zi@rUBs1q$PSC=V)vLK)mzx=EDxAAVD@;u1NJ*6W zWs%6~wLMc@N}q0*nyAt@W!1VLK_Q`c|1?ij{2ueyU3X5*vYmf|U(Q<h!)Vf_qoVOY z0!?^2MdY?_D6D(`$$x3Yu1BXe&a2(M^FFGAOXi}kjpR*>+1ZuX9ys;hs{HdKeRsja zU)OkDkIBxms9<Q3I=Jp|P05+Nt-qdZ{5EU8f4+}wwad%5r*HQk-e}IN-*WGZR0emO z+~NEm7rhT!Es~pIZg+jdjF2toH!M9c(dXc#P3Pj0!X{mtG;4QFs{6)BZ=V~|H@$oU z*u6WyuD=t+ba?yBxh?S~?_7O6S!I2VXC%B+t9yLkXZMlAr;YNBl3$x_hzKcKedrF~ zl)DOb1_xz)4A_Ow9Aqg5Guieub3U6mBf(Fe=ivXNX_ErEI5qSSA1Lp&YWo&**=6&+ zwuH?Ow-{eob38QfU}omL$o@-7`&TB<S!tOkdTn;pvYB5q$`W?3e7W}0nUc%543~;u z=Dpoop1(u$!P^5l$wzPYUtD%!O0D6|5R;zwAI(f}iWq!(dH#@Pt?XpqwR1o5^TeH7 z>QG#^b?4S~_c`Q4wl}}p*1qbtX1rbWXMx&DO4Im*<b$rY?P7L}ZrdgwnVo%hU&rlN z+j2c0-J0-4vqbTO|C`i+JF6`06Zh)(f8nltFqc6gW2cdq|Jyl5NtfD=Ce-bDwwP01 zn0bd@!<xKp(y4ZD^*yHK2|PB~$IEr))4aVAdwrOU);bz<1*mRak#zQD>-AV$sV2kY z1<@&s+cx+gS|}r{wBvKi=PuiI-lj}lps7ypsR44uCv6Uds;DNIsB6T1zIb7>;f~u% z>V`G7LX*>ywK%IXimPI7IlW%F>8iWK!lQ~8;^Q9)ubmLZBDAqgZBLzUMzh1z?+Ps+ z{PxBAoS2iJlT`QQLB+|pMSj{QzQ3>jx#Dxa@8tR3py!+0o)}LMaw(X!=33<qH-@+A zv9lYev|pQ*$?)EAjf9RL|IVm4A7@QoxP2REe0s9R%@dn#q-;(ruk#f;z&UU7`Hvpr zYkwMispma!eX?Y8;GWdN<hf?IB44*FT=V%THS@~(OYbh%K0NRsIIU!9jPFy0?iJms z5Bv*0&7WT4tUA-eh(p3=$3kZ%Z<dd*C#b%BZZ!M(?=Qw>o=nEpN5YH5?+UIkdv!*( ztgZQ!>eJ^oOS<=Y#7LK_9X`hqvGZO7$Ey0>47#=nhxFVxoY?h>Iq508lS$TrS($-9 zy_w2pZ7gGc>OJ|XbgDq+<eKvZp&k-j4^CyfsWm0IU+T*?W2;c9dM;h#){8ZsM`f12 zYf{<7y-4h3Qt{zS`@ikF$;htJyleq8+ojJp-8%0rWG`K3seWVAhx?P9U4qrN%Ex4C zyL~%rG2!l=J2fZY9q+pOzDOf-TlTv24Qryd#L7&2m-y1CAZyRvTii3YJ4;)Ke2y_s zUm(%EeTA!j>KmuH)vZ|ulXktkyVTKKW^c>uN#EkC3?H(xF8!`?>)!{d=KQz|_M59! z)?9V`;vIY6d71R}cZ*7nU6NkV^h~O}=yIG<{Nt~8ujDUSdD(yG%*);!<y*sKb>C*L z-LhaA&x4i!j`AIwbSSmGY0X_zF4bMd!E0_j<<0ZbV0aTa<I&XGn3hB3!7p3YpH2#n z`*3_!l*-bUjz{@@(^rR_IBv;yWt(U($3E$mCw65^iw7$>S!!|rG_Z*?)GQ-1uE z_N51DRocuKKWm+yzwKdynML;H=}})Tb+s@3@!)-JTPCG@tL}<L{_7jPyan?`OqWm2 zTDbE4&BszKsth4QlQgc(nNo39-Q6dtVY{nmQcJa8*Xb?kW%n~HpIQBV5_)Iqs{h9} zzj&Q0bfx#lQWs&?Rw<8j>jkP(Z{&JCle@ZDt!=Z$(y0FVI-A&5?X9t!zpiI%v;3Y9 z$8MH-_gQ>Cy5->E8KJFv0|KN&!$jmQ?CUCm3y-WkCi?2Y`kGcD*`BRWG<W&Ff3W52 z1J}L1m+wt#*?nf`Uq_u4`pbJv{N<nAx|zgw@9XRgV^{rTf9KrNUAMkZjHzGuW7Fp^ zd)K($ef~am^Tkr8_#?Mcnc{gLp4+qa^u=|Br`ujE<eRhU^sOyZdrZ|nxZRrYGRgPj zKYPULyu;I?qBvKx&Hv2Az@W><z#zuJz>or2)E-)plb@IZU+~%+5}ke9K&0;bdW#m( z+d6@_Y<tc=aJ;=F;Krm&rw?az2fj&mKQpaIWjXKS|FxT*cyD@_SlPLxc;DyR=V@VA zow77s0}bLT&cwF9@)!C&`Iff+^hHc+3#xbB$PT%leSYutDd{0!x3OOR;&q8@ZlJlA zu4K{O+jrMCr%88iRoIfo5+A(ARJf+&OThG|G;ht;FMIqnZU!8^<bAL>jAiEp(W@Kl zg#xB#g(a?dpz@&2dd}S1tn;exHk9zszg^wxb@9-TpTQfp?dY%GyDQ4y_Q!Gm%+4)c zzLFi6W@ePUsEmsWT58og-E8rRCiTgkfA`;iG*MLMfJR$LNa*26udNST#g}bg(EI(- zqia)`@}`%6FQ_Z_eXvKzH}kev))cOwQ;E$B0+@BDHpnh+s5!pmL8$kKl*;lDqg|ST zzKouZYpg%55j(RZLhtbAJ(23CuRcnv-MeeP)8c?_s#Zq!cXac^pW9DU>+$3KBho9X zP^O`J`hr$j&&roGrunY&&0;TV-@|9h_o^d(<3v^-CgtdD`<M<JH*S^Xi4uxP@SA<9 z!f#vD^@}xe0loSq_QsxXBD#u=y*?iktD9$h*u*mH^obM`XCCc?7d=lJw5ue}d8xuF zGVSM=xtssbpHj!MIp3_rgeOFLB2RC}*+moA87y&-{gHd=<l(d5zy3_h=(YFaaG%(> za`KFssi$wxa({d;vTSjM%KLPi!@kMe(jGZAh_P$_vkUrR#>u|r=7S~C4|m*-E4r^? ze%(>|^bZazCUf6;i+g^pZ*?qRo-o08i$~B_Zi(|BO!pZz_XgikIvcPnI^)qYrNamE zOYD9>YEQ11&bn=`r0S%9rWw%_OLo7WvZuZ5-ocEOJ|>+mic?>jeV9M**+J#GPnU0A ze_sAD|1xFekZH<mR5x3TIJ<Ib&a$%Ll|R4e=FQI!4u87XyK?`t#eY3diOAJ`W%}PG z)$%sv`erjHmKdIee?G*{mOSq|;kVudXYI{%pY3M9dt%qyKdsf5zuR57?WoeZYhulV z5C0et*`%>6EQ*1Ffq@A`FfcF(A+kw)d}dx|NqoFsK_xRD9Y`4~u^>|)hc3`!*<}JZ z&0dHwFeIfgFbE>-0qII9$=55Wd}|Y(f7{~P`=6q2b|RM#n!ilASZid!ze)M{tRItZ z6<Os9a%^(BJ?F)vuArdr*YztaR{TDjYt=pX?j8#j{_}I&pD3=375T+{`j%>;kl<;l zfd3M19}n;~8Ei|IVtez5>2-{?n&H=zNBzD$RK5K%=NL!u+_EVZ>vB{bAFa-s`(Ho% z@#TqZ)uHx_b^fJpu;J3$_WiWOWRuQn#fAOq*ZGoOY5bUY_JmCdC;Q&dIZ|spU2^;D zR4*QFJ^3?f<6C+5{izjpu{=NKC;jgIwfxfGt?9p`uglr+vis*p$h>8_@_K$;?T)Ia z@q3HThF^ZT`satMzs|0{>u+B#6}Pum;?MsF%lqyB8g+1lM<*2SJdwZW@p*B6adGhl zqI%+;Z!CJ^mgoGpVX0eTEmIJ2QaaWByj^7D+sSLbo%}W_<|6OhBkGMN?Q6nZc<$eu z9LA-3MkPs8=zwoo*`uR}51R4VF4dD}NpjwBVR?33;-^o{;kpq&Ov^TvZ9B|r^Y>Zd zhWQJNJDgVU^Wu!H<^I&8<W;7xKIM>YA4fTZ;@N47*FDgGRN}NQUuwdMQ<s;Xu~Lif zx3aALX!T5{BVT;B$knrfJMP-5o)7IjcU&!1Li?Fji$#mhIYa%DXo2Sv7u8=)v@KlQ zGI7NX%j*?Smdrn_aou>~G?#U5@73=q_3YtbUZikj!CA)(3VIG(OvI1g-5}+;nx}Ya zp#Jgt#+QpMvkZ^LytOQuC;LWt-NrR(?#g1`vwD+?m0}gX<+<B-HSZME>XAuYb?aM* zgr3{?gq2yVnh%;?TJ*R0&|x+Cv+J%lX86zdxWKw)bM33Sw-yBDXO#SYcH_WaFOT<A zm2`Sq7xI|vKe`|)cb+$?vTs4Y^zT3+mKvqAAC(rlG~R7K%QyGe7a@C#>4D<R8H$rW zXswU9d|>B{h&GQ%AFU#n4-XGm%`jzc&5O(4sm<vyL-=Cy@gLbmGHDM>obM#vcqe@- zvBmcDyKCP<x_oOEWEIL>%oP$YtE+h>wf%0R`uUSH4UhUs%1>kYx&25_pF#LsKA(km z&E|&hzVnbL_+_a5*Ni@A31Pqgv%>!~olbgFP+7^jf038Y42#3f1=FoQA81>b&$U52 zcK5SKF`qOq?G4e5;o5Naz{cjrjEBjmnQii2>=~-}8~NOg+85t(@4R4d=h43#<ycL+ zHwy4cd@Kupu%l>;@jmy0+nE`gBi)*rw_av2dAowU@wJREQ`Ei{!had$Sr$!lJ06^? z`lFPuOeOo>)~Ty%HZ5LLm!h-fDtqAGrH!(4gI=s@JpBB&Px8k^ljuH|V4vp8*SNPw zcCY-OxN6#rn$C@`SC^S`IbW+@7cV_~XVaHXZ(;l9>1$U_&pG?++_Y}#tCzW(Yp?ll zSrNBL_4Q(Xv*JMQZ{?fP)~@H_eRC$kd1;n!<WdWBpOxz@Cf|x!;#AD<yyK}*L1#ec zjAwUx1*ZJGBOer@DQo8W@RHe@vmd0)BepL6y`{`3IxAr3XD8{`>!#1X=p#Ng@5E!X zgHg3PXO_;;EBuktdnYz~S<6#H#npzrl~LN?CV4&ExzB9t&$&~i%-2NDUNy~BzT{<v zy3!uMo&R_i*To+X-|TYos;R-+Ubm|z8aE?mIb^mkjn=STWO%Pp(k@wgM^kT~!p%@; zm*x*i$uTnz&9HcoaN*j8V;f5Nm#XVDO67z!vHi`t`d)d;zD1smzr<GdJGAMZT9ALh zQ#gltPV^B=rgPg)+|1xw+FT_3QYnJTZu^Pn98Yeq5-4C^YP(D6!%OA)$q$Y?#^p7h zcaLY4luX*dGRN}7O{NVj9Z!`V>Ov<dOl%hFbxh}b_2!#xK*h0bs#{tkCMojnoagki zVX5JX=LS!ATuR-@A`-J?1H*a#DVLjN@2uBSInmIdy1;M3t{x^Wju#5Lj+yEVJDpFQ zd>`;j*gK(J_EsWO%=-ziIe$Fo`}>(q?Vzn+qxpg7azE!Z_S$T@sC(l3iYJqqMJji) zR`q-Mv+J;IyyNsz(A!+$t=!VRjH};V)C!*Pt>Kbi<2}ZgzF@+!nf=NGkrnb2eu;c3 za@gzBc!*I`BEhgr%$Q-4(h|l?K~t_V><zfm&A2Dv$x((ljZaAotgAE*R4li+m%reC z+}Fv5qECOz-uicB+x>&_|3c(AqpDnV?>7CFyI8kf;jr?l0`4zz6Yp`^SUUOdW1Z8_ zrGDc3iZz^@>=(V+{=l~Xh3$5Qi^^Ul+>2j*T(Zo}a%CcC%7=h9$qSz+-1G6P&)UQy zU74|1^2GCnHO7{$t4<29sP?Gk`}9-ezD&x8&?^kSKUQ>F{+QWcXEuGa)T2F&=f0h| zDO2%r;&jW5>+WyQDQ5kUFbz}4ZMk%=F<X9TT*Dj2Q~MaW8l~Ppuw|?|&$NSY!fVzF z|Au>;+k}Dzd0w!3<TFa~1T=FmkW(mSPFbLFxJbuqVYBLnw2o^rO*M+Awzp(RC7HxF zu{mFPAp5{Z>74b1_Z^?^GCmPhRKKt-ICsHM<*a{vCiO07_cLeLxn-|wsA{<qt`OKF zw3flh>4d3+(N+&8UZX1yq*fR&*~fNM^3*=IOi8cZY+O8=YYuAhtlb3R+9zkto5pRl zwS{T5!Io1|dP@WLv0mVwFpn=vX~j}gk0VoD49q0^&YC(Hv2xx!e4*NBft+%w@Ui$c zVuu!VN|+`#sU=-$(Y)UL@{_n%)<>2)+0~U&Dz_H7sAVX*`Odf?w%Y80v74Rmh4h|Z zCXU}EQq3Kk4YMw=WF}83V~$Zj@s&+MxaAJRG?tAy3Y*j=ZoYSHQ=jrs?njN2-TTJ# z>Q6q~W;~KKHDsG>xneWtl(L8_{=f4!-j`o6U4O-NeusxGB6bW<I2G-gTGx9#RKD>o zdy=khXj;s>;MLKIC+?)oj#wcwdq?85b{*Bc-$`0|YtO$;-J#Oqnx|-#`6l%Hhpe;Q zYm<D>e4k_T_H)_>wUh(pb`#!e&fhBY=*Nk+{r^r)TI}&}Z=<vRzSvq}x8L!WI=@4& z#{5*-=K9b}t#;kKe?QM_&wrnM^yBfDuOvDbPn;q2tv-K!(m~Hc$2gB=ozHf;_|G~O zu)D!&m$Q~eD`Vl+oxZ+dd%bh*XLWD=8}e}Bw9P@kR%U&Bt+Vj@Jn1v)|Mms1lQ|n_ zmG}7L`X{Sbe6<PJl_`%(n8cFjeyo69VQG$5SlZ%^y3fPgwt6j^ZhgQ)B~0kzwmC00 z%kC7rZ=4_9>1`k*^w#t1Bq`~T&-WMgE!w}(=vC>J2dT!dCM<Zi$87yl6J6bwY?*g2 zPu2*u$L+BHYGHNyv9()@`~H;FvMr0x$LXz>-?=-c^ZVAmGM#5r*DdaS5+PiFG{#6~ z$Cb|RhN4M1%;HDgi;_zBuJ3fus=D4FUGQ=d)63Sr*q)G{0@sd6z48w}IpH@{LytXI z>51<5&2-RNr!}8#?>Th`b|c=HhZi`R+hrc}`TH~7Vq2t9c%-C!*YcjcmF|x(d&@lX zo^$&7w#jFbEE*55?>qd@xPQTpX%+sn*$mBV`c7G_cDGoVQaXPzgND?v7_OIg1*<1+ zJGjHvPq_KW=OdZUKVmEvy)J+AUFjV2s^^MtyPr->kbizY@$_^BiN9V^v+hnao7i-I z{;Z}(7HL-|l|1%US8HD}U#%8r{5xk!c{A6GU4I&?7kyq)wP@e2Uoy(CZeKk4i1F2) zzTE~&CGrtQo1V@oSCY;<x$^zeC9L0f=4^^OY*Tga;p7iD@07F}7vAN(Qe--<()x${ z(t?Egll3871&p(8K6am6IQ5N6-R8G*rp^6U$Nzb!^W!?B8twfFbNgNw^|ff~&;EC+ z+LFohdJuO))!Ij16O5vs2b%wk<JXDx-s^LxZqK#y6`N|p_R9quSh;=AT6@p>U-8*r z(<4@7-oIob^Z$2S!hXK`=@-N9Y|zxt_|Vtp`ns#)(XUdrdsaE#+vhG#)YiE4G*%_* zfTNayc8->1skycN1lEP;wU~K(w&pQK{aC+$GJDXK4gJnLcId3S@y&7F{)GDqcRla8 zNOYZch~&0@vi<%9fea_^oqO6p1?}OqnqFIV;;FTk_sw4+PV1kpklx07W7ePO(#u>k zJGuO4Y<zK)CEok<)!f%x_rA$XRX!oCdj73|!}8U4xelFZR~O7(aYFo&imam5q<M3@ z9eAg$=4p(J>gEvU)h&-H4w#w~_Ef3r-0|4oSA;L|Hy@iDYwE0Z$U(KM>{;mf{jXkK zbjaKI!@pWYAp9p+y7{6>N6Y4Hu=yjEbtx|WX!9<I#Z2CcVPATMo*!@j@7nf%&xsG; z`#6gaMO<I3Ynkymd6#YZuZ+&!vvmz#&6SkD->S~@a`Vop451xsH(YJ_+AIDgx;dmQ z@ZVGAkbaFTQr!Q#99M0L`QNtY<4oqh*I|3TzdfB0Si1GI)937t;-YgV3k;unwCrgO zDX}}MbL7Y!Bd;0UBC6J3&ptTWxjn3Lt5>vowA-U%*N`jA=9oQS=+tFXxUYRxr1;V+ z*^dpj?L8BE`S!uXj#h8D`aUS>C)TY9_5OGLN!HbLgXEb__Mc1EDQ~{;pT{YtS@5IB zV+M7%)si1(eO`B^`6%Zt^%HB-+J*SFyyh1lD)sj3<w<EToit@es#m_Ui_eohx4FC4 zt~**O!S~=)by#Zs$?%^?__|W3i)BZ=iPEbK3eCLs)8nhgs*}<ycdQM0b~@8wz4P`j zm)OoJ1$nNj%D7T>OFj5>oAt~6rx&YT>3%xrn)%Cp&2ptTzkUy{Wi3B7@28F1D?N{_ zPw$rL>g6v}zc;a3j(OpW0QdOG+eLFrV?Rbs7j=@JuG%TRt|0Z*iO7utORs1btyc66 zQ7QH<6KKlHyS7DOO;ENft5nX115C5^dOL!Px<dYnUT>Ht#&~May!KeX<j}Pta@k_( z2@ek!`LlLu>z`k0)xEsufqtq(!kVfJKm5+H<hlvJsTI$c{IoCT+E<Um6LuZCR{r5h z-^qm9NbA0|W&5HsmKCm#UY2-@-F+7O=R%+P90H-+3*0qXwr9-QIzu~m<Gjpeb#osY zC|f6Ns6VwZVwO$Lft^Wb4j)UcTsle5^_N%0guhR^migHvZ@d=%gQ;6z<?3av+GUT6 zHFvZX-JD}+*Dif0NbE~o>dPw5;}ib4$KGy@KJ~|as`#co4%}-WOw<1#_|%@~XOQNv z=0~p2CmKrWKlPrZd$&uHNAil;{|fD_hw^KTuYEEz|D*hRnN5WEX5Y#^Vb_fER2KXQ zO<(cp;-nv;rq3d-%}D<0!1(dJ(Vxv*Z8AmoSM03S%RZuiZGqA|Bi}oWS^t`g&qd#S z{!_O!+GknNef?~+<lJ7~hYyu^u;gwqd^*?d)l$*?ChmKSrY*I-HhcH(nReI3m#OAA zOXtj$>6a4>uRgnhP0wAS`OFIry=mN+BXT~?`Eb{ccan@bhmz%?YdzYA;p=(=`I^rp z<r?#Fu^6lfTQ(;(_iSnK?rTrh{#<$XS;cb;)rGg#cE*TEXr6Fc%g-{ax^}DCH0~os z`tn<rdu+HG<)^}x6aOx#qxIiDrmYI+Ll5kpT9>b59y+I7uyRpiQ1frU=$Vo;WRI@$ zHPDlqn0;|d>8+j}xBYi!^|F3Da&}*KO4Hgeobk50$1J(moakG>_(z+vsUsJQnaAzo zw3t3~)#*ErML)K5R+?a<VzzmX@!9u1kq4*$QU3aA9Sg$?&kNJO?z<k=cC2=`bmhFr zlYKvgY@d~VE4~%8?#SWr+_08dw?~3&-cD`k%|5r$@Y#i|D<>|#y%Cppfn)Nk_uN(@ z(fjwXu`;akH+kBApzD0a^=m1r_dj+h3VeKdZm!EK&whz%r_W}sS$=2TVU;3}zVlQ6 z<t4A-lBx0gaZ2MjBZC6>g=rr*$gG{7BzJ0;{&pRa&w;n%8yT3co+|QJ?b^O(e`4Z< z+qPHq_}#MYcJ?2<zIE-6o~KLt=be4|NlN0e^KXG&uUPr6uQ}(tL!j;1Yc9)ON6pu9 z7&p!JxPR=Wg89~qJ}<<ZW_=2}k*8a(l$W|M>(%3zOfgOgYzB{Hm>vo-W&i%f6jt?I zgJTj)=`R63(}wNFEb&hsgtMgdr_WCOH1oXrpZa}{{SQA0ExESoywIN8FFuvpmAr23 zILNi@!^g(_=*3(7i+UeD-4(dZOZ_A7)=e2TQ&-%(!+d`4#V4*UCyp-fpSUgT{dL9m zE7CJxO<2erE`30G{TIVpeiw$j3%=_-{LOo7dS!=|@{;0?2VqaU?uzvVOZ<po{rXqs zxao?brM?GL@>1U4(m5omuE5a$Lxrt-<#XO`DGo6kZ)v_@WDCs}TWr=m+j{m%qpn2@ zr!1cw{jB84so3=UcQ&4o>EfJwv~~6N*2OcE{{PuIDeGmm+vRDJYzKcYYk#<9i`x0; zZ$E9nvv+Q3NA3C<iEm2-_uflcvGSAny@cJ`f40A0Iy30m`n1FMFBTSmak?EVSjO{O zE^5Q}Pv3I)b^lU(!2ffHVwKPyNsZc+%-I3wr~Yi*5*4#>n&#PS(btTQ-sGE9XR$$6 z=g?EP+uyg};hT1cukMcAnH_&E1m#O?E-ZLk6VUU^Y{sJgy??GBdXVh->cirn5sMyX z{l6(M%6zVBFZ++a-#?Ao=b1Ur+ry$T`IWB14;e-F$@a1<_jsN-xRmq#J9Fm96E90I z#C>0+&}+Nb;7g74MNWo!cR7z9pLvykQucwaL+RI;Cdtj;BB5*RpV{cy?=O|`DZMtG zf7hXmRkDrGYv!)6yi>}%asSN+m7Lpk=j7JD|C#&NY5kW3?ea-+HJ?JOo|oSH&iC_? zuHw`FpthP?$v2yiGJUgut+VrI*oB$b8-KNyYr0>L{q%0bhf5Pr)ZOBq^tRzCzxkZs zs{TKYZ4{m^%duyb|CS$u+ompFcmK43()+VN-j;tnXZ>^iUz0C4l{bW~f6`sNp}Ds5 z#-5&{%kM+^z2`5eeVC}ane~46)2BJ?o5gC3H=Pl3xe<5Ap=;BfSf4$6t4`+^hrJZH zUw(-@^rZ8x@@XIVHvbh{ct;~O{#@=H`6nw*pSyZleNyJH-G6WM-Hbk+xUP8SGlTy} z6YsoS{bqM4`y^RY#T%8&n{KT9HgVBDv+%Yv>)l$CmuT&`x^^wuSMH^yS#gf}-*Zzl zb<K?bTu9~dR=T+<BI;IzYE1KmO>=cFYE{L)7S1&eo_{#x_O8=Xx!c)4X#J6F)VkVc zRMXolAGJp<ePvaH!3H6ZvL}DGC2W7>S(9*5`GMbyN22@0Zc4x743S*F!o@Ov>HGd^ zFa7ND-fc>`ZLv<?;IDkaX@gGza>qjT52~j8<TP*l{7Lz(&!+b7dPdaY*S8mQ=iXvq zU?^Z@U=T$e7ER4d&QD1#(krM;op3tuhysu6_nOwJp-QeR?)JFdEx)KY%k>t&!od<7 zE{Vp?GxqDNd|nadZPT*8cAcWUCFdMt_N6gN{AFGek+VH+aWTJb^8YmB=#LdsW{FQW z<`F#Hp>}rpb%V`EuUu36RV!n+j{k0VlaTM_oafUoI2ASSy;I1v#)|8{f;!7i!36>L zk1_VOFMqD}*{y3q&J;z3s4WJuW;SnXYLDlLcdygitam9bCWhZ;?)tc_3EFctM8all z)ZO{d@UDJjZ_B1-0k2I{@9o_(_t)fe**cg1|L&L5+I!ht|7z<mw7|$c*LdV0BLl-8 zHU<U>w7{rHPAw?O%+D*<E2vyL#W(M^fk5kbJJyGxyEFJN#0u=#Es}9ZCc&pKfl0+( zwY{(O_ql+u3nHwl+iyuslD}`he+#3R;rR$RFIM@J4;9l-$@7JGD_48T?|;){^ZW0< zzyB;2pETdPQOSIt#PfDWV>L79Wf>7B6|xtNteiRR_ZLgB?zsInhk3uq8BQg+b^8h; z-LKD%TPa}FG`q+D*UdR<%$+TBXRl(mb@`B}Eoi^;RzvZmvY-0zwp$B{N?gskxTng_ z+qL!fr(<RN*cJE9XME&$$#&Jr(mnfw>?)rdtgUXoYQH5Wi%0Q7w*D)14(6vFd3SFz zHvc;I)Z_TK>Z3NYGe5Ph+;{vtr)0=~jckRj$5NJ;Ht-xjdi#Eu^1YZPdk=W8bbHyA z6SSXOFyhyrf{7<vf)DscaA$s7-aUQm(@KV{1lcD)-=-g3)R?-*mGRZh+e@@x+qFGb zdH(2|P{gW(TT670Moiv*Ab;^X(OJ2^nfvB4$gO%I{JK&xPtM!-s&^OLy}9oj`ih@i z`p{A)o$XmRLC-UAW=}}?t*56WFU8edoB7{K%J8+o|BK-f%KLg66AtrTTUNc>+-qx? z-tmQPecwOJ9GjNCl5={aZDw74YzNZ8G@z-0*;C(_uViIlI3SL4Fb!yGAUCm~0GtK( zMnvb|HUrJmJ=n$W*`TiCx|>~DYQob^tPzja8g?=EB^rpm6`HEiyF@tM_5W`^e$7a8 z>!Mj#`6p_~$<;l#7ME*VUa4m4x#?<G_tk_0Z!MN9Ez8<4CDQAN)!F$Svpc>9pL<iT z9qcnF*jHcG_vVB<Mki-VMXdZ0x5<V(^W5Qx^wuwLf5jQvs?@KYS!0#%t+(UZOo>Ia zs#iIjZn>xaVTadCF1hJ87k&6nMjU%qs3v)p$MxK%l(~ma?PhF@&vnw!)fA69$TVfv zln2@yZloP7+FYG^+SGU2OrOXa#Z)!+X2&zrp2#zouG_rR=}q0634K~Kb~0LP89eR^ zynL+T&zJ7a^(_;APEzstp&_d$u$=1zr{%WG&)CB>t~ET>-|Kx!SWI|9X=B=C_H%OX zE(dO`QtVRASs3|-b%nQd+?5WWi3=n<Pl(tHUdUGG6koDIXUiitg?+6Ks*{`4iW%$F z0#kIiByC=$TbAfh*AbW3+S+X0>BD?zYscyrb3DCyc*M@HJy|R#{rkYjjJba$K1t|q zQC@t6X^z}ku0xEKoyFhR2ZTRnymGZBJb4kb+@(w3ew^OBmeY6ArKi6;gW9GFEp$yt z=Llc%T1_~o`{;$RGu^ZPtT=YPe~HP4Z+B1Ci9df+DA=-!^^wWBtXEm<vaDWJT)Fkj z;J=7qfW(g+mwe5$MQSV0J>d)59AheR_EXbY9rIZm<yu>%&ZG!bE;zaCl&9hTe$nmM zvx9<Wg{Lzcny)C>$o<qRUFqA~#0Rq%YZRHy_@4Nlhb?%~wB3pier2q%P+c|oaxmki z_y@-v6V{$RbMxBN1r{5v?eA_`;r0ErpUB_3lRLG|1&{5!lJlr$uECZ)va_aL^LEup zvVWAncva_>BP^XeTY@Fd)mh6<OMYH)@=Fxgb&(r~FTc1IboOy#;QhsY!l^HWj+{Lx z@qOd&l?O}>j?G*8@`8_WvU%s}bw~8m-EW8SMT^$o%G#E8ShhASpv+{c)rYb(W(#dK zLzS!Me+~C44svYUb-~+V%IDKbyKRr;n(Ni;TBx*lE!%6fh2y$^&c~kzOcOXBYa9MQ zGmkH3ruT}P3yFtLt?0H*J*&I?z>T#tQXEdmwEk@pn>{zx)G$+LgMIjo`QnQ2zFpJ_ zty{`jm?^k5I`@7?XG2sCXVuJ(rB%0^+b4JLSKlkvRXXX+!o4TuB4rv^oBjwsd-i(n z5kKC($PK>19roGD9oI#JlRg~%KF!nZ>-qP460YbNe=`$y$~sWXE~Y>0S9{CM4<Qq` zpO_Kj5Xqq^Am}L&^m%)1|DCN`JvaYWJ=MRzWLegfxd+4-f7d?vyMs9`$u5n%qveV3 zg`nrJmTz5Iw3PF_{<(GQ{QuwB>hQ7tY*V@WZkD7OwbAoaJCoL@Oh}Wi?J!ld@XDO_ z=9}7*vfI-&#fvRM9aZ;iZCaw|W!|cB_l-EKfcp~_t*wV&8#YcTjGw#c)9T~N{I5l} ztDoL(&>1Er_kQ!61uK4(+T0Trdipc9J=UxBS<=}oVf}+=5?wF<-Yppax2*K?`R|XH z-8a3nH99S4v(%o`CjODuYtP<vE`74JCOB@2^t${toC|-nx*C4kD>#KoYu+xd1Bq*T z4Wk*BTrxRp9kX}(o|9L<9)0`d%dhjcr{{g$E&BGuUv3@4De@sl{nW+RORfKAZ~bKP z%Z(eizu*#B8fAL$>gm2k0zs`0*%<{|687=m&AhNmWNF{zb9!GLq{Qd1uxUBA`M$rs zO|g(n`SopFZ??a`UvK<@U5o$dzmH#>`F}9H3q8N;<NqqJnVatFg#Fz(^Qv`M{r*Gy z`J)0wZZFTMZ-|z4JvTcreudg|--oLX<o?>!@X2FogZdr*2e+KAcbfgaTX`(MJnrkX zR~Kd$OPK#@x>mP#$~Rlrqj!(aIkKT@?}qCuWPLL}-%9xtdarHI?%mSs?-e{g8XvmO zsqB7diRqbMZP{H#dzZy#`p-F7k7(YQdlyFi5#X`Q;b&lo)nQ<egV*S~hI;0D#(F84 z#U;9#d1?9jKAz65e!;GHqoRv%9}}(nzWzqhvfxa%Wphn3rJr|heA2eoIn!llp4#Mg z)eQ>U**2WeQ|S8p)pq*c#w97`zruW%nR>ptx%v60x$oy3<^H&HzpMV~xkB$tS6VHP zv-$kQeoE=Bl1Hz9zIOWKTef%$`^T@Zuiv-XnPJZJcXs&tZ@>S>Trw+8-o9Sy-l@G+ zjok0ozpsnxKKjaQ&)&#b-S^YYS8uH-FIKl(v!1)KytcZ$`0GR6y4VZB;itd;z5A)1 z{|7JUk1V})A#1H|8;bJ&9m+QTtUil#`($6`C{=621D@=u(dsGTotH{P*9&dkm{hV# zAnfb4kmSyI@i-B?=uGp7y^<fR73Z!f@DA-f>$oQLq|-j8pVxYB&;8*yL&`3r;@p(v z)w>=>=qLM&X#3W0sM;;va<lvtR{*EjtA`3tEZ+27{lDz*o;k(ZZF6N<a&~PM5-W?Y zI&oVu*daGnd7bB%PNC#>c9pkNC#ZUIMm0!2h}1uJfH}@_txP^Io9voQF2%K6@=`&& z4qSe)Jvsc~rb}DazTBhof5DB{iN}j74)3f;*Liudf1A00;mK7OA0Bi!)=zbFFMQ+_ z|0!s5_%?>`kspM#7Fz!+S7cN6;`BTIe2>V#PMri-ZR?$(FKq5y?|phsJFMfc-^Gsy ze{Wf@a&u?uH>t&(OJXuEwA^`Iw#(gf>$-!p_HI(`+V|tz*Z2CF*38cm53@Tye!#ZD z>KDVEl&Rc8j!)c56Iz0rwbd^f+fF`RZ}!+H=0Mb+>2qVB#kK#xpvJ#TDsY-;WlaU+ zE5R*S`9vA_M!%I|wK*!O&bafb%9U#yqB%7=US5@RkID~SyQcN&muz3L|1Hs5mR%|^ z@r)FeS+jeS<VleUEsKnsGfGw$mVa1m{B^_e4@FxPEtWF9Zoi}K7{_BD(DG;f*Rm~N ztamI8l&rav^N)35!Kz(v`2NW5NY2r)&&rPavGLAHzAb#5Oo10IYl7Mu7UfI*-zXNe zq0%G9(00M}!V({k*>TBEl0oO>i@7H<q&KWrXFqq5+wa$b7jFajp69LB(mh)6;&XDn z$+yd#8gCwYUz$<Cp{%>K;oTv_B&H27|7?tkWSn5*arcC;@F)AjOPMZ;FmIS*Hznmr zYeQZFTZP3T>1ZywYbjxtJQ2|+oE)R|A2IPQkW0ON_}m781+s_ch(DU#y)S&jXJwV( z<ZshYa)qCI#lGQDvrvYBxpg1IoyU84|GeC*vduA|Mp@Qs{o;@{1^hjA9dgIC?sVO0 z-MQiZ%cALxj277qQVcUQuQscNCy6v?*39Ez6*DudVG_J|w$iLJG2-czW)H>J-Z##e zOcB}OlV8fdd(N*vBK^#MS0{hbKeF-Xp05V8_P+PnvtBA}YtZpOA$zxoXl968xvgH4 z#W#WduDa13wneOumrP!}i^uOegUhyQs-m4rt0!Juq3*S?bjr%f*Y7J$`7Kp{?eTF- zfnc-S`cfCvV^%B;<QFmf$a%Ej=}eCaDL2fvaMjg&{Z#VqVhp^0;F@nku6Z7VwM_-f zJ;#f#vnE&BiDoDt`Y0SFxX0(|yPH`Pg+*ObZ^=EbU3_4M>5NC2pFX8tjXU#bW?G!s z_1_$)H+Yy%Xt>58A^xJZH%FuIo7nYI7rSHUqT>_9p16gd49Hl1aA}I-@7<4X28nFc zzR+lo=?6`Q!ZgQjCt*d`^>B6jl?*PaUSnU;q{IC-s__>Z&9KFlsndt&xeH+>_C znJ$iLxm%<Q?i7`TJk2~l?Zc(ZC;D3|R+_9lp3w3#(%I%vV9ff{7kl_7ZJ+v0*lE7+ z8;t<Hr(d=yziAI}k)N1&-c70LY7XnSX-em>{(NK7+W(`}rtHLl^Fj0OG<5X8y|^ri z{Zx*~5#azgR}Vg~=f9Vzl)Tz5_-OgTTyN%Y&x(3m%)RZ|7Oj8&XuZekg4^3a{%DNs z{CeW()#I;jrm1;vmYFIV;yF>$L!qVN+>u8e;tZB8!Ayr=UuBra`H=m>^^oe`n8n6- zy+7?~7Jhtu`hlu9V$$lx6V4V?L`JjDHxby)9;`HBen|2C{}0<1-fj||kZgPGBj+Vm zi}%NQ*RX0kE%?^k;?RG;;ap6XZ0+Mt*L&Nan%E~9PJB99_WYFMLt<qY<c-<yda>O7 z&-^~-fYDX{83`APcp8-&oBE^|d0+e-Y5blsmOat>=Yo!>tgS2h%}RT1_`4di80vo3 zGY0m^-Y^tow+Z~VW<rA693I~Tc3itp?aSYA*F@H0?wXz(PeZk(S023gC#TF}gA(V- zwbF%~o8OfBMfu*0jCPoR;i86YR{Xpl;_rlRC0y2w7i9d`FwrH<|8$>t3v*%n>(#m| z&a33FnsYy?e;voxJiTeAzwEy`@lD`Lwz5jS5FO^2r~1!F;koqp?vM>i+qWItIX%U| z#x2wBiT@u-8+}*h?|E04<+cV!>oFy4Tu}3f#eKyOnFE2o2}kGVZ=F2H$nv>BpXi^9 zLcy$tK1Y{Ll+XyyaI0O`;->s`hJIyZXkqCA5!d&v5fk+UwsGy_IVirC`_cygH4<F= zW_DXo^>2H&rBs`r^JZTlM?nC4p7FuO=@D`}Su&M#%$QCD$|x>w{BOQd$^Ukm-a~(d z$ca&kMjl*i!!*AY<x0Ki+_8`SO_lJgH?4b~OzsoNjJ_g%^>H2ZomCGzIHD}S_TE+e zH&-SksMg}0%D&}BQs3^RRDXJ)7MS^F@rL^63;T`=G<|a{mr%cByDO)<WrxHi4dLkT zx{}Tt=e#_Zx@~hPvr2?uMe(&m!Q~86vhsSjE%IhCEjqyCeRbo9i?IqiVO*8L6DM+V zT~u5;+g`d~;oOU2o|QkQ&yZf6KEd%+Xd8!ah@_3$tjWgb_*NEt^z`%odL`qkYE#&k z{rP_`T-|*2?B7pszw%6aU#L)>eCwy}grfA{Pi{_iJTTM8a-+^qZDG+Ue@?q8qF-ld zzPJ*(SxLil&gZlwn-zja9~@tB9G!l{RJi!wq4c+22ic6IRAsjX|D1A9-}5Hd5e~Cj z;VV-dkEgs&S?C$EGrjbO9s6g`2~R6+WgR$U)#n_Xw9{AgL&(03M^{cweNc6C%IWWH z>1#sdQ@I2=UNGE@RJahP|8YY5i`jh7i!T@`ZwwHcb>X*cd16QW^0ae*e4jK%zqEML zET?3;{zSmCS3mA39kKFB`@Avd#HvH}(QnE>b(~qka&>R(J{4iEZTpzrpQJCU<2o)K zx^!1o4s-5Y7as<(cmJEL`we?}WZEPW+BTnbxvceK<_z{5A1(gfFz~+{J;yZgl~%{L zOB?2K9=P~GyO@>h<MR`t$0p8kyJnTRGhL!a>h0W}MoES@V<)aWpAo!d%gU9JHZ~W# zo?PBJ!%KyK`?+P6o{f`luksY_TO*x*(q*Y(pIY+F8!Kf>nS|SGywCRS=X?-ny3xU0 zT;6KMqP{uH<PsMLCI9vo+RQ!4;=YB<<`X$HruJ@}Cljl>tlwIWzi7s*+)pn**I%Ah zIm<OGjq$M3j9p<5zfHWp{!Bynqqn?Qr}sWw#&fyM`>pIW!JxCf0eo{-iNv!cN~P$1 zls4S`fKfBTaGOi?i<cT7`0bomC<phiI-@YJ!CdOds<m5c)|cF={;|8ko>7F2>5+h# zv0SXA)44{?@-pR?w(sIuKJkZ4+j0u?#3XtB_D-oiFmvC34y&IM&)S_Yu=P4GSz>l| z)qS_O`TZLfSbyN0R#K!XQg`{$SCcH}Ft&SvhZy&2CtYrwd~5R0oD<6)n8)*;o5HZ| z%KYb#ysWe4ez>$vOun(cDVEQWbJ42V%;p=eR3>*%O=#HTan^fQljzAryYI0<Uztje zE<9M+J<GoL@#)TD{layu6YQhc94)dHw%56Ky42v^@uz?L&E?-6J%04=-K5g}d*Zrh z@BS0@@7dglHFaY3@$1$#yvx|fSa;;*3UBp`E!v@GYQB;##X*t<uNZvwW_C#_Rda1j zIP?4I-`}s9*6gd=8MAkH^tyjle=mQ1wNJo4_Ws_#f?Hz#Y^d44=l@Kn7k59^mF|6Z zon0*M*xN^ZGT$EledKqiZpZGuk@3Y_pWZ&imM`Y;U(W1m$!iC5<2#~$hgogXee+E( z6<ZbXUTp0T_@jE{?6ajdxg~rSf^y~uwwATLIXA^>+ew~R|K?3yw(+Oy>rCU*8^2Gt ztl?8T>iT}`ofmC-=ch+hvR;^<r(hewR&({j2H}zxKWpi&Ewgnv7AVR~mSo+|NQhs$ zOXpE;xuN9KV<*q2KmOa)$#m|E^j<|L_fxrra)R%54^3m<*ZAN?*`Jy^gDSsM?0l(B zr=@(Qe|IwM4BJ*@J@?_`S0B6_sw@wD<$8Z@^X+sG4TWtrQyW;?(sxxTK5u1fIW|-J zMepOR)8)@1jwY`?7XA3K+w?V-ZatDerSDdzr|p>K&!abQuP}eq!;R918F!m5yY*Ua zzHD97qMToGkERG%9_;A49%R1wX_m_Dsy9MA7b;ae^A*^`df>s?w+E%Q*&CY+J6Qf! z2s}?clDKP)oJs7YYyZCTo?yst`B2m>eqQp!-54FOHJll(4SRNcRuX-sqiOeU!Y=>I zUw>@+aP#%H15T&s8rrZf^?d$h)7-Rm2X1G%Rxky)OPyL5QqwW-_yW1Vd?Mwm-hQ|` z$wVM|vzcRgqFL{JC&B#6)(y>Prmv5BU^7F1-~LOCj>*j*7vD@)Ke9H(MB=8g@SJn* z`CCeS%cO-Yx9=BQsJQOGRHMm3jhEg&>US5ZxcE<Aq{H*aN1|FS*4QrjQ1QOWxvw&2 zdtJS-?gLlCv8yvL?%blQ7^ralVwdJz_w38LGv~`Nt2u}Foz>zG?7qD7<Ff}R-K;J! z>Q2a!I{C-0`&f^eTdYOH`tb0G@bi1w-1qC}<v*PG)c*bg?#w8Lj;asq^`ESN_b`9S zDZ6{B2k-wC*VFiuEpj>2X~9*tO~;(1?OIm4O|<$MwR%|*6Bmn$b@M;Ad`(f8XK$v* zrwjhbFnYN9t|E)@!d35oZSt$q(_82Bz5T~NhiQu)f4tXYEq#4unbiVu0ZxaHi{<uN zpEy-kX5PK?5nsde{*OviW>tkT6flXI@#(Mlk!i2atKoOP=#Ik_#pI{kx--(`y9#$i z-CgnJ6xZDeY`!vja~g|GcDV7(OI$nSUd^xR@d3UZHnQ&@?|ph`Z???&C5r7^p7Q0d zv6Q%!`beMs$M4WTPF2nG+_$gUf9bKE$Er2yv)cS8?ibL~`_TB~+|#GuHI%+6bFjqh z`}4!*LdD&mW>Xdzx`iyUP%8bK=6u=6Qu1c2!!&1(@8|ax{gT`9JFE7uP{=aX_(K=w zKa%@5*H~n7?-jrM1&6$w|1>U_`0?LkKl4Ym&1<L5S|QLhCxiD0kIdTJeF6mzoC|bH zj^}^-nd$lH^}8=IpZ_DR=?3-Fji#tw5)x-%SnA5aAdkDB?&})j=;9dSc-Q83(QS{i z_kX(h)FUTza=uDBy)Df|v`;Vj-Kj~_rd*pDwDXPH1%+zfMH@35M9inI_j=0y?R3$( zmw5~<4w0`*pDOBHzrnKGf4<#!>1TUSR2(q2`!m^NYsg1K>koWZ;Wes#kp}**i>!|7 z|Gt;~euMGpaP4_{eK&9F2mhFPH)qq*uA58eEdQ|Mv)|ey1`oM!>_4-~MZVwd_19aI z7k=ARqwD&n@c!eQ9>)?-l}>wBH*L97|CvN(i{vYk&l!wt)81FkIys|OAc*^Sfks%2 z+wnEge{&Dyy}!ZUa5vR{?Tek;k3Ih%XZ!K_xusuR*D!A6tA3Y0r=VVQ#@(NDYNtgx z9NWwI+qS=0fy?^F?dqRb&wA*2>-rt9(u(a-D&8U|`g?Ul-udP4({pM{kNK@%e@<=t z<kzbuckh_DY4^>a4Zi2|mt9XUU;d-QVf8t+&9`4ZnQmQkiL2m#a=Ox#jb|PR-O7$- zp1*FX$Mlz~{Yu+}Y|<nHw1i)J8OyPs2`@}oupwZnj=LFScd#hK>4zT|unB!<5mIqF zSNvyg;aMgZSC*W8iN+756Mh%?t@?Cy(%w|97JZ>>n)dOX7QdzTY2_-sS)DTZ)KR14 zEZOcUjH?(t(xi`hK6n!U@{iP>ZF6r<O6QpnxkQHH2zOM<%P%ZRNe7k7{M^kZoK99@ zxf^8gPB^4pb^`acYX>wVGV~Q%%`_O5H-)$|9}9lC&!uD~<2|wY&k7lC*KCbixr6Ou zUPAUvU0$2!hU0o6UKOg9vot1Lm?YiGaJBNz)(g8zT+dc*%6C|?)r0-OKam|h9w%@7 zsXkzIw1)3c^Xse&XM`37oC>pHTioo_Q1RkUe3T1&&R!80u?b36^Dj&0PKlmu$e3Zv zIYTh|Ymgd;;S|LHTfvq6?qA~G{`H>U7wTYlc!AXco6C{~oRw@jtkTaFm|yJdX!O{} zaxH&u(822MC;lw^r1zRp=TG>px8Y0K{wchbOPQejW=iPO)odO%hjN#=u{?~^UTLZ+ zadLg2Rnqft*9x|X9|>FzXTwW5{elF$OjrxPWP8l{)#Sb|M4^#o&X!$z8b;q1&+%YC z)^JoSd18#`5w0hWs|}(T-^j9(m?6b*eGacegK0t9!vi;$2Izg7a*Z)s`D4q>-ShrS zx~!=*mCHY4oRBRyF|KW8)WQCLla3dx-j&pJ<)~D7f%=9oDx2b+kIht6Zj{XtUck26 zjW6J~%OWRjr)!gv8HL!&TaHJ!WNzN&Fp>T7R+B@<W+|#nCnL9c&Qm(iKD91WVy&so z66uM5T~6wS3fOGho94{OyYlVVa2tl^?+okaomWnuul22@;T|LF-REH;m51{zU-LX^ z@@=g&o6_n#>BfQ0Jhi%kmlETduQqpgy6^L15N2S|<GFI0;ehO86~Ts+${M9huKm4x z#Y%W(4TGKyM_bF~ySrQ--h8`d)0LHuCR>WcXBYQ62~5u9_@HyeYJyjC@<)#(^H&e5 zH2<b{Uu0UA{^0Y0q$Q6WCwVNm#=yCDo)M!=;L6`@3)bui*}9WWWbeKU3XMlh`Px@^ zOcC66y0z!wmSty5{(9ft*B1RO^T4YoTd%n0ZnRmRye8boa6--v&WRtUsPMgXyB^&c z;v#)v`wwoxGQObpPh!p;cgmfV4<;;A{C<-2T4+x94_=jtRZgwDmp&7Toz~kKrMhfg zcI(TGgNqe*gjR@0i~LZ$pc^--kHu`#YUhx)X<MYPz1?+Z!J-<;Dsxs1m(ubjpDk~g zWM7Hd<95l*T&ZO3sf&$I=1V0;#Cn~0YyVPob)#IBxD)f&484XMiW6SEK6wB0BE@UE z?{2I;X!0@OVOYZE4u^-qtmjf1?#%k!@uYC>qkl7+w%TlqNm>z`dqz-Iabn+0y{Qv_ zEMfQGb*s&H?L5wUFB!>YsT?Xz0&)w&Vu}TwUiF?kvg+aMz&8rtPO$EBnV-bG`%(vQ zRh95vQN!%1md#?u+f;2u*D1s*9{*768^}L*k5YBs;jjEDjkEQ_ZLE}XFCRE*8WX5~ z>3rzAgAopVzgT?>qui!`y%3tQv*ToWqldD8C*xY7UboHFtThkUWO46#ciq=b_rB(d zM<#!7E=-#GAY*^HY03?u33Iq7cypX&t(4p0^L5X%P1zr(%RDh~GO1zxWB8CuO-j@> z-@J!i?ziaS5SQm$6sC8F+|)5Y*mAY;+LA4<YggZMaR@n})sm8N>Vcn#Z15bGgXRH@ zO3z(V91iY^XwK|w+Il2HC+y<{6%Xdr53dCl9Vuz#+<5DQ#%-R%AqUJk8$UIFy2$vp zCoRX8L9pPa$s3lregXbcVmn^;O{(EDXn3`N!}Eya!Y=g!ap9nhswC#MS#kHKwTbR) zo;00}O*fI}=8m#sa$yqHhc8C{v457uzpY!vnYBH{uvk%5VU2In?exxtj;*gJ*fCyE ztrrkcy)L-Ks+-HXXZpdJog8=Ce(Fb9O-*ZC*c!X3v$J>I$v;=~dsK|}ltz3|>D;hq zL6U&fBeq*%-K*paIcp5FqxE>Ns3nBziImx~y<TYQuNv8Ez`FW{QJ~`MeS5PSs&<{P zSdx@zYd0ga<4V_?u5H)NujprK$(ZeG$eyWCDIHmTMJn=H&CcU$il=;)+pi{g2BveV zr4=OxJmT)NpDehIb#C0t4(XjftG37qC4Q{hcgpad$$iHpi|!v$&yAdgT#^#!NCsSq zT_!1fb<Ou+wiz|EcXn)3ovvoHKjqo6*y|tjT_@T%7%RTs=5pQHE4*gItQSK2gWA`6 zmj^EYn3usd;dW`{<6Epd82`Lz+3|qM;piXx40Bg~TQkwCT}#|G*8W(wWl!mAj<Tp- zH`ZVEvlCPm);9dp=3H!WNTpxm<H7r@1SjT9_xI7*eE1UIsVP%Au8UlqD&Q97B<jeQ z{YWM~xWD|Ur0qR(k&}*-#4F@o?muZ(P!sZKblW;B$z)UA9}|v4C+}Z1-Xp*LP=}S? zXD+>E2@%VTX0RvEJuV^~EE4GPKBcE9V-<6$;Sv5>Pn@O-m`y7ab8$(0VB0$}{-B1a zq{g2EPxYq;@u%iDWX|Q#<q++d!es8ytG~Fp@#;FpSzjFzWUMkc_kB3LIq0u0uMg*H z*8Q>T80}M2a`rSdyPja{65{%>tfE$B|3-$)Yb95nwVf4smZ`*EYqGDk=BA6h>x$~q zT5C(&_f3TrXFB3D_}<){!L@Zx{MBz=C$lczU{minud5LIvay-xLqit#(t_?Vvjv7v zZ+y>SOz$<0G%9x7b?bp;O$Oujb2G#2CVXI8<5AH2vM}2GOrGvq4we}WM>aaoww~iX zZ;D9H)S$mAe)eH=uTHzL?dHt4P8yRFGsO){BBlsBe3qHIjkCT`SK2##)jG53*$b0) zI4f&jX!5ylAkMJ-pn(2<%?ionzZOjwIG79$2KV39^DXNwD>Jv&Dspn1rnyq&XvT@3 zrxvlgmAris8LQU4>*lLm(Y%T5jQ^~U?%Aq!Q}@E1sXDCl7bh|wR^{c%-mU%gWP}(u zlOX%gQ%gCcg`V@wIr&-kclphzq!#Tu#+gx5r><H&;rA>H&9mhvH!9vK{@t`zMR&7< zm-vdCsZ2|w7`L^ya-6xhy-HO_)ccIswoN_L&a8^8%FBEyRWMa<9ar=QX_KqQOOy_# zxpPIXl@izTE)Z;;mQ~ytuz2+z(O!{Afo}mCOC2k7bia#Ars)P(Pnx)1BXjFq)8N$_ zi}T)Y+%2()!}p9>e?x=*Mj0pd5UEMMRX3N(?G5i*HPz_Vxl5VG%FaBmSe=EV&ab{Z zJ>PR@?hmhwaF+88Mk}2I=9?MJ*Pi<D*`jW*e?{wjHua_@JHE8u<?Iyt{K2^`94(n= z7VX-);gVd=BE8@b>{;R~-!c`I1+D45>Tqhy(ZwI4V?-=_ni5t<e7N$Z`nBcbKDk?h zGYZ64WSTsmYNH;I^3iy*P^i_G6B@S#%oF4G+MWoHxUQ?@u;y6T7sl#@Z`u#CN{{H2 zc|FVvn!aO`&&00%PcD@e8!otbz?&!2Lq&lh$U@5H24lDa-{(e#X{EhO1g!;o|21EZ zJD&ggZd6R9wQGF!8=ow%-ohEmDe?;U*nj16rE0G;xIe>*Ei}!bHE)*cBsMR%(^_vA zr0m%0x@(UU|N92lWwA@UUg_x^&*$`%f4%0xp<Rz9XP?>iX8Ok*qt(Wb4?p>K_v>BV z-v;yij)!lb{8@7Mys+c->-2B@cxC>r{p3~2mexx?EjCG4<IVFmPQGKEYUZ$V;}!M? z=lb$)+?p^+=uXM@Y=%Ym{qpqBvmaQy`r(sTNme_5ef{(I=he3jd+q1X+sC}-_<kQf z_3is7YQ*{Etv{EZmXjINTxvXz>F|5K<H2Rc=6iR}n>#z>aLIq=H)js+6>@M2y546s zf0@(;y|M!zLsVBDG3n$GYTEKBXwvgb!6CmGmqo2JJ<{jVwrlsqSvFI`_UW8bKW2IJ zC)X>h5O$qeuDxZEb&n6e?_=e767*?jPsWe5CP9wo0>g70_RPX^t|3R*?}YBk)O@=0 zoDoM-n6Bl~Btg%PxY~>IBEd$@YsK6aU-}VR`)VcwS9QX~Il&1&C-gSVyZYk4rHIj- zl1nDBm)F%FyOqDwQRmmyNLf#(BVm&~On!9fZ>x^uINB>U)!E%j&|>ywqp3_?+?*|$ zM-vaES4rG3*nVJc`oSoJJIuGuSI*pcP-B_k>IYvu_FixdInO<N`fPQhZD-cs_`i)S z`2ES7lI^OKl!M$D#k^RvCAVJPwco*Dk&w)DnSh=tk6WGe7TcJ{O><9_n|@H<@~67m z<qg$sUV%%eJGx{D*i1?HnedABk<^++H;**4dph$klvQTt-Rx3yION-mGT!Rf8#ngv z<6ZgGhBe7Vk9lg>rP_!juC2LhWv0L9=d|yBaW7sgb=9wsjrp?Y7S3ZjvVWn%Z?<JK z44!S&Kcgxfd~N%+O6MY-FvGrmrrcZGcqi@_4*q;1%vp1t^g_uaJcqZKJe;?p-%Nj6 zsdv0e!}}{z#^J$A8XR6<*2@Iko2~ZYQ5!3RcK8#kZFfD+a{ZRzt;>AJS>MHS`d!Lp z;i;l0yDV<XaXi~)Wb%)Nw|Aql%kB-1yB%64gw2{ep_4^-t;)Q0CzN)jEL%`?x#vk{ zRN3a-<195D9)Z5O#R(VQOg>|7_982;q*+8OGhQY5byrCEq4!MN%Z^&?w>oUGD0k0} z(!W2Rv2FAD_gKQUah2x-PO~zbRaQ>D`vq6Mp1U{p#~nN20|)x@bHnGpdfCgg)^{?; z-u{!f*i)CPPf_ABVLs08cEVz#rJo|lg@$*3kN=v%*0Ma};-<K|$1PL$G@X5?Jyo>- z>$#9Wi)PqoZ4`aCq5hTes%HT+ot%HL3bCyWZ=8Pip4LO}(>ZLfR^4l;uhL<YU-2SY zfay0YgHmsA^5$FLm|w+pev{bAl6j2h;F60X=hXEi3YA5R1N*LAba9b2?q%53U}9Q! zVS33$@jQR48;Z6r(kwA%&nk3U@7{3@{HEQVV)J#n#l=f{Ax|e9_{(M|f7A9Z_q)K^ z+kV{Gb(bqX;AHFeqeTI-f6{GZ0?wTHUcaWPs8Ur*@A0u*=~GK1jkZ1IF#6cK#LUSx zEUfd&oK-t&R&RMD(w4sa%A4%<GBHl;N=>ch4^547v{7GtOZ4zf$$MHmyfk-Me(XHE z>s8bGRImRDvz`bo)-5{Ua>MDQretfk!t8>l6%(5qoIP0I8LaaUyS}O@wQlL`?_aIV zR~{0(_aU#UGp$tBN8;Pr{Hr+!t#7Yut(U&AIM7M||CI#)f*Ib^9mI{gf86n&7Q?2g zF4!z!Bzvja-Nt?1r$hsJrI6mw%V!5ld|0R(_2OcI%j3kV-&1DJefckLdC5Novj@RU zZ|~(u%{k~Nvnus+lJ|3wT%~Oy!4YhR{!4_6b{j89S$FfJVfD$jH{ugNu3frai}9m{ z+nTp;s!EM*%-8!nX6@a|tGCDFXI5)d$;%Y(u-oP99>llb`}gnKwAU=3b?z7}R<w#K z;q_wr)S7(CLOmk(oy*KH--2nDp%!~t@2_ptHYn3~^zGgCdf~xGGyc{%Ma-G{FR>!) zl-c3izDj*3SN3lBCeqMZx;~Lt|G+awrenvZ1e|v`*?)2w$K03m{rUDB{`+fv=buB; z=gk<!)c^b{PVnB8slyifWLNPvMtz09$<|C!b@98l->{l1U$*DPwVix#rDf_=e80}A zQ&?S)|E=at?d+tzU-;Z7@D<8LD+s=s5|o`5qWR)@Ld1gm#+&cU9(Z?8aGj0SO_fPk z6b)Y)7kPi^sCM6`er>nvV!PJ~3I+X7>a%SB*u1KC*d_1q&Sc4H3&~qAYySO_oXpkn z$ol`8o~H?iMGcG>MoRj;daK>OVbkS>SsEuEh>KKJC%@g%AoM-|S%>|zOaGZ}UtV+h zXJ|^<oL-M~DZ4qT%RE-<-oKe1@|OF8&c~lKJ{a97$=G@D;B2N&Ki>4SPeiommsm}E zu0FNhHekJr<CNk{rAtmea6f-&b<w`t>>Hh8EH7*CGFMuC@#CWJ|BU;1QoMaUgSK9q ztI*PXrt_Xt%KR5r^9%gXbDmI_oKtc%?!&VO56-@Rczf^m{C55Car@==arWQi<Ny12 z`@(vQ@89G1z1sHGu)DvpXG7fk_WVEB_50hJ<Yjo{<@Vl^KgWN#d7*xs++NE&+}|sI ze9DYiVW(dG;MLRkqbC#hI}0Z0b9{XFqw>!a?G4+HR`FDcoJ~o{^*j_m@A*b{xu=KD zB&~>GGda<fzm#Eu?XhqDd&1e>f3KI^EuiB3bI#Yid+*;nTKwJqKe8vR{&zleo9r9s zm}58Y{rh<D-o1U6AMgI=XGr`1o~d{T_nCwDS)XOFOE8qwd&H#o=lo~r5PG^gqTWQS zkn5)WxdbuOa_yO-mB;cX6e;ajy;HU}lrg03!GFI8>=Lh+Nfgg7ab8;H;m6d+S^L4W z{9JH=kkB8M4_&V(?wSARIk&d8ejoQN{u|v+4G%tcTd~KznRZoNBX`H~PcM!#%={An z?T5k_lNT~#Y;x7#kDiqOJxyhvzmK8U&%0kP24tn(i<EWv@cZP9t&?w?h<}M~E{^-S z_W0Tf0*eJQ%bQlYC$%VX_;sD>$#>0qdF0fArG~x}0~J12zHZxa^U3)WQzmnJXt@42 zj(FtBGt=yemfiI$w-;Qu_2}D?8JumM>^9{H`y;`cjWbP^70qvI7%<-n-tuzC5-Ioe zE4Qxvt?l^fyJc^pcFjk<g_Tmb_Nl&UNY(yrV)4yCjd{b(nx(%cRR6emi9_b}nIAG8 zZF&#>y;ykjy~38uH$Sj>?=~^JCb{YRmprDE<^~PFP3E1f`ri2I>vlE<cjb8}F7mg1 zaAvXH((wE5qZ54EkC^}R&!3*%U~y#2Q^&5-!Y$SdigF4yrp{J~{w1r>q~CpW(xdNt zeqQ@1JV~uOd&;u+MUy68T-fT#9%<ZtHzk<y?G#pyif^^&j!M)Bikr)*87(+`-gmWR zAB*XMo(I2W*jMVtO}@9=VEd6Di+Lt_?EK0xbG>`oR5e|Tt?y4eY1kZ#boTh-d%QU< zeuh`q$>yC7vhoXgmI^H|@cHO;gx@ICFx85G!s82$+ivpKx8!bfxnj=und5fIl}pE8 zCSLnl%csS=^W)T0M`Bj$&pNhyqVuwIoZnhn_<0Vd^Pl^b!#?+bwOd!Pyi3|Kvyx@c zH{bSuJp1JG&#O1jetq(4?#rD#d%xK}%(q@wbpGy}nkv(}`aGG4pMTP9X4meRH&1eT zsNMXz^Y8g4n$CKbm;UEpzxkIRcfY=|JTCS+f8Fv8|E^wq-F)h>l-|=vxiMYO>u34o zzdttpTS0NgbqTBVFy@uMH{Eo_zNM->XSk4cI9V+5oY%D5(G_n#KY8`&m-OTG-$&+M z-B_PoP|f*YBy)X#*l(fpuXoCS++ipAZCeD(yy?@bxq9M1vaJ2wBcyW5zQ-UvVVCvX z`lENOzTEh0!M9<_xn%-c9a};+`MjFdw$L)*<BJb(FW!^RpSgC?KmQ3+|K$9?u591? zf%|~%Y=$eZ{?C0PX`tv<QCqM<_{D!F)MalMvRmH9FfcGgGcYj7;2us7_i%OfVLfQb zb=ZK1^+N3O3pe<T_*&U&8ZWJFxo}Re=2FANCLR8rwfBGjX;90rxbMsDuX&l7Ykgwe z4&`HlX=^{H?pr?R(^Rp|6Vj(&FWB-o+M=f6+AdMMbF)`yE_vnog&oyZiP21ToD2*M z><kPHD!5%$l3x&?lUkOVqgPT<;_a#BrF-Hz6WV-%!nJAUbD0<z8dw+@WN{l6<m&7n z<g)hC$#shY1lS(@trgoK$tt!tflV-l?XEye^8zMz%SRu+<X&3%xOeC7d*S;+{(hbQ zo4et!{zlmaHF*y0VjmiNOZ_&UzQ1w5&D78bS3_LG_Xt+*t!NII_*Tg?wSH%}v}@q8 z>Q%GUdxSjxt^U(}li5lB#y81cr^g#7-ky`pn<H#&@TU9tw5|Kj-3`e*{7EyS$tHxy zZ6b?pvYmvz;oS*cd&BOz7QOB)%;aH;=a^HlQNjInY-5|QlUH7t$>9W*jVc<6&y*_O zeg4F}X3ez;Th4jTb~a62IsK*dpNxke9bY@2Q@(QMTzdnzB(H$P$xlztq()vg)i`}m zqb)duU#`-btH_4?tl7bvQ+d|Oeel<PeWPINo0468>!Ml&H%~tNY=4yMtNRjuLM>l? zQ}R8O^`b6&yO!Sxs=Tx|NcqTO_f(;S1?6gw6O-3hHr6k92>+tGV^5*9=-d2%S8SGX z`%btJpmtQct^FkLr{d#ti`X@;Z^}}eV`f<OQ+BsF!=h#HkD2pxzWRBvZ0n~3<?VmH zl*(0Sss-0Pi|IX99LKWUH^nz_#{PXL1J79BcqUL6eQw))6(er<=+fT|2d%@W_2fBx z6*Ink`CZT2JE^};KHVL3bQ+8O^0vv`d5-$0(p)MohyGo^Rdco9f^#{KBub}l+&8Cr z^;Da-GmBbRwl=wae7)P$%ZK6jH?cP>zOGhKIa_4EbDLCGmqeGbP1W^x5&nyw@rGaT zy|h%Hc{!KwHoF~LQ#R}D?wp*lbXE56Qk(zlPs$f0?MX|Ux>V)t{UAY=6)#HeJek5! zHoKwg{YBPY()P9!K3uuJOODk>ZG!#8740`AeID#_C^xzMN@#}e!YzmE^ku3ib?vaV zcx;jqHK(xgv7I}ozSMEAZA#ygx%O%0*RUSm2RaRjkx7JE1m|7Y(4&zUmNbG`&_l#f zZpIGqMl}Kbo?VbW5MI*wj2V6m8Op7@$R>a`M4(?R3epY2OB&7D;U=J5Gm31&VJwHA zfpmlLlE$lga1+puLPItK+sRNM{UE%g@sA<g45SmE@aYGg69v)>!b=+UjNtk~n>=us z0Sbv_Xs1Sj^n>t{#uQXDAZJLSI{|%n6-X-xFKMiHM{xpTuNArx=zEet+Cg|pV}}Q- z5y(4~kWB&k1AU7N$OI5x(pc|>VhVi23$h8I8Cvv})F9m;yreNI0A>QNb=Bx*q0jb$ z%mLvgjZ6tR&4SJSq8o-@*MSTI;U$fM<v0xk*L>(Eq1R6!Q$To0<8$05q10CBCZbnU jAk#p2OQTT*PPaiStpIOUHjq+&27U$!76t~cY7h?q#D_TI diff --git a/dbrepo-search-service/init/lib/dbrepo-1.7.3.tar.gz b/dbrepo-search-service/init/lib/dbrepo-1.7.3.tar.gz deleted file mode 100644 index 7c13793a4936d21d621548c512ca88cfbf914716..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49697 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 diff --git a/dbrepo-search-service/init/lib/dbrepo-1.8.0-py3-none-any.whl b/dbrepo-search-service/init/lib/dbrepo-1.8.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..a285fef8ff07eaeffb5a1dfbab34dd395c0330d9 GIT binary patch literal 88139 zcmWIWW@Zs#U|`^2xHGjnibcW2atkv9LmD>&14uL_sVKD|U*9peu)sMdGc~V7ub^^j zSZ?=i3xR*{;tg56WIR~IcgX4NnDB1dokOLQ)3%56@%1G6%iKLRN&95x_xtlzZht(j z`S4o&qBA{mXN~iPw6$0Ac*t%{3*DH0Ywg$5k$?K9Es8FV6!8%WED6}uQnP-;q?WLr z2j_XT4==fJVb;2=Vwc1Sx49K-r-TGvd8b~zDzZ%bXrt&y$5oSNrTkM{W@WtQNNbz< z#sy^`zfCXCJNvO^kKms2|K3+-iCxRv$Fknr>dx<W|JkW5jsDWDTYPl%7y0UCZ|+#6 z@i-(qV(R_X(dX7|Hm`e~WA=H!zq`zf1%})1IjNoABsOoR#shX^_YE-*-#tFp#vC?( ze@^1oz3j@nBc5CdVA4LfaM7tx1}jWbLJr6|E@nKnwPpX`h3amMM>{n&y~<y8YPo%v z`6@I)<jCyBC$vwlxg?+4ADeIf^4G(>-8<_mls-&fW4ps<VUUjd`<S%g<dC_Num2zD ze0IUO^}$J%Pj2RQ(r>2LxJ{K?YG&@+VYScCCE@Yuh9ai&iUp?I!;JNePtC1zV+zo7 z5!O)Wa{Bx0-}ds;3~i;iuS{vblNB0%C;L^!o9MNHJ15O<D1F3up&&ff`$>Dq&nbS| z^WMGE$`uKot>*E-kxS;)EQOs*)a^K&@6Py>QtzL#=tZrp#vZlf%u6(d&n(GYGf|#N zSG1tA&hPV|Pi>n0r>7}~eO3!q{3CF_A+qBu)4jS6-Lp6EP4;DzS-bSgl3f0v1)b0J zcCS2}_v`nwk0<>WHGWm<c<g>qbk5r}^8<y~Z27EX?tOp$_ub3aulkSmvl{R^&ElND zQvdLSxX+nAwQbJp{@YhLSoQf&-<920QycSME^PjFGl#i9RZhjGt#7ON`r}9L=G~h$ z=Kfr?{^zQD#moAAPd0Cw-ZJ<7OXGb%k|KW@&U>O`TqgGaOkaqIh3**#%~IcY`*Mq! zvihIqad5F(FSKC(wt2_I?QsoX7X=31xNTQmW@LStH7#$!7Uf&DZ&jo!-?v?4=<w;C zYur0^|H@^r=B+WdtiE;TAa`=fsXJmHEUs_!iJf!cp8Ml3Te}J?HBXte-4pqk_^s2Z zZzp$J>#4nJ4iCRe-MzA4F>l;Ck!PFtm9Uj3K8kmE@=fOI+eq=<i+q<kC%$~YGUe9e zhwLY&=HHM!xzw%7G%Kys>fN`(i4{rAj5mu;9m&=2a6ei3HFEuLx1VuecD{JM^Yqc< z+phecbENhVn{=)t*ORjA3sj>L|HyBC_H}02-FsJyFX_6iozHWv%<S|Z)k6NHN!L@C zCSTWcWKww?wAl7{JZdiIeWTkU&&<GJ&ViE4eG5xU;JLguG&lRU0VtOjvUtf99Np!p z*~qiWEcNdN6>p<s2?-*<A7xBc4WD%R>wW)8Z;uq-ede8V_ipj|y<JaRL)ez^MU-Az zfBbR0u50l#qti1^%sSunPW9ycUPaDy4W0nrcg7rLUe6}viHc3S&?NY0dP3q15vi=( znVH|NwWwZ+JwIiV7Drairlqq~w+Fq65PP@e)XJGW`cA8a4;RT~?%-hE+J1WV`FCeN zHtgB8qwKzAmap+@^PU5z)p*|>{!=H&dg1eBH^sB+W_gQzwY-hFniL*}WLInvy!-3N zv3n&35<mW*m5Vl7F-14pBW2$7L+)xu6^Uv5W??&iZ`<^;;kf*4UZ3gw2`Q7ir$~7v zoZ5MI#il}u5Gf(8gzg0wmrc#)tlx8)d2z#|15-qHey&>3by3${mT^)~MX5-p;!M%1 z>(}1q?CePYy!+{+#C?h%qNmBl$OULlTckey#wCeRwPT<1C$5+y=ltTU57T;+Z)qDs zKXHccnSQHhwTS7*UD{0C_t~Zh?>H>0yYs44!OVbnN0=`$KMlIlSQNfDAl%$Mevz5m z%D|o1UND$k*PXB}G|~H~Qs}MH==k!rv-&K$?=BNoGnmeFdy|$#_?%Al*Qx50WETtf zPdnfpbjMM~_@IwWyVTEh%hy)F;OSo}w=e&~(;JI#9^c`<w*Nne-u_>Qf2?@_W3pKE zYE9FXvwKrA4lP{mn3F9~AHT-DY+dxN#c?wB5%Ldo#8->;U4Hk#M6r(LQ?YII+2#Gl z+*ekV2h8HB@krej_djaQI~}jZc2=P~HMY-rSsR)XP-c2_t&si0)&5yerXN>H?R@E( zb9u(Q?Q04Gs=2q<YNWhrV0u$@FL>g^%yX-M-x80ApW1Qg+PCwQcW?gfl<=r+f!zOV zU*;5+FkfL(icNK2cIi{}hUr$fOT7+l;TL(c$?ANOuEhMUix&AL-)|Ov$M$_np--$C zSIE1SjIHNYcXcjIXZtr#(}#UI*Y)-Hj@VZ%sbW90?#Br$y||>^^A2wgSoE3Up2YP^ zzTL_~do#arth3*1_&i8#qglw;4_Q*HL)V?y|4l{rvs3#zxy9cFQWF{fGb1t-gHChQ z6Pb*+m(>{<3YRh>SDQhp#fS{`);7EN_KAu2ziJDF{`82=IJNua(^nzwOH!h%3y)^! z>*UHk-;vTG(RHGUL7ZV}YRSL%=663IIFrD@q`(<q6q-7jC2iO9i<j?SzI<2sjCkQB z%fy;$X_xKpjK3w9KZ@Sv)xXTsro8FK!~VE+Mw9kc)~j@>JbA9_X&jgL&~@MRu1)Lr zp82i!@mb6Mn4fV|ScO0S%G#>%eBbsH9z{pIewcGc9!bs@?D^}n=+E~<-k(ml=xkEx zQ(48Y5_@6(lh8MlyHz?TPyDQRPOpwL<MNO9^)i-U-tV^9$yqbs<<HCSaTdLkEkC;I z-ild!YyNbV$k?<(r3Z0;oTOzcA3oJOdm@IpZr_<SmR&C#AOFzqDtwo^#q@c3oIsVi zqU6PAk5+sXny#{wTg~PFSFJuJqlpDv$p+uWxF>b|`_Hp>&$&mhODZQ%%6amm<jrz} zZyyYp*Ic)o$ri{U(BJoCN`L+ylNkXammic_9BtdxobIf@wBz{`mC|{<%3P11{4~FR z==+2_6DQdIko_}nvdP!H%$)~M94ueg@cY@_^7rl*YR}?lsUDfVd&-t$na_@&e)HtT ziwvQvOs>f@_Hr>>HKj*<{qaM>etnut<?{`PwroA8GVlC!LB8^m*LT=&o>?gTU{Br8 z#=c3PA3pkY%JToivo|dHoxNrmNR_+_N`K^fj<@iIg=O4~W9MQYSgP#eo@6nLnaONs zd7RLJ9ZQwld-9J*%yIdr#Frs>gq35RX4C8L^7Zu<|DWBxdLnX}gLH9{$d8Yo9v$BO z`MtiziX5Y|e{%X81wYDqPCB42qr9coX{CktG-0oTtjVeOuaun<>+9d}Pcm#muT3)Z zad$^MIqUa@Zz~?&sPtWS&uEEie|qFL3v1iGUyX|1ubsENhoe7q$D(|;n2!;StFJ{} zIJv7|`2Gr2x#?HDPNvKZ@Tp(=n$vyWre@8#I=jjeL|CpD9(thmagwO4yw%Y_pW`hm z2TNL8Z8l0Z=R7?UoGz*_{QTA1r!SvAjrN=+JSpX%h)2hga}zdA+gQwRF<o;)h}WT) zpG|i3cC4Rj6WI3dbLb|O`NyS>J_~kGzg(!P-^H=-#PJIi6Zt29bm}?cE7ShSa^Hf} zH+Sx96RoYaZE1_THv48D<NRj^^C}+d_-$@nI%#e1w4`lf(Or^n+Yee5&igOdJzw_e z(nBvJ*6B?@wZL%smyfz9+nNsrEtYW?vA?+RglYt%>zd<^`;vGy7L|tv)LHD`^XK(% z{`Hz7fi~?zKBu+g;`aRdc=+gpBb-4hQMEcL(l;)IZgpTPdU@y21wIuKCvk64pKq>W z0zJ3Y%}?K67?yA4u<>E*!Tm3cJYMWttRrD*Sfpym`>xrnGyc=UQu!n1zb5Ejcx}SF zkZH@q(+^x0zWB|;D!n+PebfHPGafyMyq*5>&UC4IRwHxh{AB;8KQFpNC93zGt~=ZD zJosJZvmXalwABN(ywsjZ-Dp+0{9a=HOtvYzv#w4oWBo13z4fur+;1{-oUbaTuLxG1 zTh!3JzQpTszTcNf?>!2tW@nQuZ2$FXiIjM0<S$WXdlbFpjZS)91mk>m&X4`YOiLGg z{x*@7xctpwe!b+B3r9;7)SfifHty8c?z(*RK<4Qt-#E*+vkQ)-*l*Ae)nMIR8IW=J zz`4vtc2%A({C{S1ZP;;&rAB;ZT1612bysSo){`@dPC<J4D>NQ-<v+H(T6Z|R-ZEaJ zVxoX(<DrA*3%snW?tSP#?l8Mh=nuE%TZwCrzWh-AD70#>UB-reGU0s3Sgr<GCEID0 z7e4U!%a@RO(QNi=8(&A7*-I9AncCjIFSo7+XKaxY&1(NRY0m%52m7BqIwX6pz_@5p ziJsz3qs}6^!~1z|HWlAwH*%i-Pg+q={GafitDznD*EO%M|L^no#8Va(%VnqSS(lgI zWKZwV`?ucU?eEApXPISOp7bve_%q+|mXm4IetDq@pB60keEQL2pG`9J1fy2N`NDHP z<>atNxbhua#CT;&sZ?;$8h@kt%xlj~<a`u6XZ7zbsr#+;&MaKFCh%e{ujr+k1@|uX zK07Y|a`SXghh_8MEdFZ0!=F<yGD}v2fmup#T7vS{IX*9*<?Q0w%BA3a=~3FxGnLM( zk2pl_nCNuVZ!2%AziZ(|wR@bVcXJjCs4XwauHrf?p^<!W!@_fp$Ai5p{4N|XiRn|d z&DIGBS!(U7AHD3l@U4V^(tWibo#tPieIq{b$0i$ruNSPAc3n)&==pbYMw$Ks>GYz# z5f_)aIy0>H(eiq9=s}>|gwu(;4u898GUusmds^_v#MfuV9alDQ<u0{aaJQ`O{r{3h zhfbZ)pSjFIacW@gT8Gpxk-A#VyUzIs*2p`yC%k*<QkmfIu$U>e;M-NLP638DjDnZa zY~+-tOx|p()ROsPDo60jqld4*Zdm!zW8#JvS|<dwH)QVTeOF-4w@hz;kXMOY5!0MJ zuQiOPgGHAr+1yR&{Ls=-@@K{dO{IWEYW#M!519X_#)~suV7wm1dQ<vKT;uoc`gO^- zwO(FMdVVh5V%n6uN53DDzjEYTw6t06rBxezAEz#Pl%?YLE9%5))=i5hZS6T`k*6VL zxlsJB-rnes#ZoGnVH=b$22ERj?O9dus&uv;5hVg8^|Bdh>L-IIwBM3E-G5{97P;b+ zyz_2^9!$#6oKR2{nr5tDd?|7dPpyH*=7XP(tI61Tgjbq2Jqy|uy6{5Z;Rj`G+3#+A zpEUo0u)NK3>295c&8qjF@N;o|nmFC!h%&oxZPRm)IVw&YmT-8_G-EmT>qz^lwC7iE zC9bwwTHRc*b=^9%+gYVgS!L@tWco0lGCieO_$eT9&;Jjv&c2>>OS)6!?+=epIU7y) ze-GMK@ZVGILWgwPv}en{{+*&eyTi-u#_lP;-Ak2byLBx*%X<6yuf6L`_>IySWRg3& zFCP70EcUERpG&&<>2|3Oo%*E09gj|XsOE<MJZCwl`~UnaQx4wGQ)-@=pQq3ff5T<* zJ~NY@$2?lSw=MdyvUT&y58(w`>Eg047^Bh!YokjYnzt~wK8Q}Q`1k7SQT}l8_19m2 zSLoZLpmobQu2Z~p+ic4zr+ic6*8HElH0SibtgEeWml`TZ-%ftE`O<T@;B8IWD?V-C z_H;^ez}ELuLPP&<NV$Kr&BWWKsIN@CXs2lIe7hBgcWjsTuv{(8v3}W~Ib{a(H-4+O zX7;In?H=*f$L`-O`}K#9srH;&s^tCk{1MmSZ&NpL+r-T8UAwWsQnlK#QRKMMsUj<$ z7VR09)7LME;XRf7G~|-8=6gW_IhkX*UX^p!Jb2=D?O}V(i{PR^r;BBNKc0Nt&n1Ri zz}{5VL1&SctitjsL9z`uB~5q|j0E^s>0DiOM)-oLOSqr>l!-T@eI0#juRlvOG`l-< zPHE5Dv*#>l)Lr|cqNs4MCso(?xR~wybt}JAZQR4z-1#g&B5(b|r<YImoUx7GDkbw+ zbX#Dulw-)Y{uA=Ic6jEQyS6jsrJeJS>3vl7e7(sr0TJH|rw%yW+^xWy*EGTU7?(@( z6aF(d%@#8b9SCH=@i;$asfN9Wb)5v3hhXD9S*-K)B0f=$Ubvr`(E*VRfFzi`j^ zvsT}>XGgn~?jZ@5U3{5Sl`N`54oj^Nj*Qx&wB(4l+U8G*A<mlD82a-QR37j$@F|J? zYgo<`s2fwgLR0TiiMLqMv70R44{Hcams}fq?(r&nk#Db0<-g5&`XT)j_w|~9>qh^4 z`?Z{d4_gRVb-j6e!Xoa#?Z!<(2WA?p&wdot`FnrP4qmaa-kPj^K{q4|Sk5x8irf6} zu+5ajvzs;_+O<|$)1{bo<w@DnywL59VOD`NGY&g)FZ$GW<)RI@MA?Gsy2m{6wL2{0 zt4|yh4Y<5#O~wKNM`e@qJIlR`TuUahlyC9heq{f(Lz!F5qgZ@d7q@WiH*RM=X29Q( zTA*9Fn*Z#iQl0zqCv;=yKS)`-YJ#Bb{S2oSWe#fIJnKJqW$ApW<nf+k5YD0X{Zh=v z85~a|uATT@vH8p#i$z^gukJQpn!~v;`hzLUsvQT7_2rLh=pKLc`&iqx*=Z8YZXNSK zS*>B*=Q8W;q>4)G<cBr$|5khwUOP=k`P#(IXLgs)`#pbkNO7z4!poZiC!Fn!6POpt z{ahqD<Nb#_%MM3pdaa)=p2*(2v%1t$$JSxJ%(R{x+6SB#8EZKQyy7h=Sh(|`MTkYN zN7uIgd5_s&Dt!stVmK#YhP|H)XZb7NH(hq3H@xq7*0LEKmF<i%n6_>E!S6TI?+d(2 zcQ_N~annyZUOfJL*x`<yZXB()CZEJqSoN2@p7pALL-*~+o;B`AV?LFH8nbJaKinT9 zv-6R6we6i_<uRu>zfG7h(QsP2a?C8fKie6N&Sl2@(|o$@w0-%$wKtB<Og&xOT6FKm z+hd0;^xvkXFI2eu?b@M)$gdm4B_phPE4Qm3FAYt3C#UoF|4!5OPehg_ERvmiBOzNN zzSVtwmb&Si&Mv8y5=q|YGGEPkCDB@*8g`fa_RH{0g{hnO`ej;5n9R2Pd&{5OzgX(s zVg4V#Z}2Z$z5hwf>9m7)=BaMl+MmZi&Es8mR^po2>NiodFU-B4r}>L5%Ej0_p|S4u zwk-QKEnlNfcyBe7klQLb+bwF+JFeKJACG+BnYv-c8xbb?=nRvNh1{vjwC-pseP5%< zzV^Wa(Km704neo)IVGI<{e4Fo^ZlnH^#b>|&MFYN&-Q7#^1kgCo~SFGpBWc_ynTz? znvH5!2At~8)OK;NFq!)MeXPefAxYgsiTs<Yx;IIwZxr^7?On-lsoU{Gq_aAkY4_Uh z>YWOCS0p3mGi$%-{e5|h|A%nr^9i|EN_yuxRXu%`+_S|z)p@~t$BO}h@7pISMs1n@ ztug8Kt_!Lx*V?LBiet9#;8bMSF=f%<b1>z1m?Cm7y;AL~(CuaZmpp}Zx>g1?TwYuh z{3U096PtNxl9jRBjk^zby7OONx^L5EiPITHuNdCUk9_s_{Ljxxyi+|2{(NTt#;8|* zJ@AFrdy(Qb@}ll09cm9Rov+P2Fe@c##oPJwH;Vj{&RTa+IV|SwKck%bix<M5EnqgD zbp6@Nm0~#>`zKq(oLgLSr1<CMe<?HgZmixhF;V0GDo+>dGA*ah1y&+kt$DLw&R$%g z9RAZz=<&;2$F7F%dw;I5T~{|;aOTx6(|o6MD%{FV!l&N76WHQ#npbpF(bV@_-KR7z znkreI8xVYH{%mdmD;1U9d`k2G7};!;G7~(T_f7cDc~--cw`-3~EPK9kiNc#B=ADm| zOM06YJ?P$YdIwuy-QO~or{Ao3Gc~q&)ao6!H|xrLpi%YZT9Za)j%!rv{UbTTmdm3j z|4<IrU(mRJ+c(dN$|{e`->td){+qAnYxP_EHa=W?Uqy{8a_#AaO`-evc9uybmL9qq zS~97@?4+<t!`JDti*M~w{L(k4`+-mR(whO>v{`R6&YM(lZTCt=#r#=!Z0wB0j@;UF z{?GF-jy<35E&K0K^~UPEdwJE8&UK~N`tN3Hno97_mDzM{O4Jk6r{cYP+!}r#&6QhS zxvI|Q`oR@PG%AZ12U#CGHSOZF=c}LT@ms#kEBn3Xr0n}|rAuTBUMd}$JC}dj;=BFM z2R4~~d_Mb`;Dv+l9cEqin|dZSYOl)H*D8@w6BlnY;fwESl`G^C{9(t=wO&KmJ8X`k z*P5fV>#wohRZo$-FId0C{pM=ZN3F)6FWpR6D^FKR*F1XZ<eaIxT~A9nH|*2u+?_1A zwRO#b{&2NYdE;o8J9BexIVC+-T4MKey-8e5@Uj_4Ju6dIZQCeenfXCqsc2=*=SQrc zp7+<M7-;n@`q?-4@nIW*Et#HWr`*++aWh*wChuMuxFctKqDZo>V|>@sKW#trHF7u1 zJ$RYVo>MI9eA%Y^)t#~tnSPeJ{}??E*EanBe!VDJYT{9;J13g%gh+U3uZg%e*OQt1 znV#<rt7~q*r>0pmaUU~{7L8F1a?RZyxFO-~`4fD7$6ud+_Rq<Ct>r9l!($3>jkYN~ zIaciQCuMWA^uCAH=QNAGZgzxkGjdaw&B^F_X7DR^!qQ(#d#;43^ORqmD1PkkmB>kz zQ!X51%e?9FY*7@$%C(6V`^}HX^*4#mvHQSyFZwHI$EMfC`Vy1h_3bUnkv5z)Z+*nt zvsts2224_VP-vjGc*3RN-LoyjT)y`Ed2=8C%eCT;@qMoE2kd`8nP0m2ZzK!%8iwq+ z`CGXwChz}O%yx3>eZ}w39mD2+{Li$HH}C45nLI0US3Q}SGIf#zr^;cLr|CMUe`ZU1 z28i%qbK52^`RSbSu`P?|IUigg+NxEPv4GF}@jUmaj$hZR+OvbQ+7nkk{vYa|9Q$XI zBh#G^MN`vK)-lg)e(*?Ya)<FF5zpN|88<tQoW6TB)%Kf>Q}z}fOZS-I3+o!SJC~kJ zb>6k7k@fK=&c+ow-(0TAJPk1H-Be>ZZP(QqsXvw_SlZiVu3`E*!&NF&S@j-w^@B}; zHy-8c{k{KW6L0K_R0iQ-?Ona`uYCS%J;)Z?`(^Fca<Q_gzDb|2D;(k!P1=7oAz$Xo zk*F>5_d->Dn@*c;D|J16?#k0$7k%z*Ts5<ETVHc%?%r+Q#&45D7r%;DeDx~uQ2xsW z?xipL?%ay_Tp_#PYU&-SbMNl#-8JQol$UeS=kgs(tc%+3saM8cTC(;;HgDPec@-xd z46ZuvUEIeSbLQyW4{<Z>Dve~7m$_-#KXACsE|>qNKf|1BV_n?CY38wQk~SPlYT`34 z&%5gOdC{Tk>p3{?O|AGHDwmn?ecqzp_R>7>Do)jmb0$(6YS9-Ze8gAS+CDrOWa;l% z)q2E2-hQP{Y2)_$8zmWYWy6&M*8K`dU&nJv;+fK?_QQ+~5(f7Ym*^ULGu>fK*7iD? z#{NT@?`o>Na=M$%e3g~I4J?+gPMyemZVuyGc{brWTZ0XPdG>8NTc|nNM(MJ&|Ky6g zxf49+{CIg`L(7{BqCuNl{q8D=u94m8ASGe$e{PeXr_lta=0?_2B~90s^*)<7!%I5k zT99*m)M`^7_UI2cLvC%i-rgIP$U5~_k6>`X%5zhs!Z#=IHQUBNh!OZ<DHeaFJ5G9~ z)65e&!T#d63Tw6muBk6QkyCER`g5VuerfR&a?4y!PK#LN^D(1EeU)#ieD=oeUH*#q z9&KD<w?%Z)mDkBrLp2<J&fRoBg=>G?@$>)w{ki$)r}6(+H|5XItF8a`=2LyYKi{uu z4uSSxmK3*oyWY;c;Hf=zb?uRpa@tl|%)bi*LWN_@FO~gR!8SSP?9J2CJpE7V<_Nz1 zF>kf{nq(%4Zvrg#p_~ysHr(G`KC9U~1bjMwz(3-Z&H9zv`I^(8Zd=J~;oNh${`WuC zquY6ERd_R$p2?~HJLwo(U=}QXBjvqM_>CKyF28DGbj1}vCpy;8nC2(G+omGX`DXiu z%?a-u?oCa&yXl1XiAGc33=KB(DTUM6zPt!2@V(9vtKHRNoS)zj=yo*v=2Ff8**zQ) zcK`Owv+&yYr`LFCt^dV;$>QN&QT0D3dy8GO36eYHdhowX*t2&*Q|?+G-W}<;oMqko zik+uCem&d!s84mb(YZ&jJ*&)PDsH~9@>`cFJN>HgE}Qh28I`yGp5qRFIw2x?WsZf_ z*9C`9F0SVNvBbLfp~8Fdw^tI5v@`5s3*2-$*YWON_w4UxZly_jYwhwLe=)y4#Xw5e z*KF5cIVrK?CFTKkYqPgI@w&!LNYdPU_}2qDE@``89LuVM?_ROoziU@T`PXNEcgxu8 zX|zq}QwZjqfBCGcXTr~=DqhV!PJcx|?+m+T8oz9&aWiw$m2VBMA6R}~n#i*EDdUvK zOQWKepYeWjZIN|vWMcLl%V*xt7ksoU>Mbvx`hALTfd0D+IZycy&zRX0)7Jl*X_A-! z0Y#Y?mfgbT22u@&OXdic7uZ}-y<T<XSiFQwNwe=H%k93qo9kVgrwJxmhhC6e{>s@= zKk1#5<M!mgyF|V`lK8Sxpkku<x}as;DXUw{raL~|X439*dgq>BJ+Yl^{p&Vch_L71 z`Y7pO<IdxFE69^!;(6(pEDqY7!ZC$i8^b#6Wgkvje*a|v<Lp*1pPJ1#kIuV#UsmLa z?(6MxLdSOLU8=Ku$+J{>YR`7>UH%PIdJS_kisTbERehVXZS5nm4K*5pKaMN1%K2W{ zqq_RFNBhBC5%mPg*^ju_-MwyM{h9M||DRt`W=?bE7Ekpkol~-dBfN->@#UQ0gHO#` z*B@VbdEft2{?oREnjd+~#qyJ<A|N<$$K0MCt)OcctwL^z-aGt<S0XU-K4U7+r?1nB z=l;3i9W3@^k>ynF-ML=8k6TuB-@Y5V?_y%l#0SPdyE1eq%<giNeib8@7{<FVy=lsN zPMO?olkLr1ek(M*$lK-hZGp#6;mEfUvvejU@Uio6G4(xiv`Wp}@~8iS<{t-JnvT!B z;HH=<|6{%7{JS6SoAQWge4hBhFSYT@QM1G?zaGxwDdxPq=ZVkfPo9Rp+n%zwl+-kN zMs7NMNxD@p)z{kosrS64ChkX#XH+P<Efn0*R?HuJ-z&mUdqV#e<@Bx5Tt}kwFWmYb zuqW$h;3|RZ8y7u2vgvV3$=aKHH?~zL{Cu|Q)tt}b(h5&)j&-Z-=BQu2#bE08oa(k^ zx>dPT&98IJnY`YNZ=tsP&E-B%JDJTto|Y<<UDDPs=Dkd<X3ICfuBe2t%8ZR0v)?aB zU68z(<3&RKl7z*dQjCO!)H>fkeHg=du&?jHhTrYQ8|KbwHdK0b@$>35IhT?@Nw3Yz z|0j9hZ~g!6!-CG|PhLM<aI$IVZkM)NIg`j)7v4HfUdmY875>%el-r}N+dQ6b54IDU zxGUZ0ox<KZXO~?6wthv9*8XeD+6-MJqV*5gPK$oExB2cVUG8Un`CI-(J)M@y^UH7Z zByQcVEXmYT*YLX@$-8o+gp+$RzF)kPC3f2@L7!hQEQs6KBR+q|d&TTi>yBi3e)u5Q z_O{9U$ujlsZxu18>OVb*mix~w_x<p}`}6iQoeREPxydyw{7JU$iSJ5}^giv5n)uF+ z+e<J%y)!_ov^Qz@u29piAHO*{uLbQ~8)(R786mC7|9kSrwNYPAtJ&AGKA2#-_V}7i z-qv@Er)|2cE~)+Ct<SNtc^PXO%I2%&{C<-hEx2K>ig>hoysH0)fU1yK?&?0(2fxmD zMc>=t)9$p@CGJyMga56Et4w~ZRu;Ok;O%SC$?GeFB_(ei?oZrTet2{K&TAbl$JthG zPH_#}llx9#Gt=w#?;lF+zuw?qYIrI`lv(M6LaY4MB>zWlhUX+7&8p!v$Y1y7^fzZm z&Py6ccBO7u|8~QU<IDe_zStvdmSB4RklEM2Z_d3h*5A(Bv&v82;-J|sgUxwe3fqKk zR>?B`-Sy%Ax%I2=tYgTm3=D4kTUMPOEU&bNt8}sQp0z(0P1~BW_tF09<CnkY&dzAk z={O}7nyntxl*@19XC1;j<GK|0^9P5y6bs~pZP-H}F3^$*X??qjtM}ctf2T}ZQ{OS) zZ(kPBw$J+i728W9r=qs-&pPyL+ee}3iz25sylwoPBkjBJnQd?N8bKMB?~VoHoaM)x zet*2T`Nnh$UFZ9AZ@-c2yu3;5ZL>w}eY3bE?MGX9Zu1?<yu0Se9hLLzm+K2J`t$9z z{o&);MoaJTFI(|+sdMzM;ulP|nIEH`p0?jFYA5&W<l`O{oz9mjGgS_R2R=As6Qx<~ z^k}K1Y_*o!&o{SPe@VD(IHh|~lYP=lpFJFl<bLk8FX`H7S38+e{<wDd6I1OH=80$h zj-8Wd_J|bm*<mi!%#h1JqvhGwey--N3#|^O8<e|zduo#Rx@*aKeY^bUla`#nAE6+5 z@5)Ypt+^+EM;gq0x=7qS*Rf5`zQks&#lPr)7M3r+OY0&;t^}JcDd_)uD@)Rd*+W%% z%ZxeO8jg70yXdoL!?%gA{I;Y%FQ4MgRL9o-QJJrA{zB*MMbBRr9c=1R40|K@?o?&c zsW~x6V`PJ6&Du`QDxdm(r^F-X=bIMpK9_Xx*5}M=0nL`NFFqZO*rnC;@#u`Er*rJt z>vzO?eGXo~xMK6i`wu*P<D5#*=q<FeEABh%y`pdbjPmfcSA~}B?KRyHtMt=g-`-Z2 zc^e8=tUAp1v&OO2<5T0a4@a#(fBcbu{{D~S^Fw&&@cK1-Z*)`A-FbQk_y4Wh#~sVE z4(+=3RdC*cTX#>+?b_IR`hofX%){v%-C8YSf|p)=EBhQJX?Uz{$;zxFQWGy<%w6fW z_*%}4f~^a82>n@pcjp3!>yOv5ED_FjE3L56-@MoQuKk4PD)+-9zKc9<vyZC@K0W`E zrmN_!d!fsAU%hPJ5VEN5Gh>5d^{rp#i|4ncT|B<>$+hq~e)3PM44B1kY0hi-b-m#? zf56S!hX4EjNM9+GfAC*zTA=d&m)8qoHMYx@NLnQ>dV7NTy35YTubo0mc2E1Fw(p;l zpor#vwHyA^zg~S<7cKbshjQN`QSQ4QmhsFB!;0z;iMjj<&ug;kIFP3F;dRH&-Jw2> zBL4hM?T_DveA2M67POVQub0w)ZGqRDUX_UxjLH^Xa+$QCc9G4YUek&3^EQY_9~80- zG&ZU^|8v*dkcMWFhqEg0U2M_OnD`)&uU1}v^U+TVT2fUNB~q8$vvZsO-0|IMaj*8m zLdLBP>jRH`eIF&EZ`xz|KThRi>;q%-W>)Jvle<|ttIUO#E-~GG^JK<}U$>8K5dL$@ z<JI;lQFcmi>sN`Hi1_&iZf@O?nIY<uSA3*e-HNZe@!Io_xkjZOn=QZZb#;?o5b*0{ zM8S{ON4w0lZ&@yW-f~BF`E`MJ0fE;imL3Y<c{#v7XR3RP>7}Rce6b9gb9KrLpIcr1 zC-kmp!m5{dyz7L-7k2V&J9nX3`-;=8Ni4D~e&2prc$EC@Ei_;LW&gspyv_v{&E7gL zY<y)mrJvWFxoER!@7yZkMRB)hGXHc>Y<qd-@Poh!w{CRCob^7XI3rb#V~Nn?Wzw^c zXaBx6@&44xi3h^f^rGLj&uU%uu!ra8r{bT_&pp0scGqodPrzfNg|~N@^ljOlVZ!<_ zZ*F`^&9&4sU2jb0^en!=HE3b-YvYcd-Fq+JEu6x7xk2ymC6j9sC4b$-_8h8srE|jR z&~|_Mnb&6rvBcG_`g9;#r?9~D(8Pq|M@x7fXn*^4xg#`X`N`|rk5pgW4Qf59{!)eW z!sA6ezh3V-p<Xz(lJ$sYEZ>qXEAKyy<~+V|t!fFI%g60+(q(Nx6B!o|Kh^!O*7(Y6 ze$AR?%v1S|O?fMMx4h!`ea~y}saW}cl`^TuZ%bLPv@~$N)Mi=E|A76Qo&0hCEESi3 zJFHF%PCc<{$z%0<CfUoXyHpknzdJV5dG!fbhWoQZo@lpQemwl0ZR*rg=C4oBvnhO9 zTBfQMpf`1%Np9;lj@0BE!R+(Q7*^;9&6)DYv-I{9mQQQ}JN?!NupgJtO?<jqqTyrw z+QyTuy$6mw%41%YlOMwRhWTfuq>8{=<HfVh&gd8Xe0=(Jw|41vVV4y_p$oR9e#-6m zrk}6(?-oyH+TO|qinmsOo}RBi>!GfJ>*NP74~Ge7B(6})sJX+nW9mzz{H_ZPL9?fM zZ(CmZaQPnhr<bNI6@1pc_OZsh((ljS{g&P95!=ulJlj`mN?z&bL$BuY_T<DI4>@|O zsda|m>$EPV*PHqS^#Wsmu60xCR9?DDd!I;X==B<dOHbyl{<ora@@bRl_0M)K)85y! zq@?huc%2BZvr?<OZqA(hyZ;!6>%@LcP1)pm{YNaff1~oQR&{0R^kUufQZXw6t^4Kw z=ZNct+}|~Ea$&m~pB%%){)Fp^c3RKgIo0~C+57ByuypWoxxlL5pT0dVc;kDRd!hMW zwp&dLkAIM^`x3OF?+O1G>G|0aK3cby-wb--u`IzeGF|_owr95I+1R=~_l=R>B{!sR zdX)sQdv|_ae<z6P@b;N=TjEXLx%zmr%K944NO-4K_xQfg&Lf9U8|51%zc$$r5z-U7 zFrWQYo`C&~1U|JH&798?nk+#~3Eq1LSw4IC7%b<X_27S!@yRD#oErLv50r1Un)NN_ zvdiXsZ3&wnZZW>F=6Gn{!OYBgk^PsF_ODEyv(hq8^xEvGWi!8KlqKw5`Eu>0GbNXA z87>vS%zL}FJb#DggSQ8Al8@f(zqstelv=}^AtpWVKbo1|6fyYn^86voTG`3IYv+FA z=b85~Xo1D<TX&+a=eO{$y6sqc+xhC-Df;u*R(9BV3Z7<P$*-C1e7A9duJi5wHCwl) z#UIHny}eDPFxTUk$S#2&>feks@;+PGC+^kn|H57QU@n6~#!e$I{ri@ZNtfDOlk4_8 zTg)jh%)CRdVNKq)*>`Gg#ZS<<t8gr_Mp|UWQ`_o|RWn&qqMFl+9Hw5GB%bZ3zvtbn zivm4%ZMT(X*Kqt+kvVlyvFWzT?C>{*v8x0F=FDI8BW_j8ry1VQ7}qIjGA_1s{5Y$> zZQhoHcf~9_AHJSELqs~*^Mdp2%a1RKMfp!%YsX|6CByXftEycf*VAqXrLc1?*VnVA z3at1f*CKH5<o0gPnV)-o&-Ba4=<kd@m)W{3bN{UQvsT_T{JAsmRZZB08n&P&4!=oP zt@v+qEcm-7+jzpK3sHu=4{X~+n~%OcxZ<eXdP~Ww?Aaem&DtjQ+MHf|aI?*$TPlom z9$2RJx$nyO+P?6AcEvr<WwU!9>2^!M-g5C=lr77~w65?IOX{YT&40(uE;awsV(q6{ zTI`W7u{zB4O_TrcSt6}<^2kKT0}l@J$_hm)b;P&oc-}vellSdq`kP5C%gQ^}KhfKz z9FTiuru7>h_EeRp&ux};@AHU}E>$~xjw8Y?-+|@o{@8|Tat4X%0y>-4{c4E#*(lJ< zwIMBPN~PxkKjUk83u-hs)hy;w%ANE+a~&7wVzV8W6rx*;UIjMaD|1`!_1J%5>Mny> z`YUHFz7jjZrOfe)QtTQ-oxj=ZXUi5e7_H#8N>H$!pF8D+Y*xVYS;bAd-2ZhgT})Dg zejl8=Eh*)G5A)5lXU|T5Q@1AKt6ux0)ZNdj*iNr<y?r$CrQ9?<=IQ<0qpKM|muV!o zXU%&p#nxq5(H-?A=$PJ<tx+r3lvl347t2+0_M-O=J<az^#f9Sn0;>8Kz2#qT_~RMt z-^;t*4@Jqk?7#BWHf2}gTRpFIovn<O7h)d!<=ygrmc3`+>{q-drN1=Ii?cW%uDiBs z@lxBhQ^i82Gum9;f8$_8(2h3&6SnSlTj)}r*Co1p&p}^K)&^Uy;60oAy90i#)86}G zNleix?tc-X-Akqj1pYbuv1lsSPmALXx3(=3JXo$Q8d;wEcoDaYhI^`_eA{ttwpO<8 zzwaU{U8U~$<fkfB#ic&Wl;%ro-fUL7GIajsO-g6`uWY!Ny!_šlGb7gmLWPCSy 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˴@-L3iT?xh&#&)r;io13r6-SA}<y(qs< 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 literal 0 HcmV?d00001 diff --git a/dbrepo-search-service/init/lib/dbrepo-1.8.0.tar.gz b/dbrepo-search-service/init/lib/dbrepo-1.8.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..4b3de54c835f7085ce9546cc519400bdbc9480b0 GIT binary patch literal 97612 zcmb2|=HU3|^e&z0e@aqOYC*oPp`L}FfnG^s5yP9kud8mmZPJ)^zluxe>`AqqVy<^n z-K#CCFAB*PFX~nfJegwiFQbD&wa2l6(cxsz^!cx9p0j?NJa^SA?R6}gU6YbOdFu$h zc(-cZx^*C&mt$u3|M%LTFMD&N%0Ap(T(j+l`uq3SuDzT0tMB~w?Pc4__Zi#OZf`kn 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 literal 0 HcmV?d00001 diff --git a/dbrepo-search-service/init/tests/test_app.py b/dbrepo-search-service/init/tests/test_app.py deleted file mode 100644 index 118ccf99c1..0000000000 --- a/dbrepo-search-service/init/tests/test_app.py +++ /dev/null @@ -1,21 +0,0 @@ -import unittest - -from app import App -from clients.opensearch_client import OpenSearchClient - - -class AppTest(unittest.TestCase): - - def test_index_update_succeeds(self): - # test - app = App() - app.index_update() - - def test_index_update_not_exists_succeeds(self): - # mock - client = OpenSearchClient() - client._instance().indices.delete(index="database") - - # test - app = App() - app.index_update() diff --git a/dbrepo-search-service/init/tests/test_unit_app.py b/dbrepo-search-service/init/tests/test_unit_app.py new file mode 100644 index 0000000000..1f8ee06980 --- /dev/null +++ b/dbrepo-search-service/init/tests/test_unit_app.py @@ -0,0 +1,50 @@ +import unittest + +import requests_mock +from dbrepo.api.dto import UserBrief, DatabaseBrief, Database, ContainerBrief, ImageBrief + +from app import fetch_databases + +exp = DatabaseBrief( + id="6bd39359-b154-456d-b9c2-caa516a45732", + name='test', + owner_id='8638c043-5145-4be8-a3e4-4b79991b0a16', + contact=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), + internal_name='test_abcd', + is_public=True, + is_schema_public=True +) + + +class AppIntegrationTest(unittest.TestCase): + + def test_fetch_databases_succeeds(self): + db = Database( + id="6bd39359-b154-456d-b9c2-caa516a45732", + name='test', + owner=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), + contact=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), + exchange_name='dbrepo', + internal_name='test_abcd', + is_public=True, + is_schema_public=True, + is_dashboard_enabled=True, + container=ContainerBrief( + id="44d811a8-4019-46ba-bd57-ea10a2eb0c74", + name='MariaDB Galera 11.1.3', + internal_name='mariadb', + image=ImageBrief( + id="b104648b-54d2-4d72-9834-8e0e6d428b39", + name='mariadb', + version='11.2.2', + default=True) + ) + ) + with requests_mock.Mocker() as mock: + # mock + mock.get('/api/database', json=[exp.model_dump()]) + mock.get(f'/api/database/{exp.id}', json=db.model_dump()) + # test + response = fetch_databases() + self.assertEqual(1, len(response)) + self.assertEqual(db, response[0]) diff --git a/dbrepo-search-service/lib/dbrepo-1.7.2.tar.gz b/dbrepo-search-service/lib/dbrepo-1.7.2.tar.gz deleted file mode 100644 index 12cef6f73928370726f75f4f3909aa6510049543..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49700 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 diff --git a/dbrepo-search-service/lib/dbrepo-1.7.3-py3-none-any.whl b/dbrepo-search-service/lib/dbrepo-1.7.3-py3-none-any.whl deleted file mode 100644 index c1a74fe8c7e3f602651db9b6c30a5f7dcf17d97b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32568 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 diff --git a/dbrepo-search-service/lib/dbrepo-1.7.3.tar.gz b/dbrepo-search-service/lib/dbrepo-1.7.3.tar.gz deleted file mode 100644 index 7c13793a4936d21d621548c512ca88cfbf914716..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49697 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 diff --git a/dbrepo-search-service/lib/dbrepo-1.8.0-py3-none-any.whl b/dbrepo-search-service/lib/dbrepo-1.8.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..a285fef8ff07eaeffb5a1dfbab34dd395c0330d9 GIT binary patch literal 88139 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šlGb7gmLWPCSy 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˴@-L3iT?xh&#&)r;io13r6-SA}<y(qs< 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 literal 0 HcmV?d00001 diff --git a/dbrepo-search-service/lib/dbrepo-1.8.0.tar.gz b/dbrepo-search-service/lib/dbrepo-1.8.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..4b3de54c835f7085ce9546cc519400bdbc9480b0 GIT binary patch literal 97612 zcmb2|=HU3|^e&z0e@aqOYC*oPp`L}FfnG^s5yP9kud8mmZPJ)^zluxe>`AqqVy<^n z-K#CCFAB*PFX~nfJegwiFQbD&wa2l6(cxsz^!cx9p0j?NJa^SA?R6}gU6YbOdFu$h zc(-cZx^*C&mt$u3|M%LTFMD&N%0Ap(T(j+l`uq3SuDzT0tMB~w?Pc4__Zi#OZf`kn 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 literal 0 HcmV?d00001 diff --git a/dbrepo-search-service/os-yml/update_database.yml b/dbrepo-search-service/os-yml/save_database.yml similarity index 75% rename from dbrepo-search-service/os-yml/update_database.yml rename to dbrepo-search-service/os-yml/save_database.yml index e9cd0d56f9..988cf421c6 100644 --- a/dbrepo-search-service/os-yml/update_database.yml +++ b/dbrepo-search-service/os-yml/save_database.yml @@ -1,8 +1,8 @@ tags: - database-endpoint -summary: Updates a database -operationId: update_database -description: Updates a database +summary: Saves a database +operationId: save_database +description: Save a database consumes: - application/json produces: @@ -18,18 +18,7 @@ security: - basicAuth: [ ] responses: 202: - description: Updated database successfully - content: - application/json: - schema: - required: - - id - type: object - properties: - id: - type: integer - example: 1 - implementation: int64 + description: Saved database successfully 400: description: "Invalid schema" content: diff --git a/dbrepo-search-service/tests/.testpickle b/dbrepo-search-service/tests/.testpickle deleted file mode 100644 index b9f0895c08ef7cdeb31e17c5174fcef1da26a5fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 700 zcmZo*nX1kJ0ku;!dRPkbi%O>Suo@egn^{chVadoZE}7E9nUkNKm;+{)>fzC0NvaNW h1Cn(ZlB~msR2^jaoDN|{hO0=94>IhagU@lL5&-|a;9LLz diff --git a/dbrepo-search-service/tests/__init__.py b/dbrepo-search-service/tests/__init__.py index c68ce82814..e69de29bb2 100644 --- a/dbrepo-search-service/tests/__init__.py +++ b/dbrepo-search-service/tests/__init__.py @@ -1,3 +0,0 @@ -""" -This (empty) __init__.py file is necessary for importing this module in other python files -""" \ No newline at end of file diff --git a/dbrepo-search-service/tests/test_app.py b/dbrepo-search-service/tests/test_app.py index d2c8f2bd60..2cc9b3ba00 100644 --- a/dbrepo-search-service/tests/test_app.py +++ b/dbrepo-search-service/tests/test_app.py @@ -16,6 +16,7 @@ req = Database(id="209acf92-5c9b-4633-ad99-113c86f6e948", exchange_name="dbrepo", is_public=True, is_schema_public=True, + is_dashboard_enabled=True, container=ContainerBrief(id="7efe8b27-6cdc-4387-80e3-92ee28f4a7c5", name="MariaDB", internal_name="mariadb", @@ -58,17 +59,19 @@ class JwtTest(unittest.TestCase): def token(self, roles: [str], iat: int = int(time.time())): claims = { 'iat': iat, + 'uid': 'c6b71ef5-2d2f-48b2-9d79-b8f23a3a0502', + 'preferred_username': 'foo', 'realm_access': { 'roles': roles } } - with open('tests/rsa/rs256.key', 'rb') as fh: + with open('./tests/rsa/rs256.key', 'rb') as fh: return jwt.JWT().encode(claims, jwt.jwk_from_pem(fh.read()), alg='RS256') def test_update_database_media_type_fails(self): with app.test_client() as test_client: # test - response = test_client.put('/api/search/database/1', + response = test_client.put(f'/api/search/database/{req.id}', headers={'Authorization': f'Bearer {self.token(["update-search-index"])}'}) self.assertEqual(415, response.status_code) @@ -81,13 +84,13 @@ class JwtTest(unittest.TestCase): def test_update_database_no_auth_fails(self): with app.test_client() as test_client: # test - response = test_client.put('/api/search/database/1') + response = test_client.put(f'/api/search/database/{req.id}') self.assertEqual(401, response.status_code) def test_update_database_no_body_fails(self): with app.test_client() as test_client: # test - response = test_client.put('/api/search/database/1', + response = test_client.put(f'/api/search/database/{req.id}', headers={'Authorization': f'Bearer {self.token(["update-search-index"])}', 'Content-Type': 'application/json'}) self.assertEqual(400, response.status_code) @@ -95,7 +98,7 @@ class JwtTest(unittest.TestCase): def test_update_database_empty_body_fails(self): with app.test_client() as test_client: # test - response = test_client.put('/api/search/database/1', + response = test_client.put(f'/api/search/database/{req.id}', headers={'Authorization': f'Bearer {self.token(["update-search-index"])}', 'Content-Type': 'application/json'}, data={}) @@ -104,7 +107,7 @@ class JwtTest(unittest.TestCase): def test_update_database_malformed_body_fails(self): with app.test_client() as test_client: # test - response = test_client.put('/api/search/database/1', + response = test_client.put(f'/api/search/database/{req.id}', headers={'Authorization': f'Bearer {self.token(["update-search-index"])}', 'Content-Type': 'application/json'}, data=dict({"id": 1})) @@ -113,7 +116,7 @@ class JwtTest(unittest.TestCase): def test_update_database_succeeds(self): with app.test_client() as test_client: # test - response = test_client.put('/api/search/database/1', + response = test_client.put(f'/api/search/database/{req.id}', headers={'Authorization': f'Bearer {self.token(["update-search-index"])}', 'Content-Type': 'application/json'}, data=req.model_dump_json()) @@ -140,27 +143,27 @@ class JwtTest(unittest.TestCase): def test_delete_database_no_role_fails(self): with app.test_client() as test_client: # test - response = test_client.delete('/api/search/database/1', + response = test_client.delete(f'/api/search/database/{req.id}', headers={'Authorization': f'Bearer {self.token([])}'}) self.assertEqual(403, response.status_code) def test_delete_database_succeeds(self): with app.test_client() as test_client: # mock - test_client.put('/api/search/database/1', + test_client.put(f'/api/search/database/{req.id}', headers={'Authorization': f'Bearer {self.token(["update-search-index"])}', 'Content-Type': 'application/json'}, data=req.model_dump_json()) # test - response = test_client.delete('/api/search/database/1', - headers={'Authorization': f'Bearer {self.token(["admin"])}'}) + response = test_client.delete(f'/api/search/database/{req.id}', + headers={'Authorization': f'Bearer {self.token(["system"])}'}) self.assertEqual(202, response.status_code) def test_delete_database_not_found_fails(self): with app.test_client() as test_client: # test - response = test_client.delete('/api/search/database/1', - headers={'Authorization': f'Bearer {self.token(["admin"])}'}) + response = test_client.delete(f'/api/search/database/{req.id}', + headers={'Authorization': f'Bearer {self.token(["system"])}'}) self.assertEqual(404, response.status_code) def test_get_fuzzy_search_succeeds(self): @@ -202,83 +205,83 @@ class JwtTest(unittest.TestCase): def test_post_general_search_succeeds(self): with app.test_client() as test_client: # mock - test_client.put('/api/search/database/1', + test_client.put(f'/api/search/database/{req.id}', headers={'Authorization': f'Bearer {self.token(["update-search-index"])}', 'Content-Type': 'application/json'}, data=req.model_dump_json()) # test response = test_client.post('/api/search/database', headers={'Content-Type': 'application/json'}, - data=json.dumps({'id': 1})) + data=json.dumps({'id': '7b4942c3-6312-4f1d-bff9-cd24ea53ea05'})) self.assertEqual(200, response.status_code) def test_post_general_search_table_succeeds(self): with app.test_client() as test_client: # mock - test_client.put('/api/search/database/1', + test_client.put(f'/api/search/database/{req.id}', headers={'Authorization': f'Bearer {self.token(["update-search-index"])}', 'Content-Type': 'application/json'}, data=req.model_dump_json()) # test response = test_client.post('/api/search/table', headers={'Content-Type': 'application/json'}, - data=json.dumps({'id': 1})) + data=json.dumps({'id': '7b4942c3-6312-4f1d-bff9-cd24ea53ea05'})) self.assertEqual(200, response.status_code) def test_post_general_search_column_succeeds(self): with app.test_client() as test_client: # mock - test_client.put('/api/search/database/1', + test_client.put(f'/api/search/database/{req.id}', headers={'Authorization': f'Bearer {self.token(["update-search-index"])}', 'Content-Type': 'application/json'}, data=req.model_dump_json()) # test response = test_client.post('/api/search/column', headers={'Content-Type': 'application/json'}, - data=json.dumps({'id': 1})) + data=json.dumps({'id': '7b4942c3-6312-4f1d-bff9-cd24ea53ea05'})) self.assertEqual(200, response.status_code) def test_post_general_search_identifier_succeeds(self): with app.test_client() as test_client: # mock - test_client.put('/api/search/database/1', + test_client.put(f'/api/search/database/{req.id}', headers={'Authorization': f'Bearer {self.token(["update-search-index"])}', 'Content-Type': 'application/json'}, data=req.model_dump_json()) # test response = test_client.post('/api/search/identifier', headers={'Content-Type': 'application/json'}, - data=json.dumps({'id': 1})) + data=json.dumps({'id': '7b4942c3-6312-4f1d-bff9-cd24ea53ea05'})) self.assertEqual(200, response.status_code) def test_post_general_search_concept_succeeds(self): with app.test_client() as test_client: # mock - test_client.put('/api/search/database/1', + test_client.put(f'/api/search/database/{req.id}', headers={'Authorization': f'Bearer {self.token(["update-search-index"])}', 'Content-Type': 'application/json'}, data=req.model_dump_json()) # test response = test_client.post('/api/search/concept', headers={'Content-Type': 'application/json'}, - data=json.dumps({'id': 1})) + data=json.dumps({'id': '7b4942c3-6312-4f1d-bff9-cd24ea53ea05'})) self.assertEqual(200, response.status_code) def test_post_general_search_unit_succeeds(self): with app.test_client() as test_client: # mock - test_client.put('/api/search/database/1', + test_client.put(f'/api/search/database/{req.id}', headers={'Authorization': f'Bearer {self.token(["update-search-index"])}', 'Content-Type': 'application/json'}, data=req.model_dump_json()) # test response = test_client.post('/api/search/unit', headers={'Content-Type': 'application/json'}, - data=json.dumps({'id': 1})) + data=json.dumps({'id': '7b4942c3-6312-4f1d-bff9-cd24ea53ea05'})) self.assertEqual(200, response.status_code) def test_post_general_search_view_succeeds(self): with app.test_client() as test_client: # mock - test_client.put('/api/search/database/1', + test_client.put(f'/api/search/database/{req.id}', headers={'Authorization': f'Bearer {self.token(["update-search-index"])}', 'Content-Type': 'application/json'}, data=req.model_dump_json()) # test response = test_client.post('/api/search/view', headers={'Content-Type': 'application/json'}, - data=json.dumps({'id': 1})) + data=json.dumps({'id': '7b4942c3-6312-4f1d-bff9-cd24ea53ea05'})) self.assertEqual(200, response.status_code) diff --git a/dbrepo-search-service/tests/test_jwt.py b/dbrepo-search-service/tests/test_jwt.py deleted file mode 100644 index 6c2b169893..0000000000 --- a/dbrepo-search-service/tests/test_jwt.py +++ /dev/null @@ -1,98 +0,0 @@ -import time -import unittest - -import jwt -import requests_mock - -from app import verify_token, app, verify_password, get_user_roles -from clients.keycloak_client import User - - -class JwtTest(unittest.TestCase): - - def response(self, roles: [str]) -> dict: - return dict({ - 'client_id': 'username', - 'realm_access': { - 'roles': roles - } - }) - - def token(self, roles: [str], iat: int = int(time.time())) -> str: - claims = { - 'iat': iat, - 'realm_access': { - 'roles': roles - } - } - with open('tests/rsa/rs256.key', 'rb') as fh: - return jwt.JWT().encode(claims, jwt.jwk_from_pem(fh.read()), alg='RS256') - - def test_verify_token_no_token_fails(self): - with app.app_context(): - # test - user = verify_token(None) - self.assertFalse(user) - - def test_verify_token_empty_token_fails(self): - with app.app_context(): - # test - user = verify_token('') - self.assertFalse(user) - - def test_verify_token_malformed_token_fails(self): - with app.app_context(): - # test - user = verify_token('eyEYEY12345') - self.assertFalse(user) - - def test_verify_token_succeeds(self): - with app.app_context(): - with requests_mock.Mocker() as mock: - # mock - mock.post('http://auth-service:8080/api/auth/realms/dbrepo/protocol/openid-connect/token', - json=self.response([])) - # test - user = verify_token(self.token([])) - self.assertEqual([], user.roles) - - def test_verify_password_no_username_fails(self): - with app.app_context(): - # test - user = verify_password(None, 'pass') - self.assertFalse(user) - - def test_verify_password_empty_username_fails(self): - with app.app_context(): - # test - user = verify_password('', 'pass') - self.assertFalse(user) - - def test_verify_password_no_password_fails(self): - with app.app_context(): - # test - user = verify_password('username', None) - self.assertFalse(user) - - def test_verify_password_empty_password_fails(self): - with app.app_context(): - # test - user = verify_password('username', '') - self.assertFalse(user) - - def test_verify_password_succeeds(self): - with app.app_context(): - with requests_mock.Mocker() as mock: - # mock - mock.post('http://auth-service:8080/realms/dbrepo/protocol/openid-connect/token', - json=self.response([])) - # test - user = verify_password('username', 'password') - self.assertIsNotNone(user) - - def test_get_user_roles_succeeds(self): - with app.app_context(): - # test - roles: [str] = get_user_roles( - User(id='b98415d8-28bc-4472-84ff-3d09cc79aff6', username='username', roles=[])) - self.assertEqual([], roles) diff --git a/dbrepo-ui/components/database/DatabaseToolbar.vue b/dbrepo-ui/components/database/DatabaseToolbar.vue index 3e661cd754..0e69b9a91b 100644 --- a/dbrepo-ui/components/database/DatabaseToolbar.vue +++ b/dbrepo-ui/components/database/DatabaseToolbar.vue @@ -63,14 +63,15 @@ :text="$t('toolbars.database.info.tab')" :to="`/database/${$route.params.database_id}/info`" /> <v-tab - :text="$t('toolbars.database.tables.tab')" - :to="`/database/${$route.params.database_id}/table`" /> + :text="$t('toolbars.database.views.tab')" + :to="`/database/${$route.params.database_id}/view`" /> <v-tab + v-if="database && database.is_public" :text="$t('toolbars.database.subsets.tab')" :to="`/database/${$route.params.database_id}/subset`" /> <v-tab - :text="$t('toolbars.database.views.tab')" - :to="`/database/${$route.params.database_id}/view`" /> + :text="$t('toolbars.database.tables.tab')" + :to="`/database/${$route.params.database_id}/table`" /> <v-tab v-if="isOwner" :text="$t('toolbars.database.settings.tab')" diff --git a/dbrepo-ui/components/identifier/Citation.vue b/dbrepo-ui/components/identifier/Citation.vue index a52cd87159..570ab26790 100644 --- a/dbrepo-ui/components/identifier/Citation.vue +++ b/dbrepo-ui/components/identifier/Citation.vue @@ -15,7 +15,6 @@ :items="styles" item-title="title" item-value="value" - dense variant="outlined" single-line /> </v-col> diff --git a/dbrepo-ui/components/subset/Builder.vue b/dbrepo-ui/components/subset/Builder.vue index 52fff4c4df..4e4fe21eec 100644 --- a/dbrepo-ui/components/subset/Builder.vue +++ b/dbrepo-ui/components/subset/Builder.vue @@ -91,9 +91,9 @@ <v-col lg="4"> <v-select - v-model="table" + v-model="datasource" :disabled="isExecuted" - :items="tables" + :items="datasources" item-title="name" return-object persistent-hint @@ -108,7 +108,7 @@ <v-select v-model="select" item-title="internal_name" - :disabled="!table || isExecuted" + :disabled="!datasource || isExecuted" :items="columns" :rules="[v => !!v || $t('validation.required')]" required @@ -375,7 +375,7 @@ export default { }, data () { return { - table: null, + datasource: null, views: [], columns: [], sorts: [], @@ -393,7 +393,8 @@ export default { resultId: null, errorKeyword: null, query: { - table_id: null, + datasource_id: null, + datasource_type: null, columns: [], filter: null }, @@ -424,11 +425,14 @@ export default { } return this.database.container.image.operators }, - tables () { + datasources () { if (!this.database) { return [] } - return this.database.tables + if (this.isView) { + return this.database.tables + } + return this.database.views }, database () { return this.cacheStore.getDatabase @@ -467,11 +471,12 @@ export default { return this.$config.public.database.unsupported.split(',') }, subset () { - if (!this.table || !this.select) { + if (!this.datasource || !this.select) { return null } return { - table_id: this.table.id, + datasource_id: this.datasource.id, + datasource_type: this.isView ? 'table' : 'view', columns: this.select.map(column => column.id), filter: this.clauses ? this.clauses.map(clause => { if (clause.type === 'or' || clause.type === 'and') { @@ -479,7 +484,7 @@ export default { type: clause.type } } - const filtered_column = this.table.columns.filter(column => column.internal_name === clause.params[0]) + const filtered_column = this.datasource.columns.filter(column => column.internal_name === clause.params[0]) const filtered_operator = this.database.container.image.operators.filter(operator => operator.value === clause.params[1]) if (!filtered_column || filtered_column.length === 0 || !filtered_operator || filtered_operator.length === 0) { return null @@ -514,16 +519,21 @@ export default { } }, watch: { - table () { + datasource () { this.select = [] - if (!this.table) { + if (!this.datasource) { + return + } + if (!this.isView) { + this.fetchViewColumns(this.datasource?.id) return } - this.fetchTableColumns(this.table?.id) + this.fetchTableColumns(this.datasource?.id) } }, mounted () { this.selectTable() + this.selectView() this.initViewVisibility() }, methods: { @@ -544,6 +554,23 @@ export default { toast.error(this.$t(code)) }) }, + fetchViewColumns (viewId) { + this.loadingColumns = true + const viewService = useViewService() + viewService.findOne(this.$route.params.database_id, viewId) + .then((view) => { + this.columns = view.columns + this.loadingColumns = false + }) + .catch(({code}) => { + this.loadingColumns = false + const toast = useToastInstance() + if (typeof code !== 'string') { + return + } + toast.error(this.$t(code)) + }) + }, initViewVisibility () { if (!this.database) { return @@ -564,13 +591,24 @@ export default { } const tid = this.$route.query.tid const selection = this.tables.filter(t => t.id === tid) - if (selection.length > 0) { - this.table = selection[0] - console.info('Preselect table with id', tid) - console.debug('preselected table', this.table) - } else { + if (selection.length === 0) { console.warn('Failed to find table with id', tid) + return + } + this.datasource = selection[0] + console.info('Preselect table with id', tid) + }, + selectView () { + if (this.$route.query.vid === undefined) { + return + } + const vid = this.$route.query.vid + const selection = this.views.filter(v => v.id === vid) + if (selection.length === 0) { + console.warn('Failed to find view with id', vid) } + this.datasource = selection[0] + console.info('Preselect view with id', vid) }, execute () { if (this.isView) { diff --git a/dbrepo-ui/composables/axios-instance.ts b/dbrepo-ui/composables/axios-instance.ts index cd3737f2bf..31746818e9 100644 --- a/dbrepo-ui/composables/axios-instance.ts +++ b/dbrepo-ui/composables/axios-instance.ts @@ -2,6 +2,24 @@ import axios, {type AxiosInstance} from 'axios' let instance: AxiosInstance | null = null; +function tokenToExpiryDate(token: string): number { + if (!token) { + return -1 + } + const exp: number = jwtDecode<Token>(token).exp + if (exp) { + return exp * 1000 + } + return -1 +} + +function isExpiredToken(token: string): boolean { + if (!token) { + return false + } + return tokenToExpiryDate(token) < Date.now() +} + export const useAxiosInstance = () => { const config = useRuntimeConfig() if (!instance) { @@ -15,11 +33,14 @@ export const useAxiosInstance = () => { }, baseURL: config.public.api.client }); - instance.interceptors.request.use((config) => { - const { loggedIn, user } = useOidcAuth() + instance.interceptors.request.use(async (config) => { + const { loggedIn, user, canRefresh, refresh } = useOidcAuth() if (!loggedIn) { return config } + if (canRefresh) { + await refresh() + } const { accessToken } = user.value if (!accessToken) { return config diff --git a/dbrepo-ui/composables/database-service.ts b/dbrepo-ui/composables/database-service.ts index 0609373923..204f99dd35 100644 --- a/dbrepo-ui/composables/database-service.ts +++ b/dbrepo-ui/composables/database-service.ts @@ -66,7 +66,7 @@ export const useDatabaseService = (): any => { }); } - async function findOne(id: string, rawError: boolean = false): Promise<DatabaseDto | null> { + async function findOne(id: string, rawError: boolean = false): Promise<DatabaseDto> { const axios = useAxiosInstance(); console.debug('find database with id', id); return new Promise((resolve, reject) => { @@ -101,7 +101,7 @@ export const useDatabaseService = (): any => { }); } - async function updateVisibility(id: string, payload: DatabaseModifyVisibilityDto): Promise<DatabaseDto | null> { + async function updateVisibility(id: string, payload: DatabaseModifyVisibilityDto): Promise<DatabaseDto> { const axios = useAxiosInstance() console.debug('update database visibility for database with id', id); return new Promise((resolve, reject) => { @@ -117,7 +117,7 @@ export const useDatabaseService = (): any => { }); } - async function updateImage(id: string, payload: DatabaseModifyImageDto): Promise<DatabaseDto | null> { + async function updateImage(id: string, payload: DatabaseModifyImageDto): Promise<DatabaseDto> { const axios = useAxiosInstance() console.debug('update database image for database with id', id); return new Promise((resolve, reject) => { @@ -133,7 +133,7 @@ export const useDatabaseService = (): any => { }); } - async function updateOwner(id: string, payload: DatabaseTransferDto): Promise<DatabaseDto | null> { + async function updateOwner(id: string, payload: DatabaseTransferDto): Promise<DatabaseDto> { const axios = useAxiosInstance() console.debug('update database owner for database with id', id); return new Promise((resolve, reject) => { diff --git a/dbrepo-ui/dto/index.ts b/dbrepo-ui/dto/index.ts index 43c3ca2d19..e05e0fc4d4 100644 --- a/dbrepo-ui/dto/index.ts +++ b/dbrepo-ui/dto/index.ts @@ -5,6 +5,7 @@ interface DatabaseDto { owner: UserDto; contact: UserDto; created: Date; + dashboard_uid: string; exchange_name: string; internal_name: string; is_public: boolean; @@ -613,7 +614,8 @@ interface OrderDto { } interface SubsetDto { - table_id: string; + datasource_id: string; + datasource_type: string; columns: string[]; filter: FilterDto[] | null; order: OrderDto[] | null; diff --git a/dbrepo-ui/locales/en-US.json b/dbrepo-ui/locales/en-US.json index 55a9692c2d..242f48a5db 100644 --- a/dbrepo-ui/locales/en-US.json +++ b/dbrepo-ui/locales/en-US.json @@ -38,7 +38,9 @@ "help": "Help", "visibility": "Visibility", "update": "Update", - "you": "You" + "you": "You", + "enabled": "Enabled", + "disabled": "Disabled" }, "pages": { "identifier": { @@ -330,7 +332,7 @@ "title": "Owner" }, "creation": { - "title": "Creation" + "title": "Created" }, "import": { "title": "Import dataset into" @@ -595,6 +597,18 @@ "title": "Preview Image", "alt": "Database preview image representing the dataset" }, + "dashboard": { + "title": "Dashboard", + "text": "View", + "visibility": { + "label": "Managed Dashboard", + "hint": "Required, enables/disables the managed dashboard", + "warn": "Note that disabling the dashboard management also disables automatic visibility permission management of the dashboard!" + } + }, + "creation": { + "title": "Created" + }, "name": { "title": "Name" }, @@ -919,7 +933,7 @@ "title": "Owner" }, "creation": { - "title": "Creation" + "title": "Created" }, "visibility": { "title": "Visibility" @@ -940,7 +954,7 @@ "hint": "Required" }, "table": { - "label": "Data Table", + "label": "Datasource", "hint": "Required" }, "columns": { @@ -1136,10 +1150,14 @@ "missing": "Failed to find access in metadata database" }, "axios": { - "connection": "Failed to contact backend", + "connection": "Failed to establish connection to backend", "malformed": "Malformed request", "timeout": "Connection timed out" }, + "dashboard": { + "connection": "Failed to establish connection with dashboard service", + "invalid": "Failed to perform action at dashboard service" + }, "concept": { "missing": "Failed to find concept in metadata database" }, diff --git a/dbrepo-ui/nuxt.config.ts b/dbrepo-ui/nuxt.config.ts index b3694d5b8b..f63592bf75 100644 --- a/dbrepo-ui/nuxt.config.ts +++ b/dbrepo-ui/nuxt.config.ts @@ -81,6 +81,9 @@ export default defineNuxtConfig({ contrast: 'flat', } }, + dashboard: { + url: 'http://localhost:3000' + }, api: { client: 'http://localhost', server: 'http://gateway-service', diff --git a/dbrepo-ui/pages/database/[database_id]/info.vue b/dbrepo-ui/pages/database/[database_id]/info.vue index 9f2d426553..89583c5f4f 100644 --- a/dbrepo-ui/pages/database/[database_id]/info.vue +++ b/dbrepo-ui/pages/database/[database_id]/info.vue @@ -45,6 +45,16 @@ :max-width="maxWidth" :max-height="maxHeight" /> </v-list-item> + <v-list-item + v-if="canViewDashboard" + :title="$t('pages.database.dashboard.title')" + density="compact"> + <NuxtLink + target="_blank" + :href="`${config.public.dashboard.url}/d/${database.dashboard_uid}`"> + {{ $t('pages.database.dashboard.text') }} + </NuxtLink> + </v-list-item> <v-list-item :title="$t('pages.database.name.title')" density="compact"> @@ -108,6 +118,11 @@ :other-user="cacheUser" /> </div> </v-list-item> + <v-list-item + v-if="database.created" + :title="$t('pages.database.creation.title')"> + {{ formatUTC(database.created) }} + </v-list-item> </v-list> </v-card-text> </v-card> @@ -187,7 +202,7 @@ import DatabaseToolbar from '@/components/database/DatabaseToolbar.vue' import Summary from '@/components/identifier/Summary.vue' import Select from '@/components/identifier/Select.vue' import UserBadge from '@/components/user/UserBadge.vue' -import { sizeToHumanLabel } from '@/utils' +import { formatTimestampUTCLabel, sizeToHumanLabel } from '@/utils' import { useCacheStore } from '@/stores/cache.js' export default { @@ -222,6 +237,10 @@ export default { tab () { return 0 }, + buttonVariant () { + const runtimeConfig = useRuntimeConfig() + return this.$vuetify.theme.global.name.toLowerCase().endsWith('contrast') ? runtimeConfig.public.variant.button.contrast : runtimeConfig.public.variant.button.normal + }, description () { if (!this.identifier) { return '' @@ -341,6 +360,20 @@ export default { const userService = useUserService() return userService.hasReadAccess(this.access) }, + canViewDashboard () { + if (!this.database || !this.database.views) { + return false + } + if (!this.database.is_public && !this.database.is_schema_public) { + return false + } + return this.database.dashboard_uid + } + }, + methods: { + formatUTC (timestamp) { + return formatTimestampUTCLabel(timestamp) + } } } </script> diff --git a/dbrepo-ui/pages/database/[database_id]/settings.vue b/dbrepo-ui/pages/database/[database_id]/settings.vue index f20ce2be68..cefd76e639 100644 --- a/dbrepo-ui/pages/database/[database_id]/settings.vue +++ b/dbrepo-ui/pages/database/[database_id]/settings.vue @@ -165,6 +165,34 @@ :hint="$t('pages.database.resource.schema.hint', { resource: 'database', schema: 'tables, views, subsets' })" /> </v-col> </v-row> + <v-row + v-if="isDashboardDisabled"> + <v-col + lg="8"> + <v-alert + border="start" + color="warning"> + {{ $t('pages.database.dashboard.visibility.warn') }} + </v-alert> + </v-col> + </v-row> + <v-row + dense> + <v-col + lg="4"> + <v-select + v-model="modifyVisibility.is_dashboard_enabled" + :items="dashboardOptions" + persistent-hint + :variant="inputVariant" + required + :rules="[ + v => v !== null || $t('validation.required') + ]" + :label="$t('pages.database.dashboard.visibility.label')" + :hint="$t('pages.database.dashboard.visibility.hint')" /> + </v-col> + </v-row> <v-row> <v-col> <v-btn @@ -275,7 +303,8 @@ export default { editVisibilityDialog: false, modifyVisibility: { is_public: null, - is_schema_public: null + is_schema_public: null, + is_dashboard_enabled: null, }, modifyOwner: { id: null @@ -291,6 +320,10 @@ export default { { title: this.$t('pages.database.resource.schema.enabled'), value: true }, { title: this.$t('pages.database.resource.schema.disabled'), value: false }, ], + dashboardOptions: [ + { title: this.$t('navigation.enabled'), value: true }, + { title: this.$t('navigation.disabled'), value: false }, + ], headers: [ { title: this.$t('pages.user.qualified-name.label'), @@ -356,7 +389,7 @@ export default { if (!this.modifyVisibility || !this.database) { return false } - return this.modifyVisibility.is_public === this.database.is_public && this.modifyVisibility.is_schema_public === this.database.is_schema_public + return this.modifyVisibility.is_public === this.database.is_public && this.modifyVisibility.is_schema_public === this.database.is_schema_public && this.modifyVisibility.is_dashboard_enabled === this.database.is_dashboard_enabled }, canModifyVisibility () { if (!this.roles) { @@ -416,6 +449,12 @@ export default { maxHeight () { return this.$config.public.database.image.height }, + isDashboardDisabled () { + if (!this.database) { + return false + } + return this.database.is_dashboard_enabled && !this.modifyVisibility.is_dashboard_enabled + }, uploadErrorMessages () { if (!this.file || this.file.size < 1_000_000) { return [] @@ -449,6 +488,7 @@ export default { } this.modifyVisibility.is_public = this.database.is_public this.modifyVisibility.is_schema_public = this.database.is_schema_public + this.modifyVisibility.is_dashboard_enabled = this.database.is_dashboard_enabled this.modifyOwner.id = this.database.owner.id }, methods: { @@ -463,7 +503,7 @@ export default { this.loading = true const databaseService = useDatabaseService() databaseService.updateVisibility(this.$route.params.database_id, this.modifyVisibility) - .then((database) => { + .then(() => { const toast = useToastInstance() toast.success(this.$t('success.database.visibility')) this.cacheStore.reloadDatabase() diff --git a/dbrepo-ui/pages/database/[database_id]/subset/index.vue b/dbrepo-ui/pages/database/[database_id]/subset/index.vue index d7127d90af..dee6e18c64 100644 --- a/dbrepo-ui/pages/database/[database_id]/subset/index.vue +++ b/dbrepo-ui/pages/database/[database_id]/subset/index.vue @@ -46,7 +46,7 @@ export default { if (!this.database) { return false } - if (this.database.is_public || this.database.is_schema_public) { + if (this.database.is_public) { return true } if (!this.access) { diff --git a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/info.vue b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/info.vue index 18662f55dd..808e725bc2 100644 --- a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/info.vue +++ b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/info.vue @@ -66,6 +66,11 @@ :user="table.owner" :other-user="cacheUser" /> </v-list-item> + <v-list-item + v-if="table.created" + :title="$t('pages.table.creation.title')"> + {{ formatUTC(table.created) }} + </v-list-item> </v-list> </v-card-text> </v-card> @@ -142,6 +147,7 @@ import Select from '@/components/identifier/Select.vue' import Summary from '@/components/identifier/Summary.vue' import UserBadge from '@/components/user/UserBadge.vue' import { useCacheStore } from '@/stores/cache.js' +import { formatTimestampUTCLabel } from '@/utils' export default { components: { @@ -276,6 +282,11 @@ export default { return this.$t('pages.table.connection.permissions.read') } } + }, + methods: { + formatUTC (timestamp) { + return formatTimestampUTCLabel(timestamp) + } } } </script> diff --git a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/info.vue b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/info.vue index b5266b79f2..aece8572cf 100644 --- a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/info.vue +++ b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/info.vue @@ -166,7 +166,7 @@ export default { if (!this.view) { return false } - if (this.view.is_public) { + if (this.database.is_public || this.database.is_schema_public) { return true } if (!this.access) { diff --git a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/settings.vue b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/settings.vue index 41285c4d3b..6bd0864445 100644 --- a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/settings.vue +++ b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/settings.vue @@ -286,6 +286,7 @@ export default { const toast = useToastInstance() toast.success(this.$t('success.view.modified')) this.cacheStore.reloadView() + this.cacheStore.reloadDatabase() }) .catch(({code, message}) => { this.loading = false diff --git a/docker-compose.yml b/docker-compose.yml index e3c665faeb..8151d2c55c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,7 +6,7 @@ volumes: search-db-data: identity-service-data: metric-db-data: - dashboard-service-data: + dashboard-ui-data: services: dbrepo-metadata-db: @@ -39,12 +39,13 @@ services: image: docker.io/bitnami/mariadb-galera:11.3.2-debian-12-r9 volumes: - data-db-data:/bitnami/mariadb - - "${SHARED_VOLUME:-/tmp}:/tmp" ports: - "3307:3306" environment: - MARIADB_ROOT_PASSWORD: "${DATA_DB_PASSWORD:-dbrepo}" MARIADB_GALERA_MARIABACKUP_PASSWORD: "${DATA_DB_BACKUP_PASSWORD:-dbrepobackup}" + MARIADB_PASSWORD: "${READONLY_PASSWORD:-user}" + MARIADB_ROOT_PASSWORD: "${DATA_DB_PASSWORD:-dbrepo}" + MARIADB_USER: "${READONLY_USERNAME:-user}" healthcheck: test: mysqladmin ping --user=root --password="${DATA_DB_PASSWORD:-dbrepo}" --silent interval: 10s @@ -129,10 +130,13 @@ services: METADATA_DB: "${METADATA_DB:-dbrepo}" METADATA_DB_PASSWORD: "${METADATA_DB_PASSWORD:-dbrepo}" METADATA_USERNAME: "root" + READONLY_USERNAME: "${READONLY_USERNAME:-user}" SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" depends_on: dbrepo-auth-service: condition: service_healthy + dbrepo-gateway-service: + condition: service_healthy dbrepo-metadata-db: condition: service_healthy logging: @@ -148,8 +152,6 @@ services: network: host ports: - "9099:8080" - volumes: - - "${SHARED_VOLUME:-/tmp}:/tmp" environment: ADMIN_EMAIL: "${ADMIN_EMAIL:-noreply@localhost}" ANALYSE_SERVICE_ENDPOINT: "${ANALYSE_SERVICE_ENDPOINT:-http://analyse-service:8080}" @@ -162,12 +164,13 @@ services: BROKER_EXCHANGE_NAME: ${BROKER_EXCHANGE_NAME:-dbrepo} BROKER_QUEUE_NAME: ${BROKER_QUEUE_NAME:-dbrepo} BROKER_HOST: "${BROKER_ENDPOINT:-broker-service}" - BROKER_PASSWORD: ${BROKER_PASSWORD:-admin} + BROKER_PASSWORD: ${SYSTEM_PASSWORD:-admin} BROKER_PORT: ${BROKER_PORT:-5672} BROKER_SERVICE_ENDPOINT: ${BROKER_SERVICE_ENDPOINT:-http://broker-service:15672} - BROKER_USERNAME: ${BROKER_USERNAME:-admin} + BROKER_USERNAME: ${SYSTEM_USERNAME:-admin} BROKER_VIRTUALHOST: "${BROKER_VIRTUALHOST:-dbrepo}" CROSSREF_ENDPOINT: "${CROSSREF_ENDPOINT:-http://data.crossref.org}" + DASHBOARD_SERVICE_ENDPOINT: "${DASHBOARD_SERVICE_ENDPOINT:-http://dashboard-service:8080}" DATA_SERVICE_ENDPOINT: ${DATA_SERVICE_ENDPOINT:-http://data-service:8080} DELETED_RECORD: "${DELETED_RECORD:-persistent}" GRANULARITY: "${GRANULARITY:-YYYY-MM-DDThh:mm:ssZ}" @@ -201,6 +204,10 @@ services: condition: service_healthy dbrepo-data-service: condition: service_healthy + dbrepo-dashboard-service: + condition: service_healthy + dbrepo-search-service: + condition: service_healthy dbrepo-metadata-db: condition: service_healthy logging: @@ -215,7 +222,7 @@ services: context: ./dbrepo-analyse-service network: host ports: - - "5000:8080" + - "4050:8080" environment: AUTH_SERVICE_CLIENT: ${AUTH_SERVICE_CLIENT:-dbrepo-client} AUTH_SERVICE_CLIENT_SECRET: ${AUTH_SERVICE_CLIENT:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG} @@ -229,8 +236,6 @@ services: METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080} SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}" - volumes: - - "${SHARED_FILESYSTEM:-/tmp}:/tmp" healthcheck: test: curl -sSL localhost:8080/health | grep 'UP' || exit 1 interval: 10s @@ -271,26 +276,16 @@ services: restart: "no" container_name: dbrepo-search-db hostname: search-db - image: dbrepo-search-db:latest - build: - context: ./dbrepo-search-db - network: host + image: docker.io/bitnami/opensearch:2.10.0 + ports: + - "9200:9200" healthcheck: - test: curl -sSL localhost:9200/_plugins/_security/health | jq .status | grep UP + test: curl -sSL 127.0.0.1:9200 interval: 10s timeout: 5s retries: 12 - environment: - ES_JAVA_OPTS: "-Xms4g -Xmx4g" - logger.level: "WARN" - deploy: - resources: - limits: - memory: 4G - ports: - - "9200:9200" volumes: - - search-db-data:/usr/share/elasticsearch/data + - search-db-data:/bitnami/opensearch/data logging: driver: json-file @@ -303,7 +298,7 @@ services: context: ./dbrepo-search-service network: host ports: - - "4000:8080" + - "4060:8080" environment: AUTH_SERVICE_CLIENT: ${AUTH_SERVICE_CLIENT:-dbrepo-client} AUTH_SERVICE_CLIENT_SECRET: ${AUTH_SERVICE_CLIENT_SECRET:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG} @@ -313,8 +308,6 @@ services: METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080} OPENSEARCH_HOST: ${OPENSEARCH_HOST:-search-db} OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200} - OPENSEARCH_USERNAME: ${SEARCH_DB_USERNAME:-admin} - OPENSEARCH_PASSWORD: ${SEARCH_DB_PASSWORD:-admin} SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}" healthcheck: @@ -322,6 +315,8 @@ services: interval: 10s timeout: 5s retries: 12 + logging: + driver: json-file dbrepo-ui: restart: "no" @@ -336,7 +331,7 @@ services: network: host environment: NUXT_PUBLIC_API_CLIENT: "${BASE_URL:-http://localhost}" - NUXT_PUBLIC_API_SERVER: "${BASE_URL:-http://localhost}" + NUXT_PUBLIC_API_SERVER: "${BASE_URL:-http://gateway-service}" NUXT_OIDC_PROVIDERS_KEYCLOAK_BASE_URL: "${BASE_URL:-http://localhost}/realms/dbrepo" NUXT_OIDC_PROVIDERS_KEYCLOAK_AUTHORIZATION_URL: "${BASE_URL:-http://localhost}/realms/dbrepo/protocol/openid-connect/auth" NUXT_OIDC_PROVIDERS_KEYCLOAK_CLIENT_ID: "${AUTH_SERVICE_CLIENT:-dbrepo-client}" @@ -350,7 +345,7 @@ services: dbrepo-search-service: condition: service_healthy healthcheck: - test: curl -fsSL http://127.0.0.1:3000 && curl -fsSL http://127.0.0.1:3000/health + test: curl -fsSL 127.0.0.1:3000 && curl -fsSL 127.0.0.1:3000/health interval: 10s timeout: 5s retries: 12 @@ -368,6 +363,11 @@ services: - "80:8080" volumes: - ./dbrepo-gateway-service/dbrepo.conf:/etc/nginx/conf.d/default.conf + healthcheck: + test: lsof -i TCP:80 || exit 1 + interval: 10s + timeout: 5s + retries: 12 depends_on: dbrepo-analyse-service: condition: service_healthy @@ -395,8 +395,8 @@ services: environment: LDAP_ADMIN_USERNAME: "${IDENTITY_SERVICE_ADMIN_USERNAME:-admin}" LDAP_ADMIN_PASSWORD: "${IDENTITY_SERVICE_ADMIN_PASSWORD:-admin}" - LDAP_USERS: "${SYSTEM_USERNAME:-admin}" - LDAP_PASSWORDS: "${SYSTEM_PASSWORD:-admin}" + LDAP_USERS: "${SYSTEM_USERNAME:-admin},${READONLY_USERNAME:-user}" + LDAP_PASSWORDS: "${SYSTEM_PASSWORD:-admin},${READONLY_PASSWORD:-user}" LDAP_GROUP: "${ADMIN_GROUP:-system}" LDAP_ROOT: "${IDENTITY_SERVICE_ROOT:-dc=dbrepo,dc=at}" LDAP_ADMIN_DN: "${IDENTITY_SERVICE_ADMIN_DN:-cn=admin,dc=dbrepo,dc=at}" @@ -422,8 +422,6 @@ services: METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080} OPENSEARCH_HOST: ${OPENSEARCH_HOST:-search-db} OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200} - OPENSEARCH_USERNAME: ${SEARCH_DB_USERNAME:-admin} - OPENSEARCH_PASSWORD: ${SEARCH_DB_PASSWORD:-admin} SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}" depends_on: @@ -434,6 +432,29 @@ services: logging: driver: json-file + dbrepo-dashboard-service-init: + restart: "no" + init: true + container_name: dbrepo-dashboard-service-init + hostname: search-dashboard-init + image: dbrepo-dashboard-service-init:latest + build: + context: ./dbrepo-dashboard-service/init + network: host + environment: + LOG_LEVEL: ${LOG_LEVEL:-info} + DASHBOARD_UI_ENDPOINT: "${DASHBOARD_UI_ENDPOINT:-http://dashboard-ui:3000}" + METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080} + SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" + SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}" + depends_on: + dbrepo-dashboard-ui: + condition: service_healthy + dbrepo-metadata-service: + condition: service_healthy + logging: + driver: json-file + dbrepo-storage-service: restart: "no" container_name: dbrepo-storage-service @@ -461,8 +482,6 @@ services: volumes: - ./dbrepo-metric-db/prometheus.yml:/etc/prometheus/prometheus.yml - metric-db-data:/opt/bitnami/prometheus/data - ports: - - 9090:9090 healthcheck: test: promtool check healthy interval: 10s @@ -471,35 +490,6 @@ services: logging: driver: json-file - dbrepo-dashboard-service: - restart: "no" - container_name: dbrepo-dashboard-service - hostname: dashboard-service - image: dbrepo-dashboard-service:latest - build: - context: ./dbrepo-dashboard-service - network: host - ports: - - "3000:3000" - volumes: - - dashboard-service-data:/opt/bitnami/grafana/data - environment: - GF_SERVER_DOMAIN: "dashboard-service" - GF_SECURITY_DISABLE_INITIAL_ADMIN_CREATION: "true" - LDAP_ADMIN_USERNAME: "${IDENTITY_SERVICE_ADMIN_USERNAME:-admin}" - LDAP_ADMIN_PASSWORD: "${IDENTITY_SERVICE_ADMIN_PASSWORD:-admin}" - LDAP_ROOT: "${IDENTITY_SERVICE_ROOT:-dc=dbrepo,dc=at}" - healthcheck: - test: curl -fsSL --head http://127.0.0.1:3000 - interval: 10s - timeout: 5s - retries: 12 - depends_on: - dbrepo-metric-db: - condition: service_started - logging: - driver: json-file - dbrepo-storage-service-init: restart: "no" init: true @@ -530,8 +520,6 @@ services: network: host ports: - "9093:8080" - volumes: - - "${SHARED_VOLUME:-/tmp}:/tmp" environment: AUTH_SERVICE_ADMIN: "${AUTH_SERVICE_ADMIN:-admin}" AUTH_SERVICE_ADMIN_PASSWORD: "${AUTH_SERVICE_ADMIN_PASSWORD:-admin}" @@ -555,16 +543,12 @@ services: GRANT_DEFAULT_WRITE: "${GRANT_DEFAULT_WRITE:-SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE}" JWT_PUBKEY: "${JWT_PUBKEY:-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB}" LOG_LEVEL: ${LOG_LEVEL:-info} - MIN_CONCURRENT_CONSUMERS: ${MIN_CONCURRENT_CONSUMERS:-1} - MAX_CONCURRENT_CONSUMERS: ${MAX_CONCURRENT_CONSUMERS:-5} QUEUE_NAME: ${QUEUE_NAME:-dbrepo} REQUEUE_REJECTED: ${REQUEUE_REJECTED:-false} ROUTING_KEY: "${ROUTING_KEY:-dbrepo.#}" S3_ACCESS_KEY_ID: "${S3_ACCESS_KEY_ID:-seaweedfsadmin}" S3_BUCKET: "${S3_BUCKET:-dbrepo}" S3_ENDPOINT: "${S3_ENDPOINT:-http://storage-service:9000}" - S3_FILE_PATH: "${S3_FILE_PATH:-/tmp}" - S3_IMPORT_BUCKET: "${S3_IMPORT_BUCKET:-dbrepo-upload}" S3_SECRET_ACCESS_KEY: "${S3_SECRET_ACCESS_KEY:-seaweedfsadmin}" SPARK_USER: "${COMPUTE_SERVICE_USERNAME:-spark}" SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" @@ -579,3 +563,65 @@ services: condition: service_healthy logging: driver: json-file + + dbrepo-dashboard-ui: + restart: "no" + container_name: dbrepo-dashboard-ui + hostname: dashboard-ui + image: dbrepo-dashboard-ui:latest + build: + context: ./dbrepo-dashboard-ui + network: host + ports: + - "3000:3000" + volumes: + - dashboard-ui-data:/opt/bitnami/grafana/data + environment: + BASE_URL: "${BASE_URL:-http://localhost}" + GF_INSTALL_PLUGINS: "yesoreyeram-infinity-datasource" + GF_SERVER_DOMAIN: "dashboard-service" + GF_SECURITY_DISABLE_INITIAL_ADMIN_CREATION: "true" + LDAP_ADMIN_USERNAME: "${IDENTITY_SERVICE_ADMIN_USERNAME:-admin}" + LDAP_ADMIN_PASSWORD: "${IDENTITY_SERVICE_ADMIN_PASSWORD:-admin}" + LDAP_ROOT: "${IDENTITY_SERVICE_ROOT:-dc=dbrepo,dc=at}" + healthcheck: + test: curl -fsSL --head 127.0.0.1:3000 + interval: 10s + timeout: 5s + retries: 12 + depends_on: + dbrepo-metric-db: + condition: service_started + extra_hosts: + - "localhost:host-gateway" + logging: + driver: json-file + + dbrepo-dashboard-service: + restart: "no" + container_name: dbrepo-dashboard-service + hostname: dashboard-service + image: dbrepo-dashboard-service:latest + build: + context: ./dbrepo-dashboard-service + network: host + ports: + - "4070:8080" + environment: + AUTH_SERVICE_ADMIN: ${AUTH_SERVICE_ADMIN:-admin} + AUTH_SERVICE_ADMIN_PASSWORD: ${AUTH_SERVICE_ADMIN_PASSWORD:-admin} + AUTH_SERVICE_ENDPOINT: ${AUTH_SERVICE_ENDPOINT:-http://auth-service:8080} + BASE_URL: "${BASE_URL:-http://localhost}" + DASHBOARD_UI_ENDPOINT: "${DASHBOARD_UI_ENDPOINT:-http://dashboard-ui:3000}" + SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" + SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}" + healthcheck: + test: curl -fsSL --head 127.0.0.1:8080/health + interval: 10s + timeout: 5s + retries: 12 + depends_on: + dbrepo-metric-db: + condition: service_started + logging: + driver: json-file diff --git a/grafana/grafana.ini b/grafana/grafana.ini new file mode 100644 index 0000000000..df8b9eb1b4 --- /dev/null +++ b/grafana/grafana.ini @@ -0,0 +1,5 @@ +[server] +domain = grafana +root_url = http://grafana/grafana +serve_from_sub_path = true + diff --git a/helm/dbrepo/Chart.lock b/helm/dbrepo/Chart.lock index 297b4b1a92..e26b869016 100644 --- a/helm/dbrepo/Chart.lock +++ b/helm/dbrepo/Chart.lock @@ -26,5 +26,5 @@ dependencies: - name: nginx repository: https://charts.bitnami.com/bitnami version: 18.3.1 -digest: sha256:aa148a5f656ad17971203ea710206117d6de6f27b6940f9d532a6c5762e5df25 -generated: "2025-02-04T22:01:27.370259572+01:00" +digest: sha256:acb36fe9078b39dd50381a03827c318897d401c1946aee453611b3b58c924a54 +generated: "2025-04-01T13:07:24.905667677+02:00" diff --git a/helm/dbrepo/Chart.yaml b/helm/dbrepo/Chart.yaml index 1c5fa27f8c..7b5f38ac5d 100644 --- a/helm/dbrepo/Chart.yaml +++ b/helm/dbrepo/Chart.yaml @@ -7,8 +7,8 @@ description: Helm Chart for installing DBRepo sources: - https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services type: application -version: "1.7.3" -appVersion: "1.7.3" +version: "1.8.0" +appVersion: "1.8.0" keywords: - dbrepo maintainers: @@ -48,10 +48,10 @@ dependencies: repository: file://../seaweedfs condition: storageservice.enabled - name: grafana - alias: dashboardservice + alias: dashboardui version: 11.4.2 repository: https://charts.bitnami.com/bitnami - condition: dashboardservice.enabled + condition: dashboardui.enabled - name: prometheus alias: metricdb version: 1.3.22 diff --git a/helm/dbrepo/README.md b/helm/dbrepo/README.md index ba2f383668..2fd5305337 100644 --- a/helm/dbrepo/README.md +++ b/helm/dbrepo/README.md @@ -11,7 +11,7 @@ sample [ for your deployment and update the variables, especially `hostname`. ```bash -helm install my-release "oci://registry.datalab.tuwien.ac.at/dbrepo/helm/dbrepo" --values ./values.yaml --version "1.7.3" +helm install my-release "oci://registry.datalab.tuwien.ac.at/dbrepo/helm/dbrepo" --values ./values.yaml --version "1.8.0" ``` ## Prerequisites @@ -34,7 +34,7 @@ variable when you increase the available Pod memory for performance. To install the chart with the release name `my-release`: ```bash -helm install my-release "oci://oci://registry.datalab.tuwien.ac.at/dbrepo/helm" --values ./values.yaml --version "1.7.3" +helm install my-release "oci://oci://registry.datalab.tuwien.ac.at/dbrepo/helm" --values ./values.yaml --version "1.8.0" ``` The command deploys DBRepo on the Kubernetes cluster in the default configuration. The Parameters section lists the @@ -94,11 +94,9 @@ The command removes all the Kubernetes components associated with the chart and | `authservice.enabled` | Enable the Auth Service. | `true` | | `authservice.image.debug` | Set the logging level to `trace`. Otherwise, set to `info`. | `false` | | `authservice.endpoint` | The hostname for the microservices. | `http://auth-service` | -| `authservice.production` | Start Keycloak with production profile. | `true` | +| `authservice.extraStartupArgs` | Extra arguments for the Keycloak container. | `--hostname-strict false --proxy-headers xforwarded` | | `authservice.resourcesPreset` | The container resource presets | `small` | | `authservice.jwt.pubkey` | The JWT public key from the `dbrepo-client`. | `MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB` | -| `authservice.tls.enabled` | Enable TLS/SSL communication. Required for HTTPS. | `true` | -| `authservice.tls.existingSecret` | The secret containing the `tls.crt`, `tls.key` and `ca.crt`. | `auth-service-secret` | | `authservice.client.id` | The client id for the microservices. | `dbrepo-client` | | `authservice.client.secret` | The client secret for the microservices. | `MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG` | | `authservice.setupJob.resourcesPreset` | The container resource preset | `nano` | @@ -113,6 +111,8 @@ The command removes all the Kubernetes components associated with the chart and | `datadb.rootUser.user` | The root username. | `root` | | `datadb.rootUser.password` | The root user password. | `dbrepo` | | `datadb.db.name` | The database name. | `dbrepo` | +| `datadb.db.user` | The database username for the dashboard service. | `user` | +| `datadb.db.password` | The database user password for the dashboard service. | `user` | | `datadb.galera.mariabackup.user` | The database backup username. | `backup` | | `datadb.galera.mariabackup.password` | The database backup user password | `backup` | | `datadb.jdbcExtraArgs` | The extra arguments for JDBC connections in the microservices. | `""` | @@ -137,32 +137,6 @@ The command removes all the Kubernetes components associated with the chart and | `searchdb.data.replicaCount` | The number of pod replicas. | `1` | | `searchdb.clusterName` | The cluster name. | `search-db` | -### Upload Service - -| Name | Description | Value | -| ----------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------- | -| `uploadservice.enabled` | Enable the Upload Service. | `true` | -| `uploadservice.s3.endpoint` | The S3-capable endpoint the microservice connects to. | `http://storage-service-s3:8333` | -| `uploadservice.s3.bucket` | The S3 bucket name. | `dbrepo` | -| `uploadservice.s3.maxSize` | The maximum file size in bytes. | `2000000000` | -| `uploadservice.podSecurityContext.enabled` | Enable pods' Security Context | `true` | -| `uploadservice.podSecurityContext.fsGroupChangePolicy` | Set filesystem group change policy | `Always` | -| `uploadservice.podSecurityContext.sysctls` | Set kernel settings using the sysctl interface | `[]` | -| `uploadservice.podSecurityContext.supplementalGroups` | Set filesystem extra groups | `[]` | -| `uploadservice.podSecurityContext.fsGroup` | Set RabbitMQ pod's Security Context fsGroup | `0` | -| `uploadservice.containerSecurityContext.enabled` | Enable containers' Security Context | `true` | -| `uploadservice.containerSecurityContext.seLinuxOptions` | Set SELinux options in container | `{}` | -| `uploadservice.containerSecurityContext.runAsUser` | Set RabbitMQ containers' Security Context runAsUser | `1000` | -| `uploadservice.containerSecurityContext.runAsGroup` | Set RabbitMQ containers' Security Context runAsGroup | `1000` | -| `uploadservice.containerSecurityContext.runAsNonRoot` | Set RabbitMQ container's Security Context runAsNonRoot | `true` | -| `uploadservice.containerSecurityContext.allowPrivilegeEscalation` | Set container's privilege escalation | `false` | -| `uploadservice.containerSecurityContext.readOnlyRootFilesystem` | Set container's Security Context readOnlyRootFilesystem | `false` | -| `uploadservice.containerSecurityContext.capabilities.drop` | Set container's Security Context runAsNonRoot | `["ALL"]` | -| `uploadservice.containerSecurityContext.seccompProfile.type` | Set container's Security Context seccomp profile | `RuntimeDefault` | -| `uploadservice.resourcesPreset` | The container resource preset | `nano` | -| `uploadservice.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` | -| `uploadservice.replicaCount` | The number of replicas. | `2` | - ### Broker Service | Name | Description | Value | @@ -406,17 +380,46 @@ mqtt.prefetch = 10 ### Dashboard Service -| Name | Description | Value | -| --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------ | -| `dashboardservice.enabled` | Enable the Dashboard Service. | `true` | -| `dashboardservice.metrics.enabled` | Enable the metrics sidecar. | `true` | -| `dashboardservice.dashboardsProvider.enabled` | Enable the default dashboard provisioning provider to routinely import dashboards from /opt/bitnami/grafana/dashboards | `true` | +| Name | Description | Value | +| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | -------------------------- | +| `dashboardservice.enabled` | Enable the Dashboard Service. | `true` | +| `dashboardservice.endpoint` | The endpoint for the microservices. | `http://dashboard-service` | +| `dashboardservice.podSecurityContext.enabled` | Enable pods' Security Context | `true` | +| `dashboardservice.podSecurityContext.fsGroupChangePolicy` | Set filesystem group change policy | `Always` | +| `dashboardservice.podSecurityContext.sysctls` | Set kernel settings using the sysctl interface | `[]` | +| `dashboardservice.podSecurityContext.supplementalGroups` | Set filesystem extra groups | `[]` | +| `dashboardservice.podSecurityContext.fsGroup` | Set RabbitMQ pod's Security Context fsGroup | `0` | +| `dashboardservice.containerSecurityContext.enabled` | Enable containers' Security Context | `true` | +| `dashboardservice.containerSecurityContext.seLinuxOptions` | Set SELinux options in container | `{}` | +| `dashboardservice.containerSecurityContext.runAsUser` | Set RabbitMQ containers' Security Context runAsUser | `1001` | +| `dashboardservice.containerSecurityContext.runAsGroup` | Set RabbitMQ containers' Security Context runAsGroup | `1001` | +| `dashboardservice.containerSecurityContext.runAsNonRoot` | Set RabbitMQ container's Security Context runAsNonRoot | `true` | +| `dashboardservice.containerSecurityContext.allowPrivilegeEscalation` | Set container's privilege escalation | `false` | +| `dashboardservice.containerSecurityContext.readOnlyRootFilesystem` | Set container's Security Context readOnlyRootFilesystem | `false` | +| `dashboardservice.containerSecurityContext.capabilities.drop` | Set container's Security Context runAsNonRoot | `["ALL"]` | +| `dashboardservice.containerSecurityContext.seccompProfile.type` | Set container's Security Context seccomp profile | `RuntimeDefault` | +| `dashboardservice.resourcesPreset` | The container resource preset | `micro` | +| `dashboardservice.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` | +| `dashboardservice.replicaCount` | The number of replicas. | `2` | +| `dashboardservice.init.resourcesPreset` | The container resource preset | `nano` | +| `dashboardservice.init.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` | +| `dashboardservice.replicaCount` | The number of replicas. | `2` | + +### Dashboard UI + +| Name | Description | Value | +| ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | --------------------- | +| `dashboardui.enabled` | Enable the Dashboard UI. | `true` | +| `dashboardui.metrics.enabled` | Enable the metrics sidecar. | `true` | +| `dashboardui.endpoint` | The endpoint for the microservices. | `http://dashboard-ui` | +| `dashboardui.dashboardsProvider.enabled` | Enable the default dashboard provisioning provider to routinely import dashboards from /opt/bitnami/grafana/dashboards | `true` | ### Metric Service -| Name | Description | Value | -| ------------------ | -------------------------- | ------ | -| `metricdb.enabled` | Enable the Metric Service. | `true` | +| Name | Description | Value | +| ------------------- | ------------------------------- | ------------------------- | +| `metricdb.enabled` | Enable the Metric Service. | `true` | +| `metricdb.endpoint` | The endpoint for microservices. | `http://metric-db-server` | ### Gateway Service diff --git a/helm/dbrepo/charts/seaweedfs-4.2.1.tgz b/helm/dbrepo/charts/seaweedfs-4.2.1.tgz index b26358e59779d3206d9c834f59b08e7f2f84149b..3b21c83737040745d9723e6662e83b1cdef9966e 100644 GIT binary patch delta 230585 zcmbO}hkx}v{t34A^|!Ze(%)70ExvJa$=e&Y({$`7m1M4eR~>siw>C@NZrbd3rMrK3 zDhf@C2xbv?ycu}=&-?Gq>Wl(4FH^0jeUIz)WioC)$RNYR_Ctu}z2K+zl=mq-leZW* zPyUea{qJSj?z`9B-QV2L+n)Wu`opf<e{cW0INQA4{da!c{#*Z}%m3FG{J(nfzC-!V zrX6+5R9a8o-^KlTlk|6&x&)DjBFh;2Jo332_?Kn0OpfHA<9e87lF7`fmnM$U3@pMH zPD|MT-C|;BFza~0^7R0V8siuCH#0RZGuwU33%tbn;hutrvIXZimyP%S)jeNPeC69k zg@(ZD{|n~6k$z&3IoXiwuvXQknEL$x4(eqU83Emfp6;AV|JN;<KK0Gp{V!!oc3E9z zZeAf}7-|xF@LuBc+3P$fZL{LB5fNN<>9Isr@)f%mCEF8ZY8*H@3$8Givqu~BU7bJY z)U^I2k)Il$m|Uu&b00iB!5<Xnl(Dl}$%13ze%7M7Qx-@}R!Ft&*}Gu-_UQ`(9WJHR zU%U7I$*cz#H5<1Xw<@Q}y<PJ)SAJOm1E*=PwdNzo?VneEJ}IIVoa?8zxIRqh*1v2; zsr0uGPqMh5PSC!$Mf9kTbkE}cj_E9h;coL!|EQH`VR3M1@|00xP?qm$zGyLr@zKEv zTAV*Z+7b+WC-S#Bb}-DGDB^1so$T{eetD)(Reg2Py1sVx=tlQQi+gVzodUeRd2sEG zo+SA!&OkD?e(TNG-wrx{zkKjvpn9KM^!ALhe&P8yBh$X;It0x*Ab2aQ*|CHD?Hhls zmEY9m{`Bn$sdnJou4d2?B;lfwm{M6@Gd<x&b;Ty`b4u%(`wk1lur4n2Iv}c~vD3LO zox34ZD6RgjH0#R>tAw+YmHoc-+4^zLQ<Ia|nL73RC6<M@T8j<)-n$+?{VMt98YZb2 ziBwtlxy|SPU2{JF|J!%_Blq5Jstl?5zk5A@f6@K_i_K@h|8G_IX8p-Yb`rnDAFe3g z@br(8zE}1C(&weicW=>*oxPp^X1ke$;-qg3l82ka*H`~LxVm2Xz5Iu(jJN9Fmb2&Y zaV)PexY6F;F8Am70`9$kud}b;_w)FJvj=CtGk<Y)b$;JINjaWf{~rF!&X?aSnbRB4 zA~Zv3KYJAW-RAJO?*e!4uHRdK<MqB*vL)8*|9w1raP{B%KaW4um-AQM&CAv;b~gL> zKEc8@MU=bY(#QHQ&(0oPeZBtM4|}Uy_j~@A{@KHzZZS{wOLX*W<v&bc^zZ*G|2^mT zy0^yiu9*fr0hgGMPd~11KhH?N?DbLZ5C4Up1TJU)Bk+ik$B{?a!co(UqgGpPU+UtC zzb}M!o)&OyDsyZJX1QeO<7malv4j7Rzys?kDvkd07sot}6>y2O_}ZMo^5tc2{q(A( zhZ9VEC-4XHENi(gUl=&!Z}2ho%PNk6Tn}V<cIcaFiEcYSKc>?%ZTkO8OWwnFpM<6e zJ-g2-|3amu#jJmIhoImSYc|p4O;1e10>aZX!={TeCa%BP;>oaN65|Y&3yv4voh^7T z?^D~Rq7}#Z_^yEZgGuKWs4PA8yW#LlmfZTuvbVzgHmQqG+|+A(AuE^h!y{IQxq<!v z)689Lmi2v0QPcj{lJ@7TwT0uF29>qfS@!?i#@eu0R`R~xr)8cK&Xrsie$r8KHTm?O zIaN<y^YJ*>)QfH0e^D}8`SQf(_nZpb9c6;GpX@DfpOhd`k+bn^ht;ZY2L#$$wsX#T z;K_42p<bXR#O1}|h&5McZmOTf7a+7yL{OmJK=x6}qL%MpX02j<`sLnn4W-8kGrAtV zk=K#`b|lMuIY)D-`_%UapMv(QTX<buE+TWeJ?Dbp>)shU90#1g-E%MONEgoX(qt2^ zIDPDu%T^ti2X-FEXI@coEIIgO>52UNvJL-Edh)AeG`$z7_gHq(@aN10DbxS|a&B5~ zC_Tmb?RSB~lS_=A{t-~wvv|UKp8s!jUp9FAa7=Elx2R_D3+CCDDAR5%a3X9;hnLGw zw<|(>3cP}>=6S09Jg0YcfBS*59-(71!_MwvKkz~B+=+8~vBH~JO>TTMoGaeAW`gLw zz`rVWg<qMcU!Akmf5!Lvlye7vsgzpFDhPHlynp&-_00tz=4I%v)sW7T6tsH3;?!T0 zg<775sk7J&c+zhkIX8DF-|Q7P>NOMh?sBcP;62Rr>Px6#YGiNFc2A2Gb;B>SHU)f5 z;pR~i6OQ{V!x!Mu@I(D5!>>2ptcL@5c%F1`HGQqNH;n(!PfPa?7Tup1|JHxswPdT6 zS#92he8bpxuf8eh-hH0GWK!=Z+sH0G>%<ikUFTn7*_ZmMA^BJ1qR&j#8m)_+iW`5r zI2`wBnsMIYX9mlS_6J9~KbSQv=9p~q;Q-5TkH^nen~UFYH}YZiQx@zreASq{YPH2d zW|ch?8Be*X&GlTN5t9F<JksGtTmPcD^-0GzUF!T{esrd9;IhaLMi#+zXL0?g-P|09 zQ(O)h{`D`O6s@NFOHqL9lwFw9hj|=RCJ8L8;AS`#X2-oKQGiwRv&p{4+WNLqZu{%L zgf_KBcBI?Lp7=VeUA@}VZqBCZhXik4mO95#I%WUo)iX9#KX~<}ee=JsSNGfPv)*U% z_iS4I+oH89nmcEhbj0p^KR<TA_!Fbbn3mL9ySw+;HZGWRC~%!g?KW8-waZgx%H_&7 za4vNU^@)wFS65exU-2xX^Z26Z_YZy6r6|5Bv66k5;Qil9;pUzF-uvTOmhR@upY64y zVa-Pq9{oazip_KOd=c%qX`OER@|M->!sFAPls2<no>(t)(vo-M^dzGjj~Z*l>?izN z$t4yM*jf|O@7j{ubFc5qX^*BN>*Ob_hb0?kUOrWNC|)}GL74B#xeV`r-cYWV>$4GA z?!s^R>F&(E;)PAOLKIKre|Ep5dPd|vbNb<Oi@iPqj)A8l_oaW#{KlykWU<j?f${pc z(dAQqpQ%bQQq`PW|3uATmXTCklR{~A%iERf<Ce!U2Ycj2zW$N5RyKM6+FQHaqYp`6 z@0<L9Z`lgn>YVd&en&p9QAs+klw=@#^5wdOyB{7MowhIS1W%x@=$iLkN=^Z@*e-gM zhUQh3Uieht)VDMGmmQ~@qsxJlzgO=o3N@^sq08~+k?n<FQ8OO@|M|3jmQ~AR`!}f* zZU#o3v7TMO`To1++X?>LR{H*(y_@0g{s%(ti@(W63vP>4NEH3j?$|NOO!e9_KF8nR ze_vU<>;C)8bq0&xRkWY};w`kq;~Q5f+r#xYH+6_JeqY1W7kKFIf>}$}3w+VmP~YOg zd}z(wrAnKH&Z?$eJ;m~@B=%Dt;{?I_NAWejTWu$(1uwB(>SOepO(8qz-O9)>N4X0O zeU}@sTz_7xcKOAtPc1v;FMH^$4Nr(#tn%&FPc{E_=YN+~IA~7Wx5fR>l9;TmS*Lv& zj>^1nddDsqvF+!@>B1he;eyr6y3K7^<h+99x*TfW`g@ut8FMMI=uI$h3v^JsvU<wJ z-1>LUuXwgSoueXtDp|y@EOO>I7Po>Hp?z7VGfp%#JBxo&6m1AT#j18nWx0>O#d*G8 zA_7+L=Ls6Qa_$h5*IK0@!T3|G<GND9i7J1M$?N_W^&SnhNM4%vh3y{4#PVq>Z~Yyg zGzWVhxvlW2Jat0T&R>s?o@&|Uy7_TI%VY&v{{#N@8EgxFbr(g?FUz~QM*dIZ44#&M zo8rFx3*lL}{nPZXpZo(_-tBjGo}*CUTHmhN5h#>UujptZR%F4HAhoC<D|Y>gUa9r2 z>R%5yet#kTcjcyqaywqhuQm@_ZCkM6|1RsW^INZdJFu`Oc!?>0)8yp6KeLX#ZrB{y zBK&GO-@#tf;_muob7YGBKd`a1SY<uEyf<`ZfuG>|R)1~vNlb>`k$wu@^Dk6AX!^_d z>&)S-J4ue7r*15`x#*ehtVpE`>e-38*K$^TbJ}|Kk6F?DwsOY%-)3y*W?5?aMIkGw zb+*!#w@s~)`d3(6vsT|^JrnxG_JeJ4(Cn;v!ZQ|s-J^8XC_N_pem%EQjK^(D(W_TB ziL+^V?VRO*<9+W}9gi~?^8zQo3jeTf^{duOy(Mq<EYiuX4yaXm`@X&E;PRdGzC~WM zTeCf5+22&I)o~vJcX6<$RdfqHxHV_GQ{8FDoMR{JH$Rwnr)tA@nUpWn?#zykf5!gc z635GwS?5^<<ma*+O?+@r*rqq=Lw%l=<bsx2EuOw2m$qp?c@?<+9`kQKKCNe^os*}O zyvVwy^#AeKuc=~(*$w?JNwvJFx~BAnIewy<iiu;UP{ol&s`IT*Yz&y<*EE|sH<JI) z<A5jm!9S}K;{WP$ToPi>k4f5icb;(b2JIy$%_kgcSd#PRmyPSpU#Hfv$xfSQynty< zeObcAgMr)zT{^oY9Z$wSQ2co)tA_v2;@|!2x_((|e0rgLdzbjefSsIT>C)d_mG-kF z7PKq5R4{opEs)=^|Hr+nMot@V7N1<T_Qn>=*?YyKQhPVvY~1uqRX4HSuxGl0dBR&i zt;I4fj#39c=yE+=({Cg5lV#4w^aIQJUy3)_E}d0x`YKHLxwf9?w@K^wi!GSWCfu@o zrAo!w|1m9(1lS&$I9`9uGSQH)_JeIbL(tb0zEvr&Dmy0hWX-o<vE&q=V+Mb9+81wE zUfI3ZnA>B&oeP;%mGi}w|IO#++m_VaV?A)qn}1K)`5%Y2%}vYNmz%X*>}^_GR@gen zeV0O{gV!Xk>8;PaW^(;lNw(CQX1(8eul?nBpPVG3_R^$GYR$iOD|bqj%$8gow{=p< z(uHP=!VY^#UtFEJpf}^1$vK&`x(PO~Mc=Ae=zgAhnkn9L?bZ{2zQs?yk$rFCoJk`7 z=X&*jb5^I-zKeXe{)~fy((1nIKNdl{<r9)Sy;|q2KXWo_!?tA~)av*6Ha$J_`_}>C zHN6LKv~2X#NzPvH^g~i(!h(8#K|#%vi3XfOxB1ujStgv5;Xd>3<Br1HhbLE@+V=2h zp!QkU6940iWKKIS@ZKKtAxKv?B$C0FUwz++9fv3SY-To8pL9E|tDvRKkwtkA_X(D^ zhk7#<>}U9uIdV)Eyu~{I$bR-e_0#9_?T}+<x$yt|BF=4RlnNNO#p-XlBW~vPnB{ly zwo`Wmck+u{I4X3sS<LKsQ1*4^7RL_uXO%|xzU&q8eI&4~<4tWyQpqKYn!<B#i+{vP zo_g0P7V5crOT1Q<O1kr!wRHwEO4BUoU*v3#X7SUjXPcqNt!^>1G1rBo>&EtjR|M*J z96y=cvCzM4N5S&>4^;R9{i9Y`9ao<g95i9xwtZd8Z3`y+JzM$h!0Nxv-41rojBan` z`@HqrZg%%Yv(}x+nUZ>XllPm+I*Xm3+|*0%R8<aoBlv5|yS)k;xyzHUY`edu-6GRD z>h9I;hO=*c)k(N5Yw+9pm|bP$g+*Scl-B=B;aOZS81ynuvs>|F@tTAqLhEhAoKk8n z!#0O>&9XV!Q;~VX_xrS079pLc30^4{ebbp7rz}e0u-&3?K2xSWqiK;y+nS?C^3>wj z_5ax2T5&R_^q9jRxf_1bp6hcNCoGS8vd_wD1AAYjoYntR#i`v4tbbqK?h07XqG>g2 z*Y9r|0zdX0uQx0Uxq9hF_)m*Z-D>Bm7O$MZ?fBf$<nNa_m%6&Al^1qjG)ZZnQkUFz z(LS{`q(&oM;q%sjxeF3}Htp{^sedEl?VPqp5ec8XQ-AWghf6G%4E~u=nj`q-zWc+T zqMvrN&1W#Y3)dD_^=sO#;G+D*_}i`d+Q}ztwt1g?G39REff~koEr*Avr*=L*D6wg> z52KQ-{Xs(u@q<Z!dB57Tb6ogdxUxv9FTelS#p#^O=J)$qbqii@s_>IlE#r4#wYEJJ zSG>tQUF_lAhMXCzS4w9vU#!z$>vFr6yDzHo%z-aoGXvMZPW^Ikg0$Bb>#7IWuYLSk z>0L90r}tD*$VS@>yJoqSq}FSjwa$50(Bc041z+p5ea<#aiq-$JzpwwhpYNa5pVu$U zMbC?ra!uRYtnjJ7)_&pZ%E?-_%nJ3YotaCk7u-(#|9sIY^Y6b7%D<SiYn%9e#&7yJ zmTmiVmv3wMq(>4z9Gh&mg`b?{d^J-*=#S%d-=40ddCI4%?wp)oU;jC6=30@nd+N)- zUF;3o$A8N6jM~DqeTNgKq@KPVZJX3TW$LU0I|}TlP2bUAXs=*$__B-6Oy8TI@*=mX zCV$it@{+p~=zjP~*4_+WRqY&qPANa<0(-ZKAA(vtY^v+stuLPRyRkx6F_@w3z;d(l zuw7=^WnIfV-kTg1w&}fOcmJi;H=AGAP4~Ih3+_m;Ui^qxV7<esdzQB0M>n>t($<dS zFg~VY%g5|7!FGp6p+h|LiTj^lm7a^}(6zbL7vLqn!qMbb^S=9TfwNdTwgjJ<<2R)$ z_f*4&C&j<Aqd(l5eD=~4?Mv#OiC)#M3%0yC6IUmAQGDvJ70a%#k!p8c^?6=~q<Gw% z4Yx19W4m2{*{O$*vHMW0;kToT$Ab5LJ@sEBnqAkk>|CaQ^v{gr%6BJS3;%IxX=&!I zDJy*5DcVP>H)T%0!5&~Ew9(Mm+Kn$Z&@Jsy$$^cc4!adAX53?#(=gl6=g;gmU$uJ@ zKQB)(6T8c*b7V6+C#RdBw4va)i}$#<38dG1SKc!Cblbp-x&Eum^^S|z7QLLYQja&L z>*CA0%3CK*cd@US60@cJhWml6c>xEtQkMTe%jqc}B@`tY;dG$J@txpiw}?x|)AK6# zay&8Qd8oN9%e$gGEyls@_XZZzvP#ESz1f}1jjszYdiCKM@1>jF>YqIr{Hz!E{fS-S z^^em*dI9s5w)!{E<z-(O`cAOYE09f5Kh-AUv!x;Wn#<hKoFbc`+pAAVW*nWs^!{G_ z{BKj16-_>WcHKuk^DlX2lMf2Z)W2ISP^sy+<(>YoytC`iSuKu}e;%|#>0q$TDdEru zQNL@qra8num{MAKEWUGXXGqGn%QxCJUoGeKxtMWGeW_D9k3eAGSykSrVYe0E%*k&$ zETH;^&;4b?+r1ACZDF0R5WQz+P@4IH10A=dXB!*tIHdUY?EJ_`E7pDe_ZA5()v)KR zmvZH{+xce+$6E!#kIUunbXG;kJURb!eYkgspy^qk4l`k=;3>}U<h&VqokgsqXR*vU z8sg+}!g|-664wXCOGWH|yH4bv{79m`!sPXF&Zd8yeHrTPfnLYC>Y0CNFW6t)C!70% z;m~Ub{evwXrW-w`w+hSjJ~>u5`~GdmXYT}7vDg2azb(gO_U63mnLDcWKb?<IiHqkE z(^^!(d-S>HlnwVP)s>iEN;KZi=LpC@Xy$iZgYl(=ThY-yn<s2OZ?3$+o^w${PzLwe ztlz?uGiR_BcHHvf$<17PIyOU0V<wB>>_v4R3)=O1|495?pZu#wVE<PiA%_H)*PCZ& zKbtorMg9HW`U_989xuGvn5rbc)tIO4#OzANUxJTsf3gWLtL3$S*|p}xxd!>p!<-Gy zQQ<0)DJR>lCNFv~a{G{V?>oB#Egh#bA{;vN-!6Qi=V2fpQ*OZdK*8nLQLA2|F4pNW zY9GJ9zn{MQ@|m@-8m}>^t<?!ydR0$CylUoTZc_u9k4A4fnzQOva$|Z$GQFow?tWwu z7v?o*&I!*c_JJE0SRCtQ+3xX2BWUxNLP5*Wblq;{Xshl^b&pabSaRheU0k<2uv%S; z6g#)JvERmwuO|Mv*1YJ&n_R?aJ@uYtxq5lLdf`QP75jxbEFId{H-Epj+WYM~;jNjv zTu0ni*%{<@`v*<#S5B_4|Nr2FhwqJ`4@{|n+yANrcPusfwXJdAv$=CMXKyPD>{(kI z?6GpjDm{&NjjQ-hFx}KY`Qxcx#m#Ro>L;2XTVU#z*m2O-&uRbHptma{l(ce#|9{GL zn4~E!_h9!*`$wBw_r4E!e|WCXVzZu`3uU%xT-d~QBlJXN_yzfrAHL>Euj~EmW0=_z zCgyC}BBbq~E97$g)wPS=3S4TJIXiA#T(nn0Rjw<@BB@yA_p;3<jz-5WUts4<`o6|f z{m@)ym&gPD_U<>YE))L{EUPAL@mT!N4-TKruVgEKb<KQ#_8%`tTSCL-!fhtoqDqr> zx;``A-JreXf{I_d>{H|4%=?-ip1M{hP%3)rR-)zH1hbp+{=q&r5}W4srAnTZn4B#x zRj=k)qRKyG<};_={ow)b7qmJL`b!!f)_JBd?NCa~rOBt~A2j{ltIFtiS%K%@gLRQ< znO{9(KfG~t^!*d+6p*9LsnmM&!YsB@=2N!8Z#T}1=?FO(mhHXeaP6uOR*i=fA2eR} zH&oL}ys#(B^NN{v=U(;aZ@0Yhb^H*rr<7G)#Z$1pf5Wt&>NN+8$|C*D^{o0dR&Gx2 zd~_jRRrYwMi)Z^>uPZNdB;yN?pFH^IrlaJKXYPN3cm&=u{tlA$-oWwO!@77S$A*QT z(&5{!vS&xm-R9|e%&F&|M6!|>Pe4_F0L#D18*j^YzdhV+zW)B7>G!H!Z(nJ!vO0Y` zUc_RWP}Qcz-1Q>*Jd7#R8mt!g8JUOfWxw~ar9^f9w^d#oua?%ZJ4;lmPMVYaf;rM_ z^76VHmo_$P&wIOfLE8OgMLaC*do`EUoV|59edVEW1F5HGi|^_R?>t&MTRn;Q&6?JK zjzvdg_6Yd@Et~UT_W^g$Y6+DWa%~UqaaSf6MNg1?bmW4owe`ML_13*_zAxG)b(`h) zUB3VS-`zVHI5DmFmQm)Gfa5QMyC!k8CE1BiblcvP8abisr1`YzI$omF=Txi+Gbnbu zHHq_bO!TV0*dr&Nbhzm}oFZSB|2Zy?ed9Xb^x0QZV%G7m$d5|z=AL+x(R=&Gv+tgs z4BsjH{L?-U1^b+{+rO{1G@JjVUa>mO`q0Uiwdu=Qe%@r=XI|u4dU&yn^|V<myR(cH zJ0>u=XJx-^X>ULHS3=d}j>`nu6p4qiJO3yZG)0^dQCB#4`9!{Yg@DVX+w2>c9?dVc z*v*o2-t}z5>6uf%xJC0CKD%9&`#e$hu0=@H9v=P(Q<X|}#oUH!C(c{S*B>6s^Q^CC z@jZK`&gBBXpyJHWlOIT^W;XO_e>%1(;$K{qxAdk3mO*O@9j6*>lPDKS{peknb3xzY zy<LIkH&L!hCttZ=h;37>3!N=~(@eTvF|DU*Z_?hLsIm_sHd-J4N^G>Sn35}4yecA` zZ^Ev#SFf5(*u6PG_nekWV&%N$MO}5>i>KGryRdOGxuisGs?9ld?Qo!q0F%nw*M>|^ zS2(`~o=93(D09y0!F0o}Cu-uwU&|SHf9P48el_LsLlwukS&_SsO@4c(@1g7@Ew%ue zLr*TV%zx=JwPAyUOjlEe%F2fx9gbHwYI_@Pni4eUl`qrb7T;^e4_Q5wZf{$2z+FXj zV~N^fzvJ~Y_LfdPcT;$|^0YapKB;gq1^HZ#kqvp)BKt7$VUtSg>FT<fdnQd0;Xb+Z zs`%7e=5tDVkJrDcdvre{q4&5m^GCIrT?#h24T;zE;@#A<e(2xwa_$y8R;3WIcVX-c zjaRE<3qH%%pBFNANs9Vst3UaHz*mi*8m<%V#oI6YUy)W6s(*6%WZTo(0den`9AbWU zO_sCh?mG1($o0+qZ8rs+Kex)4wsX!om(Q3GZGGpZ!Lj_6y6;48oqU;;HtA9CL=zLC zyML{7Q?w3A-219;Bzmejcz@;xsWpF@SewsPCG9+rmb%Y#O`d^z?~k~o`zL=1{WkJW zxBK=+KK%0(?N9~hi=2h^mU(Leg5MTD)Z6ZQ;m+wtKc3y#Snhoz+S*_ho5`nwN3X>t zuNS+=glk00B+uwupKi#M?#20KbGGY=l$CN8vrla93*md{S^3n)C?@`cE%Wb*d;0Xx ztCaEG2opEkymg`zKUW*i+x7)lA_QJW9CY2td9uET^Y)#f>q|H0RJ{B>%d6h(Pfp<a z=|8VNx|Y*;Gw4+4pV?1O&B^5dajxl1qqM?4F&{&YC3Q1%f&y<#?Ko4H{(tuWy^|}O z{#>w|d938pQ}<18E<NJYc@}Tfd+x)O>I&gAdT$y8cZVF9P{1@f`U!JJ+(Cz}X({JQ zvUL8lDayT-E#co)eRuKRcL(DPI)!VF&#FJkC%7c}irA~H!xkCrf!4|wmigW&?y0rz zU2*7C==;s~Ue)nO)c&_F&-v`Wtlwb$tXI}YA3VKxU4P}O!bj=iDclqGmGJbP-yghW z>ldABpRWhvj$SBiw|H}-El>N?iaPd~WJ6Jj@X$+z)6S~wR^VIc9^SwyB)dAcYmIS` z>|f)J^@hPlPZyjylOtKWt0eG2pY)5RSA48h3tFyB`Q>!8D*Exmq9~n)@{cD?bAz*P zJ$_MfQKQ2y^K^~3OybwK4lxY5|8&21&TgHugeBAC$&vcnd*yR3Cux^jmHy0-a0xl8 zxnraH&e?0CugEyAd|6&_s#4uCQ)q$pu05&U24O)5RE+A4pKZQ>c7FXf$2ly4RxE4x zPcD<1B=+J%K|tN4zkedtCT(VXa_~ffM7`LF$zBDGamC5ACf|roE1TxIRCt%uL!JjG zwp?G6HleApN&Musi7Lkgce@`=w6eM?A82uLg`f!EZ54^YwbHAuRAlIKwbzDC`*}Gn zuGS-~cDk|DgO=`uFZF!p>{efA>oM7%4%1lM^l)j>e+@>KkP5F&Yg83Kd)6OOQGF0` z=&8Zti=S+k1m;YZEiAZkxLo7n;d$>kEw+D2=;3i*^*Qz2`OPz}&uWTQU3N3pPqfm@ zRP$kToOK}O*o@3f=1->$9k%T7aJnL8+k4}Bau0)d!h%;?R~RNc+Gd@uFRPuqwUl9R zw93R2F0WhjPuWjyX?e@?aq@;fC!5phUK7mLKWo0=(^HkTo6qxL$h9MGMPd7<G;IDg zYstdTw-u!qWY*-|REW2mc3VD>!`pS+t#d3Vw$#X8yRdPF<x}0Lotbh%th{MIO!f0G zzES<m8K3nu{?nVu{u@8+RxYTlV*F7b>l;>kD^@>sf(efj%d$rc3|aIyi|tSGJ6JGl zL+PE6cfT7pE6$zEtR!2lc8bS8Ud==9m}yOG$d4VDJNne0yuUP!^-%4%CvR4q?YXiy z_0gS!1_sLySQ+i9u75j$c|pUr<n0w@Q|E_D8b7<U(xH8QJY)PldFP$R*9=r7jtF^~ z{;t0f5NL7PriyjmGL;XmVdV}ITs-Z%Q?{^fk#*#VnJc${uf<!R9Rk9yzv)iDI+;g* z%{7<RlKRpDIv$_GZ*v{GF#o+@y+t+qx?jg1e0uff@W-#3KVE)`f72Ve<MK<3toi$@ zqa(vF2e0H&Umkuv{r>#9GV$}x9>oXv*I1XH*s`kfV|^Fv3zPad*EiSfexFPgpS++z zE`=%DIFVnW&OP$q<kLxN%f!}R<@;Y)yJ5@wiON35asv(WCR^*rw;Yv=Wi*SMernq6 zyvpAh&!?&xY4+r=*J$_r@qT02g!3wv6$J%ChY~KC91K-h`CgN4<$-CJ&-tbA;a=n$ z#cBO$3HQA0x>WD_Pl78R?d6T-D7(*Cs>ATxzw2O2{B#31Ax*wz$K1MBU1YAd^GP)2 zH<C4YbUm5nM9G1<3Ukgp`6+Qw{c&%3;|^7&j)wksUoP|g`DZVqSn#v){Mtu3-6pZl z(oLm>GY(A%W}ha0;%$Sj-^wK=M>hEVC|Fc`@<>&|b%tBd?T*`jb+7-w^r~QV%i6Nj zp=+<+V*UR3fV6i>Jky^@7WGE<2qRw34f`IKo29JNiJzL6{c(|OgYZeMS#1yXItuz^ zz2C4iUfjE^Wcu>9lSgOw*lWJic*(HAwu^toT)F?3malD?$S-_LUvjB@oz>l?>krl& zT=-bWwKrOMg2$%^KSXVpu$ytQ)i)=XM%v3Id`OD!6~E!G7k9iydD3398!1~;`WRww zI?aE`v#)=TRPrRnPQw^O8<vuePQj!XeTq@FpPd7e=S{qR(%`E|Y;^I@hc4{1FLTTY z-sZOY*@{W+Emt!Ww|-CfaDL^C*ms`M`F$2?3$Ey`JR;W<x6Edq*XffJ4?Vgub8k_- zx=w+dvHDNhRg328OB}Z~n7K7kCc3-)?}5TrtBmf7cQa#bE|hI3liK~^&HOb5+Zrd; z*6)}X5gw!XOX0x9n1+3&=QeAtyCY_MYU^B&ZRfW9mugzozu?3arJQn;PX{IL2OllS zNS`mu|E<y9_sNna=PsP=_c(g<o~6rf`Nb>VJ8CK2W$&D+<<-C_b$B;}`kyy8{QEY= z*dEB27IJ!-zUijv-hWpn3n;5-FBIw8W9l3Ab<dUKy9F5Zw$)Ep+_<BCdPTN%$d;=w zgirGwbS{|rfYa-EhS%hHWwmJG$=SUz#{1TtE%_ezX3Oc{TlES=mRQukowZgraNW8| zE`?W@9u&B<q2b-Sh?T-t_rtrlo)!C*l-$xFeL5uX$f5qr_cmUA$kMo0d)F<SbatPg z`Hm_v*1jcH`aa5&A1JG8Fn{ATmy!GSG{N6+zUa@)S#K)1${UUxd;PxRKsMXNYl+)h zCS8=7YjSL|u8NXRP1zZ}=3UK-7L)fM2#MG@%P-`d+D9P?W&7C?T#OrS=P3AmOImt; zo6n<(-_LC>`M&+e>{WBxZ6(;}cK&B_t?Oylm~F6m1Ltq=t~<=XC(l;VV&s~9OhuJx zlfdM+D(>}mBF>yWuN@3cPKGa(*u}YVbE(=wEfHsPMa$}0Tb{WZ{#o{$*Z!k|pVF%R z-GMx!E$=o3@aWpyUEYusq4H_6gQ1A*4W6SL_Dnvdq0fEvf@ck*h_m|M)&QQlBI0g_ zB|(2b1@c_&xzBTSL+9LeTt_eX)(MI@n;$(Iz;o9`+}*Im<Z>;aM%$vNz5zV5XS~)5 z;E7%G+}*GwFq-A)1=svQ5ohtU`Z7lYtR}s7H#D(WFMaev!alai&sCM{o0ERD1n{`t z4_hoT>u)Uc(G4>`F=@0_YG!?kVK`b)H}7m9&+})Y4M`EZubXMKeO@GSYvXz?k;6@$ zo9|^rS#>2gn)FsoUm&q=*~X<BZQ3c3ZAm+nwtZe8vCeHukjUYy8|FwKEiip_raNgz zkKr|jqZ@kevK=ib6mgb(Iz^*x*}nScPKF{Xr6SIgU&Uy&U5cK;cj&-x%Z;i}&mTM= z{`?g41l3~m%JgTJJZ_cTtC>ACJVKa-R>jVq${-}QDSfwgXhVw^BWpv8>*<9{8HKnQ z?=-Zy-kHweq486X!6V|qm2-?98Z8$YIX@qfH&;j$yRw?uBV*e;K_;Oz?MX@whZd>U zpWVgCY3%u0`;Q@mP*#ySi^>$|@19QYrZNk?nro@9@Nn`qKU0N;SN9xe_t0R85tvXg zF^)yFq2;L1H8vF;0sr)OY$`g>?g~uU5Ysf3N$8eZ27{2*zT5mf9uX!N@4b<F&&9~e zy*nq+!Kt@EQQ@J{)tx2|PKp(h3J+hMNyu|>s#n~~Jz>KI*=n|imYV_@3?2~=_uF|n zINiJ;qp(nW#y$pxg;KJgnS`D_snly|DdOF#q403exqn`aoJ%9GFsYRI%=c%V5TMHa zjDfS;s5gwwW5sjM^SmB6G|VeZ8(R9xbeKFMZY|1kaB4T<W)w0LT+T2dKs-~jq2=hr zwLuPt_S8$9W>Q(Rba9Y_ljU|ZHWi&&KKoM~oEEOx$-pVzXOhdn8P4aS5qt0{gHYC$ zFjkKhn<Io35*=6P^|*d4W>mRS=AFePv}(4$SLYOFp|0Ppb0nJdl9o2K@OGZ%_K5I! zb&^qNmT;x7gVW}qWCy38Q?D^{-c^~+C=^xlc+uq6(1!XJKdZjxR$oTWs|)x4F+5P! z&@wH-mywfuwY`*sllLK>2^ZG>xXK_D<rLA-lIJOBtdQtg&Es&$O7}K{&@M(!UD@4? zoOikYDKT>D)|%{oe`KY4?37QpAAPC~<n(y)Zst>Fp{PZ++75?4ZL>FbaPpSsXY`oi zuU5_B;Iz|zM~Fkc)9%a#=l-tt^E7K{;b-uOxGQYw;B-9hP!t2_-DkTQRpvAwUVL=c zY6cY@vqoNpho226MK!ee1xGR~BwF4-&f}4B?lnJ$$BHuVXACN9%G_f%IEfvf${-YF zbB)g<<72$cgn*w{QyW^uuJbB9WM&ewTJtB9LFkrqI<v=*r%Xao^|gB$Rcg*Pv`jO! zadL3F9bPHY(DF3?*&mzPJ1@I7w5&_ZW8icYRaoeqd!Av!hExAa9GuE;vNg2qv`k|5 z*ukh0Bdn0P^y4PRjf^U5jP>&vIDejh%&xK}&q|+N<xAqKPqQU+^OX3qFL?dC^|$w6 zn?$>54ue4gQ_Gi##<J~dKkL~l>ZO#WKd(32-QMu;@{?^3|7X2mubVXUz4(X8)4pGS zKKbtV+Nn>^9b0_Ox}@^(x^0~AnC91-2H&~(;oq*^OgpoLQXb0fVhXnt<lo36?9w?Q z`ha7y%HD%Mu5m2RY$DrhZ~T3@n`hTDfpCYj*KXy1KbX7W``?fMYYmTm|8m=G@`U<n zx$@ha&Hf%a=N@r<?SlSq%Q6MtZG7x&;C1r&;)6Zs{FVPa`ZIgZ#+7<68s9vP`7y6| z`SGA0f9F#&*V1KQuj2oo>1Vc8Y8B`6TWxt-@x~@T3u0ELb<Bv|`*dMan#uIm9!?|i zI?fj}x}pr7mR+6gx8%$+Su6gEWvcDctg9AEoUJb~&E@>`W7YzO<joroPCuA;OE&31 zzM0&w(+*Fzu<sF`xp^bsG`4G*Ja1YVtXWk{MVTj@78btX*0b`Cp5ci-_R<F~zYCE* zv3cdUSBce8G4s`qEw|aRDXiyw*W*vc9oyu3&My<H4V0Llw%qjC50PEfYb54Rt2lk+ zhmOKu7DKzcy7iSp67!!fS}*l@^PJzi4DC)YjpRI*Zh886<Htz7$I1tP=!k!cOstu< z`q9j!nrYgpcO~XOy|jky@#aH1^Nf!@|L!<r;g;C~^PPX4a`}<cpW}X3;owG_tD<Sq zKMSV%u4T}>vcO6{N@MwZCT`P?@WfWDlN*B9v(4065}+<=$tpeNS^Y82zt5!QLZ-5} zJiUL^V&Nj^>1@JTTONBZXc6=HqvGIH`QG#}hwj^jLc2~oag<(+V^Fx_nx|M3Abzm* zp<}Ge{+f~i%l+oe>}&HEtZrf}4T@)xyy974m=K_T@@S#s+?4suIvV*E!XX!amF?p4 z31ENvQ_)fOh?pZw>4azzfh+ZnpSX`Ri@tmG>!CyGvDa?QS1Z>u@?42Zw&BwWuw;F{ z(BZD}xx>nhQ9{}Z0mnb9cQI#eU$VvAOk;sR2kVsYIi?&dF5WgZaNvHa$G|vi@<O@e ztPBp%pWcx9SM2A<`e1%(b$0V#OZ{)lMbEBk`d8vVZR@cMmm2NwZZdfo!}NP+SAE;G zrn+@KiIPvAd(Ak<{9`AVqt`>b@Ph?;8_tJv80%ko{%G+k#tZ43n|aSYe`GOVDMmBV zjyLyw>!*{PuN3C9o!x0*H`SE4Iq;mqs{=(vOnf2d_Rm;Wm%8=~JNy2ZY0Udd8;noI zPMLb3?3M57GV4_V)=SH{9IUy;^t}(idGh9N{e-!!d!{$s(A=TNaN}i}^Ya6*pDcP& zFxT=@zx3K**E_EoN~LnETO#IW{S9Eb8oA+5gn7{NNt?HAl4tfyS1Wa%;b#~(UxhE# z(rfv(iN#GNcBywml1pZ-t*#N68?%p9&`SJ;Qvl<INR9a18o%uYR@vq@>59+WUd&ng zC!FhC=FR$fjb~^6_pmoGNk4d}YV+#-S}f0WUafI0v^3t;x?zs@l_!@1EO*{WT`))c z_5YoQmOIbrd7M*P{#sI@Nb7Pw!->dui|xE@{4So6ky)<1XD@@)av9OjO@+5E*@)}- zZFGtf=_>XsuUqOd=a5PkW8t&qXO=e|*4+H5$Y2iZN?UE`hxJ!B6+CBqm@}zzw-nF0 z8f~%02RhmQrcCK^(^?rUq&b2c_OImJ!t>+oA&XGWUuk|Fsg3#9F8XVJTQ<X6+Bsj$ zXI{L~C$;daF$ZRMyY-pvn5}*Mu87|Kq6Bl}q}5J$uUM?%EV+DlnRM;m-!Tg2o8R`$ z>X^O8iM6w6k8jw$-U%=36+*kV-R!usCt|kilzB2&mKl~_ce!Qq%7pEf$ov%9^vj+b zB+o4KG}W`16wbQo<)TUU6R%4o1<#v)dj5jd>>D$?u8JgXUh!=);|&wmGapRndd2hZ zS*F?4y6)wa$A-<>V%v`$xVGlvI^HeIq@ylh*&rQxdF4HQp@_>@+%{Xg#YA1IXVpCJ zaN?`8>Z)a%!>94D%H;aC#=z8j_P;v{roO2*EQ`|g&c9Y<Fg<$gUeHIAwQY@71+(-l z%`#^3H!O?1DQIbM_D|h`s0}7_r|oXM1gfiCJ=Zi`(%I6$JL%cyjT56hX6boHGEYd; zynVc9ai-5pevZYO+wGn?TwGJ)6cZ4kR=<C0LdGneYkUhcH^s|12JgC<$}mgqJa64I z=11wzc>iP`NRL{a);#a$(?#jCV)rthuQ~T%<}zIyr#C*Q9V<mH%v?JE$sdu~JI}kG znAzu+*I?`@TCmJH`#gjB=0iV9Zuq2MWLq)w+mj89XYVwmt>ZM=e5&MT!i|KqYcqt* zC(Qiwy#Awenv~(fV;A)Iyq4Gg)UA2fs4@P|l=%wpx;HEOGksec@+oxjz9~lW<}bWg z8fYJ^(R}*DLLuJEwML~wf2on3_JQd^zBa*orU%VkBmHh^$c(EC_D;Edq?oPRa^3;^ z0+wIxIrb-AsukPSu5ep!xofn!jPru`KQoo02$s)DLUZ}+pSQ|bImY>13f0iBRML5W zOC_lF<0N&Z<uQ}b-Qm!0Z*PC&KXbm`e?7N~g@1RLRETdD^=G=j)Z>Xd;|C``=|#Jz zlm`f2O-<bWghQX<&7{R!1y*_Y-8wWu&$27tZXWmSqq7@#UfFs))N$t%PyMFHla_Cj z=<uF*?-7Sy<*f6J`&xBn%ns$P%$~N|A#dZ!bNsiHf}>bAA6>RpBca>(J-2)I!oK^z z7DkC&FMYg4<5>3O1%}G?yk@6`52Y!#n>IwA*|)Co%%f$y7<9bjnxy`SF{IAyk1zI^ zw)2Mw!=@|mmhvi{-qWE|^=2hk-_nGpHFB2T?8%xFmYCfa(wO$te3M8=s_UCm2@zoj zisS^QJ?#$UI=HE(teAO&PW+V0hv8zf?z{)WPetTj2p4mYS8SL3(zWvS&iW1ECl)g9 zNeaqo+vB9|d)e@7<K9Kq>$a3Ocy(N^+s&WXY^&$IyZ(mVKAUPszS|cZO@-(0(=Gq~ z>Wa9yUDt0p|EGWZtF-DR1Ft`gTdK3;_XpuwjKAzBo?>AC!IwJS|J9l7g1b|*)9ZAl z>aYKt`{2bfO@ZCA-)6Y#)j4f8{=Hkjo-g&j($tN%oQrZ|1U?@sd)ZT>cK!KZzWr>M zvNn}<S2r5$nIm*k$YVvaFVjWIMG=;d?j;2~zxkF>XMBLGRV!Rb_{_B{pI9H8&+Fx8 z&PxlO+7V#DcBT5Z%31NS(^tJ$ukLyN&gxqDdIq+Y8UY(jWK?dg^%Gd4bk5ts@zF99 zbC&v`gPZdCcvOlq7!;mz+UK#T$Q@e8T%U3_DRODm>BCna%YWQjCHN!oqEr3d7w$2q zes$IH+;De#)^@<Xq{GfLWq#2W<(rMgPI9)9YeOE(X8KmwB)C5*2wbwbvYIdCfXq(S z)xCvJ1iaH<u~`&-&gsYtIa9gxg4?c{k~`e`^4~MpGfVGOJ2yM_>mGqiCvMtyKa%8J z)SBRSI^_PP3q2<iHK$yBwW}siN4e+)i;<R>PHmEdTX=_j(aH1KM;+X*+$#QHx9;pD z)(^Ea=APkxH+k~YoeO>kysr<;m|uDK>eQs)0mUm=-#nh-Fpp~!zxTN_2Y-pA)~@Bb z?*1(9JnyT^8uzQ}O;^~3NsBdp(aiNVUDmI9(y77D*G1Fe%fv@I%;%O{JPYc2p4_!T z$6$WcE=||Z3yaf}HRdlm`N{j(C&l*9j6Zc`*l#NQTqAR`eOKA(#*czi!df3HpIpy* z;P}N^(p$Gw>s_!_a*G$<-YzpORL}j5VtZbX>}(IsFn?dA&x^iToUFI8?2s!CTGx3o zIlsY-<>kWoDA|R_eb-64^t&1BS@}k?UYNZ2p@q*)iFxjFWoP8;*RY>o%z0I0_VLKC z7a2ZhTuNPGlb5=lZJN9AfkRIUy+6)ytmL|tr10rV=2f;y$9YdKetEt3_~Wp5;+!WI zzg%?lslK1=%cLpstFpd1s*3gRu6Lite{6B**EJI=x^DlylTcyeYs13UpZJ1z@zvAJ z4;9<J-5zY5&HBpW!;>X99=x|<_~%!t|KvcqjN$LC3*JBREo0tm%--(Ky*h|-@8fs> zc;B7-Y&aomhqa|~B=ZYD!}G^`b|jyB%+Im&aGA!l1GiU}S;l;So_!~*Y1`t9@zz)R z>W@_y&XIklKE3fx#vL;bYyOT6$&p_!H(bBiev&Qv`RSwAF8-=yUh{cQW2uRAMav4S zUHqRk6iU1H@B3+KTHM|Jq2$f8+yf;JqBHu|Zc1-h5}a0S)#JA>hM7k;S?&hIiyVfM zYb*<bv$o_g<Xk9T_3Qv|3E%(9KNl?13YHs|@mbc_Y&l>#E911w*}@66O%p7ChS_lL znUl0JoOfFAnaaB!mPaS8VNqK?<L=`FCp4$MpUCh;g!{*u3x!=*Klm&x>=NCS7c(cx zGmN<_IEm}Lq~LRLlZxs;2b&J<bZ3^oH?zRv&&;<4ov(T~6tFC1vXOBtv{R6Ayv5q4 z{K6`r;DA}}jr#O+?FtjxX1x~>I9s^l!1Bt&!ka#4MN2XDW*nc~Fz@8aUn&OaF4Ij9 z&((Y}&1lkTrn!Ye@eCEmJo6PlNU9%gWz3ipvcE<^%Cy#udC|($1*@GF7EX?5={)9J zXlNp3e)gzf=ADxH%v!w}mBJ~rqRMu0MM#Oi{JAhQ=89P3^1_St(IShExqjwuUpbNQ z(XWMBJm+4wtu~yoo^g|#<;Q;J)o#8AD)&fL@2ad=AQc_K8uqyAqYGnpk+0^9F5alK z!cMCN=SKBLC|m7f3-L8P$@(D6<eTYC-G)$O_RY^6OwY~~S#Txf`x&-*X>k=&)@Grs zfyw^uU)xSy`k0wxC}pV2Sid~7=(E?v%&>#2d8Vb^{PXPKlE_UwOB+nQpP8CVot^Y_ zhIm)nLdDAr?Z-~0GdpayVCe19@e+_)_#*9v@w*ZqKd&&a!!bqPb?i?5-u}W8f~7aR zl)@%nnWWCUT=SpfGL_wV@k!}*UyOaPy!skqdFubKJ@NC8YIF$faJVAR&2hT^-89RK zKW+Bhxs}y(=;XSI1}8RK@Tl$GRKusouzbpG86A<?MSBF=`Jb?Mr@vX!II)3Y@ta?+ zAETbg1ekj2p7N<!y!6csbKTO#+uymJ*u9x2u%1iF{_t<XPj}fS<{x_5A-;Oz3$e3( zhXwtbN^BA<90LBTZg#!4V0yI4Yxa5tHHP|y``1j|uD`r-`?r;oObx(mogbI)jJtS0 zQR7iAx97r*6Pop%4_FGTmxM?){q4H7^kY<sKfg>#|Gta!wJyJGT>Wojm2&7UX7=Cf zcPD?1$<F1MIc5IN@|w$0EvYL%twW2oR?iX0%sjB3H+5#9hM`|;=dWj`zgj2Vn*Qqf z&AW^0XCCdfi|jZprg6-6k#AuA9jk<nDUX90T&HmV*WqpUC@6a@@brcrV}plL3`5I_ zxJ&07?NpXr5bQ8n)h}J8aeLMZW_y)cUpWffH*xp~ehbhm+nje{q0bR1tva3#=UE4M z1KXeMsF@^T{q%%$mHxR-yDv+&2KPFon7;qGP=J$Byxv7AYKgcbt5o2|maT%FTt_a? z+#T52RcY>`rZqib=?j-_oKhUFzqbEuT-e!_c4Kzz<5)$Pz{Gf6uHYqtdM#Q}U2@ag z0##yP3(Z+1TJq-(gR4`FxJRJg)$fuEggukbD~d=;r*b<8Ykr;~K2JmV$<7BtCzl>v zbi<|B_SV!UA<uf}6|6o>&P({SPV`89{VbrfNU~nLS^3iBkI&mwR!wi%FQud8&MbCN zxyXE}RL2R$V@?S!Tc2n+C|*j9WD}aG{2_?Tamw@kIueVD)=qiEf6{W3AzNTx(4R>M z+gqkRV^Wx9FSp52F3R%Lgp%9Sn(dYZMvF2{JeTCF;ljFhmtj~z{dv}25AGY+T~r>K zuIiYgEc}rxFF{d!V^GVYwj<A6wX{^eKDp3!geOjTnMa<X$x-!5@kz3aPb|91Gv|bo z#B;wL&n9$A&CO?3{o$NHYawssq%b8u(`m&&8Jt@WrLS<BHZ7c4J*9BFLaUCTobj{( zPiG#Rg_qQF8(Qu-I87_Mn^5mGEp5Mth@!XPS-s<iqDxK()RpJN{hn&z6c(=|Z+~La z%g98IsoVeVe8>@btAayEQTOUsMTeFraTkLcTfB_&WEU9t37Tm*@i!=i+!eM|QM5g= zPmDux`@y_~mS+z>WCSK@CA4(;CNQghsp(lFHf6%)kZTO;A?LmuI&*b${$;G+*m9-q zuuO&1=eb`aHD^pXn*6rGN$meo$JQyAW7u?33hy>>+bZmsaQM`GwgVGvOUx9U<MmEV zxO!cB!NTV}CMlAKm06@W&7I=TXc6)cJZZ=r%VPB;>ls@GM+hVT&MV(|4z#a&<Ik>8 zG(DHWY07M6GY1!Gg+-=}f}v9S(gO9;28*mdKVqBE@!!VHLCIG5g$`HHTRy|jdNom> zRL`H^>vB@%0psE6VR0+ue5*b(eULu?W0KVU&B0G6>gz2LUM`X}MPOUyq^>vd2hNo- zvoSj6s_d?FkGpW}aYytaPK6WG3)JJEuTQ!Cd)Eswh2Se|V=kY`{$ITQbD*{}{~7g9 zZ|a}Dm-OBLCt>?nwd*&er@nc^AXIUm{jVXH^N0Nh&u0p-z2wR8Tz9NP(w|*czIwYx zqIj&@D>rYSTP>Gvct7lT6S`$);Cqz}kqIU<8{=JPEMZ^gS8wq;KK}3P$GabQU%t=9 z%DgGd*UnJQu}jx)`upGM*Wa`1tJZ4<d%7>%cbBbDL-D#uUzg{_>9-H282MVB6O$2q z=AQAr|J{|W=ru<D-7_y5MaFsA&Z?apYO7%GZo8rW0(=*3htAFj?@e~n`wnYbGfS@2 z-|@JCVTw1u%^9Jsu9vTT_cALrQq}bT)w^u+8e6&g=f9R@+)c8OntXHWif_WRzD||S zWI4NKmDb!pXJ%x^O>!^ZTX0V=)|@w5_-XTf;~1r_yNY%!IwQQdcE_5~bMtP+IRCk6 z$}<1h-qk<vt*d2Soyj4(-P7!W@%z{{%WOUund_(WzKOh=m-4LRRXNLs;@`Jg*SS2C z-RLhVQf|;7HfLG=j;-1Jn%i2I%@c{`?f+=|JHfO1OCr}nf%c^1tw9;TJLa3Y+RYG} z@`wGidim2&bLAtIYzu^cEU?}Ca$|ixLp@{utfp=EnRGA6$=&hbi_v0xt#;(8<&49c z@{8Xmi+nwPFo5ZCuOj1-&p)Eh&cA4RGP$VXfO^90bKJ3#DFT~I<?6MwGN%`ooxOUx zTCD7(e$<)hMQemj_2Y5`AMbtnb@uxwidx~9<{VX>Zo2$Rf*h|_%F%CPIXUj#ocG&= z<7aGMD0q9~Z6+6$1&)kgSFj)5tiAhZd+XzhvbM_xDXmY--Ihx3;>(FH5`XjH=J)EC zN4E*eD*GsTFofi6-hI?d&vDbu`suNzWjgVza)L5q%%`ay*py<sdO}^)@>jnM4;$P+ zByuTr)nPOJ1fc`l?|<wFJ7@Ab>Gf0DR?elb`M>R0eP!lBPmjp1<I8%x+p{j!pVr&P z5WuN^#qqhx47L=DWUpU#9Ibr;hn8twbJ-|+YTGW$>Di5zQmLBXS8dsM_>9PL-|)Ml z>F3POrI@ZfcJ8`)U$Xl*mQRmZfAmehZEsxfq_Q=mt34^Pj6c1h=i$NC*KIkh=lZ#` z6)VrVRsC-Fl~8q!yHD@?be>WQ$a7b1%FxaYp0Vg@>AqbtnO-7(`%J=C+evn(Usj)e z_{gWygI`P2GKwnq-nV=u^U^z~j!`&#^*r%K2HtOr&-ET&c`M*SxZS45+PSO5o_tO< z*f@QScYVy;=G;pqGxu-am%49TP~^#=`<pywR6JI2jq_4>&ph+X`TE;5&7K;GM;srm z&mB1!af?%H+lt9A8rQT%?B;Sie!0X)ykMS({q|36xsl6X?wFh~C(g;~UEw2bt1pTj zM=w9x^-6o8-K3iP{&xE7JZ*!X9f&ZUxqMbE|ASRhw-3DvtzVrwPe^6<>AWiO?X#;m zKmEKk-Jjp#PK<vLOKsNIJHm_admLY?efoFGUV)v`IUhZCFVvlV<yc^~go;Y8`el#Z zfs5o0C$YQap4|H&oXcggS<Y#>8i{3Fv_H?;nQSgLc}v>1tgxvpSN{A7%;nqk{nD$d z1cAu)NwcTrs;|q=zM8JV$`w?9;rrwXj-vG@Oa`oLmL@b5uDTzxFymFZSWSxjZ@!=9 zH<;^lKfe31vwl|or~0nx>fy_eUtj*<*N@$wgA2ad-uAKk`+oDk()p4<S(Xaq<e#)% zDQ)j@Y(h^y1H=8fe+$07n-yB|{qxVA8ik+!J$m%zu4%=|*1B4kNa0&sy0@=?!BnCX zcBO)&BCVdiw6l$o>+kg4lJfJUj@8-8#LxXxQM2{$v#+n`_RM}XS@0mI{PdjN_17oN zoW6tc`ttvCCr3=5St+8kSmN@}iG4|-(dwR8m5x}~|9{v1{@nfg>3jF?vD$61@0U1e z2}443W=^<?SDfWO=6mz%>i>NHX}VzT>-ll@*1qlcec0R|)Ia(A^XJE}EC2j{tkCiA z@|=_UlM|eH)#`V%>|fKnFXX=d?n_JWY}nlY-~7%p-$Ew$4E@{xv%9rB-pB-63bZ85 zwGcjVujO(aqm1UopI@qeK1`YY#zaBS<;l;3({I`>-QgRvhfQbdCdSCRrdLeAHLQ<M zTCR64(l=wHnh|@w!t^x<>*beipBQ>_q3a3(9)?|PTclrY6-&8(cl$xnrhodL6Bd1+ zxLjjH^_%@a6*rvKJeRZKots<o@vR@@*dBl2W(qzO>$CM*;zm))tBW_U^H_JSOkZi* zJ29mS^=o=>yx%|Us9>C@^>eQw-yWWV#yZm@+gMKbb1GR03cK8Rw(<CX-=IU!>WgwL zIF!Cy@mw;wvZ=e(VRwViUPA%#bpfuW2PFMlzZ>popLkJj?Jbi>xzB!{b@q|<dYh0e z;j%^KOa1bH6;^J-r<9$pC?y!(7Crf0xJLa_<uXqT=4KWn)s3fL#ia>;oj#ZAcG+76 z+eK#=&zX^R`ozy=NsBYyM!RO&oyZsWWzw%d_|3BU(7lsiPg`y4n&WMdy!*t)#3}cU zwC<Rk%9Va<-q*Fg@6)Q(joxLl5}xjyN`L=X@B4BfUMJ(f^_JxNo6^RArrVx(XDIcY zA0`q|ygXGRz@%+k>+$*{fooKC)*H!+t=yIuW1zmo*yM#mjIz~?t3{s*k8%|E1X-NA zo-3nyrhcMm;X#?FUypDXKgv)%JjcT|&{<v3x?sl_5t+lEQl@<HeZJuG)x|CB@l{hk zcs^lSs~NFEa*?3^6`h+E`(mY(?yMA7F8Pr5(B$LxF2+^yOa9-U<Qmm*S3_4ONp?j; z;HHl=X1uQMPJ7@c6tGdJ%z4(1)2H-B{cD?UG=`Q19PTr!Ppf>jbV|qxL;ucJzSn`B z+*hy6na28J>h1{<Zz3~3)XZwkU_2e9Hs^$YhT9CbB{%FB&P?+7t<f>-^V^2+6L$$_ z^(<nt7FZ$Y_T${PT~FISaLik<O^i#=h3WJZW$}~K`l`ZQB7<EPbM!90_c+4y`P#I( zr>(X%Mdp--D^+Z}uv(-3OUtzyBi9Xi&vV0SO~Y%aYCUEA$+vOwpZwkzcKWK#f2^$k zxt%k1;eXS7>4DwfpYrQ1_VG&{|FLuR$);;>%H^KlH@&ynf9a2jAAeq7A1Ax-*3GRi zJ08?jTB<eukUSH_a`w8LOYDhlr(14ZJoWZZ`pK4E-&Slt?BT_9pRY6W*8;hE0sYRV zaD!+CfjGy?hY=N1pY)r_>^qufSowSI7c>7i9v2K__iTD&-=s26JT^M{sZ5~w%~KD5 zO>4D3BKmCSiB6p(e6P#5#qGJVse6XtA|<9v-(&=3>ylj~LzZ=zg&Lmva`68hvA4Ic z?uyp+iI^x?ked2*#pc&4pQ6M+Y8T4IHr5w?W3Ya;Tuyva>i7Gildgsye9vZW^Jbsk z@)I(DZCqb2@G1(P#*uBgI<@IkY3uAQFZ=VJnyvHJSiSFjaM=2ilc!@p8a-ak9<nC> z^+FbdY2wS@tqHc>`8&yLO8sH+*@sST*{Wupb!L80{Ik?N%U_eKjUR3F`zJ2@Id{9l zxtWEh^y+y|?g=qH65}mU8K7wIP=B1+R@A}hw|zxI{MD(Gk89=ov;EoCF0^dHwXLyJ za}F~}-2C;&`SYzUY<s>wNqxGq&@;wd^s2CWc_n{B`(5jlJ?6)LY&)*ALe@p4_0f^J zkqh1~7FgO5&u9Ibvt@-@wdzBgvYYWKuPWapH7<KA=kQ*vp1=M172~vZ`zsFArp{av zw|=LU?kjumNWYL9`@aO76>=)$mR+5>WP954oH?s5Pbi;rJb#+<`904Ir>&Pfesj*V zDnq|FI)Qq1T(yY@C1yVL`o;&^5Y~NKjYHRWmj&m$CV}1w`zPc`&V2fk*YSU?$hnN- zNWFVKOENaiV4JHlU9H}*yE4|xca9K$n~ie0;LPq0J>M+;V+8^&j#3JjJ_^e;7dQT2 zwqLNb`%CSfBYtWpK7UZz=kvjUgZ0-LrCUN@9L{jQlHc~JIFI$U*Y`;C$6IdKZQs4# zK6SJEzl{<**nZ|*d2vomV?*%btcj5`TE57g2|KVwxcb3$(5|r8=2wI2_bPAN#FX(n zOKRysmd@4M(Ur>|2>t#!c_#l8{v$g!Ha>f=p81HmV9H(B{r~tRkHjkf*(SE}qi_3h zgW3E)kE;H066V%UWjvPRw#Vd2;gjfFu~IUwWmXfXGx2cMbL>5q%_{ylQ%C<BZ{+RH zy9srxEwZ=C7DqW84c+Y5Q+xg5<AwDPbvk_YX1m|ydHf=g_v3_KpL?ROywn*!SzU_b zD;5@zUw)16+~OPctKO_Xl&z&@$J?K_cvT(u)or1hwfr-LPtV+OW5HHltNP7%L(_M! zwwf1ImN9$&f=%c9KQrHM)SesQv)C<X>9L7#_vhA4`?Hv7*R6!Q@Be;nx$kMe)ceuJ zw`KLa*Z23`*nc<g`mgT~GX9^Pz5lKJ-pb;NE&rc=UHx}|>G%G){g!{EU+8t#zdS!> ziNVk4^2E5Z$Ma5{KiPjg{Q85tACG48|M{u@V$KE4{h#~dXYD<Dzs_RstNDBDmy1uh z!8zYPUp78&mzT`(jbRzDa}TUDV%;w2uHz-J|JKx9-GxH+0#jdlr*s4@W2rW1Rh0W{ z|DbvfgUCi^al3?fc1$e%m#e)xemWYz`pqUNp)|u!xX!QX?93DCH!GM9ztlZ_;|}Zd z>$N+%x1A37Wjw)Q;%U_f2{*5Pi0mtBQaf1UlpS;UMZc!SwO4ZsGOZW%Px!Uv-u?UK z36maFe=C)3tzd9|GO>Oy$Gf`=PaNl*7$5e0>592)*RJ0`EprPqOVSJ@gFU|s6`Fq9 zINK^DG^{9py!lSSljimN@7?<K`MlXzyC-*F)G@dVs%1WiO|ZYM_UBLK>nK4fXD?1y z$%P6`k*?d0pY}7n%>Rf%u<!PP?1Bqf^X0b+Zl8AHzNl|a`=sA09>F3T=f=;!cWoNm zle0^D_Y}NRz93{iZ%LuXrzgU%?x^T)c*`Eg74;@_^@_|%#olW;q93f5{UF}abYl4} z>qWV23~I`oLbgpw&^*6Zo<*ne$hGtpvCWbW^Cy`5N*?$i*3Pm(dzIki0&ns9M^pMz zF7U0aEYF$4IO)>EFS@eZ!aF2qNd1mJ&g7GO=A!6L)?<%cCiSyjo~XD<&#-pKf-RX0 z|2)-IKm4mM`1@FMN6r6l`yF=kvQ6mOzRgcEJnxtO%jd6`8X1?iTRXS5oXj}opZGEM zhsRd6qe8V&7f!~w{c`kJUf9krD<ZUx&#K-=PvNlm%g?sSobkLi5*uG%nR!TH>u(l+ z_vFtxVimvFoiBI1sp7)QtHiv$rPSJB%hcFho5VF&_u7Xf&bKdrmHF-SbH1IQGZHg5 zH$9F%^RD9mAIY4}ZwuG9Jb2!a_wP^SLWTD>WsUBhZ#)~_!>6lTM@L`hlGE3H70CEb zW!=`a`fG|4QY-R{n7spimTwWb|GjAQ8i8YM{)@`C+-EFeGMFhJKd*8A`g4|U@`^XO zSLDu06<Ork<$FT<Y0~`IB4eldGn)L))xV3MA6IL$`_H%4Z#ykgIGQTh_b|LyetYBL zd6usSdSwoAIjcxLl5SA$D{(#Ge_!BdUn|E1^J5F1=CIetM_&4;7ve1?^x>!R&(Ho1 zN~`AFyBD|5SvEoLXzPug@6OMUo|zM$D#gH8To{nwxSwI>FNq}_jb<#>8ehNNu>Jk4 z$D#gzm*&pzxxI;>#XSn`eP8$loaSLOp5U|C<H&W6Q+a*C*VLZrFh#v*394A_At2_v zyvF!)#rJ=2UmidGy*~W<{kpAd>vLwEzf*GT*n{#W<yHUlqwC8&dTj3fh~K?m)8y-U z-O70JOry*<H=K-<uetU`<lQo2;SVxNG@2~3EcjC6KL5AO8`B^4pI<vSYTNzWw|{$` zxc%EJvwHo~nG-K|K9`zRHn;Byr&hYmHRaar91aF9-xGvfE{mk@<h6>eFDTPIX#XzZ zKv|Eq)`9=r?YojEOXu2tKYzeG_Ue<odHL3%Uuq}Y)vt`s`v2wC;hUX{?>`q?)~K@J z?lkY@3%@@5f3xRXwaa(!E`NtvU3_hN&qXiX75psvzx{l%?yvp7%%+&e_x$GQ>|FlU zclxDQSO4T`Gj`>EaAEqp-C^!Zmom2c)XQ>@p2(^FtFd)@w`Z@~-k{AVOGBCeEzT={ zBfsZmiS^xc|1McK|6TfjSLp@D<F5O-rgm5EKEp3@$a)ToCR6zGzuBGB`h;_vm$_cO z$)x@~UG^*E!gXy^N+nt}0_Szrc=7Q*SB+M_=R8T5KT`1IiwdUy2LxZp2MLy&T0ByS zy;HwYsXf$h>cM*t13ZsxI{w`4sY?0IfLTnZ?y9d{aJ%#p*Ol_wcS6LAW}ZkiF4w$& zkb9TcEC&B0zDn)>CtbBRynedF{oT3WPBDvP?Cm?Er%X=b)eG!AYf{vHXL9$s9i8eS z2El6%bDt`A>J7VgvE|)Qk?g&l*MnDnz9rYM>93s6UVl&c;Tww@*&>Z|@!aA`)`v3x zEuFZ|zqjo52IhPGHyoLt?anZFTNbgK$JLPi_Lu8#e7);tmVM!$_A5qnx%z8?vO94< z{NGI3cAxoL!t-{GXR`05+O%>@yZIh+J-%I7BT_Tt5Z`W@2g=jGJ=UF7%Tx1Aibuh5 zeZRx)`<XX=g)bS`_iS^&r>8gJ+Mbx(CEj+gPP8y2PMsN;v7$=B>3f2~*StWkDCeH& zGd{}==UOnb=pMRw=8}IV_lFdlRSsFfPXxBy*7zi;6Iwm1<-zsG-H-pj|GT^Y@8SOA z)6?ba_gVet^<is}`S$Hwn}qr57e^Hy&%J1HEbFan%YoV1n<hNq_;k8H&Q>JhRy5zT z1NZ8^yxV<JuFpEi_$p>ko(9t@^J{#1I-jFnw<o>gUaKe~l+s+<a_ua)o`TLh{}e&R zC3Q~Rol#-)+I}4{TT{b%y7$q#e@@e6{8m>?NNo?EWU6B;wr!Ie_moF7v)@(Zo-EnY zH??c`{VcPc>$1Lto?aw-EhYEzn)=;yUe6YmaXpb-DdJRA$R;afb;Rk!gvAN3PMtY> z>FcKZpu=bSgI|e!DplQa=Wt8iClB?5ilw{OJ=B=};)iZUlh@)|tS6=yUo=Xvd$uSc z{^xY%Ns@YpkF{w>nK1n(>?jdkMA^_Q~bXSF$X0_;=E%#-}$d^W@!6i>|$yG1HB; z{?j6rgPbo}1kcZ^cDZC%^6T;D|AkNg*U2n4aO3oT8qe1M>CgS^?(5^^BY*B+AGh~q z-lzKOA3r~zUmc%6_d&%pmc@l!`@9Xl*xKA=O`mu?*k=6;Zl-ktzrB9WUHk9p?f-f6 z+2y)8vgU8(xMASn$uAQxH~&w?Ezn7M`|drKpS!ny{q}VMR=zHeVw;k;HJ;3Q_j}*g z#hSKkakKqW?4;NNf2I{gi(GwVyQfF)W1-XYjUDIX6?~UXWRH{I6yNMwZzaPv-(mIK ziOcR^C|mojV|KUHmUjO&Pv1UFm0M){=h+LkvkyPczjSSb68}XB;~6o_P2DOkToft# zA@EkfFL^H8lbHHKcjbzi?HL^|GXs`4z4B$abNR&fle+u+!H4#xMTtKAxq;z{^|vLe zFSZ>Ce#$(HukYmnll)C(tTBtjvgcjdBt37UURHHj(#2=R-#4t<xMoUD+`7^`u~S=1 z<iBw}z7ls}%a6?NH-`VK*{@8ooh*?fUCx^N^HEJz-tn2mXR_bchn)Xy*}iK>@Y=NI zLuKMSU$M?&`1*U}lLM(|`?j7Fx#cUzH0Q}Qk*t2d`{^2c-sMUE-MvF#{|Z0eud*8s zpKoAz{<D8qTiUu>F5Y!#BVGo|tlh}h(EfC5xb#EstfIWY*jrh5x4pU{X+NL!hLPxr z>}!o>?q)0J*lx*wuH7zTe>b`QO2vz*8>55OYc3mXWmx{%;$(u?slQT>Ti#lKPF}Qh zmSyAC+o$S84g|?wU)ZqX#-EdmX7hd0{ph_~Y@$_L+B)l=)!awog(b?f);NbebW-hV zGMf3oCG3Kf)*ZtQbB`sK?(IvHTXslfZj|R1-s8)5Zkg$xnzS-_tx@2Hji<O?pIu(R z>CUA!D^K-Yy=)`(c=gJx*3Q`P%YJFCGMm5a&C>Yb+?mNnZW@|%pKZO8H6>&6pYSzm zFKSQshp#%m=g)T`v;E(5&xRCtAL!@!rKq%|{`p?vk}X@WMC>U|pFO4b;QBMndAF`@ z`*}#{dC;5Y%YGZv_?|9^ORE;yWOm>1x7LEt<$+T5Eg|=0SPP}zwVd17c3Yw3k8Xou zZ1Rcy+f9A{+<pINZppq|b>%gMxAxoES>8=l|MkzWs{VWQ&U-(!G%l@QD!%q+-e;k2 zKdt$cF5JrHytu07PRc16qrXb;8ctYOSp<2QOuipomcD(5z?{9t%Z^DIFL>NlaJcSj zbmiTU_tA|zQ@_>EH+>(t(~e`~7tceb%9Xd@oRvAAztis&TS4H}Q;p~J44<9)*n9WG z=F@wumX>e+%C~$4yO3KO!`4*y=o6n;U-8T6l@o9|uh;uBq<HDsq8jed``M;v*DgJh zIny|ucTw7`#x=14swP{%hCfq!`dEKyEyG{yDN7g~?M~O9+_XmO_NV$10k(VRJtMxU zZvVWtNM6J&{m<MR-8X7x1strNR{!K$+Y7eUi-c}ZSh^v=@a48_)6lg1xoNVgR=;vs zRn*F6+F0$hd*3|yaZ&yJ`;ONZrdrFL`LL=>?0y=rh3`jx4JS^YiTP@0^A>x~Imh*? zvLJo=g3Y((a;iO}^xs6RC~Qo8QQv%RW7*mtCpU(OUY^$?IXNSE%S!d*2b}+$;<?53 z^Hu#;AO4d$eV?ZE9gW(uvO9RQ@lW$UP6?iyysS&-P0(EOse9U`qXw%kpTG3j!E@K< z;QfDeXT6;w(UB=@I^F22j!VXlQ(jy85@s&go^dR1?aF+kYg&0*%MROousqvV{XToE zRQ<+XE3-}Z{Fq}Fyv<@|x{)*EqNqH>Nbxh72G3^YZ2fk~-mh4y=hvpS7n4$07Op$l z@u~Qh&&yx?=UwFB4Ug=-CRjYHSM*oJ+PfW}%|74cUB4%8x1de-?Ou)eMDsNlPR)^6 z_(bdS#a~H&mj!!cFO*!#n^1D~w9cXH3+uQREqnH?zy4jSbhcLH1qbik%m*uUmu9=m zbD6ACvOjz;bKOQ}y_phwW7KV4KS;fB+4^AAWec<ZTdiE$PV-{>&dvFKWp!}0;O?Na zPY=&*mCoSl%Gy_WfMMyYp2iuns+neNE;k;2*zkK-#meYJv8H3I7awk(WV-fM#eUXp z++UAuTKYdJ@I>YF`rcc`ZXtUv2Q6HGXHMb)?(-|%_zw#R@;APHn_K)jc=gW16>l}t ztj|4+(D7rQd{#K)3U6?b+_#UVA2zF&H6Kcgb2s-$J9_tl*m6hn4GPa|Vi(kY%Kqxo zs2%z~_|+Sp)8ZO4`p@1y_2|{Nnm-l$dg3D|ecP9t=KhWIqf)lkh2<~mnWDRdN^iT0 z2fvMp_xIf$x}m<W*7<JQs#W26&PDYulRmQZ{{2wNrdql_oBvF-$?WuyF8<BENjo02 z?>k}Uec|EsYwr&ghVZWRh*&kFIGV3F<clh!LDI`?$$u;!#|>D&2QV>7>^*xvMUCUv z=2w3!y&hN3+4J|E4p&g?x`VCR#`W1R4efX)wl&V*G-ZC=!Hvh8RCe+O{7mMbroKFA zwTeY&;nkVbo?qz<Rs68x(!Enr3C~k@N(=sUbDyzOWU4~b8m)~AiE~y~$jv)qz$=k- z+2_fM$dJ%^QjYVgLi`tWd2j5Uc53&|n+77`2Hn-0k1jU*bR=JB<D3hb49rthUIb5= zRnM<%)620*?wDgwn*qo6BaiuR94=hN;LZ~9D^7yP$>x;-=Zo{}_cwhLsQLQs$FCo| zAOCxK{Pg3x|I@#R=iArSm(_9A{pS61y#7S;>77RRx9z+2Pd%gd>+;>-o{Q~X`^1qw zW~bT`1utn<*Qe82T+6qt(U5U*=84*WprL)c;r^J2`pZxI-~YZYWE(x<hs1>boUl9h z80)q4nFCn=>K95(Um#Gac_Y7Z|A7>@f3kHx7g(0RP!^hAwq1wsSM%xb;n(Hw|E>9W z_vO@&f9`%fy7J?L=lepP%3@#Jzx0vI+{D;cb7<d--?ttoZkSqqU$lS8tH{klQ`9#1 z|5^8U+S+y->#}P?^;<+X6t!4hd$4Ay_%D$qUQ%i&lV>WN*7Xx!e(J@hMcp@I-Ilh! z{OW(+-+$fCmzkpbRel%0NZzR?@pGo^hj~FM5{ITNXj)`#`Lme)_=S}#&KC%E-I38| zTND5Pz1o_uzRJIB_J#S*|5m7c$jEs^m%-MlZY`A=OWWMOoS%Af;nw4S>#H^`pYv2{ zzUtxqNi`)CR@mQGIQqXy*gDl@^`uI^-|UtC`cAH*tZmWShXk`MC2#)=U^6&&@z#{j zlg}lk?6wt~KUc|e>DJG0joXr3eRikacFDE(c+x&$+Rm1jJJ`Qn^3<6-<7I=rxB5mc z9nT-l+scCHH21w&^=$R@i8ln48}y#muMtV!xx%o|Hf&DWl9UR$f|F5gVp+v;xmr^< zE;y-|esb>fS0TF}9Ie}4$^1_F(`N4_ky|JKeN_LJw<)7PdC>=VIiG{|jo0MfDl?wE z@pJBj6|Db$p1=J4es|E#@0&#pcKa~9MA?2={jK)L<sU6uZ=_sj)-4l_%f4Q-a^`kd zRsYWV&<7{m>=#O^{=7Q>c)tF*d$l%pmX>e7+y5*1wZ1<+-#*$V!c=tih1FmE{nz=e z-+F6)blBPR$L{ZsJmlQ={JGGa_`n&$OG;Z8%&)JKn_%+)i&USRqsgiLKU6t`QoMf6 z{&xNO-B<e-#6Rx0;7ULJu7CCA$J@{DZoV3om~XIETsx=!be-1xg5BpUb@&!v-oNm^ zdc`D1`PIwf7AE>XKIM6~{_YaDuGq$xI~*@7miV3Qcl~fjbY|O!%FR_3J8w#8UE6+p znSAFBz1-*fr}qA_UR;y=+;9C>qw{*_Q(W_8--_Q}pKQmkyD#D2lpVVpQv<L1%)j(b zKf3VJlw&JZLcO$2)066B|26G6b~7+EGjQ6x?B#ARryn)-?htY>`KYptyHujh;hqp% zlg3d7CLx!_0*#zXEmb?0wrj7Med5-uE8^?lSlwT?cjEC)SB%rE79TvkMdowHtwl>@ zkDr`&+9Ab$-JHg<Ls>h&{9F~v#xTu$wv68Nd3*HJeww`8puMbGeo3;8?^ciYwSNvQ zVEuV>|NqXYsEgam;<svPYcrc>|Mma!@W-F$m+gKO)YN_Z_T$%^zq{}Kcd1ujTeI|$ z?s5J_xlC^J>I61P2i$t_=+~b3$-1$!^>1fR6kXo6{>z&~U6-dumQO9w{=M#>ky~Kd zRjb<j(-x}Czq$P3oHv`+&-~_6>)X!ARlCUUfR9^U{YD0Dv5W&#bq<v6_Wd#Uf9SU# zy4IY#nGMSC3Yi=%e`NH-iPL(gVD$AFZ<XV%7c{Podg;h}rl4=ux@KkHHR|ETp=~L@ z3;ItRcHFsS$=k8};)-V}R!NutNVHDA=Jz;j%gnc&Jr6ik*PdD@cs1hkIi+v5jKWWP z6GbL)PW~0ETc7*-@^b&Rb1xY`@3q@@vBb!Mv$jgH|BvK_v%Gdk{Pefw#vLzMx>sk% zG{^P)cjSu$FO}x)U(+#Xm6L?efo~e6TwBktJ+8>}`a<$fufWF-J{{)#kl?a>A|q1@ z&&#NshD+5gN(M9AG6mXQ58OCraIIJAwOH#y-JBzeH@5$_-kl{>e<A8j$Ly;zTBqBr zJOV73Etvl4G)+G6xZ6P}VVl){ZiO97t_G`=DE1vPuD$h1RO{dEuxxev=rfs{<)3`q zSebimr$La}>HE`eu32n1<1rUk+8w{*bp{FTEr%LpC+Vgfc(zoSTVjLr1}nBX;SbjD zUwd%Q>YLZh-yLiFSEj}AgELpDE%VJRm$Ps0Ml9DZp6_;W|MHHz^3(a}f0!<A#4|(x z;*opDC%eaMFbYpDh*y<aeW87F)zqLZVK-)7jLY0|`k3cq!_Rvy+Sak1WSG1$UZtM3 zdF7D<;^mC1qqDb4&sY<e@;T#Old0ii$w~FI)h?eoJ3Y97(f(_z`7H&tJLjfV$|)`H zYf}01=P{et#eD9#$#HjdSbJ-dxwa&`ewu5yF4I;tYfIOAE0;vypM1-cuWp|*f3<C+ z#LJ-W2en7`ExE<Wu=cH7&y8JI78b3vh?<)JyWZ#2+74FPSFeKJY+iYH7Sq+YGx9%| ztYvc5Tx?w`x|h4l!{F|o!?&(pvoP!lTq|(&A9sV_RPh%RB;T%kXKFb`LpNGXbJA4t z5~+84ii_X+XuG%AiHB><>M8%i8(7<sQg1dR@r?DyaI4KT)}(kmFi8K)UCMa>d-j6r zowE(w|LKO*pWgY);Z5*5pN~!ZRwQ`s@#$?&n=SRL&i`Pao32XW^=)sxwpl#8EtTG~ zwVjuF#m^rvjha8WKD?|{`J8i)b;hMb_qRpuUbgOzw)ev+V%azC8g}Q@io3PQ2i?tU z{Pe`<sYuohzGQLE5V6DS);#7&2*0vYa&KJphh0v0)F!@eKUPzJsXpdMyj)K3)snP= zO>BSGzq`2lowW4-*DpStW&58kYkx&Ayo+Jmxe(UB7jDbk&bm1#Vq1LHq(v%v7ObWZ z=Yh^qRb_wtfZ5BVVX@qWnWap7%D3+?m3FD)|L`bUc#6|5iC4KhFS{Ofy}_s*`+gPk zwjW^!*6yA4VBN8eiv{=sBI+mXIC;O+gG*Unt**`Mv9D*B`tvuX(+-@>{<!?tMUH?1 zGbiqKA66X?YzZ#g;re9Lp*M}uhfMf>{?X?vOHtZ%d|QrHvlLU8O|X#i`s01GTMpM5 zbWOO=TwixDYy0i!sFhL63MSQ_T=jP0LDpT;&JpVsPng_o{oS*_Y@(Ne-)*^^dIxO< z_2af>>#ct``zdRA$4bs<Dv8W^b~EzOos&g(Z?3qoFyUN_K=;M}nh$K<j=u<co^j*e zne+Xn5mggz|GLz+{Mh4#cX#ZppYw13j+-Ts*$rI({}<HXKlZ=2wxVFi$N$$qZvOb6 z_kaD*xTwR?P3H4k+#jtxdpZB;Jt_6;CnAe~*Qaw^Nnctj^pD5-;Wz6~LFZW2l_gl~ zJKhPVKe)AE>7&1Ebs7G2Y~T^7T=4Gc^|@7UzkYr`{Vde#$+_8^quh5#9B`TVXwnhS z0`}l9!m~auI{-PBwnv-umDP;x8D%=09<h@j@LRTAuH^XEY=30Nx1($MiaXV`PhXxP zxa&V3Z+&6Yvqj6U{tue7ApOtdPyaVbo8EquHR<S`16=>}|9|*!;nV+ndv4yp|D*o( zkI4T2;gzv7pH^vxcfXGft%~%0-=Mp@ukLZ<+QZD=>4vWwzZ?GfE|Pn4-PH0>$@@$H zq<&r`@`IZvPJZEu%TxFNlrjCSIpe?Z4L;^gOLPx({oG$&F`+*CzkEr2{<Ht3f7T@a zGdF%dvv99#VMn?V)9V?Dvc(fDS!b4K=d%6VW54d>`JnaRrcGxGF#H!^x_jrx{r^|( zmi+(vM`Zn<^K)-}KeMQbw}5N@I(sgLp2z3jmNZP_SlSU#T3I3Vn8P)*fBAYl!|hw$ z9&E_GF2=@dU9Zk$yw~htQ~lQdJW1<T!;QXI3S|S`*-uW=o4fteqEnGVUxjS-COX$n z%`UTXyTC8F(tg`C@9cAYQNovN_OG4zQ7vzO=k5HuYhQvl{Y&2N?w_#dgVF}AfAwEp zZI%6hzy5F5=6})0&nHLz*W9rv(O?t*pBdrNb3JyS(LK9qsf2bBWAb;WGo|i(>rZpu zT(ev5>@M$bitm?+_#cw{u{!U`1>L^H!fh(M6ym>3-&FB$dS2Y@zF!BNKi9LZ`t*NS zdu;JP`xkPud5`{Q|BQV9Z@uMr@%&##&8vGBo!ux<DHpt}Owr<clgy!@WZB%X^}iT4 ztj_=P=}q5;MV{qNlLU>*vorp0SUqK$;^n?&^_n*qch@iK`DWVB_UY^!;eBDYyYDa^ zn7se{0qZk-n~z;~l$h|*dQP0;i}QW8_KqzIi~LfKSZvH+DZhNBi^QV*-qiW6?<+jB z%QISebQSyxx@={>9r${3sbj^IBXP=ywm3;9KDU^^z=YE#Dfy0<Vvv4bw^DD4VCkwO zh7+vzcWtcKce^#|jJfg)sq@oj{$p+9oM*6vwb4gJN&l$lOB<ucmFCkXw^eIhoVB%w z^GWx&5;OaC^M(HFw|QGJ#y$PN*Y3pJ|8<|AWjy}B_VM$=wf`TQ96i#UDA3!r$EE%J zvx5>wf3`79<TJg!W{+9ntILm{pFec<kD&TN`7fV^;*$PH6zJDmz1ZF<ZL@Pn<E`~e z?^f|n7WBIME=_o~lBUna0x6*>QrE5;np^x{6cK+Q`h2q0WCbDddqVB{OZo-YE?L24 ze|7DwsUo2}gRg3Td-mm(=H(}>vmT^O+gW;tcb|}g?;*>{Gkhhb#KKRtgog36dN-++ zYgitfJR|nTr}KZ$9ZcN)`bK@0SylV2oNKCVabnZI{NPh9XsPpS4#+VHe{noxfuH}~ zGt(b0JX~AooAG8#d4XbNPN31Axa0Fpe|>oJ>A9u#h3@73yT5N)W}9(-=aYi6+s-@g zAN?0E(EEaG>)bXM8RnVSW!HTAe@|xLw#W7Paq>BT_Lu&#(fjXzW6rzZmd_0%{S;;V zi|%{IM{N1%DO`8`t4-hCaPRUr`=T1tk2~@jU4OTF>g2R^rFzNrYolw{#Lr!(tE+c4 z$$6XZso6~`3)gRIak}t3jK664F7y0JlF5_2PN%rocxd+rloatq?FqgqYS_L$J~cI9 zQddw+i}0@nO^zZh=M-kd7PN0%RCLDpOo?jE#?>0tYiv7HLncp5<JRb(&?a%;FIm>x z)^W<#YcJPEn`AdmTX3zONw@Ird3M9h4a%Hn;@)1Cf2I-F$MMH}I*0wjna)i7dV%b7 zW;ENEXeY#(Z@Tn9+KFewq5svjKdSEA{r^}c{6G5q`NiM=&vMC3`5M#Wwq*Y2>$4xk z^_~yP<Boj!?SK0F_xo>eo7l?uqx`?<j#b}p?l7OUKdIXP-LuO6q}^-tlaJT;FD-dL zZ{K$n15WQXnoX>l)>)Un=hyS^^I%~4p%}PnPFMQ&jUEXG5<F>a%?BU6Ebo(ExM`a7 zv8me@|M+gw!fE~e0H0xLkkf6wieRJ7MN*r6pKvcNnm4gu{)54TC>aSq5fi;@dn8h% zl<t<kNSS|T$(H)QM5}Xu10S387C-0tTR&~ZzFC)+Dq5$XdjII+y7T{o_I$Y)8Mrg9 zZas%<;iC`BPY38IuDoTvSeUnM`XjR^;g8?XxRCU5EfZ(dkv5No-VAq~-phT|={Z`d zl-T9em3TPG`iJjV)8^uorP*iR$XR`py?Z9`_~X#N<<`M_n!lE9TJ<HAbLAD*u&JN@ z{^@*ntT(v!i&H&w(T9pQr;r&bJV!rSF8B~LO}ThGb5#1)w?$#6KNtHw67UT;lKNP| zO)j>CyX9Kn+ikBm%<X;s%HsCc!2JuAg0$~_IZ`c}!+x%8O0nVJMRyuMHi;EpjJJ#{ zYOb5VNad{P(nSifCstd9cuKzhG}WTpK#AwDN;F5-suw@&zxa!DoicfUO(2l<;6uAb zQJ0sRh|f<ye8Flu|6$9DKb+-Z^Nv4```<15@aW<FtFQfMS9foJ_V4_|gU|l8Pqlfy z_1|`v9z797y$88WM^fMPt&QOEymhpEy`x;u>!_nAKTb4C<ekG<yl~4jzs4kyovJE( z$}Vj26puQyG40o0zpGaDiZ@S5HMZNuoEN_k8zDSH@ZRhR@3uMZy8FxC>7}yTcSAnr z{B0NX9H#!Se_wF_%KzW&vp?_GuDs^`pL^c!XEw_t7-QbXubeOamghwS_iyIevW@xL zcgp4dGVri6N@a5_SjnNVC9&sk;}zbXS6xC8jhigaZOvHw@Y$z2i|)@c-bMBId;VKZ zw-@-mSS9JkjFQ9-`SY$u;e0CP6*Ym^-h1_=g_}0M_$({x@k8)O;31~q!z;xW-xR%e z;o`zaK4*H{`O~kLc2ASbF+OtT`4oq}&fLBYtIV{Pm(H9VwId|%_Q~6GU(ZSWTlLHE zP}*^}*;|4)XsoSEo4$LV;O~&;7fw#u+v~Sj9(}aV*89_~E7z{HpA^vglo`0g<dWvA zHlJLUt^5wxcdnaK^x(Yx(OjwZN6p+U&0jtdeN%6`<IKeig6FS%k$K@=c59#e=IIHu z&t|Wx5j&`%eAbNLcS;#^|BT1JA~pL}eeU=8T)$EN$n?H|zRO~xl4*`=-3K&$UTJ;b z;W~l4wSHGjuA+42B0aOZPy25@j{AT7-`lKn|K;{r*=WuAfA`7%sI!~nUe}*0mUEoI z{Zftl&y9_np7%9pznRa<IrCV_)(>T``ePJd%r^bMIqtLg6#di{o&sOx69j_Vm_K#o zemk~l#)j}ozOxubrtSLhxt$|zYrIHq-DcK@S{Jl;8C+giUw<|!|66Q@-NxlH<^AjT zaz9z0%DnUI|3|<7eOlS~U;obkf;|`iudWPR{6G54|7{m9Y&F`u_Tafc+czo4UpTZW zIaBQ1E0f~Xi#qaiQg_EPUqAWnzxAhx$a!ApIz9RJNzBQg+q5aENyzHwukvz7ktN0} zS8tuJ`Zj9y`MXyBx3iBn*4M8(%c?qW(x+{wnR#Lrw}?9b;&cA5%aizIBX{bmuK2|H z?#kS36T~0za_-s9ZS(H2rld&r&q<f1xjvh{?KFNC7sfr6i+P&c6E-*HDJMQ_tb4C| zw>Y%&(7f1~+rNUXlD{^I-FfcCzS8Z@jNK+#E`3}pH#}W>c`aMLHqY&zGo>$N>Ny|m zv9|W=nD{5iiGA;;hue9DRr;K-Og_GC+Tu)!TeSzj2IszNUY0*`W%DwpDzj#{iSw#2 zltisbxZt%_)LvrQJGO1hdqr;aCf_k{ESR18_m2P5U-eCk6^^C|nmZi*_5a0#B@_P7 z-FIuv|L_lMrvJas^H-zSd!NXhmj&t^$9NY7)}KGjlBjm1%vZgc;nJq{j=NH%?;a1o zb#jf@#R>QMqDBAlu^dYKchAfywsm#E42xa6+5Sy-HHh{uKb8MuT5s;xOxBy>k<RJA zmcCUr`E=cscg+^@Ei(HGr55oic@{}*Oyj<}G}PC!=Ss4B22a-?3HHEMM`fe<H*Yxn zMz-?D24nVm%O(xiCyu=HCg;EU94pwSJ#W3-O&g|U6CO1V|EU^|Z%b>R$XpORRM4aB zb7qCs)708GYbJ;t>fOK3F-MO5qDN!&k1Y@EN}O$EHb0QpEuC{?mrvN`NTYglS-~kj z|FX(|nBALlbIrr3darBsUZ*}E{nl{$dVRaPdUgA=zy0p&zw2jzy{|RT^w$4a4fcA& z|NqjySM=R|Jm<*Y<?#%rN7Ho0ZO;|U_wDvu(N-S!P{D5Qqs%E$-+OB2txIcKbY-W1 zhGuG^R!-6}skQH>TnT;~6Pz)14(LE-sU<ASGE}zR{#riA<Qhx4+tW{Xb2T+s--<?_ z@>q06>+=uai`TFJ35(~fza*{v-fpJfk<=@*RO$|T@NBDgZp?bG>vO@>=lFu;y@z&f zKHO4b)W+_9{A5W`)h6f6=(r8{a=TgrH|oh9RS0_{o{|^MUCUgyb!Gm-Q0aa9UP-Qe z7;yQqQfonD*v~)QY6UIpmM5Mto~#}-Ir>P$jEA-77hn3m>dYbyvCup&riOa2f1H1f zE}Y{1Xj^nw<B?X}#tkx$Ro=EU`b^li=6u{X!GOivE?#Sr$YONuN%JzebSV2CPmOQQ z*63s-pEI7X?}#oh_6gagrs23!?eUcL-_CWi{nTW)Kk26Y)Y9Sf?4*DnM_x4WX<u1s z{<Cb(OMhAQ$E!R9mO8RZP7!)LVbO&rv+5@(AF{h7nB2%M<#@$t>Xikpr%yi22zoMm zy-sz1+Rn=G$XVh!4x6fy8n>BfRP4UGeQgK(+L_y2qPm=2e0bOG$#E80ohxA|Rs2|X zGDEPk+Ii-=Q}t^$>6&p}<z8O!`r*Wi<R|{lE+sNsu5VkQwD#7V+~pR>6y?sc89H9D zKN>ixUP!`arP-uDrMEq+SO2}{Ci$B=aqYaKj-y|=JL3-AGt`PplrmU;)~DoL!<xAI ziF;Q$E#F(&aYCizhRV;04*apoLL06XJX!rXGVIKubkl=k1xtdAy-gGKmc^_->MpUw zKB4H_H>b60qt~%czB_4qXzs4NsjZCF>rz|O6}x*@ozbXYBy%Hu+Mdg5>G7t<HmjZ2 z)^~4jseOI)ru*JyQ<q4dnmRf2sPL)Q8J7=PYJA(KHL*qhKw!&clMi|u``^Sao7=Q* z%e~UbGZ`KSa;}I9x@8G<GH1yr%l_-i<nwG^d&r7qIfM9ev*t@ii@2UF`ypx=SQmWo zGVe!?qn@vno$f73>8d~To<E-}O7Y0z@)wM)RwZGxez(~DVyxWU9h84v?P7+bX^qNi znIn5|D}3tay|lgde)#6@jH~x@_V1{x|MqcJedWH((Kmc=-mY_0<X!iB`E%>NPY%A; z<mfc^Os`;SKGEdU;~DkF!F7@5QoU}z^(+Z#bA%Xvl$z&X>7Bc0{U7De^^X)LiIli~ z-V(YgFz(SVzvH@+YaE(=Oc@ruIQS%Coz?v~p7p<`i_4!scfamOpf)4JY(J;gNgR`A z?$KOS%zl`q^u|f1So>cu%B)sRaJOD}#ac-H<Ycpwx(h+^C!gy%ESw+vH1}uOS*6Y; zk7vET5;^;vM8(eB&9P3}O#iLy?SEI)|9W>gp`z~d$2Wi4|FxGpKi@E8viFghRwttG zJe%zx<nZ4tIq2;-_R4}cJj*_asqM51<nIvSQq@%BC}DYWj!)x`$fB=bKHYEr|NY(L zpP~QX?*43CZQr{kj!(dTuRKqz&Eou<&x~(R_vkO2B=#-Gd-m?S`p0t9HZ4mk+vqWQ z*|}f!hyUIFm#}Z%N!vHS&elrIxqrs@M5dCs+*Zz;@;v{({yS#%?c2{|`I~-7o|P%q zyM0&R*<?T8VWkT{gLl|nVtOWbR>nXl*0#33w6xA@PeuLLkDLD6%j=)JXW4Pba#cz> z^R?fvKWnqEnSAWPz1Tkmc6)Z%{I{^MudOdND`2p@cYAexOHHAv&HkNr|JT{u?0<Lv zi+=2euHZYXj^-HY9P_kN()ei`(<E`aG2Cm@>+j7E`^}#>A8m<bOHKWxlU=B)q??_a z8l;<DnA)Vf{6)Ouw$#0{JojSv*%x=3*n7O#l5KSI?1hFY2R^@eDDJVQ>_bww3vbog zqe(w!?Gf-@YF1bkS^sHbzODG1?@Gr*F1`G+$)coYX(eZ}cDJZxPGZr#xTZ&MPjr87 z==IuCKj(M&Rm(=#$9&g5K0BeXzGbPY!3?|VSfNLg!`D8a*m>s4aY=@qu~H8?O1%UP zJ!jXxJIdqsa@~@PamnQ~ChnKIv03$mdvvn-`6Avo$A3L<$@}bc=6S?}dWo0pna^BS zb>3c>b86S-^yY6%wqNwnc8ck}yykJt)_mp<6-^HqT{S${aqcsH(;o2mN>}#HOOFo8 zMe%x9e~*4~g4>4kOvJ^2_Z=C#HV4=D1nbKsyq8<LEU4owi$<tSqVgBsrn(0b(Ti%c z^9y>-#N}dT{eOShc2WHH523~S#XR)}vIpgL51)?7-+fx*izAn(Rj;n|JdOBU(gkbx zwzfwfy|__!XMui>^W2QR5$hY*ng2>GXx}qae9?S^ef~Z_)%R^ReB<Waog-}bpuoy; zdWF=^Gs<Gqu6<=r3Yg$JtBCzuo|U2Qij=C;`<G7M5pZ)WpU}tqqK)_UcDG&EI~a7^ zw*K~1LF366T6b+`nd<d^altn!k!{~)*aGDG7PwYjcMH3weRTVp0M=7n`so2`hs&FN z7%V#ZcFQSc{=N1k?$WN4>)7A6Y2A*?X0&5Z$!+c}<o3N$7GKF-)3)^j3ww$@YuR~E zY2||qSIwGqw|&#^a@cq!^3IIwQZwSe+)QR?manWYSSPW3lf^}zH!%-=YwqZ7^ffzq z=H6V^CtLSudar$Ozs$DjhM|wdDsG2&k{6%uFVy{UC-10&>*S`a$TO!krdIJxej+G* zU*?LKNO$nc6hEWA-llwgY3<cIdp8+mY(2HY$+h$51P7~iKF&vrQ>9#AYqM`pT5&Mt zo3T;WWH}j=l=^KwcP|;dtYl@>tUUQAYF$gzOK&l|M=t_a_GPg$E6!UbuwnIvFoOpR zRtIj#-cc6O)mXMTAiPrJ*2<>}k-SCDvY(bN4UyRPhkyUWZF&D5`d9vI|ND5a^5=i^ z!;h=4H~T3c_OT|i@}K?lZ+kX72(YgF^YQ+VYg6qXi7mTl;s4?L{rVr*<}o{6oG(&z zegE3!cKd^(tv?<3sQBA>2G6qc@`LFYUUu<LI%?!rlR4|u`8^xLtc%yH_O9@~xuHT# ze#`U=`J9}(M;M}lqe8xY^DO?ewfSz;vOPOm@7eC#T`lgzRC{{mrt?|8eEV$p53ZWI z>7V46Ifl1wTm1xzSDbpR^?tE@LcM?==dDdq22)w$XBWp8Cs>`IxZ#%j`_;?S*9QN5 ztIC^Uwdu6&ulp;0S{_^Z=FN1gtv@Eu|Fg+gm)ZEYqk-c+w#IW+e>XL!7`@o_%VDPK z-r8P=qrYZoESzjQVdV$Duuli1=C#e1e%@M^{6x~|aP+onX_wvG4J5VSuT}4#kiO?< zR{cBC1tKMe4lN7LH@@T&lvlRt6?*bRg57Xev*V7`ns<${GRt>wca%ElxnXvNO2_3C zbDlhBn^&1LE<e8>@A#cB=XAh%9l1}B`NiL#JNW;f{tx^A><i8ts%dIWsl0r%?xX*O zoBxv5|4mO{F5$J~M33(Kd2=?m>RGMo_!KK*EApD9{-P|~-1>tGyo&^P9B$!EYV`w^ z+t$m(=R5zAP?6_s`uFB2-;bbzB1W&K{|qOjlTUq6{1mj|K4bjBlxctD>QpkCg1-pX zy4{<SCB4}7>(Q^jXFoi?ntyu!`TQ;4!~dQxetWdNG0=%G`1yVZE4PWP?gx0Lmv|{{ z$p2X*9ue2|slNJ{dNE7ncTTU9ZyrCk;P`y;+>2*!+=5M<FFeW;H`?#%TKnO-f^I_m zfjRvpY=$0h80IIH9I*e-dG7xIgoL81;(PM*niK!O-CbPpk$FdzJ<Id|#fB1mGwLTv z-Fe{JC^P?0Lr<d7KNg0H>W`0)UY!uS=hugKb6bA@`}FBg7RSH3dhrP=tjE_M$ep0Z zaKG{NW@U%hpBxf@9pmRXz18sX^5y^jZMq?M_0Rkt_xFFv_p5((e~*Qw-My31XK$Tu zOgyyfz#2B`Gi#ox8`%7x@5Fz_&gbxipOYQC9C<iJ|3v0WXLy-4zT5ph+<sr}_kXz? zuY5gwH1+?p`wyOfu5T8XbdB#iSN~4pX?cT%G+V}d_UDJqFMoL_Klyg}gD-z~m;ZgZ z^UvRpW*z@dugK}Ej^4(mF?C_r*1+(dXQ4|}a-F9<3y}7>eDLS)&zBXaFXL+1zsO_j zg?!niuO{~f&0Z9Gg7KTV_*&PKj;t+zqPq@1UcC75;<-sTW8}i7r)qRQFPo+mp}2)* zUA?}f6Ki9rH^)`GZEJWJFz&o+9AtKE#_GMZmM<}Bo4tDBtoFqwZu3?zoRz-l4cnf* zuG3T}D`@>Xx~@LGQS^C?ySkJ^Zq2Gic5jx-@5tyn^|`}xO;4lYL+-NML525N9<JyY zY`J{R@AI?B<HxuCKhGQy@ghOHkU{kO|Gie0mIm+t*W26Ny7Pbkr1Y=9|3^;g+xb49 z-)VDw>t&Ju9ZD_<T{W*6|9|?lSYZ*D$iywyi90`V?$3?xRS($zjcJa%*c>G%>o*5Q zLfs@PuCQ%U4G{`VI?Av&|Kq(*ouJzWFJyMV?S7xITRLOk++2;<t!&dDCpTXG9eqeB z<L}vt^{3f3UVJ;Lep*S4<0K!!lYD;BH^s{;SGox<tC<zEp)2}K!*AZoLoA0<SQbCv z|NE&y?*&gqc)dix@B95iZ<npuUw?nKx%j_7pWmNd9dPJ;<XWAFGnrFv&NvsF9r$Sr z>%NvLxn_a$-)t4Wb8~sl>I2VYmV|DNlGz=)Eyi?-A*WnISDl;EM?0Q+_ZciND;DJz zOwX)cbzZ;KYQOvDeJlz~!-W1QmgZUUA8`E89&qU2l=O%5xJ@HxHY;g3_2*xdRm;%J z@T$$eQ84rG`nyq^8hRrW|G(dFWn=cf{`QUk+Eros|G6U*_ltPcY`M?1MC$oYLp}e~ zSN4B6yQ<!7+V@`(_liW0IxMXa+E>pOzdQP?(9atmFWx+N#MSkw{?iXy6aNQ2Eq6_M zbSG<p(?9t+GV@=2`k(OrM@GK#|L~7Gk^iDyw{^@|`(^H#<l=v>M|MoRWPUo#SAC_* zt;_TBA~;rVwYf6kT+$b*IiIGUJo;6PVcwtLraKM^F3O(rGFL+7vG$yM3NOyPD3wh~ zS^lMdYDwxelhlnf7inLQe77aV@Sx_mf*(>m{_9Oocy(=>HR0=&6xS1NyowDLpC)^n z=uH1}{qV90-Dmm&w(<X5`ZU{{HLUlY?q9BV9P>83O>GMfs?rZ#Z9dIRNM+_9{mcIi zbDm3NwEnZVxp&|Ed;Pb5KeJ!;qUW=&)gPNu6jOWWiBWyQsX4DyAKcs$sP0~-|HFR< zOMSpgp}6Gz`cdvFn^XRzP3yUt#w&Y6QAJr*IVXGindjBguUtPb(DLu-u2gd@N#6bX zwvqRgMT_+Q#O%(C3%T;N>uYJJU-;|gJ+r1~G@aB5e|JZ2m!P4ulk;hTMK&s~&(xMq z-8_BKSr%V80n4M4>m`I(tp4A5FDp~_UB}w@7DwQ|v+b^@vkn=)wO3$rf8i|Ek~Dv1 zms1o!H>Y^d?Z%2k(-&=%oihD@vWYt%o4fwdr_JXK=Ec>|DCXH)vFjQ0iZ5?7+0VCi zls=hv?`lZWf7Xi~dhxq5PYCe}n&g`VO#NHF>Hnz@|KGgN|6{+pa^8{pf5LN?-l}`b z>Uv?Bjz@xtlj$j|J^o*I-~E!j?N-dRyJfGZ-TlVpv-|DR+hwY{SIpn-=($!swas&z zzrv)NkBVPDz0mm}dPi=*)5L<T3rR*6(_%B$*1ap+9bI<v&Ar2ubf#;aYh*HSD{oE^ zc^b2C?s4J9>-iz|>8qr^u+1^_3p!apho_4@^Q~Z)-|q#=n`a*6v#_x{by{IkSCCA5 z@UKOyS~WP{&J)=DgfF`%$>@Ac@XHO6-fJ&MtvXp^EGTkmyLeKKeec!HKUgj<o9g)7 z{Cqjf7QPoh{+R8KZ+VjN@pw;i_w?Kq!8>I|e#D!J)VUdRv&rR5WRsb(v^GQCp;|3v zYyIEtJNP#o`e$utWA=If+&6P&a^CC@wRxTN-}K|f6R%kR_jFi4oo{|_?@u!!<5%kr z{!3JjxmI+0!>tOD|MS`m5*^RK5oz90w*7&}$up-i&wLZopK_{5Jf`GsOLlRrMWIHD z+L=G%Dd5rfw1sDul+>haiW=o#vGAQb<@lG`Wn1dkI!&qZ<J_~Xv`byI_w&4WvraW0 z-z&u~xBJnGIkVSgvG>-QNThV#nK1vU&K*;+?)=b*3r1!>I@6^<1MfTY_DnZ$RXn;Q z(faS7fW*56ypgYG&7JZtfbGSLZGBcM>l<eB=pI_B+_2$5qjePD7Ne|{+H1A`&;1km zYC;0fH(|d|^+$fjvUaX8xZAMf%aRm5jXCN%ZWnI8ZMgPxZN>Jv$MPd@i%+(25f&-5 zwCtGZ9{zx7;n(E7Z>`p(Ki(7NSDt$(f5na~r_RqTJkNWlajWdhn6&*X3NrRANR3He z&@$uxg8R!gJd2O6)bLUNwJPZD&6Q>IcAPeF0*$_lXYG0!`8BX!od4FsFH(<IDLCJG ze(jajtY^tTa|~{!|46i8-@X29+-WO2)z|eKefJdn$S?i#e&Nplo6Ac!-25MT^0Uh8 zdha6-oEi@?-Ba_E&<IZwJ$-b-lGvK%aiXtd4xLn-G`U`O4`cDeEz{x}lMFVh8ttfi zu*OqjTEf+R5x@3^-HmG8dFobuL%XfWI*E0X*P|nNW;E`bed6A);Qb3{1~2-rJjE`l zNPhE|3*B#+LVo`L&d2Bbw|)m`G<KfLf9`XSI**5HH?01v{k3@UTt?Y~#QKEI${*I| z1g?Jfb=j<gd(7EQuJazKa^>5-$SH%>t=#p`dIw*P?JZZN3-oTbZ?^E?qV)aTkNWk+ zKbbe$pJHn3ohjb-<7149%#(nk=f}iT=dNo>FAJ6Ku)81luvxxQUR6iKbWYa8nX!p{ zva(uwNA48;C@72Fp7HaensY?0ALo_oEf-W)<SZ#FnqIlQ_4AXha}V78={Lu8#R_?i z?23jpf!?f(FI66#e>MEPM%}8$l7$ORV{Xl>PpY^+U$?R}EB{q<YKQpGEgET3FU3pU zmzg!)Vqc)05T2y@;raa7y19?DH+BXd4792}s<T5X=2^vy8R=Hle1BBkbMG&{>Am6X z=3D#gHcNO(7H+GYvuKM_#S@wQ!xLM#-+QY2G$J<ne&>yv#d{>Cp862UwooT&vB75T zxsSwV>RqXSJ;}5^XKClF8x_a@&+<R{%l=#RF1Br_{{PRq-}B%4-u)-_QD;F>eJWDU zal+{*7$fit!6Wb+pU*b^Zyf*mc4d~3%U^bhmJ&(ECxW-%^yZ2tu2+>dbymxn`tUiw z;F(qXH%R<WlRgx^;ChMD^27h@XC1xsW_Lhsmix|kvhnryC*p5^(!BVe`~C0J%Z>j1 zUoqi-;roim|Km??PWgMkCc1v{tk-G3qS|$T=BH}!TTzpG{*q4BRoNho(`k|ibEMx& z9q`-s{r<$~CqLyR<)wUL>uUU2w%OyFPk>W;;{SJg9Ze-_Tep1Mv?ewC@6X%MBcs>W zM||+_j`fdS{qd87Q}~sfs|WTSzEIEYEK&K!uk+NW@Egw^Pc-pAG4*w3djF2;eAV17 zY{#M&K4EA-bgb9<G2f2qU!9g7Yj`TSv+*K_>Zg#d*VU2yv8D626pLTqrZ?3;e(w_2 zzdt`QuUcsREUi~+=He!;oVu4=Rv&)J_1tVpscureJCn`(i+w`5D*LBgbXuQVk=JcL zKkP(C^zDl#Ja6AUVB?hdy72P$(^nP-JK8Q^xVYlHeTkKAm|@9NuO4~PU~~59kRYxP z#}wcB?|oLUcd*cZ@2#l)%d7s{9}Jw3w5dUQLDJv)l7da?$NulNx;F<Dj#B^kr=Cq= ztDVxW8qcLxUouBRz(&et@w|4<Lp~92XYsK!F3H{B{N;q%uD;cKW=GClB)eaBoAz^A ziI%f}_U1m>%@zLGuCSy+c8_NFf^E~zO}+m?SNfh*yI4wks_5L$)3?pPaH9FT#i2`a zmx}m~=T=*tP~l8+nXQ}F6}I*12Je2^MnjEH$ucf0#p*L`uOF)C+g$#n^YA$v7S2T? z6WLAc{PtxYsBu+Tw_x9_DW5rdE*i{GunA3K-Flt(LUBVh&vC;(14HK3Q>OEN*xVGw zWBu<J+eS%Q7iHFhhnJhGFZ&7>o@uM!a<w$+wMk@P`N==Br7XcliEHk@x><4l+4{Yq zyQeJA`MZ3HQ+x*hj+(#UyXy6RpZR-#^4VYcrsui7*Nc1YjrZBT|EBG{{O=aai|To& z+4x?JJe}J2dqMl-Wx}hD-<@vWk-xk`YUwp!rTNR3&Rn2T`kp_kD{>F#?1YVN-d3u& zL%hFVz1e#x^UYxq-XNx66QSR4e_8v<Ru@?>F8ldzo5-xDe_b)DDS>IzE8i@eTVEZk z8j#<!=XZ*gpgDhb(ofdK#y8&avToYD-N5m>f$Zf{W%GzH+}+mJJ}K(S6$K@8eAJh+ zTTMCk^z5m-%OWI1Uq4FZOg&oX$gq9eG4qD-+uy{pwmy8jdfqH4zS6(CK`P=arurXA zU~+#^CDmqQU3n;Ux2r<O%6s2!v^v+H%IT?33d~CjFesAq4YpYr&mMJCai9CSY}c5l ztHY)w&sp-<pn>z!wJ$eMhb_v!;uaOn?W}vC<Dze;UsTP`*$3BmZY-<!Y3s6Vyc_+f zWLIa@brw~Pt19z8UA<>}QOW+-1NEC7OKfB_T%&n-=Bvn7dO9q>=X0k}&AD_=|LP@9 zQ`khO)CYKNap`rMo$Wl4<F|)<ud7~$N#N-ap%$@q3py72PHfq?>x1pAr`zI73*$C1 z-puOaxOHX0gMVT7w<&9FDT@*=(Bu;|G~NAaljy}YW=SkrXZkCBn0(&Ow(%|rTlnGR zE(Ogi`Z8zMc6vVQooLT1cyZ%}xM<~`Emfbl%>&=@STB8q#qqz0yQf!zz|vb4R$W_6 zcImO)lFoj^-(p#P%28~yu}T$V_4O4yS~CyKu`#}A%e<+|(e2wRq4{FzDoT?Tk~Tke zXR<Bn^*Au=@Wl0fnURLl+po5~K6J_F;_rsTFI$*qvgpjZDQP9BJc-4#ONsxa(zG|5 z9cL}w?QzA{_-k$b%c^|Anh;Zk#j2Kj^5!sy@I5u29sB+A(_`g=!eKExw*)gf@z!@= zKEk+IJpJg~OcssVhfiD=mMb}^>vQaswuf71<dSZi$7jQpZ4br@{4}#%bz!ouz`Dw7 z`4{G1uoPIHyn%n0@DI!1vu7#BPP?-GvbU0idh(pIE!P$OF8$wg_;US;_YLbG7#|g{ zNd6<y_|7--lW4HVgv=}cb}AiO&#s5fpAz|4@8`q^nQMZt&RB8uV4+e%;s#OARlhu} z)}Crs5?%GFLL_?X_j0LBqfOVtwg*bi;9_xg$!mGVFgdKEMfr-R>jjy4Z;JKP3}lw& zrQYu4Jf|3UsWWWG;h3VI2Cc`g)SrE}^r}FSPXcqBv$6Kn$uHOLUG*d2>W<C(l3kPI zpIiyiU0bo9=RtAhdM<sN?n9H4XJ<;THrlkaY1Zp`P0KWAe+U)&@scHhH7(c6*1lme zhkE9N*rfYep-*O2DsD5D5;Bl3bv<#MX{yDNZ-Hh~5r$W1F1@UFa;D}ci@lOFrWuCT zJDMNe(9xAC*H$s*k;+#=#rz;6*Jt0`&0QbLJ-TT9rNJq9QF-HyDL-DYKRK)CwKsNl z!eZ8~H;%6P)^crj@Z?fQ^N#B6j!&W$E?fuAO(bQ0MV*_d*}ZoA-=-$1nD74Q%d1W{ zUk?rtTAqFW0}I<k*4Yx1uhd^^?MmtNN-bNkQmSdDX`qushf4k%Z-u8if=Zr_ze8N- zMJ_jzuZVlJE9|<ir$poLP4cG>pV=nGQoo@5po)k7{is_SQ&uYO2>6m<e)S&mWW_~; zsvB>_vgW!>IP;{{bFQ_7+KR({*IruPcHe$Eu(jq+;nVq(Ej;W0ZCm)cc^Y$&T{$Dy zU+I$YKT7)wAN#+1vPnZM`|{10h`if6O~<+p>_2z@yxqKgzYQej-LJ8+{=e}5!@CzO zb)MOXKG&0ZvbEU8f31}5AEwT!{^D0yrGCt^S{U<FOu6EUnV<gYeV=&G9lD~ymt(rt zPrv)k>CjWEJ!{`gIGVE6<5K-)?|?m>+nf4ItJ0N4-YV{Q%1pg0oMG}VN%paBx9+UN z)&VPS-%w3(ir6K8;9f#9_l*-Xc;2voe!6(&Varci%)cLgtUP%8O^4-MhQ7&lS;=u* zW<_$UPQE^Oz2p{+v%O(ag0HfcB+Lz+dYJt{`Pyc7k%cNd)qY$HXj=Gd<=oJvOY2V_ z6;GF%SH`vF!c_4JA(2I*&U>{Ny*=mmx6p5IMZ@0eDYLAU%qHiB6t+&iX3p`eF}bGm z+uEayW>T>=Eu}tho$t8iuSxdlxp&6!M2SfK79PXRrRA-Tr~G_;d_UgcljaHXxRjZb z*yQr_k`i|YuiiNZt!aGnPY?awz*o2EYx3Os_I+yhEeB;krNwpB9r|HsxOB;nYh20_ zy1I`%@8m2Ju{v|;(5^a%JA3c>sxRxDsW{c|kyGmPNr5b>;jYQM1D;;>{%}R6Yj@;~ zQz|8i@AaHozy8*kvzLu^c{;0O?~m8FUYx30$}wGZl|y9Wex6e)Kk_DYI;!7HyzZ>B z_WrDU-cj}DH@_~pJ0+d@0#nWE{Sn<SBKGj|t?1cM?%3gR^;4^87NacNa?bQmyS;Bo z_^_?`W^{PloS&`}k4*E@)tRwH>{+-}--Z1L+~wwE$L}<`VccweeVS2v!0B%reNSvI zPiL&u%|FDX+nu-k#yOd?U0mymtBkBK7cG@rSi%>#)o0xy*ZP|;COTNH6R|#O92zFJ zYTCZMlc#MPt=1i5ef_Oi5i~}g5~@>e;@G9uy1IDR1G&JD0&2GF73`KsX4UCV|Frgt z>g~d!k`*zWTbh{I-?}Ya*Qarne{I64*?O*53>)99S}dEFvOqd9bY=LhzV8<u%*D=% z<wtLx5t1C3<neCO({=T1@uyx1uuYa)n^GEluQ1GCKD&Qk(XpG;x36ti2wBq~B9bRi zEBIhVMgD5$%*AZ)4?mW0P1kVI{N%k+KRc>Xk<$xwT7(|Q)aC#U)ykKO>(%+|(>i^6 zbiUX09GPmet<9D5^Ag<+ADb^51hnsT{Ip5tmD%G(|B~8&iMy>b>DQ>QkFvNQ|6<i= zzr(ZCcYom%eZO>dq06?fuO&_ghWj78_OUxa@5#+=p&NeQ4vX>WV|#8}#%{~6dQ$b< z#KN+JRWFwxTT|(KS0_2Mt7@A9v-j_x_m)1p{;#%6=<@riOJ<xfxMcJ`=tKKgro&Qo zYYz$TT(xHpcTa3+*N&>orw+JJSn<5R)!<~mnbz593t6ld3*0|spnteNTBlvV{^6FO zZGZevKGd7D?6KZ<p6PY}&p&)PZ|47(KYsj3nfyOf^!)Ux&;MVYo_O=tp9|l*HYI+G z+a0a@TZ1QN--fi+^~dKrf7xxDIptB-0)w|7mz-R9^y~-SWfQ#k=HJ}g@P}>wcf&um zUE7{KsCTLta*^K|_P?S(O`iF_m0Qd))x8pGCzaLgLRAGrcw*xgC<pB~c``}1aNE9Q z$K}jcid}9Zm;M>PIKpDjV)v<Du+8-R+A9-l&M|z6{5${Rn?)O%PabdHddM(Ls`^)- zctDU<eMP|f&oyl6DjS3v6ke=9zd(FrrrEPCbyp{BHoI1zb>yvtsdNF?;;KFWPnAVS z_aFZEIZ)=&O%_+(8TF#y?ms;EarL3U=a09~{xe^@^4f)e*%hi=4z222voJlf^OvV{ z>C11|H+&P3PcGVF*6H-z;pt8l&Zn=|IW}E*vO&x8#q?>DtJK=>XE^!aHd43Tvh1$U zDWN>E*K3q+KHHO>%xP4Ax@@IIl~l?u9jlIciQ9b7-SR%MC6eWjZ_3RS<7cx^Y|wm? z_xR1MlMg2uXG`(w%zM=Jtt3*?H1x*lbIUZBUAbhOdF$52VmGz+)n~;uTTiaql)md$ zb&=K@ljLQ)ZIz>!?Ok9RylijA>qsM4WAC#QGPhmqS`d|&=Cio*sIls$PNVvKH=pdg z$9`(OJhdWI?Tpjh%Bb31JTsQ|ZZ}@`deYBJUEbctYv1-v|C%VaA$vk$(M8w(!%?E9 zl^S1LyZZ9BPm6wSW~Hw#8YTE4=5%-Z)UP_0F~@t-RU>jY&3!5o6}HTn^+&wzY00UH z-X{vw4%!u#ZGN&rW%JAe?;Wh|%Z$0M*0=tD!TUMm?W&XWf3)Ar=j_v{b=ju)w{+*X zhgwh5O>S>olfG)p)XDL&l2<1k?#jtZ`)3qdV|qR|Y)!24eUBoG`g0qTntMO@Zrr=v zJnF>x*ZY5d`<uJZf9cUbdpH(dxp7=5Z)Mz^i}}mjPE>~dJQ+59v9@JQRGpr1$?csx zd471s)$2Vzy~lEA7q3WL_Q{_+x+HYwb+2YCoHn=pbl;(%qJoWYcUykS&-^O&{9aJD zzU}+4jT_ZZ?+gv!dv;=ecIK}9eKyhES#HOd#KhI<x^ust5Z!&LsI_vd%vs%SA{AXV zQE8jACwXfxe!uEd#!ji29GCfO^<fJis;UHJnWu-j{SB>ua(a{bwi^!X?fj=*d{M<$ z*jpIy7`G-#`}En)t$RcQP46nNyEN<iqKu<2I(I*bnq3|7Z<@|KA491%9*YlWdMfVX z`1+JPf<t+AWzdIa$tgFtCWI`O*PD03>af!0oWt)7{+LN_o#*ei_G#*dDA#lAN<G_E z!{twVwx+h;i;~h=wYL7YU*pn4HMhQmr|#bSb!xzMy-(RHXCE>y*S}=3CTrb{jI7Cw z*^?Ph&tiOi@{-qDN3M106OVaKzma<^Q)kk?SEs%F%&pG-?@hjO=%D?_kf-$)_o`Fp z{I|BcVSi`N|LCKiQ~#d(A3DD;tH@?T(WWXr18a?ia_uMjxc;?xeqiqllBkCc^%m!S zxS8HL;dt1M20lee&EK85vgWLjx6GfO&|Gn9Lss%kPl3A@d<?6Koix>69X!AF)zhOc zw)^6boJ{=sE2T8pZMV0{L6zc~5=Q?+h05Fhwb)IzZcJ<1&AB>f)ngXOP%rXGuiAPu zxhc+{125F~#P?<XXB4z>lE0+D^DiMM*iCY6IqTV+A0-uuSL+_81l$VRckriR;cVk+ z^Fy7>tNtdQEByTEr4;|HOY4_Q8%PUXyBO758UEAa&3*+b!6_<tO?<@snZr{5&y{)i z`rG}3_YU6sckEyE(arb1%};Q?`fao8&CgCs`+IekEU(!zJ-dF6R?p4M;>gn5YokkV zdmFqqy1!ZB^S4X6yC;dwTE=i0G}b$f*QcWWhd@<FK;73BlHVZ1y&QKJ9!>eCQr71G z_s-k0?QcHaez#}Jn`v5|!X|n=@7WG&oZ4AsU7px*JwN1oyp)=(bPs5_cLGlnd*)fl zXm4!%24=qc{{Bx!9ZMF8<o}<tPor6mHPKMJB{Hks)X8v0dfdv||7q8Ko;|4&d%a98 z`1I65og+W$q{Kh<tZdes)Xte9dqGfo(|!(3$DP}bTWpn>xzg`;S-^w(n*l#0&+152 zY;ct-NSO9*;amo8$*E7j#ar7Q;QIak$AcFK&ivoHfB(t<yC&5?zj?FXx5jkSE@k~2 ztpE2Ez6;gV`a8$j?W+1Yu4^3qrGA{x3}lY(uWV`%e^FlfWch<Q@IddQ=lWAlRd)Hc zb#PuU$+Eb8-6H&R&V<a4lIIKOrW#GY^hq~NFYwK#0|)N-JMYi@edt}N!tJ8n%bs>G z6g`?OIxT9Qi%j2*N$YOZH*C9Xu<Z_yW<kEe43UkB_Gy6}b=^m|8}YpOK5Jq8_6xh+ z*ER1HTBfl?!uXAV%>A0RlWn4}?KpPk!oude7vD;iO2j?&sM9<x5d2`%+%<BwPZv$t z)wSx=EymZiLTbu?TPE8qTCv(hF48zJ<ioB*iIGzt<*{!$7k#wZPbxn(H{Pcnytex3 zJ<!@}U+$J`-B-80-Y~28vew;Kw<_)jd|W;?R%NR*;|Atv>rFfV)CNA9P~o_LcZQ$1 z)pQ+GlbsLCr$6cP53C5=656_BbMU(#8|u?#<xkx%xfF0+JNv$R?X7IXLeWRd6~uE6 zW`31*I(xH1La(*6{asH&o><)a*h%&I-wW6LKU!B1E|(vFf<Iv6KYI&Hlh5_@Wn^<7 z)rWmr^ZnQTqPS}hqtbGsD))9bY~T6tXq;M`%G*cQUl}%)TB^6ZdbKbA#&V|hd{h<7 zj_rS^sGr}l<K88|!>1E&UFqKaOYq~3BBeVjT)K}VJpRT-uK%=T=ccj;jRK!#g7kGn zlIoj+-#q+aDlso^y<=JN=ekp$et(HNn;lo3Wo|rE2DS)$zeMT5*aoh@^(94n(qH{Q z{Mh%;aj$t_ul;Z0?H1=N-dex3E^mwR0%pB8{5fST`=%D$uQXvZ2w}@uX56sMq~Su3 z&h*#DJH?v2|31_?w|>X8>eN5icm8R-A-}GELt^r@R>eA-|7RvmZ<TR+r}J~s55_4A z&aRuu`@&jl;s@mqi(6V(wgu~EY}WQ!sBEg4kmp)sv3p(g6ls~Odmrswyyc!wmBi({ z4o_9|KF4q`Ka*{pxI0XFlTu^QTCcRMB}%T|mz1t%9h~&`MB%H|54NxOC|P2*-Zbjg zHSyP>_Nw)p71viSf7<w3>}Xp}l!$!qm)2d<!P1V8FDzT;6Z<^k;QacspEvhiPcmNI z(p++j%WuC_%rlFILn~dD)jvNFTXgZ8?X0~lw{!jl9W^qyk__Bdd1m1jwu%&)_V*qO zB7Ps(&Ad4KjrGJ?`6<tr`$_7ZR+!*wGbMIQfVUur=}s44h5G1>MO<FfTKc}mzq!Be z&7bE7S2G*`d;KEeea2>RsrB0aRGXaRg!8Y}xcA)Hxal$Xap>CXD-|`?U)|U3cye~u z`<d&0_ITU=xqVNi;}^dHhvsC)$`eM_!8_(1jdC_i%iB6z6f*cb>wCzI4M({G*QdIA zwEs5kK6#_QeBt(;T$5gZDx16P{)NXE{;z%W`_yuyf4?uB`CqVSKWMc7TEPGFTTku| zykeHRMNfLm{Zq%*6i%G=B6QYKn_JCSQY`)RUeAhNC$+$D+wa>Gmv=wm7H6`2kd#q& zQDV|op(z(6uU&t~ZW^~MYRk2`>tpA+UcU7!vrPSi)5VOZywlt3m+ef_KF#()w(VcE z#Gw<;OEw3`edGFVV-nh9DkOJMv9Y|oF@2}GH)Eo1jL@?68`2l^-8j59b#8#BZ9=7T zUV@2Jr%nEYU+-Q`UHxZr$%{v~uJL{kx#Areu<b~(hUbLbbMGFB8h?x67WGM#c3vJT z%B~%AvtixTmR^>K!oWTu<9en2JASRZZc<aC)LmvfGb`J8R@=h6FVlC*E~@JI!pmRU z5n}M#&PC+<&o+<u|2MUtSex-<p<Jo=a#hzw40$p)_Hf4ET65(33(ffd{skgSX6U?N zThaC3>c)NjBlYid&(*Jg5_$M*y=Ov$wa?d}f>nn*6(lS>+-&)UTV~F<V;aj{&*U*% zj_u{b(kHoLvAou%yQWXokNSB#u{!GL#i|=;zTbB1TU@Y{PsrVU{;l{;98uXX?SAs! z-=w&fBWSwp)T5<(@weifl;_7R_OPnfJZ;InTlKX<ze<Z>p~?Ql=&OB)PuZ5ScrQ57 zUnsCNYR$~AcbKei+?ja%td%dPpo^vwe^&jUDK){9FLp7+9E>qt@l;S^aiW1^#i}Fi znd`F`J!LSp&r6m`Ok%sHp`ZOImDSij?9W%;BxBQ#E5BEB&lkHBp4a43y6D@_-99;U zRkdHJ&D`JImtd(DvHpPyzfj(u#hW7E*nUlp{r@t2noq)>E1&nj+0ei7pS7jUjWz$n zKI&Bdtxvyu!gi|o{g8Rr=RUqSJALQD-*XnNc~X)2efwUv_}xC7HSBDU_U^c!;q__D zt^17!C4`<dM^CX+66thF)<4Q?ddBy_9p;8YDNmi>9h*WQuQ^cO@Qt&H<>-V1B0m`> zCy2OkCNzFK!LG?BT+z?)@TI-bFC|&!iwe0`mMqFM7P(v0zh-0<3H&X<BIt44k?Ebm zOoxq^C+)d+_v=R%w!r?gVm=je^Y7jjs5VHktY2~SG{fIliIcvtsL8XY{XcE@k&!vy zgxRNTQrPRyQSV*LMas7B+Mjy$zT9O;gRZ6w6}^`~#W_EHc=5iXy{_8F@sM|8wF$H1 zp>+w&+l>uPdi0V?e$>y{ld`^P%Cxy^CziV~_Vbwa2@1Z^lzM5z6<-vv$4+8lhnO?x z?{D}2OYLLne|$iincwY!Sm6RqF$2X90-lKi8w;5%m;#QwXTKEx%B`CFV72bWS0XtA zy+&FJZY&R%CHgel9cOf8xEHwO`*)4Sk5Bkl)u_~0`&2ij)G%n?z44-6P~zub1G&Si zU$$I3J&9d<;mcDoS!PY<B^lF<8`cEvetg_vn_bNxyCln+@b~S{*Gmd+@?+sV5NN@y zv|seo!Q=^jtfv2rv#sYIv;Dw4`<I;?r}b*(RRyQ~HuQHnpL^$=SAHk^hnud<K`*J` zUyu40`+2I)a6FapWWUJX)FX}a+Up;gJS^5>oH6P5@`oR0J(}Eik;kD)BHr_p=MKx{ zJ6{9(dCxo$__ALAK!S`<*PeyE@A<nj;_p34neubT6wO@+0$vtx|LGC9@AowJEKcFo z25PsKw%?36V36|rlLD`BS*nU@x^1FZ;3vOjFGbqC!dp)*Q)-tKn30vC)oA-;(n)K* z`lR<qKWu2JyL4-Z-Ts{^n*suwoR?f<+8m>)9uWAXcVfAJq@v+!Ps7;;-d+<XKRVy} z-0=fj$)?#^<*80@*X~(xL2Z$Z(#oLb`cv5_KW-4;>2AzxAigQ=z@K2vgry#QHzd4k zuXP$e>D}yqZQIT1mzI4NT9YarT<b0xoyNu_an_+;#)-d?L(!gb!siJ^%5TdRUM#%l zePQA2>}hWbr0Vy&PBfqAQ1pN5_alct`uy?y(dwi5>y+NEzq4fO<{ndQt8;&;(w_fT z^?%4M-=!UE=O2B1{rvq^?`rN}oUZS`_d(p|<L~|_&O5C4#pYBew>;B|5C7lD@6~!z zZ++wb4^ZPG?SH*}_|cxtznV6_asPcLwleV6JDp8W3ooyVwf+5~{`9e}e#e&IT|19? z`qo>E+AfP2_paW2Tj0L(<9+6fm#coAcm7_R@4xLuFK2(6a{7OB_;K~)&wj3NKKoaG zb!C|R|IiN)rmesHCjRA<-+^lq|E^gh#t|D;C*s0Ua!g}RNtwg-s@kx6Gh;6E3_%g4 z85?At*od80a?#zTlHJN~HQ&%U+_!gO{e^ti*S{w#Y>MH1c2IA(&WdOMPV5mcetOov z+V+=@S>&|(*I{;xriSNRzMGr%_>r!**tgr;7kquETd95D?7Q3_g&(oAC+*BU!JTP1 z`{tA9_v@T4@CQ!fk+V6SBi+6J8%zBm*B91mKk82K1f`W58oz37`B(cspYw10rw3pE zO)H7{A=28f=U-OTp?k16L?>TOy8YIN%~Es!Hc!46m%o1dea5*tSMM`gDf+M7E-`Dv zA_bj*xSh)a8qEvt?#=MH{_0|$UJ|#2O}ympos1i2is<mvPBl2UvtH6^Cy(svkgyAy z^;6H?$&68)TdBCa<k@|(iRZx1VY_s*@BE)jm2nk)T~E)NOg!h-tM&3sxAl_EjNP8; z&7YQ)Jexn;JN<fw`Sf$FJo_SFo~hn7@!U)ckohGb^DlwSFA2M#Ir&`b@9Z3*P1{8e z&Az_nRNl8t!HcmCdy^UR6?UvWaYny>`*W7`_2IWXgcq(2Uoq+Cnk~*LuP4kna!oUj zE9cwRoqNi73X2PKxBWlsm3{4E?}l?r7F&J@-DLInS8B&Ap_Da~tlXFR1ZcmE+5R(b zU+uNBAIJG-umAG@nab1qcQ;R|joXyGvElINxhrRDp4hq1V9C^VM|(P_8*-k$u<^G< zaY@eQ`hc@3n-27~&Ewlr6`j0%!a7&>-<BSi6r|>UtMu3I;@&=WP3Y>r2p`i`$~q_2 zLM?uBmp<FX{OrEc%@Yf@PI6@VYsbs+$#MC4=fK!A%#2+@MyIv@xF3(bB<ATg^^H@` zwJU*td?eqlfA?tZ=?O_UBB!MJo(oxhqj_#<=?#I2)h5~X9qjva5?hUrKHc)$Ed7-E z`@Ges7bM-7eMV%fSGBRLL#{#a6sdJHgPtZvpYkc%5xnng=a;qBPOmntw+OnBAf;(~ zYqqOQMziOXaE;l{Mlr<`UtYSf{$tPbGx4>09a~c-pIi`@nQz9if_GVS(BZbWDuc|A zKm4QrthadR%6ZX?p`iZg&;D?A^=E(mkGHGO{#_sb>Ce)~^_uPF>IO~9)5Pvv(0diG zHR;nI)s72%)dr<8Zierpp8s4mJHK$Ha<RDDOy<gu2cQ0kNLcxMZ>gf$Da|MjJ$40; zNt#OLFZ$%g%76G(u4H=`%<#ixXM(6E<MQqM74@I4O)zQ-{LnrtovA^u9<r*hWE;bW z#V+1D-@d=E{`&0D{Q7@;D@DD2Sg!s$<+Gz&tE__e<Gat+Zq=x~#T4&!%53%u|8K2_ zn4{Uuo-3?fb@kDWwVR%<Qtb8oz!3b!cvj&;hQoqtj#l&bY)kXol!0Yk-`>BL%nuZP zIBO)<$E)m}g}Jit^}-`YzxU65Q-AgO{&?A0&;R?Gef!@v@9ORUmr76P#~Yco^v-=2 ze6s1C#N@7&rfqB9hW*{VanJSRpQbI=VAJw8$dH_R>&J_n^hb*peX`-p+x}(BiTahF zc6Z0IMJfL0_v`a7`B}fAyyj0<J!navjqAVbm%44lw^;sHN{aDhQ+lBQUd@-r8p*M8 zs~7*Gc!pWALCfM#SGFo!S$zCr#xv=os9(Oom-O2E>KdK_pQM(gbj^zYH~sY*5jH`k zZPFjQzMr_dbMraA$o)Ika@^dY$RhB0k{qMMqQsqF7s{C}3KDhl-W}_k@HMyo?glj$ zPqqK2ztr=D7ybYKu<+r(^^gBfKHU2+{^;ggf8vw84rX=<^S3#g6uBOXFxk$YTp``! zD79dT`%Gi~^*++2MSp%S-(XR9NaaVf*YpokziTgAWffe!o_2D_Gw)+Lo7?!_Oo-h% zD>ujF;cAsu&0VwGIK52&y?R+K%^aB15L93LehKGipQaaW>VJK5UIolm^$H9WuUi*u zuCMi~=;*IqF3VSc{mHrwv6jz~bN52a-6z`qPx);%$v`;FvRd<&&xI$96N7C!6&)9R zKL7XL!Nl_On=UWu6?l5PCSnSA*3;14f7x9gaMXG<2fQ&34fJ@ukn6&k_F3kWzSjrL zYV)c-WxhkgNKNn8*6r`23+5L1ueU#A*%oIL`<XH1*S9Ur>CQ*2iu~VaX>I)9l;JX6 z|8DDL#;}|9>c7|X{6GKi-?9IjXFd0PV}CF*Z60H}W8o!#F%<);g;J@~$GeQ8bM;Q= z?Jhl?SIxTY?l<tb&NN|#Q)Tw9C1G;*k@Xz+uN>BXo4#hM{oCq@Nl$~0S_V8g_Mvb7 z8MZ1X_tP6+hnT+LwMd?`WRhj~POZv^PK&(GS6S_WugmMJT32)L%%t;wUVPuaV_H<* zr;}Cfho_h5-05rj>#*ash6Mw7!Cl1PE3@CuoN)Eq{YQ{7m=8N9{I9QnUs0d@f9<14 z@!#t^``yCyf26zI(F6^`oZUWgMqoMbH-71do2K1vyLt?~+uiff=7xp$9o1F0d~8xy zHP-$aT6(fIDDquX_qy2yx$C&q`J~jd|8X1fPJCxovN<3v$ZFql1KH>IG|DdeKQl?( zp0=`Y7FXaWOVtmv?rvFH5m&KRq<%B+&R4U3HoSW;dN4!0u6WANzhCoqt&%nQbunRr zX3^ou9-sV~DwikR%zg@9c*ixD>CGxF7uJ=z`#feWnvis7!`!;M+g{+6cT&cW+l?ID zx0hZ~temQ>l_Bx)il9Tpg9CHd=<Rl1)e`l}YxSvm_4;X6DiY0qTPB+XR@ge%D{1+d zx261y39#^w=vlD&HsjjQx63T|gT`hcLo-i6Lo<!sE!X<LZhO69Uhn5D%ez|(_b+@D zq#eJu;nX8>-2<`_w<n%U{npLZevCWnm?@iA$4}n<KXt?BbR8;Lv|j7#+__oLJ9qOa zA2IORRJw54?0KQ`r5_jg{K%6ntPh=__^vp+RMz+N#u_t;x5j@A<}}~Ep0++!cK)QV z`){blS^U{<_3!(IJO6K5Tito{f6bH1NniJ?CKW7nNMy_xR-dE)KKE&o$0fae)x4hy ze4Y#W@lBlb=k){L8Qjaae&G^n?$n)l@GEn=@1YIRZ{Bt<y`Oz`t>}!^Yj`Ve9R50| zuzqjr(FVyEyF1^kwf`zT%Tg6K<O16Fegd-Z{lSGR|J$Yi?w|GC^UMARYqHNpc8MOi z`fuv5ofpqF@a@=Ozu~6fkFaekLcdo9pJm{=$}sCS+X78?1(QV3#&@oscU?c?8)sRZ z6V2Gm_<T~WMfYbH?V|UPeed<Z7waV4m{FP7A%EU}d54PuEmz;YN-q2LO7f_`=>$EK zEp6VngL&RhzTBk59Q@?n<eyFQ^*8^7<(JOmUfN@E+r}?2O3<dLZ+l?Dk7)*V&Q5sN z&|xm2%MUO5_x-`ueUksn_v}CUf6J`rp4a|Q*=*CKF#V*j*pH3Lspn<cuivoe7BcF6 z>GbgJ75SY>=gsT0|E2GHw*B)J$SBH7Bc>C|+iptV);bjDZI;#Mb3^O!d3mK7q4kM| z-_Dw~Y<F1y(#5a+ziIc*o8=3CUFj>jYrXGZ-Gu$yo(3=aFMjX)bpO;p{{t2OKfZVJ z7-)(A$zS__Zu{qEdj0H|t$fj+?w<;)3H*6#-qOe~tE`s<Ogmd|)O6GAmTAM>ocH^c z&rg1O^T?eOPk2R`Kfg_zxMt>pmUD;x-HjDsed&{x`8GB3^tE4~x1Zm<Eo$R~`B}!! zGxL}1!MlcT!Utx4$R_sdn$nWlt&^B#xTMYB^;kcMyT(0Lig}uQJ!BVqu;#k=skS9o zD=(dkjk&!m#IE-1B(X2gPxG&6dpBdYX;w-f*QyOamtJ1Sw_JP9?FrYmcF1ym*yC>P zwPoU;AUE#4+aB%|Ew{Kn{o=N5pe^io5Aq5bymDTiKYgY1@}??3XZMfu>R*&ptx0-u zYN~|2*0MalZ7Y_DJm__<zcat;?Ejdi$MdSTZmskG3f;)gXb#!Po^rnDe|705OHfdn z{;NMd>m<)F4Sw%^B0euH3>7L&pu;K~ZkfvRF?rmsV}Cg@w?sC)(tNX(t96}qPWU-% z1CH50t8bqu7hQL(_R)(ERu#cwj=8#Xwf8@aHrr!b&!>Ch+$k-q=lZ$!3n#L#FKk)5 zcga(kzT4kQCU^=R=`f2vBeFK@bmDY5Yo_FYC&w*1f^`2~s9M)5oA&;MaQoa!4k7TE z%AYwkmm7X|Im9^Dnrc3W52<ivt(RW#oMF2}A9zS5OjBR_K|1SJi8AnzidBbOJ=cRn z%UQoKo2~R{2Jioj)vu3S%iOf+-K3w^uQ-;a9E#X|b@Ru0XXC3^mudRn{N?Z2y6=Kq z!OvgsuU@>j+PV1u_mtxQhqLC1zWc8?rE33-vii-{Huv8Z`aS(8rBgX;(dKEVWxhM| zANN%c>EErNFL2-Qqlwqr*)Dee-o}oBukOijsTbK?A#8RqiFbO5*S3|@-mTs&-HO=E z{tdL5-Rj$uGPk#%?&fNmu>KX@dFsTXGkTwI_*#G8<+b3RMCJFBB}#d6*N%MRc1z!I zSDGuOIzO>#U7{76?C;j2b7j>wO*XW#u<~0r`4Y3N*W*uVPxFFxdb&zKZfMz*v|pjV zAv*f8^num6)!bWeefSpY@5|f1>z|nBB<?Gx)RPPvl}l`So#)N9dARDXlE9IW_tkP! zkA$b1xoy-iH`b7_>|dri@4|ZKwQmIOD?i_=wC+==_9;WZOLY<lSTeJJy-C%+Xqu(G zc5UlIv4kTpmbs|w?z?mL!Sy2%yY1DSkIp&pPPe|$>aNS$>?WZpSwj9lv)<3km?&TS zVRDX3&^*2^i*(uA{3rG8QCSe2ulCMj@<OX~$3ue@y_&haG*qJ&xh*`qb)iQ~?UKdE zl*CPDtw`14bm9&VIC62Bhf{p)54p2Nx7Y8o(7)M`W9rJ1n-x${zdHZ6plFo!TFxCJ z?Hw~_#a7;|@5%_1He@n=cHBmdaoIQDd8$^c1Ae5$P7rw|&iCxv5tWa}PRwuXcoC7Y zeyyNe)ZWTy|H2+;n_0X`O$+L~7OSWlbOhzv$ht;J#fme%?KS<zerS&EQ-$uEl0thM z_GX9NIb@RHH*e;Pd5n>J6_l$(JN>(jg(i9mY`pnNxlwMHTfIuc*@q{>k8fEsqxW{! zq0+=m|BKbWjhix_*_13w*(wQJLHEeUbx))A)Z3B2x?S!%2j9OQ@qcUc{8efxCaUW% z_I_rY;{5x}vg>~<(xSD}*6b)+xtys*k7thGRHmM|IilN_OD?#~;I?m`z(Vf4M5C}c zM<cH@O0iEQ^Y_(9T@uf!PW~g2Den1m{r_ji;w{$w^DVcZG<l^iFXU3T=Bv)72jInU zF(>%rCM6$j*ZkA^H}m9!0&y3+#pcnUVm{kETVTC#vz6cR1o;y655?ciP1o$w@hx0F z-NnG~n8n+S_0Dsa{I6_ZJ`uEmFWoEgK<3rGi8~d4@N572I;lQ=#hC|7)~GH&>!q45 zt1>t2o#RBVv!2TDg-zLPt79J>+tj?$A;5*hUG0Bl<H=A*l;w3^zV9b(lNO%iyl2Vf zBNHS)pRv)5%@j;lOELafnwS*zjOS@%N>#SLf?a{bxu9$Bu6dt$bm^_$-fLajXBq6K zYp?xqXmfo=w57*PugzI@v*TCoT%^5X>#Ljl_Fc+XRXWfAK;w|7RK@fg?%(XZjT7KY z>o`!B)<s@bJ2_KyBXnsUbY)#P`pUYaU;R7W-(O(n>eh09Goj`S^QScNrT5nPZm7T5 z6s3^b_r>gLSUO|k>}fgtmlhdqQ~$6zq)PSZEG?hCf6W<=8Kz$SGc`J}?quGh%8S7h zescxccz6o*mN}%a5578mkLS~;^FlMlj%`!hB5t(gue^ifmW0>WuU}8P@v@@+CsW;F zM;0r6Yp#o3sp=m#$AukSA7KSqz_(+<zWR5+_suHvUHv`n_tCGvH}{ACJ^gv^y+^-y z?tLpRa^=CU`l@}Gz2)}IYno)SueMFyKtsoN*8=I}Nm083CiVueJmYsJ)Y;&2(JFyQ zFLNbsButrWbk=dhEqRY0ZpuqzCR*KP*d(=hQ7&gx&fWukQ!*o3gp!TClZ8E2-hZ4r zsVOu>w0>S@sNtT-xJSFLeTX!gYL(vmRkcgb=jWNThqsF#Uj6Us(c_yxZ<nt#$;n=( z+cMKb$s_HP*@knnJi=EJpSzVxUjVP{+jqB6HGGQ2$(^ar&)IbkuB>^-B=XDr#kwD^ zHIKD9C6^s=+Oozs{d2+2+|3^hV8;-EPa&vBIflT<$s>Wi^6i{cpV{2`_a9i~k$Z64 zg#*{O7@q3gnN%_B*0GnVH^cW;$Ip;D+PHSv)t9LgYj<`QaVBe9r!cnbPWtjiNM!xY zbqkW`-n+@+T7BX@dvxS?7OCFd5%*tj=~$gv`2W(WxnA7WlX^-X9GF+?WH(EyeztO^ z#fEgZ8RC1+w#^K#FP`&7+4J+Ft1i2z`^A+T6<t_lVjh+0x?*+WhSIQ?eDj6)Pjbiw zv`l(3>p`?LXWOggWqU-XsfowG$*#DidBG_>?ty23!7S&!+C|N|%l}y{kFz;&&(_OV zR&cgt>Z%=wyk1MQ{5@c}&*k^EM-0-vdUo}Ptd@OK%v)@J%}~uP|CvOJRhNBK+l-sL z-bh@yBGUbq=f6U$%G_hq4*E~g*X7%L?ZG4F^+_*3l<ME%f4x9G%Klp6iR@2~5_c5y zpS8YF?|CmAtkspj)}Z0yC8c>Up1wJdI=xZ++tF(k%6@Mdx{KfZVk}&|f3}~`W~0Lz zbC0y1I#-{%$RahMbkBiSt@UwD%b!iTclOabwT0Z(<$_uZ?z=yHW2#|sPMaf3Mq@?q zx;5cl1(6H6rcBM8<2aM&KChAB3l-}(RUJ#dMqjS>e66-yZp-ZVXLep^s^L3vtBu1k zY7g)6eQi!Rb}P6n$vSz6Yik2v^W_%fpQ$#vJZj7#)tQOW^@si}@<{exDkkO`#r;{E z&s`_`finL&(b)k~d*>XStF6<>ys<^$MvF~#x!8p3pR&v^Y<f}F_4bVC^3@NmjyG<0 zjtYM@GvWDz(9=(}Vy5(}axQs%N;1?&B_nlV*2~w^_T2fs{PC&#p)w^wv%fr0Se<m! zpEJlr^A77(*6$r%?FKLFD_K7(`UZT?-Z>?Iss7D(6Bau^^;#e*vT3g#J6CC`%gVY8 z*5G?3nv424Q^IB67AP~{<yh^t_fpxJ8EjR07w^<eUHI#%4&(K0ft&Q*<}}$w%V$4W z>cO9Au=2hKo6^(R#H*#}KD=1{XM+1$x7CX{WS=YKoVcU#OX)!1N2X-<UvBlh_huhA z>^c|F5%eUw|MZp2s7A$VH`w~V6Pc3*Un#Cv_jgn`;&ifI7sAhf<HtwWiNRL`&zdBO zOI-K<kSJR2c+*PDYlizBM^0z0vYxJqvka1={YwIh%Bp7<=GAYsk^1}~(L>5MTE9N( z#G=3#b3Z@3FzdN`ubk-m`Ze{1LVNw@abz18E3KdBaQ<kQRoaxV6>`<00sqSU>ZdR6 ztnA<5bl%yssIxX@&TqlVF^>=JS)+F*a?<*Fx?Kk^CGE3Z<)HB5yQY_qd-S9vrN{G3 zeI`BNf89ENTcO6YfHkLL?q=|;x}<h(HVYfuqQ|!SEuM9E!ZX9%nM&Lg_q8rORR8!- z>(P4}D-Qdv+M54=<J0<Tm+cqo6Xa%v=`pN5_5bgyl>2-BfBx_wW%B=A$nw8y;cGv= zRo?aWVe{)!DKX(z?fDN(j@mEc5S*c8Z>~JmTgi*7zp0}u+~v}{mZztc{%FZbu3ej& zUvOyQ*UDYGlOk7(dm6d=>|Rl}>Q<2cf%?j6MR9lLUH2=LV_h@Dc23xW@Dlmj?w#){ z(&xWaUB<};TGo=ZdW-$`U3b^by1PYe{~RT!=X2SEkB3%qU9M2MTX3fMxx`u7Z5JLC z)#z-fs`tLJuywyBpY06=vt8d06tOgMZ_(j1O}_souJvc@{d0?&tiP*kaFpt?h;cLg zx13Nvt;}feU*5_?-#broxE++Q+O=2j1y6;3y#!=<^7P_ApyA17FCfE{r}&G*w5@+X zVu&=GQ+z#YicM~#zGCWZ-;jy6Y6qEpE}r+WP)f8oq~dX0_-tZC_saJd*XU=T{^>OR zfm7y^-i5p`e$8e4wA`jSuy{#|FJJotj(XdDuH`cpJX<j3)PvbR4so0QeTJ+=>|VzN zIyLHdd$oJozxRv7-64lY#r~HxD+qm6&>AW`^YHmiLSKd3qg6k~A2A7gWX2+SO||gH zoEJ9Jk33vdeO9Qw+e@_b@cu1xK16T%m8<rrY^|v4^4ym@CvQ4(=UdfU^=EPICiT}W z<8>5!x61x7pLonFd1t;-?^dM~Qp-1rl}?|1?AE0dk1SPF*H52%>{iSEHzwCkl|)xb zWrs&sT}q3~+Uhwwbm8VzCf8DP*YUcB%{sPgkFRp?*4-OSd$;bcc%8Xs>auCGj@`QE zm(7&7Gjok@ug<(%5q>KwFGpCvHuqD}oo?WJxjrKL_1W9ME-&4<&Sk;gjd9aWuKCqO z&6$|Hd}AKl_J&l~R~d_^K2>?Og?WDV#t&;g6?N6EPmDXqb;hjHvQ$e~TYve*1M#-{ z%VR=y74?^M{p$Q(R<(o&SYh3RnfJ&C!jPtNN7KK&<0P1huShqd$s=l<5zmER%) z9>oeQGJnKUpDDHJzxcUHrH<d_&aQENe{oGiyKSQC?bR!0o|^DJd&We;l^fp&&OCmh z>&#}apWAnBDKEO5;hFh9=fQ2i>hw%!&+7D_R{6KAtDRdFV~TEBTZ?rs-@Dp#Me6ds z#fvvi*;0OU+j*JH_gtmY%l8^9>e#-WyZ4~k<$EhPO*-{#$>IN7>)Wa<r-VeF+u>UJ zc#`qqsarPj&3vfxHEf3Dx+N!%o;|z#1W$T))jFP_7n`fj_!{kdx=Gn?|06-iv{&+Z zNs)14Z!WMMD%jfj^psTW9LITT8|Q5On3}>L6LZV#S$Am4oMQ7G7Vc~89?x0&F#Q;} zsbmW4$`@~Rb=5`h3T@tG${1TxFR5|hrhE9M?P__9eg0Bv+opsZT@##{p=N$ZCG&UM zq%FGonzytr9a!t#W?HJbVGd9BIkBkI8`MI>Z%bbD+2KDsaqYZ0Iuj=rKZ^^xHCvtk zirU0m@wO9hO-@yhZuZGLuOuB6=(K&W;eHRZE&1<tt_9nuKHq=LFh}*Td+5LZ!;kAH z+Zz8r{%`f)vp?5|+GJP#TYWEchMM~k4fECMhc{K!nP%Br>wObeJ1B4Al~~dHcVEWc zsdJKx%idTn4_&})-IB884d=GfF9InynWsE%U!di<vAa~wu_U<Yhxc4%q+#Vx+PxN; zGRI}7{L)<fRCQLuB-WLsj#k|lW3#oKZd{vt;dznz`7?(t5~uoZR&kun?&9}RrH!TW zoc;G|_V&BB-7nYo@;|**6SBpX;rN#S4IDBH`7;H&j&O&HT&jxL;Ma3NHZEf8Qwz;0 z-=^dj7^d8LHuq`z+(etn3d=<5bq_w#-3S^)4wzJOd4ld1&RORC4paY@7bVU4Z-3*y zea+U5|HD4o@c;JTuqf;I&O;|E9nY=r)LHRdwQRcSC(h!#XKjtkF8h0m-?^~qcHZ4h z+0%}0o0mEL=gs{Q!k_dGZd*P5$c{rh9tTCe50z4jF8b3F-ow9e`tv~M_=9ghYKzo& z&Q^8ZprK#ZpLQ!<Id%5O<p;m8onCq>@h6k{sUrnKSIXWUVqAZJ#k=z+I`a}H7aX(j zR4q2rkXy3VUBl{ab6?4StQ*8<GM<@ay~eQXq)oB!(!=Jvrx~f=*&N|*Iy0}e<yg$G zZ%#e$mv5{pYf-4bwZ-VgpN4dIht~~#9w)waPms|un^Tx$cq?e`skaLb{NJ?jgYm3L zgAWPaCJzqiymhu_oa2_V6~0GY>&Jh;Z)QK|hkdq*h74JkKWW?b0JJ~cifd&>nd0Ji zQYo!jEvK!Pw`dv49o_%)=V#Ee!7a-lc!8D;)}MKFPk+j(%4s2OJ)GB{?J0P)pm5W( zg9?`gUY>I{=T22y`nY;cO!%$T@{7;*N&fP^t*jrfxM}V2?5O1uVM+E{i7Q{8;(XY# z@nx59rFm@f>Do1m<aya<Dw#iVSLbT?P5QW&i#uvrSdKjdc;TS%O7Ox#^EV1I_h+n| zofT1kZPziKr-hF@0+r)JW%q|yuHP4uYOA^7wO`oueOk(Ecj>Gy`p)<|Hr_1n52t!% zMp(F`(x$YI6*DZjW~XWPms>9=eWo+7<<bme|Lr!N&L)n6;;Wh^Dob|i2}If3-PQZ> za?hX4<nvK|HNBR3D;Tbw(x2tKkO8tYoO{oTg8GS|t>Mf|m%QBju$<-Ts))dYeqTaO zV|_&8N{)kfhCe+TlDQ&#cluTL*tU#|ou(;Kju&<mU%Or!d-nLJ!v&c<_9e?N7j6Fi zt4(L>8t4}7&(@6MADBY!{x9BBpYi7Z8`*c@rGqy8U-u^*eN;QUh7q(r?}_9E#(MET z%+mb_wu`;{oZ2UI;y{5-!?VZ<jnA?foX&45NjR?|Y81|T<<Yr!aufF%|9c(t&*4q~ zrU{D4&mb%G#7Y#~C(Txh7g@WCC8Ol*<UjWVGh5|BTeEdk=VUQT#TH)q@FE~m^a#uH z8;2iee|Y$2SKh^kFH7If`xqk-)ql&PzUEQhlA@yNx)!Y~Ki~3ukXIM6Ins^!xz;wN zg^jlsTyx1(*sXfo!SwRetM9jjXx)9JGu6L)^VW$o!fHjg3Ywg2&!{?6n!@(yXZmz` z<qF+t-$mV7OMY>s?E>w{ZaAdKvFz8g1Mx*ypo{Wm1yt@60By<sS++mqSPk>6`t1)- z_+EJtGnaXF_8V)#+4)n%7Y9k&omL3B$@+Gh_|~WEF9dmu9oRHgP3XtU=`E_S_utqb zd-7+0bGZ8P*`MY8zu5GDl}~l;S2)q?Ihi%?O~lQQt&dH=oo{OKNzT&PH}{uv_?wGq zXTP7hUNh~^g@3vEkj>arUN+dIOx(LMt^WVEYm<6s@#RIQ{`l$4viX(1PS~oOZ4tV! zOy{0>`C)(BZH?c0A?D#srqS&7TTkVE)x7xMDD>r~$NT&I`24v(#<$P@eLwuunw9^` zkFy)kyQA^a^8E+l;3`?Ctx^v+O<NeXQn|<No6cD$;XBa>H?28QUsHH?(auv0Wqzp_ z`+9Vy)$5;{a8g>ME#oGyN~EzP=iJuXw_e(hp@Yfwr!F0i*l2Nf-LB}0^V|1){KT6O zzQq}_BfF!dY}M)b#QE+sIP4q_O|?|{@J{c8&U6ongf*gGPCrG=^6p5Mn@n9Ju4T&h z#^)t(kDJECkDbVa$@Q?&WYO?i>zh5X>;5IN{occ8f4=IjliTq}Y29{CrOzfC*-Q0h ztX1q~shD^yo-=K7{HYVmubaipQTmx)>zj~mJ*zEIc>hWzQI0FylA@+8=lXCg(8Pal zz~58b+9EPG>`RONC$x1U<BgQYs7?Q(f85z#qjjx*eIGyf^ZNQYS=qd6^{XqcmHZ7~ zq@;t?T-MH*_;cH##R^UfjNKkC+04A_+T~4q${udfaa3&L<mOE~?J_%L(;Ah{YDcE3 zS1>hu+?{;c{=}mq&edCkc3n7Y#q2EBeDa9e<R<-39%t^|pA-jLKjOw3c+G8NzSS;k zubb!o9rVnvU%&nO?e`6S9kvpEg_Fu0elC2pr%t4WtLqf!!%v6Lzxk7Vx0(6w*~Z8D zCpYi6EQqOm5V2MHw#fc%yxhxq?iJ3s!1Lg_f@gEak@N?1f=dJ|H_SYLzQ|7a%Wo5f z6YO*CDjE_Ko`x+e4wy12GVGuI8gBnE1Mk-hd)HevXPZ{_r){mjb;YPt!&i$X^5(gq zy#L=<aEkOO`2?KK4Y~2Z+I{_*AN_|9Pu|=6cYoJ&>jK`(A`>+jHQ8!@9DFR{`k+jz zrB0yNfoE^Eg_CFgYik1;cFqavKOKzR5;@!y_dT`V=4evI$-$K<Wus6w!@rVWx&F1a zz(T>vd{<ap%MYeMX+Ew{FWdb8#>>X<ffmdbNv4`!3T`YdjxANudp93E?%2h7>lfb~ zBS+>sOIZecg_B|VB1?9^*)Q{V?Y+11DbxRk?~~{+ds+YF{1e4nXBqE0y|0tnTyo{) zweNeM7~cD}ublh+_I>Y{POf<U`~UrG<qyO?m~4Cx9KBh&>1sFUKi<lhVfr8H1@An4 z%JHwaN#<}yi<8YQtG_GjzdruC`@8)&wSQ9Yg`a=^|7=fvS>?UiKh|y!H2eSk`?tP6 z{@%~_zuDc{XaC$k>G}Ns7vGkxbiMf0>}td3!~Dz_-u}D4cJ2EEw-tIHs7wfAxRW?Z z{MM~gr`b6h6gbriJ7yfT<a2vmaO~6SO&%il^&UY&cl?5%Y~IN>DRR;x&;0Dy*T3_3 z*s#11e6U;Q+y8wDagVR>{<&1Mq_2PZ_Pq@6b8>k(zg%RQ^!v$H0q-ArwJj_gRrN$; z9F;bHJNVY;+Y<J+WEKvuq$h@!Q_~s_u(*a;D9VGDGIBiFZSA6=!zFI-CKI%ZIiWns zozZK?gnH)7E!P&esvS74k=XcRik>mUV#$W`az}{*#SYHUA2U?mR21iDzux`+z=yl_ zbMNNl*8ci(@^E02^A=Z8V~#~Ct%)3Jo7Y9mW`4uEzPy}MD)7{~UB7MRtG{;yJbpRt z`&DV@Notminpf7YEtj}|*>35KhpTuJS(2Lmu5_RH`+tLC{mjPr`kg5zvWH&uYrZ(H zW2kfZugEfkBa3ThxXivHaK|;U%fqLM<?Wu7CyTBrD#bB4H~eWRpLbCs*`WXMW0xHr zmv|<wUAu<kHDB_<`5L|&NpdP3v%X#VBE>4`#PU<0F-2MU+yNH0KQ|iAA8Wg|p!c60 z@1E)@OWvq9c{=>BYca0(5}tQ4eCG$*2OJI`iqqzv;tikBmw3uSh^02HoJZN-g-i6H zvf6jWwz^BVZzbiNvSQ3L^qV~8z>IUV;&pxWBjySP?=|uGvz7VNp2H<K6n>Z<*Joc8 zdBs}t-sKkF{}PSynzEliO}SikvO<0KTj9DNJHjQv3pNA)33AQZ%Ky0jM#kKIFMqyB zEN|zX-DJAdhW&iqBWt^5%Vp{WJadH430`M0Ty4b}G$kju^y<eO?`38FJrA4CZ1Lvr z;_dGBvHzWpKU7?B+S6spRi*TAQ}ogfNlq5NDBI}iwJgp`HDfh*p1_y?u1zAbmpHZa zvJ5|pTgI^N-gHuP<*8pAwwfNfxu!lfxPjM3Sxj7^M$B0L#`2n|`l`DLpYG53UtuV5 z@6YeYq5nVCe1G=m*WU+8KjQwGJ^TBgHQd5={lWboMO-+3PDz~nGItW&OOvOcmG~C6 zAG7$PdAt77g8C%oZznSz3%?g&VY#c=q{JV%!q`SMcuINHDGj!!1rq9xT_@MD*DVnG zP;b1%>+w<<N&X^6EsJ-mt<xTQvrg-~E<KxJi}G(b;qLi2dR#tT^D^Alsl;#Se!}Q8 z>nfvdlj0+dReg+#SU<luRVirFVE+HU`~9Og$N4-2rt^gOs?K?JGh8p|$dgF{6Z!vW zKAdyvM}xUD`<LJE+a3S>{l5O-?gp;S22*mTc6k1)@BGN0`%3unm0;0eHx*H}4}o0G z1`A#HpEk1H{8VSriA$dn4LC0?Q4qM1s5N21l$CKoK~sHIx>hMAHfwO!Eb$RmU2CP9 z-ZW!QXjkp2b&UUxtQYn_zzsS+V$Lju)Qg*K4NhzjI>Ex};OR8gmPgXctnqAsU*zqR z68_Hf`#8TO*3T&lOYxc4k)zUMsQLWcjXm=ZRClRub>R3GFsVS*IZi89<gS0uyARR5 zsmtS<ju$@YWt_9Dg6Z;s=8&tZ8m6mjPyOJkl2h9k@S(2Y__I{5A6HL#^3O5S`q<Yw zeaig$r5}#4+<baYrf)^4dMfMA)<Wq=w_{gjmzQ#!TKDMqpJ~tQP5Aa#Z?E5Snc4oK z`xl3ki)PB5lHkzO3sCo1;rQ~QX5uqhABPD|oO2A5yKgh+tmtBPRrS2YY|j$%KjBzN z`3#>HN3o|dGmSScT6W~ff6@DQS<lQ0Y-#S_n>lUSv4t(=wQp2+%k|laEPvBqWA*M+ z*{;a+-9LG5-hKJev(oni%hLK}6W^4iy0hy97AbcGnIx@?(3?LsYWwD#X?4H$sV8`} zzg7Rxr0I4p#^(F&<<lPsUvK=P|IA+Ok*VdG9eOtxPWd-wlIE`~kH7s$7HDIr?JGQ# zo}(A8{7xZY!lQpID;YM$eRsJ3{F+kg@98Byk|BwURHu|DaM*Rm1>{7`a5T&9s-G0{ zGVWe=pzeI<;$TOw)k<D6pABmsT<H)H<(}~J$eq+#NopxyPQDYA_}uF5XLycR%9>-j z^3ww;*{_wB7OUj9N-pQ;a4_5Hlj`(!EfbgU*XzF}1ZN~2Qc*n`TO_`AMiScw^;`uz z+a*N-3wn%;7xX!JayspD=rj(nc6cz+)VW?gadz%S&D){UK8C^%9-dKIbSXoi&{H{w z#nMTfYvY-n8k*WX6LZ+O|NT=rG*`dS<?T{`hWr28Y!*5;OBHN2^s7qfXzX`viVqSz z;Bmq~OKf>lM$oBN^PD7oBi(b0Q%;G+PcY9p{O$6}9qzMF?>9cuq^H^7AN2R~y(g!O zGy5*q&*QpSz}{?NzUjSzsrL&9MJI!Y%SyZKmPZRd+vk~h<9=}Ig^MrmE<9`V;jhMp znIEP*n!Ku<p>U?mrcC~u^_?BtHvPZ!bJ8NaHvXcA6aBwmp1t`@!^VqI8I$=p@&~in zG}Ywsit_IEDO<Ia!RKJCgV4SSZyW1On9GAF^$9Ngx=65olC#R@*U5{niXZA)bxo5; z(s(layV`}TnbLfUgj@Nn9+o+Nnx*%L<y?;7bOolQ87loVew<1$j!u(O*K{m+bm{a{ z?KgLiKd`%TarWt`M{`fz)N$&cDd;5-?NT_kysoO)E+xBv`hxnh%EGT3>#M5lBx?Tr z{BvJk|J)PrK)-!^EbHITf600?VAJ(Q8UI3~H@`JtORxK>drBuxim9+5=z)!spi<-V zMQpq7S~scRHSkzzRm=R>Q=qm*?&;G0?-}0=KirR)us!_oS&gmtBX(tksdD^sYZjBb zp(Q#yc;%GPFDKV{FB5!`WY9cWpoVpll|kQO$rtw;_2wTh3Hwvk{4?oa{dC41Gklii z$T9|51kI7w{B-QfwAXjL8Z?i2Tuu>p-OWGQ-6O!f^`iXc*crdi>^gLO>*;+Zx$#T3 zZkX+~{&jMHnE$SqQ@rFP)MC{dZf+}@UZApDME_{e8@7r4cHfV^RJk)T&0&&|Oz$B{ zg$~O{O7`)->{0AHjXe#I27VC`kU3dDRU+2X&~siv>T(Mgqxj_l47)^y3-aTc)Ym9> zU7d1PC%#JH(^4;kM&%_x=FCW#-p79;P5Sy&9;VHyI~JUpHo1J!j4AgHT|dFJYEzNE zqfn1h*;i+kjec=Oo}vbO4jwk?5jfc=%q+G=Atim9<&k#HJxf<`ieJ8VZU4t9x^8ls z3H6zkPrtqA5Aof!*(W6Ck%p6;HrryIHhXq2g~_X4O1K3vUXpvP5zUt!#x8L#sm;pK zV4<3-`K_jw-*!J|IB#6?QS^@G<Bji@OQ<AA$uMmcxYDIKN%vvoWiI(*Y38cO47MLw zH|%<pYR7cUVh!gurP-NTjR&^|DhhAiUpGnq{E_YT{y)3ozi;_6W4ZU5yNNR{TrD_c zS=)0!RfW-}diCssk;e1YzHF|at>05{X6j}CjwmHg_sNy(O4{cJempD7BfKS5X{}_~ z(e<8PoK?yWqW1lTllIL#^Q8LM=7<ih<K~kk|1SR#xN4L6<e7gqM|cGNKbxZVe~ZH* zmD=Kp9pyT26&UJ|&g$i_ZI@~lo^puq`|*a8Q)cmcyjXf>ns(n$-Cc`ce^zO2@%@y; z^mT>g2WGV*o_MKkaqrf33NGxfe)8GStB!xW9nZOgk@Yv~Z_Cdy{`x&Wdb#=YzYi@X zzTMwv%`R@=u==}m!9RQP=7$U(PY!nLGT8lOlsugBhm+yMw@1gjSJx|QSABhW*Lvc{ zCtv<PefsmNz@NF&?#I_3&=vLl!51@6mN6<k;?57gAB>3)9~&2lFSzjkxA!e47WEgx z?O(nBKl`%$-`VcTj~~z7Gj~nv9;?`ytcu@NiZyO-_fM$!XV0n=YO_4?MER>=pXY+Y zPd1scyY1EwsQUiz)$#4`@9kguetmtup5AZs|7=%SDkla$Tl(VAxodnD*5JcT1TMt! zoNLct_VTX1+V=GaUj8nB|Lbt^&)<)81^$Ys%h|2EZsF<9!u#+3Za3!N|Gz$y4R5r0 ztt5Yax{{U8CGWnYA1_{fc=4Qfoco0P-=;Q-oqwz2y1~Kl;xq4SXU<(aSAX{LV)pr4 z>gDQBJr)0QX{FWl3~k$WGhQ%F_H=HF*u&cJ;Ca2u1M?bhY2j;1tp}H{F0j2U-sK+u z*(LhgR94Nqi@hy>KHk4kDMGY9_nG4(sW7$a!Ll(q-pAb|MNa*nzqdZO?~dCi_lMvA ziE!BKuc>oewXZjQPu~pjO}lbm=dX-*U;3_BxUaKbSEO^*p$?WE3>qtID)#;6yyNkK z@0zdHt)0>jGbg$z)_X8?o^e@r%P8mB+(Sn=^u)8~Up!u#Bs_cN*?29#4$I}9QFc4$ zGtFbuX0ZG*SI4l@YV*_&UH#_P`?hXf#v`@=bp7R$!^_SdUoUdGs3kbGRY0=Zx3^L= ztVnzP+XuJm*4DGDAHTZM^o63?^8Z<heKWIJ_89hQE#2oMU;I{`KkP}X#<__bMcN)P z9{y7<8@<$w$EdBssdH1_`7HZ;3Z4&Ge5VN;Jbs^DyY*XF8@mU~`kr!)Wib)D9qb(r zZ7c8mTN|eS)nMoUS5KANJQu02E#nvU>+xQ+bpu0D$*ZV<tjzxU^q^zHM~>`zk{YVK zOg;Qx^{uNRxgIWejxM^y!Lv2+!Mm)eZ_%Q&7Uk4`I&0oq7$>WA#X)sS@tP2g!~2aE zYCpZAv~XH8E6<X1Yo-gWX1%sV?R@O}Z{J<A-n+gNzFhlm-u7aK9a~>#%QuLqAA7J% zQhe_IpINs)Cx<EgWeDzlm2<QHl=AnNpYI-*-x@E>rhWJFqJFpQADIq4ire(iOJYIN z-;mtfR!>}xPTi4~lAXGH&H0+m?e~O#aXgr_EJ<m*%+j;FeLcS3*V%aMn@;=+^W**p zZA2fG*B&~tzx>X@Yrih-SSPw~;+{JzqEyy8doEfMs}|I28@<fJB~4Oyx8Iy~{*OM? zPkkIyI#bI~#QTcStR;dezH@x{{d{J_^Y)gq`+dRL$EVt`Sxj1dZUv*y&eumpLT*Pt zG5PWJ-McideRtw!8Yuppw)?{?v1fjZi{gW#@7(|YFV1_*&8w;LYhrbmygIY?FPB%| zTm4x9s=JGKo!i!$<uv!{)k)=1LSk)9r=0G}-~6UrpZZ-vmC4;w=-7-UeTRis++Qz{ z;-b&ywPF^-*W%7d?h`XlZfHOGskHXAj!aUp$P%7z(+CBPptc|8_n*`|rLcM~h*c_6 z+$b&?V=rMYFB08pmU!F#czO8cW47lCOD6tFdHG`X)qR@G&;I{>zuR~vYpcWTwK{HD zwwwaO0>Tbc7uJWJ{A`|ntx9hB&mX6CHC4ae;C<#{qvWF1w=HRPX^DMqQSY^NtEL~{ zzIs`A(~Ms(>%um*g)P0MG}R-wzkvVO$_43ed`mN?2W@IRbbX?`P`CT_(7znlvzkk1 zul#cP?c!}*+U^^#1$giOc9D<gS((JF<8i!2k4?qWPt0an{L*dVzxtHcMHOa&g07Zc z;;z2z1(Rk-C};^Bcw`-CknuhI``1bToi+1<3eBTluYR5y%6DQWr?~c%{Y@K_UT!th zV0t5}P;j!c>qd6<{Mf(V);lfy?~3kFnI-ym!{*g~s=a@nP5dXzZ+F}NAFpuu`!jbp zUH<;SMpWCSW#+>BHNpSNOHB{eUtOsky<_K^&p+b6<z6kW+7x_OX4;vTZkE@dEYbS9 zc*(^Ts*Xo@U#pRE)Gb=EG1>8F-1OTA55+2lrY27^H9xc8vj0kDV0-SoXU8R~-E`ls zOncarz-P&)WqW!5Cy%Wg!&mYCaW@D)$7y_p=irB)Ng1}6#hk=7ml~cZ-<p4NtFKsn z;AG3qug(^4?fBnzZTioB5ACj5Jkj5IDM*8<a{8XSuzh#`t^SmGynj~iW{x!lzJDGt z8tJHZYkSY*Iy%`ok@seh_%*5g$L<eQo@PvZHJ7K2zvwgX+_gL|Kjb1EkFanbU~UsW z7%!@vXS!mhUzVTTKBr^d#ur^~R$nvd+jsHR!~S}!&%Xb%EZI+8eIEbs`K!m*`@_|Q z+cxd{yJGLbTaPX&RowDfclhbLM5XOk8S9k9n(lBkW%FgGJbP4?rYzxAzuoxQo$bc2 zc=-YuX3F%t=0&zHePFqAm2k_UB+0<IX)UXa12-<26S2ANa!=v!)Bjvbc81LRq`o!4 zc%Ae1&%qfTV)a^mw?sWITe|O?^Kqkp{hwofZ87cVrj)zKn*U(S2=D)W;NM%dUZvRw zU)W5NYMlM#n3=}^geay3QxyNXfB1Iy_kQWwUk)AnI8#niu2*AqnE%}RjIh!tjZfv; z5?jAVxlN9|&iF8d>3sN?i6U(IPi+~BMJ^tfm%UMPcxTN0keTQH*Z=aJxcvFs+u!r= z*9D(FxcGk-Z}+Q|RVHD_C$KBa?#X*sThu*KJHhPT@lNFvtt!t$=BJb#SlZXP=>#j2 z{f*BYI({LWHyiKmo-3(n;;6>jaiN!)mFYQKKikgD&!ZHp7yn_)vfTQ-;%!9KY{zw< zEmoe>-)dFqyXjt}((F^&GE<(_d#yJ1<aGLJ9nSRX^NLEf(zB`o>)u_kSZtLZ`u4>4 zYT2;;%JFjVep)S5tpDrvHhq7%Tf*XHDbl@xQ;Kp;Ebn?fd)n14)Vb+hO7RWL#o7PE zq^>`E5yU(B_w7oXmw)*Vdni7y@H{6ZHBV4#(e?lKzq8XPw4_hqs7d>;^wHva+2;Br z=_|LzRCo3*TikNGYFeDAQ2X@YzxvxN*FHGmCn6*Mj5m4lue~xxdshC9uFJMO+OdCA zSU=l+7boZ07tS9Mp8v{Ts4<&ggW33`<5S1j#lJl7D_;$lnZg`C^U`yJ9qdo{?|z-X z@xaPzH&=_opZA(`U3uA)WQrF~;j1=py%?eIRd1EFv*<h<mty~iS6;KOJPOHa`P?V= z{Qmw$9EMRm2bzCv7ct*iyK~{WU+3OrpYC5^V&t^`FR$x~X+pwx_vPI?GAo&His}2C z%2_7b>1|Vu({0X~{Lgdf-PxVOuHbOXa{~LH()cGub4}A6S9xzLKJKl1&*7{0Z6jxm z1yUDIg_s!EXQoNd%$&Y%=DwfjeY@sye+cd5+tH!W_w`#E@4fFFs^`wL_7uH4wep_! z(h?=13sX+q4cEL9b6;lr#*JRS>$qR9G~+uRKgs*``=*N_ug+?FT`dgiY>kV}x-YgN z%d>EujMcIytbgubpBlFMznyoNp^b6x{%wb6pU<(~Sl{_V#_e2v%l~Jyd1{LG9R4?@ zk>5kU@=4tX@we?p3nt~A`2W?H?VOq7hKJ?#7X`Ee!jw&;SIsmFe0^{2&THnc<#UZ4 z?N{8cPrG_%z05yX>xDdL_Wcd(b<JJ!<Rj?v#qSBB?ppH7$=O%rVvqM%Ydmvvm7MYS z-}_r0Ggq$)c9e`+)Xni}UH!pR?x*e*l<p6%F7};l@o+ugi6<H>D*c|$<0uu|tMcmp zi=cB`+7wThT=eGqVe2O(%Dwj5e)c0<7C+H<O=h3cIJ4{V+^KF}s{aHceo9>zo~3Xo zyh2g!)w7kQPVp~PGK?*Qez~psR<(owb9Yc!YWdl?pSejQ%)h%Qc6R*BsSlQ|*OlaB z;W{sOukq#4qx}sFXV@tm2r4?azu<`9*Z+T71B+#1E&f{@wLeyAN^*?M@x4AHb2bOp z=dBMuG0$(1mgZQp_Nu*Bx~|2=>zW&$Iw{;#{<+(wE3K|}p15s&sn+$$42{CVmosY& z3=9{l1VpZhn|tfUTY)(<7O?+z{P;=RGN^u&y0PW*Dc|xo*}QeCKHvJ#RqJExwc9^R zf_--^TeVl?)w^l))_zLKxa9RsYjSCTy}iP*C!JRe>u+SMo_9NX?&6P-BHgK)x4$pU zNl(z4aZ+J|gW85J@r7cYQB7ywN`871rhnb+^mDa2yJKF9FrAfoKC_$Od0z6`NmKF; zY}3E~Gr#^#$J%>&UyI(R`O4}&RJ*;3_rnsc1A*^%Yn;iClAmE@@VowBy!^VkHmjSD z{n|4p=RxX*cZavmuB~~HknSs4<1{z+Z^P#u_jFHRbxHNrFJ8JM?A|H<tOT<gJI`Ge zoTb-u`Ep<O#7AqUb-!W=nd2ut-)o&S&-9j}#^!9PMM_sruCK2YW(hZ8N|I74P)fB) zEXgx2JQKJu;Ff{RY_3!L62cA%Ow>KU?dZ>g)3Yy&#;?=&InSy)?R`|As(RNe1!cYC zzoO+7r_|gwc;Xx5yzNW;`6Vs-KTjv!Eb8t2CU#9CJmxj`xii-fMP}afyz!&RXKti! zY|P7*r?>k4Hw!RdU6^~j{-&kA^RCddhT%Wnr|Df+j8oDxyKq=L=5^Vc1p7m#543;0 z`(6Ks<6(-C=JC6){v@9(oy7XUW6rCqy7P^GEt_vDee!>4kSFH?<Ctfi%yB<oq|JJ* z!f$gkZ;f!Ncj)xx)n=y-yeazF$tB9*uqrw7;jPnhahdxjW>=qoyz@lzelwx^zGp9s zn01f7xo+w>{p`!Nza>v3?_YOcQu0#Gxve`Dl9E==&!2P9VIA|SA3M!>>e4DYZO<u6 z?)Xt-efDf;Nc}c`H?}~wwEzFV?VG;y-}%Ke9;qHovApQWtmT`d{`_ae|M~y-UFLK@ z5mXsa!u%j`+k;~s@@+=drx*XsG{3%`<J*b)YWeFt2S0r9;h$8{o?Ys{qkhHhongE- z*8}p8mi`a;UijC?*|y{LCszCO&v>tYiaz@8)3;}fs`TGKFq!dsT6V(Pv(oE6zwtY; z^SQhD*VD~h^J*_&i+SCh^Y(1~;sjRCXN52Q)?3Bw;+cQr?AfZLVH#cjjn$TU?Qx&Z z+%d?hymh?3^!i+jyMN{uN3O1mKY#B@@TUBh18G?rjf<2%K8=1F-K3WMKfuApPyTky zv(pETbItxfqh<NE-z(qnK0DYaX)SX7dq%CCuIAySsi*ze>YTF~-p>E5E&p4_!+u@< z^5?lZ{7<X8{%iOboi#mPzhL^I4NrgFoxT76hVDw)SrQK;SN^Q$e>z28zy0<0{}r2W z74VktOzT*1eEt>F1(6s3to@_i<Ip6r>>>9<TjtH**ZP<j${t8mKigeA{cw%<yaw-3 zUTv0&z~GiMOcjNB>s6B0<@vwqVOyW}Rj<_i{<h+o(sPcv%@Kc-aV(?!Pu_{Gp2Et% zpBcW8+!6Nv`Ak)IzTH2!zN%+^mwUV}c-{Mn)30tg_0=}YUVZ!RqS&|o*`E)q><Kk0 zTfKz;S=4OiKdN``MBNNHbauV%?v~kg72Xvyv*S7M3va(&v{#)oe`-(qw1T<G=YkJ7 zrcGkzpPCbVt<v9lujci6O!JE0YTvAWR_49VmbGR>%XO7xd$wr@W7q}VTz;&7STFwS z??I)!x-|dA`!uiL%ii(uR``+cr{8Xid7sI<-uqab%N_M?7mm!%TzvilM=$@kYd#Z= z&$i69&EF$g|K>rI>*?uVkIar`J-h$Hgr9eVody1tP5iEJ@~-atl>;m0bv;WsGGW*4 zddJIAZ(M&T)ObC%Ow#&a<+;H(InUsUVK7@-e*Nr6fouLA@O^klU0ZRI9n0$Fuj1do z%bRnlLd*M-h6eNI|5gA0)t<Dw#dmj->cM~)br<sv20DG;))dQLQt7zooY?6LH{YZz zcJ}wYySsjy=UlEE`!pV2*Dswf9IaufzjhJxe&sWvwW;d6r=HujD?ru6t8JlD*|()Z z&JMG<V_W0}>K*6YH?aENBYVE~*3x`N)#L1b=B7vfY;j)xN#o!P=B@`-T})nwj@>>! z{g<i0sqYNe^|elFEv|errSax(^L;_fWqsBzxG9#uMLuiG49Q8iTg*$Cj(03uB)yyG z&dck^`tB;MjCPP&%5!(E#3OAfQ~fH*ACddnT59v>JV;IW*3UP!eg}`Nf9SG1b}yFw z+G@{O61$wUEuo`5cjHgK=znE3(K+Y&q8rbpcfY-rsGT8a{&h{M=!=?dH;&1ch0KtA zbu&@>!q1$IXRY6GY?M|jwTsTV&1Y@(p{nc#R|$mU_F`9AMCeB&UpAS<ZrN*p%W8gS zCod`2E{Su$aZYwyOZ~Hr!E9;we|ycnF1W3-T~;)$t<B+iX-n?SME8!n6Skgv&2f9z z;XXba&b!~=p7P|hTCbe*n$Ozn#V(s9t@;0_Ru{cD-w^*oiQ(zzeOg;H^e@lWxqIxl z|H;6ln-hAM^WDw$RDB)l$5SHenpbk8($T#1*{t((GkIe(+xqx+#J%{Wc<S7?KTZDK z!78`D++P%8(%|S2nPIfR^M}vY_~5UL%9i#|UntBdU!VHQ<<x)uM|)TG+`O=E@-lY6 zU%YcA=U)sEkEk$Z)MAub_|{GR@`QSkVEK~&vz7FAoRjWK&WY)CWjwy<{i+AokDe8G zkn9NbxhXYA;aq9qW-e_7{d+|ld=A+LP1g{;arVlqddF=&aZb+vVkf>k_^j48>6Kxr znM3-evvF$_A{VvQZ!w5^C1&ANbC$L1U{LCE-YdV&{(9d{*Ij69^ZRxHTiPz3;DdGi zB{gT6FHU?K;9TA>;TSm4d&!ERCHuom@7!c!dy$d&=Howe$LVUGOS~8kdz_4CJv!^k z%LSaO)xL^C#~Xv0dE3wV+>l$jIdVzi)f*=BO#LNq+~4z-SLpM7oj3Jng4^D1dd#q{ ze0D}_-(qc_OX{*$j-0+eed!fn`&G{yUWvcD6#hc{xL57+PO}%ETHf=XbK#8rw}*L) zviN>q^_+<c`@7~c$DS@S7kaa;>7B6Z_9<P<WUtlQ1${7!eJ#=SFkNV^s)_yct`ln- z)_wfB!r_j{u9k=FG7D2{CttlFdcNMBb-K5$+{UmMQ(_+<d-QoCyMfV4CzF!g^X@E9 zmR(>qXk7J*+pR{(XqH8!+d7{uTYvYhdeGTWWBhW;k@Q1}%t4WT=hv^B!*YCHRjj}T zi=Bxfay!+M=0<$kdS&Kwg^T(<Oslz46Ut@_H6~Aq*Vk!PyYy7F%Hd*zcl*_9VZqp@ zdXH_4b@h|?p1qg)e)InS)$?^^yQ=P375g0eY>={I^Nz@+M~zB0aWa%j|9<e`rUvt7 zbK$S`y~1JY=`$YLUl8rvxZ~eSd54|Xjz%;HTe{a*E#*q%p4A{=EV3ecpVq_Fc?;)0 zwhx#wUB^!8lGexBd{0vv+n3s{Tl%W-_0M<n8lNw&Z(DusX}6!++R2aX+xC7J+Wl_I zYqxcYi@2kAwBA1b<63W({=}*U(jf|mw#^XVyy@McZF{eV9kTGWj9M~L@6DRGC)t9g zF8kejt>%qkDc>ri#ON<=e%tDn?5K2@&LwquO2<mQ)pc?!xE_>$k=r`;>B$3IYglLK zH~eJb`02a(>JNi8_3vg?`3Y;EI$GJH`2G8lu<e|!y*ca-cQ5RVur&GVAuAqm;^mQv zA9QO%^-4qIKQ3Q(@}-|Kn=SL#-5c7&JWd~Qug#AL_mG~*y~gS91zz3F*VIds9nZ1v zYF*dxM0&&IMrkRgjD1EI&7bmkmhl_Czmel1ToA{3ac1Ez0b>Wr8Efkmq?ahaonQ6E zO0|@Uzwx|-JByvPdELynGe4`dTRAz096P&Jf9sYXooy?$${gy<^xjl0S;x3*-<dQv ztF7KEwxq2J+R70Yci`>p`?8k`UTo3XvN*iSZ@-P-mtTIumeI^nTOzjSuAfl6M`cyn zFT>#TeA-L%x|BpXqP~CLzBR%lwtjVy5!;ul1;Qqqj%NJfPbxp^uH3#Z`_M8^4%S&* zY^+i1s>{PK6ttD{$K5em^6mECPo)f}4!oJ>Ca88=pKEEP@A}J6IhQp25Ouv$6+5T? zsvL9mljS#g&g3aH2ZmJa^}1l_GnL=4X-<99M)%6kYNt<@FSvH$p5<-puNvx2Y9@>7 zPk%K@<Y*J0azeA+Gu+N_=e3vp4ga_-=9{jseRt{jS961eDaFYx<|q9VeNGC^@UBbW z#q`}+uKjn9-$Aa{%$6DRkGvGKm)zeHp;+*rnY~i^K}(ltlEWH>jcQNA-Ln;6Otw0b z<Z~tOCwDXBu9y3L=P-WW!O7n=K`S@+wrhgs?E2Uxfh8rK*3}ETKQOVrR&d%MRP{c) z<dx48^%c6;+O+C6>|8ZLxqnrG;(pWeGvAK>ymn>r^_2(y_CI;3owBcMuI{AuGHq5L z<R`M9SrK<yPT_EY+{??7JX3k((w$o8Z9Uie?$NE_S8t-OKWHfZRP}s?mr1|j^OW`6 zyBp3eHw!c_ssCE@!o7dCddaT5_Wv!ilb&5UHtR-Ey!)1`zkDKi=YCpO^<X<^$*#9z zf8tg#e0y1H;nMhDY+<wwzq7dPWw+GXwnl>43*=rH98~i6e)CpP+gbg#glyj53#t!m zgbY}IdwEQcx>9~5u6@SqS-VfkePAq}_R5LNe(A%YcT$_~D)Y%iz25C5b57k*?K!`I zyAV4+gK<GGXWwNBfl$T=rA-kH9Sz=F-)emf@)Y^ewJeZBVp96WKU>7!O};%hXuffv z6Z`yq0xx*u*w#Iq%wJ*{(`?CP$Rp^{EkEPNEA`0^KPBo<K3p(4T}|!)$K<8?sULz0 zb3U(K7r$71`^5nNC6l>hdrq#^+;;J8yRLtPW)|DlJz>W+G8(QN{cuuv*QJ)f+`FE- zIBauy^yry){DUKNs{&IsJX!lb$X6+sUfUCRA>qZk&~?-Jz7)OqGW)UXdcj?7QIX|5 zdSVs~^7DmG1-EU}o>%{si7U-?%BEBDyn2~mnNCHNmMpBXyHa?n_T1T3?I&x>Ji^o1 z(!_6VEvmd+sC~+4N=bNqR<g&`IxC;MbK8=9{_<?SmXek1A(~<(;e1udGnPkCYEhq5 ztXhL}Y3!=0St)$pvP*?`OJ>O|)p7>$m?gQQo<-k_+I(VWCYRp#diywL$u13^`X)gY zN9FKbp4dPMrr&q#Zr*BIxbl=!Irm8;bA#W8DVMLm?OwQQ>56W}FDe4c21Z<NrX@>y z6@N<#xEUHARQ{cKf}<j~PD-NbuH)BJNf~QfpIs7p)3a*3&ihFVS1sPyt(fYPzy4C% z``{OgvYVJxLXWhqemkvS*r`5p&6zKn?hDKOx<r{aA1Ybf<n~v8BCm*LpT+ShbGEmn zr)lkGUi_*`+Sx&zRqvCN-piGyuZvcGQ!`<i!sr$(G|$lL`0ea1k~3--EeW*$obX~% zQSx?`qRL-3ufMLS*;9J|wuF>Ykv7X=j>3CJGhclVP*MJ-tevrY%d*^40*;R+Ds8IX zyK1ZSEhB?aIqjYuB37ba%m>xKCug6YtDGxfzA~u1Y;yi@>H0LML#g|jy*RkOFuZHu zmj2@LCXcNXUd|TCJtyPHcxC2s#YpC5K~-ACM#885a4+U)>EISNJ7PZZY_CL6_jlFE zYm?kE&QC3ykn~q(!xffh553cuw)20A*(NRVE8=;&hO@fgrblgo|EIT9y)b>&D`8ao z*JN*-QiSDpN#h0oC*Gf19}u)`=>-j2ZnxwG%I`UP1pOc6UES3iwsX!xX{l)yml*e7 zEH-+2azf(5^Tv~^U5YB58B-M_l$!Xa^ej9We(`7k)6rM!?tYrgxH*L3=cCO>)}|+v zN#35aO~`4pG23RhwuGkrO2<Nz)*ri8w@k;uGWxms^aqan`TczEDDX`&l2WQ~WLhZB z;?x>4rEJo%1D_kxC8GlMJgPnN(*E}UTD0eCtrpXc@S>}xKRN<-Jeb_U7Q~p5bmGr; z-CefgmS3B`?X`QPF{$gE%uD5_1q{(M1K!+vX!BEduCm(%2bn!{_xydBFWr0NfZ(Ly z#g~h++&#`NOqW`CJ@?aPlXkW_5v$!p%j->Y;{I^%SnQxbSHZ#O#7*wjZ_?u4k2O7% zBs{jxRTTE<pJ8$NyW@=C&XX6OE(_NyEWf#L_bjs~=K|9?Eq6L?Il$7&z-6%7|NIdv z2Q!(4il@!oFD7+OUy`bQ>OiZN5W|XyM^?9jJ~vf{eks`}cJqm3c<!#|BX6IzIvK<_ z#|Mhkzi(Dty6mr4<!axDa~L9y=vgy{l`;7J(4Jgwuz<f~XIsl$A5;I>bw@7nimX1! z<7jrg$#GlQ>sH~~r1h+4Cf3}I5iGdj?b)$q%c>W0s++9SUaTusO4Xg5e!}CbYq0=t zipTk`zOK||BE64J&lQ+3TXO4rhh|^57h&@XZn><J=&t{xu;p{$jTsBs)IaxLIkUq- z<;JD`F|Q6Uj5&K&?&-sGDfY|X^{xCl{nW*>qc3=LZ@;XGT7PTh_r*1DST8i*f1uQ4 z@oi4=*=-ZI-CHdZZ+<sx&aU~Z_#8!!SS`NJHFHNH!%@H9?x1+?g$=S3`~2QlTD^a3 zZP3Y5X?6XlmS*(r?&|us_9p!*E+0E{ABPUPJKj#ac!X3r?$lg8SeL0%Af%X``c(H- zarS%G)Pl|_+wPZo7q7a{+-N0sfpx~=2XUOIuFtg!Z2!8?J@nk|oQcmS{o1qmp1H=c zwR^+WPGw7##d&1D`n%ICZ<T-frNZ04@9*F1YVaq&jrErg)0emV)89^NuK)jGmz3?% zdX2}c=LCk``0gk<<L?LVb(Q_M!hB|Phn#ZMmVW!ve(4QvE%jCFw4be6G5cHHi8WtO z9i7NHd-Gz0_fsoYoSdq)M(ud!gEew$-#>|O*}Ug>M23mOP4TOmwR2=It)KfnE@Q!z zD|eKBvio>Ww$}U}Rg`*BO)=u4`$?|wkM&O#yC&FNZq?izy7|-Y9c9TMe0E)^xgve% z_i<6B%M4j;M%n^r_OU+8V3jvWwK}=t&HT>qtX2n?z1(u!H`L3(r+J+;pX7|YN{od! z<8}nTx6klNpSw5wxaAC$i67riTo!lx;>U?|j@>iYxP0BiK<2|*(U;Ad7h3=AnRu?o zAa>`Eh4qte9FfZBziJWQy;Nm^`csu9+y#d-dX8`{m6@?^oBNe>SC;kdDr{T(F>aZ% zSy{4wVXKzWr@QvrmZ_^`bHn$|VrF_&^t^oGCUNa@clY(02b(sjd7cQlWn3C!X<Apq zx4`<#eBmPt?l>-Adh7sakHyx1C46b7g_ql_?|#$Xzi_*3{n@)Yd1p?j|8}p`s)%`* z@U$#gZ>wft_|ENaS6(Q}$>vUAm|vl__0hD4cRpWm|GH!gZ)JM<rS)&Ee#u*fzq=V! z(!07@%h$0rH(+n+OKA~ThaJ~E7p}YfN8ajse9|K??`-$K?RBo4sZV3}OBVd&XcAp| zXG-_A+?wOMH>NZ+xCz!j^HSOJ(0g-Y+zZz$^+qeTmhf-rd9n1Ta>JoBOKS>G9j>Z4 zkkE7}ciKwFj#u}0A2wXHa)Z~BpUXXGF510n(UB{si*CI(IvagyLEkI;`%0!^Gju{V z4ql1*Sk7}!r`|bM==Mpus2K*fR;TXh-FlzvzBPX7mD9187WA3PJl}NbmEVr~hEExp z@n2@E?~^?{U47{`sk=9CHI%1(ujMT7;dACKd%m{koc=?z%ZV!*18u9fT+K-0n<M^d z&&xvHc>ZI{|IEsY-0=DKs-`9ZRYBWbcj8pDR)?l8I31i&67yr_)(AGAyZ<%0`emMZ zT~^d!-YkFbPk{c8D?G8USvLfAr@px2ySRQLbmSxL`|FRNrYzi?b@;^v?Q=Jd&X;*H z#r)@@miYZwcs+M6dEb5_*<bR*^jYaA7jAoE&bEugUZKfie`3kImr`ea9hT-lwS4;G zz{_RZo|yMuNNi$lyT~qbur%Asw{k|%`o@5L>^nTyXsWL6c{VYaE$#jNA6~JS<~Lud z_*QSgd%Sz5V(6s{;#Ld$_uRc9s{VLlvbo1ApG}W<i#pf1F5dRy$o#L_4mZ9Z<BVfV z`~M=K^Yn#}Av>@9UNHOB^?xiEO6RIcG%3n$JNnEz=jZK@xf^Y*b6BnB>u$?#U%R04 z&XvvALKl3#nIv6)BQP;-MSA;Mhv%D*n!Vqkd?atim7n!F8*{DSyg2Y0I_{Bc{YGNp z>syJwMSmFGZzQ#s?w7s)@0P@eD_o$_jN*3Pg_UonG~WEaF9<ZEaWB!mb>>3F3zf2o z(PcLTlgv}rezrQa?cIjO%>GW_Yj+m~H9<!^gm&rm&*<{qRpkHfFI$=L#2CBxt0x3y zafN<+-5?&lb^fHqM>ehf;>)?~_9U-stLI3((CWJLV#DXAyjN$o#<`dA!A3XUl$O1V zejFX&Advejzs`OhvjoeORxN?~T0fYij!(Jq>x}w_pwgM30S=}5S83|(e)DE)C2za) z&hs*JTgvj1Ez@@u9?F=ps>gTzmDZY@v&$Aw&OBk9b%@z&at-e!0T+v7$EHd=I?7}? zci!1=wuioZEZwt==ZID9XU<15f=dggM>6(Lx$7>{R-?Yt?vKRVDZ5-&9?-m8d55J+ zXz%fje-y&p{KZ?h^fF$)r5I6vNBrvyE9nK%AL1o^CwGggcwY&a7UF%E$-QI!P6xw? zQ`a3A+$-mvbPYD(@%*B4jJ5G5cB_5Q9K)4(dGFdLu~<g3eoc)NHC(liT}!5nk-21x z!MBS4vln;^&pxOT^eNmsG;E@ktjWTZ^_nh^EDEv~JiIWI^R{y7Gu?*z)yI~7TvK`K zz`tj?`4eXRPfOh1xgmGDEPKJ;+b-HAGO>x1>|QQVi`%zNd1>CSKwI{Z{Q=YWImKIs zy|VV*;&>c1XY*m1$VskUe=6BC-1X{a`$e$&K3??P;rgaKy)3)eF8J+oQg`X1%=Xgx z{UUpOuUoYx{Fv#I&3X3xP9-Dl1@+lAc3J}Ft$K++7~L}>@28lS9Q_=4@M%!L`x;TJ z)ayGo{-}Av*mK47?99e>Z+~_)+!5KupjObQtYh$K@`Q^?+fN*r+PSUlzTx-Ar?Wkm ztJn$iNl)++FRm;7np?Q!!<E-f4aZLMF8*}lX_(!mp!9joF8d9*)@V&>yqW98(l^nw z-p@+A9X#rxahK^`{>Gj_m+1<VavSd7Ps!h0e)IR6_y6yyd$%u=+kQ@F@&_B9*FR6} zj?!^fpUn`keIq~Lyj~-NYU9BF*DVq!m&iSQz%8v%7W$$@_`&J7SNBy^sAXwqMyx4a zDkLALdriz#z5IE{3ie$#g3}?R8LK4)>+kf0?V6Z9<HZsttKN;@=3OmbJndtB=N0YJ zLLSfjg%66l=l7mBC>P)McI~p#f}}};t5Q5~&C5|ZY8bQVaAg)-VE;<tO;0CG`ja40 zvgxbx(X-6ELIS3)ytKs2l0SrLgLPH^tjYgYA92-kpYfAvhJV9^`zF!7{D)tyTlw5% z<D!^3_3jcy_5L}z?Ne{8xN|AMe2ab<pRaAuao;wxz9T!sFP&ee6OyVCZTw1B`s?lu z>tFrsuZmiu>MnI!L^s&JWZ$K*EjM(*LmF1WhtHWOxQnYaZTmF0Z{N&@(@IHd_nSXO zHCm;lEjrz3sc2>FC!WNn!Ms^CrMYCu-{AhZ<xBkPA1Hp1e9>_r{qZsV&9=q=o;bK? zbe!7pHT2rH)JE+ME0eq*A6n=BN@~Gw_gL4T#V<<ic2#dVcbTV}aeIDUxyRv!mp5JL zi{rHV`^n<sYir*vA+>LF4E6hNZQAQ}?qkr?)Aw!d*_X_d4fDEtMO$#k<s`+@wWm%> zTzK8+cj3g8y;22s0=u>Cq%2Efh0T1OG%kb~Xj~||yL)$2oAH|J5092DOxMiYk&QZ{ zu{-SPl_d=(F8j^4X-xKhCSC7+^UyJ|*-3)gyl>}j-W%Lsq?F;Lyer0ExGkZ=v2#w* zjFP9qle6dk<9M;Y;dA8YThH}sW9pfi-7L-BDq=UvADA&o)nNLcb52sud$xC7mb;Q( z!WE|BqkQC#ir@AhCr@6ffs9<ZgkKcZ_E^LD^XkPYj$cdoHr@!i{;%~QL;c+^_tnld zRNiT6U%M|IJZu3UwK&b)_{Zzz-t`w(8c&?R;DE?=S5f;LGP)YhpH{3g_L*&+_WMyy z_N$ApOH7MCeGoN@KdQ(4+*Q^?_Q(4xx0(1SBwCnX{gtpH<%5N=)|WM<dL`o5=LMx- z-^IqhrqT7Ep?m0}${x#l_3GFgtR=yrvo1XjO6Rru`*cOY=N3QXr}l~MODwPM557`v zv1skJ^g~%?Q_8P0@AqABId}Vm??J2^{MR2=<odIn<L;wMiCr&dm}%X9GqE#*`Kv=a zr&wiFQhtAgq}9!1FA83_>v298j!ixh{qBwI#_NjDUU?aYd~4vJu{lIM=tsRK@ARVU z6W+=dK8Uy<`l!IJ)6lZM!D5m{1;dQSY@dQT#~M~}F{~Fp!sNmdvnn^dbGp}}1g(7r zOHP&DzI==CwBGxfzvgrbS^fCZ>X84zsDO8V&4TWSQfCA^5<48C{v2SLu_DcMYkGb< zgZ_azU7^P-oP^5CB#l@C=5&13)BgLd-a-Amk4=N1n)i8`oTGQ^pGR*kf4A|&%gw}& zVTg<D-tqI2xJBV|?f%$1HH<3{2>x@<Uvh4iIhPdA-L0ptUTTcvn_E}B=Y^@$^#JYH zeFu*+u|Iem>{NN`LfO&H^>Gdd*R%zN{ak!db#0u3<mx`XDd*dlIc4@2Z+?|{D%(Kr z+|-$kH(Sfr#@s8p(^Zsxx-6ug#8Hg1Q(t{u?AIpczVg%rshNi_IkYuR`#Ej<HJzfg zS@lh)|Mp*ZXj9@kJU@ZO^TLTxY3Fc}wgYwB<F{=~$XK=M!d<6LXL!%l@!b4U`a5Yw zmgcJ@4qMJ696dcvfxNPr$tUXAS^|B1KAfnNFk*_EKA)}amUsK?YrncZ%s21xZd=uN zOs{Q<;NHDnv-kQh>|V#Y>eQLf&;bn4_(i>@`$El$dz=!&W~>Xnu;Rb!rbeaXg3o76 z`aJE!8K2bhgpk<$WDXX=YmxH4aVJ!5x2DDFUA@=R)?joX!|RZ-+w+R*UNh#+{!>g| zrOWZehUC4O=A!36KYg#<)c)=7s->NsUGiEJBoxm@s|6SH*8RSy*Zm>?G-&t&GI~*e zE9Yez(%{ANs_kZ5+IR1LaXVq@yL1oLz@Hh@9!+YLu37NJ+BVa`Im=^$=G!&DWCNT6 z7O)rCZ?ScjpYFP<)#rXoM)5Nat_A08_)bb0OuZC5bMnl9XYmrQ3NA4-HYo1v%*i`4 zA!?8Q$xYKtoT}GtX%>0?ykV)DM7>K<<g|UY6P|Cnd*H%xD|=^2tHMd5<~_gmt6Xtj zZ<v2%!pqmoUz&;>Jhk)e4936xf8MoBGSY2zdl_jU#VlLtp3qalRKEIJ?v_(edG21= zaAY#ykKTEcHT~OoxNGN4yrVqnv^19nx9{J-%__+mA3{qEr#NifmA(B>$^jiwhkZYE z>I+{>&WJr`wsdXFg*QD1*GyEL@nC&N;nW+eH*TG;$sKU++RwA96&Kz&3k#cfFfZ+C z^H|{Ug0(R~QFQ6tC59ht9z?c<P2s*IH)(d{|Hb<>@=ND;F}#}^Q_5?nB%=32Wl>`Y z!z>A-|GC|H=Ux5wE~s7KZ_%}6k+J))4h4+^VQM1vyUQ&6>%5<L2&xFM=d0(}|G4d@ zY*x_n<jRXJb8ZO+6~CD2_M&w5ACt2S8P%`73cM=IJ6pV->7B*}Z*>j<;i7L&3;!NF zdZ~hI5(isQZu$w9OUi2JzSIgl`*$Jb#iqMcz3;?sd%tcO@6O^YkxqW=1au7?6&sk& zyt-_>k#7R8dq(|<O=knQ%y^`ld9%x?U|}B%gVwYiecP_=Nr)4*ox9%Etnygs>~{)< zyDJw8oVorWT;%BQ1do-O`-ARf1zV^yh;2OW*DzJKLHOUPC$c;*n3L8iCaMRY4W6!T zSi*cX%fNZU*^LPk)?Tf8=raFCHe<0$ym>f_%(oyRCEc}JyWBh9)b~m5%AV^HdHRW@ zQBdhc85d^BOPd!hPMWFdy7)(tI?IzZx3|_85+)1onyNm>Y@+rtC3}vyH6mtdD-NEl zQ8qQ!6X4wTMSuFQ4{z2zbG-6qy4<@--->zndt|-K&*W<fxN+gv{ri8aFD*0>-?3}@ z^(Wu;t@Cu5jc=aZys3CAGxOB#^>3C1o1Z<<YjrJ9;I&Muc8X&|()wqY&U(DsSSny; z@ZjYhX~qO0olhllNy{#AuUYFOp~6-2Lerq~odKg_Re`?$%TEDQ6be3v=GGKSan5l$ z5jDR&V`GNJoRX7_HLrG;EJ}Jcr()MiyW@Xt&aR)bBKP226-E`U<HmId7M}X3^Ma*5 zMlWO=pX0&V!K@3lrcaf>zhvM1)f_?n&k_z!$Z5IHoO<o#?b+);A8CHZZuyV7aq{>4 zx}Ptna?Qywn6*85f{3)|Y+iMH7K``Sw7IflE$>hNw53B_@W@9;X8zf0_s^3kaFmQu zDm|k2GjQ22Mvf~FXX_o1Vf)_obbUKt=!XRdix1WxUGQ|u?5(|dFIW67TJclkO?Ts` zz?jPdUy};f-IaWG_i)h-e=Y0Zx=j!3jdd=h3oXe1Z~J*3_mBQ#!CEs;iMH$YIhZr3 z&3Gdo6Mfa@y36bt5nQ`oYvg&`=}c#Kd|I|*wUkx%GviBPuNm|G^rtY+E?-d)IAy|$ zvm&7~L8s1aUQ<6adM*2>iG50|ez2X5j3`<Xak*`8vyoZDFT)cv#iTe@e{A>o#~6I+ z$-MK69d>*Ym?W^~#bTD0)xWJ2yCyg&as;QX7I?Okca2l!1r@WiY&#B0*sK$n$rf;U z0(-pSZ?PGRMQaXBd3ojhB=2Hw<`-Lzx0Ozh41Hkg)BN|o_2~m|#OgUaJYUZ|Dc#Ip zRg*qfLL*q#XVQryxf9gxtz9D1amygXV0(=6!GZ(Z&9=&%ITCck&1_S<%o)C*KLMUU zl6tovuigEpK<O!`?MefoT@2<u$2`^qoNCO>u6B95>f)6^bD_PuN;kMB_P)Cv{G^gC z?f=(*ckQ(!kFS!={hngl-gES6{kivtSc2ZT%F6Ct#=?DSmWpC<r{UGW_g7r13K{M$ z{69y5ZE2m6t|^;e!jYA|J02y337hBsyPCWIlXTVXi#7s>L&fZG+B5kac+ADFy?u7k zP5(}>ZyQY)xt;#}BBPn*hs&K+rMr2a&uh0^wOlv<gwMXob-C9s{=cx3>w)G?-aEzh zO_ypz66CK+FW8qH9wT|_Iok^Dpa0v>eVsmI$E8cR0{<_J4|IyOl&)c$W8akEs_A}b z=Fj_u+-9l@3j$kq3UR)bx|lOVyh`xve4kZ*Uzv53t1|y_EHEh6jGy!AfWMr<j0FX= zQ?mpX{rdi{peI9XO;pam%t=`<*R8Th`nqY(w_WuU{!cSmvG~{d?H;|NYTlwbW~QDA zGSgK~-=EO5d$#SCf}+ZjDLZ4g+`rwIb-sG#^xaDwWpgcL)0bYITfq4A<NbXv%>8Su zXX*QU<^Gj)?|ABW$bMyVf$^&y&sNR<KU1cAcA)(9Dl6S3J-?P+(&(RX@vC=`+#;1l zuOFY=_9n>v!>;<exP%NIE^!l8xmHu3*Yk_g!#I!GxV9`{yCnOmBqK|MKe8?^VMh9b zS3B~fv-h^l*;N}o<*(J5)<=JX+0yL)d~j|yzi5|#bi-GrvXx(j+Fl)cuVGkon>ES0 z&F$ukmW@pdLod0pB`2QGsC@TE^HV@YAk(IJzIGMoE9T};3pcma|MB*1m=Ww=F|#f% zLE<61i@<a9o^#R8Osm$;uHE@%t&N79xYu2igm}H=4o)!%H~9dT>uXo8f4VVjFPqa( zxd&>T+oo(aT65e-a>m~LGp`coZ%>@@MV-(5T&2(9iB0Jq?=+<oHMUqTl0I@M%P>vA ze42Cc<_CF41>!HRcsuFf`Cs*>3U8{FT@0Bw*H^r{k;+rKiYe`v!JJpukM%8lZ`rCS z@hDNcc%T0C{jxWY*}T{jbLc{P^1EBpwKvEa@<#A$OZ>_?)BF2V#Q|fJg!pv{FE$&R zzdxPKTv%-R<>rjr-<}pOw1A3le|viI;S1&QW?PHcWTto5-uzpZvb*Scy>0m4J*>{_ z9~V8}7t{20g(man_vRBp{LlMr<Ua7^b}hVKxHC0gPP$|Ey7su^Pp{Qh#%Or)>}J`> z3sUuZpN$<)?cXY`nzyG+#lQS!@-e8td167*^q0&@Jnd>~r|unC{N#tj+Y<td=7$^Z z(Op@#cUSMh4T}W&xQ`r^@SAI!dE@oU^M*RU_X-s)IGktewZGo<%Wff`<P4>Yivpg% zEVlqHE?MzzX#i`o!{Zr36IRGGscYSr;_}V?C(k(f?I)%BkVhPRb4;p4x8)fApWL?J zSY`JTX4b2%Ms9~gmNwTc-Sqdwz8^RD`7Hh?Xl^SpOJ)6pmS1L@!)l%OL?|q~d?3n9 zsir?9llPRvn$s?G6wV0-a@EY#{@`)5)+O;o`J~`8?cVv8K2!YW8qKu~TcCci`cZaY z<fYIRxzPtqwyCr6JJd7hY~Yp9`=Q^n?Br3dNvc^ZI@Uc6s5^H(W`Tsx)7J_C?{{y# zkS!tK@>4dDEe$jRvpp)%+VDxXT#4%EOA_~#-6l-F84-Ug-0<Y9>IF>e#0?ydcRp{h zXjkL8d}LX0&lHzypO%F^2{_)Vk(txMWyy9xD#M!RY|Oif&Y#5&q|B**z33C`o=p2y zCP!<3zSk-9=ZyaL%uvB1!$0%r1jwS3N1>ii6rL79M_?u&ce-ooCspK^d3eIoCv)l_ z`kKm$wEg^C_N6aMq1<q~s9P`h;^xH9lPtId%G(~Qd*x}0`u^VZyQW9uU6O4IN85bQ zEz>0a&UtOPnd$Jc=k<>ri^V0>c<di==*|{O_2lV({`lb8rHplZ!+54fK0U_tbt1b# zP<T%|+u?1`lO0RMCD;rai)9iU1?RW)h(&v|t@C-Y>v!MID|+{RcBOnS(8zJu+Iscp z)vMcMI}@tE9#&XTSaf(r&Be7}Ry@66!`@l<@Q35-0JgO4nt~Q?YQoj^!Ix}=4|`4z zf3dJ+=idEag(3uFn>@@=R-Qc9k)6Z#W684_Ezc7p)}Od^wTjdECR4+%PT8;jRRh@4 z^3`7buX$FqGG%)B>#Lrxmpqc=J^3}jcYVRXclYm0yk`6%9w2?zeDfz;&B<5%6a^38 zlkUIjB9=GH{O$?UdY=+Kj@bDQzt_L=Jnzl?@zaXM`&#SXol2B(Hu~`IQ~Kk5r)|r1 zcXwvW%$c!fmsavLvujcrg*?+=1n5n2G&xYmakHqw`qY+p-3xR6XfVojBx<cVbtq@j z{W<Jfd+*5ZbwAr$7ow##weegH;~8~_6ZulPo2rvb`b`{;#|7%0Q|77Pxxd^bo5Azy z)P`MiWsN@dm^kq5Jo)taM2q+9COzH~ch)5AP|5jB1%B7Ve@=&gO$oPMd)+9pH|g87 zOo_IApTf7?(`<j-P@vJa?8MsqBfaY)IC3*%WbKU^r@Nl%zPtWY)FG=Esf$jxS{a%l zjlr0#slCkbH{j&L1NF`YCK5u8=iPWx(tcn4w&%cv3j$LaOMFdq*VZpmT*b9$)p-jg z0rnG#%x&LSgq_@dY1g5Ebgez^uWj~j=WnWhP-eeHwk^u$mc4%Big-E29_MqKx~5O8 zqtAP<HP1f<T3zBk?^pJLeL7DIZq4c0zxS&X-|dpwkJ}3w+M3*!t$9}8u=!r>$BQ!z zzsx<IDdg0+tjV!)+Ut9^l2^{3es{BPcG<k89iQ?vnKwsExz5npuhEeu_h?dG#agZ% zUNbW}s&aE;U$qzh3(bD<I&l6RV}sp|JZ^#A>rWn?khtnjrLO2?>F9h8i#1y}^Y7#H zWG<0*6qdU9v}%?C%VBP>CnZOgXxA6disAq2?oiJ<=e*Q)_wvdozl0?WPVFodchMB@ zV3Y{n#PaOYgGi6$j``~sT@kn)zQHL`O7WR`^RCkECm#LfmwD3LARK!sevQILw|C*k zGp9)?wRaqyvBLJ7I2&`x<@#1j=4XY>2HR9N<cc*e%_*Jec5$MrnQTL1T=?^FulKd} zx$&_#d01JOeX(C<@%dSXqvWLHNptVsi3z=}cz^d2#$OA&UjFxx+voIbwL;p1JuAZ3 zzGt!cs(+9<MdF-qXrhGHMw>%E{LI&!#SeF9`&({#o!FdwlR@SGjKkWAw!1>+FhASW z{V+uI>bD){QHKNSE#(-@4{TU}Bzx;u#h(eef)Vx64NoG>UMwt*OkT0)n4Cji)55&n zk|(BXPICU@EVJl9z5T_t^V=74PtIJt$y$E$1=9-*Jcb9A{NKKLdtEzO<F<r&!(juT zLqA=_Pkox^QhohRX~)i8$9bj-K4N~RbM>o3o!8-|cal<eAD0R+fAX)$V*ZgCbL<^t zJRNK%oH<~sW>N2#9PIH2ww@$XyEFKvtj}MiwkHS8?FHo4C_E}NIbyD5*y110@x?7r zH0k?6gSKn~cZD`Zrp%Ab!U;-quCAHCcP`@|hGMO-w~x6zZ(L10A>dG`bZz&FR&yEW zO1;O7JqD4#t_7Ve7PPp(N;Z7!4r{%6)7g&H?vyw-<4*l7A&tBLo_>m%c4+y-)7&e1 z8qB5~mawZ#ikNk}KJi7uitLxMcWPdCi|)Ma`du$?Uqi?Pj{gg{$EU~I)ZOAboIN#j z+3W1?g>}VC48A2ttd}W2{vfH5`NK!eg*K@ftAmR47u3YK=WaikdN<BNb9<lOl)kyk z!t(p;w>=U%-91t6LcR3t#+$9*7-R2kiFYjS)+rBpmG#hl>PxEt*Cl<oBG>-e5_T3O zaK=i;KDTs@)DJ}y7ul;<d_1~d?Yd%j^?=MYt7}L6>ZFdZIMpvT<M1Vex~6F>r<q^V z$WLo(I?c>;&7clGI1|Ec4<4M^mcGvHdHSlL7k8aD)t~Xb5%=fDmFnup%g;W$a)7@| zs6$Xfa_u6iH<u3e|K;LX+%qF%y6wm0BfIr%OY3fBKc9W<*XkAKMSFtlZvB~i_VM9_ z>a8}_M_t7C3yUbM6uqW@INHpQBX#4ZzsqG>mpT35YK%-|3uoNO{O%s_WOK;k5|=q? zTFxwsUxg_+*DG{v@C(lriqd<zaw|{q$`>f>OSCsa)|Y6$e*Sz>5%VsU{K_o**PbhD z_LN?~{X<eAAG*F|;;ZY0D)QfywbQJ(?8-gG@Azoqrs}=(wn{(Dxmnb+V~U07ZSdlf z<wbk9op0a0SNCq>{k*5{PZNIDXNWzFT)B~dO3iY0o-_|$4x`Ysq1(ahO+LJB-}dbJ z<4qoiCcLzk*IlRJ$atmmDtNs~pH{Q6@F^!A$a<6AN6aUk_WcpK`kQLxwN0KG+oylq z4qk6^WWI;m=|$W5KSi&X{_!&+Jzc|I-EZF0HpBnZS*l)aeee6jus#;L;N-g%c)<yK zpwTkd3oEQZ>rECjaDvyHl<xGswtdcgX{l)uml982EdKQ5c>lu%=VK@B_AE+-uQxfh z=y3bR1ODLkCdVc-ZuVmM`DnAtP4Ie?JG+D&H!HJkR;z=oH?iAr>=<~xNqGHp*n*QC zN_<n8q?8(&7G7s^YQ54|HtFNR_crN2BSGs;QVP;yCtEc(gjQ%>+8$mMVgg%ll65=( z!SO%abzj*{H~-r7?G$Le$*r?8FP$3~Fhn;7+_`lSW4+1s4Id|7UUb<m>$v;b`Ss~i z^RMS#x@=I-HphQ8dvLi<4%2_|dXrh8^(LL%t!2vM-H*WQO<d<H3SR@QH@O}PT5r<$ zx->klxO^{Yy~z@ppmui4jfnLoXOC1_n90m%d~NCuS#QD(T5rP4u)^YzRZH;ZrpnNF zB|*|RpVWgEoH!qOy9~DA<b9+3(pjMOCVwByVTf??ux5-D`zQSG)Dm^@0L|3|^~-1c z>$N`?g9d2qp#wBQ4_%hrc+CMGpb?gN2O6MRrS--A<m<ejJG1AyM4mn(Y2;VBQ^w`+ zkBi2O7OTwGoWJ-+kvj8}w0g6*)&~-rKkl5WKFh39+fB*-$D0}+vuDfS+3j;{df1Tv z)YNXt;~fS3{NLE*FDb_SnV{{uk?poJht7SCr&i7Lrf@dv9pGJTD5O25DB;#EIse_Y zCSNXpt=eX}U=2g$<WKYN%#ob&_xkVh|2o+_uhwnL4nEs<YR8@Lu{SiiOIPllUw?f{ zf@9=li4?8#Ek*`&rG6{1Uy%KNzB5EfW3%Q%pX3KDZgZlX<=HpSTJy5iWBcDz*>`g7 zi=`W~Py9>y&tbsWuPw9YPFxaSgx3|_X=^{49B=+tXU4O?zuDc(iS^9izUmNvnQIfI zbJXwNS~dUw!s1j5Ey+K3?=0HXeQTOe=dbqqzGqsGf>zi#o!T2?_lJM(Ykk8)*QHzM z-+R1oQOl+xvu!*U^(+Uwg7UaNzBJqSSS-uS!C^5+u_}L6{k51G;#D8N%yVCrbeUP_ zab@N|jq_GjQcqV0y~}vO*v!ebJ#v2AgO&B?L{4vQE04Agzpr@JHq=l1>!vv$c73=z z&1A{^U+3$$d+>^=d8a;@Gt1kj&+E)5^CcJFr9IZUvgTi%(f0Ol#kc)yUul;XO*dIG zf6u)2YTCN5TDU!!Sl)Ek1s~Zy|L3kHTdsVT_~*zuV_&%2Vco02zopO1-Q5wN)iL*u zi}$)!8<dx_v3*r}_`Y_1=9GixTGf$7&Qn}UYR}wk(=m;hrBfgC%;*5CZ)f<)@U@Q5 z%(+f=JT>QLF@5p2cWG^q^F~JQ@VfOImA`Dd7A2`7+8LR0!7iZSrJN>ct-}8Lcq<;$ z!&jwhqqElXOy~L{BN>ygU9t5*s@ZS9BdZD`Wiw4WM4vT3@-JICoqc_`P}<*1rcbWz z;X5|jeV5S*{m<+6EMluyUevleq~L!3{4?dpiZ<4H^|4RL%j)3FYU38xG3c>dz_Bj+ zv+7CXg;l&QpKK5KK2y<jOl9exVq{SL|Csx(N&k)nz3NyLCoS*S7UJqAzoW%&QTgN0 zIZxcXrf)Bq`J}X5yX{ApTdv$a=o$sq2)4BU8G*s43qFP%4f}Sm-t_AFUWs*PYv+MF z%hAdEjHm6FJ%8=SM&qytpKeO+E<486blg)mJDgQ-{@RU&=`yT-ZB}K+xMJ+0lRuxc zP}=in>FM<BoZFJ_%n`@WMKnS<$63N}pUW`n<FhalvtIoBZN;~ve%V=^dh3;wpP!3x z`Vax?DAz7I{rW`xjXlPFOzO`23MyqKqsxv7K76{n48$xyc9B8t;jev>6EzM#EltU} zE9uS}K3m<RRV8-k^2c?LH+Rm|oxd{lkC7>Bc<GAnwY$7d20pxA@OS~w^<2-?SD`9A zF`};7CKX=~nU+2aTwiR~zS`us8*`X?%r_z4?`xN=xTdFatK?GspD;dl0}c&t!$>Aa z(G<qsWUrjFyM-e(Q{6Qjmp3>#`7`z>ip*`2Xtn6|cVxLKG`C6p^ZoK)^?PPDSc`_8 zYb;)QE%j8Gw)M(?6BTbt%I;OYez)bKL1_7*_?55iH;JERleyecKgC5pMr|##ieg7W zPw#D=Bi*b?Rv(++mbbjGpXjy1U9zLpZ-?*^OC>K(z0Hhrn!Ecoc)rIw?{eNHv~=1s zpXIFrFFe1<wMIF4m8i<xmM~cRcJ|iVfcDA_jO$qcw_Y^a8R59eg|~FZmJ;29mLIdY zMVgn^$g;eu-Ody&d+zY&eVnNYWpcKMwi-XSdhjS)uH^3V%LR8qJ?9>m`uL#WiF037 zFIW^NZs6d~9@{Ryn{%DX#_RKxRnxcLVH16MiLYKY+4tSw>Ak+pyv?V5j>)|=%4du* zy(9BqYFW?u{Cj0=IzRP)l&$2yU3UC2+v?(#`K{fMo^#IO)8A8;l)$!Y1ckj2JMI=6 zRVy8%qx$?0cmAoKW%UnE%`aytU6QozWJ*YZiCz+4jPB{{6CZCijG3>ob7_dl+n#ry zCo*n3dF!YEkNxBf-G@Ic!==(#V|vfKGu}}vP~`#joL|pg+_t*Hj;kZ))d!ZXhnBu! zH5Z%QZ__Yw*F_8Cf~~glj1{vFh#p`$SJ=V|+OiR~=7;1CBf;J8tm~g`S_9g$u_OIZ z0)yw;f44ucUY*Z<^`7&4E+#2;^PW?W`({sx@t$7EC-nDF;N#$hJZJKPl?r-%)D}hx z^0|Zh%}cKoMrWtSDD7gIn8W<%pIY_oy{GS`*Z==+ck`xs=?*hUzu8~t#?>fEy_+lz zyLxNC{ChB^@#gH#U;FECrL?S!;N4SpElF;QuA)*w!5-IrJf%8crSyWWFRy=*#%6ab zYPMS7<Xvy?a>iL+J;%MgEhI~};N_ho`xkE8q%HY_ckNr<dW+@!D^`TQdi0#}&dRT1 zFT3J?-F#xdM>YFF;|hK~iDNV7XrKR*pHX|W`s7k2k6TM?`#)U?HdJesI$f{+VAF@o zXLj6dRR4JQYRRJ4IoFQdwkVj_x#z*9*t3q=?Q6KEPh4ToAM@$YbKMxz9X_%DHg%k| zpBE^!wqL+pe#f5H)spL0b@Ym?YdB`8!n}T6z1hCMch=rtc7FD?gPx}@Duq`5?EEM> z^NW>5oA;J_|JMqy3UVE`$ppO-=V|udR#%@A@%6w|(1s9>$+KSAa6H-n?uBjE?K8#; zwA^l|xE-irYWcJ5rg4dcS-Goh)~l|fLb=2fe;2E)%AS76Idx{su7$N53pHL%(9>Hm zA-Gk!@ZMa>>zQk3-CVmULd5so?2Uf|$~{ho+D?z~&)({ieBAEusVltG*N2F%E%m;> zaq(65`stdkkEI2czvgy`KH%oQJ+x%ici|b~zc22(>=OR9;L!cFIeJHU0@%{DPq4i- z`n{BIueay)1I`M@1%i#|k99_-RX_c6@_=hb$Ek>~qWia8{jC+SQj7EPfz{5tq#o>g zZ^QJo;3Z4%rz^?abzhpc=G&FK9DZ==@x9cE1rILi_j7No*IT=9>A$G-?8>>DrsWD2 z^-X`0VLZR|O;6CSWnWV|@2(ZSbaj=7jB%1|0jJc=L&D5_j-ZVot*dj5kT-(3UMNT_ znZ#Fg`P^m^;aifa31!}kIVL|9Z#{SB;%<p$rz-CTJzlnP>#~F^QO@iSbM&ulH0GLh zp+oO_{pA)#iMRkIR+h=@mZTRMy@KxX@b@dv`*b8?wdB(~Q)U~oc7gYJL{Cju>{YxM zt$2v<)g})XZINYyNp+K!M*n{D<oLe-jm>)m3l^<j)hViSt?b9E7kyJ>FSSPGoYMYx zD4`+m*ZSo212%bw4u~ahe5<r!%2~Zj8dkH`)Gv@NaII);Div55ueta8R*#Z2ArX-o zyRue1+B0u4YpTb*@)EB6;)D6|G5J2ST`lXZJ>~YTI(1~;+PUIS>%a8!y2u$UuF9=y z;5oc=<z*&k)$HR_6Bi}FEqb_X$G0hZyUU*LtCLkP;1%X>{gd3c#O1?`Nzr9KZsL0T zJ0_{^_%gkI@qts!>(-xAe`PP({>1m{ziW#mjtS;WteqTqc<G%)xf!`k)AM$-Zl11| z5nB}=*HGt>{XFr7QqrvzIsNWRUc6Tr#nmF7SoZ9Vl}_D}BE9(FD(Q79bNow6Rr7yt zIyh~;^O?{Ksv*aI^Me*lO!)y?FY$ExTRF!q2~&5yOKSgI@7Z(mC-aesPwp~r;fYCZ zdThexvh-*DTm>-&r3GtG%FUY8z3ddP^Qu{kY&GBR^mxs;;<T{J!zNI7oK1)M`iGP3 z>m=44lxdV`<5+T(-zVo`v~1$fGPVy)XI4gR?U7eW%nny{W;ogz@qUrqEcTdBdk!&6 zByRe`+i*^K{@nc1bM*_pTfg~i98~_Km@mBN<l2?fF21$U_IJ|^`coU2@%Y8b;9W^S zo^Xa|8vToWc&YS)Uf#Yhl^fre9Nf}9TVFxc;!yny-V2e3`)08nEL}V4V#%>(QairP ze(bzPa9!K1IOIJaX8NDLGI3R#PPunVo>%MOSEf^Wr6mjNE#}Xhw9@w8%BmUrSMpR^ zq=$euecUamyj&D|c5U(Pz`m8elA+x%4Ook$R;iR4UyjlN3244dI1`dBvDMHyqr<8z zRr39=SKC6EuXe~xlM37WCs5nCcX4p4Tkna)Oa^1e(|1lqXNegbs~&v%?|3GIv0&>% ze}g8Kj3+C4XVz<TIVbGDt?w;uWE`6LIZrY2*|8}5w48l=YYi_)R^Lx#gDjW06ma(6 zwPQVhc{mp5%+M+Lop_9+G&WD`%$Dn#+s}LvTbq|wKK)F{+=ARQ8qFouH%+7q)~#N^ zxoXwT&uw!Ur?m?^MXvF=r|G_M<q7a=iI&ikdH>hWWK60*23amqvBPKSv4oJjPZL4Q zB{DUAADsd%mk8FodL3oC#9I@{a)}t*Ga2r2nddCF70v#CzKTyvKL74}v$UF{InebI z{>6>;zc1=(|H(hh1L=-eZI#}gQ<~AUL&QYXhzYdUW4YCidb5;v-qVN5&V;Nzc=ybT z9%K2lMbSn|&EO6>XPO5utI^WMq4U8V@&j+%w<SM&yy-;Z#Fqx2%#L>~_!gw6l6@fL zUSR6JRHvCSi6V^xg^5lnKh!>1%#hsb5I-qZSGfHfLuR|uweyVLz6LE%Hs}=oR_I^4 zvvFpBX<VC8as8td&pe5@^`0H=_fE^4>3R7ax?bYcRK~ykHVm<z)27)hKA|Jg+t{b3 zY~W_oxI6SR+xj$1V{;RokBjqnx|}~bf!%o7?^?NzJD(?<mH@4nkgQLwzxC4U&KaMp z<`<6nfV<>QlNmSbfV<=z;4b-|-9mPoKeN_vmNGUt7%%vEhibM58@NyIE%bx^ubqXV zVWCApS84|fSIfLVEnF-Aym`X6?fAnpMw=JKO!zk8(wSeMznqO<eLkcmZ+*&DeOQOQ zEP1_A^1s_+jdQzaRyqDQlrI$Ve45&~WtP6ifiOOi)nyVW3nsuTCQK7jo`k&El5uNd zVDYn=ZqG_*-wAnsreSj0*N&HcO}=~V8Oudps0y)ka9Rd0yij)|iPMJFlZAO@opB1& zK0)DhLzM!}(3_9i)tsk2TbJ_e-KCmx)3rzTJ$ue*ITO((KYqkY(M(42{?eI?GYpS< zU)ppv<$+WE%C8JsWj^nO&ayuXExhchnld>(X6s8nzU{MxxenIw*0~1m$xfSc>#O$D zwPp>)ObLSRuUTXxANc>!o?K!G+5y7;f3A-%|J^l5&VY7+oN<8c0Lg9^-k5m!#&eH- zc}}-vuYr2x3$?i1I$!e5+?hSsBJy;Kq>)o;p-jCC^Nfp|7cBOfxiWTfMUgtglQg!s zw=3;SQu3a1F7-XrWq5+$$lAR=IZaAt7kG=n*}ps5OP-4H-A?>>(|K1$xBRK4>enQy zS-hU!UKkU0Ve%%&3#>a5P27@NgZO-+Z!2eh@61w<4NsX}eS)jk^#8k)UuQJltlwMz z-T(Q$gst_H->wSUoNK68UL(HjsFQfs%O|F)5dqgse$Cu9Yn_hs@?$C|7)#oJ7b{I= zIF+NMc3HxrQE>S+o8t%9s3le1y_mcIm3-dqlYd0s&zgfYmEApqd74mZc2c%V@4ow& zPqqbqFWm3JxZ=Q$;}82@dDcmN`tfFo|LpQl_Vp#}bnH|Y|GCShnccUScjelBQ&!Z! zXjrMF)^cj`f;+399{zt}=RYCgaHlBim*#i0y)?9+`<!a{>@KiI<LR;^bMqcs=Q)OD z`hxo8Y*qiS>dX+Yn)qe5#i~b_n01svee!<Ys(Vkk1Kx2$`{Z4FCSKW}`sz^B;~l!f ztLyV6Ugc?}PpXRa%a2XV^ZxX1$-mFKL64hH21P0_f2P*E`0=JcyqYU^-xTM5yK?#D zGjHepy;c?^f7i?Qj%sE3r0bVsQ<hGhUBKws&`^6Z-|t76QGC;sTR-n-{CoK4by!u} zQ}%hbbp_|I2+XsHc$*vOd)$jx=9TBCj%SKB5;Ioct?y|HJlV@&ooVIfl>1$bCrz#8 zU(>Q9tM{x5ll-hu!yGNwp}(TBApeg{)2%EGi8G(1D`h|SZx!PW(&F26!fo}rF!fLU z!KG0K`xTVjZyvX~{w3ZZHR0QNuO}Iqd0uyaEMkeVPjlA0{VGFkWvTR%_*++Rv1RS% z&ot1UD*QeA?x*^%Yht?QOj34QI{TKMt65STCv2Kp(|?KD`Z(r=HT(sW|G1nAl025Y zl;_O7{U4`pUSjXqbIIgtwld4<30fzfch9`Ad`;ekuERGX9Hmv#)sA1e+oiZ~QQ+*$ zZ`1!u34Gf-apAPaoAy>Ey+&y^p&N5*XZU{2PCmBA+di42zOCZMv6=5@Kh1aFQuyu7 zY|%3{X6M$`Zf1HsG3b0%*ugXDk8|#rA7`Ala9-`^rkUrD-Q1Jk$GIi3=-KANZEt5k zc3hi&e@y~}v-r@O?E5A^+1X{xyK681EpyqOw*K#$mYLTJHy7X6Iasj;yfL8YS?Qge zdtf6KXH?e9nn!;-YuIR(V*A-DZ`-@sj~#uJzSZtt7kKE*>m4_D<@a%K)~j#m^4M9_ zfBo;aTw#ewyD6(bgk*W$d^v$V`h4G{$4nb_GYdF3-=36pb#=DH87;1x6%L;d<-GD) z9oHY*7ny0)$G$P{%o|hAchLsiGrE3-vYPELILOGubjrzRTD?O6YXoR&I{NPmmatb+ zf?gLi6((E=K9DTox?I6c(eH7vfa5lo<quB&`9Alb{Cc$qeyxJV4`RC36s2(AonvB~ z;8Esv{M(767KtW4SEt?!f7RCh#&@^w36m%9J@b#Ai8<V^!XntWvG8JR#YP98_$%Az z_I<Do;ykUvywUGSX;Zz0yUWT`sd5LDQ@;zgK76QE`t3yIqLPTv+25Lk8t1vZ=UgRK zy&ya8Mp#4UGl4yCyQ^~gcxULs=c`vO6FK=br&0L`V#4}%h*F>MkB&)?rA{4qV^h_V zo&M=-!m;Z%FLre-HQepqqoBUJW#57&PK;N-I~=XI&`W6O<KHi5UnQKDnY4a~o7bbP z^6T0~%O3Mh+4Au*^NPl{<g{mL{c~n+XHa__eSJ#q@3XhJebu@D{ZBd5ZuXX~dy8c{ zzP@8zJEO3q)$`X9=Z1=(ajjD}zjXg96Y#f5IluK+;hHPud>My(Ak)=9*NLS4{H(U6 zFXn;S+}ZV9laIBYJ-BAql3tcAYYm_~2JV;4@8{j>d)>G#0kmVF^W^!RafaFk*)?{2 zU(Al`KsO9nnWi26T=?KgQ2+gvqQ<E;J2oBwZy3<sIrHF}w?8EW?ucwg-Y}qj;=oi+ z)3W=9-}Rr)_T2o&R+vG$eu52qO*MGSfW(I@=b>8$raVcTd#xx9v}K^+jzXvg^XA)A zIAoM3SEhya-CTTH`%A#C@|*V;F{&@}7C6~|@O}QK?KgM7sr~l7{{7_X&Vl{>OG_Rf z-0rHryC-472OG!DjGu3;Ot+mp<6y{z_#C5|bu8YgQ6ax{&HZQ9$2_~EA}i#@`Ofen z+YH^p;&0dX9L*M4qj1n>8uxzRyNh$uRd-~y{TJ<ebUA3*(&?40>deMBubTZ`(>F8a zWmK`r#!@kTOaIT4(|^vhRB<(R`#WoIl%DDtt_6nf(-fDgTw=RBllw8xi@<6(i`!lk zavE;t&p4quyRlz%!aGAw|F!kmewnh*4xVmZI(gfnH*#ywFIG*BSd-*#|C@I$<CgmK zoAqQm1u7?8F<tgNRsDp(nPortLu?m&pRxGI+$*5xDmi0s_2=*MX3^)JCYP>$RQ@aA zY>c_nnS1{ppFLH5zr-*ZbhJ;1Ww!a&Gi(1C_cZi<l$I}&oUvEmIqZ7o*-7tW>-X)* zy}u^haGhhN$g5e$<rHR0m6Tm_tqENvd&Dc!fLBGhAo56H32#5=%8JA%jW=yyttz;7 zAxUy`^%gnKuxV8W+!->?Mh4+W(uIwtx_e*Mky;j6FsW#ZM`$2dQp{Vme9^v#Lb7@} zsRCbrv?xaNt^CJhV>tP&oMwXDjFZJ?zV)33l?To>JN$dycW?2tB{yH~(Tv|X^DyKb zh@<Q4B;?9{ZPUMqK7C|!Xu@yz1*xh5A=|=MMBfnSZ(k;7`Iw2zve825`CZ9nbH!GB zitx7iMgM-5wf~Cz=JL?<kFQ@&(mi?q;`w7nUz49{$Gdjx7MY2is4*~hon5ndLTM{s zM!mP~%M*{>&hk8K-MGch?Bdq~8SN)Mms@8rRvwCSH1l|RQ~B$Qbgy$Pa!s=j_Hfjg z1wAmjt@_-bFRi6*1y4l0VMO%JO-<8RSsMvmsCu%7ar3^#Qx5v5`%Pt6k9IuHy|MQ5 zZf>c*nR0*i_D^n}Sy!2|;p<%Hs8`};+h$DvwK{KBJ$Q<K{<00}_ooz@txdOlo40Yo z=3VOy*=|%B2%8w)yTh2ieD|Zp8<Vb?nqO9FVe(~dX41XBw_2^>{A|BN0eMmt(^kb= zFXuUvmno9C>Cd7EGef@^x2@!2&su44^+wW5Cx^AI%^S9czuJ8HQj1&3&UtD)2R}3k zX&TNbNj)^BxIVa^<xBX1pKFZ5@2))c^)%>Ehu{w<uY7MaRP|0+cX)oQNn1sJs-5kM z^XmlH1k7;j_<3?h-p9$4@BjP9&iBdfK&M{1M%aXi<|nHkTTl9SQZi}d%Jg60BOUxV zPGtPNgQZ1xQi`-og68dL(0LA=b=3ylNas1!U(YyaroEzfozqk+zv8EgQ`42__T7&; zbx-_sba4N=h1&ZkwXa{rvLn6wx$9iL+U0!U;~chuj&sP<(moi#d4FQ6(5uMvF=zDF z**-n9E`6tQggD>+w$9i5=N?WmkPFp%GH>V0q-Ss4*C&RRFOb(ym^UL+e*OPDGL!Ou zJ8qv_&t58XnC+FZxoO%d=I4xe)MmWgw)(){kcqD^pD*ZO`u{b4dxcz^p3bt~Q*u>0 zPFEdlXCyYc&f~g&yFKWb&o)E31HTNt5B+qx9`JdZiS+A#R!3rv@6l#I$bKer)$3D# zrnGtQR6SAFzww+;d|fYme*{B?!gR>~i28;VQu4435@$nBPCX@;;uT}K<kaF@%-80f z)_LFb>yMw1F?fT-74QZL1LO@7N3N|8+g$Mt+TkzdQBg@upAPHrb0o>9ecE!E8Pwt5 zdpLMkd(ys8>qU7*;&bcLUUe208g?7*tT$yX*;QNmbf;$P=>t=*-?z+@Qb;$f`E+EB ziTVF4GhSZm5I2wi_2)(TuC_-<&x%jrl6h$V<=cxj*~fjG4R?qAJYn^|L-Nd**~%?z z1&z0VyD!_^&B}M+`0|!dQx?AMV%*oj)W9qH>yvx4_Sd})uWDptHRNCV{Cpy3AMx(o z$<;^Y>hHXr3Yvh=0&S4cE$faepOU@Wa7ory*)2}d&VpO@+BkRv-FdAZ^PJCj)vn`< z&RLgu^+l3KhUD2jTTgM!yvRP?-1_BOcHR_?MFxL3-6pW~#$1)ywa9?wTXXY<t*p+$ zQ+IwAo0OWD{3h|lvtM_NokN|S#GPMwD!3)2Y+IjIf9|A|^S4@sGj-{c{N7DfRDNFi zGc#eu-mHC@Yxhs9YJF;J5K^jLYPjUg%D1A*xgOi}7&J8;f*1>h`y%YX^Xyla$+Rwu z0nf7^30augJbfR055$BGKB~79Lt@*&o%)$YzIu06ZMQzN)0?^q)~T-tZ-S`RWZvw* z#Zt40-T9XF({qaMPd>3Mx%MyiXT|G%+YL=zo`i9<2|n7BYIIfkmMZ8RhkR?py*Vcl z8zItjN{f3yhd3xRf;;vr_HH}ew)^asO9`jnq<g5|`H>O!WRj!^(msfl4eLPrAnFkt zA$SUv%V+X!Stt3El{G*-z9EHohF9~No<1K9WyKyP0VO>j8;<)<8s<qJy7#6Zd8m^A z)`q8dH4kVf#IdjXJ9WJ8+np%BnV0Y)dG7p$Jaa8(-j#Oy8!z-~q4Y&Jo|*gVX2m%R zu9?FfD0$)k3FfU+H)Lv>>^fiHbW!5P1TCiIBf>kP-{vh2)k}ZT)}}h|3+u!emNP%4 zoY-(7-S_<37d!VXY}j<c_vM!NIT5^R@ATS)G{VZ?mbLQCSju!le7@=gGv>{wZ#-k0 zE--7Z;S5tF7U4glhH+=bgSLD#PGvlG(`x@t7XDwg1(TjX2(roqb?V~;I7EX2>u;Tu zyaPYhVNGh<+|XZ>*5W+YA;1!JtV7uqTj;S4lL;Q{pqGyASO=3F-HG5?_WHR?QxuB! zi6R~8p!oL5{KEPSqmrBNRvmkwce_0NvR6w+-LwglwOzP<0yq{hZ2tAdXH8}8VL_=) zImIHn%PKshwk_g`S)t6>(51Rg`K^imjBr=~^zsS5^9rw~S$6lHT`%7BQ|eFGq6&E) zP1CpGr=oMYp0gZK3c6~|xo0DD!J+t>CL0)Q9nNf3f0MGR@>P*)Ti${Q-ZYL)mSQ}c zwnpjC31F4}YwP~0RG9PKhUt?8GBZOB6()apBT;`<%6F;W(dpKT3g*UH_t(AhMV#FL zJ-R{h>Fzx$5e+tC`PS1@pDv$&xBe&3m4`-mk7T}jy-&ulv}o<}rF~la9CePJnq;Lg zaZ_<a$zjj0atpe%UVdu$GEw1Ml=y8U@zr_zn5N#~P!U=E#wB6eb@87Y*N0u$98}-F zj^UO<Xyght9$iCm+ldPEmnZCU3S{}mwvR(5apN`1H4T5O`q$WsrzVvB{y6>g%e!y? z|FxfgZoU09-`cwq)TSg~6pg#gx$^HXg&es_B1_EYFP~mMpLfN2P5Z|}ZIR|nJf&QD zw|+j=yWL4^|GoXepCdJxH=jPLt`%~LD@Zr?ay|RYE&h$K+rAiB-C4NO`Dj+_mECHq z*Qo^FoIP(ZUpBjQrRTMI<!xc<U)#6Xf7m5>>Ee{k+{e4F)?MaWS#G+2QCqy^wdB?F zjC-v1G#*x5EA~5E_hY!=ox+QLOSeREZ^(R9fBdyl)D;dH=G265%VIe%nKhh0b#?pM zi}md7e;+-ussAx!PjhqO#g=Ktab97!i$AWjtXMMV{Wis_C3jk4eP-3|J1o0Yx6$uZ zNu|-+KU?%nFNyvLut=Cyx9_%XpiyyX@V8y}x`b7}3LLe1!obw{NTrEsZ_%^b$LGt_ z1kN4USv&9e&VxaR9w?pjYCRAVU(|m%&8en=>73$yqo(`)|K^m{Z_-_H`N+1d6VE2M z{^;Jbg5ALOYVrvKp6AZm^S^SOV4pgf$Du%X_Wuu)=l*J9;$wZ*y){ap?%2dgegWo% zb3dyk>A9tpq+b<#btT2Ia>1Un4RQOkkEefmcJOY%@`)Q$7gY6j$L)`nU2#!Lw%nO_ znYXcC>$G6G6$1K#@<CsgJ}s|5&Ac>v>T|c9_iPU#A6+`LVK&D})&79cv;3cxmOT=A zzzRCTG(sV(JK{tcOUygAWzU!Qolw4D6Ck%Ob^U!^{wp21=XNjjJ6-zP;cLX2y>;bT zlcZWrcDTRMxxd6`LVwqUP<AQl_)pK5`Bhh>E>PeOi&)^W<cxj&YTwuIZ%IDgc5BMK zSO=j)9(Ug@<T>Lb)e?1d_r~C`wng7|m;|hh@ReBlh^^?K$M#cM@jO#<1XPwCeLF+a znD^%5D-JgopPBY3hG)u7)tT}W|1EMmbs(pYwbAh3d>ez^v;HnK3D9(3b9>wKpS!0v zPI{Zw{2=~{OVI+4#}Y4(Z*BCd-xmMP;kCoxtxVf4Jy@#$^h92u{o`#1eCFT3D*A${ z&FSrpt6Fjq38LD^Seq0Va0{Q}^-LDJfA*)H)vF$j)vKPfbQjo#n!V2rDGmrbzwy%! z=WWv-FVcNw_F&pl76(SL8HJ3`f?of)9JIW9t5E>wVZ)Tyo=p<RV-$oI^zv@4T(GqM zvcv+Fc!94jyM9&`e!8<zNWY~`B6T)f7x$?LLMy#vo!zvV&9{jrW<Qy=&0#@a$6r@f zsZH*tyi@k=t@Aw$8q9T=Is3!LoE-5zy<Ke)YEtPU|B{t`_ZGT6wEySx>Y%}?18>^n z3*4`G9d@W}4=MZiPGs*2htpEUl@+OvC!bqTf2wwZ47<#RX&z_iHQqX>(fu#v;q2R! z`maq7(3{5d@qcgG^WO59kLJsMzWiVMb-MMwsWs;U&pEt3BR&7-$BBnOPdDE;zb57* zFZ0%|=KBg4{QGoldvLS%K8fj(rybrNkiKsaP+$3Y_lf5+q0%d4D;`U;z0%LG5&ya4 zku-ajcYaM`{cGvJOE=w}aK7=n<chhKkG+jg<%-TJsk+}EbMoGtnwXF895km-`T5;U z?kCTU^`8}f=I8Fd&m?hdhK6|PPKTYpDx*WsO<NqiQ|H~qT`yilJ~WveExDNA!lvz) zMXX6d|E-zk_wLvR{EW@ISK)Ye>LlH|gq$ajyVmnv(cAOUmwD-&`aSi$LB>CKJj(XI z&$s6zulN1`$M4Nvx4lrid(m(6`AqGfZcW>B#W!fu)0XP$xr<NuEfVIpnl$N7=_DEM zH*B6RXWiHxyq|5Vm4EVY*ZH#fPwF&ydgobWY?{3G-zUo?^ERi20U9D%6*Jbk_TO53 zqlZQJME;x=uha_n)@674^gdm>eTE66B^T$LoA2&DxcTq$!R@!~7#;07n;moiewV-Y z|L=6QI!3el|GVzoiTN|}NaHo{#{4gj(oP?3|6A}u=g!C3_ccw=yD;3zirl^JPC-Cc z&iea~C%7g#D>F1NXLc&MV^Pv!oZj>4>lr`x^qId`76xuiTXoYY_H>SCqp{((z-QhM zqSoAS3w`%BCLwx`(zJ;poYOvc<S@HbdOfu<XfsoBTmJvGXiR;-rck3|^M;P4O5%;{ zGJLkkIePw?vH8v&_Bg|NM>NiDjq>3Nxglg3d&5jh{mI^)I+uU5ISG0T*(CkqSh~HZ zMPeya=dui+pFS;fHG?&B45D6L@aVl%*ZI8jPqLZ+zJFEUUm5iXO*@`^E=Y2j%eM^z zE?x5`SnSe}Sd{eGEY7Z`o~x|v*ZcCa?}v2emgt?3X*#pIa*MX|1(&;=GRv$OFX<bd zOLOt_)Uz`72`=5Bct^P@^iP4nsmdUplfhL{NoFR2aqFwX7Or0!T0KelQm{bS_2T6V zme%bMe^>La_RYhc_co{e_m3zkd~7%E<p15()?5G9KUe&Bd9O|RX7)<yvw8LQZ_1Ob z6rK1c&UiF;`R~JfYi;_DpWml8<4yhD`}My{>-F#5e%t?h_v7>@FJIieUa{f3sNCd= z<^3P;1v~A#CHrvwzC(pq?%$PvQ-61+MEb#sj$PJ&=Pq}wSC^=%-L~2IPOa6QpIS0s z%D;ar|5pC(fBE-DL*1IF>-*DH3NG7;t@~d;cW(OM<-4zb-EaNEe$D^i6<0JXWS`&X z-O}|tKRucGFTZ1nO7r^?kxy$jgx$NbLBF?jquE8>=@xC>-MLeYc9<Rw%I-TD(-<ps zF7wT8Me(WIdj;Dj@z#D@#&Wa7N8R$eRP5RwJ@(1rvhuUEi)%Vp?n|4a!*VS`V!p(& z9kJWb9<9%e*~IxKCnrP1QQ52`cjZ*BrUMPPXP(`5<?C*p@bYW7pM}Z4`ywcIZpn^& zi*~-T|9W6sZ<KYzrR|1~OCO){-MIAFs@XEP7C-6S{Ev0_gkIh+Ml8WsdV8hbwf)*^ zb?(fwZIAem+|b&4@z_IY>1~<&)qXuSH;7x)yZFWTDK3`Fi{8~wo|ox2!~d4enl`!L zmPb4ft?LW=;hQk4CCc)RmqMZA*0oEP&G0_7RaoA1ofdEC+LcCMDl%&BZM~|{SNQBV zdles3WYg0bA7?V#eahY?sFU|T*Dc6!X>w-Q;r}ygGuJ-J>d+_^-StV)B>!V|#-2m` zSG;F)ZT@o9fIIPhsZF)_$@&XC@du*jUVX%1u|iPYsYuFGh<&>Ci!UDvIxJ>x^lqw{ zC)Xj*`tbIz^Y1NA8%In@e*gYR#F>bcsDBPS=V=I8AF{7fbSmKyo7-u+T1sh-cbi$^ zw3U<B%eG!=+i2te@Yqp{+7-r|nrpIeM`Y%vwK$(&m1Stlp&nkLw{6>6-SVD#vt+jK zncJKKD^8!C{Bv=poXHwhwcL`0s$y?GYn+c1t6iOY%3!|0%gGD(Hr)G?cdoWSTG~HG zfHUV{w(zu+i?bj3=j-;HXPT)5U-0A-<H}>+aI#>H=Bljg>ti!-h-GKQ)J9z@*jl!< z(0Hf*3@d}%56tYE-n=;;;IuVjmC+W~EA<<>)$2|hShLTYzjCJj{jVWL8zh4Ndkg9J zue1EH*mq(-)8qRo!7ts8#WWu=P~KYC_TunzDVg;L9Bwo%INO@PzWi?0(qutj&pGNX z%~vBem#_QVWF{HYcS_Umt=HX4AN5??QcYYXyB#+@*jHV0Gd}$O?c_qmDvNm+r!=*1 zm^p1;{bYHj?8A~f-nshoE@Vk>wW*lrWu-mG#OtudMft#uGk;~oh<@r=DtPjN*!fpe zs+QeW2-0Pq5bB^+(A0mP`@#Mf2YyLs9+%IZr@!UAtVqH2uX8e-CvTD$DqD8P;BegK z4YsS-#_zs(M8rQxO{I5>d*{Yjt!<2<do@yIL%3F)z8_PcvUS=sbI~&6b8ap>G&K8m zM?Ggv_J7GGaZf<_!KMR=bDy_w&oyUGk+wGZKYh&uQ?40F$E1$M<-A_??n1^kS0|5c zEBw!>Gs&)~Uw3)-s@&a+Ud~t+@~ddk#o~Hr#fqM8=XO5JgO{G}3Y+p~(d`$DGCn{3 z-BZA&=H9u8JA^ADp{suOrLJvfXCL^{UbOehslWWMH$QxzU#9As`+JUQW^q-4YX8-1 zcTD6Xx4IumvyBVw{-!eTfYRoOrZgw@`u{?=C#0+E@3*$Hwf^~hw>kUz_<v#Vws~II z&TA>|xqs#3?aSTM^L>-Wrd2K8w(i&&*0VmVh5WTrug><hn*B8B_J&8D&+2c@X;_~x zl|3z%%`dxBOLyk<wo~gq+|g<@;5%$!a@?l+)Z#@mX64G>a?UfK^HXKsm0kLG7_=2u z@M|>d_fCB?^W?9RSDbv;EKMX?CIs3Qp1rWK%%0`HNAd&?w|ld^L?6D)*0`|ws;pAr zV&{~?x65Lcq}N|vv+wNO;#+${zdnDRQ?LCiXv6l2g+dxClPoT**ZH0C^;C=A^|E}^ zeFnE;>R8s@whZZSxPN5Yp*cH$UCT<oJiB(|=5!stI|kKR0#z}N$6l&VJ2KJryi9EG z=Q;nT#y)>C>nh*c0+YQ9t=}DEvzp}5{`Kdx2VbhQAANuJ;Oj)SGn{jLFFSQ6F=|zw z6?2K}s;|zN9`W+&vz-$xdJ7K)74=EDKaXSUD;8k<^T|0xB>e9UGyWn=)s<Tga-2FN z_59Y_%gx%;F9)rvdGc>VSi$pGpDlkpZhgUV#v!ToTG#8jR?}zts_{v`SpIU+nh2q_ z(^I9JJg##8kewp5k3FICTq{q-yr?g~oi(p*u#YJJ%%!xX{#!s#k>brYJElxMqtm<f zxS`jL6@@acAv1V0qIfykw;eyW@kYP1$?W~z+_RfbH5ASE+GnTm^`$Y7Tj^~JCGM=x zXHwRx%$T%#>x=V+?X6QDtX(hPI(`1NYW}_V7!99CHh9l`eAe*f#6rm}3#$+QI8<nH zW^3=!g(<orb=wZ=$DI<b-+xx#^{lm&#)*reJ}S#P9cDi_-B!M@_nf!Oi#QX9;&*+f zR~`h+^)ix*ognda=C+&H?f4mvPTQt#uHb7pN0aB&n(FNi&#yTxI`ULR=3R5U@psu@ zWv+L!%TH-NTp`)Nz^Qo2;?R&|e`i?=9+s@Wtv6>&(5ibSb2jIkn)Y*=n#+Rv>pK2R zlY9&Kn}jFuADkrc$BLtmJ3oI?T+q2oGs})Y7CB^85wrBlrcTv>W(VV=Mgm=FJex~W z79}z`pZn}~;k@F6`C>-rLgSwc^v_&&tRPr$?!2JArH6PlTju2}&*4aG-aJ=)^{*J+ z!^QQ@`lXM$nS3_|AHFb$XK8}OqI*lNKGaLNSCofxZb{>Qb|5o~ORPtr^3008ca8Q3 zv43C_INhaH>ec7IJRw|F!DW?D@lLU<htika!WTV0`LuB59L<C~|10Jx=?K1Y&REj+ zDmgEC@g3DYj#-;S*WZ7+%*jx8QU5P)r;Nw@zq)m8O*AZh?_rX<;&)S{_=Y*Fn#;xg zG?pH#7w@^+x>JiOPW05mPbV%ulU6$^5NW!~;rY^KTNd27W2N)&(#d~su4caf@+H*O zOJ~89&J|hB=i=sS?Y#a*|LUgHwm+K=^*mI&^ud-<_vb}P?cA0AU0x1bKHhlFIy0Kh zTkDSR+J(ng-AkTZu)N^i=BKe)u`e1=uWj?ISNQz;OSR*(`qib?j?aAW%E`rKZ~5^n z`RI!e2j(+MTWwa6nsfd6)uLr>jv?w>?_J?(o>sS1?COD#X7QALb<VOgO*FSfmATBn z)pjD`%%1NYNf{4~=688+ew(n~@w0l%iWP5muacbOo#tGA{A%ekyH&-REj<VOI(fpo z(zDcZGEWO{y}d{6qR8_4kTWH9EW$=IQ?}O4p8f6ExqD}QJ&kVbvBuqf<&f95h<oiT zo%T-`^Fz+>>O2)&AnT)VvU2uSWey20Zl&CgzqxkO%`6;~GbW_k>^!ZUoVlpB@ciG4 zbEFNn=P^9wH|garOFyt{LFS&^>54g?&knC;Dsp_rezK)dYq{|k=9$WG>gsPkzI-?F zVbdAKJyTwVudsi&@3e(^_run|kKg@%qM{mpe}ds-mbokT7d9Ck((KN^u=9H3Rsjv+ zsfkiw`RyHcD1E=^b4cLrm+$+u?pdyqSTy-E^XGd>`5k3!zyGeReBGPhQFitBrWpqc zwTyUfpXSyvteWXoGw-UX&(q>Xd)dO+kJfhw_Ajwjjbs;3krTNn%lzmT*Cv(u7q)~? zbbMtV)cv6F;=&1!&N$3i-yJY1?qKo@9<`N@GXm$XQ$3@@!1=AfBKXCO8Ltu&pQL^` zZDkg2e9drQK+*391#^z&JmXe3aIp8fksRw*y5d*$n%$QwImI|Rmf3iy-F|R%0iPzr z8p~5J>hrV&PvnSfJQZ?qhvy!Npzt@h4oouHWw>G0LirPW6ec8H<C^#CY|6o?*!pQT zmpl0?!*1L0$IaVkZDW1&T76A%hn-US@05MHp$8Uao_aL#<#(TUg)2++ZFVk*u-Krh z#%bjh{Oyr6%Xhy8$MbKT-CtW>^rJ|6Z|&yZdv(9p^7GWxM{=CfHY+TcQhoj6m4)Sg zNo_)AE6eX*cz)Zw`?z14<l`CV!(E!#+qQ(-mfT_Un6flI*snn6g0#oU1;4N6+c+L! z&bhpGZ+PylDOR&n^;hhONM4nx#pz$z6d`paB<9Mo)jx%w9f|#P#B#>#KNE%R+@IKX z7V+NQS`frg=N3LolD%H8;83p0r;Jt1^#*|lRv56eN=)xaH4{5!CKYJ$P<vO?4|c)6 zWve8W7Jo={{_*U^+11<cUwvUUx1yHoyw0@AEVHLye;uA{_ImwWX1|Y*rry0(>7Lcx zf7Q=vYi(M`p1+K<Ru=zQ#N)Y`&uO(m*ztc>9Hs>}hbOF(kKcGwp!EK}m-W}OrdGCU zU)gd*%5L7pw(qmd?%ck0#?(1zLx<um?fGYugv{Rl31wt&n$W*?LPAn@6gOY(t7zAI z5o`0W>#5WwK3=4J<4MLXHuebDt1ksanxbW|Xgm(_>zXDsG5hM3^<B?%4>&)Zu-Rq# zXUo+`eE-UIYucvRINLXVS->S$y}eJnKKtoWC!fzp$}|4oaSXRM(`n;AZpb1XnDDpa z(<)xA$IMmLcb^q;-74j{SbgonVy(us1r6-IU)Pqt-O>I`b1j2};;ogZrH@|U-Q*?9 zCC0$oQt;g1XU-R^6Il}$ycgJ38c@c2;=xi|*4tO#$QGV;`gH$?$-BMz3J1Qex3@Su z=b2Z%ukof04Y><0#=V<yd8UxUE4JeGUr+8>>ay(qG+xs)rw!Id?VrWp`tgw3%p22h zdt`fVKlm{EuRV`*dc#Wdyx=Vxjk7CW`s{nFdFJkSE9diVg}a?*CvoRKvx=M9m&NXL z{m$;p%gfiUTDWZUvy}%}+GcVyG`-)>#w$^@t#Q%?!_H^*flm9<-#G1H-LN73<eC}o zbNr`<CHHQr^L*=_>}eq+R6H|XY*JBr!Q3kya#wdmi7&r(?6X4GmG#DDjzPswv-T-` z=JfpG7Cgl;-E!lKnai}}ZvUOaSves<r^A80@XhZ<4jpxC_P^Y<ddAtC8;Tt#nr~=- zY@x97$&?NUBLiz?Bd+=ocBLJQin!|8maU&BJDEND^^{#Zt<qw;1eydEIJ?IP^aY&V z+~@be<J$TqHzh<Q7Tvx3uP)mC-ktx8n$Q2g=3*UZSi9Qu^8KypJYsQeb9T*TYj}`( z|G{?S>x*BiG?+^zZ?2ruS1qkJulB$($Ca-gJ{IQhIXYeOm&AdN`iq6Gb@k2ikDAg1 z{#`r9`ew$7ot(WZYSO1ZdVj2Ef3v^`q4P!>iz_00etwoaouXUBw8CKHk$?qRQ<m6e zL<)sezrPjr^5y$o8jnBil#i_yl%4V5ag(dKi<!A@`pkp7wU!!BJ+mpyV~OM!p8fUd zPhONuwmoD2z24L=LyA4^fAv2XX5Zu)_5G>}M-ttVS4`O8>0ptr8?fT=nzfTQbYAoG zH#|O3#YVt|Ey}6(-{YIxqYm;Yx;E&YnI6-(ziPRD{G@Whs}){1u386}@A1Czr1E~l zB)>D>rti<Q|J{&(eCCFe)}QPa&so9sXs&{wck;)Y=P$2Y|E;@!{zB&S)B6{0yR1B^ zT=1c8z3`HK9rMf|Z{3}?ekQk3{ASVk*Dq7oE>6~8xaey4X%`te86iEz)<yibb?@4p z^R@0z__+D$@_rrvsd-*AmQFH|*?+k3Pt3%rQr~tvIrBf2y0>3?cH_1Qi9TK&S(kaG z9d20#1b=vYarN}Wq1G#3pA`QR@FMb_<=uCmy_&T(JALKrqxchM*Dn8RdX;VVmEC8* zUfmQK@>6v7majQm6}1lr1a3AnTUn6uWe&IWXOSh#WZ5t4REq}}UStYdthZ$$r^Vv! z;n#kh@UlG{6Qw1|yI|!ajqH;w*GwzEK3%^3h{i&dsryBvdndAAyXSJIO>)YOqJ#b6 zcRrr6TdOad&$!Cee9^9YkrdMjQ9Uyso{`PHBU^t|C2L_r%A0fd_t;i*o?I5>@-#Ww zb-CZNrHA^vlf@SunpG6`R!ug=RG812O}6lFNRiIT6uDECVKR(w9{PCbTy1oARPyok zxV?FqaOb23(e>BfsmxJ*VEc0Gz1tTauq+dQHPdt2gOYh~za5>~=2pG?wMc#4v0oor zR5^Xs?VV~%?J8&QQ{bF<<a^omiMPF7r8ge^D|CE@_uS7Let0)WCY+4DQ1v`D|G?_` zDq#m=(-sP}+B*vGSi5Dy#v9*F>^e%l+~=&=9IESEIMwSwXsK;e!t_@)F6*kE<t%Bf ze4KsjvsKCR1x6ifpP%SCdMx~>s>LaZ@cO6KjM3kpI=`_r+rF@N&0d{@!CqzuJ2q%8 zYW{P2ljlrp``J#{Ch1%e)U^5gZD&IAO52iUH=?4}+m$?iwua4DZ|mDEer`u~O_`Kn zvB~$?V%{Ij=k{;7YN#;v%HEIaTTFf&y`uS2YsDw)UBWeUYr<--ZZK#$@Z`UJ_4|9W z+k2mO*MGbJPh>{d@2FQxwQT>qT5P%V`-x4HGLla3nl$Omop*6UE{j4sB3PU^sDxYp zdsqI@wMoUHNoP~Yrd4TS$CVrt-uIes`2JqqMZ3>zO-It>m(HBu_N!*zJlwRRb@QDs zDI2C-vJszo<>BG-cF~v_Vox|%O+K?dBTsB*Ki8inGZ)WNslRu`H!gGw%c+O|#q?(W zlya`l;P`)*Uzcqc*Y;bA8z-|((q84%+2h;w`e8=JWTj1fSLQSDG+s#F{wKr#x>xAD zw^Ks5@-LlT`h<Ov?DC86-_2FpE~Q=GK5HINi*ilom)l0=1$=E;ul$xq%&V@wJ7Zq^ zsr)s;0;hk-u%7Vt;PJauziQk08E@Y{Gn(<@aJ$fHt!k&HDW%VxewW`5o#!B<wx`ON zGw7u0!ZmBJ@Z}c$E{|f)zoc?xr{%oPkVQS2Ni(N!zRW7wmS1)3IQKW60RBzC&c~$8 zxF@^jbj-CAN3P#Bw=`?mcG}=X?p13=LCzCr|JZa1e&P2#A@<k8Cqi2!zoDX@^-KA= zwVPV6>BxVxcUHYMp@^|9PVGRMVENfqZF0x>?C0NK^t*P$>UoV{tm`^g{F8Xf`q!K@ z@Efc2tU69j9|PIX5<6-?%$qaeNsQU%HScezZ2G!H<5<h$n57)n%RhCNe11`_li(Ka z#IsmpVdfNRJ};)I=ul4W6+QeZ?=^jwY_DIyvU2WXPEC#I_^hS#h3t=(Fi+~+#Ld7q z^?AUvoquIrIr|su@00BFv}tiJ{hux|pGzadwSDQLAEsgJ&c`o0&H0Gk^3UAGE*3A& zWHv2((02Gdr=J~b;G-GVbA$CcHO_yWCTYrGWHB>~?}^gXf~_*n=WFIAo~jjdWfT&y zjp2@}7l}>qFJPS&#nSQLwr+l$`RDAYZ8Fa{O#IRsHo;6oJn@Z=pf%g>_sz_Fi`4lz zTAx0#U~-7O{$=W!EcrL@-n^L=U00U9U+As<-z~qgZd?<8wblB{)Z(-A7V%rmsTEtH zFY?EE&ZL}HW5*{y^zZFB*I%LJkfP<sbIohE$Vb5s|1Z`{%?jNw#u{;}Xu9j12_JeU zw9H;U<v#Z;#u-{NzJFJzJ#{tQcbIXP<G$+5o91UvJ-U8m`K!mu+k`~49iC6hwKUmc z*z|9?!3^W<zY}<KeY&!=rT1rtZR_i?{FE%z$UmcK-A$RaWd+j{-Y;Gjw(P{`6DC%@ zoZqvav1@K!b+X?<WnaD4&UTBwgFpH7%X1Z)lYHGn79?&GlRs6qCUv%{#ohPUu1S0` zd8T!F)3vqh_WYP}^ZP-2Hg<VCo+mLAH?Q<k_wRV3<f~L473Q_;tEi0{`!a_RC)Z-B zeam*w`{Naolh@{RB~s~6xCPI0v&|iU>YWqZSSN&ay*<Xf!{iFj)A`dH>npt&4l^9I z?!0wuqufol!-rGUQopOQR7YAYW!V3aC&}gxXM0@Fj>)3Y|0^EtFLbhe#K>8?het~? zzF-o|%hJgrYTSo^bU2^!F$ub|%Ffd>&X{Gwm(7tHUqruWB_EO!<jZ&Y#>f{b_2R$X z;?4%SHj$PS&Qpq(yQDF7>g!Z)Yp%E4(N`JK{Gqmb;<T;*lTzZIu4efpqJG`7w76QX zQ?yZ!Gq5X3!%n+$eY=WFv_gyGO{U;CM^m^jX!11a8o1ic^WE;i@K|~atKI4U?>g&q zPQ5yrC&VZ>eQD?dIq75OQZ5S|);;98EHgVI>S1!@i5rcFk1;$}>EsgKr*U_m&rykb z)xZyT+wWeNl<+@y?svk0vxzsWmYxz>z4(gj&br7s@!wRBXIR_(Wt|}5b8*U%;th=& zq7sIzs~bw5@5^*@Jt-B~7Nf*+^Zd6faVEFft8d<4bf)%0Rr!16u>RIFN7u(q+kfls z&1zNq%e~WO_sXt1x~i$Q_f2~4O}Wpk93N!41eexF*O;W)`XoLs)(_-7aqH+N%j$Kf zWR|(|xf<TSpDF)YefG1@mWp>Yy@PHUWxao8e@rp$>wh`cf;zoBhYoD4V5^avs5<v3 zOIFt6J+3O-PkjwJQo8+opKo%?v=x8!j?Cvyv1qfHar8x!kg}CxBY&L$f5nZ36_;#+ ztsWoLk6iZrQN3gAvhxn_W}41B9+3Duq1@l%<5Qh|{68|79qtwUcCgXSI{$0NovLT1 z9_O#E+BGBV(xUw~5#<|qOzwW)dsp@QrH7x>WS3>W+ZwwpvyE@=vdn3Hcb8>u>yuqR zNB8@~>vFfI{qL<h*SGQco2aUDr(g92&pMlGY-V=iPxN%2S*9nS{j9%kcIsKAmC5O6 zGp)?dJd?CG^L0LU-r-^9;$uIHe&z<dyq=S79B8SgvE5`<WWv(wuR;5+MF&s((tK~} zX`?64XS+E)DOxx2kxqDJs^KQn<YLQDmC>vdul?hF<RTk7?Z}RK4;2n3Mj3w>P(LtR z;r+EjSskx^S{1Y6p1xeFHlb@$TYXgEqA4p69k?ZAdDnk~`9xmvY9`^?s!wXPy?9y= zp8xdpCg&9YlRlz>4NnUd#TNcDYUjNDU~^et&Cb<-^A99XbCW4GnyJufqLUZ(l=)*} zJHsiN_Uh{X%^%XNRW=;-XAL>(@jCyMtlv((t+FE58%ux5e(ecWmX^9|rxmUI%JN3N z6kq(3zXAtlZ#vC$=8t;loWuramSZ|wW8QFvhss@EJ2!O7<b2MEzB_D&yAPjjxxwE2 zuz<^cvua$&9v7B#7v7hbmz6Qp7i-=(SiA3j?cb^eQ_iI(-BbLm;{NdNdV{ceQ{8fc zE6Y3s7acdcW#!_?KXd;o<D)*6AOA1?9a?v5BY!=c`{o%g8NWr2&3JY-pz?-Z&sUdr z`PFx}E!`k<EL8K1Na?HBtc85`R*_*&W>Z@xo!>oWMaOFGaQBIeiXR8;TC+sxptJ># z!aOtE)l*_BZf7!{42b)a8vZo$rdhnBu4iHFa__v1Dxn*pcPBd)Ox0BT@+d3zW3$UX z**lL4#4@B*>py?DxK?}N)ah<1&#C@)+KOvqWd$xM^=yors<tX2`ieu(k*iI4GjtMW zJHJWU$UHM|*Ba4(&AaMK%FY@xoJ+rM*SGWhwHQm2POoQr4mKI$&vra}GJW0C7f+g( zM*mtf_moj;(L?)%o9yMhMUv~akDu3wk^Q&*-;4j(_Dxh|ZGL#5{>#mT4XVpiJT+Vz z?VrEd!KB}iB-E9hHub*Fl%NJ)Uez4of>$zeAr{<Cx&o7e3TxIe%t-5-bjSC?Y=KF; z7*_l=)RjG|%wU$c$o85!U!C>+NhUlS`BjV+&%ZoAzkl0}><{&Y>vnx+soFk!Czp1y z*0rm%zNr71uv65C)4$&K%IA9C68E3GWWH9k{7QT9F>ZP7;_2MpimY2(KezsKe<U4~ zdb+jyN`w0Osk5Ih(woxOur{K;yRgZwb>8V6hbC&v{$l)BuJ@$1=)%$c|2ty40@f{D z*`M+1$eRB6rJhcyYxiBZsr`A~$Uv!@i=k&xt-)OWM3JXU)_!Jsx_Oqy)L9m3N9sc) zPjrXnW~x1x_uHA&VBgWPe<GvSi=`p@dM-+Qkr&+LelFzJXm&LFxHZ&a8?W7&iUWK# z@!}18uVx;~F?ymq`TXT~pSx<G94uP+sq%ACXj^3G(Jx#EPR*Ku_q)uurMA_~?RO5? znf0VEt9@#UVMf%K0}Bgw+S>Uti)GFX+8R-xvgGJn>nU@XtTl83rtbgaE_d$W%8YG+ zpE4F7dTPG((9y@WANH4($6cLarDA85yUd#3C&6gNn!DnQ*$Vi6=KQt}tGpu_dwSM? zb<slm{Fv7|D@s0xI2T;h^45{=)3L367m(nv;6ERm!Iz$;VsXW%wysfR_BnW!UH4?@ z_HUsA6Y8DSj(vy{n-tCS<Vo=b@mjISxFZEN$L4+6Jw=*X@HEeo>qkGX+~L&!-Y6(- z;jCtB+xc5=vV<;axGCl^!CBQK&iverW2sYX0-TmC6v*sY{D<kz0&lAsCM$jv&-*RO zlh3luSH~|zb=R^_@(%))kFqVA#k|ZRpJUaBR-UQ%G%6Wq*8kMp|G1zhxrDzt;kWhC zS2j~__IRFoyYh_Xlt(ikb>*;~aFu%duII@A_c`zPZZh3-=lUu0Et@!xP3Y(QRMFDE zEGM_o&b>uxgW#l!Q{qfazL6hOVop}R@si2Q5xdoN=87XzZKzJ+MFyVY_P{Ekjqx)N zS*puSRIxle{n)CKE{)su=}QvBpFetEBNJA+<2KVg3l8Zy69jl~{7Wx5QGNX5ONZO~ zsr;5p?VoCFD9?QECu?eybUh-0_vBI8rwbX6yf4$(eYnu5`JjONly>IKB}?ZQ)*X!B zaNf>BP*8|BN2_nymj`dI{ES{ZgDXB|b%C>6)btNa3X5NVe8hUfyE7#@%%lEU<oy6O zj$e$6Os>a$eNbFku;5Z-P5$%$f$y)l#N@4-R?zx=#xdhYvtN17?sph(J=4DK<lZV9 z?yrn~`_sR#-)yY=|5nwsr}6zqwkW2r%B`$mSl}CWF4FzbDvj2hy$3e0vs?UWy?d~X z+#Sa=v72_9-z_m?RdnyT*B9_+p+TehiF&bRs?UVao%a;J`88qI+#R+LGM*XT^A``$ z-}y?Tk(1N@zfjuGx|aF3J2c&AMMkJT^q9Eg^Tyv<(}iPVC#Ote-63{Xt#i{GrudJN z)90)76^Wf#x`~}lv9Rs4@G{QM=kgy!)LEqsj)oeoTr0)7T%fx*)N6W`-r+~*HX8&6 z3;t27ztY05>DH3f;t?&iYTolerOU@t=bZQwDyL~wyN5M{;r#?oB_rQtP49V2<UTc@ z<Po*qZ6B<f?Y_?Hvi$!I6_;nH-sfvI+8ndpV#>@I--#OHQ%`ib&g=|scFWY<t8e3V z)`!2@V<zW^2t&=Uau<xXQrE4}ia8ad9i<#>=C(}dK)vs^kdKF%{oeKb_|N(9`i9Bb zH%?mJ@VxkNT4S~P?r(>iZ>G-OVLNATYD}!wg4kv5qDx}8&5CZmmFfM!HR0_!U$xTs zzAv0P(=%`I-O|g}UCod;{qi!td+XdU&SiY}>6!WCZBL)9VcU6G?CE`lGqDTTMm4_U zVq4w1EBa1WKf@b6>H6j{nRkBHk5(}5Sv*xsQsKSWnv4MEs&LJneAVFsd)R)gbIQ7W z_S~Zj<x{If4!rMK6>{jlX~^<yhCM|e(>V70dGq0j<A+bWi^SO0Yu_$qYnguXJyYv- z|Et^C4qtAK7x7=~w$*e|l<lHf+qg2DR$lX893>O#d;8Ij$E#*eJ9pY4tX})%pA(Eq z#oD*@6qUqp-TuNO6gjOhmGM*2*UcO*^H$o$oO;2aw%+JJU&E(WpY!>rK2MsS&!p2o zP5)ikV)GdXZ}Nmol{Qp{O3hOEEYtNu%;fyS164O{ny0PhTG@E+^(qNjyYmy$l^JZ? zjkpD>`c$JFzQ~+f-Ey&5=Pswm`J?yh|2n?3oU+eg#=PM2n8PpE^39pIvvNJ-*Lf-n z=Dj=iRYKt_&!=Szs-~6qi-w(Fa!x8DpE1F<ng335^R>(8%x*Qjj<kEv5qEx4b#;TS zcU!l^o5)QuA}Qx5y_HJKPfhq%;(s&Dp?Vw7uBKa?pYCV4F;Dk&>w|AOGxd0Oq@VtA zyZui6<@8_E7F1u;v1-1%dD;e!5A#efA6@W$%}qVNed%X^aUOV|8U44F;RlcP1vP;h zSHoM)AFgr-@g5GJk|L<EuPQQY!4I$O33>;Athu!I;g5Zs7It^Lce0$A9{O)P^U3gl z9i|%d_a^HIPCLKGNBlrd=;9z=llhS={0{t#Sy~nIq2^Zo+_dC|eMM7JWnJR=6c;je zo!1GKPbi%>$)}+7R_{-#4euT@zCL5RT_R<!rN3}SY-n->!?tru4U9Y1c{Q9{@LFfD zGyD40Z$$e(luk<u6F;!d;A{y;;`HLvg{&KmyDppd%uW24&5|;mbEm|Vxo4eB6UuJ+ zEw!C9cWsXKg4nWu_v<At`AxpTk~RJ0CEYc#J0pZQ#HPONcDNnct>18aC+7vGd+T%> zcpt0_YMI))L;H0&+s@Tj&M*|SU(jGyz4YLn$r6=^X#tHb;nPkxwNB^!{^H_?Q&#qo zHhW&Z%5UtLZaUdiElyW$-bO_|NzwH>hl>h7o_e}|;zu#}W2?8mdVKKM=6W}-HB4r6 zx3#}wo4Za#fkEcO%TGZj?klv9sC*Qh=XXNq!M!wr_RJq%>yocCToPT9#pszn$(zq4 z_{H-HFSQb0yty{fp(M0vTg#%$@A>5Udi2`e%D=sPaDmO?`@gvx3gn7jN4B4n$+Bry zdY#*tyL@^W%Z|(UpH@%%P#dzhJ$D&*ebe)ga-j>(ZVr;)Bo@weRapL)EAvWARTWPA ztI20QySg;>Q@I`L{+$0O_QUm$l(y~h;0M-^BLzN`oLU*sDKqQw(V|DUCOCf9E3|xJ zI(4rg=anEY(S5fYt7fkIoxt~4cXr4lYq_rzy{C9RZutA{Zux^A7LGm5IgBL-rkCsK zPHnG$mwPzUNYU`$c8TYYvtN8%cH-Z}{DwE3S!MfuCvZrstSXCiJ+C1&SF3ohieWa_ z(Q9f?&Xpbu_IPRAS<5Q^*?MPMlFO%!4%t8Ti{?&W`DIs0YQl*ySy9p2Q>!-ZZM&x{ z*?%<QsMNL^g*z6Z%P$mNx1XTL8Txa(bCpS;l}_L1i27;kH19o5Dw4b?$7_04>|?tV z`&P>jSLSm*j9;O;N+u)1`Eqo_JZDLptszNAo{1VQUbXg8ppVC-ZFhoyN^MvkdHQz3 zS=Mg0Np?#foq8`9#Lz6^Sg*${`uFTHCl^)5Y2n-U6edqIy`fmW(`Dk7&YFkYL{~X& z$qv(VzL>G4w?oyi{>ZL~eEFA623mFo5{9+Yud8J*naQ8k))v{L{OZu}EsJk>T<!=L zR<2a}zuJ1uY}1@Lx9yITc)89ssTM!vVY|A?U~TIup^KC9T0d^#p1Q2vZyWcFoPZ?7 zf=#|VQiT8h;ttJGa83R2?2+PZUX@6TicNv#wMvdtwlYrA3!GNV8d#qed~W3psr3hP zf{!dU&=Gj`LGuUO)#(Ql{#^TBUUb&{WbgCYbp={;PQ7GUe`xKTZ#zVN->B}|zBA5e zZtWW1IPI2{z`d1$ebd<sd7g{Dt3PBO{>`@XN03R6#{2e3;h9taKkc`V*=PUj;e+Y? z;?s|-KNn|LZ+D-r&Mx2I6*u$p&w7D&lg5SZb7G8EU$y=7;z{SrHCvbii<a6H%@26p z@={6QMnboX$IrgzMH7<hCO<mNlDEquGmLvrM}5Cl-m1-urY_jzrSfu>@-4&fIjNUC z-mhL+p()06;rr(9#rNL}=YHSR7*X6T<PtykS8m?{&!0{2y{3Q7dh+gXa9HxpmTB!v z>t}pwZ<g60^`wyHaQKP2Y)7vzsT4W*@lH_b;=@)R`^-G<?R#l(Bv7`i_+$*r(j9F| zp9H2ntLYQnuqgS(6yFXfj;T|W<mIn>^vqhJIa_Au4KvMFxyg4u+D;Xi9S;0_xZv3o z*2*<^EZHV!i6?wo@;W|g-sQLznwHUgA+arz(?4CRzqz-eUw_V>qu0-Q%#dw7A$_#u z@TYtW&T^(3^LGnO-e|F0V_uS$-l5awSC6+o^_-S8f3KLffo^xLf|=Exbti52@8+!C z$vky>MC$*_dlQwKSlj%|J}vx~C3Lk)X7Wm<n9JMa99Eem1x<H7bv5E;=|?C1{R)$} z)CfPEaNT7k@2<%D3$Ir#xiR%{XkuhS-E7mYi@eJ`ZP@=$P=0J@Vg2jlk3Wyz)c=rs z9pAcZvLvta+I_AfD^H!=c%viWjPj%}P5$<C<>PB6x#kO7EfE%B@l6T1>81HXw{MM; z%7<f?>C?)X{g-ccu`oIyeM;76%h8+5CO@;==V(%>7p^wlPUU+6--~*dcYEtL^FPcm zk!rlmurW8rLx^+j)Uvg@4<F3V;hZmG%KNECsN%6ojtMtYrNk30gWpF=tU^LtZo~x@ ztW!8rQS!+kclIYg?UtN&j+;h;4%^zjzZ>ePS58*le{=fG9)rO0@J*?2n72L%ee1pB z&*9m%8+Mz2xoFz<u%J9&V!zP3`n*M4o3b}vQTzR%qQ*&R9~)or@zTTV!cU&AvYh@k zB)F>iRDD5F;5#c3t`5_uyOp%(ua<Yz|0)>!L140`(UV6!izV(m?&B4{cH3`n_GVV& z|Iw@0&Ix{7Qm1DBSMscDld#2E%gwLni-|KoJ@(O}tX#Bc`R?7bO!||`kH0Z3Si7<Q z>$7tkc3z(DBcGbncW`<C=jn}?XZQpfIU1kZd;BrW(bgkcO6uY2pAvV8JdBoNsN8Y& zLi3%9qcyVA__U(0vmTx(v@<C-;LPPjQ-vLO+q?>#Etl=Ij~AGIlzYDEyc?e_PyO6E z;bl?U+dV3`Vqzy8GgF<uzkWgIj)1K<YxWr5s<o~^b@pWSYt2f_;7wUF&tfYNhEKhz zlw0!aW81dkDc4VCu_TEtjN|!fn<sQ$WqqI><LN?qo`2Whom<^lx#IVnBOes@T}%;{ zE4y>mf6mj*ceh%c5r6x}$oyNRVX~3uHtzdVZv?a@SbXsiQ1G|79apsBmL}KaiN~LL zZuPx>*)u9w@^gJ`Mdu-DnMK|*ZAbR+Tf*s+)~1uPs^!i(t)ROsPo&sN*9UV<E#lht zWyg|xEWQstj&y9;lO^PJadX3^Ut4Mzp6xxUyVtxo=Cbcp^={ov5n=v7sf1Y;>N38C zCw6A7-Y+m`o8clsPR*hp3WY1!C#Egwcr-WYdibrLMK>ntIDL#zt#>Y8!&_h_$hZBD z&el0b`odo<cRtBp-FAQb&$h_BKX+Gmyq+TUm?5_73LodywI#k$GQVCJtMMKE%vI_y zDe!)q+T3TiD^L0_(OaHT)%(cXyLtiR9_MS0u6v#yKm2sMFw5g7QjX5COV(eS7CW`= z^|al=sm6`7GJdqCKjUBcsA`RHeeBP97ITBFm|Ft^f96dP&=u7bn7Vo8Sr^yy^OlDz zu&Gsjv+MnF{ZX%%)ta{UsW+c)O_}U!(cm@9Tzge?`n_9^Uj6hFyK=ns^^$I-lJvVl zb-i=SvQKO8cx5#;t?=er-PM;|udPf`55HL@{r$N?O!T)y=XUbVU8g+#&Y_P%TbtL_ z+em2b`ndA*;-<%|Yvxq$pC=O=Gf(!9*^lsVn~pu+)_J<%Sz~tLJJV_={Wl4FPT3t6 zWzXk-&$KlywvyqRsOct~zV41mTV8%`{&-e-Z;8h1P5ZJk9Jg)iy2HOJE856@hW-1l z?+54nW?IAlj7R)YjY0ZOgU8L5w~rtGo^b5+_J^<Qub0eWGW(PDb<VXtBGY)Rl9z6H zvY$h}RrT~y2~C}udgt5|PyP_x7-;g&^_ElA&VzL-ihdqvmv*}+xvVJrZY1*NhRWU* z)84H#+OD)_vQepB=q*V;R*n;u?{qDKwQKyoJUMERblPGo>+~0oSGvqMYINY7V|{z& zl~Ysh$$q*}|53l5@#Hc|{?Aj*_&*<97?<>GE93r?K@Z+Pne}^q6L)3t$~k;H=W9iu z?e>25gDo||fb(I2<^-+n(VShvugpt#C9D!D-&rx`zAVpyjlbA^L@eg6VeZT<?REM3 z<l>qu-`AuDZ&z~F%c=?3emAD}r%w)li^!euDfI_mHLsr)YG^efU9UbkR^npor~KGn zVdXe$8@o?Ff1=L>{0U)k3p}9tR5QLmsG#>)&ck(58$X8KTDg1WQJePM8vi|#{HjlW zhe<rVc;&yJm)bM6*kIoj=A4DD{vUt%T>iHB-x0@jnR^OR4&P$tT~hsdH+24l2}dqz z#{M^N@16ec(4))ZA-h&?KKE*(Lj8mj$xJ>$C3mj$+lu<0-h7c^DP!03w$ooK*R7~} zC%Vy7=kq!Vtw+{xBL$@muAc6RoL762*=e)==MAlvON!W&J$7?HZ&Ki&K7V_EoL|6) z@7LYROnWoVpG#vja!|CpJT)mZXL6ifsMX7dhC7n9n^x<-+~>qtGBKrjK7(gM0N1*D zu6L>7pCZDZ=ra7&nRH|`!^PESj~S;aN?-1o86@^3)qnXH-gsy66wdP#KJ2y9-1W}F ze>LmMO}qCOC3NO!9Qqxve0SjzjRLkPFWaK_q$ka<cTV#V-xQJLs%;k968C*i&bji& z(pRhuZ47K0e&4S8p8H_C^ZE@9hF>yAe>21di`1)0Z+>z5{gYq68;=~3u3^1j&tGP~ z^-1!z>v8^D)g5PsF$9#fC-wDI@h8un=DbgI$9t|S|LVw3#zFUe1ebnbd)qAj%FXNU z(PsVl16QZ(hd+27{vn3L_|)Ftzoza#Eb`-tUCl)CR5Q`(o0i6;e!5e0qUYRl=DVC< zTwKCE`}fW%uYaC&V#}xb&hI|73qCcdTo@O1FWcn%svWsk4oZC%TAuEw%7017EqNbH zoj{e!#&tiVLY`Tu+HqZyjFYSN4_J{A{=;J<tA~U~#6=P3o63bfdt4M5yT9tZ51bS1 zGi`l^-4h1|hFO=nmb~(rsn)T6yQhWFQEn5DsT0yq7j^wOx%g527NI~_gE`teKK4#3 zv5TJ9B9zv1<Ybx@|2$()V`jO#1v&4Tzxk{>+W&XyI-dnI+=C`=-0>^@u?Y`TtW=hm zOG>OZpS_wTU#raj2YyqPa{TAaPx$G^V|(e_&ShVG;ytxBIA$hRiCCTaA%5w#(Z?M5 zH}Ce=OtnoH4fJ|8KU=%?OMP!ebb{r{y`q{)LJMlA70y_2A%D*Ii_bOOc4}-&V%(mw z@4UC+UN#5a?r#SRGyD|uMbGF*a#}u|y1mn==;Guf0SDb>ufGqx{mS>muA;eG-%l*f zOMN?cPW_oTQ-0c>+#f8bXtu7S(Jerv!?C}h<7&xMm)I_A)qNX}Ts9Hf9=cMd{_>(V z6Jr!2y`Ja)-}JAx+P>?7t<%35tIjT8^h3lpOQlx6ez{6c?6Gs_&YhbbzWzsjd0E+~ z|Ft`}f3AA}G`=i;Z|(0-SKr+>Utj)z)8^mbzP{eOzhSPQ>DE7KCXFBC%f$3nuehW9 zv-aWZ_l`}I8F;@Pd@x}v(+BPKe-2KovF!h0U2n*=a(UpHwx=x0RyWw==dD~=rm*K} z@%cA9m*ng2T>8H9NPE{c1GST)PLn0t&0C!=h1e~M>-o7>)ccR}^a#O!a?hPMy@}+w zKchr=&HsJV?4?AMGhUTGc-;}Eb%jm&YWCOu`p8KSSbTSWh@X39n&rIgGu?l$%=`52 zqW2?rc~!Ih^}M@oMy}OLzfm=}=d7J?=;c3`OKPUsKRcpl_(*r_ujV-%*IQUP+QcL; zJz@R*saBZvi<tYLOYSUZ?k<$*Uus@c+jeTzP0wjB!}9{4Enn94;e<&O=d-?i@726Q z3n%z}uqa&Le5z?S*Mw#5c0H4tycb`deqiVAsr$6dgw>ox(>Oxw%QL0^@Wmgvr}S{f zvQ-o0zp4tKdw6Osx5z`$PwnN^5B_{8i2u1}>AI=Wv)onhAL!p&&+g$N#%drrx#HCO z*ONF86?%PH+SdR0dkKpl=h7Iyr=4u+oQ%?sqFA+cg&gND(UVtg6hB}xxn}a_=4y@{ z7ma7CoBb<uJDvGXJk&JbE>iz>9lu%4AzAUO?2$>gSER0(St63$G~IpEqw{w@zPfK! zek1+a{w;krJLbkNj=vdjcJ}1dw+T55k52o+ynV->*B5tedFS#j!8s=Ue@j#5y>_YP zDeA7lv(?#RYs`*nMYXa%wSV5p^4@Vy!n-T8*et~@L#4P^*}aL0m{vHw>D0e3^Xh#R z<F<Hu_^0hPUGeT!_n)_yPPQy=s4&>jajMp0YsdX%tM51MXg{RCjo}q*ZG7IB%agC2 z2`_Fwx32xtM~P!LdGmf7Cd(f^u|DH`{F%FfD^$w<-_4jjH&Q25@aQ|y`5WAJL>OO+ zoP4R~V4Fp{r<%c;6&HjLwSDQBf6nE|^4{6?I`uUlf**b1bDjR~uR^r)>(Gl{QFU{^ z&GUa#=I9&Uf5}LR-$py}`VPy=cQ<?8bn-PnCu}xop1oB&@XnnXW~RH!?Apu~7jk~H zo3u)B^WAG<_qeX=N3Fj8-qrim>y<ubb=61qzG=;0=EtllE^nid)D+aDG}WQ+mE9&i zr!4WG(_F3VwU^yqyCH?~ks(`_QIb{mjVhs8O3@uwZ`$APW{^@4nJFH*b#_Mey4HJp z4_xCoW-dG5Ovd9$$I~0)?M;@&p+0Xm%$Pd;-1~wTk1r(ry((k4<n?kJlSlLBT{`+P zN`uL)&(2-r7?bh-zX1;t9P3V9*n0O--8uft+@F@Iw_Ap2Y-g@t&Lh1dUG-8@%oU9T z0iN>W>a8qST-Tra!e)B)reRXsxhty`O{QqGUo4%WQEpmgc`uJ^+txFm-@d--d!2b> zka$1id3ly6Zr?wIJ+AM6tlzVj({IA`Gml)i%dO&l71`9QJ?p@Qc1F&Nq6&sPE<Ffc zx9VK{ruS!}1ueYQ=K9M>{j85aZfo*1DkN`K_?ivcl4&(_j;`1G<#6?dA^*l*hwVPO z&*gRD3SO41`t#l7d=t^Y6<QjP=aybbwA$~(S`ySQX=su=Z+BR`=oJsq<BX-Axq2?& zd!=I1xw7W|6YqL7FU@}L-YF|zD(w5!a->)EW#)nnnv<O#>+k*asb!h$>fhY1^{T2B zCw6A-w)0Zp)3~uCNx80X|Mx8Jj`qNhjSFY3yA;gFD#qX}?{Z_etKAG&F7ElwtOlAE zyBv0T&vI~8KWesrkMZ3_maO4Lf;K5dyrq_x#Aj;Utd>+(n7pLldbLrV^wWC|vvs47 z9OZUDaXLBl!v_xg#ZTXU;>mOiuC++<x?b<axoA>PcK3Q?OLw{N8SWR@Q*@LSOjqzv zSmat(m2fP5cH6J8`=!#m=FYi%X`b4arz!UriHqjeEnQ$Dq?8=%_P|!^u|Ok-n()1R z*YyI~()Uh8TJO9iB%!s>qh@OFu5cSQ_jsdcTo=W=zp|OFeHwdC!D-Hq>(B4lbjLOA zIsQkeUgj8+-}L7^E6(hCIoHi^!<5GSgQ-==o=lh9`1~k~w7QDpZ_R2O)^JNlt?;+c zwpLyGQ}i;?|FXW_9OgNj9+%(TT0PgNpG$aU$2Os2v8P^@XO`Vrcs%t;(VX0fWjPHm z5;@oT9^9TWPw<+E#^a9?dlG{7JXmQoVYbQMPrq+?Fj;-7e{|{We$UF8SMIXeFaCLW z_Cv9=ch?kjKU){J!?i8Aa<(WRzuY|zxi?!>EwuQp!+v~lc)z};YVVJNdC~vl4Rt@U z1qf#>zq|YOsx$nqsZ(8^RNkMpvFz^Nr0p610=N!FI@P%-b|pSCGB0~97ilg!y({<m z0<Gm~=Y%<g-!w`uT+vg1@=Chd)zCY(VZn1GE}u`x^!+I<bIX0#q<4PjrY}9q`AN;- zNXaR&qd~cxPnKuLI$fK+AYs?h%RH<{l4736tT4Cyw)O7H4W~5L9O++lpuKEnsO-BL zmu5DbsIC+%ns)VJYQl`U#T<zui+HlvtkU(q_Pu87CyV%Lue{cu(pI<?CtY73$R2<3 zmk;;0zmnlQDyHmvdt{$GYxBKF7w$7zoolSwxJhk~>*wYNZAUC-`b^K+GykHDLulDC zvwOv-t*z}}oGE(#<NjCW{9lbmQ5Lh~qR+SSE}Gus_HqBkO>eet|NQFx+!?2*TWERb zrMyqw=$##3y*s~5?e3Nh60I-($+m|?ZMs^2F5;xYgaakso9}v?Uk+Us;V0tw>Bb#n z{UnJ?9G}*{sGi|aAX4?wX3}=+tXt{Q=?B^*HdZ`hKNEH6aza_N^W2Vy(Uvn;ZQ#5A z>ht8xKJgO$gn%8NPgXi5m1wQoUE$#8AymGc^ZIIUiC-zV?qB3vUo6}Fp;cp|=D9C* ziXq4T<khc#W#hc;`E#pihlA6K7oTkYDY9WhP1d6XJ>B}_)y{#PC*qfVyyO&po4++~ z{Ws@@&nr6HnZFp%N>6sYrv2)AkM8cwYwtHLP0V7-jK0=ed(GSX_u1yfpHCm|-mLqv zzr6i{|Aa{qr^@w?=Nhd{K47}sY;se4$LbyHdJh#}^^*%ot5@5$nVYFVrtQgJ>ji?_ zr>^~cc=_hTi*-M|OyREi^^pCp*`MC-)QUr5Wj`Hc=3I}GRL$qQX1GK%>4~twgxQ;9 zdDwoGJX-X3`D8O+CSPTt!xjG&a-EGm7O`B6I_WIUKKVnEkn#)b8%vAshZN0y)Y-~f z@$Xk+d)lJjkkjFOUi-4@jo!!jEdD;@p52WJ2M$&^OE3uW)%xUn^E&7>CG-U8h1MTi ztYhh~<S>7txv*PQmGViSiigi?F61uv<UJ~0Cz<MHq-e5PEZfV5u~WEHw$;;P`vKEu z;vaH8B))HC-^+QLP4(W3hdn>v{djVCxqP);+hJ+nYOaD8tj2Pe1dHcX)&DE_DV8vM zYWuu}{7F2kpFh8MHsRK`n%UD$a+atkZ}n%MlDS4kIJwaJ@usK6``4^+lv%lBb;m2M zMJY4G!Y#x<dnov8DSrqx<;ykuRB<71W$(R@8y>Sww<zzrwR&gjyD8<DobTN~qT+CD z$BU>+tKB;jvv<r_nESw4$o)aMqn;a6{gm7umLn^yj-K?>*<x&!cV_jLI{A0U7=P9E zXkD1;C0~+uKK`8DjWeEsHPiPmi<GTCJBhQL&$hL#LHKq0+{m>VT59|=it<C>mF(;? z^FDv($iov|5q@&E%hs(rc6gh6!nyg{d&0c#f6Mi?yJ4%A{A&56)%R_9kI(Esykhlj zkMM)_OSB7G)oxzdz0d8nHjlra%#tgSF%Q{x1@doiDA;tHiLuG<_xlW!qMQ3QgDr9& zRWTX|?)&yK*X7ugl?G8Bulo4>mI{`<tJz?<IKzhfNN)R%pec-UHX3(Wc{Z<3c=>Lk zht`|JT-83uI6p{K7VA6M3l`ljjqsmXaxbH&WkvHOruyT3kNT6WrTl)m3QMSOUJ?7G z_o(eu{a9813yse=?$<k^yUBW)j>v_j8sAeq6%t(w&zW7aTX%24&6W#K6b?+-H7D2f z(1VY)vYwNtGB41{$jmj%wOg)IcChBfvlCfX%j>5wE?e7b^|MrR(ZVMdhcq1{{tF(p zn!jOB&CbthA31O5)PGr%{Y@lgO)vi~1BDxF3V!T%uxk}bIhg)+^Gkd7|2Yy7Iz{uP zoNkL<4$_qg+JD>WP4rUHUChxlT<v@=R0<ttxvRswCF0q&)zQ0}gr<C3%;|H(#5<5_ zMTqzZp*!cb&wB_w`0z|TZ*y1iX;!PSHR6R_k6FH7IDDz5amBwg3M+rtPphB1&E{;; z-9|5g{amZIEQwp(+IH-Xn4mp-;;Nm?m+Bs7Fv|=$Q)t%Jk<X|T>$6;FapL_bnI6_h zb07SCpV@J}g*`xwLn$uF&dXCxW~GakMW%|z)-B#0+Fr*x9X`)IpqI#9G1>RSr?*0C z6+a4&CC2ZN)KIa@%9`tLJ=Y+$yWV%2zq)OBuiE^>GySgeMupZS_L~W>so$P4&(Pgc za!q-4M^}Nl=T*0rt*$N~R|d+=p13<S=k{8Y%%j`9|B6N4(73pJ-s@2DEoVC!g1YjZ z%vmCiznmC4TWQYgi20MZxZYU)(=NozV?oW7UAD?QP8hv&Te$8V?<&We-d5Y~MECuz zw_eMb^}eWcl4Z*Grl*-2jy#cXBp1l>Sg2<&Icm2(dWBWioCzH)Ptxk-j&l5JS4pv! zlqu`|TdCO1xJYJ!=$5Ent1iQbd(6X5{F@{@>#a=cze}tugzv^C$G$qjA$EC<kH>}V z!%wFy&5QBuzjf13(C}k$-51NutVrG8tq%oMWa}?KWN9;BkyfD-x$r924;j@%x3m0& zO<2w6@Sb}7G(1^B`ih)P!MtT<-O*Od=W)I`wJLA+)wh=W&-OWsY}lIFbXa=TQGPDL zmgheus(8=cwTj#oCYcUe-P-VJPpi&Bzo^v$I?CpY9!xdtdZS|-U&v9n<?;8G>@52m zlW!;aP4=jd&uA;!e)iqDb9wr+XM9=r^0wUW?#IPt3u7N#jXtzs?xxpY?+8T-Ryl9E zwP1Bx#PZM0CHvX0|7vMTZ!!7sChz*8n*uSHKC-f|if49}nJK*L|24UzKls>REc<Ww zE{D-qCH?PhcbgA0nu0^02;L6d<=CuqS|*HfdV<Wh?|($tim%m6)Sq~ERCUI(UHvnT zzS_V2#hID>vfPi3FR9z2ck<DunloJ|uAgT25$4ld{<)p&JBON2$nC_fJ+C!4c*)Dw z{0MmO!}aD(#8RHuH#d3B-?1TGwEpV9wO=)(-Wg7KJ~6XIN_g9X+84)Ol_Z8uN>${4 zaVyXzio@lSOYiM<R);3Ktk$l7@G{5hXpqX{y?5lF_pA||<#b+oqrPX6r^X3U&lT@< zy(iWva$XeUNc7ltK&0C6CQ}Jla{{-|#QyZlx&jA&u;n(M|FpmQk^G$L48aHf+3(&L zv^{*LjgV{Y;U8*lK2{>Xj2d*iI_)2ycsg6J&OatD{18uM&hhCMN3(t;w`Dl7*7I7- zORCJ6^Kfs<EA}5^jfXGCGjtvl@%6M}m+lB+{2jl6ZHM~DT!#hkA1S`6(o~w0<)2*i zw&1|86=qvsIRsrV;LJ9YNeU}}AIR|h`3dDj);X@8m&0c7N)A-|P#Iz?n#!ehG;G)V zcW<}cK3&kT<LQeUtphKt0=|`M$KKrIoOZIlXv$uJ*3t#J)~Uw@*f&eW`Xsrit7Kd# zj$Zk@S);Fc>xWNbEAN&0&OBEk@O6`ko%qqx#fAE(XE5AfC=mFI*I%Sk^!NQU>n^!m z4EpYF6};u@wz-@5?LxPNe*bt*RM)ibXT|fbcdsiJ+UkG#Xl@rRQc@Fj*){rUyxpmn zi`H)IFRkB~vG)Drxdu_@FOFL$e+f9v?IWqg@NduI%PV#*sNK1nNl^RDi>1@%y(kq= zSH1G*!qc=>e*RmHDmYxvTg7r*$(*(A#nV+<(wFiD)aNg<J0$Jh6?eX1!UKccL(nCc zViQihtGwU*?#|S=?F_pda&$x_*f$IKw>k<v5NI^iuive$9=q;bV8wUs9_um<@rQHV z*2Pt}dIv62Zr`$U%epzIN{waeV&Y`>T$#FAO1s+7TKC?Z=qvU5XM|Oss`@@@&X!v^ zBWc!x3%}jIXU}R{mZ!FJ?$rNAEaA&vH9rY|H>*m*!Dg>i<KvAxWNtm$u_;4J_4D@~ zjk{y2i|kng4zj$gzuEuy$N}N>jU5|XwTi#V9q~-R?$=Stz3c1wb+s~|KkVPh^;wAT zw2eep^Unip@0xO_`g-u>ySSX0<Xn0A-DHiUOAVCjmX%*^&gyBMbSW>-#Fc%u4$tJP zA6~9+e^<5j%dU351rm2P!s8dqy*_VM<@W#9=iZm@kMynicCXnZz{*h{Ip^!T^7+ym zY%k;+`dv^r+a9*8yzj#b{jHsgW4zhT#rGY)$F8W>^83c;@A8GGCvMmKv3p6uYP(fQ zXN*^{)H0oW7O$Z8An(_6rsZZeYqe5dN+lZ#?cSTfm(gNlGw*b3p~BpRt-K3)WRu*C z5AwPlxgVjnY*CsB-|z1arU?d3ajLiTDd;)9S%|N&XvW)Qt9H#RYYuc>`sNenth0Mz zz#HZDpC`99ecCi(>XrBdiFM5j98WE>Kff+eW)VxE!qnU@hjNKC8BLEKUoQI`7Q#6( zGH93l^J4QCXC@hN2P#`%ap~F^=^LM=agsAP_-~BB>E#-o8?QI9C1;ui37KuX`2W`3 zdQIV_qV=^b2`xw5uX1e6yfiiEA2(~fMTl<uqNK04l|C#w9?;z-_4U%m4+q^phKLl@ z-1>i$z44#5#DNRd3{O9|GTWRxo5B!W@YT`#l6{ZtFP#}Y`bidY$@!Wa<UaA-<Tkin z(|LopphoLZ=A+$h9~Wc=#qTklQ|x&zq2ls)##8l;3R$NjltNhq**EH&NnLd@V6A!_ zA-jQlUvid(^%ld~JH9<$ZLrPOb-uEb;0+E>o2S+m2bKCJbH-1IKY8@m)Q;0x2i9EM zzIR%=kLF4aMxNs7`>d9||I1P>Y|vU<&|9%Vv~Tv2Rohv69j7D-$z3@pHSNp=A&-vf zY()j_PdhWX>njXW(tbRD(9-f^KC?s8hw}#&<yZ9i|F_IA(AvmzYhK?|A7#Cg>O6I+ zXT@E%OU$+%UG-{rrjNiEW^t+A^TKEOR%KdGytKY+>%vn1O8aF!i)LkgPEB*oU2)&p z<%`?DubcXGSayCW$~&>W*5{`ddsFbEX3%=NgAJhdbPHSz>SZ_YmlwF0+jY3vx`SCQ z<34wy%%hh%Tt~#Jt(`WuA7Z(uAbo6UgtTwE38TqD#{+GtD_W+?n5{`(VEx84#$cQD zwB;W@>np}g+xg(R*|SNPuj{PYbcN%DK>fasUAOio-JXy=$;W8HlN0;pUiLojVvm0w z|NKnh(eRCTY8NZ7c*)vUKSknhqFM6amQ1HdKiO@L^38MawfOM)>tQWdQLXGpab`C) zk33p3LzroEmc{fMf#-TP0&L66#hEM~*8lsV@gQjDXO)7Nk98fGE86GWyl-S}VJ7n~ zz1Sly@jCA_m0XQg-_v$o+wnc5s(Zag@7>B(cUBc`wbht-_tot5l_6zf#cS$MzPXlC zmTk1#bY^T}OU0p*GBN8loNrI9)Ya9DE?cYlc2>}>xwCVw$6h$XHQ`q3+Q)^LZ+%^U zJc#2?(WCI-+e<y?bM1^hXtwoBnXPn&Z$bJ>S@*8pa;w}Yf4n&1j_8{(=i>0hE%$Oa z`7E+t9ICbQoz=!O!AiSNpPzD{<8JJKFWvgNAMzNd?y`!FFx<99bi)bePfK+d{9R?d z%rth7^{dTkIWc<4$^KV&EZbMSb#2&zS%30;>(c#psqHsbiJg2ua!Oo6@aH2Z-e>&u z`_6gkzT}z<p}}h||8nH~AQ$jnHRyrlmYO1!iaxUnE0c;own*WJYdb&myjs)wL1(|I z;JsNK`Srdn>PKt4Tq<tf4V%ez{!^ZB+jh0Xt98nJ+rn4An8lOt+xC3L+gUv4eIHL< zusUM$!?h<r<jh)k@<YtjI50=XwC>0iw``+5rjl{3tFn!3!k1o8smM0kqi&eI=H!Q* zl!~^~2lJ=$<#VoD$EO&#{?s}f)wuPyzWa4e_x%4PqyFQq&^wnEj%BCM&Tp1lAAWbf zmSvpehn0PD`JB=FO&>?wOGz_{UYnDDwQ8-+j7{Ei?HI3Z*ZO*WPyRCVQ0GgZD(-8w zFEaf+d-5~?i9dD4v$sF1GcMRKIqkIn)W2^ZN}XQyVZZGH)_sv|JI*Z2=Ck;4K&D`7 z>Bh9i?3AUZ{4ukB)f;|15E}Mw7N?%?-D5TP?Zji2{hP&`cb4t>8Mft&*Vp}gaIK~w z+ir)c{G7>+a_sVVnA+2`**3Pb9E&pL+sLG+FhBTZ%NZv5BN<$UGm<WwN?h3|dCFjN z>5~Ba*1A5+HBD+d+}pMaw2BI?S$QaIrj}3o4$YVQ6yhV!Hr$+K<epbAIivHE<AfeY zmdai8Y_={EW?Nh+Vbb*LTlYfEH_yaHUY%h*o_g@6Q1VTuH31LIU!AconCauozG_Vg zJ6my%?@cDneUCHJce;GlijJ5gV^vtgyZ89T()!s7jqKhj($9sD^(Ym5d-ou~Szp1B zV{Jj?TnXK#DfcGd5I>{!-}Th$6ZNdR5zkAv-FUJ5NO+I#{>iVeT{9|Kll|iEq>nrL zB_}RoIq`<ItySvloDhSv#cV&r8(0EAeqXP3{C;zg!n$3BKP0a$TybTc?fIiSr{);e zRGzik{Au?N$AwOl%U%hr%iErF(=+W$NT0O#;^W<%o*@fu-#7X#?Q57ivv-1Y&XI#j zJ@uaQK@SCL`869HdluMFe{rg=dGf(&(uXrnK8uL;_6W~V`*`WLN7xrGX^+aaS6w(u zlBKt@HhQJ%#xz7Pxv}5{vt&-A?tkHfiDIi=;y;H}1s*yTedyzZO$;-N4Kmq69o0HE zUs~P2|IM<k6H+|0^abmFzHHK4FL33Pl()tFqs~tC{_Axfe3441<lV4`Eh3It$6l%7 zsk+nVr_B0p`;M?YJ1Dz<a&}$hH-+1+rf0+U%N1wO(p{~UJ!@@9<ENSgIc1;Chj-k5 z`;1AsqTWKAT_=}yiks7o(}w#5GZIdu>{q>?@`ZKtqo!4tdM(3PBbSPK9CeM|(CGZY z@sxkGCYPq)hk98iJD-H|H!D_)hOXJ8EVobpi+G?88yny5!)p|qUoTh6ig@#5!F%QS z*sp)<<~NuWi03S@mN>KHKK~L0$IBWGoVR2eCvS58JvDA;IA4s|{e(3ecR9tC&3POA zBu>-vw1h=O)}=K&BjozJm)2*TaDKRaB6GLczqKw_tpWEcr>1k%bLQUep6b#(<<--P zzSCF7_j4=@vYsoN6uC?Ha^qzGpRVB{FZXmhoAsBxbTn5qvE(pV61#ri4U?CPH57{b zKAt$m7$CM~i>HCozxFJbjnnv!-25XiDDQD))4Hf=mp{$_YUY1lbiKLZ>WTkn{!D*& zSSxG>XhD<Ql+duurL_^Cwd-vRpLA?CH+(Rm`kj@;uTL?4zdEOVSZ(%VSwyNk%V#;> zb(enstF2T@?4Fl*b^A{1N0($?T;N^idFQ+5i^6?IEvfB+*S56?t9cwPv=_I9tyt3Y z=d+XBS|*|_qMp)vW&+ohBLd6kpX=AR^9;^`ELD1&^XRd(%kOXXoW)z)1>9Qo?jE*W zAiU%Iud{Y7i!Wxd_%X9+GAVlAxWyDKa8SZ8u<4O*W6gw|&H#<A&mR0#x!`!ub+2K% z<Ay1_*}{X38fV4Z$@Kes9NNAl@#x&Bxr#?VhTT8@`qPCI>i2ZJ+Ou2&>zWnkY~t0w z9m#n7jkRrY{DTWWHRth85vx~h+uS(IgnJ&Zf$ueU<^_{gm-3otn~G1W3Fc8?e<ocu zK{~r@66dVIK6WAX&_vJIt@AnD1<R_WUhkf?O;+czg~UvIAL%=<);;68wO%~eS9e?7 zY};E~BdzSior6nlI{YUs$rtZ^!)53??a5NB>prS;o><*jHs{VE_VsfTZJzSfFIH4I zQ5w3<E2gXb-=stN5rPkX)V}O0V_X_;|Eq2K#-J#D!yn6*Jf6&bsBqJPqUJ(5qaR03 z%J56JZ0ZX+mA;YhR3!V;HO)oW94-4bG@fhDTX(whYQeI+n$32e^#<y@7kGc)b@k4} zXQ6NEdz+lkXuY@PdQfAz=IilAE)O;<72m1<s#|*hZuar3@(U$COB_+vs6BQ1mCNn2 zQ=4YCpPBSDqgs*cwaeYGTYZXrX@*f^p8xq5?O^h(_wJ3~7JcBXh2axepUD1VX5sRC zr&e2H_HnRuafAYXDRUNzw!W)>JjaNSRq9KnpL>CtdHEi*72=0Gat~h(-0Yxd;cHuG z=c>_m#>Csg_u2Ocf@>Ds){$Ihs-mp#F7!F&)~CDwbe<@l*um)<X3gGm|D-AZj~9{m zyEz}(v7Nd;pS^)W$m{r|A8e@~UUNP?@o<9HmyD09e5U#v`YhD6#AP|V-Y48|tGAqX zlwpQOpW01cmAxlTg>07yZajH<?zRHeJsOs#-+C`9#RgRfPnc{dqpmTn?ZFMz7`bce zKW>J<-zukk&!{k>abfJGeZBVQW@>ma=zh@Vl5jmZ=Wp|&Oc4dHbr)wG(U6s&{$^ru zqRK_5^V3pS^;Z@0u^oQMyXfpX`QO`aw6v(yuj5?fEv#?$ILnnW--%<YWB8&=aRHLm z$B)JJvotPQBUn<EB(sj^+~uy=nr%xbUD*G6_54dWi}SuN^vYe6arzX$)U|4DS=JwW z)<i$uIVpUPw5xc;%e2eiZ?1W??|tFAl8+KGsvmh`b3M64xEAbN6TCX&t>k8=8x4%A zT@xoZX_wajRX)0J()R00`3Da#o%H0bWmh`mqHx{?JLE4LMVh{B`g&>Zk+$_0XKidr z_pq>B9{Gj;)x5?zCbF-@Q;VnkjdQuhRpia5<?MMep=;Wi<5!f+HQelW%**bqlIN|| zep`NU!B?wwoBJ)6r@Efl=D2t1E>nBs|4Z3Fv}o*9|G4(3WnI1L;R+GXEytdfEm}SC z?x$<_uUQrE_*ng0*|YNQR<|5^?bP`~@~khdw&=6=<t4eu>OGb&nzvEO<$~?Q4WR*Z zCLb)|OX8d4dF;^ZIldMK91Z8EU0Ha*w%~(BLD)3rINA2TD6^xN1sY-_Quu#dSp2L# z#<`?m;g93{b2?wuZkbcFseaahe{0WPO%bV8`}h5Iyxiq}rHcLu_RDVHV>!locitfh z=l@mFiYG3<oxze}(tdeCuB5fKwRL{n-berM-n^;#ul)Pfd$0Gu*;n=Z+tbx|x97*b z|CgHn{q61W-Sv#tcUNWoJDb7uc>f!nn6SW|?w@{tO6A!0|J$1hE}tdt`v`r|Q>(x5 z{X_}3O#3|!85Ty1WPOcjmc>8#elAXbzWn|F>K}~N8cQ-N&M-<ImpJ<S!GkXkJ}h7S z@LtCAoA<ZvudDsmliGj0rb7PjDcd`4mFI3uR4MX_KYsl}F#rC#S~lfB+FhDz5AA+@ zVtsIdJIzjrr&dMgCEt!mm)|rqN^F$LD}3?3x!zc4L3;2M2YI!E|B?^d_a4*vxh&aa z9xLPWOwpMgUuqiTKL&1#XH@>6{v+9~MaW^@oSVxJU)uiYZikw|m&7;x2iQJroW5j7 zcGAT8QXVy`{c&tY5g82gntea0a}=If#k@!8DATqqiMz}0d{Oq<rYxcEY;=!(({g)e zhigImSmyTBPfcIuC^S>lbI}98FeR>9k@Q&~j=PF}VaocFuyo;t^!g7kn?fH59N^%# zcwTGC!GCp{R_uq={D2q5HS(wC-&y!0s=BgyQhJmm|6R@LKZ+&(v%0<rU^K~Ve^ICL z$Wk`Fb=JrKPv5;e{pZL2?^)m9-mCf(e=Ps!<9f*#!Fk*V-K^>toN&{4&e(Z`$8C0k zvI^%7hG{KbbM^l+<ec(<(>i^Iu6yOBJ-%iN2Bz~~hfGQM|J%gh!dq?e9q+HMDc-W8 z!BR7LPP<B65=lF;JJ#|p=gqUiaUzcmB%2S$zchG#iuvrXZJiT%&v@E!+kSYa`d@wC zyz|GB|48z*HM`q*f0CLoyPm5y=+^%@F+<0LB`)f>g`M))=kSzTbmt|#SnT-k=>>Pj zq~xVH_BSxrpV%8Xq5n@~nA{ohl=<GvHTF5SuAH)Izh%s}S})VgEh}dxv6$_ib-nmh zh}7)do!<^F=lEynd_Ls#l(`ireg#;a{lKPjesyi-=Kgowch=aXII8^YcU;(B|BrLs z{XI?#r{^cNF6Db4VceBe_x*gZMrIaEqI@K4=d0EU-n}78U)<F~-uM<Y?MV?^EOYXu zg8ss9%dX|9?Ygw+E6-!^wSWAJuYP&^Cu+_AD?KmwaIA^_zqckh;{V=z)tlq~>ptBc z^xFQ5`{J##5-J~gcwdEQ=&iPU&N|0C&G&kJxgS&6{y*AZo_v)m*vl64)ifbR?PdLf z)&#Ayk0W{Art*Ayt@=>-_tuF2fBn|Yj%5#B|3B{C+kG{m5&z%rt^8fJ_h0m}e9PDS ze{GFVR4wKe&fhe5UHZT7nCtp!DfgT&#?AkfbnN4;<5SKkU+!qp@cGvG=KKE1ufP7v znE6^+O0mD*^b@$T{eyYlqn7P<)%uqvb2VQ5p!;semwkupl8P65MC{tIHj#aDT7J$U zH{;Fm?6q#eXVYHpPiM9IJ}u4G?dHy+AE$#)r5J6^%s;mJ+ASqh=Eygbqvta%n3cXN zzHtA!g?av_M<VUCR`uLZkv!f}?8ccszxIRXl!c3Vd%_*+*{&`Zp2&Gt-9UPBsG^TS zxylUhW-&weskNG)F1h=<Wanitta`CF%dKUV|7X>(SrLmDp4xXwuI#SG*H2LrI_LFw z&i{5R%J#GTt7PZxzeG>148OQwNqRtm#&nk=mQxu)E1#`BX04WQo>it%a_h=X)$d0$ zxu(s{F8*^@!}-#=`pEk1!ZfcHt5riD^Y6|JU8U2#v;6z1O^X|pHs@G=->-OM-?4|^ zOqWbP^jYy!SESh1wOa*y@-zMke_N9M`a_VI5%2U>3;xe%J$|xjlX2ITPNw5)&!nHI zyWe<UfMeo=-Mkzke1~kJf*U$t&pA1%!OrorlU}k=v0hn&^M{(`9_RU2BkF|?Y5Hy7 zrDV_5cGAWvVb9O`2h`cp14Qn{-aGhX($_8T+0UD=Q*`~a<%Oko!sRFSU3)kK6+T$( zVLboUrbqt6lAk4O*8I=aJffa>kufSetJPe2gYP1h(D)xums$T)<a+PcnwIld?ZEY{ zCmA0+9r7YRIsNi5_!zfo<NxZ~$xFQ^)N^v#RUV#uak{?4eMUclFU&5P?$P#t+YcK~ ztWjJeclooC;k_cMSC7P#KlIl(Je0`!@3*eqr14}=-g7_m_NF!G*#G~!UcZS=M(S3x z#&@0aYn<R6D5t-<Klmf&KJj3)<jlwGT;}chZya01zVe$}O<f72AOE@Y^}kEh3|7Z) zsOOLWGhe*EmT{l|{hU1&|2{r=^W(wa-KQrnzOQ%Qu6EaskoR#p|DH4a;k3AWG__}$ zisSSb#-GwSna+Q8n-G2T#IEy)-}hIjJ$M~%Ai=?UDarqQU!Cp0FQ+T_<upfe&a9mL z>sH|!kxq+4Q4vwbuE~8HD}A2W`DRF|7Jn}MvTUJk{j8|)&uw45-`&{txNWMnaQ>wY zmv;Sm`sc-(WvyTD?kL(M5f!<Z?b)4epT1t&l{+;|hGEOj#1kjeWv=mr^YglyUv_o5 z-aKbvPnhqgH!r>%{`m0V(T~f8r$1Y%9v>B~dy2zn@nT1V?T(ukt(zUXF?q9@&WjBZ zX9K^m-$-;@v^iUMPyGSqh39=#Rc)WxoZbE4b@=T=>sI;l&rhB{Ehb3R=J>l@i5s^K zA3RsF@&3)Ed3omsm#V($JKRp)R(xBv>1kGZ&%#R_HpjOKWZV?gx0~DanV)^X++THz zKQA9VIj;QS<AXnsUhu@!O#1H?{r)?j?R)!!KaU=~*?Q*EJ?_%(*Lw|&x72^GTC#;_ zlSa<l%qZ@X+=^-ESbRRaeC1p8XVEXS=fy&Yoi_%W<-A<7K&Z^Cg>lod<CDdgzAc+P zd-|Dew`)_c-OS)wcqX$_o#B|pk&>oQ%6AsLGht{gKWe+h;&NqqO<~c8k3T;By|_ER zPKV>**J<ung(r5+{Lsn7+_%d>W6rf7FY2qxChuRQb#>i4z4g-;PK_>AO<yc(A^xX* zhR=8J-jJN*^=_YyP4xC()%$;HdBjb|npY00d<*@*1gv}XUhM4mvwRv;tFC>0b1#(V zVr}`Y$Xk`Sb-gY|<j5xF?oLymlWKbT_%)}w($AH%ru)ubvUlmWTh~R_hQ~PW-Ws!( zWnW|Tt$K^-{nO%a9?QAqccp)q_JV@h2e<oO598gJcD7jL-e0cALCLQYOP6{T?eSW% zPegHJa$&o?tZ>&Yt+hK(<t~{R%Wpqz_sZi3ne7jqxN+dpv#Z-0^ky}ml<+CJXufO0 z?U<&mr)J0Z-Mry=+K%DD!#@l;PG-CEv-6}L@-8+Ods2L2V!dQZ-R&%mTFzJVo<7+2 zIr7QE9lry21pE^+d3HT;^N9ueSMPmUoV)IgYsp^agE?JxlOktKc{kzcgu~lqo#l_W zDt7MPKIc%%ruFi(MT9Qi-0E>CNaS-yh5A|+FY&cnHOJoM1x~qG^mfj%%c0Xm7yV}K z=DfJ~^P6bnBmY-jy(uInwzK|G)!T4M*@(m+0R>7n-7SCk=dk(Rw5SN$u$H0dq|b$G zjgB5pCM!fXWc>f~)nmiCrQe=&M7&EiH`?*y2AjNUaQ(CM_a0lc7iVzDt+}gV`eyN> z;wQ&tXX(ARzV)p@W7DIitQS=VhwB92-|FSN@#^txttFXS9<4mKcO1oh!?&+pRlh0W zuivEwEx#Y^$@snMc52z(Ew9d*Oux8Ft8ZP{Hb={OUJ_6AZL^G6FCR*;J+qrvw($DJ z`u<nX1^yqueaPUz718&rf2=-Of1`3|c+daacPn=vtB*OA&-t;Q>1BAY=^oR)?tu<F zj{hjIs7d2kvs!lNr{+slcQSt$zxeO@fbVP4pZcp`{+nA@yZ)JecdmK<^}qF!`&GaE ze}1z`{7wCOYvsy9^BKx*y-7kBWY+cklQ}2!Ntr9~%-&4_70u2nNg<{>lKe)A`2iIb z6V{z+my>Cjo*&oDbFFo=eaaufHV-f7o`NVhgT<U(_a|!}S=h%uxqjlJiyZ!1k{6f0 zdHF(bepqXLLBgujN1g?#Z3>J_X^r{y$yoT{0mghMo2aSn^YT_a`e*h_JN3W+`#l%q zD}SWl3`jeBT6D(x$!FJ0a1vZ=9~06yY16V@8TxUj@5sEW5D?&J6Ly-+DDmdqUfH)j zWp2A8|5j=ErA)UzZm#%=|0Z*AY@5Y}S<J8d*KFT*(CJe9vgP%1@BUjnT);XbAa13~ z0?l<3*xlpiNMr}g_4G42<)u%o+jxBAhA-O;ces9Ll;}9arpbJ8z0sEY&C2&8y0e2A zZj@Y({b^+0%%I`7%H_dv>A9T>|5Ak>rkj}SpLy!Iy|nGx+(e&X6aQ_IC613HMJ`me zzb;I$<(qQ6u}N=_y5q#|dNUW1xNzrKUT<3)=UY|`<pu|S9y_OQA)@v%=J*Y*r3T`w zzCU`Ely`B@E|F;mLQYh%|7EG?`(3|PMP`$0(rn>|S%3fEyFFLw-~V@~&0l}szw}Sl zz5mf^N&BX)cm49pBJ5@Kyvw|ClRt?#TzcCx#n9b~FSL2(Ur7V&^s)dS`;7Q{Zm+b1 z%U_B7J{@sCzN=utC;rymDq&XbNz8RMzjzul%48F)EEP{mHvRi^;Cr%*rA7af<DWww z)fOln+N&g_UB3E@QMKQHjwiKp)qC$N{0XTQo7_^Na)VvGefg)E3DtH_CDU9*rX{nQ zMNLiCnpKf2>{lBrkT*#skoo2oqoU9S^%ZlpcmESnyXW%tv+DPMt;g!yf7;t_yd~Cm zHdvyx^Z(AxzpK)>cl`fZmf!n-=al<G=l*}Zap28j*Goke-<_{+`4N+M`>?#$`Cn36 z+iwNG$*(pI*nHT3?WYsperSgMsCm-*xc0;I4S%QP^t_OJJUdb+fJ<xXC4UCFUCjDF zvQ7S7u4hrpu;I?wy!yebkN>~U-d<hZ`tkqM)8Xr{J^pW0cUtoQ+`pe@U8sGv_Tr&m zm3ous+~%vhZhXw#HhG2Z<eapU`#jGkI(I#+Jo18X^R+MFBL`A>(*8a!y5ut<FL2uC zpxX<yms?B5J-jt7_2SxI=6jpie!uS7_U4XCW|`%k&yqp)E`RzBTFf)L4jp0WnzedC z(y29}8GqG(JME~QuWsmbq1R_leHxGb#<YN|hOZb7d8^ysTDJFSQry!Az7xv5(=Wfh zlca4vkLx(ghnf;aR++ucB6AO=FtJ@*`yyd7|Mn85?{WJVZq8iVytTW#)UqW+r{B$J zSJ&5VJm+*9OeSt&j;WtM;ZCzX<MC$6H*eqUxq0*M&D*tmKW9DvdVqy1KtFL^q$J~E z@nVMU&+c<A_#vpg<Mm>%=>gB5HeWvT<jQP?da(sF;_a8eFZRFOQ`BFXeES0jkHFV} z-D}KG>uw5JSb6GO*NLe`hholj8PBU+=BO?6`OW9LkEhQ*-Eu&8`zik8$ujkiT$rzi z`R|%!qkAy$jm(c?EuUMvZ~O?<T==I&_kr@GU~i42I)_P;s~Apf+0VCQb(e=lfwWVR zVvqGNfkW>5SjzSHPRrac)pErB+@sA$zJ7Wg$@S1(MkTs}*>dTA*Uve&ufMc<<XpbI z_w$A|=bz3p_g-iJc9rl`uUDJ?tE)H^7S^x3E?2g+A<l36CwCPE^Ut3(+%DLwDEcOK z6em8urgHaX+T?}azKbP<`926bczrG|dpR}tbik=YHm2U`R&Vpx#hzUE)bgeL`9m!J z6CFDqN#C~HHKTFzC*AH+oil5ng}1gX^ID>JGvvxv9d_Z4_ZJKl%u76;UuJ0Eo_0v^ z^QlV1`h9}RduDB&7AB~-qGIJeWseDUaiRT%iT24647UzV@O(c(?3$7E?ahpTyF2+* z{n?Y1Jbu2j-?WEo{hJ=C<fv!&9~{w?>wGpxwDqg6fm&mKQbDhcMe^544V+6HzD7(C za1fq<M(EuFUt#&9t{Y@+*#0vb?EO+$qd8|ovC_(D<*@o$tSYy=4;XB#XWdr0&8}~I zqDZIW(w?7_oAuwZS$T*?+f-kyy*ihzdTK;RY1bpoWmDF!@Y3A!CcwwgH{gZhWrrnS z1S0ts>-cXE+@|C8x$ycV_qQH<1mY*HY_1S4l5ct#$*WMlvFcG|g@dKs^Xuz>Z(Drp zk$dv5WS=y_AHTM;)UOCJ^nSwPcls{7^|!*EId{V(TtaV}$gR*edR=>9o$hY-219wZ z4M`0fuJ2!HcQ!V9(S$~!Paa(UX?ZjBA|ng}XYn+iG}&}=s?XxY!h#ap)$iIv&d;iU zo>KLcD_%cC)?DFq#HC*n_gY%iZv6JBdHm(3;KGE33%2DnO^bTd&9<>V=Gdg%{TAVg z3#Wv+v_4DzD%T;(z4QB~a&Gv7x#$ZDwb!RgwH^`+Tp^#=&HL8M_xbh}c}v>3*YELB z6Zp|T|DOEJqtX``?uqV@>9+J-Hfz4!-1vynlGefkjptu3-#q&Cq`v(9P=@Q%^?17< z3Qc_WAb#qxtFwa4`1I22+powUX;G<6t}}E#XWDe?I(PVmoay#5^&76doUZTSX5QRb zczBgTXs<wZ^PV-2{M6Oobp*4Brs&;YxAS#U(Bk3`)wj&ApK#t_pmSx7Pe=V+Gi_#p zh2F0x&40N)Zq`HDTQ`~obxiV-xdXH$(j)l%zd18>zi!^t+xPGHqc;yewb%2r+s}(W zX7qTTUbsW$l5C~bE<gYAK6(-y@`>H(<e8i2>n!*FdHdkUqfc*MJbLqE#l#O!h1?Cj zlFs-`hTN{(xj8s!ZP0|z{O<0{r;8t#&kbI)TF1meW7mN{R_>mgpJzP_`a4f%&+meg z%DR6G>tc=EOBmP`B_%HEu5wq<R&&dAt)Ia1<--Gkqn;Pn>Z$+xKj;5`c|Cr68Tq*} zF>-Pt{O(g-Lr&h^;r-RYIZ1P2_AkL=L#ekNmX6W81hWg5{>t+(el+W&($(9nYdt2< zSsNNrwSsj|TGCYJ_^bNjURi?ct;ED;%$yfvcJ7<<{G}J|LZ;n3DHb#RYEeq)r8b|9 zC&lO0KWmv>$$Mb_s|kCu1RUlYi=SWfiPv0w!J}_X68Q!VAH|pp-ehbH+S#)C{C)m; z^(&)pz31OQtHLJu+^t#XfBrcCX+`q-vnRjQ9B$^6uvve$azo~cbw>=jDt0tRY;>&e zau#^_fsH4<M&6`{?fm{1N9)%<J+<bg;_1YFEA_Tc_M0@h{@NXH9<In;o)f0$-}RSs zv=^LX_V??Q)QM_Wr`+~TKY2R)ovzwkox7@f9XsCX_b=FAVz7RV?aHceOR5%$e+soe zZS$=mQ(eVD@A3hw+wbC2LK3YnZ&d!B5#6A5V@+a3^x8Dr%*$?_4A%>$W!gUT5ZpP} z;^Hd4Xz}}hzPYxCg`TNTS}wD9XS>PSTi0ZApB~hZ+Vp*{c+^5=?alnQ%tgtm+FN!x z)M-ARAti2gYeK`LC7HYnEEekia!s<ncw&iX&6O=_T=7?`6(TPjX%G$M3EBN^#h+Qb ze>~Zj^XgS_lWDZ9`+Td5yGq4gJXw|ZaP@u5zseulUlhAMVmZoR#ro&$-M{sAe&^R+ zEhu<({pGD~OV`}?p7m|wS@Q`~XS=t@CTAW$k$?PNyxiaKFP9s?(^9tozi&gZh?sEg zzo4&`1~Ogh${Gr0`~5X_&-6W=Cf%eX?>hI#-WwbE-e3Hx@j$v~p;pp;$rqE%J8f=; zSqX3Y`q;5%@~#gZPxfe+mvjcr3UGXC+Ep){rvBm$pR4HggN>^US1&v6>~mhe`^bW> zkfPf;XI8WXM+Jt8{k67KHcsC*Nv&YJclUzsPse-xi@YMg)b%B6ZrmI^=j#3c(PBlV zT;<!+&EBi$R?m2J&VF_r5AW`$Mn{%z_@@0!O;K6o_lf3OmhL5%+qr}_C(is{HY?rs zr1xFh`cKNsxThp?O-qe9a65Z>zuuc`wb2{X!t(-mJvv$Dd3&Dkt(TL3y-Tqa*(AeZ zDRKLWT9~J|-u4SQmD~8g#qH0$aqCO*lHNO)`u9#`{svn1E;ZTu&0-7Ryqw&h$|~%w z#Z6B*md!F*<K$+@Q)~2B@@(XG1L0+>+b;a^E}p3I<xzd*6ovi1EA`~V!?$#P)ehep z8@AfLaG%^CiTevH<o8Ul<kvi1^(4?{*I#Sd#7|1o=d4Y$Z#`&}>U*Lt>5IL`B#HR* zLLsa20~>^9HFrh)@?Dj#S9q<vqAYap(k$LX^Y<SAX!qlh!PQxrPpWrp%rJZ^Wmemp z{ET~g2kYY}{r)bj_3~^2{-SSEPW1)09AjDbXFrEkc*pX+4STbs*nI=zkDh0oe3A7< zX!u38Gc(v#vsrdT+)OCdb}(j3D_?Q=>(N~+<6j-JTBgEq;j_TfoF6*5i$1AaidAkp z|Jh8w>$2=?Q|H8xliQ~4{QFGa*rl7@E=M5LT-8+k$&dSNF{%kq7K+r*?6WbGTGre> zEz<XB!$Dt%b%_&Hh3oUJa;=J-rhj<!N+KaDVa=>l#ZEtdPg*Q@MeCDy^t*j&KmNbv zc#!oY{@%N{d-Oi--&?o&*#G!b?@zya^ndrqqiY5KNGt!azOXCvxth_n?+1V0xz)8r z$|dhuZQjMeg+K0WI2D-@n0#vcwy(AI8v`%QT>L5JZo!m@THXA%%RwiD+pIP$>=m7s z!>;-Bu0z;zw}NoZ&@i7urqU_Gwa*Oe54!RkPk!T>-^VLtee!Rk!+%+xgcl1dHoW|D zlJnz5&CbaOmxWx_aO}O6wz7B0G1uTN0jKBLTo9V~nf1A3^pjJ^a;u{cR|U-8*~q?7 zJGA~MV@BhYJyDw;2Zv7lx!lxrhJVg_qiQ~pLYuYCG7BmmCiV&((-E8GG^as2RdD^T zsG{)c@wStmo0O=YTf_8py~7QI<)^kWyyKajnVR!q+gl5#)Wg2r?>0o9bye8UlPdUi z)#@p;Z<+bo7Mm7*zO-r67vnQ-n<shRDG+-hdO0U?Lw(`ohTdD#RP31QnPk*vC#Y|o zrQDkpyYF4^1-GTI3>-cbJI5vRhTHTpH%zNfR=PL!Nm0}nm-X{9mM*XLc&*(1b^YP^ z#h>S&*#GX~pY-=%Z-4rEe)aU%pXaCknO6KSI415kf1}TB_G@ogHb#8xSkb3s^vGIP z+WLv+$NR}r=Pjzv)bE~Izd5b5=913DZ`@4(t4xkQJScmFF?vF$%op`-uLT~rFVmg; z@l9_%pZ$NKLnh6<r{`uYRM_ctqCQ47W#1GYyUgoKpS;$!RtU!`#+`QG@UC#i|D~rZ zqQCvG`u9IP-}}%1_22HTd;UN5&otxz(>I<8dN*0_=Kr-EtNbharkPcy)Ek$`pZPEK z`<(ETzv27Y9@l$+`@ies|FiG>UjF<4^xVDKUw`cHi9i4NfAi;`>z_B|r}AkO|9rno z;OlC(4L-B#LZ6v$otf!;Y5vwNPXoV*-`cXOd)k{{)6P#nzBYbyK-hi#Q)}|?J*j=Y z=U0^b+s4rQlYR$3zH*+eQBU&g+?`KCb+^<fO$wL)ep)$SYpJdI#<D3hgvws@{J*&} z`d#L;h3o8}Ez^mAZGPg$f$c$MUFSnRQzyh5ChGk<6I5Nh@x}B{@tS<KwLexqm_Pkw zSf{<cc|q9b=jE!k>34p5m6<>L({;t|-k+{7-5a01mi&HlX1-2(p<LP2-2F8_mj&&b ze7Dk~>`(oLyJ`GKFUIRTmS2l)QN2Iu;Hk}@msj5}Q~7!AeE95{@w08iny25_yC9tU zbiMMvdZjskZe9#2mU;PUd+)|}ugEWbwkev0XOHfG_Ne^%qjHIRp_i)E{+Vnx<=<a( zudjW7nalQ#AHuIZo7G%@_TYW4Pxr5^lxF;Ae(J!A56qw5Yd@_2op^uylYc5ZzF$8b z7I#hAF@0Okv86MACEeAZ_Th@<_shzk<RrcqSAO51AI)@o-_jNN^RoY+_Hy{Oo?-TH zbM~k6ne(+<j;+pmHsg62TXLpU`Kj`$sq@#a?Qgrbp!e*NYb!&gqhCI|x+T@ppnSjm z4vUKNg1q%h=WM-s?y*!*_T$L<&rRirxZm+GhNk}By!bNz@pg9c<MaLW?CYxXA9v4p znzdlZtj4(Wr)rm6Y<b!)S?iZSt6}e%BDM*M(@*-<xkd52s~rt1%2?%^muKb^88%a9 z;)8YuvFpd%CO+S<e~wSD{zt)w$2*rkls;!rbdz6fLhz=X|7?YyG_`)7ocY9dzeT;p z?jKLTeA?dpxcl_x#oe19FJ^0+ep>pdMyH{@Z?Ny*r|0}U*LoSAvzL*b8y6>2zol0; zZ_)*Zg)f-=zXqJ#%gVdv@?B~B$b$Zfr|S*>IqY6OGw#I0<EO5xIpm7mo4R{%^Ikst zY0}ADGxB9Loo?rrmu`Ez`bv+y-4y1iYRR)dqv}_$6<pchrnaQ6%xnH7$&h(pSKO%) zd-BEe^yAG}cD`7`CYQZx@5>hj%VUz*-BotYnYQ@IBsI%8xnQ^cS=)E%CYJL1T-A0B z%zeuuUo<DAm3g($+EDYm3h`;|e-|+K=_QA~Ubi7Dwo%Ps=EZ$hha>0BTT>7i^~~b+ zGHVg9w+rk`>JQyaJC}1;HEgYSiGlT+yXUHktgD;ic%Jsk@fALbpU=I0yU4`De{PjI zD7c+c^tPVDS0WnrxwE|cks{aR3OPX;HRr$+D^BLNB(Ba{mU((xgs4jHg02;7HTL&D zu8Up}c_Zu6hiy?uMVH0s$T)7h5xBndT{mmVn}{nW+0m=FO=YiNoN?k_d0a;Fva?6K zc~1CleEIy8iPf1fS;3ccX782#`;;s4$)ES#t*frQGmlPtv-ZQYpr5ASU!AJGd1d$N zBOZIL?!}faDt)cLNot>@*tC0F``iBLK3e?ILiShK;q7bV@Bi9XeK+sh&hB@G-oK;Y zm3;X3>BWA3`?;|)bC=GqkH2xfo~yglu72e&8wtLnlLf#0l?eP*>tG|{!{O^A$TBUv zT}S+>>X*GYV)!9#s>KVn67Cz!6!|n)g_Ga&N6?}dr#EKEA2DB<p|tbC_czbtj(POu z@1MCcY^jZbPKDv(uGbF~uFnX)9IU<UdB5wic-N}kxn^l0Nk%JHXm$UaD|4rQrg5~V z@Q&L{T}ym_K0c=Izf`BnzH-x)8;4H@Ki_@us(r|YH3HFQr!I+kO7HEC-yTzUMf_@= z?0Y$JmyP{4H)>r1X63JrP`G%Ax6#43bKP#+7n|iiEj_3D^IZhL%S@&<l40M!dA)hS zaP94ft$yo2#i{C_cTb=COCs`)o2X%sNJf3{W!doAx{`huwjANIFS)z8u|%!RGyCSe z<7s*S7dCG%-T9|$k@2s@=76<xYEDmE^?A36#F~GT!<v^py>YYX$(suseCAz!9_s5Y z*T3QDce@+af0remzvRElyokH{o7=gW&pA6UX8OF_(ErF}=f?D>{3~Te&T%TWM{PbG z6{@b4B2s_&g8Jq87w7OYK5JVa<?&hntm~o+-OmG?{+KP@RTC3?vB)%g{Vl!KR~K8v z^Vjvf57@&WcVbTalvLYK8gh64&FwR&oalY-o7Vh83H$gbRZQD|Md0%v$4N(iR83nD zRNKuo<$?_BiA(uGw#A*&XIF_He==9Uzo^nYPD!$=Oti!`wO(rLJx+yrvu-&(6tezn zCV1)d`%hP&ZFIkRM{??4);CN&My!{0r41c4cQclVr0DC2<l3%WHK8{uv!pcT`L5GC zOAnL<U%H?qV_?vEPNnwT*;~w7Th(eVh|G)nBXc1mR$yf*Ywm<Cl{1d91#A}m8?(Kk zF<H7n&+z<fuF~K=CLJ&9J$5lToOhnGX{WOJqG|k^y_ZttpXb_&9G`aW_U1z?X3d@X zgfHmd48<s$Z3&;-cQLH_5`OT%8QU{Sh2N>ul>2>|UuLXH4U1GwC=i~IEs@fB<o;~F z%Wi%Tgv!!n!_$*ZGJ`YyB$oet`g{7+M+>9=%RRf^^8e|%?8E;ePyhe=?Ct6L>8}6I z?=@e4{g3|XAGMKk|GiH=R%N_#okvgBV8@gbDsPT2=wgbFuXz$`P@wRkb;Uo|cJ7O5 zOp((Tuf3LbUYC1Am0ZE&ur)6jLu>LPlJ&MMF?kw&``x}ND@!I-rZ`Ty*7^3e*#fPN z%YVEt4%vT9$8=py<iwZ9r+!Lt6`5|}C$y;kyv$6+9UTuVdTd|HY;#Ov@3a?qvA>y- z$5w>jOxDg~;+6l+zAG1P{Nh!5_S3UA!`Ylt+9}>L87I&E{PeFUS0lxF+upTLF0DL! z>%h9;prXZ7r%AJg%+lJ}=WibR^{IULwP?GQdl%*04?a>T&R?`ew6%RIlZ0`E15@GI zlqt@8Ue%{%2gg=@wU~R^@AF*4qekwh9FLvLR#NRWiC?tJ<ffT+m#34B(3|G&!@)mw z8b9)SwM6&nxv$f-?sdAk;L?t_`C%7#oOtgvvv%$&t-H&%*@m6J!*hGfk~K1a1=b(5 zNft7h!&((;GW&^np3sKC%XvrCANV&MP7!{y<eHInk?XdO`l{k}?|l8VkFH5S$|B+% z=gWIt*Y9r3>Ae@F-ki=7`leeY73F_EbYr_g4&R(_^}OHyPprRt`d|I~tGAW@zkYY` zwCVrXL3Ot8|L3YN`?poagoSm}d#gz|I@UMl{@JknNPT~%&0`JQ_i6vm&Qkw&^3#zp zlf9aJ{O=U_Zn)^}yFPzLy}oMC{F&3Pv`rTOXZYujH^=4kXRmj)Iz8c;{Qrtx+`bl` z8Clnr-f*2;xF>L(z{|A@&1<5+tMNXoKUc@j{3rim+SK%}wOWhQ{@t(LyE}Ns|M>k? zTj%|s{wez0pY`t-f8txUv+%;3Te~7-l$VHeW(s{)SzqY$`rf)`u4zwYu70WdS6|=r zd4C35_nY9)x*@aIeQDb1U00^}^TOX9Z_g+GnSQ%e!=gMohw=5X|K_`o{=I+i+`Fnj z@u%{4{@!m>yE&CRVvqW?m9pkVqC6Mxe+r1ZS0j>h_rbO8{nq!xE=hdn>OOD8n^(WJ z^61QheJiqf-~T!MPW{gD|C*eIPLJLl{~xY@zh30}|7z>?<=4T(-SPjgTY8^(_ASuN z{Orx>`6?;dM;@L%p=_vB^W%n|pRCd3Su2&z8L!ANtTLW@QIbnwNk++{xa*peo(1na zP%l?f#+9tOXXE^G_RVuIt-8$lE-=UOir|y?Pi9FU<~SCxLUF3ueXD>M#V2-uF}f`> zCBHL6Po%!#Fw4>MfaXVG{xL_i>tl-;%7vS&40|rH&QmhFoL5@hAIq}o$>pF`oSdFI zzny=r{C2@rDOpbUsbK$kf%i@pS9U6TtryFAaZX6*+|hhZEwh!9-`6JGiQ8JDVXr?w z`twf*R%@QyIVM%sJo#JxR$ShZJY7kC*8#5$qDd<^nje#@|Glm6jrCv4wf`&6q&p>v zoDA@mOE&hYd9p=%MdbheHD9yVZ}?aLwXF8v<~jF2UH{+RqWjvqp-AJ?^MxF4*S0e* zWk@`pykypgM|T?j>dx1`8Y5`)?(0seb6y{R9h<fy$Xh&E;;^Py(5F{3SWa+MC7gNP zm#gIdYIagfvS7<1D{;>HxaD@w`1y})Ry(vJhiB6bS+>`o=BQ5Y=i0BSzu@1pi8FTU ztZr4kzF%2?;cv||j{@wB!a^ja4hd9f9dBuKS{^xn`TX0)|8F+fJ)HOb{0WZoZm0eq z7JF{8H)nfXoE^?AK3Sqr+iG*yylVb7&Gh$qv(+~zl|=mC82C!6{fyJzANBR`_T9Xz z`?G#u?EL?FPq+X1I{znMz~0{V3zy&J?n=EQ$$7#0B9pXb_op*n>lWRWWvh?&-s`@# zY4*vLe<hD+8^ww@ds*1MHZ_!ftCC>e^P%5xrt5D9lO>TxiW^JnC+~1S&v0T^#^!G( zF`dnv?H}!3PTF?nFMVFxEx91=PyOF-x%D6a<$r&B?;Lnt*3N(On>0He!v1FYmn;(g zTUxl}yn>{!bFE$acEkNs9#>t6f9n{Zd%H8=qN3bF`Tdo1`5`MbvkS#PYdHU~;>*9` z7xk}n$-fnExD7Z?{GHhIU2OgdX@`ILQ%mKJt(o$``da)++YipCF3xC@+`O@@bO!Sc z(enDv_3^I~@-sCa>c97ooxEy=bLcMjLjsjDIp&HDD#9YGf7FGQZ;6^G)^n)MU-J{k z>esvag(pp4aADJx_Y3n9%i<&X;<%JGpEvKj*xxAjYU#H-vk&-){5z1iPIJA>*XVWI zdN`VwI?c%t%_(2B>wfjofC;tc=O&)9*mm^}_XC@ky!Cq-K7YRJD0Ke9gTgNpZpA4{ zKREgGxKCS+XtZA0T%FYuzRkP8=%-l4xoVLc|MxA`$*kS@W(zB8euGi5vfliSXLrti zHswcH=dG<frj@M}TEc(%ilcM*{AOu3pPgJUvTed{noCaLz3sdFhrW^PNtUx2HrxWa z`<U0<{Qvgt+r7HK>g(U_t=fI>zwYDhRsZHk7F*9|y%}2Q%zoi=j2{1EhNufi9x?2? z_51Ly-}jlebR_DAZeaRSduAJ(!HNDib9Yo+oqDzA>#rN%j+q<Ibo~^uCDWO`f&YW- z&fB7|n$lzU&aC@!`NHz=#ozyDm4E*}{npR=^6yt)C;hp9ZuRx`*FOI@s`IX&@qfNQ zhi}nFUeg8ILbH{g$$wPHQ?D`mn(E`RNTbO|QFN89_B@Gg>bwi(q7{QS?C1UNW)*%~ zP2$d?p9;0HOP0!d%vbz>y=Kd?hRxqzH1S2m-D&=_<pbyK#_7k-svHXrGi|QtV|(CV z@b}r&{yk^PW_>$VwCBi|R-ep;i9#_>VfAlWpE|1T<dHflzBgv~?pZdk4&LGF$y<DB znyTJv!_K`^K5*qU@lI%8dM5nFvYW>YdHyyl%sMdnX2_zw;@_%$HcT=-%KCe!$@dd| z8x$t3S$}4K<85KaZ@)F0>d#y-4xPEG^@_QFr%Q^&Gov-Vhi;s<=HjwtPRgySPCReu zR)40Tr@qF(f<ZoV)%W)YBo#S5J|8#n{UXoGRS<5e<6X<VGRoU~W{=2L!+^E9_YSkf zId|oJE7ZDHQSg7M;m+vWX{iZ?#(h$2mkGT#2%UG7x9E!Bvzz8?pM6=iFVVPrV|PmD z-72rhcWt~bzn8PVcl?$2^j&D%;Y9o3a}(}WUbp!2bHb+jdG%pA|0e1>{hXYnR8e!8 zQ}g*G{bQ#aQ~t<C+)C|A(x3d9C%4nGdXJgd=e?blnN|0fx8-hAHdGG{Zq;MUt~1k& z@|(L^;(5c`9m{^-zWwI%-~E^Ve-7XEKio<qMKxrLcl?{pOLz9Kx2!eYEwWwYW%tvP ztdnu4pG1FuTYA54#=iR8cUs>fh5NVi9htvse~IKJk$11JUTQPmzb7dA)bqf^gInhu zP1!Xeb2mrWty{-z?e293=Ko$_lCX068jV_wHD=!@bIO%j{I~sCQdnZ=Wv8BddWGfx zyOn=m`TqM;{{8K1(|_lS>e}sP=fpNlZtizKwDskLtxR>xPfG2n`2G6g&7bujmkZlA z&UqL)tNC(pa96X&B_Z4D{#pZd;{xeP)f0RIdKh{H9TJ-!X&e)2w4OMN$taEUfVH79 z1HYPqg86^`AB{&CT7@O5POytq=DhbjX|Xe1@?xY2Yw-hL1-^q4j@yivMkk1|RdfkI zY0eO1nPMH-`2EOk*N<X93JTBdS1zpI#OiTo+0&BOD$6QgzS+;Jaf-#N_oB%8WpBE< zCH_^j@ojm}*SbZypif|iil@u>?c3kKfA4P4chYwMVzDEWPAtBycxRvULjR;)y3ZXA z)C^}#l3<kS^RyA&$aa3--?#Y>ro@{!XR|2HNHF8S?_bccV{OI#ROc_IhaU2N2o#xM z`KkWk{eNLm_kO}=$o|Mof9E>uBFm;Z0W(rtoF~+BEPLZ!XDV>?iBzCLW4T9N<H{2g ze0^g~jOK2tUtT%MTIBw53(o+KcZEhb>%Z}=2<g6fLL?+uHC%bm!5xeTI=naP96n_< z|8Iv-o>X0x!?8Q+Vln3#fA#E%Y&tBRC$z2J;mah3I}2QvNbni+GhI7>ijO0He^X*Y zMC_vpYm;ri)P6M9JIA=Z{_p>rzrTMs%Tvi0xj+AB_=BaJ<Gt%nF4HSBS}c41yT+zT z8INyNsjA+zoF^mvhRxIEtQ&vBv@@MW|Gs@*P>@-&dH2mLXN7cae!n@QBsHC%t96yr zLN2!{MtkeM^$V3Irf4WF&Iyv3WpDKL__W27ME?33N`CogUGnX)qE+4hXYW_scURU~ zHuqd$lSDs9cx+U4i(<~}s7{gD(;~Zk1mcaALc6)#?PLYkv+GPPbLRD_Enhd$<&))+ z5UwLzc50oU<iLAgJk2WIq&2VZsL`B55?|G3uKX%0blPV@z0Zo+7lHrdj%LN(yV*3W zJ%H($=OIn!<G*g@OufSHc(;S8P>^k&_?nMz>JF!Mef{_I`Muodp;34La1`5Z)jLqi ze_&1fhuCx0@0VsiySnw%wyl3N+=R7Mj!!BSDPj^|Z*lGQpUuI+J$JSDGr7j+{&=$7 zck$a5>mL}z)QT_9n6mJGJ*#(+&hquU>l-{3R+zl`&$&u^&qlYu8JjO#CV$)7aO-#R zw2v{SL7Q*!UGSWyz%$3wZzIb$kw-2oQ#rU>CKiUild$)-4xXpFwwHSs=au)LC0~7C zI%lz6=zpaHC2{uk?s^>ceZOk04huJ}3T(Wuqp-HD?EbufK0&1|!V8qt(!%Q_o=W8w zG%aqlayYqc_7=6}|GwCLGk=wy<r`@Kwf156Hih$Ru2kJF6S$@8e=oP^(U;#kozHdC z>tFxg^YqW(xz)!4rukX)ohdX`{piyjHSNUx{ws#d&nN88-{>G1n0~3lrQ@ai{Od-I z&$)C297SC@m6L4ZckouvbJq*B?a<uqQ-7i3$eT+KD?k1Fd-M3?zn3q^-=Dvy@^8Y- zb~&Ad%!|3!Yd+2FjPUr*#_XrYb*r-8y2HUeAbssbzOGk>ufB^O;eN62-ztW<<wkse zRiAOjv=@jSH<>x-VW)VFTttuUx3Hg=tnS6`Z{-$CH!kw|(c{E)Y}d9oQE?AuxJ3w6 zuNAGRKmPU5+4<L2=mgxqID<o9c(3uLKZ|ZJ(Xo6o=i{jbE5z6JapaVQoPP7BcfsUq zcYPmRTAZ+1W83p)?Rw9Il*WZt@5O}9<nEgnFvCkcx8X#*_4O{s5a~s;!l!X~EQ@Mj zIIxNNg;Y?ZwXcQDt^iNtQ+luT1e~^;Y)MU?v9Y61v$L;W<nI&ah2Q44&e%HZ#5BP~ z)tTF+r$y?|%2<8yFaN9J=*m~#+`r>Jew1#qdy;zd_y6g;^-q7>pC4y;^Z&c0HEloY zKR&w6|J8hs=QmqVj^mSDDq9@<>(;C?UD$c+dCTd2WsDE+vgVupzwT6VfcenX6V5u> zaUB(sEl&47@kCZH-@dh;k8?)%a&u*dzs0WB2kW^m82k&~lD&3WpTEuQt-HL~6}4R4 zc64S0JKx%|K6|Z!z4Z5I9CjfGUUt~*5<jMHVR)=qU!v%GjDDFlhim5tC)Mv4KZ`r= zp8M(f{PW@eT^#Gqo}X26aF*I^)A!l6CBX%GE5EYI<Zo=3c8FX4F8=f8+x1O<kG<W_ z@GtCF2LImU4$D~F4Fz>AZ|RzqoPD~pUrt>7&AzJGZ7rJ1#Um!kpN#n&C*v=%yvRzM z?Rt#BwkZ-{Cr?~-?qtpVx-@<k$N#xUWpD1A8T>2%weaLZ3xhC;w!bds2Rxnh_Nyiz zJIR$>5x;i-?&D6Gi~m3TcQ)jJ>aY8!>+{RR@BM%KZco*v|L+#BS^Y0PU!Kc<)htQI zJz0xSx^!<@JJmy(QU9vEsd`-Gg}O^B@@v&3`~6?4C|;EN<-FUidTZW&yT<uGBJo^_ zS7&L2Ep3d_cC|mEZQ^|N;6FK=tSkeI8wWI{&6B!jUr&3s^XwsMpYJD1YUhU4FY$aD zyiB@YUiA8g<2G-fx$m0oyypAKwQpZt6`3LS>Hl%f&fr6>hn_|mJrnx>KEG_+>7Vnr z#l5pT`hVB-PsioUwf^$QE#S7g&0Iglu(xy0@+V(?66O3(%AK0p($V8MY5jJkZ|fg& zt$0;!y>ji@y>BLF%=_*!PgU_()peE@i?hd)e{q)n{(0j-z4w;*V(z^!s-DGvnErpa z&{Qqq`2Wv7pP8L&f4OExv-n(LCF8t1(=EI?%lSLMnC{F9yX<mxP0#Z=c~y*NwYK@% zKg++Ve>k+MBJuv!dtZOf|GJ-h&c@6;&y@CG-N8NmpSfK9#oFh~KA$+=Z+5Kbu)oQ| zOP^O<v*Z11Ql51oKKI)B`W?r39~~=RU%Y;YCfBc}>`d+aB}sdBpGgj3x$f`1;*&*p za%`;5?37pGu?M#<+40U>;ARZ#BrWx;EvGU{R>|JwuPf4vZWezR+O*24FemT*oc(_p zy^ocA6839c(ZqJ=RBT1hZN-2UkE7yJQe(F$Uaq)VzHj}M^NqICR_uE-duK_#w$h`J zJ5jlMkI%n)a%E<gNZy9)XKt&$UfWe#C8#2K%7s~d<teuy#^};lbM|$|&UhW6ZTR15 z@xRsi>}e~1uKU@ax7sc1;OB3vZS~IGoA=9at((?5cE4kft`uvmJ-~CO*DcprdjEUY z>MQF5xn06Ox{5Z6Mnzn7O_(ZNwlY8=xv+jiy+g?Tdw(SJGp*-Ns<?L7McShCLfiYT zk=ax3x=44IT~$hQHMKo5d+G$yxcd=Doioq>vdlL>;`qW}yFPHu?M8u@HGRA8-dVL_ z$=O32IHt4zHd`P2bj_*Iu!S!Leq82R{^878hiA`h`&K6DZG5%z4tLA?=rv2rqA#yI z)+p_4da{1nkL<tC-<BQFEehjSIj^uo>f3`WoZJ&<Y|`nw(4laaL%G5xQ?cxPebfQ2 z`MY<DHGIw2>pGpVUXHtZnb?7|Om|m#hR%!l?i0~!!s+dyy}sJ_QC8N2Ur$0`e*NIU zai+PPvom)~Q08irZEQ(741df{UbNw4jN0;`BE3S{rgie}dZiANJu)jS_e~dyxq3Wa z)PE7v#;dIh*M;5rTX0c3aY|8<W29Obv$nUgj_3dKWk06nEztQH@*q84>JLx+|LxyD z7XHgvD0%N7cS+bR#*W=jjOtgpuwMH1jze(r4wZR}#hY7?akZa)mHa!a@MGAV97U5$ zbN#MP=6-ANYxN%2NHyhpvq>Mij3v)LeEugks-aHx!x5o#vwMmw?yiYuekjN7Qo4X4 zwE1Y@y*yU2@;!^MY+1K^rclw%4gF#*kFIu>6@O)`QM$Wl_Eytf%5CR;g3}D&7Hw|X z5|_|_L%8T?!pl9C$Mra^_DFSFZ9LSow$~@nf5Xv+y?-AW@8&%weSS~s`49C{Esf`m z&OSc$Gfcm4{i%2PdnSgrzic=gBqiMPSmNgK!Va}bnnyB>Iyq+vDt>7Bl90D>mBlfW zJcA8W<702l+i#?MaI&X?McBWl%OSmn|8FnyiG8zBVS-r8Yp2~=pEvqc)xXi}^9}to z_aaN_|CuFwSJj@6Jacucyz=q5e>4AV`d|O;`QhL%r~lnvZ2mjl{r&y7e~lYww0~Qy z-H`wDlEUX7lN4&Nci*@%SFzUQbjy~HuLRr}IJ7vP=}uqH5*PW#-=p`&`t`Syr%ia5 z=Dc-L*@7tZ!#A{h#7=zESUIDup(Rd*%S29$Cq}ASO4lUlh2aLr&Ih_BqF&O^=5G1E z{rX-1`So_Suk!S6THY7#eDm*g<<46cRxxLT;(}yX-xFN&FuZ#GMYl6IDyJ=aceG5r zG&bPN(e00?o=UHC$jLkOxU{}^dBh)&XX`e16?|R2StPs9IX$0`_qyrB)}M|&tp*EM zPpD<v^F+woO=U&K)7ZOr7kM1s*K^|SZA<&_zCWf%X8pDItLOWE|4)g;nMJd|UwrZZ z<EN+QyVsxk_&;v%oqxYh{(o$D>i)m*{rAI-9OJ7O?Nr|I|GVGwncbDsAAN|KyKbMz z^}_N$Ob=N$PEqmLJV(w#ERA#O=Q<ZXk266+3orlwe2w*cqqNbXQV)5p3#z>yHttuB ze0`{6{P3}!WWTaVs>{YYt@>7ZLj(TL=6xsCxpp3S?$(!7*yDaC;;4gu2WOvxjyUJ? z44<DqEOXDbe;03w4=8#m`+tA#jUBbq+>PucbIPpJW!zKRe(t>CoF1(8=|%HK%jGLJ zcr@Niy}<3@{?KKK%9Jln3NNLcjF+z7<kEhF**DupEoSS|TdC7M*Bz|nZON&h_NZmm z%GEcu&U`uhn8&q;;{w+Uo!;jh>cuU`lcj=rS&sztNQk?9l_{}0KX2jY?f<_%TXI>F zuU*lbrQ4HziYtea*zpXr_r<kh>txhix88iYC-sfYg!bqQcT80Rg~Fyd=5+nHw|ZRs z<>B=C4Cim{==ynU#y^EcNq)k!ZN<xaKh#fnBq2DLX`R}tC2S8gCgv&3<<nWq*J6?6 z!*#MyOTbND>_xKEQxoZf0&jXJ7q1s!KFKM0#=!T~^}yLDgcrr6<>>dwc!!kRTeTnG zbG%9T$+F*O{1)FIvJ0L6^ean|+3;?O^o?Ch#me&cxo`aNz0mJL*C~ZtV(Nz1G{1h@ z>oa#nJx`Cr+u~JWDQjBPjv8(`!8TEI<B=-shWv#(E`PTuAKIAUC;9*13z4e-?=OFU zf2WV%N_P7MhXMhi92T|J9{J@B{L3>rZN5%dP!ezUm6*xC>y^vm#n%&hM5erO*zSMV ziPP8k_#6kD6h~FTxqk9bPq%Jso_qKI-IuS~%9{7HM8B$!KfXU>#+4e*?GxSK?mIuJ z<3j~sjEZEjj>`EhZ`Nswd|MQoDj{-Y>ZaKy{Y<ZV6v{3)?aiC<{?WsGT-AS{eE7Zi z^5)6)H8tD+Uw-)D$%h|*UtYXf{rmkPv;Wpr$5n1R|4)$g;$TdSO;J`{d8Vh|Me6Yc zpGX-&y$c&Id=n5$h<H_>xMKO@7kNGwo=%S*9r^o!C+dWeN=DP<DV$o8^VzLZ-l*Gn zCtup^&>m6j?d)LNp^<)k^^f4fnDwi7#C}bP7q56=@Z!aURca?@t8KmWDqpFpG9|fu zv*e1e+cfTccyadg!yCsw2<^|cDQ4VzWEnTpGCvjJ%a{MI@{iseoU__x?z;Mz$+8z3 zcrAaIe|dCN(l>t34d?uo6A}&?Y)Mp(;cF}l33py_srgXslv!Kut95l8F%et!%D5!y zs_@qC4yiS(_%Bu+J@l?^$_ua4Ey2^wYgYaAm3dy5m-U`Y>Stro=UDy%F4^uItIbLb zr?f>WyGcKs((*j+jY+4w;Z2?kE2XDM)^m$?a4ht_U@+^?gy2hOD$f+C<W$6{a#{vU z_7!NE$}+XCemt))lOts139|-W`@_%G`eIH=zBt6f?NxDp_QIKaHO@YpA?&zh=HwR( zPiyin=SZJ)cEb`y2{+b>PtUhi=Ik^`u`z0|bUD63Q}lQE+b#xK2Cu55XZ>As>{opI zq#RVgvb$=*+4PmuRNV}vMb8J`ZF;}xU7OSile%wZzpth>)Fn)R;&d=bz+{i9fy<tT zJ}beM9FfNyCtMDfHMU{j==E}Y@!pVb?xi<6I4+cj%vD{gaW3od^K;Yt+V(0RfAgC^ z$7Y$r?utE%Nr}s}9D_|i9Z*PG7$D@~5ybg_;`?Kb@9LMoSG)aPW$Ian_a|*KH+jE# z?d{xFykc`L6QAQO%j)>vXL*zPyesFmbFE$YL{gG1s%qbo!kleN5zfj&N$(t&^cQlx zlc-ghe<jhgLiOO2m1*otU(MzUIm)N-Y~8Jr3#)%ca_fnUh|6f?FoY>TkhZt`!O;}+ z`Znv<*9LRUe_rOVKbgQU{ypeK;VRW1GOD~~jJcB|9d$RnDCu)hJyku?=X-Bs+37V= zb5rAjdw&0~nlB`)Y4n}(TK96hDLhg<Yf2Wb)aNgL7j^P|->o;-U3Z$t&-YC^_Hb9A zN!{$)m9iJVTTkKnk!+*i{G!xLc<;osoH^kyPB5?bc_ntUPux5<SD@bcg0pbTPxZOW zYBKcPzWj8F-Vz;=%-9&H+{W^H=Z$&45{iENh*)j8{ch{c!uHM+78ivYe(hLw{2^lm z-`kUa+IkL(&rnUu;P)_H6cfIcsatC8mDwyk@BLV0jY|u(Hz=~q7qe0Qsbbw}bv(sF zRcd1KQN!J?XLhZUUM#;LFLvMe`gLM<+MYkoWqR}0cImH)n3sREd9wMtp7n=r8QkGl zx8hR&^;AUmY?>s8sK=wu<y$?3{6v%a-Ja$0^_U7XPvX%_^Rj;Jy;P5X&llF(#rOCg zOs~7D-xhPk;n4>9jRCcKzl?$<9!Gp}ly8)7*vBb)EBx`NzFs?DrB9kOPDSp?oLN6@ z!W`Af6@3<rvNoMXJ7<ZharE4@pYB=YXz9HsWZ4mo1(At|oSx5`Wn9=2Jjdsh&2%a8 zoTXnqc+4bg@5)EUDou|*u>4-IT4T#vrX}x>eLdGE*6>*?_Oh_<@ny4?1}CRA6lkxD z<L9*Ue4tvM<gTmm)a8U`k92HGp_2uhw3uqWQ+%z2mgR-ZTimC-^g7+7v*>Z<Lzd0T zjG+={tE>;?zRA&Dzasd1^S;d&^Z8Z2z0uAJmZ){VC>{S{WoWm>jW0g@&b`ZyOit8O zpI)+I&$-wCIsXa%xgREWAoG+Y-|__SkXQQ^BNvFZ&6sn`T$kzSmpKa62WDRud6|8u z>ASmU=ZpH6Ps6!0OtqC)cf_sZ72R`wqf7Fs)@{tJ8TK<57amL0Y5TI`eUDOrp~_~_ z8A{UxnkWC#cUH2@4>{B5n&f}}iTa!r3p0~!?cD;K)pi+|Tz~oH?Vf{83LNM2Pknmk z_~TrVqUFKOR*pq(kGplml?v6CXNf6JQ<>p<zQlY&+1c2*`dqQy<+kCL$uqK#^7<WM zVW_vawXv|YVLrRFJ?BWujCjSiqJtS5IMq95OtN@)W5bnWQ;(KdD{?+G`4a8^_uq`o zk@m|b70B%0rd<1Wmqw^Y%iOwH8Q=Z#A1mjlbG|Y*IlfsUcIS-G5=9rj9AB}XUv=x8 z-?J<yo>;d+jb+Z`)PMi#t)(*~4^3Ko_rlKHwXdXWmoPup`sC=m&@TJL$`?gmLPs{M z1SWrU&S+k+FqQpB$kzodeGeDyckw*bP`hT8bYj@WV)-?q`^@`pT;}1NRA#~5a;zob zM%3Zf6}Jx0`?)yx=#BVSLNoX-wk4hEYi+plQe-lh_{_wFwpTUAdp{mJvSmZPE9;~m zb5vAUD6SUhvpjgw=KRdy4;`ErE=v4ZFSMlRQKYGWX;5z1##?U%p6E3xALVZQ7sc!N z*gv6Gr|f7dS6%!o(Zw5bzXtAl#eS8WdCGHL-~5}0O8O>k(pl**T;lo0PUD08(n~YH z|K4Elcws}~ZSGmZ8#MA~9EiDME_**Qaee)ZFBe{}D10~bOhfgG)&G{?c0A!;%3ms6 zRQc#{YIXYdXph$AT7Psn^g~xToHg0@gSqBX<c*nGIcdeSR>-)yT#G*6?k}LCANejL zk$+QfqLZF1x5>YnwCk4n*FK$JkR7_F<HqL((;K4GEBQl9u4koj=nBm1TOROkLEaUq z+4T}9>p9#XsGQh1w|(QiUzWA2A{PF7av;R?nW^#&nVZk2crB1AR$6u<?fu0!|C~GT z-#_$qlGyVD8C;h(Pd%`;Z}na0H@p2#eiEPG?aXt*apNzZ^HV*Nb>jL;vwxnipBp)W z@q6-z-BZ3a9Vu{rZDY8%eCe{x*9I$EOBY|dYU8z4D(qfIRK4`tq9?}!vL8!^*~{zp ze36~(=e^BLtIW}&eA&ZWk*}VzT<Kk%xoG`1k<;>QNvkZ<75<6Nu3hrac*dXGcZ4}6 zo%hmw#m2gP^^t;20v>C#-tlRiujah4egZGwFU>6}LaB~ig52qcl$JJx^e+3L>;0&5 zA>-d|QTq*>+|KOeU-{grp69xHtKg03brV#7DTy8TXqp=%IFC<m;a71>f5$taXII&u zNn{CgOY}VdWVdjng{kifE-!wQxf!*`eZ1x_&htx_I=uAZ`d1$|GR?3LsO4Uw@nKSz z=99aMHD`YCBwk77eCcha9NY5t>8YIygYQn-%W0Y*u~EJ~*h_EASAO@2>t59t6s%(Y z!XKt}-o@E*_O}WB&pCWfRK2aLd?j|dC-s%t<nE{2S+hdt6q@~C@$XyUcj=Coa=Vz? ze!i*abu*Fd(EQWgcd?!S#p+&7;UN3kn!i$e4ZQy|{rz^kzVS`spXG`V!@l28?#VMW zKW}*J?%iKj{&No(3T>Qez3DegX|Kfly!xraML#e8Tl_nI*7D;`B2_iVxvs3Rmc1PF z%T9ISzB`j-`oD&D{kneh_T{G3+X53DR5*Xyw5FQs=`1vSzl*<H$Vl{Ckd^rv-n|0t z3I}v<70>;>S5SyIe)}4cd5+Hy-ZxnsoS}JW#k1V*`~vQpw;!4u#8h9Ljj^2RcQveG z`?@>x>OZ`Sf1YCJ@;pWFjPIV)8PoZ>wdPOWc`t5WJ=c%9F1AO4_C9WWzIb8XIqtR7 zq-<||zpZ<N=bKL0Q+N5L2RUrJ9^Eb5+@+EHTj{t~!>Z2f2M;U={1|Tf<x%|CC0#*B zctR?cHa~SPkDMlcZCc@x&V4`4Wy18=UNZb8{PrzppOQss{Wry0-Wa7g)ss)Rt@XBH zS9@(9EY)StbKzPYo6>dj*RA*X#9!_$xEcIA?9T3QCo@;SQrxv}#TDs*V}3<0e4iL{ zGL%j2cwfy}_Nj8-lv{Tv{kY04mOY`a?oapb^!t1EXZ{p?*mf@4YQ9TdgQO>~ii+~& z*DDH}nQgO#FYv7sY&lV%W!YxVdtCk&+qTtngNt=+`X5GYp7VJB1IgZ{NkW%C1@#F} zOj5XJ{_45&;Tmthh|n{YTc2Gxc60XOvt~Wk=R02CF~9Z3@bashvz_y$E4OcNJMGcd zk`nXYX%fHx#+zbCUhw8M{<)H``Y!)mXHv|hRhQl5j~$q{)*+W|`Hicyoxj$5KUl`P z%zClfyhAyBe*G7u{q#$iu3OJpc+qcR`0KTCmHTTJ%-_&>K_vTQQAOkCh`F85taq#} zxb0`nm$`fD=8wPT85iv24m@*U3X8#^mn;0!EJelMe_C_UPydBZ@7g8NHJje<UfK{D zwLnr>b-R4FL+IYsqJews0@MZ8%zEzp;A{Q7V>esWy6>&=nr|b|>tPhY`{n$}J@d^k zoR@y_nvHGtFB`qz#$OIBJjivhwV1U*Glx6nhuMz8$R%mVbS%4WvMkLyC%>#^@+(2> z<E@RW^6EdeYb#%354&J)-&OaTQ>h@ny1r}&JA3v-q2lH8R^EjgtatKaZ@iwh^KR_5 zGppvx)c5YyKfYjlfF~!nSG}a*?L}5AkNsMrbx}~m+E6$s^YVdmHw&Bdmu8*vOfgeB zQLYwUb*AUM=4q85Rx=x?uiLx+@V<sqd%vDrb^C?x<eJ+b7kx9Dw^Z0wrhBJ$eDvlA z_SP#@u0Q>`=&cR=^OSXUEQ$q7`8|ZJrarmpdvit9MfnXg>Mu?BDDroag`4RQU)ww9 ztQ4MTUO9Vr=i{xD+N1ByF^+l9xN^4|N6hbT0g2taK3bLD*gCuI)~B6v%=!OCwui56 z_&wdz%4^aD*CYETY6mUc*Y9F4_wVuU#oOEE>uvrVf4$z!N#~-G*RD&w`O~5;YRWGx zW1ZBpu9fdV$2t9gSvRl$s$W!Jm#Dqka^JhUr@b3jKYQ}`<%heCAD1)eRqXnqm&4&c z!PaM^i}9=rk!Gj;&x>ix7KlwQuW)PIyEHWZkH@n#nFzn>oXpRp{~ql3YF%r4#J2K; z%(@A=Gncj;Pw1GlQ76zTfBEO~YNLQgwV6qCerj_+UKVGwHuv{d={X-+naY~#I}1-e zDUhD}dxrDk4JRFM)fUfKeX#WIft_qgJIdBwetsy>N!6;L?TO#>44!YA$#XyNkv_1` z&0|XSpN4SPQwiZWCg(8g6h-{#y<sq`XYmYQwO`kc-MR7FT&lR-nvY+IyDjB0cf_W3 zQIn_rEnR=v{Nd)Sf-8!PnX}(3<T8G*-%wv~eeThZ8Ana#yq{UTrCFfkTXoms*=$$k zeY`c;pUf!S*}kp3EPfXE)QzPNw|<yqyCz>?!PR-+`E5hr20ra+2@ILFyU?NKd`Q0? zS3&JD&O_oejy?OeX07T4lQsJBIk*2Uxf`E&ZRNZ--`;&Q`xBjHr}*i{@71Nh&VO%v zJ}E!n`Ru=Xf$o2E54{ySZ+}X#b9QE3a7OLcxs{<#a?1DjadCY6{Y&GGw9*yvD|NTB z?=#DIS}FhHSh2{uT0pba;W-CW?;$%=#{ADId194?eU6poqRAV~ayKsB?P5AL|8djS z_w1~5>!zij&2XJu@Ncd^WB2bBRqCd1RrAeXJ_#4KUR4;rw_bIIderR$%F{f*Bnn<D z<GXO~a`l8w9z14SuZ2W4W}C8JbkUYsvHz;l&TDFpbqp7MJYTK&QC`3P$q|hyep9*6 z9^J0FO>{@IVoZRd=-*c!8=b5b85lE<f4X#8O-Ge)`LAAumiZnhmd3jaUu%!|@Ub}U zxU->N+d*XYN7kyfbv$qCYgCdqeyq7JUiOPo_=D9}?~>oUDnF|nn73^H-Rpt=OY@gq z`hIQk`seR=Tg`eNU&i?EkCgZ^6|qwHzh|yawmJ~cYvH_erDBA}oNejW`Vl)EZZ)R& z9k<N=%e3WcUiXT^N1T#RmfSR7VtK>FrR&YsRiQ4X_f74C9=@wH-RM$W;hS1tU*7*b z!|0{vvivuyjJLk8S^D$E*9ZJbKIy;m?8VL`FP&wYEh@X{n$WtvQ+ms%lnP%rye;-E zT7P@02J4^ZCpywcU3?^)3o|SQ@BP=Qna#Ya^KSL2S;{sNkL!88)=v9>*T2~4%tf;^ z8TP+q7tN^nxc6p7p-I)#U^n5LFW+Q4U9O*Ue6x$EIH&iog52rO_l(7-v|8(~`Q7Y( zW_s7Q<tC;7y1DmqO|xG7Jm2n$Rcuk#JI2x_GFr`k&!gABzmpX9Mag(uald=!=go7P zcX-=*R?7#yRNZcnVH@;bG4No)%Mb=vjc+qM|0lI`oqVZr`QL8_U4ez4TVDKJxAWYA zoV?}2^&u9^9-b?B8F0~~TVunbThTYYM3cGv%Q|nVq`kg*TkF0`+?y-g&+4(MtT)(` zb?t?To^Sho=Y}GG!Ph106n<Dm?TlGy?h+rPt^0cA9p9Z!0@)sa!=H0~T_1eGbbqzh z>M1g*5i1w^u`V!Xy^+Iy`046gvkb+^rs|--A$dz<7ADqj=g!`^At<h|^Vw0Y^;4pi z^$nIYIQujiJpYmTab57b3m*>Wb8Dxz^atxckqXXmmQGvx##{KmwE&lR%NyQ}mHm@r zx`XyEZ<+X$>BA8luP=AS3$}Kt?socp%QtM!WfRt!oImcfKD;&ck>`aStwpVE$uitV zI%`B+3@54O1s@2SRNtW~dzwM+di2G+9`BsD2K~CYciZjX_P0K;9O^o}ukt*rkAiVZ zbx&v5>wCBD4(c4v)bPBr|AymocJ}Iy$&$MnbTi`r=uG*;|Np0L`mrg--~L&f>8WJ) zsQ&1k_2A?b>;8n(+<o^t7-WqV6J&n9OXR;Iv}IwuK%g}@=SIo7!fUwe1(ZHb%>O20 z&&hdfgWT#@!3`H$9x|N1ljg6fqPD!~h(lqa-nw<4mPKirPFi>?_}9mUeb+98RqeOt zw4LsCH-6TV%eyB#h(})wSsPM5nYkoF>Sy@|r&}%WUUz(3`^+uuZAH5BA1)<r|Moe| zzh>}ERrqkvVy$?+>+(snU&v}co77a#_vX*-wfkFpAMUvHDx~kowk-xy^(t0Nj^*|& zN>oXEzbDbyhx_$njj;SPT>&<NA@PMQ_dM35yPk29k$$&*f@#T%SF_KCacMUy%l<Iw zo6CBk^6&!QiM_wfeEL4N^GmjDdZ==%MEU3A^ISfAV%Dl!87f~q8K0jn;Hxb7aEeQ$ zPrbz*F7a3UKmWa+W4dMGe3sLiEinyWZ(lLYbm>a9xXNfhZH=Gk+z&bvOWa}vt|Wf- z@GCK$;$32A<ZYdAEVLuIidj8!=KMF!CFhSlyLa-~w1CgoAF7KrHRKAEUT7#3eYE4| z_14)>CraGhZZN6ik>{b7B@g}2l=nD=Ut6lbzA;UwUMYh)X<dPt(lg$(9Z#P3e?78c z;>H}-!;DIc&MPV#n)DvoVz5PoTX*xEsX8o8THfq$!=5{bA8A<<%j|pA!(jdl-6dh^ zN_n*sWhy3()=w;X+}_L9?*6FTy4`VJ>^m-5k(xzYUN7p)Fut_);<1OzrxbAMA9{RE z%H!&*8OL9%aUZVF3OYPFaeatbtL*#jZj0|se!4bd)`ttf-P@Nu5dF4kb&%9;{ks}v zTLm^>{C&3ll3T);ABUNyY&(}e^JKbyIQK>6&!?mKPj&cpOnCZuKgZH_$^KKlZQPT( z%HwMHwigPp9KEh)m9yaKDchy-97@%q?_*Tw)tD88X?H)G{5_g4^;P|z&{r#it~zRl z?Arg)enC-doBQK(A19R~E_z-~mQzx@zlvI!2DX-5S@2IhZ*H8((!KZh@cOykOo{k+ z#mVzHht`4_zBThRlpoza?P6CSImK-6eUT}3Tl%cxB7MA#&J@pnvHVfojoyb+(vPO@ zdT@5nkLc&Cw7&WMds!$K?PZ<ES08#*@rWbmg^MbQ&;EL8&f&PUFiStfWzhp;pI>>W zE+w-s*rI>K`<ZA!>w&C<$Avq}-~W95L4R4y!iPEkHVSF+d%320p0o+!RAq7c&6Mb} zcBPSSeqPAlgTh5SFTLBh-1DA)Ci~Lzf<HPO+szi-ahsK1#jxv-(&^B;14eQ6Z$en> zd9oWW1$`8Eo%?phraxkLYJP22;AUv-UUm0}nv4Cd4B?jb*SF+dTj727(gEvCsd>%{ zF0a@4z1<z~cgJBq&P{zr;`3czJ+EZqeVcvGslm;Z@4K_zlse6b1k3NYHmFW1*c~;k z?akDAi<~7^^R9e#&*Aw-vHdNZVqDDCD-=Jj_;$D6!G5F8#G?mRtIg_`|8?O=$C<?} zi@CQhQVz|Xdul3gb->rz&6|{ZUth>6P-cBPF@e$ZL+1Kuwj1r2`WJj~Th7^1&MdG% z`rG_z-xIAhPsxAV61?}MX2gS!B{A1d@A0e2eVw;ZC)RA*0-d8p+BLu0n*2GR6<l1F zy=y~Sd`u*-mwx@WdHZH<e)#jw-W1OBymPHi?BeYBbZO0GuX{Cb4w&A$dHeFgmoIP6 z{(a{D?Y*<=6H9H^f2`iU<CFEJEw7JfXIsY>f2{rXP2}Q{lPk&_vg<ZHOI|za-K=9# zLO)C7G-fMhD3)B|J@$&@c5mp`HGVT$&+c8u>Ce+Lf#+LjvgUG2*~QQ6SG{~5pxuAs z$*bu6-MqqQa*Gq!=sk-~Tw_0}^7O-XCfACM^3AUl8|fSG*49^wPh7+PJ9lC%Z+J~? z$m<M-^+l)RrygQ_wZJ{!pF1n=shxq4+wZ=t7hC^ktUt9oy>Nmtk6c2zVc3EW(c@f< z{_oOydXv|3E)Kul@^JmTt#Y4~6zew?YJOU*Heo7z)TC|M$5%1`ylVbYm~*+sLZ-Md zaVK4|ww;N#jcd=ppK@fg+^1${vs0GgYIaG7BW5T4QasL{<FVtYM)Nn`rA}9v_DTE* zUclSY#IP`dYa{POw(QNkygJ-!FXl$46+AcTtg4)0a`Fwocl+iZwlK-pmNVZU7e2PK ze$Kg~>I3~LeH;F6HeRrfEy}ve*7C0WI)iJ$zus>;8Pgkjp?>mi>1DF7&s{scf6LPA zC-x-kTRxwb{OZo#i0%9D&EmV=J9TnPOda?7+`ZhJgujN%ES^$uYLT_{M^UMFvld#l zE>!&SG}mTNt%+P!>hYb~`x9zS=9N56l=`Im<K;Sr`uSJ0r8u<u9Ty+*f1qanR8V7Y z*KvXPi~dse*{fqr%%26vc^YpD&I{|8nsB1|*vliAt)x#U#Ta!=J@CZ$kJ+g(X7g0p zN9*?9TD10h*26z1Hk|+LQJLj*{%cIhly)`S1KlaxZx-L&9h0NNDp2ycDOhw%@6zCJ zv*drZ<U0LWyJ$_luAgN;OU2#D$trv9Mpg%_dA{(C{QJ_~==}FczgF%;9oeTBUx_g( zT&&X`94Fxao!{SHZqD2<U+QbB8`kMCz1tqW;dJc6g_&ojXDJC?P)WRa;><%Hp1-<2 zvYq<`Pkd$5uURHk`B*|$m9zTu+H((h5*@T%KEJ;=Uq<HJh2Q12U+Vwue*b6YVSV%2 z-$kXIw7K7`Hh8*y%^QhpHcub9h~AyqStMjAviamA9qnb`|J|K?BWnGH4}W)SeG83A zHS(4`UUP59ozvkrXYbkKTlKou-eJpZqtuf(rwGfK3Vj!?nts-;<@HI&()iHNY5O0l zefadR_gQ$xkD`N`cOKtJ-~5GF^m+YSv*O)*eS{~wcc}jD==$9H_1bdFXO&5cli&S| zmwafplb4~~cGim6r!}Y2x3Ip>GJjfArcm}}LhoM9<vve>LrfS&C8l>QJ(j0bmErQx z$=i^*gG2gJ!Kzt`Mm$l<8*)zFm)l$Y``_=fq~}V%z0~e${C%T5=g5seAMZ&<zMV2P zqJH-!!K>3Ye78J$*8Pg?`JH8_&IbOFUe3eQ-5Wd0Qr7B%>poWNIPJpUd0uOy0xeUm z-@LMnUuZn}!YSYLX;0S9tmW|c6rc9fX@BnC-I}u_&gCwP>AJVa;%U%6&W^&G3CAtM z;;R~i4^QA&?)|L$^-K>hPw70?wkY3KiKi^OELL*V|6H{E&*zi3cS&*|((htBwR^^; zxjvSYgFl?PSh(FgSnquB)oX>%x12wbKJUZVWp6?<?H^RUozlDYz|IpPt1f=;Jgn>U z)4h7}6^qmxtN0U-U7xin-}ZxeRcq+F4KjCbZ^=(TRkiT;`cKd26ds+z-G4Us-oe|3 zC5w+Izu6bKvM#BPxxTt`s$rF^_g9&(b|yD9n#;;=T&nu<(KRQ^`@2p?v(Fp(YLENZ zzX$jfEcs{7(d7P6ak}!B1l0{Eo+{dgWnBHmYsI}*Jn%*fYvM_!{RLCaj;P%_!6KQy zaT~*HX}-rE-2A5Y<t6)GJzv85<dcAk_Lf@>bF$uVJbaCB=Zrp23;yK#Pt3{B-x};G za!*#asoe9js7pe4Rpd&?<P*k<hSMXf)CFQThy4B{mg(o~=lOTJ)w(lv91E|UzhSxZ z^P6q|{ypPPv2zTnU3}&76x(0Zt*)L|<T~LybHZ=Kql@Nd25jFY?^<_5;VRpqT@$Tm z9{)RCZ1>g)mM$z46026~TJmS{&8(=u^6cu$mDfQP>brN>u7|FFZS$mv@5(j1=!5tF zyqP*7s8MbIYmccB73co-FAcGNB0gcW`Hre0<G&jcBUgvbE4C|JS}xFg!mg|RlkSAm zmpHtOv@EBk81X-`$$hxy&7&8RDJ@5WIwhMtRD6OxOiRmycRwy_ZBy6j%QX5a$?)l2 z{XX5IJOBSm6njq3yRH4?l_GBq-}KLiI^Fsn)x^kqXF3*Zc55BV*2^rl_rJu-`EHNI zoPErbRZm`Zva##9<TTGaGDMKC#B+7KK+B~Tu2|tUT}x$)ekaS$5?rLdwZJa=NwGu4 zGSMkc#;)nL>gBV&uDRP^NIbJQd-1}A<dw;{ed-P4J?HN`d#P-@*DkIq(-W$bzFlYA zr)}N#D4sh^O>Cl4j`#WNu1`XgQx`RF{(8~rdebwl3DMtXEMv1ws7}ys_xNlyXIsl# z#c8h<my7TF*yv+hRQWEJVZH7}+bx%l**#a==(Jkw)vsbvZb$W#T!}665t)VCw2CZM z4LQXZAHTA_{@1yS5zPUgRvgT3oRhM#^j}tfs?}-xsQ4$--d?-a@x^!TFLR6M^@67# zU9~@S$#352yH`#NhQE$l`@>^CC+8CfUc(gI@^w92Pu!QKZgKG2H05ZHk-e|w!HbOE zQ$G1kUbZJ8Yx}GI3IDh%=dV5aE_Y*eu%Dy~OO(g$3m0B({CT3H{@z;lh}KI@&$2$p znrz)Q<L{%1xyP0+m7TAxx-#qkn!9Qnnr=IN@?0m_cJ<@xX^QDZnX(Rjx4WDlbIlc6 z`Pccm(<I4R4zF}43zyqEmBlYy=(jk2&QGByM`Btw9ZXn0(OTU`aii~Z?LFpmepUaS zkkoV7Ju@i3*eOI|`qE6Fl2^j@3-$?haGNaO{FdRV?V;Yt$aU>=Zm#7uS#JDTc5h*x z&;wNmrP)k>clN(ttP`HGWAE0jd!OtJjknrvuP&CWy3^Uu^7X@HU0uJ9s3$Cy-jm;4 z{$1j@{OaznUj*vheZn0~J~GsNS=xFmzI)E;<j9X5j(>07U-Q-EN5pC0vg~=^ia*vL zJ<T*f+WJLa&mHS&a~$qmNLrn>U9aIwjKXcUO*!ZCpVTd{J6t4eH@&FJG1(~6MkUNa zFaL?%@>=ett^Z?mi$2u7yK(MMK#PUhKR<1S@areiotNb9<Sd%=;6<&_`KxZf&v~Xh zyBD9`z2(#6^KFM;JyqL%_54j~mpM!00#<Af@u=^Jc>etB)x6?WX}?~WJ$Gu{Gv#;w z{j&P(53klweST=d*-Odi6kc?e*WPV<cILRo)%f~#KjZhuEL>=~bf(Oa$~7kG^EZ2z z-L9IdqwxIc%cF@WDpD@#ZEo3NGxyiE`iE}|4+&jz=Jbo;KbvtPlD|{3@3Gvhi5+R1 z<+=>#PmueS@~^(!{Xcul=jBW*|DRr8EWRv-*(WdL-=R(^Sx=?UF&0mCPARB;Ph+?z zn5Dv7bIx>ImwvG1&iYgrkA=Z|E=!u4eYG(QuzNIPo^VOQALAsMvnP5!THaD{dNJYK zQqBe5$Id6WEk6IjZc!^=;yopqVzVr1SDo!SRrl{b)Uk8VEZinmKVdOvX!ifMBNcUC zPSZk;RqS+f-zC?jaG>>qY3a6mri{Ta1+1gFC*|lCSv4ftrfs{LESpg%t7z=1_&uxj z?y7S_(@v^hh+SwLo8P-|x6@(Q2T~KHlcmz<%<;7p3>Ld?ut)pL+;!}UGZs9$mB=pj zpUXtuh~vpdk)6S@`DZ6aJJlB(?p5FvOlm!Rb?(~M{PzV?^A~Qpu&?XHR;!rV=dP79 zZa#W5%4OZvhf$T=)^VpS+w!2;^+}ZMx~u80s~oo*&Cf2~ac%C}*DZHNrQWS;iCKMk z>${v-<0sQD%BWi`S}nWoU5;*D^>pE#-!DDN(N(<utRUAa`Z}x6*68VT1XQ2glBr)e zHU0H2hcvJ5&0AYyW*^@AD<@X}McDJ=T)ykOHkZ!bkX^WK+Jx+4kS*D5cZ_CT4y^UF zO|4xSxmRh|gx;dbOlhHh>(Bl8XJPZ^R>c#BqWs#xoS)SltWVZxY&W~G)$QGq4Hu`~ zbJkIKZuV-I!}Wh`&%=FETUW>UuI4_`Ya~_gJ!?m7b>~VK(8`o^``;Bd-ej`;@bRzS zG3_Hk(O+&Jsnp?=uGd?}>6m==-P-f7?7UV>SWbF;_{k&jGq;n{lifqozh3hbYVxq> zx_elCQ&8r^#J9@jAA(O;sPbNH<uRL}fA`Vqg4&eZrLMEGXMSGEWI1_yx^F`E&#KM> z$5s{3`Wse(Gd54HxF445JNfQiJEMac6*=}3_BZ_g@7VJ)M`FQZ!zSskaw=>Jn?ugs zzi|GQ=Iv)+C-u+i<z^Gk%J>@Vdg`oHgx1QliN6v~cbTYf3e?<C<GXtKO^rn|_x_!K zdpqlI2a6ns^Ba#pJ7k)@Q$wGqJg!(2pJR3)Tu}M=#M!L%7fe#`7256Fq*PS6`$Aaw zi(EM~r-`>e>a&-dwVn^T<+A0|gu`zSt=zhBXMo{Or;4q|L&IG8a@_4VuDHp+k+*1< zCQI(!w=(aSHO${|=~?~LkV)S?J$CKqmHrW9Sy&jmTK9*{-|vgJU5H)yFn-_i-ts@J zPi`GOwbRLLg`eE+Q`7zHi$1bs{(Pdhyuy9y+GFe0Z^Y$a4HK0)UaS%%bm`-r7d#sa zzkl~(cy@9%(@w2~ic^bv*#*@1#@u?fR?4#D<z20xH(#B2x$QP<Og+a^)*_RIms*#^ zDLSp>@5?%T-Rbp*$^~CSLvI~PT_nhPJ9<WdXwkCXQl|C1MOF{$Rtub2ch#s~&OS}~ zkg!sx!?L}{W!ohuSa%pJa@t#+OI+!qmn&PaPqs);<nP-w_x<ZHDLty;v{bU>ot|^| z>I7rodv9Ix_r@%I7{7gc+%`wOM8V9NFBXUv2~-I`sGhR4^;rHyZt?Qc+SR%fir+3= z{CM}Qd$Q9+Cv;2p?K^7dcWCJcU8V3p67?4gKQ36n#CyLgG|b|-eRw3J<tNYOi|rm) z*epv7{^FeO%b&a|MCWf`z(uh=$DWAyKR#HQeDeIYThkAQnv`<|%z2O!v~psj&GD`7 zeJ9`M%CB>hT4m%K^=mQH&ne~e9oEEzO?d85-K4yzH8uGD_Ctkhz65^KOl?}w+wxIz zMaqOZ_2Qc*Yh+ers61U*C-{fs$%CmAvNNw<SvzaWEDrV7-?jHAR9Y^5D023LOfSbC z*=2tW_rA-29G)~m*oEWNq`zW{Yu8^`xh|$Bb#KLiZvh>`tufzay*<PY`*yJ(knZo> zU2gq(_B3sikmNk&^HV2Wp8l;=y=D63Bd+f@&&pc4@b}CY^=qe#X5@JlhzKi2<=obO z^0a>A^tNx+<#IOfE<KY|l44a<*V`MgI&5o*QO62~mn@5u#TJ@}eDFy>{MW2o%|$6A z{O|9Nu6nt}$K`vQBz?c>8}y3uynUyb;go)pNA+fo%MS%r8<ox@!a>q&rJhWWR8tX} zbZlc%-Ho!$Pfl8=RO`h}Y6K1?%>EtLD)aA4aZ_~i@{$h!>yGE<h(}&xiE8l45f!Lt zyY0MmQqPPzW^2v-7CqC{Tqyh}G-}zR4B^h1F#$&})-P}}va9z_FPUi`ENRI)J@;5b zN#={Jwv}dOZXIe27gl=yEB&=$a{bl4Dw<0euCI5?Gv~DUrF5x5dB*d4*(FT>jV3jI zpRU3pKFuJ1p3oiBP#>;$|L!;|9TR`@F@?GO=<$^)P3J!v%N4Nect^P&y!69zTZW}; z-=o9jE3>1e=DmON<F0ek*E!tw>tr7Csx`~(-|e^lU&O)e?)z(1BG)s%3|t<WAM(`Z zSGCvHxNs?^%};;Ws>ZC>UHk2Q@U8l<w=NY3#vOS7>*RIrn*6hu)|+b`x2!9l)wGxG ze*5(FO`EnHdhgbGqj+WI-=K|)m!-U!_ph-0<qd!Bi?udOMgQJS4f;06Mt<AVoy)dN z`k!ZR`dit3O~kE7<$qb;vhJ7_yro*`_hJ93xzBHw{f{&Et>)anwDXp{cn9ywTeiRN z`%bFg`uxXMpX>itFyy$_n|s}iJCyHv>6_XIxul(Xb#H~Yhd;VLW7l89#2e@Sm1n=a z?VbMqv9Er%_v+8z!zS-oFW$2D!|tmg@3PzPfBIX!{Nz@7^LcAO?0ze9yI*>fQ)cPE zdqs=hmIghDdZ>O#vvbpo57Qp#-kCrDzpKJ^j#~*uT=SgjEjCUs=6|U5HfrhGf8T`t zKClSMncMn&xV`p=$LZ=<`5rA6%TBUvydq<CRs1dgJcrwl%FSQilNSsyU3zfgCc*v7 zm%QI)qEeTC<h|zC-Fk1IOkd9Oq4eplAGS*yuP;?}Ejs%5XX&Ja-LCtmZ}nuq|LISK z7iWBQ)J^_8Q^OijTf2MpMVtRtul@2NoArV2gX<Gi_A#y6>Lpws{BOHXXpQ$Dx!g@Z zrv0nG?k90yXutbxqkqeO)ZWZ|e6jcY`{{FS<Rt$tR%@)${`ub9PqDw}f0VCO<^R8D zZmCRKKVyowYW(NhrISyFn{4m;fA!b$$?myd`<E~Iv~}s#pTDO>?b~Lu<iOg4_3t$g z?unP0bmsbl?^Dw5>GQ69mi?jH%k2I1wv>scKWvxI`R={?`+on<=h@!cf8T2Ut;x+S z{b#4TaJ}x@ANPZ`e%&hK{r7#!gnQb&oyD&|RC{^9pBnb%`;<BRwr#PhpC5GP`m{Ea zuUmiEs;)W@iZ#vH+T5Ld|Es;C=1&iM{yw<=)vsHZ^!{CyRo}3FhgzMEUDMk??eDC5 z|2}3dVEyyXXy)I=tOZklFaGVD`QJhzxAlIn(Cz0IYvQwhU;EhpPI>R&#|k@wGN0Q2 ztDJPlp35eD+5T#;(*GI<vj5h-{w91c{K%x(NuU0`GuYvo`MvJ7W@UA3<jj9zeh=U6 z6^z-f^6q;5f%lpds~2wRt}mTj^3M0m_Zz~y;@S6yPTpny@cWI+yB04y^3L>6{?#k* zdjGtis9x^w`|>U*fIhsN{_WTMbdS$*75Dxd6nk#Je%~&7(|4}WCl3>Da_#@^@$(-? z#@ba|4!xfzwBO#1<MzYy$zR@EYQ3J$AZNO?A^ynwD9;DdAFJ!1WIhPo{o}j27wdh# z{l{nW$eAu}2FY?hl>S)#MDyY8WBj{4qkg#kk*iGlA^LH5SkVue{a?NL_bb);Yd#Y9 za-Q`g?bq(5E*~vR?T&?f)IL@3|MHReDX$;4s=e_VZ~vIj3p##%YTK8O-XDKo5<ao` z+PB}o{o4LjJgVBZ`~Tj}^;2G`E_kp;EO^>c!AB`=nU4;AvkTaF<K4ec=Y$rAKTJP2 zS+bAo=SAsB3(eP>EOE}CcWM>q#qeYAHEpYMGkqr3eR})vVDF|y_bs@q=Ec=Ko$|=s zPjQ}k!poEX^L9OPDEKvf5&QASHzg87d=5oD_${~nykvIh^Rto%yAPiJ>ae(IfBo4F zw_`)ER&JK4ZvB=Ww03Io$!q0#eNRrElP<m)x3Kp2?%)#zilw=Fhdyw3v_!3$ay+>4 z+)s}7wf+CJzr3FE;=+eB3;5pX3%lemwQ=EptP$B``l6gq`hx^_;mL}WV1|F^+*aow z`t|T$L9yMXNuQ_u@n3B;{i)64(^{gRuSsi|){Cquj{j#ay|r|K&bk?;%VO^EZ}*qy zUmn6zzKXH5<#4f?-1dn%pN_FkJW;d4x$CBI^4i3;6DqPCO#4N`7GG)G^7q@t=I3lR zXI{PueD+p<DwlBt?}{1gKXe^2yT`C9D_>SHmNUfQj9kX2tj=|&7o--kEcG+Zshyyv zvT<hQwJzEE5RD$w1<SndC(qpAG=sw;`O?4DYFS4&{^VG>>u2TGg%!G2?_B*G_<~(@ zdW3>Zans_RC;f$NeX7>zn=_i`GKq*f{tf!jQl#v4wcqQ?x3y{!^MgL`dd>gA*J10q z^;`W{6z!FcUbE+V5JT$BNk^>|?#f-sPBprCsQ$^$d$#dC$M)2hEj_eppVkWhm%gW# zKH8NY8Zf(Po=B2ec;L$4KkU?NuP;?<Kfcvrt!K+6zL2?kskNta8*fdJO^q#HbY*(< zgO#U)maWNNH09T&dtP6surDdy$?6q5ZBANj@TDu$qZeFR-lP3AXkue(spVI1|HDCg zqM4Deu3UNjT&yqPglEd7rUUiAH{8F;@ovHO;Qd+WgXatJZPyd!?6}?hYf9^mU0b&Q zv0ti|7n{fO>Ql|p<+o;T?wTJa8~ym}g^1g$S6=68+IHS@o_WihNj`rqmI=$goEoz3 zz+!FfxIb&9B-i>XZ28K(ZSTZiQ4cRob92vbeZl4%(7}2~kz*2v)=O4L!D&AfZ~d(g zXZvcGlo7$c|G4)C?Y#e?%-I?9xF-G;nW83g&WHW{g;!dAN<xwT4fpj`i!Q2PVB2}1 zkd1F?go0;UW{>Jko(sE=w#Obmv?%`Y?%!hG)dBC7Z?%05s<dfT((<kjxUSKfarjA$ z)<xCQX-h>~9rd;c**+D`jSbuJW4GUiPt0$9>%-3YF|T)-Q5Y+{;s4tIvy^Tfj}K!l zJ<9Qn?Ml$8#!~mv(136s?*s?kCx$WQ9^s5zf7W{XK31sF-IITj-!Eg4-_PGOpZ%To z?Yd^L+LJn;jT!YJnG>~?GS55{_#3meaYNpdb!lH1PI1k<@^&%jliubzulAnbWb|)w zVBfmXTlxR%r?}?dcIEgc^?lx{)oa%|^V~mZA{Q3PdF8KYXDQ>A<1#80twEexdss~p z!}>Yr2QHki82>!;-R0H$SIOVr_rJR8e)!MDx4zx#donTos_mBQli?;4GB`u-PtE!{ zIrh-wc`8QVS3FC-<;3xvcjHRmaLvUEMGF^x-gqavEVH<NsZ&V(r@A$5{PWaU=lHCc z5EF0qdd(EMykD#9UKz6f;JJDJUG1{+pmi5MpzO3r{P=9I<UY_235Fe9HQzR$H-C9s zo8kV)-<KC}{?2xQQMlGnwa_M~O@EQF(vsq1ncVaLooPF~<4Cc}vWn+duUAX3I|?j# zJR`v|;Lwu#AiI_2lfITj*x$VT&~!}@*IN&ppD`aok4S8^H#;~zt?*5a>#f7f?V{zU zPt-QCk=mauq_f}irf{WX&96A$hRcg~GId2%_*LBBXz@8h?Vz!efEb55$6?vyQBz)V z6n{IO^+RjTTmGxF?ip01`^E>Q&oqtY-Kuu#rqB<Y`ODOISJofxk23yw@`&F)&m{|r z*1ulA#6(MF+qtukCe?7>@|tb=sy5H5CSIR`GvcOTn+d~Tfy2}03R<epY`Cy2#_pSW zY_C?=+Q*M07S7js|M)`E*1jyRDQ>YxudO_EF*sz}_l*sYtzK#eXiX98h?4*MwoW?i zVZ?=qY2O16748)gH$Kkxw*Kg~$RisU?9zF^xaDzGra^$zRf*{3QtrzS>%33?TRO+B z_Sm(Lg?sMVhHJ7dyw%p{cKwmvwm_rprCdel)lYu>=k;)U&IARHO-o{#gLPWI@m{&} z<8kuzx^?Z3(@&?R3179@5tF9<_(j@+;7dMBW3pE6|0EL_`%3QX!(6{7#?xQ*)Y~n! znrg95F4$F8`&Xn_#{8ufAEU%Q-twi_{!UG;eWuytmAdoazBtt)t|Km%Rh#GBz5CGT z{kD)jQ=-;fmODNxLGxGOO)KWg(-vk&+#?%u);?MilAfn=HM8~crU@Er3u?A349t5! zCsJ&~V$r^Svx4JqAO1*npS*K#?cdbnRx3N|vo}R7U;5{VYP<PLj?_&N$B!5G&g;_k zIT@Q7{;%k7_Zv5v`El){&vz`c3$D0w_1(7%FRveEPs|PtvrF%?xYVL`sKPnP#=h0Z zSF~hR>@tzRF01BwhA+)5h+Po+>&&?%u4PGct7L)?X|`yubi44akmu?(A&1~q#*tHB zU3t8MPosX?$ux!a7iO;8cFZBpF>kwS>8nB+r16`hC;$6}J72mMZLPBYLcw=7i!L3W zPJz<}Hdn7+lRkd+#l|0TJFYgqJ@@)j^y5-3?fKVLWp2yd@O}Pum&59BU%j6Da2_{f zFMC?KSC3)Vrcafzhc=#VjIE7ZFFwKiX@4%?oBCa!tL9FK`MF2$;f-ep)>*H=&U5_g zi;GJh{OME;F}n9@kKKirrvBXb7YQf#G6cAuDD;}#xq0^M9Se`2EBs#TWf3;t_Qa-5 zwtHHXcXTba$jNf3e(9`RV!8C;6=!yyph%{LZ(bbUZ?{5M`?vkHf<JS66_gwvTP@hE z$@tvncYtUTL%qT@iU0m~ij_`LClyq6#Pq%})p!b@U-{=VoA+uh^P_@IU*aC9TFA|e z;_!B!SoVF^mUqgF%)c$(o51k1u+w)Nr@L*n^7SjH`mgnioH&2Np+bk#e1+4Olnl?e z#koawF;AC$Il=iRaF&UMOWZ=?Snqb9R%yLC%Ra{ZZ9lNtM2)Gw_r#3CN%H3XYu3E! zk3JOm|K}3Hv)Z5C*4WN6nJMs5<K5caotk~Y(+u{hd^;ohDQjWDsTl?zg-RBmZ{@W+ zEF`kYV%e`qLzl-U%P%<h`xOW8be}MzWs<JdOwnH&oPFOGv-kV`-t@^fob&h&R|%EZ z@_7N9?b1~X<jW%^kH>UapR9kh?VG!m*|VK;T#j1>Ies77aXGY)d+lOg8E&@kTc!vH zemoKQJ4NEMyx*c*g`afPk}Ar-Z`6MO`qGcEtLZw1(-?}i9<^~6zDQaySK#lC)21H{ z{=7P!n!0m&OY*-93;u1;bh&RdJG%YF!A>Q0j*mJKlF=1E&6G42DW!<FOy=l)R&OV2 zzoh7L?b`3BH`(nu$?PI1*{oPwduYbi$<+!02dtI!CGD@D=UOkR_u$z=#yf|9i^g5Q z|3`Iiwxe+9Bj><+w;kP@79v-AZth@7e%Bam9DVq=_Ab`v%Mbfc`mkih^z7=kmkGy| zgr0Azik=W%R&DXnWkzjD>$j`^R+q$^-P0oKXL}bKxyu-7ZroV+b8(-M%yEsNET={B zzgT<k9;#lw_{i(?y`}bDXNq-J)w^%l{q|%4%bu!jRs2^<t9RUZEnA))Ra5>;c-q4& z$zQ`ytl*!taON-GgljvBZR9Qs^jgkVR9oJnT>h%dY5S~Vv(oA_i=57fzp&u%tz5fq zZ=Q9R&BywVSb_fT1(JTcC2FtPLaW^~mU%0=2!Ba*No`6mF$mu8w)no;vY=&2`35rr zEYG?*o=9VkR_A|UKVi;<gFKg00<sc}9qt?UrA1}R8rvDqyt38c;K>;U)~jy6zhf7j zp2)^IKjgaO^5nJlEbW(N6!i<QZMZK!Au{`)l#RUompk?K|IA!w_%E>JSZ=QRk>{d| zhs<$j+sIFxQ@+M6H<saZp2i_Ixi6mo?6cauBP;961TO7;=;OzHZpIePtMRYH&zdD< z@N2n5JQ5UpV(NFf|C{^;E+?HO)y<BIdk!TidNj1T@vgo66R{Vuqi(y_ril|m(t_;I z`6tUv(yZ@Rc6EAsfmgv`dX+?0snqMOs-4?joQphmk)Nx%pljzD<>(b^pFZ%oGUP5` zoc-x(^xi$TS7%A*t9fL`tj~S?_pO7y2*1W^xi{I)h6WmjJb%^-Z@TGItK1>dy4}f{ zPd{lxXY$)km$ZvC^lln_P&r!Bx8lnc@$D5^>e@$>-(3r?=Y8`2#ogbV58Hl`6POc} zIAQUjmRhwye^U=uuNf|y!cD6d2N=x`_3w?8^)g{ORIm4@aN_eiL0gqg1zj5gEQ<ct z&HHHczwZ1SuB|1ER-bQ+wO;${)~jjS?|0W(u(MO8AV8O8rAWr(AL1KV9(^{^?9{8B zS&v@4ZWEYlYihRjL3e$ybgId;+F1%RXEPQ}lXossI2oZc<zEMA9O*E()!e@le&L~t z^S%qX{lD@5rS6lO%SC(YntggddRW_A_nu5%>2}ZGa`ytk&I?bcIDPQD@pRhE10m}U zO8!c|Tx@WB^N-Bp`!&V?W%pJTx?L96H_^!Ys$+Pw;h((CiP`7nGq(Jze<NAJo2&Ix zZf@bUm7mK_%~*1B$>pDYY8M}!>~PnaoUw|pwoR!inRjR58TC2FdIIW(Pb4OtdGsx& zLYtvK$DZNxgrjj6RTc}LOc&c2z>@aDU_YlP$MKH|r}TbL;{9{}cUREw3y$--CJJtp zJaDGYPhG~{Kz-@)Ifh#{i@srr?wVa6)Tno*EuC{wCyRJ_60>ETfZy?H^#|r|sl7Kb z%_g;pBf(No)JkLBn}e?#9;&1%%dl_THf=_~&<}IVAYbkcZ!!|i9qcuGl$8ua_joSi zzaRY5+04nH(`@ycbn6>;f1O^fYx-RIXUu{YjkK<v+s+HGRBdk!u6f}pF+F(Ff-{Rk z>%ZhmM67o?>gN`9CUnx`U+G>IHvAXXzbf8ptF!$>AM5G4$EI*|mPgsD-0)$4EV%Ej zV(-T}E^V2XYEKLEuO8MB7BX|6=HjybPmTTaH9f!MZNj<PH-#!P1su^6K5TfFlk<;) z@$Y*w>y?GFqpt4|IP04bRNY;3DeTjaCtN)n!!FhTD){sd>FArEZ#x^WdANtOO{&!P zxNux(o&4F*Zrcz+=|%zhn>!^AU6WzdF#k|_YT9E><3HAqGp3vkn&PNXTN^UpOXs9T zw|}Qg&KGOWr2$5gH*Vj5C@E?6p2<YjqU&mzvHkZo#~o)BR_va<VM+YDmJL%Z=Dg|* zuJ6>_IC0;dw5reVL?*fvah>tz72OusvGDp4L4yq<CQ859XSIKScj>0i<O3g$O*u00 z1(R^d8iwL&s)8RJmHn@tmDDbDEp%-(vuISk=yvDu_V(Y)+c)g`=au_vEt_G#_1yFq z89fI4%R?pwq|I4yeTBA)pOVbxmJ;jdH#=I4wk;N@4-$!f_uW~?NoL~pgv;wP19{IB z{9o$(EqJofx;tMsz2B0ae0BPU<L5=ZRp)!GI8pv$^NfXJUB)unjTa|Bs-E>$?a8Hp zg@XU5_{^VhdLCy<<Kwt<KTLX?jJuPrOmJoQK3ntf>};tN`$NS?9;i9XPv7^W!s`oH z-GxeJn{U5wA2YsP?;rpD^8dNLW?#KcEWRYvbDsSA+9=;U_kU@kcjUTN+rk3hZalst zC8OH9V&#m9#_qKzz&rY!+<#uo`k_B(?eoQqo^0<#-t>3uQBiq$KI2fu{Vz(tbY31e zIcdlH#b;0O<jpgsuY4=pFuVVStnuax>}H4ND16dXT{vm#qMqBA&(-T}WIqzWj`zsB zX2v9S`HNp0e=M7I^4Cdrlk`Aei^{WcVsA^WY9}WhaCvZn$;(J_qTKre@9s2#B}`h^ zZQRZM9p_3ce?9HqKD{mTHn<p9?)bW#b8f1!%8UJ+1_6)PEcc7{Y;jRq{OZY#3$w~n zKX>gu&*7Kyvo}rcL(7*78k6s}*E_c;&yhMQ<5zn0?p4mck}EhRPMW4{7V+lNKm450 z+f!*-i4OCR9bfErB~5ZuxORQI*Q1nMMGLi>#3N2EdB*!urq|-&^92>JTQa`fKNfVZ zbQ))Ew8EBezQVSzVoLc%o=<!BcAcns)xOSytNh%2&2B886B96v^N7%Yf&2e%E!J1A zH&x2LFV5P%E@+>7--ZV}e4Y5LF9psmRQtli$Y?c*<6RBosiuE<KQb>WS(h{$Jl?i^ z|HNez?7mg7EVp!=bLIwX=bP}V^r=02zPY_Qx*<IIzwODSMRnJM!cQv1tq@$$tjT%) zYiMp>g~6xBi9fFfE}7|j?C;(`pKkf&{yu21b!|<(%k}iE-PhTYUSDen5Pm(I>+jpO z|Gt&QZ~DW3`|n!Sh#c12w|}l!$A9dbkina2n`Qeg{Jz8<`4;w}RFL0H?sCBM3Hub~ z)^la#)UG`caQXa2gDFegK607y@hrc*(@v<HtJSqhIG0QGNmGH0ctl6=&WC-vT`Wx} zeq`<C2(u1o$f`e9v1GlOo7dXTOsAr!?ZU!W0~!i%7O0&r>ft<o`M1^FzaJy~Pq-vC z6kj`W<eI6bhvanU3!X}oiiDCp7s>5XseHnce0J@hAQpj5MI70l1tKA(6E}3o#P62= zU78y17qtIa&8q#mH_v7julm1l({8En8(qyOo7L)neYrYnmx<KVdh-{vHYi$FE^OL2 zO=6nBs=r$zj{d)4w#sy3@X3uTlYef|I5@{^ul93IN9nMj4({cDi_aZsS$B2r^VzTR z-#hMZJzw=JDP-#;P76Uvu7mkun$v%^ZLwfEpLgH6>0CxnV)d(CRp(bq&Y2+`C#`X( zhU>89v6w@jc&jxMr&pfmo)X_y?<k-tttGOXGw8a1X5uy0yESgwkD~coop-GBGCp?p z-G^JvyW4F-jD_EuA7B3D{>}%C_nd=uE_lpMJ!U36^=;DIy(g;+cr-aT{5;)czyJO6 zw4Uor9jmW?URtWY+)%ovV*Y~iH%({US{A>(D|hSWt(&hhou3`$6N=>8r!hUD_mOdZ zfcr6%g-KqEyf*)ya>O{fxL!?V+RPW53*-Gf?VtJtK3`_I@5SX?u{s>ptDO9vZTu;2 zQS0Vc%4+K9AMuxOu}wpBjQph=cjjGENwG=oir7;3c+t-rpJV6#ii*4xe7Du~!rB&{ zjoWAE`7WF`lW|edgo+-EnF;UCycgSa_<Mfw&m;9WRDQj<;-Pr&>|@o3M+#FoEL93- z37z@6<Jga;!qyfgo~4a1w}+)Z`DVrO)p7mAmh&vXEDk#f{S$olIq=AjrW%*v8b_}y zS$dgg-P@+#T>oa<Zw@Kpc6M&t`Zt>D$-hnt{SEkT8M0ZzX}Yt(!z=srubRltT(xa} zqW{`GlfFN&GOus2<aO0Nb)$RXPD^w49LA-8G+LHFXZ^Z+`u`~LLq1nO`W;zi=5X=! z>nq!qxYs|pd+f<}cZq3pK63iK*e|MG5^h}Z`bn&bB##Yqc3sc&x26vs&d&Pl|Da5! zU6JwbuSq)(BpkkDld~mieer`e>GM`DSd*>Ew{Yeb%R}3?_eADvSJaC-94ioC%5y0` zYU|<$H!o|i_PgNq&p_{}NoS`3<FCfpRk}-Obl!63irAq&IXI!hz+0iZdflt=#9KR> z97Vq8{HzkMweVUKsjk-d@``q`f&KgY`s<gPy%oE<Y<hG06=}EoJclzMzG9x^vg%n{ z!P><AI=sKHZf*O!$>L48cl+N<^*p~tZ(KCFZFaBd0GI9N+cz%z|J5$cK52OW>Ep2F zehSM9#Mk-H?^jlOa(v3;fJ+lP8viAIIAeD4di{+nC2wO3n_r&X{ao(ZyR6NU9mW#1 z9WOhQ?XEvwCE1pu$$Rub$lr{23+J!2nmyrxQ*P`e7ZuLu-<odU=RVeZ;BH8YP)=`K zeTzFw??bJZ&5QoO{%QF_($@I@o7eT<&NghFeqh;N{&x!{?bJP92yjLm`m2~@u={oK ze0g*IS@z|Z#Z9_o3XQ&t{A8ZS@o9aJisFhR_aA-uBlOv0K~v+^S%vD7&nzakxD+f- z%YUTe>}-+MZd<;Q&)o8yRDueZ_g4eIvzO9KCY`S5j7ZuWd!XeN&w^!B8Qx7yykyPs zoX<lc#+`?g&1-Mv&i;!W?awRI;$KT%GY&uG)O5dNOa6+#52ftg3Tigpi<K|2>dKjB z_BK2`bHmEk(${jue@-_}7E{z=o^k!*gKMADJnybKf96fqx$A27xog!UJeWRpa&0}t zZn(_&zeaPja{c}ygYEY@xEa?aJNQN2GhWC3AtFX&C(|<XH6N4;?u8xGeZUvP;j?#X zaP8lRAL{%3&iCD`{r~aD^k((*&C#E2G!DG7l>3p$ArpCh;`)1eym>rbEPJx!{_~|K zYFiw<cV}bf)`o(m(wcp8#>>j~Y<=~5cg>PATb>DCiJNNkADD>N&$capl@pVb|7zmA z%PLON`FGx)O>6jebz;f94X0f`GG67lbLQ`&{eLH_308#G{XgB`Xca!W^Qz~*|4-d_ zR0VPQvaFw4(7FE5RiTHoUjCiY%i-Ul^2qYi&0{wuVgrh9Iy1fS$(-B8Th9CVt&(MG zlf`^i<=dKmY_aOK5f>O_ljQ1yA59TkD8=@sEYL;yZT-T)D;rf!dK4eeX)&57{m}R2 zohGeK?6GdIMRzX$JEh@z`h}M=sxR`-?s}<k_EE)#zh~cFi~pDR<oy&WhxTdPS_)4G z#3<CaJo4UEP&s{BQo%;s7Tu{o&64I^dhXi2;9CA!*|eix4>&owuH|^k7c^_XP^sT& zxAvWz;d0Mn{p)T<_su5#T&HiZeulGu-{Yph@_d!U`S-hd?nlOo-P1dH$l5o3^~9c6 zsgEAjUbuEHVP(Lc+?Gdk&t~(~EjRgbSDLqOxy6sWOOx*#Cf~nXqVmIQazeHyU#bJw zt@w$qX7kzuxpm^pm;8vSxPD9N#h;ubg6B79)gKfWbSSPlURaXJR-OCsh(f4{uUO2? zBDO<8lUin+uG4D`u`sr+Zo7ABf=ZLdMT@z`Rx`c6{O69e`meub^VZK?wWlTfoXoiA zTx2hOdw*AyQNzuf`xh=&;kk0sC_&~NU+I%e9Z4VZUzhll@6%1PKl*UWjm9q%9(HG_ z-*A#%<#fIN&y~A>*7NDe&O3Z4>*EBjx9$FRttwNeT|O$JeeUgy#hFSk{v0-0Aj|o% z#cOVI!^+kTZ%P`LzUO6|K7Bf4n<86}KikH2N^JT4e0=xk%6%(uTD!m8%0By4k=c=p zcd8^EZe-Q0?DMgC=q9j`bJvrQjcKJfdY`I3TOzC(+1_Uq*-(GHuaoOZcz{%N)2`pk zU%c4Tz3;BQt<~GoI$NvX5C5J|e{ucq<jH@_)7{&bzxc~(Rq_Ab*^4(X{w`ns;%|Az z|GV}V`rY5(`y#L~AzOWZP=)q#u^cwB^9z#a9?y9mcEsSljFZUYlt~Xc9fivrEm*dG z`uy&($}5MO;>kt@iB<>eZR)2639`fs3H7#$O1(MU;NU4_#r4nk_l;Y(ZvFc8)ceQ% zwQJXY`k%M=SK4d)ZSi%V&%QhTHh*8;*1z)6x8vXMx%G>GOR05mj^4}(GyWgH*85w_ z|J}qX=`SR_mp)~7zWREtJVTF>)ZvM99tCjbD!s6|oTgHotR!IZXp!d`w<tT-bM;L9 zb{aOXrUbu#pH*(>%sDgT^m(_7S^xH%F@Le^d_Lix;#KFM+0sW%6dlzoihq3!G4iuI zf1$B1`P1oxnq3;=a}%7NGW^>wSEnxVcQ*fn|F`XZ)S18je`9~t)#!w@ks8m@^RCZb z74$Bj>rQAnZ>`T{>20n5@BTUCFWk=xmdNd`w-lLsAZAhtla!#%g|8OB_kQNNc+*98 zi{L|9tJx0f3c*KmE?NFa{D1d*d;a};`7?{oJ&!Ao&icOp=W??dya%Rmu5Vd)@%W^_ z`}gksylKb(@@@O>-K)Lz|9jw`J$tHUTc+@tC)Vt1@0(<J{9Nq%<_S|BzxBLXk}|<> zUEsTg-E;Z;>Vv<ZpPLZQc`8uuMI!&(#oLdqdUH2>RkEB8Ti4AQ>?ww`FI@N;)XSyk z?#P~L_attX)=nSpvkE_Yo`ubS?Q^r|jpAy<3jGsSCLzp4{AZqR{Bu1=?*G^IyQhmg zN^I7VDxP*iL9s|+<7t*pb9j=>5)YXzUUKKNg0I@#Vx#u-71eX=_sw)z-oH%6kMsSP zi7J~-j!i20l`%*4LCv+7w=GN4X53PL^r~33>b>Q`ZOc_}|Fv*a_wo{Z(ZX>^f6A7Y zfMbtq*tWWT?902<b2{V4s@1P&U$!oqH_0~T%Gz_TnJ4YdeeI`yTdMm1`@GI|_l_I= z%rE~P+W9{}fA6izNB_SEP7z6|5B*>k^IX!(w(hfi?c#v1{RbEmd^qnr|33bk-M%4< z%c`z3)uy_wZ^^m-soAU9-J6@upYd_1f4F6=;?%I_C(qybM{|~4i(-6OXLWvF>7V-O zZOimO&67C)YU$H|+tX)A)aa;)Ov&V~yRhef`L?*+>0kEGoqqfNo+?lj{ri#pp?=Y3 zDejEJ3~@aF{%pP+*t-~Xq~?9wr3sn`AAW_NsJXh-uj5RG;-#{>(B$0NyKdV5doeq~ zVa4i`n`b=vWFsx8+*%fB|DU0zD(8TMh|G`se`eGRM+7H)=(hW^=bPEZV{Lyo*Qsoc z{ByI+eG<pN-4^Ea1YO={D`;CRj#*r<7Wh29Q9Wh-=i~AnYKe1PO^eUiiysu}*1Oe_ zp%M7~(7D~#L0#V;B<)@;#jt*@-mfg-zdzHh1;nj382>)iCV11{Zj<SSd)e#-300d7 zDtR?Oc<ql8*c)ZpQNq)Hh;8Q5qPUwM)lNn0tXUqe{)3TQB<6>9i-6NA<_Ll9DH|KE z*3YcEx;j1jeoN%nDy|Ff4_J6xvi|R!!}Z{<T(^=|1>3Dl8r^CxY;UJ&n>yZ%slL}# z$+Ajp)x>pN)#?!uoJ%uqKK<~rPB@ptXt%<jhO<FuIA8tCwZ3ulU4Ciz*O+F_<()3E zwr>s|{np{J=dSKL*Vw!7);`Rgw?*>9EydWbrtcH#8UCkf-g`1xg;Su=`pnssOe4;7 z|CN|d<%#~ge{+TEi&f8>n|870Mzh^vdNwEgzStJUbkFLF+_&l-;SCmtQjQ5-oaOrb ztGvjW+xq!)vnBE;Mz>hiKff#V`cJd^hH#eKyD#K-Zu@^Ux%u{i@0JZ_>)%8-<z(Mi zJm9z0u=Z!t&eiqdtAaz1dR>~IULUjm@qWFxJG{hpi3+}AQz`lM_MhXsZPzDF`oYo8 zpEF-?dd$}a#+IpfTG%2pMQ7RV-z!^N@M+mwr52m2gzOD9><^|q+nulaBYWQ-+b7@q z`_EjyFzv_VDYy9Lt{LTQjbwYgXx}fp6@R~doA!u(>(L0MLY{+%z8lw{bm>Sw6us_@ z$<gh5RgSroIM=3ZuS<O)!OHb_F6*ANZ!(P}W8OGSRps9D!SU`ToxeZ6P5UB#NR@Z} z?girfC63#tYtLYH$oIc>qq4MjUbx~M(QTUx(q2CP<GSHwSilCK?VFvuObX`Tv9eCx zBlI{_VPD%-GxrR8qkYTR)w-HE8|!x%`Rv%V@O-1pg<S2l^4veu=H0!TaEIe0d+9Rs zxiUX@@?6ihxxi@ksaf*)%P;?S_`Nl_byCb!{{B7Bl9-OD4Mtm+l+L#|tMZJza-O;S zw(W<?&gD;MM8$sHlJ(N6U8W^MSjA|g&nN90cN4zXv(K$9>3nWw+1i`FBjR>jaGCy# zdgUpqla8%Bl(#`TCv*R^M_ZR<9XoKnSby(<zy1ny7TDYod-d<*^ZBt)j(eNv^=Czd z{HQ%_UG1m#MEJ?8jTg5HNH4bk$8d2=9?y&O_OUtX88_Ri!#~@p-}1g38?62!fA_(4 zmG{}-KR0;g<n+RjPjSYsx^?%jKK$Q&u3J1^Am^A{{bH8wMSqpTAI<Qc$1VKZWMx#Z zxPDZWe6RT~^K0w&|F=omRi6`6bK}+juiMXx%m15iUtj(4`TY3Oi*Af^C9NvP3s*ka zw&!W%_nm(&)<uVX|9^33a@4MW4w29PfByQ-T=oC_yL0DG_y1@AJy5RUKR?gIYL6F+ ziaC1fLVp%C`!!qF_ozCDUfj9=#thcwACj+2t`62&-k8!j=UE|diR=~AKJE7(dgi1( zHvD_V_3q6(f74G^E@OU}+sd~rIBQiuA9uZkgxw|g_r7aN|1J=eJ9a}R{Ta7${&$_5 z=T{mp6j#}JagC9qMaBFV4sp+P_dotow<3Ak1PArUmopnz^eQfUbvC#@$@xR>pLv{r z8LlwLyI0DF?l0m^VEI2=E&19Z=Dl`0-E;T86E}#B;Je~3YLOKm^tsAxp0-=P=NIoR zY2K|ZD-IY3?eGlQYw65XwU}c?zh6)JsyNNxn{9=4rCnUso)<c~*<+#Ks+QwhK__|6 zT%<TH+u+=zi2B5}GPA?xTr68w&(*-?yZ>6y6^YXS!C(Fdmz<riy>EBW@hG81>&qY7 zzdZA2@9p?0YaYl)Ez%6Gt-I3XvQp!<$AWbYuCEs<h>LvvZZPN5jOM3q>r_MkHa_FH z@iN@IJ#}5N-?Ozd&RNd9-|_sw_gDW{UwvU`IPG_Wj@P`e5uW=l-mhF37NUAu|H0*_ z^|z(38C{n=8I${tq3ZMY+@tF*E=qm7PqQxYOH52o;MX6*eh&qwu3h>1(2Oa+q$c|N z#@9Y&%iX_aw(9@um(Hfmj@WlS#zLy&v8JV}I7?i;)?brnEbhgV+YGX{s>d1~NN5wb zIoZmTXtwNU|GsDImfCjgx^_7@|GwU>j+FtsR@^*RzwPJScaQFu?V7zpdUA@=^4KkV zS+h@Ek#f4ie1$d3^zM)UwyB(tk1wrzYtCELz9A>EaaQ1dhjZt@YT1{UAMs*;yky3^ zE-seBU5gfE&Yu#s?uN#z$4VV5`tJoP{$D2jyL#hRqr<xn81|NIlay61o0#}jfK#p7 z%SQNrm+Y^*41c}qA4@DXu`%yFx+f;hYSt8AIqu$<3txS8s$J?;Jtw3$@_$mAm0^jr zV&CMBvoZy{B==rf(Z4TMN6kXh?Ca|(4m+4nPATd?Qe&31ky~lYl1z84P^ExO+b_`` z3AYxcar-Pj8Zzfrn8K!se%FJA8u{+jSDr5EQCzX+>!vpUV>6DupIl%5WK-U){7(|+ zyo%f2$f)^pO(^Gox!l&uSE290+)5`s(MU$Cr<YGB)cRe{-(TlBX@l$W3lr~emh$9R zJ!3yX;q}y{{mM*=YxdQ3dI){0)OuSMQ2TFwk7v<hz5i21Kiz(LVvpJ!?@IpAg4WmH zW6$UW-I}MM=l{|rFyoYFbBStEeV5`X_e@TOr)$oMIS423zEl`+W_H-oBL}avotB9+ zT>F;crbJ1l(k1RL@f0Debu14|&$!Rel6FtF&?pL1S+L$F>(l2)F7tnHOpMID5z;F$ zqd(dGMtc6g2L(b0e>1H4|LR~i`{JMdzwQ*s{aqbf(JR<#X3g<dL(*%0G2d&}wz>7^ zCBh4eP5Borw7J6Rv70ZkyWJq(>;c2Uh07ztN+#dd_&oDzZRQi-s9n#Wr`)^IyT#3c z-%RV&m1*<+LQlNCH)BSL#iG(h%ce70H9D)ztA6gq>1+JBR<<K}zGZjA?5n2iOU@d- z*(7gw-QGrj&Za7d%HviBi)HTxDOLqm6hC?zUZ0mzy*_Yzw(EuUZ#2Vx71w1{^-tR6 zHM`9I#;R?J#rLYeZr>h|u<X5-wA6-{?~BF0oW7KymZ{UkInjR7&+<8Er~G-W66hKo zD>7xr2K84@wd!NHfACE{9^hR1ck%KiO&g*u+mGG*`f1NWq2{B9j_ABOwAyI(`)fB0 zV;<GtpOAR1x?cFx;l+0f9+W@Pb_>?IBJp>=qvywxDRXSrbZrj!&DFcFPI96_{;hk> zFSR$+FI1SG(O{hO%QoWgv-zF8Yb(3>{Qd6Df78g5{q4N{?*E$qZn_F8|0+81!AD)^ z_5J@dOLRHPa#p>bG%fTK-`9MhY!0OrNyY1Y<rmLl+mqe@>fF^i_5bX@-7DSQ8|^9a z_x$n$?yAX|`K7^Aax5SAd^hiUqcZDlx1FcowRtM)Y`YzW0yke|oHc3Y>B<S8U)$WS zoU}P$hsgzVvz6U%d$w$nSt%VGsv*+gv`~*#rhI~wf>}?X`k!+eQ~CBT{oy!QU+yP+ z+-?(_;_J<`n%8nyE!D|*pjKD^_e$ink`GIlyqtg5_^gaeFT<CGMOpEjPWJ`wmcLj( zbI#MlwKM042Q6P0t#IaN*HWb`yC*DoX`-ljhw*!MRhZLMQRQWddjq)sypU`<T*Pc> zH^V6Qm4LvklAA~U7M#4b?abE+-=bfvjJ<rSt@qN0_FoF&6PJ9RbDJ+u{mra`ExOz5 z&n;G&ooI6BW?=okxHFu~1*P6Cc<VYXH2QC2U80HW-}%2+%v<|HGUueb(xNS!EKTd3 zmOc49Q>(IYii&<F-?8`q`t9r9Z{Ya)e{=u8fR!DVRhMLI67Mj6?tA8b@zBie^$Ld3 zK5Cuzm*-gCxe$MH;q~rHVc&BVSJzKaWiEL!N9c6Dwe1>v)|biaLpj4<%=r`ZohA9@ zsXLKD?@tC~{%W`4DEky0!SP6>EyU7p_3=%yp}Swqayoi4W~pCTe8a1kQ}@0}aSxvT zXV*33UiN8E53$+Bue$nIcx&3uxmgXL7OsuRj>-?ydX)BMt>f=g8gpu&KfL>@RrR^1 z`0cW0w-;9GS(ECeuO8fF9P)y{ShVl{f#{E4xGrsw$>i9Y-Sj_eEA!>8+f*JY?azNY zqdm5`>4nkF(9@xl|2Ch!XS%d{YQgM#)1Le&OWjem=I4yN9oN49KRB7w_xg!{n@{~u z|4~s9aPEI;!H+MB{~z!DQ^WGle%^omwlh~WQVlJGnzn^(mXuL`J<X`zUG8bP(iDc8 z!|wlIo9F-fRTFmSO>Jq(wdw!=mB;_yX09vGEAd2KQbqZ>N*$kQ&H2TWo#LFn%he}j zh1u6F<YJ!bRW@^NuF<6`!<3V?3xkqohs=4!ZZbpg*WdE<9~Ra{s7<dw=KeyZRBraI z-6wud-1{hiJ9hrx8V{j<mqgJkm+GVa+1+2v@|Y>HFmbcIxtsBs$I`uvSqip4USV*; z|IERyzYV-Np6^=pmi1xr*$)qbrA|+~xclINn}(Ao$G#FWh<=yC@_U~=>rc_v2la~z zcWqmox7zJR)T1qR5e}iBHt~ggb-j^vfAz!Kb4JrPybRLXH8=8oO$blJZ=M}@X70VW zysJL$iJeQm$g!{9vsdUY$uUS)`W|~vY8NMW?Xe`~H0Gbxvo3!<s+U}td9(k9O|qtE zv3Ai#rzbh<PDNPzMd^g~D{N#q{y;r0FQhK`c*NhonHOavM7$hMt^XRnzSl0&hjVq3 zSLv01jD2eB%<dJM$g)M=y}oHhQD9QMNUrR&oo5^CZ(D18xp#ZLR?X_4n=T#uzw3~J zc*~P1jDeXi4r^N6;W(JN>F2q3!HL&$SA0z}>rOJ9FMe0<;H?15ycJ4@5ARGpm7AOU zjrErNA}6;sHzjl?th5nYUa<e^TdsMWF|I6;nm07fw?2=Ule*CU`&)Nqmi9YNQ?y>l zlrGw{wzkZ3+U~ykrwg?_QoHPee`~&3`)l{DyX%{7$Xq!klpuX$<@2|XiwsScpEHg% zKU?>9(U!RNXC)ReKW#j}*(JKi!ZZ0$tg(f}jX$XiByQ@Tx}kmdtDFV*%@uuprDhV_ zkNSm%esSATckYn6{9~P8Z`K?1uF8J9)^~BWu(IXHEARW5jAH!vHZ|9ueEU-Np5ar+ z_ZdkSn(tloeIM~(Me54>9(ljrE8aNHy>?{w`VQ0A58J$4pKtx(xbTDAosV`GLK}Z1 zd|v42|3gL1Wp&ktmn}Qk8((aAeE(Kjz5O!X)|X;B(dRb)|Hc!2Zr;9A>%K13H<zmm z`<D~&|8V#9*F~&57X3T__-}L3-|ffi`@hS-`hVy2`Qt_Z+h29198pmZ^h;7n<=0vs z+;}fVMby~pB=`5WS5;5BHATNEZ_Y4XCYJf{!dKpGU9*eZcV^G{xoggbWyMUo9j`UC zZmB<5kRl|}xJ+<z&k_NLrKdfl(^_AwUTRx(Ax5<1+R<l8p{eqLf{P}H{G4!;pVjMy zs%E`J?>b*Taqc`t4*3;E|9|muIk_jXRh>0`JiSA==<zSZwD;W`nEYJMt(3X;AgkkC zfB)|O#X+&>YuR?3)BZNm@^6;@n^W$0{Ws6m*wAh#^H@iH<3XjXtD1E56)JY`l;~<N zS}w3iHeS79PTu~om_?#fgzmN~Ftv*2`AGD8)U)T-uWr)b&LXN`q}I63*t*xg_w@$r zAJSIApPo<4ey`MGQhH>E%0z=lZVxs4?-(C>X0qPqo&OPYp+xzwKb35S@>^}ZR^I>G z9W-NGk>^$;0j^JzmUVyE>hS+D*JkF6%C6ugeQY^@xH~_^rn6m&+1d1J<ra^kP_y8R z>6<Js${f^Z60NVh+`*+db4%d<+D*T;4;@*p9c|dMDp}QRMV(jORqk7Jp6Nd+fBr8$ zWXHw66Xy~qKU(u!X0`hQVHLCf`OnKMn8VBrxs_P9#3cI#_^_%6pGg*eep+1fisSio zGarA~jI=p%7h8Nhd!Ffhs|;4sEV;GrzO1=qc&*#EU++s^xXH`ZYyEG1e)90ghs=N0 ztpC5-Ve`A2`@>%S_y0CeZrYdsf0rLV%>MVkU7a1%UwIFU)-(Mkp`84Qh36$_P1?hu zem(B}S--PhMq8QxPkC}{%guMU*CcN^6Z}KXfZsaoT(-lT9~X)ze_c5*?Lhg#xFzBD z6Z85sp41+zSa&v;>%jbayWcs#>x&H40_QOl_k1r+ID4uzY@6Hq)Z<O;Y8kKB_b|29 z3F@3Ju&ciIU-r)@=bKC#uJ!+ZE|1w>daOm^-b%~eHCq>W_IOmat}_T<_(<!%K-lhE zry6w(U3(Wv&irY#VWRNr_GK)mZa#Uy`{c+eAug`n6ZY?6c^rGeT()dq!-I9nIw!8z zPxU|eWcgz*S?6rd_SIIVPStG%YUfMO>Ta9JWz2oiulE~ky_jHnZ-7+L*C%FLv6-`@ zYJ-$_6g`PrJR$d+%-8Et!E2aye0VZ_??uC#=Q!GG?Vl~So5NbR?a$dC;yWa?R`zV0 zDd*e0a?+ubjlx%s@TV87ZMN9C=t<Pm7hc7uO8?Xg%wFI=zuVoa%sH#z*rY#^)e8zV zBT{d->=ilkL+H_-ifdwRNsB|*{c^o}WnX6uW5){BIM-GKNjWP`o;?a`l^vnFUk~yu z6G&<B3OIGiVf#C!qO*eEmxlOFPqF;+bVJepyRJgEHIAB$Gv3*yOy2O`Vy9Bfg!)tM zi_<;+uZ;c~RR7FOm;Y1R#s7(aZKukgs(pIIq4MV8LsvgeFReWAO65s~+am9cGn8YV z1RtrY`1MRc`Min5Utd>^|7$xWZ-rIvj(?bQ{fX;rgT4o6W-sbF%CTJYbm*MVdP?tA z=bvHB^ef^KOuOAAu*LMxqX#b^p3CZ0y2KKnk)<0idh~Cjmyhl7ddVZ-*X~{sdN8^% zG0W2^C3p3o8)c0~@h$O*j($(Im?GKB@BEF`yMOMbm;5o62m5A!*;DTsd?VbndrtCA zd5<$6{!MnaOyO7Gvj4{UU(fe1x)X8T_(9j_`v)&K7ybR-tlrN5G5-6f&w_LQdrkjZ zw(|Lt>#Tx56&4nqyd>sS`J_XzelqXXOr^&xTA^`gIuw5CGj21Qnig__!?Tv%Y>Ek+ zYp!3xtlyP>fow0o%>Ki`wJ==bR3C$;-_5QEU0NL3Z+0^rP4_c>cxnsx-058jM>tEW z_PF?evva@wq}FAV%)}hGXDyFa1S}s{crB=YFMMWs%7*p-`dR+=cF1~PN^i4QORx9j z&%9MyzeV2t{sMg&>CLY4U)!szi*Kkr>+ybCyW{^+?OX1DxpZr<)NlIU^{t%8;p$$a z9qOtD@$bx=ZvS_4p8WsIbCXB0o%i$;Z`K!82ruHFXZP`dY|Y0V$`_ORCNELG=<hYB z&L}6%mwnOvX%!#7Y^Z$THAl@b_Kf+GsvX<!*PofgdqU36GDFUKe%^%t>yl*ORWfb* z{v$0(*6t%q%KOaljdk_RtD-NKOw5+Q^YBAq_|AL(C#1;#deHX!cYKNP+ecPMo=h?5 zUR>0*>H6PS7H{{jxfgjwwf<t{A-{*g7R-kQ=PxVJTppY;d+~;--%lTUF1!(TZ1!Ed zTWy~gE@ZIbu3xMBVA;Cx*RShuc^CC^H-!GPKfL^R>fikQ9|8X#$JN<M{e3_G+FsF4 zndOGhHhy|6TKa2-nA7D=5yDxEb+5RG=HD%AUE8#H%JgGT7IAuKl<zT@iVS3VXq@c5 zx$^O<dwX}S@Z2nW-`D2S{D~=YT{j(;_h<j`*<ZSE^`oUL->j{6u76Ou_<HT4Po>8W zRz!ZDsJAiu_c|_z8DYmKwEWUIeTwyn{cp)LJ5=;%gf{<N6_vL(f|L7l&{gI-zd3hT zJ=yTOeTu{vYg0phvy0uazg{2Tc<ud7X;01*(ub${pV3$pRg?B7WWf~klC5vM4}RWn z@c0>Tbn1>Q$5(-pp+y2)X7bfC*Dp-lr}wVuMa{kwA1yZC6G##~D_|CR)_LMY4Ut>7 z?|;4L-lJS7`ja;*O!)rC{ke{Xhqj+u?fJgCDQTMBsf%0fQq+1<J7NX<L=5(>dC4u8 zJA2M-mZWKZj+Z+WX4wn9==z}g<B6*GQ!b~{XP*q!e_YbcQZAbq;H+LIcyjTE@4CC| z)xuleYdMt6Gn|*bOU3j0oM*2NL`Id&jjG(UJj&>5k>2qmGdN9Oe>q{2p0Miihg_ZI z9M6nywXMmV+M1tw;dIxAWwOWXqISo<vVJnHwdDAMJuj8^|4Z5%oUwBI&Y-osU)iv* z*POAJzVbhK`O4_k|F@gpvDf(hU*?Vdi~rw0f4=yl{{O9it8H#rp5}0WersLjoP@w? zE`vo9C)r%r#Hob}OcdT~c5TYzBB=%YK5@jBhK4(Z{*Ybq+(GGy;1;=M_hu_a+;zQo zWf{Yw`E#yse_cI$g@5<+xf^`zSo6i!dp=Bj`&)BIZrtH*ACmtcuiG!<aP4dIRP!D4 zwuJtA&^}ML{_p&+?$`fkp9!AjcYOoH+7tgRWbD>Hsju1dz2JYjzP<dxU;HXH>z8mn zG>m?dq4?ze992%4{tsKudLHIll2_lj{Of7ExsNq1lXdc=ryJ)pS=ZluJ^A|mo(qu| ze=7;(MQ7b$mHYC1zOu)ew&gF*+n1M3{ATEVHIjGs4*jXO?IM-@Qp}$wa;&=jK-=xH z*7nlE_m8|pCVuHEnzriD%7A$n!_v=qnsi619NIWdR^!SJ0p>}3>z-YoF<IgG%lvM} zbDLV+9?TSe!S#T-LioyF!{;{~`|1}fq)q%2!}3!pea<5nmVl2Od}|w**-V(iZpPun zlCYCM{ijVKcT~t*-hFQhr+VAFDd;Wg*p@iQFSBd1-zJN6Ly@zVj0)c#c%Geq>c$nd zC3kHvNlg?>%$&@5qQC0l&Q-6n6K6eJ-!b7Y(|gl5qH(6S`gZ!aKXA=o9kBWA_gN+L z>!r@$c3s3UE6Fyh^@iS`6KwOl1!Fo2jFu`r_xAs`^ve5?y$0PoBb@?YwS_-kdS>CF zzuUefDZlc0$UOb@`7VhIQ&V~W=r6tVum1n}|J~=}W%k=z@BAUY$@`e}-GfR(9@i_R zg(t0g#BUP+WYsQ1(N(YZtuiU%{bu60T(h(MV4~B%`uKIFRt-KkA3f_<Ssv*$Cn9ib zRYI`3R@2sbz8Au?5?Lg~i)JleoHT23vguh_FXxgxj+TTl4$o36r&iNOL(w~JNld2B zNz%gHCyWlMrdsr#(32`I^9;IslJnrtCgFuvX3Lp8%CDJ~sBWEK=;U(a^<42kM%j&# z?e6PVr+GS+)bj}$)LR|idFj>5^-e*PSWgx|-j%U8$!AFnm)@qnm+NnfWzGq>vw=gl z{aM9HsqZ)b{_Eq_4avUH{k>wID(}TzuNQQ(Tz%TLL$l+kB2RPtLH%%@$TKH39~$_4 zNZo(T`}?6^Jj-{zF}%>eL7;nQCr4{gmX7C*t!qy&&_1{Fk7wzYdXd@-neS9%m$r*a zdB5-8AC@i6db}pSw0@`V&L!LR?zE=N%YGIvR=3w;_Q93UWE}tQlV4P&bG2KkaKEZ_ zri8%WRTk%#F57xGh$-=T--=lqn>=?uKE8OCYs~#!*<xR~zfHMz#Y=p(_V(JV`i46X zABvHF@M>P&>lsa!nqsH8+F5SZ&oj>G4BnzvZnyi&y2k=73l2%w1npDj&|+x(cl>73 zs-}0zR*h30TY8-kjaj$E(pTWwoVbHRhyR4SU6xWZzAwmkJTasrvs2Ib*W&cDGcjyp zlI<=h^Ah%#oGv}kydjYz>*<l25N!?DlC63ln0(VC6l9x!`S?m}xbQ|_F^pdFvwrj5 zSYhuxF{@ePf47zFm@dw$sJ7>->fySeWw(wUVq0p{-Ml|is+%Ky`@vbk2Lj{osH)#t znGk2F`|8-y^LioY#ik$pD;v_ZoW(*_#ZAIBqB8dxkC(~p3*Sl%<%RpcJ@HaLt`=^3 zXyKN^RZ(J@`Zjfv$v3uy<;m>2ATM-|@7C)2O{pKu{oO9uU%01ktRWgV`_n-|u@rHx zkkwxQHgsfab*HXAblUnwO1s{*wQR9Q0wx)k!YcPQe2rdr_nlp0_4{?F+^o4TMqg0q z=J(s0y?&bS_Z_y0cPs<jUu3_}=cqmEnZy+S#ZhjP^p#9~i!O=&uU{fIv9{NUa~?MI zkq=zGu>RJ;jB9~^H}9=KukQb|xnrr|$pc0+{9cqCY)pFVDG=di@%+QV=F0Dn|3=>b zx4O@1`}6<icW$q~_W!1|-IM>jrqAy``Y(G^z3BFOg>(UPxo>`Izs}37*65qz*BPK0 z_{3`UVwdtjz4J*cjSPJXCiN7SaL#18va5IP=b(skpKFVF>;G%76JG1O?&zwR80BA` zX#w{wavB%%Y`yid=8NBz6-N3~yQ9RH9XiCcH8w_e)%IUU`?$~DSi$4KKfyFXG<=TA z;egp}hnBhXrRr_3wNTw%9-yTXll5|*)ztRc>9dP3+Fa(1vEL%JXsTC3bL{Df^-~P* z*0O~LH;V;nHFzz#lBrOCui#osXLDlU^ysg*rn#S6cxCbGN0Z`?E;z8Bzc6%FX!<X^ z^oyzwIeL;#bSMTH?hX(SSnzg6${d%VYI#SN_4fQz&R=_}<as5WsYIno@wUt5J7>F| zEtTAJ>y_P|+`8@iFPj|Q?UUKBb)4;;&Gv0Gi+*){no=gQDcDXZ{*sBE;EH<t<1@1* zR~!t>c=ay$!{<+?uV01Mi(81k-DBtI`uA(Y_hYQmQ~K}q{=K{5cyIes)9StFG>?9~ zR8Z_>-B7Bx=hKV+Q_n=FPqV+Ev~<6e>;0<lt!qQ4=I3V#SNas5dcaj_v)wD@^q;jp zzoO?KmDRsG>t&>E{ny(kPBLZItv~nfyi~o>mAgMv;_t_bJ?lDrU{_4<Y(2@>!Iv8+ zZR7mDFnr$bg#Tx+t-meTwEvsdiZ6At?-VM{Q|EB}oiSNkYd*h`-;SaVw}i-_+rK4y z&dy4H9DB`r#+rJDjU8(i@$2h-DA_t~z3!6WPj<ocgpW-zS^6`_knR42@Cc2!Mq<p4 z&%#^ykJWQZ^MB)4^KUb>{K53Twy;9NR&ny)k1ADr?CoaQ*j5PH+Dg2$m9@Wn+t^U; z;gsCHH8wnPc6D!-ZfE%taDrj)@BQ2AZ*cGX^YXp*ZTq%g+yB4)Cw1WW;s^T+Kiuv= z=wE;ReHXiR{q2eIfA$9NK7Y@0&nG@UH$R1So@F~1F1&j2alOF5*SGx-hyM^?Ipel{ z=Bs~|Tz_+~|II$<w|3Rvb~8VlKX-nf|MhKuQt*zgfAst3hrOzQ|JL@#|96j{Ki>Gi z(SH6}D~>wpYm-m26{oeFFHj3{S=14cmd*OYzQv1i^0VA`2BuZKpG0TRdMhHglZ*e7 z;DU12ef+Vn7N0Mew)Oq((E1if)%y#d><NireRH)o);cQhe#`P1`e&QpK4J|n%s+Z8 zs$%cIf7SB2&)@84@&4Lgr?fMGw|zOsv&g1x%5zSy_Z3|Ip-07HdH55VTkQ4!GKF|n zg?Y)pe!n1B_QmoaFKVw|zftz*LX5k3**8be7PklUPOiEY|I+%e?`G%eLXX28>Q%$k z9nC&|x)i=t(!c1?L@8rocBw20Np-<aMVD5tpKH0KPKrKW5@ssJ^Q=`(G>f%+Q{xGX zxqK?iSt|DDF}`QAeEVR#pYdT9&&9ViUaB$5neG2{{$4C=)a1mcmSV0CYEE{)T=hg+ zb#|Ds>blZp8<motFA_9W-*`{nibGT&?5mpQ*F8dAKMx*pTcc@i=CeaU;rEK&Dy-jT z_q!~MX|iK{S(V(p)m&(LLj{vweeo?`KmIPYS5+acY6p%^i*!iwww!Fy>v;HKw~13b z`v>j0^Yzt)f5|bazRus-ckt?&9}J!c9w@BuzZ9{2jfB3ezoJLYhE>eBT!ce}Ua|?q zKPYqg8+WJXRfg!5|JCwBwfT26b0p0pRZa^1-F1MIWwOG`x>eaf-gh>wGyWzg=TNWS zT6$JE$8W;q6YLR7CYL3wE0$SxVsVWd>#b{Rs{Z|o**3L$<_V82%;Nu!<*+%tQG4;> zp4!0+o-!M4Y&{;CZhdProwxSj#H`iRgg;+8)s=bq#scB{dl$^wQZskIS6s7{YmDQ^ zV!eo{z00$OBc?g=&pNcbZ^PF6^6N#MLZ9|5xmf>c@|2@#ww|8J7j4}Qe7U4LpKU#5 z610W;!N!$IjP*6kziKMmK0P+~{l2J-BK7X(Evd)0Y}?hEnSAr{;#XFsS;5Oij$Gfn z_hZPa)~egVT$8x7*8g*=3hfn``fHlzw<9X7&qFvO3%EKhHoA5!(@6SksPZm+R^oKu z$Z+YEZ_Zrhs=xlOiQPYMpZDWqy*v+ZENdyhn<wAd<QluZe^=eKw%v+{{SB8Nnk7_u zb&{@i_Qpl4|83v*&)*{bkJ(@Q@AG;1wf@a-=l>c1?&<U7i~sf0=EN#b&<(wjH__L! zEpru<&(+oqD}O562zRn@)U_tZ#u>cX>FR2)ou#mE0>`&+ue>tqMS5H8-n6g!<-(!x zck&<my<TQ*tM=}#TYBzF_Wm<dGNs<U-D#<KT7>U?*P(|}B7EH@*{MNaloqgcMtoT0 z)p=Vt`}Io6iCWyN_F3&U{`9)3NGRIULGoFJUWi1xq%_xroip8@ofg=ulasT|VA-Zl z?!CH2J6_#ywa`5=Z-I;ds*3sv*Y)*XOhX<nUbaVjQ)`@T&2ouH@6OD-zhnKHq|66X z8$ViGRW0+j)!bdz$-OQyPA+2g{cw{>!XLvfKD?jA+&gRe;`9~&ldGyq>i+$mz4`fb z4|VH*;?XO9u3*j#E%4g%;6Q8AziDba7cX!5o3_NtyW#(a|H)ma?APbA@i3Vl-%@|_ z%H4P6g5F6Yg-qTOek`*dFBNH+G9lvSho3z<XD@qCa?DwF_WqRDKjKAHXPi5_cEaDU zP0n|$eHB||mlz+?%*aj--f6kLEM{uCGwZG9?4whbv^-8RNWSiPj?FT?yU^)K&qkXW z6I0gt^R5zlld$?l&4MHPJLX+%VJV9#skSwGTEF9_UhJPeUnYk2?MVx5%vn<w8v0$! zntgSOqrt=9pYEhzs&+Wa@ptC44;7k6gCh&>+^By0L;BXHdl9RyscZi6_1VN5+amTV z^KhroqE}TCFD3F#t_P++TcDBl#>&+0?7P0JTW(zvI=1_a=B0*9ok|`O6?x`MMGR~5 z>gGRwx#j2H`bRsz>dD$VpFLVL+e!AFO1@{ZMH}xSjmvT-Dz=qpw|Gx|{wu!hxBl^z zH6HUXU61s970`G%?1E`x*RN%hOjTEO9@10zA;|4}KPv2(Q^*e0Y4@k>ivDW8HsH~w zTvOS3Yj&kn=tr$wQJS5TaJejV!>Z2YsGD)~Z1fJ^>#k~wzIM4@X~En=QH{A1wiw9> zNWR@yx>F_o-Il5M%uc`XyKD7I?MtAv*Z<>Rj&HHMf402k@=2jhM@`oKydI%Y=((Av z#8BV%nlsy+YdjYA%T$ZS=H7|WnZvqfjdz(}+!C&TOXs-c%(`?xA)<rhV)2IXmA<p3 zUhBkEFW2GCse8?T{6byu_u2I&%jGX`&oiIu(jQ}B)uE7-+46Z->Sh}@>5LVOS~7RC zr<-XCwWbH~98^?HZB{alOEt{So?mFR{&$+{%d&+R)F<w{pYwLz{~7aqp1fqe;<oWY z!IX`Wca6^}IXwzvyxpq5q)an>!KYg->z;f{oz^_*+{(l54=cQ%+<Y3yuKHzSXuXqp zz?JJZRTls5q%GKbGC*FB@7unLP2r1w|L$1bwJ$Dn*7S*{DhJ<*=xz#d4moTVx%AB4 z9PU#MdMm$Ht3MTTeS3N?<KC*%yLx-GCZ9byA^-6v)~*{)aw`&LW0yRsT_)7gbCM@M z@Yvt4=O6Y@^>{96@W!WjVdYb8ZJT)+Yuq+w)t9cWyHfQ2(?Z{!(tp?F{x9#D&^$l3 zJLPlh0k8k_4;TGwKYX13=l%E3pC@npU%!01Uh?(#8JE-xwppaTbdmfzTlc{&#`kW| zD%o#;DBHMo#;xo%|MpFsn;l$ybH}@n%hqw5vX#|KoVr%}B6V-*-=t-)Z@m5z*p?;C zkn>6XrJT-3o9PPmOd|D;U)3h-9Ps22Ja)|9XS;UM`_PYEOL`VrcCss_$K*}pdvsvd z5@y>72L_&tS$|f|d^cN7?U>~{_lx-^+pqF$y19S#xBA>!Mvvb`r{vY7i`;75c1ilx zJjsK+q1&@#BFn92=B%AEGo%07&3(K4&wh`uGS^;`eRawledg_Nlh)LJzEdABuXgsY zpVW)lY4x%tB0ugL`{us8?xer%dt1nf!b!LCKlk1_wexZO$(0tfH*HuY^*?ygpGo_k z<?u~f>H2k($>Ue6&&)hyvMhOVx>?rp``?XTpWL}B`t1ybtmmEL8M@DBFT2ejdi0J( z<jI!{wi~TKIpxXmS8ngEFTbzbpCdU<U1)QC(F@VVDdna!X6;~;kKG{t@@n~v>rX5+ zCI?C!yvXVtJlFdC9a|@Nw@)#NdAIGv?U$MUv*g;jD5h`D$GiDndJo*+X?+NIv31j$ zn|tak`YtY3n2>ex`J>{GZ#JL*`mlD{rUws9_zoK6xGt8ceLgcWp;h?p>J5wk-}U+b zTxHqn*v7E>7yp0z&ztu5|9qbLc0c~#KYf1gtN*WM82ZHCXF5HdWEQzZOEoR-Orq=D zs5NRmvzP4f;7pjkX+f04(VI_hny%Y=SI_x%B1_$Y#djCHTJ&@MuctEiq*lE2ILUC0 zg=JFm6va%5yCv)OYR*~Ayzt%2bmASok_qSL>{B@%(5M-7KwK)M{@lZokfi@B7h72V z{u|z-%CdZ()yKa*4I70DPMy6|5qtZ+#B}ZajG{YzAz5GYoNGL%9SXW{bLN$F`I#__ zo##DDIOpj*>@KS8JR5pcInhGvPScz(=4*ss%(9qVZ{vLUxb<B3Lx&VMPIgKu{<*$Y zTx8bKbid}su6Cc_FUyuqnmw~#{@nt*xF^Q`*R>QcSbj9WyjSar*@}c#4wD7t={fDE z<m9XFn%kS-{(n{TN!#!L2OoF+eSh-b<Mu!N-#>lcc;o-IJOAznpWt2p$!6=j|6VR% zZz)Zmbm9MwOx-&P##LKw{@d&4CmTok7PH@7yhc@Hf$4>uiSNW@m+-7no*|v77@Aw} zU%K#fM*fPoR}b%4xNUhu-IQB#2h-0imOSe@Mc?A3-SRp8??SHcUi|Xu#Qi__6dhP& zI#Fuh?xliL&+DBOI{EWfrOVQH>!z&p&okk^6yB4vQR-Unl;3}p!|vrheBSnJzS;Wi z*$vuX_AmG6|9<+{{m0AO`G4K7{Zpg!YyMv6N>$fa^*_TqraRZRoc*@{An!zu)8>wG znY(6jFHAZcd~{*d^gXAJdKVtQT=6l<D(jPSapjZuRhKW7PP}T7mpJq7v7qY*FJ9-% z?tA|1x0$Q?7l*8`nWj3cw^iP+o}J6yWOMaE`<4^w%TIZ2lk(fB**aBwas8yHlF2_; z?wtOqM^&*r?yK#Zdeee?TuJ(QG7{W>E1rJmHA#v6IA8F!{k1D|v%0lH?8A6v`W`Mj zHN8i6MP|I%CcBVT_YL*8?$B7e^pVs0v==L5<L(Gd$=dx%W9s@@uiH0&<hpyuhrOs{ zuJ&_LlU?)vJuUyb<kwzCrC7(CM^eHBcO1+1w*TY!yyRQP3eEqa?;^G9w_kryGWDc+ z>XzeAKJ8s_yH>zG|LaTZ;)ToH5)7w(oxCdYSJtg^fkTg0TPFm|`o5KUy<zV3J;_@8 z0!&%1cCOs~=+3OINxY9k+GRg{I}^NpIZw&L>dA|@u>H=IURk1kP2#&RZzyj-Ue>Bh z3IDZ@tukBsPLEfn-284{&L*SJZ-mY3qfA%cod0A+nR%?`>L<Ou;pUtFr}#Vx_6v() zTDRf9jGbKApa0*XS@U?(|CRBINkSKAMD%mUhMsae{&ME!ZEhAqtD^N;IDJ*kzegzl z=e?m~@cx!q_i45Md+QIL4SYJ$@X9I)$5~mcdMlSN(Kpo-erx;Tde^Ov*PG(gYU{Px z{ZF0^ntCek@6?!sUcW-4Gyd4Fx)~}~7QAUUzvt#pt0z0wTz?|Jr>$Yy#5ES@O;$0h zCA+FR-CwvgF8AKY-Io^`nLLUR|Dc=w+)w=alo@ABzKA)Phg`mU@YfF0(#7W`yIL(L zt+!-(5FF7~xct_<&AaY49lE~Ly?j%Zi0}QV?)nd}L|J^+UtM`qY5R$}$w${OEB8%h zx*fHwcTw!k)>nr24thP3+H4-}6~i%qi^%nF&%cG4PrsPGt|WB+>#%_Bd+zPLvFYse zJ-4DK`$xn`{odk~BITl_?OPl!ck9;Qt$(d{{k!w#k9?wHfmHFGSB#sq{yi_)AM^ih z!TW?C1^@Q<&kybY{imKgeZP~-b*o>w8}j6&eYS7RS*KFXyg8rISk7DagV?$VE9PBK zlVdJU{d%l!vvZ8`9O*1e)(8GiIF=u))}43yZCq{H@~G2y&)IDk);_k!=Jcz!>AzZ; zlp;G`{M`}Zk#hd{_9E*WjqiNd)tTP#zkSrHJgK+v{*|MP7*F}e>X_W{Pq`jnDfqtl zWu4xm#8tIl^XK^d|I7C*`upvQbf??`>H6jK^p~nWxn~pqt}G+(-M^%^>7{K<n)O+n zf83r+J15J;o_gtgX^ws<pZ<yz+w%o}$2kKfrx#AzaaFe8&)-M(T3Nk-@?NQKVU{E7 zGh9kO^w(uOHD1{r%yxQ7-SYoh&zn9UZqo62tsBI`^6<*4jmwt4-2Hp&k>veybCy(g zJP@?Fmw$RHX!vbk@DYiF>55jGUO~@fmMhgC+;u0_M_rgna^tj$c`r`Qn#2|Tf#Y?T zN72G#nu{|1mMsZ-^TIOZq~6la#_M~3C3H{A&X?Gsn;rE+yE%E<<?{t@zGrV=+?>TU zkt4mrM|f7SlFpPzvp;=(_TKeTQNbDghVLhT&sn12*1Y=Rj3*U0?yubD<ym+3$5NT| zr}bStW?rt3P%3b%YpMG$+qzCe<o#2Js`rU0r$tr1T5ASp3OlqIah~2gb87Hgmj(Nz zPSvrt=R`F=-}mS4$x7YGREA3?-xt0Wd9TKK_~*mNpQ@YrT()+7;MYuA@x*Y;rUOq` zp8C4>irA_p@#~l+&!vl>KJ!d+N|(FZP3K2^+|7B~ex_6Gxax27ah#oR*|bgf#GkGY z$vfK$n|}Q_<Y|v*sWzQiVB@$irpHt9pmpn;S31uZm~NdaV|qsO^ZHY#jaO8vg*=lw z>wS0YV;1hfkn?w^%vV><$o{nT*UrQDqZ8lHExvAKu4Kdi%;IS9iG-z(V+sSiIl|6& zPk-(as{HaKf5=h>VGXaM`pNde#>f8dDR)y-p1tD!QMK?@GhCB4On7W|!ACCVCL?c* z!D{yKLv>3XPUkjs?CIZDS}=)uWqkb9Q)@2!9gpUJoEyPB*CtXo)L7@A=d=^dclC{x zyu_5$V?>=F7tMVC<!0Bj>0z1^dq2CdSj?KdPh24Vvvci_WM}uk|KA+F_&K~@|4`)~ z&c3q0^%Xn5KPmM5e_z_J^2GlNef#KbUKb5}OsYJO%Y0UCV#?fmPw*EbmtRGH{VlWZ z(>*Gm1I}DoG--2>ThfFT%j~l`Z%xWAOYodswC%)_xRpz|RCBzPP1JsxDy~#La%K9v z+}wrT)Bpebv*vpB_jhxzgjR1;u~dyZ9#${a)5QMSdp?s}hJB6vKJz$*T|2IEZ0zV` zV-8-bBhfbXmoe8~7tRXhX<XAL%zM)s-C8&CsD=7A$qC^rI+ROH-^5-rkz1HN&F{q* z(Q{SBlO9Vvzj66Vm{|KX?)INq`$9Z(0{=%(QsJpRUm^5eR8U`Xcgrh79$gm4oP&aT zT2&79obP)!S1>+X`oCB2htS^-cUNccoNIFJzXsbaT_ev+b3XJ0JC>E@9*a7p+$HRi z#KrI>^GM&yrsZs3RnF=v?!D(4xW;oj&s25+UBz!d43s_Hb~s!&mOASbD`lYLIOBk* zXGB|2(b}c%)2$e9uJw4$cdDSIb2-b*)V<d~x1M)qcwT>2{z;;6`b>=lv9Ht<eb%vg z9q69)a+QooL%aP=7tuV+un(DCU%oA7{X0eY0t?I8&KF;qz86^YeCPjnk6Wan`9pWX z`}eP;gJnDp%zrM~sJI|=+lh%CX(@dV&x%<YvMO*#ng%;`O}%o@{nwf6&Khb;k3`N? zDSwf9#=hw&Z}*yq^{YN{i+Wt2^Gea>-s8$?69hMHUUj`V?LJpXx~rhgNn6(Vb4=o! zG|i^?W&YZC{q)BY(TM1U$5@Sd+S?x*bex>=$VB2D>z@w`uAdh3EIK75wRVZ<4BJSh zH3#P3;y>)p)w7F7kX7c4W!yJ`MV5hVO=T>{*38l=-6?lcgw=&>^3he29~Zn;y2G-H zDYN>n-;LKtQ}z_>FbP|B+pB;2+HNMP`lw^Ar=wHPPF1R0@@n=Y6D6q|GkU6`!)C=e z-u!eevwp_*Cm&3CZiyAS@y_*$+x%yWu;ZmY+gn4fo4RiBIrXw2%j<{Rk{JTO<Wg1V z_e_o6s(*^nU8Q8E!p|G8JLeSIs21czss`OZGb5n$12<Fgm$|D9Yt}I+Hf-tkQ!8LQ zA^EDF{cr4(MS*VZb@BRB4MhWL`Hp(uxO+uO`@6<0KijU~j{C144s>a$IGVJn>yC0p z=QABWy>6+O-vs6g%G96F^t*R}f#cV0uaxIs%r~*M>F-;(cb-l5nx^VitMz-j8+&X$ z(jI4vrYl=zUD&?oVL;7YC%$BFo*PaF7!|6x*NF2))oX9o-{XDFDaUbQ#6@p&_KC^G zA?45g(w}?t{+*-~|IlYu)?y=_zjv~7xt8gDE%lss%0Tma{!g`1gVWPZa+RDeo<FvK zf<}Jowo7w#Rz{ytE#p?4ZQx~QbnfVX74OqtC%s>6P{~mYU-dp+#r3+?e<2|iQIqB2 zE@xeL6c(44%~Gmg!+GDe=`81|mvcBc4~VeOIkkSO(y>sp=RKT`2fu6x$tYcDf68^H zbda*a;@zQZo-m))u8?DK+`Db%&P_X4bp|vYSGi~{a&FVR`KuIbCO?c9KeB4g(TqR; zb|<r4$aMJU@c8g?mEJX%56rLsw#V;yWY8B29%oryr%S6Rp7l-gV_a4*wzszN%F>tD z=bUvv=e$Ic_hpdUzu97CGcN|(Ui;2AwI=jyV&2ngCi$nTk=v5?lmvY!ab3||*Hdhp zF!j&t+?`KT8rCkAeCq!%bTen|bFpccgx`Ff-7Wq+@t@uIzJUGtaXYf}-`9DUzvVU8 zxOdf5`0lDJrsjH&S(A&6CTd@5`B?AqZjR55OIcP{l9LQ$Ul)A|+TOgBN8M#!owj;> zMAu}NQ@)FS2E}i3W}JM<!S?m{a_>Dg*WNcDvDY$v8=<(g=Yg^D#rkOqUZKIWwD*5` zvqt&7@v-734VB++ZnHV(TFE3oyQPkCO|fKO2XBUM3L`7eU!@4GlhxP$+fLDrd*Si0 zetzxFJ&BHd@{1Mjy}Y_HVTT}hn;v)D_QOpNWj7>5q&3EwT)3Tcs!+#NG{Q+wLaMF$ zVch!fhi8lIO$$%4Q<LH4FT42f-oJb6tbWG5o!!l@QN!gfP-!#k!jvw_&hE)OgJ*|v zt>2cK*D3RyTX2Ktg!3K~3e`$^4H5$ypZyR&)?5G8V_sHhC7Yu48c~VtRsCrebA=YZ z(LTkZcwd~o#`gGwh6%<yH4Nq%?zlINw_7?Q*e<Hiv~gC%s@3dX%}g3aa#>TweFVj( zzGGapQ{kkG+$w{9U&h44o5b_u+NwhT)wLCS|K4hIEI7AQahFW^O#c77uXA6}R1cq` z+p;$y{EtEX(u~k{@umgk``kY9<-QJO{$UWe$nbRftHrf1?l&gxWA@-%yJ@ZC|JoV9 zLuZ`QXo{GnQ||QT@b;F;WuKQAdV5J8ki0sVD<Sg!M%LNtCcPKuF!pyH)|1=ZIxCzn z_WhNk5jVImM4x0`%9g49VmFs>IQv5PYb^h*Zd_W+te|%xX<vPlROg37)73oN9cEhn zlS=)ae<0$<yZ>x{5*cl+TE=H8d>*{hJegMEQzUh;hl#iR*s~n3ASL&IQu<Tnbjlfy zuX#RW%a$Hl@5Elt>u$%hS4Qfe$q5&3jq;pyX=!$j^x4R*s!yk79J(o!c+*t1TSqm` z-$>2Mwm9TsuHj_&wl9J8eQHH754{vxx$DZ^KrPwW^UAs_l$11|O*zTxwC?7&M?5`x z@2(pvJ1sKzo;I`JBKB0H&Iyew#^)`UQi^vkQ|ncU-g5D+vGaS?IX)cb+*kQ?j20$n zx1<?%i+xIAPQGSWx$ay2KC2&<e#^5O*rUH)Pf+v_NOU~XH&5+Xs8wildi}2n#wDc- zmOfppFxj<9XjWX)#n1LU@8-A|cbdy&x2r^)5l?csbnxmQsbZlg7JqXM3w-W0ni=sw z@D2FxW-Z&{*oV55Vh+c&n28Q$wetULIgHdkEqJkP(jtaQi&{3<%=>eA>2B`xS@sg% zpF*UCJn9&~J;<`JKQZ&)*MtxJH*B`P4n1FZ``7l4)YJ9TXFnBweQ4>Q!lFaZSLDz8 zI#s6O$Bgt-m${dJY$)70Rbit9w^Z;M%_r9`zDU~QksQ1Ag~s8FJrYi36F+v}<o|wQ zTh4{+>wj7Qzc<;)?zs01y`t$1k*%p6d-^@tPKO+M7U^^~@P1CAl*^6Z_0!oFth#Xc zuEREy>P>mA1@~Sv2D>*O{Q9-Dqw&auk1rJheUChNdh%oU_2&;3eCv;UpF2xHvCFr1 zkI8q{qIAy>rWN+SmVwfOz86iG2hDl9uzr%a<eQ@*Pv-QA?>sK&EG&8=SK)iV$k+aJ z7f)8o*Or#l745tI``?pCx6SkQFMM|wPfvGWukRN(XR&$uiyvoSKUWu5&ySnGc>4KC zOk(xSX6&LWZ{`X=QZ!eyjDBr<@MTHkau(m4q7PTjnJ)RTSnJBXzRNqNU$8V4zd7|? zi~N4$*N4yFvX_1T-!XOJ<tc@m?D|Ci?XPaHK78r#|APD<UmpJZZ&$bNg66qmrhV}| zD+R-%ZdW)82i*FSx{{+hnnN$U*I!J?c#_J5X4bQXa`k5u3ZJMPOt5YJ)OfUb=YgDs zQ+%ds?Op4&NAl_0`nN4Fd}rx6ZagjGSyVe|7b9o&!_S}RpD$i%o-66z`o8acpwG@1 zt--VSAH=)X>C5~-#{OY_rNL~zC-%?$3#amNIV8)(>KWab<nlg$;f`}v_1wpQZ2G?4 zV1D}E{eSQ8)%`Lzr2dx}(_EW+#j1sN6<?jCglz)eTKrxr9@p7%)aB5!&ziF~sHp96 ze;#~*jeUKKZ}su}a(n+hJ9^sue#_?{&ibpS{)|t#DIxN_ZT7>6ss9rzB0l|>l#{co z{P2JObot}uxmTPu4q47T#QLUq&SOKdCGA&YH%lzEuUfZtZYRUD{brhu^~%rfuHQ-E z_1S%~;QqZk@7Vu*oX38)BX$8#uz<{6u5F(VX6Vb<mFBg7XWkdz{pk8s6>(kn!^<B& zE;!F>CG$<d$m*%b>q7!x8U*Ip^y%_{Ej+w`<<0jGbvD;){ZKu=tSkDmo1D+2IV;O1 zU&?3V-uOiAX?)kJck}<xpPmu@U$0D|UQfYQM_E%S=b-W;{nt!eA2=(1i{R$n<#ThZ zi}Kb0KcTL#SEt(?IJ8#kh)BUKedm&rnol+c>J2sG7x&yqRO=D8^1Y}U*%kYRd-2K} zQ?CRU>6Qhads(8@Z!EM%YhIJlIVB<e9e38J`4nwD*1FPN`DWl}wK%n(>p!P{dODr` zdU$=}lnt&n4|UESp7MlQhvno^hbI=hzD#r9xlX*E?SjIM`}eE&*MG1$b1C!vBpt<% zdt?IKe{|VbH9n2dcX%~-@}?Ey66y=@$y^SZSI1F)WU==KJ}2&ZBDSSEi`{N)-4gPw zLn_5#`={5A=Qt%jl(L@%oIiEzgMkgtce^jszJGZ9XHEUR|H5Li_jrzL{r&&oV_oWh z`y2H){=a|xJkLxnz1;G~<lEA7g(mh-nDOwhdi&zz?G-})^XfbeEdLa}|8R18b^qhz z?A4R^HlGasl=A0`w@u9-)_D^u>iHiZ_viTeD4}Qn52oW6?;U*j;lt^BA?)18l&{>s zf4g4j&0F^0)#BB^7auoZU%XfU@Lu))`EP1Bem^Sy|89LmZdCoPXZs(k7bwfD{apXQ zp#Hz7=KtRxUVeD^r`~>g>og`ilk%IlTm^UB(BHA?ik9-``6~OiZ@n5^?_C=a#9rY0 zFT#Rzj-+_H?}l$RVeby7-E3ZecIJyS)4xw+Qm)_U!CJr1<j9}N8SeA0pDNy^aQ&~) z-w(mEM}Kwwzf+iC;xhYo{rkCB-fQd4yq&Z>yz$L1mqpL@{m#e9$j9!fuxomlb<i(( zqOi>DzAGjd?}%S@kB)vZ$A!D{Ou<qAW}#nGix^f5t%+~9@VxQWldE3%!xHhLybaln zM^r=aP4MzqSI-fiSQWy)_)1OIoQZd9mhp;MaQZ8r@B4XM?Bb^V63P30KizS+n0Hx3 zM&RPMnE_0DSF?V}TQ1GGY|4TnjnKY{;0-SVPkCJDJeU&_ILm+cqEk}8ZwMxCOS}K( z;?`T{zgMx&&AcocdouQX#fxb%j%SP5F0Zke>OSYdu5RJLrAO-9|KzE^ahp)uDWcfX z_xN@C%FA+lwmYP7Z!140w5BOPO~v)SmElL(7B%hsM_;XUQeWQt747tmaaZ)@nxE&Y zWBWf}v&s+F?e%*3#DDGYRo@(4PUyIvTfFAhDW8nz6aAY$FM5&w&?iPLd-+bKg)d`m zm*-60)@ZiV{y^EYX=#OQXX=+oF)kM=KQha1n|73c=~cDG0XffhUd~MS-faD0<GDMF zcpD7Q-O(slKcnkiV3$~vXa3^E-%IZ%zWs171-t<ycG1kr42`u07oA0KeN${Ow>q-% zTyBwy{H&&P_oUZ;;(9#yfeY^wp0giSGnRe!GL!Z;edO|Fj+<p?^Xl4?x|(_$r#WYC ziaORzl<VBy^da`^Yx6m}MjLAU=G+&4`#p0;=9a`$Q;nRGR-c$_BffA74`a!S!}mP= zl-jlxPE+-s%%P;Vlk5G1ZjnE1TS9}*IePy*x9*$iy>lGwXFgp{su1v7_c7?rn^_%8 zByx}Q>~T87?)q5P+RxT__NvDVGQRdn{i=66Z=Ll;CiaTw&xU(5g4>jvj_K!SuYPXA z8mZTCV(a0$HQ5eNeUzr2PS~V#PJin`Ay=Q*W^>AVGQ)Sz&??u}=+!=1FmdV&1BUF3 ziR-N{D_)$Ec(p{brs4XL)cwY>9~-7j$XHo*PR0FBpyjnk%kFsu#9f~F)5s^HMVMX5 zMcc03+Onh1=gAVT#E^1vCs%%F=GPS|#}4$bI5I8XK#woO!rSsL1KXY!1*sB|<5u(B zl8oL>=2|=_z$N<T!r<uvvzSEc7qvLOP1Ft$aec#>_Eehrb8A;`kLJ8(K2J=75}Tq< zxb_trMXEGC5%Ritszp{T<mdaGeP`Hy+@8cLnVzha^G<vBtr-(c-m2zHXPoTiTw}H2 z(Txhb;*e~W6AaeZ{-2LD6jm`5G`?<DI#>Uj<<E~E_rtncCamGrd=}i;_rzX$Vg2O! z(lI7;FHCvnoiAE?b@wvXs}&5^xo;&S^cQyQ&df;b-e@S{o@4jGRNS>$#{cMniJlD- zQN}0vH=Y!){Pt+}<j>uk>;L}w_2O#x{8cUy*}kIFcn!-J&fRBezq4ZTLramXO=bcj z=k+p|B|fi+%GHz4yZp0e;_3tjn^4Ibi^e7OoS8n4=5kFv6%)t0Z2s$odyjc12OPKH zIUFE;wa2%&E9p*I=&U6*+m9WZ_BgY(NomP0uhyD&ql(Dia}CR83RFH{o%B|tbViT( z<wwn(UAN5`y-!V#J{P(-X+?MSj(IDNO<a7-qUimnc-G0+@4uP7nk(BOi|b4HdRxiw z#s3@l3y#!Z>PUIuk-qGi!_Q!zZAN}fC&h%=Urn63u$S>|L($nY3=2(L4z6(6aZw^D zUWcJ=Q^pauRd4iU%U&n+9aa6}7n#u9bF}g8Ylm+xrFthU_8zk2JTrq=q(-)T_4L0v z!jIF!(y#9+v|`T9EBVBple=)StKH<|v2)dqZqKY<vud}te!a_rxBF_mC&b7ZD|&Sr zPrE(o595)Q1ryn80%H^N8w67v79DA{{C-bcuToA=`OVD7H5(%|oEdV?9n*J}>$osc zpk$U(&iRjS;VZYcx4rPSQ~ooHYZG_->Nzi7)T|cn5#BjRV)kOM#51*T52!k@{|ooH zdm%x3k#Ips&(a6iq`p3>Kk2Q0dgHW@Y~AjiOU|jqFmFrI)%;#yYy7s&Hv8?xsJ3Y9 z^|i14IF}?hRlfdsnvF?p=A@XDD}Ls&@Yio!JL`i<w}<4-G@CV!q4&SvHu7orE$7{x z%51xX?RC3p%D&B;C%vjW{Y<izbJvNGf{9$`f;fc~-nmY;Z147+!;w~!oLFBRxW_wb z&dse~=cYVA{oH-|r0Qjh7G??eWlH^@Q@U`uPY>_vo(&hQv(_J+5FypRd&}|g-gVkO zYtC-DyY1y4G0)w~#^2dQzO7Pww5sxk)t0opzn8m~-l)EvqFpv`_k&f{jXz&y&k|^i z+vqy0TCLWgrXhXL&JNv8(;q;VW1p)JZLwTlbj?D#o&9dgam|c^%P*|=e4CfQU)a(w zdCrC@dz^a~m;2qn*Qj|c*WSssxbxMSNSofiRqN8XZ~Ievg^{WG`J<^3GF$cqJ-RkS z<h04G!fBgYEz&+)o^|9cop-2l*0Y3l99MOXI@iAaD(n69(~6Qw^AEDU{!@E4)9=as zglF|t%fo!lX70&WQI9=yp8L)$ai+a(CTEHic2=^;No-hm_Jin0jWWhX*LBpDOL)>0 zce3~;hEJ6i^;2DFVHR=bi}f_4uj}3!6xP<hjf*p|yXvksbyLCt@l3zxDglqhVji<R z(%rtVvRY=&|JPqXZcopT+h18NC$qou>#HY+{I+}&sP74w@2ghSx;Fhd$6HgQ3!RFs zsfQz!<~}b-;PO?`ULpTc)K7WCe$lmC{POw5R8J_I#Q%F^^EszJYQ0_V&Z`@HAGo>Q z{C(%V+rIsbRiAz&#LrDnnk9ZDH}`H^Tfb_+tX*NO6(VXmzjTEyUj*yl6mjL8s(swY zUbs|VX0wUucCC8%!km4cH%t~h=sQ>YIpxr@4GC8dR{6PJ;px*Y+Q@exhwIK{*@+YW z=syiNJ1Kn0cj8&S`%FH|?}hMO+OO@g%lB#Y)%I|cTGtka?;?M>113(;o^+tGyltm& zJhxUR@8q~kQ|373i0v{k7Y$m&DCVo^61(q?*>{g!UON<i`pNF$uD4R(zj2Df@9v8^ zsxBULr#`M!yE0LKS%K$s53j`5uS*YBzw2M~I63*|s;z6d=663`c<7j*(j4P;1|m5Z zC(KzlvzsSCUi)@W8b`(?Rc5oA1<kUjd=EbETRb_q<?)S{-@ATZxpMr1mQMYeNxL29 za_qga{AvD!fF%`eUrc9lJMeBQuHSp~;L~$wxGb(Snl51Wm6$J`SpQE-X!-?{btRdG z9~&R#D9>p9J)=q6zvz7Y?Jn_GhfKmUb=0_bF1>BT5wyKJ#lGvZ`?Z5>`1E`qe|>n# z<Q>EHdFo~i^JA+Y#EPwsTWEZ&=&*^AX*r`ymSx#5#@(5&E~0-wB~O*>mp*s;zxU7j zmA@5suak?Jy-&B;dE!^&bH)4A^sh{J-^sTz|LM+SMhiRd956rl*|g@?iJwA-D}L~< z`}aAc?L&y1!{<pGsuu_Ihc3Lv9&Ot3s?%=mftt>lR>w|!uV-JDd_F3YQTFVKITFsA zb4rd{GY9frtCW>5F4elgnzX{f@T5f}%K_6lr-kdI7p$9D=qFv`x8|Z*y4ulKM^6{K zT<Xv_zS}$RPhLoQ;PPo^o3A-nihf<ayJ&T)$Nz<DJwKUK?*CNYZFc|1;@7sJi<9LT z!@tV!Jh}Kr(P9pph=Ntuo^4OpzuLp<&aEr;K$emDOY@IR6A6#jm+ceZ-1BF4{l8ma zuFsl_>DTYE8rPo?XPm$tU3#-&;ndHYOQ#fTMlnv%D=n&i_IOLl%J>5neZ_y~R4vcy zVCm5`pLi)cdau`SCGl0&!5aJ594*qDI_Jlf$t@2fRM#$dQTQ6s)mXD`vhhjr+XX+R zIFuNly6h8LaQsWyL79bhW~{BOzpCdYzl*(@s&h}wdO`k1*S<S<>ZLx}7|dR5In#Jw z%iiCsmzJImG><IUwVA8DXWPLOOXieLtBT-W8ZSTfNS{;lJ>H}uQ-RHvXP%e0_s8$e zHh!o*rP0qR_2(L|*p7pbA12<u&N}to`d_!353Bbd3{5Z#Klkw8!<%+`*=`d!{ku+2 zJ@rZ3T=eqFO@(fSyNW8~H=Y!)Kf&_1ch8b%HGFKll6D@P&>vnL^x9V_+wQ#Dt3S*7 z4}NemyUHbL;xN(X1J~|r(bH^%st$;zyuQ6&GRaeF;Y0H)^U}JPXGNXdx?xS?w=YJ) zU#`Rk#fx-jocoyKq`bOtU0L~rh7U^V%dDb%a^{--tmyMSW#Bl;bHS;r8d7s7nSQH3 z^O`B^&@{)kMa2=v`!mfZzn<#3^DRsHiq?M<15PZE4Vpj6M2V?z&Au6lrVU;@>qBBT zhF!ek(W7$Wt>;ONzU(vY6OzxHnqDtl#I-qz#caj?Wt@zr4|n`vJGXdcG4m_4oR%;C zo7S+Fc~0BPF!x)pL4QBj1oyKlzh+N1E=^P~x>7GP;qt+sKfP@en0lvASk$SZ*Zf_j z?C18j#FwW(1iXzdo^(D!XV2Qx?|p0AE0e0V>kS|C91B?gIsHjj=Hc_+T3qh)nHuh@ zWzWg;vz(i}Pp9&3%Bz+37r!3fP~^HaUL-u>c1o7qyG52_4@4#j$ejM)o|tjnUzTIt ztZPc2ug$kQRDZDXeE!m)$V*?upL%w+28*ZGUS2T4Ix}RGz^}tElh*evd+BNRx2&f> zywv@6M@{aoEnN9`*ac4HNS!$*@hk8PlUcj&Tk$}}l9qoQJ?$(KEsoEb_x9^=Iibk1 z&Ga|ht%H-ZX8*j@b*e`5L5b0yB6}IRI>C3X)y;p8XUN%aT%BIeYssr)#=RuV_ITvm zSDCGjH<!O+TX^c-^?bd!o(sF9HePx5@mb@#n8#D~pX(gdjXiy^@wE5?@n0`b`87=6 zn#HB=GD}HAaq$(0^)LN;YwjL#n62{0${_5%Li)iOEI~U}H=eTPFt=mOnAv#8>7b}< zu$V}LN-yi}tQi}FwBjn_bL;hF*{azMSE`mQH3{L+-BmW}l8xN@82-FR0!!}f$*|(p zP~bM0?{vy<b>NEUPaT{tr+*Ez?A!IPrmN^F>(eG3r>q|#S6b#xc_6l=u3vcN7IDAg zTf)kQw->Gz2?}7mnz`{7tFT$=#p#Ue)m)cu6bzU%ZBxi8w%IfKUQK6fT4?mG{+1L+ z*6~N(A`fL6lZB*=(;j*CJX=>%{<ZV3^unK?(mOw=e^nDPo@~o`@6`YQ>krOY#%%a` z-lU9U0sk$VW8VDiS$28Dd)NCJE-${@TW?%A!(yrCm5r0LUd4ncZ@z!^ado)!nxl6r zKWv${_W$+PxGlP(d^^hn-GA$GRa(f^S)10@cNcW6licrOk@#}U#^Qp%dzvnm%4i(z zHZ7Aki&dVo)HCVtwkMWfZ9B!RrdF&?i9X-R7koV;SNg*)xzf8I!uD?UvurGV%{TqT zK{0Rc?Ux;%Nc3%&R4*#6ySKyO78@_Odz#1lZ6ywNM^>%rJK0j$^yp)iw#TuPZ`UcU zp5D)8FI68t!6?1!U0J-1){T2>cNc^xTv;QV9e8VtNQmdxu;#RVd$VIWL$;MXHOqZ% z@*-fF`=NOcx^C|>G*pz$wArS=<kpHajaFP<je0-$Zpn372p@8Lw{sn5LS#t$=b+V+ zbI%FvJ7jY4=WUZW^&4B6=DvDz;@aQc&r%Zht}oqHnwuJ&S-&9kC$p*FE0JLLg@wmg zhpL)dui1OrP%Ja#?4H(cp8nYjDy#mqWQR}N{^(kLy*7W4xN*~i>4)~a{p`w~b8FfA zhcB39@{08nN}s)EZfB8XSpU$8NpZPw*)hu<xBDDr_Is?~cR1#SfwhGH(y(hgJ60BK zm2g?^Hq$?Hjc;mS?UkeTk6PF?vX5TRzxU<MuXL{^eTMI?mrs85y6D~HU41h9SMAy- zroABf$Hu)=_6nz7F4^j>n$#Cx`Y3y{`MSEg>Mte{%H77>x{5a!E;v^hdf#=1+HLNq zLQB0I8koE7cvd7#pIh`J`tpVYE0?k=?s?ziJ2!)8RTAU1#D$T9UUBtx*KdWNP@Zx@ zdy<f1nV`DGvXxqg<diSiip}hE-qWiv>(S1Gk`YrH-NZFYnswPboE<usvYlI*6SPnB zL);>^$um-2*nbp#UTRV4C$z^#UC=w3u|16|vQ>zObHenAE10C}_XO16<9NbyIpyHV zqdmfg$(}v?!uSL7=I1bl=_uqZWvE^!w}ypVGG}i4Qd`IS%^ItnGM~7;a7cak^@p94 z^Vcis_c&}Dmp}d2e_>%zx0kHM!o=L|Yj<4dTJyimxKlSV!awD2|Lz0vnp<8szfsus zn)$89j@QiZG<KObD9$)qyQ_ZM2fLl+H?MM+tbMZUz1iew{$Eu=uj_V6ee>#!<&R;{ zjO9;o_l)JwaMxVR5PEA{?X?v}_iJip%}%`da5BniRmsxn_s-R?@!fvUdB=UdO>8S` zguRrLGYe~DSeN(m`K~zs$28`#-r6^>6}~gBJ5cxToOAE(*|T3Klr@?@@_o_bQh!=Q z@xD=+=BqQ0rm`~d`JQ^&G$n7+md4J)7WGdjR%Pmcs}hfN4CXbPY<whUm-bvSn=q?a zoAQoSJ3dP23${_6@Vu5W@PU<i=i=vPZ=`oA9yy@hE_?jr$vv(XT@vQ5&mz2XUU7ZB zX{LAd))F1n-5N(VZ@U&t6>jT3BBOp%Z`S1c8G6rlYaFccD!W+y_kZoz(|#*_v_I`v zs$1c-w(q~w?XCH9-tZfIkqk*>`MkxfXpffY@7EI!)f)KSxM4ow)hk<9%ct{oB@^eV zM(elxciCQj{F&pcYW^$#M%VaLivuT0zK9E4xZ#J;p%4B3_q`TgtqZ*E!Xa7_mc$kD zM5ryfwx?cOm3M=~+SmgEMp|o_0=G#l{QD@swYX&-&-eJi>WO?N)Aw7gs58BDyZ%pC zSjBU{wL4DOt`ZKrdo1!oiVSzj$@{-NCm%faQ0?@p47s*#Czj@#O3cmn5#4-I(rJmn zf!>cnPg44pP3ZBtDrs8jWaT98E%>xkXtnpr8Apz(Sza_*RWCYa!UJKMtM4C|UJ#F* zCa|JphJ(J#%#u`=2EHq+qtD7XzPdm8d719{8N##U|E=-NT>J1nhpgi(ldTK2`7*iL zoUYp4440ZBa&7NI)AAQ9e?3gOye)tFg&W4(u1vlyx=BGlb63TGH|g@afRp>nF1Kna z{}%2z_>(&$#n<6ft0!YjB>&vASDx$lo8Hx!^eeZ)ku%0z<U$#<%=$>Kg(`B>+!rx+ z=k1l7*K=8W)&$Lp|LYF~ZHe8i&vHEfQi|rv-@9hKTU{Oc`)<_^$B!1KE&Bxo!=4s} zCFlPtvi&n{4U<Iu?k1O@wboC4^p+;>J9FaIxtIM<^!P7My(SUUza(?-m*v~`-rVx} z)VjJ8GdZ5NN9D<GXkD=L_|~ez0=sM}L-CH&rIY(ZHr2M&y^!BqbMyM^UB`nj`%Rtp zZocOJ<Ii8Q1g&3u(6dqZ(w~^r9NVq~hJTx4Cxx*8dTs8p-^p^%;+4DWi?=qeEPiPA zBHibSJLl1+3OV;@^R$vT8tm)5;KBH^XpMnsP4ko|LHbKxmNY!JP{=%|$(V1pQ+J{b zmkN_$%;g%k{cKX#50so!-1PCA<F?AR20J-VHI(@_PF`^4P2yD!)-7*c^0FUT>nTc| z)LJ%gj$HVQ3Fq@#+a_OrZ1%@$^3!_lIVYbUKAA0fTf$HMeuDP4B_73*+I#clyq<qA znlDqhNhsRO{pNyWdt>g33tZaf7h#aw5%bA(ThXI)UjwFn&NX{Dcg2;yUw2~8o3@l{ z*ZO^%%zg9Xh2EU7$yv|14yx@e>YR}%w?F!Fh{7Vs!Ay)hgY-<9c|7+f=q=Y#Yp&P5 z@cm)Fvwy>7ivyW{Z-uA(#{HiidqCB>_}0W|y><H)PHXi@IIex|mOb%Ekl4cAFWUcX zciK=Bv1r>t?-jR#G&M~Z$6QywQI=mgV`Aad%eN~h7YFm+oSt&i!*orez}aNxKI@4& z8}<j3rak!XeZt~>zw}LY#(%mVALmr~t(?B~X8p@(tA&@VwtaUtH;R3E;@_@)FD7cl zJYib0%V>?=t#a$Mwhbrs4|;UIjJy4=Ws1-FT(R@KXID&JxiKl}b->YMwTatn74KZV zm*|@ud9s!5pSVdq%i+ZBDSv$*m#H$&pWNbN`S`_F(WYyE>x%ozB8%?09t*hUQFl&g z_V1^Me*TqvQtv1?tw`c`6NmR6=kUcM&vlYHXX~9euH0prw(`Wz7R~BK_Y}Tz?R<a0 zPTSn&Hn&QM_L>-u={bQF7am%AFMl>kt3xq+H^;^9Uw>Y8o!PwZ&xUOe8=tKHqi#^k zCF1KC5@2^@l^wSlkC|uShqaCBy)kDjQVXJdHwZjfTDoe!Lg=yjQ=Z!H1t!red&3#b zv<#wVak6j8XKl<m;OSS<RowLEb*zR;+b^Z`Kb!W4mBo96xjzkHtMZVQeo!;<iHWyI zf}tq8PXD%Ja!*>$XL1$&;yo^C`E}i_w^NJvdQB4&S{>sn#pM{x$#P0)jpf!=i%f15 zb#UJ}B0kw{mvr^+6G?L>*MFY#c#h9>QP(3Y!rnQ0y*ReOpoH;Mq|)^5+dq_umfV%l zlvq03Rh_LgIL=MytSX<T1mC@b)0`w;+`D*4@#6clCoWDscc)KtcF*r6g{^Fd_i_EJ zU;5~C_NEN&*Y%6mCR_Ba)XT1YT6g2=s%yUP0mtsVt6LS7=M<-%x>SUdZ<$+BJxi}A zi{9SCH%XVz-;HAa_2E{Zc&+YryZ4XIEm-m6^QpVe%X#&aP6P&S+FKD{Rr)H$Z~Jz& zU5#r)Qy!_zIrYKj`^Scb=guxLcRKvH`FL5Zaf`X3|0?U_tj%6JCI<~(fAo*9l9JlC zZ9@OjLq}(@nlUXobm*g#&ha;Ui?3$hEs#H2|K_4zRm%R_FOv^OI%QPXpGx{Nhif0h zO4oSZN1Bnc?=J7S|G`zt;-tV`?&TFR`~M$%95DS^@O5|Q*ze2_)gCGERyG^PHqE~L z#iP|ug=Oy|&AIx|tY+U*P_|LZ>|6ezm-m-UMMs9RjJm+t?6Un;#a0gvyuZI}$APB% z<p+(9drz%DXs?zLSR<#DE5O!RW!}<rEP2}bIR;aM_MZy8Bs%Gy<3=uzV@bg`)6~v| z7~V0g-@V}N#0%^<-o33m_2_et%h}cQGdJ7|TE1Vaj6L~6>(WCxHg`kMSqX3XXL`cq z#3Po4aW6twzMS&LOlwo3<9$uRPZ6w&vNtBITYryx^?JR>59X=Iuimb@THx^Cqut*Z zSgXCT^p=16z}s=>$sLRQpHKSlcgU4Frgb?(>hx_JnUv~n=D1cxC6`~1{Jr+=l;?-s zTsd!Odak-=*KjPzx9!RCb(t%ZmMB?n%9|ddl|M&s;-|L;4%<#|StL<3Iis}mW6g1W zuNRw2E-$PwY-O2{5N%YJ^k8jL!;(qOyII!=+q7r)PCl~K*JSe21M3}S&a9do68M#Q ziri05Gt1xr=e-ZPW$RxndwyftuE%zX^;Kl{9Hr)S*XHiry{T5&eeJT$obw<4S$~z& z@wqiAzIOes0yXjVoavc<mnxKb^zWr_$}f<~cVa$f(z$vc<E6|rN%@77x2*I%`Y7}t z=byfcIp*(_=cYV3D%)|Od$y;;Ik{u?XFr<%Zaw^WUC@H#KfnH5-PC^UVEr@oFPGw0 zYgTVr6{LRMU~VUmSfuFM3~v6;uLAQo?GW1@@_W+k2iN6pUHuoS-^?ZzC7a{>_v)&m zJKCY)Yb__e6k3~LT)?F=tGgywPUEirizQFhmuoL5TPyWC>BFo2VM0CGH3=6&cN?b& zo|vIf_oCD!+2_TqEy<JOg(ofgZ*k*x{q5V_eBb8F+5J7vbtzbEvR73}_qLRF(+#_B zcV}O*{hPBvwUS5eu~D{;Z|R%NJ$i<=U1t_7EIuLJ+QpurbUkxRI?M6Sm~`IW($%Z} zmaxe0a<N(;HtEX4Z}y*C?;M@-BY3&w*;(QLO;@avV_17P$>JZEx<xNX__kZqd5&kS zkzZKPG0*Ymo}_7xtsT?PO@E&kzDgyqQBjdW$R=%C<~yUBbLQ&Hm-@|{Q}+JhPCdgn z`@Yzpomq5lYCFfuC-?R8d0rey4ic`m>NLC9^`Z5a*cU;!-CnQ1<Xh=IdJ=M%>$CRe zqS@<8H!N=6^=_6KSGASQeJ1CQ`{o*=99v$kD(G6`FtJ|b!kR7J;lGp08%<lD$SjzD zvY0hu!;>)gEu2inNv}QQS5KZRRj*~U)8Iwk5vlCIokH6>nCGr;Vi!Jj($sI#!D%aJ z$z~V`A8TwbW4pRWC^~w@%I#%Oc`g*_hx~ub`%T{b<c#mRo1Z=LkUqY_bb<H+o$24) zCLdjRJ1gAbbwiZK-}=k<BId8&|5rQ5ee;F;Z=K?%7&_MOZ2a<6?20{`q>bg);@2sU zZ0=0u>QlJL^hy7vX3Asdu19-fo;I7@OD-rr_ULx3!8(oe;uf44Y7dr$?4Qu|W!|q> zah>+}+HOu<uC=sbj={C0JST~stE;}aCca(4_$1@w#I$wGZ%k)q;{Wz7s@`fzqSfw4 z+f{j)Qe)%{KM5uGEDBt^AU>@<^JV@MR`Zf5wwPPD)~aoGdNnavWZyZ#b?1~kb}&Q- zOuqHjB*RA})I_uW(v^gkBhU1rME4Z^y8Ch0H%syLyPj9(2JiK{>m9mpiqq12RsXcN z{pI+o>e(AP<<7a8U#4>|`+O^>XZd~E`q!^>>LrWzWuLzB<N?$1N5ON>A1IiSm>Y3f zbN^W-#<d<j1rw+7)kH}d*G<tDt8U6Eyrwqoy~CD>9^I2khGE_k!JG$VUOk-|TpcRC zV3(VSZ=lb*J4Y<E68v6$S$_Xuib46S)U9#8nXV4*a@}(ZZB)HBPjxO|Czr9mrOicM z;XwU7my=Iz)r4nFsu17lFtz4y`|lU>=ge<Cxy}EpbpF@hyI)kfEuOjZvR=TRDak@B zr-T%}Ez;ScF1*FVR5asu=b^h3qbIpd)ti(ezI06!-#Z}z(W9R@<@^eMm~2c{TXj82 z-Nq%Ode&RzoxXMT`&Mh8DYQ&rU6TLrXHxh+xBqSTQtDM~&li^LeB3+B+2{De;8SO` z#e_|Z+)v%omY;Hbt<}%D{by&%E--F-{ND2H$=N2aHa&7Es}9dNcZF}C)ZRZuE&CdL zzG?ryS@ek6_C&ndZrS%SEWg(L+VnwlHRJA24X+H3S*(s+zje`x?%g4?{EL>XyS?;6 z&_bS)fQ&8oShJP~aMo+N9aT$KJ-114mi|(%x7rNzKHpl^cd~Q+l}KTB{dW0j%<tt` z{)L<5-K}386EOR<<iztKm)`Pftt$Uuu+jGP)D}0P`~$rAPW_v&{j0&oJNEb4*y;J& zQqBhj_C`lcDmk!bR>G|M=dRPUuC^;}%W(emM660K(eq(>YSponw)Gm1>$B#UatW<= z5>LBsY%*_h4C{{L-6!_<>P+Z)aw2)wy(v$gt0-1#pMAAP>->~ge5Pv`n}#Kv+LHBR z+KsipQvN>p!eKtMO~3WD$gQ-eK^vbMEv`DhD$KMrJ98R$pH-+?c2@A?9V=eHT>3x! zWat8h29FP-D^LH{x6eQJ?An)-Qytqj);o(hemc7Ssfmi*q<5KDSD%nGS~ESe(t4#N zx8MEpqGQMY-3e+twrk$na~E%TT+LO@dgBo0yvnVA%kMMSUnu_Lm}DlV^XJNCv#L3F zEy|N+?RPEOxmKi4S0iu2@r|sndM8<KJFvIV?YP*D`k!0+ROco=zSH;G^Goc~iX7*n z$u|AD^#%FU-fZOkbk^8zo8$l2%WJ<>?N5An{OglndO;3m$~SEIQ;g5dR%y;@tGe7X z;p~L}pE4C|Wk3BZcE0vt|9h5+rYd*hr=6Hov_UI0<!n{q@{>w;i@&>1(%ZD<Weu05 z@@vm+oyxQ0>lfWrmbUsb!RgatFU6O=mv}#WtZOReKB*F3zi>xu&m`@@oOxlJl$+&> zyw@pj**-sElk|_<XN_+1KJN|oUDx<5?Wfvxhmy}rCf}WK*Xh~GzP-D4f0=xjW5;8e zDR(<|6e^usclm>&^i%iAy_fb2|1i+hw3U+j6eOlTtKZ%@b*cUK$@4b#NyiF@gn9fD zh}8P){CU<&t?26e6V_a+7k`(RsJ(AN<itGBml4+lt<~4%ybUUTb;@WT@2Bu}hwe-} zxT$HMq2c1=r~dEk)LH%b>a??)j%;bKnP$5Et$d-I_x<nbrBSE9_1!H`Ivsjt`lje< z9shTHieC51+w^2=Zn@n(lj;B7ZPU7*>e*OzqAYUq+f7PFu|aY7#FF!MUoO2~-`zJ; z|Gk@)*}2-tSBIRL&YTra_;u^JTcpA5tw*O;8vM<^<!>grOn>t0v?E`x?($btUv~Ya zXs2PfUYU3AO}5>J_Gz}0_7}CCS*8AZ?$VQMb}oz44onkXxqX`M<=L*WpHqLmKJPmz z?b@RM@)ON2KYr+2oPKTdN5$$i)9PjWEARW&bDiZnv-{NINY@holP1yCD~z+&DZG1k zIV<e?so77i<-|(Z-+MFbU*qe2!8zL!>Q8L`$@nR!OtznYdd_CwIC-PIyoQI1&+gcv z^!S;UV}-}=pWy;cewpUcE)V63^2-kX>r{DA()Uez$%8NcmD^{vZx;KaKBZ^#w158g z%IUe=?V9Sh%-LE}T2RjLGhW>=U3byeyE50#osYb~e}BfLb5rO3oj-5o=4p=qlP{O9 z6PeyVXYTeXn>TyDyXJf6<}QJ4%igV7`arS%`Pt9qWr=V8Z&8`I)n?~WpLt&|GnAfx z`Z7Wxf5O?z=BLZNUPdbHs|-4y_N9DE$!5Wa?(-`*PyEzx@i)!5{%rQs2Rfd2oW;)l zK7Ht>Mbr1$U7I5(<k`xn7x(8IYo;qto1OYB=h@|WMcee`_j$(d&u7Nw{F@YM^}4d+ z_e!g7)9T47b6*GlEKGTGr{^92^lhKDL5l&eCv(3GI=C`w>w;q0k35&>Ue@jsp0Yu+ zx1j0KQ5$E$^q2ZMIXg0ha_ZZ}rj!-T5`MqS^y=pF&Sl(Z3TFu`>GZUA*~}@j(SH!o z7&J|}$EC~IFxhfaMN+}@Nk-+pl{ONOUj+SQvQ%8h5x>ari{ODf1%0RHvF+cmQR0h8 zfIaU@w~$%-o9yNGd(}AA`Yr2b`JAF@e*e^#3vYDKC-?g7-<mh?+M!gpqkL=YOQix= zulbkU^6S53@~VRE2c|#Y_<tH#qH)dTCF$q#KlMvZUBnXkspjC$DJ<#_9c{b3qEn^y z>}6N3epR+d*hg6CzqoXF{>qT1Y5FhcJkve#+MYq>>w2F{3!ga#d$y}}r|=rhvcGhy z;&S%X;>EplWQtd^+DtzlI&0FQ-P<Nk`=wvMB`NZE-d2Yvm5Xl6`4%18zf4oqSa#w) zh03q-8jfq~x6k77TfnZJdMTS-VXwOK7qzRI+irbadrqe)DwEOrtzr7h`i&nQ);`Tv zzG?CFL{)~FpY<lSS*5}KIY-uH{Svh0VA!Df-(#+3N-5u@EU`(~Y*eoLs9bQqy7k(G z|LfFFnbu#Pl*2ix`Rx8bY;SH`6ilw&k}te{(%}?gk?j+YrwH$ner9x2;;PzDA2YXY znSPUf1@h)xPg#8LZdu-B-;N!V|ESFt*p%2e`RuZnYoAy~PJObZPBP!4BxwGtC5ksa zlXp#C)}k&OG_S<FDro+<C3+t{gI`Ua_C$Sc^2(sKrxRD*TvUJN^&HQ0FE$1yvR=!v zkhol;koN7p!lwP-HorXo=|t;f7FNe80&^BAESSvjCYFiy)wEw-j}#`K(u%oJv{Qri z;Ck+9lNr=K9g-`h<_8>lDz3?Gq;tgdu_4!jjDwrc*V+Gl_Vaf5a(jDw%iqNT4|wcu zx4l^5UjP43{K4m+AAGj>@u&XwgU{jpWruRKZm&t`Gh>|=>i>1eUA~B>C$scUKbTW4 z`(~Qzf!O4-uQ#%ESBj`tS$DY$?$SPRozv!#t^e}RX{VEZa$M5w*nUfUqvQ5#Jx_IO zUTA&XGjG}Q_U*HtZdNpY>6`I(+UzZVH+<!MqMoaCD@`LedxMg@ronT&%~PT*v+B=< z+)6!=XBxfo;L9aSYt@*pHoaP+el?scuPLbdG{Z@^_IHzuCI$Un<PrR;es}!$wZ5TI z()pLSCEUw8)B9L2U~-l3-Hx>?p4+vfrLQcMSzNxnH0@0}2lwVHQ}k1#SH5!UDF0r+ zN@nSv>{V*BLP}R=C9X_=m1mNuS-CxU!oxV(`uTO`J<qr&TI;wK&(TxR@lo&4vt;hM zskFAwc`dV3dz^Hqo{zzW&{gYJ>T{m_^<aP1QH>*vo3!7uDhBL%khLaFW#;Q_hPU(m zBc&EiXNk{@5J+5Jwcs`*%hc~uSD1FLstD)wdtM`T{bg)BcYWtx*G1R%zu5nG^}pNu z-dqn~7OPkP`?Palb^iTCg+JBR-*4^fS@>+yzJIg!o&K;r_VRj(ipz=b_wDocmt7jZ zNKbp$+I?Yj4MgmmKlndP46eAF;jYL&{rMN>0`^xX7iLbsb^rOE=Jox}bxXbdLyvgX z*)lxMo+UIze?h`@mg3Mg`^DWJYA~<L4(_;eitl=DoP~+ZONIKg@!~F@9(EPXzMzo) zYM!B*Oor@bk&@%N9;J^gvQ>4oJ}JD}G3BoAmtv<|TXOvz(z{M1cm?g8HTg!S*n=Lv zb!`v--AnMEyUWD8X?3E3x@Fj59rJZFp3G1?<d|EZTew|=_qgnmLmKiwW4CV6{OxMa zl|PMfv2tve%6`6O8+l)xsn^)Qp)fytb-E9m*3%R9D_`GPBtP|fYO2m^#?_juVkEXV zPL)lb+_@`R<kpKrYQjtZ&I&!!_^xh2_UbJM;}`Fe^S)TaSs1fx#p>BiPoHi5zG_RU z)`4>Gke^R~&T@}Db!p?P#*Yj7&&;=M*6&f@8OO9_!p_C-omM=tS&?+cV&|e9#rmE( zViz;Qiu_B3rFp_U?r#&3T-9>KPGr@D$EIQ&>T@1ctX$9ac<$HEl|qI2JLWcR4vn+W ze?L*Bc!tK+3rE;GgKdN}G>m<7oRV65ChoiX<>`@CtdTz*d6nN<?{{xKASSBwerMJp ztLu~BYTwVj9udKO{H<721oOw<)w*lCU#F?oi(flh_IVd~cEX<4N8GQ!ynm-<u*UJI z?DWKl=1J1mlOnQr*@>k5_`oXJrTcu!(XH<czVE+1V-cUO*C8$QjS{YNj_i6O{-o`< z>wVv~d+*=zZCvG7k+;w*)ZAwF^i@&q@mW>Z`@Qd`%(s|*-96;us=o@4r(ez2d$W#5 zz3Sb{)i1c}lV=&(Ub}kL{3qxBpTC|z*WYJX_50JK=aa8L7k6LZAO8omgpYgn<bdh7 z=Ib-h>XKP5_^~h0m-YMY-PM0q1yB5YZf;y`*8aJ2wP6vFar?O)GorORBMz)|o)8ki zQP)@4SN^IaSL48ahYz_CSz(16HQh6{J#Tp}eKNz>#PrrStNL*LsY(rxcXWLH_tdJ~ zPycq@iYdHPxGrWNdw$_&tHQ>vj*91(e(AlL$FS{I@7JPMDYIW@{Ps%|gD0JPylx)r z_wdhKPWAa8-ngJO?{)NsMQ7CmnM5tNX606BwCvg>ko9@u<A2)0=7NRypRSz!V#j`| ztEOtt`GfDT_3DUz;+w~5SbtJzTZ<B}d}-=-scBZ*cbRRJds9@$x$cs!TeR)QDAzdl z1nZNwMzi<kpZ&5oXxloCopKp&nsFMpjyg2TSgfjZmfRF&)c;C&;)<ZKceUTGW*1l= z<cpd9s)*D0eUy*;ws}H!%e6i(kuT<2>+f~S^J0=py!PMIjD}9HW-uq8UH7n_Prdi+ z&*1pf)TbFwb2lyy+0k>+WP1Hm9$T$5^1rTp=GYh#`otsBN2N9N%e@yNansj-sJZIB z*6P&+oolZg+N<|#=@!_E7J<*({L&ov!0pAGqvq<*#nb;cHDB^ys(7KH>5QaVLkrK6 zz6@hEjUAdhI{fd?nIE&~;tF;jmL#|ONhz{YJQ2RFJC;N$3tG-AYty+6UW)nu|C_z_ z)wj(yY24ZWSF>R1m$i4LPi=Z^@%z`kIlr|w&HlBf{)LBM^|yJp{o-nhou;lER8o)o ze!6>~-QI&q!J$cL>5a8N-<XMU@~|}@OfZl*vq5@K!K@1riA{Z5ldl$^pT9_DYu<G6 z`saq5-#ujZNGte%_Mu?Q-MsDGZH!9Q8wHlPJg-e`+modD;ZpdSt=iFNHRg!;t)0;O zX$t!_j>%e9!v3McIsG$CvYY2dJUwX_agH%BDP>Lti_M#Ri*~$z{6?Uw__*MSlIuOk zXZ$vqBiFdM_PDdT9najowd!^WhRbdkh&+#W((0(ce3I2~rB(Eg^6YKv4Ok3r+dO-z zQgOUE{eF+Y%<GBoa%b$6FS0wa_(0k1!YS&1A6gnNy0O2xB>8B^j@6|HYCke@FsmPR zo@d`vadrP<_OJ&`rwYT4tor$B9nZhTHyx%)e$UKN(Ef1Fe1d7}yd!KzpMADVZG8TB zapr#wfBVZj8My0nkIiZNSgXOdjzL(aLg!|q`;57g!rA9KBtxA33K*-OlookVeOBPs zA)`+R+WbyUKPYqIKS%iS)T0HeKiW>e)ZI2=Zil!1tz7qVt5wzE7qi~(%=oLBvA%@m z*5x_%V#}w5KJWkZaq$+zT}!sxwk_Q&pe}tsZGZZ@rAOx_9k?V^=w3gMQ?E(ldE5&1 z`AQ<c-=w6cd*5CE>CqmONVisrMJ5Js^&DL@|F78denA&cwp5XDTakAkYvz`&{lRN@ zh`cwBsq9u-b;nF8|J;-OqM+qAnZgtEH#NFW?y^nSw^W_DQFGCrizj*%zu#R{IQvPM z5ffwG?gkI{O-aI@Cj-9<&$D8yH*%<BDw>|~&}PcowOcMOv5sV6)YVD7c!%lF79Y#S zfgjdwiMjZ~iqq7)(EhW~%LqrAPX{&x)ptw#=*KlMav#=y_I#mO;Tuu*y>*M4J{T+w z>bUXpw36e4_x0Wm^%c9;ob`EIznEeDQ%BRAb3OVqzYEWbX}%Vg#dYyW-h$bN+Vkr_ zDhG8Mu>E{oYj(YInaZ*qyvLoLgcnVnP`TfAfefck^gHX^c2$puY?m(n{<pwm=A`sL z&kp`N>7#bPg{RQq)6b8E3;Ql;-<bQTJW`k`@|=+3?t8Lb`B#K4^EAG3eV}gHDXEo` zebD&$(_1|KCoiY`K47-lBsJ&VqJ#H2nT1sY&Fb~`f8wroVNS|lAhDu7{tNT|Z|>sD z#pU}>-H&*(O~Wm3+e_g^q4(dGe*fMf<n=87kJp*wZeEkl=YKkX<)TgJsbpO}i{~1> zwdR4-=2%v1d;9*|v}5UvLl&$PR_rUj^wQO7an13}jjzHamKtSjTc+Xoj<1`|zoI#` zOk=Am_v_$i^><#S$ZpDuPj8+i=<)ChUqtfe$#?j+%dHe_H%|$jR4AC^85V0UIq6h@ z@#>Q^W=BPt3r&q!xIygeuIl{V)r*d1{J)v7MY4I~A$~o+8(WvQ<V7aSq%2|=nQt;p z`Cvexhhe+Vde;}r`F}o$PjCL8By=Ei(e3NvZ=ZBuwdHBq(R;MM{Hu!kd)C+-<IWnN z^;5d;NyXfLa5VZQU!$DgT!FjRGCI8VPJi#H|C_>QQrPvhqdfG8@%vnpz2}l5xK5ky z)hK7NdOUga<b$FgcF8T#EOe~*k^C$w@#VPsgX{DC^*C6>ml+(m{EkP>a?9&GGfS-3 z|Ks{&uw%~-3(1(j8<^KkIaSZ3cD?g|dq6JxoH@Pz4*YXsWQ2K6Tz@^AebbhICcA9R z85m7uJ$!s+Mamat|5Cj1Pce9Dwf!EZpZ&I<l$F2oTgzTlP@c>qa<k-U_>)K#lis}N zYySUxvSxAJ*MLXI>W-|*o6DW3Kk?z6iMKVZvT|NJ|9{**dDgUJ|KyiW<51OjQr}l& zHt%D5=WSK_gOkrl>T+B1ze{+t`So?zX=;CODQe0pIA%=cR9x`jiH5<6)c1$Iz8`+r z{(AC%nYg}nes0%~FMs^+_vXoW<Ujs-l2u|Q@%+fMc^$HwR=$2=^YTc{iBOXbJN!Or z=$#R1+Wj`$XzPUAra!NmZT~b?Vz*e>ZjR*Z$Le2QkI%ZD`S6l=ZTz+Jt4p`NHH|M= znOpxfTUYGz>z_ualXsmtG-s-@<+2Ea*I^URczy_dxWav{@14ZHp6k4uY$k0reU_GM zRXLe2|6JnPxBCPdI5;$9v@9)F-80|xUD@|;f~QFLwm%pAYb9hBGuWj#ZuY-v{b1ts z6o;45MlwOM_1rH6yK1vc774U{x$edA^iI@+uD>yyPg-1e?3;B|W9GvH%r;L<JwBVC zZg_g|4EKh|tp0oAn9I0N==(Cc7#F!WxVle1an4zO%I8TNH)VbAKcKijR{8OHrHNCk zb*qoA+Ozt{nRRFOcx9j65xy>mdH=Nf+09!XJb31yTe-tB!CUWIJ;ObwQ@7pE9bXi` z_0-Wx=f9q^(b;;Xr}^lruN$&=ZkM#+K9|dOVN&*N#;s3o2wl)s*c-fK>xHH*Z%$cW z?u-A<^XHUv^ev+|<~#Hi&G){H7Akr@d$)ApEw>FJFFwC9SrsLba+E7wZ{Eq6d!`&K z&lsPU{!#z^-?wY0CVa}M5$FzmQm<JdH*Le&zr0)H=dGBYxKsc9zE-yTht5cQ%<i04 z9l7G<noq7B&u{kXv^du_%}D=|s<hC;U2BPBq+H0>bHQcv`7)bK@3S7|mU?RAQWO@i zs-ER-Id5~vf^*DqNBH*f%i0$ycqizU8N2&UzU1+C<}4j+YwP6YvRQtwHS1KDZtSby z;LaiN*!6{_;Xchx_x~Pp^`53<y*PNah@f@u<f~C{_xyV{<IzcFgNUw`!V@3=<UFf# zT+gd`p36daeSuDo&V6=s-gY^2yh?h0%s}Yuzo$wqnf(sWKc`<vb$J_hzIT26&ILjO z`<G0t=RUruSmxK0^s7BjQnS?5^q1~Z)Oy>qX=?qHR~<{vrxcztcxJii^b0RXvDK5D zr6!!}-<vtd<lFQ|b3zXl%+5CcIrX4m(mer74$a8CdoF)tPH$MW(eqsbgWqQRgj0`s z(?v9ss*Tw`etG`w(5L5*Bp$lhJUTR|<7SYD%b|CMW#U&Dr@T@$__VwDeQRH_vC7-s zM-9$y)4#c2r>EZJwXCT07Ll{k-eG@y%e|d0?aOz3`AWV1@VhsL?XFUL6c1{pr*1rG zys*)x;Il%(?v8ne)$N_nB2PpoeoATd`DC#!scHgOkTzF{l(LF;z%0iKMcI|7HnBu3 zd2d>x?Iw~cbu0bIzqD&PYE6qZDi-*4gnabe6!B(ejNolCh0Lb<qf)cd*Sj+bJ%1$4 z9rCB3OK2*e>V|I;XA3%#>;7957Yp5g`Y-aQXQkoQlFJS&ZhI{F*Os5LcG7<%?#?rF ztAjV0dlc*TR6jnXvb*uD>@?@Xg~A(8M+qi5eiAuX`SYTZ!%aca?%n6Og!a5L3f|Ae zS?7A4v2M!$F4j}auAYeb7Es?3VR0)@?N1@kE@mUcRk3+z9=&3{Etr1G(DjynUQ&MN zYP*+nGH*`xUU^zC#B+&;fw%q|ug#&{tD6p5iHEVSb_<Gf+#IU8_QBCT%cioW@+JI^ zspxia(k<1QP$A_!pS}OQ?fR9$_GfcvKVyuj=ihWP>;>mcbF&kFH!{13oSZLSA8ev^ zXyd$tnSmS(Uo^Y=9ZdF$DQ$~mFZea{aJ~DN3mV@JmoQn~SD$%2f<5Q=LTMcv7OPv* z?6Mc`D$aTtzJWVV{#(_9`%idugg4o|IeRqR(bC=~()(S2&(&)4Z^8Fl8-MIwlK1?p zioBX(k^aM5=jS`>etYmb{A9lwBjX&u&U^J$pB)$kcI`<~dh+@@pQi2M?h0#7qn{u6 zbe<J^l$~WV5S;(4;pfKEXCMFF{e1b`WQB_U3Fe+gcUR0P-+iXVZF27U#P8c#+D~u2 z`1)&AJ3ITA`*G`+|Ji-L`uDG|<<;!@_xIV|sILBz_I~%hy7ymao8NDYyFK@+ZMRD6 z$MU^XZwJ*|e|MR8KANE<Zj<6WnMS_IAN^(JCljn|9u(T#O|9SeVvo|%%k3N!H=S8^ z;GV1DMYbS$)w#+aW}ds<H)FC!z4jIVOE>tJZ?UU>znt-}!U=v(x45FF$Cd4}9M9gf z7<wdp5w-rXzh#Ms%hR9J6=wcBD)w;wdW(DACCd(nzgXXsUtd4*T)>R9BEMU@A<AnN zrEAZNi2Jd>x}#hxK4I5E3x^FEZpV7&yZzfd+4psQ8N-)nbsi<H5$l!+O<4Agc>~9i zbKx1x8}xSHt$eTkLiFs7DN6G~mU}3QCVZbZ`_Rj~-9|!86F*&#?-r6Z)!W^v!<Dc3 zXX;mt%de*`Jil?lCr5$97wQieZ@6CEA=9dNbNvB@SqBRY-8a5xY7_YInY;h&uesKC z`d9BK*%hk)mWc`FcRilHRPO%#lyJieFTJ3G{<wV$+2{R}|LJ>~sX6Vg+G2;TQ_6P5 zTCbR;H`(fR`SkfpfeI$Ew|UeYczz%HK6RUOh_!vxTyZYWi2w2z*9fHiI6lpy-Zdm* z?afx9j(7Wlcy4g6;8>CUX6l!^XVr3CQ~4M!EcBLm?YynUli}rt%c|aSMXgHluTNZ` zXA?VZTK3~P`3{eDKi>CQdm?%E&Zu0Et9m}G93TDPs4`i6<JF3WU51RQuG=J9<*qtf zc|NFq<*}*!x!uCo^WJg)xw5eC#H@UIXM5H90{b6xrG7nKzP`6)b6{Cy&6IHSl|8ND zg(t0(EOqtP=St|YzSN5NB5gfYZ}0lFhE;`Y<)dfLc>acA{&Hg-@hK7u(|`HwOx$1o z!Q8pANA=v_zK{p2jTG-@eB{kEl&H(;6tE3$>=7t#<>PJXQ)tRv*4wwcb!AA$=j3V0 z>*Hby>xJKV-4<W?aM>@$FBPeeRlXb+@eS>qmh7O=Aaf)+KFO=FJuEU~nxv($?-jwN ziaWauUQg|E)O@p2MmwY{#NWTUgUv9=dCs-9dNa3{A7;@$;<@j~6F>1gPmeb}eJYnb z@qhi+&C|ke{^u&+B*DJoH^cLTL1xRce#ht6zyI2p^}o8l_`|Q8|F(BN|D4YL=HCv} z0~ej&_@`@D$S1$pS@Dl+PFtS%mu7~Z6YVV;0UG<9<I1ybZ2tK_KT{q!L*e<9v?Vis zXxK6RO|1X$xpVXVx4D0J{Qmm-ni%7I|DyMDhDXj{Umv}_?uG2d8+OqKpXwDqOSZf3 zGUk4nB;OholAtaTU0grKX;Zr0sbsszd9^v7>_x}CDkXznbN{Gqj8tziHog?ORPXn- zR3-awRteG-`(`)smCsu?-`cV<LbvYI-G|}5)(=!~FvdH)Xm7dppuu$Yg=wLpwtF%( zEmbD79X8?Gv2eb&y=7O<!BrUtm>fl_o*d_PSmN%`Vtn4(ufMb}g7sN_*hKl)ANvko z(3aop*(0DT=$q+sWQlwKL!+4139cfdswu(?mbck&5YVx|AU>%$^WWXm>uN7Avh#{~ zXp<$Zzr$k!PwTwjVytg00~bVQwzM7yJ^DP=J(wX)>e$~^i7pH4L|QN1kJ@Hy|F!?_ zuk)V_tY;P$n!9}G>$Xo>EP7?l|9bZ7{O?o0{`Xy9{$bC*{6{y>{PK6H)SK0Nb3b=t zyg}mkyngN?F_liQpKk@0CrF2goiCDne)Ry~`V6-vda57!CT1=1*1!46_i>!eUSq{c z@^J<a{j{fj@|WMsd|Ojf+`b`K{4j&6-l@VlY(Lo8Vj1;fmTXokED7`be=Q{XsAF6G zqMEyz4Pn6tEZA;m$SvhpaxFh#_A6GY(C_-WbAE<w6CDms<CxxfP4&24m3sK4sXu>( z2Bp0JwxjFx4fpknxa8bhBeoV>{c_sYxR9GK{<8hwpB08Pf6R9{{?aCKuNZ@bYwXW^ zE-a6)9Gt9tP`4*rO@HU>xhtm2?R|XWOn||AwaxW+C68^F-Bjp)PHEP$3(m4X7e8Le zFj2HGtL2GurRV!lrT!PwcB*|5I>kFvbc1Era*vDqg+9$z`(>Pcb(h>*4wu(WbGL<5 zuQZ-|_|T%l7`G4KS#O=Hh`8wga*IZ_o<YiIhh|r%ujl7G%AMNkyf^RSUNv6(z3#`m z{`U8|HPtbix7V|4l%zhps(Goz-SK+grVEPQ%toHF_gb^gyi{Bu`1;w6poc%I9b*rw zY1}St&E@ybJhANQS?7J5f;Ko!-Q{@U+5hmWC6nv7&aJ*DYqKfc@~?gHls9IKroaBb zZa%!d>tFqi>fdkvZ=d-5<%|ESt#!V)Dki^mT)EHBJeOs|LbWXB;(Fe$RYw2kZ@rqH z`*r>DwP}+dbgo)s`Kw-Nuj%{qn?K!p5b5{-H}8ED3%+&N{>QzS-SblO*ZtS#d-taQ z%@;nOcE0}XuK9~5+&OS%?%QWsC-*;|T{XAmaGAtryVojaR-NmXbUzp53!EXxX!kxc z?PdDk)Z|~@LW;AFykOh4y~4=y^Yi*TFUbow6OSz7dFWH~T=CGSm(Ftg{+~3e-|ldG z)saV0de<gNHiRwfy<jT5^naMijg&(svrQydYPT+!bkoK?TXNcExo_9aG%uWRQ1ZOY ztnm24p88+D+h^Tv^*q7zCy~+4%|s}En#VJvCylbw6E27(+vh6>9?Hq~^kNfQX7|;w zvi?CzsKWCQzX`MVXEj9?7hO-SSS`Xk_2%0pV%nZIhdpoc*UV68bZwoUyLrWpdqOOq zo$YmPeEL7_jK1x^bCHJ1t+(?p`PGV>&Mh&OJ!4c-VEN?OiR6plgbwykS=y~sGg(*o z*2>wxRXxA9Ih|5({Oomd!;)EBOVn9flb%PgzdXIIzEV5;w8NLZe~sR0cubHpKiPhp zakqKhj%wz~Ge6yPT*npkHdnVd!N&KA))U{`R~D{a<092H_0oU+Q>yJteYd+A9KZQC z#CXM@FxA+OO)u89-gV)RH<i{Enlh6&Bd?`st@wlRDe7-{48Ab%FwK*jlD5(Hq3n+4 zLb>lM{@WGpgk|cRJI`;D-*;!;kA>`ISI^|`XWwljDpL@#?7`gstTt;Lm`tS3-Tf-t zvz}A)era5uu+@bESA9=uYuQ-Q@;1kI*7;u!YgT9;x)8R&^=Z+Pwf}Q7j+|DKJjL?d z*!kxr*4-9f#atVrnHHTq<oGZ)d}hV5tj2of4{ps-jPoWv@~X@`T)#{0^fl|k^%}+r zX|E>P+Ru&KzR#=ZdD&)zIk#3mXcy+OGBGlgTyy8g(J-bD()$8W-an$Iwbg|2|JV2f zGaK&S|Ij;mi9xK$<A9u_u~nsqng9R2|G(Ryaz&y<+vg1_POXkT3%(yH{Jtxp=C%7o zdB3ZA3v@P3=F^*+IYlgsIW6yf{ruRuJqM0|Jh@`U*Viwvo=><T-(SC1Mz&c#j!*x1 zxV)SC<Np@B_gVb>YW2HvuISH)^`!^I6Q38HWm1Y+?0+J53CA9hovty?Q#&p?i7Z(k z@3=fTL1mGF%-lakRX+=3jyYdGDWZR8=G`5p5_)n?a|%lB(zH6&_f;;NZoek)&$JKq z*Nk$K?fz=qJQe*c@T5Tg(fRZ3y+wZf+Bz-p`sw+sc0Ysue9d-$6xy|YUZwQMHM*-$ zDQ^=q%l&=8`Bh6_eyO_BHyfKvbNjcPIkn4JLc34QGP%Ua##;8vdOv-AiQ88UwnzNC zZCu4!ZF~Logl)4JLwzpfyt!_qspa!;{v`>%8~5rx7h4v)h$nhTbUyvAWGxjHvwHuQ zZSN-<8s|3feW|@B)T}=})s@HR&jtT9k7aes^O`#jS(ip1HT(VEf4$zX=gY4jSATC` z7ck+$OY@g;^DSp>o^WS@^WmhjDZG2y^TdLG$}Be7wMc&N)jkb>>0K??oId{7Job69 zQ2ge(=kH%U%u(-qD!#Q@Y4X&?2G^d=Gj^Sqwsw;5yy!0q^Vv^2WU{R6k*Rm*m$Hzm z$`C!7@7yJDH@}6ety0-Q^7@~UxbDbZkE<35oy?xY7qvqA=^uN}!@{?8kH7byfA;n7 zxPwpAo^21(&|R@+m15asN8yO<$)687X;u{#yF4zslCjE0Zq^o~`rI`qH(q(O^5Vx$ zd*19i^)_pAr1!LIUtSe6%0!!)TWr@kactv~<Y|>F1Y_Bsr_M`r3_PE>B=x|YzteIT z@RnT=Y+i8gnV)pU>u3YM%Fmw{-fH<Qv?ISnA<t>k#fibimog^FdkHY9PE6d*-Z$%- z`Gr{3hl^O0!iv?`Ej;Y?Tl&Su`YBHWpOslAKbES}-n!Q-KGI`#@g9!LmkhOpElZ-G zRMf5MP<i#-u;t|&4-+xX)=5WswVk|H7)-N#e`bS_-=k03N>%@vMZ-U@Osl)OX5CSN zyX)^obi7+T{jt={|J?>1(icpYJiBIfvFk}+myPBo<+?J5uK$eB8$~6!-!pAG>|j=Z zpyJmBzYgasD_sJX)=xB={8Z@dOMm7aH@DyIc#yL!drx_Z@SJ_t-@0>xPoKH|ta$2K z-bg;xpKJ&AWM}N^{S<8CA0m4?QJRzSw!~wT?G@8aHg))YOg+={blS8`7yjz0zI&&! zNj<J-*3tboN$TPSk7wHsn3VoL^Yue_uVk5M*vfi?YFj?NjV5Lp5=*|UI_Wf1<Lb4I zR%RtCe~sgQ1j+6G9Y3YT?}2*Q$9-3pKl@kz{_8%e|Hbb={QUPnZ65EP|6Q3s?&Z`4 zg;}`;Hmt1Q@Yo`HR(I&u&9U=N)c5Y()ptDa-*U&YtM-vj3|Ef+uc%&d?Emfevft)C z|F1Uh?4AE>`rgzRigpD4+H~^IrVC;RFIs<Gwp=>eZO)0u%??b7U56awj~pmWWZz>~ zGkN-Ht=D;nGaqmLBp_>YJ$<6?m5AtF8ncv-8{LwBZ2866a9jHy#eSVbf2P(wt2^+= z>wIh1)~)P@@0q^LauiW|ExqtiL!aE<7>|6ey!7TD$=`ps{OP~)$FBY*#}xhGV6_W= zj7wMrRBg0Y?6ygJ%b@!(OKQtg!C1K@$G>yd2G02uY5r}w;wQEzu7P@Am>Zo>=%`#S znYqJc(SnLy<=gD-7iQek+0#|SXvRCq=8~6`O02ox)+gt$bTB-=?W!_Q<|3<u%$ak# zRWBO&+OILn*2O*-ubVq-L&Wq=^;1{z7>RhPU(jB7;NPW%AIiThIC!8{_fiAn<t_YQ zSvFj2d;4X-(#zsK8S^+7>HT+p|5iHmzje)Tng7Yk=hME}8~%%)=3!$!G3>tdrUTmA zhv%fe{eC!ey6Up!majg4b@KDLmz38LwBX?_olk78p)n0*rxe@c*w!9RU2#q$Uw-Do z`rZ{h2QPi}Zeifw<LsYv@r;t1PpgiIUveIctJ9aMRY5b)?Kes~wt3;x^IvYP`(MJo z`ShF}&kVAbFkM;yzdh^E`oGuDf4kpnbN|}E$v0JJ$Yx9^3{Ts0F^`pfrgCDgi-9G7 zwXV>rmoGZ=RI<hV@7-44Rw0#C@$8RspUG;S9>bsYRYwl{ueripTl{UW!6SL!`hAVe zzUs@aZ<fAM$8PfW=J!XDj6Z~J&tChl;a0S%`na3&ipc-p`S`AU{r}<Z=YRFa=bwH5 zzmuoyV&;qG$IWBqqFhg&OVOIP{(tTYjyVfu`F`s!R<YT+wcd2Tg7Rt3w7#HchxZ?` zy6*E&UDM}cil9n;S?B*B!J7ZSf8)C+v+CRZ>q~xY{&WApX2zfULwdHW{cLbur?Zsx z+4J^2CvKE<+|Y=+eky2xDtCU{)61qWr<E-|6ngyAt%cvDS8-o|Zraj!%{0xe@UY^N zw?60Z$Xi%4RYx<Z9Oc}9R^)=)eB(FiGljof^d@#Kv*BCu$FJVqC4O&xo%h`$h1Wi@ z5lS_sO-xUgSv+&xp7`qAxmW5l1M*rMt~ptxo<12St5lQukVDR!CqH+2<J;C(v$lkU z9`oL9r9MB%=&bF|b#1)ai<?((Z=7bbBQ4;LWKsU)qc!21N;aOI{QjQUgPH1r6*u=j znscR=U)ZGOB~J;@a<;j$yQKV*Z0gk~*Rz*!oG(2v-AAg1@g&c?{gysrpHH1;<+Wa| zzHQy*j_D;)FZVL#)~0Om+7wtaE#r4=o$w^NdCwh>FwIzE)6Mp_q~rZTaR=q_(r?v! z58sQ+uYd3Re!=%;i@CXy8WVZbx2HZeIkv<6w7^@@X{&a8e;OCa|6TFhF~OqfU6&U% z*XKn1<?mhbT-&byf86#D)4jc!{uOfv{(swiEB(~<poMQLpPI67xV~kR%Z)1LcLhct zo$W=FR;B0PI%w6N-?>TTqqV#0e7BTWp^uKQp71uhW$%%a>tQoa%EXlIH;=!SxlA%@ zP4aRFkMG6RkDe@NQvQ1TSPa8Xzc<cr6tk~*KD4@1@7logQIFT)T#b;f*ZoE9PA9i% zobQ@dm0=yq@xU<raQC4{x679GT=A<mwmr(&byYO5;wImxB<<Wsat|5&<&OpSC|uk! z$)s(c$o~ToOV-xSG%%P^HT^}Z$nP0#YdI4piR3+RU~QakpBcW9i(#9E$~&IQZib^p zr7yQ`%iWpeSzEtZE>q<E-w8$++9h^nbR^Axw)0?6!1Yr}QGaw8qx-KeKFOWpk}>nA z`;;E;Dfb@#2=jJ*xI5-$iG@L!g)E=fmm`KZ#Qfi1TJYh{)N`*R6uK29_o^r+scLWA ztn6$c#&Y{nnT@h|m$1EO;EP3*ju#ls-kg2cDLAV(*l7N&HxAlm^^zHj)OJ`@6~u@v z|7Bvs7P{+>+vhztY!XS!<Z^S|4^N5G`{TW`=<@=7t&XqlRTsD4uvo<B%l7!;hjtTh zCvJsEt#^MId?$vd6f)IuT$(wbLEJ0w+Sxq+e!W}Kyjj|=YOB0<giOx!oZfJv_duRi zf7#0=cm4*R`>r&ndDHu>r#I_msvm5)zIw)<%n3XJb6!1)+9v!^d#?Mb>o!}$t@^#D z8ecHnvwYHt`9Ji00z+4<nPV5_@F+IQx*}9%TCYJ2Lr&Jq3!OQyq@37qeN5n*zv7Nw zbEH>Ocw?r{Y3+u!v8%3c`@8n(B+sc=KNM?nTzGENa>2~wqebuE0<LY^zw%<7AJx0w zNWVG1tjvL3FKA7t<&$$CYB~Nrtv(R>=XJ-w-;6bk@03{k*sT^Y&pG*T|CVZnh2}dO zE_`1;CvIIv6!XnR?(zHOUIu8r7gamiE}^gV;p^*FwHH#`XWXx<<C(L9^G&Q$=PN(E z4AztT%L~r+TT5+y`lukuZN6?}{!O7DEFYKutp6g_z<h3wN2|u%M%xEx9xi|L{=Cz^ zCe^AZ6T0~Jiu!L^?CI_h`Rj(SlZ2}AoU$d?8T~H(w>;Q=;dO)lgZcNvlo&pAF6%Ez zvU8prxVC1)yw6q-q$e|M+q~;jv%+<6tB%YzOXUyW-bQbDy>R#4lx5F4w&eQVIW|o? z%2o8AT6Q06eYEL&*Q;KeJ;S1ziZ?gJRrM#e>^;bMJum9xo%Ndz&G<gAviOo^_2w(v zqI#w|920B&dZaC`=y}BED5E<mleaAUdNpLF)YTc^7sr^tPw@Th#?V%IEo4plmM^C^ z#mFem-Ln1g0;fy%qTCG&H-B5Fs;yqQzD(Efd0zaztxK$CS39n%S4-;<o3z8+koW&p zo=IGiHu8SXbC&F@?z27oCtr2p-b)uY-F&lEdB--DKVIC@%YMJA{4_Oen%AWDpWj5f zd({hm(`t$H-{*NTO8eQIHFD==gV~H?)i$2Kc=hYi<Db8aah^XjGw$u}-%mfidHnO_ z*N>UC#aE^LODAnzx@DQnUH;>L>sQy=)>Z!RPvq+VyMs%;*XR?|7x9-ot(yHd>t3^; zpOJIw-dfM^vCaagk9^$~<@@={(~lR{*IU_I8%{FbosxB_d{c|^{qPv8t0@<*2sv%f zHC?p!aK+I%g>LMZ@@G43>C*YTdGqP`_5SDD!~d^Xaz=1^Z0?qs{I02TZiPWNJe!Z# zpF8%HXJ);wUYw@$i|s;1{;{`gQ`;f~-<bMN%aju6U%u@+uS@3xm+ckz<!478Sv56n zRofchCp`IQW(Jk<FAl$uC+G8QlDLD%jQG3thRLUXKHWHzZ>QfJmJfXzM~i1HahbaQ z@Yx{gyAj9kUuEghJACF>YLDUTH=ib@IagL*SIeot<#9yYx|~B`_etj$=aOU|xf&h# zymNjN-#niz;qdtW|AmG>DoZL0e-_r*?y#}9-@9sFXj$%UzlGiX&xP1(dXD$b;urs1 z*vKfZ;^{0H?vz{bt+1xlXxBUb_Uqz*Kc|T_2L9WA&Le+$TZdV|d$;8M3Pqo%)UA1U z>gCawS3mxKUH|Wevu$E&uin-O2?nv^N8u6^eDm*G6g;VaJKyx?m)TL-o3*)n{Z_cv z+epmiTYsbMNY_*ysi?jmG4D(c?W(#S=J<Qf#;}aI)eb$8jj!tFet$XV-_N3&)Vp)n zJk{CF;%BmQ_1Cv18~Y?@Nk6)w;n&-?aP#AT8_rECE4o-;Use=bueB<4p<KWv#<>FG zr-C0GT;Z1-)E2ZV>59S9OWhU$@jt}EoGz_=-M`p4`MB4`qidr#hlU&J98+H$uj4k~ z%>D4cD_v7~j1u*%cLcKXOMaC5Q<J2)QsUk_o|ob~yL|cAYR*}3E2qxr$+~kq+>z<$ zPc@{dynOLw`Q`sxRI+;1{w=RRmh$(<<WlaFNt;}_Q}QcnYc5Xsdh*zZAB+B+<6e8) zcCSU;qFDPcUT=RbeBSEDc<>!t;pNhmk4m?_dGjVjyyso{nxDPj-hO;%=`sIHrMvW} z|38-4OZ}<2yMLFFx6WS+HI8HN-bgLWT=V;a|K%I|BTZ(g^Gu%acYdALl5|x)VSA7I ziDI+o-<Uqt$4b9JtL04gn!uP){f&#NJMVI3Kb)YHP+n@bOz3^ek?@tT55D~HeDcLh zCxj+;JTi<u%2sFMys_|of<t<N(XLfyej(M@GoN)XT)Kb$pX8}+XROOpEn-BLH~;gm zYj8U2cEP3X-=!U2c~drg&nSAlKy%mP%}YPZ&RtudQ&P+Li~GEP_R~{O*;oCDetSTn z@dodQDJy=5nprtJH=pkAo_z4?%crh?r&;G`Hyjq&sT1a~`B|U;aqq1aZ`AW@7pq#U ztgn66o^j%eg0;zcKYhQPsXDRR+HX~g8^Zs|{B3lOz7;oj-uyrJPj|D~Og6v3wC~~+ zqwkXQZdD}Lyr{3YvD>SZ5uK#n5PvpKZF`;Vi}<h84<<1LOU#&9$*32+Y0Z^|Mi$n# zJ9q4|v){YJ&R(+rx4d7DdaLvg4WILWKgg(Z&RL{pT==KBzNE-U;?J8+^)<C+zv`~Y z&y6yP?Kt|8=hzA9V;To8Sbxq>lK7n_!?R6DYTqlBJ-=CxsdgvUOW*Sos_|aGJd54< z?AoA>6AxBCO&9yS>PbLo*eTr?rWX4ATV}UfUVrt`t^IA*hO=klOYf>?Y<hd>lf|ot zQtfNM7#-SpGT5$E+5L3{w@dyV#b=c=uWgT&_^7n?Z1@;r^7C5I_6dbtk4pr3lWP{= z^A^~*<;lv(yp62&?t=c!@gM3>+1{L%*YP5XZSI+Uo0IjmE-Y925r0s1*6#fWD*jKe zExdE-wCK4<l0Ho`9m}rQ2`Rs@Wq7Wf7&%Wrq+q?Vg~Y|~;Cs9?#owP<wXuP1cXy<u z?$V;ejFVIp^tGcVm-#RGqg%B?f8P5>uFMOJ=Xl<{-T(I6uD$Q(6+OOIWTri5@3eZu zh|YN_4A=cG_f?o~^_>;f`N`{I#k2bh1ynoT%-9|+H)~ydCyo13;GqzGx#$-?advD) z>GN2hY;LF#n^3RBXz6s}Gp~@*w0&DOm8OP8Pnc-5u1fKyTm6?Hqp)9}PaIjoEVE?# zT($4|8?Bk!T4gp=zP~W(bI#3=mQ8oM#P4;9)>k*(VK;ZMPp+B0B8%z&wR0(9v!b2` z-8A2OFpv3GiK}G0aPVY<u8fBNrCXve247mUZhPAAsh0EOY6B;)oyb{bIy27I-S*AB zMK>H1rR-g9@LyiDuKe=XvhWS=Qv=K-m#z{hpK&xR^N;D(Y}p&U=d!jYt4v@0^7*C3 zmycaIF(azC{`9KmORqW<H0wR4nQf0b<sW1}XWFLT8N0Mt0s@R$XY9UZ!Xoz9fAd9Q z)11A{`zt!Hml&^n#kRbSAu3)_TX5#jfBFaKi=E@l<|#U8a`m)9g#}aQ9tZD|2huDu zm3-`*dsqs!Rom6nw|nj|5!A{(Jt>sGyH0S*{;jf1UcGCIgz8s(N$I<EqkQWpC1qQE zC5CmpmnJ#p%B^u-b<-rnJM5<*TkcBdxB3!Wo?bknFUS&Y=TkD(K7GGQv&04!&0PlS zp+(O8`&2&3tg|Ssk6-ZPU}wUrwmVO~1cJ4USMV3e-Qe0R(H6`SH%amz*Pb&GPhQL| zjhCF~!m{D>gXyfZTW9R4Pv?Dpb@zPx&CjOUe=}>#vwRo-b^Y<_^6t%(U-vH#PR-P~ zzx|Bw4EOuhJB>cqPg0qY%)j^ZpO!BzaXU@g?Vs*Evf^|-d&z0NbF1%Yidvhz=|7&m z!)@2x-7~J;y|Qli@AaLzn>HW$8oc%Vu6K5`q?f;57Uz85Ad@L1cEUEh=^G{{)xZ8! zcj-|4+21P<C8teWHZk~Gp~KSsKAD#3?Q+F)UGk4-y2V+UJv0fv_=wA0PV&lG>$5MS z;$Ce~E?sO`mLIr^Yj($`&c=l~CgwAr%(ncuK5KJp;XkqC|8H%ZE|q08P2Pn0>>KXa zvj2Q#^TM{>Vq&kEeb~45b^laOx#OLe;?D)uXYG`q?DL~4)bU7g@v3WARI&~fuS|Yc z^z_*AGpYjF_GxBYZd@=4%Kv}LHnWz0X8~{F)ZzoDT|?4}9E5En&HujKoosK%G~ZkH z-j1)=jup-R{rj}iy1c_`<q3SsXYZZ0`SRM9GrNRqThjlDT^`C-Yr@am?yOMT{q&yr z?T<^%-uBkB?bE%_n7zMose8=P&v$m+_O1{y`Kq=-;+Tn+wcSjE%AH>-*1bzfc%HD~ ziGkJ&UHi7ub?m)&_@>F&>heu<4lfVOop?2|^5R4`ndsgx8|)R#^|qBMYs`7Ib$yA) zf$70ETTZuBMP;mYzy9h%sj$}O!ut6sQ_m_28f*E8ISOo2tiP9Oc2-MPfae^$rM-vj z4CV9jXZjCV&U*Y~VU~W-mYF~57Z}gaNt-&?<DcUu*Qk&+!M&!=xs!`SqSY>QGQT)q zni75Ku#*1dP3MAs7_E){w5sZ$q0+BS3NHKpA50B@Ijd)?_P0Pm%}<@4bJIIKrVA?R z*T`%-Tr3$nTdHTncVm%yxy1}iPpp0y9D18+!kX<*uHI-pxGF)CC-I3<-9GJCu?s6j z1TLQ4^@Ks<=l%(71r;pszFB<D|9ioj$vO6L^i3DPh3vr*8}4v9=RSPOd{|)l1lMkX zEUxvpKQ@_d&D_-Yby|p3YZ_BUGt<iOH@?4RAL;5|pROYG-o)X$t7lQ4?UMQ@*V5Hr zPEFBWb?Woog?AQPmqzz(Xt6(jB}OSs=iWB|goQ^_C6{dw_jFrwUtA;5cfM!W<1?RE zTsnC6zq7Q^kz+gg49i(JMtxgX`|0W0wI;VkS}dmS%43+Ua@;Lrn~?g2nV@MuSH*A9 zi!Hf+)O@d)$8xZ`Wsm2k*XI)Es9oCIT%Tij<Eia^-*+*u%rCF$jaz@++QwqR|8G^c zU+*7o-h2K2TiHFezkemXfBSIu-uG3%fA2lq{N5oycCOfb*GY$d?7nv@cjeq_CH{w} z?#gdxv#9F$`%;JXeKL=&`1$z8%NO1@)d@5R{+!StxTw)#@4IUi6@TWRoB4i`f#W&N z#G?8~i|c=Id};rC@VxrDy6xM)K7Mz7eROo!uLC0OhQ(~Rgr>4YE6>~Dop`zHkB8C= zt*t-bEQ{Y=IkRt9-Gq1hpS+&;;M~!y`JCG8PYRs-JBw*)2HWS@R)#r?E4rqf)tu;{ z@Il!31J}-_YZyN!tm7^-xfMHg+kt%>Z|pPp#+CBpquJj(C#CC+-}dqwDRM7fQN4SI zV_`?ol#<##uOC&mIEyTEZ}^_#ojx(?#~0S#Q&;{^TIPOIcb{$6{1*Yu5t6BIBXkxw zoqE<aU99VwW99?nTAkVs9>%$q_dOUpk54U;y7g(UG0)!b1`P|llV)vPz3vd}w+jNt zGutn-)-Li(JQ&KOE`0y0MZNjzf-R<}E=O+n&A%t_+i~rZkH{*6wRtX6ZmSgMnbfX- zvt*@^ulS$$oP7Ip?b%(tFO^QH+we|O_iu0eo01i;kH5UIOL+O=S8_8Fb{tgl%>4Sx zj&IYZn_Et5hcAjWNj!2P#MIHGu(TdDa8jF4I%WFQ+-$}*4UE>)E<8GDw{>&<#T9vX zquzL(n>;n~*rGGuM!}o2YnFBQ`fxqg^qM(+sn`~a-Ze{hD$JRE&U$yJ_$Rg_9^#9H zE57ZWw7JBAOJI@Vrh|JfJrvMmnmFZ<-ln$Fm!3?nfvYYEWpiCv{WH+`ew^D4>(gKF zZ2Pj9X+>D^H7%E`-x$|TJeT<DoYB|I3#N$G_ikT2z3%ne8|IZ#@BT}wpDTQ^++v$4 z>y<bE`R{$<oAUSn!Pm|AKL4v1K0oXGfA2Y6MRL~9ZPa9rbsS?k*HmZmc9(_Q46k{y zSC1TMTyywRK-b6o1NQ4xWe!O73R_RT))~5V8{^>xD_QDI#9ALE#6(U%UHy65w@1&| zvZ@x{oGHDhK5Xj6pS<@278x4c)PMVR)~Q*O+$O9)xO3A7qn*XKFZ1(AJY}n?j$?KR zU=0hC?DCt{=FL%>da_F6OU9OoG0)9^ZMn_6Lw=dYzUHR1*?Tuiekpo;$+AOMs#E$f zN9@ny7V)O`mM^#16q)C!ZtN12&9xUP=Ht>2pL0!Yt(3|8!&B>bAB*cRk=3b<@;5&% zv1aXNW0^-kd@OH@#oa2HCf3&Czi&&QYNfmCQC1O|qjR67v-f|tSpV_zk3Z*UD!yRV z@O;D1l>O!Z-|hL;UH|_7`f&F1&--rkmY4mTerM<19_DB(<{ZblS6><D&Yjj7wK}8a zl0`}Sv_&<2w`5~D-4>V5Us7*+<jex$b-!iSK2p)$E_3SG4{n)7x(sm*@q#<r6S)!u z8aS#sKR8b~Cm^xhz;&{#ft#j>;f#aUF86*LHp~-Wtm4SoA!gn<|I7q-HH&2zJkGM* zQ)*EEl0WBM08d-%&&g(u?*cgTF0dRId3KoJa8daSxwyt7{ITCA9ZEi%RM5;&e=}^d zeXzuxN%evy=`#D|nPjRp(o|z@o<G<Xt#J4w({klctL7`tzkl`jv2X9wlhc)x(>H&$ zcX?^sm#_RRBx^Opm7o9jypvt^ZU5hUub+Rd7e1f%rv6pPqneO!+tauXwf=~_q-b(_ zH@C6}bMMcTsnZ$6O?UpOV3Bk0kG);7YTB0i<I10v-(-H9tsA-F)pf>b?l8kAK6B!2 zU0QGd&-74pI#fS5#eU5)V;-iO`a^R|BSPPOa{hmA)`gf`0^EBP7O~%F*7sR)xp;%Z z9mN?pmPFt4nOX5UY7dj}W0Bn!7EJQ}?b}?}vpKIU-Q$t}LFr4wj6S2IA+kkDBCPwk zCuc30rCML>v606yap{}PiA$wCC+}tcx+#Qrx}a0&+&S9XjJ=7f8+^RY|D0KSrR(e^ z&#Hfi`Bm%kQh%Jic(~;HaxdK*?6-_=zAd@FLu*-iV7(IS?AtuAqdc5vChA@clGu~f zzbITtX4=}%93>~_tq3k(?6gcjeRcQ8%0@wryR$COFkM?Uss8w;J+A!g4|rR}yPSXi zwBXcBmjhhC_)`7ubtp#7i}jc;wWaNbaniOs9qT=oYqeZ+T(!$XuPo0;%J8IUW2yJ! zH8a&7{qRp}{J+hA^WXhKvs3w$rIj7d{;Pj~_O)&5|NqOj*Z<h_|NfE9Gym4dzF{<X zGjLt%;TWmG^j6bJZk@~i`qko23K}t|nZ<O41s_(v{vWaJ-_450)*{F4c$drh^&Jpj zzBkoN{@E&_qszCem`?sbvHbGCzvurRzW((0{Ppvn{&$;~pZs67=19sut$VL|_Dnpu z>9liD!uuQkk6c}rz53m1?)ox$!_RGRj?YZ|St4sb|JkhMf;%EJtKPN$wSK|=rM_V5 zHSzl|oDDNpr=Decnzn44*`F_lEtP+BYjxzdN}dxgN;PgPl8*m$<43hxjeNhOU8U2t zAHLZFXRp=gd6djL+PEV2KmXOg_p>*t*2Mic|BzGm_j<(U+0`9eh3~vOzhkQQ-S!P# z8y4)io~L%mDRi;F(V?an;$fw+QEzvA+_mLqeP`6(du#U##|5u^cW%?Oe@!2Ecz(HZ zX^vUvzbLL7?yEFx%<|WM&15~j_J8l0{ae4?zpncG{lSN~|AN!{<K6!wySjES`uctS zGG&{kvZZEuv##`<F^!l%+c|Bb{r#nLc<s(Uu@4Nak@!)6VdAz}wpUO7AADWw`cMAd z{>slf|IO<^=EVJzp2U^&x+koSg*8`(tIP4<{OfJUcbRPwvUh)I;`mYA@Wy{{J%zGQ z^YcF}c>TzAhM6tXny>#W79Xp>X@94F-~XKx(>H&!Kj&V1&i$9N!&R;m-sV;(CQI+C z_;lU;)Hj>fDZF}B>kiM^E@IYyY8Jb==CVxA)OEWLZP%D0+)=L)yLQEQmM{_PpY_al zZ@X@h))oD?+wb50d-Z?ACjPI6PRCUKo&PcD<e$UwyAAp351Us;{97|)i><*_(c&v_ z7>;jQ_d<C3ns@4tT!Qlr`xSWQey*@_6KS$dJU;PdspF$hi&lKOoF}>J;VPZSZ2ji3 zQA>CfC8s&1_BKjPt3UMIuqFP&o$w5UAO^^iq`Plc3r}_Kz0DZ1E_Fs;Tk7*BFTOeF zm%cG?3p3>`C|Q}m<k{3M23bxLv04(&ub<`^NPWDjklD3QviRPV<Liz7uAJxg>weKg z`K-V7ar;BR|6hM!&hGdByeE}we%-&^D{yg<*bj@nJtbB*CU4MKU#}n2a%fNevlW7m z9%M7QKUt_W;q22N=IragYd<z%_&tGF%++3wfBsbNpP5_!rT@9R>Tmt~v$L<O{{BCE z@ADu2(v@b}|HH4<t$V#c<<hI<rX){^)2rVqIc_XacaQm;-@&2Nw4Xmo=AZSx%9!k* zn_Z6w&92zf#((aNzBk{c`?r`a>kHFQM1Qz#-Sgb%c79yYYrX|jeE(YhVs77~^Yd$c zVMM0$iR>A?qI!IHU1b(usJ*bHCiuZrE@KJd7wji~m)A`G^G02>PySToJyC~WQg>dK zJHFMO?0SJ^(aveSnI~sW{`K&SgroikXA?I)KHGD?ZT(k|&E~2Q`dfe4JhCr;Szl*; z<?QSqio6zg{;9Zr^shUSG*ztb-Y=%9GQsSdMNX<r-N1e;=CQP3e)VsM&htt7&yQH> zMs-eVzSEHsxO-8jhVt_7VLk^w1-&}|P=r^UQSzq5QqE|uub#7BSLhvylY8p1PQ5Pj ztnZ3dC!cbLS<fzLNV+?LTR!UT^cxSf?w(5S_N)(_Jjcvr&7*}jA*{V(6BaRXi*kO> z3={vgR{E*DZ{f6nisfuAr*@hD`A}G6bjc-Eh)qiGl4N+{W{0yOTXkKFnHu_T2%gxr ztoz#(cK0jS{``r&G;cO*pV7m89v1}EPTKbEo&U$d_ptsXW*&Q<-;Y1~FHct&l}L-5 zzT3j9JpYeLeM@otopd!Hzc+R94?8&b?vzi9_$zBG(l?__M4N4b!k^bqUqtkO@DGyM z{V37mpR8@q1()x4kEwP#Oo*9y>b!2%il&7Notii5WqkPj^v9~C1GC)R4FrA_ZE;b~ zx{|N#EzT=jZzCTkKY!Kbpqw?&E_7Rc;7PPvJy#)fLGMwG#Vqx0^2Z);zWDU%)dw!l z%)A~uJU+6E2r;f@o>QJ`KG%J>Uf1Q6>#d;a>;tb`-RxAkEADe&OKK9Tw0<GX=wP*! zIb1WuME=AtR_FCsLwgUKtjkzhv9$ck)5mjoc9^}1zr3;U;a+Etr~WnK%Ty)#9L_~Q zdZDX1FMCc(kB89L8=oK7YuyQ(rII3En#|oU9_v(aQD(EBuRF)YvoDr@_F!Hx>x_xh zLw%<E6314`_UUa;JA2zrDD1ob^%uuZ#2(RkX_$HbNO)(AkNy0U*VvcY*_Ky75D9qj zoW&EgoUCK9ZQ(Q}-*@2)!?b1eG+3T4nkDF^+ho&Nn6c%-lMQW#UIAQI^@@Cf%h_y8 z3qGB{+u?N5U8%O?%$$`bds%iSyXcC3ohH9BVREjht=r}YNmJWZ@2G>Oc@}B0n7;iG zB^Ir*jZO1(|KCT+JHHsTZeFuStSe)x+%&e6JG_!(v#hS_L`<9NYVI$b`$ao$$>%>h z!6#JL>z|r_%qqdUw`X%qe|+War20!2t~FFiM}O>UytZdu^s1M?lkM%2KK{==9v30v zy{JO9zG+q28{PW(^K(Lyc7MJv!T#bHzpee8ZSwyM-*5QtX8Zr{Yuo4l@159u^Yi^5 zY`YGv)h~;&KEzmce#YvF>f)@|E;M>ut@&G=@~zTKF2bd+fH}(Wn>UY0PtCf8hH4Q@ z>WyVSuVA@*d%tR|e7<V;?E4c=oBiawa8H9JEY13{@1d&_&kA)!rhSrk%r}21$s>H_ z16#q;Klfk16`Z;L$Nz79^WWF!KDpWR$9=!JI?qPy&%sZYbxSnz`7b>3Xyf*$d?DKl zI(l+ARCH2a=R9$9Q9IS~_2oo%K`{g0c^iHUoYxPn-&dcy@44#N8s&q0y}EW2cVE2u zuzuPHAEO?RxsO%ZQr14Xr<3z{&Fx8D!tS#lM_yGq8YVuGJ=nxAdB!45bMce!w}kD| zk_deg(ayfJ<@9{h6NdBGY~t>JwQuvJ4p!Zt|E_%hnZJnlfFA2Svp#eCGk-m9zQ6y` zxA5`Keg8dEABhOpXJ_io$;#Wp^<rI5r-NpB+nw7fhT*}SAHPVQdGKuacGtzXul!?+ zD>L4|^<DK0g{r12E4_WL++4W&h03vFqtE3I?FCWnH78vTicdK6;NR@SDT<LorpI($ z|IIk=`${Kp<?cIA8+{(#T{BPkfJ*6%3k&D+eYE|-WHT!{Z~t}cH*dezfBSy#3tv^f z)h^=?RXl6kYF%GPhDwJCFTcY3)U~yI(G|0;w|O_3_f61dj{X*Mj_2Nn9Jw$H-D&0% zz4I-@3-$^h-IBXSII?tQXK9eVpYfa}e-E^GW*ifZTlY*lA?K7qO8shyO{?M@G$V|c zE*E&UQ}xehH=T*o{X~jtKFxGXORra*w1>-k(<9Y3<%5@co*Qhwe4^&=>j`INzgU%d zzwW!}JjHA3m3Z!VOn0_EluzQ1RQBhJPSkfwT~Y3td12>Lzr<;wc^91*PPi48^wd{2 z&!qp$y}fTMzs-`)j#S8)TNz#a#MJC+mA;b9gO`Ubl-9Fb_*|0sHEDnMMvv9DCJQeX z)z>e+ar_H|eS>F_qUFx1b~D9~a%uE#IJxfG5hI?LTP3-7mU$-T9Anp*_gnGlMt;MR zivmaOO3O9gO$mrwp_O**icr<&iCaGWy3uhxh&SwXfx*S(iXF_xfvrwOXD>fou<P2( zf`CPaeFwKmY;yeKI+3Z+(0!VsWZ<l$O8Vd_@_I3r+lSI3mc<GBE)&sFntAr7;@%7M z#5f{%u>EXpU9|Yq?@N8<N6&S?u74)*@X?EdfwlJ8>n*3;z7SutV%N8XhQMmUMOlX= z|2$f?_Ysdk*1P#rY#)6o(E9W6*2lKhS=&D9&JuqR&SE3;Z^ESn-?|<KmDT6w$}iCT z)D>-ZfZx&TbG`6`LoAVfe#Y(R&T=0+c5Y7D_enF#cRuRdQvJAn_er11*9zg4pIr+> zij*(j{O6vqYtNy5tEZ+HziB)ixBk|_yoN_1<=uzhERK5~7y6bx_9biX%g~7T=jJhL z?aJm}-*sfu$qw$;UOhvrm41s)T)tRlGviSD#eX`tZi~50ty<sKSnpfzap8S}^pc7> z$LcItZ;RTb#MnJ@y^&rnSq`2Qk14WI-^72v{XzUb_BluQ_r2IJe?a_!UeJSz1<Y0l zX1@7<de2;;T_MG~-t}iYx8^hDU);VvzQ5;0Xl3p8OR9IjPXD>~`SAmtQsx`HQ-bbl z@~u^PY9T-8bMWkEyt^#s%&50MH0|j2oXDC>wljY$ye^?u@XV#p<t5J>#&kaW)cVhL z6VDzssx9_#ZNGO(nd{0D<p;X8Z`2ffCQ15PUwX};{__8v2d*zl4~Ty_pRaAl@Pp-X zCexf5=Tp){w0+j3HuL>3pCGbL`2M%31kZ3oU)yw+d;4m+%WO-w&pz|a+bq1YUcX3n z@6Xvfp<+DO_K1gOU*4X$OZ8X6w1?jLxjh@qExz31)t~n}beZhuX{PypMcON_R=+lk zVv>wz`67O4-^I4zn-+|Z_dZFTswMsQW`$;C`No}=BD-%FZ7s4<kBqG7W?m@#zD#0G z-RlptZ?p5v&3$2zY$UV&rNQDY7rPGk*xA+l&wS#mBYO6&(CTQ#f0NXFS{3H;FIV&n zx^H`Yo}=0pp<w6C6?)6uS~ZV5XtS-aJ+k#|P6f+}wnd?zF3WmFZ&`jI>e%)>2eef5 zU2mUix%&I^>h6C(Uw-{~@^`=dl+cA8DU%mjw0vZKvBdD;M&m}uCaXzjr+X^%-_==W zs=Pay%e;OHyYw!Z_*#j%J^vrSsj9HtwQJvxihuh=_}9pkX-pS$o~5{7U_I|G$P9X? z+PT1;mfWr<FRWX;E9J_LmK8pKSJ&w-V^!@-<m#_Y<}hyl1)D(M@3Q1IPv1eaU$MKw zrsx;UmEGVQ8vSwew_|mm8S-~Ul`gz`rEveb`bAS?vy;~3+8vsenV#(u-M-Q8NK|aY zR<T2?*UH7Lb?RKF<o*B6n@`tYPyYPys=bzG@sXtw(z(x^7jj12(5QGIoc!3e>Ct{8 z@#(+sH+1fwI-&a2rFWXfXS$Nk|N6>ppr!Xa>~b+;N$$Gy`u)6fE_gCkEay1w6)<&D zeZZrHhf$y0>&{oKeH3`4sJPhSMQXIM<MoNlO(c6%Hl}<Ma%4-FKOU~W`1QYnirS0z z=KL88i=IoABu@EXyRh?MWY(KK{<kl=l;<jMTfNe9cJGC(gK_Z<t2Y<k{rBR@qW}Ni zJc-g>c~{$R!4hUG#djIJ^UI9y9tzO{&8+T|>#O&xvyzPM_jlVrr)M4e^277}-Mp2h zk7hJIGVFREVDn+IWY=W2*`7`39;B3n>ZYvfFV~4^+5YAG<oY$2CRDO%9S)S;bPYbY zx_#^J!V4mIFW$WLqwic;+?|tcw?ALD@;R?(A7GfG`UyO<`XznNlF;n63l|=Idi3bY z`i3=@&u)fffoE3V$oZnqtkyPNxBKjD(sS|1|CG*WH(ws*6t!IbKeK=F1utXg9?rMg znw>tnm%^7nSO5S0(;~+6F`32ZblUSxmY%6?TW<DkKmXtU<IBTYa=mj{Kb)PgHt%oM zh5fJen~yRqGcZv8%oMXMr9N_{b810ZRZ(GSZCzDiZJm+acl$Xv{J6|N1kRZE`=O<m zkcF#n+M^%O|GjuJ!{Eow)c-$zz4`KYg}v3*j9miVk0pC1n)d`YEG&O^|A@i2vlbyU z-Cq9vF!{qfaS46td6zy3RbA^?dUWrv8Hb;U>uxi#Sg(ILZ}#*vzfx82Pit%bTyMm_ z;RN4vgG+gQhfdutyt?77i_7AB!Yw!RQe1Ps9_Ve3s#>XXkL6H`*WD8r<v5r>id1?C zXGP6TeG%ca#~`(MR#>H)Pwv#mBFA1TNgey)_H~iqzAcsOBJ#Gay=*C%eE8(IQ?<9I z+05=a+sv20e{-^a%msBzZ4rZ=`<WMW+x&i1zhmii({uaed>-=pOt2H=Y4n`HeDTXI ze~;zz4WB1&*x0UCAh_g^;Diho{S^Ds|DW?tgjA+qTg9p~V|wA!uLn=<<?@)+uxCw% z@2!f7pSHhPxUXVgtrm+5yM^(F?f<vke*JA%byxPzr!3(Sd$uYHT)Thug(q9VTa&jP z>#pTqy5hB~{<`;R<NtiE8lEPPj0Ehr>ghjiyDc<B=v-CjO{eWzE@=wouOrh=34e>s zSm&8xclylPlV=2*=H&~_+W2K{>B^NRcc<N$vhmvKvu0IciWbRB)BAmjtPVI<6=wC- zMwFx<*brbeS1zh3Sy`-h-@M(AzTVM##P*M6Cx2c;-LW5LfnV#n{;fUgxqi#`F6pP{ zdk-Zt-+HpA|8VC@PYG9(1<$Q+t$m@H8FoGT?5S1u@5JZ&`_`F+{%e~hEfjg@!ZX>k zHjGgQm7EJ>f2xLXpP71L%`-loQrGGKmcQ1$Y~9U#$22Z5k^5b$gpEw2N!$Wes}H>E zxNYy>TxHH3p4yf3-Qa+hcm0yHoeh_kTY4qmzk05(hp|GCvEZ%gBA%?zuU&%9F1y~f z=~Vv*w?Nsf`h%xk`k$HgZfJRa*d_c;@i%Yd4n}UhRlD<pRUN-P@NT;PP&@Pcch)ZX zIULKfbR_pF1R40TePuki_Vdr926L1?Ogi%+{6Xq5CHMDhexLfFqSP?=&mNr{^*TqM z*k)U-zxVggOw;Xu7^i>yb)oS8s(Rafe=MZt#MH~ol{(*Q?0@PGPvMun)AjHESNCkP z{C2_myuXM43ge}gUhR+0Z%ZzneB@em$eRlr?B&)UbS$whw_5#KaNTFC>vvY&j6Ae4 z<n88lyZet#FS&aq`-QHOZ-dtL^z7S<dPSnA*K4<k{mY6I5KVu)*`#;QraopZ|6|^# zEsbN&l?v^h`?#?3<&7gJD_py^CA5uK%(myhzID%(LL>0(=V{LA%BR%W+BRLhlQJp) znZx>3XT^^FjFx$vc{?s^#mR`e3p^&beb<-&FfTO=yqU!<^C8zy<;z<8FtrL9vwQpJ zT)kXmUw`aymG|zoTsEd<@0PJSFwgUz%Q02k+>S@9G2*x7goQ`jmQAesJ^hW!^Xe0= zue%thILGV#;-Ad%l;PXy$Pdzy?~ChWB85yn?k`U=X`h(3KUHqs*De+7!Xr<5e43J8 z@3_LYd7eG5y11C&u4(S(ygT$au_gb0EVRo`_V-7@A9qUXTS6Ca*}7w$=+)9Wb7ltZ z^WStTv^;C;P0jLIyai8B_B{+yS6_Rj)AG}wqklN&EVk^Ef8#e<=s$nSGvU3SkzYRX zU)pwk(W1E`>w=PcdXfu8HmhCK-FhLWCOhJemBrqj57g~F{}xzrEU>?B)LT<9{km_Y zdxq`I=9o`f)A=$}K4{e&CV$-YB7dE0Lh!TOuNt1U#c7;Tlonm<Cw%l>zd+@~#}j0Y zPFCEwlJI5s{DmJRST$Vd9d%3*Wnx;=BLSMMbkyD;sgO9uNNlh6tJIU>J6AnqFnsvy zuADs2G@IHL*%jK8-HW!xFOUwr&HNzfQ{Fe7$!fQi_O4u*xLT)yx72TAz3x1<*cFje zA5=VDH+AzS^A}TRtP^E;u}j1A+{WcvE8fgmIq#HfZKY$O#`*0N#lkas3m(kK(>`+R z=xx)B(HUitep+VXm-=3RXY~rPcAWIc!g|^I?>!&>Ux-`1_1k%krDY<QrmSzD<>}kx zZmT<2>Tg5v+ShCbnwN^X-d;;)v%1VsfB(P&jgxiRC9H`pt@it)&rgQz@Ggtoly%Zo zZ}QLGOTu@boa^mBS$g}$*I(gVy#H1I`1ar}+79o3_g?=!{N5p7*EVb(>g?nOT(gt) z(CJC9fSUF_sPmH#W9uI+{((6?IsfyDcR$T+%F^q)?vw~BUl3e$H=ujsqELg{ru5nO zgi71l(%OoAq(3QlE?DjGVDsF%x6e|&3Nt<C$9+l-`p}!O^?b|KU6)oJv1MgiT2s&V zBepdMJY{LiCFrg2LHM$-|IVFjL@(aE%W5qpy20yu!u?&IT+aN*;u<GTGTgZ)$Rm15 zvyaMQjaT>d@&aTQiKxcPzkhafM*oV9CEn%5a}|}-=B;1i;F-Q8MEt(o+RkqQ%}J7# zZzt$1zIe*|#&j{Q*N&NgjBE93J608)|5VR+iRX&a^Uo(%f1PTTE>ZP9k-=H~sEOL@ z(6!ue7Ap2#=2I8`<zj2lv|7SXZQtsTDp!~;hiRX$ynC+p<hzSL_GgYSuG+=*b;cwM zrB%g~EX8K-yZ-%V$mfeC)0YKb`#QNU<C<gC(~Dm~Q<c|VZit-k*M3!Y70VO0Zk445 zI=^jC)N7>#>$V5<mtLG9`0&&(&PAF2n@ql}S@da>9JlV2(89#$Vo^OemWyq-ys8n= zU2^j6N+S`EDL>64S43nf?5}a2dZ?l+=$Y2iT-Q0x-(I&W{G2{(C-1Vn6SIZ#7j*T_ zz4^UL?24n-gN|<(mrV|8_uawaBE@aSEbX@ZSZ>#vkk!8RZep`mJc~PPQ!APHUMKuu zbm(=i6H#a5R?iQOHr+ALrhTRL=_yIgt71&<HEqjDw$0e|KmD=U@rCmr?P%0okoLd+ z!?U;hHvO;v`|R!P=YK)lTHgGhJ?C+enf3FWY3haBHYvVY;l^@qEp(>x+_TuLTMkG^ zPj5YV)WD%Lx~zU~;ICQNh5DxVx^>R=T76`d(#3|v3n4~!QokABPf)%sc;@$qY2WTX zW6RpL_-3p0pZ!x5fAQWAIAv&XQ-AH^s#M?1vuDM3)L7QdytDJ|+5>DoMaBDU4>KyP z*{r?(xU0JFVO5sOj6?MrUzFaow<_h82yT@wwf70EVP~y1s!lfkRR8qW(quJj6Cv|9 z!Cjx8bLg|^3%uOQ>%?Z^og}Jk^`uVY*&(60br#!oqf9k+v}>35?v;CK74d7!yu4|K z5z*=C7DqnLERxgPv*n?VE)VDYnu)UBPW@fo+!__pR%iYBuhlQO{vosM-}5s9Uznz- z^zwnGE3a2quMhpZ|NFNGk@f%YANd?^@!$L1oxEc^bmuZ|TW~EabXM586E15*O@7Qc zWSh=5v!>|w+z`%fGkfREH+4C`Kz7~lFKZtC(b<0e<hRchPFL2W%vV00h&ErD^W_7V zO5KZ1(?#U6#hRsAPV~+BGxN}cX@9yGSU>*oSKz@7XG86mk1W}*-(`~Q6St6^82*>% z=bwM4A8+)rzbz5H#n8^a|9j?w|E(H(kAKWPBGWFd(NOv?o;{yG<nQ|j3GeG8|KC3H z`NWs~s}^gXt502DvrILvW4@|u(Bk_$4Vp}HCijONaP{36V<WVEv-{d2yU^lS%F&ON z-(>di>E1MYeZ4k1T1~!Wn^26c%h9zHE>Aeq+VbD(WZez_YzdYh|5~h5HvYP^z5CzX zt&4X)R~D;qd?L1wJ#I$8`yUAt)n!YsY^c|t`SR=8?2mCFJ;84tJ>aOZk-H_fSBhup zwU0`B4|ZQ*PP(;Tgn3@}Mya`JjT?e>oC9uXR7a&OciWWmo<YN$DcizFC9v7F@fe%X zjAdtE*F9U7rJ8ZFR`LJCcA@C)hq%ukvYZyRp+6~Q(<7<;@1Z_lnNGNHJ>M#swrxVM z5qI>W`lTCe&b~TXl2v{5U}EGYubmIyE@w^O1e&Cj(zv_o%8Wg0cTH*Mh0am7y6pcU zDsXzGTLSkj0q@xJQARH6o4FSzHs2PgcKb3dxyei;to5o@M_76F?#Aw!ZWD^OCMr8w zXRq$Oa__~|HNAGc-~M}POt9?H>18ne{eQ1Hd;P0_{}cWf{IC4KzcbzVcYSw;r04Zs zL7$7AQbKCo^A_4lNu?~b{<6D7v8esfUYlQMH#OSK+y1FPNqau8#Xjf4H<vRmKYYSb zQy3NJ_GRK^t&cTIuU(jb%2%3a@BF{}|2N;4|K9)G{QrI0yt6<5=S4>~mh(I_dEd5P z;8jvU`n_JB`m$KLH7wP~>xA@`F8zW`S8n{V?ad|abh)ZceS7>1W*S+1nD(O@I$v2c zmr3w`2+P|G*UkzsoSGVA%<<!8GDoq(ZPCP8SJ*5kpAg6rm=^teQoG`P<AwiE^n5)T zyzxr-N+sTF|Iak<ER>n>>+AmIYySVv=dV8h`oG$|`uzI;=_k8w%kDM4ZO!{*{O-q> z@}xCM*&6q*&gNVlc=g5Po)wB!EMa#u!mac6oXPvPFns;P*ZLo>hpgJ|zHaBfB%634 z+0Q1&y%$x_WBO+Jn#upHWq#+^{VRWNzxJ>CLiOTX_20kE|NGzkQ_b(M`%B*G94(9s zwccPZ@L%+6^YSg7_2-WHO}^jfs&-A?V#3XrhVe&#srAqO^ZcgCG~@r*PW<27+-z(5 z@9@2Uv(ta>pP0`4>Hkw6^_5GOo-CUByK3dN;B`-rhK8C>x6UwCte(5`lagcMPTMdg zZ)L|-&olpS^DdN$;0Zs--JLq~#3vUK?djjvuH4qu%;WlV*JXya%NjCm>X!wnIqg#G zR?+*!_HM%gkDDv?eHo+LvQ^3=C!S~VZ}|9DNoexRV<z4`zInZ}7j`c76wQ4(WqF^E z*GlQsNueTl7-jR$|7q22JRftVqk9T(snqXcr7o-gZ%Ph`7Zg`KPz--ObMjnMNeh3c z(8=7(nv9brs{Sg>I@o=5PW!~LTXprC8A}%ZdC_4mEp@l$f|H5=q#n}~e#T2Ix0&0< zn*0d!m8$(Hd!aL_=6Usr->SFQUA|k@e(ie5t2YgNd#~GvyjuEkkx1CxX;b6a<a&A@ zYrM<wICyA|=8W?%+NJHktn=P%_Fv@g`xntQ;e665?EcrMuUI9Yq+w(E^i5fZPw^I> zU-gE@%O)jWKQYnE(pdZ2i8p-d*D}`1cx`hrH*gg7@(XhbDAM|~@do4X8U0?Z_eHgX ziUaiC*8Z2-zVMV<(J>n<;hjhGqMmC<v)yP5&ymd99L>FLTa)O;oE!y%_;m?l-%fM< z+vl+JV?+6(JqL=r&8lasS0&qBUV5m+Z_$Od{erRe9`4r~c*;2|ta=;71ne|kyj~Tt z#pAJHg~cC5)`E#i>0M4DheaAUKmKR%p7X2=%bzdpEmhnpmxK<m+?o6;p($BTN+F*0 zOJmpV2v<gh{3-vuS7+6pKP{DN*#08#^IrL?I*Y0AE{A-a`q<*N;3B`G=abGoU&uXg z>8s5lcRNC!8rMH;JKM6ZpLKJhUiMC%4sK`b7ax4~${sd3^O@(vBi4}MUP-?jAC)#6 zz2ttHKH<!~CHhllHkZ7e9d&-oYPHg7QPE->_2-6*v{>Fcn_2&*_S64b|9`uq9|Ytz z2%hrk-1KL%*v7Bk#(59aAAi)jFpu@tW`}I&1)aMqw0DNA*AzNAq5i$Y=|>xWq%F(| zJGK2i>&b7n6EmISxm;X#hTZ)(|GQcI=i~4GynpoRRmvS-`=#Dn18e_nzhAw3`Mv)y z_SSu#^FLRa-`tp;L+ynUzx}$xm6z6RiQk{cTlcPi-2vDCe_DQ4@Nx*3axQrET3>zf z$CpoABO0>#m-y6MT$%d9ePTey>-rnt4=~3y+!nacylJ)z!!eEp2Cju7zd4!8*OW|Z z-Ccd2#ke4mi`nL{{R4FwW|4CVFO>LIPQ)JJP^p-7PuSt4QdblEgL4byn>d?ZD!HB1 z-oU|J|8DsS=8H-kLQ=CCWRky&9bJFm=G7V34j2CF()ns|>if+*o(KOo|EppZ3Q;hr z@40v<{)}g@w#2`U47CgIH6-3<O>S9nJGyAg?&|vb`>lmN?=#<2rB%A*ZIV88*IJ~? z!msS7kxTjQVj1NJ?ZPtWH7~rocCFvONl`YbpxJ>Xc)m{WcVqhnAOAAU{dK_q0Pm;6 znjZp09<V=Yl&`-N^!)&0cy-F+pIY_oCe18DT-*+I99>-rep#0$Kh-#9u93KqHImmp zks<Mg;gt_He*exTKC%|Mf4pwiB7r-<U%tu6=1y4}c6!_565Z^bx3&r&<9(!c+r*n8 zY}?MSj7z7OToLG1*XetFmf2zcgxwy03%opwcJFY^lWNfPisU@5d5PO#^8}-p`|DW! z>KA;}`r^DuY4;1+nRAuHwC6vHuAQ}Hx{^qunP;ZJX%S}ryE@B+(v*^(ER_vf$^Xw> z(D1=0^@6XTIVIxc{!16gZ0KHW^7zl)BfWn;;`Rs3IL2>ss>*z3<6UX{J9`^X=48JP z;Ru=;dHjdZiKclBn{<|Ra}?~@!@p$8{3n05xrUyuZ>zX6rB6I@y28)Mj=U{w>)V$4 z-|~&#@uuR~x0X8<4sn(9ax8e(+xSjfK6!FrtAoYEPp@ChEf7-6xy^IjCbFq|+w;)A zsY~;%-!Sa4VJUULc-wpa8BaTjFA6blG#@UD|Gl{TayP$wq{)qs^>aj-%y!H7+i1mq zY`RsSuHo}j>1%!0S;qO1HOVd#P51hit@am5&UZ|XWfZyh(~$4EhR@`6E3)!A-|jM4 zqL{i;!clI=XT`hsLSlC6RR3i-qx96TK;S|3rZ(C5o|!Kj*4|vAUgxnScuwWM&nL6< z+}=;WV%ni8l{%~W9ovmo#)1PJj``oO-|(L(z`Uk1<cO5Z+3*1AdS&hck1GnS*K=;% zvN9I?(#hrDvsT+DTz}V=l*?@!W+Wtaiz~{zf9Whb`=O}jYhsDfzIXET=f}nH|9<>& z{q)6;%k{S(Wu4fmy87z!F5cF|nY#iKKSVbj=2*75eD3)#FSh>vxq0C>Ek5f7zrVf? z&k}9mw6bC7+pa8l--9=`+`plI#>r0=oQq`k&VG6D`VljUm!F^ixwi5^h=12Cg=jPD z*7uDsE8-6qTPIAN$`-O|&7r+9s|1#IpL%%5O;|tV<=ofdO|BcabWO~cyvoTDZEf7W zoJ~f39`kX}%j^$+JP}`{b$_?K-UZpN`VGOpvh{q+S0stN{GP)gD{^n|YaV-%oZ$LL zOZa}IPm4WrvP_|mdC`;a3>JK*g{H9^8$Ju(Ft94v({nBCoQi123D(xg+4393_b|>` zaWN`BqS*N9kCTRnq}qOT^2SE^JgjFHpB}F6{-DIkynn+Df3evcU7eON-Q2U6skoxs zVbg-2TnS#UQ>r(gn`C{cZ^|}?dx`TU<pX4b>r0h?+FCIA_$sXyxvF;X<;IHDhSJkz zo*Nd48=gMzy-n_Jh2Xc%qA#^S7$m(izN=fZ>Z$V8gpW$THT~~{W<FDU<7s-x*z%O9 zSzn0Kle4;t>(mOxukY?Y{dn^0%L_N1YQ5n+EseGEDd?btf2+UWzpK*vvgr*^r4q-d zzW+aN-PEj4G}t2(t7)Ngu}VmBdaRY|+0>s!`^z>NFIe*N&Fz&@%TA~}J}NI!il6gK z-*RK);|+^@_Pp+o>6`w<Xz$<bo161{HZEBIf#=N8DHDa<Z~I8=oeMH(=T}g@#MQ*P zi@n%BW=V>3SF%;I>wyO)GoFT>R9aN>IbrtxLs#Z*tkEkuWKh3b{fA?a<$Imp%<sK7 zf3tgv^?>FA_)H!h5Nm#xJv*4??B72#|II(@fA^a+e=XBY3Bk>e(;I^v^V>HuK4-JL zloEV5v;3M^%E=qMC;ol3(*JGf?*ARn_fJT@n|1cgGnSY0j1PXa?Xg|mIq}ZU-M#AW z!bb9@Qj`BLKl^hdXn?pLG(y}z=W_VHo)yN<FMbHW4hVhn_)t^L(Jx=lB*pAt{q5*5 z&A47F=@VnSg3I@Yd8(|8)^ENzKM?vmZI^(%;jYggl>~Dy)l6%sp25J+s^RLQ-~Tb` z)U?BrT+e3iy3M*=@wTAAjP(qBHU@uE4+tz|?=e`SZ!8iYXr0z{X^O_#`np-p%L3l7 zd~6)M_hL%Zoh{sboNP;SS{@zo5870|=kUR#KA{b^e^hTK=BipG{JhyPUxoY1)2JPF z4DS*iR2#V7ES->7XS48K!uv#-p!JU>*c;{j)<4)H;F0rrXGrL^X2q`OcD<UD8CSQq z3hn8Ltx{F9*IKkM;-~CPn?+9T-0SQ4UUW<hvsw_GwRiEHYgZN;9-n9babmgG1igZf zo97435Wlv0*Syt&EH9$1x4dXGeECc9v;Ga6px(dsZ~oM;OV?0{x$nF9+WY_VZ{F?? zdtCqit-Q_s|MyRP{`om7|Nr}c9Pj@86cpT?@QA%5!|VOCmS^vHWE&UVxYlsAtaWFW zgUH-^_7A_A*h-q1C0xI_^uL?m;+k|Kh5LZ{enoTNZFQ~+z2b_tm)bQgYJB$w2^BQQ z?C=oq_#o4`|G6BW%(8wa{e^a}Gmras-L!oE?JV=uXMbEK>M(e=+?lKQT1AjqZq|>5 zt;e33>}7w$!M#af)wAD6-Z{iw4bKeUZ}3Ur(1z7*kL!=7JgR4sUG6a9m9Ssy^1Pe# zUU5h@{rcXe>~oE$UCyWIkxGC5hOg-xBo)IXtS#rZer0&2;cqqV;=kqpE%pVxJadyJ zrL)YqJ3@Er&eL<9OkQ&;Jx{-OAxCV+`7I{D7tQ@T(c^H}>_yWo7neGBNj{D+U4DyW zY4;4-d#;9k6I`^H)$b5^Q5yR=U3pFKq&10I!C@X(mbytSUnO)VKdoFue4gxuJ<O3l zPQUv+Zrwa3J88k%I~x~?Cs-Rh{#rPn>$r~3&yqz>zf-oBz511VAu4=XgQs-dRIxLy z;sJkUdM;e?zx1Q=ege}KjpU=74!a6$@bZiepUJ->WZ}Ve4$oSoUcJ~}ujMxBiMHO8 zxYKWXw2wBpGOt+d^045=l)Xkg|B54JJ&$JuxvyU0u}<OXBe$bVCQ1C%oMY<9^|{B^ z@l)6rsd)CB<$(#jE+2}{yqPJKJ8NrNTket<>{oBMS#G|vu5i)$ZrhI{`Da2sRy3?q zeqyA1drLA)%0i1<{e5~V3_D!;#a7jK=;igBq~!j(aLRgORN0Dt_a_=N-^?oVtmUq8 zP<_4Ol#TAAolId_(z3GQC#(ZIH;0t1U6Fr$>J`tmlJ?X7-jb75pSI_I^pk@^Z`$r` zx5?`@T=`^9(2uEVInLL9r^N&pS=<%4Eb{S#kG07|zT<q{Q__QjK5bbib4cyo!mUh; zFV>p`JTB-w5H*8S>&Ns|rz^f~Qw?I+<j<X*7QE!(nG;uTRXAGn7;jHWvt~ZYqtC>D zM`7Kys?yJ{e0<MzWV5eU&bmJ7nutR2R*ePy)_KbpcN_n>k{=$~zT|$M@vf_VI-M_< z<i)dSJoB^eG<c%^eN{@pqw3VVza=UST>tmw@47j${=We~f27p$Ttn8GyezHu2R@n1 zUf2_L<!<=%`45hD$kiWQa4l}j0t@T?oF4sC&#p^z%)R&c(yvXwmA_sT*zLqC`(odX zxxYCR8ZB)bD(wC}VEnTqnn`V4srQ3#n}T#>yBx3Giaoes-oi&Fk(IA_UQMkEJv{G2 zv-UF~XJ?Iu_?2PxXKap%7xo<blO|+Ze30eGn@x6_io1@z$Ve<_T5&ZgXPNlRYp0C0 zUA~J>))N1@`o!d845zqXN3q>H%NOox%GcGOWA@F$<=SH1g1U}(^17G9{o_}6m-g-m zdk|1}%l)p+>$9^K&7M0oG5B0xXw8N#Gs45xo6K9iZ*3Y!w$ikcb3f}_IMijYtasRZ zX2C+s8PkKVi?8fmVX@sV_x$B@$+K@FPx^d&y7I?co;%N8m8Ip~=J|VT@_*HmM{^Xm zWfj`V?W~z(uuYDG%VxQsXQ5a*=cfm$G7IW@m)YNU&~)FsD`95avaIrny;m;f%uYR@ z-(LST=8x}>A1-Tm%Gggo81bpJ?PvWg$rxiH7qiskwz|CSD(|$8En&5ikPS04Kls%o z+w8J;P4Ydh>_}Vb6{jR)vr@j!yvt;(`Y(Fo3Zch01HyJYy!PC!wX)%Xo7?w@JJ+=@ z*DrYeh?To<tH%Yg4VR^VubCEj?&MJm-<Ew(<Z^xg@QE%^?Ek)WV&TzLxqt4*xlS1U zsSh)_HHYDeV%L)1WZ|$y4k~;Sb7uE7PK#}n&I+C8w(8D7CAU8LUnz^vH1j@VJT0Za z{)Nex%a3R4u`igg=*s1wpL_PYt<GYVIh|_SC8*eV`1Sf++uZhZEM4i|DN8>TiI_2N zRCynjx%$l4)te1(-b*hl+SGL+N7%_>mDH!8*_BfDPfkjniu$@%zG^w=3zf__?T1`f zta;W~q8IQhYWuuZXD?h`ai{H<n!R*{qr?Q(bNqpmHtd*n^Q^^e)~R9AlcJczGOse* zvDchjk(VU-P)d3G<;xQ$faY&G{P@etUAqsQJMhur_-@6FJ)8I1u8g{Kbm5O*qAH#b z7Fn!in9g>R;py}SRc6+DSN^X@Z@#Q5tDYS1Ri5^!^r8ok{-ob8_(GeTPE@ZI*f>j} z<w&-=*YnK<^`)YVJTiH@wC_f?NE|KSBfXeIy{;>HUf}=z4aO56mv(J`{On?$dA#rh z_J7hfKM$?W=sN8h`en*#jtaS-j7$a`4rP}Ge<XG>vUJM(F|$0=@O&V$vEF-)o~A`( zUBK>NE57@F_B{9SV$QECf|0*j-2@MAsYsu7yU04^lxNgMORw}Blf^p2q`D@Z;4$G& zkKFTSilzhCzqY>uCI2MLS{C&QFc|934m~&RbbZ_YFX!#%^&HgyyZQ3te^*~VJ$ljJ zS!%Q0>QAkFQ(8m*w|?i@pm8Wg+fd|9eaC|mr^&LV;)M>^&bT`1yDLjQne;rDOR)O5 zu))XO=X97jSKjW4KC?LE#<5fB_g;1G4#^T^w-)8r-&-Y--u{4flDj2m9OFWTScm_O z;s=&Sn!I>>SbEO61N%2U`oE~-pZAK-`V2R<W=-(*dUd{%K}^nk_VYRh0Uf9R-&vWy ze`u`V)skL*f90Y>tLCIL?%?z=?AY!QE8|~o`$lc|pOQ3jy-PElKh9kGIid8PL|^+N zEz_#|@*KC9zbWl1bXHqnd?sbP$D*9?nv$B2q+fjEe=4Y>wU^1s(aV$hTHVU(%0GHp z6%v;dtiD_9TPq=8dBRkhTV_{BD-U<g_eAqU^Co|=sE^~T|K7wS()ZW?Pr<2sKQ%U% zYjz}9C2!{yROr^&D;ll6?eo`=&EX2%CNWEXFrPpFEK{`dvX)zcM;RwicuV{(fg>-z zx5_K?mvAWkYiT{BcH*+{-uWV`85ZoTPPQvtKjfO@Iom$fbbrL6AGMc`Joj~f8U5u# z$E{WV8Mj&Xi$1LPW>d4>`2XC;_`V1A?)<Zt{#<Z>!olC!sfFU#3U=6fhFs$NWtlpC z`L!2k<^?S_R-SpsLPK$L%6XFsQW9@D?78A(-dfC$V=awKOAVVCwkYSsk2zjO+xt|@ z?&@yb`)b1`k=OO}EvD?0zRMr9W=Ez-!&|3MUp5OqzO80IXOp4miuC#kPMwilD@)#o z&1~LZn$xrYP_p>{))yK41^ZmyOn;yCc>jeA{j7h>oA14T{zHFug<bIS)uwI@nmp@Q z<rF2d<o`L~U%RjL!O1BT)Y<hl%|yM-iq=iM|Mu<zk+e*W_8X_2-t)cuzCUMD(ax;Y zrjxws$s#@Ro-HxcqA%|M%xvO%uU>G*0R_e1_Hr@3u8rjf`18t2K01GE(+&K2UdiCL z{+3q?4gYNZd%fj4UKb<MZy4w{;XCvB-4%^Nn=*9_6!iVunSUPr@MTBE#P-s(h-2Lh zvW@a?Pjc;R6dHs}p0#)TKYQP;!F55VRg=f=NQIzk(8bTLlP*2t$(8y!WxB%L8Ncfv z3f?$<SMK?T%Yqg)pPzl5t;?Xs*?L`UhlJyMBOW<7iOX-JKTTMYF>j)i#N~Y5%k$)a zFVFfbKle-jdH-F-`A5yPuKz#We0}eA+seQ9t?#_wTN(G?{NtbZ{~ucLH3UA{ur#n> zX~CTO+qbGFKG*G8P|dwOt3Xe4`sK2;mOF~G86@hNWEKi+u$Wl${P~d%*Z(b!f>Dpn zj(k^Sm05fs-RmH8sFa7`gLchXlUVn1|7yOReEjHVjSq=4_A%AXTAHvVEcc1Ob3wP< zr0^?k^Y<{7+wJm?Yc%<`JXl0s=UKX!^CUOJvWeR}0x#XY^=tiUYmv!^nsiJ5$fy6` zYwLaa#sBp8f9vl{Z|~iE@&4EF2ZdGlZme`kH}~}Kf4_V0^^J3n<nP_RYn!>{-rIKC z9W5$HL=G@5*z+pz|M%Ys3=<Swy(a8`6BTv-vR!1i0!NL(0UoyInQouoIxa8PEpS>E zap#0`iS5EoXVhm($@B9zALW(#t~*W8Vkh^a*7=K!n?eEwFEuq3)u-jmO4u#m+i{`v zWz|nz?ez>5q8T0ri(O_hFEl!HWs8rg!}7>gfpe8@q%Ka8GG{x{HM2m`k;QfHx$yXf zue<-h{<7(^BoCWm`lRJcn78xhd<Zj{`#mNlOz!gH!_JAyFTTXNaJpRU)F^LjTbk+` ze*0xiLEU2ORGWobiHm1UcYag<-|c!*-@X68qylo!PS0%fl#|`H-f7txBkLEA+db4g zU3?0=Je+*LOK)zKk~lY0OX||g0}QiSraPaT8p4z=l=x-eIo(~7$*a_U3Pe5R(L0*C z)Fz~9!ePy2YYs{kCu~mhJ3E#4Z=+FN?9axoufG<Y;7AloeId8^f9sOVoA$^Z@Tm9W z>&nbo7tpcd^3P80FQ*H|Q`0<D6<^r092Qo2yn1)av9i$eD&d+7FGW5a;?{dEEfd+u zEM6j*9=W#p*K`fV&4-yIWNZ>lCeN0WnB(SAE<Sh0FU{fx593L-jtBe{S1N6~{PL$F zW4w$0{@=;V)3tu+{VM*l_TTFNt1UlWwB}Xfx})^?S<1Sv4@>x_*XS^-*7upsXrG>L zKR-S;{@>ffvmakiZ=at2cYFBr>-l%@f7SdU{-sU3h=o1%*^&v$Gx?V;I;ARlGDv1J zr@!#t5<ab~w}rRda%WrSF2QM})U;uS$V;C(O+6jO?QssGPZw6F6n&{Xa#=?;w%xR) z<C(I#>+XVmFK?~B-j}sI&Q#a!Y;SFSXyhWcz~fIgY}Ksf*&h0?`j$?!+~*yY>9=3) z(b4j2O50k0|2UI>=d+XbZ|bLt*2^eJn@gs&`7VjFDHU9sxUZsc+vFIDXWEA|-K$*o z|9mzp?S4&hi{6Tm2lfe;F1MB@GRQ2kH)V)h`%CLpUAR+;x=Z3Luh=izC7I54&1d^x z2pxO%Nx&&s?`+|mWq-DDtk(_OGkv2jvv~bcHdlvNjh3RWzdyDdF;|`8@i5VgPpKr- z<kYrSFP9}I(_U2xdGA&9vGiNw?YU<9i9=Pr!gFr^Sa{$`l)`1f-bO>y=WYfc71IUR ztXxpy(aAAwO2@kEhY#5<y)}EE!X%B`>Nj1t3rqP6oD-d&<eI$Ww_4|_{bm|BxQ-i& zcTU~PDJ*+%Pl!fyRcebLgX(3&-;2|pf1e(u$1GhRF0Nl^(Q!fl&$KfpI-;rvq?u12 z@qQ7|DWsJ=k2_%NnXA_{=QTe{estzgfG+=(IM0-px<yfot{A1i=8Si9*QvN6Y*Th` z|MSIyta}edOAE<8->~+2=vI$+w{{k%-nB5f|59}B+e)n?jw#Pl;y-8x3QzJDU$<$| z${SM;XI$7(GJ{p`zSOzy=|A<DmFw+hOfhsZ+2j+pg>ln@r#-8FKD@M=T`Fm>MM@0+ z<()>k2UeCm{Lz)he~QOXcePqau5n;Y_*?CxC55ZK1E+eYFle%zi4C!BH1t@1=~3$B z?;*=mbqdn1d=)A%&YRk}*<E9T`u59~?LKdwhKp=}$(<l|CA{{=x+$SA_eTD_e!GXG ze$5Vt)II)(*?+k{SA2Ly^zez)X}=at`?Tz%?9_vcRxzjC4y<wWpWgmw+PoOs|IJ;8 zgJz$5txzSuR+X(xx#V4A=zLSYn|;&2#eJSVSGrmIu-$sg%d^fNIJ&y6aRKAkuwxN! zFJ>)nQ9il*!RaN6CPwSd9skyx$F_gd<nKLGIX^$hs*gA<&aR$NQReh-O3#7hiN=-% zo5HrQxHH4*uKV_De%=MS+9kJ)RAryI8q8XwBp=$IIdR3K&a-W$i^cEn)k>Q%IX}(k zZ$^Gr-I5%cqcH+}ZqE<j?6zHe%52kz#h<6;{bD&kXI{MD&B>=PJH=)ky0z}^dwpL! zzAvvut>*g`U+|w$e<(R$dWnb4MI$AtTg8$Y*?Rn()^mKnuG_Kv%eo%|(|13bclW5= zp~-QVg}3jK)sp!xB=`Dys{d1|<T<D0)=VidySUlYxoTJJJeF6EpL7ettP8rQg*0t8 zWI3)kxhYzAZkQFv>MHMb1=`shAJ%NyDR6pieB${I^$DzNc0Ic^@%fSZ_Ja(`OfD*U z=|QU;j=kJ|C8n|UZr>@FAOmCREQ83T6jyKAn@N5CYfT+D`$n$oR*^Nf_?fou>ZaAp zeRVXpNT2;QMKEwq+sri+rg@*)!cxEaQQV@N=9T5IxC&W!?6Pq24u5TRJnf(MyoFQF zcyMv8U?^X-Na*?EL=)e~I~4wA=hUZNYI089>v;69)s0iCEh#QHJa&D%*YkT(T+k}{ zFRM($XJ^%he&(^7aY53z$oAH>;DptTJ&R`cp6?LI3s3l~{I)B!WcR($lc%>9zT6$w z|3JCF^v>^PzPmIE!Xp*RA`h!rx#*o-(sN;BSj?ZfYxBOYP3w7PSNuEE!|>TF!|H^D z`s+!L^Nu=wT)Apneqn&jBZ)><)}vKPr<0mrb!EtWd2r+4;xqY?Aq?sP!3Ua?G!_<4 zu+tP)QRAG!^yR`D8IIGR-Y5K<y7v3F2W87<#)|sCI5ER%uj#rOJqdA5&#X&#WMBPP zx%AtuC#Htmyq#|y&=Kb9XTKLGwE2m^A(!c2E4H)OPrIi#zjEr0dvSB*zFW)gc>d&! z&$OpD@2?fjUm;p{x%-jy12dZsXW6z3&x*RQWgxpd^(;@R=8V1JHq+MxC9}0XloWh< zXWOwQ>%K_8-mdqmr0T`&{F?Lc^Y>XgsTIdO-O4dnDw(t3DFdG%d*IJ9J&hZNU$o!r z>0g-8qnYgXck8YC))}+b?VtYN!pi2)ePO+?R(}7AzU=?X{?Dl6g7iBdqf4u+I#e}Z zwJ~>GHeZ{n=`9pC?b@tUuP)up-MXba`tq+nla0Kqb&d9K-FtY+p9Nbt8_p50H}Jex z<k_N=RoHp`!F3K^mglQZr%0*WoichB+1aWRaYUHKep_wS(of9_|9k2?1CCZd5NAtc zIX9tj`T8H7S6{uVNVD_T{4(>|)p^%qzFYN)#=U)6FDonO_gwzVe!Cg#Z!k%146pY5 zb1LlD_dKEfkCNWV9hTU4tNW&Q$2X4t+udo~*MD0u=l5B@3#)DC?Poet{U^;;_HFa$ zEdTyP_s<&KxWw>nwe3v)xBPMk)_<!PVw(Q3XWH+!nvmEjpA1va-QFOUyu66X;KURA z%Z!^M&u#TM*cs~CAD_K7(`m-0EGC}CiBm5b#6;<=&G(oX8?`7?PgEz+sLfWdjrGa2 zoi{t%YuxTA>`s*x+31zCe%93u*+*7{ZJwifH8$#HRk&`={-8A%I=C|VQk6>1Jj<BE zUBBaflBmlocj?J)@3ro4_s%^uGy2Qd{cChI#7}9)lumSCroP_rbYYgMclZt8lIjx~ zcFV6j-_93bx}zs0G>re+Hk-*_0yepuW!CO?Qu;shTfwT13-KFgRX%;awcyXyA5mfd z-e*4*JpQb8_2$W^H)k76E1!7!4d>nHQ{N*kwJjPV>vh#te6985S8cs^!@r+Xx#`$H z@qqQ_LN&L%S1K_rUmuelFFJpP_=@A*bzASOiqjYTJnw|$t3s3Gmqm2Dc-BT`&RBep z<Lj9}mz1k>%7m*Pn(UCAcR;o5+xPoFFXa5=?(USgW6|S2`Rsa6SL&IFse8MhUau0F z+qCw;;jkxeT!-@N&CVZVQfGO?Jg?%K{6(&Z36>7AXAKyBZPv@n4VZPXdV%r}#p_Qd z1}<8$CgL)Kq*LNLUa7?=_;$T({C!a7$bo!b$5-qb@$Xmm7@7NUO7w7jPH|?4n2>s1 zO`wVM{L8J9R_Sk4LYj<DWpy~G)y|pKy(z8VbJD8SRW0Y-7vyEny-`1F{%om5(OG=q zb9$>8)P&a_{XDTY<#_f5Q}eH1BrN}|au)q7C*l+ESo+(eW%?%kd<6^4ZSJ1>p;H)L z9&2;d@yg3Nn|EzI!NFVNeP_waHL=EBZ=+cCPNp4?{wV)p&EgG*Dr*}{J@;SxsQg_n z)cJdvRaHa3700yK%3GHI-+bM1MLpkt!CT2sw#EPcdi3=B1qDklSnCVz(7nL0QL}pI zABMP>I*e;>XQY1-yc1pU%)mIlRz=nE)imYydPTnP>^*nHv{&?g$ylB#_+`sKi8rfw zo0a=*8g$#P3fepI&gXt5>EwN<Bt`ggxc!A|S<StB#kh6}{9M6O_IJbceVZ0J>aL$( z|4UR_`QTiWsISL_&sI%!Y1fdhpTV>7XSPeQuD~6xUsCDc7A!OIo)z4CXujviLq(fZ zL{<f6JXpv1sk%-0@%^UD-?s1BJOBRE(2dL4+MB-yPSKJM<Y`mo*eba2vB;rPEi2`h zdsbV&(3Xx;7S>IF@od3<L$>}n=dN|x3=9A3)lROrXW`u&(|0}i?)>?inY>mPc{f$C zr4=T(YTB(9FFw;XVM$z!L~=z*oxHcQ`dW!)mogUK>x{{D$!cu=v#jaVyPk-5OV%ZE zUEaKZ!lZ57(~8e`Utr-_JW-)2DJ)P-c=6*s@nJ=B$F850h+f6E=T5}YId?a3Y*}0( z*_6I>;e`LU?{G1O$uuQcsEhrsn=WF(Tv7kJd-d*H4@0!<S4y7CUv=Ls;1PS=lWC5L zO`qd3w;b3hK3)GcZ=ZtkqOi2ah1yjuwuRqgBf=ya_T=x-Ue>I9rDWrtzpn4?ir?Oq zen0O^*6CpWzb>sIvD?kpva6ck)mU$RD694g<J!Z;r!Lp8yZ7{0#Fvm)i%#t3UAyjk zD9iVP#q|*;|JGQC{+84;*}d&XuJmiM;+37dXWia6$NkcMRVTsz>8tGZKA&8@ciO#o zp>ajc>0O8KzByH#Uz0mg+UUOa?(PYO!Hn*&E&pZj6?ebNF(s{@+j-%19s84--@^?S zuXroo9X@q)k9T9pvj_vH<(3r|No^Lddo6Dit(an&Ii-K8_xt|;{u=uH^*_%4uljkH zQ7EOScYj#ql1owL8*=9EVQ<|~`u(2YnWw8)?3it0psjo3&6`h#5mF@|z8SW!>p0Uf zV|8cV5nXZf1;-}#Prqu(>{~DCUs0`kdxcahckt2Jb?@FrPBD_4-M#l*c)^{UGXHiY z|6gscy)N|EecNiu!212{RRS>w8Ti`m|GGb2|JTO%?9pS&C3EgQ+S!u6A+^B#sn5}0 z%NMzYa84_2iQDt%-S1~<yN_IxjlW#q)T{4Pw%&Wcx%%whe@Q)AQ4gD6c5(X^$-iM{ zKlk2ydSB7GY5QHL$V(K)?m0WDCwSQfJC1w*t3FOYV8yIle|CQA+12q*lOM#Fcm?ak zG_|*6*k(p(X}rIC?EYt4!*dx|-yWCRZ}WftwZ*~a&o?B^v)gk2llONU`QtxLY&X1$ zV%&Z8dw0(+KjHEd5}RXoGG%Q0lkUfIb=DD4#ih}IuM6?oBwsl2Lum7%PmC8YT1>8T z&YWnNn^AiH%Y+@GHtLh=CzjmQ{iuD{%B<~)#I~z@C6C(XBu6z*Fq3n75R&zG#oo`k zc1~))8D=Fqex0S0D9?EGVVm&JjuamWu_>qZcBwu%AGJeq+N0R_8xB}Erc@c9Q&0#j zT-7$~MgLx|zZ-X6S@bP^`NyyJN-4*f_O7tkejU4J)%K6lQ=ME}pQ>Nqv++^=@#X)H zt$EqoCZ9gn-t54q<Ed+=)x9$5b=d3M-8TPA_q-JvaeGd+@4fNyz@l%Ly?;NtyDuU= zbjz82Q|-jouzzyYx6WFm-m!O@fr{q-t-(j{K0mRc@Mhz+sIYG}7gO!F=<jd%`ebRL z&h|cYGn2LdmbddvdogWE=2eY{HWt%g6_?&+F{s;}GCjqHS<OIGY3jelkEQ-CGBy8Q zbaOgm>g^yoC(ggeyY#nDkNx+l=;k(_R{=_r>we@#pM1Lhn)meGHq4p{>w^l8`@G0- zd2G}Axv<4sTW43P&*PmFem;|0TzQ3cYFhqbUpwZtCvV61eV^qs{pp7_CyV19uiWuJ z@cCVk{2X@sd5N<QJv$z!S#a>@-I^_ze!9!te=_sy!RFnE9^{%G`N%un#g^H)UO(CG z!{7BPs)u%;wQSz6e2Slc7sv0}a}-PdUnmVMoG117?7f{$%QPmPyu@iZeW#@#>%0%Y zpER>d>(-}kzO}aV?4_5Y;(|WWcVFe~&RzG!({-ky-ZXKW>IMEcr)O1s%NBH0x%K|P z7JpCvg1v6Bd-Gq{ZrZ^g@ZYKNY|DY`9+ytn8(;Y!x{FInYE`!7$H`lC>$g2zTlBS! zck|bzFL76mS4Wq2Tx{Y!H)Zv4gM#TX7YtJ^wzfTuGJX>wRIPY5Zu0fJmrDK4<oc}_ zli0c9@=g_H<p({>w_PjoY`SNiUv$^Dcha-NT;2yvdnU<8EkB+9y={Kb4x6i&|Gs@` zl=kh1-iM|2tKLT*c-xe8_|%O8m${e1n`g3{O$gN8<h1eG;_o-6vOJvo>;c2F?UPHg zoR6Q_wQ|uXUxV;9dm5K**fX*H!PjNWyI(~9v-a_rlNFK6oFj5&eOt;A)|Y21?=c@g z)4Z;<Dk$T?AAj?^s>W#%>o;x|zsUch{^kEaCpU*2{K<Lb#^W{D>gV6`?AV$-U&u^f z*{t&VW~J8`!sKcNY&|ASSm*GM+3zxc!Pzspi%&oBpK5)h_4kC8_qD^_BGX-5ofj2^ z9NpFRX!ZY}zvWV+Hl5u6UiPKEig_J({eA0Szvo?Fz5o5+-}kR^elXvw5OQ&YKza9N z9`%n8>edPx?ay{O829n;_xpRd)H^f$nZ+p-{BpqyvtGqF*U!HZyr%tn)$6+)Pju$q z=HA~BzcHh?dqwLtZox%yTUVW(IPuZ439nt8Ql~xIDK4NK9?4h!&u~(ujIgGA<*T&r zxy8$`=~`bC>Rl1-6ft?rw&(pij_>^+ZnCJ#&M&H3DEw*RZqIe$v-w+156Hz^^{<So zXFWY%GjH7vW9jqEOA3rHb@8*j{2=#hdoq{qn(Ui5GYhUgynbU<g3GLXlU8(WdiErK z?_DurM=$mL<>Bem?|wReS$_9vzJ`1L&-2f%_pkp`Q1kQi)lcj9%f`={7cZrLXuf~{ z`hMRDmdeG;%r2!AUw(M5WA~2ivzv39U&$PfVwcsaFI%H-(Z1Qnx>Pq>{5b1|Gp`B- zciz=0s=l7Au=-h9@uiG8o=bwCol<67oGrEV+`PX=CJTC238&wYad{!(x4x}qqG0GV z)$=dU88A=1mn!;hkB8zRtu5@lo%3EZ9p}<}-Jl!vs&bwAu1@1);Vx_DrFvaR%*)&C z^jqylMb|8^udnKtvn-3cw&Y9Og6)!t;lfryQki>aiP$%MI(qT@#qRvw8mg=IY|f~9 z|M1e<8i&T_;=&w8-R+KNvihnI@BD5Vz`IhX&((M>Z?6V(xSjN;dynF+Zp&1LN3A-p z_HGXMwVmsp7hkG56{LHwZd%&B(<iTFEV_Dsy22m3s>C(S!dCMH0_z_|h&4)XmRr4| z<D&!Dw2f(j<ud}MnU+7|%4*`?`T4Tyg6YSD%?;0c<*co=U)h`%{j2L~W|YI70KZ8V z&n~agxA<YPveGRs_L<K`&5e%=|1yY5gzmo<CC3tZ|ERLfWJ5D2%PEQvs`D*&KZ!Y* z`0`h{+@jf23ubjbxVid!ynK92ea+u~>(5I{ry5j+%~y~2?vOdUVpez)PsrVJlgYo{ zS-%s#zyI0(|G)Puf8YJwV52_&EhWPTiswVu3LY&yewLXn_CU}j!`G=cFAe8SIK2MO z^{N@Fwr51%?u_SK<o8_S(VR-PsjGs!cS|uOYOQ*`W9K`L%@?m--&%b6cT3>vQs+}~ z_0!9Ev{~+jH|N}WTei9K`qyb$Z;z#k$M37=dp!N)lN)9y-5$P}#y?|`H~&t9^QHM& z{Cn4~;=S?Y+uQjkn0deL+LTw_`l7gO?HBfQkL)s56eKh?-Y(RS5-hb^s(EOamI8;r z*4pHqTN#9tc*LJw-uNKsm-ORH%4d$8+3YCu#plP*`X_6;`|5Wa=`1!cn)PyVpS6Cp ze8Y-K=U5i}_{ySW_95x&`BR0RU6bpdJMgCmn<dFF`llP(!M)&mn`QUf|192Z#R)m~ z|IU|qO?|WLve69JLz3bP_&3huG?;zrfp%SsSo!Hsjune9ocx;+oONjF%Tz%_-Dk#1 zA&E_s|NHcwGi9w;mG2iR3}=2Lm)c<R{d8yPvJZMuGflszC+DBtGhh7J&sTX{9F`y1 zap`4Z-Lm5gS(_?Oe4DeTJl*Mg<<FT+D_tbpvJ=irImpD^5-4guP`Lf`)x0IWE}BVq zY%e!oVB-DuEx}=0+v@qtSAMje!l)c3zb<LP8h^Ej&j<F;R@7msldC_t`vMd1z5mIX zJKp$x@+xdR{zT<y(c2Eu!%uTo|2uswB`$o;x2Fe}zkKp8;PabF(mla}7hgvH|Mcbw zXb&)l$g*z>_20SMU2eN#6mv}}K}X^_&p);2Rh>D~`&g~E9Xl*ND^(ztdCB!2j>ljA ztTC`-(7p4v>r{d6Px~wS-_1g=)axg+OPr6@U#Ks0f2IKQ?{|6qIlE{6-Q%(?=<}Pb z&)Jb14Q}~Lzsa9#$<wy{OHHiQibc1cGjc82@bJ{F^w7wQm)>y6Y<W`|#u|L1z*2ra zZ+iH|proS-qM`QuVGOOj;kFWP$*%8yJ-Bq&F*$PeuKgi3v!)%}@NIANi^-2axoGCp z@8J1RuUahGc<I5lz56E}dKSocowsrFG<J!tq4RA!E<{f|mmAc<nRsxI+ruk`)|Ls6 zAD-H4p>!|9_FKVK``@X3*Pb1|D)5-q?d`<&)lWCa-&(O&R`2x>$%Cv%PS_t^9Uj8H z#r<G;z=~5ETdsXulfe@Bxxg_?+toK{Lq~dx=Lf6$rW(HRQhA-|iyJ+^CA|CmTlG$2 z`a{7dKkZj51+vdn`hN3DRrcOedA*oqk4v-nx`eB%yL(K~oL_m*;#%j)s>eU(S?VzQ z%cV|wt-+C$6}xVw22+$p^z)x9drV$?X0-2oQNi-gHsij_`o-(SPsJ#gK7819#AH*> zPe*ad_1FLQaMb@Wa>=?95UI|+V^Z~n(&KwMZ~0qP=<E_db%?!cM~OFE)efH}S(8;& zKHT^;kze)n<sFZvi!LwfuX(mDW^dxh*)<+HR<|9ue$0=}5xehui%qMJA?J?E=Z%sE zHmdJ-H+y~5R(;d^gNIwU?oy?s?J~pWJV93ex6SMaM1qC2+^$ZFh?U*4_1M*r{E7Fa zCf`)uqWb+PTg{&Avz)oUFO~lZD5s`>*Sx-g@6RK--E(fJ9+-0L&F-~p3%5rG$vwVu z%UDtEmgbtprh0a5pN(&P(roO0@StnAcbE6i^WUcLbz>H1?4N$sjajwcP%9}R`_F=% z-xp82rXtcWIlb%H`bwu$vz55T*R0TKSZ1S`Auq(pY4_#RCy_;`T3ri&-i~3kmKQ$6 z*L5u-`_HOtH?m5yb9U_aDr#I>llm=ACM;#j@<}UrH&pId4|dvQd-{y;+Ji|s$Gpz3 z+*mVb*^X-gX>&d=a17fPzKA1F=~?~s{U6?Rf0?jl&GQiX{0CiM-c)?qu!YUv_+o5b zN2#29_fu(|^LlRI7aR?;yZkD-KIhaO+1ygo9^Z*PPiC4eJsPy?T37p4b2Cm^;hQ!0 z0<LVW;pdMlYWgI0e&U=5)9wGf<an&nrF3QcZed{~;h>7>!0T6k=X!>0*KAOet9R<K ztC!Y&@3E@?^v0823Gvcrr2kIZJ@vPb^d%<VbME;&UP-h6RMk!^%?aD>qjzB{@8s9K zXAbAE@AHVdw>C_^I$KKe+2g72%I@9h5fCZAX?^O&#@R3b#+&KB=UClu&0YS6=Xa3! z2YIJ#z3Zhs<|qE#kuNj8`(l;o!tGg3M|7ty;Vw(5cNJ*!etVR!Y{sV_Z5GQ#w0f;i zi92yin=X1=XlTa&!cKf)@od}fzNk&LGeYhe&zhirqt?_#yuu-VXZo#%rsK~TWgpLb z?kmCCfA(<YLEB&j*8bk-$sgCHR%-9HIV0#UdEu$|qzC-&+$I+k>Q2lSSwC%KW-z<d zwJpCGZ1vNn1L{BQsf-D~s9_--TOO-rwY+Y(&#GM&ZjQp|jm4)4$}BFq>~lx;_8CoC z{~U(RUVc5&M&_E?)l07|Ri3>ebeBWi#IrA~m+1VQ(7I*$y%|Pt4OOH$<!1Xo65sWv zWt+2Jy7Xlx-f5pAeyRWRP5xZrx8Qv8<I9WAFkCmOmOB3IqmAAC`s2scS99+OnD@1C z)f?Np4u4!OADcaa`^&87KB0$Kc(vr}N$B@3Kg)JoX5#x`=MO2GC(<52z0YH}|6{z< zZ)OhV=HPQ3p8H=J9@%_8ms>Z0b=%V8b6*|ldNSvz@IlG*PdSe~U%6v;tYGUNA+r|# ziq|gBvJ5@B_FrX8kK#3UJIDW^e*de#wc0C`e&vIfO-ai4GU?BI&!ihxUXhs-VYgT7 zVEN9fHR6I*!7S6uHEZ{rxh$~yr2I}VogiVo?<_Khww$tLQ*OGan%K5V)8TEkdKIJW zn+;bY7aZKa`i#NXjUONR>|Z&XO{_J4Svc3sn$q_wl22D|e6C`ACaHi~$6HiTw|@T0 z1*}p&&*g1&Rx_u{8txSd(tcN^lf_w_n_;-)%}1Zvmzj9$e*D`#J^Ng~(5gjK`s*JC zt+h~(Sio&pws491wl|-Bb{MzLt-iI<(ok@>?fQpNvBy0npUv*Co}xHUFz~Co-%p7t zua3XF`R%e>a<NzHo}`Lt$J(BI+4Y~Bt67s%zv<(~fA3lIOJ5iy2g`EX@}+KxiFTj) z^oQZ@ZC^#wUa#pp+j)}tl0m-1y&22PT<&DpTz)39X}@7|^0ighr|eY=GCQ_DO5rz0 znzvV)+WM9`367_-UC%$yS-8c4S&1dzD%{!o)3YX{OX4Xm_S@#%kJ)Wqt~`0G_|hqk z5AF&6?f6!I_iLDy(MyAls%_WSEc#%o`}A?PmFoYjEpKn^ifMdwC%C_VQLvKeytMPL zzNCp5nH9_mkI9b?oxb-68+((U_Zj26Q=Pt;NJx7gS#xpef%UKV^cPIxP*N1N{A^== zrod6wI)|}3f@_|672leTjQRob{vy+TCtqb>I<4T<%xeKZZq#pi&5#-!_kkht)4N-5 z)ilx#`X5*nA33_^#EWliMwUU}mhQf)6ZqlAiJC1ZZ#;NYneop1V6yR%Nh&#KZ^RU> zlev}hW?iYU&Lhu-yAE2|`V_RwF8{D`p-!Z=+4B4z^M;AK29hG?O3!DSE$cm|wma6? z%)4&x`NJjrT+_`r7|Ci+u6NrI_&jdGqm7)~mOkP<l<YGz#B^hD?7Mj@Cz{F3o}aNQ zs@#(M_5Q3Q+*3;QG8ZtZ-1)KU<@5TMnJvYpiaxgPo%u^XZ0uA|d3sjkdHUiVmCk&3 z4!mf6^U6?a|6>swGp(tw-<Vb9IAn`i{<*&F+rE7}oLY`1{gZi~X3Vwi=98v%_2*@o z7yY~YwDsZwMWaPibp*}{WL4?^FD$9Bco?+T{?v|u{}x+bSw5*RzHYtCwM1`njC|HN zqc_+0d@jGlCt{TEb$nLvnh%<})6KuSbaRSk9J&1D=aFZ6TQYpyD_2aE)#*Qbm4$oK z7gkS8KfM<L367_ox3L<X4@~1)aAm5)ZvpZ8wd$Q|wXR>3f7VoOZZr9kY_TBIPOtew z%~zE@Yd;^GCpaN<*|X&#J9N%eZ7-fN;pW0QKCicP7|pX$Kbo~nApUDnj>=#0oeM5+ zYc#34)#BwZe86LWOVHnGn|)s^23^kiQgdV5B&R374P9xkt+Y*zRX=37JbtdcZFg|T zyk*DPo_E#%_mN=Cytr%GPNA(P|0gY3Ja0*|n~=oz862sfCfV+;UAN%E#*+#=KZ(wn zIQK%1lgs4!XY+-br1B>+%)F7jb^TIFkqY6Nr#QMhU6^K@tKC?Z!B#$R{ruxPKKEX1 z{200S?W&T><pSn+)aN9G?ydb}Q++L9#h!}}|6GDMX)QU+G<QmUL36n7?rNs@>9;a+ z{&_vqZeMO?W}foT#_szf-(%07RD3-XxnT0+=PN%Kh}f7Z#cp4+koA)5oPfsJ7p5-U zrDB}t&#bqiCT#Wfi?=qeY>#`-ZFMxM?)r__y}md87QD$-yky?lyRWk1{oDoH?4qg{ zB_7Z4&Dj6U@S}6`&8|}iQh(Q{ys3M$NOPJ%wWX@X#s9sFGPH9dRh@Xh2g;TirYl>W zb3MHG>bENCX)Gr`2CY0}!KZkt&V1#<4KC^*{+OPVTX~${J=Z&#b$8C6(*pBzSQ3=W zzNN*yb=b}IOe|2KEN^$lgV~RAY~P#an|se|iZ=KCkS92y@rLFhp-DLhs<=zi>f@vO zFYNnxRHd_U(n6lXz$GoKMQWo?KX9ul4?9?(`v30K_je3(nVH!V-6ca$Zt!6f30W_n zB!6%F$sHRco(CT)Q<(Kz?Z#C11^XXv`CD@9+UrAW#3zOZZ{J_IuT^fBSAv>h%)vJ8 z&}hfm3F+TB6W45aST3^Qg7CzCnb$Y9<Q6K|&u^S|dDhMQw>N5wt-V?k9(`LT%Wa{s zrE|nWLD8UviqE5Wp5MoOe=Uc^tLxcat&H2(m!|E#zhK_V7$LQli;UM=_3xNrXX&|{ zvrKnkQS__Q*Ri>&#Sd>k4Ee3xd9c3RX<K1XzKZrWcen4aau1&KXZom`FrBmL+zP9^ z4l!3!UDfJ6{10yqeXwSsLgdDlyH$l7RkWua(7wJecj@krcdH5mr;1v0#AuWW2ozcH ze_E{h>gye*HOqtNa68T@+If8cwANUD@09%y^PU_^J6CaOSIE;C2a}HF&bfIay*F;| zuYb7u^2LRZR<-KAWKD0$Z9aVZmqz%<n_9Oz-oLs3_pA9{-Lm?EyT4B#<1_o1p7TvR zui#eZ>g!J)w>>>4!8q%X#O#nOoEbX2VWP(-tG}_kG%and=<dna8-L$iI)!EFgRgup z+!3a8Hoa^Ay~Xg(jQ34tDZMu$5AIez(3%wfMCAUGd)xI+u1IIx=I9x_>hs?_EWNGW zRcbynw}v~q9bEqIr>sf3xnX^k*w=Lj{H||*d!RLG`X$Lkms9&594`IN-Bq=AcgfS( zBax>+ww|`z?|bE0*G?wuy^aekY*jVq#ZR2Ec}b(D_=`It&YgPgOEfc*7KT2!6Bo7M zV7c$d4dDsX1sy9db<JA6o&RW=kcl_9NySFRvMxW)^H;Mz_+*&RTP@3$-^gZfQr{+) zaXhaja~5}zt)Pov#jQObbT9ZXlL%UO=iI{W4$bzt9dpkpioUgav(9JZ-DB^LM!jJ< z$a&Z2f>_bEU+?@lZz)(tAJ%iZux`?3Q;Y4>ny&4ZDpPFQ7I^L*SH`raCpo;k1sred zq?dE=+5I85V?plZ&AVITCd^rzD6W)o`^lTW`o!&V=e$~5Pi^Miwt4BCulMh2YD(9| z1ty7anH#H_u3eC4$oe*2`vz-n`s}A~)-|MQdYlW}z<ul7wi7q+GUb2%s+VDXTPwYs z)3!Hu@}x_Bu@}m=g`RsSRhIqp+>Jx}e{%o)`g~LPwPy6qKZjFG^45NQX12@tWbwA# z1h$`_B;M%NYp=Q)C3`d}JorT!=N{e-yFV?9J|MaH=sF|Ma?YI&Z-T6pKHB)5)Sq*| z<yV$@#b$lY!w*Cg7HytztG7#0vd~dLoTFbvQ|y#`!-I1oEprtnJy%lOq~F0~al=jT zNib(nAnT#RGp<RCS7+yS|19CE)7q7{r9b;-p=A1!Zi%!#-Sx{%#P)PQ5m}xo?(6CF zIa7RTM31L<?Uw(wng0p}7QW`3>hb^l5jmHVmT9|EJ~u7?drZCQ#kHBYjb=$29h@vv zW5lo2J2&r|)$h4$_5MsKliXeZ%tecHWxZnDw2ME4teQ?3opLr`YR)qE%l*t{vnOea z7jN-jVsdkLcC5qpm^({k>ec5zv@t*PUih2f&IMU@hh{3tU%eHZyL0|leWt!AkApwW z->uJjvsZe9^vU_G=QmI0OiRA>T(ftzcmeNy$Gq=5LsGhq?Xu`vXmjd8tN*Qw?h9C@ zWR`EQh@0Q{dc)*m$<-xS>%x-DomrGKXLj%K3Cp<WK1EZ>&ElSwWVchT)~pTnr#I`U z1|JgfYh=zg(EB*|V<pqO+eX2`+IK~*t<%Fl$lAC+U*5WD(ns0T4oqcJ@~3Z4{aV53 z7Sra<qpmG<e$!9WqW6m@#|p?eZdxR2?Ww16+J4{JX`i0YvaBv;J1=O?I)QU*!qsVO zmv69*lrB?BKmIB9vgzhob=Qv+A3Z&P#p-%~zwfg*U-)~hRbRw<vsRwEEkhZ2M9lQ$ z%|}Pqr*fBld+LAlDf{BzYs+UYFrGE(<E9-P2iDd6yj=R-QS-%|HFMu{_}$x7vM%!Z za;NFiET3W@pPtXzzWc)8AAC7-wa4w#jgGDCoh#H3d;9c!_73X{e}Cv5la#wOMawH? z3P)U5eNSuWw&U(6^poG~znXOOn%~u?FZ+_-|9F)2UVe3Q=GK?xg=dyW#ux1U-F3yL zxLM#p`M1<5Gq>CO|9|hyZL;Ic%tgUPSv~jHy`TD9bmybsdB&x#M|zGuvFQ66fBjF} zmR7T<1=n|RY|2;o%@y=ZcCGUJ1AMv}=lphr9M?Q*bmv!Oedp=N>-5rWCVGUoZCLqM z(CQ1P<_WO{yMMQ>h}O$9>koExXVXj5awt0V+2rEsd3SluRSr4)PUTT(|8sfwbKx`P z&;L$7`)=~pjn?nyzY)mO5ZNulf0D~Oy?F2X!evL-R9@e$#y!oyRaElnO3Rd+LMx_e zoDge}e9WbP(<|(Hb<Do{Ek|Pi{o1})r0QDnM#a}_pII~HR!g1>(kMGFy(zA7?(xmL z*%A!O77M0^oOSl!e!E1ZCD-+vj<wVCrw5C7dfaeguKpym@bRtA?+%|PN-5}FNN75I zNXOQq_2{&VHOpV9{n(m(T;%Orwg&F&4Zq$`y>Y=tG4#Qox8dG<d2hU|deu|kUgCS3 zGfv>XX+pX4v+Q@1w<fY5VxAN$vU2+2hU%h{@Hb~pY(Ko6&-!y6W4y*=TTQO+tpQ&W zo2z7RXiv4)QI(xtV0_!%u_)~GX;DwlH5C~Tj<Qw-8{EvgTT%Ux`;gzqDILDwMXx{g z-rarom*wh;W5IUw;!~R*JZUjr$+9dbwEmB4@7zkxncF9PpY?I!WiIc|*(OU1baqV1 zIQQA;fY`huGq-PfPWlgneP;Gtm>Flh@vL3LM5W6*M_&ow3OM{HkmYHDp5MkP`Aw4| zbpr11Yk8nMUDkiGTY=3@y>3tA)}sa8>MAFLl@1jcf895kC9$nwRY$@s`L3v49WIYK z-g+LbKYI3_u<$(T0D-cu4$agJWq)-Fe15%NKgIEk*ADKhoAxKPs2u2BSJZTD*So-Z z%c37$m1v2bry4O)TXlod<Da)|Sy#O-Kezv``EAc=={MSPtIPYnxlMLF$@IGULzdx* zL1gRPjH<+y_e^ix^qR18cbVgX)06+VXnMFa&i9?nE9F<ezv+>*^l_ufm#)pa-}^p2 zi$AY$Qb6#LWuMJT*<;UC2+iDk__3bUn?uQAd3|@iZp=&2`l9eg#n(ed?)Bv>)pJzr zY_{?JZ`!@JF^@ffSEOa`z3KBrYWcQEU*FJt;es_w%!a%<Jc}bHl%2c~vi_sFozIFb znje1KI4%$Ay7NTxk72$4F&D)Z<+E)nytsDHp2V|QGxfN!PcW|wLlgIxSw>c8mv=n9 ztSHznDQK9;)vwr~^(N(E*kapFqAWr#mVYa?|L7jdc_(H4=cDZ5gD-S1WdAW_*{wNm zv7%$}9Dym*<vS*P?QgtkTVd!>($W^=8`i6lcJh^5vZKJvw5)#$vuA#&m)Ki7FD6xG z-~KsUMRR8c<SsDyJ-1NR@cJ>Q<fT&cxx7?%Z4LZrSoJvkNoB;0qb1sEtK1!5$BJ5i zxNh^CBl^!4+hfNy)8n;w{Ptume972zFt#}6jHL2L!}qzGcg1&a-l(w2@SM(^Ows8J zMci*3S$iO-kL6BUOR2v`#Ik}}i(2YEQhoV~q}OPdAK(jHTYQZvDscU^_h*>geIr$h zr2oV*N6p<A?dkX{mbonVPuR8JJ+aJXVqNCp>o<0(>-yPomjqgToZ%c{n|;<qtioiG zp%kax)|c86^MqzTtk`Yi_+BBM`^_(#%+`Fy+Z`p#KXM=PlWKphusA*Nef(!d!5)oz zCGPgOZ%vEME-~@?ohiIhxxc7=GpDt#=+fzYC9Hj-x0l!6_qcj@A*<A%4}Z(`!%s)H z%Rc6O+5Ry7{5Hn5w_d(E7jVOJ=25-8M;EqLtrrP1aXV_=!TqJpxcH2PqJ`(yH(NvV z&q_VN>~<sf!REck(yz%T+&H;s?v{ybZX8IrJ`rADy?fzpp50R(KXIRvBqq$b{O{_L z$J~9wCR>&U@|<HV33<S3G~LT&#|N#yI_uV#FFX5e&GoaU-Ep$JKmY4v+^$)6M2cZu zZ`y5vQzuqmKi1q8%(c!+K;7G!W8J2tZEM@g`n~?<9hJSHwr@9+fu5nX`8?}Gbz%AT z9b5U69Vc*~XRBYiP=-IKv*z9JlGy#`t#b{h)u<b2R4|%-H{QV9V3k`WlO7{9y|qxC z<+$4oPbJl-Z!8Y9mNl;PdARERn(cv`r<MiwNJ<H9Sw3~Y?ON7%a}U_qzkhF=cK*FT zx5<TEzT4qfHW+h?-M+Rv`F+goql(4uB3rxcT;1gx%`OGr$y0EszqmRf{qx<2vyO%5 z=xr-uYros6<P@}$qucp1$CRRN4@Gniaw)I(lNMY5|Mkh_ub&Dv-sIdqd~V0xHKhz& zD;>Uu@ziuBu9{UYztw*JB(aPIHx*>8rwe^mIa;zSEB;~8ilne*fmhe0%J!Ex9Qwm# z^F|@gRetr!U7v4e?|pte>rrw29bMnx4@?)PPGEVs*6g|Ng$D&5qKAX4UPwQU+Bo@V zfo&0=^-O+Ytp|RmV?HlnU;K#8@o&HG(%zqbT6!O5tTAL=z<TDqcJPfj;f#~nJd2X0 zryuIwXsmu^edVTGtXC4sbNV)yzO*X3%@NkCu<WAh!ISw-TA!vJJ>p`X_1yZ`dV_j- zqxtXkd_&&K9?oxMtN%CC?1#&iPq8!p7T^5FdHY6g@WZf6$95GixVzWl_C4Pl4Q9vu z+U~N(DwJn#vAMY}qiUU3YY(&St#DzjvvX5iRF%$}znwQJ_};M_nJY7L%Co<TntgA7 zW<FubwO>1(w@8+q`oQr<Q?K)1W6`x2mm=P!d)KpVUgWq#Jl3OTf<jp0&QI(9*_3j1 zv5U6cecQ5OwM6s}u{^D59=s=6&TEJt%UN^X!Ew`+V-hnjRD_k6y@(Y|-IT9V`Nt&I zNj#&#Q)Jm!iH7pS@1`tqVXRoa!PxAFj`vz;-Rwg;hM~23F-|LFcb^N7uYIbWT(EZ5 z=90J#-Q~&kdGc~kF3Gy_Z0JxAnHcf3X@`OEgN=FdZ5^xF=k{%tytAHrxy!MpwA=Mn zA`aYNv^y>@y>HEZWw-jm-{BiwuUw1XoR?9y-(-)LvRF<29clG+9%F4CzdL&-D*SJc z5ZdB@%q(9;?6ck^&3O~`x)#0AT<M~i!kBHQ8Ma`H!kmmi;d;4hmUpKz48nCiqF=^r zanar^7q&n}UNq&f)yMaS>y3@)-JE_+A#$(u-u}&J_ON!@r*?EJdB-k&F*)hZ)VBFn zQ<&y&yt)42_HgkR5gaz|+e3WUEVfKE*4okOY;?FOYw6YU*I6xdKBjQrc@#EJf4fuV zC#wsB=hjX=8h7c#m+Uz^>wmBLb(|@+_uZtqMbQd-rNiSUMzFBB<TPB`v$NVFk0tfY z^58ROT?@85<mZO@)vw&lS(;OuVLv_Up?TDLOYg1Aua<NjfATWkqC~{*;6{mjvB?#@ zQ+DmUd$3ShLz}b1S-&VM*~7HbF#T-sjc&FLy<0xbsArurCD667$}7kwzqdYgi^KC} zGw!W;T&dbzEqXV00jpHa^;wMdtW$3OYVa?Z!+f+%#@Ty<$Sb}8Eh|-<@YNe*7Gwv% z={``@$maX<<8`OZ#Xr`bo3!7-erD2Em7lvgpE2?ND-qX7<x{`$dchu}qx(cOn7==` zYVyNTY0rcQTSb2D);x4rwSxDQfZ#r_ruyp_?lN-4Yi9?vb$oE++*d6T#WnqbsfM#l z#b%cKp*ru+OjT6c<J<IJZN@{PJ#48R9Ql(USaYW?V42RvJvCiA=b$&|yZyTtf2!`y zcCw!082w?Y(4MAuegQw^_AsSh5Ze>k^j@xQ+9A~n)>8{~E4smE?g(ScJs7R}Bd=*? z{lc6}ZPy$mx3K0<eXyH5RU&*=a})P{p^g7eb(9`ob4&lg>h9Z%xj5%ZzuVKa`R&oN zrO9c`Q>KefEm&)mvT%*&q}`oQmj%RC78^hKaLp-l=EdEdPt*dImAE{roHHrjVn1i^ z+RFl5+Z@%|-}l6Pd|BkwfatYNyXo#w|LC3w-%^ER?_=83B3!<HdAwo;(?g4AN(*z= z1YX%A@%iNx<LN*1<gZ`4X?V^<-0)0=xNoLTh4@KLzsq{FCbc}ftmm~+VzS<^jQ_tc z{duh5bX{0$;=lNr=hp0uKX<)k|KE)YyXGF7&uPTLIq!+UzOM?G0$#DP-PF#V`>_4t z>3~Cf>(x0I`UhJrHJj_?<gTp55iEB@bFboyCI9`5pG@)DIb(6Hl4|0H>Q&#E?-mtK zE}Bzwt@v}nx-$vo!Jh5=^VH+s9gNlcbK}{e`>tHu7nwU)PO|5om#!{+=GYQNhyI7B z1bsW_c)KpkSkt{&;?(YLQEO*z6AQomk9+KLn-@$emRwygdi@N~6mu7YN3DMh{^<yO zVTSb3DsHd;-(tPX#BpYNq}Q?*%{ff<daglh3zvS3V!n4L$om%8F7YX4P3s?cRrH<n z=U%Jv*#B45sag&l=lgo^WoOS}TC2b(Zs+$#WnSd>>?il!)px5lA3Ex%J!Mi%z_fak znbKOpcYHpqHm<Me+o9Q@@%hVQ*+sl&eYpW$b7W7KZ&F;8;JZHO(TPV-{jc12U&21) zL4(`lMUq@gBLlb3mE$^PJ}0(l-7J-gkB_czV)gp{Y5AM)$`_c|OoevQo^Up7s`+{O z>(7ZAe~xUNtIY}SqDj79?$j>BQj`knqV@c~$XuWrQD6A0Z}+*Bp5W@sIt-__O}FQl z`o4($!6}LK3XkAb8WRJRDl}`wUL0E1_2sm}(TfulVvTM$R>lgrh+6I2abtCErP(Fz z$20sl?|V?y{bKn{jt5@9jZU4pJ)ga$eIct<40!ED=R+B;)8EUAjw<rZ@?Bdf<GiOm zyUzJmUay|OllltXNrgAUCtP};5n8)^+r)>$HHVg3`Dspjc<jFGXGa#5KbNm6=DezI zsjFq<GEaZ8?{<vO!+^M(PwGojHf-*!+QU;;#=d`wWP^If{!E2=@BVH&yW`WI`b{@w zk6TT7{&%v2#A$&(y;tupvtA6am?E9>QA0a^>e<8o&ihh%Zg@O=R^P)rscOp9^&am6 zqpi2kH?va9_Pn`m(Wj}FX(mm(5A;nlYx-2-d`xG-m&X&{>&%<&nAv=z-AZ(ewll}> ziXX>16`Y<w?W`9(!!16O`%Gqi%BG&Gb!^Nh-Lo2YI5cyLN#FflU%=HL#1OOcg<8S7 zrb(K&ZtL2JuT%Vbf4Z~T$Ci-#!kF1z8(6(!gXiihUOr!zEO~A!Z@|3?QzM<joH9SD z-Jeh?>1x7rT;2P7)1?Ae>shZCnwW}Yv~7Aic?s{K2`nk=BUkO2bYxlVN|T-P3VoNq z1?^zDzNbV~jCseJKfVVWUWa^n>uxOLbu?JX?C#r`>H4*t0c?H+M~&xw`uIodvVHyh z0=20JrmXe)v2>w{zT#)GPjSX}lcMys9H%T3>0_NPbhc72Mk%;u`JCQ~d!JnL{vi^q zrd)DO=J2mV$L!a+8_rKyAk*_)b6Qa@pG<V+{e3B$oo>kJNx3vVK4~`V(k;!HrqdNp zlWbI#c-(@2T6+qlaV(#p9Vi%b<&vw4lzWDMy_R0yw|Of9?sXhm7~<li*<AWQy)pSx zeEr$N#y5|@#qukw7)Jif{mRl?`gXC6@AfmjrZT5&yf-L?dnLFY`@CSuYu&1)`75Su z+b8RBXrDu~_q=6Odhaua@Xg&C(6wy)G_82<rEA${-pV%j-Q#d8+Tr0Tfr>Y?BwiKt zNh}c3o$#?<<Ve*fuWGYIoBH5thrZKC8jRP!JHT!K+h23agSNm>-YE|mv&`Fzc)KM1 z=ZVzGwK{8NIz9Sev47d8$0{E$ZYuq;QFaYy#qEOZ1qB*k<9;n^P`J<)*Bo?x<7|t( zWsB4gYltn0Jz)}>S96hHSnHvdh+FNv1;JXbd6N|X%ur8WR4;I4_guel)!YJBElIcF zQ+??(mPt)#a1eiCnp!f;U$8mgGpz45&FIbEhjQy|rNmhlEwDDNJ3S}C%wocYfJgoB zCHUBi8{;1LD+c&|lqrgS)UsgDABUDT%ECIV&Em{1?inYpro7cip2lJ#&)sywB=|G? z&753`GrP}Eu3z1A<oomo+ZL@Az0SL(aqp!azfIJ-v)10R*ma}CHp_|S(2L&qiO;_! zi9OPteO0b?{nSv6gVEpLC`V{s`u4zL`JCFd4?Y=*vIOM{C!SX_u|GD)P)NG?*|p2f z4wYtNOEh_3ADY7}X8uXUUG2NZAyDUQf2(P*M#NoE=gT8?ZM|C2?l-RGtwLdYimx># z2JXD3efE(DsPi?u-uZF#+}F{5535p{r{vy=2>ZwLv`RzQD1TjCvZ#O5pG{pQi;o6w zpZ6&39Jh_sMTuUP`AU3Doewo9O7?BP%Kc-V(4K}(=O>4mh;P{GxnIEI@WLs_%<WG+ ziw^mBy~cw@x$DHC?e+D)bNA?OacCAUURHi@{T=(f)}YhTl0P+Hg@?S$y!WkEd42gr zv5XI(1&KTp9`Jb`6TZaXe0i4$L&etM53);m{bY2f6bcJ(53O6eVUeNMJ;#^@=5uC# zzRh{ibJfyaYpb}gyU#akFJk`w?<(Jw4cE&q*Rf|5Z`|BiUB4juf8T+f^_EjKkDu(f zII5$@RHGNR@`bpJdPau#Vu=`&7b_U}msn2CD0mq9D{}9G_m1T=9>lG`t}~-l<NR;y z?#FW%s9b9+%oTal_9HRwshL{zoS+Zuj5Ob!|9vbw>ddzPB8L_St&b`1+}WwUo?*84 znPa`|yEd?2pRJU%_GyH`lSi6PlWdOHFAPzdZ*Cv^Uw(p_#U9<AK?wmm%zP^64oqQ; z+ADVFN%ApO$0=K*&utH9%jH|D5)^c<kNM9^@fW8=)>#Er@Aiz&6hAs+p`v4T)XO`U zZ#}=qsl)aB@808Y{yAS_;w^b?e&g+x1ty+3x38T_K0o(>D_6;J%dK5@uKDs)&BEL6 z$f?#l99-j&xw-AptYwiomD}oe<rf(Cb9gRQ(&6*X3G({jHbZEQ!KbXPjk>@0&$9_j zm!ED{p!s3pmd>gEK|ae@hm=h3l-z72x%t?ss-X8GxetOKIC4Jp_!Z%MP4-@#KgX#J zvkpAUh`D+}*EhI80o==y-MAB}msNi@%vtmE!zu;YDMs>YAqQ&b?|c@(A9|E`!7uq} z|MJIPD|Z}7-jv4OCuT5ny-#Ab=c21C7`>ObR%pM>3z&8J&2^i|w_CFo*qFKB-&G=e zBG)aiQ{mTDL_h1u!KlMizr-ib%drcOo5k?in)^8u@4r9Bxdm$?&Q47<t3RDut@=iM zd+6;*=km+i%(^d+TK-tKn4`p8BlQMv%wBeL*3-csy4qf@3OR8{+~IeY)6$))eJfm+ z{A7E4`HS!#=_ygSq?m6@U0#27`{JE~DqFTjyi>W$=#^^0QD!yW<-dbvcFArX^FGzz zk($bPy7i{EoVLm`S*-nj+Ldhq6$%^c6*ThITVjviShTa?^EQ?|548%nod(n5i$8G4 zJE+Mm4t*#)CER7Ejk%|seX0I6R;d`F)=XQLr?v}hR5b$|o@#0IhT5JEdM$KjmV%E@ z=zQ)uXIIFc0(G-m>yCW%omV-X*IG7v@s9WD{+&InXUkp|q^s&)Sg+u-z30o6S9fRE zUvLiD6uM=pt(o@=fwbBcf45J}os)6>b@Hj>CdV|rK4m^T(syl6TZGUS^%EBU8$F&! z7azOqk^AUx=VbeP8y~zWx6?Tknp1K!l-u5R!?sC5DI((c<TgvspC^{_;lIj^WwVb= zs$#lga<9wp<p1j>89Nuv5`Fx3RrQ&?nyReLsdk0+SyJz3Y_<?@+EB6Yl=1SQvt1wK zR=t~C@@6Av(7&aB%1*cK$=u^UW0}fN`x=e<g+Yae`xgZ7vT}K`>SNxzcb7{)7Ov1O z{UN;E?PsphzWz@p6=%Xvy}$O#E;n3$npnn%yX$(kA94ybvs1P3)Ku19oOm-Uthc<l zbpD3P{f^cu`={1>y`3S`FCu6k==L<_t6lEWeb-{{s=s-Xe1WfbyMlqLbE)Z;v_0Ba zZL8YtM0GDb(EWYV<=&k|iTP6Rf2Wwe*Wb(SuCCs+`Tybe_G|NYGhcbu{{4t%!Jhe- z*I!?$%lcb*`GJph=LF-IZ?op~pW}4=x8=mz-m>aF?<eHm?|S2Zdv3kIdv4^C`4(Gm z1ke85yDdA{FWx&Wo%g=tEydbg*SeeBr#|(oF~q03n!o;eRno@&j)=pQsfYhd{{EqH z<(cKTBbkdow)uQ{pK|!=yC}Pd%XY@@`BQ22>%te+HO~!FdYf!Y_ViA<&-yFr*l*tS z>2p@A{jEveSMdMo`D=IE7wbFLrPnu|%kVmOS}XcM#dQ7pW$Wy8-cGO&{{2VIqVn{m zo%0sii&npNeDEi)=4bKu|L4A_p2_cMy;T1Bi_bBO*6yh02_N&Se-<kjxc?G*R^DT5 zvqUp=$_Wj@Jt4P2ZC2xt@HXqj)IAD29I9#xH*Sx0+s6C-K6qN;gJ8X{_C;UjXWMHf zQ=h#(fA{0>OH90a#minyxp9T#w&9zzk8S5BZJQ{+OEN#$KlMg#Y}K;vn&|8A)S7<Q zS}b`J;P-7;_1=p0yQlZstNb)MoY_^i*Fts1!nppvs)F~yi{kX3TD&}~@h&w&qoeJz zaMkWhum2i9@A^_O>syA?j77>`E%kNHALH7V?s=-@xOd(>jrIRN*#DjHe}C`0dJEhA zf4(RFJbO?6n_~XW>-B&7_kaDDeCv1rlJD~Szx;dr^*Vc?*|pR!L03%fNxR(AsgD0% zzG0zx`LwbV`?fh+Tv#+~>Bn!)=5LkWUZ}7yd6lvI%x>n*QM>NxE|ryf-+nHCugyK{ z2~YH@+RyE0HB=N#i5Ku}5;;GsuCGf=pf6cZ=tJ?t4r3-MnRGR)HBP_v_Gz}Pn&3V? zF^^fU-u?Ie>CfcZ1$WI0==}2kSP%Ck2fmHd=Dke%@H3Q^<zlX?j$-FYWxa|?&V7rU zJ^HujJ=xa#<J3pK_h&v;IG<7El<W?&T54vV4eIfIS)(`6_a(2R`rq;nZWGmDy={js z=eA$_{5&L!af|b}5b4`_lYc*Gwck`2cqHROe%BF0hx!Ps!hKIKzAG!-bGT`mlCY!S z2T5NK)ioiv7rb{CknfmpbU<ldfNRoJ?oVD?XN2Yyxv}{hZwc|VF4=#icf0ULMsZ(< zy2BE|9lv&#J9}(n@AONX<Fqc?Zu7=$Rj;DNutrYL<z{w#k7izduUz8z;mkGG$S~g- zVbOe92b6cLT=KpCx3JEY^p1_2n;*+cY!=aV?a+BV?Umro-mkm;tS#;}Hik}=eeacX zb?)+Q46FU;gq?f8;l=ul%(~x#3FW12+g%%LA8jeB%byhH-T!^v?K8Ev7XIBX{r-T* zj}txSE{F7)woX5IyIhr}u2(_H?m=0GpY-<RH{t7^CqDc&@#1;rLtpFPU%K#q!9FwX z?`N)?J=m1f`D2g6akH8K?28w%*SNLF=6%TOvYc$9$mH^Cf|0?B_meYZX6EiNyu8Hb z*vjg+o%sjKGi=*;&pqbwDeC-b2J2r;Grip`e4l$XWtQf>?^t$iBk%N|y=ifGOPA(F z>nXgw@N<Uwy@l>-<&y8$%4RKCD_fu6G5b!rT~H;PUBLd&51C#4+~Siyq&V{`PLWr$ z`S|VF>%HctUv967Ja_uNtigx>7f)Y%_OPKlc|lI4osCVsjciuIx_rh^{j)VDQSuWn zu8)bjA7&>t^KjAf2k%YR6g=LbnETFXMR}1#owc&lg_Z?Jet1_ux@5^)+_tRv=XsH@ z^{jJ~4E4L;oMzrK-`nU^aQwn;ovJTI`sc53x~q^D?Qk?{Pv)DsQy0AYRVH|`*MU{^ z-H{F93cK`7H>P^sxc9Q_YyDR#1GO`9Yu;Wfy0GD3KBK8{id&`LTp=~(=|UI(UMh&+ zpC9kEE=P0ox35*+XSt&PXn5*$IBkzmn#0vJd1r6^zNt2$>v9%VH{N1Pi>%~)CEk$g z_?_|UvloqTOnQG*EvQN@mw)iP;gw9#I)=7m1vaktV%w*Ry67E<3VWWiliQ=c`IpRN zjTurl2hCW&T22U<D|Ke??51BbYnS`+8pgb1c~$Ho(=W$$<@pX{IokuXe#zWf>h~~g z)pHK5gI^ft{Hm8(w#1MBz{>L*9bR1#5KJky{c8EZZK~9vye+xG@8zD_J8o1En8vug z!)VokOVdB5xPK3SnEk3)<8MM1#|nAASH*jNrEzWlW6$2ozpT1(m)$2Tj#baTZt=|N zElWNwwa=GT&pLT?{6>!Qa4RvU^R>#W9)=!D%V=x;>?w1xP_Lu6{_!Rorf7F*xj&Hs z{&DOFcU{o2SoHY1#qUK8yyii_7i_!r>-E%l-J8GPH@&b+)i@?}PCzAbl9rWm<huEb z?$##<*e~7w=$p}-w#)Uw)8jWU`!uojQq^bw-str=*F92E?EK8~<8N5w6{F)!zf;;S z%RJIb=$uljVc&5<T5p*_&`y<l&Rt8hn%Jf~_R9%w`YOV=>e;kK`xE!<ayah!$XK}` zCUcA4j7_hWPWqVg|76wtmH>+t)*@%pU7vSV*kzwu!~K%EHzt4SuRnst-#Vw1O<W5b zTCx%RckjUi{+PphFM14=QsX~7ymfm$cS+KplR^J=m#9S?6qRxmR!aP5UH^aU-4ogS zHCIe$Q8y8}$`le<nf*NQuE-Vb*49&-72I?kr{0UU=6|WS;89HBh1PW)GcL}MIll4V z>sj{&t}(r5YW&ptM*76QrYUvofouy^$|oG^4_1p=^>|8>q~59?uc;Gso)&i;U-8=E zM#!fK+bX6ljp|=xAKh)5_v-HTa;tyW>T~+uxjejV|M=w5w!+1XA<KWfUb*kJ;bPrf zmRBF!&g^1&B`%b*NHAmvcgD7hEBud4@#3@)IeFu0^Bu05eF8VWd|+J1W_O<}r)GsX zcXI8g8C8dWHy*uuVAav1E4DoQa8+Z=AF({{jYs6p+*+L%DHv6-+ev8cncbJ0bncXO zu}B85tUvPVK+T8N&ss~C9g2IV>kyz^WNPQ<Z*Qu5;lZaj&p)qzeR_XwMe(0sYpPD| zm%7>Gz3PWmj=AHtt3Ph+{U^e5;@kbWx$*nA-jFN0IazqpvgWHN)Jl9(8ZH{hL<TRu zH|J&O1GLrK{+!cT4A*`6Hlu3Ow(b`k^`47%sqI;E+sxUPtKXh;(&@i(f?Ly6H$~1{ z#@J|O?htl;hxI=_ZW9any$`w0TwC+bZ7*MBvBr+5$9DxHi;XkbOCC&}Xc;x(?i-PZ zE9Df{ya+FB*s$!(-D0LS&SnMW-)g!x{MjIR^K4$aZTy+6svU}(dc(JfalDJ2J727Q z<5u1J!+n>Sc=zR&NAKp|RO-Kj)o5K#ywn!{{+z#?t}UwKeckQ&U2pg8vw7k=0f*1W zGaS(VTp8v4IQqouOZ(dkKW0V>dH=q5?AV^=sXMi!lhqnc*!%2fIn2rSN#`zM`dJW@ z!+7@fwkD$~&u<>@;mE2vE+6_-D}Bd(;p!r(nP+U*zN&B7{L|6!Y+_Bzs^eR~#^m=` zFh$?f%6!Fn__FBoPuwN8iXAr>2v$8^S?XLk#rspI&2ukpr(pju`5yfX8}Au=F6q9x z<AC>Krc^<5v*}r1`Dd@mG%a6iXR&sU%}tBIe-9^57Th|qN=55y(u+=sM-^w^e7L{W z_}`@EEZfq4$=mPRS-;LaH{=Fy%KugCXZpV1E|+=l`Z1O&rB5aq$0K*Fjrmtm)AT_1 zZq(l3e>@>kdS@z^pJ{4m(Y=swmOt~+wC93ue?J}S^lfjev))%z{O{TG#ZS|#{?DJ_ zGeJU)C-ueppA$ITL?&i@Q>yyul)pBZXWOYc4<(nav{h<6ZZFcWoy@eT{=aEp)3Hx+ zhxXrlxO@qh4c}TD2OaOb?^Ql#u2kxGPOLS#oR<~xHSeR#!A!oyDV%m!FB?wps5!GE zz<Tl9^>>`6F0D~9x0c@$|8dHiI?iV^nTy%|IKt&PrY)T{fybJEOFXAbQMW&fG#^9k zj3e`A*EOrDIG_LjCfr7){NtAVyN&hnky(-_FMPK9Jyl`eomay9r?S_iu1r&LKKK1i z__{ZLx5nC>G8Pfb+TWCNCU|n2%ALDH>(*->40h?-(6DY&b@{{2fQX<;T9Y=|Z+cao z!SW#3Xi?9P@7LbcUBC8Ap!VmU5_XmMCH{ZU-2J+=$+#eVexjpk{UJ9|^@7=(DoyY5 z9j*WDxB0i_jdbSLr4@Y6pHBCEsGMH<$#PA)uxZQ33@y>VC*snlKOda<CyBYj?upgU zRQI=gnsr}ThNLUos`%I4{AejZNqzsD1#@^AEoOVMzM33gq;hWRIm1*<`IBBp+Ba<O zI8?h(O1Eiq>2GKKd1r!`Td$cMs-n5L>(Q4fODgJI>yz%yxPD^Cx!^gAT&7><S;2j% zu}t*N+oh~he*_ZZbKH%Tn+^#U8MnRDuGQE!Ss*IQ<IlB_RkEIY4L-!IZ7XVA=etq1 z?bAIQ%R?q-S$EFkP*S(ajWZB`p&rbm8J_oiL(GDM^WU{DIrDgi$4<VJ+QB*7C&p}l zxlTEfS4Tu;5BJUbSZ=Q^-iLnkZQ9+I((xfqb$9lIJl(sAbJr+JD(#U@{l3m2<0Vuw zZ`$46tWW<|8o5+#Klv{9&?lJq<h#~wPnK=E-5)Rhf+^y}JFhppV<+7y-?S=p0?)0o z^;7PO7HpsKPN7iCgDrRWY>1irK<wz0`tNy;mG?`HGH&11+Fj1+-TS1<bcO861-a#` z-`q1*F@JLMImhYVlJxcapKmy2y32Ud`HfSuOXT@i+lhO*U1pem#mxS*6Knau6-(dG zs{63Owl*hf!NK~yKR(yzrG?&}Ifv6bR*Om2)NW^W#bQ&BJfW-Q-<@UdCYIe^eI-!L zX6N<#`$~m@9NY5zrkAwed^@4%a*USJx!;c4Js{Knvku>TadXYgET@7=S-F?P_OgEK zO5Jt%tXlgL6#=ei6();%R!tS3b1GV8yRZ^RS8&#{4RfC)-z!~sQFWeBhx|cSA)9nh z{|}0HncP>iN@ZNz!R?<X5LMUMmwixhkLEgyBhB?MR6~wMsT)~NSYx2BbJC)A&jn6? z_wso4_+mFv@y7ISvzWu7Ph(3mpLX4}I>wY9)nzT>YZSu&dAp=w#QyIhFZI5i)SATO z-+88B&nhnAjSOB_50~mR?#kc#SxNMes^N6UZmoH4FAiGWt({xq;dJeeq+j^@$<Mcm z9OAm`mtmt>Z{hD(F;6YSgC}^>lh0}uyN&P4dtR>3u8(;w-r^qh(lDZ_p>g}xTiGJ_ z-Y)&EJd^Foy%j7kHtsa@*-?JR#N6qh<H^^?a_{o_Ig2)RsAO1t7eBY$<@<DtNi)1R zu1?>6z4p|SLpo|F_U@Ff^m*66M1g@N^>OHPi|NazoLrl2GGC|O`?<g}4*$(lJWN!S z^*l5WZSQ$kz`Uhx$<Lofs`I#|n>A$oPaSi~yM4F4TFLTZPq%4j*QpuIaW9QFxfbg0 z6mh)0c%t>L{dPaC<(Z6DUq4wj!|s8v_({J+L$y@~$unluPLRExcCE==^YbEJTiZ}j zQhswTbza*q|9K*Y=e6?dub21vSBY<)_3prAQ<e9-j<0n5rTVTg%foJoU8HmQ^{*$T zCMhnI5-;r$Vp_H%*6Ws-)^2ORA3`$zHY>B=m{tk#RoQxq>{9$3Uhv}6zUV)n<(XTK zTC_VTbuB*FvLtx%g5@t2oa_r5Pq<%b+BNrFf<cGnWE)l4{W7!8RUbO{d4GL*$>KBL z3)ZPk<lcRC`_5l+Gb3E|O65hK8`@ggtZA{c&f&iQ^?Zo=;>$m|s}74=I@Le6Ogi#p z!t|d3TC0ju7p0|Y_ML25&M8==xk)PRWKhqBMo+c=i3$aml3d=*dCv5A(Qj%04FRbg zma(pqs%yEXbu)-%2mIjp3tAa*>+05e(YIF*?Y^}xeBGye-5L)+@(Kz*J=<GrY7*+S z_=&=+k}a<q+H2DM?tHPHq_J4K;<*xY`x6GgS4GRZY#twAy!!Ft*MF>gE30eETJA9^ z2y5vIs99y4dam+PiL2gtUBI!WOAd={Fs{6~fHP|4GQ)`c{cX-pN~&F~o@WxLzEPTa zT)2MinJ1Gt1bjNW7v*lsmW=9mX<7GoSL)KT{XyAGnv-{z1v&*Sy2@l0?{`w|V%`7n z$^@}T5AXCSe7V|FdOoCO#j97_UVe;zcgtY;%2$DH1x8DK`qjcpmOXs1(xs%O%VK5V zbNv^y^Xm>b1)BYPCSBq><x=dCryV=C-k)1g)F!dBl-KzDm+3}_)3ysUEnj0i{ar1y zWc?h=g({xnA59$p#{2s?t5qzU*eo9_y!%9vl*!yxi_%tnowj+sXwZ)~1tY165w0&n zwmVGEZI$1rT4`ncAxN`WXrZ^QrfKlrcKHjZ^Z$Q&B>!7@sZnJ~g~hV0N&Jgv`18L# zVqs$ZSitMFbL<}mkr^xRomO>8oOR0Yxkc!#yI%zAmwwhe^dkTGdVPTyZ8iy&HS4Za zMa*!1?ZmJ3Imt?L9;e-6PR|Q(Tbxv4Bs8`QIZuAKVa+$UZ>KNH_+Ng``q@#;$M)yC z%x`DS*+gs`^4zT5XMLA@rMPDqi(-4QPvpl1GHuT5*ERb+U%mdq)(1ZgRErMnoF_2% zoc|QnHd{^ULc@B~&(i#r>n^n1&*Bhj3U1z2x>~`hK=G?gyTaKn>lgc`-BWOISoVEG z#p+k#7cG`^YFbbK5aG7%>xH9+i7pSm6dcO0?vnqt{=3QkZx5JljnDEay|}qMN2h?P z_Lo=rl*QupUHiKCU3Kd6GP!IlAEw9pj`N7B+-yNd_dHqiO6E6L>;LPBOHOw=bZLG- z<|CigdOyl|j%mt2GAUZ>d!)OVt$uQG>{gkElIGuOf>m#I89B7S{7YX|cd|Wg<;{e^ zpYLwl|NpS|<>r@9`7dsF)nERjT<?Ox{Iscm7AUWiUOrLZ>Uo*3`&>VM-ai}M+-__# z^t|BlLGwxD#lH<F>;rbFdUbuRuhRULbL!finrT_-1wGl{^P;MJKWk3<63;TnJ)tq( z!$043iIdTCFa29?wi#>Uv{{0ia_6y}msFiz;j=4ahW7iTjE6YS=|~?oTBN=tPKZzG zE~E7s!})0ufgGC*`zzdL%(*bJ>%r5g1)XhvQSUr?CRv2v$?)H$AY+mmBl%ZxZvEng z3P0Gkus+`5{y$aNkz?}iqb@Sj-BK5v*|O`3xl)Opk(Kb&qra|w{i?M6O2o;ejrvC{ z(p{?leElm_zjG(cT=V-C&Qs*{q>s$yuU9YJsXV`E<@6^J-Lboa6jmB|Z}3QIx%VQK z%|>*Ei-hMQ*Evet#3YV7s=W~D-Wi$pQ2cCb{dATs3YISxDPCMN>6234o>>A~0cTnj zj2^4$HmDrnG;(^r!1__hC#5UTHp~z?Q0OXCZFlz4&dC2I>1_wv@}#ETeNp14rm}D4 zsf_POovN~Zxf0xiI&H#sD#%^Azt!pO`Lye&mU<jGkgZ?WVfU(R|Bv7=fv2r)KR?|1 zy~bpb;Ze<ckLpCVR-N#9w{PEGAtEa%o*XfQKmN~4gYxWblfcVg7@jEoap}^ZI=AAd zz}z4A${w}1zdFMI+Ule8Qek}`bqB+*OWb|G>eXG(S{GM(*65R?`G4j~E&;l>eZePp zFOzF-58lXPSk32|7IkOmPmh`VpI+qYpX{RK!FKdmhRcRD>3Ysz+~S>y!D}~co?;YK zv`RtEN?_Us&CR#^W;cYnRiBzTjYXbCv+8-zJb9bCIIr^thm7^Ugxe(u`mazraQUD1 zf=jQ?imwsfzURZCKM897rzC$e-2GzzPjS_Dw{knxZx4!pwrZq*nZL7I&;Cc35!=Pr zvt$?E|FZ4qo40$Ub{(6eST73N_WR&q=5^WC?vIunkF>IP5Y`b475W&x?a9oxf8ihX z-yG3fqulfIsn5qvO5aN(Z%Xgn{@u2J4fEz->LqTIW4t*VmOuGYclO!Gg|F>v)3<NG z8bAB=yrkCl2&bD|dnR@K%8!g>=3)Qou{7+1&x;qQ1P<8cd2n3bwKL4bqp7HVTEzC1 z{1)Mp`7^pUbMz^n+P`(m<se7>IaS}My<{zQ(^;f!b&i#BbHCX9JQ-E@nX{8D91X>) z9D=jgPx`qbd{cT*+6M-o*p55=1}82&GV9xZCa`l=v_YEY+*RkZnah)`6KBNrANes| zG47Y?w|WEr_{VFkiqhppEh1kWf7&r+fBn?;m5Vp7%l{bk`%Uw+vS||}{0vx^ZCj}t z=eqdM_Jv2kN}bbcE%h~JIWHM{@<T*Vswm&*-}x4{OAqW2`M1yL)a6V3qCVRGI>zGm zuTQ49-~1DBW^t*{yIpB<#&6=@p3eUB@yHtCs5MuYt^OMx`Jl;f<*KuB8TU>pT`&9= z?qoFQQoZEFbIe(x6IE2T<>r5wb9G<A((r(_T~X^5x~E;A`Z1+L|KybOC;UyWzCL{F z>94seFAmrL|6YGxZPqmg4nLk2wp+=SOH)tvf96fo_gMJw&W5RLR(;y`G*|Jd*-Vef znXgXly}Q<D^E3UD>}=0u)6?F5*|ir=pK>+MKf35%fAE}>y!E@n*Is%Zx%OUF{jFI+ zA{klJC5zHecb{GVP&ux$_-FUmuCvc)>_5D+R^S_li{OM8$}-w|9!Wn>uF{q^4Y)Q% zW_@8@>#{`O?cz4y@?$!s@@=MY2k9=4S;+2GEEV*8Z=0z?L$p+|;<oFzr%ig_eDTVD zr~MM#Q<opN?!A-w;ri6&_3~%V%b(GEe7HM*aliZng@s?f`&eAga;}_m_5atD`;sq2 z-3u;mEjutVp;d6Z^~WUn+^aRoc8@&rncSZG9lO7Of#OB`_u;vw*Zfv~E#DB*tduKK zJ^K=CjQ*1So9ZkqwEX>jo=wl2*_GSzc(%=D<-{Deu&c%A+?3LJ_?U0p`PEeK(X`>N zQMr}A(wDLo;iAc*ANp-(G#-&#*dvo?B(v2*{M#ZylV2;67Mqnn4fy}|>eutr)5HJ2 zKidB9<JGJA`TG9xe-r<!$xn({dSb^)hhOL8)_*Y4Fq@_7w&M83_mejBtUkGV@Bhvc z>pi~7=QFqdzvs-o<m1oF-&b7s_BbP4bm2<<w0QrlvnSFFUoEX#E^$}n<!hx={Bz|W zt^QOTdocLZskg>izKgqjp8n4NFX-EO=z`zfjrH$kC76G6S8s8Abs_AVL63I9-I)T? zTJp6oz9#7;&zTVZ;OxhT2j;EF__FH4?!24EI_r}pAL>j#!G5lJM<Pp>eC(=QJ$GMu zb=B?PJXxxK#&O?{qDzO4it!8V)(QDt_UYZHPjAkCZI3^%xBlGyeIMB-)~FN~pRc;V zD9*q5D9hKRFQ%R9GJhW)|NPqg`1<qqbN1W)`*|kx``1Rx=)%+e*Egnm+s;W^Z*};e zGxO(aebbI@LG1p9bHlWMd_7WqeaWA|ia)RTO<lOQ{6ALw-hxm491GXB;`u9=FVPia zEsB2Vu61$7Zr_d3GfNcDozS{=xpW(k=f!jLHKt3pGwXUk4Vtw*eENkf*7TN@XQ#Jo zbXm!j*ZzLKIKSSa>Z8%Ghx;%5oIU@Z(wA3P<1c95=*f0wf2MrgjZ^2+E~CHo<tx|^ zrFynW+B4`{o?JD3Vmq@K<Id?T+L`_9&C{YHccxs_@tZZh|5M5A#i!ofio55=u`u;t z-N&~VyWcPVU-R<gck}x*VrH1~{eL$5-0A%IeQ#=iZ~Fe0`~B7T``qpK?{j+}|A+Z+ zNlk4{VT%`Urb}>=*|I4+H!rwyD{AW_uOqjt{LioJKVQ1^y6|BYjfG5l%4ZJN<s1&a zSRa{Qzx(OT&yQTM$F1FXJm%}PkesXf`}*T<SiW9!>%P?7AAh6U?tPG)$=B(izwh;; z>G${j*_Pdxm##nYjB!9=$>N6oOC{@`%S{!YWHK)#%QC%RbN?mpTD|I;E5X8-PP6=< zd*s!Er2l&7l9p}`c4q0E`1f>LUfFV11Ld<Km(MSps%|i`zW1hd^l^Dx1Et3WB`oSZ zN1v9a8@gL~p6NSM^3_^-@d7bh-8JbRi4N^S+t@p_JTFbW=a(p*bztg@y)Nnb`Uh(6 zmG9dBc2Q{C$}h8d^;j(y?~j_xayE|V!oJVzFYc8*ck%!Ed%M?f&(-c<^g7>;)okv% zh?Sn6+a7O;(|)}@Rz0`Ac2@WHxoYWe)82|GDRP>+ZeUP#_uVZ2<WK3mw>Bq#8tf3* z<M~Ck?{aS4-=LXCN)05=@H{h0`WX^>t1a-Ign$+AN!D5E8+W$oZ{Hc4FTCoVLO^2s zi|O*5<$Cj;O0^}e((pNFq{Z30tMc9i?M~xW>Y_cGo{!`N_H!)n(%F7#ZvCa0de?w( zu9@ebW(rR3Sz_q9ICZ6-N4mm_tego)0%scTF|PQ)m$2YoC8HI?YHj6%dzjCi&Wvq* zc~|VvvZO<cHkY4z;Z~%QP&h$+=T5JlC3{zIE?>8l`|>A^g^BtBxAz=yw9H?q6tu)F zdbu^HshIZm!)N(A1^qT@%1xZ(wt+vhzRO_NCdtXl)8@{9tSV49M`h{nxlH~}wln5@ zkgPI4tfanYi2{T2oQQ{eFFHyrv^mKA$*;ahRPg<osjZQzx#=t~Z%mcp*pu{9?oQde zZMsK46)oQ+ul-2=RIjA)y15&)pIa+9JAQd0XCtNE$Ef`~$o-f8#N&sy@at~-dQV8u z({OqHnG4~*oKLknir&tc7$oS;S+HwLw4x5%B6G#g(;ms|`BvV1!M*kJ(*s9WO|&*G zyJjdEu%>ly#;uRtZ_B&qmK$3Iet4IEWB$Py0nGz~7cW;w*L$gF6`qwTY7?_g`&uV9 z>FxAA-)Bzf{@m?&KK%2X!Y*0i<#SwuQ#p@F_9>e+FRoA3`=#<$KkfO9$qL6`%75N> zcoD1MxxzzgwLgSRY7IXs{j%(9n&G->7e~?Ey&M*do9#Df-)gHbci6_!HB<Za?1p8A zmFpvPErpq*3KcuVLic;$SQ1yNa(s=~WQRkck~X^An&-TnZ@u^Ht@VzZzhytj+P`ma zaNXLVx{cOPum4v(Rli>Paz*U&Pp^V@E&cWMf7H>S@YbNqi(*1dS%T_9)wdLt{(I%M z@bue$|K)!#PI|Ka?X$p%qP{YRz1qL5K79Vh+06M{rYVcusxntns-Iry+5OaVUDg+K zAK}KTi_DB~rZk$r%9+=EA(=<e@xDp2p=`FN&~cs1KGCTf*PJ4p+~!HvKmQc1_;q$j zPWJf+`O^Il^6v`&n7v#0$2*pPQ`8H3r)V&~dADS*b>@4&TWyoSExP?USZ>P;$zBhw zj_0zQa!$TXnYDPoyH4~!=3M@5@{8X0%!tt_ulal~{1-!j@{IBq8of@P0=35uR)n5$ zZ#pJYTsr6FyBO<<%{=bGNo<>1w}{pA=e9GKM*a9T`Tp;A_3Jfl(-(*amOF%K%oVGY zpQsc5^JaRalcG@n)lIL|oZjEx#kg#Rja$*CwmGkZIG)e@?tfC}#cx3#=a$_QT|@={ zrn|TM$Ir3j-FEokew+8tMb;FrjjP;ZGTmmva-sRk#{}mU)b=_Dmz-O9$2;0%Lt$N? zW&Ot_ts+17&wE(pjMcOzL^mwuSboCZ!qt7b-LH2KzPu<oU0wX;)$!@}`<?Rn{QUUh z_E=R_b;ZqFaCo}@Jej>#RX-nz?ENDryXS}bua_^5PS$nN*dagRyX5rb>D*?_x)m?x zzWSSDWj>GfR;Gayr=NPUjbg?jF_u3zs`DDZTEtwgU%HW9F>b5VTC=$y^2^Wv7wlK~ zF=s+W&euPEj}tWbZJ#pMEVW~6KA4bSF8<G6f@jr#d7B!OAGZs>UtB!*?!(1<+Yj&O zZR=;_FaO`hcHQi>==qo@GydlmJl(fy@^7bkyd^!K=X?<9<J@|~YroyB%Pd!3OZJ`n z;3CH_t@UYZSUGpS$}$zt3o41qCWk9cSgSbY7M3_pu(6!`ebTd>1yg*kd_9+T?BtAn z=HYz**NQKip1G+d`i~E<=Omp3Nhkf9qF?V!(&to2zX-5gu+PrM)$r*dZgrFQhxcdw zh_m?B{QY74=On9_r|ZwmPn!6xyKRdL)Arr>ngiyf-)k;tIlqTJ(XRgV9`^sYZ#%3v zWUqYn;$-l{)?Zc^xHEkU;-@}-W1i1^@urKHzu`l<xxNd8cl`Faam4!1#|KCG{pauf zqd4d2z2|Y|pV!>_|Ess?$6N93A>wb7&;FC=+g^V9cYXB^>zb17|MMReGAX{V=5V!8 z7d|%q_X`c#;+*$3wk<sATi07Uove?ne0n>LKYixkV(UASEzIW&*WPqze<3MbcxL)L z-fbyy2W%pRq~FHQ+rZg-q2tMOmr08z?T&h(=-QrRA#gHR>wb9g>9u;VobykmrN~R} zo%A^F-9-<+6IJu|C;$0=)9B~7+jBp=N~q?@^;>#>Hc+j!PkXM(vf;gY&Y_k}wHb+Z z^<rr+k60^vcZhC!&sxP4*RV|GB*%BADU&0oJ(yF$D0MzKAhn`#=4A83S5o39UtJoo zG5_XQ-J|Q}RXD9C?%D64&Z6U+#Mxr$-zB-_S5NgSPg}jWA9Z%`@`+%)>$UI92|KSV zQB~ciCe`Q7*;l>G{_e~D!fub6YS%peU)ILI`b&NN`-k^r|L*T}FLHF-c%k)G&VtL2 z)&G|-IC|s($CvfVUO()tEbJ`)2(si|hzapHcC78&_VUyZhZp~QC@i~>W4Ylei|!7A z1KD{C{_CB~NDH~JUiDX{wDi2++ZD65#7@XQ-1*~j?f==yK40#;S{(kyr*i(<#pbKO z>#IK$L`?j@O`flw?eOlu^}^@d`Tw%tJL=&e&h%ly|Bs8GpFDQ4>D)I(wH}cTDvv)@ zs3pqzp0v~Is#I5*|2b&K&G~CqU5hGn{K+rRBw9XEA^u@ngwu)5KRYt?uDCk}GQQ*R zSrQ;3x2v>H>s5=}LCJk#>hmtg@#p5vx~`?+v;NP`68B3Ib<>|8dtT3Saif``d5^J{ zN|sQyJ-3bG?|be19m@iZ`lFvkgor;B;g-)mW^!uceuK~7+=D*6({J0C!*Iv0wq$*~ zUELeDBT?*WY2SU8Y;1n49L)6Aej5W{X+E2epR-WK)b(r~ek++eN_g52sm)CNxoP8L zIjtz2wabIm{s?l5=-m-@;!v!=$*9v2yUFFiE1$WK&Th`lcUoU%&8G33>70?@!)r?q zFm(hUc{GE|jy*Heq+eZyf46Qpo7_r1iMg!B0wH==y!L3lox5S1P|yXV(+?lj^5=3H zMGMrONRxcV^7Fq;+wH>%52l~K$!6?#S>|WfjlV|=T#9VIoX)-&c5S~|MRs`{Z~dOU z33@vj?&~$!M{(zK>|*e^!~3jilgZqc^!o>TZ<aRwH#d95Q4;wntZ^4}o;1@P#xtyI z_vu}5o3r%p!ECSljX#(a`V41o3@K5&==w97_1VLBTZ4J$q&}*0j6JgTHOK2khh#VC zbL1R%TB5w=u2j6#4$~iY><corp5|N>JhALcy*kSV(cF@Fz39Btp{Gnl4d;A$ep7z> z>mRqb%9?+4x_-zhma)}upS6X~rB7u?RO}92)V;m@wPm>Ji%PrHn0BYV7qr%_s;jmB z_2G%<b=QuHn$y=3{_-7=)GfQ;df<N0=U)o-1vN{YSxQ^%&#hQluzOnKg;dFsFCV+# zH(%RzeY;4#{VCmJmt+=6A9;~5&sgwb%ZEN~<Fg-1^*h4^V*}-GX2wfexh-t@SH^p< z>YK^jFXFcYQqD46)!L$a_SUKE+n228WWWCSwC;;X)AU{x>}`l-dhxYT`ZmA*#m}w+ z&zWvVMr{33C>R>h{y{Hu+3uH$u41>euKW2(=C^!wb*SN7n_JJgusI_7!nCGoaZElt zHZDBRXnEka-;sBhK15fSnKM83ny@D{{nx6=i!G*yvPjBiZ?~AC_~meK;M{A8C69HZ zwBql3mc(?`R3+w|ytS%6^T(u(78;xSX4rnHoVfh)46E3$C0Q?x+UFe6FW?B7sMV!? zV{XCo*B7iC0<<PLo_SKZqJFyF@l#JOESuPQ(dKMs68D=H>xT|EO{cF{O*NLPQR|vq zRwKl*oI^ZQ>My^%{jU?g0t<cRo^DuC@cS5(k)rR3-_I@jm#L{3B_)4($h=`$ZnA^C z{UX6mgB0tDy3R8EZ@r7$rc7P7cbVTs`|?AwvMW7TD45tixgr0!gTduk&b(vw`?}7G zRq@O1Y1-f=(`0k})S4Jo<;D#%-&@apon*H5STnoq*8W>kcO_T9e`n8b^soKwQT^rz zxBq{U`}1kP-M{AtkN1DC*%Hab|4aDk8<XckLIu(HJ|6ger%YygtzPQ?#W69vXZ$;` z`P{$s{2wcl{%^LvA$jNK|2s#Dx!=?$aM-`7zY%?`*6OISP?h$XL>|6VP1pV`ol|{i z`>9tv&o3LKC)(-W$qJQxl6`opc!ita^T&p@@0IJfZL!xrW_-`^Sq0m+PmHTfL>DYy zDqidB&h*77I3;#xW>a!c-=&n=vadBh0S4x8@3rW8WPNfv$NDg#c9GMymk}w`9_`L7 zjqpm~yjj2Vl#GY(7MsYtnSx7>Z~u8a=84to4%U5LDw#?093g&ntja%TEla+3kZJGL zzM8{l;=Xbltkq@b3SgF*s;hZMZqkYihF0oYw`QDN65Ob<qjI--=O**j9uEF0Osp?l zqL;6lYBc}s%!~{LrJ~wv1@lsQw#KNs_}r-PF<ULc%lGzSeZ@SLRc#lGzVKKt{^G;S zpk?|uqA)P|Nxf>*`j++a=2w0P%VlS_d@FmPKKJGKx`5|v9`GN%7_xDnMONeDDKkn{ zCg>+ztPv6GS+t7(@X9{RnDtMhg0IMCFftndO?$V&tMuH7O~Mx~l}~G5lv$zwf9mRo z_XVfTR?wL=ztqEX<He`-QZpn^Ikm+(T>W}m`r4)mk|%@m-U(C{Z_hovE^tli>wTKn zHKO&dMNhG{J1%JvICIh}ogUAw^@f%ES6#EU&IrDoGwsp(t+UUXY^+;<Gv@FF9^L0t zbV7L2HRr3%c~G&kIrzxjZ%fYJkU3Y-rOq0x@a5PQdnVUd?P`Ia$1Vlu#>>~|s)cw& zhU6z-{&Qjd{@dTGPxyOSom_4w#h1W4Gsd~YxvAzr*xlaW)u)1v^=to~Wu^UtPdI5= z-&qZfg`aD;p8Eb)cH@+TJI?LOe&Ek4WEFX`t2QWeXX4@$r&1LbG1x9v`oBEuP5jeq zt5~udg{4*pOwzJUnwyZTDCGA|wOXytzh39dUxB>~J)4ZA<}NgRs#Gp?{-w*otoO%O z8JdP{jnkO0Xp6Jw(-~LAZ7(Zn=^W2IlO|TMN^<KJ4Tt-N(*)*Bn_XqBs@AU3m#i{v zv!Hj5-x*Wi=#b2$My=O^GglmnIwLmY*w>nuUf~MQltou;J;Wq?EB>63Y;s3u%9=F` zPf1*^f0FvEY0h@v-<@_EPi%h9aWD&-D<*cKnp^X_+*D_Y;}6p3O)BmTW0?Eu<<i7j zx6SXrm3c~)zL2mgs-C8N(@C?KUxlMl`Q-bK83x`ey+4djpDmkE`>)^f^vS8a{={xm z$cZWyZNAkuN&o#qwp9f`_jSvvd=E~oX4-ADRJe1Y<nnr+O*5Yb^KA6i@@B~V7rM-I zR@U9AUGEmvMyU$2hf1#ts_@*>rf6h1p)2MocUQIzr>r^C1H&`!bF*f<CtGN61*t4p zuVnY*?<be{yJu=drrwy4FV@ko>V88t|J{QEspfiyuzcAMvkq$fQeK^XYVp2Vt>Fer zh3B0!qCW+^nzMOB{W`%nNym0H&N^Mmz$eNW({OvMfY}FuUC+2IR%irT<iA*UAyCX% z`&ZC}>z)$t=1+WjDz9iUOUVH@SJB&DmsfHYS%<r+i7LEV-{QMl(W=o|CDQ7-7wfF5 zW9$yuUuOoh?}&@7b$B(y$@RqN->(k;y`;ICEu>^k(b8ED*QPFdeP(ujs{Z?%6W`jq z?aPn2Q2k6~^&UMw-{YDmr(fFgH=%1*+t<qXQ{?#qRxHow&XzIg_&z!5%j!EXY?gO& zsH^<%)Y<<$NA0Kl=}xaZp8_Km9^zXa-ti~*uG8G9vd)}0zxwx0;5w7{SSIY-x@pfj z&lzUu2pv23O!Cvg)n`uZ)~(`^o_D@JH08zDcaD3ULp1pA^u-*^=xUW&{9Cd`#NAEv z!r=~!t(WQ-UA&j)vuIIfG5@l42kP7t4_;(QeX-M4;^(v6ET(UB7cEy;*Z2R{*nai* z^R@q{R=gHBd}w-h%b88T{+WH{6*zMv<+`Zm>Ll4$_f)nixZH4gmNQ$gCrYYdo$V~^ z>BaS0w+h8qE<HNU^wpL9o4rIAZhvH-@oC$1);Mn|x!qqDIBqDN9oNmhtMKvux;GP4 z-_~dz{}TM$&$wxYBZK@W#~)mRHO3kDCF>7ATf_DJ>O-5>Js!L)hfaj+h%U5i4KaHw z@UG!++sx2ir@BNh>)M9${P~y6a;WHZ!l|<%$CtJ=1k@kDR^rEGyT+IMPSEmyT^~&@ zZCRDHc+;PSVo$PWl*}r&K6tieu5h2((~Ff8Qi6Nh_RjnD`Dl%sMel_T?Pkv-!}PzZ z|LVOc^7DPo6`rs!5`9mY1p}k3=iFL7fwQuH(WP=3m6OJ^nm^sH|NX6(S?S6Da{0fU z7v+lk<jV5*1-xshs&_xUSmWWF+x8P@oICz_$)3w|Z0{Jwb1oGB9C>@joUd8SCWx|@ zyzuC}I$7?8zu}j_l_5*lUYPhN<}=IUm#6N;UdlNcp#5vP5R3IqU59g@o0MA;E|zZ0 z;WnJC!n=~^|IQ1h4PQ-Udc$f;E-YT@{BO}M<GcJ5o;tDHMQgqK*P6BYPQB;WEuVI7 zjS#<bZ%yivv#+9Cza27|v+wh#%b!|BA8T&kepamSf~nsX=e$(*)yD!7D`&obJB53S z#=K<;x=%c|U+@q<HUFBl!Q5<LCB3HI*N@n|StaZ;{p>ogb+_Nl&;1@Ju=~2=_L;e? z{p-csUniZ-HB;U-<uAWnzhYqG@)!26-_+N)?LIs=>(BbTciqcB%I81X$@<M+^>;ka z$8CY9l8P2=$XQutEa7H0(TH6#Rafv7+o>-8|G%f}*Xqs}HLt!eJLkuz`~P2N-~MLy z>Efm4HIp1WO8p+G7kmEoTddjnoYPm`T_7uLf8DQnF2x-UEA>xusIc^$*!Qek(d%8X z=!@Ge^^ZdM3k-h0INUzzk+ZGN<R|k#)|O1MT7T8#`&{#`9|d##I4*69->G`D|IHzz z6;s!%%E>G&Rw_)A=e_-QhvBRwx%f=kROb0*vZ4H&x&&i(>o3lEI7MZ`?ysT`jd?#j z@Qykyy1Klzb#u0w`R*sG3EOKXiGDd<Ci0|Qr0H+xyUSPWWlI-JEnMAs`A_1-Rfnc` zZ&{VqqWz_scf<L}V?t(;UT)isU(EG7%CzG>!>PFkqgSmu)_rICi}Ox9<Ib%#OjXjK zy=SYBFh}jNq~^5RpVntz9=)iST-f^N_L)m!PZ#Yxar2GjlJcUSEfH(t91|G(4*Knh zTJdWs=Z0PX3JqlyxTd<*ubN-FR=jP#&bF3RLsjdn{|wH;)1}|<n8nwi^FG@#WVgmf z`L0cTAMQM2cq_-{eLr`t)E%j;Yp14UUuSq`rl^=YYlW!J_F#t{TUnQ%c<TS{lLpV- zwk1i=HfVJGTr=aF-G#PUI~H!5*lH}UZN7Ee&YlZTRkaF^tm<`Sp6NBwqV;$E+Dj_~ zf*Q5^6}nmXW(8^=U+3{+U%$f%-GG(X<{tJ7>EBwNp0e|4hTN-;5ZQ~irSlHmT=m*? zUftHd-UVSt8KMv5?Y(5F*ST<_m48W>Y4q*4m!kG=`_3S|La%0?YE<$OPbuMds}4FI z3{zu1da5q??OwCHm$=&}yfyEAti;|Ey{JAsUDR9q&Ytvz=W_43e*edHdxc;2`dsO| z5>h97m)BYIocNIRMwCPC`tkB9N2XZsTg>ZFUgK`Q@A0Ea85evc?d8h@t(&bb9$6iH zgsrN=bJ-$e-95<~Uix+)EiX)M{E_o}VXOZSC9@-5-yUp|e#9oQ=x}F!Zu{S}E4GFB zUte&usQ$>m*TFfK>A$S@UVFap&W`G9cGFM)4=lPFUCp{f?f?0A-~3Gf-#+~I?e0JJ z=AZ6N`)z+^ii)zDWoMC)a%V;IvGfkEFGk8MXIv_bn_+(CWvHa{$_-O_E@tuSUW&W8 zl{b23&Y|ravuCV~<&C&(*&z0#G~u<%?1sikoCz#*+<c5C)i*Iu{j_ew0j`VX-r7Y0 zADB0ve0Ct7`CjV_jZm|cZHpW@ZIxLUT-@3DFlqK|?nA#PY&l;c-uT+%Ov8H1^glcs zEAxEp-QLtb3_H+y!gA_qDV??#Up{R3ZKZYX>lPk{>lH`$8C_cMs~xxUO6;t+CQRC2 z9!jKJcKYg1TC3F-TEua$KF7Z;=+&lhg~0V^gdKdg-_KUNxN7RD9o#N0g4Y%prr9Xf z@#n5;(Y}5~Yu<Aov#N=AGv8#!G~fNlT(amx|FUy_FB)1*N-ykanz-Rn+ryRX?j#>c zGg-g)+wn*2Hy8HT*!lAxIq%dJ^lJORfWpgRYAeOqogC*~Ecq8_`LXkpO8>F?s`-yZ zG%q&v)+q<>d-}#<mUeK!-l@+#*Ii0m^>Jo~pNabi=LLuIqyiOHCg_>I|Fq$+Y2KsK zQ(-y_XGO5`WX%(bJKJHl_-AnB`z<lOT-R?4-n7kenp1i|`K;^<hR(OI!#7#)VbZwW zz$(Wiwcb!&V_DN=&Sx7xet!B{WYg~F!LRF=Ew?c-_7gWz6c$=6*?oG$N*>LUQ*kv` zc?RpAb>y7=y5)5nKiky*$2LFltNFome(8_;r`gvGe_fCI_y6I8i*c?0?^o{FTYLQf z{UgQPKk6k88M@RhS;<wwal|$~!|BtZxiQguw@aI9Z@I$uM|e{9)n{3^)800x-gBCJ zV9%Qwmh0=6CLeE`H+zNu+2po=aT}Mvd}R8}%|-FO@v-8ydBMCje}4S9_v~hk%OV@b z2NJJeA6PYY_LiKrVW<1p_(LvSi<4yK`KuN&>tW5W8~+)~elFBuRCblOubWa5?e4?z zD6aX<r@M3143%Co=^BKud!%(wAZ+=qTdivtT-Pp&oO#n|!@PRo*VC6>no@k?pm;~; zR8<j)GR1lu=BKd_W^-Db9@zO>fcsPJTCEj-w!|-7oU!)H!%co`*V?*SOfHJ8?(|)9 z=Zw>p><9ZEoImt<&DN>Y0&I7F^$NeUEN%W3u640Hr^cNytLppp+9`U?wSvTx`ss^n zH_a90`Mc@7`(|ryne3mZFXq=57=|QD<{IvuwQYG6hx+ol3l7#>G-t~mIoUL+Sah-W zS<UPJoO62K)vLbCzR!E|prr4oy;u7ViKb8Wef%wmXIYQpx%T6$?*y#be(I3^re(j5 z6|+XUX#WYF!acchq41#vPmZXxMuY}&r)_9eU<zppn#Q)PM0`s2_Z{n7ima4RC)P{y zXMevPYq0T3d;llIvgQ02Ro<BUiM4Qlnq0H<zr;)X(v?QjcDk<auCaXof5XpttKOX2 zTTrvW>*C=<U;j<_Ej%#G;7NhkB4fk(iZMrmk5pCGC?D~d$+npNl=Dx=hsIl0J}R?6 zesfx9w^^D@<C)oudX91|*E~IS{%0|z_o{Px8tP4yE!p@t`#N&mlBnDKIb;3yd5b%~ zG{nEW7`0=S;O|<|8C7k@AKvfQ2wZKRFW9CzDWz@e%16o3OsQEd_Y)oaR7D$CG~0f! znf~PV#C2N?)TF=NUGV&$r0>I+s|rO&HrY>{@#t-Pb<xRpDqHs7DAxSB{)ELfPqrB4 z|8H$>t$bF0zy9vc-Jk#On)qDoME%s$Ro<^Gf7bfB-1A?d5*g*J;o2u*7#ZLxEU7+W z<)^DtI2QdETA&@A=*HSR;Ys-e2hZe$D`_mtD=p7yo>G`oH(S=B@#CuYRf-N>!P}1Q zTy(D`^xIyhW9e>R4@}JxSJRg~*daXQOGc+0-#(|=PikE@$xO_t_eyJdtRi6fxWXx+ z>b>w8^(Fh){_AJ?+uSiv_L42Lyzu5D&Q))!>~8fPHoq(0)_e1g`@aH%83z>&lVgnD zAAXxZFIfKP){Q?-)LT^e{hgN?;Jg0Tox@(m_w%-!ZU5Vx=lk#R`HUmG`KoqbI{oeN z-qk!+&o3ShDz?7=rc7qbjE5@qFD+iQi+b40Y-?V2c!7Lq!iS9YwGXu>s2R>ZuV?w{ zVZv@%i|G>IK0NgMeQWA*-XHfx*B*A{bY$Bd?)>^gBBvu;|E@(}e{1(trJBcn*mdX5 zy@Ku9aryP<65mgqEuEKNf0=h{_iF*+;6noLsUoTCe^0fD{TH!+a|YMHMT=WxokQy< zG&&wxt{HRcrNAvWk+3cCT>h)NeV6XJ`RStCiS{&>gvg9i#&FZUyF~sk=T+Su$FOGe ze@VMr>t6l;zU}>|`a36zvw!TLzot@K$kH$QOmgaR?O8tzdmERfI0{Sc)eTv?YwNqL zwzb#XRrPv1U4_GTy`8%6#knpOj_*BsXOH!+j;{ayYKhw0sv7eT9rmgxbwn=j<CDK0 z<Xd0*>gw;ME9b1Ob`IF&mcMGzqtassGj0ZWF2Aw0IGj_#XQeZTQ|*M*t1OSc-)oeb z{)BadR8`!S%WFlaYzWZ3s{0`Qh~-)>w%w`Ig)Y~wKluD0Th+!T`zvLo-_G;a)|A#- z`>;zZO*AmMzCP{ml*J*LFQrb4cZaV_ytZ~r&eo?{IYH}B)#<Vw)Vi7&>A0eC{p8&W zR<q9*+jy-pZJFU7+~OPZIUq%at99GA^0nUuAA9I5DrywHvLxrn{;mZU@1jGq9_>}s zNPGELW^T5kaiWfMj-y3TZ|0_D`W0L9iqe=mZWeOQa$~vpXP-ko_o3+tlc(!U)#SK3 z@wEG#2gd3vdv7>7>CV03q|)#7-o4CEtR;VC+Y6m!o9mA!Ia@t931>=gePOlp(~jj{ zMxjM&*N?2=G=1^q)E4)Itfmj86M|W)C3BswY>|2x{rbzMV{2DFf8j6va_K(jI7g4_ zWv5pQ{p=Qg9d~ePochvT8dvLg7W3^md;aOC|C)`jsy_YaZM$t9`g{J}gR=kYjnA)r z_<!ra@W>6t(**ncw#I!nIJhW~%b-HyBvb49IJHQDiNdbZ(w7P?StqR5ak?IRHFTHO z8@?;m5=ut|w}>rUs^7YK*X_#anTrJfKHIW$PP~=N>154F^_)rf56)T|vSh;sz1#Jg zJ5u8gZ2WMo{`K!r_D$=ihTeJbY~k9+?DpT^{djFZebN8tGnSjoExF3Dw)4M*jNPiE z^>^g%-2H#|L^1aZd!C2APMR(5IrA3poUq^0TS%b)L(0^NZAaZ=|B22snOtjiSh(m= z#J;Wz=G(+VHW}pH>ap18Y4c+7gvmXevyAs$sbj96o!F=TwBew@y1&)4j-BBDaeMp6 z>)-!{Toe6W$IrLGoLybNFYeEVe!s4p;(Z0PCmq)N<tT6e&N;!%#!=q>+qMbY485nW zY3sc|y(@RVj-YzctRRV|H)a(FGh*7e`Mryc=~SAer;)zWYYx{-$=tGIb6hUZa8;7Y zywm8?TYOPHv%cQY`uH3cOTYg!z86kYHDNkE$042J{o&~gUUpAR{tcUa{#1F+;%Fy_ z!ec>>wT*I>3hr_d>KuX%&+O(r+kC_~Bk;QUl*0bi5x)$XN(5WC^FA(d3Z7GP=%{43 zV&*wPlO$IEtbZY=mW6uUx~sHy>*Yhbxi)Nn0_DAyt*ZYOHDlS&Vx=d04pi|@7g|4S zrufy>R(lRT)4GzN9qqd-zxU}|n?T-KDYmm(Z|J-^@hiTwc89>j6erhn(^c<GkGQ`& zI#H~8^Cj0*siiXdp&X*mwom1sE;ZM)=7H1C!iUVe%+@;YTz2I4|M&lY)?a*i`S5)I zzPP{Ak&`|K`EU5Za;e_(o?FWjt)I+ipYJ@C=hJ#>*LtJgIn8#y7d*Wl=^D(K@PGOi zKkEsav3GLjJu&g_c&xo@1-n`0BBcdib9(j#w+P;<P~C26rLoP@D&+PZ$;=MFvkV7k zipB)Z?F>i^P4KbYzHo-axd}IZ9dSyRd{~rX(R)Hns<6y0$o8b+!Jl)4>ldn-EoN$a zcfoASfjN%?om^g2E@$1tqiax7ao_annuLx%N2XW)>6X{CY)^-HByCct%<~an8`|@6 ziuXa6Yk_}Dt(AHOyIzYe{Ch!0J2F{r_uKDlvKKCL^uPZ&a@v-P*Ktc`dj!l~*D<># zLgtRa52iYu2&4HElMf}%T(InZ!qVUMr*82qw|Z;X!=I@5%=ob&*UBpqlQtC3p6-}F zC-~#!S;vCTIJWPc{&>}%HN6`@?fsE$yFJihP0s2#we6ylzf5h}ec((m?;oj$*N@!P z@w0u#@#*iT?pF&_^t%rHExX~do$=mku17INQL}YaAC$dYuqsmf#+1FA>{ls1`gJX~ z`GEd``rw5tw`yL~-2V4Tc*C7W19Ph#yDsGm2N<ZcE?nd2vEZy^^CSyb@s@LYjdQK| z{5VeSU1&4KoW+q%;lY24+5S^5*ZLe6D6(<qj6CqvYu06!#B(p1Jb1K&C2g+>%>3I| zV8OMR$yfWa(dzyGZ>*cieL(5agcUD%b9~KX+4pcnPg_tg=<l=C%|&z1>e4204XdL} znetbTXWe#C%CcC*chlyqJpZ;H{hf*>Ci>5Ek3Woy6Ja)dxAvVu&eT^c*6Qa3bZ)*; zpKv^)!eTe8-VRooZ%0)v6W3q+JS+F&7QLr0oX#c`GQRm9u++BofTp71A&o<)vW(Lw zEV{X4+w#vhI|@uDOsRKU=ew?`#X0M7$W)y}aZ?_oPDz~Xwx{q|>%S>)zg$?rH|<}u zP~U?3g$KnqYnVpN{&G-IEQMPrWVO#fha+D!xHpA1KUJTR(ynP1*sLeW5oM8i+Gan~ zFWt=T)qXc_?hd(GkgoVk(&EITLmSQBUfuDs>vr-n*-k5$`_uoiT@Rn5Qh%(_mHU&x z-36W12Lq2(tl55i(pk$RyFDcO5`TBN@m<w(v+j?Y_V)DmnxIqf-F13B*s>0m_^222 zDPNn$(#YDP-2VOjmEGIF@0{{4+|&7b%71eio~)nsW#8J$Kkm<avQzh0yzt-EJN`1O zFz^3(!CLCIees$-7D-l$POUBzOTwz_JM$LCoJv|5WY|+Usi&ZXZ6b@v-DB4(G;@R| zo5mgf-}TyM^~C6fp?d2CPdBDb$miMS5ZD&>>f@=q)^Ury_J;Uo#jfDu=Dm_uSh`~0 zD}LMUmWvk~@lKQ4#I@#8*W?t5qRS1pzw9$M62JAdOsnesf=M1bf-X(9n%WxeY5u(I zb40y(!P^U3vTIYB=G-%to9ZfQeE0YSQ_~2;DN)W-7n&3*EPa|&Ak2Prk>B<xt>{?G z^d(CRulihiZM))`{=G-L0#={<R(oiX@gYHtqZ1sRm(-Lg>MwAZZFth6Q|0?Uez`qQ zYZv5f>wE6GD2wyKM2@x$;oNF-?XK{$4^?Y_7p(q!yS{9FZg=_3OG^VStqPv+y?Qp} zuzSe%EzA?*LRIV*XV$1pus=L=wPePNwGXb`-Jb9~^x2x%;eTUqtt@<gmQicgdUmh) zJ88|UUfi|1?|p7ZXvD4uYxI?tT7*gE`D83ll;vK(>(}qluU*#D>@V6Z-7oESKk9p{ z_GYd4``6Thd<ri;sOQq07tL36^xxXtU)lGM%IaUeb$oN(|5xiL3bS7Nv+n)7YF)us zc0beh@7SsHMwGq5ccYZPw~?OREI#GPtq<+YpZ*kiuwUx$u6L?GvV$Fue$Osv=iJTt z*yY9bIXWw9?w_}KcuGO4G41L5)ki0VuIc?+zH>%GQ6b}zvJ}bMA0N2<>#r66jB>V8 zd~cj;nHb_JJj?&N@&?|@zSc*2$rr^_wkhnf_qwrS|6b!di=LC`%qu>ey%+aoLJ#}m z!Y#XPZ%NwUs+6$3CCMk(E62-r?6}ID4ZZ2R4?np1E>ClhY6*WQ&xQ5>vp-LF{P4DZ z-@Dv>ykFP<FREwz@K@o-e2X8Cb3e?lU;lOcBiHwi{?~r&3f@`0-)e&vCm);tf%Tq# zJC`nadhxNqzt6c>KUn_rHG1~Vf7Y&gxx+Q#pa1c0y6koBU$M6OyLtZqV!Zx`&*8o< z{6F=3pzi<g3E%zxmkXbNd+~px?fhOVjxy<MlTKR|r?vPOs!efU)De+Z%=*H<g^O|W zv(;zn6QzDgg{0+3^#xZvHL~%jZm3)Jtaiqv{&x>`qHFW6Tk~Xn<Wqg3dRXhhns24= zGAe6?=Oyhk(KqYn_xZV3ls!A~>#v8+{bt4A>N%&q>U!!>v@ohqNO?v&=dGRsz3ka4 zVGlVy3;e{Nh@4`Vx1Yt(ylTp$<A3CCUFoai>RTGMum0WI@UpX|6^YMfrZiuW-C-0t z_xI{6mrHN)?h=u*Zx2jT<=j-LsaGpI`=f=r%t}+^x&;gKlpm`o8SYpSp!iyA`NSAT zzoO9JfB&s{u*B(XLf|!V$>o#xwM=1neVw-<R$;sBpI2LqdnTJ?eVLT!{2=l7@=b5< ziZ1+WpksG@QNf(`^$~`;TH69QW!MHiYE6;qRw~n%3MpoK{deWufQ5&x?3doV9%E=P zeXE1}QE#cRp1_HHulhV2*A{yhoRYmD-Vm$5cJsHT7uJ0JvtQ)@@|vdg+W&s%+5WqK z?%ll)egAiNKHv7C-v55OMQ`I|X4C0>>}#G}y=ME?YB{^BV5#k@7~u!?Nv8z_B7@$k z_$5Cm_+is~;U3?gC7Un*tnj(tyg22v?sdf(vm~VzZW>6O$PScxJwbHw(qv7RM*eHQ z4y!Yoq7?2j{NcXSx#IrOv&+AQIsUtD$MS36mn9om?^MiF@&58#M*V?LlgjUv>mJ@0 zxVo$F#_sLRlSQtX_-~MO^iz;$n8;Uut8r&v;R>7nPnx0`!OgEub_Yj>%}Z5M4&>MS z(|e0YYGeBX=4xpcXZFG)K~)o)uP=_}EsosKV=*cBYDJP=RE%M26n9Be^~sfLYvZ1; zKYV>bqhR>jDam>_Hcq=2SJ4ovqqB9{ue}_b*6y>9>u%9HE$O-Vsd#7i+nPy-jwMy` z)hEpoFxfO)T<elYpkBjuwQklwAEQ18vsJHZwZ31wR$}t*$T@!DZ)Qwgx-Ri{#D^)n zU+pTDa$YXdod2up>DntdUX|u+a_FsC`-}TcsHIcLi|AzsgeQyi1RqR2=&ADPhnV85 zMIC3|1a`!4Y>nkhotwL)%;>st%x)I`doh2f99zp?FL`JqFX#JNckhX_cI=Xq_x-#^ zr`)?`ev*GHujZ#$n$cC_Os?Vo-Ut1$e>mr3_U8Y0>MZW8yjgFztNVYE^7-6{|Koiv zt=$_Uv^L(gnO(qhJH&FvD(=L|pWUZ~sBCiFpe^(AOVh&VYNC6?pE%TLSxfND3d#^^ zZ4vwCJhfJ-MXmnyq(A;keazBAnj7O!8-HCiC+(C7FB`MDT1silVSm#@4_VzTbPlZv zZC|9>5T%kdTm0+99hW!ln%5?}vUx$?>c?{@+<!i0@{LD~rwoo8FT7*1dhbGpnX@xf zvf5rmE=)G=G@R-e^CEfT;n4qLKQbM^u(Vc9I@-LWuCj5}!XkOom-Vp|eZRc=Qr>g$ z{kb_m*FHaGHGyrZiNVv(clOs-&YKdqpNTcxP@nZ$)n6(1B9*$Z#~SyO4ojH&e3w`L zpIcQ^Q1$EC)02~fmo&@%pMCaf-IcyArz}-x6*o9-tk<4>=V7qZ{=LDnstf*Hs-L~+ z)#pQQ2NWh0`>gi4`?!vKql%lLdcDJ;0;LN)`l?JzT8?zJpI@Gmd2ilCo*LuaKg(i% z|6inWutaTL>W%y7Er0C2EE02r(OP*9({?kXnX`*m9}g`wpR(9?MwpL>mxbT2;4--< zYvvc5$*a2fNS<!i^h}G&3YeMjTl(k|=GMA{Kc}dvY<Rus^y{fBf1NFx`6zs<*DOn| zdePO&DcRdrTkQ_Fwv5o_YAU=xy=Xq?dqzp+5>wuX7lRfpzw}_ozVEj_m~YA4yD?>L zf6$NFGZLh&ICY;~X6qE%^U9`YOTYQ7%=N~~8eN*!{=L4NtCO|{Mn}E;7<^15^W~+F zN*)psdD~k>3=8u9&wG4w$=}^gJGbiHt?#)t`RBI!omMrIcBrm>CvlB)vDLQ)sxMA* zFY{gHwd{ZB=KrhwkInj^xv$Ub(iKsO9M)LoWh<<<uF!OB7B9Q#bTfJ3+I6g{lAT<e zkGz_Gs^s;zWm_liNQk!Y6I!?Hutsf!WtZFLV`2umVPdQ0EYehOte$;bw&11n=Z5eL zmk%wRTliFC?u0G%+hiU{zO5@=sAB&uZ0S9-lr7g?-0wEny>j??e_8(JXBFn_IhQ|H zb?MGr`tx~&LZRDco{Eh@6>D~LSZFIh*yF4HO2=xSQIrMCnp56od~r*J{w<y3k~8U& zeL`dh$3@`_;VYeIOTE>Jsa~$bn^W`pJbS?Y++VqSF5mu=UOtO!@%Q?>X<LLHk6hw- z&YQA%7u)m)0n8y1JIp7Ubqckn2JoCyR80M=WE9ssW3ATwLZj?eo6BBI3&`+1qA$Mt z!<GBX+><r;GThd9CgUP0ebx4{j*?1TXF_y<bJ6rkOre>=Q68UCPdK(dzw&Oe!aX6) z-FMy}Xt}rD=Y^`oSMDykKHKe)^%-mRuN*ph?!oN#X106#?-b6xczw#Uxjiuq!f!k` zGKovET`lst=Kf4>+tCvVF_T{Fd!CvqxK^!v*~_o)*GgqVrd!TA^I>iLHV47k-i=Z( zUf8I<Hx_kBaamU3D5-zhp50DNd2Ttw24UXTvQy!y6<#Yg?&~hSvNkUB=-$)M!=A>~ zzuMXJ@BT&SZ})e4ot(zqxb>TT_0=Ez{oCF@+JFB{arBq}>rG!8RsHSLs%6@ARMGpm z*UJ0r7_YNcga@6s-pjjw`*zV)-`LjHN1i;lb=A&QG5QCWWpeRyefwk-vh}sW>9n=K zR<Asly#BEJ%s^@O1Yvv6^9h~lC&iQ=rpW)?y!3}{{l;H;@$Jzp=}F61PoK%c=;!po z!0cP%t{B1U_4n30cxld>yhFd}*we(9B{C6HOBRT8voUyY*;gOxbKaL<?U-fWyF>Y* z+f8*gS?+)RtA6b)qt|iQPQ?5?r?G`Qccb|gW8)6#Rhi~9Hhr^NnWH;RGQWT7?%Ka| zZoS{17WAXbowclf?d?gMQy)y5+rK4u-tW(Om+!n;*0?kCgZb9JrcYmd0;PX%ebD`O zucBztT$S&)>y)>by`QrF$&~rNqLHC}|2YH8Jnt8qF`v1zqAKiW;n~P%J}FYh8~+}^ zmVNxY_r$MH;;t^OI@WosGPr2VwBNq{yWgzp+G)6H(rrii)TK(oljK*`OYgm&c5h$& zRUYroBLRHAhFVqOmxHCREV!io%_Mfuu|0~%97`oyg=F?7Wh_d5K6AJGj1&8&XrIZw z9sVfyR>J(nR^iIiwbOIH-)`cbVp|^idBTgWZr5^R>}8I>s1xwm_CovP)QXz-+PZuE zLq%lf98=V2)6EiD{eF)z!y3mVQ_=deAN#dG|DSWDq*wET)W7=Q4;Qcc`~O}-LHhrC z<@4%K|LZF;$eg)<xy5Ue*}UaiDrs?V5>2gK*BtAay<mq&;(e_&$EgNAn>#mW`(*Eq zZ8O_0I7L?OE#uWEXZL?tZMdg&ahj4SYeclNfXw1slkyfzzrV_QPEtMjSKLN5p<Ar{ zm+B=irKd=)O6wB%z{)<gctW4n1N$-w_2+y3_ib!>u;qx~o|!@cVNUZu8JLG%-zN8X z(x*1HV{i9y_1??vJbxnS#>MUWn^!$vcT-CFyJqLP1D{xrt@DXXDh@4-m+0U!S5*JY z{F-6cvGY&j`!5!3zh0@DW35u=)Da{1U-~vT*SSaY>VqF7%=158ez})z<J$xL)hCXB zu8DfIRZI58j33h<@6B4An|P2*B;)11yBlSVs%!Fg<<HZe|KCes=c%9jH%DLo|CYDx z{UiH3CyJxL)Qj8vyC2-ayZ({QTATl(by>HRJUt`U-ErgAFO;y2pZBjn{d%FqTKQu3 zdy7x0u5go%+U&WjKKz5i)nis>#j1Ks&b?i!SrYfwyQunXZp_5n!M*pq^42#PKf5^P znaZi>b4u<9`z`f9^}2S^+fb>0PrpySe5Tbb$a`;gRN&8dJvtNbte+bm^66dI%U_Se zHcR}PHC1Ot;$^R$@AC~mm+_vz`qO@GV*EkIbr1i`+1|Rn?o+*W^IPkG_3zc@-9GgH zruCHPLi6X<v{zic>V6~R|MVS-LWy71R!o_-?xE9)1(jNsSG*>L@2=2%R}rNjcgDrH zCPmNn-#T;M*v>WY9!s6bF`uxDtuOW621gt7ui=Kf5?6YjwOgBidQ<MwUrP^fJKW&4 z#&PG;N;})Is7+trinIqs>^Az<spBtEf4cwd-Vo17p`z!L<6muEICnnlMsagL>Egdt zxqqh_ro{fXSG-oYCfDk#(ATij`?3-Wc+5jn&%AK-`>i$U=Y*B}((STJ0)4#Cw#2=? zkn9~7BR-{S=PRwy^|NMA-~5&9?j0ZYqRzS6&rOp{bpNitKdU`z9xu-&*D0r0oXO(2 zUX@!PSyq3+aISZ9hR6TVxi`Hs;u$WLD#VLkP*n(j&wBSIv(>Z}{qNtjw#hUejWWw$ zRrV%Z<31y2chr0aAK&CC-i>_6E00<&OXI$3ut3eERO8&%Ol`ddb6yoN#m%pJ^=n3> z-s62e8f$0&-840%N=Q87`)RFJQBgZrt@1Me9Ud6Awm#{V-O{GVmvgskuU>P;?)Rao zVYxZq#CNW`8ye0xb<d_xuTK4%zo=$4S4Qu@^!)OO&Hv^3-o5#s4;opRpT;FPx#QT8 zD4!Q=g05Nny`K|ma>&s?wo1<<!)WKuq~1T~36BrdM7!#oyQNdLpWWD9)csgb*iVj2 zA^o>jlxzJ7(w<o#VcTr9Hsi~Vb+=N@rWgHMIU{ma$j#T;o?KxM*N5#qc3)w3EPJB4 z+V0<zwixfXk~s3(?Dqq1g^aC}O+Wc)TPG-mU9tHxccaPXvwJ_4gl*tiTN|_GVfM3g zb2Z}xlJ$-+UZ3%zD`(g4i0!k3&Hv1i+-RWmlXW^n4%h13nxMS%3-ju)ANWu@@1pub zIoFHx*Sb~MvNB%HuFYO|Ao|I>jgOYkjE$akAXN2o*p+p2ozB|UF?l`G+N|&Hbw_Mp zhECp`^Irqa#V?32DJh-(da7@%@!sO<(|Z1&r1E|DC6r{&y(~2))3I~Srn9j%5uxwa z=U%_~b?2r(@`;KCQpI=j7&o2!pI)E8d)EKl{QTz+=l-b|KL2*w|MiaFv_E`yT6ACa z#j}MkUs|1bb}KR7>235D$$l073f^#?xzfAR4A;##b@bZ5BBz*Y>+mN<U2XdX1pU^2 zZ%xqauMT}Xxkz_@+4r53BQ`&~8hdTaoTvKpCkyY~^;g|n{f*bR`PTg9S<nBU`!@Ig z`QCb)`k$ZgKX`t2M#PD8^Lo}jE!%K-hko(b)wBO@^40mGqPOAQbkmI)nNL@#iS4?n z|Kv)1wP1YPrL!?d4u}1I_kNDgzmJ^XqQBp+NOz8XWcF`z)V>gp6TOl9YHlsvx$9?l z<R<_8f1h^tf8Tn3=_mV(B6>Qz)Ec4=|9|@~_kHN+|NLe3?|$r;uFPZnzue;iztuen zsfRCo^5iEyt67;;;i&dHvaQ(4tD|d2&*UR#-&GXUq<q@2ZX3Jdiq+MHa~gg$xw%;X zf3g0Us7I}JnuFR`^S|MyVlg*$Pi)Iv>&n%xFel3F+7y%G^6b-fIdA_3&T8j~Ykc^3 z*^(unZ+3i$dzj2})v3NDWXX~<mVT~HrMphg=sV7$l%)Gn=i*G$ry4njl-C$5c{=q5 zyIh{*<Dq-=qVS1Hv7G7YcGBMts_9<8W>64)&Fw{Yck+pswsQg}e=hr9Xxre?Vr;XB z^Q@-ewyBH!zE*v97Th7j^SS$2?I$~R%>{w=hB6an`2WW34e|O^eC+&_`l@-g%1)=| z9NNU3{`C9Bc7BbLz=c2b#5aAB4cj)$F{pmB#nf%49RX^$i}KT+hFJ@p2={(@{nrH7 z?6*7R?JW$~tFG{AHaUBG?bojS$1M+Q^0)uGTf)8~>iq}*&ZHGdhFi=IKHb>$b?ptY zRU6_jHS#>a9De%DG07=C?rH~}AMv%+J5CopzDrcTbu~-Nw=BLzkPQSHnG)(J{y#U6 zsT1arQhGQ=;Af7V5-Zzxt~*x)&oyR8O)a{@u$*hZm5#r{^O*q?vrTlqUf~ngahYiQ zebWb<Ra?p&cU)U-{b8@zhq|H{Q4ic&o*(2{Ucn@|X3KnSy&^%zuQgxah^)*}nYX5X zff1{Od*GzmKW0i9<dwc}>G__!pl-Xl=gK6p&VMoMqT`u&?oSjqDVQC(f5)b`&sSwu z@(4`)oe^xUZmIk8Y~)Iwxn*kmf+XUvW-n+~*A6m0`bd3~%hF|kwG<Ym=oK9bH8RmV zS+hJVyK8>rG8eIP!h#Pn-2O~*p3}?!_2<#HclCe%pS;|xetv%2<{yV@*F5{*UftZj zTl8Q3hm7}n{~q_+NSk?IRMau9a&wpYtlGqqIj_8-uCYaU>Gl6NO^&2`O^Vc5*0th^ z&f<wL)K|T*?zNNN<iqcAt7UVg+E1_6AdN&}sfB_k&vSadb?~Xn%ui<CTlKA9U47p7 z*X#Ft#a-Q8uX$4QqRqBP2_e-R_HPl{(7)~Q_lMQVtcxaRzf~5y__ywUiY9kkqVE5m zS8-*Wf8BIMbrk2#X`S6#H}9y0`Zfuk^$CLCFDAX1d(q^cd%KS8<&(v8Dvc*SmUzD7 z$jP<7e7c<ND@~(UDQr9Of1(PfbH0RsQatY?$>j72wrvY{Ds<GJwLIkN#_#cPZlTzD z$Gu<TUx>ypijT9mpMKmk`(J<3!n-PyRnBsrw-8;jJyrRdkX+y#1)<;!2XEyv-_Yu; z!2U~j_>O#z6FoVr<WzuWLk7>rM~A1VNIqnm>z`?2TAAsvktL6bd(sA;rB7m#`~6Cp zc0?b(CU>f!q)nYga?`uY`qU@dr3{~*=?C375~<d8?cA5y25Q~=oIWU}?($-1J$rb5 z&KjZZGONC2c76G{Sn%%*;Rh@%XFEUaIUt(X{_xwm>v0RDZgB4BWRG8MrDi#y!QS7P z$=l&_&OBv7-;+Ftr}LJi2sw!D$lBK6qJ47j`|O$Loi)^y9*JD3`u&3Q4S!1gWNER$ z!=cZ_wI-aie5&Yj?{Va`3AHKZQ=ePz&i4&hcNMbXw7t6T4r|_NwVMG}3tv{BKm9Q! zcC(pt@9i@NGVfXsE2t@VT~4sz_;IiAdFp2s%QVj3Yki^(wsA^pX4!8OJ^Xu>WT~W5 zSDC@{ikFHm#fwB(R$CinT}@ee`K!l*74>c^MmOV1?K3tPm^ZF*h>E<<ZL6=gcqjAH zi9vU-rMVPMw)5H)IN>#y&@YuQJty>=1YGVtmzf^qqG_ZTb3-e4oy$q)srN;e3tsH) zJ+W_l;>MG%Q+kEw>gj)Oi`h5L^|r&gRSOq?<eny9tmHAPTH3=mwx8p~k~@6I)mrmi zx_B4XzYn~2=w!yu(4R`O1ujnF9728b)QgUNY-zZ$iEnA$45Nii55<|!T+E)D{3FD) zWx-P25)(E_h4d5re{`ReEuO-+Z@p)#4{OSN=Z`{u=B_DEC0#FjW*(_~P%YP|q;#ZM zY;x&g+lEOQ#~wY}w4(IR(mp?qzWW8UCQskM(DZNPw$1gyzu0#=@ZbOAVC#QM>h&$# zYd6K+jyfG%I_=EC?Lu>TU#)Pxuc6!C^qQ@RA)4_38xzNY1?CRb4@<HOzh%ChwACRx zLFL++OTCUyUdUX%yVLmQ&7kddZqv>eszq-7n-%?Q@6%f$v#qXPmyFapx@5`yPu{P- z=-6M{k}Ht)C+CZF=coFq2g2q|mVL!m#J;<60<VNBx8&nT^G{rA3OXdDro(PFeafq| zQ<l7lIUeuSw4~`-iQ|>H7HRYEDa$nvRXvFI*dXa>Iag3o+TbLk`lfA3M|N~Qn`5Y` zu|jUzs_3~d`ilZv+n#Wod6g$JWzYIV*7wZ{8PCj2L-fvPDNT7G==p`SwSM!O>d>t% z`o@2L&xx3}HKLbaUdFV6kNK0j)Z4d{Og6bO%iC8i^*kOKbjE_m`K_+grK9_LeUp|j zOzyr{=kV&%m+EtAzt4FuVdQ-nbnL0V_JPze_p=fArLQ~+HQl{4^gZXP*m)D5o{~F1 zN5Cf5`ih_Zu^n<%Q$Kt*yHjGsaP3rIy;lCe(%qbU%Y?mO@_u{tboKJ(iT~{MI|JnP z=I_Wh*m3hpZ1Y3aN#&)zF5C4=&Q85taqyN*ud1t*vE0eYlR0Nc`Btkt8!RiH+ZXq# z%;8jl(~>XIlWQ79)H#>TcG<jiUrIZR+SJynH@~ArBkaD_9{BNl>LOX=B_Y;3(#?KZ z-*l;0&GxE(CVu{%)hD}T8+SkB{`a|Fg?guiSL87LVs&_KBqR9xLev8$E{R{h8$$Tr zZ~U(~MMS@3!-vKCC#A(w^2J#T&u23o{1Budu}eWBj-R7#J_E~PEe?~54)*E7eaR<R zGH_NNy<i~I!hHVs)6}lG4XiVJIouD=)!kxyLoP?N{$%;aTs=93kD46{K{isCr*vs{ za-Y0&(pP(8xVDkGOW)_695*aZELS;UF?kQ$3WF66#($(AyH%?!jhZ^o@dRf!+p$%z z7Hj&cyJ-CF3UWO0zO`ZfcL@#-%gHW{AA1gd-KG<9=fJEl7mL<%J~<K;d^b==WQ)@G zg=v+JqKUgN89UUQh^t6?FXZ}sLq)($q59XS$Q3I;&DK2k_Qv_868>A&+Fq2zgj)QW z{+#v2jLEF2#fkbiL~VSuqD&v|RCsaS$o-S{tt%nS4-BFf37%fQ>XO-+{NoJwGd=Xy zURrzb&*|K}>$gL^1dm)wxygM|-(JWsY_)oCRL~=ab1UYBFr@5F7p^z!&y-p$$t)py zNKbC#&RgN<cGQK6CodFVFke+fM0&~A1^cfZ+j4```>@pG`@f}kl`u4Oo6K4-+56^0 zsO0P?7A&Wx{K%g1mYpHO;+=ehAls~@g_n4Y<%D-sdqK|_Sln=U?k36E6Q-P)YJc4O zDEn#Q1A(tCwRC%v+l3;N>kn<c^f9LBTJh%FSKSthO;#y;DRaB6I4sq3tBO>ynRA4n z??WZ;PRq$XU4HLnrj|teEIl#d-ua6Wll123O+4j&cdz%+#jk6Z2!^_-9Gzq2si1Op zn|S(ylEUocJsdapDn_Q+KPu4_-z4E?$UQ+=Yxdc>vu>Fb-AKB+<Me?G>745I$%l9s z{%Y+#E>hAOpp$kn#>;F&+G_LjNx$zVJ-^%IcZKP@`J3|zdL9CajxPTB!hbdAt~hF3 zd_pqnO-9bo$O#{9965c@JG}hqf4SUm(aJaGGMUXP3eUhxI}j^7WJSvtOg#fWQsAN+ z`=a@eH98_yR(C7Re_r1cJg1{U_~0Z~&L>y4KfFIzAz6vPD^p8{OF_fS;%xfK{dWq> z8zYljC(6vza%SSxe_<Pu!)|%mzWmq!ro+Lr<0|`ZUc0Y6P4~Yd|LOK?E#5aDKWRBX zA^+Y_E`EmEGuEjuTQBc8zr)6B!i;{FUd?ABNv~hLOEU3Kp1bvh!r_Zk>Sr|OC?<<< zmgT#!Oy|LC|GM|`^NxI!j5|~|aXHHatqF>s?35%Ytn4_usYNUBzD(h+&I`Y{=Q*S< zY~S6OlX)&Bmh0i2&kQSm|NZy#XJtoXhvMVOb&I+>{%u}-c)7mcL5H{T^S&3)5>V`N zuH9ntUG-Cn=LgFOdtZw{c0u2Zmdl0e=Ptcqe@>OJ%23pD`QpkrrhZ9b(G$7~=lex| zvM+z};)?ry**S7^^D6WE;{N{l^gR5<*@Guf9_$Wx_xHbeTDauLr=yb>hr8>?&sjA6 z{^Dlw|8DlOdn-1za)hor{$29U&(o~48M%e3mbXl?GS{-4{o3~6%alHK7T+69A41-p z?)gwJDf-Iic;*|`61TIiWw}-l-<qfGt=9Wfvj0E(x>moSV<%aEM<oBZz9G${{r&&p zy>I94{{4S;h1mtebHz;C;(1m+4UM^-;U}DM>r3iNj=j7r)3+W|<L=b-6zVwGlxESt z%t6M|(;&lNu{PmjoX`y3DU&*rmYRolnIGQscY9n%T>Y|>LK3@ucs(zvpOl_(fqVX( zeb#4H?{7)u5sj0dw`fMu!&c#0-yg=C*67RpJ^1^>`bxvOU!K}O^WW(4+tpcFX6{*I zi%Bit6-1uT{H`GL(D=RMjPpkC5B~pVb|L%Zm$R%^Ri8pC7K-iJGvOG^_fX4ob)OHl zc0~B3+%7S5OrCb6#h|*xtnr@12QRdp_2n*K-|eh^H}Cw{KmQpS82<mi9JNt_;hP)- E0DST4j{pDw delta 230098 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 Z{k!?+zyA5p$iVRbe_Ze55{7qj3;?&xQ=k9< diff --git a/helm/dbrepo/files/01-setup-schema.sql b/helm/dbrepo/files/01-setup-schema.sql index 7e7978cad8..4ba9d70b17 100644 --- a/helm/dbrepo/files/01-setup-schema.sql +++ b/helm/dbrepo/files/01-setup-schema.sql @@ -52,6 +52,8 @@ CREATE TABLE IF NOT EXISTS `mdb_containers` privileged_username VARCHAR(255) NOT NULL, privileged_password VARCHAR(255) NOT NULL, quota INT, + readonly_username VARCHAR(255) NOT NULL, + readonly_password VARCHAR(255) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`image_id`) REFERENCES mdb_images (`id`) ) WITH SYSTEM VERSIONING; @@ -67,20 +69,22 @@ CREATE TABLE IF NOT EXISTS `mdb_licenses` CREATE TABLE IF NOT EXISTS `mdb_databases` ( - id VARCHAR(36) NOT NULL DEFAULT UUID(), - cid VARCHAR(36) NOT NULL, - name VARCHAR(255) NOT NULL, - internal_name VARCHAR(255) NOT NULL, - exchange_name VARCHAR(255) NOT NULL, - description TEXT, - engine VARCHAR(20), - is_public BOOLEAN NOT NULL DEFAULT TRUE, - is_schema_public BOOLEAN NOT NULL DEFAULT TRUE, - image LONGBLOB, - owned_by VARCHAR(36) NOT NULL, - contact_person VARCHAR(36) NOT NULL, - created TIMESTAMP NOT NULL DEFAULT NOW(), - last_modified TIMESTAMP, + id VARCHAR(36) NOT NULL DEFAULT UUID(), + cid VARCHAR(36) NOT NULL, + grafana_dashboard_uid character varying(255), + name VARCHAR(255) NOT NULL, + internal_name VARCHAR(255) NOT NULL, + exchange_name VARCHAR(255) NOT NULL, + description TEXT, + engine VARCHAR(20), + is_public BOOLEAN NOT NULL DEFAULT TRUE, + is_schema_public BOOLEAN NOT NULL DEFAULT TRUE, + is_dashboard_enabled BOOLEAN NOT NULL DEFAULT TRUE, + image LONGBLOB, + owned_by VARCHAR(36) NOT NULL, + contact_person VARCHAR(36) NOT NULL, + created TIMESTAMP NOT NULL DEFAULT NOW(), + last_modified TIMESTAMP, PRIMARY KEY (`id`), FOREIGN KEY (`cid`) REFERENCES mdb_containers (`id`), FOREIGN KEY (`owned_by`) REFERENCES mdb_users (`id`), @@ -291,7 +295,7 @@ CREATE TABLE IF NOT EXISTS `mdb_messages` type ENUM ('ERROR', 'WARNING', 'INFO') NOT NULL DEFAULT 'INFO', message TEXT NOT NULL, link TEXT NULL, - link_TEXT VARCHAR(255) NULL, + link_text VARCHAR(255) NULL, display_start TIMESTAMP NULL, display_end TIMESTAMP NULL, PRIMARY KEY (`id`) diff --git a/helm/dbrepo/files/create-event-listener.jar b/helm/dbrepo/files/create-event-listener.jar index 9fb1271c4361841c3d4061e536d23bc16b590d0e..42cd10a361a5b4a644dabc8044ccc4a52f5870b9 100644 GIT binary patch delta 973 zcmbR1Ki^+Cz?+#xgn@yBgW*_kbJV(&m06_|g%#@$`aL!f*z11E{s()Gxv!^lo(NwK zYj;S(`^hI;qI~C^nz!Wk{^P!i9a&p<v)@iW|9Q`I^E#I7tWP@i6F)E8-0E>fr!P;I zF<3SHxRcExhp;;qcV;!t@wob^CF1L{l}~ovI{Dl-amTiv#lb0A%?B1vsxiD1pt$PN z#eI`6d=9HBYOZ(O<>Ghe^Tsc!m%`?1AE~-psefwmjR4hmjgMcr@6KPLdiwvf-3@ih zA>s8W{;NNK{cNE?^s~MCTkK@`PF;yBtT#vzUBGnh*fl<z-Euq2pL~s+*S9#KL~NQV zkHN>gftd&V+ULu1UbCyLeC43HVC|-(JN|R#R=jK8`1gIG{X=8Xs(OvfE_Dg>H%{F? zcWaByGuv%PXFn{=kbRaLuk|Ks?_y;$**D7^T9+LAsP7@w^z1{yO^Nd<C+BkKXBebM z9bsAMmpJkHhBIlI^VEKpPMg*(^E_PgfsJSS_0uNy_p3|KPA{&%yx^wbOS1}(ciyKp zR5*TJ5bEh!Tn>s0E(Qh;1_tJ1!OfF5F{&^h4Q`%%lTnu$#OGv^1Jhbes$e>ZNefKZ zGns(tZA@NZ^~}s?!SrS3ZjkuqM3y;BAjT$kZcY%rnNOfb5X6|=t2hfxYbj0Ugh&76 zV@j6tARYq};DoaU7~VQApDd>=0k*?ZS(@?O<WOZrusM~=(qjJ@85j~v^aH#ZnM9Z& zz5zLYm9n&zJQG-|q_jLUH4j}y6x;>|1_pjO2V|W))8s@ZVO~@N<yEAaN|+}1G0AG7 zNT8Ubk7CYhkaFqC511r0L0TZm{%CM>)Sr26PF)NP3?CR67&PEo7#Nl`{+N7U#T@KY zNmXga6O&C<1HnG+RF!55W0_pQVlw%bDi2ubrK&X3SGLLg>=KjZ)F48-YSK*10+S0^ z)F&6J889u7o!rL+vR`cS6*Xb7rdMjxOihY#;j@Z-+K`ZgI1UsI!X6>#k{K8nHZm|U S2%|VoesZC@8rx<ikRSjyLt3T) delta 939 zcmbR5Ki6M6z?+#xgn@yBgCVG(AgXd{`Lkk128J_C3=ATZ?<tAb_Xge0d#oT(yZuT1 z19pbxrFW0y`+iR}f92|>|Ne2}9><M^EXnDgzpMJaUUhNRZvF!YWS+^KE8stOO(bI9 zB>rv1OJ}Uq@y)YkoILTgv*x=*1@%0eyf+SUF{}P`M10$3Sd_Z$Q>MGb`q<?s4L5Cd zeGuVk7oE34WZ9=JuT{S6nb=tWCt>2biNfEHM*OmQ>GRxsV^o=9$18<vDM$PtnEbr@ zPAco<$NfLgEr{p1dNuyj|C2vA?bANmRw?ea_WSR>n@R)jyw|m4UD2?$bZh&8eeUmU zS!*XPzpNq^dnA>W*{8;S#ij?#4)^!DWXm_(lr0dsFiT1PJO71a&+kQE|1bGncwa#M z#`aG|YWFw#-#B&qoTZc8XU5x~wm&V*kbUkOulXiw?^0$n*_`DLN0%J?sP7@Q=-H2g zn>P+TIWeDWedY%Bs1w`~DVy&+2?z<#5c}M-A<99f(#$<3#q!$Jne*T6{qgMb&i5u6 z-&}U}%1!!z#fYo3>E2cs<;zcaL6O46z`()4z#LRiFnJ533UgpV!Q|VFx?q}{Ne(Qo z!=wtPLzuL{bR&}qnBKwU1y;w(d=^Y!W$p%vZ%$^J!vqr8%*4*k2^J9$s1XD)Cig4O z0@FH5lR4oDVe$zjOL-8F0SR!z*#Zo29hXj4P?i9hIoVoSn(@r!aAid>uUc7J><=RY zLt=@3fHxzP2s6YxAm6M}mbR2-0!x*YmS?8sp{t03+rYrUzz^qutaF{D0`a<{iZoLZ z)8q+EvXi4#xD?PGsgI&-B}k$4<OM29@__{fQGe#OIdw5GFnnNOV9<aoWMEj*_-*n- z6?3rrrB$UFk4-jL4Frcux2iN#2+L%70rkn}RVBd+UaLwoeP)|1$SyHiL5&BjN?%Qy ziBVv(ynycHN;NH}d9sryFiB57pr#3yeWNDL)Sw6zlA3I%E(Q)-VULh=$qWn(8yOfF Sgi#zLJGoe0jcub6NDu&}bW!yH diff --git a/helm/dbrepo/templates/auth-secret.yaml b/helm/dbrepo/templates/auth-secret.yaml deleted file mode 100644 index 0d1b5625c5..0000000000 --- a/helm/dbrepo/templates/auth-secret.yaml +++ /dev/null @@ -1,94 +0,0 @@ -{{- if .Values.authservice.enabled }} -{{/*openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 3650 -nodes -subj "/C=XX/ST=StateName/L=CityName/O=CompanyName/OU=CompanySectionName/CN=CommonNameOrHostname"*/}} ---- -apiVersion: v1 -kind: Secret -metadata: - name: auth-service-secret - namespace: {{ include "common.names.namespace" . | quote }} -stringData: - tls.key: |- - -----BEGIN PRIVATE KEY----- - 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 - Px0kzVCk41nBfNgjXe3s2BLlEhh3Lrk= - -----END PRIVATE KEY----- - tls.crt: |- - -----BEGIN CERTIFICATE----- - MIIFDzCCAvegAwIBAgIUCRgz8OLg6bHay9kWHFgSp9SF3RAwDQYJKoZIhvcNAQEL - BQAwFzEVMBMGA1UEAwwMYXV0aC1zZXJ2aWNlMB4XDTI1MDMwNDE5NDUxOVoXDTM1 - MDMwMjE5NDUxOVowFzEVMBMGA1UEAwwMYXV0aC1zZXJ2aWNlMIICIjANBgkqhkiG - 9w0BAQEFAAOCAg8AMIICCgKCAgEA3YEkafjPSOG/2HNtUlwJ0aY6vOVNruM7wd7X - EUr2aclrbAbsB2NjhBlFQpTxGL0/EIUUTHXColwO/EORYlzxonXN5CYYLdjxOEeR - mqCxubxhkIppwEhN9X/eMvsw1obzcQpbosdPBTO2dlR6WEB1mRb3pbT9Y3+vIJkA - 4LvfYWf2a4vYoPG/favcSE1zMOoG5nXrGnZTS2gBE8IwSXuOPmP7kN1R0FAiD0MY - Dz8xIr3HkdW3lKZ33JlWJjvDuH9LuTr8jdQWyIXY7VVbdvbP1fEDw7BPDHJyJqEy - zddHAAquur6JZw065TPceRq4PPRpc26ULD5ATJbWPTUz9/jRUq6X7u1YxFWDvzuZ - OiRRXzJah1LcoGjYu3TnjmNyIsrS+678VixlEGAe23uuthEyvJ8ORfshomnurKWT - 3+55iNoi7PI2uUJ3lOpkKyn6jvykSQXocGT9u+9Z40TtwSMiT5taMoJ4oVhvo08v - cw2AoLiaz2dX9Yb1M35qQircqmsRpsTwPGA7uHci/ayYH96E+X2L95w6THjw2Id2 - dfGHqmCX+KZg7+d1rrOQqF1EX3NzUUU6jECiyjmL1Vk4jOKHWOPlZG4DlDqy8Tiu - ZZWUgemzudinHCqUJ0C7d9KJBkFw5bEdYWxSAwCNTVopRbK8uCaVXMY0yRkDFdlt - E3Bvn5ECAwEAAaNTMFEwHQYDVR0OBBYEFBWE851rO2U9WR+0md9lfAbkAtevMB8G - A1UdIwQYMBaAFBWE851rO2U9WR+0md9lfAbkAtevMA8GA1UdEwEB/wQFMAMBAf8w - DQYJKoZIhvcNAQELBQADggIBAI2dI9hT/xfnwtYAdBlyIJRW1IMn1vVo6Xm/UVrl - PPmbB2vQ13Z07vWi0Djwou+BwUhFSq6YRIe+bhQjg6On8O2581aNve97K1AwwB3O - YZztiyyJ5Moccrkb9Wy2MyfUiPqNY3O8Q0BRl793Tbv9G0gyNudO6FmmdWpfu/VT - ZAfiKRvNycC0BZp7A7tkvbtYWOQ7cGa9qpcVSBHvALj+3b+RKwDVf7K+YBkOXamT - Y2xE6KhHz0FJmFNTIkdwjA2M3CCh5M3QVHyXRDApNKiav5yU6TWBT7JQqZA6GV/+ - jrVNl5fZwT5AHQmwQB0k1q1azjFREMLQXzgkfuSK5AiW+70KRpILxOMzx616FoZH - 2D+7sZ5EXnBVZmAL5WLSraOjwia+jyOUrTIUY8t+4kabxdKhQMhwOATUe4dAxIZK - VGHVHKNJ9+ktZ+j56AUUUNRWNx85LoMjh46e4T3rYm4CG9cBQAHGEXSn1i4bt14q - j4+9BNow4f/66XcUOsvPmiQGqPNWFYVj0QIq84yakzzVWdMm6MEu4WtlVPGlZmRV - OUHuaqiSmdGcHRVGdmqkTTpRUGASw7HR/7nPn3YFwP3yfZFUa44hbtAdQQll1O5Z - IuuDir8s195hl0UJ+9HilYEuOVjB7bS0Wc3sZxOP2U/98CBa4UzMuVDMhJ/WKs5U - znPt - -----END CERTIFICATE----- -{{- end }} diff --git a/helm/dbrepo/templates/dashboard-configmap.yaml b/helm/dbrepo/templates/dashboard-configmap.yaml deleted file mode 100644 index 9643f539d2..0000000000 --- a/helm/dbrepo/templates/dashboard-configmap.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{- if .Values.dashboardservice.enabled }} -apiVersion: v1 -kind: ConfigMap -metadata: - name: dashboard-service-config - namespace: {{ include "common.names.namespace" . | quote }} -data: - {{ (.Files.Glob "files/system.json").AsConfig | nindent 2 }} - {{ (.Files.Glob "files/rabbitmq.json").AsConfig | nindent 2 }} - {{ (.Files.Glob "files/mariadb.json").AsConfig | nindent 2 }} -{{- end }} \ No newline at end of file diff --git a/helm/dbrepo/templates/dashboard-deployment.yaml b/helm/dbrepo/templates/dashboard-deployment.yaml new file mode 100644 index 0000000000..f2c1a6fff1 --- /dev/null +++ b/helm/dbrepo/templates/dashboard-deployment.yaml @@ -0,0 +1,77 @@ +{{- if .Values.dashboardservice.enabled }} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: dashboard-service + namespace: {{ include "common.names.namespace" . | quote }} + labels: + app: dashboard-service + service: dashboard-service +spec: + replicas: {{ .Values.dashboardservice.replicaCount }} + strategy: + type: {{ .Values.strategyType }} + selector: + matchLabels: + app: dashboard-service + service: dashboard-service + template: + metadata: + labels: + app: dashboard-service + service: dashboard-service + spec: + {{- if .Values.dashboardservice.podSecurityContext.enabled }} + securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.dashboardservice.podSecurityContext "context" $) | nindent 8 }} + {{- end }} + initContainers: + - name: init + image: {{ .Values.dashboardservice.init.image.name }} + imagePullPolicy: {{ .Values.dashboardservice.init.image.pullPolicy | default "IfNotPresent" }} + {{- if .Values.dashboardservice.containerSecurityContext.enabled }} + securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.dashboardservice.containerSecurityContext "context" $) | nindent 12 }} + {{- end }} + envFrom: + - secretRef: + name: dashboard-service-secret + {{- if .Values.dashboardservice.init.resources }} + resources: {{- toYaml .Values.dashboardservice.init.resources | nindent 12 }} + {{- else if ne .Values.dashboardservice.init.resourcesPreset "none" }} + resources: {{- include "common.resources.preset" (dict "type" .Values.dashboardservice.init.resourcesPreset) | nindent 12 }} + {{- end }} + containers: + - name: dashboard-service + image: {{ .Values.dashboardservice.image.name }} + imagePullPolicy: {{ .Values.dashboardservice.image.pullPolicy | default "IfNotPresent" }} + {{- if .Values.dashboardservice.containerSecurityContext.enabled }} + securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.dashboardservice.containerSecurityContext "context" $) | nindent 12 }} + {{- end }} + ports: + - containerPort: 8080 + protocol: TCP + envFrom: + - secretRef: + name: dashboard-service-secret + livenessProbe: + exec: + command: + - /bin/bash + - -ec + - "curl -sSL localhost:8080/health | grep 'UP' || exit 1" + initialDelaySeconds: 150 + periodSeconds: 10 + readinessProbe: + exec: + command: + - /bin/bash + - -ec + - "curl -sSL localhost:8080/health | grep 'UP' || exit 1" + initialDelaySeconds: 30 + periodSeconds: 10 + {{- if .Values.dashboardservice.resources }} + resources: {{- toYaml .Values.dashboardservice.resources | nindent 12 }} + {{- else if ne .Values.dashboardservice.resourcesPreset "none" }} + resources: {{- include "common.resources.preset" (dict "type" .Values.dashboardservice.resourcesPreset) | nindent 12 }} + {{- end }} +{{- end }} diff --git a/helm/dbrepo/templates/dashboard-secret.yaml b/helm/dbrepo/templates/dashboard-secret.yaml index 7fdb1fed8d..21ae5b1311 100644 --- a/helm/dbrepo/templates/dashboard-secret.yaml +++ b/helm/dbrepo/templates/dashboard-secret.yaml @@ -6,53 +6,12 @@ metadata: name: dashboard-service-secret namespace: {{ include "common.names.namespace" . | quote }} stringData: - GF_SERVER_PROTOCOL: "http" - GF_SERVER_DOMAIN: "{{ .Values.hostname }}" - GF_SERVER_ROOT_URL: "https://%(domain)s/dashboard/" - GF_AUTH_ANONYMOUS_ENABLED: "true" - GF_AUTH_ANONYMOUS_ORG_ROLE: "Viewer" - GF_SERVER_SERVE_FROM_SUB_PATH: "true" - GF_SECURITY_DISABLE_INITIAL_ADMIN_CREATION: "true" - LDAP_ADMIN_USERNAME: "{{ .Values.identityservice.global.adminUser }}" - LDAP_ADMIN_PASSWORD: "{{ .Values.identityservice.global.adminPassword }}" - LDAP_ROOT: "{{ .Values.identityservice.global.ldapDomain }}" - ldap.toml: | - [[servers]] - host = "identity-service" - port = 389 - use_ssl = false - - # Search user bind dn - bind_dn = "cn=${LDAP_ADMIN_USERNAME},${LDAP_ROOT}" - bind_password = "${LDAP_ADMIN_PASSWORD}" - - # Timeout in seconds. Applies to each host specified in the 'host' entry (space separated). - timeout = 10 - - # User search filter, for example "(cn=%s)" or "(sAMAccountName=%s)" or "(uid=%s)" - # Allow login from email or username, example "(|(sAMAccountName=%s)(userPrincipalName=%s))" - search_filter = "(cn=%s)" - - # An array of base dns to search through - search_base_dns = ["${LDAP_ROOT}"] - - group_search_base_dns = ["ou=users,${LDAP_ROOT}"] - group_search_filter = "(&(objectClass=groupOfNames)(member=cn=%s,ou=users,${LDAP_ROOT}))" - group_search_filter_user_attribute = "uid" - - [servers.attributes] - name = "givenName" - surname = "sn" - username = "cn" - member_of = "member" - email = "email" - - [[servers.group_mappings]] - group_dn = "cn=${LDAP_ADMIN_USERNAME},ou=users,${LDAP_ROOT}" - org_role = "Admin" - grafana_admin = true - - [[servers.group_mappings]] - group_dn = "*" - org_role = "Viewer" + AUTH_SERVICE_ADMIN: "{{ .Values.authservice.auth.adminUser }}" + AUTH_SERVICE_ADMIN_PASSWORD: "{{ .Values.authservice.auth.adminPassword }}" + AUTH_SERVICE_ENDPOINT: "{{ .Values.authservice.endpoint }}" + BASE_URL: "{{ .Values.gateway }}" + DASHBOARD_UI_ENDPOINT: "{{ .Values.dashboardui.endpoint }}" + METADATA_SERVICE_ENDPOINT: "{{ .Values.metadataservice.endpoint }}" + SYSTEM_USERNAME: "{{ .Values.identityservice.users }}" + SYSTEM_PASSWORD: "{{ .Values.identityservice.userPasswords }}" {{- end }} diff --git a/helm/dbrepo/templates/dashboard-ui-prov-datasources-secret.yaml b/helm/dbrepo/templates/dashboard-ui-prov-datasources-secret.yaml new file mode 100644 index 0000000000..2d10baefd2 --- /dev/null +++ b/helm/dbrepo/templates/dashboard-ui-prov-datasources-secret.yaml @@ -0,0 +1,33 @@ +{{- if .Values.dashboardui.enabled }} +--- +apiVersion: v1 +kind: Secret +metadata: + name: dashboard-ui-prov-datasources-secret + namespace: {{ include "common.names.namespace" . | quote }} +stringData: + infinity.yaml: |- + apiVersion: 1 + datasources: + - name: dbrepo-json + uid: dbrepojson0 + type: yesoreyeram-infinity-datasource + basicAuth: true + basicAuthUser: {{ .Values.datadb.db.user }} + url: {{ .Values.gateway }} + jsonData: + auth_method: 'basicAuth' + httpHeaderName1: Accept + allowedHosts: + - '{{ .Values.gateway }}' + secureJsonData: + basicAuthPassword: {{ .Values.datadb.db.password }} + httpHeaderValue1: application/json + prometheus.yaml: |- + apiVersion: 1 + datasources: + - name: dbrepo-metrics + type: prometheus + uid: dbrepometrics0 + url: {{ .Values.metricdb.endpoint }} +{{- end }} diff --git a/helm/dbrepo/templates/dashboard-ui-secret.yaml b/helm/dbrepo/templates/dashboard-ui-secret.yaml new file mode 100644 index 0000000000..0816c69637 --- /dev/null +++ b/helm/dbrepo/templates/dashboard-ui-secret.yaml @@ -0,0 +1,58 @@ +{{- if .Values.dashboardui.enabled }} +--- +apiVersion: v1 +kind: Secret +metadata: + name: dashboard-ui-secret + namespace: {{ include "common.names.namespace" . | quote }} +stringData: + GF_SERVER_PROTOCOL: "http" + GF_SERVER_DOMAIN: "{{ .Values.hostname }}" + GF_SERVER_ROOT_URL: "https://%(domain)s/dashboard/" + GF_AUTH_ANONYMOUS_ENABLED: "true" + GF_AUTH_ANONYMOUS_ORG_ROLE: "Viewer" + GF_SERVER_SERVE_FROM_SUB_PATH: "true" + GF_SECURITY_DISABLE_INITIAL_ADMIN_CREATION: "true" + LDAP_ADMIN_USERNAME: "{{ .Values.identityservice.global.adminUser }}" + LDAP_ADMIN_PASSWORD: "{{ .Values.identityservice.global.adminPassword }}" + LDAP_ROOT: "{{ .Values.identityservice.global.ldapDomain }}" + ldap.toml: | + [[servers]] + host = "identity-service" + port = 389 + use_ssl = false + + # Search user bind dn + bind_dn = "cn=${LDAP_ADMIN_USERNAME},${LDAP_ROOT}" + bind_password = "${LDAP_ADMIN_PASSWORD}" + + # Timeout in seconds. Applies to each host specified in the 'host' entry (space separated). + timeout = 10 + + # User search filter, for example "(cn=%s)" or "(sAMAccountName=%s)" or "(uid=%s)" + # Allow login from email or username, example "(|(sAMAccountName=%s)(userPrincipalName=%s))" + search_filter = "(uid=%s)" + + # An array of base dns to search through + search_base_dns = ["${LDAP_ROOT}"] + + group_search_base_dns = ["ou=users,${LDAP_ROOT}"] + group_search_filter = "(&(objectClass=groupOfNames)(member=cn=%s,ou=users,${LDAP_ROOT}))" + group_search_filter_user_attribute = "uid" + + [servers.attributes] + name = "cn" + surname = "sn" + username = "uid" + member_of = "member" + email = "mail" + + [[servers.group_mappings]] + group_dn = "cn=${LDAP_ADMIN_USERNAME},ou=users,${LDAP_ROOT}" + org_role = "Admin" + grafana_admin = true + + [[servers.group_mappings]] + group_dn = "*" + org_role = "Viewer" +{{- end }} diff --git a/helm/dbrepo/templates/gateway-configmap.yaml b/helm/dbrepo/templates/gateway-configmap.yaml index 6405e801f1..79078be7ea 100644 --- a/helm/dbrepo/templates/gateway-configmap.yaml +++ b/helm/dbrepo/templates/gateway-configmap.yaml @@ -32,58 +32,79 @@ data: location /dashboard { rewrite ^/dashboard/(.*) /$1 break; - proxy_set_header Host $host; + proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-For $proxy_protocol_addr; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://dashboard-service:3000; + proxy_pass http://dashboard-ui; proxy_read_timeout 90; } # Proxy Grafana Live WebSocket connections. - location /dashboard/api/live { - proxy_set_header Host $host; + location /dashboard/api/live/ { + rewrite ^/dashboard/(.*) /$1 break; + proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-For $proxy_protocol_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_http_version 1.1; - proxy_pass http://dashboard-service:3000; + proxy_pass http://dashboard-ui; proxy_read_timeout 90; } + # Proxy Keycloak OIDC connections, c.f. https://www.keycloak.org/server/reverseproxy#_exposed_path_recommendations location /realms { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-For $proxy_protocol_addr; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass https://auth-service; + proxy_pass http://auth-service; proxy_read_timeout 90; } + # Proxy Keycloak assets, c.f. https://www.keycloak.org/server/reverseproxy#_exposed_path_recommendations location /resources { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-For $proxy_protocol_addr; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass https://auth-service; + proxy_pass http://auth-service; proxy_read_timeout 90; } location /api/search { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-For $proxy_protocol_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://search-service; proxy_read_timeout 90; } + location /api/datasource { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://dashboard-service; + proxy_read_timeout 90; + } + + location /api/dashboard { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://dashboard-service; + proxy_read_timeout 90; + } + location /api/upload { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-For $proxy_protocol_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_pass http://data-service; @@ -97,25 +118,25 @@ data: location /api/analyse { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-For $proxy_protocol_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://analyse-service; proxy_read_timeout 90; } - location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/table/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/(data|history)" { + location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/table/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/(data|statistic|history)" { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-For $proxy_protocol_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://data-service; proxy_read_timeout 90; } - location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/view/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/data" { + location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/view/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/(data|statistic)" { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-For $proxy_protocol_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://data-service; proxy_read_timeout 90; @@ -124,7 +145,7 @@ data: location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/view" { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-For $proxy_protocol_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://metadata-service; proxy_read_timeout 90; @@ -133,7 +154,7 @@ data: location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/subset" { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-For $proxy_protocol_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://data-service; proxy_read_timeout 600; @@ -142,7 +163,7 @@ data: location ~ "/api/(database|concept|container|identifier|image|message|license|oai|ontology|unit|user)" { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-For $proxy_protocol_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://metadata-service; proxy_read_timeout 90; @@ -151,7 +172,7 @@ data: location ~ "/api/identifier/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})" { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-For $proxy_protocol_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://metadata-service; proxy_read_timeout 90; @@ -161,7 +182,7 @@ data: rewrite /pid/(.*) /api/identifier/$1 break; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-For $proxy_protocol_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://metadata-service; proxy_read_timeout 90; @@ -170,7 +191,7 @@ data: location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-For $proxy_protocol_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://ui; proxy_read_timeout 90; diff --git a/helm/dbrepo/templates/identity-secret.yaml b/helm/dbrepo/templates/identity-secret.yaml index e395bad11e..b2eeb25d3c 100644 --- a/helm/dbrepo/templates/identity-secret.yaml +++ b/helm/dbrepo/templates/identity-secret.yaml @@ -6,11 +6,11 @@ metadata: name: identity-service-secret namespace: {{ include "common.names.namespace" . | quote }} stringData: - LDAP_ADMIN_USERNAME: "{{ .Values.identityservice.global.adminUser}}" - LDAP_ADMIN_PASSWORD: "{{ .Values.identityservice.global.adminPassword}}" - LDAP_USERS: "{{ .Values.identityservice.users}}" - LDAP_PASSWORDS: "{{ .Values.identityservice.userPasswords}}" - LDAP_GROUP: "{{ .Values.identityservice.group}}" + LDAP_ADMIN_USERNAME: "{{ .Values.identityservice.global.adminUser }}" + LDAP_ADMIN_PASSWORD: "{{ .Values.identityservice.global.adminPassword }}" + LDAP_USERS: "{{ .Values.identityservice.users }},{{ .Values.datadb.db.user }}" + LDAP_PASSWORDS: "{{ .Values.identityservice.userPasswords }},{{ .Values.datadb.db.password }}" + LDAP_GROUP: "{{ .Values.identityservice.group }}" LDAP_ROOT: "{{ .Values.identityservice.global.ldapDomain }}" - LDAP_ADMIN_DN: "cn={{ .Values.identityservice.global.adminUser}},{{ .Values.identityservice.global.ldapDomain }}" + LDAP_ADMIN_DN: "cn={{ .Values.identityservice.global.adminUser }},{{ .Values.identityservice.global.ldapDomain }}" {{- end }} diff --git a/helm/dbrepo/templates/metadata-configmap.yaml b/helm/dbrepo/templates/metadata-configmap.yaml index a6b7ad8212..e837c8072a 100644 --- a/helm/dbrepo/templates/metadata-configmap.yaml +++ b/helm/dbrepo/templates/metadata-configmap.yaml @@ -13,9 +13,12 @@ data: 02-setup-data.sql: |- BEGIN; INSERT INTO `mdb_containers` (id, name, internal_name, image_id, host, port, ui_host, ui_port, privileged_username, - privileged_password) + privileged_password, readonly_username, readonly_password) VALUES ('6cfb3b8e-1792-4e46-871a-f3d103527203', 'mariadb:11.1.3-debian-11-r6', 'mariadb_11_1_3', - 'd79cb089-363c-488b-9717-649e44d8fcc5', 'data-db', {{ .Values.datadb.containerPorts.mysql }}, '{{ .Values.hostname }}', {{ .Values.datadb.containerPorts.mysql }}, '{{ .Values.datadb.rootUser.user }}', '{{ .Values.datadb.rootUser.password }}'); + 'd79cb089-363c-488b-9717-649e44d8fcc5', 'data-db', {{ .Values.datadb.containerPorts.mysql }}, + '{{ .Values.hostname }}', {{ .Values.datadb.containerPorts.mysql }}, '{{ .Values.datadb.rootUser.user }}', + '{{ .Values.datadb.rootUser.password }}', '{{ .Values.datadb.db.user }}', + '{{ .Values.datadb.db.password }}'); COMMIT; {{ (.Files.Glob "files/my.cnf").AsConfig | nindent 2 }} {{- end }} diff --git a/helm/dbrepo/templates/metadata-secret.yaml b/helm/dbrepo/templates/metadata-secret.yaml index 84b0b614e3..7ab8533f45 100644 --- a/helm/dbrepo/templates/metadata-secret.yaml +++ b/helm/dbrepo/templates/metadata-secret.yaml @@ -24,6 +24,7 @@ stringData: BROKER_USERNAME: "{{ .Values.brokerservice.auth.username }}" BROKER_VIRTUALHOST: "{{ .Values.brokerservice.virtualHost }}" CROSSREF_ENDPOINT: "{{ .Values.metadataservice.crossref.endpoint}}" + DASHBOARD_SERVICE_ENDPOINT: "{{ .Values.dashboardservice.endpoint }}" DATA_SERVICE_ENDPOINT: "{{ .Values.dataservice.endpoint }}" DATACITE_URL: "{{ .Values.metadataservice.datacite.url }}" DATACITE_PREFIX: "{{ .Values.metadataservice.datacite.prefix | toString }}" diff --git a/helm/dbrepo/values.schema.json b/helm/dbrepo/values.schema.json index f99941e2f8..dcb506dba4 100644 --- a/helm/dbrepo/values.schema.json +++ b/helm/dbrepo/values.schema.json @@ -129,6 +129,9 @@ "extraEnvVarsCM": { "type": "string" }, + "extraStartupArgs": { + "type": "string" + }, "extraVolumeMounts": { "items": { "properties": { @@ -227,9 +230,6 @@ }, "type": "object" }, - "production": { - "type": "boolean" - }, "replicaCount": { "type": "integer" }, @@ -255,20 +255,6 @@ } }, "type": "object" - }, - "tls": { - "properties": { - "enabled": { - "type": "boolean" - }, - "existingSecret": { - "type": "string" - }, - "usePem": { - "type": "boolean" - } - }, - "type": "object" } }, "type": "object" @@ -458,43 +444,133 @@ }, "dashboardservice": { "properties": { - "dashboardsProvider": { + "containerSecurityContext": { "properties": { + "allowPrivilegeEscalation": { + "type": "boolean" + }, + "capabilities": { + "properties": { + "drop": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, "enabled": { "type": "boolean" + }, + "readOnlyRootFilesystem": { + "type": "boolean" + }, + "runAsGroup": { + "type": "integer" + }, + "runAsNonRoot": { + "type": "boolean" + }, + "runAsUser": { + "type": "integer" + }, + "seLinuxOptions": { + "properties": {}, + "type": "object" + }, + "seccompProfile": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" } }, "type": "object" }, - "datasources": { + "enabled": { + "type": "boolean" + }, + "endpoint": { + "type": "string" + }, + "image": { "properties": { - "secretDefinition": { + "name": { + "type": "string" + } + }, + "type": "object" + }, + "init": { + "properties": { + "image": { "properties": { - "apiVersion": { - "type": "integer" - }, - "datasources": { - "items": { - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" + "name": { + "type": "string" } }, "type": "object" + }, + "resources": { + "properties": {}, + "type": "object" + }, + "resourcesPreset": { + "type": "string" + } + }, + "type": "object" + }, + "podSecurityContext": { + "properties": { + "enabled": { + "type": "boolean" + }, + "fsGroup": { + "type": "integer" + }, + "fsGroupChangePolicy": { + "type": "string" + }, + "supplementalGroups": { + "type": "array" + }, + "sysctls": { + "type": "array" + } + }, + "type": "object" + }, + "replicaCount": { + "type": "integer" + }, + "resources": { + "properties": {}, + "type": "object" + }, + "resourcesPreset": { + "type": "string" + } + }, + "type": "object" + }, + "dashboardui": { + "properties": { + "dashboardsProvider": { + "properties": { + "enabled": { + "type": "boolean" + } + }, + "type": "object" + }, + "datasources": { + "properties": { + "secretName": { + "type": "string" } }, "type": "object" @@ -502,28 +578,14 @@ "enabled": { "type": "boolean" }, + "endpoint": { + "type": "string" + }, "fullnameOverride": { "type": "string" }, "grafana": { "properties": { - "extraConfigmaps": { - "items": { - "properties": { - "mountPath": { - "type": "string" - }, - "name": { - "type": "string" - }, - "readOnly": { - "type": "boolean" - } - }, - "type": "object" - }, - "type": "array" - }, "extraEnvVarsSecret": { "type": "string" }, @@ -559,6 +621,19 @@ } }, "type": "object" + }, + "service": { + "properties": { + "ports": { + "properties": { + "grafana": { + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" } }, "type": "object" @@ -569,6 +644,12 @@ "properties": { "name": { "type": "string" + }, + "password": { + "type": "string" + }, + "user": { + "type": "string" } }, "type": "object" @@ -1302,6 +1383,9 @@ "enabled": { "type": "boolean" }, + "endpoint": { + "type": "string" + }, "fullnameOverride": { "type": "string" }, @@ -1880,173 +1964,6 @@ } }, "type": "object" - }, - "uploadservice": { - "properties": { - "containerArgs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "containerSecurityContext": { - "properties": { - "allowPrivilegeEscalation": { - "type": "boolean" - }, - "capabilities": { - "properties": { - "drop": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "enabled": { - "type": "boolean" - }, - "readOnlyRootFilesystem": { - "type": "boolean" - }, - "runAsGroup": { - "type": "integer" - }, - "runAsNonRoot": { - "type": "boolean" - }, - "runAsUser": { - "type": "integer" - }, - "seLinuxOptions": { - "properties": {}, - "type": "object" - }, - "seccompProfile": { - "properties": { - "type": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "enabled": { - "type": "boolean" - }, - "envFrom": { - "items": { - "properties": { - "secretRef": { - "properties": { - "name": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "type": "array" - }, - "image": { - "properties": { - "name": { - "type": "string" - } - }, - "type": "object" - }, - "podSecurityContext": { - "properties": { - "enabled": { - "type": "boolean" - }, - "fsGroup": { - "type": "integer" - }, - "fsGroupChangePolicy": { - "type": "string" - }, - "supplementalGroups": { - "type": "array" - }, - "sysctls": { - "type": "array" - } - }, - "type": "object" - }, - "replicaCount": { - "type": "integer" - }, - "resources": { - "properties": {}, - "type": "object" - }, - "resourcesPreset": { - "type": "string" - }, - "s3": { - "properties": { - "bucket": { - "type": "string" - }, - "endpoint": { - "type": "string" - }, - "maxSize": { - "type": "string" - } - }, - "type": "object" - }, - "volumeMounts": { - "items": { - "properties": { - "mountPath": { - "type": "string" - }, - "name": { - "type": "string" - }, - "subPath": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "volumes": { - "items": { - "properties": { - "configMap": { - "properties": { - "defaultMode": { - "type": "integer" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" } }, "type": "object" diff --git a/helm/dbrepo/values.yaml b/helm/dbrepo/values.yaml index b82eb12cec..56ac85d0be 100644 --- a/helm/dbrepo/values.yaml +++ b/helm/dbrepo/values.yaml @@ -85,26 +85,19 @@ authservice: debug: false ## @param authservice.endpoint The hostname for the microservices. endpoint: http://auth-service + ## @param authservice.extraStartupArgs Extra arguments for the Keycloak container. + extraStartupArgs: --hostname-strict false --proxy-headers xforwarded ## @skip authservice.postgresql postgresql: enabled: true fullnameOverride: auth-db auth: postgresPassword: postgres - ## @param authservice.production Start Keycloak with production profile. - production: true ## @param authservice.resourcesPreset The container resource presets resourcesPreset: "small" jwt: ## @param authservice.jwt.pubkey The JWT public key from the `dbrepo-client`. pubkey: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB" - tls: - ## @param authservice.tls.enabled Enable TLS/SSL communication. Required for HTTPS. - enabled: true - ## @param authservice.tls.existingSecret The secret containing the `tls.crt`, `tls.key` and `ca.crt`. - existingSecret: auth-service-secret - ## @skip authservice.tls.usePem - usePem: true metrics: ## @skip authservice.metrics.enabled enabled: true @@ -122,7 +115,7 @@ authservice: setupJob: image: ## @skip authservice.setupJob.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/auth-service-init:1.7.3 + name: registry.datalab.tuwien.ac.at/dbrepo/auth-service-init:1.8.0 ## @param authservice.setupJob.resourcesPreset The container resource preset resourcesPreset: "nano" ## @param authservice.setupJob.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads) @@ -176,6 +169,10 @@ datadb: db: ## @param datadb.db.name The database name. name: dbrepo + ## @param datadb.db.user The database username for the dashboard service. + user: user + ## @param datadb.db.password The database user password for the dashboard service. + password: user galera: mariabackup: ## @param datadb.galera.mariabackup.user The database backup username. @@ -218,7 +215,7 @@ searchdb: enabled: false ## @param searchdb.ingest.resourcesPreset The container resource preset resourcesPreset: "micro" - ## @param searchdb.ingest.replicaCount The number of pod replicas. + ## @param searchdb.ingest.replicaCount The number of pod replicas. replicaCount: 1 master: ## @param searchdb.master.resourcesPreset The container resource preset @@ -236,90 +233,6 @@ searchdb: ## @param searchdb.clusterName The cluster name. clusterName: search-db -## @section Upload Service - -uploadservice: - ## @param uploadservice.enabled Enable the Upload Service. - enabled: true - ## @skip uploadservice.image - image: - name: docker.io/tusproject/tusd:v1.12 - s3: - ## @param uploadservice.s3.endpoint The S3-capable endpoint the microservice connects to. - endpoint: http://storage-service-s3:8333 - ## @param uploadservice.s3.bucket The S3 bucket name. - bucket: dbrepo - ## @param uploadservice.s3.maxSize The maximum file size in bytes. - maxSize: "2000000000" - ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod - podSecurityContext: - ## @param uploadservice.podSecurityContext.enabled Enable pods' Security Context - enabled: true - ## @param uploadservice.podSecurityContext.fsGroupChangePolicy Set filesystem group change policy - fsGroupChangePolicy: Always - ## @param uploadservice.podSecurityContext.sysctls Set kernel settings using the sysctl interface - sysctls: [ ] - ## @param uploadservice.podSecurityContext.supplementalGroups Set filesystem extra groups - supplementalGroups: [ ] - ## @param uploadservice.podSecurityContext.fsGroup Set RabbitMQ pod's Security Context fsGroup - fsGroup: 0 - containerSecurityContext: - ## @param uploadservice.containerSecurityContext.enabled Enable containers' Security Context - enabled: true - ## @param uploadservice.containerSecurityContext.seLinuxOptions Set SELinux options in container - seLinuxOptions: { } - ## @param uploadservice.containerSecurityContext.runAsUser Set RabbitMQ containers' Security Context runAsUser - runAsUser: 1000 - ## @param uploadservice.containerSecurityContext.runAsGroup Set RabbitMQ containers' Security Context runAsGroup - runAsGroup: 1000 - ## @param uploadservice.containerSecurityContext.runAsNonRoot Set RabbitMQ container's Security Context runAsNonRoot - runAsNonRoot: true - ## @param uploadservice.containerSecurityContext.allowPrivilegeEscalation Set container's privilege escalation - allowPrivilegeEscalation: false - ## @param uploadservice.containerSecurityContext.readOnlyRootFilesystem Set container's Security Context readOnlyRootFilesystem - readOnlyRootFilesystem: false - capabilities: - ## @param uploadservice.containerSecurityContext.capabilities.drop Set container's Security Context runAsNonRoot - drop: [ "ALL" ] - seccompProfile: - ## @param uploadservice.containerSecurityContext.seccompProfile.type Set container's Security Context seccomp profile - type: "RuntimeDefault" - ## @param uploadservice.resourcesPreset The container resource preset - resourcesPreset: "nano" - ## @param uploadservice.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads) - resources: { } - ## requests: - ## cpu: 250m - ## memory: 64Mi - ## limits: - ## cpu: 500m - ## memory: 1024Mi - ## @skip uploadservice.containerArgs - containerArgs: - - "-behind-proxy" - - "-max-size=2000000000" - - "-base-path=/api/upload/files/" - - "-hooks-dir=/srv/tusd-hooks/" - - "-s3-endpoint=http://storage-service-s3:8333" - - "-s3-bucket=dbrepo" - ## @skip uploadservice.envFrom - envFrom: - - secretRef: - name: upload-service-secret - ## @skip uploadservice.volumes - volumes: - - name: config - configMap: - name: upload-service-setup - defaultMode: 0777 - ## @skip uploadservice.volumeMounts - volumeMounts: - - name: config - mountPath: /srv/tusd-hooks/pre-create - subPath: pre-create - ## @param uploadservice.replicaCount The number of replicas. - replicaCount: 2 - ## @section Broker Service brokerservice: @@ -415,7 +328,7 @@ analyseservice: enabled: true image: ## @skip analyseservice.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.7.3 + name: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.8.0 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod podSecurityContext: ## @param analyseservice.podSecurityContext.enabled Enable pods' Security Context @@ -476,7 +389,7 @@ metadataservice: enabled: true image: ## @skip metadataservice.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.7.3 + name: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.8.0 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod podSecurityContext: ## @param metadataservice.podSecurityContext.enabled Enable pods' Security Context @@ -573,7 +486,7 @@ dataservice: endpoint: http://data-service image: ## @skip dataservice.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/data-service:1.7.3 + name: registry.datalab.tuwien.ac.at/dbrepo/data-service:1.8.0 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod podSecurityContext: ## @param dataservice.podSecurityContext.enabled Enable pods' Security Context @@ -659,7 +572,7 @@ searchservice: endpoint: http://search-service image: ## @skip searchservice.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/search-service:1.7.3 + name: registry.datalab.tuwien.ac.at/dbrepo/search-service:1.8.0 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod podSecurityContext: ## @param searchservice.podSecurityContext.enabled Enable pods' Security Context @@ -706,7 +619,7 @@ searchservice: init: image: ## @skip searchservice.init.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:1.7.3 + name: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:1.8.0 ## @param searchservice.init.resourcesPreset The container resource preset resourcesPreset: "nano" ## @param searchservice.init.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads) @@ -767,7 +680,7 @@ storageservice: init: image: ## @skip storageservice.init.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.7.3 + name: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.8.0 s3: ## @param storageservice.init.s3.endpoint The S3-capable endpoint the microservice connects to. endpoint: http://storage-service-s3:8333 @@ -876,7 +789,7 @@ ui: enabled: true image: ## @skip ui.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/ui:1.7.3 + name: registry.datalab.tuwien.ac.at/dbrepo/ui:1.8.0 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod podSecurityContext: ## @param ui.podSecurityContext.enabled Enable pods' Security Context @@ -981,40 +894,106 @@ ui: dashboardservice: ## @param dashboardservice.enabled Enable the Dashboard Service. enabled: true + image: + ## @skip dashboardservice.image.name + name: registry.datalab.tuwien.ac.at/dbrepo/auth-service-init:1.8.0 + ## @param dashboardservice.endpoint The endpoint for the microservices. + endpoint: http://dashboard-service + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: + ## @param dashboardservice.podSecurityContext.enabled Enable pods' Security Context + enabled: true + ## @param dashboardservice.podSecurityContext.fsGroupChangePolicy Set filesystem group change policy + fsGroupChangePolicy: Always + ## @param dashboardservice.podSecurityContext.sysctls Set kernel settings using the sysctl interface + sysctls: [ ] + ## @param dashboardservice.podSecurityContext.supplementalGroups Set filesystem extra groups + supplementalGroups: [ ] + ## @param dashboardservice.podSecurityContext.fsGroup Set RabbitMQ pod's Security Context fsGroup + fsGroup: 0 + containerSecurityContext: + ## @param dashboardservice.containerSecurityContext.enabled Enable containers' Security Context + enabled: true + ## @param dashboardservice.containerSecurityContext.seLinuxOptions Set SELinux options in container + seLinuxOptions: { } + ## @param dashboardservice.containerSecurityContext.runAsUser Set RabbitMQ containers' Security Context runAsUser + runAsUser: 1001 + ## @param dashboardservice.containerSecurityContext.runAsGroup Set RabbitMQ containers' Security Context runAsGroup + runAsGroup: 1001 + ## @param dashboardservice.containerSecurityContext.runAsNonRoot Set RabbitMQ container's Security Context runAsNonRoot + runAsNonRoot: true + ## @param dashboardservice.containerSecurityContext.allowPrivilegeEscalation Set container's privilege escalation + allowPrivilegeEscalation: false + ## @param dashboardservice.containerSecurityContext.readOnlyRootFilesystem Set container's Security Context readOnlyRootFilesystem + readOnlyRootFilesystem: false + capabilities: + ## @param dashboardservice.containerSecurityContext.capabilities.drop Set container's Security Context runAsNonRoot + drop: [ "ALL" ] + seccompProfile: + ## @param dashboardservice.containerSecurityContext.seccompProfile.type Set container's Security Context seccomp profile + type: "RuntimeDefault" + ## @param dashboardservice.resourcesPreset The container resource preset + resourcesPreset: "micro" + ## @param dashboardservice.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads) + resources: { } + ## requests: + ## cpu: 250m + ## memory: 64Mi + ## limits: + ## cpu: 500m + ## memory: 1024Mi + ## @param dashboardservice.replicaCount The number of replicas. + init: + image: + ## @skip dashboardservice.init.image.name + name: registry.datalab.tuwien.ac.at/dbrepo/dashboard-service-init:1.8.0 + ## @param dashboardservice.init.resourcesPreset The container resource preset + resourcesPreset: "nano" + ## @param dashboardservice.init.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads) + resources: { } + ## requests: + ## cpu: 250m + ## memory: 64Mi + ## limits: + ## cpu: 500m + ## memory: 1024Mi + ## @param dashboardservice.replicaCount The number of replicas. + replicaCount: 2 + +## @section Dashboard UI + +dashboardui: + ## @param dashboardui.enabled Enable the Dashboard UI. + enabled: true + ## @skip dashboardui.fullnameOverride + fullnameOverride: dashboard-ui metrics: - ## @param dashboardservice.metrics.enabled Enable the metrics sidecar. + ## @param dashboardui.metrics.enabled Enable the metrics sidecar. enabled: true - ## @skip dashboardservice.fullnameOverride - fullnameOverride: dashboard-service + ## @param dashboardui.endpoint The endpoint for the microservices. + endpoint: http://dashboard-ui ldap: - ## @skip dashboardservice.ldap.enabled + ## @skip dashboardui.ldap.enabled enabled: true - ## @skip dashboardservice.ldap.allowSignUp + ## @skip dashboardui.ldap.allowSignUp allowSignUp: true - ## @skip dashboardservice.ldap.secretName - secretName: dashboard-service-secret + ## @skip dashboardui.ldap.secretName + secretName: dashboard-ui-secret grafana: updateStrategy: - ## @skip dashboardservice.grafana.updateStrategy.type + ## @skip dashboardui.grafana.updateStrategy.type type: Recreate - ## @skip dashboardservice.grafana.extraEnvVarsSecret - extraEnvVarsSecret: dashboard-service-secret - ## @skip dashboardservice.grafana.extraConfigmaps - extraConfigmaps: - - name: dashboard-service-config - mountPath: /opt/bitnami/grafana/dashboards - readOnly: true + ## @skip dashboardui.grafana.extraEnvVarsSecret + extraEnvVarsSecret: dashboard-ui-secret + service: + ports: + ## @skip dashboardui.service.ports.grafana + grafana: 80 datasources: - ## @skip dashboardservice.datasources.secretDefinition - secretDefinition: - apiVersion: 1 - datasources: - - name: "dbrepo-metric-db" - uid: "P18F45E9DC7E75912" - type: "prometheus" - url: "http://metric-db-server" + ## @skip dashboardui.datasources.secretName + secretName: "dashboard-ui-prov-datasources-secret" dashboardsProvider: - ## @param dashboardservice.dashboardsProvider.enabled Enable the default dashboard provisioning provider to routinely import dashboards from /opt/bitnami/grafana/dashboards + ## @param dashboardui.dashboardsProvider.enabled Enable the default dashboard provisioning provider to routinely import dashboards from /opt/bitnami/grafana/dashboards enabled: true ## @section Metric Service @@ -1024,6 +1003,8 @@ metricdb: enabled: true ## @skip metricdb.fullnameOverride fullnameOverride: metric-db + ## @param metricdb.endpoint The endpoint for microservices. + endpoint: http://metric-db-server alertmanager: ## @skip metricdb.alertmanager.enabled enabled: false @@ -1053,7 +1034,7 @@ metricdb: - job_name: 'dashboard scrape' metrics_path: '/dashboard/metrics' static_configs: - - targets: [ 'dashboard-service:3000' ] + - targets: [ 'dashboard-service' ] ## @section Gateway Service diff --git a/helm/seaweedfs/Chart.lock b/helm/seaweedfs/Chart.lock index a6802a09cf..775b1e81f9 100644 --- a/helm/seaweedfs/Chart.lock +++ b/helm/seaweedfs/Chart.lock @@ -1,12 +1,12 @@ dependencies: - name: mariadb repository: oci://registry-1.docker.io/bitnamicharts - version: 20.4.1 + version: 20.4.2 - name: postgresql repository: oci://registry-1.docker.io/bitnamicharts - version: 16.4.16 + version: 16.6.0 - name: common repository: oci://registry-1.docker.io/bitnamicharts version: 2.30.0 -digest: sha256:20dba9f2a4322ee4b5e734cc85f7f10a47a090b0cc34bf9c1658feb774fad06e -generated: "2025-03-04T21:41:17.631905476+01:00" +digest: sha256:d254c9a52e16d0b7cb0f2b1a33ca9b0ac162589b72708e55848f2b0d316c1e7b +generated: "2025-04-01T13:05:20.598251993+02:00" diff --git a/helm/seaweedfs/charts/mariadb-20.4.1.tgz b/helm/seaweedfs/charts/mariadb-20.4.1.tgz deleted file mode 100644 index 924d07c3e7f88655b179085c3546f5d3de5c6e75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72936 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 diff --git a/helm/seaweedfs/charts/mariadb-20.4.2.tgz b/helm/seaweedfs/charts/mariadb-20.4.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..5d58a0a1104ab1c9d8312d3117d5d2ece8b1d5a9 GIT binary patch literal 72935 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μ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 literal 0 HcmV?d00001 diff --git a/helm/seaweedfs/charts/postgresql-16.4.16.tgz b/helm/seaweedfs/charts/postgresql-16.4.16.tgz deleted file mode 100644 index b862ff5d0d42b34d83ea4f479ed90070f1e4ee16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81305 zcmb2|=3oGW|8Mrz$3M2%WWKBZvsTGW+w_EKEHC0W-+unZj-UAqPkQDo?k{KFy}ip{ zn4|jf(G9uNZRg~^?Y+NhQp)MRxf+TWRAg(@ws-1IUAo?DRnW?iF6D{eg!SsU%j&;J zWahuWdhh%C_|1Fw?*02d{{7?qGrsKq^8MfH_xIoIuloAy>^<pi+y8$$`Z|1n@_PBT zZf>VsUa15et^JW7v`?k$lIMHv-X!j|PaZGb@#6m!{>KMAcSe|~pSkycef*xfjqm<1 z_t^S({!zI<x4UE&-z_>)tzm!W&VT)HadrFU{`*hL`fcy`XW`@?F;o6CcK`0z{QvZI z*Z=uSSHIO?FU;Rmk(iXw_pg5M|G!YdLvz{vf4R+C{J)X;+TZ^oCtuW;KTvsjXzKp^ zXD|O>AGiNj^!NY4OFsT9U;NO3OZ+5TanJv~(_jCqpLFHMf9@FGa|{2!-&?U6<S4Pf z^{-j%*0BH8m@`>C?frjo{rJ5x-~R`zEdI~G@&9e*bP1gw(j9MShp(UY>;KVzr>F1w z|2@8bfBU!jf8T$vKmJWDrvKKLso(btw*_jkf4|LpEJotvUk%B<sqTKSN@Nc{TxehN zD`rpX_YdaDx?)z&|E9SvQf0H@c(L%*muZy~s}E1!CjYkVuZYpF-B$N+{}tEmFRxY4 zIT(NPwEff-nRYoJ&lgTvVl&gNY|Vk&d%ykr{<ikBboJKxKXS9CcF)Oge6sr6JkKwp zQ}}A8w=)@9cF2|=h}OSVE$#Q_{~=+<fPJak^&h0q`9CGZ%tr3>g~tnDJ746D)wg`e zbhYJh``;-K`eXjT)zdlhYoEvD!0i3DVcwRp&Ks}148Fg0M%Cq0n)hCD?a8Rmt8aVH zZT|7`6uG&l-Qxc3U!LRrS9jY?{TafWI9{D}nWCzf9{7F!9p7k9{tn+c4V7J{H+&`T zK1{C)WSYufv-~xCofQ+8TxwDs$D1h!7ModH*jOIwIyynur+mhIqlrgvlro(z-Y>sN z+D^#&&HRb-U9xNTo`3(KeAbV@b|x(+xEk84b^Mg3S4)QM+-uk&aMW?uF(!pzi7gL< zrT2C7Ud`VVIN_g}3~T+b%cpnW-X`rb^SbvUgWPtTyQM7;6#gU_738-ZWZ3<0L;jzf zz_x4M;??sV-L^j7u%B_No3du<ii1f<`F{i}v(=v}zi{<{GmFNbBIX&b4Nu$o7})+d z9}|1?(OJk+ZcAGG+!nnD5-e{Hz2|4x#;sRTbb7B@!c<kqi<kDz=i8*`G-30WN7FV= zRIr|DXTJ4I-mHRs-BZ^{YD!zKf4iSC?SB2{k4u+tE8XP5wme=&US_X-9{*m~`s77_ z>OW`wzZw_%Z-3R_PgkS<*}MLF|9|<_EW-(*x|XIAK?|?``h4t|`5Si2E0P?$q$f-_ zxhcNW%uGzxUCy=Z#;FOt{_+X`4xQ0?C3*Juaj|n<2AcQo-rd^0@lxNUf8UNB3w=~k z^FqaZ0Y?n)f|E+GmX`Y+a�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≺O<J7M?)IbR=DHc5 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 diff --git a/helm/seaweedfs/charts/postgresql-16.6.0.tgz b/helm/seaweedfs/charts/postgresql-16.6.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..865acadee30f59e1a872f84f12eaeae096f457aa GIT binary patch literal 81557 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 literal 0 HcmV?d00001 diff --git a/install.sh b/install.sh index b453e92ad6..8f6069b644 100644 --- a/install.sh +++ b/install.sh @@ -1,7 +1,7 @@ #!/bin/bash # preset -VERSION="1.7.3" +VERSION="1.8.0" MIN_CPU=8 MIN_RAM=4 MIN_MAP_COUNT=262144 diff --git a/lib/java/dbrepo-core/.gitignore b/lib/java/dbrepo-core/.gitignore new file mode 100644 index 0000000000..b425f09ad0 --- /dev/null +++ b/lib/java/dbrepo-core/.gitignore @@ -0,0 +1,35 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/lib/java/dbrepo-core/Dockerfile b/lib/java/dbrepo-core/Dockerfile new file mode 100644 index 0000000000..8a6348bbce --- /dev/null +++ b/lib/java/dbrepo-core/Dockerfile @@ -0,0 +1,12 @@ +###### FIRST STAGE ###### +FROM maven:3-amazoncorretto-17 AS build +LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" + +COPY ./pom.xml ./ + +RUN mvn dependency:go-offline + +COPY ./src/ ./src/ + +# Make sure it compiles +RUN mvn clean install -DskipTests \ No newline at end of file diff --git a/lib/java/dbrepo-core/pom.xml b/lib/java/dbrepo-core/pom.xml new file mode 100644 index 0000000000..87dd20ddc7 --- /dev/null +++ b/lib/java/dbrepo-core/pom.xml @@ -0,0 +1,167 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-parent</artifactId> + <version>3.3.5</version> + </parent> + + <organization> + <name>TU Wien</name> + <url>https://www.tuwien.ac.at</url> + </organization> + + <groupId>at.ac.tuwien.ifs.dbrepo</groupId> + <artifactId>dbrepo-core</artifactId> + <name>dbrepo-core</name> + <version>1.8.0</version> + + <description>Core library for DBRepo</description> + + <url>https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8/</url> + <developers> + <developer> + <name>Martin Weise</name> + <email>martin.weise@tuwien.ac.at</email> + <organization>TU Wien</organization> + </developer> + </developers> + + <properties> + <maven.compiler.source>17</maven.compiler.source> + <maven.compiler.target>17</maven.compiler.target> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <lombok.version>1.18.36</lombok.version> + <keycloak.version>26.0.4</keycloak.version> + <mapstruct.version>1.6.3</mapstruct.version> + <spring-cloud.version>4.1.4</spring-cloud.version> + <jackson-datatype.version>2.15.0</jackson-datatype.version> + <springdoc-openapi.version>2.8.5</springdoc-openapi.version> + </properties> + + <dependencies><dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-validation</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-security</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.security</groupId> + <artifactId>spring-security-test</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-starter-bootstrap</artifactId> + <version>${spring-cloud.version}</version> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-thymeleaf</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-data-jpa</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-actuator</artifactId> + </dependency> + <!-- Mapping --> + <dependency> + <groupId>org.keycloak</groupId> + <artifactId>keycloak-common</artifactId> + <version>${keycloak.version}</version> + </dependency> + <dependency> + <groupId>org.keycloak</groupId> + <artifactId>keycloak-admin-client</artifactId> + <version>${keycloak.version}</version> + </dependency> + <dependency> + <groupId>org.mapstruct</groupId> + <artifactId>mapstruct-processor</artifactId> + <version>${mapstruct.version}</version> + <optional>true</optional> + </dependency> + <dependency> + <groupId>org.mapstruct</groupId> + <artifactId>mapstruct</artifactId> + <version>${mapstruct.version}</version> + </dependency> + <!-- Api --> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>${lombok.version}</version> + <scope>compile</scope> + </dependency> + <!-- Entities --> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-jsr310</artifactId> + <version>${jackson-datatype.version}</version> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-hibernate6</artifactId> + <version>${jackson-datatype.version}</version> + </dependency> + <!-- Open API --> + <dependency> + <groupId>org.springdoc</groupId> + <artifactId>springdoc-openapi-starter-webmvc-api</artifactId> + <version>${springdoc-openapi.version}</version> + </dependency> + <!-- Tests --> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-test</artifactId> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <source>${java.version}</source> + <target>${java.version}</target> + <annotationProcessorPaths> + <path> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>${lombok.version}</version> + </path> + <!-- keep this order https://stackoverflow.com/questions/47676369/mapstruct-and-lombok-not-working-together#answer-65021876 --> + <path> + <groupId>org.mapstruct</groupId> + <artifactId>mapstruct-processor</artifactId> + <version>${mapstruct.version}</version> + </path> + </annotationProcessorPaths> + </configuration> + </plugin> + </plugins> + </build> + + <licenses> + <license> + <name>Apache-2.0</name> + <url>http://www.apache.org/licenses/LICENSE-2.0.html</url> + <distribution>repo</distribution> + </license> + </licenses> + +</project> \ No newline at end of file diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/Serialize.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/Serialize.java new file mode 100644 index 0000000000..073a7c6699 --- /dev/null +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/Serialize.java @@ -0,0 +1,32 @@ +package at.ac.tuwien.ifs.dbrepo.core; + +import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.hibernate6.Hibernate6Module; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +import java.io.IOException; +import java.util.TimeZone; + +public class Serialize extends BaseTest { + + public static ObjectMapper objectMapper() { + final ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new Jdk8Module()); + objectMapper.registerModule(new JavaTimeModule()); + objectMapper.registerModule(new Hibernate6Module()); /* lazy load mapping on REST endpoints */ + objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); + objectMapper.setTimeZone(TimeZone.getTimeZone("UTC")); + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + objectMapper.enable(SerializationFeature.INDENT_OUTPUT); + return objectMapper; + } + + public static void main(String[] args) throws IOException { +// objectMapper().writeValue(new File("./src/main/resources/database-1.json"), IDENTIFIER_1); + } + +} diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/CacheableDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/CacheableDto.java similarity index 91% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/CacheableDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/CacheableDto.java index e947ece632..25d248dc4f 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/CacheableDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/CacheableDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api; +package at.ac.tuwien.ifs.dbrepo.core.api; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/ExportResourceDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/ExportResourceDto.java similarity index 86% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/ExportResourceDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/ExportResourceDto.java index 5c5bf22005..fb7e87ec86 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/ExportResourceDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/ExportResourceDto.java @@ -1,4 +1,4 @@ -package at.tuwien; +package at.ac.tuwien.ifs.dbrepo.core.api; import lombok.*; import org.springframework.core.io.InputStreamResource; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/ChannelDetailsDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/ChannelDetailsDto.java similarity index 93% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/ChannelDetailsDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/ChannelDetailsDto.java index 03aeb19ab4..861602a156 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/ChannelDetailsDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/ChannelDetailsDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.amqp; +package at.ac.tuwien.ifs.dbrepo.core.api.amqp; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/ConsumerDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/ConsumerDto.java similarity index 94% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/ConsumerDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/ConsumerDto.java index ad82492d7d..6d40bbe0ef 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/ConsumerDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/ConsumerDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.amqp; +package at.ac.tuwien.ifs.dbrepo.core.api.amqp; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/CreateExchangeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/CreateExchangeDto.java similarity index 92% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/CreateExchangeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/CreateExchangeDto.java index dffe2c1e0e..57fccbcc2f 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/CreateExchangeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/CreateExchangeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.amqp; +package at.ac.tuwien.ifs.dbrepo.core.api.amqp; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/CreateUserDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/CreateUserDto.java similarity index 89% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/CreateUserDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/CreateUserDto.java index 372ce8219b..4f5171daae 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/CreateUserDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/CreateUserDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.amqp; +package at.ac.tuwien.ifs.dbrepo.core.api.amqp; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/CreateVirtualHostDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/CreateVirtualHostDto.java similarity index 90% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/CreateVirtualHostDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/CreateVirtualHostDto.java index b27ea597c2..841d4ee836 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/CreateVirtualHostDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/CreateVirtualHostDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.amqp; +package at.ac.tuwien.ifs.dbrepo.core.api.amqp; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/ExchangeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/ExchangeDto.java similarity index 93% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/ExchangeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/ExchangeDto.java index 403a04f00b..b42bef7e89 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/ExchangeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/ExchangeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.amqp; +package at.ac.tuwien.ifs.dbrepo.core.api.amqp; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/GrantExchangePermissionsDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/GrantExchangePermissionsDto.java similarity index 91% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/GrantExchangePermissionsDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/GrantExchangePermissionsDto.java index 054548dbf0..64bc4c1990 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/GrantExchangePermissionsDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/GrantExchangePermissionsDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.amqp; +package at.ac.tuwien.ifs.dbrepo.core.api.amqp; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/GrantVirtualHostPermissionsDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/GrantVirtualHostPermissionsDto.java similarity index 91% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/GrantVirtualHostPermissionsDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/GrantVirtualHostPermissionsDto.java index 7e84edb80e..a49b3b5cb2 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/GrantVirtualHostPermissionsDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/GrantVirtualHostPermissionsDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.amqp; +package at.ac.tuwien.ifs.dbrepo.core.api.amqp; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/QueueBriefDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/QueueBriefDto.java similarity index 90% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/QueueBriefDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/QueueBriefDto.java index 8a266043a1..7e9ee27d4b 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/QueueBriefDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/QueueBriefDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.amqp; +package at.ac.tuwien.ifs.dbrepo.core.api.amqp; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/QueueDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/QueueDto.java similarity index 93% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/QueueDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/QueueDto.java index acc2091d41..4ddd5e270d 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/QueueDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/QueueDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.amqp; +package at.ac.tuwien.ifs.dbrepo.core.api.amqp; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/TopicPermissionDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/TopicPermissionDto.java similarity index 93% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/TopicPermissionDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/TopicPermissionDto.java index bdd806f71e..50fc100b13 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/TopicPermissionDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/TopicPermissionDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.amqp; +package at.ac.tuwien.ifs.dbrepo.core.api.amqp; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/UserDetailsDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/UserDetailsDto.java similarity index 94% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/UserDetailsDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/UserDetailsDto.java index a786456efd..07a9a1ef61 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/UserDetailsDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/UserDetailsDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.amqp; +package at.ac.tuwien.ifs.dbrepo.core.api.amqp; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/VirtualHostPermissionDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/VirtualHostPermissionDto.java similarity index 93% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/VirtualHostPermissionDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/VirtualHostPermissionDto.java index 0602c418da..0d1f1fe969 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/amqp/VirtualHostPermissionDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/amqp/VirtualHostPermissionDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.amqp; +package at.ac.tuwien.ifs.dbrepo.core.api.amqp; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/CreateUserDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/auth/CreateUserDto.java similarity index 95% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/CreateUserDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/auth/CreateUserDto.java index 9742986ae0..eb0f1ed91a 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/CreateUserDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/auth/CreateUserDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.auth; +package at.ac.tuwien.ifs.dbrepo.core.api.auth; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/RealmAccessDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/auth/RealmAccessDto.java similarity index 90% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/RealmAccessDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/auth/RealmAccessDto.java index b759aff168..eb308018c4 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/auth/RealmAccessDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/auth/RealmAccessDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.auth; +package at.ac.tuwien.ifs.dbrepo.core.api.auth; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerActionTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/ContainerActionTypeDto.java similarity index 81% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerActionTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/ContainerActionTypeDto.java index 9d641d510d..42c40ab7af 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerActionTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/ContainerActionTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.container; +package at.ac.tuwien.ifs.dbrepo.core.api.container; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -12,7 +12,7 @@ public enum ContainerActionTypeDto { @JsonProperty("stop") STOP("stop"); - private String name; + private final String name; ContainerActionTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/ContainerBriefDto.java similarity index 86% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/ContainerBriefDto.java index 91253b12ba..ec879665e9 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/ContainerBriefDto.java @@ -1,7 +1,6 @@ -package at.tuwien.api.container; +package at.ac.tuwien.ifs.dbrepo.core.api.container; -import at.tuwien.api.container.image.ImageBriefDto; -import com.fasterxml.jackson.annotation.JsonFormat; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageBriefDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; @@ -9,7 +8,6 @@ import jakarta.validation.constraints.NotNull; import lombok.*; import lombok.extern.jackson.Jacksonized; -import java.time.Instant; import java.util.UUID; @Getter diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/ContainerDto.java similarity index 89% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/ContainerDto.java index 39eb011652..12589bc721 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/ContainerDto.java @@ -1,7 +1,7 @@ -package at.tuwien.api.container; +package at.ac.tuwien.ifs.dbrepo.core.api.container; -import at.tuwien.api.CacheableDto; -import at.tuwien.api.container.image.ImageDto; +import at.ac.tuwien.ifs.dbrepo.core.api.CacheableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageDto; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/CreateContainerDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/CreateContainerDto.java similarity index 96% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/CreateContainerDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/CreateContainerDto.java index f2ac7df46a..77e7b026c7 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/CreateContainerDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/CreateContainerDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.container; +package at.ac.tuwien.ifs.dbrepo.core.api.container; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/DataTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/DataTypeDto.java similarity index 97% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/DataTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/DataTypeDto.java index 908f54a1b4..3455de43a9 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/DataTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/DataTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.container.image; +package at.ac.tuwien.ifs.dbrepo.core.api.container.image; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/ImageBriefDto.java similarity index 93% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/ImageBriefDto.java index ecbd050966..7239fdcfb7 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/ImageBriefDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.container.image; +package at.ac.tuwien.ifs.dbrepo.core.api.container.image; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageChangeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/ImageChangeDto.java similarity index 94% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageChangeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/ImageChangeDto.java index 520449d1de..0a73939c23 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageChangeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/ImageChangeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.container.image; +package at.ac.tuwien.ifs.dbrepo.core.api.container.image; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/ImageCreateDto.java similarity index 96% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/ImageCreateDto.java index 4e9fea5b7c..cce376f5b7 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/ImageCreateDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.container.image; +package at.ac.tuwien.ifs.dbrepo.core.api.container.image; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/ImageDto.java similarity index 94% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/ImageDto.java index ec4b0ad489..9d4049a173 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/ImageDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.container.image; +package at.ac.tuwien.ifs.dbrepo.core.api.container.image; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/OperatorDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/OperatorDto.java similarity index 93% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/OperatorDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/OperatorDto.java index 7eaee04810..38f39f5d82 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/OperatorDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/container/image/OperatorDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.container.image; +package at.ac.tuwien.ifs.dbrepo.core.api.container.image; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/CrossrefDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/crossref/CrossRefDto.java similarity index 60% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/CrossrefDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/crossref/CrossRefDto.java index 4a689a69ce..f32d2d4125 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/CrossrefDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/crossref/CrossRefDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.crossref; +package at.ac.tuwien.ifs.dbrepo.core.api.crossref; -import at.tuwien.api.crossref.label.CrossrefPrefLabelDto; +import at.ac.tuwien.ifs.dbrepo.core.api.crossref.label.CrossRefPrefLabelDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import lombok.extern.jackson.Jacksonized; @@ -13,11 +13,11 @@ import lombok.extern.jackson.Jacksonized; @AllArgsConstructor @Jacksonized @ToString -public class CrossrefDto { +public class CrossRefDto { @Schema(example = "https://doi.org/10.13039/100000001") private String id; - private CrossrefPrefLabelDto prefLabel; + private CrossRefPrefLabelDto prefLabel; } diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/form/CrossrefLiteralFormDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/crossref/form/CrossRefLiteralFormDto.java similarity index 79% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/form/CrossrefLiteralFormDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/crossref/form/CrossRefLiteralFormDto.java index b493cf89ff..473937a111 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/form/CrossrefLiteralFormDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/crossref/form/CrossRefLiteralFormDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.crossref.form; +package at.ac.tuwien.ifs.dbrepo.core.api.crossref.form; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; @@ -12,7 +12,7 @@ import lombok.extern.jackson.Jacksonized; @AllArgsConstructor @Jacksonized @ToString -public class CrossrefLiteralFormDto { +public class CrossRefLiteralFormDto { @Schema(example = "en") private String lang; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/label/CrossrefLabelDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/crossref/label/CrossRefLabelDto.java similarity index 60% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/label/CrossrefLabelDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/crossref/label/CrossRefLabelDto.java index 7bdaf0f931..684557115f 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/label/CrossrefLabelDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/crossref/label/CrossRefLabelDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.crossref.label; +package at.ac.tuwien.ifs.dbrepo.core.api.crossref.label; -import at.tuwien.api.crossref.form.CrossrefLiteralFormDto; +import at.ac.tuwien.ifs.dbrepo.core.api.crossref.form.CrossRefLiteralFormDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import lombok.extern.jackson.Jacksonized; @@ -13,9 +13,9 @@ import lombok.extern.jackson.Jacksonized; @AllArgsConstructor @Jacksonized @ToString -public class CrossrefLabelDto { +public class CrossRefLabelDto { - private CrossrefLiteralFormDto literalForm; + private CrossRefLiteralFormDto literalForm; @Schema(example = "http://data.crossref.org/fundingdata/vocabulary/Label-36515") private String about; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/label/CrossrefPrefLabelDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/crossref/label/CrossRefPrefLabelDto.java similarity index 66% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/label/CrossrefPrefLabelDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/crossref/label/CrossRefPrefLabelDto.java index a70c161d83..0ec889622b 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/crossref/label/CrossrefPrefLabelDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/crossref/label/CrossRefPrefLabelDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.crossref.label; +package at.ac.tuwien.ifs.dbrepo.core.api.crossref.label; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; @@ -12,9 +12,9 @@ import lombok.extern.jackson.Jacksonized; @AllArgsConstructor @Jacksonized @ToString -public class CrossrefPrefLabelDto { +public class CrossRefPrefLabelDto { @JsonProperty("Label") - private CrossrefLabelDto label; + private CrossRefLabelDto label; } diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/AccessTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/AccessTypeDto.java similarity index 85% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/AccessTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/AccessTypeDto.java index fa0f6fea49..fb3f34957e 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/AccessTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/AccessTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database; +package at.ac.tuwien.ifs.dbrepo.core.api.database; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -17,7 +17,7 @@ public enum AccessTypeDto { @JsonProperty("write_all") WRITE_ALL("write_all"); - private String name; + private final String name; AccessTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/CreateAccessDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/CreateAccessDto.java similarity index 88% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/CreateAccessDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/CreateAccessDto.java index 965e10afd5..1ba876cc5e 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/CreateAccessDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/CreateAccessDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database; +package at.ac.tuwien.ifs.dbrepo.core.api.database; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/CreateDatabaseDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/CreateDatabaseDto.java similarity index 94% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/CreateDatabaseDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/CreateDatabaseDto.java index e7fd08e771..9c9e708262 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/CreateDatabaseDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/CreateDatabaseDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database; +package at.ac.tuwien.ifs.dbrepo.core.api.database; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/CreateViewDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/CreateViewDto.java similarity index 87% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/CreateViewDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/CreateViewDto.java index 9a9558470f..9ab87017a6 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/CreateViewDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/CreateViewDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.database; +package at.ac.tuwien.ifs.dbrepo.core.api.database; -import at.tuwien.api.database.query.SubsetDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.SubsetDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseAccessDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseAccessDto.java similarity index 84% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseAccessDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseAccessDto.java index 7e393561f8..22a423f7d8 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseAccessDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseAccessDto.java @@ -1,7 +1,7 @@ -package at.tuwien.api.database; +package at.ac.tuwien.ifs.dbrepo.core.api.database; -import at.tuwien.api.user.UserBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserBriefDto; import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseBriefDto.java similarity index 88% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseBriefDto.java index 4bb262b781..f84649ff63 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseBriefDto.java @@ -1,7 +1,7 @@ -package at.tuwien.api.database; +package at.ac.tuwien.ifs.dbrepo.core.api.database; -import at.tuwien.api.identifier.IdentifierBriefDto; -import at.tuwien.api.user.UserBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserBriefDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseDto.java similarity index 70% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseDto.java index 0c8c85a41c..0a8ca41eb5 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseDto.java @@ -1,11 +1,11 @@ -package at.tuwien.api.database; - -import at.tuwien.api.CacheableDto; -import at.tuwien.api.container.ContainerBriefDto; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.identifier.IdentifierDto; -import at.tuwien.api.user.UserBriefDto; +package at.ac.tuwien.ifs.dbrepo.core.api.database; + +import at.ac.tuwien.ifs.dbrepo.core.api.CacheableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserBriefDto; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; @@ -35,6 +35,10 @@ public class DatabaseDto extends CacheableDto { @Schema(example = "Air Quality") private String name; + @JsonProperty("dashboard_uid") + @Schema(example = "abcdef") + private String dashboardUid; + @NotBlank @JsonProperty("exchange_name") @Schema(example = "dbrepo") @@ -68,6 +72,11 @@ public class DatabaseDto extends CacheableDto { @Schema(example = "true") private Boolean isSchemaPublic; + @NotNull + @JsonProperty("is_dashboard_enabled") + @Schema(example = "true") + private Boolean isDashboardEnabled; + private ContainerDto container; @NotNull @@ -88,6 +97,11 @@ public class DatabaseDto extends CacheableDto { @JsonProperty("preview_image") private String previewImage; + @NotNull + @Schema(example = "2022-01-01 08:00:00.000") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") + private Instant created; + /* lombok limitations prevent from convenient builder functions */ @JsonProperty("last_retrieved") diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseModifyDashboardDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseModifyDashboardDto.java new file mode 100644 index 0000000000..f4375d2ea3 --- /dev/null +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseModifyDashboardDto.java @@ -0,0 +1,20 @@ +package at.ac.tuwien.ifs.dbrepo.core.api.database; + +import jakarta.validation.constraints.NotNull; +import lombok.*; +import lombok.extern.jackson.Jacksonized; + +@Getter +@Setter +@Builder +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString +public class DatabaseModifyDashboardDto { + + @NotNull + private String uid; + +} diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseModifyImageDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseModifyImageDto.java similarity index 82% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseModifyImageDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseModifyImageDto.java index 5160ae76bf..f8907baa3a 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseModifyImageDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseModifyImageDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database; +package at.ac.tuwien.ifs.dbrepo.core.api.database; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseModifyVisibilityDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseModifyVisibilityDto.java similarity index 76% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseModifyVisibilityDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseModifyVisibilityDto.java index e641deade2..818f546108 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseModifyVisibilityDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseModifyVisibilityDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database; +package at.ac.tuwien.ifs.dbrepo.core.api.database; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -26,4 +26,9 @@ public class DatabaseModifyVisibilityDto { @Schema(example = "true") private Boolean isSchemaPublic; + @NotNull + @JsonProperty("is_dashboard_enabled") + @Schema(example = "true") + private Boolean isDashboardEnabled; + } diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseTransferDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseTransferDto.java similarity index 85% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseTransferDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseTransferDto.java index 5a8e6beb10..f0ba38ebaf 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseTransferDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/DatabaseTransferDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database; +package at.ac.tuwien.ifs.dbrepo.core.api.database; import jakarta.validation.constraints.NotNull; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/LanguageTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/LanguageTypeDto.java similarity index 98% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/LanguageTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/LanguageTypeDto.java index fe57dd2444..c585a5f1ba 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/LanguageTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/LanguageTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database; +package at.ac.tuwien.ifs.dbrepo.core.api.database; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -558,7 +558,7 @@ public enum LanguageTypeDto { @JsonProperty("zu") ZU("zu"); - private String value; + private final String value; LanguageTypeDto(String value) { this.value = value; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/LicenseDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/LicenseDto.java similarity index 94% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/LicenseDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/LicenseDto.java index a6384b3487..eada3be8ea 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/LicenseDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/LicenseDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database; +package at.ac.tuwien.ifs.dbrepo.core.api.database; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/LoadFileDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/LoadFileDto.java similarity index 88% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/LoadFileDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/LoadFileDto.java index 65f5120d9b..d5c4242574 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/LoadFileDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/LoadFileDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database; +package at.ac.tuwien.ifs.dbrepo.core.api.database; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewBriefDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/ViewBriefDto.java similarity index 96% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewBriefDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/ViewBriefDto.java index 47107ac54f..046aa97d10 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewBriefDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/ViewBriefDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database; +package at.ac.tuwien.ifs.dbrepo.core.api.database; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewColumnDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/ViewColumnDto.java similarity index 76% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewColumnDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/ViewColumnDto.java index 766fbfd321..c8744f4238 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewColumnDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/ViewColumnDto.java @@ -1,6 +1,8 @@ -package at.tuwien.api.database; +package at.ac.tuwien.ifs.dbrepo.core.api.database; -import at.tuwien.api.database.table.columns.ColumnTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.EnumDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.SetDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; @@ -9,6 +11,7 @@ import jakarta.validation.constraints.Size; import lombok.*; import lombok.extern.jackson.Jacksonized; +import java.util.List; import java.util.UUID; @Getter @@ -74,4 +77,10 @@ public class ViewColumnDto { @Schema(example = "false") private Boolean isNullAllowed; + @Schema(description = "enum values, only considered when type = ENUM") + private List<EnumDto> enums; + + @Schema(description = "enum values, only considered when type = ENUM") + private List<SetDto> sets; + } diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/ViewDto.java similarity index 80% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/ViewDto.java index 1e54da2978..76cf990c06 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/ViewDto.java @@ -1,8 +1,9 @@ -package at.tuwien.api.database; +package at.ac.tuwien.ifs.dbrepo.core.api.database; -import at.tuwien.api.CacheableDto; -import at.tuwien.api.identifier.IdentifierDto; -import at.tuwien.api.user.UserBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.CacheableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserBriefDto; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; @@ -72,6 +73,11 @@ public class ViewDto extends CacheableDto { @NotNull private List<ViewColumnDto> columns; + @NotNull + @Schema(example = "2022-01-01 08:00:00.000") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") + private Instant created; + /* lombok limitations prevent from convenient builder functions */ @JsonProperty("last_retrieved") diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewUpdateDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/ViewUpdateDto.java similarity index 91% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewUpdateDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/ViewUpdateDto.java index 434ce0d9b6..01badab273 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewUpdateDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/ViewUpdateDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database; +package at.ac.tuwien.ifs.dbrepo.core.api.database; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/internal/CreateDatabaseDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/internal/CreateDatabaseDto.java similarity index 79% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/internal/CreateDatabaseDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/internal/CreateDatabaseDto.java index 76ee117931..476adbbd9a 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/internal/CreateDatabaseDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/internal/CreateDatabaseDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.internal; +package at.ac.tuwien.ifs.dbrepo.core.api.database.internal; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -38,6 +38,16 @@ public class CreateDatabaseDto { @Schema(example = "mariadb") private String privilegedPassword; + @NotBlank + @JsonProperty("readonly_username") + @Schema(example = "user") + private String readonlyUsername; + + @NotBlank + @JsonProperty("readonly_password") + @Schema(example = "mariadb") + private String readonlyPassword; + @NotNull @JsonProperty("user_id") @Schema(example = "0e695ea5-9249-4a75-a77a-eeac3ec1c2c0") diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/DatasourceType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/DatasourceType.java new file mode 100644 index 0000000000..a4f8a83d80 --- /dev/null +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/DatasourceType.java @@ -0,0 +1,25 @@ +package at.ac.tuwien.ifs.dbrepo.core.api.database.query; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema +public enum DatasourceType { + + @JsonProperty("table") + TABLE("table"), + + @JsonProperty("view") + VIEW("view"); + + private final String name; + + DatasourceType(String name) { + this.name = name; + } + + @Override + public String toString() { + return this.name; + } +} diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/FilterDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/FilterDto.java similarity index 93% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/FilterDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/FilterDto.java index 3fe8744661..2e6b1a03d7 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/FilterDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/FilterDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.query; +package at.ac.tuwien.ifs.dbrepo.core.api.database.query; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/FilterTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/FilterTypeDto.java similarity index 82% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/FilterTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/FilterTypeDto.java index eb9c12f7b2..aab604117c 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/FilterTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/FilterTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.query; +package at.ac.tuwien.ifs.dbrepo.core.api.database.query; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -15,7 +15,7 @@ public enum FilterTypeDto { @JsonProperty("and") AND("and"); - private String name; + private final String name; FilterTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ImportDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/ImportDto.java similarity index 93% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ImportDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/ImportDto.java index 20817e0176..4a0a04abd6 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ImportDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/ImportDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.query; +package at.ac.tuwien.ifs.dbrepo.core.api.database.query; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/OrderDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/OrderDto.java similarity index 90% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/OrderDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/OrderDto.java index bb58ad4831..1412edf16a 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/OrderDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/OrderDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.query; +package at.ac.tuwien.ifs.dbrepo.core.api.database.query; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/OrderTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/OrderTypeDto.java similarity index 80% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/OrderTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/OrderTypeDto.java index ee05a75e47..a7afcbcd5e 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/OrderTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/OrderTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.query; +package at.ac.tuwien.ifs.dbrepo.core.api.database.query; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -12,7 +12,7 @@ public enum OrderTypeDto { @JsonProperty("desc") DESC("desc"); - private String name; + private final String name; OrderTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/QueryBriefDto.java similarity index 90% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/QueryBriefDto.java index c55a108cfc..24e3f60130 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/QueryBriefDto.java @@ -1,7 +1,7 @@ -package at.tuwien.api.database.query; +package at.ac.tuwien.ifs.dbrepo.core.api.database.query; -import at.tuwien.api.identifier.IdentifierBriefDto; -import at.tuwien.api.user.UserBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserBriefDto; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/QueryDto.java similarity index 91% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/QueryDto.java index 24915a3dd5..58568fa4c3 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/QueryDto.java @@ -1,8 +1,7 @@ -package at.tuwien.api.database.query; +package at.ac.tuwien.ifs.dbrepo.core.api.database.query; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.identifier.IdentifierBriefDto; -import at.tuwien.api.user.UserBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserBriefDto; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryPersistDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/QueryPersistDto.java similarity index 86% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryPersistDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/QueryPersistDto.java index 5bc3ac2054..90012d7a03 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryPersistDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/QueryPersistDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.query; +package at.ac.tuwien.ifs.dbrepo.core.api.database.query; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/QueryTypeDto.java similarity index 81% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/QueryTypeDto.java index 4df28733cd..e19dccf096 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/QueryTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/QueryTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.query; +package at.ac.tuwien.ifs.dbrepo.core.api.database.query; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -12,7 +12,7 @@ public enum QueryTypeDto { @JsonProperty("view") VIEW("view"); - private String name; + private final String name; QueryTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/SaveStatementDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/SaveStatementDto.java similarity index 87% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/SaveStatementDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/SaveStatementDto.java index 876dd5dfdd..aaefacf797 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/SaveStatementDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/SaveStatementDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.query; +package at.ac.tuwien.ifs.dbrepo.core.api.database.query; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/SubsetDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/SubsetDto.java similarity index 75% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/SubsetDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/SubsetDto.java index 6e8c238417..5fb53d0741 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/SubsetDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/query/SubsetDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.query; +package at.ac.tuwien.ifs.dbrepo.core.api.database.query; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -20,9 +20,13 @@ import java.util.UUID; public class SubsetDto { @NotNull - @JsonProperty("table_id") + @JsonProperty("datasource_id") @Schema(example = "f7df2a7d-4ade-4c78-97b0-7c744d0893c7") - private UUID tableId; + private UUID datasourceId; + + @NotNull + @JsonProperty("datasource_type") + private DatasourceType datasourceType; @NotNull @Schema(example = "[\"e891ba86-0258-41a6-a8d9-ff58bc10b618\"]") diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/CreateTableDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/CreateTableDto.java similarity index 81% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/CreateTableDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/CreateTableDto.java index 15a798ee2d..af2c3a80cc 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/CreateTableDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/CreateTableDto.java @@ -1,7 +1,7 @@ -package at.tuwien.api.database.table; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table; -import at.tuwien.api.database.table.columns.CreateTableColumnDto; -import at.tuwien.api.database.table.constraints.CreateTableConstraintsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.CreateTableColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.CreateTableConstraintsDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/HistoryEventTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/HistoryEventTypeDto.java similarity index 83% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/HistoryEventTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/HistoryEventTypeDto.java index 83d8441752..90a216c124 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/HistoryEventTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/HistoryEventTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -14,7 +14,7 @@ public enum HistoryEventTypeDto { @JsonProperty("delete") DELETE("delete"); - private String name; + private final String name; HistoryEventTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/SortType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/SortType.java similarity index 76% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/SortType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/SortType.java index e101dfc9eb..841587f4b0 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/SortType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/SortType.java @@ -1,4 +1,4 @@ -package at.tuwien; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table; import com.fasterxml.jackson.annotation.JsonProperty; @@ -10,7 +10,7 @@ public enum SortType { @JsonProperty("desc") DESC("desc"); - private String type; + private final String type; SortType(String type) { this.type = type; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/SortTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/SortTypeDto.java similarity index 73% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/SortTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/SortTypeDto.java index 2964bb1496..0a7cbeeb4c 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/SortTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/SortTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table; import com.fasterxml.jackson.annotation.JsonProperty; @@ -10,7 +10,7 @@ public enum SortTypeDto { @JsonProperty("desc") DESC("desc"); - private String type; + private final String type; SortTypeDto(String type) { this.type = type; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableBriefDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableBriefDto.java similarity index 96% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableBriefDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableBriefDto.java index 3ba910b979..92540c2051 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableBriefDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableBriefDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCreateRawQuery.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableCreateRawQuery.java similarity index 88% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCreateRawQuery.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableCreateRawQuery.java index ec221ae5f0..8ba7b7ab62 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableCreateRawQuery.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableCreateRawQuery.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableDto.java similarity index 80% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableDto.java index 3dde709183..9cb2848e5b 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableDto.java @@ -1,14 +1,11 @@ -package at.tuwien.api.database.table; - -import at.tuwien.api.CacheableDto; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.database.DatabaseBriefDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.table.columns.ColumnDto; -import at.tuwien.api.database.table.constraints.ConstraintsDto; -import at.tuwien.api.identifier.IdentifierDto; -import at.tuwien.api.user.UserBriefDto; -import com.fasterxml.jackson.annotation.JsonIgnore; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table; + +import at.ac.tuwien.ifs.dbrepo.core.api.CacheableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.ConstraintsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserBriefDto; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; @@ -112,6 +109,11 @@ public class TableDto extends CacheableDto { @NotNull private ConstraintsDto constraints; + @NotNull + @Schema(example = "2022-01-01 08:00:00.000") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") + private Instant created; + /* lombok limitations prevent from convenient builder functions */ @JsonProperty("last_retrieved") diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableHistoryDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableHistoryDto.java similarity index 92% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableHistoryDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableHistoryDto.java index e6ed667235..3b6d8df35f 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableHistoryDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableHistoryDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableInsertRawQuery.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableInsertRawQuery.java similarity index 85% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableInsertRawQuery.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableInsertRawQuery.java index de6ff7feb7..caab639414 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableInsertRawQuery.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableInsertRawQuery.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableStatisticDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableStatisticDto.java similarity index 67% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableStatisticDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableStatisticDto.java index 6b5529a0a1..1b728df71c 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableStatisticDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableStatisticDto.java @@ -1,13 +1,13 @@ -package at.tuwien.api.database.table; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table; -import at.tuwien.api.database.table.columns.ColumnStatisticDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnStatisticDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.*; import lombok.extern.jackson.Jacksonized; -import java.util.Map; +import java.util.List; @Getter @Setter @@ -19,9 +19,14 @@ import java.util.Map; @ToString public class TableStatisticDto { - @JsonProperty("rows") + @JsonProperty("total_rows") @Schema(example = "5") - private Long rows; + private Long totalRows; + + @NotNull + @JsonProperty("total_columns") + @Schema(example = "2") + private Long totalColumns; @JsonProperty("data_length") @Schema(example = "16384", description = "in bytes") @@ -36,5 +41,5 @@ public class TableStatisticDto { private Long avgRowLength; @NotNull - private Map<String, ColumnStatisticDto> columns; + private List<ColumnStatisticDto> columns; } diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableUpdateDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableUpdateDto.java similarity index 92% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableUpdateDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableUpdateDto.java index d8db270053..f4fd37a374 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableUpdateDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TableUpdateDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TupleDeleteDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TupleDeleteDto.java similarity index 87% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TupleDeleteDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TupleDeleteDto.java index f74ffb3d89..78d04b5361 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TupleDeleteDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TupleDeleteDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TupleDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TupleDto.java similarity index 87% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TupleDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TupleDto.java index 13dc2b9723..db1d917709 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TupleDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TupleDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TupleUpdateDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TupleUpdateDto.java similarity index 89% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TupleUpdateDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TupleUpdateDto.java index ab3f1ae875..eac3886de2 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TupleUpdateDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/TupleUpdateDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnBriefDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/ColumnBriefDto.java similarity index 95% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnBriefDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/ColumnBriefDto.java index 08ee40caa4..8ebc4f9e38 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnBriefDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/ColumnBriefDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table.columns; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/ColumnDto.java similarity index 87% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/ColumnDto.java index 0df8efbf23..d5c7343694 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/ColumnDto.java @@ -1,9 +1,8 @@ -package at.tuwien.api.database.table.columns; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns; -import at.tuwien.api.database.table.columns.concepts.ConceptBriefDto; -import at.tuwien.api.database.table.columns.concepts.UnitBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts.ConceptBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts.UnitBriefDto; import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -120,10 +119,10 @@ public class ColumnDto { @Schema(example = "false") private Boolean isNullAllowed; - @Parameter(description = "enum values, only considered when type = ENUM") + @Schema(description = "enum values, only considered when type = ENUM") private List<EnumDto> enums; - @Parameter(description = "enum values, only considered when type = ENUM") + @Schema(description = "enum values, only considered when type = ENUM") private List<SetDto> sets; } diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnStatisticDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/ColumnStatisticDto.java similarity index 80% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnStatisticDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/ColumnStatisticDto.java index a7d76a47b2..01f3e2b652 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnStatisticDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/ColumnStatisticDto.java @@ -1,6 +1,7 @@ -package at.tuwien.api.database.table.columns; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns; import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.*; import lombok.extern.jackson.Jacksonized; @@ -17,6 +18,9 @@ import java.math.BigDecimal; @ToString public class ColumnStatisticDto { + @NotBlank + private String name; + @NotNull private BigDecimal mean; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/ColumnTypeDto.java similarity index 95% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/ColumnTypeDto.java index a963370829..fbe35b9c64 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/ColumnTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/ColumnTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table.columns; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -99,7 +99,7 @@ public enum ColumnTypeDto { @JsonProperty("year") YEAR("year"); - private String type; + private final String type; ColumnTypeDto(String type) { this.type = type; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/CreateTableColumnDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/CreateTableColumnDto.java similarity index 95% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/CreateTableColumnDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/CreateTableColumnDto.java index 9733f64a16..b26ca9582a 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/CreateTableColumnDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/CreateTableColumnDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table.columns; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/EnumDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/EnumDto.java similarity index 88% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/EnumDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/EnumDto.java index 9038648513..3a5889324f 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/EnumDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/EnumDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table.columns; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/SetDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/SetDto.java similarity index 88% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/SetDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/SetDto.java index 6986212592..cd0aa8c921 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/SetDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/SetDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table.columns; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/SiUnitDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/SiUnitDto.java similarity index 86% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/SiUnitDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/SiUnitDto.java index 70da894411..2de0da75ae 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/SiUnitDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/SiUnitDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table.columns; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -27,7 +27,7 @@ public enum SiUnitDto { @JsonProperty("candela") CANDELA("candela"); - private String name; + private final String name; SiUnitDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ColumnSemanticsUpdateDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/ColumnSemanticsUpdateDto.java similarity index 83% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ColumnSemanticsUpdateDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/ColumnSemanticsUpdateDto.java index 9c74981f14..26d921cf88 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ColumnSemanticsUpdateDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/ColumnSemanticsUpdateDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table.columns.concepts; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptBriefDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/ConceptBriefDto.java similarity index 91% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptBriefDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/ConceptBriefDto.java index 160807e7aa..0540dfbba4 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptBriefDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/ConceptBriefDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table.columns.concepts; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/ConceptDto.java similarity index 80% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/ConceptDto.java index 1359556943..29d906e90f 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/ConceptDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.database.table.columns.concepts; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts; -import at.tuwien.api.database.table.columns.ColumnBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnBriefDto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptSaveDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/ConceptSaveDto.java similarity index 83% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptSaveDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/ConceptSaveDto.java index b61d911ef9..bdfebd73ff 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptSaveDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/ConceptSaveDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table.columns.concepts; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts; import jakarta.validation.constraints.NotBlank; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitBriefDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/UnitBriefDto.java similarity index 90% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitBriefDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/UnitBriefDto.java index 789f3de150..47658b49cc 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitBriefDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/UnitBriefDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table.columns.concepts; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/UnitDto.java similarity index 80% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/UnitDto.java index ca3899f7cc..6af216e067 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/UnitDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.database.table.columns.concepts; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts; -import at.tuwien.api.database.table.columns.ColumnBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnBriefDto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitSaveDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/UnitSaveDto.java similarity index 83% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitSaveDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/UnitSaveDto.java index 530c7c8fbb..7a13c01521 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitSaveDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/columns/concepts/UnitSaveDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table.columns.concepts; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts; import jakarta.validation.constraints.NotBlank; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/ConstraintsDto.java similarity index 64% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/ConstraintsDto.java index b9288b659b..35648bd768 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/ConstraintsDto.java @@ -1,8 +1,8 @@ -package at.tuwien.api.database.table.constraints; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints; -import at.tuwien.api.database.table.constraints.foreign.ForeignKeyDto; -import at.tuwien.api.database.table.constraints.primary.PrimaryKeyDto; -import at.tuwien.api.database.table.constraints.unique.UniqueDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign.ForeignKeyDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.primary.PrimaryKeyDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.unique.UniqueDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/CreateTableConstraintsDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/CreateTableConstraintsDto.java similarity index 79% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/CreateTableConstraintsDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/CreateTableConstraintsDto.java index 7b223372d2..b2bf3ed732 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/CreateTableConstraintsDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/CreateTableConstraintsDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.database.table.constraints; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints; -import at.tuwien.api.database.table.constraints.foreign.CreateForeignKeyDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign.CreateForeignKeyDto; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.constraints.NotNull; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreign/CreateForeignKeyDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/foreign/CreateForeignKeyDto.java similarity index 92% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreign/CreateForeignKeyDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/foreign/CreateForeignKeyDto.java index 5e1d0a9f86..cfbba36281 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreign/CreateForeignKeyDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/foreign/CreateForeignKeyDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table.constraints.foreign; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreign/ForeignKeyBriefDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/foreign/ForeignKeyBriefDto.java similarity index 81% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreign/ForeignKeyBriefDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/foreign/ForeignKeyBriefDto.java index 4acc205efd..307d57af01 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreign/ForeignKeyBriefDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/foreign/ForeignKeyBriefDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table.constraints.foreign; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreign/ForeignKeyDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/foreign/ForeignKeyDto.java similarity index 81% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreign/ForeignKeyDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/foreign/ForeignKeyDto.java index 94063c77dc..625156027a 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreign/ForeignKeyDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/foreign/ForeignKeyDto.java @@ -1,8 +1,6 @@ -package at.tuwien.api.database.table.constraints.foreign; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign; -import at.tuwien.api.database.table.TableBriefDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.columns.ColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableBriefDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreign/ForeignKeyReferenceDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/foreign/ForeignKeyReferenceDto.java similarity index 81% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreign/ForeignKeyReferenceDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/foreign/ForeignKeyReferenceDto.java index 2423b92a62..4beab3e1ee 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreign/ForeignKeyReferenceDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/foreign/ForeignKeyReferenceDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.database.table.constraints.foreign; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign; -import at.tuwien.api.database.table.columns.ColumnBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnBriefDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreign/ReferenceTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/foreign/ReferenceTypeDto.java similarity index 93% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreign/ReferenceTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/foreign/ReferenceTypeDto.java index 239b95e7e9..a246740718 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/foreign/ReferenceTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/foreign/ReferenceTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.database.table.constraints.foreign; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/primary/PrimaryKeyDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/primary/PrimaryKeyDto.java similarity index 68% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/primary/PrimaryKeyDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/primary/PrimaryKeyDto.java index 59117a5795..74d55ead18 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/primary/PrimaryKeyDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/primary/PrimaryKeyDto.java @@ -1,7 +1,7 @@ -package at.tuwien.api.database.table.constraints.primary; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.primary; -import at.tuwien.api.database.table.TableBriefDto; -import at.tuwien.api.database.table.columns.ColumnBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnBriefDto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/unique/UniqueDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/unique/UniqueDto.java similarity index 72% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/unique/UniqueDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/unique/UniqueDto.java index 64db6dfde0..6f1c613779 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/constraints/unique/UniqueDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/constraints/unique/UniqueDto.java @@ -1,7 +1,7 @@ -package at.tuwien.api.database.table.constraints.unique; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.unique; -import at.tuwien.api.database.table.TableBriefDto; -import at.tuwien.api.database.table.columns.ColumnBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnBriefDto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/internal/TableCreateDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/internal/TableCreateDto.java similarity index 80% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/internal/TableCreateDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/internal/TableCreateDto.java index f8db928e8e..200bfef48f 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/internal/TableCreateDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/database/table/internal/TableCreateDto.java @@ -1,7 +1,7 @@ -package at.tuwien.api.database.table.internal; +package at.ac.tuwien.ifs.dbrepo.core.api.database.table.internal; -import at.tuwien.api.database.table.columns.CreateTableColumnDto; -import at.tuwien.api.database.table.constraints.CreateTableConstraintsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.CreateTableColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.CreateTableConstraintsDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/DataCiteBody.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/DataCiteBody.java similarity index 84% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/DataCiteBody.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/DataCiteBody.java index 8ef874acba..272484e84a 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/DataCiteBody.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/DataCiteBody.java @@ -1,4 +1,4 @@ -package at.tuwien.api.datacite; +package at.ac.tuwien.ifs.dbrepo.core.api.datacite; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/DataCiteData.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/DataCiteData.java similarity index 89% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/DataCiteData.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/DataCiteData.java index 62b8ad411c..1209e36fd3 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/DataCiteData.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/DataCiteData.java @@ -1,4 +1,4 @@ -package at.tuwien.api.datacite; +package at.ac.tuwien.ifs.dbrepo.core.api.datacite; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/DataCiteError.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/DataCiteError.java similarity index 84% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/DataCiteError.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/DataCiteError.java index dcbc312d31..872de43921 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/DataCiteError.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/DataCiteError.java @@ -1,4 +1,4 @@ -package at.tuwien.api.datacite; +package at.ac.tuwien.ifs.dbrepo.core.api.datacite; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteCreateDoi.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteCreateDoi.java similarity index 94% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteCreateDoi.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteCreateDoi.java index 24da7bc82a..27749b4b33 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteCreateDoi.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteCreateDoi.java @@ -1,4 +1,4 @@ -package at.tuwien.api.datacite.doi; +package at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoi.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoi.java similarity index 86% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoi.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoi.java index 5d3e0b2c1e..837f38143d 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoi.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoi.java @@ -1,4 +1,4 @@ -package at.tuwien.api.datacite.doi; +package at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreator.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiCreator.java similarity index 92% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreator.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiCreator.java index 3d093adf74..a95a9dd121 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreator.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiCreator.java @@ -1,4 +1,4 @@ -package at.tuwien.api.datacite.doi; +package at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi; import jakarta.validation.constraints.NotNull; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorAffiliation.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiCreatorAffiliation.java similarity index 87% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorAffiliation.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiCreatorAffiliation.java index a361452b96..b07a86eea3 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorAffiliation.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiCreatorAffiliation.java @@ -1,4 +1,4 @@ -package at.tuwien.api.datacite.doi; +package at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorNameIdentifier.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiCreatorNameIdentifier.java similarity index 86% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorNameIdentifier.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiCreatorNameIdentifier.java index 449c814171..a75f6fc333 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorNameIdentifier.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiCreatorNameIdentifier.java @@ -1,4 +1,4 @@ -package at.tuwien.api.datacite.doi; +package at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiEvent.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiEvent.java similarity index 90% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiEvent.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiEvent.java index 35b6c670da..5c753dd6b6 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiEvent.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiEvent.java @@ -1,4 +1,4 @@ -package at.tuwien.api.datacite.doi; +package at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiFundingReference.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiFundingReference.java similarity index 88% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiFundingReference.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiFundingReference.java index 595c808a24..546094183c 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiFundingReference.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiFundingReference.java @@ -1,4 +1,4 @@ -package at.tuwien.api.datacite.doi; +package at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiFundingReferenceIdentifier.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiFundingReferenceIdentifier.java similarity index 85% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiFundingReferenceIdentifier.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiFundingReferenceIdentifier.java index 1bdc94605f..00fedaa15b 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiFundingReferenceIdentifier.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiFundingReferenceIdentifier.java @@ -1,4 +1,4 @@ -package at.tuwien.api.datacite.doi; +package at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRelatedIdentifier.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiRelatedIdentifier.java similarity index 88% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRelatedIdentifier.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiRelatedIdentifier.java index d446029eae..3e246944d9 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRelatedIdentifier.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiRelatedIdentifier.java @@ -1,4 +1,4 @@ -package at.tuwien.api.datacite.doi; +package at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRights.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiRights.java similarity index 85% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRights.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiRights.java index 4a53c7f7c5..0bef60756f 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRights.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiRights.java @@ -1,4 +1,4 @@ -package at.tuwien.api.datacite.doi; +package at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTitle.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiTitle.java similarity index 94% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTitle.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiTitle.java index a0358da69a..38114a19cd 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTitle.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiTitle.java @@ -1,4 +1,4 @@ -package at.tuwien.api.datacite.doi; +package at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTypes.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiTypes.java similarity index 91% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTypes.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiTypes.java index 778853ce78..c69ece3ac0 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTypes.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteDoiTypes.java @@ -1,4 +1,4 @@ -package at.tuwien.api.datacite.doi; +package at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteNameType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteNameType.java similarity index 82% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteNameType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteNameType.java index b9940ab5f4..c6e551e533 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteNameType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/datacite/doi/DataCiteNameType.java @@ -1,4 +1,4 @@ -package at.tuwien.api.datacite.doi; +package at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -12,7 +12,7 @@ public enum DataCiteNameType { @JsonProperty("Organizational") ORGANIZATIONAL("Organizational"); - private String name; + private final String name; DataCiteNameType(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/error/ApiErrorDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/error/ApiErrorDto.java similarity index 92% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/error/ApiErrorDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/error/ApiErrorDto.java index bb271f5ed6..49ea5af60f 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/error/ApiErrorDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/error/ApiErrorDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.error; +package at.ac.tuwien.ifs.dbrepo.core.api.error; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/file/UploadResponseDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/file/UploadResponseDto.java similarity index 86% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/file/UploadResponseDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/file/UploadResponseDto.java index 3b1cdab223..6a8b9b818b 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/file/UploadResponseDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/file/UploadResponseDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.file; +package at.ac.tuwien.ifs.dbrepo.core.api.file; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.constraints.NotBlank; diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/AccessTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/AccessTypeDto.java new file mode 100644 index 0000000000..39447d8e73 --- /dev/null +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/AccessTypeDto.java @@ -0,0 +1,24 @@ +package at.ac.tuwien.ifs.dbrepo.core.api.grafana; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; + +@Getter +@Schema +public enum AccessTypeDto { + + @JsonProperty("proxy") + PROXY("proxy"); + + private final String name; + + AccessTypeDto(String name) { + this.name = name; + } + + @Override + public String toString() { + return this.name; + } +} diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/CreateDashboardDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/CreateDashboardDto.java new file mode 100644 index 0000000000..6b7a879b5b --- /dev/null +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/CreateDashboardDto.java @@ -0,0 +1,39 @@ +package at.ac.tuwien.ifs.dbrepo.core.api.grafana; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.*; +import lombok.extern.jackson.Jacksonized; + +@Getter +@Setter +@Builder +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString +public class CreateDashboardDto { + + @NotNull + @JsonProperty("database_name") + @Schema(example = "Some Database") + private String databaseName; + + @NotNull + @JsonProperty("is_public") + @Schema(example = "true") + private Boolean isPublic; + + @NotNull + @JsonProperty("is_schema_public") + @Schema(example = "true") + private Boolean isSchemaPublic; + + @NotBlank + @JsonProperty("owner_username") + @Schema(example = "foobar") + private String ownerUsername; +} diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/CreateDashboardResponseDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/CreateDashboardResponseDto.java new file mode 100644 index 0000000000..cc4bcfa40b --- /dev/null +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/CreateDashboardResponseDto.java @@ -0,0 +1,25 @@ +package at.ac.tuwien.ifs.dbrepo.core.api.grafana; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.*; +import lombok.extern.jackson.Jacksonized; + +@Getter +@Setter +@Builder +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString +public class CreateDashboardResponseDto { + + @NotNull + @Schema(example = "3") + private Long id; + + @NotNull + @Schema(example = "eeckcuwfsfbi8b") + private String uid; +} diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/DatasourceDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/DatasourceDto.java new file mode 100644 index 0000000000..e670c99ff6 --- /dev/null +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/DatasourceDto.java @@ -0,0 +1,80 @@ +package at.ac.tuwien.ifs.dbrepo.core.api.grafana; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.*; +import lombok.extern.jackson.Jacksonized; + +@Getter +@Setter +@Builder +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) +@Jacksonized +@ToString +public class DatasourceDto { + + @NotNull + @Schema(example = "1") + private Long id; + + @NotNull + @Schema(example = "kLtEtcRGk") + private String uid; + + @NotNull + @Schema(example = "1") + private Long orgId; + + @NotNull + @Schema(example = "some_datasource") + private String name; + + @NotNull + @Schema(example = "plugins/logo.svg") + private String typeLogoUrl; + + @NotNull + @Schema(example = "PROXY") + private AccessTypeDto access; + + @Schema(example = "http://example.com") + private String url; + + @Schema(example = "s3cr3t") + private String password; + + @Schema(example = "user") + private String user; + + @Schema(example = "true") + private Boolean basicAuth; + + @Schema(example = "user") + private String basicAuthUser; + + @Schema(example = "s3cr3t") + private String basicAuthPassword; + + @Schema(example = "false") + private Boolean withCredentials; + + @Schema(example = "false") + private Boolean isDefault; + + @NotNull + @Schema(example = "true") + private Boolean readOnly; + + @NotNull + @Schema(example = "INFINITY") + private DatasourceTypeDto type; + + @NotNull + @Schema(example = "0") + private Integer version; + +} diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/DatasourceTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/DatasourceTypeDto.java new file mode 100644 index 0000000000..e708ccf6a8 --- /dev/null +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/DatasourceTypeDto.java @@ -0,0 +1,24 @@ +package at.ac.tuwien.ifs.dbrepo.core.api.grafana; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; + +@Getter +@Schema +public enum DatasourceTypeDto { + + @JsonProperty("yesoreyeram-infinity-datasource") + INFINITY("yesoreyeram-infinity-datasource"); + + private final String name; + + DatasourceTypeDto(String name) { + this.name = name; + } + + @Override + public String toString() { + return this.name; + } +} diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/PermissionTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/PermissionTypeDto.java new file mode 100644 index 0000000000..f9561da037 --- /dev/null +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/PermissionTypeDto.java @@ -0,0 +1,33 @@ +package at.ac.tuwien.ifs.dbrepo.core.api.grafana; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; + +@Getter +@Schema +public enum PermissionTypeDto { + + @JsonProperty("View") + VIEW("View"), + + @JsonProperty("Editor") + EDITOR("Editor"), + + @JsonProperty("Admin") + ADMIN("Admin"), + + @JsonProperty("") + NONE(""); + + private final String name; + + PermissionTypeDto(String name) { + this.name = name; + } + + @Override + public String toString() { + return this.name; + } +} diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/UpdateDashboardAccessDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/UpdateDashboardAccessDto.java new file mode 100644 index 0000000000..08d755e111 --- /dev/null +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/grafana/UpdateDashboardAccessDto.java @@ -0,0 +1,21 @@ +package at.ac.tuwien.ifs.dbrepo.core.api.grafana; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.*; +import lombok.extern.jackson.Jacksonized; + +@Getter +@Setter +@Builder +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString +public class UpdateDashboardAccessDto { + + @NotNull + @Schema(example = "View") + private PermissionTypeDto permission; +} diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/AffiliationIdentifierSchemeTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/AffiliationIdentifierSchemeTypeDto.java similarity index 67% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/AffiliationIdentifierSchemeTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/AffiliationIdentifierSchemeTypeDto.java index 3c089e6454..ba881921ac 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/AffiliationIdentifierSchemeTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/AffiliationIdentifierSchemeTypeDto.java @@ -1,5 +1,5 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import lombok.Getter; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/BibliographyTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/BibliographyTypeDto.java similarity index 83% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/BibliographyTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/BibliographyTypeDto.java index 9da9afbc0b..d89935553c 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/BibliographyTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/BibliographyTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -15,7 +15,7 @@ public enum BibliographyTypeDto { @JsonProperty("bibtex") BIBTEX("bibtex"); - private String name; + private final String name; BibliographyTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreateIdentifierDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/CreateIdentifierDto.java similarity index 91% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreateIdentifierDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/CreateIdentifierDto.java index 5f2e73fc07..286d04dc3b 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreateIdentifierDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/CreateIdentifierDto.java @@ -1,7 +1,7 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; -import at.tuwien.api.database.LanguageTypeDto; -import at.tuwien.api.database.LicenseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.LanguageTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.LicenseDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreatorBriefDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/CreatorBriefDto.java similarity index 96% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreatorBriefDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/CreatorBriefDto.java index 95b0d588f7..f5a1d94897 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreatorBriefDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/CreatorBriefDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/CreatorDto.java similarity index 95% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/CreatorDto.java index 1382baec51..b98985c1c4 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/CreatorDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -7,7 +7,6 @@ import lombok.*; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.extern.jackson.Jacksonized; -import org.springframework.data.annotation.Id; import java.util.UUID; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/DescriptionTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/DescriptionTypeDto.java similarity index 88% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/DescriptionTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/DescriptionTypeDto.java index c98c0a1f33..7ddab32784 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/DescriptionTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/DescriptionTypeDto.java @@ -1,5 +1,5 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -25,7 +25,7 @@ public enum DescriptionTypeDto { @JsonProperty("Other") OTHER("Other"); - private String name; + private final String name; DescriptionTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierBriefDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierBriefDto.java similarity index 96% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierBriefDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierBriefDto.java index 0434d1b21f..74f60ab153 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierBriefDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierBriefDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierDescriptionDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierDescriptionDto.java similarity index 85% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierDescriptionDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierDescriptionDto.java index 32ff2455cc..e491fd6744 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierDescriptionDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierDescriptionDto.java @@ -1,12 +1,11 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; -import at.tuwien.api.database.LanguageTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.LanguageTypeDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.*; import lombok.extern.jackson.Jacksonized; -import org.springframework.data.annotation.Id; import java.util.UUID; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierDto.java similarity index 92% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierDto.java index 0bc16d61cd..35293a6d9e 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierDto.java @@ -1,8 +1,8 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; -import at.tuwien.api.database.LanguageTypeDto; -import at.tuwien.api.database.LicenseDto; -import at.tuwien.api.user.UserBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.LanguageTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.LicenseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserBriefDto; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierFunderDto.java similarity index 93% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierFunderDto.java index 4184f2cf2a..741e1ac1ac 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierFunderDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -6,7 +6,6 @@ import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.*; import lombok.extern.jackson.Jacksonized; -import org.springframework.data.annotation.Id; import java.util.UUID; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierFunderTypeDto.java similarity index 86% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierFunderTypeDto.java index 70a6d36f26..6682bac43a 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierFunderTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierFunderTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -21,7 +21,7 @@ public enum IdentifierFunderTypeDto { @JsonProperty("Other") OTHER("Other"); - private String name; + private final String name; IdentifierFunderTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierSaveDto.java similarity index 91% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierSaveDto.java index f63c3ae79c..2054e84012 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierSaveDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierSaveDto.java @@ -1,7 +1,7 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; -import at.tuwien.api.database.LanguageTypeDto; -import at.tuwien.api.database.LicenseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.LanguageTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.LicenseDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierStatusTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierStatusTypeDto.java similarity index 82% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierStatusTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierStatusTypeDto.java index 2c7f4527b1..655c670a35 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierStatusTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierStatusTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -12,7 +12,7 @@ public enum IdentifierStatusTypeDto { @JsonProperty("published") PUBLISHED("published"); - private String name; + private final String name; IdentifierStatusTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierTitleDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierTitleDto.java similarity index 84% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierTitleDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierTitleDto.java index d995527d88..829454134d 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierTitleDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierTitleDto.java @@ -1,12 +1,11 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; -import at.tuwien.api.database.LanguageTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.LanguageTypeDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.*; import lombok.extern.jackson.Jacksonized; -import org.springframework.data.annotation.Id; import java.util.UUID; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierTypeDto.java similarity index 84% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierTypeDto.java index 19660e324d..bca87f3cd8 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/IdentifierTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/IdentifierTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -18,7 +18,7 @@ public enum IdentifierTypeDto { @JsonProperty("view") VIEW("view"); - private String name; + private final String name; IdentifierTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/LinksDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/LinksDto.java similarity index 77% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/LinksDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/LinksDto.java index fcef2a6597..9b3461ea47 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/LinksDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/LinksDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -29,4 +29,8 @@ public class LinksDto { @Schema(example = "http://example.com") private String data; + @JsonProperty("dashboard_html") + @Schema(example = "http://example.com/d/defi2baxqawaod") + private String dashboardHtml; + } diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/NameIdentifierSchemeTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/NameIdentifierSchemeTypeDto.java similarity index 68% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/NameIdentifierSchemeTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/NameIdentifierSchemeTypeDto.java index 3ea4c2d7f8..028abf15f2 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/NameIdentifierSchemeTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/NameIdentifierSchemeTypeDto.java @@ -1,5 +1,5 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import lombok.Getter; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/NameTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/NameTypeDto.java similarity index 82% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/NameTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/NameTypeDto.java index d9f2a16bf5..6de88e1bb1 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/NameTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/NameTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -12,7 +12,7 @@ public enum NameTypeDto { @JsonProperty("Organizational") ORGANIZATIONAL("Organizational"); - private String name; + private final String name; NameTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/RelatedIdentifierDto.java similarity index 69% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/RelatedIdentifierDto.java index 7205bc6e0b..5aec478064 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/RelatedIdentifierDto.java @@ -1,17 +1,11 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; -import at.tuwien.api.user.UserDto; -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import jakarta.validation.constraints.NotNull; import lombok.extern.jackson.Jacksonized; -import org.springframework.data.annotation.Id; -import java.time.Instant; import java.util.UUID; @Getter diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/RelatedTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/RelatedTypeDto.java similarity index 92% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/RelatedTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/RelatedTypeDto.java index 1e75513abc..76fabca029 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/RelatedTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/RelatedTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -60,7 +60,7 @@ public enum RelatedTypeDto { @JsonProperty("w3id") W3ID("w3id"); - private String name; + private final String name; RelatedTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/RelationTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/RelationTypeDto.java similarity index 96% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/RelationTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/RelationTypeDto.java index fb43cc5b46..bc43f0c81e 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/RelationTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/RelationTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -108,7 +108,7 @@ public enum RelationTypeDto { @JsonProperty("Obsoletes") OBSOLETES("Obsoletes"); - private String name; + private final String name; RelationTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/SaveIdentifierCreatorDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/SaveIdentifierCreatorDto.java similarity index 96% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/SaveIdentifierCreatorDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/SaveIdentifierCreatorDto.java index 0866a5cb3b..ce3d92480b 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/SaveIdentifierCreatorDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/SaveIdentifierCreatorDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/SaveIdentifierDescriptionDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/SaveIdentifierDescriptionDto.java similarity index 87% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/SaveIdentifierDescriptionDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/SaveIdentifierDescriptionDto.java index bc1ad4f3df..0abfa73128 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/SaveIdentifierDescriptionDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/SaveIdentifierDescriptionDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; -import at.tuwien.api.database.LanguageTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.LanguageTypeDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/SaveIdentifierFunderDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/SaveIdentifierFunderDto.java similarity index 95% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/SaveIdentifierFunderDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/SaveIdentifierFunderDto.java index 1709c109b2..f877f45829 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/SaveIdentifierFunderDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/SaveIdentifierFunderDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/SaveIdentifierTitleDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/SaveIdentifierTitleDto.java similarity index 86% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/SaveIdentifierTitleDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/SaveIdentifierTitleDto.java index 07ebc35e2c..99a95c45d5 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/SaveIdentifierTitleDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/SaveIdentifierTitleDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; -import at.tuwien.api.database.LanguageTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.LanguageTypeDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/SaveRelatedIdentifierDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/SaveRelatedIdentifierDto.java similarity index 92% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/SaveRelatedIdentifierDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/SaveRelatedIdentifierDto.java index d22c8216e3..ccb47cac43 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/SaveRelatedIdentifierDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/SaveRelatedIdentifierDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/TitleTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/TitleTypeDto.java similarity index 86% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/TitleTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/TitleTypeDto.java index 72b30dd315..d1d5379a7e 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/TitleTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/TitleTypeDto.java @@ -1,5 +1,5 @@ -package at.tuwien.api.identifier; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -19,7 +19,7 @@ public enum TitleTypeDto { @JsonProperty("Other") OTHER("Other"); - private String name; + private final String name; TitleTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/ld/LdCreatorDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/ld/LdCreatorDto.java similarity index 89% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/ld/LdCreatorDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/ld/LdCreatorDto.java index 0bde2d2968..8d983afb3d 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/ld/LdCreatorDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/ld/LdCreatorDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.identifier.ld; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier.ld; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/ld/LdDatasetDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/ld/LdDatasetDto.java similarity index 94% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/ld/LdDatasetDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/ld/LdDatasetDto.java index bab1deb2d1..e599f66d8c 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/ld/LdDatasetDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/identifier/ld/LdDatasetDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.identifier.ld; +package at.ac.tuwien.ifs.dbrepo.core.api.identifier.ld; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/CredentialDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/CredentialDto.java similarity index 89% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/CredentialDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/CredentialDto.java index 172b844e1b..71a279519d 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/CredentialDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/CredentialDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.keycloak; +package at.ac.tuwien.ifs.dbrepo.core.api.keycloak; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/CredentialTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/CredentialTypeDto.java similarity index 79% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/CredentialTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/CredentialTypeDto.java index 4992f74cf9..71530c5edc 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/CredentialTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/CredentialTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.keycloak; +package at.ac.tuwien.ifs.dbrepo.core.api.keycloak; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -9,7 +9,7 @@ public enum CredentialTypeDto { @JsonProperty("password") PASSWORD("password"); - private String name; + private final String name; CredentialTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/ModifyUserDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/ModifyUserDto.java similarity index 90% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/ModifyUserDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/ModifyUserDto.java index 26d700e798..8ad43b34c2 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/ModifyUserDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/ModifyUserDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.keycloak; +package at.ac.tuwien.ifs.dbrepo.core.api.keycloak; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/RoleRepresentationDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/RoleRepresentationDto.java similarity index 91% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/RoleRepresentationDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/RoleRepresentationDto.java index 8f7d795fdb..bc3137d421 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/RoleRepresentationDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/RoleRepresentationDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.keycloak; +package at.ac.tuwien.ifs.dbrepo.core.api.keycloak; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/TokenDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/TokenDto.java similarity index 92% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/TokenDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/TokenDto.java index dcd14c4d2a..8cde17a095 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/TokenDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/TokenDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.keycloak; +package at.ac.tuwien.ifs.dbrepo.core.api.keycloak; -import at.tuwien.api.CacheableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.CacheableDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/UpdateCredentialsDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/UpdateCredentialsDto.java similarity index 86% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/UpdateCredentialsDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/UpdateCredentialsDto.java index c8bac04d45..3994b1aaab 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/UpdateCredentialsDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/UpdateCredentialsDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.keycloak; +package at.ac.tuwien.ifs.dbrepo.core.api.keycloak; import jakarta.validation.constraints.NotNull; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/UserAttributesDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/UserAttributesDto.java similarity index 92% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/UserAttributesDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/UserAttributesDto.java index 50718bc803..0e7ab89f66 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/UserAttributesDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/UserAttributesDto.java @@ -1,12 +1,10 @@ -package at.tuwien.api.keycloak; +package at.ac.tuwien.ifs.dbrepo.core.api.keycloak; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import lombok.extern.jackson.Jacksonized; -import java.util.UUID; - @Getter @Setter @Builder diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/UserCreateAttributesDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/UserCreateAttributesDto.java similarity index 85% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/UserCreateAttributesDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/UserCreateAttributesDto.java index 6df8ce5e8f..e2357a4e94 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/UserCreateAttributesDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/UserCreateAttributesDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.keycloak; +package at.ac.tuwien.ifs.dbrepo.core.api.keycloak; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/UserCreateDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/UserCreateDto.java similarity index 93% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/UserCreateDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/UserCreateDto.java index 2a80811b62..b8879ae24e 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/UserCreateDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/UserCreateDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.keycloak; +package at.ac.tuwien.ifs.dbrepo.core.api.keycloak; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/UserIdAttributesDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/UserIdAttributesDto.java similarity index 90% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/UserIdAttributesDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/UserIdAttributesDto.java index 3155d75f02..0a34e5fe61 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/keycloak/UserIdAttributesDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/keycloak/UserIdAttributesDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.keycloak; +package at.ac.tuwien.ifs.dbrepo.core.api.keycloak; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/ldap/UserDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/ldap/UserDto.java similarity index 89% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/ldap/UserDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/ldap/UserDto.java index e6aec08226..f06844ef7d 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/ldap/UserDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/ldap/UserDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.ldap; +package at.ac.tuwien.ifs.dbrepo.core.api.ldap; import jakarta.validation.constraints.NotNull; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageBriefDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/maintenance/BannerMessageBriefDto.java similarity index 92% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageBriefDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/maintenance/BannerMessageBriefDto.java index a11c70f621..72ca75913f 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageBriefDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/maintenance/BannerMessageBriefDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.maintenance; +package at.ac.tuwien.ifs.dbrepo.core.api.maintenance; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageCreateDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/maintenance/BannerMessageCreateDto.java similarity index 95% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageCreateDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/maintenance/BannerMessageCreateDto.java index f7466d3e2c..3526258d80 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageCreateDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/maintenance/BannerMessageCreateDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.maintenance; +package at.ac.tuwien.ifs.dbrepo.core.api.maintenance; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/maintenance/BannerMessageDto.java similarity index 96% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/maintenance/BannerMessageDto.java index d344ccd6b4..9e2f094b69 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/maintenance/BannerMessageDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.maintenance; +package at.ac.tuwien.ifs.dbrepo.core.api.maintenance; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/maintenance/BannerMessageTypeDto.java similarity index 83% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/maintenance/BannerMessageTypeDto.java index 8a867f5ea4..16e9b8a810 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/maintenance/BannerMessageTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.maintenance; +package at.ac.tuwien.ifs.dbrepo.core.api.maintenance; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -15,7 +15,7 @@ public enum BannerMessageTypeDto { @JsonProperty("info") INFO("info"); - private String name; + private final String name; BannerMessageTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageUpdateDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/maintenance/BannerMessageUpdateDto.java similarity index 95% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageUpdateDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/maintenance/BannerMessageUpdateDto.java index f6aad1989e..4551adaa40 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/maintenance/BannerMessageUpdateDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/maintenance/BannerMessageUpdateDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.maintenance; +package at.ac.tuwien.ifs.dbrepo.core.api.maintenance; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/OrcidDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/OrcidDto.java similarity index 66% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/OrcidDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/OrcidDto.java index c4ea89b005..e25b7240fa 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/OrcidDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/OrcidDto.java @@ -1,7 +1,7 @@ -package at.tuwien.api.orcid; +package at.ac.tuwien.ifs.dbrepo.core.api.orcid; -import at.tuwien.api.orcid.activities.OrcidActivitiesSummaryDto; -import at.tuwien.api.orcid.person.OrcidPersonDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.OrcidActivitiesSummaryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.person.OrcidPersonDto; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/OrcidActivitiesSummaryDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/OrcidActivitiesSummaryDto.java similarity index 65% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/OrcidActivitiesSummaryDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/OrcidActivitiesSummaryDto.java index 625611abd2..3bd62fd915 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/OrcidActivitiesSummaryDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/OrcidActivitiesSummaryDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.orcid.activities; +package at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities; -import at.tuwien.api.orcid.activities.employments.OrcidEmploymentsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.OrcidEmploymentsDto; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/OrcidEmploymentsDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/OrcidEmploymentsDto.java similarity index 66% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/OrcidEmploymentsDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/OrcidEmploymentsDto.java index dea853b62b..fee281294b 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/OrcidEmploymentsDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/OrcidEmploymentsDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.orcid.activities.employments; +package at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments; -import at.tuwien.api.orcid.activities.employments.affiliation.OrcidAffiliationGroupDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.OrcidAffiliationGroupDto; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/OrcidAffiliationGroupDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/OrcidAffiliationGroupDto.java similarity index 57% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/OrcidAffiliationGroupDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/OrcidAffiliationGroupDto.java index a82a88869b..bbda576a4a 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/OrcidAffiliationGroupDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/OrcidAffiliationGroupDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.orcid.activities.employments.affiliation; +package at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation; -import at.tuwien.api.orcid.activities.employments.affiliation.group.OrcidEmploymentSummaryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.group.OrcidEmploymentSummaryDto; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/OrcidEmploymentSummaryDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/group/OrcidEmploymentSummaryDto.java similarity index 63% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/OrcidEmploymentSummaryDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/group/OrcidEmploymentSummaryDto.java index 984dc8a6d0..159e83a3a5 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/OrcidEmploymentSummaryDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/group/OrcidEmploymentSummaryDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.orcid.activities.employments.affiliation.group; +package at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.group; -import at.tuwien.api.orcid.activities.employments.affiliation.group.summary.OrcidSummaryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.group.summary.OrcidSummaryDto; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/OrcidSummaryDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/group/summary/OrcidSummaryDto.java similarity index 69% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/OrcidSummaryDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/group/summary/OrcidSummaryDto.java index 1377a73dba..1dfd21700a 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/OrcidSummaryDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/group/summary/OrcidSummaryDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.orcid.activities.employments.affiliation.group.summary; +package at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.group.summary; -import at.tuwien.api.orcid.activities.employments.affiliation.group.summary.organization.OrcidOrganizationDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.group.summary.organization.OrcidOrganizationDto; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/OrcidOrganizationDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/group/summary/organization/OrcidOrganizationDto.java similarity index 60% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/OrcidOrganizationDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/group/summary/organization/OrcidOrganizationDto.java index 149af1b3e6..7146bcf175 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/OrcidOrganizationDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/group/summary/organization/OrcidOrganizationDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.orcid.activities.employments.affiliation.group.summary.organization; +package at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.group.summary.organization; -import at.tuwien.api.orcid.activities.employments.affiliation.group.summary.organization.disambiguated.OrcidDisambiguatedDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.group.summary.organization.disambiguated.OrcidDisambiguatedDto; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedDto.java similarity index 78% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedDto.java index c5ed53e37f..e8ea1dba39 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.orcid.activities.employments.affiliation.group.summary.organization.disambiguated; +package at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.group.summary.organization.disambiguated; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedSourceTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedSourceTypeDto.java new file mode 100644 index 0000000000..83169ad79c --- /dev/null +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/activities/employments/affiliation/group/summary/organization/disambiguated/OrcidDisambiguatedSourceTypeDto.java @@ -0,0 +1,6 @@ +package at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.group.summary.organization.disambiguated; + +public enum OrcidDisambiguatedSourceTypeDto { + RINGGOLD, + ROR +} diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/person/OrcidPersonDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/person/OrcidPersonDto.java similarity index 64% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/person/OrcidPersonDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/person/OrcidPersonDto.java index f7de2794d7..afb1d6d80f 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/person/OrcidPersonDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/person/OrcidPersonDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.orcid.person; +package at.ac.tuwien.ifs.dbrepo.core.api.orcid.person; -import at.tuwien.api.orcid.person.name.OrcidNameDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.person.name.OrcidNameDto; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/person/name/OrcidNameDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/person/name/OrcidNameDto.java similarity index 87% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/person/name/OrcidNameDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/person/name/OrcidNameDto.java index 44c2ac0e6b..2b638ff20a 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/person/name/OrcidNameDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/person/name/OrcidNameDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.orcid.person.name; +package at.ac.tuwien.ifs.dbrepo.core.api.orcid.person.name; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/person/name/OrcidValueDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/person/name/OrcidValueDto.java similarity index 79% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/person/name/OrcidValueDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/person/name/OrcidValueDto.java index 251a39c23c..bcfd0d3a16 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/orcid/person/name/OrcidValueDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/orcid/person/name/OrcidValueDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.orcid.person.name; +package at.ac.tuwien.ifs.dbrepo.core.api.orcid.person.name; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/ror/RorDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/ror/RorDto.java similarity index 85% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/ror/RorDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/ror/RorDto.java index 8e9407885c..19776bcf09 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/ror/RorDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/ror/RorDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.ror; +package at.ac.tuwien.ifs.dbrepo.core.api.ror; import lombok.*; import lombok.extern.jackson.Jacksonized; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/EntityDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/EntityDto.java similarity index 91% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/EntityDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/EntityDto.java index 5c1d6cc13a..a9f31f97f0 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/EntityDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/EntityDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.semantics; +package at.ac.tuwien.ifs.dbrepo.core.api.semantics; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyBriefDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/OntologyBriefDto.java similarity index 94% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyBriefDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/OntologyBriefDto.java index 29d5116a70..81caa34ad1 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyBriefDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/OntologyBriefDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.semantics; +package at.ac.tuwien.ifs.dbrepo.core.api.semantics; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyCreateDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/OntologyCreateDto.java similarity index 92% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyCreateDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/OntologyCreateDto.java index 1e2cf44167..aa11b34e55 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyCreateDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/OntologyCreateDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.semantics; +package at.ac.tuwien.ifs.dbrepo.core.api.semantics; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/OntologyDto.java similarity index 88% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/OntologyDto.java index a3e7c46d01..afbb818e1b 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/OntologyDto.java @@ -1,7 +1,5 @@ -package at.tuwien.api.semantics; +package at.ac.tuwien.ifs.dbrepo.core.api.semantics; -import at.tuwien.api.user.UserBriefDto; -import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; @@ -9,7 +7,6 @@ import jakarta.validation.constraints.NotNull; import lombok.*; import lombok.extern.jackson.Jacksonized; -import java.time.Instant; import java.util.UUID; @Getter diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyModifyDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/OntologyModifyDto.java similarity index 93% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyModifyDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/OntologyModifyDto.java index f003790922..b73891b342 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/OntologyModifyDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/OntologyModifyDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.semantics; +package at.ac.tuwien.ifs.dbrepo.core.api.semantics; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/TableColumnEntityDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/TableColumnEntityDto.java similarity index 95% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/TableColumnEntityDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/TableColumnEntityDto.java index f4a2147a29..1bb401e5ca 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/semantics/TableColumnEntityDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/semantics/TableColumnEntityDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.semantics; +package at.ac.tuwien.ifs.dbrepo.core.api.semantics; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/ExchangeUpdatePermissionsDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/ExchangeUpdatePermissionsDto.java similarity index 91% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/ExchangeUpdatePermissionsDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/ExchangeUpdatePermissionsDto.java index f545f62041..3b775a2318 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/ExchangeUpdatePermissionsDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/ExchangeUpdatePermissionsDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user; +package at.ac.tuwien.ifs.dbrepo.core.api.user; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/GrantedAuthorityDto.java similarity index 87% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/GrantedAuthorityDto.java index 07e0029a71..cabc0b1d07 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/GrantedAuthorityDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user; +package at.ac.tuwien.ifs.dbrepo.core.api.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/RoleTypeDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/RoleTypeDto.java similarity index 85% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/RoleTypeDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/RoleTypeDto.java index 4b2c877435..30f2cc2b8b 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/RoleTypeDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/RoleTypeDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user; +package at.ac.tuwien.ifs.dbrepo.core.api.user; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -15,7 +15,7 @@ public enum RoleTypeDto { @JsonProperty("data_steward") ROLE_DATA_STEWARD("data_steward"); - private String name; + private final String name; RoleTypeDto(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserAttributesDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserAttributesDto.java similarity index 94% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserAttributesDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserAttributesDto.java index ef9bae650c..b365199cec 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserAttributesDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserAttributesDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user; +package at.ac.tuwien.ifs.dbrepo.core.api.user; import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserBriefDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserBriefDto.java similarity index 95% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserBriefDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserBriefDto.java index d245bbaf4c..58a2aeab88 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserBriefDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserBriefDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user; +package at.ac.tuwien.ifs.dbrepo.core.api.user; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDetailsDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserDetailsDto.java similarity index 95% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDetailsDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserDetailsDto.java index 2ab170d616..8f4b3c3892 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDetailsDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserDetailsDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user; +package at.ac.tuwien.ifs.dbrepo.core.api.user; import jakarta.validation.constraints.NotNull; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserDto.java similarity index 92% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserDto.java index e7367e2fb4..c5db991725 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.user; +package at.ac.tuwien.ifs.dbrepo.core.api.user; -import at.tuwien.api.CacheableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.CacheableDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserEmailDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserEmailDto.java similarity index 90% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserEmailDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserEmailDto.java index caaf332497..a8ccd56b8d 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserEmailDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserEmailDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user; +package at.ac.tuwien.ifs.dbrepo.core.api.user; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Email; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserForgotDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserForgotDto.java similarity index 90% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserForgotDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserForgotDto.java index 5ebcbae742..4895a04c70 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserForgotDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserForgotDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user; +package at.ac.tuwien.ifs.dbrepo.core.api.user; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Email; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserModifyPasswordDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserModifyPasswordDto.java similarity index 90% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserModifyPasswordDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserModifyPasswordDto.java index 2b86672cc2..9b1e1a72cc 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserModifyPasswordDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserModifyPasswordDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user; +package at.ac.tuwien.ifs.dbrepo.core.api.user; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserPasswordDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserPasswordDto.java similarity index 86% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserPasswordDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserPasswordDto.java index dcf5393284..f549047c4e 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserPasswordDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserPasswordDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user; +package at.ac.tuwien.ifs.dbrepo.core.api.user; import jakarta.validation.constraints.NotNull; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserResetDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserResetDto.java similarity index 87% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserResetDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserResetDto.java index 6cac59a904..260b5f67ca 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserResetDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserResetDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user; +package at.ac.tuwien.ifs.dbrepo.core.api.user; import jakarta.validation.constraints.NotNull; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserRolesDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserRolesDto.java similarity index 87% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserRolesDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserRolesDto.java index 5667f38ec6..8ed18d5101 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserRolesDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserRolesDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user; +package at.ac.tuwien.ifs.dbrepo.core.api.user; import jakarta.validation.constraints.NotNull; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserThemeSetDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserThemeSetDto.java similarity index 88% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserThemeSetDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserThemeSetDto.java index 3f5b899df8..ebc7292edf 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserThemeSetDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserThemeSetDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user; +package at.ac.tuwien.ifs.dbrepo.core.api.user; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserUpdateDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserUpdateDto.java similarity index 93% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserUpdateDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserUpdateDto.java index 68d674a7c2..099d3e7b08 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserUpdateDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserUpdateDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user; +package at.ac.tuwien.ifs.dbrepo.core.api.user; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserUpdatePermissionsDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserUpdatePermissionsDto.java similarity index 89% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserUpdatePermissionsDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserUpdatePermissionsDto.java index 99f1eab30a..dd7742c2f5 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserUpdatePermissionsDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/UserUpdatePermissionsDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user; +package at.ac.tuwien.ifs.dbrepo.core.api.user; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/external/ExternalMetadataDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/external/ExternalMetadataDto.java similarity index 78% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/external/ExternalMetadataDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/external/ExternalMetadataDto.java index fb40af0948..c169e27fe5 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/external/ExternalMetadataDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/external/ExternalMetadataDto.java @@ -1,6 +1,6 @@ -package at.tuwien.api.user.external; +package at.ac.tuwien.ifs.dbrepo.core.api.user.external; -import at.tuwien.api.user.external.affiliation.ExternalAffiliationDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.external.affiliation.ExternalAffiliationDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/external/ExternalResultType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/external/ExternalResultType.java similarity index 82% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/external/ExternalResultType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/external/ExternalResultType.java index e3eca17346..e3cb61abf1 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/external/ExternalResultType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/external/ExternalResultType.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user.external; +package at.ac.tuwien.ifs.dbrepo.core.api.user.external; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -12,7 +12,7 @@ public enum ExternalResultType { @JsonProperty("Organizational") ORGANIZATIONAL("Organizational"); - private String name; + private final String name; ExternalResultType(String name) { this.name = name; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/external/affiliation/ExternalAffiliationDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/external/affiliation/ExternalAffiliationDto.java similarity index 91% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/external/affiliation/ExternalAffiliationDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/external/affiliation/ExternalAffiliationDto.java index d8d30894bc..8a0a493503 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/external/affiliation/ExternalAffiliationDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/external/affiliation/ExternalAffiliationDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user.external.affiliation; +package at.ac.tuwien.ifs.dbrepo.core.api.user.external.affiliation; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/internal/UpdateUserPasswordDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/internal/UpdateUserPasswordDto.java similarity index 85% rename from dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/internal/UpdateUserPasswordDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/internal/UpdateUserPasswordDto.java index c89e795bd3..8f1cffdd62 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/internal/UpdateUserPasswordDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/api/user/internal/UpdateUserPasswordDto.java @@ -1,4 +1,4 @@ -package at.tuwien.api.user.internal; +package at.ac.tuwien.ifs.dbrepo.core.api.user.internal; import jakarta.validation.constraints.NotBlank; import lombok.*; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/container/Container.java similarity index 88% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/container/Container.java index 458dcec7eb..7390124cac 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/container/Container.java @@ -1,7 +1,7 @@ -package at.tuwien.entities.container; +package at.ac.tuwien.ifs.dbrepo.core.entity.container; -import at.tuwien.entities.container.image.ContainerImage; -import at.tuwien.entities.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.image.ContainerImage; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.persistence.*; import lombok.*; @@ -84,6 +84,12 @@ public class Container { @Column private String privilegedPassword; + @Column + private String readonlyUsername; + + @Column + private String readonlyPassword; + @PrePersist public void prePersist() { if (this.id == null) { diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/container/image/ContainerImage.java similarity index 95% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/container/image/ContainerImage.java index 336a278d7d..7629976bf1 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/container/image/ContainerImage.java @@ -1,6 +1,6 @@ -package at.tuwien.entities.container.image; +package at.ac.tuwien.ifs.dbrepo.core.entity.container.image; -import at.tuwien.entities.container.Container; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.Container; import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.persistence.*; import lombok.*; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/DataType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/container/image/DataType.java similarity index 97% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/DataType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/container/image/DataType.java index 347ca47e96..502474bee2 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/DataType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/container/image/DataType.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.container.image; +package at.ac.tuwien.ifs.dbrepo.core.entity.container.image; import jakarta.persistence.*; import lombok.*; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/Operator.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/container/image/Operator.java similarity index 94% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/Operator.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/container/image/Operator.java index adeb6dd8ef..5e629d2673 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/Operator.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/container/image/Operator.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.container.image; +package at.ac.tuwien.ifs.dbrepo.core.entity.container.image; import jakarta.persistence.*; import lombok.*; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/AccessType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/AccessType.java similarity index 63% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/AccessType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/AccessType.java index 19a642ff96..c17ba90844 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/AccessType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/AccessType.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.database; +package at.ac.tuwien.ifs.dbrepo.core.entity.database; import lombok.Getter; import lombok.ToString; @@ -8,5 +8,5 @@ import lombok.ToString; public enum AccessType { READ, WRITE_OWN, - WRITE_ALL; + WRITE_ALL } diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/Database.java similarity index 86% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/Database.java index b57f040668..2aefc232a3 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/Database.java @@ -1,9 +1,8 @@ -package at.tuwien.entities.database; +package at.ac.tuwien.ifs.dbrepo.core.entity.database; -import at.tuwien.entities.container.Container; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.entities.user.User; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.Container; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.Identifier; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.persistence.*; import lombok.*; @@ -18,8 +17,6 @@ import java.time.Instant; import java.util.List; import java.util.UUID; -import static jakarta.persistence.GenerationType.IDENTITY; - @Data @Entity @Builder(toBuilder = true) @@ -32,13 +29,13 @@ import static jakarta.persistence.GenerationType.IDENTITY; @UniqueConstraint(columnNames = {"cid", "internalName"}) }) @NamedQueries({ - @NamedQuery(name = "Database.findAllDesc", query = "select distinct d from Database d order by d.id desc"), - @NamedQuery(name = "Database.findAllByInternalNameDesc", query = "select distinct d from Database d where d.internalName = ?1 order by d.id desc"), - @NamedQuery(name = "Database.findAllAtLestReadAccessDesc", query = "select distinct d from Database d where exists(select a.hdbid from DatabaseAccess a where a.huserid = ?1 and a.hdbid = d.id) order by d.id desc"), - @NamedQuery(name = "Database.findAllPublicOrSchemaPublicDesc", query = "select distinct d from Database d where d.isPublic = true or d.isSchemaPublic = true order by d.id desc"), - @NamedQuery(name = "Database.findAllPublicOrSchemaPublicOrReadAccessDesc", query = "select distinct d from Database d where d.isPublic = true or d.isSchemaPublic = true or exists(select a.hdbid from DatabaseAccess a where a.huserid = ?1 and a.hdbid = d.id) order by d.id desc"), - @NamedQuery(name = "Database.findAllPublicOrSchemaPublicOrReadAccessByInternalNameDesc", query = "select distinct d from Database d where (d.isPublic = true or d.isSchemaPublic = true) and d.internalName = ?2 or exists(select a.hdbid from DatabaseAccess a where a.huserid = ?1 and a.hdbid = d.id) order by d.id desc"), - @NamedQuery(name = "Database.findAllPublicOrSchemaPublicByInternalNameDesc", query = "select distinct d from Database d where (d.isPublic = true or d.isSchemaPublic = true) and d.internalName = ?1 order by d.id desc"), + @NamedQuery(name = "Database.findAllDesc", query = "select distinct d from Database d order by d.created desc"), + @NamedQuery(name = "Database.findAllByInternalNameDesc", query = "select distinct d from Database d where d.internalName = ?1 order by d.created desc"), + @NamedQuery(name = "Database.findAllAtLestReadAccessDesc", query = "select distinct d from Database d where exists(select a.hdbid from DatabaseAccess a where a.huserid = ?1 and a.hdbid = d.id) order by d.created desc"), + @NamedQuery(name = "Database.findAllPublicOrSchemaPublicDesc", query = "select distinct d from Database d where d.isPublic = true or d.isSchemaPublic = true order by d.created desc"), + @NamedQuery(name = "Database.findAllPublicOrSchemaPublicOrReadAccessDesc", query = "select distinct d from Database d where d.isPublic = true or d.isSchemaPublic = true or exists(select a.hdbid from DatabaseAccess a where a.huserid = ?1 and a.hdbid = d.id) order by d.created desc"), + @NamedQuery(name = "Database.findAllPublicOrSchemaPublicOrReadAccessByInternalNameDesc", query = "select distinct d from Database d where (d.isPublic = true or d.isSchemaPublic = true) and d.internalName = ?2 or exists(select a.hdbid from DatabaseAccess a where a.huserid = ?1 and a.hdbid = d.id) order by d.created desc"), + @NamedQuery(name = "Database.findAllPublicOrSchemaPublicByInternalNameDesc", query = "select distinct d from Database d where (d.isPublic = true or d.isSchemaPublic = true) and d.internalName = ?1 order by d.created desc"), }) public class Database implements Serializable { @@ -47,6 +44,9 @@ public class Database implements Serializable { @Column(columnDefinition = "VARCHAR(36)") private UUID id; + @Column(name = "grafana_dashboard_uid") + private String dashboardUid; + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "owned_by", columnDefinition = "VARCHAR(36)") private UUID ownedBy; @@ -101,7 +101,7 @@ public class Database implements Serializable { @OrderBy("id DESC") @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL, CascadeType.PERSIST}, mappedBy = "database", orphanRemoval = true) - private List<Table> tables; + private List<at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table> tables; @OrderBy("id DESC") @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL, CascadeType.PERSIST}, mappedBy = "database", orphanRemoval = true) @@ -116,6 +116,9 @@ public class Database implements Serializable { @Column(nullable = false, columnDefinition = "boolean default true") private Boolean isSchemaPublic; + @Column(nullable = false, columnDefinition = "boolean default true") + private Boolean isDashboardEnabled; + @Lob @Basic(fetch = FetchType.LAZY) @Column(columnDefinition = "LONGBLOB") diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/DatabaseAccess.java similarity index 89% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/DatabaseAccess.java index e5f7dd3012..b0e110a676 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/DatabaseAccess.java @@ -1,14 +1,11 @@ -package at.tuwien.entities.database; +package at.ac.tuwien.ifs.dbrepo.core.entity.database; -import at.tuwien.entities.user.User; -import com.fasterxml.jackson.annotation.JsonFormat; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.JdbcTypeCode; -import org.springframework.data.annotation.CreatedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import java.time.Instant; import java.util.UUID; @Data diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccessKey.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/DatabaseAccessKey.java similarity index 80% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccessKey.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/DatabaseAccessKey.java index b6963c290c..a1a55ab60e 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccessKey.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/DatabaseAccessKey.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.database; +package at.ac.tuwien.ifs.dbrepo.core.entity.database; import lombok.EqualsAndHashCode; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/LanguageType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/LanguageType.java similarity index 97% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/LanguageType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/LanguageType.java index 35effb9cb8..b4e6ddb261 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/LanguageType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/LanguageType.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.database; +package at.ac.tuwien.ifs.dbrepo.core.entity.database; import lombok.Getter; @@ -373,7 +373,7 @@ public enum LanguageType { ZU("zu"); - private String name; + private final String name; LanguageType(String name) { this.name = name; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/License.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/License.java similarity index 91% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/License.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/License.java index 4d43a3ba04..ce449e61ca 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/License.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/License.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.database; +package at.ac.tuwien.ifs.dbrepo.core.entity.database; import lombok.*; import org.springframework.data.jpa.domain.support.AuditingEntityListener; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/View.java similarity index 96% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/View.java index 8f84a8f066..d84b75530b 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/View.java @@ -1,7 +1,7 @@ -package at.tuwien.entities.database; +package at.ac.tuwien.ifs.dbrepo.core.entity.database; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.entities.user.User; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.Identifier; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.persistence.*; import lombok.*; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/ViewColumn.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/ViewColumn.java similarity index 92% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/ViewColumn.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/ViewColumn.java index 2b18132e8c..aa2cfcd845 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/ViewColumn.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/ViewColumn.java @@ -1,6 +1,6 @@ -package at.tuwien.entities.database; +package at.ac.tuwien.ifs.dbrepo.core.entity.database; -import at.tuwien.entities.database.table.columns.TableColumnType; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumnType; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.JdbcTypeCode; @@ -8,8 +8,6 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.util.UUID; -import static jakarta.persistence.GenerationType.IDENTITY; - @Data @Entity @Builder(toBuilder = true) diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/Table.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/Table.java similarity index 91% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/Table.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/Table.java index 1e2aa72b92..42faf301ca 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/Table.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/Table.java @@ -1,10 +1,10 @@ -package at.tuwien.entities.database.table; +package at.ac.tuwien.ifs.dbrepo.core.entity.database.table; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.table.columns.TableColumn; -import at.tuwien.entities.database.table.constraints.Constraints; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.entities.user.User; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumn; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.Constraints; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.Identifier; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.persistence.*; import lombok.*; @@ -21,8 +21,6 @@ import java.time.Instant; import java.util.List; import java.util.UUID; -import static jakarta.persistence.GenerationType.IDENTITY; - @Data @Entity @Builder diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/ColumnEnum.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/ColumnEnum.java similarity index 89% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/ColumnEnum.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/ColumnEnum.java index 99002c8129..dddf3fd501 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/ColumnEnum.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/ColumnEnum.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.database.table.columns; +package at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns; import jakarta.persistence.*; import lombok.*; @@ -6,8 +6,6 @@ import org.hibernate.annotations.JdbcTypeCode; import java.util.UUID; -import static jakarta.persistence.GenerationType.IDENTITY; - @Data @Entity @Builder(toBuilder = true) diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/ColumnSet.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/ColumnSet.java similarity index 89% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/ColumnSet.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/ColumnSet.java index 036c0202db..a5925f9c2e 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/ColumnSet.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/ColumnSet.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.database.table.columns; +package at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns; import jakarta.persistence.*; import lombok.*; @@ -6,8 +6,6 @@ import org.hibernate.annotations.JdbcTypeCode; import java.util.UUID; -import static jakarta.persistence.GenerationType.IDENTITY; - @Data @Entity @Builder(toBuilder = true) diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/TableColumn.java similarity index 96% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/TableColumn.java index eefa648dfd..010c919f05 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/TableColumn.java @@ -1,6 +1,6 @@ -package at.tuwien.entities.database.table.columns; +package at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns; -import at.tuwien.entities.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.persistence.*; import lombok.*; @@ -16,8 +16,6 @@ import java.time.Instant; import java.util.List; import java.util.UUID; -import static jakarta.persistence.GenerationType.IDENTITY; - @Data @Entity @Builder(toBuilder = true) diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/TableColumnConcept.java similarity index 95% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/TableColumnConcept.java index edf39d84e3..7b576cf792 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/TableColumnConcept.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.database.table.columns; +package at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns; import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.persistence.*; @@ -11,8 +11,6 @@ import java.time.Instant; import java.util.List; import java.util.UUID; -import static jakarta.persistence.GenerationType.IDENTITY; - @Data @Entity @Builder diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/TableColumnType.java similarity index 85% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/TableColumnType.java index 7f95c476dd..9562193a2d 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/TableColumnType.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.database.table.columns; +package at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns; import lombok.Getter; import lombok.ToString; @@ -35,5 +35,5 @@ public enum TableColumnType { DATETIME, TIMESTAMP, TIME, - YEAR; + YEAR } \ No newline at end of file diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/TableColumnUnit.java similarity index 95% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/TableColumnUnit.java index 9d48062d33..39341261ff 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/columns/TableColumnUnit.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.database.table.columns; +package at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns; import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.persistence.*; @@ -11,8 +11,6 @@ import java.time.Instant; import java.util.List; import java.util.UUID; -import static jakarta.persistence.GenerationType.IDENTITY; - @Data @Entity @Builder diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/Constraints.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/Constraints.java similarity index 71% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/Constraints.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/Constraints.java index 2676eaf3e1..f009c69f7f 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/Constraints.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/Constraints.java @@ -1,8 +1,8 @@ -package at.tuwien.entities.database.table.constraints; +package at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints; -import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKey; -import at.tuwien.entities.database.table.constraints.primaryKey.PrimaryKey; -import at.tuwien.entities.database.table.constraints.unique.Unique; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.foreignKey.ForeignKey; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.primaryKey.PrimaryKey; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.unique.Unique; import lombok.*; import jakarta.persistence.*; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/foreignKey/ForeignKey.java similarity index 92% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/foreignKey/ForeignKey.java index 92271b3232..c7414e3c1d 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/foreignKey/ForeignKey.java @@ -1,6 +1,6 @@ -package at.tuwien.entities.database.table.constraints.foreignKey; +package at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.foreignKey; -import at.tuwien.entities.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.JdbcTypeCode; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/foreignKey/ForeignKeyReference.java similarity index 89% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/foreignKey/ForeignKeyReference.java index 850b25ac5c..8ac36e4fa8 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/foreignKey/ForeignKeyReference.java @@ -1,6 +1,6 @@ -package at.tuwien.entities.database.table.constraints.foreignKey; +package at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.foreignKey; -import at.tuwien.entities.database.table.columns.TableColumn; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumn; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.JdbcTypeCode; @@ -8,8 +8,6 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.util.UUID; -import static jakarta.persistence.GenerationType.IDENTITY; - @Data @Entity @Builder diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ReferenceType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/foreignKey/ReferenceType.java similarity index 67% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ReferenceType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/foreignKey/ReferenceType.java index 88be5c81aa..5e5aacb0bd 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ReferenceType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/foreignKey/ReferenceType.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.database.table.constraints.foreignKey; +package at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.foreignKey; import lombok.Getter; import lombok.ToString; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/primaryKey/PrimaryKey.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/primaryKey/PrimaryKey.java similarity index 85% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/primaryKey/PrimaryKey.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/primaryKey/PrimaryKey.java index 26e0f13299..ddf3abdf9a 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/primaryKey/PrimaryKey.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/primaryKey/PrimaryKey.java @@ -1,7 +1,7 @@ -package at.tuwien.entities.database.table.constraints.primaryKey; +package at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.primaryKey; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.TableColumn; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumn; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.JdbcTypeCode; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/unique/Unique.java similarity index 87% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/unique/Unique.java index e1ad4c4c4d..8dcf9ccbfd 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/database/table/constraints/unique/Unique.java @@ -1,7 +1,7 @@ -package at.tuwien.entities.database.table.constraints.unique; +package at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.unique; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.TableColumn; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumn; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.JdbcTypeCode; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/AffiliationIdentifierSchemeType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/AffiliationIdentifierSchemeType.java similarity index 66% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/AffiliationIdentifierSchemeType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/AffiliationIdentifierSchemeType.java index 0d794ff431..8660ce1936 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/AffiliationIdentifierSchemeType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/AffiliationIdentifierSchemeType.java @@ -1,5 +1,5 @@ -package at.tuwien.entities.identifier; +package at.ac.tuwien.ifs.dbrepo.core.entity.identifier; import lombok.Getter; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Creator.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/Creator.java similarity index 96% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Creator.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/Creator.java index cdbcf79777..8a2bcf25e2 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Creator.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/Creator.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.identifier; +package at.ac.tuwien.ifs.dbrepo.core.entity.identifier; import jakarta.persistence.*; import lombok.*; @@ -7,8 +7,6 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.util.UUID; -import static jakarta.persistence.GenerationType.IDENTITY; - @Data @Entity @Builder diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/DescriptionType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/DescriptionType.java similarity index 82% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/DescriptionType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/DescriptionType.java index 1d9ab52d78..ef85f04e72 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/DescriptionType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/DescriptionType.java @@ -1,5 +1,5 @@ -package at.tuwien.entities.identifier; +package at.ac.tuwien.ifs.dbrepo.core.entity.identifier; import lombok.Getter; @@ -18,7 +18,7 @@ public enum DescriptionType { OTHER("Other"); - private String name; + private final String name; DescriptionType(String name) { this.name = name; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/Identifier.java similarity index 95% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/Identifier.java index 43dbb849e3..04471509c6 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/Identifier.java @@ -1,9 +1,9 @@ -package at.tuwien.entities.identifier; +package at.ac.tuwien.ifs.dbrepo.core.entity.identifier; -import at.tuwien.entities.database.Database; -import at.tuwien.entities.database.LanguageType; -import at.tuwien.entities.database.License; -import at.tuwien.entities.user.User; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.LanguageType; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.License; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.persistence.*; import lombok.*; @@ -17,8 +17,6 @@ import java.time.Instant; import java.util.List; import java.util.UUID; -import static jakarta.persistence.GenerationType.IDENTITY; - @Data @Entity @Builder(toBuilder = true) diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierDescription.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierDescription.java similarity index 93% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierDescription.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierDescription.java index 32adddccfc..ab73de406e 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierDescription.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierDescription.java @@ -1,6 +1,6 @@ -package at.tuwien.entities.identifier; +package at.ac.tuwien.ifs.dbrepo.core.entity.identifier; -import at.tuwien.entities.database.LanguageType; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.LanguageType; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.JdbcTypeCode; @@ -9,8 +9,6 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.io.Serializable; import java.util.UUID; -import static jakarta.persistence.GenerationType.IDENTITY; - @Data @Entity @Builder diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunder.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierFunder.java similarity index 93% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunder.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierFunder.java index 5b69b2e8f7..eb3c21e617 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunder.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierFunder.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.identifier; +package at.ac.tuwien.ifs.dbrepo.core.entity.identifier; import jakarta.persistence.*; import lombok.*; @@ -8,8 +8,6 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.io.Serializable; import java.util.UUID; -import static jakarta.persistence.GenerationType.IDENTITY; - @Data @Entity @Builder diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunderType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierFunderType.java similarity index 64% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunderType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierFunderType.java index ea538dcbfb..d805d7e7a2 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierFunderType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierFunderType.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.identifier; +package at.ac.tuwien.ifs.dbrepo.core.entity.identifier; public enum IdentifierFunderType { CROSSREF_FUNDER_ID, diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierStatusType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierStatusType.java similarity index 53% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierStatusType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierStatusType.java index 6dd545a732..242a41e4a7 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierStatusType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierStatusType.java @@ -1,9 +1,9 @@ -package at.tuwien.entities.identifier; +package at.ac.tuwien.ifs.dbrepo.core.entity.identifier; import lombok.Getter; @Getter public enum IdentifierStatusType { DRAFT, - PUBLISHED; + PUBLISHED } diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierTitle.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierTitle.java similarity index 93% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierTitle.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierTitle.java index 769ff12a67..8dbbdac0a9 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierTitle.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierTitle.java @@ -1,6 +1,6 @@ -package at.tuwien.entities.identifier; +package at.ac.tuwien.ifs.dbrepo.core.entity.identifier; -import at.tuwien.entities.database.LanguageType; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.LanguageType; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.JdbcTypeCode; @@ -9,8 +9,6 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.io.Serializable; import java.util.UUID; -import static jakarta.persistence.GenerationType.IDENTITY; - @Data @Entity @Builder diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierType.java similarity index 60% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierType.java index 51e2f01ef6..85fb127d98 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/IdentifierType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/IdentifierType.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.identifier; +package at.ac.tuwien.ifs.dbrepo.core.entity.identifier; import lombok.Getter; @@ -7,5 +7,5 @@ public enum IdentifierType { DATABASE, SUBSET, TABLE, - VIEW; + VIEW } diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/NameIdentifierSchemeType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/NameIdentifierSchemeType.java similarity index 66% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/NameIdentifierSchemeType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/NameIdentifierSchemeType.java index 6a7eb73a12..645ec69d89 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/NameIdentifierSchemeType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/NameIdentifierSchemeType.java @@ -1,5 +1,5 @@ -package at.tuwien.entities.identifier; +package at.ac.tuwien.ifs.dbrepo.core.entity.identifier; import lombok.Getter; diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/NameType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/NameType.java new file mode 100644 index 0000000000..ce2f1585e4 --- /dev/null +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/NameType.java @@ -0,0 +1,9 @@ +package at.ac.tuwien.ifs.dbrepo.core.entity.identifier; + +import lombok.Getter; + +@Getter +public enum NameType { + PERSONAL, + ORGANIZATIONAL +} diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/RelatedIdentifier.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/RelatedIdentifier.java similarity index 97% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/RelatedIdentifier.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/RelatedIdentifier.java index 24ac7adb1f..e0eb28d11b 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/RelatedIdentifier.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/RelatedIdentifier.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.identifier; +package at.ac.tuwien.ifs.dbrepo.core.entity.identifier; import jakarta.persistence.*; import lombok.*; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/RelatedType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/RelatedType.java similarity index 85% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/RelatedType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/RelatedType.java index 34f98ef591..7310ff455b 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/RelatedType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/RelatedType.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.identifier; +package at.ac.tuwien.ifs.dbrepo.core.entity.identifier; public enum RelatedType { @@ -38,7 +38,7 @@ public enum RelatedType { W3ID("w3id"); - private String name; + private final String name; RelatedType(String name) { this.name = name; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/RelationType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/RelationType.java similarity index 94% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/RelationType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/RelationType.java index 65fc23fddb..94bebb0117 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/RelationType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/RelationType.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.identifier; +package at.ac.tuwien.ifs.dbrepo.core.entity.identifier; public enum RelationType { @@ -70,7 +70,7 @@ public enum RelationType { OBSOLETES("Obsoletes"); - private String name; + private final String name; RelationType(String name) { this.name = name; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/TitleType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/TitleType.java similarity index 79% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/TitleType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/TitleType.java index 5dce16f771..a4b5f36b67 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/TitleType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/TitleType.java @@ -1,5 +1,5 @@ -package at.tuwien.entities.identifier; +package at.ac.tuwien.ifs.dbrepo.core.entity.identifier; import lombok.Getter; @@ -14,7 +14,7 @@ public enum TitleType { OTHER("Other"); - private String name; + private final String name; TitleType(String name) { this.name = name; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/maintenance/BannerMessage.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/maintenance/BannerMessage.java similarity index 93% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/maintenance/BannerMessage.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/maintenance/BannerMessage.java index 8a5f2d76a3..ef6f3533e9 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/maintenance/BannerMessage.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/maintenance/BannerMessage.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.maintenance; +package at.ac.tuwien.ifs.dbrepo.core.entity.maintenance; import jakarta.persistence.*; import lombok.*; @@ -8,8 +8,6 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.time.Instant; import java.util.UUID; -import static jakarta.persistence.GenerationType.IDENTITY; - @Data @Entity @Builder diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/maintenance/BannerMessageType.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/maintenance/BannerMessageType.java similarity index 65% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/maintenance/BannerMessageType.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/maintenance/BannerMessageType.java index ca83865741..34cf2bc6d4 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/maintenance/BannerMessageType.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/maintenance/BannerMessageType.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.maintenance; +package at.ac.tuwien.ifs.dbrepo.core.entity.maintenance; import lombok.Getter; import lombok.ToString; @@ -8,5 +8,5 @@ import lombok.ToString; public enum BannerMessageType { WARNING, ERROR, - INFO; + INFO } \ No newline at end of file diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/semantics/Ontology.java similarity index 94% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/semantics/Ontology.java index 664b284c3d..8cf3250a04 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/semantics/Ontology.java @@ -1,4 +1,4 @@ -package at.tuwien.entities.semantics; +package at.ac.tuwien.ifs.dbrepo.core.entity.semantics; import jakarta.persistence.*; import lombok.*; @@ -10,8 +10,6 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.time.Instant; import java.util.UUID; -import static jakarta.persistence.GenerationType.IDENTITY; - @Data @Entity @Builder diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/User.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/user/User.java similarity index 93% rename from dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/User.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/user/User.java index 44d36e5e03..f3a65f1de5 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/User.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/user/User.java @@ -1,6 +1,6 @@ -package at.tuwien.entities.user; +package at.ac.tuwien.ifs.dbrepo.core.entity.user; -import at.tuwien.entities.database.DatabaseAccess; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.DatabaseAccess; import jakarta.persistence.*; import lombok.*; import lombok.extern.log4j.Log4j2; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AccessNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/AccessNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AccessNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/AccessNotFoundException.java index d308361ae1..9cac5ca8f8 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AccessNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/AccessNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AccountNotSetupException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/AccountNotSetupException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AccountNotSetupException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/AccountNotSetupException.java index 395e63d423..ed00129ca9 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AccountNotSetupException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/AccountNotSetupException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AnalyseServiceException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/AnalyseServiceException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AnalyseServiceException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/AnalyseServiceException.java index 44cd0d3dc8..d86344bc86 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AnalyseServiceException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/AnalyseServiceException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AuthServiceConnectionException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/AuthServiceConnectionException.java similarity index 92% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AuthServiceConnectionException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/AuthServiceConnectionException.java index 08cb54f9de..abca69a27b 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AuthServiceConnectionException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/AuthServiceConnectionException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AuthServiceException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/AuthServiceException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AuthServiceException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/AuthServiceException.java index de43ce1cbe..de5969c4a8 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/AuthServiceException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/AuthServiceException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/BrokerServiceConnectionException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/BrokerServiceConnectionException.java similarity index 92% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/BrokerServiceConnectionException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/BrokerServiceConnectionException.java index 6efa16fa87..7a5f17d0ed 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/BrokerServiceConnectionException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/BrokerServiceConnectionException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/BrokerServiceException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/BrokerServiceException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/BrokerServiceException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/BrokerServiceException.java index 86201c5d69..c0ca429d66 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/BrokerServiceException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/BrokerServiceException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ConceptNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ConceptNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ConceptNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ConceptNotFoundException.java index 33e093ae5a..6be6c9dd8f 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ConceptNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ConceptNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerAlreadyExistsException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ContainerAlreadyExistsException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerAlreadyExistsException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ContainerAlreadyExistsException.java index f27ea0aa19..348bcf51f3 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerAlreadyExistsException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ContainerAlreadyExistsException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ContainerNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ContainerNotFoundException.java index 0d17faafab..a81b036e26 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ContainerNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerQuotaException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ContainerQuotaException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerQuotaException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ContainerQuotaException.java index 6679775f00..9d01a33607 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerQuotaException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ContainerQuotaException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/CredentialsInvalidException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/CredentialsInvalidException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/CredentialsInvalidException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/CredentialsInvalidException.java index 984c70f485..afe130463f 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/CredentialsInvalidException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/CredentialsInvalidException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DashboardServiceConnectionException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DashboardServiceConnectionException.java new file mode 100644 index 0000000000..cbac75cfff --- /dev/null +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DashboardServiceConnectionException.java @@ -0,0 +1,21 @@ +package at.ac.tuwien.ifs.dbrepo.core.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.BAD_GATEWAY, reason = "error.dashboard.connection") +public class DashboardServiceConnectionException extends Exception { + + public DashboardServiceConnectionException(String msg) { + super(msg); + } + + public DashboardServiceConnectionException(String msg, Throwable thr) { + super(msg + ": " + thr.getLocalizedMessage(), thr); + } + + public DashboardServiceConnectionException(Throwable thr) { + super(thr); + } + +} diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DashboardServiceException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DashboardServiceException.java new file mode 100644 index 0000000000..8ab1d1ef23 --- /dev/null +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DashboardServiceException.java @@ -0,0 +1,21 @@ +package at.ac.tuwien.ifs.dbrepo.core.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.SERVICE_UNAVAILABLE, reason = "error.dashboard.invalid") +public class DashboardServiceException extends Exception { + + public DashboardServiceException(String message) { + super(message); + } + + public DashboardServiceException(String message, Throwable thr) { + super(message, thr); + } + + public DashboardServiceException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DataServiceConnectionException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DataServiceConnectionException.java similarity index 92% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DataServiceConnectionException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DataServiceConnectionException.java index 0125a781ad..156d8be729 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DataServiceConnectionException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DataServiceConnectionException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DataServiceException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DataServiceException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DataServiceException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DataServiceException.java index f76e662a65..66ea9a4e9b 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DataServiceException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DataServiceException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseMalformedException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DatabaseMalformedException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseMalformedException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DatabaseMalformedException.java index 4bdc362256..7973419705 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseMalformedException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DatabaseMalformedException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DatabaseNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DatabaseNotFoundException.java index c50349f33b..41cdcc8d4b 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DatabaseNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseUnavailableException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DatabaseUnavailableException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseUnavailableException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DatabaseUnavailableException.java index 12c13d0754..1f40dd0832 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DatabaseUnavailableException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DatabaseUnavailableException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DoiNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DoiNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DoiNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DoiNotFoundException.java index 3b8e1732cc..790c43f28d 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/DoiNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/DoiNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/EmailExistsException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/EmailExistsException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/EmailExistsException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/EmailExistsException.java index 4ce6c9b0ba..c82f6438bd 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/EmailExistsException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/EmailExistsException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ExchangeNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ExchangeNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ExchangeNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ExchangeNotFoundException.java index 251f09081e..f6e32e047a 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ExchangeNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ExchangeNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ExternalServiceException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ExternalServiceException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ExternalServiceException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ExternalServiceException.java index d5f399c402..0866ee86d1 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ExternalServiceException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ExternalServiceException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/FilterBadRequestException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/FilterBadRequestException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/FilterBadRequestException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/FilterBadRequestException.java index 88689409ae..0c584430a6 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/FilterBadRequestException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/FilterBadRequestException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/FormatNotAvailableException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/FormatNotAvailableException.java similarity index 90% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/FormatNotAvailableException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/FormatNotAvailableException.java index 2681e8d442..f977c087cb 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/FormatNotAvailableException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/FormatNotAvailableException.java @@ -1,10 +1,8 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; -import java.io.IOException; - @ResponseStatus(code = HttpStatus.NOT_ACCEPTABLE, reason = "error.identifier.format") public class FormatNotAvailableException extends Exception { diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/IdentifierNotFoundException.java similarity index 92% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/IdentifierNotFoundException.java index dee6a00035..a17825aed3 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/IdentifierNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierNotSupportedException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/IdentifierNotSupportedException.java similarity index 92% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierNotSupportedException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/IdentifierNotSupportedException.java index 23b26ac6d6..07d090a2a3 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/IdentifierNotSupportedException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/IdentifierNotSupportedException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageAlreadyExistsException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ImageAlreadyExistsException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageAlreadyExistsException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ImageAlreadyExistsException.java index 2db757ed21..98e854ca18 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageAlreadyExistsException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ImageAlreadyExistsException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageInvalidException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ImageInvalidException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageInvalidException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ImageInvalidException.java index 401b587aed..4b4eeef07c 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageInvalidException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ImageInvalidException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ImageNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ImageNotFoundException.java index a0235cc753..4e0bcf905c 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ImageNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ImageNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/LicenseNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/LicenseNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/LicenseNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/LicenseNotFoundException.java index fec3ad4128..1b4ad4f10e 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/LicenseNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/LicenseNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/MalformedException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/MalformedException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/MalformedException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/MalformedException.java index 974c2dadd6..f358709de7 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/MalformedException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/MalformedException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/MessageNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/MessageNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/MessageNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/MessageNotFoundException.java index 9090590551..53294e85d2 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/MessageNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/MessageNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/MetadataServiceConnectionException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/MetadataServiceConnectionException.java similarity index 92% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/MetadataServiceConnectionException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/MetadataServiceConnectionException.java index 329de6ffc4..10599ab339 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/MetadataServiceConnectionException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/MetadataServiceConnectionException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/MetadataServiceException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/MetadataServiceException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/MetadataServiceException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/MetadataServiceException.java index a6784d6dd0..ec86fd55f2 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/MetadataServiceException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/MetadataServiceException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/NotAllowedException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/NotAllowedException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/NotAllowedException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/NotAllowedException.java index 52a2867b01..79332fe74a 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/NotAllowedException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/NotAllowedException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/OntologyNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/OntologyNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/OntologyNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/OntologyNotFoundException.java index 5f15403d67..283219e780 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/OntologyNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/OntologyNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/OrcidNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/OrcidNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/OrcidNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/OrcidNotFoundException.java index cf1ad7c067..2ad3560a8e 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/OrcidNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/OrcidNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/PaginationException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/PaginationException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/PaginationException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/PaginationException.java index 5d71d0c404..4eae0a8bc6 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/PaginationException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/PaginationException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryMalformedException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryMalformedException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryMalformedException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryMalformedException.java index 0782bc3269..571ae5e313 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryMalformedException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryMalformedException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryNotFoundException.java index 631fb1f0d8..0bdba4634e 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryNotSupportedException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryNotSupportedException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryNotSupportedException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryNotSupportedException.java index e5894f0fdd..6a5df4f9e1 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryNotSupportedException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryNotSupportedException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryStoreCreateException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryStoreCreateException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryStoreCreateException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryStoreCreateException.java index 27ddb85e2c..d69c7757c5 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryStoreCreateException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryStoreCreateException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryStoreGCException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryStoreGCException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryStoreGCException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryStoreGCException.java index 00302c55ea..d4f40910bc 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryStoreGCException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryStoreGCException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryStoreInsertException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryStoreInsertException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryStoreInsertException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryStoreInsertException.java index 564383c844..0b7713d2ed 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryStoreInsertException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryStoreInsertException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryStorePersistException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryStorePersistException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryStorePersistException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryStorePersistException.java index 5b17442a3a..4cf73af90b 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueryStorePersistException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueryStorePersistException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueueNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueueNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueueNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueueNotFoundException.java index d06eca7438..69e1550046 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/QueueNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/QueueNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/RemoteUnavailableException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/RemoteUnavailableException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/RemoteUnavailableException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/RemoteUnavailableException.java index 6c2b14bb9b..0ab1bb158d 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/RemoteUnavailableException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/RemoteUnavailableException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/RorNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/RorNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/RorNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/RorNotFoundException.java index afee080b5e..12a9e3ce06 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/RorNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/RorNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceConnectionException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/SearchServiceConnectionException.java similarity index 92% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceConnectionException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/SearchServiceConnectionException.java index d68185102a..ee6b4ab5ba 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceConnectionException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/SearchServiceConnectionException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/SearchServiceException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/SearchServiceException.java index aef3ae7f7c..a2ca63f200 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/SearchServiceException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SemanticEntityNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/SemanticEntityNotFoundException.java similarity index 92% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SemanticEntityNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/SemanticEntityNotFoundException.java index 83c2f07f57..78540ac51c 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SemanticEntityNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/SemanticEntityNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SortException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/SortException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SortException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/SortException.java index f70f0fbef9..bf9f1dd2b7 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SortException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/SortException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/StorageNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/StorageNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/StorageNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/StorageNotFoundException.java index bbb780ea91..2bef9e7a75 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/StorageNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/StorageNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/StorageUnavailableException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/StorageUnavailableException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/StorageUnavailableException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/StorageUnavailableException.java index 08e49ada9e..813cbd58ad 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/StorageUnavailableException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/StorageUnavailableException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableExistsException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/TableExistsException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableExistsException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/TableExistsException.java index 252c1b0fa6..7eca5f85e0 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableExistsException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/TableExistsException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableMalformedException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/TableMalformedException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableMalformedException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/TableMalformedException.java index 0878f36070..0440a939bf 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableMalformedException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/TableMalformedException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/TableNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/TableNotFoundException.java index 5380be1e60..e40bf35f76 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/TableNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableSchemaException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/TableSchemaException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableSchemaException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/TableSchemaException.java index 539e39897e..47d0456aa5 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/TableSchemaException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/TableSchemaException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UnitNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/UnitNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UnitNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/UnitNotFoundException.java index 1cc0308755..b8204c40e7 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UnitNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/UnitNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UriMalformedException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/UriMalformedException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UriMalformedException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/UriMalformedException.java index 05d10c1323..fa4317280a 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UriMalformedException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/UriMalformedException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UserExistsException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/UserExistsException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UserExistsException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/UserExistsException.java index 712e79fa26..e2640b3039 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UserExistsException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/UserExistsException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UserNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/UserNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UserNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/UserNotFoundException.java index 1aa6adafec..47c78d0b08 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/UserNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/UserNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ViewExistsException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ViewExistsException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ViewExistsException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ViewExistsException.java index 265974db55..c45e0022f0 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ViewExistsException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ViewExistsException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ViewMalformedException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ViewMalformedException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ViewMalformedException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ViewMalformedException.java index 0f8d5bef55..e8158644fa 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ViewMalformedException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ViewMalformedException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ViewNotFoundException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ViewNotFoundException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ViewNotFoundException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ViewNotFoundException.java index 2c8cf52e0e..fea56d5edd 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ViewNotFoundException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ViewNotFoundException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ViewSchemaException.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ViewSchemaException.java similarity index 91% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ViewSchemaException.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ViewSchemaException.java index 4761b6e964..035842aab7 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ViewSchemaException.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/exception/ViewSchemaException.java @@ -1,4 +1,4 @@ -package at.tuwien.exception; +package at.ac.tuwien.ifs.dbrepo.core.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/MetadataMapper.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/mapper/MetadataMapper.java similarity index 79% rename from dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/MetadataMapper.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/mapper/MetadataMapper.java index 7428478924..e6c354e35e 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/MetadataMapper.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/mapper/MetadataMapper.java @@ -1,79 +1,87 @@ -package at.tuwien.mapper; - -import at.tuwien.api.container.ContainerBriefDto; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.container.CreateContainerDto; -import at.tuwien.api.container.image.DataTypeDto; -import at.tuwien.api.container.image.ImageBriefDto; -import at.tuwien.api.container.image.ImageCreateDto; -import at.tuwien.api.container.image.ImageDto; -import at.tuwien.api.crossref.CrossrefDto; -import at.tuwien.api.database.*; -import at.tuwien.api.database.table.TableBriefDto; -import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.columns.ColumnBriefDto; -import at.tuwien.api.database.table.columns.ColumnDto; -import at.tuwien.api.database.table.columns.CreateTableColumnDto; -import at.tuwien.api.database.table.columns.concepts.ConceptDto; -import at.tuwien.api.database.table.columns.concepts.ConceptSaveDto; -import at.tuwien.api.database.table.columns.concepts.UnitDto; -import at.tuwien.api.database.table.columns.concepts.UnitSaveDto; -import at.tuwien.api.database.table.constraints.ConstraintsDto; -import at.tuwien.api.database.table.constraints.CreateTableConstraintsDto; -import at.tuwien.api.database.table.constraints.foreign.ForeignKeyBriefDto; -import at.tuwien.api.database.table.constraints.foreign.ForeignKeyDto; -import at.tuwien.api.database.table.constraints.foreign.ForeignKeyReferenceDto; -import at.tuwien.api.database.table.constraints.foreign.ReferenceTypeDto; -import at.tuwien.api.database.table.constraints.primary.PrimaryKeyDto; -import at.tuwien.api.database.table.constraints.unique.UniqueDto; -import at.tuwien.api.datacite.doi.*; -import at.tuwien.api.identifier.*; -import at.tuwien.api.identifier.ld.LdCreatorDto; -import at.tuwien.api.identifier.ld.LdDatasetDto; -import at.tuwien.api.keycloak.TokenDto; -import at.tuwien.api.keycloak.UserCreateDto; -import at.tuwien.api.maintenance.BannerMessageBriefDto; -import at.tuwien.api.maintenance.BannerMessageCreateDto; -import at.tuwien.api.maintenance.BannerMessageDto; -import at.tuwien.api.maintenance.BannerMessageTypeDto; -import at.tuwien.api.orcid.OrcidDto; -import at.tuwien.api.orcid.activities.employments.affiliation.OrcidAffiliationGroupDto; -import at.tuwien.api.orcid.activities.employments.affiliation.group.OrcidEmploymentSummaryDto; -import at.tuwien.api.orcid.activities.employments.affiliation.group.summary.organization.disambiguated.OrcidDisambiguatedDto; -import at.tuwien.api.orcid.activities.employments.affiliation.group.summary.organization.disambiguated.OrcidDisambiguatedSourceTypeDto; -import at.tuwien.api.ror.RorDto; -import at.tuwien.api.semantics.EntityDto; -import at.tuwien.api.semantics.OntologyBriefDto; -import at.tuwien.api.semantics.OntologyCreateDto; -import at.tuwien.api.semantics.OntologyDto; -import at.tuwien.api.user.UserBriefDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.api.user.UserUpdateDto; -import at.tuwien.api.user.external.ExternalMetadataDto; -import at.tuwien.api.user.external.ExternalResultType; -import at.tuwien.api.user.external.affiliation.ExternalAffiliationDto; -import at.tuwien.entities.container.Container; -import at.tuwien.entities.container.image.ContainerImage; -import at.tuwien.entities.container.image.DataType; -import at.tuwien.entities.database.*; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.TableColumn; -import at.tuwien.entities.database.table.columns.TableColumnConcept; -import at.tuwien.entities.database.table.columns.TableColumnUnit; -import at.tuwien.entities.database.table.constraints.Constraints; -import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKey; -import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKeyReference; -import at.tuwien.entities.database.table.constraints.foreignKey.ReferenceType; -import at.tuwien.entities.database.table.constraints.primaryKey.PrimaryKey; -import at.tuwien.entities.database.table.constraints.unique.Unique; -import at.tuwien.entities.identifier.*; -import at.tuwien.entities.maintenance.BannerMessage; -import at.tuwien.entities.maintenance.BannerMessageType; -import at.tuwien.entities.semantics.Ontology; -import at.tuwien.entities.user.User; +package at.ac.tuwien.ifs.dbrepo.core.mapper; + +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.CreateContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.DataTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.ImageDto; +import at.ac.tuwien.ifs.dbrepo.core.api.crossref.CrossRefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.ColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.CreateTableColumnDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.ConstraintsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.CreateTableConstraintsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign.ForeignKeyBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign.ForeignKeyDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign.ForeignKeyReferenceDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign.ReferenceTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.primary.PrimaryKeyDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.unique.UniqueDto; +import at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi.*; +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.CreateDashboardDto; +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.PermissionTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.*; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.ld.LdCreatorDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.ld.LdDatasetDto; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.TokenDto; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.UserCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageDto; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.OrcidDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.OrcidActivitiesSummaryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.OrcidEmploymentsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.OrcidAffiliationGroupDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.group.OrcidEmploymentSummaryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.group.summary.OrcidSummaryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.group.summary.organization.OrcidOrganizationDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.group.summary.organization.disambiguated.OrcidDisambiguatedDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.group.summary.organization.disambiguated.OrcidDisambiguatedSourceTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.person.OrcidPersonDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.person.name.OrcidNameDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.person.name.OrcidValueDto; +import at.ac.tuwien.ifs.dbrepo.core.api.ror.RorDto; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.EntityDto; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.OntologyBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.OntologyCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.OntologyDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.external.ExternalMetadataDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.external.ExternalResultType; +import at.ac.tuwien.ifs.dbrepo.core.api.user.external.affiliation.ExternalAffiliationDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.Container; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.image.ContainerImage; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.image.DataType; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.*; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumn; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumnConcept; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumnUnit; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.Constraints; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.foreignKey.ForeignKey; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.foreignKey.ForeignKeyReference; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.foreignKey.ReferenceType; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.primaryKey.PrimaryKey; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.unique.Unique; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.*; +import at.ac.tuwien.ifs.dbrepo.core.entity.maintenance.BannerMessage; +import at.ac.tuwien.ifs.dbrepo.core.entity.maintenance.BannerMessageType; +import at.ac.tuwien.ifs.dbrepo.core.entity.semantics.Ontology; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; import org.keycloak.representations.AccessTokenResponse; import org.keycloak.representations.idm.UserRepresentation; import org.mapstruct.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.text.Normalizer; import java.time.Instant; @@ -86,7 +94,7 @@ import java.util.stream.Collectors; @Mapper(componentModel = "spring", imports = {LinkedList.class, ExternalResultType.class}) public interface MetadataMapper { - org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(MetadataMapper.class); + Logger log = LoggerFactory.getLogger(MetadataMapper.class); @Mappings({ @Mapping(target = "dMin", source = "DMin"), @@ -96,6 +104,12 @@ public interface MetadataMapper { }) DataTypeDto dataTypeToDataTypeDto(DataType data); + @Mappings({ + @Mapping(target = "databaseName", source = "internalName"), + @Mapping(target = "ownerUsername", source = "owner.username") + }) + CreateDashboardDto databaseToCreateDashboardDto(Database database); + @Mappings({ @Mapping(target = "id", ignore = true), /* id attribute is ignored by the library anyway, just making it explicit */ @Mapping(target = "attributes", ignore = true) @@ -267,6 +281,38 @@ public interface MetadataMapper { }) ExternalMetadataDto orcidDtoToExternalMetadataDto(OrcidDto data); + default OrcidDto userToOrcidDto(User data) { + return OrcidDto.builder() + .person(OrcidPersonDto.builder() + .name(OrcidNameDto.builder() + .givenNames(OrcidValueDto.builder() + .value(data.getFirstname()) + .build()) + .familyName(OrcidValueDto.builder() + .value(data.getLastname()) + .build()) + .build()) + .build()) + .activitiesSummary(OrcidActivitiesSummaryDto.builder() + .employments(OrcidEmploymentsDto.builder() + .affiliationGroup(new OrcidAffiliationGroupDto[]{ + OrcidAffiliationGroupDto.builder() + .summaries(new OrcidEmploymentSummaryDto[]{ + OrcidEmploymentSummaryDto.builder() + .employmentSummary(OrcidSummaryDto.builder() + .organization(OrcidOrganizationDto.builder() + .name(data.getAffiliation()) + .build()) + .build()) + .build() + }) + .build() + }) + .build()) + .build()) + .build(); + } + @Mappings({ @Mapping(target = "organizationName", source = "employmentSummary.organization.name"), @Mapping(target = "ringgoldId", expression = "java(disambiguatedOrganizationToRinggoldId(data.getEmploymentSummary().getOrganization().getDisambiguatedOrganization()))"), @@ -289,6 +335,16 @@ public interface MetadataMapper { return null; } + default PermissionTypeDto accessTypeDtoToPermissionTypeDto(AccessTypeDto data) { + if (data == null) { + return PermissionTypeDto.NONE; + } + return switch (data) { + case READ -> PermissionTypeDto.VIEW; + case WRITE_OWN, WRITE_ALL -> PermissionTypeDto.EDITOR; + }; + } + default ExternalMetadataDto rorDtoToExternalMetadataDto(RorDto data) { return ExternalMetadataDto.builder() .affiliations(new ExternalAffiliationDto[]{ @@ -299,7 +355,7 @@ public interface MetadataMapper { .build(); } - default ExternalMetadataDto crossrefDtoToExternalMetadataDto(CrossrefDto data) { + default ExternalMetadataDto crossrefDtoToExternalMetadataDto(CrossRefDto data) { return ExternalMetadataDto.builder() .affiliations(new ExternalAffiliationDto[]{ ExternalAffiliationDto.builder() @@ -336,6 +392,9 @@ public interface MetadataMapper { case SUBSET -> links.setData("/api/database/" + data.getDatabase().getId() + "/subset/" + data.getQueryId() + "/data"); } + if (data.getDatabase().getIsDashboardEnabled()) { + links.setDashboardHtml("/d/" + data.getDatabase().getDashboardUid()); + } return links; } @@ -400,12 +459,18 @@ public interface MetadataMapper { .build(); } - Identifier identifierCreateDtoToIdentifier(CreateIdentifierDto data); + Identifier createIdentifierDtoToIdentifier(CreateIdentifierDto data); - Identifier identifierUpdateDtoToIdentifier(IdentifierSaveDto data); + Identifier identifierSaveDtoToIdentifier(IdentifierSaveDto data); + + IdentifierSaveDto identifierToIdentifierSaveDto(Identifier data); + + CreateIdentifierDto identifierToCreateIdentifierDto(Identifier data); License licenseDtoToLicense(LicenseDto data); + ImageCreateDto containerImageToImageCreateDto(ContainerImage data); + IdentifierTitle identifierCreateTitleDtoToIdentifierTitle(SaveIdentifierTitleDto data); IdentifierDescription identifierCreateDescriptionDtoToIdentifierDescription(SaveIdentifierDescriptionDto data); @@ -512,8 +577,12 @@ public interface MetadataMapper { ConceptDto tableColumnConceptToConceptDto(TableColumnConcept data); + ConceptBriefDto tableColumnConceptToConceptBriefDto(TableColumnConcept data); + UnitDto tableColumnUnitToUnitDto(TableColumnUnit data); + UnitBriefDto tableColumnUnitToUnitBriefDto(TableColumnUnit data); + TableColumnUnit unitSaveDtoToTableColumnUnit(UnitSaveDto data); TableColumnUnit entityDtoToTableColumnUnit(EntityDto data); @@ -588,6 +657,7 @@ public interface MetadataMapper { .identifiers(new LinkedList<>()) .columns(new LinkedList<>()) .constraints(constraintsToConstraintsDto(data.getConstraints())) + .created(data.getCreated()) .build(); if (data.getIdentifiers() != null) { table.setIdentifiers(new LinkedList<>(data.getIdentifiers() @@ -866,10 +936,8 @@ public interface MetadataMapper { String nowhitespace = WHITESPACE.matcher(data).replaceAll("_"); String normalized = Normalizer.normalize(nowhitespace, Normalizer.Form.NFD); String slug = NONLATIN.matcher(normalized).replaceAll("_"); - final String name = slug.toLowerCase(Locale.ENGLISH) + return slug.toLowerCase(Locale.ENGLISH) .replaceAll("-", "_"); - log.debug("mapping name {} to internal name {}", data, name); - return name; } LanguageType languageTypeDtoToLanguageType(LanguageTypeDto data); diff --git a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/BaseTest.java similarity index 69% rename from dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/BaseTest.java index 490c902295..5209b40ce4 100644 --- a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/BaseTest.java @@ -1,73 +1,76 @@ -package at.tuwien.test; - -import at.tuwien.ExportResourceDto; -import at.tuwien.api.amqp.CreateVirtualHostDto; -import at.tuwien.api.amqp.ExchangeDto; -import at.tuwien.api.amqp.GrantVirtualHostPermissionsDto; -import at.tuwien.api.amqp.QueueDto; -import at.tuwien.api.auth.CreateUserDto; -import at.tuwien.api.container.ContainerBriefDto; -import at.tuwien.api.container.ContainerDto; -import at.tuwien.api.container.image.*; -import at.tuwien.api.database.*; -import at.tuwien.api.database.query.*; -import at.tuwien.api.database.table.*; -import at.tuwien.api.database.table.columns.*; -import at.tuwien.api.database.table.columns.concepts.*; -import at.tuwien.api.database.table.constraints.ConstraintsDto; -import at.tuwien.api.database.table.constraints.CreateTableConstraintsDto; -import at.tuwien.api.database.table.constraints.foreign.*; -import at.tuwien.api.database.table.constraints.primary.PrimaryKeyDto; -import at.tuwien.api.database.table.constraints.unique.UniqueDto; -import at.tuwien.api.datacite.DataCiteBody; -import at.tuwien.api.datacite.DataCiteData; -import at.tuwien.api.datacite.doi.DataCiteDoi; -import at.tuwien.api.identifier.*; -import at.tuwien.api.keycloak.*; -import at.tuwien.api.maintenance.BannerMessageCreateDto; -import at.tuwien.api.maintenance.BannerMessageDto; -import at.tuwien.api.maintenance.BannerMessageTypeDto; -import at.tuwien.api.maintenance.BannerMessageUpdateDto; -import at.tuwien.api.orcid.OrcidDto; -import at.tuwien.api.orcid.activities.OrcidActivitiesSummaryDto; -import at.tuwien.api.orcid.activities.employments.OrcidEmploymentsDto; -import at.tuwien.api.orcid.activities.employments.affiliation.OrcidAffiliationGroupDto; -import at.tuwien.api.orcid.activities.employments.affiliation.group.OrcidEmploymentSummaryDto; -import at.tuwien.api.orcid.activities.employments.affiliation.group.summary.OrcidSummaryDto; -import at.tuwien.api.orcid.activities.employments.affiliation.group.summary.organization.OrcidOrganizationDto; -import at.tuwien.api.orcid.person.OrcidPersonDto; -import at.tuwien.api.orcid.person.name.OrcidNameDto; -import at.tuwien.api.orcid.person.name.OrcidValueDto; -import at.tuwien.api.semantics.*; -import at.tuwien.api.user.UserAttributesDto; -import at.tuwien.api.user.*; -import at.tuwien.api.user.internal.UpdateUserPasswordDto; -import at.tuwien.entities.container.Container; -import at.tuwien.entities.container.image.ContainerImage; -import at.tuwien.entities.container.image.Operator; -import at.tuwien.entities.database.*; -import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.database.table.columns.TableColumn; -import at.tuwien.entities.database.table.columns.TableColumnConcept; -import at.tuwien.entities.database.table.columns.TableColumnType; -import at.tuwien.entities.database.table.columns.TableColumnUnit; -import at.tuwien.entities.database.table.constraints.Constraints; -import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKey; -import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKeyReference; -import at.tuwien.entities.database.table.constraints.foreignKey.ReferenceType; -import at.tuwien.entities.database.table.constraints.primaryKey.PrimaryKey; -import at.tuwien.entities.database.table.constraints.unique.Unique; -import at.tuwien.entities.identifier.*; -import at.tuwien.entities.maintenance.BannerMessage; -import at.tuwien.entities.maintenance.BannerMessageType; -import at.tuwien.entities.semantics.Ontology; -import at.tuwien.entities.user.User; -import at.tuwien.test.utils.ArrayUtils; +package at.ac.tuwien.ifs.dbrepo.core.test; + +import at.ac.tuwien.ifs.dbrepo.core.api.ExportResourceDto; +import at.ac.tuwien.ifs.dbrepo.core.api.amqp.CreateVirtualHostDto; +import at.ac.tuwien.ifs.dbrepo.core.api.amqp.ExchangeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.amqp.GrantVirtualHostPermissionsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.amqp.QueueDto; +import at.ac.tuwien.ifs.dbrepo.core.api.auth.CreateUserDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerBriefDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto; +import at.ac.tuwien.ifs.dbrepo.core.api.container.image.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.query.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.columns.concepts.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.ConstraintsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.CreateTableConstraintsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.foreign.*; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.primary.PrimaryKeyDto; +import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.unique.UniqueDto; +import at.ac.tuwien.ifs.dbrepo.core.api.datacite.DataCiteBody; +import at.ac.tuwien.ifs.dbrepo.core.api.datacite.DataCiteData; +import at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi.DataCiteDoi; +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.CreateDashboardDto; +import at.ac.tuwien.ifs.dbrepo.core.api.grafana.CreateDashboardResponseDto; +import at.ac.tuwien.ifs.dbrepo.core.api.identifier.*; +import at.ac.tuwien.ifs.dbrepo.core.api.keycloak.*; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageCreateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageDto; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageTypeDto; +import at.ac.tuwien.ifs.dbrepo.core.api.maintenance.BannerMessageUpdateDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.OrcidDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.OrcidActivitiesSummaryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.OrcidEmploymentsDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.OrcidAffiliationGroupDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.group.OrcidEmploymentSummaryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.group.summary.OrcidSummaryDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.activities.employments.affiliation.group.summary.organization.OrcidOrganizationDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.person.OrcidPersonDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.person.name.OrcidNameDto; +import at.ac.tuwien.ifs.dbrepo.core.api.orcid.person.name.OrcidValueDto; +import at.ac.tuwien.ifs.dbrepo.core.api.semantics.*; +import at.ac.tuwien.ifs.dbrepo.core.api.user.*; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserAttributesDto; +import at.ac.tuwien.ifs.dbrepo.core.api.user.internal.UpdateUserPasswordDto; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.Container; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.image.ContainerImage; +import at.ac.tuwien.ifs.dbrepo.core.entity.container.image.Operator; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.*; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.Table; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumn; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumnConcept; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumnType; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.columns.TableColumnUnit; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.Constraints; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.foreignKey.ForeignKey; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.foreignKey.ForeignKeyReference; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.foreignKey.ReferenceType; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.primaryKey.PrimaryKey; +import at.ac.tuwien.ifs.dbrepo.core.entity.database.table.constraints.unique.Unique; +import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.*; +import at.ac.tuwien.ifs.dbrepo.core.entity.maintenance.BannerMessage; +import at.ac.tuwien.ifs.dbrepo.core.entity.maintenance.BannerMessageType; +import at.ac.tuwien.ifs.dbrepo.core.entity.semantics.Ontology; +import at.ac.tuwien.ifs.dbrepo.core.entity.user.User; +import at.ac.tuwien.ifs.dbrepo.core.test.utils.ArrayUtils; import org.springframework.core.io.InputStreamResource; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.test.context.TestPropertySource; import java.io.InputStream; import java.math.BigDecimal; @@ -77,7 +80,6 @@ import java.time.Instant; import java.time.LocalDate; import java.time.ZoneOffset; import java.util.*; -import java.util.stream.Collectors; import static java.time.temporal.ChronoUnit.HOURS; import static java.time.temporal.ChronoUnit.MINUTES; @@ -121,183 +123,180 @@ import static java.time.temporal.ChronoUnit.MINUTES; * </ul> * <p> * Database 4 (Public Data, Public Schema, User 4) -> Container 4 + * <ul> * <li>Table 9</li> * <li>Identifier 7</li> * <li>Query 7</li> - * <ul> * </ul> - * <br /> - * User 1 (read) - * <br /> - * User 2 (write-own) - * <br /> - * User 3 (write-all) */ -public abstract class BaseTest { - - public static final String MINIO_IMAGE = "minio/minio:RELEASE.2024-06-06T09-36-42Z"; - - public static final String MARIADB_IMAGE = "mariadb:11.3.2"; +@TestPropertySource(locations = "classpath:application.properties") +public class BaseTest { - public static final String RABBITMQ_IMAGE = "rabbitmq:3.13.7"; + public final static String MINIO_IMAGE = "minio/minio:RELEASE.2024-06-06T09-36-42Z"; + public final static String MARIADB_IMAGE = "mariadb:11.3.2"; + public final static String RABBITMQ_IMAGE = "rabbitmq:3.13.7"; + public final static String KEYCLOAK_IMAGE = "quay.io/keycloak/keycloak:26.0.4"; - public static final String KEYCLOAK_IMAGE = "quay.io/keycloak/keycloak:26.0.4"; + public final static String REALM_DBREPO_NAME = "dbrepo"; - public static final String[] DEFAULT_SEMANTICS_HANDLING = new String[]{"default-semantics-handling", + public final static String[] DEFAULT_SEMANTICS_HANDLING = new String[]{"default-semantics-handling", "create-semantic-unit", "execute-semantic-query", "table-semantic-analyse", "create-semantic-concept"}; - public static final String[] DEFAULT_VIEW_HANDLING = new String[]{"update-database-view", "create-database-view", + public final static String[] DEFAULT_VIEW_HANDLING = new String[]{"update-database-view", "create-database-view", "delete-database-view", "list-database-views", "modify-view-visibility", "find-database-view"}; - public static final String[] ESCALATED_SEMANTICS_HANDLING = new String[]{"escalated-semantics-handling", + public final static String[] ESCALATED_SEMANTICS_HANDLING = new String[]{"escalated-semantics-handling", "update-semantic-concept", "modify-foreign-table-column-semantics", "delete-ontology", "list-ontologies", "update-semantic-unit", "create-ontology", "update-ontology"}; - public static final String[] DEFAULT_CONTAINER_HANDLING = new String[]{"default-container-handling", + public final static String[] DEFAULT_CONTAINER_HANDLING = new String[]{"default-container-handling", "create-container", "list-containers", "modify-container-state"}; - public static final String[] ESCALATED_CONTAINER_HANDLING = new String[]{"escalated-container-handling", + public final static String[] ESCALATED_CONTAINER_HANDLING = new String[]{"escalated-container-handling", "modify-foreign-container-state", "delete-container"}; - public static final String[] DEFAULT_DATABASE_HANDLING = new String[]{"default-database-handling", + public final static String[] DEFAULT_DATABASE_HANDLING = new String[]{"default-database-handling", "update-database-access", "modify-database-visibility", "create-database", "modify-database-owner", "delete-database-access", "check-database-access", "list-databases", "modify-database-image", "create-database-access", "find-database", "import-database-data"}; - public static final String[] ESCALATED_DATABASE_HANDLING = new String[]{"escalated-database-handling", + public final static String[] ESCALATED_DATABASE_HANDLING = new String[]{"escalated-database-handling", "delete-database"}; - public static final String[] DEFAULT_IDENTIFIER_HANDLING = new String[]{"default-identifier-handling", + public final static String[] DEFAULT_IDENTIFIER_HANDLING = new String[]{"default-identifier-handling", "create-identifier", "find-identifier", "list-identifiers", "publish-identifier", "delete-identifier"}; - public static final String[] ESCALATED_IDENTIFIER_HANDLING = new String[]{"escalated-identifier-handling", + public final static String[] ESCALATED_IDENTIFIER_HANDLING = new String[]{"escalated-identifier-handling", "modify-identifier-metadata", "update-foreign-identifier", "create-foreign-identifier"}; - public static final String[] DEFAULT_QUERY_HANDLING = new String[]{"default-query-handling", "view-table-data", + public final static String[] DEFAULT_QUERY_HANDLING = new String[]{"default-query-handling", "view-table-data", "execute-query", "view-table-history", "list-database-views", "export-query-data", "create-database-view", "delete-database-view", "delete-table-data", "export-table-data", "persist-query", "re-execute-query", "insert-table-data", "find-database-view"}; - public static final String[] ESCALATED_QUERY_HANDLING = new String[]{"escalated-query-handling"}; + public final static String[] ESCALATED_QUERY_HANDLING = new String[]{"escalated-query-handling"}; - public static final String[] DEFAULT_TABLE_HANDLING = new String[]{"default-table-handling", - "list-tables", "create-table", "modify-table-column-semantics", "find-table", "delete-table", - "update-table-statistic", "update-table"}; + public final static String[] DEFAULT_TABLE_HANDLING = new String[]{"default-table-handling", "list-tables", + "create-table", "modify-table-column-semantics", "find-table", "delete-table", "update-table-statistic", + "update-table"}; - public static final String[] ESCALATED_TABLE_HANDLING = new String[]{"escalated-table-handling", + public final static String[] ESCALATED_TABLE_HANDLING = new String[]{"escalated-table-handling", "delete-foreign-table"}; - public static final String[] DEFAULT_USER_HANDLING = new String[]{"default-user-handling", "modify-user-theme", + public final static String[] DEFAULT_USER_HANDLING = new String[]{"default-user-handling", "modify-user-theme", "modify-user-information"}; - public static final String[] ESCALATED_USER_HANDLING = new String[]{"escalated-user-handling", "find-user"}; - - public static final String[] DEFAULT_RESEARCHER_ROLES = ArrayUtils.merge(List.of(new String[]{"default-researcher-roles"}, - DEFAULT_CONTAINER_HANDLING, DEFAULT_DATABASE_HANDLING, DEFAULT_IDENTIFIER_HANDLING, DEFAULT_QUERY_HANDLING, - DEFAULT_TABLE_HANDLING, DEFAULT_USER_HANDLING, DEFAULT_SEMANTICS_HANDLING, DEFAULT_VIEW_HANDLING)); - - public static final String[] DEFAULT_DEVELOPER_ROLES = ArrayUtils.merge(List.of(new String[]{"default-developer-roles"}, - DEFAULT_CONTAINER_HANDLING, DEFAULT_DATABASE_HANDLING, DEFAULT_IDENTIFIER_HANDLING, DEFAULT_QUERY_HANDLING, - DEFAULT_TABLE_HANDLING, DEFAULT_USER_HANDLING, ESCALATED_USER_HANDLING, ESCALATED_CONTAINER_HANDLING, - ESCALATED_DATABASE_HANDLING, ESCALATED_IDENTIFIER_HANDLING, ESCALATED_QUERY_HANDLING, - ESCALATED_TABLE_HANDLING, DEFAULT_VIEW_HANDLING)); - - public static final String[] DEFAULT_DATA_STEWARD_ROLES = ArrayUtils.merge(List.of(new String[]{"default-data-steward-roles"}, - ESCALATED_IDENTIFIER_HANDLING, DEFAULT_SEMANTICS_HANDLING, ESCALATED_SEMANTICS_HANDLING, DEFAULT_VIEW_HANDLING)); - - public static final String[] DEFAULT_LOCAL_ADMIN_ROLES = new String[]{"system"}; - - public static final List<GrantedAuthorityDto> AUTHORITY_LOCAL_ADMIN_ROLES = Arrays.stream(DEFAULT_LOCAL_ADMIN_ROLES) - .map(GrantedAuthorityDto::new) - .collect(Collectors.toList()); - - public static final List<GrantedAuthorityDto> AUTHORITY_DEFAULT_RESEARCHER_ROLES = Arrays.stream(DEFAULT_RESEARCHER_ROLES) - .map(GrantedAuthorityDto::new) - .collect(Collectors.toList()); - - public static final List<GrantedAuthorityDto> AUTHORITY_DEFAULT_DEVELOPER_ROLES = Arrays.stream(DEFAULT_DEVELOPER_ROLES) - .map(GrantedAuthorityDto::new) - .collect(Collectors.toList()); - - public static final List<GrantedAuthorityDto> AUTHORITY_DEFAULT_DATA_STEWARD_ROLES = Arrays.stream(DEFAULT_DATA_STEWARD_ROLES) - .map(GrantedAuthorityDto::new) - .collect(Collectors.toList()); - - public static final List<GrantedAuthority> AUTHORITY_DEFAULT_LOCAL_ADMIN_AUTHORITIES = AUTHORITY_LOCAL_ADMIN_ROLES.stream() - .map(a -> new SimpleGrantedAuthority(a.getAuthority())) - .collect(Collectors.toList()); - - public static final List<GrantedAuthority> AUTHORITY_DEFAULT_RESEARCHER_AUTHORITIES = AUTHORITY_DEFAULT_RESEARCHER_ROLES.stream() - .map(a -> new SimpleGrantedAuthority(a.getAuthority())) - .collect(Collectors.toList()); - - public static final List<GrantedAuthority> AUTHORITY_DEFAULT_DEVELOPER_AUTHORITIES = AUTHORITY_DEFAULT_DEVELOPER_ROLES.stream() - .map(a -> new SimpleGrantedAuthority(a.getAuthority())) - .collect(Collectors.toList()); - - public static final List<GrantedAuthority> AUTHORITY_DEFAULT_DATA_STEWARD_AUTHORITIES = AUTHORITY_DEFAULT_DATA_STEWARD_ROLES.stream() - .map(a -> new SimpleGrantedAuthority(a.getAuthority())) - .collect(Collectors.toList()); - - public static final UUID REALM_DBREPO_ID = UUID.fromString("6264bf7b-d1d3-4562-9c07-ce4364a8f9d3"); - public static final String REALM_DBREPO_NAME = "dbrepo"; - public static final Boolean REALM_DBREPO_ENABLED = true; - - public static final UUID ROLE_DEFAULT_REALM_DBREPO_ROLES_ID = UUID.fromString("c74cbbe7-3ab1-4472-9211-cc904567268"); - public static final String ROLE_DEFAULT_REALM_DBREPO_ROLES_NAME = "default-dbrepo-roles"; - public static final UUID ROLE_DEFAULT_REALM_DBREPO_ROLES_REALM_ID = REALM_DBREPO_ID; - - public static final UUID ROLE_DEFAULT_RESEARCHER_ROLES_ID = UUID.fromString("c74cbbe7-3ab1-4472-9211-cc9045672682"); - public static final String ROLE_DEFAULT_RESEARCHER_ROLES_NAME = "default-researcher-roles"; - public static final UUID ROLE_DEFAULT_RESEARCHER_ROLES_REALM_ID = REALM_DBREPO_ID; - - public static final CreateAccessDto UPDATE_DATABASE_ACCESS_READ_DTO = CreateAccessDto.builder() + public final static String[] ESCALATED_USER_HANDLING = new String[]{"escalated-user-handling", "find-user"}; + + public final static String[] DEFAULT_RESEARCHER_ROLES = ArrayUtils.merge(List.of( + new String[]{"default-researcher-roles"}, DEFAULT_CONTAINER_HANDLING, DEFAULT_DATABASE_HANDLING, + DEFAULT_IDENTIFIER_HANDLING, DEFAULT_QUERY_HANDLING, DEFAULT_TABLE_HANDLING, DEFAULT_USER_HANDLING, + DEFAULT_SEMANTICS_HANDLING, DEFAULT_VIEW_HANDLING)); + + public final static String[] DEFAULT_DEVELOPER_ROLES = ArrayUtils.merge(List.of( + new String[]{"default-developer-roles"}, DEFAULT_CONTAINER_HANDLING, DEFAULT_DATABASE_HANDLING, + DEFAULT_IDENTIFIER_HANDLING, DEFAULT_QUERY_HANDLING, DEFAULT_TABLE_HANDLING, DEFAULT_USER_HANDLING, + ESCALATED_USER_HANDLING, ESCALATED_CONTAINER_HANDLING, ESCALATED_DATABASE_HANDLING, + ESCALATED_IDENTIFIER_HANDLING, ESCALATED_QUERY_HANDLING, ESCALATED_TABLE_HANDLING, DEFAULT_VIEW_HANDLING)); + + public final static String[] DEFAULT_DATA_STEWARD_ROLES = ArrayUtils.merge(List.of( + new String[]{"default-data-steward-roles"}, ESCALATED_IDENTIFIER_HANDLING, DEFAULT_SEMANTICS_HANDLING, + ESCALATED_SEMANTICS_HANDLING, DEFAULT_VIEW_HANDLING)); + + public final static String[] DEFAULT_LOCAL_ADMIN_ROLES = ArrayUtils.merge(List.of(new String[]{"system"}, + DEFAULT_RESEARCHER_ROLES)); + + public final List<GrantedAuthorityDto> AUTHORITY_LOCAL_ADMIN_ROLES = + Arrays.stream(DEFAULT_LOCAL_ADMIN_ROLES) + .map(GrantedAuthorityDto::new) + .toList(); + + public final List<GrantedAuthorityDto> AUTHORITY_DEFAULT_RESEARCHER_ROLES = + Arrays.stream(DEFAULT_RESEARCHER_ROLES) + .map(GrantedAuthorityDto::new) + .toList(); + + public final List<GrantedAuthorityDto> AUTHORITY_DEFAULT_DEVELOPER_ROLES = + Arrays.stream(DEFAULT_DEVELOPER_ROLES) + .map(GrantedAuthorityDto::new) + .toList(); + + public final List<GrantedAuthorityDto> AUTHORITY_DEFAULT_DATA_STEWARD_ROLES = + Arrays.stream(DEFAULT_DATA_STEWARD_ROLES) + .map(GrantedAuthorityDto::new) + .toList(); + + public final List<GrantedAuthority> AUTHORITY_DEFAULT_LOCAL_ADMIN_AUTHORITIES = + AUTHORITY_LOCAL_ADMIN_ROLES + .stream() + .map(a -> (GrantedAuthority) new SimpleGrantedAuthority(a.getAuthority())) + .toList(); + + public final List<GrantedAuthority> AUTHORITY_DEFAULT_RESEARCHER_AUTHORITIES = + AUTHORITY_DEFAULT_RESEARCHER_ROLES + .stream() + .map(a -> (GrantedAuthority) new SimpleGrantedAuthority(a.getAuthority())) + .toList(); + + public final List<GrantedAuthority> AUTHORITY_DEFAULT_DEVELOPER_AUTHORITIES = + AUTHORITY_DEFAULT_DEVELOPER_ROLES + .stream() + .map(a -> (GrantedAuthority) new SimpleGrantedAuthority(a.getAuthority())) + .toList(); + + public final List<GrantedAuthority> AUTHORITY_DEFAULT_DATA_STEWARD_AUTHORITIES = + AUTHORITY_DEFAULT_DATA_STEWARD_ROLES + .stream() + .map(a -> (GrantedAuthority) new SimpleGrantedAuthority(a.getAuthority())) + .toList(); + + public final CreateAccessDto UPDATE_DATABASE_ACCESS_READ_DTO = CreateAccessDto.builder() .type(AccessTypeDto.READ) .build(); - public static final CreateAccessDto UPDATE_DATABASE_ACCESS_WRITE_OWN_DTO = CreateAccessDto.builder() + public final CreateAccessDto UPDATE_DATABASE_ACCESS_WRITE_OWN_DTO = CreateAccessDto.builder() .type(AccessTypeDto.WRITE_OWN) .build(); - public static final CreateAccessDto UPDATE_DATABASE_ACCESS_WRITE_ALL_DTO = CreateAccessDto.builder() + public final CreateAccessDto UPDATE_DATABASE_ACCESS_WRITE_ALL_DTO = CreateAccessDto.builder() .type(AccessTypeDto.WRITE_ALL) .build(); - public static final String TOKEN_ACCESS_TOKEN = "ey.yee.skrr"; - public static final String TOKEN_ACCESS_SCOPE = "openid"; + public final static String TOKEN_ACCESS_TOKEN = "ey.yee.skrr"; + public final static String TOKEN_ACCESS_SCOPE = "openid"; - public static final TokenDto TOKEN_DTO = TokenDto.builder() + public final TokenDto TOKEN_DTO = TokenDto.builder() .accessToken(TOKEN_ACCESS_TOKEN) .scope(TOKEN_ACCESS_SCOPE) .build(); - public static final UUID CONCEPT_1_ID = UUID.fromString("8cabc011-4bdf-44d4-9d33-b2648e2ddbf1"); - public static final String CONCEPT_1_NAME = "precipitation"; - public static final String CONCEPT_1_URI = "http://www.wikidata.org/entity/Q25257"; - public static final String CONCEPT_1_DESCRIPTION = null; - public static final Instant CONCEPT_1_CREATED = Instant.ofEpochSecond(1701976048L) /* 2023-12-07 19:07:27 (UTC) */; + public final static UUID CONCEPT_1_ID = UUID.fromString("8cabc011-4bdf-44d4-9d33-b2648e2ddbf1"); + public final static String CONCEPT_1_NAME = "precipitation"; + public final static String CONCEPT_1_URI = "http://www.wikidata.org/entity/Q25257"; + public final static String CONCEPT_1_DESCRIPTION = null; + public final static Instant CONCEPT_1_CREATED = Instant.ofEpochSecond(1701976048L) /* 2023-12-07 19:07:27 (UTC) */; - public static final ConceptSaveDto CONCEPT_1_SAVE_DTO = ConceptSaveDto.builder() + public final ConceptSaveDto CONCEPT_1_SAVE_DTO = ConceptSaveDto.builder() .uri(CONCEPT_1_URI) .name(CONCEPT_1_NAME) .description(CONCEPT_1_DESCRIPTION) .build(); - public static final ConceptDto CONCEPT_1_DTO = ConceptDto.builder() + public final ConceptDto CONCEPT_1_DTO = ConceptDto.builder() .id(CONCEPT_1_ID) .uri(CONCEPT_1_URI) .name(CONCEPT_1_NAME) .description(CONCEPT_1_DESCRIPTION) .build(); - public static final ConceptBriefDto CONCEPT_1_BRIEF_DTO = ConceptBriefDto.builder() + public final ConceptBriefDto CONCEPT_1_BRIEF_DTO = ConceptBriefDto.builder() .id(CONCEPT_1_ID) .uri(CONCEPT_1_URI) .name(CONCEPT_1_NAME) .description(CONCEPT_1_DESCRIPTION) .build(); - public static final TableColumnConcept CONCEPT_1 = TableColumnConcept.builder() + public final TableColumnConcept CONCEPT_1 = TableColumnConcept.builder() .id(CONCEPT_1_ID) .uri(CONCEPT_1_URI) .name(CONCEPT_1_NAME) @@ -305,39 +304,39 @@ public abstract class BaseTest { .created(CONCEPT_1_CREATED) .build(); - public static final EntityDto CONCEPT_1_ENTITY_DTO = EntityDto.builder() + public final EntityDto CONCEPT_1_ENTITY_DTO = EntityDto.builder() .uri(CONCEPT_1_URI) .description(CONCEPT_1_DESCRIPTION) .label(CONCEPT_1_NAME) .build(); - public static final UUID CONCEPT_2_ID = UUID.fromString("c5cf9914-15c1-4813-af11-eb2a070d59a9"); - public static final String CONCEPT_2_NAME = "FAIR data"; - public static final String CONCEPT_2_URI = "http://www.wikidata.org/entity/Q29032648"; - public static final String CONCEPT_2_DESCRIPTION = "data compliant with the terms of the FAIR Data Principles"; - public static final Instant CONCEPT_2_CREATED = Instant.now(); + public final static UUID CONCEPT_2_ID = UUID.fromString("c5cf9914-15c1-4813-af11-eb2a070d59a9"); + public final static String CONCEPT_2_NAME = "FAIR data"; + public final static String CONCEPT_2_URI = "http://www.wikidata.org/entity/Q29032648"; + public final static String CONCEPT_2_DESCRIPTION = "data compliant with the terms of the FAIR Data Principles"; + public final static Instant CONCEPT_2_CREATED = Instant.ofEpochSecond(1701976049L) /* 2023-12-07 19:07:28 (UTC) */; - public static final ConceptSaveDto CONCEPT_2_SAVE_DTO = ConceptSaveDto.builder() + public final ConceptSaveDto CONCEPT_2_SAVE_DTO = ConceptSaveDto.builder() .uri(CONCEPT_2_URI) .name(CONCEPT_2_NAME) .description(CONCEPT_2_DESCRIPTION) .build(); - public static final ConceptDto CONCEPT_2_DTO = ConceptDto.builder() + public final ConceptDto CONCEPT_2_DTO = ConceptDto.builder() .id(CONCEPT_2_ID) .uri(CONCEPT_2_URI) .name(CONCEPT_2_NAME) .description(CONCEPT_2_DESCRIPTION) .build(); - public static final ConceptBriefDto CONCEPT_2_BRIEF_DTO = ConceptBriefDto.builder() + public final ConceptBriefDto CONCEPT_2_BRIEF_DTO = ConceptBriefDto.builder() .id(CONCEPT_2_ID) .uri(CONCEPT_2_URI) .name(CONCEPT_2_NAME) .description(CONCEPT_2_DESCRIPTION) .build(); - public static final TableColumnConcept CONCEPT_2 = TableColumnConcept.builder() + public final TableColumnConcept CONCEPT_2 = TableColumnConcept.builder() .id(CONCEPT_2_ID) .uri(CONCEPT_2_URI) .name(CONCEPT_2_NAME) @@ -345,33 +344,33 @@ public abstract class BaseTest { .created(CONCEPT_2_CREATED) .build(); - public static final UUID UNIT_1_ID = UUID.fromString("1fee60e4-42f8-4883-85a8-e282fddf6a62"); - public static final String UNIT_1_NAME = "millimetre"; - public static final String UNIT_1_URI = "http://www.ontology-of-units-of-measure.org/resource/om-2/millimetre"; - public static final String UNIT_1_DESCRIPTION = "The millimetre is a unit of length defined as 1.0e-3 metre."; - public static final Instant UNIT_1_CREATED = Instant.ofEpochSecond(1701976282L) /* 2023-12-07 19:11:22 */; + public final static UUID UNIT_1_ID = UUID.fromString("1fee60e4-42f8-4883-85a8-e282fddf6a62"); + public final static String UNIT_1_NAME = "millimetre"; + public final static String UNIT_1_URI = "http://www.ontology-of-units-of-measure.org/resource/om-2/millimetre"; + public final static String UNIT_1_DESCRIPTION = "The millimetre is a unit of length defined as 1.0e-3 metre."; + public final static Instant UNIT_1_CREATED = Instant.ofEpochSecond(1701976282L) /* 2023-12-07 19:11:22 */; - public static final UnitSaveDto UNIT_1_SAVE_DTO = UnitSaveDto.builder() + public final UnitSaveDto UNIT_1_SAVE_DTO = UnitSaveDto.builder() .uri(UNIT_1_URI) .name(UNIT_1_NAME) .description(UNIT_1_DESCRIPTION) .build(); - public static final UnitDto UNIT_1_DTO = UnitDto.builder() + public final UnitDto UNIT_1_DTO = UnitDto.builder() .id(UNIT_1_ID) .uri(UNIT_1_URI) .name(UNIT_1_NAME) .description(UNIT_1_DESCRIPTION) .build(); - public static final UnitBriefDto UNIT_1_BRIEF_DTO = UnitBriefDto.builder() + public final UnitBriefDto UNIT_1_BRIEF_DTO = UnitBriefDto.builder() .id(UNIT_1_ID) .uri(UNIT_1_URI) .name(UNIT_1_NAME) .description(UNIT_1_DESCRIPTION) .build(); - public static final TableColumnUnit UNIT_1 = TableColumnUnit.builder() + public final TableColumnUnit UNIT_1 = TableColumnUnit.builder() .id(UNIT_1_ID) .uri(UNIT_1_URI) .name(UNIT_1_NAME) @@ -379,39 +378,39 @@ public abstract class BaseTest { .created(UNIT_1_CREATED) .build(); - public static final EntityDto UNIT_1_ENTITY_DTO = EntityDto.builder() + public final EntityDto UNIT_1_ENTITY_DTO = EntityDto.builder() .uri(UNIT_1_URI) .description(UNIT_1_DESCRIPTION) .label(UNIT_1_NAME) .build(); - public static final UUID UNIT_2_ID = UUID.fromString("d88591a9-5171-4b12-8381-bcff1cfe7442"); - public static final String UNIT_2_NAME = "tonne"; - public static final String UNIT_2_URI = "http://www.ontology-of-units-of-measure.org/resource/om-2/tonne"; - public static final String UNIT_2_DESCRIPTION = "The tonne is a unit of mass defined as 1000 kilogram."; - public static final Instant UNIT_2_CREATED = Instant.ofEpochSecond(1701976462L) /* 2023-12-07 19:14:22 */; + public final static UUID UNIT_2_ID = UUID.fromString("d88591a9-5171-4b12-8381-bcff1cfe7442"); + public final static String UNIT_2_NAME = "tonne"; + public final static String UNIT_2_URI = "http://www.ontology-of-units-of-measure.org/resource/om-2/tonne"; + public final static String UNIT_2_DESCRIPTION = "The tonne is a unit of mass defined as 1000 kilogram."; + public final static Instant UNIT_2_CREATED = Instant.ofEpochSecond(1701976462L) /* 2023-12-07 19:14:22 */; - public static final UnitSaveDto UNIT_2_SAVE_DTO = UnitSaveDto.builder() + public final UnitSaveDto UNIT_2_SAVE_DTO = UnitSaveDto.builder() .uri(UNIT_2_URI) .name(UNIT_2_NAME) .description(UNIT_2_DESCRIPTION) .build(); - public static final UnitDto UNIT_2_DTO = UnitDto.builder() + public final UnitDto UNIT_2_DTO = UnitDto.builder() .id(UNIT_2_ID) .uri(UNIT_2_URI) .name(UNIT_2_NAME) .description(UNIT_2_DESCRIPTION) .build(); - public static final UnitBriefDto UNIT_2_BRIEF_DTO = UnitBriefDto.builder() + public final UnitBriefDto UNIT_2_BRIEF_DTO = UnitBriefDto.builder() .id(UNIT_2_ID) .uri(UNIT_2_URI) .name(UNIT_2_NAME) .description(UNIT_2_DESCRIPTION) .build(); - public static final TableColumnUnit UNIT_2 = TableColumnUnit.builder() + public final TableColumnUnit UNIT_2 = TableColumnUnit.builder() .id(UNIT_2_ID) .uri(UNIT_2_URI) .name(UNIT_2_NAME) @@ -419,29 +418,29 @@ public abstract class BaseTest { .created(UNIT_2_CREATED) .build(); - public static final String USER_BROKER_USERNAME = "guest"; + public final static String USER_BROKER_USERNAME = "guest"; @SuppressWarnings("java:S2068") - public static final String USER_BROKER_PASSWORD = "guest"; + public final static String USER_BROKER_PASSWORD = "guest"; - public static final UUID USER_LOCAL_ADMIN_ID = UUID.fromString("a54dcb2e-a644-4e82-87e7-05a96413983d"); - public static final UUID USER_LOCAL_ADMIN_KEYCLOAK_ID = UUID.fromString("703c2ca0-8fc3-4c03-9bc5-4dae6b211e78"); - public static final String USER_LOCAL_ADMIN_USERNAME = "admin"; + public final static UUID USER_LOCAL_ADMIN_ID = UUID.fromString("a54dcb2e-a644-4e82-87e7-05a96413983d"); + public final static UUID USER_LOCAL_ADMIN_KEYCLOAK_ID = UUID.fromString("703c2ca0-8fc3-4c03-9bc5-4dae6b211e78"); + public final static String USER_LOCAL_ADMIN_USERNAME = "admin"; @SuppressWarnings("java:S2068") - public static final String USER_LOCAL_ADMIN_PASSWORD = "admin"; - public static final String USER_LOCAL_ADMIN_THEME = "dark"; - public static final Boolean USER_LOCAL_ADMIN_IS_INTERNAL = true; - public static final Boolean USER_LOCAL_ADMIN_ENABLED = true; + public final static String USER_LOCAL_ADMIN_PASSWORD = "admin"; + public final static String USER_LOCAL_ADMIN_THEME = "dark"; + public final static Boolean USER_LOCAL_ADMIN_IS_INTERNAL = true; + public final static Boolean USER_LOCAL_ADMIN_ENABLED = true; @SuppressWarnings("java:S2068") - public static final String USER_LOCAL_ADMIN_MARIADB_PASSWORD = "*440BA4FD1A87A0999647DB67C0EE258198B247BA"; + public final static String USER_LOCAL_ADMIN_MARIADB_PASSWORD = "*440BA4FD1A87A0999647DB67C0EE258198B247BA"; - public static final UserDetails USER_LOCAL_ADMIN_DETAILS = UserDetailsDto.builder() + public final UserDetails USER_LOCAL_ADMIN_DETAILS = UserDetailsDto.builder() .id(USER_LOCAL_ADMIN_ID.toString()) .username(USER_LOCAL_ADMIN_USERNAME) .password(USER_LOCAL_ADMIN_PASSWORD) .authorities(AUTHORITY_DEFAULT_LOCAL_ADMIN_AUTHORITIES) .build(); - public static final User USER_LOCAL = User.builder() + public final User USER_LOCAL = User.builder() .id(USER_LOCAL_ADMIN_ID) .keycloakId(USER_LOCAL_ADMIN_KEYCLOAK_ID) .username(USER_LOCAL_ADMIN_USERNAME) @@ -450,34 +449,34 @@ public abstract class BaseTest { .isInternal(USER_LOCAL_ADMIN_IS_INTERNAL) .build(); - public static final Principal USER_LOCAL_ADMIN_PRINCIPAL = new UsernamePasswordAuthenticationToken(USER_LOCAL_ADMIN_DETAILS, - USER_LOCAL_ADMIN_PASSWORD, USER_LOCAL_ADMIN_DETAILS.getAuthorities()); + public final Principal USER_LOCAL_ADMIN_PRINCIPAL = new UsernamePasswordAuthenticationToken( + USER_LOCAL_ADMIN_DETAILS, USER_LOCAL_ADMIN_PASSWORD, USER_LOCAL_ADMIN_DETAILS.getAuthorities()); - public static final UUID USER_1_ID = UUID.fromString("cd5bab0d-7799-4069-85fb-c5d738572a0b"); - public static final UUID USER_1_KEYCLOAK_ID = UUID.fromString("cd5bab0d-7799-4069-85fb-c5d738572a0b"); - public static final String USER_1_USERNAME = "junit1"; + public final static UUID USER_1_ID = UUID.fromString("cd5bab0d-7799-4069-85fb-c5d738572a0b"); + public final static UUID USER_1_KEYCLOAK_ID = UUID.fromString("cd5bab0d-7799-4069-85fb-c5d738572a0b"); + public final static String USER_1_USERNAME = "junit1"; @SuppressWarnings("java:S2068") - public static final String USER_1_PASSWORD = "junit1"; + public final static String USER_1_PASSWORD = "junit1"; @SuppressWarnings("java:S2068") - public static final String USER_1_DATABASE_PASSWORD = "*440BA4FD1A87A0999647DB67C0EE258198B247BA" /* junit1 */; - public static final String USER_1_FIRSTNAME = "John"; - public static final String USER_1_LASTNAME = "Doe"; - public static final String USER_1_QUALIFIED_NAME = USER_1_FIRSTNAME + " " + USER_1_LASTNAME + " — @" + USER_1_USERNAME; - public static final String USER_1_NAME = "John Doe"; - public static final String USER_1_AFFILIATION = "TU Graz"; - public static final String USER_1_ORCID_URL = "https://orcid.org/0000-0003-4216-302X"; - public static final Boolean USER_1_ENABLED = true; - public static final Boolean USER_1_IS_INTERNAL = false; - public static final String USER_1_THEME = "light"; - public static final String USER_1_LANGUAGE = "en"; - public static final Instant USER_1_CREATED = Instant.ofEpochSecond(1677399441L) /* 2023-02-26 08:17:21 (UTC) */; - - public static final UpdateUserPasswordDto USER_1_UPDATE_PASSWORD_DTO = UpdateUserPasswordDto.builder() + public final static String USER_1_DATABASE_PASSWORD = "*440BA4FD1A87A0999647DB67C0EE258198B247BA" /* junit1 */; + public final static String USER_1_FIRSTNAME = "John"; + public final static String USER_1_LASTNAME = "Doe"; + public final static String USER_1_QUALIFIED_NAME = USER_1_FIRSTNAME + " " + USER_1_LASTNAME + " — @" + USER_1_USERNAME; + public final static String USER_1_NAME = "John Doe"; + public final static String USER_1_AFFILIATION = "TU Graz"; + public final static String USER_1_ORCID_URL = "https://orcid.org/0000-0003-4216-302X"; + public final static Boolean USER_1_ENABLED = true; + public final static Boolean USER_1_IS_INTERNAL = false; + public final static String USER_1_THEME = "light"; + public final static String USER_1_LANGUAGE = "en"; + public final static Instant USER_1_CREATED = Instant.ofEpochSecond(1677399441L) /* 2023-02-26 08:17:21 (UTC) */; + + public final UpdateUserPasswordDto USER_1_UPDATE_PASSWORD_DTO = UpdateUserPasswordDto.builder() .username(USER_1_USERNAME) .password(USER_1_PASSWORD) .build(); - public static final UserAttributesDto USER_1_ATTRIBUTES_DTO = UserAttributesDto.builder() + public final UserAttributesDto USER_1_ATTRIBUTES_DTO = UserAttributesDto.builder() .theme(USER_1_THEME) .orcid(USER_1_ORCID_URL) .affiliation(USER_1_AFFILIATION) @@ -485,19 +484,19 @@ public abstract class BaseTest { .language(USER_1_LANGUAGE) .build(); - public static final CredentialDto USER_1_KEYCLOAK_CREDENTIAL_1 = CredentialDto.builder() + public final CredentialDto USER_1_KEYCLOAK_CREDENTIAL_1 = CredentialDto.builder() .type(CredentialTypeDto.PASSWORD) .temporary(false) .value(USER_1_PASSWORD) .build(); - public static final CredentialDto USER_LOCAL_KEYCLOAK_CREDENTIAL_1 = CredentialDto.builder() + public final CredentialDto USER_LOCAL_KEYCLOAK_CREDENTIAL_1 = CredentialDto.builder() .type(CredentialTypeDto.PASSWORD) .temporary(false) .value(USER_LOCAL_ADMIN_PASSWORD) .build(); - public static final UserCreateDto USER_1_KEYCLOAK_SIGNUP_REQUEST = UserCreateDto.builder() + public final UserCreateDto USER_1_KEYCLOAK_SIGNUP_REQUEST = UserCreateDto.builder() .username(USER_1_USERNAME) .enabled(USER_1_ENABLED) .credentials(new LinkedList<>(List.of(USER_1_KEYCLOAK_CREDENTIAL_1))) @@ -506,7 +505,7 @@ public abstract class BaseTest { .build()) .build(); - public static final UserCreateDto USER_LOCAL_KEYCLOAK_SIGNUP_REQUEST = UserCreateDto.builder() + public final UserCreateDto USER_LOCAL_KEYCLOAK_SIGNUP_REQUEST = UserCreateDto.builder() .username(USER_LOCAL_ADMIN_USERNAME) .enabled(USER_LOCAL_ADMIN_ENABLED) .credentials(new LinkedList<>(List.of(USER_LOCAL_KEYCLOAK_CREDENTIAL_1))) @@ -516,7 +515,7 @@ public abstract class BaseTest { .build()) .build(); - public static final User USER_1 = User.builder() + public final User USER_1 = User.builder() .id(USER_1_ID) .keycloakId(USER_1_KEYCLOAK_ID) .username(USER_1_USERNAME) @@ -528,9 +527,10 @@ public abstract class BaseTest { .mariadbPassword(USER_1_DATABASE_PASSWORD) .language(USER_1_LANGUAGE) .isInternal(USER_1_IS_INTERNAL) + .accesses(new LinkedList<>()) .build(); - public static final UserDto USER_1_DTO = UserDto.builder() + public final UserDto USER_1_DTO = UserDto.builder() .id(USER_1_ID) .username(USER_1_USERNAME) .firstname(USER_1_FIRSTNAME) @@ -540,7 +540,7 @@ public abstract class BaseTest { .qualifiedName(USER_1_QUALIFIED_NAME) .build(); - public static final CreateUserDto USER_1_CREATE_USER_DTO = CreateUserDto.builder() + public final CreateUserDto USER_1_CREATE_USER_DTO = CreateUserDto.builder() .id(USER_1_KEYCLOAK_ID) .ldapId(USER_1_ID) .givenName(USER_1_FIRSTNAME) @@ -548,7 +548,7 @@ public abstract class BaseTest { .username(USER_1_USERNAME) .build(); - public static final UserUpdateDto USER_1_UPDATE_DTO = UserUpdateDto.builder() + public final UserUpdateDto USER_1_UPDATE_DTO = UserUpdateDto.builder() .firstname(USER_1_FIRSTNAME) .lastname(USER_1_LASTNAME) .affiliation(USER_1_AFFILIATION) @@ -557,11 +557,11 @@ public abstract class BaseTest { .language(USER_1_LANGUAGE) .build(); - public static final UserPasswordDto USER_1_PASSWORD_DTO = UserPasswordDto.builder() + public final UserPasswordDto USER_1_PASSWORD_DTO = UserPasswordDto.builder() .password(USER_1_PASSWORD) .build(); - public static final UserBriefDto USER_1_BRIEF_DTO = UserBriefDto.builder() + public final UserBriefDto USER_1_BRIEF_DTO = UserBriefDto.builder() .id(USER_1_ID) .username(USER_1_USERNAME) .firstname(USER_1_FIRSTNAME) @@ -571,34 +571,34 @@ public abstract class BaseTest { .orcid(USER_1_ORCID_URL) .build(); - public static final UserDetails USER_1_DETAILS = UserDetailsDto.builder() + public final UserDetails USER_1_DETAILS = UserDetailsDto.builder() .id(USER_1_ID.toString()) .username(USER_1_USERNAME) .password(USER_1_PASSWORD) .authorities(AUTHORITY_DEFAULT_RESEARCHER_AUTHORITIES) .build(); - public static final Principal USER_1_PRINCIPAL = new UsernamePasswordAuthenticationToken(USER_1_DETAILS, + public final Principal USER_1_PRINCIPAL = new UsernamePasswordAuthenticationToken(USER_1_DETAILS, USER_1_PASSWORD, USER_1_DETAILS.getAuthorities()); - public static final UUID USER_2_ID = UUID.fromString("eeb9a51b-4cd8-4039-90bf-e24f17372f7c"); - public static final UUID USER_2_KEYCLOAK_ID = UUID.fromString("eeb9a51b-4cd8-4039-90bf-e24f17372f7c"); - public static final String USER_2_USERNAME = "junit2"; - public static final String USER_2_FIRSTNAME = "Jane"; - public static final String USER_2_LASTNAME = "Doe"; - public static final String USER_2_NAME = "Jane Doe"; - public static final String USER_2_AFFILIATION = "TU Wien"; - public static final String USER_2_ORCID_URL = "https://orcid.org/0000-0002-9272-6225"; + public final static UUID USER_2_ID = UUID.fromString("eeb9a51b-4cd8-4039-90bf-e24f17372f7c"); + public final static UUID USER_2_KEYCLOAK_ID = UUID.fromString("eeb9a51b-4cd8-4039-90bf-e24f17372f7c"); + public final static String USER_2_USERNAME = "junit2"; + public final static String USER_2_FIRSTNAME = "Jane"; + public final static String USER_2_LASTNAME = "Doe"; + public final static String USER_2_NAME = "Jane Doe"; + public final static String USER_2_AFFILIATION = "TU Wien"; + public final static String USER_2_ORCID_URL = "https://orcid.org/0000-0002-9272-6225"; @SuppressWarnings("java:S2068") - public static final String USER_2_PASSWORD = "junit2"; + public final static String USER_2_PASSWORD = "junit2"; @SuppressWarnings("java:S2068") - public static final String USER_2_DATABASE_PASSWORD = "*9AA70A8B0EEFAFCB5BED5BDEF6EE264D5DA915AE" /* junit2 */; - public static final String USER_2_QUALIFIED_NAME = USER_2_FIRSTNAME + " " + USER_2_LASTNAME + " — @" + USER_2_USERNAME; - public static final Boolean USER_2_IS_INTERNAL = false; - public static final String USER_2_THEME = "light"; - public static final String USER_2_LANGUAGE = "de"; + public final static String USER_2_DATABASE_PASSWORD = "*9AA70A8B0EEFAFCB5BED5BDEF6EE264D5DA915AE" /* junit2 */; + public final static String USER_2_QUALIFIED_NAME = USER_2_FIRSTNAME + " " + USER_2_LASTNAME + " — @" + USER_2_USERNAME; + public final static Boolean USER_2_IS_INTERNAL = false; + public final static String USER_2_THEME = "light"; + public final static String USER_2_LANGUAGE = "de"; - public static final UserAttributesDto USER_2_ATTRIBUTES_DTO = UserAttributesDto.builder() + public final UserAttributesDto USER_2_ATTRIBUTES_DTO = UserAttributesDto.builder() .theme(USER_2_THEME) .orcid(USER_2_ORCID_URL) .affiliation(USER_2_AFFILIATION) @@ -606,7 +606,7 @@ public abstract class BaseTest { .language(USER_2_LANGUAGE) .build(); - public static final User USER_2 = User.builder() + public final User USER_2 = User.builder() .id(USER_2_ID) .keycloakId(USER_2_KEYCLOAK_ID) .username(USER_2_USERNAME) @@ -618,9 +618,10 @@ public abstract class BaseTest { .mariadbPassword(USER_2_DATABASE_PASSWORD) .language(USER_2_LANGUAGE) .isInternal(USER_2_IS_INTERNAL) + .accesses(new LinkedList<>()) .build(); - public static final UserDto USER_2_DTO = UserDto.builder() + public final UserDto USER_2_DTO = UserDto.builder() .id(USER_2_ID) .username(USER_2_USERNAME) .firstname(USER_2_FIRSTNAME) @@ -630,7 +631,7 @@ public abstract class BaseTest { .attributes(USER_2_ATTRIBUTES_DTO) .build(); - public static final UserBriefDto USER_2_BRIEF_DTO = UserBriefDto.builder() + public final UserBriefDto USER_2_BRIEF_DTO = UserBriefDto.builder() .id(USER_2_ID) .username(USER_2_USERNAME) .firstname(USER_2_FIRSTNAME) @@ -640,46 +641,46 @@ public abstract class BaseTest { .qualifiedName(USER_2_QUALIFIED_NAME) .build(); - public static final UserDetails USER_2_DETAILS = UserDetailsDto.builder() + public final UserDetails USER_2_DETAILS = UserDetailsDto.builder() .id(USER_2_ID.toString()) .username(USER_2_USERNAME) .password(USER_2_PASSWORD) .authorities(AUTHORITY_DEFAULT_RESEARCHER_AUTHORITIES) .build(); - public static final at.tuwien.api.amqp.UserDetailsDto USER_2_DETAILS_DTO = at.tuwien.api.amqp.UserDetailsDto.builder() - .name(USER_2_USERNAME) - .tags(new String[]{}) - .build(); + public final at.ac.tuwien.ifs.dbrepo.core.api.amqp.UserDetailsDto USER_2_DETAILS_DTO = + at.ac.tuwien.ifs.dbrepo.core.api.amqp.UserDetailsDto.builder() + .name(USER_2_USERNAME) + .tags(new String[]{}) + .build(); - public static final Principal USER_2_PRINCIPAL = new UsernamePasswordAuthenticationToken(USER_2_DETAILS, + public final Principal USER_2_PRINCIPAL = new UsernamePasswordAuthenticationToken(USER_2_DETAILS, USER_2_PASSWORD, USER_2_DETAILS.getAuthorities()); - public static final UUID USER_3_ID = UUID.fromString("7b080e33-d8db-4276-9d53-47208e657006"); - public static final UUID USER_3_KEYCLOAK_ID = UUID.fromString("b0108bc3-95aa-4a3f-8868-dc301286aeca"); - public static final String USER_3_USERNAME = "junit3"; - public static final String USER_3_FIRSTNAME = "System"; - public static final String USER_3_LASTNAME = "System"; - public static final String USER_3_NAME = "System System"; - public static final String USER_3_AFFILIATION = "TU Wien"; - public static final String USER_3_ORCID_URL = null; - public static final String USER_3_ORCID_UNCOMPRESSED = null; + public final static UUID USER_3_ID = UUID.fromString("7b080e33-d8db-4276-9d53-47208e657006"); + public final static UUID USER_3_KEYCLOAK_ID = UUID.fromString("b0108bc3-95aa-4a3f-8868-dc301286aeca"); + public final static String USER_3_USERNAME = "junit3"; + public final static String USER_3_FIRSTNAME = "System"; + public final static String USER_3_LASTNAME = "System"; + public final static String USER_3_NAME = "System System"; + public final static String USER_3_AFFILIATION = "TU Wien"; + public final static String USER_3_ORCID_URL = null; @SuppressWarnings("java:S2068") - public static final String USER_3_PASSWORD = "password"; + public final static String USER_3_PASSWORD = "password"; @SuppressWarnings("java:S2068") - public static final String USER_3_DATABASE_PASSWORD = "*D65FCA043964B63E849DD6334699ECB065905DA4" /* junit3 */; - public static final String USER_3_QUALIFIED_NAME = USER_3_FIRSTNAME + " " + USER_3_LASTNAME + " — @" + USER_3_USERNAME; - public static final Boolean USER_3_IS_INTERNAL = false; - public static final String USER_3_THEME = "light"; + public final static String USER_3_DATABASE_PASSWORD = "*D65FCA043964B63E849DD6334699ECB065905DA4" /* junit3 */; + public final static String USER_3_QUALIFIED_NAME = USER_3_FIRSTNAME + " " + USER_3_LASTNAME + " — @" + USER_3_USERNAME; + public final static Boolean USER_3_IS_INTERNAL = false; + public final static String USER_3_THEME = "light"; - public static final UserAttributesDto USER_3_ATTRIBUTES_DTO = UserAttributesDto.builder() + public final UserAttributesDto USER_3_ATTRIBUTES_DTO = UserAttributesDto.builder() .theme(USER_3_THEME) - .orcid(USER_3_ORCID_UNCOMPRESSED) + .orcid(USER_3_ORCID_URL) .affiliation(USER_3_AFFILIATION) .mariadbPassword(USER_3_DATABASE_PASSWORD) .build(); - public static final User USER_3 = User.builder() + public final User USER_3 = User.builder() .id(USER_3_ID) .keycloakId(USER_3_KEYCLOAK_ID) .username(USER_3_USERNAME) @@ -690,9 +691,10 @@ public abstract class BaseTest { .theme(USER_3_THEME) .mariadbPassword(USER_3_DATABASE_PASSWORD) .isInternal(USER_3_IS_INTERNAL) + .accesses(new LinkedList<>()) .build(); - public static final UserDto USER_3_DTO = UserDto.builder() + public final UserDto USER_3_DTO = UserDto.builder() .id(USER_3_ID) .username(USER_3_USERNAME) .firstname(USER_3_FIRSTNAME) @@ -702,7 +704,7 @@ public abstract class BaseTest { .attributes(USER_3_ATTRIBUTES_DTO) .build(); - public static final UserBriefDto USER_3_BRIEF_DTO = UserBriefDto.builder() + public final UserBriefDto USER_3_BRIEF_DTO = UserBriefDto.builder() .id(USER_3_ID) .username(USER_3_USERNAME) .firstname(USER_3_FIRSTNAME) @@ -711,45 +713,46 @@ public abstract class BaseTest { .qualifiedName(USER_3_QUALIFIED_NAME) .build(); - public static final UserDetails USER_3_DETAILS = UserDetailsDto.builder() + public final UserDetails USER_3_DETAILS = UserDetailsDto.builder() .id(USER_3_ID.toString()) .username(USER_3_USERNAME) .password(USER_3_PASSWORD) .authorities(AUTHORITY_DEFAULT_RESEARCHER_AUTHORITIES) .build(); - public static final Principal USER_3_PRINCIPAL = new UsernamePasswordAuthenticationToken(USER_3_DETAILS, + public final Principal USER_3_PRINCIPAL = new UsernamePasswordAuthenticationToken(USER_3_DETAILS, USER_3_PASSWORD, USER_3_DETAILS.getAuthorities()); - public static final at.tuwien.api.amqp.UserDetailsDto USER_3_DETAILS_DTO = at.tuwien.api.amqp.UserDetailsDto.builder() - .name(USER_3_USERNAME) - .tags(new String[]{}) - .build(); - - public static final UUID USER_4_ID = UUID.fromString("791d58c5-bfab-4520-b4fc-b44d4ab9feb0"); - public static final UUID USER_4_KEYCLOAK_ID = UUID.fromString("25040ad3-6d57-4052-b357-6b4c8a6e7f4d"); - public static final String USER_4_USERNAME = "junit4"; - public static final String USER_4_FIRSTNAME = "JUnit"; - public static final String USER_4_LASTNAME = "4"; - public static final String USER_4_NAME = "JUnit 4"; - public static final String USER_4_AFFILIATION = "TU Wien"; - public static final String USER_4_ORCID_URL = null; + public final at.ac.tuwien.ifs.dbrepo.core.api.amqp.UserDetailsDto USER_3_DETAILS_DTO = + at.ac.tuwien.ifs.dbrepo.core.api.amqp.UserDetailsDto.builder() + .name(USER_3_USERNAME) + .tags(new String[]{}) + .build(); + + public final static UUID USER_4_ID = UUID.fromString("791d58c5-bfab-4520-b4fc-b44d4ab9feb0"); + public final static UUID USER_4_KEYCLOAK_ID = UUID.fromString("25040ad3-6d57-4052-b357-6b4c8a6e7f4d"); + public final static String USER_4_USERNAME = "junit4"; + public final static String USER_4_FIRSTNAME = "JUnit"; + public final static String USER_4_LASTNAME = "4"; + public final static String USER_4_NAME = "JUnit 4"; + public final static String USER_4_AFFILIATION = "TU Wien"; + public final static String USER_4_ORCID_URL = null; @SuppressWarnings("java:S2068") - public static final String USER_4_PASSWORD = "junit4"; + public final static String USER_4_PASSWORD = "junit4"; @SuppressWarnings("java:S2068") - public static final String USER_4_DATABASE_PASSWORD = "*C20EF5C6875857DEFA9BE6E9B62DD76AAAE51882" /* junit4 */; - public static final String USER_4_QUALIFIED_NAME = USER_4_FIRSTNAME + " " + USER_4_LASTNAME + " — @" + USER_4_USERNAME; - public static final Boolean USER_4_IS_INTERNAL = false; - public static final String USER_4_THEME = "light"; + public final static String USER_4_DATABASE_PASSWORD = "*C20EF5C6875857DEFA9BE6E9B62DD76AAAE51882" /* junit4 */; + public final static String USER_4_QUALIFIED_NAME = USER_4_FIRSTNAME + " " + USER_4_LASTNAME + " — @" + USER_4_USERNAME; + public final static Boolean USER_4_IS_INTERNAL = false; + public final static String USER_4_THEME = "light"; - public static final UserAttributesDto USER_4_ATTRIBUTES_DTO = UserAttributesDto.builder() + public final UserAttributesDto USER_4_ATTRIBUTES_DTO = UserAttributesDto.builder() .theme(USER_4_THEME) .orcid(USER_4_ORCID_URL) .affiliation(USER_4_AFFILIATION) .mariadbPassword(USER_4_DATABASE_PASSWORD) .build(); - public static final User USER_4 = User.builder() + public final User USER_4 = User.builder() .id(USER_4_ID) .keycloakId(USER_4_KEYCLOAK_ID) .username(USER_4_USERNAME) @@ -760,9 +763,10 @@ public abstract class BaseTest { .theme(USER_4_THEME) .mariadbPassword(USER_4_DATABASE_PASSWORD) .isInternal(USER_4_IS_INTERNAL) + .accesses(new LinkedList<>()) .build(); - public static final UserDto USER_4_DTO = UserDto.builder() + public final UserDto USER_4_DTO = UserDto.builder() .id(USER_4_ID) .username(USER_4_USERNAME) .firstname(USER_4_FIRSTNAME) @@ -772,7 +776,7 @@ public abstract class BaseTest { .qualifiedName(USER_4_QUALIFIED_NAME) .build(); - public static final UserBriefDto USER_4_BRIEF_DTO = UserBriefDto.builder() + public final UserBriefDto USER_4_BRIEF_DTO = UserBriefDto.builder() .id(USER_4_ID) .username(USER_4_USERNAME) .firstname(USER_4_FIRSTNAME) @@ -781,38 +785,38 @@ public abstract class BaseTest { .qualifiedName(USER_4_QUALIFIED_NAME) .build(); - public static final UserDetails USER_4_DETAILS = UserDetailsDto.builder() + public final UserDetails USER_4_DETAILS = UserDetailsDto.builder() .id(USER_4_ID.toString()) .username(USER_4_USERNAME) .password(USER_4_PASSWORD) .authorities(new LinkedList<>()) .build(); - public static final Principal USER_4_PRINCIPAL = new UsernamePasswordAuthenticationToken(USER_4_DETAILS, + public final Principal USER_4_PRINCIPAL = new UsernamePasswordAuthenticationToken(USER_4_DETAILS, USER_4_PASSWORD, USER_4_DETAILS.getAuthorities()); - public static final UUID USER_5_ID = UUID.fromString("28ff851d-d7bc-4422-959c-edd7a5b15630"); - public static final UUID USER_5_KEYCLOAK_ID = UUID.fromString("28ff851d-d7bc-4422-959c-edd7a5b15630"); - public static final String USER_5_USERNAME = "nobody"; - public static final String USER_5_FIRSTNAME = "No"; - public static final String USER_5_LASTNAME = "Body"; - public static final String USER_5_NAME = "No Body"; - public static final String USER_5_AFFILIATION = "TU Wien"; + public final static UUID USER_5_ID = UUID.fromString("28ff851d-d7bc-4422-959c-edd7a5b15630"); + public final static UUID USER_5_KEYCLOAK_ID = UUID.fromString("28ff851d-d7bc-4422-959c-edd7a5b15630"); + public final static String USER_5_USERNAME = "nobody"; + public final static String USER_5_FIRSTNAME = "No"; + public final static String USER_5_LASTNAME = "Body"; + public final static String USER_5_NAME = "No Body"; + public final static String USER_5_AFFILIATION = "TU Wien"; @SuppressWarnings("java:S2068") - public static final String USER_5_PASSWORD = "junit5"; + public final static String USER_5_PASSWORD = "junit5"; @SuppressWarnings("java:S2068") - public static final String USER_5_DATABASE_PASSWORD = "*C20EF5C6875857DEFA9BE6E9B62DD76AAAE51882" /* junit5 */; - public static final String USER_5_QUALIFIED_NAME = USER_5_FIRSTNAME + " " + USER_5_LASTNAME + " — @" + USER_5_USERNAME; - public static final Boolean USER_5_IS_INTERNAL = false; - public static final String USER_5_THEME = "dark"; + public final static String USER_5_DATABASE_PASSWORD = "*C20EF5C6875857DEFA9BE6E9B62DD76AAAE51882" /* junit5 */; + public final static String USER_5_QUALIFIED_NAME = USER_5_FIRSTNAME + " " + USER_5_LASTNAME + " — @" + USER_5_USERNAME; + public final static Boolean USER_5_IS_INTERNAL = false; + public final static String USER_5_THEME = "dark"; - public static final UserAttributesDto USER_5_ATTRIBUTES_DTO = UserAttributesDto.builder() + public final UserAttributesDto USER_5_ATTRIBUTES_DTO = UserAttributesDto.builder() .theme(USER_5_THEME) .affiliation(USER_5_AFFILIATION) .mariadbPassword(USER_5_DATABASE_PASSWORD) .build(); - public static final UserDto USER_5_DTO = UserDto.builder() + public final UserDto USER_5_DTO = UserDto.builder() .id(USER_5_ID) .username(USER_5_USERNAME) .firstname(USER_5_FIRSTNAME) @@ -822,7 +826,7 @@ public abstract class BaseTest { .attributes(USER_5_ATTRIBUTES_DTO) .build(); - public static final UserBriefDto USER_5_BRIEF_DTO = UserBriefDto.builder() + public final UserBriefDto USER_5_BRIEF_DTO = UserBriefDto.builder() .id(USER_5_ID) .username(USER_5_USERNAME) .firstname(USER_5_FIRSTNAME) @@ -830,17 +834,17 @@ public abstract class BaseTest { .qualifiedName(USER_5_QUALIFIED_NAME) .build(); - public static final UserDetails USER_5_DETAILS = UserDetailsDto.builder() + public final UserDetails USER_5_DETAILS = UserDetailsDto.builder() .id(USER_5_ID.toString()) .username(USER_5_USERNAME) .password(USER_5_PASSWORD) .authorities(AUTHORITY_DEFAULT_DEVELOPER_AUTHORITIES) .build(); - public static final Principal USER_5_PRINCIPAL = new UsernamePasswordAuthenticationToken(USER_5_DETAILS, + public final Principal USER_5_PRINCIPAL = new UsernamePasswordAuthenticationToken(USER_5_DETAILS, USER_5_PASSWORD, USER_5_DETAILS.getAuthorities()); - public static final User USER_5 = User.builder() + public final User USER_5 = User.builder() .id(USER_5_ID) .keycloakId(USER_5_KEYCLOAK_ID) .username(USER_5_USERNAME) @@ -850,111 +854,124 @@ public abstract class BaseTest { .theme(USER_5_THEME) .mariadbPassword(USER_5_DATABASE_PASSWORD) .isInternal(USER_5_IS_INTERNAL) + .accesses(new LinkedList<>()) .build(); - public static final UUID USER_6_ID = UUID.fromString("28ff851d-d7bc-4422-959c-edd7a5b15630"); - public static final String USER_6_USERNAME = "system"; - public static final String USER_6_FIRSTNAME = "System"; - public static final String USER_6_LASTNAME = "System"; - public static final String USER_6_NAME = "System System"; - public static final String USER_6_AFFILIATION = "TU Wien"; - public static final String USER_6_ORCID = null; + public final static UUID USER_6_ID = UUID.fromString("28ff851d-d7bc-4422-959c-edd7a5b15630"); + public final static UUID USER_6_KEYCLOAK_ID = UUID.fromString("0fddf102-8958-4223-8653-5d4dc51b3a18"); + public final static String USER_6_USERNAME = "system"; + public final static String USER_6_FIRSTNAME = "System"; + public final static String USER_6_LASTNAME = "System"; + public final static String USER_6_NAME = "System System"; + public final static String USER_6_AFFILIATION = "TU Wien"; + public final static String USER_6_ORCID = null; @SuppressWarnings("java:S2068") - public static final String USER_6_PASSWORD = "junit5"; + public final static String USER_6_PASSWORD = "junit5"; @SuppressWarnings("java:S2068") - public static final String USER_6_DATABASE_PASSWORD = "*C20EF5C6875857DEFA9BE6E9B62DD76AAAE51882" /* junit5 */; - public static final Boolean USER_6_VERIFIED = true; - public static final Boolean USER_6_ENABLED = true; - public static final Boolean USER_6_IS_INTERNAL = false; - public static final Boolean USER_6_THEME_DARK = false; - public static final Instant USER_6_CREATED = Instant.ofEpochSecond(1677399592L) /* 2023-02-26 08:19:52 (UTC) */; - public static final UUID USER_6_REALM_ID = REALM_DBREPO_ID; - - public static final UserDto USER_6_DTO = UserDto.builder() + public final static String USER_6_DATABASE_PASSWORD = "*C20EF5C6875857DEFA9BE6E9B62DD76AAAE51882" /* junit5 */; + public final static Boolean USER_6_VERIFIED = true; + public final static Boolean USER_6_ENABLED = true; + public final static Boolean USER_6_IS_INTERNAL = false; + public final static String USER_6_THEME = "light"; + public final static Instant USER_6_CREATED = Instant.ofEpochSecond(1677399592L) /* 2023-02-26 08:19:52 (UTC) */; + + public final User USER_6 = User.builder() + .id(USER_6_ID) + .keycloakId(USER_6_KEYCLOAK_ID) + .username(USER_6_USERNAME) + .firstname(USER_6_FIRSTNAME) + .lastname(USER_6_LASTNAME) + .affiliation(USER_6_AFFILIATION) + .theme(USER_6_THEME) + .mariadbPassword(USER_6_DATABASE_PASSWORD) + .isInternal(USER_6_IS_INTERNAL) + .accesses(new LinkedList<>()) + .build(); + + public final UserDto USER_6_DTO = UserDto.builder() .id(USER_6_ID) .username(USER_6_USERNAME) .firstname(USER_6_FIRSTNAME) .lastname(USER_6_LASTNAME) .build(); - public static final UserDetails USER_6_DETAILS = UserDetailsDto.builder() + public final UserDetails USER_6_DETAILS = UserDetailsDto.builder() .id(USER_6_ID.toString()) .username(USER_6_USERNAME) .password(USER_6_PASSWORD) .authorities(AUTHORITY_DEFAULT_RESEARCHER_AUTHORITIES) .build(); - public static final Principal USER_6_PRINCIPAL = new UsernamePasswordAuthenticationToken(USER_6_DETAILS, + public final Principal USER_6_PRINCIPAL = new UsernamePasswordAuthenticationToken(USER_6_DETAILS, USER_6_PASSWORD, USER_6_DETAILS.getAuthorities()); - public static final UUID IMAGE_1_ID = UUID.fromString("e5449ade-acc1-4ba4-8858-e3496cdecd9c"); - public static final String IMAGE_1_REGISTRY = "docker.io"; - public static final String IMAGE_1_NAME = "mariadb"; - public static final String IMAGE_1_VERSION = "11.1.3"; - public static final String IMAGE_1_DIALECT = "org.hibernate.dialect.MariaDBDialect"; - public static final String IMAGE_1_DRIVER = "org.mariadb.jdbc.Driver"; - public static final String IMAGE_1_JDBC = "mariadb"; - public static final Integer IMAGE_1_PORT = 3306; - public static final Boolean IMAGE_1_IS_DEFAULT = true; - - public static final ImageCreateDto IMAGE_1_CREATE_DTO = ImageCreateDto.builder() + public final static UUID IMAGE_1_ID = UUID.fromString("e5449ade-acc1-4ba4-8858-e3496cdecd9c"); + public final static String IMAGE_1_REGISTRY = "docker.io"; + public final static String IMAGE_1_NAME = "mariadb"; + public final static String IMAGE_1_VERSION = "11.1.3"; + public final static String IMAGE_1_DIALECT = "org.hibernate.dialect.MariaDBDialect"; + public final static String IMAGE_1_DRIVER = "org.mariadb.jdbc.Driver"; + public final static String IMAGE_1_JDBC_METHOD = "mariadb"; + public final static Integer IMAGE_1_DEFAULT_PORT = 3306; + public final static Boolean IMAGE_1_IS_DEFAULT = true; + + public final ImageCreateDto IMAGE_1_CREATE_DTO = ImageCreateDto.builder() .registry(IMAGE_1_REGISTRY) .name(IMAGE_1_NAME) .version(IMAGE_1_VERSION) .dialect(IMAGE_1_DIALECT) - .jdbcMethod(IMAGE_1_JDBC) + .jdbcMethod(IMAGE_1_JDBC_METHOD) .driverClass(IMAGE_1_DRIVER) - .defaultPort(IMAGE_1_PORT) + .defaultPort(IMAGE_1_DEFAULT_PORT) .build(); - public static final ImageChangeDto IMAGE_1_CHANGE_DTO = ImageChangeDto.builder() + public final ImageChangeDto IMAGE_1_CHANGE_DTO = ImageChangeDto.builder() .registry(IMAGE_1_REGISTRY) .dialect(IMAGE_1_DIALECT) - .jdbcMethod(IMAGE_1_JDBC) + .jdbcMethod(IMAGE_1_JDBC_METHOD) .driverClass(IMAGE_1_DRIVER) - .defaultPort(IMAGE_1_PORT) + .defaultPort(IMAGE_1_DEFAULT_PORT) .build(); - public static final ContainerImage IMAGE_1 = ContainerImage.builder() + public final ContainerImage IMAGE_1 = ContainerImage.builder() .id(IMAGE_1_ID) .name(IMAGE_1_NAME) .registry(IMAGE_1_REGISTRY) .version(IMAGE_1_VERSION) .dialect(IMAGE_1_DIALECT) - .jdbcMethod(IMAGE_1_JDBC) + .jdbcMethod(IMAGE_1_JDBC_METHOD) .driverClass(IMAGE_1_DRIVER) - .defaultPort(IMAGE_1_PORT) + .defaultPort(IMAGE_1_DEFAULT_PORT) .isDefault(IMAGE_1_IS_DEFAULT) - .operators(new LinkedList<>()) /* IMAGE_1_OPERATORS */ + .operators(null) .build(); - public static final ImageDto IMAGE_1_DTO = ImageDto.builder() + public final ImageDto IMAGE_1_DTO = ImageDto.builder() .id(IMAGE_1_ID) .name(IMAGE_1_NAME) .version(IMAGE_1_VERSION) .isDefault(IMAGE_1_IS_DEFAULT) - .jdbcMethod(IMAGE_1_JDBC) + .jdbcMethod(IMAGE_1_JDBC_METHOD) .operators(null) /* IMAGE_1_OPERATORS_DTO */ .build(); - public static final ImageBriefDto IMAGE_1_BRIEF_DTO = ImageBriefDto.builder() + public final ImageBriefDto IMAGE_1_BRIEF_DTO = ImageBriefDto.builder() .id(IMAGE_1_ID) .name(IMAGE_1_NAME) .version(IMAGE_1_VERSION) .isDefault(IMAGE_1_IS_DEFAULT) .build(); - public static final UUID IMAGE_1_OPERATORS_1_ID = UUID.fromString("42a56348-38bd-4aba-b0f2-ac813d5d2da1"); - public static final String IMAGE_1_OPERATORS_1_DISPLAY_NAME = "XOR"; - public static final String IMAGE_1_OPERATORS_1_VALUE = "XOR"; - public static final String IMAGE_1_OPERATORS_1_DOCUMENTATION = "https://mariadb.com/kb/en/xor/"; + public final static UUID IMAGE_1_OPERATORS_1_ID = UUID.fromString("42a56348-38bd-4aba-b0f2-ac813d5d2da1"); + public final static String IMAGE_1_OPERATORS_1_DISPLAY_NAME = "XOR"; + public final static String IMAGE_1_OPERATORS_1_VALUE = "XOR"; + public final static String IMAGE_1_OPERATORS_1_DOCUMENTATION = "https://mariadb.com/kb/en/xor/"; + public final static UUID IMAGE_1_OPERATORS_2_ID = UUID.fromString("42a56348-38bd-4aba-b0f2-ac813d5d2da2"); + public final static String IMAGE_1_OPERATORS_2_DISPLAY_NAME = "="; + public final static String IMAGE_1_OPERATORS_2_VALUE = "="; + public final static String IMAGE_1_OPERATORS_2_DOCUMENTATION = "https://mariadb.com/kb/en/equal/"; - public static final UUID IMAGE_1_OPERATORS_2_ID = UUID.fromString("42a56348-38bd-4aba-b0f2-ac813d5d2da2"); - public static final String IMAGE_1_OPERATORS_2_DISPLAY_NAME = "="; - public static final String IMAGE_1_OPERATORS_2_VALUE = "="; - public static final String IMAGE_1_OPERATORS_2_DOCUMENTATION = "https://mariadb.com/kb/en/equal/"; - - public static final List<Operator> IMAGE_1_OPERATORS = new LinkedList<>(List.of( + public final List<Operator> IMAGE_1_OPERATORS = new LinkedList<>(List.of( Operator.builder() .id(IMAGE_1_OPERATORS_1_ID) .image(IMAGE_1) @@ -970,7 +987,7 @@ public abstract class BaseTest { .documentation(IMAGE_1_OPERATORS_2_DOCUMENTATION) .build())); - public static final List<OperatorDto> IMAGE_1_OPERATORS_DTO = new LinkedList<>(List.of( + public final List<OperatorDto> IMAGE_1_OPERATORS_DTO = new LinkedList<>(List.of( OperatorDto.builder() .id(IMAGE_1_OPERATORS_1_ID) .displayName(IMAGE_1_OPERATORS_1_DISPLAY_NAME) @@ -984,25 +1001,25 @@ public abstract class BaseTest { .documentation(IMAGE_1_OPERATORS_2_DOCUMENTATION) .build())); - public static final UUID CONTAINER_1_ID = UUID.fromString("7ddb7e87-b965-43a2-9a24-4fa406d998f4"); - public static final String CONTAINER_1_NAME = "u01"; - public static final String CONTAINER_1_INTERNALNAME = "dbrepo-userdb-u01"; - public static final String CONTAINER_1_UI_HOST = "localhost"; - public static final Integer CONTAINER_1_UI_PORT = 3306; - public static final String CONTAINER_1_UI_ADDITIONAL_FLAGS = "?sslMode=disable"; - public static final Integer CONTAINER_1_QUOTA = 4; - public static final Integer CONTAINER_1_COUNT = 3; - public static final String CONTAINER_1_HOST = "localhost"; - public static final Integer CONTAINER_1_PORT = 3308; - public static final String CONTAINER_1_PRIVILEGED_USERNAME = "root"; + public final static UUID CONTAINER_1_ID = UUID.fromString("7ddb7e87-b965-43a2-9a24-4fa406d998f4"); + public final static String CONTAINER_1_NAME = "u01"; + public final static String CONTAINER_1_INTERNAL_NAME = "dbrepo-userdb-u01"; + public final static String CONTAINER_1_UI_HOST = "localhost"; + public final static Integer CONTAINER_1_UI_PORT = 3306; + public final static String CONTAINER_1_UI_ADDITIONAL_FLAGS = "?sslMode=disable"; + public final static Integer CONTAINER_1_QUOTA = 4; + public final static Integer CONTAINER_1_COUNT = 3; + public final static String CONTAINER_1_HOST = "localhost"; + public final static Integer CONTAINER_1_PORT = 3308; + public final static String CONTAINER_1_PRIVILEGED_USERNAME = "root"; @SuppressWarnings("java:S2068") - public static final String CONTAINER_1_PRIVILEGED_PASSWORD = "dbrepo"; - public static final Instant CONTAINER_1_CREATED = Instant.ofEpochSecond(1677399629L) /* 2023-02-26 08:20:29 (UTC) */; + public final static String CONTAINER_1_PRIVILEGED_PASSWORD = "dbrepo"; + public final static Instant CONTAINER_1_CREATED = Instant.ofEpochSecond(1677399629L) /* 2023-02-26 08:20:29 (UTC) */; - public static final Container CONTAINER_1 = Container.builder() + public final Container CONTAINER_1 = Container.builder() .id(CONTAINER_1_ID) .name(CONTAINER_1_NAME) - .internalName(CONTAINER_1_INTERNALNAME) + .internalName(CONTAINER_1_INTERNAL_NAME) .image(IMAGE_1) .created(CONTAINER_1_CREATED) .host(CONTAINER_1_HOST) @@ -1013,31 +1030,31 @@ public abstract class BaseTest { .uiAdditionalFlags(CONTAINER_1_UI_ADDITIONAL_FLAGS) .privilegedUsername(CONTAINER_1_PRIVILEGED_USERNAME) .privilegedPassword(CONTAINER_1_PRIVILEGED_PASSWORD) - .databases(null) /* DATABASE_1, DATABASE_2, DATABASE_3 */ + .databases(new LinkedList<>()) .build(); - public static final ContainerDto CONTAINER_1_DTO = ContainerDto.builder() + public final ContainerDto CONTAINER_1_DTO = ContainerDto.builder() .id(CONTAINER_1_ID) .name(CONTAINER_1_NAME) - .internalName(CONTAINER_1_INTERNALNAME) + .internalName(CONTAINER_1_INTERNAL_NAME) .image(IMAGE_1_DTO) .host(CONTAINER_1_HOST) .port(CONTAINER_1_PORT) .build(); - public static final ContainerBriefDto CONTAINER_1_BRIEF_DTO = ContainerBriefDto.builder() + public final ContainerBriefDto CONTAINER_1_BRIEF_DTO = ContainerBriefDto.builder() .id(CONTAINER_1_ID) .name(CONTAINER_1_NAME) - .internalName(CONTAINER_1_INTERNALNAME) + .internalName(CONTAINER_1_INTERNAL_NAME) .quota(CONTAINER_1_QUOTA) .count(CONTAINER_1_COUNT) .image(IMAGE_1_BRIEF_DTO) .build(); - public static final ContainerDto CONTAINER_1_PRIVILEGED_DTO = ContainerDto.builder() + public final ContainerDto CONTAINER_1_PRIVILEGED_DTO = ContainerDto.builder() .id(CONTAINER_1_ID) .name(CONTAINER_1_NAME) - .internalName(CONTAINER_1_INTERNALNAME) + .internalName(CONTAINER_1_INTERNAL_NAME) .image(IMAGE_1_DTO) .host(CONTAINER_1_HOST) .port(CONTAINER_1_PORT) @@ -1046,25 +1063,23 @@ public abstract class BaseTest { .password(CONTAINER_1_PRIVILEGED_PASSWORD) .build(); - public static final UUID CONTAINER_2_ID = UUID.fromString("c2ec601e-2bfb-4be8-8891-0cb804a08d4a"); - public static final ContainerImage CONTAINER_2_IMAGE = IMAGE_1; - public static final ImageDto CONTAINER_2_IMAGE_DTO = IMAGE_1_DTO; - public static final String CONTAINER_2_NAME = "u02"; - public static final String CONTAINER_2_INTERNALNAME = "dbrepo-userdb-u02"; - public static final String CONTAINER_2_HOST = "localhost"; - public static final Integer CONTAINER_2_PORT = 3309; - public static final Integer CONTAINER_2_QUOTA = 3; - public static final Integer CONTAINER_2_COUNT = 3; - public static final String CONTAINER_2_PRIVILEGED_USERNAME = "root"; + public final static UUID CONTAINER_2_ID = UUID.fromString("c2ec601e-2bfb-4be8-8891-0cb804a08d4a"); + public final static String CONTAINER_2_NAME = "u02"; + public final static String CONTAINER_2_INTERNAL_NAME = "dbrepo-userdb-u02"; + public final static String CONTAINER_2_HOST = "localhost"; + public final static Integer CONTAINER_2_PORT = 3309; + public final static Integer CONTAINER_2_QUOTA = 3; + public final static Integer CONTAINER_2_COUNT = 3; + public final static String CONTAINER_2_PRIVILEGED_USERNAME = "root"; @SuppressWarnings("java:S2068") - public static final String CONTAINER_2_PRIVILEGED_PASSWORD = "dbrepo"; - public static final Instant CONTAINER_2_CREATED = Instant.ofEpochSecond(1677399655L) /* 2023-02-26 08:20:55 (UTC) */; + public final static String CONTAINER_2_PRIVILEGED_PASSWORD = "dbrepo"; + public final static Instant CONTAINER_2_CREATED = Instant.ofEpochSecond(1677399655L) /* 2023-02-26 08:20:55 (UTC) */; - public static final Container CONTAINER_2 = Container.builder() + public final Container CONTAINER_2 = Container.builder() .id(CONTAINER_2_ID) .name(CONTAINER_2_NAME) - .internalName(CONTAINER_2_INTERNALNAME) - .image(CONTAINER_2_IMAGE) + .internalName(CONTAINER_2_INTERNAL_NAME) + .image(IMAGE_1) .created(CONTAINER_2_CREATED) .host(CONTAINER_2_HOST) .port(CONTAINER_2_PORT) @@ -1074,27 +1089,27 @@ public abstract class BaseTest { .privilegedPassword(CONTAINER_2_PRIVILEGED_PASSWORD) .build(); - public static final ContainerDto CONTAINER_2_DTO = ContainerDto.builder() + public final ContainerDto CONTAINER_2_DTO = ContainerDto.builder() .id(CONTAINER_2_ID) .name(CONTAINER_2_NAME) - .internalName(CONTAINER_2_INTERNALNAME) - .image(CONTAINER_2_IMAGE_DTO) + .internalName(CONTAINER_2_INTERNAL_NAME) + .image(IMAGE_1_DTO) .host(CONTAINER_2_HOST) .port(CONTAINER_2_PORT) .build(); - public static final ContainerBriefDto CONTAINER_2_DTO_BRIEF = ContainerBriefDto.builder() + public final ContainerBriefDto CONTAINER_2_DTO_BRIEF = ContainerBriefDto.builder() .id(CONTAINER_2_ID) .name(CONTAINER_2_NAME) - .internalName(CONTAINER_2_INTERNALNAME) + .internalName(CONTAINER_2_INTERNAL_NAME) .quota(CONTAINER_2_QUOTA) .build(); - public static final ContainerDto CONTAINER_2_PRIVILEGED_DTO = ContainerDto.builder() + public final ContainerDto CONTAINER_2_PRIVILEGED_DTO = ContainerDto.builder() .id(CONTAINER_2_ID) .name(CONTAINER_2_NAME) - .internalName(CONTAINER_2_INTERNALNAME) - .image(CONTAINER_2_IMAGE_DTO) + .internalName(CONTAINER_2_INTERNAL_NAME) + .image(IMAGE_1_DTO) .host(CONTAINER_2_HOST) .port(CONTAINER_2_PORT) .lastRetrieved(Instant.now()) @@ -1102,49 +1117,47 @@ public abstract class BaseTest { .password(CONTAINER_2_PRIVILEGED_PASSWORD) .build(); - public static final UUID CONTAINER_3_ID = UUID.fromString("1731c7d2-8bd1-4392-85bc-18a3be99e01d"); - public static final ContainerImage CONTAINER_3_IMAGE = IMAGE_1; - public static final String CONTAINER_3_NAME = "u03"; - public static final String CONTAINER_3_INTERNALNAME = "dbrepo-userdb-u03"; - public static final String CONTAINER_3_HOST = "localhost"; - public static final Integer CONTAINER_3_PORT = 3310; - public static final Integer CONTAINER_3_QUOTA = 20; - public static final String CONTAINER_3_PRIVILEGED_USERNAME = "root"; + public final static UUID CONTAINER_3_ID = UUID.fromString("1731c7d2-8bd1-4392-85bc-18a3be99e01d"); + public final static String CONTAINER_3_NAME = "u03"; + public final static String CONTAINER_3_INTERNAL_NAME = "dbrepo-userdb-u03"; + public final static String CONTAINER_3_HOST = "localhost"; + public final static Integer CONTAINER_3_PORT = 3310; + public final static Integer CONTAINER_3_QUOTA = 20; + public final static String CONTAINER_3_PRIVILEGED_USERNAME = "root"; @SuppressWarnings("java:S2068") - public static final String CONTAINER_3_PRIVILEGED_PASSWORD = "dbrepo"; - public static final Instant CONTAINER_3_CREATED = Instant.ofEpochSecond(1677399672L) /* 2023-02-26 08:21:12 (UTC) */; + public final static String CONTAINER_3_PRIVILEGED_PASSWORD = "dbrepo"; + public final static Instant CONTAINER_3_CREATED = Instant.ofEpochSecond(1677399672L) /* 2023-02-26 08:21:12 (UTC) */; - public static final Container CONTAINER_3 = Container.builder() + public final Container CONTAINER_3 = Container.builder() .id(CONTAINER_3_ID) .name(CONTAINER_3_NAME) - .internalName(CONTAINER_3_INTERNALNAME) - .image(CONTAINER_3_IMAGE) + .internalName(CONTAINER_3_INTERNAL_NAME) + .image(IMAGE_1) .created(CONTAINER_3_CREATED) .host(CONTAINER_3_HOST) .port(CONTAINER_3_PORT) .quota(CONTAINER_3_QUOTA) - .databases(new LinkedList<>(List.of())) + .databases(new LinkedList<>()) .privilegedUsername(CONTAINER_3_PRIVILEGED_USERNAME) .privilegedPassword(CONTAINER_3_PRIVILEGED_PASSWORD) .build(); - public static final UUID CONTAINER_4_ID = UUID.fromString("67aee75c-791c-410b-abbb-175c11ddd252"); - public static final ContainerImage CONTAINER_4_IMAGE = IMAGE_1; - public static final String CONTAINER_4_NAME = "u04"; - public static final String CONTAINER_4_INTERNALNAME = "dbrepo-userdb-u04"; - public static final String CONTAINER_4_HOST = "localhost"; - public static final Integer CONTAINER_4_PORT = 3311; - public static final Integer CONTAINER_4_QUOTA = 0; - public static final String CONTAINER_4_PRIVILEGED_USERNAME = "root"; + public final static UUID CONTAINER_4_ID = UUID.fromString("67aee75c-791c-410b-abbb-175c11ddd252"); + public final static String CONTAINER_4_NAME = "u04"; + public final static String CONTAINER_4_INTERNAL_NAME = "dbrepo-userdb-u04"; + public final static String CONTAINER_4_HOST = "localhost"; + public final static Integer CONTAINER_4_PORT = 3311; + public final static Integer CONTAINER_4_QUOTA = 0; + public final static String CONTAINER_4_PRIVILEGED_USERNAME = "root"; @SuppressWarnings("java:S2068") - public static final String CONTAINER_4_PRIVILEGED_PASSWORD = "dbrepo"; - public static final Instant CONTAINER_4_CREATED = Instant.ofEpochSecond(1677399688L) /* 2023-02-26 08:21:28 (UTC) */; + public final static String CONTAINER_4_PRIVILEGED_PASSWORD = "dbrepo"; + public final static Instant CONTAINER_4_CREATED = Instant.ofEpochSecond(1677399688L) /* 2023-02-26 08:21:28 (UTC) */; - public static final Container CONTAINER_4 = Container.builder() + public final Container CONTAINER_4 = Container.builder() .id(CONTAINER_4_ID) .name(CONTAINER_4_NAME) - .internalName(CONTAINER_4_INTERNALNAME) - .image(CONTAINER_4_IMAGE) + .internalName(CONTAINER_4_INTERNAL_NAME) + .image(IMAGE_1) .created(CONTAINER_4_CREATED) .host(CONTAINER_4_HOST) .port(CONTAINER_4_PORT) @@ -1154,14 +1167,14 @@ public abstract class BaseTest { .databases(null) /* DATABASE_4 */ .build(); - public static final String EXCHANGE_DBREPO_NAME = "dbrepo"; - public static final Boolean EXCHANGE_DBREPO_AUTO_DELETE = true; - public static final Boolean EXCHANGE_DBREPO_DURABLE = true; - public static final Boolean EXCHANGE_DBREPO_INTERNAL = true; - public static final String EXCHANGE_DBREPO_TYPE = "topic"; - public static final String EXCHANGE_DBREPO_VHOST = "dbrepo"; + public final static String EXCHANGE_DBREPO_NAME = "dbrepo"; + public final static Boolean EXCHANGE_DBREPO_AUTO_DELETE = true; + public final static Boolean EXCHANGE_DBREPO_DURABLE = true; + public final static Boolean EXCHANGE_DBREPO_INTERNAL = true; + public final static String EXCHANGE_DBREPO_TYPE = "topic"; + public final static String EXCHANGE_DBREPO_VHOST = "dbrepo"; - public static final ExchangeDto EXCHANGE_DBREPO_DTO = ExchangeDto.builder() + public final ExchangeDto EXCHANGE_DBREPO_DTO = ExchangeDto.builder() .autoDelete(EXCHANGE_DBREPO_AUTO_DELETE) .type(EXCHANGE_DBREPO_TYPE) .name(EXCHANGE_DBREPO_NAME) @@ -1170,25 +1183,26 @@ public abstract class BaseTest { .internal(EXCHANGE_DBREPO_INTERNAL) .build(); - public static final UUID DATABASE_1_ID = UUID.fromString("b3bcb5bf-4f88-40e2-9726-9b0d2ee2b425"); - public static final String DATABASE_1_NAME = "Weather"; - public static final String DATABASE_1_DESCRIPTION = "Weather in Australia"; - public static final String DATABASE_1_INTERNALNAME = "weather"; - public static final Boolean DATABASE_1_PUBLIC = false; - public static final Boolean DATABASE_1_SCHEMA_PUBLIC = false; - public static final String DATABASE_1_EXCHANGE = "dbrepo"; - public static final Instant DATABASE_1_CREATED = Instant.ofEpochSecond(1677399741L) /* 2023-02-26 08:22:21 (UTC) */; - public static final Instant DATABASE_1_LAST_MODIFIED = Instant.ofEpochSecond(1677399741L) /* 2023-02-26 08:22:21 (UTC) */; - public static final UUID DATABASE_1_CREATED_BY = USER_1_ID; + public final static UUID DATABASE_1_ID = UUID.fromString("b3bcb5bf-4f88-40e2-9726-9b0d2ee2b425"); + public final static String DATABASE_1_NAME = "Weather"; + public final static String DATABASE_1_DESCRIPTION = "Weather in Australia"; + public final static String DATABASE_1_INTERNAL_NAME = "weather"; + public final static Boolean DATABASE_1_PUBLIC = false; + public final static Boolean DATABASE_1_SCHEMA_PUBLIC = false; + public final static Boolean DATABASE_1_DASHBOARD_ENABLED = false; + public final static String DATABASE_1_DASHBOARD_UID = "730f0bdde6cf1b"; + public final static String DATABASE_1_EXCHANGE = "dbrepo"; + public final static Instant DATABASE_1_CREATED = Instant.ofEpochSecond(1677399741L) /* 2023-02-26 08:22:21 (UTC) */; + public final static Instant DATABASE_1_LAST_MODIFIED = Instant.ofEpochSecond(1677399741L) /* 2023-02-26 08:22:21 (UTC) */; - public static final CreateDatabaseDto DATABASE_1_CREATE = CreateDatabaseDto.builder() + public final CreateDatabaseDto DATABASE_1_CREATE = CreateDatabaseDto.builder() .name(DATABASE_1_NAME) .isPublic(DATABASE_1_PUBLIC) .cid(CONTAINER_1_ID) .build(); - public static final at.tuwien.api.database.internal.CreateDatabaseDto DATABASE_1_CREATE_INTERNAL = at.tuwien.api.database.internal.CreateDatabaseDto.builder() - .internalName(DATABASE_1_INTERNALNAME) + public final at.ac.tuwien.ifs.dbrepo.core.api.database.internal.CreateDatabaseDto DATABASE_1_CREATE_INTERNAL = at.ac.tuwien.ifs.dbrepo.core.api.database.internal.CreateDatabaseDto.builder() + .internalName(DATABASE_1_INTERNAL_NAME) .containerId(CONTAINER_1_ID) .username(USER_1_USERNAME) .password(USER_1_PASSWORD) @@ -1197,41 +1211,44 @@ public abstract class BaseTest { .privilegedPassword(CONTAINER_1_PRIVILEGED_PASSWORD) .build(); - public static final UUID DATABASE_2_ID = UUID.fromString("dd9dfee2-9fbd-46b0-92d5-98f0f8866ffe"); - public static final String DATABASE_2_NAME = "Zoo"; - public static final String DATABASE_2_DESCRIPTION = "Zoo data"; - public static final String DATABASE_2_INTERNALNAME = "zoo"; - public static final Boolean DATABASE_2_PUBLIC = false; - public static final Boolean DATABASE_2_SCHEMA_PUBLIC = true; - public static final String DATABASE_2_EXCHANGE = "dbrepo"; - public static final Instant DATABASE_2_CREATED = Instant.ofEpochSecond(1677399772L) /* 2023-02-26 08:22:52 (UTC) */; - public static final Instant DATABASE_2_LAST_MODIFIED = Instant.ofEpochSecond(1677399772L) /* 2023-02-26 08:22:52 (UTC) */; - public static final UUID DATABASE_2_OWNER = USER_2_ID; - public static final UUID DATABASE_2_CREATOR = USER_2_ID; + public final static UUID DATABASE_2_ID = UUID.fromString("dd9dfee2-9fbd-46b0-92d5-98f0f8866ffe"); + public final static String DATABASE_2_NAME = "Zoo"; + public final static String DATABASE_2_DESCRIPTION = "Zoo data"; + public final static String DATABASE_2_INTERNAL_NAME = "zoo"; + public final static Boolean DATABASE_2_PUBLIC = false; + public final static Boolean DATABASE_2_SCHEMA_PUBLIC = true; + public final static Boolean DATABASE_2_DASHBOARD_ENABLED = true; + public final static String DATABASE_2_DASHBOARD_UID = "c6ab10f377148c"; + public final static String DATABASE_2_EXCHANGE = "dbrepo"; + public final static Instant DATABASE_2_CREATED = Instant.ofEpochSecond(1677399772L) /* 2023-02-26 08:22:52 (UTC) */; + public final static Instant DATABASE_2_LAST_MODIFIED = Instant.ofEpochSecond(1677399772L) /* 2023-02-26 08:22:52 (UTC) */; - public static final CreateDatabaseDto DATABASE_2_CREATE = CreateDatabaseDto.builder() + public final CreateDatabaseDto DATABASE_2_CREATE = CreateDatabaseDto.builder() .name(DATABASE_2_NAME) .isPublic(DATABASE_2_PUBLIC) .cid(CONTAINER_1_ID) .build(); - public static final UUID DATABASE_3_ID = UUID.fromString("9d8cb9a9-9468-4801-a2e0-2dac8bc67c31"); - public static final String DATABASE_3_NAME = "Musicology"; - public static final String DATABASE_3_DESCRIPTION = "Musicology data"; - public static final String DATABASE_3_INTERNALNAME = "musicology"; - public static final Boolean DATABASE_3_PUBLIC = true; - public static final Boolean DATABASE_3_SCHEMA_PUBLIC = false; - public static final String DATABASE_3_EXCHANGE = "dbrepo"; - public static final Instant DATABASE_3_CREATED = Instant.ofEpochSecond(1677399792L) /* 2023-02-26 08:23:12 (UTC) */; - public static final Instant DATABASE_3_LAST_MODIFIED = Instant.ofEpochSecond(1677399792L) /* 2023-02-26 08:23:12 (UTC) */; - public static final UUID DATABASE_3_OWNER = USER_3_ID; + public final static UUID DATABASE_3_ID = UUID.fromString("9d8cb9a9-9468-4801-a2e0-2dac8bc67c31"); + public final static String DATABASE_3_NAME = "Musicology"; + public final static String DATABASE_3_DESCRIPTION = "Musicology data"; + public final static String DATABASE_3_INTERNAL_NAME = "musicology"; + public final static Boolean DATABASE_3_PUBLIC = true; + public final static Boolean DATABASE_3_SCHEMA_PUBLIC = false; + public final static String DATABASE_3_DASHBOARD_UID = "96ef37d5d1b0d1"; + public final static Boolean DATABASE_3_DASHBOARD_ENABLED = true; + public final static String DATABASE_3_EXCHANGE = "dbrepo"; + public final static Instant DATABASE_3_CREATED = Instant.ofEpochSecond(1677399792L) /* 2023-02-26 08:23:12 (UTC) */; + public final static Instant DATABASE_3_LAST_MODIFIED = Instant.ofEpochSecond(1677399792L) /* 2023-02-26 08:23:12 (UTC) */; - public static final DatabaseDto DATABASE_3_DTO = DatabaseDto.builder() + public final DatabaseDto DATABASE_3_DTO = DatabaseDto.builder() .id(DATABASE_3_ID) .isPublic(DATABASE_3_PUBLIC) .isSchemaPublic(DATABASE_3_SCHEMA_PUBLIC) + .isDashboardEnabled(DATABASE_3_DASHBOARD_ENABLED) + .dashboardUid(DATABASE_3_DASHBOARD_UID) .name(DATABASE_3_NAME) - .internalName(DATABASE_3_INTERNALNAME) + .internalName(DATABASE_3_INTERNAL_NAME) .owner(USER_3_BRIEF_DTO) .container(CONTAINER_1_DTO) .exchangeName(DATABASE_3_EXCHANGE) @@ -1240,12 +1257,12 @@ public abstract class BaseTest { .identifiers(new LinkedList<>()) /* IDENTIFIER_6_DTO */ .build(); - public static final DatabaseDto DATABASE_3_PRIVILEGED_DTO = DatabaseDto.builder() + public final DatabaseDto DATABASE_3_PRIVILEGED_DTO = DatabaseDto.builder() .id(DATABASE_3_ID) .isPublic(DATABASE_3_PUBLIC) .isSchemaPublic(DATABASE_3_SCHEMA_PUBLIC) .name(DATABASE_3_NAME) - .internalName(DATABASE_3_INTERNALNAME) + .internalName(DATABASE_3_INTERNAL_NAME) .owner(USER_3_BRIEF_DTO) .container(CONTAINER_1_PRIVILEGED_DTO) .exchangeName(DATABASE_3_EXCHANGE) @@ -1255,63 +1272,63 @@ public abstract class BaseTest { .lastRetrieved(Instant.now()) .build(); - public static final DatabaseBriefDto DATABASE_3_PRIVILEGED_BRIEF_DTO = DatabaseBriefDto.builder() + public final DatabaseBriefDto DATABASE_3_PRIVILEGED_BRIEF_DTO = DatabaseBriefDto.builder() .id(DATABASE_3_ID) .isPublic(DATABASE_3_PUBLIC) .isSchemaPublic(DATABASE_3_SCHEMA_PUBLIC) .name(DATABASE_3_NAME) - .internalName(DATABASE_3_INTERNALNAME) + .internalName(DATABASE_3_INTERNAL_NAME) .ownerId(USER_3_ID) .identifiers(new LinkedList<>()) /* IDENTIFIER_6_DTO */ .build(); - public static final DatabaseBriefDto DATABASE_3_BRIEF_DTO = DatabaseBriefDto.builder() + public final DatabaseBriefDto DATABASE_3_BRIEF_DTO = DatabaseBriefDto.builder() .id(DATABASE_3_ID) .isPublic(DATABASE_3_PUBLIC) .isSchemaPublic(DATABASE_3_SCHEMA_PUBLIC) .name(DATABASE_3_NAME) - .internalName(DATABASE_3_INTERNALNAME) + .internalName(DATABASE_3_INTERNAL_NAME) .ownerId(USER_3_ID) .identifiers(new LinkedList<>()) .build(); - public static final CreateDatabaseDto DATABASE_3_CREATE = CreateDatabaseDto.builder() + public final CreateDatabaseDto DATABASE_3_CREATE = CreateDatabaseDto.builder() .name(DATABASE_3_NAME) .isPublic(DATABASE_3_PUBLIC) .cid(CONTAINER_1_ID) .build(); - public static final UUID DATABASE_4_ID = UUID.fromString("c503d7f3-5952-4d97-b26a-da86bea4c20d"); - public static final String DATABASE_4_NAME = "Weather AT"; - public static final String DATABASE_4_DESCRIPTION = "Weather data"; - public static final Boolean DATABASE_4_PUBLIC = true; - public static final Boolean DATABASE_4_SCHEMA_PUBLIC = true; - public static final String DATABASE_4_INTERNALNAME = "weather_at"; - public static final String DATABASE_4_EXCHANGE = "dbrepo"; - public static final Instant DATABASE_4_CREATED = Instant.ofEpochSecond(1677399813L) /* 2023-02-26 08:23:33 (UTC) */; - public static final Instant DATABASE_4_LAST_MODIFIED = Instant.ofEpochSecond(1677399813L) /* 2023-02-26 08:23:33 (UTC) */; - public static final UUID DATABASE_4_OWNER = USER_4_ID; - public static final UUID DATABASE_4_CREATOR = USER_4_ID; + public final static UUID DATABASE_4_ID = UUID.fromString("c503d7f3-5952-4d97-b26a-da86bea4c20d"); + public final static String DATABASE_4_NAME = "Weather AT"; + public final static String DATABASE_4_DESCRIPTION = "Weather data"; + public final static Boolean DATABASE_4_PUBLIC = true; + public final static Boolean DATABASE_4_SCHEMA_PUBLIC = true; + public final static Boolean DATABASE_4_DASHBOARD_ENABLED = true; + public final static String DATABASE_4_DASHBOARD_UID = "045e44890411ef"; + public final static String DATABASE_4_INTERNAL_NAME = "weather_at"; + public final static String DATABASE_4_EXCHANGE = "dbrepo"; + public final static Instant DATABASE_4_CREATED = Instant.ofEpochSecond(1677399813L) /* 2023-02-26 08:23:33 (UTC) */; + public final static Instant DATABASE_4_LAST_MODIFIED = Instant.ofEpochSecond(1677399813L) /* 2023-02-26 08:23:33 (UTC) */; - public static final DatabaseBriefDto DATABASE_4_BRIEF_DTO = DatabaseBriefDto.builder() + public final DatabaseBriefDto DATABASE_4_BRIEF_DTO = DatabaseBriefDto.builder() .id(DATABASE_4_ID) .isPublic(DATABASE_4_PUBLIC) .isSchemaPublic(DATABASE_4_SCHEMA_PUBLIC) .name(DATABASE_4_NAME) .description(DATABASE_4_DESCRIPTION) - .internalName(DATABASE_4_INTERNALNAME) + .internalName(DATABASE_4_INTERNAL_NAME) .ownerId(USER_4_ID) .identifiers(new LinkedList<>()) .build(); - public static final DatabaseDto DATABASE_4_DTO = DatabaseDto.builder() + public final DatabaseDto DATABASE_4_DTO = DatabaseDto.builder() .id(DATABASE_4_ID) .isPublic(DATABASE_4_PUBLIC) .isSchemaPublic(DATABASE_4_SCHEMA_PUBLIC) .name(DATABASE_4_NAME) .container(CONTAINER_2_DTO) .description(DATABASE_4_DESCRIPTION) - .internalName(DATABASE_4_INTERNALNAME) + .internalName(DATABASE_4_INTERNAL_NAME) .exchangeName(DATABASE_4_EXCHANGE) .owner(USER_4_BRIEF_DTO) .tables(new LinkedList<>()) /* TABLE_9_DTO */ @@ -1319,14 +1336,14 @@ public abstract class BaseTest { .identifiers(new LinkedList<>()) /* IDENTIFIER_7_DTO */ .build(); - public static final DatabaseDto DATABASE_4_PRIVILEGED_DTO = DatabaseDto.builder() + public final DatabaseDto DATABASE_4_PRIVILEGED_DTO = DatabaseDto.builder() .id(DATABASE_4_ID) .isPublic(DATABASE_4_PUBLIC) .isSchemaPublic(DATABASE_4_SCHEMA_PUBLIC) .name(DATABASE_4_NAME) .container(CONTAINER_2_PRIVILEGED_DTO) .description(DATABASE_4_DESCRIPTION) - .internalName(DATABASE_4_INTERNALNAME) + .internalName(DATABASE_4_INTERNAL_NAME) .exchangeName(DATABASE_4_EXCHANGE) .owner(USER_4_BRIEF_DTO) .tables(new LinkedList<>()) /* TABLE_9_DTO */ @@ -1335,13 +1352,15 @@ public abstract class BaseTest { .lastRetrieved(Instant.now()) .build(); - public static final CreateTableDto TABLE_0_CREATE_DTO = CreateTableDto.builder() + public final CreateTableConstraintsDto TABLE_1_CREATE_CONSTRAINTS_DTO = CreateTableConstraintsDto.builder() + .uniques(new LinkedList<>()) + .foreignKeys(new LinkedList<>()) + .build(); + + public final CreateTableDto TABLE_0_CREATE_DTO = CreateTableDto.builder() .name("full") .description("full example") - .constraints(CreateTableConstraintsDto.builder() - .uniques(new LinkedList<>()) - .foreignKeys(new LinkedList<>()) - .build()) + .constraints(TABLE_1_CREATE_CONSTRAINTS_DTO) .columns(List.of(CreateTableColumnDto.builder() .name("col1a") .type(ColumnTypeDto.CHAR) @@ -1504,24 +1523,23 @@ public abstract class BaseTest { .build())) .build(); - public static final UUID TABLE_1_ID = UUID.fromString("666d0b6b-f017-4f7c-80d8-a47174d8b539"); - public static final String TABLE_1_NAME = "Weather AUS"; - public static final String TABLE_1_INTERNAL_NAME = "weather_aus"; - public static final Boolean TABLE_1_VERSIONED = true; - public static final Boolean TABLE_1_IS_PUBLIC = false; - public static final Boolean TABLE_1_SCHEMA_PUBLIC = false; - public static final Boolean TABLE_1_PROCESSED_CONSTRAINTS = true; - public static final String TABLE_1_DESCRIPTION = "Weather in Australia"; - public static final String TABLE_1_QUEUE_NAME = TABLE_1_INTERNAL_NAME; - public static final String TABLE_1_ROUTING_KEY = "dbrepo." + DATABASE_1_ID + "." + TABLE_1_ID; - public static final Long TABLE_1_AVG_ROW_LENGTH = 3L; - public static final Long TABLE_1_NUM_ROWS = 3L; - public static final Long TABLE_1_DATA_LENGTH = 2000L; - public static final Long TABLE_1_MAX_DATA_LENGTH = Long.MAX_VALUE; - public static final Instant TABLE_1_CREATED = Instant.ofEpochSecond(1677399975L) /* 2023-02-26 08:26:15 (UTC) */; - public static final Instant TABLE_1_LAST_MODIFIED = Instant.ofEpochSecond(1677399975L) /* 2023-02-26 08:26:15 (UTC) */; - - public static final Table TABLE_1 = Table.builder() + public final static UUID TABLE_1_ID = UUID.fromString("666d0b6b-f017-4f7c-80d8-a47174d8b539"); + public final static String TABLE_1_NAME = "Weather AUS"; + public final static String TABLE_1_INTERNAL_NAME = "weather_aus"; + public final static Boolean TABLE_1_VERSIONED = true; + public final static Boolean TABLE_1_IS_PUBLIC = false; + public final static Boolean TABLE_1_SCHEMA_PUBLIC = false; + public final static String TABLE_1_DESCRIPTION = "Weather in Australia"; + public final static String TABLE_1_QUEUE_NAME = TABLE_1_INTERNAL_NAME; + public final static String TABLE_1_ROUTING_KEY = "dbrepo." + DATABASE_1_ID + "." + TABLE_1_ID; + public final static Long TABLE_1_AVG_ROW_LENGTH = 3L; + public final static Long TABLE_1_NUM_ROWS = 3L; + public final static Long TABLE_1_DATA_LENGTH = 2000L; + public final static Long TABLE_1_MAX_DATA_LENGTH = Long.MAX_VALUE; + public final static Instant TABLE_1_CREATED = Instant.ofEpochSecond(1677399975L) /* 2023-02-26 08:26:15 (UTC) */; + public final static Instant TABLE_1_LAST_MODIFIED = Instant.ofEpochSecond(1677399975L) /* 2023-02-26 08:26:15 (UTC) */; + + public final Table TABLE_1 = Table.builder() .id(TABLE_1_ID) .tdbid(DATABASE_1_ID) .database(null /* DATABASE_1 */) @@ -1534,7 +1552,7 @@ public abstract class BaseTest { .name(TABLE_1_NAME) .queueName(TABLE_1_QUEUE_NAME) .identifiers(new LinkedList<>()) - .columns(new LinkedList<>() /* TABLE_1_COLUMNS */) + .columns(new LinkedList<>()) /* TABLE_1_COLUMNS */ .constraints(null) /* TABLE_1_CONSTRAINTS */ .ownedBy(USER_1_ID) .owner(USER_1) @@ -1545,38 +1563,13 @@ public abstract class BaseTest { .maxDataLength(TABLE_1_MAX_DATA_LENGTH) .build(); - public static final TableDto TABLE_1_DTO = TableDto.builder() - .id(TABLE_1_ID) - .databaseId(DATABASE_1_ID) - .internalName(TABLE_1_INTERNAL_NAME) - .isVersioned(TABLE_1_VERSIONED) - .isPublic(TABLE_1_IS_PUBLIC) - .isSchemaPublic(TABLE_1_SCHEMA_PUBLIC) - .description(TABLE_1_DESCRIPTION) - .name(TABLE_1_NAME) - .queueName(TABLE_1_QUEUE_NAME) - .routingKey(TABLE_1_ROUTING_KEY) - .identifiers(new LinkedList<>()) - .columns(new LinkedList<>() /* TABLE_1_COLUMNS_DTO */) - .constraints(null) /* TABLE_1_CONSTRAINTS_DTO */ - .owner(USER_1_BRIEF_DTO) - .avgRowLength(TABLE_1_AVG_ROW_LENGTH) - .numRows(TABLE_1_NUM_ROWS) - .dataLength(TABLE_1_DATA_LENGTH) - .maxDataLength(TABLE_1_MAX_DATA_LENGTH) - .build(); - - public static final UUID COLUMN_1_1_ID = UUID.fromString("377c0a6e-938e-458c-ad2b-bbbd75d46412"); - - public static final UUID COLUMN_1_2_ID = UUID.fromString("dbca4821-3023-479b-a25a-c08eb0ec02ce"); - - public static final UUID COLUMN_1_3_ID = UUID.fromString("8ff0351e-4882-4948-94af-598e4b264b25"); + public final static UUID COLUMN_1_1_ID = UUID.fromString("377c0a6e-938e-458c-ad2b-bbbd75d46412"); + public final static UUID COLUMN_1_2_ID = UUID.fromString("dbca4821-3023-479b-a25a-c08eb0ec02ce"); + public final static UUID COLUMN_1_3_ID = UUID.fromString("8ff0351e-4882-4948-94af-598e4b264b25"); + public final static UUID COLUMN_1_4_ID = UUID.fromString("9ab256eb-3324-4e76-af3b-e3e2a58ce161"); + public final static UUID COLUMN_1_5_ID = UUID.fromString("619e9355-51aa-438f-8579-80cec30f35cb"); - public static final UUID COLUMN_1_4_ID = UUID.fromString("9ab256eb-3324-4e76-af3b-e3e2a58ce161"); - - public static final UUID COLUMN_1_5_ID = UUID.fromString("619e9355-51aa-438f-8579-80cec30f35cb"); - - public static final List<ColumnDto> TABLE_1_COLUMNS_DTO = List.of(ColumnDto.builder() + public final List<ColumnDto> TABLE_1_COLUMNS_DTO = List.of(ColumnDto.builder() .id(COLUMN_1_1_ID) .tableId(TABLE_1_ID) .databaseId(DATABASE_1_ID) @@ -1644,7 +1637,36 @@ public abstract class BaseTest { .sets(null) .build()); - public static final TableBriefDto TABLE_1_BRIEF_DTO = TableBriefDto.builder() + public final CreateTableConstraintsDto TABLE_1_CREATE_TABLE_CONSTRAINTS_DTO = + CreateTableConstraintsDto.builder() + .checks(new LinkedHashSet<>()) + .primaryKey(new LinkedHashSet<>(List.of("id"))) + .foreignKeys(new LinkedList<>()) + .uniques(new LinkedList<>(List.of(List.of("date")))) + .build(); + + public final TableDto TABLE_1_DTO = TableDto.builder() + .id(TABLE_1_ID) + .databaseId(DATABASE_1_ID) + .internalName(TABLE_1_INTERNAL_NAME) + .isVersioned(TABLE_1_VERSIONED) + .isPublic(TABLE_1_IS_PUBLIC) + .isSchemaPublic(TABLE_1_SCHEMA_PUBLIC) + .description(TABLE_1_DESCRIPTION) + .name(TABLE_1_NAME) + .queueName(TABLE_1_QUEUE_NAME) + .routingKey(TABLE_1_ROUTING_KEY) + .identifiers(new LinkedList<>()) + .columns(new LinkedList<>()) + .constraints(null) + .owner(USER_1_BRIEF_DTO) + .avgRowLength(TABLE_1_AVG_ROW_LENGTH) + .numRows(TABLE_1_NUM_ROWS) + .dataLength(TABLE_1_DATA_LENGTH) + .maxDataLength(TABLE_1_MAX_DATA_LENGTH) + .build(); + + public final TableBriefDto TABLE_1_BRIEF_DTO = TableBriefDto.builder() .id(TABLE_1_ID) .databaseId(DATABASE_1_ID) .internalName(TABLE_1_INTERNAL_NAME) @@ -1656,9 +1678,10 @@ public abstract class BaseTest { .ownedBy(USER_1_ID) .build(); - public static final Long TABLE_1_DATA_COUNT = 3L; + public final static Long TABLE_1_DATA_COUNT = 3L; + @SuppressWarnings("java:S3599") - public static final List<Map<String, Object>> TABLE_1_DATA_DTO = new LinkedList<>(List.of( + public final List<Map<String, Object>> TABLE_1_DATA_DTO = new LinkedList<>(List.of( new HashMap<>() {{ put("id", BigInteger.valueOf(1L)); put("date", LocalDate.of(2008, 12, 1).atStartOfDay().toInstant(ZoneOffset.UTC)); @@ -1682,29 +1705,28 @@ public abstract class BaseTest { }} )); - public static final UUID TABLE_2_ID = UUID.fromString("0cc067b6-4e81-4871-b47e-17a38228a574"); - public static final String TABLE_2_NAME = "Weather Location"; - public static final String TABLE_2_INTERNALNAME = "weather_location"; - public static final Boolean TABLE_2_VERSIONED = true; - public static final Boolean TABLE_2_IS_PUBLIC = false; - public static final Boolean TABLE_2_SCHEMA_PUBLIC = true; - public static final Boolean TABLE_2_PROCESSED_CONSTRAINTS = true; - public static final String TABLE_2_DESCRIPTION = "Weather location"; - public static final String TABLE_2_QUEUE_NAME = TABLE_2_INTERNALNAME; - public static final String TABLE_2_ROUTING_KEY = "dbrepo." + DATABASE_1_ID + "." + TABLE_2_ID; - public static final Instant TABLE_2_CREATED = Instant.ofEpochSecond(1677400007L) /* 2023-02-26 08:26:47 (UTC) */; - public static final Instant TABLE_2_LAST_MODIFIED = Instant.ofEpochSecond(1677400007L) /* 2023-02-26 08:26:47 (UTC) */; - public static final Long TABLE_2_AVG_ROW_LENGTH = 3L; - public static final Long TABLE_2_NUM_ROWS = 3L; - public static final Long TABLE_2_DATA_LENGTH = 2000L; - public static final Long TABLE_2_MAX_DATA_LENGTH = Long.MAX_VALUE; - - public static final Table TABLE_2 = Table.builder() + public final static UUID TABLE_2_ID = UUID.fromString("0cc067b6-4e81-4871-b47e-17a38228a574"); + public final static String TABLE_2_NAME = "Weather Location"; + public final static String TABLE_2_INTERNAL_NAME = "weather_location"; + public final static Boolean TABLE_2_VERSIONED = true; + public final static Boolean TABLE_2_IS_PUBLIC = false; + public final static Boolean TABLE_2_SCHEMA_PUBLIC = true; + public final static String TABLE_2_DESCRIPTION = "Weather location"; + public final static String TABLE_2_QUEUE_NAME = TABLE_2_INTERNAL_NAME; + public final static String TABLE_2_ROUTING_KEY = "dbrepo." + DATABASE_1_ID + "." + TABLE_2_ID; + public final static Instant TABLE_2_CREATED = Instant.ofEpochSecond(1677400007L) /* 2023-02-26 08:26:47 (UTC) */; + public final static Instant TABLE_2_LAST_MODIFIED = Instant.ofEpochSecond(1677400007L) /* 2023-02-26 08:26:47 (UTC) */; + public final static Long TABLE_2_AVG_ROW_LENGTH = 3L; + public final static Long TABLE_2_NUM_ROWS = 3L; + public final static Long TABLE_2_DATA_LENGTH = 2000L; + public final static Long TABLE_2_MAX_DATA_LENGTH = Long.MAX_VALUE; + + public final Table TABLE_2 = Table.builder() .id(TABLE_2_ID) .tdbid(DATABASE_1_ID) .database(null /* DATABASE_1 */) .created(TABLE_2_CREATED) - .internalName(TABLE_2_INTERNALNAME) + .internalName(TABLE_2_INTERNAL_NAME) .isVersioned(TABLE_2_VERSIONED) .isPublic(TABLE_2_IS_PUBLIC) .isSchemaPublic(TABLE_2_SCHEMA_PUBLIC) @@ -1712,7 +1734,7 @@ public abstract class BaseTest { .name(TABLE_2_NAME) .lastModified(TABLE_2_LAST_MODIFIED) .queueName(TABLE_2_QUEUE_NAME) - .columns(new LinkedList<>() /* TABLE_2_COLUMNS */) + .columns(new LinkedList<>()) /* TABLE_2_COLUMNS */ .constraints(null) /* TABLE_2_CONSTRAINTS */ .owner(USER_2) .ownedBy(USER_2_ID) @@ -1722,61 +1744,177 @@ public abstract class BaseTest { .maxDataLength(TABLE_2_MAX_DATA_LENGTH) .build(); - public static final TableDto TABLE_2_DTO = TableDto.builder() + public final TableBriefDto TABLE_2_BRIEF_DTO = TableBriefDto.builder() .id(TABLE_2_ID) .databaseId(DATABASE_1_ID) - .internalName(TABLE_2_INTERNALNAME) + .internalName(TABLE_2_INTERNAL_NAME) .isVersioned(TABLE_2_VERSIONED) .isPublic(TABLE_2_IS_PUBLIC) .isSchemaPublic(TABLE_2_SCHEMA_PUBLIC) .description(TABLE_2_DESCRIPTION) .name(TABLE_2_NAME) - .queueName(TABLE_2_QUEUE_NAME) - .routingKey(TABLE_2_ROUTING_KEY) - .columns(new LinkedList<>() /* TABLE_2_COLUMNS_DTO */) - .constraints(null) /* TABLE_2_CONSTRAINTS_DTO */ - .owner(USER_2_BRIEF_DTO) - .avgRowLength(TABLE_2_AVG_ROW_LENGTH) - .numRows(TABLE_2_NUM_ROWS) - .dataLength(TABLE_2_DATA_LENGTH) - .maxDataLength(TABLE_2_MAX_DATA_LENGTH) + .ownedBy(USER_2_ID) + .build(); + + public final static UUID COLUMN_2_1_ID = UUID.fromString("795faa78-7ebb-4dd5-9eb1-e54a9192d0b5"); + public final static UUID COLUMN_2_2_ID = UUID.fromString("f316ced5-7774-4656-aa7f-a874622d99b3"); + public final static UUID COLUMN_2_3_ID = UUID.fromString("11cb1aa2-8582-45ef-a3bb-7056aa94cdf1"); + + public final ColumnBriefDto TABLE_1_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() + .id(COLUMN_1_1_ID) + .name("id") + .internalName("id") + .columnType(ColumnTypeDto.BIGINT) + .build(); + + public final List<ColumnDto> TABLE_2_COLUMNS_DTO = List.of(ColumnDto.builder() + .id(COLUMN_2_1_ID) + .tableId(TABLE_2_ID) + .databaseId(DATABASE_1_ID) + .ordinalPosition(0) + .name("location") + .internalName("location") + .columnType(ColumnTypeDto.VARCHAR) + .size(255L) + .isNullAllowed(false) + .enums(null) + .sets(null) + .build(), + ColumnDto.builder() + .id(COLUMN_2_2_ID) + .tableId(TABLE_2_ID) + .databaseId(DATABASE_1_ID) + .ordinalPosition(1) + .name("lat") + .internalName("lat") + .columnType(ColumnTypeDto.DOUBLE) + .size(22L) + .isNullAllowed(true) + .enums(null) + .sets(null) + .build(), + ColumnDto.builder() + .id(COLUMN_2_3_ID) + .tableId(TABLE_2_ID) + .databaseId(DATABASE_1_ID) + .ordinalPosition(2) + .name("lng") + .internalName("lng") + .columnType(ColumnTypeDto.DOUBLE) + .size(22L) + .isNullAllowed(true) + .enums(null) + .sets(null) + .build()); + + public final ColumnBriefDto TABLE_2_COLUMNS_BRIEF_2_DTO = ColumnBriefDto.builder() + .id(COLUMN_2_3_ID) + .name("lng") + .internalName("lng") + .columnType(ColumnTypeDto.DECIMAL) + .build(); + + public final List<ColumnBriefDto> TABLE_2_COLUMNS_BRIEF_DTO = List.of(ColumnBriefDto.builder() + .id(COLUMN_2_1_ID) + .tableId(TABLE_2_ID) + .databaseId(DATABASE_1_ID) + .name("location") + .internalName("location") + .columnType(ColumnTypeDto.VARCHAR) + .build(), + ColumnBriefDto.builder() + .id(COLUMN_2_2_ID) + .tableId(TABLE_2_ID) + .databaseId(DATABASE_1_ID) + .name("lat") + .internalName("lat") + .columnType(ColumnTypeDto.DOUBLE) + .build(), + ColumnBriefDto.builder() + .id(COLUMN_2_3_ID) + .tableId(TABLE_2_ID) + .databaseId(DATABASE_1_ID) + .name("lng") + .internalName("lng") + .columnType(ColumnTypeDto.DOUBLE) + .build()); + + public final ColumnBriefDto TABLE_2_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() + .id(COLUMN_2_1_ID) + .name("location") + .internalName("location") + .columnType(ColumnTypeDto.VARCHAR) .build(); - public static final TableBriefDto TABLE_2_BRIEF_DTO = TableBriefDto.builder() + public final TableDto TABLE_2_DTO = TableDto.builder() .id(TABLE_2_ID) .databaseId(DATABASE_1_ID) - .internalName(TABLE_2_INTERNALNAME) + .internalName(TABLE_2_INTERNAL_NAME) .isVersioned(TABLE_2_VERSIONED) .isPublic(TABLE_2_IS_PUBLIC) .isSchemaPublic(TABLE_2_SCHEMA_PUBLIC) .description(TABLE_2_DESCRIPTION) .name(TABLE_2_NAME) - .ownedBy(USER_2_ID) + .queueName(TABLE_2_QUEUE_NAME) + .routingKey(TABLE_2_ROUTING_KEY) + .columns(new LinkedList<>()) + .constraints(ConstraintsDto.builder() + .checks(new LinkedHashSet<>(List.of("`mintemp` > 0"))) + .foreignKeys(new LinkedList<>(List.of(ForeignKeyDto.builder() + .id(UUID.fromString("ca833111-1e9a-48a3-bb16-ad6f90196f96")) + .name("fk_location") + .onDelete(ReferenceTypeDto.NO_ACTION) + .references(new LinkedList<>(List.of(ForeignKeyReferenceDto.builder() + .id(UUID.fromString("8552f282-0403-424d-b2ba-4ed0f760197c")) + .column(TABLE_2_COLUMNS_BRIEF_2_DTO) + .referencedColumn(TABLE_1_COLUMNS_BRIEF_0_DTO) + .foreignKey(null) + .build()))) + .table(TABLE_1_BRIEF_DTO) + .referencedTable(TABLE_2_BRIEF_DTO) + .onUpdate(ReferenceTypeDto.NO_ACTION) + .build()))) + .uniques(new LinkedList<>(List.of(UniqueDto.builder() + .id(UUID.fromString("b9aba807-dd9c-43a3-9614-2493cb4b26bd")) + .table(TABLE_2_BRIEF_DTO) + .name("uk_1") + .columns(new LinkedList<>(List.of(TABLE_2_COLUMNS_BRIEF_DTO.get(1)))) + .build()))) + .primaryKey(new LinkedHashSet<>(Set.of(PrimaryKeyDto.builder() + .table(TABLE_2_BRIEF_DTO) + .column(TABLE_2_COLUMNS_BRIEF_0_DTO) + .id(COLUMN_2_1_ID) + .build()))) + .build()) + .owner(USER_2_BRIEF_DTO) + .avgRowLength(TABLE_2_AVG_ROW_LENGTH) + .numRows(TABLE_2_NUM_ROWS) + .dataLength(TABLE_2_DATA_LENGTH) + .maxDataLength(TABLE_2_MAX_DATA_LENGTH) .build(); - public static final UUID TABLE_3_ID = UUID.fromString("a94ee518-c235-496b-8613-b0c643bc1b11"); - public static final String TABLE_3_NAME = "Sensor"; - public static final String TABLE_3_INTERNALNAME = "sensor"; - public static final Boolean TABLE_3_VERSIONED = true; - public static final Boolean TABLE_3_IS_PUBLIC = false; - public static final Boolean TABLE_3_SCHEMA_PUBLIC = false; - public static final Boolean TABLE_3_PROCESSED_CONSTRAINTS = true; - public static final String TABLE_3_DESCRIPTION = "Some sensor data"; - public static final String TABLE_3_QUEUE_NAME = TABLE_3_INTERNALNAME; - public static final String TABLE_3_ROUTING_KEY = "dbrepo." + DATABASE_1_ID + "." + TABLE_3_ID; - public static final Instant TABLE_3_CREATED = Instant.ofEpochSecond(1677400031L) /* 2023-02-26 08:27:11 (UTC) */; - public static final Instant TABLE_3_LAST_MODIFIED = Instant.ofEpochSecond(1677400031L) /* 2023-02-26 08:27:11 (UTC) */; - public static final Long TABLE_3_AVG_ROW_LENGTH = 6L; - public static final Long TABLE_3_NUM_ROWS = 6L; - public static final Long TABLE_3_DATA_LENGTH = 1800L; - public static final Long TABLE_3_MAX_DATA_LENGTH = Long.MAX_VALUE; - - public static final Table TABLE_3 = Table.builder() + public final static UUID TABLE_3_ID = UUID.fromString("a94ee518-c235-496b-8613-b0c643bc1b11"); + public final static String TABLE_3_NAME = "Sensor"; + public final static String TABLE_3_INTERNAL_NAME = "sensor"; + public final static Boolean TABLE_3_VERSIONED = true; + public final static Boolean TABLE_3_IS_PUBLIC = false; + public final static Boolean TABLE_3_SCHEMA_PUBLIC = false; + public final static String TABLE_3_DESCRIPTION = "Some sensor data"; + public final static String TABLE_3_QUEUE_NAME = TABLE_3_INTERNAL_NAME; + public final static String TABLE_3_ROUTING_KEY = "dbrepo." + DATABASE_1_ID + "." + TABLE_3_ID; + public final static Instant TABLE_3_CREATED = Instant.ofEpochSecond(1677400031L) /* 2023-02-26 08:27:11 (UTC) */; + public final static Instant TABLE_3_LAST_MODIFIED = Instant.ofEpochSecond(1677400031L) /* 2023-02-26 08:27:11 (UTC) */; + public final static Long TABLE_3_AVG_ROW_LENGTH = 6L; + public final static Long TABLE_3_NUM_ROWS = 6L; + public final static Long TABLE_3_DATA_LENGTH = 1800L; + public final static Long TABLE_3_MAX_DATA_LENGTH = Long.MAX_VALUE; + + public final Table TABLE_3 = Table.builder() .id(TABLE_3_ID) .tdbid(DATABASE_1_ID) - .database(null /* DATABASE_1 */) + .database(null) /* DATABASE_1 */ .created(TABLE_3_CREATED) - .internalName(TABLE_3_INTERNALNAME) + .internalName(TABLE_3_INTERNAL_NAME) .isVersioned(TABLE_3_VERSIONED) .isPublic(TABLE_3_IS_PUBLIC) .isSchemaPublic(TABLE_3_SCHEMA_PUBLIC) @@ -1784,7 +1922,7 @@ public abstract class BaseTest { .name(TABLE_3_NAME) .lastModified(TABLE_3_LAST_MODIFIED) .queueName(TABLE_3_QUEUE_NAME) - .columns(new LinkedList<>() /* TABLE_3_COLUMNS */) + .columns(new LinkedList<>()) /* TABLE_3_COLUMNS */ .constraints(null) /* TABLE_3_CONSTRAINTS */ .owner(USER_3) .ownedBy(USER_3_ID) @@ -1794,10 +1932,10 @@ public abstract class BaseTest { .maxDataLength(TABLE_3_MAX_DATA_LENGTH) .build(); - public static final TableDto TABLE_3_DTO = TableDto.builder() + public final TableDto TABLE_3_DTO = TableDto.builder() .id(TABLE_3_ID) .databaseId(DATABASE_1_ID) - .internalName(TABLE_3_INTERNALNAME) + .internalName(TABLE_3_INTERNAL_NAME) .isVersioned(TABLE_3_VERSIONED) .isPublic(TABLE_3_IS_PUBLIC) .isSchemaPublic(TABLE_3_SCHEMA_PUBLIC) @@ -1814,10 +1952,10 @@ public abstract class BaseTest { .maxDataLength(TABLE_3_MAX_DATA_LENGTH) .build(); - public static final TableBriefDto TABLE_3_BRIEF_DTO = TableBriefDto.builder() + public final TableBriefDto TABLE_3_BRIEF_DTO = TableBriefDto.builder() .id(TABLE_3_ID) .databaseId(DATABASE_1_ID) - .internalName(TABLE_3_INTERNALNAME) + .internalName(TABLE_3_INTERNAL_NAME) .isVersioned(TABLE_3_VERSIONED) .isPublic(TABLE_3_IS_PUBLIC) .isSchemaPublic(TABLE_3_SCHEMA_PUBLIC) @@ -1826,14 +1964,14 @@ public abstract class BaseTest { .ownedBy(USER_3_ID) .build(); - public static final CreateTableConstraintsDto TABLE_3_CONSTRAINTS_CREATE_DTO = CreateTableConstraintsDto.builder() + public final CreateTableConstraintsDto TABLE_3_CONSTRAINTS_CREATE_DTO = CreateTableConstraintsDto.builder() .checks(new LinkedHashSet<>()) .primaryKey(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>()) .uniques(new LinkedList<>()) .build(); - public static final CreateTableConstraintsDto TABLE_3_CONSTRAINTS_INVALID_CREATE_DTO = CreateTableConstraintsDto.builder() + public final CreateTableConstraintsDto TABLE_3_CONSTRAINTS_INVALID_CREATE_DTO = CreateTableConstraintsDto.builder() .checks(new LinkedHashSet<>()) .primaryKey(new LinkedHashSet<>()) // <<<< .uniques(new LinkedList<>()) @@ -1844,42 +1982,41 @@ public abstract class BaseTest { .build())) .build(); - public static final CreateTableDto TABLE_3_CREATE_DTO = CreateTableDto.builder() + public final CreateTableDto TABLE_3_CREATE_DTO = CreateTableDto.builder() .name(TABLE_3_NAME) .description(TABLE_3_DESCRIPTION) .columns(new LinkedList<>()) .constraints(TABLE_3_CONSTRAINTS_CREATE_DTO) .build(); - public static final CreateTableDto TABLE_3_INVALID_CREATE_DTO = CreateTableDto.builder() + public final CreateTableDto TABLE_3_INVALID_CREATE_DTO = CreateTableDto.builder() .name(TABLE_3_NAME) .description(TABLE_3_DESCRIPTION) .columns(new LinkedList<>()) .constraints(TABLE_3_CONSTRAINTS_INVALID_CREATE_DTO) .build(); - public static final UUID TABLE_5_ID = UUID.fromString("91306cbd-c51f-47d3-8722-debfdbd8a77e"); - public static final String TABLE_5_NAME = "zoo"; - public static final String TABLE_5_INTERNALNAME = "zoo"; - public static final Boolean TABLE_5_VERSIONED = true; - public static final Boolean TABLE_5_IS_PUBLIC = true; - public static final Boolean TABLE_5_SCHEMA_PUBLIC = true; - public static final Boolean TABLE_5_PROCESSED_CONSTRAINTS = true; - public static final String TABLE_5_DESCRIPTION = "Some Kaggle dataset"; - public static final String TABLE_5_QUEUE_NAME = TABLE_5_INTERNALNAME; - public static final String TABLE_5_ROUTING_KEY = "dbrepo." + DATABASE_2_ID + "." + TABLE_5_ID; - public static final Instant TABLE_5_CREATED = Instant.ofEpochSecond(1677400067L) /* 2023-02-26 08:27:47 (UTC) */; - public static final Instant TABLE_5_LAST_MODIFIED = Instant.ofEpochSecond(1677400067L) /* 2023-02-26 08:27:47 (UTC) */; - public static final Long TABLE_5_AVG_ROW_LENGTH = 1080L; - public static final Long TABLE_5_NUM_ROWS = 101L; - public static final Long TABLE_5_DATA_LENGTH = 15200L; - public static final Long TABLE_5_MAX_DATA_LENGTH = Long.MAX_VALUE; - - public static final Table TABLE_5 = Table.builder() + public final static UUID TABLE_5_ID = UUID.fromString("91306cbd-c51f-47d3-8722-debfdbd8a77e"); + public final static String TABLE_5_NAME = "zoo"; + public final static String TABLE_5_INTERNAL_NAME = "zoo"; + public final static Boolean TABLE_5_VERSIONED = true; + public final static Boolean TABLE_5_IS_PUBLIC = true; + public final static Boolean TABLE_5_SCHEMA_PUBLIC = true; + public final static String TABLE_5_DESCRIPTION = "Some Kaggle dataset"; + public final static String TABLE_5_QUEUE_NAME = TABLE_5_INTERNAL_NAME; + public final static String TABLE_5_ROUTING_KEY = "dbrepo." + DATABASE_2_ID + "." + TABLE_5_ID; + public final static Instant TABLE_5_CREATED = Instant.ofEpochSecond(1677400067L) /* 2023-02-26 08:27:47 (UTC) */; + public final static Instant TABLE_5_LAST_MODIFIED = Instant.ofEpochSecond(1677400067L) /* 2023-02-26 08:27:47 (UTC) */; + public final static Long TABLE_5_AVG_ROW_LENGTH = 1080L; + public final static Long TABLE_5_NUM_ROWS = 101L; + public final static Long TABLE_5_DATA_LENGTH = 15200L; + public final static Long TABLE_5_MAX_DATA_LENGTH = Long.MAX_VALUE; + + public final Table TABLE_5 = Table.builder() .id(TABLE_5_ID) .tdbid(DATABASE_2_ID) .created(Instant.now()) - .internalName(TABLE_5_INTERNALNAME) + .internalName(TABLE_5_INTERNAL_NAME) .isVersioned(TABLE_5_VERSIONED) .isPublic(TABLE_5_IS_PUBLIC) .isSchemaPublic(TABLE_5_SCHEMA_PUBLIC) @@ -1893,10 +2030,10 @@ public abstract class BaseTest { .owner(USER_1) .build(); - public static final TableDto TABLE_5_DTO = TableDto.builder() + public final TableDto TABLE_5_DTO = TableDto.builder() .id(TABLE_5_ID) .databaseId(DATABASE_2_ID) - .internalName(TABLE_5_INTERNALNAME) + .internalName(TABLE_5_INTERNAL_NAME) .isVersioned(TABLE_5_VERSIONED) .isPublic(TABLE_5_IS_PUBLIC) .isSchemaPublic(TABLE_5_SCHEMA_PUBLIC) @@ -1909,10 +2046,10 @@ public abstract class BaseTest { .owner(USER_1_BRIEF_DTO) .build(); - public static final TableBriefDto TABLE_5_BRIEF_DTO = TableBriefDto.builder() + public final TableBriefDto TABLE_5_BRIEF_DTO = TableBriefDto.builder() .id(TABLE_5_ID) .databaseId(DATABASE_2_ID) - .internalName(TABLE_5_INTERNALNAME) + .internalName(TABLE_5_INTERNAL_NAME) .isVersioned(TABLE_5_VERSIONED) .isPublic(TABLE_5_IS_PUBLIC) .isSchemaPublic(TABLE_5_SCHEMA_PUBLIC) @@ -1921,24 +2058,23 @@ public abstract class BaseTest { .ownedBy(USER_1_ID) .build(); - public static final UUID TABLE_6_ID = UUID.fromString("ae84d169-d36c-4f5a-a390-153d090f9574"); - public static final String TABLE_6_NAME = "names"; - public static final String TABLE_6_INTERNALNAME = "names"; - public static final Boolean TABLE_6_VERSIONED = true; - public static final Boolean TABLE_6_IS_PUBLIC = true; - public static final Boolean TABLE_6_SCHEMA_PUBLIC = false; - public static final Boolean TABLE_6_PROCESSED_CONSTRAINTS = true; - public static final String TABLE_6_DESCRIPTION = "Some names dataset"; - public static final String TABLE_6_QUEUE_NAME = TABLE_6_INTERNALNAME; - public static final String TABLE_6_ROUTING_KEY = "dbrepo." + DATABASE_2_ID + "." + TABLE_6_ID; - public static final Instant TABLE_6_CREATED = Instant.ofEpochSecond(1677400117L) /* 2023-02-26 08:28:37 (UTC) */; - public static final Instant TABLE_6_LAST_MODIFIED = Instant.ofEpochSecond(1677400117L) /* 2023-02-26 08:28:37 (UTC) */; - - public static final Table TABLE_6 = Table.builder() + public final static UUID TABLE_6_ID = UUID.fromString("ae84d169-d36c-4f5a-a390-153d090f9574"); + public final static String TABLE_6_NAME = "names"; + public final static String TABLE_6_INTERNAL_NAME = "names"; + public final static Boolean TABLE_6_VERSIONED = true; + public final static Boolean TABLE_6_IS_PUBLIC = true; + public final static Boolean TABLE_6_SCHEMA_PUBLIC = false; + public final static String TABLE_6_DESCRIPTION = "Some names dataset"; + public final static String TABLE_6_QUEUE_NAME = TABLE_6_INTERNAL_NAME; + public final static String TABLE_6_ROUTING_KEY = "dbrepo." + DATABASE_2_ID + "." + TABLE_6_ID; + public final static Instant TABLE_6_CREATED = Instant.ofEpochSecond(1677400117L) /* 2023-02-26 08:28:37 (UTC) */; + public final static Instant TABLE_6_LAST_MODIFIED = Instant.ofEpochSecond(1677400117L) /* 2023-02-26 08:28:37 (UTC) */; + + public final Table TABLE_6 = Table.builder() .id(TABLE_6_ID) .tdbid(DATABASE_2_ID) .created(TABLE_6_CREATED) - .internalName(TABLE_6_INTERNALNAME) + .internalName(TABLE_6_INTERNAL_NAME) .isVersioned(TABLE_6_VERSIONED) .isPublic(TABLE_6_IS_PUBLIC) .isSchemaPublic(TABLE_6_SCHEMA_PUBLIC) @@ -1953,10 +2089,10 @@ public abstract class BaseTest { .created(TABLE_6_CREATED) .build(); - public static final TableDto TABLE_6_DTO = TableDto.builder() + public final TableDto TABLE_6_DTO = TableDto.builder() .id(TABLE_6_ID) .databaseId(DATABASE_2_ID) - .internalName(TABLE_6_INTERNALNAME) + .internalName(TABLE_6_INTERNAL_NAME) .isVersioned(TABLE_6_VERSIONED) .isPublic(TABLE_6_IS_PUBLIC) .isSchemaPublic(TABLE_6_SCHEMA_PUBLIC) @@ -1969,10 +2105,10 @@ public abstract class BaseTest { .owner(USER_1_BRIEF_DTO) .build(); - public static final TableBriefDto TABLE_6_BRIEF_DTO = TableBriefDto.builder() + public final TableBriefDto TABLE_6_BRIEF_DTO = TableBriefDto.builder() .id(TABLE_6_ID) .databaseId(DATABASE_2_ID) - .internalName(TABLE_6_INTERNALNAME) + .internalName(TABLE_6_INTERNAL_NAME) .isVersioned(TABLE_6_VERSIONED) .isPublic(TABLE_6_IS_PUBLIC) .isSchemaPublic(TABLE_6_SCHEMA_PUBLIC) @@ -1981,20 +2117,19 @@ public abstract class BaseTest { .ownedBy(USER_1_ID) .build(); - public static final UUID TABLE_7_ID = UUID.fromString("e5d10200-3e4f-45f4-9f36-ff3ca39c6c29"); - public static final String TABLE_7_NAME = "likes"; - public static final String TABLE_7_INTERNAL_NAME = "likes"; - public static final Boolean TABLE_7_VERSIONED = true; - public static final Boolean TABLE_7_IS_PUBLIC = true; - public static final Boolean TABLE_7_SCHEMA_PUBLIC = true; - public static final Boolean TABLE_7_PROCESSED_CONSTRAINTS = true; - public static final String TABLE_7_DESCRIPTION = "Some likes dataset"; - public static final String TABLE_7_QUEUE_NAME = TABLE_7_INTERNAL_NAME; - public static final String TABLE_7_ROUTING_KEY = "dbrepo." + DATABASE_2_ID + "." + TABLE_7_ID; - public static final Instant TABLE_7_CREATED = Instant.ofEpochSecond(1677400147L) /* 2023-02-26 08:29:07 (UTC) */; - public static final Instant TABLE_7_LAST_MODIFIED = Instant.ofEpochSecond(1677400147L) /* 2023-02-26 08:29:07 (UTC) */; - - public static final Table TABLE_7 = Table.builder() + public final static UUID TABLE_7_ID = UUID.fromString("e5d10200-3e4f-45f4-9f36-ff3ca39c6c29"); + public final static String TABLE_7_NAME = "likes"; + public final static String TABLE_7_INTERNAL_NAME = "likes"; + public final static Boolean TABLE_7_VERSIONED = true; + public final static Boolean TABLE_7_IS_PUBLIC = true; + public final static Boolean TABLE_7_SCHEMA_PUBLIC = true; + public final static String TABLE_7_DESCRIPTION = "Some likes dataset"; + public final static String TABLE_7_QUEUE_NAME = TABLE_7_INTERNAL_NAME; + public final static String TABLE_7_ROUTING_KEY = "dbrepo." + DATABASE_2_ID + "." + TABLE_7_ID; + public final static Instant TABLE_7_CREATED = Instant.ofEpochSecond(1677400147L) /* 2023-02-26 08:29:07 (UTC) */; + public final static Instant TABLE_7_LAST_MODIFIED = Instant.ofEpochSecond(1677400147L) /* 2023-02-26 08:29:07 (UTC) */; + + public final Table TABLE_7 = Table.builder() .id(TABLE_7_ID) .tdbid(DATABASE_2_ID) .created(TABLE_7_CREATED) @@ -2013,7 +2148,7 @@ public abstract class BaseTest { .created(TABLE_7_CREATED) .build(); - public static final TableDto TABLE_7_DTO = TableDto.builder() + public final TableDto TABLE_7_DTO = TableDto.builder() .id(TABLE_7_ID) .databaseId(DATABASE_2_ID) .internalName(TABLE_7_INTERNAL_NAME) @@ -2029,7 +2164,7 @@ public abstract class BaseTest { .owner(USER_1_BRIEF_DTO) .build(); - public static final TableBriefDto TABLE_7_BRIEF_DTO = TableBriefDto.builder() + public final TableBriefDto TABLE_7_BRIEF_DTO = TableBriefDto.builder() .id(TABLE_7_ID) .databaseId(DATABASE_2_ID) .internalName(TABLE_7_INTERNAL_NAME) @@ -2041,26 +2176,26 @@ public abstract class BaseTest { .ownedBy(USER_1_ID) .build(); - public static final UUID TABLE_4_ID = UUID.fromString("6c87cbcf-5043-404f-9bf1-b09ddbac25a2"); - public static final String TABLE_4_NAME = "Sensor 2"; - public static final String TABLE_4_INTERNALNAME = "sensor_2"; - public static final Boolean TABLE_4_VERSIONED = true; - public static final Boolean TABLE_4_IS_PUBLIC = true; - public static final Boolean TABLE_4_SCHEMA_PUBLIC = false; - public static final String TABLE_4_DESCRIPTION = "Hello sensor"; - public static final String TABLE_4_QUEUE_NAME = TABLE_4_INTERNALNAME; - public static final String TABLE_4_ROUTING_KEY = "dbrepo." + DATABASE_1_ID + "." + TABLE_4_ID; - public static final Instant TABLE_4_CREATED = Instant.ofEpochSecond(1677400175L) /* 2023-02-26 08:29:35 (UTC) */; - public static final Instant TABLE_4_LAST_MODIFIED = Instant.ofEpochSecond(1677400175L) /* 2023-02-26 08:29:35 (UTC) */; - public static final Long TABLE_4_AVG_ROW_LENGTH = 0L; - public static final Long TABLE_4_NUM_ROWS = 0L; - public static final Long TABLE_4_DATA_LENGTH = 1000L; - public static final Long TABLE_4_MAX_DATA_LENGTH = Long.MAX_VALUE; - - public static final Table TABLE_4 = Table.builder() + public final static UUID TABLE_4_ID = UUID.fromString("6c87cbcf-5043-404f-9bf1-b09ddbac25a2"); + public final static String TABLE_4_NAME = "Sensor 2"; + public final static String TABLE_4_INTERNAL_NAME = "sensor_2"; + public final static Boolean TABLE_4_VERSIONED = true; + public final static Boolean TABLE_4_IS_PUBLIC = true; + public final static Boolean TABLE_4_SCHEMA_PUBLIC = false; + public final static String TABLE_4_DESCRIPTION = "Hello sensor"; + public final static String TABLE_4_QUEUE_NAME = TABLE_4_INTERNAL_NAME; + public final static String TABLE_4_ROUTING_KEY = "dbrepo." + DATABASE_1_ID + "." + TABLE_4_ID; + public final static Instant TABLE_4_CREATED = Instant.ofEpochSecond(1677400175L) /* 2023-02-26 08:29:35 (UTC) */; + public final static Instant TABLE_4_LAST_MODIFIED = Instant.ofEpochSecond(1677400175L) /* 2023-02-26 08:29:35 (UTC) */; + public final static Long TABLE_4_AVG_ROW_LENGTH = 0L; + public final static Long TABLE_4_NUM_ROWS = 0L; + public final static Long TABLE_4_DATA_LENGTH = 1000L; + public final static Long TABLE_4_MAX_DATA_LENGTH = Long.MAX_VALUE; + + public final Table TABLE_4 = Table.builder() .id(TABLE_4_ID) .tdbid(DATABASE_1_ID) - .internalName(TABLE_4_INTERNALNAME) + .internalName(TABLE_4_INTERNAL_NAME) .description(TABLE_4_DESCRIPTION) .database(null /* DATABASE_1 */) .name(TABLE_4_NAME) @@ -2080,10 +2215,10 @@ public abstract class BaseTest { .maxDataLength(TABLE_4_MAX_DATA_LENGTH) .build(); - public static final TableDto TABLE_4_DTO = TableDto.builder() + public final TableDto TABLE_4_DTO = TableDto.builder() .id(TABLE_4_ID) .databaseId(DATABASE_1_ID) - .internalName(TABLE_4_INTERNALNAME) + .internalName(TABLE_4_INTERNAL_NAME) .description(TABLE_4_DESCRIPTION) .name(TABLE_4_NAME) .queueName(TABLE_4_QUEUE_NAME) @@ -2100,10 +2235,10 @@ public abstract class BaseTest { .maxDataLength(TABLE_4_MAX_DATA_LENGTH) .build(); - public static final TableBriefDto TABLE_4_BRIEF_DTO = TableBriefDto.builder() + public final TableBriefDto TABLE_4_BRIEF_DTO = TableBriefDto.builder() .id(TABLE_4_ID) .databaseId(DATABASE_1_ID) - .internalName(TABLE_4_INTERNALNAME) + .internalName(TABLE_4_INTERNAL_NAME) .description(TABLE_4_DESCRIPTION) .name(TABLE_4_NAME) .isVersioned(TABLE_4_VERSIONED) @@ -2112,18 +2247,17 @@ public abstract class BaseTest { .ownedBy(USER_1_ID) .build(); - public static final ColumnBriefDto TABLE_4_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() + public final ColumnBriefDto TABLE_4_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() .id(UUID.fromString("360f02be-6dfb-48ea-9d1e-1da488b0e324")) .name("Timestamp") .internalName("timestamp") .columnType(ColumnTypeDto.TIMESTAMP) .build(); - public static final UUID COLUMN_4_1_ID = UUID.fromString("c8ec8a56-dea1-4316-895f-56e6d289cbf7"); - - public static final UUID COLUMN_4_2_ID = UUID.fromString("d06956ae-aabd-474f-a47d-47af1ba043d1"); + public final static UUID COLUMN_4_1_ID = UUID.fromString("c8ec8a56-dea1-4316-895f-56e6d289cbf7"); + public final static UUID COLUMN_4_2_ID = UUID.fromString("d06956ae-aabd-474f-a47d-47af1ba043d1"); - public static final List<TableColumn> TABLE_4_COLUMNS = List.of(TableColumn.builder() + public final List<TableColumn> TABLE_4_COLUMNS = List.of(TableColumn.builder() .id(COLUMN_4_1_ID) .ordinalPosition(0) .table(TABLE_4) @@ -2142,7 +2276,7 @@ public abstract class BaseTest { .isNullAllowed(true) .build()); - public static final List<CreateTableColumnDto> TABLE_4_COLUMNS_CREATE_DTO = List.of(CreateTableColumnDto.builder() + public final List<CreateTableColumnDto> TABLE_4_COLUMNS_CREATE_DTO = List.of(CreateTableColumnDto.builder() .name("Timestamp") .type(ColumnTypeDto.TIMESTAMP) .nullAllowed(false) @@ -2155,28 +2289,29 @@ public abstract class BaseTest { .d(10L) .build()); - public static final CreateTableConstraintsDto TABLE_4_CONSTRAINTS_CREATE_DTO = CreateTableConstraintsDto.builder() + public final CreateTableConstraintsDto TABLE_4_CONSTRAINTS_CREATE_DTO = CreateTableConstraintsDto.builder() .checks(new LinkedHashSet<>()) .primaryKey(new LinkedHashSet<>(Set.of("Timestamp"))) .foreignKeys(new LinkedList<>()) .uniques(new LinkedList<>(List.of(List.of("Timestamp")))) .build(); - public static final CreateTableDto TABLE_4_CREATE_DTO = CreateTableDto.builder() + public final CreateTableDto TABLE_4_CREATE_DTO = CreateTableDto.builder() .name(TABLE_4_NAME) .description(TABLE_4_DESCRIPTION) .columns(TABLE_4_COLUMNS_CREATE_DTO) .constraints(TABLE_4_CONSTRAINTS_CREATE_DTO) .build(); - public static final at.tuwien.api.database.table.internal.TableCreateDto TABLE_4_CREATE_INTERNAL_DTO = at.tuwien.api.database.table.internal.TableCreateDto.builder() - .name(TABLE_4_NAME) - .description(TABLE_4_DESCRIPTION) - .columns(TABLE_4_COLUMNS_CREATE_DTO) - .constraints(TABLE_4_CONSTRAINTS_CREATE_DTO) - .build(); + public final at.ac.tuwien.ifs.dbrepo.core.api.database.table.internal.TableCreateDto TABLE_4_CREATE_INTERNAL_DTO = + at.ac.tuwien.ifs.dbrepo.core.api.database.table.internal.TableCreateDto.builder() + .name(TABLE_4_NAME) + .description(TABLE_4_DESCRIPTION) + .columns(TABLE_4_COLUMNS_CREATE_DTO) + .constraints(TABLE_4_CONSTRAINTS_CREATE_DTO) + .build(); - public static final List<ColumnDto> TABLE_4_COLUMNS_DTO = List.of(ColumnDto.builder() + public final List<ColumnDto> TABLE_4_COLUMNS_DTO = List.of(ColumnDto.builder() .id(COLUMN_4_1_ID) .databaseId(DATABASE_1_ID) .tableId(TABLE_4_ID) @@ -2195,19 +2330,19 @@ public abstract class BaseTest { .isNullAllowed(true) .build()); - public static final UUID TABLE_8_ID = UUID.fromString("2e039d0d-3257-4083-8b32-76d7cfa1f7fd"); - public static final String TABLE_8_NAME = "location"; - public static final String TABLE_8_INTERNAL_NAME = "mfcc"; - public static final Boolean TABLE_8_VERSIONED = true; - public static final Boolean TABLE_8_IS_PUBLIC = false; - public static final Boolean TABLE_8_SCHEMA_PUBLIC = false; - public static final String TABLE_8_DESCRIPTION = "Hello mfcc"; - public static final String TABLE_8_QUEUE_NAME = TABLE_8_INTERNAL_NAME; - public static final String TABLE_8_ROUTING_KEY = "dbrepo." + DATABASE_3_ID + "." + TABLE_8_ID; - public static final Instant TABLE_8_CREATED = Instant.ofEpochSecond(1688400185L) /* 2023-02-26 08:29:35 (UTC) */; - public static final Instant TABLE_8_LAST_MODIFIED = Instant.ofEpochSecond(1688400185L) /* 2023-02-26 08:29:35 (UTC) */; - - public static final Table TABLE_8 = Table.builder() + public final static UUID TABLE_8_ID = UUID.fromString("2e039d0d-3257-4083-8b32-76d7cfa1f7fd"); + public final static String TABLE_8_NAME = "location"; + public final static String TABLE_8_INTERNAL_NAME = "mfcc"; + public final static Boolean TABLE_8_VERSIONED = true; + public final static Boolean TABLE_8_IS_PUBLIC = false; + public final static Boolean TABLE_8_SCHEMA_PUBLIC = false; + public final static String TABLE_8_DESCRIPTION = "Hello mfcc"; + public final static String TABLE_8_QUEUE_NAME = TABLE_8_INTERNAL_NAME; + public final static String TABLE_8_ROUTING_KEY = "dbrepo." + DATABASE_3_ID + "." + TABLE_8_ID; + public final static Instant TABLE_8_CREATED = Instant.ofEpochSecond(1688400185L) /* 2023-02-26 08:29:35 (UTC) */; + public final static Instant TABLE_8_LAST_MODIFIED = Instant.ofEpochSecond(1688400185L) /* 2023-02-26 08:29:35 (UTC) */; + + public final Table TABLE_8 = Table.builder() .id(TABLE_8_ID) .tdbid(DATABASE_3_ID) .internalName(TABLE_8_INTERNAL_NAME) @@ -2226,7 +2361,7 @@ public abstract class BaseTest { .lastModified(TABLE_8_LAST_MODIFIED) .build(); - public static final TableDto TABLE_8_DTO = TableDto.builder() + public final TableDto TABLE_8_DTO = TableDto.builder() .id(TABLE_8_ID) .databaseId(DATABASE_3_ID) .internalName(TABLE_8_INTERNAL_NAME) @@ -2241,13 +2376,13 @@ public abstract class BaseTest { .owner(USER_1_BRIEF_DTO) .build(); - public static final TableUpdateDto TABLE_8_UPDATE_DTO = TableUpdateDto.builder() + public final TableUpdateDto TABLE_8_UPDATE_DTO = TableUpdateDto.builder() .description(null) .isPublic(true) .isSchemaPublic(true) .build(); - public static final TableBriefDto TABLE_8_BRIEF_DTO = TableBriefDto.builder() + public final TableBriefDto TABLE_8_BRIEF_DTO = TableBriefDto.builder() .id(TABLE_8_ID) .databaseId(DATABASE_3_ID) .internalName(TABLE_8_INTERNAL_NAME) @@ -2259,20 +2394,19 @@ public abstract class BaseTest { .ownedBy(USER_1_ID) .build(); - public static final UUID TABLE_9_ID = UUID.fromString("9314294f-04fc-4354-8b1f-2a8aeb566453"); - public static final String TABLE_9_NAME = "Weather Location"; - public static final String TABLE_9_INTERNAL_NAME = "weather_location"; - public static final Boolean TABLE_9_VERSIONED = true; - public static final Boolean TABLE_9_IS_PUBLIC = false; - public static final Boolean TABLE_9_SCHEMA_PUBLIC = true; - public static final Boolean TABLE_9_PROCESSED_CONSTRAINTS = true; - public static final String TABLE_9_DESCRIPTION = "Location"; - public static final String TABLE_9_QUEUE_NAME = TABLE_9_INTERNAL_NAME; - public static final String TABLE_9_ROUTING_KEY = "dbrepo." + DATABASE_4_ID + "." + TABLE_9_ID; - public static final Instant TABLE_9_CREATED = Instant.ofEpochSecond(1688400185L) /* 2023-02-26 08:29:35 (UTC) */; - public static final Instant TABLE_9_LAST_MODIFIED = Instant.ofEpochSecond(1688400185L) /* 2023-02-26 08:29:35 (UTC) */; - - public static final Table TABLE_9 = Table.builder() + public final static UUID TABLE_9_ID = UUID.fromString("9314294f-04fc-4354-8b1f-2a8aeb566453"); + public final static String TABLE_9_NAME = "Weather Location"; + public final static String TABLE_9_INTERNAL_NAME = "weather_location"; + public final static Boolean TABLE_9_VERSIONED = true; + public final static Boolean TABLE_9_IS_PUBLIC = false; + public final static Boolean TABLE_9_SCHEMA_PUBLIC = true; + public final static String TABLE_9_DESCRIPTION = "Location"; + public final static String TABLE_9_QUEUE_NAME = TABLE_9_INTERNAL_NAME; + public final static String TABLE_9_ROUTING_KEY = "dbrepo." + DATABASE_4_ID + "." + TABLE_9_ID; + public final static Instant TABLE_9_CREATED = Instant.ofEpochSecond(1688400185L) /* 2023-02-26 08:29:35 (UTC) */; + public final static Instant TABLE_9_LAST_MODIFIED = Instant.ofEpochSecond(1688400185L) /* 2023-02-26 08:29:35 (UTC) */; + + public final Table TABLE_9 = Table.builder() .id(TABLE_9_ID) .tdbid(DATABASE_4_ID) .internalName(TABLE_9_INTERNAL_NAME) @@ -2291,7 +2425,7 @@ public abstract class BaseTest { .lastModified(TABLE_9_LAST_MODIFIED) .build(); - public static final TableDto TABLE_9_DTO = TableDto.builder() + public final TableDto TABLE_9_DTO = TableDto.builder() .id(TABLE_9_ID) .databaseId(DATABASE_4_ID) .internalName(TABLE_9_INTERNAL_NAME) @@ -2306,7 +2440,7 @@ public abstract class BaseTest { .owner(USER_1_BRIEF_DTO) .build(); - public static final TableBriefDto TABLE_9_BRIEF_DTO = TableBriefDto.builder() + public final TableBriefDto TABLE_9_BRIEF_DTO = TableBriefDto.builder() .id(TABLE_9_ID) .databaseId(DATABASE_4_ID) .internalName(TABLE_9_INTERNAL_NAME) @@ -2318,22 +2452,21 @@ public abstract class BaseTest { .ownedBy(USER_1_ID) .build(); - public static final UUID COLUMN_9_1_ID = UUID.fromString("e03c7578-2d1a-4599-9b11-7174f40efc0a"); - public static final String COLUMN_9_1_NAME = "location"; - public static final String COLUMN_9_1_INTERNAL_NAME = "location"; + public final static UUID COLUMN_9_1_ID = UUID.fromString("e03c7578-2d1a-4599-9b11-7174f40efc0a"); + public final static String COLUMN_9_1_NAME = "location"; + public final static String COLUMN_9_1_INTERNAL_NAME = "location"; - public static final ColumnBriefDto TABLE_9_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() + public final ColumnBriefDto TABLE_9_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() .id(COLUMN_9_1_ID) .name(COLUMN_9_1_NAME) .internalName(COLUMN_9_1_INTERNAL_NAME) .columnType(ColumnTypeDto.BIGINT) .build(); - public static final UUID COLUMN_9_2_ID = UUID.fromString("03c07223-17e1-4af5-b1ae-ef9ab434fe2d"); - - public static final UUID COLUMN_9_3_ID = UUID.fromString("ee6590db-923b-4234-beb8-3120da055cf6"); + public final static UUID COLUMN_9_2_ID = UUID.fromString("03c07223-17e1-4af5-b1ae-ef9ab434fe2d"); + public final static UUID COLUMN_9_3_ID = UUID.fromString("ee6590db-923b-4234-beb8-3120da055cf6"); - public static final List<TableColumn> TABLE_9_COLUMNS = List.of(TableColumn.builder() + public final List<TableColumn> TABLE_9_COLUMNS = List.of(TableColumn.builder() .id(COLUMN_9_1_ID) .ordinalPosition(0) .table(TABLE_9) @@ -2372,7 +2505,7 @@ public abstract class BaseTest { .sets(null) .build()); - public static final List<ColumnDto> TABLE_9_COLUMNS_DTO = List.of(ColumnDto.builder() + public final List<ColumnDto> TABLE_9_COLUMNS_DTO = List.of(ColumnDto.builder() .id(COLUMN_9_1_ID) .ordinalPosition(0) .name(COLUMN_9_1_NAME) @@ -2408,7 +2541,7 @@ public abstract class BaseTest { .sets(null) .build()); - public static final Constraints TABLE_9_CONSTRAINTS = Constraints.builder() + public final Constraints TABLE_9_CONSTRAINTS = Constraints.builder() .checks(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>()) .uniques(new LinkedList<>()) @@ -2419,7 +2552,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final ConstraintsDto TABLE_9_CONSTRAINTS_DTO = ConstraintsDto.builder() + public final ConstraintsDto TABLE_9_CONSTRAINTS_DTO = ConstraintsDto.builder() .checks(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>()) .uniques(new LinkedList<>()) @@ -2430,17 +2563,17 @@ public abstract class BaseTest { .build()))) .build(); - public static final UUID QUERY_9_ID = UUID.fromString("df34f0b9-b64c-406c-9109-7a031f4a7f27"); - public static final String QUERY_9_STATEMENT = "SELECT `lat`, `lng` FROM `mfcc` WHERE `location` = 'Fuji'"; - public static final String QUERY_9_QUERY_HASH = "dfcdec827b2ea74d89415f8d1ce39354f59ef304444ba4e12e4f3d9d3f35abe3"; - public static final String QUERY_9_RESULT_HASH = "f0aba070a1fd29e96230d12d7c0b4d08b89820b3cc2dda0575680492010016e7"; - public static final Instant QUERY_9_CREATED = Instant.now().minus(5, MINUTES); - public static final Instant QUERY_9_EXECUTION = Instant.now().minus(1, MINUTES); - public static final Instant QUERY_9_LAST_MODIFIED = Instant.ofEpochSecond(1551588555L); - public static final Long QUERY_9_RESULT_NUMBER = 6L; - public static final Boolean QUERY_9_PERSISTED = true; + public final static UUID QUERY_9_ID = UUID.fromString("df34f0b9-b64c-406c-9109-7a031f4a7f27"); + public final static String QUERY_9_STATEMENT = "SELECT `lat`, `lng` FROM `mfcc` WHERE `location` = 'Fuji'"; + public final static String QUERY_9_QUERY_HASH = "dfcdec827b2ea74d89415f8d1ce39354f59ef304444ba4e12e4f3d9d3f35abe3"; + public final static String QUERY_9_RESULT_HASH = "f0aba070a1fd29e96230d12d7c0b4d08b89820b3cc2dda0575680492010016e7"; + public final static Instant QUERY_9_CREATED = Instant.now().minus(5, MINUTES); + public final static Instant QUERY_9_EXECUTION = Instant.now().minus(1, MINUTES); + public final static Instant QUERY_9_LAST_MODIFIED = Instant.ofEpochSecond(1551588555L); + public final static Long QUERY_9_RESULT_NUMBER = 6L; + public final static Boolean QUERY_9_PERSISTED = true; - public static final QueryDto QUERY_9_DTO = QueryDto.builder() + public final QueryDto QUERY_9_DTO = QueryDto.builder() .id(QUERY_9_ID) .databaseId(DATABASE_3_ID) .query(QUERY_9_STATEMENT) @@ -2453,8 +2586,9 @@ public abstract class BaseTest { .owner(USER_1_BRIEF_DTO) .build(); - public static final SubsetDto QUERY_9_SUBSET_DTO = SubsetDto.builder() - .tableId(TABLE_9_ID) + public final SubsetDto QUERY_9_SUBSET_DTO = SubsetDto.builder() + .datasourceId(TABLE_9_ID) + .datasourceType(DatasourceType.TABLE) .columns(new LinkedList<>(List.of(COLUMN_9_2_ID, COLUMN_9_3_ID))) .filter(new LinkedList<>(List.of(FilterDto.builder() .columnId(COLUMN_9_1_ID) @@ -2464,7 +2598,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final ViewDto QUERY_9_VIEW_DTO = ViewDto.builder() + public final ViewDto QUERY_9_VIEW_DTO = ViewDto.builder() .query(QUERY_9_STATEMENT) .queryHash(QUERY_9_QUERY_HASH) .owner(USER_1_BRIEF_DTO) @@ -2478,14 +2612,14 @@ public abstract class BaseTest { .build()))) .build(); - public static final String QUEUE_NAME = "dbrepo"; - public static final String QUEUE_VHOST = "dbrepo"; - public static final Boolean QUEUE_AUTO_DELETE = false; - public static final Boolean QUEUE_DURABLE = true; - public static final Boolean QUEUE_EXCLUSIVE = false; - public static final String QUEUE_TYPE = "quorum"; + public final static String QUEUE_NAME = "dbrepo"; + public final static String QUEUE_VHOST = "dbrepo"; + public final static Boolean QUEUE_AUTO_DELETE = false; + public final static Boolean QUEUE_DURABLE = true; + public final static Boolean QUEUE_EXCLUSIVE = false; + public final static String QUEUE_TYPE = "quorum"; - public static final QueueDto QUEUE_DTO = QueueDto.builder() + public final QueueDto QUEUE_DTO = QueueDto.builder() .name(QUEUE_NAME) .vhost(QUEUE_VHOST) .autoDelete(QUEUE_AUTO_DELETE) @@ -2494,18 +2628,17 @@ public abstract class BaseTest { .type(QUEUE_TYPE) .build(); - public static final UUID ONTOLOGY_1_ID = UUID.fromString("dc195d01-0a45-4583-aa83-fd270b874353"); - public static final String ONTOLOGY_1_PREFIX = "om2"; - public static final String ONTOLOGY_1_NEW_PREFIX = "om-2"; - public static final String ONTOLOGY_1_URI = "http://www.ontology-of-units-of-measure.org/resource/om-2/"; - public static final String ONTOLOGY_1_URI_PATTERN = "http://www.ontology-of-units-of-measure.org/resource/om-2/.*"; - public static final String ONTOLOGY_1_SPARQL_ENDPOINT = null; - public static final Boolean ONTOLOGY_1_SPARQL = false; - public static final String ONTOLOGY_1_RDF_PATH = "rdf/om-2.0.rdf"; - public static final Boolean ONTOLOGY_1_RDF = true; - public static final UUID ONTOLOGY_1_CREATED_BY = USER_1_ID; + public final static UUID ONTOLOGY_1_ID = UUID.fromString("dc195d01-0a45-4583-aa83-fd270b874353"); + public final static String ONTOLOGY_1_PREFIX = "om2"; + public final static String ONTOLOGY_1_NEW_PREFIX = "om-2"; + public final static String ONTOLOGY_1_URI = "http://www.ontology-of-units-of-measure.org/resource/om-2/"; + public final static String ONTOLOGY_1_URI_PATTERN = "http://www.ontology-of-units-of-measure.org/resource/om-2/.*"; + public final static String ONTOLOGY_1_SPARQL_ENDPOINT = null; + public final static Boolean ONTOLOGY_1_SPARQL = false; + public final static String ONTOLOGY_1_RDF_PATH = "rdf/om-2.0.rdf"; + public final static Boolean ONTOLOGY_1_RDF = true; - public static final Ontology ONTOLOGY_1 = Ontology.builder() + public final Ontology ONTOLOGY_1 = Ontology.builder() .id(ONTOLOGY_1_ID) .prefix(ONTOLOGY_1_PREFIX) .uri(ONTOLOGY_1_URI) @@ -2514,7 +2647,7 @@ public abstract class BaseTest { .rdfPath(ONTOLOGY_1_RDF_PATH) .build(); - public static final OntologyDto ONTOLOGY_1_DTO = OntologyDto.builder() + public final OntologyDto ONTOLOGY_1_DTO = OntologyDto.builder() .id(ONTOLOGY_1_ID) .prefix(ONTOLOGY_1_PREFIX) .uri(ONTOLOGY_1_URI) @@ -2525,7 +2658,7 @@ public abstract class BaseTest { .rdf(ONTOLOGY_1_RDF) .build(); - public static final OntologyBriefDto ONTOLOGY_1_BRIEF_DTO = OntologyBriefDto.builder() + public final OntologyBriefDto ONTOLOGY_1_BRIEF_DTO = OntologyBriefDto.builder() .id(ONTOLOGY_1_ID) .prefix(ONTOLOGY_1_PREFIX) .uri(ONTOLOGY_1_URI) @@ -2534,131 +2667,124 @@ public abstract class BaseTest { .rdf(ONTOLOGY_1_RDF) .build(); - public static final OntologyCreateDto ONTOLOGY_1_CREATE_DTO = OntologyCreateDto.builder() + public final OntologyCreateDto ONTOLOGY_1_CREATE_DTO = OntologyCreateDto.builder() .prefix(ONTOLOGY_1_PREFIX) .uri(ONTOLOGY_1_URI) .sparqlEndpoint(ONTOLOGY_1_SPARQL_ENDPOINT) .build(); - public static final OntologyModifyDto ONTOLOGY_1_MODIFY_DTO = OntologyModifyDto.builder() + public final OntologyModifyDto ONTOLOGY_1_MODIFY_DTO = OntologyModifyDto.builder() .prefix(ONTOLOGY_1_NEW_PREFIX) .uri(ONTOLOGY_1_URI) .sparqlEndpoint(ONTOLOGY_1_SPARQL_ENDPOINT) .build(); - public static final UUID ONTOLOGY_2_ID = UUID.fromString("41d902a1-f9f8-4d51-ad64-618b72acf5ed"); - public static final String ONTOLOGY_2_PREFIX = "wd"; - public static final String ONTOLOGY_2_URI = "http://www.wikidata.org/"; - public static final String ONTOLOGY_2_SPARQL_ENDPOINT = "https://query.wikidata.org/sparql"; - public static final UUID ONTOLOGY_2_CREATED_BY = USER_1_ID; + public final static UUID ONTOLOGY_2_ID = UUID.fromString("41d902a1-f9f8-4d51-ad64-618b72acf5ed"); + public final static String ONTOLOGY_2_PREFIX = "wd"; + public final static String ONTOLOGY_2_URI = "http://www.wikidata.org/"; + public final static String ONTOLOGY_2_SPARQL_ENDPOINT = "https://query.wikidata.org/sparql"; - public static final Ontology ONTOLOGY_2 = Ontology.builder() + public final Ontology ONTOLOGY_2 = Ontology.builder() .id(ONTOLOGY_2_ID) .prefix(ONTOLOGY_2_PREFIX) .uri(ONTOLOGY_2_URI) .sparqlEndpoint(ONTOLOGY_2_SPARQL_ENDPOINT) .build(); - public static final OntologyCreateDto ONTOLOGY_2_CREATE_DTO = OntologyCreateDto.builder() + public final OntologyCreateDto ONTOLOGY_2_CREATE_DTO = OntologyCreateDto.builder() .prefix(ONTOLOGY_2_PREFIX) .uri(ONTOLOGY_2_URI) .sparqlEndpoint(ONTOLOGY_2_SPARQL_ENDPOINT) .build(); - public static final UUID ONTOLOGY_3_ID = UUID.fromString("5b41390b-d2d2-45c6-8038-1258c4b2725f"); - public static final String ONTOLOGY_3_PREFIX = "rdfs"; - public static final String ONTOLOGY_3_URI = "http://www.w3.org/2000/01/rdf-schema#"; - public static final String ONTOLOGY_3_SPARQL_ENDPOINT = null; - public static final UUID ONTOLOGY_3_CREATED_BY = USER_1_ID; + public final static UUID ONTOLOGY_3_ID = UUID.fromString("5b41390b-d2d2-45c6-8038-1258c4b2725f"); + public final static String ONTOLOGY_3_PREFIX = "rdfs"; + public final static String ONTOLOGY_3_URI = "http://www.w3.org/2000/01/rdf-schema#"; + public final static String ONTOLOGY_3_SPARQL_ENDPOINT = null; - public static final Ontology ONTOLOGY_3 = Ontology.builder() + public final Ontology ONTOLOGY_3 = Ontology.builder() .id(ONTOLOGY_3_ID) .prefix(ONTOLOGY_3_PREFIX) .uri(ONTOLOGY_3_URI) .sparqlEndpoint(ONTOLOGY_3_SPARQL_ENDPOINT) .build(); - public static final OntologyCreateDto ONTOLOGY_3_CREATE_DTO = OntologyCreateDto.builder() + public final OntologyCreateDto ONTOLOGY_3_CREATE_DTO = OntologyCreateDto.builder() .prefix(ONTOLOGY_3_PREFIX) .uri(ONTOLOGY_3_URI) .sparqlEndpoint(ONTOLOGY_3_SPARQL_ENDPOINT) .build(); - public static final UUID ONTOLOGY_4_ID = UUID.fromString("d6992475-9b71-4a4a-a6eb-bc1fe6a34443"); - public static final String ONTOLOGY_4_PREFIX = "schema"; - public static final String ONTOLOGY_4_URI = "http://schema.org/"; - public static final String ONTOLOGY_4_SPARQL_ENDPOINT = null; - public static final UUID ONTOLOGY_4_CREATED_BY = USER_1_ID; + public final static UUID ONTOLOGY_4_ID = UUID.fromString("d6992475-9b71-4a4a-a6eb-bc1fe6a34443"); + public final static String ONTOLOGY_4_PREFIX = "schema"; + public final static String ONTOLOGY_4_URI = "http://schema.org/"; + public final static String ONTOLOGY_4_SPARQL_ENDPOINT = null; - public static final Ontology ONTOLOGY_4 = Ontology.builder() + public final Ontology ONTOLOGY_4 = Ontology.builder() .id(ONTOLOGY_4_ID) .prefix(ONTOLOGY_4_PREFIX) .uri(ONTOLOGY_4_URI) .sparqlEndpoint(ONTOLOGY_4_SPARQL_ENDPOINT) .build(); - public static final OntologyCreateDto ONTOLOGY_4_CREATE_DTO = OntologyCreateDto.builder() + public final OntologyCreateDto ONTOLOGY_4_CREATE_DTO = OntologyCreateDto.builder() .prefix(ONTOLOGY_4_PREFIX) .uri(ONTOLOGY_4_URI) .sparqlEndpoint(ONTOLOGY_4_SPARQL_ENDPOINT) .build(); - public static final UUID ONTOLOGY_5_ID = UUID.fromString("f95d1330-762e-4f5a-875a-3c64da5808a1"); - public static final String ONTOLOGY_5_PREFIX = "db"; - public static final String ONTOLOGY_5_URI = "http://dbpedia.org"; - public static final String ONTOLOGY_5_SPARQL_ENDPOINT = "http://dbpedia.org/sparql"; - public static final UUID ONTOLOGY_5_CREATED_BY = USER_1_ID; + public final static UUID ONTOLOGY_5_ID = UUID.fromString("f95d1330-762e-4f5a-875a-3c64da5808a1"); + public final static String ONTOLOGY_5_PREFIX = "db"; + public final static String ONTOLOGY_5_URI = "http://dbpedia.org"; + public final static String ONTOLOGY_5_SPARQL_ENDPOINT = "http://dbpedia.org/sparql"; - public static final Ontology ONTOLOGY_5 = Ontology.builder() + public final Ontology ONTOLOGY_5 = Ontology.builder() .id(ONTOLOGY_5_ID) .prefix(ONTOLOGY_5_PREFIX) .uri(ONTOLOGY_5_URI) .sparqlEndpoint(ONTOLOGY_5_SPARQL_ENDPOINT) .build(); - public static final OntologyCreateDto ONTOLOGY_5_CREATE_DTO = OntologyCreateDto.builder() + public final OntologyCreateDto ONTOLOGY_5_CREATE_DTO = OntologyCreateDto.builder() .prefix(ONTOLOGY_5_PREFIX) .uri(ONTOLOGY_5_URI) .sparqlEndpoint(ONTOLOGY_5_SPARQL_ENDPOINT) .build(); - public static final UUID COLUMN_8_1_ID = UUID.fromString("af362ac6-5dbb-4ede-83ea-5d94b39641c8"); - public static final Integer COLUMN_8_1_ORDINALPOS = 0; - public static final String COLUMN_8_1_NAME = "ID"; - public static final String COLUMN_8_1_INTERNAL_NAME = "id"; - public static final TableColumnType COLUMN_8_1_TYPE = TableColumnType.BIGINT; - public static final ColumnTypeDto COLUMN_8_1_TYPE_DTO = ColumnTypeDto.BIGINT; - public static final Boolean COLUMN_8_1_NULL = false; - public static final Boolean COLUMN_8_1_AUTO_GENERATED = true; - - public static final UUID COLUMN_8_2_ID = UUID.fromString("7ada597b-0766-4612-9ace-67eeee94e2da"); - public static final Integer COLUMN_8_2_ORDINALPOS = 1; - public static final String COLUMN_8_2_NAME = "Value"; - public static final String COLUMN_8_2_INTERNAL_NAME = "value"; - public static final TableColumnType COLUMN_8_2_TYPE = TableColumnType.DECIMAL; - public static final ColumnTypeDto COLUMN_8_2_TYPE_DTO = ColumnTypeDto.DECIMAL; - public static final Long COLUMN_8_2_SIZE = 10L; - public static final Long COLUMN_8_2_D = 10L; - public static final Boolean COLUMN_8_2_NULL = false; - public static final Boolean COLUMN_8_2_AUTO_GENERATED = false; - - public static final UUID COLUMN_8_3_ID = UUID.fromString("8bcd9ef8-f7b8-4730-acc1-a3d43ba69a56"); - public static final Integer COLUMN_8_3_ORDINALPOS = 2; - public static final String COLUMN_8_3_NAME = "raw"; - public static final String COLUMN_8_3_INTERNAL_NAME = "raw"; - public static final TableColumnType COLUMN_8_3_TYPE = TableColumnType.LONGBLOB; - public static final ColumnTypeDto COLUMN_8_3_TYPE_DTO = ColumnTypeDto.LONGBLOB; - public static final Boolean COLUMN_8_3_NULL = true; - public static final Boolean COLUMN_8_3_AUTO_GENERATED = false; - - public static final ColumnBriefDto TABLE_8_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() + public final static UUID COLUMN_8_1_ID = UUID.fromString("af362ac6-5dbb-4ede-83ea-5d94b39641c8"); + public final static Integer COLUMN_8_1_ORDINALPOS = 0; + public final static String COLUMN_8_1_NAME = "ID"; + public final static String COLUMN_8_1_INTERNAL_NAME = "id"; + public final static TableColumnType COLUMN_8_1_TYPE = TableColumnType.BIGINT; + public final static ColumnTypeDto COLUMN_8_1_TYPE_DTO = ColumnTypeDto.BIGINT; + public final static Boolean COLUMN_8_1_NULL = false; + + public final static UUID COLUMN_8_2_ID = UUID.fromString("7ada597b-0766-4612-9ace-67eeee94e2da"); + public final static Integer COLUMN_8_2_ORDINALPOS = 1; + public final static String COLUMN_8_2_NAME = "Value"; + public final static String COLUMN_8_2_INTERNAL_NAME = "value"; + public final static TableColumnType COLUMN_8_2_TYPE = TableColumnType.DECIMAL; + public final static ColumnTypeDto COLUMN_8_2_TYPE_DTO = ColumnTypeDto.DECIMAL; + public final static Long COLUMN_8_2_SIZE = 10L; + public final static Long COLUMN_8_2_D = 10L; + public final static Boolean COLUMN_8_2_NULL = true; + + public final static UUID COLUMN_8_3_ID = UUID.fromString("8bcd9ef8-f7b8-4730-acc1-a3d43ba69a56"); + public final static Integer COLUMN_8_3_ORDINALPOS = 2; + public final static String COLUMN_8_3_NAME = "raw"; + public final static String COLUMN_8_3_INTERNAL_NAME = "raw"; + public final static TableColumnType COLUMN_8_3_TYPE = TableColumnType.LONGBLOB; + public final static ColumnTypeDto COLUMN_8_3_TYPE_DTO = ColumnTypeDto.LONGBLOB; + public final static Boolean COLUMN_8_3_NULL = true; + + public final ColumnBriefDto TABLE_8_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() .id(COLUMN_8_1_ID) .name(COLUMN_8_1_NAME) .internalName(COLUMN_8_1_INTERNAL_NAME) .columnType(ColumnTypeDto.BIGINT) .build(); - public static final List<TableColumn> TABLE_8_COLUMNS = List.of(TableColumn.builder() + public final List<TableColumn> TABLE_8_COLUMNS = List.of(TableColumn.builder() .id(COLUMN_8_1_ID) .ordinalPosition(COLUMN_8_1_ORDINALPOS) .table(TABLE_8) @@ -2688,7 +2814,7 @@ public abstract class BaseTest { .isNullAllowed(COLUMN_8_3_NULL) .build()); - public static final List<ColumnDto> TABLE_8_COLUMNS_DTO = List.of(ColumnDto.builder() + public final List<ColumnDto> TABLE_8_COLUMNS_DTO = List.of(ColumnDto.builder() .id(COLUMN_8_1_ID) .ordinalPosition(COLUMN_8_1_ORDINALPOS) .name(COLUMN_8_1_NAME) @@ -2713,9 +2839,9 @@ public abstract class BaseTest { .isNullAllowed(COLUMN_8_3_NULL) .build()); - public static final Long TABLE_8_DATA_COUNT = 6L; + public final static Long TABLE_8_DATA_COUNT = 6L; @SuppressWarnings("java:S3599") - public static final List<Map<String, Object>> TABLE_8_DATA_DTO = new LinkedList<>(List.of( + public final List<Map<String, Object>> TABLE_8_DATA_DTO = new LinkedList<>(List.of( new HashMap<>() {{ put(COLUMN_8_1_INTERNAL_NAME, BigInteger.valueOf(1L)); put(COLUMN_8_2_INTERNAL_NAME, 11.2); @@ -2749,30 +2875,29 @@ public abstract class BaseTest { )); @SuppressWarnings("java:S3599") - public static final TableStatisticDto TABLE_8_STATISTIC_DTO = TableStatisticDto.builder() - .columns(new HashMap<>() {{ - put(COLUMN_8_1_INTERNAL_NAME, ColumnStatisticDto.builder() - .min(BigDecimal.valueOf(11.2)) - .max(BigDecimal.valueOf(23.1)) - .mean(BigDecimal.valueOf(13.5333)) - .median(BigDecimal.valueOf(11.4)) - .stdDev(BigDecimal.valueOf(4.2952)) - .build()); - }}) - .build(); - - public static final UUID QUERY_1_ID = UUID.fromString("60494137-f000-459e-acd3-4fcadbdf14ca"); - public static final String QUERY_1_STATEMENT = "SELECT `id`, `date`, `location`, `mintemp`, `rainfall` FROM `weather_aus` ORDER BY id ASC"; - public static final String QUERY_1_DOI = null; - public static final Long QUERY_1_RESULT_NUMBER = 2L; - public static final String QUERY_1_QUERY_HASH = "a3b8ac39e38167d14cf3a9c20a69e4b6954d049525390b973a2c23064953a992"; - public static final String QUERY_1_RESULT_HASH = "8358c8ade4849d2094ab5bb29127afdae57e6bb5acb1db7af603813d406c467a"; - public static final Instant QUERY_1_CREATED = Instant.ofEpochSecond(1677648377L); - public static final Instant QUERY_1_EXECUTION = Instant.now(); - public static final Boolean QUERY_1_PERSISTED = true; - - public static final SubsetDto QUERY_1_SUBSET_DTO = SubsetDto.builder() - .tableId(TABLE_1_ID) + public final TableStatisticDto TABLE_8_STATISTIC_DTO = TableStatisticDto.builder() + .columns(new LinkedList<>(List.of(ColumnStatisticDto.builder() + .name(COLUMN_8_1_INTERNAL_NAME) + .min(BigDecimal.valueOf(11.2)) + .max(BigDecimal.valueOf(23.1)) + .mean(BigDecimal.valueOf(13.5333)) + .median(BigDecimal.valueOf(11.4)) + .stdDev(BigDecimal.valueOf(4.2952)) + .build()))) + .build(); + + public final static UUID QUERY_1_ID = UUID.fromString("60494137-f000-459e-acd3-4fcadbdf14ca"); + public final static String QUERY_1_STATEMENT = "SELECT `id`, `date`, `location`, `mintemp`, `rainfall` FROM `weather_aus` ORDER BY id ASC"; + public final static Long QUERY_1_RESULT_NUMBER = 2L; + public final static String QUERY_1_QUERY_HASH = "a3b8ac39e38167d14cf3a9c20a69e4b6954d049525390b973a2c23064953a992"; + public final static String QUERY_1_RESULT_HASH = "8358c8ade4849d2094ab5bb29127afdae57e6bb5acb1db7af603813d406c467a"; + public final static Instant QUERY_1_CREATED = Instant.ofEpochSecond(1677648377L); + public final static Instant QUERY_1_EXECUTION = Instant.now(); + public final static Boolean QUERY_1_PERSISTED = true; + + public final SubsetDto QUERY_1_SUBSET_DTO = SubsetDto.builder() + .datasourceId(TABLE_1_ID) + .datasourceType(DatasourceType.TABLE) .columns(new LinkedList<UUID>(List.of(COLUMN_1_1_ID, COLUMN_1_2_ID, COLUMN_1_3_ID, COLUMN_1_4_ID, COLUMN_1_5_ID))) .order(new LinkedList<OrderDto>(List.of(OrderDto.builder() .columnId(COLUMN_1_1_ID) @@ -2780,7 +2905,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final ViewDto QUERY_1_VIEW_DTO = ViewDto.builder() + public final ViewDto QUERY_1_VIEW_DTO = ViewDto.builder() .query(QUERY_1_STATEMENT) .queryHash(QUERY_1_QUERY_HASH) .owner(USER_1_BRIEF_DTO) @@ -2806,7 +2931,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final QueryBriefDto QUERY_1_BRIEF_DTO = QueryBriefDto.builder() + public final QueryBriefDto QUERY_1_BRIEF_DTO = QueryBriefDto.builder() .id(QUERY_1_ID) .databaseId(DATABASE_1_ID) .query(QUERY_1_STATEMENT) @@ -2818,49 +2943,32 @@ public abstract class BaseTest { .resultNumber(3L) .build(); - public static final UUID QUERY_2_ID = UUID.fromString("4e0ac92a-7cb3-4222-9b85-0498c73e0afd"); - public static final String QUERY_2_STATEMENT = "SELECT `location` FROM `weather_aus`"; - public static final String QUERY_2_QUERY_HASH = "a2d2dd94ebc7653bb5a3b55dd8ed5e91d3d13c225c6855a1eb4eb7ca14c36ced"; - public static final Long QUERY_2_RESULT_NUMBER = 2L; - public static final String QUERY_2_RESULT_HASH = "ff3f7cbe1b96d296957f6e39e55b8b1b577fa3d205d4795af99594cfd20cb80d"; - public static final Instant QUERY_2_CREATED = Instant.now().minus(2, MINUTES); - public static final Instant QUERY_2_EXECUTION = Instant.now().minus(1, MINUTES); - public static final Instant QUERY_2_LAST_MODIFIED = Instant.ofEpochSecond(1541588352L); - public static final Boolean QUERY_2_PERSISTED = false; - - public static final UUID QUERY_3_ID = UUID.fromString("a9849020-45a7-40a8-9a19-d4ae2b28dd46"); - public static final String QUERY_3_STATEMENT = "SELECT `location`, `mintemp` FROM `weather_aus` WHERE `mintemp` > 10"; - public static final String QUERY_3_QUERY_HASH = "a3d3dd94ebc7653bb5a3b55dd8ed5e91d3d13c335c6855a1eb4eb7ca14c36ced"; - public static final String QUERY_3_RESULT_HASH = "ff3f7cbe1b96d396957f6e39e55b8b1b577fa3d305d4795af99594cfd30cb80d"; - public static final Instant QUERY_3_CREATED = Instant.now().minus(3, MINUTES); - public static final Instant QUERY_3_EXECUTION = Instant.now().minus(1, MINUTES); - public static final Instant QUERY_3_LAST_MODIFIED = Instant.ofEpochSecond(1541588353L); - public static final Long QUERY_3_RESULT_NUMBER = 2L; - public static final Boolean QUERY_3_PERSISTED = true; - - public static final UUID QUERY_7_ID = UUID.fromString("fe73a325-30a0-444c-b74f-23ce1533e55f"); - public static final String QUERY_7_STATEMENT = "SELECT id, date, a.location, lat, lng FROM weather_aus a JOIN weather_location l on a.location = l.location WHERE date = '2008-12-01'"; - public static final String QUERY_7_QUERY_HASH = "df7da3801dfb5c191ff6711d79ce6455f3c09ec8323ce1ff7208ab85387263f5"; - public static final String QUERY_7_RESULT_HASH = "ff4f7cbe1b96d496957f6e49e55b8b1b577fa4d405d4795af99594cfd40cb80d"; - public static final Instant QUERY_7_CREATED = Instant.now().minus(4, MINUTES); - public static final Instant QUERY_7_EXECUTION = Instant.now().minus(1, MINUTES); - public static final Instant QUERY_7_LAST_MODIFIED = Instant.ofEpochSecond(1541588454L); - public static final Long QUERY_7_RESULT_NUMBER = 6L; - public static final Long QUERY_7_RESULT_ID = 4L; - public static final Boolean QUERY_7_PERSISTED = false; - - public static final UUID QUERY_4_ID = UUID.fromString("18a98197-51ff-4011-9f40-914a11675a6d"); - public static final String QUERY_4_STATEMENT = "SELECT `id`, `value` FROM `mfcc`"; - public static final String QUERY_4_QUERY_HASH = "df7da3801dfb5c191ff6711d79ce6455f3c09ec8323ce1ff7208ab85387263f5"; - public static final String QUERY_4_RESULT_HASH = "ff4f7cbe1b96d496957f6e49e55b8b1b577fa4d405d4795af99594cfd40cb80d"; - public static final Instant QUERY_4_CREATED = Instant.now().minus(4, MINUTES); - public static final Instant QUERY_4_EXECUTION = Instant.now().minus(1, MINUTES); - public static final Instant QUERY_4_LAST_MODIFIED = Instant.ofEpochSecond(1541588454L); - public static final Long QUERY_4_RESULT_NUMBER = 6L; - public static final Long QUERY_4_RESULT_ID = 4L; - public static final Boolean QUERY_4_PERSISTED = false; - - public static final List<Map<String, Object>> QUERY_4_RESULT_DTO = new LinkedList<>(List.of( + public final static UUID QUERY_2_ID = UUID.fromString("4e0ac92a-7cb3-4222-9b85-0498c73e0afd"); + public final static String QUERY_2_STATEMENT = "SELECT `location` FROM `weather_aus`"; + public final static String QUERY_2_QUERY_HASH = "a2d2dd94ebc7653bb5a3b55dd8ed5e91d3d13c225c6855a1eb4eb7ca14c36ced"; + public final static Long QUERY_2_RESULT_NUMBER = 2L; + public final static String QUERY_2_RESULT_HASH = "ff3f7cbe1b96d296957f6e39e55b8b1b577fa3d205d4795af99594cfd20cb80d"; + public final static Instant QUERY_2_EXECUTION = Instant.now().minus(1, MINUTES); + public final static Boolean QUERY_2_PERSISTED = false; + + public final static UUID QUERY_3_ID = UUID.fromString("a9849020-45a7-40a8-9a19-d4ae2b28dd46"); + public final static String QUERY_3_STATEMENT = "SELECT `location`, `mintemp` FROM `weather_aus` WHERE `mintemp` > 10"; + public final static String QUERY_3_QUERY_HASH = "a3d3dd94ebc7653bb5a3b55dd8ed5e91d3d13c335c6855a1eb4eb7ca14c36ced"; + public final static String QUERY_3_RESULT_HASH = "ff3f7cbe1b96d396957f6e39e55b8b1b577fa3d305d4795af99594cfd30cb80d"; + public final static Instant QUERY_3_EXECUTION = Instant.now().minus(1, MINUTES); + public final static Long QUERY_3_RESULT_NUMBER = 2L; + public final static Boolean QUERY_3_PERSISTED = true; + + public final static UUID QUERY_4_ID = UUID.fromString("18a98197-51ff-4011-9f40-914a11675a6d"); + public final static String QUERY_4_STATEMENT = "SELECT `id`, `value` FROM `mfcc`"; + public final static String QUERY_4_QUERY_HASH = "df7da3801dfb5c191ff6711d79ce6455f3c09ec8323ce1ff7208ab85387263f5"; + public final static String QUERY_4_RESULT_HASH = "ff4f7cbe1b96d496957f6e49e55b8b1b577fa4d405d4795af99594cfd40cb80d"; + public final static Instant QUERY_4_EXECUTION = Instant.now().minus(1, MINUTES); + public final static Long QUERY_4_RESULT_NUMBER = 6L; + public final static Long QUERY_4_RESULT_ID = 4L; + public final static Boolean QUERY_4_PERSISTED = false; + + public final List<Map<String, Object>> QUERY_4_RESULT_DTO = new LinkedList<>(List.of( new HashMap<>() {{ put("id", BigInteger.valueOf(1L)); put("value", 11.2); @@ -2881,7 +2989,7 @@ public abstract class BaseTest { put("value", 23.1); }})); - public static final QueryDto QUERY_4_DTO = QueryDto.builder() + public final QueryDto QUERY_4_DTO = QueryDto.builder() .id(QUERY_4_ID) .databaseId(DATABASE_3_ID) .query(QUERY_4_STATEMENT) @@ -2894,17 +3002,15 @@ public abstract class BaseTest { .owner(USER_1_BRIEF_DTO) .build(); - public static final UUID QUERY_5_ID = UUID.fromString("1a39f775-e3d5-4865-b4f5-dbbb5693b637"); - public static final String QUERY_5_STATEMENT = "SELECT `id`, `value` FROM `mfcc` WHERE `value` > 0"; - public static final String QUERY_5_QUERY_HASH = "6d6dc48b12cdfd959d39a62887334a6bbd529b93eed4f211f3f671bd9e7d6225"; - public static final String QUERY_5_RESULT_HASH = "ff5f7cbe1b96d596957f6e59e55b8b1b577fa5d505d5795af99595cfd50cb80d"; - public static final Instant QUERY_5_CREATED = Instant.now().minus(5, MINUTES); - public static final Instant QUERY_5_EXECUTION = Instant.now().minus(1, MINUTES); - public static final Instant QUERY_5_LAST_MODIFIED = Instant.ofEpochSecond(1551588555L); - public static final Long QUERY_5_RESULT_NUMBER = 6L; - public static final Boolean QUERY_5_PERSISTED = true; + public final static UUID QUERY_5_ID = UUID.fromString("1a39f775-e3d5-4865-b4f5-dbbb5693b637"); + public final static String QUERY_5_STATEMENT = "SELECT `id`, `value` FROM `mfcc` WHERE `value` > 0"; + public final static String QUERY_5_QUERY_HASH = "6d6dc48b12cdfd959d39a62887334a6bbd529b93eed4f211f3f671bd9e7d6225"; + public final static String QUERY_5_RESULT_HASH = "ff5f7cbe1b96d596957f6e59e55b8b1b577fa5d505d5795af99595cfd50cb80d"; + public final static Instant QUERY_5_EXECUTION = Instant.now().minus(1, MINUTES); + public final static Long QUERY_5_RESULT_NUMBER = 6L; + public final static Boolean QUERY_5_PERSISTED = true; - public static final QueryDto QUERY_5_DTO = QueryDto.builder() + public final QueryDto QUERY_5_DTO = QueryDto.builder() .id(QUERY_5_ID) .databaseId(DATABASE_3_ID) .query(QUERY_5_STATEMENT) @@ -2917,8 +3023,9 @@ public abstract class BaseTest { .owner(USER_1_BRIEF_DTO) .build(); - public static final SubsetDto QUERY_5_SUBSET_DTO = SubsetDto.builder() - .tableId(TABLE_8_ID) + public final SubsetDto QUERY_5_SUBSET_DTO = SubsetDto.builder() + .datasourceId(TABLE_8_ID) + .datasourceType(DatasourceType.TABLE) .columns(new LinkedList<>(List.of(COLUMN_8_1_ID, COLUMN_8_2_ID))) .filter(new LinkedList<>(List.of(FilterDto.builder() .columnId(COLUMN_8_2_ID) @@ -2928,7 +3035,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final ViewDto QUERY_5_VIEW_DTO = ViewDto.builder() + public final ViewDto QUERY_5_VIEW_DTO = ViewDto.builder() .query(QUERY_5_STATEMENT) .queryHash(QUERY_5_QUERY_HASH) .owner(USER_1_BRIEF_DTO) @@ -2942,7 +3049,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final List<Map<String, Object>> QUERY_5_RESULT_DTO = new LinkedList<>(List.of( + public final List<Map<String, Object>> QUERY_5_RESULT_DTO = new LinkedList<>(List.of( Map.of("id", BigInteger.valueOf(1L), "value", 11.2), Map.of("id", BigInteger.valueOf(2L), "value", 11.3), Map.of("id", BigInteger.valueOf(3L), "value", 11.4), @@ -2951,17 +3058,15 @@ public abstract class BaseTest { Map.of("id", BigInteger.valueOf(6L), "value", 23.1) )); - public static final UUID QUERY_6_ID = UUID.fromString("7463412a-20c4-4fc1-8a33-948aea026f49"); - public static final String QUERY_6_STATEMENT = "SELECT `location` FROM `weather_aus` WHERE `id` = 1"; - public static final String QUERY_6_QUERY_HASH = "6d6dc48b12cdfd959d39a62887334a6bbd529b93eed4f211f3f671bd9e7d6225"; - public static final String QUERY_6_RESULT_HASH = "ff5f7cbe1b96d596957f6e59e55b8b1b577fa5d505d5795af99595cfd50cb80d"; - public static final Instant QUERY_6_CREATED = Instant.now().minus(5, MINUTES); - public static final Instant QUERY_6_EXECUTION = Instant.now().minus(1, MINUTES); - public static final Instant QUERY_6_LAST_MODIFIED = Instant.ofEpochSecond(1551588555L); - public static final Long QUERY_6_RESULT_NUMBER = 1L; - public static final Boolean QUERY_6_PERSISTED = true; - - public static final List<TableColumn> TABLE_1_COLUMNS = List.of(TableColumn.builder() + public final static UUID QUERY_6_ID = UUID.fromString("7463412a-20c4-4fc1-8a33-948aea026f49"); + public final static String QUERY_6_STATEMENT = "SELECT `location` FROM `weather_aus` WHERE `id` = 1"; + public final static String QUERY_6_QUERY_HASH = "6d6dc48b12cdfd959d39a62887334a6bbd529b93eed4f211f3f671bd9e7d6225"; + public final static String QUERY_6_RESULT_HASH = "ff5f7cbe1b96d596957f6e59e55b8b1b577fa5d505d5795af99595cfd50cb80d"; + public final static Instant QUERY_6_EXECUTION = Instant.now().minus(1, MINUTES); + public final static Long QUERY_6_RESULT_NUMBER = 1L; + public final static Boolean QUERY_6_PERSISTED = true; + + public final List<TableColumn> TABLE_1_COLUMNS = List.of(TableColumn.builder() .id(COLUMN_1_1_ID) .ordinalPosition(0) .table(TABLE_1) @@ -3014,14 +3119,16 @@ public abstract class BaseTest { .isNullAllowed(true) .build()); - public static final ColumnBriefDto TABLE_1_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() - .id(COLUMN_1_1_ID) - .name("id") - .internalName("id") - .columnType(ColumnTypeDto.BIGINT) - .build(); + public final static UUID QUERY_7_ID = UUID.fromString("fe73a325-30a0-444c-b74f-23ce1533e55f"); + public final static String QUERY_7_STATEMENT = "SELECT id, date, a.location, lat, lng FROM weather_aus a JOIN weather_location l on a.location = l.location WHERE date = '2008-12-01'"; + public final static String QUERY_7_QUERY_HASH = "df7da3801dfb5c191ff6711d79ce6455f3c09ec8323ce1ff7208ab85387263f5"; + public final static String QUERY_7_RESULT_HASH = "ff4f7cbe1b96d496957f6e49e55b8b1b577fa4d405d4795af99594cfd40cb80d"; + public final static Instant QUERY_7_EXECUTION = Instant.now().minus(1, MINUTES); + public final static Long QUERY_7_RESULT_NUMBER = 6L; + public final static Long QUERY_7_RESULT_ID = 4L; + public final static Boolean QUERY_7_PERSISTED = false; - public static final List<CreateTableColumnDto> TABLE_1_COLUMNS_CREATE_DTO = List.of(CreateTableColumnDto.builder() + public final List<CreateTableColumnDto> TABLE_1_COLUMNS_CREATE_DTO = List.of(CreateTableColumnDto.builder() .name("id") .type(ColumnTypeDto.BIGINT) .nullAllowed(false) @@ -3056,48 +3163,37 @@ public abstract class BaseTest { .unitUri(UNIT_1_URI) .build()); - public static final CreateTableConstraintsDto TABLE_1_CONSTRAINTS_CREATE_DTO = CreateTableConstraintsDto.builder() - .checks(new LinkedHashSet<>()) - .primaryKey(new LinkedHashSet<>(List.of("id"))) - .foreignKeys(new LinkedList<>()) - .uniques(new LinkedList<>(List.of(List.of("date")))) - .build(); - - public static final CreateTableConstraintsDto TABLE_1_CONSTRAINTS_CREATE_INVALID_DTO = CreateTableConstraintsDto.builder() + public final CreateTableConstraintsDto TABLE_1_CONSTRAINTS_CREATE_INVALID_DTO = CreateTableConstraintsDto.builder() .checks(new LinkedHashSet<>()) .primaryKey(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>()) .uniques(new LinkedList<>(List.of(List.of("date")))) .build(); - public static final CreateTableDto TABLE_1_CREATE_DTO = CreateTableDto.builder() - .name(TABLE_1_NAME) - .description(TABLE_1_DESCRIPTION) - .columns(TABLE_1_COLUMNS_CREATE_DTO) - .constraints(TABLE_1_CONSTRAINTS_CREATE_DTO) - .build(); - - public static final at.tuwien.api.database.table.internal.TableCreateDto TABLE_1_CREATE_INTERNAL_DTO = at.tuwien.api.database.table.internal.TableCreateDto.builder() - .name(TABLE_1_NAME) - .description(TABLE_1_DESCRIPTION) - .columns(TABLE_1_COLUMNS_CREATE_DTO) - .constraints(TABLE_1_CONSTRAINTS_CREATE_DTO) - .build(); - - public static final at.tuwien.api.database.table.internal.TableCreateDto TABLE_1_CREATE_INTERNAL_INVALID_DTO = at.tuwien.api.database.table.internal.TableCreateDto.builder() + public final CreateTableDto TABLE_1_CREATE_DTO = CreateTableDto.builder() .name(TABLE_1_NAME) .description(TABLE_1_DESCRIPTION) .columns(TABLE_1_COLUMNS_CREATE_DTO) - .constraints(TABLE_1_CONSTRAINTS_CREATE_INVALID_DTO) - .build(); - - public static final UUID COLUMN_2_1_ID = UUID.fromString("795faa78-7ebb-4dd5-9eb1-e54a9192d0b5"); - - public static final UUID COLUMN_2_2_ID = UUID.fromString("f316ced5-7774-4656-aa7f-a874622d99b3"); - - public static final UUID COLUMN_2_3_ID = UUID.fromString("11cb1aa2-8582-45ef-a3bb-7056aa94cdf1"); - - public static final List<TableColumn> TABLE_2_COLUMNS = List.of(TableColumn.builder() + .constraints(TABLE_1_CREATE_CONSTRAINTS_DTO) + .build(); + + public final at.ac.tuwien.ifs.dbrepo.core.api.database.table.internal.TableCreateDto TABLE_1_CREATE_INTERNAL_DTO = + at.ac.tuwien.ifs.dbrepo.core.api.database.table.internal.TableCreateDto.builder() + .name(TABLE_1_NAME) + .description(TABLE_1_DESCRIPTION) + .columns(TABLE_1_COLUMNS_CREATE_DTO) + .constraints(TABLE_1_CREATE_CONSTRAINTS_DTO) + .build(); + + public final at.ac.tuwien.ifs.dbrepo.core.api.database.table.internal.TableCreateDto TABLE_1_CREATE_INTERNAL_INVALID_DTO = + at.ac.tuwien.ifs.dbrepo.core.api.database.table.internal.TableCreateDto.builder() + .name(TABLE_1_NAME) + .description(TABLE_1_DESCRIPTION) + .columns(TABLE_1_COLUMNS_CREATE_DTO) + .constraints(TABLE_1_CONSTRAINTS_CREATE_INVALID_DTO) + .build(); + + public final List<TableColumn> TABLE_2_COLUMNS = List.of(TableColumn.builder() .id(COLUMN_2_1_ID) .ordinalPosition(0) .table(TABLE_2) @@ -3136,163 +3232,50 @@ public abstract class BaseTest { .sets(null) .build()); - public static final ColumnBriefDto TABLE_2_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() - .id(COLUMN_2_1_ID) - .name("location") - .internalName("location") - .columnType(ColumnTypeDto.VARCHAR) - .build(); - - public static final ColumnBriefDto TABLE_2_COLUMNS_BRIEF_2_DTO = ColumnBriefDto.builder() - .id(COLUMN_2_3_ID) - .name("lng") - .internalName("lng") - .columnType(ColumnTypeDto.DECIMAL) - .build(); - - public static final List<ColumnDto> TABLE_2_COLUMNS_DTO = List.of(ColumnDto.builder() - .id(COLUMN_2_1_ID) - .tableId(TABLE_2_ID) - .databaseId(DATABASE_1_ID) - .ordinalPosition(0) - .name("location") - .internalName("location") - .columnType(ColumnTypeDto.VARCHAR) - .size(255L) - .isNullAllowed(false) - .enums(null) - .sets(null) - .build(), - ColumnDto.builder() - .id(COLUMN_2_2_ID) - .tableId(TABLE_2_ID) - .databaseId(DATABASE_1_ID) - .ordinalPosition(1) - .name("lat") - .internalName("lat") - .columnType(ColumnTypeDto.DOUBLE) - .size(22L) - .isNullAllowed(true) - .enums(null) - .sets(null) - .build(), - ColumnDto.builder() - .id(COLUMN_2_3_ID) - .tableId(TABLE_2_ID) - .databaseId(DATABASE_1_ID) - .ordinalPosition(2) - .name("lng") - .internalName("lng") - .columnType(ColumnTypeDto.DOUBLE) - .size(22L) - .isNullAllowed(true) - .enums(null) - .sets(null) - .build()); - - public static final List<ColumnBriefDto> TABLE_2_COLUMNS_BRIEF_DTO = List.of(ColumnBriefDto.builder() - .id(COLUMN_2_1_ID) - .tableId(TABLE_2_ID) - .databaseId(DATABASE_1_ID) - .name("location") - .internalName("location") - .columnType(ColumnTypeDto.VARCHAR) - .build(), - ColumnBriefDto.builder() - .id(COLUMN_2_2_ID) - .tableId(TABLE_2_ID) - .databaseId(DATABASE_1_ID) - .name("lat") - .internalName("lat") - .columnType(ColumnTypeDto.DOUBLE) - .build(), - ColumnBriefDto.builder() - .id(COLUMN_2_3_ID) - .tableId(TABLE_2_ID) - .databaseId(DATABASE_1_ID) - .name("lng") - .internalName("lng") - .columnType(ColumnTypeDto.DOUBLE) - .build()); - - public static final UUID COLUMN_3_1_ID = UUID.fromString("49cc2735-ba75-4e12-8ac7-8aec87ed7724"); - - public static final UUID COLUMN_3_2_ID = UUID.fromString("2c240d64-3052-4a74-b696-e7490fdff3ea"); - - public static final UUID COLUMN_3_3_ID = UUID.fromString("6fbb0a56-f23a-4aa4-b158-c614a0a30f86"); - - public static final UUID COLUMN_3_4_ID = UUID.fromString("9b01f925-93ee-4f28-bf31-9902900a7099"); - - public static final UUID COLUMN_3_5_ID = UUID.fromString("9bbd66f1-0d94-401c-b7f7-6e329bb9ee21"); - - public static final UUID COLUMN_3_6_ID = UUID.fromString("19ad93d7-b298-495b-9678-9aac80678ff9"); - - public static final UUID COLUMN_3_7_ID = UUID.fromString("4d27d9f4-645f-4222-b5a8-4a91fa6e4275"); - - public static final UUID COLUMN_3_8_ID = UUID.fromString("b4f8fcf8-5824-45ec-8c58-43f20e6dffc5"); - - public static final UUID COLUMN_3_9_ID = UUID.fromString("87247218-369e-484a-9a8f-d758478d8dfc"); - - public static final UUID COLUMN_3_10_ID = UUID.fromString("6e191b97-189a-4d88-901e-888ca889e280"); - - public static final UUID COLUMN_3_11_ID = UUID.fromString("6ac356ff-9be5-4259-9b62-83b6707be7fe"); - - public static final UUID COLUMN_3_12_ID = UUID.fromString("0665b384-c824-4358-b6c5-f17706d46ea4"); - - public static final UUID COLUMN_3_13_ID = UUID.fromString("22d3676e-d28e-4075-b223-91a7ac767bcf"); - - public static final UUID COLUMN_3_14_ID = UUID.fromString("673326e3-ee2b-4c2f-902f-982e2abce1c2"); - - public static final UUID COLUMN_3_15_ID = UUID.fromString("8dcacf4a-736b-4e67-9618-74998cba8940"); - - public static final UUID COLUMN_3_16_ID = UUID.fromString("2b2f5359-76d3-4763-a53f-d18ca6b793fb"); - - public static final UUID COLUMN_3_17_ID = UUID.fromString("674b6120-06cf-4624-b006-1ed48898bd69"); - - public static final UUID COLUMN_3_18_ID = UUID.fromString("13edd7c9-6c88-44d7-b206-34774e49c5af"); - - public static final UUID COLUMN_3_19_ID = UUID.fromString("6977bb3f-4ae2-43ea-bb82-c7f68454c538"); - - public static final UUID COLUMN_3_20_ID = UUID.fromString("c03d2429-53e1-42eb-a1f5-ce342fa23336"); - - public static final UUID COLUMN_3_21_ID = UUID.fromString("06edd332-750e-4aa1-b61b-e757fb2312c3"); - - public static final UUID COLUMN_3_22_ID = UUID.fromString("b6b8631d-f283-49da-8d5e-4bb24def2a40"); - - public static final UUID COLUMN_3_23_ID = UUID.fromString("0393ee00-31ba-44ab-9e82-1f5034a9f57b"); - - public static final UUID COLUMN_3_24_ID = UUID.fromString("a63784ea-f70d-4bda-ace6-1c6a88edf831"); - - public static final UUID COLUMN_3_25_ID = UUID.fromString("720fe829-802c-420b-8e41-bdbb636db43c"); - - public static final UUID COLUMN_3_26_ID = UUID.fromString("5bce38ef-7d49-43b5-9054-068750684b5f"); - - public static final UUID COLUMN_3_27_ID = UUID.fromString("92097c02-3dd3-40ea-bd03-a9135f45a557"); - - public static final UUID COLUMN_3_28_ID = UUID.fromString("7361a38a-828b-495e-8a57-b36cca17d7db"); - - public static final UUID COLUMN_3_29_ID = UUID.fromString("a06812db-03b7-484c-92a6-45d94eef3bb9"); - - public static final UUID COLUMN_3_30_ID = UUID.fromString("05614d89-9216-47ea-96f0-acffc4674acf"); - - public static final UUID COLUMN_3_31_ID = UUID.fromString("05ada13d-361a-48e7-9a0f-1191499509f1"); - - public static final UUID COLUMN_3_32_ID = UUID.fromString("b3f259f6-700a-4b60-8eac-dceaa0dcda9d"); - - public static final UUID COLUMN_3_33_ID = UUID.fromString("9160af06-e168-4b10-a7f9-520f41ae7955"); - - public static final UUID COLUMN_3_34_ID = UUID.fromString("fde20c99-ed9c-4a60-8c18-f46e8603ebb5"); - - public static final UUID COLUMN_3_35_ID = UUID.fromString("071c7f27-1cdd-4af9-b4d6-f932c27c7287"); - - public static final ColumnBriefDto TABLE_3_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() + public final static UUID COLUMN_3_1_ID = UUID.fromString("49cc2735-ba75-4e12-8ac7-8aec87ed7724"); + public final static UUID COLUMN_3_2_ID = UUID.fromString("2c240d64-3052-4a74-b696-e7490fdff3ea"); + public final static UUID COLUMN_3_3_ID = UUID.fromString("6fbb0a56-f23a-4aa4-b158-c614a0a30f86"); + public final static UUID COLUMN_3_4_ID = UUID.fromString("9b01f925-93ee-4f28-bf31-9902900a7099"); + public final static UUID COLUMN_3_5_ID = UUID.fromString("9bbd66f1-0d94-401c-b7f7-6e329bb9ee21"); + public final static UUID COLUMN_3_6_ID = UUID.fromString("19ad93d7-b298-495b-9678-9aac80678ff9"); + public final static UUID COLUMN_3_7_ID = UUID.fromString("4d27d9f4-645f-4222-b5a8-4a91fa6e4275"); + public final static UUID COLUMN_3_8_ID = UUID.fromString("b4f8fcf8-5824-45ec-8c58-43f20e6dffc5"); + public final static UUID COLUMN_3_9_ID = UUID.fromString("87247218-369e-484a-9a8f-d758478d8dfc"); + public final static UUID COLUMN_3_10_ID = UUID.fromString("6e191b97-189a-4d88-901e-888ca889e280"); + public final static UUID COLUMN_3_11_ID = UUID.fromString("6ac356ff-9be5-4259-9b62-83b6707be7fe"); + public final static UUID COLUMN_3_12_ID = UUID.fromString("0665b384-c824-4358-b6c5-f17706d46ea4"); + public final static UUID COLUMN_3_13_ID = UUID.fromString("22d3676e-d28e-4075-b223-91a7ac767bcf"); + public final static UUID COLUMN_3_14_ID = UUID.fromString("673326e3-ee2b-4c2f-902f-982e2abce1c2"); + public final static UUID COLUMN_3_15_ID = UUID.fromString("8dcacf4a-736b-4e67-9618-74998cba8940"); + public final static UUID COLUMN_3_16_ID = UUID.fromString("2b2f5359-76d3-4763-a53f-d18ca6b793fb"); + public final static UUID COLUMN_3_17_ID = UUID.fromString("674b6120-06cf-4624-b006-1ed48898bd69"); + public final static UUID COLUMN_3_18_ID = UUID.fromString("13edd7c9-6c88-44d7-b206-34774e49c5af"); + public final static UUID COLUMN_3_19_ID = UUID.fromString("6977bb3f-4ae2-43ea-bb82-c7f68454c538"); + public final static UUID COLUMN_3_20_ID = UUID.fromString("c03d2429-53e1-42eb-a1f5-ce342fa23336"); + public final static UUID COLUMN_3_21_ID = UUID.fromString("06edd332-750e-4aa1-b61b-e757fb2312c3"); + public final static UUID COLUMN_3_22_ID = UUID.fromString("b6b8631d-f283-49da-8d5e-4bb24def2a40"); + public final static UUID COLUMN_3_23_ID = UUID.fromString("0393ee00-31ba-44ab-9e82-1f5034a9f57b"); + public final static UUID COLUMN_3_24_ID = UUID.fromString("a63784ea-f70d-4bda-ace6-1c6a88edf831"); + public final static UUID COLUMN_3_25_ID = UUID.fromString("720fe829-802c-420b-8e41-bdbb636db43c"); + public final static UUID COLUMN_3_26_ID = UUID.fromString("5bce38ef-7d49-43b5-9054-068750684b5f"); + public final static UUID COLUMN_3_27_ID = UUID.fromString("92097c02-3dd3-40ea-bd03-a9135f45a557"); + public final static UUID COLUMN_3_28_ID = UUID.fromString("7361a38a-828b-495e-8a57-b36cca17d7db"); + public final static UUID COLUMN_3_29_ID = UUID.fromString("a06812db-03b7-484c-92a6-45d94eef3bb9"); + public final static UUID COLUMN_3_30_ID = UUID.fromString("05614d89-9216-47ea-96f0-acffc4674acf"); + public final static UUID COLUMN_3_31_ID = UUID.fromString("05ada13d-361a-48e7-9a0f-1191499509f1"); + public final static UUID COLUMN_3_32_ID = UUID.fromString("b3f259f6-700a-4b60-8eac-dceaa0dcda9d"); + public final static UUID COLUMN_3_33_ID = UUID.fromString("9160af06-e168-4b10-a7f9-520f41ae7955"); + public final static UUID COLUMN_3_34_ID = UUID.fromString("fde20c99-ed9c-4a60-8c18-f46e8603ebb5"); + public final static UUID COLUMN_3_35_ID = UUID.fromString("071c7f27-1cdd-4af9-b4d6-f932c27c7287"); + + public final ColumnBriefDto TABLE_3_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() .id(COLUMN_3_1_ID) .columnType(ColumnTypeDto.BIGINT) .name("id") .internalName("id") .build(); - public static final List<TableColumn> TABLE_3_COLUMNS = List.of(TableColumn.builder() + public final List<TableColumn> TABLE_3_COLUMNS = List.of(TableColumn.builder() .id(COLUMN_3_1_ID) .table(TABLE_3) .ordinalPosition(0) @@ -3678,7 +3661,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build()); - public static final List<ColumnDto> TABLE_3_COLUMNS_DTO = List.of(ColumnDto.builder() + public final List<ColumnDto> TABLE_3_COLUMNS_DTO = List.of(ColumnDto.builder() .id(COLUMN_3_1_ID) .tableId(TABLE_3_ID) .databaseId(DATABASE_1_ID) @@ -4064,56 +4047,36 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build()); - public static final UUID COLUMN_5_1_ID = UUID.fromString("4efd4cbb-ca2e-48e2-8f40-37514956aa67"); - - public static final UUID COLUMN_5_2_ID = UUID.fromString("53061685-c1db-4df6-ad4e-8f384a200104"); - - public static final UUID COLUMN_5_3_ID = UUID.fromString("643f9cda-8db1-47a4-bb08-c10e78e54c10"); - - public static final UUID COLUMN_5_4_ID = UUID.fromString("efeacc15-3b31-4a9f-9dba-f07d62dcddd6"); - - public static final UUID COLUMN_5_5_ID = UUID.fromString("0319db31-473a-47bc-bb9d-fa1edf82fcd5"); - - public static final UUID COLUMN_5_6_ID = UUID.fromString("9ba789ca-59cf-4480-b9f6-3b957b1d7f5c"); - - public static final UUID COLUMN_5_7_ID = UUID.fromString("81c42954-fd1a-4fef-adb1-bc4945469e26"); - - public static final UUID COLUMN_5_8_ID = UUID.fromString("49a38905-52a2-4a9b-b7b9-5e1dcf799b2a"); - - public static final UUID COLUMN_5_9_ID = UUID.fromString("1e1a9b6b-5aee-4773-b52d-ea56a5d1e2c8"); - - public static final UUID COLUMN_5_10_ID = UUID.fromString("42ede62a-ae98-4a14-ba54-76b8ba1c580f"); - - public static final UUID COLUMN_5_11_ID = UUID.fromString("0af0f84a-5a58-418a-8bbc-bde29ed0cda0"); - - public static final UUID COLUMN_5_12_ID = UUID.fromString("d9cb30a2-1566-4bd1-899d-060a8ba47722"); - - public static final UUID COLUMN_5_13_ID = UUID.fromString("e69f7f75-3731-4706-8193-0393aa0c08a7"); - - public static final UUID COLUMN_5_14_ID = UUID.fromString("4441630e-7dfa-4046-8bc2-929860f1c66e"); - - public static final UUID COLUMN_5_15_ID = UUID.fromString("f0a12be0-0b26-4686-bf7e-539cdc7e71b4"); - - public static final UUID COLUMN_5_16_ID = UUID.fromString("b60abdcc-5786-40f8-a309-e4467f7d963c"); - - public static final UUID COLUMN_5_17_ID = UUID.fromString("6d5877e2-daef-43d6-a1b6-1aff3ab1a9a2"); - - public static final UUID COLUMN_5_18_ID = UUID.fromString("bb45455f-d449-496e-94f8-eac4d46ba9c0"); - - public static final UUID COLUMN_5_19_ID = UUID.fromString("44c5484b-b57d-48a4-8f24-d2074de98e1a"); - - public static final UUID COLUMN_5_20_ID = UUID.fromString("6475b937-71fc-4331-bc85-8ee71fa68d99"); - - public static final UUID COLUMN_5_21_ID = UUID.fromString("92ff472f-e203-4c8e-b243-81640229ca19"); - - public static final ColumnBriefDto TABLE_5_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() + public final static UUID COLUMN_5_1_ID = UUID.fromString("4efd4cbb-ca2e-48e2-8f40-37514956aa67"); + public final static UUID COLUMN_5_2_ID = UUID.fromString("53061685-c1db-4df6-ad4e-8f384a200104"); + public final static UUID COLUMN_5_3_ID = UUID.fromString("643f9cda-8db1-47a4-bb08-c10e78e54c10"); + public final static UUID COLUMN_5_4_ID = UUID.fromString("efeacc15-3b31-4a9f-9dba-f07d62dcddd6"); + public final static UUID COLUMN_5_5_ID = UUID.fromString("0319db31-473a-47bc-bb9d-fa1edf82fcd5"); + public final static UUID COLUMN_5_6_ID = UUID.fromString("9ba789ca-59cf-4480-b9f6-3b957b1d7f5c"); + public final static UUID COLUMN_5_7_ID = UUID.fromString("81c42954-fd1a-4fef-adb1-bc4945469e26"); + public final static UUID COLUMN_5_8_ID = UUID.fromString("49a38905-52a2-4a9b-b7b9-5e1dcf799b2a"); + public final static UUID COLUMN_5_9_ID = UUID.fromString("1e1a9b6b-5aee-4773-b52d-ea56a5d1e2c8"); + public final static UUID COLUMN_5_10_ID = UUID.fromString("42ede62a-ae98-4a14-ba54-76b8ba1c580f"); + public final static UUID COLUMN_5_11_ID = UUID.fromString("0af0f84a-5a58-418a-8bbc-bde29ed0cda0"); + public final static UUID COLUMN_5_12_ID = UUID.fromString("d9cb30a2-1566-4bd1-899d-060a8ba47722"); + public final static UUID COLUMN_5_13_ID = UUID.fromString("e69f7f75-3731-4706-8193-0393aa0c08a7"); + public final static UUID COLUMN_5_14_ID = UUID.fromString("4441630e-7dfa-4046-8bc2-929860f1c66e"); + public final static UUID COLUMN_5_15_ID = UUID.fromString("f0a12be0-0b26-4686-bf7e-539cdc7e71b4"); + public final static UUID COLUMN_5_16_ID = UUID.fromString("b60abdcc-5786-40f8-a309-e4467f7d963c"); + public final static UUID COLUMN_5_17_ID = UUID.fromString("6d5877e2-daef-43d6-a1b6-1aff3ab1a9a2"); + public final static UUID COLUMN_5_18_ID = UUID.fromString("bb45455f-d449-496e-94f8-eac4d46ba9c0"); + public final static UUID COLUMN_5_19_ID = UUID.fromString("44c5484b-b57d-48a4-8f24-d2074de98e1a"); + public final static UUID COLUMN_5_20_ID = UUID.fromString("6475b937-71fc-4331-bc85-8ee71fa68d99"); + public final static UUID COLUMN_5_21_ID = UUID.fromString("92ff472f-e203-4c8e-b243-81640229ca19"); + + public final ColumnBriefDto TABLE_5_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() .id(COLUMN_5_1_ID) .name("id") .internalName("id") .columnType(ColumnTypeDto.BIGINT) .build(); - public static final List<TableColumn> TABLE_5_COLUMNS = List.of(TableColumn.builder() + public final List<TableColumn> TABLE_5_COLUMNS = List.of(TableColumn.builder() .id(COLUMN_5_1_ID) .ordinalPosition(0) .table(TABLE_5) @@ -4302,8 +4265,7 @@ public abstract class BaseTest { .columnType(TableColumnType.DECIMAL) .isNullAllowed(true) .build()); - - public static final List<ColumnDto> TABLE_5_COLUMNS_DTO = List.of(ColumnDto.builder() + public final List<ColumnDto> TABLE_5_COLUMNS_DTO = List.of(ColumnDto.builder() .id(COLUMN_5_1_ID) .ordinalPosition(0) .tableId(TABLE_5_ID) @@ -4493,17 +4455,17 @@ public abstract class BaseTest { .isNullAllowed(true) .build()); - public static final List<CreateForeignKeyDto> TABLE_5_FOREIGN_KEYS_INVALID_CREATE = List.of(CreateForeignKeyDto.builder() + public final List<CreateForeignKeyDto> TABLE_5_FOREIGN_KEYS_INVALID_CREATE = List.of(CreateForeignKeyDto.builder() .columns(new LinkedList<>(List.of("somecolumn"))) .referencedTable("sometable") .referencedColumns(new LinkedList<>(List.of("someothercolumn"))) .build()); - public static final CreateTableConstraintsDto TABLE_5_CONSTRAINTS_INVALID_CREATE = CreateTableConstraintsDto.builder() + public final CreateTableConstraintsDto TABLE_5_CONSTRAINTS_INVALID_CREATE = CreateTableConstraintsDto.builder() .foreignKeys(TABLE_5_FOREIGN_KEYS_INVALID_CREATE) .build(); - public static final List<CreateTableColumnDto> TABLE_5_COLUMNS_CREATE = List.of(CreateTableColumnDto.builder() + public final List<CreateTableColumnDto> TABLE_5_COLUMNS_CREATE = List.of(CreateTableColumnDto.builder() .name("id") .type(ColumnTypeDto.BIGINT) .nullAllowed(false) @@ -4609,37 +4571,38 @@ public abstract class BaseTest { .nullAllowed(true) .build()); - public static final CreateTableConstraintsDto TABLE_5_CREATE_CONSTRAINTS_DTO = CreateTableConstraintsDto.builder() + public final CreateTableConstraintsDto TABLE_5_CREATE_CONSTRAINTS_DTO = CreateTableConstraintsDto.builder() .primaryKey(Set.of("id")) .uniques(new LinkedList<>(List.of(List.of("id")))) .checks(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>()) .build(); - public static final CreateTableDto TABLE_5_CREATE_DTO = CreateTableDto.builder() + public final CreateTableDto TABLE_5_CREATE_DTO = CreateTableDto.builder() .name(TABLE_5_NAME) .description(TABLE_5_DESCRIPTION) .columns(TABLE_5_COLUMNS_CREATE) .constraints(TABLE_5_CREATE_CONSTRAINTS_DTO) .build(); - public static final CreateTableDto TABLE_5_INVALID_CREATE_DTO = CreateTableDto.builder() + public final CreateTableDto TABLE_5_INVALID_CREATE_DTO = CreateTableDto.builder() .name(TABLE_5_NAME) .description(TABLE_5_DESCRIPTION) .columns(TABLE_5_COLUMNS_CREATE) .constraints(TABLE_5_CONSTRAINTS_INVALID_CREATE) .build(); - public static final UUID QUERY_8_ID = UUID.fromString("1c466eee-d551-4ef9-a7e0-b5a2d1b15473"); - public static final String QUERY_8_STATEMENT = "SELECT `id`, `animal_name` FROM `zoo` WHERE `hair` = TRUE AND `feathers` = FALSE;"; - public static final String QUERY_8_QUERY_HASH = "f0ee0d6dd45e092fca120c4f0eab089f91ed26ccf8dc34a03c6b9c6bb4141271"; - public static final Long QUERY_8_RESULT_NUMBER = 5L; - public static final String QUERY_8_RESULT_HASH = "b5f9cae916d32deff81c5f2e9f8ff43904034bc084b12320730953d120698bed"; - public static final Instant QUERY_8_EXECUTION = Instant.now().minus(1, MINUTES); - public static final Boolean QUERY_8_PERSISTED = true; + public final static UUID QUERY_8_ID = UUID.fromString("1c466eee-d551-4ef9-a7e0-b5a2d1b15473"); + public final static String QUERY_8_STATEMENT = "SELECT `id`, `animal_name` FROM `zoo` WHERE `hair` = TRUE AND `feathers` = false;"; + public final static String QUERY_8_QUERY_HASH = "f0ee0d6dd45e092fca120c4f0eab089f91ed26ccf8dc34a03c6b9c6bb4141271"; + public final static Long QUERY_8_RESULT_NUMBER = 5L; + public final static String QUERY_8_RESULT_HASH = "b5f9cae916d32deff81c5f2e9f8ff43904034bc084b12320730953d120698bed"; + public final static Instant QUERY_8_EXECUTION = Instant.now().minus(1, MINUTES); + public final static Boolean QUERY_8_PERSISTED = true; - public static final SubsetDto QUERY_8_SUBSET_DTO = SubsetDto.builder() - .tableId(TABLE_5_ID) + public final SubsetDto QUERY_8_SUBSET_DTO = SubsetDto.builder() + .datasourceId(TABLE_5_ID) + .datasourceType(DatasourceType.TABLE) .columns(new LinkedList<>(List.of(COLUMN_5_1_ID, COLUMN_5_2_ID))) .filter(new LinkedList<>(List.of(FilterDto.builder() .type(FilterTypeDto.WHERE) @@ -4658,19 +4621,14 @@ public abstract class BaseTest { .build()))) .build(); - public static final UUID COLUMN_6_1_ID = UUID.fromString("27b04a64-2849-4fae-b295-858c3e50361f"); - - public static final UUID COLUMN_6_2_ID = UUID.fromString("1ea62e32-5719-4152-94da-45d37eb88b6f"); - - public static final UUID COLUMN_6_3_ID = UUID.fromString("f523f9f5-42f7-4695-841e-a5fd30fa6879"); - - public static final UUID COLUMN_6_4_ID = UUID.fromString("f57ea880-f917-4127-bcbb-202a34831383"); + public final static UUID COLUMN_6_1_ID = UUID.fromString("27b04a64-2849-4fae-b295-858c3e50361f"); + public final static UUID COLUMN_6_2_ID = UUID.fromString("1ea62e32-5719-4152-94da-45d37eb88b6f"); + public final static UUID COLUMN_6_3_ID = UUID.fromString("f523f9f5-42f7-4695-841e-a5fd30fa6879"); + public final static UUID COLUMN_6_4_ID = UUID.fromString("f57ea880-f917-4127-bcbb-202a34831383"); + public final static UUID COLUMN_6_5_ID = UUID.fromString("38aaeb63-b94b-4d90-8eae-a626dfb1f092"); + public final static UUID COLUMN_6_6_ID = UUID.fromString("f788cf6f-66ed-4f28-8b24-d9d173c4d340"); - public static final UUID COLUMN_6_5_ID = UUID.fromString("38aaeb63-b94b-4d90-8eae-a626dfb1f092"); - - public static final UUID COLUMN_6_6_ID = UUID.fromString("f788cf6f-66ed-4f28-8b24-d9d173c4d340"); - - public static final List<TableColumn> TABLE_6_COLUMNS = List.of(TableColumn.builder() + public final List<TableColumn> TABLE_6_COLUMNS = List.of(TableColumn.builder() .id(COLUMN_6_1_ID) .ordinalPosition(0) .table(TABLE_6) @@ -4725,14 +4683,14 @@ public abstract class BaseTest { .isNullAllowed(true) .build()); - public static final ColumnBriefDto TABLE_6_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() + public final ColumnBriefDto TABLE_6_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() .id(COLUMN_6_1_ID) .name("id") .internalName("id") .columnType(ColumnTypeDto.BIGINT) .build(); - public static final List<ColumnDto> TABLE_6_COLUMNS_DTO = List.of(ColumnDto.builder() + public final List<ColumnDto> TABLE_6_COLUMNS_DTO = List.of(ColumnDto.builder() .id(COLUMN_6_1_ID) .ordinalPosition(0) .tableId(TABLE_6_ID) @@ -4787,25 +4745,23 @@ public abstract class BaseTest { .isNullAllowed(true) .build()); - public static final List<List<String>> TABLE_6_UNIQUES_CREATE = List.of( + public final List<List<String>> TABLE_6_UNIQUES_CREATE = List.of( List.of("firstname", "lastname")); - public static final List<CreateForeignKeyDto> TABLE_6_FOREIGN_KEYS_CREATE = List.of(CreateForeignKeyDto.builder() + public final List<CreateForeignKeyDto> TABLE_6_FOREIGN_KEYS_CREATE = List.of(CreateForeignKeyDto.builder() .columns(new LinkedList<>(List.of("ref_id"))) .referencedTable("zoo") .referencedColumns(new LinkedList<>(List.of("id"))) .build()); - public static final Set<String> TABLE_6_CHECKS_CREATE = Set.of("firstname != lastname"); - - public static final CreateTableConstraintsDto TABLE_6_CONSTRAINTS_CREATE = CreateTableConstraintsDto.builder() + public final CreateTableConstraintsDto TABLE_6_CONSTRAINTS_CREATE = CreateTableConstraintsDto.builder() .uniques(TABLE_6_UNIQUES_CREATE) .foreignKeys(TABLE_6_FOREIGN_KEYS_CREATE) - .checks(TABLE_6_CHECKS_CREATE) + .checks(Set.of("firstname != lastname")) .primaryKey(Set.of("id")) .build(); - public static final List<CreateTableColumnDto> TABLE_6_COLUMNS_CREATE = List.of( + public final List<CreateTableColumnDto> TABLE_6_COLUMNS_CREATE = List.of( CreateTableColumnDto.builder() .name("name_id") .type(ColumnTypeDto.BIGINT) @@ -4818,32 +4774,31 @@ public abstract class BaseTest { .nullAllowed(false) .build()); - public static final CreateTableDto TABLE_6_CREATE_DTO = CreateTableDto.builder() + public final CreateTableDto TABLE_6_CREATE_DTO = CreateTableDto.builder() .name(TABLE_6_NAME) .description(TABLE_6_DESCRIPTION) .columns(TABLE_6_COLUMNS_CREATE) .constraints(TABLE_6_CONSTRAINTS_CREATE) .build(); - public static final UUID COLUMN_7_1_ID = UUID.fromString("395b44a4-0e31-41ea-94ad-c4f2d5e912c6"); + public final static UUID COLUMN_7_1_ID = UUID.fromString("395b44a4-0e31-41ea-94ad-c4f2d5e912c6"); + public final static UUID COLUMN_7_2_ID = UUID.fromString("5713333b-872a-44c5-ab94-4d0ab62f5663"); - public static final UUID COLUMN_7_2_ID = UUID.fromString("5713333b-872a-44c5-ab94-4d0ab62f5663"); - - public static final ColumnBriefDto TABLE_7_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() + public final ColumnBriefDto TABLE_7_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() .id(COLUMN_7_1_ID) .name("name_id") .internalName("name_id") .columnType(ColumnTypeDto.BIGINT) .build(); - public static final ColumnBriefDto TABLE_7_COLUMNS_BRIEF_1_DTO = ColumnBriefDto.builder() + public final ColumnBriefDto TABLE_7_COLUMNS_BRIEF_1_DTO = ColumnBriefDto.builder() .id(COLUMN_7_2_ID) .name("zoo_id") .internalName("zoo_id") .columnType(ColumnTypeDto.BIGINT) .build(); - public static final List<TableColumn> TABLE_7_COLUMNS = List.of(TableColumn.builder() + public final List<TableColumn> TABLE_7_COLUMNS = List.of(TableColumn.builder() .id(COLUMN_7_1_ID) .ordinalPosition(0) .table(TABLE_7) @@ -4862,7 +4817,7 @@ public abstract class BaseTest { .isNullAllowed(false) .build()); - public static final List<ColumnDto> TABLE_7_COLUMNS_DTO = List.of(ColumnDto.builder() + public final List<ColumnDto> TABLE_7_COLUMNS_DTO = List.of(ColumnDto.builder() .id(COLUMN_7_1_ID) .ordinalPosition(0) .tableId(TABLE_7_ID) @@ -4881,27 +4836,25 @@ public abstract class BaseTest { .isNullAllowed(false) .build()); - public static final UUID VIEW_1_ID = UUID.fromString("7d712cf7-78c7-4a47-90b0-d6b9f7f19b70"); - public static final Boolean VIEW_1_INITIAL_VIEW = false; - public static final String VIEW_1_NAME = "JUnit"; - public static final String VIEW_1_INTERNAL_NAME = "junit"; - public static final Boolean VIEW_1_PUBLIC = false; - public static final Boolean VIEW_1_SCHEMA_PUBLIC = false; - public static final String VIEW_1_QUERY = "SELECT `location`, `lat`, `lng` FROM `weather_location`"; - public static final String VIEW_1_QUERY_HASH = "dc81a6877c7c51a6a6f406e1fc2a255e44a0d49a20548596e0d583c3eb849c23"; - - public static final UUID VIEW_COLUMN_1_1_ID = UUID.fromString("ebf2c5ce-4deb-4cc6-b6f6-61f5d3f6fc98"); - - public static final UUID VIEW_COLUMN_1_2_ID = UUID.fromString("d6ba3475-cefa-4771-aaa1-9274f16335ee"); - - public static final UUID VIEW_COLUMN_1_3_ID = UUID.fromString("4f189a5f-c9ca-4518-9758-1a0730f6276b"); - - public static final SubsetDto VIEW_1_SUBSET_DTO = SubsetDto.builder() - .tableId(TABLE_2_ID) + public final static UUID VIEW_1_ID = UUID.fromString("7d712cf7-78c7-4a47-90b0-d6b9f7f19b70"); + public final static Boolean VIEW_1_INITIAL_VIEW = false; + public final static String VIEW_1_NAME = "JUnit"; + public final static String VIEW_1_INTERNAL_NAME = "junit"; + public final static Boolean VIEW_1_PUBLIC = false; + public final static Boolean VIEW_1_SCHEMA_PUBLIC = false; + public final static String VIEW_1_QUERY = "SELECT `location`, `lat`, `lng` FROM `weather_location`"; + public final static String VIEW_1_QUERY_HASH = "dc81a6877c7c51a6a6f406e1fc2a255e44a0d49a20548596e0d583c3eb849c23"; + public final static UUID VIEW_COLUMN_1_1_ID = UUID.fromString("ebf2c5ce-4deb-4cc6-b6f6-61f5d3f6fc98"); + public final static UUID VIEW_COLUMN_1_2_ID = UUID.fromString("d6ba3475-cefa-4771-aaa1-9274f16335ee"); + public final static UUID VIEW_COLUMN_1_3_ID = UUID.fromString("4f189a5f-c9ca-4518-9758-1a0730f6276b"); + + public final SubsetDto VIEW_1_SUBSET_DTO = SubsetDto.builder() + .datasourceId(TABLE_2_ID) + .datasourceType(DatasourceType.TABLE) .columns(new LinkedList<>(List.of(COLUMN_2_1_ID, COLUMN_2_2_ID, COLUMN_2_3_ID))) .build(); - public static final List<ViewColumnDto> VIEW_1_COLUMNS_DTO = List.of( + public final List<ViewColumnDto> VIEW_1_COLUMNS_DTO = List.of( ViewColumnDto.builder() .id(VIEW_COLUMN_1_1_ID) .ordinalPosition(0) @@ -4933,10 +4886,9 @@ public abstract class BaseTest { .size(10L) .d(0L) .isNullAllowed(true) - .build() - ); + .build()); - public static final View VIEW_1 = View.builder() + public final View VIEW_1 = View.builder() .id(VIEW_1_ID) .isInitialView(VIEW_1_INITIAL_VIEW) .name(VIEW_1_NAME) @@ -4952,8 +4904,8 @@ public abstract class BaseTest { .database(null) /* DATABASE_1 */ .build(); - public static final Long VIEW_1_DATA_COUNT = 3L; - public static final List<Map<String, Object>> VIEW_1_DATA_DTO = new LinkedList<>(List.of( + public final static Long VIEW_1_DATA_COUNT = 3L; + public final List<Map<String, Object>> VIEW_1_DATA_DTO = new LinkedList<>(List.of( new HashMap<>() {{ put("location", "Albury"); put("lat", -36.0653583); @@ -4971,7 +4923,7 @@ public abstract class BaseTest { }} )); - public static final List<ViewColumn> VIEW_1_COLUMNS = List.of( + public final List<ViewColumn> VIEW_1_COLUMNS = List.of( ViewColumn.builder() .id(VIEW_COLUMN_1_1_ID) .ordinalPosition(0) @@ -5003,10 +4955,9 @@ public abstract class BaseTest { .d(0L) .isNullAllowed(true) .view(VIEW_1) - .build() - ); + .build()); - public static final ViewDto VIEW_1_DTO = ViewDto.builder() + public final ViewDto VIEW_1_DTO = ViewDto.builder() .id(VIEW_1_ID) .databaseId(DATABASE_1_ID) .isInitialView(VIEW_1_INITIAL_VIEW) @@ -5021,7 +4972,7 @@ public abstract class BaseTest { .columns(VIEW_1_COLUMNS_DTO) .build(); - public static final ViewBriefDto VIEW_1_BRIEF_DTO = ViewBriefDto.builder() + public final ViewBriefDto VIEW_1_BRIEF_DTO = ViewBriefDto.builder() .id(VIEW_1_ID) .isInitialView(VIEW_1_INITIAL_VIEW) .name(VIEW_1_NAME) @@ -5034,30 +4985,26 @@ public abstract class BaseTest { .queryHash(VIEW_1_QUERY_HASH) .build(); - public static final CreateViewDto VIEW_1_CREATE_DTO = CreateViewDto.builder() + public final CreateViewDto VIEW_1_CREATE_DTO = CreateViewDto.builder() .isPublic(VIEW_1_PUBLIC) .name(VIEW_1_NAME) .query(VIEW_1_SUBSET_DTO) .build(); - public static final UUID VIEW_2_ID = UUID.fromString("1921a0a0-e4b0-4d12-a05f-be920af9b5ce"); - public static final Boolean VIEW_2_INITIAL_VIEW = false; - public static final String VIEW_2_NAME = "JUnit2"; - public static final String VIEW_2_INTERNAL_NAME = "junit2"; - public static final Boolean VIEW_2_PUBLIC = true; - public static final Boolean VIEW_2_SCHEMA_PUBLIC = true; - public static final String VIEW_2_QUERY = "select `date`, `location` as loc, `mintemp`, `rainfall` from `weather_aus` where `location` = 'Albury'"; - public static final String VIEW_2_QUERY_HASH = "987fc946772ffb6d85060262dcb5df419692a1f6772ea995e3dedb53c191e984"; - - public static final UUID VIEW_COLUMN_2_1_ID = UUID.fromString("8fb30bce-04a8-4e9a-9c6b-0776eda3aab8"); - - public static final UUID VIEW_COLUMN_2_2_ID = UUID.fromString("d43f9940-ae27-4d81-b17b-ccbaf578186c"); - - public static final UUID VIEW_COLUMN_2_3_ID = UUID.fromString("b47733bb-aeea-414d-811e-405c64463730"); - - public static final UUID VIEW_COLUMN_2_4_ID = UUID.fromString("2b467e3a-acef-4944-be19-b4b0680874c2"); - - public static final List<ViewColumnDto> VIEW_2_COLUMNS_DTO = List.of( + public final static UUID VIEW_2_ID = UUID.fromString("1921a0a0-e4b0-4d12-a05f-be920af9b5ce"); + public final static Boolean VIEW_2_INITIAL_VIEW = false; + public final static String VIEW_2_NAME = "JUnit2"; + public final static String VIEW_2_INTERNAL_NAME = "junit2"; + public final static Boolean VIEW_2_PUBLIC = true; + public final static Boolean VIEW_2_SCHEMA_PUBLIC = true; + public final static String VIEW_2_QUERY = "select `date`, `location` as loc, `mintemp`, `rainfall` from `weather_aus` where `location` = 'Albury'"; + public final static String VIEW_2_QUERY_HASH = "987fc946772ffb6d85060262dcb5df419692a1f6772ea995e3dedb53c191e984"; + public final static UUID VIEW_COLUMN_2_1_ID = UUID.fromString("8fb30bce-04a8-4e9a-9c6b-0776eda3aab8"); + public final static UUID VIEW_COLUMN_2_2_ID = UUID.fromString("d43f9940-ae27-4d81-b17b-ccbaf578186c"); + public final static UUID VIEW_COLUMN_2_3_ID = UUID.fromString("b47733bb-aeea-414d-811e-405c64463730"); + public final static UUID VIEW_COLUMN_2_4_ID = UUID.fromString("2b467e3a-acef-4944-be19-b4b0680874c2"); + + public final List<ViewColumnDto> VIEW_2_COLUMNS_DTO = List.of( ViewColumnDto.builder() .id(VIEW_COLUMN_2_1_ID) .databaseId(DATABASE_1_ID) @@ -5098,10 +5045,9 @@ public abstract class BaseTest { .size(10L) .d(0L) .isNullAllowed(true) - .build() - ); + .build()); - public static final View VIEW_2 = View.builder() + public final View VIEW_2 = View.builder() .id(VIEW_2_ID) .isInitialView(VIEW_2_INITIAL_VIEW) .name(VIEW_2_NAME) @@ -5116,7 +5062,7 @@ public abstract class BaseTest { .database(null) /* DATABASE_1 */ .build(); - public static final List<ViewColumn> VIEW_2_COLUMNS = List.of( + public final List<ViewColumn> VIEW_2_COLUMNS = List.of( ViewColumn.builder() .id(VIEW_COLUMN_2_1_ID) .ordinalPosition(0) @@ -5157,10 +5103,9 @@ public abstract class BaseTest { .d(0L) .isNullAllowed(true) .view(VIEW_2) - .build() - ); + .build()); - public static final ViewDto VIEW_2_DTO = ViewDto.builder() + public final ViewDto VIEW_2_DTO = ViewDto.builder() .id(VIEW_2_ID) .databaseId(DATABASE_1_ID) .isInitialView(VIEW_2_INITIAL_VIEW) @@ -5174,7 +5119,7 @@ public abstract class BaseTest { .owner(USER_1_BRIEF_DTO) .build(); - public static final ViewBriefDto VIEW_2_BRIEF_DTO = ViewBriefDto.builder() + public final ViewBriefDto VIEW_2_BRIEF_DTO = ViewBriefDto.builder() .id(VIEW_2_ID) .isInitialView(VIEW_2_INITIAL_VIEW) .name(VIEW_2_NAME) @@ -5187,26 +5132,21 @@ public abstract class BaseTest { .ownedBy(USER_1_ID) .build(); - public static final UUID VIEW_3_ID = UUID.fromString("88940939-d456-4aae-88a6-f2b6b343c614"); - public static final Boolean VIEW_3_INITIAL_VIEW = false; - public static final String VIEW_3_NAME = "JUnit3"; - public static final String VIEW_3_INTERNAL_NAME = "junit3"; - public static final Boolean VIEW_3_PUBLIC = true; - public static final Boolean VIEW_3_SCHEMA_PUBLIC = false; - public static final String VIEW_3_QUERY = "select w.`mintemp`, w.`rainfall`, w.`location`, m.`date` from `weather_aus` w join `junit2` m on m.`location` = w.`location` and m.`date` = w.`date`"; - public static final String VIEW_3_QUERY_HASH = "bbbaa56a5206b3dc3e6cf9301b0db9344eb6f19b100c7b88550ffb597a0bd255"; - - public static final Long VIEW_3_DATA_COUNT = 3L; - - public static final UUID VIEW_COLUMN_3_1_ID = UUID.fromString("129839cb-dbd7-492d-8fd0-ee44a8f51c4d"); - - public static final UUID VIEW_COLUMN_3_2_ID = UUID.fromString("e229d80a-c25c-4fbe-8f31-bbb2e1dff3d5"); - - public static final UUID VIEW_COLUMN_3_3_ID = UUID.fromString("12083a5d-fdd3-41db-9f92-d1298558e477"); - - public static final UUID VIEW_COLUMN_3_4_ID = UUID.fromString("668f8a87-1fa6-4be7-9761-1844aa8315a4"); - - public static final List<ViewColumnDto> VIEW_3_COLUMNS_DTO = List.of( + public final static UUID VIEW_3_ID = UUID.fromString("88940939-d456-4aae-88a6-f2b6b343c614"); + public final static Boolean VIEW_3_INITIAL_VIEW = false; + public final static String VIEW_3_NAME = "JUnit3"; + public final static String VIEW_3_INTERNAL_NAME = "junit3"; + public final static Boolean VIEW_3_PUBLIC = true; + public final static Boolean VIEW_3_SCHEMA_PUBLIC = false; + public final static String VIEW_3_QUERY = "select w.`mintemp`, w.`rainfall`, w.`location`, m.`date` from `weather_aus` w join `junit2` m on m.`location` = w.`location` and m.`date` = w.`date`"; + public final static String VIEW_3_QUERY_HASH = "bbbaa56a5206b3dc3e6cf9301b0db9344eb6f19b100c7b88550ffb597a0bd255"; + public final static Long VIEW_3_DATA_COUNT = 3L; + public final static UUID VIEW_COLUMN_3_1_ID = UUID.fromString("129839cb-dbd7-492d-8fd0-ee44a8f51c4d"); + public final static UUID VIEW_COLUMN_3_2_ID = UUID.fromString("e229d80a-c25c-4fbe-8f31-bbb2e1dff3d5"); + public final static UUID VIEW_COLUMN_3_3_ID = UUID.fromString("12083a5d-fdd3-41db-9f92-d1298558e477"); + public final static UUID VIEW_COLUMN_3_4_ID = UUID.fromString("668f8a87-1fa6-4be7-9761-1844aa8315a4"); + + public final List<ViewColumnDto> VIEW_3_COLUMNS_DTO = List.of( ViewColumnDto.builder() .id(VIEW_COLUMN_3_1_ID) .databaseId(DATABASE_1_ID) @@ -5247,10 +5187,9 @@ public abstract class BaseTest { .internalName("date") .columnType(ColumnTypeDto.DATE) .isNullAllowed(true) - .build() - ); + .build()); - public static final View VIEW_3 = View.builder() + public final View VIEW_3 = View.builder() .id(VIEW_3_ID) .isInitialView(VIEW_3_INITIAL_VIEW) .name(VIEW_3_NAME) @@ -5265,7 +5204,7 @@ public abstract class BaseTest { .database(null) /* DATABASE_1 */ .build(); - public static final List<ViewColumn> VIEW_3_COLUMNS = List.of( + public final List<ViewColumn> VIEW_3_COLUMNS = List.of( ViewColumn.builder() .id(VIEW_COLUMN_3_1_ID) .ordinalPosition(0) @@ -5306,10 +5245,9 @@ public abstract class BaseTest { .columnType(TableColumnType.DATE) .isNullAllowed(true) .view(VIEW_3) - .build() - ); + .build()); - public static final ViewDto VIEW_3_DTO = ViewDto.builder() + public final ViewDto VIEW_3_DTO = ViewDto.builder() .id(VIEW_3_ID) .databaseId(DATABASE_1_ID) .isInitialView(VIEW_3_INITIAL_VIEW) @@ -5323,7 +5261,7 @@ public abstract class BaseTest { .owner(USER_1_BRIEF_DTO) .build(); - public static final ViewBriefDto VIEW_3_BRIEF_DTO = ViewBriefDto.builder() + public final ViewBriefDto VIEW_3_BRIEF_DTO = ViewBriefDto.builder() .id(VIEW_3_ID) .isInitialView(VIEW_3_INITIAL_VIEW) .name(VIEW_3_NAME) @@ -5336,17 +5274,16 @@ public abstract class BaseTest { .ownedBy(USER_1_ID) .build(); - public static final UUID VIEW_4_ID = UUID.fromString("13b36fa0-a65a-4ccf-80b1-5b3a2444a41a"); - public static final Boolean VIEW_4_INITIAL_VIEW = false; - public static final String VIEW_4_NAME = "Mock View"; - public static final String VIEW_4_INTERNAL_NAME = "mock_view"; - public static final Table VIEW_4_TABLE = TABLE_5; - public static final Boolean VIEW_4_PUBLIC = true; - public static final Boolean VIEW_4_SCHEMA_PUBLIC = false; - public static final String VIEW_4_QUERY = "SELECT `animal_name`, `hair`, `feathers`, `eggs`, `milk`, `airborne`, `aquatic`, `predator`, `backbone`, `breathes`, `venomous`, `fins`, `legs`, `tail`, `domestic`, `catsize`, `class_type` FROM `zoo` WHERE `class_type` = 1"; - public static final String VIEW_4_QUERY_HASH = "3561cd0bb0b0e94d6f15ae602134252a5760d09d660a71a4fb015b6991c8ba0b"; - - public static final List<ViewColumnDto> VIEW_4_COLUMNS_DTO = List.of( + public final static UUID VIEW_4_ID = UUID.fromString("13b36fa0-a65a-4ccf-80b1-5b3a2444a41a"); + public final static Boolean VIEW_4_INITIAL_VIEW = false; + public final static String VIEW_4_NAME = "Mock View"; + public final static String VIEW_4_INTERNAL_NAME = "mock_view"; + public final Table VIEW_4_TABLE = TABLE_5; + public final static Boolean VIEW_4_PUBLIC = true; + public final static Boolean VIEW_4_SCHEMA_PUBLIC = false; + public final static String VIEW_4_QUERY = "SELECT `animal_name`, `hair`, `feathers`, `eggs`, `milk`, `airborne`, `aquatic`, `predator`, `backbone`, `breathes`, `venomous`, `fins`, `legs`, `tail`, `domestic`, `catsize`, `class_type` FROM `zoo` WHERE `class_type` = 1"; + public final static String VIEW_4_QUERY_HASH = "3561cd0bb0b0e94d6f15ae602134252a5760d09d660a71a4fb015b6991c8ba0b"; + public final List<ViewColumnDto> VIEW_4_COLUMNS_DTO = List.of( ViewColumnDto.builder() .id(COLUMN_5_1_ID) .databaseId(DATABASE_2_ID) @@ -5501,7 +5438,7 @@ public abstract class BaseTest { .isNullAllowed(true) .build()); - public static final View VIEW_4 = View.builder() + public final View VIEW_4 = View.builder() .id(VIEW_4_ID) .isInitialView(VIEW_4_INITIAL_VIEW) .name(VIEW_4_NAME) @@ -5515,7 +5452,7 @@ public abstract class BaseTest { .columns(null) /* VIEW_4_COLUMNS */ .build(); - public static final ViewDto VIEW_4_DTO = ViewDto.builder() + public final ViewDto VIEW_4_DTO = ViewDto.builder() .id(VIEW_4_ID) .databaseId(DATABASE_2_ID) .isInitialView(VIEW_4_INITIAL_VIEW) @@ -5529,7 +5466,7 @@ public abstract class BaseTest { .columns(VIEW_4_COLUMNS_DTO) .build(); - public static final ViewBriefDto VIEW_4_BRIEF_DTO = ViewBriefDto.builder() + public final ViewBriefDto VIEW_4_BRIEF_DTO = ViewBriefDto.builder() .id(VIEW_4_ID) .isInitialView(VIEW_4_INITIAL_VIEW) .name(VIEW_4_NAME) @@ -5542,7 +5479,7 @@ public abstract class BaseTest { .ownedBy(USER_1_ID) .build(); - public static final List<ViewColumn> VIEW_4_COLUMNS = List.of( + public final List<ViewColumn> VIEW_4_COLUMNS = List.of( ViewColumn.builder() .id(COLUMN_5_1_ID) .ordinalPosition(0) @@ -5697,16 +5634,16 @@ public abstract class BaseTest { .view(VIEW_4) .build()); - public static final UUID VIEW_5_ID = UUID.fromString("bc6b8507-51f1-4d05-bb0c-1f619a991dec"); - public static final Boolean VIEW_5_INITIAL_VIEW = false; - public static final String VIEW_5_NAME = "Mock View"; - public static final String VIEW_5_INTERNAL_NAME = "mock_view"; - public static final Boolean VIEW_5_PUBLIC = true; - public static final Boolean VIEW_5_SCHEMA_PUBLIC = true; - public static final String VIEW_5_QUERY = "SELECT `location`, `lat`, `lng` FROM `weather_location` WHERE `location` = 'Albury'"; - public static final String VIEW_5_QUERY_HASH = "120f32478aaff874c25ab32eceb9f00b64cc9d422831046f2f5d43953aca01e7"; + public final static UUID VIEW_5_ID = UUID.fromString("bc6b8507-51f1-4d05-bb0c-1f619a991dec"); + public final static Boolean VIEW_5_INITIAL_VIEW = false; + public final static String VIEW_5_NAME = "Mock View"; + public final static String VIEW_5_INTERNAL_NAME = "mock_view"; + public final static Boolean VIEW_5_PUBLIC = true; + public final static Boolean VIEW_5_SCHEMA_PUBLIC = true; + public final static String VIEW_5_QUERY = "SELECT `location`, `lat`, `lng` FROM `weather_location` WHERE `location` = 'Albury'"; + public final static String VIEW_5_QUERY_HASH = "120f32478aaff874c25ab32eceb9f00b64cc9d422831046f2f5d43953aca01e7"; - public static final View VIEW_5 = View.builder() + public final View VIEW_5 = View.builder() .id(VIEW_5_ID) .isInitialView(VIEW_5_INITIAL_VIEW) .name(VIEW_5_NAME) @@ -5720,7 +5657,7 @@ public abstract class BaseTest { .columns(null) .build(); - public static final ViewDto VIEW_5_DTO = ViewDto.builder() + public final ViewDto VIEW_5_DTO = ViewDto.builder() .id(VIEW_5_ID) .databaseId(DATABASE_3_ID) .isInitialView(VIEW_5_INITIAL_VIEW) @@ -5734,7 +5671,7 @@ public abstract class BaseTest { .columns(new LinkedList<>()) .build(); - public static final ViewBriefDto VIEW_5_BRIEF_DTO = ViewBriefDto.builder() + public final ViewBriefDto VIEW_5_BRIEF_DTO = ViewBriefDto.builder() .id(VIEW_5_ID) .isInitialView(VIEW_5_INITIAL_VIEW) .name(VIEW_5_NAME) @@ -5746,7 +5683,7 @@ public abstract class BaseTest { .queryHash(VIEW_5_QUERY_HASH) .build(); - public static final List<ViewColumn> VIEW_5_COLUMNS = List.of( + public final List<ViewColumn> VIEW_5_COLUMNS = List.of( ViewColumn.builder() .id(COLUMN_2_1_ID) .ordinalPosition(0) @@ -5780,7 +5717,7 @@ public abstract class BaseTest { .view(VIEW_5) .build()); - public static final List<ViewColumnDto> VIEW_5_COLUMNS_DTO = List.of( + public final List<ViewColumnDto> VIEW_5_COLUMNS_DTO = List.of( ViewColumnDto.builder() .id(COLUMN_2_1_ID) .databaseId(DATABASE_3_ID) @@ -5814,8 +5751,8 @@ public abstract class BaseTest { .isNullAllowed(true) .build()); - public static final Long QUERY_1_RESULT_ID = 1L; - public static final List<Map<String, Object>> QUERY_1_RESULT_DTO = new LinkedList<>(List.of( + public final static Long QUERY_1_RESULT_ID = 1L; + public final List<Map<String, Object>> QUERY_1_RESULT_DTO = new LinkedList<>(List.of( new HashMap<>() {{ put("location", "Albury"); put("lat", -36.0653583); @@ -5826,33 +5763,30 @@ public abstract class BaseTest { put("lng", 150.6517942); }})); - public static final String LICENSE_1_IDENTIFIER = "MIT"; - public static final String LICENSE_1_URI = "https://opensource.org/license/mit/"; - - public static final License LICENSE_1 = License.builder() + public final static String LICENSE_1_IDENTIFIER = "MIT"; + public final static String LICENSE_1_URI = "https://opensource.org/license/mit/"; + public final License LICENSE_1 = License.builder() .identifier(LICENSE_1_IDENTIFIER) .uri(LICENSE_1_URI) .build(); - public static final LicenseDto LICENSE_1_DTO = LicenseDto.builder() + public final LicenseDto LICENSE_1_DTO = LicenseDto.builder() .identifier(LICENSE_1_IDENTIFIER) .uri(LICENSE_1_URI) .build(); - public static final UUID CREATOR_1_ID = UUID.fromString("a0417f34-80ff-419f-821d-ce179021484a"); - public static final String CREATOR_1_ORCID = "00000-00000-00000"; - public static final String CREATOR_1_AFFIL = "TU Graz"; - public static final String CREATOR_1_AFFIL_ROR = "https://ror.org/04wn28048"; - public static final String CREATOR_1_AFFIL_URI = "https://ror.org/"; - public static final AffiliationIdentifierSchemeType CREATOR_1_AFFIL_TYPE = AffiliationIdentifierSchemeType.ROR; - public static final AffiliationIdentifierSchemeTypeDto CREATOR_1_AFFIL_TYPE_DTO = AffiliationIdentifierSchemeTypeDto.ROR; - public static final String CREATOR_1_FIRSTNAME = "Max"; - public static final String CREATOR_1_LASTNAME = "Mustermann"; - public static final String CREATOR_1_NAME = CREATOR_1_LASTNAME + ", " + CREATOR_1_FIRSTNAME; - public static final Instant CREATOR_1_CREATED = Instant.ofEpochSecond(1641588352L); - public static final Instant CREATOR_1_MODIFIED = Instant.ofEpochSecond(1541588352L); - - public static final OrcidDto ORCID_1_DTO = OrcidDto.builder() + public final static UUID CREATOR_1_ID = UUID.fromString("a0417f34-80ff-419f-821d-ce179021484a"); + public final static String CREATOR_1_ORCID = "00000-00000-00000"; + public final static String CREATOR_1_AFFIL = "TU Graz"; + public final static String CREATOR_1_AFFIL_ROR = "https://ror.org/04wn28048"; + public final static String CREATOR_1_AFFIL_URI = "https://ror.org/"; + public final static AffiliationIdentifierSchemeType CREATOR_1_AFFIL_TYPE = AffiliationIdentifierSchemeType.ROR; + public final static AffiliationIdentifierSchemeTypeDto CREATOR_1_AFFIL_TYPE_DTO = AffiliationIdentifierSchemeTypeDto.ROR; + public final static String CREATOR_1_FIRSTNAME = "Max"; + public final static String CREATOR_1_LASTNAME = "Mustermann"; + public final static String CREATOR_1_NAME = CREATOR_1_LASTNAME + ", " + CREATOR_1_FIRSTNAME; + + public final OrcidDto ORCID_1_DTO = OrcidDto.builder() .person(OrcidPersonDto.builder() .name(OrcidNameDto.builder() .givenNames(OrcidValueDto.builder() @@ -5882,190 +5816,184 @@ public abstract class BaseTest { .build()) .build(); - public static final UUID CREATOR_2_ID = UUID.fromString("56b70dae-17a7-4f76-9c1e-a493762ba760"); - public static final Long CREATOR_2_QUERY_ID = 1L; - public static final String CREATOR_2_ORCID = "00000-00000-00000"; - public static final String CREATOR_2_AFFIL = "TU Wien"; - public static final String CREATOR_2_FIRSTNAME = "Martina"; - public static final String CREATOR_2_LASTNAME = "Mustermann"; - public static final String CREATOR_2_NAME = CREATOR_2_LASTNAME + ", " + CREATOR_2_FIRSTNAME; - public static final Instant CREATOR_2_CREATED = Instant.ofEpochSecond(1641588352L); - public static final Instant CREATOR_2_MODIFIED = Instant.ofEpochSecond(1541588352L); - - public static final UUID CREATOR_3_ID = UUID.fromString("a2dfea46-7d88-4069-9b93-2417e1fb578b"); - public static final Long CREATOR_3_QUERY_ID = 1L; - public static final String CREATOR_3_ORCID = "00000-00000-00000"; - public static final String CREATOR_3_AFFIL = "TU Graz"; - public static final String CREATOR_3_AFFIL_ROR = "https://ror.org/04wn28048"; - public static final AffiliationIdentifierSchemeType CREATOR_3_AFFIL_SCHEME_TYPE = AffiliationIdentifierSchemeType.ROR; - public static final AffiliationIdentifierSchemeTypeDto CREATOR_3_AFFIL_SCHEME_TYPE_DTO = AffiliationIdentifierSchemeTypeDto.ROR; - public static final String CREATOR_3_AFFIL_URI = "https://ror.org/"; - public static final String CREATOR_3_FIRSTNAME = "Max"; - public static final String CREATOR_3_LASTNAME = "Mustermann"; - public static final String CREATOR_3_NAME = CREATOR_3_LASTNAME + ", " + CREATOR_3_FIRSTNAME; - public static final Instant CREATOR_3_CREATED = Instant.ofEpochSecond(1641588352L); - public static final Instant CREATOR_3_MODIFIED = Instant.ofEpochSecond(1541588352L); - - public static final UUID CREATOR_4_ID = UUID.fromString("473489fa-ad02-4e48-856f-5a3f83ff541d"); - public static final Long CREATOR_4_QUERY_ID = 1L; - public static final String CREATOR_4_ORCID = "00000-00000-00000"; - public static final String CREATOR_4_AFFIL = "TU Wien"; - public static final String CREATOR_4_AFFIL_ROR = "https://ror.org/04d836q62"; - public static final String CREATOR_4_AFFIL_URI = "https://ror.org/"; - public static final AffiliationIdentifierSchemeType CREATOR_4_AFFIL_TYPE = AffiliationIdentifierSchemeType.ROR; - public static final AffiliationIdentifierSchemeTypeDto CREATOR_4_AFFIL_TYPE_DTO = AffiliationIdentifierSchemeTypeDto.ROR; - public static final String CREATOR_4_FIRSTNAME = "Martina"; - public static final String CREATOR_4_LASTNAME = "Mustermann"; - public static final String CREATOR_4_NAME = CREATOR_4_LASTNAME + ", " + CREATOR_4_FIRSTNAME; - public static final Instant CREATOR_4_CREATED = Instant.ofEpochSecond(1641588352L); - public static final Instant CREATOR_4_MODIFIED = Instant.ofEpochSecond(1541588352L); - - public static final UUID IDENTIFIER_1_ID = UUID.fromString("679a83f2-ef23-4b4b-98f7-ad77b9d68733"); - public static final String IDENTIFIER_1_DOI = "10.12345/183"; - public static final Instant IDENTIFIER_1_CREATED = Instant.ofEpochSecond(1641588352L) /* 2022-01-07 20:45:52 */; - public static final Instant IDENTIFIER_1_MODIFIED = Instant.ofEpochSecond(1541588352L) /* 2022-01-07 20:45:52 */; - public static final Instant IDENTIFIER_1_EXECUTION = Instant.ofEpochSecond(1541588352L) /* 2022-01-07 20:45:52 */; - public static final Integer IDENTIFIER_1_PUBLICATION_MONTH = 5; - public static final Integer IDENTIFIER_1_PUBLICATION_YEAR = 2022; - public static final Integer IDENTIFIER_1_PUBLICATION_DAY = null; - public static final String IDENTIFIER_1_PUBLISHER = "Austrian Government"; - public static final IdentifierType IDENTIFIER_1_TYPE = IdentifierType.DATABASE; - public static final IdentifierTypeDto IDENTIFIER_1_TYPE_DTO = IdentifierTypeDto.DATABASE; - public static final IdentifierStatusType IDENTIFIER_1_STATUS_TYPE = IdentifierStatusType.PUBLISHED; - public static final IdentifierStatusTypeDto IDENTIFIER_1_STATUS_TYPE_DTO = IdentifierStatusTypeDto.PUBLISHED; - - public static final UUID IDENTIFIER_1_TITLE_1_ID = UUID.fromString("3df6b286-9bd2-4ae3-b8f4-29c217544bef"); - public static final String IDENTIFIER_1_TITLE_1_TITLE = "Austrian weather data"; - public static final String IDENTIFIER_1_TITLE_1_TITLE_MODIFY = "Austrian weather some data"; - public static final TitleType IDENTIFIER_1_TITLE_1_TYPE = null; - public static final TitleTypeDto IDENTIFIER_1_TITLE_1_TYPE_DTO = null; - public static final LanguageType IDENTIFIER_1_TITLE_1_LANG = LanguageType.EN; - public static final LanguageTypeDto IDENTIFIER_1_TITLE_1_LANG_DTO = LanguageTypeDto.EN; - - public static final IdentifierTitle IDENTIFIER_1_TITLE_1 = IdentifierTitle.builder() + public final static UUID CREATOR_2_ID = UUID.fromString("56b70dae-17a7-4f76-9c1e-a493762ba760"); + public final static Long CREATOR_2_QUERY_ID = 1L; + public final static String CREATOR_2_ORCID = "00000-00000-00000"; + public final static String CREATOR_2_AFFIL = "TU Wien"; + public final static String CREATOR_2_FIRSTNAME = "Martina"; + public final static String CREATOR_2_LASTNAME = "Mustermann"; + public final static String CREATOR_2_NAME = CREATOR_2_LASTNAME + ", " + CREATOR_2_FIRSTNAME; + + public final static UUID CREATOR_3_ID = UUID.fromString("a2dfea46-7d88-4069-9b93-2417e1fb578b"); + public final static Long CREATOR_3_QUERY_ID = 1L; + public final static String CREATOR_3_ORCID = "00000-00000-00000"; + public final static String CREATOR_3_AFFIL = "TU Graz"; + public final static String CREATOR_3_AFFIL_ROR = "https://ror.org/04wn28048"; + public final static AffiliationIdentifierSchemeType CREATOR_3_AFFIL_SCHEME_TYPE = AffiliationIdentifierSchemeType.ROR; + public final static AffiliationIdentifierSchemeTypeDto CREATOR_3_AFFIL_SCHEME_TYPE_DTO = AffiliationIdentifierSchemeTypeDto.ROR; + public final static String CREATOR_3_AFFIL_URI = "https://ror.org/"; + public final static String CREATOR_3_FIRSTNAME = "Max"; + public final static String CREATOR_3_LASTNAME = "Mustermann"; + public final static String CREATOR_3_NAME = CREATOR_3_LASTNAME + ", " + CREATOR_3_FIRSTNAME; + + public final static UUID CREATOR_4_ID = UUID.fromString("473489fa-ad02-4e48-856f-5a3f83ff541d"); + public final static Long CREATOR_4_QUERY_ID = 1L; + public final static String CREATOR_4_ORCID = "00000-00000-00000"; + public final static String CREATOR_4_AFFIL = "TU Wien"; + public final static String CREATOR_4_AFFIL_ROR = "https://ror.org/04d836q62"; + public final static String CREATOR_4_AFFIL_URI = "https://ror.org/"; + public final static AffiliationIdentifierSchemeType CREATOR_4_AFFIL_TYPE = AffiliationIdentifierSchemeType.ROR; + public final static AffiliationIdentifierSchemeTypeDto CREATOR_4_AFFIL_TYPE_DTO = AffiliationIdentifierSchemeTypeDto.ROR; + public final static String CREATOR_4_FIRSTNAME = "Martina"; + public final static String CREATOR_4_LASTNAME = "Mustermann"; + public final static String CREATOR_4_NAME = CREATOR_4_LASTNAME + ", " + CREATOR_4_FIRSTNAME; + + public final static UUID IDENTIFIER_1_ID = UUID.fromString("679a83f2-ef23-4b4b-98f7-ad77b9d68733"); + public final static String IDENTIFIER_1_DOI = "10.12345/183"; + public final static Instant IDENTIFIER_1_CREATED = Instant.ofEpochSecond(1641588352L) /* 2022-01-07 20:45:52 */; + public final static Instant IDENTIFIER_1_MODIFIED = Instant.ofEpochSecond(1541588352L) /* 2022-01-07 20:45:52 */; + public final static Instant IDENTIFIER_1_EXECUTION = Instant.ofEpochSecond(1541588352L) /* 2022-01-07 20:45:52 */; + public final static Integer IDENTIFIER_1_PUBLICATION_MONTH = 5; + public final static Integer IDENTIFIER_1_PUBLICATION_YEAR = 2022; + public final static Integer IDENTIFIER_1_PUBLICATION_DAY = null; + public final static String IDENTIFIER_1_PUBLISHER = "Austrian Government"; + public final static IdentifierType IDENTIFIER_1_TYPE = IdentifierType.DATABASE; + public final static IdentifierTypeDto IDENTIFIER_1_TYPE_DTO = IdentifierTypeDto.DATABASE; + public final static IdentifierStatusType IDENTIFIER_1_STATUS_TYPE = IdentifierStatusType.PUBLISHED; + public final static IdentifierStatusTypeDto IDENTIFIER_1_STATUS_TYPE_DTO = IdentifierStatusTypeDto.PUBLISHED; + + public final static UUID IDENTIFIER_1_TITLE_1_ID = UUID.fromString("3df6b286-9bd2-4ae3-b8f4-29c217544bef"); + public final static String IDENTIFIER_1_TITLE_1_TITLE = "Austrian weather data"; + public final static String IDENTIFIER_1_TITLE_1_TITLE_MODIFY = "Austrian weather some data"; + public final static TitleType IDENTIFIER_1_TITLE_1_TYPE = null; + public final static TitleTypeDto IDENTIFIER_1_TITLE_1_TYPE_DTO = null; + public final static LanguageType IDENTIFIER_1_TITLE_1_LANG = LanguageType.EN; + public final static LanguageTypeDto IDENTIFIER_1_TITLE_1_LANG_DTO = LanguageTypeDto.EN; + + public final IdentifierTitle IDENTIFIER_1_TITLE_1 = IdentifierTitle.builder() .id(IDENTIFIER_1_TITLE_1_ID) .title(IDENTIFIER_1_TITLE_1_TITLE) .titleType(IDENTIFIER_1_TITLE_1_TYPE) .language(IDENTIFIER_1_TITLE_1_LANG) .build(); - public static final IdentifierTitleDto IDENTIFIER_1_TITLE_1_DTO = IdentifierTitleDto.builder() + public final IdentifierTitleDto IDENTIFIER_1_TITLE_1_DTO = IdentifierTitleDto.builder() .id(IDENTIFIER_1_TITLE_1_ID) .title(IDENTIFIER_1_TITLE_1_TITLE) .titleType(IDENTIFIER_1_TITLE_1_TYPE_DTO) .language(IDENTIFIER_1_TITLE_1_LANG_DTO) .build(); - public static final IdentifierTitleDto IDENTIFIER_1_TITLE_1_DTO_MODIFY = IdentifierTitleDto.builder() + public final IdentifierTitleDto IDENTIFIER_1_TITLE_1_DTO_MODIFY = IdentifierTitleDto.builder() .id(IDENTIFIER_1_TITLE_1_ID) .title(IDENTIFIER_1_TITLE_1_TITLE_MODIFY) .titleType(IDENTIFIER_1_TITLE_1_TYPE_DTO) .language(IDENTIFIER_1_TITLE_1_LANG_DTO) .build(); - public static final SaveIdentifierTitleDto IDENTIFIER_1_TITLE_1_CREATE_DTO = SaveIdentifierTitleDto.builder() + public final SaveIdentifierTitleDto IDENTIFIER_1_TITLE_1_CREATE_DTO = SaveIdentifierTitleDto.builder() .title(IDENTIFIER_1_TITLE_1_TITLE) .titleType(IDENTIFIER_1_TITLE_1_TYPE_DTO) .language(IDENTIFIER_1_TITLE_1_LANG_DTO) .build(); - public static final SaveIdentifierTitleDto IDENTIFIER_1_TITLE_1_UPDATE_DTO = SaveIdentifierTitleDto.builder() + public final SaveIdentifierTitleDto IDENTIFIER_1_TITLE_1_UPDATE_DTO = SaveIdentifierTitleDto.builder() .title(IDENTIFIER_1_TITLE_1_TITLE_MODIFY) .titleType(IDENTIFIER_1_TITLE_1_TYPE_DTO) .language(IDENTIFIER_1_TITLE_1_LANG_DTO) .build(); - public static final UUID IDENTIFIER_1_TITLE_2_ID = UUID.fromString("903a7e5b-8014-4b8a-b8fd-44f477880905"); - public static final String IDENTIFIER_1_TITLE_2_TITLE = "Österreichische Wetterdaten"; - public static final String IDENTIFIER_1_TITLE_2_TITLE_MODIFY = "Österreichische Wetterdaten übersetzt"; - public static final TitleType IDENTIFIER_1_TITLE_2_TYPE = TitleType.TRANSLATED_TITLE; - public static final TitleTypeDto IDENTIFIER_1_TITLE_2_TYPE_DTO = TitleTypeDto.TRANSLATED_TITLE; - public static final LanguageType IDENTIFIER_1_TITLE_2_LANG = LanguageType.EN; - public static final LanguageTypeDto IDENTIFIER_1_TITLE_2_LANG_DTO = LanguageTypeDto.EN; + public final static UUID IDENTIFIER_1_TITLE_2_ID = UUID.fromString("903a7e5b-8014-4b8a-b8fd-44f477880905"); + public final static String IDENTIFIER_1_TITLE_2_TITLE = "Österreichische Wetterdaten"; + public final static String IDENTIFIER_1_TITLE_2_TITLE_MODIFY = "Österreichische Wetterdaten übersetzt"; + public final static TitleType IDENTIFIER_1_TITLE_2_TYPE = TitleType.TRANSLATED_TITLE; + public final static TitleTypeDto IDENTIFIER_1_TITLE_2_TYPE_DTO = TitleTypeDto.TRANSLATED_TITLE; + public final static LanguageType IDENTIFIER_1_TITLE_2_LANG = LanguageType.EN; + public final static LanguageTypeDto IDENTIFIER_1_TITLE_2_LANG_DTO = LanguageTypeDto.EN; - public static final IdentifierTitle IDENTIFIER_1_TITLE_2 = IdentifierTitle.builder() + public final IdentifierTitle IDENTIFIER_1_TITLE_2 = IdentifierTitle.builder() .id(IDENTIFIER_1_TITLE_2_ID) .title(IDENTIFIER_1_TITLE_2_TITLE) .titleType(IDENTIFIER_1_TITLE_2_TYPE) .language(IDENTIFIER_1_TITLE_2_LANG) .build(); - public static final IdentifierTitleDto IDENTIFIER_1_TITLE_2_DTO = IdentifierTitleDto.builder() + public final IdentifierTitleDto IDENTIFIER_1_TITLE_2_DTO = IdentifierTitleDto.builder() .id(IDENTIFIER_1_TITLE_2_ID) .title(IDENTIFIER_1_TITLE_2_TITLE) .titleType(IDENTIFIER_1_TITLE_2_TYPE_DTO) .language(IDENTIFIER_1_TITLE_2_LANG_DTO) .build(); - public static final IdentifierTitleDto IDENTIFIER_1_TITLE_2_DTO_MODIFY = IdentifierTitleDto.builder() + public final IdentifierTitleDto IDENTIFIER_1_TITLE_2_DTO_MODIFY = IdentifierTitleDto.builder() .id(IDENTIFIER_1_TITLE_2_ID) .title(IDENTIFIER_1_TITLE_2_TITLE_MODIFY) .titleType(IDENTIFIER_1_TITLE_2_TYPE_DTO) .language(IDENTIFIER_1_TITLE_2_LANG_DTO) .build(); - public static final SaveIdentifierTitleDto IDENTIFIER_1_TITLE_2_CREATE_DTO = SaveIdentifierTitleDto.builder() + public final SaveIdentifierTitleDto IDENTIFIER_1_TITLE_2_CREATE_DTO = SaveIdentifierTitleDto.builder() .title(IDENTIFIER_1_TITLE_2_TITLE) .titleType(IDENTIFIER_1_TITLE_2_TYPE_DTO) .language(IDENTIFIER_1_TITLE_2_LANG_DTO) .build(); - public static final SaveIdentifierTitleDto IDENTIFIER_1_TITLE_2_UPDATE_DTO = SaveIdentifierTitleDto.builder() + public final SaveIdentifierTitleDto IDENTIFIER_1_TITLE_2_UPDATE_DTO = SaveIdentifierTitleDto.builder() .title(IDENTIFIER_1_TITLE_2_TITLE_MODIFY) .titleType(IDENTIFIER_1_TITLE_2_TYPE_DTO) .language(IDENTIFIER_1_TITLE_2_LANG_DTO) .build(); - public static final UUID IDENTIFIER_1_DESCRIPTION_1_ID = UUID.fromString("1c438756-93f0-4797-983c-175a17e18c2c"); - public static final String IDENTIFIER_1_DESCRIPTION_1_DESCRIPTION = "Selecting all from the weather Austrian table"; - public static final String IDENTIFIER_1_DESCRIPTION_1_DESCRIPTION_MODIFY = "Selecting some from the weather Austrian table"; - public static final DescriptionType IDENTIFIER_1_DESCRIPTION_1_TYPE = null; - public static final DescriptionTypeDto IDENTIFIER_1_DESCRIPTION_1_TYPE_DTO = null; - public static final LanguageType IDENTIFIER_1_DESCRIPTION_1_LANG = LanguageType.EN; - public static final LanguageTypeDto IDENTIFIER_1_DESCRIPTION_1_LANG_DTO = LanguageTypeDto.EN; + public final static UUID IDENTIFIER_1_DESCRIPTION_1_ID = UUID.fromString("1c438756-93f0-4797-983c-175a17e18c2c"); + public final static String IDENTIFIER_1_DESCRIPTION_1_DESCRIPTION = "Selecting all from the weather Austrian table"; + public final static String IDENTIFIER_1_DESCRIPTION_1_DESCRIPTION_MODIFY = "Selecting some from the weather Austrian table"; + public final static DescriptionType IDENTIFIER_1_DESCRIPTION_1_TYPE = null; + public final static DescriptionTypeDto IDENTIFIER_1_DESCRIPTION_1_TYPE_DTO = null; + public final static LanguageType IDENTIFIER_1_DESCRIPTION_1_LANG = LanguageType.EN; + public final static LanguageTypeDto IDENTIFIER_1_DESCRIPTION_1_LANG_DTO = LanguageTypeDto.EN; - public static final IdentifierDescription IDENTIFIER_1_DESCRIPTION_1 = IdentifierDescription.builder() + public final IdentifierDescription IDENTIFIER_1_DESCRIPTION_1 = IdentifierDescription.builder() .id(IDENTIFIER_1_DESCRIPTION_1_ID) .description(IDENTIFIER_1_DESCRIPTION_1_DESCRIPTION) .descriptionType(IDENTIFIER_1_DESCRIPTION_1_TYPE) .language(IDENTIFIER_1_DESCRIPTION_1_LANG) .build(); - public static final IdentifierDescriptionDto IDENTIFIER_1_DESCRIPTION_1_DTO = IdentifierDescriptionDto.builder() + public final IdentifierDescriptionDto IDENTIFIER_1_DESCRIPTION_1_DTO = IdentifierDescriptionDto.builder() .id(IDENTIFIER_1_DESCRIPTION_1_ID) .description(IDENTIFIER_1_DESCRIPTION_1_DESCRIPTION) .descriptionType(IDENTIFIER_1_DESCRIPTION_1_TYPE_DTO) .language(IDENTIFIER_1_DESCRIPTION_1_LANG_DTO) .build(); - public static final IdentifierDescriptionDto IDENTIFIER_1_DESCRIPTION_1_DTO_MODIFY = IdentifierDescriptionDto.builder() + public final IdentifierDescriptionDto IDENTIFIER_1_DESCRIPTION_1_DTO_MODIFY = IdentifierDescriptionDto.builder() .id(IDENTIFIER_1_DESCRIPTION_1_ID) .description(IDENTIFIER_1_DESCRIPTION_1_DESCRIPTION_MODIFY) .descriptionType(IDENTIFIER_1_DESCRIPTION_1_TYPE_DTO) .language(IDENTIFIER_1_DESCRIPTION_1_LANG_DTO) .build(); - public static final SaveIdentifierDescriptionDto IDENTIFIER_1_DESCRIPTION_1_CREATE_DTO = SaveIdentifierDescriptionDto.builder() + public final SaveIdentifierDescriptionDto IDENTIFIER_1_DESCRIPTION_1_CREATE_DTO = SaveIdentifierDescriptionDto.builder() .id(null) .description(IDENTIFIER_1_DESCRIPTION_1_DESCRIPTION) .descriptionType(IDENTIFIER_1_DESCRIPTION_1_TYPE_DTO) .language(IDENTIFIER_1_DESCRIPTION_1_LANG_DTO) .build(); - public static final UUID IDENTIFIER_1_CREATOR_1_ID = UUID.fromString("667cd1d6-4f94-4808-b5cb-12e5ec0788d8"); - public static final String IDENTIFIER_1_CREATOR_1_FIRSTNAME = CREATOR_1_FIRSTNAME; - public static final String IDENTIFIER_1_CREATOR_1_LASTNAME = CREATOR_1_LASTNAME; - public static final String IDENTIFIER_1_CREATOR_1_NAME = CREATOR_1_NAME; - public static final String IDENTIFIER_1_CREATOR_1_ORCID = CREATOR_1_ORCID; - public static final NameIdentifierSchemeType IDENTIFIER_1_CREATOR_1_IDENTIFIER_SCHEME_TYPE = NameIdentifierSchemeType.ORCID; - public static final NameIdentifierSchemeTypeDto IDENTIFIER_1_CREATOR_1_IDENTIFIER_SCHEME_TYPE_DTO = NameIdentifierSchemeTypeDto.ORCID; - public static final String IDENTIFIER_1_CREATOR_1_AFFILIATION = CREATOR_1_AFFIL; - public static final String IDENTIFIER_1_CREATOR_1_AFFILIATION_IDENTIFIER = CREATOR_1_AFFIL_ROR; - public static final AffiliationIdentifierSchemeType IDENTIFIER_1_CREATOR_1_AFFILIATION_IDENTIFIER_SCHEME = CREATOR_1_AFFIL_TYPE; - public static final AffiliationIdentifierSchemeTypeDto IDENTIFIER_1_CREATOR_1_AFFILIATION_IDENTIFIER_SCHEME_DTO = CREATOR_1_AFFIL_TYPE_DTO; - public static final String IDENTIFIER_1_CREATOR_1_AFFILIATION_IDENTIFIER_SCHEME_URI = CREATOR_1_AFFIL_URI; - - public static final Creator IDENTIFIER_1_CREATOR_1 = Creator.builder() + public final static UUID IDENTIFIER_1_CREATOR_1_ID = UUID.fromString("667cd1d6-4f94-4808-b5cb-12e5ec0788d8"); + public final static String IDENTIFIER_1_CREATOR_1_FIRSTNAME = CREATOR_1_FIRSTNAME; + public final static String IDENTIFIER_1_CREATOR_1_LASTNAME = CREATOR_1_LASTNAME; + public final static String IDENTIFIER_1_CREATOR_1_NAME = CREATOR_1_NAME; + public final static String IDENTIFIER_1_CREATOR_1_ORCID = CREATOR_1_ORCID; + public final NameIdentifierSchemeType IDENTIFIER_1_CREATOR_1_IDENTIFIER_SCHEME_TYPE = NameIdentifierSchemeType.ORCID; + public final NameIdentifierSchemeTypeDto IDENTIFIER_1_CREATOR_1_IDENTIFIER_SCHEME_TYPE_DTO = NameIdentifierSchemeTypeDto.ORCID; + public final static String IDENTIFIER_1_CREATOR_1_AFFILIATION = CREATOR_1_AFFIL; + public final static String IDENTIFIER_1_CREATOR_1_AFFILIATION_IDENTIFIER = CREATOR_1_AFFIL_ROR; + public final static AffiliationIdentifierSchemeType IDENTIFIER_1_CREATOR_1_AFFILIATION_IDENTIFIER_SCHEME = CREATOR_1_AFFIL_TYPE; + public final static AffiliationIdentifierSchemeTypeDto IDENTIFIER_1_CREATOR_1_AFFILIATION_IDENTIFIER_SCHEME_DTO = CREATOR_1_AFFIL_TYPE_DTO; + public final static String IDENTIFIER_1_CREATOR_1_AFFILIATION_IDENTIFIER_SCHEME_URI = CREATOR_1_AFFIL_URI; + + public final Creator IDENTIFIER_1_CREATOR_1 = Creator.builder() .id(IDENTIFIER_1_CREATOR_1_ID) .firstname(IDENTIFIER_1_CREATOR_1_FIRSTNAME) .lastname(IDENTIFIER_1_CREATOR_1_LASTNAME) @@ -6079,7 +6007,7 @@ public abstract class BaseTest { .affiliationIdentifierSchemeUri(IDENTIFIER_1_CREATOR_1_AFFILIATION_IDENTIFIER_SCHEME_URI) .build(); - public static final CreatorDto IDENTIFIER_1_CREATOR_1_DTO = CreatorDto.builder() + public final CreatorDto IDENTIFIER_1_CREATOR_1_DTO = CreatorDto.builder() .id(IDENTIFIER_1_CREATOR_1_ID) .firstname(IDENTIFIER_1_CREATOR_1_FIRSTNAME) .lastname(IDENTIFIER_1_CREATOR_1_LASTNAME) @@ -6093,7 +6021,7 @@ public abstract class BaseTest { .affiliationIdentifierSchemeUri(IDENTIFIER_1_CREATOR_1_AFFILIATION_IDENTIFIER_SCHEME_URI) .build(); - public static final SaveIdentifierCreatorDto IDENTIFIER_1_CREATOR_1_CREATE_DTO = SaveIdentifierCreatorDto.builder() + public final SaveIdentifierCreatorDto IDENTIFIER_1_CREATOR_1_CREATE_DTO = SaveIdentifierCreatorDto.builder() .id(null) .firstname(IDENTIFIER_1_CREATOR_1_FIRSTNAME) .lastname(IDENTIFIER_1_CREATOR_1_LASTNAME) @@ -6106,15 +6034,15 @@ public abstract class BaseTest { .affiliationIdentifierScheme(IDENTIFIER_1_CREATOR_1_AFFILIATION_IDENTIFIER_SCHEME_DTO) .build(); - public static final UUID FUNDER_1_ID = UUID.fromString("8deb273d-6dd6-407d-970a-01534035ac01"); - public static final String FUNDER_1_NAME = "European Commission"; - public static final String FUNDER_1_IDENTIFIER = "https://doi.org/10.13039/501100000780"; - public static final String FUNDER_1_IDENTIFIER_ID_ONLY = "10.13039/501100000780"; - public static final IdentifierFunderType FUNDER_1_IDENTIFIER_TYPE = IdentifierFunderType.CROSSREF_FUNDER_ID; - public static final IdentifierFunderTypeDto FUNDER_1_IDENTIFIER_TYPE_DTO = IdentifierFunderTypeDto.CROSSREF_FUNDER_ID; - public static final String FUNDER_1_AWARD_TITLE = "Institutionalizing global genetic-resource commons. Global Strategies for accessing and using essential public knowledge assets in the life science"; + public final static UUID FUNDER_1_ID = UUID.fromString("8deb273d-6dd6-407d-970a-01534035ac01"); + public final static String FUNDER_1_NAME = "European Commission"; + public final static String FUNDER_1_IDENTIFIER = "https://doi.org/10.13039/501100000780"; + public final static String FUNDER_1_IDENTIFIER_ID_ONLY = "10.13039/501100000780"; + public final IdentifierFunderType FUNDER_1_IDENTIFIER_TYPE = IdentifierFunderType.CROSSREF_FUNDER_ID; + public final IdentifierFunderTypeDto FUNDER_1_IDENTIFIER_TYPE_DTO = IdentifierFunderTypeDto.CROSSREF_FUNDER_ID; + public final static String FUNDER_1_AWARD_TITLE = "Institutionalizing global genetic-resource commons. Global Strategies for accessing and using essential public knowledge assets in the life science"; - public static final IdentifierFunder IDENTIFIER_1_FUNDER_1 = IdentifierFunder.builder() + public final IdentifierFunder IDENTIFIER_1_FUNDER_1 = IdentifierFunder.builder() .id(FUNDER_1_ID) .funderName(FUNDER_1_NAME) .funderIdentifier(FUNDER_1_IDENTIFIER) @@ -6122,7 +6050,7 @@ public abstract class BaseTest { .awardTitle(FUNDER_1_AWARD_TITLE) .build(); - public static final IdentifierFunderDto IDENTIFIER_1_FUNDER_1_DTO = IdentifierFunderDto.builder() + public final IdentifierFunderDto IDENTIFIER_1_FUNDER_1_DTO = IdentifierFunderDto.builder() .id(FUNDER_1_ID) .funderName(FUNDER_1_NAME) .funderIdentifier(FUNDER_1_IDENTIFIER) @@ -6130,14 +6058,14 @@ public abstract class BaseTest { .awardTitle(FUNDER_1_AWARD_TITLE) .build(); - public static final SaveIdentifierFunderDto IDENTIFIER_1_FUNDER_1_CREATE_DTO = SaveIdentifierFunderDto.builder() + public final SaveIdentifierFunderDto IDENTIFIER_1_FUNDER_1_CREATE_DTO = SaveIdentifierFunderDto.builder() .funderName(FUNDER_1_NAME) .funderIdentifier(FUNDER_1_IDENTIFIER) .funderIdentifierType(FUNDER_1_IDENTIFIER_TYPE_DTO) .awardTitle(FUNDER_1_AWARD_TITLE) .build(); - public static final DataCiteBody<DataCiteDoi> IDENTIFIER_1_DATA_CITE = DataCiteBody.<DataCiteDoi>builder() + public final DataCiteBody<DataCiteDoi> IDENTIFIER_1_DATA_CITE = DataCiteBody.<DataCiteDoi>builder() .data(DataCiteData.<DataCiteDoi>builder() .type("dois") .attributes(DataCiteDoi.builder() @@ -6146,7 +6074,7 @@ public abstract class BaseTest { .build()) .build(); - public static final Identifier IDENTIFIER_1 = Identifier.builder() + public final Identifier IDENTIFIER_1 = Identifier.builder() .id(IDENTIFIER_1_ID) .queryId(QUERY_1_ID) .titles(new LinkedList<>(List.of(IDENTIFIER_1_TITLE_1, IDENTIFIER_1_TITLE_2))) @@ -6173,32 +6101,7 @@ public abstract class BaseTest { .status(IDENTIFIER_1_STATUS_TYPE) .build(); - public static final Identifier IDENTIFIER_1_WITH_DOI = Identifier.builder() - .id(IDENTIFIER_1_ID) - .descriptions(new LinkedList<>(List.of(IDENTIFIER_1_DESCRIPTION_1))) - .titles(new LinkedList<>(List.of(IDENTIFIER_1_TITLE_1, IDENTIFIER_1_TITLE_2))) - .doi(IDENTIFIER_1_DOI) - .database(null /* for jpa */) - .created(IDENTIFIER_1_CREATED) - .lastModified(IDENTIFIER_1_MODIFIED) - .execution(IDENTIFIER_1_EXECUTION) - .publicationYear(IDENTIFIER_1_PUBLICATION_YEAR) - .publicationMonth(IDENTIFIER_1_PUBLICATION_MONTH) - .queryHash(QUERY_1_QUERY_HASH) - .resultHash(QUERY_1_RESULT_HASH) - .query(QUERY_1_STATEMENT) - .queryNormalized(QUERY_1_STATEMENT) - .resultNumber(QUERY_1_RESULT_NUMBER) - .publisher(IDENTIFIER_1_PUBLISHER) - .type(IDENTIFIER_1_TYPE) - .owner(USER_1) - .licenses(new LinkedList<>(List.of(LICENSE_1))) - .creators(new LinkedList<>(List.of(IDENTIFIER_1_CREATOR_1))) - .funders(new LinkedList<>(List.of(IDENTIFIER_1_FUNDER_1))) - .status(IDENTIFIER_1_STATUS_TYPE) - .build(); - - public static final IdentifierDto IDENTIFIER_1_DTO = IdentifierDto.builder() + public final IdentifierDto IDENTIFIER_1_DTO = IdentifierDto.builder() .id(IDENTIFIER_1_ID) .databaseId(DATABASE_1_ID) .links(LinksDto.builder() @@ -6226,7 +6129,7 @@ public abstract class BaseTest { .status(IDENTIFIER_1_STATUS_TYPE_DTO) .build(); - public static final IdentifierBriefDto IDENTIFIER_1_BRIEF_DTO = IdentifierBriefDto.builder() + public final IdentifierBriefDto IDENTIFIER_1_BRIEF_DTO = IdentifierBriefDto.builder() .id(IDENTIFIER_1_ID) .databaseId(DATABASE_1_ID) .titles(new LinkedList<>(List.of(IDENTIFIER_1_TITLE_1_DTO, IDENTIFIER_1_TITLE_2_DTO))) @@ -6237,7 +6140,7 @@ public abstract class BaseTest { .status(IDENTIFIER_1_STATUS_TYPE_DTO) .build(); - public static final CreateIdentifierDto IDENTIFIER_1_CREATE_DTO = CreateIdentifierDto.builder() + public final CreateIdentifierDto IDENTIFIER_1_CREATE_DTO = CreateIdentifierDto.builder() .databaseId(DATABASE_1_ID) .type(IDENTIFIER_1_TYPE_DTO) .publicationYear(IDENTIFIER_1_PUBLICATION_YEAR) @@ -6254,7 +6157,7 @@ public abstract class BaseTest { .funders(new LinkedList<>(List.of(IDENTIFIER_1_FUNDER_1_CREATE_DTO))) .build(); - public static final CreateIdentifierDto IDENTIFIER_1_CREATE_WITH_DOI_DTO = CreateIdentifierDto.builder() + public final CreateIdentifierDto IDENTIFIER_1_CREATE_WITH_DOI_DTO = CreateIdentifierDto.builder() .databaseId(DATABASE_1_ID) .type(IDENTIFIER_1_TYPE_DTO) .doi(IDENTIFIER_1_DOI) @@ -6271,7 +6174,7 @@ public abstract class BaseTest { .funders(new LinkedList<>(List.of(IDENTIFIER_1_FUNDER_1_CREATE_DTO))) .build(); - public static final IdentifierSaveDto IDENTIFIER_1_SAVE_DTO = IdentifierSaveDto.builder() + public final IdentifierSaveDto IDENTIFIER_1_SAVE_DTO = IdentifierSaveDto.builder() .id(IDENTIFIER_1_ID) .databaseId(DATABASE_1_ID) .descriptions(new LinkedList<>(List.of(IDENTIFIER_1_DESCRIPTION_1_CREATE_DTO))) @@ -6286,7 +6189,7 @@ public abstract class BaseTest { .licenses(new LinkedList<>(List.of(LICENSE_1_DTO))) .build(); - public static final IdentifierSaveDto IDENTIFIER_1_SAVE_MODIFY_DTO = IdentifierSaveDto.builder() + public final IdentifierSaveDto IDENTIFIER_1_SAVE_MODIFY_DTO = IdentifierSaveDto.builder() .id(IDENTIFIER_1_ID) .databaseId(DATABASE_1_ID) .descriptions(new LinkedList<>(List.of())) // <<< @@ -6301,84 +6204,83 @@ public abstract class BaseTest { .licenses(new LinkedList<>(List.of())) // <<< .build(); - public static final UUID IDENTIFIER_5_ID = UUID.fromString("e05bb4c9-ed26-48c9-bd91-5c48a93a04bd"); - public static final String IDENTIFIER_5_DOI = "10.12345/13/50BBFCFE08A12"; - public static final Instant IDENTIFIER_5_CREATED = Instant.ofEpochSecond(1641588352L); - public static final Instant IDENTIFIER_5_MODIFIED = Instant.ofEpochSecond(1541588352L); - public static final Instant IDENTIFIER_5_EXECUTION = Instant.ofEpochSecond(1541588352L); - public static final Integer IDENTIFIER_5_PUBLICATION_DAY = 14; - public static final Integer IDENTIFIER_5_PUBLICATION_MONTH = 7; - public static final Integer IDENTIFIER_5_PUBLICATION_YEAR = 2022; - public static final String IDENTIFIER_5_QUERY_HASH = QUERY_2_QUERY_HASH; - public static final String IDENTIFIER_5_RESULT_HASH = QUERY_2_RESULT_HASH; - public static final String IDENTIFIER_5_QUERY = QUERY_2_STATEMENT; - public static final String IDENTIFIER_5_NORMALIZED = QUERY_2_STATEMENT; - public static final Long IDENTIFIER_5_RESULT_NUMBER = QUERY_2_RESULT_NUMBER; - public static final String IDENTIFIER_5_PUBLISHER = "Australian Government"; - public static final IdentifierType IDENTIFIER_5_TYPE = IdentifierType.SUBSET; - public static final IdentifierTypeDto IDENTIFIER_5_TYPE_DTO = IdentifierTypeDto.SUBSET; - public static final IdentifierStatusType IDENTIFIER_5_STATUS_TYPE = IdentifierStatusType.DRAFT; - public static final IdentifierStatusTypeDto IDENTIFIER_5_STATUS_TYPE_DTO = IdentifierStatusTypeDto.DRAFT; - public static final UUID IDENTIFIER_5_CREATED_BY = USER_2_ID; - - public static final UUID IDENTIFIER_5_TITLE_1_ID = UUID.fromString("1a0ae9c2-61c6-44f8-b886-26a4f4dabc52"); - public static final String IDENTIFIER_5_TITLE_1_TITLE = "Australische Wetterdaten"; - public static final LanguageType IDENTIFIER_5_TITLE_1_LANG = LanguageType.DE; - public static final LanguageTypeDto IDENTIFIER_5_TITLE_1_LANG_DTO = LanguageTypeDto.DE; - public static final TitleType IDENTIFIER_5_TITLE_1_TYPE = TitleType.SUBTITLE; - public static final TitleTypeDto IDENTIFIER_5_TITLE_1_TYPE_DTO = TitleTypeDto.SUBTITLE; - - public static final IdentifierTitle IDENTIFIER_5_TITLE_1 = IdentifierTitle.builder() + public final static UUID IDENTIFIER_5_ID = UUID.fromString("e05bb4c9-ed26-48c9-bd91-5c48a93a04bd"); + public final static String IDENTIFIER_5_DOI = "10.12345/13/50BBFCFE08A12"; + public final static Instant IDENTIFIER_5_CREATED = Instant.ofEpochSecond(1641588352L); + public final static Instant IDENTIFIER_5_MODIFIED = Instant.ofEpochSecond(1541588352L); + public final static Instant IDENTIFIER_5_EXECUTION = Instant.ofEpochSecond(1541588352L); + public final static Integer IDENTIFIER_5_PUBLICATION_DAY = 14; + public final static Integer IDENTIFIER_5_PUBLICATION_MONTH = 7; + public final static Integer IDENTIFIER_5_PUBLICATION_YEAR = 2022; + public final static String IDENTIFIER_5_QUERY_HASH = QUERY_2_QUERY_HASH; + public final static String IDENTIFIER_5_RESULT_HASH = QUERY_2_RESULT_HASH; + public final static String IDENTIFIER_5_QUERY = QUERY_2_STATEMENT; + public final static String IDENTIFIER_5_NORMALIZED = QUERY_2_STATEMENT; + public final static Long IDENTIFIER_5_RESULT_NUMBER = QUERY_2_RESULT_NUMBER; + public final static String IDENTIFIER_5_PUBLISHER = "Australian Government"; + public final static IdentifierType IDENTIFIER_5_TYPE = IdentifierType.SUBSET; + public final static IdentifierTypeDto IDENTIFIER_5_TYPE_DTO = IdentifierTypeDto.SUBSET; + public final static IdentifierStatusType IDENTIFIER_5_STATUS_TYPE = IdentifierStatusType.DRAFT; + public final static IdentifierStatusTypeDto IDENTIFIER_5_STATUS_TYPE_DTO = IdentifierStatusTypeDto.DRAFT; + + public final static UUID IDENTIFIER_5_TITLE_1_ID = UUID.fromString("1a0ae9c2-61c6-44f8-b886-26a4f4dabc52"); + public final static String IDENTIFIER_5_TITLE_1_TITLE = "Australische Wetterdaten"; + public final static LanguageType IDENTIFIER_5_TITLE_1_LANG = LanguageType.DE; + public final static LanguageTypeDto IDENTIFIER_5_TITLE_1_LANG_DTO = LanguageTypeDto.DE; + public final static TitleType IDENTIFIER_5_TITLE_1_TYPE = TitleType.SUBTITLE; + public final static TitleTypeDto IDENTIFIER_5_TITLE_1_TYPE_DTO = TitleTypeDto.SUBTITLE; + + public final IdentifierTitle IDENTIFIER_5_TITLE_1 = IdentifierTitle.builder() .id(IDENTIFIER_5_TITLE_1_ID) .title(IDENTIFIER_5_TITLE_1_TITLE) .language(IDENTIFIER_5_TITLE_1_LANG) .titleType(IDENTIFIER_5_TITLE_1_TYPE) .build(); - public static final IdentifierTitleDto IDENTIFIER_5_TITLE_1_DTO = IdentifierTitleDto.builder() + public final IdentifierTitleDto IDENTIFIER_5_TITLE_1_DTO = IdentifierTitleDto.builder() .id(IDENTIFIER_5_TITLE_1_ID) .title(IDENTIFIER_5_TITLE_1_TITLE) .language(IDENTIFIER_5_TITLE_1_LANG_DTO) .titleType(IDENTIFIER_5_TITLE_1_TYPE_DTO) .build(); - public static final SaveIdentifierTitleDto IDENTIFIER_5_TITLE_1_CREATE_DTO = SaveIdentifierTitleDto.builder() + public final SaveIdentifierTitleDto IDENTIFIER_5_TITLE_1_CREATE_DTO = SaveIdentifierTitleDto.builder() .title(IDENTIFIER_5_TITLE_1_TITLE) .language(IDENTIFIER_5_TITLE_1_LANG_DTO) .titleType(IDENTIFIER_5_TITLE_1_TYPE_DTO) .build(); - public static final UUID IDENTIFIER_5_DESCRIPTION_1_ID = UUID.fromString("ab49bdca-f373-4823-9947-2a0cbfa88350"); - public static final String IDENTIFIER_5_DESCRIPTION_1_DESCRIPTION = "Alle Wetterdaten in Australien"; - public static final LanguageType IDENTIFIER_5_DESCRIPTION_1_LANG = LanguageType.DE; - public static final LanguageTypeDto IDENTIFIER_5_DESCRIPTION_1_LANG_DTO = LanguageTypeDto.DE; - public static final DescriptionType IDENTIFIER_5_DESCRIPTION_1_TYPE = DescriptionType.ABSTRACT; - public static final DescriptionTypeDto IDENTIFIER_5_DESCRIPTION_1_TYPE_DTO = DescriptionTypeDto.ABSTRACT; + public final static UUID IDENTIFIER_5_DESCRIPTION_1_ID = UUID.fromString("ab49bdca-f373-4823-9947-2a0cbfa88350"); + public final static String IDENTIFIER_5_DESCRIPTION_1_DESCRIPTION = "Alle Wetterdaten in Australien"; + public final static LanguageType IDENTIFIER_5_DESCRIPTION_1_LANG = LanguageType.DE; + public final static LanguageTypeDto IDENTIFIER_5_DESCRIPTION_1_LANG_DTO = LanguageTypeDto.DE; + public final static DescriptionType IDENTIFIER_5_DESCRIPTION_1_TYPE = DescriptionType.ABSTRACT; + public final static DescriptionTypeDto IDENTIFIER_5_DESCRIPTION_1_TYPE_DTO = DescriptionTypeDto.ABSTRACT; - public static final IdentifierDescription IDENTIFIER_5_DESCRIPTION_1 = IdentifierDescription.builder() + public final IdentifierDescription IDENTIFIER_5_DESCRIPTION_1 = IdentifierDescription.builder() .id(IDENTIFIER_5_DESCRIPTION_1_ID) .description(IDENTIFIER_5_DESCRIPTION_1_DESCRIPTION) .language(IDENTIFIER_5_DESCRIPTION_1_LANG) .descriptionType(IDENTIFIER_5_DESCRIPTION_1_TYPE) .build(); - public static final IdentifierDescriptionDto IDENTIFIER_5_DESCRIPTION_1_DTO = IdentifierDescriptionDto.builder() + public final IdentifierDescriptionDto IDENTIFIER_5_DESCRIPTION_1_DTO = IdentifierDescriptionDto.builder() .id(IDENTIFIER_5_DESCRIPTION_1_ID) .description(IDENTIFIER_5_DESCRIPTION_1_DESCRIPTION) .language(IDENTIFIER_5_DESCRIPTION_1_LANG_DTO) .descriptionType(IDENTIFIER_5_DESCRIPTION_1_TYPE_DTO) .build(); - public static final SaveIdentifierDescriptionDto IDENTIFIER_5_DESCRIPTION_1_CREATE_DTO = SaveIdentifierDescriptionDto.builder() + public final SaveIdentifierDescriptionDto IDENTIFIER_5_DESCRIPTION_1_CREATE_DTO = SaveIdentifierDescriptionDto.builder() .id(null) .description(IDENTIFIER_5_DESCRIPTION_1_DESCRIPTION) .language(IDENTIFIER_5_DESCRIPTION_1_LANG_DTO) .descriptionType(IDENTIFIER_5_DESCRIPTION_1_TYPE_DTO) .build(); - public static final UUID IDENTIFIER_5_CREATOR_1_ID = UUID.fromString("6844b684-93e4-47d2-a615-5939127fdafe"); + public final static UUID IDENTIFIER_5_CREATOR_1_ID = UUID.fromString("6844b684-93e4-47d2-a615-5939127fdafe"); - public static final Creator IDENTIFIER_5_CREATOR_1 = Creator.builder() + public final Creator IDENTIFIER_5_CREATOR_1 = Creator.builder() .id(IDENTIFIER_5_CREATOR_1_ID) .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) @@ -6391,7 +6293,7 @@ public abstract class BaseTest { .affiliationIdentifierSchemeUri(CREATOR_1_AFFIL_URI) .build(); - public static final CreatorDto IDENTIFIER_5_CREATOR_1_DTO = CreatorDto.builder() + public final CreatorDto IDENTIFIER_5_CREATOR_1_DTO = CreatorDto.builder() .id(IDENTIFIER_5_CREATOR_1_ID) .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) @@ -6404,7 +6306,7 @@ public abstract class BaseTest { .affiliationIdentifierSchemeUri(CREATOR_1_AFFIL_URI) .build(); - public static final SaveIdentifierCreatorDto IDENTIFIER_5_CREATOR_1_CREATE_DTO = SaveIdentifierCreatorDto.builder() + public final SaveIdentifierCreatorDto IDENTIFIER_5_CREATOR_1_CREATE_DTO = SaveIdentifierCreatorDto.builder() .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) .creatorName(CREATOR_1_NAME) @@ -6413,7 +6315,7 @@ public abstract class BaseTest { .affiliation(CREATOR_1_AFFIL) .build(); - public static final SaveIdentifierCreatorDto IDENTIFIER_5_CREATOR_1_MODIFY_DTO = SaveIdentifierCreatorDto.builder() + public final SaveIdentifierCreatorDto IDENTIFIER_5_CREATOR_1_MODIFY_DTO = SaveIdentifierCreatorDto.builder() .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) .creatorName(CREATOR_1_NAME) @@ -6422,9 +6324,9 @@ public abstract class BaseTest { .affiliation(CREATOR_1_AFFIL) .build(); - public static final UUID IDENTIFIER_5_CREATOR_2_ID = UUID.fromString("14943ad6-a935-49f5-b07e-f9eb789b8604"); + public final static UUID IDENTIFIER_5_CREATOR_2_ID = UUID.fromString("14943ad6-a935-49f5-b07e-f9eb789b8604"); - public static final Creator IDENTIFIER_5_CREATOR_2 = Creator.builder() + public final Creator IDENTIFIER_5_CREATOR_2 = Creator.builder() .id(IDENTIFIER_5_CREATOR_2_ID) .firstname(CREATOR_2_FIRSTNAME) .lastname(CREATOR_2_LASTNAME) @@ -6434,7 +6336,7 @@ public abstract class BaseTest { .affiliation(CREATOR_2_AFFIL) .build(); - public static final CreatorDto IDENTIFIER_5_CREATOR_2_DTO = CreatorDto.builder() + public final CreatorDto IDENTIFIER_5_CREATOR_2_DTO = CreatorDto.builder() .id(IDENTIFIER_5_CREATOR_2_ID) .firstname(CREATOR_2_FIRSTNAME) .lastname(CREATOR_2_LASTNAME) @@ -6444,7 +6346,7 @@ public abstract class BaseTest { .affiliation(CREATOR_2_AFFIL) .build(); - public static final SaveIdentifierCreatorDto IDENTIFIER_5_CREATOR_2_CREATE_DTO = SaveIdentifierCreatorDto.builder() + public final SaveIdentifierCreatorDto IDENTIFIER_5_CREATOR_2_CREATE_DTO = SaveIdentifierCreatorDto.builder() .firstname(CREATOR_2_FIRSTNAME) .lastname(CREATOR_2_LASTNAME) .creatorName(CREATOR_2_NAME) @@ -6453,7 +6355,7 @@ public abstract class BaseTest { .affiliation(CREATOR_2_AFFIL) .build(); - public static final SaveIdentifierCreatorDto IDENTIFIER_5_CREATOR_2_MODIFY_DTO = SaveIdentifierCreatorDto.builder() + public final SaveIdentifierCreatorDto IDENTIFIER_5_CREATOR_2_MODIFY_DTO = SaveIdentifierCreatorDto.builder() .firstname(CREATOR_2_FIRSTNAME) .lastname(CREATOR_2_LASTNAME) .creatorName(CREATOR_2_NAME) @@ -6462,7 +6364,7 @@ public abstract class BaseTest { .affiliation(CREATOR_2_AFFIL) .build(); - public static final Identifier IDENTIFIER_5 = Identifier.builder() + public final Identifier IDENTIFIER_5 = Identifier.builder() .id(IDENTIFIER_5_ID) .queryId(QUERY_2_ID) .database(null) /* DATABASE_2 */ @@ -6488,7 +6390,7 @@ public abstract class BaseTest { .status(IDENTIFIER_5_STATUS_TYPE) .build(); - public static final IdentifierDto IDENTIFIER_5_DTO = IdentifierDto.builder() + public final IdentifierDto IDENTIFIER_5_DTO = IdentifierDto.builder() .id(IDENTIFIER_5_ID) .databaseId(DATABASE_2_ID) .queryId(QUERY_2_ID) @@ -6496,6 +6398,7 @@ public abstract class BaseTest { .self("/api/identifier/" + IDENTIFIER_5_ID) .selfHtml("/pid/" + IDENTIFIER_5_ID) .data("/api/database/" + DATABASE_2_ID + "/subset/" + QUERY_2_ID + "/data") + .dashboardHtml("/d/" + DATABASE_2_DASHBOARD_UID) .build()) .descriptions(new LinkedList<>(List.of(IDENTIFIER_5_DESCRIPTION_1_DTO))) .titles(new LinkedList<>(List.of(IDENTIFIER_5_TITLE_1_DTO))) @@ -6516,7 +6419,7 @@ public abstract class BaseTest { .creators(new LinkedList<>(List.of(IDENTIFIER_5_CREATOR_1_DTO, IDENTIFIER_5_CREATOR_2_DTO))) .build(); - public static final IdentifierBriefDto IDENTIFIER_5_BRIEF_DTO = IdentifierBriefDto.builder() + public final IdentifierBriefDto IDENTIFIER_5_BRIEF_DTO = IdentifierBriefDto.builder() .id(IDENTIFIER_5_ID) .databaseId(DATABASE_2_ID) .queryId(QUERY_2_ID) @@ -6527,14 +6430,14 @@ public abstract class BaseTest { .type(IDENTIFIER_5_TYPE_DTO) .build(); - public static final UUID RELATED_IDENTIFIER_5_ID = UUID.fromString("26545877-574d-44fa-819d-d9d9a9750b38"); - public static final String RELATED_IDENTIFIER_5_VALUE = "10.5281/zenodo.6637333"; - public static final RelatedType RELATED_IDENTIFIER_5_TYPE = RelatedType.DOI; - public static final RelatedTypeDto RELATED_IDENTIFIER_5_TYPE_DTO = RelatedTypeDto.DOI; - public static final RelationType RELATED_IDENTIFIER_5_RELATION_TYPE = RelationType.CITES; - public static final RelationTypeDto RELATED_IDENTIFIER_5_RELATION_TYPE_DTO = RelationTypeDto.CITES; + public final static UUID RELATED_IDENTIFIER_5_ID = UUID.fromString("26545877-574d-44fa-819d-d9d9a9750b38"); + public final static String RELATED_IDENTIFIER_5_VALUE = "10.5281/zenodo.6637333"; + public final RelatedType RELATED_IDENTIFIER_5_TYPE = RelatedType.DOI; + public final RelatedTypeDto RELATED_IDENTIFIER_5_TYPE_DTO = RelatedTypeDto.DOI; + public final RelationType RELATED_IDENTIFIER_5_RELATION_TYPE = RelationType.CITES; + public final RelationTypeDto RELATED_IDENTIFIER_5_RELATION_TYPE_DTO = RelationTypeDto.CITES; - public static final RelatedIdentifier IDENTIFIER_1_RELATED_IDENTIFIER_1 = RelatedIdentifier.builder() + public final RelatedIdentifier IDENTIFIER_1_RELATED_IDENTIFIER_1 = RelatedIdentifier.builder() .id(RELATED_IDENTIFIER_5_ID) .identifier(IDENTIFIER_5) .type(RELATED_IDENTIFIER_5_TYPE) @@ -6542,19 +6445,19 @@ public abstract class BaseTest { .value(RELATED_IDENTIFIER_5_VALUE) .build(); - public static final SaveRelatedIdentifierDto IDENTIFIER_1_RELATED_IDENTIFIER_5_CREATE_DTO = SaveRelatedIdentifierDto.builder() + public final SaveRelatedIdentifierDto IDENTIFIER_1_RELATED_IDENTIFIER_5_CREATE_DTO = SaveRelatedIdentifierDto.builder() .value(RELATED_IDENTIFIER_5_VALUE) .type(RELATED_IDENTIFIER_5_TYPE_DTO) .relation(RELATED_IDENTIFIER_5_RELATION_TYPE_DTO) .build(); - public static final CreateIdentifierDto IDENTIFIER_5_CREATE_DTO = CreateIdentifierDto.builder() + public final CreateIdentifierDto IDENTIFIER_5_CREATE_DTO = CreateIdentifierDto.builder() .databaseId(DATABASE_2_ID) .publicationYear(IDENTIFIER_5_PUBLICATION_YEAR) .publisher(IDENTIFIER_5_PUBLISHER) .build(); - public static final IdentifierSaveDto IDENTIFIER_5_SAVE_DTO = IdentifierSaveDto.builder() + public final IdentifierSaveDto IDENTIFIER_5_SAVE_DTO = IdentifierSaveDto.builder() .id(IDENTIFIER_5_ID) .queryId(QUERY_2_ID) .databaseId(DATABASE_2_ID) @@ -6570,87 +6473,87 @@ public abstract class BaseTest { .type(IDENTIFIER_5_TYPE_DTO) .build(); - public static final UUID IDENTIFIER_6_ID = UUID.fromString("a244204d-9671-42a0-be07-9b14402238fd"); - public static final String IDENTIFIER_6_DOI = null; - public static final Instant IDENTIFIER_6_CREATED = Instant.ofEpochSecond(1641588352L); - public static final Instant IDENTIFIER_6_MODIFIED = Instant.ofEpochSecond(1541588352L); - public static final Instant IDENTIFIER_6_EXECUTION = Instant.ofEpochSecond(1541588352L); - public static final Integer IDENTIFIER_6_PUBLICATION_DAY = 14; - public static final Integer IDENTIFIER_6_PUBLICATION_MONTH = 7; - public static final Integer IDENTIFIER_6_PUBLICATION_YEAR = 2022; - public static final String IDENTIFIER_6_QUERY_HASH = QUERY_3_QUERY_HASH; - public static final String IDENTIFIER_6_RESULT_HASH = QUERY_3_RESULT_HASH; - public static final String IDENTIFIER_6_QUERY = QUERY_3_STATEMENT; - public static final String IDENTIFIER_6_NORMALIZED = QUERY_3_STATEMENT; - public static final Long IDENTIFIER_6_RESULT_NUMBER = QUERY_3_RESULT_NUMBER; - public static final String IDENTIFIER_6_PUBLISHER = "Norwegian Government"; - public static final IdentifierType IDENTIFIER_6_TYPE = IdentifierType.SUBSET; - public static final IdentifierTypeDto IDENTIFIER_6_TYPE_DTO = IdentifierTypeDto.SUBSET; - public static final IdentifierStatusType IDENTIFIER_6_STATUS_TYPE = IdentifierStatusType.PUBLISHED; - public static final IdentifierStatusTypeDto IDENTIFIER_6_STATUS_TYPE_DTO = IdentifierStatusTypeDto.PUBLISHED; - - public static final UUID IDENTIFIER_6_TITLE_1_ID = UUID.fromString("0449011c-1490-4c8e-b46c-c1f862126aea"); - public static final String IDENTIFIER_6_TITLE_1_TITLE = "Norwegian weather data"; - public static final String IDENTIFIER_6_TITLE_1_TITLE_MODIFY = "Norwegian weather some data"; - public static final LanguageType IDENTIFIER_6_TITLE_1_LANG = LanguageType.EN; - public static final LanguageTypeDto IDENTIFIER_6_TITLE_1_LANG_DTO = LanguageTypeDto.EN; - - public static final IdentifierTitle IDENTIFIER_6_TITLE_1 = IdentifierTitle.builder() + public final static UUID IDENTIFIER_6_ID = UUID.fromString("a244204d-9671-42a0-be07-9b14402238fd"); + public final static String IDENTIFIER_6_DOI = null; + public final static Instant IDENTIFIER_6_CREATED = Instant.ofEpochSecond(1641588352L); + public final static Instant IDENTIFIER_6_MODIFIED = Instant.ofEpochSecond(1541588352L); + public final static Instant IDENTIFIER_6_EXECUTION = Instant.ofEpochSecond(1541588352L); + public final static Integer IDENTIFIER_6_PUBLICATION_DAY = 14; + public final static Integer IDENTIFIER_6_PUBLICATION_MONTH = 7; + public final static Integer IDENTIFIER_6_PUBLICATION_YEAR = 2022; + public final static String IDENTIFIER_6_QUERY_HASH = QUERY_3_QUERY_HASH; + public final static String IDENTIFIER_6_RESULT_HASH = QUERY_3_RESULT_HASH; + public final static String IDENTIFIER_6_QUERY = QUERY_3_STATEMENT; + public final static String IDENTIFIER_6_NORMALIZED = QUERY_3_STATEMENT; + public final static Long IDENTIFIER_6_RESULT_NUMBER = QUERY_3_RESULT_NUMBER; + public final static String IDENTIFIER_6_PUBLISHER = "Norwegian Government"; + public final static IdentifierType IDENTIFIER_6_TYPE = IdentifierType.SUBSET; + public final static IdentifierTypeDto IDENTIFIER_6_TYPE_DTO = IdentifierTypeDto.SUBSET; + public final static IdentifierStatusType IDENTIFIER_6_STATUS_TYPE = IdentifierStatusType.PUBLISHED; + public final static IdentifierStatusTypeDto IDENTIFIER_6_STATUS_TYPE_DTO = IdentifierStatusTypeDto.PUBLISHED; + + public final static UUID IDENTIFIER_6_TITLE_1_ID = UUID.fromString("0449011c-1490-4c8e-b46c-c1f862126aea"); + public final static String IDENTIFIER_6_TITLE_1_TITLE = "Norwegian weather data"; + public final static String IDENTIFIER_6_TITLE_1_TITLE_MODIFY = "Norwegian weather some data"; + public final static LanguageType IDENTIFIER_6_TITLE_1_LANG = LanguageType.EN; + public final static LanguageTypeDto IDENTIFIER_6_TITLE_1_LANG_DTO = LanguageTypeDto.EN; + + public final IdentifierTitle IDENTIFIER_6_TITLE_1 = IdentifierTitle.builder() .id(IDENTIFIER_6_TITLE_1_ID) .title(IDENTIFIER_6_TITLE_1_TITLE) .language(IDENTIFIER_6_TITLE_1_LANG) .build(); - public static final IdentifierTitleDto IDENTIFIER_6_TITLE_1_DTO = IdentifierTitleDto.builder() + public final IdentifierTitleDto IDENTIFIER_6_TITLE_1_DTO = IdentifierTitleDto.builder() .id(IDENTIFIER_6_TITLE_1_ID) .title(IDENTIFIER_6_TITLE_1_TITLE) .language(IDENTIFIER_6_TITLE_1_LANG_DTO) .build(); - public static final IdentifierTitleDto IDENTIFIER_6_TITLE_1_DTO_MODIFY = IdentifierTitleDto.builder() + public final IdentifierTitleDto IDENTIFIER_6_TITLE_1_DTO_MODIFY = IdentifierTitleDto.builder() .id(IDENTIFIER_6_TITLE_1_ID) .title(IDENTIFIER_6_TITLE_1_TITLE_MODIFY) .language(IDENTIFIER_6_TITLE_1_LANG_DTO) .build(); - public static final SaveIdentifierTitleDto IDENTIFIER_6_TITLE_1_CREATE_DTO = SaveIdentifierTitleDto.builder() + public final SaveIdentifierTitleDto IDENTIFIER_6_TITLE_1_CREATE_DTO = SaveIdentifierTitleDto.builder() .title(IDENTIFIER_6_TITLE_1_TITLE_MODIFY) .language(IDENTIFIER_6_TITLE_1_LANG_DTO) .build(); - public static final UUID IDENTIFIER_6_DESCRIPTION_1_ID = UUID.fromString("aac03bbd-27e6-419d-8118-f996d594f00f"); - public static final String IDENTIFIER_6_DESCRIPTION_1_DESCRIPTION = "Selecting all from the weather Norwegian table"; - public static final String IDENTIFIER_6_DESCRIPTION_1_DESCRIPTION_MODIFY = "Selecting some from the weather Norwegian table"; - public static final LanguageType IDENTIFIER_6_DESCRIPTION_1_LANG = LanguageType.EN; - public static final LanguageTypeDto IDENTIFIER_6_DESCRIPTION_1_LANG_DTO = LanguageTypeDto.EN; + public final static UUID IDENTIFIER_6_DESCRIPTION_1_ID = UUID.fromString("aac03bbd-27e6-419d-8118-f996d594f00f"); + public final static String IDENTIFIER_6_DESCRIPTION_1_DESCRIPTION = "Selecting all from the weather Norwegian table"; + public final static String IDENTIFIER_6_DESCRIPTION_1_DESCRIPTION_MODIFY = "Selecting some from the weather Norwegian table"; + public final static LanguageType IDENTIFIER_6_DESCRIPTION_1_LANG = LanguageType.EN; + public final static LanguageTypeDto IDENTIFIER_6_DESCRIPTION_1_LANG_DTO = LanguageTypeDto.EN; - public static final IdentifierDescription IDENTIFIER_6_DESCRIPTION_1 = IdentifierDescription.builder() + public final IdentifierDescription IDENTIFIER_6_DESCRIPTION_1 = IdentifierDescription.builder() .id(IDENTIFIER_6_DESCRIPTION_1_ID) .description(IDENTIFIER_6_DESCRIPTION_1_DESCRIPTION) .language(IDENTIFIER_6_DESCRIPTION_1_LANG) .build(); - public static final IdentifierDescriptionDto IDENTIFIER_6_DESCRIPTION_1_DTO = IdentifierDescriptionDto.builder() + public final IdentifierDescriptionDto IDENTIFIER_6_DESCRIPTION_1_DTO = IdentifierDescriptionDto.builder() .id(IDENTIFIER_6_DESCRIPTION_1_ID) .description(IDENTIFIER_6_DESCRIPTION_1_DESCRIPTION) .language(IDENTIFIER_6_DESCRIPTION_1_LANG_DTO) .build(); - public static final IdentifierDescriptionDto IDENTIFIER_6_DESCRIPTION_1_DTO_MODIFY = IdentifierDescriptionDto.builder() + public final IdentifierDescriptionDto IDENTIFIER_6_DESCRIPTION_1_DTO_MODIFY = IdentifierDescriptionDto.builder() .id(IDENTIFIER_6_DESCRIPTION_1_ID) .description(IDENTIFIER_6_DESCRIPTION_1_DESCRIPTION_MODIFY) .language(IDENTIFIER_6_DESCRIPTION_1_LANG_DTO) .build(); - public static final SaveIdentifierDescriptionDto IDENTIFIER_6_DESCRIPTION_1_CREATE_DTO = SaveIdentifierDescriptionDto.builder() + public final SaveIdentifierDescriptionDto IDENTIFIER_6_DESCRIPTION_1_CREATE_DTO = SaveIdentifierDescriptionDto.builder() .id(null) .description(IDENTIFIER_6_DESCRIPTION_1_DESCRIPTION_MODIFY) .language(IDENTIFIER_6_DESCRIPTION_1_LANG_DTO) .build(); - private final static UUID IDENTIFIER_6_CREATOR_1_ID = UUID.fromString("f8a52dca-8aec-46c1-b0e1-603dbe6a1a65"); + public final static UUID IDENTIFIER_6_CREATOR_1_ID = UUID.fromString("f8a52dca-8aec-46c1-b0e1-603dbe6a1a65"); - public static final Creator IDENTIFIER_6_CREATOR_1 = Creator.builder() + public final Creator IDENTIFIER_6_CREATOR_1 = Creator.builder() .id(IDENTIFIER_6_CREATOR_1_ID) .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) @@ -6663,7 +6566,7 @@ public abstract class BaseTest { .affiliationIdentifierSchemeUri(CREATOR_1_AFFIL_URI) .build(); - public static final CreatorDto IDENTIFIER_6_CREATOR_1_DTO = CreatorDto.builder() + public final CreatorDto IDENTIFIER_6_CREATOR_1_DTO = CreatorDto.builder() .id(IDENTIFIER_6_CREATOR_1_ID) .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) @@ -6676,7 +6579,7 @@ public abstract class BaseTest { .affiliationIdentifierSchemeUri(CREATOR_1_AFFIL_URI) .build(); - public static final SaveIdentifierCreatorDto IDENTIFIER_6_CREATOR_1_CREATE_DTO = SaveIdentifierCreatorDto.builder() + public final SaveIdentifierCreatorDto IDENTIFIER_6_CREATOR_1_CREATE_DTO = SaveIdentifierCreatorDto.builder() .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) .creatorName(CREATOR_1_NAME) @@ -6687,7 +6590,7 @@ public abstract class BaseTest { .affiliationIdentifierScheme(CREATOR_1_AFFIL_TYPE_DTO) .build(); - public static final SaveIdentifierCreatorDto IDENTIFIER_6_CREATOR_1_MODIFY_DTO = SaveIdentifierCreatorDto.builder() + public final SaveIdentifierCreatorDto IDENTIFIER_6_CREATOR_1_MODIFY_DTO = SaveIdentifierCreatorDto.builder() .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) .creatorName(CREATOR_1_NAME) @@ -6698,9 +6601,9 @@ public abstract class BaseTest { .affiliationIdentifierScheme(CREATOR_1_AFFIL_TYPE_DTO) .build(); - private final static UUID IDENTIFIER_6_CREATOR_2_ID = UUID.fromString("eeae78cb-75a1-42e2-b608-7082e5fbecc6"); + public final static UUID IDENTIFIER_6_CREATOR_2_ID = UUID.fromString("eeae78cb-75a1-42e2-b608-7082e5fbecc6"); - public static final Creator IDENTIFIER_6_CREATOR_2 = Creator.builder() + public final Creator IDENTIFIER_6_CREATOR_2 = Creator.builder() .id(IDENTIFIER_6_CREATOR_2_ID) .firstname(CREATOR_2_FIRSTNAME) .lastname(CREATOR_2_LASTNAME) @@ -6710,7 +6613,7 @@ public abstract class BaseTest { .affiliation(CREATOR_2_AFFIL) .build(); - public static final CreatorDto IDENTIFIER_6_CREATOR_2_DTO = CreatorDto.builder() + public final CreatorDto IDENTIFIER_6_CREATOR_2_DTO = CreatorDto.builder() .id(IDENTIFIER_6_CREATOR_2_ID) .firstname(CREATOR_2_FIRSTNAME) .lastname(CREATOR_2_LASTNAME) @@ -6720,9 +6623,9 @@ public abstract class BaseTest { .affiliation(CREATOR_2_AFFIL) .build(); - private final static UUID IDENTIFIER_6_CREATOR_3_ID = UUID.fromString("700058f1-6314-4cd1-9c0c-62e75c8f422b"); + public final static UUID IDENTIFIER_6_CREATOR_3_ID = UUID.fromString("700058f1-6314-4cd1-9c0c-62e75c8f422b"); - public static final Creator IDENTIFIER_6_CREATOR_3 = Creator.builder() + public final Creator IDENTIFIER_6_CREATOR_3 = Creator.builder() .id(IDENTIFIER_6_CREATOR_3_ID) .firstname(CREATOR_3_FIRSTNAME) .lastname(CREATOR_3_LASTNAME) @@ -6735,7 +6638,7 @@ public abstract class BaseTest { .affiliationIdentifierSchemeUri(CREATOR_3_AFFIL_URI) .build(); - public static final CreatorDto IDENTIFIER_6_CREATOR_3_DTO = CreatorDto.builder() + public final CreatorDto IDENTIFIER_6_CREATOR_3_DTO = CreatorDto.builder() .id(IDENTIFIER_6_CREATOR_3_ID) .firstname(CREATOR_3_FIRSTNAME) .lastname(CREATOR_3_LASTNAME) @@ -6748,7 +6651,7 @@ public abstract class BaseTest { .affiliationIdentifierSchemeUri(CREATOR_3_AFFIL_URI) .build(); - public static final Identifier IDENTIFIER_6 = Identifier.builder() + public final Identifier IDENTIFIER_6 = Identifier.builder() .id(IDENTIFIER_6_ID) .queryId(QUERY_3_ID) .descriptions(new LinkedList<>(List.of(IDENTIFIER_6_DESCRIPTION_1))) @@ -6774,7 +6677,7 @@ public abstract class BaseTest { .status(IDENTIFIER_6_STATUS_TYPE) .build(); - public static final IdentifierDto IDENTIFIER_6_DTO = IdentifierDto.builder() + public final IdentifierDto IDENTIFIER_6_DTO = IdentifierDto.builder() .id(IDENTIFIER_6_ID) .databaseId(DATABASE_3_ID) .queryId(QUERY_3_ID) @@ -6782,6 +6685,7 @@ public abstract class BaseTest { .self("/api/identifier/" + IDENTIFIER_6_ID) .selfHtml("/pid/" + IDENTIFIER_6_ID) .data("/api/database/" + DATABASE_3_ID + "/subset/" + QUERY_3_ID + "/data") + .dashboardHtml("/d/" + DATABASE_3_DASHBOARD_UID) .build()) .descriptions(new LinkedList<>(List.of(IDENTIFIER_6_DESCRIPTION_1_DTO))) .titles(new LinkedList<>(List.of(IDENTIFIER_6_TITLE_1_DTO))) @@ -6804,7 +6708,7 @@ public abstract class BaseTest { .build(); - public static final IdentifierBriefDto IDENTIFIER_6_BRIEF_DTO = IdentifierBriefDto.builder() + public final IdentifierBriefDto IDENTIFIER_6_BRIEF_DTO = IdentifierBriefDto.builder() .id(IDENTIFIER_6_ID) .databaseId(DATABASE_3_ID) .queryId(QUERY_3_ID) @@ -6816,13 +6720,13 @@ public abstract class BaseTest { .status(IDENTIFIER_6_STATUS_TYPE_DTO) .build(); - public static final CreateIdentifierDto IDENTIFIER_6_CREATE_DTO = CreateIdentifierDto.builder() + public final CreateIdentifierDto IDENTIFIER_6_CREATE_DTO = CreateIdentifierDto.builder() .databaseId(DATABASE_3_ID) .publicationYear(IDENTIFIER_6_PUBLICATION_YEAR) .publisher(IDENTIFIER_6_PUBLISHER) .build(); - public static final IdentifierSaveDto IDENTIFIER_6_SAVE_DTO = IdentifierSaveDto.builder() + public final IdentifierSaveDto IDENTIFIER_6_SAVE_DTO = IdentifierSaveDto.builder() .id(IDENTIFIER_6_ID) .databaseId(DATABASE_3_ID) .queryId(QUERY_3_ID) @@ -6837,22 +6741,22 @@ public abstract class BaseTest { .licenses(new LinkedList<>(List.of(LICENSE_1_DTO))) .build(); - public static final UUID IDENTIFIER_7_ID = UUID.fromString("b216ae00-a31d-4ecb-95fb-37eb4da3946f"); - public static final String IDENTIFIER_7_DOI = null; - public static final Instant IDENTIFIER_7_CREATED = Instant.ofEpochSecond(1641588352L); - public static final Instant IDENTIFIER_7_MODIFIED = Instant.ofEpochSecond(1541588352L); - public static final Instant IDENTIFIER_7_EXECUTION = Instant.ofEpochSecond(1541588352L); - public static final Integer IDENTIFIER_7_PUBLICATION_DAY = 14; - public static final Integer IDENTIFIER_7_PUBLICATION_MONTH = 7; - public static final Integer IDENTIFIER_7_PUBLICATION_YEAR = 2022; - public static final Long IDENTIFIER_7_RESULT_NUMBER = 2L; - public static final String IDENTIFIER_7_PUBLISHER = "Swedish Government"; - public static final IdentifierType IDENTIFIER_7_TYPE = IdentifierType.DATABASE; - public static final IdentifierTypeDto IDENTIFIER_7_TYPE_DTO = IdentifierTypeDto.DATABASE; - public static final IdentifierStatusType IDENTIFIER_7_STATUS_TYPE = IdentifierStatusType.DRAFT; - public static final IdentifierStatusTypeDto IDENTIFIER_7_STATUS_TYPE_DTO = IdentifierStatusTypeDto.DRAFT; - - public static final DataCiteBody<DataCiteDoi> IDENTIFIER_7_DATA_CITE = DataCiteBody.<DataCiteDoi>builder() + public final static UUID IDENTIFIER_7_ID = UUID.fromString("b216ae00-a31d-4ecb-95fb-37eb4da3946f"); + public final static String IDENTIFIER_7_DOI = null; + public final static Instant IDENTIFIER_7_CREATED = Instant.ofEpochSecond(1641588352L); + public final static Instant IDENTIFIER_7_MODIFIED = Instant.ofEpochSecond(1541588352L); + public final static Instant IDENTIFIER_7_EXECUTION = Instant.ofEpochSecond(1541588352L); + public final static Integer IDENTIFIER_7_PUBLICATION_DAY = 14; + public final static Integer IDENTIFIER_7_PUBLICATION_MONTH = 7; + public final static Integer IDENTIFIER_7_PUBLICATION_YEAR = 2022; + public final static Long IDENTIFIER_7_RESULT_NUMBER = 2L; + public final static String IDENTIFIER_7_PUBLISHER = "Swedish Government"; + public final static IdentifierType IDENTIFIER_7_TYPE = IdentifierType.DATABASE; + public final static IdentifierTypeDto IDENTIFIER_7_TYPE_DTO = IdentifierTypeDto.DATABASE; + public final static IdentifierStatusType IDENTIFIER_7_STATUS_TYPE = IdentifierStatusType.DRAFT; + public final static IdentifierStatusTypeDto IDENTIFIER_7_STATUS_TYPE_DTO = IdentifierStatusTypeDto.DRAFT; + + public final DataCiteBody<DataCiteDoi> IDENTIFIER_7_DATA_CITE = DataCiteBody.<DataCiteDoi>builder() .data(DataCiteData.<DataCiteDoi>builder() .type("dois") .attributes(DataCiteDoi.builder() @@ -6861,9 +6765,9 @@ public abstract class BaseTest { .build()) .build(); - private final static UUID IDENTIFIER_7_CREATOR_1_ID = UUID.fromString("b899c367-06c7-4f47-8aea-5f15061ee3ee"); + public final static UUID IDENTIFIER_7_CREATOR_1_ID = UUID.fromString("b899c367-06c7-4f47-8aea-5f15061ee3ee"); - public static final Creator IDENTIFIER_7_CREATOR_1 = Creator.builder() + public final Creator IDENTIFIER_7_CREATOR_1 = Creator.builder() .id(IDENTIFIER_7_CREATOR_1_ID) .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) @@ -6876,7 +6780,7 @@ public abstract class BaseTest { .affiliationIdentifierSchemeUri(CREATOR_1_AFFIL_URI) .build(); - public static final CreatorDto IDENTIFIER_7_CREATOR_1_DTO = CreatorDto.builder() + public final CreatorDto IDENTIFIER_7_CREATOR_1_DTO = CreatorDto.builder() .id(IDENTIFIER_7_CREATOR_1_ID) .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) @@ -6889,12 +6793,13 @@ public abstract class BaseTest { .affiliationIdentifierSchemeUri(CREATOR_1_AFFIL_URI) .build(); - public static final IdentifierDto IDENTIFIER_7_DTO = IdentifierDto.builder() + public final IdentifierDto IDENTIFIER_7_DTO = IdentifierDto.builder() .id(IDENTIFIER_7_ID) .databaseId(DATABASE_4_ID) .links(LinksDto.builder() .self("/api/identifier/" + IDENTIFIER_7_ID) .selfHtml("/pid/" + IDENTIFIER_7_ID) + .dashboardHtml("/d/" + DATABASE_4_DASHBOARD_UID) .build()) .descriptions(new LinkedList<>()) .titles(new LinkedList<>()) @@ -6914,7 +6819,7 @@ public abstract class BaseTest { .status(IDENTIFIER_7_STATUS_TYPE_DTO) .build(); - public static final SaveIdentifierCreatorDto IDENTIFIER_7_CREATOR_1_CREATE_DTO = SaveIdentifierCreatorDto.builder() + public final SaveIdentifierCreatorDto IDENTIFIER_7_CREATOR_1_CREATE_DTO = SaveIdentifierCreatorDto.builder() .firstname(CREATOR_1_FIRSTNAME) .lastname(CREATOR_1_LASTNAME) .creatorName(CREATOR_1_NAME) @@ -6924,13 +6829,13 @@ public abstract class BaseTest { .affiliationIdentifier(CREATOR_1_AFFIL_ROR) .build(); - public static final CreateIdentifierDto IDENTIFIER_7_CREATE_DTO = CreateIdentifierDto.builder() + public final CreateIdentifierDto IDENTIFIER_7_CREATE_DTO = CreateIdentifierDto.builder() .databaseId(DATABASE_4_ID) .publicationYear(IDENTIFIER_7_PUBLICATION_YEAR) .publisher(IDENTIFIER_7_PUBLISHER) .build(); - public static final IdentifierSaveDto IDENTIFIER_7_SAVE_DTO = IdentifierSaveDto.builder() + public final IdentifierSaveDto IDENTIFIER_7_SAVE_DTO = IdentifierSaveDto.builder() .id(IDENTIFIER_7_ID) .databaseId(DATABASE_4_ID) .descriptions(new LinkedList<>()) @@ -6945,27 +6850,26 @@ public abstract class BaseTest { .type(IDENTIFIER_7_TYPE_DTO) .build(); - public static final UUID IDENTIFIER_2_ID = UUID.fromString("fdb95f60-48e7-4e74-8122-d3c8d079c889"); - public static final String IDENTIFIER_2_DOI = null; - public static final Instant IDENTIFIER_2_CREATED = Instant.ofEpochSecond(1651588352L); - public static final Instant IDENTIFIER_2_MODIFIED = Instant.ofEpochSecond(1551588352L); - public static final Instant IDENTIFIER_2_EXECUTION = Instant.ofEpochSecond(1551588352L); - public static final Integer IDENTIFIER_2_PUBLICATION_DAY = 10; - public static final Integer IDENTIFIER_2_PUBLICATION_MONTH = 7; - public static final Integer IDENTIFIER_2_PUBLICATION_YEAR = 2023; - public static final String IDENTIFIER_2_QUERY_HASH = QUERY_1_QUERY_HASH; - public static final String IDENTIFIER_2_RESULT_HASH = QUERY_1_RESULT_HASH; - public static final String IDENTIFIER_2_QUERY = QUERY_1_STATEMENT; - public static final String IDENTIFIER_2_NORMALIZED = QUERY_1_STATEMENT; - public static final Long IDENTIFIER_2_RESULT_NUMBER = QUERY_1_RESULT_NUMBER; - public static final String IDENTIFIER_2_PUBLISHER = "Swedish Government"; - public static final IdentifierType IDENTIFIER_2_TYPE = IdentifierType.SUBSET; - public static final IdentifierTypeDto IDENTIFIER_2_TYPE_DTO = IdentifierTypeDto.SUBSET; - public static final IdentifierStatusType IDENTIFIER_2_STATUS_TYPE = IdentifierStatusType.PUBLISHED; - public static final IdentifierStatusTypeDto IDENTIFIER_2_STATUS_TYPE_DTO = IdentifierStatusTypeDto.PUBLISHED; - public static final UUID IDENTIFIER_2_CREATED_BY = USER_1_ID; - - public static final CreateIdentifierDto IDENTIFIER_2_CREATE_DTO = CreateIdentifierDto.builder() + public final static UUID IDENTIFIER_2_ID = UUID.fromString("fdb95f60-48e7-4e74-8122-d3c8d079c889"); + public final static String IDENTIFIER_2_DOI = null; + public final static Instant IDENTIFIER_2_CREATED = Instant.ofEpochSecond(1651588352L); + public final static Instant IDENTIFIER_2_MODIFIED = Instant.ofEpochSecond(1551588352L); + public final static Instant IDENTIFIER_2_EXECUTION = Instant.ofEpochSecond(1551588352L); + public final static Integer IDENTIFIER_2_PUBLICATION_DAY = 10; + public final static Integer IDENTIFIER_2_PUBLICATION_MONTH = 7; + public final static Integer IDENTIFIER_2_PUBLICATION_YEAR = 2023; + public final static String IDENTIFIER_2_QUERY_HASH = QUERY_1_QUERY_HASH; + public final static String IDENTIFIER_2_RESULT_HASH = QUERY_1_RESULT_HASH; + public final static String IDENTIFIER_2_QUERY = QUERY_1_STATEMENT; + public final static String IDENTIFIER_2_NORMALIZED = QUERY_1_STATEMENT; + public final static Long IDENTIFIER_2_RESULT_NUMBER = QUERY_1_RESULT_NUMBER; + public final static String IDENTIFIER_2_PUBLISHER = "Swedish Government"; + public final static IdentifierType IDENTIFIER_2_TYPE = IdentifierType.SUBSET; + public final static IdentifierTypeDto IDENTIFIER_2_TYPE_DTO = IdentifierTypeDto.SUBSET; + public final static IdentifierStatusType IDENTIFIER_2_STATUS_TYPE = IdentifierStatusType.PUBLISHED; + public final static IdentifierStatusTypeDto IDENTIFIER_2_STATUS_TYPE_DTO = IdentifierStatusTypeDto.PUBLISHED; + + public final CreateIdentifierDto IDENTIFIER_2_CREATE_DTO = CreateIdentifierDto.builder() .databaseId(DATABASE_1_ID) .queryId(QUERY_1_ID) .type(IDENTIFIER_2_TYPE_DTO) @@ -6973,7 +6877,7 @@ public abstract class BaseTest { .publisher(IDENTIFIER_2_PUBLISHER) .build(); - public static final Identifier IDENTIFIER_2 = Identifier.builder() + public final Identifier IDENTIFIER_2 = Identifier.builder() .id(IDENTIFIER_2_ID) .queryId(QUERY_1_ID) .descriptions(new LinkedList<>()) @@ -7000,7 +6904,7 @@ public abstract class BaseTest { .status(IDENTIFIER_2_STATUS_TYPE) .build(); - public static final IdentifierDto IDENTIFIER_2_DTO = IdentifierDto.builder() + public final IdentifierDto IDENTIFIER_2_DTO = IdentifierDto.builder() .id(IDENTIFIER_2_ID) .queryId(QUERY_1_ID) .databaseId(DATABASE_1_ID) @@ -7029,7 +6933,7 @@ public abstract class BaseTest { .status(IDENTIFIER_2_STATUS_TYPE_DTO) .build(); - public static final IdentifierBriefDto IDENTIFIER_2_BRIEF_DTO = IdentifierBriefDto.builder() + public final IdentifierBriefDto IDENTIFIER_2_BRIEF_DTO = IdentifierBriefDto.builder() .id(IDENTIFIER_2_ID) .queryId(QUERY_1_ID) .databaseId(DATABASE_1_ID) @@ -7041,7 +6945,7 @@ public abstract class BaseTest { .status(IDENTIFIER_2_STATUS_TYPE_DTO) .build(); - public static final IdentifierSaveDto IDENTIFIER_2_SAVE_DTO = IdentifierSaveDto.builder() + public final IdentifierSaveDto IDENTIFIER_2_SAVE_DTO = IdentifierSaveDto.builder() .id(IDENTIFIER_2_ID) .databaseId(DATABASE_1_ID) .queryId(QUERY_1_ID) @@ -7057,27 +6961,26 @@ public abstract class BaseTest { .queryId(QUERY_1_ID) .build(); - public static final UUID IDENTIFIER_3_ID = UUID.fromString("e2d831c2-3694-4fdc-8c48-7a7e94b73c43"); - public static final String IDENTIFIER_3_DOI = null; - public static final Instant IDENTIFIER_3_CREATED = Instant.ofEpochSecond(1651588352L); - public static final Instant IDENTIFIER_3_MODIFIED = Instant.ofEpochSecond(1551588352L); - public static final Instant IDENTIFIER_3_EXECUTION = Instant.ofEpochSecond(1551588352L); - public static final Integer IDENTIFIER_3_PUBLICATION_DAY = 10; - public static final Integer IDENTIFIER_3_PUBLICATION_MONTH = 7; - public static final Integer IDENTIFIER_3_PUBLICATION_YEAR = 2023; - public static final String IDENTIFIER_3_QUERY_HASH = VIEW_1_QUERY_HASH; - public static final String IDENTIFIER_3_RESULT_HASH = null; - public static final String IDENTIFIER_3_QUERY = VIEW_1_QUERY; - public static final String IDENTIFIER_3_NORMALIZED = VIEW_1_QUERY; - public static final Long IDENTIFIER_3_RESULT_NUMBER = null; - public static final String IDENTIFIER_3_PUBLISHER = "Polish Government"; - public static final IdentifierType IDENTIFIER_3_TYPE = IdentifierType.VIEW; - public static final IdentifierTypeDto IDENTIFIER_3_TYPE_DTO = IdentifierTypeDto.VIEW; - public static final IdentifierStatusType IDENTIFIER_3_STATUS_TYPE = IdentifierStatusType.PUBLISHED; - public static final IdentifierStatusTypeDto IDENTIFIER_3_STATUS_TYPE_DTO = IdentifierStatusTypeDto.PUBLISHED; - public static final UUID IDENTIFIER_3_CREATED_BY = USER_1_ID; - - public static final Identifier IDENTIFIER_3 = Identifier.builder() + public final static UUID IDENTIFIER_3_ID = UUID.fromString("e2d831c2-3694-4fdc-8c48-7a7e94b73c43"); + public final static String IDENTIFIER_3_DOI = null; + public final static Instant IDENTIFIER_3_CREATED = Instant.ofEpochSecond(1651588352L); + public final static Instant IDENTIFIER_3_MODIFIED = Instant.ofEpochSecond(1551588352L); + public final static Instant IDENTIFIER_3_EXECUTION = Instant.ofEpochSecond(1551588352L); + public final static Integer IDENTIFIER_3_PUBLICATION_DAY = 10; + public final static Integer IDENTIFIER_3_PUBLICATION_MONTH = 7; + public final static Integer IDENTIFIER_3_PUBLICATION_YEAR = 2023; + public final static String IDENTIFIER_3_QUERY_HASH = VIEW_1_QUERY_HASH; + public final static String IDENTIFIER_3_RESULT_HASH = null; + public final static String IDENTIFIER_3_QUERY = VIEW_1_QUERY; + public final static String IDENTIFIER_3_NORMALIZED = VIEW_1_QUERY; + public final static Long IDENTIFIER_3_RESULT_NUMBER = null; + public final static String IDENTIFIER_3_PUBLISHER = "Polish Government"; + public final static IdentifierType IDENTIFIER_3_TYPE = IdentifierType.VIEW; + public final static IdentifierTypeDto IDENTIFIER_3_TYPE_DTO = IdentifierTypeDto.VIEW; + public final static IdentifierStatusType IDENTIFIER_3_STATUS_TYPE = IdentifierStatusType.PUBLISHED; + public final static IdentifierStatusTypeDto IDENTIFIER_3_STATUS_TYPE_DTO = IdentifierStatusTypeDto.PUBLISHED; + + public final Identifier IDENTIFIER_3 = Identifier.builder() .id(IDENTIFIER_3_ID) .viewId(VIEW_1_ID) .descriptions(new LinkedList<>()) @@ -7104,7 +7007,7 @@ public abstract class BaseTest { .status(IDENTIFIER_3_STATUS_TYPE) .build(); - public static final IdentifierDto IDENTIFIER_3_DTO = IdentifierDto.builder() + public final IdentifierDto IDENTIFIER_3_DTO = IdentifierDto.builder() .id(IDENTIFIER_3_ID) .databaseId(DATABASE_1_ID) .viewId(VIEW_1_ID) @@ -7133,7 +7036,7 @@ public abstract class BaseTest { .status(IDENTIFIER_3_STATUS_TYPE_DTO) .build(); - public static final IdentifierBriefDto IDENTIFIER_3_BRIEF_DTO = IdentifierBriefDto.builder() + public final IdentifierBriefDto IDENTIFIER_3_BRIEF_DTO = IdentifierBriefDto.builder() .id(IDENTIFIER_3_ID) .databaseId(DATABASE_1_ID) .viewId(VIEW_1_ID) @@ -7145,7 +7048,7 @@ public abstract class BaseTest { .status(IDENTIFIER_3_STATUS_TYPE_DTO) .build(); - public static final CreateIdentifierDto IDENTIFIER_3_CREATE_DTO = CreateIdentifierDto.builder() + public final CreateIdentifierDto IDENTIFIER_3_CREATE_DTO = CreateIdentifierDto.builder() .databaseId(DATABASE_1_ID) .viewId(VIEW_1_ID) .type(IDENTIFIER_3_TYPE_DTO) @@ -7153,7 +7056,7 @@ public abstract class BaseTest { .publisher(IDENTIFIER_3_PUBLISHER) .build(); - public static final IdentifierSaveDto IDENTIFIER_3_SAVE_DTO = IdentifierSaveDto.builder() + public final IdentifierSaveDto IDENTIFIER_3_SAVE_DTO = IdentifierSaveDto.builder() .id(IDENTIFIER_3_ID) .databaseId(DATABASE_1_ID) .viewId(VIEW_1_ID) @@ -7168,24 +7071,23 @@ public abstract class BaseTest { .licenses(new LinkedList<>(List.of(LICENSE_1_DTO))) .build(); - public static final UUID IDENTIFIER_4_ID = UUID.fromString("3bd69bb8-f7e3-48e4-9717-823787e7ba23"); - public static final String IDENTIFIER_4_DOI = null; - public static final Instant IDENTIFIER_4_CREATED = Instant.ofEpochSecond(1751588352L); - public static final Instant IDENTIFIER_4_MODIFIED = Instant.ofEpochSecond(1551588352L); - public static final Instant IDENTIFIER_4_EXECUTION = Instant.ofEpochSecond(1551588352L); - public static final Integer IDENTIFIER_4_PUBLICATION_DAY = 10; - public static final Integer IDENTIFIER_4_PUBLICATION_MONTH = 7; - public static final Integer IDENTIFIER_4_PUBLICATION_YEAR = 2023; - public static final String IDENTIFIER_4_RESULT_HASH = null; - public static final Long IDENTIFIER_4_RESULT_NUMBER = null; - public static final String IDENTIFIER_4_PUBLISHER = "Example Publisher"; - public static final IdentifierType IDENTIFIER_4_TYPE = IdentifierType.TABLE; - public static final IdentifierTypeDto IDENTIFIER_4_TYPE_DTO = IdentifierTypeDto.TABLE; - public static final IdentifierStatusType IDENTIFIER_4_STATUS_TYPE = IdentifierStatusType.PUBLISHED; - public static final IdentifierStatusTypeDto IDENTIFIER_4_STATUS_TYPE_DTO = IdentifierStatusTypeDto.PUBLISHED; - public static final UUID IDENTIFIER_4_CREATED_BY = USER_1_ID; - - public static final Identifier IDENTIFIER_4 = Identifier.builder() + public final static UUID IDENTIFIER_4_ID = UUID.fromString("3bd69bb8-f7e3-48e4-9717-823787e7ba23"); + public final static String IDENTIFIER_4_DOI = null; + public final static Instant IDENTIFIER_4_CREATED = Instant.ofEpochSecond(1751588352L); + public final static Instant IDENTIFIER_4_MODIFIED = Instant.ofEpochSecond(1551588352L); + public final static Instant IDENTIFIER_4_EXECUTION = Instant.ofEpochSecond(1551588352L); + public final static Integer IDENTIFIER_4_PUBLICATION_DAY = 10; + public final static Integer IDENTIFIER_4_PUBLICATION_MONTH = 7; + public final static Integer IDENTIFIER_4_PUBLICATION_YEAR = 2023; + public final static String IDENTIFIER_4_RESULT_HASH = null; + public final static Long IDENTIFIER_4_RESULT_NUMBER = null; + public final static String IDENTIFIER_4_PUBLISHER = "Example Publisher"; + public final static IdentifierType IDENTIFIER_4_TYPE = IdentifierType.TABLE; + public final static IdentifierTypeDto IDENTIFIER_4_TYPE_DTO = IdentifierTypeDto.TABLE; + public final static IdentifierStatusType IDENTIFIER_4_STATUS_TYPE = IdentifierStatusType.PUBLISHED; + public final static IdentifierStatusTypeDto IDENTIFIER_4_STATUS_TYPE_DTO = IdentifierStatusTypeDto.PUBLISHED; + + public final Identifier IDENTIFIER_4 = Identifier.builder() .id(IDENTIFIER_4_ID) .tableId(TABLE_1_ID) .descriptions(new LinkedList<>()) @@ -7209,7 +7111,7 @@ public abstract class BaseTest { .status(IDENTIFIER_4_STATUS_TYPE) .build(); - public static final IdentifierDto IDENTIFIER_4_DTO = IdentifierDto.builder() + public final IdentifierDto IDENTIFIER_4_DTO = IdentifierDto.builder() .id(IDENTIFIER_4_ID) .databaseId(DATABASE_1_ID) .tableId(TABLE_1_ID) @@ -7235,7 +7137,7 @@ public abstract class BaseTest { .status(IDENTIFIER_4_STATUS_TYPE_DTO) .build(); - public static final IdentifierBriefDto IDENTIFIER_4_BRIEF_DTO = IdentifierBriefDto.builder() + public final IdentifierBriefDto IDENTIFIER_4_BRIEF_DTO = IdentifierBriefDto.builder() .id(IDENTIFIER_4_ID) .databaseId(DATABASE_1_ID) .tableId(TABLE_1_ID) @@ -7247,13 +7149,13 @@ public abstract class BaseTest { .status(IDENTIFIER_4_STATUS_TYPE_DTO) .build(); - public static final CreateIdentifierDto IDENTIFIER_4_CREATE_DTO = CreateIdentifierDto.builder() + public final CreateIdentifierDto IDENTIFIER_4_CREATE_DTO = CreateIdentifierDto.builder() .databaseId(DATABASE_1_ID) .publicationYear(IDENTIFIER_4_PUBLICATION_YEAR) .publisher(IDENTIFIER_4_PUBLISHER) .build(); - public static final IdentifierSaveDto IDENTIFIER_4_SAVE_DTO = IdentifierSaveDto.builder() + public final IdentifierSaveDto IDENTIFIER_4_SAVE_DTO = IdentifierSaveDto.builder() .id(IDENTIFIER_4_ID) .databaseId(DATABASE_1_ID) .tableId(TABLE_1_ID) @@ -7268,36 +7170,36 @@ public abstract class BaseTest { .licenses(new LinkedList<>(List.of(LICENSE_1_DTO))) .build(); - public static final String VIRTUAL_HOST_NAME = "fda"; - public static final String VIRTUAL_HOST_DESCRIPTION = "FAIR Data Austria"; - public static final String VIRTUAL_HOST_TAGS = ""; + public final static String VIRTUAL_HOST_NAME = "fda"; + public final static String VIRTUAL_HOST_DESCRIPTION = "FAIR Data Austria"; + public final static String VIRTUAL_HOST_TAGS = ""; - public static final CreateVirtualHostDto VIRTUAL_HOST_CREATE_DTO = CreateVirtualHostDto.builder() + public final CreateVirtualHostDto VIRTUAL_HOST_CREATE_DTO = CreateVirtualHostDto.builder() .name(VIRTUAL_HOST_NAME) .description(VIRTUAL_HOST_DESCRIPTION) .tags(VIRTUAL_HOST_TAGS) .build(); - public static final ExchangeUpdatePermissionsDto VIRTUAL_HOST_EXCHANGE_UPDATE_DTO = ExchangeUpdatePermissionsDto.builder() + public final ExchangeUpdatePermissionsDto VIRTUAL_HOST_EXCHANGE_UPDATE_DTO = ExchangeUpdatePermissionsDto.builder() .exchange(DATABASE_1_EXCHANGE) .read(".*") .write(".*") .build(); - public static final GrantVirtualHostPermissionsDto VIRTUAL_HOST_GRANT_DTO = GrantVirtualHostPermissionsDto.builder() + public final GrantVirtualHostPermissionsDto VIRTUAL_HOST_GRANT_DTO = GrantVirtualHostPermissionsDto.builder() .read(".*") .write(".*") .configure(".*") .build(); - public static final UUID BANNER_MESSAGE_1_ID = UUID.fromString("81cf09b7-0d86-44ad-be8e-a407e7d114e1"); - public static final String BANNER_MESSAGE_1_MESSAGE = "Next maintenance in 7 days!"; - public static final BannerMessageType BANNER_MESSAGE_1_TYPE = BannerMessageType.INFO; - public static final BannerMessageTypeDto BANNER_MESSAGE_1_TYPE_DTO = BannerMessageTypeDto.INFO; - public static final Instant BANNER_MESSAGE_1_START = Instant.ofEpochSecond(1684577786L) /* 2022-12-23 22:00:00 (UTC) */; - public static final Instant BANNER_MESSAGE_1_END = null; + public final static UUID BANNER_MESSAGE_1_ID = UUID.fromString("81cf09b7-0d86-44ad-be8e-a407e7d114e1"); + public final static String BANNER_MESSAGE_1_MESSAGE = "Next maintenance in 7 days!"; + public final static BannerMessageType BANNER_MESSAGE_1_TYPE = BannerMessageType.INFO; + public final static BannerMessageTypeDto BANNER_MESSAGE_1_TYPE_DTO = BannerMessageTypeDto.INFO; + public final static Instant BANNER_MESSAGE_1_START = Instant.ofEpochSecond(1684577786L) /* 2022-12-23 22:00:00 (UTC) */; + public final static Instant BANNER_MESSAGE_1_END = null; - public static final BannerMessage BANNER_MESSAGE_1 = BannerMessage.builder() + public final BannerMessage BANNER_MESSAGE_1 = BannerMessage.builder() .id(BANNER_MESSAGE_1_ID) .message(BANNER_MESSAGE_1_MESSAGE) .type(BANNER_MESSAGE_1_TYPE) @@ -7305,7 +7207,7 @@ public abstract class BaseTest { .displayEnd(BANNER_MESSAGE_1_END) .build(); - public static final BannerMessageDto BANNER_MESSAGE_1_DTO = BannerMessageDto.builder() + public final BannerMessageDto BANNER_MESSAGE_1_DTO = BannerMessageDto.builder() .id(BANNER_MESSAGE_1_ID) .message(BANNER_MESSAGE_1_MESSAGE) .type(BANNER_MESSAGE_1_TYPE_DTO) @@ -7313,28 +7215,28 @@ public abstract class BaseTest { .displayEnd(BANNER_MESSAGE_1_END) .build(); - public static final BannerMessageCreateDto BANNER_MESSAGE_1_CREATE_DTO = BannerMessageCreateDto.builder() + public final BannerMessageCreateDto BANNER_MESSAGE_1_CREATE_DTO = BannerMessageCreateDto.builder() .message(BANNER_MESSAGE_1_MESSAGE) .type(BANNER_MESSAGE_1_TYPE_DTO) .displayStart(BANNER_MESSAGE_1_START) .displayEnd(BANNER_MESSAGE_1_END) .build(); - public static final BannerMessageUpdateDto BANNER_MESSAGE_1_UPDATE_DTO = BannerMessageUpdateDto.builder() + public final BannerMessageUpdateDto BANNER_MESSAGE_1_UPDATE_DTO = BannerMessageUpdateDto.builder() .message(BANNER_MESSAGE_1_MESSAGE) .type(BannerMessageTypeDto.WARNING) .displayStart(BANNER_MESSAGE_1_START) .displayEnd(BANNER_MESSAGE_1_END) .build(); - public static final UUID BANNER_MESSAGE_2_ID = UUID.fromString("1e7e2c03-e2c6-46b8-9fdc-6668ef055d99"); - public static final String BANNER_MESSAGE_2_MESSAGE = "No operation on Christmas 2022!"; - public static final BannerMessageType BANNER_MESSAGE_2_TYPE = BannerMessageType.ERROR; - public static final BannerMessageTypeDto BANNER_MESSAGE_2_TYPE_DTO = BannerMessageTypeDto.ERROR; - public static final Instant BANNER_MESSAGE_2_START = Instant.ofEpochSecond(1671836400L) /* 2022-12-23 22:00:00 (UTC) */; - public static final Instant BANNER_MESSAGE_2_END = Instant.ofEpochSecond(1672009200L) /* 2022-12-25 22:00:00 (UTC) */; + public final static UUID BANNER_MESSAGE_2_ID = UUID.fromString("1e7e2c03-e2c6-46b8-9fdc-6668ef055d99"); + public final static String BANNER_MESSAGE_2_MESSAGE = "No operation on Christmas 2022!"; + public final static BannerMessageType BANNER_MESSAGE_2_TYPE = BannerMessageType.ERROR; + public final static BannerMessageTypeDto BANNER_MESSAGE_2_TYPE_DTO = BannerMessageTypeDto.ERROR; + public final static Instant BANNER_MESSAGE_2_START = Instant.ofEpochSecond(1671836400L) /* 2022-12-23 22:00:00 (UTC) */; + public final static Instant BANNER_MESSAGE_2_END = Instant.ofEpochSecond(1672009200L) /* 2022-12-25 22:00:00 (UTC) */; - public static final BannerMessage BANNER_MESSAGE_2 = BannerMessage.builder() + public final BannerMessage BANNER_MESSAGE_2 = BannerMessage.builder() .id(BANNER_MESSAGE_2_ID) .message(BANNER_MESSAGE_2_MESSAGE) .type(BANNER_MESSAGE_2_TYPE) @@ -7342,29 +7244,31 @@ public abstract class BaseTest { .displayEnd(BANNER_MESSAGE_2_END) .build(); - public static final BannerMessageCreateDto BANNER_MESSAGE_2_CREATE_DTO = BannerMessageCreateDto.builder() + public final BannerMessageCreateDto BANNER_MESSAGE_2_CREATE_DTO = BannerMessageCreateDto.builder() .message(BANNER_MESSAGE_2_MESSAGE) .type(BANNER_MESSAGE_2_TYPE_DTO) .displayStart(BANNER_MESSAGE_2_START) .displayEnd(BANNER_MESSAGE_2_END) .build(); - public static final Database DATABASE_1 = Database.builder() + public final Database DATABASE_1 = Database.builder() .id(DATABASE_1_ID) .created(Instant.now().minus(1, HOURS)) .lastModified(Instant.now()) .isPublic(DATABASE_1_PUBLIC) .isSchemaPublic(DATABASE_1_SCHEMA_PUBLIC) + .isDashboardEnabled(DATABASE_1_DASHBOARD_ENABLED) + .dashboardUid(DATABASE_1_DASHBOARD_UID) .name(DATABASE_1_NAME) .description(DATABASE_1_DESCRIPTION) .identifiers(new LinkedList<>(List.of(IDENTIFIER_1, IDENTIFIER_2, IDENTIFIER_3, IDENTIFIER_4))) .cid(CONTAINER_1_ID) .container(CONTAINER_1) - .internalName(DATABASE_1_INTERNALNAME) + .internalName(DATABASE_1_INTERNAL_NAME) .exchangeName(DATABASE_1_EXCHANGE) .created(DATABASE_1_CREATED) .lastModified(DATABASE_1_LAST_MODIFIED) - .ownedBy(DATABASE_1_CREATED_BY) + .ownedBy(USER_1_ID) .owner(USER_1) .ownedBy(USER_1_ID) .owner(USER_1) @@ -7378,13 +7282,15 @@ public abstract class BaseTest { .identifiers(new LinkedList<>()) .build(); - public static final DatabaseDto DATABASE_1_DTO = DatabaseDto.builder() + public final DatabaseDto DATABASE_1_DTO = DatabaseDto.builder() .id(DATABASE_1_ID) .isPublic(DATABASE_1_PUBLIC) .isSchemaPublic(DATABASE_1_SCHEMA_PUBLIC) + .isDashboardEnabled(DATABASE_1_DASHBOARD_ENABLED) + .dashboardUid(DATABASE_1_DASHBOARD_UID) .name(DATABASE_1_NAME) .container(CONTAINER_1_DTO) - .internalName(DATABASE_1_INTERNALNAME) + .internalName(DATABASE_1_INTERNAL_NAME) .exchangeName(DATABASE_1_EXCHANGE) .identifiers(new LinkedList<>(List.of(IDENTIFIER_1_DTO, IDENTIFIER_2_DTO, IDENTIFIER_3_DTO, IDENTIFIER_4_DTO))) .tables(new LinkedList<>(List.of(TABLE_1_DTO, TABLE_2_DTO, TABLE_3_DTO, TABLE_4_DTO))) @@ -7392,13 +7298,13 @@ public abstract class BaseTest { .owner(USER_1_BRIEF_DTO) .build(); - public static final DatabaseDto DATABASE_1_PRIVILEGED_DTO = DatabaseDto.builder() + public final DatabaseDto DATABASE_1_PRIVILEGED_DTO = DatabaseDto.builder() .id(DATABASE_1_ID) .isPublic(DATABASE_1_PUBLIC) .isSchemaPublic(DATABASE_1_SCHEMA_PUBLIC) .name(DATABASE_1_NAME) .container(CONTAINER_1_PRIVILEGED_DTO) - .internalName(DATABASE_1_INTERNALNAME) + .internalName(DATABASE_1_INTERNAL_NAME) .exchangeName(DATABASE_1_EXCHANGE) .accesses(new LinkedList<>(List.of())) /* DATABASE_1_USER_1_READ_ACCESS_DTO */ .identifiers(new LinkedList<>(List.of(IDENTIFIER_1_DTO, IDENTIFIER_2_DTO, IDENTIFIER_3_DTO, IDENTIFIER_4_DTO))) @@ -7408,16 +7314,16 @@ public abstract class BaseTest { .lastRetrieved(Instant.now()) .build(); - public static final DatabaseBriefDto DATABASE_1_BRIEF_DTO = DatabaseBriefDto.builder() + public final DatabaseBriefDto DATABASE_1_BRIEF_DTO = DatabaseBriefDto.builder() .id(DATABASE_1_ID) .isPublic(DATABASE_1_PUBLIC) .isSchemaPublic(DATABASE_1_SCHEMA_PUBLIC) .name(DATABASE_1_NAME) - .internalName(DATABASE_1_INTERNALNAME) + .internalName(DATABASE_1_INTERNAL_NAME) .identifiers(new LinkedList<>(List.of(IDENTIFIER_1_BRIEF_DTO, IDENTIFIER_2_BRIEF_DTO, IDENTIFIER_3_BRIEF_DTO, IDENTIFIER_4_BRIEF_DTO))) .build(); - public static final DatabaseAccess DATABASE_1_USER_1_READ_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_1_USER_1_READ_ACCESS = DatabaseAccess.builder() .type(AccessType.READ) .hdbid(DATABASE_1_ID) .database(DATABASE_1) @@ -7425,14 +7331,14 @@ public abstract class BaseTest { .user(USER_1) .build(); - public static final DatabaseAccessDto DATABASE_1_USER_1_READ_ACCESS_DTO = DatabaseAccessDto.builder() + public final DatabaseAccessDto DATABASE_1_USER_1_READ_ACCESS_DTO = DatabaseAccessDto.builder() .type(AccessTypeDto.READ) .hdbid(DATABASE_1_ID) .huserid(USER_1_ID) .user(USER_1_BRIEF_DTO) .build(); - public static final DatabaseAccess DATABASE_1_USER_1_WRITE_OWN_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_1_USER_1_WRITE_OWN_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_OWN) .hdbid(DATABASE_1_ID) .database(DATABASE_1) @@ -7440,7 +7346,7 @@ public abstract class BaseTest { .user(USER_1) .build(); - public static final DatabaseAccess DATABASE_1_USER_1_WRITE_ALL_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_1_USER_1_WRITE_ALL_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_ALL) .hdbid(DATABASE_1_ID) .database(DATABASE_1) @@ -7448,7 +7354,7 @@ public abstract class BaseTest { .user(USER_1) .build(); - public static final DatabaseAccess DATABASE_1_USER_2_READ_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_1_USER_2_READ_ACCESS = DatabaseAccess.builder() .type(AccessType.READ) .hdbid(DATABASE_1_ID) .database(DATABASE_1) @@ -7456,14 +7362,14 @@ public abstract class BaseTest { .user(USER_2) .build(); - public static final DatabaseAccessDto DATABASE_1_USER_2_READ_ACCESS_DTO = DatabaseAccessDto.builder() + public final DatabaseAccessDto DATABASE_1_USER_2_READ_ACCESS_DTO = DatabaseAccessDto.builder() .type(AccessTypeDto.READ) .hdbid(DATABASE_1_ID) .huserid(USER_2_ID) .user(USER_2_BRIEF_DTO) .build(); - public static final DatabaseAccess DATABASE_1_USER_2_WRITE_OWN_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_1_USER_2_WRITE_OWN_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_OWN) .hdbid(DATABASE_1_ID) .database(DATABASE_1) @@ -7471,14 +7377,14 @@ public abstract class BaseTest { .user(USER_2) .build(); - public static final DatabaseAccessDto DATABASE_1_USER_2_WRITE_OWN_ACCESS_DTO = DatabaseAccessDto.builder() + public final DatabaseAccessDto DATABASE_1_USER_2_WRITE_OWN_ACCESS_DTO = DatabaseAccessDto.builder() .type(AccessTypeDto.WRITE_OWN) .hdbid(DATABASE_1_ID) .huserid(USER_2_ID) .user(USER_2_BRIEF_DTO) .build(); - public static final DatabaseAccess DATABASE_1_USER_2_WRITE_ALL_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_1_USER_2_WRITE_ALL_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_ALL) .hdbid(DATABASE_1_ID) .database(DATABASE_1) @@ -7486,14 +7392,14 @@ public abstract class BaseTest { .user(USER_2) .build(); - public static final DatabaseAccessDto DATABASE_1_USER_2_WRITE_ALL_ACCESS_DTO = DatabaseAccessDto.builder() + public final DatabaseAccessDto DATABASE_1_USER_2_WRITE_ALL_ACCESS_DTO = DatabaseAccessDto.builder() .type(AccessTypeDto.WRITE_ALL) .hdbid(DATABASE_1_ID) .huserid(USER_2_ID) .user(USER_2_BRIEF_DTO) .build(); - public static final DatabaseAccess DATABASE_1_USER_3_READ_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_1_USER_3_READ_ACCESS = DatabaseAccess.builder() .type(AccessType.READ) .hdbid(DATABASE_1_ID) .database(DATABASE_1) @@ -7501,7 +7407,7 @@ public abstract class BaseTest { .user(USER_3) .build(); - public static final DatabaseAccess DATABASE_1_USER_3_WRITE_OWN_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_1_USER_3_WRITE_OWN_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_OWN) .hdbid(DATABASE_1_ID) .database(DATABASE_1) @@ -7509,7 +7415,7 @@ public abstract class BaseTest { .user(USER_3) .build(); - public static final DatabaseAccess DATABASE_1_USER_3_WRITE_ALL_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_1_USER_3_WRITE_ALL_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_ALL) .hdbid(DATABASE_1_ID) .database(DATABASE_1) @@ -7517,14 +7423,14 @@ public abstract class BaseTest { .user(USER_3) .build(); - public static final DatabaseAccessDto DATABASE_1_USER_3_WRITE_ALL_ACCESS_DTO = DatabaseAccessDto.builder() + public final DatabaseAccessDto DATABASE_1_USER_3_WRITE_ALL_ACCESS_DTO = DatabaseAccessDto.builder() .type(AccessTypeDto.WRITE_ALL) .hdbid(DATABASE_1_ID) .huserid(USER_3_ID) .user(USER_3_BRIEF_DTO) .build(); - public static final DatabaseAccess DATABASE_1_USER_4_READ_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_1_USER_4_READ_ACCESS = DatabaseAccess.builder() .type(AccessType.READ) .hdbid(DATABASE_1_ID) .database(DATABASE_1) @@ -7532,28 +7438,43 @@ public abstract class BaseTest { .user(USER_4) .build(); - public static final DatabaseAccessDto DATABASE_1_USER_4_READ_ACCESS_DTO = DatabaseAccessDto.builder() + public final DatabaseAccessDto DATABASE_1_USER_4_READ_ACCESS_DTO = DatabaseAccessDto.builder() .type(AccessTypeDto.READ) .hdbid(DATABASE_1_ID) .huserid(USER_4_ID) .user(USER_4_BRIEF_DTO) .build(); - public static final Database DATABASE_2 = Database.builder() + public final CreateDashboardResponseDto DATABASE_1_CREATE_DASHBOARD_RESPONSE_DTO = + CreateDashboardResponseDto.builder() + .id(1L) + .uid(DATABASE_1_DASHBOARD_UID) + .build(); + + public final CreateDashboardDto DATABASE_1_CREATE_DASHBOARD_DTO = CreateDashboardDto.builder() + .databaseName(DATABASE_1_INTERNAL_NAME) + .isPublic(DATABASE_1_PUBLIC) + .isSchemaPublic(DATABASE_1_SCHEMA_PUBLIC) + .ownerUsername(USER_1_USERNAME) + .build(); + + public final Database DATABASE_2 = Database.builder() .id(DATABASE_2_ID) .created(DATABASE_2_CREATED) .lastModified(Instant.now()) .isPublic(DATABASE_2_PUBLIC) .isSchemaPublic(DATABASE_2_SCHEMA_PUBLIC) + .isDashboardEnabled(DATABASE_2_DASHBOARD_ENABLED) + .dashboardUid(DATABASE_2_DASHBOARD_UID) .name(DATABASE_2_NAME) .description(DATABASE_2_DESCRIPTION) .cid(CONTAINER_1_ID) .container(CONTAINER_1) - .internalName(DATABASE_2_INTERNALNAME) + .internalName(DATABASE_2_INTERNAL_NAME) .exchangeName(DATABASE_2_EXCHANGE) .created(DATABASE_2_CREATED) .lastModified(DATABASE_2_LAST_MODIFIED) - .ownedBy(DATABASE_2_OWNER) + .ownedBy(USER_2_ID) .owner(USER_2) .contactPerson(USER_2_ID) .contact(USER_2) @@ -7563,13 +7484,13 @@ public abstract class BaseTest { .identifiers(new LinkedList<>()) .build(); - public static final DatabaseDto DATABASE_2_DTO = DatabaseDto.builder() + public final DatabaseDto DATABASE_2_DTO = DatabaseDto.builder() .id(DATABASE_2_ID) .isPublic(DATABASE_2_PUBLIC) .isSchemaPublic(DATABASE_2_SCHEMA_PUBLIC) .name(DATABASE_2_NAME) .container(CONTAINER_1_DTO) - .internalName(DATABASE_2_INTERNALNAME) + .internalName(DATABASE_2_INTERNAL_NAME) .exchangeName(DATABASE_2_EXCHANGE) .identifiers(new LinkedList<>(List.of(IDENTIFIER_5_DTO))) .tables(new LinkedList<>(List.of(TABLE_5_DTO, TABLE_6_DTO, TABLE_7_DTO))) @@ -7578,13 +7499,13 @@ public abstract class BaseTest { .lastRetrieved(Instant.now()) .build(); - public static final DatabaseDto DATABASE_2_PRIVILEGED_DTO = DatabaseDto.builder() + public final DatabaseDto DATABASE_2_PRIVILEGED_DTO = DatabaseDto.builder() .id(DATABASE_2_ID) .isPublic(DATABASE_2_PUBLIC) .isSchemaPublic(DATABASE_2_SCHEMA_PUBLIC) .name(DATABASE_2_NAME) .container(CONTAINER_1_PRIVILEGED_DTO) - .internalName(DATABASE_2_INTERNALNAME) + .internalName(DATABASE_2_INTERNAL_NAME) .exchangeName(DATABASE_2_EXCHANGE) .identifiers(new LinkedList<>(List.of(IDENTIFIER_5_DTO))) .tables(new LinkedList<>(List.of(TABLE_5_DTO, TABLE_6_DTO, TABLE_7_DTO))) @@ -7593,27 +7514,27 @@ public abstract class BaseTest { .lastRetrieved(Instant.now()) .build(); - public static final DatabaseBriefDto DATABASE_2_PRIVILEGED_BRIEF_DTO = DatabaseBriefDto.builder() + public final DatabaseBriefDto DATABASE_2_PRIVILEGED_BRIEF_DTO = DatabaseBriefDto.builder() .id(DATABASE_2_ID) .isPublic(DATABASE_2_PUBLIC) .isSchemaPublic(DATABASE_2_SCHEMA_PUBLIC) .name(DATABASE_2_NAME) - .internalName(DATABASE_2_INTERNALNAME) + .internalName(DATABASE_2_INTERNAL_NAME) .identifiers(new LinkedList<>(List.of(IDENTIFIER_5_BRIEF_DTO))) .ownerId(USER_2_ID) .build(); - public static final DatabaseBriefDto DATABASE_2_BRIEF_DTO = DatabaseBriefDto.builder() + public final DatabaseBriefDto DATABASE_2_BRIEF_DTO = DatabaseBriefDto.builder() .id(DATABASE_2_ID) .isPublic(DATABASE_2_PUBLIC) .isSchemaPublic(DATABASE_2_SCHEMA_PUBLIC) .name(DATABASE_2_NAME) - .internalName(DATABASE_2_INTERNALNAME) + .internalName(DATABASE_2_INTERNAL_NAME) .identifiers(new LinkedList<>(List.of(IDENTIFIER_5_BRIEF_DTO))) .ownerId(USER_2_ID) .build(); - public static final DatabaseAccess DATABASE_2_USER_1_READ_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_2_USER_1_READ_ACCESS = DatabaseAccess.builder() .type(AccessType.READ) .hdbid(DATABASE_2_ID) .database(DATABASE_2) @@ -7621,7 +7542,7 @@ public abstract class BaseTest { .user(USER_1) .build(); - public static final DatabaseAccess DATABASE_2_USER_1_WRITE_OWN_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_2_USER_1_WRITE_OWN_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_OWN) .hdbid(DATABASE_2_ID) .database(DATABASE_2) @@ -7629,7 +7550,7 @@ public abstract class BaseTest { .user(USER_1) .build(); - public static final DatabaseAccess DATABASE_2_USER_1_WRITE_ALL_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_2_USER_1_WRITE_ALL_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_ALL) .hdbid(DATABASE_2_ID) .database(DATABASE_2) @@ -7637,7 +7558,7 @@ public abstract class BaseTest { .user(USER_1) .build(); - public static final DatabaseAccess DATABASE_2_USER_2_READ_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_2_USER_2_READ_ACCESS = DatabaseAccess.builder() .type(AccessType.READ) .hdbid(DATABASE_2_ID) .database(DATABASE_2) @@ -7645,13 +7566,13 @@ public abstract class BaseTest { .user(USER_2) .build(); - public static final DatabaseAccessDto DATABASE_2_USER_2_READ_ACCESS_DTO = DatabaseAccessDto.builder() + public final DatabaseAccessDto DATABASE_2_USER_2_READ_ACCESS_DTO = DatabaseAccessDto.builder() .type(AccessTypeDto.READ) .hdbid(DATABASE_2_ID) .huserid(USER_2_ID) .build(); - public static final DatabaseAccess DATABASE_2_USER_2_WRITE_OWN_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_2_USER_2_WRITE_OWN_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_OWN) .hdbid(DATABASE_2_ID) .database(DATABASE_2) @@ -7659,7 +7580,7 @@ public abstract class BaseTest { .user(USER_2) .build(); - public static final DatabaseAccess DATABASE_2_USER_2_WRITE_ALL_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_2_USER_2_WRITE_ALL_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_ALL) .hdbid(DATABASE_2_ID) .database(DATABASE_2) @@ -7667,14 +7588,14 @@ public abstract class BaseTest { .user(USER_2) .build(); - public static final DatabaseAccessDto DATABASE_2_USER_2_WRITE_ALL_ACCESS_DTO = DatabaseAccessDto.builder() + public final DatabaseAccessDto DATABASE_2_USER_2_WRITE_ALL_ACCESS_DTO = DatabaseAccessDto.builder() .type(AccessTypeDto.WRITE_ALL) .hdbid(DATABASE_2_ID) .huserid(USER_2_ID) .user(USER_2_BRIEF_DTO) .build(); - public static final DatabaseAccess DATABASE_2_USER_3_READ_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_2_USER_3_READ_ACCESS = DatabaseAccess.builder() .type(AccessType.READ) .hdbid(DATABASE_2_ID) .database(DATABASE_2) @@ -7682,14 +7603,14 @@ public abstract class BaseTest { .user(USER_3) .build(); - public static final DatabaseAccessDto DATABASE_2_USER_3_READ_ACCESS_DTO = DatabaseAccessDto.builder() + public final DatabaseAccessDto DATABASE_2_USER_3_READ_ACCESS_DTO = DatabaseAccessDto.builder() .type(AccessTypeDto.READ) .hdbid(DATABASE_2_ID) .huserid(USER_3_ID) .user(USER_3_BRIEF_DTO) .build(); - public static final DatabaseAccess DATABASE_2_USER_3_WRITE_OWN_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_2_USER_3_WRITE_OWN_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_OWN) .hdbid(DATABASE_2_ID) .database(DATABASE_2) @@ -7697,7 +7618,7 @@ public abstract class BaseTest { .user(USER_3) .build(); - public static final DatabaseAccess DATABASE_2_USER_3_WRITE_ALL_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_2_USER_3_WRITE_ALL_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_ALL) .hdbid(DATABASE_2_ID) .database(DATABASE_2) @@ -7705,21 +7626,36 @@ public abstract class BaseTest { .user(USER_3) .build(); - public static final Database DATABASE_3 = Database.builder() + public final CreateDashboardResponseDto DATABASE_2_CREATE_DASHBOARD_RESPONSE_DTO = + CreateDashboardResponseDto.builder() + .id(2L) + .uid(DATABASE_2_DASHBOARD_UID) + .build(); + + public final CreateDashboardDto DATABASE_2_CREATE_DASHBOARD_DTO = CreateDashboardDto.builder() + .databaseName(DATABASE_2_INTERNAL_NAME) + .isPublic(DATABASE_2_PUBLIC) + .isSchemaPublic(DATABASE_2_SCHEMA_PUBLIC) + .ownerUsername(USER_2_USERNAME) + .build(); + + public final Database DATABASE_3 = Database.builder() .id(DATABASE_3_ID) .created(Instant.now().minus(1, HOURS)) .lastModified(Instant.now()) .isPublic(DATABASE_3_PUBLIC) .isSchemaPublic(DATABASE_3_SCHEMA_PUBLIC) + .isDashboardEnabled(DATABASE_3_DASHBOARD_ENABLED) + .dashboardUid(DATABASE_3_DASHBOARD_UID) .name(DATABASE_3_NAME) .description(DATABASE_3_DESCRIPTION) .cid(CONTAINER_1_ID) .container(CONTAINER_1) - .internalName(DATABASE_3_INTERNALNAME) + .internalName(DATABASE_3_INTERNAL_NAME) .exchangeName(DATABASE_3_EXCHANGE) .created(DATABASE_3_CREATED) .lastModified(DATABASE_3_LAST_MODIFIED) - .ownedBy(DATABASE_3_OWNER) + .ownedBy(USER_3_ID) .owner(USER_3) .contactPerson(USER_3_ID) .contact(USER_3) @@ -7729,7 +7665,7 @@ public abstract class BaseTest { .identifiers(new LinkedList<>()) /* IDENTIFIER_6 */ .build(); - public static final DatabaseAccess DATABASE_3_USER_1_READ_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_3_USER_1_READ_ACCESS = DatabaseAccess.builder() .type(AccessType.READ) .hdbid(DATABASE_3_ID) .database(DATABASE_3) @@ -7737,14 +7673,14 @@ public abstract class BaseTest { .user(USER_1) .build(); - public static final DatabaseAccessDto DATABASE_3_USER_1_READ_ACCESS_DTO = DatabaseAccessDto.builder() + public final DatabaseAccessDto DATABASE_3_USER_1_READ_ACCESS_DTO = DatabaseAccessDto.builder() .type(AccessTypeDto.READ) .hdbid(DATABASE_3_ID) .huserid(USER_1_ID) .user(USER_1_BRIEF_DTO) .build(); - public static final DatabaseAccess DATABASE_3_USER_1_WRITE_OWN_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_3_USER_1_WRITE_OWN_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_OWN) .hdbid(DATABASE_3_ID) .database(DATABASE_3) @@ -7752,14 +7688,14 @@ public abstract class BaseTest { .user(USER_1) .build(); - public static final DatabaseAccessDto DATABASE_3_USER_1_WRITE_OWN_ACCESS_DTO = DatabaseAccessDto.builder() + public final DatabaseAccessDto DATABASE_3_USER_1_WRITE_OWN_ACCESS_DTO = DatabaseAccessDto.builder() .type(AccessTypeDto.WRITE_OWN) .hdbid(DATABASE_3_ID) .huserid(USER_1_ID) .user(USER_1_BRIEF_DTO) .build(); - public static final DatabaseAccess DATABASE_3_USER_1_WRITE_ALL_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_3_USER_1_WRITE_ALL_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_ALL) .hdbid(DATABASE_3_ID) .database(DATABASE_3) @@ -7767,14 +7703,14 @@ public abstract class BaseTest { .user(USER_1) .build(); - public static final DatabaseAccessDto DATABASE_3_USER_1_WRITE_ALL_ACCESS_DTO = DatabaseAccessDto.builder() + public final DatabaseAccessDto DATABASE_3_USER_1_WRITE_ALL_ACCESS_DTO = DatabaseAccessDto.builder() .type(AccessTypeDto.WRITE_ALL) .hdbid(DATABASE_3_ID) .huserid(USER_1_ID) .user(USER_1_BRIEF_DTO) .build(); - public static final DatabaseAccess DATABASE_3_USER_2_READ_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_3_USER_2_READ_ACCESS = DatabaseAccess.builder() .type(AccessType.READ) .hdbid(DATABASE_3_ID) .database(DATABASE_3) @@ -7782,7 +7718,7 @@ public abstract class BaseTest { .user(USER_2) .build(); - public static final DatabaseAccess DATABASE_3_USER_2_WRITE_OWN_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_3_USER_2_WRITE_OWN_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_OWN) .hdbid(DATABASE_3_ID) .database(DATABASE_3) @@ -7790,7 +7726,7 @@ public abstract class BaseTest { .user(USER_2) .build(); - public static final DatabaseAccess DATABASE_3_USER_2_WRITE_ALL_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_3_USER_2_WRITE_ALL_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_ALL) .hdbid(DATABASE_3_ID) .database(DATABASE_3) @@ -7798,7 +7734,7 @@ public abstract class BaseTest { .user(USER_2) .build(); - public static final DatabaseAccess DATABASE_3_USER_3_READ_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_3_USER_3_READ_ACCESS = DatabaseAccess.builder() .type(AccessType.READ) .hdbid(DATABASE_3_ID) .database(DATABASE_3) @@ -7806,14 +7742,14 @@ public abstract class BaseTest { .user(USER_3) .build(); - public static final DatabaseAccessDto DATABASE_3_USER_3_READ_ACCESS_DTO = DatabaseAccessDto.builder() + public final DatabaseAccessDto DATABASE_3_USER_3_READ_ACCESS_DTO = DatabaseAccessDto.builder() .type(AccessTypeDto.READ) .hdbid(DATABASE_3_ID) .huserid(USER_3_ID) .user(USER_3_BRIEF_DTO) .build(); - public static final DatabaseAccess DATABASE_3_USER_3_WRITE_OWN_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_3_USER_3_WRITE_OWN_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_OWN) .hdbid(DATABASE_3_ID) .database(DATABASE_3) @@ -7821,14 +7757,14 @@ public abstract class BaseTest { .user(USER_3) .build(); - public static final DatabaseAccessDto DATABASE_3_USER_3_WRITE_OWN_ACCESS_DTO = DatabaseAccessDto.builder() + public final DatabaseAccessDto DATABASE_3_USER_3_WRITE_OWN_ACCESS_DTO = DatabaseAccessDto.builder() .type(AccessTypeDto.WRITE_OWN) .hdbid(DATABASE_3_ID) .huserid(USER_3_ID) .user(USER_3_BRIEF_DTO) .build(); - public static final DatabaseAccess DATABASE_3_USER_3_WRITE_ALL_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_3_USER_3_WRITE_ALL_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_ALL) .hdbid(DATABASE_3_ID) .database(DATABASE_3) @@ -7836,14 +7772,27 @@ public abstract class BaseTest { .user(USER_3) .build(); - public static final DatabaseAccessDto DATABASE_3_USER_3_WRITE_ALL_ACCESS_DTO = DatabaseAccessDto.builder() + public final DatabaseAccessDto DATABASE_3_USER_3_WRITE_ALL_ACCESS_DTO = DatabaseAccessDto.builder() .type(AccessTypeDto.WRITE_ALL) .hdbid(DATABASE_3_ID) .huserid(USER_3_ID) .user(USER_3_BRIEF_DTO) .build(); - public static final Identifier IDENTIFIER_7 = Identifier.builder() + public final CreateDashboardResponseDto DATABASE_3_CREATE_DASHBOARD_RESPONSE_DTO = + CreateDashboardResponseDto.builder() + .id(3L) + .uid(DATABASE_3_DASHBOARD_UID) + .build(); + + public final CreateDashboardDto DATABASE_3_CREATE_DASHBOARD_DTO = CreateDashboardDto.builder() + .databaseName(DATABASE_3_INTERNAL_NAME) + .isPublic(DATABASE_3_PUBLIC) + .isSchemaPublic(DATABASE_3_SCHEMA_PUBLIC) + .ownerUsername(USER_3_USERNAME) + .build(); + + public final Identifier IDENTIFIER_7 = Identifier.builder() .id(IDENTIFIER_7_ID) .descriptions(new LinkedList<>()) .titles(new LinkedList<>()) @@ -7866,21 +7815,23 @@ public abstract class BaseTest { .status(IDENTIFIER_7_STATUS_TYPE) .build(); - public static final Database DATABASE_4 = Database.builder() + public final Database DATABASE_4 = Database.builder() .id(DATABASE_4_ID) .created(Instant.now().minus(4, HOURS)) .lastModified(Instant.now()) .isPublic(DATABASE_4_PUBLIC) .isSchemaPublic(DATABASE_4_SCHEMA_PUBLIC) + .isDashboardEnabled(DATABASE_4_DASHBOARD_ENABLED) + .dashboardUid(DATABASE_4_DASHBOARD_UID) .name(DATABASE_4_NAME) .description(DATABASE_4_DESCRIPTION) .cid(CONTAINER_4_ID) .container(CONTAINER_4) - .internalName(DATABASE_4_INTERNALNAME) + .internalName(DATABASE_4_INTERNAL_NAME) .exchangeName(DATABASE_4_EXCHANGE) .created(DATABASE_4_CREATED) .lastModified(DATABASE_4_LAST_MODIFIED) - .ownedBy(DATABASE_4_OWNER) + .ownedBy(USER_4_ID) .owner(USER_4) .contactPerson(USER_4_ID) .contact(USER_4) @@ -7889,72 +7840,85 @@ public abstract class BaseTest { .identifiers(new LinkedList<>()) .build(); - public static final DatabaseAccess DATABASE_4_USER_1_READ_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_4_USER_1_READ_ACCESS = DatabaseAccess.builder() .type(AccessType.READ) .hdbid(DATABASE_4_ID) .database(DATABASE_4) .huserid(USER_1_ID) .build(); - public static final DatabaseAccess DATABASE_4_USER_1_WRITE_OWN_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_4_USER_1_WRITE_OWN_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_OWN) .hdbid(DATABASE_4_ID) .database(DATABASE_4) .huserid(USER_1_ID) .build(); - public static final DatabaseAccess DATABASE_4_USER_1_WRITE_ALL_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_4_USER_1_WRITE_ALL_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_ALL) .hdbid(DATABASE_4_ID) .database(DATABASE_4) .huserid(USER_1_ID) .build(); - public static final DatabaseAccess DATABASE_4_USER_2_READ_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_4_USER_2_READ_ACCESS = DatabaseAccess.builder() .type(AccessType.READ) .hdbid(DATABASE_4_ID) .database(DATABASE_4) .huserid(USER_2_ID) .build(); - public static final DatabaseAccess DATABASE_4_USER_2_WRITE_OWN_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_4_USER_2_WRITE_OWN_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_OWN) .hdbid(DATABASE_4_ID) .database(DATABASE_4) .huserid(USER_2_ID) .build(); - public static final DatabaseAccess DATABASE_4_USER_2_WRITE_ALL_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_4_USER_2_WRITE_ALL_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_ALL) .hdbid(DATABASE_4_ID) .database(DATABASE_4) .huserid(USER_2_ID) .build(); - public static final DatabaseAccess DATABASE_4_USER_3_READ_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_4_USER_3_READ_ACCESS = DatabaseAccess.builder() .type(AccessType.READ) .hdbid(DATABASE_4_ID) .database(DATABASE_4) .huserid(USER_3_ID) .build(); - public static final DatabaseAccess DATABASE_4_USER_3_WRITE_OWN_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_4_USER_3_WRITE_OWN_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_OWN) .hdbid(DATABASE_4_ID) .database(DATABASE_4) .huserid(USER_3_ID) .build(); - public static final DatabaseAccess DATABASE_4_USER_3_WRITE_ALL_ACCESS = DatabaseAccess.builder() + public final DatabaseAccess DATABASE_4_USER_3_WRITE_ALL_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_ALL) .hdbid(DATABASE_4_ID) .database(DATABASE_4) .huserid(USER_3_ID) .build(); - public static final List<IdentifierDto> VIEW_1_DTO_IDENTIFIERS = List.of(IDENTIFIER_3_DTO); + public final CreateDashboardResponseDto DATABASE_4_CREATE_DASHBOARD_RESPONSE_DTO = + CreateDashboardResponseDto.builder() + .id(4L) + .uid(DATABASE_4_DASHBOARD_UID) + .build(); + + public final CreateDashboardDto DATABASE_4_CREATE_DASHBOARD_DTO = CreateDashboardDto.builder() + .databaseName(DATABASE_4_INTERNAL_NAME) + .isPublic(DATABASE_4_PUBLIC) + .isSchemaPublic(DATABASE_4_SCHEMA_PUBLIC) + .ownerUsername(USER_4_USERNAME) + .build(); + + public final List<IdentifierDto> VIEW_1_DTO_IDENTIFIERS = List.of(IDENTIFIER_3_DTO); - public static final Constraints TABLE_1_CONSTRAINTS = Constraints.builder() + public final Constraints TABLE_1_CONSTRAINTS = Constraints.builder() .checks(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>()) .uniques(new LinkedList<>()) @@ -7965,7 +7929,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final ConstraintsDto TABLE_1_CONSTRAINTS_DTO = ConstraintsDto.builder() + public final ConstraintsDto TABLE_1_CONSTRAINTS_DTO = ConstraintsDto.builder() .checks(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>()) .uniques(new LinkedList<>()) @@ -7976,7 +7940,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final Constraints TABLE_2_CONSTRAINTS = Constraints.builder() + public final Constraints TABLE_2_CONSTRAINTS = Constraints.builder() .checks(new LinkedHashSet<>(List.of("`mintemp` > 0"))) .foreignKeys(new LinkedList<>(List.of(ForeignKey.builder() .id(UUID.fromString("d79f0fb1-05d6-4f3e-a5e2-8559982b8516")) @@ -8005,36 +7969,36 @@ public abstract class BaseTest { .build()))) .build(); - public static final ConstraintsDto TABLE_2_CONSTRAINTS_DTO = ConstraintsDto.builder() + public final ConstraintsDto TABLE_2_CONSTRAINTS_DTO = ConstraintsDto.builder() .checks(new LinkedHashSet<>(List.of("`mintemp` > 0"))) .foreignKeys(new LinkedList<>(List.of(ForeignKeyDto.builder() - .id(UUID.fromString("ca833111-1e9a-48a3-bb16-ad6f90196f96")) + .id(UUID.fromString("d79f0fb1-05d6-4f3e-a5e2-8559982b8516")) .name("fk_location") .onDelete(ReferenceTypeDto.NO_ACTION) .references(new LinkedList<>(List.of(ForeignKeyReferenceDto.builder() - .id(UUID.fromString("8552f282-0403-424d-b2ba-4ed0f760197c")) - .column(TABLE_2_COLUMNS_BRIEF_2_DTO) + .id(UUID.fromString("a4da8f2f-2999-4621-8066-801a2fb73c8d")) + .column(TABLE_2_COLUMNS_BRIEF_DTO.get(2)) .referencedColumn(TABLE_1_COLUMNS_BRIEF_0_DTO) .foreignKey(null) // set later .build()))) - .table(TABLE_1_BRIEF_DTO) - .referencedTable(TABLE_2_BRIEF_DTO) + .table(TABLE_2_BRIEF_DTO) + .referencedTable(TABLE_1_BRIEF_DTO) .onUpdate(ReferenceTypeDto.NO_ACTION) .build()))) .uniques(new LinkedList<>(List.of(UniqueDto.builder() - .id(UUID.fromString("b9aba807-dd9c-43a3-9614-2493cb4b26bd")) + .id(UUID.fromString("408e398f-d157-49a1-8b45-87a070f3b4de")) .table(TABLE_2_BRIEF_DTO) .name("uk_1") .columns(new LinkedList<>(List.of(TABLE_2_COLUMNS_BRIEF_DTO.get(1)))) .build()))) - .primaryKey(new LinkedHashSet<>(Set.of(PrimaryKeyDto.builder() + .primaryKey(new LinkedHashSet<>(List.of(PrimaryKeyDto.builder() .table(TABLE_2_BRIEF_DTO) - .column(TABLE_2_COLUMNS_BRIEF_0_DTO) + .column(TABLE_2_COLUMNS_BRIEF_DTO.get(0)) .id(COLUMN_2_1_ID) .build()))) .build(); - public static final Constraints TABLE_3_CONSTRAINTS = Constraints.builder() + public final Constraints TABLE_3_CONSTRAINTS = Constraints.builder() .checks(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>()) .uniques(new LinkedList<>()) @@ -8045,7 +8009,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final ConstraintsDto TABLE_3_CONSTRAINTS_DTO = ConstraintsDto.builder() + public final ConstraintsDto TABLE_3_CONSTRAINTS_DTO = ConstraintsDto.builder() .checks(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>()) .uniques(new LinkedList<>()) @@ -8056,7 +8020,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final Constraints TABLE_4_CONSTRAINTS = Constraints.builder() + public final Constraints TABLE_4_CONSTRAINTS = Constraints.builder() .checks(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>()) .uniques(new LinkedList<>()) @@ -8067,7 +8031,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final ConstraintsDto TABLE_4_CONSTRAINTS_DTO = ConstraintsDto.builder() + public final ConstraintsDto TABLE_4_CONSTRAINTS_DTO = ConstraintsDto.builder() .checks(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>()) .uniques(new LinkedList<>()) @@ -8078,7 +8042,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final Constraints TABLE_5_CONSTRAINTS = Constraints.builder() + public final Constraints TABLE_5_CONSTRAINTS = Constraints.builder() .checks(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>()) .uniques(new LinkedList<>()) @@ -8089,7 +8053,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final ConstraintsDto TABLE_5_CONSTRAINTS_DTO = ConstraintsDto.builder() + public final ConstraintsDto TABLE_5_CONSTRAINTS_DTO = ConstraintsDto.builder() .checks(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>()) .uniques(new LinkedList<>()) @@ -8100,7 +8064,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final Constraints TABLE_6_CONSTRAINTS = Constraints.builder() + public final Constraints TABLE_6_CONSTRAINTS = Constraints.builder() .checks(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>(List.of())) .uniques(new LinkedList<>()) @@ -8111,7 +8075,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final ConstraintsDto TABLE_6_CONSTRAINTS_DTO = ConstraintsDto.builder() + public final ConstraintsDto TABLE_6_CONSTRAINTS_DTO = ConstraintsDto.builder() .checks(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>()) .uniques(new LinkedList<>()) @@ -8122,7 +8086,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final Constraints TABLE_7_CONSTRAINTS = Constraints.builder() + public final Constraints TABLE_7_CONSTRAINTS = Constraints.builder() .checks(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>(List.of(ForeignKey.builder() .id(UUID.fromString("421c3dd8-ae09-4c72-a6ca-09de009e755f")) @@ -8160,7 +8124,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final ForeignKeyDto TABLE_7_CONSTRAINTS_FOREIGN_KEY_0_DTO = ForeignKeyDto.builder() + public final ForeignKeyDto TABLE_7_CONSTRAINTS_FOREIGN_KEY_0_DTO = ForeignKeyDto.builder() .id(UUID.fromString("561b4933-54e5-4dad-a536-39836da87fe3")) .name("fk_name_id") .onDelete(ReferenceTypeDto.NO_ACTION) @@ -8175,11 +8139,11 @@ public abstract class BaseTest { .onUpdate(ReferenceTypeDto.NO_ACTION) .build(); - public static final ForeignKeyBriefDto TABLE_7_CONSTRAINTS_FOREIGN_KEY_BRIEF_0_DTO = ForeignKeyBriefDto.builder() + public final ForeignKeyBriefDto TABLE_7_CONSTRAINTS_FOREIGN_KEY_BRIEF_0_DTO = ForeignKeyBriefDto.builder() .id(UUID.fromString("a92f09c5-9bce-4f77-8f7b-a9afc1d30ec2")) .build(); - public static final ForeignKeyDto TABLE_7_CONSTRAINTS_FOREIGN_KEY_1_DTO = ForeignKeyDto.builder() + public final ForeignKeyDto TABLE_7_CONSTRAINTS_FOREIGN_KEY_1_DTO = ForeignKeyDto.builder() .id(UUID.fromString("f2e82566-ddc3-4b76-8d27-adc3c51780a9")) .name("fk_zoo_id") .onDelete(ReferenceTypeDto.NO_ACTION) @@ -8194,11 +8158,11 @@ public abstract class BaseTest { .onUpdate(ReferenceTypeDto.NO_ACTION) .build(); - public static final ForeignKeyBriefDto TABLE_7_CONSTRAINTS_FOREIGN_KEY_BRIEF_1_DTO = ForeignKeyBriefDto.builder() + public final ForeignKeyBriefDto TABLE_7_CONSTRAINTS_FOREIGN_KEY_BRIEF_1_DTO = ForeignKeyBriefDto.builder() .id(UUID.fromString("6ce1f707-0bdf-4930-be77-157801d2735a")) .build(); - public static final ConstraintsDto TABLE_7_CONSTRAINTS_DTO = ConstraintsDto.builder() + public final ConstraintsDto TABLE_7_CONSTRAINTS_DTO = ConstraintsDto.builder() .checks(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>(List.of(TABLE_7_CONSTRAINTS_FOREIGN_KEY_0_DTO, TABLE_7_CONSTRAINTS_FOREIGN_KEY_1_DTO))) @@ -8210,7 +8174,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final Constraints TABLE_8_CONSTRAINTS = Constraints.builder() + public final Constraints TABLE_8_CONSTRAINTS = Constraints.builder() .checks(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>()) .uniques(new LinkedList<>()) @@ -8221,7 +8185,7 @@ public abstract class BaseTest { .build()))) .build(); - public static final ConstraintsDto TABLE_8_CONSTRAINTS_DTO = ConstraintsDto.builder() + public final ConstraintsDto TABLE_8_CONSTRAINTS_DTO = ConstraintsDto.builder() .checks(new LinkedHashSet<>()) .foreignKeys(new LinkedList<>()) .uniques(new LinkedList<>()) @@ -8232,12 +8196,12 @@ public abstract class BaseTest { .build()))) .build(); - public static final ExportResourceDto EXPORT_RESOURCE_DTO = ExportResourceDto.builder() + public final ExportResourceDto EXPORT_RESOURCE_DTO = ExportResourceDto.builder() .filename("68b329da9893e34099c7d8ad5cb9c940") .resource(new InputStreamResource(InputStream.nullInputStream())) .build(); - public static final QueryDto QUERY_1_DTO = QueryDto.builder() + public final QueryDto QUERY_1_DTO = QueryDto.builder() .id(QUERY_1_ID) .databaseId(DATABASE_1_ID) .query(QUERY_1_STATEMENT) @@ -8249,7 +8213,7 @@ public abstract class BaseTest { .resultNumber(3L) .build(); - public static final QueryDto QUERY_2_DTO = QueryDto.builder() + public final QueryDto QUERY_2_DTO = QueryDto.builder() .id(QUERY_2_ID) .databaseId(DATABASE_1_ID) .query(QUERY_2_STATEMENT) @@ -8263,7 +8227,7 @@ public abstract class BaseTest { .resultNumber(3L) .build(); - public static final QueryDto QUERY_3_DTO = QueryDto.builder() + public final QueryDto QUERY_3_DTO = QueryDto.builder() .id(QUERY_3_ID) .databaseId(DATABASE_1_ID) .query(QUERY_3_STATEMENT) @@ -8277,7 +8241,7 @@ public abstract class BaseTest { .resultNumber(2L) .build(); - public static final QueryDto QUERY_7_DTO = QueryDto.builder() + public final QueryDto QUERY_7_DTO = QueryDto.builder() .id(QUERY_7_ID) .databaseId(DATABASE_4_ID) .query(QUERY_7_STATEMENT) @@ -8291,7 +8255,7 @@ public abstract class BaseTest { .resultNumber(2L) .build(); - public static final QueryDto QUERY_6_DTO = QueryDto.builder() + public final QueryDto QUERY_6_DTO = QueryDto.builder() .id(QUERY_6_ID) .databaseId(DATABASE_1_ID) .query(QUERY_6_STATEMENT) @@ -8304,7 +8268,7 @@ public abstract class BaseTest { .isPersisted(QUERY_6_PERSISTED) .build(); - public static final QueryDto QUERY_8_DTO = QueryDto.builder() + public final QueryDto QUERY_8_DTO = QueryDto.builder() .id(QUERY_8_ID) .databaseId(DATABASE_2_ID) .query(QUERY_8_STATEMENT) @@ -8318,4 +8282,131 @@ public abstract class BaseTest { .resultNumber(3L) .build(); -} + public BaseTest() { + IMAGE_1_DTO.setOperators(IMAGE_1_OPERATORS_DTO); + CONTAINER_1_DTO.setImage(IMAGE_1_DTO); + IMAGE_1.setOperators(new LinkedList<>(IMAGE_1_OPERATORS)); + CONTAINER_1.setDatabases(new LinkedList<>(List.of(DATABASE_1, DATABASE_2, DATABASE_3))); + CONTAINER_4.setDatabases(new LinkedList<>(List.of(DATABASE_4))); + /* DATABASE 1 */ + DATABASE_1.setOwner(USER_1); + DATABASE_1.setSubsets(new LinkedList<>()); + DATABASE_1.setAccesses(new LinkedList<>(List.of(DATABASE_1_USER_1_READ_ACCESS, DATABASE_1_USER_2_WRITE_OWN_ACCESS, DATABASE_1_USER_3_WRITE_ALL_ACCESS))); + DATABASE_1_DTO.setAccesses(new LinkedList<>(List.of(DATABASE_1_USER_1_READ_ACCESS_DTO, DATABASE_1_USER_2_WRITE_OWN_ACCESS_DTO, DATABASE_1_USER_3_WRITE_ALL_ACCESS_DTO))); + DATABASE_1_PRIVILEGED_DTO.setAccesses(new LinkedList<>(List.of(DATABASE_1_USER_1_READ_ACCESS_DTO, DATABASE_1_USER_2_WRITE_OWN_ACCESS_DTO, DATABASE_1_USER_3_WRITE_ALL_ACCESS_DTO))); + TABLE_1.setDatabase(DATABASE_1); + TABLE_1.setColumns(new LinkedList<>(TABLE_1_COLUMNS)); + TABLE_1.setConstraints(TABLE_1_CONSTRAINTS); + VIEW_1_DTO.setIdentifiers(VIEW_1_DTO_IDENTIFIERS); + DATABASE_1.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_1, IDENTIFIER_2, IDENTIFIER_3, IDENTIFIER_4))); + IDENTIFIER_1.setDatabase(DATABASE_1); + IDENTIFIER_2.setDatabase(DATABASE_1); + IDENTIFIER_3.setDatabase(DATABASE_1); + IDENTIFIER_4.setDatabase(DATABASE_1); + DATABASE_1.setTables(new LinkedList<>(List.of(TABLE_1, TABLE_2, TABLE_3, TABLE_4))); + DATABASE_1.setViews(new LinkedList<>(List.of(VIEW_1, VIEW_2, VIEW_3))); + DATABASE_1_DTO.setContainer(CONTAINER_1_DTO); + DATABASE_1_DTO.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_1_DTO, IDENTIFIER_2_DTO, IDENTIFIER_3_DTO, IDENTIFIER_4_DTO))); + DATABASE_1_DTO.setTables(new LinkedList<>(List.of(TABLE_1_DTO, TABLE_2_DTO, TABLE_3_DTO, TABLE_4_DTO))); + DATABASE_1_DTO.setViews(new LinkedList<>(List.of(VIEW_1_DTO, VIEW_2_DTO, VIEW_3_DTO))); + TABLE_1_DTO.setColumns(new LinkedList<>(TABLE_1_COLUMNS_DTO)); + TABLE_1_DTO.setConstraints(TABLE_1_CONSTRAINTS_DTO); + TABLE_2.setDatabase(DATABASE_1); + TABLE_2.setColumns(new LinkedList<>(TABLE_2_COLUMNS)); + TABLE_2_CONSTRAINTS.getForeignKeys().get(0).getReferences().get(0).setForeignKey(TABLE_2_CONSTRAINTS.getForeignKeys().get(0)); + TABLE_2.setConstraints(TABLE_2_CONSTRAINTS); + TABLE_2_DTO.setColumns(new LinkedList<>(TABLE_2_COLUMNS_DTO)); + TABLE_2_DTO.setConstraints(TABLE_2_CONSTRAINTS_DTO); + TABLE_3.setDatabase(DATABASE_1); + TABLE_3.setColumns(new LinkedList<>(TABLE_3_COLUMNS)); + TABLE_3.setConstraints(TABLE_3_CONSTRAINTS); + TABLE_3_DTO.setColumns(new LinkedList<>(TABLE_3_COLUMNS_DTO)); + TABLE_3_DTO.setConstraints(TABLE_3_CONSTRAINTS_DTO); + TABLE_4.setDatabase(DATABASE_1); + TABLE_4.setColumns(new LinkedList<>(TABLE_4_COLUMNS)); + TABLE_4.setConstraints(TABLE_4_CONSTRAINTS); + TABLE_4_DTO.setColumns(TABLE_4_COLUMNS_DTO); + TABLE_4_DTO.setConstraints(TABLE_4_CONSTRAINTS_DTO); + VIEW_1.setDatabase(DATABASE_1); + VIEW_1.setColumns(new LinkedList<>(VIEW_1_COLUMNS)); + VIEW_1.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_3))); + VIEW_2.setDatabase(DATABASE_1); + VIEW_2.setColumns(new LinkedList<>(VIEW_2_COLUMNS)); + VIEW_3.setDatabase(DATABASE_1); + VIEW_3.setColumns(new LinkedList<>(VIEW_3_COLUMNS)); + IDENTIFIER_1.setDatabase(DATABASE_1); + IDENTIFIER_2.setDatabase(DATABASE_1); + IDENTIFIER_3.setDatabase(DATABASE_1); + IDENTIFIER_4.setDatabase(DATABASE_1); + /* DATABASE 2 */ + DATABASE_2.setAccesses(new LinkedList<>(List.of(DATABASE_2_USER_2_WRITE_ALL_ACCESS, DATABASE_2_USER_3_READ_ACCESS))); + DATABASE_2.setTables(new LinkedList<>(List.of(TABLE_5, TABLE_6, TABLE_7))); + VIEW_4.setColumns(new LinkedList<>(VIEW_4_COLUMNS)); + DATABASE_2.setViews(new LinkedList<>(List.of(VIEW_4))); + DATABASE_2.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_5))); + DATABASE_2_DTO.setAccesses(new LinkedList<>(List.of(DATABASE_2_USER_2_WRITE_ALL_ACCESS_DTO, DATABASE_2_USER_3_READ_ACCESS_DTO))); + DATABASE_2_DTO.setTables(new LinkedList<>(List.of(TABLE_5_DTO, TABLE_6_DTO, TABLE_7_DTO))); + DATABASE_2_DTO.setViews(new LinkedList<>(List.of(VIEW_4_DTO))); + DATABASE_2_DTO.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_5_DTO))); + DATABASE_2_PRIVILEGED_DTO.setAccesses(new LinkedList<>(List.of(DATABASE_2_USER_2_WRITE_ALL_ACCESS_DTO, DATABASE_2_USER_3_READ_ACCESS_DTO))); + DATABASE_2_PRIVILEGED_DTO.setTables(new LinkedList<>(List.of(TABLE_5_DTO, TABLE_6_DTO, TABLE_7_DTO))); + DATABASE_2_PRIVILEGED_DTO.setViews(new LinkedList<>(List.of(VIEW_4_DTO))); + DATABASE_2_PRIVILEGED_DTO.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_5_DTO))); + TABLE_5.setDatabase(DATABASE_2); + TABLE_5.setColumns(new LinkedList<>(TABLE_5_COLUMNS)); + TABLE_5.setConstraints(TABLE_5_CONSTRAINTS); + TABLE_5_DTO.setColumns(new LinkedList<>(TABLE_5_COLUMNS_DTO)); + TABLE_5_DTO.setConstraints(TABLE_5_CONSTRAINTS_DTO); + TABLE_6.setDatabase(DATABASE_2); + TABLE_6.setColumns(new LinkedList<>(TABLE_6_COLUMNS)); + TABLE_6.setConstraints(TABLE_6_CONSTRAINTS); + TABLE_7.setDatabase(DATABASE_2); + TABLE_7.setColumns(new LinkedList<>(TABLE_7_COLUMNS)); + TABLE_7.setConstraints(TABLE_7_CONSTRAINTS); + TABLE_7_CONSTRAINTS.getForeignKeys().get(0).getReferences().get(0).setForeignKey(TABLE_7_CONSTRAINTS.getForeignKeys().get(0)); + TABLE_7_CONSTRAINTS.getForeignKeys().get(1).getReferences().get(0).setForeignKey(TABLE_7_CONSTRAINTS.getForeignKeys().get(1)); + TABLE_7_DTO.setColumns(TABLE_7_COLUMNS_DTO); + TABLE_7_DTO.setConstraints(TABLE_7_CONSTRAINTS_DTO); + TABLE_7_CONSTRAINTS_DTO.getForeignKeys().get(0).getReferences().get(0).setForeignKey(TABLE_7_CONSTRAINTS_FOREIGN_KEY_BRIEF_0_DTO); + TABLE_7_CONSTRAINTS_DTO.getForeignKeys().get(1).getReferences().get(0).setForeignKey(TABLE_7_CONSTRAINTS_FOREIGN_KEY_BRIEF_1_DTO); + VIEW_4.setDatabase(DATABASE_2); + IDENTIFIER_5.setDatabase(DATABASE_2); + /* DATABASE 3 */ + DATABASE_3.setTables(new LinkedList<>(List.of(TABLE_8))); + DATABASE_3.setViews(new LinkedList<>(List.of(VIEW_5))); + DATABASE_3.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_6))); + DATABASE_3.setAccesses(new LinkedList<>(List.of(DATABASE_3_USER_1_WRITE_ALL_ACCESS))); + DATABASE_3_DTO.setTables(new LinkedList<>(List.of(TABLE_8_DTO))); + DATABASE_3_DTO.setViews(new LinkedList<>(List.of(VIEW_5_DTO))); + DATABASE_3_DTO.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_6_DTO))); + DATABASE_3_DTO.setAccesses(new LinkedList<>(List.of(DATABASE_3_USER_1_WRITE_ALL_ACCESS_DTO))); + DATABASE_3_PRIVILEGED_DTO.setAccesses(new LinkedList<>(List.of(DATABASE_3_USER_1_WRITE_ALL_ACCESS_DTO))); + DATABASE_3_PRIVILEGED_DTO.setTables(new LinkedList<>(List.of(TABLE_8_DTO))); + DATABASE_3_PRIVILEGED_DTO.setViews(new LinkedList<>(List.of(VIEW_5_DTO))); + DATABASE_3_PRIVILEGED_DTO.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_6_DTO))); + TABLE_8.setDatabase(DATABASE_3); + TABLE_8.setColumns(new LinkedList<>(TABLE_8_COLUMNS)); + TABLE_8.setConstraints(TABLE_8_CONSTRAINTS); + TABLE_8_DTO.setColumns(new LinkedList<>(TABLE_8_COLUMNS_DTO)); + TABLE_8_DTO.setConstraints(TABLE_8_CONSTRAINTS_DTO); + VIEW_5.setDatabase(DATABASE_3); + VIEW_5.setColumns(VIEW_5_COLUMNS); + VIEW_5_DTO.setColumns(VIEW_5_COLUMNS_DTO); + IDENTIFIER_6.setDatabase(DATABASE_3); + /* DATABASE 4 */ + DATABASE_4.setAccesses(new LinkedList<>(List.of(DATABASE_4_USER_1_READ_ACCESS, DATABASE_4_USER_2_WRITE_OWN_ACCESS, DATABASE_4_USER_3_WRITE_ALL_ACCESS))); + DATABASE_4.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_7))); + DATABASE_4_DTO.setTables(new LinkedList<>(List.of(TABLE_9_DTO))); + DATABASE_4_DTO.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_7_DTO))); + DATABASE_4_PRIVILEGED_DTO.setTables(new LinkedList<>(List.of(TABLE_9_DTO))); + DATABASE_4_PRIVILEGED_DTO.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_7_DTO))); + TABLE_9.setDatabase(DATABASE_4); + TABLE_9.setColumns(TABLE_9_COLUMNS); + TABLE_9.setConstraints(TABLE_9_CONSTRAINTS); + TABLE_9_DTO.setColumns(TABLE_9_COLUMNS_DTO); + TABLE_9_DTO.setConstraints(TABLE_9_CONSTRAINTS_DTO); + IDENTIFIER_7.setStatus(IdentifierStatusType.DRAFT); + IDENTIFIER_7.setDatabase(DATABASE_4); + } + +} \ No newline at end of file diff --git a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/dto/LocaleDto.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/dto/LocaleDto.java similarity index 86% rename from dbrepo-metadata-service/test/src/main/java/at/tuwien/test/dto/LocaleDto.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/dto/LocaleDto.java index d14ad880d9..bec6d7ea05 100644 --- a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/dto/LocaleDto.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/dto/LocaleDto.java @@ -1,4 +1,4 @@ -package at.tuwien.test.dto; +package at.ac.tuwien.ifs.dbrepo.core.test.dto; import lombok.*; diff --git a/dbrepo-metadata-service/test/pom.xml b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/pom.xml similarity index 94% rename from dbrepo-metadata-service/test/pom.xml rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/pom.xml index b6bf12dfa4..a7995dec69 100644 --- a/dbrepo-metadata-service/test/pom.xml +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/pom.xml @@ -6,12 +6,12 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-metadata-service</artifactId> - <version>1.7.3</version> + <version>1.8.0</version> </parent> <artifactId>dbrepo-metadata-service-test</artifactId> <name>dbrepo-metadata-service-test</name> - <version>1.7.3</version> + <version>1.8.0</version> <dependencies> <dependency> diff --git a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/utils/ArrayUtils.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/utils/ArrayUtils.java similarity index 87% rename from dbrepo-metadata-service/test/src/main/java/at/tuwien/test/utils/ArrayUtils.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/utils/ArrayUtils.java index 50dff12d85..c30116295f 100644 --- a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/utils/ArrayUtils.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/utils/ArrayUtils.java @@ -1,4 +1,4 @@ -package at.tuwien.test.utils; +package at.ac.tuwien.ifs.dbrepo.core.test.utils; import java.util.Arrays; import java.util.LinkedList; diff --git a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/utils/EndpointUtils.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/utils/EndpointUtils.java similarity index 94% rename from dbrepo-metadata-service/test/src/main/java/at/tuwien/test/utils/EndpointUtils.java rename to lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/utils/EndpointUtils.java index a2101bf3ab..56adf110c9 100644 --- a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/utils/EndpointUtils.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/utils/EndpointUtils.java @@ -1,6 +1,6 @@ -package at.tuwien.test.utils; +package at.ac.tuwien.ifs.dbrepo.core.test.utils; -import at.tuwien.test.dto.LocaleDto; +import at.ac.tuwien.ifs.dbrepo.core.test.dto.LocaleDto; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.config.BeanDefinition; diff --git a/lib/python/Makefile b/lib/python/Makefile deleted file mode 100644 index afebb199ac..0000000000 --- a/lib/python/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -all: build - -clean: - rm -rf ./python/dist/* ./docs/build/* ./dist/* - -docs: clean - sphinx-apidoc -o ./docs/source ./dbrepo - sphinx-build -M html ./docs/ ./docs/build/ - -check: - python3 ./python/setup.py develop - -build: clean - python3 -m build --sdist . - python3 -m build --wheel . - -deploy: build - python3 -m twine upload --config-file ~/.pypirc --verbose --repository pypi ./dist/dbrepo-* - -deploy-test: build - python3 -m twine upload --config-file ~/.pypirc --verbose --repository testpypi ./dist/dbrepo-* - -FORCE: ; \ No newline at end of file diff --git a/lib/python/Pipfile b/lib/python/Pipfile index b7ebe44f3a..e9fb9d2177 100644 --- a/lib/python/Pipfile +++ b/lib/python/Pipfile @@ -10,6 +10,9 @@ paho-mqtt = "*" pydantic = "*" tuspy = "*" pandas = "*" +jwt = "~=1.3" +grafana-client = "*" +opensearch-py = "~=2.2" [dev-packages] build = "*" @@ -22,6 +25,8 @@ requests-mock = "*" furo = "*" pytest-ordering = "*" httpx = "*" +testcontainers-minio = "*" +testcontainers-opensearch = "*" [requires] python_version = "3.11" diff --git a/lib/python/Pipfile.lock b/lib/python/Pipfile.lock index d4c90209c0..a0cbd664ae 100644 --- a/lib/python/Pipfile.lock +++ b/lib/python/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "049bd8a6ac52e886dce11e7d7de630464e073e360471f35125a2eccf7c30a7a7" + "sha256": "b4e4c9e239afef86e7bfbe56d0f92336cacdc3fa9e4f85c0f51c8551771396ae" }, "pipfile-spec": 6, "requires": { @@ -18,98 +18,98 @@ "default": { "aiohappyeyeballs": { "hashes": [ - "sha256:147ec992cf873d74f5062644332c539fcd42956dc69453fe5204195e560517e1", - "sha256:9b05052f9042985d32ecbe4b59a77ae19c006a78f1344d7fdad69d28ded3d0b0" + "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", + "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8" ], "markers": "python_version >= '3.9'", - "version": "==2.4.6" + "version": "==2.6.1" }, "aiohttp": { "hashes": [ - "sha256:0450ada317a65383b7cce9576096150fdb97396dcfe559109b403c7242faffef", - "sha256:0b5263dcede17b6b0c41ef0c3ccce847d82a7da98709e75cf7efde3e9e3b5cae", - "sha256:0d5176f310a7fe6f65608213cc74f4228e4f4ce9fd10bcb2bb6da8fc66991462", - "sha256:0ed49efcd0dc1611378beadbd97beb5d9ca8fe48579fc04a6ed0844072261b6a", - "sha256:145a73850926018ec1681e734cedcf2716d6a8697d90da11284043b745c286d5", - "sha256:1987770fb4887560363b0e1a9b75aa303e447433c41284d3af2840a2f226d6e0", - "sha256:246067ba0cf5560cf42e775069c5d80a8989d14a7ded21af529a4e10e3e0f0e6", - "sha256:2c311e2f63e42c1bf86361d11e2c4a59f25d9e7aabdbdf53dc38b885c5435cdb", - "sha256:2cee3b117a8d13ab98b38d5b6bdcd040cfb4181068d05ce0c474ec9db5f3c5bb", - "sha256:2de1378f72def7dfb5dbd73d86c19eda0ea7b0a6873910cc37d57e80f10d64e1", - "sha256:30f546358dfa0953db92ba620101fefc81574f87b2346556b90b5f3ef16e55ce", - "sha256:34245498eeb9ae54c687a07ad7f160053911b5745e186afe2d0c0f2898a1ab8a", - "sha256:392432a2dde22b86f70dd4a0e9671a349446c93965f261dbaecfaf28813e5c42", - "sha256:3c0600bcc1adfaaac321422d615939ef300df81e165f6522ad096b73439c0f58", - "sha256:4016e383f91f2814e48ed61e6bda7d24c4d7f2402c75dd28f7e1027ae44ea204", - "sha256:40cd36749a1035c34ba8d8aaf221b91ca3d111532e5ccb5fa8c3703ab1b967ed", - "sha256:413ad794dccb19453e2b97c2375f2ca3cdf34dc50d18cc2693bd5aed7d16f4b9", - "sha256:4a93d28ed4b4b39e6f46fd240896c29b686b75e39cc6992692e3922ff6982b4c", - "sha256:4ee84c2a22a809c4f868153b178fe59e71423e1f3d6a8cd416134bb231fbf6d3", - "sha256:50c5c7b8aa5443304c55c262c5693b108c35a3b61ef961f1e782dd52a2f559c7", - "sha256:525410e0790aab036492eeea913858989c4cb070ff373ec3bc322d700bdf47c1", - "sha256:526c900397f3bbc2db9cb360ce9c35134c908961cdd0ac25b1ae6ffcaa2507ff", - "sha256:54775858c7f2f214476773ce785a19ee81d1294a6bedc5cc17225355aab74802", - "sha256:584096938a001378484aa4ee54e05dc79c7b9dd933e271c744a97b3b6f644957", - "sha256:6130459189e61baac5a88c10019b21e1f0c6d00ebc770e9ce269475650ff7f73", - "sha256:67453e603cea8e85ed566b2700efa1f6916aefbc0c9fcb2e86aaffc08ec38e78", - "sha256:68d54234c8d76d8ef74744f9f9fc6324f1508129e23da8883771cdbb5818cbef", - "sha256:6dfe7f984f28a8ae94ff3a7953cd9678550dbd2a1f9bda5dd9c5ae627744c78e", - "sha256:74bd573dde27e58c760d9ca8615c41a57e719bff315c9adb6f2a4281a28e8798", - "sha256:7603ca26d75b1b86160ce1bbe2787a0b706e592af5b2504e12caa88a217767b0", - "sha256:76719dd521c20a58a6c256d058547b3a9595d1d885b830013366e27011ffe804", - "sha256:7c3623053b85b4296cd3925eeb725e386644fd5bc67250b3bb08b0f144803e7b", - "sha256:7e44eba534381dd2687be50cbd5f2daded21575242ecfdaf86bbeecbc38dae8e", - "sha256:7fe3d65279bfbee8de0fb4f8c17fc4e893eed2dba21b2f680e930cc2b09075c5", - "sha256:8340def6737118f5429a5df4e88f440746b791f8f1c4ce4ad8a595f42c980bd5", - "sha256:84ede78acde96ca57f6cf8ccb8a13fbaf569f6011b9a52f870c662d4dc8cd854", - "sha256:850ff6155371fd802a280f8d369d4e15d69434651b844bde566ce97ee2277420", - "sha256:87a2e00bf17da098d90d4145375f1d985a81605267e7f9377ff94e55c5d769eb", - "sha256:88d385b8e7f3a870146bf5ea31786ef7463e99eb59e31db56e2315535d811f55", - "sha256:8a2fb742ef378284a50766e985804bd6adb5adb5aa781100b09befdbfa757b65", - "sha256:8dc0fba9a74b471c45ca1a3cb6e6913ebfae416678d90529d188886278e7f3f6", - "sha256:8fa1510b96c08aaad49303ab11f8803787c99222288f310a62f493faf883ede1", - "sha256:8fd12d0f989c6099e7b0f30dc6e0d1e05499f3337461f0b2b0dadea6c64b89df", - "sha256:9060addfa4ff753b09392efe41e6af06ea5dd257829199747b9f15bfad819460", - "sha256:930ffa1925393381e1e0a9b82137fa7b34c92a019b521cf9f41263976666a0d6", - "sha256:936d8a4f0f7081327014742cd51d320296b56aa6d324461a13724ab05f4b2933", - "sha256:97fe431f2ed646a3b56142fc81d238abcbaff08548d6912acb0b19a0cadc146b", - "sha256:9bd8695be2c80b665ae3f05cb584093a1e59c35ecb7d794d1edd96e8cc9201d7", - "sha256:9dec0000d2d8621d8015c293e24589d46fa218637d820894cb7356c77eca3259", - "sha256:a478aa11b328983c4444dacb947d4513cb371cd323f3845e53caeda6be5589d5", - "sha256:a481a574af914b6e84624412666cbfbe531a05667ca197804ecc19c97b8ab1b0", - "sha256:a4ac6a0f0f6402854adca4e3259a623f5c82ec3f0c049374133bcb243132baf9", - "sha256:a5e69046f83c0d3cb8f0d5bd9b8838271b1bc898e01562a04398e160953e8eb9", - "sha256:a7442662afebbf7b4c6d28cb7aab9e9ce3a5df055fc4116cc7228192ad6cb484", - "sha256:aa8a8caca81c0a3e765f19c6953416c58e2f4cc1b84829af01dd1c771bb2f91f", - "sha256:ab3247d58b393bda5b1c8f31c9edece7162fc13265334217785518dd770792b8", - "sha256:b10a47e5390c4b30a0d58ee12581003be52eedd506862ab7f97da7a66805befb", - "sha256:b34508f1cd928ce915ed09682d11307ba4b37d0708d1f28e5774c07a7674cac9", - "sha256:b8d3bb96c147b39c02d3db086899679f31958c5d81c494ef0fc9ef5bb1359b3d", - "sha256:b9d45dbb3aaec05cf01525ee1a7ac72de46a8c425cb75c003acd29f76b1ffe94", - "sha256:bf4480a5438f80e0f1539e15a7eb8b5f97a26fe087e9828e2c0ec2be119a9f72", - "sha256:c160a04283c8c6f55b5bf6d4cad59bb9c5b9c9cd08903841b25f1f7109ef1259", - "sha256:c96a43822f1f9f69cc5c3706af33239489a6294be486a0447fb71380070d4d5f", - "sha256:c9fd9dcf9c91affe71654ef77426f5cf8489305e1c66ed4816f5a21874b094b9", - "sha256:cddb31f8474695cd61fc9455c644fc1606c164b93bff2490390d90464b4655df", - "sha256:ce1bb21fc7d753b5f8a5d5a4bae99566386b15e716ebdb410154c16c91494d7f", - "sha256:d1c031a7572f62f66f1257db37ddab4cb98bfaf9b9434a3b4840bf3560f5e788", - "sha256:d589264dbba3b16e8951b6f145d1e6b883094075283dafcab4cdd564a9e353a0", - "sha256:dc065a4285307607df3f3686363e7f8bdd0d8ab35f12226362a847731516e42c", - "sha256:e10c440d142fa8b32cfdb194caf60ceeceb3e49807072e0dc3a8887ea80e8c16", - "sha256:e3552fe98e90fdf5918c04769f338a87fa4f00f3b28830ea9b78b1bdc6140e0d", - "sha256:e392804a38353900c3fd8b7cacbea5132888f7129f8e241915e90b85f00e3250", - "sha256:e4cecdb52aaa9994fbed6b81d4568427b6002f0a91c322697a4bfcc2b2363f5a", - "sha256:e5148ca8955affdfeb864aca158ecae11030e952b25b3ae15d4e2b5ba299bad2", - "sha256:e6b2732ef3bafc759f653a98881b5b9cdef0716d98f013d376ee8dfd7285abf1", - "sha256:ea756b5a7bac046d202a9a3889b9a92219f885481d78cd318db85b15cc0b7bcf", - "sha256:edb69b9589324bdc40961cdf0657815df674f1743a8d5ad9ab56a99e4833cfdd", - "sha256:f0203433121484b32646a5f5ea93ae86f3d9559d7243f07e8c0eab5ff8e3f70e", - "sha256:f6a19bcab7fbd8f8649d6595624856635159a6527861b9cdc3447af288a00c00", - "sha256:f752e80606b132140883bb262a457c475d219d7163d996dc9072434ffb0784c4", - "sha256:f7914ab70d2ee8ab91c13e5402122edbc77821c66d2758abb53aabe87f013287" + "sha256:04eb541ce1e03edc1e3be1917a0f45ac703e913c21a940111df73a2c2db11d73", + "sha256:05582cb2d156ac7506e68b5eac83179faedad74522ed88f88e5861b78740dc0e", + "sha256:0a29be28e60e5610d2437b5b2fed61d6f3dcde898b57fb048aa5079271e7f6f3", + "sha256:0b2501f1b981e70932b4a552fc9b3c942991c7ae429ea117e8fba57718cdeed0", + "sha256:0df3788187559c262922846087e36228b75987f3ae31dd0a1e5ee1034090d42f", + "sha256:12c5869e7ddf6b4b1f2109702b3cd7515667b437da90a5a4a50ba1354fe41881", + "sha256:14fc03508359334edc76d35b2821832f092c8f092e4b356e74e38419dfe7b6de", + "sha256:1a7169ded15505f55a87f8f0812c94c9412623c744227b9e51083a72a48b68a5", + "sha256:1c68e41c4d576cd6aa6c6d2eddfb32b2acfb07ebfbb4f9da991da26633a3db1a", + "sha256:20412c7cc3720e47a47e63c0005f78c0c2370020f9f4770d7fc0075f397a9fb0", + "sha256:22a8107896877212130c58f74e64b77f7007cb03cea8698be317272643602d45", + "sha256:28a3d083819741592685762d51d789e6155411277050d08066537c5edc4066e6", + "sha256:2b86efe23684b58a88e530c4ab5b20145f102916bbb2d82942cafec7bd36a647", + "sha256:2d0b46abee5b5737cb479cc9139b29f010a37b1875ee56d142aefc10686a390b", + "sha256:321238a42ed463848f06e291c4bbfb3d15ba5a79221a82c502da3e23d7525d06", + "sha256:3a8a0d127c10b8d89e69bbd3430da0f73946d839e65fec00ae48ca7916a31948", + "sha256:3a8b0321e40a833e381d127be993b7349d1564b756910b28b5f6588a159afef3", + "sha256:3b420d076a46f41ea48e5fcccb996f517af0d406267e31e6716f480a3d50d65c", + "sha256:3b512f1de1c688f88dbe1b8bb1283f7fbeb7a2b2b26e743bb2193cbadfa6f307", + "sha256:413fe39fd929329f697f41ad67936f379cba06fcd4c462b62e5b0f8061ee4a77", + "sha256:41cf0cefd9e7b5c646c2ef529c8335e7eafd326f444cc1cdb0c47b6bc836f9be", + "sha256:4848ae31ad44330b30f16c71e4f586cd5402a846b11264c412de99fa768f00f3", + "sha256:4b0a200e85da5c966277a402736a96457b882360aa15416bf104ca81e6f5807b", + "sha256:4e2e8ef37d4bc110917d038807ee3af82700a93ab2ba5687afae5271b8bc50ff", + "sha256:4edcbe34e6dba0136e4cabf7568f5a434d89cc9de5d5155371acda275353d228", + "sha256:51ba80d473eb780a329d73ac8afa44aa71dfb521693ccea1dea8b9b5c4df45ce", + "sha256:5409a59d5057f2386bb8b8f8bbcfb6e15505cedd8b2445db510563b5d7ea1186", + "sha256:572def4aad0a4775af66d5a2b5923c7de0820ecaeeb7987dcbccda2a735a993f", + "sha256:599b66582f7276ebefbaa38adf37585e636b6a7a73382eb412f7bc0fc55fb73d", + "sha256:59a05cdc636431f7ce843c7c2f04772437dd816a5289f16440b19441be6511f1", + "sha256:602d4db80daf4497de93cb1ce00b8fc79969c0a7cf5b67bec96fa939268d806a", + "sha256:65c75b14ee74e8eeff2886321e76188cbe938d18c85cff349d948430179ad02c", + "sha256:69bb252bfdca385ccabfd55f4cd740d421dd8c8ad438ded9637d81c228d0da49", + "sha256:6d3986112e34eaa36e280dc8286b9dd4cc1a5bcf328a7f147453e188f6fe148f", + "sha256:6dd9766da617855f7e85f27d2bf9a565ace04ba7c387323cd3e651ac4329db91", + "sha256:70ab0f61c1a73d3e0342cedd9a7321425c27a7067bebeeacd509f96695b875fc", + "sha256:749f1eb10e51dbbcdba9df2ef457ec060554842eea4d23874a3e26495f9e87b1", + "sha256:781c8bd423dcc4641298c8c5a2a125c8b1c31e11f828e8d35c1d3a722af4c15a", + "sha256:7e7abe865504f41b10777ac162c727af14e9f4db9262e3ed8254179053f63e6d", + "sha256:7f2dadece8b85596ac3ab1ec04b00694bdd62abc31e5618f524648d18d9dd7fa", + "sha256:86135c32d06927339c8c5e64f96e4eee8825d928374b9b71a3c42379d7437058", + "sha256:8778620396e554b758b59773ab29c03b55047841d8894c5e335f12bfc45ebd28", + "sha256:87f0e003fb4dd5810c7fbf47a1239eaa34cd929ef160e0a54c570883125c4831", + "sha256:8aa5c68e1e68fff7cd3142288101deb4316b51f03d50c92de6ea5ce646e6c71f", + "sha256:8d14e274828561db91e4178f0057a915f3af1757b94c2ca283cb34cbb6e00b50", + "sha256:8d1dd75aa4d855c7debaf1ef830ff2dfcc33f893c7db0af2423ee761ebffd22b", + "sha256:92007c89a8cb7be35befa2732b0b32bf3a394c1b22ef2dff0ef12537d98a7bda", + "sha256:92868f6512714efd4a6d6cb2bfc4903b997b36b97baea85f744229f18d12755e", + "sha256:948abc8952aff63de7b2c83bfe3f211c727da3a33c3a5866a0e2cf1ee1aa950f", + "sha256:95d7787f2bcbf7cb46823036a8d64ccfbc2ffc7d52016b4044d901abceeba3db", + "sha256:997b57e38aa7dc6caab843c5e042ab557bc83a2f91b7bd302e3c3aebbb9042a1", + "sha256:99b8bbfc8111826aa8363442c0fc1f5751456b008737ff053570f06a151650b3", + "sha256:9e73fa341d8b308bb799cf0ab6f55fc0461d27a9fa3e4582755a3d81a6af8c09", + "sha256:a0d2c04a623ab83963576548ce098baf711a18e2c32c542b62322a0b4584b990", + "sha256:a40087b82f83bd671cbeb5f582c233d196e9653220404a798798bfc0ee189fff", + "sha256:ad1f2fb9fe9b585ea4b436d6e998e71b50d2b087b694ab277b30e060c434e5db", + "sha256:b05774864c87210c531b48dfeb2f7659407c2dda8643104fb4ae5e2c311d12d9", + "sha256:b41693b7388324b80f9acfabd479bd1c84f0bc7e8f17bab4ecd9675e9ff9c734", + "sha256:b42dbd097abb44b3f1156b4bf978ec5853840802d6eee2784857be11ee82c6a0", + "sha256:b4e7c7ec4146a94a307ca4f112802a8e26d969018fabed526efc340d21d3e7d0", + "sha256:b59d096b5537ec7c85954cb97d821aae35cfccce3357a2cafe85660cc6295628", + "sha256:b9c60d1de973ca94af02053d9b5111c4fbf97158e139b14f1be68337be267be6", + "sha256:bccd2cb7aa5a3bfada72681bdb91637094d81639e116eac368f8b3874620a654", + "sha256:c32593ead1a8c6aabd58f9d7ee706e48beac796bb0cb71d6b60f2c1056f0a65f", + "sha256:c7571f99525c76a6280f5fe8e194eeb8cb4da55586c3c61c59c33a33f10cfce7", + "sha256:c8b2df9feac55043759aa89f722a967d977d80f8b5865a4153fc41c93b957efc", + "sha256:ca9f835cdfedcb3f5947304e85b8ca3ace31eef6346d8027a97f4de5fb687534", + "sha256:cc9253069158d57e27d47a8453d8a2c5a370dc461374111b5184cf2f147a3cc3", + "sha256:ced66c5c6ad5bcaf9be54560398654779ec1c3695f1a9cf0ae5e3606694a000a", + "sha256:d173c0ac508a2175f7c9a115a50db5fd3e35190d96fdd1a17f9cb10a6ab09aa1", + "sha256:d6edc538c7480fa0a3b2bdd705f8010062d74700198da55d16498e1b49549b9c", + "sha256:daf20d9c3b12ae0fdf15ed92235e190f8284945563c4b8ad95b2d7a31f331cd3", + "sha256:dc311634f6f28661a76cbc1c28ecf3b3a70a8edd67b69288ab7ca91058eb5a33", + "sha256:e2bc827c01f75803de77b134afdbf74fa74b62970eafdf190f3244931d7a5c0d", + "sha256:e365034c5cf6cf74f57420b57682ea79e19eb29033399dd3f40de4d0171998fa", + "sha256:e906da0f2bcbf9b26cc2b144929e88cb3bf943dd1942b4e5af066056875c7618", + "sha256:e9faafa74dbb906b2b6f3eb9942352e9e9db8d583ffed4be618a89bd71a4e914", + "sha256:ec6cd1954ca2bbf0970f531a628da1b1338f594bf5da7e361e19ba163ecc4f3b", + "sha256:f296d637a50bb15fb6a229fbb0eb053080e703b53dbfe55b1e4bb1c5ed25d325", + "sha256:f30fc72daf85486cdcdfc3f5e0aea9255493ef499e31582b34abadbfaafb0965", + "sha256:fe846f0a98aa9913c2852b630cd39b4098f296e0907dd05f6c7b30d911afa4c3" ], "markers": "python_version >= '3.9'", - "version": "==3.11.12" + "version": "==3.11.14" }, "aiosignal": { "hashes": [ @@ -129,11 +129,11 @@ }, "attrs": { "hashes": [ - "sha256:1c97078a80c814273a76b2a298a932eb681c87415c11dee0a6921de7f1b02c3e", - "sha256:c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a" + "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", + "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b" ], "markers": "python_version >= '3.8'", - "version": "==25.1.0" + "version": "==25.3.0" }, "certifi": { "hashes": [ @@ -143,6 +143,79 @@ "markers": "python_version >= '3.6'", "version": "==2025.1.31" }, + "cffi": { + "hashes": [ + "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", + "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", + "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1", + "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", + "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", + "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", + "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8", + "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36", + "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", + "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", + "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc", + "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", + "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", + "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", + "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", + "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", + "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", + "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", + "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", + "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b", + "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", + "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", + "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c", + "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", + "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", + "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", + "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8", + "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1", + "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", + "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", + "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", + "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595", + "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0", + "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", + "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", + "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", + "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", + "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", + "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", + "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16", + "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", + "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e", + "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", + "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964", + "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", + "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576", + "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", + "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3", + "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662", + "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", + "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", + "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", + "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", + "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", + "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", + "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", + "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", + "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9", + "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7", + "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", + "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a", + "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", + "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", + "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", + "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", + "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", + "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b" + ], + "markers": "platform_python_implementation != 'PyPy'", + "version": "==1.17.1" + }, "charset-normalizer": { "hashes": [ "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", @@ -241,6 +314,53 @@ "markers": "python_version >= '3.7'", "version": "==3.4.1" }, + "cryptography": { + "hashes": [ + "sha256:04abd71114848aa25edb28e225ab5f268096f44cf0127f3d36975bdf1bdf3390", + "sha256:0529b1d5a0105dd3731fa65680b45ce49da4d8115ea76e9da77a875396727b41", + "sha256:1bc312dfb7a6e5d66082c87c34c8a62176e684b6fe3d90fcfe1568de675e6688", + "sha256:268e4e9b177c76d569e8a145a6939eca9a5fec658c932348598818acf31ae9a5", + "sha256:29ecec49f3ba3f3849362854b7253a9f59799e3763b0c9d0826259a88efa02f1", + "sha256:2bf7bf75f7df9715f810d1b038870309342bff3069c5bd8c6b96128cb158668d", + "sha256:3b721b8b4d948b218c88cb8c45a01793483821e709afe5f622861fc6182b20a7", + "sha256:3c00b6b757b32ce0f62c574b78b939afab9eecaf597c4d624caca4f9e71e7843", + "sha256:3dc62975e31617badc19a906481deacdeb80b4bb454394b4098e3f2525a488c5", + "sha256:4973da6ca3db4405c54cd0b26d328be54c7747e89e284fcff166132eb7bccc9c", + "sha256:4e389622b6927d8133f314949a9812972711a111d577a5d1f4bee5e58736b80a", + "sha256:51e4de3af4ec3899d6d178a8c005226491c27c4ba84101bfb59c901e10ca9f79", + "sha256:5f6f90b72d8ccadb9c6e311c775c8305381db88374c65fa1a68250aa8a9cb3a6", + "sha256:6210c05941994290f3f7f175a4a57dbbb2afd9273657614c506d5976db061181", + "sha256:6f101b1f780f7fc613d040ca4bdf835c6ef3b00e9bd7125a4255ec574c7916e4", + "sha256:7bdcd82189759aba3816d1f729ce42ffded1ac304c151d0a8e89b9996ab863d5", + "sha256:7ca25849404be2f8e4b3c59483d9d3c51298a22c1c61a0e84415104dacaf5562", + "sha256:81276f0ea79a208d961c433a947029e1a15948966658cf6710bbabb60fcc2639", + "sha256:8cadc6e3b5a1f144a039ea08a0bdb03a2a92e19c46be3285123d32029f40a922", + "sha256:8e0ddd63e6bf1161800592c71ac794d3fb8001f2caebe0966e77c5234fa9efc3", + "sha256:909c97ab43a9c0c0b0ada7a1281430e4e5ec0458e6d9244c0e821bbf152f061d", + "sha256:96e7a5e9d6e71f9f4fca8eebfd603f8e86c5225bb18eb621b2c1e50b290a9471", + "sha256:9a1e657c0f4ea2a23304ee3f964db058c9e9e635cc7019c4aa21c330755ef6fd", + "sha256:9eb9d22b0a5d8fd9925a7764a054dca914000607dff201a24c791ff5c799e1fa", + "sha256:af4ff3e388f2fa7bff9f7f2b31b87d5651c45731d3e8cfa0944be43dff5cfbdb", + "sha256:b042d2a275c8cee83a4b7ae30c45a15e6a4baa65a179a0ec2d78ebb90e4f6699", + "sha256:bc821e161ae88bfe8088d11bb39caf2916562e0a2dc7b6d56714a48b784ef0bb", + "sha256:c505d61b6176aaf982c5717ce04e87da5abc9a36a5b39ac03905c4aafe8de7aa", + "sha256:c63454aa261a0cf0c5b4718349629793e9e634993538db841165b3df74f37ec0", + "sha256:c7362add18b416b69d58c910caa217f980c5ef39b23a38a0880dfd87bdf8cd23", + "sha256:d03806036b4f89e3b13b6218fefea8d5312e450935b1a2d55f0524e2ed7c59d9", + "sha256:d1b3031093a366ac767b3feb8bcddb596671b3aaff82d4050f984da0c248b615", + "sha256:d1c3572526997b36f245a96a2b1713bf79ce99b271bbcf084beb6b9b075f29ea", + "sha256:efcfe97d1b3c79e486554efddeb8f6f53a4cdd4cf6086642784fa31fc384e1d7", + "sha256:f514ef4cd14bb6fb484b4a60203e912cfcb64f2ab139e88c2274511514bf7308" + ], + "markers": "python_version >= '3.7' and python_full_version not in '3.9.0, 3.9.1'", + "version": "==44.0.2" + }, + "events": { + "hashes": [ + "sha256:a7286af378ba3e46640ac9825156c93bdba7502174dd696090fdfcd4d80a1abd" + ], + "version": "==0.5" + }, "frozenlist": { "hashes": [ "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e", @@ -339,6 +459,22 @@ "markers": "python_version >= '3.8'", "version": "==1.5.0" }, + "grafana-client": { + "hashes": [ + "sha256:2477a47b923fd0637947e620b0b777c641af18a3025464fa4505783dbf05dfcc", + "sha256:8cb61bb2a87ec07bca10974df276b9a1a95bfdb63f3a696f065692ffc9b8c389" + ], + "index": "pypi", + "version": "==4.3.2" + }, + "h11": { + "hashes": [ + "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", + "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761" + ], + "markers": "python_version >= '3.7'", + "version": "==0.14.0" + }, "idna": { "hashes": [ "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", @@ -347,164 +483,289 @@ "markers": "python_version >= '3.6'", "version": "==3.10" }, + "jh2": { + "hashes": [ + "sha256:038091480cd1544e9389b0adbb1b1645a797689dcb68ceae7e45eec96ed24497", + "sha256:0c8e336df8ed1687590695f4469f480eeb4159bf13bb6193791c6530fe114b49", + "sha256:0c9bf2d5e4ef45c1686c6f76935e7ca263f5eae4de92bf5d1873a0e737e4eb7d", + "sha256:0faf6e96f74d27b8ca816b40217904891f91b664ed1c0388737949ceb50ac15d", + "sha256:10ea7f497e6226372e1d4fdbf42c8381f4887819a643ab930bff4072ad298d84", + "sha256:11650f7ed77ee1df30f25d6b3b74b2fa1c94124e074fd455abafea3cbc913d53", + "sha256:12ead3ee3e9c7caa00356b528a5cc7fe210fbe2060628af6e19ed76b8416572e", + "sha256:136b3c5b08883681fcb58f12393a5bbfa422d6e2d5ba887e263e776874276bc6", + "sha256:17d6e1691154ea9f726e43dcb717df48e56c66b5a01c90ad675c6494c36e5be1", + "sha256:19cb987915cc0d321746a12f2a693d087ffb721c37ac9a153cc088c57d4d90eb", + "sha256:1cdf15de698c4026e64fd914fead3180e52bf2a7bcbe44a3392404582dbf2d22", + "sha256:1e81e1c64e33506b8508ba5e3c7c139b2577e78b079c2c16a8e7a02a161f1080", + "sha256:2226c76e4ff2149c5d9f94bed22bf9c4f3411d38cc53d4a7ddfbe0899c8b558c", + "sha256:2837412fb7b684c6ce7392c8bc57440c6dbadaf1bde7a53144381f7df7083c1c", + "sha256:293f0f3da3c391e997e0d55fdb85540e98a8b0406622bb4ba57fb7617697f31e", + "sha256:2b9cc6c0239215a349d28c192fa4c4e7a7348eee7980531525c01bffe39eea80", + "sha256:2f3ad679f84ff236a0d7b71ddc4b3c09fe467abee2f1a86671f0cd417be5352b", + "sha256:358cad2f328c52c15756cf32b0ad17afb0d617e7cdfe93d59aa2616966d825b7", + "sha256:3663712305b509f79c002c8c0ca9994f716cadba576f5a59632dda1aec1ca8c6", + "sha256:41794820ccca039ca2ead6245f30b34601dd1456eee5b5dde620672bb989e79d", + "sha256:44b7e64aff542471c474c24f771eae5efd9152da02a12556f7cb7607020e1420", + "sha256:45770eb0990166026538d3c2fd7d92f17cfde13ca6567570c4baec3ce9162936", + "sha256:498060078a4d1b458e9381fefb027d85329397b50d65287712b3d48233e20836", + "sha256:4c2f18f337c2393f84e45e5011c8b02697b81638b1cec49da60a01b9ed067695", + "sha256:5162d6e475d2762035fb8ea25982bcbec6c58715e33bd0951499f743cd90b110", + "sha256:51e8c890bb59008c95b3a552cefd8bd9ce50a7466a6c920a78cf586e885d7449", + "sha256:56ad3839ac6ac5fd3d023cf59d4b04264b74bb4cb44c0780faf51d6b5ff38fbc", + "sha256:5821638ef0d7c973071810a6786f59b305172197f7e7e469a2ce169e7f4978e3", + "sha256:5ac1b2d379f4d40c13dcce537e69704452943cddbe991fd54a84fdb2da9026d5", + "sha256:5b465d4311b0429fe6fa85df8e2cfcb038c9fface95396dd14e838ecabaaadf2", + "sha256:5d8656b98057329bd03d968aac8d5198389cf51517511295cfc4cb827a507e39", + "sha256:5dcfb3e823ef4b91b70b92848570d1d8cfd584304bd2bd54272dc100c9494def", + "sha256:5e40d23ea43f683f3a7c032dde391104f609b05c21b6d284101120b51dbd50c1", + "sha256:63a01522bde161c713f7fa5ee5d850fee6386fc386073490ebcd438f14579cf2", + "sha256:6b2a3d7756035dde13571f4ad232629b78b7f35c2cd5fda7b464079fc697db3a", + "sha256:6b3be1a6bf6c965aea3b4e3a40df9d2c134c516d89c76cf2b6c81f67e6c5c6ed", + "sha256:6c7bea3357f2dc653756e6da55f66cd21c73d3875c8f3dc4e8d196a876252de0", + "sha256:6e6c8e229507cf29333a2f491cbaa7dff5b8a4a3e613af8090ccce9ce3e4f7a0", + "sha256:6fad27f2a63884ee45d491aebec4b1f38752cd6aaccc625038c21e7f43c02c49", + "sha256:71bfef52547c2b8b145897fa8d1b5142bc52313cfa38c0742e0ef755f0d09c60", + "sha256:72370d312323282b1bf74426e53fae861a310d7ae519b419da46673c38e7d147", + "sha256:76c7d36043a9c478b0c846fcec7da5cb095983722473e503e0122ccd170182b5", + "sha256:78d8a81ef51edb9a2f278a6fb278789b49e304b12bb21bccf2fe7e344f71a9fb", + "sha256:798a6b159ce32181a5e7ab7611c17d1080e74a5541fec47f961b728dab25a76f", + "sha256:7e370567f66a57e2c0e3ae2afcc6f126e1d6babd36831cfd0caad279b05c1c88", + "sha256:8004b845f606b95a8b17efa112aa10b327e46e95dcda604a257b4633d4ed45c8", + "sha256:80b20bf9ea4e709b3b9ae364ac298dfa872b084c186e5c1d60b0b79c79a7ee7e", + "sha256:87303f4bb1b493997f911a4f126123ccd2827d3a2e7dd2390cc6143fbc75805b", + "sha256:8d423f4631395b92dceda39f481a463498131ac02a58581124a44495491f715b", + "sha256:94ee262192db50fb9c069a0be7bb1a426fb1b43af26ce12bf4c6c30e13f46b56", + "sha256:960e4be2e7de340300ab4bcc2b45bed46be1d62330575b8265e6602dbcb9a14c", + "sha256:99397d5e1da6b345cec3e6125e2902b0e6864eb8eaa4be43a2013f059c502c93", + "sha256:9abbb8c1bad08817bad62ae1ea76c01bdbd0ee8c827d05f3ba038c9f6d6f14bb", + "sha256:9c0b8fadf80bc70d341032f92702bda1b0ed78c01e9c495f0df701938c99bcf5", + "sha256:9f977da9abae170eebdcf02bda33727c342fad5dcdbc08498bfdfb6cc6c65489", + "sha256:a6be712ca39d5e9c89b705bc9800be36739436fefb8d0b52b2d332f7d6d22a01", + "sha256:aa434418d6ee44b0ba3a5a407bc9e1543cf496328f43f149e9b58f74a63d5c21", + "sha256:ac4f778e32f7de0ba63346893a4af87c2280ffc1783f594a117be51d908a10da", + "sha256:ac85d65ee369c09b2904b55078ad589961e2e2e03c810963d35a26e6a3931425", + "sha256:ad5d78c664d39960435d4162db31117c8945ba74fb0c414e79ba85a8bdeafdec", + "sha256:ad91f57c3485d87a8edee558dafab0f08c716857d748731c0998dcefe9d3fd5f", + "sha256:afd255d42b340036883ca95bded553b29065b064e2fe5db64ad5988517db9694", + "sha256:b1c2c74f100a0c2110a8e30445554ae331860d32f145c60a2a1e1c27702022a2", + "sha256:b49a8c71378d40d43c6a56eaa536d7823baa43c27c93e082aeb60a9717be0c10", + "sha256:b5f52611323e8e35705e6750a760f32165b41c052d22da154ae343871e7cd50d", + "sha256:b6bf99ae529ac359263269710356d3ddb173c15d8f8dc8849ae794ab811e5cd0", + "sha256:ba361bf87c4701f11241be92c99ef5cf916865dd225955cccb2376bf76717b3c", + "sha256:bc351aa2158575e68943d8e1d5531719ad86bf6607776627ed5a1a60657664af", + "sha256:bd6eb7b1e12e4dd0b75cab1b023272f1333494add5ad61deedac738af1ffeede", + "sha256:bf8852595f5e2d2b072e24c29394b5aca7fba96ecc8656d56660535f9e9872c9", + "sha256:c1dd66541569a2bdbe92589cc96a89f470b20d168f2238fd463e1b59ee3e2d49", + "sha256:c36a7a004cba4e370d0675826eeefe4e42a256638b6b1432263ddb4af317bc02", + "sha256:c886cda61da4d39010be84802bed11bc75f03e8a6094cc18016957a2c80254d4", + "sha256:cc7aa83946f80c66a5d2dea7e165f15aa3eb21e7b74b24d8f850afc0d44bb00e", + "sha256:cea9c4bef70d1358bafec6019164abce362f4de15d79d1ecd64ae31c1749d77a", + "sha256:cfe1951e80869695857986be104a40a1e7fa8ec7de05f86bcbd7bd20854be764", + "sha256:d36cf6f139da3279644794fcfda18af425c8bb122ef9c2e7c762a937bbf7b0f4", + "sha256:d81308faaa9393b7e6ed20718d465c4c2b73c24d5e4826024961acf4b87b1524", + "sha256:db51ea1f9c5ac790848bc271fcdf4108ad1b77a77c6949a96320477962cf7ba5", + "sha256:dd05c18c920a15e00d7a52df37bffd3930fe2c004c690f9422b20e12077e6dbd", + "sha256:df05918a11e1db0198d00486e36673b4b4a89390e4458ff9479b4908dde357ac", + "sha256:e4c31dccf6be131709e545d0258eb5b75c5fac304857ad3976331c6740e8b9d6", + "sha256:e60954d673040430802b29fe5bba698e262182b5ba5f302ff4458e39f8101881", + "sha256:e60e2d2c88a0552e61c37172fe377f6a8abf479130a445314886de4a360ba940", + "sha256:e786f773ddc153846b2ebdb854011cfd1f7c874b8ee79cced3706801341c9f5d", + "sha256:e7cd91548fb95b69edd376f5204e27115ac7d093ec7d80066123a5bdb31c71d9", + "sha256:eaef2ea4f5602aefaaf3d6e8235f3b9ffde35aff15aac1c16cc802f6bbf0a3b5", + "sha256:ec8c5ea93a03775fbadd08462200cf34ce617ec75a032abfa44fd6d3a00e5424", + "sha256:eddeb8574bc9d9abb8491d4a46b60e553c2cea235b80373756acb06568101175", + "sha256:eeb300b0e4b428aab2f70d785cad4306529262af6de8c8c5fe6a4b41a674a434", + "sha256:f39d71ece8e97cf069e4154868eaac1256b133fe23e0459829432e4bb6406472", + "sha256:f4840ddad2b9d53710e92361391944da89e3576641a290066a1719520059247c", + "sha256:f70723a00bcbce0f9a216853139955be45da35741335eb3afead304e77662560", + "sha256:f829cf2ba5b553e6529d6238928c07096f1feb47f4ad536b7f06bca6cc77173f", + "sha256:f96386910467725895f7972939a6faabd6e96b1de0cc2c092e4bd2c40e956e25", + "sha256:fe259a9d6f555bc79aed9bb4b9a7fff73db443b4c483e4a81a428c8a2860428b" + ], + "markers": "python_version >= '3.7'", + "version": "==5.0.8" + }, + "jwt": { + "hashes": [ + "sha256:61c9170f92e736b530655e75374681d4fcca9cfa8763ab42be57353b2b203494" + ], + "index": "pypi", + "version": "==1.3.1" + }, "multidict": { "hashes": [ - "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f", - "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056", - "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761", - "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3", - "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b", - "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6", - "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748", - "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966", - "sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f", - "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1", - "sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6", - "sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada", - "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305", - "sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2", - "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d", - "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a", - "sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef", - "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c", - "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb", - "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60", - "sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6", - "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4", - "sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478", - "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81", - "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7", - "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56", - "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3", - "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6", - "sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30", - "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb", - "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506", - "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0", - "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925", - "sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c", - "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6", - "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e", - "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95", - "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2", - "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133", - "sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2", - "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa", - "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3", - "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3", - "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436", - "sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657", - "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581", - "sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492", - "sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43", - "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2", - "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2", - "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926", - "sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057", - "sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc", - "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80", - "sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255", - "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1", - "sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972", - "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53", - "sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1", - "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423", - "sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a", - "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160", - "sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c", - "sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd", - "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa", - "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5", - "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b", - "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa", - "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef", - "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44", - "sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4", - "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156", - "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753", - "sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28", - "sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d", - "sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a", - "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304", - "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008", - "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429", - "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72", - "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399", - "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3", - "sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392", - "sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167", - "sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c", - "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774", - "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351", - "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76", - "sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875", - "sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd", - "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28", - "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db" + "sha256:0085b0afb2446e57050140240a8595846ed64d1cbd26cef936bfab3192c673b8", + "sha256:042028348dc5a1f2be6c666437042a98a5d24cee50380f4c0902215e5ec41844", + "sha256:05fefbc3cddc4e36da209a5e49f1094bbece9a581faa7f3589201fd95df40e5d", + "sha256:063be88bd684782a0715641de853e1e58a2f25b76388538bd62d974777ce9bc2", + "sha256:07bfa8bc649783e703263f783f73e27fef8cd37baaad4389816cf6a133141331", + "sha256:08549895e6a799bd551cf276f6e59820aa084f0f90665c0f03dd3a50db5d3c48", + "sha256:095a2eabe8c43041d3e6c2cb8287a257b5f1801c2d6ebd1dd877424f1e89cf29", + "sha256:0b183a959fb88ad1be201de2c4bdf52fa8e46e6c185d76201286a97b6f5ee65c", + "sha256:0c383d28857f66f5aebe3e91d6cf498da73af75fbd51cedbe1adfb85e90c0460", + "sha256:0d57a01a2a9fa00234aace434d8c131f0ac6e0ac6ef131eda5962d7e79edfb5b", + "sha256:0dc25a3293c50744796e87048de5e68996104d86d940bb24bc3ec31df281b191", + "sha256:0e5a644e50ef9fb87878d4d57907f03a12410d2aa3b93b3acdf90a741df52c49", + "sha256:0f249badb360b0b4d694307ad40f811f83df4da8cef7b68e429e4eea939e49dd", + "sha256:0f74f2fc51555f4b037ef278efc29a870d327053aba5cb7d86ae572426c7cccc", + "sha256:125dd82b40f8c06d08d87b3510beaccb88afac94e9ed4a6f6c71362dc7dbb04b", + "sha256:13551d0e2d7201f0959725a6a769b6f7b9019a168ed96006479c9ac33fe4096b", + "sha256:14ed9ed1bfedd72a877807c71113deac292bf485159a29025dfdc524c326f3e1", + "sha256:163f4604e76639f728d127293d24c3e208b445b463168af3d031b92b0998bb90", + "sha256:19e2819b0b468174de25c0ceed766606a07cedeab132383f1e83b9a4e96ccb4f", + "sha256:1e2a2193d3aa5cbf5758f6d5680a52aa848e0cf611da324f71e5e48a9695cc86", + "sha256:1f3c099d3899b14e1ce52262eb82a5f5cb92157bb5106bf627b618c090a0eadc", + "sha256:214207dcc7a6221d9942f23797fe89144128a71c03632bf713d918db99bd36de", + "sha256:2325105e16d434749e1be8022f942876a936f9bece4ec41ae244e3d7fae42aaf", + "sha256:2529ddbdaa424b2c6c2eb668ea684dd6b75b839d0ad4b21aad60c168269478d7", + "sha256:256d431fe4583c5f1e0f2e9c4d9c22f3a04ae96009b8cfa096da3a8723db0a16", + "sha256:25bb96338512e2f46f615a2bb7c6012fe92a4a5ebd353e5020836a7e33120349", + "sha256:2e87f1926e91855ae61769ba3e3f7315120788c099677e0842e697b0bfb659f2", + "sha256:2fc6af8e39f7496047c7876314f4317736eac82bf85b54c7c76cf1a6f8e35d98", + "sha256:3157126b028c074951839233647bd0e30df77ef1fedd801b48bdcad242a60f4e", + "sha256:32c9b4878f48be3e75808ea7e499d6223b1eea6d54c487a66bc10a1871e3dc6a", + "sha256:32ed748ff9ac682eae7859790d3044b50e3076c7d80e17a44239683769ff485e", + "sha256:3501621d5e86f1a88521ea65d5cad0a0834c77b26f193747615b7c911e5422d2", + "sha256:437c33561edb6eb504b5a30203daf81d4a9b727e167e78b0854d9a4e18e8950b", + "sha256:48d39b1824b8d6ea7de878ef6226efbe0773f9c64333e1125e0efcfdd18a24c7", + "sha256:4ac3fcf9a2d369bd075b2c2965544036a27ccd277fc3c04f708338cc57533081", + "sha256:4ccfd74957ef53fa7380aaa1c961f523d582cd5e85a620880ffabd407f8202c0", + "sha256:52b05e21ff05729fbea9bc20b3a791c3c11da61649ff64cce8257c82a020466d", + "sha256:5389445f0173c197f4a3613713b5fb3f3879df1ded2a1a2e4bc4b5b9c5441b7e", + "sha256:5c5e7d2e300d5cb3b2693b6d60d3e8c8e7dd4ebe27cd17c9cb57020cac0acb80", + "sha256:5d26547423e5e71dcc562c4acdc134b900640a39abd9066d7326a7cc2324c530", + "sha256:5dd7106d064d05896ce28c97da3f46caa442fe5a43bc26dfb258e90853b39b44", + "sha256:5f8cb1329f42fadfb40d6211e5ff568d71ab49be36e759345f91c69d1033d633", + "sha256:61d5541f27533f803a941d3a3f8a3d10ed48c12cf918f557efcbf3cd04ef265c", + "sha256:639556758c36093b35e2e368ca485dada6afc2bd6a1b1207d85ea6dfc3deab27", + "sha256:641cf2e3447c9ecff2f7aa6e9eee9eaa286ea65d57b014543a4911ff2799d08a", + "sha256:6aed763b6a1b28c46c055692836879328f0b334a6d61572ee4113a5d0c859872", + "sha256:6e2a2d6749e1ff2c9c76a72c6530d5baa601205b14e441e6d98011000f47a7ac", + "sha256:7243c5a6523c5cfeca76e063efa5f6a656d1d74c8b1fc64b2cd1e84e507f7e2a", + "sha256:76b34c12b013d813e6cb325e6bd4f9c984db27758b16085926bbe7ceeaace626", + "sha256:781b5dd1db18c9e9eacc419027b0acb5073bdec9de1675c0be25ceb10e2ad133", + "sha256:7c611345bbe7cb44aabb877cb94b63e86f2d0db03e382667dbd037866d44b4f8", + "sha256:83b78c680d4b15d33042d330c2fa31813ca3974197bddb3836a5c635a5fd013f", + "sha256:84e87a7d75fa36839a3a432286d719975362d230c70ebfa0948549cc38bd5b46", + "sha256:89b3857652183b8206a891168af47bac10b970d275bba1f6ee46565a758c078d", + "sha256:8cd1a0644ccaf27e9d2f6d9c9474faabee21f0578fe85225cc5af9a61e1653df", + "sha256:8de4d42dffd5ced9117af2ce66ba8722402541a3aa98ffdf78dde92badb68932", + "sha256:94a7bb972178a8bfc4055db80c51efd24baefaced5e51c59b0d598a004e8305d", + "sha256:98aa8325c7f47183b45588af9c434533196e241be0a4e4ae2190b06d17675c02", + "sha256:9e658d1373c424457ddf6d55ec1db93c280b8579276bebd1f72f113072df8a5d", + "sha256:9f49585f4abadd2283034fc605961f40c638635bc60f5162276fec075f2e37a4", + "sha256:9f6cad071960ba1914fa231677d21b1b4a3acdcce463cee41ea30bc82e6040cf", + "sha256:a0cc398350ef31167e03f3ca7c19313d4e40a662adcb98a88755e4e861170bdd", + "sha256:a1133414b771619aa3c3000701c11b2e4624a7f492f12f256aedde97c28331a2", + "sha256:a33273a541f1e1a8219b2a4ed2de355848ecc0254264915b9290c8d2de1c74e1", + "sha256:a3c0ff89fe40a152e77b191b83282c9664357dce3004032d42e68c514ceff27e", + "sha256:a49994481b99cd7dedde07f2e7e93b1d86c01c0fca1c32aded18f10695ae17eb", + "sha256:abf5b17bc0cf626a8a497d89ac691308dbd825d2ac372aa990b1ca114e470151", + "sha256:ac380cacdd3b183338ba63a144a34e9044520a6fb30c58aa14077157a033c13e", + "sha256:ad81012b24b88aad4c70b2cbc2dad84018783221b7f923e926f4690ff8569da3", + "sha256:b2c00ad31fbc2cbac85d7d0fcf90853b2ca2e69d825a2d3f3edb842ef1544a2c", + "sha256:b4c153863dd6569f6511845922c53e39c8d61f6e81f228ad5443e690fca403de", + "sha256:b4f3d66dd0354b79761481fc15bdafaba0b9d9076f1f42cc9ce10d7fcbda205a", + "sha256:b99aac6bb2c37db336fa03a39b40ed4ef2818bf2dfb9441458165ebe88b793af", + "sha256:b9f6392d98c0bd70676ae41474e2eecf4c7150cb419237a41f8f96043fcb81d1", + "sha256:c537da54ce4ff7c15e78ab1292e5799d0d43a2108e006578a57f531866f64025", + "sha256:ca23db5fb195b5ef4fd1f77ce26cadefdf13dba71dab14dadd29b34d457d7c44", + "sha256:cc826b9a8176e686b67aa60fd6c6a7047b0461cae5591ea1dc73d28f72332a8a", + "sha256:cca83a629f77402cfadd58352e394d79a61c8015f1694b83ab72237ec3941f88", + "sha256:cf8d370b2fea27fb300825ec3984334f7dd54a581bde6456799ba3776915a656", + "sha256:d1175b0e0d6037fab207f05774a176d71210ebd40b1c51f480a04b65ec5c786d", + "sha256:d1996ee1330e245cd3aeda0887b4409e3930524c27642b046e4fae88ffa66c5e", + "sha256:d5a36953389f35f0a4e88dc796048829a2f467c9197265504593f0e420571547", + "sha256:da51d8928ad8b4244926fe862ba1795f0b6e68ed8c42cd2f822d435db9c2a8f4", + "sha256:e16e7297f29a544f49340012d6fc08cf14de0ab361c9eb7529f6a57a30cbfda1", + "sha256:e25b11a0417475f093d0f0809a149aff3943c2c56da50fdf2c3c88d57fe3dfbd", + "sha256:e4371591e621579cb6da8401e4ea405b33ff25a755874a3567c4075ca63d56e2", + "sha256:e653d36b1bf48fa78c7fcebb5fa679342e025121ace8c87ab05c1cefd33b34fc", + "sha256:e7d91a230c7f8af86c904a5a992b8c064b66330544693fd6759c3d6162382ecf", + "sha256:e851e6363d0dbe515d8de81fd544a2c956fdec6f8a049739562286727d4a00c3", + "sha256:ef7d48207926edbf8b16b336f779c557dd8f5a33035a85db9c4b0febb0706817", + "sha256:f7716f7e7138252d88607228ce40be22660d6608d20fd365d596e7ca0738e019", + "sha256:facaf11f21f3a4c51b62931feb13310e6fe3475f85e20d9c9fdce0d2ea561b87" ], - "markers": "python_version >= '3.8'", - "version": "==6.1.0" + "markers": "python_version >= '3.9'", + "version": "==6.2.0" + }, + "niquests": { + "hashes": [ + "sha256:68e0a7e9f338466b3606945fffd11f75e3c90af7498aa9336ef03812323b7e36", + "sha256:86e484c2c60444aa96069c15f6295af6e25a8bad50781e1326df1b5c7ab48339" + ], + "markers": "python_version >= '3.7'", + "version": "==3.14.0" }, "numpy": { "hashes": [ - "sha256:0391ea3622f5c51a2e29708877d56e3d276827ac5447d7f45e9bc4ade8923c52", - "sha256:12c045f43b1d2915eca6b880a7f4a256f59d62df4f044788c8ba67709412128d", - "sha256:136553f123ee2951bfcfbc264acd34a2fc2f29d7cdf610ce7daf672b6fbaa693", - "sha256:1402da8e0f435991983d0a9708b779f95a8c98c6b18a171b9f1be09005e64d9d", - "sha256:16372619ee728ed67a2a606a614f56d3eabc5b86f8b615c79d01957062826ca8", - "sha256:1ad78ce7f18ce4e7df1b2ea4019b5817a2f6a8a16e34ff2775f646adce0a5027", - "sha256:1b416af7d0ed3271cad0f0a0d0bee0911ed7eba23e66f8424d9f3dfcdcae1304", - "sha256:1f45315b2dc58d8a3e7754fe4e38b6fce132dab284a92851e41b2b344f6441c5", - "sha256:2376e317111daa0a6739e50f7ee2a6353f768489102308b0d98fcf4a04f7f3b5", - "sha256:23c9f4edbf4c065fddb10a4f6e8b6a244342d95966a48820c614891e5059bb50", - "sha256:246535e2f7496b7ac85deffe932896a3577be7af8fb7eebe7146444680297e9a", - "sha256:2e8da03bd561504d9b20e7a12340870dfc206c64ea59b4cfee9fceb95070ee94", - "sha256:34c1b7e83f94f3b564b35f480f5652a47007dd91f7c839f404d03279cc8dd021", - "sha256:39261798d208c3095ae4f7bc8eaeb3481ea8c6e03dc48028057d3cbdbdb8937e", - "sha256:3b787adbf04b0db1967798dba8da1af07e387908ed1553a0d6e74c084d1ceafe", - "sha256:3c2ec8a0f51d60f1e9c0c5ab116b7fc104b165ada3f6c58abf881cb2eb16044d", - "sha256:435e7a933b9fda8126130b046975a968cc2d833b505475e588339e09f7672890", - "sha256:4d8335b5f1b6e2bce120d55fb17064b0262ff29b459e8493d1785c18ae2553b8", - "sha256:4d9828d25fb246bedd31e04c9e75714a4087211ac348cb39c8c5f99dbb6683fe", - "sha256:52659ad2534427dffcc36aac76bebdd02b67e3b7a619ac67543bc9bfe6b7cdb1", - "sha256:5266de33d4c3420973cf9ae3b98b54a2a6d53a559310e3236c4b2b06b9c07d4e", - "sha256:5521a06a3148686d9269c53b09f7d399a5725c47bbb5b35747e1cb76326b714b", - "sha256:596140185c7fa113563c67c2e894eabe0daea18cf8e33851738c19f70ce86aeb", - "sha256:5b732c8beef1d7bc2d9e476dbba20aaff6167bf205ad9aa8d30913859e82884b", - "sha256:5ebeb7ef54a7be11044c33a17b2624abe4307a75893c001a4800857956b41094", - "sha256:712a64103d97c404e87d4d7c47fb0c7ff9acccc625ca2002848e0d53288b90ea", - "sha256:7678556eeb0152cbd1522b684dcd215250885993dd00adb93679ec3c0e6e091c", - "sha256:77974aba6c1bc26e3c205c2214f0d5b4305bdc719268b93e768ddb17e3fdd636", - "sha256:783145835458e60fa97afac25d511d00a1eca94d4a8f3ace9fe2043003c678e4", - "sha256:7bfdb06b395385ea9b91bf55c1adf1b297c9fdb531552845ff1d3ea6e40d5aba", - "sha256:7c8dde0ca2f77828815fd1aedfdf52e59071a5bae30dac3b4da2a335c672149a", - "sha256:83807d445817326b4bcdaaaf8e8e9f1753da04341eceec705c001ff342002e5d", - "sha256:87eed225fd415bbae787f93a457af7f5990b92a334e346f72070bf569b9c9c95", - "sha256:8fb62fe3d206d72fe1cfe31c4a1106ad2b136fcc1606093aeab314f02930fdf2", - "sha256:95172a21038c9b423e68be78fd0be6e1b97674cde269b76fe269a5dfa6fadf0b", - "sha256:9f48ba6f6c13e5e49f3d3efb1b51c8193215c42ac82610a04624906a9270be6f", - "sha256:a0c03b6be48aaf92525cccf393265e02773be8fd9551a2f9adbe7db1fa2b60f1", - "sha256:a5ae282abe60a2db0fd407072aff4599c279bcd6e9a2475500fc35b00a57c532", - "sha256:aee2512827ceb6d7f517c8b85aa5d3923afe8fc7a57d028cffcd522f1c6fd082", - "sha256:c8b0451d2ec95010d1db8ca733afc41f659f425b7f608af569711097fd6014e2", - "sha256:c9aa4496fd0e17e3843399f533d62857cef5900facf93e735ef65aa4bbc90ef0", - "sha256:cbc6472e01952d3d1b2772b720428f8b90e2deea8344e854df22b0618e9cce71", - "sha256:cdfe0c22692a30cd830c0755746473ae66c4a8f2e7bd508b35fb3b6a0813d787", - "sha256:cf802eef1f0134afb81fef94020351be4fe1d6681aadf9c5e862af6602af64ef", - "sha256:d42f9c36d06440e34226e8bd65ff065ca0963aeecada587b937011efa02cdc9d", - "sha256:d5b47c440210c5d1d67e1cf434124e0b5c395eee1f5806fdd89b553ed1acd0a3", - "sha256:d9b4a8148c57ecac25a16b0e11798cbe88edf5237b0df99973687dd866f05e1b", - "sha256:daf43a3d1ea699402c5a850e5313680ac355b4adc9770cd5cfc2940e7861f1bf", - "sha256:dbdc15f0c81611925f382dfa97b3bd0bc2c1ce19d4fe50482cb0ddc12ba30020", - "sha256:deaa09cd492e24fd9b15296844c0ad1b3c976da7907e1c1ed3a0ad21dded6f76", - "sha256:e37242f5324ffd9f7ba5acf96d774f9276aa62a966c0bad8dae692deebec7716", - "sha256:ed2cf9ed4e8ebc3b754d398cba12f24359f018b416c380f577bbae112ca52fc9", - "sha256:f2712c5179f40af9ddc8f6727f2bd910ea0eb50206daea75f58ddd9fa3f715bb", - "sha256:f4ca91d61a4bf61b0f2228f24bbfa6a9facd5f8af03759fe2a655c50ae2c6610", - "sha256:f6b3dfc7661f8842babd8ea07e9897fe3d9b69a1d7e5fbb743e4160f9387833b" + "sha256:05c076d531e9998e7e694c36e8b349969c56eadd2cdcd07242958489d79a7286", + "sha256:0d54974f9cf14acf49c60f0f7f4084b6579d24d439453d5fc5805d46a165b542", + "sha256:11c43995255eb4127115956495f43e9343736edb7fcdb0d973defd9de14cd84f", + "sha256:188dcbca89834cc2e14eb2f106c96d6d46f200fe0200310fc29089657379c58d", + "sha256:1974afec0b479e50438fc3648974268f972e2d908ddb6d7fb634598cdb8260a0", + "sha256:1cf4e5c6a278d620dee9ddeb487dc6a860f9b199eadeecc567f777daace1e9e7", + "sha256:207a2b8441cc8b6a2a78c9ddc64d00d20c303d79fba08c577752f080c4007ee3", + "sha256:218f061d2faa73621fa23d6359442b0fc658d5b9a70801373625d958259eaca3", + "sha256:2aad3c17ed2ff455b8eaafe06bcdae0062a1db77cb99f4b9cbb5f4ecb13c5146", + "sha256:2fa8fa7697ad1646b5c93de1719965844e004fcad23c91228aca1cf0800044a1", + "sha256:31504f970f563d99f71a3512d0c01a645b692b12a63630d6aafa0939e52361e6", + "sha256:3387dd7232804b341165cedcb90694565a6015433ee076c6754775e85d86f1fc", + "sha256:4ba5054787e89c59c593a4169830ab362ac2bee8a969249dc56e5d7d20ff8df9", + "sha256:4f92084defa704deadd4e0a5ab1dc52d8ac9e8a8ef617f3fbb853e79b0ea3592", + "sha256:65ef3468b53269eb5fdb3a5c09508c032b793da03251d5f8722b1194f1790c00", + "sha256:6f527d8fdb0286fd2fd97a2a96c6be17ba4232da346931d967a0630050dfd298", + "sha256:7051ee569db5fbac144335e0f3b9c2337e0c8d5c9fee015f259a5bd70772b7e8", + "sha256:7716e4a9b7af82c06a2543c53ca476fa0b57e4d760481273e09da04b74ee6ee2", + "sha256:79bd5f0a02aa16808fcbc79a9a376a147cc1045f7dfe44c6e7d53fa8b8a79392", + "sha256:7a4e84a6283b36632e2a5b56e121961f6542ab886bc9e12f8f9818b3c266bfbb", + "sha256:8120575cb4882318c791f839a4fd66161a6fa46f3f0a5e613071aae35b5dd8f8", + "sha256:81413336ef121a6ba746892fad881a83351ee3e1e4011f52e97fba79233611fd", + "sha256:8146f3550d627252269ac42ae660281d673eb6f8b32f113538e0cc2a9aed42b9", + "sha256:879cf3a9a2b53a4672a168c21375166171bc3932b7e21f622201811c43cdd3b0", + "sha256:892c10d6a73e0f14935c31229e03325a7b3093fafd6ce0af704be7f894d95687", + "sha256:92bda934a791c01d6d9d8e038363c50918ef7c40601552a58ac84c9613a665bc", + "sha256:9ba03692a45d3eef66559efe1d1096c4b9b75c0986b5dff5530c378fb8331d4f", + "sha256:9eeea959168ea555e556b8188da5fa7831e21d91ce031e95ce23747b7609f8a4", + "sha256:a0258ad1f44f138b791327961caedffbf9612bfa504ab9597157806faa95194a", + "sha256:a761ba0fa886a7bb33c6c8f6f20213735cb19642c580a931c625ee377ee8bd39", + "sha256:a7b9084668aa0f64e64bd00d27ba5146ef1c3a8835f3bd912e7a9e01326804c4", + "sha256:a84eda42bd12edc36eb5b53bbcc9b406820d3353f1994b6cfe453a33ff101775", + "sha256:ab2939cd5bec30a7430cbdb2287b63151b77cf9624de0532d629c9a1c59b1d5c", + "sha256:ac0280f1ba4a4bfff363a99a6aceed4f8e123f8a9b234c89140f5e894e452ecd", + "sha256:adf8c1d66f432ce577d0197dceaac2ac00c0759f573f28516246351c58a85020", + "sha256:b4adfbbc64014976d2f91084915ca4e626fbf2057fb81af209c1a6d776d23e3d", + "sha256:bb649f8b207ab07caebba230d851b579a3c8711a851d29efe15008e31bb4de24", + "sha256:bce43e386c16898b91e162e5baaad90c4b06f9dcbe36282490032cec98dc8ae7", + "sha256:bd3ad3b0a40e713fc68f99ecfd07124195333f1e689387c180813f0e94309d6f", + "sha256:c3f7ac96b16955634e223b579a3e5798df59007ca43e8d451a0e6a50f6bfdfba", + "sha256:cf28633d64294969c019c6df4ff37f5698e8326db68cc2b66576a51fad634880", + "sha256:d0f35b19894a9e08639fd60a1ec1978cb7f5f7f1eace62f38dd36be8aecdef4d", + "sha256:db1f1c22173ac1c58db249ae48aa7ead29f534b9a948bc56828337aa84a32ed6", + "sha256:dbe512c511956b893d2dacd007d955a3f03d555ae05cfa3ff1c1ff6df8851854", + "sha256:df2f57871a96bbc1b69733cd4c51dc33bea66146b8c63cacbfed73eec0883017", + "sha256:e2f085ce2e813a50dfd0e01fbfc0c12bbe5d2063d99f8b29da30e544fb6483b8", + "sha256:e642d86b8f956098b564a45e6f6ce68a22c2c97a04f5acd3f221f57b8cb850ae", + "sha256:e9e0a277bb2eb5d8a7407e14688b85fd8ad628ee4e0c7930415687b6564207a4", + "sha256:ea2bb7e2ae9e37d96835b3576a4fa4b3a97592fbea8ef7c3587078b0068b8f09", + "sha256:ee4d528022f4c5ff67332469e10efe06a267e32f4067dc76bb7e2cddf3cd25ff", + "sha256:f05d4198c1bacc9124018109c5fba2f3201dbe7ab6e92ff100494f236209c960", + "sha256:f34dc300df798742b3d06515aa2a0aee20941c13579d7a2f2e10af01ae4901ee", + "sha256:f4162988a360a29af158aeb4a2f4f09ffed6a969c9776f8f3bdee9b06a8ab7e5", + "sha256:f486038e44caa08dbd97275a9a35a283a8f1d2f0ee60ac260a1790e76660833c", + "sha256:f7de08cbe5551911886d1ab60de58448c6df0f67d9feb7d1fb21e9875ef95e91" ], "markers": "python_version == '3.11'", - "version": "==2.2.3" + "version": "==2.2.4" + }, + "opensearch-py": { + "hashes": [ + "sha256:52c60fdb5d4dcf6cce3ee746c13b194529b0161e0f41268b98ab8f1624abe2fa", + "sha256:6598df0bc7a003294edd0ba88a331e0793acbb8c910c43edf398791e3b2eccda" + ], + "index": "pypi", + "version": "==2.8.0" }, "paho-mqtt": { "hashes": [ @@ -572,205 +833,228 @@ }, "propcache": { "hashes": [ - "sha256:03ff9d3f665769b2a85e6157ac8b439644f2d7fd17615a82fa55739bc97863f4", - "sha256:049324ee97bb67285b49632132db351b41e77833678432be52bdd0289c0e05e4", - "sha256:081a430aa8d5e8876c6909b67bd2d937bfd531b0382d3fdedb82612c618bc41a", - "sha256:0f022d381747f0dfe27e99d928e31bc51a18b65bb9e481ae0af1380a6725dd1f", - "sha256:12d1083f001ace206fe34b6bdc2cb94be66d57a850866f0b908972f90996b3e9", - "sha256:14d86fe14b7e04fa306e0c43cdbeebe6b2c2156a0c9ce56b815faacc193e320d", - "sha256:160291c60081f23ee43d44b08a7e5fb76681221a8e10b3139618c5a9a291b84e", - "sha256:1672137af7c46662a1c2be1e8dc78cb6d224319aaa40271c9257d886be4363a6", - "sha256:19a0f89a7bb9d8048d9c4370c9c543c396e894c76be5525f5e1ad287f1750ddf", - "sha256:1ac2f5fe02fa75f56e1ad473f1175e11f475606ec9bd0be2e78e4734ad575034", - "sha256:1cd9a1d071158de1cc1c71a26014dcdfa7dd3d5f4f88c298c7f90ad6f27bb46d", - "sha256:1ffc3cca89bb438fb9c95c13fc874012f7b9466b89328c3c8b1aa93cdcfadd16", - "sha256:297878dc9d0a334358f9b608b56d02e72899f3b8499fc6044133f0d319e2ec30", - "sha256:2d3af2e79991102678f53e0dbf4c35de99b6b8b58f29a27ca0325816364caaba", - "sha256:30b43e74f1359353341a7adb783c8f1b1c676367b011709f466f42fda2045e95", - "sha256:3156628250f46a0895f1f36e1d4fbe062a1af8718ec3ebeb746f1d23f0c5dc4d", - "sha256:31f5af773530fd3c658b32b6bdc2d0838543de70eb9a2156c03e410f7b0d3aae", - "sha256:3935bfa5fede35fb202c4b569bb9c042f337ca4ff7bd540a0aa5e37131659348", - "sha256:39d51fbe4285d5db5d92a929e3e21536ea3dd43732c5b177c7ef03f918dff9f2", - "sha256:3f77ce728b19cb537714499928fe800c3dda29e8d9428778fc7c186da4c09a64", - "sha256:4160d9283bd382fa6c0c2b5e017acc95bc183570cd70968b9202ad6d8fc48dce", - "sha256:4a571d97dbe66ef38e472703067021b1467025ec85707d57e78711c085984e54", - "sha256:4e6281aedfca15301c41f74d7005e6e3f4ca143584ba696ac69df4f02f40d629", - "sha256:52277518d6aae65536e9cea52d4e7fd2f7a66f4aa2d30ed3f2fcea620ace3c54", - "sha256:556fc6c10989f19a179e4321e5d678db8eb2924131e64652a51fe83e4c3db0e1", - "sha256:574faa3b79e8ebac7cb1d7930f51184ba1ccf69adfdec53a12f319a06030a68b", - "sha256:58791550b27d5488b1bb52bc96328456095d96206a250d28d874fafe11b3dfaf", - "sha256:5b750a8e5a1262434fb1517ddf64b5de58327f1adc3524a5e44c2ca43305eb0b", - "sha256:5d97151bc92d2b2578ff7ce779cdb9174337390a535953cbb9452fb65164c587", - "sha256:5eee736daafa7af6d0a2dc15cc75e05c64f37fc37bafef2e00d77c14171c2097", - "sha256:6445804cf4ec763dc70de65a3b0d9954e868609e83850a47ca4f0cb64bd79fea", - "sha256:647894f5ae99c4cf6bb82a1bb3a796f6e06af3caa3d32e26d2350d0e3e3faf24", - "sha256:66d4cfda1d8ed687daa4bc0274fcfd5267873db9a5bc0418c2da19273040eeb7", - "sha256:6a9a8c34fb7bb609419a211e59da8887eeca40d300b5ea8e56af98f6fbbb1541", - "sha256:6b3f39a85d671436ee3d12c017f8fdea38509e4f25b28eb25877293c98c243f6", - "sha256:6b6fb63ae352e13748289f04f37868099e69dba4c2b3e271c46061e82c745634", - "sha256:70693319e0b8fd35dd863e3e29513875eb15c51945bf32519ef52927ca883bc3", - "sha256:781e65134efaf88feb447e8c97a51772aa75e48b794352f94cb7ea717dedda0d", - "sha256:819ce3b883b7576ca28da3861c7e1a88afd08cc8c96908e08a3f4dd64a228034", - "sha256:857112b22acd417c40fa4595db2fe28ab900c8c5fe4670c7989b1c0230955465", - "sha256:887d9b0a65404929641a9fabb6452b07fe4572b269d901d622d8a34a4e9043b2", - "sha256:8b3489ff1ed1e8315674d0775dc7d2195fb13ca17b3808721b54dbe9fd020faf", - "sha256:92fc4500fcb33899b05ba73276dfb684a20d31caa567b7cb5252d48f896a91b1", - "sha256:9403db39be1393618dd80c746cb22ccda168efce239c73af13c3763ef56ffc04", - "sha256:98110aa363f1bb4c073e8dcfaefd3a5cea0f0834c2aab23dda657e4dab2f53b5", - "sha256:999779addc413181912e984b942fbcc951be1f5b3663cd80b2687758f434c583", - "sha256:9caac6b54914bdf41bcc91e7eb9147d331d29235a7c967c150ef5df6464fd1bb", - "sha256:a7a078f5d37bee6690959c813977da5291b24286e7b962e62a94cec31aa5188b", - "sha256:a7e65eb5c003a303b94aa2c3852ef130230ec79e349632d030e9571b87c4698c", - "sha256:a96dc1fa45bd8c407a0af03b2d5218392729e1822b0c32e62c5bf7eeb5fb3958", - "sha256:aca405706e0b0a44cc6bfd41fbe89919a6a56999157f6de7e182a990c36e37bc", - "sha256:accb6150ce61c9c4b7738d45550806aa2b71c7668c6942f17b0ac182b6142fd4", - "sha256:ad1af54a62ffe39cf34db1aa6ed1a1873bd548f6401db39d8e7cd060b9211f82", - "sha256:ae1aa1cd222c6d205853b3013c69cd04515f9d6ab6de4b0603e2e1c33221303e", - "sha256:b2d0a12018b04f4cb820781ec0dffb5f7c7c1d2a5cd22bff7fb055a2cb19ebce", - "sha256:b480c6a4e1138e1aa137c0079b9b6305ec6dcc1098a8ca5196283e8a49df95a9", - "sha256:b74c261802d3d2b85c9df2dfb2fa81b6f90deeef63c2db9f0e029a3cac50b518", - "sha256:ba278acf14471d36316159c94a802933d10b6a1e117b8554fe0d0d9b75c9d536", - "sha256:bb6178c241278d5fe853b3de743087be7f5f4c6f7d6d22a3b524d323eecec505", - "sha256:bf72af5e0fb40e9babf594308911436c8efde3cb5e75b6f206c34ad18be5c052", - "sha256:bfd3223c15bebe26518d58ccf9a39b93948d3dcb3e57a20480dfdd315356baff", - "sha256:c214999039d4f2a5b2073ac506bba279945233da8c786e490d411dfc30f855c1", - "sha256:c2f992c07c0fca81655066705beae35fc95a2fa7366467366db627d9f2ee097f", - "sha256:cba4cfa1052819d16699e1d55d18c92b6e094d4517c41dd231a8b9f87b6fa681", - "sha256:cea7daf9fc7ae6687cf1e2c049752f19f146fdc37c2cc376e7d0032cf4f25347", - "sha256:cf6c4150f8c0e32d241436526f3c3f9cbd34429492abddbada2ffcff506c51af", - "sha256:d09c333d36c1409d56a9d29b3a1b800a42c76a57a5a8907eacdbce3f18768246", - "sha256:d27b84d5880f6d8aa9ae3edb253c59d9f6642ffbb2c889b78b60361eed449787", - "sha256:d2ccec9ac47cf4e04897619c0e0c1a48c54a71bdf045117d3a26f80d38ab1fb0", - "sha256:d71264a80f3fcf512eb4f18f59423fe82d6e346ee97b90625f283df56aee103f", - "sha256:d93f3307ad32a27bda2e88ec81134b823c240aa3abb55821a8da553eed8d9439", - "sha256:d9631c5e8b5b3a0fda99cb0d29c18133bca1e18aea9effe55adb3da1adef80d3", - "sha256:ddfab44e4489bd79bda09d84c430677fc7f0a4939a73d2bba3073036f487a0a6", - "sha256:e7048abd75fe40712005bcfc06bb44b9dfcd8e101dda2ecf2f5aa46115ad07ca", - "sha256:e73091191e4280403bde6c9a52a6999d69cdfde498f1fdf629105247599b57ec", - "sha256:e800776a79a5aabdb17dcc2346a7d66d0777e942e4cd251defeb084762ecd17d", - "sha256:edc9fc7051e3350643ad929df55c451899bb9ae6d24998a949d2e4c87fb596d3", - "sha256:f089118d584e859c62b3da0892b88a83d611c2033ac410e929cb6754eec0ed16", - "sha256:f174bbd484294ed9fdf09437f889f95807e5f229d5d93588d34e92106fbf6717", - "sha256:f508b0491767bb1f2b87fdfacaba5f7eddc2f867740ec69ece6d1946d29029a6", - "sha256:f7a31fc1e1bd362874863fdeed71aed92d348f5336fd84f2197ba40c59f061bd", - "sha256:f9479aa06a793c5aeba49ce5c5692ffb51fcd9a7016e017d555d5e2b0045d212" + "sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e", + "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b", + "sha256:069e7212890b0bcf9b2be0a03afb0c2d5161d91e1bf51569a64f629acc7defbf", + "sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b", + "sha256:0c3c3a203c375b08fd06a20da3cf7aac293b834b6f4f4db71190e8422750cca5", + "sha256:0c86e7ceea56376216eba345aa1fc6a8a6b27ac236181f840d1d7e6a1ea9ba5c", + "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c", + "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a", + "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf", + "sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8", + "sha256:1eb34d90aac9bfbced9a58b266f8946cb5935869ff01b164573a7634d39fbcb5", + "sha256:1f6cc0ad7b4560e5637eb2c994e97b4fa41ba8226069c9277eb5ea7101845b42", + "sha256:27c6ac6aa9fc7bc662f594ef380707494cb42c22786a558d95fcdedb9aa5d035", + "sha256:2d219b0dbabe75e15e581fc1ae796109b07c8ba7d25b9ae8d650da582bed01b0", + "sha256:2fce1df66915909ff6c824bbb5eb403d2d15f98f1518e583074671a30fe0c21e", + "sha256:319fa8765bfd6a265e5fa661547556da381e53274bc05094fc9ea50da51bfd46", + "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d", + "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24", + "sha256:3e19ea4ea0bf46179f8a3652ac1426e6dcbaf577ce4b4f65be581e237340420d", + "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de", + "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf", + "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7", + "sha256:43593c6772aa12abc3af7784bff4a41ffa921608dd38b77cf1dfd7f5c4e71371", + "sha256:47ef24aa6511e388e9894ec16f0fbf3313a53ee68402bc428744a367ec55b833", + "sha256:4cf9e93a81979f1424f1a3d155213dc928f1069d697e4353edb8a5eba67c6259", + "sha256:4d0dfdd9a2ebc77b869a0b04423591ea8823f791293b527dc1bb896c1d6f1136", + "sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25", + "sha256:58aa11f4ca8b60113d4b8e32d37e7e78bd8af4d1a5b5cb4979ed856a45e62005", + "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef", + "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7", + "sha256:5b9145c35cc87313b5fd480144f8078716007656093d23059e8993d3a8fa730f", + "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53", + "sha256:5cdb0f3e1eb6dfc9965d19734d8f9c481b294b5274337a8cb5cb01b462dcb7e0", + "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb", + "sha256:603f1fe4144420374f1a69b907494c3acbc867a581c2d49d4175b0de7cc64566", + "sha256:61014615c1274df8da5991a1e5da85a3ccb00c2d4701ac6f3383afd3ca47ab0a", + "sha256:64a956dff37080b352c1c40b2966b09defb014347043e740d420ca1eb7c9b908", + "sha256:668ddddc9f3075af019f784456267eb504cb77c2c4bd46cc8402d723b4d200bf", + "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458", + "sha256:6f173bbfe976105aaa890b712d1759de339d8a7cef2fc0a1714cc1a1e1c47f64", + "sha256:71ebe3fe42656a2328ab08933d420df5f3ab121772eef78f2dc63624157f0ed9", + "sha256:730178f476ef03d3d4d255f0c9fa186cb1d13fd33ffe89d39f2cda4da90ceb71", + "sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b", + "sha256:7f30241577d2fef2602113b70ef7231bf4c69a97e04693bde08ddab913ba0ce5", + "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037", + "sha256:82de5da8c8893056603ac2d6a89eb8b4df49abf1a7c19d536984c8dd63f481d5", + "sha256:83be47aa4e35b87c106fc0c84c0fc069d3f9b9b06d3c494cd404ec6747544894", + "sha256:8638f99dca15b9dff328fb6273e09f03d1c50d9b6512f3b65a4154588a7595fe", + "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757", + "sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3", + "sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976", + "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6", + "sha256:916cd229b0150129d645ec51614d38129ee74c03293a9f3f17537be0029a9641", + "sha256:9532ea0b26a401264b1365146c440a6d78269ed41f83f23818d4b79497aeabe7", + "sha256:967a8eec513dbe08330f10137eacb427b2ca52118769e82ebcfcab0fba92a649", + "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120", + "sha256:9979643ffc69b799d50d3a7b72b5164a2e97e117009d7af6dfdd2ab906cb72cd", + "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40", + "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e", + "sha256:9e64e948ab41411958670f1093c0a57acfdc3bee5cf5b935671bbd5313bcf229", + "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c", + "sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7", + "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111", + "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654", + "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f", + "sha256:a461959ead5b38e2581998700b26346b78cd98540b5524796c175722f18b0294", + "sha256:a75801768bbe65499495660b777e018cbe90c7980f07f8aa57d6be79ea6f71da", + "sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f", + "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7", + "sha256:b0313e8b923b3814d1c4a524c93dfecea5f39fa95601f6a9b1ac96cd66f89ea0", + "sha256:b23c11c2c9e6d4e7300c92e022046ad09b91fd00e36e83c44483df4afa990073", + "sha256:b303b194c2e6f171cfddf8b8ba30baefccf03d36a4d9cab7fd0bb68ba476a3d7", + "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11", + "sha256:bd39c92e4c8f6cbf5f08257d6360123af72af9f4da75a690bef50da77362d25f", + "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27", + "sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70", + "sha256:c66d8ccbc902ad548312b96ed8d5d266d0d2c6d006fd0f66323e9d8f2dd49be7", + "sha256:cd6a55f65241c551eb53f8cf4d2f4af33512c39da5d9777694e9d9c60872f519", + "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5", + "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180", + "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f", + "sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee", + "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18", + "sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815", + "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e", + "sha256:e861ad82892408487be144906a368ddbe2dc6297074ade2d892341b35c59844a", + "sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7", + "sha256:ed5f6d2edbf349bd8d630e81f474d33d6ae5d07760c44d33cd808e2f5c8f4ae6", + "sha256:ef2e4e91fb3945769e14ce82ed53007195e616a63aa43b40fb7ebaaf907c8d4c", + "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc", + "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8", + "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98", + "sha256:f35c7070eeec2cdaac6fd3fe245226ed2a6292d3ee8c938e5bb645b434c5f256", + "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5", + "sha256:f6f1324db48f001c2ca26a25fa25af60711e09b9aaf4b28488602776f4f9a744", + "sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723", + "sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277", + "sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5" ], "markers": "python_version >= '3.9'", - "version": "==0.2.1" + "version": "==0.3.1" + }, + "pycparser": { + "hashes": [ + "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", + "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc" + ], + "markers": "python_version >= '3.8'", + "version": "==2.22" }, "pydantic": { "hashes": [ - "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584", - "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236" + "sha256:442557d2910e75c991c39f4b4ab18963d57b9b55122c8b2a9cd176d8c29ce968", + "sha256:5b6c415eee9f8123a14d859be0c84363fec6b1feb6b688d6435801230b56e0b8" ], "index": "pypi", - "version": "==2.10.6" + "version": "==2.11.1" }, "pydantic-core": { "hashes": [ - "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278", - "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50", - "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9", - "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f", - "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6", - "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc", - "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54", - "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630", - "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9", - "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236", - "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7", - "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee", - "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b", - "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048", - "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc", - "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130", - "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4", - "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd", - "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4", - "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7", - "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7", - "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4", - "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e", - "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa", - "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6", - "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962", - "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b", - "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f", - "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474", - "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5", - "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459", - "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf", - "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a", - "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c", - "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76", - "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362", - "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4", - "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934", - "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320", - "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118", - "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96", - "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306", - "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046", - "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3", - "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2", - "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af", - "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9", - "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67", - "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a", - "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27", - "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35", - "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b", - "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151", - "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b", - "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154", - "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133", - "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef", - "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145", - "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15", - "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4", - "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc", - "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee", - "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c", - "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0", - "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5", - "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57", - "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b", - "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8", - "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1", - "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da", - "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e", - "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc", - "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993", - "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656", - "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4", - "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c", - "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb", - "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d", - "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9", - "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e", - "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1", - "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc", - "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a", - "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9", - "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506", - "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b", - "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1", - "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d", - "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99", - "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3", - "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31", - "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c", - "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39", - "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a", - "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308", - "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2", - "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228", - "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b", - "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9", - "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad" + "sha256:024d136ae44d233e6322027bbf356712b3940bee816e6c948ce4b90f18471b3d", + "sha256:0310524c833d91403c960b8a3cf9f46c282eadd6afd276c8c5edc617bd705dc9", + "sha256:07b4ced28fccae3f00626eaa0c4001aa9ec140a29501770a88dbbb0966019a86", + "sha256:085d8985b1c1e48ef271e98a658f562f29d89bda98bf120502283efbc87313eb", + "sha256:0a98257451164666afafc7cbf5fb00d613e33f7e7ebb322fbcd99345695a9a61", + "sha256:0bcf0bab28995d483f6c8d7db25e0d05c3efa5cebfd7f56474359e7137f39856", + "sha256:138d31e3f90087f42aa6286fb640f3c7a8eb7bdae829418265e7e7474bd2574b", + "sha256:14229c1504287533dbf6b1fc56f752ce2b4e9694022ae7509631ce346158de11", + "sha256:1583539533160186ac546b49f5cde9ffc928062c96920f58bd95de32ffd7bffd", + "sha256:175ab598fb457a9aee63206a1993874badf3ed9a456e0654273e56f00747bbd6", + "sha256:1a69b7596c6603afd049ce7f3835bcf57dd3892fc7279f0ddf987bebed8caa5a", + "sha256:1a73be93ecef45786d7d95b0c5e9b294faf35629d03d5b145b09b81258c7cd6d", + "sha256:1b1262b912435a501fa04cd213720609e2cefa723a07c92017d18693e69bf00b", + "sha256:1b2ea72dea0825949a045fa4071f6d5b3d7620d2a208335207793cf29c5a182d", + "sha256:20d4275f3c4659d92048c70797e5fdc396c6e4446caf517ba5cad2db60cd39d3", + "sha256:23c3e77bf8a7317612e5c26a3b084c7edeb9552d645742a54a5867635b4f2453", + "sha256:26a4ea04195638dcd8c53dadb545d70badba51735b1594810e9768c2c0b4a5da", + "sha256:26bc7367c0961dec292244ef2549afa396e72e28cc24706210bd44d947582c59", + "sha256:2a0147c0bef783fd9abc9f016d66edb6cac466dc54a17ec5f5ada08ff65caf5d", + "sha256:2c0afd34f928383e3fd25740f2050dbac9d077e7ba5adbaa2227f4d4f3c8da5c", + "sha256:30369e54d6d0113d2aa5aee7a90d17f225c13d87902ace8fcd7bbf99b19124db", + "sha256:31860fbda80d8f6828e84b4a4d129fd9c4535996b8249cfb8c720dc2a1a00bb8", + "sha256:34e7fb3abe375b5c4e64fab75733d605dda0f59827752debc99c17cb2d5f3276", + "sha256:40eb8af662ba409c3cbf4a8150ad32ae73514cd7cb1f1a2113af39763dd616b3", + "sha256:41d698dcbe12b60661f0632b543dbb119e6ba088103b364ff65e951610cb7ce0", + "sha256:4726f1f3f42d6a25678c67da3f0b10f148f5655813c5aca54b0d1742ba821b8f", + "sha256:4927564be53239a87770a5f86bdc272b8d1fbb87ab7783ad70255b4ab01aa25b", + "sha256:4b6d77c75a57f041c5ee915ff0b0bb58eabb78728b69ed967bc5b780e8f701b8", + "sha256:4d9149e7528af8bbd76cc055967e6e04617dcb2a2afdaa3dea899406c5521faa", + "sha256:4deac83a8cc1d09e40683be0bc6d1fa4cde8df0a9bf0cda5693f9b0569ac01b6", + "sha256:4f1ab031feb8676f6bd7c85abec86e2935850bf19b84432c64e3e239bffeb1ec", + "sha256:502ed542e0d958bd12e7c3e9a015bce57deaf50eaa8c2e1c439b512cb9db1e3a", + "sha256:5461934e895968655225dfa8b3be79e7e927e95d4bd6c2d40edd2fa7052e71b6", + "sha256:58c1151827eef98b83d49b6ca6065575876a02d2211f259fb1a6b7757bd24dd8", + "sha256:5bdd36b362f419c78d09630cbaebc64913f66f62bda6d42d5fbb08da8cc4f181", + "sha256:5bf637300ff35d4f59c006fff201c510b2b5e745b07125458a5389af3c0dff8c", + "sha256:5bf68bb859799e9cec3d9dd8323c40c00a254aabb56fe08f907e437005932f2b", + "sha256:5d8dc9f63a26f7259b57f46a7aab5af86b2ad6fbe48487500bb1f4b27e051e4c", + "sha256:5f36afd0d56a6c42cf4e8465b6441cf546ed69d3a4ec92724cc9c8c61bd6ecf4", + "sha256:5f72914cfd1d0176e58ddc05c7a47674ef4222c8253bf70322923e73e14a4ac3", + "sha256:6291797cad239285275558e0a27872da735b05c75d5237bbade8736f80e4c225", + "sha256:62c151ce3d59ed56ebd7ce9ce5986a409a85db697d25fc232f8e81f195aa39a1", + "sha256:635702b2fed997e0ac256b2cfbdb4dd0bf7c56b5d8fba8ef03489c03b3eb40e2", + "sha256:64672fa888595a959cfeff957a654e947e65bbe1d7d82f550417cbd6898a1d6b", + "sha256:68504959253303d3ae9406b634997a2123a0b0c1da86459abbd0ffc921695eac", + "sha256:69297418ad644d521ea3e1aa2e14a2a422726167e9ad22b89e8f1130d68e1e9a", + "sha256:6c32a40712e3662bebe524abe8abb757f2fa2000028d64cc5a1006016c06af43", + "sha256:715c62af74c236bf386825c0fdfa08d092ab0f191eb5b4580d11c3189af9d330", + "sha256:71dffba8fe9ddff628c68f3abd845e91b028361d43c5f8e7b3f8b91d7d85413e", + "sha256:7419241e17c7fbe5074ba79143d5523270e04f86f1b3a0dff8df490f84c8273a", + "sha256:759871f00e26ad3709efc773ac37b4d571de065f9dfb1778012908bcc36b3a73", + "sha256:7a25493320203005d2a4dac76d1b7d953cb49bce6d459d9ae38e30dd9f29bc9c", + "sha256:7b79af799630af263eca9ec87db519426d8c9b3be35016eddad1832bac812d87", + "sha256:7c9c84749f5787781c1c45bb99f433402e484e515b40675a5d121ea14711cf61", + "sha256:7da333f21cd9df51d5731513a6d39319892947604924ddf2e24a4612975fb936", + "sha256:82a4eba92b7ca8af1b7d5ef5f3d9647eee94d1f74d21ca7c21e3a2b92e008358", + "sha256:89670d7a0045acb52be0566df5bc8b114ac967c662c06cf5e0c606e4aadc964b", + "sha256:8a1d581e8cdbb857b0e0e81df98603376c1a5c34dc5e54039dcc00f043df81e7", + "sha256:8ec86b5baa36f0a0bfb37db86c7d52652f8e8aa076ab745ef7725784183c3fdd", + "sha256:91301a0980a1d4530d4ba7e6a739ca1a6b31341252cb709948e0aca0860ce0ae", + "sha256:918f2013d7eadea1d88d1a35fd4a1e16aaf90343eb446f91cb091ce7f9b431a2", + "sha256:9cb2390355ba084c1ad49485d18449b4242da344dea3e0fe10babd1f0db7dcfc", + "sha256:9ee65f0cc652261744fd07f2c6e6901c914aa6c5ff4dcfaf1136bc394d0dd26b", + "sha256:a608a75846804271cf9c83e40bbb4dab2ac614d33c6fd5b0c6187f53f5c593ef", + "sha256:a66d931ea2c1464b738ace44b7334ab32a2fd50be023d863935eb00f42be1778", + "sha256:a7a7f2a3f628d2f7ef11cb6188bcf0b9e1558151d511b974dfea10a49afe192b", + "sha256:abaeec1be6ed535a5d7ffc2e6c390083c425832b20efd621562fbb5bff6dc518", + "sha256:abfa44cf2f7f7d7a199be6c6ec141c9024063205545aa09304349781b9a125e6", + "sha256:ade5dbcf8d9ef8f4b28e682d0b29f3008df9842bb5ac48ac2c17bc55771cc976", + "sha256:ae62032ef513fe6281ef0009e30838a01057b832dc265da32c10469622613885", + "sha256:aec79acc183865bad120b0190afac467c20b15289050648b876b07777e67ea48", + "sha256:b716294e721d8060908dbebe32639b01bfe61b15f9f57bcc18ca9a0e00d9520b", + "sha256:b9ec80eb5a5f45a2211793f1c4aeddff0c3761d1c70d684965c1807e923a588b", + "sha256:ba95691cf25f63df53c1d342413b41bd7762d9acb425df8858d7efa616c0870e", + "sha256:bccc06fa0372151f37f6b69834181aa9eb57cf8665ed36405fb45fbf6cac3bae", + "sha256:c860773a0f205926172c6644c394e02c25421dc9a456deff16f64c0e299487d3", + "sha256:ca1103d70306489e3d006b0f79db8ca5dd3c977f6f13b2c59ff745249431a606", + "sha256:ce72d46eb201ca43994303025bd54d8a35a3fc2a3495fac653d6eb7205ce04f4", + "sha256:d20cbb9d3e95114325780f3cfe990f3ecae24de7a2d75f978783878cce2ad585", + "sha256:dcfebee69cd5e1c0b76a17e17e347c84b00acebb8dd8edb22d4a03e88e82a207", + "sha256:e1c69aa459f5609dec2fa0652d495353accf3eda5bdb18782bc5a2ae45c9273a", + "sha256:e2762c568596332fdab56b07060c8ab8362c56cf2a339ee54e491cd503612c50", + "sha256:e37f10f6d4bc67c58fbd727108ae1d8b92b397355e68519f1e4a7babb1473442", + "sha256:e790954b5093dff1e3a9a2523fddc4e79722d6f07993b4cd5547825c3cbf97b5", + "sha256:e81a295adccf73477220e15ff79235ca9dcbcee4be459eb9d4ce9a2763b8386c", + "sha256:e925819a98318d17251776bd3d6aa9f3ff77b965762155bdad15d1a9265c4cfd", + "sha256:ea30239c148b6ef41364c6f51d103c2988965b643d62e10b233b5efdca8c0099", + "sha256:eabf946a4739b5237f4f56d77fa6668263bc466d06a8036c055587c130a46f7b", + "sha256:ecb158fb9b9091b515213bed3061eb7deb1d3b4e02327c27a0ea714ff46b0760", + "sha256:ecc6d02d69b54a2eb83ebcc6f29df04957f734bcf309d346b4f83354d8376862", + "sha256:eddb18a00bbb855325db27b4c2a89a4ba491cd6a0bd6d852b225172a1f54b36c", + "sha256:f00e8b59e1fc8f09d05594aa7d2b726f1b277ca6155fc84c0396db1b373c4555", + "sha256:f1fb026c575e16f673c61c7b86144517705865173f3d0907040ac30c4f9f5915", + "sha256:f200b2f20856b5a6c3a35f0d4e344019f805e363416e609e9b47c552d35fd5ea", + "sha256:f225f3a3995dbbc26affc191d0443c6c4aa71b83358fd4c2b7d63e2f6f0336f9", + "sha256:f22dab23cdbce2005f26a8f0c71698457861f97fc6318c75814a50c75e87d025", + "sha256:f3eb479354c62067afa62f53bb387827bee2f75c9c79ef25eef6ab84d4b1ae3b", + "sha256:fc53e05c16697ff0c1c7c2b98e45e131d4bfb78068fffff92a82d169cbb4c7b7", + "sha256:ff48a55be9da6930254565ff5238d71d5e9cd8c5487a191cb85df3bdb8c77365" ], - "markers": "python_version >= '3.8'", - "version": "==2.27.2" + "markers": "python_version >= '3.9'", + "version": "==2.33.0" }, "python-dateutil": { "hashes": [ @@ -782,10 +1066,111 @@ }, "pytz": { "hashes": [ - "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57", - "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e" - ], - "version": "==2025.1" + "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", + "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00" + ], + "version": "==2025.2" + }, + "qh3": { + "hashes": [ + "sha256:0107f576a0524421e1b0f9e0437d2881a1835b1b6105eadd7ea0c1c9bf2da917", + "sha256:06159707895c606a321ccb5630347a2d2a44ee584f22945e5b22b0ad34f21ec8", + "sha256:06255835f99ea1af9e5d358056011686fcccbafaba893454027daa62ab6f701f", + "sha256:09b2305a954e61a9ed8b46a7a45f54e8d95ef870a47d5fd1836e14c7600d3b92", + "sha256:0a51dcffae03a89ddbab1884860569e0d1dbbf95deee47457c1fd29b4ac8d220", + "sha256:0a5d1cd881b7d43481ad60262cf3390a555e0e51751bc2af70ba4a612487e797", + "sha256:0e1c273660f9b8511c22d0b082137556e46d6a7eccf132bd82f95d29f90488b2", + "sha256:0e540cc7e7da65da30381bdb73a789a8635c6aaef98688d904eee3bc587654a5", + "sha256:10ed818f47dc522350a12641e8f2bea19ff824f8ce373c23a8e594b3481fd7a4", + "sha256:195b4ad58cf5a8da218e2368d34f47628c14581f3cc9863fc0406b32e137f3a6", + "sha256:1a80d07249c7ccbaa57bb9015b5ead0ead7ac1940cd5483548dfe56db99ce7a4", + "sha256:1cf0b18823801078d2294a0356abc2be34b4a224bea863a87029c1c97d6c34e0", + "sha256:1fac2ab4b8a2e50894b54a19416cd363defe0fb33f52754686ea58999f98dfc5", + "sha256:205cdaea9da8881b31b76eb6da5b88c9558ba96bc16a3ecf11333098ac7f3859", + "sha256:2294e78bcc40728a3a772df0f8ecf8b8756616d06dd001029016876aa4e5c9de", + "sha256:235236ab195d34e7cd18d186e46b7a4f8aceafe246bf36b42913f72627ded414", + "sha256:25eef1f2be50d79d23e01a567c719e46e4892518a5ccc96685fcb4746357320b", + "sha256:2ae147b756c3adf59699756feb9e07d4a69674f57b4e13d6c25f9d1dc3c8707c", + "sha256:2c9cdd7ea49c79b671e7de35dad61d2aa91920e2498d0c6dfa932d5e05070a5e", + "sha256:2dc9f269d7316b0a44e61ae7a11ffd8daa800b3f5ba773de2e9d8c4ee636a896", + "sha256:2f94d69edb0070ef4ec414deabfc2369aa2100b11bf4a4f2f393f2c28c4bc7ba", + "sha256:311da331e31c55afc3f4f4f2ba9d07a1d700ffb7db5aa4f58300b9f56f2523dc", + "sha256:3578844a9ff4c342a409d010f909782afc52a31680876f7fab65bf133aa3f4db", + "sha256:4032c2898b4c0ff7a25cf7d68c3b1f2abdcaf4f25cc8b6802a941a842f9a95b6", + "sha256:40abd150eddfa0884c139bd281e87ff920d4cd52d685fc4ef25ddcc77ff7a220", + "sha256:43e32602651d07f8a0860ba0a45d8c8fe9ccd537030e7632d1258f7b84881416", + "sha256:45a21d25fe17168f4db09fcaabee5dd171763ad1bd8753c257297837f5ba9197", + "sha256:45bfbb126e31ecf63ef74c249d38d07e149c0663b4a191cf9e2e3445a80758d5", + "sha256:4745667c9956bcfd74ff677edd4c73d6cb578b6b47c5fb3d246aaa223dd6a004", + "sha256:4936a5d8915866b4f08ab18018f41ed93a2593788ad0a80796aada2e23d402e5", + "sha256:4a45a9698b3bcae05f91356f50df8dab3c3fdef3187548b9c4a396a6eb6760b5", + "sha256:4b84c1ca283278e2e22a3b9e2ce8ea55c0a1797d6e86255640a1b6293fe18b2a", + "sha256:4dc88397ed7f3b46f542f87e19050a7f82267225009ce65651ac44cb55b204b1", + "sha256:4e10a872077373c71d7938fb1a7ae0561f2e79aad2b1b5323dbb6325a389041a", + "sha256:4f1b5dcb4d9da5b441e0b14216b816be7b5b5d080c2ccb957adf84266411ff6b", + "sha256:50d25182d598312197f500a65acebf5430391764e6ffcdb73d96e80c5dd06fc7", + "sha256:529c5b9e27fced27befce26e2699eca3110c576f6427dfbd26e30b7666b2d6d1", + "sha256:571da625b22e953731307539b44b2177f6ab13b6142d7698c0f28b9379ae1be6", + "sha256:5a9de89e2480b385a99613798d375e69a0a53d4575bd74b133307c8e83a84751", + "sha256:5bcc46cf89cb1036c2d029c01f360c82180329997a75728b20dc205f34114327", + "sha256:5dfa6238a6236f2bb3ecaac9befd23cee0bcbb9e497003fb3aef875e19325c61", + "sha256:6342b961b18037e3df8692e8914c576816a966bf29f913ee2728e7e838bde9bd", + "sha256:65e112c175a0b0328822dd0d19ead9ef1d7925359d154fb52e46b080945eef38", + "sha256:6f8a2b15c4dd58133e92f95d4312efd09b87ec15b881885629dff70e89f1e751", + "sha256:726f749444d1cc73c1bf221343dc6fdbde2541ffe30860d2d5ef6e310a1f5478", + "sha256:742f39cd807df31c21e035aec63f6f61e139a60545cffb16e8e87f61609d7cba", + "sha256:7840c18ec27aa08ecdd8ff23df348c124378c6f3edf9a0e02b16a5a4ce504c89", + "sha256:79d1de24d3c7345719af8333b64f19a8777dd50a059851bfcfa583c7109eddf2", + "sha256:7ba9303c5334d64b547483be92c4bbacd37964ff3abd0b1e8c82c63ec6f7b3ec", + "sha256:85587d9dfbd2f7f8622cf57f3c1a19cee441b5607a982cdf4c08ef38d45d5a36", + "sha256:8711b86e447e689d1b693419708b6ad64bf0c57091b94a3f65c6d4bd7cfb7d9a", + "sha256:877edc4db25309d86af07d992926394936f491cce84fce439961729552e942fe", + "sha256:8bb17669e362d3456bebd5c69abb0c26e8ab29c10894f123c715b0217aece479", + "sha256:8bb17a1e50e35a8d07cab784caea68b33f739391ccb5e3161afb9db0bde8faf4", + "sha256:8d4640a6bb3aa29797bdcf0c5bae4e86da5f2fbf84b67a7fad549fa34c19aa98", + "sha256:90697f3d9e4b3ddccfb31b40637bac6d44b39288cd57f78e51ff13e70916eccc", + "sha256:90f127f57c00b111ea3ffd95f4c12ad83efebd10310fd718d66771dd64e568f1", + "sha256:95f8f70bca1e880da7559ef38b7f1778a3b39b586fc829b8a7e989e912aa988f", + "sha256:9a60c102a01dfa8c5d737499c9a5d5e7c2b6642009c9b80b27f228ec50ce6fb0", + "sha256:9c7f1821ec749ea29bd9d079e4f13a552371731d0b664962a60cbb2f31d571b5", + "sha256:9f81ee66fadedbfd4d5c49e64151db3b6f353b041ddf5ab0b151340a4467e038", + "sha256:9f8e530e29e1afe9231b1100645aa5cc240b823c0e4162f70046270a3559400c", + "sha256:a0c647db3f156e8c94a63c1fa0fc4f2ce8b70f0eb12f2726e6c19493198b1e99", + "sha256:a0cda60607ab4ffc14fa8425ea7c9ae78ad60923c3c8be94d19c14f83198b1cf", + "sha256:a5bff397d49da302b5afbdf244dd7ca480a827f5de856d957df05dfd7e73b490", + "sha256:a94bd391b955b24948b2986845f9c6ad8abc709c2d57d0515daeacf16a2a3a4c", + "sha256:ad4572bd37c1a6a7a12ff47da4f3578a13e3c8ee85a1f02d2435dfdc6d9ed394", + "sha256:b13b7de1686f1b5da7526dc4f0de410a685f5cb654e984b09ddd8d14be6fffc0", + "sha256:b1724c43c5c0d08b68c3407467e07794b9adf153b6de8300d61883e8d95fa640", + "sha256:b27d29cb718df9ed006f8c75a89dd90534437761b2477dc7a4145bde0daa60fc", + "sha256:b3afa3a78b0f011ff5a09dea37d74fcea9269b318d2828f18b2fbf9dde625a71", + "sha256:bd6a61007e678284178bb00931af59f686a2a55797505e0886241050ec5c243c", + "sha256:befeca45fd7787c08a3286fb72caaccfa4c3962760981dfeb0992f5ba9be5cb2", + "sha256:c2d31b8233f406e00f180e221986f436765c3bb06839e72c898feca31fef1d4e", + "sha256:c3e2518ce442b70314892a594e21157deb13fbc436f77ad6555439cfd9912035", + "sha256:c8d5fbee607db24ef6c7b0bd08c21226d10782df4149b9d6f1f1516c7c85092b", + "sha256:cc2cc804998e852bdffcc87e8d008043ffa85efe6d3516d9784714d709f14774", + "sha256:cd8a681107c6118f60a0714671cec7b301533f25984a5c898e547a33a01af75c", + "sha256:d056831ebf3fa8116672ae970ad19a9f5f1427a2217cd0e01c1eaac5f8222668", + "sha256:d5ac3e8e3f66ff88819205dbc67e6f771cbb80529325ca9f3bc03fa00c5c83aa", + "sha256:dba15ca2da7859300ae79d2ea2eb8bb0eb827b93a2f104981783add16a97058a", + "sha256:de6cabb89248b60ea9bb9d7848de78dfb824abfdc15f52448a8efe821dd7d559", + "sha256:e02f6d1cc2005b847176dd8770fdfe90f04a34a3f094b79a8369bde0aa8f6a04", + "sha256:e514bd4b27c953c46485b2be0ecd2421aa196c5a0cd7d67f1ccec16a56b00507", + "sha256:e53464124379764f982a69f5ab34d0d5c527e8ac1e788db86a25f79045e5b18d", + "sha256:e9cf59660a543bef86de457c671c1d78ad2d88c53bb9eb3fce6ce0cb9729d490", + "sha256:edfc1bc732bc5e62fdaea268a541eb442d5e04927cb27dfd8e92ef07213658d2", + "sha256:ee8e7a66be70a18f5e0558f2f6a89e39c608f87b027234848f76a6699975dcf8", + "sha256:effb7072efef7dca10a98c24be0cc882a40edc78e293b41f5b6dc7f1952215ed", + "sha256:f04e4ee7e3c123ac7f21cee6f819cfa9b5a376e656257dfa7a4d133b3590bdd9", + "sha256:f0531c7abe963affebd3fb6cf9ea87eb8c63a0240535d81d0223945bd41be254", + "sha256:f5afd1c216315682a6bbf606618de0e3817ed8eeafc27ad7660ef2f581d4fd46", + "sha256:f93d3c74e00268ac6042c080653a34d0f0e8903697fd8dc480c1e3de81c90faf", + "sha256:fbc4e6452cc48c3e1398fe930349e2ec9ad76a2c00e729f3e797700c2f0646e6", + "sha256:fc73fc2889a01a43737c7a7c7fb9ee13aa56065b22abbed0e787cc58a3747808" + ], + "markers": "python_version < '3.12' and (platform_python_implementation != 'CPython' or python_full_version > '3.7.10') and (platform_system == 'Darwin' or platform_system == 'Windows' or platform_system == 'Linux') and (platform_machine == 'x86_64' or platform_machine == 's390x' or platform_machine == 'armv7l' or platform_machine == 'ppc64le' or platform_machine == 'ppc64' or platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'arm64' or platform_machine == 'ARM64' or platform_machine == 'x86' or platform_machine == 'i686') and (platform_python_implementation == 'CPython' or platform_python_implementation == 'PyPy')", + "version": "==1.4.2" }, "requests": { "hashes": [ @@ -821,28 +1206,148 @@ }, "typing-extensions": { "hashes": [ - "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", - "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" + "sha256:0a4ac55a5820789d87e297727d229866c9650f6521b64206413c4fbada24d95b", + "sha256:c8dd92cc0d6425a97c18fbb9d1954e5ff92c1ca881a309c45f06ebc0b79058e5" ], "markers": "python_version >= '3.8'", - "version": "==4.12.2" + "version": "==4.13.0" + }, + "typing-inspection": { + "hashes": [ + "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f", + "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122" + ], + "markers": "python_version >= '3.9'", + "version": "==0.4.0" }, "tzdata": { "hashes": [ - "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694", - "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639" + "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", + "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9" ], "markers": "python_version >= '2'", - "version": "==2025.1" + "version": "==2025.2" }, "urllib3": { "hashes": [ "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" ], - "markers": "python_version >= '3.9'", + "markers": "python_version >= '3.10'", "version": "==2.3.0" }, + "urllib3-future": { + "hashes": [ + "sha256:255fa9ba873e9045a5fb2e9838e2b108be35519c29e7f3accff13ee4c417a1cf", + "sha256:7243b5bb8d8cdbcbff342bc31b885e35662c4dcfd94d097473cce1bd02944cbf" + ], + "markers": "python_version >= '3.7'", + "version": "==2.12.914" + }, + "verlib2": { + "hashes": [ + "sha256:2862f19528db400d130253a2b71c7c3616ee14e1d54bf6833bc0929d2cddd141", + "sha256:cf8e2be044b834a2670f2d4c20a93cfc674933c0070543a6f61d531439cca200" + ], + "markers": "python_version >= '3.6'", + "version": "==0.3.1" + }, + "wassima": { + "hashes": [ + "sha256:10508102696d5e2cf4df6942a8ae251c136a49dc32591e9c3f7dd007f5ea1c2f", + "sha256:1102836ba373912537eba891e7e5893532d4ee915ee2486e981b73f925f63c37", + "sha256:11887557464e0c3f9694fb16406bb56c1fb1566178cd04bfb5b4624fad183b31", + "sha256:12c855cc5b96a2ac32d405ab7de1563fc91be54108b4fb16b06d125d07ea892b", + "sha256:134e863b692c35afe8f5ccbe8082fa39963804e20439a4c7aa98510197034704", + "sha256:17f129f4d36591772d906bcc893b76b236363fda61b575067ddfa8250f84ad30", + "sha256:17f132ffbab294902f8740708f27fd995ea04182fe4b4fde20be563f8a010715", + "sha256:18bc78b2230c6f1f9ddbeb6ca38439fea4cc8f60836af4f3538ed259e60e5eb8", + "sha256:194c3fad38603618dec03307d10a4ece852516df56560e04fb2562506f79c175", + "sha256:1b18ec743ab98dcbfc221749026b23fc573891651342f20971e53bdbf56d28ae", + "sha256:1fa19a3652509edd18f693cd9c873d8f73c9d1624eae6c3bf93e561b18ae2766", + "sha256:24bdb1a2b90c215e11ed7ce82ed7eada339c7dca8e0366916e4e3215b3b9d8d3", + "sha256:27d518f0863788c826faf387326f3babb3ea95a0b908f5b3ad2bc1fcc3c5a37d", + "sha256:350b5854dfb3eeb95cd17723b0f3503de0c01454da5ae7d60f192be2009239eb", + "sha256:3b3a4c8ffa76147507f0c88c5cc8c76ef96ab93b81e49b288a3a0b94ebfb34af", + "sha256:3e00fa8ff1aef7d8aad2e1b957add6cba8549a42e415400bd72ff1b61dc9da9d", + "sha256:3f29045dd0a7c287f850f1dc3948632a2d2cf7dd7ec02271c5f248f058da5650", + "sha256:4a528244e4a0f9e01b8593b1c8a60ac1d80ce8b13fe079f44b38328e4be075e3", + "sha256:4c4f5ca102fd083aa2b05c65a1fd18175e3dc7a889525fd2964219ee3c51edef", + "sha256:52358d86195954816231d2aa8c2919b85075320b6d3ba5b96216985c3182bfa0", + "sha256:52f473233ec4d57322c6295e85b3912dc1fc400d6308a04bd427b863934aa74e", + "sha256:556cded582aef3089de889b5a6efcf6d87fabfec55d574fcc3a4ada21308d487", + "sha256:564eda7bf0420c8cbebe5e8efc15f1b27fdcb37ebc4c2f92b8461ca83381b223", + "sha256:57a0ab5aed596f129fd4ea7584336b11fbef25c07d1351e37a959901dea8728e", + "sha256:58f1fddd660da8c8f30f4b8460129e2f217c226cd1b54b1cabb6465881fd788a", + "sha256:597b0d8ba697f4319bc1f301ed31630ca783c9fe82d2a2434dd2f7f709c4e394", + "sha256:5b194f0de77a4ae7bcf217a3ccd10798e94ca430cec6307628098a61cd2ac230", + "sha256:5f5ee564f4b836ed1b70ddb187c817e8f6f1ffb521a636bb20676f07b523396b", + "sha256:601f96340e4c8071994a39a76d4278e8e1d087cf385781dba795c5334262d865", + "sha256:61bfa09f38c36f1b1e6e44e7af888bb8f9d739e86099082a3b45875651a425e2", + "sha256:67fd323b8ad0e057c06b153983d8c50f812aad979ac89b07ed6952c345f6da02", + "sha256:69cb51f629d118256da3d2373575190c7e30d3fa67c344dc655f6c8ab3e83f0d", + "sha256:6b1d7ceeede8d8eed48616d2d33ed23d2dff307d0b17c577eafdadafe86a0478", + "sha256:6b7d696155ddd7ab5739ac221e8854115d0d8171bbf805074d9484083de386aa", + "sha256:6d23e9483756b81850b82e8b7ed20fd23de22b50d6a678f765c660d4206b7ce9", + "sha256:7b0229fecc849234f2a2d11e948ac38a9bab02d201fa4d6ad43c143e18c1a66e", + "sha256:7c53050b670d702eed541503175bd5441fc4bdf3898714f8eac8c6ae9db548ac", + "sha256:7d65676f1fc138d1742f704bf490045571b9c2c48cab7d2c2076a52729c143e5", + "sha256:7db25328c40cd574e5a68ef6507c5af4d1fa2a44cb3c028ff9ca6b522f8faf32", + "sha256:83ce1b09e9eb2ae033c303b74ecc4f3186bbc0897db1d8cd9942153b0631b8e0", + "sha256:86c509900cbb90b7b75155c580b22af591b696fa059059bcdbd75bc74179df85", + "sha256:87f80d0075f0d396b73d41bb1626a2dd5607e0db4b74cb17e55d874fcd538971", + "sha256:8b719755d556649f2fbf226cf1ca8581ade114751df1facec96f94e75bffdb3c", + "sha256:8e739d4192758df6e5363791f527deb91c615d63020ee8965df4bcd1a217f9a5", + "sha256:923d3bf8770dfeb3d94bdfee1c5b5a081592de69766436a395e1e6203c19cf71", + "sha256:97772bb55cb47da3de49ca4b59309a9bd91ead730a7cfac1992932486fb41352", + "sha256:98bdfdf734144277132f34f770eeb6b0db2c4de87415f34b178adee766632f24", + "sha256:98f38b1b01e6f270b9279d76261d6f222b72ef06b025cbd4911b962bb6de4c98", + "sha256:99318b5ea78843e3c3e19cd56367216774674a99848f00a6f2dcf84e36039641", + "sha256:9c623ef06876d432dc8acc93ed3494d3453333d767b1b06bba1a016ea9d850c9", + "sha256:9d0f9720dfd0155432d23bcc3605fe5831cd0f586ede4f14ff6f3bebe8fb867a", + "sha256:9e79216760faac6395bee8ca4077a53a309312faba0f71982127ad8625861780", + "sha256:a470c908fd9baaecf41715ea3c30c57b530d598ae5e9de7e0bd532755e66bb1b", + "sha256:a634b9b79e059f45a56ff3ef6e7241662bc6f0e5a096ee6eed6770ea368e8278", + "sha256:acd8195a53d0e84ea95bdf15a2651c53b829a3ddead21b4a620b6a0c5e1ae2ff", + "sha256:addbd207df3718fc9d9de5b6c90a5e3fbe667830cf629186c9fdcafbb6578cb4", + "sha256:ae2aec9d55e108ae2d22fd0bda24450a6c13c116f9698b9e7ba2c6492c4fe715", + "sha256:af6b70ca9788964c5da5b59ca412b62db2ea7f2386a91c0117667bdd963e828c", + "sha256:afa7d60a9203db36a55b6f2868da90aaa829ab415a21fba7fa75678789aeb16f", + "sha256:b08c1931c44e3c034e645f3e3a7f4c47e8b0758fb8f09a52d1e880a307a1066f", + "sha256:b22e356914e606ff398c002b9925df4454c5deca9dbe55b3ba4a5c9b2365cf0f", + "sha256:b8c0f50397c51086df941b48057c82f85d9da000bf4fe6f4bc64c4f649b26a5b", + "sha256:bc068bcd79fe017866f536e0ad9424793220be34e3124476e17e6cb77a97e690", + "sha256:bc30f5a605a366acb7f301b3421508eaec3c1a515c960791bd776cb63d016302", + "sha256:c0d246b3f8a771578279eab9cfcb820dedefd3dd5dc0e34b37a337fe46271fc0", + "sha256:c0fee0a8593028bde17b57527b1ac21fea74f209b3522363e3ba0197ffaa6323", + "sha256:c139d5b103bb1f085d8918815d62ad946224a658ac1a7cc1b93dc44bd498ff9a", + "sha256:c25235cec12c0e38b4104268e312c9c2f3527ebc126d296cff69ea7aa13434dc", + "sha256:c7429d038dc383966c692e752010cbb4d5dab0e515f231aa01cd746aed9db359", + "sha256:c85cd2e64967c0dce2927ad7c62c090aae6d6b7f9e3a6b9fb91f58b890ea6adc", + "sha256:ca04984df012020dd846599b8555666c544982c2a91dc6135565e6708624eb71", + "sha256:cb7d43c07d58ba13736e70dc3e064496efeb1ed4475a28afb26b7a3b030b89df", + "sha256:d018e05cb61eed3050d45bd0c0ef9b75420899f6ae254e68e7f2ef26975098c9", + "sha256:d24d42881eb74729b34014e2e87f3a4d0419c43db309de2dff3f39118716865f", + "sha256:d6e17f218af856ca22c30d1a1ac58b19bccf768b8589eb8d6e45e1f1ff258404", + "sha256:d855d0be1759c5efc404c04977ee48a8b6260aef6441e72c10973924dbde5a73", + "sha256:dea0dcc0e50978ef73be8cb384694b71a6e64b46847ee7decad96dc85fbf650c", + "sha256:e1e9228049cf2442ac486a03a0d543c5dff3089a915a3e39ab809b22672e1d76", + "sha256:e26d052a248d5be2257d848d6078d932cc1fd4e8226639f550344d0a7a2b8813", + "sha256:ee6ccb8197936a308a4034c90a42b30b37c46b7cbda66101d439d6983f59b368", + "sha256:eea9c37b45e73cebb4670afd1779db138eeff0f84ffc0871d2fb90c04c8d3aa8", + "sha256:f195bf641276261e6bc5f79f52601850c9bdbff8af401483b4805dbff535ed30", + "sha256:f264827618400ebeab16708c8acf7870f693b03bfb4d7e95253eb9b35074db5c", + "sha256:f44ccd2eaa433ff1a10f70242dc33315fc192b81664696154127bdd66ad7d3b2", + "sha256:f7a6068d8857c403e105e62132a00e9d9d401bd0efbff7f8b5b5bc8ab768a2d8", + "sha256:f9886176fe4bf1ac008c02adb5bd103f1191799f1897777d203ee44f615325a5", + "sha256:fa1f38d5583d283b40f998e2f13471bfa952e0c423ff95ec2ec329f3e1898107", + "sha256:fa65494e7bd0e3ba33b3e5a5ab30c2b6e95d3d1762baaa56151a0861618dc261", + "sha256:fd7186e23963714bab3c9a2ab75d002078335110d2c9fc883c65cbce43717f26", + "sha256:fec32c22b521fcdeb9aa7dee4373b2d81ca2d3fc8edc532f3e189d6f4f6f1f81" + ], + "markers": "python_version >= '3.7'", + "version": "==1.2.2" + }, "yarl": { "hashes": [ "sha256:00e5a1fea0fd4f5bfa7440a47eff01d9822a65b4488f7cff83155a0f31a2ecba", @@ -943,11 +1448,46 @@ }, "anyio": { "hashes": [ - "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a", - "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a" + "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", + "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c" ], "markers": "python_version >= '3.9'", - "version": "==4.8.0" + "version": "==4.9.0" + }, + "argon2-cffi": { + "hashes": [ + "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08", + "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea" + ], + "markers": "python_version >= '3.7'", + "version": "==23.1.0" + }, + "argon2-cffi-bindings": { + "hashes": [ + "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670", + "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f", + "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583", + "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194", + "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c", + "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a", + "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082", + "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5", + "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f", + "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7", + "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d", + "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f", + "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae", + "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3", + "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86", + "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367", + "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d", + "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93", + "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb", + "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e", + "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351" + ], + "markers": "python_version >= '3.6'", + "version": "==21.2.0" }, "babel": { "hashes": [ @@ -1162,109 +1702,121 @@ }, "coverage": { "hashes": [ - "sha256:00b2086892cf06c7c2d74983c9595dc511acca00665480b3ddff749ec4fb2a95", - "sha256:0533adc29adf6a69c1baa88c3d7dbcaadcffa21afbed3ca7a225a440e4744bf9", - "sha256:06097c7abfa611c91edb9e6920264e5be1d6ceb374efb4986f38b09eed4cb2fe", - "sha256:07e92ae5a289a4bc4c0aae710c0948d3c7892e20fd3588224ebe242039573bf0", - "sha256:0a9d8be07fb0832636a0f72b80d2a652fe665e80e720301fb22b191c3434d924", - "sha256:0e549f54ac5f301e8e04c569dfdb907f7be71b06b88b5063ce9d6953d2d58574", - "sha256:0ef01d70198431719af0b1f5dcbefc557d44a190e749004042927b2a3fed0702", - "sha256:0f16f44025c06792e0fb09571ae454bcc7a3ec75eeb3c36b025eccf501b1a4c3", - "sha256:14d47376a4f445e9743f6c83291e60adb1b127607a3618e3185bbc8091f0467b", - "sha256:1a936309a65cc5ca80fa9f20a442ff9e2d06927ec9a4f54bcba9c14c066323f2", - "sha256:1ceeb90c3eda1f2d8c4c578c14167dbd8c674ecd7d38e45647543f19839dd6ea", - "sha256:1f7ffa05da41754e20512202c866d0ebfc440bba3b0ed15133070e20bf5aeb5f", - "sha256:200e10beb6ddd7c3ded322a4186313d5ca9e63e33d8fab4faa67ef46d3460af3", - "sha256:220fa6c0ad7d9caef57f2c8771918324563ef0d8272c94974717c3909664e674", - "sha256:2251fabcfee0a55a8578a9d29cecfee5f2de02f11530e7d5c5a05859aa85aee9", - "sha256:2458f275944db8129f95d91aee32c828a408481ecde3b30af31d552c2ce284a0", - "sha256:299cf973a7abff87a30609879c10df0b3bfc33d021e1adabc29138a48888841e", - "sha256:2b996819ced9f7dbb812c701485d58f261bef08f9b85304d41219b1496b591ef", - "sha256:3688b99604a24492bcfe1c106278c45586eb819bf66a654d8a9a1433022fb2eb", - "sha256:3a1e465f398c713f1b212400b4e79a09829cd42aebd360362cd89c5bdc44eb87", - "sha256:488c27b3db0ebee97a830e6b5a3ea930c4a6e2c07f27a5e67e1b3532e76b9ef1", - "sha256:48cfc4641d95d34766ad41d9573cc0f22a48aa88d22657a1fe01dca0dbae4de2", - "sha256:4b467a8c56974bf06e543e69ad803c6865249d7a5ccf6980457ed2bc50312703", - "sha256:53c56358d470fa507a2b6e67a68fd002364d23c83741dbc4c2e0680d80ca227e", - "sha256:5d1095bbee1851269f79fd8e0c9b5544e4c00c0c24965e66d8cba2eb5bb535fd", - "sha256:641dfe0ab73deb7069fb972d4d9725bf11c239c309ce694dd50b1473c0f641c3", - "sha256:64cbb1a3027c79ca6310bf101014614f6e6e18c226474606cf725238cf5bc2d4", - "sha256:66fe626fd7aa5982cdebad23e49e78ef7dbb3e3c2a5960a2b53632f1f703ea45", - "sha256:676f92141e3c5492d2a1596d52287d0d963df21bf5e55c8b03075a60e1ddf8aa", - "sha256:69e62c5034291c845fc4df7f8155e8544178b6c774f97a99e2734b05eb5bed31", - "sha256:704c8c8c6ce6569286ae9622e534b4f5b9759b6f2cd643f1c1a61f666d534fe8", - "sha256:78f5243bb6b1060aed6213d5107744c19f9571ec76d54c99cc15938eb69e0e86", - "sha256:79cac3390bfa9836bb795be377395f28410811c9066bc4eefd8015258a7578c6", - "sha256:7ae6eabf519bc7871ce117fb18bf14e0e343eeb96c377667e3e5dd12095e0288", - "sha256:7e39e845c4d764208e7b8f6a21c541ade741e2c41afabdfa1caa28687a3c98cf", - "sha256:8161d9fbc7e9fe2326de89cd0abb9f3599bccc1287db0aba285cb68d204ce929", - "sha256:8bec2ac5da793c2685ce5319ca9bcf4eee683b8a1679051f8e6ec04c4f2fd7dc", - "sha256:959244a17184515f8c52dcb65fb662808767c0bd233c1d8a166e7cf74c9ea985", - "sha256:9b148068e881faa26d878ff63e79650e208e95cf1c22bd3f77c3ca7b1d9821a3", - "sha256:aa6f302a3a0b5f240ee201297fff0bbfe2fa0d415a94aeb257d8b461032389bd", - "sha256:ace9048de91293e467b44bce0f0381345078389814ff6e18dbac8fdbf896360e", - "sha256:ad7525bf0241e5502168ae9c643a2f6c219fa0a283001cee4cf23a9b7da75879", - "sha256:b01a840ecc25dce235ae4c1b6a0daefb2a203dba0e6e980637ee9c2f6ee0df57", - "sha256:b076e625396e787448d27a411aefff867db2bffac8ed04e8f7056b07024eed5a", - "sha256:b172f8e030e8ef247b3104902cc671e20df80163b60a203653150d2fc204d1ad", - "sha256:b1f097878d74fe51e1ddd1be62d8e3682748875b461232cf4b52ddc6e6db0bba", - "sha256:b95574d06aa9d2bd6e5cc35a5bbe35696342c96760b69dc4287dbd5abd4ad51d", - "sha256:bda1c5f347550c359f841d6614fb8ca42ae5cb0b74d39f8a1e204815ebe25750", - "sha256:cec6b9ce3bd2b7853d4a4563801292bfee40b030c05a3d29555fd2a8ee9bd68c", - "sha256:d1a987778b9c71da2fc8948e6f2656da6ef68f59298b7e9786849634c35d2c3c", - "sha256:d74c08e9aaef995f8c4ef6d202dbd219c318450fe2a76da624f2ebb9c8ec5d9f", - "sha256:e18aafdfb3e9ec0d261c942d35bd7c28d031c5855dadb491d2723ba54f4c3015", - "sha256:e216c5c45f89ef8971373fd1c5d8d1164b81f7f5f06bbf23c37e7908d19e8558", - "sha256:e695df2c58ce526eeab11a2e915448d3eb76f75dffe338ea613c1201b33bab2f", - "sha256:e7575ab65ca8399c8c4f9a7d61bbd2d204c8b8e447aab9d355682205c9dd948d", - "sha256:e995b3b76ccedc27fe4f477b349b7d64597e53a43fc2961db9d3fbace085d69d", - "sha256:ea31689f05043d520113e0552f039603c4dd71fa4c287b64cb3606140c66f425", - "sha256:eb5507795caabd9b2ae3f1adc95f67b1104971c22c624bb354232d65c4fc90b3", - "sha256:eb8668cfbc279a536c633137deeb9435d2962caec279c3f8cf8b91fff6ff8953", - "sha256:ecea0c38c9079570163d663c0433a9af4094a60aafdca491c6a3d248c7432827", - "sha256:f25d8b92a4e31ff1bd873654ec367ae811b3a943583e05432ea29264782dc32c", - "sha256:f60a297c3987c6c02ffb29effc70eadcbb412fe76947d394a1091a3615948e2f", - "sha256:f973643ef532d4f9be71dd88cf7588936685fdb576d93a79fe9f65bc337d9d73" + "sha256:02fad4f8faa4153db76f9246bc95c1d99f054f4e0a884175bff9155cf4f856cb", + "sha256:092b134129a8bb940c08b2d9ceb4459af5fb3faea77888af63182e17d89e1cf1", + "sha256:0ce92c5a9d7007d838456f4b77ea159cb628187a137e1895331e530973dcf862", + "sha256:0dab4ef76d7b14f432057fdb7a0477e8bffca0ad39ace308be6e74864e632271", + "sha256:1165490be0069e34e4f99d08e9c5209c463de11b471709dfae31e2a98cbd49fd", + "sha256:11dd6f52c2a7ce8bf0a5f3b6e4a8eb60e157ffedc3c4b4314a41c1dfbd26ce58", + "sha256:15d54ecef1582b1d3ec6049b20d3c1a07d5e7f85335d8a3b617c9960b4f807e0", + "sha256:171e9977c6a5d2b2be9efc7df1126fd525ce7cad0eb9904fe692da007ba90d81", + "sha256:177d837339883c541f8524683e227adcaea581eca6bb33823a2a1fdae4c988e1", + "sha256:18f544356bceef17cc55fcf859e5664f06946c1b68efcea6acdc50f8f6a6e776", + "sha256:199a1272e642266b90c9f40dec7fd3d307b51bf639fa0d15980dc0b3246c1393", + "sha256:1e6f867379fd033a0eeabb1be0cffa2bd660582b8b0c9478895c509d875a9d9e", + "sha256:2444fbe1ba1889e0b29eb4d11931afa88f92dc507b7248f45be372775b3cef4f", + "sha256:25fe40967717bad0ce628a0223f08a10d54c9d739e88c9cbb0f77b5959367542", + "sha256:264ff2bcce27a7f455b64ac0dfe097680b65d9a1a293ef902675fa8158d20b24", + "sha256:2a79c4a09765d18311c35975ad2eb1ac613c0401afdd9cb1ca4110aeb5dd3c4c", + "sha256:2c492401bdb3a85824669d6a03f57b3dfadef0941b8541f035f83bbfc39d4282", + "sha256:315ff74b585110ac3b7ab631e89e769d294f303c6d21302a816b3554ed4c81af", + "sha256:34a3bf6b92e6621fc4dcdaab353e173ccb0ca9e4bfbcf7e49a0134c86c9cd303", + "sha256:37351dc8123c154fa05b7579fdb126b9f8b1cf42fd6f79ddf19121b7bdd4aa04", + "sha256:385618003e3d608001676bb35dc67ae3ad44c75c0395d8de5780af7bb35be6b2", + "sha256:392cc8fd2b1b010ca36840735e2a526fcbd76795a5d44006065e79868cc76ccf", + "sha256:3d03287eb03186256999539d98818c425c33546ab4901028c8fa933b62c35c3a", + "sha256:44683f2556a56c9a6e673b583763096b8efbd2df022b02995609cf8e64fc8ae0", + "sha256:44af11c00fd3b19b8809487630f8a0039130d32363239dfd15238e6d37e41a48", + "sha256:452735fafe8ff5918236d5fe1feac322b359e57692269c75151f9b4ee4b7e1bc", + "sha256:4c181ceba2e6808ede1e964f7bdc77bd8c7eb62f202c63a48cc541e5ffffccb6", + "sha256:4dd532dac197d68c478480edde74fd4476c6823355987fd31d01ad9aa1e5fb59", + "sha256:520af84febb6bb54453e7fbb730afa58c7178fd018c398a8fcd8e269a79bf96d", + "sha256:553ba93f8e3c70e1b0031e4dfea36aba4e2b51fe5770db35e99af8dc5c5a9dfe", + "sha256:5b7b02e50d54be6114cc4f6a3222fec83164f7c42772ba03b520138859b5fde1", + "sha256:63306486fcb5a827449464f6211d2991f01dfa2965976018c9bab9d5e45a35c8", + "sha256:75c82b27c56478d5e1391f2e7b2e7f588d093157fa40d53fd9453a471b1191f2", + "sha256:7ba5ff236c87a7b7aa1441a216caf44baee14cbfbd2256d306f926d16b026578", + "sha256:7e688010581dbac9cab72800e9076e16f7cccd0d89af5785b70daa11174e94de", + "sha256:80b5b207a8b08c6a934b214e364cab2fa82663d4af18981a6c0a9e95f8df7602", + "sha256:822fa99dd1ac686061e1219b67868e25d9757989cf2259f735a4802497d6da31", + "sha256:881cae0f9cbd928c9c001487bb3dcbfd0b0af3ef53ae92180878591053be0cb3", + "sha256:88d96127ae01ff571d465d4b0be25c123789cef88ba0879194d673fdea52f54e", + "sha256:8b1c65a739447c5ddce5b96c0a388fd82e4bbdff7251396a70182b1d83631019", + "sha256:8fed429c26b99641dc1f3a79179860122b22745dd9af36f29b141e178925070a", + "sha256:9bb47cc9f07a59a451361a850cb06d20633e77a9118d05fd0f77b1864439461b", + "sha256:a6b6b3bd121ee2ec4bd35039319f3423d0be282b9752a5ae9f18724bc93ebe7c", + "sha256:ae13ed5bf5542d7d4a0a42ff5160e07e84adc44eda65ddaa635c484ff8e55917", + "sha256:af94fb80e4f159f4d93fb411800448ad87b6039b0500849a403b73a0d36bb5ae", + "sha256:b4c144c129343416a49378e05c9451c34aae5ccf00221e4fa4f487db0816ee2f", + "sha256:b52edb940d087e2a96e73c1523284a2e94a4e66fa2ea1e2e64dddc67173bad94", + "sha256:b559adc22486937786731dac69e57296cb9aede7e2687dfc0d2696dbd3b1eb6b", + "sha256:b838a91e84e1773c3436f6cc6996e000ed3ca5721799e7789be18830fad009a2", + "sha256:ba8480ebe401c2f094d10a8c4209b800a9b77215b6c796d16b6ecdf665048950", + "sha256:bc96441c9d9ca12a790b5ae17d2fa6654da4b3962ea15e0eabb1b1caed094777", + "sha256:c90e9141e9221dd6fbc16a2727a5703c19443a8d9bf7d634c792fa0287cee1ab", + "sha256:d2e73e2ac468536197e6b3ab79bc4a5c9da0f078cd78cfcc7fe27cf5d1195ef0", + "sha256:d3154b369141c3169b8133973ac00f63fcf8d6dbcc297d788d36afbb7811e511", + "sha256:d66ff48ab3bb6f762a153e29c0fc1eb5a62a260217bc64470d7ba602f5886d20", + "sha256:d6874929d624d3a670f676efafbbc747f519a6121b581dd41d012109e70a5ebd", + "sha256:e33426a5e1dc7743dd54dfd11d3a6c02c5d127abfaa2edd80a6e352b58347d1a", + "sha256:e52eb31ae3afacdacfe50705a15b75ded67935770c460d88c215a9c0c40d0e9c", + "sha256:eae79f8e3501133aa0e220bbc29573910d096795882a70e6f6e6637b09522133", + "sha256:eebd927b86761a7068a06d3699fd6c20129becf15bb44282db085921ea0f1585", + "sha256:eff187177d8016ff6addf789dcc421c3db0d014e4946c1cc3fbf697f7852459d", + "sha256:f5f99a93cecf799738e211f9746dc83749b5693538fbfac279a61682ba309387", + "sha256:fbba59022e7c20124d2f520842b75904c7b9f16c854233fa46575c69949fb5b9" ], "index": "pypi", - "version": "==7.6.12" + "version": "==7.7.1" }, "cryptography": { "hashes": [ - "sha256:00918d859aa4e57db8299607086f793fa7813ae2ff5a4637e318a25ef82730f7", - "sha256:1e8d181e90a777b63f3f0caa836844a1182f1f265687fac2115fcf245f5fbec3", - "sha256:1f9a92144fa0c877117e9748c74501bea842f93d21ee00b0cf922846d9d0b183", - "sha256:21377472ca4ada2906bc313168c9dc7b1d7ca417b63c1c3011d0c74b7de9ae69", - "sha256:24979e9f2040c953a94bf3c6782e67795a4c260734e5264dceea65c8f4bae64a", - "sha256:2a46a89ad3e6176223b632056f321bc7de36b9f9b93b2cc1cccf935a3849dc62", - "sha256:322eb03ecc62784536bc173f1483e76747aafeb69c8728df48537eb431cd1911", - "sha256:436df4f203482f41aad60ed1813811ac4ab102765ecae7a2bbb1dbb66dcff5a7", - "sha256:4f422e8c6a28cf8b7f883eb790695d6d45b0c385a2583073f3cec434cc705e1a", - "sha256:53f23339864b617a3dfc2b0ac8d5c432625c80014c25caac9082314e9de56f41", - "sha256:5fed5cd6102bb4eb843e3315d2bf25fede494509bddadb81e03a859c1bc17b83", - "sha256:610a83540765a8d8ce0f351ce42e26e53e1f774a6efb71eb1b41eb01d01c3d12", - "sha256:6c8acf6f3d1f47acb2248ec3ea261171a671f3d9428e34ad0357148d492c7864", - "sha256:6f76fdd6fd048576a04c5210d53aa04ca34d2ed63336d4abd306d0cbe298fddf", - "sha256:72198e2b5925155497a5a3e8c216c7fb3e64c16ccee11f0e7da272fa93b35c4c", - "sha256:887143b9ff6bad2b7570da75a7fe8bbf5f65276365ac259a5d2d5147a73775f2", - "sha256:888fcc3fce0c888785a4876ca55f9f43787f4c5c1cc1e2e0da71ad481ff82c5b", - "sha256:8e6a85a93d0642bd774460a86513c5d9d80b5c002ca9693e63f6e540f1815ed0", - "sha256:94f99f2b943b354a5b6307d7e8d19f5c423a794462bde2bf310c770ba052b1c4", - "sha256:9b336599e2cb77b1008cb2ac264b290803ec5e8e89d618a5e978ff5eb6f715d9", - "sha256:a2d8a7045e1ab9b9f803f0d9531ead85f90c5f2859e653b61497228b18452008", - "sha256:b8272f257cf1cbd3f2e120f14c68bff2b6bdfcc157fafdee84a1b795efd72862", - "sha256:bf688f615c29bfe9dfc44312ca470989279f0e94bb9f631f85e3459af8efc009", - "sha256:d9c5b9f698a83c8bd71e0f4d3f9f839ef244798e5ffe96febfa9714717db7af7", - "sha256:dd7c7e2d71d908dc0f8d2027e1604102140d84b155e658c20e8ad1304317691f", - "sha256:df978682c1504fc93b3209de21aeabf2375cb1571d4e61907b3e7a2540e83026", - "sha256:e403f7f766ded778ecdb790da786b418a9f2394f36e8cc8b796cc056ab05f44f", - "sha256:eb3889330f2a4a148abead555399ec9a32b13b7c8ba969b72d8e500eb7ef84cd", - "sha256:f4daefc971c2d1f82f03097dc6f216744a6cd2ac0f04c68fb935ea2ba2a0d420", - "sha256:f51f5705ab27898afda1aaa430f34ad90dc117421057782022edf0600bec5f14", - "sha256:fd0ee90072861e276b0ff08bd627abec29e32a53b2be44e41dbcdf87cbee2b00" + "sha256:04abd71114848aa25edb28e225ab5f268096f44cf0127f3d36975bdf1bdf3390", + "sha256:0529b1d5a0105dd3731fa65680b45ce49da4d8115ea76e9da77a875396727b41", + "sha256:1bc312dfb7a6e5d66082c87c34c8a62176e684b6fe3d90fcfe1568de675e6688", + "sha256:268e4e9b177c76d569e8a145a6939eca9a5fec658c932348598818acf31ae9a5", + "sha256:29ecec49f3ba3f3849362854b7253a9f59799e3763b0c9d0826259a88efa02f1", + "sha256:2bf7bf75f7df9715f810d1b038870309342bff3069c5bd8c6b96128cb158668d", + "sha256:3b721b8b4d948b218c88cb8c45a01793483821e709afe5f622861fc6182b20a7", + "sha256:3c00b6b757b32ce0f62c574b78b939afab9eecaf597c4d624caca4f9e71e7843", + "sha256:3dc62975e31617badc19a906481deacdeb80b4bb454394b4098e3f2525a488c5", + "sha256:4973da6ca3db4405c54cd0b26d328be54c7747e89e284fcff166132eb7bccc9c", + "sha256:4e389622b6927d8133f314949a9812972711a111d577a5d1f4bee5e58736b80a", + "sha256:51e4de3af4ec3899d6d178a8c005226491c27c4ba84101bfb59c901e10ca9f79", + "sha256:5f6f90b72d8ccadb9c6e311c775c8305381db88374c65fa1a68250aa8a9cb3a6", + "sha256:6210c05941994290f3f7f175a4a57dbbb2afd9273657614c506d5976db061181", + "sha256:6f101b1f780f7fc613d040ca4bdf835c6ef3b00e9bd7125a4255ec574c7916e4", + "sha256:7bdcd82189759aba3816d1f729ce42ffded1ac304c151d0a8e89b9996ab863d5", + "sha256:7ca25849404be2f8e4b3c59483d9d3c51298a22c1c61a0e84415104dacaf5562", + "sha256:81276f0ea79a208d961c433a947029e1a15948966658cf6710bbabb60fcc2639", + "sha256:8cadc6e3b5a1f144a039ea08a0bdb03a2a92e19c46be3285123d32029f40a922", + "sha256:8e0ddd63e6bf1161800592c71ac794d3fb8001f2caebe0966e77c5234fa9efc3", + "sha256:909c97ab43a9c0c0b0ada7a1281430e4e5ec0458e6d9244c0e821bbf152f061d", + "sha256:96e7a5e9d6e71f9f4fca8eebfd603f8e86c5225bb18eb621b2c1e50b290a9471", + "sha256:9a1e657c0f4ea2a23304ee3f964db058c9e9e635cc7019c4aa21c330755ef6fd", + "sha256:9eb9d22b0a5d8fd9925a7764a054dca914000607dff201a24c791ff5c799e1fa", + "sha256:af4ff3e388f2fa7bff9f7f2b31b87d5651c45731d3e8cfa0944be43dff5cfbdb", + "sha256:b042d2a275c8cee83a4b7ae30c45a15e6a4baa65a179a0ec2d78ebb90e4f6699", + "sha256:bc821e161ae88bfe8088d11bb39caf2916562e0a2dc7b6d56714a48b784ef0bb", + "sha256:c505d61b6176aaf982c5717ce04e87da5abc9a36a5b39ac03905c4aafe8de7aa", + "sha256:c63454aa261a0cf0c5b4718349629793e9e634993538db841165b3df74f37ec0", + "sha256:c7362add18b416b69d58c910caa217f980c5ef39b23a38a0880dfd87bdf8cd23", + "sha256:d03806036b4f89e3b13b6218fefea8d5312e450935b1a2d55f0524e2ed7c59d9", + "sha256:d1b3031093a366ac767b3feb8bcddb596671b3aaff82d4050f984da0c248b615", + "sha256:d1c3572526997b36f245a96a2b1713bf79ce99b271bbcf084beb6b9b075f29ea", + "sha256:efcfe97d1b3c79e486554efddeb8f6f53a4cdd4cf6086642784fa31fc384e1d7", + "sha256:f514ef4cd14bb6fb484b4a60203e912cfcb64f2ab139e88c2274511514bf7308" ], "markers": "python_version >= '3.7' and python_full_version not in '3.9.0, 3.9.1'", - "version": "==44.0.1" + "version": "==44.0.2" + }, + "docker": { + "hashes": [ + "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c", + "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0" + ], + "markers": "python_version >= '3.8'", + "version": "==7.1.0" }, "docutils": { "hashes": [ @@ -1274,6 +1826,12 @@ "markers": "python_version >= '3.9'", "version": "==0.21.2" }, + "events": { + "hashes": [ + "sha256:a7286af378ba3e46640ac9825156c93bdba7502174dd696090fdfcd4d80a1abd" + ], + "version": "==0.5" + }, "furo": { "hashes": [ "sha256:6cd97c58b47813d3619e63e9081169880fbe331f0ca883c871ff1f3f11814f5c", @@ -1340,11 +1898,11 @@ }, "iniconfig": { "hashes": [ - "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", - "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" + "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", + "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760" ], - "markers": "python_version >= '3.7'", - "version": "==2.0.0" + "markers": "python_version >= '3.8'", + "version": "==2.1.0" }, "jaraco.classes": { "hashes": [ @@ -1372,19 +1930,19 @@ }, "jeepney": { "hashes": [ - "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806", - "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755" + "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683", + "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732" ], "markers": "sys_platform == 'linux'", - "version": "==0.8.0" + "version": "==0.9.0" }, "jinja2": { "hashes": [ - "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb", - "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb" + "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", + "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67" ], "markers": "python_version >= '3.7'", - "version": "==3.1.5" + "version": "==3.1.6" }, "keyring": { "hashes": [ @@ -1477,6 +2035,14 @@ "markers": "python_version >= '3.7'", "version": "==0.1.2" }, + "minio": { + "hashes": [ + "sha256:5247df5d4dca7bfa4c9b20093acd5ad43e82d8710ceb059d79c6eea970f49f79", + "sha256:c06ef7a43e5d67107067f77b6c07ebdd68733e5aa7eed03076472410ca19d876" + ], + "markers": "python_version >= '3.9'", + "version": "==7.2.15" + }, "more-itertools": { "hashes": [ "sha256:2cd7fad1009c31cc9fb6a035108509e6547547a7a738374f10bd49a09eb3ee3b", @@ -1487,33 +2053,41 @@ }, "nh3": { "hashes": [ - "sha256:09f037c02fc2c43b211ff1523de32801dcfb0918648d8e651c36ef890f1731ec", - "sha256:0ae9cbd713524cdb81e64663d0d6aae26f678db9f2cd9db0bf162606f1f9f20c", - "sha256:10317cd96fe4bbd4eb6b95f3920b71c902157ad44fed103fdcde43e3b8ee8be6", - "sha256:181063c581defe683bd4bb78188ac9936d208aebbc74c7f7c16b6a32ae2ebb38", - "sha256:1b9a8340a0aab991c68a5ca938d35ef4a8a3f4bf1b455da8855a40bee1fa0ace", - "sha256:231addb7643c952cd6d71f1c8702d703f8fe34afcb20becb3efb319a501a12d7", - "sha256:3eb04b9c3deb13c3a375ea39fd4a3c00d1f92e8fb2349f25f1e3e4506751774b", - "sha256:47b2946c0e13057855209daeffb45dc910bd0c55daf10190bb0b4b60e2999784", - "sha256:4fd2e9248725ebcedac3997a8d3da0d90a12a28c9179c6ba51f1658938ac30d0", - "sha256:6ed834c68452a600f517dd3e1534dbfaff1f67f98899fecf139a055a25d99150", - "sha256:76e2f603b30c02ff6456b233a83fc377dedab6a50947b04e960a6b905637b776", - "sha256:813f1c8012dd64c990514b795508abb90789334f76a561fa0fd4ca32d2275330", - "sha256:8698db4c04b140800d1a1cd3067fda399e36e1e2b8fc1fe04292a907350a3e9b", - "sha256:92f3f1c4f47a2c6f3ca7317b1d5ced05bd29556a75d3a4e2715652ae9d15c05d", - "sha256:9705c42d7ff88a0bea546c82d7fe5e59135e3d3f057e485394f491248a1f8ed5", - "sha256:ac4d27dc836a476efffc6eb661994426b8b805c951b29c9cf2ff36bc9ad58bc5", - "sha256:ce3731c8f217685d33d9268362e5b4f770914e922bba94d368ab244a59a6c397", - "sha256:d2a176fd4306b6f0f178a3f67fac91bd97a3a8d8fafb771c9b9ef675ba5c8886", - "sha256:da87573f03084edae8eb87cfe811ec338606288f81d333c07d2a9a0b9b976c0b", - "sha256:ddefa9fd6794a87e37d05827d299d4b53a3ec6f23258101907b96029bfef138a", - "sha256:e1061a4ab6681f6bdf72b110eea0c4e1379d57c9de937db3be4202f7ad6043db", - "sha256:e1f7370b4e14cc03f5ae141ef30a1caf81fa5787711f80be9081418dd9eb79d2", - "sha256:eb4254b1dac4a1ee49919a5b3f1caf9803ea8dada1816d9e8289e63d3cd0dd9a", - "sha256:f7d564871833ddbe54df3aa59053b1110729d3a800cb7628ae8f42adb3d75208" + "sha256:087ffadfdcd497658c3adc797258ce0f06be8a537786a7217649fc1c0c60c293", + "sha256:20979783526641c81d2f5bfa6ca5ccca3d1e4472474b162c6256745fbfe31cd1", + "sha256:2a5174551f95f2836f2ad6a8074560f261cf9740a48437d6151fd2d4d7d617ab", + "sha256:31eedcd7d08b0eae28ba47f43fd33a653b4cdb271d64f1aeda47001618348fde", + "sha256:4990e7ee6a55490dbf00d61a6f476c9a3258e31e711e13713b2ea7d6616f670e", + "sha256:55823c5ea1f6b267a4fad5de39bc0524d49a47783e1fe094bcf9c537a37df251", + "sha256:6141caabe00bbddc869665b35fc56a478eb774a8c1dfd6fba9fe1dfdf29e6efa", + "sha256:637d4a10c834e1b7d9548592c7aad760611415fcd5bd346f77fd8a064309ae6d", + "sha256:63ca02ac6f27fc80f9894409eb61de2cb20ef0a23740c7e29f9ec827139fa578", + "sha256:6ae319f17cd8960d0612f0f0ddff5a90700fa71926ca800e9028e7851ce44a6f", + "sha256:6c9c30b8b0d291a7c5ab0967ab200598ba33208f754f2f4920e9343bdd88f79a", + "sha256:713d16686596e556b65e7f8c58328c2df63f1a7abe1277d87625dcbbc012ef82", + "sha256:818f2b6df3763e058efa9e69677b5a92f9bc0acff3295af5ed013da544250d5b", + "sha256:9d67709bc0d7d1f5797b21db26e7a8b3d15d21c9c5f58ccfe48b5328483b685b", + "sha256:a5f77e62aed5c4acad635239ac1290404c7e940c81abe561fd2af011ff59f585", + "sha256:a772dec5b7b7325780922dd904709f0f5f3a79fbf756de5291c01370f6df0967", + "sha256:a7ea28cd49293749d67e4fcf326c554c83ec912cd09cd94aa7ec3ab1921c8283", + "sha256:ac7006c3abd097790e611fe4646ecb19a8d7f2184b882f6093293b8d9b887431", + "sha256:b3b5c58161e08549904ac4abd450dacd94ff648916f7c376ae4b2c0652b98ff9", + "sha256:b8d55ea1fc7ae3633d758a92aafa3505cd3cc5a6e40470c9164d54dff6f96d42", + "sha256:bb0014948f04d7976aabae43fcd4cb7f551f9f8ce785a4c9ef66e6c2590f8629", + "sha256:d002b648592bf3033adfd875a48f09b8ecc000abd7f6a8769ed86b6ccc70c759", + "sha256:d426d7be1a2f3d896950fe263332ed1662f6c78525b4520c8e9861f8d7f0d243", + "sha256:fcff321bd60c6c5c9cb4ddf2554e22772bb41ebd93ad88171bbbb6f271255286" ], "markers": "python_version >= '3.8'", - "version": "==0.2.20" + "version": "==0.2.21" + }, + "opensearch-py": { + "hashes": [ + "sha256:52c60fdb5d4dcf6cce3ee746c13b194529b0161e0f41268b98ab8f1624abe2fa", + "sha256:6598df0bc7a003294edd0ba88a331e0793acbb8c910c43edf398791e3b2eccda" + ], + "index": "pypi", + "version": "==2.8.0" }, "packaging": { "hashes": [ @@ -1539,6 +2113,41 @@ "markers": "python_version >= '3.8'", "version": "==2.22" }, + "pycryptodome": { + "hashes": [ + "sha256:009e1c80eea42401a5bd5983c4bab8d516aef22e014a4705622e24e6d9d703c6", + "sha256:18d5b0ddc7cf69231736d778bd3ae2b3efb681ae33b64b0c92fb4626bb48bb89", + "sha256:2988ffcd5137dc2d27eb51cd18c0f0f68e5b009d5fec56fbccb638f90934f333", + "sha256:37ddcd18284e6b36b0a71ea495a4c4dca35bb09ccc9bfd5b91bfaf2321f131c1", + "sha256:3b76fa80daeff9519d7e9f6d9e40708f2fce36b9295a847f00624a08293f4f00", + "sha256:56c6f9342fcb6c74e205fbd2fee568ec4cdbdaa6165c8fde55dbc4ba5f584464", + "sha256:87a88dc543b62b5c669895caf6c5a958ac7abc8863919e94b7a6cafd2f64064f", + "sha256:8f4f6f47a7f411f2c157e77bbbda289e0c9f9e1e9944caa73c1c2e33f3f92d6e", + "sha256:96e73527c9185a3d9b4c6d1cfb4494f6ced418573150be170f6580cb975a7f5a", + "sha256:98fd9da809d5675f3a65dcd9ed384b9dc67edab6a4cda150c5870a8122ec961d", + "sha256:9dbb749cef71c28271484cbef684f9b5b19962153487735411e1020ca3f59cb1", + "sha256:9e1bb165ea1dc83a11e5dbbe00ef2c378d148f3a2d3834fb5ba4e0f6fd0afe4b", + "sha256:a0092fd476701eeeb04df5cc509d8b739fa381583cda6a46ff0a60639b7cd70d", + "sha256:a26bcfee1293b7257c83b0bd13235a4ee58165352be4f8c45db851ba46996dc6", + "sha256:a31fa5914b255ab62aac9265654292ce0404f6b66540a065f538466474baedbc", + "sha256:a6cf9553b29624961cab0785a3177a333e09e37ba62ad22314ebdbb01ca79840", + "sha256:aec7b40a7ea5af7c40f8837adf20a137d5e11a6eb202cde7e588a48fb2d871a8", + "sha256:b4bdce34af16c1dcc7f8c66185684be15f5818afd2a82b75a4ce6b55f9783e13", + "sha256:d086aed307e96d40c23c42418cbbca22ecc0ab4a8a0e24f87932eeab26c08627", + "sha256:d21c1eda2f42211f18a25db4eaf8056c94a8563cd39da3683f89fe0d881fb772", + "sha256:d4d1174677855c266eed5c4b4e25daa4225ad0c9ffe7584bb1816767892545d0", + "sha256:e653519dedcd1532788547f00eeb6108cc7ce9efdf5cc9996abce0d53f95d5a9", + "sha256:e7514a1aebee8e85802d154fdb261381f1cb9b7c5a54594545145b8ec3056ae6", + "sha256:f02baa9f5e35934c6e8dcec91fcde96612bdefef6e442813b8ea34e82c84bbfb", + "sha256:f1ae7beb64d4fc4903a6a6cca80f1f448e7a8a95b77d106f8a29f2eb44d17547", + "sha256:f5810bc7494e4ac12a4afef5a32218129e7d3890ce3f2b5ec520cc69eb1102ad", + "sha256:f6cf6aa36fcf463e622d2165a5ad9963b2762bebae2f632d719dfb8544903cf5", + "sha256:f7a683bc9fa585c0dfec7fa4801c96a48d30b30b096e3297f9374f40c2fedafc", + "sha256:fd7ab568b3ad7b77c908d7c3f7e167ec5a8f035c64ff74f10d47a4edd043d723" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", + "version": "==3.22.0" + }, "pygments": { "hashes": [ "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", @@ -1557,11 +2166,11 @@ }, "pytest": { "hashes": [ - "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6", - "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761" + "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", + "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845" ], "index": "pypi", - "version": "==8.3.4" + "version": "==8.3.5" }, "pytest-ordering": { "hashes": [ @@ -1572,6 +2181,14 @@ "index": "pypi", "version": "==0.6" }, + "python-dateutil": { + "hashes": [ + "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", + "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.9.0.post0" + }, "pyyaml": { "hashes": [ "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff", @@ -1673,19 +2290,19 @@ }, "rich": { "hashes": [ - "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", - "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90" + "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0", + "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725" ], "markers": "python_full_version >= '3.8.0'", - "version": "==13.9.4" + "version": "==14.0.0" }, "roman-numerals-py": { "hashes": [ - "sha256:91199c4373658c03d87d9fe004f4a5120a20f6cb192be745c2377cce274ef41c", - "sha256:a1421ce66b3eab7e8735065458de3fa5c4a46263d50f9f4ac8f0e5e7701dd125" + "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c", + "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d" ], "markers": "python_version >= '3.9'", - "version": "==3.0.0" + "version": "==3.1.0" }, "secretstorage": { "hashes": [ @@ -1697,11 +2314,19 @@ }, "setuptools": { "hashes": [ - "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6", - "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3" + "sha256:18fd474d4a82a5f83dac888df697af65afa82dec7323d09c3e37d1f14288da54", + "sha256:3e386e96793c8702ae83d17b853fb93d3e09ef82ec62722e61da5cd22376dcd8" ], "index": "pypi", - "version": "==75.8.0" + "version": "==78.1.0" + }, + "six": { + "hashes": [ + "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", + "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.17.0" }, "sniffio": { "hashes": [ @@ -1728,11 +2353,11 @@ }, "sphinx": { "hashes": [ - "sha256:3c0a40ff71ace28b316bde7387d93b9249a3688c202181519689b66d5d0aed53", - "sha256:5b0067853d6e97f3fa87563e3404ebd008fce03525b55b25da90706764da6215" + "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348", + "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3" ], "markers": "python_version >= '3.11'", - "version": "==8.2.0" + "version": "==8.2.3" }, "sphinx-basic-ng": { "hashes": [ @@ -1790,6 +2415,27 @@ "markers": "python_version >= '3.9'", "version": "==2.0.0" }, + "testcontainers-core": { + "hashes": [ + "sha256:69a8bf2ddb52ac2d03c26401b12c70db0453cced40372ad783d6dce417e52095" + ], + "markers": "python_version >= '3.7'", + "version": "==0.0.1rc1" + }, + "testcontainers-minio": { + "hashes": [ + "sha256:54d330d085c0a11fc5da0b001af87aec4dd3e814104376bf7513e8646c77442a" + ], + "index": "pypi", + "version": "==0.0.1rc1" + }, + "testcontainers-opensearch": { + "hashes": [ + "sha256:0bdf270b5b7f53915832f7c31dd2bd3ffdc20b534ea6b32231cc7003049bd0e1" + ], + "index": "pypi", + "version": "==0.0.1rc1" + }, "twine": { "hashes": [ "sha256:a47f973caf122930bf0fbbf17f80b83bc1602c9ce393c7845f289a3001dc5384", @@ -1800,20 +2446,105 @@ }, "typing-extensions": { "hashes": [ - "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", - "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" + "sha256:0a4ac55a5820789d87e297727d229866c9650f6521b64206413c4fbada24d95b", + "sha256:c8dd92cc0d6425a97c18fbb9d1954e5ff92c1ca881a309c45f06ebc0b79058e5" ], "markers": "python_version >= '3.8'", - "version": "==4.12.2" + "version": "==4.13.0" }, "urllib3": { "hashes": [ "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" ], - "markers": "python_version >= '3.9'", + "markers": "python_version >= '3.10'", "version": "==2.3.0" }, + "wrapt": { + "hashes": [ + "sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f", + "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c", + "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a", + "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b", + "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555", + "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c", + "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b", + "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6", + "sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8", + "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662", + "sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061", + "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998", + "sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb", + "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62", + "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984", + "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392", + "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2", + "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306", + "sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7", + "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3", + "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9", + "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6", + "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192", + "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317", + "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f", + "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda", + "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563", + "sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a", + "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f", + "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d", + "sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9", + "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8", + "sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82", + "sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9", + "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845", + "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82", + "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125", + "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504", + "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b", + "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7", + "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc", + "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6", + "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40", + "sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a", + "sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3", + "sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a", + "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72", + "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681", + "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438", + "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae", + "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2", + "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb", + "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5", + "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a", + "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3", + "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8", + "sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2", + "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22", + "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72", + "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061", + "sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f", + "sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9", + "sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04", + "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98", + "sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9", + "sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f", + "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b", + "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925", + "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6", + "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0", + "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9", + "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c", + "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991", + "sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6", + "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000", + "sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb", + "sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119", + "sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b", + "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58" + ], + "markers": "python_version >= '3.8'", + "version": "==1.17.2" + }, "zipp": { "hashes": [ "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4", diff --git a/lib/python/coverage.xml b/lib/python/coverage.xml index b23a031c5f..ba3da4f2e6 100644 --- a/lib/python/coverage.xml +++ b/lib/python/coverage.xml @@ -1,14 +1,14 @@ <?xml version="1.0" ?> -<coverage version="7.6.10" timestamp="1741253336897" lines-valid="1941" lines-covered="1818" line-rate="0.9366" branches-covered="0" branches-valid="0" branch-rate="0" complexity="0"> - <!-- Generated by coverage.py: https://coverage.readthedocs.io/en/7.6.10 --> +<coverage version="7.7.1" timestamp="1743366739557" lines-valid="1967" lines-covered="1831" line-rate="0.9309" branches-covered="0" branches-valid="0" branch-rate="0" complexity="0"> + <!-- Generated by coverage.py: https://coverage.readthedocs.io/en/7.7.1 --> <!-- Based on https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd --> <sources> <source>/home/mweise/Projects/fda-services/lib/python</source> </sources> <packages> - <package name="dbrepo" line-rate="0.9102" branch-rate="0" complexity="0"> + <package name="dbrepo" line-rate="0.8972" branch-rate="0" complexity="0"> <classes> - <class name="RestClient.py" filename="dbrepo/RestClient.py" complexity="0" line-rate="0.9102" branch-rate="0"> + <class name="RestClient.py" filename="dbrepo/RestClient.py" complexity="0" line-rate="0.8972" branch-rate="0"> <methods/> <lines> <line number="1" hits="1"/> @@ -902,6 +902,20 @@ <line number="1923" hits="1"/> <line number="1924" hits="1"/> <line number="1925" hits="1"/> + <line number="1927" hits="1"/> + <line number="1941" hits="0"/> + <line number="1942" hits="0"/> + <line number="1944" hits="0"/> + <line number="1945" hits="0"/> + <line number="1946" hits="0"/> + <line number="1947" hits="0"/> + <line number="1948" hits="0"/> + <line number="1949" hits="0"/> + <line number="1950" hits="0"/> + <line number="1951" hits="0"/> + <line number="1953" hits="0"/> + <line number="1954" hits="0"/> + <line number="1955" hits="0"/> </lines> </class> <class name="__init__.py" filename="dbrepo/__init__.py" complexity="0" line-rate="1" branch-rate="0"> @@ -910,7 +924,7 @@ </class> </classes> </package> - <package name="dbrepo.api" line-rate="0.959" branch-rate="0" complexity="0"> + <package name="dbrepo.api" line-rate="0.9595" branch-rate="0" complexity="0"> <classes> <class name="__init__.py" filename="dbrepo/api/__init__.py" complexity="0" line-rate="1" branch-rate="0"> <methods/> @@ -1326,20 +1340,18 @@ <line number="502" hits="1"/> <line number="505" hits="1"/> <line number="506" hits="1"/> - <line number="507" hits="1"/> + <line number="509" hits="1"/> <line number="510" hits="1"/> <line number="511" hits="1"/> <line number="514" hits="1"/> <line number="515" hits="1"/> - <line number="516" hits="1"/> - <line number="517" hits="1"/> <line number="518" hits="1"/> <line number="519" hits="1"/> <line number="520" hits="1"/> + <line number="521" hits="1"/> + <line number="522" hits="1"/> <line number="523" hits="1"/> <line number="524" hits="1"/> - <line number="525" hits="1"/> - <line number="526" hits="1"/> <line number="527" hits="1"/> <line number="528" hits="1"/> <line number="529" hits="1"/> @@ -1348,24 +1360,24 @@ <line number="532" hits="1"/> <line number="533" hits="1"/> <line number="534" hits="1"/> + <line number="535" hits="1"/> + <line number="536" hits="1"/> <line number="537" hits="1"/> <line number="538" hits="1"/> - <line number="539" hits="1"/> - <line number="540" hits="1"/> <line number="541" hits="1"/> + <line number="542" hits="1"/> + <line number="543" hits="1"/> <line number="544" hits="1"/> + <line number="545" hits="1"/> <line number="548" hits="1"/> - <line number="549" hits="1"/> - <line number="550" hits="1"/> - <line number="551" hits="1"/> + <line number="552" hits="1"/> + <line number="553" hits="1"/> <line number="554" hits="1"/> + <line number="555" hits="1"/> <line number="558" hits="1"/> - <line number="559" hits="1"/> - <line number="560" hits="1"/> + <line number="562" hits="1"/> <line number="563" hits="1"/> <line number="564" hits="1"/> - <line number="565" hits="1"/> - <line number="566" hits="1"/> <line number="567" hits="1"/> <line number="568" hits="1"/> <line number="569" hits="1"/> @@ -1375,19 +1387,19 @@ <line number="573" hits="1"/> <line number="574" hits="1"/> <line number="575" hits="1"/> + <line number="576" hits="1"/> + <line number="577" hits="1"/> <line number="578" hits="1"/> <line number="579" hits="1"/> - <line number="580" hits="1"/> - <line number="581" hits="1"/> <line number="582" hits="1"/> <line number="583" hits="1"/> <line number="584" hits="1"/> <line number="585" hits="1"/> <line number="586" hits="1"/> + <line number="587" hits="1"/> + <line number="588" hits="1"/> <line number="589" hits="1"/> <line number="590" hits="1"/> - <line number="591" hits="1"/> - <line number="592" hits="1"/> <line number="593" hits="1"/> <line number="594" hits="1"/> <line number="595" hits="1"/> @@ -1396,23 +1408,23 @@ <line number="598" hits="1"/> <line number="599" hits="1"/> <line number="600" hits="1"/> + <line number="601" hits="1"/> + <line number="602" hits="1"/> <line number="603" hits="1"/> <line number="604" hits="1"/> <line number="607" hits="1"/> <line number="608" hits="1"/> - <line number="609" hits="1"/> - <line number="610" hits="1"/> <line number="611" hits="1"/> + <line number="612" hits="1"/> + <line number="613" hits="1"/> <line number="614" hits="1"/> <line number="615" hits="1"/> - <line number="616" hits="1"/> - <line number="617" hits="1"/> + <line number="618" hits="1"/> + <line number="619" hits="1"/> <line number="620" hits="1"/> <line number="621" hits="1"/> <line number="624" hits="1"/> <line number="625" hits="1"/> - <line number="626" hits="1"/> - <line number="627" hits="1"/> <line number="628" hits="1"/> <line number="629" hits="1"/> <line number="630" hits="1"/> @@ -1432,12 +1444,12 @@ <line number="644" hits="1"/> <line number="645" hits="1"/> <line number="646" hits="1"/> + <line number="647" hits="1"/> + <line number="648" hits="1"/> <line number="649" hits="1"/> <line number="650" hits="1"/> <line number="653" hits="1"/> <line number="654" hits="1"/> - <line number="655" hits="1"/> - <line number="656" hits="1"/> <line number="657" hits="1"/> <line number="658" hits="1"/> <line number="659" hits="1"/> @@ -1461,17 +1473,17 @@ <line number="677" hits="1"/> <line number="678" hits="1"/> <line number="679" hits="1"/> + <line number="680" hits="1"/> + <line number="681" hits="1"/> <line number="682" hits="1"/> <line number="683" hits="1"/> - <line number="684" hits="1"/> - <line number="685" hits="1"/> <line number="686" hits="1"/> <line number="687" hits="1"/> <line number="688" hits="1"/> + <line number="689" hits="1"/> + <line number="690" hits="1"/> <line number="691" hits="1"/> <line number="692" hits="1"/> - <line number="693" hits="1"/> - <line number="694" hits="1"/> <line number="695" hits="1"/> <line number="696" hits="1"/> <line number="697" hits="1"/> @@ -1481,10 +1493,10 @@ <line number="701" hits="1"/> <line number="702" hits="1"/> <line number="703" hits="1"/> + <line number="704" hits="1"/> + <line number="705" hits="1"/> <line number="706" hits="1"/> <line number="707" hits="1"/> - <line number="708" hits="1"/> - <line number="709" hits="1"/> <line number="710" hits="1"/> <line number="711" hits="1"/> <line number="712" hits="1"/> @@ -1494,19 +1506,19 @@ <line number="716" hits="1"/> <line number="717" hits="1"/> <line number="718" hits="1"/> + <line number="719" hits="1"/> + <line number="720" hits="1"/> <line number="721" hits="1"/> <line number="722" hits="1"/> - <line number="723" hits="1"/> - <line number="724" hits="1"/> <line number="725" hits="1"/> + <line number="726" hits="1"/> + <line number="727" hits="1"/> <line number="728" hits="1"/> <line number="729" hits="1"/> - <line number="730" hits="1"/> - <line number="731" hits="1"/> + <line number="732" hits="1"/> + <line number="733" hits="1"/> <line number="734" hits="1"/> <line number="735" hits="1"/> - <line number="736" hits="1"/> - <line number="737" hits="1"/> <line number="738" hits="1"/> <line number="739" hits="1"/> <line number="740" hits="1"/> @@ -1514,68 +1526,73 @@ <line number="742" hits="1"/> <line number="743" hits="1"/> <line number="744" hits="1"/> + <line number="745" hits="1"/> + <line number="746" hits="1"/> <line number="747" hits="1"/> <line number="748" hits="1"/> - <line number="749" hits="1"/> - <line number="750" hits="1"/> <line number="751" hits="1"/> + <line number="752" hits="1"/> + <line number="753" hits="1"/> <line number="754" hits="1"/> <line number="755" hits="1"/> - <line number="756" hits="1"/> - <line number="757" hits="1"/> + <line number="758" hits="1"/> + <line number="759" hits="1"/> <line number="760" hits="1"/> <line number="761" hits="1"/> <line number="764" hits="1"/> <line number="765" hits="1"/> - <line number="766" hits="1"/> - <line number="767" hits="1"/> <line number="768" hits="1"/> <line number="769" hits="1"/> + <line number="770" hits="1"/> + <line number="771" hits="1"/> <line number="772" hits="1"/> <line number="773" hits="1"/> <line number="774" hits="1"/> - <line number="775" hits="1"/> + <line number="777" hits="1"/> <line number="778" hits="1"/> <line number="779" hits="1"/> - <line number="782" hits="1"/> + <line number="780" hits="1"/> <line number="783" hits="1"/> <line number="784" hits="1"/> <line number="785" hits="1"/> <line number="786" hits="1"/> + <line number="787" hits="1"/> + <line number="788" hits="1"/> <line number="789" hits="1"/> + <line number="792" hits="1"/> <line number="793" hits="1"/> <line number="794" hits="1"/> <line number="795" hits="1"/> - <line number="798" hits="1"/> - <line number="802" hits="1"/> + <line number="796" hits="1"/> + <line number="799" hits="1"/> <line number="803" hits="1"/> - <line number="806" hits="1"/> - <line number="807" hits="1"/> + <line number="804" hits="1"/> + <line number="805" hits="1"/> <line number="808" hits="1"/> - <line number="809" hits="1"/> - <line number="810" hits="1"/> + <line number="812" hits="1"/> <line number="813" hits="1"/> - <line number="814" hits="1"/> - <line number="815" hits="1"/> <line number="816" hits="1"/> <line number="817" hits="1"/> + <line number="818" hits="1"/> + <line number="819" hits="1"/> <line number="820" hits="1"/> - <line number="821" hits="1"/> - <line number="822" hits="1"/> + <line number="823" hits="1"/> + <line number="824" hits="1"/> <line number="825" hits="1"/> <line number="826" hits="1"/> <line number="827" hits="1"/> <line number="830" hits="1"/> <line number="831" hits="1"/> <line number="832" hits="1"/> - <line number="833" hits="1"/> - <line number="834" hits="1"/> + <line number="835" hits="1"/> + <line number="836" hits="1"/> <line number="837" hits="1"/> - <line number="838" hits="1"/> - <line number="839" hits="1"/> <line number="840" hits="1"/> <line number="841" hits="1"/> + <line number="842" hits="1"/> + <line number="843" hits="1"/> <line number="844" hits="1"/> + <line number="847" hits="1"/> <line number="848" hits="1"/> <line number="849" hits="1"/> <line number="850" hits="1"/> @@ -1583,17 +1600,12 @@ <line number="854" hits="1"/> <line number="858" hits="1"/> <line number="859" hits="1"/> - <line number="862" hits="1"/> - <line number="866" hits="1"/> - <line number="867" hits="1"/> + <line number="860" hits="1"/> + <line number="861" hits="1"/> + <line number="864" hits="1"/> <line number="868" hits="1"/> <line number="869" hits="1"/> - <line number="870" hits="1"/> - <line number="871" hits="1"/> <line number="872" hits="1"/> - <line number="873" hits="1"/> - <line number="874" hits="1"/> - <line number="875" hits="1"/> <line number="876" hits="1"/> <line number="877" hits="1"/> <line number="878" hits="1"/> @@ -1602,17 +1614,17 @@ <line number="881" hits="1"/> <line number="882" hits="1"/> <line number="883" hits="1"/> + <line number="884" hits="1"/> + <line number="885" hits="1"/> <line number="886" hits="1"/> + <line number="887" hits="1"/> + <line number="888" hits="1"/> + <line number="889" hits="1"/> <line number="890" hits="1"/> <line number="891" hits="1"/> <line number="892" hits="1"/> <line number="893" hits="1"/> - <line number="894" hits="1"/> - <line number="895" hits="1"/> <line number="896" hits="1"/> - <line number="897" hits="1"/> - <line number="898" hits="1"/> - <line number="899" hits="1"/> <line number="900" hits="1"/> <line number="901" hits="1"/> <line number="902" hits="1"/> @@ -1637,69 +1649,69 @@ <line number="921" hits="1"/> <line number="922" hits="1"/> <line number="923" hits="1"/> + <line number="924" hits="1"/> + <line number="925" hits="1"/> <line number="926" hits="1"/> + <line number="927" hits="1"/> + <line number="928" hits="1"/> + <line number="929" hits="1"/> <line number="930" hits="1"/> <line number="931" hits="1"/> <line number="932" hits="1"/> <line number="933" hits="1"/> - <line number="934" hits="1"/> - <line number="935" hits="1"/> - <line number="938" hits="1"/> + <line number="936" hits="1"/> + <line number="940" hits="1"/> + <line number="941" hits="1"/> <line number="942" hits="1"/> <line number="943" hits="1"/> + <line number="944" hits="1"/> <line number="945" hits="1"/> - <line number="946" hits="1"/> - <line number="949" hits="1"/> + <line number="948" hits="1"/> + <line number="952" hits="1"/> <line number="953" hits="1"/> - <line number="954" hits="1"/> + <line number="955" hits="1"/> <line number="956" hits="1"/> - <line number="957" hits="1"/> <line number="959" hits="1"/> - <line number="960" hits="1"/> - <line number="962" hits="1"/> <line number="963" hits="1"/> + <line number="964" hits="1"/> <line number="966" hits="1"/> + <line number="967" hits="1"/> + <line number="969" hits="1"/> <line number="970" hits="1"/> - <line number="971" hits="1"/> + <line number="972" hits="1"/> <line number="973" hits="1"/> - <line number="974" hits="1"/> - <line number="977" hits="1"/> - <line number="978" hits="1"/> - <line number="979" hits="1"/> + <line number="976" hits="1"/> <line number="980" hits="1"/> <line number="981" hits="1"/> - <line number="982" hits="1"/> <line number="983" hits="1"/> <line number="984" hits="1"/> - <line number="985" hits="1"/> - <line number="986" hits="1"/> <line number="987" hits="1"/> <line number="988" hits="1"/> <line number="989" hits="1"/> + <line number="990" hits="1"/> + <line number="991" hits="1"/> <line number="992" hits="1"/> <line number="993" hits="1"/> <line number="994" hits="1"/> <line number="995" hits="1"/> + <line number="996" hits="1"/> + <line number="997" hits="1"/> <line number="998" hits="1"/> <line number="999" hits="1"/> <line number="1002" hits="1"/> <line number="1003" hits="1"/> <line number="1004" hits="1"/> - <line number="1007" hits="1"/> + <line number="1005" hits="1"/> <line number="1008" hits="1"/> <line number="1009" hits="1"/> <line number="1012" hits="1"/> <line number="1013" hits="1"/> - <line number="1016" hits="1"/> + <line number="1014" hits="1"/> <line number="1017" hits="1"/> <line number="1018" hits="1"/> <line number="1019" hits="1"/> - <line number="1020" hits="1"/> - <line number="1021" hits="1"/> <line number="1022" hits="1"/> <line number="1023" hits="1"/> - <line number="1024" hits="1"/> - <line number="1025" hits="1"/> <line number="1026" hits="1"/> <line number="1027" hits="1"/> <line number="1028" hits="1"/> @@ -1707,6 +1719,8 @@ <line number="1030" hits="1"/> <line number="1031" hits="1"/> <line number="1032" hits="1"/> + <line number="1033" hits="1"/> + <line number="1034" hits="1"/> <line number="1035" hits="1"/> <line number="1036" hits="1"/> <line number="1037" hits="1"/> @@ -1715,8 +1729,6 @@ <line number="1040" hits="1"/> <line number="1041" hits="1"/> <line number="1042" hits="1"/> - <line number="1043" hits="1"/> - <line number="1044" hits="1"/> <line number="1045" hits="1"/> <line number="1046" hits="1"/> <line number="1047" hits="1"/> @@ -1734,6 +1746,8 @@ <line number="1059" hits="1"/> <line number="1060" hits="1"/> <line number="1061" hits="1"/> + <line number="1062" hits="1"/> + <line number="1063" hits="1"/> <line number="1064" hits="1"/> <line number="1065" hits="1"/> <line number="1066" hits="1"/> @@ -1742,8 +1756,6 @@ <line number="1069" hits="1"/> <line number="1070" hits="1"/> <line number="1071" hits="1"/> - <line number="1072" hits="1"/> - <line number="1073" hits="1"/> <line number="1074" hits="1"/> <line number="1075" hits="1"/> <line number="1076" hits="1"/> @@ -1751,6 +1763,8 @@ <line number="1078" hits="1"/> <line number="1079" hits="1"/> <line number="1080" hits="1"/> + <line number="1081" hits="1"/> + <line number="1082" hits="1"/> <line number="1083" hits="1"/> <line number="1084" hits="1"/> <line number="1085" hits="1"/> @@ -1761,8 +1775,6 @@ <line number="1090" hits="1"/> <line number="1091" hits="1"/> <line number="1092" hits="1"/> - <line number="1093" hits="1"/> - <line number="1094" hits="1"/> <line number="1095" hits="1"/> <line number="1096" hits="1"/> <line number="1097" hits="1"/> @@ -1771,6 +1783,8 @@ <line number="1100" hits="1"/> <line number="1101" hits="1"/> <line number="1102" hits="1"/> + <line number="1103" hits="1"/> + <line number="1104" hits="1"/> <line number="1105" hits="1"/> <line number="1106" hits="1"/> <line number="1107" hits="1"/> @@ -1781,7 +1795,7 @@ <line number="1112" hits="1"/> <line number="1113" hits="1"/> <line number="1114" hits="1"/> - <line number="1115" hits="1"/> + <line number="1117" hits="1"/> <line number="1118" hits="1"/> <line number="1119" hits="1"/> <line number="1120" hits="1"/> @@ -1792,34 +1806,36 @@ <line number="1125" hits="1"/> <line number="1126" hits="1"/> <line number="1127" hits="1"/> - <line number="1128" hits="1"/> - <line number="1129" hits="1"/> <line number="1130" hits="1"/> <line number="1131" hits="1"/> <line number="1132" hits="1"/> <line number="1133" hits="1"/> <line number="1134" hits="1"/> <line number="1135" hits="1"/> + <line number="1136" hits="1"/> + <line number="1137" hits="1"/> <line number="1138" hits="1"/> <line number="1139" hits="1"/> <line number="1140" hits="1"/> <line number="1141" hits="1"/> + <line number="1142" hits="1"/> + <line number="1143" hits="1"/> <line number="1144" hits="1"/> <line number="1145" hits="1"/> <line number="1146" hits="1"/> <line number="1147" hits="1"/> <line number="1148" hits="1"/> - <line number="1151" hits="1"/> + <line number="1149" hits="1"/> + <line number="1152" hits="1"/> + <line number="1153" hits="1"/> + <line number="1154" hits="1"/> <line number="1155" hits="1"/> - <line number="1156" hits="1"/> - <line number="1157" hits="1"/> <line number="1158" hits="1"/> <line number="1159" hits="1"/> + <line number="1160" hits="1"/> + <line number="1161" hits="1"/> <line number="1162" hits="1"/> - <line number="1163" hits="1"/> - <line number="1166" hits="1"/> - <line number="1167" hits="1"/> - <line number="1168" hits="1"/> + <line number="1165" hits="1"/> <line number="1169" hits="1"/> <line number="1170" hits="1"/> <line number="1171" hits="1"/> @@ -1827,10 +1843,10 @@ <line number="1173" hits="1"/> <line number="1176" hits="1"/> <line number="1177" hits="1"/> - <line number="1178" hits="1"/> - <line number="1179" hits="1"/> <line number="1180" hits="1"/> <line number="1181" hits="1"/> + <line number="1182" hits="1"/> + <line number="1183" hits="1"/> <line number="1184" hits="1"/> <line number="1185" hits="1"/> <line number="1186" hits="1"/> @@ -1840,6 +1856,16 @@ <line number="1192" hits="1"/> <line number="1193" hits="1"/> <line number="1194" hits="1"/> + <line number="1195" hits="1"/> + <line number="1198" hits="1"/> + <line number="1199" hits="1"/> + <line number="1200" hits="1"/> + <line number="1201" hits="1"/> + <line number="1204" hits="1"/> + <line number="1205" hits="1"/> + <line number="1206" hits="1"/> + <line number="1207" hits="1"/> + <line number="1208" hits="1"/> </lines> </class> <class name="exceptions.py" filename="dbrepo/api/exceptions.py" complexity="0" line-rate="1" branch-rate="0"> diff --git a/lib/python/dbrepo/RestClient.py b/lib/python/dbrepo/RestClient.py index 3459543d83..dbf1c7911f 100644 --- a/lib/python/dbrepo/RestClient.py +++ b/lib/python/dbrepo/RestClient.py @@ -1915,11 +1915,42 @@ class RestClient: if response.status_code == 400: raise MalformedError(f'Failed to update column: {response.text}') if response.status_code == 403: - raise ForbiddenError(f'Failed to update colum: not allowed') + raise ForbiddenError(f'Failed to update column: not allowed') if response.status_code == 404: - raise NotExistsError(f'Failed to update colum: not found') + raise NotExistsError(f'Failed to update column: not found') if response.status_code == 502: - raise ServiceConnectionError(f'Failed to update colum: failed to establish connection to search service') + raise ServiceConnectionError(f'Failed to update column: failed to establish connection to search service') if response.status_code == 503: - raise ServiceError(f'Failed to update colum: failed to save in search service') - raise ResponseCodeError(f'Failed to update colum: response code: {response.status_code} is not 202 (ACCEPTED)') + raise ServiceError(f'Failed to update column: failed to save in search service') + raise ResponseCodeError(f'Failed to update column: response code: {response.status_code} is not 202 (ACCEPTED)') + + def update_database_dashboard(self, database_id: str, uid: str) -> None: + """ + Update semantic information of a table column by given database id and table id and column id. + + :param database_id: The database id. + :param uid: The database uid. + + :raises MalformedError: If the payload is rejected by the service. + :raises ForbiddenError: If something went wrong with the authorization. + :raises NotExistsError: If the accept header is neither application/json nor application/ld+json. + :raises ServiceConnectionError: If something went wrong with connection to the search service. + :raises ServiceError: If something went wrong with obtaining the information in the search service. + :raises ResponseCodeError: If something went wrong with the retrieval of the identifiers. + """ + url = f'/api/database/{database_id}/dashboard' + response = self._wrapper(method="put", url=url, force_auth=True, + payload=DatabaseModifyDashboard(uid=uid)) + if response.status_code == 202: + return + if response.status_code == 400: + raise MalformedError(f'Failed to update database dashboard: {response.text}') + if response.status_code == 404: + raise NotExistsError(f'Failed to update database dashboard: not found') + if response.status_code == 502: + raise ServiceConnectionError( + f'Failed to update database dashboard: failed to establish connection to search service') + if response.status_code == 503: + raise ServiceError(f'Failed to update database dashboard: failed to save in search service') + raise ResponseCodeError( + f'Failed to update database dashboard: response code: {response.status_code} is not 202 (ACCEPTED)') diff --git a/lib/python/dbrepo/api/dto.py b/lib/python/dbrepo/api/dto.py index 356f9b2200..00376c3737 100644 --- a/lib/python/dbrepo/api/dto.py +++ b/lib/python/dbrepo/api/dto.py @@ -502,6 +502,10 @@ class UpdateColumn(BaseModel): unit_uri: Optional[str] = None +class DatabaseModifyDashboard(BaseModel): + uid: str + + class ModifyVisibility(BaseModel): is_public: bool is_schema_public: bool @@ -762,11 +766,12 @@ class KeyAnalysis(BaseModel): class ColumnStatistic(BaseModel): - val_min: float - val_max: float + name: str mean: float median: float std_dev: float + val_min: float + val_max: float class ApiError(BaseModel): @@ -776,6 +781,11 @@ class ApiError(BaseModel): class TableStatistics(BaseModel): + total_rows: Optional[int] = None + total_columns: int + data_length: Optional[int] = None + max_data_length: Optional[int] = None + avg_row_length: Optional[int] = None columns: dict[str, ColumnStatistic] @@ -1076,6 +1086,8 @@ class ViewColumn(BaseModel): median: Optional[float] = None concept: Optional[ConceptBrief] = None unit: Optional[UnitBrief] = None + enums: Optional[List[ColumnEnum]] = field(default_factory=list) + sets: Optional[List[ColumnSet]] = field(default_factory=list) index_length: Optional[int] = None length: Optional[int] = None @@ -1124,14 +1136,16 @@ class Database(BaseModel): internal_name: str is_public: bool is_schema_public: bool + is_dashboard_enabled: bool container: ContainerBrief identifiers: Optional[List[Identifier]] = field(default_factory=list) subsets: Optional[List[Identifier]] = field(default_factory=list) - preview_image: Optional[str] = None - description: Optional[str] = None tables: Optional[List[Table]] = field(default_factory=list) views: Optional[List[View]] = field(default_factory=list) accesses: Optional[List[DatabaseAccess]] = field(default_factory=list) + preview_image: Optional[str] = None + description: Optional[str] = None + dashboard_uid: Optional[str] = None exchange_name: Optional[str] = None diff --git a/dbrepo-search-service/init/omlib/exceptions/__init__.py b/lib/python/dbrepo/core/__init__.py similarity index 100% rename from dbrepo-search-service/init/omlib/exceptions/__init__.py rename to lib/python/dbrepo/core/__init__.py diff --git a/dbrepo-search-service/init/omlib/rdf/__init__.py b/lib/python/dbrepo/core/api/__init__.py similarity index 100% rename from dbrepo-search-service/init/omlib/rdf/__init__.py rename to lib/python/dbrepo/core/api/__init__.py diff --git a/dbrepo-dashboard-service/api/dto.py b/lib/python/dbrepo/core/api/dto.py similarity index 91% rename from dbrepo-dashboard-service/api/dto.py rename to lib/python/dbrepo/core/api/dto.py index e2dab237d5..73c50cfd91 100644 --- a/dbrepo-dashboard-service/api/dto.py +++ b/lib/python/dbrepo/core/api/dto.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import Optional +from typing import Optional, List from pydantic import BaseModel @@ -48,3 +48,9 @@ class CreateDatasourceRequest(BaseModel): database_internal_name: str readonly: bool type: str + + +class User(BaseModel): + id: str + username: str + roles: List[str] diff --git a/lib/python/dbrepo/core/api/exceptions.py b/lib/python/dbrepo/core/api/exceptions.py new file mode 100644 index 0000000000..fda8031e3f --- /dev/null +++ b/lib/python/dbrepo/core/api/exceptions.py @@ -0,0 +1,5 @@ +class DashboardNotFound(Exception): + """ + The dashboard could not be found. + """ + pass diff --git a/lib/python/dbrepo/core/client/__init__.py b/lib/python/dbrepo/core/client/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lib/python/dbrepo/core/client/auth.py b/lib/python/dbrepo/core/client/auth.py new file mode 100644 index 0000000000..ec2bf4bf20 --- /dev/null +++ b/lib/python/dbrepo/core/client/auth.py @@ -0,0 +1,75 @@ +import logging +from typing import List, Any + +import requests +from jwt import jwk_from_pem, JWT +from jwt.exceptions import JWTDecodeError + +from dbrepo.api.dto import ApiError +from dbrepo.core.api.dto import User + + +class AuthServiceClient: + + def __init__(self, endpoint: str, client_id: str, client_secret: str, jwt_public_key: str): + self.endpoint = endpoint + self.client_id = client_id + self.client_secret = client_secret + self.jwt_public_key = jwt_public_key + + def get_user_token(self, username: str, password: str) -> str: + response = requests.post(f"{self.endpoint}/realms/dbrepo/protocol/openid-connect/token", + data={ + "username": username, + "password": password, + "grant_type": "password", + "client_id": self.client_id, + "client_secret": self.client_secret + }) + body = response.json() + if "access_token" not in body: + raise AssertionError("Failed to obtain user token(s)") + return response.json()["access_token"] + + def get_user_id(self, auth_header: str | None) -> (str | None, ApiError, int): + if auth_header is None: + return None, None, None + try: + user = self.verify_jwt(auth_header.split(" ")[1]) + logging.debug(f'mapped JWT to user.id {user.id}') + return user.id, None, None + except JWTDecodeError as e: + logging.error(f'Failed to decode JWT: {e}') + if str(e) == 'JWT Expired': + return None, ApiError(status='UNAUTHORIZED', message=f'Token expired', + code='search.user.unauthorized').model_dump(), 401 + return None, ApiError(status='FORBIDDEN', message=str(e), code='search.user.forbidden').model_dump(), 403 + + def verify_jwt(self, access_token: str) -> User: + public_key = jwk_from_pem(self.jwt_public_key.encode('utf-8')) + payload = JWT().decode(message=access_token, key=public_key, do_time_check=True) + return User(id=payload.get('uid'), username=payload.get('preferred_username'), + roles=payload.get('realm_access')["roles"]) + + def is_valid_token(self, token: str) -> bool | User: + if token is None or token == "": + return False + try: + return self.verify_jwt(access_token=token) + except JWTDecodeError: + return False + + def is_valid_password(self, username: str, password: str) -> Any: + if username is None or username == "" or password is None or password == "": + return False + try: + return self.verify_jwt(access_token=self.get_user_token(username=username, password=password)) + except AssertionError as error: + logging.error(error) + return False + except requests.exceptions.ConnectionError as error: + logging.error(f"Failed to connect to Authentication Service {error}") + return False + + def get_user_roles(self, user: User) -> List[str]: + return user.roles diff --git a/lib/python/dbrepo/core/client/dashboard.py b/lib/python/dbrepo/core/client/dashboard.py new file mode 100644 index 0000000000..0797c0a76f --- /dev/null +++ b/lib/python/dbrepo/core/client/dashboard.py @@ -0,0 +1,451 @@ +import logging + +import requests +from grafana_client import GrafanaApi +from grafana_client.client import GrafanaClientError, GrafanaException +from requests import Response + +from dbrepo.api.dto import Database, ColumnType, ViewColumn, View +from dbrepo.core.api.dto import Permission +from dbrepo.core.api.exceptions import DashboardNotFound + +statistics_row_title = 'Generated Statistics' + +disclaimer = 'Generic auto-generated chart' + +number_types = [ColumnType.SERIAL, ColumnType.BIT, ColumnType.SMALLINT, ColumnType.MEDIUMINT, ColumnType.INT, + ColumnType.BIGINT, ColumnType.FLOAT, ColumnType.DOUBLE, ColumnType.DECIMAL] + +time_types = [ColumnType.DATE, ColumnType.TIME, ColumnType.TIMESTAMP, ColumnType.YEAR] + +bool_types = [ColumnType.TINYINT, ColumnType.BOOL] + +section_height = 3 * 8 + + +def map_link(title: str, url: str, icon: str = 'info', open_new_window: bool = True) -> dict: + return dict(targetBlank=open_new_window, + asDropdown=False, + includeVars=False, + keepTime=False, + tags=[], + type='link', + icon=icon, + title=title, + url=url) + + +def _get_start_index(dashboard: dict) -> int | None: + return [panel['title'] for panel in dashboard['panels']].index(statistics_row_title) + + +def map_column_conversion(column: ViewColumn) -> dict: + destinationType = 'string' + dateFormat = None + if column.type in number_types: + destinationType = 'number' + elif column.type in time_types: + destinationType = 'time' + if column.type == ColumnType.YEAR: + dateFormat = 'YYYY' + elif column.type == ColumnType.TIME: + dateFormat = 'HH:mm:ss' + else: + dateFormat = 'YYYY-MM-dd' + elif column.type in bool_types: + destinationType = 'boolean' + return dict(targetField=column.internal_name, + destinationType=destinationType, + dateFormat=dateFormat) + + +def map_row(title: str, x: int = 0, y: int = 0) -> dict: + return dict(collapsed=False, + title=title, + type='row', + panels=[], + targets=[], + parser='backend', + gridPos=dict(h=1, + w=24, + x=x, + y=y)) + + +class DashboardServiceClient: + + def __init__(self, endpoint: str, username: str, password: str, base_url: str = 'http://localhost', + datasource_uid: str = 'dbrepojson0'): + self.client: GrafanaApi = GrafanaApi.from_url(url=f'{endpoint}', credential=(username, password)) + self.endpoint = endpoint + self.username = username + self.password = password + self.base_url = base_url + self.datasource_uid = datasource_uid + + def get_client(self): + return self.client + + def generic_get(self, api_url: str) -> Response: + request_url = self.endpoint + api_url + logging.debug(f'generic get url={request_url}, auth=({self.username}, <reacted>)') + return requests.get(request_url, auth=(self.username, self.password)) + + def generic_post(self, api_url: str, payload: dict) -> Response: + request_url = self.endpoint + api_url + logging.debug(f'generic post url={request_url}, payload={payload}, auth=({self.username}, <reacted>)') + return requests.post(request_url, json=payload, auth=(self.username, self.password)) + + def find(self, uid: str): + """ + Finds a dashboard with the given uid. + + @return The dashboard, if successful. Otherwise, `None`. + """ + if uid is None: + return None + try: + return self.client.dashboard.get_dashboard(uid) + except GrafanaClientError: + logging.warning(f"Failed to find dashboard with uid: {uid}") + return None + + def create(self, database_name: str, uid: str = '') -> dict: + dashboard = dict(uid=uid, + title=f'{database_name} Overview', + tags=['managed'], + timezone='browser', + refresh='30m', + preload=False, + panels=[]) + dashboard['panels'] = [] + payload = dict(folderUid='', + overwrite=False, + dashboard=dashboard) + dashboard = self.client.dashboard.update_dashboard(payload) + logging.info(f"Created dashboard with uid: {dashboard['uid']}") + return dashboard + + def delete(self, uid: str) -> None: + self.client.dashboard.delete_dashboard(uid) + + def update(self, database: Database) -> None: + dashboard = self.find(database.dashboard_uid) + if dashboard is None: + raise DashboardNotFound(f'Dashboard {database.dashboard_uid} not found') + dashboard = dashboard['dashboard'] + # update metadata + if not database.is_dashboard_enabled and 'managed' in dashboard['tags']: + dashboard['tags'].remove('managed') + if len(database.identifiers) > 0 and len(database.identifiers[0].titles) > 0: + dashboard['title'] = database.identifiers[0].titles[0].title + if len(database.identifiers) > 0 and len(database.identifiers[0].descriptions) > 0: + dashboard['description'] = database.identifiers[0].descriptions[0].description + dashboard['links'] = self.map_links(database) + # update panels + dashboard['panels'] = self.get_panels(dashboard, database) + payload = dict(folderUid='', + overwrite=True, + dashboard=dashboard) + response = self.client.dashboard.update_dashboard(payload) + logging.info(f"Updated dashboard with uid: {response['uid']}") + + def map_links(self, database: Database) -> [dict]: + links = [] + if len(database.identifiers) > 0: + links.append(map_link('Database', f"{self.base_url}/pid/{database.identifiers[0].id}")) + else: + links.append(map_link('Database', f"{self.base_url}/database/{database.id}")) + return links + + def update_anonymous_read_access(self, uid: str, is_public: bool, is_schema_public: bool) -> None: + permissions = self.client.dashboard.get_permissions_by_uid(uid) + viewer_role = [permission for permission in permissions if + 'permissionName' in permission and permission['permissionName'] != 'View'] + permission = '' + if is_public or is_schema_public: + permission = 'View' + if len(viewer_role) == 0: + logging.warning(f'Failed to find permissionName=View') + return None + try: + response = self.generic_post(f'/api/access-control/dashboards/{uid}/builtInRoles/Viewer', + Permission(permission=permission).model_dump()) + if response.status_code != 200: + raise OSError(f'Failed to update anonymous read access: {response.content}') + except GrafanaException as e: + raise OSError(f'Failed to update anonymous read access: {e.message}') + logging.info(f"Updated anonymous read access for dashboard with uid: {uid}") + + def _map_timeseries_panel(self, database_id: str, view: View, panel_type: str, h: int = 8, w: int = 12, x: int = 12, + y: int = 8) -> dict: + datasource = dict(uid=self.datasource_uid, + type='yesoreyeram-infinity-datasource') + fillOpacity = 0 + if panel_type == 'histogram': + fillOpacity = 60 + return dict(title=panel_type.capitalize(), + description=disclaimer, + type=panel_type, + datasource=datasource, + targets=[dict(datasource=datasource, + format='table', + global_query_id='', + hide=False, + refId='A', + root_selector='', + source='url', + type='json', + url=f'/api/database/{database_id}/view/{view.id}/data', + parser='backend', + url_options=dict(data='', + method='GET'))], + gridPos=dict(h=h, + w=w, + x=x, + y=y), + options=dict(legend=dict(displayMode='list', + placement='bottom', + showLegend=True), + tooltip=dict(mode='single', + sort='none')), + fieldConfig=dict( + defaults=dict(color=dict(mode='palette-classic'), + custom=dict( + axisBorderShow=False, + axisCenteredZero=False, + axisColorMode='text', + axisLabel='', + axisPlacement='auto', + barAlignment=0, + drawStyle='line', + fillOpacity=fillOpacity, + gradientMode='none', + hideFrom=dict(legend=False, + tooltip=False, + viz=False), + insertNulls=False, + lineInterpolation='linear', + lineWidth=1, + pointSize=5, + scaleDistribution=dict(type='linear'), + showPoints='auto', + spanNulls=False, + stacking=dict(group='A', + mode='none'), + thresholdsStyle=dict(mode='absolute')))), + transformations=[dict(id='convertFieldType', + options=dict(fields=dict(), + conversions=[map_column_conversion(column) for column in + view.columns]))]) + + def _map_number_panel(self, database_id: str, view_id: str, title: str, field: str, x: int = 18, + y: int = 0) -> dict: + datasource = dict(uid=self.datasource_uid, + type='yesoreyeram-infinity-datasource') + return dict(title=title, + type='stat', + datasource=datasource, + targets=[dict(datasource=datasource, + columns=[], + filters=[], + format='table', + global_query_id='', + hide=False, + refId='A', + root_selector='', + source='url', + type='json', + url=f'/api/database/{database_id}/view/{view_id}/statistic', + parser='backend', + url_options=dict(data='', + method='GET'))], + fieldConfig=dict(defaults=dict(mappings=[], + thresholds=dict(mode='absolute', + steps=[dict(color='blue', + value=None)]), + unit=''), + overrides=[]), + transformations=[dict(id='extractFields', + options=dict(delimiter=',', + source=field, + format='auto', + replace=False, + keepTime=False)), + dict(id='filterFieldsByName', + options=dict(include=dict(names=[field])))], + gridPos=dict(h=4, + w=6, + x=x, + y=y), + options=dict(colorMode='background', + graphMode='area', + justifyMode='auto', + orientation='auto', + reduceOptions=dict(calcs=[], + fields='/.*/', + values=True), + showPercentChange=False, + textMode='auto', + wideLayout=True)) + + def map_overview_panel(self, database_id: str, view_id: str, x: int = 0, y: int = 4) -> dict: + datasource = dict(uid=self.datasource_uid, + type='yesoreyeram-infinity-datasource') + return dict(title='Datasource Preview', + type='table', + gridPos=dict(h=8, + w=18, + x=x, + y=y), + fieldConfig=dict( + defaults=dict( + color=dict(mode='palette-classic'), + custom=dict(axisBorderShow=False, + axisCenteredZero=False, + axisColorMode='text', + axisLabel='', + axisPlacement='auto', + barAlignment=0, + drawStyle='line', + fillOpacity=0, + gradientMode='none', + hideFrom=dict( + legend=False, + tooltip=False, + viz=False), + insertNulls=False, + lineInterpolation='linear', + lineWidth=1, + pointSize=5, + scaleDistribution=dict( + type='linear'), + showPoints='auto', + spanNulls=False, + stacking=dict(group='A', + mode='none'), + thresholdsStyle=dict( + mode='off'))), + overrides=[]), + options=dict(legend=dict(displayMode='list', + placement='bottom', + showLegend=True, + calcs=[]), + tooltip=dict(mode='single', + sort='none')), + targets=[dict(format='json', + columns=[], + datasource=datasource, + filters=[], + global_query_id='', + refId='A', + root_selector='', + source='url', + type='json', + url=f'/api/database/{database_id}/view/{view_id}/data', + parser='backend', + url_options=dict(data='', + method='GET'))], + links=[dict(title='Cite', + url=f'{self.base_url}/database/{database_id}/view/{view_id}/data', + targetBlank=True)], + datasource=datasource) + + def map_statistics_panel(self, database_id: str, view_id: str, w: int = 12, h: int = 8, x: int = 0, + y: int = 8) -> dict: + datasource = dict(uid=self.datasource_uid, + type='yesoreyeram-infinity-datasource') + return dict(title='Statistics', + type='table', + gridPos=dict(h=h, + w=w, + x=x, + y=y), + datasource=datasource, + targets=[dict(datasource=datasource, + columns=[], + filters=[], + format='table', + global_query_id='', + hide=False, + refId='A', + root_selector='columns', + source='url', + type='json', + url=f'/api/database/{database_id}/view/{view_id}/statistic', + parser='backend', + url_options=dict(data='', + method='GET'))], + options=dict(cellHeight="sm", + showHeader=True, + footer=dict(countRows=False, + fields="", + reducer=["sum"], + show=False)), + transformations=[dict(id="organize", + options=dict(excludeByName=dict(), + includeByName=dict(), + indexByName=dict(name=0, + val_min=1, + val_max=2, + mean=3, + median=4, + std_dev=5), + renameByName=dict(name="Name", + mean="Mean", + median="Median", + std_dev="std.dev", + val_min="Minimum", + val_max="Maximum")))], + fieldConfig=dict(defaults=dict(custom=dict(align="auto", + filterable="true", + cellOptions=dict(type="auto"), + inspect=False), + mappings=[], + thresholds=dict(mode="absolute", + steps=[dict(color="green", + value=None), + dict(color="red", + value=80) + ])), + overrides=[])) + + def map_timeseries_panel(self, database_id: str, view: View, h: int = 8, w: int = 12, x: int = 12, + y: int = 8) -> dict: + return self._map_timeseries_panel(database_id, view, 'timeseries', h, w, x, y) + + def map_pie_panel(self, database_id: str, view: View, h: int = 8, w: int = 12, x: int = 12, y: int = 8) -> dict: + return self._map_timeseries_panel(database_id, view, 'piechart', h, w, x, y) + + def map_histogram_panel(self, database_id: str, view: View, h: int = 8, w: int = 12, x: int = 12, + y: int = 8) -> dict: + return self._map_timeseries_panel(database_id, view, 'histogram', h, w, x, y) + + def map_rows_panel(self, database_id: str, view_id: str, x: int = 18, y: int = 0) -> dict: + return self._map_number_panel(database_id, view_id, 'Rows', 'total_rows', x, y) + + def map_columns_panel(self, database_id: str, view_id: str, x: int = 18, y: int = 0) -> dict: + return self._map_number_panel(database_id, view_id, 'Variables', 'total_columns', x, y) + + def get_panels(self, dashboard: dict, database: Database) -> [dict]: + panels = dashboard['panels'] + try: + end_index = _get_start_index(dashboard) + logging.debug(f'splicing managed panels after index: {end_index}') + panels = panels[:end_index] + except ValueError: + logging.warning(f'No managed panels found') + original_panels_size = len(panels) + panels.append(map_row(statistics_row_title, 0, 0)) # statistics row + for i, view in enumerate(database.views): + # section + panels.append(map_row(view.name, 0, i * section_height + 0)) + panels.append(self.map_overview_panel(database.id, view.id, 0, i * section_height + 4)) + panels.append(self.map_rows_panel(database.id, view.id, 18, i * section_height + 0)) + panels.append(self.map_columns_panel(database.id, view.id, 18, i * section_height + 4)) + panels.append(self.map_statistics_panel(database.id, view.id, h=8, w=12, x=0, y=i * section_height + 8)) + panels.append(self.map_histogram_panel(database.id, view, h=8, w=12, x=12, y=i * section_height + 8)) + panels.append(self.map_timeseries_panel(database.id, view, h=8, w=8, x=0, y=i * section_height + 16)) + panels.append(self.map_pie_panel(database.id, view, h=8, w=8, x=8, y=i * section_height + 16)) + logging.info(f'Added {len(panels) - original_panels_size} managed panel(s)') + return panels diff --git a/dbrepo-search-service/init/clients/opensearch_client.py b/lib/python/dbrepo/core/client/search.py similarity index 88% rename from dbrepo-search-service/init/clients/opensearch_client.py rename to lib/python/dbrepo/core/client/search.py index deca261ce2..e4836dd021 100644 --- a/dbrepo-search-service/init/clients/opensearch_client.py +++ b/lib/python/dbrepo/core/client/search.py @@ -6,38 +6,33 @@ import os from collections.abc import MutableMapping from json import dumps, load -from dbrepo.api.dto import Database -from dbrepo.api.exceptions import ForbiddenError, NotExistsError from opensearchpy import OpenSearch, NotFoundError from requests import head -from omlib.constants import OM_IDS -from omlib.measure import om -from omlib.omconstants import OM -from omlib.unit import Unit +from dbrepo.api.dto import Database +from dbrepo.api.exceptions import ForbiddenError, NotExistsError +from dbrepo.core.omlib.constants import OM_IDS +from dbrepo.core.omlib.measure import om +from dbrepo.core.omlib.omconstants import OM +from dbrepo.core.omlib.unit import Unit -class OpenSearchClient: +class SearchServiceClient: """ The client to communicate with the OpenSearch database. """ - host: str = None instance: OpenSearch = None - metadata_endpoint: str = None - password: str = None - port: int = None - system_username: str = None - system_password: str = None - username: str = None - - def __init__(self, host: str = None, port: int = None, username: str = None, password: str = None): + + def __init__(self, host: str = None, port: int = 9000, username: str = None, password: str = None): + if host is None: + host = 'search-db' self.host = os.getenv('OPENSEARCH_HOST', host) self.metadata_endpoint = os.getenv('METADATA_SERVICE_ENDPOINT', 'http://metadata-service:8080') + self.username = os.getenv('OPENSEARCH_USERNAME', username) self.password = os.getenv('OPENSEARCH_PASSWORD', password) self.port = int(os.getenv('OPENSEARCH_PORT', port)) self.system_username = os.getenv('SYSTEM_USERNAME', 'admin') self.system_password = os.getenv('SYSTEM_PASSWORD', 'admin') - self.username = os.getenv('OPENSEARCH_USERNAME', username) def _instance(self) -> OpenSearch: """ @@ -51,19 +46,40 @@ class OpenSearchClient: http_auth=(self.username, self.password)) return self.instance - def update_database(self, database_id: str, data: Database) -> Database: + def database_exists(self, database_id: str): + try: + SearchServiceClient()._instance().get(index="database", id=database_id) + return True + except NotFoundError: + return False + + def index_update(self, mapping: dict) -> None: + if SearchServiceClient()._instance().indices.exists(index="database"): + logging.debug(f"index 'database' exists, removing...") + SearchServiceClient()._instance().indices.delete(index="database") + SearchServiceClient()._instance().indices.create(index="database", body=mapping) + logging.info(f"Created index 'database'") + + def save_database(self, database_id: str, data: Database, fetch: bool = False) -> Database | None: """ - Updates the database data with given id. + Creates the database data with given id. If a document with the id already exists, the document is updated. @param database_id: The database id. @param data: The database data. + @param fetch: When enabled, fetches the saved database data. Default: `False`. + + :return The saved database data. @returns: The updated database, if successful. - @throws: opensearchpy.exceptions.NotFoundError If the database was not found in the Search Database. + @throws: opensearchpy.exceptions.NotFoundError If the database was not found in the Search Database. Ignored when `force` is `True`. """ - logging.debug(f"updating database with id: {database_id} in search database") - self._instance().index(index="database", id=database_id, body=dumps(data.model_dump())) - response: dict = self._instance().get(index="database", id=database_id) + self._instance().update(index="database", id=database_id, + body={'doc': data.model_dump(), 'doc_as_upsert': True}) + logging.info(f'Updated database with id: {database_id}') + if fetch is False: + return None + response = self._instance().get(index="database", id=database_id) + logging.debug(f'fetched database for return value with id: {database_id}') return Database.model_validate(response["_source"]) def delete_database(self, database_id: str) -> None: @@ -215,7 +231,6 @@ class OpenSearchClient: "query": {"bool": {"must": musts}} } logging.debug(f'search in index database for type: {field_type}') - logging.debug(f'search body: {dumps(body)}') response = self._instance().search( index="database", body=dumps(body) diff --git a/dbrepo-analyse-service/clients/s3_client.py b/lib/python/dbrepo/core/client/storage.py similarity index 86% rename from dbrepo-analyse-service/clients/s3_client.py rename to lib/python/dbrepo/core/client/storage.py index 18cdba1ec3..8455cba8a5 100644 --- a/dbrepo-analyse-service/clients/s3_client.py +++ b/lib/python/dbrepo/core/client/storage.py @@ -7,14 +7,16 @@ from boto3.exceptions import S3UploadFailedError from botocore.exceptions import ClientError -class S3Client: +class StorageServiceClient: - def __init__(self): - endpoint_url = current_app.config['S3_ENDPOINT'] - aws_access_key_id = current_app.config['S3_ACCESS_KEY_ID'] - aws_secret_access_key = current_app.config['S3_SECRET_ACCESS_KEY'] - logging.info(f"retrieve file from S3, endpoint_url={current_app.config['S3_PROTO']}://{endpoint_url}, aws_access_key_id={aws_access_key_id}, aws_secret_access_key=(hidden)") - self.client = boto3.client(service_name='s3', endpoint_url=f"{current_app.config['S3_PROTO']}://{endpoint_url}", aws_access_key_id=aws_access_key_id, + def __init__(self, endpoint: str, access_key_id: str, secret_access_key: str): + endpoint = endpoint + aws_access_key_id = access_key_id + aws_secret_access_key = secret_access_key + logging.info( + f"retrieve file from S3, endpoint={current_app.config['S3_PROTO']}://{endpoint}, aws_access_key_id={aws_access_key_id}, aws_secret_access_key=(hidden)") + self.client = boto3.client(service_name='s3', endpoint_url=f"{current_app.config['S3_PROTO']}://{endpoint}", + aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key) self.bucket_exists_or_exit(current_app.config['S3_BUCKET']) diff --git a/lib/python/dbrepo/core/omlib/__init__.py b/lib/python/dbrepo/core/omlib/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/dbrepo-search-service/init/omlib/constants.py b/lib/python/dbrepo/core/omlib/constants.py similarity index 96% rename from dbrepo-search-service/init/omlib/constants.py rename to lib/python/dbrepo/core/omlib/constants.py index 34dad53e34..8460043979 100644 --- a/dbrepo-search-service/init/omlib/constants.py +++ b/lib/python/dbrepo/core/omlib/constants.py @@ -1,9 +1,9 @@ import rdflib from rdflib import URIRef -from omlib.dimension import Dimension -from omlib.scale import Scale -from omlib.unit import Prefix, Unit +from dbrepo.core.omlib.dimension import Dimension +from dbrepo.core.omlib.scale import Scale +from dbrepo.core.omlib.unit import Prefix, Unit class OM_IDS: diff --git a/dbrepo-search-service/init/omlib/dimension.py b/lib/python/dbrepo/core/omlib/dimension.py similarity index 96% rename from dbrepo-search-service/init/omlib/dimension.py rename to lib/python/dbrepo/core/omlib/dimension.py index bc05571bcf..8a6e94306d 100644 --- a/dbrepo-search-service/init/omlib/dimension.py +++ b/lib/python/dbrepo/core/omlib/dimension.py @@ -1,4 +1,4 @@ -from omlib.exceptions.dimensionexception import DimensionalException +from dbrepo.core.omlib.exceptions.dimensionexception import DimensionalException class Dimension: diff --git a/lib/python/dbrepo/core/omlib/exceptions/__init__.py b/lib/python/dbrepo/core/omlib/exceptions/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/dbrepo-search-service/init/omlib/exceptions/dimensionexception.py b/lib/python/dbrepo/core/omlib/exceptions/dimensionexception.py similarity index 100% rename from dbrepo-search-service/init/omlib/exceptions/dimensionexception.py rename to lib/python/dbrepo/core/omlib/exceptions/dimensionexception.py diff --git a/dbrepo-search-service/init/omlib/exceptions/unitconversionexception.py b/lib/python/dbrepo/core/omlib/exceptions/unitconversionexception.py similarity index 100% rename from dbrepo-search-service/init/omlib/exceptions/unitconversionexception.py rename to lib/python/dbrepo/core/omlib/exceptions/unitconversionexception.py diff --git a/dbrepo-search-service/init/omlib/exceptions/unitidentityexception.py b/lib/python/dbrepo/core/omlib/exceptions/unitidentityexception.py similarity index 100% rename from dbrepo-search-service/init/omlib/exceptions/unitidentityexception.py rename to lib/python/dbrepo/core/omlib/exceptions/unitidentityexception.py diff --git a/dbrepo-search-service/init/omlib/measure.py b/lib/python/dbrepo/core/omlib/measure.py similarity index 98% rename from dbrepo-search-service/init/omlib/measure.py rename to lib/python/dbrepo/core/omlib/measure.py index eb19729b5d..f8b2d7fdc3 100644 --- a/dbrepo-search-service/init/omlib/measure.py +++ b/lib/python/dbrepo/core/omlib/measure.py @@ -1,10 +1,10 @@ import math -from omlib.constants import SI -from omlib.exceptions.dimensionexception import DimensionalException -from omlib.scale import Scale -from omlib.thing import Thing -from omlib.unit import Unit, PrefixedUnit, SingularUnit +from dbrepo.core.omlib.constants import SI +from dbrepo.core.omlib.exceptions.dimensionexception import DimensionalException +from dbrepo.core.omlib.scale import Scale +from dbrepo.core.omlib.thing import Thing +from dbrepo.core.omlib.unit import Unit, PrefixedUnit, SingularUnit def om(numerical_value, unit_or_scale, identifier=None): diff --git a/dbrepo-search-service/init/omlib/omconstants.py b/lib/python/dbrepo/core/omlib/omconstants.py similarity index 99% rename from dbrepo-search-service/init/omlib/omconstants.py rename to lib/python/dbrepo/core/omlib/omconstants.py index 8afb3f896a..0163fa69ed 100644 --- a/dbrepo-search-service/init/omlib/omconstants.py +++ b/lib/python/dbrepo/core/omlib/omconstants.py @@ -2,9 +2,9 @@ import rdflib from rdflib import URIRef, Literal -from omlib.dimension import Dimension -from omlib.scale import Scale -from omlib.unit import Prefix, Unit +from dbrepo.core.omlib.dimension import Dimension +from dbrepo.core.omlib.scale import Scale +from dbrepo.core.omlib.unit import Prefix, Unit class OM: diff --git a/lib/python/dbrepo/core/omlib/rdf/__init__.py b/lib/python/dbrepo/core/omlib/rdf/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/dbrepo-search-service/init/omlib/rdf/om-2.0.rdf b/lib/python/dbrepo/core/omlib/rdf/om-2.0.rdf similarity index 100% rename from dbrepo-search-service/init/omlib/rdf/om-2.0.rdf rename to lib/python/dbrepo/core/omlib/rdf/om-2.0.rdf diff --git a/dbrepo-search-service/init/omlib/scale.py b/lib/python/dbrepo/core/omlib/scale.py similarity index 95% rename from dbrepo-search-service/init/omlib/scale.py rename to lib/python/dbrepo/core/omlib/scale.py index b0fedec5c0..44c5783dbe 100644 --- a/dbrepo-search-service/init/omlib/scale.py +++ b/lib/python/dbrepo/core/omlib/scale.py @@ -1,11 +1,11 @@ from rdflib import URIRef -from omlib.dimension import Dimension -from omlib.exceptions.dimensionexception import DimensionalException -from omlib.exceptions.unitconversionexception import ScaleConversionException -from omlib.exceptions.unitidentityexception import ScaleIdentityException -from omlib.thing import Thing -from omlib.unit import Unit +from dbrepo.core.omlib.dimension import Dimension +from dbrepo.core.omlib.exceptions.dimensionexception import DimensionalException +from dbrepo.core.omlib.exceptions.unitconversionexception import ScaleConversionException +from dbrepo.core.omlib.exceptions.unitidentityexception import ScaleIdentityException +from dbrepo.core.omlib.thing import Thing +from dbrepo.core.omlib.unit import Unit class Scale(Thing): diff --git a/dbrepo-search-service/init/omlib/thing.py b/lib/python/dbrepo/core/omlib/thing.py similarity index 100% rename from dbrepo-search-service/init/omlib/thing.py rename to lib/python/dbrepo/core/omlib/thing.py diff --git a/dbrepo-search-service/init/omlib/unit.py b/lib/python/dbrepo/core/omlib/unit.py similarity index 99% rename from dbrepo-search-service/init/omlib/unit.py rename to lib/python/dbrepo/core/omlib/unit.py index c05fef1e9d..c9c63afe02 100644 --- a/dbrepo-search-service/init/omlib/unit.py +++ b/lib/python/dbrepo/core/omlib/unit.py @@ -2,11 +2,11 @@ import math from rdflib import URIRef -from omlib.exceptions.dimensionexception import DimensionalException -from omlib.exceptions.unitconversionexception import UnitConversionException -from omlib.exceptions.unitidentityexception import UnitIdentityException -from omlib.dimension import Dimension -from omlib.thing import SymbolThing +from dbrepo.core.omlib.exceptions.dimensionexception import DimensionalException +from dbrepo.core.omlib.exceptions.unitconversionexception import UnitConversionException +from dbrepo.core.omlib.exceptions.unitidentityexception import UnitIdentityException +from dbrepo.core.omlib.dimension import Dimension +from dbrepo.core.omlib.thing import SymbolThing class Unit(SymbolThing): diff --git a/lib/python/docs/index.rst b/lib/python/docs/index.rst index 80d1d6806b..b7b6bf88e0 100644 --- a/lib/python/docs/index.rst +++ b/lib/python/docs/index.rst @@ -6,7 +6,7 @@ Pandas `DataFrame <https://pandas.pydata.org/docs/reference/api/pandas.DataFrame provides an object-oriented API as well as low-level access to DBRepo services. .. note:: - The SDK has been implemented and documented for DBRepo version 1.7.3, earlier versions may be supported but are not tested for compatibility. + The SDK has been implemented and documented for DBRepo version 1.8.0, earlier versions may be supported but are not tested for compatibility. Quickstart ---------- diff --git a/lib/python/package.sh b/lib/python/package.sh deleted file mode 100755 index 2ad8d301e8..0000000000 --- a/lib/python/package.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -python -m build --sdist ./lib/python -python -m build --wheel ./lib/python diff --git a/lib/python/pyproject.toml b/lib/python/pyproject.toml index 0a34c76816..4ca8d9dfa9 100644 --- a/lib/python/pyproject.toml +++ b/lib/python/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "dbrepo" -version = "1.7.3" +version = "1.8.0" description = "DBRepo Python Library" keywords = [ "DBRepo", @@ -10,13 +10,13 @@ authors = [ { name = "Martin Weise, TU Wien", email = "martin.weise@tuwien.ac.at" } ] readme = "README.md" -license = { file = "LICENSE" } +license = "Apache-2.0" +license-files = ["LICENSE"] classifiers = [ "Development Status :: 4 - Beta", "Topic :: Software Development :: Libraries", "Programming Language :: Python :: 3.11", "Operating System :: OS Independent", - "License :: OSI Approved :: Apache Software License", ] requires-python = ">=3.11" dependencies = [ @@ -34,7 +34,7 @@ requires = [ build-backend = "setuptools.build_meta" [project.urls] -Homepage = "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.7/" +Homepage = "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8/" Documentation = "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.6/python/" Issues = "https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/issues" Source = "https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/" \ No newline at end of file diff --git a/lib/python/release.sh b/lib/python/release.sh deleted file mode 100755 index 9c5e62d2d0..0000000000 --- a/lib/python/release.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -echo "${CI_PIPYRC}" | base64 -d > .pypirc -python -m twine upload --config-file .pypirc --verbose --repository pypi ./lib/python/dist/dbrepo-* diff --git a/lib/python/setup.py b/lib/python/setup.py index 635365883e..5180231936 100644 --- a/lib/python/setup.py +++ b/lib/python/setup.py @@ -2,13 +2,19 @@ from distutils.core import setup setup(name="dbrepo", - version="1.7.3", + version="1.8.0", description="A library for communicating with DBRepo", - url="https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.7/", + url="https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8/", author="Martin Weise", license="Apache-2.0", author_email="martin.weise@tuwien.ac.at", packages=[ "dbrepo", - "dbrepo.api" + "dbrepo.api", + "dbrepo.core", + "dbrepo.core.api", + "dbrepo.core.client", + "dbrepo.core.omlib", + "dbrepo.core.omlib.exceptions", + "dbrepo.core.omlib.rdf", ]) diff --git a/lib/python/test.sh b/lib/python/test.sh deleted file mode 100644 index cd0129654a..0000000000 --- a/lib/python/test.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -source ./lib/python/venv/bin/activate -cd ./lib/python/ && coverage run -m pytest tests/*.py --junitxml=report.xml && coverage html && coverage report > ./coverage.txt \ No newline at end of file diff --git a/dbrepo-search-service/init/tests/conftest.py b/lib/python/tests/conftest.py similarity index 90% rename from dbrepo-search-service/init/tests/conftest.py rename to lib/python/tests/conftest.py index e2a00b1d86..c906c18fa7 100644 --- a/dbrepo-search-service/init/tests/conftest.py +++ b/lib/python/tests/conftest.py @@ -1,9 +1,8 @@ +import json import logging import os import pytest -import json - from testcontainers.opensearch import OpenSearchContainer @@ -15,7 +14,7 @@ def session(request): :return: The OpenSearch container """ logging.debug("[fixture] creating opensearch container") - container = OpenSearchContainer() + container = OpenSearchContainer("opensearchproject/opensearch:2.10.0") logging.debug("[fixture] starting opensearch container") container.start() @@ -41,7 +40,7 @@ def cleanup(request, session): :return: """ logging.info("[fixture] clean schema") - with open('./database.json', 'r') as f: + with open('./tests/opensearch/database.json', 'r') as f: if session.get_client().indices.exists(index="database"): session.get_client().indices.delete(index="database") session.get_client().indices.create(index="database", body=json.load(f)) diff --git a/lib/python/tests/keycloak/rs256.key b/lib/python/tests/keycloak/rs256.key new file mode 100644 index 0000000000..86b3eaf5c6 --- /dev/null +++ b/lib/python/tests/keycloak/rs256.key @@ -0,0 +1,3 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQABAoIBADNcMt6hAHub4JTAYS6Mra0EPRBO2XhWmACBrv3+8ETClXd5475KPLDewgRVtlmtbwU8G8awUXESQgPS9lfiqvQhPreA3cHlm6oP2WMKOEtakr2s8I+frsTBLCo0Ini9RaSzjoVVgS0zofyhASKi+T970MafSj5P3XNb8YBFdXgoYDiA7FXLH6a/+m7LScL+wGcFMAAeYESxZbMQLfH3v8L+4EcTraiwjLG17ZdlF3dpybMyUSse6ZQ/PdlyvBuzzLXhN6Ce2gd9ATfS+YWTzo7Yf+GU+ex5bIpVOfHqtuM/hyq7YGKENClsXwNZIAoFnvGCbvECAfgyapVrD30IfykCgYEA0rgsSZ82pxT40NxwgBD1g9lbNVBKXphRB/3S078qusUzJjT7AldEj4imGPhAbI7bI8gAeWJsp1XJWkjM8ktaVrh+NQl7p8e9OPh0pQF/5Bdg8ajbjXESpjnaU66pVYRQy/d+jNli/YRAHX5RUfsBl+6W4+WSVMGmKBiqJsur+ecCgYEAz1YVXClcmUnyZem5B+2E9noIzjF6ROE+jIb6rawM85P3Xd0lXtECQavtxw+Qk7I32qOwrxl1UpK2foVel3pazi+4OpMfmqtYGenRP1Zk1cZwrDo0cIemTDGjj3kJ8tYn12CGolFQpJZgK6OHzvG0tOxI5VZgjIViWNPe1PGWXtUCgYEAxXGNDe8BZs1f11S2lUlOw5yGug3hoYFXbAWJ5p7Ziuf8ZXB/QlJDC7se54a11wKEk6Jzz0lKRgE8CjzszJuOqnN0zn10QGIIC7nCklo1W6QMUmPGVWH994N976tZP6gbjQL6sT+AYcvpx7j0ubxYYeRNvnz+ACzzY964kGGHY0ECgYEAumlwPPNnMN7+VEjGNm2D7UMdJZ3wi3tkjF5ThdA5uMohTsAk+FG80KSu3RmOaGyEsUwY7+VYyYvlDm4E9PZqLBVVczyR3rMNPAcwPd0EPfvzk7WlLkOX7ct3fehaXH3VRlyfz9KCSeh1wOZ/lT1VtpD2nVOC7PSDzs92+kfXZZ0CgYAnrD1y4skgXkdwolZ3unn3EFyGm2d+X5aMTHwQPdWxqoNIAl/9wdghlzihwnPhhsxq1WzlxuC3V2IMrNPtRx70Mi+FbSmR5m4Xx5RptgMtMlwno+L40PzNJgMjHGjt0wcx3Vel8wuohDtnqMyS7P5nG1/TQx0Cyzwn7QOXlNpgbQ== +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/lib/python/tests/keycloak/rsa256.pkey b/lib/python/tests/keycloak/rsa256.pkey new file mode 100644 index 0000000000..857dfb22be --- /dev/null +++ b/lib/python/tests/keycloak/rsa256.pkey @@ -0,0 +1,3 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB +-----END PUBLIC KEY----- diff --git a/lib/python/tests/opensearch/database.json b/lib/python/tests/opensearch/database.json new file mode 100644 index 0000000000..175a50dd9b --- /dev/null +++ b/lib/python/tests/opensearch/database.json @@ -0,0 +1,1418 @@ +{ + "aliases": {}, + "mappings": { + "properties": { + "accesses": { + "properties": { + "created": { + "type": "date" + }, + "type": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "user": { + "properties": { + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "qualified_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "orcid": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "username": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + } + } + }, + "contact": { + "properties": { + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "qualified_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "orcid": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "username": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "container": { + "properties": { + "created": { + "type": "date" + }, + "host": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "image": { + "properties": { + "dialect": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "driver_class": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "registry": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "version": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "internal_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "port": { + "type": "long" + }, + "ui_host": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "ui_port": { + "type": "long" + } + } + }, + "created": { + "type": "date" + }, + "owner": { + "properties": { + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "qualified_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "orcid": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "username": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "exchange_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "identifiers": { + "properties": { + "created": { + "type": "date" + }, + "owner": { + "properties": { + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "qualified_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "orcid": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "username": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "owners": { + "properties": { + "owner_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "name_identifier": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "name_identifier_scheme": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "name_identifier_scheme_uri": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "name_type": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "database_id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "descriptions": { + "properties": { + "description": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "licenses": { + "properties": { + "description": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "identifier": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "uri": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "publication_day": { + "type": "long" + }, + "publication_month": { + "type": "long" + }, + "publication_year": { + "type": "long" + }, + "publisher": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "query": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "query_normalized": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "status": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "titles": { + "properties": { + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "title": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "type": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "view_id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "image": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "internal_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "is_public": { + "type": "boolean" + }, + "is_schema_public": { + "type": "boolean" + }, + "name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "tables": { + "properties": { + "columns": { + "properties": { + "auto_generated": { + "type": "boolean" + }, + "type": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "d": { + "type": "long" + }, + "database_id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "internal_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "is_null_allowed": { + "type": "boolean" + }, + "is_public": { + "type": "boolean" + }, + "is_schema_public": { + "type": "boolean" + }, + "mean": { + "type": "float" + }, + "name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "size": { + "type": "long" + }, + "std_dev": { + "type": "float" + }, + "table_id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "constraints": { + "properties": { + "primary_key": { + "properties": { + "column": { + "properties": { + "database_id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "table_id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "table": { + "properties": { + "database_id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + } + } + }, + "uniques": { + "properties": { + "columns": { + "properties": { + "database_id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "table_id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "table": { + "properties": { + "database_id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + } + } + } + } + }, + "created": { + "type": "date" + }, + "owner": { + "properties": { + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "qualified_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "orcid": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "username": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "data_length": { + "type": "long" + }, + "database_id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "description": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "internal_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "is_public": { + "type": "boolean" + }, + "is_schema_public": { + "type": "boolean" + }, + "is_versioned": { + "type": "boolean" + }, + "name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "num_rows": { + "type": "long" + }, + "queue_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "routing_key": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "views": { + "properties": { + "columns": { + "properties": { + "auto_generated": { + "type": "boolean" + }, + "type": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "database_id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "internal_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "is_null_allowed": { + "type": "boolean" + }, + "is_public": { + "type": "boolean" + }, + "is_schema_public": { + "type": "boolean" + }, + "name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "created": { + "type": "date" + }, + "owner": { + "properties": { + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "qualified_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "orcid": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "username": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "database_id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "identifiers": { + "properties": { + "created": { + "type": "date" + }, + "owner": { + "properties": { + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "qualified_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "orcid": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "username": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "owners": { + "properties": { + "owner_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "name_identifier": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "name_identifier_scheme": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "name_identifier_scheme_uri": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "name_type": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "database_id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "descriptions": { + "properties": { + "description": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "licenses": { + "properties": { + "description": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "identifier": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "uri": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "publication_day": { + "type": "long" + }, + "publication_month": { + "type": "long" + }, + "publication_year": { + "type": "long" + }, + "publisher": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "query": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "query_normalized": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "status": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "titles": { + "properties": { + "id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "title": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "type": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "view_id": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + }, + "initial_view": { + "type": "boolean" + }, + "internal_name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "is_public": { + "type": "boolean" + }, + "is_schema_public": { + "type": "boolean" + }, + "name": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "query": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "query_hash": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + } + } + }, + "settings": { + "index": { + "number_of_shards": "1", + "number_of_replicas": "1" + } + } +} \ No newline at end of file diff --git a/dbrepo-analyse-service/tests/test_s3_client.py b/lib/python/tests/test_integration_core_storage_client.py similarity index 98% rename from dbrepo-analyse-service/tests/test_s3_client.py rename to lib/python/tests/test_integration_core_storage_client.py index cbc47a6740..c69fce877f 100644 --- a/dbrepo-analyse-service/tests/test_s3_client.py +++ b/lib/python/tests/test_integration_core_storage_client.py @@ -4,7 +4,7 @@ from clients.s3_client import S3Client from botocore.exceptions import ClientError -class S3ClientTest(unittest.TestCase): +class StorageServiceClientIntegrationTest(unittest.TestCase): # @Test def test_upload_file_succeeds(self): diff --git a/dbrepo-search-service/init/tests/test_keycloak_client.py b/lib/python/tests/test_unit_core_auth_client.py similarity index 97% rename from dbrepo-search-service/init/tests/test_keycloak_client.py rename to lib/python/tests/test_unit_core_auth_client.py index f52faf78c6..e8296b7993 100644 --- a/dbrepo-search-service/init/tests/test_keycloak_client.py +++ b/lib/python/tests/test_unit_core_auth_client.py @@ -7,7 +7,7 @@ import requests_mock from clients.keycloak_client import KeycloakClient -class JwtTest(unittest.TestCase): +class AuthServiceClientUnitTest(unittest.TestCase): def response(self, username) -> dict: return dict({ diff --git a/dbrepo-search-service/init/tests/test_opensearch_client.py b/lib/python/tests/test_unit_core_search_client.py similarity index 99% rename from dbrepo-search-service/init/tests/test_opensearch_client.py rename to lib/python/tests/test_unit_core_search_client.py index 54ef2340ab..6aeb6f98a7 100644 --- a/dbrepo-search-service/init/tests/test_opensearch_client.py +++ b/lib/python/tests/test_unit_core_search_client.py @@ -16,6 +16,7 @@ req = Database(id="209acf92-5c9b-4633-ad99-113c86f6e948", exchange_name="dbrepo", is_public=True, is_schema_public=True, + is_dashboard_enabled=True, container=ContainerBrief(id="7efe8b27-6cdc-4387-80e3-92ee28f4a7c5", name="MariaDB", internal_name="mariadb", @@ -53,7 +54,7 @@ req = Database(id="209acf92-5c9b-4633-ad99-113c86f6e948", )]) -class OpenSearchClientTest(unittest.TestCase): +class SearchServiceClientUnitTest(unittest.TestCase): def test_update_database_succeeds(self): req.tables = [Table(id="f94a6164-cad4-4873-a9fd-3fe5313b2e95", diff --git a/lib/python/tests/test_unit_database.py b/lib/python/tests/test_unit_database.py index 54a41cfbd7..ee4d0aeae4 100644 --- a/lib/python/tests/test_unit_database.py +++ b/lib/python/tests/test_unit_database.py @@ -76,6 +76,7 @@ class DatabaseUnitTest(unittest.TestCase): internal_name='test_abcd', is_public=True, is_schema_public=True, + is_dashboard_enabled=True, container=ContainerBrief( id="44d811a8-4019-46ba-bd57-ea10a2eb0c74", name='MariaDB Galera 11.1.3', @@ -134,6 +135,7 @@ class DatabaseUnitTest(unittest.TestCase): internal_name='test_abcd', is_public=True, is_schema_public=True, + is_dashboard_enabled=True, container=ContainerBrief( id="44d811a8-4019-46ba-bd57-ea10a2eb0c74", name='MariaDB Galera 11.1.3', @@ -261,6 +263,7 @@ class DatabaseUnitTest(unittest.TestCase): internal_name='test_abcd', is_public=True, is_schema_public=True, + is_dashboard_enabled=True, container=ContainerBrief( id="44d811a8-4019-46ba-bd57-ea10a2eb0c74", name='MariaDB Galera 11.1.3', @@ -379,6 +382,7 @@ class DatabaseUnitTest(unittest.TestCase): internal_name='test_abcd', is_public=True, is_schema_public=True, + is_dashboard_enabled=True, container=ContainerBrief( id="44d811a8-4019-46ba-bd57-ea10a2eb0c74", name='MariaDB Galera 11.1.3', diff --git a/lib/python/tests/test_unit_query.py b/lib/python/tests/test_unit_query.py index 528d6775a7..719847fbfe 100644 --- a/lib/python/tests/test_unit_query.py +++ b/lib/python/tests/test_unit_query.py @@ -23,6 +23,7 @@ class QueryUnitTest(unittest.TestCase): internal_name='test_abcd', is_public=True, is_schema_public=True, + is_dashboard_enabled=True, tables=[Table(id="029d773f-f98b-40c0-ab22-b8b1635d4fbc", name="Some Table", description="Test Table", diff --git a/lib/python/tests/test_unit_table.py b/lib/python/tests/test_unit_table.py index c67b54c614..8aa67d924e 100644 --- a/lib/python/tests/test_unit_table.py +++ b/lib/python/tests/test_unit_table.py @@ -1105,7 +1105,10 @@ class TableUnitTest(unittest.TestCase): def test_analyse_table_statistics_succeeds(self): with requests_mock.Mocker() as mock: exp = TableStatistics( - columns={"id": ColumnStatistic(val_min=1.0, val_max=9.0, mean=5.0, median=5.0, std_dev=2.73)}) + total_columns=1, + total_rows=1000, + columns={ + "id": ColumnStatistic(name="id", val_min=1.0, val_max=9.0, mean=5.0, median=5.0, std_dev=2.73)}) # mock mock.get( '/api/analyse/database/6bd39359-b154-456d-b9c2-caa516a45732/table/b3230b86-4743-498d-9015-3fad58049692/statistics', diff --git a/lib/python/tests/test_unit_view.py b/lib/python/tests/test_unit_view.py index cb26eeaba8..a3319f1fad 100644 --- a/lib/python/tests/test_unit_view.py +++ b/lib/python/tests/test_unit_view.py @@ -22,6 +22,7 @@ class ViewUnitTest(unittest.TestCase): internal_name='test_abcd', is_public=True, is_schema_public=True, + is_dashboard_enabled=True, tables=[Table(id="029d773f-f98b-40c0-ab22-b8b1635d4fbc", name="Some Table", description="Test Table", diff --git a/make/build.mk b/make/build.mk index 968bd94d55..48e9212a6a 100644 --- a/make/build.mk +++ b/make/build.mk @@ -2,8 +2,9 @@ .PHONY: build-images build-images: ## Build Docker images. - docker build --network=host -t dbrepo-metadata-service:build --target build dbrepo-metadata-service + docker build --network=host -t dbrepo-core:build --target build ./lib/java/dbrepo-core docker build --network=host -t dbrepo-data-service:build --target build dbrepo-data-service + docker build --network=host -t dbrepo-metadata-service:build --target build dbrepo-metadata-service docker compose build --parallel .PHONY: build-data-service @@ -28,14 +29,20 @@ build-lib: ## Build the Python Library. rm -rf ./dbrepo-analyse-service/venv/ ./dbrepo-analyse-service/Pipfile.lock ./dbrepo-analyse-service/lib/* rm -rf ./dbrepo-search-service/venv/ ./dbrepo-search-service/Pipfile.lock ./dbrepo-search-service/lib/* rm -rf ./dbrepo-search-service/init/venv/ ./dbrepo-search-service/init/Pipfile.lock ./dbrepo-search-service/init/lib/* + rm -rf ./dbrepo-dashboard-service/venv/ ./dbrepo-dashboard-service/Pipfile.lock ./dbrepo-dashboard-service/lib/* + rm -rf ./dbrepo-dashboard-service/init/venv/ ./dbrepo-dashboard-service/init/Pipfile.lock ./dbrepo-dashboard-service/init/lib/* python3 -m build --sdist ./lib/python python3 -m build --wheel ./lib/python cp -r ./lib/python/dist/dbrepo-${APP_VERSION}* ./dbrepo-analyse-service/lib - (cd ./dbrepo-analyse-service && PIPENV_IGNORE_VIRTUALENVS=1 pipenv install --dev) + (cd ./dbrepo-analyse-service && python3 -m venv venv && PIPENV_IGNORE_VIRTUALENVS=1 pipenv install --dev) cp -r ./lib/python/dist/dbrepo-${APP_VERSION}* ./dbrepo-search-service/lib - (cd ./dbrepo-search-service && PIPENV_IGNORE_VIRTUALENVS=1 pipenv install --dev) + (cd ./dbrepo-search-service && python3 -m venv venv && PIPENV_IGNORE_VIRTUALENVS=1 pipenv install --dev) cp -r ./lib/python/dist/dbrepo-${APP_VERSION}* ./dbrepo-search-service/init/lib - (cd ./dbrepo-search-service/init && PIPENV_IGNORE_VIRTUALENVS=1 pipenv install --dev) + (cd ./dbrepo-search-service/init && python3 -m venv venv && PIPENV_IGNORE_VIRTUALENVS=1 pipenv install --dev) + cp -r ./lib/python/dist/dbrepo-${APP_VERSION}* ./dbrepo-dashboard-service/lib + (cd ./dbrepo-dashboard-service && python3 -m venv venv && PIPENV_IGNORE_VIRTUALENVS=1 pipenv install --dev) + cp -r ./lib/python/dist/dbrepo-${APP_VERSION}* ./dbrepo-dashboard-service/init/lib + (cd ./dbrepo-dashboard-service/init && python3 -m venv venv && PIPENV_IGNORE_VIRTUALENVS=1 pipenv install --dev) .PHONY: build-helm build-helm: ## Build the DBRepo and DBRepo MariaDB Galera Helm Charts. diff --git a/make/rel.mk b/make/rel.mk index c98668f08b..f5969e3cbf 100644 --- a/make/rel.mk +++ b/make/rel.mk @@ -3,28 +3,30 @@ .PHONY: tag-images tag-images: build-images ## Tag the docker images. docker tag dbrepo-analyse-service:latest "${REPOSITORY_URL}/analyse-service:${APP_VERSION}${BUILD_VERSION}" + docker tag dbrepo-auth-service-init:latest "${REPOSITORY_URL}/auth-service-init:${APP_VERSION}${BUILD_VERSION}" docker tag dbrepo-dashboard-service:latest "${REPOSITORY_URL}/dashboard-service:${APP_VERSION}${BUILD_VERSION}" - docker tag dbrepo-ui:latest "${REPOSITORY_URL}/ui:${APP_VERSION}${BUILD_VERSION}" + docker tag dbrepo-dashboard-service-init:latest "${REPOSITORY_URL}/dashboard-service-init:${APP_VERSION}${BUILD_VERSION}" docker tag dbrepo-data-service:latest "${REPOSITORY_URL}/data-service:${APP_VERSION}${BUILD_VERSION}" - docker tag dbrepo-auth-service-init:latest "${REPOSITORY_URL}/auth-service-init:${APP_VERSION}${BUILD_VERSION}" docker tag dbrepo-metadata-service:latest "${REPOSITORY_URL}/metadata-service:${APP_VERSION}${BUILD_VERSION}" docker tag dbrepo-search-db:latest "${REPOSITORY_URL}/search-db:${APP_VERSION}${BUILD_VERSION}" docker tag dbrepo-search-service:latest "${REPOSITORY_URL}/search-service:${APP_VERSION}${BUILD_VERSION}" docker tag dbrepo-search-service-init:latest "${REPOSITORY_URL}/search-service-init:${APP_VERSION}${BUILD_VERSION}" docker tag dbrepo-storage-service-init:latest "${REPOSITORY_URL}/storage-service-init:${APP_VERSION}${BUILD_VERSION}" + docker tag dbrepo-ui:latest "${REPOSITORY_URL}/ui:${APP_VERSION}${BUILD_VERSION}" .PHONY: release-images release-images: tag-images ## Release the docker images. docker push "${REPOSITORY_URL}/analyse-service:${APP_VERSION}${BUILD_VERSION}" + docker push "${REPOSITORY_URL}/auth-service-init:${APP_VERSION}${BUILD_VERSION}" docker push "${REPOSITORY_URL}/dashboard-service:${APP_VERSION}${BUILD_VERSION}" - docker push "${REPOSITORY_URL}/ui:${APP_VERSION}${BUILD_VERSION}" + docker push "${REPOSITORY_URL}/dashboard-service-init:${APP_VERSION}${BUILD_VERSION}" docker push "${REPOSITORY_URL}/data-service:${APP_VERSION}${BUILD_VERSION}" - docker push "${REPOSITORY_URL}/auth-service-init:${APP_VERSION}${BUILD_VERSION}" docker push "${REPOSITORY_URL}/search-db:${APP_VERSION}${BUILD_VERSION}" docker push "${REPOSITORY_URL}/metadata-service:${APP_VERSION}${BUILD_VERSION}" docker push "${REPOSITORY_URL}/search-service:${APP_VERSION}${BUILD_VERSION}" docker push "${REPOSITORY_URL}/search-service-init:${APP_VERSION}${BUILD_VERSION}" docker push "${REPOSITORY_URL}/storage-service-init:${APP_VERSION}${BUILD_VERSION}" + docker push "${REPOSITORY_URL}/ui:${APP_VERSION}${BUILD_VERSION}" .PHONY: release-helm release-helm: gen-helm-doc ## Release the DBRepo and DBRepo MariaDB Galera Helm charts. diff --git a/mkdocs.yml b/mkdocs.yml index 536eed294e..bf9e14a9dd 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,5 +1,5 @@ site_name: Database Repository -site_url: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.7/ +site_url: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8/ repo_url: https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services repo_name: fda-services site_author: Research Unit Data Science, Technische Universität Wien @@ -18,12 +18,12 @@ nav: - Overview: concepts/index.md - Authentication: concepts/authentication.md - Data Versioning: concepts/data-versioning.md + - Dashboards: concepts/dashboards.md - Data Visibility: concepts/data-visibility.md - Messaging: concepts/messaging.md - Monitoring: concepts/monitoring.md - Persistent Identifier: concepts/pid.md - Search: concepts/search.md - - User Interface: concepts/ui.md - API: - Overview: api/index.md - Databases: @@ -37,16 +37,14 @@ nav: - Analyse Service: api/analyse-service.md - Auth Service: api/auth-service.md - Broker Service: api/broker-service.md - - Dashboard Service: api/dashboard-service.md - Data Service: api/data-service.md - Gateway Service: api/gateway-service.md - Identity Service: api/identity-service.md - Metadata Service: api/metadata-service.md - Search Service: api/search-service.md - Storage Service: api/storage-service.md - - Upload Service: api/upload-service.md - UI: - - Customization: api/ui.md + - Repository: api/ui.md - Examples: - Air Quality Data: examples/air.md - COVID-19 Data: examples/covid-19.md @@ -120,9 +118,9 @@ markdown_extensions: custom_icons: - .docs/overrides/.icons extra: - homepage: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.7/ + homepage: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8/ version: - default: 1.7 + default: 1.8 provider: mike social: - icon: simple/artifacthub diff --git a/sonar-project.properties b/sonar-project.properties index 0ec728cec7..90e7004f97 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -2,7 +2,7 @@ sonar.projectKey=fair-data-austria-db-repository_fda-services_a57fa043-ab99-4cdd-a721-162d9a916d77 sonar.host.url=https://s39.datalab.tuwien.ac.at # project -sonar.projectVersion=1.7.3 +sonar.projectVersion=1.8.0 # general sonar.qualitygate.wait=true sonar.projectCreation.mainBranchName=master diff --git a/versions.json b/versions.json index 95ca2a62a6..0fafe8664c 100644 --- a/versions.json +++ b/versions.json @@ -1,4 +1,9 @@ [ + { + "version": "1.8", + "title": "1.8", + "aliases": [] + }, { "version": "1.7", "title": "1.7", -- GitLab